From 3b82f33f38fae548afacc73d2d821ffd47cd2ad4 Mon Sep 17 00:00:00 2001 From: Daniel Bulant Date: Tue, 7 Jun 2022 09:34:48 +0200 Subject: [PATCH] vault backup: 2022-06-07 09:34:48 --- notes/.obsidian/plugins/dataview/main.js | 30137 +-- .../.obsidian/plugins/dataview/manifest.json | 2 +- notes/.obsidian/plugins/dataview/styles.css | 56 +- .../plugins/obsidian-admonition/data.json | 2 +- .../plugins/obsidian-admonition/main.js | 10 +- .../plugins/obsidian-admonition/manifest.json | 2 +- .../obsidian-chartsview-plugin/main.js | 153655 +-------------- .../obsidian-chartsview-plugin/manifest.json | 2 +- .../obsidian-excalidraw-plugin/data.json | 3 +- .../obsidian-excalidraw-plugin/main.js | 14 +- .../obsidian-excalidraw-plugin/manifest.json | 2 +- .../obsidian-filename-heading-sync/main.js | 56 +- .../manifest.json | 4 +- notes/.obsidian/plugins/obsidian-git/main.js | 163 +- .../plugins/obsidian-git/manifest.json | 2 +- .../plugins/obsidian-kanban/manifest.json | 2 +- .../plugins/obsidian-kanban/styles.css | 2 +- .../plugins/open-note-to-window-title/main.js | 19 +- .../open-note-to-window-title/manifest.json | 2 +- 19 files changed, 17821 insertions(+), 166314 deletions(-) diff --git a/notes/.obsidian/plugins/dataview/main.js b/notes/.obsidian/plugins/dataview/main.js index f5ab7b8..e89bdb1 100644 --- a/notes/.obsidian/plugins/dataview/main.js +++ b/notes/.obsidian/plugins/dataview/main.js @@ -17,6 +17,16576 @@ function _mergeNamespaces(n, m) { return Object.freeze(n); } +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +function commonjsRequire (path) { + throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.'); +} + +var luxon = {}; + +Object.defineProperty(luxon, '__esModule', { value: true }); + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; +} + +function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); +} + +function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + + _setPrototypeOf(subClass, superClass); +} + +function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); +} + +function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); +} + +function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); + return true; + } catch (e) { + return false; + } +} + +function _construct(Parent, args, Class) { + if (_isNativeReflectConstruct()) { + _construct = Reflect.construct; + } else { + _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) _setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + + return _construct.apply(null, arguments); +} + +function _isNativeFunction(fn) { + return Function.toString.call(fn).indexOf("[native code]") !== -1; +} + +function _wrapNativeSuper(Class) { + var _cache = typeof Map === "function" ? new Map() : undefined; + + _wrapNativeSuper = function _wrapNativeSuper(Class) { + if (Class === null || !_isNativeFunction(Class)) return Class; + + if (typeof Class !== "function") { + throw new TypeError("Super expression must either be null or a function"); + } + + if (typeof _cache !== "undefined") { + if (_cache.has(Class)) return _cache.get(Class); + + _cache.set(Class, Wrapper); + } + + function Wrapper() { + return _construct(Class, arguments, _getPrototypeOf(this).constructor); + } + + Wrapper.prototype = Object.create(Class.prototype, { + constructor: { + value: Wrapper, + enumerable: false, + writable: true, + configurable: true + } + }); + return _setPrototypeOf(Wrapper, Class); + }; + + return _wrapNativeSuper(Class); +} + +function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; +} + +function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; + var i = 0; + return function () { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +// these aren't really private, but nor are they really useful to document + +/** + * @private + */ +var LuxonError = /*#__PURE__*/function (_Error) { + _inheritsLoose(LuxonError, _Error); + + function LuxonError() { + return _Error.apply(this, arguments) || this; + } + + return LuxonError; +}( /*#__PURE__*/_wrapNativeSuper(Error)); +/** + * @private + */ + + +var InvalidDateTimeError = /*#__PURE__*/function (_LuxonError) { + _inheritsLoose(InvalidDateTimeError, _LuxonError); + + function InvalidDateTimeError(reason) { + return _LuxonError.call(this, "Invalid DateTime: " + reason.toMessage()) || this; + } + + return InvalidDateTimeError; +}(LuxonError); +/** + * @private + */ + +var InvalidIntervalError = /*#__PURE__*/function (_LuxonError2) { + _inheritsLoose(InvalidIntervalError, _LuxonError2); + + function InvalidIntervalError(reason) { + return _LuxonError2.call(this, "Invalid Interval: " + reason.toMessage()) || this; + } + + return InvalidIntervalError; +}(LuxonError); +/** + * @private + */ + +var InvalidDurationError = /*#__PURE__*/function (_LuxonError3) { + _inheritsLoose(InvalidDurationError, _LuxonError3); + + function InvalidDurationError(reason) { + return _LuxonError3.call(this, "Invalid Duration: " + reason.toMessage()) || this; + } + + return InvalidDurationError; +}(LuxonError); +/** + * @private + */ + +var ConflictingSpecificationError = /*#__PURE__*/function (_LuxonError4) { + _inheritsLoose(ConflictingSpecificationError, _LuxonError4); + + function ConflictingSpecificationError() { + return _LuxonError4.apply(this, arguments) || this; + } + + return ConflictingSpecificationError; +}(LuxonError); +/** + * @private + */ + +var InvalidUnitError = /*#__PURE__*/function (_LuxonError5) { + _inheritsLoose(InvalidUnitError, _LuxonError5); + + function InvalidUnitError(unit) { + return _LuxonError5.call(this, "Invalid unit " + unit) || this; + } + + return InvalidUnitError; +}(LuxonError); +/** + * @private + */ + +var InvalidArgumentError = /*#__PURE__*/function (_LuxonError6) { + _inheritsLoose(InvalidArgumentError, _LuxonError6); + + function InvalidArgumentError() { + return _LuxonError6.apply(this, arguments) || this; + } + + return InvalidArgumentError; +}(LuxonError); +/** + * @private + */ + +var ZoneIsAbstractError = /*#__PURE__*/function (_LuxonError7) { + _inheritsLoose(ZoneIsAbstractError, _LuxonError7); + + function ZoneIsAbstractError() { + return _LuxonError7.call(this, "Zone is an abstract class") || this; + } + + return ZoneIsAbstractError; +}(LuxonError); + +/** + * @private + */ +var n$1 = "numeric", + s$2 = "short", + l$2 = "long"; +var DATE_SHORT = { + year: n$1, + month: n$1, + day: n$1 +}; +var DATE_MED = { + year: n$1, + month: s$2, + day: n$1 +}; +var DATE_MED_WITH_WEEKDAY = { + year: n$1, + month: s$2, + day: n$1, + weekday: s$2 +}; +var DATE_FULL = { + year: n$1, + month: l$2, + day: n$1 +}; +var DATE_HUGE = { + year: n$1, + month: l$2, + day: n$1, + weekday: l$2 +}; +var TIME_SIMPLE = { + hour: n$1, + minute: n$1 +}; +var TIME_WITH_SECONDS = { + hour: n$1, + minute: n$1, + second: n$1 +}; +var TIME_WITH_SHORT_OFFSET = { + hour: n$1, + minute: n$1, + second: n$1, + timeZoneName: s$2 +}; +var TIME_WITH_LONG_OFFSET = { + hour: n$1, + minute: n$1, + second: n$1, + timeZoneName: l$2 +}; +var TIME_24_SIMPLE = { + hour: n$1, + minute: n$1, + hourCycle: "h23" +}; +var TIME_24_WITH_SECONDS = { + hour: n$1, + minute: n$1, + second: n$1, + hourCycle: "h23" +}; +var TIME_24_WITH_SHORT_OFFSET = { + hour: n$1, + minute: n$1, + second: n$1, + hourCycle: "h23", + timeZoneName: s$2 +}; +var TIME_24_WITH_LONG_OFFSET = { + hour: n$1, + minute: n$1, + second: n$1, + hourCycle: "h23", + timeZoneName: l$2 +}; +var DATETIME_SHORT = { + year: n$1, + month: n$1, + day: n$1, + hour: n$1, + minute: n$1 +}; +var DATETIME_SHORT_WITH_SECONDS = { + year: n$1, + month: n$1, + day: n$1, + hour: n$1, + minute: n$1, + second: n$1 +}; +var DATETIME_MED = { + year: n$1, + month: s$2, + day: n$1, + hour: n$1, + minute: n$1 +}; +var DATETIME_MED_WITH_SECONDS = { + year: n$1, + month: s$2, + day: n$1, + hour: n$1, + minute: n$1, + second: n$1 +}; +var DATETIME_MED_WITH_WEEKDAY = { + year: n$1, + month: s$2, + day: n$1, + weekday: s$2, + hour: n$1, + minute: n$1 +}; +var DATETIME_FULL = { + year: n$1, + month: l$2, + day: n$1, + hour: n$1, + minute: n$1, + timeZoneName: s$2 +}; +var DATETIME_FULL_WITH_SECONDS = { + year: n$1, + month: l$2, + day: n$1, + hour: n$1, + minute: n$1, + second: n$1, + timeZoneName: s$2 +}; +var DATETIME_HUGE = { + year: n$1, + month: l$2, + day: n$1, + weekday: l$2, + hour: n$1, + minute: n$1, + timeZoneName: l$2 +}; +var DATETIME_HUGE_WITH_SECONDS = { + year: n$1, + month: l$2, + day: n$1, + weekday: l$2, + hour: n$1, + minute: n$1, + second: n$1, + timeZoneName: l$2 +}; + +/** + * @private + */ +// TYPES + +function isUndefined(o) { + return typeof o === "undefined"; +} +function isNumber(o) { + return typeof o === "number"; +} +function isInteger(o) { + return typeof o === "number" && o % 1 === 0; +} +function isString(o) { + return typeof o === "string"; +} +function isDate(o) { + return Object.prototype.toString.call(o) === "[object Date]"; +} // CAPABILITIES + +function hasRelative() { + try { + return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat; + } catch (e) { + return false; + } +} // OBJECTS AND ARRAYS + +function maybeArray(thing) { + return Array.isArray(thing) ? thing : [thing]; +} +function bestBy(arr, by, compare) { + if (arr.length === 0) { + return undefined; + } + + return arr.reduce(function (best, next) { + var pair = [by(next), next]; + + if (!best) { + return pair; + } else if (compare(best[0], pair[0]) === best[0]) { + return best; + } else { + return pair; + } + }, null)[1]; +} +function pick(obj, keys) { + return keys.reduce(function (a, k) { + a[k] = obj[k]; + return a; + }, {}); +} +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} // NUMBERS AND STRINGS + +function integerBetween(thing, bottom, top) { + return isInteger(thing) && thing >= bottom && thing <= top; +} // x % n but takes the sign of n instead of x + +function floorMod(x, n) { + return x - n * Math.floor(x / n); +} +function padStart(input, n) { + if (n === void 0) { + n = 2; + } + + var isNeg = input < 0; + var padded; + + if (isNeg) { + padded = "-" + ("" + -input).padStart(n, "0"); + } else { + padded = ("" + input).padStart(n, "0"); + } + + return padded; +} +function parseInteger(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseInt(string, 10); + } +} +function parseFloating(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseFloat(string); + } +} +function parseMillis(fraction) { + // Return undefined (instead of 0) in these cases, where fraction is not set + if (isUndefined(fraction) || fraction === null || fraction === "") { + return undefined; + } else { + var f = parseFloat("0." + fraction) * 1000; + return Math.floor(f); + } +} +function roundTo(number, digits, towardZero) { + if (towardZero === void 0) { + towardZero = false; + } + + var factor = Math.pow(10, digits), + rounder = towardZero ? Math.trunc : Math.round; + return rounder(number * factor) / factor; +} // DATE BASICS + +function isLeapYear(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); +} +function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; +} +function daysInMonth(year, month) { + var modMonth = floorMod(month - 1, 12) + 1, + modYear = year + (month - modMonth) / 12; + + if (modMonth === 2) { + return isLeapYear(modYear) ? 29 : 28; + } else { + return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1]; + } +} // covert a calendar object to a local timestamp (epoch, but with the offset baked in) + +function objToLocalTS(obj) { + var d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond); // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that + + if (obj.year < 100 && obj.year >= 0) { + d = new Date(d); + d.setUTCFullYear(d.getUTCFullYear() - 1900); + } + + return +d; +} +function weeksInWeekYear(weekYear) { + var p1 = (weekYear + Math.floor(weekYear / 4) - Math.floor(weekYear / 100) + Math.floor(weekYear / 400)) % 7, + last = weekYear - 1, + p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7; + return p1 === 4 || p2 === 3 ? 53 : 52; +} +function untruncateYear(year) { + if (year > 99) { + return year; + } else return year > 60 ? 1900 + year : 2000 + year; +} // PARSING + +function parseZoneInfo(ts, offsetFormat, locale, timeZone) { + if (timeZone === void 0) { + timeZone = null; + } + + var date = new Date(ts), + intlOpts = { + hourCycle: "h23", + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit" + }; + + if (timeZone) { + intlOpts.timeZone = timeZone; + } + + var modified = _extends({ + timeZoneName: offsetFormat + }, intlOpts); + + var parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(function (m) { + return m.type.toLowerCase() === "timezonename"; + }); + return parsed ? parsed.value : null; +} // signedOffset('-5', '30') -> -330 + +function signedOffset(offHourStr, offMinuteStr) { + var offHour = parseInt(offHourStr, 10); // don't || this because we want to preserve -0 + + if (Number.isNaN(offHour)) { + offHour = 0; + } + + var offMin = parseInt(offMinuteStr, 10) || 0, + offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin; + return offHour * 60 + offMinSigned; +} // COERCION + +function asNumber(value) { + var numericValue = Number(value); + if (typeof value === "boolean" || value === "" || Number.isNaN(numericValue)) throw new InvalidArgumentError("Invalid unit value " + value); + return numericValue; +} +function normalizeObject(obj, normalizer) { + var normalized = {}; + + for (var u in obj) { + if (hasOwnProperty(obj, u)) { + var v = obj[u]; + if (v === undefined || v === null) continue; + normalized[normalizer(u)] = asNumber(v); + } + } + + return normalized; +} +function formatOffset(offset, format) { + var hours = Math.trunc(Math.abs(offset / 60)), + minutes = Math.trunc(Math.abs(offset % 60)), + sign = offset >= 0 ? "+" : "-"; + + switch (format) { + case "short": + return "" + sign + padStart(hours, 2) + ":" + padStart(minutes, 2); + + case "narrow": + return "" + sign + hours + (minutes > 0 ? ":" + minutes : ""); + + case "techie": + return "" + sign + padStart(hours, 2) + padStart(minutes, 2); + + default: + throw new RangeError("Value format " + format + " is out of range for property format"); + } +} +function timeObject(obj) { + return pick(obj, ["hour", "minute", "second", "millisecond"]); +} +var ianaRegex = /[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/; + +/** + * @private + */ + + +var monthsLong = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; +var monthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; +var monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]; +function months(length) { + switch (length) { + case "narrow": + return [].concat(monthsNarrow); + + case "short": + return [].concat(monthsShort); + + case "long": + return [].concat(monthsLong); + + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; + + case "2-digit": + return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; + + default: + return null; + } +} +var weekdaysLong = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; +var weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; +var weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"]; +function weekdays(length) { + switch (length) { + case "narrow": + return [].concat(weekdaysNarrow); + + case "short": + return [].concat(weekdaysShort); + + case "long": + return [].concat(weekdaysLong); + + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7"]; + + default: + return null; + } +} +var meridiems = ["AM", "PM"]; +var erasLong = ["Before Christ", "Anno Domini"]; +var erasShort = ["BC", "AD"]; +var erasNarrow = ["B", "A"]; +function eras(length) { + switch (length) { + case "narrow": + return [].concat(erasNarrow); + + case "short": + return [].concat(erasShort); + + case "long": + return [].concat(erasLong); + + default: + return null; + } +} +function meridiemForDateTime(dt) { + return meridiems[dt.hour < 12 ? 0 : 1]; +} +function weekdayForDateTime(dt, length) { + return weekdays(length)[dt.weekday - 1]; +} +function monthForDateTime(dt, length) { + return months(length)[dt.month - 1]; +} +function eraForDateTime(dt, length) { + return eras(length)[dt.year < 0 ? 0 : 1]; +} +function formatRelativeTime(unit, count, numeric, narrow) { + if (numeric === void 0) { + numeric = "always"; + } + + if (narrow === void 0) { + narrow = false; + } + + var units = { + years: ["year", "yr."], + quarters: ["quarter", "qtr."], + months: ["month", "mo."], + weeks: ["week", "wk."], + days: ["day", "day", "days"], + hours: ["hour", "hr."], + minutes: ["minute", "min."], + seconds: ["second", "sec."] + }; + var lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1; + + if (numeric === "auto" && lastable) { + var isDay = unit === "days"; + + switch (count) { + case 1: + return isDay ? "tomorrow" : "next " + units[unit][0]; + + case -1: + return isDay ? "yesterday" : "last " + units[unit][0]; + + case 0: + return isDay ? "today" : "this " + units[unit][0]; + + } + } + + var isInPast = Object.is(count, -0) || count < 0, + fmtValue = Math.abs(count), + singular = fmtValue === 1, + lilUnits = units[unit], + fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit; + return isInPast ? fmtValue + " " + fmtUnit + " ago" : "in " + fmtValue + " " + fmtUnit; +} + +function stringifyTokens(splits, tokenToString) { + var s = ""; + + for (var _iterator = _createForOfIteratorHelperLoose(splits), _step; !(_step = _iterator()).done;) { + var token = _step.value; + + if (token.literal) { + s += token.val; + } else { + s += tokenToString(token.val); + } + } + + return s; +} + +var _macroTokenToFormatOpts = { + D: DATE_SHORT, + DD: DATE_MED, + DDD: DATE_FULL, + DDDD: DATE_HUGE, + t: TIME_SIMPLE, + tt: TIME_WITH_SECONDS, + ttt: TIME_WITH_SHORT_OFFSET, + tttt: TIME_WITH_LONG_OFFSET, + T: TIME_24_SIMPLE, + TT: TIME_24_WITH_SECONDS, + TTT: TIME_24_WITH_SHORT_OFFSET, + TTTT: TIME_24_WITH_LONG_OFFSET, + f: DATETIME_SHORT, + ff: DATETIME_MED, + fff: DATETIME_FULL, + ffff: DATETIME_HUGE, + F: DATETIME_SHORT_WITH_SECONDS, + FF: DATETIME_MED_WITH_SECONDS, + FFF: DATETIME_FULL_WITH_SECONDS, + FFFF: DATETIME_HUGE_WITH_SECONDS +}; +/** + * @private + */ + +var Formatter = /*#__PURE__*/function () { + Formatter.create = function create(locale, opts) { + if (opts === void 0) { + opts = {}; + } + + return new Formatter(locale, opts); + }; + + Formatter.parseFormat = function parseFormat(fmt) { + var current = null, + currentFull = "", + bracketed = false; + var splits = []; + + for (var i = 0; i < fmt.length; i++) { + var c = fmt.charAt(i); + + if (c === "'") { + if (currentFull.length > 0) { + splits.push({ + literal: bracketed, + val: currentFull + }); + } + + current = null; + currentFull = ""; + bracketed = !bracketed; + } else if (bracketed) { + currentFull += c; + } else if (c === current) { + currentFull += c; + } else { + if (currentFull.length > 0) { + splits.push({ + literal: false, + val: currentFull + }); + } + + currentFull = c; + current = c; + } + } + + if (currentFull.length > 0) { + splits.push({ + literal: bracketed, + val: currentFull + }); + } + + return splits; + }; + + Formatter.macroTokenToFormatOpts = function macroTokenToFormatOpts(token) { + return _macroTokenToFormatOpts[token]; + }; + + function Formatter(locale, formatOpts) { + this.opts = formatOpts; + this.loc = locale; + this.systemLoc = null; + } + + var _proto = Formatter.prototype; + + _proto.formatWithSystemDefault = function formatWithSystemDefault(dt, opts) { + if (this.systemLoc === null) { + this.systemLoc = this.loc.redefaultToSystem(); + } + + var df = this.systemLoc.dtFormatter(dt, _extends({}, this.opts, opts)); + return df.format(); + }; + + _proto.formatDateTime = function formatDateTime(dt, opts) { + if (opts === void 0) { + opts = {}; + } + + var df = this.loc.dtFormatter(dt, _extends({}, this.opts, opts)); + return df.format(); + }; + + _proto.formatDateTimeParts = function formatDateTimeParts(dt, opts) { + if (opts === void 0) { + opts = {}; + } + + var df = this.loc.dtFormatter(dt, _extends({}, this.opts, opts)); + return df.formatToParts(); + }; + + _proto.resolvedOptions = function resolvedOptions(dt, opts) { + if (opts === void 0) { + opts = {}; + } + + var df = this.loc.dtFormatter(dt, _extends({}, this.opts, opts)); + return df.resolvedOptions(); + }; + + _proto.num = function num(n, p) { + if (p === void 0) { + p = 0; + } + + // we get some perf out of doing this here, annoyingly + if (this.opts.forceSimple) { + return padStart(n, p); + } + + var opts = _extends({}, this.opts); + + if (p > 0) { + opts.padTo = p; + } + + return this.loc.numberFormatter(opts).format(n); + }; + + _proto.formatDateTimeFromString = function formatDateTimeFromString(dt, fmt) { + var _this = this; + + var knownEnglish = this.loc.listingMode() === "en", + useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory", + string = function string(opts, extract) { + return _this.loc.extract(dt, opts, extract); + }, + formatOffset = function formatOffset(opts) { + if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) { + return "Z"; + } + + return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : ""; + }, + meridiem = function meridiem() { + return knownEnglish ? meridiemForDateTime(dt) : string({ + hour: "numeric", + hourCycle: "h12" + }, "dayperiod"); + }, + month = function month(length, standalone) { + return knownEnglish ? monthForDateTime(dt, length) : string(standalone ? { + month: length + } : { + month: length, + day: "numeric" + }, "month"); + }, + weekday = function weekday(length, standalone) { + return knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? { + weekday: length + } : { + weekday: length, + month: "long", + day: "numeric" + }, "weekday"); + }, + maybeMacro = function maybeMacro(token) { + var formatOpts = Formatter.macroTokenToFormatOpts(token); + + if (formatOpts) { + return _this.formatWithSystemDefault(dt, formatOpts); + } else { + return token; + } + }, + era = function era(length) { + return knownEnglish ? eraForDateTime(dt, length) : string({ + era: length + }, "era"); + }, + tokenToString = function tokenToString(token) { + // Where possible: http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles + switch (token) { + // ms + case "S": + return _this.num(dt.millisecond); + + case "u": // falls through + + case "SSS": + return _this.num(dt.millisecond, 3); + // seconds + + case "s": + return _this.num(dt.second); + + case "ss": + return _this.num(dt.second, 2); + // fractional seconds + + case "uu": + return _this.num(Math.floor(dt.millisecond / 10), 2); + + case "uuu": + return _this.num(Math.floor(dt.millisecond / 100)); + // minutes + + case "m": + return _this.num(dt.minute); + + case "mm": + return _this.num(dt.minute, 2); + // hours + + case "h": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12); + + case "hh": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2); + + case "H": + return _this.num(dt.hour); + + case "HH": + return _this.num(dt.hour, 2); + // offset + + case "Z": + // like +6 + return formatOffset({ + format: "narrow", + allowZ: _this.opts.allowZ + }); + + case "ZZ": + // like +06:00 + return formatOffset({ + format: "short", + allowZ: _this.opts.allowZ + }); + + case "ZZZ": + // like +0600 + return formatOffset({ + format: "techie", + allowZ: _this.opts.allowZ + }); + + case "ZZZZ": + // like EST + return dt.zone.offsetName(dt.ts, { + format: "short", + locale: _this.loc.locale + }); + + case "ZZZZZ": + // like Eastern Standard Time + return dt.zone.offsetName(dt.ts, { + format: "long", + locale: _this.loc.locale + }); + // zone + + case "z": + // like America/New_York + return dt.zoneName; + // meridiems + + case "a": + return meridiem(); + // dates + + case "d": + return useDateTimeFormatter ? string({ + day: "numeric" + }, "day") : _this.num(dt.day); + + case "dd": + return useDateTimeFormatter ? string({ + day: "2-digit" + }, "day") : _this.num(dt.day, 2); + // weekdays - standalone + + case "c": + // like 1 + return _this.num(dt.weekday); + + case "ccc": + // like 'Tues' + return weekday("short", true); + + case "cccc": + // like 'Tuesday' + return weekday("long", true); + + case "ccccc": + // like 'T' + return weekday("narrow", true); + // weekdays - format + + case "E": + // like 1 + return _this.num(dt.weekday); + + case "EEE": + // like 'Tues' + return weekday("short", false); + + case "EEEE": + // like 'Tuesday' + return weekday("long", false); + + case "EEEEE": + // like 'T' + return weekday("narrow", false); + // months - standalone + + case "L": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric", + day: "numeric" + }, "month") : _this.num(dt.month); + + case "LL": + // like 01, doesn't seem to work + return useDateTimeFormatter ? string({ + month: "2-digit", + day: "numeric" + }, "month") : _this.num(dt.month, 2); + + case "LLL": + // like Jan + return month("short", true); + + case "LLLL": + // like January + return month("long", true); + + case "LLLLL": + // like J + return month("narrow", true); + // months - format + + case "M": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric" + }, "month") : _this.num(dt.month); + + case "MM": + // like 01 + return useDateTimeFormatter ? string({ + month: "2-digit" + }, "month") : _this.num(dt.month, 2); + + case "MMM": + // like Jan + return month("short", false); + + case "MMMM": + // like January + return month("long", false); + + case "MMMMM": + // like J + return month("narrow", false); + // years + + case "y": + // like 2014 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year); + + case "yy": + // like 14 + return useDateTimeFormatter ? string({ + year: "2-digit" + }, "year") : _this.num(dt.year.toString().slice(-2), 2); + + case "yyyy": + // like 0012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 4); + + case "yyyyyy": + // like 000012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 6); + // eras + + case "G": + // like AD + return era("short"); + + case "GG": + // like Anno Domini + return era("long"); + + case "GGGGG": + return era("narrow"); + + case "kk": + return _this.num(dt.weekYear.toString().slice(-2), 2); + + case "kkkk": + return _this.num(dt.weekYear, 4); + + case "W": + return _this.num(dt.weekNumber); + + case "WW": + return _this.num(dt.weekNumber, 2); + + case "o": + return _this.num(dt.ordinal); + + case "ooo": + return _this.num(dt.ordinal, 3); + + case "q": + // like 1 + return _this.num(dt.quarter); + + case "qq": + // like 01 + return _this.num(dt.quarter, 2); + + case "X": + return _this.num(Math.floor(dt.ts / 1000)); + + case "x": + return _this.num(dt.ts); + + default: + return maybeMacro(token); + } + }; + + return stringifyTokens(Formatter.parseFormat(fmt), tokenToString); + }; + + _proto.formatDurationFromString = function formatDurationFromString(dur, fmt) { + var _this2 = this; + + var tokenToField = function tokenToField(token) { + switch (token[0]) { + case "S": + return "millisecond"; + + case "s": + return "second"; + + case "m": + return "minute"; + + case "h": + return "hour"; + + case "d": + return "day"; + + case "w": + return "week"; + + case "M": + return "month"; + + case "y": + return "year"; + + default: + return null; + } + }, + tokenToString = function tokenToString(lildur) { + return function (token) { + var mapped = tokenToField(token); + + if (mapped) { + return _this2.num(lildur.get(mapped), token.length); + } else { + return token; + } + }; + }, + tokens = Formatter.parseFormat(fmt), + realTokens = tokens.reduce(function (found, _ref) { + var literal = _ref.literal, + val = _ref.val; + return literal ? found : found.concat(val); + }, []), + collapsed = dur.shiftTo.apply(dur, realTokens.map(tokenToField).filter(function (t) { + return t; + })); + + return stringifyTokens(tokens, tokenToString(collapsed)); + }; + + return Formatter; +}(); + +var Invalid = /*#__PURE__*/function () { + function Invalid(reason, explanation) { + this.reason = reason; + this.explanation = explanation; + } + + var _proto = Invalid.prototype; + + _proto.toMessage = function toMessage() { + if (this.explanation) { + return this.reason + ": " + this.explanation; + } else { + return this.reason; + } + }; + + return Invalid; +}(); + +/** + * @interface + */ + +var Zone = /*#__PURE__*/function () { + function Zone() {} + + var _proto = Zone.prototype; + + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + _proto.offsetName = function offsetName(ts, opts) { + throw new ZoneIsAbstractError(); + } + /** + * Returns the offset's value as a string + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ + ; + + _proto.formatOffset = function formatOffset(ts, format) { + throw new ZoneIsAbstractError(); + } + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @abstract + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */ + ; + + _proto.offset = function offset(ts) { + throw new ZoneIsAbstractError(); + } + /** + * Return whether this Zone is equal to another zone + * @abstract + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */ + ; + + _proto.equals = function equals(otherZone) { + throw new ZoneIsAbstractError(); + } + /** + * Return whether this Zone is valid. + * @abstract + * @type {boolean} + */ + ; + + _createClass(Zone, [{ + key: "type", + get: + /** + * The type of zone + * @abstract + * @type {string} + */ + function get() { + throw new ZoneIsAbstractError(); + } + /** + * The name of this zone. + * @abstract + * @type {string} + */ + + }, { + key: "name", + get: function get() { + throw new ZoneIsAbstractError(); + } + }, { + key: "ianaName", + get: function get() { + return this.name; + } + /** + * Returns whether the offset is known to be fixed for the whole year. + * @abstract + * @type {boolean} + */ + + }, { + key: "isUniversal", + get: function get() { + throw new ZoneIsAbstractError(); + } + }, { + key: "isValid", + get: function get() { + throw new ZoneIsAbstractError(); + } + }]); + + return Zone; +}(); + +var singleton$1 = null; +/** + * Represents the local zone for this JavaScript environment. + * @implements {Zone} + */ + +var SystemZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(SystemZone, _Zone); + + function SystemZone() { + return _Zone.apply(this, arguments) || this; + } + + var _proto = SystemZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale); + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + /** @override **/ + ; + + _proto.offset = function offset(ts) { + return -new Date(ts).getTimezoneOffset(); + } + /** @override **/ + ; + + _proto.equals = function equals(otherZone) { + return otherZone.type === "system"; + } + /** @override **/ + ; + + _createClass(SystemZone, [{ + key: "type", + get: + /** @override **/ + function get() { + return "system"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return new Intl.DateTimeFormat().resolvedOptions().timeZone; + } + /** @override **/ + + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }], [{ + key: "instance", + get: + /** + * Get a singleton instance of the local zone + * @return {SystemZone} + */ + function get() { + if (singleton$1 === null) { + singleton$1 = new SystemZone(); + } + + return singleton$1; + } + }]); + + return SystemZone; +}(Zone); + +var dtfCache = {}; + +function makeDTF(zone) { + if (!dtfCache[zone]) { + dtfCache[zone] = new Intl.DateTimeFormat("en-US", { + hour12: false, + timeZone: zone, + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + era: "short" + }); + } + + return dtfCache[zone]; +} + +var typeToPos = { + year: 0, + month: 1, + day: 2, + era: 3, + hour: 4, + minute: 5, + second: 6 +}; + +function hackyOffset(dtf, date) { + var formatted = dtf.format(date).replace(/\u200E/g, ""), + parsed = /(\d+)\/(\d+)\/(\d+) (AD|BC),? (\d+):(\d+):(\d+)/.exec(formatted), + fMonth = parsed[1], + fDay = parsed[2], + fYear = parsed[3], + fadOrBc = parsed[4], + fHour = parsed[5], + fMinute = parsed[6], + fSecond = parsed[7]; + return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond]; +} + +function partsOffset(dtf, date) { + var formatted = dtf.formatToParts(date); + var filled = []; + + for (var i = 0; i < formatted.length; i++) { + var _formatted$i = formatted[i], + type = _formatted$i.type, + value = _formatted$i.value; + var pos = typeToPos[type]; + + if (type === "era") { + filled[pos] = value; + } else if (!isUndefined(pos)) { + filled[pos] = parseInt(value, 10); + } + } + + return filled; +} + +var ianaZoneCache = {}; +/** + * A zone identified by an IANA identifier, like America/New_York + * @implements {Zone} + */ + +var IANAZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(IANAZone, _Zone); + + /** + * @param {string} name - Zone name + * @return {IANAZone} + */ + IANAZone.create = function create(name) { + if (!ianaZoneCache[name]) { + ianaZoneCache[name] = new IANAZone(name); + } + + return ianaZoneCache[name]; + } + /** + * Reset local caches. Should only be necessary in testing scenarios. + * @return {void} + */ + ; + + IANAZone.resetCache = function resetCache() { + ianaZoneCache = {}; + dtfCache = {}; + } + /** + * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that. + * @param {string} s - The string to check validity on + * @example IANAZone.isValidSpecifier("America/New_York") //=> true + * @example IANAZone.isValidSpecifier("Sport~~blorp") //=> false + * @deprecated This method returns false for some valid IANA names. Use isValidZone instead. + * @return {boolean} + */ + ; + + IANAZone.isValidSpecifier = function isValidSpecifier(s) { + return this.isValidZone(s); + } + /** + * Returns whether the provided string identifies a real zone + * @param {string} zone - The string to check + * @example IANAZone.isValidZone("America/New_York") //=> true + * @example IANAZone.isValidZone("Fantasia/Castle") //=> false + * @example IANAZone.isValidZone("Sport~~blorp") //=> false + * @return {boolean} + */ + ; + + IANAZone.isValidZone = function isValidZone(zone) { + if (!zone) { + return false; + } + + try { + new Intl.DateTimeFormat("en-US", { + timeZone: zone + }).format(); + return true; + } catch (e) { + return false; + } + }; + + function IANAZone(name) { + var _this; + + _this = _Zone.call(this) || this; + /** @private **/ + + _this.zoneName = name; + /** @private **/ + + _this.valid = IANAZone.isValidZone(name); + return _this; + } + /** @override **/ + + + var _proto = IANAZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale, this.name); + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + /** @override **/ + ; + + _proto.offset = function offset(ts) { + var date = new Date(ts); + if (isNaN(date)) return NaN; + var dtf = makeDTF(this.name); + + var _ref2 = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date), + year = _ref2[0], + month = _ref2[1], + day = _ref2[2], + adOrBc = _ref2[3], + hour = _ref2[4], + minute = _ref2[5], + second = _ref2[6]; + + if (adOrBc === "BC") { + year = -Math.abs(year) + 1; + } // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat + + + var adjustedHour = hour === 24 ? 0 : hour; + var asUTC = objToLocalTS({ + year: year, + month: month, + day: day, + hour: adjustedHour, + minute: minute, + second: second, + millisecond: 0 + }); + var asTS = +date; + var over = asTS % 1000; + asTS -= over >= 0 ? over : 1000 + over; + return (asUTC - asTS) / (60 * 1000); + } + /** @override **/ + ; + + _proto.equals = function equals(otherZone) { + return otherZone.type === "iana" && otherZone.name === this.name; + } + /** @override **/ + ; + + _createClass(IANAZone, [{ + key: "type", + get: function get() { + return "iana"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return this.zoneName; + } + /** @override **/ + + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return this.valid; + } + }]); + + return IANAZone; +}(Zone); + +var singleton = null; +/** + * A zone with a fixed offset (meaning no DST) + * @implements {Zone} + */ + +var FixedOffsetZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(FixedOffsetZone, _Zone); + + /** + * Get an instance with a specified offset + * @param {number} offset - The offset in minutes + * @return {FixedOffsetZone} + */ + FixedOffsetZone.instance = function instance(offset) { + return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset); + } + /** + * Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6" + * @param {string} s - The offset string to parse + * @example FixedOffsetZone.parseSpecifier("UTC+6") + * @example FixedOffsetZone.parseSpecifier("UTC+06") + * @example FixedOffsetZone.parseSpecifier("UTC-6:00") + * @return {FixedOffsetZone} + */ + ; + + FixedOffsetZone.parseSpecifier = function parseSpecifier(s) { + if (s) { + var r = s.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); + + if (r) { + return new FixedOffsetZone(signedOffset(r[1], r[2])); + } + } + + return null; + }; + + function FixedOffsetZone(offset) { + var _this; + + _this = _Zone.call(this) || this; + /** @private **/ + + _this.fixed = offset; + return _this; + } + /** @override **/ + + + var _proto = FixedOffsetZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName() { + return this.name; + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.fixed, format); + } + /** @override **/ + ; + + /** @override **/ + _proto.offset = function offset() { + return this.fixed; + } + /** @override **/ + ; + + _proto.equals = function equals(otherZone) { + return otherZone.type === "fixed" && otherZone.fixed === this.fixed; + } + /** @override **/ + ; + + _createClass(FixedOffsetZone, [{ + key: "type", + get: function get() { + return "fixed"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return this.fixed === 0 ? "UTC" : "UTC" + formatOffset(this.fixed, "narrow"); + } + }, { + key: "ianaName", + get: function get() { + if (this.fixed === 0) { + return "Etc/UTC"; + } else { + return "Etc/GMT" + formatOffset(-this.fixed, "narrow"); + } + } + }, { + key: "isUniversal", + get: function get() { + return true; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }], [{ + key: "utcInstance", + get: + /** + * Get a singleton instance of UTC + * @return {FixedOffsetZone} + */ + function get() { + if (singleton === null) { + singleton = new FixedOffsetZone(0); + } + + return singleton; + } + }]); + + return FixedOffsetZone; +}(Zone); + +/** + * A zone that failed to parse. You should never need to instantiate this. + * @implements {Zone} + */ + +var InvalidZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(InvalidZone, _Zone); + + function InvalidZone(zoneName) { + var _this; + + _this = _Zone.call(this) || this; + /** @private */ + + _this.zoneName = zoneName; + return _this; + } + /** @override **/ + + + var _proto = InvalidZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName() { + return null; + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset() { + return ""; + } + /** @override **/ + ; + + _proto.offset = function offset() { + return NaN; + } + /** @override **/ + ; + + _proto.equals = function equals() { + return false; + } + /** @override **/ + ; + + _createClass(InvalidZone, [{ + key: "type", + get: function get() { + return "invalid"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return this.zoneName; + } + /** @override **/ + + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return false; + } + }]); + + return InvalidZone; +}(Zone); + +/** + * @private + */ +function normalizeZone(input, defaultZone) { + + if (isUndefined(input) || input === null) { + return defaultZone; + } else if (input instanceof Zone) { + return input; + } else if (isString(input)) { + var lowered = input.toLowerCase(); + if (lowered === "local" || lowered === "system") return defaultZone;else if (lowered === "utc" || lowered === "gmt") return FixedOffsetZone.utcInstance;else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input); + } else if (isNumber(input)) { + return FixedOffsetZone.instance(input); + } else if (typeof input === "object" && input.offset && typeof input.offset === "number") { + // This is dumb, but the instanceof check above doesn't seem to really work + // so we're duck checking it + return input; + } else { + return new InvalidZone(input); + } +} + +var now = function now() { + return Date.now(); +}, + defaultZone = "system", + defaultLocale = null, + defaultNumberingSystem = null, + defaultOutputCalendar = null, + throwOnInvalid; +/** + * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here. + */ + + +var Settings = /*#__PURE__*/function () { + function Settings() {} + + /** + * Reset Luxon's global caches. Should only be necessary in testing scenarios. + * @return {void} + */ + Settings.resetCaches = function resetCaches() { + Locale.resetCache(); + IANAZone.resetCache(); + }; + + _createClass(Settings, null, [{ + key: "now", + get: + /** + * Get the callback for returning the current timestamp. + * @type {function} + */ + function get() { + return now; + } + /** + * Set the callback for returning the current timestamp. + * The function should return a number, which will be interpreted as an Epoch millisecond count + * @type {function} + * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future + * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time + */ + , + set: function set(n) { + now = n; + } + /** + * Set the default time zone to create DateTimes in. Does not affect existing instances. + * Use the value "system" to reset this value to the system's time zone. + * @type {string} + */ + + }, { + key: "defaultZone", + get: + /** + * Get the default time zone object currently used to create DateTimes. Does not affect existing instances. + * The default value is the system's time zone (the one set on the machine that runs this code). + * @type {Zone} + */ + function get() { + return normalizeZone(defaultZone, SystemZone.instance); + } + /** + * Get the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(zone) { + defaultZone = zone; + } + }, { + key: "defaultLocale", + get: function get() { + return defaultLocale; + } + /** + * Set the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(locale) { + defaultLocale = locale; + } + /** + * Get the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + + }, { + key: "defaultNumberingSystem", + get: function get() { + return defaultNumberingSystem; + } + /** + * Set the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(numberingSystem) { + defaultNumberingSystem = numberingSystem; + } + /** + * Get the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + + }, { + key: "defaultOutputCalendar", + get: function get() { + return defaultOutputCalendar; + } + /** + * Set the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(outputCalendar) { + defaultOutputCalendar = outputCalendar; + } + /** + * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + + }, { + key: "throwOnInvalid", + get: function get() { + return throwOnInvalid; + } + /** + * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + , + set: function set(t) { + throwOnInvalid = t; + } + }]); + + return Settings; +}(); + +var _excluded = ["base"], + _excluded2 = ["padTo", "floor"]; + +var intlLFCache = {}; + +function getCachedLF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + + var key = JSON.stringify([locString, opts]); + var dtf = intlLFCache[key]; + + if (!dtf) { + dtf = new Intl.ListFormat(locString, opts); + intlLFCache[key] = dtf; + } + + return dtf; +} + +var intlDTCache = {}; + +function getCachedDTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + + var key = JSON.stringify([locString, opts]); + var dtf = intlDTCache[key]; + + if (!dtf) { + dtf = new Intl.DateTimeFormat(locString, opts); + intlDTCache[key] = dtf; + } + + return dtf; +} + +var intlNumCache = {}; + +function getCachedINF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + + var key = JSON.stringify([locString, opts]); + var inf = intlNumCache[key]; + + if (!inf) { + inf = new Intl.NumberFormat(locString, opts); + intlNumCache[key] = inf; + } + + return inf; +} + +var intlRelCache = {}; + +function getCachedRTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + + var _opts = opts; + _opts.base; + var cacheKeyOpts = _objectWithoutPropertiesLoose(_opts, _excluded); // exclude `base` from the options + + + var key = JSON.stringify([locString, cacheKeyOpts]); + var inf = intlRelCache[key]; + + if (!inf) { + inf = new Intl.RelativeTimeFormat(locString, opts); + intlRelCache[key] = inf; + } + + return inf; +} + +var sysLocaleCache = null; + +function systemLocale() { + if (sysLocaleCache) { + return sysLocaleCache; + } else { + sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale; + return sysLocaleCache; + } +} + +function parseLocaleString(localeStr) { + // I really want to avoid writing a BCP 47 parser + // see, e.g. https://github.com/wooorm/bcp-47 + // Instead, we'll do this: + // a) if the string has no -u extensions, just leave it alone + // b) if it does, use Intl to resolve everything + // c) if Intl fails, try again without the -u + var uIndex = localeStr.indexOf("-u-"); + + if (uIndex === -1) { + return [localeStr]; + } else { + var options; + var smaller = localeStr.substring(0, uIndex); + + try { + options = getCachedDTF(localeStr).resolvedOptions(); + } catch (e) { + options = getCachedDTF(smaller).resolvedOptions(); + } + + var _options = options, + numberingSystem = _options.numberingSystem, + calendar = _options.calendar; // return the smaller one so that we can append the calendar and numbering overrides to it + + return [smaller, numberingSystem, calendar]; + } +} + +function intlConfigString(localeStr, numberingSystem, outputCalendar) { + if (outputCalendar || numberingSystem) { + localeStr += "-u"; + + if (outputCalendar) { + localeStr += "-ca-" + outputCalendar; + } + + if (numberingSystem) { + localeStr += "-nu-" + numberingSystem; + } + + return localeStr; + } else { + return localeStr; + } +} + +function mapMonths(f) { + var ms = []; + + for (var i = 1; i <= 12; i++) { + var dt = DateTime.utc(2016, i, 1); + ms.push(f(dt)); + } + + return ms; +} + +function mapWeekdays(f) { + var ms = []; + + for (var i = 1; i <= 7; i++) { + var dt = DateTime.utc(2016, 11, 13 + i); + ms.push(f(dt)); + } + + return ms; +} + +function listStuff(loc, length, defaultOK, englishFn, intlFn) { + var mode = loc.listingMode(defaultOK); + + if (mode === "error") { + return null; + } else if (mode === "en") { + return englishFn(length); + } else { + return intlFn(length); + } +} + +function supportsFastNumbers(loc) { + if (loc.numberingSystem && loc.numberingSystem !== "latn") { + return false; + } else { + return loc.numberingSystem === "latn" || !loc.locale || loc.locale.startsWith("en") || new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === "latn"; + } +} +/** + * @private + */ + + +var PolyNumberFormatter = /*#__PURE__*/function () { + function PolyNumberFormatter(intl, forceSimple, opts) { + this.padTo = opts.padTo || 0; + this.floor = opts.floor || false; + + opts.padTo; + opts.floor; + var otherOpts = _objectWithoutPropertiesLoose(opts, _excluded2); + + if (!forceSimple || Object.keys(otherOpts).length > 0) { + var intlOpts = _extends({ + useGrouping: false + }, opts); + + if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo; + this.inf = getCachedINF(intl, intlOpts); + } + } + + var _proto = PolyNumberFormatter.prototype; + + _proto.format = function format(i) { + if (this.inf) { + var fixed = this.floor ? Math.floor(i) : i; + return this.inf.format(fixed); + } else { + // to match the browser's numberformatter defaults + var _fixed = this.floor ? Math.floor(i) : roundTo(i, 3); + + return padStart(_fixed, this.padTo); + } + }; + + return PolyNumberFormatter; +}(); +/** + * @private + */ + + +var PolyDateFormatter = /*#__PURE__*/function () { + function PolyDateFormatter(dt, intl, opts) { + this.opts = opts; + var z; + + if (dt.zone.isUniversal) { + // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like. + // That is why fixed-offset TZ is set to that unless it is: + // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT. + // 2. Unsupported by the browser: + // - some do not support Etc/ + // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata + var gmtOffset = -1 * (dt.offset / 60); + var offsetZ = gmtOffset >= 0 ? "Etc/GMT+" + gmtOffset : "Etc/GMT" + gmtOffset; + + if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) { + z = offsetZ; + this.dt = dt; + } else { + // Not all fixed-offset zones like Etc/+4:30 are present in tzdata. + // So we have to make do. Two cases: + // 1. The format options tell us to show the zone. We can't do that, so the best + // we can do is format the date in UTC. + // 2. The format options don't tell us to show the zone. Then we can adjust them + // the time and tell the formatter to show it to us in UTC, so that the time is right + // and the bad zone doesn't show up. + z = "UTC"; + + if (opts.timeZoneName) { + this.dt = dt; + } else { + this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000); + } + } + } else if (dt.zone.type === "system") { + this.dt = dt; + } else { + this.dt = dt; + z = dt.zone.name; + } + + var intlOpts = _extends({}, this.opts); + + if (z) { + intlOpts.timeZone = z; + } + + this.dtf = getCachedDTF(intl, intlOpts); + } + + var _proto2 = PolyDateFormatter.prototype; + + _proto2.format = function format() { + return this.dtf.format(this.dt.toJSDate()); + }; + + _proto2.formatToParts = function formatToParts() { + return this.dtf.formatToParts(this.dt.toJSDate()); + }; + + _proto2.resolvedOptions = function resolvedOptions() { + return this.dtf.resolvedOptions(); + }; + + return PolyDateFormatter; +}(); +/** + * @private + */ + + +var PolyRelFormatter = /*#__PURE__*/function () { + function PolyRelFormatter(intl, isEnglish, opts) { + this.opts = _extends({ + style: "long" + }, opts); + + if (!isEnglish && hasRelative()) { + this.rtf = getCachedRTF(intl, opts); + } + } + + var _proto3 = PolyRelFormatter.prototype; + + _proto3.format = function format(count, unit) { + if (this.rtf) { + return this.rtf.format(count, unit); + } else { + return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long"); + } + }; + + _proto3.formatToParts = function formatToParts(count, unit) { + if (this.rtf) { + return this.rtf.formatToParts(count, unit); + } else { + return []; + } + }; + + return PolyRelFormatter; +}(); +/** + * @private + */ + + +var Locale = /*#__PURE__*/function () { + Locale.fromOpts = function fromOpts(opts) { + return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN); + }; + + Locale.create = function create(locale, numberingSystem, outputCalendar, defaultToEN) { + if (defaultToEN === void 0) { + defaultToEN = false; + } + + var specifiedLocale = locale || Settings.defaultLocale; // the system locale is useful for human readable strings but annoying for parsing/formatting known formats + + var localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()); + var numberingSystemR = numberingSystem || Settings.defaultNumberingSystem; + var outputCalendarR = outputCalendar || Settings.defaultOutputCalendar; + return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale); + }; + + Locale.resetCache = function resetCache() { + sysLocaleCache = null; + intlDTCache = {}; + intlNumCache = {}; + intlRelCache = {}; + }; + + Locale.fromObject = function fromObject(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + locale = _ref.locale, + numberingSystem = _ref.numberingSystem, + outputCalendar = _ref.outputCalendar; + + return Locale.create(locale, numberingSystem, outputCalendar); + }; + + function Locale(locale, numbering, outputCalendar, specifiedLocale) { + var _parseLocaleString = parseLocaleString(locale), + parsedLocale = _parseLocaleString[0], + parsedNumberingSystem = _parseLocaleString[1], + parsedOutputCalendar = _parseLocaleString[2]; + + this.locale = parsedLocale; + this.numberingSystem = numbering || parsedNumberingSystem || null; + this.outputCalendar = outputCalendar || parsedOutputCalendar || null; + this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar); + this.weekdaysCache = { + format: {}, + standalone: {} + }; + this.monthsCache = { + format: {}, + standalone: {} + }; + this.meridiemCache = null; + this.eraCache = {}; + this.specifiedLocale = specifiedLocale; + this.fastNumbersCached = null; + } + + var _proto4 = Locale.prototype; + + _proto4.listingMode = function listingMode() { + var isActuallyEn = this.isEnglish(); + var hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === "latn") && (this.outputCalendar === null || this.outputCalendar === "gregory"); + return isActuallyEn && hasNoWeirdness ? "en" : "intl"; + }; + + _proto4.clone = function clone(alts) { + if (!alts || Object.getOwnPropertyNames(alts).length === 0) { + return this; + } else { + return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, alts.defaultToEN || false); + } + }; + + _proto4.redefaultToEN = function redefaultToEN(alts) { + if (alts === void 0) { + alts = {}; + } + + return this.clone(_extends({}, alts, { + defaultToEN: true + })); + }; + + _proto4.redefaultToSystem = function redefaultToSystem(alts) { + if (alts === void 0) { + alts = {}; + } + + return this.clone(_extends({}, alts, { + defaultToEN: false + })); + }; + + _proto4.months = function months$1(length, format, defaultOK) { + var _this = this; + + if (format === void 0) { + format = false; + } + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, length, defaultOK, months, function () { + var intl = format ? { + month: length, + day: "numeric" + } : { + month: length + }, + formatStr = format ? "format" : "standalone"; + + if (!_this.monthsCache[formatStr][length]) { + _this.monthsCache[formatStr][length] = mapMonths(function (dt) { + return _this.extract(dt, intl, "month"); + }); + } + + return _this.monthsCache[formatStr][length]; + }); + }; + + _proto4.weekdays = function weekdays$1(length, format, defaultOK) { + var _this2 = this; + + if (format === void 0) { + format = false; + } + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, length, defaultOK, weekdays, function () { + var intl = format ? { + weekday: length, + year: "numeric", + month: "long", + day: "numeric" + } : { + weekday: length + }, + formatStr = format ? "format" : "standalone"; + + if (!_this2.weekdaysCache[formatStr][length]) { + _this2.weekdaysCache[formatStr][length] = mapWeekdays(function (dt) { + return _this2.extract(dt, intl, "weekday"); + }); + } + + return _this2.weekdaysCache[formatStr][length]; + }); + }; + + _proto4.meridiems = function meridiems$1(defaultOK) { + var _this3 = this; + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, undefined, defaultOK, function () { + return meridiems; + }, function () { + // In theory there could be aribitrary day periods. We're gonna assume there are exactly two + // for AM and PM. This is probably wrong, but it's makes parsing way easier. + if (!_this3.meridiemCache) { + var intl = { + hour: "numeric", + hourCycle: "h12" + }; + _this3.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(function (dt) { + return _this3.extract(dt, intl, "dayperiod"); + }); + } + + return _this3.meridiemCache; + }); + }; + + _proto4.eras = function eras$1(length, defaultOK) { + var _this4 = this; + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, length, defaultOK, eras, function () { + var intl = { + era: length + }; // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates + // to definitely enumerate them. + + if (!_this4.eraCache[length]) { + _this4.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(function (dt) { + return _this4.extract(dt, intl, "era"); + }); + } + + return _this4.eraCache[length]; + }); + }; + + _proto4.extract = function extract(dt, intlOpts, field) { + var df = this.dtFormatter(dt, intlOpts), + results = df.formatToParts(), + matching = results.find(function (m) { + return m.type.toLowerCase() === field; + }); + return matching ? matching.value : null; + }; + + _proto4.numberFormatter = function numberFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + + // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave) + // (in contrast, the rest of the condition is used heavily) + return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts); + }; + + _proto4.dtFormatter = function dtFormatter(dt, intlOpts) { + if (intlOpts === void 0) { + intlOpts = {}; + } + + return new PolyDateFormatter(dt, this.intl, intlOpts); + }; + + _proto4.relFormatter = function relFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + + return new PolyRelFormatter(this.intl, this.isEnglish(), opts); + }; + + _proto4.listFormatter = function listFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + + return getCachedLF(this.intl, opts); + }; + + _proto4.isEnglish = function isEnglish() { + return this.locale === "en" || this.locale.toLowerCase() === "en-us" || new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us"); + }; + + _proto4.equals = function equals(other) { + return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar; + }; + + _createClass(Locale, [{ + key: "fastNumbers", + get: function get() { + if (this.fastNumbersCached == null) { + this.fastNumbersCached = supportsFastNumbers(this); + } + + return this.fastNumbersCached; + } + }]); + + return Locale; +}(); + +/* + * This file handles parsing for well-specified formats. Here's how it works: + * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match. + * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object + * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence. + * Extractors can take a "cursor" representing the offset in the match to look at. This makes it easy to combine extractors. + * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions. + * Some extractions are super dumb and simpleParse and fromStrings help DRY them. + */ + +function combineRegexes() { + for (var _len = arguments.length, regexes = new Array(_len), _key = 0; _key < _len; _key++) { + regexes[_key] = arguments[_key]; + } + + var full = regexes.reduce(function (f, r) { + return f + r.source; + }, ""); + return RegExp("^" + full + "$"); +} + +function combineExtractors() { + for (var _len2 = arguments.length, extractors = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + extractors[_key2] = arguments[_key2]; + } + + return function (m) { + return extractors.reduce(function (_ref, ex) { + var mergedVals = _ref[0], + mergedZone = _ref[1], + cursor = _ref[2]; + + var _ex = ex(m, cursor), + val = _ex[0], + zone = _ex[1], + next = _ex[2]; + + return [_extends({}, mergedVals, val), zone || mergedZone, next]; + }, [{}, null, 1]).slice(0, 2); + }; +} + +function parse(s) { + if (s == null) { + return [null, null]; + } + + for (var _len3 = arguments.length, patterns = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + patterns[_key3 - 1] = arguments[_key3]; + } + + for (var _i = 0, _patterns = patterns; _i < _patterns.length; _i++) { + var _patterns$_i = _patterns[_i], + regex = _patterns$_i[0], + extractor = _patterns$_i[1]; + var m = regex.exec(s); + + if (m) { + return extractor(m); + } + } + + return [null, null]; +} + +function simpleParse() { + for (var _len4 = arguments.length, keys = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + keys[_key4] = arguments[_key4]; + } + + return function (match, cursor) { + var ret = {}; + var i; + + for (i = 0; i < keys.length; i++) { + ret[keys[i]] = parseInteger(match[cursor + i]); + } + + return [ret, null, cursor + i]; + }; +} // ISO and SQL parsing + + +var offsetRegex = /(?:(Z)|([+-]\d\d)(?::?(\d\d))?)/; +var isoExtendedZone = "(?:" + offsetRegex.source + "?(?:\\[(" + ianaRegex.source + ")\\])?)?"; +var isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/; +var isoTimeRegex = RegExp("" + isoTimeBaseRegex.source + isoExtendedZone); +var isoTimeExtensionRegex = RegExp("(?:T" + isoTimeRegex.source + ")?"); +var isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/; +var isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/; +var isoOrdinalRegex = /(\d{4})-?(\d{3})/; +var extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay"); +var extractISOOrdinalData = simpleParse("year", "ordinal"); +var sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/; // dumbed-down version of the ISO one + +var sqlTimeRegex = RegExp(isoTimeBaseRegex.source + " ?(?:" + offsetRegex.source + "|(" + ianaRegex.source + "))?"); +var sqlTimeExtensionRegex = RegExp("(?: " + sqlTimeRegex.source + ")?"); + +function int(match, pos, fallback) { + var m = match[pos]; + return isUndefined(m) ? fallback : parseInteger(m); +} + +function extractISOYmd(match, cursor) { + var item = { + year: int(match, cursor), + month: int(match, cursor + 1, 1), + day: int(match, cursor + 2, 1) + }; + return [item, null, cursor + 3]; +} + +function extractISOTime(match, cursor) { + var item = { + hours: int(match, cursor, 0), + minutes: int(match, cursor + 1, 0), + seconds: int(match, cursor + 2, 0), + milliseconds: parseMillis(match[cursor + 3]) + }; + return [item, null, cursor + 4]; +} + +function extractISOOffset(match, cursor) { + var local = !match[cursor] && !match[cursor + 1], + fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]), + zone = local ? null : FixedOffsetZone.instance(fullOffset); + return [{}, zone, cursor + 3]; +} + +function extractIANAZone(match, cursor) { + var zone = match[cursor] ? IANAZone.create(match[cursor]) : null; + return [{}, zone, cursor + 1]; +} // ISO time parsing + + +var isoTimeOnly = RegExp("^T?" + isoTimeBaseRegex.source + "$"); // ISO duration parsing + +var isoDuration = /^-?P(?:(?:(-?\d{1,9}(?:\.\d{1,9})?)Y)?(?:(-?\d{1,9}(?:\.\d{1,9})?)M)?(?:(-?\d{1,9}(?:\.\d{1,9})?)W)?(?:(-?\d{1,9}(?:\.\d{1,9})?)D)?(?:T(?:(-?\d{1,9}(?:\.\d{1,9})?)H)?(?:(-?\d{1,9}(?:\.\d{1,9})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,9}))?S)?)?)$/; + +function extractISODuration(match) { + var s = match[0], + yearStr = match[1], + monthStr = match[2], + weekStr = match[3], + dayStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + millisecondsStr = match[8]; + var hasNegativePrefix = s[0] === "-"; + var negativeSeconds = secondStr && secondStr[0] === "-"; + + var maybeNegate = function maybeNegate(num, force) { + if (force === void 0) { + force = false; + } + + return num !== undefined && (force || num && hasNegativePrefix) ? -num : num; + }; + + return [{ + years: maybeNegate(parseFloating(yearStr)), + months: maybeNegate(parseFloating(monthStr)), + weeks: maybeNegate(parseFloating(weekStr)), + days: maybeNegate(parseFloating(dayStr)), + hours: maybeNegate(parseFloating(hourStr)), + minutes: maybeNegate(parseFloating(minuteStr)), + seconds: maybeNegate(parseFloating(secondStr), secondStr === "-0"), + milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds) + }]; +} // These are a little braindead. EDT *should* tell us that we're in, say, America/New_York +// and not just that we're in -240 *right now*. But since I don't think these are used that often +// I'm just going to ignore that + + +var obsOffsets = { + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60 +}; + +function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { + var result = { + year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr), + month: monthsShort.indexOf(monthStr) + 1, + day: parseInteger(dayStr), + hour: parseInteger(hourStr), + minute: parseInteger(minuteStr) + }; + if (secondStr) result.second = parseInteger(secondStr); + + if (weekdayStr) { + result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1; + } + + return result; +} // RFC 2822/5322 + + +var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/; + +function extractRFC2822(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + obsOffset = match[8], + milOffset = match[9], + offHourStr = match[10], + offMinuteStr = match[11], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + var offset; + + if (obsOffset) { + offset = obsOffsets[obsOffset]; + } else if (milOffset) { + offset = 0; + } else { + offset = signedOffset(offHourStr, offMinuteStr); + } + + return [result, new FixedOffsetZone(offset)]; +} + +function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s.replace(/\([^)]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").trim(); +} // http date + + +var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/, + rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/, + ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/; + +function extractRFC1123Or850(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; +} + +function extractASCII(match) { + var weekdayStr = match[1], + monthStr = match[2], + dayStr = match[3], + hourStr = match[4], + minuteStr = match[5], + secondStr = match[6], + yearStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; +} + +var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex); +var isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex); +var isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex); +var isoTimeCombinedRegex = combineRegexes(isoTimeRegex); +var extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone); +var extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset, extractIANAZone); +var extractISOOrdinalDateAndTime = combineExtractors(extractISOOrdinalData, extractISOTime, extractISOOffset, extractIANAZone); +var extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); +/* + * @private + */ + +function parseISODate(s) { + return parse(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]); +} +function parseRFC2822Date(s) { + return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]); +} +function parseHTTPDate(s) { + return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]); +} +function parseISODuration(s) { + return parse(s, [isoDuration, extractISODuration]); +} +var extractISOTimeOnly = combineExtractors(extractISOTime); +function parseISOTimeOnly(s) { + return parse(s, [isoTimeOnly, extractISOTimeOnly]); +} +var sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex); +var sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex); +var extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); +function parseSQL(s) { + return parse(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]); +} + +var INVALID$2 = "Invalid Duration"; // unit conversion constants + +var lowOrderMatrix = { + weeks: { + days: 7, + hours: 7 * 24, + minutes: 7 * 24 * 60, + seconds: 7 * 24 * 60 * 60, + milliseconds: 7 * 24 * 60 * 60 * 1000 + }, + days: { + hours: 24, + minutes: 24 * 60, + seconds: 24 * 60 * 60, + milliseconds: 24 * 60 * 60 * 1000 + }, + hours: { + minutes: 60, + seconds: 60 * 60, + milliseconds: 60 * 60 * 1000 + }, + minutes: { + seconds: 60, + milliseconds: 60 * 1000 + }, + seconds: { + milliseconds: 1000 + } +}, + casualMatrix = _extends({ + years: { + quarters: 4, + months: 12, + weeks: 52, + days: 365, + hours: 365 * 24, + minutes: 365 * 24 * 60, + seconds: 365 * 24 * 60 * 60, + milliseconds: 365 * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: 13, + days: 91, + hours: 91 * 24, + minutes: 91 * 24 * 60, + seconds: 91 * 24 * 60 * 60, + milliseconds: 91 * 24 * 60 * 60 * 1000 + }, + months: { + weeks: 4, + days: 30, + hours: 30 * 24, + minutes: 30 * 24 * 60, + seconds: 30 * 24 * 60 * 60, + milliseconds: 30 * 24 * 60 * 60 * 1000 + } +}, lowOrderMatrix), + daysInYearAccurate = 146097.0 / 400, + daysInMonthAccurate = 146097.0 / 4800, + accurateMatrix = _extends({ + years: { + quarters: 4, + months: 12, + weeks: daysInYearAccurate / 7, + days: daysInYearAccurate, + hours: daysInYearAccurate * 24, + minutes: daysInYearAccurate * 24 * 60, + seconds: daysInYearAccurate * 24 * 60 * 60, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: daysInYearAccurate / 28, + days: daysInYearAccurate / 4, + hours: daysInYearAccurate * 24 / 4, + minutes: daysInYearAccurate * 24 * 60 / 4, + seconds: daysInYearAccurate * 24 * 60 * 60 / 4, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 / 4 + }, + months: { + weeks: daysInMonthAccurate / 7, + days: daysInMonthAccurate, + hours: daysInMonthAccurate * 24, + minutes: daysInMonthAccurate * 24 * 60, + seconds: daysInMonthAccurate * 24 * 60 * 60, + milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000 + } +}, lowOrderMatrix); // units ordered by size + +var orderedUnits$1 = ["years", "quarters", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"]; +var reverseUnits = orderedUnits$1.slice(0).reverse(); // clone really means "create another instance just like this one, but with these changes" + +function clone$1(dur, alts, clear) { + if (clear === void 0) { + clear = false; + } + + // deep merge for vals + var conf = { + values: clear ? alts.values : _extends({}, dur.values, alts.values || {}), + loc: dur.loc.clone(alts.loc), + conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy + }; + return new Duration(conf); +} + +function antiTrunc(n) { + return n < 0 ? Math.floor(n) : Math.ceil(n); +} // NB: mutates parameters + + +function convert(matrix, fromMap, fromUnit, toMap, toUnit) { + var conv = matrix[toUnit][fromUnit], + raw = fromMap[fromUnit] / conv, + sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]), + // ok, so this is wild, but see the matrix in the tests + added = !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw); + toMap[toUnit] += added; + fromMap[fromUnit] -= added * conv; +} // NB: mutates parameters + + +function normalizeValues(matrix, vals) { + reverseUnits.reduce(function (previous, current) { + if (!isUndefined(vals[current])) { + if (previous) { + convert(matrix, vals, previous, vals, current); + } + + return current; + } else { + return previous; + } + }, null); +} +/** + * A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime. + * + * Here is a brief overview of commonly used methods and getters in Duration: + * + * * **Creation** To create a Duration, use {@link Duration#fromMillis}, {@link Duration#fromObject}, or {@link Duration#fromISO}. + * * **Unit values** See the {@link Duration#years}, {@link Duration.months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors. + * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors. + * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}. + * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON} + * + * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation. + */ + + +var Duration = /*#__PURE__*/function () { + /** + * @private + */ + function Duration(config) { + var accurate = config.conversionAccuracy === "longterm" || false; + /** + * @access private + */ + + this.values = config.values; + /** + * @access private + */ + + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + + this.conversionAccuracy = accurate ? "longterm" : "casual"; + /** + * @access private + */ + + this.invalid = config.invalid || null; + /** + * @access private + */ + + this.matrix = accurate ? accurateMatrix : casualMatrix; + /** + * @access private + */ + + this.isLuxonDuration = true; + } + /** + * Create Duration from a number of milliseconds. + * @param {number} count of milliseconds + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + + + Duration.fromMillis = function fromMillis(count, opts) { + return Duration.fromObject({ + milliseconds: count + }, opts); + } + /** + * Create a Duration from a JavaScript object with keys like 'years' and 'hours'. + * If this object is empty then a zero milliseconds duration is returned. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.years + * @param {number} obj.quarters + * @param {number} obj.months + * @param {number} obj.weeks + * @param {number} obj.days + * @param {number} obj.hours + * @param {number} obj.minutes + * @param {number} obj.seconds + * @param {number} obj.milliseconds + * @param {Object} [opts=[]] - options for creating this Duration + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + ; + + Duration.fromObject = function fromObject(obj, opts) { + if (opts === void 0) { + opts = {}; + } + + if (obj == null || typeof obj !== "object") { + throw new InvalidArgumentError("Duration.fromObject: argument expected to be an object, got " + (obj === null ? "null" : typeof obj)); + } + + return new Duration({ + values: normalizeObject(obj, Duration.normalizeUnit), + loc: Locale.fromObject(opts), + conversionAccuracy: opts.conversionAccuracy + }); + } + /** + * Create a Duration from DurationLike. + * + * @param {Object | number | Duration} durationLike + * One of: + * - object with keys like 'years' and 'hours'. + * - number representing milliseconds + * - Duration instance + * @return {Duration} + */ + ; + + Duration.fromDurationLike = function fromDurationLike(durationLike) { + if (isNumber(durationLike)) { + return Duration.fromMillis(durationLike); + } else if (Duration.isDuration(durationLike)) { + return durationLike; + } else if (typeof durationLike === "object") { + return Duration.fromObject(durationLike); + } else { + throw new InvalidArgumentError("Unknown duration argument " + durationLike + " of type " + typeof durationLike); + } + } + /** + * Create a Duration from an ISO 8601 duration string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 } + * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 } + * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 } + * @return {Duration} + */ + ; + + Duration.fromISO = function fromISO(text, opts) { + var _parseISODuration = parseISODuration(text), + parsed = _parseISODuration[0]; + + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + } + /** + * Create a Duration from an ISO 8601 time string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 } + * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @return {Duration} + */ + ; + + Duration.fromISOTime = function fromISOTime(text, opts) { + var _parseISOTimeOnly = parseISOTimeOnly(text), + parsed = _parseISOTimeOnly[0]; + + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + } + /** + * Create an invalid Duration. + * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Duration} + */ + ; + + Duration.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Duration is invalid"); + } + + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidDurationError(invalid); + } else { + return new Duration({ + invalid: invalid + }); + } + } + /** + * @private + */ + ; + + Duration.normalizeUnit = function normalizeUnit(unit) { + var normalized = { + year: "years", + years: "years", + quarter: "quarters", + quarters: "quarters", + month: "months", + months: "months", + week: "weeks", + weeks: "weeks", + day: "days", + days: "days", + hour: "hours", + hours: "hours", + minute: "minutes", + minutes: "minutes", + second: "seconds", + seconds: "seconds", + millisecond: "milliseconds", + milliseconds: "milliseconds" + }[unit ? unit.toLowerCase() : unit]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; + } + /** + * Check if an object is a Duration. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + ; + + Duration.isDuration = function isDuration(o) { + return o && o.isLuxonDuration || false; + } + /** + * Get the locale of a Duration, such 'en-GB' + * @type {string} + */ + ; + + var _proto = Duration.prototype; + + /** + * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens: + * * `S` for milliseconds + * * `s` for seconds + * * `m` for minutes + * * `h` for hours + * * `d` for days + * * `w` for weeks + * * `M` for months + * * `y` for years + * Notes: + * * Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits + * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting. + * @param {string} fmt - the format string + * @param {Object} opts - options + * @param {boolean} [opts.floor=true] - floor numerical values + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000" + * @return {string} + */ + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + // reverse-compat since 1.2; we always round down now, never up, and we do it by default + var fmtOpts = _extends({}, opts, { + floor: opts.round !== false && opts.floor !== false + }); + + return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID$2; + } + /** + * Returns a string representation of a Duration with all units included. + * To modify its behavior use the `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat + * @param opts - On option object to override the formatting. Accepts the same keys as the options parameter of the native `Int.NumberFormat` constructor, as well as `listStyle`. + * @example + * ```js + * var dur = Duration.fromObject({ days: 1, hours: 5, minutes: 6 }) + * dur.toHuman() //=> '1 day, 5 hours, 6 minutes' + * dur.toHuman({ listStyle: "long" }) //=> '1 day, 5 hours, and 6 minutes' + * dur.toHuman({ unitDisplay: "short" }) //=> '1 day, 5 hr, 6 min' + * ``` + */ + ; + + _proto.toHuman = function toHuman(opts) { + var _this = this; + + if (opts === void 0) { + opts = {}; + } + + var l = orderedUnits$1.map(function (unit) { + var val = _this.values[unit]; + + if (isUndefined(val)) { + return null; + } + + return _this.loc.numberFormatter(_extends({ + style: "unit", + unitDisplay: "long" + }, opts, { + unit: unit.slice(0, -1) + })).format(val); + }).filter(function (n) { + return n; + }); + return this.loc.listFormatter(_extends({ + type: "conjunction", + style: opts.listStyle || "narrow" + }, opts)).format(l); + } + /** + * Returns a JavaScript object with this Duration's values. + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 } + * @return {Object} + */ + ; + + _proto.toObject = function toObject() { + if (!this.isValid) return {}; + return _extends({}, this.values); + } + /** + * Returns an ISO 8601-compliant string representation of this Duration. + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S' + * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S' + * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M' + * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M' + * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S' + * @return {string} + */ + ; + + _proto.toISO = function toISO() { + // we could use the formatter, but this is an easier way to get the minimum string + if (!this.isValid) return null; + var s = "P"; + if (this.years !== 0) s += this.years + "Y"; + if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + "M"; + if (this.weeks !== 0) s += this.weeks + "W"; + if (this.days !== 0) s += this.days + "D"; + if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) s += "T"; + if (this.hours !== 0) s += this.hours + "H"; + if (this.minutes !== 0) s += this.minutes + "M"; + if (this.seconds !== 0 || this.milliseconds !== 0) // this will handle "floating point madness" by removing extra decimal places + // https://stackoverflow.com/questions/588004/is-floating-point-math-broken + s += roundTo(this.seconds + this.milliseconds / 1000, 3) + "S"; + if (s === "P") s += "T0S"; + return s; + } + /** + * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day. + * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours. + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000' + * @return {string} + */ + ; + + _proto.toISOTime = function toISOTime(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) return null; + var millis = this.toMillis(); + if (millis < 0 || millis >= 86400000) return null; + opts = _extends({ + suppressMilliseconds: false, + suppressSeconds: false, + includePrefix: false, + format: "extended" + }, opts); + var value = this.shiftTo("hours", "minutes", "seconds", "milliseconds"); + var fmt = opts.format === "basic" ? "hhmm" : "hh:mm"; + + if (!opts.suppressSeconds || value.seconds !== 0 || value.milliseconds !== 0) { + fmt += opts.format === "basic" ? "ss" : ":ss"; + + if (!opts.suppressMilliseconds || value.milliseconds !== 0) { + fmt += ".SSS"; + } + } + + var str = value.toFormat(fmt); + + if (opts.includePrefix) { + str = "T" + str; + } + + return str; + } + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in JSON. + * @return {string} + */ + ; + + _proto.toJSON = function toJSON() { + return this.toISO(); + } + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in debugging. + * @return {string} + */ + ; + + _proto.toString = function toString() { + return this.toISO(); + } + /** + * Returns an milliseconds value of this Duration. + * @return {number} + */ + ; + + _proto.toMillis = function toMillis() { + return this.as("milliseconds"); + } + /** + * Returns an milliseconds value of this Duration. Alias of {@link toMillis} + * @return {number} + */ + ; + + _proto.valueOf = function valueOf() { + return this.toMillis(); + } + /** + * Make this Duration longer by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + ; + + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration), + result = {}; + + for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits$1), _step; !(_step = _iterator()).done;) { + var k = _step.value; + + if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) { + result[k] = dur.get(k) + this.get(k); + } + } + + return clone$1(this, { + values: result + }, true); + } + /** + * Make this Duration shorter by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + ; + + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration); + return this.plus(dur.negate()); + } + /** + * Scale this Duration by the specified amount. Return a newly-constructed Duration. + * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number. + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 } + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === "hour" ? x * 2 : x) //=> { hours: 2, minutes: 30 } + * @return {Duration} + */ + ; + + _proto.mapUnits = function mapUnits(fn) { + if (!this.isValid) return this; + var result = {}; + + for (var _i = 0, _Object$keys = Object.keys(this.values); _i < _Object$keys.length; _i++) { + var k = _Object$keys[_i]; + result[k] = asNumber(fn(this.values[k], k)); + } + + return clone$1(this, { + values: result + }, true); + } + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2 + * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0 + * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3 + * @return {number} + */ + ; + + _proto.get = function get(unit) { + return this[Duration.normalizeUnit(unit)]; + } + /** + * "Set" the values of specified units. Return a newly-constructed Duration. + * @param {Object} values - a mapping of units to numbers + * @example dur.set({ years: 2017 }) + * @example dur.set({ hours: 8, minutes: 30 }) + * @return {Duration} + */ + ; + + _proto.set = function set(values) { + if (!this.isValid) return this; + + var mixed = _extends({}, this.values, normalizeObject(values, Duration.normalizeUnit)); + + return clone$1(this, { + values: mixed + }); + } + /** + * "Set" the locale and/or numberingSystem. Returns a newly-constructed Duration. + * @example dur.reconfigure({ locale: 'en-GB' }) + * @return {Duration} + */ + ; + + _proto.reconfigure = function reconfigure(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + locale = _ref.locale, + numberingSystem = _ref.numberingSystem, + conversionAccuracy = _ref.conversionAccuracy; + + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem + }), + opts = { + loc: loc + }; + + if (conversionAccuracy) { + opts.conversionAccuracy = conversionAccuracy; + } + + return clone$1(this, opts); + } + /** + * Return the length of the duration in the specified unit. + * @param {string} unit - a unit such as 'minutes' or 'days' + * @example Duration.fromObject({years: 1}).as('days') //=> 365 + * @example Duration.fromObject({years: 1}).as('months') //=> 12 + * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5 + * @return {number} + */ + ; + + _proto.as = function as(unit) { + return this.isValid ? this.shiftTo(unit).get(unit) : NaN; + } + /** + * Reduce this Duration to its canonical representation in its current units. + * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 } + * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 } + * @return {Duration} + */ + ; + + _proto.normalize = function normalize() { + if (!this.isValid) return this; + var vals = this.toObject(); + normalizeValues(this.matrix, vals); + return clone$1(this, { + values: vals + }, true); + } + /** + * Convert this Duration into its representation in a different set of units. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 } + * @return {Duration} + */ + ; + + _proto.shiftTo = function shiftTo() { + for (var _len = arguments.length, units = new Array(_len), _key = 0; _key < _len; _key++) { + units[_key] = arguments[_key]; + } + + if (!this.isValid) return this; + + if (units.length === 0) { + return this; + } + + units = units.map(function (u) { + return Duration.normalizeUnit(u); + }); + var built = {}, + accumulated = {}, + vals = this.toObject(); + var lastUnit; + + for (var _iterator2 = _createForOfIteratorHelperLoose(orderedUnits$1), _step2; !(_step2 = _iterator2()).done;) { + var k = _step2.value; + + if (units.indexOf(k) >= 0) { + lastUnit = k; + var own = 0; // anything we haven't boiled down yet should get boiled to this unit + + for (var ak in accumulated) { + own += this.matrix[ak][k] * accumulated[ak]; + accumulated[ak] = 0; + } // plus anything that's already in this unit + + + if (isNumber(vals[k])) { + own += vals[k]; + } + + var i = Math.trunc(own); + built[k] = i; + accumulated[k] = (own * 1000 - i * 1000) / 1000; // plus anything further down the chain that should be rolled up in to this + + for (var down in vals) { + if (orderedUnits$1.indexOf(down) > orderedUnits$1.indexOf(k)) { + convert(this.matrix, vals, down, built, k); + } + } // otherwise, keep it in the wings to boil it later + + } else if (isNumber(vals[k])) { + accumulated[k] = vals[k]; + } + } // anything leftover becomes the decimal for the last unit + // lastUnit must be defined since units is not empty + + + for (var key in accumulated) { + if (accumulated[key] !== 0) { + built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key]; + } + } + + return clone$1(this, { + values: built + }, true).normalize(); + } + /** + * Return the negative of this Duration. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 } + * @return {Duration} + */ + ; + + _proto.negate = function negate() { + if (!this.isValid) return this; + var negated = {}; + + for (var _i2 = 0, _Object$keys2 = Object.keys(this.values); _i2 < _Object$keys2.length; _i2++) { + var k = _Object$keys2[_i2]; + negated[k] = this.values[k] === 0 ? 0 : -this.values[k]; + } + + return clone$1(this, { + values: negated + }, true); + } + /** + * Get the years. + * @type {number} + */ + ; + + /** + * Equality check + * Two Durations are equal iff they have the same units and the same values for each unit. + * @param {Duration} other + * @return {boolean} + */ + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + + if (!this.loc.equals(other.loc)) { + return false; + } + + function eq(v1, v2) { + // Consider 0 and undefined as equal + if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0; + return v1 === v2; + } + + for (var _iterator3 = _createForOfIteratorHelperLoose(orderedUnits$1), _step3; !(_step3 = _iterator3()).done;) { + var u = _step3.value; + + if (!eq(this.values[u], other.values[u])) { + return false; + } + } + + return true; + }; + + _createClass(Duration, [{ + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + /** + * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration + * + * @type {string} + */ + + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + }, { + key: "years", + get: function get() { + return this.isValid ? this.values.years || 0 : NaN; + } + /** + * Get the quarters. + * @type {number} + */ + + }, { + key: "quarters", + get: function get() { + return this.isValid ? this.values.quarters || 0 : NaN; + } + /** + * Get the months. + * @type {number} + */ + + }, { + key: "months", + get: function get() { + return this.isValid ? this.values.months || 0 : NaN; + } + /** + * Get the weeks + * @type {number} + */ + + }, { + key: "weeks", + get: function get() { + return this.isValid ? this.values.weeks || 0 : NaN; + } + /** + * Get the days. + * @type {number} + */ + + }, { + key: "days", + get: function get() { + return this.isValid ? this.values.days || 0 : NaN; + } + /** + * Get the hours. + * @type {number} + */ + + }, { + key: "hours", + get: function get() { + return this.isValid ? this.values.hours || 0 : NaN; + } + /** + * Get the minutes. + * @type {number} + */ + + }, { + key: "minutes", + get: function get() { + return this.isValid ? this.values.minutes || 0 : NaN; + } + /** + * Get the seconds. + * @return {number} + */ + + }, { + key: "seconds", + get: function get() { + return this.isValid ? this.values.seconds || 0 : NaN; + } + /** + * Get the milliseconds. + * @return {number} + */ + + }, { + key: "milliseconds", + get: function get() { + return this.isValid ? this.values.milliseconds || 0 : NaN; + } + /** + * Returns whether the Duration is invalid. Invalid durations are returned by diff operations + * on invalid DateTimes or Intervals. + * @return {boolean} + */ + + }, { + key: "isValid", + get: function get() { + return this.invalid === null; + } + /** + * Returns an error code if this Duration became invalid, or null if the Duration is valid + * @return {string} + */ + + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + /** + * Returns an explanation of why this Duration became invalid, or null if the Duration is valid + * @type {string} + */ + + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + + return Duration; +}(); + +var INVALID$1 = "Invalid Interval"; // checks if the start is equal to or before the end + +function validateStartEnd(start, end) { + if (!start || !start.isValid) { + return Interval.invalid("missing or invalid start"); + } else if (!end || !end.isValid) { + return Interval.invalid("missing or invalid end"); + } else if (end < start) { + return Interval.invalid("end before start", "The end of an interval must be after its start, but you had start=" + start.toISO() + " and end=" + end.toISO()); + } else { + return null; + } +} +/** + * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them. + * + * Here is a brief overview of the most commonly used methods and getters in Interval: + * + * * **Creation** To create an Interval, use {@link Interval#fromDateTimes}, {@link Interval#after}, {@link Interval#before}, or {@link Interval#fromISO}. + * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end. + * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}. + * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval#merge}, {@link Interval#xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}. + * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs} + * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}. + */ + + +var Interval = /*#__PURE__*/function () { + /** + * @private + */ + function Interval(config) { + /** + * @access private + */ + this.s = config.start; + /** + * @access private + */ + + this.e = config.end; + /** + * @access private + */ + + this.invalid = config.invalid || null; + /** + * @access private + */ + + this.isLuxonInterval = true; + } + /** + * Create an invalid Interval. + * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Interval} + */ + + + Interval.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Interval is invalid"); + } + + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidIntervalError(invalid); + } else { + return new Interval({ + invalid: invalid + }); + } + } + /** + * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end. + * @param {DateTime|Date|Object} start + * @param {DateTime|Date|Object} end + * @return {Interval} + */ + ; + + Interval.fromDateTimes = function fromDateTimes(start, end) { + var builtStart = friendlyDateTime(start), + builtEnd = friendlyDateTime(end); + var validateError = validateStartEnd(builtStart, builtEnd); + + if (validateError == null) { + return new Interval({ + start: builtStart, + end: builtEnd + }); + } else { + return validateError; + } + } + /** + * Create an Interval from a start DateTime and a Duration to extend to. + * @param {DateTime|Date|Object} start + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + ; + + Interval.after = function after(start, duration) { + var dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(start); + return Interval.fromDateTimes(dt, dt.plus(dur)); + } + /** + * Create an Interval from an end DateTime and a Duration to extend backwards to. + * @param {DateTime|Date|Object} end + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + ; + + Interval.before = function before(end, duration) { + var dur = Duration.fromDurationLike(duration), + dt = friendlyDateTime(end); + return Interval.fromDateTimes(dt.minus(dur), dt); + } + /** + * Create an Interval from an ISO 8601 string. + * Accepts `/`, `/`, and `/` formats. + * @param {string} text - the ISO string to parse + * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO} + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {Interval} + */ + ; + + Interval.fromISO = function fromISO(text, opts) { + var _split = (text || "").split("/", 2), + s = _split[0], + e = _split[1]; + + if (s && e) { + var start, startIsValid; + + try { + start = DateTime.fromISO(s, opts); + startIsValid = start.isValid; + } catch (e) { + startIsValid = false; + } + + var end, endIsValid; + + try { + end = DateTime.fromISO(e, opts); + endIsValid = end.isValid; + } catch (e) { + endIsValid = false; + } + + if (startIsValid && endIsValid) { + return Interval.fromDateTimes(start, end); + } + + if (startIsValid) { + var dur = Duration.fromISO(e, opts); + + if (dur.isValid) { + return Interval.after(start, dur); + } + } else if (endIsValid) { + var _dur = Duration.fromISO(s, opts); + + if (_dur.isValid) { + return Interval.before(end, _dur); + } + } + } + + return Interval.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + /** + * Check if an object is an Interval. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + ; + + Interval.isInterval = function isInterval(o) { + return o && o.isLuxonInterval || false; + } + /** + * Returns the start of the Interval + * @type {DateTime} + */ + ; + + var _proto = Interval.prototype; + + /** + * Returns the length of the Interval in the specified unit. + * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in. + * @return {number} + */ + _proto.length = function length(unit) { + if (unit === void 0) { + unit = "milliseconds"; + } + + return this.isValid ? this.toDuration.apply(this, [unit]).get(unit) : NaN; + } + /** + * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part. + * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day' + * asks 'what dates are included in this interval?', not 'how many days long is this interval?' + * @param {string} [unit='milliseconds'] - the unit of time to count. + * @return {number} + */ + ; + + _proto.count = function count(unit) { + if (unit === void 0) { + unit = "milliseconds"; + } + + if (!this.isValid) return NaN; + var start = this.start.startOf(unit), + end = this.end.startOf(unit); + return Math.floor(end.diff(start, unit).get(unit)) + 1; + } + /** + * Returns whether this Interval's start and end are both in the same unit of time + * @param {string} unit - the unit of time to check sameness on + * @return {boolean} + */ + ; + + _proto.hasSame = function hasSame(unit) { + return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false; + } + /** + * Return whether this Interval has the same start and end DateTimes. + * @return {boolean} + */ + ; + + _proto.isEmpty = function isEmpty() { + return this.s.valueOf() === this.e.valueOf(); + } + /** + * Return whether this Interval's start is after the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + ; + + _proto.isAfter = function isAfter(dateTime) { + if (!this.isValid) return false; + return this.s > dateTime; + } + /** + * Return whether this Interval's end is before the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + ; + + _proto.isBefore = function isBefore(dateTime) { + if (!this.isValid) return false; + return this.e <= dateTime; + } + /** + * Return whether this Interval contains the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + ; + + _proto.contains = function contains(dateTime) { + if (!this.isValid) return false; + return this.s <= dateTime && this.e > dateTime; + } + /** + * "Sets" the start and/or end dates. Returns a newly-constructed Interval. + * @param {Object} values - the values to set + * @param {DateTime} values.start - the starting DateTime + * @param {DateTime} values.end - the ending DateTime + * @return {Interval} + */ + ; + + _proto.set = function set(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + start = _ref.start, + end = _ref.end; + + if (!this.isValid) return this; + return Interval.fromDateTimes(start || this.s, end || this.e); + } + /** + * Split this Interval at each of the specified DateTimes + * @param {...DateTime} dateTimes - the unit of time to count. + * @return {Array} + */ + ; + + _proto.splitAt = function splitAt() { + var _this = this; + + if (!this.isValid) return []; + + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + + var sorted = dateTimes.map(friendlyDateTime).filter(function (d) { + return _this.contains(d); + }).sort(), + results = []; + var s = this.s, + i = 0; + + while (s < this.e) { + var added = sorted[i] || this.e, + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + i += 1; + } + + return results; + } + /** + * Split this Interval into smaller Intervals, each of the specified length. + * Left over time is grouped into a smaller interval + * @param {Duration|Object|number} duration - The length of each resulting interval. + * @return {Array} + */ + ; + + _proto.splitBy = function splitBy(duration) { + var dur = Duration.fromDurationLike(duration); + + if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) { + return []; + } + + var s = this.s, + idx = 1, + next; + var results = []; + + while (s < this.e) { + var added = this.start.plus(dur.mapUnits(function (x) { + return x * idx; + })); + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + idx += 1; + } + + return results; + } + /** + * Split this Interval into the specified number of smaller intervals. + * @param {number} numberOfParts - The number of Intervals to divide the Interval into. + * @return {Array} + */ + ; + + _proto.divideEqually = function divideEqually(numberOfParts) { + if (!this.isValid) return []; + return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts); + } + /** + * Return whether this Interval overlaps with the specified Interval + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.overlaps = function overlaps(other) { + return this.e > other.s && this.s < other.e; + } + /** + * Return whether this Interval's end is adjacent to the specified Interval's start. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.abutsStart = function abutsStart(other) { + if (!this.isValid) return false; + return +this.e === +other.s; + } + /** + * Return whether this Interval's start is adjacent to the specified Interval's end. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.abutsEnd = function abutsEnd(other) { + if (!this.isValid) return false; + return +other.e === +this.s; + } + /** + * Return whether this Interval engulfs the start and end of the specified Interval. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.engulfs = function engulfs(other) { + if (!this.isValid) return false; + return this.s <= other.s && this.e >= other.e; + } + /** + * Return whether this Interval has the same start and end as the specified Interval. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + + return this.s.equals(other.s) && this.e.equals(other.e); + } + /** + * Return an Interval representing the intersection of this Interval and the specified Interval. + * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals. + * Returns null if the intersection is empty, meaning, the intervals don't intersect. + * @param {Interval} other + * @return {Interval} + */ + ; + + _proto.intersection = function intersection(other) { + if (!this.isValid) return this; + var s = this.s > other.s ? this.s : other.s, + e = this.e < other.e ? this.e : other.e; + + if (s >= e) { + return null; + } else { + return Interval.fromDateTimes(s, e); + } + } + /** + * Return an Interval representing the union of this Interval and the specified Interval. + * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals. + * @param {Interval} other + * @return {Interval} + */ + ; + + _proto.union = function union(other) { + if (!this.isValid) return this; + var s = this.s < other.s ? this.s : other.s, + e = this.e > other.e ? this.e : other.e; + return Interval.fromDateTimes(s, e); + } + /** + * Merge an array of Intervals into a equivalent minimal set of Intervals. + * Combines overlapping and adjacent Intervals. + * @param {Array} intervals + * @return {Array} + */ + ; + + Interval.merge = function merge(intervals) { + var _intervals$sort$reduc = intervals.sort(function (a, b) { + return a.s - b.s; + }).reduce(function (_ref2, item) { + var sofar = _ref2[0], + current = _ref2[1]; + + if (!current) { + return [sofar, item]; + } else if (current.overlaps(item) || current.abutsStart(item)) { + return [sofar, current.union(item)]; + } else { + return [sofar.concat([current]), item]; + } + }, [[], null]), + found = _intervals$sort$reduc[0], + final = _intervals$sort$reduc[1]; + + if (final) { + found.push(final); + } + + return found; + } + /** + * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals. + * @param {Array} intervals + * @return {Array} + */ + ; + + Interval.xor = function xor(intervals) { + var _Array$prototype; + + var start = null, + currentCount = 0; + + var results = [], + ends = intervals.map(function (i) { + return [{ + time: i.s, + type: "s" + }, { + time: i.e, + type: "e" + }]; + }), + flattened = (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, ends), + arr = flattened.sort(function (a, b) { + return a.time - b.time; + }); + + for (var _iterator = _createForOfIteratorHelperLoose(arr), _step; !(_step = _iterator()).done;) { + var i = _step.value; + currentCount += i.type === "s" ? 1 : -1; + + if (currentCount === 1) { + start = i.time; + } else { + if (start && +start !== +i.time) { + results.push(Interval.fromDateTimes(start, i.time)); + } + + start = null; + } + } + + return Interval.merge(results); + } + /** + * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals. + * @param {...Interval} intervals + * @return {Array} + */ + ; + + _proto.difference = function difference() { + var _this2 = this; + + for (var _len2 = arguments.length, intervals = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + intervals[_key2] = arguments[_key2]; + } + + return Interval.xor([this].concat(intervals)).map(function (i) { + return _this2.intersection(i); + }).filter(function (i) { + return i && !i.isEmpty(); + }); + } + /** + * Returns a string representation of this Interval appropriate for debugging. + * @return {string} + */ + ; + + _proto.toString = function toString() { + if (!this.isValid) return INVALID$1; + return "[" + this.s.toISO() + " \u2013 " + this.e.toISO() + ")"; + } + /** + * Returns an ISO 8601-compliant string representation of this Interval. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */ + ; + + _proto.toISO = function toISO(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISO(opts) + "/" + this.e.toISO(opts); + } + /** + * Returns an ISO 8601-compliant string representation of date of this Interval. + * The time components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {string} + */ + ; + + _proto.toISODate = function toISODate() { + if (!this.isValid) return INVALID$1; + return this.s.toISODate() + "/" + this.e.toISODate(); + } + /** + * Returns an ISO 8601-compliant string representation of time of this Interval. + * The date components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */ + ; + + _proto.toISOTime = function toISOTime(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISOTime(opts) + "/" + this.e.toISOTime(opts); + } + /** + * Returns a string representation of this Interval formatted according to the specified format string. + * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime#toFormat} for details. + * @param {Object} opts - options + * @param {string} [opts.separator = ' – '] - a separator to place between the start and end representations + * @return {string} + */ + ; + + _proto.toFormat = function toFormat(dateFormat, _temp2) { + var _ref3 = _temp2 === void 0 ? {} : _temp2, + _ref3$separator = _ref3.separator, + separator = _ref3$separator === void 0 ? " – " : _ref3$separator; + + if (!this.isValid) return INVALID$1; + return "" + this.s.toFormat(dateFormat) + separator + this.e.toFormat(dateFormat); + } + /** + * Return a Duration representing the time spanned by this interval. + * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 } + * @return {Duration} + */ + ; + + _proto.toDuration = function toDuration(unit, opts) { + if (!this.isValid) { + return Duration.invalid(this.invalidReason); + } + + return this.e.diff(this.s, unit, opts); + } + /** + * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes + * @param {function} mapFn + * @return {Interval} + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC()) + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 })) + */ + ; + + _proto.mapEndpoints = function mapEndpoints(mapFn) { + return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); + }; + + _createClass(Interval, [{ + key: "start", + get: function get() { + return this.isValid ? this.s : null; + } + /** + * Returns the end of the Interval + * @type {DateTime} + */ + + }, { + key: "end", + get: function get() { + return this.isValid ? this.e : null; + } + /** + * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'. + * @type {boolean} + */ + + }, { + key: "isValid", + get: function get() { + return this.invalidReason === null; + } + /** + * Returns an error code if this Interval is invalid, or null if the Interval is valid + * @type {string} + */ + + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + /** + * Returns an explanation of why this Interval became invalid, or null if the Interval is valid + * @type {string} + */ + + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + + return Interval; +}(); + +/** + * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment. + */ + +var Info = /*#__PURE__*/function () { + function Info() {} + + /** + * Return whether the specified zone contains a DST. + * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone. + * @return {boolean} + */ + Info.hasDST = function hasDST(zone) { + if (zone === void 0) { + zone = Settings.defaultZone; + } + + var proto = DateTime.now().setZone(zone).set({ + month: 12 + }); + return !zone.isUniversal && proto.offset !== proto.set({ + month: 6 + }).offset; + } + /** + * Return whether the specified zone is a valid IANA specifier. + * @param {string} zone - Zone to check + * @return {boolean} + */ + ; + + Info.isValidIANAZone = function isValidIANAZone(zone) { + return IANAZone.isValidZone(zone); + } + /** + * Converts the input into a {@link Zone} instance. + * + * * If `input` is already a Zone instance, it is returned unchanged. + * * If `input` is a string containing a valid time zone name, a Zone instance + * with that name is returned. + * * If `input` is a string that doesn't refer to a known time zone, a Zone + * instance with {@link Zone#isValid} == false is returned. + * * If `input is a number, a Zone instance with the specified fixed offset + * in minutes is returned. + * * If `input` is `null` or `undefined`, the default zone is returned. + * @param {string|Zone|number} [input] - the value to be converted + * @return {Zone} + */ + ; + + Info.normalizeZone = function normalizeZone$1(input) { + return normalizeZone(input, Settings.defaultZone); + } + /** + * Return an array of standalone month names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @example Info.months()[0] //=> 'January' + * @example Info.months('short')[0] //=> 'Jan' + * @example Info.months('numeric')[0] //=> '1' + * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.' + * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١' + * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I' + * @return {Array} + */ + ; + + Info.months = function months(length, _temp) { + if (length === void 0) { + length = "long"; + } + + var _ref = _temp === void 0 ? {} : _temp, + _ref$locale = _ref.locale, + locale = _ref$locale === void 0 ? null : _ref$locale, + _ref$numberingSystem = _ref.numberingSystem, + numberingSystem = _ref$numberingSystem === void 0 ? null : _ref$numberingSystem, + _ref$locObj = _ref.locObj, + locObj = _ref$locObj === void 0 ? null : _ref$locObj, + _ref$outputCalendar = _ref.outputCalendar, + outputCalendar = _ref$outputCalendar === void 0 ? "gregory" : _ref$outputCalendar; + + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length); + } + /** + * Return an array of format month names. + * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that + * changes the string. + * See {@link Info#months} + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @return {Array} + */ + ; + + Info.monthsFormat = function monthsFormat(length, _temp2) { + if (length === void 0) { + length = "long"; + } + + var _ref2 = _temp2 === void 0 ? {} : _temp2, + _ref2$locale = _ref2.locale, + locale = _ref2$locale === void 0 ? null : _ref2$locale, + _ref2$numberingSystem = _ref2.numberingSystem, + numberingSystem = _ref2$numberingSystem === void 0 ? null : _ref2$numberingSystem, + _ref2$locObj = _ref2.locObj, + locObj = _ref2$locObj === void 0 ? null : _ref2$locObj, + _ref2$outputCalendar = _ref2.outputCalendar, + outputCalendar = _ref2$outputCalendar === void 0 ? "gregory" : _ref2$outputCalendar; + + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true); + } + /** + * Return an array of standalone week names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the weekday representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @example Info.weekdays()[0] //=> 'Monday' + * @example Info.weekdays('short')[0] //=> 'Mon' + * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.' + * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين' + * @return {Array} + */ + ; + + Info.weekdays = function weekdays(length, _temp3) { + if (length === void 0) { + length = "long"; + } + + var _ref3 = _temp3 === void 0 ? {} : _temp3, + _ref3$locale = _ref3.locale, + locale = _ref3$locale === void 0 ? null : _ref3$locale, + _ref3$numberingSystem = _ref3.numberingSystem, + numberingSystem = _ref3$numberingSystem === void 0 ? null : _ref3$numberingSystem, + _ref3$locObj = _ref3.locObj, + locObj = _ref3$locObj === void 0 ? null : _ref3$locObj; + + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length); + } + /** + * Return an array of format week names. + * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that + * changes the string. + * See {@link Info#weekdays} + * @param {string} [length='long'] - the length of the month representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale=null] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @return {Array} + */ + ; + + Info.weekdaysFormat = function weekdaysFormat(length, _temp4) { + if (length === void 0) { + length = "long"; + } + + var _ref4 = _temp4 === void 0 ? {} : _temp4, + _ref4$locale = _ref4.locale, + locale = _ref4$locale === void 0 ? null : _ref4$locale, + _ref4$numberingSystem = _ref4.numberingSystem, + numberingSystem = _ref4$numberingSystem === void 0 ? null : _ref4$numberingSystem, + _ref4$locObj = _ref4.locObj, + locObj = _ref4$locObj === void 0 ? null : _ref4$locObj; + + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true); + } + /** + * Return an array of meridiems. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.meridiems() //=> [ 'AM', 'PM' ] + * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ] + * @return {Array} + */ + ; + + Info.meridiems = function meridiems(_temp5) { + var _ref5 = _temp5 === void 0 ? {} : _temp5, + _ref5$locale = _ref5.locale, + locale = _ref5$locale === void 0 ? null : _ref5$locale; + + return Locale.create(locale).meridiems(); + } + /** + * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian. + * @param {string} [length='short'] - the length of the era representation, such as "short" or "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.eras() //=> [ 'BC', 'AD' ] + * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ] + * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ] + * @return {Array} + */ + ; + + Info.eras = function eras(length, _temp6) { + if (length === void 0) { + length = "short"; + } + + var _ref6 = _temp6 === void 0 ? {} : _temp6, + _ref6$locale = _ref6.locale, + locale = _ref6$locale === void 0 ? null : _ref6$locale; + + return Locale.create(locale, null, "gregory").eras(length); + } + /** + * Return the set of available features in this environment. + * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case. + * Keys: + * * `relative`: whether this environment supports relative time formatting + * @example Info.features() //=> { relative: false } + * @return {Object} + */ + ; + + Info.features = function features() { + return { + relative: hasRelative() + }; + }; + + return Info; +}(); + +function dayDiff(earlier, later) { + var utcDayStart = function utcDayStart(dt) { + return dt.toUTC(0, { + keepLocalTime: true + }).startOf("day").valueOf(); + }, + ms = utcDayStart(later) - utcDayStart(earlier); + + return Math.floor(Duration.fromMillis(ms).as("days")); +} + +function highOrderDiffs(cursor, later, units) { + var differs = [["years", function (a, b) { + return b.year - a.year; + }], ["quarters", function (a, b) { + return b.quarter - a.quarter; + }], ["months", function (a, b) { + return b.month - a.month + (b.year - a.year) * 12; + }], ["weeks", function (a, b) { + var days = dayDiff(a, b); + return (days - days % 7) / 7; + }], ["days", dayDiff]]; + var results = {}; + var lowestOrder, highWater; + + for (var _i = 0, _differs = differs; _i < _differs.length; _i++) { + var _differs$_i = _differs[_i], + unit = _differs$_i[0], + differ = _differs$_i[1]; + + if (units.indexOf(unit) >= 0) { + var _cursor$plus; + + lowestOrder = unit; + var delta = differ(cursor, later); + highWater = cursor.plus((_cursor$plus = {}, _cursor$plus[unit] = delta, _cursor$plus)); + + if (highWater > later) { + var _cursor$plus2; + + cursor = cursor.plus((_cursor$plus2 = {}, _cursor$plus2[unit] = delta - 1, _cursor$plus2)); + delta -= 1; + } else { + cursor = highWater; + } + + results[unit] = delta; + } + } + + return [cursor, results, highWater, lowestOrder]; +} + +function _diff (earlier, later, units, opts) { + var _highOrderDiffs = highOrderDiffs(earlier, later, units), + cursor = _highOrderDiffs[0], + results = _highOrderDiffs[1], + highWater = _highOrderDiffs[2], + lowestOrder = _highOrderDiffs[3]; + + var remainingMillis = later - cursor; + var lowerOrderUnits = units.filter(function (u) { + return ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0; + }); + + if (lowerOrderUnits.length === 0) { + if (highWater < later) { + var _cursor$plus3; + + highWater = cursor.plus((_cursor$plus3 = {}, _cursor$plus3[lowestOrder] = 1, _cursor$plus3)); + } + + if (highWater !== cursor) { + results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor); + } + } + + var duration = Duration.fromObject(results, opts); + + if (lowerOrderUnits.length > 0) { + var _Duration$fromMillis; + + return (_Duration$fromMillis = Duration.fromMillis(remainingMillis, opts)).shiftTo.apply(_Duration$fromMillis, lowerOrderUnits).plus(duration); + } else { + return duration; + } +} + +var numberingSystems = { + arab: "[\u0660-\u0669]", + arabext: "[\u06F0-\u06F9]", + bali: "[\u1B50-\u1B59]", + beng: "[\u09E6-\u09EF]", + deva: "[\u0966-\u096F]", + fullwide: "[\uFF10-\uFF19]", + gujr: "[\u0AE6-\u0AEF]", + hanidec: "[〇|一|二|三|四|五|六|七|八|九]", + khmr: "[\u17E0-\u17E9]", + knda: "[\u0CE6-\u0CEF]", + laoo: "[\u0ED0-\u0ED9]", + limb: "[\u1946-\u194F]", + mlym: "[\u0D66-\u0D6F]", + mong: "[\u1810-\u1819]", + mymr: "[\u1040-\u1049]", + orya: "[\u0B66-\u0B6F]", + tamldec: "[\u0BE6-\u0BEF]", + telu: "[\u0C66-\u0C6F]", + thai: "[\u0E50-\u0E59]", + tibt: "[\u0F20-\u0F29]", + latn: "\\d" +}; +var numberingSystemsUTF16 = { + arab: [1632, 1641], + arabext: [1776, 1785], + bali: [6992, 7001], + beng: [2534, 2543], + deva: [2406, 2415], + fullwide: [65296, 65303], + gujr: [2790, 2799], + khmr: [6112, 6121], + knda: [3302, 3311], + laoo: [3792, 3801], + limb: [6470, 6479], + mlym: [3430, 3439], + mong: [6160, 6169], + mymr: [4160, 4169], + orya: [2918, 2927], + tamldec: [3046, 3055], + telu: [3174, 3183], + thai: [3664, 3673], + tibt: [3872, 3881] +}; +var hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split(""); +function parseDigits(str) { + var value = parseInt(str, 10); + + if (isNaN(value)) { + value = ""; + + for (var i = 0; i < str.length; i++) { + var code = str.charCodeAt(i); + + if (str[i].search(numberingSystems.hanidec) !== -1) { + value += hanidecChars.indexOf(str[i]); + } else { + for (var key in numberingSystemsUTF16) { + var _numberingSystemsUTF = numberingSystemsUTF16[key], + min = _numberingSystemsUTF[0], + max = _numberingSystemsUTF[1]; + + if (code >= min && code <= max) { + value += code - min; + } + } + } + } + + return parseInt(value, 10); + } else { + return value; + } +} +function digitRegex(_ref, append) { + var numberingSystem = _ref.numberingSystem; + + if (append === void 0) { + append = ""; + } + + return new RegExp("" + numberingSystems[numberingSystem || "latn"] + append); +} + +var MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support"; + +function intUnit(regex, post) { + if (post === void 0) { + post = function post(i) { + return i; + }; + } + + return { + regex: regex, + deser: function deser(_ref) { + var s = _ref[0]; + return post(parseDigits(s)); + } + }; +} + +var NBSP = String.fromCharCode(160); +var spaceOrNBSP = "[ " + NBSP + "]"; +var spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, "g"); + +function fixListRegex(s) { + // make dots optional and also make them literal + // make space and non breakable space characters interchangeable + return s.replace(/\./g, "\\.?").replace(spaceOrNBSPRegExp, spaceOrNBSP); +} + +function stripInsensitivities(s) { + return s.replace(/\./g, "") // ignore dots that were made optional + .replace(spaceOrNBSPRegExp, " ") // interchange space and nbsp + .toLowerCase(); +} + +function oneOf(strings, startIndex) { + if (strings === null) { + return null; + } else { + return { + regex: RegExp(strings.map(fixListRegex).join("|")), + deser: function deser(_ref2) { + var s = _ref2[0]; + return strings.findIndex(function (i) { + return stripInsensitivities(s) === stripInsensitivities(i); + }) + startIndex; + } + }; + } +} + +function offset(regex, groups) { + return { + regex: regex, + deser: function deser(_ref3) { + var h = _ref3[1], + m = _ref3[2]; + return signedOffset(h, m); + }, + groups: groups + }; +} + +function simple(regex) { + return { + regex: regex, + deser: function deser(_ref4) { + var s = _ref4[0]; + return s; + } + }; +} + +function escapeToken(value) { + return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); +} + +function unitForToken(token, loc) { + var one = digitRegex(loc), + two = digitRegex(loc, "{2}"), + three = digitRegex(loc, "{3}"), + four = digitRegex(loc, "{4}"), + six = digitRegex(loc, "{6}"), + oneOrTwo = digitRegex(loc, "{1,2}"), + oneToThree = digitRegex(loc, "{1,3}"), + oneToSix = digitRegex(loc, "{1,6}"), + oneToNine = digitRegex(loc, "{1,9}"), + twoToFour = digitRegex(loc, "{2,4}"), + fourToSix = digitRegex(loc, "{4,6}"), + literal = function literal(t) { + return { + regex: RegExp(escapeToken(t.val)), + deser: function deser(_ref5) { + var s = _ref5[0]; + return s; + }, + literal: true + }; + }, + unitate = function unitate(t) { + if (token.literal) { + return literal(t); + } + + switch (t.val) { + // era + case "G": + return oneOf(loc.eras("short", false), 0); + + case "GG": + return oneOf(loc.eras("long", false), 0); + // years + + case "y": + return intUnit(oneToSix); + + case "yy": + return intUnit(twoToFour, untruncateYear); + + case "yyyy": + return intUnit(four); + + case "yyyyy": + return intUnit(fourToSix); + + case "yyyyyy": + return intUnit(six); + // months + + case "M": + return intUnit(oneOrTwo); + + case "MM": + return intUnit(two); + + case "MMM": + return oneOf(loc.months("short", true, false), 1); + + case "MMMM": + return oneOf(loc.months("long", true, false), 1); + + case "L": + return intUnit(oneOrTwo); + + case "LL": + return intUnit(two); + + case "LLL": + return oneOf(loc.months("short", false, false), 1); + + case "LLLL": + return oneOf(loc.months("long", false, false), 1); + // dates + + case "d": + return intUnit(oneOrTwo); + + case "dd": + return intUnit(two); + // ordinals + + case "o": + return intUnit(oneToThree); + + case "ooo": + return intUnit(three); + // time + + case "HH": + return intUnit(two); + + case "H": + return intUnit(oneOrTwo); + + case "hh": + return intUnit(two); + + case "h": + return intUnit(oneOrTwo); + + case "mm": + return intUnit(two); + + case "m": + return intUnit(oneOrTwo); + + case "q": + return intUnit(oneOrTwo); + + case "qq": + return intUnit(two); + + case "s": + return intUnit(oneOrTwo); + + case "ss": + return intUnit(two); + + case "S": + return intUnit(oneToThree); + + case "SSS": + return intUnit(three); + + case "u": + return simple(oneToNine); + + case "uu": + return simple(oneOrTwo); + + case "uuu": + return intUnit(one); + // meridiem + + case "a": + return oneOf(loc.meridiems(), 0); + // weekYear (k) + + case "kkkk": + return intUnit(four); + + case "kk": + return intUnit(twoToFour, untruncateYear); + // weekNumber (W) + + case "W": + return intUnit(oneOrTwo); + + case "WW": + return intUnit(two); + // weekdays + + case "E": + case "c": + return intUnit(one); + + case "EEE": + return oneOf(loc.weekdays("short", false, false), 1); + + case "EEEE": + return oneOf(loc.weekdays("long", false, false), 1); + + case "ccc": + return oneOf(loc.weekdays("short", true, false), 1); + + case "cccc": + return oneOf(loc.weekdays("long", true, false), 1); + // offset/zone + + case "Z": + case "ZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(?::(" + two.source + "))?"), 2); + + case "ZZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(" + two.source + ")?"), 2); + // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing + // because we don't have any way to figure out what they are + + case "z": + return simple(/[a-z_+-/]{1,256}?/i); + + default: + return literal(t); + } + }; + + var unit = unitate(token) || { + invalidReason: MISSING_FTP + }; + unit.token = token; + return unit; +} + +var partTypeStyleToTokenVal = { + year: { + "2-digit": "yy", + numeric: "yyyyy" + }, + month: { + numeric: "M", + "2-digit": "MM", + short: "MMM", + long: "MMMM" + }, + day: { + numeric: "d", + "2-digit": "dd" + }, + weekday: { + short: "EEE", + long: "EEEE" + }, + dayperiod: "a", + dayPeriod: "a", + hour: { + numeric: "h", + "2-digit": "hh" + }, + minute: { + numeric: "m", + "2-digit": "mm" + }, + second: { + numeric: "s", + "2-digit": "ss" + } +}; + +function tokenForPart(part, locale, formatOpts) { + var type = part.type, + value = part.value; + + if (type === "literal") { + return { + literal: true, + val: value + }; + } + + var style = formatOpts[type]; + var val = partTypeStyleToTokenVal[type]; + + if (typeof val === "object") { + val = val[style]; + } + + if (val) { + return { + literal: false, + val: val + }; + } + + return undefined; +} + +function buildRegex(units) { + var re = units.map(function (u) { + return u.regex; + }).reduce(function (f, r) { + return f + "(" + r.source + ")"; + }, ""); + return ["^" + re + "$", units]; +} + +function match(input, regex, handlers) { + var matches = input.match(regex); + + if (matches) { + var all = {}; + var matchIndex = 1; + + for (var i in handlers) { + if (hasOwnProperty(handlers, i)) { + var h = handlers[i], + groups = h.groups ? h.groups + 1 : 1; + + if (!h.literal && h.token) { + all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups)); + } + + matchIndex += groups; + } + } + + return [matches, all]; + } else { + return [matches, {}]; + } +} + +function dateTimeFromMatches(matches) { + var toField = function toField(token) { + switch (token) { + case "S": + return "millisecond"; + + case "s": + return "second"; + + case "m": + return "minute"; + + case "h": + case "H": + return "hour"; + + case "d": + return "day"; + + case "o": + return "ordinal"; + + case "L": + case "M": + return "month"; + + case "y": + return "year"; + + case "E": + case "c": + return "weekday"; + + case "W": + return "weekNumber"; + + case "k": + return "weekYear"; + + case "q": + return "quarter"; + + default: + return null; + } + }; + + var zone = null; + var specificOffset; + + if (!isUndefined(matches.z)) { + zone = IANAZone.create(matches.z); + } + + if (!isUndefined(matches.Z)) { + if (!zone) { + zone = new FixedOffsetZone(matches.Z); + } + + specificOffset = matches.Z; + } + + if (!isUndefined(matches.q)) { + matches.M = (matches.q - 1) * 3 + 1; + } + + if (!isUndefined(matches.h)) { + if (matches.h < 12 && matches.a === 1) { + matches.h += 12; + } else if (matches.h === 12 && matches.a === 0) { + matches.h = 0; + } + } + + if (matches.G === 0 && matches.y) { + matches.y = -matches.y; + } + + if (!isUndefined(matches.u)) { + matches.S = parseMillis(matches.u); + } + + var vals = Object.keys(matches).reduce(function (r, k) { + var f = toField(k); + + if (f) { + r[f] = matches[k]; + } + + return r; + }, {}); + return [vals, zone, specificOffset]; +} + +var dummyDateTimeCache = null; + +function getDummyDateTime() { + if (!dummyDateTimeCache) { + dummyDateTimeCache = DateTime.fromMillis(1555555555555); + } + + return dummyDateTimeCache; +} + +function maybeExpandMacroToken(token, locale) { + if (token.literal) { + return token; + } + + var formatOpts = Formatter.macroTokenToFormatOpts(token.val); + + if (!formatOpts) { + return token; + } + + var formatter = Formatter.create(locale, formatOpts); + var parts = formatter.formatDateTimeParts(getDummyDateTime()); + var tokens = parts.map(function (p) { + return tokenForPart(p, locale, formatOpts); + }); + + if (tokens.includes(undefined)) { + return token; + } + + return tokens; +} + +function expandMacroTokens(tokens, locale) { + var _Array$prototype; + + return (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, tokens.map(function (t) { + return maybeExpandMacroToken(t, locale); + })); +} +/** + * @private + */ + + +function explainFromTokens(locale, input, format) { + var tokens = expandMacroTokens(Formatter.parseFormat(format), locale), + units = tokens.map(function (t) { + return unitForToken(t, locale); + }), + disqualifyingUnit = units.find(function (t) { + return t.invalidReason; + }); + + if (disqualifyingUnit) { + return { + input: input, + tokens: tokens, + invalidReason: disqualifyingUnit.invalidReason + }; + } else { + var _buildRegex = buildRegex(units), + regexString = _buildRegex[0], + handlers = _buildRegex[1], + regex = RegExp(regexString, "i"), + _match = match(input, regex, handlers), + rawMatches = _match[0], + matches = _match[1], + _ref6 = matches ? dateTimeFromMatches(matches) : [null, null, undefined], + result = _ref6[0], + zone = _ref6[1], + specificOffset = _ref6[2]; + + if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) { + throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format"); + } + + return { + input: input, + tokens: tokens, + regex: regex, + rawMatches: rawMatches, + matches: matches, + result: result, + zone: zone, + specificOffset: specificOffset + }; + } +} +function parseFromTokens(locale, input, format) { + var _explainFromTokens = explainFromTokens(locale, input, format), + result = _explainFromTokens.result, + zone = _explainFromTokens.zone, + specificOffset = _explainFromTokens.specificOffset, + invalidReason = _explainFromTokens.invalidReason; + + return [result, zone, specificOffset, invalidReason]; +} + +var nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], + leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; + +function unitOutOfRange(unit, value) { + return new Invalid("unit out of range", "you specified " + value + " (of type " + typeof value + ") as a " + unit + ", which is invalid"); +} + +function dayOfWeek(year, month, day) { + var d = new Date(Date.UTC(year, month - 1, day)); + + if (year < 100 && year >= 0) { + d.setUTCFullYear(d.getUTCFullYear() - 1900); + } + + var js = d.getUTCDay(); + return js === 0 ? 7 : js; +} + +function computeOrdinal(year, month, day) { + return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1]; +} + +function uncomputeOrdinal(year, ordinal) { + var table = isLeapYear(year) ? leapLadder : nonLeapLadder, + month0 = table.findIndex(function (i) { + return i < ordinal; + }), + day = ordinal - table[month0]; + return { + month: month0 + 1, + day: day + }; +} +/** + * @private + */ + + +function gregorianToWeek(gregObj) { + var year = gregObj.year, + month = gregObj.month, + day = gregObj.day, + ordinal = computeOrdinal(year, month, day), + weekday = dayOfWeek(year, month, day); + var weekNumber = Math.floor((ordinal - weekday + 10) / 7), + weekYear; + + if (weekNumber < 1) { + weekYear = year - 1; + weekNumber = weeksInWeekYear(weekYear); + } else if (weekNumber > weeksInWeekYear(year)) { + weekYear = year + 1; + weekNumber = 1; + } else { + weekYear = year; + } + + return _extends({ + weekYear: weekYear, + weekNumber: weekNumber, + weekday: weekday + }, timeObject(gregObj)); +} +function weekToGregorian(weekData) { + var weekYear = weekData.weekYear, + weekNumber = weekData.weekNumber, + weekday = weekData.weekday, + weekdayOfJan4 = dayOfWeek(weekYear, 1, 4), + yearInDays = daysInYear(weekYear); + var ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3, + year; + + if (ordinal < 1) { + year = weekYear - 1; + ordinal += daysInYear(year); + } else if (ordinal > yearInDays) { + year = weekYear + 1; + ordinal -= daysInYear(weekYear); + } else { + year = weekYear; + } + + var _uncomputeOrdinal = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal.month, + day = _uncomputeOrdinal.day; + + return _extends({ + year: year, + month: month, + day: day + }, timeObject(weekData)); +} +function gregorianToOrdinal(gregData) { + var year = gregData.year, + month = gregData.month, + day = gregData.day; + var ordinal = computeOrdinal(year, month, day); + return _extends({ + year: year, + ordinal: ordinal + }, timeObject(gregData)); +} +function ordinalToGregorian(ordinalData) { + var year = ordinalData.year, + ordinal = ordinalData.ordinal; + + var _uncomputeOrdinal2 = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal2.month, + day = _uncomputeOrdinal2.day; + + return _extends({ + year: year, + month: month, + day: day + }, timeObject(ordinalData)); +} +function hasInvalidWeekData(obj) { + var validYear = isInteger(obj.weekYear), + validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)), + validWeekday = integerBetween(obj.weekday, 1, 7); + + if (!validYear) { + return unitOutOfRange("weekYear", obj.weekYear); + } else if (!validWeek) { + return unitOutOfRange("week", obj.week); + } else if (!validWeekday) { + return unitOutOfRange("weekday", obj.weekday); + } else return false; +} +function hasInvalidOrdinalData(obj) { + var validYear = isInteger(obj.year), + validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year)); + + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validOrdinal) { + return unitOutOfRange("ordinal", obj.ordinal); + } else return false; +} +function hasInvalidGregorianData(obj) { + var validYear = isInteger(obj.year), + validMonth = integerBetween(obj.month, 1, 12), + validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month)); + + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validMonth) { + return unitOutOfRange("month", obj.month); + } else if (!validDay) { + return unitOutOfRange("day", obj.day); + } else return false; +} +function hasInvalidTimeData(obj) { + var hour = obj.hour, + minute = obj.minute, + second = obj.second, + millisecond = obj.millisecond; + var validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0, + validMinute = integerBetween(minute, 0, 59), + validSecond = integerBetween(second, 0, 59), + validMillisecond = integerBetween(millisecond, 0, 999); + + if (!validHour) { + return unitOutOfRange("hour", hour); + } else if (!validMinute) { + return unitOutOfRange("minute", minute); + } else if (!validSecond) { + return unitOutOfRange("second", second); + } else if (!validMillisecond) { + return unitOutOfRange("millisecond", millisecond); + } else return false; +} + +var INVALID = "Invalid DateTime"; +var MAX_DATE = 8.64e15; + +function unsupportedZone(zone) { + return new Invalid("unsupported zone", "the zone \"" + zone.name + "\" is not supported"); +} // we cache week data on the DT object and this intermediates the cache + + +function possiblyCachedWeekData(dt) { + if (dt.weekData === null) { + dt.weekData = gregorianToWeek(dt.c); + } + + return dt.weekData; +} // clone really means, "make a new object with these modifications". all "setters" really use this +// to create a new object while only changing some of the properties + + +function clone(inst, alts) { + var current = { + ts: inst.ts, + zone: inst.zone, + c: inst.c, + o: inst.o, + loc: inst.loc, + invalid: inst.invalid + }; + return new DateTime(_extends({}, current, alts, { + old: current + })); +} // find the right offset a given local time. The o input is our guess, which determines which +// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST) + + +function fixOffset(localTS, o, tz) { + // Our UTC time is just a guess because our offset is just a guess + var utcGuess = localTS - o * 60 * 1000; // Test whether the zone matches the offset for this ts + + var o2 = tz.offset(utcGuess); // If so, offset didn't change and we're done + + if (o === o2) { + return [utcGuess, o]; + } // If not, change the ts by the difference in the offset + + + utcGuess -= (o2 - o) * 60 * 1000; // If that gives us the local time we want, we're done + + var o3 = tz.offset(utcGuess); + + if (o2 === o3) { + return [utcGuess, o2]; + } // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time + + + return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)]; +} // convert an epoch timestamp into a calendar object with the given offset + + +function tsToObj(ts, offset) { + ts += offset * 60 * 1000; + var d = new Date(ts); + return { + year: d.getUTCFullYear(), + month: d.getUTCMonth() + 1, + day: d.getUTCDate(), + hour: d.getUTCHours(), + minute: d.getUTCMinutes(), + second: d.getUTCSeconds(), + millisecond: d.getUTCMilliseconds() + }; +} // convert a calendar object to a epoch timestamp + + +function objToTS(obj, offset, zone) { + return fixOffset(objToLocalTS(obj), offset, zone); +} // create a new DT instance by adding a duration, adjusting for DSTs + + +function adjustTime(inst, dur) { + var oPre = inst.o, + year = inst.c.year + Math.trunc(dur.years), + month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3, + c = _extends({}, inst.c, { + year: year, + month: month, + day: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + Math.trunc(dur.weeks) * 7 + }), + millisToAdd = Duration.fromObject({ + years: dur.years - Math.trunc(dur.years), + quarters: dur.quarters - Math.trunc(dur.quarters), + months: dur.months - Math.trunc(dur.months), + weeks: dur.weeks - Math.trunc(dur.weeks), + days: dur.days - Math.trunc(dur.days), + hours: dur.hours, + minutes: dur.minutes, + seconds: dur.seconds, + milliseconds: dur.milliseconds + }).as("milliseconds"), + localTS = objToLocalTS(c); + + var _fixOffset = fixOffset(localTS, oPre, inst.zone), + ts = _fixOffset[0], + o = _fixOffset[1]; + + if (millisToAdd !== 0) { + ts += millisToAdd; // that could have changed the offset by going over a DST, but we want to keep the ts the same + + o = inst.zone.offset(ts); + } + + return { + ts: ts, + o: o + }; +} // helper useful in turning the results of parsing into real dates +// by handling the zone options + + +function parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) { + var setZone = opts.setZone, + zone = opts.zone; + + if (parsed && Object.keys(parsed).length !== 0) { + var interpretationZone = parsedZone || zone, + inst = DateTime.fromObject(parsed, _extends({}, opts, { + zone: interpretationZone, + specificOffset: specificOffset + })); + return setZone ? inst : inst.setZone(zone); + } else { + return DateTime.invalid(new Invalid("unparsable", "the input \"" + text + "\" can't be parsed as " + format)); + } +} // if you want to output a technical format (e.g. RFC 2822), this helper +// helps handle the details + + +function toTechFormat(dt, format, allowZ) { + if (allowZ === void 0) { + allowZ = true; + } + + return dt.isValid ? Formatter.create(Locale.create("en-US"), { + allowZ: allowZ, + forceSimple: true + }).formatDateTimeFromString(dt, format) : null; +} + +function _toISODate(o, extended) { + var longFormat = o.c.year > 9999 || o.c.year < 0; + var c = ""; + if (longFormat && o.c.year >= 0) c += "+"; + c += padStart(o.c.year, longFormat ? 6 : 4); + + if (extended) { + c += "-"; + c += padStart(o.c.month); + c += "-"; + c += padStart(o.c.day); + } else { + c += padStart(o.c.month); + c += padStart(o.c.day); + } + + return c; +} + +function _toISOTime(o, extended, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone) { + var c = padStart(o.c.hour); + + if (extended) { + c += ":"; + c += padStart(o.c.minute); + + if (o.c.second !== 0 || !suppressSeconds) { + c += ":"; + } + } else { + c += padStart(o.c.minute); + } + + if (o.c.second !== 0 || !suppressSeconds) { + c += padStart(o.c.second); + + if (o.c.millisecond !== 0 || !suppressMilliseconds) { + c += "."; + c += padStart(o.c.millisecond, 3); + } + } + + if (includeOffset) { + if (o.isOffsetFixed && o.offset === 0 && !extendedZone) { + c += "Z"; + } else if (o.o < 0) { + c += "-"; + c += padStart(Math.trunc(-o.o / 60)); + c += ":"; + c += padStart(Math.trunc(-o.o % 60)); + } else { + c += "+"; + c += padStart(Math.trunc(o.o / 60)); + c += ":"; + c += padStart(Math.trunc(o.o % 60)); + } + } + + if (extendedZone) { + c += "[" + o.zone.ianaName + "]"; + } + + return c; +} // defaults for unspecified units in the supported calendars + + +var defaultUnitValues = { + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 +}, + defaultWeekUnitValues = { + weekNumber: 1, + weekday: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 +}, + defaultOrdinalUnitValues = { + ordinal: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 +}; // Units in the supported calendars, sorted by bigness + +var orderedUnits = ["year", "month", "day", "hour", "minute", "second", "millisecond"], + orderedWeekUnits = ["weekYear", "weekNumber", "weekday", "hour", "minute", "second", "millisecond"], + orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"]; // standardize case and plurality in units + +function normalizeUnit(unit) { + var normalized = { + year: "year", + years: "year", + month: "month", + months: "month", + day: "day", + days: "day", + hour: "hour", + hours: "hour", + minute: "minute", + minutes: "minute", + quarter: "quarter", + quarters: "quarter", + second: "second", + seconds: "second", + millisecond: "millisecond", + milliseconds: "millisecond", + weekday: "weekday", + weekdays: "weekday", + weeknumber: "weekNumber", + weeksnumber: "weekNumber", + weeknumbers: "weekNumber", + weekyear: "weekYear", + weekyears: "weekYear", + ordinal: "ordinal" + }[unit.toLowerCase()]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; +} // this is a dumbed down version of fromObject() that runs about 60% faster +// but doesn't do any validation, makes a bunch of assumptions about what units +// are present, and so on. + + +function quickDT(obj, opts) { + var zone = normalizeZone(opts.zone, Settings.defaultZone), + loc = Locale.fromObject(opts), + tsNow = Settings.now(); + var ts, o; // assume we have the higher-order units + + if (!isUndefined(obj.year)) { + for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits), _step; !(_step = _iterator()).done;) { + var u = _step.value; + + if (isUndefined(obj[u])) { + obj[u] = defaultUnitValues[u]; + } + } + + var invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj); + + if (invalid) { + return DateTime.invalid(invalid); + } + + var offsetProvis = zone.offset(tsNow); + + var _objToTS = objToTS(obj, offsetProvis, zone); + + ts = _objToTS[0]; + o = _objToTS[1]; + } else { + ts = tsNow; + } + + return new DateTime({ + ts: ts, + zone: zone, + loc: loc, + o: o + }); +} + +function diffRelative(start, end, opts) { + var round = isUndefined(opts.round) ? true : opts.round, + format = function format(c, unit) { + c = roundTo(c, round || opts.calendary ? 0 : 2, true); + var formatter = end.loc.clone(opts).relFormatter(opts); + return formatter.format(c, unit); + }, + differ = function differ(unit) { + if (opts.calendary) { + if (!end.hasSame(start, unit)) { + return end.startOf(unit).diff(start.startOf(unit), unit).get(unit); + } else return 0; + } else { + return end.diff(start, unit).get(unit); + } + }; + + if (opts.unit) { + return format(differ(opts.unit), opts.unit); + } + + for (var _iterator2 = _createForOfIteratorHelperLoose(opts.units), _step2; !(_step2 = _iterator2()).done;) { + var unit = _step2.value; + var count = differ(unit); + + if (Math.abs(count) >= 1) { + return format(count, unit); + } + } + + return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]); +} + +function lastOpts(argList) { + var opts = {}, + args; + + if (argList.length > 0 && typeof argList[argList.length - 1] === "object") { + opts = argList[argList.length - 1]; + args = Array.from(argList).slice(0, argList.length - 1); + } else { + args = Array.from(argList); + } + + return [opts, args]; +} +/** + * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them. + * + * A DateTime comprises of: + * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch. + * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone). + * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`. + * + * Here is a brief overview of the most commonly used functionality it provides: + * + * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime#local}, {@link DateTime#utc}, and (most flexibly) {@link DateTime#fromObject}. To create one from a standard string format, use {@link DateTime#fromISO}, {@link DateTime#fromHTTP}, and {@link DateTime#fromRFC2822}. To create one from a custom string format, use {@link DateTime#fromFormat}. To create one from a native JS date, use {@link DateTime#fromJSDate}. + * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month}, + * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors. + * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors. + * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors. + * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}. + * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}. + * + * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation. + */ + + +var DateTime = /*#__PURE__*/function () { + /** + * @access private + */ + function DateTime(config) { + var zone = config.zone || Settings.defaultZone; + var invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || (!zone.isValid ? unsupportedZone(zone) : null); + /** + * @access private + */ + + this.ts = isUndefined(config.ts) ? Settings.now() : config.ts; + var c = null, + o = null; + + if (!invalid) { + var unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone); + + if (unchanged) { + var _ref = [config.old.c, config.old.o]; + c = _ref[0]; + o = _ref[1]; + } else { + var ot = zone.offset(this.ts); + c = tsToObj(this.ts, ot); + invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null; + c = invalid ? null : c; + o = invalid ? null : ot; + } + } + /** + * @access private + */ + + + this._zone = zone; + /** + * @access private + */ + + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + + this.invalid = invalid; + /** + * @access private + */ + + this.weekData = null; + /** + * @access private + */ + + this.c = c; + /** + * @access private + */ + + this.o = o; + /** + * @access private + */ + + this.isLuxonDateTime = true; + } // CONSTRUCT + + /** + * Create a DateTime for the current instant, in the system's time zone. + * + * Use Settings to override these default values if needed. + * @example DateTime.now().toISO() //~> now in the ISO format + * @return {DateTime} + */ + + + DateTime.now = function now() { + return new DateTime({}); + } + /** + * Create a local DateTime + * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month, 1-indexed + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @example DateTime.local() //~> now + * @example DateTime.local({ zone: "America/New_York" }) //~> now, in US east coast time + * @example DateTime.local(2017) //~> 2017-01-01T00:00:00 + * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00 + * @example DateTime.local(2017, 3, 12, { locale: "fr" }) //~> 2017-03-12T00:00:00, with a French locale + * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00 + * @example DateTime.local(2017, 3, 12, 5, { zone: "utc" }) //~> 2017-03-12T05:00:00, in UTC + * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00 + * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10 + * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765 + * @return {DateTime} + */ + ; + + DateTime.local = function local() { + var _lastOpts = lastOpts(arguments), + opts = _lastOpts[0], + args = _lastOpts[1], + year = args[0], + month = args[1], + day = args[2], + hour = args[3], + minute = args[4], + second = args[5], + millisecond = args[6]; + + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, opts); + } + /** + * Create a DateTime in UTC + * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @param {Object} options - configuration options for the DateTime + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @example DateTime.utc() //~> now + * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z + * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z + * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z + * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: "fr" }) //~> 2017-03-12T05:45:00Z with a French locale + * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z + * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: "fr" }) //~> 2017-03-12T05:45:10.765Z with a French locale + * @return {DateTime} + */ + ; + + DateTime.utc = function utc() { + var _lastOpts2 = lastOpts(arguments), + opts = _lastOpts2[0], + args = _lastOpts2[1], + year = args[0], + month = args[1], + day = args[2], + hour = args[3], + minute = args[4], + second = args[5], + millisecond = args[6]; + + opts.zone = FixedOffsetZone.utcInstance; + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, opts); + } + /** + * Create a DateTime from a JavaScript Date object. Uses the default zone. + * @param {Date} date - a JavaScript Date object + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @return {DateTime} + */ + ; + + DateTime.fromJSDate = function fromJSDate(date, options) { + if (options === void 0) { + options = {}; + } + + var ts = isDate(date) ? date.valueOf() : NaN; + + if (Number.isNaN(ts)) { + return DateTime.invalid("invalid input"); + } + + var zoneToUse = normalizeZone(options.zone, Settings.defaultZone); + + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + + return new DateTime({ + ts: ts, + zone: zoneToUse, + loc: Locale.fromObject(options) + }); + } + /** + * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} milliseconds - a number of milliseconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @return {DateTime} + */ + ; + + DateTime.fromMillis = function fromMillis(milliseconds, options) { + if (options === void 0) { + options = {}; + } + + if (!isNumber(milliseconds)) { + throw new InvalidArgumentError("fromMillis requires a numerical input, but received a " + typeof milliseconds + " with value " + milliseconds); + } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) { + // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start + return DateTime.invalid("Timestamp out of range"); + } else { + return new DateTime({ + ts: milliseconds, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + /** + * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} seconds - a number of seconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @return {DateTime} + */ + ; + + DateTime.fromSeconds = function fromSeconds(seconds, options) { + if (options === void 0) { + options = {}; + } + + if (!isNumber(seconds)) { + throw new InvalidArgumentError("fromSeconds requires a numerical input"); + } else { + return new DateTime({ + ts: seconds * 1000, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + /** + * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.year - a year, such as 1987 + * @param {number} obj.month - a month, 1-12 + * @param {number} obj.day - a day of the month, 1-31, depending on the month + * @param {number} obj.ordinal - day of the year, 1-365 or 366 + * @param {number} obj.weekYear - an ISO week year + * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year + * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday + * @param {number} obj.hour - hour of the day, 0-23 + * @param {number} obj.minute - minute of the hour, 0-59 + * @param {number} obj.second - second of the minute, 0-59 + * @param {number} obj.millisecond - millisecond of the second, 0-999 + * @param {Object} opts - options for creating this DateTime + * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone() + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25' + * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01' + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06 + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }), + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' }) + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' }) + * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13' + * @return {DateTime} + */ + ; + + DateTime.fromObject = function fromObject(obj, opts) { + if (opts === void 0) { + opts = {}; + } + + obj = obj || {}; + var zoneToUse = normalizeZone(opts.zone, Settings.defaultZone); + + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + + var tsNow = Settings.now(), + offsetProvis = !isUndefined(opts.specificOffset) ? opts.specificOffset : zoneToUse.offset(tsNow), + normalized = normalizeObject(obj, normalizeUnit), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber, + loc = Locale.fromObject(opts); // cases: + // just a weekday -> this week's instance of that weekday, no worries + // (gregorian data or ordinal) + (weekYear or weekNumber) -> error + // (gregorian month or day) + ordinal -> error + // otherwise just use weeks or ordinals or gregorian, depending on what's specified + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + + var useWeekData = definiteWeekDef || normalized.weekday && !containsGregor; // configure ourselves to deal with gregorian dates or week stuff + + var units, + defaultValues, + objNow = tsToObj(tsNow, offsetProvis); + + if (useWeekData) { + units = orderedWeekUnits; + defaultValues = defaultWeekUnitValues; + objNow = gregorianToWeek(objNow); + } else if (containsOrdinal) { + units = orderedOrdinalUnits; + defaultValues = defaultOrdinalUnitValues; + objNow = gregorianToOrdinal(objNow); + } else { + units = orderedUnits; + defaultValues = defaultUnitValues; + } // set default values for missing stuff + + + var foundFirst = false; + + for (var _iterator3 = _createForOfIteratorHelperLoose(units), _step3; !(_step3 = _iterator3()).done;) { + var u = _step3.value; + var v = normalized[u]; + + if (!isUndefined(v)) { + foundFirst = true; + } else if (foundFirst) { + normalized[u] = defaultValues[u]; + } else { + normalized[u] = objNow[u]; + } + } // make sure the values we have are in range + + + var higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized), + invalid = higherOrderInvalid || hasInvalidTimeData(normalized); + + if (invalid) { + return DateTime.invalid(invalid); + } // compute the actual time + + + var gregorian = useWeekData ? weekToGregorian(normalized) : containsOrdinal ? ordinalToGregorian(normalized) : normalized, + _objToTS2 = objToTS(gregorian, offsetProvis, zoneToUse), + tsFinal = _objToTS2[0], + offsetFinal = _objToTS2[1], + inst = new DateTime({ + ts: tsFinal, + zone: zoneToUse, + o: offsetFinal, + loc: loc + }); // gregorian data + weekday serves only to validate + + + if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) { + return DateTime.invalid("mismatched weekday", "you can't specify both a weekday of " + normalized.weekday + " and a date of " + inst.toISO()); + } + + return inst; + } + /** + * Create a DateTime from an ISO 8601 string + * @param {string} text - the ISO string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromISO('2016-05-25T09:08:34.123') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true}) + * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'}) + * @example DateTime.fromISO('2016-W05-4') + * @return {DateTime} + */ + ; + + DateTime.fromISO = function fromISO(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseISODate = parseISODate(text), + vals = _parseISODate[0], + parsedZone = _parseISODate[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text); + } + /** + * Create a DateTime from an RFC 2822 string + * @param {string} text - the RFC 2822 string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT') + * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600') + * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z') + * @return {DateTime} + */ + ; + + DateTime.fromRFC2822 = function fromRFC2822(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseRFC2822Date = parseRFC2822Date(text), + vals = _parseRFC2822Date[0], + parsedZone = _parseRFC2822Date[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text); + } + /** + * Create a DateTime from an HTTP header date + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @param {string} text - the HTTP header date + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods. + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT') + * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT') + * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994') + * @return {DateTime} + */ + ; + + DateTime.fromHTTP = function fromHTTP(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseHTTPDate = parseHTTPDate(text), + vals = _parseHTTPDate[0], + parsedZone = _parseHTTPDate[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts); + } + /** + * Create a DateTime from an input string and format string. + * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens). + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see the link below for the formats) + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @return {DateTime} + */ + ; + + DateTime.fromFormat = function fromFormat(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + if (isUndefined(text) || isUndefined(fmt)) { + throw new InvalidArgumentError("fromFormat requires an input string and a format"); + } + + var _opts = opts, + _opts$locale = _opts.locale, + locale = _opts$locale === void 0 ? null : _opts$locale, + _opts$numberingSystem = _opts.numberingSystem, + numberingSystem = _opts$numberingSystem === void 0 ? null : _opts$numberingSystem, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }), + _parseFromTokens = parseFromTokens(localeToUse, text, fmt), + vals = _parseFromTokens[0], + parsedZone = _parseFromTokens[1], + specificOffset = _parseFromTokens[2], + invalid = _parseFromTokens[3]; + + if (invalid) { + return DateTime.invalid(invalid); + } else { + return parseDataToDateTime(vals, parsedZone, opts, "format " + fmt, text, specificOffset); + } + } + /** + * @deprecated use fromFormat instead + */ + ; + + DateTime.fromString = function fromString(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + return DateTime.fromFormat(text, fmt, opts); + } + /** + * Create a DateTime from a SQL date, time, or datetime + * Defaults to en-US if no locale has been specified, regardless of the system's locale + * @param {string} text - the string to parse + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @example DateTime.fromSQL('2017-05-15') + * @example DateTime.fromSQL('2017-05-15 09:12:34') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true }) + * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' }) + * @example DateTime.fromSQL('09:12:34.342') + * @return {DateTime} + */ + ; + + DateTime.fromSQL = function fromSQL(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseSQL = parseSQL(text), + vals = _parseSQL[0], + parsedZone = _parseSQL[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "SQL", text); + } + /** + * Create an invalid DateTime. + * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {DateTime} + */ + ; + + DateTime.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the DateTime is invalid"); + } + + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidDateTimeError(invalid); + } else { + return new DateTime({ + invalid: invalid + }); + } + } + /** + * Check if an object is an instance of DateTime. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + ; + + DateTime.isDateTime = function isDateTime(o) { + return o && o.isLuxonDateTime || false; + } // INFO + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example DateTime.local(2017, 7, 4).get('month'); //=> 7 + * @example DateTime.local(2017, 7, 4).get('day'); //=> 4 + * @return {number} + */ + ; + + var _proto = DateTime.prototype; + + _proto.get = function get(unit) { + return this[unit]; + } + /** + * Returns whether the DateTime is valid. Invalid DateTimes occur when: + * * The DateTime was created from invalid calendar information, such as the 13th month or February 30 + * * The DateTime was created by an operation on another invalid date + * @type {boolean} + */ + ; + + /** + * Returns the resolved Intl options for this DateTime. + * This is useful in understanding the behavior of formatting methods + * @param {Object} opts - the same options as toLocaleString + * @return {Object} + */ + _proto.resolvedLocaleOptions = function resolvedLocaleOptions(opts) { + if (opts === void 0) { + opts = {}; + } + + var _Formatter$create$res = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this), + locale = _Formatter$create$res.locale, + numberingSystem = _Formatter$create$res.numberingSystem, + calendar = _Formatter$create$res.calendar; + + return { + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: calendar + }; + } // TRANSFORM + + /** + * "Set" the DateTime's zone to UTC. Returns a newly-constructed DateTime. + * + * Equivalent to {@link DateTime#setZone}('utc') + * @param {number} [offset=0] - optionally, an offset from UTC in minutes + * @param {Object} [opts={}] - options to pass to `setZone()` + * @return {DateTime} + */ + ; + + _proto.toUTC = function toUTC(offset, opts) { + if (offset === void 0) { + offset = 0; + } + + if (opts === void 0) { + opts = {}; + } + + return this.setZone(FixedOffsetZone.instance(offset), opts); + } + /** + * "Set" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime. + * + * Equivalent to `setZone('local')` + * @return {DateTime} + */ + ; + + _proto.toLocal = function toLocal() { + return this.setZone(Settings.defaultZone); + } + /** + * "Set" the DateTime's zone to specified zone. Returns a newly-constructed DateTime. + * + * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones. + * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class. + * @param {Object} opts - options + * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this. + * @return {DateTime} + */ + ; + + _proto.setZone = function setZone(zone, _temp) { + var _ref2 = _temp === void 0 ? {} : _temp, + _ref2$keepLocalTime = _ref2.keepLocalTime, + keepLocalTime = _ref2$keepLocalTime === void 0 ? false : _ref2$keepLocalTime, + _ref2$keepCalendarTim = _ref2.keepCalendarTime, + keepCalendarTime = _ref2$keepCalendarTim === void 0 ? false : _ref2$keepCalendarTim; + + zone = normalizeZone(zone, Settings.defaultZone); + + if (zone.equals(this.zone)) { + return this; + } else if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } else { + var newTS = this.ts; + + if (keepLocalTime || keepCalendarTime) { + var offsetGuess = zone.offset(this.ts); + var asObj = this.toObject(); + + var _objToTS3 = objToTS(asObj, offsetGuess, zone); + + newTS = _objToTS3[0]; + } + + return clone(this, { + ts: newTS, + zone: zone + }); + } + } + /** + * "Set" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime. + * @param {Object} properties - the properties to set + * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' }) + * @return {DateTime} + */ + ; + + _proto.reconfigure = function reconfigure(_temp2) { + var _ref3 = _temp2 === void 0 ? {} : _temp2, + locale = _ref3.locale, + numberingSystem = _ref3.numberingSystem, + outputCalendar = _ref3.outputCalendar; + + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: outputCalendar + }); + return clone(this, { + loc: loc + }); + } + /** + * "Set" the locale. Returns a newly-constructed DateTime. + * Just a convenient alias for reconfigure({ locale }) + * @example DateTime.local(2017, 5, 25).setLocale('en-GB') + * @return {DateTime} + */ + ; + + _proto.setLocale = function setLocale(locale) { + return this.reconfigure({ + locale: locale + }); + } + /** + * "Set" the values of specified units. Returns a newly-constructed DateTime. + * You can only set units with this method; for "setting" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}. + * @param {Object} values - a mapping of units to numbers + * @example dt.set({ year: 2017 }) + * @example dt.set({ hour: 8, minute: 30 }) + * @example dt.set({ weekday: 5 }) + * @example dt.set({ year: 2005, ordinal: 234 }) + * @return {DateTime} + */ + ; + + _proto.set = function set(values) { + if (!this.isValid) return this; + var normalized = normalizeObject(values, normalizeUnit), + settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber; + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + + var mixed; + + if (settingWeekStuff) { + mixed = weekToGregorian(_extends({}, gregorianToWeek(this.c), normalized)); + } else if (!isUndefined(normalized.ordinal)) { + mixed = ordinalToGregorian(_extends({}, gregorianToOrdinal(this.c), normalized)); + } else { + mixed = _extends({}, this.toObject(), normalized); // if we didn't set the day but we ended up on an overflow date, + // use the last day of the right month + + if (isUndefined(normalized.day)) { + mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day); + } + } + + var _objToTS4 = objToTS(mixed, this.o, this.zone), + ts = _objToTS4[0], + o = _objToTS4[1]; + + return clone(this, { + ts: ts, + o: o + }); + } + /** + * Add a period of time to this DateTime and return the resulting DateTime + * + * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @example DateTime.now().plus(123) //~> in 123 milliseconds + * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes + * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow + * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday + * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min + * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min + * @return {DateTime} + */ + ; + + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration); + return clone(this, adjustTime(this, dur)); + } + /** + * Subtract a period of time to this DateTime and return the resulting DateTime + * See {@link DateTime#plus} + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + @return {DateTime} + */ + ; + + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = Duration.fromDurationLike(duration).negate(); + return clone(this, adjustTime(this, dur)); + } + /** + * "Set" this DateTime to the beginning of a unit of time. + * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01' + * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01' + * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00' + * @return {DateTime} + */ + ; + + _proto.startOf = function startOf(unit) { + if (!this.isValid) return this; + var o = {}, + normalizedUnit = Duration.normalizeUnit(unit); + + switch (normalizedUnit) { + case "years": + o.month = 1; + // falls through + + case "quarters": + case "months": + o.day = 1; + // falls through + + case "weeks": + case "days": + o.hour = 0; + // falls through + + case "hours": + o.minute = 0; + // falls through + + case "minutes": + o.second = 0; + // falls through + + case "seconds": + o.millisecond = 0; + break; + // no default, invalid units throw in normalizeUnit() + } + + if (normalizedUnit === "weeks") { + o.weekday = 1; + } + + if (normalizedUnit === "quarters") { + var q = Math.ceil(this.month / 3); + o.month = (q - 1) * 3 + 1; + } + + return this.set(o); + } + /** + * "Set" this DateTime to the end (meaning the last millisecond) of a unit of time + * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00' + * @return {DateTime} + */ + ; + + _proto.endOf = function endOf(unit) { + var _this$plus; + + return this.isValid ? this.plus((_this$plus = {}, _this$plus[unit] = 1, _this$plus)).startOf(unit).minus(1) : this; + } // OUTPUT + + /** + * Returns a string representation of this DateTime formatted according to the specified format string. + * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens). + * Defaults to en-US if no locale has been specified, regardless of the system's locale. + * @param {string} fmt - the format string + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22' + * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22' + * @example DateTime.now().toFormat('yyyy LLL dd', { locale: "fr" }) //=> '2017 avr. 22' + * @example DateTime.now().toFormat("HH 'hours and' mm 'minutes'") //=> '20 hours and 55 minutes' + * @return {string} + */ + ; + + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID; + } + /** + * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`. + * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation + * of the DateTime in the assigned locale. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toLocaleString(); //=> 4/20/2017 + * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017' + * @example DateTime.now().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017' + * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM' + * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM' + * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20' + * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM' + * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32' + * @return {string} + */ + ; + + _proto.toLocaleString = function toLocaleString(formatOpts, opts) { + if (formatOpts === void 0) { + formatOpts = DATE_SHORT; + } + + if (opts === void 0) { + opts = {}; + } + + return this.isValid ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this) : INVALID; + } + /** + * Returns an array of format "parts", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts + * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`. + * @example DateTime.now().toLocaleParts(); //=> [ + * //=> { type: 'day', value: '25' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'month', value: '05' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'year', value: '1982' } + * //=> ] + */ + ; + + _proto.toLocaleParts = function toLocaleParts(opts) { + if (opts === void 0) { + opts = {}; + } + + return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : []; + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=true] - add the time zone format extension + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z' + * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00' + * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335' + * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400' + * @return {string} + */ + ; + + _proto.toISO = function toISO(_temp3) { + var _ref4 = _temp3 === void 0 ? {} : _temp3, + _ref4$format = _ref4.format, + format = _ref4$format === void 0 ? "extended" : _ref4$format, + _ref4$suppressSeconds = _ref4.suppressSeconds, + suppressSeconds = _ref4$suppressSeconds === void 0 ? false : _ref4$suppressSeconds, + _ref4$suppressMillise = _ref4.suppressMilliseconds, + suppressMilliseconds = _ref4$suppressMillise === void 0 ? false : _ref4$suppressMillise, + _ref4$includeOffset = _ref4.includeOffset, + includeOffset = _ref4$includeOffset === void 0 ? true : _ref4$includeOffset, + _ref4$extendedZone = _ref4.extendedZone, + extendedZone = _ref4$extendedZone === void 0 ? false : _ref4$extendedZone; + + if (!this.isValid) { + return null; + } + + var ext = format === "extended"; + + var c = _toISODate(this, ext); + + c += "T"; + c += _toISOTime(this, ext, suppressSeconds, suppressMilliseconds, includeOffset, extendedZone); + return c; + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime's date component + * @param {Object} opts - options + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25' + * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525' + * @return {string} + */ + ; + + _proto.toISODate = function toISODate(_temp4) { + var _ref5 = _temp4 === void 0 ? {} : _temp4, + _ref5$format = _ref5.format, + format = _ref5$format === void 0 ? "extended" : _ref5$format; + + if (!this.isValid) { + return null; + } + + return _toISODate(this, format === "extended"); + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime's week date + * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2' + * @return {string} + */ + ; + + _proto.toISOWeekDate = function toISOWeekDate() { + return toTechFormat(this, "kkkk-'W'WW-c"); + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime's time component + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.extendedZone=true] - add the time zone format extension + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z' + * @return {string} + */ + ; + + _proto.toISOTime = function toISOTime(_temp5) { + var _ref6 = _temp5 === void 0 ? {} : _temp5, + _ref6$suppressMillise = _ref6.suppressMilliseconds, + suppressMilliseconds = _ref6$suppressMillise === void 0 ? false : _ref6$suppressMillise, + _ref6$suppressSeconds = _ref6.suppressSeconds, + suppressSeconds = _ref6$suppressSeconds === void 0 ? false : _ref6$suppressSeconds, + _ref6$includeOffset = _ref6.includeOffset, + includeOffset = _ref6$includeOffset === void 0 ? true : _ref6$includeOffset, + _ref6$includePrefix = _ref6.includePrefix, + includePrefix = _ref6$includePrefix === void 0 ? false : _ref6$includePrefix, + _ref6$extendedZone = _ref6.extendedZone, + extendedZone = _ref6$extendedZone === void 0 ? false : _ref6$extendedZone, + _ref6$format = _ref6.format, + format = _ref6$format === void 0 ? "extended" : _ref6$format; + + if (!this.isValid) { + return null; + } + + var c = includePrefix ? "T" : ""; + return c + _toISOTime(this, format === "extended", suppressSeconds, suppressMilliseconds, includeOffset, extendedZone); + } + /** + * Returns an RFC 2822-compatible string representation of this DateTime + * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000' + * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400' + * @return {string} + */ + ; + + _proto.toRFC2822 = function toRFC2822() { + return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false); + } + /** + * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT. + * Specifically, the string conforms to RFC 1123. + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT' + * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT' + * @return {string} + */ + ; + + _proto.toHTTP = function toHTTP() { + return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'"); + } + /** + * Returns a string representation of this DateTime appropriate for use in SQL Date + * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13' + * @return {string} + */ + ; + + _proto.toSQLDate = function toSQLDate() { + if (!this.isValid) { + return null; + } + + return _toISODate(this, true); + } + /** + * Returns a string representation of this DateTime appropriate for use in SQL Time + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc().toSQL() //=> '05:15:16.345' + * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00' + * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345' + * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York' + * @return {string} + */ + ; + + _proto.toSQLTime = function toSQLTime(_temp6) { + var _ref7 = _temp6 === void 0 ? {} : _temp6, + _ref7$includeOffset = _ref7.includeOffset, + includeOffset = _ref7$includeOffset === void 0 ? true : _ref7$includeOffset, + _ref7$includeZone = _ref7.includeZone, + includeZone = _ref7$includeZone === void 0 ? false : _ref7$includeZone, + _ref7$includeOffsetSp = _ref7.includeOffsetSpace, + includeOffsetSpace = _ref7$includeOffsetSp === void 0 ? true : _ref7$includeOffsetSp; + + var fmt = "HH:mm:ss.SSS"; + + if (includeZone || includeOffset) { + if (includeOffsetSpace) { + fmt += " "; + } + + if (includeZone) { + fmt += "z"; + } else if (includeOffset) { + fmt += "ZZ"; + } + } + + return toTechFormat(this, fmt, true); + } + /** + * Returns a string representation of this DateTime appropriate for use in SQL DateTime + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00' + * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z' + * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00' + * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000' + * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York' + * @return {string} + */ + ; + + _proto.toSQL = function toSQL(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) { + return null; + } + + return this.toSQLDate() + " " + this.toSQLTime(opts); + } + /** + * Returns a string representation of this DateTime appropriate for debugging + * @return {string} + */ + ; + + _proto.toString = function toString() { + return this.isValid ? this.toISO() : INVALID; + } + /** + * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis} + * @return {number} + */ + ; + + _proto.valueOf = function valueOf() { + return this.toMillis(); + } + /** + * Returns the epoch milliseconds of this DateTime. + * @return {number} + */ + ; + + _proto.toMillis = function toMillis() { + return this.isValid ? this.ts : NaN; + } + /** + * Returns the epoch seconds of this DateTime. + * @return {number} + */ + ; + + _proto.toSeconds = function toSeconds() { + return this.isValid ? this.ts / 1000 : NaN; + } + /** + * Returns the epoch seconds (as a whole number) of this DateTime. + * @return {number} + */ + ; + + _proto.toUnixInteger = function toUnixInteger() { + return this.isValid ? Math.floor(this.ts / 1000) : NaN; + } + /** + * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON. + * @return {string} + */ + ; + + _proto.toJSON = function toJSON() { + return this.toISO(); + } + /** + * Returns a BSON serializable equivalent to this DateTime. + * @return {Date} + */ + ; + + _proto.toBSON = function toBSON() { + return this.toJSDate(); + } + /** + * Returns a JavaScript object with this DateTime's year, month, day, and so on. + * @param opts - options for generating the object + * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output + * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 } + * @return {Object} + */ + ; + + _proto.toObject = function toObject(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) return {}; + + var base = _extends({}, this.c); + + if (opts.includeConfig) { + base.outputCalendar = this.outputCalendar; + base.numberingSystem = this.loc.numberingSystem; + base.locale = this.loc.locale; + } + + return base; + } + /** + * Returns a JavaScript Date equivalent to this DateTime. + * @return {Date} + */ + ; + + _proto.toJSDate = function toJSDate() { + return new Date(this.isValid ? this.ts : NaN); + } // COMPARE + + /** + * Return the difference between two DateTimes as a Duration. + * @param {DateTime} otherDateTime - the DateTime to compare this one to + * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example + * var i1 = DateTime.fromISO('1982-05-25T09:45'), + * i2 = DateTime.fromISO('1983-10-14T10:30'); + * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 } + * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 } + * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 } + * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 } + * @return {Duration} + */ + ; + + _proto.diff = function diff(otherDateTime, unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid || !otherDateTime.isValid) { + return Duration.invalid("created by diffing an invalid DateTime"); + } + + var durOpts = _extends({ + locale: this.locale, + numberingSystem: this.numberingSystem + }, opts); + + var units = maybeArray(unit).map(Duration.normalizeUnit), + otherIsLater = otherDateTime.valueOf() > this.valueOf(), + earlier = otherIsLater ? this : otherDateTime, + later = otherIsLater ? otherDateTime : this, + diffed = _diff(earlier, later, units, durOpts); + + return otherIsLater ? diffed.negate() : diffed; + } + /** + * Return the difference between this DateTime and right now. + * See {@link DateTime#diff} + * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + ; + + _proto.diffNow = function diffNow(unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + + if (opts === void 0) { + opts = {}; + } + + return this.diff(DateTime.now(), unit, opts); + } + /** + * Return an Interval spanning between this DateTime and another DateTime + * @param {DateTime} otherDateTime - the other end point of the Interval + * @return {Interval} + */ + ; + + _proto.until = function until(otherDateTime) { + return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this; + } + /** + * Return whether this DateTime is in the same unit of time as another DateTime. + * Higher-order units must also be identical for this function to return `true`. + * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed. + * @param {DateTime} otherDateTime - the other DateTime + * @param {string} unit - the unit of time to check sameness on + * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day + * @return {boolean} + */ + ; + + _proto.hasSame = function hasSame(otherDateTime, unit) { + if (!this.isValid) return false; + var inputMs = otherDateTime.valueOf(); + var adjustedToZone = this.setZone(otherDateTime.zone, { + keepLocalTime: true + }); + return adjustedToZone.startOf(unit) <= inputMs && inputMs <= adjustedToZone.endOf(unit); + } + /** + * Equality check + * Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid. + * To compare just the millisecond values, use `+dt1 === +dt2`. + * @param {DateTime} other - the other DateTime + * @return {boolean} + */ + ; + + _proto.equals = function equals(other) { + return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc); + } + /** + * Returns a string representation of a this time relative to now, such as "in two days". Can only internationalize if your + * platform supports Intl.RelativeTimeFormat. Rounds down by default. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} [options.style="long"] - the style of units, must be "long", "short", or "narrow" + * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of "years", "quarters", "months", "weeks", "days", "hours", "minutes", or "seconds" + * @param {boolean} [options.round=true] - whether to round the numbers in the output. + * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelative() //=> "in 1 day" + * @example DateTime.now().setLocale("es").toRelative({ days: 1 }) //=> "dentro de 1 día" + * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: "fr" }) //=> "dans 23 heures" + * @example DateTime.now().minus({ days: 2 }).toRelative() //=> "2 days ago" + * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: "hours" }) //=> "48 hours ago" + * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> "1.5 days ago" + */ + ; + + _proto.toRelative = function toRelative(options) { + if (options === void 0) { + options = {}; + } + + if (!this.isValid) return null; + var base = options.base || DateTime.fromObject({}, { + zone: this.zone + }), + padding = options.padding ? this < base ? -options.padding : options.padding : 0; + var units = ["years", "months", "days", "hours", "minutes", "seconds"]; + var unit = options.unit; + + if (Array.isArray(options.unit)) { + units = options.unit; + unit = undefined; + } + + return diffRelative(base, this.plus(padding), _extends({}, options, { + numeric: "always", + units: units, + unit: unit + })); + } + /** + * Returns a string representation of this date relative to today, such as "yesterday" or "next month". + * Only internationalizes on platforms that supports Intl.RelativeTimeFormat. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", or "days" + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> "tomorrow" + * @example DateTime.now().setLocale("es").plus({ days: 1 }).toRelative() //=> ""mañana" + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: "fr" }) //=> "demain" + * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> "2 days ago" + */ + ; + + _proto.toRelativeCalendar = function toRelativeCalendar(options) { + if (options === void 0) { + options = {}; + } + + if (!this.isValid) return null; + return diffRelative(options.base || DateTime.fromObject({}, { + zone: this.zone + }), this, _extends({}, options, { + numeric: "auto", + units: ["years", "months", "days"], + calendary: true + })); + } + /** + * Return the min of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum + * @return {DateTime} the min DateTime, or undefined if called with no argument + */ + ; + + DateTime.min = function min() { + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("min requires all arguments be DateTimes"); + } + + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.min); + } + /** + * Return the max of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum + * @return {DateTime} the max DateTime, or undefined if called with no argument + */ + ; + + DateTime.max = function max() { + for (var _len2 = arguments.length, dateTimes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + dateTimes[_key2] = arguments[_key2]; + } + + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("max requires all arguments be DateTimes"); + } + + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.max); + } // MISC + + /** + * Explain how a string would be parsed by fromFormat() + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see description) + * @param {Object} options - options taken by fromFormat() + * @return {Object} + */ + ; + + DateTime.fromFormatExplain = function fromFormatExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + _options$locale = _options.locale, + locale = _options$locale === void 0 ? null : _options$locale, + _options$numberingSys = _options.numberingSystem, + numberingSystem = _options$numberingSys === void 0 ? null : _options$numberingSys, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }); + return explainFromTokens(localeToUse, text, fmt); + } + /** + * @deprecated use fromFormatExplain instead + */ + ; + + DateTime.fromStringExplain = function fromStringExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + + return DateTime.fromFormatExplain(text, fmt, options); + } // FORMAT PRESETS + + /** + * {@link DateTime#toLocaleString} format like 10/14/1983 + * @type {Object} + */ + ; + + _createClass(DateTime, [{ + key: "isValid", + get: function get() { + return this.invalid === null; + } + /** + * Returns an error code if this DateTime is invalid, or null if the DateTime is valid + * @type {string} + */ + + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + /** + * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid + * @type {string} + */ + + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + /** + * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime + * + * @type {string} + */ + + }, { + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + /** + * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime + * + * @type {string} + */ + + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + /** + * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime + * + * @type {string} + */ + + }, { + key: "outputCalendar", + get: function get() { + return this.isValid ? this.loc.outputCalendar : null; + } + /** + * Get the time zone associated with this DateTime. + * @type {Zone} + */ + + }, { + key: "zone", + get: function get() { + return this._zone; + } + /** + * Get the name of the time zone. + * @type {string} + */ + + }, { + key: "zoneName", + get: function get() { + return this.isValid ? this.zone.name : null; + } + /** + * Get the year + * @example DateTime.local(2017, 5, 25).year //=> 2017 + * @type {number} + */ + + }, { + key: "year", + get: function get() { + return this.isValid ? this.c.year : NaN; + } + /** + * Get the quarter + * @example DateTime.local(2017, 5, 25).quarter //=> 2 + * @type {number} + */ + + }, { + key: "quarter", + get: function get() { + return this.isValid ? Math.ceil(this.c.month / 3) : NaN; + } + /** + * Get the month (1-12). + * @example DateTime.local(2017, 5, 25).month //=> 5 + * @type {number} + */ + + }, { + key: "month", + get: function get() { + return this.isValid ? this.c.month : NaN; + } + /** + * Get the day of the month (1-30ish). + * @example DateTime.local(2017, 5, 25).day //=> 25 + * @type {number} + */ + + }, { + key: "day", + get: function get() { + return this.isValid ? this.c.day : NaN; + } + /** + * Get the hour of the day (0-23). + * @example DateTime.local(2017, 5, 25, 9).hour //=> 9 + * @type {number} + */ + + }, { + key: "hour", + get: function get() { + return this.isValid ? this.c.hour : NaN; + } + /** + * Get the minute of the hour (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30 + * @type {number} + */ + + }, { + key: "minute", + get: function get() { + return this.isValid ? this.c.minute : NaN; + } + /** + * Get the second of the minute (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52 + * @type {number} + */ + + }, { + key: "second", + get: function get() { + return this.isValid ? this.c.second : NaN; + } + /** + * Get the millisecond of the second (0-999). + * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654 + * @type {number} + */ + + }, { + key: "millisecond", + get: function get() { + return this.isValid ? this.c.millisecond : NaN; + } + /** + * Get the week year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 12, 31).weekYear //=> 2015 + * @type {number} + */ + + }, { + key: "weekYear", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN; + } + /** + * Get the week number of the week year (1-52ish). + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2017, 5, 25).weekNumber //=> 21 + * @type {number} + */ + + }, { + key: "weekNumber", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN; + } + /** + * Get the day of the week. + * 1 is Monday and 7 is Sunday + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 11, 31).weekday //=> 4 + * @type {number} + */ + + }, { + key: "weekday", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekday : NaN; + } + /** + * Get the ordinal (meaning the day of the year) + * @example DateTime.local(2017, 5, 25).ordinal //=> 145 + * @type {number|DateTime} + */ + + }, { + key: "ordinal", + get: function get() { + return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN; + } + /** + * Get the human readable short month name, such as 'Oct'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthShort //=> Oct + * @type {string} + */ + + }, { + key: "monthShort", + get: function get() { + return this.isValid ? Info.months("short", { + locObj: this.loc + })[this.month - 1] : null; + } + /** + * Get the human readable long month name, such as 'October'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthLong //=> October + * @type {string} + */ + + }, { + key: "monthLong", + get: function get() { + return this.isValid ? Info.months("long", { + locObj: this.loc + })[this.month - 1] : null; + } + /** + * Get the human readable short weekday, such as 'Mon'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon + * @type {string} + */ + + }, { + key: "weekdayShort", + get: function get() { + return this.isValid ? Info.weekdays("short", { + locObj: this.loc + })[this.weekday - 1] : null; + } + /** + * Get the human readable long weekday, such as 'Monday'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday + * @type {string} + */ + + }, { + key: "weekdayLong", + get: function get() { + return this.isValid ? Info.weekdays("long", { + locObj: this.loc + })[this.weekday - 1] : null; + } + /** + * Get the UTC offset of this DateTime in minutes + * @example DateTime.now().offset //=> -240 + * @example DateTime.utc().offset //=> 0 + * @type {number} + */ + + }, { + key: "offset", + get: function get() { + return this.isValid ? +this.o : NaN; + } + /** + * Get the short human name for the zone's current offset, for example "EST" or "EDT". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + + }, { + key: "offsetNameShort", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "short", + locale: this.locale + }); + } else { + return null; + } + } + /** + * Get the long human name for the zone's current offset, for example "Eastern Standard Time" or "Eastern Daylight Time". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + + }, { + key: "offsetNameLong", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "long", + locale: this.locale + }); + } else { + return null; + } + } + /** + * Get whether this zone's offset ever changes, as in a DST. + * @type {boolean} + */ + + }, { + key: "isOffsetFixed", + get: function get() { + return this.isValid ? this.zone.isUniversal : null; + } + /** + * Get whether the DateTime is in a DST. + * @type {boolean} + */ + + }, { + key: "isInDST", + get: function get() { + if (this.isOffsetFixed) { + return false; + } else { + return this.offset > this.set({ + month: 1, + day: 1 + }).offset || this.offset > this.set({ + month: 5 + }).offset; + } + } + /** + * Returns true if this DateTime is in a leap year, false otherwise + * @example DateTime.local(2016).isInLeapYear //=> true + * @example DateTime.local(2013).isInLeapYear //=> false + * @type {boolean} + */ + + }, { + key: "isInLeapYear", + get: function get() { + return isLeapYear(this.year); + } + /** + * Returns the number of days in this DateTime's month + * @example DateTime.local(2016, 2).daysInMonth //=> 29 + * @example DateTime.local(2016, 3).daysInMonth //=> 31 + * @type {number} + */ + + }, { + key: "daysInMonth", + get: function get() { + return daysInMonth(this.year, this.month); + } + /** + * Returns the number of days in this DateTime's year + * @example DateTime.local(2016).daysInYear //=> 366 + * @example DateTime.local(2013).daysInYear //=> 365 + * @type {number} + */ + + }, { + key: "daysInYear", + get: function get() { + return this.isValid ? daysInYear(this.year) : NaN; + } + /** + * Returns the number of weeks in this DateTime's year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2004).weeksInWeekYear //=> 53 + * @example DateTime.local(2013).weeksInWeekYear //=> 52 + * @type {number} + */ + + }, { + key: "weeksInWeekYear", + get: function get() { + return this.isValid ? weeksInWeekYear(this.weekYear) : NaN; + } + }], [{ + key: "DATE_SHORT", + get: function get() { + return DATE_SHORT; + } + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_MED", + get: function get() { + return DATE_MED; + } + /** + * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_MED_WITH_WEEKDAY", + get: function get() { + return DATE_MED_WITH_WEEKDAY; + } + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_FULL", + get: function get() { + return DATE_FULL; + } + /** + * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_HUGE", + get: function get() { + return DATE_HUGE; + } + /** + * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_SIMPLE", + get: function get() { + return TIME_SIMPLE; + } + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_WITH_SECONDS", + get: function get() { + return TIME_WITH_SECONDS; + } + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_WITH_SHORT_OFFSET", + get: function get() { + return TIME_WITH_SHORT_OFFSET; + } + /** + * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_WITH_LONG_OFFSET", + get: function get() { + return TIME_WITH_LONG_OFFSET; + } + /** + * {@link DateTime#toLocaleString} format like '09:30', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_SIMPLE", + get: function get() { + return TIME_24_SIMPLE; + } + /** + * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_WITH_SECONDS", + get: function get() { + return TIME_24_WITH_SECONDS; + } + /** + * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_WITH_SHORT_OFFSET", + get: function get() { + return TIME_24_WITH_SHORT_OFFSET; + } + /** + * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_WITH_LONG_OFFSET", + get: function get() { + return TIME_24_WITH_LONG_OFFSET; + } + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_SHORT", + get: function get() { + return DATETIME_SHORT; + } + /** + * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_SHORT_WITH_SECONDS", + get: function get() { + return DATETIME_SHORT_WITH_SECONDS; + } + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_MED", + get: function get() { + return DATETIME_MED; + } + /** + * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_MED_WITH_SECONDS", + get: function get() { + return DATETIME_MED_WITH_SECONDS; + } + /** + * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_MED_WITH_WEEKDAY", + get: function get() { + return DATETIME_MED_WITH_WEEKDAY; + } + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_FULL", + get: function get() { + return DATETIME_FULL; + } + /** + * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_FULL_WITH_SECONDS", + get: function get() { + return DATETIME_FULL_WITH_SECONDS; + } + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_HUGE", + get: function get() { + return DATETIME_HUGE; + } + /** + * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_HUGE_WITH_SECONDS", + get: function get() { + return DATETIME_HUGE_WITH_SECONDS; + } + }]); + + return DateTime; +}(); +function friendlyDateTime(dateTimeish) { + if (DateTime.isDateTime(dateTimeish)) { + return dateTimeish; + } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) { + return DateTime.fromJSDate(dateTimeish); + } else if (dateTimeish && typeof dateTimeish === "object") { + return DateTime.fromObject(dateTimeish); + } else { + throw new InvalidArgumentError("Unknown datetime argument: " + dateTimeish + ", of type " + typeof dateTimeish); + } +} + +var VERSION = "2.4.0"; + +var DateTime_1 = luxon.DateTime = DateTime; +var Duration_1 = luxon.Duration = Duration; +var FixedOffsetZone_1 = luxon.FixedOffsetZone = FixedOffsetZone; +var IANAZone_1 = luxon.IANAZone = IANAZone; +var Info_1 = luxon.Info = Info; +var Interval_1 = luxon.Interval = Interval; +var InvalidZone_1 = luxon.InvalidZone = InvalidZone; +var Settings_1 = luxon.Settings = Settings; +var SystemZone_1 = luxon.SystemZone = SystemZone; +var VERSION_1 = luxon.VERSION = VERSION; +var Zone_1 = luxon.Zone = Zone; + +var Luxon = /*#__PURE__*/_mergeNamespaces({ + __proto__: null, + DateTime: DateTime_1, + Duration: Duration_1, + FixedOffsetZone: FixedOffsetZone_1, + IANAZone: IANAZone_1, + Info: Info_1, + Interval: Interval_1, + InvalidZone: InvalidZone_1, + Settings: Settings_1, + SystemZone: SystemZone_1, + VERSION: VERSION_1, + Zone: Zone_1, + 'default': luxon +}, [luxon]); + +//////////////////// +// Query Settings // +//////////////////// +const DEFAULT_QUERY_SETTINGS = { + renderNullAs: "\\-", + taskCompletionTracking: false, + taskCompletionText: "completion", + warnOnEmptyResult: true, + refreshEnabled: true, + refreshInterval: 2500, + defaultDateFormat: "MMMM dd, yyyy", + defaultDateTimeFormat: "h:mm a - MMMM dd, yyyy", + maxRecursiveRenderDepth: 4, + tableIdColumnName: "File", + tableGroupColumnName: "Group", +}; +/** Default settings for dataview on install. */ +const DEFAULT_SETTINGS = { + ...DEFAULT_QUERY_SETTINGS, + ...{ + inlineQueryPrefix: "=", + inlineJsQueryPrefix: "$=", + enableDataviewJs: false, + enableInlineDataviewJs: false, + prettyRenderInlineFields: true, + }, +}; + +/** Functional return type for error handling. */ +class Success { + constructor(value) { + this.value = value; + this.successful = true; + } + map(f) { + return new Success(f(this.value)); + } + flatMap(f) { + return f(this.value); + } + mapErr(f) { + return this; + } + bimap(succ, _fail) { + return this.map(succ); + } + orElse(_value) { + return this.value; + } + orElseThrow(_message) { + return this.value; + } +} +/** Functional return type for error handling. */ +class Failure { + constructor(error) { + this.error = error; + this.successful = false; + } + map(_f) { + return this; + } + flatMap(_f) { + return this; + } + mapErr(f) { + return new Failure(f(this.error)); + } + bimap(_succ, fail) { + return this.mapErr(fail); + } + orElse(value) { + return value; + } + orElseThrow(message) { + if (message) + throw new Error(message(this.error)); + else + throw new Error("" + this.error); + } +} +/** Monadic 'Result' type which encapsulates whether a procedure succeeded or failed, as well as it's return value. */ +var Result; +(function (Result) { + function success(value) { + return new Success(value); + } + Result.success = success; + function failure(error) { + return new Failure(error); + } + Result.failure = failure; + function flatMap2(first, second, f) { + if (first.successful) { + if (second.successful) + return f(first.value, second.value); + else + return failure(second.error); + } + else { + return failure(first.error); + } + } + Result.flatMap2 = flatMap2; + function map2(first, second, f) { + return flatMap2(first, second, (a, b) => success(f(a, b))); + } + Result.map2 = map2; +})(Result || (Result = {})); + +var parsimmon_umd_min = {exports: {}}; + +(function (module, exports) { +!function(n,t){module.exports=t();}("undefined"!=typeof self?self:commonjsGlobal,function(){return function(n){var t={};function r(e){if(t[e])return t[e].exports;var u=t[e]={i:e,l:!1,exports:{}};return n[e].call(u.exports,u,u.exports,r),u.l=!0,u.exports}return r.m=n,r.c=t,r.d=function(n,t,e){r.o(n,t)||Object.defineProperty(n,t,{configurable:!1,enumerable:!0,get:e});},r.r=function(n){Object.defineProperty(n,"__esModule",{value:!0});},r.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(t,"a",t),t},r.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},r.p="",r(r.s=0)}([function(n,t,r){function e(n){if(!(this instanceof e))return new e(n);this._=n;}var u=e.prototype;function o(n,t){for(var r=0;r>7),buf:function(n){var t=i(function(n,t,r,e){return n.concat(r===e.length-1?Buffer.from([t,0]).readUInt16BE(0):e.readUInt16BE(r))},[],n);return Buffer.from(a(function(n){return (n<<1&65535)>>8},t))}(r.buf)};}),r}function c(){return "undefined"!=typeof Buffer}function s(){if(!c())throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser.")}function l(n){s();var t=i(function(n,t){return n+t},0,n);if(t%8!=0)throw new Error("The bits ["+n.join(", ")+"] add up to "+t+" which is not an even number of bytes; the total should be divisible by 8");var r,u=t/8,o=(r=function(n){return n>48},i(function(n,t){return n||(r(t)?t:n)},null,n));if(o)throw new Error(o+" bit range requested exceeds 48 bit (6 byte) Number max.");return new e(function(t,r){var e=u+r;return e>t.length?x(r,u.toString()+" bytes"):b(e,i(function(n,t){var r=f(t,n.buf);return {coll:n.coll.concat(r.v),buf:r.buf}},{coll:[],buf:t.slice(r,e)},n).coll)})}function h(n,t){return new e(function(r,e){return s(),e+t>r.length?x(e,t+" bytes for "+n):b(e+t,r.slice(e,e+t))})}function p(n,t){if("number"!=typeof(r=t)||Math.floor(r)!==r||t<0||t>6)throw new Error(n+" requires integer length in range [0, 6].");var r;}function d(n){return p("uintBE",n),h("uintBE("+n+")",n).map(function(t){return t.readUIntBE(0,n)})}function v(n){return p("uintLE",n),h("uintLE("+n+")",n).map(function(t){return t.readUIntLE(0,n)})}function g(n){return p("intBE",n),h("intBE("+n+")",n).map(function(t){return t.readIntBE(0,n)})}function m(n){return p("intLE",n),h("intLE("+n+")",n).map(function(t){return t.readIntLE(0,n)})}function y(n){return n instanceof e}function E(n){return "[object Array]"==={}.toString.call(n)}function w(n){return c()&&Buffer.isBuffer(n)}function b(n,t){return {status:!0,index:n,value:t,furthest:-1,expected:[]}}function x(n,t){return E(t)||(t=[t]),{status:!1,index:-1,value:null,furthest:n,expected:t}}function B(n,t){if(!t)return n;if(n.furthest>t.furthest)return n;var r=n.furthest===t.furthest?function(n,t){if(function(){if(void 0!==e._supportsSet)return e._supportsSet;var n="undefined"!=typeof Set;return e._supportsSet=n,n}()&&Array.from){for(var r=new Set(n),u=0;u=0;){if(i in r){e=r[i].line,0===o&&(o=r[i].lineStart);break}("\n"===n.charAt(i)||"\r"===n.charAt(i)&&"\n"!==n.charAt(i+1))&&(u++,0===o&&(o=i+1)),i--;}var a=e+u,f=t-o;return r[t]={line:a,lineStart:o},{offset:t,line:a+1,column:f+1}}function _(n){if(!y(n))throw new Error("not a parser: "+n)}function L(n,t){return "string"==typeof n?n.charAt(t):n[t]}function O(n){if("number"!=typeof n)throw new Error("not a number: "+n)}function k(n){if("function"!=typeof n)throw new Error("not a function: "+n)}function P(n){if("string"!=typeof n)throw new Error("not a string: "+n)}var q=2,A=3,I=8,F=5*I,M=4*I,z=" ";function R(n,t){return new Array(t+1).join(n)}function U(n,t,r){var e=t-n.length;return e<=0?n:R(r,e)+n}function W(n,t,r,e){return {from:n-t>0?n-t:0,to:n+r>e?e:n+r}}function D(n,t){var r,e,u,o,f,c=t.index,s=c.offset,l=1;if(s===n.length)return "Got the end of the input";if(w(n)){var h=s-s%I,p=s-h,d=W(h,F,M+I,n.length),v=a(function(n){return a(function(n){return U(n.toString(16),2,"0")},n)},function(n,t){var r=n.length,e=[],u=0;if(r<=t)return [n.slice()];for(var o=0;o=4&&(r+=1),l=2,u=a(function(n){return n.length<=4?n.join(" "):n.slice(0,4).join(" ")+" "+n.slice(4).join(" ")},v),(f=(8*(o.to>0?o.to-1:o.to)).toString(16).length)<2&&(f=2);}else {var g=n.split(/\r\n|[\n\r\u2028\u2029]/);r=c.column-1,e=c.line-1,o=W(e,q,A,g.length),u=g.slice(o.from,o.to),f=o.to.toString().length;}var m=e-o.from;return w(n)&&(f=(8*(o.to>0?o.to-1:o.to)).toString(16).length)<2&&(f=2),i(function(t,e,u){var i,a=u===m,c=a?"> ":z;return i=w(n)?U((8*(o.from+u)).toString(16),f,"0"):U((o.from+u+1).toString(),f," "),[].concat(t,[c+i+" | "+e],a?[z+R(" ",f)+" | "+U("",r," ")+R("^",l)]:[])},[],u).join("\n")}function N(n,t){return ["\n","-- PARSING FAILED "+R("-",50),"\n\n",D(n,t),"\n\n",(r=t.expected,1===r.length?"Expected:\n\n"+r[0]:"Expected one of the following: \n\n"+r.join(", ")),"\n"].join("");var r;}function G(n){return void 0!==n.flags?n.flags:[n.global?"g":"",n.ignoreCase?"i":"",n.multiline?"m":"",n.unicode?"u":"",n.sticky?"y":""].join("")}function C(){for(var n=[].slice.call(arguments),t=n.length,r=0;r=2?O(t):t=0;var r=function(n){return RegExp("^(?:"+n.source+")",G(n))}(n),u=""+n;return e(function(n,e){var o=r.exec(n.slice(e));if(o){if(0<=t&&t<=o.length){var i=o[0],a=o[t];return b(e+i.length,a)}return x(e,"valid match group (0 to "+o.length+") in "+u)}return x(e,u)})}function X(n){return e(function(t,r){return b(r,n)})}function Y(n){return e(function(t,r){return x(r,n)})}function Z(n){if(y(n))return e(function(t,r){var e=n._(t,r);return e.index=r,e.value="",e});if("string"==typeof n)return Z(K(n));if(n instanceof RegExp)return Z(Q(n));throw new Error("not a string, regexp, or parser: "+n)}function $(n){return _(n),e(function(t,r){var e=n._(t,r),u=t.slice(r,e.index);return e.status?x(r,'not "'+u+'"'):b(r,null)})}function nn(n){return k(n),e(function(t,r){var e=L(t,r);return r=n.length?x(t,"any character/byte"):b(t+1,L(n,t))}),on=e(function(n,t){return b(n.length,n.slice(t))}),an=e(function(n,t){return t=0}).desc(t)},e.optWhitespace=hn,e.Parser=e,e.range=function(n,t){return nn(function(r){return n<=r&&r<=t}).desc(n+"-"+t)},e.regex=Q,e.regexp=Q,e.sepBy=V,e.sepBy1=H,e.seq=C,e.seqMap=J,e.seqObj=function(){for(var n,t={},r=0,u=(n=arguments,Array.prototype.slice.call(n)),o=u.length,i=0;i255)throw new Error("Value specified to byte constructor ("+n+"=0x"+n.toString(16)+") is larger in value than a single byte.");var t=(n>15?"0x":"0x0")+n.toString(16);return e(function(r,e){var u=L(r,e);return u===n?b(e+1,u):x(e,t)})},buffer:function(n){return h("buffer",n).map(function(n){return Buffer.from(n)})},encodedString:function(n,t){return h("string",t).map(function(t){return t.toString(n)})},uintBE:d,uint8BE:d(1),uint16BE:d(2),uint32BE:d(4),uintLE:v,uint8LE:v(1),uint16LE:v(2),uint32LE:v(4),intBE:g,int8BE:g(1),int16BE:g(2),int32BE:g(4),intLE:m,int8LE:m(1),int16LE:m(2),int32LE:m(4),floatBE:h("floatBE",4).map(function(n){return n.readFloatBE(0)}),floatLE:h("floatLE",4).map(function(n){return n.readFloatLE(0)}),doubleBE:h("doubleBE",8).map(function(n){return n.readDoubleBE(0)}),doubleLE:h("doubleLE",8).map(function(n){return n.readDoubleLE(0)})},n.exports=e;}])}); +}(parsimmon_umd_min)); + +var emojiRegex = () => { + // https://mths.be/emoji + return /(?:[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC3\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDD-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF6](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7C\uDE80-\uDE86\uDE90-\uDEAC\uDEB0-\uDEBA\uDEC0-\uDEC2\uDED0-\uDED9\uDEE0-\uDEE7]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF-\uDDB3\uDDBC\uDDBD]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?))/g; +}; + +/** Normalize a duration to all of the proper units. */ +function normalizeDuration(dur) { + if (dur === undefined || dur === null) + return dur; + return dur.shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds").normalize(); +} +/** Strip the time components of a date time object. */ +function stripTime(dt) { + if (dt === null || dt === undefined) + return dt; + return DateTime_1.fromObject({ + year: dt.year, + month: dt.month, + day: dt.day, + }); +} +/** Get the folder containing the given path (i.e., like computing 'path/..'). */ +function getParentFolder(path) { + return path.split("/").slice(0, -1).join("/"); +} +/** Get the "title" for a file, by stripping other parts of the path as well as the extension. */ +function getFileTitle(path) { + if (path.includes("/")) + path = path.substring(path.lastIndexOf("/") + 1); + if (path.endsWith(".md")) + path = path.substring(0, path.length - 3); + return path; +} +/** Get the extension of a file from the file path. */ +function getExtension(path) { + if (!path.includes(".")) + return ""; + return path.substring(path.lastIndexOf(".") + 1); +} +/** Parse all subtags out of the given tag. I.e., #hello/i/am would yield [#hello/i/am, #hello/i, #hello]. */ +function extractSubtags(tag) { + let result = [tag]; + while (tag.includes("/")) { + tag = tag.substring(0, tag.lastIndexOf("/")); + result.push(tag); + } + return result; +} +/** Try calling the given function; on failure, return the error message. */ +function tryOrPropogate(func) { + try { + return func(); + } + catch (error) { + return Result.failure("" + error + "\n\n" + error.stack); + } +} +/** Try asynchronously calling the given function; on failure, return the error message. */ +async function asyncTryOrPropogate(func) { + try { + return await func(); + } + catch (error) { + return Result.failure("" + error + "\n\n" + error.stack); + } +} +/** + * Escape regex characters in a string. + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions. + */ +function escapeRegex(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} +/** A parsimmon parser which canonicalizes variable names while properly respecting emoji. */ +const VAR_NAME_CANONICALIZER = parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regex(new RegExp(emojiRegex(), "")), parsimmon_umd_min.exports.regex(/[0-9\p{Letter}_-]+/u).map(str => str.toLocaleLowerCase()), parsimmon_umd_min.exports.whitespace.map(_ => "-"), parsimmon_umd_min.exports.any.map(_ => "")) + .many() + .map(result => result.join("")); +/** Convert an arbitrary variable name into something JS/query friendly. */ +function canonicalizeVarName(name) { + return VAR_NAME_CANONICALIZER.tryParse(name); +} +const HEADER_CANONICALIZER = parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regex(new RegExp(emojiRegex(), "")), parsimmon_umd_min.exports.regex(/[0-9\p{Letter}_-]+/u), parsimmon_umd_min.exports.whitespace.map(_ => " "), parsimmon_umd_min.exports.any.map(_ => " ")) + .many() + .map(result => { + return result.join("").split(/\s+/).join(" ").trim(); +}); +/** + * Normalizes the text in a header to be something that is actually linkable to. This mimics + * how Obsidian does it's normalization, collapsing repeated spaces and stripping out control characters. + */ +function normalizeHeaderForLink(header) { + return HEADER_CANONICALIZER.tryParse(header); +} +/** Render a DateTime in a minimal format to save space. */ +function renderMinimalDate(time, settings, locale) { + // If there is no relevant time specified, fall back to just rendering the date. + if (time.second == 0 && time.minute == 0 && time.hour == 0) { + return time.toFormat(settings.defaultDateFormat, { locale }); + } + return time.toFormat(settings.defaultDateTimeFormat, { locale }); +} +/** Render a duration in a minimal format to save space. */ +function renderMinimalDuration(dur) { + dur = normalizeDuration(dur); + // TODO: Luxon does not have multi-lingual/locale-aware duration rendering. + let result = ""; + if (dur.years) + result += `${dur.years} years, `; + if (dur.months) + result += `${dur.months} months, `; + if (dur.weeks) + result += `${dur.weeks} weeks, `; + if (dur.days) + result += `${dur.days} days, `; + if (dur.hours) + result += `${dur.hours} hours, `; + if (dur.minutes) + result += `${dur.minutes} minutes, `; + if (dur.seconds) + result += `${Math.round(dur.seconds)} seconds, `; + if (dur.milliseconds) + result += `${Math.round(dur.milliseconds)} ms, `; + if (result.endsWith(", ")) + result = result.substring(0, result.length - 2); + return result; +} +/** Determine if two sets are equal in contents. */ +function setsEqual(first, second) { + if (first.size != second.size) + return false; + for (let elem of first) + if (!second.has(elem)) + return false; + return true; +} + +var Values; +(function (Values) { + /** Convert an arbitary value into a reasonable, Markdown-friendly string if possible. */ + function toString(field, setting = DEFAULT_QUERY_SETTINGS, recursive = false) { + let wrapped = wrapValue(field); + if (!wrapped) + return setting.renderNullAs; + switch (wrapped.type) { + case "null": + return "" + setting.renderNullAs; + case "string": + return wrapped.value; + case "number": + case "boolean": + case "html": + return "" + wrapped.value; + case "link": + return wrapped.value.markdown(); + case "function": + return ""; + case "array": + let result = ""; + if (recursive) + result += "["; + result += wrapped.value.map(f => toString(f, setting, true)).join(", "); + if (recursive) + result += "]"; + return result; + case "object": + return ("{ " + + Object.entries(wrapped.value) + .map(e => e[0] + ": " + toString(e[1], setting, true)) + .join(", ") + + " }"); + case "date": + if (wrapped.value.second == 0 && wrapped.value.hour == 0 && wrapped.value.minute == 0) { + return wrapped.value.toFormat(setting.defaultDateFormat); + } + return wrapped.value.toFormat(setting.defaultDateTimeFormat); + case "duration": + return renderMinimalDuration(wrapped.value); + } + } + Values.toString = toString; + /** Wrap a literal value so you can switch on it easily. */ + function wrapValue(val) { + if (isNull(val)) + return { type: "null", value: val }; + else if (isNumber(val)) + return { type: "number", value: val }; + else if (isString(val)) + return { type: "string", value: val }; + else if (isBoolean(val)) + return { type: "boolean", value: val }; + else if (isDuration(val)) + return { type: "duration", value: val }; + else if (isDate(val)) + return { type: "date", value: val }; + else if (isHtml(val)) + return { type: "html", value: val }; + else if (isArray(val)) + return { type: "array", value: val }; + else if (isLink(val)) + return { type: "link", value: val }; + else if (isFunction(val)) + return { type: "function", value: val }; + else if (isObject(val)) + return { type: "object", value: val }; + else + return undefined; + } + Values.wrapValue = wrapValue; + /** Recursively map complex objects at the leaves. */ + function mapLeaves(val, func) { + if (isObject(val)) { + let result = {}; + for (let [key, value] of Object.entries(val)) + result[key] = mapLeaves(value, func); + return result; + } + else if (isArray(val)) { + let result = []; + for (let value of val) + result.push(mapLeaves(value, func)); + return result; + } + else { + return func(val); + } + } + Values.mapLeaves = mapLeaves; + /** Compare two arbitrary JavaScript values. Produces a total ordering over ANY possible dataview value. */ + function compareValue(val1, val2, linkNormalizer) { + var _a, _b; + // Handle undefined/nulls first. + if (val1 === undefined) + val1 = null; + if (val2 === undefined) + val2 = null; + if (val1 === null && val2 === null) + return 0; + else if (val1 === null) + return -1; + else if (val2 === null) + return 1; + // A non-null value now which we can wrap & compare on. + let wrap1 = wrapValue(val1); + let wrap2 = wrapValue(val2); + if (wrap1 === undefined && wrap2 === undefined) + return 0; + else if (wrap1 === undefined) + return -1; + else if (wrap2 === undefined) + return 1; + // Short-circuit on different types or on reference equality. + if (wrap1.type != wrap2.type) + return wrap1.type.localeCompare(wrap2.type); + if (wrap1.value === wrap2.value) + return 0; + switch (wrap1.type) { + case "string": + return wrap1.value.localeCompare(wrap2.value); + case "number": + if (wrap1.value < wrap2.value) + return -1; + else if (wrap1.value == wrap2.value) + return 0; + return 1; + case "null": + return 0; + case "boolean": + if (wrap1.value == wrap2.value) + return 0; + else + return wrap1.value ? 1 : -1; + case "link": + let link1 = wrap1.value; + let link2 = wrap2.value; + let normalize = linkNormalizer !== null && linkNormalizer !== void 0 ? linkNormalizer : ((x) => x); + // We can't compare by file name or display, since that would break link equality. Compare by path. + let pathCompare = normalize(link1.path).localeCompare(normalize(link2.path)); + if (pathCompare != 0) + return pathCompare; + // Then compare by type. + let typeCompare = link1.type.localeCompare(link2.type); + if (typeCompare != 0) + return typeCompare; + // Then compare by subpath existence. + if (link1.subpath && !link2.subpath) + return 1; + if (!link1.subpath && link2.subpath) + return -1; + if (!link1.subpath && !link2.subpath) + return 0; + // Since both have a subpath, compare by subpath. + return ((_a = link1.subpath) !== null && _a !== void 0 ? _a : "").localeCompare((_b = link2.subpath) !== null && _b !== void 0 ? _b : ""); + case "date": + return wrap1.value < wrap2.value + ? -1 + : wrap1.value.equals(wrap2.value) + ? 0 + : 1; + case "duration": + return wrap1.value < wrap2.value + ? -1 + : wrap1.value.equals(wrap2.value) + ? 0 + : 1; + case "array": + let f1 = wrap1.value; + let f2 = wrap2.value; + for (let index = 0; index < Math.min(f1.length, f2.length); index++) { + let comp = compareValue(f1[index], f2[index]); + if (comp != 0) + return comp; + } + return f1.length - f2.length; + case "object": + let o1 = wrap1.value; + let o2 = wrap2.value; + let k1 = Array.from(Object.keys(o1)); + let k2 = Array.from(Object.keys(o2)); + k1.sort(); + k2.sort(); + let keyCompare = compareValue(k1, k2); + if (keyCompare != 0) + return keyCompare; + for (let key of k1) { + let comp = compareValue(o1[key], o2[key]); + if (comp != 0) + return comp; + } + return 0; + case "html": + return 0; + case "function": + return 0; + } + } + Values.compareValue = compareValue; + /** Find the corresponding Dataveiw type for an arbitrary value. */ + function typeOf(val) { + var _a; + return (_a = wrapValue(val)) === null || _a === void 0 ? void 0 : _a.type; + } + Values.typeOf = typeOf; + /** Determine if the given value is "truthy" (i.e., is non-null and has data in it). */ + function isTruthy(field) { + let wrapped = wrapValue(field); + if (!wrapped) + return false; + switch (wrapped.type) { + case "number": + return wrapped.value != 0; + case "string": + return wrapped.value.length > 0; + case "boolean": + return wrapped.value; + case "link": + return !!wrapped.value.path; + case "date": + return wrapped.value.toMillis() != 0; + case "duration": + return wrapped.value.as("seconds") != 0; + case "object": + return Object.keys(wrapped.value).length > 0; + case "array": + return wrapped.value.length > 0; + case "null": + return false; + case "html": + return true; + case "function": + return true; + } + } + Values.isTruthy = isTruthy; + /** Deep copy a field. */ + function deepCopy(field) { + if (field === null || field === undefined) + return field; + if (Values.isArray(field)) { + return [].concat(field.map(v => deepCopy(v))); + } + else if (Values.isObject(field)) { + let result = {}; + for (let [key, value] of Object.entries(field)) + result[key] = deepCopy(value); + return result; + } + else { + return field; + } + } + Values.deepCopy = deepCopy; + function isString(val) { + return typeof val == "string"; + } + Values.isString = isString; + function isNumber(val) { + return typeof val == "number"; + } + Values.isNumber = isNumber; + function isDate(val) { + return val instanceof DateTime_1; + } + Values.isDate = isDate; + function isDuration(val) { + return val instanceof Duration_1; + } + Values.isDuration = isDuration; + function isNull(val) { + return val === null || val === undefined; + } + Values.isNull = isNull; + function isArray(val) { + return Array.isArray(val); + } + Values.isArray = isArray; + function isBoolean(val) { + return typeof val === "boolean"; + } + Values.isBoolean = isBoolean; + function isLink(val) { + return val instanceof Link; + } + Values.isLink = isLink; + function isHtml(val) { + if (typeof HTMLElement !== "undefined") { + return val instanceof HTMLElement; + } + else { + return false; + } + } + Values.isHtml = isHtml; + function isObject(val) { + return (typeof val == "object" && + !isHtml(val) && + !isArray(val) && + !isDuration(val) && + !isDate(val) && + !isLink(val) && + val !== undefined && + !isNull(val)); + } + Values.isObject = isObject; + function isFunction(val) { + return typeof val == "function"; + } + Values.isFunction = isFunction; +})(Values || (Values = {})); +/////////////// +// Groupings // +/////////////// +var Groupings; +(function (Groupings) { + /** Determines if the given group entry is a standalone value, or a grouping of sub-entries. */ + function isElementGroup(entry) { + return Values.isObject(entry) && Object.keys(entry).length == 2 && "key" in entry && "rows" in entry; + } + Groupings.isElementGroup = isElementGroup; + /** Determines if the given array is a grouping array. */ + function isGrouping(entry) { + for (let element of entry) + if (!isElementGroup(element)) + return false; + return true; + } + Groupings.isGrouping = isGrouping; + /** Count the total number of elements in a recursive grouping. */ + function count(elements) { + if (isGrouping(elements)) { + let result = 0; + for (let subgroup of elements) + result += count(subgroup.rows); + return result; + } + else { + return elements.length; + } + } + Groupings.count = count; +})(Groupings || (Groupings = {})); +////////// +// LINK // +////////// +/** The Obsidian 'link', used for uniquely describing a file, header, or block. */ +class Link { + constructor(fields) { + Object.assign(this, fields); + } + /** Create a link to a specific file. */ + static file(path, embed = false, display) { + return new Link({ + path, + embed, + display, + subpath: undefined, + type: "file", + }); + } + static infer(linkpath, embed = false, display) { + if (linkpath.includes("#^")) { + let split = linkpath.split("#^"); + return Link.block(split[0], split[1], embed, display); + } + else if (linkpath.includes("#")) { + let split = linkpath.split("#"); + return Link.header(split[0], split[1], embed, display); + } + else + return Link.file(linkpath, embed, display); + } + /** Create a link to a specific file and header in that file. */ + static header(path, header, embed, display) { + // Headers need to be normalized to alpha-numeric & with extra spacing removed. + return new Link({ + path, + embed, + display, + subpath: normalizeHeaderForLink(header), + type: "header", + }); + } + /** Create a link to a specific file and block in that file. */ + static block(path, blockId, embed, display) { + return new Link({ + path, + embed, + display, + subpath: blockId, + type: "block", + }); + } + static fromObject(object) { + return new Link(object); + } + /** Checks for link equality (i.e., that the links are pointing to the same exact location). */ + equals(other) { + if (other == undefined || other == null) + return false; + return this.path == other.path && this.type == other.type && this.subpath == other.subpath; + } + /** Convert this link to it's markdown representation. */ + toString() { + return this.markdown(); + } + /** Convert this link to a raw object which is serialization-friendly. */ + toObject() { + return { path: this.path, type: this.type, subpath: this.subpath, display: this.display, embed: this.embed }; + } + /** Update this link with a new path. */ + withPath(path) { + return new Link(Object.assign({}, this, { path })); + } + /** Return a new link which points to the same location but with a new display value. */ + withDisplay(display) { + return new Link(Object.assign({}, this, { display })); + } + /** Convert a file link into a link to a specific header. */ + withHeader(header) { + return Link.header(this.path, header, this.embed, this.display); + } + /** Convert any link into a link to its file. */ + toFile() { + return Link.file(this.path, this.embed, this.display); + } + /** Convert this link into an embedded link. */ + toEmbed() { + if (this.embed) { + return this; + } + else { + let link = new Link(this); + link.embed = true; + return link; + } + } + /** Convert this link into a non-embedded link. */ + fromEmbed() { + if (!this.embed) { + return this; + } + else { + let link = new Link(this); + link.embed = false; + return link; + } + } + /** Convert this link to markdown so it can be rendered. */ + markdown() { + let result = (this.embed ? "!" : "") + "[[" + this.obsidianLink(); + if (this.display) { + result += "|" + this.display; + } + else { + result += "|" + getFileTitle(this.path); + if (this.type == "header" || this.type == "block") + result += " > " + this.subpath; + } + result += "]]"; + return result; + } + /** Convert the inner part of the link to something that Obsidian can open / understand. */ + obsidianLink() { + var _a, _b; + const escaped = this.path.replace("|", "\\|"); + if (this.type == "header") + return escaped + "#" + ((_a = this.subpath) === null || _a === void 0 ? void 0 : _a.replace("|", "\\|")); + if (this.type == "block") + return escaped + "#^" + ((_b = this.subpath) === null || _b === void 0 ? void 0 : _b.replace("|", "\\|")); + else + return escaped; + } + /** The stripped name of the file this link points to. */ + fileName() { + return getFileTitle(this.path).replace(".md", ""); + } +} + +/** Implementation of DataArray, minus the dynamic variable access, which is implemented via proxy. */ +class DataArrayImpl { + constructor(values, settings, defaultComparator = Values.compareValue) { + this.values = values; + this.settings = settings; + this.defaultComparator = defaultComparator; + this.length = values.length; + } + static wrap(arr, settings, defaultComparator = Values.compareValue) { + return new Proxy(new DataArrayImpl(arr, settings, defaultComparator), DataArrayImpl.ARRAY_PROXY); + } + lwrap(values) { + return DataArrayImpl.wrap(values, this.settings, this.defaultComparator); + } + where(predicate) { + return this.lwrap(this.values.filter(predicate)); + } + filter(predicate) { + return this.where(predicate); + } + map(f) { + return this.lwrap(this.values.map(f)); + } + flatMap(f) { + let result = []; + for (let index = 0; index < this.length; index++) { + let value = f(this.values[index], index, this.values); + if (!value || value.length == 0) + continue; + for (let r of value) + result.push(r); + } + return this.lwrap(result); + } + mutate(f) { + for (let index = 0; index < this.values.length; index++) { + f(this.values[index], index, this.values); + } + return this; + } + limit(count) { + return this.lwrap(this.values.slice(0, count)); + } + slice(start, end) { + return this.lwrap(this.values.slice(start, end)); + } + concat(other) { + return this.lwrap(this.values.concat(other.values)); + } + /** Return the first index of the given (optionally starting the search) */ + indexOf(element, fromIndex) { + return this.findIndex(e => this.defaultComparator(e, element) == 0, fromIndex); + } + /** Return the first element that satisfies the given predicate. */ + find(pred) { + let index = this.findIndex(pred); + if (index == -1) + return undefined; + else + return this.values[index]; + } + findIndex(pred, fromIndex) { + for (let index = fromIndex !== null && fromIndex !== void 0 ? fromIndex : 0; index < this.length; index++) { + if (pred(this.values[index], index, this.values)) + return index; + } + return -1; + } + includes(element) { + return this.indexOf(element, 0) != -1; + } + join(sep) { + return this.map(s => Values.toString(s, this.settings)) + .array() + .join(sep !== null && sep !== void 0 ? sep : ", "); + } + sort(key, direction, comparator) { + if (this.values.length == 0) + return this; + let realComparator = comparator !== null && comparator !== void 0 ? comparator : this.defaultComparator; + let realKey = key !== null && key !== void 0 ? key : ((l) => l); + // Associate each entry with it's index for the key function, and then do a normal sort. + let copy = [].concat(this.array()).map((elem, index) => { + return { index: index, value: elem }; + }); + copy.sort((a, b) => { + let aKey = realKey(a.value, a.index, this.values); + let bKey = realKey(b.value, b.index, this.values); + return direction === "desc" ? -realComparator(aKey, bKey) : realComparator(aKey, bKey); + }); + return this.lwrap(copy.map(e => e.value)); + } + sortInPlace(key, direction, comparator) { + if (this.values.length == 0) + return this; + let realComparator = comparator !== null && comparator !== void 0 ? comparator : this.defaultComparator; + let realKey = key !== null && key !== void 0 ? key : ((l) => l); + this.values.sort((a, b) => { + let aKey = realKey(a); + let bKey = realKey(b); + return direction == "desc" ? -realComparator(aKey, bKey) : realComparator(aKey, bKey); + }); + return this; + } + groupBy(key, comparator) { + if (this.values.length == 0) + return this.lwrap([]); + // JavaScript sucks and we can't make hash maps over arbitrary types (only strings/ints), so + // we do a poor man algorithm where we SORT, followed by grouping. + let intermediate = this.sort(key, "asc", comparator); + comparator = comparator !== null && comparator !== void 0 ? comparator : this.defaultComparator; + let result = []; + let currentRow = [intermediate[0]]; + let current = key(intermediate[0], 0, intermediate.values); + for (let index = 1; index < intermediate.length; index++) { + let newKey = key(intermediate[index], index, intermediate.values); + if (comparator(current, newKey) != 0) { + result.push({ key: current, rows: this.lwrap(currentRow) }); + current = newKey; + currentRow = [intermediate[index]]; + } + else { + currentRow.push(intermediate[index]); + } + } + result.push({ key: current, rows: this.lwrap(currentRow) }); + return this.lwrap(result); + } + groupIn(key, comparator) { + if (Groupings.isGrouping(this.values)) { + return this.map(v => { + return { + key: v.key, + rows: DataArray.wrap(v.rows, this.settings).groupIn(key, comparator), + }; + }); + } + else { + return this.groupBy(key, comparator); + } + } + distinct(key, comparator) { + if (this.values.length == 0) + return this; + let realKey = key !== null && key !== void 0 ? key : (x => x); + // For similar reasons to groupBy, do a sort and take the first element of each block. + let intermediate = this.map((x, index) => { + return { key: realKey(x, index, this.values), value: x }; + }).sort(x => x.key, "asc", comparator); + comparator = comparator !== null && comparator !== void 0 ? comparator : this.defaultComparator; + let result = [intermediate[0].value]; + for (let index = 1; index < intermediate.length; index++) { + if (comparator(intermediate[index - 1].key, intermediate[index].key) != 0) { + result.push(intermediate[index].value); + } + } + return this.lwrap(result); + } + every(f) { + return this.values.every(f); + } + some(f) { + return this.values.some(f); + } + none(f) { + return this.values.every((v, i, a) => !f(v, i, a)); + } + first() { + return this.values.length > 0 ? this.values[0] : undefined; + } + last() { + return this.values.length > 0 ? this.values[this.values.length - 1] : undefined; + } + to(key) { + let result = []; + for (let child of this.values) { + let value = child[key]; + if (value === undefined || value === null) + continue; + if (Array.isArray(value) || DataArray.isDataArray(value)) + value.forEach(v => result.push(v)); + else + result.push(value); + } + return this.lwrap(result); + } + into(key) { + let result = []; + for (let child of this.values) { + let value = child[key]; + if (value === undefined || value === null) + continue; + result.push(value); + } + return this.lwrap(result); + } + expand(key) { + let result = []; + let queue = [].concat(this.values); + while (queue.length > 0) { + let next = queue.pop(); + let value = next[key]; + if (value === undefined || value === null) + continue; + if (Array.isArray(value)) + value.forEach(v => queue.push(v)); + else if (value instanceof DataArrayImpl) + value.forEach(v => queue.push(v)); + else + queue.push(value); + result.push(next); + } + return this.lwrap(result); + } + forEach(f) { + for (let index = 0; index < this.values.length; index++) { + f(this.values[index], index, this.values); + } + } + array() { + return [].concat(this.values); + } + [Symbol.iterator]() { + return this.values[Symbol.iterator](); + } + toString() { + return "[" + this.values.join(", ") + "]"; + } +} +DataArrayImpl.ARRAY_FUNCTIONS = new Set([ + "where", + "filter", + "map", + "flatMap", + "mutate", + "slice", + "concat", + "indexOf", + "limit", + "find", + "findIndex", + "includes", + "join", + "sort", + "sortInPlace", + "groupBy", + "groupIn", + "distinct", + "every", + "some", + "none", + "first", + "last", + "to", + "into", + "lwrap", + "expand", + "forEach", + "length", + "values", + "array", + "defaultComparator", + "toString", + "settings", +]); +DataArrayImpl.ARRAY_PROXY = { + get: function (target, prop, reciever) { + if (typeof prop === "symbol") + return target[prop]; + else if (typeof prop === "number") + return target.values[prop]; + else if (prop === "constructor") + return target.values.constructor; + else if (!isNaN(parseInt(prop))) + return target.values[parseInt(prop)]; + else if (DataArrayImpl.ARRAY_FUNCTIONS.has(prop.toString())) + return target[prop.toString()]; + return target.to(prop); + }, +}; +/** Provides utility functions for generating data arrays. */ +var DataArray; +(function (DataArray) { + /** Create a new Dataview data array. */ + function wrap(raw, settings) { + if (isDataArray(raw)) + return raw; + return DataArrayImpl.wrap(raw, settings); + } + DataArray.wrap = wrap; + /** Create a new DataArray from an iterable object. */ + function from(raw, settings) { + if (isDataArray(raw)) + return raw; + let data = []; + for (let elem of raw) + data.push(elem); + return DataArrayImpl.wrap(data, settings); + } + DataArray.from = from; + /** Return true if the given object is a data array. */ + function isDataArray(obj) { + return obj instanceof DataArrayImpl; + } + DataArray.isDataArray = isDataArray; +})(DataArray || (DataArray = {})); +// A scary looking polyfill, sure, but it fixes up data array/array interop for us. +const oldArrayIsArray = Array.isArray; +Array.isArray = (arg) => { + return oldArrayIsArray(arg) || DataArray.isDataArray(arg); +}; + +/** Test-environment-friendly function which fetches the current system locale. */ +function currentLocale() { + if (typeof window === "undefined") + return "en-US"; + return window.navigator.language; +} + +/** Render simple fields compactly, removing wrapping content like paragraph and span. */ +async function renderCompactMarkdown(markdown, container, sourcePath, component) { + let subcontainer = container.createSpan(); + await obsidian.MarkdownRenderer.renderMarkdown(markdown, subcontainer, sourcePath, component); + let paragraph = subcontainer.querySelector(":scope > p"); + if (subcontainer.children.length == 1 && paragraph) { + while (paragraph.firstChild) { + subcontainer.appendChild(paragraph.firstChild); + } + subcontainer.removeChild(paragraph); + } +} +/** Render a pre block with an error in it; returns the element to allow for dynamic updating. */ +function renderErrorPre(container, error) { + let pre = container.createEl("pre", { cls: ["dataview", "dataview-error"] }); + pre.appendText(error); + return pre; +} +/** Render a static codeblock. */ +function renderCodeBlock(container, source, language) { + let code = container.createEl("code", { cls: ["dataview"] }); + if (language) + code.classList.add("language-" + language); + code.appendText(source); + return code; +} +/** Prettily render a value into a container with the given settings. */ +async function renderValue(field, container, originFile, component, settings, expandList = false, context = "root", depth = 0) { + var _a, _b; + // Prevent infinite recursion. + if (depth > settings.maxRecursiveRenderDepth) { + container.appendText("..."); + return; + } + if (Values.isNull(field)) { + await renderCompactMarkdown(settings.renderNullAs, container, originFile, component); + } + else if (Values.isDate(field)) { + container.appendText(renderMinimalDate(field, settings, currentLocale())); + } + else if (Values.isDuration(field)) { + container.appendText(renderMinimalDuration(field)); + } + else if (Values.isString(field) || Values.isBoolean(field) || Values.isNumber(field)) { + await renderCompactMarkdown("" + field, container, originFile, component); + } + else if (Values.isLink(field)) { + await renderCompactMarkdown(field.markdown(), container, originFile, component); + } + else if (Values.isHtml(field)) { + container.appendChild(field); + } + else if (Values.isFunction(field)) { + container.appendText(""); + } + else if (Values.isArray(field) || DataArray.isDataArray(field)) { + if (expandList) { + let list = container.createEl("ul", { + cls: [ + "dataview", + "dataview-ul", + context == "list" ? "dataview-result-list-ul" : "dataview-result-list-root-ul", + ], + }); + for (let child of field) { + let li = list.createEl("li", { cls: "dataview-result-list-li" }); + await renderValue(child, li, originFile, component, settings, expandList, "list", depth + 1); + } + } + else { + if (field.length == 0) { + container.appendText(""); + return; + } + let span = container.createEl("span", { cls: ["dataview", "dataview-result-list-span"] }); + let first = true; + for (let val of field) { + if (first) + first = false; + else + span.appendText(", "); + await renderValue(val, span, originFile, component, settings, expandList, "list", depth + 1); + } + } + } + else if (Values.isObject(field)) { + // Don't render classes in case they have recursive references; spoopy. + if (((_a = field === null || field === void 0 ? void 0 : field.constructor) === null || _a === void 0 ? void 0 : _a.name) && ((_b = field === null || field === void 0 ? void 0 : field.constructor) === null || _b === void 0 ? void 0 : _b.name) != "Object") { + container.appendText(`<${field.constructor.name}>`); + return; + } + if (expandList) { + let list = container.createEl("ul", { cls: ["dataview", "dataview-ul", "dataview-result-object-ul"] }); + for (let [key, value] of Object.entries(field)) { + let li = list.createEl("li", { cls: ["dataview", "dataview-li", "dataview-result-object-li"] }); + li.appendText(key + ": "); + await renderValue(value, li, originFile, component, settings, expandList, "list", depth + 1); + } + } + else { + if (Object.keys(field).length == 0) { + container.appendText(""); + return; + } + let span = container.createEl("span", { cls: ["dataview", "dataview-result-object-span"] }); + let first = true; + for (let [key, value] of Object.entries(field)) { + if (first) + first = false; + else + span.appendText(", "); + span.appendText(key + ": "); + await renderValue(value, span, originFile, component, settings, expandList, "list", depth + 1); + } + } + } + else { + container.appendText("Unrecognized: " + JSON.stringify(field)); + } +} + +var papaparse_min = {exports: {}}; + +/* @license +Papa Parse +v5.3.2 +https://github.com/mholt/PapaParse +License: MIT +*/ + +(function (module, exports) { +!function(e,t){module.exports=t();}(commonjsGlobal,function s(){var f="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=n&&/blob:/i.test((f.location||{}).protocol),a={},h=0,b={parse:function(e,t){var i=(t=t||{}).dynamicTyping||!1;M(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!M(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var r=function(){if(!b.WORKERS_SUPPORTED)return !1;var e=(i=f.URL||f.webkitURL||null,r=s.toString(),b.BLOB_URL||(b.BLOB_URL=i.createObjectURL(new Blob(["(",r,")();"],{type:"text/javascript"})))),t=new f.Worker(e);var i,r;return t.onmessage=_,t.id=h++,a[t.id]=t}();return r.userStep=t.step,r.userChunk=t.chunk,r.userComplete=t.complete,r.userError=t.error,t.step=M(t.step),t.chunk=M(t.chunk),t.complete=M(t.complete),t.error=M(t.error),delete t.worker,void r.postMessage({input:e,config:t,workerId:r.id})}var n=null;b.NODE_STREAM_INPUT,"string"==typeof e?n=t.download?new l(t):new p(t):!0===e.readable&&M(e.read)&&M(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,_=!0,m=",",y="\r\n",s='"',a=s+s,i=!1,r=null,o=!1;!function(){if("object"!=typeof t)return;"string"!=typeof t.delimiter||b.BAD_DELIMITERS.filter(function(e){return -1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter);("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes);"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines);"string"==typeof t.newline&&(y=t.newline);"string"==typeof t.quoteChar&&(s=t.quoteChar);"boolean"==typeof t.header&&(_=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");r=t.columns;}void 0!==t.escapeChar&&(a=t.escapeChar+s);("boolean"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(o=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\-@\t\r].*$/);}();var h=new RegExp(j(s),"g");"string"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return u(null,e,i);if("object"==typeof e[0])return u(r||Object.keys(e[0]),e,i)}else if("object"==typeof e)return "string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||r),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),u(e.fields||[],e.data||[],i);throw new Error("Unable to serialize unrecognized input");function u(e,t,i){var r="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0=this._config.preview;if(o)f.postMessage({results:n,workerId:b.WORKER_ID,finished:a});else if(M(this._config.chunk)&&!t){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);n=void 0,this._completeResults=void 0;}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!a||!M(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0;},this._sendError=function(e){M(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:b.WORKER_ID,error:e,finished:!1});};}function l(e){var r;(e=e||{}).chunkSize||(e.chunkSize=b.RemoteChunkSize),u.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded();}:function(){this._readChunk();},this.stream=function(e){this._input=e,this._nextChunk();},this._readChunk=function(){if(this._finished)this._chunkLoaded();else {if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),n||(r.onload=v(this._chunkLoaded,this),r.onerror=v(this._chunkError,this)),r.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)r.setRequestHeader(t,e[t]);}if(this._config.chunkSize){var i=this._start+this._config.chunkSize-1;r.setRequestHeader("Range","bytes="+this._start+"-"+i);}try{r.send(this._config.downloadRequestBody);}catch(e){this._chunkError(e.message);}n&&0===r.status&&this._chunkError();}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:r.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");if(null===t)return -1;return parseInt(t.substring(t.lastIndexOf("/")+1))}(r),this.parseChunk(r.responseText)));},this._chunkError=function(e){var t=r.statusText||e;this._sendError(new Error(t));};}function c(e){var r,n;(e=e||{}).chunkSize||(e.chunkSize=b.LocalChunkSize),u.call(this,e);var s="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,s?((r=new FileReader).onload=v(this._chunkLoaded,this),r.onerror=v(this._chunkError,this)):r=new FileReaderSync,this._nextChunk();},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result);},this._chunkError=function(){this._sendError(r.error);};}function p(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,t=this._config.chunkSize;return t?(e=i.substring(0,t),i=i.substring(t)):(e=i,i=""),this._finished=!i,this.parseChunk(e)}};}function g(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause();},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume();},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError);},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0);},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0;},this._streamData=v(function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()));}catch(e){this._streamError(e);}},this),this._streamError=v(function(e){this._streamCleanUp(),this._sendError(e);},this),this._streamEnd=v(function(){this._streamCleanUp(),r=!0,this._streamData("");},this),this._streamCleanUp=v(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError);},this);}function i(m){var a,o,h,r=Math.pow(2,53),n=-r,s=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,u=/^(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))$/,t=this,i=0,f=0,d=!1,e=!1,l=[],c={data:[],errors:[],meta:{}};if(M(m.step)){var p=m.step;m.step=function(e){if(c=e,_())g();else {if(g(),0===c.data.length)return;i+=e.data.length,m.preview&&i>m.preview?o.abort():(c.data=c.data[0],p(c,t));}};}function y(e){return "greedy"===m.skipEmptyLines?""===e.join("").trim():1===e.length&&0===e[0].length}function g(){return c&&h&&(k("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+b.DefaultDelimiter+"'"),h=!1),m.skipEmptyLines&&(c.data=c.data.filter(function(e){return !y(e)})),_()&&function(){if(!c)return;function e(e,t){M(m.transformHeader)&&(e=m.transformHeader(e,t)),l.push(e);}if(Array.isArray(c.data[0])){for(var t=0;_()&&t=l.length?"__parsed_extra":l[i]),m.transform&&(s=m.transform(s,n)),s=v(n,s),"__parsed_extra"===n?(r[n]=r[n]||[],r[n].push(s)):r[n]=s;}return m.header&&(i>l.length?k("FieldMismatch","TooManyFields","Too many fields: expected "+l.length+" fields but parsed "+i,f+t):i=r.length/2?"\r\n":"\r"}(e,r)),h=!1,m.delimiter)M(m.delimiter)&&(m.delimiter=m.delimiter(e),c.meta.delimiter=m.delimiter);else {var n=function(e,t,i,r,n){var s,a,o,h;n=n||[",","\t","|",";",b.RECORD_SEP,b.UNIT_SEP];for(var u=0;u=D)return C(!0)}else for(m=F,F++;;){if(-1===(m=r.indexOf(S,m+1)))return i||u.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:h.length,index:F}),E();if(m===n-1)return E(r.substring(F,m).replace(_,S));if(S!==L||r[m+1]!==L){if(S===L||0===m||r[m-1]!==L){-1!==p&&p=D)return C(!0);break}u.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:h.length,index:F}),m++;}}else m++;}return E();function k(e){h.push(e),d=F;}function b(e){var t=0;if(-1!==e){var i=r.substring(m+1,e);i&&""===i.trim()&&(t=i.length);}return t}function E(e){return i||(void 0===e&&(e=r.substring(F)),f.push(e),F=n,k(f),o&&R()),C()}function w(e){F=e,k(f),f=[],g=r.indexOf(x,F);}function C(e){return {data:h,errors:u,meta:{delimiter:O,linebreak:x,aborted:z,truncated:!!e,cursor:d+(t||0)}}}function R(){T(C()),h=[],u=[];}},this.abort=function(){z=!0;},this.getCharIndex=function(){return F};}function _(e){var t=e.data,i=a[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,m(t.workerId,{data:[],errors:[],meta:{aborted:!0}});},pause:y,resume:y};if(M(i.userStep)){for(var s=0;s" || op == ">=" || op == "!=" || op == "="; + } + Fields.isCompareOp = isCompareOp; + Fields.NULL = Fields.literal(null); +})(Fields || (Fields = {})); + +/** AST implementation for queries over data sources. */ +/** Utility functions for creating and manipulating sources. */ +var Sources; +(function (Sources) { + function tag(tag) { + return { type: "tag", tag }; + } + Sources.tag = tag; + function csv(path) { + return { type: "csv", path }; + } + Sources.csv = csv; + function folder(prefix) { + return { type: "folder", folder: prefix }; + } + Sources.folder = folder; + function link(file, incoming) { + return { type: "link", file, direction: incoming ? "incoming" : "outgoing" }; + } + Sources.link = link; + function binaryOp(left, op, right) { + return { type: "binaryop", left, op, right }; + } + Sources.binaryOp = binaryOp; + function negate(child) { + return { type: "negate", child }; + } + Sources.negate = negate; + function empty() { + return { type: "empty" }; + } + Sources.empty = empty; +})(Sources || (Sources = {})); + +/** Emoji regex without any additional flags. */ +const EMOJI_REGEX = new RegExp(emojiRegex(), ""); +/** Provides a lookup table for unit durations of the given type. */ +const DURATION_TYPES = { + year: Duration_1.fromObject({ years: 1 }), + years: Duration_1.fromObject({ years: 1 }), + yr: Duration_1.fromObject({ years: 1 }), + yrs: Duration_1.fromObject({ years: 1 }), + month: Duration_1.fromObject({ months: 1 }), + months: Duration_1.fromObject({ months: 1 }), + mo: Duration_1.fromObject({ months: 1 }), + mos: Duration_1.fromObject({ months: 1 }), + week: Duration_1.fromObject({ weeks: 1 }), + weeks: Duration_1.fromObject({ weeks: 1 }), + wk: Duration_1.fromObject({ weeks: 1 }), + wks: Duration_1.fromObject({ weeks: 1 }), + w: Duration_1.fromObject({ weeks: 1 }), + day: Duration_1.fromObject({ days: 1 }), + days: Duration_1.fromObject({ days: 1 }), + d: Duration_1.fromObject({ days: 1 }), + hour: Duration_1.fromObject({ hours: 1 }), + hours: Duration_1.fromObject({ hours: 1 }), + hr: Duration_1.fromObject({ hours: 1 }), + hrs: Duration_1.fromObject({ hours: 1 }), + h: Duration_1.fromObject({ hours: 1 }), + minute: Duration_1.fromObject({ minutes: 1 }), + minutes: Duration_1.fromObject({ minutes: 1 }), + min: Duration_1.fromObject({ minutes: 1 }), + mins: Duration_1.fromObject({ minutes: 1 }), + m: Duration_1.fromObject({ minutes: 1 }), + second: Duration_1.fromObject({ seconds: 1 }), + seconds: Duration_1.fromObject({ seconds: 1 }), + sec: Duration_1.fromObject({ seconds: 1 }), + secs: Duration_1.fromObject({ seconds: 1 }), + s: Duration_1.fromObject({ seconds: 1 }), +}; +/** Shorthand for common dates (relative to right now). */ +const DATE_SHORTHANDS = { + now: () => DateTime_1.local(), + today: () => DateTime_1.local().startOf("day"), + yesterday: () => DateTime_1.local() + .startOf("day") + .minus(Duration_1.fromObject({ days: 1 })), + tomorrow: () => DateTime_1.local() + .startOf("day") + .plus(Duration_1.fromObject({ days: 1 })), + sow: () => DateTime_1.local().startOf("week"), + "start-of-week": () => DateTime_1.local().startOf("week"), + eow: () => DateTime_1.local().endOf("week"), + "end-of-week": () => DateTime_1.local().endOf("week"), + soy: () => DateTime_1.local().startOf("year"), + "start-of-year": () => DateTime_1.local().startOf("year"), + eoy: () => DateTime_1.local().endOf("year"), + "end-of-year": () => DateTime_1.local().endOf("year"), + som: () => DateTime_1.local().startOf("month"), + "start-of-month": () => DateTime_1.local().startOf("month"), + eom: () => DateTime_1.local().endOf("month"), + "end-of-month": () => DateTime_1.local().endOf("month"), +}; +/** + * Keywords which cannot be used as variables directly. Use `row.` if it is a variable you have defined and want + * to access. + */ +const KEYWORDS = ["FROM", "WHERE", "LIMIT", "GROUP", "FLATTEN"]; +/////////////// +// Utilities // +/////////////// +/** Split on unescaped pipes in an inner link. */ +function splitOnUnescapedPipe(link) { + let pipe = -1; + while ((pipe = link.indexOf("|", pipe + 1)) >= 0) { + if (pipe > 0 && link[pipe - 1] == "\\") + continue; + return [link.substring(0, pipe).replace(/\\\|/g, "|"), link.substring(pipe + 1)]; + } + return [link.replace(/\\\|/g, "|"), undefined]; +} +/** Attempt to parse the inside of a link to pull out display name, subpath, etc. */ +function parseInnerLink(rawlink) { + let [link, display] = splitOnUnescapedPipe(rawlink); + return Link.infer(link, false, display); +} +/** Create a left-associative binary parser which parses the given sub-element and separator. Handles whitespace. */ +function createBinaryParser(child, sep, combine) { + return parsimmon_umd_min.exports.seqMap(child, parsimmon_umd_min.exports.seq(parsimmon_umd_min.exports.optWhitespace, sep, parsimmon_umd_min.exports.optWhitespace, child).many(), (first, rest) => { + if (rest.length == 0) + return first; + let node = combine(first, rest[0][1], rest[0][3]); + for (let index = 1; index < rest.length; index++) { + node = combine(node, rest[index][1], rest[index][3]); + } + return node; + }); +} +function chainOpt(base, ...funcs) { + return parsimmon_umd_min.exports.custom((success, failure) => { + return (input, i) => { + let result = base._(input, i); + if (!result.status) + return result; + for (let func of funcs) { + let next = func(result.value)._(input, result.index); + if (!next.status) + return result; + result = next; + } + return result; + }; + }); +} +const EXPRESSION = parsimmon_umd_min.exports.createLanguage({ + // A floating point number; the decimal point is optional. + number: q => parsimmon_umd_min.exports.regexp(/-?[0-9]+(\.[0-9]+)?/) + .map(str => Number.parseFloat(str)) + .desc("number"), + // A quote-surrounded string which supports escape characters ('\'). + string: q => parsimmon_umd_min.exports.string('"') + .then(parsimmon_umd_min.exports.alt(q.escapeCharacter, parsimmon_umd_min.exports.noneOf('"\\')) + .atLeast(0) + .map(chars => chars.join(""))) + .skip(parsimmon_umd_min.exports.string('"')) + .desc("string"), + escapeCharacter: _ => parsimmon_umd_min.exports.string("\\") + .then(parsimmon_umd_min.exports.any) + .map(escaped => { + // If we are escaping a backslash or a quote, pass in on in escaped form + if (escaped === '"') + return '"'; + if (escaped === "\\") + return "\\"; + else + return "\\" + escaped; + }), + // A boolean true/false value. + bool: _ => parsimmon_umd_min.exports.regexp(/true|false|True|False/) + .map(str => str.toLowerCase() == "true") + .desc("boolean ('true' or 'false')"), + // A tag of the form '#stuff/hello-there'. + tag: _ => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("#"), parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regexp(/[\p{Letter}0-9_/-]/u).desc("text"), parsimmon_umd_min.exports.regexp(EMOJI_REGEX).desc("text")).many(), (start, rest) => start + rest.join("")).desc("tag ('#hello/stuff')"), + // A variable identifier, which is alphanumeric and must start with a letter or... emoji. + identifier: _ => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regexp(/\p{Letter}/u), parsimmon_umd_min.exports.regexp(EMOJI_REGEX).desc("text")), parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regexp(/[0-9\p{Letter}_-]/u), parsimmon_umd_min.exports.regexp(EMOJI_REGEX).desc("text")).many(), (first, rest) => first + rest.join("")).desc("variable identifier"), + // An Obsidian link of the form [[]]. + link: _ => parsimmon_umd_min.exports.regexp(/\[\[([^\[\]]*?)\]\]/u, 1) + .map(linkInner => parseInnerLink(linkInner)) + .desc("file link"), + // An embeddable link which can start with '!'. This overlaps with the normal negation operator, so it is only + // provided for metadata parsing. + embedLink: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("!").atMost(1), q.link, (p, l) => { + if (p.length > 0) + l.embed = true; + return l; + }).desc("file link"), + // Binary plus or minus operator. + binaryPlusMinus: _ => parsimmon_umd_min.exports.regexp(/\+|-/) + .map(str => str) + .desc("'+' or '-'"), + // Binary times or divide operator. + binaryMulDiv: _ => parsimmon_umd_min.exports.regexp(/\*|\//) + .map(str => str) + .desc("'*' or '/'"), + // Binary comparison operator. + binaryCompareOp: _ => parsimmon_umd_min.exports.regexp(/>=|<=|!=|>|<|=/) + .map(str => str) + .desc("'>=' or '<=' or '!=' or '=' or '>' or '<'"), + // Binary boolean combination operator. + binaryBooleanOp: _ => parsimmon_umd_min.exports.regexp(/and|or|&|\|/i) + .map(str => { + if (str.toLowerCase() == "and") + return "&"; + else if (str.toLowerCase() == "or") + return "|"; + else + return str; + }) + .desc("'and' or 'or'"), + // A date which can be YYYY-MM[-DDTHH:mm:ss]. + rootDate: _ => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/\d{4}/), parsimmon_umd_min.exports.string("-"), parsimmon_umd_min.exports.regexp(/\d{2}/), (year, _, month) => { + return DateTime_1.fromObject({ year: Number.parseInt(year), month: Number.parseInt(month) }); + }).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"), + dateShorthand: _ => parsimmon_umd_min.exports.alt(...Object.keys(DATE_SHORTHANDS) + .sort((a, b) => b.length - a.length) + .map(parsimmon_umd_min.exports.string)), + date: q => chainOpt(q.rootDate, (ym) => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("-"), parsimmon_umd_min.exports.regexp(/\d{2}/), (_, day) => ym.set({ day: Number.parseInt(day) })), (ymd) => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("T"), parsimmon_umd_min.exports.regexp(/\d{2}/), (_, hour) => ymd.set({ hour: Number.parseInt(hour) })), (ymdh) => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string(":"), parsimmon_umd_min.exports.regexp(/\d{2}/), (_, minute) => ymdh.set({ minute: Number.parseInt(minute) })), (ymdhm) => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string(":"), parsimmon_umd_min.exports.regexp(/\d{2}/), (_, second) => ymdhm.set({ second: Number.parseInt(second) })), (ymdhms) => parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("."), parsimmon_umd_min.exports.regexp(/\d{3}/), (_, millisecond) => ymdhms.set({ millisecond: Number.parseInt(millisecond) })), parsimmon_umd_min.exports.succeed(ymdhms) // pass + ), (dt) => parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("+").or(parsimmon_umd_min.exports.string("-")), parsimmon_umd_min.exports.regexp(/\d{1,2}(:\d{2})?/), (pm, hr) => dt.setZone("UTC" + pm + hr, { keepLocalTime: true })), parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("Z"), () => dt.setZone("utc", { keepLocalTime: true })), parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("["), parsimmon_umd_min.exports.regexp(/[0-9A-Za-z+-\/]+/u), parsimmon_umd_min.exports.string("]"), (_a, zone, _b) => dt.setZone(zone, { keepLocalTime: true })))) + .assert((dt) => dt.isValid, "valid date") + .desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"), + // A date, plus various shorthand times of day it could be. + datePlus: q => parsimmon_umd_min.exports.alt(q.dateShorthand.map(d => DATE_SHORTHANDS[d]()), q.date).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS] or in shorthand"), + // A duration of time. + durationType: _ => parsimmon_umd_min.exports.alt(...Object.keys(DURATION_TYPES) + .sort((a, b) => b.length - a.length) + .map(parsimmon_umd_min.exports.string)), + duration: q => parsimmon_umd_min.exports.seqMap(q.number, parsimmon_umd_min.exports.optWhitespace, q.durationType, (count, _, t) => DURATION_TYPES[t].mapUnits(x => x * count)) + .sepBy1(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace).or(parsimmon_umd_min.exports.optWhitespace)) + .map(durations => durations.reduce((p, c) => p.plus(c))) + .desc("duration like 4hr2min"), + // A raw null value. + rawNull: _ => parsimmon_umd_min.exports.string("null"), + // Source parsing. + tagSource: q => q.tag.map(tag => Sources.tag(tag)), + csvSource: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("csv(").skip(parsimmon_umd_min.exports.optWhitespace), q.string, parsimmon_umd_min.exports.string(")"), (_1, path, _2) => Sources.csv(path)), + linkIncomingSource: q => q.link.map(link => Sources.link(link.path, true)), + linkOutgoingSource: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("outgoing(").skip(parsimmon_umd_min.exports.optWhitespace), q.link, parsimmon_umd_min.exports.string(")"), (_1, link, _2) => Sources.link(link.path, false)), + folderSource: q => q.string.map(str => Sources.folder(str)), + parensSource: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("("), parsimmon_umd_min.exports.optWhitespace, q.source, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (_1, _2, field, _3, _4) => field), + negateSource: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.string("-"), parsimmon_umd_min.exports.string("!")), q.atomSource, (_, source) => Sources.negate(source)), + atomSource: q => parsimmon_umd_min.exports.alt(q.parensSource, q.negateSource, q.linkOutgoingSource, q.linkIncomingSource, q.folderSource, q.tagSource, q.csvSource), + binaryOpSource: q => createBinaryParser(q.atomSource, q.binaryBooleanOp.map(s => s), Sources.binaryOp), + source: q => q.binaryOpSource, + // Field parsing. + variableField: q => q.identifier + .chain(r => { + if (KEYWORDS.includes(r.toUpperCase())) { + return parsimmon_umd_min.exports.fail("Variable fields cannot be a keyword (" + KEYWORDS.join(" or ") + ")"); + } + else { + return parsimmon_umd_min.exports.succeed(Fields.variable(r)); + } + }) + .desc("variable"), + numberField: q => q.number.map(val => Fields.literal(val)).desc("number"), + stringField: q => q.string.map(val => Fields.literal(val)).desc("string"), + boolField: q => q.bool.map(val => Fields.literal(val)).desc("boolean"), + dateField: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("date("), parsimmon_umd_min.exports.optWhitespace, q.datePlus, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (prefix, _1, date, _2, postfix) => Fields.literal(date)).desc("date"), + durationField: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("dur("), parsimmon_umd_min.exports.optWhitespace, q.duration, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (prefix, _1, dur, _2, postfix) => Fields.literal(dur)).desc("duration"), + nullField: q => q.rawNull.map(_ => Fields.NULL), + linkField: q => q.link.map(f => Fields.literal(f)), + listField: q => q.field + .sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)) + .wrap(parsimmon_umd_min.exports.string("[").skip(parsimmon_umd_min.exports.optWhitespace), parsimmon_umd_min.exports.optWhitespace.then(parsimmon_umd_min.exports.string("]"))) + .map(l => Fields.list(l)) + .desc("list ('[1, 2, 3]')"), + objectField: q => parsimmon_umd_min.exports.seqMap(q.identifier.or(q.string), parsimmon_umd_min.exports.string(":").trim(parsimmon_umd_min.exports.optWhitespace), q.field, (name, _sep, value) => { + return { name, value }; + }) + .sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)) + .wrap(parsimmon_umd_min.exports.string("{").skip(parsimmon_umd_min.exports.optWhitespace), parsimmon_umd_min.exports.optWhitespace.then(parsimmon_umd_min.exports.string("}"))) + .map(vals => { + let res = {}; + for (let entry of vals) + res[entry.name] = entry.value; + return Fields.object(res); + }) + .desc("object ('{ a: 1, b: 2 }')"), + atomInlineField: q => parsimmon_umd_min.exports.alt(q.date, q.duration.map(d => normalizeDuration(d)), q.string, q.tag, q.embedLink, q.bool, q.number, q.rawNull), + inlineFieldList: q => q.atomInlineField.sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace).lookahead(q.atomInlineField)), + inlineField: q => parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.seqMap(q.atomInlineField, parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace), q.inlineFieldList, (f, _s, l) => [f].concat(l)), q.atomInlineField), + atomField: q => parsimmon_umd_min.exports.alt( + // Place embed links above negated fields as they are the special parser case '![[thing]]' and are generally unambigious. + q.embedLink.map(l => Fields.literal(l)), q.negatedField, q.linkField, q.listField, q.objectField, q.lambdaField, q.parensField, q.boolField, q.numberField, q.stringField, q.dateField, q.durationField, q.nullField, q.variableField), + indexField: q => parsimmon_umd_min.exports.seqMap(q.atomField, parsimmon_umd_min.exports.alt(q.dotPostfix, q.indexPostfix, q.functionPostfix).many(), (obj, postfixes) => { + let result = obj; + for (let post of postfixes) { + switch (post.type) { + case "dot": + case "index": + result = Fields.index(result, post.field); + break; + case "function": + result = Fields.func(result, post.fields); + break; + } + } + return result; + }), + negatedField: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("!"), q.indexField, (_, field) => Fields.negate(field)).desc("negated field"), + parensField: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("("), parsimmon_umd_min.exports.optWhitespace, q.field, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (_1, _2, field, _3, _4) => field), + lambdaField: q => parsimmon_umd_min.exports.seqMap(q.identifier + .sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)) + .wrap(parsimmon_umd_min.exports.string("(").trim(parsimmon_umd_min.exports.optWhitespace), parsimmon_umd_min.exports.string(")").trim(parsimmon_umd_min.exports.optWhitespace)), parsimmon_umd_min.exports.string("=>").trim(parsimmon_umd_min.exports.optWhitespace), q.field, (ident, _ignore, value) => { + return { type: "lambda", arguments: ident, value }; + }), + dotPostfix: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("."), q.identifier, (_, field) => { + return { type: "dot", field: Fields.literal(field) }; + }), + indexPostfix: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("["), parsimmon_umd_min.exports.optWhitespace, q.field, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string("]"), (_, _2, field, _3, _4) => { + return { type: "index", field }; + }), + functionPostfix: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("("), parsimmon_umd_min.exports.optWhitespace, q.field.sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)), parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (_, _1, fields, _2, _3) => { + return { type: "function", fields }; + }), + // The precedence hierarchy of operators - multiply/divide, add/subtract, compare, and then boolean operations. + binaryMulDivField: q => createBinaryParser(q.indexField, q.binaryMulDiv, Fields.binaryOp), + binaryPlusMinusField: q => createBinaryParser(q.binaryMulDivField, q.binaryPlusMinus, Fields.binaryOp), + binaryCompareField: q => createBinaryParser(q.binaryPlusMinusField, q.binaryCompareOp, Fields.binaryOp), + binaryBooleanField: q => createBinaryParser(q.binaryCompareField, q.binaryBooleanOp, Fields.binaryOp), + binaryOpField: q => q.binaryBooleanField, + field: q => q.binaryOpField, +}); +/** + * Attempt to parse a field from the given text, returning a string error if the + * parse failed. + */ +function parseField(text) { + try { + return Result.success(EXPRESSION.field.tryParse(text)); + } + catch (error) { + return Result.failure("" + error); + } +} + +/** Parse inline fields and other embedded metadata in a line. */ +/** The wrapper characters that can be used to define an inline field. */ +const INLINE_FIELD_WRAPPERS = Object.freeze({ + "[": "]", + "(": ")", +}); +/** + * Find a matching closing bracket that occurs at or after `start`, respecting nesting and escapes. If found, + * returns the value contained within and the string index after the end of the value. + */ +function findClosing(line, start, open, close) { + let nesting = 0; + let escaped = false; + for (let index = start; index < line.length; index++) { + let char = line.charAt(index); + // Allows for double escapes like '\\' to be rendered normally. + if (char == "\\") { + escaped = !escaped; + continue; + } + if (escaped) { + escaped = false; + continue; + } + if (char == open) + nesting++; + else if (char == close) + nesting--; + // Only occurs if we are on a close character and trhere is no more nesting. + if (nesting < 0) + return { value: line.substring(start, index).trim(), endIndex: index + 1 }; + escaped = false; + } + return undefined; +} +/** Find the '::' separator in an inline field. */ +function findSeparator(line, start) { + let sep = line.indexOf("::", start); + if (sep < 0) + return undefined; + return { key: line.substring(start, sep).trim(), valueIndex: sep + 2 }; +} +/** Try to completely parse an inline field starting at the given position. Assuems `start` is on a wrapping character. */ +function findSpecificInlineField(line, start) { + let open = line.charAt(start); + let key = findSeparator(line, start + 1); + if (key === undefined) + return undefined; + // Fail the match if we find any separator characters (not allowed in keys). + for (let sep of Object.keys(INLINE_FIELD_WRAPPERS).concat(Object.values(INLINE_FIELD_WRAPPERS))) { + if (key.key.includes(sep)) + return undefined; + } + let value = findClosing(line, key.valueIndex, open, INLINE_FIELD_WRAPPERS[open]); + if (value === undefined) + return undefined; + return { + key: key.key, + value: value.value, + start: start, + startValue: key.valueIndex, + end: value.endIndex, + wrapping: open, + }; +} +/** Parse a textual inline field value into something we can work with. */ +function parseInlineValue(value) { + // The stripped literal field parser understands all of the non-array/non-object fields and can parse them for us. + // Inline field objects are not currently supported; inline array objects have to be handled by the parser + // separately. + let inline = EXPRESSION.inlineField.parse(value); + if (inline.status) + return inline.value; + else + return value; +} +/** Extracts inline fields of the form '[key:: value]' from a line of text. This is done in a relatively + * "robust" way to avoid failing due to bad nesting or other interfering Markdown symbols: + * + * - Look for any wrappers ('[' and '(') in the line, trying to parse whatever comes after it as an inline key::. + * - If successful, scan until you find a matching end bracket, and parse whatever remains as an inline value. + */ +function extractInlineFields(line, includeTaskFields = false) { + let fields = []; + for (let wrapper of Object.keys(INLINE_FIELD_WRAPPERS)) { + let foundIndex = line.indexOf(wrapper); + while (foundIndex >= 0) { + let parsedField = findSpecificInlineField(line, foundIndex); + if (!parsedField) { + foundIndex = line.indexOf(wrapper, foundIndex + 1); + continue; + } + fields.push(parsedField); + foundIndex = line.indexOf(wrapper, parsedField.end); + } + } + if (includeTaskFields) + fields = fields.concat(extractSpecialTaskFields(line)); + fields.sort((a, b) => a.start - b.start); + return fields; +} +/** Validates that a raw field name has a valid form. */ +const FULL_LINE_KEY_PART = parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regexp(new RegExp(emojiRegex(), "u")), parsimmon_umd_min.exports.regexp(/[0-9\p{Letter}\w\s_/-]+/u)) + .many() + .map(parts => parts.join("")); +parsimmon_umd_min.exports.regexp(/[^0-9\w\p{Letter}]*/u) + .then(FULL_LINE_KEY_PART) + .skip(parsimmon_umd_min.exports.regexp(/[_\*~`]*/u)); +const CREATED_DATE_REGEX = /\u{2795}\s*(\d{4}-\d{2}-\d{2})/u; +const DUE_DATE_REGEX = /[\u{1F4C5}\u{1F4C6}\u{1F5D3}\u{FE0F}]{1,}\s*(\d{4}-\d{2}-\d{2})/u; +const DONE_DATE_REGEX = /\u{2705}\s*(\d{4}-\d{2}-\d{2})/u; +/** Parse special completed/due/done task fields which are marked via emoji. */ +function extractSpecialTaskFields(line) { + let results = []; + let createdMatch = CREATED_DATE_REGEX.exec(line); + if (createdMatch) + results.push({ + key: "created", + value: createdMatch[1], + start: createdMatch.index, + startValue: createdMatch.index + 1, + end: createdMatch.index + createdMatch[0].length, + wrapping: "emoji-shorthand", + }); + let dueMatch = DUE_DATE_REGEX.exec(line); + if (dueMatch) + results.push({ + key: "due", + value: dueMatch[1], + start: dueMatch.index, + startValue: dueMatch.index + 1, + end: dueMatch.index + dueMatch[0].length, + wrapping: "emoji-shorthand", + }); + let completedMatch = DONE_DATE_REGEX.exec(line); + if (completedMatch) + results.push({ + key: "completion", + value: completedMatch[1], + start: completedMatch.index, + startValue: completedMatch.index + 1, + end: completedMatch.index + completedMatch[0].length, + wrapping: "emoji-shorthand", + }); + return results; +} +/** Sets or replaces the value of an inline field; if the value is 'undefined', deletes the key. */ +function setInlineField(source, key, value) { + let existing = extractInlineFields(source); + let existingKeys = existing.filter(f => f.key == key); + // Don't do anything if there are duplicate keys OR the key already doesn't exist. + if (existingKeys.length > 2 || (existingKeys.length == 0 && !value)) + return source; + let existingKey = existingKeys[0]; + let annotation = value ? `[${key}:: ${value}]` : ""; + if (existingKey) { + let prefix = source.substring(0, existingKey.start); + let suffix = source.substring(existingKey.end); + if (annotation) + return `${prefix}${annotation}${suffix}`; + else + return `${prefix}${suffix.trimStart()}`; + } + else if (annotation) { + return `${source.trimEnd()} ${annotation}`; + } + return source; +} + +/** All extracted markdown file metadata obtained from a file. */ +class PageMetadata { + constructor(path, init) { + this.path = path; + this.fields = new Map(); + this.frontmatter = {}; + this.tags = new Set(); + this.aliases = new Set(); + this.links = []; + Object.assign(this, init); + this.lists = (this.lists || []).map(l => new ListItem$1(l)); + } + /** Canonicalize raw links and other data in partial data with normalizers, returning a completed object. */ + static canonicalize(data, linkNormalizer) { + // Mutate the data for now, which is probably a bad idea but... all well. + if (data.frontmatter) { + data.frontmatter = Values.mapLeaves(data.frontmatter, t => Values.isLink(t) ? linkNormalizer(t) : t); + } + if (data.fields) { + for (let [key, value] of data.fields.entries()) { + data.fields.set(key, Values.mapLeaves(value, t => (Values.isLink(t) ? linkNormalizer(t) : t))); + } + } + if (data.lists) { + for (let item of data.lists) { + for (let [key, value] of item.fields.entries()) { + item.fields.set(key, value.map(x => Values.mapLeaves(x, t => (Values.isLink(t) ? linkNormalizer(t) : t)))); + } + } + } + if (data.links) { + data.links = data.links.map(l => linkNormalizer(l)); + } + // This is pretty ugly, but it's not possible to normalize on the worker thread that does parsing. + // The best way to improve this is to instead just canonicalize the entire data object; I can try to + // optimize `Values.mapLeaves` to only mutate if it actually changes things. + return new PageMetadata(data.path, data); + } + /** The name (based on path) of this file. */ + name() { + return getFileTitle(this.path); + } + /** The containing folder (based on path) of this file. */ + folder() { + return getParentFolder(this.path); + } + /** The extension of this file (likely 'md'). */ + extension() { + return getExtension(this.path); + } + /** Return a set of tags AND all of their parent tags (so #hello/yes would become #hello, #hello/yes). */ + fullTags() { + let result = new Set(); + for (let tag of this.tags) { + for (let subtag of extractSubtags(tag)) + result.add(subtag); + } + return result; + } + /** Convert all links in this file to file links. */ + fileLinks() { + let distinctPaths = new Set(this.links.map(l => l.path)); + return Array.from(distinctPaths).map(l => Link.file(l)); + } + /** Map this metadata to a full object; uses the index for additional data lookups. */ + serialize(index, cache) { + // Convert list items via the canonicalization cache. + let realCache = cache !== null && cache !== void 0 ? cache : new ListSerializationCache(this.lists); + let result = { + file: { + path: this.path, + folder: this.folder(), + name: this.name(), + link: Link.file(this.path), + outlinks: this.fileLinks(), + inlinks: Array.from(index.links.getInverse(this.path)).map(l => Link.file(l)), + etags: Array.from(this.tags), + tags: Array.from(this.fullTags()), + aliases: Array.from(this.aliases), + lists: this.lists.map(l => realCache.get(l.line)), + tasks: this.lists.filter(l => !!l.task).map(l => realCache.get(l.line)), + ctime: this.ctime, + cday: stripTime(this.ctime), + mtime: this.mtime, + mday: stripTime(this.mtime), + size: this.size, + starred: index.starred.starred(this.path), + frontmatter: Values.deepCopy(this.frontmatter), + ext: this.extension(), + }, + }; + // Add the current day if present. + if (this.day) + result.file.day = this.day; + // Then append the computed fields. + for (let [key, value] of this.fields.entries()) { + if (key in result) + continue; // Don't allow fields to override existing keys. + result[key] = value; + } + return result; + } +} +/** A list item inside of a list. */ +class ListItem$1 { + constructor(init) { + Object.assign(this, init); + this.fields = this.fields || {}; + } + id() { + return `${this.file().path}-${this.line}`; + } + file() { + return this.link.toFile(); + } + markdown() { + if (this.task) + return `${this.symbol} [${this.task.completed ? "x" : " "}] ${this.text}`; + else + return `${this.symbol} ${this.text}`; + } + created() { + var _a, _b, _c; + return (_c = ((_b = (_a = this.fields.get("created")) !== null && _a !== void 0 ? _a : this.fields.get("ctime")) !== null && _b !== void 0 ? _b : this.fields.get("cday"))) === null || _c === void 0 ? void 0 : _c[0]; + } + due() { + var _a, _b, _c; + return (_c = ((_b = (_a = this.fields.get("due")) !== null && _a !== void 0 ? _a : this.fields.get("duetime")) !== null && _b !== void 0 ? _b : this.fields.get("dueday"))) === null || _c === void 0 ? void 0 : _c[0]; + } + completed() { + var _a, _b, _c, _d; + return (_d = ((_c = (_b = (_a = this.fields.get("completed")) !== null && _a !== void 0 ? _a : this.fields.get("completion")) !== null && _b !== void 0 ? _b : this.fields.get("comptime")) !== null && _c !== void 0 ? _c : this.fields.get("compday"))) === null || _d === void 0 ? void 0 : _d[0]; + } + /** Create an API-friendly copy of this list item. De-duplication is done via the provided cache. */ + serialize(cache) { + // Map children to their serialized/de-duplicated equivalents right away. + let children = this.children.map(l => cache.get(l)).filter((l) => l !== undefined); + let result = { + symbol: this.symbol, + link: this.link, + section: this.section, + text: this.text, + tags: Array.from(this.tags), + line: this.line, + lineCount: this.lineCount, + list: this.list, + path: this.link.path, + children: children, + task: !!this.task, + annotated: this.fields.size > 0, + position: Values.deepCopy(this.position), + subtasks: children, + real: !!this.task, + header: this.section, // @deprecated, use 'item.section' instead. + }; + if (this.parent) + result.parent = this.parent; + if (this.blockId) + result.blockId = this.blockId; + addFields(this.fields, result); + if (this.task) { + result.status = this.task.status; + result.checked = this.task.checked; + result.completed = this.task.completed; + result.fullyCompleted = this.task.fullyCompleted; + let created = this.created(), due = this.due(), completed = this.completed(); + if (created) + result.created = Values.deepCopy(created); + if (due) + result.due = Values.deepCopy(due); + if (completed) + result.completion = Values.deepCopy(completed); + } + return result; + } +} +////////////////////////////////////////// +// Conversion / Serialization Utilities // +////////////////////////////////////////// +/** De-duplicates list items across section metadata and page metadata. */ +class ListSerializationCache { + constructor(listItems) { + this.listItems = {}; + this.cache = {}; + this.seen = new Set(); + for (let item of listItems) + this.listItems[item.line] = item; + } + get(lineno) { + if (lineno in this.cache) + return this.cache[lineno]; + else if (this.seen.has(lineno)) { + console.log(`Dataview: Encountered a circular list (line number ${lineno}; children ${this.listItems[lineno].children.join(", ")})`); + return undefined; + } + this.seen.add(lineno); + let result = this.listItems[lineno].serialize(this); + this.cache[lineno] = result; + return result; + } +} +function addFields(fields, target) { + for (let [key, values] of fields.entries()) { + if (key in target) + continue; + target[key] = values.length == 1 ? values[0] : values; + } + return target; +} + +/** Importer for markdown documents. */ +// TODO: Consider using an actual parser in leiu of a more expensive regex. +const LIST_ITEM_REGEX = /^[\s>]*(\d+\.|\d+\)|\*|-|\+)\s*(\[.{0,1}\])?\s*(.*)$/mu; +/** Recursively convert frontmatter into fields. We have to dance around YAML structure. */ +function parseFrontmatter(value) { + if (value == null) { + return null; + } + else if (typeof value === "object") { + if (Array.isArray(value)) { + let result = []; + for (let child of value) { + result.push(parseFrontmatter(child)); + } + return result; + } + else { + let object = value; + let result = {}; + for (let key in object) { + result[key] = parseFrontmatter(object[key]); + } + return result; + } + } + else if (typeof value === "number") { + return value; + } + else if (typeof value === "boolean") { + return value; + } + else if (typeof value === "string") { + let dateParse = EXPRESSION.date.parse(value); + if (dateParse.status) + return dateParse.value; + let durationParse = EXPRESSION.duration.parse(value); + if (durationParse.status) + return durationParse.value; + let linkParse = EXPRESSION.embedLink.parse(value); + if (linkParse.status) + return linkParse.value; + return value; + } + // Backup if we don't understand the type. + return null; +} + +/** Parse a CSV file into a collection of data rows. */ +function parseCsv(content) { + let parsed = papaparse_min.exports.parse(content, { + header: true, + skipEmptyLines: true, + comments: "#", + dynamicTyping: true, + }); + let rows = []; + for (let parsedRow of parsed.data) { + let fields = parseFrontmatter(parsedRow); + let result = {}; + for (let [key, value] of Object.entries(fields)) { + result[key] = value; + result[canonicalizeVarName(key)] = value; + } + rows.push(result); + } + return rows; +} + +/** Simplifies passing dataview values across the JS web worker barrier. */ +var Transferable; +(function (Transferable) { + /** Convert a literal value to a serializer-friendly transferable value. */ + function transferable(value) { + // Handle simple universal types first. + if (value instanceof Map) { + let copied = new Map(); + for (let [key, val] of value.entries()) + copied.set(transferable(key), transferable(val)); + return copied; + } + else if (value instanceof Set) { + let copied = new Set(); + for (let val of value) + copied.add(transferable(val)); + return copied; + } + let wrapped = Values.wrapValue(value); + if (wrapped === undefined) + throw Error("Unrecognized transferable value: " + value); + switch (wrapped.type) { + case "null": + case "number": + case "string": + case "boolean": + return wrapped.value; + case "date": + return { + "___transfer-type": "date", + value: transferable(wrapped.value.toObject()), + options: { zone: wrapped.value.zoneName }, + }; + case "duration": + return { "___transfer-type": "duration", value: transferable(wrapped.value.toObject()) }; + case "array": + return wrapped.value.map(v => transferable(v)); + case "link": + return { "___transfer-type": "link", value: transferable(wrapped.value.toObject()) }; + case "object": + let result = {}; + for (let [key, value] of Object.entries(wrapped.value)) + result[key] = transferable(value); + return result; + } + } + Transferable.transferable = transferable; + /** Convert a transferable value back to a literal value we can work with. */ + function value(transferable) { + if (transferable === null) { + return null; + } + else if (transferable === undefined) { + return undefined; + } + else if (transferable instanceof Map) { + let real = new Map(); + for (let [key, val] of transferable.entries()) + real.set(value(key), value(val)); + return real; + } + else if (transferable instanceof Set) { + let real = new Set(); + for (let val of transferable) + real.add(value(val)); + return real; + } + else if (Array.isArray(transferable)) { + return transferable.map(v => value(v)); + } + else if (typeof transferable === "object") { + if ("___transfer-type" in transferable) { + switch (transferable["___transfer-type"]) { + case "date": + let rawDate = DateTime_1.fromObject(value(transferable.value)); + let dateOpts = value(transferable.options); + if (dateOpts.zone) + rawDate.setZone(dateOpts.zone); + return rawDate; + case "duration": + return Duration_1.fromObject(value(transferable.value)); + case "link": + return Link.fromObject(value(transferable.value)); + default: + throw Error(`Unrecognized transfer type '${transferable["___transfer-type"]}'`); + } + } + let result = {}; + for (let [key, val] of Object.entries(transferable)) + result[key] = value(val); + return result; + } + return transferable; + } + Transferable.value = value; +})(Transferable || (Transferable = {})); + +var localforage$1 = {exports: {}}; + +/*! + localForage -- Offline Storage, Improved + Version 1.10.0 + https://localforage.github.io/localForage + (c) 2013-2017 Mozilla, Apache License 2.0 +*/ + +(function (module, exports) { +(function(f){{module.exports=f();}})(function(){return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof commonjsRequire=="function"&&commonjsRequire;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw (f.code="MODULE_NOT_FOUND", f)}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r);}return n[o].exports}var i=typeof commonjsRequire=="function"&&commonjsRequire;for(var o=0;o element; its readystatechange event will be fired asynchronously once it is inserted + // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called. + var scriptEl = global.document.createElement('script'); + scriptEl.onreadystatechange = function () { + nextTick(); + + scriptEl.onreadystatechange = null; + scriptEl.parentNode.removeChild(scriptEl); + scriptEl = null; + }; + global.document.documentElement.appendChild(scriptEl); + }; + } else { + scheduleDrain = function () { + setTimeout(nextTick, 0); + }; + } +} + +var draining; +var queue = []; +//named nextTick for less confusing stack traces +function nextTick() { + draining = true; + var i, oldQueue; + var len = queue.length; + while (len) { + oldQueue = queue; + queue = []; + i = -1; + while (++i < len) { + oldQueue[i](); + } + len = queue.length; + } + draining = false; +} + +module.exports = immediate; +function immediate(task) { + if (queue.push(task) === 1 && !draining) { + scheduleDrain(); + } +} + +}).call(this,typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}); +},{}],2:[function(_dereq_,module,exports){ +var immediate = _dereq_(1); + +/* istanbul ignore next */ +function INTERNAL() {} + +var handlers = {}; + +var REJECTED = ['REJECTED']; +var FULFILLED = ['FULFILLED']; +var PENDING = ['PENDING']; + +module.exports = Promise; + +function Promise(resolver) { + if (typeof resolver !== 'function') { + throw new TypeError('resolver must be a function'); + } + this.state = PENDING; + this.queue = []; + this.outcome = void 0; + if (resolver !== INTERNAL) { + safelyResolveThenable(this, resolver); + } +} + +Promise.prototype["catch"] = function (onRejected) { + return this.then(null, onRejected); +}; +Promise.prototype.then = function (onFulfilled, onRejected) { + if (typeof onFulfilled !== 'function' && this.state === FULFILLED || + typeof onRejected !== 'function' && this.state === REJECTED) { + return this; + } + var promise = new this.constructor(INTERNAL); + if (this.state !== PENDING) { + var resolver = this.state === FULFILLED ? onFulfilled : onRejected; + unwrap(promise, resolver, this.outcome); + } else { + this.queue.push(new QueueItem(promise, onFulfilled, onRejected)); + } + + return promise; +}; +function QueueItem(promise, onFulfilled, onRejected) { + this.promise = promise; + if (typeof onFulfilled === 'function') { + this.onFulfilled = onFulfilled; + this.callFulfilled = this.otherCallFulfilled; + } + if (typeof onRejected === 'function') { + this.onRejected = onRejected; + this.callRejected = this.otherCallRejected; + } +} +QueueItem.prototype.callFulfilled = function (value) { + handlers.resolve(this.promise, value); +}; +QueueItem.prototype.otherCallFulfilled = function (value) { + unwrap(this.promise, this.onFulfilled, value); +}; +QueueItem.prototype.callRejected = function (value) { + handlers.reject(this.promise, value); +}; +QueueItem.prototype.otherCallRejected = function (value) { + unwrap(this.promise, this.onRejected, value); +}; + +function unwrap(promise, func, value) { + immediate(function () { + var returnValue; + try { + returnValue = func(value); + } catch (e) { + return handlers.reject(promise, e); + } + if (returnValue === promise) { + handlers.reject(promise, new TypeError('Cannot resolve promise with itself')); + } else { + handlers.resolve(promise, returnValue); + } + }); +} + +handlers.resolve = function (self, value) { + var result = tryCatch(getThen, value); + if (result.status === 'error') { + return handlers.reject(self, result.value); + } + var thenable = result.value; + + if (thenable) { + safelyResolveThenable(self, thenable); + } else { + self.state = FULFILLED; + self.outcome = value; + var i = -1; + var len = self.queue.length; + while (++i < len) { + self.queue[i].callFulfilled(value); + } + } + return self; +}; +handlers.reject = function (self, error) { + self.state = REJECTED; + self.outcome = error; + var i = -1; + var len = self.queue.length; + while (++i < len) { + self.queue[i].callRejected(error); + } + return self; +}; + +function getThen(obj) { + // Make sure we only access the accessor once as required by the spec + var then = obj && obj.then; + if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') { + return function appyThen() { + then.apply(obj, arguments); + }; + } +} + +function safelyResolveThenable(self, thenable) { + // Either fulfill, reject or reject with error + var called = false; + function onError(value) { + if (called) { + return; + } + called = true; + handlers.reject(self, value); + } + + function onSuccess(value) { + if (called) { + return; + } + called = true; + handlers.resolve(self, value); + } + + function tryToUnwrap() { + thenable(onSuccess, onError); + } + + var result = tryCatch(tryToUnwrap); + if (result.status === 'error') { + onError(result.value); + } +} + +function tryCatch(func, value) { + var out = {}; + try { + out.value = func(value); + out.status = 'success'; + } catch (e) { + out.status = 'error'; + out.value = e; + } + return out; +} + +Promise.resolve = resolve; +function resolve(value) { + if (value instanceof this) { + return value; + } + return handlers.resolve(new this(INTERNAL), value); +} + +Promise.reject = reject; +function reject(reason) { + var promise = new this(INTERNAL); + return handlers.reject(promise, reason); +} + +Promise.all = all; +function all(iterable) { + var self = this; + if (Object.prototype.toString.call(iterable) !== '[object Array]') { + return this.reject(new TypeError('must be an array')); + } + + var len = iterable.length; + var called = false; + if (!len) { + return this.resolve([]); + } + + var values = new Array(len); + var resolved = 0; + var i = -1; + var promise = new this(INTERNAL); + + while (++i < len) { + allResolver(iterable[i], i); + } + return promise; + function allResolver(value, i) { + self.resolve(value).then(resolveFromAll, function (error) { + if (!called) { + called = true; + handlers.reject(promise, error); + } + }); + function resolveFromAll(outValue) { + values[i] = outValue; + if (++resolved === len && !called) { + called = true; + handlers.resolve(promise, values); + } + } + } +} + +Promise.race = race; +function race(iterable) { + var self = this; + if (Object.prototype.toString.call(iterable) !== '[object Array]') { + return this.reject(new TypeError('must be an array')); + } + + var len = iterable.length; + var called = false; + if (!len) { + return this.resolve([]); + } + + var i = -1; + var promise = new this(INTERNAL); + + while (++i < len) { + resolver(iterable[i]); + } + return promise; + function resolver(value) { + self.resolve(value).then(function (response) { + if (!called) { + called = true; + handlers.resolve(promise, response); + } + }, function (error) { + if (!called) { + called = true; + handlers.reject(promise, error); + } + }); + } +} + +},{"1":1}],3:[function(_dereq_,module,exports){ +(function (global){ +if (typeof global.Promise !== 'function') { + global.Promise = _dereq_(2); +} + +}).call(this,typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}); +},{"2":2}],4:[function(_dereq_,module,exports){ + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function getIDB() { + /* global indexedDB,webkitIndexedDB,mozIndexedDB,OIndexedDB,msIndexedDB */ + try { + if (typeof indexedDB !== 'undefined') { + return indexedDB; + } + if (typeof webkitIndexedDB !== 'undefined') { + return webkitIndexedDB; + } + if (typeof mozIndexedDB !== 'undefined') { + return mozIndexedDB; + } + if (typeof OIndexedDB !== 'undefined') { + return OIndexedDB; + } + if (typeof msIndexedDB !== 'undefined') { + return msIndexedDB; + } + } catch (e) { + return; + } +} + +var idb = getIDB(); + +function isIndexedDBValid() { + try { + // Initialize IndexedDB; fall back to vendor-prefixed versions + // if needed. + if (!idb || !idb.open) { + return false; + } + // We mimic PouchDB here; + // + // We test for openDatabase because IE Mobile identifies itself + // as Safari. Oh the lulz... + var isSafari = typeof openDatabase !== 'undefined' && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform); + + var hasFetch = typeof fetch === 'function' && fetch.toString().indexOf('[native code') !== -1; + + // Safari <10.1 does not meet our requirements for IDB support + // (see: https://github.com/pouchdb/pouchdb/issues/5572). + // Safari 10.1 shipped with fetch, we can use that to detect it. + // Note: this creates issues with `window.fetch` polyfills and + // overrides; see: + // https://github.com/localForage/localForage/issues/856 + return (!isSafari || hasFetch) && typeof indexedDB !== 'undefined' && + // some outdated implementations of IDB that appear on Samsung + // and HTC Android devices <4.4 are missing IDBKeyRange + // See: https://github.com/mozilla/localForage/issues/128 + // See: https://github.com/mozilla/localForage/issues/272 + typeof IDBKeyRange !== 'undefined'; + } catch (e) { + return false; + } +} + +// Abstracts constructing a Blob object, so it also works in older +// browsers that don't support the native Blob constructor. (i.e. +// old QtWebKit versions, at least). +// Abstracts constructing a Blob object, so it also works in older +// browsers that don't support the native Blob constructor. (i.e. +// old QtWebKit versions, at least). +function createBlob(parts, properties) { + /* global BlobBuilder,MSBlobBuilder,MozBlobBuilder,WebKitBlobBuilder */ + parts = parts || []; + properties = properties || {}; + try { + return new Blob(parts, properties); + } catch (e) { + if (e.name !== 'TypeError') { + throw e; + } + var Builder = typeof BlobBuilder !== 'undefined' ? BlobBuilder : typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : WebKitBlobBuilder; + var builder = new Builder(); + for (var i = 0; i < parts.length; i += 1) { + builder.append(parts[i]); + } + return builder.getBlob(properties.type); + } +} + +// This is CommonJS because lie is an external dependency, so Rollup +// can just ignore it. +if (typeof Promise === 'undefined') { + // In the "nopromises" build this will just throw if you don't have + // a global promise object, but it would throw anyway later. + _dereq_(3); +} +var Promise$1 = Promise; + +function executeCallback(promise, callback) { + if (callback) { + promise.then(function (result) { + callback(null, result); + }, function (error) { + callback(error); + }); + } +} + +function executeTwoCallbacks(promise, callback, errorCallback) { + if (typeof callback === 'function') { + promise.then(callback); + } + + if (typeof errorCallback === 'function') { + promise["catch"](errorCallback); + } +} + +function normalizeKey(key) { + // Cast the key to a string, as that's all we can set as a key. + if (typeof key !== 'string') { + console.warn(key + ' used as a key, but it is not a string.'); + key = String(key); + } + + return key; +} + +function getCallback() { + if (arguments.length && typeof arguments[arguments.length - 1] === 'function') { + return arguments[arguments.length - 1]; + } +} + +// Some code originally from async_storage.js in +// [Gaia](https://github.com/mozilla-b2g/gaia). + +var DETECT_BLOB_SUPPORT_STORE = 'local-forage-detect-blob-support'; +var supportsBlobs = void 0; +var dbContexts = {}; +var toString = Object.prototype.toString; + +// Transaction Modes +var READ_ONLY = 'readonly'; +var READ_WRITE = 'readwrite'; + +// Transform a binary string to an array buffer, because otherwise +// weird stuff happens when you try to work with the binary string directly. +// It is known. +// From http://stackoverflow.com/questions/14967647/ (continues on next line) +// encode-decode-image-with-base64-breaks-image (2013-04-21) +function _binStringToArrayBuffer(bin) { + var length = bin.length; + var buf = new ArrayBuffer(length); + var arr = new Uint8Array(buf); + for (var i = 0; i < length; i++) { + arr[i] = bin.charCodeAt(i); + } + return buf; +} + +// +// Blobs are not supported in all versions of IndexedDB, notably +// Chrome <37 and Android <5. In those versions, storing a blob will throw. +// +// Various other blob bugs exist in Chrome v37-42 (inclusive). +// Detecting them is expensive and confusing to users, and Chrome 37-42 +// is at very low usage worldwide, so we do a hacky userAgent check instead. +// +// content-type bug: https://code.google.com/p/chromium/issues/detail?id=408120 +// 404 bug: https://code.google.com/p/chromium/issues/detail?id=447916 +// FileReader bug: https://code.google.com/p/chromium/issues/detail?id=447836 +// +// Code borrowed from PouchDB. See: +// https://github.com/pouchdb/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/src/blobSupport.js +// +function _checkBlobSupportWithoutCaching(idb) { + return new Promise$1(function (resolve) { + var txn = idb.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE); + var blob = createBlob(['']); + txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, 'key'); + + txn.onabort = function (e) { + // If the transaction aborts now its due to not being able to + // write to the database, likely due to the disk being full + e.preventDefault(); + e.stopPropagation(); + resolve(false); + }; + + txn.oncomplete = function () { + var matchedChrome = navigator.userAgent.match(/Chrome\/(\d+)/); + var matchedEdge = navigator.userAgent.match(/Edge\//); + // MS Edge pretends to be Chrome 42: + // https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29.aspx + resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43); + }; + })["catch"](function () { + return false; // error, so assume unsupported + }); +} + +function _checkBlobSupport(idb) { + if (typeof supportsBlobs === 'boolean') { + return Promise$1.resolve(supportsBlobs); + } + return _checkBlobSupportWithoutCaching(idb).then(function (value) { + supportsBlobs = value; + return supportsBlobs; + }); +} + +function _deferReadiness(dbInfo) { + var dbContext = dbContexts[dbInfo.name]; + + // Create a deferred object representing the current database operation. + var deferredOperation = {}; + + deferredOperation.promise = new Promise$1(function (resolve, reject) { + deferredOperation.resolve = resolve; + deferredOperation.reject = reject; + }); + + // Enqueue the deferred operation. + dbContext.deferredOperations.push(deferredOperation); + + // Chain its promise to the database readiness. + if (!dbContext.dbReady) { + dbContext.dbReady = deferredOperation.promise; + } else { + dbContext.dbReady = dbContext.dbReady.then(function () { + return deferredOperation.promise; + }); + } +} + +function _advanceReadiness(dbInfo) { + var dbContext = dbContexts[dbInfo.name]; + + // Dequeue a deferred operation. + var deferredOperation = dbContext.deferredOperations.pop(); + + // Resolve its promise (which is part of the database readiness + // chain of promises). + if (deferredOperation) { + deferredOperation.resolve(); + return deferredOperation.promise; + } +} + +function _rejectReadiness(dbInfo, err) { + var dbContext = dbContexts[dbInfo.name]; + + // Dequeue a deferred operation. + var deferredOperation = dbContext.deferredOperations.pop(); + + // Reject its promise (which is part of the database readiness + // chain of promises). + if (deferredOperation) { + deferredOperation.reject(err); + return deferredOperation.promise; + } +} + +function _getConnection(dbInfo, upgradeNeeded) { + return new Promise$1(function (resolve, reject) { + dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext(); + + if (dbInfo.db) { + if (upgradeNeeded) { + _deferReadiness(dbInfo); + dbInfo.db.close(); + } else { + return resolve(dbInfo.db); + } + } + + var dbArgs = [dbInfo.name]; + + if (upgradeNeeded) { + dbArgs.push(dbInfo.version); + } + + var openreq = idb.open.apply(idb, dbArgs); + + if (upgradeNeeded) { + openreq.onupgradeneeded = function (e) { + var db = openreq.result; + try { + db.createObjectStore(dbInfo.storeName); + if (e.oldVersion <= 1) { + // Added when support for blob shims was added + db.createObjectStore(DETECT_BLOB_SUPPORT_STORE); + } + } catch (ex) { + if (ex.name === 'ConstraintError') { + console.warn('The database "' + dbInfo.name + '"' + ' has been upgraded from version ' + e.oldVersion + ' to version ' + e.newVersion + ', but the storage "' + dbInfo.storeName + '" already exists.'); + } else { + throw ex; + } + } + }; + } + + openreq.onerror = function (e) { + e.preventDefault(); + reject(openreq.error); + }; + + openreq.onsuccess = function () { + var db = openreq.result; + db.onversionchange = function (e) { + // Triggered when the database is modified (e.g. adding an objectStore) or + // deleted (even when initiated by other sessions in different tabs). + // Closing the connection here prevents those operations from being blocked. + // If the database is accessed again later by this instance, the connection + // will be reopened or the database recreated as needed. + e.target.close(); + }; + resolve(db); + _advanceReadiness(dbInfo); + }; + }); +} + +function _getOriginalConnection(dbInfo) { + return _getConnection(dbInfo, false); +} + +function _getUpgradedConnection(dbInfo) { + return _getConnection(dbInfo, true); +} + +function _isUpgradeNeeded(dbInfo, defaultVersion) { + if (!dbInfo.db) { + return true; + } + + var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName); + var isDowngrade = dbInfo.version < dbInfo.db.version; + var isUpgrade = dbInfo.version > dbInfo.db.version; + + if (isDowngrade) { + // If the version is not the default one + // then warn for impossible downgrade. + if (dbInfo.version !== defaultVersion) { + console.warn('The database "' + dbInfo.name + '"' + " can't be downgraded from version " + dbInfo.db.version + ' to version ' + dbInfo.version + '.'); + } + // Align the versions to prevent errors. + dbInfo.version = dbInfo.db.version; + } + + if (isUpgrade || isNewStore) { + // If the store is new then increment the version (if needed). + // This will trigger an "upgradeneeded" event which is required + // for creating a store. + if (isNewStore) { + var incVersion = dbInfo.db.version + 1; + if (incVersion > dbInfo.version) { + dbInfo.version = incVersion; + } + } + + return true; + } + + return false; +} + +// encode a blob for indexeddb engines that don't support blobs +function _encodeBlob(blob) { + return new Promise$1(function (resolve, reject) { + var reader = new FileReader(); + reader.onerror = reject; + reader.onloadend = function (e) { + var base64 = btoa(e.target.result || ''); + resolve({ + __local_forage_encoded_blob: true, + data: base64, + type: blob.type + }); + }; + reader.readAsBinaryString(blob); + }); +} + +// decode an encoded blob +function _decodeBlob(encodedBlob) { + var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data)); + return createBlob([arrayBuff], { type: encodedBlob.type }); +} + +// is this one of our fancy encoded blobs? +function _isEncodedBlob(value) { + return value && value.__local_forage_encoded_blob; +} + +// Specialize the default `ready()` function by making it dependent +// on the current database operations. Thus, the driver will be actually +// ready when it's been initialized (default) *and* there are no pending +// operations on the database (initiated by some other instances). +function _fullyReady(callback) { + var self = this; + + var promise = self._initReady().then(function () { + var dbContext = dbContexts[self._dbInfo.name]; + + if (dbContext && dbContext.dbReady) { + return dbContext.dbReady; + } + }); + + executeTwoCallbacks(promise, callback, callback); + return promise; +} + +// Try to establish a new db connection to replace the +// current one which is broken (i.e. experiencing +// InvalidStateError while creating a transaction). +function _tryReconnect(dbInfo) { + _deferReadiness(dbInfo); + + var dbContext = dbContexts[dbInfo.name]; + var forages = dbContext.forages; + + for (var i = 0; i < forages.length; i++) { + var forage = forages[i]; + if (forage._dbInfo.db) { + forage._dbInfo.db.close(); + forage._dbInfo.db = null; + } + } + dbInfo.db = null; + + return _getOriginalConnection(dbInfo).then(function (db) { + dbInfo.db = db; + if (_isUpgradeNeeded(dbInfo)) { + // Reopen the database for upgrading. + return _getUpgradedConnection(dbInfo); + } + return db; + }).then(function (db) { + // store the latest db reference + // in case the db was upgraded + dbInfo.db = dbContext.db = db; + for (var i = 0; i < forages.length; i++) { + forages[i]._dbInfo.db = db; + } + })["catch"](function (err) { + _rejectReadiness(dbInfo, err); + throw err; + }); +} + +// FF doesn't like Promises (micro-tasks) and IDDB store operations, +// so we have to do it with callbacks +function createTransaction(dbInfo, mode, callback, retries) { + if (retries === undefined) { + retries = 1; + } + + try { + var tx = dbInfo.db.transaction(dbInfo.storeName, mode); + callback(null, tx); + } catch (err) { + if (retries > 0 && (!dbInfo.db || err.name === 'InvalidStateError' || err.name === 'NotFoundError')) { + return Promise$1.resolve().then(function () { + if (!dbInfo.db || err.name === 'NotFoundError' && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) { + // increase the db version, to create the new ObjectStore + if (dbInfo.db) { + dbInfo.version = dbInfo.db.version + 1; + } + // Reopen the database for upgrading. + return _getUpgradedConnection(dbInfo); + } + }).then(function () { + return _tryReconnect(dbInfo).then(function () { + createTransaction(dbInfo, mode, callback, retries - 1); + }); + })["catch"](callback); + } + + callback(err); + } +} + +function createDbContext() { + return { + // Running localForages sharing a database. + forages: [], + // Shared database. + db: null, + // Database readiness (promise). + dbReady: null, + // Deferred operations on the database. + deferredOperations: [] + }; +} + +// Open the IndexedDB database (automatically creates one if one didn't +// previously exist), using any options set in the config. +function _initStorage(options) { + var self = this; + var dbInfo = { + db: null + }; + + if (options) { + for (var i in options) { + dbInfo[i] = options[i]; + } + } + + // Get the current context of the database; + var dbContext = dbContexts[dbInfo.name]; + + // ...or create a new context. + if (!dbContext) { + dbContext = createDbContext(); + // Register the new context in the global container. + dbContexts[dbInfo.name] = dbContext; + } + + // Register itself as a running localForage in the current context. + dbContext.forages.push(self); + + // Replace the default `ready()` function with the specialized one. + if (!self._initReady) { + self._initReady = self.ready; + self.ready = _fullyReady; + } + + // Create an array of initialization states of the related localForages. + var initPromises = []; + + function ignoreErrors() { + // Don't handle errors here, + // just makes sure related localForages aren't pending. + return Promise$1.resolve(); + } + + for (var j = 0; j < dbContext.forages.length; j++) { + var forage = dbContext.forages[j]; + if (forage !== self) { + // Don't wait for itself... + initPromises.push(forage._initReady()["catch"](ignoreErrors)); + } + } + + // Take a snapshot of the related localForages. + var forages = dbContext.forages.slice(0); + + // Initialize the connection process only when + // all the related localForages aren't pending. + return Promise$1.all(initPromises).then(function () { + dbInfo.db = dbContext.db; + // Get the connection or open a new one without upgrade. + return _getOriginalConnection(dbInfo); + }).then(function (db) { + dbInfo.db = db; + if (_isUpgradeNeeded(dbInfo, self._defaultConfig.version)) { + // Reopen the database for upgrading. + return _getUpgradedConnection(dbInfo); + } + return db; + }).then(function (db) { + dbInfo.db = dbContext.db = db; + self._dbInfo = dbInfo; + // Share the final connection amongst related localForages. + for (var k = 0; k < forages.length; k++) { + var forage = forages[k]; + if (forage !== self) { + // Self is already up-to-date. + forage._dbInfo.db = dbInfo.db; + forage._dbInfo.version = dbInfo.version; + } + } + }); +} + +function getItem(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.get(key); + + req.onsuccess = function () { + var value = req.result; + if (value === undefined) { + value = null; + } + if (_isEncodedBlob(value)) { + value = _decodeBlob(value); + } + resolve(value); + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +// Iterate over all items stored in database. +function iterate(iterator, callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.openCursor(); + var iterationNumber = 1; + + req.onsuccess = function () { + var cursor = req.result; + + if (cursor) { + var value = cursor.value; + if (_isEncodedBlob(value)) { + value = _decodeBlob(value); + } + var result = iterator(value, cursor.key, iterationNumber++); + + // when the iterator callback returns any + // (non-`undefined`) value, then we stop + // the iteration immediately + if (result !== void 0) { + resolve(result); + } else { + cursor["continue"](); + } + } else { + resolve(); + } + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + + return promise; +} + +function setItem(key, value, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + var dbInfo; + self.ready().then(function () { + dbInfo = self._dbInfo; + if (toString.call(value) === '[object Blob]') { + return _checkBlobSupport(dbInfo.db).then(function (blobSupport) { + if (blobSupport) { + return value; + } + return _encodeBlob(value); + }); + } + return value; + }).then(function (value) { + createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + + // The reason we don't _save_ null is because IE 10 does + // not support saving the `null` type in IndexedDB. How + // ironic, given the bug below! + // See: https://github.com/mozilla/localForage/issues/161 + if (value === null) { + value = undefined; + } + + var req = store.put(value, key); + + transaction.oncomplete = function () { + // Cast to undefined so the value passed to + // callback/promise is the same as what one would get out + // of `getItem()` later. This leads to some weirdness + // (setItem('foo', undefined) will return `null`), but + // it's not my fault localStorage is our baseline and that + // it's weird. + if (value === undefined) { + value = null; + } + + resolve(value); + }; + transaction.onabort = transaction.onerror = function () { + var err = req.error ? req.error : req.transaction.error; + reject(err); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +function removeItem(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + // We use a Grunt task to make this safe for IE and some + // versions of Android (including those used by Cordova). + // Normally IE won't like `.delete()` and will insist on + // using `['delete']()`, but we have a build step that + // fixes this for us now. + var req = store["delete"](key); + transaction.oncomplete = function () { + resolve(); + }; + + transaction.onerror = function () { + reject(req.error); + }; + + // The request will be also be aborted if we've exceeded our storage + // space. + transaction.onabort = function () { + var err = req.error ? req.error : req.transaction.error; + reject(err); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +function clear(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_WRITE, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.clear(); + + transaction.oncomplete = function () { + resolve(); + }; + + transaction.onabort = transaction.onerror = function () { + var err = req.error ? req.error : req.transaction.error; + reject(err); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +function length(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.count(); + + req.onsuccess = function () { + resolve(req.result); + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +function key(n, callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + if (n < 0) { + resolve(null); + + return; + } + + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var advanced = false; + var req = store.openKeyCursor(); + + req.onsuccess = function () { + var cursor = req.result; + if (!cursor) { + // this means there weren't enough keys + resolve(null); + + return; + } + + if (n === 0) { + // We have the first key, return it if that's what they + // wanted. + resolve(cursor.key); + } else { + if (!advanced) { + // Otherwise, ask the cursor to skip ahead n + // records. + advanced = true; + cursor.advance(n); + } else { + // When we get here, we've got the nth key. + resolve(cursor.key); + } + } + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +function keys(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + createTransaction(self._dbInfo, READ_ONLY, function (err, transaction) { + if (err) { + return reject(err); + } + + try { + var store = transaction.objectStore(self._dbInfo.storeName); + var req = store.openKeyCursor(); + var keys = []; + + req.onsuccess = function () { + var cursor = req.result; + + if (!cursor) { + resolve(keys); + return; + } + + keys.push(cursor.key); + cursor["continue"](); + }; + + req.onerror = function () { + reject(req.error); + }; + } catch (e) { + reject(e); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +function dropInstance(options, callback) { + callback = getCallback.apply(this, arguments); + + var currentConfig = this.config(); + options = typeof options !== 'function' && options || {}; + if (!options.name) { + options.name = options.name || currentConfig.name; + options.storeName = options.storeName || currentConfig.storeName; + } + + var self = this; + var promise; + if (!options.name) { + promise = Promise$1.reject('Invalid arguments'); + } else { + var isCurrentDb = options.name === currentConfig.name && self._dbInfo.db; + + var dbPromise = isCurrentDb ? Promise$1.resolve(self._dbInfo.db) : _getOriginalConnection(options).then(function (db) { + var dbContext = dbContexts[options.name]; + var forages = dbContext.forages; + dbContext.db = db; + for (var i = 0; i < forages.length; i++) { + forages[i]._dbInfo.db = db; + } + return db; + }); + + if (!options.storeName) { + promise = dbPromise.then(function (db) { + _deferReadiness(options); + + var dbContext = dbContexts[options.name]; + var forages = dbContext.forages; + + db.close(); + for (var i = 0; i < forages.length; i++) { + var forage = forages[i]; + forage._dbInfo.db = null; + } + + var dropDBPromise = new Promise$1(function (resolve, reject) { + var req = idb.deleteDatabase(options.name); + + req.onerror = function () { + var db = req.result; + if (db) { + db.close(); + } + reject(req.error); + }; + + req.onblocked = function () { + // Closing all open connections in onversionchange handler should prevent this situation, but if + // we do get here, it just means the request remains pending - eventually it will succeed or error + console.warn('dropInstance blocked for database "' + options.name + '" until all open connections are closed'); + }; + + req.onsuccess = function () { + var db = req.result; + if (db) { + db.close(); + } + resolve(db); + }; + }); + + return dropDBPromise.then(function (db) { + dbContext.db = db; + for (var i = 0; i < forages.length; i++) { + var _forage = forages[i]; + _advanceReadiness(_forage._dbInfo); + } + })["catch"](function (err) { + (_rejectReadiness(options, err) || Promise$1.resolve())["catch"](function () {}); + throw err; + }); + }); + } else { + promise = dbPromise.then(function (db) { + if (!db.objectStoreNames.contains(options.storeName)) { + return; + } + + var newVersion = db.version + 1; + + _deferReadiness(options); + + var dbContext = dbContexts[options.name]; + var forages = dbContext.forages; + + db.close(); + for (var i = 0; i < forages.length; i++) { + var forage = forages[i]; + forage._dbInfo.db = null; + forage._dbInfo.version = newVersion; + } + + var dropObjectPromise = new Promise$1(function (resolve, reject) { + var req = idb.open(options.name, newVersion); + + req.onerror = function (err) { + var db = req.result; + db.close(); + reject(err); + }; + + req.onupgradeneeded = function () { + var db = req.result; + db.deleteObjectStore(options.storeName); + }; + + req.onsuccess = function () { + var db = req.result; + db.close(); + resolve(db); + }; + }); + + return dropObjectPromise.then(function (db) { + dbContext.db = db; + for (var j = 0; j < forages.length; j++) { + var _forage2 = forages[j]; + _forage2._dbInfo.db = db; + _advanceReadiness(_forage2._dbInfo); + } + })["catch"](function (err) { + (_rejectReadiness(options, err) || Promise$1.resolve())["catch"](function () {}); + throw err; + }); + }); + } + } + + executeCallback(promise, callback); + return promise; +} + +var asyncStorage = { + _driver: 'asyncStorage', + _initStorage: _initStorage, + _support: isIndexedDBValid(), + iterate: iterate, + getItem: getItem, + setItem: setItem, + removeItem: removeItem, + clear: clear, + length: length, + key: key, + keys: keys, + dropInstance: dropInstance +}; + +function isWebSQLValid() { + return typeof openDatabase === 'function'; +} + +// Sadly, the best way to save binary data in WebSQL/localStorage is serializing +// it to Base64, so this is how we store it to prevent very strange errors with less +// verbose ways of binary <-> string data storage. +var BASE_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + +var BLOB_TYPE_PREFIX = '~~local_forage_type~'; +var BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/; + +var SERIALIZED_MARKER = '__lfsc__:'; +var SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length; + +// OMG the serializations! +var TYPE_ARRAYBUFFER = 'arbf'; +var TYPE_BLOB = 'blob'; +var TYPE_INT8ARRAY = 'si08'; +var TYPE_UINT8ARRAY = 'ui08'; +var TYPE_UINT8CLAMPEDARRAY = 'uic8'; +var TYPE_INT16ARRAY = 'si16'; +var TYPE_INT32ARRAY = 'si32'; +var TYPE_UINT16ARRAY = 'ur16'; +var TYPE_UINT32ARRAY = 'ui32'; +var TYPE_FLOAT32ARRAY = 'fl32'; +var TYPE_FLOAT64ARRAY = 'fl64'; +var TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length; + +var toString$1 = Object.prototype.toString; + +function stringToBuffer(serializedString) { + // Fill the string into a ArrayBuffer. + var bufferLength = serializedString.length * 0.75; + var len = serializedString.length; + var i; + var p = 0; + var encoded1, encoded2, encoded3, encoded4; + + if (serializedString[serializedString.length - 1] === '=') { + bufferLength--; + if (serializedString[serializedString.length - 2] === '=') { + bufferLength--; + } + } + + var buffer = new ArrayBuffer(bufferLength); + var bytes = new Uint8Array(buffer); + + for (i = 0; i < len; i += 4) { + encoded1 = BASE_CHARS.indexOf(serializedString[i]); + encoded2 = BASE_CHARS.indexOf(serializedString[i + 1]); + encoded3 = BASE_CHARS.indexOf(serializedString[i + 2]); + encoded4 = BASE_CHARS.indexOf(serializedString[i + 3]); + + /*jslint bitwise: true */ + bytes[p++] = encoded1 << 2 | encoded2 >> 4; + bytes[p++] = (encoded2 & 15) << 4 | encoded3 >> 2; + bytes[p++] = (encoded3 & 3) << 6 | encoded4 & 63; + } + return buffer; +} + +// Converts a buffer to a string to store, serialized, in the backend +// storage library. +function bufferToString(buffer) { + // base64-arraybuffer + var bytes = new Uint8Array(buffer); + var base64String = ''; + var i; + + for (i = 0; i < bytes.length; i += 3) { + /*jslint bitwise: true */ + base64String += BASE_CHARS[bytes[i] >> 2]; + base64String += BASE_CHARS[(bytes[i] & 3) << 4 | bytes[i + 1] >> 4]; + base64String += BASE_CHARS[(bytes[i + 1] & 15) << 2 | bytes[i + 2] >> 6]; + base64String += BASE_CHARS[bytes[i + 2] & 63]; + } + + if (bytes.length % 3 === 2) { + base64String = base64String.substring(0, base64String.length - 1) + '='; + } else if (bytes.length % 3 === 1) { + base64String = base64String.substring(0, base64String.length - 2) + '=='; + } + + return base64String; +} + +// Serialize a value, afterwards executing a callback (which usually +// instructs the `setItem()` callback/promise to be executed). This is how +// we store binary data with localStorage. +function serialize(value, callback) { + var valueType = ''; + if (value) { + valueType = toString$1.call(value); + } + + // Cannot use `value instanceof ArrayBuffer` or such here, as these + // checks fail when running the tests using casper.js... + // + // TODO: See why those tests fail and use a better solution. + if (value && (valueType === '[object ArrayBuffer]' || value.buffer && toString$1.call(value.buffer) === '[object ArrayBuffer]')) { + // Convert binary arrays to a string and prefix the string with + // a special marker. + var buffer; + var marker = SERIALIZED_MARKER; + + if (value instanceof ArrayBuffer) { + buffer = value; + marker += TYPE_ARRAYBUFFER; + } else { + buffer = value.buffer; + + if (valueType === '[object Int8Array]') { + marker += TYPE_INT8ARRAY; + } else if (valueType === '[object Uint8Array]') { + marker += TYPE_UINT8ARRAY; + } else if (valueType === '[object Uint8ClampedArray]') { + marker += TYPE_UINT8CLAMPEDARRAY; + } else if (valueType === '[object Int16Array]') { + marker += TYPE_INT16ARRAY; + } else if (valueType === '[object Uint16Array]') { + marker += TYPE_UINT16ARRAY; + } else if (valueType === '[object Int32Array]') { + marker += TYPE_INT32ARRAY; + } else if (valueType === '[object Uint32Array]') { + marker += TYPE_UINT32ARRAY; + } else if (valueType === '[object Float32Array]') { + marker += TYPE_FLOAT32ARRAY; + } else if (valueType === '[object Float64Array]') { + marker += TYPE_FLOAT64ARRAY; + } else { + callback(new Error('Failed to get type for BinaryArray')); + } + } + + callback(marker + bufferToString(buffer)); + } else if (valueType === '[object Blob]') { + // Conver the blob to a binaryArray and then to a string. + var fileReader = new FileReader(); + + fileReader.onload = function () { + // Backwards-compatible prefix for the blob type. + var str = BLOB_TYPE_PREFIX + value.type + '~' + bufferToString(this.result); + + callback(SERIALIZED_MARKER + TYPE_BLOB + str); + }; + + fileReader.readAsArrayBuffer(value); + } else { + try { + callback(JSON.stringify(value)); + } catch (e) { + console.error("Couldn't convert value into a JSON string: ", value); + + callback(null, e); + } + } +} + +// Deserialize data we've inserted into a value column/field. We place +// special markers into our strings to mark them as encoded; this isn't +// as nice as a meta field, but it's the only sane thing we can do whilst +// keeping localStorage support intact. +// +// Oftentimes this will just deserialize JSON content, but if we have a +// special marker (SERIALIZED_MARKER, defined above), we will extract +// some kind of arraybuffer/binary data/typed array out of the string. +function deserialize(value) { + // If we haven't marked this string as being specially serialized (i.e. + // something other than serialized JSON), we can just return it and be + // done with it. + if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) { + return JSON.parse(value); + } + + // The following code deals with deserializing some kind of Blob or + // TypedArray. First we separate out the type of data we're dealing + // with from the data itself. + var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH); + var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH); + + var blobType; + // Backwards-compatible blob type serialization strategy. + // DBs created with older versions of localForage will simply not have the blob type. + if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) { + var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX); + blobType = matcher[1]; + serializedString = serializedString.substring(matcher[0].length); + } + var buffer = stringToBuffer(serializedString); + + // Return the right type based on the code/type set during + // serialization. + switch (type) { + case TYPE_ARRAYBUFFER: + return buffer; + case TYPE_BLOB: + return createBlob([buffer], { type: blobType }); + case TYPE_INT8ARRAY: + return new Int8Array(buffer); + case TYPE_UINT8ARRAY: + return new Uint8Array(buffer); + case TYPE_UINT8CLAMPEDARRAY: + return new Uint8ClampedArray(buffer); + case TYPE_INT16ARRAY: + return new Int16Array(buffer); + case TYPE_UINT16ARRAY: + return new Uint16Array(buffer); + case TYPE_INT32ARRAY: + return new Int32Array(buffer); + case TYPE_UINT32ARRAY: + return new Uint32Array(buffer); + case TYPE_FLOAT32ARRAY: + return new Float32Array(buffer); + case TYPE_FLOAT64ARRAY: + return new Float64Array(buffer); + default: + throw new Error('Unkown type: ' + type); + } +} + +var localforageSerializer = { + serialize: serialize, + deserialize: deserialize, + stringToBuffer: stringToBuffer, + bufferToString: bufferToString +}; + +/* + * Includes code from: + * + * base64-arraybuffer + * https://github.com/niklasvh/base64-arraybuffer + * + * Copyright (c) 2012 Niklas von Hertzen + * Licensed under the MIT license. + */ + +function createDbTable(t, dbInfo, callback, errorCallback) { + t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' ' + '(id INTEGER PRIMARY KEY, key unique, value)', [], callback, errorCallback); +} + +// Open the WebSQL database (automatically creates one if one didn't +// previously exist), using any options set in the config. +function _initStorage$1(options) { + var self = this; + var dbInfo = { + db: null + }; + + if (options) { + for (var i in options) { + dbInfo[i] = typeof options[i] !== 'string' ? options[i].toString() : options[i]; + } + } + + var dbInfoPromise = new Promise$1(function (resolve, reject) { + // Open the database; the openDatabase API will automatically + // create it for us if it doesn't exist. + try { + dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size); + } catch (e) { + return reject(e); + } + + // Create our key/value table if it doesn't exist. + dbInfo.db.transaction(function (t) { + createDbTable(t, dbInfo, function () { + self._dbInfo = dbInfo; + resolve(); + }, function (t, error) { + reject(error); + }); + }, reject); + }); + + dbInfo.serializer = localforageSerializer; + return dbInfoPromise; +} + +function tryExecuteSql(t, dbInfo, sqlStatement, args, callback, errorCallback) { + t.executeSql(sqlStatement, args, callback, function (t, error) { + if (error.code === error.SYNTAX_ERR) { + t.executeSql('SELECT name FROM sqlite_master ' + "WHERE type='table' AND name = ?", [dbInfo.storeName], function (t, results) { + if (!results.rows.length) { + // if the table is missing (was deleted) + // re-create it table and retry + createDbTable(t, dbInfo, function () { + t.executeSql(sqlStatement, args, callback, errorCallback); + }, errorCallback); + } else { + errorCallback(t, error); + } + }, errorCallback); + } else { + errorCallback(t, error); + } + }, errorCallback); +} + +function getItem$1(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) { + var result = results.rows.length ? results.rows.item(0).value : null; + + // Check to see if this is serialized content we need to + // unpack. + if (result) { + result = dbInfo.serializer.deserialize(result); + } + + resolve(result); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +function iterate$1(iterator, callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'SELECT * FROM ' + dbInfo.storeName, [], function (t, results) { + var rows = results.rows; + var length = rows.length; + + for (var i = 0; i < length; i++) { + var item = rows.item(i); + var result = item.value; + + // Check to see if this is serialized content + // we need to unpack. + if (result) { + result = dbInfo.serializer.deserialize(result); + } + + result = iterator(result, item.key, i + 1); + + // void(0) prevents problems with redefinition + // of `undefined`. + if (result !== void 0) { + resolve(result); + return; + } + } + + resolve(); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +function _setItem(key, value, callback, retriesLeft) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + // The localStorage API doesn't return undefined values in an + // "expected" way, so undefined is always cast to null in all + // drivers. See: https://github.com/mozilla/localForage/pull/42 + if (value === undefined) { + value = null; + } + + // Save the original value to pass to the callback. + var originalValue = value; + + var dbInfo = self._dbInfo; + dbInfo.serializer.serialize(value, function (value, error) { + if (error) { + reject(error); + } else { + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'INSERT OR REPLACE INTO ' + dbInfo.storeName + ' ' + '(key, value) VALUES (?, ?)', [key, value], function () { + resolve(originalValue); + }, function (t, error) { + reject(error); + }); + }, function (sqlError) { + // The transaction failed; check + // to see if it's a quota error. + if (sqlError.code === sqlError.QUOTA_ERR) { + // We reject the callback outright for now, but + // it's worth trying to re-run the transaction. + // Even if the user accepts the prompt to use + // more storage on Safari, this error will + // be called. + // + // Try to re-run the transaction. + if (retriesLeft > 0) { + resolve(_setItem.apply(self, [key, originalValue, callback, retriesLeft - 1])); + return; + } + reject(sqlError); + } + }); + } + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +function setItem$1(key, value, callback) { + return _setItem.apply(this, [key, value, callback, 1]); +} + +function removeItem$1(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function () { + resolve(); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +// Deletes every item in the table. +// TODO: Find out if this resets the AUTO_INCREMENT number. +function clear$1(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'DELETE FROM ' + dbInfo.storeName, [], function () { + resolve(); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +// Does a simple `COUNT(key)` to get the number of items stored in +// localForage. +function length$1(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + // Ahhh, SQL makes this one soooooo easy. + tryExecuteSql(t, dbInfo, 'SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) { + var result = results.rows.item(0).c; + resolve(result); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +// Return the key located at key index X; essentially gets the key from a +// `WHERE id = ?`. This is the most efficient way I can think to implement +// this rarely-used (in my experience) part of the API, but it can seem +// inconsistent, because we do `INSERT OR REPLACE INTO` on `setItem()`, so +// the ID of each key will change every time it's updated. Perhaps a stored +// procedure for the `setItem()` SQL would solve this problem? +// TODO: Don't change ID on `setItem()`. +function key$1(n, callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) { + var result = results.rows.length ? results.rows.item(0).key : null; + resolve(result); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +function keys$1(callback) { + var self = this; + + var promise = new Promise$1(function (resolve, reject) { + self.ready().then(function () { + var dbInfo = self._dbInfo; + dbInfo.db.transaction(function (t) { + tryExecuteSql(t, dbInfo, 'SELECT key FROM ' + dbInfo.storeName, [], function (t, results) { + var keys = []; + + for (var i = 0; i < results.rows.length; i++) { + keys.push(results.rows.item(i).key); + } + + resolve(keys); + }, function (t, error) { + reject(error); + }); + }); + })["catch"](reject); + }); + + executeCallback(promise, callback); + return promise; +} + +// https://www.w3.org/TR/webdatabase/#databases +// > There is no way to enumerate or delete the databases available for an origin from this API. +function getAllStoreNames(db) { + return new Promise$1(function (resolve, reject) { + db.transaction(function (t) { + t.executeSql('SELECT name FROM sqlite_master ' + "WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'", [], function (t, results) { + var storeNames = []; + + for (var i = 0; i < results.rows.length; i++) { + storeNames.push(results.rows.item(i).name); + } + + resolve({ + db: db, + storeNames: storeNames + }); + }, function (t, error) { + reject(error); + }); + }, function (sqlError) { + reject(sqlError); + }); + }); +} + +function dropInstance$1(options, callback) { + callback = getCallback.apply(this, arguments); + + var currentConfig = this.config(); + options = typeof options !== 'function' && options || {}; + if (!options.name) { + options.name = options.name || currentConfig.name; + options.storeName = options.storeName || currentConfig.storeName; + } + + var self = this; + var promise; + if (!options.name) { + promise = Promise$1.reject('Invalid arguments'); + } else { + promise = new Promise$1(function (resolve) { + var db; + if (options.name === currentConfig.name) { + // use the db reference of the current instance + db = self._dbInfo.db; + } else { + db = openDatabase(options.name, '', '', 0); + } + + if (!options.storeName) { + // drop all database tables + resolve(getAllStoreNames(db)); + } else { + resolve({ + db: db, + storeNames: [options.storeName] + }); + } + }).then(function (operationInfo) { + return new Promise$1(function (resolve, reject) { + operationInfo.db.transaction(function (t) { + function dropTable(storeName) { + return new Promise$1(function (resolve, reject) { + t.executeSql('DROP TABLE IF EXISTS ' + storeName, [], function () { + resolve(); + }, function (t, error) { + reject(error); + }); + }); + } + + var operations = []; + for (var i = 0, len = operationInfo.storeNames.length; i < len; i++) { + operations.push(dropTable(operationInfo.storeNames[i])); + } + + Promise$1.all(operations).then(function () { + resolve(); + })["catch"](function (e) { + reject(e); + }); + }, function (sqlError) { + reject(sqlError); + }); + }); + }); + } + + executeCallback(promise, callback); + return promise; +} + +var webSQLStorage = { + _driver: 'webSQLStorage', + _initStorage: _initStorage$1, + _support: isWebSQLValid(), + iterate: iterate$1, + getItem: getItem$1, + setItem: setItem$1, + removeItem: removeItem$1, + clear: clear$1, + length: length$1, + key: key$1, + keys: keys$1, + dropInstance: dropInstance$1 +}; + +function isLocalStorageValid() { + try { + return typeof localStorage !== 'undefined' && 'setItem' in localStorage && + // in IE8 typeof localStorage.setItem === 'object' + !!localStorage.setItem; + } catch (e) { + return false; + } +} + +function _getKeyPrefix(options, defaultConfig) { + var keyPrefix = options.name + '/'; + + if (options.storeName !== defaultConfig.storeName) { + keyPrefix += options.storeName + '/'; + } + return keyPrefix; +} + +// Check if localStorage throws when saving an item +function checkIfLocalStorageThrows() { + var localStorageTestKey = '_localforage_support_test'; + + try { + localStorage.setItem(localStorageTestKey, true); + localStorage.removeItem(localStorageTestKey); + + return false; + } catch (e) { + return true; + } +} + +// Check if localStorage is usable and allows to save an item +// This method checks if localStorage is usable in Safari Private Browsing +// mode, or in any other case where the available quota for localStorage +// is 0 and there wasn't any saved items yet. +function _isLocalStorageUsable() { + return !checkIfLocalStorageThrows() || localStorage.length > 0; +} + +// Config the localStorage backend, using options set in the config. +function _initStorage$2(options) { + var self = this; + var dbInfo = {}; + if (options) { + for (var i in options) { + dbInfo[i] = options[i]; + } + } + + dbInfo.keyPrefix = _getKeyPrefix(options, self._defaultConfig); + + if (!_isLocalStorageUsable()) { + return Promise$1.reject(); + } + + self._dbInfo = dbInfo; + dbInfo.serializer = localforageSerializer; + + return Promise$1.resolve(); +} + +// Remove all keys from the datastore, effectively destroying all data in +// the app's key/value store! +function clear$2(callback) { + var self = this; + var promise = self.ready().then(function () { + var keyPrefix = self._dbInfo.keyPrefix; + + for (var i = localStorage.length - 1; i >= 0; i--) { + var key = localStorage.key(i); + + if (key.indexOf(keyPrefix) === 0) { + localStorage.removeItem(key); + } + } + }); + + executeCallback(promise, callback); + return promise; +} + +// Retrieve an item from the store. Unlike the original async_storage +// library in Gaia, we don't modify return values at all. If a key's value +// is `undefined`, we pass that value to the callback function. +function getItem$2(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var result = localStorage.getItem(dbInfo.keyPrefix + key); + + // If a result was found, parse it from the serialized + // string into a JS object. If result isn't truthy, the key + // is likely undefined and we'll pass it straight to the + // callback. + if (result) { + result = dbInfo.serializer.deserialize(result); + } + + return result; + }); + + executeCallback(promise, callback); + return promise; +} + +// Iterate over all items in the store. +function iterate$2(iterator, callback) { + var self = this; + + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var keyPrefix = dbInfo.keyPrefix; + var keyPrefixLength = keyPrefix.length; + var length = localStorage.length; + + // We use a dedicated iterator instead of the `i` variable below + // so other keys we fetch in localStorage aren't counted in + // the `iterationNumber` argument passed to the `iterate()` + // callback. + // + // See: github.com/mozilla/localForage/pull/435#discussion_r38061530 + var iterationNumber = 1; + + for (var i = 0; i < length; i++) { + var key = localStorage.key(i); + if (key.indexOf(keyPrefix) !== 0) { + continue; + } + var value = localStorage.getItem(key); + + // If a result was found, parse it from the serialized + // string into a JS object. If result isn't truthy, the + // key is likely undefined and we'll pass it straight + // to the iterator. + if (value) { + value = dbInfo.serializer.deserialize(value); + } + + value = iterator(value, key.substring(keyPrefixLength), iterationNumber++); + + if (value !== void 0) { + return value; + } + } + }); + + executeCallback(promise, callback); + return promise; +} + +// Same as localStorage's key() method, except takes a callback. +function key$2(n, callback) { + var self = this; + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var result; + try { + result = localStorage.key(n); + } catch (error) { + result = null; + } + + // Remove the prefix from the key, if a key is found. + if (result) { + result = result.substring(dbInfo.keyPrefix.length); + } + + return result; + }); + + executeCallback(promise, callback); + return promise; +} + +function keys$2(callback) { + var self = this; + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + var length = localStorage.length; + var keys = []; + + for (var i = 0; i < length; i++) { + var itemKey = localStorage.key(i); + if (itemKey.indexOf(dbInfo.keyPrefix) === 0) { + keys.push(itemKey.substring(dbInfo.keyPrefix.length)); + } + } + + return keys; + }); + + executeCallback(promise, callback); + return promise; +} + +// Supply the number of keys in the datastore to the callback function. +function length$2(callback) { + var self = this; + var promise = self.keys().then(function (keys) { + return keys.length; + }); + + executeCallback(promise, callback); + return promise; +} + +// Remove an item from the store, nice and simple. +function removeItem$2(key, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = self.ready().then(function () { + var dbInfo = self._dbInfo; + localStorage.removeItem(dbInfo.keyPrefix + key); + }); + + executeCallback(promise, callback); + return promise; +} + +// Set a key's value and run an optional callback once the value is set. +// Unlike Gaia's implementation, the callback function is passed the value, +// in case you want to operate on that value only after you're sure it +// saved, or something like that. +function setItem$2(key, value, callback) { + var self = this; + + key = normalizeKey(key); + + var promise = self.ready().then(function () { + // Convert undefined values to null. + // https://github.com/mozilla/localForage/pull/42 + if (value === undefined) { + value = null; + } + + // Save the original value to pass to the callback. + var originalValue = value; + + return new Promise$1(function (resolve, reject) { + var dbInfo = self._dbInfo; + dbInfo.serializer.serialize(value, function (value, error) { + if (error) { + reject(error); + } else { + try { + localStorage.setItem(dbInfo.keyPrefix + key, value); + resolve(originalValue); + } catch (e) { + // localStorage capacity exceeded. + // TODO: Make this a specific error/event. + if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') { + reject(e); + } + reject(e); + } + } + }); + }); + }); + + executeCallback(promise, callback); + return promise; +} + +function dropInstance$2(options, callback) { + callback = getCallback.apply(this, arguments); + + options = typeof options !== 'function' && options || {}; + if (!options.name) { + var currentConfig = this.config(); + options.name = options.name || currentConfig.name; + options.storeName = options.storeName || currentConfig.storeName; + } + + var self = this; + var promise; + if (!options.name) { + promise = Promise$1.reject('Invalid arguments'); + } else { + promise = new Promise$1(function (resolve) { + if (!options.storeName) { + resolve(options.name + '/'); + } else { + resolve(_getKeyPrefix(options, self._defaultConfig)); + } + }).then(function (keyPrefix) { + for (var i = localStorage.length - 1; i >= 0; i--) { + var key = localStorage.key(i); + + if (key.indexOf(keyPrefix) === 0) { + localStorage.removeItem(key); + } + } + }); + } + + executeCallback(promise, callback); + return promise; +} + +var localStorageWrapper = { + _driver: 'localStorageWrapper', + _initStorage: _initStorage$2, + _support: isLocalStorageValid(), + iterate: iterate$2, + getItem: getItem$2, + setItem: setItem$2, + removeItem: removeItem$2, + clear: clear$2, + length: length$2, + key: key$2, + keys: keys$2, + dropInstance: dropInstance$2 +}; + +var sameValue = function sameValue(x, y) { + return x === y || typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y); +}; + +var includes = function includes(array, searchElement) { + var len = array.length; + var i = 0; + while (i < len) { + if (sameValue(array[i], searchElement)) { + return true; + } + i++; + } + + return false; +}; + +var isArray = Array.isArray || function (arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; +}; + +// Drivers are stored here when `defineDriver()` is called. +// They are shared across all instances of localForage. +var DefinedDrivers = {}; + +var DriverSupport = {}; + +var DefaultDrivers = { + INDEXEDDB: asyncStorage, + WEBSQL: webSQLStorage, + LOCALSTORAGE: localStorageWrapper +}; + +var DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver]; + +var OptionalDriverMethods = ['dropInstance']; + +var LibraryMethods = ['clear', 'getItem', 'iterate', 'key', 'keys', 'length', 'removeItem', 'setItem'].concat(OptionalDriverMethods); + +var DefaultConfig = { + description: '', + driver: DefaultDriverOrder.slice(), + name: 'localforage', + // Default DB size is _JUST UNDER_ 5MB, as it's the highest size + // we can use without a prompt. + size: 4980736, + storeName: 'keyvaluepairs', + version: 1.0 +}; + +function callWhenReady(localForageInstance, libraryMethod) { + localForageInstance[libraryMethod] = function () { + var _args = arguments; + return localForageInstance.ready().then(function () { + return localForageInstance[libraryMethod].apply(localForageInstance, _args); + }); + }; +} + +function extend() { + for (var i = 1; i < arguments.length; i++) { + var arg = arguments[i]; + + if (arg) { + for (var _key in arg) { + if (arg.hasOwnProperty(_key)) { + if (isArray(arg[_key])) { + arguments[0][_key] = arg[_key].slice(); + } else { + arguments[0][_key] = arg[_key]; + } + } + } + } + } + + return arguments[0]; +} + +var LocalForage = function () { + function LocalForage(options) { + _classCallCheck(this, LocalForage); + + for (var driverTypeKey in DefaultDrivers) { + if (DefaultDrivers.hasOwnProperty(driverTypeKey)) { + var driver = DefaultDrivers[driverTypeKey]; + var driverName = driver._driver; + this[driverTypeKey] = driverName; + + if (!DefinedDrivers[driverName]) { + // we don't need to wait for the promise, + // since the default drivers can be defined + // in a blocking manner + this.defineDriver(driver); + } + } + } + + this._defaultConfig = extend({}, DefaultConfig); + this._config = extend({}, this._defaultConfig, options); + this._driverSet = null; + this._initDriver = null; + this._ready = false; + this._dbInfo = null; + + this._wrapLibraryMethodsWithReady(); + this.setDriver(this._config.driver)["catch"](function () {}); + } + + // Set any config values for localForage; can be called anytime before + // the first API call (e.g. `getItem`, `setItem`). + // We loop through options so we don't overwrite existing config + // values. + + + LocalForage.prototype.config = function config(options) { + // If the options argument is an object, we use it to set values. + // Otherwise, we return either a specified config value or all + // config values. + if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') { + // If localforage is ready and fully initialized, we can't set + // any new configuration values. Instead, we return an error. + if (this._ready) { + return new Error("Can't call config() after localforage " + 'has been used.'); + } + + for (var i in options) { + if (i === 'storeName') { + options[i] = options[i].replace(/\W/g, '_'); + } + + if (i === 'version' && typeof options[i] !== 'number') { + return new Error('Database version must be a number.'); + } + + this._config[i] = options[i]; + } + + // after all config options are set and + // the driver option is used, try setting it + if ('driver' in options && options.driver) { + return this.setDriver(this._config.driver); + } + + return true; + } else if (typeof options === 'string') { + return this._config[options]; + } else { + return this._config; + } + }; + + // Used to define a custom driver, shared across all instances of + // localForage. + + + LocalForage.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) { + var promise = new Promise$1(function (resolve, reject) { + try { + var driverName = driverObject._driver; + var complianceError = new Error('Custom driver not compliant; see ' + 'https://mozilla.github.io/localForage/#definedriver'); + + // A driver name should be defined and not overlap with the + // library-defined, default drivers. + if (!driverObject._driver) { + reject(complianceError); + return; + } + + var driverMethods = LibraryMethods.concat('_initStorage'); + for (var i = 0, len = driverMethods.length; i < len; i++) { + var driverMethodName = driverMethods[i]; + + // when the property is there, + // it should be a method even when optional + var isRequired = !includes(OptionalDriverMethods, driverMethodName); + if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== 'function') { + reject(complianceError); + return; + } + } + + var configureMissingMethods = function configureMissingMethods() { + var methodNotImplementedFactory = function methodNotImplementedFactory(methodName) { + return function () { + var error = new Error('Method ' + methodName + ' is not implemented by the current driver'); + var promise = Promise$1.reject(error); + executeCallback(promise, arguments[arguments.length - 1]); + return promise; + }; + }; + + for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) { + var optionalDriverMethod = OptionalDriverMethods[_i]; + if (!driverObject[optionalDriverMethod]) { + driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod); + } + } + }; + + configureMissingMethods(); + + var setDriverSupport = function setDriverSupport(support) { + if (DefinedDrivers[driverName]) { + console.info('Redefining LocalForage driver: ' + driverName); + } + DefinedDrivers[driverName] = driverObject; + DriverSupport[driverName] = support; + // don't use a then, so that we can define + // drivers that have simple _support methods + // in a blocking manner + resolve(); + }; + + if ('_support' in driverObject) { + if (driverObject._support && typeof driverObject._support === 'function') { + driverObject._support().then(setDriverSupport, reject); + } else { + setDriverSupport(!!driverObject._support); + } + } else { + setDriverSupport(true); + } + } catch (e) { + reject(e); + } + }); + + executeTwoCallbacks(promise, callback, errorCallback); + return promise; + }; + + LocalForage.prototype.driver = function driver() { + return this._driver || null; + }; + + LocalForage.prototype.getDriver = function getDriver(driverName, callback, errorCallback) { + var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error('Driver not found.')); + + executeTwoCallbacks(getDriverPromise, callback, errorCallback); + return getDriverPromise; + }; + + LocalForage.prototype.getSerializer = function getSerializer(callback) { + var serializerPromise = Promise$1.resolve(localforageSerializer); + executeTwoCallbacks(serializerPromise, callback); + return serializerPromise; + }; + + LocalForage.prototype.ready = function ready(callback) { + var self = this; + + var promise = self._driverSet.then(function () { + if (self._ready === null) { + self._ready = self._initDriver(); + } + + return self._ready; + }); + + executeTwoCallbacks(promise, callback, callback); + return promise; + }; + + LocalForage.prototype.setDriver = function setDriver(drivers, callback, errorCallback) { + var self = this; + + if (!isArray(drivers)) { + drivers = [drivers]; + } + + var supportedDrivers = this._getSupportedDrivers(drivers); + + function setDriverToConfig() { + self._config.driver = self.driver(); + } + + function extendSelfWithDriver(driver) { + self._extend(driver); + setDriverToConfig(); + + self._ready = self._initStorage(self._config); + return self._ready; + } + + function initDriver(supportedDrivers) { + return function () { + var currentDriverIndex = 0; + + function driverPromiseLoop() { + while (currentDriverIndex < supportedDrivers.length) { + var driverName = supportedDrivers[currentDriverIndex]; + currentDriverIndex++; + + self._dbInfo = null; + self._ready = null; + + return self.getDriver(driverName).then(extendSelfWithDriver)["catch"](driverPromiseLoop); + } + + setDriverToConfig(); + var error = new Error('No available storage method found.'); + self._driverSet = Promise$1.reject(error); + return self._driverSet; + } + + return driverPromiseLoop(); + }; + } + + // There might be a driver initialization in progress + // so wait for it to finish in order to avoid a possible + // race condition to set _dbInfo + var oldDriverSetDone = this._driverSet !== null ? this._driverSet["catch"](function () { + return Promise$1.resolve(); + }) : Promise$1.resolve(); + + this._driverSet = oldDriverSetDone.then(function () { + var driverName = supportedDrivers[0]; + self._dbInfo = null; + self._ready = null; + + return self.getDriver(driverName).then(function (driver) { + self._driver = driver._driver; + setDriverToConfig(); + self._wrapLibraryMethodsWithReady(); + self._initDriver = initDriver(supportedDrivers); + }); + })["catch"](function () { + setDriverToConfig(); + var error = new Error('No available storage method found.'); + self._driverSet = Promise$1.reject(error); + return self._driverSet; + }); + + executeTwoCallbacks(this._driverSet, callback, errorCallback); + return this._driverSet; + }; + + LocalForage.prototype.supports = function supports(driverName) { + return !!DriverSupport[driverName]; + }; + + LocalForage.prototype._extend = function _extend(libraryMethodsAndProperties) { + extend(this, libraryMethodsAndProperties); + }; + + LocalForage.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) { + var supportedDrivers = []; + for (var i = 0, len = drivers.length; i < len; i++) { + var driverName = drivers[i]; + if (this.supports(driverName)) { + supportedDrivers.push(driverName); + } + } + return supportedDrivers; + }; + + LocalForage.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() { + // Add a stub for each driver API method that delays the call to the + // corresponding driver method until localForage is ready. These stubs + // will be replaced by the driver methods as soon as the driver is + // loaded, so there is no performance impact. + for (var i = 0, len = LibraryMethods.length; i < len; i++) { + callWhenReady(this, LibraryMethods[i]); + } + }; + + LocalForage.prototype.createInstance = function createInstance(options) { + return new LocalForage(options); + }; + + return LocalForage; +}(); + +// The actual localForage object that we expose as a module or via a +// global. It's extended by pulling in one of our other libraries. + + +var localforage_js = new LocalForage(); + +module.exports = localforage_js; + +},{"3":3}]},{},[4])(4) +}); +}(localforage$1)); + +var localforage = localforage$1.exports; + +/** Simpler wrapper for a file-backed cache for arbitrary metadata. */ +class LocalStorageCache { + constructor(appId, version) { + this.appId = appId; + this.version = version; + this.persister = localforage.createInstance({ + name: "dataview/cache/" + appId, + driver: [localforage.INDEXEDDB], + description: "Cache metadata about files and sections in the dataview index.", + }); + } + /** Drop the entire cache instance and re-create a new fresh instance. */ + async recreate() { + await localforage.dropInstance({ name: "dataview/cache/" + this.appId }); + this.persister = localforage.createInstance({ + name: "dataview/cache/" + this.appId, + driver: [localforage.INDEXEDDB], + description: "Cache metadata about files and sections in the dataview index.", + }); + } + /** Load file metadata by path. */ + async loadFile(path) { + return this.persister.getItem(this.fileKey(path)).then(raw => { + let result = raw; + if (result) + result.data = Transferable.value(result.data); + return result; + }); + } + /** Store file metadata by path. */ + async storeFile(path, data) { + await this.persister.setItem(this.fileKey(path), { + version: this.version, + time: Date.now(), + data: Transferable.transferable(data), + }); + } + /** Drop old file keys that no longer exist. */ + async synchronize(existing) { + let keys = new Set(await this.allFiles()); + for (let exist of existing) + keys.delete(exist); + // Any keys remaining after deleting existing keys are non-existent keys that should be cleared from cache. + for (let key of keys) + await this.persister.removeItem(this.fileKey(key)); + return keys; + } + /** Obtain a list of all metadata keys. */ + async allKeys() { + return this.persister.keys(); + } + /** Obtain a list of all persisted files. */ + async allFiles() { + let keys = await this.allKeys(); + return keys.filter(k => k.startsWith("file:")).map(k => k.substring(5)); + } + fileKey(path) { + return "file:" + path; + } +} + +function decodeBase64(base64, enableUnicode) { + var binaryString = atob(base64); + if (enableUnicode) { + var binaryView = new Uint8Array(binaryString.length); + for (var i = 0, n = binaryString.length; i < n; ++i) { + binaryView[i] = binaryString.charCodeAt(i); + } + return String.fromCharCode.apply(null, new Uint16Array(binaryView.buffer)); + } + return binaryString; +} + +function createURL(base64, sourcemapArg, enableUnicodeArg) { + var sourcemap = sourcemapArg === undefined ? null : sourcemapArg; + var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg; + var source = decodeBase64(base64, enableUnicode); + var start = source.indexOf('\n', 10) + 1; + var body = source.substring(start) + (sourcemap ? '\/\/# sourceMappingURL=' + sourcemap : ''); + var blob = new Blob([body], { type: 'application/javascript' }); + return URL.createObjectURL(blob); +} + +function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) { + var url; + return function WorkerFactory(options) { + url = url || createURL(base64, sourcemapArg, enableUnicodeArg); + return new Worker(url, options); + }; +} + +var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewoJJ3VzZSBzdHJpY3QnOwoKCXZhciBjb21tb25qc0dsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9OwoKCXZhciBsdXhvbiA9IHt9OwoKCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsdXhvbiwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pOwoKCWZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsKCSAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgewoJICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07CgkgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOwoJICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsKCSAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsKCSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7CgkgIH0KCX0KCglmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7CgkgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOwoJICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7CgkgIHJldHVybiBDb25zdHJ1Y3RvcjsKCX0KCglmdW5jdGlvbiBfZXh0ZW5kcygpIHsKCSAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsKCSAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewoJICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsKCgkgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7CgkgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7CgkgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsKCSAgICAgICAgfQoJICAgICAgfQoJICAgIH0KCgkgICAgcmV0dXJuIHRhcmdldDsKCSAgfTsKCgkgIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoJfQoKCWZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7CgkgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOwoJICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsKCgkgIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7Cgl9CgoJZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsKCSAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsKCSAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOwoJICB9OwoJICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOwoJfQoKCWZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7CgkgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgewoJICAgIG8uX19wcm90b19fID0gcDsKCSAgICByZXR1cm4gbzsKCSAgfTsKCgkgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7Cgl9CgoJZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsKCSAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAidW5kZWZpbmVkIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsKCSAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsKCSAgaWYgKHR5cGVvZiBQcm94eSA9PT0gImZ1bmN0aW9uIikgcmV0dXJuIHRydWU7CgoJICB0cnkgewoJICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsKCSAgICByZXR1cm4gdHJ1ZTsKCSAgfSBjYXRjaCAoZSkgewoJICAgIHJldHVybiBmYWxzZTsKCSAgfQoJfQoKCWZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykgewoJICBpZiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7CgkgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0OwoJICB9IGVsc2UgewoJICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHsKCSAgICAgIHZhciBhID0gW251bGxdOwoJICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpOwoJICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpOwoJICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7CgkgICAgICBpZiAoQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTsKCSAgICAgIHJldHVybiBpbnN0YW5jZTsKCSAgICB9OwoJICB9CgoJICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpOwoJfQoKCWZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKGZuKSB7CgkgIHJldHVybiBGdW5jdGlvbi50b1N0cmluZy5jYWxsKGZuKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIikgIT09IC0xOwoJfQoKCWZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHsKCSAgdmFyIF9jYWNoZSA9IHR5cGVvZiBNYXAgPT09ICJmdW5jdGlvbiIgPyBuZXcgTWFwKCkgOiB1bmRlZmluZWQ7CgoJICBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykgewoJICAgIGlmIChDbGFzcyA9PT0gbnVsbCB8fCAhX2lzTmF0aXZlRnVuY3Rpb24oQ2xhc3MpKSByZXR1cm4gQ2xhc3M7CgoJICAgIGlmICh0eXBlb2YgQ2xhc3MgIT09ICJmdW5jdGlvbiIpIHsKCSAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7CgkgICAgfQoKCSAgICBpZiAodHlwZW9mIF9jYWNoZSAhPT0gInVuZGVmaW5lZCIpIHsKCSAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpOwoKCSAgICAgIF9jYWNoZS5zZXQoQ2xhc3MsIFdyYXBwZXIpOwoJICAgIH0KCgkgICAgZnVuY3Rpb24gV3JhcHBlcigpIHsKCSAgICAgIHJldHVybiBfY29uc3RydWN0KENsYXNzLCBhcmd1bWVudHMsIF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7CgkgICAgfQoKCSAgICBXcmFwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xhc3MucHJvdG90eXBlLCB7CgkgICAgICBjb25zdHJ1Y3RvcjogewoJICAgICAgICB2YWx1ZTogV3JhcHBlciwKCSAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCgkgICAgICAgIHdyaXRhYmxlOiB0cnVlLAoJICAgICAgICBjb25maWd1cmFibGU6IHRydWUKCSAgICAgIH0KCSAgICB9KTsKCSAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTsKCSAgfTsKCgkgIHJldHVybiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKTsKCX0KCglmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7CgkgIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OwoJICB2YXIgdGFyZ2V0ID0ge307CgkgIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsKCSAgdmFyIGtleSwgaTsKCgkgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7CgkgICAga2V5ID0gc291cmNlS2V5c1tpXTsKCSAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOwoJICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07CgkgIH0KCgkgIHJldHVybiB0YXJnZXQ7Cgl9CgoJZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgewoJICBpZiAoIW8pIHJldHVybjsKCSAgaWYgKHR5cGVvZiBvID09PSAic3RyaW5nIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7CgkgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsKCSAgaWYgKG4gPT09ICJPYmplY3QiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7CgkgIGlmIChuID09PSAiTWFwIiB8fCBuID09PSAiU2V0IikgcmV0dXJuIEFycmF5LmZyb20obyk7CgkgIGlmIChuID09PSAiQXJndW1lbnRzIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7Cgl9CgoJZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsKCSAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7CgoJICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07CgoJICByZXR1cm4gYXJyMjsKCX0KCglmdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKG8sIGFsbG93QXJyYXlMaWtlKSB7CgkgIHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09ICJ1bmRlZmluZWQiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSB8fCBvWyJAQGl0ZXJhdG9yIl07CgkgIGlmIChpdCkgcmV0dXJuIChpdCA9IGl0LmNhbGwobykpLm5leHQuYmluZChpdCk7CgoJICBpZiAoQXJyYXkuaXNBcnJheShvKSB8fCAoaXQgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobykpIHx8IGFsbG93QXJyYXlMaWtlICYmIG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSAibnVtYmVyIikgewoJICAgIGlmIChpdCkgbyA9IGl0OwoJICAgIHZhciBpID0gMDsKCSAgICByZXR1cm4gZnVuY3Rpb24gKCkgewoJICAgICAgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7CgkgICAgICAgIGRvbmU6IHRydWUKCSAgICAgIH07CgkgICAgICByZXR1cm4gewoJICAgICAgICBkb25lOiBmYWxzZSwKCSAgICAgICAgdmFsdWU6IG9baSsrXQoJICAgICAgfTsKCSAgICB9OwoJICB9CgoJICB0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIik7Cgl9CgoJLy8gdGhlc2UgYXJlbid0IHJlYWxseSBwcml2YXRlLCBidXQgbm9yIGFyZSB0aGV5IHJlYWxseSB1c2VmdWwgdG8gZG9jdW1lbnQKCgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCXZhciBMdXhvbkVycm9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRXJyb3IpIHsKCSAgX2luaGVyaXRzTG9vc2UoTHV4b25FcnJvciwgX0Vycm9yKTsKCgkgIGZ1bmN0aW9uIEx1eG9uRXJyb3IoKSB7CgkgICAgcmV0dXJuIF9FcnJvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CgkgIH0KCgkgIHJldHVybiBMdXhvbkVycm9yOwoJfSggLyojX19QVVJFX18qL193cmFwTmF0aXZlU3VwZXIoRXJyb3IpKTsKCS8qKgoJICogQHByaXZhdGUKCSAqLwoKCgl2YXIgSW52YWxpZERhdGVUaW1lRXJyb3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9MdXhvbkVycm9yKSB7CgkgIF9pbmhlcml0c0xvb3NlKEludmFsaWREYXRlVGltZUVycm9yLCBfTHV4b25FcnJvcik7CgoJICBmdW5jdGlvbiBJbnZhbGlkRGF0ZVRpbWVFcnJvcihyZWFzb24pIHsKCSAgICByZXR1cm4gX0x1eG9uRXJyb3IuY2FsbCh0aGlzLCAiSW52YWxpZCBEYXRlVGltZTogIiArIHJlYXNvbi50b01lc3NhZ2UoKSkgfHwgdGhpczsKCSAgfQoKCSAgcmV0dXJuIEludmFsaWREYXRlVGltZUVycm9yOwoJfShMdXhvbkVycm9yKTsKCS8qKgoJICogQHByaXZhdGUKCSAqLwoKCXZhciBJbnZhbGlkSW50ZXJ2YWxFcnJvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0x1eG9uRXJyb3IyKSB7CgkgIF9pbmhlcml0c0xvb3NlKEludmFsaWRJbnRlcnZhbEVycm9yLCBfTHV4b25FcnJvcjIpOwoKCSAgZnVuY3Rpb24gSW52YWxpZEludGVydmFsRXJyb3IocmVhc29uKSB7CgkgICAgcmV0dXJuIF9MdXhvbkVycm9yMi5jYWxsKHRoaXMsICJJbnZhbGlkIEludGVydmFsOiAiICsgcmVhc29uLnRvTWVzc2FnZSgpKSB8fCB0aGlzOwoJICB9CgoJICByZXR1cm4gSW52YWxpZEludGVydmFsRXJyb3I7Cgl9KEx1eG9uRXJyb3IpOwoJLyoqCgkgKiBAcHJpdmF0ZQoJICovCgoJdmFyIEludmFsaWREdXJhdGlvbkVycm9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfTHV4b25FcnJvcjMpIHsKCSAgX2luaGVyaXRzTG9vc2UoSW52YWxpZER1cmF0aW9uRXJyb3IsIF9MdXhvbkVycm9yMyk7CgoJICBmdW5jdGlvbiBJbnZhbGlkRHVyYXRpb25FcnJvcihyZWFzb24pIHsKCSAgICByZXR1cm4gX0x1eG9uRXJyb3IzLmNhbGwodGhpcywgIkludmFsaWQgRHVyYXRpb246ICIgKyByZWFzb24udG9NZXNzYWdlKCkpIHx8IHRoaXM7CgkgIH0KCgkgIHJldHVybiBJbnZhbGlkRHVyYXRpb25FcnJvcjsKCX0oTHV4b25FcnJvcik7CgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCgl2YXIgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9MdXhvbkVycm9yNCkgewoJICBfaW5oZXJpdHNMb29zZShDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciwgX0x1eG9uRXJyb3I0KTsKCgkgIGZ1bmN0aW9uIENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKCkgewoJICAgIHJldHVybiBfTHV4b25FcnJvcjQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwoJICB9CgoJICByZXR1cm4gQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3I7Cgl9KEx1eG9uRXJyb3IpOwoJLyoqCgkgKiBAcHJpdmF0ZQoJICovCgoJdmFyIEludmFsaWRVbml0RXJyb3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9MdXhvbkVycm9yNSkgewoJICBfaW5oZXJpdHNMb29zZShJbnZhbGlkVW5pdEVycm9yLCBfTHV4b25FcnJvcjUpOwoKCSAgZnVuY3Rpb24gSW52YWxpZFVuaXRFcnJvcih1bml0KSB7CgkgICAgcmV0dXJuIF9MdXhvbkVycm9yNS5jYWxsKHRoaXMsICJJbnZhbGlkIHVuaXQgIiArIHVuaXQpIHx8IHRoaXM7CgkgIH0KCgkgIHJldHVybiBJbnZhbGlkVW5pdEVycm9yOwoJfShMdXhvbkVycm9yKTsKCS8qKgoJICogQHByaXZhdGUKCSAqLwoKCXZhciBJbnZhbGlkQXJndW1lbnRFcnJvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0x1eG9uRXJyb3I2KSB7CgkgIF9pbmhlcml0c0xvb3NlKEludmFsaWRBcmd1bWVudEVycm9yLCBfTHV4b25FcnJvcjYpOwoKCSAgZnVuY3Rpb24gSW52YWxpZEFyZ3VtZW50RXJyb3IoKSB7CgkgICAgcmV0dXJuIF9MdXhvbkVycm9yNi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CgkgIH0KCgkgIHJldHVybiBJbnZhbGlkQXJndW1lbnRFcnJvcjsKCX0oTHV4b25FcnJvcik7CgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCgl2YXIgWm9uZUlzQWJzdHJhY3RFcnJvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0x1eG9uRXJyb3I3KSB7CgkgIF9pbmhlcml0c0xvb3NlKFpvbmVJc0Fic3RyYWN0RXJyb3IsIF9MdXhvbkVycm9yNyk7CgoJICBmdW5jdGlvbiBab25lSXNBYnN0cmFjdEVycm9yKCkgewoJICAgIHJldHVybiBfTHV4b25FcnJvcjcuY2FsbCh0aGlzLCAiWm9uZSBpcyBhbiBhYnN0cmFjdCBjbGFzcyIpIHx8IHRoaXM7CgkgIH0KCgkgIHJldHVybiBab25lSXNBYnN0cmFjdEVycm9yOwoJfShMdXhvbkVycm9yKTsKCgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCXZhciBuID0gIm51bWVyaWMiLAoJICAgIHMgPSAic2hvcnQiLAoJICAgIGwgPSAibG9uZyI7Cgl2YXIgREFURV9TSE9SVCA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IG4sCgkgIGRheTogbgoJfTsKCXZhciBEQVRFX01FRCA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IHMsCgkgIGRheTogbgoJfTsKCXZhciBEQVRFX01FRF9XSVRIX1dFRUtEQVkgPSB7CgkgIHllYXI6IG4sCgkgIG1vbnRoOiBzLAoJICBkYXk6IG4sCgkgIHdlZWtkYXk6IHMKCX07Cgl2YXIgREFURV9GVUxMID0gewoJICB5ZWFyOiBuLAoJICBtb250aDogbCwKCSAgZGF5OiBuCgl9OwoJdmFyIERBVEVfSFVHRSA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IGwsCgkgIGRheTogbiwKCSAgd2Vla2RheTogbAoJfTsKCXZhciBUSU1FX1NJTVBMRSA9IHsKCSAgaG91cjogbiwKCSAgbWludXRlOiBuCgl9OwoJdmFyIFRJTUVfV0lUSF9TRUNPTkRTID0gewoJICBob3VyOiBuLAoJICBtaW51dGU6IG4sCgkgIHNlY29uZDogbgoJfTsKCXZhciBUSU1FX1dJVEhfU0hPUlRfT0ZGU0VUID0gewoJICBob3VyOiBuLAoJICBtaW51dGU6IG4sCgkgIHNlY29uZDogbiwKCSAgdGltZVpvbmVOYW1lOiBzCgl9OwoJdmFyIFRJTUVfV0lUSF9MT05HX09GRlNFVCA9IHsKCSAgaG91cjogbiwKCSAgbWludXRlOiBuLAoJICBzZWNvbmQ6IG4sCgkgIHRpbWVab25lTmFtZTogbAoJfTsKCXZhciBUSU1FXzI0X1NJTVBMRSA9IHsKCSAgaG91cjogbiwKCSAgbWludXRlOiBuLAoJICBob3VyQ3ljbGU6ICJoMjMiCgl9OwoJdmFyIFRJTUVfMjRfV0lUSF9TRUNPTkRTID0gewoJICBob3VyOiBuLAoJICBtaW51dGU6IG4sCgkgIHNlY29uZDogbiwKCSAgaG91ckN5Y2xlOiAiaDIzIgoJfTsKCXZhciBUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUID0gewoJICBob3VyOiBuLAoJICBtaW51dGU6IG4sCgkgIHNlY29uZDogbiwKCSAgaG91ckN5Y2xlOiAiaDIzIiwKCSAgdGltZVpvbmVOYW1lOiBzCgl9OwoJdmFyIFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCA9IHsKCSAgaG91cjogbiwKCSAgbWludXRlOiBuLAoJICBzZWNvbmQ6IG4sCgkgIGhvdXJDeWNsZTogImgyMyIsCgkgIHRpbWVab25lTmFtZTogbAoJfTsKCXZhciBEQVRFVElNRV9TSE9SVCA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IG4sCgkgIGRheTogbiwKCSAgaG91cjogbiwKCSAgbWludXRlOiBuCgl9OwoJdmFyIERBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUyA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IG4sCgkgIGRheTogbiwKCSAgaG91cjogbiwKCSAgbWludXRlOiBuLAoJICBzZWNvbmQ6IG4KCX07Cgl2YXIgREFURVRJTUVfTUVEID0gewoJICB5ZWFyOiBuLAoJICBtb250aDogcywKCSAgZGF5OiBuLAoJICBob3VyOiBuLAoJICBtaW51dGU6IG4KCX07Cgl2YXIgREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUyA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IHMsCgkgIGRheTogbiwKCSAgaG91cjogbiwKCSAgbWludXRlOiBuLAoJICBzZWNvbmQ6IG4KCX07Cgl2YXIgREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWSA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IHMsCgkgIGRheTogbiwKCSAgd2Vla2RheTogcywKCSAgaG91cjogbiwKCSAgbWludXRlOiBuCgl9OwoJdmFyIERBVEVUSU1FX0ZVTEwgPSB7CgkgIHllYXI6IG4sCgkgIG1vbnRoOiBsLAoJICBkYXk6IG4sCgkgIGhvdXI6IG4sCgkgIG1pbnV0ZTogbiwKCSAgdGltZVpvbmVOYW1lOiBzCgl9OwoJdmFyIERBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTID0gewoJICB5ZWFyOiBuLAoJICBtb250aDogbCwKCSAgZGF5OiBuLAoJICBob3VyOiBuLAoJICBtaW51dGU6IG4sCgkgIHNlY29uZDogbiwKCSAgdGltZVpvbmVOYW1lOiBzCgl9OwoJdmFyIERBVEVUSU1FX0hVR0UgPSB7CgkgIHllYXI6IG4sCgkgIG1vbnRoOiBsLAoJICBkYXk6IG4sCgkgIHdlZWtkYXk6IGwsCgkgIGhvdXI6IG4sCgkgIG1pbnV0ZTogbiwKCSAgdGltZVpvbmVOYW1lOiBsCgl9OwoJdmFyIERBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTID0gewoJICB5ZWFyOiBuLAoJICBtb250aDogbCwKCSAgZGF5OiBuLAoJICB3ZWVrZGF5OiBsLAoJICBob3VyOiBuLAoJICBtaW51dGU6IG4sCgkgIHNlY29uZDogbiwKCSAgdGltZVpvbmVOYW1lOiBsCgl9OwoKCS8qKgoJICogQHByaXZhdGUKCSAqLwoJLy8gVFlQRVMKCglmdW5jdGlvbiBpc1VuZGVmaW5lZChvKSB7CgkgIHJldHVybiB0eXBlb2YgbyA9PT0gInVuZGVmaW5lZCI7Cgl9CglmdW5jdGlvbiBpc051bWJlcihvKSB7CgkgIHJldHVybiB0eXBlb2YgbyA9PT0gIm51bWJlciI7Cgl9CglmdW5jdGlvbiBpc0ludGVnZXIobykgewoJICByZXR1cm4gdHlwZW9mIG8gPT09ICJudW1iZXIiICYmIG8gJSAxID09PSAwOwoJfQoJZnVuY3Rpb24gaXNTdHJpbmcobykgewoJICByZXR1cm4gdHlwZW9mIG8gPT09ICJzdHJpbmciOwoJfQoJZnVuY3Rpb24gaXNEYXRlKG8pIHsKCSAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gIltvYmplY3QgRGF0ZV0iOwoJfSAvLyBDQVBBQklMSVRJRVMKCglmdW5jdGlvbiBoYXNSZWxhdGl2ZSgpIHsKCSAgdHJ5IHsKCSAgICByZXR1cm4gdHlwZW9mIEludGwgIT09ICJ1bmRlZmluZWQiICYmICEhSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQ7CgkgIH0gY2F0Y2ggKGUpIHsKCSAgICByZXR1cm4gZmFsc2U7CgkgIH0KCX0gLy8gT0JKRUNUUyBBTkQgQVJSQVlTCgoJZnVuY3Rpb24gbWF5YmVBcnJheSh0aGluZykgewoJICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGluZykgPyB0aGluZyA6IFt0aGluZ107Cgl9CglmdW5jdGlvbiBiZXN0QnkoYXJyLCBieSwgY29tcGFyZSkgewoJICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkgewoJICAgIHJldHVybiB1bmRlZmluZWQ7CgkgIH0KCgkgIHJldHVybiBhcnIucmVkdWNlKGZ1bmN0aW9uIChiZXN0LCBuZXh0KSB7CgkgICAgdmFyIHBhaXIgPSBbYnkobmV4dCksIG5leHRdOwoKCSAgICBpZiAoIWJlc3QpIHsKCSAgICAgIHJldHVybiBwYWlyOwoJICAgIH0gZWxzZSBpZiAoY29tcGFyZShiZXN0WzBdLCBwYWlyWzBdKSA9PT0gYmVzdFswXSkgewoJICAgICAgcmV0dXJuIGJlc3Q7CgkgICAgfSBlbHNlIHsKCSAgICAgIHJldHVybiBwYWlyOwoJICAgIH0KCSAgfSwgbnVsbClbMV07Cgl9CglmdW5jdGlvbiBwaWNrKG9iaiwga2V5cykgewoJICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGspIHsKCSAgICBhW2tdID0gb2JqW2tdOwoJICAgIHJldHVybiBhOwoJICB9LCB7fSk7Cgl9CglmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHsKCSAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOwoJfSAvLyBOVU1CRVJTIEFORCBTVFJJTkdTCgoJZnVuY3Rpb24gaW50ZWdlckJldHdlZW4odGhpbmcsIGJvdHRvbSwgdG9wKSB7CgkgIHJldHVybiBpc0ludGVnZXIodGhpbmcpICYmIHRoaW5nID49IGJvdHRvbSAmJiB0aGluZyA8PSB0b3A7Cgl9IC8vIHggJSBuIGJ1dCB0YWtlcyB0aGUgc2lnbiBvZiBuIGluc3RlYWQgb2YgeAoKCWZ1bmN0aW9uIGZsb29yTW9kKHgsIG4pIHsKCSAgcmV0dXJuIHggLSBuICogTWF0aC5mbG9vcih4IC8gbik7Cgl9CglmdW5jdGlvbiBwYWRTdGFydChpbnB1dCwgbikgewoJICBpZiAobiA9PT0gdm9pZCAwKSB7CgkgICAgbiA9IDI7CgkgIH0KCgkgIHZhciBpc05lZyA9IGlucHV0IDwgMDsKCSAgdmFyIHBhZGRlZDsKCgkgIGlmIChpc05lZykgewoJICAgIHBhZGRlZCA9ICItIiArICgiIiArIC1pbnB1dCkucGFkU3RhcnQobiwgIjAiKTsKCSAgfSBlbHNlIHsKCSAgICBwYWRkZWQgPSAoIiIgKyBpbnB1dCkucGFkU3RhcnQobiwgIjAiKTsKCSAgfQoKCSAgcmV0dXJuIHBhZGRlZDsKCX0KCWZ1bmN0aW9uIHBhcnNlSW50ZWdlcihzdHJpbmcpIHsKCSAgaWYgKGlzVW5kZWZpbmVkKHN0cmluZykgfHwgc3RyaW5nID09PSBudWxsIHx8IHN0cmluZyA9PT0gIiIpIHsKCSAgICByZXR1cm4gdW5kZWZpbmVkOwoJICB9IGVsc2UgewoJICAgIHJldHVybiBwYXJzZUludChzdHJpbmcsIDEwKTsKCSAgfQoJfQoJZnVuY3Rpb24gcGFyc2VGbG9hdGluZyhzdHJpbmcpIHsKCSAgaWYgKGlzVW5kZWZpbmVkKHN0cmluZykgfHwgc3RyaW5nID09PSBudWxsIHx8IHN0cmluZyA9PT0gIiIpIHsKCSAgICByZXR1cm4gdW5kZWZpbmVkOwoJICB9IGVsc2UgewoJICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cmluZyk7CgkgIH0KCX0KCWZ1bmN0aW9uIHBhcnNlTWlsbGlzKGZyYWN0aW9uKSB7CgkgIC8vIFJldHVybiB1bmRlZmluZWQgKGluc3RlYWQgb2YgMCkgaW4gdGhlc2UgY2FzZXMsIHdoZXJlIGZyYWN0aW9uIGlzIG5vdCBzZXQKCSAgaWYgKGlzVW5kZWZpbmVkKGZyYWN0aW9uKSB8fCBmcmFjdGlvbiA9PT0gbnVsbCB8fCBmcmFjdGlvbiA9PT0gIiIpIHsKCSAgICByZXR1cm4gdW5kZWZpbmVkOwoJICB9IGVsc2UgewoJICAgIHZhciBmID0gcGFyc2VGbG9hdCgiMC4iICsgZnJhY3Rpb24pICogMTAwMDsKCSAgICByZXR1cm4gTWF0aC5mbG9vcihmKTsKCSAgfQoJfQoJZnVuY3Rpb24gcm91bmRUbyhudW1iZXIsIGRpZ2l0cywgdG93YXJkWmVybykgewoJICBpZiAodG93YXJkWmVybyA9PT0gdm9pZCAwKSB7CgkgICAgdG93YXJkWmVybyA9IGZhbHNlOwoJICB9CgoJICB2YXIgZmFjdG9yID0gTWF0aC5wb3coMTAsIGRpZ2l0cyksCgkgICAgICByb3VuZGVyID0gdG93YXJkWmVybyA/IE1hdGgudHJ1bmMgOiBNYXRoLnJvdW5kOwoJICByZXR1cm4gcm91bmRlcihudW1iZXIgKiBmYWN0b3IpIC8gZmFjdG9yOwoJfSAvLyBEQVRFIEJBU0lDUwoKCWZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikgewoJICByZXR1cm4geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7Cgl9CglmdW5jdGlvbiBkYXlzSW5ZZWFyKHllYXIpIHsKCSAgcmV0dXJuIGlzTGVhcFllYXIoeWVhcikgPyAzNjYgOiAzNjU7Cgl9CglmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkgewoJICB2YXIgbW9kTW9udGggPSBmbG9vck1vZChtb250aCAtIDEsIDEyKSArIDEsCgkgICAgICBtb2RZZWFyID0geWVhciArIChtb250aCAtIG1vZE1vbnRoKSAvIDEyOwoKCSAgaWYgKG1vZE1vbnRoID09PSAyKSB7CgkgICAgcmV0dXJuIGlzTGVhcFllYXIobW9kWWVhcikgPyAyOSA6IDI4OwoJICB9IGVsc2UgewoJICAgIHJldHVybiBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb2RNb250aCAtIDFdOwoJICB9Cgl9IC8vIGNvdmVydCBhIGNhbGVuZGFyIG9iamVjdCB0byBhIGxvY2FsIHRpbWVzdGFtcCAoZXBvY2gsIGJ1dCB3aXRoIHRoZSBvZmZzZXQgYmFrZWQgaW4pCgoJZnVuY3Rpb24gb2JqVG9Mb2NhbFRTKG9iaikgewoJICB2YXIgZCA9IERhdGUuVVRDKG9iai55ZWFyLCBvYmoubW9udGggLSAxLCBvYmouZGF5LCBvYmouaG91ciwgb2JqLm1pbnV0ZSwgb2JqLnNlY29uZCwgb2JqLm1pbGxpc2Vjb25kKTsgLy8gZm9yIGxlZ2FjeSByZWFzb25zLCB5ZWFycyBiZXR3ZWVuIDAgYW5kIDk5IGFyZSBpbnRlcnByZXRlZCBhcyAxOVhYOyByZXZlcnQgdGhhdAoKCSAgaWYgKG9iai55ZWFyIDwgMTAwICYmIG9iai55ZWFyID49IDApIHsKCSAgICBkID0gbmV3IERhdGUoZCk7CgkgICAgZC5zZXRVVENGdWxsWWVhcihkLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTAwKTsKCSAgfQoKCSAgcmV0dXJuICtkOwoJfQoJZnVuY3Rpb24gd2Vla3NJbldlZWtZZWFyKHdlZWtZZWFyKSB7CgkgIHZhciBwMSA9ICh3ZWVrWWVhciArIE1hdGguZmxvb3Iod2Vla1llYXIgLyA0KSAtIE1hdGguZmxvb3Iod2Vla1llYXIgLyAxMDApICsgTWF0aC5mbG9vcih3ZWVrWWVhciAvIDQwMCkpICUgNywKCSAgICAgIGxhc3QgPSB3ZWVrWWVhciAtIDEsCgkgICAgICBwMiA9IChsYXN0ICsgTWF0aC5mbG9vcihsYXN0IC8gNCkgLSBNYXRoLmZsb29yKGxhc3QgLyAxMDApICsgTWF0aC5mbG9vcihsYXN0IC8gNDAwKSkgJSA3OwoJICByZXR1cm4gcDEgPT09IDQgfHwgcDIgPT09IDMgPyA1MyA6IDUyOwoJfQoJZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhcikgewoJICBpZiAoeWVhciA+IDk5KSB7CgkgICAgcmV0dXJuIHllYXI7CgkgIH0gZWxzZSByZXR1cm4geWVhciA+IDYwID8gMTkwMCArIHllYXIgOiAyMDAwICsgeWVhcjsKCX0gLy8gUEFSU0lORwoKCWZ1bmN0aW9uIHBhcnNlWm9uZUluZm8odHMsIG9mZnNldEZvcm1hdCwgbG9jYWxlLCB0aW1lWm9uZSkgewoJICBpZiAodGltZVpvbmUgPT09IHZvaWQgMCkgewoJICAgIHRpbWVab25lID0gbnVsbDsKCSAgfQoKCSAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh0cyksCgkgICAgICBpbnRsT3B0cyA9IHsKCSAgICBob3VyQ3ljbGU6ICJoMjMiLAoJICAgIHllYXI6ICJudW1lcmljIiwKCSAgICBtb250aDogIjItZGlnaXQiLAoJICAgIGRheTogIjItZGlnaXQiLAoJICAgIGhvdXI6ICIyLWRpZ2l0IiwKCSAgICBtaW51dGU6ICIyLWRpZ2l0IgoJICB9OwoKCSAgaWYgKHRpbWVab25lKSB7CgkgICAgaW50bE9wdHMudGltZVpvbmUgPSB0aW1lWm9uZTsKCSAgfQoKCSAgdmFyIG1vZGlmaWVkID0gX2V4dGVuZHMoewoJICAgIHRpbWVab25lTmFtZTogb2Zmc2V0Rm9ybWF0CgkgIH0sIGludGxPcHRzKTsKCgkgIHZhciBwYXJzZWQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIG1vZGlmaWVkKS5mb3JtYXRUb1BhcnRzKGRhdGUpLmZpbmQoZnVuY3Rpb24gKG0pIHsKCSAgICByZXR1cm4gbS50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICJ0aW1lem9uZW5hbWUiOwoJICB9KTsKCSAgcmV0dXJuIHBhcnNlZCA/IHBhcnNlZC52YWx1ZSA6IG51bGw7Cgl9IC8vIHNpZ25lZE9mZnNldCgnLTUnLCAnMzAnKSAtPiAtMzMwCgoJZnVuY3Rpb24gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cikgewoJICB2YXIgb2ZmSG91ciA9IHBhcnNlSW50KG9mZkhvdXJTdHIsIDEwKTsgLy8gZG9uJ3QgfHwgdGhpcyBiZWNhdXNlIHdlIHdhbnQgdG8gcHJlc2VydmUgLTAKCgkgIGlmIChOdW1iZXIuaXNOYU4ob2ZmSG91cikpIHsKCSAgICBvZmZIb3VyID0gMDsKCSAgfQoKCSAgdmFyIG9mZk1pbiA9IHBhcnNlSW50KG9mZk1pbnV0ZVN0ciwgMTApIHx8IDAsCgkgICAgICBvZmZNaW5TaWduZWQgPSBvZmZIb3VyIDwgMCB8fCBPYmplY3QuaXMob2ZmSG91ciwgLTApID8gLW9mZk1pbiA6IG9mZk1pbjsKCSAgcmV0dXJuIG9mZkhvdXIgKiA2MCArIG9mZk1pblNpZ25lZDsKCX0gLy8gQ09FUkNJT04KCglmdW5jdGlvbiBhc051bWJlcih2YWx1ZSkgewoJICB2YXIgbnVtZXJpY1ZhbHVlID0gTnVtYmVyKHZhbHVlKTsKCSAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gImJvb2xlYW4iIHx8IHZhbHVlID09PSAiIiB8fCBOdW1iZXIuaXNOYU4obnVtZXJpY1ZhbHVlKSkgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJJbnZhbGlkIHVuaXQgdmFsdWUgIiArIHZhbHVlKTsKCSAgcmV0dXJuIG51bWVyaWNWYWx1ZTsKCX0KCWZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdChvYmosIG5vcm1hbGl6ZXIpIHsKCSAgdmFyIG5vcm1hbGl6ZWQgPSB7fTsKCgkgIGZvciAodmFyIHUgaW4gb2JqKSB7CgkgICAgaWYgKGhhc093blByb3BlcnR5KG9iaiwgdSkpIHsKCSAgICAgIHZhciB2ID0gb2JqW3VdOwoJICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsKSBjb250aW51ZTsKCSAgICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplcih1KV0gPSBhc051bWJlcih2KTsKCSAgICB9CgkgIH0KCgkgIHJldHVybiBub3JtYWxpemVkOwoJfQoJZnVuY3Rpb24gZm9ybWF0T2Zmc2V0KG9mZnNldCwgZm9ybWF0KSB7CgkgIHZhciBob3VycyA9IE1hdGgudHJ1bmMoTWF0aC5hYnMob2Zmc2V0IC8gNjApKSwKCSAgICAgIG1pbnV0ZXMgPSBNYXRoLnRydW5jKE1hdGguYWJzKG9mZnNldCAlIDYwKSksCgkgICAgICBzaWduID0gb2Zmc2V0ID49IDAgPyAiKyIgOiAiLSI7CgoJICBzd2l0Y2ggKGZvcm1hdCkgewoJICAgIGNhc2UgInNob3J0IjoKCSAgICAgIHJldHVybiAiIiArIHNpZ24gKyBwYWRTdGFydChob3VycywgMikgKyAiOiIgKyBwYWRTdGFydChtaW51dGVzLCAyKTsKCgkgICAgY2FzZSAibmFycm93IjoKCSAgICAgIHJldHVybiAiIiArIHNpZ24gKyBob3VycyArIChtaW51dGVzID4gMCA/ICI6IiArIG1pbnV0ZXMgOiAiIik7CgoJICAgIGNhc2UgInRlY2hpZSI6CgkgICAgICByZXR1cm4gIiIgKyBzaWduICsgcGFkU3RhcnQoaG91cnMsIDIpICsgcGFkU3RhcnQobWludXRlcywgMik7CgoJICAgIGRlZmF1bHQ6CgkgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVmFsdWUgZm9ybWF0ICIgKyBmb3JtYXQgKyAiIGlzIG91dCBvZiByYW5nZSBmb3IgcHJvcGVydHkgZm9ybWF0Iik7CgkgIH0KCX0KCWZ1bmN0aW9uIHRpbWVPYmplY3Qob2JqKSB7CgkgIHJldHVybiBwaWNrKG9iaiwgWyJob3VyIiwgIm1pbnV0ZSIsICJzZWNvbmQiLCAibWlsbGlzZWNvbmQiXSk7Cgl9Cgl2YXIgaWFuYVJlZ2V4ID0gL1tBLVphLXpfKy1dezEsMjU2fSg/Ojo/XC9bQS1aYS16MC05XystXXsxLDI1Nn0oPzpcL1tBLVphLXowLTlfKy1dezEsMjU2fSk/KT8vOwoKCS8qKgoJICogQHByaXZhdGUKCSAqLwoKCgl2YXIgbW9udGhzTG9uZyA9IFsiSmFudWFyeSIsICJGZWJydWFyeSIsICJNYXJjaCIsICJBcHJpbCIsICJNYXkiLCAiSnVuZSIsICJKdWx5IiwgIkF1Z3VzdCIsICJTZXB0ZW1iZXIiLCAiT2N0b2JlciIsICJOb3ZlbWJlciIsICJEZWNlbWJlciJdOwoJdmFyIG1vbnRoc1Nob3J0ID0gWyJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyJdOwoJdmFyIG1vbnRoc05hcnJvdyA9IFsiSiIsICJGIiwgIk0iLCAiQSIsICJNIiwgIkoiLCAiSiIsICJBIiwgIlMiLCAiTyIsICJOIiwgIkQiXTsKCWZ1bmN0aW9uIG1vbnRocyhsZW5ndGgpIHsKCSAgc3dpdGNoIChsZW5ndGgpIHsKCSAgICBjYXNlICJuYXJyb3ciOgoJICAgICAgcmV0dXJuIFtdLmNvbmNhdChtb250aHNOYXJyb3cpOwoKCSAgICBjYXNlICJzaG9ydCI6CgkgICAgICByZXR1cm4gW10uY29uY2F0KG1vbnRoc1Nob3J0KTsKCgkgICAgY2FzZSAibG9uZyI6CgkgICAgICByZXR1cm4gW10uY29uY2F0KG1vbnRoc0xvbmcpOwoKCSAgICBjYXNlICJudW1lcmljIjoKCSAgICAgIHJldHVybiBbIjEiLCAiMiIsICIzIiwgIjQiLCAiNSIsICI2IiwgIjciLCAiOCIsICI5IiwgIjEwIiwgIjExIiwgIjEyIl07CgoJICAgIGNhc2UgIjItZGlnaXQiOgoJICAgICAgcmV0dXJuIFsiMDEiLCAiMDIiLCAiMDMiLCAiMDQiLCAiMDUiLCAiMDYiLCAiMDciLCAiMDgiLCAiMDkiLCAiMTAiLCAiMTEiLCAiMTIiXTsKCgkgICAgZGVmYXVsdDoKCSAgICAgIHJldHVybiBudWxsOwoJICB9Cgl9Cgl2YXIgd2Vla2RheXNMb25nID0gWyJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLCAiVGh1cnNkYXkiLCAiRnJpZGF5IiwgIlNhdHVyZGF5IiwgIlN1bmRheSJdOwoJdmFyIHdlZWtkYXlzU2hvcnQgPSBbIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biJdOwoJdmFyIHdlZWtkYXlzTmFycm93ID0gWyJNIiwgIlQiLCAiVyIsICJUIiwgIkYiLCAiUyIsICJTIl07CglmdW5jdGlvbiB3ZWVrZGF5cyhsZW5ndGgpIHsKCSAgc3dpdGNoIChsZW5ndGgpIHsKCSAgICBjYXNlICJuYXJyb3ciOgoJICAgICAgcmV0dXJuIFtdLmNvbmNhdCh3ZWVrZGF5c05hcnJvdyk7CgoJICAgIGNhc2UgInNob3J0IjoKCSAgICAgIHJldHVybiBbXS5jb25jYXQod2Vla2RheXNTaG9ydCk7CgoJICAgIGNhc2UgImxvbmciOgoJICAgICAgcmV0dXJuIFtdLmNvbmNhdCh3ZWVrZGF5c0xvbmcpOwoKCSAgICBjYXNlICJudW1lcmljIjoKCSAgICAgIHJldHVybiBbIjEiLCAiMiIsICIzIiwgIjQiLCAiNSIsICI2IiwgIjciXTsKCgkgICAgZGVmYXVsdDoKCSAgICAgIHJldHVybiBudWxsOwoJICB9Cgl9Cgl2YXIgbWVyaWRpZW1zID0gWyJBTSIsICJQTSJdOwoJdmFyIGVyYXNMb25nID0gWyJCZWZvcmUgQ2hyaXN0IiwgIkFubm8gRG9taW5pIl07Cgl2YXIgZXJhc1Nob3J0ID0gWyJCQyIsICJBRCJdOwoJdmFyIGVyYXNOYXJyb3cgPSBbIkIiLCAiQSJdOwoJZnVuY3Rpb24gZXJhcyhsZW5ndGgpIHsKCSAgc3dpdGNoIChsZW5ndGgpIHsKCSAgICBjYXNlICJuYXJyb3ciOgoJICAgICAgcmV0dXJuIFtdLmNvbmNhdChlcmFzTmFycm93KTsKCgkgICAgY2FzZSAic2hvcnQiOgoJICAgICAgcmV0dXJuIFtdLmNvbmNhdChlcmFzU2hvcnQpOwoKCSAgICBjYXNlICJsb25nIjoKCSAgICAgIHJldHVybiBbXS5jb25jYXQoZXJhc0xvbmcpOwoKCSAgICBkZWZhdWx0OgoJICAgICAgcmV0dXJuIG51bGw7CgkgIH0KCX0KCWZ1bmN0aW9uIG1lcmlkaWVtRm9yRGF0ZVRpbWUoZHQpIHsKCSAgcmV0dXJuIG1lcmlkaWVtc1tkdC5ob3VyIDwgMTIgPyAwIDogMV07Cgl9CglmdW5jdGlvbiB3ZWVrZGF5Rm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkgewoJICByZXR1cm4gd2Vla2RheXMobGVuZ3RoKVtkdC53ZWVrZGF5IC0gMV07Cgl9CglmdW5jdGlvbiBtb250aEZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIHsKCSAgcmV0dXJuIG1vbnRocyhsZW5ndGgpW2R0Lm1vbnRoIC0gMV07Cgl9CglmdW5jdGlvbiBlcmFGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSB7CgkgIHJldHVybiBlcmFzKGxlbmd0aClbZHQueWVhciA8IDAgPyAwIDogMV07Cgl9CglmdW5jdGlvbiBmb3JtYXRSZWxhdGl2ZVRpbWUodW5pdCwgY291bnQsIG51bWVyaWMsIG5hcnJvdykgewoJICBpZiAobnVtZXJpYyA9PT0gdm9pZCAwKSB7CgkgICAgbnVtZXJpYyA9ICJhbHdheXMiOwoJICB9CgoJICBpZiAobmFycm93ID09PSB2b2lkIDApIHsKCSAgICBuYXJyb3cgPSBmYWxzZTsKCSAgfQoKCSAgdmFyIHVuaXRzID0gewoJICAgIHllYXJzOiBbInllYXIiLCAieXIuIl0sCgkgICAgcXVhcnRlcnM6IFsicXVhcnRlciIsICJxdHIuIl0sCgkgICAgbW9udGhzOiBbIm1vbnRoIiwgIm1vLiJdLAoJICAgIHdlZWtzOiBbIndlZWsiLCAid2suIl0sCgkgICAgZGF5czogWyJkYXkiLCAiZGF5IiwgImRheXMiXSwKCSAgICBob3VyczogWyJob3VyIiwgImhyLiJdLAoJICAgIG1pbnV0ZXM6IFsibWludXRlIiwgIm1pbi4iXSwKCSAgICBzZWNvbmRzOiBbInNlY29uZCIsICJzZWMuIl0KCSAgfTsKCSAgdmFyIGxhc3RhYmxlID0gWyJob3VycyIsICJtaW51dGVzIiwgInNlY29uZHMiXS5pbmRleE9mKHVuaXQpID09PSAtMTsKCgkgIGlmIChudW1lcmljID09PSAiYXV0byIgJiYgbGFzdGFibGUpIHsKCSAgICB2YXIgaXNEYXkgPSB1bml0ID09PSAiZGF5cyI7CgoJICAgIHN3aXRjaCAoY291bnQpIHsKCSAgICAgIGNhc2UgMToKCSAgICAgICAgcmV0dXJuIGlzRGF5ID8gInRvbW9ycm93IiA6ICJuZXh0ICIgKyB1bml0c1t1bml0XVswXTsKCgkgICAgICBjYXNlIC0xOgoJICAgICAgICByZXR1cm4gaXNEYXkgPyAieWVzdGVyZGF5IiA6ICJsYXN0ICIgKyB1bml0c1t1bml0XVswXTsKCgkgICAgICBjYXNlIDA6CgkgICAgICAgIHJldHVybiBpc0RheSA/ICJ0b2RheSIgOiAidGhpcyAiICsgdW5pdHNbdW5pdF1bMF07CgoJICAgIH0KCSAgfQoKCSAgdmFyIGlzSW5QYXN0ID0gT2JqZWN0LmlzKGNvdW50LCAtMCkgfHwgY291bnQgPCAwLAoJICAgICAgZm10VmFsdWUgPSBNYXRoLmFicyhjb3VudCksCgkgICAgICBzaW5ndWxhciA9IGZtdFZhbHVlID09PSAxLAoJICAgICAgbGlsVW5pdHMgPSB1bml0c1t1bml0XSwKCSAgICAgIGZtdFVuaXQgPSBuYXJyb3cgPyBzaW5ndWxhciA/IGxpbFVuaXRzWzFdIDogbGlsVW5pdHNbMl0gfHwgbGlsVW5pdHNbMV0gOiBzaW5ndWxhciA/IHVuaXRzW3VuaXRdWzBdIDogdW5pdDsKCSAgcmV0dXJuIGlzSW5QYXN0ID8gZm10VmFsdWUgKyAiICIgKyBmbXRVbml0ICsgIiBhZ28iIDogImluICIgKyBmbXRWYWx1ZSArICIgIiArIGZtdFVuaXQ7Cgl9CgoJZnVuY3Rpb24gc3RyaW5naWZ5VG9rZW5zKHNwbGl0cywgdG9rZW5Ub1N0cmluZykgewoJICB2YXIgcyA9ICIiOwoKCSAgZm9yICh2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShzcGxpdHMpLCBfc3RlcDsgIShfc3RlcCA9IF9pdGVyYXRvcigpKS5kb25lOykgewoJICAgIHZhciB0b2tlbiA9IF9zdGVwLnZhbHVlOwoKCSAgICBpZiAodG9rZW4ubGl0ZXJhbCkgewoJICAgICAgcyArPSB0b2tlbi52YWw7CgkgICAgfSBlbHNlIHsKCSAgICAgIHMgKz0gdG9rZW5Ub1N0cmluZyh0b2tlbi52YWwpOwoJICAgIH0KCSAgfQoKCSAgcmV0dXJuIHM7Cgl9CgoJdmFyIF9tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzID0gewoJICBEOiBEQVRFX1NIT1JULAoJICBERDogREFURV9NRUQsCgkgIERERDogREFURV9GVUxMLAoJICBEREREOiBEQVRFX0hVR0UsCgkgIHQ6IFRJTUVfU0lNUExFLAoJICB0dDogVElNRV9XSVRIX1NFQ09ORFMsCgkgIHR0dDogVElNRV9XSVRIX1NIT1JUX09GRlNFVCwKCSAgdHR0dDogVElNRV9XSVRIX0xPTkdfT0ZGU0VULAoJICBUOiBUSU1FXzI0X1NJTVBMRSwKCSAgVFQ6IFRJTUVfMjRfV0lUSF9TRUNPTkRTLAoJICBUVFQ6IFRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQsCgkgIFRUVFQ6IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCwKCSAgZjogREFURVRJTUVfU0hPUlQsCgkgIGZmOiBEQVRFVElNRV9NRUQsCgkgIGZmZjogREFURVRJTUVfRlVMTCwKCSAgZmZmZjogREFURVRJTUVfSFVHRSwKCSAgRjogREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTLAoJICBGRjogREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUywKCSAgRkZGOiBEQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUywKCSAgRkZGRjogREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMKCX07CgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCgl2YXIgRm9ybWF0dGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKCSAgRm9ybWF0dGVyLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShsb2NhbGUsIG9wdHMpIHsKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICByZXR1cm4gbmV3IEZvcm1hdHRlcihsb2NhbGUsIG9wdHMpOwoJICB9OwoKCSAgRm9ybWF0dGVyLnBhcnNlRm9ybWF0ID0gZnVuY3Rpb24gcGFyc2VGb3JtYXQoZm10KSB7CgkgICAgdmFyIGN1cnJlbnQgPSBudWxsLAoJICAgICAgICBjdXJyZW50RnVsbCA9ICIiLAoJICAgICAgICBicmFja2V0ZWQgPSBmYWxzZTsKCSAgICB2YXIgc3BsaXRzID0gW107CgoJICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm10Lmxlbmd0aDsgaSsrKSB7CgkgICAgICB2YXIgYyA9IGZtdC5jaGFyQXQoaSk7CgoJICAgICAgaWYgKGMgPT09ICInIikgewoJICAgICAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkgewoJICAgICAgICAgIHNwbGl0cy5wdXNoKHsKCSAgICAgICAgICAgIGxpdGVyYWw6IGJyYWNrZXRlZCwKCSAgICAgICAgICAgIHZhbDogY3VycmVudEZ1bGwKCSAgICAgICAgICB9KTsKCSAgICAgICAgfQoKCSAgICAgICAgY3VycmVudCA9IG51bGw7CgkgICAgICAgIGN1cnJlbnRGdWxsID0gIiI7CgkgICAgICAgIGJyYWNrZXRlZCA9ICFicmFja2V0ZWQ7CgkgICAgICB9IGVsc2UgaWYgKGJyYWNrZXRlZCkgewoJICAgICAgICBjdXJyZW50RnVsbCArPSBjOwoJICAgICAgfSBlbHNlIGlmIChjID09PSBjdXJyZW50KSB7CgkgICAgICAgIGN1cnJlbnRGdWxsICs9IGM7CgkgICAgICB9IGVsc2UgewoJICAgICAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkgewoJICAgICAgICAgIHNwbGl0cy5wdXNoKHsKCSAgICAgICAgICAgIGxpdGVyYWw6IGZhbHNlLAoJICAgICAgICAgICAgdmFsOiBjdXJyZW50RnVsbAoJICAgICAgICAgIH0pOwoJICAgICAgICB9CgoJICAgICAgICBjdXJyZW50RnVsbCA9IGM7CgkgICAgICAgIGN1cnJlbnQgPSBjOwoJICAgICAgfQoJICAgIH0KCgkgICAgaWYgKGN1cnJlbnRGdWxsLmxlbmd0aCA+IDApIHsKCSAgICAgIHNwbGl0cy5wdXNoKHsKCSAgICAgICAgbGl0ZXJhbDogYnJhY2tldGVkLAoJICAgICAgICB2YWw6IGN1cnJlbnRGdWxsCgkgICAgICB9KTsKCSAgICB9CgoJICAgIHJldHVybiBzcGxpdHM7CgkgIH07CgoJICBGb3JtYXR0ZXIubWFjcm9Ub2tlblRvRm9ybWF0T3B0cyA9IGZ1bmN0aW9uIG1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4pIHsKCSAgICByZXR1cm4gX21hY3JvVG9rZW5Ub0Zvcm1hdE9wdHNbdG9rZW5dOwoJICB9OwoKCSAgZnVuY3Rpb24gRm9ybWF0dGVyKGxvY2FsZSwgZm9ybWF0T3B0cykgewoJICAgIHRoaXMub3B0cyA9IGZvcm1hdE9wdHM7CgkgICAgdGhpcy5sb2MgPSBsb2NhbGU7CgkgICAgdGhpcy5zeXN0ZW1Mb2MgPSBudWxsOwoJICB9CgoJICB2YXIgX3Byb3RvID0gRm9ybWF0dGVyLnByb3RvdHlwZTsKCgkgIF9wcm90by5mb3JtYXRXaXRoU3lzdGVtRGVmYXVsdCA9IGZ1bmN0aW9uIGZvcm1hdFdpdGhTeXN0ZW1EZWZhdWx0KGR0LCBvcHRzKSB7CgkgICAgaWYgKHRoaXMuc3lzdGVtTG9jID09PSBudWxsKSB7CgkgICAgICB0aGlzLnN5c3RlbUxvYyA9IHRoaXMubG9jLnJlZGVmYXVsdFRvU3lzdGVtKCk7CgkgICAgfQoKCSAgICB2YXIgZGYgPSB0aGlzLnN5c3RlbUxvYy5kdEZvcm1hdHRlcihkdCwgX2V4dGVuZHMoe30sIHRoaXMub3B0cywgb3B0cykpOwoJICAgIHJldHVybiBkZi5mb3JtYXQoKTsKCSAgfTsKCgkgIF9wcm90by5mb3JtYXREYXRlVGltZSA9IGZ1bmN0aW9uIGZvcm1hdERhdGVUaW1lKGR0LCBvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgdmFyIGRmID0gdGhpcy5sb2MuZHRGb3JtYXR0ZXIoZHQsIF9leHRlbmRzKHt9LCB0aGlzLm9wdHMsIG9wdHMpKTsKCSAgICByZXR1cm4gZGYuZm9ybWF0KCk7CgkgIH07CgoJICBfcHJvdG8uZm9ybWF0RGF0ZVRpbWVQYXJ0cyA9IGZ1bmN0aW9uIGZvcm1hdERhdGVUaW1lUGFydHMoZHQsIG9wdHMpIHsKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICB2YXIgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgX2V4dGVuZHMoe30sIHRoaXMub3B0cywgb3B0cykpOwoJICAgIHJldHVybiBkZi5mb3JtYXRUb1BhcnRzKCk7CgkgIH07CgoJICBfcHJvdG8ucmVzb2x2ZWRPcHRpb25zID0gZnVuY3Rpb24gcmVzb2x2ZWRPcHRpb25zKGR0LCBvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgdmFyIGRmID0gdGhpcy5sb2MuZHRGb3JtYXR0ZXIoZHQsIF9leHRlbmRzKHt9LCB0aGlzLm9wdHMsIG9wdHMpKTsKCSAgICByZXR1cm4gZGYucmVzb2x2ZWRPcHRpb25zKCk7CgkgIH07CgoJICBfcHJvdG8ubnVtID0gZnVuY3Rpb24gbnVtKG4sIHApIHsKCSAgICBpZiAocCA9PT0gdm9pZCAwKSB7CgkgICAgICBwID0gMDsKCSAgICB9CgoJICAgIC8vIHdlIGdldCBzb21lIHBlcmYgb3V0IG9mIGRvaW5nIHRoaXMgaGVyZSwgYW5ub3lpbmdseQoJICAgIGlmICh0aGlzLm9wdHMuZm9yY2VTaW1wbGUpIHsKCSAgICAgIHJldHVybiBwYWRTdGFydChuLCBwKTsKCSAgICB9CgoJICAgIHZhciBvcHRzID0gX2V4dGVuZHMoe30sIHRoaXMub3B0cyk7CgoJICAgIGlmIChwID4gMCkgewoJICAgICAgb3B0cy5wYWRUbyA9IHA7CgkgICAgfQoKCSAgICByZXR1cm4gdGhpcy5sb2MubnVtYmVyRm9ybWF0dGVyKG9wdHMpLmZvcm1hdChuKTsKCSAgfTsKCgkgIF9wcm90by5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcgPSBmdW5jdGlvbiBmb3JtYXREYXRlVGltZUZyb21TdHJpbmcoZHQsIGZtdCkgewoJICAgIHZhciBfdGhpcyA9IHRoaXM7CgoJICAgIHZhciBrbm93bkVuZ2xpc2ggPSB0aGlzLmxvYy5saXN0aW5nTW9kZSgpID09PSAiZW4iLAoJICAgICAgICB1c2VEYXRlVGltZUZvcm1hdHRlciA9IHRoaXMubG9jLm91dHB1dENhbGVuZGFyICYmIHRoaXMubG9jLm91dHB1dENhbGVuZGFyICE9PSAiZ3JlZ29yeSIsCgkgICAgICAgIHN0cmluZyA9IGZ1bmN0aW9uIHN0cmluZyhvcHRzLCBleHRyYWN0KSB7CgkgICAgICByZXR1cm4gX3RoaXMubG9jLmV4dHJhY3QoZHQsIG9wdHMsIGV4dHJhY3QpOwoJICAgIH0sCgkgICAgICAgIGZvcm1hdE9mZnNldCA9IGZ1bmN0aW9uIGZvcm1hdE9mZnNldChvcHRzKSB7CgkgICAgICBpZiAoZHQuaXNPZmZzZXRGaXhlZCAmJiBkdC5vZmZzZXQgPT09IDAgJiYgb3B0cy5hbGxvd1opIHsKCSAgICAgICAgcmV0dXJuICJaIjsKCSAgICAgIH0KCgkgICAgICByZXR1cm4gZHQuaXNWYWxpZCA/IGR0LnpvbmUuZm9ybWF0T2Zmc2V0KGR0LnRzLCBvcHRzLmZvcm1hdCkgOiAiIjsKCSAgICB9LAoJICAgICAgICBtZXJpZGllbSA9IGZ1bmN0aW9uIG1lcmlkaWVtKCkgewoJICAgICAgcmV0dXJuIGtub3duRW5nbGlzaCA/IG1lcmlkaWVtRm9yRGF0ZVRpbWUoZHQpIDogc3RyaW5nKHsKCSAgICAgICAgaG91cjogIm51bWVyaWMiLAoJICAgICAgICBob3VyQ3ljbGU6ICJoMTIiCgkgICAgICB9LCAiZGF5cGVyaW9kIik7CgkgICAgfSwKCSAgICAgICAgbW9udGggPSBmdW5jdGlvbiBtb250aChsZW5ndGgsIHN0YW5kYWxvbmUpIHsKCSAgICAgIHJldHVybiBrbm93bkVuZ2xpc2ggPyBtb250aEZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIDogc3RyaW5nKHN0YW5kYWxvbmUgPyB7CgkgICAgICAgIG1vbnRoOiBsZW5ndGgKCSAgICAgIH0gOiB7CgkgICAgICAgIG1vbnRoOiBsZW5ndGgsCgkgICAgICAgIGRheTogIm51bWVyaWMiCgkgICAgICB9LCAibW9udGgiKTsKCSAgICB9LAoJICAgICAgICB3ZWVrZGF5ID0gZnVuY3Rpb24gd2Vla2RheShsZW5ndGgsIHN0YW5kYWxvbmUpIHsKCSAgICAgIHJldHVybiBrbm93bkVuZ2xpc2ggPyB3ZWVrZGF5Rm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkgOiBzdHJpbmcoc3RhbmRhbG9uZSA/IHsKCSAgICAgICAgd2Vla2RheTogbGVuZ3RoCgkgICAgICB9IDogewoJICAgICAgICB3ZWVrZGF5OiBsZW5ndGgsCgkgICAgICAgIG1vbnRoOiAibG9uZyIsCgkgICAgICAgIGRheTogIm51bWVyaWMiCgkgICAgICB9LCAid2Vla2RheSIpOwoJICAgIH0sCgkgICAgICAgIG1heWJlTWFjcm8gPSBmdW5jdGlvbiBtYXliZU1hY3JvKHRva2VuKSB7CgkgICAgICB2YXIgZm9ybWF0T3B0cyA9IEZvcm1hdHRlci5tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuKTsKCgkgICAgICBpZiAoZm9ybWF0T3B0cykgewoJICAgICAgICByZXR1cm4gX3RoaXMuZm9ybWF0V2l0aFN5c3RlbURlZmF1bHQoZHQsIGZvcm1hdE9wdHMpOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgcmV0dXJuIHRva2VuOwoJICAgICAgfQoJICAgIH0sCgkgICAgICAgIGVyYSA9IGZ1bmN0aW9uIGVyYShsZW5ndGgpIHsKCSAgICAgIHJldHVybiBrbm93bkVuZ2xpc2ggPyBlcmFGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSA6IHN0cmluZyh7CgkgICAgICAgIGVyYTogbGVuZ3RoCgkgICAgICB9LCAiZXJhIik7CgkgICAgfSwKCSAgICAgICAgdG9rZW5Ub1N0cmluZyA9IGZ1bmN0aW9uIHRva2VuVG9TdHJpbmcodG9rZW4pIHsKCSAgICAgIC8vIFdoZXJlIHBvc3NpYmxlOiBodHRwOi8vY2xkci51bmljb2RlLm9yZy90cmFuc2xhdGlvbi9kYXRlLXRpbWUtMS9kYXRlLXRpbWUjVE9DLVN0YW5kYWxvbmUtdnMuLUZvcm1hdC1TdHlsZXMKCSAgICAgIHN3aXRjaCAodG9rZW4pIHsKCSAgICAgICAgLy8gbXMKCSAgICAgICAgY2FzZSAiUyI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC5taWxsaXNlY29uZCk7CgoJICAgICAgICBjYXNlICJ1IjogLy8gZmFsbHMgdGhyb3VnaAoKCSAgICAgICAgY2FzZSAiU1NTIjoKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0Lm1pbGxpc2Vjb25kLCAzKTsKCSAgICAgICAgLy8gc2Vjb25kcwoKCSAgICAgICAgY2FzZSAicyI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC5zZWNvbmQpOwoKCSAgICAgICAgY2FzZSAic3MiOgoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQuc2Vjb25kLCAyKTsKCSAgICAgICAgLy8gZnJhY3Rpb25hbCBzZWNvbmRzCgoJICAgICAgICBjYXNlICJ1dSI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShNYXRoLmZsb29yKGR0Lm1pbGxpc2Vjb25kIC8gMTApLCAyKTsKCgkgICAgICAgIGNhc2UgInV1dSI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShNYXRoLmZsb29yKGR0Lm1pbGxpc2Vjb25kIC8gMTAwKSk7CgkgICAgICAgIC8vIG1pbnV0ZXMKCgkgICAgICAgIGNhc2UgIm0iOgoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQubWludXRlKTsKCgkgICAgICAgIGNhc2UgIm1tIjoKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0Lm1pbnV0ZSwgMik7CgkgICAgICAgIC8vIGhvdXJzCgoJICAgICAgICBjYXNlICJoIjoKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LmhvdXIgJSAxMiA9PT0gMCA/IDEyIDogZHQuaG91ciAlIDEyKTsKCgkgICAgICAgIGNhc2UgImhoIjoKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LmhvdXIgJSAxMiA9PT0gMCA/IDEyIDogZHQuaG91ciAlIDEyLCAyKTsKCgkgICAgICAgIGNhc2UgIkgiOgoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQuaG91cik7CgoJICAgICAgICBjYXNlICJISCI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC5ob3VyLCAyKTsKCSAgICAgICAgLy8gb2Zmc2V0CgoJICAgICAgICBjYXNlICJaIjoKCSAgICAgICAgICAvLyBsaWtlICs2CgkgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7CgkgICAgICAgICAgICBmb3JtYXQ6ICJuYXJyb3ciLAoJICAgICAgICAgICAgYWxsb3daOiBfdGhpcy5vcHRzLmFsbG93WgoJICAgICAgICAgIH0pOwoKCSAgICAgICAgY2FzZSAiWloiOgoJICAgICAgICAgIC8vIGxpa2UgKzA2OjAwCgkgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7CgkgICAgICAgICAgICBmb3JtYXQ6ICJzaG9ydCIsCgkgICAgICAgICAgICBhbGxvd1o6IF90aGlzLm9wdHMuYWxsb3daCgkgICAgICAgICAgfSk7CgoJICAgICAgICBjYXNlICJaWloiOgoJICAgICAgICAgIC8vIGxpa2UgKzA2MDAKCSAgICAgICAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHsKCSAgICAgICAgICAgIGZvcm1hdDogInRlY2hpZSIsCgkgICAgICAgICAgICBhbGxvd1o6IF90aGlzLm9wdHMuYWxsb3daCgkgICAgICAgICAgfSk7CgoJICAgICAgICBjYXNlICJaWlpaIjoKCSAgICAgICAgICAvLyBsaWtlIEVTVAoJICAgICAgICAgIHJldHVybiBkdC56b25lLm9mZnNldE5hbWUoZHQudHMsIHsKCSAgICAgICAgICAgIGZvcm1hdDogInNob3J0IiwKCSAgICAgICAgICAgIGxvY2FsZTogX3RoaXMubG9jLmxvY2FsZQoJICAgICAgICAgIH0pOwoKCSAgICAgICAgY2FzZSAiWlpaWloiOgoJICAgICAgICAgIC8vIGxpa2UgRWFzdGVybiBTdGFuZGFyZCBUaW1lCgkgICAgICAgICAgcmV0dXJuIGR0LnpvbmUub2Zmc2V0TmFtZShkdC50cywgewoJICAgICAgICAgICAgZm9ybWF0OiAibG9uZyIsCgkgICAgICAgICAgICBsb2NhbGU6IF90aGlzLmxvYy5sb2NhbGUKCSAgICAgICAgICB9KTsKCSAgICAgICAgLy8gem9uZQoKCSAgICAgICAgY2FzZSAieiI6CgkgICAgICAgICAgLy8gbGlrZSBBbWVyaWNhL05ld19Zb3JrCgkgICAgICAgICAgcmV0dXJuIGR0LnpvbmVOYW1lOwoJICAgICAgICAvLyBtZXJpZGllbXMKCgkgICAgICAgIGNhc2UgImEiOgoJICAgICAgICAgIHJldHVybiBtZXJpZGllbSgpOwoJICAgICAgICAvLyBkYXRlcwoKCSAgICAgICAgY2FzZSAiZCI6CgkgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsKCSAgICAgICAgICAgIGRheTogIm51bWVyaWMiCgkgICAgICAgICAgfSwgImRheSIpIDogX3RoaXMubnVtKGR0LmRheSk7CgoJICAgICAgICBjYXNlICJkZCI6CgkgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsKCSAgICAgICAgICAgIGRheTogIjItZGlnaXQiCgkgICAgICAgICAgfSwgImRheSIpIDogX3RoaXMubnVtKGR0LmRheSwgMik7CgkgICAgICAgIC8vIHdlZWtkYXlzIC0gc3RhbmRhbG9uZQoKCSAgICAgICAgY2FzZSAiYyI6CgkgICAgICAgICAgLy8gbGlrZSAxCgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC53ZWVrZGF5KTsKCgkgICAgICAgIGNhc2UgImNjYyI6CgkgICAgICAgICAgLy8gbGlrZSAnVHVlcycKCSAgICAgICAgICByZXR1cm4gd2Vla2RheSgic2hvcnQiLCB0cnVlKTsKCgkgICAgICAgIGNhc2UgImNjY2MiOgoJICAgICAgICAgIC8vIGxpa2UgJ1R1ZXNkYXknCgkgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoImxvbmciLCB0cnVlKTsKCgkgICAgICAgIGNhc2UgImNjY2NjIjoKCSAgICAgICAgICAvLyBsaWtlICdUJwoJICAgICAgICAgIHJldHVybiB3ZWVrZGF5KCJuYXJyb3ciLCB0cnVlKTsKCSAgICAgICAgLy8gd2Vla2RheXMgLSBmb3JtYXQKCgkgICAgICAgIGNhc2UgIkUiOgoJICAgICAgICAgIC8vIGxpa2UgMQoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQud2Vla2RheSk7CgoJICAgICAgICBjYXNlICJFRUUiOgoJICAgICAgICAgIC8vIGxpa2UgJ1R1ZXMnCgkgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoInNob3J0IiwgZmFsc2UpOwoKCSAgICAgICAgY2FzZSAiRUVFRSI6CgkgICAgICAgICAgLy8gbGlrZSAnVHVlc2RheScKCSAgICAgICAgICByZXR1cm4gd2Vla2RheSgibG9uZyIsIGZhbHNlKTsKCgkgICAgICAgIGNhc2UgIkVFRUVFIjoKCSAgICAgICAgICAvLyBsaWtlICdUJwoJICAgICAgICAgIHJldHVybiB3ZWVrZGF5KCJuYXJyb3ciLCBmYWxzZSk7CgkgICAgICAgIC8vIG1vbnRocyAtIHN0YW5kYWxvbmUKCgkgICAgICAgIGNhc2UgIkwiOgoJICAgICAgICAgIC8vIGxpa2UgMQoJICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7CgkgICAgICAgICAgICBtb250aDogIm51bWVyaWMiLAoJICAgICAgICAgICAgZGF5OiAibnVtZXJpYyIKCSAgICAgICAgICB9LCAibW9udGgiKSA6IF90aGlzLm51bShkdC5tb250aCk7CgoJICAgICAgICBjYXNlICJMTCI6CgkgICAgICAgICAgLy8gbGlrZSAwMSwgZG9lc24ndCBzZWVtIHRvIHdvcmsKCSAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoewoJICAgICAgICAgICAgbW9udGg6ICIyLWRpZ2l0IiwKCSAgICAgICAgICAgIGRheTogIm51bWVyaWMiCgkgICAgICAgICAgfSwgIm1vbnRoIikgOiBfdGhpcy5udW0oZHQubW9udGgsIDIpOwoKCSAgICAgICAgY2FzZSAiTExMIjoKCSAgICAgICAgICAvLyBsaWtlIEphbgoJICAgICAgICAgIHJldHVybiBtb250aCgic2hvcnQiLCB0cnVlKTsKCgkgICAgICAgIGNhc2UgIkxMTEwiOgoJICAgICAgICAgIC8vIGxpa2UgSmFudWFyeQoJICAgICAgICAgIHJldHVybiBtb250aCgibG9uZyIsIHRydWUpOwoKCSAgICAgICAgY2FzZSAiTExMTEwiOgoJICAgICAgICAgIC8vIGxpa2UgSgoJICAgICAgICAgIHJldHVybiBtb250aCgibmFycm93IiwgdHJ1ZSk7CgkgICAgICAgIC8vIG1vbnRocyAtIGZvcm1hdAoKCSAgICAgICAgY2FzZSAiTSI6CgkgICAgICAgICAgLy8gbGlrZSAxCgkgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsKCSAgICAgICAgICAgIG1vbnRoOiAibnVtZXJpYyIKCSAgICAgICAgICB9LCAibW9udGgiKSA6IF90aGlzLm51bShkdC5tb250aCk7CgoJICAgICAgICBjYXNlICJNTSI6CgkgICAgICAgICAgLy8gbGlrZSAwMQoJICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7CgkgICAgICAgICAgICBtb250aDogIjItZGlnaXQiCgkgICAgICAgICAgfSwgIm1vbnRoIikgOiBfdGhpcy5udW0oZHQubW9udGgsIDIpOwoKCSAgICAgICAgY2FzZSAiTU1NIjoKCSAgICAgICAgICAvLyBsaWtlIEphbgoJICAgICAgICAgIHJldHVybiBtb250aCgic2hvcnQiLCBmYWxzZSk7CgoJICAgICAgICBjYXNlICJNTU1NIjoKCSAgICAgICAgICAvLyBsaWtlIEphbnVhcnkKCSAgICAgICAgICByZXR1cm4gbW9udGgoImxvbmciLCBmYWxzZSk7CgoJICAgICAgICBjYXNlICJNTU1NTSI6CgkgICAgICAgICAgLy8gbGlrZSBKCgkgICAgICAgICAgcmV0dXJuIG1vbnRoKCJuYXJyb3ciLCBmYWxzZSk7CgkgICAgICAgIC8vIHllYXJzCgoJICAgICAgICBjYXNlICJ5IjoKCSAgICAgICAgICAvLyBsaWtlIDIwMTQKCSAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoewoJICAgICAgICAgICAgeWVhcjogIm51bWVyaWMiCgkgICAgICAgICAgfSwgInllYXIiKSA6IF90aGlzLm51bShkdC55ZWFyKTsKCgkgICAgICAgIGNhc2UgInl5IjoKCSAgICAgICAgICAvLyBsaWtlIDE0CgkgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsKCSAgICAgICAgICAgIHllYXI6ICIyLWRpZ2l0IgoJICAgICAgICAgIH0sICJ5ZWFyIikgOiBfdGhpcy5udW0oZHQueWVhci50b1N0cmluZygpLnNsaWNlKC0yKSwgMik7CgoJICAgICAgICBjYXNlICJ5eXl5IjoKCSAgICAgICAgICAvLyBsaWtlIDAwMTIKCSAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoewoJICAgICAgICAgICAgeWVhcjogIm51bWVyaWMiCgkgICAgICAgICAgfSwgInllYXIiKSA6IF90aGlzLm51bShkdC55ZWFyLCA0KTsKCgkgICAgICAgIGNhc2UgInl5eXl5eSI6CgkgICAgICAgICAgLy8gbGlrZSAwMDAwMTIKCSAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoewoJICAgICAgICAgICAgeWVhcjogIm51bWVyaWMiCgkgICAgICAgICAgfSwgInllYXIiKSA6IF90aGlzLm51bShkdC55ZWFyLCA2KTsKCSAgICAgICAgLy8gZXJhcwoKCSAgICAgICAgY2FzZSAiRyI6CgkgICAgICAgICAgLy8gbGlrZSBBRAoJICAgICAgICAgIHJldHVybiBlcmEoInNob3J0Iik7CgoJICAgICAgICBjYXNlICJHRyI6CgkgICAgICAgICAgLy8gbGlrZSBBbm5vIERvbWluaQoJICAgICAgICAgIHJldHVybiBlcmEoImxvbmciKTsKCgkgICAgICAgIGNhc2UgIkdHR0dHIjoKCSAgICAgICAgICByZXR1cm4gZXJhKCJuYXJyb3ciKTsKCgkgICAgICAgIGNhc2UgImtrIjoKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LndlZWtZZWFyLnRvU3RyaW5nKCkuc2xpY2UoLTIpLCAyKTsKCgkgICAgICAgIGNhc2UgImtra2siOgoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQud2Vla1llYXIsIDQpOwoKCSAgICAgICAgY2FzZSAiVyI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC53ZWVrTnVtYmVyKTsKCgkgICAgICAgIGNhc2UgIldXIjoKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LndlZWtOdW1iZXIsIDIpOwoKCSAgICAgICAgY2FzZSAibyI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC5vcmRpbmFsKTsKCgkgICAgICAgIGNhc2UgIm9vbyI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC5vcmRpbmFsLCAzKTsKCgkgICAgICAgIGNhc2UgInEiOgoJICAgICAgICAgIC8vIGxpa2UgMQoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQucXVhcnRlcik7CgoJICAgICAgICBjYXNlICJxcSI6CgkgICAgICAgICAgLy8gbGlrZSAwMQoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQucXVhcnRlciwgMik7CgoJICAgICAgICBjYXNlICJYIjoKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKE1hdGguZmxvb3IoZHQudHMgLyAxMDAwKSk7CgoJICAgICAgICBjYXNlICJ4IjoKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LnRzKTsKCgkgICAgICAgIGRlZmF1bHQ6CgkgICAgICAgICAgcmV0dXJuIG1heWJlTWFjcm8odG9rZW4pOwoJICAgICAgfQoJICAgIH07CgoJICAgIHJldHVybiBzdHJpbmdpZnlUb2tlbnMoRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZtdCksIHRva2VuVG9TdHJpbmcpOwoJICB9OwoKCSAgX3Byb3RvLmZvcm1hdER1cmF0aW9uRnJvbVN0cmluZyA9IGZ1bmN0aW9uIGZvcm1hdER1cmF0aW9uRnJvbVN0cmluZyhkdXIsIGZtdCkgewoJICAgIHZhciBfdGhpczIgPSB0aGlzOwoKCSAgICB2YXIgdG9rZW5Ub0ZpZWxkID0gZnVuY3Rpb24gdG9rZW5Ub0ZpZWxkKHRva2VuKSB7CgkgICAgICBzd2l0Y2ggKHRva2VuWzBdKSB7CgkgICAgICAgIGNhc2UgIlMiOgoJICAgICAgICAgIHJldHVybiAibWlsbGlzZWNvbmQiOwoKCSAgICAgICAgY2FzZSAicyI6CgkgICAgICAgICAgcmV0dXJuICJzZWNvbmQiOwoKCSAgICAgICAgY2FzZSAibSI6CgkgICAgICAgICAgcmV0dXJuICJtaW51dGUiOwoKCSAgICAgICAgY2FzZSAiaCI6CgkgICAgICAgICAgcmV0dXJuICJob3VyIjsKCgkgICAgICAgIGNhc2UgImQiOgoJICAgICAgICAgIHJldHVybiAiZGF5IjsKCgkgICAgICAgIGNhc2UgInciOgoJICAgICAgICAgIHJldHVybiAid2VlayI7CgoJICAgICAgICBjYXNlICJNIjoKCSAgICAgICAgICByZXR1cm4gIm1vbnRoIjsKCgkgICAgICAgIGNhc2UgInkiOgoJICAgICAgICAgIHJldHVybiAieWVhciI7CgoJICAgICAgICBkZWZhdWx0OgoJICAgICAgICAgIHJldHVybiBudWxsOwoJICAgICAgfQoJICAgIH0sCgkgICAgICAgIHRva2VuVG9TdHJpbmcgPSBmdW5jdGlvbiB0b2tlblRvU3RyaW5nKGxpbGR1cikgewoJICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0b2tlbikgewoJICAgICAgICB2YXIgbWFwcGVkID0gdG9rZW5Ub0ZpZWxkKHRva2VuKTsKCgkgICAgICAgIGlmIChtYXBwZWQpIHsKCSAgICAgICAgICByZXR1cm4gX3RoaXMyLm51bShsaWxkdXIuZ2V0KG1hcHBlZCksIHRva2VuLmxlbmd0aCk7CgkgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgcmV0dXJuIHRva2VuOwoJICAgICAgICB9CgkgICAgICB9OwoJICAgIH0sCgkgICAgICAgIHRva2VucyA9IEZvcm1hdHRlci5wYXJzZUZvcm1hdChmbXQpLAoJICAgICAgICByZWFsVG9rZW5zID0gdG9rZW5zLnJlZHVjZShmdW5jdGlvbiAoZm91bmQsIF9yZWYpIHsKCSAgICAgIHZhciBsaXRlcmFsID0gX3JlZi5saXRlcmFsLAoJICAgICAgICAgIHZhbCA9IF9yZWYudmFsOwoJICAgICAgcmV0dXJuIGxpdGVyYWwgPyBmb3VuZCA6IGZvdW5kLmNvbmNhdCh2YWwpOwoJICAgIH0sIFtdKSwKCSAgICAgICAgY29sbGFwc2VkID0gZHVyLnNoaWZ0VG8uYXBwbHkoZHVyLCByZWFsVG9rZW5zLm1hcCh0b2tlblRvRmllbGQpLmZpbHRlcihmdW5jdGlvbiAodCkgewoJICAgICAgcmV0dXJuIHQ7CgkgICAgfSkpOwoKCSAgICByZXR1cm4gc3RyaW5naWZ5VG9rZW5zKHRva2VucywgdG9rZW5Ub1N0cmluZyhjb2xsYXBzZWQpKTsKCSAgfTsKCgkgIHJldHVybiBGb3JtYXR0ZXI7Cgl9KCk7CgoJdmFyIEludmFsaWQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewoJICBmdW5jdGlvbiBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pIHsKCSAgICB0aGlzLnJlYXNvbiA9IHJlYXNvbjsKCSAgICB0aGlzLmV4cGxhbmF0aW9uID0gZXhwbGFuYXRpb247CgkgIH0KCgkgIHZhciBfcHJvdG8gPSBJbnZhbGlkLnByb3RvdHlwZTsKCgkgIF9wcm90by50b01lc3NhZ2UgPSBmdW5jdGlvbiB0b01lc3NhZ2UoKSB7CgkgICAgaWYgKHRoaXMuZXhwbGFuYXRpb24pIHsKCSAgICAgIHJldHVybiB0aGlzLnJlYXNvbiArICI6ICIgKyB0aGlzLmV4cGxhbmF0aW9uOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gdGhpcy5yZWFzb247CgkgICAgfQoJICB9OwoKCSAgcmV0dXJuIEludmFsaWQ7Cgl9KCk7CgoJLyoqCgkgKiBAaW50ZXJmYWNlCgkgKi8KCgl2YXIgWm9uZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CgkgIGZ1bmN0aW9uIFpvbmUoKSB7fQoKCSAgdmFyIF9wcm90byA9IFpvbmUucHJvdG90eXBlOwoKCSAgLyoqCgkgICAqIFJldHVybnMgdGhlIG9mZnNldCdzIGNvbW1vbiBuYW1lIChzdWNoIGFzIEVTVCkgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXAKCSAgICogQGFic3RyYWN0CgkgICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBuYW1lCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyB0byBhZmZlY3QgdGhlIGZvcm1hdAoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5mb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uIEFjY2VwdHMgJ2xvbmcnIG9yICdzaG9ydCcuCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmxvY2FsZSAtIFdoYXQgbG9jYWxlIHRvIHJldHVybiB0aGUgb2Zmc2V0IG5hbWUgaW4uCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIF9wcm90by5vZmZzZXROYW1lID0gZnVuY3Rpb24gb2Zmc2V0TmFtZSh0cywgb3B0cykgewoJICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgdGhlIG9mZnNldCdzIHZhbHVlIGFzIGEgc3RyaW5nCgkgICAqIEBhYnN0cmFjdAoJICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgb2Zmc2V0CgkgICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uCgkgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICduYXJyb3cnLCAnc2hvcnQnLCBvciAndGVjaGllJy4gUmV0dXJuaW5nICcrNicsICcrMDY6MDAnLCBvciAnKzA2MDAnIHJlc3BlY3RpdmVseQoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8uZm9ybWF0T2Zmc2V0ID0gZnVuY3Rpb24gZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHsKCSAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gdGhlIG9mZnNldCBpbiBtaW51dGVzIGZvciB0aGlzIHpvbmUgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXAuCgkgICAqIEBhYnN0cmFjdAoJICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGNvbXB1dGUgdGhlIG9mZnNldAoJICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAqLwoJICA7CgoJICBfcHJvdG8ub2Zmc2V0ID0gZnVuY3Rpb24gb2Zmc2V0KHRzKSB7CgkgICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBab25lIGlzIGVxdWFsIHRvIGFub3RoZXIgem9uZQoJICAgKiBAYWJzdHJhY3QKCSAgICogQHBhcmFtIHtab25lfSBvdGhlclpvbmUgLSB0aGUgem9uZSB0byBjb21wYXJlCgkgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICBfcHJvdG8uZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyWm9uZSkgewoJICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgWm9uZSBpcyB2YWxpZC4KCSAgICogQGFic3RyYWN0CgkgICAqIEB0eXBlIHtib29sZWFufQoJICAgKi8KCSAgOwoKCSAgX2NyZWF0ZUNsYXNzKFpvbmUsIFt7CgkgICAga2V5OiAidHlwZSIsCgkgICAgZ2V0OgoJICAgIC8qKgoJICAgICAqIFRoZSB0eXBlIG9mIHpvbmUKCSAgICAgKiBAYWJzdHJhY3QKCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFRoZSBuYW1lIG9mIHRoaXMgem9uZS4KCSAgICAgKiBAYWJzdHJhY3QKCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIm5hbWUiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTsKCSAgICB9CgkgIH0sIHsKCSAgICBrZXk6ICJpYW5hTmFtZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5uYW1lOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIG9mZnNldCBpcyBrbm93biB0byBiZSBmaXhlZCBmb3IgdGhlIHdob2xlIHllYXIuCgkgICAgICogQGFic3RyYWN0CgkgICAgICogQHR5cGUge2Jvb2xlYW59CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaXNVbml2ZXJzYWwiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTsKCSAgICB9CgkgIH0sIHsKCSAgICBrZXk6ICJpc1ZhbGlkIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CgkgICAgfQoJICB9XSk7CgoJICByZXR1cm4gWm9uZTsKCX0oKTsKCgl2YXIgc2luZ2xldG9uJDEgPSBudWxsOwoJLyoqCgkgKiBSZXByZXNlbnRzIHRoZSBsb2NhbCB6b25lIGZvciB0aGlzIEphdmFTY3JpcHQgZW52aXJvbm1lbnQuCgkgKiBAaW1wbGVtZW50cyB7Wm9uZX0KCSAqLwoKCXZhciBTeXN0ZW1ab25lID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfWm9uZSkgewoJICBfaW5oZXJpdHNMb29zZShTeXN0ZW1ab25lLCBfWm9uZSk7CgoJICBmdW5jdGlvbiBTeXN0ZW1ab25lKCkgewoJICAgIHJldHVybiBfWm9uZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CgkgIH0KCgkgIHZhciBfcHJvdG8gPSBTeXN0ZW1ab25lLnByb3RvdHlwZTsKCgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIF9wcm90by5vZmZzZXROYW1lID0gZnVuY3Rpb24gb2Zmc2V0TmFtZSh0cywgX3JlZikgewoJICAgIHZhciBmb3JtYXQgPSBfcmVmLmZvcm1hdCwKCSAgICAgICAgbG9jYWxlID0gX3JlZi5sb2NhbGU7CgkgICAgcmV0dXJuIHBhcnNlWm9uZUluZm8odHMsIGZvcm1hdCwgbG9jYWxlKTsKCSAgfQoJICAvKiogQG92ZXJyaWRlICoqLwoJICA7CgoJICBfcHJvdG8uZm9ybWF0T2Zmc2V0ID0gZnVuY3Rpb24gZm9ybWF0T2Zmc2V0JDEodHMsIGZvcm1hdCkgewoJICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5vZmZzZXQodHMpLCBmb3JtYXQpOwoJICB9CgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIDsKCgkgIF9wcm90by5vZmZzZXQgPSBmdW5jdGlvbiBvZmZzZXQodHMpIHsKCSAgICByZXR1cm4gLW5ldyBEYXRlKHRzKS5nZXRUaW1lem9uZU9mZnNldCgpOwoJICB9CgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIDsKCgkgIF9wcm90by5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMob3RoZXJab25lKSB7CgkgICAgcmV0dXJuIG90aGVyWm9uZS50eXBlID09PSAic3lzdGVtIjsKCSAgfQoJICAvKiogQG92ZXJyaWRlICoqLwoJICA7CgoJICBfY3JlYXRlQ2xhc3MoU3lzdGVtWm9uZSwgW3sKCSAgICBrZXk6ICJ0eXBlIiwKCSAgICBnZXQ6CgkgICAgLyoqIEBvdmVycmlkZSAqKi8KCSAgICBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gInN5c3RlbSI7CgkgICAgfQoJICAgIC8qKiBAb3ZlcnJpZGUgKiovCgoJICB9LCB7CgkgICAga2V5OiAibmFtZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZTsKCSAgICB9CgkgICAgLyoqIEBvdmVycmlkZSAqKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJpc1VuaXZlcnNhbCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gZmFsc2U7CgkgICAgfQoJICB9LCB7CgkgICAga2V5OiAiaXNWYWxpZCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdHJ1ZTsKCSAgICB9CgkgIH1dLCBbewoJICAgIGtleTogImluc3RhbmNlIiwKCSAgICBnZXQ6CgkgICAgLyoqCgkgICAgICogR2V0IGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBsb2NhbCB6b25lCgkgICAgICogQHJldHVybiB7U3lzdGVtWm9uZX0KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICBpZiAoc2luZ2xldG9uJDEgPT09IG51bGwpIHsKCSAgICAgICAgc2luZ2xldG9uJDEgPSBuZXcgU3lzdGVtWm9uZSgpOwoJICAgICAgfQoKCSAgICAgIHJldHVybiBzaW5nbGV0b24kMTsKCSAgICB9CgkgIH1dKTsKCgkgIHJldHVybiBTeXN0ZW1ab25lOwoJfShab25lKTsKCgl2YXIgZHRmQ2FjaGUgPSB7fTsKCglmdW5jdGlvbiBtYWtlRFRGKHpvbmUpIHsKCSAgaWYgKCFkdGZDYWNoZVt6b25lXSkgewoJICAgIGR0ZkNhY2hlW3pvbmVdID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIiwgewoJICAgICAgaG91cjEyOiBmYWxzZSwKCSAgICAgIHRpbWVab25lOiB6b25lLAoJICAgICAgeWVhcjogIm51bWVyaWMiLAoJICAgICAgbW9udGg6ICIyLWRpZ2l0IiwKCSAgICAgIGRheTogIjItZGlnaXQiLAoJICAgICAgaG91cjogIjItZGlnaXQiLAoJICAgICAgbWludXRlOiAiMi1kaWdpdCIsCgkgICAgICBzZWNvbmQ6ICIyLWRpZ2l0IiwKCSAgICAgIGVyYTogInNob3J0IgoJICAgIH0pOwoJICB9CgoJICByZXR1cm4gZHRmQ2FjaGVbem9uZV07Cgl9CgoJdmFyIHR5cGVUb1BvcyA9IHsKCSAgeWVhcjogMCwKCSAgbW9udGg6IDEsCgkgIGRheTogMiwKCSAgZXJhOiAzLAoJICBob3VyOiA0LAoJICBtaW51dGU6IDUsCgkgIHNlY29uZDogNgoJfTsKCglmdW5jdGlvbiBoYWNreU9mZnNldChkdGYsIGRhdGUpIHsKCSAgdmFyIGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXQoZGF0ZSkucmVwbGFjZSgvXHUyMDBFL2csICIiKSwKCSAgICAgIHBhcnNlZCA9IC8oXGQrKVwvKFxkKylcLyhcZCspIChBRHxCQyksPyAoXGQrKTooXGQrKTooXGQrKS8uZXhlYyhmb3JtYXR0ZWQpLAoJICAgICAgZk1vbnRoID0gcGFyc2VkWzFdLAoJICAgICAgZkRheSA9IHBhcnNlZFsyXSwKCSAgICAgIGZZZWFyID0gcGFyc2VkWzNdLAoJICAgICAgZmFkT3JCYyA9IHBhcnNlZFs0XSwKCSAgICAgIGZIb3VyID0gcGFyc2VkWzVdLAoJICAgICAgZk1pbnV0ZSA9IHBhcnNlZFs2XSwKCSAgICAgIGZTZWNvbmQgPSBwYXJzZWRbN107CgkgIHJldHVybiBbZlllYXIsIGZNb250aCwgZkRheSwgZmFkT3JCYywgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdOwoJfQoKCWZ1bmN0aW9uIHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkgewoJICB2YXIgZm9ybWF0dGVkID0gZHRmLmZvcm1hdFRvUGFydHMoZGF0ZSk7CgkgIHZhciBmaWxsZWQgPSBbXTsKCgkgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9ybWF0dGVkLmxlbmd0aDsgaSsrKSB7CgkgICAgdmFyIF9mb3JtYXR0ZWQkaSA9IGZvcm1hdHRlZFtpXSwKCSAgICAgICAgdHlwZSA9IF9mb3JtYXR0ZWQkaS50eXBlLAoJICAgICAgICB2YWx1ZSA9IF9mb3JtYXR0ZWQkaS52YWx1ZTsKCSAgICB2YXIgcG9zID0gdHlwZVRvUG9zW3R5cGVdOwoKCSAgICBpZiAodHlwZSA9PT0gImVyYSIpIHsKCSAgICAgIGZpbGxlZFtwb3NdID0gdmFsdWU7CgkgICAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQocG9zKSkgewoJICAgICAgZmlsbGVkW3Bvc10gPSBwYXJzZUludCh2YWx1ZSwgMTApOwoJICAgIH0KCSAgfQoKCSAgcmV0dXJuIGZpbGxlZDsKCX0KCgl2YXIgaWFuYVpvbmVDYWNoZSA9IHt9OwoJLyoqCgkgKiBBIHpvbmUgaWRlbnRpZmllZCBieSBhbiBJQU5BIGlkZW50aWZpZXIsIGxpa2UgQW1lcmljYS9OZXdfWW9yawoJICogQGltcGxlbWVudHMge1pvbmV9CgkgKi8KCgl2YXIgSUFOQVpvbmUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9ab25lKSB7CgkgIF9pbmhlcml0c0xvb3NlKElBTkFab25lLCBfWm9uZSk7CgoJICAvKioKCSAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBab25lIG5hbWUKCSAgICogQHJldHVybiB7SUFOQVpvbmV9CgkgICAqLwoJICBJQU5BWm9uZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUobmFtZSkgewoJICAgIGlmICghaWFuYVpvbmVDYWNoZVtuYW1lXSkgewoJICAgICAgaWFuYVpvbmVDYWNoZVtuYW1lXSA9IG5ldyBJQU5BWm9uZShuYW1lKTsKCSAgICB9CgoJICAgIHJldHVybiBpYW5hWm9uZUNhY2hlW25hbWVdOwoJICB9CgkgIC8qKgoJICAgKiBSZXNldCBsb2NhbCBjYWNoZXMuIFNob3VsZCBvbmx5IGJlIG5lY2Vzc2FyeSBpbiB0ZXN0aW5nIHNjZW5hcmlvcy4KCSAgICogQHJldHVybiB7dm9pZH0KCSAgICovCgkgIDsKCgkgIElBTkFab25lLnJlc2V0Q2FjaGUgPSBmdW5jdGlvbiByZXNldENhY2hlKCkgewoJICAgIGlhbmFab25lQ2FjaGUgPSB7fTsKCSAgICBkdGZDYWNoZSA9IHt9OwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHN0cmluZyBpcyBhIHZhbGlkIHNwZWNpZmllci4gVGhpcyBvbmx5IGNoZWNrcyB0aGUgc3RyaW5nJ3MgZm9ybWF0LCBub3QgdGhhdCB0aGUgc3BlY2lmaWVyIGlkZW50aWZpZXMgYSBrbm93biB6b25lOyBzZWUgaXNWYWxpZFpvbmUgZm9yIHRoYXQuCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gVGhlIHN0cmluZyB0byBjaGVjayB2YWxpZGl0eSBvbgoJICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkU3BlY2lmaWVyKCJBbWVyaWNhL05ld19Zb3JrIikgLy89PiB0cnVlCgkgICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRTcGVjaWZpZXIoIlNwb3J0fn5ibG9ycCIpIC8vPT4gZmFsc2UKCSAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZSBmb3Igc29tZSB2YWxpZCBJQU5BIG5hbWVzLiBVc2UgaXNWYWxpZFpvbmUgaW5zdGVhZC4KCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIElBTkFab25lLmlzVmFsaWRTcGVjaWZpZXIgPSBmdW5jdGlvbiBpc1ZhbGlkU3BlY2lmaWVyKHMpIHsKCSAgICByZXR1cm4gdGhpcy5pc1ZhbGlkWm9uZShzKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBzdHJpbmcgaWRlbnRpZmllcyBhIHJlYWwgem9uZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gem9uZSAtIFRoZSBzdHJpbmcgdG8gY2hlY2sKCSAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoIkFtZXJpY2EvTmV3X1lvcmsiKSAvLz0+IHRydWUKCSAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoIkZhbnRhc2lhL0Nhc3RsZSIpIC8vPT4gZmFsc2UKCSAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoIlNwb3J0fn5ibG9ycCIpIC8vPT4gZmFsc2UKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIElBTkFab25lLmlzVmFsaWRab25lID0gZnVuY3Rpb24gaXNWYWxpZFpvbmUoem9uZSkgewoJICAgIGlmICghem9uZSkgewoJICAgICAgcmV0dXJuIGZhbHNlOwoJICAgIH0KCgkgICAgdHJ5IHsKCSAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCJlbi1VUyIsIHsKCSAgICAgICAgdGltZVpvbmU6IHpvbmUKCSAgICAgIH0pLmZvcm1hdCgpOwoJICAgICAgcmV0dXJuIHRydWU7CgkgICAgfSBjYXRjaCAoZSkgewoJICAgICAgcmV0dXJuIGZhbHNlOwoJICAgIH0KCSAgfTsKCgkgIGZ1bmN0aW9uIElBTkFab25lKG5hbWUpIHsKCSAgICB2YXIgX3RoaXM7CgoJICAgIF90aGlzID0gX1pvbmUuY2FsbCh0aGlzKSB8fCB0aGlzOwoJICAgIC8qKiBAcHJpdmF0ZSAqKi8KCgkgICAgX3RoaXMuem9uZU5hbWUgPSBuYW1lOwoJICAgIC8qKiBAcHJpdmF0ZSAqKi8KCgkgICAgX3RoaXMudmFsaWQgPSBJQU5BWm9uZS5pc1ZhbGlkWm9uZShuYW1lKTsKCSAgICByZXR1cm4gX3RoaXM7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCgoJICB2YXIgX3Byb3RvID0gSUFOQVpvbmUucHJvdG90eXBlOwoKCSAgLyoqIEBvdmVycmlkZSAqKi8KCSAgX3Byb3RvLm9mZnNldE5hbWUgPSBmdW5jdGlvbiBvZmZzZXROYW1lKHRzLCBfcmVmKSB7CgkgICAgdmFyIGZvcm1hdCA9IF9yZWYuZm9ybWF0LAoJICAgICAgICBsb2NhbGUgPSBfcmVmLmxvY2FsZTsKCSAgICByZXR1cm4gcGFyc2Vab25lSW5mbyh0cywgZm9ybWF0LCBsb2NhbGUsIHRoaXMubmFtZSk7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCSAgOwoKCSAgX3Byb3RvLmZvcm1hdE9mZnNldCA9IGZ1bmN0aW9uIGZvcm1hdE9mZnNldCQxKHRzLCBmb3JtYXQpIHsKCSAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHRoaXMub2Zmc2V0KHRzKSwgZm9ybWF0KTsKCSAgfQoJICAvKiogQG92ZXJyaWRlICoqLwoJICA7CgoJICBfcHJvdG8ub2Zmc2V0ID0gZnVuY3Rpb24gb2Zmc2V0KHRzKSB7CgkgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh0cyk7CgkgICAgaWYgKGlzTmFOKGRhdGUpKSByZXR1cm4gTmFOOwoJICAgIHZhciBkdGYgPSBtYWtlRFRGKHRoaXMubmFtZSk7CgoJICAgIHZhciBfcmVmMiA9IGR0Zi5mb3JtYXRUb1BhcnRzID8gcGFydHNPZmZzZXQoZHRmLCBkYXRlKSA6IGhhY2t5T2Zmc2V0KGR0ZiwgZGF0ZSksCgkgICAgICAgIHllYXIgPSBfcmVmMlswXSwKCSAgICAgICAgbW9udGggPSBfcmVmMlsxXSwKCSAgICAgICAgZGF5ID0gX3JlZjJbMl0sCgkgICAgICAgIGFkT3JCYyA9IF9yZWYyWzNdLAoJICAgICAgICBob3VyID0gX3JlZjJbNF0sCgkgICAgICAgIG1pbnV0ZSA9IF9yZWYyWzVdLAoJICAgICAgICBzZWNvbmQgPSBfcmVmMls2XTsKCgkgICAgaWYgKGFkT3JCYyA9PT0gIkJDIikgewoJICAgICAgeWVhciA9IC1NYXRoLmFicyh5ZWFyKSArIDE7CgkgICAgfSAvLyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGhvdXIxMiBhbmQgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTAyNTU2NCZjYW49MiZxPSUyMjI0JTNBMDAlMjIlMjBkYXRldGltZWZvcm1hdAoKCgkgICAgdmFyIGFkanVzdGVkSG91ciA9IGhvdXIgPT09IDI0ID8gMCA6IGhvdXI7CgkgICAgdmFyIGFzVVRDID0gb2JqVG9Mb2NhbFRTKHsKCSAgICAgIHllYXI6IHllYXIsCgkgICAgICBtb250aDogbW9udGgsCgkgICAgICBkYXk6IGRheSwKCSAgICAgIGhvdXI6IGFkanVzdGVkSG91ciwKCSAgICAgIG1pbnV0ZTogbWludXRlLAoJICAgICAgc2Vjb25kOiBzZWNvbmQsCgkgICAgICBtaWxsaXNlY29uZDogMAoJICAgIH0pOwoJICAgIHZhciBhc1RTID0gK2RhdGU7CgkgICAgdmFyIG92ZXIgPSBhc1RTICUgMTAwMDsKCSAgICBhc1RTIC09IG92ZXIgPj0gMCA/IG92ZXIgOiAxMDAwICsgb3ZlcjsKCSAgICByZXR1cm4gKGFzVVRDIC0gYXNUUykgLyAoNjAgKiAxMDAwKTsKCSAgfQoJICAvKiogQG92ZXJyaWRlICoqLwoJICA7CgoJICBfcHJvdG8uZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyWm9uZSkgewoJICAgIHJldHVybiBvdGhlclpvbmUudHlwZSA9PT0gImlhbmEiICYmIG90aGVyWm9uZS5uYW1lID09PSB0aGlzLm5hbWU7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCSAgOwoKCSAgX2NyZWF0ZUNsYXNzKElBTkFab25lLCBbewoJICAgIGtleTogInR5cGUiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuICJpYW5hIjsKCSAgICB9CgkgICAgLyoqIEBvdmVycmlkZSAqKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJuYW1lIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLnpvbmVOYW1lOwoJICAgIH0KCSAgICAvKiogQG92ZXJyaWRlICoqLwoKCSAgfSwgewoJICAgIGtleTogImlzVW5pdmVyc2FsIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBmYWxzZTsKCSAgICB9CgkgIH0sIHsKCSAgICBrZXk6ICJpc1ZhbGlkIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLnZhbGlkOwoJICAgIH0KCSAgfV0pOwoKCSAgcmV0dXJuIElBTkFab25lOwoJfShab25lKTsKCgl2YXIgc2luZ2xldG9uID0gbnVsbDsKCS8qKgoJICogQSB6b25lIHdpdGggYSBmaXhlZCBvZmZzZXQgKG1lYW5pbmcgbm8gRFNUKQoJICogQGltcGxlbWVudHMge1pvbmV9CgkgKi8KCgl2YXIgRml4ZWRPZmZzZXRab25lID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfWm9uZSkgewoJICBfaW5oZXJpdHNMb29zZShGaXhlZE9mZnNldFpvbmUsIF9ab25lKTsKCgkgIC8qKgoJICAgKiBHZXQgYW4gaW5zdGFuY2Ugd2l0aCBhIHNwZWNpZmllZCBvZmZzZXQKCSAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIFRoZSBvZmZzZXQgaW4gbWludXRlcwoJICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9CgkgICAqLwoJICBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UgPSBmdW5jdGlvbiBpbnN0YW5jZShvZmZzZXQpIHsKCSAgICByZXR1cm4gb2Zmc2V0ID09PSAwID8gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlIDogbmV3IEZpeGVkT2Zmc2V0Wm9uZShvZmZzZXQpOwoJICB9CgkgIC8qKgoJICAgKiBHZXQgYW4gaW5zdGFuY2Ugb2YgRml4ZWRPZmZzZXRab25lIGZyb20gYSBVVEMgb2Zmc2V0IHN0cmluZywgbGlrZSAiVVRDKzYiCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gVGhlIG9mZnNldCBzdHJpbmcgdG8gcGFyc2UKCSAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKCJVVEMrNiIpCgkgICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcigiVVRDKzA2IikKCSAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKCJVVEMtNjowMCIpCgkgICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX0KCSAgICovCgkgIDsKCgkgIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllciA9IGZ1bmN0aW9uIHBhcnNlU3BlY2lmaWVyKHMpIHsKCSAgICBpZiAocykgewoJICAgICAgdmFyIHIgPSBzLm1hdGNoKC9edXRjKD86KFsrLV1cZHsxLDJ9KSg/OjooXGR7Mn0pKT8pPyQvaSk7CgoJICAgICAgaWYgKHIpIHsKCSAgICAgICAgcmV0dXJuIG5ldyBGaXhlZE9mZnNldFpvbmUoc2lnbmVkT2Zmc2V0KHJbMV0sIHJbMl0pKTsKCSAgICAgIH0KCSAgICB9CgoJICAgIHJldHVybiBudWxsOwoJICB9OwoKCSAgZnVuY3Rpb24gRml4ZWRPZmZzZXRab25lKG9mZnNldCkgewoJICAgIHZhciBfdGhpczsKCgkgICAgX3RoaXMgPSBfWm9uZS5jYWxsKHRoaXMpIHx8IHRoaXM7CgkgICAgLyoqIEBwcml2YXRlICoqLwoKCSAgICBfdGhpcy5maXhlZCA9IG9mZnNldDsKCSAgICByZXR1cm4gX3RoaXM7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCgoJICB2YXIgX3Byb3RvID0gRml4ZWRPZmZzZXRab25lLnByb3RvdHlwZTsKCgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIF9wcm90by5vZmZzZXROYW1lID0gZnVuY3Rpb24gb2Zmc2V0TmFtZSgpIHsKCSAgICByZXR1cm4gdGhpcy5uYW1lOwoJICB9CgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIDsKCgkgIF9wcm90by5mb3JtYXRPZmZzZXQgPSBmdW5jdGlvbiBmb3JtYXRPZmZzZXQkMSh0cywgZm9ybWF0KSB7CgkgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh0aGlzLmZpeGVkLCBmb3JtYXQpOwoJICB9CgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIDsKCgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIF9wcm90by5vZmZzZXQgPSBmdW5jdGlvbiBvZmZzZXQoKSB7CgkgICAgcmV0dXJuIHRoaXMuZml4ZWQ7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCSAgOwoKCSAgX3Byb3RvLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhvdGhlclpvbmUpIHsKCSAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09ICJmaXhlZCIgJiYgb3RoZXJab25lLmZpeGVkID09PSB0aGlzLmZpeGVkOwoJICB9CgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIDsKCgkgIF9jcmVhdGVDbGFzcyhGaXhlZE9mZnNldFpvbmUsIFt7CgkgICAga2V5OiAidHlwZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gImZpeGVkIjsKCSAgICB9CgkgICAgLyoqIEBvdmVycmlkZSAqKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJuYW1lIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmZpeGVkID09PSAwID8gIlVUQyIgOiAiVVRDIiArIGZvcm1hdE9mZnNldCh0aGlzLmZpeGVkLCAibmFycm93Iik7CgkgICAgfQoJICB9LCB7CgkgICAga2V5OiAiaWFuYU5hbWUiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgaWYgKHRoaXMuZml4ZWQgPT09IDApIHsKCSAgICAgICAgcmV0dXJuICJFdGMvVVRDIjsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHJldHVybiAiRXRjL0dNVCIgKyBmb3JtYXRPZmZzZXQoLXRoaXMuZml4ZWQsICJuYXJyb3ciKTsKCSAgICAgIH0KCSAgICB9CgkgIH0sIHsKCSAgICBrZXk6ICJpc1VuaXZlcnNhbCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdHJ1ZTsKCSAgICB9CgkgIH0sIHsKCSAgICBrZXk6ICJpc1ZhbGlkIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0cnVlOwoJICAgIH0KCSAgfV0sIFt7CgkgICAga2V5OiAidXRjSW5zdGFuY2UiLAoJICAgIGdldDoKCSAgICAvKioKCSAgICAgKiBHZXQgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgVVRDCgkgICAgICogQHJldHVybiB7Rml4ZWRPZmZzZXRab25lfQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIGlmIChzaW5nbGV0b24gPT09IG51bGwpIHsKCSAgICAgICAgc2luZ2xldG9uID0gbmV3IEZpeGVkT2Zmc2V0Wm9uZSgwKTsKCSAgICAgIH0KCgkgICAgICByZXR1cm4gc2luZ2xldG9uOwoJICAgIH0KCSAgfV0pOwoKCSAgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZTsKCX0oWm9uZSk7CgoJLyoqCgkgKiBBIHpvbmUgdGhhdCBmYWlsZWQgdG8gcGFyc2UuIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byBpbnN0YW50aWF0ZSB0aGlzLgoJICogQGltcGxlbWVudHMge1pvbmV9CgkgKi8KCgl2YXIgSW52YWxpZFpvbmUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9ab25lKSB7CgkgIF9pbmhlcml0c0xvb3NlKEludmFsaWRab25lLCBfWm9uZSk7CgoJICBmdW5jdGlvbiBJbnZhbGlkWm9uZSh6b25lTmFtZSkgewoJICAgIHZhciBfdGhpczsKCgkgICAgX3RoaXMgPSBfWm9uZS5jYWxsKHRoaXMpIHx8IHRoaXM7CgkgICAgLyoqICBAcHJpdmF0ZSAqLwoKCSAgICBfdGhpcy56b25lTmFtZSA9IHpvbmVOYW1lOwoJICAgIHJldHVybiBfdGhpczsKCSAgfQoJICAvKiogQG92ZXJyaWRlICoqLwoKCgkgIHZhciBfcHJvdG8gPSBJbnZhbGlkWm9uZS5wcm90b3R5cGU7CgoJICAvKiogQG92ZXJyaWRlICoqLwoJICBfcHJvdG8ub2Zmc2V0TmFtZSA9IGZ1bmN0aW9uIG9mZnNldE5hbWUoKSB7CgkgICAgcmV0dXJuIG51bGw7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCSAgOwoKCSAgX3Byb3RvLmZvcm1hdE9mZnNldCA9IGZ1bmN0aW9uIGZvcm1hdE9mZnNldCgpIHsKCSAgICByZXR1cm4gIiI7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCSAgOwoKCSAgX3Byb3RvLm9mZnNldCA9IGZ1bmN0aW9uIG9mZnNldCgpIHsKCSAgICByZXR1cm4gTmFOOwoJICB9CgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIDsKCgkgIF9wcm90by5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMoKSB7CgkgICAgcmV0dXJuIGZhbHNlOwoJICB9CgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIDsKCgkgIF9jcmVhdGVDbGFzcyhJbnZhbGlkWm9uZSwgW3sKCSAgICBrZXk6ICJ0eXBlIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiAiaW52YWxpZCI7CgkgICAgfQoJICAgIC8qKiBAb3ZlcnJpZGUgKiovCgoJICB9LCB7CgkgICAga2V5OiAibmFtZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy56b25lTmFtZTsKCSAgICB9CgkgICAgLyoqIEBvdmVycmlkZSAqKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJpc1VuaXZlcnNhbCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gZmFsc2U7CgkgICAgfQoJICB9LCB7CgkgICAga2V5OiAiaXNWYWxpZCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gZmFsc2U7CgkgICAgfQoJICB9XSk7CgoJICByZXR1cm4gSW52YWxpZFpvbmU7Cgl9KFpvbmUpOwoKCS8qKgoJICogQHByaXZhdGUKCSAqLwoJZnVuY3Rpb24gbm9ybWFsaXplWm9uZShpbnB1dCwgZGVmYXVsdFpvbmUpIHsKCgkgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkgfHwgaW5wdXQgPT09IG51bGwpIHsKCSAgICByZXR1cm4gZGVmYXVsdFpvbmU7CgkgIH0gZWxzZSBpZiAoaW5wdXQgaW5zdGFuY2VvZiBab25lKSB7CgkgICAgcmV0dXJuIGlucHV0OwoJICB9IGVsc2UgaWYgKGlzU3RyaW5nKGlucHV0KSkgewoJICAgIHZhciBsb3dlcmVkID0gaW5wdXQudG9Mb3dlckNhc2UoKTsKCSAgICBpZiAobG93ZXJlZCA9PT0gImxvY2FsIiB8fCBsb3dlcmVkID09PSAic3lzdGVtIikgcmV0dXJuIGRlZmF1bHRab25lO2Vsc2UgaWYgKGxvd2VyZWQgPT09ICJ1dGMiIHx8IGxvd2VyZWQgPT09ICJnbXQiKSByZXR1cm4gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlO2Vsc2UgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihsb3dlcmVkKSB8fCBJQU5BWm9uZS5jcmVhdGUoaW5wdXQpOwoJICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkgewoJICAgIHJldHVybiBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UoaW5wdXQpOwoJICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gIm9iamVjdCIgJiYgaW5wdXQub2Zmc2V0ICYmIHR5cGVvZiBpbnB1dC5vZmZzZXQgPT09ICJudW1iZXIiKSB7CgkgICAgLy8gVGhpcyBpcyBkdW1iLCBidXQgdGhlIGluc3RhbmNlb2YgY2hlY2sgYWJvdmUgZG9lc24ndCBzZWVtIHRvIHJlYWxseSB3b3JrCgkgICAgLy8gc28gd2UncmUgZHVjayBjaGVja2luZyBpdAoJICAgIHJldHVybiBpbnB1dDsKCSAgfSBlbHNlIHsKCSAgICByZXR1cm4gbmV3IEludmFsaWRab25lKGlucHV0KTsKCSAgfQoJfQoKCXZhciBub3cgPSBmdW5jdGlvbiBub3coKSB7CgkgIHJldHVybiBEYXRlLm5vdygpOwoJfSwKCSAgICBkZWZhdWx0Wm9uZSA9ICJzeXN0ZW0iLAoJICAgIGRlZmF1bHRMb2NhbGUgPSBudWxsLAoJICAgIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0gPSBudWxsLAoJICAgIGRlZmF1bHRPdXRwdXRDYWxlbmRhciA9IG51bGwsCgkgICAgdGhyb3dPbkludmFsaWQ7CgkvKioKCSAqIFNldHRpbmdzIGNvbnRhaW5zIHN0YXRpYyBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHRoYXQgY29udHJvbCBMdXhvbidzIG92ZXJhbGwgYmVoYXZpb3IuIEx1eG9uIGlzIGEgc2ltcGxlIGxpYnJhcnkgd2l0aCBmZXcgb3B0aW9ucywgYnV0IHRoZSBvbmVzIGl0IGRvZXMgaGF2ZSBsaXZlIGhlcmUuCgkgKi8KCgoJdmFyIFNldHRpbmdzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKCSAgZnVuY3Rpb24gU2V0dGluZ3MoKSB7fQoKCSAgLyoqCgkgICAqIFJlc2V0IEx1eG9uJ3MgZ2xvYmFsIGNhY2hlcy4gU2hvdWxkIG9ubHkgYmUgbmVjZXNzYXJ5IGluIHRlc3Rpbmcgc2NlbmFyaW9zLgoJICAgKiBAcmV0dXJuIHt2b2lkfQoJICAgKi8KCSAgU2V0dGluZ3MucmVzZXRDYWNoZXMgPSBmdW5jdGlvbiByZXNldENhY2hlcygpIHsKCSAgICBMb2NhbGUucmVzZXRDYWNoZSgpOwoJICAgIElBTkFab25lLnJlc2V0Q2FjaGUoKTsKCSAgfTsKCgkgIF9jcmVhdGVDbGFzcyhTZXR0aW5ncywgbnVsbCwgW3sKCSAgICBrZXk6ICJub3ciLAoJICAgIGdldDoKCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIGNhbGxiYWNrIGZvciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgdGltZXN0YW1wLgoJICAgICAqIEB0eXBlIHtmdW5jdGlvbn0KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gbm93OwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBTZXQgdGhlIGNhbGxiYWNrIGZvciByZXR1cm5pbmcgdGhlIGN1cnJlbnQgdGltZXN0YW1wLgoJICAgICAqIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgbnVtYmVyLCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIEVwb2NoIG1pbGxpc2Vjb25kIGNvdW50CgkgICAgICogQHR5cGUge2Z1bmN0aW9ufQoJICAgICAqIEBleGFtcGxlIFNldHRpbmdzLm5vdyA9ICgpID0+IERhdGUubm93KCkgKyAzMDAwIC8vIHByZXRlbmQgaXQgaXMgMyBzZWNvbmRzIGluIHRoZSBmdXR1cmUKCSAgICAgKiBAZXhhbXBsZSBTZXR0aW5ncy5ub3cgPSAoKSA9PiAwIC8vIGFsd2F5cyBwcmV0ZW5kIGl0J3MgSmFuIDEsIDE5NzAgYXQgbWlkbmlnaHQgaW4gVVRDIHRpbWUKCSAgICAgKi8KCSAgICAsCgkgICAgc2V0OiBmdW5jdGlvbiBzZXQobikgewoJICAgICAgbm93ID0gbjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogU2V0IHRoZSBkZWZhdWx0IHRpbWUgem9uZSB0byBjcmVhdGUgRGF0ZVRpbWVzIGluLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgoJICAgICAqIFVzZSB0aGUgdmFsdWUgInN5c3RlbSIgdG8gcmVzZXQgdGhpcyB2YWx1ZSB0byB0aGUgc3lzdGVtJ3MgdGltZSB6b25lLgoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiZGVmYXVsdFpvbmUiLAoJICAgIGdldDoKCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIGRlZmF1bHQgdGltZSB6b25lIG9iamVjdCBjdXJyZW50bHkgdXNlZCB0byBjcmVhdGUgRGF0ZVRpbWVzLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgoJICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUgKHRoZSBvbmUgc2V0IG9uIHRoZSBtYWNoaW5lIHRoYXQgcnVucyB0aGlzIGNvZGUpLgoJICAgICAqIEB0eXBlIHtab25lfQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBub3JtYWxpemVab25lKGRlZmF1bHRab25lLCBTeXN0ZW1ab25lLmluc3RhbmNlKTsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBkZWZhdWx0IGxvY2FsZSB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuCgkgICAgICogQHR5cGUge3N0cmluZ30KCSAgICAgKi8KCSAgICAsCgkgICAgc2V0OiBmdW5jdGlvbiBzZXQoem9uZSkgewoJICAgICAgZGVmYXVsdFpvbmUgPSB6b25lOwoJICAgIH0KCSAgfSwgewoJICAgIGtleTogImRlZmF1bHRMb2NhbGUiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIGRlZmF1bHRMb2NhbGU7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFNldCB0aGUgZGVmYXVsdCBsb2NhbGUgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgkgICAgLAoJICAgIHNldDogZnVuY3Rpb24gc2V0KGxvY2FsZSkgewoJICAgICAgZGVmYXVsdExvY2FsZSA9IGxvY2FsZTsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBkZWZhdWx0IG51bWJlcmluZyBzeXN0ZW0gdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiZGVmYXVsdE51bWJlcmluZ1N5c3RlbSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gZGVmYXVsdE51bWJlcmluZ1N5c3RlbTsKCSAgICB9CgkgICAgLyoqCgkgICAgICogU2V0IHRoZSBkZWZhdWx0IG51bWJlcmluZyBzeXN0ZW0gdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgkgICAgLAoJICAgIHNldDogZnVuY3Rpb24gc2V0KG51bWJlcmluZ1N5c3RlbSkgewoJICAgICAgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSA9IG51bWJlcmluZ1N5c3RlbTsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBkZWZhdWx0IG91dHB1dCBjYWxlbmRhciB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuCgkgICAgICogQHR5cGUge3N0cmluZ30KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJkZWZhdWx0T3V0cHV0Q2FsZW5kYXIiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIGRlZmF1bHRPdXRwdXRDYWxlbmRhcjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogU2V0IHRoZSBkZWZhdWx0IG91dHB1dCBjYWxlbmRhciB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuCgkgICAgICogQHR5cGUge3N0cmluZ30KCSAgICAgKi8KCSAgICAsCgkgICAgc2V0OiBmdW5jdGlvbiBzZXQob3V0cHV0Q2FsZW5kYXIpIHsKCSAgICAgIGRlZmF1bHRPdXRwdXRDYWxlbmRhciA9IG91dHB1dENhbGVuZGFyOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgd2hldGhlciBMdXhvbiB3aWxsIHRocm93IHdoZW4gaXQgZW5jb3VudGVycyBpbnZhbGlkIERhdGVUaW1lcywgRHVyYXRpb25zLCBvciBJbnRlcnZhbHMKCSAgICAgKiBAdHlwZSB7Ym9vbGVhbn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJ0aHJvd09uSW52YWxpZCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhyb3dPbkludmFsaWQ7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFNldCB3aGV0aGVyIEx1eG9uIHdpbGwgdGhyb3cgd2hlbiBpdCBlbmNvdW50ZXJzIGludmFsaWQgRGF0ZVRpbWVzLCBEdXJhdGlvbnMsIG9yIEludGVydmFscwoJICAgICAqIEB0eXBlIHtib29sZWFufQoJICAgICAqLwoJICAgICwKCSAgICBzZXQ6IGZ1bmN0aW9uIHNldCh0KSB7CgkgICAgICB0aHJvd09uSW52YWxpZCA9IHQ7CgkgICAgfQoJICB9XSk7CgoJICByZXR1cm4gU2V0dGluZ3M7Cgl9KCk7CgoJdmFyIF9leGNsdWRlZCA9IFsiYmFzZSJdLAoJICAgIF9leGNsdWRlZDIgPSBbInBhZFRvIiwgImZsb29yIl07CgoJdmFyIGludGxMRkNhY2hlID0ge307CgoJZnVuY3Rpb24gZ2V0Q2FjaGVkTEYobG9jU3RyaW5nLCBvcHRzKSB7CgkgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICBvcHRzID0ge307CgkgIH0KCgkgIHZhciBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBvcHRzXSk7CgkgIHZhciBkdGYgPSBpbnRsTEZDYWNoZVtrZXldOwoKCSAgaWYgKCFkdGYpIHsKCSAgICBkdGYgPSBuZXcgSW50bC5MaXN0Rm9ybWF0KGxvY1N0cmluZywgb3B0cyk7CgkgICAgaW50bExGQ2FjaGVba2V5XSA9IGR0ZjsKCSAgfQoKCSAgcmV0dXJuIGR0ZjsKCX0KCgl2YXIgaW50bERUQ2FjaGUgPSB7fTsKCglmdW5jdGlvbiBnZXRDYWNoZWREVEYobG9jU3RyaW5nLCBvcHRzKSB7CgkgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICBvcHRzID0ge307CgkgIH0KCgkgIHZhciBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBvcHRzXSk7CgkgIHZhciBkdGYgPSBpbnRsRFRDYWNoZVtrZXldOwoKCSAgaWYgKCFkdGYpIHsKCSAgICBkdGYgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NTdHJpbmcsIG9wdHMpOwoJICAgIGludGxEVENhY2hlW2tleV0gPSBkdGY7CgkgIH0KCgkgIHJldHVybiBkdGY7Cgl9CgoJdmFyIGludGxOdW1DYWNoZSA9IHt9OwoKCWZ1bmN0aW9uIGdldENhY2hlZElORihsb2NTdHJpbmcsIG9wdHMpIHsKCSAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgIG9wdHMgPSB7fTsKCSAgfQoKCSAgdmFyIGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTsKCSAgdmFyIGluZiA9IGludGxOdW1DYWNoZVtrZXldOwoKCSAgaWYgKCFpbmYpIHsKCSAgICBpbmYgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jU3RyaW5nLCBvcHRzKTsKCSAgICBpbnRsTnVtQ2FjaGVba2V5XSA9IGluZjsKCSAgfQoKCSAgcmV0dXJuIGluZjsKCX0KCgl2YXIgaW50bFJlbENhY2hlID0ge307CgoJZnVuY3Rpb24gZ2V0Q2FjaGVkUlRGKGxvY1N0cmluZywgb3B0cykgewoJICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgb3B0cyA9IHt9OwoJICB9CgoJICB2YXIgX29wdHMgPSBvcHRzOwoJICAgICAgX29wdHMuYmFzZTsKCSAgICAgIHZhciBjYWNoZUtleU9wdHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfb3B0cywgX2V4Y2x1ZGVkKTsgLy8gZXhjbHVkZSBgYmFzZWAgZnJvbSB0aGUgb3B0aW9ucwoKCgkgIHZhciBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBjYWNoZUtleU9wdHNdKTsKCSAgdmFyIGluZiA9IGludGxSZWxDYWNoZVtrZXldOwoKCSAgaWYgKCFpbmYpIHsKCSAgICBpbmYgPSBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQobG9jU3RyaW5nLCBvcHRzKTsKCSAgICBpbnRsUmVsQ2FjaGVba2V5XSA9IGluZjsKCSAgfQoKCSAgcmV0dXJuIGluZjsKCX0KCgl2YXIgc3lzTG9jYWxlQ2FjaGUgPSBudWxsOwoKCWZ1bmN0aW9uIHN5c3RlbUxvY2FsZSgpIHsKCSAgaWYgKHN5c0xvY2FsZUNhY2hlKSB7CgkgICAgcmV0dXJuIHN5c0xvY2FsZUNhY2hlOwoJICB9IGVsc2UgewoJICAgIHN5c0xvY2FsZUNhY2hlID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGU7CgkgICAgcmV0dXJuIHN5c0xvY2FsZUNhY2hlOwoJICB9Cgl9CgoJZnVuY3Rpb24gcGFyc2VMb2NhbGVTdHJpbmcobG9jYWxlU3RyKSB7CgkgIC8vIEkgcmVhbGx5IHdhbnQgdG8gYXZvaWQgd3JpdGluZyBhIEJDUCA0NyBwYXJzZXIKCSAgLy8gc2VlLCBlLmcuIGh0dHBzOi8vZ2l0aHViLmNvbS93b29vcm0vYmNwLTQ3CgkgIC8vIEluc3RlYWQsIHdlJ2xsIGRvIHRoaXM6CgkgIC8vIGEpIGlmIHRoZSBzdHJpbmcgaGFzIG5vIC11IGV4dGVuc2lvbnMsIGp1c3QgbGVhdmUgaXQgYWxvbmUKCSAgLy8gYikgaWYgaXQgZG9lcywgdXNlIEludGwgdG8gcmVzb2x2ZSBldmVyeXRoaW5nCgkgIC8vIGMpIGlmIEludGwgZmFpbHMsIHRyeSBhZ2FpbiB3aXRob3V0IHRoZSAtdQoJICB2YXIgdUluZGV4ID0gbG9jYWxlU3RyLmluZGV4T2YoIi11LSIpOwoKCSAgaWYgKHVJbmRleCA9PT0gLTEpIHsKCSAgICByZXR1cm4gW2xvY2FsZVN0cl07CgkgIH0gZWxzZSB7CgkgICAgdmFyIG9wdGlvbnM7CgkgICAgdmFyIHNtYWxsZXIgPSBsb2NhbGVTdHIuc3Vic3RyaW5nKDAsIHVJbmRleCk7CgoJICAgIHRyeSB7CgkgICAgICBvcHRpb25zID0gZ2V0Q2FjaGVkRFRGKGxvY2FsZVN0cikucmVzb2x2ZWRPcHRpb25zKCk7CgkgICAgfSBjYXRjaCAoZSkgewoJICAgICAgb3B0aW9ucyA9IGdldENhY2hlZERURihzbWFsbGVyKS5yZXNvbHZlZE9wdGlvbnMoKTsKCSAgICB9CgoJICAgIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsCgkgICAgICAgIG51bWJlcmluZ1N5c3RlbSA9IF9vcHRpb25zLm51bWJlcmluZ1N5c3RlbSwKCSAgICAgICAgY2FsZW5kYXIgPSBfb3B0aW9ucy5jYWxlbmRhcjsgLy8gcmV0dXJuIHRoZSBzbWFsbGVyIG9uZSBzbyB0aGF0IHdlIGNhbiBhcHBlbmQgdGhlIGNhbGVuZGFyIGFuZCBudW1iZXJpbmcgb3ZlcnJpZGVzIHRvIGl0CgoJICAgIHJldHVybiBbc21hbGxlciwgbnVtYmVyaW5nU3lzdGVtLCBjYWxlbmRhcl07CgkgIH0KCX0KCglmdW5jdGlvbiBpbnRsQ29uZmlnU3RyaW5nKGxvY2FsZVN0ciwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcikgewoJICBpZiAob3V0cHV0Q2FsZW5kYXIgfHwgbnVtYmVyaW5nU3lzdGVtKSB7CgkgICAgbG9jYWxlU3RyICs9ICItdSI7CgoJICAgIGlmIChvdXRwdXRDYWxlbmRhcikgewoJICAgICAgbG9jYWxlU3RyICs9ICItY2EtIiArIG91dHB1dENhbGVuZGFyOwoJICAgIH0KCgkgICAgaWYgKG51bWJlcmluZ1N5c3RlbSkgewoJICAgICAgbG9jYWxlU3RyICs9ICItbnUtIiArIG51bWJlcmluZ1N5c3RlbTsKCSAgICB9CgoJICAgIHJldHVybiBsb2NhbGVTdHI7CgkgIH0gZWxzZSB7CgkgICAgcmV0dXJuIGxvY2FsZVN0cjsKCSAgfQoJfQoKCWZ1bmN0aW9uIG1hcE1vbnRocyhmKSB7CgkgIHZhciBtcyA9IFtdOwoKCSAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTI7IGkrKykgewoJICAgIHZhciBkdCA9IERhdGVUaW1lLnV0YygyMDE2LCBpLCAxKTsKCSAgICBtcy5wdXNoKGYoZHQpKTsKCSAgfQoKCSAgcmV0dXJuIG1zOwoJfQoKCWZ1bmN0aW9uIG1hcFdlZWtkYXlzKGYpIHsKCSAgdmFyIG1zID0gW107CgoJICBmb3IgKHZhciBpID0gMTsgaSA8PSA3OyBpKyspIHsKCSAgICB2YXIgZHQgPSBEYXRlVGltZS51dGMoMjAxNiwgMTEsIDEzICsgaSk7CgkgICAgbXMucHVzaChmKGR0KSk7CgkgIH0KCgkgIHJldHVybiBtczsKCX0KCglmdW5jdGlvbiBsaXN0U3R1ZmYobG9jLCBsZW5ndGgsIGRlZmF1bHRPSywgZW5nbGlzaEZuLCBpbnRsRm4pIHsKCSAgdmFyIG1vZGUgPSBsb2MubGlzdGluZ01vZGUoZGVmYXVsdE9LKTsKCgkgIGlmIChtb2RlID09PSAiZXJyb3IiKSB7CgkgICAgcmV0dXJuIG51bGw7CgkgIH0gZWxzZSBpZiAobW9kZSA9PT0gImVuIikgewoJICAgIHJldHVybiBlbmdsaXNoRm4obGVuZ3RoKTsKCSAgfSBlbHNlIHsKCSAgICByZXR1cm4gaW50bEZuKGxlbmd0aCk7CgkgIH0KCX0KCglmdW5jdGlvbiBzdXBwb3J0c0Zhc3ROdW1iZXJzKGxvYykgewoJICBpZiAobG9jLm51bWJlcmluZ1N5c3RlbSAmJiBsb2MubnVtYmVyaW5nU3lzdGVtICE9PSAibGF0biIpIHsKCSAgICByZXR1cm4gZmFsc2U7CgkgIH0gZWxzZSB7CgkgICAgcmV0dXJuIGxvYy5udW1iZXJpbmdTeXN0ZW0gPT09ICJsYXRuIiB8fCAhbG9jLmxvY2FsZSB8fCBsb2MubG9jYWxlLnN0YXJ0c1dpdGgoImVuIikgfHwgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jLmludGwpLnJlc29sdmVkT3B0aW9ucygpLm51bWJlcmluZ1N5c3RlbSA9PT0gImxhdG4iOwoJICB9Cgl9CgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCgoJdmFyIFBvbHlOdW1iZXJGb3JtYXR0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewoJICBmdW5jdGlvbiBQb2x5TnVtYmVyRm9ybWF0dGVyKGludGwsIGZvcmNlU2ltcGxlLCBvcHRzKSB7CgkgICAgdGhpcy5wYWRUbyA9IG9wdHMucGFkVG8gfHwgMDsKCSAgICB0aGlzLmZsb29yID0gb3B0cy5mbG9vciB8fCBmYWxzZTsKCgkgICAgb3B0cy5wYWRUbzsKCSAgICAgICAgb3B0cy5mbG9vcjsKCSAgICAgICAgdmFyIG90aGVyT3B0cyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdHMsIF9leGNsdWRlZDIpOwoKCSAgICBpZiAoIWZvcmNlU2ltcGxlIHx8IE9iamVjdC5rZXlzKG90aGVyT3B0cykubGVuZ3RoID4gMCkgewoJICAgICAgdmFyIGludGxPcHRzID0gX2V4dGVuZHMoewoJICAgICAgICB1c2VHcm91cGluZzogZmFsc2UKCSAgICAgIH0sIG9wdHMpOwoKCSAgICAgIGlmIChvcHRzLnBhZFRvID4gMCkgaW50bE9wdHMubWluaW11bUludGVnZXJEaWdpdHMgPSBvcHRzLnBhZFRvOwoJICAgICAgdGhpcy5pbmYgPSBnZXRDYWNoZWRJTkYoaW50bCwgaW50bE9wdHMpOwoJICAgIH0KCSAgfQoKCSAgdmFyIF9wcm90byA9IFBvbHlOdW1iZXJGb3JtYXR0ZXIucHJvdG90eXBlOwoKCSAgX3Byb3RvLmZvcm1hdCA9IGZ1bmN0aW9uIGZvcm1hdChpKSB7CgkgICAgaWYgKHRoaXMuaW5mKSB7CgkgICAgICB2YXIgZml4ZWQgPSB0aGlzLmZsb29yID8gTWF0aC5mbG9vcihpKSA6IGk7CgkgICAgICByZXR1cm4gdGhpcy5pbmYuZm9ybWF0KGZpeGVkKTsKCSAgICB9IGVsc2UgewoJICAgICAgLy8gdG8gbWF0Y2ggdGhlIGJyb3dzZXIncyBudW1iZXJmb3JtYXR0ZXIgZGVmYXVsdHMKCSAgICAgIHZhciBfZml4ZWQgPSB0aGlzLmZsb29yID8gTWF0aC5mbG9vcihpKSA6IHJvdW5kVG8oaSwgMyk7CgoJICAgICAgcmV0dXJuIHBhZFN0YXJ0KF9maXhlZCwgdGhpcy5wYWRUbyk7CgkgICAgfQoJICB9OwoKCSAgcmV0dXJuIFBvbHlOdW1iZXJGb3JtYXR0ZXI7Cgl9KCk7CgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCgoJdmFyIFBvbHlEYXRlRm9ybWF0dGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKCSAgZnVuY3Rpb24gUG9seURhdGVGb3JtYXR0ZXIoZHQsIGludGwsIG9wdHMpIHsKCSAgICB0aGlzLm9wdHMgPSBvcHRzOwoJICAgIHZhciB6OwoKCSAgICBpZiAoZHQuem9uZS5pc1VuaXZlcnNhbCkgewoJICAgICAgLy8gVVRDLTggb3IgRXRjL1VUQy04IGFyZSBub3QgcGFydCBvZiB0emRhdGEsIG9ubHkgRXRjL0dNVCs4IGFuZCB0aGUgbGlrZS4KCSAgICAgIC8vIFRoYXQgaXMgd2h5IGZpeGVkLW9mZnNldCBUWiBpcyBzZXQgdG8gdGhhdCB1bmxlc3MgaXQgaXM6CgkgICAgICAvLyAxLiBSZXByZXNlbnRpbmcgb2Zmc2V0IDAgd2hlbiBVVEMgaXMgdXNlZCB0byBtYWludGFpbiBwcmV2aW91cyBiZWhhdmlvciBhbmQgZG9lcyBub3QgYmVjb21lIEdNVC4KCSAgICAgIC8vIDIuIFVuc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyOgoJICAgICAgLy8gICAgLSBzb21lIGRvIG5vdCBzdXBwb3J0IEV0Yy8KCSAgICAgIC8vICAgIC0gPCBFdGMvR01ULTE0LCA+IEV0Yy9HTVQrMTIsIGFuZCAzMC1taW51dGUgb3IgNDUtbWludXRlIG9mZnNldHMgYXJlIG5vdCBwYXJ0IG9mIHR6ZGF0YQoJICAgICAgdmFyIGdtdE9mZnNldCA9IC0xICogKGR0Lm9mZnNldCAvIDYwKTsKCSAgICAgIHZhciBvZmZzZXRaID0gZ210T2Zmc2V0ID49IDAgPyAiRXRjL0dNVCsiICsgZ210T2Zmc2V0IDogIkV0Yy9HTVQiICsgZ210T2Zmc2V0OwoKCSAgICAgIGlmIChkdC5vZmZzZXQgIT09IDAgJiYgSUFOQVpvbmUuY3JlYXRlKG9mZnNldFopLnZhbGlkKSB7CgkgICAgICAgIHogPSBvZmZzZXRaOwoJICAgICAgICB0aGlzLmR0ID0gZHQ7CgkgICAgICB9IGVsc2UgewoJICAgICAgICAvLyBOb3QgYWxsIGZpeGVkLW9mZnNldCB6b25lcyBsaWtlIEV0Yy8rNDozMCBhcmUgcHJlc2VudCBpbiB0emRhdGEuCgkgICAgICAgIC8vIFNvIHdlIGhhdmUgdG8gbWFrZSBkby4gVHdvIGNhc2VzOgoJICAgICAgICAvLyAxLiBUaGUgZm9ybWF0IG9wdGlvbnMgdGVsbCB1cyB0byBzaG93IHRoZSB6b25lLiBXZSBjYW4ndCBkbyB0aGF0LCBzbyB0aGUgYmVzdAoJICAgICAgICAvLyB3ZSBjYW4gZG8gaXMgZm9ybWF0IHRoZSBkYXRlIGluIFVUQy4KCSAgICAgICAgLy8gMi4gVGhlIGZvcm1hdCBvcHRpb25zIGRvbid0IHRlbGwgdXMgdG8gc2hvdyB0aGUgem9uZS4gVGhlbiB3ZSBjYW4gYWRqdXN0IHRoZW0KCSAgICAgICAgLy8gdGhlIHRpbWUgYW5kIHRlbGwgdGhlIGZvcm1hdHRlciB0byBzaG93IGl0IHRvIHVzIGluIFVUQywgc28gdGhhdCB0aGUgdGltZSBpcyByaWdodAoJICAgICAgICAvLyBhbmQgdGhlIGJhZCB6b25lIGRvZXNuJ3Qgc2hvdyB1cC4KCSAgICAgICAgeiA9ICJVVEMiOwoKCSAgICAgICAgaWYgKG9wdHMudGltZVpvbmVOYW1lKSB7CgkgICAgICAgICAgdGhpcy5kdCA9IGR0OwoJICAgICAgICB9IGVsc2UgewoJICAgICAgICAgIHRoaXMuZHQgPSBkdC5vZmZzZXQgPT09IDAgPyBkdCA6IERhdGVUaW1lLmZyb21NaWxsaXMoZHQudHMgKyBkdC5vZmZzZXQgKiA2MCAqIDEwMDApOwoJICAgICAgICB9CgkgICAgICB9CgkgICAgfSBlbHNlIGlmIChkdC56b25lLnR5cGUgPT09ICJzeXN0ZW0iKSB7CgkgICAgICB0aGlzLmR0ID0gZHQ7CgkgICAgfSBlbHNlIHsKCSAgICAgIHRoaXMuZHQgPSBkdDsKCSAgICAgIHogPSBkdC56b25lLm5hbWU7CgkgICAgfQoKCSAgICB2YXIgaW50bE9wdHMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5vcHRzKTsKCgkgICAgaWYgKHopIHsKCSAgICAgIGludGxPcHRzLnRpbWVab25lID0gejsKCSAgICB9CgoJICAgIHRoaXMuZHRmID0gZ2V0Q2FjaGVkRFRGKGludGwsIGludGxPcHRzKTsKCSAgfQoKCSAgdmFyIF9wcm90bzIgPSBQb2x5RGF0ZUZvcm1hdHRlci5wcm90b3R5cGU7CgoJICBfcHJvdG8yLmZvcm1hdCA9IGZ1bmN0aW9uIGZvcm1hdCgpIHsKCSAgICByZXR1cm4gdGhpcy5kdGYuZm9ybWF0KHRoaXMuZHQudG9KU0RhdGUoKSk7CgkgIH07CgoJICBfcHJvdG8yLmZvcm1hdFRvUGFydHMgPSBmdW5jdGlvbiBmb3JtYXRUb1BhcnRzKCkgewoJICAgIHJldHVybiB0aGlzLmR0Zi5mb3JtYXRUb1BhcnRzKHRoaXMuZHQudG9KU0RhdGUoKSk7CgkgIH07CgoJICBfcHJvdG8yLnJlc29sdmVkT3B0aW9ucyA9IGZ1bmN0aW9uIHJlc29sdmVkT3B0aW9ucygpIHsKCSAgICByZXR1cm4gdGhpcy5kdGYucmVzb2x2ZWRPcHRpb25zKCk7CgkgIH07CgoJICByZXR1cm4gUG9seURhdGVGb3JtYXR0ZXI7Cgl9KCk7CgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCgoJdmFyIFBvbHlSZWxGb3JtYXR0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewoJICBmdW5jdGlvbiBQb2x5UmVsRm9ybWF0dGVyKGludGwsIGlzRW5nbGlzaCwgb3B0cykgewoJICAgIHRoaXMub3B0cyA9IF9leHRlbmRzKHsKCSAgICAgIHN0eWxlOiAibG9uZyIKCSAgICB9LCBvcHRzKTsKCgkgICAgaWYgKCFpc0VuZ2xpc2ggJiYgaGFzUmVsYXRpdmUoKSkgewoJICAgICAgdGhpcy5ydGYgPSBnZXRDYWNoZWRSVEYoaW50bCwgb3B0cyk7CgkgICAgfQoJICB9CgoJICB2YXIgX3Byb3RvMyA9IFBvbHlSZWxGb3JtYXR0ZXIucHJvdG90eXBlOwoKCSAgX3Byb3RvMy5mb3JtYXQgPSBmdW5jdGlvbiBmb3JtYXQoY291bnQsIHVuaXQpIHsKCSAgICBpZiAodGhpcy5ydGYpIHsKCSAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXQoY291bnQsIHVuaXQpOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gZm9ybWF0UmVsYXRpdmVUaW1lKHVuaXQsIGNvdW50LCB0aGlzLm9wdHMubnVtZXJpYywgdGhpcy5vcHRzLnN0eWxlICE9PSAibG9uZyIpOwoJICAgIH0KCSAgfTsKCgkgIF9wcm90bzMuZm9ybWF0VG9QYXJ0cyA9IGZ1bmN0aW9uIGZvcm1hdFRvUGFydHMoY291bnQsIHVuaXQpIHsKCSAgICBpZiAodGhpcy5ydGYpIHsKCSAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXRUb1BhcnRzKGNvdW50LCB1bml0KTsKCSAgICB9IGVsc2UgewoJICAgICAgcmV0dXJuIFtdOwoJICAgIH0KCSAgfTsKCgkgIHJldHVybiBQb2x5UmVsRm9ybWF0dGVyOwoJfSgpOwoJLyoqCgkgKiBAcHJpdmF0ZQoJICovCgoKCXZhciBMb2NhbGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewoJICBMb2NhbGUuZnJvbU9wdHMgPSBmdW5jdGlvbiBmcm9tT3B0cyhvcHRzKSB7CgkgICAgcmV0dXJuIExvY2FsZS5jcmVhdGUob3B0cy5sb2NhbGUsIG9wdHMubnVtYmVyaW5nU3lzdGVtLCBvcHRzLm91dHB1dENhbGVuZGFyLCBvcHRzLmRlZmF1bHRUb0VOKTsKCSAgfTsKCgkgIExvY2FsZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCBkZWZhdWx0VG9FTikgewoJICAgIGlmIChkZWZhdWx0VG9FTiA9PT0gdm9pZCAwKSB7CgkgICAgICBkZWZhdWx0VG9FTiA9IGZhbHNlOwoJICAgIH0KCgkgICAgdmFyIHNwZWNpZmllZExvY2FsZSA9IGxvY2FsZSB8fCBTZXR0aW5ncy5kZWZhdWx0TG9jYWxlOyAvLyB0aGUgc3lzdGVtIGxvY2FsZSBpcyB1c2VmdWwgZm9yIGh1bWFuIHJlYWRhYmxlIHN0cmluZ3MgYnV0IGFubm95aW5nIGZvciBwYXJzaW5nL2Zvcm1hdHRpbmcga25vd24gZm9ybWF0cwoKCSAgICB2YXIgbG9jYWxlUiA9IHNwZWNpZmllZExvY2FsZSB8fCAoZGVmYXVsdFRvRU4gPyAiZW4tVVMiIDogc3lzdGVtTG9jYWxlKCkpOwoJICAgIHZhciBudW1iZXJpbmdTeXN0ZW1SID0gbnVtYmVyaW5nU3lzdGVtIHx8IFNldHRpbmdzLmRlZmF1bHROdW1iZXJpbmdTeXN0ZW07CgkgICAgdmFyIG91dHB1dENhbGVuZGFyUiA9IG91dHB1dENhbGVuZGFyIHx8IFNldHRpbmdzLmRlZmF1bHRPdXRwdXRDYWxlbmRhcjsKCSAgICByZXR1cm4gbmV3IExvY2FsZShsb2NhbGVSLCBudW1iZXJpbmdTeXN0ZW1SLCBvdXRwdXRDYWxlbmRhclIsIHNwZWNpZmllZExvY2FsZSk7CgkgIH07CgoJICBMb2NhbGUucmVzZXRDYWNoZSA9IGZ1bmN0aW9uIHJlc2V0Q2FjaGUoKSB7CgkgICAgc3lzTG9jYWxlQ2FjaGUgPSBudWxsOwoJICAgIGludGxEVENhY2hlID0ge307CgkgICAgaW50bE51bUNhY2hlID0ge307CgkgICAgaW50bFJlbENhY2hlID0ge307CgkgIH07CgoJICBMb2NhbGUuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3QoX3RlbXApIHsKCSAgICB2YXIgX3JlZiA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLAoJICAgICAgICBsb2NhbGUgPSBfcmVmLmxvY2FsZSwKCSAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX3JlZi5udW1iZXJpbmdTeXN0ZW0sCgkgICAgICAgIG91dHB1dENhbGVuZGFyID0gX3JlZi5vdXRwdXRDYWxlbmRhcjsKCgkgICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKTsKCSAgfTsKCgkgIGZ1bmN0aW9uIExvY2FsZShsb2NhbGUsIG51bWJlcmluZywgb3V0cHV0Q2FsZW5kYXIsIHNwZWNpZmllZExvY2FsZSkgewoJICAgIHZhciBfcGFyc2VMb2NhbGVTdHJpbmcgPSBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGUpLAoJICAgICAgICBwYXJzZWRMb2NhbGUgPSBfcGFyc2VMb2NhbGVTdHJpbmdbMF0sCgkgICAgICAgIHBhcnNlZE51bWJlcmluZ1N5c3RlbSA9IF9wYXJzZUxvY2FsZVN0cmluZ1sxXSwKCSAgICAgICAgcGFyc2VkT3V0cHV0Q2FsZW5kYXIgPSBfcGFyc2VMb2NhbGVTdHJpbmdbMl07CgoJICAgIHRoaXMubG9jYWxlID0gcGFyc2VkTG9jYWxlOwoJICAgIHRoaXMubnVtYmVyaW5nU3lzdGVtID0gbnVtYmVyaW5nIHx8IHBhcnNlZE51bWJlcmluZ1N5c3RlbSB8fCBudWxsOwoJICAgIHRoaXMub3V0cHV0Q2FsZW5kYXIgPSBvdXRwdXRDYWxlbmRhciB8fCBwYXJzZWRPdXRwdXRDYWxlbmRhciB8fCBudWxsOwoJICAgIHRoaXMuaW50bCA9IGludGxDb25maWdTdHJpbmcodGhpcy5sb2NhbGUsIHRoaXMubnVtYmVyaW5nU3lzdGVtLCB0aGlzLm91dHB1dENhbGVuZGFyKTsKCSAgICB0aGlzLndlZWtkYXlzQ2FjaGUgPSB7CgkgICAgICBmb3JtYXQ6IHt9LAoJICAgICAgc3RhbmRhbG9uZToge30KCSAgICB9OwoJICAgIHRoaXMubW9udGhzQ2FjaGUgPSB7CgkgICAgICBmb3JtYXQ6IHt9LAoJICAgICAgc3RhbmRhbG9uZToge30KCSAgICB9OwoJICAgIHRoaXMubWVyaWRpZW1DYWNoZSA9IG51bGw7CgkgICAgdGhpcy5lcmFDYWNoZSA9IHt9OwoJICAgIHRoaXMuc3BlY2lmaWVkTG9jYWxlID0gc3BlY2lmaWVkTG9jYWxlOwoJICAgIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQgPSBudWxsOwoJICB9CgoJICB2YXIgX3Byb3RvNCA9IExvY2FsZS5wcm90b3R5cGU7CgoJICBfcHJvdG80Lmxpc3RpbmdNb2RlID0gZnVuY3Rpb24gbGlzdGluZ01vZGUoKSB7CgkgICAgdmFyIGlzQWN0dWFsbHlFbiA9IHRoaXMuaXNFbmdsaXNoKCk7CgkgICAgdmFyIGhhc05vV2VpcmRuZXNzID0gKHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBudWxsIHx8IHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSAibGF0biIpICYmICh0aGlzLm91dHB1dENhbGVuZGFyID09PSBudWxsIHx8IHRoaXMub3V0cHV0Q2FsZW5kYXIgPT09ICJncmVnb3J5Iik7CgkgICAgcmV0dXJuIGlzQWN0dWFsbHlFbiAmJiBoYXNOb1dlaXJkbmVzcyA/ICJlbiIgOiAiaW50bCI7CgkgIH07CgoJICBfcHJvdG80LmNsb25lID0gZnVuY3Rpb24gY2xvbmUoYWx0cykgewoJICAgIGlmICghYWx0cyB8fCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhbHRzKS5sZW5ndGggPT09IDApIHsKCSAgICAgIHJldHVybiB0aGlzOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gTG9jYWxlLmNyZWF0ZShhbHRzLmxvY2FsZSB8fCB0aGlzLnNwZWNpZmllZExvY2FsZSwgYWx0cy5udW1iZXJpbmdTeXN0ZW0gfHwgdGhpcy5udW1iZXJpbmdTeXN0ZW0sIGFsdHMub3V0cHV0Q2FsZW5kYXIgfHwgdGhpcy5vdXRwdXRDYWxlbmRhciwgYWx0cy5kZWZhdWx0VG9FTiB8fCBmYWxzZSk7CgkgICAgfQoJICB9OwoKCSAgX3Byb3RvNC5yZWRlZmF1bHRUb0VOID0gZnVuY3Rpb24gcmVkZWZhdWx0VG9FTihhbHRzKSB7CgkgICAgaWYgKGFsdHMgPT09IHZvaWQgMCkgewoJICAgICAgYWx0cyA9IHt9OwoJICAgIH0KCgkgICAgcmV0dXJuIHRoaXMuY2xvbmUoX2V4dGVuZHMoe30sIGFsdHMsIHsKCSAgICAgIGRlZmF1bHRUb0VOOiB0cnVlCgkgICAgfSkpOwoJICB9OwoKCSAgX3Byb3RvNC5yZWRlZmF1bHRUb1N5c3RlbSA9IGZ1bmN0aW9uIHJlZGVmYXVsdFRvU3lzdGVtKGFsdHMpIHsKCSAgICBpZiAoYWx0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBhbHRzID0ge307CgkgICAgfQoKCSAgICByZXR1cm4gdGhpcy5jbG9uZShfZXh0ZW5kcyh7fSwgYWx0cywgewoJICAgICAgZGVmYXVsdFRvRU46IGZhbHNlCgkgICAgfSkpOwoJICB9OwoKCSAgX3Byb3RvNC5tb250aHMgPSBmdW5jdGlvbiBtb250aHMkMShsZW5ndGgsIGZvcm1hdCwgZGVmYXVsdE9LKSB7CgkgICAgdmFyIF90aGlzID0gdGhpczsKCgkgICAgaWYgKGZvcm1hdCA9PT0gdm9pZCAwKSB7CgkgICAgICBmb3JtYXQgPSBmYWxzZTsKCSAgICB9CgoJICAgIGlmIChkZWZhdWx0T0sgPT09IHZvaWQgMCkgewoJICAgICAgZGVmYXVsdE9LID0gdHJ1ZTsKCSAgICB9CgoJICAgIHJldHVybiBsaXN0U3R1ZmYodGhpcywgbGVuZ3RoLCBkZWZhdWx0T0ssIG1vbnRocywgZnVuY3Rpb24gKCkgewoJICAgICAgdmFyIGludGwgPSBmb3JtYXQgPyB7CgkgICAgICAgIG1vbnRoOiBsZW5ndGgsCgkgICAgICAgIGRheTogIm51bWVyaWMiCgkgICAgICB9IDogewoJICAgICAgICBtb250aDogbGVuZ3RoCgkgICAgICB9LAoJICAgICAgICAgIGZvcm1hdFN0ciA9IGZvcm1hdCA/ICJmb3JtYXQiIDogInN0YW5kYWxvbmUiOwoKCSAgICAgIGlmICghX3RoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdKSB7CgkgICAgICAgIF90aGlzLm1vbnRoc0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSA9IG1hcE1vbnRocyhmdW5jdGlvbiAoZHQpIHsKCSAgICAgICAgICByZXR1cm4gX3RoaXMuZXh0cmFjdChkdCwgaW50bCwgIm1vbnRoIik7CgkgICAgICAgIH0pOwoJICAgICAgfQoKCSAgICAgIHJldHVybiBfdGhpcy5tb250aHNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF07CgkgICAgfSk7CgkgIH07CgoJICBfcHJvdG80LndlZWtkYXlzID0gZnVuY3Rpb24gd2Vla2RheXMkMShsZW5ndGgsIGZvcm1hdCwgZGVmYXVsdE9LKSB7CgkgICAgdmFyIF90aGlzMiA9IHRoaXM7CgoJICAgIGlmIChmb3JtYXQgPT09IHZvaWQgMCkgewoJICAgICAgZm9ybWF0ID0gZmFsc2U7CgkgICAgfQoKCSAgICBpZiAoZGVmYXVsdE9LID09PSB2b2lkIDApIHsKCSAgICAgIGRlZmF1bHRPSyA9IHRydWU7CgkgICAgfQoKCSAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIGxlbmd0aCwgZGVmYXVsdE9LLCB3ZWVrZGF5cywgZnVuY3Rpb24gKCkgewoJICAgICAgdmFyIGludGwgPSBmb3JtYXQgPyB7CgkgICAgICAgIHdlZWtkYXk6IGxlbmd0aCwKCSAgICAgICAgeWVhcjogIm51bWVyaWMiLAoJICAgICAgICBtb250aDogImxvbmciLAoJICAgICAgICBkYXk6ICJudW1lcmljIgoJICAgICAgfSA6IHsKCSAgICAgICAgd2Vla2RheTogbGVuZ3RoCgkgICAgICB9LAoJICAgICAgICAgIGZvcm1hdFN0ciA9IGZvcm1hdCA/ICJmb3JtYXQiIDogInN0YW5kYWxvbmUiOwoKCSAgICAgIGlmICghX3RoaXMyLndlZWtkYXlzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdKSB7CgkgICAgICAgIF90aGlzMi53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSA9IG1hcFdlZWtkYXlzKGZ1bmN0aW9uIChkdCkgewoJICAgICAgICAgIHJldHVybiBfdGhpczIuZXh0cmFjdChkdCwgaW50bCwgIndlZWtkYXkiKTsKCSAgICAgICAgfSk7CgkgICAgICB9CgoJICAgICAgcmV0dXJuIF90aGlzMi53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXTsKCSAgICB9KTsKCSAgfTsKCgkgIF9wcm90bzQubWVyaWRpZW1zID0gZnVuY3Rpb24gbWVyaWRpZW1zJDEoZGVmYXVsdE9LKSB7CgkgICAgdmFyIF90aGlzMyA9IHRoaXM7CgoJICAgIGlmIChkZWZhdWx0T0sgPT09IHZvaWQgMCkgewoJICAgICAgZGVmYXVsdE9LID0gdHJ1ZTsKCSAgICB9CgoJICAgIHJldHVybiBsaXN0U3R1ZmYodGhpcywgdW5kZWZpbmVkLCBkZWZhdWx0T0ssIGZ1bmN0aW9uICgpIHsKCSAgICAgIHJldHVybiBtZXJpZGllbXM7CgkgICAgfSwgZnVuY3Rpb24gKCkgewoJICAgICAgLy8gSW4gdGhlb3J5IHRoZXJlIGNvdWxkIGJlIGFyaWJpdHJhcnkgZGF5IHBlcmlvZHMuIFdlJ3JlIGdvbm5hIGFzc3VtZSB0aGVyZSBhcmUgZXhhY3RseSB0d28KCSAgICAgIC8vIGZvciBBTSBhbmQgUE0uIFRoaXMgaXMgcHJvYmFibHkgd3JvbmcsIGJ1dCBpdCdzIG1ha2VzIHBhcnNpbmcgd2F5IGVhc2llci4KCSAgICAgIGlmICghX3RoaXMzLm1lcmlkaWVtQ2FjaGUpIHsKCSAgICAgICAgdmFyIGludGwgPSB7CgkgICAgICAgICAgaG91cjogIm51bWVyaWMiLAoJICAgICAgICAgIGhvdXJDeWNsZTogImgxMiIKCSAgICAgICAgfTsKCSAgICAgICAgX3RoaXMzLm1lcmlkaWVtQ2FjaGUgPSBbRGF0ZVRpbWUudXRjKDIwMTYsIDExLCAxMywgOSksIERhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMsIDE5KV0ubWFwKGZ1bmN0aW9uIChkdCkgewoJICAgICAgICAgIHJldHVybiBfdGhpczMuZXh0cmFjdChkdCwgaW50bCwgImRheXBlcmlvZCIpOwoJICAgICAgICB9KTsKCSAgICAgIH0KCgkgICAgICByZXR1cm4gX3RoaXMzLm1lcmlkaWVtQ2FjaGU7CgkgICAgfSk7CgkgIH07CgoJICBfcHJvdG80LmVyYXMgPSBmdW5jdGlvbiBlcmFzJDEobGVuZ3RoLCBkZWZhdWx0T0spIHsKCSAgICB2YXIgX3RoaXM0ID0gdGhpczsKCgkgICAgaWYgKGRlZmF1bHRPSyA9PT0gdm9pZCAwKSB7CgkgICAgICBkZWZhdWx0T0sgPSB0cnVlOwoJICAgIH0KCgkgICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIGRlZmF1bHRPSywgZXJhcywgZnVuY3Rpb24gKCkgewoJICAgICAgdmFyIGludGwgPSB7CgkgICAgICAgIGVyYTogbGVuZ3RoCgkgICAgICB9OyAvLyBUaGlzIGlzIHByb2JsZW1hdGljLiBEaWZmZXJlbnQgY2FsZW5kYXJzIGFyZSBnb2luZyB0byBkZWZpbmUgZXJhcyB0b3RhbGx5IGRpZmZlcmVudGx5LiBXaGF0IEkgbmVlZCBpcyB0aGUgbWluaW11bSBzZXQgb2YgZGF0ZXMKCSAgICAgIC8vIHRvIGRlZmluaXRlbHkgZW51bWVyYXRlIHRoZW0uCgoJICAgICAgaWYgKCFfdGhpczQuZXJhQ2FjaGVbbGVuZ3RoXSkgewoJICAgICAgICBfdGhpczQuZXJhQ2FjaGVbbGVuZ3RoXSA9IFtEYXRlVGltZS51dGMoLTQwLCAxLCAxKSwgRGF0ZVRpbWUudXRjKDIwMTcsIDEsIDEpXS5tYXAoZnVuY3Rpb24gKGR0KSB7CgkgICAgICAgICAgcmV0dXJuIF90aGlzNC5leHRyYWN0KGR0LCBpbnRsLCAiZXJhIik7CgkgICAgICAgIH0pOwoJICAgICAgfQoKCSAgICAgIHJldHVybiBfdGhpczQuZXJhQ2FjaGVbbGVuZ3RoXTsKCSAgICB9KTsKCSAgfTsKCgkgIF9wcm90bzQuZXh0cmFjdCA9IGZ1bmN0aW9uIGV4dHJhY3QoZHQsIGludGxPcHRzLCBmaWVsZCkgewoJICAgIHZhciBkZiA9IHRoaXMuZHRGb3JtYXR0ZXIoZHQsIGludGxPcHRzKSwKCSAgICAgICAgcmVzdWx0cyA9IGRmLmZvcm1hdFRvUGFydHMoKSwKCSAgICAgICAgbWF0Y2hpbmcgPSByZXN1bHRzLmZpbmQoZnVuY3Rpb24gKG0pIHsKCSAgICAgIHJldHVybiBtLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQ7CgkgICAgfSk7CgkgICAgcmV0dXJuIG1hdGNoaW5nID8gbWF0Y2hpbmcudmFsdWUgOiBudWxsOwoJICB9OwoKCSAgX3Byb3RvNC5udW1iZXJGb3JtYXR0ZXIgPSBmdW5jdGlvbiBudW1iZXJGb3JtYXR0ZXIob3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIC8vIHRoaXMgZm9yY2VzaW1wbGUgb3B0aW9uIGlzIG5ldmVyIHVzZWQgKHRoZSBvbmx5IGNhbGxlciBzaG9ydC1jaXJjdWl0cyBvbiBpdCwgYnV0IGl0IHNlZW1zIHNhZmVyIHRvIGxlYXZlKQoJICAgIC8vIChpbiBjb250cmFzdCwgdGhlIHJlc3Qgb2YgdGhlIGNvbmRpdGlvbiBpcyB1c2VkIGhlYXZpbHkpCgkgICAgcmV0dXJuIG5ldyBQb2x5TnVtYmVyRm9ybWF0dGVyKHRoaXMuaW50bCwgb3B0cy5mb3JjZVNpbXBsZSB8fCB0aGlzLmZhc3ROdW1iZXJzLCBvcHRzKTsKCSAgfTsKCgkgIF9wcm90bzQuZHRGb3JtYXR0ZXIgPSBmdW5jdGlvbiBkdEZvcm1hdHRlcihkdCwgaW50bE9wdHMpIHsKCSAgICBpZiAoaW50bE9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgaW50bE9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHJldHVybiBuZXcgUG9seURhdGVGb3JtYXR0ZXIoZHQsIHRoaXMuaW50bCwgaW50bE9wdHMpOwoJICB9OwoKCSAgX3Byb3RvNC5yZWxGb3JtYXR0ZXIgPSBmdW5jdGlvbiByZWxGb3JtYXR0ZXIob3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHJldHVybiBuZXcgUG9seVJlbEZvcm1hdHRlcih0aGlzLmludGwsIHRoaXMuaXNFbmdsaXNoKCksIG9wdHMpOwoJICB9OwoKCSAgX3Byb3RvNC5saXN0Rm9ybWF0dGVyID0gZnVuY3Rpb24gbGlzdEZvcm1hdHRlcihvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgcmV0dXJuIGdldENhY2hlZExGKHRoaXMuaW50bCwgb3B0cyk7CgkgIH07CgoJICBfcHJvdG80LmlzRW5nbGlzaCA9IGZ1bmN0aW9uIGlzRW5nbGlzaCgpIHsKCSAgICByZXR1cm4gdGhpcy5sb2NhbGUgPT09ICJlbiIgfHwgdGhpcy5sb2NhbGUudG9Mb3dlckNhc2UoKSA9PT0gImVuLXVzIiB8fCBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmludGwpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZS5zdGFydHNXaXRoKCJlbi11cyIpOwoJICB9OwoKCSAgX3Byb3RvNC5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHsKCSAgICByZXR1cm4gdGhpcy5sb2NhbGUgPT09IG90aGVyLmxvY2FsZSAmJiB0aGlzLm51bWJlcmluZ1N5c3RlbSA9PT0gb3RoZXIubnVtYmVyaW5nU3lzdGVtICYmIHRoaXMub3V0cHV0Q2FsZW5kYXIgPT09IG90aGVyLm91dHB1dENhbGVuZGFyOwoJICB9OwoKCSAgX2NyZWF0ZUNsYXNzKExvY2FsZSwgW3sKCSAgICBrZXk6ICJmYXN0TnVtYmVycyIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICBpZiAodGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9PSBudWxsKSB7CgkgICAgICAgIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQgPSBzdXBwb3J0c0Zhc3ROdW1iZXJzKHRoaXMpOwoJICAgICAgfQoKCSAgICAgIHJldHVybiB0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkOwoJICAgIH0KCSAgfV0pOwoKCSAgcmV0dXJuIExvY2FsZTsKCX0oKTsKCgkvKgoJICogVGhpcyBmaWxlIGhhbmRsZXMgcGFyc2luZyBmb3Igd2VsbC1zcGVjaWZpZWQgZm9ybWF0cy4gSGVyZSdzIGhvdyBpdCB3b3JrczoKCSAqIFR3byB0aGluZ3MgZ28gaW50byBwYXJzaW5nOiBhIHJlZ2V4IHRvIG1hdGNoIHdpdGggYW5kIGFuIGV4dHJhY3RvciB0byB0YWtlIGFwYXJ0IHRoZSBncm91cHMgaW4gdGhlIG1hdGNoLgoJICogQW4gZXh0cmFjdG9yIGlzIGp1c3QgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgcmVnZXggbWF0Y2ggYXJyYXkgYW5kIHJldHVybnMgYSB7IHllYXI6IC4uLiwgbW9udGg6IC4uLiB9IG9iamVjdAoJICogcGFyc2UoKSBkb2VzIHRoZSB3b3JrIG9mIGV4ZWN1dGluZyB0aGUgcmVnZXggYW5kIGFwcGx5aW5nIHRoZSBleHRyYWN0b3IuIEl0IHRha2VzIG11bHRpcGxlIHJlZ2V4L2V4dHJhY3RvciBwYWlycyB0byB0cnkgaW4gc2VxdWVuY2UuCgkgKiBFeHRyYWN0b3JzIGNhbiB0YWtlIGEgImN1cnNvciIgcmVwcmVzZW50aW5nIHRoZSBvZmZzZXQgaW4gdGhlIG1hdGNoIHRvIGxvb2sgYXQuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBjb21iaW5lIGV4dHJhY3RvcnMuCgkgKiBjb21iaW5lRXh0cmFjdG9ycygpIGRvZXMgdGhlIHdvcmsgb2YgY29tYmluaW5nIHRoZW0sIGtlZXBpbmcgdHJhY2sgb2YgdGhlIGN1cnNvciB0aHJvdWdoIG11bHRpcGxlIGV4dHJhY3Rpb25zLgoJICogU29tZSBleHRyYWN0aW9ucyBhcmUgc3VwZXIgZHVtYiBhbmQgc2ltcGxlUGFyc2UgYW5kIGZyb21TdHJpbmdzIGhlbHAgRFJZIHRoZW0uCgkgKi8KCglmdW5jdGlvbiBjb21iaW5lUmVnZXhlcygpIHsKCSAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlZ2V4ZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CgkgICAgcmVnZXhlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKCSAgfQoKCSAgdmFyIGZ1bGwgPSByZWdleGVzLnJlZHVjZShmdW5jdGlvbiAoZiwgcikgewoJICAgIHJldHVybiBmICsgci5zb3VyY2U7CgkgIH0sICIiKTsKCSAgcmV0dXJuIFJlZ0V4cCgiXiIgKyBmdWxsICsgIiQiKTsKCX0KCglmdW5jdGlvbiBjb21iaW5lRXh0cmFjdG9ycygpIHsKCSAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBleHRyYWN0b3JzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7CgkgICAgZXh0cmFjdG9yc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdOwoJICB9CgoJICByZXR1cm4gZnVuY3Rpb24gKG0pIHsKCSAgICByZXR1cm4gZXh0cmFjdG9ycy5yZWR1Y2UoZnVuY3Rpb24gKF9yZWYsIGV4KSB7CgkgICAgICB2YXIgbWVyZ2VkVmFscyA9IF9yZWZbMF0sCgkgICAgICAgICAgbWVyZ2VkWm9uZSA9IF9yZWZbMV0sCgkgICAgICAgICAgY3Vyc29yID0gX3JlZlsyXTsKCgkgICAgICB2YXIgX2V4ID0gZXgobSwgY3Vyc29yKSwKCSAgICAgICAgICB2YWwgPSBfZXhbMF0sCgkgICAgICAgICAgem9uZSA9IF9leFsxXSwKCSAgICAgICAgICBuZXh0ID0gX2V4WzJdOwoKCSAgICAgIHJldHVybiBbX2V4dGVuZHMoe30sIG1lcmdlZFZhbHMsIHZhbCksIHpvbmUgfHwgbWVyZ2VkWm9uZSwgbmV4dF07CgkgICAgfSwgW3t9LCBudWxsLCAxXSkuc2xpY2UoMCwgMik7CgkgIH07Cgl9CgoJZnVuY3Rpb24gcGFyc2UocykgewoJICBpZiAocyA9PSBudWxsKSB7CgkgICAgcmV0dXJuIFtudWxsLCBudWxsXTsKCSAgfQoKCSAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBwYXR0ZXJucyA9IG5ldyBBcnJheShfbGVuMyA+IDEgPyBfbGVuMyAtIDEgOiAwKSwgX2tleTMgPSAxOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7CgkgICAgcGF0dGVybnNbX2tleTMgLSAxXSA9IGFyZ3VtZW50c1tfa2V5M107CgkgIH0KCgkgIGZvciAodmFyIF9pID0gMCwgX3BhdHRlcm5zID0gcGF0dGVybnM7IF9pIDwgX3BhdHRlcm5zLmxlbmd0aDsgX2krKykgewoJICAgIHZhciBfcGF0dGVybnMkX2kgPSBfcGF0dGVybnNbX2ldLAoJICAgICAgICByZWdleCA9IF9wYXR0ZXJucyRfaVswXSwKCSAgICAgICAgZXh0cmFjdG9yID0gX3BhdHRlcm5zJF9pWzFdOwoJICAgIHZhciBtID0gcmVnZXguZXhlYyhzKTsKCgkgICAgaWYgKG0pIHsKCSAgICAgIHJldHVybiBleHRyYWN0b3IobSk7CgkgICAgfQoJICB9CgoJICByZXR1cm4gW251bGwsIG51bGxdOwoJfQoKCWZ1bmN0aW9uIHNpbXBsZVBhcnNlKCkgewoJICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGtleXMgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHsKCSAgICBrZXlzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07CgkgIH0KCgkgIHJldHVybiBmdW5jdGlvbiAobWF0Y2gsIGN1cnNvcikgewoJICAgIHZhciByZXQgPSB7fTsKCSAgICB2YXIgaTsKCgkgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKCSAgICAgIHJldFtrZXlzW2ldXSA9IHBhcnNlSW50ZWdlcihtYXRjaFtjdXJzb3IgKyBpXSk7CgkgICAgfQoKCSAgICByZXR1cm4gW3JldCwgbnVsbCwgY3Vyc29yICsgaV07CgkgIH07Cgl9IC8vIElTTyBhbmQgU1FMIHBhcnNpbmcKCgoJdmFyIG9mZnNldFJlZ2V4ID0gLyg/OihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPykvOwoJdmFyIGlzb0V4dGVuZGVkWm9uZSA9ICIoPzoiICsgb2Zmc2V0UmVnZXguc291cmNlICsgIj8oPzpcXFsoIiArIGlhbmFSZWdleC5zb3VyY2UgKyAiKVxcXSk/KT8iOwoJdmFyIGlzb1RpbWVCYXNlUmVnZXggPSAvKFxkXGQpKD86Oj8oXGRcZCkoPzo6PyhcZFxkKSg/OlsuLF0oXGR7MSwzMH0pKT8pPyk/LzsKCXZhciBpc29UaW1lUmVnZXggPSBSZWdFeHAoIiIgKyBpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZSArIGlzb0V4dGVuZGVkWm9uZSk7Cgl2YXIgaXNvVGltZUV4dGVuc2lvblJlZ2V4ID0gUmVnRXhwKCIoPzpUIiArIGlzb1RpbWVSZWdleC5zb3VyY2UgKyAiKT8iKTsKCXZhciBpc29ZbWRSZWdleCA9IC8oWystXVxkezZ9fFxkezR9KSg/Oi0/KFxkXGQpKD86LT8oXGRcZCkpPyk/LzsKCXZhciBpc29XZWVrUmVnZXggPSAvKFxkezR9KS0/VyhcZFxkKSg/Oi0/KFxkKSk/LzsKCXZhciBpc29PcmRpbmFsUmVnZXggPSAvKFxkezR9KS0/KFxkezN9KS87Cgl2YXIgZXh0cmFjdElTT1dlZWtEYXRhID0gc2ltcGxlUGFyc2UoIndlZWtZZWFyIiwgIndlZWtOdW1iZXIiLCAid2Vla0RheSIpOwoJdmFyIGV4dHJhY3RJU09PcmRpbmFsRGF0YSA9IHNpbXBsZVBhcnNlKCJ5ZWFyIiwgIm9yZGluYWwiKTsKCXZhciBzcWxZbWRSZWdleCA9IC8oXGR7NH0pLShcZFxkKS0oXGRcZCkvOyAvLyBkdW1iZWQtZG93biB2ZXJzaW9uIG9mIHRoZSBJU08gb25lCgoJdmFyIHNxbFRpbWVSZWdleCA9IFJlZ0V4cChpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZSArICIgPyg/OiIgKyBvZmZzZXRSZWdleC5zb3VyY2UgKyAifCgiICsgaWFuYVJlZ2V4LnNvdXJjZSArICIpKT8iKTsKCXZhciBzcWxUaW1lRXh0ZW5zaW9uUmVnZXggPSBSZWdFeHAoIig/OiAiICsgc3FsVGltZVJlZ2V4LnNvdXJjZSArICIpPyIpOwoKCWZ1bmN0aW9uIGludChtYXRjaCwgcG9zLCBmYWxsYmFjaykgewoJICB2YXIgbSA9IG1hdGNoW3Bvc107CgkgIHJldHVybiBpc1VuZGVmaW5lZChtKSA/IGZhbGxiYWNrIDogcGFyc2VJbnRlZ2VyKG0pOwoJfQoKCWZ1bmN0aW9uIGV4dHJhY3RJU09ZbWQobWF0Y2gsIGN1cnNvcikgewoJICB2YXIgaXRlbSA9IHsKCSAgICB5ZWFyOiBpbnQobWF0Y2gsIGN1cnNvciksCgkgICAgbW9udGg6IGludChtYXRjaCwgY3Vyc29yICsgMSwgMSksCgkgICAgZGF5OiBpbnQobWF0Y2gsIGN1cnNvciArIDIsIDEpCgkgIH07CgkgIHJldHVybiBbaXRlbSwgbnVsbCwgY3Vyc29yICsgM107Cgl9CgoJZnVuY3Rpb24gZXh0cmFjdElTT1RpbWUobWF0Y2gsIGN1cnNvcikgewoJICB2YXIgaXRlbSA9IHsKCSAgICBob3VyczogaW50KG1hdGNoLCBjdXJzb3IsIDApLAoJICAgIG1pbnV0ZXM6IGludChtYXRjaCwgY3Vyc29yICsgMSwgMCksCgkgICAgc2Vjb25kczogaW50KG1hdGNoLCBjdXJzb3IgKyAyLCAwKSwKCSAgICBtaWxsaXNlY29uZHM6IHBhcnNlTWlsbGlzKG1hdGNoW2N1cnNvciArIDNdKQoJICB9OwoJICByZXR1cm4gW2l0ZW0sIG51bGwsIGN1cnNvciArIDRdOwoJfQoKCWZ1bmN0aW9uIGV4dHJhY3RJU09PZmZzZXQobWF0Y2gsIGN1cnNvcikgewoJICB2YXIgbG9jYWwgPSAhbWF0Y2hbY3Vyc29yXSAmJiAhbWF0Y2hbY3Vyc29yICsgMV0sCgkgICAgICBmdWxsT2Zmc2V0ID0gc2lnbmVkT2Zmc2V0KG1hdGNoW2N1cnNvciArIDFdLCBtYXRjaFtjdXJzb3IgKyAyXSksCgkgICAgICB6b25lID0gbG9jYWwgPyBudWxsIDogRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKGZ1bGxPZmZzZXQpOwoJICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAzXTsKCX0KCglmdW5jdGlvbiBleHRyYWN0SUFOQVpvbmUobWF0Y2gsIGN1cnNvcikgewoJICB2YXIgem9uZSA9IG1hdGNoW2N1cnNvcl0gPyBJQU5BWm9uZS5jcmVhdGUobWF0Y2hbY3Vyc29yXSkgOiBudWxsOwoJICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAxXTsKCX0gLy8gSVNPIHRpbWUgcGFyc2luZwoKCgl2YXIgaXNvVGltZU9ubHkgPSBSZWdFeHAoIl5UPyIgKyBpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZSArICIkIik7IC8vIElTTyBkdXJhdGlvbiBwYXJzaW5nCgoJdmFyIGlzb0R1cmF0aW9uID0gL14tP1AoPzooPzooLT9cZHsxLDl9KD86XC5cZHsxLDl9KT8pWSk/KD86KC0/XGR7MSw5fSg/OlwuXGR7MSw5fSk/KU0pPyg/OigtP1xkezEsOX0oPzpcLlxkezEsOX0pPylXKT8oPzooLT9cZHsxLDl9KD86XC5cZHsxLDl9KT8pRCk/KD86VCg/OigtP1xkezEsOX0oPzpcLlxkezEsOX0pPylIKT8oPzooLT9cZHsxLDl9KD86XC5cZHsxLDl9KT8pTSk/KD86KC0/XGR7MSwyMH0pKD86Wy4sXSgtP1xkezEsOX0pKT9TKT8pPykkLzsKCglmdW5jdGlvbiBleHRyYWN0SVNPRHVyYXRpb24obWF0Y2gpIHsKCSAgdmFyIHMgPSBtYXRjaFswXSwKCSAgICAgIHllYXJTdHIgPSBtYXRjaFsxXSwKCSAgICAgIG1vbnRoU3RyID0gbWF0Y2hbMl0sCgkgICAgICB3ZWVrU3RyID0gbWF0Y2hbM10sCgkgICAgICBkYXlTdHIgPSBtYXRjaFs0XSwKCSAgICAgIGhvdXJTdHIgPSBtYXRjaFs1XSwKCSAgICAgIG1pbnV0ZVN0ciA9IG1hdGNoWzZdLAoJICAgICAgc2Vjb25kU3RyID0gbWF0Y2hbN10sCgkgICAgICBtaWxsaXNlY29uZHNTdHIgPSBtYXRjaFs4XTsKCSAgdmFyIGhhc05lZ2F0aXZlUHJlZml4ID0gc1swXSA9PT0gIi0iOwoJICB2YXIgbmVnYXRpdmVTZWNvbmRzID0gc2Vjb25kU3RyICYmIHNlY29uZFN0clswXSA9PT0gIi0iOwoKCSAgdmFyIG1heWJlTmVnYXRlID0gZnVuY3Rpb24gbWF5YmVOZWdhdGUobnVtLCBmb3JjZSkgewoJICAgIGlmIChmb3JjZSA9PT0gdm9pZCAwKSB7CgkgICAgICBmb3JjZSA9IGZhbHNlOwoJICAgIH0KCgkgICAgcmV0dXJuIG51bSAhPT0gdW5kZWZpbmVkICYmIChmb3JjZSB8fCBudW0gJiYgaGFzTmVnYXRpdmVQcmVmaXgpID8gLW51bSA6IG51bTsKCSAgfTsKCgkgIHJldHVybiBbewoJICAgIHllYXJzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKHllYXJTdHIpKSwKCSAgICBtb250aHM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcobW9udGhTdHIpKSwKCSAgICB3ZWVrczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyh3ZWVrU3RyKSksCgkgICAgZGF5czogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhkYXlTdHIpKSwKCSAgICBob3VyczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhob3VyU3RyKSksCgkgICAgbWludXRlczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhtaW51dGVTdHIpKSwKCSAgICBzZWNvbmRzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKHNlY29uZFN0ciksIHNlY29uZFN0ciA9PT0gIi0wIiksCgkgICAgbWlsbGlzZWNvbmRzOiBtYXliZU5lZ2F0ZShwYXJzZU1pbGxpcyhtaWxsaXNlY29uZHNTdHIpLCBuZWdhdGl2ZVNlY29uZHMpCgkgIH1dOwoJfSAvLyBUaGVzZSBhcmUgYSBsaXR0bGUgYnJhaW5kZWFkLiBFRFQgKnNob3VsZCogdGVsbCB1cyB0aGF0IHdlJ3JlIGluLCBzYXksIEFtZXJpY2EvTmV3X1lvcmsKCS8vIGFuZCBub3QganVzdCB0aGF0IHdlJ3JlIGluIC0yNDAgKnJpZ2h0IG5vdyouIEJ1dCBzaW5jZSBJIGRvbid0IHRoaW5rIHRoZXNlIGFyZSB1c2VkIHRoYXQgb2Z0ZW4KCS8vIEknbSBqdXN0IGdvaW5nIHRvIGlnbm9yZSB0aGF0CgoKCXZhciBvYnNPZmZzZXRzID0gewoJICBHTVQ6IDAsCgkgIEVEVDogLTQgKiA2MCwKCSAgRVNUOiAtNSAqIDYwLAoJICBDRFQ6IC01ICogNjAsCgkgIENTVDogLTYgKiA2MCwKCSAgTURUOiAtNiAqIDYwLAoJICBNU1Q6IC03ICogNjAsCgkgIFBEVDogLTcgKiA2MCwKCSAgUFNUOiAtOCAqIDYwCgl9OwoKCWZ1bmN0aW9uIGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKSB7CgkgIHZhciByZXN1bHQgPSB7CgkgICAgeWVhcjogeWVhclN0ci5sZW5ndGggPT09IDIgPyB1bnRydW5jYXRlWWVhcihwYXJzZUludGVnZXIoeWVhclN0cikpIDogcGFyc2VJbnRlZ2VyKHllYXJTdHIpLAoJICAgIG1vbnRoOiBtb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSArIDEsCgkgICAgZGF5OiBwYXJzZUludGVnZXIoZGF5U3RyKSwKCSAgICBob3VyOiBwYXJzZUludGVnZXIoaG91clN0ciksCgkgICAgbWludXRlOiBwYXJzZUludGVnZXIobWludXRlU3RyKQoJICB9OwoJICBpZiAoc2Vjb25kU3RyKSByZXN1bHQuc2Vjb25kID0gcGFyc2VJbnRlZ2VyKHNlY29uZFN0cik7CgoJICBpZiAod2Vla2RheVN0cikgewoJICAgIHJlc3VsdC53ZWVrZGF5ID0gd2Vla2RheVN0ci5sZW5ndGggPiAzID8gd2Vla2RheXNMb25nLmluZGV4T2Yod2Vla2RheVN0cikgKyAxIDogd2Vla2RheXNTaG9ydC5pbmRleE9mKHdlZWtkYXlTdHIpICsgMTsKCSAgfQoKCSAgcmV0dXJuIHJlc3VsdDsKCX0gLy8gUkZDIDI4MjIvNTMyMgoKCgl2YXIgcmZjMjgyMiA9IC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksXHMpPyhcZHsxLDJ9KVxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxzKFxkezIsNH0pXHMoXGRcZCk6KFxkXGQpKD86OihcZFxkKSk/XHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KD86KFsrLV1cZFxkKShcZFxkKSkpJC87CgoJZnVuY3Rpb24gZXh0cmFjdFJGQzI4MjIobWF0Y2gpIHsKCSAgdmFyIHdlZWtkYXlTdHIgPSBtYXRjaFsxXSwKCSAgICAgIGRheVN0ciA9IG1hdGNoWzJdLAoJICAgICAgbW9udGhTdHIgPSBtYXRjaFszXSwKCSAgICAgIHllYXJTdHIgPSBtYXRjaFs0XSwKCSAgICAgIGhvdXJTdHIgPSBtYXRjaFs1XSwKCSAgICAgIG1pbnV0ZVN0ciA9IG1hdGNoWzZdLAoJICAgICAgc2Vjb25kU3RyID0gbWF0Y2hbN10sCgkgICAgICBvYnNPZmZzZXQgPSBtYXRjaFs4XSwKCSAgICAgIG1pbE9mZnNldCA9IG1hdGNoWzldLAoJICAgICAgb2ZmSG91clN0ciA9IG1hdGNoWzEwXSwKCSAgICAgIG9mZk1pbnV0ZVN0ciA9IG1hdGNoWzExXSwKCSAgICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTsKCSAgdmFyIG9mZnNldDsKCgkgIGlmIChvYnNPZmZzZXQpIHsKCSAgICBvZmZzZXQgPSBvYnNPZmZzZXRzW29ic09mZnNldF07CgkgIH0gZWxzZSBpZiAobWlsT2Zmc2V0KSB7CgkgICAgb2Zmc2V0ID0gMDsKCSAgfSBlbHNlIHsKCSAgICBvZmZzZXQgPSBzaWduZWRPZmZzZXQob2ZmSG91clN0ciwgb2ZmTWludXRlU3RyKTsKCSAgfQoKCSAgcmV0dXJuIFtyZXN1bHQsIG5ldyBGaXhlZE9mZnNldFpvbmUob2Zmc2V0KV07Cgl9CgoJZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykgewoJICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZQoJICByZXR1cm4gcy5yZXBsYWNlKC9cKFteKV0qXCl8W1xuXHRdL2csICIgIikucmVwbGFjZSgvKFxzXHMrKS9nLCAiICIpLnRyaW0oKTsKCX0gLy8gaHR0cCBkYXRlCgoKCXZhciByZmMxMTIzID0gL14oTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSwgKFxkXGQpIChKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYykgKFxkezR9KSAoXGRcZCk6KFxkXGQpOihcZFxkKSBHTVQkLywKCSAgICByZmM4NTAgPSAvXihNb25kYXl8VHVlc2RheXxXZWRzZGF5fFRodXJzZGF5fEZyaWRheXxTYXR1cmRheXxTdW5kYXkpLCAoXGRcZCktKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKS0oXGRcZCkgKFxkXGQpOihcZFxkKTooXGRcZCkgR01UJC8sCgkgICAgYXNjaWkgPSAvXihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pIChKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYykgKCBcZHxcZFxkKSAoXGRcZCk6KFxkXGQpOihcZFxkKSAoXGR7NH0pJC87CgoJZnVuY3Rpb24gZXh0cmFjdFJGQzExMjNPcjg1MChtYXRjaCkgewoJICB2YXIgd2Vla2RheVN0ciA9IG1hdGNoWzFdLAoJICAgICAgZGF5U3RyID0gbWF0Y2hbMl0sCgkgICAgICBtb250aFN0ciA9IG1hdGNoWzNdLAoJICAgICAgeWVhclN0ciA9IG1hdGNoWzRdLAoJICAgICAgaG91clN0ciA9IG1hdGNoWzVdLAoJICAgICAgbWludXRlU3RyID0gbWF0Y2hbNl0sCgkgICAgICBzZWNvbmRTdHIgPSBtYXRjaFs3XSwKCSAgICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTsKCSAgcmV0dXJuIFtyZXN1bHQsIEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZV07Cgl9CgoJZnVuY3Rpb24gZXh0cmFjdEFTQ0lJKG1hdGNoKSB7CgkgIHZhciB3ZWVrZGF5U3RyID0gbWF0Y2hbMV0sCgkgICAgICBtb250aFN0ciA9IG1hdGNoWzJdLAoJICAgICAgZGF5U3RyID0gbWF0Y2hbM10sCgkgICAgICBob3VyU3RyID0gbWF0Y2hbNF0sCgkgICAgICBtaW51dGVTdHIgPSBtYXRjaFs1XSwKCSAgICAgIHNlY29uZFN0ciA9IG1hdGNoWzZdLAoJICAgICAgeWVhclN0ciA9IG1hdGNoWzddLAoJICAgICAgcmVzdWx0ID0gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpOwoJICByZXR1cm4gW3Jlc3VsdCwgRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlXTsKCX0KCgl2YXIgaXNvWW1kV2l0aFRpbWVFeHRlbnNpb25SZWdleCA9IGNvbWJpbmVSZWdleGVzKGlzb1ltZFJlZ2V4LCBpc29UaW1lRXh0ZW5zaW9uUmVnZXgpOwoJdmFyIGlzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvV2Vla1JlZ2V4LCBpc29UaW1lRXh0ZW5zaW9uUmVnZXgpOwoJdmFyIGlzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvT3JkaW5hbFJlZ2V4LCBpc29UaW1lRXh0ZW5zaW9uUmVnZXgpOwoJdmFyIGlzb1RpbWVDb21iaW5lZFJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvVGltZVJlZ2V4KTsKCXZhciBleHRyYWN0SVNPWW1kVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKGV4dHJhY3RJU09ZbWQsIGV4dHJhY3RJU09UaW1lLCBleHRyYWN0SVNPT2Zmc2V0LCBleHRyYWN0SUFOQVpvbmUpOwoJdmFyIGV4dHJhY3RJU09XZWVrVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKGV4dHJhY3RJU09XZWVrRGF0YSwgZXh0cmFjdElTT1RpbWUsIGV4dHJhY3RJU09PZmZzZXQsIGV4dHJhY3RJQU5BWm9uZSk7Cgl2YXIgZXh0cmFjdElTT09yZGluYWxEYXRlQW5kVGltZSA9IGNvbWJpbmVFeHRyYWN0b3JzKGV4dHJhY3RJU09PcmRpbmFsRGF0YSwgZXh0cmFjdElTT1RpbWUsIGV4dHJhY3RJU09PZmZzZXQsIGV4dHJhY3RJQU5BWm9uZSk7Cgl2YXIgZXh0cmFjdElTT1RpbWVBbmRPZmZzZXQgPSBjb21iaW5lRXh0cmFjdG9ycyhleHRyYWN0SVNPVGltZSwgZXh0cmFjdElTT09mZnNldCwgZXh0cmFjdElBTkFab25lKTsKCS8qCgkgKiBAcHJpdmF0ZQoJICovCgoJZnVuY3Rpb24gcGFyc2VJU09EYXRlKHMpIHsKCSAgcmV0dXJuIHBhcnNlKHMsIFtpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPWW1kVGltZUFuZE9mZnNldF0sIFtpc29XZWVrV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT1dlZWtUaW1lQW5kT2Zmc2V0XSwgW2lzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPT3JkaW5hbERhdGVBbmRUaW1lXSwgW2lzb1RpbWVDb21iaW5lZFJlZ2V4LCBleHRyYWN0SVNPVGltZUFuZE9mZnNldF0pOwoJfQoJZnVuY3Rpb24gcGFyc2VSRkMyODIyRGF0ZShzKSB7CgkgIHJldHVybiBwYXJzZShwcmVwcm9jZXNzUkZDMjgyMihzKSwgW3JmYzI4MjIsIGV4dHJhY3RSRkMyODIyXSk7Cgl9CglmdW5jdGlvbiBwYXJzZUhUVFBEYXRlKHMpIHsKCSAgcmV0dXJuIHBhcnNlKHMsIFtyZmMxMTIzLCBleHRyYWN0UkZDMTEyM09yODUwXSwgW3JmYzg1MCwgZXh0cmFjdFJGQzExMjNPcjg1MF0sIFthc2NpaSwgZXh0cmFjdEFTQ0lJXSk7Cgl9CglmdW5jdGlvbiBwYXJzZUlTT0R1cmF0aW9uKHMpIHsKCSAgcmV0dXJuIHBhcnNlKHMsIFtpc29EdXJhdGlvbiwgZXh0cmFjdElTT0R1cmF0aW9uXSk7Cgl9Cgl2YXIgZXh0cmFjdElTT1RpbWVPbmx5ID0gY29tYmluZUV4dHJhY3RvcnMoZXh0cmFjdElTT1RpbWUpOwoJZnVuY3Rpb24gcGFyc2VJU09UaW1lT25seShzKSB7CgkgIHJldHVybiBwYXJzZShzLCBbaXNvVGltZU9ubHksIGV4dHJhY3RJU09UaW1lT25seV0pOwoJfQoJdmFyIHNxbFltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhzcWxZbWRSZWdleCwgc3FsVGltZUV4dGVuc2lvblJlZ2V4KTsKCXZhciBzcWxUaW1lQ29tYmluZWRSZWdleCA9IGNvbWJpbmVSZWdleGVzKHNxbFRpbWVSZWdleCk7Cgl2YXIgZXh0cmFjdElTT1RpbWVPZmZzZXRBbmRJQU5BWm9uZSA9IGNvbWJpbmVFeHRyYWN0b3JzKGV4dHJhY3RJU09UaW1lLCBleHRyYWN0SVNPT2Zmc2V0LCBleHRyYWN0SUFOQVpvbmUpOwoJZnVuY3Rpb24gcGFyc2VTUUwocykgewoJICByZXR1cm4gcGFyc2UocywgW3NxbFltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0XSwgW3NxbFRpbWVDb21iaW5lZFJlZ2V4LCBleHRyYWN0SVNPVGltZU9mZnNldEFuZElBTkFab25lXSk7Cgl9CgoJdmFyIElOVkFMSUQkMiA9ICJJbnZhbGlkIER1cmF0aW9uIjsgLy8gdW5pdCBjb252ZXJzaW9uIGNvbnN0YW50cwoKCXZhciBsb3dPcmRlck1hdHJpeCA9IHsKCSAgd2Vla3M6IHsKCSAgICBkYXlzOiA3LAoJICAgIGhvdXJzOiA3ICogMjQsCgkgICAgbWludXRlczogNyAqIDI0ICogNjAsCgkgICAgc2Vjb25kczogNyAqIDI0ICogNjAgKiA2MCwKCSAgICBtaWxsaXNlY29uZHM6IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwCgkgIH0sCgkgIGRheXM6IHsKCSAgICBob3VyczogMjQsCgkgICAgbWludXRlczogMjQgKiA2MCwKCSAgICBzZWNvbmRzOiAyNCAqIDYwICogNjAsCgkgICAgbWlsbGlzZWNvbmRzOiAyNCAqIDYwICogNjAgKiAxMDAwCgkgIH0sCgkgIGhvdXJzOiB7CgkgICAgbWludXRlczogNjAsCgkgICAgc2Vjb25kczogNjAgKiA2MCwKCSAgICBtaWxsaXNlY29uZHM6IDYwICogNjAgKiAxMDAwCgkgIH0sCgkgIG1pbnV0ZXM6IHsKCSAgICBzZWNvbmRzOiA2MCwKCSAgICBtaWxsaXNlY29uZHM6IDYwICogMTAwMAoJICB9LAoJICBzZWNvbmRzOiB7CgkgICAgbWlsbGlzZWNvbmRzOiAxMDAwCgkgIH0KCX0sCgkgICAgY2FzdWFsTWF0cml4ID0gX2V4dGVuZHMoewoJICB5ZWFyczogewoJICAgIHF1YXJ0ZXJzOiA0LAoJICAgIG1vbnRoczogMTIsCgkgICAgd2Vla3M6IDUyLAoJICAgIGRheXM6IDM2NSwKCSAgICBob3VyczogMzY1ICogMjQsCgkgICAgbWludXRlczogMzY1ICogMjQgKiA2MCwKCSAgICBzZWNvbmRzOiAzNjUgKiAyNCAqIDYwICogNjAsCgkgICAgbWlsbGlzZWNvbmRzOiAzNjUgKiAyNCAqIDYwICogNjAgKiAxMDAwCgkgIH0sCgkgIHF1YXJ0ZXJzOiB7CgkgICAgbW9udGhzOiAzLAoJICAgIHdlZWtzOiAxMywKCSAgICBkYXlzOiA5MSwKCSAgICBob3VyczogOTEgKiAyNCwKCSAgICBtaW51dGVzOiA5MSAqIDI0ICogNjAsCgkgICAgc2Vjb25kczogOTEgKiAyNCAqIDYwICogNjAsCgkgICAgbWlsbGlzZWNvbmRzOiA5MSAqIDI0ICogNjAgKiA2MCAqIDEwMDAKCSAgfSwKCSAgbW9udGhzOiB7CgkgICAgd2Vla3M6IDQsCgkgICAgZGF5czogMzAsCgkgICAgaG91cnM6IDMwICogMjQsCgkgICAgbWludXRlczogMzAgKiAyNCAqIDYwLAoJICAgIHNlY29uZHM6IDMwICogMjQgKiA2MCAqIDYwLAoJICAgIG1pbGxpc2Vjb25kczogMzAgKiAyNCAqIDYwICogNjAgKiAxMDAwCgkgIH0KCX0sIGxvd09yZGVyTWF0cml4KSwKCSAgICBkYXlzSW5ZZWFyQWNjdXJhdGUgPSAxNDYwOTcuMCAvIDQwMCwKCSAgICBkYXlzSW5Nb250aEFjY3VyYXRlID0gMTQ2MDk3LjAgLyA0ODAwLAoJICAgIGFjY3VyYXRlTWF0cml4ID0gX2V4dGVuZHMoewoJICB5ZWFyczogewoJICAgIHF1YXJ0ZXJzOiA0LAoJICAgIG1vbnRoczogMTIsCgkgICAgd2Vla3M6IGRheXNJblllYXJBY2N1cmF0ZSAvIDcsCgkgICAgZGF5czogZGF5c0luWWVhckFjY3VyYXRlLAoJICAgIGhvdXJzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCwKCSAgICBtaW51dGVzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwLAoJICAgIHNlY29uZHM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCwKCSAgICBtaWxsaXNlY29uZHM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDAKCSAgfSwKCSAgcXVhcnRlcnM6IHsKCSAgICBtb250aHM6IDMsCgkgICAgd2Vla3M6IGRheXNJblllYXJBY2N1cmF0ZSAvIDI4LAoJICAgIGRheXM6IGRheXNJblllYXJBY2N1cmF0ZSAvIDQsCgkgICAgaG91cnM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0IC8gNCwKCSAgICBtaW51dGVzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwIC8gNCwKCSAgICBzZWNvbmRzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgLyA0LAoJICAgIG1pbGxpc2Vjb25kczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwICogMTAwMCAvIDQKCSAgfSwKCSAgbW9udGhzOiB7CgkgICAgd2Vla3M6IGRheXNJbk1vbnRoQWNjdXJhdGUgLyA3LAoJICAgIGRheXM6IGRheXNJbk1vbnRoQWNjdXJhdGUsCgkgICAgaG91cnM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCwKCSAgICBtaW51dGVzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQgKiA2MCwKCSAgICBzZWNvbmRzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQgKiA2MCAqIDYwLAoJICAgIG1pbGxpc2Vjb25kczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDAKCSAgfQoJfSwgbG93T3JkZXJNYXRyaXgpOyAvLyB1bml0cyBvcmRlcmVkIGJ5IHNpemUKCgl2YXIgb3JkZXJlZFVuaXRzJDEgPSBbInllYXJzIiwgInF1YXJ0ZXJzIiwgIm1vbnRocyIsICJ3ZWVrcyIsICJkYXlzIiwgImhvdXJzIiwgIm1pbnV0ZXMiLCAic2Vjb25kcyIsICJtaWxsaXNlY29uZHMiXTsKCXZhciByZXZlcnNlVW5pdHMgPSBvcmRlcmVkVW5pdHMkMS5zbGljZSgwKS5yZXZlcnNlKCk7IC8vIGNsb25lIHJlYWxseSBtZWFucyAiY3JlYXRlIGFub3RoZXIgaW5zdGFuY2UganVzdCBsaWtlIHRoaXMgb25lLCBidXQgd2l0aCB0aGVzZSBjaGFuZ2VzIgoKCWZ1bmN0aW9uIGNsb25lJDEoZHVyLCBhbHRzLCBjbGVhcikgewoJICBpZiAoY2xlYXIgPT09IHZvaWQgMCkgewoJICAgIGNsZWFyID0gZmFsc2U7CgkgIH0KCgkgIC8vIGRlZXAgbWVyZ2UgZm9yIHZhbHMKCSAgdmFyIGNvbmYgPSB7CgkgICAgdmFsdWVzOiBjbGVhciA/IGFsdHMudmFsdWVzIDogX2V4dGVuZHMoe30sIGR1ci52YWx1ZXMsIGFsdHMudmFsdWVzIHx8IHt9KSwKCSAgICBsb2M6IGR1ci5sb2MuY2xvbmUoYWx0cy5sb2MpLAoJICAgIGNvbnZlcnNpb25BY2N1cmFjeTogYWx0cy5jb252ZXJzaW9uQWNjdXJhY3kgfHwgZHVyLmNvbnZlcnNpb25BY2N1cmFjeQoJICB9OwoJICByZXR1cm4gbmV3IER1cmF0aW9uKGNvbmYpOwoJfQoKCWZ1bmN0aW9uIGFudGlUcnVuYyhuKSB7CgkgIHJldHVybiBuIDwgMCA/IE1hdGguZmxvb3IobikgOiBNYXRoLmNlaWwobik7Cgl9IC8vIE5COiBtdXRhdGVzIHBhcmFtZXRlcnMKCgoJZnVuY3Rpb24gY29udmVydChtYXRyaXgsIGZyb21NYXAsIGZyb21Vbml0LCB0b01hcCwgdG9Vbml0KSB7CgkgIHZhciBjb252ID0gbWF0cml4W3RvVW5pdF1bZnJvbVVuaXRdLAoJICAgICAgcmF3ID0gZnJvbU1hcFtmcm9tVW5pdF0gLyBjb252LAoJICAgICAgc2FtZVNpZ24gPSBNYXRoLnNpZ24ocmF3KSA9PT0gTWF0aC5zaWduKHRvTWFwW3RvVW5pdF0pLAoJICAgICAgLy8gb2ssIHNvIHRoaXMgaXMgd2lsZCwgYnV0IHNlZSB0aGUgbWF0cml4IGluIHRoZSB0ZXN0cwoJICBhZGRlZCA9ICFzYW1lU2lnbiAmJiB0b01hcFt0b1VuaXRdICE9PSAwICYmIE1hdGguYWJzKHJhdykgPD0gMSA/IGFudGlUcnVuYyhyYXcpIDogTWF0aC50cnVuYyhyYXcpOwoJICB0b01hcFt0b1VuaXRdICs9IGFkZGVkOwoJICBmcm9tTWFwW2Zyb21Vbml0XSAtPSBhZGRlZCAqIGNvbnY7Cgl9IC8vIE5COiBtdXRhdGVzIHBhcmFtZXRlcnMKCgoJZnVuY3Rpb24gbm9ybWFsaXplVmFsdWVzKG1hdHJpeCwgdmFscykgewoJICByZXZlcnNlVW5pdHMucmVkdWNlKGZ1bmN0aW9uIChwcmV2aW91cywgY3VycmVudCkgewoJICAgIGlmICghaXNVbmRlZmluZWQodmFsc1tjdXJyZW50XSkpIHsKCSAgICAgIGlmIChwcmV2aW91cykgewoJICAgICAgICBjb252ZXJ0KG1hdHJpeCwgdmFscywgcHJldmlvdXMsIHZhbHMsIGN1cnJlbnQpOwoJICAgICAgfQoKCSAgICAgIHJldHVybiBjdXJyZW50OwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gcHJldmlvdXM7CgkgICAgfQoJICB9LCBudWxsKTsKCX0KCS8qKgoJICogQSBEdXJhdGlvbiBvYmplY3QgcmVwcmVzZW50cyBhIHBlcmlvZCBvZiB0aW1lLCBsaWtlICIyIG1vbnRocyIgb3IgIjEgZGF5LCAxIGhvdXIiLiBDb25jZXB0dWFsbHksIGl0J3MganVzdCBhIG1hcCBvZiB1bml0cyB0byB0aGVpciBxdWFudGl0aWVzLCBhY2NvbXBhbmllZCBieSBzb21lIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBhbmQgbWV0aG9kcyBmb3IgY3JlYXRpbmcsIHBhcnNpbmcsIGludGVycm9nYXRpbmcsIHRyYW5zZm9ybWluZywgYW5kIGZvcm1hdHRpbmcgdGhlbS4gVGhleSBjYW4gYmUgdXNlZCBvbiB0aGVpciBvd24gb3IgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBMdXhvbiB0eXBlczsgZm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIHtAbGluayBEYXRlVGltZSNwbHVzfSB0byBhZGQgYSBEdXJhdGlvbiBvYmplY3QgdG8gYSBEYXRlVGltZSwgcHJvZHVjaW5nIGFub3RoZXIgRGF0ZVRpbWUuCgkgKgoJICogSGVyZSBpcyBhIGJyaWVmIG92ZXJ2aWV3IG9mIGNvbW1vbmx5IHVzZWQgbWV0aG9kcyBhbmQgZ2V0dGVycyBpbiBEdXJhdGlvbjoKCSAqCgkgKiAqICoqQ3JlYXRpb24qKiBUbyBjcmVhdGUgYSBEdXJhdGlvbiwgdXNlIHtAbGluayBEdXJhdGlvbiNmcm9tTWlsbGlzfSwge0BsaW5rIER1cmF0aW9uI2Zyb21PYmplY3R9LCBvciB7QGxpbmsgRHVyYXRpb24jZnJvbUlTT30uCgkgKiAqICoqVW5pdCB2YWx1ZXMqKiBTZWUgdGhlIHtAbGluayBEdXJhdGlvbiN5ZWFyc30sIHtAbGluayBEdXJhdGlvbi5tb250aHN9LCB7QGxpbmsgRHVyYXRpb24jd2Vla3N9LCB7QGxpbmsgRHVyYXRpb24jZGF5c30sIHtAbGluayBEdXJhdGlvbiNob3Vyc30sIHtAbGluayBEdXJhdGlvbiNtaW51dGVzfSwge0BsaW5rIER1cmF0aW9uI3NlY29uZHN9LCB7QGxpbmsgRHVyYXRpb24jbWlsbGlzZWNvbmRzfSBhY2Nlc3NvcnMuCgkgKiAqICoqQ29uZmlndXJhdGlvbioqIFNlZSAge0BsaW5rIER1cmF0aW9uI2xvY2FsZX0gYW5kIHtAbGluayBEdXJhdGlvbiNudW1iZXJpbmdTeXN0ZW19IGFjY2Vzc29ycy4KCSAqICogKipUcmFuc2Zvcm1hdGlvbioqIFRvIGNyZWF0ZSBuZXcgRHVyYXRpb25zIG91dCBvZiBvbGQgb25lcyB1c2Uge0BsaW5rIER1cmF0aW9uI3BsdXN9LCB7QGxpbmsgRHVyYXRpb24jbWludXN9LCB7QGxpbmsgRHVyYXRpb24jbm9ybWFsaXplfSwge0BsaW5rIER1cmF0aW9uI3NldH0sIHtAbGluayBEdXJhdGlvbiNyZWNvbmZpZ3VyZX0sIHtAbGluayBEdXJhdGlvbiNzaGlmdFRvfSwgYW5kIHtAbGluayBEdXJhdGlvbiNuZWdhdGV9LgoJICogKiAqKk91dHB1dCoqIFRvIGNvbnZlcnQgdGhlIER1cmF0aW9uIGludG8gb3RoZXIgcmVwcmVzZW50YXRpb25zLCBzZWUge0BsaW5rIER1cmF0aW9uI2FzfSwge0BsaW5rIER1cmF0aW9uI3RvSVNPfSwge0BsaW5rIER1cmF0aW9uI3RvRm9ybWF0fSwgYW5kIHtAbGluayBEdXJhdGlvbiN0b0pTT059CgkgKgoJICogVGhlcmUncyBhcmUgbW9yZSBtZXRob2RzIGRvY3VtZW50ZWQgYmVsb3cuIEluIGFkZGl0aW9uLCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdWJ0bGVyIHRvcGljcyBsaWtlIGludGVybmF0aW9uYWxpemF0aW9uIGFuZCB2YWxpZGl0eSwgc2VlIHRoZSBleHRlcm5hbCBkb2N1bWVudGF0aW9uLgoJICovCgoKCXZhciBEdXJhdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CgkgIC8qKgoJICAgKiBAcHJpdmF0ZQoJICAgKi8KCSAgZnVuY3Rpb24gRHVyYXRpb24oY29uZmlnKSB7CgkgICAgdmFyIGFjY3VyYXRlID0gY29uZmlnLmNvbnZlcnNpb25BY2N1cmFjeSA9PT0gImxvbmd0ZXJtIiB8fCBmYWxzZTsKCSAgICAvKioKCSAgICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICAgKi8KCgkgICAgdGhpcy52YWx1ZXMgPSBjb25maWcudmFsdWVzOwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLmxvYyA9IGNvbmZpZy5sb2MgfHwgTG9jYWxlLmNyZWF0ZSgpOwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLmNvbnZlcnNpb25BY2N1cmFjeSA9IGFjY3VyYXRlID8gImxvbmd0ZXJtIiA6ICJjYXN1YWwiOwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLmludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCBudWxsOwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLm1hdHJpeCA9IGFjY3VyYXRlID8gYWNjdXJhdGVNYXRyaXggOiBjYXN1YWxNYXRyaXg7CgkgICAgLyoqCgkgICAgICogQGFjY2VzcyBwcml2YXRlCgkgICAgICovCgoJICAgIHRoaXMuaXNMdXhvbkR1cmF0aW9uID0gdHJ1ZTsKCSAgfQoJICAvKioKCSAgICogQ3JlYXRlIER1cmF0aW9uIGZyb20gYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLgoJICAgKiBAcGFyYW0ge251bWJlcn0gY291bnQgb2YgbWlsbGlzZWNvbmRzCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZwoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZQoJICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KCSAgICovCgoKCSAgRHVyYXRpb24uZnJvbU1pbGxpcyA9IGZ1bmN0aW9uIGZyb21NaWxsaXMoY291bnQsIG9wdHMpIHsKCSAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdCh7CgkgICAgICBtaWxsaXNlY29uZHM6IGNvdW50CgkgICAgfSwgb3B0cyk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIGtleXMgbGlrZSAneWVhcnMnIGFuZCAnaG91cnMnLgoJICAgKiBJZiB0aGlzIG9iamVjdCBpcyBlbXB0eSB0aGVuIGEgemVybyBtaWxsaXNlY29uZHMgZHVyYXRpb24gaXMgcmV0dXJuZWQuCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSB0aGUgb2JqZWN0IHRvIGNyZWF0ZSB0aGUgRGF0ZVRpbWUgZnJvbQoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnllYXJzCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoucXVhcnRlcnMKCSAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5tb250aHMKCSAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrcwoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmRheXMKCSAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5ob3VycwoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbnV0ZXMKCSAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5zZWNvbmRzCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWlsbGlzZWNvbmRzCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cz1bXV0gLSBvcHRpb25zIGZvciBjcmVhdGluZyB0aGlzIER1cmF0aW9uCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlCgkgICAqIEByZXR1cm4ge0R1cmF0aW9ufQoJICAgKi8KCSAgOwoKCSAgRHVyYXRpb24uZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqLCBvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgaWYgKG9iaiA9PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICJvYmplY3QiKSB7CgkgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoIkR1cmF0aW9uLmZyb21PYmplY3Q6IGFyZ3VtZW50IGV4cGVjdGVkIHRvIGJlIGFuIG9iamVjdCwgZ290ICIgKyAob2JqID09PSBudWxsID8gIm51bGwiIDogdHlwZW9mIG9iaikpOwoJICAgIH0KCgkgICAgcmV0dXJuIG5ldyBEdXJhdGlvbih7CgkgICAgICB2YWx1ZXM6IG5vcm1hbGl6ZU9iamVjdChvYmosIER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpLAoJICAgICAgbG9jOiBMb2NhbGUuZnJvbU9iamVjdChvcHRzKSwKCSAgICAgIGNvbnZlcnNpb25BY2N1cmFjeTogb3B0cy5jb252ZXJzaW9uQWNjdXJhY3kKCSAgICB9KTsKCSAgfQoJICAvKioKCSAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBEdXJhdGlvbkxpa2UuCgkgICAqCgkgICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRHVyYXRpb259IGR1cmF0aW9uTGlrZQoJICAgKiBPbmUgb2Y6CgkgICAqIC0gb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFycycgYW5kICdob3VycycuCgkgICAqIC0gbnVtYmVyIHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHMKCSAgICogLSBEdXJhdGlvbiBpbnN0YW5jZQoJICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KCSAgICovCgkgIDsKCgkgIER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UgPSBmdW5jdGlvbiBmcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uTGlrZSkgewoJICAgIGlmIChpc051bWJlcihkdXJhdGlvbkxpa2UpKSB7CgkgICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU1pbGxpcyhkdXJhdGlvbkxpa2UpOwoJICAgIH0gZWxzZSBpZiAoRHVyYXRpb24uaXNEdXJhdGlvbihkdXJhdGlvbkxpa2UpKSB7CgkgICAgICByZXR1cm4gZHVyYXRpb25MaWtlOwoJICAgIH0gZWxzZSBpZiAodHlwZW9mIGR1cmF0aW9uTGlrZSA9PT0gIm9iamVjdCIpIHsKCSAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KGR1cmF0aW9uTGlrZSk7CgkgICAgfSBlbHNlIHsKCSAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigiVW5rbm93biBkdXJhdGlvbiBhcmd1bWVudCAiICsgZHVyYXRpb25MaWtlICsgIiBvZiB0eXBlICIgKyB0eXBlb2YgZHVyYXRpb25MaWtlKTsKCSAgICB9CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gYW4gSVNPIDg2MDEgZHVyYXRpb24gc3RyaW5nLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRleHQgdG8gcGFyc2UKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBwYXJzaW5nCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlCgkgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjRHVyYXRpb25zCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU08oJ1AzWTZNMVc0RFQxMkgzME01UycpLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAzLCBtb250aHM6IDYsIHdlZWtzOiAxLCBkYXlzOiA0LCBob3VyczogMTIsIG1pbnV0ZXM6IDMwLCBzZWNvbmRzOiA1IH0KCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUFQyM0gnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjMgfQoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPKCdQNVkzTScpLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiA1LCBtb250aHM6IDMgfQoJICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KCSAgICovCgkgIDsKCgkgIER1cmF0aW9uLmZyb21JU08gPSBmdW5jdGlvbiBmcm9tSVNPKHRleHQsIG9wdHMpIHsKCSAgICB2YXIgX3BhcnNlSVNPRHVyYXRpb24gPSBwYXJzZUlTT0R1cmF0aW9uKHRleHQpLAoJICAgICAgICBwYXJzZWQgPSBfcGFyc2VJU09EdXJhdGlvblswXTsKCgkgICAgaWYgKHBhcnNlZCkgewoJICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QocGFyc2VkLCBvcHRzKTsKCSAgICB9IGVsc2UgewoJICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQoInVucGFyc2FibGUiLCAidGhlIGlucHV0IFwiIiArIHRleHQgKyAiXCIgY2FuJ3QgYmUgcGFyc2VkIGFzIElTTyA4NjAxIik7CgkgICAgfQoJICB9CgkgIC8qKgoJICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIGFuIElTTyA4NjAxIHRpbWUgc3RyaW5nLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRleHQgdG8gcGFyc2UKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBwYXJzaW5nCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlCgkgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZXMKCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJzExOjIyOjMzLjQ0NCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMjIsIHNlY29uZHM6IDMzLCBtaWxsaXNlY29uZHM6IDQ0NCB9CgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCcxMTowMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9CgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCdUMTE6MDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfQoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTEwMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9CgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCdUMTEwMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9CgkgICAqIEByZXR1cm4ge0R1cmF0aW9ufQoJICAgKi8KCSAgOwoKCSAgRHVyYXRpb24uZnJvbUlTT1RpbWUgPSBmdW5jdGlvbiBmcm9tSVNPVGltZSh0ZXh0LCBvcHRzKSB7CgkgICAgdmFyIF9wYXJzZUlTT1RpbWVPbmx5ID0gcGFyc2VJU09UaW1lT25seSh0ZXh0KSwKCSAgICAgICAgcGFyc2VkID0gX3BhcnNlSVNPVGltZU9ubHlbMF07CgoJICAgIGlmIChwYXJzZWQpIHsKCSAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHBhcnNlZCwgb3B0cyk7CgkgICAgfSBlbHNlIHsKCSAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKCJ1bnBhcnNhYmxlIiwgInRoZSBpbnB1dCBcIiIgKyB0ZXh0ICsgIlwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMSIpOwoJICAgIH0KCSAgfQoJICAvKioKCSAgICogQ3JlYXRlIGFuIGludmFsaWQgRHVyYXRpb24uCgkgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBzaW1wbGUgc3RyaW5nIG9mIHdoeSB0aGlzIGRhdGV0aW1lIGlzIGludmFsaWQuIFNob3VsZCBub3QgY29udGFpbiBwYXJhbWV0ZXJzIG9yIGFueXRoaW5nIGVsc2UgZGF0YS1kZXBlbmRlbnQKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgoJICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KCSAgICovCgkgIDsKCgkgIER1cmF0aW9uLmludmFsaWQgPSBmdW5jdGlvbiBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pIHsKCSAgICBpZiAoZXhwbGFuYXRpb24gPT09IHZvaWQgMCkgewoJICAgICAgZXhwbGFuYXRpb24gPSBudWxsOwoJICAgIH0KCgkgICAgaWYgKCFyZWFzb24pIHsKCSAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBEdXJhdGlvbiBpcyBpbnZhbGlkIik7CgkgICAgfQoKCSAgICB2YXIgaW52YWxpZCA9IHJlYXNvbiBpbnN0YW5jZW9mIEludmFsaWQgPyByZWFzb24gOiBuZXcgSW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uKTsKCgkgICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7CgkgICAgICB0aHJvdyBuZXcgSW52YWxpZER1cmF0aW9uRXJyb3IoaW52YWxpZCk7CgkgICAgfSBlbHNlIHsKCSAgICAgIHJldHVybiBuZXcgRHVyYXRpb24oewoJICAgICAgICBpbnZhbGlkOiBpbnZhbGlkCgkgICAgICB9KTsKCSAgICB9CgkgIH0KCSAgLyoqCgkgICAqIEBwcml2YXRlCgkgICAqLwoJICA7CgoJICBEdXJhdGlvbi5ub3JtYWxpemVVbml0ID0gZnVuY3Rpb24gbm9ybWFsaXplVW5pdCh1bml0KSB7CgkgICAgdmFyIG5vcm1hbGl6ZWQgPSB7CgkgICAgICB5ZWFyOiAieWVhcnMiLAoJICAgICAgeWVhcnM6ICJ5ZWFycyIsCgkgICAgICBxdWFydGVyOiAicXVhcnRlcnMiLAoJICAgICAgcXVhcnRlcnM6ICJxdWFydGVycyIsCgkgICAgICBtb250aDogIm1vbnRocyIsCgkgICAgICBtb250aHM6ICJtb250aHMiLAoJICAgICAgd2VlazogIndlZWtzIiwKCSAgICAgIHdlZWtzOiAid2Vla3MiLAoJICAgICAgZGF5OiAiZGF5cyIsCgkgICAgICBkYXlzOiAiZGF5cyIsCgkgICAgICBob3VyOiAiaG91cnMiLAoJICAgICAgaG91cnM6ICJob3VycyIsCgkgICAgICBtaW51dGU6ICJtaW51dGVzIiwKCSAgICAgIG1pbnV0ZXM6ICJtaW51dGVzIiwKCSAgICAgIHNlY29uZDogInNlY29uZHMiLAoJICAgICAgc2Vjb25kczogInNlY29uZHMiLAoJICAgICAgbWlsbGlzZWNvbmQ6ICJtaWxsaXNlY29uZHMiLAoJICAgICAgbWlsbGlzZWNvbmRzOiAibWlsbGlzZWNvbmRzIgoJICAgIH1bdW5pdCA/IHVuaXQudG9Mb3dlckNhc2UoKSA6IHVuaXRdOwoJICAgIGlmICghbm9ybWFsaXplZCkgdGhyb3cgbmV3IEludmFsaWRVbml0RXJyb3IodW5pdCk7CgkgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7CgkgIH0KCSAgLyoqCgkgICAqIENoZWNrIGlmIGFuIG9iamVjdCBpcyBhIER1cmF0aW9uLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzCgkgICAqIEBwYXJhbSB7b2JqZWN0fSBvCgkgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICBEdXJhdGlvbi5pc0R1cmF0aW9uID0gZnVuY3Rpb24gaXNEdXJhdGlvbihvKSB7CgkgICAgcmV0dXJuIG8gJiYgby5pc0x1eG9uRHVyYXRpb24gfHwgZmFsc2U7CgkgIH0KCSAgLyoqCgkgICAqIEdldCAgdGhlIGxvY2FsZSBvZiBhIER1cmF0aW9uLCBzdWNoICdlbi1HQicKCSAgICogQHR5cGUge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIHZhciBfcHJvdG8gPSBEdXJhdGlvbi5wcm90b3R5cGU7CgoJICAvKioKCSAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nLiBZb3UgbWF5IHVzZSB0aGVzZSB0b2tlbnM6CgkgICAqICogYFNgIGZvciBtaWxsaXNlY29uZHMKCSAgICogKiBgc2AgZm9yIHNlY29uZHMKCSAgICogKiBgbWAgZm9yIG1pbnV0ZXMKCSAgICogKiBgaGAgZm9yIGhvdXJzCgkgICAqICogYGRgIGZvciBkYXlzCgkgICAqICogYHdgIGZvciB3ZWVrcwoJICAgKiAqIGBNYCBmb3IgbW9udGhzCgkgICAqICogYHlgIGZvciB5ZWFycwoJICAgKiBOb3RlczoKCSAgICogKiBBZGQgcGFkZGluZyBieSByZXBlYXRpbmcgdGhlIHRva2VuLCBlLmcuICJ5eSIgcGFkcyB0aGUgeWVhcnMgdG8gdHdvIGRpZ2l0cywgImhoaGgiIHBhZHMgdGhlIGhvdXJzIG91dCB0byBmb3VyIGRpZ2l0cwoJICAgKiAqIFRoZSBkdXJhdGlvbiB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgc2V0IG9mIHVuaXRzIGluIHRoZSBmb3JtYXQgc3RyaW5nIHVzaW5nIHtAbGluayBEdXJhdGlvbiNzaGlmdFRvfSBhbmQgdGhlIER1cmF0aW9ucydzIGNvbnZlcnNpb24gYWNjdXJhY3kgc2V0dGluZy4KCSAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgc3RyaW5nCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsb29yPXRydWVdIC0gZmxvb3IgbnVtZXJpY2FsIHZhbHVlcwoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoInkgZCBzIikgLy89PiAiMSA2IDIiCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b0Zvcm1hdCgieXkgZGQgc3NzIikgLy89PiAiMDEgMDYgMDAyIgoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoIk0gUyIpIC8vPT4gIjEyIDUxODQwMjAwMCIKCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgX3Byb3RvLnRvRm9ybWF0ID0gZnVuY3Rpb24gdG9Gb3JtYXQoZm10LCBvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgLy8gcmV2ZXJzZS1jb21wYXQgc2luY2UgMS4yOyB3ZSBhbHdheXMgcm91bmQgZG93biBub3csIG5ldmVyIHVwLCBhbmQgd2UgZG8gaXQgYnkgZGVmYXVsdAoJICAgIHZhciBmbXRPcHRzID0gX2V4dGVuZHMoe30sIG9wdHMsIHsKCSAgICAgIGZsb29yOiBvcHRzLnJvdW5kICE9PSBmYWxzZSAmJiBvcHRzLmZsb29yICE9PSBmYWxzZQoJICAgIH0pOwoKCSAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYywgZm10T3B0cykuZm9ybWF0RHVyYXRpb25Gcm9tU3RyaW5nKHRoaXMsIGZtdCkgOiBJTlZBTElEJDI7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBEdXJhdGlvbiB3aXRoIGFsbCB1bml0cyBpbmNsdWRlZC4KCSAgICogVG8gbW9kaWZ5IGl0cyBiZWhhdmlvciB1c2UgdGhlIGBsaXN0U3R5bGVgIGFuZCBhbnkgSW50bC5OdW1iZXJGb3JtYXQgb3B0aW9uLCB0aG91Z2ggYHVuaXREaXNwbGF5YCBpcyBlc3BlY2lhbGx5IHJlbGV2YW50LgoJICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvTnVtYmVyRm9ybWF0CgkgICAqIEBwYXJhbSBvcHRzIC0gT24gb3B0aW9uIG9iamVjdCB0byBvdmVycmlkZSB0aGUgZm9ybWF0dGluZy4gQWNjZXB0cyB0aGUgc2FtZSBrZXlzIGFzIHRoZSBvcHRpb25zIHBhcmFtZXRlciBvZiB0aGUgbmF0aXZlIGBJbnQuTnVtYmVyRm9ybWF0YCBjb25zdHJ1Y3RvciwgYXMgd2VsbCBhcyBgbGlzdFN0eWxlYC4KCSAgICogQGV4YW1wbGUKCSAgICogYGBganMKCSAgICogdmFyIGR1ciA9IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxLCBob3VyczogNSwgbWludXRlczogNiB9KQoJICAgKiBkdXIudG9IdW1hbigpIC8vPT4gJzEgZGF5LCA1IGhvdXJzLCA2IG1pbnV0ZXMnCgkgICAqIGR1ci50b0h1bWFuKHsgbGlzdFN0eWxlOiAibG9uZyIgfSkgLy89PiAnMSBkYXksIDUgaG91cnMsIGFuZCA2IG1pbnV0ZXMnCgkgICAqIGR1ci50b0h1bWFuKHsgdW5pdERpc3BsYXk6ICJzaG9ydCIgfSkgLy89PiAnMSBkYXksIDUgaHIsIDYgbWluJwoJICAgKiBgYGAKCSAgICovCgkgIDsKCgkgIF9wcm90by50b0h1bWFuID0gZnVuY3Rpb24gdG9IdW1hbihvcHRzKSB7CgkgICAgdmFyIF90aGlzID0gdGhpczsKCgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgdmFyIGwgPSBvcmRlcmVkVW5pdHMkMS5tYXAoZnVuY3Rpb24gKHVuaXQpIHsKCSAgICAgIHZhciB2YWwgPSBfdGhpcy52YWx1ZXNbdW5pdF07CgoJICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbCkpIHsKCSAgICAgICAgcmV0dXJuIG51bGw7CgkgICAgICB9CgoJICAgICAgcmV0dXJuIF90aGlzLmxvYy5udW1iZXJGb3JtYXR0ZXIoX2V4dGVuZHMoewoJICAgICAgICBzdHlsZTogInVuaXQiLAoJICAgICAgICB1bml0RGlzcGxheTogImxvbmciCgkgICAgICB9LCBvcHRzLCB7CgkgICAgICAgIHVuaXQ6IHVuaXQuc2xpY2UoMCwgLTEpCgkgICAgICB9KSkuZm9ybWF0KHZhbCk7CgkgICAgfSkuZmlsdGVyKGZ1bmN0aW9uIChuKSB7CgkgICAgICByZXR1cm4gbjsKCSAgICB9KTsKCSAgICByZXR1cm4gdGhpcy5sb2MubGlzdEZvcm1hdHRlcihfZXh0ZW5kcyh7CgkgICAgICB0eXBlOiAiY29uanVuY3Rpb24iLAoJICAgICAgc3R5bGU6IG9wdHMubGlzdFN0eWxlIHx8ICJuYXJyb3ciCgkgICAgfSwgb3B0cykpLmZvcm1hdChsKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGggdGhpcyBEdXJhdGlvbidzIHZhbHVlcy4KCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0KCSAgICogQHJldHVybiB7T2JqZWN0fQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QoKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTsKCSAgICByZXR1cm4gX2V4dGVuZHMoe30sIHRoaXMudmFsdWVzKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24uCgkgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjRHVyYXRpb25zCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMywgc2Vjb25kczogNDUgfSkudG9JU08oKSAvLz0+ICdQM1lUNDVTJwoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiA0LCBzZWNvbmRzOiA0NSB9KS50b0lTTygpIC8vPT4gJ1A0TVQ0NVMnCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDUgfSkudG9JU08oKSAvLz0+ICdQNU0nCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaW51dGVzOiA1IH0pLnRvSVNPKCkgLy89PiAnUFQ1TScKCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbGxpc2Vjb25kczogNiB9KS50b0lTTygpIC8vPT4gJ1BUMC4wMDZTJwoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9JU08gPSBmdW5jdGlvbiB0b0lTTygpIHsKCSAgICAvLyB3ZSBjb3VsZCB1c2UgdGhlIGZvcm1hdHRlciwgYnV0IHRoaXMgaXMgYW4gZWFzaWVyIHdheSB0byBnZXQgdGhlIG1pbmltdW0gc3RyaW5nCgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBudWxsOwoJICAgIHZhciBzID0gIlAiOwoJICAgIGlmICh0aGlzLnllYXJzICE9PSAwKSBzICs9IHRoaXMueWVhcnMgKyAiWSI7CgkgICAgaWYgKHRoaXMubW9udGhzICE9PSAwIHx8IHRoaXMucXVhcnRlcnMgIT09IDApIHMgKz0gdGhpcy5tb250aHMgKyB0aGlzLnF1YXJ0ZXJzICogMyArICJNIjsKCSAgICBpZiAodGhpcy53ZWVrcyAhPT0gMCkgcyArPSB0aGlzLndlZWtzICsgIlciOwoJICAgIGlmICh0aGlzLmRheXMgIT09IDApIHMgKz0gdGhpcy5kYXlzICsgIkQiOwoJICAgIGlmICh0aGlzLmhvdXJzICE9PSAwIHx8IHRoaXMubWludXRlcyAhPT0gMCB8fCB0aGlzLnNlY29uZHMgIT09IDAgfHwgdGhpcy5taWxsaXNlY29uZHMgIT09IDApIHMgKz0gIlQiOwoJICAgIGlmICh0aGlzLmhvdXJzICE9PSAwKSBzICs9IHRoaXMuaG91cnMgKyAiSCI7CgkgICAgaWYgKHRoaXMubWludXRlcyAhPT0gMCkgcyArPSB0aGlzLm1pbnV0ZXMgKyAiTSI7CgkgICAgaWYgKHRoaXMuc2Vjb25kcyAhPT0gMCB8fCB0aGlzLm1pbGxpc2Vjb25kcyAhPT0gMCkgLy8gdGhpcyB3aWxsIGhhbmRsZSAiZmxvYXRpbmcgcG9pbnQgbWFkbmVzcyIgYnkgcmVtb3ZpbmcgZXh0cmEgZGVjaW1hbCBwbGFjZXMKCSAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU4ODAwNC9pcy1mbG9hdGluZy1wb2ludC1tYXRoLWJyb2tlbgoJICAgICAgcyArPSByb3VuZFRvKHRoaXMuc2Vjb25kcyArIHRoaXMubWlsbGlzZWNvbmRzIC8gMTAwMCwgMykgKyAiUyI7CgkgICAgaWYgKHMgPT09ICJQIikgcyArPSAiVDBTIjsKCSAgICByZXR1cm4gczsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24sIGZvcm1hdHRlZCBhcyBhIHRpbWUgb2YgZGF5LgoJICAgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoZSBkdXJhdGlvbiBpcyBpbnZhbGlkLCBuZWdhdGl2ZSwgb3IgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDI0IGhvdXJzLgoJICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVzCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDAKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc1NlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDAKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlUHJlZml4PWZhbHNlXSAtIGluY2x1ZGUgdGhlIGBUYCBwcmVmaXgKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0CgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKCkgLy89PiAnMTE6MDA6MDAuMDAwJwoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IHN1cHByZXNzTWlsbGlzZWNvbmRzOiB0cnVlIH0pIC8vPT4gJzExOjAwOjAwJwoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IHN1cHByZXNzU2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcxMTowMCcKCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBpbmNsdWRlUHJlZml4OiB0cnVlIH0pIC8vPT4gJ1QxMTowMDowMC4wMDAnCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzExMDAwMC4wMDAnCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0lTT1RpbWUgPSBmdW5jdGlvbiB0b0lTT1RpbWUob3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDsKCSAgICB2YXIgbWlsbGlzID0gdGhpcy50b01pbGxpcygpOwoJICAgIGlmIChtaWxsaXMgPCAwIHx8IG1pbGxpcyA+PSA4NjQwMDAwMCkgcmV0dXJuIG51bGw7CgkgICAgb3B0cyA9IF9leHRlbmRzKHsKCSAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzOiBmYWxzZSwKCSAgICAgIHN1cHByZXNzU2Vjb25kczogZmFsc2UsCgkgICAgICBpbmNsdWRlUHJlZml4OiBmYWxzZSwKCSAgICAgIGZvcm1hdDogImV4dGVuZGVkIgoJICAgIH0sIG9wdHMpOwoJICAgIHZhciB2YWx1ZSA9IHRoaXMuc2hpZnRUbygiaG91cnMiLCAibWludXRlcyIsICJzZWNvbmRzIiwgIm1pbGxpc2Vjb25kcyIpOwoJICAgIHZhciBmbXQgPSBvcHRzLmZvcm1hdCA9PT0gImJhc2ljIiA/ICJoaG1tIiA6ICJoaDptbSI7CgoJICAgIGlmICghb3B0cy5zdXBwcmVzc1NlY29uZHMgfHwgdmFsdWUuc2Vjb25kcyAhPT0gMCB8fCB2YWx1ZS5taWxsaXNlY29uZHMgIT09IDApIHsKCSAgICAgIGZtdCArPSBvcHRzLmZvcm1hdCA9PT0gImJhc2ljIiA/ICJzcyIgOiAiOnNzIjsKCgkgICAgICBpZiAoIW9wdHMuc3VwcHJlc3NNaWxsaXNlY29uZHMgfHwgdmFsdWUubWlsbGlzZWNvbmRzICE9PSAwKSB7CgkgICAgICAgIGZtdCArPSAiLlNTUyI7CgkgICAgICB9CgkgICAgfQoKCSAgICB2YXIgc3RyID0gdmFsdWUudG9Gb3JtYXQoZm10KTsKCgkgICAgaWYgKG9wdHMuaW5jbHVkZVByZWZpeCkgewoJICAgICAgc3RyID0gIlQiICsgc3RyOwoJICAgIH0KCgkgICAgcmV0dXJuIHN0cjsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBJU08gODYwMSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gSlNPTi4KCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHsKCSAgICByZXR1cm4gdGhpcy50b0lTTygpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBkZWJ1Z2dpbmcuCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewoJICAgIHJldHVybiB0aGlzLnRvSVNPKCk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYW4gbWlsbGlzZWNvbmRzIHZhbHVlIG9mIHRoaXMgRHVyYXRpb24uCgkgICAqIEByZXR1cm4ge251bWJlcn0KCSAgICovCgkgIDsKCgkgIF9wcm90by50b01pbGxpcyA9IGZ1bmN0aW9uIHRvTWlsbGlzKCkgewoJICAgIHJldHVybiB0aGlzLmFzKCJtaWxsaXNlY29uZHMiKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBtaWxsaXNlY29uZHMgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbi4gQWxpYXMgb2Yge0BsaW5rIHRvTWlsbGlzfQoJICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udmFsdWVPZiA9IGZ1bmN0aW9uIHZhbHVlT2YoKSB7CgkgICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTsKCSAgfQoJICAvKioKCSAgICogTWFrZSB0aGlzIER1cmF0aW9uIGxvbmdlciBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uCgkgICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KCkKCSAgICogQHJldHVybiB7RHVyYXRpb259CgkgICAqLwoJICA7CgoJICBfcHJvdG8ucGx1cyA9IGZ1bmN0aW9uIHBsdXMoZHVyYXRpb24pIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CgkgICAgdmFyIGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLAoJICAgICAgICByZXN1bHQgPSB7fTsKCgkgICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShvcmRlcmVkVW5pdHMkMSksIF9zdGVwOyAhKF9zdGVwID0gX2l0ZXJhdG9yKCkpLmRvbmU7KSB7CgkgICAgICB2YXIgayA9IF9zdGVwLnZhbHVlOwoKCSAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShkdXIudmFsdWVzLCBrKSB8fCBoYXNPd25Qcm9wZXJ0eSh0aGlzLnZhbHVlcywgaykpIHsKCSAgICAgICAgcmVzdWx0W2tdID0gZHVyLmdldChrKSArIHRoaXMuZ2V0KGspOwoJICAgICAgfQoJICAgIH0KCgkgICAgcmV0dXJuIGNsb25lJDEodGhpcywgewoJICAgICAgdmFsdWVzOiByZXN1bHQKCSAgICB9LCB0cnVlKTsKCSAgfQoJICAvKioKCSAgICogTWFrZSB0aGlzIER1cmF0aW9uIHNob3J0ZXIgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLgoJICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGFtb3VudCB0byBzdWJ0cmFjdC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KCkKCSAgICogQHJldHVybiB7RHVyYXRpb259CgkgICAqLwoJICA7CgoJICBfcHJvdG8ubWludXMgPSBmdW5jdGlvbiBtaW51cyhkdXJhdGlvbikgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCSAgICB2YXIgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbik7CgkgICAgcmV0dXJuIHRoaXMucGx1cyhkdXIubmVnYXRlKCkpOwoJICB9CgkgIC8qKgoJICAgKiBTY2FsZSB0aGlzIER1cmF0aW9uIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi4KCSAgICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCB1bml0LiBBcml0eSBpcyAxIG9yIDI6IHRoZSB2YWx1ZSBvZiB0aGUgdW5pdCBhbmQsIG9wdGlvbmFsbHksIHRoZSB1bml0IG5hbWUuIE11c3QgcmV0dXJuIGEgbnVtYmVyLgoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIG1pbnV0ZXM6IDMwIH0pLm1hcFVuaXRzKHggPT4geCAqIDIpIC8vPT4geyBob3VyczogMiwgbWludXRlczogNjAgfQoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIG1pbnV0ZXM6IDMwIH0pLm1hcFVuaXRzKCh4LCB1KSA9PiB1ID09PSAiaG91ciIgPyB4ICogMiA6IHgpIC8vPT4geyBob3VyczogMiwgbWludXRlczogMzAgfQoJICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5tYXBVbml0cyA9IGZ1bmN0aW9uIG1hcFVuaXRzKGZuKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwoJICAgIHZhciByZXN1bHQgPSB7fTsKCgkgICAgZm9yICh2YXIgX2kgPSAwLCBfT2JqZWN0JGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7IF9pIDwgX09iamVjdCRrZXlzLmxlbmd0aDsgX2krKykgewoJICAgICAgdmFyIGsgPSBfT2JqZWN0JGtleXNbX2ldOwoJICAgICAgcmVzdWx0W2tdID0gYXNOdW1iZXIoZm4odGhpcy52YWx1ZXNba10sIGspKTsKCSAgICB9CgoJICAgIHJldHVybiBjbG9uZSQxKHRoaXMsIHsKCSAgICAgIHZhbHVlczogcmVzdWx0CgkgICAgfSwgdHJ1ZSk7CgkgIH0KCSAgLyoqCgkgICAqIEdldCB0aGUgdmFsdWUgb2YgdW5pdC4KCSAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlJyBvciAnZGF5JwoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgneWVhcnMnKSAvLz0+IDIKCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDIsIGRheXM6IDN9KS5nZXQoJ21vbnRocycpIC8vPT4gMAoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgnZGF5cycpIC8vPT4gMwoJICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAqLwoJICA7CgoJICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHVuaXQpIHsKCSAgICByZXR1cm4gdGhpc1tEdXJhdGlvbi5ub3JtYWxpemVVbml0KHVuaXQpXTsKCSAgfQoJICAvKioKCSAgICogIlNldCIgdGhlIHZhbHVlcyBvZiBzcGVjaWZpZWQgdW5pdHMuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLgoJICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gYSBtYXBwaW5nIG9mIHVuaXRzIHRvIG51bWJlcnMKCSAgICogQGV4YW1wbGUgZHVyLnNldCh7IHllYXJzOiAyMDE3IH0pCgkgICAqIEBleGFtcGxlIGR1ci5zZXQoeyBob3VyczogOCwgbWludXRlczogMzAgfSkKCSAgICogQHJldHVybiB7RHVyYXRpb259CgkgICAqLwoJICA7CgoJICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KHZhbHVlcykgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCgkgICAgdmFyIG1peGVkID0gX2V4dGVuZHMoe30sIHRoaXMudmFsdWVzLCBub3JtYWxpemVPYmplY3QodmFsdWVzLCBEdXJhdGlvbi5ub3JtYWxpemVVbml0KSk7CgoJICAgIHJldHVybiBjbG9uZSQxKHRoaXMsIHsKCSAgICAgIHZhbHVlczogbWl4ZWQKCSAgICB9KTsKCSAgfQoJICAvKioKCSAgICogIlNldCIgdGhlIGxvY2FsZSBhbmQvb3IgbnVtYmVyaW5nU3lzdGVtLiAgUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLgoJICAgKiBAZXhhbXBsZSBkdXIucmVjb25maWd1cmUoeyBsb2NhbGU6ICdlbi1HQicgfSkKCSAgICogQHJldHVybiB7RHVyYXRpb259CgkgICAqLwoJICA7CgoJICBfcHJvdG8ucmVjb25maWd1cmUgPSBmdW5jdGlvbiByZWNvbmZpZ3VyZShfdGVtcCkgewoJICAgIHZhciBfcmVmID0gX3RlbXAgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAsCgkgICAgICAgIGxvY2FsZSA9IF9yZWYubG9jYWxlLAoJICAgICAgICBudW1iZXJpbmdTeXN0ZW0gPSBfcmVmLm51bWJlcmluZ1N5c3RlbSwKCSAgICAgICAgY29udmVyc2lvbkFjY3VyYWN5ID0gX3JlZi5jb252ZXJzaW9uQWNjdXJhY3k7CgoJICAgIHZhciBsb2MgPSB0aGlzLmxvYy5jbG9uZSh7CgkgICAgICBsb2NhbGU6IGxvY2FsZSwKCSAgICAgIG51bWJlcmluZ1N5c3RlbTogbnVtYmVyaW5nU3lzdGVtCgkgICAgfSksCgkgICAgICAgIG9wdHMgPSB7CgkgICAgICBsb2M6IGxvYwoJICAgIH07CgoJICAgIGlmIChjb252ZXJzaW9uQWNjdXJhY3kpIHsKCSAgICAgIG9wdHMuY29udmVyc2lvbkFjY3VyYWN5ID0gY29udmVyc2lvbkFjY3VyYWN5OwoJICAgIH0KCgkgICAgcmV0dXJuIGNsb25lJDEodGhpcywgb3B0cyk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBkdXJhdGlvbiBpbiB0aGUgc3BlY2lmaWVkIHVuaXQuCgkgICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gYSB1bml0IHN1Y2ggYXMgJ21pbnV0ZXMnIG9yICdkYXlzJwoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMX0pLmFzKCdkYXlzJykgLy89PiAzNjUKCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDF9KS5hcygnbW9udGhzJykgLy89PiAxMgoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHtob3VyczogNjB9KS5hcygnZGF5cycpIC8vPT4gMi41CgkgICAqIEByZXR1cm4ge251bWJlcn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5hcyA9IGZ1bmN0aW9uIGFzKHVuaXQpIHsKCSAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5zaGlmdFRvKHVuaXQpLmdldCh1bml0KSA6IE5hTjsKCSAgfQoJICAvKioKCSAgICogUmVkdWNlIHRoaXMgRHVyYXRpb24gdG8gaXRzIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiBpbiBpdHMgY3VycmVudCB1bml0cy4KCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAyLCBkYXlzOiA1MDAwIH0pLm5vcm1hbGl6ZSgpLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAxNSwgZGF5czogMjU1IH0KCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMiwgbWludXRlczogLTQ1IH0pLm5vcm1hbGl6ZSgpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMTUgfQoJICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5ub3JtYWxpemUgPSBmdW5jdGlvbiBub3JtYWxpemUoKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwoJICAgIHZhciB2YWxzID0gdGhpcy50b09iamVjdCgpOwoJICAgIG5vcm1hbGl6ZVZhbHVlcyh0aGlzLm1hdHJpeCwgdmFscyk7CgkgICAgcmV0dXJuIGNsb25lJDEodGhpcywgewoJICAgICAgdmFsdWVzOiB2YWxzCgkgICAgfSwgdHJ1ZSk7CgkgIH0KCSAgLyoqCgkgICAqIENvbnZlcnQgdGhpcyBEdXJhdGlvbiBpbnRvIGl0cyByZXByZXNlbnRhdGlvbiBpbiBhIGRpZmZlcmVudCBzZXQgb2YgdW5pdHMuCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgc2Vjb25kczogMzAgfSkuc2hpZnRUbygnbWludXRlcycsICdtaWxsaXNlY29uZHMnKS50b09iamVjdCgpIC8vPT4geyBtaW51dGVzOiA2MCwgbWlsbGlzZWNvbmRzOiAzMDAwMCB9CgkgICAqIEByZXR1cm4ge0R1cmF0aW9ufQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnNoaWZ0VG8gPSBmdW5jdGlvbiBzaGlmdFRvKCkgewoJICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCB1bml0cyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKCSAgICAgIHVuaXRzW19rZXldID0gYXJndW1lbnRzW19rZXldOwoJICAgIH0KCgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwoKCSAgICBpZiAodW5pdHMubGVuZ3RoID09PSAwKSB7CgkgICAgICByZXR1cm4gdGhpczsKCSAgICB9CgoJICAgIHVuaXRzID0gdW5pdHMubWFwKGZ1bmN0aW9uICh1KSB7CgkgICAgICByZXR1cm4gRHVyYXRpb24ubm9ybWFsaXplVW5pdCh1KTsKCSAgICB9KTsKCSAgICB2YXIgYnVpbHQgPSB7fSwKCSAgICAgICAgYWNjdW11bGF0ZWQgPSB7fSwKCSAgICAgICAgdmFscyA9IHRoaXMudG9PYmplY3QoKTsKCSAgICB2YXIgbGFzdFVuaXQ7CgoJICAgIGZvciAodmFyIF9pdGVyYXRvcjIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKG9yZGVyZWRVbml0cyQxKSwgX3N0ZXAyOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIoKSkuZG9uZTspIHsKCSAgICAgIHZhciBrID0gX3N0ZXAyLnZhbHVlOwoKCSAgICAgIGlmICh1bml0cy5pbmRleE9mKGspID49IDApIHsKCSAgICAgICAgbGFzdFVuaXQgPSBrOwoJICAgICAgICB2YXIgb3duID0gMDsgLy8gYW55dGhpbmcgd2UgaGF2ZW4ndCBib2lsZWQgZG93biB5ZXQgc2hvdWxkIGdldCBib2lsZWQgdG8gdGhpcyB1bml0CgoJICAgICAgICBmb3IgKHZhciBhayBpbiBhY2N1bXVsYXRlZCkgewoJICAgICAgICAgIG93biArPSB0aGlzLm1hdHJpeFtha11ba10gKiBhY2N1bXVsYXRlZFtha107CgkgICAgICAgICAgYWNjdW11bGF0ZWRbYWtdID0gMDsKCSAgICAgICAgfSAvLyBwbHVzIGFueXRoaW5nIHRoYXQncyBhbHJlYWR5IGluIHRoaXMgdW5pdAoKCgkgICAgICAgIGlmIChpc051bWJlcih2YWxzW2tdKSkgewoJICAgICAgICAgIG93biArPSB2YWxzW2tdOwoJICAgICAgICB9CgoJICAgICAgICB2YXIgaSA9IE1hdGgudHJ1bmMob3duKTsKCSAgICAgICAgYnVpbHRba10gPSBpOwoJICAgICAgICBhY2N1bXVsYXRlZFtrXSA9IChvd24gKiAxMDAwIC0gaSAqIDEwMDApIC8gMTAwMDsgLy8gcGx1cyBhbnl0aGluZyBmdXJ0aGVyIGRvd24gdGhlIGNoYWluIHRoYXQgc2hvdWxkIGJlIHJvbGxlZCB1cCBpbiB0byB0aGlzCgoJICAgICAgICBmb3IgKHZhciBkb3duIGluIHZhbHMpIHsKCSAgICAgICAgICBpZiAob3JkZXJlZFVuaXRzJDEuaW5kZXhPZihkb3duKSA+IG9yZGVyZWRVbml0cyQxLmluZGV4T2YoaykpIHsKCSAgICAgICAgICAgIGNvbnZlcnQodGhpcy5tYXRyaXgsIHZhbHMsIGRvd24sIGJ1aWx0LCBrKTsKCSAgICAgICAgICB9CgkgICAgICAgIH0gLy8gb3RoZXJ3aXNlLCBrZWVwIGl0IGluIHRoZSB3aW5ncyB0byBib2lsIGl0IGxhdGVyCgoJICAgICAgfSBlbHNlIGlmIChpc051bWJlcih2YWxzW2tdKSkgewoJICAgICAgICBhY2N1bXVsYXRlZFtrXSA9IHZhbHNba107CgkgICAgICB9CgkgICAgfSAvLyBhbnl0aGluZyBsZWZ0b3ZlciBiZWNvbWVzIHRoZSBkZWNpbWFsIGZvciB0aGUgbGFzdCB1bml0CgkgICAgLy8gbGFzdFVuaXQgbXVzdCBiZSBkZWZpbmVkIHNpbmNlIHVuaXRzIGlzIG5vdCBlbXB0eQoKCgkgICAgZm9yICh2YXIga2V5IGluIGFjY3VtdWxhdGVkKSB7CgkgICAgICBpZiAoYWNjdW11bGF0ZWRba2V5XSAhPT0gMCkgewoJICAgICAgICBidWlsdFtsYXN0VW5pdF0gKz0ga2V5ID09PSBsYXN0VW5pdCA/IGFjY3VtdWxhdGVkW2tleV0gOiBhY2N1bXVsYXRlZFtrZXldIC8gdGhpcy5tYXRyaXhbbGFzdFVuaXRdW2tleV07CgkgICAgICB9CgkgICAgfQoKCSAgICByZXR1cm4gY2xvbmUkMSh0aGlzLCB7CgkgICAgICB2YWx1ZXM6IGJ1aWx0CgkgICAgfSwgdHJ1ZSkubm9ybWFsaXplKCk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB0aGUgbmVnYXRpdmUgb2YgdGhpcyBEdXJhdGlvbi4KCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBzZWNvbmRzOiAzMCB9KS5uZWdhdGUoKS50b09iamVjdCgpIC8vPT4geyBob3VyczogLTEsIHNlY29uZHM6IC0zMCB9CgkgICAqIEByZXR1cm4ge0R1cmF0aW9ufQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLm5lZ2F0ZSA9IGZ1bmN0aW9uIG5lZ2F0ZSgpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CgkgICAgdmFyIG5lZ2F0ZWQgPSB7fTsKCgkgICAgZm9yICh2YXIgX2kyID0gMCwgX09iamVjdCRrZXlzMiA9IE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKTsgX2kyIDwgX09iamVjdCRrZXlzMi5sZW5ndGg7IF9pMisrKSB7CgkgICAgICB2YXIgayA9IF9PYmplY3Qka2V5czJbX2kyXTsKCSAgICAgIG5lZ2F0ZWRba10gPSB0aGlzLnZhbHVlc1trXSA9PT0gMCA/IDAgOiAtdGhpcy52YWx1ZXNba107CgkgICAgfQoKCSAgICByZXR1cm4gY2xvbmUkMSh0aGlzLCB7CgkgICAgICB2YWx1ZXM6IG5lZ2F0ZWQKCSAgICB9LCB0cnVlKTsKCSAgfQoJICAvKioKCSAgICogR2V0IHRoZSB5ZWFycy4KCSAgICogQHR5cGUge251bWJlcn0KCSAgICovCgkgIDsKCgkgIC8qKgoJICAgKiBFcXVhbGl0eSBjaGVjawoJICAgKiBUd28gRHVyYXRpb25zIGFyZSBlcXVhbCBpZmYgdGhleSBoYXZlIHRoZSBzYW1lIHVuaXRzIGFuZCB0aGUgc2FtZSB2YWx1ZXMgZm9yIGVhY2ggdW5pdC4KCSAgICogQHBhcmFtIHtEdXJhdGlvbn0gb3RoZXIKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIF9wcm90by5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhb3RoZXIuaXNWYWxpZCkgewoJICAgICAgcmV0dXJuIGZhbHNlOwoJICAgIH0KCgkgICAgaWYgKCF0aGlzLmxvYy5lcXVhbHMob3RoZXIubG9jKSkgewoJICAgICAgcmV0dXJuIGZhbHNlOwoJICAgIH0KCgkgICAgZnVuY3Rpb24gZXEodjEsIHYyKSB7CgkgICAgICAvLyBDb25zaWRlciAwIGFuZCB1bmRlZmluZWQgYXMgZXF1YWwKCSAgICAgIGlmICh2MSA9PT0gdW5kZWZpbmVkIHx8IHYxID09PSAwKSByZXR1cm4gdjIgPT09IHVuZGVmaW5lZCB8fCB2MiA9PT0gMDsKCSAgICAgIHJldHVybiB2MSA9PT0gdjI7CgkgICAgfQoKCSAgICBmb3IgKHZhciBfaXRlcmF0b3IzID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShvcmRlcmVkVW5pdHMkMSksIF9zdGVwMzsgIShfc3RlcDMgPSBfaXRlcmF0b3IzKCkpLmRvbmU7KSB7CgkgICAgICB2YXIgdSA9IF9zdGVwMy52YWx1ZTsKCgkgICAgICBpZiAoIWVxKHRoaXMudmFsdWVzW3VdLCBvdGhlci52YWx1ZXNbdV0pKSB7CgkgICAgICAgIHJldHVybiBmYWxzZTsKCSAgICAgIH0KCSAgICB9CgoJICAgIHJldHVybiB0cnVlOwoJICB9OwoKCSAgX2NyZWF0ZUNsYXNzKER1cmF0aW9uLCBbewoJICAgIGtleTogImxvY2FsZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubG9jYWxlIDogbnVsbDsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBudW1iZXJpbmcgc3lzdGVtIG9mIGEgRHVyYXRpb24sIHN1Y2ggJ2JlbmcnLiBUaGUgbnVtYmVyaW5nIHN5c3RlbSBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRHVyYXRpb24KCSAgICAgKgoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAibnVtYmVyaW5nU3lzdGVtIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsOwoJICAgIH0KCSAgfSwgewoJICAgIGtleTogInllYXJzIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy55ZWFycyB8fCAwIDogTmFOOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIHF1YXJ0ZXJzLgoJICAgICAqIEB0eXBlIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAicXVhcnRlcnMiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLnF1YXJ0ZXJzIHx8IDAgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgbW9udGhzLgoJICAgICAqIEB0eXBlIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAibW9udGhzIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5tb250aHMgfHwgMCA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSB3ZWVrcwoJICAgICAqIEB0eXBlIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAid2Vla3MiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLndlZWtzIHx8IDAgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgZGF5cy4KCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImRheXMiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLmRheXMgfHwgMCA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBob3Vycy4KCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImhvdXJzIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5ob3VycyB8fCAwIDogTmFOOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIG1pbnV0ZXMuCgkgICAgICogQHR5cGUge251bWJlcn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJtaW51dGVzIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5taW51dGVzIHx8IDAgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgc2Vjb25kcy4KCSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAic2Vjb25kcyIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuc2Vjb25kcyB8fCAwIDogTmFOOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIG1pbGxpc2Vjb25kcy4KCSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAibWlsbGlzZWNvbmRzIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5taWxsaXNlY29uZHMgfHwgMCA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBEdXJhdGlvbiBpcyBpbnZhbGlkLiBJbnZhbGlkIGR1cmF0aW9ucyBhcmUgcmV0dXJuZWQgYnkgZGlmZiBvcGVyYXRpb25zCgkgICAgICogb24gaW52YWxpZCBEYXRlVGltZXMgb3IgSW50ZXJ2YWxzLgoJICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaXNWYWxpZCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID09PSBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBEdXJhdGlvbiBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRHVyYXRpb24gaXMgdmFsaWQKCSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaW52YWxpZFJlYXNvbiIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgRHVyYXRpb24gYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIER1cmF0aW9uIGlzIHZhbGlkCgkgICAgICogQHR5cGUge3N0cmluZ30KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJpbnZhbGlkRXhwbGFuYXRpb24iLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7CgkgICAgfQoJICB9XSk7CgoJICByZXR1cm4gRHVyYXRpb247Cgl9KCk7CgoJdmFyIElOVkFMSUQkMSA9ICJJbnZhbGlkIEludGVydmFsIjsgLy8gY2hlY2tzIGlmIHRoZSBzdGFydCBpcyBlcXVhbCB0byBvciBiZWZvcmUgdGhlIGVuZAoKCWZ1bmN0aW9uIHZhbGlkYXRlU3RhcnRFbmQoc3RhcnQsIGVuZCkgewoJICBpZiAoIXN0YXJ0IHx8ICFzdGFydC5pc1ZhbGlkKSB7CgkgICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoIm1pc3Npbmcgb3IgaW52YWxpZCBzdGFydCIpOwoJICB9IGVsc2UgaWYgKCFlbmQgfHwgIWVuZC5pc1ZhbGlkKSB7CgkgICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoIm1pc3Npbmcgb3IgaW52YWxpZCBlbmQiKTsKCSAgfSBlbHNlIGlmIChlbmQgPCBzdGFydCkgewoJICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKCJlbmQgYmVmb3JlIHN0YXJ0IiwgIlRoZSBlbmQgb2YgYW4gaW50ZXJ2YWwgbXVzdCBiZSBhZnRlciBpdHMgc3RhcnQsIGJ1dCB5b3UgaGFkIHN0YXJ0PSIgKyBzdGFydC50b0lTTygpICsgIiBhbmQgZW5kPSIgKyBlbmQudG9JU08oKSk7CgkgIH0gZWxzZSB7CgkgICAgcmV0dXJuIG51bGw7CgkgIH0KCX0KCS8qKgoJICogQW4gSW50ZXJ2YWwgb2JqZWN0IHJlcHJlc2VudHMgYSBoYWxmLW9wZW4gaW50ZXJ2YWwgb2YgdGltZSwgd2hlcmUgZWFjaCBlbmRwb2ludCBpcyBhIHtAbGluayBEYXRlVGltZX0uIENvbmNlcHR1YWxseSwgaXQncyBhIGNvbnRhaW5lciBmb3IgdGhvc2UgdHdvIGVuZHBvaW50cywgYWNjb21wYW5pZWQgYnkgbWV0aG9kcyBmb3IgY3JlYXRpbmcsIHBhcnNpbmcsIGludGVycm9nYXRpbmcsIGNvbXBhcmluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLgoJICoKCSAqIEhlcmUgaXMgYSBicmllZiBvdmVydmlldyBvZiB0aGUgbW9zdCBjb21tb25seSB1c2VkIG1ldGhvZHMgYW5kIGdldHRlcnMgaW4gSW50ZXJ2YWw6CgkgKgoJICogKiAqKkNyZWF0aW9uKiogVG8gY3JlYXRlIGFuIEludGVydmFsLCB1c2Uge0BsaW5rIEludGVydmFsI2Zyb21EYXRlVGltZXN9LCB7QGxpbmsgSW50ZXJ2YWwjYWZ0ZXJ9LCB7QGxpbmsgSW50ZXJ2YWwjYmVmb3JlfSwgb3Ige0BsaW5rIEludGVydmFsI2Zyb21JU099LgoJICogKiAqKkFjY2Vzc29ycyoqIFVzZSB7QGxpbmsgSW50ZXJ2YWwjc3RhcnR9IGFuZCB7QGxpbmsgSW50ZXJ2YWwjZW5kfSB0byBnZXQgdGhlIHN0YXJ0IGFuZCBlbmQuCgkgKiAqICoqSW50ZXJyb2dhdGlvbioqIFRvIGFuYWx5emUgdGhlIEludGVydmFsLCB1c2Uge0BsaW5rIEludGVydmFsI2NvdW50fSwge0BsaW5rIEludGVydmFsI2xlbmd0aH0sIHtAbGluayBJbnRlcnZhbCNoYXNTYW1lfSwge0BsaW5rIEludGVydmFsI2NvbnRhaW5zfSwge0BsaW5rIEludGVydmFsI2lzQWZ0ZXJ9LCBvciB7QGxpbmsgSW50ZXJ2YWwjaXNCZWZvcmV9LgoJICogKiAqKlRyYW5zZm9ybWF0aW9uKiogVG8gY3JlYXRlIG90aGVyIEludGVydmFscyBvdXQgb2YgdGhpcyBvbmUsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjc2V0fSwge0BsaW5rIEludGVydmFsI3NwbGl0QXR9LCB7QGxpbmsgSW50ZXJ2YWwjc3BsaXRCeX0sIHtAbGluayBJbnRlcnZhbCNkaXZpZGVFcXVhbGx5fSwge0BsaW5rIEludGVydmFsI21lcmdlfSwge0BsaW5rIEludGVydmFsI3hvcn0sIHtAbGluayBJbnRlcnZhbCN1bmlvbn0sIHtAbGluayBJbnRlcnZhbCNpbnRlcnNlY3Rpb259LCBvciB7QGxpbmsgSW50ZXJ2YWwjZGlmZmVyZW5jZX0uCgkgKiAqICoqQ29tcGFyaXNvbioqIFRvIGNvbXBhcmUgdGhpcyBJbnRlcnZhbCB0byBhbm90aGVyIG9uZSwgdXNlIHtAbGluayBJbnRlcnZhbCNlcXVhbHN9LCB7QGxpbmsgSW50ZXJ2YWwjb3ZlcmxhcHN9LCB7QGxpbmsgSW50ZXJ2YWwjYWJ1dHNTdGFydH0sIHtAbGluayBJbnRlcnZhbCNhYnV0c0VuZH0sIHtAbGluayBJbnRlcnZhbCNlbmd1bGZzfQoJICogKiAqKk91dHB1dCoqIFRvIGNvbnZlcnQgdGhlIEludGVydmFsIGludG8gb3RoZXIgcmVwcmVzZW50YXRpb25zLCBzZWUge0BsaW5rIEludGVydmFsI3RvU3RyaW5nfSwge0BsaW5rIEludGVydmFsI3RvSVNPfSwge0BsaW5rIEludGVydmFsI3RvSVNPRGF0ZX0sIHtAbGluayBJbnRlcnZhbCN0b0lTT1RpbWV9LCB7QGxpbmsgSW50ZXJ2YWwjdG9Gb3JtYXR9LCBhbmQge0BsaW5rIEludGVydmFsI3RvRHVyYXRpb259LgoJICovCgoKCXZhciBJbnRlcnZhbCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CgkgIC8qKgoJICAgKiBAcHJpdmF0ZQoJICAgKi8KCSAgZnVuY3Rpb24gSW50ZXJ2YWwoY29uZmlnKSB7CgkgICAgLyoqCgkgICAgICogQGFjY2VzcyBwcml2YXRlCgkgICAgICovCgkgICAgdGhpcy5zID0gY29uZmlnLnN0YXJ0OwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLmUgPSBjb25maWcuZW5kOwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLmludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCBudWxsOwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLmlzTHV4b25JbnRlcnZhbCA9IHRydWU7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhbiBpbnZhbGlkIEludGVydmFsLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gc2ltcGxlIHN0cmluZyBvZiB3aHkgdGhpcyBJbnRlcnZhbCBpcyBpbnZhbGlkLiBTaG91bGQgbm90IGNvbnRhaW4gcGFyYW1ldGVycyBvciBhbnl0aGluZyBlbHNlIGRhdGEtZGVwZW5kZW50CgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwbGFuYXRpb249bnVsbF0gLSBsb25nZXIgZXhwbGFuYXRpb24sIG1heSBpbmNsdWRlIHBhcmFtZXRlcnMgYW5kIG90aGVyIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KCSAgICogQHJldHVybiB7SW50ZXJ2YWx9CgkgICAqLwoKCgkgIEludGVydmFsLmludmFsaWQgPSBmdW5jdGlvbiBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pIHsKCSAgICBpZiAoZXhwbGFuYXRpb24gPT09IHZvaWQgMCkgewoJICAgICAgZXhwbGFuYXRpb24gPSBudWxsOwoJICAgIH0KCgkgICAgaWYgKCFyZWFzb24pIHsKCSAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBJbnRlcnZhbCBpcyBpbnZhbGlkIik7CgkgICAgfQoKCSAgICB2YXIgaW52YWxpZCA9IHJlYXNvbiBpbnN0YW5jZW9mIEludmFsaWQgPyByZWFzb24gOiBuZXcgSW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uKTsKCgkgICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7CgkgICAgICB0aHJvdyBuZXcgSW52YWxpZEludGVydmFsRXJyb3IoaW52YWxpZCk7CgkgICAgfSBlbHNlIHsKCSAgICAgIHJldHVybiBuZXcgSW50ZXJ2YWwoewoJICAgICAgICBpbnZhbGlkOiBpbnZhbGlkCgkgICAgICB9KTsKCSAgICB9CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGEgc3RhcnQgRGF0ZVRpbWUgYW5kIGFuIGVuZCBEYXRlVGltZS4gSW5jbHVzaXZlIG9mIHRoZSBzdGFydCBidXQgbm90IHRoZSBlbmQuCgkgICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IHN0YXJ0CgkgICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IGVuZAoJICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KCSAgICovCgkgIDsKCgkgIEludGVydmFsLmZyb21EYXRlVGltZXMgPSBmdW5jdGlvbiBmcm9tRGF0ZVRpbWVzKHN0YXJ0LCBlbmQpIHsKCSAgICB2YXIgYnVpbHRTdGFydCA9IGZyaWVuZGx5RGF0ZVRpbWUoc3RhcnQpLAoJICAgICAgICBidWlsdEVuZCA9IGZyaWVuZGx5RGF0ZVRpbWUoZW5kKTsKCSAgICB2YXIgdmFsaWRhdGVFcnJvciA9IHZhbGlkYXRlU3RhcnRFbmQoYnVpbHRTdGFydCwgYnVpbHRFbmQpOwoKCSAgICBpZiAodmFsaWRhdGVFcnJvciA9PSBudWxsKSB7CgkgICAgICByZXR1cm4gbmV3IEludGVydmFsKHsKCSAgICAgICAgc3RhcnQ6IGJ1aWx0U3RhcnQsCgkgICAgICAgIGVuZDogYnVpbHRFbmQKCSAgICAgIH0pOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gdmFsaWRhdGVFcnJvcjsKCSAgICB9CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGEgc3RhcnQgRGF0ZVRpbWUgYW5kIGEgRHVyYXRpb24gdG8gZXh0ZW5kIHRvLgoJICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBzdGFydAoJICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwuCgkgICAqIEByZXR1cm4ge0ludGVydmFsfQoJICAgKi8KCSAgOwoKCSAgSW50ZXJ2YWwuYWZ0ZXIgPSBmdW5jdGlvbiBhZnRlcihzdGFydCwgZHVyYXRpb24pIHsKCSAgICB2YXIgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksCgkgICAgICAgIGR0ID0gZnJpZW5kbHlEYXRlVGltZShzdGFydCk7CgkgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQsIGR0LnBsdXMoZHVyKSk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGFuIGVuZCBEYXRlVGltZSBhbmQgYSBEdXJhdGlvbiB0byBleHRlbmQgYmFja3dhcmRzIHRvLgoJICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBlbmQKCSAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIHRoZSBsZW5ndGggb2YgdGhlIEludGVydmFsLgoJICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KCSAgICovCgkgIDsKCgkgIEludGVydmFsLmJlZm9yZSA9IGZ1bmN0aW9uIGJlZm9yZShlbmQsIGR1cmF0aW9uKSB7CgkgICAgdmFyIGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLAoJICAgICAgICBkdCA9IGZyaWVuZGx5RGF0ZVRpbWUoZW5kKTsKCSAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdC5taW51cyhkdXIpLCBkdCk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGFuIElTTyA4NjAxIHN0cmluZy4KCSAgICogQWNjZXB0cyBgPHN0YXJ0Pi88ZW5kPmAsIGA8c3RhcnQ+LzxkdXJhdGlvbj5gLCBhbmQgYDxkdXJhdGlvbj4vPGVuZD5gIGZvcm1hdHMuCgkgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIElTTyBzdHJpbmcgdG8gcGFyc2UKCSAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIG9wdGlvbnMgdG8gcGFzcyB7QGxpbmsgRGF0ZVRpbWUjZnJvbUlTT30gYW5kIG9wdGlvbmFsbHkge0BsaW5rIER1cmF0aW9uI2Zyb21JU099CgkgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHMKCSAgICogQHJldHVybiB7SW50ZXJ2YWx9CgkgICAqLwoJICA7CgoJICBJbnRlcnZhbC5mcm9tSVNPID0gZnVuY3Rpb24gZnJvbUlTTyh0ZXh0LCBvcHRzKSB7CgkgICAgdmFyIF9zcGxpdCA9ICh0ZXh0IHx8ICIiKS5zcGxpdCgiLyIsIDIpLAoJICAgICAgICBzID0gX3NwbGl0WzBdLAoJICAgICAgICBlID0gX3NwbGl0WzFdOwoKCSAgICBpZiAocyAmJiBlKSB7CgkgICAgICB2YXIgc3RhcnQsIHN0YXJ0SXNWYWxpZDsKCgkgICAgICB0cnkgewoJICAgICAgICBzdGFydCA9IERhdGVUaW1lLmZyb21JU08ocywgb3B0cyk7CgkgICAgICAgIHN0YXJ0SXNWYWxpZCA9IHN0YXJ0LmlzVmFsaWQ7CgkgICAgICB9IGNhdGNoIChlKSB7CgkgICAgICAgIHN0YXJ0SXNWYWxpZCA9IGZhbHNlOwoJICAgICAgfQoKCSAgICAgIHZhciBlbmQsIGVuZElzVmFsaWQ7CgoJICAgICAgdHJ5IHsKCSAgICAgICAgZW5kID0gRGF0ZVRpbWUuZnJvbUlTTyhlLCBvcHRzKTsKCSAgICAgICAgZW5kSXNWYWxpZCA9IGVuZC5pc1ZhbGlkOwoJICAgICAgfSBjYXRjaCAoZSkgewoJICAgICAgICBlbmRJc1ZhbGlkID0gZmFsc2U7CgkgICAgICB9CgoJICAgICAgaWYgKHN0YXJ0SXNWYWxpZCAmJiBlbmRJc1ZhbGlkKSB7CgkgICAgICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHN0YXJ0LCBlbmQpOwoJICAgICAgfQoKCSAgICAgIGlmIChzdGFydElzVmFsaWQpIHsKCSAgICAgICAgdmFyIGR1ciA9IER1cmF0aW9uLmZyb21JU08oZSwgb3B0cyk7CgoJICAgICAgICBpZiAoZHVyLmlzVmFsaWQpIHsKCSAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwuYWZ0ZXIoc3RhcnQsIGR1cik7CgkgICAgICAgIH0KCSAgICAgIH0gZWxzZSBpZiAoZW5kSXNWYWxpZCkgewoJICAgICAgICB2YXIgX2R1ciA9IER1cmF0aW9uLmZyb21JU08ocywgb3B0cyk7CgoJICAgICAgICBpZiAoX2R1ci5pc1ZhbGlkKSB7CgkgICAgICAgICAgcmV0dXJuIEludGVydmFsLmJlZm9yZShlbmQsIF9kdXIpOwoJICAgICAgICB9CgkgICAgICB9CgkgICAgfQoKCSAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZCgidW5wYXJzYWJsZSIsICJ0aGUgaW5wdXQgXCIiICsgdGV4dCArICJcIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDEiKTsKCSAgfQoJICAvKioKCSAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEludGVydmFsLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzCgkgICAqIEBwYXJhbSB7b2JqZWN0fSBvCgkgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICBJbnRlcnZhbC5pc0ludGVydmFsID0gZnVuY3Rpb24gaXNJbnRlcnZhbChvKSB7CgkgICAgcmV0dXJuIG8gJiYgby5pc0x1eG9uSW50ZXJ2YWwgfHwgZmFsc2U7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgdGhlIHN0YXJ0IG9mIHRoZSBJbnRlcnZhbAoJICAgKiBAdHlwZSB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICB2YXIgX3Byb3RvID0gSW50ZXJ2YWwucHJvdG90eXBlOwoKCSAgLyoqCgkgICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwgaW4gdGhlIHNwZWNpZmllZCB1bml0LgoJICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byByZXR1cm4gdGhlIGxlbmd0aCBpbi4KCSAgICogQHJldHVybiB7bnVtYmVyfQoJICAgKi8KCSAgX3Byb3RvLmxlbmd0aCA9IGZ1bmN0aW9uIGxlbmd0aCh1bml0KSB7CgkgICAgaWYgKHVuaXQgPT09IHZvaWQgMCkgewoJICAgICAgdW5pdCA9ICJtaWxsaXNlY29uZHMiOwoJICAgIH0KCgkgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudG9EdXJhdGlvbi5hcHBseSh0aGlzLCBbdW5pdF0pLmdldCh1bml0KSA6IE5hTjsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyB0aGUgY291bnQgb2YgbWludXRlcywgaG91cnMsIGRheXMsIG1vbnRocywgb3IgeWVhcnMgaW5jbHVkZWQgaW4gdGhlIEludGVydmFsLCBldmVuIGluIHBhcnQuCgkgICAqIFVubGlrZSB7QGxpbmsgSW50ZXJ2YWwjbGVuZ3RofSB0aGlzIGNvdW50cyBzZWN0aW9ucyBvZiB0aGUgY2FsZW5kYXIsIG5vdCBwZXJpb2RzIG9mIHRpbWUsIGUuZy4gc3BlY2lmeWluZyAnZGF5JwoJICAgKiBhc2tzICd3aGF0IGRhdGVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzIGludGVydmFsPycsIG5vdCAnaG93IG1hbnkgZGF5cyBsb25nIGlzIHRoaXMgaW50ZXJ2YWw/JwoJICAgKiBAcGFyYW0ge3N0cmluZ30gW3VuaXQ9J21pbGxpc2Vjb25kcyddIC0gdGhlIHVuaXQgb2YgdGltZSB0byBjb3VudC4KCSAgICogQHJldHVybiB7bnVtYmVyfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLmNvdW50ID0gZnVuY3Rpb24gY291bnQodW5pdCkgewoJICAgIGlmICh1bml0ID09PSB2b2lkIDApIHsKCSAgICAgIHVuaXQgPSAibWlsbGlzZWNvbmRzIjsKCSAgICB9CgoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gTmFOOwoJICAgIHZhciBzdGFydCA9IHRoaXMuc3RhcnQuc3RhcnRPZih1bml0KSwKCSAgICAgICAgZW5kID0gdGhpcy5lbmQuc3RhcnRPZih1bml0KTsKCSAgICByZXR1cm4gTWF0aC5mbG9vcihlbmQuZGlmZihzdGFydCwgdW5pdCkuZ2V0KHVuaXQpKSArIDE7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgd2hldGhlciB0aGlzIEludGVydmFsJ3Mgc3RhcnQgYW5kIGVuZCBhcmUgYm90aCBpbiB0aGUgc2FtZSB1bml0IG9mIHRpbWUKCSAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSB0aGUgdW5pdCBvZiB0aW1lIHRvIGNoZWNrIHNhbWVuZXNzIG9uCgkgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICBfcHJvdG8uaGFzU2FtZSA9IGZ1bmN0aW9uIGhhc1NhbWUodW5pdCkgewoJICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmlzRW1wdHkoKSB8fCB0aGlzLmUubWludXMoMSkuaGFzU2FtZSh0aGlzLnMsIHVuaXQpIDogZmFsc2U7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgaGFzIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgRGF0ZVRpbWVzLgoJICAgKiBAcmV0dXJuIHtib29sZWFufQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLmlzRW1wdHkgPSBmdW5jdGlvbiBpc0VtcHR5KCkgewoJICAgIHJldHVybiB0aGlzLnMudmFsdWVPZigpID09PSB0aGlzLmUudmFsdWVPZigpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsJ3Mgc3RhcnQgaXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBEYXRlVGltZS4KCSAgICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVRpbWUKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5pc0FmdGVyID0gZnVuY3Rpb24gaXNBZnRlcihkYXRlVGltZSkgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7CgkgICAgcmV0dXJuIHRoaXMucyA+IGRhdGVUaW1lOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsJ3MgZW5kIGlzIGJlZm9yZSB0aGUgc3BlY2lmaWVkIERhdGVUaW1lLgoJICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBkYXRlVGltZQoJICAgKiBAcmV0dXJuIHtib29sZWFufQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLmlzQmVmb3JlID0gZnVuY3Rpb24gaXNCZWZvcmUoZGF0ZVRpbWUpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlOwoJICAgIHJldHVybiB0aGlzLmUgPD0gZGF0ZVRpbWU7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgY29udGFpbnMgdGhlIHNwZWNpZmllZCBEYXRlVGltZS4KCSAgICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVRpbWUKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5jb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKGRhdGVUaW1lKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTsKCSAgICByZXR1cm4gdGhpcy5zIDw9IGRhdGVUaW1lICYmIHRoaXMuZSA+IGRhdGVUaW1lOwoJICB9CgkgIC8qKgoJICAgKiAiU2V0cyIgdGhlIHN0YXJ0IGFuZC9vciBlbmQgZGF0ZXMuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBJbnRlcnZhbC4KCSAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlcyAtIHRoZSB2YWx1ZXMgdG8gc2V0CgkgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IHZhbHVlcy5zdGFydCAtIHRoZSBzdGFydGluZyBEYXRlVGltZQoJICAgKiBAcGFyYW0ge0RhdGVUaW1lfSB2YWx1ZXMuZW5kIC0gdGhlIGVuZGluZyBEYXRlVGltZQoJICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KCSAgICovCgkgIDsKCgkgIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQoX3RlbXApIHsKCSAgICB2YXIgX3JlZiA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLAoJICAgICAgICBzdGFydCA9IF9yZWYuc3RhcnQsCgkgICAgICAgIGVuZCA9IF9yZWYuZW5kOwoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CgkgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQgfHwgdGhpcy5zLCBlbmQgfHwgdGhpcy5lKTsKCSAgfQoJICAvKioKCSAgICogU3BsaXQgdGhpcyBJbnRlcnZhbCBhdCBlYWNoIG9mIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWVzCgkgICAqIEBwYXJhbSB7Li4uRGF0ZVRpbWV9IGRhdGVUaW1lcyAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY291bnQuCgkgICAqIEByZXR1cm4ge0FycmF5fQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnNwbGl0QXQgPSBmdW5jdGlvbiBzcGxpdEF0KCkgewoJICAgIHZhciBfdGhpcyA9IHRoaXM7CgoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gW107CgoJICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBkYXRlVGltZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CgkgICAgICBkYXRlVGltZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CgkgICAgfQoKCSAgICB2YXIgc29ydGVkID0gZGF0ZVRpbWVzLm1hcChmcmllbmRseURhdGVUaW1lKS5maWx0ZXIoZnVuY3Rpb24gKGQpIHsKCSAgICAgIHJldHVybiBfdGhpcy5jb250YWlucyhkKTsKCSAgICB9KS5zb3J0KCksCgkgICAgICAgIHJlc3VsdHMgPSBbXTsKCSAgICB2YXIgcyA9IHRoaXMucywKCSAgICAgICAgaSA9IDA7CgoJICAgIHdoaWxlIChzIDwgdGhpcy5lKSB7CgkgICAgICB2YXIgYWRkZWQgPSBzb3J0ZWRbaV0gfHwgdGhpcy5lLAoJICAgICAgICAgIG5leHQgPSArYWRkZWQgPiArdGhpcy5lID8gdGhpcy5lIDogYWRkZWQ7CgkgICAgICByZXN1bHRzLnB1c2goSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBuZXh0KSk7CgkgICAgICBzID0gbmV4dDsKCSAgICAgIGkgKz0gMTsKCSAgICB9CgoJICAgIHJldHVybiByZXN1bHRzOwoJICB9CgkgIC8qKgoJICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGludG8gc21hbGxlciBJbnRlcnZhbHMsIGVhY2ggb2YgdGhlIHNwZWNpZmllZCBsZW5ndGguCgkgICAqIExlZnQgb3ZlciB0aW1lIGlzIGdyb3VwZWQgaW50byBhIHNtYWxsZXIgaW50ZXJ2YWwKCSAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBsZW5ndGggb2YgZWFjaCByZXN1bHRpbmcgaW50ZXJ2YWwuCgkgICAqIEByZXR1cm4ge0FycmF5fQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnNwbGl0QnkgPSBmdW5jdGlvbiBzcGxpdEJ5KGR1cmF0aW9uKSB7CgkgICAgdmFyIGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pOwoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhZHVyLmlzVmFsaWQgfHwgZHVyLmFzKCJtaWxsaXNlY29uZHMiKSA9PT0gMCkgewoJICAgICAgcmV0dXJuIFtdOwoJICAgIH0KCgkgICAgdmFyIHMgPSB0aGlzLnMsCgkgICAgICAgIGlkeCA9IDEsCgkgICAgICAgIG5leHQ7CgkgICAgdmFyIHJlc3VsdHMgPSBbXTsKCgkgICAgd2hpbGUgKHMgPCB0aGlzLmUpIHsKCSAgICAgIHZhciBhZGRlZCA9IHRoaXMuc3RhcnQucGx1cyhkdXIubWFwVW5pdHMoZnVuY3Rpb24gKHgpIHsKCSAgICAgICAgcmV0dXJuIHggKiBpZHg7CgkgICAgICB9KSk7CgkgICAgICBuZXh0ID0gK2FkZGVkID4gK3RoaXMuZSA/IHRoaXMuZSA6IGFkZGVkOwoJICAgICAgcmVzdWx0cy5wdXNoKEludGVydmFsLmZyb21EYXRlVGltZXMocywgbmV4dCkpOwoJICAgICAgcyA9IG5leHQ7CgkgICAgICBpZHggKz0gMTsKCSAgICB9CgoJICAgIHJldHVybiByZXN1bHRzOwoJICB9CgkgIC8qKgoJICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGludG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygc21hbGxlciBpbnRlcnZhbHMuCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXJPZlBhcnRzIC0gVGhlIG51bWJlciBvZiBJbnRlcnZhbHMgdG8gZGl2aWRlIHRoZSBJbnRlcnZhbCBpbnRvLgoJICAgKiBAcmV0dXJuIHtBcnJheX0KCSAgICovCgkgIDsKCgkgIF9wcm90by5kaXZpZGVFcXVhbGx5ID0gZnVuY3Rpb24gZGl2aWRlRXF1YWxseShudW1iZXJPZlBhcnRzKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBbXTsKCSAgICByZXR1cm4gdGhpcy5zcGxpdEJ5KHRoaXMubGVuZ3RoKCkgLyBudW1iZXJPZlBhcnRzKS5zbGljZSgwLCBudW1iZXJPZlBhcnRzKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBvdmVybGFwcyB3aXRoIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwKCSAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXIKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5vdmVybGFwcyA9IGZ1bmN0aW9uIG92ZXJsYXBzKG90aGVyKSB7CgkgICAgcmV0dXJuIHRoaXMuZSA+IG90aGVyLnMgJiYgdGhpcy5zIDwgb3RoZXIuZTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBhZGphY2VudCB0byB0aGUgc3BlY2lmaWVkIEludGVydmFsJ3Mgc3RhcnQuCgkgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCgkgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICBfcHJvdG8uYWJ1dHNTdGFydCA9IGZ1bmN0aW9uIGFidXRzU3RhcnQob3RoZXIpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlOwoJICAgIHJldHVybiArdGhpcy5lID09PSArb3RoZXIuczsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIHN0YXJ0IGlzIGFkamFjZW50IHRvIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwncyBlbmQuCgkgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCgkgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICBfcHJvdG8uYWJ1dHNFbmQgPSBmdW5jdGlvbiBhYnV0c0VuZChvdGhlcikgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7CgkgICAgcmV0dXJuICtvdGhlci5lID09PSArdGhpcy5zOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGVuZ3VsZnMgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC4KCSAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXIKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5lbmd1bGZzID0gZnVuY3Rpb24gZW5ndWxmcyhvdGhlcikgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7CgkgICAgcmV0dXJuIHRoaXMucyA8PSBvdGhlci5zICYmIHRoaXMuZSA+PSBvdGhlci5lOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGhhcyB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIGFzIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuCgkgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCgkgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICBfcHJvdG8uZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyLmlzVmFsaWQpIHsKCSAgICAgIHJldHVybiBmYWxzZTsKCSAgICB9CgoJICAgIHJldHVybiB0aGlzLnMuZXF1YWxzKG90aGVyLnMpICYmIHRoaXMuZS5lcXVhbHMob3RoZXIuZSk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIEludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIEludGVydmFsLgoJICAgKiBTcGVjaWZpY2FsbHksIHRoZSByZXN1bHRpbmcgSW50ZXJ2YWwgaGFzIHRoZSBtYXhpbXVtIHN0YXJ0IHRpbWUgYW5kIHRoZSBtaW5pbXVtIGVuZCB0aW1lIG9mIHRoZSB0d28gSW50ZXJ2YWxzLgoJICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIGludGVyc2VjdGlvbiBpcyBlbXB0eSwgbWVhbmluZywgdGhlIGludGVydmFscyBkb24ndCBpbnRlcnNlY3QuCgkgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCgkgICAqIEByZXR1cm4ge0ludGVydmFsfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIGludGVyc2VjdGlvbihvdGhlcikgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCSAgICB2YXIgcyA9IHRoaXMucyA+IG90aGVyLnMgPyB0aGlzLnMgOiBvdGhlci5zLAoJICAgICAgICBlID0gdGhpcy5lIDwgb3RoZXIuZSA/IHRoaXMuZSA6IG90aGVyLmU7CgoJICAgIGlmIChzID49IGUpIHsKCSAgICAgIHJldHVybiBudWxsOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBlKTsKCSAgICB9CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIHVuaW9uIG9mIHRoaXMgSW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuCgkgICAqIFNwZWNpZmljYWxseSwgdGhlIHJlc3VsdGluZyBJbnRlcnZhbCBoYXMgdGhlIG1pbmltdW0gc3RhcnQgdGltZSBhbmQgdGhlIG1heGltdW0gZW5kIHRpbWUgb2YgdGhlIHR3byBJbnRlcnZhbHMuCgkgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCgkgICAqIEByZXR1cm4ge0ludGVydmFsfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnVuaW9uID0gZnVuY3Rpb24gdW5pb24ob3RoZXIpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CgkgICAgdmFyIHMgPSB0aGlzLnMgPCBvdGhlci5zID8gdGhpcy5zIDogb3RoZXIucywKCSAgICAgICAgZSA9IHRoaXMuZSA+IG90aGVyLmUgPyB0aGlzLmUgOiBvdGhlci5lOwoJICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIGUpOwoJICB9CgkgIC8qKgoJICAgKiBNZXJnZSBhbiBhcnJheSBvZiBJbnRlcnZhbHMgaW50byBhIGVxdWl2YWxlbnQgbWluaW1hbCBzZXQgb2YgSW50ZXJ2YWxzLgoJICAgKiBDb21iaW5lcyBvdmVybGFwcGluZyBhbmQgYWRqYWNlbnQgSW50ZXJ2YWxzLgoJICAgKiBAcGFyYW0ge0FycmF5fSBpbnRlcnZhbHMKCSAgICogQHJldHVybiB7QXJyYXl9CgkgICAqLwoJICA7CgoJICBJbnRlcnZhbC5tZXJnZSA9IGZ1bmN0aW9uIG1lcmdlKGludGVydmFscykgewoJICAgIHZhciBfaW50ZXJ2YWxzJHNvcnQkcmVkdWMgPSBpbnRlcnZhbHMuc29ydChmdW5jdGlvbiAoYSwgYikgewoJICAgICAgcmV0dXJuIGEucyAtIGIuczsKCSAgICB9KS5yZWR1Y2UoZnVuY3Rpb24gKF9yZWYyLCBpdGVtKSB7CgkgICAgICB2YXIgc29mYXIgPSBfcmVmMlswXSwKCSAgICAgICAgICBjdXJyZW50ID0gX3JlZjJbMV07CgoJICAgICAgaWYgKCFjdXJyZW50KSB7CgkgICAgICAgIHJldHVybiBbc29mYXIsIGl0ZW1dOwoJICAgICAgfSBlbHNlIGlmIChjdXJyZW50Lm92ZXJsYXBzKGl0ZW0pIHx8IGN1cnJlbnQuYWJ1dHNTdGFydChpdGVtKSkgewoJICAgICAgICByZXR1cm4gW3NvZmFyLCBjdXJyZW50LnVuaW9uKGl0ZW0pXTsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHJldHVybiBbc29mYXIuY29uY2F0KFtjdXJyZW50XSksIGl0ZW1dOwoJICAgICAgfQoJICAgIH0sIFtbXSwgbnVsbF0pLAoJICAgICAgICBmb3VuZCA9IF9pbnRlcnZhbHMkc29ydCRyZWR1Y1swXSwKCSAgICAgICAgZmluYWwgPSBfaW50ZXJ2YWxzJHNvcnQkcmVkdWNbMV07CgoJICAgIGlmIChmaW5hbCkgewoJICAgICAgZm91bmQucHVzaChmaW5hbCk7CgkgICAgfQoKCSAgICByZXR1cm4gZm91bmQ7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiBhbiBhcnJheSBvZiBJbnRlcnZhbHMgcmVwcmVzZW50aW5nIHRoZSBzcGFucyBvZiB0aW1lIHRoYXQgb25seSBhcHBlYXIgaW4gb25lIG9mIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWxzLgoJICAgKiBAcGFyYW0ge0FycmF5fSBpbnRlcnZhbHMKCSAgICogQHJldHVybiB7QXJyYXl9CgkgICAqLwoJICA7CgoJICBJbnRlcnZhbC54b3IgPSBmdW5jdGlvbiB4b3IoaW50ZXJ2YWxzKSB7CgkgICAgdmFyIF9BcnJheSRwcm90b3R5cGU7CgoJICAgIHZhciBzdGFydCA9IG51bGwsCgkgICAgICAgIGN1cnJlbnRDb3VudCA9IDA7CgoJICAgIHZhciByZXN1bHRzID0gW10sCgkgICAgICAgIGVuZHMgPSBpbnRlcnZhbHMubWFwKGZ1bmN0aW9uIChpKSB7CgkgICAgICByZXR1cm4gW3sKCSAgICAgICAgdGltZTogaS5zLAoJICAgICAgICB0eXBlOiAicyIKCSAgICAgIH0sIHsKCSAgICAgICAgdGltZTogaS5lLAoJICAgICAgICB0eXBlOiAiZSIKCSAgICAgIH1dOwoJICAgIH0pLAoJICAgICAgICBmbGF0dGVuZWQgPSAoX0FycmF5JHByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZSkuY29uY2F0LmFwcGx5KF9BcnJheSRwcm90b3R5cGUsIGVuZHMpLAoJICAgICAgICBhcnIgPSBmbGF0dGVuZWQuc29ydChmdW5jdGlvbiAoYSwgYikgewoJICAgICAgcmV0dXJuIGEudGltZSAtIGIudGltZTsKCSAgICB9KTsKCgkgICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShhcnIpLCBfc3RlcDsgIShfc3RlcCA9IF9pdGVyYXRvcigpKS5kb25lOykgewoJICAgICAgdmFyIGkgPSBfc3RlcC52YWx1ZTsKCSAgICAgIGN1cnJlbnRDb3VudCArPSBpLnR5cGUgPT09ICJzIiA/IDEgOiAtMTsKCgkgICAgICBpZiAoY3VycmVudENvdW50ID09PSAxKSB7CgkgICAgICAgIHN0YXJ0ID0gaS50aW1lOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgaWYgKHN0YXJ0ICYmICtzdGFydCAhPT0gK2kudGltZSkgewoJICAgICAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHN0YXJ0LCBpLnRpbWUpKTsKCSAgICAgICAgfQoKCSAgICAgICAgc3RhcnQgPSBudWxsOwoJICAgICAgfQoJICAgIH0KCgkgICAgcmV0dXJuIEludGVydmFsLm1lcmdlKHJlc3VsdHMpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgcmVwcmVzZW50aW5nIHRoZSBzcGFuIG9mIHRpbWUgaW4gdGhpcyBJbnRlcnZhbCB0aGF0IGRvZXNuJ3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFscy4KCSAgICogQHBhcmFtIHsuLi5JbnRlcnZhbH0gaW50ZXJ2YWxzCgkgICAqIEByZXR1cm4ge0FycmF5fQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLmRpZmZlcmVuY2UgPSBmdW5jdGlvbiBkaWZmZXJlbmNlKCkgewoJICAgIHZhciBfdGhpczIgPSB0aGlzOwoKCSAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGludGVydmFscyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewoJICAgICAgaW50ZXJ2YWxzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07CgkgICAgfQoKCSAgICByZXR1cm4gSW50ZXJ2YWwueG9yKFt0aGlzXS5jb25jYXQoaW50ZXJ2YWxzKSkubWFwKGZ1bmN0aW9uIChpKSB7CgkgICAgICByZXR1cm4gX3RoaXMyLmludGVyc2VjdGlvbihpKTsKCSAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGkpIHsKCSAgICAgIHJldHVybiBpICYmICFpLmlzRW1wdHkoKTsKCSAgICB9KTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsIGFwcHJvcHJpYXRlIGZvciBkZWJ1Z2dpbmcuCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxOwoJICAgIHJldHVybiAiWyIgKyB0aGlzLnMudG9JU08oKSArICIgXHUyMDEzICIgKyB0aGlzLmUudG9JU08oKSArICIpIjsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwuCgkgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHMKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBUaGUgc2FtZSBvcHRpb25zIGFzIHtAbGluayBEYXRlVGltZSN0b0lTT30KCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvSVNPID0gZnVuY3Rpb24gdG9JU08ob3B0cykgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxOwoJICAgIHJldHVybiB0aGlzLnMudG9JU08ob3B0cykgKyAiLyIgKyB0aGlzLmUudG9JU08ob3B0cyk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBkYXRlIG9mIHRoaXMgSW50ZXJ2YWwuCgkgICAqIFRoZSB0aW1lIGNvbXBvbmVudHMgYXJlIGlnbm9yZWQuCgkgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHMKCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvSVNPRGF0ZSA9IGZ1bmN0aW9uIHRvSVNPRGF0ZSgpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQkMTsKCSAgICByZXR1cm4gdGhpcy5zLnRvSVNPRGF0ZSgpICsgIi8iICsgdGhpcy5lLnRvSVNPRGF0ZSgpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGltZSBvZiB0aGlzIEludGVydmFsLgoJICAgKiBUaGUgZGF0ZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLgoJICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099CgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0lTT1RpbWUgPSBmdW5jdGlvbiB0b0lTT1RpbWUob3B0cykgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxOwoJICAgIHJldHVybiB0aGlzLnMudG9JU09UaW1lKG9wdHMpICsgIi8iICsgdGhpcy5lLnRvSVNPVGltZShvcHRzKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0ZUZvcm1hdCAtIHRoZSBmb3JtYXQgc3RyaW5nLiBUaGlzIHN0cmluZyBmb3JtYXRzIHRoZSBzdGFydCBhbmQgZW5kIHRpbWUuIFNlZSB7QGxpbmsgRGF0ZVRpbWUjdG9Gb3JtYXR9IGZvciBkZXRhaWxzLgoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLnNlcGFyYXRvciA9ICAnIOKAkyAnXSAtIGEgc2VwYXJhdG9yIHRvIHBsYWNlIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgcmVwcmVzZW50YXRpb25zCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0Zvcm1hdCA9IGZ1bmN0aW9uIHRvRm9ybWF0KGRhdGVGb3JtYXQsIF90ZW1wMikgewoJICAgIHZhciBfcmVmMyA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDIsCgkgICAgICAgIF9yZWYzJHNlcGFyYXRvciA9IF9yZWYzLnNlcGFyYXRvciwKCSAgICAgICAgc2VwYXJhdG9yID0gX3JlZjMkc2VwYXJhdG9yID09PSB2b2lkIDAgPyAiIOKAkyAiIDogX3JlZjMkc2VwYXJhdG9yOwoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQkMTsKCSAgICByZXR1cm4gIiIgKyB0aGlzLnMudG9Gb3JtYXQoZGF0ZUZvcm1hdCkgKyBzZXBhcmF0b3IgKyB0aGlzLmUudG9Gb3JtYXQoZGF0ZUZvcm1hdCk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiBhIER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgdGltZSBzcGFubmVkIGJ5IHRoaXMgaW50ZXJ2YWwuCgkgICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbdW5pdD1bJ21pbGxpc2Vjb25kcyddXSAtIHRoZSB1bml0IG9yIHVuaXRzIChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byBpbmNsdWRlIGluIHRoZSBkdXJhdGlvbi4KCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiB0aGUgRHVyYXRpb24KCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlCgkgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oKS50b09iamVjdCgpIC8vPT4geyBtaWxsaXNlY29uZHM6IDg4NDg5MjU3IH0KCSAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbignZGF5cycpLnRvT2JqZWN0KCkgLy89PiB7IGRheXM6IDEuMDI0MTgxMjE1Mjc3Nzc3OCB9CgkgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oWydob3VycycsICdtaW51dGVzJ10pLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAyNCwgbWludXRlczogMzQuODIwOTUgfQoJICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKFsnaG91cnMnLCAnbWludXRlcycsICdzZWNvbmRzJ10pLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAyNCwgbWludXRlczogMzQsIHNlY29uZHM6IDQ5LjI1NyB9CgkgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oJ3NlY29uZHMnKS50b09iamVjdCgpIC8vPT4geyBzZWNvbmRzOiA4ODQ4OS4yNTcgfQoJICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0R1cmF0aW9uID0gZnVuY3Rpb24gdG9EdXJhdGlvbih1bml0LCBvcHRzKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHsKCSAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKHRoaXMuaW52YWxpZFJlYXNvbik7CgkgICAgfQoKCSAgICByZXR1cm4gdGhpcy5lLmRpZmYodGhpcy5zLCB1bml0LCBvcHRzKTsKCSAgfQoJICAvKioKCSAgICogUnVuIG1hcEZuIG9uIHRoZSBpbnRlcnZhbCBzdGFydCBhbmQgZW5kLCByZXR1cm5pbmcgYSBuZXcgSW50ZXJ2YWwgZnJvbSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lcwoJICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBGbgoJICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KCSAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikubWFwRW5kcG9pbnRzKGVuZHBvaW50ID0+IGVuZHBvaW50LnRvVVRDKCkpCgkgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLm1hcEVuZHBvaW50cyhlbmRwb2ludCA9PiBlbmRwb2ludC5wbHVzKHsgaG91cnM6IDIgfSkpCgkgICAqLwoJICA7CgoJICBfcHJvdG8ubWFwRW5kcG9pbnRzID0gZnVuY3Rpb24gbWFwRW5kcG9pbnRzKG1hcEZuKSB7CgkgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMobWFwRm4odGhpcy5zKSwgbWFwRm4odGhpcy5lKSk7CgkgIH07CgoJICBfY3JlYXRlQ2xhc3MoSW50ZXJ2YWwsIFt7CgkgICAga2V5OiAic3RhcnQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMucyA6IG51bGw7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFJldHVybnMgdGhlIGVuZCBvZiB0aGUgSW50ZXJ2YWwKCSAgICAgKiBAdHlwZSB7RGF0ZVRpbWV9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiZW5kIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmUgOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBhdCBsZWFzdCBpdHMgc3RhcnQsIG1lYW5pbmcgdGhhdCB0aGUgSW50ZXJ2YWwgaXNuJ3QgJ2JhY2t3YXJkcycuCgkgICAgICogQHR5cGUge2Jvb2xlYW59CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaXNWYWxpZCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkUmVhc29uID09PSBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBJbnRlcnZhbCBpcyBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBJbnRlcnZhbCBpcyB2YWxpZAoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaW52YWxpZFJlYXNvbiIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgSW50ZXJ2YWwgYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIEludGVydmFsIGlzIHZhbGlkCgkgICAgICogQHR5cGUge3N0cmluZ30KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJpbnZhbGlkRXhwbGFuYXRpb24iLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7CgkgICAgfQoJICB9XSk7CgoJICByZXR1cm4gSW50ZXJ2YWw7Cgl9KCk7CgoJLyoqCgkgKiBUaGUgSW5mbyBjbGFzcyBjb250YWlucyBzdGF0aWMgbWV0aG9kcyBmb3IgcmV0cmlldmluZyBnZW5lcmFsIHRpbWUgYW5kIGRhdGUgcmVsYXRlZCBkYXRhLiBGb3IgZXhhbXBsZSwgaXQgaGFzIG1ldGhvZHMgZm9yIGZpbmRpbmcgb3V0IGlmIGEgdGltZSB6b25lIGhhcyBhIERTVCwgZm9yIGxpc3RpbmcgdGhlIG1vbnRocyBpbiBhbnkgc3VwcG9ydGVkIGxvY2FsZSwgYW5kIGZvciBkaXNjb3ZlcmluZyB3aGljaCBvZiBMdXhvbiBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgoJICovCgoJdmFyIEluZm8gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewoJICBmdW5jdGlvbiBJbmZvKCkge30KCgkgIC8qKgoJICAgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIHpvbmUgY29udGFpbnMgYSBEU1QuCgkgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFt6b25lPSdsb2NhbCddIC0gWm9uZSB0byBjaGVjay4gRGVmYXVsdHMgdG8gdGhlIGVudmlyb25tZW50J3MgbG9jYWwgem9uZS4KCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIEluZm8uaGFzRFNUID0gZnVuY3Rpb24gaGFzRFNUKHpvbmUpIHsKCSAgICBpZiAoem9uZSA9PT0gdm9pZCAwKSB7CgkgICAgICB6b25lID0gU2V0dGluZ3MuZGVmYXVsdFpvbmU7CgkgICAgfQoKCSAgICB2YXIgcHJvdG8gPSBEYXRlVGltZS5ub3coKS5zZXRab25lKHpvbmUpLnNldCh7CgkgICAgICBtb250aDogMTIKCSAgICB9KTsKCSAgICByZXR1cm4gIXpvbmUuaXNVbml2ZXJzYWwgJiYgcHJvdG8ub2Zmc2V0ICE9PSBwcm90by5zZXQoewoJICAgICAgbW9udGg6IDYKCSAgICB9KS5vZmZzZXQ7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgem9uZSBpcyBhIHZhbGlkIElBTkEgc3BlY2lmaWVyLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gem9uZSAtIFpvbmUgdG8gY2hlY2sKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIEluZm8uaXNWYWxpZElBTkFab25lID0gZnVuY3Rpb24gaXNWYWxpZElBTkFab25lKHpvbmUpIHsKCSAgICByZXR1cm4gSUFOQVpvbmUuaXNWYWxpZFpvbmUoem9uZSk7CgkgIH0KCSAgLyoqCgkgICAqIENvbnZlcnRzIHRoZSBpbnB1dCBpbnRvIGEge0BsaW5rIFpvbmV9IGluc3RhbmNlLgoJICAgKgoJICAgKiAqIElmIGBpbnB1dGAgaXMgYWxyZWFkeSBhIFpvbmUgaW5zdGFuY2UsIGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZC4KCSAgICogKiBJZiBgaW5wdXRgIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSB2YWxpZCB0aW1lIHpvbmUgbmFtZSwgYSBab25lIGluc3RhbmNlCgkgICAqICAgd2l0aCB0aGF0IG5hbWUgaXMgcmV0dXJuZWQuCgkgICAqICogSWYgYGlucHV0YCBpcyBhIHN0cmluZyB0aGF0IGRvZXNuJ3QgcmVmZXIgdG8gYSBrbm93biB0aW1lIHpvbmUsIGEgWm9uZQoJICAgKiAgIGluc3RhbmNlIHdpdGgge0BsaW5rIFpvbmUjaXNWYWxpZH0gPT0gZmFsc2UgaXMgcmV0dXJuZWQuCgkgICAqICogSWYgYGlucHV0IGlzIGEgbnVtYmVyLCBhIFpvbmUgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGZpeGVkIG9mZnNldAoJICAgKiAgIGluIG1pbnV0ZXMgaXMgcmV0dXJuZWQuCgkgICAqICogSWYgYGlucHV0YCBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAsIHRoZSBkZWZhdWx0IHpvbmUgaXMgcmV0dXJuZWQuCgkgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV8bnVtYmVyfSBbaW5wdXRdIC0gdGhlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZAoJICAgKiBAcmV0dXJuIHtab25lfQoJICAgKi8KCSAgOwoKCSAgSW5mby5ub3JtYWxpemVab25lID0gZnVuY3Rpb24gbm9ybWFsaXplWm9uZSQxKGlucHV0KSB7CgkgICAgcmV0dXJuIG5vcm1hbGl6ZVpvbmUoaW5wdXQsIFNldHRpbmdzLmRlZmF1bHRab25lKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIGFuIGFycmF5IG9mIHN0YW5kYWxvbmUgbW9udGggbmFtZXMuCgkgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXQKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzICJudW1lcmljIiwgIjItZGlnaXQiLCAibmFycm93IiwgInNob3J0IiwgImxvbmciCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtPW51bGxdIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0KCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY09iaj1udWxsXSAtIGFuIGV4aXN0aW5nIGxvY2FsZSBvYmplY3QgdG8gdXNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcj0nZ3JlZ29yeSddIC0gdGhlIGNhbGVuZGFyCgkgICAqIEBleGFtcGxlIEluZm8ubW9udGhzKClbMF0gLy89PiAnSmFudWFyeScKCSAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ3Nob3J0JylbMF0gLy89PiAnSmFuJwoJICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbnVtZXJpYycpWzBdIC8vPT4gJzEnCgkgICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdzaG9ydCcsIHsgbG9jYWxlOiAnZnItQ0EnIH0gKVswXSAvLz0+ICdqYW52LicKCSAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ251bWVyaWMnLCB7IGxvY2FsZTogJ2FyJyB9KVswXSAvLz0+ICfZoScKCSAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ2xvbmcnLCB7IG91dHB1dENhbGVuZGFyOiAnaXNsYW1pYycgfSlbMF0gLy89PiAnUmFiacq7IEknCgkgICAqIEByZXR1cm4ge0FycmF5fQoJICAgKi8KCSAgOwoKCSAgSW5mby5tb250aHMgPSBmdW5jdGlvbiBtb250aHMobGVuZ3RoLCBfdGVtcCkgewoJICAgIGlmIChsZW5ndGggPT09IHZvaWQgMCkgewoJICAgICAgbGVuZ3RoID0gImxvbmciOwoJICAgIH0KCgkgICAgdmFyIF9yZWYgPSBfdGVtcCA9PT0gdm9pZCAwID8ge30gOiBfdGVtcCwKCSAgICAgICAgX3JlZiRsb2NhbGUgPSBfcmVmLmxvY2FsZSwKCSAgICAgICAgbG9jYWxlID0gX3JlZiRsb2NhbGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJGxvY2FsZSwKCSAgICAgICAgX3JlZiRudW1iZXJpbmdTeXN0ZW0gPSBfcmVmLm51bWJlcmluZ1N5c3RlbSwKCSAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX3JlZiRudW1iZXJpbmdTeXN0ZW0gPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJG51bWJlcmluZ1N5c3RlbSwKCSAgICAgICAgX3JlZiRsb2NPYmogPSBfcmVmLmxvY09iaiwKCSAgICAgICAgbG9jT2JqID0gX3JlZiRsb2NPYmogPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJGxvY09iaiwKCSAgICAgICAgX3JlZiRvdXRwdXRDYWxlbmRhciA9IF9yZWYub3V0cHV0Q2FsZW5kYXIsCgkgICAgICAgIG91dHB1dENhbGVuZGFyID0gX3JlZiRvdXRwdXRDYWxlbmRhciA9PT0gdm9pZCAwID8gImdyZWdvcnkiIDogX3JlZiRvdXRwdXRDYWxlbmRhcjsKCgkgICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIpKS5tb250aHMobGVuZ3RoKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIGFuIGFycmF5IG9mIGZvcm1hdCBtb250aCBuYW1lcy4KCSAgICogRm9ybWF0IG1vbnRocyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIG1vbnRocyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gdGhlIGRheSBvZiB0aGUgbW9udGguIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0CgkgICAqIGNoYW5nZXMgdGhlIHN0cmluZy4KCSAgICogU2VlIHtAbGluayBJbmZvI21vbnRoc30KCSAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzICJudW1lcmljIiwgIjItZGlnaXQiLCAibmFycm93IiwgInNob3J0IiwgImxvbmciCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtPW51bGxdIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0KCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY09iaj1udWxsXSAtIGFuIGV4aXN0aW5nIGxvY2FsZSBvYmplY3QgdG8gdXNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcj0nZ3JlZ29yeSddIC0gdGhlIGNhbGVuZGFyCgkgICAqIEByZXR1cm4ge0FycmF5fQoJICAgKi8KCSAgOwoKCSAgSW5mby5tb250aHNGb3JtYXQgPSBmdW5jdGlvbiBtb250aHNGb3JtYXQobGVuZ3RoLCBfdGVtcDIpIHsKCSAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsKCSAgICAgIGxlbmd0aCA9ICJsb25nIjsKCSAgICB9CgoJICAgIHZhciBfcmVmMiA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDIsCgkgICAgICAgIF9yZWYyJGxvY2FsZSA9IF9yZWYyLmxvY2FsZSwKCSAgICAgICAgbG9jYWxlID0gX3JlZjIkbG9jYWxlID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjIkbG9jYWxlLAoJICAgICAgICBfcmVmMiRudW1iZXJpbmdTeXN0ZW0gPSBfcmVmMi5udW1iZXJpbmdTeXN0ZW0sCgkgICAgICAgIG51bWJlcmluZ1N5c3RlbSA9IF9yZWYyJG51bWJlcmluZ1N5c3RlbSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYyJG51bWJlcmluZ1N5c3RlbSwKCSAgICAgICAgX3JlZjIkbG9jT2JqID0gX3JlZjIubG9jT2JqLAoJICAgICAgICBsb2NPYmogPSBfcmVmMiRsb2NPYmogPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMiRsb2NPYmosCgkgICAgICAgIF9yZWYyJG91dHB1dENhbGVuZGFyID0gX3JlZjIub3V0cHV0Q2FsZW5kYXIsCgkgICAgICAgIG91dHB1dENhbGVuZGFyID0gX3JlZjIkb3V0cHV0Q2FsZW5kYXIgPT09IHZvaWQgMCA/ICJncmVnb3J5IiA6IF9yZWYyJG91dHB1dENhbGVuZGFyOwoKCSAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcikpLm1vbnRocyhsZW5ndGgsIHRydWUpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gYW4gYXJyYXkgb2Ygc3RhbmRhbG9uZSB3ZWVrIG5hbWVzLgoJICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0CgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPSdsb25nJ10gLSB0aGUgbGVuZ3RoIG9mIHRoZSB3ZWVrZGF5IHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzICJuYXJyb3ciLCAic2hvcnQiLCAibG9uZyIuCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtPW51bGxdIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0KCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY09iaj1udWxsXSAtIGFuIGV4aXN0aW5nIGxvY2FsZSBvYmplY3QgdG8gdXNlCgkgICAqIEBleGFtcGxlIEluZm8ud2Vla2RheXMoKVswXSAvLz0+ICdNb25kYXknCgkgICAqIEBleGFtcGxlIEluZm8ud2Vla2RheXMoJ3Nob3J0JylbMF0gLy89PiAnTW9uJwoJICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKCdzaG9ydCcsIHsgbG9jYWxlOiAnZnItQ0EnIH0pWzBdIC8vPT4gJ2x1bi4nCgkgICAqIEBleGFtcGxlIEluZm8ud2Vla2RheXMoJ3Nob3J0JywgeyBsb2NhbGU6ICdhcicgfSlbMF0gLy89PiAn2KfZhNin2KvZhtmK2YYnCgkgICAqIEByZXR1cm4ge0FycmF5fQoJICAgKi8KCSAgOwoKCSAgSW5mby53ZWVrZGF5cyA9IGZ1bmN0aW9uIHdlZWtkYXlzKGxlbmd0aCwgX3RlbXAzKSB7CgkgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7CgkgICAgICBsZW5ndGggPSAibG9uZyI7CgkgICAgfQoKCSAgICB2YXIgX3JlZjMgPSBfdGVtcDMgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAzLAoJICAgICAgICBfcmVmMyRsb2NhbGUgPSBfcmVmMy5sb2NhbGUsCgkgICAgICAgIGxvY2FsZSA9IF9yZWYzJGxvY2FsZSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYzJGxvY2FsZSwKCSAgICAgICAgX3JlZjMkbnVtYmVyaW5nU3lzdGVtID0gX3JlZjMubnVtYmVyaW5nU3lzdGVtLAoJICAgICAgICBudW1iZXJpbmdTeXN0ZW0gPSBfcmVmMyRudW1iZXJpbmdTeXN0ZW0gPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMyRudW1iZXJpbmdTeXN0ZW0sCgkgICAgICAgIF9yZWYzJGxvY09iaiA9IF9yZWYzLmxvY09iaiwKCSAgICAgICAgbG9jT2JqID0gX3JlZjMkbG9jT2JqID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjMkbG9jT2JqOwoKCSAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBudWxsKSkud2Vla2RheXMobGVuZ3RoKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIGFuIGFycmF5IG9mIGZvcm1hdCB3ZWVrIG5hbWVzLgoJICAgKiBGb3JtYXQgd2Vla2RheXMgZGlmZmVyIGZyb20gc3RhbmRhbG9uZSB3ZWVrZGF5cyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gbW9yZSBkYXRlIGluZm9ybWF0aW9uLiBJbiBzb21lIGxhbmd1YWdlcywgdGhhdAoJICAgKiBjaGFuZ2VzIHRoZSBzdHJpbmcuCgkgICAqIFNlZSB7QGxpbmsgSW5mbyN3ZWVrZGF5c30KCSAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzICJuYXJyb3ciLCAic2hvcnQiLCAibG9uZyIuCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPW51bGxdIC0gdGhlIGxvY2FsZSBjb2RlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2UKCSAgICogQHJldHVybiB7QXJyYXl9CgkgICAqLwoJICA7CgoJICBJbmZvLndlZWtkYXlzRm9ybWF0ID0gZnVuY3Rpb24gd2Vla2RheXNGb3JtYXQobGVuZ3RoLCBfdGVtcDQpIHsKCSAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsKCSAgICAgIGxlbmd0aCA9ICJsb25nIjsKCSAgICB9CgoJICAgIHZhciBfcmVmNCA9IF90ZW1wNCA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDQsCgkgICAgICAgIF9yZWY0JGxvY2FsZSA9IF9yZWY0LmxvY2FsZSwKCSAgICAgICAgbG9jYWxlID0gX3JlZjQkbG9jYWxlID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjQkbG9jYWxlLAoJICAgICAgICBfcmVmNCRudW1iZXJpbmdTeXN0ZW0gPSBfcmVmNC5udW1iZXJpbmdTeXN0ZW0sCgkgICAgICAgIG51bWJlcmluZ1N5c3RlbSA9IF9yZWY0JG51bWJlcmluZ1N5c3RlbSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWY0JG51bWJlcmluZ1N5c3RlbSwKCSAgICAgICAgX3JlZjQkbG9jT2JqID0gX3JlZjQubG9jT2JqLAoJICAgICAgICBsb2NPYmogPSBfcmVmNCRsb2NPYmogPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmNCRsb2NPYmo7CgoJICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG51bGwpKS53ZWVrZGF5cyhsZW5ndGgsIHRydWUpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgbWVyaWRpZW1zLgoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGUKCSAgICogQGV4YW1wbGUgSW5mby5tZXJpZGllbXMoKSAvLz0+IFsgJ0FNJywgJ1BNJyBdCgkgICAqIEBleGFtcGxlIEluZm8ubWVyaWRpZW1zKHsgbG9jYWxlOiAnbXknIH0pIC8vPT4gWyAn4YCU4YC24YCU4YCA4YC6JywgJ+GAiuGAlOGAsScgXQoJICAgKiBAcmV0dXJuIHtBcnJheX0KCSAgICovCgkgIDsKCgkgIEluZm8ubWVyaWRpZW1zID0gZnVuY3Rpb24gbWVyaWRpZW1zKF90ZW1wNSkgewoJICAgIHZhciBfcmVmNSA9IF90ZW1wNSA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDUsCgkgICAgICAgIF9yZWY1JGxvY2FsZSA9IF9yZWY1LmxvY2FsZSwKCSAgICAgICAgbG9jYWxlID0gX3JlZjUkbG9jYWxlID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjUkbG9jYWxlOwoKCSAgICByZXR1cm4gTG9jYWxlLmNyZWF0ZShsb2NhbGUpLm1lcmlkaWVtcygpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZXJhcywgc3VjaCBhcyBbJ0JDJywgJ0FEJ10uIFRoZSBsb2NhbGUgY2FuIGJlIHNwZWNpZmllZCwgYnV0IHRoZSBjYWxlbmRhciBzeXN0ZW0gaXMgYWx3YXlzIEdyZWdvcmlhbi4KCSAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J3Nob3J0J10gLSB0aGUgbGVuZ3RoIG9mIHRoZSBlcmEgcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgInNob3J0IiBvciAibG9uZyIuCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZQoJICAgKiBAZXhhbXBsZSBJbmZvLmVyYXMoKSAvLz0+IFsgJ0JDJywgJ0FEJyBdCgkgICAqIEBleGFtcGxlIEluZm8uZXJhcygnbG9uZycpIC8vPT4gWyAnQmVmb3JlIENocmlzdCcsICdBbm5vIERvbWluaScgXQoJICAgKiBAZXhhbXBsZSBJbmZvLmVyYXMoJ2xvbmcnLCB7IGxvY2FsZTogJ2ZyJyB9KSAvLz0+IFsgJ2F2YW50IErDqXN1cy1DaHJpc3QnLCAnYXByw6hzIErDqXN1cy1DaHJpc3QnIF0KCSAgICogQHJldHVybiB7QXJyYXl9CgkgICAqLwoJICA7CgoJICBJbmZvLmVyYXMgPSBmdW5jdGlvbiBlcmFzKGxlbmd0aCwgX3RlbXA2KSB7CgkgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7CgkgICAgICBsZW5ndGggPSAic2hvcnQiOwoJICAgIH0KCgkgICAgdmFyIF9yZWY2ID0gX3RlbXA2ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNiwKCSAgICAgICAgX3JlZjYkbG9jYWxlID0gX3JlZjYubG9jYWxlLAoJICAgICAgICBsb2NhbGUgPSBfcmVmNiRsb2NhbGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmNiRsb2NhbGU7CgoJICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVsbCwgImdyZWdvcnkiKS5lcmFzKGxlbmd0aCk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB0aGUgc2V0IG9mIGF2YWlsYWJsZSBmZWF0dXJlcyBpbiB0aGlzIGVudmlyb25tZW50LgoJICAgKiBTb21lIGZlYXR1cmVzIG9mIEx1eG9uIGFyZSBub3QgYXZhaWxhYmxlIGluIGFsbCBlbnZpcm9ubWVudHMuIEZvciBleGFtcGxlLCBvbiBvbGRlciBicm93c2VycywgcmVsYXRpdmUgdGltZSBmb3JtYXR0aW5nIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZS4gVXNlIHRoaXMgZnVuY3Rpb24gdG8gZmlndXJlIG91dCBpZiB0aGF0J3MgdGhlIGNhc2UuCgkgICAqIEtleXM6CgkgICAqICogYHJlbGF0aXZlYDogd2hldGhlciB0aGlzIGVudmlyb25tZW50IHN1cHBvcnRzIHJlbGF0aXZlIHRpbWUgZm9ybWF0dGluZwoJICAgKiBAZXhhbXBsZSBJbmZvLmZlYXR1cmVzKCkgLy89PiB7IHJlbGF0aXZlOiBmYWxzZSB9CgkgICAqIEByZXR1cm4ge09iamVjdH0KCSAgICovCgkgIDsKCgkgIEluZm8uZmVhdHVyZXMgPSBmdW5jdGlvbiBmZWF0dXJlcygpIHsKCSAgICByZXR1cm4gewoJICAgICAgcmVsYXRpdmU6IGhhc1JlbGF0aXZlKCkKCSAgICB9OwoJICB9OwoKCSAgcmV0dXJuIEluZm87Cgl9KCk7CgoJZnVuY3Rpb24gZGF5RGlmZihlYXJsaWVyLCBsYXRlcikgewoJICB2YXIgdXRjRGF5U3RhcnQgPSBmdW5jdGlvbiB1dGNEYXlTdGFydChkdCkgewoJICAgIHJldHVybiBkdC50b1VUQygwLCB7CgkgICAgICBrZWVwTG9jYWxUaW1lOiB0cnVlCgkgICAgfSkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpOwoJICB9LAoJICAgICAgbXMgPSB1dGNEYXlTdGFydChsYXRlcikgLSB1dGNEYXlTdGFydChlYXJsaWVyKTsKCgkgIHJldHVybiBNYXRoLmZsb29yKER1cmF0aW9uLmZyb21NaWxsaXMobXMpLmFzKCJkYXlzIikpOwoJfQoKCWZ1bmN0aW9uIGhpZ2hPcmRlckRpZmZzKGN1cnNvciwgbGF0ZXIsIHVuaXRzKSB7CgkgIHZhciBkaWZmZXJzID0gW1sieWVhcnMiLCBmdW5jdGlvbiAoYSwgYikgewoJICAgIHJldHVybiBiLnllYXIgLSBhLnllYXI7CgkgIH1dLCBbInF1YXJ0ZXJzIiwgZnVuY3Rpb24gKGEsIGIpIHsKCSAgICByZXR1cm4gYi5xdWFydGVyIC0gYS5xdWFydGVyOwoJICB9XSwgWyJtb250aHMiLCBmdW5jdGlvbiAoYSwgYikgewoJICAgIHJldHVybiBiLm1vbnRoIC0gYS5tb250aCArIChiLnllYXIgLSBhLnllYXIpICogMTI7CgkgIH1dLCBbIndlZWtzIiwgZnVuY3Rpb24gKGEsIGIpIHsKCSAgICB2YXIgZGF5cyA9IGRheURpZmYoYSwgYik7CgkgICAgcmV0dXJuIChkYXlzIC0gZGF5cyAlIDcpIC8gNzsKCSAgfV0sIFsiZGF5cyIsIGRheURpZmZdXTsKCSAgdmFyIHJlc3VsdHMgPSB7fTsKCSAgdmFyIGxvd2VzdE9yZGVyLCBoaWdoV2F0ZXI7CgoJICBmb3IgKHZhciBfaSA9IDAsIF9kaWZmZXJzID0gZGlmZmVyczsgX2kgPCBfZGlmZmVycy5sZW5ndGg7IF9pKyspIHsKCSAgICB2YXIgX2RpZmZlcnMkX2kgPSBfZGlmZmVyc1tfaV0sCgkgICAgICAgIHVuaXQgPSBfZGlmZmVycyRfaVswXSwKCSAgICAgICAgZGlmZmVyID0gX2RpZmZlcnMkX2lbMV07CgoJICAgIGlmICh1bml0cy5pbmRleE9mKHVuaXQpID49IDApIHsKCSAgICAgIHZhciBfY3Vyc29yJHBsdXM7CgoJICAgICAgbG93ZXN0T3JkZXIgPSB1bml0OwoJICAgICAgdmFyIGRlbHRhID0gZGlmZmVyKGN1cnNvciwgbGF0ZXIpOwoJICAgICAgaGlnaFdhdGVyID0gY3Vyc29yLnBsdXMoKF9jdXJzb3IkcGx1cyA9IHt9LCBfY3Vyc29yJHBsdXNbdW5pdF0gPSBkZWx0YSwgX2N1cnNvciRwbHVzKSk7CgoJICAgICAgaWYgKGhpZ2hXYXRlciA+IGxhdGVyKSB7CgkgICAgICAgIHZhciBfY3Vyc29yJHBsdXMyOwoKCSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnBsdXMoKF9jdXJzb3IkcGx1czIgPSB7fSwgX2N1cnNvciRwbHVzMlt1bml0XSA9IGRlbHRhIC0gMSwgX2N1cnNvciRwbHVzMikpOwoJICAgICAgICBkZWx0YSAtPSAxOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgY3Vyc29yID0gaGlnaFdhdGVyOwoJICAgICAgfQoKCSAgICAgIHJlc3VsdHNbdW5pdF0gPSBkZWx0YTsKCSAgICB9CgkgIH0KCgkgIHJldHVybiBbY3Vyc29yLCByZXN1bHRzLCBoaWdoV2F0ZXIsIGxvd2VzdE9yZGVyXTsKCX0KCglmdW5jdGlvbiBfZGlmZiAoZWFybGllciwgbGF0ZXIsIHVuaXRzLCBvcHRzKSB7CgkgIHZhciBfaGlnaE9yZGVyRGlmZnMgPSBoaWdoT3JkZXJEaWZmcyhlYXJsaWVyLCBsYXRlciwgdW5pdHMpLAoJICAgICAgY3Vyc29yID0gX2hpZ2hPcmRlckRpZmZzWzBdLAoJICAgICAgcmVzdWx0cyA9IF9oaWdoT3JkZXJEaWZmc1sxXSwKCSAgICAgIGhpZ2hXYXRlciA9IF9oaWdoT3JkZXJEaWZmc1syXSwKCSAgICAgIGxvd2VzdE9yZGVyID0gX2hpZ2hPcmRlckRpZmZzWzNdOwoKCSAgdmFyIHJlbWFpbmluZ01pbGxpcyA9IGxhdGVyIC0gY3Vyc29yOwoJICB2YXIgbG93ZXJPcmRlclVuaXRzID0gdW5pdHMuZmlsdGVyKGZ1bmN0aW9uICh1KSB7CgkgICAgcmV0dXJuIFsiaG91cnMiLCAibWludXRlcyIsICJzZWNvbmRzIiwgIm1pbGxpc2Vjb25kcyJdLmluZGV4T2YodSkgPj0gMDsKCSAgfSk7CgoJICBpZiAobG93ZXJPcmRlclVuaXRzLmxlbmd0aCA9PT0gMCkgewoJICAgIGlmIChoaWdoV2F0ZXIgPCBsYXRlcikgewoJICAgICAgdmFyIF9jdXJzb3IkcGx1czM7CgoJICAgICAgaGlnaFdhdGVyID0gY3Vyc29yLnBsdXMoKF9jdXJzb3IkcGx1czMgPSB7fSwgX2N1cnNvciRwbHVzM1tsb3dlc3RPcmRlcl0gPSAxLCBfY3Vyc29yJHBsdXMzKSk7CgkgICAgfQoKCSAgICBpZiAoaGlnaFdhdGVyICE9PSBjdXJzb3IpIHsKCSAgICAgIHJlc3VsdHNbbG93ZXN0T3JkZXJdID0gKHJlc3VsdHNbbG93ZXN0T3JkZXJdIHx8IDApICsgcmVtYWluaW5nTWlsbGlzIC8gKGhpZ2hXYXRlciAtIGN1cnNvcik7CgkgICAgfQoJICB9CgoJICB2YXIgZHVyYXRpb24gPSBEdXJhdGlvbi5mcm9tT2JqZWN0KHJlc3VsdHMsIG9wdHMpOwoKCSAgaWYgKGxvd2VyT3JkZXJVbml0cy5sZW5ndGggPiAwKSB7CgkgICAgdmFyIF9EdXJhdGlvbiRmcm9tTWlsbGlzOwoKCSAgICByZXR1cm4gKF9EdXJhdGlvbiRmcm9tTWlsbGlzID0gRHVyYXRpb24uZnJvbU1pbGxpcyhyZW1haW5pbmdNaWxsaXMsIG9wdHMpKS5zaGlmdFRvLmFwcGx5KF9EdXJhdGlvbiRmcm9tTWlsbGlzLCBsb3dlck9yZGVyVW5pdHMpLnBsdXMoZHVyYXRpb24pOwoJICB9IGVsc2UgewoJICAgIHJldHVybiBkdXJhdGlvbjsKCSAgfQoJfQoKCXZhciBudW1iZXJpbmdTeXN0ZW1zID0gewoJICBhcmFiOiAiW1x1MDY2MC1cdTA2NjldIiwKCSAgYXJhYmV4dDogIltcdTA2RjAtXHUwNkY5XSIsCgkgIGJhbGk6ICJbXHUxQjUwLVx1MUI1OV0iLAoJICBiZW5nOiAiW1x1MDlFNi1cdTA5RUZdIiwKCSAgZGV2YTogIltcdTA5NjYtXHUwOTZGXSIsCgkgIGZ1bGx3aWRlOiAiW1x1RkYxMC1cdUZGMTldIiwKCSAgZ3VqcjogIltcdTBBRTYtXHUwQUVGXSIsCgkgIGhhbmlkZWM6ICJb44CHfOS4gHzkuox85LiJfOWbm3zkupR85YWtfOS4g3zlhat85LmdXSIsCgkgIGtobXI6ICJbXHUxN0UwLVx1MTdFOV0iLAoJICBrbmRhOiAiW1x1MENFNi1cdTBDRUZdIiwKCSAgbGFvbzogIltcdTBFRDAtXHUwRUQ5XSIsCgkgIGxpbWI6ICJbXHUxOTQ2LVx1MTk0Rl0iLAoJICBtbHltOiAiW1x1MEQ2Ni1cdTBENkZdIiwKCSAgbW9uZzogIltcdTE4MTAtXHUxODE5XSIsCgkgIG15bXI6ICJbXHUxMDQwLVx1MTA0OV0iLAoJICBvcnlhOiAiW1x1MEI2Ni1cdTBCNkZdIiwKCSAgdGFtbGRlYzogIltcdTBCRTYtXHUwQkVGXSIsCgkgIHRlbHU6ICJbXHUwQzY2LVx1MEM2Rl0iLAoJICB0aGFpOiAiW1x1MEU1MC1cdTBFNTldIiwKCSAgdGlidDogIltcdTBGMjAtXHUwRjI5XSIsCgkgIGxhdG46ICJcXGQiCgl9OwoJdmFyIG51bWJlcmluZ1N5c3RlbXNVVEYxNiA9IHsKCSAgYXJhYjogWzE2MzIsIDE2NDFdLAoJICBhcmFiZXh0OiBbMTc3NiwgMTc4NV0sCgkgIGJhbGk6IFs2OTkyLCA3MDAxXSwKCSAgYmVuZzogWzI1MzQsIDI1NDNdLAoJICBkZXZhOiBbMjQwNiwgMjQxNV0sCgkgIGZ1bGx3aWRlOiBbNjUyOTYsIDY1MzAzXSwKCSAgZ3VqcjogWzI3OTAsIDI3OTldLAoJICBraG1yOiBbNjExMiwgNjEyMV0sCgkgIGtuZGE6IFszMzAyLCAzMzExXSwKCSAgbGFvbzogWzM3OTIsIDM4MDFdLAoJICBsaW1iOiBbNjQ3MCwgNjQ3OV0sCgkgIG1seW06IFszNDMwLCAzNDM5XSwKCSAgbW9uZzogWzYxNjAsIDYxNjldLAoJICBteW1yOiBbNDE2MCwgNDE2OV0sCgkgIG9yeWE6IFsyOTE4LCAyOTI3XSwKCSAgdGFtbGRlYzogWzMwNDYsIDMwNTVdLAoJICB0ZWx1OiBbMzE3NCwgMzE4M10sCgkgIHRoYWk6IFszNjY0LCAzNjczXSwKCSAgdGlidDogWzM4NzIsIDM4ODFdCgl9OwoJdmFyIGhhbmlkZWNDaGFycyA9IG51bWJlcmluZ1N5c3RlbXMuaGFuaWRlYy5yZXBsYWNlKC9bXFt8XF1dL2csICIiKS5zcGxpdCgiIik7CglmdW5jdGlvbiBwYXJzZURpZ2l0cyhzdHIpIHsKCSAgdmFyIHZhbHVlID0gcGFyc2VJbnQoc3RyLCAxMCk7CgoJICBpZiAoaXNOYU4odmFsdWUpKSB7CgkgICAgdmFsdWUgPSAiIjsKCgkgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHsKCSAgICAgIHZhciBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7CgoJICAgICAgaWYgKHN0cltpXS5zZWFyY2gobnVtYmVyaW5nU3lzdGVtcy5oYW5pZGVjKSAhPT0gLTEpIHsKCSAgICAgICAgdmFsdWUgKz0gaGFuaWRlY0NoYXJzLmluZGV4T2Yoc3RyW2ldKTsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIGZvciAodmFyIGtleSBpbiBudW1iZXJpbmdTeXN0ZW1zVVRGMTYpIHsKCSAgICAgICAgICB2YXIgX251bWJlcmluZ1N5c3RlbXNVVEYgPSBudW1iZXJpbmdTeXN0ZW1zVVRGMTZba2V5XSwKCSAgICAgICAgICAgICAgbWluID0gX251bWJlcmluZ1N5c3RlbXNVVEZbMF0sCgkgICAgICAgICAgICAgIG1heCA9IF9udW1iZXJpbmdTeXN0ZW1zVVRGWzFdOwoKCSAgICAgICAgICBpZiAoY29kZSA+PSBtaW4gJiYgY29kZSA8PSBtYXgpIHsKCSAgICAgICAgICAgIHZhbHVlICs9IGNvZGUgLSBtaW47CgkgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgICB9CgkgICAgfQoKCSAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKTsKCSAgfSBlbHNlIHsKCSAgICByZXR1cm4gdmFsdWU7CgkgIH0KCX0KCWZ1bmN0aW9uIGRpZ2l0UmVnZXgoX3JlZiwgYXBwZW5kKSB7CgkgIHZhciBudW1iZXJpbmdTeXN0ZW0gPSBfcmVmLm51bWJlcmluZ1N5c3RlbTsKCgkgIGlmIChhcHBlbmQgPT09IHZvaWQgMCkgewoJICAgIGFwcGVuZCA9ICIiOwoJICB9CgoJICByZXR1cm4gbmV3IFJlZ0V4cCgiIiArIG51bWJlcmluZ1N5c3RlbXNbbnVtYmVyaW5nU3lzdGVtIHx8ICJsYXRuIl0gKyBhcHBlbmQpOwoJfQoKCXZhciBNSVNTSU5HX0ZUUCA9ICJtaXNzaW5nIEludGwuRGF0ZVRpbWVGb3JtYXQuZm9ybWF0VG9QYXJ0cyBzdXBwb3J0IjsKCglmdW5jdGlvbiBpbnRVbml0KHJlZ2V4LCBwb3N0KSB7CgkgIGlmIChwb3N0ID09PSB2b2lkIDApIHsKCSAgICBwb3N0ID0gZnVuY3Rpb24gcG9zdChpKSB7CgkgICAgICByZXR1cm4gaTsKCSAgICB9OwoJICB9CgoJICByZXR1cm4gewoJICAgIHJlZ2V4OiByZWdleCwKCSAgICBkZXNlcjogZnVuY3Rpb24gZGVzZXIoX3JlZikgewoJICAgICAgdmFyIHMgPSBfcmVmWzBdOwoJICAgICAgcmV0dXJuIHBvc3QocGFyc2VEaWdpdHMocykpOwoJICAgIH0KCSAgfTsKCX0KCgl2YXIgTkJTUCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKTsKCXZhciBzcGFjZU9yTkJTUCA9ICJbICIgKyBOQlNQICsgIl0iOwoJdmFyIHNwYWNlT3JOQlNQUmVnRXhwID0gbmV3IFJlZ0V4cChzcGFjZU9yTkJTUCwgImciKTsKCglmdW5jdGlvbiBmaXhMaXN0UmVnZXgocykgewoJICAvLyBtYWtlIGRvdHMgb3B0aW9uYWwgYW5kIGFsc28gbWFrZSB0aGVtIGxpdGVyYWwKCSAgLy8gbWFrZSBzcGFjZSBhbmQgbm9uIGJyZWFrYWJsZSBzcGFjZSBjaGFyYWN0ZXJzIGludGVyY2hhbmdlYWJsZQoJICByZXR1cm4gcy5yZXBsYWNlKC9cLi9nLCAiXFwuPyIpLnJlcGxhY2Uoc3BhY2VPck5CU1BSZWdFeHAsIHNwYWNlT3JOQlNQKTsKCX0KCglmdW5jdGlvbiBzdHJpcEluc2Vuc2l0aXZpdGllcyhzKSB7CgkgIHJldHVybiBzLnJlcGxhY2UoL1wuL2csICIiKSAvLyBpZ25vcmUgZG90cyB0aGF0IHdlcmUgbWFkZSBvcHRpb25hbAoJICAucmVwbGFjZShzcGFjZU9yTkJTUFJlZ0V4cCwgIiAiKSAvLyBpbnRlcmNoYW5nZSBzcGFjZSBhbmQgbmJzcAoJICAudG9Mb3dlckNhc2UoKTsKCX0KCglmdW5jdGlvbiBvbmVPZihzdHJpbmdzLCBzdGFydEluZGV4KSB7CgkgIGlmIChzdHJpbmdzID09PSBudWxsKSB7CgkgICAgcmV0dXJuIG51bGw7CgkgIH0gZWxzZSB7CgkgICAgcmV0dXJuIHsKCSAgICAgIHJlZ2V4OiBSZWdFeHAoc3RyaW5ncy5tYXAoZml4TGlzdFJlZ2V4KS5qb2luKCJ8IikpLAoJICAgICAgZGVzZXI6IGZ1bmN0aW9uIGRlc2VyKF9yZWYyKSB7CgkgICAgICAgIHZhciBzID0gX3JlZjJbMF07CgkgICAgICAgIHJldHVybiBzdHJpbmdzLmZpbmRJbmRleChmdW5jdGlvbiAoaSkgewoJICAgICAgICAgIHJldHVybiBzdHJpcEluc2Vuc2l0aXZpdGllcyhzKSA9PT0gc3RyaXBJbnNlbnNpdGl2aXRpZXMoaSk7CgkgICAgICAgIH0pICsgc3RhcnRJbmRleDsKCSAgICAgIH0KCSAgICB9OwoJICB9Cgl9CgoJZnVuY3Rpb24gb2Zmc2V0KHJlZ2V4LCBncm91cHMpIHsKCSAgcmV0dXJuIHsKCSAgICByZWdleDogcmVnZXgsCgkgICAgZGVzZXI6IGZ1bmN0aW9uIGRlc2VyKF9yZWYzKSB7CgkgICAgICB2YXIgaCA9IF9yZWYzWzFdLAoJICAgICAgICAgIG0gPSBfcmVmM1syXTsKCSAgICAgIHJldHVybiBzaWduZWRPZmZzZXQoaCwgbSk7CgkgICAgfSwKCSAgICBncm91cHM6IGdyb3VwcwoJICB9OwoJfQoKCWZ1bmN0aW9uIHNpbXBsZShyZWdleCkgewoJICByZXR1cm4gewoJICAgIHJlZ2V4OiByZWdleCwKCSAgICBkZXNlcjogZnVuY3Rpb24gZGVzZXIoX3JlZjQpIHsKCSAgICAgIHZhciBzID0gX3JlZjRbMF07CgkgICAgICByZXR1cm4gczsKCSAgICB9CgkgIH07Cgl9CgoJZnVuY3Rpb24gZXNjYXBlVG9rZW4odmFsdWUpIHsKCSAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csICJcXCQmIik7Cgl9CgoJZnVuY3Rpb24gdW5pdEZvclRva2VuKHRva2VuLCBsb2MpIHsKCSAgdmFyIG9uZSA9IGRpZ2l0UmVnZXgobG9jKSwKCSAgICAgIHR3byA9IGRpZ2l0UmVnZXgobG9jLCAiezJ9IiksCgkgICAgICB0aHJlZSA9IGRpZ2l0UmVnZXgobG9jLCAiezN9IiksCgkgICAgICBmb3VyID0gZGlnaXRSZWdleChsb2MsICJ7NH0iKSwKCSAgICAgIHNpeCA9IGRpZ2l0UmVnZXgobG9jLCAiezZ9IiksCgkgICAgICBvbmVPclR3byA9IGRpZ2l0UmVnZXgobG9jLCAiezEsMn0iKSwKCSAgICAgIG9uZVRvVGhyZWUgPSBkaWdpdFJlZ2V4KGxvYywgInsxLDN9IiksCgkgICAgICBvbmVUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCAiezEsNn0iKSwKCSAgICAgIG9uZVRvTmluZSA9IGRpZ2l0UmVnZXgobG9jLCAiezEsOX0iKSwKCSAgICAgIHR3b1RvRm91ciA9IGRpZ2l0UmVnZXgobG9jLCAiezIsNH0iKSwKCSAgICAgIGZvdXJUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCAiezQsNn0iKSwKCSAgICAgIGxpdGVyYWwgPSBmdW5jdGlvbiBsaXRlcmFsKHQpIHsKCSAgICByZXR1cm4gewoJICAgICAgcmVnZXg6IFJlZ0V4cChlc2NhcGVUb2tlbih0LnZhbCkpLAoJICAgICAgZGVzZXI6IGZ1bmN0aW9uIGRlc2VyKF9yZWY1KSB7CgkgICAgICAgIHZhciBzID0gX3JlZjVbMF07CgkgICAgICAgIHJldHVybiBzOwoJICAgICAgfSwKCSAgICAgIGxpdGVyYWw6IHRydWUKCSAgICB9OwoJICB9LAoJICAgICAgdW5pdGF0ZSA9IGZ1bmN0aW9uIHVuaXRhdGUodCkgewoJICAgIGlmICh0b2tlbi5saXRlcmFsKSB7CgkgICAgICByZXR1cm4gbGl0ZXJhbCh0KTsKCSAgICB9CgoJICAgIHN3aXRjaCAodC52YWwpIHsKCSAgICAgIC8vIGVyYQoJICAgICAgY2FzZSAiRyI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2MuZXJhcygic2hvcnQiLCBmYWxzZSksIDApOwoKCSAgICAgIGNhc2UgIkdHIjoKCSAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5lcmFzKCJsb25nIiwgZmFsc2UpLCAwKTsKCSAgICAgIC8vIHllYXJzCgoJICAgICAgY2FzZSAieSI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvU2l4KTsKCgkgICAgICBjYXNlICJ5eSI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KHR3b1RvRm91ciwgdW50cnVuY2F0ZVllYXIpOwoKCSAgICAgIGNhc2UgInl5eXkiOgoJICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyKTsKCgkgICAgICBjYXNlICJ5eXl5eSI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KGZvdXJUb1NpeCk7CgoJICAgICAgY2FzZSAieXl5eXl5IjoKCSAgICAgICAgcmV0dXJuIGludFVuaXQoc2l4KTsKCSAgICAgIC8vIG1vbnRocwoKCSAgICAgIGNhc2UgIk0iOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgoJICAgICAgY2FzZSAiTU0iOgoJICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoKCSAgICAgIGNhc2UgIk1NTSI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKCJzaG9ydCIsIHRydWUsIGZhbHNlKSwgMSk7CgoJICAgICAgY2FzZSAiTU1NTSI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKCJsb25nIiwgdHJ1ZSwgZmFsc2UpLCAxKTsKCgkgICAgICBjYXNlICJMIjoKCSAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pOwoKCSAgICAgIGNhc2UgIkxMIjoKCSAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTsKCgkgICAgICBjYXNlICJMTEwiOgoJICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocygic2hvcnQiLCBmYWxzZSwgZmFsc2UpLCAxKTsKCgkgICAgICBjYXNlICJMTExMIjoKCSAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoImxvbmciLCBmYWxzZSwgZmFsc2UpLCAxKTsKCSAgICAgIC8vIGRhdGVzCgoJICAgICAgY2FzZSAiZCI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTsKCgkgICAgICBjYXNlICJkZCI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CgkgICAgICAvLyBvcmRpbmFscwoKCSAgICAgIGNhc2UgIm8iOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmVUb1RocmVlKTsKCgkgICAgICBjYXNlICJvb28iOgoJICAgICAgICByZXR1cm4gaW50VW5pdCh0aHJlZSk7CgkgICAgICAvLyB0aW1lCgoJICAgICAgY2FzZSAiSEgiOgoJICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoKCSAgICAgIGNhc2UgIkgiOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgoJICAgICAgY2FzZSAiaGgiOgoJICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoKCSAgICAgIGNhc2UgImgiOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgoJICAgICAgY2FzZSAibW0iOgoJICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoKCSAgICAgIGNhc2UgIm0iOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgoJICAgICAgY2FzZSAicSI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTsKCgkgICAgICBjYXNlICJxcSI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CgoJICAgICAgY2FzZSAicyI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTsKCgkgICAgICBjYXNlICJzcyI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CgoJICAgICAgY2FzZSAiUyI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvVGhyZWUpOwoKCSAgICAgIGNhc2UgIlNTUyI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KHRocmVlKTsKCgkgICAgICBjYXNlICJ1IjoKCSAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVUb05pbmUpOwoKCSAgICAgIGNhc2UgInV1IjoKCSAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVPclR3byk7CgoJICAgICAgY2FzZSAidXV1IjoKCSAgICAgICAgcmV0dXJuIGludFVuaXQob25lKTsKCSAgICAgIC8vIG1lcmlkaWVtCgoJICAgICAgY2FzZSAiYSI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2MubWVyaWRpZW1zKCksIDApOwoJICAgICAgLy8gd2Vla1llYXIgKGspCgoJICAgICAgY2FzZSAia2trayI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KGZvdXIpOwoKCSAgICAgIGNhc2UgImtrIjoKCSAgICAgICAgcmV0dXJuIGludFVuaXQodHdvVG9Gb3VyLCB1bnRydW5jYXRlWWVhcik7CgkgICAgICAvLyB3ZWVrTnVtYmVyIChXKQoKCSAgICAgIGNhc2UgIlciOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgoJICAgICAgY2FzZSAiV1ciOgoJICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoJICAgICAgLy8gd2Vla2RheXMKCgkgICAgICBjYXNlICJFIjoKCSAgICAgIGNhc2UgImMiOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmUpOwoKCSAgICAgIGNhc2UgIkVFRSI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoInNob3J0IiwgZmFsc2UsIGZhbHNlKSwgMSk7CgoJICAgICAgY2FzZSAiRUVFRSI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoImxvbmciLCBmYWxzZSwgZmFsc2UpLCAxKTsKCgkgICAgICBjYXNlICJjY2MiOgoJICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKCJzaG9ydCIsIHRydWUsIGZhbHNlKSwgMSk7CgoJICAgICAgY2FzZSAiY2NjYyI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoImxvbmciLCB0cnVlLCBmYWxzZSksIDEpOwoJICAgICAgLy8gb2Zmc2V0L3pvbmUKCgkgICAgICBjYXNlICJaIjoKCSAgICAgIGNhc2UgIlpaIjoKCSAgICAgICAgcmV0dXJuIG9mZnNldChuZXcgUmVnRXhwKCIoWystXSIgKyBvbmVPclR3by5zb3VyY2UgKyAiKSg/OjooIiArIHR3by5zb3VyY2UgKyAiKSk/IiksIDIpOwoKCSAgICAgIGNhc2UgIlpaWiI6CgkgICAgICAgIHJldHVybiBvZmZzZXQobmV3IFJlZ0V4cCgiKFsrLV0iICsgb25lT3JUd28uc291cmNlICsgIikoIiArIHR3by5zb3VyY2UgKyAiKT8iKSwgMik7CgkgICAgICAvLyB3ZSBkb24ndCBzdXBwb3J0IFpaWlogKFBTVCkgb3IgWlpaWlogKFBhY2lmaWMgU3RhbmRhcmQgVGltZSkgaW4gcGFyc2luZwoJICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueSB3YXkgdG8gZmlndXJlIG91dCB3aGF0IHRoZXkgYXJlCgoJICAgICAgY2FzZSAieiI6CgkgICAgICAgIHJldHVybiBzaW1wbGUoL1thLXpfKy0vXXsxLDI1Nn0/L2kpOwoKCSAgICAgIGRlZmF1bHQ6CgkgICAgICAgIHJldHVybiBsaXRlcmFsKHQpOwoJICAgIH0KCSAgfTsKCgkgIHZhciB1bml0ID0gdW5pdGF0ZSh0b2tlbikgfHwgewoJICAgIGludmFsaWRSZWFzb246IE1JU1NJTkdfRlRQCgkgIH07CgkgIHVuaXQudG9rZW4gPSB0b2tlbjsKCSAgcmV0dXJuIHVuaXQ7Cgl9CgoJdmFyIHBhcnRUeXBlU3R5bGVUb1Rva2VuVmFsID0gewoJICB5ZWFyOiB7CgkgICAgIjItZGlnaXQiOiAieXkiLAoJICAgIG51bWVyaWM6ICJ5eXl5eSIKCSAgfSwKCSAgbW9udGg6IHsKCSAgICBudW1lcmljOiAiTSIsCgkgICAgIjItZGlnaXQiOiAiTU0iLAoJICAgIHNob3J0OiAiTU1NIiwKCSAgICBsb25nOiAiTU1NTSIKCSAgfSwKCSAgZGF5OiB7CgkgICAgbnVtZXJpYzogImQiLAoJICAgICIyLWRpZ2l0IjogImRkIgoJICB9LAoJICB3ZWVrZGF5OiB7CgkgICAgc2hvcnQ6ICJFRUUiLAoJICAgIGxvbmc6ICJFRUVFIgoJICB9LAoJICBkYXlwZXJpb2Q6ICJhIiwKCSAgZGF5UGVyaW9kOiAiYSIsCgkgIGhvdXI6IHsKCSAgICBudW1lcmljOiAiaCIsCgkgICAgIjItZGlnaXQiOiAiaGgiCgkgIH0sCgkgIG1pbnV0ZTogewoJICAgIG51bWVyaWM6ICJtIiwKCSAgICAiMi1kaWdpdCI6ICJtbSIKCSAgfSwKCSAgc2Vjb25kOiB7CgkgICAgbnVtZXJpYzogInMiLAoJICAgICIyLWRpZ2l0IjogInNzIgoJICB9Cgl9OwoKCWZ1bmN0aW9uIHRva2VuRm9yUGFydChwYXJ0LCBsb2NhbGUsIGZvcm1hdE9wdHMpIHsKCSAgdmFyIHR5cGUgPSBwYXJ0LnR5cGUsCgkgICAgICB2YWx1ZSA9IHBhcnQudmFsdWU7CgoJICBpZiAodHlwZSA9PT0gImxpdGVyYWwiKSB7CgkgICAgcmV0dXJuIHsKCSAgICAgIGxpdGVyYWw6IHRydWUsCgkgICAgICB2YWw6IHZhbHVlCgkgICAgfTsKCSAgfQoKCSAgdmFyIHN0eWxlID0gZm9ybWF0T3B0c1t0eXBlXTsKCSAgdmFyIHZhbCA9IHBhcnRUeXBlU3R5bGVUb1Rva2VuVmFsW3R5cGVdOwoKCSAgaWYgKHR5cGVvZiB2YWwgPT09ICJvYmplY3QiKSB7CgkgICAgdmFsID0gdmFsW3N0eWxlXTsKCSAgfQoKCSAgaWYgKHZhbCkgewoJICAgIHJldHVybiB7CgkgICAgICBsaXRlcmFsOiBmYWxzZSwKCSAgICAgIHZhbDogdmFsCgkgICAgfTsKCSAgfQoKCSAgcmV0dXJuIHVuZGVmaW5lZDsKCX0KCglmdW5jdGlvbiBidWlsZFJlZ2V4KHVuaXRzKSB7CgkgIHZhciByZSA9IHVuaXRzLm1hcChmdW5jdGlvbiAodSkgewoJICAgIHJldHVybiB1LnJlZ2V4OwoJICB9KS5yZWR1Y2UoZnVuY3Rpb24gKGYsIHIpIHsKCSAgICByZXR1cm4gZiArICIoIiArIHIuc291cmNlICsgIikiOwoJICB9LCAiIik7CgkgIHJldHVybiBbIl4iICsgcmUgKyAiJCIsIHVuaXRzXTsKCX0KCglmdW5jdGlvbiBtYXRjaChpbnB1dCwgcmVnZXgsIGhhbmRsZXJzKSB7CgkgIHZhciBtYXRjaGVzID0gaW5wdXQubWF0Y2gocmVnZXgpOwoKCSAgaWYgKG1hdGNoZXMpIHsKCSAgICB2YXIgYWxsID0ge307CgkgICAgdmFyIG1hdGNoSW5kZXggPSAxOwoKCSAgICBmb3IgKHZhciBpIGluIGhhbmRsZXJzKSB7CgkgICAgICBpZiAoaGFzT3duUHJvcGVydHkoaGFuZGxlcnMsIGkpKSB7CgkgICAgICAgIHZhciBoID0gaGFuZGxlcnNbaV0sCgkgICAgICAgICAgICBncm91cHMgPSBoLmdyb3VwcyA/IGguZ3JvdXBzICsgMSA6IDE7CgoJICAgICAgICBpZiAoIWgubGl0ZXJhbCAmJiBoLnRva2VuKSB7CgkgICAgICAgICAgYWxsW2gudG9rZW4udmFsWzBdXSA9IGguZGVzZXIobWF0Y2hlcy5zbGljZShtYXRjaEluZGV4LCBtYXRjaEluZGV4ICsgZ3JvdXBzKSk7CgkgICAgICAgIH0KCgkgICAgICAgIG1hdGNoSW5kZXggKz0gZ3JvdXBzOwoJICAgICAgfQoJICAgIH0KCgkgICAgcmV0dXJuIFttYXRjaGVzLCBhbGxdOwoJICB9IGVsc2UgewoJICAgIHJldHVybiBbbWF0Y2hlcywge31dOwoJICB9Cgl9CgoJZnVuY3Rpb24gZGF0ZVRpbWVGcm9tTWF0Y2hlcyhtYXRjaGVzKSB7CgkgIHZhciB0b0ZpZWxkID0gZnVuY3Rpb24gdG9GaWVsZCh0b2tlbikgewoJICAgIHN3aXRjaCAodG9rZW4pIHsKCSAgICAgIGNhc2UgIlMiOgoJICAgICAgICByZXR1cm4gIm1pbGxpc2Vjb25kIjsKCgkgICAgICBjYXNlICJzIjoKCSAgICAgICAgcmV0dXJuICJzZWNvbmQiOwoKCSAgICAgIGNhc2UgIm0iOgoJICAgICAgICByZXR1cm4gIm1pbnV0ZSI7CgoJICAgICAgY2FzZSAiaCI6CgkgICAgICBjYXNlICJIIjoKCSAgICAgICAgcmV0dXJuICJob3VyIjsKCgkgICAgICBjYXNlICJkIjoKCSAgICAgICAgcmV0dXJuICJkYXkiOwoKCSAgICAgIGNhc2UgIm8iOgoJICAgICAgICByZXR1cm4gIm9yZGluYWwiOwoKCSAgICAgIGNhc2UgIkwiOgoJICAgICAgY2FzZSAiTSI6CgkgICAgICAgIHJldHVybiAibW9udGgiOwoKCSAgICAgIGNhc2UgInkiOgoJICAgICAgICByZXR1cm4gInllYXIiOwoKCSAgICAgIGNhc2UgIkUiOgoJICAgICAgY2FzZSAiYyI6CgkgICAgICAgIHJldHVybiAid2Vla2RheSI7CgoJICAgICAgY2FzZSAiVyI6CgkgICAgICAgIHJldHVybiAid2Vla051bWJlciI7CgoJICAgICAgY2FzZSAiayI6CgkgICAgICAgIHJldHVybiAid2Vla1llYXIiOwoKCSAgICAgIGNhc2UgInEiOgoJICAgICAgICByZXR1cm4gInF1YXJ0ZXIiOwoKCSAgICAgIGRlZmF1bHQ6CgkgICAgICAgIHJldHVybiBudWxsOwoJICAgIH0KCSAgfTsKCgkgIHZhciB6b25lID0gbnVsbDsKCSAgdmFyIHNwZWNpZmljT2Zmc2V0OwoKCSAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnopKSB7CgkgICAgem9uZSA9IElBTkFab25lLmNyZWF0ZShtYXRjaGVzLnopOwoJICB9CgoJICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMuWikpIHsKCSAgICBpZiAoIXpvbmUpIHsKCSAgICAgIHpvbmUgPSBuZXcgRml4ZWRPZmZzZXRab25lKG1hdGNoZXMuWik7CgkgICAgfQoKCSAgICBzcGVjaWZpY09mZnNldCA9IG1hdGNoZXMuWjsKCSAgfQoKCSAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnEpKSB7CgkgICAgbWF0Y2hlcy5NID0gKG1hdGNoZXMucSAtIDEpICogMyArIDE7CgkgIH0KCgkgIGlmICghaXNVbmRlZmluZWQobWF0Y2hlcy5oKSkgewoJICAgIGlmIChtYXRjaGVzLmggPCAxMiAmJiBtYXRjaGVzLmEgPT09IDEpIHsKCSAgICAgIG1hdGNoZXMuaCArPSAxMjsKCSAgICB9IGVsc2UgaWYgKG1hdGNoZXMuaCA9PT0gMTIgJiYgbWF0Y2hlcy5hID09PSAwKSB7CgkgICAgICBtYXRjaGVzLmggPSAwOwoJICAgIH0KCSAgfQoKCSAgaWYgKG1hdGNoZXMuRyA9PT0gMCAmJiBtYXRjaGVzLnkpIHsKCSAgICBtYXRjaGVzLnkgPSAtbWF0Y2hlcy55OwoJICB9CgoJICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMudSkpIHsKCSAgICBtYXRjaGVzLlMgPSBwYXJzZU1pbGxpcyhtYXRjaGVzLnUpOwoJICB9CgoJICB2YXIgdmFscyA9IE9iamVjdC5rZXlzKG1hdGNoZXMpLnJlZHVjZShmdW5jdGlvbiAociwgaykgewoJICAgIHZhciBmID0gdG9GaWVsZChrKTsKCgkgICAgaWYgKGYpIHsKCSAgICAgIHJbZl0gPSBtYXRjaGVzW2tdOwoJICAgIH0KCgkgICAgcmV0dXJuIHI7CgkgIH0sIHt9KTsKCSAgcmV0dXJuIFt2YWxzLCB6b25lLCBzcGVjaWZpY09mZnNldF07Cgl9CgoJdmFyIGR1bW15RGF0ZVRpbWVDYWNoZSA9IG51bGw7CgoJZnVuY3Rpb24gZ2V0RHVtbXlEYXRlVGltZSgpIHsKCSAgaWYgKCFkdW1teURhdGVUaW1lQ2FjaGUpIHsKCSAgICBkdW1teURhdGVUaW1lQ2FjaGUgPSBEYXRlVGltZS5mcm9tTWlsbGlzKDE1NTU1NTU1NTU1NTUpOwoJICB9CgoJICByZXR1cm4gZHVtbXlEYXRlVGltZUNhY2hlOwoJfQoKCWZ1bmN0aW9uIG1heWJlRXhwYW5kTWFjcm9Ub2tlbih0b2tlbiwgbG9jYWxlKSB7CgkgIGlmICh0b2tlbi5saXRlcmFsKSB7CgkgICAgcmV0dXJuIHRva2VuOwoJICB9CgoJICB2YXIgZm9ybWF0T3B0cyA9IEZvcm1hdHRlci5tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuLnZhbCk7CgoJICBpZiAoIWZvcm1hdE9wdHMpIHsKCSAgICByZXR1cm4gdG9rZW47CgkgIH0KCgkgIHZhciBmb3JtYXR0ZXIgPSBGb3JtYXR0ZXIuY3JlYXRlKGxvY2FsZSwgZm9ybWF0T3B0cyk7CgkgIHZhciBwYXJ0cyA9IGZvcm1hdHRlci5mb3JtYXREYXRlVGltZVBhcnRzKGdldER1bW15RGF0ZVRpbWUoKSk7CgkgIHZhciB0b2tlbnMgPSBwYXJ0cy5tYXAoZnVuY3Rpb24gKHApIHsKCSAgICByZXR1cm4gdG9rZW5Gb3JQYXJ0KHAsIGxvY2FsZSwgZm9ybWF0T3B0cyk7CgkgIH0pOwoKCSAgaWYgKHRva2Vucy5pbmNsdWRlcyh1bmRlZmluZWQpKSB7CgkgICAgcmV0dXJuIHRva2VuOwoJICB9CgoJICByZXR1cm4gdG9rZW5zOwoJfQoKCWZ1bmN0aW9uIGV4cGFuZE1hY3JvVG9rZW5zKHRva2VucywgbG9jYWxlKSB7CgkgIHZhciBfQXJyYXkkcHJvdG90eXBlOwoKCSAgcmV0dXJuIChfQXJyYXkkcHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlKS5jb25jYXQuYXBwbHkoX0FycmF5JHByb3RvdHlwZSwgdG9rZW5zLm1hcChmdW5jdGlvbiAodCkgewoJICAgIHJldHVybiBtYXliZUV4cGFuZE1hY3JvVG9rZW4odCwgbG9jYWxlKTsKCSAgfSkpOwoJfQoJLyoqCgkgKiBAcHJpdmF0ZQoJICovCgoKCWZ1bmN0aW9uIGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCkgewoJICB2YXIgdG9rZW5zID0gZXhwYW5kTWFjcm9Ub2tlbnMoRm9ybWF0dGVyLnBhcnNlRm9ybWF0KGZvcm1hdCksIGxvY2FsZSksCgkgICAgICB1bml0cyA9IHRva2Vucy5tYXAoZnVuY3Rpb24gKHQpIHsKCSAgICByZXR1cm4gdW5pdEZvclRva2VuKHQsIGxvY2FsZSk7CgkgIH0pLAoJICAgICAgZGlzcXVhbGlmeWluZ1VuaXQgPSB1bml0cy5maW5kKGZ1bmN0aW9uICh0KSB7CgkgICAgcmV0dXJuIHQuaW52YWxpZFJlYXNvbjsKCSAgfSk7CgoJICBpZiAoZGlzcXVhbGlmeWluZ1VuaXQpIHsKCSAgICByZXR1cm4gewoJICAgICAgaW5wdXQ6IGlucHV0LAoJICAgICAgdG9rZW5zOiB0b2tlbnMsCgkgICAgICBpbnZhbGlkUmVhc29uOiBkaXNxdWFsaWZ5aW5nVW5pdC5pbnZhbGlkUmVhc29uCgkgICAgfTsKCSAgfSBlbHNlIHsKCSAgICB2YXIgX2J1aWxkUmVnZXggPSBidWlsZFJlZ2V4KHVuaXRzKSwKCSAgICAgICAgcmVnZXhTdHJpbmcgPSBfYnVpbGRSZWdleFswXSwKCSAgICAgICAgaGFuZGxlcnMgPSBfYnVpbGRSZWdleFsxXSwKCSAgICAgICAgcmVnZXggPSBSZWdFeHAocmVnZXhTdHJpbmcsICJpIiksCgkgICAgICAgIF9tYXRjaCA9IG1hdGNoKGlucHV0LCByZWdleCwgaGFuZGxlcnMpLAoJICAgICAgICByYXdNYXRjaGVzID0gX21hdGNoWzBdLAoJICAgICAgICBtYXRjaGVzID0gX21hdGNoWzFdLAoJICAgICAgICBfcmVmNiA9IG1hdGNoZXMgPyBkYXRlVGltZUZyb21NYXRjaGVzKG1hdGNoZXMpIDogW251bGwsIG51bGwsIHVuZGVmaW5lZF0sCgkgICAgICAgIHJlc3VsdCA9IF9yZWY2WzBdLAoJICAgICAgICB6b25lID0gX3JlZjZbMV0sCgkgICAgICAgIHNwZWNpZmljT2Zmc2V0ID0gX3JlZjZbMl07CgoJICAgIGlmIChoYXNPd25Qcm9wZXJ0eShtYXRjaGVzLCAiYSIpICYmIGhhc093blByb3BlcnR5KG1hdGNoZXMsICJIIikpIHsKCSAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcigiQ2FuJ3QgaW5jbHVkZSBtZXJpZGllbSB3aGVuIHNwZWNpZnlpbmcgMjQtaG91ciBmb3JtYXQiKTsKCSAgICB9CgoJICAgIHJldHVybiB7CgkgICAgICBpbnB1dDogaW5wdXQsCgkgICAgICB0b2tlbnM6IHRva2VucywKCSAgICAgIHJlZ2V4OiByZWdleCwKCSAgICAgIHJhd01hdGNoZXM6IHJhd01hdGNoZXMsCgkgICAgICBtYXRjaGVzOiBtYXRjaGVzLAoJICAgICAgcmVzdWx0OiByZXN1bHQsCgkgICAgICB6b25lOiB6b25lLAoJICAgICAgc3BlY2lmaWNPZmZzZXQ6IHNwZWNpZmljT2Zmc2V0CgkgICAgfTsKCSAgfQoJfQoJZnVuY3Rpb24gcGFyc2VGcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCkgewoJICB2YXIgX2V4cGxhaW5Gcm9tVG9rZW5zID0gZXhwbGFpbkZyb21Ub2tlbnMobG9jYWxlLCBpbnB1dCwgZm9ybWF0KSwKCSAgICAgIHJlc3VsdCA9IF9leHBsYWluRnJvbVRva2Vucy5yZXN1bHQsCgkgICAgICB6b25lID0gX2V4cGxhaW5Gcm9tVG9rZW5zLnpvbmUsCgkgICAgICBzcGVjaWZpY09mZnNldCA9IF9leHBsYWluRnJvbVRva2Vucy5zcGVjaWZpY09mZnNldCwKCSAgICAgIGludmFsaWRSZWFzb24gPSBfZXhwbGFpbkZyb21Ub2tlbnMuaW52YWxpZFJlYXNvbjsKCgkgIHJldHVybiBbcmVzdWx0LCB6b25lLCBzcGVjaWZpY09mZnNldCwgaW52YWxpZFJlYXNvbl07Cgl9CgoJdmFyIG5vbkxlYXBMYWRkZXIgPSBbMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzRdLAoJICAgIGxlYXBMYWRkZXIgPSBbMCwgMzEsIDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzVdOwoKCWZ1bmN0aW9uIHVuaXRPdXRPZlJhbmdlKHVuaXQsIHZhbHVlKSB7CgkgIHJldHVybiBuZXcgSW52YWxpZCgidW5pdCBvdXQgb2YgcmFuZ2UiLCAieW91IHNwZWNpZmllZCAiICsgdmFsdWUgKyAiIChvZiB0eXBlICIgKyB0eXBlb2YgdmFsdWUgKyAiKSBhcyBhICIgKyB1bml0ICsgIiwgd2hpY2ggaXMgaW52YWxpZCIpOwoJfQoKCWZ1bmN0aW9uIGRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSB7CgkgIHZhciBkID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGggLSAxLCBkYXkpKTsKCgkgIGlmICh5ZWFyIDwgMTAwICYmIHllYXIgPj0gMCkgewoJICAgIGQuc2V0VVRDRnVsbFllYXIoZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCk7CgkgIH0KCgkgIHZhciBqcyA9IGQuZ2V0VVRDRGF5KCk7CgkgIHJldHVybiBqcyA9PT0gMCA/IDcgOiBqczsKCX0KCglmdW5jdGlvbiBjb21wdXRlT3JkaW5hbCh5ZWFyLCBtb250aCwgZGF5KSB7CgkgIHJldHVybiBkYXkgKyAoaXNMZWFwWWVhcih5ZWFyKSA/IGxlYXBMYWRkZXIgOiBub25MZWFwTGFkZGVyKVttb250aCAtIDFdOwoJfQoKCWZ1bmN0aW9uIHVuY29tcHV0ZU9yZGluYWwoeWVhciwgb3JkaW5hbCkgewoJICB2YXIgdGFibGUgPSBpc0xlYXBZZWFyKHllYXIpID8gbGVhcExhZGRlciA6IG5vbkxlYXBMYWRkZXIsCgkgICAgICBtb250aDAgPSB0YWJsZS5maW5kSW5kZXgoZnVuY3Rpb24gKGkpIHsKCSAgICByZXR1cm4gaSA8IG9yZGluYWw7CgkgIH0pLAoJICAgICAgZGF5ID0gb3JkaW5hbCAtIHRhYmxlW21vbnRoMF07CgkgIHJldHVybiB7CgkgICAgbW9udGg6IG1vbnRoMCArIDEsCgkgICAgZGF5OiBkYXkKCSAgfTsKCX0KCS8qKgoJICogQHByaXZhdGUKCSAqLwoKCglmdW5jdGlvbiBncmVnb3JpYW5Ub1dlZWsoZ3JlZ09iaikgewoJICB2YXIgeWVhciA9IGdyZWdPYmoueWVhciwKCSAgICAgIG1vbnRoID0gZ3JlZ09iai5tb250aCwKCSAgICAgIGRheSA9IGdyZWdPYmouZGF5LAoJICAgICAgb3JkaW5hbCA9IGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpLAoJICAgICAgd2Vla2RheSA9IGRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KTsKCSAgdmFyIHdlZWtOdW1iZXIgPSBNYXRoLmZsb29yKChvcmRpbmFsIC0gd2Vla2RheSArIDEwKSAvIDcpLAoJICAgICAgd2Vla1llYXI7CgoJICBpZiAod2Vla051bWJlciA8IDEpIHsKCSAgICB3ZWVrWWVhciA9IHllYXIgLSAxOwoJICAgIHdlZWtOdW1iZXIgPSB3ZWVrc0luV2Vla1llYXIod2Vla1llYXIpOwoJICB9IGVsc2UgaWYgKHdlZWtOdW1iZXIgPiB3ZWVrc0luV2Vla1llYXIoeWVhcikpIHsKCSAgICB3ZWVrWWVhciA9IHllYXIgKyAxOwoJICAgIHdlZWtOdW1iZXIgPSAxOwoJICB9IGVsc2UgewoJICAgIHdlZWtZZWFyID0geWVhcjsKCSAgfQoKCSAgcmV0dXJuIF9leHRlbmRzKHsKCSAgICB3ZWVrWWVhcjogd2Vla1llYXIsCgkgICAgd2Vla051bWJlcjogd2Vla051bWJlciwKCSAgICB3ZWVrZGF5OiB3ZWVrZGF5CgkgIH0sIHRpbWVPYmplY3QoZ3JlZ09iaikpOwoJfQoJZnVuY3Rpb24gd2Vla1RvR3JlZ29yaWFuKHdlZWtEYXRhKSB7CgkgIHZhciB3ZWVrWWVhciA9IHdlZWtEYXRhLndlZWtZZWFyLAoJICAgICAgd2Vla051bWJlciA9IHdlZWtEYXRhLndlZWtOdW1iZXIsCgkgICAgICB3ZWVrZGF5ID0gd2Vla0RhdGEud2Vla2RheSwKCSAgICAgIHdlZWtkYXlPZkphbjQgPSBkYXlPZldlZWsod2Vla1llYXIsIDEsIDQpLAoJICAgICAgeWVhckluRGF5cyA9IGRheXNJblllYXIod2Vla1llYXIpOwoJICB2YXIgb3JkaW5hbCA9IHdlZWtOdW1iZXIgKiA3ICsgd2Vla2RheSAtIHdlZWtkYXlPZkphbjQgLSAzLAoJICAgICAgeWVhcjsKCgkgIGlmIChvcmRpbmFsIDwgMSkgewoJICAgIHllYXIgPSB3ZWVrWWVhciAtIDE7CgkgICAgb3JkaW5hbCArPSBkYXlzSW5ZZWFyKHllYXIpOwoJICB9IGVsc2UgaWYgKG9yZGluYWwgPiB5ZWFySW5EYXlzKSB7CgkgICAgeWVhciA9IHdlZWtZZWFyICsgMTsKCSAgICBvcmRpbmFsIC09IGRheXNJblllYXIod2Vla1llYXIpOwoJICB9IGVsc2UgewoJICAgIHllYXIgPSB3ZWVrWWVhcjsKCSAgfQoKCSAgdmFyIF91bmNvbXB1dGVPcmRpbmFsID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKSwKCSAgICAgIG1vbnRoID0gX3VuY29tcHV0ZU9yZGluYWwubW9udGgsCgkgICAgICBkYXkgPSBfdW5jb21wdXRlT3JkaW5hbC5kYXk7CgoJICByZXR1cm4gX2V4dGVuZHMoewoJICAgIHllYXI6IHllYXIsCgkgICAgbW9udGg6IG1vbnRoLAoJICAgIGRheTogZGF5CgkgIH0sIHRpbWVPYmplY3Qod2Vla0RhdGEpKTsKCX0KCWZ1bmN0aW9uIGdyZWdvcmlhblRvT3JkaW5hbChncmVnRGF0YSkgewoJICB2YXIgeWVhciA9IGdyZWdEYXRhLnllYXIsCgkgICAgICBtb250aCA9IGdyZWdEYXRhLm1vbnRoLAoJICAgICAgZGF5ID0gZ3JlZ0RhdGEuZGF5OwoJICB2YXIgb3JkaW5hbCA9IGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpOwoJICByZXR1cm4gX2V4dGVuZHMoewoJICAgIHllYXI6IHllYXIsCgkgICAgb3JkaW5hbDogb3JkaW5hbAoJICB9LCB0aW1lT2JqZWN0KGdyZWdEYXRhKSk7Cgl9CglmdW5jdGlvbiBvcmRpbmFsVG9HcmVnb3JpYW4ob3JkaW5hbERhdGEpIHsKCSAgdmFyIHllYXIgPSBvcmRpbmFsRGF0YS55ZWFyLAoJICAgICAgb3JkaW5hbCA9IG9yZGluYWxEYXRhLm9yZGluYWw7CgoJICB2YXIgX3VuY29tcHV0ZU9yZGluYWwyID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKSwKCSAgICAgIG1vbnRoID0gX3VuY29tcHV0ZU9yZGluYWwyLm1vbnRoLAoJICAgICAgZGF5ID0gX3VuY29tcHV0ZU9yZGluYWwyLmRheTsKCgkgIHJldHVybiBfZXh0ZW5kcyh7CgkgICAgeWVhcjogeWVhciwKCSAgICBtb250aDogbW9udGgsCgkgICAgZGF5OiBkYXkKCSAgfSwgdGltZU9iamVjdChvcmRpbmFsRGF0YSkpOwoJfQoJZnVuY3Rpb24gaGFzSW52YWxpZFdlZWtEYXRhKG9iaikgewoJICB2YXIgdmFsaWRZZWFyID0gaXNJbnRlZ2VyKG9iai53ZWVrWWVhciksCgkgICAgICB2YWxpZFdlZWsgPSBpbnRlZ2VyQmV0d2VlbihvYmoud2Vla051bWJlciwgMSwgd2Vla3NJbldlZWtZZWFyKG9iai53ZWVrWWVhcikpLAoJICAgICAgdmFsaWRXZWVrZGF5ID0gaW50ZWdlckJldHdlZW4ob2JqLndlZWtkYXksIDEsIDcpOwoKCSAgaWYgKCF2YWxpZFllYXIpIHsKCSAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoIndlZWtZZWFyIiwgb2JqLndlZWtZZWFyKTsKCSAgfSBlbHNlIGlmICghdmFsaWRXZWVrKSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJ3ZWVrIiwgb2JqLndlZWspOwoJICB9IGVsc2UgaWYgKCF2YWxpZFdlZWtkYXkpIHsKCSAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoIndlZWtkYXkiLCBvYmoud2Vla2RheSk7CgkgIH0gZWxzZSByZXR1cm4gZmFsc2U7Cgl9CglmdW5jdGlvbiBoYXNJbnZhbGlkT3JkaW5hbERhdGEob2JqKSB7CgkgIHZhciB2YWxpZFllYXIgPSBpc0ludGVnZXIob2JqLnllYXIpLAoJICAgICAgdmFsaWRPcmRpbmFsID0gaW50ZWdlckJldHdlZW4ob2JqLm9yZGluYWwsIDEsIGRheXNJblllYXIob2JqLnllYXIpKTsKCgkgIGlmICghdmFsaWRZZWFyKSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJ5ZWFyIiwgb2JqLnllYXIpOwoJICB9IGVsc2UgaWYgKCF2YWxpZE9yZGluYWwpIHsKCSAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoIm9yZGluYWwiLCBvYmoub3JkaW5hbCk7CgkgIH0gZWxzZSByZXR1cm4gZmFsc2U7Cgl9CglmdW5jdGlvbiBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShvYmopIHsKCSAgdmFyIHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoueWVhciksCgkgICAgICB2YWxpZE1vbnRoID0gaW50ZWdlckJldHdlZW4ob2JqLm1vbnRoLCAxLCAxMiksCgkgICAgICB2YWxpZERheSA9IGludGVnZXJCZXR3ZWVuKG9iai5kYXksIDEsIGRheXNJbk1vbnRoKG9iai55ZWFyLCBvYmoubW9udGgpKTsKCgkgIGlmICghdmFsaWRZZWFyKSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJ5ZWFyIiwgb2JqLnllYXIpOwoJICB9IGVsc2UgaWYgKCF2YWxpZE1vbnRoKSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJtb250aCIsIG9iai5tb250aCk7CgkgIH0gZWxzZSBpZiAoIXZhbGlkRGF5KSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJkYXkiLCBvYmouZGF5KTsKCSAgfSBlbHNlIHJldHVybiBmYWxzZTsKCX0KCWZ1bmN0aW9uIGhhc0ludmFsaWRUaW1lRGF0YShvYmopIHsKCSAgdmFyIGhvdXIgPSBvYmouaG91ciwKCSAgICAgIG1pbnV0ZSA9IG9iai5taW51dGUsCgkgICAgICBzZWNvbmQgPSBvYmouc2Vjb25kLAoJICAgICAgbWlsbGlzZWNvbmQgPSBvYmoubWlsbGlzZWNvbmQ7CgkgIHZhciB2YWxpZEhvdXIgPSBpbnRlZ2VyQmV0d2Vlbihob3VyLCAwLCAyMykgfHwgaG91ciA9PT0gMjQgJiYgbWludXRlID09PSAwICYmIHNlY29uZCA9PT0gMCAmJiBtaWxsaXNlY29uZCA9PT0gMCwKCSAgICAgIHZhbGlkTWludXRlID0gaW50ZWdlckJldHdlZW4obWludXRlLCAwLCA1OSksCgkgICAgICB2YWxpZFNlY29uZCA9IGludGVnZXJCZXR3ZWVuKHNlY29uZCwgMCwgNTkpLAoJICAgICAgdmFsaWRNaWxsaXNlY29uZCA9IGludGVnZXJCZXR3ZWVuKG1pbGxpc2Vjb25kLCAwLCA5OTkpOwoKCSAgaWYgKCF2YWxpZEhvdXIpIHsKCSAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoImhvdXIiLCBob3VyKTsKCSAgfSBlbHNlIGlmICghdmFsaWRNaW51dGUpIHsKCSAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoIm1pbnV0ZSIsIG1pbnV0ZSk7CgkgIH0gZWxzZSBpZiAoIXZhbGlkU2Vjb25kKSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJzZWNvbmQiLCBzZWNvbmQpOwoJICB9IGVsc2UgaWYgKCF2YWxpZE1pbGxpc2Vjb25kKSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJtaWxsaXNlY29uZCIsIG1pbGxpc2Vjb25kKTsKCSAgfSBlbHNlIHJldHVybiBmYWxzZTsKCX0KCgl2YXIgSU5WQUxJRCA9ICJJbnZhbGlkIERhdGVUaW1lIjsKCXZhciBNQVhfREFURSA9IDguNjRlMTU7CgoJZnVuY3Rpb24gdW5zdXBwb3J0ZWRab25lKHpvbmUpIHsKCSAgcmV0dXJuIG5ldyBJbnZhbGlkKCJ1bnN1cHBvcnRlZCB6b25lIiwgInRoZSB6b25lIFwiIiArIHpvbmUubmFtZSArICJcIiBpcyBub3Qgc3VwcG9ydGVkIik7Cgl9IC8vIHdlIGNhY2hlIHdlZWsgZGF0YSBvbiB0aGUgRFQgb2JqZWN0IGFuZCB0aGlzIGludGVybWVkaWF0ZXMgdGhlIGNhY2hlCgoKCWZ1bmN0aW9uIHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEoZHQpIHsKCSAgaWYgKGR0LndlZWtEYXRhID09PSBudWxsKSB7CgkgICAgZHQud2Vla0RhdGEgPSBncmVnb3JpYW5Ub1dlZWsoZHQuYyk7CgkgIH0KCgkgIHJldHVybiBkdC53ZWVrRGF0YTsKCX0gLy8gY2xvbmUgcmVhbGx5IG1lYW5zLCAibWFrZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGVzZSBtb2RpZmljYXRpb25zIi4gYWxsICJzZXR0ZXJzIiByZWFsbHkgdXNlIHRoaXMKCS8vIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3Qgd2hpbGUgb25seSBjaGFuZ2luZyBzb21lIG9mIHRoZSBwcm9wZXJ0aWVzCgoKCWZ1bmN0aW9uIGNsb25lKGluc3QsIGFsdHMpIHsKCSAgdmFyIGN1cnJlbnQgPSB7CgkgICAgdHM6IGluc3QudHMsCgkgICAgem9uZTogaW5zdC56b25lLAoJICAgIGM6IGluc3QuYywKCSAgICBvOiBpbnN0Lm8sCgkgICAgbG9jOiBpbnN0LmxvYywKCSAgICBpbnZhbGlkOiBpbnN0LmludmFsaWQKCSAgfTsKCSAgcmV0dXJuIG5ldyBEYXRlVGltZShfZXh0ZW5kcyh7fSwgY3VycmVudCwgYWx0cywgewoJICAgIG9sZDogY3VycmVudAoJICB9KSk7Cgl9IC8vIGZpbmQgdGhlIHJpZ2h0IG9mZnNldCBhIGdpdmVuIGxvY2FsIHRpbWUuIFRoZSBvIGlucHV0IGlzIG91ciBndWVzcywgd2hpY2ggZGV0ZXJtaW5lcyB3aGljaAoJLy8gb2Zmc2V0IHdlJ2xsIHBpY2sgaW4gYW1iaWd1b3VzIGNhc2VzIChlLmcuIHRoZXJlIGFyZSB0d28gMyBBTXMgYi9jIEZhbGxiYWNrIERTVCkKCgoJZnVuY3Rpb24gZml4T2Zmc2V0KGxvY2FsVFMsIG8sIHR6KSB7CgkgIC8vIE91ciBVVEMgdGltZSBpcyBqdXN0IGEgZ3Vlc3MgYmVjYXVzZSBvdXIgb2Zmc2V0IGlzIGp1c3QgYSBndWVzcwoJICB2YXIgdXRjR3Vlc3MgPSBsb2NhbFRTIC0gbyAqIDYwICogMTAwMDsgLy8gVGVzdCB3aGV0aGVyIHRoZSB6b25lIG1hdGNoZXMgdGhlIG9mZnNldCBmb3IgdGhpcyB0cwoKCSAgdmFyIG8yID0gdHoub2Zmc2V0KHV0Y0d1ZXNzKTsgLy8gSWYgc28sIG9mZnNldCBkaWRuJ3QgY2hhbmdlIGFuZCB3ZSdyZSBkb25lCgoJICBpZiAobyA9PT0gbzIpIHsKCSAgICByZXR1cm4gW3V0Y0d1ZXNzLCBvXTsKCSAgfSAvLyBJZiBub3QsIGNoYW5nZSB0aGUgdHMgYnkgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIG9mZnNldAoKCgkgIHV0Y0d1ZXNzIC09IChvMiAtIG8pICogNjAgKiAxMDAwOyAvLyBJZiB0aGF0IGdpdmVzIHVzIHRoZSBsb2NhbCB0aW1lIHdlIHdhbnQsIHdlJ3JlIGRvbmUKCgkgIHZhciBvMyA9IHR6Lm9mZnNldCh1dGNHdWVzcyk7CgoJICBpZiAobzIgPT09IG8zKSB7CgkgICAgcmV0dXJuIFt1dGNHdWVzcywgbzJdOwoJICB9IC8vIElmIGl0J3MgZGlmZmVyZW50LCB3ZSdyZSBpbiBhIGhvbGUgdGltZS4gVGhlIG9mZnNldCBoYXMgY2hhbmdlZCwgYnV0IHRoZSB3ZSBkb24ndCBhZGp1c3QgdGhlIHRpbWUKCgoJICByZXR1cm4gW2xvY2FsVFMgLSBNYXRoLm1pbihvMiwgbzMpICogNjAgKiAxMDAwLCBNYXRoLm1heChvMiwgbzMpXTsKCX0gLy8gY29udmVydCBhbiBlcG9jaCB0aW1lc3RhbXAgaW50byBhIGNhbGVuZGFyIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBvZmZzZXQKCgoJZnVuY3Rpb24gdHNUb09iaih0cywgb2Zmc2V0KSB7CgkgIHRzICs9IG9mZnNldCAqIDYwICogMTAwMDsKCSAgdmFyIGQgPSBuZXcgRGF0ZSh0cyk7CgkgIHJldHVybiB7CgkgICAgeWVhcjogZC5nZXRVVENGdWxsWWVhcigpLAoJICAgIG1vbnRoOiBkLmdldFVUQ01vbnRoKCkgKyAxLAoJICAgIGRheTogZC5nZXRVVENEYXRlKCksCgkgICAgaG91cjogZC5nZXRVVENIb3VycygpLAoJICAgIG1pbnV0ZTogZC5nZXRVVENNaW51dGVzKCksCgkgICAgc2Vjb25kOiBkLmdldFVUQ1NlY29uZHMoKSwKCSAgICBtaWxsaXNlY29uZDogZC5nZXRVVENNaWxsaXNlY29uZHMoKQoJICB9OwoJfSAvLyBjb252ZXJ0IGEgY2FsZW5kYXIgb2JqZWN0IHRvIGEgZXBvY2ggdGltZXN0YW1wCgoKCWZ1bmN0aW9uIG9ialRvVFMob2JqLCBvZmZzZXQsIHpvbmUpIHsKCSAgcmV0dXJuIGZpeE9mZnNldChvYmpUb0xvY2FsVFMob2JqKSwgb2Zmc2V0LCB6b25lKTsKCX0gLy8gY3JlYXRlIGEgbmV3IERUIGluc3RhbmNlIGJ5IGFkZGluZyBhIGR1cmF0aW9uLCBhZGp1c3RpbmcgZm9yIERTVHMKCgoJZnVuY3Rpb24gYWRqdXN0VGltZShpbnN0LCBkdXIpIHsKCSAgdmFyIG9QcmUgPSBpbnN0Lm8sCgkgICAgICB5ZWFyID0gaW5zdC5jLnllYXIgKyBNYXRoLnRydW5jKGR1ci55ZWFycyksCgkgICAgICBtb250aCA9IGluc3QuYy5tb250aCArIE1hdGgudHJ1bmMoZHVyLm1vbnRocykgKyBNYXRoLnRydW5jKGR1ci5xdWFydGVycykgKiAzLAoJICAgICAgYyA9IF9leHRlbmRzKHt9LCBpbnN0LmMsIHsKCSAgICB5ZWFyOiB5ZWFyLAoJICAgIG1vbnRoOiBtb250aCwKCSAgICBkYXk6IE1hdGgubWluKGluc3QuYy5kYXksIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSkgKyBNYXRoLnRydW5jKGR1ci5kYXlzKSArIE1hdGgudHJ1bmMoZHVyLndlZWtzKSAqIDcKCSAgfSksCgkgICAgICBtaWxsaXNUb0FkZCA9IER1cmF0aW9uLmZyb21PYmplY3QoewoJICAgIHllYXJzOiBkdXIueWVhcnMgLSBNYXRoLnRydW5jKGR1ci55ZWFycyksCgkgICAgcXVhcnRlcnM6IGR1ci5xdWFydGVycyAtIE1hdGgudHJ1bmMoZHVyLnF1YXJ0ZXJzKSwKCSAgICBtb250aHM6IGR1ci5tb250aHMgLSBNYXRoLnRydW5jKGR1ci5tb250aHMpLAoJICAgIHdlZWtzOiBkdXIud2Vla3MgLSBNYXRoLnRydW5jKGR1ci53ZWVrcyksCgkgICAgZGF5czogZHVyLmRheXMgLSBNYXRoLnRydW5jKGR1ci5kYXlzKSwKCSAgICBob3VyczogZHVyLmhvdXJzLAoJICAgIG1pbnV0ZXM6IGR1ci5taW51dGVzLAoJICAgIHNlY29uZHM6IGR1ci5zZWNvbmRzLAoJICAgIG1pbGxpc2Vjb25kczogZHVyLm1pbGxpc2Vjb25kcwoJICB9KS5hcygibWlsbGlzZWNvbmRzIiksCgkgICAgICBsb2NhbFRTID0gb2JqVG9Mb2NhbFRTKGMpOwoKCSAgdmFyIF9maXhPZmZzZXQgPSBmaXhPZmZzZXQobG9jYWxUUywgb1ByZSwgaW5zdC56b25lKSwKCSAgICAgIHRzID0gX2ZpeE9mZnNldFswXSwKCSAgICAgIG8gPSBfZml4T2Zmc2V0WzFdOwoKCSAgaWYgKG1pbGxpc1RvQWRkICE9PSAwKSB7CgkgICAgdHMgKz0gbWlsbGlzVG9BZGQ7IC8vIHRoYXQgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBvZmZzZXQgYnkgZ29pbmcgb3ZlciBhIERTVCwgYnV0IHdlIHdhbnQgdG8ga2VlcCB0aGUgdHMgdGhlIHNhbWUKCgkgICAgbyA9IGluc3Quem9uZS5vZmZzZXQodHMpOwoJICB9CgoJICByZXR1cm4gewoJICAgIHRzOiB0cywKCSAgICBvOiBvCgkgIH07Cgl9IC8vIGhlbHBlciB1c2VmdWwgaW4gdHVybmluZyB0aGUgcmVzdWx0cyBvZiBwYXJzaW5nIGludG8gcmVhbCBkYXRlcwoJLy8gYnkgaGFuZGxpbmcgdGhlIHpvbmUgb3B0aW9ucwoKCglmdW5jdGlvbiBwYXJzZURhdGFUb0RhdGVUaW1lKHBhcnNlZCwgcGFyc2VkWm9uZSwgb3B0cywgZm9ybWF0LCB0ZXh0LCBzcGVjaWZpY09mZnNldCkgewoJICB2YXIgc2V0Wm9uZSA9IG9wdHMuc2V0Wm9uZSwKCSAgICAgIHpvbmUgPSBvcHRzLnpvbmU7CgoJICBpZiAocGFyc2VkICYmIE9iamVjdC5rZXlzKHBhcnNlZCkubGVuZ3RoICE9PSAwKSB7CgkgICAgdmFyIGludGVycHJldGF0aW9uWm9uZSA9IHBhcnNlZFpvbmUgfHwgem9uZSwKCSAgICAgICAgaW5zdCA9IERhdGVUaW1lLmZyb21PYmplY3QocGFyc2VkLCBfZXh0ZW5kcyh7fSwgb3B0cywgewoJICAgICAgem9uZTogaW50ZXJwcmV0YXRpb25ab25lLAoJICAgICAgc3BlY2lmaWNPZmZzZXQ6IHNwZWNpZmljT2Zmc2V0CgkgICAgfSkpOwoJICAgIHJldHVybiBzZXRab25lID8gaW5zdCA6IGluc3Quc2V0Wm9uZSh6b25lKTsKCSAgfSBlbHNlIHsKCSAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChuZXcgSW52YWxpZCgidW5wYXJzYWJsZSIsICJ0aGUgaW5wdXQgXCIiICsgdGV4dCArICJcIiBjYW4ndCBiZSBwYXJzZWQgYXMgIiArIGZvcm1hdCkpOwoJICB9Cgl9IC8vIGlmIHlvdSB3YW50IHRvIG91dHB1dCBhIHRlY2huaWNhbCBmb3JtYXQgKGUuZy4gUkZDIDI4MjIpLCB0aGlzIGhlbHBlcgoJLy8gaGVscHMgaGFuZGxlIHRoZSBkZXRhaWxzCgoKCWZ1bmN0aW9uIHRvVGVjaEZvcm1hdChkdCwgZm9ybWF0LCBhbGxvd1opIHsKCSAgaWYgKGFsbG93WiA9PT0gdm9pZCAwKSB7CgkgICAgYWxsb3daID0gdHJ1ZTsKCSAgfQoKCSAgcmV0dXJuIGR0LmlzVmFsaWQgPyBGb3JtYXR0ZXIuY3JlYXRlKExvY2FsZS5jcmVhdGUoImVuLVVTIiksIHsKCSAgICBhbGxvd1o6IGFsbG93WiwKCSAgICBmb3JjZVNpbXBsZTogdHJ1ZQoJICB9KS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcoZHQsIGZvcm1hdCkgOiBudWxsOwoJfQoKCWZ1bmN0aW9uIF90b0lTT0RhdGUobywgZXh0ZW5kZWQpIHsKCSAgdmFyIGxvbmdGb3JtYXQgPSBvLmMueWVhciA+IDk5OTkgfHwgby5jLnllYXIgPCAwOwoJICB2YXIgYyA9ICIiOwoJICBpZiAobG9uZ0Zvcm1hdCAmJiBvLmMueWVhciA+PSAwKSBjICs9ICIrIjsKCSAgYyArPSBwYWRTdGFydChvLmMueWVhciwgbG9uZ0Zvcm1hdCA/IDYgOiA0KTsKCgkgIGlmIChleHRlbmRlZCkgewoJICAgIGMgKz0gIi0iOwoJICAgIGMgKz0gcGFkU3RhcnQoby5jLm1vbnRoKTsKCSAgICBjICs9ICItIjsKCSAgICBjICs9IHBhZFN0YXJ0KG8uYy5kYXkpOwoJICB9IGVsc2UgewoJICAgIGMgKz0gcGFkU3RhcnQoby5jLm1vbnRoKTsKCSAgICBjICs9IHBhZFN0YXJ0KG8uYy5kYXkpOwoJICB9CgoJICByZXR1cm4gYzsKCX0KCglmdW5jdGlvbiBfdG9JU09UaW1lKG8sIGV4dGVuZGVkLCBzdXBwcmVzc1NlY29uZHMsIHN1cHByZXNzTWlsbGlzZWNvbmRzLCBpbmNsdWRlT2Zmc2V0LCBleHRlbmRlZFpvbmUpIHsKCSAgdmFyIGMgPSBwYWRTdGFydChvLmMuaG91cik7CgoJICBpZiAoZXh0ZW5kZWQpIHsKCSAgICBjICs9ICI6IjsKCSAgICBjICs9IHBhZFN0YXJ0KG8uYy5taW51dGUpOwoKCSAgICBpZiAoby5jLnNlY29uZCAhPT0gMCB8fCAhc3VwcHJlc3NTZWNvbmRzKSB7CgkgICAgICBjICs9ICI6IjsKCSAgICB9CgkgIH0gZWxzZSB7CgkgICAgYyArPSBwYWRTdGFydChvLmMubWludXRlKTsKCSAgfQoKCSAgaWYgKG8uYy5zZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzU2Vjb25kcykgewoJICAgIGMgKz0gcGFkU3RhcnQoby5jLnNlY29uZCk7CgoJICAgIGlmIChvLmMubWlsbGlzZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzTWlsbGlzZWNvbmRzKSB7CgkgICAgICBjICs9ICIuIjsKCSAgICAgIGMgKz0gcGFkU3RhcnQoby5jLm1pbGxpc2Vjb25kLCAzKTsKCSAgICB9CgkgIH0KCgkgIGlmIChpbmNsdWRlT2Zmc2V0KSB7CgkgICAgaWYgKG8uaXNPZmZzZXRGaXhlZCAmJiBvLm9mZnNldCA9PT0gMCAmJiAhZXh0ZW5kZWRab25lKSB7CgkgICAgICBjICs9ICJaIjsKCSAgICB9IGVsc2UgaWYgKG8ubyA8IDApIHsKCSAgICAgIGMgKz0gIi0iOwoJICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKC1vLm8gLyA2MCkpOwoJICAgICAgYyArPSAiOiI7CgkgICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoLW8ubyAlIDYwKSk7CgkgICAgfSBlbHNlIHsKCSAgICAgIGMgKz0gIisiOwoJICAgICAgYyArPSBwYWRTdGFydChNYXRoLnRydW5jKG8ubyAvIDYwKSk7CgkgICAgICBjICs9ICI6IjsKCSAgICAgIGMgKz0gcGFkU3RhcnQoTWF0aC50cnVuYyhvLm8gJSA2MCkpOwoJICAgIH0KCSAgfQoKCSAgaWYgKGV4dGVuZGVkWm9uZSkgewoJICAgIGMgKz0gIlsiICsgby56b25lLmlhbmFOYW1lICsgIl0iOwoJICB9CgoJICByZXR1cm4gYzsKCX0gLy8gZGVmYXVsdHMgZm9yIHVuc3BlY2lmaWVkIHVuaXRzIGluIHRoZSBzdXBwb3J0ZWQgY2FsZW5kYXJzCgoKCXZhciBkZWZhdWx0VW5pdFZhbHVlcyA9IHsKCSAgbW9udGg6IDEsCgkgIGRheTogMSwKCSAgaG91cjogMCwKCSAgbWludXRlOiAwLAoJICBzZWNvbmQ6IDAsCgkgIG1pbGxpc2Vjb25kOiAwCgl9LAoJICAgIGRlZmF1bHRXZWVrVW5pdFZhbHVlcyA9IHsKCSAgd2Vla051bWJlcjogMSwKCSAgd2Vla2RheTogMSwKCSAgaG91cjogMCwKCSAgbWludXRlOiAwLAoJICBzZWNvbmQ6IDAsCgkgIG1pbGxpc2Vjb25kOiAwCgl9LAoJICAgIGRlZmF1bHRPcmRpbmFsVW5pdFZhbHVlcyA9IHsKCSAgb3JkaW5hbDogMSwKCSAgaG91cjogMCwKCSAgbWludXRlOiAwLAoJICBzZWNvbmQ6IDAsCgkgIG1pbGxpc2Vjb25kOiAwCgl9OyAvLyBVbml0cyBpbiB0aGUgc3VwcG9ydGVkIGNhbGVuZGFycywgc29ydGVkIGJ5IGJpZ25lc3MKCgl2YXIgb3JkZXJlZFVuaXRzID0gWyJ5ZWFyIiwgIm1vbnRoIiwgImRheSIsICJob3VyIiwgIm1pbnV0ZSIsICJzZWNvbmQiLCAibWlsbGlzZWNvbmQiXSwKCSAgICBvcmRlcmVkV2Vla1VuaXRzID0gWyJ3ZWVrWWVhciIsICJ3ZWVrTnVtYmVyIiwgIndlZWtkYXkiLCAiaG91ciIsICJtaW51dGUiLCAic2Vjb25kIiwgIm1pbGxpc2Vjb25kIl0sCgkgICAgb3JkZXJlZE9yZGluYWxVbml0cyA9IFsieWVhciIsICJvcmRpbmFsIiwgImhvdXIiLCAibWludXRlIiwgInNlY29uZCIsICJtaWxsaXNlY29uZCJdOyAvLyBzdGFuZGFyZGl6ZSBjYXNlIGFuZCBwbHVyYWxpdHkgaW4gdW5pdHMKCglmdW5jdGlvbiBub3JtYWxpemVVbml0KHVuaXQpIHsKCSAgdmFyIG5vcm1hbGl6ZWQgPSB7CgkgICAgeWVhcjogInllYXIiLAoJICAgIHllYXJzOiAieWVhciIsCgkgICAgbW9udGg6ICJtb250aCIsCgkgICAgbW9udGhzOiAibW9udGgiLAoJICAgIGRheTogImRheSIsCgkgICAgZGF5czogImRheSIsCgkgICAgaG91cjogImhvdXIiLAoJICAgIGhvdXJzOiAiaG91ciIsCgkgICAgbWludXRlOiAibWludXRlIiwKCSAgICBtaW51dGVzOiAibWludXRlIiwKCSAgICBxdWFydGVyOiAicXVhcnRlciIsCgkgICAgcXVhcnRlcnM6ICJxdWFydGVyIiwKCSAgICBzZWNvbmQ6ICJzZWNvbmQiLAoJICAgIHNlY29uZHM6ICJzZWNvbmQiLAoJICAgIG1pbGxpc2Vjb25kOiAibWlsbGlzZWNvbmQiLAoJICAgIG1pbGxpc2Vjb25kczogIm1pbGxpc2Vjb25kIiwKCSAgICB3ZWVrZGF5OiAid2Vla2RheSIsCgkgICAgd2Vla2RheXM6ICJ3ZWVrZGF5IiwKCSAgICB3ZWVrbnVtYmVyOiAid2Vla051bWJlciIsCgkgICAgd2Vla3NudW1iZXI6ICJ3ZWVrTnVtYmVyIiwKCSAgICB3ZWVrbnVtYmVyczogIndlZWtOdW1iZXIiLAoJICAgIHdlZWt5ZWFyOiAid2Vla1llYXIiLAoJICAgIHdlZWt5ZWFyczogIndlZWtZZWFyIiwKCSAgICBvcmRpbmFsOiAib3JkaW5hbCIKCSAgfVt1bml0LnRvTG93ZXJDYXNlKCldOwoJICBpZiAoIW5vcm1hbGl6ZWQpIHRocm93IG5ldyBJbnZhbGlkVW5pdEVycm9yKHVuaXQpOwoJICByZXR1cm4gbm9ybWFsaXplZDsKCX0gLy8gdGhpcyBpcyBhIGR1bWJlZCBkb3duIHZlcnNpb24gb2YgZnJvbU9iamVjdCgpIHRoYXQgcnVucyBhYm91dCA2MCUgZmFzdGVyCgkvLyBidXQgZG9lc24ndCBkbyBhbnkgdmFsaWRhdGlvbiwgbWFrZXMgYSBidW5jaCBvZiBhc3N1bXB0aW9ucyBhYm91dCB3aGF0IHVuaXRzCgkvLyBhcmUgcHJlc2VudCwgYW5kIHNvIG9uLgoKCglmdW5jdGlvbiBxdWlja0RUKG9iaiwgb3B0cykgewoJICB2YXIgem9uZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksCgkgICAgICBsb2MgPSBMb2NhbGUuZnJvbU9iamVjdChvcHRzKSwKCSAgICAgIHRzTm93ID0gU2V0dGluZ3Mubm93KCk7CgkgIHZhciB0cywgbzsgLy8gYXNzdW1lIHdlIGhhdmUgdGhlIGhpZ2hlci1vcmRlciB1bml0cwoKCSAgaWYgKCFpc1VuZGVmaW5lZChvYmoueWVhcikpIHsKCSAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKG9yZGVyZWRVbml0cyksIF9zdGVwOyAhKF9zdGVwID0gX2l0ZXJhdG9yKCkpLmRvbmU7KSB7CgkgICAgICB2YXIgdSA9IF9zdGVwLnZhbHVlOwoKCSAgICAgIGlmIChpc1VuZGVmaW5lZChvYmpbdV0pKSB7CgkgICAgICAgIG9ialt1XSA9IGRlZmF1bHRVbml0VmFsdWVzW3VdOwoJICAgICAgfQoJICAgIH0KCgkgICAgdmFyIGludmFsaWQgPSBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShvYmopIHx8IGhhc0ludmFsaWRUaW1lRGF0YShvYmopOwoKCSAgICBpZiAoaW52YWxpZCkgewoJICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoaW52YWxpZCk7CgkgICAgfQoKCSAgICB2YXIgb2Zmc2V0UHJvdmlzID0gem9uZS5vZmZzZXQodHNOb3cpOwoKCSAgICB2YXIgX29ialRvVFMgPSBvYmpUb1RTKG9iaiwgb2Zmc2V0UHJvdmlzLCB6b25lKTsKCgkgICAgdHMgPSBfb2JqVG9UU1swXTsKCSAgICBvID0gX29ialRvVFNbMV07CgkgIH0gZWxzZSB7CgkgICAgdHMgPSB0c05vdzsKCSAgfQoKCSAgcmV0dXJuIG5ldyBEYXRlVGltZSh7CgkgICAgdHM6IHRzLAoJICAgIHpvbmU6IHpvbmUsCgkgICAgbG9jOiBsb2MsCgkgICAgbzogbwoJICB9KTsKCX0KCglmdW5jdGlvbiBkaWZmUmVsYXRpdmUoc3RhcnQsIGVuZCwgb3B0cykgewoJICB2YXIgcm91bmQgPSBpc1VuZGVmaW5lZChvcHRzLnJvdW5kKSA/IHRydWUgOiBvcHRzLnJvdW5kLAoJICAgICAgZm9ybWF0ID0gZnVuY3Rpb24gZm9ybWF0KGMsIHVuaXQpIHsKCSAgICBjID0gcm91bmRUbyhjLCByb3VuZCB8fCBvcHRzLmNhbGVuZGFyeSA/IDAgOiAyLCB0cnVlKTsKCSAgICB2YXIgZm9ybWF0dGVyID0gZW5kLmxvYy5jbG9uZShvcHRzKS5yZWxGb3JtYXR0ZXIob3B0cyk7CgkgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQoYywgdW5pdCk7CgkgIH0sCgkgICAgICBkaWZmZXIgPSBmdW5jdGlvbiBkaWZmZXIodW5pdCkgewoJICAgIGlmIChvcHRzLmNhbGVuZGFyeSkgewoJICAgICAgaWYgKCFlbmQuaGFzU2FtZShzdGFydCwgdW5pdCkpIHsKCSAgICAgICAgcmV0dXJuIGVuZC5zdGFydE9mKHVuaXQpLmRpZmYoc3RhcnQuc3RhcnRPZih1bml0KSwgdW5pdCkuZ2V0KHVuaXQpOwoJICAgICAgfSBlbHNlIHJldHVybiAwOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gZW5kLmRpZmYoc3RhcnQsIHVuaXQpLmdldCh1bml0KTsKCSAgICB9CgkgIH07CgoJICBpZiAob3B0cy51bml0KSB7CgkgICAgcmV0dXJuIGZvcm1hdChkaWZmZXIob3B0cy51bml0KSwgb3B0cy51bml0KTsKCSAgfQoKCSAgZm9yICh2YXIgX2l0ZXJhdG9yMiA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2Uob3B0cy51bml0cyksIF9zdGVwMjsgIShfc3RlcDIgPSBfaXRlcmF0b3IyKCkpLmRvbmU7KSB7CgkgICAgdmFyIHVuaXQgPSBfc3RlcDIudmFsdWU7CgkgICAgdmFyIGNvdW50ID0gZGlmZmVyKHVuaXQpOwoKCSAgICBpZiAoTWF0aC5hYnMoY291bnQpID49IDEpIHsKCSAgICAgIHJldHVybiBmb3JtYXQoY291bnQsIHVuaXQpOwoJICAgIH0KCSAgfQoKCSAgcmV0dXJuIGZvcm1hdChzdGFydCA+IGVuZCA/IC0wIDogMCwgb3B0cy51bml0c1tvcHRzLnVuaXRzLmxlbmd0aCAtIDFdKTsKCX0KCglmdW5jdGlvbiBsYXN0T3B0cyhhcmdMaXN0KSB7CgkgIHZhciBvcHRzID0ge30sCgkgICAgICBhcmdzOwoKCSAgaWYgKGFyZ0xpc3QubGVuZ3RoID4gMCAmJiB0eXBlb2YgYXJnTGlzdFthcmdMaXN0Lmxlbmd0aCAtIDFdID09PSAib2JqZWN0IikgewoJICAgIG9wdHMgPSBhcmdMaXN0W2FyZ0xpc3QubGVuZ3RoIC0gMV07CgkgICAgYXJncyA9IEFycmF5LmZyb20oYXJnTGlzdCkuc2xpY2UoMCwgYXJnTGlzdC5sZW5ndGggLSAxKTsKCSAgfSBlbHNlIHsKCSAgICBhcmdzID0gQXJyYXkuZnJvbShhcmdMaXN0KTsKCSAgfQoKCSAgcmV0dXJuIFtvcHRzLCBhcmdzXTsKCX0KCS8qKgoJICogQSBEYXRlVGltZSBpcyBhbiBpbW11dGFibGUgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgc3BlY2lmaWMgZGF0ZSBhbmQgdGltZSBhbmQgYWNjb21wYW55aW5nIG1ldGhvZHMuIEl0IGNvbnRhaW5zIGNsYXNzIGFuZCBpbnN0YW5jZSBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLgoJICoKCSAqIEEgRGF0ZVRpbWUgY29tcHJpc2VzIG9mOgoJICogKiBBIHRpbWVzdGFtcC4gRWFjaCBEYXRlVGltZSBpbnN0YW5jZSByZWZlcnMgdG8gYSBzcGVjaWZpYyBtaWxsaXNlY29uZCBvZiB0aGUgVW5peCBlcG9jaC4KCSAqICogQSB0aW1lIHpvbmUuIEVhY2ggaW5zdGFuY2UgaXMgY29uc2lkZXJlZCBpbiB0aGUgY29udGV4dCBvZiBhIHNwZWNpZmljIHpvbmUgKGJ5IGRlZmF1bHQgdGhlIGxvY2FsIHN5c3RlbSdzIHpvbmUpLgoJICogKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgdGhhdCBlZmZlY3QgaG93IG91dHB1dCBzdHJpbmdzIGFyZSBmb3JtYXR0ZWQsIHN1Y2ggYXMgYGxvY2FsZWAsIGBudW1iZXJpbmdTeXN0ZW1gLCBhbmQgYG91dHB1dENhbGVuZGFyYC4KCSAqCgkgKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBmdW5jdGlvbmFsaXR5IGl0IHByb3ZpZGVzOgoJICoKCSAqICogKipDcmVhdGlvbioqOiBUbyBjcmVhdGUgYSBEYXRlVGltZSBmcm9tIGl0cyBjb21wb25lbnRzLCB1c2Ugb25lIG9mIGl0cyBmYWN0b3J5IGNsYXNzIG1ldGhvZHM6IHtAbGluayBEYXRlVGltZSNsb2NhbH0sIHtAbGluayBEYXRlVGltZSN1dGN9LCBhbmQgKG1vc3QgZmxleGlibHkpIHtAbGluayBEYXRlVGltZSNmcm9tT2JqZWN0fS4gVG8gY3JlYXRlIG9uZSBmcm9tIGEgc3RhbmRhcmQgc3RyaW5nIGZvcm1hdCwgdXNlIHtAbGluayBEYXRlVGltZSNmcm9tSVNPfSwge0BsaW5rIERhdGVUaW1lI2Zyb21IVFRQfSwgYW5kIHtAbGluayBEYXRlVGltZSNmcm9tUkZDMjgyMn0uIFRvIGNyZWF0ZSBvbmUgZnJvbSBhIGN1c3RvbSBzdHJpbmcgZm9ybWF0LCB1c2Uge0BsaW5rIERhdGVUaW1lI2Zyb21Gb3JtYXR9LiBUbyBjcmVhdGUgb25lIGZyb20gYSBuYXRpdmUgSlMgZGF0ZSwgdXNlIHtAbGluayBEYXRlVGltZSNmcm9tSlNEYXRlfS4KCSAqICogKipHcmVnb3JpYW4gY2FsZW5kYXIgYW5kIHRpbWUqKjogVG8gZXhhbWluZSB0aGUgR3JlZ29yaWFuIHByb3BlcnRpZXMgb2YgYSBEYXRlVGltZSBpbmRpdmlkdWFsbHkgKGkuZSBhcyBvcHBvc2VkIHRvIGNvbGxlY3RpdmVseSB0aHJvdWdoIHtAbGluayBEYXRlVGltZSN0b09iamVjdH0pLCB1c2UgdGhlIHtAbGluayBEYXRlVGltZSN5ZWFyfSwge0BsaW5rIERhdGVUaW1lI21vbnRofSwKCSAqIHtAbGluayBEYXRlVGltZSNkYXl9LCB7QGxpbmsgRGF0ZVRpbWUjaG91cn0sIHtAbGluayBEYXRlVGltZSNtaW51dGV9LCB7QGxpbmsgRGF0ZVRpbWUjc2Vjb25kfSwge0BsaW5rIERhdGVUaW1lI21pbGxpc2Vjb25kfSBhY2Nlc3NvcnMuCgkgKiAqICoqV2VlayBjYWxlbmRhcioqOiBGb3IgSVNPIHdlZWsgY2FsZW5kYXIgYXR0cmlidXRlcywgc2VlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjd2Vla1llYXJ9LCB7QGxpbmsgRGF0ZVRpbWUjd2Vla051bWJlcn0sIGFuZCB7QGxpbmsgRGF0ZVRpbWUjd2Vla2RheX0gYWNjZXNzb3JzLgoJICogKiAqKkNvbmZpZ3VyYXRpb24qKiBTZWUgdGhlIHtAbGluayBEYXRlVGltZSNsb2NhbGV9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjbnVtYmVyaW5nU3lzdGVtfSBhY2Nlc3NvcnMuCgkgKiAqICoqVHJhbnNmb3JtYXRpb24qKjogVG8gdHJhbnNmb3JtIHRoZSBEYXRlVGltZSBpbnRvIG90aGVyIERhdGVUaW1lcywgdXNlIHtAbGluayBEYXRlVGltZSNzZXR9LCB7QGxpbmsgRGF0ZVRpbWUjcmVjb25maWd1cmV9LCB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0sIHtAbGluayBEYXRlVGltZSNzZXRMb2NhbGV9LCB7QGxpbmsgRGF0ZVRpbWUucGx1c30sIHtAbGluayBEYXRlVGltZSNtaW51c30sIHtAbGluayBEYXRlVGltZSNlbmRPZn0sIHtAbGluayBEYXRlVGltZSNzdGFydE9mfSwge0BsaW5rIERhdGVUaW1lI3RvVVRDfSwgYW5kIHtAbGluayBEYXRlVGltZSN0b0xvY2FsfS4KCSAqICogKipPdXRwdXQqKjogVG8gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gb3RoZXIgcmVwcmVzZW50YXRpb25zLCB1c2UgdGhlIHtAbGluayBEYXRlVGltZSN0b1JlbGF0aXZlfSwge0BsaW5rIERhdGVUaW1lI3RvUmVsYXRpdmVDYWxlbmRhcn0sIHtAbGluayBEYXRlVGltZSN0b0pTT059LCB7QGxpbmsgRGF0ZVRpbWUjdG9JU099LCB7QGxpbmsgRGF0ZVRpbWUjdG9IVFRQfSwge0BsaW5rIERhdGVUaW1lI3RvT2JqZWN0fSwge0BsaW5rIERhdGVUaW1lI3RvUkZDMjgyMn0sIHtAbGluayBEYXRlVGltZSN0b1N0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0Zvcm1hdH0sIHtAbGluayBEYXRlVGltZSN0b01pbGxpc30gYW5kIHtAbGluayBEYXRlVGltZSN0b0pTRGF0ZX0uCgkgKgoJICogVGhlcmUncyBwbGVudHkgb3RoZXJzIGRvY3VtZW50ZWQgYmVsb3cuIEluIGFkZGl0aW9uLCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdWJ0bGVyIHRvcGljcyBsaWtlIGludGVybmF0aW9uYWxpemF0aW9uLCB0aW1lIHpvbmVzLCBhbHRlcm5hdGl2ZSBjYWxlbmRhcnMsIHZhbGlkaXR5LCBhbmQgc28gb24sIHNlZSB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbi4KCSAqLwoKCgl2YXIgRGF0ZVRpbWUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewoJICAvKioKCSAgICogQGFjY2VzcyBwcml2YXRlCgkgICAqLwoJICBmdW5jdGlvbiBEYXRlVGltZShjb25maWcpIHsKCSAgICB2YXIgem9uZSA9IGNvbmZpZy56b25lIHx8IFNldHRpbmdzLmRlZmF1bHRab25lOwoJICAgIHZhciBpbnZhbGlkID0gY29uZmlnLmludmFsaWQgfHwgKE51bWJlci5pc05hTihjb25maWcudHMpID8gbmV3IEludmFsaWQoImludmFsaWQgaW5wdXQiKSA6IG51bGwpIHx8ICghem9uZS5pc1ZhbGlkID8gdW5zdXBwb3J0ZWRab25lKHpvbmUpIDogbnVsbCk7CgkgICAgLyoqCgkgICAgICogQGFjY2VzcyBwcml2YXRlCgkgICAgICovCgoJICAgIHRoaXMudHMgPSBpc1VuZGVmaW5lZChjb25maWcudHMpID8gU2V0dGluZ3Mubm93KCkgOiBjb25maWcudHM7CgkgICAgdmFyIGMgPSBudWxsLAoJICAgICAgICBvID0gbnVsbDsKCgkgICAgaWYgKCFpbnZhbGlkKSB7CgkgICAgICB2YXIgdW5jaGFuZ2VkID0gY29uZmlnLm9sZCAmJiBjb25maWcub2xkLnRzID09PSB0aGlzLnRzICYmIGNvbmZpZy5vbGQuem9uZS5lcXVhbHMoem9uZSk7CgoJICAgICAgaWYgKHVuY2hhbmdlZCkgewoJICAgICAgICB2YXIgX3JlZiA9IFtjb25maWcub2xkLmMsIGNvbmZpZy5vbGQub107CgkgICAgICAgIGMgPSBfcmVmWzBdOwoJICAgICAgICBvID0gX3JlZlsxXTsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHZhciBvdCA9IHpvbmUub2Zmc2V0KHRoaXMudHMpOwoJICAgICAgICBjID0gdHNUb09iaih0aGlzLnRzLCBvdCk7CgkgICAgICAgIGludmFsaWQgPSBOdW1iZXIuaXNOYU4oYy55ZWFyKSA/IG5ldyBJbnZhbGlkKCJpbnZhbGlkIGlucHV0IikgOiBudWxsOwoJICAgICAgICBjID0gaW52YWxpZCA/IG51bGwgOiBjOwoJICAgICAgICBvID0gaW52YWxpZCA/IG51bGwgOiBvdDsKCSAgICAgIH0KCSAgICB9CgkgICAgLyoqCgkgICAgICogQGFjY2VzcyBwcml2YXRlCgkgICAgICovCgoKCSAgICB0aGlzLl96b25lID0gem9uZTsKCSAgICAvKioKCSAgICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICAgKi8KCgkgICAgdGhpcy5sb2MgPSBjb25maWcubG9jIHx8IExvY2FsZS5jcmVhdGUoKTsKCSAgICAvKioKCSAgICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICAgKi8KCgkgICAgdGhpcy5pbnZhbGlkID0gaW52YWxpZDsKCSAgICAvKioKCSAgICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICAgKi8KCgkgICAgdGhpcy53ZWVrRGF0YSA9IG51bGw7CgkgICAgLyoqCgkgICAgICogQGFjY2VzcyBwcml2YXRlCgkgICAgICovCgoJICAgIHRoaXMuYyA9IGM7CgkgICAgLyoqCgkgICAgICogQGFjY2VzcyBwcml2YXRlCgkgICAgICovCgoJICAgIHRoaXMubyA9IG87CgkgICAgLyoqCgkgICAgICogQGFjY2VzcyBwcml2YXRlCgkgICAgICovCgoJICAgIHRoaXMuaXNMdXhvbkRhdGVUaW1lID0gdHJ1ZTsKCSAgfSAvLyBDT05TVFJVQ1QKCgkgIC8qKgoJICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmb3IgdGhlIGN1cnJlbnQgaW5zdGFudCwgaW4gdGhlIHN5c3RlbSdzIHRpbWUgem9uZS4KCSAgICoKCSAgICogVXNlIFNldHRpbmdzIHRvIG92ZXJyaWRlIHRoZXNlIGRlZmF1bHQgdmFsdWVzIGlmIG5lZWRlZC4KCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9JU08oKSAvL34+IG5vdyBpbiB0aGUgSVNPIGZvcm1hdAoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgoKCSAgRGF0ZVRpbWUubm93ID0gZnVuY3Rpb24gbm93KCkgewoJICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe30pOwoJICB9CgkgIC8qKgoJICAgKiBDcmVhdGUgYSBsb2NhbCBEYXRlVGltZQoJICAgKiBAcGFyYW0ge251bWJlcn0gW3llYXJdIC0gVGhlIGNhbGVuZGFyIHllYXIuIElmIG9taXR0ZWQgKGFzIGluLCBjYWxsIGBsb2NhbCgpYCB3aXRoIG5vIGFyZ3VtZW50cyksIHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSB1c2VkCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBbbW9udGg9MV0gLSBUaGUgbW9udGgsIDEtaW5kZXhlZAoJICAgKiBAcGFyYW0ge251bWJlcn0gW2RheT0xXSAtIFRoZSBkYXkgb2YgdGhlIG1vbnRoLCAxLWluZGV4ZWQKCSAgICogQHBhcmFtIHtudW1iZXJ9IFtob3VyPTBdIC0gVGhlIGhvdXIgb2YgdGhlIGRheSwgaW4gMjQtaG91ciB0aW1lCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBbbWludXRlPTBdIC0gVGhlIG1pbnV0ZSBvZiB0aGUgaG91ciwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5CgkgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kPTBdIC0gVGhlIHNlY29uZCBvZiB0aGUgbWludXRlLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNTkKCSAgICogQHBhcmFtIHtudW1iZXJ9IFttaWxsaXNlY29uZD0wXSAtIFRoZSBtaWxsaXNlY29uZCBvZiB0aGUgc2Vjb25kLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgOTk5CgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiBub3cKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoeyB6b25lOiAiQW1lcmljYS9OZXdfWW9yayIgfSkgICAgICAvL34+IG5vdywgaW4gVVMgZWFzdCBjb2FzdCB0aW1lCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAxLTAxVDAwOjAwOjAwCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTAxVDAwOjAwOjAwCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCB7IGxvY2FsZTogImZyIiB9KSAgICAgLy9+PiAyMDE3LTAzLTEyVDAwOjAwOjAwLCB3aXRoIGEgRnJlbmNoIGxvY2FsZQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSkgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMAoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgeyB6b25lOiAidXRjIiB9KSAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMCwgaW4gVVRDCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCA1LCA0NSkgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjAwCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTApICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjEwCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTAsIDc2NSkgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjEwLjc2NQoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIERhdGVUaW1lLmxvY2FsID0gZnVuY3Rpb24gbG9jYWwoKSB7CgkgICAgdmFyIF9sYXN0T3B0cyA9IGxhc3RPcHRzKGFyZ3VtZW50cyksCgkgICAgICAgIG9wdHMgPSBfbGFzdE9wdHNbMF0sCgkgICAgICAgIGFyZ3MgPSBfbGFzdE9wdHNbMV0sCgkgICAgICAgIHllYXIgPSBhcmdzWzBdLAoJICAgICAgICBtb250aCA9IGFyZ3NbMV0sCgkgICAgICAgIGRheSA9IGFyZ3NbMl0sCgkgICAgICAgIGhvdXIgPSBhcmdzWzNdLAoJICAgICAgICBtaW51dGUgPSBhcmdzWzRdLAoJICAgICAgICBzZWNvbmQgPSBhcmdzWzVdLAoJICAgICAgICBtaWxsaXNlY29uZCA9IGFyZ3NbNl07CgoJICAgIHJldHVybiBxdWlja0RUKHsKCSAgICAgIHllYXI6IHllYXIsCgkgICAgICBtb250aDogbW9udGgsCgkgICAgICBkYXk6IGRheSwKCSAgICAgIGhvdXI6IGhvdXIsCgkgICAgICBtaW51dGU6IG1pbnV0ZSwKCSAgICAgIHNlY29uZDogc2Vjb25kLAoJICAgICAgbWlsbGlzZWNvbmQ6IG1pbGxpc2Vjb25kCgkgICAgfSwgb3B0cyk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhIERhdGVUaW1lIGluIFVUQwoJICAgKiBAcGFyYW0ge251bWJlcn0gW3llYXJdIC0gVGhlIGNhbGVuZGFyIHllYXIuIElmIG9taXR0ZWQgKGFzIGluLCBjYWxsIGB1dGMoKWAgd2l0aCBubyBhcmd1bWVudHMpLCB0aGUgY3VycmVudCB0aW1lIHdpbGwgYmUgdXNlZAoJICAgKiBAcGFyYW0ge251bWJlcn0gW21vbnRoPTFdIC0gVGhlIG1vbnRoLCAxLWluZGV4ZWQKCSAgICogQHBhcmFtIHtudW1iZXJ9IFtkYXk9MV0gLSBUaGUgZGF5IG9mIHRoZSBtb250aAoJICAgKiBAcGFyYW0ge251bWJlcn0gW2hvdXI9MF0gLSBUaGUgaG91ciBvZiB0aGUgZGF5LCBpbiAyNC1ob3VyIHRpbWUKCSAgICogQHBhcmFtIHtudW1iZXJ9IFttaW51dGU9MF0gLSBUaGUgbWludXRlIG9mIHRoZSBob3VyLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNTkKCSAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmQ9MF0gLSBUaGUgc2Vjb25kIG9mIHRoZSBtaW51dGUsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OQoJICAgKiBAcGFyYW0ge251bWJlcn0gW21pbGxpc2Vjb25kPTBdIC0gVGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA5OTkKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxlXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5vdXRwdXRDYWxlbmRhcl0gLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW1dIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiBub3cKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAxLTAxVDAwOjAwOjAwWgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMDFUMDA6MDA6MDBaCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwMDowMDowMFoKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwWgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MDBaCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSwgNDUsIHsgbG9jYWxlOiAiZnIiIH0pICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFogd2l0aCBhIEZyZW5jaCBsb2NhbGUKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTApICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjEwWgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCwgNzY1LCB7IGxvY2FsZTogImZyIiB9KSAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAuNzY1WiB3aXRoIGEgRnJlbmNoIGxvY2FsZQoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIERhdGVUaW1lLnV0YyA9IGZ1bmN0aW9uIHV0YygpIHsKCSAgICB2YXIgX2xhc3RPcHRzMiA9IGxhc3RPcHRzKGFyZ3VtZW50cyksCgkgICAgICAgIG9wdHMgPSBfbGFzdE9wdHMyWzBdLAoJICAgICAgICBhcmdzID0gX2xhc3RPcHRzMlsxXSwKCSAgICAgICAgeWVhciA9IGFyZ3NbMF0sCgkgICAgICAgIG1vbnRoID0gYXJnc1sxXSwKCSAgICAgICAgZGF5ID0gYXJnc1syXSwKCSAgICAgICAgaG91ciA9IGFyZ3NbM10sCgkgICAgICAgIG1pbnV0ZSA9IGFyZ3NbNF0sCgkgICAgICAgIHNlY29uZCA9IGFyZ3NbNV0sCgkgICAgICAgIG1pbGxpc2Vjb25kID0gYXJnc1s2XTsKCgkgICAgb3B0cy56b25lID0gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlOwoJICAgIHJldHVybiBxdWlja0RUKHsKCSAgICAgIHllYXI6IHllYXIsCgkgICAgICBtb250aDogbW9udGgsCgkgICAgICBkYXk6IGRheSwKCSAgICAgIGhvdXI6IGhvdXIsCgkgICAgICBtaW51dGU6IG1pbnV0ZSwKCSAgICAgIHNlY29uZDogc2Vjb25kLAoJICAgICAgbWlsbGlzZWNvbmQ6IG1pbGxpc2Vjb25kCgkgICAgfSwgb3B0cyk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBKYXZhU2NyaXB0IERhdGUgb2JqZWN0LiBVc2VzIHRoZSBkZWZhdWx0IHpvbmUuCgkgICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSAtIGEgSmF2YVNjcmlwdCBEYXRlIG9iamVjdAoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lCgkgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50bwoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIERhdGVUaW1lLmZyb21KU0RhdGUgPSBmdW5jdGlvbiBmcm9tSlNEYXRlKGRhdGUsIG9wdGlvbnMpIHsKCSAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRpb25zID0ge307CgkgICAgfQoKCSAgICB2YXIgdHMgPSBpc0RhdGUoZGF0ZSkgPyBkYXRlLnZhbHVlT2YoKSA6IE5hTjsKCgkgICAgaWYgKE51bWJlci5pc05hTih0cykpIHsKCSAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKCJpbnZhbGlkIGlucHV0Iik7CgkgICAgfQoKCSAgICB2YXIgem9uZVRvVXNlID0gbm9ybWFsaXplWm9uZShvcHRpb25zLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTsKCgkgICAgaWYgKCF6b25lVG9Vc2UuaXNWYWxpZCkgewoJICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQodW5zdXBwb3J0ZWRab25lKHpvbmVUb1VzZSkpOwoJICAgIH0KCgkgICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7CgkgICAgICB0czogdHMsCgkgICAgICB6b25lOiB6b25lVG9Vc2UsCgkgICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpCgkgICAgfSk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAobWVhbmluZyBzaW5jZSAxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLiBVc2VzIHRoZSBkZWZhdWx0IHpvbmUuCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBtaWxsaXNlY29uZHMgLSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgMTk3MCBVVEMKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZQoJICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG8KCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5mcm9tTWlsbGlzID0gZnVuY3Rpb24gZnJvbU1pbGxpcyhtaWxsaXNlY29uZHMsIG9wdGlvbnMpIHsKCSAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRpb25zID0ge307CgkgICAgfQoKCSAgICBpZiAoIWlzTnVtYmVyKG1pbGxpc2Vjb25kcykpIHsKCSAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigiZnJvbU1pbGxpcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dCwgYnV0IHJlY2VpdmVkIGEgIiArIHR5cGVvZiBtaWxsaXNlY29uZHMgKyAiIHdpdGggdmFsdWUgIiArIG1pbGxpc2Vjb25kcyk7CgkgICAgfSBlbHNlIGlmIChtaWxsaXNlY29uZHMgPCAtTUFYX0RBVEUgfHwgbWlsbGlzZWNvbmRzID4gTUFYX0RBVEUpIHsKCSAgICAgIC8vIHRoaXMgaXNuJ3QgcGVyZmVjdCBiZWNhdXNlIGJlY2F1c2Ugd2UgY2FuIHN0aWxsIGVuZCB1cCBvdXQgb2YgcmFuZ2UgYmVjYXVzZSBvZiBhZGRpdGlvbmFsIHNoaWZ0aW5nLCBidXQgaXQncyBhIHN0YXJ0CgkgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCgiVGltZXN0YW1wIG91dCBvZiByYW5nZSIpOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gbmV3IERhdGVUaW1lKHsKCSAgICAgICAgdHM6IG1pbGxpc2Vjb25kcywKCSAgICAgICAgem9uZTogbm9ybWFsaXplWm9uZShvcHRpb25zLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKSwKCSAgICAgICAgbG9jOiBMb2NhbGUuZnJvbU9iamVjdChvcHRpb25zKQoJICAgICAgfSk7CgkgICAgfQoJICB9CgkgIC8qKgoJICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGEgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIGVwb2NoIChtZWFuaW5nIHNpbmNlIDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuIFVzZXMgdGhlIGRlZmF1bHQgem9uZS4KCSAgICogQHBhcmFtIHtudW1iZXJ9IHNlY29uZHMgLSBhIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIDE5NzAgVVRDCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRGF0ZVRpbWUKCSAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdGlvbnMuem9uZT0nbG9jYWwnXSAtIHRoZSB6b25lIHRvIHBsYWNlIHRoZSBEYXRlVGltZSBpbnRvCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sb2NhbGVdIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEByZXR1cm4ge0RhdGVUaW1lfQoJICAgKi8KCSAgOwoKCSAgRGF0ZVRpbWUuZnJvbVNlY29uZHMgPSBmdW5jdGlvbiBmcm9tU2Vjb25kcyhzZWNvbmRzLCBvcHRpb25zKSB7CgkgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0aW9ucyA9IHt9OwoJICAgIH0KCgkgICAgaWYgKCFpc051bWJlcihzZWNvbmRzKSkgewoJICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJmcm9tU2Vjb25kcyByZXF1aXJlcyBhIG51bWVyaWNhbCBpbnB1dCIpOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gbmV3IERhdGVUaW1lKHsKCSAgICAgICAgdHM6IHNlY29uZHMgKiAxMDAwLAoJICAgICAgICB6b25lOiBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpLAoJICAgICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpCgkgICAgICB9KTsKCSAgICB9CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIGtleXMgbGlrZSAneWVhcicgYW5kICdob3VyJyB3aXRoIHJlYXNvbmFibGUgZGVmYXVsdHMuCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSB0aGUgb2JqZWN0IHRvIGNyZWF0ZSB0aGUgRGF0ZVRpbWUgZnJvbQoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnllYXIgLSBhIHllYXIsIHN1Y2ggYXMgMTk4NwoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1vbnRoIC0gYSBtb250aCwgMS0xMgoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmRheSAtIGEgZGF5IG9mIHRoZSBtb250aCwgMS0zMSwgZGVwZW5kaW5nIG9uIHRoZSBtb250aAoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm9yZGluYWwgLSBkYXkgb2YgdGhlIHllYXIsIDEtMzY1IG9yIDM2NgoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLndlZWtZZWFyIC0gYW4gSVNPIHdlZWsgeWVhcgoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLndlZWtOdW1iZXIgLSBhbiBJU08gd2VlayBudW1iZXIsIGJldHdlZW4gMSBhbmQgNTIgb3IgNTMsIGRlcGVuZGluZyBvbiB0aGUgeWVhcgoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLndlZWtkYXkgLSBhbiBJU08gd2Vla2RheSwgMS03LCB3aGVyZSAxIGlzIE1vbmRheSBhbmQgNyBpcyBTdW5kYXkKCSAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5ob3VyIC0gaG91ciBvZiB0aGUgZGF5LCAwLTIzCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWludXRlIC0gbWludXRlIG9mIHRoZSBob3VyLCAwLTU5CgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouc2Vjb25kIC0gc2Vjb25kIG9mIHRoZSBtaW51dGUsIDAtNTkKCSAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taWxsaXNlY29uZCAtIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIDAtOTk5CgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhpcyBEYXRlVGltZQoJICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gaW50ZXJwcmV0IHRoZSBudW1iZXJzIGluIHRoZSBjb250ZXh0IG9mIGEgcGFydGljdWxhciB6b25lLiBDYW4gdGFrZSBhbnkgdmFsdWUgdGFrZW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHNldFpvbmUoKQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdzeXN0ZW0ncyBsb2NhbGUnXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgeWVhcjogMTk4MiwgbW9udGg6IDUsIGRheTogMjV9KS50b0lTT0RhdGUoKSAvLz0+ICcxOTgyLTA1LTI1JwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgeWVhcjogMTk4MiB9KS50b0lTT0RhdGUoKSAvLz0+ICcxOTgyLTAxLTAxJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgaG91cjogMTAsIG1pbnV0ZTogMjYsIHNlY29uZDogNiB9KSAvL34+IHRvZGF5IGF0IDEwOjI2OjA2CgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0sIHsgem9uZTogJ3V0YycgfSksCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0sIHsgem9uZTogJ2xvY2FsJyB9KQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgaG91cjogMTAsIG1pbnV0ZTogMjYsIHNlY29uZDogNiB9LCB7IHpvbmU6ICdBbWVyaWNhL05ld19Zb3JrJyB9KQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgd2Vla1llYXI6IDIwMTYsIHdlZWtOdW1iZXI6IDIsIHdlZWtkYXk6IDMgfSkudG9JU09EYXRlKCkgLy89PiAnMjAxNi0wMS0xMycKCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5mcm9tT2JqZWN0ID0gZnVuY3Rpb24gZnJvbU9iamVjdChvYmosIG9wdHMpIHsKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICBvYmogPSBvYmogfHwge307CgkgICAgdmFyIHpvbmVUb1VzZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7CgoJICAgIGlmICghem9uZVRvVXNlLmlzVmFsaWQpIHsKCSAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lVG9Vc2UpKTsKCSAgICB9CgoJICAgIHZhciB0c05vdyA9IFNldHRpbmdzLm5vdygpLAoJICAgICAgICBvZmZzZXRQcm92aXMgPSAhaXNVbmRlZmluZWQob3B0cy5zcGVjaWZpY09mZnNldCkgPyBvcHRzLnNwZWNpZmljT2Zmc2V0IDogem9uZVRvVXNlLm9mZnNldCh0c05vdyksCgkgICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVPYmplY3Qob2JqLCBub3JtYWxpemVVbml0KSwKCSAgICAgICAgY29udGFpbnNPcmRpbmFsID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQub3JkaW5hbCksCgkgICAgICAgIGNvbnRhaW5zR3JlZ29yWWVhciA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLnllYXIpLAoJICAgICAgICBjb250YWluc0dyZWdvck1EID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQubW9udGgpIHx8ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLmRheSksCgkgICAgICAgIGNvbnRhaW5zR3JlZ29yID0gY29udGFpbnNHcmVnb3JZZWFyIHx8IGNvbnRhaW5zR3JlZ29yTUQsCgkgICAgICAgIGRlZmluaXRlV2Vla0RlZiA9IG5vcm1hbGl6ZWQud2Vla1llYXIgfHwgbm9ybWFsaXplZC53ZWVrTnVtYmVyLAoJICAgICAgICBsb2MgPSBMb2NhbGUuZnJvbU9iamVjdChvcHRzKTsgLy8gY2FzZXM6CgkgICAgLy8ganVzdCBhIHdlZWtkYXkgLT4gdGhpcyB3ZWVrJ3MgaW5zdGFuY2Ugb2YgdGhhdCB3ZWVrZGF5LCBubyB3b3JyaWVzCgkgICAgLy8gKGdyZWdvcmlhbiBkYXRhIG9yIG9yZGluYWwpICsgKHdlZWtZZWFyIG9yIHdlZWtOdW1iZXIpIC0+IGVycm9yCgkgICAgLy8gKGdyZWdvcmlhbiBtb250aCBvciBkYXkpICsgb3JkaW5hbCAtPiBlcnJvcgoJICAgIC8vIG90aGVyd2lzZSBqdXN0IHVzZSB3ZWVrcyBvciBvcmRpbmFscyBvciBncmVnb3JpYW4sIGRlcGVuZGluZyBvbiB3aGF0J3Mgc3BlY2lmaWVkCgoJICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHsKCSAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcigiQ2FuJ3QgbWl4IHdlZWtZZWFyL3dlZWtOdW1iZXIgdW5pdHMgd2l0aCB5ZWFyL21vbnRoL2RheSBvciBvcmRpbmFscyIpOwoJICAgIH0KCgkgICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7CgkgICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5Iik7CgkgICAgfQoKCSAgICB2YXIgdXNlV2Vla0RhdGEgPSBkZWZpbml0ZVdlZWtEZWYgfHwgbm9ybWFsaXplZC53ZWVrZGF5ICYmICFjb250YWluc0dyZWdvcjsgLy8gY29uZmlndXJlIG91cnNlbHZlcyB0byBkZWFsIHdpdGggZ3JlZ29yaWFuIGRhdGVzIG9yIHdlZWsgc3R1ZmYKCgkgICAgdmFyIHVuaXRzLAoJICAgICAgICBkZWZhdWx0VmFsdWVzLAoJICAgICAgICBvYmpOb3cgPSB0c1RvT2JqKHRzTm93LCBvZmZzZXRQcm92aXMpOwoKCSAgICBpZiAodXNlV2Vla0RhdGEpIHsKCSAgICAgIHVuaXRzID0gb3JkZXJlZFdlZWtVbml0czsKCSAgICAgIGRlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0V2Vla1VuaXRWYWx1ZXM7CgkgICAgICBvYmpOb3cgPSBncmVnb3JpYW5Ub1dlZWsob2JqTm93KTsKCSAgICB9IGVsc2UgaWYgKGNvbnRhaW5zT3JkaW5hbCkgewoJICAgICAgdW5pdHMgPSBvcmRlcmVkT3JkaW5hbFVuaXRzOwoJICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRPcmRpbmFsVW5pdFZhbHVlczsKCSAgICAgIG9iak5vdyA9IGdyZWdvcmlhblRvT3JkaW5hbChvYmpOb3cpOwoJICAgIH0gZWxzZSB7CgkgICAgICB1bml0cyA9IG9yZGVyZWRVbml0czsKCSAgICAgIGRlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0VW5pdFZhbHVlczsKCSAgICB9IC8vIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWlzc2luZyBzdHVmZgoKCgkgICAgdmFyIGZvdW5kRmlyc3QgPSBmYWxzZTsKCgkgICAgZm9yICh2YXIgX2l0ZXJhdG9yMyA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UodW5pdHMpLCBfc3RlcDM7ICEoX3N0ZXAzID0gX2l0ZXJhdG9yMygpKS5kb25lOykgewoJICAgICAgdmFyIHUgPSBfc3RlcDMudmFsdWU7CgkgICAgICB2YXIgdiA9IG5vcm1hbGl6ZWRbdV07CgoJICAgICAgaWYgKCFpc1VuZGVmaW5lZCh2KSkgewoJICAgICAgICBmb3VuZEZpcnN0ID0gdHJ1ZTsKCSAgICAgIH0gZWxzZSBpZiAoZm91bmRGaXJzdCkgewoJICAgICAgICBub3JtYWxpemVkW3VdID0gZGVmYXVsdFZhbHVlc1t1XTsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIG5vcm1hbGl6ZWRbdV0gPSBvYmpOb3dbdV07CgkgICAgICB9CgkgICAgfSAvLyBtYWtlIHN1cmUgdGhlIHZhbHVlcyB3ZSBoYXZlIGFyZSBpbiByYW5nZQoKCgkgICAgdmFyIGhpZ2hlck9yZGVySW52YWxpZCA9IHVzZVdlZWtEYXRhID8gaGFzSW52YWxpZFdlZWtEYXRhKG5vcm1hbGl6ZWQpIDogY29udGFpbnNPcmRpbmFsID8gaGFzSW52YWxpZE9yZGluYWxEYXRhKG5vcm1hbGl6ZWQpIDogaGFzSW52YWxpZEdyZWdvcmlhbkRhdGEobm9ybWFsaXplZCksCgkgICAgICAgIGludmFsaWQgPSBoaWdoZXJPcmRlckludmFsaWQgfHwgaGFzSW52YWxpZFRpbWVEYXRhKG5vcm1hbGl6ZWQpOwoKCSAgICBpZiAoaW52YWxpZCkgewoJICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoaW52YWxpZCk7CgkgICAgfSAvLyBjb21wdXRlIHRoZSBhY3R1YWwgdGltZQoKCgkgICAgdmFyIGdyZWdvcmlhbiA9IHVzZVdlZWtEYXRhID8gd2Vla1RvR3JlZ29yaWFuKG5vcm1hbGl6ZWQpIDogY29udGFpbnNPcmRpbmFsID8gb3JkaW5hbFRvR3JlZ29yaWFuKG5vcm1hbGl6ZWQpIDogbm9ybWFsaXplZCwKCSAgICAgICAgX29ialRvVFMyID0gb2JqVG9UUyhncmVnb3JpYW4sIG9mZnNldFByb3Zpcywgem9uZVRvVXNlKSwKCSAgICAgICAgdHNGaW5hbCA9IF9vYmpUb1RTMlswXSwKCSAgICAgICAgb2Zmc2V0RmluYWwgPSBfb2JqVG9UUzJbMV0sCgkgICAgICAgIGluc3QgPSBuZXcgRGF0ZVRpbWUoewoJICAgICAgdHM6IHRzRmluYWwsCgkgICAgICB6b25lOiB6b25lVG9Vc2UsCgkgICAgICBvOiBvZmZzZXRGaW5hbCwKCSAgICAgIGxvYzogbG9jCgkgICAgfSk7IC8vIGdyZWdvcmlhbiBkYXRhICsgd2Vla2RheSBzZXJ2ZXMgb25seSB0byB2YWxpZGF0ZQoKCgkgICAgaWYgKG5vcm1hbGl6ZWQud2Vla2RheSAmJiBjb250YWluc0dyZWdvciAmJiBvYmoud2Vla2RheSAhPT0gaW5zdC53ZWVrZGF5KSB7CgkgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCgibWlzbWF0Y2hlZCB3ZWVrZGF5IiwgInlvdSBjYW4ndCBzcGVjaWZ5IGJvdGggYSB3ZWVrZGF5IG9mICIgKyBub3JtYWxpemVkLndlZWtkYXkgKyAiIGFuZCBhIGRhdGUgb2YgIiArIGluc3QudG9JU08oKSk7CgkgICAgfQoKCSAgICByZXR1cm4gaW5zdDsKCSAgfQoJICAvKioKCSAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBJU08gODYwMSBzdHJpbmcKCSAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgSVNPIHN0cmluZwoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvbgoJICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmUKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmUKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXJdIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzJykKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMrMDY6MDAnKQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMyswNjowMCcsIHtzZXRab25lOiB0cnVlfSkKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMnLCB7em9uZTogJ3V0Yyd9KQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LVcwNS00JykKCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5mcm9tSVNPID0gZnVuY3Rpb24gZnJvbUlTTyh0ZXh0LCBvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgdmFyIF9wYXJzZUlTT0RhdGUgPSBwYXJzZUlTT0RhdGUodGV4dCksCgkgICAgICAgIHZhbHMgPSBfcGFyc2VJU09EYXRlWzBdLAoJICAgICAgICBwYXJzZWRab25lID0gX3BhcnNlSVNPRGF0ZVsxXTsKCgkgICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgIklTTyA4NjAxIiwgdGV4dCk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYW4gUkZDIDI4MjIgc3RyaW5nCgkgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIFJGQyAyODIyIHN0cmluZwoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvbgoJICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmUuIFNpbmNlIHRoZSBvZmZzZXQgaXMgYWx3YXlzIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzdHJpbmcsIG1lcmVseSB0aGUgem9uZSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGlzIGV4cHJlc3NlZCBpbi4KCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmUKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJzI1IE5vdiAyMDE2IDEzOjIzOjEyIEdNVCcpCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCdGcmksIDI1IE5vdiAyMDE2IDEzOjIzOjEyICswNjAwJykKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJzI1IE5vdiAyMDE2IDEzOjIzIFonKQoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIERhdGVUaW1lLmZyb21SRkMyODIyID0gZnVuY3Rpb24gZnJvbVJGQzI4MjIodGV4dCwgb3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHZhciBfcGFyc2VSRkMyODIyRGF0ZSA9IHBhcnNlUkZDMjgyMkRhdGUodGV4dCksCgkgICAgICAgIHZhbHMgPSBfcGFyc2VSRkMyODIyRGF0ZVswXSwKCSAgICAgICAgcGFyc2VkWm9uZSA9IF9wYXJzZVJGQzI4MjJEYXRlWzFdOwoKCSAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCAiUkZDIDI4MjIiLCB0ZXh0KTsKCSAgfQoJICAvKioKCSAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBIVFRQIGhlYWRlciBkYXRlCgkgICAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMy5odG1sI3NlYzMuMy4xCgkgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIEhUVFAgaGVhZGVyIGRhdGUKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb24KCSAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhpcyB6b25lLiBTaW5jZSBIVFRQIGRhdGVzIGFyZSBhbHdheXMgaW4gVVRDLCB0aGlzIGhhcyBubyBlZmZlY3Qgb24gdGhlIGludGVycHJldGF0aW9uIG9mIHN0cmluZywgbWVyZWx5IHRoZSB6b25lIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaXMgZXhwcmVzc2VkIGluLgoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCB0aGUgZml4ZWQtb2Zmc2V0IHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcuIEZvciBIVFRQIGRhdGVzLCB0aGlzIGlzIGFsd2F5cyBVVEMsIHNvIHRoaXMgb3B0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyB0aGUgYHpvbmVgIG9wdGlvbiB0byAndXRjJywgYnV0IHRoaXMgb3B0aW9uIGlzIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHNpbWlsYXIgbWV0aG9kcy4KCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUhUVFAoJ1N1biwgMDYgTm92IDE5OTQgMDg6NDk6MzcgR01UJykKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUhUVFAoJ1N1bmRheSwgMDYtTm92LTk0IDA4OjQ5OjM3IEdNVCcpCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW4gTm92ICA2IDA4OjQ5OjM3IDE5OTQnKQoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIERhdGVUaW1lLmZyb21IVFRQID0gZnVuY3Rpb24gZnJvbUhUVFAodGV4dCwgb3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHZhciBfcGFyc2VIVFRQRGF0ZSA9IHBhcnNlSFRUUERhdGUodGV4dCksCgkgICAgICAgIHZhbHMgPSBfcGFyc2VIVFRQRGF0ZVswXSwKCSAgICAgICAgcGFyc2VkWm9uZSA9IF9wYXJzZUhUVFBEYXRlWzFdOwoKCSAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCAiSFRUUCIsIG9wdHMpOwoJICB9CgkgIC8qKgoJICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIGlucHV0IHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZy4KCSAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlLiBGb3IgYSB0YWJsZSBvZiB0b2tlbnMgYW5kIHRoZWlyIGludGVycHJldGF0aW9ucywgc2VlIFtoZXJlXShodHRwczovL21vbWVudC5naXRodWIuaW8vbHV4b24vIy9wYXJzaW5nP2lkPXRhYmxlLW9mLXRva2VucykuCgkgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWUgdGhlIGxpbmsgYmVsb3cgZm9yIHRoZSBmb3JtYXRzKQoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvbgoJICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyB6b25lCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmUKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIGEgbG9jYWxlIHN0cmluZyB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSBEYXRlVGltZSB0byB0aGlzIGxvY2FsZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgdG8gdGhpcyBudW1iZXJpbmcgc3lzdGVtCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIERhdGVUaW1lLmZyb21Gb3JtYXQgPSBmdW5jdGlvbiBmcm9tRm9ybWF0KHRleHQsIGZtdCwgb3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIGlmIChpc1VuZGVmaW5lZCh0ZXh0KSB8fCBpc1VuZGVmaW5lZChmbXQpKSB7CgkgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoImZyb21Gb3JtYXQgcmVxdWlyZXMgYW4gaW5wdXQgc3RyaW5nIGFuZCBhIGZvcm1hdCIpOwoJICAgIH0KCgkgICAgdmFyIF9vcHRzID0gb3B0cywKCSAgICAgICAgX29wdHMkbG9jYWxlID0gX29wdHMubG9jYWxlLAoJICAgICAgICBsb2NhbGUgPSBfb3B0cyRsb2NhbGUgPT09IHZvaWQgMCA/IG51bGwgOiBfb3B0cyRsb2NhbGUsCgkgICAgICAgIF9vcHRzJG51bWJlcmluZ1N5c3RlbSA9IF9vcHRzLm51bWJlcmluZ1N5c3RlbSwKCSAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX29wdHMkbnVtYmVyaW5nU3lzdGVtID09PSB2b2lkIDAgPyBudWxsIDogX29wdHMkbnVtYmVyaW5nU3lzdGVtLAoJICAgICAgICBsb2NhbGVUb1VzZSA9IExvY2FsZS5mcm9tT3B0cyh7CgkgICAgICBsb2NhbGU6IGxvY2FsZSwKCSAgICAgIG51bWJlcmluZ1N5c3RlbTogbnVtYmVyaW5nU3lzdGVtLAoJICAgICAgZGVmYXVsdFRvRU46IHRydWUKCSAgICB9KSwKCSAgICAgICAgX3BhcnNlRnJvbVRva2VucyA9IHBhcnNlRnJvbVRva2Vucyhsb2NhbGVUb1VzZSwgdGV4dCwgZm10KSwKCSAgICAgICAgdmFscyA9IF9wYXJzZUZyb21Ub2tlbnNbMF0sCgkgICAgICAgIHBhcnNlZFpvbmUgPSBfcGFyc2VGcm9tVG9rZW5zWzFdLAoJICAgICAgICBzcGVjaWZpY09mZnNldCA9IF9wYXJzZUZyb21Ub2tlbnNbMl0sCgkgICAgICAgIGludmFsaWQgPSBfcGFyc2VGcm9tVG9rZW5zWzNdOwoKCSAgICBpZiAoaW52YWxpZCkgewoJICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoaW52YWxpZCk7CgkgICAgfSBlbHNlIHsKCSAgICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsICJmb3JtYXQgIiArIGZtdCwgdGV4dCwgc3BlY2lmaWNPZmZzZXQpOwoJICAgIH0KCSAgfQoJICAvKioKCSAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21Gb3JtYXQgaW5zdGVhZAoJICAgKi8KCSAgOwoKCSAgRGF0ZVRpbWUuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIGZyb21TdHJpbmcodGV4dCwgZm10LCBvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgcmV0dXJuIERhdGVUaW1lLmZyb21Gb3JtYXQodGV4dCwgZm10LCBvcHRzKTsKCSAgfQoJICAvKioKCSAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIFNRTCBkYXRlLCB0aW1lLCBvciBkYXRldGltZQoJICAgKiBEZWZhdWx0cyB0byBlbi1VUyBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBsb2NhbGUKCSAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgc3RyaW5nIHRvIHBhcnNlCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uCgkgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSB1c2UgdGhpcyB6b25lIGlmIG5vIG9mZnNldCBpcyBzcGVjaWZpZWQgaW4gdGhlIGlucHV0IHN0cmluZyBpdHNlbGYuIFdpbGwgYWxzbyBjb252ZXJ0IHRoZSBEYXRlVGltZSB0byB0aGlzIHpvbmUKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgaWYgaXQgc3BlY2lmaWVzIG9uZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gYSBsb2NhbGUgc3RyaW5nIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIERhdGVUaW1lIHRvIHRoaXMgbG9jYWxlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIHJlc3VsdGluZyBEYXRlVGltZSB0byB0aGlzIG51bWJlcmluZyBzeXN0ZW0KCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUnKQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0JykKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDInKQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiswNjowMCcpCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyIEFtZXJpY2EvTG9zX0FuZ2VsZXMnKQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiBBbWVyaWNhL0xvc19BbmdlbGVzJywgeyBzZXRab25lOiB0cnVlIH0pCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyJywgeyB6b25lOiAnQW1lcmljYS9Mb3NfQW5nZWxlcycgfSkKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMDk6MTI6MzQuMzQyJykKCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5mcm9tU1FMID0gZnVuY3Rpb24gZnJvbVNRTCh0ZXh0LCBvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgdmFyIF9wYXJzZVNRTCA9IHBhcnNlU1FMKHRleHQpLAoJICAgICAgICB2YWxzID0gX3BhcnNlU1FMWzBdLAoJICAgICAgICBwYXJzZWRab25lID0gX3BhcnNlU1FMWzFdOwoKCSAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCAiU1FMIiwgdGV4dCk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhbiBpbnZhbGlkIERhdGVUaW1lLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gc2ltcGxlIHN0cmluZyBvZiB3aHkgdGhpcyBEYXRlVGltZSBpcyBpbnZhbGlkLiBTaG91bGQgbm90IGNvbnRhaW4gcGFyYW1ldGVycyBvciBhbnl0aGluZyBlbHNlIGRhdGEtZGVwZW5kZW50CgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwbGFuYXRpb249bnVsbF0gLSBsb25nZXIgZXhwbGFuYXRpb24sIG1heSBpbmNsdWRlIHBhcmFtZXRlcnMgYW5kIG90aGVyIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5pbnZhbGlkID0gZnVuY3Rpb24gaW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uKSB7CgkgICAgaWYgKGV4cGxhbmF0aW9uID09PSB2b2lkIDApIHsKCSAgICAgIGV4cGxhbmF0aW9uID0gbnVsbDsKCSAgICB9CgoJICAgIGlmICghcmVhc29uKSB7CgkgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRGF0ZVRpbWUgaXMgaW52YWxpZCIpOwoJICAgIH0KCgkgICAgdmFyIGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7CgoJICAgIGlmIChTZXR0aW5ncy50aHJvd09uSW52YWxpZCkgewoJICAgICAgdGhyb3cgbmV3IEludmFsaWREYXRlVGltZUVycm9yKGludmFsaWQpOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gbmV3IERhdGVUaW1lKHsKCSAgICAgICAgaW52YWxpZDogaW52YWxpZAoJICAgICAgfSk7CgkgICAgfQoJICB9CgkgIC8qKgoJICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgRGF0ZVRpbWUuIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXMKCSAgICogQHBhcmFtIHtvYmplY3R9IG8KCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIERhdGVUaW1lLmlzRGF0ZVRpbWUgPSBmdW5jdGlvbiBpc0RhdGVUaW1lKG8pIHsKCSAgICByZXR1cm4gbyAmJiBvLmlzTHV4b25EYXRlVGltZSB8fCBmYWxzZTsKCSAgfSAvLyBJTkZPCgoJICAvKioKCSAgICogR2V0IHRoZSB2YWx1ZSBvZiB1bml0LgoJICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIGEgdW5pdCBzdWNoIGFzICdtaW51dGUnIG9yICdkYXknCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDcsIDQpLmdldCgnbW9udGgnKTsgLy89PiA3CgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDcsIDQpLmdldCgnZGF5Jyk7IC8vPT4gNAoJICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAqLwoJICA7CgoJICB2YXIgX3Byb3RvID0gRGF0ZVRpbWUucHJvdG90eXBlOwoKCSAgX3Byb3RvLmdldCA9IGZ1bmN0aW9uIGdldCh1bml0KSB7CgkgICAgcmV0dXJuIHRoaXNbdW5pdF07CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgd2hldGhlciB0aGUgRGF0ZVRpbWUgaXMgdmFsaWQuIEludmFsaWQgRGF0ZVRpbWVzIG9jY3VyIHdoZW46CgkgICAqICogVGhlIERhdGVUaW1lIHdhcyBjcmVhdGVkIGZyb20gaW52YWxpZCBjYWxlbmRhciBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgMTN0aCBtb250aCBvciBGZWJydWFyeSAzMAoJICAgKiAqIFRoZSBEYXRlVGltZSB3YXMgY3JlYXRlZCBieSBhbiBvcGVyYXRpb24gb24gYW5vdGhlciBpbnZhbGlkIGRhdGUKCSAgICogQHR5cGUge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICAvKioKCSAgICogUmV0dXJucyB0aGUgcmVzb2x2ZWQgSW50bCBvcHRpb25zIGZvciB0aGlzIERhdGVUaW1lLgoJICAgKiBUaGlzIGlzIHVzZWZ1bCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciBvZiBmb3JtYXR0aW5nIG1ldGhvZHMKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSB0aGUgc2FtZSBvcHRpb25zIGFzIHRvTG9jYWxlU3RyaW5nCgkgICAqIEByZXR1cm4ge09iamVjdH0KCSAgICovCgkgIF9wcm90by5yZXNvbHZlZExvY2FsZU9wdGlvbnMgPSBmdW5jdGlvbiByZXNvbHZlZExvY2FsZU9wdGlvbnMob3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHZhciBfRm9ybWF0dGVyJGNyZWF0ZSRyZXMgPSBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLmNsb25lKG9wdHMpLCBvcHRzKS5yZXNvbHZlZE9wdGlvbnModGhpcyksCgkgICAgICAgIGxvY2FsZSA9IF9Gb3JtYXR0ZXIkY3JlYXRlJHJlcy5sb2NhbGUsCgkgICAgICAgIG51bWJlcmluZ1N5c3RlbSA9IF9Gb3JtYXR0ZXIkY3JlYXRlJHJlcy5udW1iZXJpbmdTeXN0ZW0sCgkgICAgICAgIGNhbGVuZGFyID0gX0Zvcm1hdHRlciRjcmVhdGUkcmVzLmNhbGVuZGFyOwoKCSAgICByZXR1cm4gewoJICAgICAgbG9jYWxlOiBsb2NhbGUsCgkgICAgICBudW1iZXJpbmdTeXN0ZW06IG51bWJlcmluZ1N5c3RlbSwKCSAgICAgIG91dHB1dENhbGVuZGFyOiBjYWxlbmRhcgoJICAgIH07CgkgIH0gLy8gVFJBTlNGT1JNCgoJICAvKioKCSAgICogIlNldCIgdGhlIERhdGVUaW1lJ3Mgem9uZSB0byBVVEMuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS4KCSAgICoKCSAgICogRXF1aXZhbGVudCB0byB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0oJ3V0YycpCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0PTBdIC0gb3B0aW9uYWxseSwgYW4gb2Zmc2V0IGZyb20gVVRDIGluIG1pbnV0ZXMKCSAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzPXt9XSAtIG9wdGlvbnMgdG8gcGFzcyB0byBgc2V0Wm9uZSgpYAoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIF9wcm90by50b1VUQyA9IGZ1bmN0aW9uIHRvVVRDKG9mZnNldCwgb3B0cykgewoJICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkgewoJICAgICAgb2Zmc2V0ID0gMDsKCSAgICB9CgoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHJldHVybiB0aGlzLnNldFpvbmUoRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKG9mZnNldCksIG9wdHMpOwoJICB9CgkgIC8qKgoJICAgKiAiU2V0IiB0aGUgRGF0ZVRpbWUncyB6b25lIHRvIHRoZSBob3N0J3MgbG9jYWwgem9uZS4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLgoJICAgKgoJICAgKiBFcXVpdmFsZW50IHRvIGBzZXRab25lKCdsb2NhbCcpYAoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0xvY2FsID0gZnVuY3Rpb24gdG9Mb2NhbCgpIHsKCSAgICByZXR1cm4gdGhpcy5zZXRab25lKFNldHRpbmdzLmRlZmF1bHRab25lKTsKCSAgfQoJICAvKioKCSAgICogIlNldCIgdGhlIERhdGVUaW1lJ3Mgem9uZSB0byBzcGVjaWZpZWQgem9uZS4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLgoJICAgKgoJICAgKiBCeSBkZWZhdWx0LCB0aGUgc2V0dGVyIGtlZXBzIHRoZSB1bmRlcmx5aW5nIHRpbWUgdGhlIHNhbWUgKGFzIGluLCB0aGUgc2FtZSB0aW1lc3RhbXApLCBidXQgdGhlIG5ldyBpbnN0YW5jZSB3aWxsIHJlcG9ydCBkaWZmZXJlbnQgbG9jYWwgdGltZXMgYW5kIGNvbnNpZGVyIERTVHMgd2hlbiBtYWtpbmcgY29tcHV0YXRpb25zLCBhcyB3aXRoIHtAbGluayBEYXRlVGltZSNwbHVzfS4gWW91IG1heSB3aXNoIHRvIHVzZSB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbH0gYW5kIHtAbGluayBEYXRlVGltZSN0b1VUQ30gd2hpY2ggcHJvdmlkZSBzaW1wbGUgY29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yIGNvbW1vbmx5IHVzZWQgem9uZXMuCgkgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFt6b25lPSdsb2NhbCddIC0gYSB6b25lIGlkZW50aWZpZXIuIEFzIGEgc3RyaW5nLCB0aGF0IGNhbiBiZSBhbnkgSUFOQSB6b25lIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBlbnZpcm9ubWVudCwgb3IgYSBmaXhlZC1vZmZzZXQgbmFtZSBvZiB0aGUgZm9ybSAnVVRDKzMnLCBvciB0aGUgc3RyaW5ncyAnbG9jYWwnIG9yICd1dGMnLiBZb3UgbWF5IGFsc28gc3VwcGx5IGFuIGluc3RhbmNlIG9mIGEge0BsaW5rIERhdGVUaW1lI1pvbmV9IGNsYXNzLgoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5rZWVwTG9jYWxUaW1lPWZhbHNlXSAtIElmIHRydWUsIGFkanVzdCB0aGUgdW5kZXJseWluZyB0aW1lIHNvIHRoYXQgdGhlIGxvY2FsIHRpbWUgc3RheXMgdGhlIHNhbWUsIGJ1dCBpbiB0aGUgdGFyZ2V0IHpvbmUuIFlvdSBzaG91bGQgcmFyZWx5IG5lZWQgdGhpcy4KCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBfcHJvdG8uc2V0Wm9uZSA9IGZ1bmN0aW9uIHNldFpvbmUoem9uZSwgX3RlbXApIHsKCSAgICB2YXIgX3JlZjIgPSBfdGVtcCA9PT0gdm9pZCAwID8ge30gOiBfdGVtcCwKCSAgICAgICAgX3JlZjIka2VlcExvY2FsVGltZSA9IF9yZWYyLmtlZXBMb2NhbFRpbWUsCgkgICAgICAgIGtlZXBMb2NhbFRpbWUgPSBfcmVmMiRrZWVwTG9jYWxUaW1lID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGtlZXBMb2NhbFRpbWUsCgkgICAgICAgIF9yZWYyJGtlZXBDYWxlbmRhclRpbSA9IF9yZWYyLmtlZXBDYWxlbmRhclRpbWUsCgkgICAgICAgIGtlZXBDYWxlbmRhclRpbWUgPSBfcmVmMiRrZWVwQ2FsZW5kYXJUaW0gPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIka2VlcENhbGVuZGFyVGltOwoKCSAgICB6b25lID0gbm9ybWFsaXplWm9uZSh6b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7CgoJICAgIGlmICh6b25lLmVxdWFscyh0aGlzLnpvbmUpKSB7CgkgICAgICByZXR1cm4gdGhpczsKCSAgICB9IGVsc2UgaWYgKCF6b25lLmlzVmFsaWQpIHsKCSAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lKSk7CgkgICAgfSBlbHNlIHsKCSAgICAgIHZhciBuZXdUUyA9IHRoaXMudHM7CgoJICAgICAgaWYgKGtlZXBMb2NhbFRpbWUgfHwga2VlcENhbGVuZGFyVGltZSkgewoJICAgICAgICB2YXIgb2Zmc2V0R3Vlc3MgPSB6b25lLm9mZnNldCh0aGlzLnRzKTsKCSAgICAgICAgdmFyIGFzT2JqID0gdGhpcy50b09iamVjdCgpOwoKCSAgICAgICAgdmFyIF9vYmpUb1RTMyA9IG9ialRvVFMoYXNPYmosIG9mZnNldEd1ZXNzLCB6b25lKTsKCgkgICAgICAgIG5ld1RTID0gX29ialRvVFMzWzBdOwoJICAgICAgfQoKCSAgICAgIHJldHVybiBjbG9uZSh0aGlzLCB7CgkgICAgICAgIHRzOiBuZXdUUywKCSAgICAgICAgem9uZTogem9uZQoJICAgICAgfSk7CgkgICAgfQoJICB9CgkgIC8qKgoJICAgKiAiU2V0IiB0aGUgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG9yIG91dHB1dENhbGVuZGFyLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIC0gdGhlIHByb3BlcnRpZXMgdG8gc2V0CgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KQoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIF9wcm90by5yZWNvbmZpZ3VyZSA9IGZ1bmN0aW9uIHJlY29uZmlndXJlKF90ZW1wMikgewoJICAgIHZhciBfcmVmMyA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDIsCgkgICAgICAgIGxvY2FsZSA9IF9yZWYzLmxvY2FsZSwKCSAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX3JlZjMubnVtYmVyaW5nU3lzdGVtLAoJICAgICAgICBvdXRwdXRDYWxlbmRhciA9IF9yZWYzLm91dHB1dENhbGVuZGFyOwoKCSAgICB2YXIgbG9jID0gdGhpcy5sb2MuY2xvbmUoewoJICAgICAgbG9jYWxlOiBsb2NhbGUsCgkgICAgICBudW1iZXJpbmdTeXN0ZW06IG51bWJlcmluZ1N5c3RlbSwKCSAgICAgIG91dHB1dENhbGVuZGFyOiBvdXRwdXRDYWxlbmRhcgoJICAgIH0pOwoJICAgIHJldHVybiBjbG9uZSh0aGlzLCB7CgkgICAgICBsb2M6IGxvYwoJICAgIH0pOwoJICB9CgkgIC8qKgoJICAgKiAiU2V0IiB0aGUgbG9jYWxlLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuCgkgICAqIEp1c3QgYSBjb252ZW5pZW50IGFsaWFzIGZvciByZWNvbmZpZ3VyZSh7IGxvY2FsZSB9KQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkuc2V0TG9jYWxlKCdlbi1HQicpCgkgICAqIEByZXR1cm4ge0RhdGVUaW1lfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnNldExvY2FsZSA9IGZ1bmN0aW9uIHNldExvY2FsZShsb2NhbGUpIHsKCSAgICByZXR1cm4gdGhpcy5yZWNvbmZpZ3VyZSh7CgkgICAgICBsb2NhbGU6IGxvY2FsZQoJICAgIH0pOwoJICB9CgkgIC8qKgoJICAgKiAiU2V0IiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLgoJICAgKiBZb3UgY2FuIG9ubHkgc2V0IHVuaXRzIHdpdGggdGhpcyBtZXRob2Q7IGZvciAic2V0dGluZyIgbWV0YWRhdGEsIHNlZSB7QGxpbmsgRGF0ZVRpbWUjcmVjb25maWd1cmV9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0uCgkgICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgLSBhIG1hcHBpbmcgb2YgdW5pdHMgdG8gbnVtYmVycwoJICAgKiBAZXhhbXBsZSBkdC5zZXQoeyB5ZWFyOiAyMDE3IH0pCgkgICAqIEBleGFtcGxlIGR0LnNldCh7IGhvdXI6IDgsIG1pbnV0ZTogMzAgfSkKCSAgICogQGV4YW1wbGUgZHQuc2V0KHsgd2Vla2RheTogNSB9KQoJICAgKiBAZXhhbXBsZSBkdC5zZXQoeyB5ZWFyOiAyMDA1LCBvcmRpbmFsOiAyMzQgfSkKCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KHZhbHVlcykgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCSAgICB2YXIgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZU9iamVjdCh2YWx1ZXMsIG5vcm1hbGl6ZVVuaXQpLAoJICAgICAgICBzZXR0aW5nV2Vla1N0dWZmID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla1llYXIpIHx8ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtOdW1iZXIpIHx8ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtkYXkpLAoJICAgICAgICBjb250YWluc09yZGluYWwgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSwKCSAgICAgICAgY29udGFpbnNHcmVnb3JZZWFyID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQueWVhciksCgkgICAgICAgIGNvbnRhaW5zR3JlZ29yTUQgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5tb250aCkgfHwgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSwKCSAgICAgICAgY29udGFpbnNHcmVnb3IgPSBjb250YWluc0dyZWdvclllYXIgfHwgY29udGFpbnNHcmVnb3JNRCwKCSAgICAgICAgZGVmaW5pdGVXZWVrRGVmID0gbm9ybWFsaXplZC53ZWVrWWVhciB8fCBub3JtYWxpemVkLndlZWtOdW1iZXI7CgoJICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHsKCSAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcigiQ2FuJ3QgbWl4IHdlZWtZZWFyL3dlZWtOdW1iZXIgdW5pdHMgd2l0aCB5ZWFyL21vbnRoL2RheSBvciBvcmRpbmFscyIpOwoJICAgIH0KCgkgICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7CgkgICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5Iik7CgkgICAgfQoKCSAgICB2YXIgbWl4ZWQ7CgoJICAgIGlmIChzZXR0aW5nV2Vla1N0dWZmKSB7CgkgICAgICBtaXhlZCA9IHdlZWtUb0dyZWdvcmlhbihfZXh0ZW5kcyh7fSwgZ3JlZ29yaWFuVG9XZWVrKHRoaXMuYyksIG5vcm1hbGl6ZWQpKTsKCSAgICB9IGVsc2UgaWYgKCFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpKSB7CgkgICAgICBtaXhlZCA9IG9yZGluYWxUb0dyZWdvcmlhbihfZXh0ZW5kcyh7fSwgZ3JlZ29yaWFuVG9PcmRpbmFsKHRoaXMuYyksIG5vcm1hbGl6ZWQpKTsKCSAgICB9IGVsc2UgewoJICAgICAgbWl4ZWQgPSBfZXh0ZW5kcyh7fSwgdGhpcy50b09iamVjdCgpLCBub3JtYWxpemVkKTsgLy8gaWYgd2UgZGlkbid0IHNldCB0aGUgZGF5IGJ1dCB3ZSBlbmRlZCB1cCBvbiBhbiBvdmVyZmxvdyBkYXRlLAoJICAgICAgLy8gdXNlIHRoZSBsYXN0IGRheSBvZiB0aGUgcmlnaHQgbW9udGgKCgkgICAgICBpZiAoaXNVbmRlZmluZWQobm9ybWFsaXplZC5kYXkpKSB7CgkgICAgICAgIG1peGVkLmRheSA9IE1hdGgubWluKGRheXNJbk1vbnRoKG1peGVkLnllYXIsIG1peGVkLm1vbnRoKSwgbWl4ZWQuZGF5KTsKCSAgICAgIH0KCSAgICB9CgoJICAgIHZhciBfb2JqVG9UUzQgPSBvYmpUb1RTKG1peGVkLCB0aGlzLm8sIHRoaXMuem9uZSksCgkgICAgICAgIHRzID0gX29ialRvVFM0WzBdLAoJICAgICAgICBvID0gX29ialRvVFM0WzFdOwoKCSAgICByZXR1cm4gY2xvbmUodGhpcywgewoJICAgICAgdHM6IHRzLAoJICAgICAgbzogbwoJICAgIH0pOwoJICB9CgkgIC8qKgoJICAgKiBBZGQgYSBwZXJpb2Qgb2YgdGltZSB0byB0aGlzIERhdGVUaW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBEYXRlVGltZQoJICAgKgoJICAgKiBBZGRpbmcgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG9yIG1pbGxpc2Vjb25kcyBpbmNyZWFzZXMgdGhlIHRpbWVzdGFtcCBieSB0aGUgcmlnaHQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gQWRkaW5nIGRheXMsIG1vbnRocywgb3IgeWVhcnMgc2hpZnRzIHRoZSBjYWxlbmRhciwgYWNjb3VudGluZyBmb3IgRFNUcyBhbmQgbGVhcCB5ZWFycyBhbG9uZyB0aGUgd2F5LiBUaHVzLCBgZHQucGx1cyh7IGhvdXJzOiAyNCB9KWAgbWF5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0aW1lIHRoYW4gYGR0LnBsdXMoeyBkYXlzOiAxIH0pYCBpZiB0aGVyZSdzIGEgRFNUIHNoaWZ0IGluIGJldHdlZW4uCgkgICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KCkKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cygxMjMpIC8vfj4gaW4gMTIzIG1pbGxpc2Vjb25kcwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgbWludXRlczogMTUgfSkgLy9+PiBpbiAxNSBtaW51dGVzCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pIC8vfj4gdGhpcyB0aW1lIHRvbW9ycm93CgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAtMSB9KSAvL34+IHRoaXMgdGltZSB5ZXN0ZXJkYXkKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGhvdXJzOiAzLCBtaW51dGVzOiAxMyB9KSAvL34+IGluIDMgaHIsIDEzIG1pbgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMywgbWludXRlczogMTMgfSkpIC8vfj4gaW4gMyBociwgMTMgbWluCgkgICAqIEByZXR1cm4ge0RhdGVUaW1lfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnBsdXMgPSBmdW5jdGlvbiBwbHVzKGR1cmF0aW9uKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwoJICAgIHZhciBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTsKCSAgICByZXR1cm4gY2xvbmUodGhpcywgYWRqdXN0VGltZSh0aGlzLCBkdXIpKTsKCSAgfQoJICAvKioKCSAgICogU3VidHJhY3QgYSBwZXJpb2Qgb2YgdGltZSB0byB0aGlzIERhdGVUaW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBEYXRlVGltZQoJICAgKiBTZWUge0BsaW5rIERhdGVUaW1lI3BsdXN9CgkgICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIHN1YnRyYWN0LiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKQoJICAgQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBfcHJvdG8ubWludXMgPSBmdW5jdGlvbiBtaW51cyhkdXJhdGlvbikgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCSAgICB2YXIgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbikubmVnYXRlKCk7CgkgICAgcmV0dXJuIGNsb25lKHRoaXMsIGFkanVzdFRpbWUodGhpcywgZHVyKSk7CgkgIH0KCSAgLyoqCgkgICAqICJTZXQiIHRoaXMgRGF0ZVRpbWUgdG8gdGhlIGJlZ2lubmluZyBvZiBhIHVuaXQgb2YgdGltZS4KCSAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBUaGUgdW5pdCB0byBnbyB0byB0aGUgYmVnaW5uaW5nIG9mLiBDYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLCBvciAnbWlsbGlzZWNvbmQnLgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5zdGFydE9mKCdtb250aCcpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAzLTAxJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5zdGFydE9mKCd5ZWFyJykudG9JU09EYXRlKCk7IC8vPT4gJzIwMTQtMDEtMDEnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ3dlZWsnKS50b0lTT0RhdGUoKTsgLy89PiAnMjAxNC0wMy0wMycsIHdlZWtzIGFsd2F5cyBzdGFydCBvbiBNb25kYXlzCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5zdGFydE9mKCdkYXknKS50b0lTT1RpbWUoKTsgLy89PiAnMDA6MDAuMDAwLTA1OjAwJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuc3RhcnRPZignaG91cicpLnRvSVNPVGltZSgpOyAvLz0+ICcwNTowMDowMC4wMDAtMDU6MDAnCgkgICAqIEByZXR1cm4ge0RhdGVUaW1lfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnN0YXJ0T2YgPSBmdW5jdGlvbiBzdGFydE9mKHVuaXQpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CgkgICAgdmFyIG8gPSB7fSwKCSAgICAgICAgbm9ybWFsaXplZFVuaXQgPSBEdXJhdGlvbi5ub3JtYWxpemVVbml0KHVuaXQpOwoKCSAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRVbml0KSB7CgkgICAgICBjYXNlICJ5ZWFycyI6CgkgICAgICAgIG8ubW9udGggPSAxOwoJICAgICAgLy8gZmFsbHMgdGhyb3VnaAoKCSAgICAgIGNhc2UgInF1YXJ0ZXJzIjoKCSAgICAgIGNhc2UgIm1vbnRocyI6CgkgICAgICAgIG8uZGF5ID0gMTsKCSAgICAgIC8vIGZhbGxzIHRocm91Z2gKCgkgICAgICBjYXNlICJ3ZWVrcyI6CgkgICAgICBjYXNlICJkYXlzIjoKCSAgICAgICAgby5ob3VyID0gMDsKCSAgICAgIC8vIGZhbGxzIHRocm91Z2gKCgkgICAgICBjYXNlICJob3VycyI6CgkgICAgICAgIG8ubWludXRlID0gMDsKCSAgICAgIC8vIGZhbGxzIHRocm91Z2gKCgkgICAgICBjYXNlICJtaW51dGVzIjoKCSAgICAgICAgby5zZWNvbmQgPSAwOwoJICAgICAgLy8gZmFsbHMgdGhyb3VnaAoKCSAgICAgIGNhc2UgInNlY29uZHMiOgoJICAgICAgICBvLm1pbGxpc2Vjb25kID0gMDsKCSAgICAgICAgYnJlYWs7CgkgICAgICAvLyBubyBkZWZhdWx0LCBpbnZhbGlkIHVuaXRzIHRocm93IGluIG5vcm1hbGl6ZVVuaXQoKQoJICAgIH0KCgkgICAgaWYgKG5vcm1hbGl6ZWRVbml0ID09PSAid2Vla3MiKSB7CgkgICAgICBvLndlZWtkYXkgPSAxOwoJICAgIH0KCgkgICAgaWYgKG5vcm1hbGl6ZWRVbml0ID09PSAicXVhcnRlcnMiKSB7CgkgICAgICB2YXIgcSA9IE1hdGguY2VpbCh0aGlzLm1vbnRoIC8gMyk7CgkgICAgICBvLm1vbnRoID0gKHEgLSAxKSAqIDMgKyAxOwoJICAgIH0KCgkgICAgcmV0dXJuIHRoaXMuc2V0KG8pOwoJICB9CgkgIC8qKgoJICAgKiAiU2V0IiB0aGlzIERhdGVUaW1lIHRvIHRoZSBlbmQgKG1lYW5pbmcgdGhlIGxhc3QgbWlsbGlzZWNvbmQpIG9mIGEgdW5pdCBvZiB0aW1lCgkgICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gVGhlIHVuaXQgdG8gZ28gdG8gdGhlIGVuZCBvZi4gQ2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJywgb3IgJ21pbGxpc2Vjb25kJy4KCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ21vbnRoJykudG9JU08oKTsgLy89PiAnMjAxNC0wMy0zMVQyMzo1OTo1OS45OTktMDU6MDAnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLmVuZE9mKCd5ZWFyJykudG9JU08oKTsgLy89PiAnMjAxNC0xMi0zMVQyMzo1OTo1OS45OTktMDU6MDAnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLmVuZE9mKCd3ZWVrJykudG9JU08oKTsgLy8gPT4gJzIwMTQtMDMtMDlUMjM6NTk6NTkuOTk5LTA1OjAwJywgd2Vla3Mgc3RhcnQgb24gTW9uZGF5cwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuZW5kT2YoJ2RheScpLnRvSVNPKCk7IC8vPT4gJzIwMTQtMDMtMDNUMjM6NTk6NTkuOTk5LTA1OjAwJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuZW5kT2YoJ2hvdXInKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTAzVDA1OjU5OjU5Ljk5OS0wNTowMCcKCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBfcHJvdG8uZW5kT2YgPSBmdW5jdGlvbiBlbmRPZih1bml0KSB7CgkgICAgdmFyIF90aGlzJHBsdXM7CgoJICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnBsdXMoKF90aGlzJHBsdXMgPSB7fSwgX3RoaXMkcGx1c1t1bml0XSA9IDEsIF90aGlzJHBsdXMpKS5zdGFydE9mKHVuaXQpLm1pbnVzKDEpIDogdGhpczsKCSAgfSAvLyBPVVRQVVQKCgkgIC8qKgoJICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcuCgkgICAqICoqWW91IG1heSBub3Qgd2FudCB0aGlzLioqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvciBhIG1vcmUgZmxleGlibGUgZm9ybWF0dGluZyB0b29sLiBGb3IgYSB0YWJsZSBvZiB0b2tlbnMgYW5kIHRoZWlyIGludGVycHJldGF0aW9ucywgc2VlIFtoZXJlXShodHRwczovL21vbWVudC5naXRodWIuaW8vbHV4b24vIy9mb3JtYXR0aW5nP2lkPXRhYmxlLW9mLXRva2VucykuCgkgICAqIERlZmF1bHRzIHRvIGVuLVVTIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN5c3RlbSdzIGxvY2FsZS4KCSAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgc3RyaW5nCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0cyB0byBvdmVycmlkZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9uIHRoaXMgRGF0ZVRpbWUKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoJ3l5eXkgTExMIGRkJykgLy89PiAnMjAxNyBBcHIgMjInCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZSgnZnInKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnKSAvLz0+ICcyMDE3IGF2ci4gMjInCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KCd5eXl5IExMTCBkZCcsIHsgbG9jYWxlOiAiZnIiIH0pIC8vPT4gJzIwMTcgYXZyLiAyMicKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoIkhIICdob3VycyBhbmQnIG1tICdtaW51dGVzJyIpIC8vPT4gJzIwIGhvdXJzIGFuZCA1NSBtaW51dGVzJwoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9Gb3JtYXQgPSBmdW5jdGlvbiB0b0Zvcm1hdChmbXQsIG9wdHMpIHsKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5yZWRlZmF1bHRUb0VOKG9wdHMpKS5mb3JtYXREYXRlVGltZUZyb21TdHJpbmcodGhpcywgZm10KSA6IElOVkFMSUQ7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYSBsb2NhbGl6ZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIGRhdGUuIEFjY2VwdHMgdGhlIHNhbWUgb3B0aW9ucyBhcyB0aGUgSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBhbmQgYW55IHByZXNldHMgZGVmaW5lZCBieSBMdXhvbiwgc3VjaCBhcyBgRGF0ZVRpbWUuREFURV9GVUxMYCBvciBgRGF0ZVRpbWUuVElNRV9TSU1QTEVgLgoJICAgKiBUaGUgZXhhY3QgYmVoYXZpb3Igb2YgdGhpcyBtZXRob2QgaXMgYnJvd3Nlci1zcGVjaWZpYywgYnV0IGluIGdlbmVyYWwgaXQgd2lsbCByZXR1cm4gYW4gYXBwcm9wcmlhdGUgcmVwcmVzZW50YXRpb24KCSAgICogb2YgdGhlIERhdGVUaW1lIGluIHRoZSBhc3NpZ25lZCBsb2NhbGUuCgkgICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZAoJICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0CgkgICAqIEBwYXJhbSBmb3JtYXRPcHRzIHtPYmplY3R9IC0gSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBvcHRpb25zIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRzIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhpcyBEYXRlVGltZQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZygpOyAvLz0+IDQvMjAvMjAxNwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoJ2VuLWdiJykudG9Mb2NhbGVTdHJpbmcoKTsgLy89PiAnMjAvMDQvMjAxNycKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyBsb2NhbGU6ICdlbi1nYicgfSk7IC8vPT4gJzIwLzA0LzIwMTcnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVfRlVMTCk7IC8vPT4gJ0FwcmlsIDIwLCAyMDE3JwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5USU1FX1NJTVBMRSk7IC8vPT4gJzExOjMyIEFNJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFVElNRV9TSE9SVCk7IC8vPT4gJzQvMjAvMjAxNywgMTE6MzIgQU0nCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgd2Vla2RheTogJ2xvbmcnLCBtb250aDogJ2xvbmcnLCBkYXk6ICcyLWRpZ2l0JyB9KTsgLy89PiAnVGh1cnNkYXksIEFwcmlsIDIwJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IHdlZWtkYXk6ICdzaG9ydCcsIG1vbnRoOiAnc2hvcnQnLCBkYXk6ICcyLWRpZ2l0JywgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTsgLy89PiAnVGh1LCBBcHIgMjAsIDExOjI3IEFNJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcsIGhvdXJDeWNsZTogJ2gyMycgfSk7IC8vPT4gJzExOjMyJwoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZyhmb3JtYXRPcHRzLCBvcHRzKSB7CgkgICAgaWYgKGZvcm1hdE9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgZm9ybWF0T3B0cyA9IERBVEVfU0hPUlQ7CgkgICAgfQoKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5jbG9uZShvcHRzKSwgZm9ybWF0T3B0cykuZm9ybWF0RGF0ZVRpbWUodGhpcykgOiBJTlZBTElEOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGZvcm1hdCAicGFydHMiLCBtZWFuaW5nIGluZGl2aWR1YWwgdG9rZW5zIGFsb25nIHdpdGggbWV0YWRhdGEuIFRoaXMgaXMgYWxsb3dzIGNhbGxlcnMgdG8gcG9zdC1wcm9jZXNzIGluZGl2aWR1YWwgc2VjdGlvbnMgb2YgdGhlIGZvcm1hdHRlZCBvdXRwdXQuCgkgICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZAoJICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0L2Zvcm1hdFRvUGFydHMKCSAgICogQHBhcmFtIG9wdHMge09iamVjdH0gLSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIG9wdGlvbnMsIHNhbWUgYXMgYHRvTG9jYWxlU3RyaW5nYC4KCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVQYXJ0cygpOyAvLz0+IFsKCSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdkYXknLCB2YWx1ZTogJzI1JyB9LAoJICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogJy8nIH0sCgkgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnbW9udGgnLCB2YWx1ZTogJzA1JyB9LAoJICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogJy8nIH0sCgkgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAneWVhcicsIHZhbHVlOiAnMTk4MicgfQoJICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiBdCgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9Mb2NhbGVQYXJ0cyA9IGZ1bmN0aW9uIHRvTG9jYWxlUGFydHMob3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLmNsb25lKG9wdHMpLCBvcHRzKS5mb3JtYXREYXRlVGltZVBhcnRzKHRoaXMpIDogW107CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDAKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc1NlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDAKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJwoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmV4dGVuZGVkWm9uZT10cnVlXSAtIGFkZCB0aGUgdGltZSB6b25lIGZvcm1hdCBleHRlbnNpb24KCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0CgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgzLCA1LCAyNSkudG9JU08oKSAvLz0+ICcxOTgyLTA1LTI1VDAwOjAwOjAwLjAwMFonCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy89PiAnMjAxNy0wNC0yMlQyMDo0NzowNS4zMzUtMDQ6MDAnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMjAxNy0wNC0yMlQyMDo0NzowNS4zMzUnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzIwMTcwNDIyVDIwNDcwNS4zMzUtMDQwMCcKCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvSVNPID0gZnVuY3Rpb24gdG9JU08oX3RlbXAzKSB7CgkgICAgdmFyIF9yZWY0ID0gX3RlbXAzID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wMywKCSAgICAgICAgX3JlZjQkZm9ybWF0ID0gX3JlZjQuZm9ybWF0LAoJICAgICAgICBmb3JtYXQgPSBfcmVmNCRmb3JtYXQgPT09IHZvaWQgMCA/ICJleHRlbmRlZCIgOiBfcmVmNCRmb3JtYXQsCgkgICAgICAgIF9yZWY0JHN1cHByZXNzU2Vjb25kcyA9IF9yZWY0LnN1cHByZXNzU2Vjb25kcywKCSAgICAgICAgc3VwcHJlc3NTZWNvbmRzID0gX3JlZjQkc3VwcHJlc3NTZWNvbmRzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY0JHN1cHByZXNzU2Vjb25kcywKCSAgICAgICAgX3JlZjQkc3VwcHJlc3NNaWxsaXNlID0gX3JlZjQuc3VwcHJlc3NNaWxsaXNlY29uZHMsCgkgICAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzID0gX3JlZjQkc3VwcHJlc3NNaWxsaXNlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY0JHN1cHByZXNzTWlsbGlzZSwKCSAgICAgICAgX3JlZjQkaW5jbHVkZU9mZnNldCA9IF9yZWY0LmluY2x1ZGVPZmZzZXQsCgkgICAgICAgIGluY2x1ZGVPZmZzZXQgPSBfcmVmNCRpbmNsdWRlT2Zmc2V0ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjQkaW5jbHVkZU9mZnNldCwKCSAgICAgICAgX3JlZjQkZXh0ZW5kZWRab25lID0gX3JlZjQuZXh0ZW5kZWRab25lLAoJICAgICAgICBleHRlbmRlZFpvbmUgPSBfcmVmNCRleHRlbmRlZFpvbmUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjQkZXh0ZW5kZWRab25lOwoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgewoJICAgICAgcmV0dXJuIG51bGw7CgkgICAgfQoKCSAgICB2YXIgZXh0ID0gZm9ybWF0ID09PSAiZXh0ZW5kZWQiOwoKCSAgICB2YXIgYyA9IF90b0lTT0RhdGUodGhpcywgZXh0KTsKCgkgICAgYyArPSAiVCI7CgkgICAgYyArPSBfdG9JU09UaW1lKHRoaXMsIGV4dCwgc3VwcHJlc3NTZWNvbmRzLCBzdXBwcmVzc01pbGxpc2Vjb25kcywgaW5jbHVkZU9mZnNldCwgZXh0ZW5kZWRab25lKTsKCSAgICByZXR1cm4gYzsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUncyBkYXRlIGNvbXBvbmVudAoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0CgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09EYXRlKCkgLy89PiAnMTk4Mi0wNS0yNScKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDE5ODIsIDUsIDI1KS50b0lTT0RhdGUoeyBmb3JtYXQ6ICdiYXNpYycgfSkgLy89PiAnMTk4MjA1MjUnCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0lTT0RhdGUgPSBmdW5jdGlvbiB0b0lTT0RhdGUoX3RlbXA0KSB7CgkgICAgdmFyIF9yZWY1ID0gX3RlbXA0ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNCwKCSAgICAgICAgX3JlZjUkZm9ybWF0ID0gX3JlZjUuZm9ybWF0LAoJICAgICAgICBmb3JtYXQgPSBfcmVmNSRmb3JtYXQgPT09IHZvaWQgMCA/ICJleHRlbmRlZCIgOiBfcmVmNSRmb3JtYXQ7CgoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7CgkgICAgICByZXR1cm4gbnVsbDsKCSAgICB9CgoJICAgIHJldHVybiBfdG9JU09EYXRlKHRoaXMsIGZvcm1hdCA9PT0gImV4dGVuZGVkIik7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lJ3Mgd2VlayBkYXRlCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09XZWVrRGF0ZSgpIC8vPT4gJzE5ODItVzIxLTInCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0lTT1dlZWtEYXRlID0gZnVuY3Rpb24gdG9JU09XZWVrRGF0ZSgpIHsKCSAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMsICJra2trLSdXJ1dXLWMiKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUncyB0aW1lIGNvbXBvbmVudAoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCcKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5leHRlbmRlZFpvbmU9dHJ1ZV0gLSBhZGQgdGhlIHRpbWUgem9uZSBmb3JtYXQgZXh0ZW5zaW9uCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVByZWZpeD1mYWxzZV0gLSBpbmNsdWRlIHRoZSBgVGAgcHJlZml4CgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdAoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSgpIC8vPT4gJzA3OjM0OjE5LjM2MVonCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQsIHNlY29uZHM6IDAsIG1pbGxpc2Vjb25kczogMCB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc1NlY29uZHM6IHRydWUgfSkgLy89PiAnMDc6MzRaJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcwNzM0MTkuMzYxWicKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCB9KS50b0lTT1RpbWUoeyBpbmNsdWRlUHJlZml4OiB0cnVlIH0pIC8vPT4gJ1QwNzozNDoxOS4zNjFaJwoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9JU09UaW1lID0gZnVuY3Rpb24gdG9JU09UaW1lKF90ZW1wNSkgewoJICAgIHZhciBfcmVmNiA9IF90ZW1wNSA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDUsCgkgICAgICAgIF9yZWY2JHN1cHByZXNzTWlsbGlzZSA9IF9yZWY2LnN1cHByZXNzTWlsbGlzZWNvbmRzLAoJICAgICAgICBzdXBwcmVzc01pbGxpc2Vjb25kcyA9IF9yZWY2JHN1cHByZXNzTWlsbGlzZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmNiRzdXBwcmVzc01pbGxpc2UsCgkgICAgICAgIF9yZWY2JHN1cHByZXNzU2Vjb25kcyA9IF9yZWY2LnN1cHByZXNzU2Vjb25kcywKCSAgICAgICAgc3VwcHJlc3NTZWNvbmRzID0gX3JlZjYkc3VwcHJlc3NTZWNvbmRzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY2JHN1cHByZXNzU2Vjb25kcywKCSAgICAgICAgX3JlZjYkaW5jbHVkZU9mZnNldCA9IF9yZWY2LmluY2x1ZGVPZmZzZXQsCgkgICAgICAgIGluY2x1ZGVPZmZzZXQgPSBfcmVmNiRpbmNsdWRlT2Zmc2V0ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjYkaW5jbHVkZU9mZnNldCwKCSAgICAgICAgX3JlZjYkaW5jbHVkZVByZWZpeCA9IF9yZWY2LmluY2x1ZGVQcmVmaXgsCgkgICAgICAgIGluY2x1ZGVQcmVmaXggPSBfcmVmNiRpbmNsdWRlUHJlZml4ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY2JGluY2x1ZGVQcmVmaXgsCgkgICAgICAgIF9yZWY2JGV4dGVuZGVkWm9uZSA9IF9yZWY2LmV4dGVuZGVkWm9uZSwKCSAgICAgICAgZXh0ZW5kZWRab25lID0gX3JlZjYkZXh0ZW5kZWRab25lID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY2JGV4dGVuZGVkWm9uZSwKCSAgICAgICAgX3JlZjYkZm9ybWF0ID0gX3JlZjYuZm9ybWF0LAoJICAgICAgICBmb3JtYXQgPSBfcmVmNiRmb3JtYXQgPT09IHZvaWQgMCA/ICJleHRlbmRlZCIgOiBfcmVmNiRmb3JtYXQ7CgoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7CgkgICAgICByZXR1cm4gbnVsbDsKCSAgICB9CgoJICAgIHZhciBjID0gaW5jbHVkZVByZWZpeCA/ICJUIiA6ICIiOwoJICAgIHJldHVybiBjICsgX3RvSVNPVGltZSh0aGlzLCBmb3JtYXQgPT09ICJleHRlbmRlZCIsIHN1cHByZXNzU2Vjb25kcywgc3VwcHJlc3NNaWxsaXNlY29uZHMsIGluY2x1ZGVPZmZzZXQsIGV4dGVuZGVkWm9uZSk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYW4gUkZDIDI4MjItY29tcGF0aWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvUkZDMjgyMigpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgKzAwMDAnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1JGQzI4MjIoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwIC0wNDAwJwoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9SRkMyODIyID0gZnVuY3Rpb24gdG9SRkMyODIyKCkgewoJICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcywgIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgWlpaIiwgZmFsc2UpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBIVFRQIGhlYWRlcnMuIFRoZSBvdXRwdXQgaXMgYWx3YXlzIGV4cHJlc3NlZCBpbiBHTVQuCgkgICAqIFNwZWNpZmljYWxseSwgdGhlIHN0cmluZyBjb25mb3JtcyB0byBSRkMgMTEyMy4KCSAgICogQHNlZSBodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMzLmh0bWwjc2VjMy4zLjEKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b0hUVFAoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwIEdNVCcKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzLCAxOSkudG9IVFRQKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAxOTowMDowMCBHTVQnCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0hUVFAgPSBmdW5jdGlvbiB0b0hUVFAoKSB7CgkgICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLnRvVVRDKCksICJFRUUsIGRkIExMTCB5eXl5IEhIOm1tOnNzICdHTVQnIik7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBEYXRlCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9TUUxEYXRlKCkgLy89PiAnMjAxNC0wNy0xMycKCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvU1FMRGF0ZSA9IGZ1bmN0aW9uIHRvU1FMRGF0ZSgpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgewoJICAgICAgcmV0dXJuIG51bGw7CgkgICAgfQoKCSAgICByZXR1cm4gX3RvSVNPRGF0ZSh0aGlzLCB0cnVlKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gU1FMIFRpbWUKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVpvbmU9ZmFsc2VdIC0gaW5jbHVkZSB0aGUgem9uZSwgc3VjaCBhcyAnQW1lcmljYS9OZXdfWW9yaycuIE92ZXJyaWRlcyBpbmNsdWRlT2Zmc2V0LgoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXQ9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJ1onIG9yICctMDQ6MDAnCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldFNwYWNlPXRydWVdIC0gaW5jbHVkZSB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgdGltZSBhbmQgdGhlIG9mZnNldCwgc3VjaCBhcyAnMDU6MTU6MTYuMzQ1IC0wNDowMCcKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkudG9TUUwoKSAvLz0+ICcwNToxNToxNi4zNDUnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvU1FMKCkgLy89PiAnMDU6MTU6MTYuMzQ1IC0wNDowMCcKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9TUUwoeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSAvLz0+ICcwNToxNToxNi4zNDUnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvU1FMKHsgaW5jbHVkZVpvbmU6IGZhbHNlIH0pIC8vPT4gJzA1OjE1OjE2LjM0NSBBbWVyaWNhL05ld19Zb3JrJwoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9TUUxUaW1lID0gZnVuY3Rpb24gdG9TUUxUaW1lKF90ZW1wNikgewoJICAgIHZhciBfcmVmNyA9IF90ZW1wNiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDYsCgkgICAgICAgIF9yZWY3JGluY2x1ZGVPZmZzZXQgPSBfcmVmNy5pbmNsdWRlT2Zmc2V0LAoJICAgICAgICBpbmNsdWRlT2Zmc2V0ID0gX3JlZjckaW5jbHVkZU9mZnNldCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWY3JGluY2x1ZGVPZmZzZXQsCgkgICAgICAgIF9yZWY3JGluY2x1ZGVab25lID0gX3JlZjcuaW5jbHVkZVpvbmUsCgkgICAgICAgIGluY2x1ZGVab25lID0gX3JlZjckaW5jbHVkZVpvbmUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjckaW5jbHVkZVpvbmUsCgkgICAgICAgIF9yZWY3JGluY2x1ZGVPZmZzZXRTcCA9IF9yZWY3LmluY2x1ZGVPZmZzZXRTcGFjZSwKCSAgICAgICAgaW5jbHVkZU9mZnNldFNwYWNlID0gX3JlZjckaW5jbHVkZU9mZnNldFNwID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjckaW5jbHVkZU9mZnNldFNwOwoKCSAgICB2YXIgZm10ID0gIkhIOm1tOnNzLlNTUyI7CgoJICAgIGlmIChpbmNsdWRlWm9uZSB8fCBpbmNsdWRlT2Zmc2V0KSB7CgkgICAgICBpZiAoaW5jbHVkZU9mZnNldFNwYWNlKSB7CgkgICAgICAgIGZtdCArPSAiICI7CgkgICAgICB9CgoJICAgICAgaWYgKGluY2x1ZGVab25lKSB7CgkgICAgICAgIGZtdCArPSAieiI7CgkgICAgICB9IGVsc2UgaWYgKGluY2x1ZGVPZmZzZXQpIHsKCSAgICAgICAgZm10ICs9ICJaWiI7CgkgICAgICB9CgkgICAgfQoKCSAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMsIGZtdCwgdHJ1ZSk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBEYXRlVGltZQoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlWm9uZT1mYWxzZV0gLSBpbmNsdWRlIHRoZSB6b25lLCBzdWNoIGFzICdBbWVyaWNhL05ld19Zb3JrJy4gT3ZlcnJpZGVzIGluY2x1ZGVPZmZzZXQuCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCcKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0U3BhY2U9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCB0aGUgb2Zmc2V0LCBzdWNoIGFzICcwNToxNToxNi4zNDUgLTA0OjAwJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvU1FMKCkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgWicKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKCkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgLTA0OjAwJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCA3LCAxMykudG9TUUwoeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSAvLz0+ICcyMDE0LTA3LTEzIDAwOjAwOjAwLjAwMCcKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKHsgaW5jbHVkZVpvbmU6IHRydWUgfSkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgQW1lcmljYS9OZXdfWW9yaycKCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvU1FMID0gZnVuY3Rpb24gdG9TUUwob3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7CgkgICAgICByZXR1cm4gbnVsbDsKCSAgICB9CgoJICAgIHJldHVybiB0aGlzLnRvU1FMRGF0ZSgpICsgIiAiICsgdGhpcy50b1NRTFRpbWUob3B0cyk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgZGVidWdnaW5nCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewoJICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRvSVNPKCkgOiBJTlZBTElEOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBtaWxsaXNlY29uZHMgb2YgdGhpcyBEYXRlVGltZS4gQWxpYXMgb2Yge0BsaW5rIERhdGVUaW1lI3RvTWlsbGlzfQoJICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udmFsdWVPZiA9IGZ1bmN0aW9uIHZhbHVlT2YoKSB7CgkgICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyB0aGUgZXBvY2ggbWlsbGlzZWNvbmRzIG9mIHRoaXMgRGF0ZVRpbWUuCgkgICAqIEByZXR1cm4ge251bWJlcn0KCSAgICovCgkgIDsKCgkgIF9wcm90by50b01pbGxpcyA9IGZ1bmN0aW9uIHRvTWlsbGlzKCkgewoJICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRzIDogTmFOOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBzZWNvbmRzIG9mIHRoaXMgRGF0ZVRpbWUuCgkgICAqIEByZXR1cm4ge251bWJlcn0KCSAgICovCgkgIDsKCgkgIF9wcm90by50b1NlY29uZHMgPSBmdW5jdGlvbiB0b1NlY29uZHMoKSB7CgkgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgLyAxMDAwIDogTmFOOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBzZWNvbmRzIChhcyBhIHdob2xlIG51bWJlcikgb2YgdGhpcyBEYXRlVGltZS4KCSAgICogQHJldHVybiB7bnVtYmVyfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvVW5peEludGVnZXIgPSBmdW5jdGlvbiB0b1VuaXhJbnRlZ2VyKCkgewoJICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBNYXRoLmZsb29yKHRoaXMudHMgLyAxMDAwKSA6IE5hTjsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBJU08gODYwMSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gSlNPTi4KCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHsKCSAgICByZXR1cm4gdGhpcy50b0lTTygpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGEgQlNPTiBzZXJpYWxpemFibGUgZXF1aXZhbGVudCB0byB0aGlzIERhdGVUaW1lLgoJICAgKiBAcmV0dXJuIHtEYXRlfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvQlNPTiA9IGZ1bmN0aW9uIHRvQlNPTigpIHsKCSAgICByZXR1cm4gdGhpcy50b0pTRGF0ZSgpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCB0aGlzIERhdGVUaW1lJ3MgeWVhciwgbW9udGgsIGRheSwgYW5kIHNvIG9uLgoJICAgKiBAcGFyYW0gb3B0cyAtIG9wdGlvbnMgZm9yIGdlbmVyYXRpbmcgdGhlIG9iamVjdAoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVDb25maWc9ZmFsc2VdIC0gaW5jbHVkZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMgaW4gdGhlIG91dHB1dAoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b09iamVjdCgpIC8vPT4geyB5ZWFyOiAyMDE3LCBtb250aDogNCwgZGF5OiAyMiwgaG91cjogMjAsIG1pbnV0ZTogNDksIHNlY29uZDogNDIsIG1pbGxpc2Vjb25kOiAyNjggfQoJICAgKiBAcmV0dXJuIHtPYmplY3R9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTsKCgkgICAgdmFyIGJhc2UgPSBfZXh0ZW5kcyh7fSwgdGhpcy5jKTsKCgkgICAgaWYgKG9wdHMuaW5jbHVkZUNvbmZpZykgewoJICAgICAgYmFzZS5vdXRwdXRDYWxlbmRhciA9IHRoaXMub3V0cHV0Q2FsZW5kYXI7CgkgICAgICBiYXNlLm51bWJlcmluZ1N5c3RlbSA9IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbTsKCSAgICAgIGJhc2UubG9jYWxlID0gdGhpcy5sb2MubG9jYWxlOwoJICAgIH0KCgkgICAgcmV0dXJuIGJhc2U7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYSBKYXZhU2NyaXB0IERhdGUgZXF1aXZhbGVudCB0byB0aGlzIERhdGVUaW1lLgoJICAgKiBAcmV0dXJuIHtEYXRlfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvSlNEYXRlID0gZnVuY3Rpb24gdG9KU0RhdGUoKSB7CgkgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgOiBOYU4pOwoJICB9IC8vIENPTVBBUkUKCgkgIC8qKgoJICAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gRGF0ZVRpbWVzIGFzIGEgRHVyYXRpb24uCgkgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyRGF0ZVRpbWUgLSB0aGUgRGF0ZVRpbWUgdG8gY29tcGFyZSB0aGlzIG9uZSB0bwoJICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3VuaXQ9WydtaWxsaXNlY29uZHMnXV0gLSB0aGUgdW5pdCBvciBhcnJheSBvZiB1bml0cyAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gaW5jbHVkZSBpbiB0aGUgZHVyYXRpb24uCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZQoJICAgKiBAZXhhbXBsZQoJICAgKiB2YXIgaTEgPSBEYXRlVGltZS5mcm9tSVNPKCcxOTgyLTA1LTI1VDA5OjQ1JyksCgkgICAqICAgICBpMiA9IERhdGVUaW1lLmZyb21JU08oJzE5ODMtMTAtMTRUMTA6MzAnKTsKCSAgICogaTIuZGlmZihpMSkudG9PYmplY3QoKSAvLz0+IHsgbWlsbGlzZWNvbmRzOiA0MzgwNzUwMDAwMCB9CgkgICAqIGkyLmRpZmYoaTEsICdob3VycycpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMjE2OC43NSB9CgkgICAqIGkyLmRpZmYoaTEsIFsnbW9udGhzJywgJ2RheXMnXSkudG9PYmplY3QoKSAvLz0+IHsgbW9udGhzOiAxNiwgZGF5czogMTkuMDMxMjUgfQoJICAgKiBpMi5kaWZmKGkxLCBbJ21vbnRocycsICdkYXlzJywgJ2hvdXJzJ10pLnRvT2JqZWN0KCkgLy89PiB7IG1vbnRoczogMTYsIGRheXM6IDE5LCBob3VyczogMC43NSB9CgkgICAqIEByZXR1cm4ge0R1cmF0aW9ufQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLmRpZmYgPSBmdW5jdGlvbiBkaWZmKG90aGVyRGF0ZVRpbWUsIHVuaXQsIG9wdHMpIHsKCSAgICBpZiAodW5pdCA9PT0gdm9pZCAwKSB7CgkgICAgICB1bml0ID0gIm1pbGxpc2Vjb25kcyI7CgkgICAgfQoKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhb3RoZXJEYXRlVGltZS5pc1ZhbGlkKSB7CgkgICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZCgiY3JlYXRlZCBieSBkaWZmaW5nIGFuIGludmFsaWQgRGF0ZVRpbWUiKTsKCSAgICB9CgoJICAgIHZhciBkdXJPcHRzID0gX2V4dGVuZHMoewoJICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSwKCSAgICAgIG51bWJlcmluZ1N5c3RlbTogdGhpcy5udW1iZXJpbmdTeXN0ZW0KCSAgICB9LCBvcHRzKTsKCgkgICAgdmFyIHVuaXRzID0gbWF5YmVBcnJheSh1bml0KS5tYXAoRHVyYXRpb24ubm9ybWFsaXplVW5pdCksCgkgICAgICAgIG90aGVySXNMYXRlciA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpID4gdGhpcy52YWx1ZU9mKCksCgkgICAgICAgIGVhcmxpZXIgPSBvdGhlcklzTGF0ZXIgPyB0aGlzIDogb3RoZXJEYXRlVGltZSwKCSAgICAgICAgbGF0ZXIgPSBvdGhlcklzTGF0ZXIgPyBvdGhlckRhdGVUaW1lIDogdGhpcywKCSAgICAgICAgZGlmZmVkID0gX2RpZmYoZWFybGllciwgbGF0ZXIsIHVuaXRzLCBkdXJPcHRzKTsKCgkgICAgcmV0dXJuIG90aGVySXNMYXRlciA/IGRpZmZlZC5uZWdhdGUoKSA6IGRpZmZlZDsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBEYXRlVGltZSBhbmQgcmlnaHQgbm93LgoJICAgKiBTZWUge0BsaW5rIERhdGVUaW1lI2RpZmZ9CgkgICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbdW5pdD1bJ21pbGxpc2Vjb25kcyddXSAtIHRoZSB1bml0IG9yIHVuaXRzIHVuaXRzIChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byBpbmNsdWRlIGluIHRoZSBkdXJhdGlvbgoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIHRoZSBEdXJhdGlvbgoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2UKCSAgICogQHJldHVybiB7RHVyYXRpb259CgkgICAqLwoJICA7CgoJICBfcHJvdG8uZGlmZk5vdyA9IGZ1bmN0aW9uIGRpZmZOb3codW5pdCwgb3B0cykgewoJICAgIGlmICh1bml0ID09PSB2b2lkIDApIHsKCSAgICAgIHVuaXQgPSAibWlsbGlzZWNvbmRzIjsKCSAgICB9CgoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHJldHVybiB0aGlzLmRpZmYoRGF0ZVRpbWUubm93KCksIHVuaXQsIG9wdHMpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgc3Bhbm5pbmcgYmV0d2VlbiB0aGlzIERhdGVUaW1lIGFuZCBhbm90aGVyIERhdGVUaW1lCgkgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyRGF0ZVRpbWUgLSB0aGUgb3RoZXIgZW5kIHBvaW50IG9mIHRoZSBJbnRlcnZhbAoJICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KCSAgICovCgkgIDsKCgkgIF9wcm90by51bnRpbCA9IGZ1bmN0aW9uIHVudGlsKG90aGVyRGF0ZVRpbWUpIHsKCSAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyh0aGlzLCBvdGhlckRhdGVUaW1lKSA6IHRoaXM7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgRGF0ZVRpbWUgaXMgaW4gdGhlIHNhbWUgdW5pdCBvZiB0aW1lIGFzIGFub3RoZXIgRGF0ZVRpbWUuCgkgICAqIEhpZ2hlci1vcmRlciB1bml0cyBtdXN0IGFsc28gYmUgaWRlbnRpY2FsIGZvciB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiBgdHJ1ZWAuCgkgICAqIE5vdGUgdGhhdCB0aW1lIHpvbmVzIGFyZSAqKmlnbm9yZWQqKiBpbiB0aGlzIGNvbXBhcmlzb24sIHdoaWNoIGNvbXBhcmVzIHRoZSAqKmxvY2FsKiogY2FsZW5kYXIgdGltZS4gVXNlIHtAbGluayBEYXRlVGltZSNzZXRab25lfSB0byBjb252ZXJ0IG9uZSBvZiB0aGUgZGF0ZXMgaWYgbmVlZGVkLgoJICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIG90aGVyIERhdGVUaW1lCgkgICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gdGhlIHVuaXQgb2YgdGltZSB0byBjaGVjayBzYW1lbmVzcyBvbgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5oYXNTYW1lKG90aGVyRFQsICdkYXknKTsgLy9+PiB0cnVlIGlmIG90aGVyRFQgaXMgaW4gdGhlIHNhbWUgY3VycmVudCBjYWxlbmRhciBkYXkKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5oYXNTYW1lID0gZnVuY3Rpb24gaGFzU2FtZShvdGhlckRhdGVUaW1lLCB1bml0KSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTsKCSAgICB2YXIgaW5wdXRNcyA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpOwoJICAgIHZhciBhZGp1c3RlZFRvWm9uZSA9IHRoaXMuc2V0Wm9uZShvdGhlckRhdGVUaW1lLnpvbmUsIHsKCSAgICAgIGtlZXBMb2NhbFRpbWU6IHRydWUKCSAgICB9KTsKCSAgICByZXR1cm4gYWRqdXN0ZWRUb1pvbmUuc3RhcnRPZih1bml0KSA8PSBpbnB1dE1zICYmIGlucHV0TXMgPD0gYWRqdXN0ZWRUb1pvbmUuZW5kT2YodW5pdCk7CgkgIH0KCSAgLyoqCgkgICAqIEVxdWFsaXR5IGNoZWNrCgkgICAqIFR3byBEYXRlVGltZXMgYXJlIGVxdWFsIGlmZiB0aGV5IHJlcHJlc2VudCB0aGUgc2FtZSBtaWxsaXNlY29uZCwgaGF2ZSB0aGUgc2FtZSB6b25lIGFuZCBsb2NhdGlvbiwgYW5kIGFyZSBib3RoIHZhbGlkLgoJICAgKiBUbyBjb21wYXJlIGp1c3QgdGhlIG1pbGxpc2Vjb25kIHZhbHVlcywgdXNlIGArZHQxID09PSArZHQyYC4KCSAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXIgLSB0aGUgb3RoZXIgRGF0ZVRpbWUKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHsKCSAgICByZXR1cm4gdGhpcy5pc1ZhbGlkICYmIG90aGVyLmlzVmFsaWQgJiYgdGhpcy52YWx1ZU9mKCkgPT09IG90aGVyLnZhbHVlT2YoKSAmJiB0aGlzLnpvbmUuZXF1YWxzKG90aGVyLnpvbmUpICYmIHRoaXMubG9jLmVxdWFscyhvdGhlci5sb2MpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhpcyB0aW1lIHJlbGF0aXZlIHRvIG5vdywgc3VjaCBhcyAiaW4gdHdvIGRheXMiLiBDYW4gb25seSBpbnRlcm5hdGlvbmFsaXplIGlmIHlvdXIKCSAgICogcGxhdGZvcm0gc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuIFJvdW5kcyBkb3duIGJ5IGRlZmF1bHQuCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0CgkgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zdHlsZT0ibG9uZyJdIC0gdGhlIHN0eWxlIG9mIHVuaXRzLCBtdXN0IGJlICJsb25nIiwgInNob3J0Iiwgb3IgIm5hcnJvdyIKCSAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IG9wdGlvbnMudW5pdCAtIHVzZSBhIHNwZWNpZmljIHVuaXQgb3IgYXJyYXkgb2YgdW5pdHM7IGlmIG9taXR0ZWQsIG9yIGFuIGFycmF5LCB0aGUgbWV0aG9kIHdpbGwgcGljayB0aGUgYmVzdCB1bml0LiBVc2UgYW4gYXJyYXkgb3Igb25lIG9mICJ5ZWFycyIsICJxdWFydGVycyIsICJtb250aHMiLCAid2Vla3MiLCAiZGF5cyIsICJob3VycyIsICJtaW51dGVzIiwgb3IgInNlY29uZHMiCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucm91bmQ9dHJ1ZV0gLSB3aGV0aGVyIHRvIHJvdW5kIHRoZSBudW1iZXJzIGluIHRoZSBvdXRwdXQuCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5wYWRkaW5nPTBdIC0gcGFkZGluZyBpbiBtaWxsaXNlY29uZHMuIFRoaXMgYWxsb3dzIHlvdSB0byByb3VuZCB1cCB0aGUgcmVzdWx0IGlmIGl0IGZpdHMgaW5zaWRlIHRoZSB0aHJlc2hvbGQuIERvbid0IHVzZSBpbiBjb21iaW5hdGlvbiB3aXRoIHtyb3VuZDogZmFsc2V9IGJlY2F1c2UgdGhlIGRlY2ltYWwgb3V0cHV0IHdpbGwgaW5jbHVkZSB0aGUgcGFkZGluZy4KCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubG9jYWxlIC0gb3ZlcnJpZGUgdGhlIGxvY2FsZSBvZiB0aGlzIERhdGVUaW1lCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm51bWJlcmluZ1N5c3RlbSAtIG92ZXJyaWRlIHRoZSBudW1iZXJpbmdTeXN0ZW0gb2YgdGhpcyBEYXRlVGltZS4gVGhlIEludGwgc3lzdGVtIG1heSBjaG9vc2Ugbm90IHRvIGhvbm9yIHRoaXMKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZSgpIC8vPT4gImluIDEgZGF5IgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoImVzIikudG9SZWxhdGl2ZSh7IGRheXM6IDEgfSkgLy89PiAiZGVudHJvIGRlIDEgZMOtYSIKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZSh7IGxvY2FsZTogImZyIiB9KSAvLz0+ICJkYW5zIDIzIGhldXJlcyIKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmUoKSAvLz0+ICIyIGRheXMgYWdvIgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZSh7IHVuaXQ6ICJob3VycyIgfSkgLy89PiAiNDggaG91cnMgYWdvIgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGhvdXJzOiAzNiB9KS50b1JlbGF0aXZlKHsgcm91bmQ6IGZhbHNlIH0pIC8vPT4gIjEuNSBkYXlzIGFnbyIKCSAgICovCgkgIDsKCgkgIF9wcm90by50b1JlbGF0aXZlID0gZnVuY3Rpb24gdG9SZWxhdGl2ZShvcHRpb25zKSB7CgkgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0aW9ucyA9IHt9OwoJICAgIH0KCgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBudWxsOwoJICAgIHZhciBiYXNlID0gb3B0aW9ucy5iYXNlIHx8IERhdGVUaW1lLmZyb21PYmplY3Qoe30sIHsKCSAgICAgIHpvbmU6IHRoaXMuem9uZQoJICAgIH0pLAoJICAgICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nID8gdGhpcyA8IGJhc2UgPyAtb3B0aW9ucy5wYWRkaW5nIDogb3B0aW9ucy5wYWRkaW5nIDogMDsKCSAgICB2YXIgdW5pdHMgPSBbInllYXJzIiwgIm1vbnRocyIsICJkYXlzIiwgImhvdXJzIiwgIm1pbnV0ZXMiLCAic2Vjb25kcyJdOwoJICAgIHZhciB1bml0ID0gb3B0aW9ucy51bml0OwoKCSAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnVuaXQpKSB7CgkgICAgICB1bml0cyA9IG9wdGlvbnMudW5pdDsKCSAgICAgIHVuaXQgPSB1bmRlZmluZWQ7CgkgICAgfQoKCSAgICByZXR1cm4gZGlmZlJlbGF0aXZlKGJhc2UsIHRoaXMucGx1cyhwYWRkaW5nKSwgX2V4dGVuZHMoe30sIG9wdGlvbnMsIHsKCSAgICAgIG51bWVyaWM6ICJhbHdheXMiLAoJICAgICAgdW5pdHM6IHVuaXRzLAoJICAgICAgdW5pdDogdW5pdAoJICAgIH0pKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGRhdGUgcmVsYXRpdmUgdG8gdG9kYXksIHN1Y2ggYXMgInllc3RlcmRheSIgb3IgIm5leHQgbW9udGgiLgoJICAgKiBPbmx5IGludGVybmF0aW9uYWxpemVzIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnRzIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0LgoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIG91dHB1dAoJICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBbb3B0aW9ucy5iYXNlPURhdGVUaW1lLm5vdygpXSAtIHRoZSBEYXRlVGltZSB0byB1c2UgYXMgdGhlIGJhc2lzIHRvIHdoaWNoIHRoaXMgdGltZSBpcyBjb21wYXJlZC4gRGVmYXVsdHMgdG8gbm93LgoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5sb2NhbGUgLSBvdmVycmlkZSB0aGUgbG9jYWxlIG9mIHRoaXMgRGF0ZVRpbWUKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMudW5pdCAtIHVzZSBhIHNwZWNpZmljIHVuaXQ7IGlmIG9taXR0ZWQsIHRoZSBtZXRob2Qgd2lsbCBwaWNrIHRoZSB1bml0LiBVc2Ugb25lIG9mICJ5ZWFycyIsICJxdWFydGVycyIsICJtb250aHMiLCAid2Vla3MiLCBvciAiZGF5cyIKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gb3ZlcnJpZGUgdGhlIG51bWJlcmluZ1N5c3RlbSBvZiB0aGlzIERhdGVUaW1lLiBUaGUgSW50bCBzeXN0ZW0gbWF5IGNob29zZSBub3QgdG8gaG9ub3IgdGhpcwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoKSAvLz0+ICJ0b21vcnJvdyIKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuc2V0TG9jYWxlKCJlcyIpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoKSAvLz0+ICIibWHDsWFuYSIKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZUNhbGVuZGFyKHsgbG9jYWxlOiAiZnIiIH0pIC8vPT4gImRlbWFpbiIKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmVDYWxlbmRhcigpIC8vPT4gIjIgZGF5cyBhZ28iCgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9SZWxhdGl2ZUNhbGVuZGFyID0gZnVuY3Rpb24gdG9SZWxhdGl2ZUNhbGVuZGFyKG9wdGlvbnMpIHsKCSAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRpb25zID0ge307CgkgICAgfQoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7CgkgICAgcmV0dXJuIGRpZmZSZWxhdGl2ZShvcHRpb25zLmJhc2UgfHwgRGF0ZVRpbWUuZnJvbU9iamVjdCh7fSwgewoJICAgICAgem9uZTogdGhpcy56b25lCgkgICAgfSksIHRoaXMsIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7CgkgICAgICBudW1lcmljOiAiYXV0byIsCgkgICAgICB1bml0czogWyJ5ZWFycyIsICJtb250aHMiLCAiZGF5cyJdLAoJICAgICAgY2FsZW5kYXJ5OiB0cnVlCgkgICAgfSkpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gdGhlIG1pbiBvZiBzZXZlcmFsIGRhdGUgdGltZXMKCSAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWluaW11bQoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0gdGhlIG1pbiBEYXRlVGltZSwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5taW4gPSBmdW5jdGlvbiBtaW4oKSB7CgkgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGRhdGVUaW1lcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKCSAgICAgIGRhdGVUaW1lc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKCSAgICB9CgoJICAgIGlmICghZGF0ZVRpbWVzLmV2ZXJ5KERhdGVUaW1lLmlzRGF0ZVRpbWUpKSB7CgkgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoIm1pbiByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lcyIpOwoJICAgIH0KCgkgICAgcmV0dXJuIGJlc3RCeShkYXRlVGltZXMsIGZ1bmN0aW9uIChpKSB7CgkgICAgICByZXR1cm4gaS52YWx1ZU9mKCk7CgkgICAgfSwgTWF0aC5taW4pOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gdGhlIG1heCBvZiBzZXZlcmFsIGRhdGUgdGltZXMKCSAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWF4aW11bQoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0gdGhlIG1heCBEYXRlVGltZSwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5tYXggPSBmdW5jdGlvbiBtYXgoKSB7CgkgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBkYXRlVGltZXMgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHsKCSAgICAgIGRhdGVUaW1lc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdOwoJICAgIH0KCgkgICAgaWYgKCFkYXRlVGltZXMuZXZlcnkoRGF0ZVRpbWUuaXNEYXRlVGltZSkpIHsKCSAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigibWF4IHJlcXVpcmVzIGFsbCBhcmd1bWVudHMgYmUgRGF0ZVRpbWVzIik7CgkgICAgfQoKCSAgICByZXR1cm4gYmVzdEJ5KGRhdGVUaW1lcywgZnVuY3Rpb24gKGkpIHsKCSAgICAgIHJldHVybiBpLnZhbHVlT2YoKTsKCSAgICB9LCBNYXRoLm1heCk7CgkgIH0gLy8gTUlTQwoKCSAgLyoqCgkgICAqIEV4cGxhaW4gaG93IGEgc3RyaW5nIHdvdWxkIGJlIHBhcnNlZCBieSBmcm9tRm9ybWF0KCkKCSAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgc3RyaW5nIHRvIHBhcnNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHRoZSBzdHJpbmcgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gKHNlZSBkZXNjcmlwdGlvbikKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIHRha2VuIGJ5IGZyb21Gb3JtYXQoKQoJICAgKiBAcmV0dXJuIHtPYmplY3R9CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5mcm9tRm9ybWF0RXhwbGFpbiA9IGZ1bmN0aW9uIGZyb21Gb3JtYXRFeHBsYWluKHRleHQsIGZtdCwgb3B0aW9ucykgewoJICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsKCSAgICAgIG9wdGlvbnMgPSB7fTsKCSAgICB9CgoJICAgIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsCgkgICAgICAgIF9vcHRpb25zJGxvY2FsZSA9IF9vcHRpb25zLmxvY2FsZSwKCSAgICAgICAgbG9jYWxlID0gX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyBudWxsIDogX29wdGlvbnMkbG9jYWxlLAoJICAgICAgICBfb3B0aW9ucyRudW1iZXJpbmdTeXMgPSBfb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0sCgkgICAgICAgIG51bWJlcmluZ1N5c3RlbSA9IF9vcHRpb25zJG51bWJlcmluZ1N5cyA9PT0gdm9pZCAwID8gbnVsbCA6IF9vcHRpb25zJG51bWJlcmluZ1N5cywKCSAgICAgICAgbG9jYWxlVG9Vc2UgPSBMb2NhbGUuZnJvbU9wdHMoewoJICAgICAgbG9jYWxlOiBsb2NhbGUsCgkgICAgICBudW1iZXJpbmdTeXN0ZW06IG51bWJlcmluZ1N5c3RlbSwKCSAgICAgIGRlZmF1bHRUb0VOOiB0cnVlCgkgICAgfSk7CgkgICAgcmV0dXJuIGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZVRvVXNlLCB0ZXh0LCBmbXQpOwoJICB9CgkgIC8qKgoJICAgKiBAZGVwcmVjYXRlZCB1c2UgZnJvbUZvcm1hdEV4cGxhaW4gaW5zdGVhZAoJICAgKi8KCSAgOwoKCSAgRGF0ZVRpbWUuZnJvbVN0cmluZ0V4cGxhaW4gPSBmdW5jdGlvbiBmcm9tU3RyaW5nRXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMpIHsKCSAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRpb25zID0ge307CgkgICAgfQoKCSAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdEV4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zKTsKCSAgfSAvLyBGT1JNQVQgUFJFU0VUUwoKCSAgLyoqCgkgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgMTAvMTQvMTk4MwoJICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgKi8KCSAgOwoKCSAgX2NyZWF0ZUNsYXNzKERhdGVUaW1lLCBbewoJICAgIGtleTogImlzVmFsaWQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZCA9PT0gbnVsbDsKCSAgICB9CgkgICAgLyoqCgkgICAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgRGF0ZVRpbWUgaXMgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRGF0ZVRpbWUgaXMgdmFsaWQKCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImludmFsaWRSZWFzb24iLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5yZWFzb24gOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBSZXR1cm5zIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIERhdGVUaW1lIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEYXRlVGltZSBpcyB2YWxpZAoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaW52YWxpZEV4cGxhbmF0aW9uIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIGxvY2FsZSBvZiBhIERhdGVUaW1lLCBzdWNoICdlbi1HQicuIFRoZSBsb2NhbGUgaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lCgkgICAgICoKCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImxvY2FsZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubG9jYWxlIDogbnVsbDsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBudW1iZXJpbmcgc3lzdGVtIG9mIGEgRGF0ZVRpbWUsIHN1Y2ggJ2JlbmcnLiBUaGUgbnVtYmVyaW5nIHN5c3RlbSBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRGF0ZVRpbWUKCSAgICAgKgoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAibnVtYmVyaW5nU3lzdGVtIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIG91dHB1dCBjYWxlbmRhciBvZiBhIERhdGVUaW1lLCBzdWNoICdpc2xhbWljJy4gVGhlIG91dHB1dCBjYWxlbmRhciBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRGF0ZVRpbWUKCSAgICAgKgoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAib3V0cHV0Q2FsZW5kYXIiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLm91dHB1dENhbGVuZGFyIDogbnVsbDsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSB0aW1lIHpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgRGF0ZVRpbWUuCgkgICAgICogQHR5cGUge1pvbmV9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiem9uZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5fem9uZTsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSB0aW1lIHpvbmUuCgkgICAgICogQHR5cGUge3N0cmluZ30KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJ6b25lTmFtZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy56b25lLm5hbWUgOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIHllYXIKCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkueWVhciAvLz0+IDIwMTcKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogInllYXIiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy55ZWFyIDogTmFOOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIHF1YXJ0ZXIKCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkucXVhcnRlciAvLz0+IDIKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogInF1YXJ0ZXIiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IE1hdGguY2VpbCh0aGlzLmMubW9udGggLyAzKSA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBtb250aCAoMS0xMikuCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLm1vbnRoIC8vPT4gNQoJICAgICAqIEB0eXBlIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAibW9udGgiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5tb250aCA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBkYXkgb2YgdGhlIG1vbnRoICgxLTMwaXNoKS4KCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkuZGF5IC8vPT4gMjUKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImRheSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLmRheSA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBob3VyIG9mIHRoZSBkYXkgKDAtMjMpLgoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5KS5ob3VyIC8vPT4gOQoJICAgICAqIEB0eXBlIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaG91ciIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLmhvdXIgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgbWludXRlIG9mIHRoZSBob3VyICgwLTU5KS4KCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzApLm1pbnV0ZSAvLz0+IDMwCgkgICAgICogQHR5cGUge251bWJlcn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJtaW51dGUiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5taW51dGUgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgc2Vjb25kIG9mIHRoZSBtaW51dGUgKDAtNTkpLgoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5LCAzMCwgNTIpLnNlY29uZCAvLz0+IDUyCgkgICAgICogQHR5cGUge251bWJlcn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJzZWNvbmQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5zZWNvbmQgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCAoMC05OTkpLgoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5LCAzMCwgNTIsIDY1NCkubWlsbGlzZWNvbmQgLy89PiA2NTQKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIm1pbGxpc2Vjb25kIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubWlsbGlzZWNvbmQgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgd2VlayB5ZWFyCgkgICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMTIsIDMxKS53ZWVrWWVhciAvLz0+IDIwMTUKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIndlZWtZZWFyIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKHRoaXMpLndlZWtZZWFyIDogTmFOOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIHdlZWsgbnVtYmVyIG9mIHRoZSB3ZWVrIHllYXIgKDEtNTJpc2gpLgoJICAgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZQoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS53ZWVrTnVtYmVyIC8vPT4gMjEKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIndlZWtOdW1iZXIiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla051bWJlciA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsuCgkgICAgICogMSBpcyBNb25kYXkgYW5kIDcgaXMgU3VuZGF5CgkgICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMTEsIDMxKS53ZWVrZGF5IC8vPT4gNAoJICAgICAqIEB0eXBlIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAid2Vla2RheSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gcG9zc2libHlDYWNoZWRXZWVrRGF0YSh0aGlzKS53ZWVrZGF5IDogTmFOOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIG9yZGluYWwgKG1lYW5pbmcgdGhlIGRheSBvZiB0aGUgeWVhcikKCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkub3JkaW5hbCAvLz0+IDE0NQoJICAgICAqIEB0eXBlIHtudW1iZXJ8RGF0ZVRpbWV9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAib3JkaW5hbCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gZ3JlZ29yaWFuVG9PcmRpbmFsKHRoaXMuYykub3JkaW5hbCA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBzaG9ydCBtb250aCBuYW1lLCBzdWNoIGFzICdPY3QnLgoJICAgICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZAoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkubW9udGhTaG9ydCAvLz0+IE9jdAoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAibW9udGhTaG9ydCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby5tb250aHMoInNob3J0IiwgewoJICAgICAgICBsb2NPYmo6IHRoaXMubG9jCgkgICAgICB9KVt0aGlzLm1vbnRoIC0gMV0gOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIGxvbmcgbW9udGggbmFtZSwgc3VjaCBhcyAnT2N0b2JlcicuCgkgICAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS5tb250aExvbmcgLy89PiBPY3RvYmVyCgkgICAgICogQHR5cGUge3N0cmluZ30KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJtb250aExvbmciLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ubW9udGhzKCJsb25nIiwgewoJICAgICAgICBsb2NPYmo6IHRoaXMubG9jCgkgICAgICB9KVt0aGlzLm1vbnRoIC0gMV0gOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIHNob3J0IHdlZWtkYXksIHN1Y2ggYXMgJ01vbicuCgkgICAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5U2hvcnQgLy89PiBNb24KCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIndlZWtkYXlTaG9ydCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby53ZWVrZGF5cygic2hvcnQiLCB7CgkgICAgICAgIGxvY09iajogdGhpcy5sb2MKCSAgICAgIH0pW3RoaXMud2Vla2RheSAtIDFdIDogbnVsbDsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBsb25nIHdlZWtkYXksIHN1Y2ggYXMgJ01vbmRheScuCgkgICAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5TG9uZyAvLz0+IE1vbmRheQoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAid2Vla2RheUxvbmciLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ud2Vla2RheXMoImxvbmciLCB7CgkgICAgICAgIGxvY09iajogdGhpcy5sb2MKCSAgICAgIH0pW3RoaXMud2Vla2RheSAtIDFdIDogbnVsbDsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBVVEMgb2Zmc2V0IG9mIHRoaXMgRGF0ZVRpbWUgaW4gbWludXRlcwoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm9mZnNldCAvLz0+IC0yNDAKCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5vZmZzZXQgLy89PiAwCgkgICAgICogQHR5cGUge251bWJlcn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJvZmZzZXQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/ICt0aGlzLm8gOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgc2hvcnQgaHVtYW4gbmFtZSBmb3IgdGhlIHpvbmUncyBjdXJyZW50IG9mZnNldCwgZm9yIGV4YW1wbGUgIkVTVCIgb3IgIkVEVCIuCgkgICAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkCgkgICAgICogQHR5cGUge3N0cmluZ30KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJvZmZzZXROYW1lU2hvcnQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgaWYgKHRoaXMuaXNWYWxpZCkgewoJICAgICAgICByZXR1cm4gdGhpcy56b25lLm9mZnNldE5hbWUodGhpcy50cywgewoJICAgICAgICAgIGZvcm1hdDogInNob3J0IiwKCSAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlCgkgICAgICAgIH0pOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgcmV0dXJuIG51bGw7CgkgICAgICB9CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgbG9uZyBodW1hbiBuYW1lIGZvciB0aGUgem9uZSdzIGN1cnJlbnQgb2Zmc2V0LCBmb3IgZXhhbXBsZSAiRWFzdGVybiBTdGFuZGFyZCBUaW1lIiBvciAiRWFzdGVybiBEYXlsaWdodCBUaW1lIi4KCSAgICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQKCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIm9mZnNldE5hbWVMb25nIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIGlmICh0aGlzLmlzVmFsaWQpIHsKCSAgICAgICAgcmV0dXJuIHRoaXMuem9uZS5vZmZzZXROYW1lKHRoaXMudHMsIHsKCSAgICAgICAgICBmb3JtYXQ6ICJsb25nIiwKCSAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlCgkgICAgICAgIH0pOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgcmV0dXJuIG51bGw7CgkgICAgICB9CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB3aGV0aGVyIHRoaXMgem9uZSdzIG9mZnNldCBldmVyIGNoYW5nZXMsIGFzIGluIGEgRFNULgoJICAgICAqIEB0eXBlIHtib29sZWFufQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImlzT2Zmc2V0Rml4ZWQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuem9uZS5pc1VuaXZlcnNhbCA6IG51bGw7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB3aGV0aGVyIHRoZSBEYXRlVGltZSBpcyBpbiBhIERTVC4KCSAgICAgKiBAdHlwZSB7Ym9vbGVhbn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJpc0luRFNUIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIGlmICh0aGlzLmlzT2Zmc2V0Rml4ZWQpIHsKCSAgICAgICAgcmV0dXJuIGZhbHNlOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgcmV0dXJuIHRoaXMub2Zmc2V0ID4gdGhpcy5zZXQoewoJICAgICAgICAgIG1vbnRoOiAxLAoJICAgICAgICAgIGRheTogMQoJICAgICAgICB9KS5vZmZzZXQgfHwgdGhpcy5vZmZzZXQgPiB0aGlzLnNldCh7CgkgICAgICAgICAgbW9udGg6IDUKCSAgICAgICAgfSkub2Zmc2V0OwoJICAgICAgfQoJICAgIH0KCSAgICAvKioKCSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBEYXRlVGltZSBpcyBpbiBhIGxlYXAgeWVhciwgZmFsc2Ugb3RoZXJ3aXNlCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNikuaXNJbkxlYXBZZWFyIC8vPT4gdHJ1ZQoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTMpLmlzSW5MZWFwWWVhciAvLz0+IGZhbHNlCgkgICAgICogQHR5cGUge2Jvb2xlYW59CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaXNJbkxlYXBZZWFyIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBpc0xlYXBZZWFyKHRoaXMueWVhcik7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgRGF0ZVRpbWUncyBtb250aAoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYsIDIpLmRheXNJbk1vbnRoIC8vPT4gMjkKCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2LCAzKS5kYXlzSW5Nb250aCAvLz0+IDMxCgkgICAgICogQHR5cGUge251bWJlcn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJkYXlzSW5Nb250aCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gZGF5c0luTW9udGgodGhpcy55ZWFyLCB0aGlzLm1vbnRoKTsKCSAgICB9CgkgICAgLyoqCgkgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBEYXRlVGltZSdzIHllYXIKCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2KS5kYXlzSW5ZZWFyIC8vPT4gMzY2CgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykuZGF5c0luWWVhciAvLz0+IDM2NQoJICAgICAqIEB0eXBlIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiZGF5c0luWWVhciIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gZGF5c0luWWVhcih0aGlzLnllYXIpIDogTmFOOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygd2Vla3MgaW4gdGhpcyBEYXRlVGltZSdzIHllYXIKCSAgICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUKCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDA0KS53ZWVrc0luV2Vla1llYXIgLy89PiA1MwoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTMpLndlZWtzSW5XZWVrWWVhciAvLz0+IDUyCgkgICAgICogQHR5cGUge251bWJlcn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJ3ZWVrc0luV2Vla1llYXIiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHdlZWtzSW5XZWVrWWVhcih0aGlzLndlZWtZZWFyKSA6IE5hTjsKCSAgICB9CgkgIH1dLCBbewoJICAgIGtleTogIkRBVEVfU0hPUlQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIERBVEVfU0hPUlQ7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MycKCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIkRBVEVfTUVEIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBEQVRFX01FRDsKCSAgICB9CgkgICAgLyoqCgkgICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpLCBPY3QgMTQsIDE5ODMnCgkgICAgICogQHR5cGUge09iamVjdH0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJEQVRFX01FRF9XSVRIX1dFRUtEQVkiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIERBVEVfTUVEX1dJVEhfV0VFS0RBWTsKCSAgICB9CgkgICAgLyoqCgkgICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0b2JlciAxNCwgMTk4MycKCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIkRBVEVfRlVMTCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gREFURV9GVUxMOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdUdWVzZGF5LCBPY3RvYmVyIDE0LCAxOTgzJwoJICAgICAqIEB0eXBlIHtPYmplY3R9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiREFURV9IVUdFIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBEQVRFX0hVR0U7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCgkgICAgICogQHR5cGUge09iamVjdH0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJUSU1FX1NJTVBMRSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gVElNRV9TSU1QTEU7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCgkgICAgICogQHR5cGUge09iamVjdH0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJUSU1FX1dJVEhfU0VDT05EUyIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gVElNRV9XSVRIX1NFQ09ORFM7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEFNIEVEVCcuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgoJICAgICAqIEB0eXBlIHtPYmplY3R9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiVElNRV9XSVRIX1NIT1JUX09GRlNFVCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gVElNRV9XSVRIX1NIT1JUX09GRlNFVDsKCSAgICB9CgkgICAgLyoqCgkgICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgQU0gRWFzdGVybiBEYXlsaWdodCBUaW1lJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCgkgICAgICogQHR5cGUge09iamVjdH0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJUSU1FX1dJVEhfTE9OR19PRkZTRVQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIFRJTUVfV0lUSF9MT05HX09GRlNFVDsKCSAgICB9CgkgICAgLyoqCgkgICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzAnLCBhbHdheXMgMjQtaG91ci4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIlRJTUVfMjRfU0lNUExFIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBUSU1FXzI0X1NJTVBMRTsKCSAgICB9CgkgICAgLyoqCgkgICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMnLCBhbHdheXMgMjQtaG91ci4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIlRJTUVfMjRfV0lUSF9TRUNPTkRTIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBUSU1FXzI0X1dJVEhfU0VDT05EUzsKCSAgICB9CgkgICAgLyoqCgkgICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgRURUJywgYWx3YXlzIDI0LWhvdXIuCgkgICAgICogQHR5cGUge09iamVjdH0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLCBhbHdheXMgMjQtaG91ci4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIlRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcxMC8xNC8xOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCgkgICAgICogQHR5cGUge09iamVjdH0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJEQVRFVElNRV9TSE9SVCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gREFURVRJTUVfU0hPUlQ7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzEwLzE0LzE5ODMsIDk6MzA6MzMgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIkRBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUyIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3QgMTQsIDE5ODMsIDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIkRBVEVUSU1FX01FRCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gREFURVRJTUVfTUVEOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3QgMTQsIDE5ODMsIDk6MzA6MzMgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIkRBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIERBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFM7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaSwgMTQgT2N0IDE5ODMsIDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIkRBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVk7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdG9iZXIgMTQsIDE5ODMsIDk6MzAgQU0gRURUJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCgkgICAgICogQHR5cGUge09iamVjdH0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJEQVRFVElNRV9GVUxMIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBEQVRFVElNRV9GVUxMOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzLCA5OjMwOjMzIEFNIEVEVCcuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgoJICAgICAqIEB0eXBlIHtPYmplY3R9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIERBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmlkYXksIE9jdG9iZXIgMTQsIDE5ODMsIDk6MzAgQU0gRWFzdGVybiBEYXlsaWdodCBUaW1lJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCgkgICAgICogQHR5cGUge09iamVjdH0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJEQVRFVElNRV9IVUdFIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBEQVRFVElNRV9IVUdFOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmlkYXksIE9jdG9iZXIgMTQsIDE5ODMsIDk6MzA6MzMgQU0gRWFzdGVybiBEYXlsaWdodCBUaW1lJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCgkgICAgICogQHR5cGUge09iamVjdH0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUyIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFM7CgkgICAgfQoJICB9XSk7CgoJICByZXR1cm4gRGF0ZVRpbWU7Cgl9KCk7CglmdW5jdGlvbiBmcmllbmRseURhdGVUaW1lKGRhdGVUaW1laXNoKSB7CgkgIGlmIChEYXRlVGltZS5pc0RhdGVUaW1lKGRhdGVUaW1laXNoKSkgewoJICAgIHJldHVybiBkYXRlVGltZWlzaDsKCSAgfSBlbHNlIGlmIChkYXRlVGltZWlzaCAmJiBkYXRlVGltZWlzaC52YWx1ZU9mICYmIGlzTnVtYmVyKGRhdGVUaW1laXNoLnZhbHVlT2YoKSkpIHsKCSAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUpTRGF0ZShkYXRlVGltZWlzaCk7CgkgIH0gZWxzZSBpZiAoZGF0ZVRpbWVpc2ggJiYgdHlwZW9mIGRhdGVUaW1laXNoID09PSAib2JqZWN0IikgewoJICAgIHJldHVybiBEYXRlVGltZS5mcm9tT2JqZWN0KGRhdGVUaW1laXNoKTsKCSAgfSBlbHNlIHsKCSAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoIlVua25vd24gZGF0ZXRpbWUgYXJndW1lbnQ6ICIgKyBkYXRlVGltZWlzaCArICIsIG9mIHR5cGUgIiArIHR5cGVvZiBkYXRlVGltZWlzaCk7CgkgIH0KCX0KCgl2YXIgVkVSU0lPTiA9ICIyLjQuMCI7CgoJdmFyIERhdGVUaW1lXzEgPSBsdXhvbi5EYXRlVGltZSA9IERhdGVUaW1lOwoJdmFyIER1cmF0aW9uXzEgPSBsdXhvbi5EdXJhdGlvbiA9IER1cmF0aW9uOwoJbHV4b24uRml4ZWRPZmZzZXRab25lID0gRml4ZWRPZmZzZXRab25lOwoJbHV4b24uSUFOQVpvbmUgPSBJQU5BWm9uZTsKCWx1eG9uLkluZm8gPSBJbmZvOwoJbHV4b24uSW50ZXJ2YWwgPSBJbnRlcnZhbDsKCWx1eG9uLkludmFsaWRab25lID0gSW52YWxpZFpvbmU7CglsdXhvbi5TZXR0aW5ncyA9IFNldHRpbmdzOwoJbHV4b24uU3lzdGVtWm9uZSA9IFN5c3RlbVpvbmU7CglsdXhvbi5WRVJTSU9OID0gVkVSU0lPTjsKCWx1eG9uLlpvbmUgPSBab25lOwoKCS8vLy8vLy8vLy8vLy8vLy8vLy8vDQoJLy8gUXVlcnkgU2V0dGluZ3MgLy8NCgkvLy8vLy8vLy8vLy8vLy8vLy8vLw0KCWNvbnN0IERFRkFVTFRfUVVFUllfU0VUVElOR1MgPSB7DQoJICAgIHJlbmRlck51bGxBczogIlxcLSIsDQoJICAgIHRhc2tDb21wbGV0aW9uVHJhY2tpbmc6IGZhbHNlLA0KCSAgICB0YXNrQ29tcGxldGlvblRleHQ6ICJjb21wbGV0aW9uIiwNCgkgICAgd2Fybk9uRW1wdHlSZXN1bHQ6IHRydWUsDQoJICAgIHJlZnJlc2hFbmFibGVkOiB0cnVlLA0KCSAgICByZWZyZXNoSW50ZXJ2YWw6IDI1MDAsDQoJICAgIGRlZmF1bHREYXRlRm9ybWF0OiAiTU1NTSBkZCwgeXl5eSIsDQoJICAgIGRlZmF1bHREYXRlVGltZUZvcm1hdDogImg6bW0gYSAtIE1NTU0gZGQsIHl5eXkiLA0KCSAgICBtYXhSZWN1cnNpdmVSZW5kZXJEZXB0aDogNCwNCgkgICAgdGFibGVJZENvbHVtbk5hbWU6ICJGaWxlIiwNCgkgICAgdGFibGVHcm91cENvbHVtbk5hbWU6ICJHcm91cCIsDQoJfTsNCgkvKiogRGVmYXVsdCBzZXR0aW5ncyBmb3IgZGF0YXZpZXcgb24gaW5zdGFsbC4gKi8NCgkoew0KCSAgICAuLi5ERUZBVUxUX1FVRVJZX1NFVFRJTkdTLA0KCSAgICAuLi57DQoJICAgICAgICBpbmxpbmVRdWVyeVByZWZpeDogIj0iLA0KCSAgICAgICAgaW5saW5lSnNRdWVyeVByZWZpeDogIiQ9IiwNCgkgICAgICAgIGVuYWJsZURhdGF2aWV3SnM6IGZhbHNlLA0KCSAgICAgICAgZW5hYmxlSW5saW5lRGF0YXZpZXdKczogZmFsc2UsDQoJICAgICAgICBwcmV0dHlSZW5kZXJJbmxpbmVGaWVsZHM6IHRydWUsDQoJICAgIH0sDQoJfSk7CgoJLyoqIEZ1bmN0aW9uYWwgcmV0dXJuIHR5cGUgZm9yIGVycm9yIGhhbmRsaW5nLiAqLw0KCWNsYXNzIFN1Y2Nlc3Mgew0KCSAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkgew0KCSAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOw0KCSAgICAgICAgdGhpcy5zdWNjZXNzZnVsID0gdHJ1ZTsNCgkgICAgfQ0KCSAgICBtYXAoZikgew0KCSAgICAgICAgcmV0dXJuIG5ldyBTdWNjZXNzKGYodGhpcy52YWx1ZSkpOw0KCSAgICB9DQoJICAgIGZsYXRNYXAoZikgew0KCSAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSk7DQoJICAgIH0NCgkgICAgbWFwRXJyKGYpIHsNCgkgICAgICAgIHJldHVybiB0aGlzOw0KCSAgICB9DQoJICAgIGJpbWFwKHN1Y2MsIF9mYWlsKSB7DQoJICAgICAgICByZXR1cm4gdGhpcy5tYXAoc3VjYyk7DQoJICAgIH0NCgkgICAgb3JFbHNlKF92YWx1ZSkgew0KCSAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7DQoJICAgIH0NCgkgICAgb3JFbHNlVGhyb3coX21lc3NhZ2UpIHsNCgkgICAgICAgIHJldHVybiB0aGlzLnZhbHVlOw0KCSAgICB9DQoJfQ0KCS8qKiBGdW5jdGlvbmFsIHJldHVybiB0eXBlIGZvciBlcnJvciBoYW5kbGluZy4gKi8NCgljbGFzcyBGYWlsdXJlIHsNCgkgICAgY29uc3RydWN0b3IoZXJyb3IpIHsNCgkgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjsNCgkgICAgICAgIHRoaXMuc3VjY2Vzc2Z1bCA9IGZhbHNlOw0KCSAgICB9DQoJICAgIG1hcChfZikgew0KCSAgICAgICAgcmV0dXJuIHRoaXM7DQoJICAgIH0NCgkgICAgZmxhdE1hcChfZikgew0KCSAgICAgICAgcmV0dXJuIHRoaXM7DQoJICAgIH0NCgkgICAgbWFwRXJyKGYpIHsNCgkgICAgICAgIHJldHVybiBuZXcgRmFpbHVyZShmKHRoaXMuZXJyb3IpKTsNCgkgICAgfQ0KCSAgICBiaW1hcChfc3VjYywgZmFpbCkgew0KCSAgICAgICAgcmV0dXJuIHRoaXMubWFwRXJyKGZhaWwpOw0KCSAgICB9DQoJICAgIG9yRWxzZSh2YWx1ZSkgew0KCSAgICAgICAgcmV0dXJuIHZhbHVlOw0KCSAgICB9DQoJICAgIG9yRWxzZVRocm93KG1lc3NhZ2UpIHsNCgkgICAgICAgIGlmIChtZXNzYWdlKQ0KCSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKHRoaXMuZXJyb3IpKTsNCgkgICAgICAgIGVsc2UNCgkgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIiIgKyB0aGlzLmVycm9yKTsNCgkgICAgfQ0KCX0NCgkvKiogTW9uYWRpYyAnUmVzdWx0JyB0eXBlIHdoaWNoIGVuY2Fwc3VsYXRlcyB3aGV0aGVyIGEgcHJvY2VkdXJlIHN1Y2NlZWRlZCBvciBmYWlsZWQsIGFzIHdlbGwgYXMgaXQncyByZXR1cm4gdmFsdWUuICovDQoJdmFyIFJlc3VsdDsNCgkoZnVuY3Rpb24gKFJlc3VsdCkgew0KCSAgICBmdW5jdGlvbiBzdWNjZXNzKHZhbHVlKSB7DQoJICAgICAgICByZXR1cm4gbmV3IFN1Y2Nlc3ModmFsdWUpOw0KCSAgICB9DQoJICAgIFJlc3VsdC5zdWNjZXNzID0gc3VjY2VzczsNCgkgICAgZnVuY3Rpb24gZmFpbHVyZShlcnJvcikgew0KCSAgICAgICAgcmV0dXJuIG5ldyBGYWlsdXJlKGVycm9yKTsNCgkgICAgfQ0KCSAgICBSZXN1bHQuZmFpbHVyZSA9IGZhaWx1cmU7DQoJICAgIGZ1bmN0aW9uIGZsYXRNYXAyKGZpcnN0LCBzZWNvbmQsIGYpIHsNCgkgICAgICAgIGlmIChmaXJzdC5zdWNjZXNzZnVsKSB7DQoJICAgICAgICAgICAgaWYgKHNlY29uZC5zdWNjZXNzZnVsKQ0KCSAgICAgICAgICAgICAgICByZXR1cm4gZihmaXJzdC52YWx1ZSwgc2Vjb25kLnZhbHVlKTsNCgkgICAgICAgICAgICBlbHNlDQoJICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKHNlY29uZC5lcnJvcik7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlIHsNCgkgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShmaXJzdC5lcnJvcik7DQoJICAgICAgICB9DQoJICAgIH0NCgkgICAgUmVzdWx0LmZsYXRNYXAyID0gZmxhdE1hcDI7DQoJICAgIGZ1bmN0aW9uIG1hcDIoZmlyc3QsIHNlY29uZCwgZikgew0KCSAgICAgICAgcmV0dXJuIGZsYXRNYXAyKGZpcnN0LCBzZWNvbmQsIChhLCBiKSA9PiBzdWNjZXNzKGYoYSwgYikpKTsNCgkgICAgfQ0KCSAgICBSZXN1bHQubWFwMiA9IG1hcDI7DQoJfSkoUmVzdWx0IHx8IChSZXN1bHQgPSB7fSkpOwoKCXZhciBwYXJzaW1tb25fdW1kX21pbiA9IHtleHBvcnRzOiB7fX07CgoJKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHsKCSFmdW5jdGlvbihuLHQpe21vZHVsZS5leHBvcnRzPXQoKTt9KCJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOmNvbW1vbmpzR2xvYmFsLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciB0PXt9O2Z1bmN0aW9uIHIoZSl7aWYodFtlXSlyZXR1cm4gdFtlXS5leHBvcnRzO3ZhciB1PXRbZV09e2k6ZSxsOiExLGV4cG9ydHM6e319O3JldHVybiBuW2VdLmNhbGwodS5leHBvcnRzLHUsdS5leHBvcnRzLHIpLHUubD0hMCx1LmV4cG9ydHN9cmV0dXJuIHIubT1uLHIuYz10LHIuZD1mdW5jdGlvbihuLHQsZSl7ci5vKG4sdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDplfSk7fSxyLnI9ZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO30sci5uPWZ1bmN0aW9uKG4pe3ZhciB0PW4mJm4uX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIG59O3JldHVybiByLmQodCwiYSIsdCksdH0sci5vPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHQpfSxyLnA9IiIscihyLnM9MCl9KFtmdW5jdGlvbihuLHQscil7ZnVuY3Rpb24gZShuKXtpZighKHRoaXMgaW5zdGFuY2VvZiBlKSlyZXR1cm4gbmV3IGUobik7dGhpcy5fPW47fXZhciB1PWUucHJvdG90eXBlO2Z1bmN0aW9uIG8obix0KXtmb3IodmFyIHI9MDtyPG47cisrKXQocik7fWZ1bmN0aW9uIGkobix0LHIpe3JldHVybiBmdW5jdGlvbihuLHQpe28odC5sZW5ndGgsZnVuY3Rpb24ocil7bih0W3JdLHIsdCk7fSk7fShmdW5jdGlvbihyLGUsdSl7dD1uKHQscixlLHUpO30sciksdH1mdW5jdGlvbiBhKG4sdCl7cmV0dXJuIGkoZnVuY3Rpb24odCxyLGUsdSl7cmV0dXJuIHQuY29uY2F0KFtuKHIsZSx1KV0pfSxbXSx0KX1mdW5jdGlvbiBmKG4sdCl7dmFyIHI9e3Y6MCxidWY6dH07cmV0dXJuIG8obixmdW5jdGlvbigpe3ZhciBuO3I9e3Y6ci52PDwxfChuPXIuYnVmLG5bMF0+PjcpLGJ1ZjpmdW5jdGlvbihuKXt2YXIgdD1pKGZ1bmN0aW9uKG4sdCxyLGUpe3JldHVybiBuLmNvbmNhdChyPT09ZS5sZW5ndGgtMT9CdWZmZXIuZnJvbShbdCwwXSkucmVhZFVJbnQxNkJFKDApOmUucmVhZFVJbnQxNkJFKHIpKX0sW10sbik7cmV0dXJuIEJ1ZmZlci5mcm9tKGEoZnVuY3Rpb24obil7cmV0dXJuIChuPDwxJjY1NTM1KT4+OH0sdCkpfShyLmJ1Zil9O30pLHJ9ZnVuY3Rpb24gYygpe3JldHVybiAidW5kZWZpbmVkIiE9dHlwZW9mIEJ1ZmZlcn1mdW5jdGlvbiBzKCl7aWYoIWMoKSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlciBnbG9iYWwgZG9lcyBub3QgZXhpc3Q7IHBsZWFzZSB1c2Ugd2VicGFjayBpZiB5b3UgbmVlZCB0byBwYXJzZSBCdWZmZXJzIGluIHRoZSBicm93c2VyLiIpfWZ1bmN0aW9uIGwobil7cygpO3ZhciB0PWkoZnVuY3Rpb24obix0KXtyZXR1cm4gbit0fSwwLG4pO2lmKHQlOCE9MCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBiaXRzIFsiK24uam9pbigiLCAiKSsiXSBhZGQgdXAgdG8gIit0KyIgd2hpY2ggaXMgbm90IGFuIGV2ZW4gbnVtYmVyIG9mIGJ5dGVzOyB0aGUgdG90YWwgc2hvdWxkIGJlIGRpdmlzaWJsZSBieSA4Iik7dmFyIHIsdT10Lzgsbz0ocj1mdW5jdGlvbihuKXtyZXR1cm4gbj40OH0saShmdW5jdGlvbihuLHQpe3JldHVybiBufHwocih0KT90Om4pfSxudWxsLG4pKTtpZihvKXRocm93IG5ldyBFcnJvcihvKyIgYml0IHJhbmdlIHJlcXVlc3RlZCBleGNlZWRzIDQ4IGJpdCAoNiBieXRlKSBOdW1iZXIgbWF4LiIpO3JldHVybiBuZXcgZShmdW5jdGlvbih0LHIpe3ZhciBlPXUrcjtyZXR1cm4gZT50Lmxlbmd0aD94KHIsdS50b1N0cmluZygpKyIgYnl0ZXMiKTpiKGUsaShmdW5jdGlvbihuLHQpe3ZhciByPWYodCxuLmJ1Zik7cmV0dXJuIHtjb2xsOm4uY29sbC5jb25jYXQoci52KSxidWY6ci5idWZ9fSx7Y29sbDpbXSxidWY6dC5zbGljZShyLGUpfSxuKS5jb2xsKX0pfWZ1bmN0aW9uIGgobix0KXtyZXR1cm4gbmV3IGUoZnVuY3Rpb24ocixlKXtyZXR1cm4gcygpLGUrdD5yLmxlbmd0aD94KGUsdCsiIGJ5dGVzIGZvciAiK24pOmIoZSt0LHIuc2xpY2UoZSxlK3QpKX0pfWZ1bmN0aW9uIHAobix0KXtpZigibnVtYmVyIiE9dHlwZW9mKHI9dCl8fE1hdGguZmxvb3IocikhPT1yfHx0PDB8fHQ+Nil0aHJvdyBuZXcgRXJyb3IobisiIHJlcXVpcmVzIGludGVnZXIgbGVuZ3RoIGluIHJhbmdlIFswLCA2XS4iKTt2YXIgcjt9ZnVuY3Rpb24gZChuKXtyZXR1cm4gcCgidWludEJFIixuKSxoKCJ1aW50QkUoIituKyIpIixuKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVhZFVJbnRCRSgwLG4pfSl9ZnVuY3Rpb24gdihuKXtyZXR1cm4gcCgidWludExFIixuKSxoKCJ1aW50TEUoIituKyIpIixuKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVhZFVJbnRMRSgwLG4pfSl9ZnVuY3Rpb24gZyhuKXtyZXR1cm4gcCgiaW50QkUiLG4pLGgoImludEJFKCIrbisiKSIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRJbnRCRSgwLG4pfSl9ZnVuY3Rpb24gbShuKXtyZXR1cm4gcCgiaW50TEUiLG4pLGgoImludExFKCIrbisiKSIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRJbnRMRSgwLG4pfSl9ZnVuY3Rpb24geShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGV9ZnVuY3Rpb24gRShuKXtyZXR1cm4gIltvYmplY3QgQXJyYXldIj09PXt9LnRvU3RyaW5nLmNhbGwobil9ZnVuY3Rpb24gdyhuKXtyZXR1cm4gYygpJiZCdWZmZXIuaXNCdWZmZXIobil9ZnVuY3Rpb24gYihuLHQpe3JldHVybiB7c3RhdHVzOiEwLGluZGV4Om4sdmFsdWU6dCxmdXJ0aGVzdDotMSxleHBlY3RlZDpbXX19ZnVuY3Rpb24geChuLHQpe3JldHVybiBFKHQpfHwodD1bdF0pLHtzdGF0dXM6ITEsaW5kZXg6LTEsdmFsdWU6bnVsbCxmdXJ0aGVzdDpuLGV4cGVjdGVkOnR9fWZ1bmN0aW9uIEIobix0KXtpZighdClyZXR1cm4gbjtpZihuLmZ1cnRoZXN0PnQuZnVydGhlc3QpcmV0dXJuIG47dmFyIHI9bi5mdXJ0aGVzdD09PXQuZnVydGhlc3Q/ZnVuY3Rpb24obix0KXtpZihmdW5jdGlvbigpe2lmKHZvaWQgMCE9PWUuX3N1cHBvcnRzU2V0KXJldHVybiBlLl9zdXBwb3J0c1NldDt2YXIgbj0idW5kZWZpbmVkIiE9dHlwZW9mIFNldDtyZXR1cm4gZS5fc3VwcG9ydHNTZXQ9bixufSgpJiZBcnJheS5mcm9tKXtmb3IodmFyIHI9bmV3IFNldChuKSx1PTA7dTx0Lmxlbmd0aDt1Kyspci5hZGQodFt1XSk7dmFyIG89QXJyYXkuZnJvbShyKTtyZXR1cm4gby5zb3J0KCksb31mb3IodmFyIGk9e30sYT0wO2E8bi5sZW5ndGg7YSsrKWlbblthXV09ITA7Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDtmKyspaVt0W2ZdXT0hMDt2YXIgYz1bXTtmb3IodmFyIHMgaW4gaSkoe30pLmhhc093blByb3BlcnR5LmNhbGwoaSxzKSYmYy5wdXNoKHMpO3JldHVybiBjLnNvcnQoKSxjfShuLmV4cGVjdGVkLHQuZXhwZWN0ZWQpOnQuZXhwZWN0ZWQ7cmV0dXJuIHtzdGF0dXM6bi5zdGF0dXMsaW5kZXg6bi5pbmRleCx2YWx1ZTpuLnZhbHVlLGZ1cnRoZXN0OnQuZnVydGhlc3QsZXhwZWN0ZWQ6cn19dmFyIGo9e307ZnVuY3Rpb24gUyhuLHQpe2lmKHcobikpcmV0dXJuIHtvZmZzZXQ6dCxsaW5lOi0xLGNvbHVtbjotMX07biBpbiBqfHwoaltuXT17fSk7Zm9yKHZhciByPWpbbl0sZT0wLHU9MCxvPTAsaT10O2k+PTA7KXtpZihpIGluIHIpe2U9cltpXS5saW5lLDA9PT1vJiYobz1yW2ldLmxpbmVTdGFydCk7YnJlYWt9KCJcbiI9PT1uLmNoYXJBdChpKXx8IlxyIj09PW4uY2hhckF0KGkpJiYiXG4iIT09bi5jaGFyQXQoaSsxKSkmJih1KyssMD09PW8mJihvPWkrMSkpLGktLTt9dmFyIGE9ZSt1LGY9dC1vO3JldHVybiByW3RdPXtsaW5lOmEsbGluZVN0YXJ0Om99LHtvZmZzZXQ6dCxsaW5lOmErMSxjb2x1bW46ZisxfX1mdW5jdGlvbiBfKG4pe2lmKCF5KG4pKXRocm93IG5ldyBFcnJvcigibm90IGEgcGFyc2VyOiAiK24pfWZ1bmN0aW9uIEwobix0KXtyZXR1cm4gInN0cmluZyI9PXR5cGVvZiBuP24uY2hhckF0KHQpOm5bdF19ZnVuY3Rpb24gTyhuKXtpZigibnVtYmVyIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKCJub3QgYSBudW1iZXI6ICIrbil9ZnVuY3Rpb24gayhuKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoIm5vdCBhIGZ1bmN0aW9uOiAiK24pfWZ1bmN0aW9uIFAobil7aWYoInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigibm90IGEgc3RyaW5nOiAiK24pfXZhciBxPTIsQT0zLEk9OCxGPTUqSSxNPTQqSSx6PSIgICI7ZnVuY3Rpb24gUihuLHQpe3JldHVybiBuZXcgQXJyYXkodCsxKS5qb2luKG4pfWZ1bmN0aW9uIFUobix0LHIpe3ZhciBlPXQtbi5sZW5ndGg7cmV0dXJuIGU8PTA/bjpSKHIsZSkrbn1mdW5jdGlvbiBXKG4sdCxyLGUpe3JldHVybiB7ZnJvbTpuLXQ+MD9uLXQ6MCx0bzpuK3I+ZT9lOm4rcn19ZnVuY3Rpb24gRChuLHQpe3ZhciByLGUsdSxvLGYsYz10LmluZGV4LHM9Yy5vZmZzZXQsbD0xO2lmKHM9PT1uLmxlbmd0aClyZXR1cm4gIkdvdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCI7aWYodyhuKSl7dmFyIGg9cy1zJUkscD1zLWgsZD1XKGgsRixNK0ksbi5sZW5ndGgpLHY9YShmdW5jdGlvbihuKXtyZXR1cm4gYShmdW5jdGlvbihuKXtyZXR1cm4gVShuLnRvU3RyaW5nKDE2KSwyLCIwIil9LG4pfSxmdW5jdGlvbihuLHQpe3ZhciByPW4ubGVuZ3RoLGU9W10sdT0wO2lmKHI8PXQpcmV0dXJuIFtuLnNsaWNlKCldO2Zvcih2YXIgbz0wO288cjtvKyspZVt1XXx8ZS5wdXNoKFtdKSxlW3VdLnB1c2gobltvXSksKG8rMSkldD09MCYmdSsrO3JldHVybiBlfShuLnNsaWNlKGQuZnJvbSxkLnRvKS50b0pTT04oKS5kYXRhLEkpKTtvPWZ1bmN0aW9uKG4pe3JldHVybiAwPT09bi5mcm9tJiYxPT09bi50bz97ZnJvbTpuLmZyb20sdG86bi50b306e2Zyb206bi5mcm9tL0ksdG86TWF0aC5mbG9vcihuLnRvL0kpfX0oZCksZT1oL0kscj0zKnAscD49NCYmKHIrPTEpLGw9Mix1PWEoZnVuY3Rpb24obil7cmV0dXJuIG4ubGVuZ3RoPD00P24uam9pbigiICIpOm4uc2xpY2UoMCw0KS5qb2luKCIgIikrIiAgIituLnNsaWNlKDQpLmpvaW4oIiAiKX0sdiksKGY9KDgqKG8udG8+MD9vLnRvLTE6by50bykpLnRvU3RyaW5nKDE2KS5sZW5ndGgpPDImJihmPTIpO31lbHNlIHt2YXIgZz1uLnNwbGl0KC9cclxufFtcblxyXHUyMDI4XHUyMDI5XS8pO3I9Yy5jb2x1bW4tMSxlPWMubGluZS0xLG89VyhlLHEsQSxnLmxlbmd0aCksdT1nLnNsaWNlKG8uZnJvbSxvLnRvKSxmPW8udG8udG9TdHJpbmcoKS5sZW5ndGg7fXZhciBtPWUtby5mcm9tO3JldHVybiB3KG4pJiYoZj0oOCooby50bz4wP28udG8tMTpvLnRvKSkudG9TdHJpbmcoMTYpLmxlbmd0aCk8MiYmKGY9MiksaShmdW5jdGlvbih0LGUsdSl7dmFyIGksYT11PT09bSxjPWE/Ij4gIjp6O3JldHVybiBpPXcobik/VSgoOCooby5mcm9tK3UpKS50b1N0cmluZygxNiksZiwiMCIpOlUoKG8uZnJvbSt1KzEpLnRvU3RyaW5nKCksZiwiICIpLFtdLmNvbmNhdCh0LFtjK2krIiB8ICIrZV0sYT9beitSKCIgIixmKSsiIHwgIitVKCIiLHIsIiAiKStSKCJeIixsKV06W10pfSxbXSx1KS5qb2luKCJcbiIpfWZ1bmN0aW9uIE4obix0KXtyZXR1cm4gWyJcbiIsIi0tIFBBUlNJTkcgRkFJTEVEICIrUigiLSIsNTApLCJcblxuIixEKG4sdCksIlxuXG4iLChyPXQuZXhwZWN0ZWQsMT09PXIubGVuZ3RoPyJFeHBlY3RlZDpcblxuIityWzBdOiJFeHBlY3RlZCBvbmUgb2YgdGhlIGZvbGxvd2luZzogXG5cbiIrci5qb2luKCIsICIpKSwiXG4iXS5qb2luKCIiKTt2YXIgcjt9ZnVuY3Rpb24gRyhuKXtyZXR1cm4gdm9pZCAwIT09bi5mbGFncz9uLmZsYWdzOltuLmdsb2JhbD8iZyI6IiIsbi5pZ25vcmVDYXNlPyJpIjoiIixuLm11bHRpbGluZT8ibSI6IiIsbi51bmljb2RlPyJ1IjoiIixuLnN0aWNreT8ieSI6IiJdLmpvaW4oIiIpfWZ1bmN0aW9uIEMoKXtmb3IodmFyIG49W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLHQ9bi5sZW5ndGgscj0wO3I8dDtyKz0xKV8obltyXSk7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXtmb3IodmFyIHUsbz1uZXcgQXJyYXkodCksaT0wO2k8dDtpKz0xKXtpZighKHU9QihuW2ldLl8ocixlKSx1KSkuc3RhdHVzKXJldHVybiB1O29baV09dS52YWx1ZSxlPXUuaW5kZXg7fXJldHVybiBCKGIoZSxvKSx1KX0pfWZ1bmN0aW9uIEooKXt2YXIgbj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7aWYoMD09PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigic2VxTWFwIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIpO3ZhciB0PW4ucG9wKCk7cmV0dXJuIGsodCksQy5hcHBseShudWxsLG4pLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdC5hcHBseShudWxsLG4pfSl9ZnVuY3Rpb24gVCgpe3ZhciBuPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSx0PW4ubGVuZ3RoO2lmKDA9PT10KXJldHVybiBZKCJ6ZXJvIGFsdGVybmF0ZXMiKTtmb3IodmFyIHI9MDtyPHQ7cis9MSlfKG5bcl0pO3JldHVybiBlKGZ1bmN0aW9uKHQscil7Zm9yKHZhciBlLHU9MDt1PG4ubGVuZ3RoO3UrPTEpaWYoKGU9QihuW3VdLl8odCxyKSxlKSkuc3RhdHVzKXJldHVybiBlO3JldHVybiBlfSl9ZnVuY3Rpb24gVihuLHQpe3JldHVybiBIKG4sdCkub3IoWChbXSkpfWZ1bmN0aW9uIEgobix0KXtyZXR1cm4gXyhuKSxfKHQpLEoobix0LnRoZW4obikubWFueSgpLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIFtuXS5jb25jYXQodCl9KX1mdW5jdGlvbiBLKG4pe1Aobik7dmFyIHQ9IiciK24rIiciO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9ZStuLmxlbmd0aCxvPXIuc2xpY2UoZSx1KTtyZXR1cm4gbz09PW4/Yih1LG8pOngoZSx0KX0pfWZ1bmN0aW9uIFEobix0KXshZnVuY3Rpb24obil7aWYoIShuIGluc3RhbmNlb2YgUmVnRXhwKSl0aHJvdyBuZXcgRXJyb3IoIm5vdCBhIHJlZ2V4cDogIituKTtmb3IodmFyIHQ9RyhuKSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBlPXQuY2hhckF0KHIpO2lmKCJpIiE9PWUmJiJtIiE9PWUmJiJ1IiE9PWUmJiJzIiE9PWUpdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCByZWdleHAgZmxhZyAiJytlKyciOiAnK24pfX0obiksYXJndW1lbnRzLmxlbmd0aD49Mj9PKHQpOnQ9MDt2YXIgcj1mdW5jdGlvbihuKXtyZXR1cm4gUmVnRXhwKCJeKD86IituLnNvdXJjZSsiKSIsRyhuKSl9KG4pLHU9IiIrbjtyZXR1cm4gZShmdW5jdGlvbihuLGUpe3ZhciBvPXIuZXhlYyhuLnNsaWNlKGUpKTtpZihvKXtpZigwPD10JiZ0PD1vLmxlbmd0aCl7dmFyIGk9b1swXSxhPW9bdF07cmV0dXJuIGIoZStpLmxlbmd0aCxhKX1yZXR1cm4geChlLCJ2YWxpZCBtYXRjaCBncm91cCAoMCB0byAiK28ubGVuZ3RoKyIpIGluICIrdSl9cmV0dXJuIHgoZSx1KX0pfWZ1bmN0aW9uIFgobil7cmV0dXJuIGUoZnVuY3Rpb24odCxyKXtyZXR1cm4gYihyLG4pfSl9ZnVuY3Rpb24gWShuKXtyZXR1cm4gZShmdW5jdGlvbih0LHIpe3JldHVybiB4KHIsbil9KX1mdW5jdGlvbiBaKG4pe2lmKHkobikpcmV0dXJuIGUoZnVuY3Rpb24odCxyKXt2YXIgZT1uLl8odCxyKTtyZXR1cm4gZS5pbmRleD1yLGUudmFsdWU9IiIsZX0pO2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gWihLKG4pKTtpZihuIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiBaKFEobikpO3Rocm93IG5ldyBFcnJvcigibm90IGEgc3RyaW5nLCByZWdleHAsIG9yIHBhcnNlcjogIituKX1mdW5jdGlvbiAkKG4pe3JldHVybiBfKG4pLGUoZnVuY3Rpb24odCxyKXt2YXIgZT1uLl8odCxyKSx1PXQuc2xpY2UocixlLmluZGV4KTtyZXR1cm4gZS5zdGF0dXM/eChyLCdub3QgIicrdSsnIicpOmIocixudWxsKX0pfWZ1bmN0aW9uIG5uKG4pe3JldHVybiBrKG4pLGUoZnVuY3Rpb24odCxyKXt2YXIgZT1MKHQscik7cmV0dXJuIHI8dC5sZW5ndGgmJm4oZSk/YihyKzEsZSk6eChyLCJhIGNoYXJhY3Rlci9ieXRlIG1hdGNoaW5nICIrbil9KX1mdW5jdGlvbiB0bihuLHQpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9bixuPXZvaWQgMCk7dmFyIHI9ZShmdW5jdGlvbihuLGUpe3JldHVybiByLl89dCgpLl8sci5fKG4sZSl9KTtyZXR1cm4gbj9yLmRlc2Mobik6cn1mdW5jdGlvbiBybigpe3JldHVybiBZKCJmYW50YXN5LWxhbmQvZW1wdHkiKX11LnBhcnNlPWZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciIT10eXBlb2YgbiYmIXcobikpdGhyb3cgbmV3IEVycm9yKCIucGFyc2UgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHN0cmluZyBvciBCdWZmZXIgYXMgaXRzIGFyZ3VtZW50Iik7dmFyIHQscj10aGlzLnNraXAoYW4pLl8obiwwKTtyZXR1cm4gdD1yLnN0YXR1cz97c3RhdHVzOiEwLHZhbHVlOnIudmFsdWV9OntzdGF0dXM6ITEsaW5kZXg6UyhuLHIuZnVydGhlc3QpLGV4cGVjdGVkOnIuZXhwZWN0ZWR9LGRlbGV0ZSBqW25dLHR9LHUudHJ5UGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5wYXJzZShuKTtpZih0LnN0YXR1cylyZXR1cm4gdC52YWx1ZTt2YXIgcj1OKG4sdCksZT1uZXcgRXJyb3Iocik7dGhyb3cgZS50eXBlPSJQYXJzaW1tb25FcnJvciIsZS5yZXN1bHQ9dCxlfSx1LmFzc2VydD1mdW5jdGlvbihuLHQpe3JldHVybiB0aGlzLmNoYWluKGZ1bmN0aW9uKHIpe3JldHVybiBuKHIpP1gocik6WSh0KX0pfSx1Lm9yPWZ1bmN0aW9uKG4pe3JldHVybiBUKHRoaXMsbil9LHUudHJpbT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy53cmFwKG4sbil9LHUud3JhcD1mdW5jdGlvbihuLHQpe3JldHVybiBKKG4sdGhpcyx0LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHR9KX0sdS50aHJ1PWZ1bmN0aW9uKG4pe3JldHVybiBuKHRoaXMpfSx1LnRoZW49ZnVuY3Rpb24obil7cmV0dXJuIF8obiksQyh0aGlzLG4pLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gblsxXX0pfSx1Lm1hbnk9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPVtdLHU9dm9pZCAwOzspe2lmKCEodT1CKG4uXyh0LHIpLHUpKS5zdGF0dXMpcmV0dXJuIEIoYihyLGUpLHUpO2lmKHI9PT11LmluZGV4KXRocm93IG5ldyBFcnJvcigiaW5maW5pdGUgbG9vcCBkZXRlY3RlZCBpbiAubWFueSgpIHBhcnNlciAtLS0gY2FsbGluZyAubWFueSgpIG9uIGEgcGFyc2VyIHdoaWNoIGNhbiBhY2NlcHQgemVybyBjaGFyYWN0ZXJzIGlzIHVzdWFsbHkgdGhlIGNhdXNlIik7cj11LmluZGV4LGUucHVzaCh1LnZhbHVlKTt9fSl9LHUudGllV2l0aD1mdW5jdGlvbihuKXtyZXR1cm4gUChuKSx0aGlzLm1hcChmdW5jdGlvbih0KXtpZihmdW5jdGlvbihuKXtpZighRShuKSl0aHJvdyBuZXcgRXJyb3IoIm5vdCBhbiBhcnJheTogIituKX0odCksdC5sZW5ndGgpe1AodFswXSk7Zm9yKHZhciByPXRbMF0sZT0xO2U8dC5sZW5ndGg7ZSsrKVAodFtlXSkscis9bit0W2VdO3JldHVybiByfXJldHVybiAiIn0pfSx1LnRpZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpZVdpdGgoIiIpfSx1LnRpbWVzPWZ1bmN0aW9uKG4sdCl7dmFyIHI9dGhpcztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYodD1uKSxPKG4pLE8odCksZShmdW5jdGlvbihlLHUpe2Zvcih2YXIgbz1bXSxpPXZvaWQgMCxhPXZvaWQgMCxmPTA7ZjxuO2YrPTEpe2lmKGE9QihpPXIuXyhlLHUpLGEpLCFpLnN0YXR1cylyZXR1cm4gYTt1PWkuaW5kZXgsby5wdXNoKGkudmFsdWUpO31mb3IoO2Y8dCYmKGE9QihpPXIuXyhlLHUpLGEpLGkuc3RhdHVzKTtmKz0xKXU9aS5pbmRleCxvLnB1c2goaS52YWx1ZSk7cmV0dXJuIEIoYih1LG8pLGEpfSl9LHUucmVzdWx0PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBufSl9LHUuYXRNb3N0PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnRpbWVzKDAsbil9LHUuYXRMZWFzdD1mdW5jdGlvbihuKXtyZXR1cm4gSih0aGlzLnRpbWVzKG4pLHRoaXMubWFueSgpLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4uY29uY2F0KHQpfSl9LHUubWFwPWZ1bmN0aW9uKG4pe2sobik7dmFyIHQ9dGhpcztyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PXQuXyhyLGUpO3JldHVybiB1LnN0YXR1cz9CKGIodS5pbmRleCxuKHUudmFsdWUpKSx1KTp1fSl9LHUuY29udHJhbWFwPWZ1bmN0aW9uKG4pe2sobik7dmFyIHQ9dGhpcztyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PXQucGFyc2UobihyLnNsaWNlKGUpKSk7cmV0dXJuIHUuc3RhdHVzP2IoZStyLmxlbmd0aCx1LnZhbHVlKTp1fSl9LHUucHJvbWFwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGsobiksayh0KSx0aGlzLmNvbnRyYW1hcChuKS5tYXAodCl9LHUuc2tpcD1mdW5jdGlvbihuKXtyZXR1cm4gQyh0aGlzLG4pLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gblswXX0pfSx1Lm1hcms9ZnVuY3Rpb24oKXtyZXR1cm4gSihlbix0aGlzLGVuLGZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4ge3N0YXJ0Om4sdmFsdWU6dCxlbmQ6cn19KX0sdS5ub2RlPWZ1bmN0aW9uKG4pe3JldHVybiBKKGVuLHRoaXMsZW4sZnVuY3Rpb24odCxyLGUpe3JldHVybiB7bmFtZTpuLHZhbHVlOnIsc3RhcnQ6dCxlbmQ6ZX19KX0sdS5zZXBCeT1mdW5jdGlvbihuKXtyZXR1cm4gVih0aGlzLG4pfSx1LnNlcEJ5MT1mdW5jdGlvbihuKXtyZXR1cm4gSCh0aGlzLG4pfSx1Lmxvb2thaGVhZD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5za2lwKFoobikpfSx1Lm5vdEZvbGxvd2VkQnk9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuc2tpcCgkKG4pKX0sdS5kZXNjPWZ1bmN0aW9uKG4pe0Uobil8fChuPVtuXSk7dmFyIHQ9dGhpcztyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PXQuXyhyLGUpO3JldHVybiB1LnN0YXR1c3x8KHUuZXhwZWN0ZWQ9biksdX0pfSx1LmZhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm9yKFgobikpfSx1LmFwPWZ1bmN0aW9uKG4pe3JldHVybiBKKG4sdGhpcyxmdW5jdGlvbihuLHQpe3JldHVybiBuKHQpfSl9LHUuY2hhaW49ZnVuY3Rpb24obil7dmFyIHQ9dGhpcztyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PXQuXyhyLGUpO3JldHVybiB1LnN0YXR1cz9CKG4odS52YWx1ZSkuXyhyLHUuaW5kZXgpLHUpOnV9KX0sdS5jb25jYXQ9dS5vcix1LmVtcHR5PXJuLHUub2Y9WCx1WyJmYW50YXN5LWxhbmQvYXAiXT11LmFwLHVbImZhbnRhc3ktbGFuZC9jaGFpbiJdPXUuY2hhaW4sdVsiZmFudGFzeS1sYW5kL2NvbmNhdCJdPXUuY29uY2F0LHVbImZhbnRhc3ktbGFuZC9lbXB0eSJdPXUuZW1wdHksdVsiZmFudGFzeS1sYW5kL29mIl09dS5vZix1WyJmYW50YXN5LWxhbmQvbWFwIl09dS5tYXA7dmFyIGVuPWUoZnVuY3Rpb24obix0KXtyZXR1cm4gYih0LFMobix0KSl9KSx1bj1lKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ+PW4ubGVuZ3RoP3godCwiYW55IGNoYXJhY3Rlci9ieXRlIik6Yih0KzEsTChuLHQpKX0pLG9uPWUoZnVuY3Rpb24obix0KXtyZXR1cm4gYihuLmxlbmd0aCxuLnNsaWNlKHQpKX0pLGFuPWUoZnVuY3Rpb24obix0KXtyZXR1cm4gdDxuLmxlbmd0aD94KHQsIkVPRiIpOmIodCxudWxsKX0pLGZuPVEoL1swLTldLykuZGVzYygiYSBkaWdpdCIpLGNuPVEoL1swLTldKi8pLmRlc2MoIm9wdGlvbmFsIGRpZ2l0cyIpLHNuPVEoL1thLXpdL2kpLmRlc2MoImEgbGV0dGVyIiksbG49USgvW2Etel0qL2kpLmRlc2MoIm9wdGlvbmFsIGxldHRlcnMiKSxobj1RKC9ccyovKS5kZXNjKCJvcHRpb25hbCB3aGl0ZXNwYWNlIikscG49USgvXHMrLykuZGVzYygid2hpdGVzcGFjZSIpLGRuPUsoIlxyIiksdm49SygiXG4iKSxnbj1LKCJcclxuIiksbW49VChnbix2bixkbikuZGVzYygibmV3bGluZSIpLHluPVQobW4sYW4pO2UuYWxsPW9uLGUuYWx0PVQsZS5hbnk9dW4sZS5jcj1kbixlLmNyZWF0ZUxhbmd1YWdlPWZ1bmN0aW9uKG4pe3ZhciB0PXt9O2Zvcih2YXIgciBpbiBuKSh7fSkuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiZmdW5jdGlvbihyKXt0W3JdPXRuKGZ1bmN0aW9uKCl7cmV0dXJuIG5bcl0odCl9KTt9KHIpO3JldHVybiB0fSxlLmNybGY9Z24sZS5jdXN0b209ZnVuY3Rpb24obil7cmV0dXJuIGUobihiLHgpKX0sZS5kaWdpdD1mbixlLmRpZ2l0cz1jbixlLmVtcHR5PXJuLGUuZW5kPXluLGUuZW9mPWFuLGUuZmFpbD1ZLGUuZm9ybWF0RXJyb3I9TixlLmluZGV4PWVuLGUuaXNQYXJzZXI9eSxlLmxhenk9dG4sZS5sZXR0ZXI9c24sZS5sZXR0ZXJzPWxuLGUubGY9dm4sZS5sb29rYWhlYWQ9WixlLm1ha2VGYWlsdXJlPXgsZS5tYWtlU3VjY2Vzcz1iLGUubmV3bGluZT1tbixlLm5vbmVPZj1mdW5jdGlvbihuKXtyZXR1cm4gbm4oZnVuY3Rpb24odCl7cmV0dXJuIG4uaW5kZXhPZih0KTwwfSkuZGVzYygibm9uZSBvZiAnIituKyInIil9LGUubm90Rm9sbG93ZWRCeT0kLGUub2Y9WCxlLm9uZU9mPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdD1uLnNwbGl0KCIiKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0iJyIrdFtyXSsiJyI7cmV0dXJuIG5uKGZ1bmN0aW9uKHQpe3JldHVybiBuLmluZGV4T2YodCk+PTB9KS5kZXNjKHQpfSxlLm9wdFdoaXRlc3BhY2U9aG4sZS5QYXJzZXI9ZSxlLnJhbmdlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5uKGZ1bmN0aW9uKHIpe3JldHVybiBuPD1yJiZyPD10fSkuZGVzYyhuKyItIit0KX0sZS5yZWdleD1RLGUucmVnZXhwPVEsZS5zZXBCeT1WLGUuc2VwQnkxPUgsZS5zZXE9QyxlLnNlcU1hcD1KLGUuc2VxT2JqPWZ1bmN0aW9uKCl7Zm9yKHZhciBuLHQ9e30scj0wLHU9KG49YXJndW1lbnRzLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pKSxvPXUubGVuZ3RoLGk9MDtpPG87aSs9MSl7dmFyIGE9dVtpXTtpZigheShhKSl7aWYoRShhKSYmMj09PWEubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGFbMF0mJnkoYVsxXSkpe3ZhciBmPWFbMF07aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZikpdGhyb3cgbmV3IEVycm9yKCJzZXFPYmo6IGR1cGxpY2F0ZSBrZXkgIitmKTt0W2ZdPSEwLHIrKztjb250aW51ZX10aHJvdyBuZXcgRXJyb3IoInNlcU9iaiBhcmd1bWVudHMgbXVzdCBiZSBwYXJzZXJzIG9yIFtzdHJpbmcsIHBhcnNlcl0gYXJyYXkgcGFpcnMuIil9fWlmKDA9PT1yKXRocm93IG5ldyBFcnJvcigic2VxT2JqIGV4cGVjdHMgYXQgbGVhc3Qgb25lIG5hbWVkIHBhcnNlciwgZm91bmQgemVybyIpO3JldHVybiBlKGZ1bmN0aW9uKG4sdCl7Zm9yKHZhciByLGU9e30saT0wO2k8bztpKz0xKXt2YXIgYSxmO2lmKEUodVtpXSk/KGE9dVtpXVswXSxmPXVbaV1bMV0pOihhPW51bGwsZj11W2ldKSwhKHI9QihmLl8obix0KSxyKSkuc3RhdHVzKXJldHVybiByO2EmJihlW2FdPXIudmFsdWUpLHQ9ci5pbmRleDt9cmV0dXJuIEIoYih0LGUpLHIpfSl9LGUuc3RyaW5nPUssZS5zdWNjZWVkPVgsZS50YWtlV2hpbGU9ZnVuY3Rpb24obil7cmV0dXJuIGsobiksZShmdW5jdGlvbih0LHIpe2Zvcih2YXIgZT1yO2U8dC5sZW5ndGgmJm4oTCh0LGUpKTspZSsrO3JldHVybiBiKGUsdC5zbGljZShyLGUpKX0pfSxlLnRlc3Q9bm4sZS53aGl0ZXNwYWNlPXBuLGVbImZhbnRhc3ktbGFuZC9lbXB0eSJdPXJuLGVbImZhbnRhc3ktbGFuZC9vZiJdPVgsZS5CaW5hcnk9e2JpdFNlcTpsLGJpdFNlcU9iajpmdW5jdGlvbihuKXtzKCk7dmFyIHQ9e30scj0wLGU9YShmdW5jdGlvbihuKXtpZihFKG4pKXt2YXIgZT1uO2lmKDIhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlsiK2Uuam9pbigiLCAiKSsiXSBzaG91bGQgYmUgbGVuZ3RoIDIsIGdvdCBsZW5ndGggIitlLmxlbmd0aCk7aWYoUChlWzBdKSxPKGVbMV0pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGVbMF0pKXRocm93IG5ldyBFcnJvcigiZHVwbGljYXRlIGtleSBpbiBiaXRTZXFPYmo6ICIrZVswXSk7cmV0dXJuIHRbZVswXV09ITAscisrLGV9cmV0dXJuIE8obiksW251bGwsbl19LG4pO2lmKHI8MSl0aHJvdyBuZXcgRXJyb3IoImJpdFNlcU9iaiBleHBlY3RzIGF0IGxlYXN0IG9uZSBuYW1lZCBwYWlyLCBnb3QgWyIrbi5qb2luKCIsICIpKyJdIik7dmFyIHU9YShmdW5jdGlvbihuKXtyZXR1cm4gblswXX0sZSk7cmV0dXJuIGwoYShmdW5jdGlvbihuKXtyZXR1cm4gblsxXX0sZSkpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gaShmdW5jdGlvbihuLHQpe3JldHVybiBudWxsIT09dFswXSYmKG5bdFswXV09dFsxXSksbn0se30sYShmdW5jdGlvbih0LHIpe3JldHVybiBbdCxuW3JdXX0sdSkpfSl9LGJ5dGU6ZnVuY3Rpb24obil7aWYocygpLE8obiksbj4yNTUpdGhyb3cgbmV3IEVycm9yKCJWYWx1ZSBzcGVjaWZpZWQgdG8gYnl0ZSBjb25zdHJ1Y3RvciAoIituKyI9MHgiK24udG9TdHJpbmcoMTYpKyIpIGlzIGxhcmdlciBpbiB2YWx1ZSB0aGFuIGEgc2luZ2xlIGJ5dGUuIik7dmFyIHQ9KG4+MTU/IjB4IjoiMHgwIikrbi50b1N0cmluZygxNik7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT1MKHIsZSk7cmV0dXJuIHU9PT1uP2IoZSsxLHUpOngoZSx0KX0pfSxidWZmZXI6ZnVuY3Rpb24obil7cmV0dXJuIGgoImJ1ZmZlciIsbikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBCdWZmZXIuZnJvbShuKX0pfSxlbmNvZGVkU3RyaW5nOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGgoInN0cmluZyIsdCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKG4pfSl9LHVpbnRCRTpkLHVpbnQ4QkU6ZCgxKSx1aW50MTZCRTpkKDIpLHVpbnQzMkJFOmQoNCksdWludExFOnYsdWludDhMRTp2KDEpLHVpbnQxNkxFOnYoMiksdWludDMyTEU6dig0KSxpbnRCRTpnLGludDhCRTpnKDEpLGludDE2QkU6ZygyKSxpbnQzMkJFOmcoNCksaW50TEU6bSxpbnQ4TEU6bSgxKSxpbnQxNkxFOm0oMiksaW50MzJMRTptKDQpLGZsb2F0QkU6aCgiZmxvYXRCRSIsNCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWRGbG9hdEJFKDApfSksZmxvYXRMRTpoKCJmbG9hdExFIiw0KS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVhZEZsb2F0TEUoMCl9KSxkb3VibGVCRTpoKCJkb3VibGVCRSIsOCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWREb3VibGVCRSgwKX0pLGRvdWJsZUxFOmgoImRvdWJsZUxFIiw4KS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVhZERvdWJsZUxFKDApfSl9LG4uZXhwb3J0cz1lO31dKX0pOwoJfShwYXJzaW1tb25fdW1kX21pbikpOwoKCXZhciBlbW9qaVJlZ2V4ID0gKCkgPT4gewoJCS8vIGh0dHBzOi8vbXRocy5iZS9lbW9qaQoJCXJldHVybiAvKD86WyMqMC05XVx1RkUwRj9cdTIwRTN8W1x4QTlceEFFXHUyMDNDXHUyMDQ5XHUyMTIyXHUyMTM5XHUyMTk0LVx1MjE5OVx1MjFBOVx1MjFBQVx1MjMxQVx1MjMxQlx1MjMyOFx1MjNDRlx1MjNFRC1cdTIzRUZcdTIzRjFcdTIzRjJcdTIzRjgtXHUyM0ZBXHUyNEMyXHUyNUFBXHUyNUFCXHUyNUI2XHUyNUMwXHUyNUZCXHUyNUZDXHUyNUZFXHUyNjAwLVx1MjYwNFx1MjYwRVx1MjYxMVx1MjYxNFx1MjYxNVx1MjYxOFx1MjYyMFx1MjYyMlx1MjYyM1x1MjYyNlx1MjYyQVx1MjYyRVx1MjYyRlx1MjYzOC1cdTI2M0FcdTI2NDBcdTI2NDJcdTI2NDgtXHUyNjUzXHUyNjVGXHUyNjYwXHUyNjYzXHUyNjY1XHUyNjY2XHUyNjY4XHUyNjdCXHUyNjdFXHUyNjdGXHUyNjkyXHUyNjk0LVx1MjY5N1x1MjY5OVx1MjY5Qlx1MjY5Q1x1MjZBMFx1MjZBN1x1MjZBQVx1MjZCMFx1MjZCMVx1MjZCRFx1MjZCRVx1MjZDNFx1MjZDOFx1MjZDRlx1MjZEMVx1MjZEM1x1MjZFOVx1MjZGMC1cdTI2RjVcdTI2RjdcdTI2RjhcdTI2RkFcdTI3MDJcdTI3MDhcdTI3MDlcdTI3MEZcdTI3MTJcdTI3MTRcdTI3MTZcdTI3MURcdTI3MjFcdTI3MzNcdTI3MzRcdTI3NDRcdTI3NDdcdTI3NTdcdTI3NjNcdTI3QTFcdTI5MzRcdTI5MzVcdTJCMDUtXHUyQjA3XHUyQjFCXHUyQjFDXHUyQjU1XHUzMDMwXHUzMDNEXHUzMjk3XHUzMjk5XVx1RkUwRj98W1x1MjYxRFx1MjcwQ1x1MjcwRF0oPzpcdUZFMEZ8XHVEODNDW1x1REZGQi1cdURGRkZdKT98W1x1MjcwQVx1MjcwQl0oPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pP3xbXHUyM0U5LVx1MjNFQ1x1MjNGMFx1MjNGM1x1MjVGRFx1MjY5M1x1MjZBMVx1MjZBQlx1MjZDNVx1MjZDRVx1MjZENFx1MjZFQVx1MjZGRFx1MjcwNVx1MjcyOFx1Mjc0Q1x1Mjc0RVx1Mjc1My1cdTI3NTVcdTI3OTUtXHUyNzk3XHUyN0IwXHUyN0JGXHUyQjUwXXxcdTI2RjkoPzpcdUZFMEZ8XHVEODNDW1x1REZGQi1cdURGRkZdKT8oPzpcdTIwMERbXHUyNjQwXHUyNjQyXVx1RkUwRj8pP3xcdTI3NjRcdUZFMEY/KD86XHUyMDBEKD86XHVEODNEXHVERDI1fFx1RDgzRVx1REU3OSkpP3xcdUQ4M0MoPzpbXHVEQzA0XHVERDcwXHVERDcxXHVERDdFXHVERDdGXHVERTAyXHVERTM3XHVERjIxXHVERjI0LVx1REYyQ1x1REYzNlx1REY3RFx1REY5Nlx1REY5N1x1REY5OS1cdURGOUJcdURGOUVcdURGOUZcdURGQ0RcdURGQ0VcdURGRDQtXHVERkRGXHVERkY1XHVERkY3XVx1RkUwRj98W1x1REY4NVx1REZDMlx1REZDN10oPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pP3xbXHVERkMzXHVERkM0XHVERkNBXSg/Olx1RDgzQ1tcdURGRkItXHVERkZGXSk/KD86XHUyMDBEW1x1MjY0MFx1MjY0Ml1cdUZFMEY/KT98W1x1REZDQlx1REZDQ10oPzpcdUZFMEZ8XHVEODNDW1x1REZGQi1cdURGRkZdKT8oPzpcdTIwMERbXHUyNjQwXHUyNjQyXVx1RkUwRj8pP3xbXHVEQ0NGXHVERDhFXHVERDkxLVx1REQ5QVx1REUwMVx1REUxQVx1REUyRlx1REUzMi1cdURFMzZcdURFMzgtXHVERTNBXHVERTUwXHVERTUxXHVERjAwLVx1REYyMFx1REYyRC1cdURGMzVcdURGMzctXHVERjdDXHVERjdFLVx1REY4NFx1REY4Ni1cdURGOTNcdURGQTAtXHVERkMxXHVERkM1XHVERkM2XHVERkM4XHVERkM5XHVERkNGLVx1REZEM1x1REZFMC1cdURGRjBcdURGRjgtXHVERkZGXXxcdURERTZcdUQ4M0NbXHVEREU4LVx1RERFQ1x1RERFRVx1RERGMVx1RERGMlx1RERGNFx1RERGNi1cdURERkFcdURERkNcdURERkRcdURERkZdfFx1RERFN1x1RDgzQ1tcdURERTZcdURERTdcdURERTktXHVEREVGXHVEREYxLVx1RERGNFx1RERGNi1cdURERjlcdURERkJcdURERkNcdURERkVcdURERkZdfFx1RERFOFx1RDgzQ1tcdURERTZcdURERThcdURERTlcdURERUItXHVEREVFXHVEREYwLVx1RERGNVx1RERGN1x1RERGQS1cdURERkZdfFx1RERFOVx1RDgzQ1tcdURERUFcdURERUNcdURERUZcdURERjBcdURERjJcdURERjRcdURERkZdfFx1RERFQVx1RDgzQ1tcdURERTZcdURERThcdURERUFcdURERUNcdURERURcdURERjctXHVEREZBXXxcdURERUJcdUQ4M0NbXHVEREVFLVx1RERGMFx1RERGMlx1RERGNFx1RERGN118XHVEREVDXHVEODNDW1x1RERFNlx1RERFN1x1RERFOS1cdURERUVcdURERjEtXHVEREYzXHVEREY1LVx1RERGQVx1RERGQ1x1RERGRV18XHVEREVEXHVEODNDW1x1RERGMFx1RERGMlx1RERGM1x1RERGN1x1RERGOVx1RERGQV18XHVEREVFXHVEODNDW1x1RERFOC1cdURERUFcdURERjEtXHVEREY0XHVEREY2LVx1RERGOV18XHVEREVGXHVEODNDW1x1RERFQVx1RERGMlx1RERGNFx1RERGNV18XHVEREYwXHVEODNDW1x1RERFQVx1RERFQy1cdURERUVcdURERjJcdURERjNcdURERjVcdURERjdcdURERkNcdURERkVcdURERkZdfFx1RERGMVx1RDgzQ1tcdURERTYtXHVEREU4XHVEREVFXHVEREYwXHVEREY3LVx1RERGQlx1RERGRV18XHVEREYyXHVEODNDW1x1RERFNlx1RERFOC1cdURERURcdURERjAtXHVEREZGXXxcdURERjNcdUQ4M0NbXHVEREU2XHVEREU4XHVEREVBLVx1RERFQ1x1RERFRVx1RERGMVx1RERGNFx1RERGNVx1RERGN1x1RERGQVx1RERGRl18XHVEREY0XHVEODNDXHVEREYyfFx1RERGNVx1RDgzQ1tcdURERTZcdURERUEtXHVEREVEXHVEREYwLVx1RERGM1x1RERGNy1cdURERjlcdURERkNcdURERkVdfFx1RERGNlx1RDgzQ1x1RERFNnxcdURERjdcdUQ4M0NbXHVEREVBXHVEREY0XHVEREY4XHVEREZBXHVEREZDXXxcdURERjhcdUQ4M0NbXHVEREU2LVx1RERFQVx1RERFQy1cdURERjRcdURERjctXHVEREY5XHVEREZCXHVEREZELVx1RERGRl18XHVEREY5XHVEODNDW1x1RERFNlx1RERFOFx1RERFOVx1RERFQi1cdURERURcdURERUYtXHVEREY0XHVEREY3XHVEREY5XHVEREZCXHVEREZDXHVEREZGXXxcdURERkFcdUQ4M0NbXHVEREU2XHVEREVDXHVEREYyXHVEREYzXHVEREY4XHVEREZFXHVEREZGXXxcdURERkJcdUQ4M0NbXHVEREU2XHVEREU4XHVEREVBXHVEREVDXHVEREVFXHVEREYzXHVEREZBXXxcdURERkNcdUQ4M0NbXHVEREVCXHVEREY4XXxcdURERkRcdUQ4M0NcdURERjB8XHVEREZFXHVEODNDW1x1RERFQVx1RERGOV18XHVEREZGXHVEODNDW1x1RERFNlx1RERGMlx1RERGQ118XHVERkYzXHVGRTBGPyg/Olx1MjAwRCg/Olx1MjZBN1x1RkUwRj98XHVEODNDXHVERjA4KSk/fFx1REZGNCg/Olx1MjAwRFx1MjYyMFx1RkUwRj98XHVEQjQwXHVEQzY3XHVEQjQwXHVEQzYyXHVEQjQwKD86XHVEQzY1XHVEQjQwXHVEQzZFXHVEQjQwXHVEQzY3fFx1REM3M1x1REI0MFx1REM2M1x1REI0MFx1REM3NHxcdURDNzdcdURCNDBcdURDNkNcdURCNDBcdURDNzMpXHVEQjQwXHVEQzdGKT8pfFx1RDgzRCg/OltcdURDM0ZcdURDRkRcdURENDlcdURENEFcdURENkZcdURENzBcdURENzNcdURENzYtXHVERDc5XHVERDg3XHVERDhBLVx1REQ4RFx1RERBNVx1RERBOFx1RERCMVx1RERCMlx1RERCQ1x1RERDMi1cdUREQzRcdURERDEtXHVEREQzXHVERERDLVx1RERERVx1RERFMVx1RERFM1x1RERFOFx1RERFRlx1RERGM1x1RERGQVx1REVDQlx1REVDRC1cdURFQ0ZcdURFRTAtXHVERUU1XHVERUU5XHVERUYwXHVERUYzXVx1RkUwRj98W1x1REM0Mlx1REM0M1x1REM0Ni1cdURDNTBcdURDNjZcdURDNjdcdURDNkItXHVEQzZEXHVEQzcyXHVEQzc0LVx1REM3Nlx1REM3OFx1REM3Q1x1REM4M1x1REM4NVx1REM4Rlx1REM5MVx1RENBQVx1REQ3QVx1REQ5NVx1REQ5Nlx1REU0Q1x1REU0Rlx1REVDMFx1REVDQ10oPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pP3xbXHVEQzZFXHVEQzcwXHVEQzcxXHVEQzczXHVEQzc3XHVEQzgxXHVEQzgyXHVEQzg2XHVEQzg3XHVERTQ1LVx1REU0N1x1REU0Qlx1REU0RFx1REU0RVx1REVBM1x1REVCNC1cdURFQjZdKD86XHVEODNDW1x1REZGQi1cdURGRkZdKT8oPzpcdTIwMERbXHUyNjQwXHUyNjQyXVx1RkUwRj8pP3xbXHVERDc0XHVERDkwXSg/Olx1RkUwRnxcdUQ4M0NbXHVERkZCLVx1REZGRl0pP3xbXHVEQzAwLVx1REMwN1x1REMwOS1cdURDMTRcdURDMTYtXHVEQzNBXHVEQzNDLVx1REMzRVx1REM0MFx1REM0NFx1REM0NVx1REM1MS1cdURDNjVcdURDNkFcdURDNzktXHVEQzdCXHVEQzdELVx1REM4MFx1REM4NFx1REM4OC1cdURDOEVcdURDOTBcdURDOTItXHVEQ0E5XHVEQ0FCLVx1RENGQ1x1RENGRi1cdUREM0RcdURENEItXHVERDRFXHVERDUwLVx1REQ2N1x1RERBNFx1RERGQi1cdURFMkRcdURFMkYtXHVERTM0XHVERTM3LVx1REU0NFx1REU0OC1cdURFNEFcdURFODAtXHVERUEyXHVERUE0LVx1REVCM1x1REVCNy1cdURFQkZcdURFQzEtXHVERUM1XHVERUQwLVx1REVEMlx1REVENS1cdURFRDdcdURFREQtXHVERURGXHVERUVCXHVERUVDXHVERUY0LVx1REVGQ1x1REZFMC1cdURGRUJcdURGRjBdfFx1REMwOCg/Olx1MjAwRFx1MkIxQik/fFx1REMxNSg/Olx1MjAwRFx1RDgzRVx1RERCQSk/fFx1REMzQig/Olx1MjAwRFx1Mjc0NFx1RkUwRj8pP3xcdURDNDFcdUZFMEY/KD86XHUyMDBEXHVEODNEXHVEREU4XHVGRTBGPyk/fFx1REM2OCg/Olx1MjAwRCg/OltcdTI2OTVcdTI2OTZcdTI3MDhdXHVGRTBGP3xcdTI3NjRcdUZFMEY/XHUyMDBEXHVEODNEKD86XHVEQzhCXHUyMDBEXHVEODNEKT9cdURDNjh8XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEKD86W1x1REM2OFx1REM2OV1cdTIwMERcdUQ4M0QoPzpcdURDNjYoPzpcdTIwMERcdUQ4M0RcdURDNjYpP3xcdURDNjcoPzpcdTIwMERcdUQ4M0RbXHVEQzY2XHVEQzY3XSk/KXxbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdURDNjYoPzpcdTIwMERcdUQ4M0RcdURDNjYpP3xcdURDNjcoPzpcdTIwMERcdUQ4M0RbXHVEQzY2XHVEQzY3XSk/KXxcdUQ4M0VbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF0pfFx1RDgzQyg/Olx1REZGQig/Olx1MjAwRCg/OltcdTI2OTVcdTI2OTZcdTI3MDhdXHVGRTBGP3xcdTI3NjRcdUZFMEY/XHUyMDBEXHVEODNEKD86XHVEQzhCXHUyMDBEXHVEODNEKT9cdURDNjhcdUQ4M0NbXHVERkZCLVx1REZGRl18XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFKD86W1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdfFx1REQxRFx1MjAwRFx1RDgzRFx1REM2OFx1RDgzQ1tcdURGRkMtXHVERkZGXSkpKT98XHVERkZDKD86XHUyMDBEKD86W1x1MjY5NVx1MjY5Nlx1MjcwOF1cdUZFMEY/fFx1Mjc2NFx1RkUwRj9cdTIwMERcdUQ4M0QoPzpcdURDOEJcdTIwMERcdUQ4M0QpP1x1REM2OFx1RDgzQ1tcdURGRkItXHVERkZGXXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0UoPzpbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF18XHVERDFEXHUyMDBEXHVEODNEXHVEQzY4XHVEODNDW1x1REZGQlx1REZGRC1cdURGRkZdKSkpP3xcdURGRkQoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHUyNzY0XHVGRTBGP1x1MjAwRFx1RDgzRCg/Olx1REM4Qlx1MjAwRFx1RDgzRCk/XHVEQzY4XHVEODNDW1x1REZGQi1cdURGRkZdfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRSg/OltcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXXxcdUREMURcdTIwMERcdUQ4M0RcdURDNjhcdUQ4M0NbXHVERkZCXHVERkZDXHVERkZFXHVERkZGXSkpKT98XHVERkZFKD86XHUyMDBEKD86W1x1MjY5NVx1MjY5Nlx1MjcwOF1cdUZFMEY/fFx1Mjc2NFx1RkUwRj9cdTIwMERcdUQ4M0QoPzpcdURDOEJcdTIwMERcdUQ4M0QpP1x1REM2OFx1RDgzQ1tcdURGRkItXHVERkZGXXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0UoPzpbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF18XHVERDFEXHUyMDBEXHVEODNEXHVEQzY4XHVEODNDW1x1REZGQi1cdURGRkRcdURGRkZdKSkpP3xcdURGRkYoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHUyNzY0XHVGRTBGP1x1MjAwRFx1RDgzRCg/Olx1REM4Qlx1MjAwRFx1RDgzRCk/XHVEQzY4XHVEODNDW1x1REZGQi1cdURGRkZdfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRSg/OltcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXXxcdUREMURcdTIwMERcdUQ4M0RcdURDNjhcdUQ4M0NbXHVERkZCLVx1REZGRV0pKSk/KSk/fFx1REM2OSg/Olx1MjAwRCg/OltcdTI2OTVcdTI2OTZcdTI3MDhdXHVGRTBGP3xcdTI3NjRcdUZFMEY/XHUyMDBEXHVEODNEKD86XHVEQzhCXHUyMDBEXHVEODNEKT9bXHVEQzY4XHVEQzY5XXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0QoPzpbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdURDNjYoPzpcdTIwMERcdUQ4M0RcdURDNjYpP3xcdURDNjcoPzpcdTIwMERcdUQ4M0RbXHVEQzY2XHVEQzY3XSk/fFx1REM2OVx1MjAwRFx1RDgzRCg/Olx1REM2Nig/Olx1MjAwRFx1RDgzRFx1REM2Nik/fFx1REM2Nyg/Olx1MjAwRFx1RDgzRFtcdURDNjZcdURDNjddKT8pKXxcdUQ4M0VbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF0pfFx1RDgzQyg/Olx1REZGQig/Olx1MjAwRCg/OltcdTI2OTVcdTI2OTZcdTI3MDhdXHVGRTBGP3xcdTI3NjRcdUZFMEY/XHUyMDBEXHVEODNEKD86W1x1REM2OFx1REM2OV18XHVEQzhCXHUyMDBEXHVEODNEW1x1REM2OFx1REM2OV0pXHVEODNDW1x1REZGQi1cdURGRkZdfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRSg/OltcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXXxcdUREMURcdTIwMERcdUQ4M0RbXHVEQzY4XHVEQzY5XVx1RDgzQ1tcdURGRkMtXHVERkZGXSkpKT98XHVERkZDKD86XHUyMDBEKD86W1x1MjY5NVx1MjY5Nlx1MjcwOF1cdUZFMEY/fFx1Mjc2NFx1RkUwRj9cdTIwMERcdUQ4M0QoPzpbXHVEQzY4XHVEQzY5XXxcdURDOEJcdTIwMERcdUQ4M0RbXHVEQzY4XHVEQzY5XSlcdUQ4M0NbXHVERkZCLVx1REZGRl18XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFKD86W1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdfFx1REQxRFx1MjAwRFx1RDgzRFtcdURDNjhcdURDNjldXHVEODNDW1x1REZGQlx1REZGRC1cdURGRkZdKSkpP3xcdURGRkQoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHUyNzY0XHVGRTBGP1x1MjAwRFx1RDgzRCg/OltcdURDNjhcdURDNjldfFx1REM4Qlx1MjAwRFx1RDgzRFtcdURDNjhcdURDNjldKVx1RDgzQ1tcdURGRkItXHVERkZGXXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0UoPzpbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF18XHVERDFEXHUyMDBEXHVEODNEW1x1REM2OFx1REM2OV1cdUQ4M0NbXHVERkZCXHVERkZDXHVERkZFXHVERkZGXSkpKT98XHVERkZFKD86XHUyMDBEKD86W1x1MjY5NVx1MjY5Nlx1MjcwOF1cdUZFMEY/fFx1Mjc2NFx1RkUwRj9cdTIwMERcdUQ4M0QoPzpbXHVEQzY4XHVEQzY5XXxcdURDOEJcdTIwMERcdUQ4M0RbXHVEQzY4XHVEQzY5XSlcdUQ4M0NbXHVERkZCLVx1REZGRl18XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFKD86W1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdfFx1REQxRFx1MjAwRFx1RDgzRFtcdURDNjhcdURDNjldXHVEODNDW1x1REZGQi1cdURGRkRcdURGRkZdKSkpP3xcdURGRkYoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHUyNzY0XHVGRTBGP1x1MjAwRFx1RDgzRCg/OltcdURDNjhcdURDNjldfFx1REM4Qlx1MjAwRFx1RDgzRFtcdURDNjhcdURDNjldKVx1RDgzQ1tcdURGRkItXHVERkZGXXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0UoPzpbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF18XHVERDFEXHUyMDBEXHVEODNEW1x1REM2OFx1REM2OV1cdUQ4M0NbXHVERkZCLVx1REZGRV0pKSk/KSk/fFx1REM2Rig/Olx1MjAwRFtcdTI2NDBcdTI2NDJdXHVGRTBGPyk/fFx1REQ3NSg/Olx1RkUwRnxcdUQ4M0NbXHVERkZCLVx1REZGRl0pPyg/Olx1MjAwRFtcdTI2NDBcdTI2NDJdXHVGRTBGPyk/fFx1REUyRSg/Olx1MjAwRFx1RDgzRFx1RENBOCk/fFx1REUzNSg/Olx1MjAwRFx1RDgzRFx1RENBQik/fFx1REUzNig/Olx1MjAwRFx1RDgzQ1x1REYyQlx1RkUwRj8pPyl8XHVEODNFKD86W1x1REQwQ1x1REQwRlx1REQxOC1cdUREMUZcdUREMzAtXHVERDM0XHVERDM2XHVERDc3XHVEREI1XHVEREI2XHVEREJCXHVEREQyXHVEREQzXHVEREQ1XHVERUMzLVx1REVDNVx1REVGMFx1REVGMi1cdURFRjZdKD86XHVEODNDW1x1REZGQi1cdURGRkZdKT98W1x1REQyNlx1REQzNVx1REQzNy1cdUREMzlcdUREM0RcdUREM0VcdUREQjhcdUREQjlcdUREQ0QtXHVERENGXHVEREQ0XHVEREQ2LVx1RERERF0oPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pPyg/Olx1MjAwRFtcdTI2NDBcdTI2NDJdXHVGRTBGPyk/fFtcdUREREVcdUREREZdKD86XHUyMDBEW1x1MjY0MFx1MjY0Ml1cdUZFMEY/KT98W1x1REQwRFx1REQwRVx1REQxMC1cdUREMTdcdUREMjAtXHVERDI1XHVERDI3LVx1REQyRlx1REQzQVx1REQzRi1cdURENDVcdURENDctXHVERDc2XHVERDc4LVx1RERCNFx1RERCN1x1RERCQVx1RERCQy1cdUREQ0NcdURERDBcdURERTAtXHVEREZGXHVERTcwLVx1REU3NFx1REU3OC1cdURFN0NcdURFODAtXHVERTg2XHVERTkwLVx1REVBQ1x1REVCMC1cdURFQkFcdURFQzAtXHVERUMyXHVERUQwLVx1REVEOVx1REVFMC1cdURFRTddfFx1REQzQyg/Olx1MjAwRFtcdTI2NDBcdTI2NDJdXHVGRTBGP3xcdUQ4M0NbXHVERkZCLVx1REZGRl0pP3xcdURERDEoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY4NFx1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFKD86W1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdfFx1REQxRFx1MjAwRFx1RDgzRVx1REREMSkpfFx1RDgzQyg/Olx1REZGQig/Olx1MjAwRCg/OltcdTI2OTVcdTI2OTZcdTI3MDhdXHVGRTBGP3xcdTI3NjRcdUZFMEY/XHUyMDBEKD86XHVEODNEXHVEQzhCXHUyMDBEKT9cdUQ4M0VcdURERDFcdUQ4M0NbXHVERkZDLVx1REZGRl18XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY4NFx1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFKD86W1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdfFx1REQxRFx1MjAwRFx1RDgzRVx1REREMVx1RDgzQ1tcdURGRkItXHVERkZGXSkpKT98XHVERkZDKD86XHUyMDBEKD86W1x1MjY5NVx1MjY5Nlx1MjcwOF1cdUZFMEY/fFx1Mjc2NFx1RkUwRj9cdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMEQpP1x1RDgzRVx1REREMVx1RDgzQ1tcdURGRkJcdURGRkQtXHVERkZGXXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjg0XHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0UoPzpbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF18XHVERDFEXHUyMDBEXHVEODNFXHVEREQxXHVEODNDW1x1REZGQi1cdURGRkZdKSkpP3xcdURGRkQoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHUyNzY0XHVGRTBGP1x1MjAwRCg/Olx1RDgzRFx1REM4Qlx1MjAwRCk/XHVEODNFXHVEREQxXHVEODNDW1x1REZGQlx1REZGQ1x1REZGRVx1REZGRl18XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY4NFx1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFKD86W1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdfFx1REQxRFx1MjAwRFx1RDgzRVx1REREMVx1RDgzQ1tcdURGRkItXHVERkZGXSkpKT98XHVERkZFKD86XHUyMDBEKD86W1x1MjY5NVx1MjY5Nlx1MjcwOF1cdUZFMEY/fFx1Mjc2NFx1RkUwRj9cdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMEQpP1x1RDgzRVx1REREMVx1RDgzQ1tcdURGRkItXHVERkZEXHVERkZGXXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjg0XHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0UoPzpbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF18XHVERDFEXHUyMDBEXHVEODNFXHVEREQxXHVEODNDW1x1REZGQi1cdURGRkZdKSkpP3xcdURGRkYoPzpcdTIwMEQoPzpbXHUyNjk1XHUyNjk2XHUyNzA4XVx1RkUwRj98XHUyNzY0XHVGRTBGP1x1MjAwRCg/Olx1RDgzRFx1REM4Qlx1MjAwRCk/XHVEODNFXHVEREQxXHVEODNDW1x1REZGQi1cdURGRkVdfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGODRcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRSg/OltcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXXxcdUREMURcdTIwMERcdUQ4M0VcdURERDFcdUQ4M0NbXHVERkZCLVx1REZGRl0pKSk/KSk/fFx1REVGMSg/Olx1RDgzQyg/Olx1REZGQig/Olx1MjAwRFx1RDgzRVx1REVGMlx1RDgzQ1tcdURGRkMtXHVERkZGXSk/fFx1REZGQyg/Olx1MjAwRFx1RDgzRVx1REVGMlx1RDgzQ1tcdURGRkJcdURGRkQtXHVERkZGXSk/fFx1REZGRCg/Olx1MjAwRFx1RDgzRVx1REVGMlx1RDgzQ1tcdURGRkJcdURGRkNcdURGRkVcdURGRkZdKT98XHVERkZFKD86XHUyMDBEXHVEODNFXHVERUYyXHVEODNDW1x1REZGQi1cdURGRkRcdURGRkZdKT98XHVERkZGKD86XHUyMDBEXHVEODNFXHVERUYyXHVEODNDW1x1REZGQi1cdURGRkVdKT8pKT8pKS9nOwoJfTsKCgkvKiogTm9ybWFsaXplIGEgZHVyYXRpb24gdG8gYWxsIG9mIHRoZSBwcm9wZXIgdW5pdHMuICovDQoJZnVuY3Rpb24gbm9ybWFsaXplRHVyYXRpb24oZHVyKSB7DQoJICAgIGlmIChkdXIgPT09IHVuZGVmaW5lZCB8fCBkdXIgPT09IG51bGwpDQoJICAgICAgICByZXR1cm4gZHVyOw0KCSAgICByZXR1cm4gZHVyLnNoaWZ0VG8oInllYXJzIiwgIm1vbnRocyIsICJ3ZWVrcyIsICJkYXlzIiwgImhvdXJzIiwgIm1pbnV0ZXMiLCAic2Vjb25kcyIsICJtaWxsaXNlY29uZHMiKS5ub3JtYWxpemUoKTsNCgl9DQoJLyoqIFN0cmlwIHRoZSB0aW1lIGNvbXBvbmVudHMgb2YgYSBkYXRlIHRpbWUgb2JqZWN0LiAqLw0KCWZ1bmN0aW9uIHN0cmlwVGltZShkdCkgew0KCSAgICBpZiAoZHQgPT09IG51bGwgfHwgZHQgPT09IHVuZGVmaW5lZCkNCgkgICAgICAgIHJldHVybiBkdDsNCgkgICAgcmV0dXJuIERhdGVUaW1lXzEuZnJvbU9iamVjdCh7DQoJICAgICAgICB5ZWFyOiBkdC55ZWFyLA0KCSAgICAgICAgbW9udGg6IGR0Lm1vbnRoLA0KCSAgICAgICAgZGF5OiBkdC5kYXksDQoJICAgIH0pOw0KCX0NCgkvKiogVHJ5IHRvIGV4dHJhY3QgYSBZWVlZTU1ERCBkYXRlIGZyb20gYSBzdHJpbmcuICovDQoJZnVuY3Rpb24gZXh0cmFjdERhdGUoc3RyKSB7DQoJICAgIGxldCBkYXRlTWF0Y2ggPSAvKFxkezR9KS0oXGR7Mn0pLShcZHsyfSkvLmV4ZWMoc3RyKTsNCgkgICAgaWYgKCFkYXRlTWF0Y2gpDQoJICAgICAgICBkYXRlTWF0Y2ggPSAvKFxkezR9KShcZHsyfSkoXGR7Mn0pLy5leGVjKHN0cik7DQoJICAgIGlmIChkYXRlTWF0Y2gpIHsNCgkgICAgICAgIGxldCB5ZWFyID0gTnVtYmVyLnBhcnNlSW50KGRhdGVNYXRjaFsxXSk7DQoJICAgICAgICBsZXQgbW9udGggPSBOdW1iZXIucGFyc2VJbnQoZGF0ZU1hdGNoWzJdKTsNCgkgICAgICAgIGxldCBkYXkgPSBOdW1iZXIucGFyc2VJbnQoZGF0ZU1hdGNoWzNdKTsNCgkgICAgICAgIHJldHVybiBEYXRlVGltZV8xLmZyb21PYmplY3QoeyB5ZWFyLCBtb250aCwgZGF5IH0pOw0KCSAgICB9DQoJICAgIHJldHVybiB1bmRlZmluZWQ7DQoJfQ0KCS8qKiBHZXQgdGhlIGZvbGRlciBjb250YWluaW5nIHRoZSBnaXZlbiBwYXRoIChpLmUuLCBsaWtlIGNvbXB1dGluZyAncGF0aC8uLicpLiAqLw0KCWZ1bmN0aW9uIGdldFBhcmVudEZvbGRlcihwYXRoKSB7DQoJICAgIHJldHVybiBwYXRoLnNwbGl0KCIvIikuc2xpY2UoMCwgLTEpLmpvaW4oIi8iKTsNCgl9DQoJLyoqIEdldCB0aGUgInRpdGxlIiBmb3IgYSBmaWxlLCBieSBzdHJpcHBpbmcgb3RoZXIgcGFydHMgb2YgdGhlIHBhdGggYXMgd2VsbCBhcyB0aGUgZXh0ZW5zaW9uLiAqLw0KCWZ1bmN0aW9uIGdldEZpbGVUaXRsZShwYXRoKSB7DQoJICAgIGlmIChwYXRoLmluY2x1ZGVzKCIvIikpDQoJICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZigiLyIpICsgMSk7DQoJICAgIGlmIChwYXRoLmVuZHNXaXRoKCIubWQiKSkNCgkgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDMpOw0KCSAgICByZXR1cm4gcGF0aDsNCgl9DQoJLyoqIEdldCB0aGUgZXh0ZW5zaW9uIG9mIGEgZmlsZSBmcm9tIHRoZSBmaWxlIHBhdGguICovDQoJZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKHBhdGgpIHsNCgkgICAgaWYgKCFwYXRoLmluY2x1ZGVzKCIuIikpDQoJICAgICAgICByZXR1cm4gIiI7DQoJICAgIHJldHVybiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCIuIikgKyAxKTsNCgl9DQoJLyoqIFBhcnNlIGFsbCBzdWJ0YWdzIG91dCBvZiB0aGUgZ2l2ZW4gdGFnLiBJLmUuLCAjaGVsbG8vaS9hbSB3b3VsZCB5aWVsZCBbI2hlbGxvL2kvYW0sICNoZWxsby9pLCAjaGVsbG9dLiAqLw0KCWZ1bmN0aW9uIGV4dHJhY3RTdWJ0YWdzKHRhZykgew0KCSAgICBsZXQgcmVzdWx0ID0gW3RhZ107DQoJICAgIHdoaWxlICh0YWcuaW5jbHVkZXMoIi8iKSkgew0KCSAgICAgICAgdGFnID0gdGFnLnN1YnN0cmluZygwLCB0YWcubGFzdEluZGV4T2YoIi8iKSk7DQoJICAgICAgICByZXN1bHQucHVzaCh0YWcpOw0KCSAgICB9DQoJICAgIHJldHVybiByZXN1bHQ7DQoJfQ0KCS8qKiBBIHBhcnNpbW1vbiBwYXJzZXIgd2hpY2ggY2Fub25pY2FsaXplcyB2YXJpYWJsZSBuYW1lcyB3aGlsZSBwcm9wZXJseSByZXNwZWN0aW5nIGVtb2ppLiAqLw0KCWNvbnN0IFZBUl9OQU1FX0NBTk9OSUNBTElaRVIgPSBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4KG5ldyBSZWdFeHAoZW1vamlSZWdleCgpLCAiIikpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4KC9bMC05XHB7TGV0dGVyfV8tXSsvdSkubWFwKHN0ciA9PiBzdHIudG9Mb2NhbGVMb3dlckNhc2UoKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMud2hpdGVzcGFjZS5tYXAoXyA9PiAiLSIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFueS5tYXAoXyA9PiAiIikpDQoJICAgIC5tYW55KCkNCgkgICAgLm1hcChyZXN1bHQgPT4gcmVzdWx0LmpvaW4oIiIpKTsNCgkvKiogQ29udmVydCBhbiBhcmJpdHJhcnkgdmFyaWFibGUgbmFtZSBpbnRvIHNvbWV0aGluZyBKUy9xdWVyeSBmcmllbmRseS4gKi8NCglmdW5jdGlvbiBjYW5vbmljYWxpemVWYXJOYW1lKG5hbWUpIHsNCgkgICAgcmV0dXJuIFZBUl9OQU1FX0NBTk9OSUNBTElaRVIudHJ5UGFyc2UobmFtZSk7DQoJfQ0KCWNvbnN0IEhFQURFUl9DQU5PTklDQUxJWkVSID0gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbHQocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleChuZXcgUmVnRXhwKGVtb2ppUmVnZXgoKSwgIiIpKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleCgvWzAtOVxwe0xldHRlcn1fLV0rL3UpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLndoaXRlc3BhY2UubWFwKF8gPT4gIiAiKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbnkubWFwKF8gPT4gIiAiKSkNCgkgICAgLm1hbnkoKQ0KCSAgICAubWFwKHJlc3VsdCA9PiB7DQoJICAgIHJldHVybiByZXN1bHQuam9pbigiIikuc3BsaXQoL1xzKy8pLmpvaW4oIiAiKS50cmltKCk7DQoJfSk7DQoJLyoqDQoJICogTm9ybWFsaXplcyB0aGUgdGV4dCBpbiBhIGhlYWRlciB0byBiZSBzb21ldGhpbmcgdGhhdCBpcyBhY3R1YWxseSBsaW5rYWJsZSB0by4gVGhpcyBtaW1pY3MNCgkgKiBob3cgT2JzaWRpYW4gZG9lcyBpdCdzIG5vcm1hbGl6YXRpb24sIGNvbGxhcHNpbmcgcmVwZWF0ZWQgc3BhY2VzIGFuZCBzdHJpcHBpbmcgb3V0IGNvbnRyb2wgY2hhcmFjdGVycy4NCgkgKi8NCglmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJGb3JMaW5rKGhlYWRlcikgew0KCSAgICByZXR1cm4gSEVBREVSX0NBTk9OSUNBTElaRVIudHJ5UGFyc2UoaGVhZGVyKTsNCgl9DQoJLyoqIFJlbmRlciBhIGR1cmF0aW9uIGluIGEgbWluaW1hbCBmb3JtYXQgdG8gc2F2ZSBzcGFjZS4gKi8NCglmdW5jdGlvbiByZW5kZXJNaW5pbWFsRHVyYXRpb24oZHVyKSB7DQoJICAgIGR1ciA9IG5vcm1hbGl6ZUR1cmF0aW9uKGR1cik7DQoJICAgIC8vIFRPRE86IEx1eG9uIGRvZXMgbm90IGhhdmUgbXVsdGktbGluZ3VhbC9sb2NhbGUtYXdhcmUgZHVyYXRpb24gcmVuZGVyaW5nLg0KCSAgICBsZXQgcmVzdWx0ID0gIiI7DQoJICAgIGlmIChkdXIueWVhcnMpDQoJICAgICAgICByZXN1bHQgKz0gYCR7ZHVyLnllYXJzfSB5ZWFycywgYDsNCgkgICAgaWYgKGR1ci5tb250aHMpDQoJICAgICAgICByZXN1bHQgKz0gYCR7ZHVyLm1vbnRoc30gbW9udGhzLCBgOw0KCSAgICBpZiAoZHVyLndlZWtzKQ0KCSAgICAgICAgcmVzdWx0ICs9IGAke2R1ci53ZWVrc30gd2Vla3MsIGA7DQoJICAgIGlmIChkdXIuZGF5cykNCgkgICAgICAgIHJlc3VsdCArPSBgJHtkdXIuZGF5c30gZGF5cywgYDsNCgkgICAgaWYgKGR1ci5ob3VycykNCgkgICAgICAgIHJlc3VsdCArPSBgJHtkdXIuaG91cnN9IGhvdXJzLCBgOw0KCSAgICBpZiAoZHVyLm1pbnV0ZXMpDQoJICAgICAgICByZXN1bHQgKz0gYCR7ZHVyLm1pbnV0ZXN9IG1pbnV0ZXMsIGA7DQoJICAgIGlmIChkdXIuc2Vjb25kcykNCgkgICAgICAgIHJlc3VsdCArPSBgJHtNYXRoLnJvdW5kKGR1ci5zZWNvbmRzKX0gc2Vjb25kcywgYDsNCgkgICAgaWYgKGR1ci5taWxsaXNlY29uZHMpDQoJICAgICAgICByZXN1bHQgKz0gYCR7TWF0aC5yb3VuZChkdXIubWlsbGlzZWNvbmRzKX0gbXMsIGA7DQoJICAgIGlmIChyZXN1bHQuZW5kc1dpdGgoIiwgIikpDQoJICAgICAgICByZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIHJlc3VsdC5sZW5ndGggLSAyKTsNCgkgICAgcmV0dXJuIHJlc3VsdDsNCgl9CgoJdmFyIFZhbHVlczsNCgkoZnVuY3Rpb24gKFZhbHVlcykgew0KCSAgICAvKiogQ29udmVydCBhbiBhcmJpdGFyeSB2YWx1ZSBpbnRvIGEgcmVhc29uYWJsZSwgTWFya2Rvd24tZnJpZW5kbHkgc3RyaW5nIGlmIHBvc3NpYmxlLiAqLw0KCSAgICBmdW5jdGlvbiB0b1N0cmluZyhmaWVsZCwgc2V0dGluZyA9IERFRkFVTFRfUVVFUllfU0VUVElOR1MsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7DQoJICAgICAgICBsZXQgd3JhcHBlZCA9IHdyYXBWYWx1ZShmaWVsZCk7DQoJICAgICAgICBpZiAoIXdyYXBwZWQpDQoJICAgICAgICAgICAgcmV0dXJuIHNldHRpbmcucmVuZGVyTnVsbEFzOw0KCSAgICAgICAgc3dpdGNoICh3cmFwcGVkLnR5cGUpIHsNCgkgICAgICAgICAgICBjYXNlICJudWxsIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuICIiICsgc2V0dGluZy5yZW5kZXJOdWxsQXM7DQoJICAgICAgICAgICAgY2FzZSAic3RyaW5nIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7DQoJICAgICAgICAgICAgY2FzZSAibnVtYmVyIjoNCgkgICAgICAgICAgICBjYXNlICJib29sZWFuIjoNCgkgICAgICAgICAgICBjYXNlICJodG1sIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuICIiICsgd3JhcHBlZC52YWx1ZTsNCgkgICAgICAgICAgICBjYXNlICJsaW5rIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFya2Rvd24oKTsNCgkgICAgICAgICAgICBjYXNlICJmdW5jdGlvbiI6DQoJICAgICAgICAgICAgICAgIHJldHVybiAiPGZ1bmN0aW9uPiI7DQoJICAgICAgICAgICAgY2FzZSAiYXJyYXkiOg0KCSAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gIiI7DQoJICAgICAgICAgICAgICAgIGlmIChyZWN1cnNpdmUpDQoJICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIlsiOw0KCSAgICAgICAgICAgICAgICByZXN1bHQgKz0gd3JhcHBlZC52YWx1ZS5tYXAoZiA9PiB0b1N0cmluZyhmLCBzZXR0aW5nLCB0cnVlKSkuam9pbigiLCAiKTsNCgkgICAgICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkNCgkgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiXSI7DQoJICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQoJICAgICAgICAgICAgY2FzZSAib2JqZWN0IjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuICgieyAiICsNCgkgICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHdyYXBwZWQudmFsdWUpDQoJICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChlID0+IGVbMF0gKyAiOiAiICsgdG9TdHJpbmcoZVsxXSwgc2V0dGluZywgdHJ1ZSkpDQoJICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oIiwgIikgKw0KCSAgICAgICAgICAgICAgICAgICAgIiB9Iik7DQoJICAgICAgICAgICAgY2FzZSAiZGF0ZSI6DQoJICAgICAgICAgICAgICAgIGlmICh3cmFwcGVkLnZhbHVlLnNlY29uZCA9PSAwICYmIHdyYXBwZWQudmFsdWUuaG91ciA9PSAwICYmIHdyYXBwZWQudmFsdWUubWludXRlID09IDApIHsNCgkgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvRm9ybWF0KHNldHRpbmcuZGVmYXVsdERhdGVGb3JtYXQpOw0KCSAgICAgICAgICAgICAgICB9DQoJICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvRm9ybWF0KHNldHRpbmcuZGVmYXVsdERhdGVUaW1lRm9ybWF0KTsNCgkgICAgICAgICAgICBjYXNlICJkdXJhdGlvbiI6DQoJICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXJNaW5pbWFsRHVyYXRpb24od3JhcHBlZC52YWx1ZSk7DQoJICAgICAgICB9DQoJICAgIH0NCgkgICAgVmFsdWVzLnRvU3RyaW5nID0gdG9TdHJpbmc7DQoJICAgIC8qKiBXcmFwIGEgbGl0ZXJhbCB2YWx1ZSBzbyB5b3UgY2FuIHN3aXRjaCBvbiBpdCBlYXNpbHkuICovDQoJICAgIGZ1bmN0aW9uIHdyYXBWYWx1ZSh2YWwpIHsNCgkgICAgICAgIGlmIChpc051bGwodmFsKSkNCgkgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAibnVsbCIsIHZhbHVlOiB2YWwgfTsNCgkgICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbCkpDQoJICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogIm51bWJlciIsIHZhbHVlOiB2YWwgfTsNCgkgICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKHZhbCkpDQoJICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogInN0cmluZyIsIHZhbHVlOiB2YWwgfTsNCgkgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhbih2YWwpKQ0KCSAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJib29sZWFuIiwgdmFsdWU6IHZhbCB9Ow0KCSAgICAgICAgZWxzZSBpZiAoaXNEdXJhdGlvbih2YWwpKQ0KCSAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJkdXJhdGlvbiIsIHZhbHVlOiB2YWwgfTsNCgkgICAgICAgIGVsc2UgaWYgKGlzRGF0ZSh2YWwpKQ0KCSAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJkYXRlIiwgdmFsdWU6IHZhbCB9Ow0KCSAgICAgICAgZWxzZSBpZiAoaXNIdG1sKHZhbCkpDQoJICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImh0bWwiLCB2YWx1ZTogdmFsIH07DQoJICAgICAgICBlbHNlIGlmIChpc0FycmF5KHZhbCkpDQoJICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImFycmF5IiwgdmFsdWU6IHZhbCB9Ow0KCSAgICAgICAgZWxzZSBpZiAoaXNMaW5rKHZhbCkpDQoJICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImxpbmsiLCB2YWx1ZTogdmFsIH07DQoJICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbCkpDQoJICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImZ1bmN0aW9uIiwgdmFsdWU6IHZhbCB9Ow0KCSAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QodmFsKSkNCgkgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAib2JqZWN0IiwgdmFsdWU6IHZhbCB9Ow0KCSAgICAgICAgZWxzZQ0KCSAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7DQoJICAgIH0NCgkgICAgVmFsdWVzLndyYXBWYWx1ZSA9IHdyYXBWYWx1ZTsNCgkgICAgLyoqIFJlY3Vyc2l2ZWx5IG1hcCBjb21wbGV4IG9iamVjdHMgYXQgdGhlIGxlYXZlcy4gKi8NCgkgICAgZnVuY3Rpb24gbWFwTGVhdmVzKHZhbCwgZnVuYykgew0KCSAgICAgICAgaWYgKGlzT2JqZWN0KHZhbCkpIHsNCgkgICAgICAgICAgICBsZXQgcmVzdWx0ID0ge307DQoJICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbCkpDQoJICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gbWFwTGVhdmVzKHZhbHVlLCBmdW5jKTsNCgkgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSBpZiAoaXNBcnJheSh2YWwpKSB7DQoJICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFtdOw0KCSAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbCkNCgkgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobWFwTGVhdmVzKHZhbHVlLCBmdW5jKSk7DQoJICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCgkgICAgICAgIH0NCgkgICAgICAgIGVsc2Ugew0KCSAgICAgICAgICAgIHJldHVybiBmdW5jKHZhbCk7DQoJICAgICAgICB9DQoJICAgIH0NCgkgICAgVmFsdWVzLm1hcExlYXZlcyA9IG1hcExlYXZlczsNCgkgICAgLyoqIENvbXBhcmUgdHdvIGFyYml0cmFyeSBKYXZhU2NyaXB0IHZhbHVlcy4gUHJvZHVjZXMgYSB0b3RhbCBvcmRlcmluZyBvdmVyIEFOWSBwb3NzaWJsZSBkYXRhdmlldyB2YWx1ZS4gKi8NCgkgICAgZnVuY3Rpb24gY29tcGFyZVZhbHVlKHZhbDEsIHZhbDIsIGxpbmtOb3JtYWxpemVyKSB7DQoJICAgICAgICB2YXIgX2EsIF9iOw0KCSAgICAgICAgLy8gSGFuZGxlIHVuZGVmaW5lZC9udWxscyBmaXJzdC4NCgkgICAgICAgIGlmICh2YWwxID09PSB1bmRlZmluZWQpDQoJICAgICAgICAgICAgdmFsMSA9IG51bGw7DQoJICAgICAgICBpZiAodmFsMiA9PT0gdW5kZWZpbmVkKQ0KCSAgICAgICAgICAgIHZhbDIgPSBudWxsOw0KCSAgICAgICAgaWYgKHZhbDEgPT09IG51bGwgJiYgdmFsMiA9PT0gbnVsbCkNCgkgICAgICAgICAgICByZXR1cm4gMDsNCgkgICAgICAgIGVsc2UgaWYgKHZhbDEgPT09IG51bGwpDQoJICAgICAgICAgICAgcmV0dXJuIC0xOw0KCSAgICAgICAgZWxzZSBpZiAodmFsMiA9PT0gbnVsbCkNCgkgICAgICAgICAgICByZXR1cm4gMTsNCgkgICAgICAgIC8vIEEgbm9uLW51bGwgdmFsdWUgbm93IHdoaWNoIHdlIGNhbiB3cmFwICYgY29tcGFyZSBvbi4NCgkgICAgICAgIGxldCB3cmFwMSA9IHdyYXBWYWx1ZSh2YWwxKTsNCgkgICAgICAgIGxldCB3cmFwMiA9IHdyYXBWYWx1ZSh2YWwyKTsNCgkgICAgICAgIGlmICh3cmFwMSA9PT0gdW5kZWZpbmVkICYmIHdyYXAyID09PSB1bmRlZmluZWQpDQoJICAgICAgICAgICAgcmV0dXJuIDA7DQoJICAgICAgICBlbHNlIGlmICh3cmFwMSA9PT0gdW5kZWZpbmVkKQ0KCSAgICAgICAgICAgIHJldHVybiAtMTsNCgkgICAgICAgIGVsc2UgaWYgKHdyYXAyID09PSB1bmRlZmluZWQpDQoJICAgICAgICAgICAgcmV0dXJuIDE7DQoJICAgICAgICAvLyBTaG9ydC1jaXJjdWl0IG9uIGRpZmZlcmVudCB0eXBlcyBvciBvbiByZWZlcmVuY2UgZXF1YWxpdHkuDQoJICAgICAgICBpZiAod3JhcDEudHlwZSAhPSB3cmFwMi50eXBlKQ0KCSAgICAgICAgICAgIHJldHVybiB3cmFwMS50eXBlLmxvY2FsZUNvbXBhcmUod3JhcDIudHlwZSk7DQoJICAgICAgICBpZiAod3JhcDEudmFsdWUgPT09IHdyYXAyLnZhbHVlKQ0KCSAgICAgICAgICAgIHJldHVybiAwOw0KCSAgICAgICAgc3dpdGNoICh3cmFwMS50eXBlKSB7DQoJICAgICAgICAgICAgY2FzZSAic3RyaW5nIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXAxLnZhbHVlLmxvY2FsZUNvbXBhcmUod3JhcDIudmFsdWUpOw0KCSAgICAgICAgICAgIGNhc2UgIm51bWJlciI6DQoJICAgICAgICAgICAgICAgIGlmICh3cmFwMS52YWx1ZSA8IHdyYXAyLnZhbHVlKQ0KCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KCSAgICAgICAgICAgICAgICBlbHNlIGlmICh3cmFwMS52YWx1ZSA9PSB3cmFwMi52YWx1ZSkNCgkgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KCSAgICAgICAgICAgICAgICByZXR1cm4gMTsNCgkgICAgICAgICAgICBjYXNlICJudWxsIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQoJICAgICAgICAgICAgY2FzZSAiYm9vbGVhbiI6DQoJICAgICAgICAgICAgICAgIGlmICh3cmFwMS52YWx1ZSA9PSB3cmFwMi52YWx1ZSkNCgkgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KCSAgICAgICAgICAgICAgICBlbHNlDQoJICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUgPyAxIDogLTE7DQoJICAgICAgICAgICAgY2FzZSAibGluayI6DQoJICAgICAgICAgICAgICAgIGxldCBsaW5rMSA9IHdyYXAxLnZhbHVlOw0KCSAgICAgICAgICAgICAgICBsZXQgbGluazIgPSB3cmFwMi52YWx1ZTsNCgkgICAgICAgICAgICAgICAgbGV0IG5vcm1hbGl6ZSA9IGxpbmtOb3JtYWxpemVyICE9PSBudWxsICYmIGxpbmtOb3JtYWxpemVyICE9PSB2b2lkIDAgPyBsaW5rTm9ybWFsaXplciA6ICgoeCkgPT4geCk7DQoJICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGNvbXBhcmUgYnkgZmlsZSBuYW1lIG9yIGRpc3BsYXksIHNpbmNlIHRoYXQgd291bGQgYnJlYWsgbGluayBlcXVhbGl0eS4gQ29tcGFyZSBieSBwYXRoLg0KCSAgICAgICAgICAgICAgICBsZXQgcGF0aENvbXBhcmUgPSBub3JtYWxpemUobGluazEucGF0aCkubG9jYWxlQ29tcGFyZShub3JtYWxpemUobGluazIucGF0aCkpOw0KCSAgICAgICAgICAgICAgICBpZiAocGF0aENvbXBhcmUgIT0gMCkNCgkgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXRoQ29tcGFyZTsNCgkgICAgICAgICAgICAgICAgLy8gVGhlbiBjb21wYXJlIGJ5IHR5cGUuDQoJICAgICAgICAgICAgICAgIGxldCB0eXBlQ29tcGFyZSA9IGxpbmsxLnR5cGUubG9jYWxlQ29tcGFyZShsaW5rMi50eXBlKTsNCgkgICAgICAgICAgICAgICAgaWYgKHR5cGVDb21wYXJlICE9IDApDQoJICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZUNvbXBhcmU7DQoJICAgICAgICAgICAgICAgIC8vIFRoZW4gY29tcGFyZSBieSBzdWJwYXRoIGV4aXN0ZW5jZS4NCgkgICAgICAgICAgICAgICAgaWYgKGxpbmsxLnN1YnBhdGggJiYgIWxpbmsyLnN1YnBhdGgpDQoJICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsNCgkgICAgICAgICAgICAgICAgaWYgKCFsaW5rMS5zdWJwYXRoICYmIGxpbmsyLnN1YnBhdGgpDQoJICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQoJICAgICAgICAgICAgICAgIGlmICghbGluazEuc3VicGF0aCAmJiAhbGluazIuc3VicGF0aCkNCgkgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KCSAgICAgICAgICAgICAgICAvLyBTaW5jZSBib3RoIGhhdmUgYSBzdWJwYXRoLCBjb21wYXJlIGJ5IHN1YnBhdGguDQoJICAgICAgICAgICAgICAgIHJldHVybiAoKF9hID0gbGluazEuc3VicGF0aCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogIiIpLmxvY2FsZUNvbXBhcmUoKF9iID0gbGluazIuc3VicGF0aCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogIiIpOw0KCSAgICAgICAgICAgIGNhc2UgImRhdGUiOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUgPCB3cmFwMi52YWx1ZQ0KCSAgICAgICAgICAgICAgICAgICAgPyAtMQ0KCSAgICAgICAgICAgICAgICAgICAgOiB3cmFwMS52YWx1ZS5lcXVhbHMod3JhcDIudmFsdWUpDQoJICAgICAgICAgICAgICAgICAgICAgICAgPyAwDQoJICAgICAgICAgICAgICAgICAgICAgICAgOiAxOw0KCSAgICAgICAgICAgIGNhc2UgImR1cmF0aW9uIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXAxLnZhbHVlIDwgd3JhcDIudmFsdWUNCgkgICAgICAgICAgICAgICAgICAgID8gLTENCgkgICAgICAgICAgICAgICAgICAgIDogd3JhcDEudmFsdWUuZXF1YWxzKHdyYXAyLnZhbHVlKQ0KCSAgICAgICAgICAgICAgICAgICAgICAgID8gMA0KCSAgICAgICAgICAgICAgICAgICAgICAgIDogMTsNCgkgICAgICAgICAgICBjYXNlICJhcnJheSI6DQoJICAgICAgICAgICAgICAgIGxldCBmMSA9IHdyYXAxLnZhbHVlOw0KCSAgICAgICAgICAgICAgICBsZXQgZjIgPSB3cmFwMi52YWx1ZTsNCgkgICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IE1hdGgubWluKGYxLmxlbmd0aCwgZjIubGVuZ3RoKTsgaW5kZXgrKykgew0KCSAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXAgPSBjb21wYXJlVmFsdWUoZjFbaW5kZXhdLCBmMltpbmRleF0pOw0KCSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXAgIT0gMCkNCgkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcDsNCgkgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgICAgICByZXR1cm4gZjEubGVuZ3RoIC0gZjIubGVuZ3RoOw0KCSAgICAgICAgICAgIGNhc2UgIm9iamVjdCI6DQoJICAgICAgICAgICAgICAgIGxldCBvMSA9IHdyYXAxLnZhbHVlOw0KCSAgICAgICAgICAgICAgICBsZXQgbzIgPSB3cmFwMi52YWx1ZTsNCgkgICAgICAgICAgICAgICAgbGV0IGsxID0gQXJyYXkuZnJvbShPYmplY3Qua2V5cyhvMSkpOw0KCSAgICAgICAgICAgICAgICBsZXQgazIgPSBBcnJheS5mcm9tKE9iamVjdC5rZXlzKG8yKSk7DQoJICAgICAgICAgICAgICAgIGsxLnNvcnQoKTsNCgkgICAgICAgICAgICAgICAgazIuc29ydCgpOw0KCSAgICAgICAgICAgICAgICBsZXQga2V5Q29tcGFyZSA9IGNvbXBhcmVWYWx1ZShrMSwgazIpOw0KCSAgICAgICAgICAgICAgICBpZiAoa2V5Q29tcGFyZSAhPSAwKQ0KCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleUNvbXBhcmU7DQoJICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBvZiBrMSkgew0KCSAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXAgPSBjb21wYXJlVmFsdWUobzFba2V5XSwgbzJba2V5XSk7DQoJICAgICAgICAgICAgICAgICAgICBpZiAoY29tcCAhPSAwKQ0KCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wOw0KCSAgICAgICAgICAgICAgICB9DQoJICAgICAgICAgICAgICAgIHJldHVybiAwOw0KCSAgICAgICAgICAgIGNhc2UgImh0bWwiOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gMDsNCgkgICAgICAgICAgICBjYXNlICJmdW5jdGlvbiI6DQoJICAgICAgICAgICAgICAgIHJldHVybiAwOw0KCSAgICAgICAgfQ0KCSAgICB9DQoJICAgIFZhbHVlcy5jb21wYXJlVmFsdWUgPSBjb21wYXJlVmFsdWU7DQoJICAgIC8qKiBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIERhdGF2ZWl3IHR5cGUgZm9yIGFuIGFyYml0cmFyeSB2YWx1ZS4gKi8NCgkgICAgZnVuY3Rpb24gdHlwZU9mKHZhbCkgew0KCSAgICAgICAgdmFyIF9hOw0KCSAgICAgICAgcmV0dXJuIChfYSA9IHdyYXBWYWx1ZSh2YWwpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudHlwZTsNCgkgICAgfQ0KCSAgICBWYWx1ZXMudHlwZU9mID0gdHlwZU9mOw0KCSAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyAidHJ1dGh5IiAoaS5lLiwgaXMgbm9uLW51bGwgYW5kIGhhcyBkYXRhIGluIGl0KS4gKi8NCgkgICAgZnVuY3Rpb24gaXNUcnV0aHkoZmllbGQpIHsNCgkgICAgICAgIGxldCB3cmFwcGVkID0gd3JhcFZhbHVlKGZpZWxkKTsNCgkgICAgICAgIGlmICghd3JhcHBlZCkNCgkgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQoJICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkgew0KCSAgICAgICAgICAgIGNhc2UgIm51bWJlciI6DQoJICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlICE9IDA7DQoJICAgICAgICAgICAgY2FzZSAic3RyaW5nIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubGVuZ3RoID4gMDsNCgkgICAgICAgICAgICBjYXNlICJib29sZWFuIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7DQoJICAgICAgICAgICAgY2FzZSAibGluayI6DQoJICAgICAgICAgICAgICAgIHJldHVybiAhIXdyYXBwZWQudmFsdWUucGF0aDsNCgkgICAgICAgICAgICBjYXNlICJkYXRlIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUudG9NaWxsaXMoKSAhPSAwOw0KCSAgICAgICAgICAgIGNhc2UgImR1cmF0aW9uIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUuYXMoInNlY29uZHMiKSAhPSAwOw0KCSAgICAgICAgICAgIGNhc2UgIm9iamVjdCI6DQoJICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh3cmFwcGVkLnZhbHVlKS5sZW5ndGggPiAwOw0KCSAgICAgICAgICAgIGNhc2UgImFycmF5IjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubGVuZ3RoID4gMDsNCgkgICAgICAgICAgICBjYXNlICJudWxsIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KCSAgICAgICAgICAgIGNhc2UgImh0bWwiOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCgkgICAgICAgICAgICBjYXNlICJmdW5jdGlvbiI6DQoJICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KCSAgICAgICAgfQ0KCSAgICB9DQoJICAgIFZhbHVlcy5pc1RydXRoeSA9IGlzVHJ1dGh5Ow0KCSAgICAvKiogRGVlcCBjb3B5IGEgZmllbGQuICovDQoJICAgIGZ1bmN0aW9uIGRlZXBDb3B5KGZpZWxkKSB7DQoJICAgICAgICBpZiAoZmllbGQgPT09IG51bGwgfHwgZmllbGQgPT09IHVuZGVmaW5lZCkNCgkgICAgICAgICAgICByZXR1cm4gZmllbGQ7DQoJICAgICAgICBpZiAoVmFsdWVzLmlzQXJyYXkoZmllbGQpKSB7DQoJICAgICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdChmaWVsZC5tYXAodiA9PiBkZWVwQ29weSh2KSkpOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSBpZiAoVmFsdWVzLmlzT2JqZWN0KGZpZWxkKSkgew0KCSAgICAgICAgICAgIGxldCByZXN1bHQgPSB7fTsNCgkgICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGQpKQ0KCSAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGRlZXBDb3B5KHZhbHVlKTsNCgkgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSB7DQoJICAgICAgICAgICAgcmV0dXJuIGZpZWxkOw0KCSAgICAgICAgfQ0KCSAgICB9DQoJICAgIFZhbHVlcy5kZWVwQ29weSA9IGRlZXBDb3B5Ow0KCSAgICBmdW5jdGlvbiBpc1N0cmluZyh2YWwpIHsNCgkgICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09ICJzdHJpbmciOw0KCSAgICB9DQoJICAgIFZhbHVlcy5pc1N0cmluZyA9IGlzU3RyaW5nOw0KCSAgICBmdW5jdGlvbiBpc051bWJlcih2YWwpIHsNCgkgICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09ICJudW1iZXIiOw0KCSAgICB9DQoJICAgIFZhbHVlcy5pc051bWJlciA9IGlzTnVtYmVyOw0KCSAgICBmdW5jdGlvbiBpc0RhdGUodmFsKSB7DQoJICAgICAgICByZXR1cm4gdmFsIGluc3RhbmNlb2YgRGF0ZVRpbWVfMTsNCgkgICAgfQ0KCSAgICBWYWx1ZXMuaXNEYXRlID0gaXNEYXRlOw0KCSAgICBmdW5jdGlvbiBpc0R1cmF0aW9uKHZhbCkgew0KCSAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIER1cmF0aW9uXzE7DQoJICAgIH0NCgkgICAgVmFsdWVzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uOw0KCSAgICBmdW5jdGlvbiBpc051bGwodmFsKSB7DQoJICAgICAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkOw0KCSAgICB9DQoJICAgIFZhbHVlcy5pc051bGwgPSBpc051bGw7DQoJICAgIGZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7DQoJICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpOw0KCSAgICB9DQoJICAgIFZhbHVlcy5pc0FycmF5ID0gaXNBcnJheTsNCgkgICAgZnVuY3Rpb24gaXNCb29sZWFuKHZhbCkgew0KCSAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICJib29sZWFuIjsNCgkgICAgfQ0KCSAgICBWYWx1ZXMuaXNCb29sZWFuID0gaXNCb29sZWFuOw0KCSAgICBmdW5jdGlvbiBpc0xpbmsodmFsKSB7DQoJICAgICAgICByZXR1cm4gdmFsIGluc3RhbmNlb2YgTGluazsNCgkgICAgfQ0KCSAgICBWYWx1ZXMuaXNMaW5rID0gaXNMaW5rOw0KCSAgICBmdW5jdGlvbiBpc0h0bWwodmFsKSB7DQoJICAgICAgICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ICE9PSAidW5kZWZpbmVkIikgew0KCSAgICAgICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDsNCgkgICAgICAgIH0NCgkgICAgICAgIGVsc2Ugew0KCSAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCgkgICAgICAgIH0NCgkgICAgfQ0KCSAgICBWYWx1ZXMuaXNIdG1sID0gaXNIdG1sOw0KCSAgICBmdW5jdGlvbiBpc09iamVjdCh2YWwpIHsNCgkgICAgICAgIHJldHVybiAodHlwZW9mIHZhbCA9PSAib2JqZWN0IiAmJg0KCSAgICAgICAgICAgICFpc0h0bWwodmFsKSAmJg0KCSAgICAgICAgICAgICFpc0FycmF5KHZhbCkgJiYNCgkgICAgICAgICAgICAhaXNEdXJhdGlvbih2YWwpICYmDQoJICAgICAgICAgICAgIWlzRGF0ZSh2YWwpICYmDQoJICAgICAgICAgICAgIWlzTGluayh2YWwpICYmDQoJICAgICAgICAgICAgdmFsICE9PSB1bmRlZmluZWQgJiYNCgkgICAgICAgICAgICAhaXNOdWxsKHZhbCkpOw0KCSAgICB9DQoJICAgIFZhbHVlcy5pc09iamVjdCA9IGlzT2JqZWN0Ow0KCSAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbCkgew0KCSAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gImZ1bmN0aW9uIjsNCgkgICAgfQ0KCSAgICBWYWx1ZXMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247DQoJfSkoVmFsdWVzIHx8IChWYWx1ZXMgPSB7fSkpOw0KCS8vLy8vLy8vLy8vLy8vLw0KCS8vIEdyb3VwaW5ncyAvLw0KCS8vLy8vLy8vLy8vLy8vLw0KCXZhciBHcm91cGluZ3M7DQoJKGZ1bmN0aW9uIChHcm91cGluZ3MpIHsNCgkgICAgLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGdyb3VwIGVudHJ5IGlzIGEgc3RhbmRhbG9uZSB2YWx1ZSwgb3IgYSBncm91cGluZyBvZiBzdWItZW50cmllcy4gKi8NCgkgICAgZnVuY3Rpb24gaXNFbGVtZW50R3JvdXAoZW50cnkpIHsNCgkgICAgICAgIHJldHVybiBWYWx1ZXMuaXNPYmplY3QoZW50cnkpICYmIE9iamVjdC5rZXlzKGVudHJ5KS5sZW5ndGggPT0gMiAmJiAia2V5IiBpbiBlbnRyeSAmJiAicm93cyIgaW4gZW50cnk7DQoJICAgIH0NCgkgICAgR3JvdXBpbmdzLmlzRWxlbWVudEdyb3VwID0gaXNFbGVtZW50R3JvdXA7DQoJICAgIC8qKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBhcnJheSBpcyBhIGdyb3VwaW5nIGFycmF5LiAqLw0KCSAgICBmdW5jdGlvbiBpc0dyb3VwaW5nKGVudHJ5KSB7DQoJICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGVudHJ5KQ0KCSAgICAgICAgICAgIGlmICghaXNFbGVtZW50R3JvdXAoZWxlbWVudCkpDQoJICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCgkgICAgICAgIHJldHVybiB0cnVlOw0KCSAgICB9DQoJICAgIEdyb3VwaW5ncy5pc0dyb3VwaW5nID0gaXNHcm91cGluZzsNCgkgICAgLyoqIENvdW50IHRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSByZWN1cnNpdmUgZ3JvdXBpbmcuICovDQoJICAgIGZ1bmN0aW9uIGNvdW50KGVsZW1lbnRzKSB7DQoJICAgICAgICBpZiAoaXNHcm91cGluZyhlbGVtZW50cykpIHsNCgkgICAgICAgICAgICBsZXQgcmVzdWx0ID0gMDsNCgkgICAgICAgICAgICBmb3IgKGxldCBzdWJncm91cCBvZiBlbGVtZW50cykNCgkgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNvdW50KHN1Ymdyb3VwLnJvd3MpOw0KCSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlIHsNCgkgICAgICAgICAgICByZXR1cm4gZWxlbWVudHMubGVuZ3RoOw0KCSAgICAgICAgfQ0KCSAgICB9DQoJICAgIEdyb3VwaW5ncy5jb3VudCA9IGNvdW50Ow0KCX0pKEdyb3VwaW5ncyB8fCAoR3JvdXBpbmdzID0ge30pKTsNCgkvLy8vLy8vLy8vDQoJLy8gTElOSyAvLw0KCS8vLy8vLy8vLy8NCgkvKiogVGhlIE9ic2lkaWFuICdsaW5rJywgdXNlZCBmb3IgdW5pcXVlbHkgZGVzY3JpYmluZyBhIGZpbGUsIGhlYWRlciwgb3IgYmxvY2suICovDQoJY2xhc3MgTGluayB7DQoJICAgIGNvbnN0cnVjdG9yKGZpZWxkcykgew0KCSAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBmaWVsZHMpOw0KCSAgICB9DQoJICAgIC8qKiBDcmVhdGUgYSBsaW5rIHRvIGEgc3BlY2lmaWMgZmlsZS4gKi8NCgkgICAgc3RhdGljIGZpbGUocGF0aCwgZW1iZWQgPSBmYWxzZSwgZGlzcGxheSkgew0KCSAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHsNCgkgICAgICAgICAgICBwYXRoLA0KCSAgICAgICAgICAgIGVtYmVkLA0KCSAgICAgICAgICAgIGRpc3BsYXksDQoJICAgICAgICAgICAgc3VicGF0aDogdW5kZWZpbmVkLA0KCSAgICAgICAgICAgIHR5cGU6ICJmaWxlIiwNCgkgICAgICAgIH0pOw0KCSAgICB9DQoJICAgIHN0YXRpYyBpbmZlcihsaW5rcGF0aCwgZW1iZWQgPSBmYWxzZSwgZGlzcGxheSkgew0KCSAgICAgICAgaWYgKGxpbmtwYXRoLmluY2x1ZGVzKCIjXiIpKSB7DQoJICAgICAgICAgICAgbGV0IHNwbGl0ID0gbGlua3BhdGguc3BsaXQoIiNeIik7DQoJICAgICAgICAgICAgcmV0dXJuIExpbmsuYmxvY2soc3BsaXRbMF0sIHNwbGl0WzFdLCBlbWJlZCwgZGlzcGxheSk7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlIGlmIChsaW5rcGF0aC5pbmNsdWRlcygiIyIpKSB7DQoJICAgICAgICAgICAgbGV0IHNwbGl0ID0gbGlua3BhdGguc3BsaXQoIiMiKTsNCgkgICAgICAgICAgICByZXR1cm4gTGluay5oZWFkZXIoc3BsaXRbMF0sIHNwbGl0WzFdLCBlbWJlZCwgZGlzcGxheSk7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlDQoJICAgICAgICAgICAgcmV0dXJuIExpbmsuZmlsZShsaW5rcGF0aCwgZW1iZWQsIGRpc3BsYXkpOw0KCSAgICB9DQoJICAgIC8qKiBDcmVhdGUgYSBsaW5rIHRvIGEgc3BlY2lmaWMgZmlsZSBhbmQgaGVhZGVyIGluIHRoYXQgZmlsZS4gKi8NCgkgICAgc3RhdGljIGhlYWRlcihwYXRoLCBoZWFkZXIsIGVtYmVkLCBkaXNwbGF5KSB7DQoJICAgICAgICAvLyBIZWFkZXJzIG5lZWQgdG8gYmUgbm9ybWFsaXplZCB0byBhbHBoYS1udW1lcmljICYgd2l0aCBleHRyYSBzcGFjaW5nIHJlbW92ZWQuDQoJICAgICAgICByZXR1cm4gbmV3IExpbmsoew0KCSAgICAgICAgICAgIHBhdGgsDQoJICAgICAgICAgICAgZW1iZWQsDQoJICAgICAgICAgICAgZGlzcGxheSwNCgkgICAgICAgICAgICBzdWJwYXRoOiBub3JtYWxpemVIZWFkZXJGb3JMaW5rKGhlYWRlciksDQoJICAgICAgICAgICAgdHlwZTogImhlYWRlciIsDQoJICAgICAgICB9KTsNCgkgICAgfQ0KCSAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGJsb2NrIGluIHRoYXQgZmlsZS4gKi8NCgkgICAgc3RhdGljIGJsb2NrKHBhdGgsIGJsb2NrSWQsIGVtYmVkLCBkaXNwbGF5KSB7DQoJICAgICAgICByZXR1cm4gbmV3IExpbmsoew0KCSAgICAgICAgICAgIHBhdGgsDQoJICAgICAgICAgICAgZW1iZWQsDQoJICAgICAgICAgICAgZGlzcGxheSwNCgkgICAgICAgICAgICBzdWJwYXRoOiBibG9ja0lkLA0KCSAgICAgICAgICAgIHR5cGU6ICJibG9jayIsDQoJICAgICAgICB9KTsNCgkgICAgfQ0KCSAgICBzdGF0aWMgZnJvbU9iamVjdChvYmplY3QpIHsNCgkgICAgICAgIHJldHVybiBuZXcgTGluayhvYmplY3QpOw0KCSAgICB9DQoJICAgIC8qKiBDaGVja3MgZm9yIGxpbmsgZXF1YWxpdHkgKGkuZS4sIHRoYXQgdGhlIGxpbmtzIGFyZSBwb2ludGluZyB0byB0aGUgc2FtZSBleGFjdCBsb2NhdGlvbikuICovDQoJICAgIGVxdWFscyhvdGhlcikgew0KCSAgICAgICAgaWYgKG90aGVyID09IHVuZGVmaW5lZCB8fCBvdGhlciA9PSBudWxsKQ0KCSAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCgkgICAgICAgIHJldHVybiB0aGlzLnBhdGggPT0gb3RoZXIucGF0aCAmJiB0aGlzLnR5cGUgPT0gb3RoZXIudHlwZSAmJiB0aGlzLnN1YnBhdGggPT0gb3RoZXIuc3VicGF0aDsNCgkgICAgfQ0KCSAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gaXQncyBtYXJrZG93biByZXByZXNlbnRhdGlvbi4gKi8NCgkgICAgdG9TdHJpbmcoKSB7DQoJICAgICAgICByZXR1cm4gdGhpcy5tYXJrZG93bigpOw0KCSAgICB9DQoJICAgIC8qKiBDb252ZXJ0IHRoaXMgbGluayB0byBhIHJhdyBvYmplY3Qgd2hpY2ggaXMgc2VyaWFsaXphdGlvbi1mcmllbmRseS4gKi8NCgkgICAgdG9PYmplY3QoKSB7DQoJICAgICAgICByZXR1cm4geyBwYXRoOiB0aGlzLnBhdGgsIHR5cGU6IHRoaXMudHlwZSwgc3VicGF0aDogdGhpcy5zdWJwYXRoLCBkaXNwbGF5OiB0aGlzLmRpc3BsYXksIGVtYmVkOiB0aGlzLmVtYmVkIH07DQoJICAgIH0NCgkgICAgLyoqIFVwZGF0ZSB0aGlzIGxpbmsgd2l0aCBhIG5ldyBwYXRoLiAqLw0KCSAgICB3aXRoUGF0aChwYXRoKSB7DQoJICAgICAgICByZXR1cm4gbmV3IExpbmsoT2JqZWN0LmFzc2lnbih7fSwgdGhpcywgeyBwYXRoIH0pKTsNCgkgICAgfQ0KCSAgICAvKiogUmV0dXJuIGEgbmV3IGxpbmsgd2hpY2ggcG9pbnRzIHRvIHRoZSBzYW1lIGxvY2F0aW9uIGJ1dCB3aXRoIGEgbmV3IGRpc3BsYXkgdmFsdWUuICovDQoJICAgIHdpdGhEaXNwbGF5KGRpc3BsYXkpIHsNCgkgICAgICAgIHJldHVybiBuZXcgTGluayhPYmplY3QuYXNzaWduKHt9LCB0aGlzLCB7IGRpc3BsYXkgfSkpOw0KCSAgICB9DQoJICAgIC8qKiBDb252ZXJ0IGEgZmlsZSBsaW5rIGludG8gYSBsaW5rIHRvIGEgc3BlY2lmaWMgaGVhZGVyLiAqLw0KCSAgICB3aXRoSGVhZGVyKGhlYWRlcikgew0KCSAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHRoaXMucGF0aCwgaGVhZGVyLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpOw0KCSAgICB9DQoJICAgIC8qKiBDb252ZXJ0IGFueSBsaW5rIGludG8gYSBsaW5rIHRvIGl0cyBmaWxlLiAqLw0KCSAgICB0b0ZpbGUoKSB7DQoJICAgICAgICByZXR1cm4gTGluay5maWxlKHRoaXMucGF0aCwgdGhpcy5lbWJlZCwgdGhpcy5kaXNwbGF5KTsNCgkgICAgfQ0KCSAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgaW50byBhbiBlbWJlZGRlZCBsaW5rLiAqLw0KCSAgICB0b0VtYmVkKCkgew0KCSAgICAgICAgaWYgKHRoaXMuZW1iZWQpIHsNCgkgICAgICAgICAgICByZXR1cm4gdGhpczsNCgkgICAgICAgIH0NCgkgICAgICAgIGVsc2Ugew0KCSAgICAgICAgICAgIGxldCBsaW5rID0gbmV3IExpbmsodGhpcyk7DQoJICAgICAgICAgICAgbGluay5lbWJlZCA9IHRydWU7DQoJICAgICAgICAgICAgcmV0dXJuIGxpbms7DQoJICAgICAgICB9DQoJICAgIH0NCgkgICAgLyoqIENvbnZlcnQgdGhpcyBsaW5rIGludG8gYSBub24tZW1iZWRkZWQgbGluay4gKi8NCgkgICAgZnJvbUVtYmVkKCkgew0KCSAgICAgICAgaWYgKCF0aGlzLmVtYmVkKSB7DQoJICAgICAgICAgICAgcmV0dXJuIHRoaXM7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlIHsNCgkgICAgICAgICAgICBsZXQgbGluayA9IG5ldyBMaW5rKHRoaXMpOw0KCSAgICAgICAgICAgIGxpbmsuZW1iZWQgPSBmYWxzZTsNCgkgICAgICAgICAgICByZXR1cm4gbGluazsNCgkgICAgICAgIH0NCgkgICAgfQ0KCSAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gbWFya2Rvd24gc28gaXQgY2FuIGJlIHJlbmRlcmVkLiAqLw0KCSAgICBtYXJrZG93bigpIHsNCgkgICAgICAgIGxldCByZXN1bHQgPSAodGhpcy5lbWJlZCA/ICIhIiA6ICIiKSArICJbWyIgKyB0aGlzLm9ic2lkaWFuTGluaygpOw0KCSAgICAgICAgaWYgKHRoaXMuZGlzcGxheSkgew0KCSAgICAgICAgICAgIHJlc3VsdCArPSAifCIgKyB0aGlzLmRpc3BsYXk7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlIHsNCgkgICAgICAgICAgICByZXN1bHQgKz0gInwiICsgZ2V0RmlsZVRpdGxlKHRoaXMucGF0aCk7DQoJICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAiaGVhZGVyIiB8fCB0aGlzLnR5cGUgPT0gImJsb2NrIikNCgkgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIgPiAiICsgdGhpcy5zdWJwYXRoOw0KCSAgICAgICAgfQ0KCSAgICAgICAgcmVzdWx0ICs9ICJdXSI7DQoJICAgICAgICByZXR1cm4gcmVzdWx0Ow0KCSAgICB9DQoJICAgIC8qKiBDb252ZXJ0IHRoZSBpbm5lciBwYXJ0IG9mIHRoZSBsaW5rIHRvIHNvbWV0aGluZyB0aGF0IE9ic2lkaWFuIGNhbiBvcGVuIC8gdW5kZXJzdGFuZC4gKi8NCgkgICAgb2JzaWRpYW5MaW5rKCkgew0KCSAgICAgICAgdmFyIF9hLCBfYjsNCgkgICAgICAgIGNvbnN0IGVzY2FwZWQgPSB0aGlzLnBhdGgucmVwbGFjZSgifCIsICJcXHwiKTsNCgkgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gImhlYWRlciIpDQoJICAgICAgICAgICAgcmV0dXJuIGVzY2FwZWQgKyAiIyIgKyAoKF9hID0gdGhpcy5zdWJwYXRoKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVwbGFjZSgifCIsICJcXHwiKSk7DQoJICAgICAgICBpZiAodGhpcy50eXBlID09ICJibG9jayIpDQoJICAgICAgICAgICAgcmV0dXJuIGVzY2FwZWQgKyAiI14iICsgKChfYiA9IHRoaXMuc3VicGF0aCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnJlcGxhY2UoInwiLCAiXFx8IikpOw0KCSAgICAgICAgZWxzZQ0KCSAgICAgICAgICAgIHJldHVybiBlc2NhcGVkOw0KCSAgICB9DQoJICAgIC8qKiBUaGUgc3RyaXBwZWQgbmFtZSBvZiB0aGUgZmlsZSB0aGlzIGxpbmsgcG9pbnRzIHRvLiAqLw0KCSAgICBmaWxlTmFtZSgpIHsNCgkgICAgICAgIHJldHVybiBnZXRGaWxlVGl0bGUodGhpcy5wYXRoKS5yZXBsYWNlKCIubWQiLCAiIik7DQoJICAgIH0NCgl9CgoJLyoqIFV0aWxpdHkgbWV0aG9kcyBmb3IgY3JlYXRpbmcgJiBjb21wYXJpbmcgZmllbGRzLiAqLw0KCXZhciBGaWVsZHM7DQoJKGZ1bmN0aW9uIChGaWVsZHMpIHsNCgkgICAgZnVuY3Rpb24gdmFyaWFibGUobmFtZSkgew0KCSAgICAgICAgcmV0dXJuIHsgdHlwZTogInZhcmlhYmxlIiwgbmFtZSB9Ow0KCSAgICB9DQoJICAgIEZpZWxkcy52YXJpYWJsZSA9IHZhcmlhYmxlOw0KCSAgICBmdW5jdGlvbiBsaXRlcmFsKHZhbHVlKSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAibGl0ZXJhbCIsIHZhbHVlIH07DQoJICAgIH0NCgkgICAgRmllbGRzLmxpdGVyYWwgPSBsaXRlcmFsOw0KCSAgICBmdW5jdGlvbiBiaW5hcnlPcChsZWZ0LCBvcCwgcmlnaHQpIHsNCgkgICAgICAgIHJldHVybiB7IHR5cGU6ICJiaW5hcnlvcCIsIGxlZnQsIG9wLCByaWdodCB9Ow0KCSAgICB9DQoJICAgIEZpZWxkcy5iaW5hcnlPcCA9IGJpbmFyeU9wOw0KCSAgICBmdW5jdGlvbiBpbmRleChvYmosIGluZGV4KSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAiaW5kZXgiLCBvYmplY3Q6IG9iaiwgaW5kZXggfTsNCgkgICAgfQ0KCSAgICBGaWVsZHMuaW5kZXggPSBpbmRleDsNCgkgICAgLyoqIENvbnZlcnRzIGEgc3RyaW5nIGluIGRvdC1ub3RhdGlvbi1mb3JtYXQgaW50byBhIHZhcmlhYmxlIHdoaWNoIGluZGV4ZXMuICovDQoJICAgIGZ1bmN0aW9uIGluZGV4VmFyaWFibGUobmFtZSkgew0KCSAgICAgICAgbGV0IHBhcnRzID0gbmFtZS5zcGxpdCgiLiIpOw0KCSAgICAgICAgbGV0IHJlc3VsdCA9IEZpZWxkcy52YXJpYWJsZShwYXJ0c1swXSk7DQoJICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcGFydHMubGVuZ3RoOyBpbmRleCsrKSB7DQoJICAgICAgICAgICAgcmVzdWx0ID0gRmllbGRzLmluZGV4KHJlc3VsdCwgRmllbGRzLmxpdGVyYWwocGFydHNbaW5kZXhdKSk7DQoJICAgICAgICB9DQoJICAgICAgICByZXR1cm4gcmVzdWx0Ow0KCSAgICB9DQoJICAgIEZpZWxkcy5pbmRleFZhcmlhYmxlID0gaW5kZXhWYXJpYWJsZTsNCgkgICAgZnVuY3Rpb24gbGFtYmRhKGFyZ3MsIHZhbHVlKSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAibGFtYmRhIiwgYXJndW1lbnRzOiBhcmdzLCB2YWx1ZSB9Ow0KCSAgICB9DQoJICAgIEZpZWxkcy5sYW1iZGEgPSBsYW1iZGE7DQoJICAgIGZ1bmN0aW9uIGZ1bmMoZnVuYywgYXJncykgew0KCSAgICAgICAgcmV0dXJuIHsgdHlwZTogImZ1bmN0aW9uIiwgZnVuYywgYXJndW1lbnRzOiBhcmdzIH07DQoJICAgIH0NCgkgICAgRmllbGRzLmZ1bmMgPSBmdW5jOw0KCSAgICBmdW5jdGlvbiBsaXN0KHZhbHVlcykgew0KCSAgICAgICAgcmV0dXJuIHsgdHlwZTogImxpc3QiLCB2YWx1ZXMgfTsNCgkgICAgfQ0KCSAgICBGaWVsZHMubGlzdCA9IGxpc3Q7DQoJICAgIGZ1bmN0aW9uIG9iamVjdCh2YWx1ZXMpIHsNCgkgICAgICAgIHJldHVybiB7IHR5cGU6ICJvYmplY3QiLCB2YWx1ZXMgfTsNCgkgICAgfQ0KCSAgICBGaWVsZHMub2JqZWN0ID0gb2JqZWN0Ow0KCSAgICBmdW5jdGlvbiBuZWdhdGUoY2hpbGQpIHsNCgkgICAgICAgIHJldHVybiB7IHR5cGU6ICJuZWdhdGVkIiwgY2hpbGQgfTsNCgkgICAgfQ0KCSAgICBGaWVsZHMubmVnYXRlID0gbmVnYXRlOw0KCSAgICBmdW5jdGlvbiBpc0NvbXBhcmVPcChvcCkgew0KCSAgICAgICAgcmV0dXJuIG9wID09ICI8PSIgfHwgb3AgPT0gIjwiIHx8IG9wID09ICI+IiB8fCBvcCA9PSAiPj0iIHx8IG9wID09ICIhPSIgfHwgb3AgPT0gIj0iOw0KCSAgICB9DQoJICAgIEZpZWxkcy5pc0NvbXBhcmVPcCA9IGlzQ29tcGFyZU9wOw0KCSAgICBGaWVsZHMuTlVMTCA9IEZpZWxkcy5saXRlcmFsKG51bGwpOw0KCX0pKEZpZWxkcyB8fCAoRmllbGRzID0ge30pKTsKCgkvKiogQVNUIGltcGxlbWVudGF0aW9uIGZvciBxdWVyaWVzIG92ZXIgZGF0YSBzb3VyY2VzLiAqLw0KCS8qKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBzb3VyY2VzLiAqLw0KCXZhciBTb3VyY2VzOw0KCShmdW5jdGlvbiAoU291cmNlcykgew0KCSAgICBmdW5jdGlvbiB0YWcodGFnKSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAidGFnIiwgdGFnIH07DQoJICAgIH0NCgkgICAgU291cmNlcy50YWcgPSB0YWc7DQoJICAgIGZ1bmN0aW9uIGNzdihwYXRoKSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAiY3N2IiwgcGF0aCB9Ow0KCSAgICB9DQoJICAgIFNvdXJjZXMuY3N2ID0gY3N2Ow0KCSAgICBmdW5jdGlvbiBmb2xkZXIocHJlZml4KSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAiZm9sZGVyIiwgZm9sZGVyOiBwcmVmaXggfTsNCgkgICAgfQ0KCSAgICBTb3VyY2VzLmZvbGRlciA9IGZvbGRlcjsNCgkgICAgZnVuY3Rpb24gbGluayhmaWxlLCBpbmNvbWluZykgew0KCSAgICAgICAgcmV0dXJuIHsgdHlwZTogImxpbmsiLCBmaWxlLCBkaXJlY3Rpb246IGluY29taW5nID8gImluY29taW5nIiA6ICJvdXRnb2luZyIgfTsNCgkgICAgfQ0KCSAgICBTb3VyY2VzLmxpbmsgPSBsaW5rOw0KCSAgICBmdW5jdGlvbiBiaW5hcnlPcChsZWZ0LCBvcCwgcmlnaHQpIHsNCgkgICAgICAgIHJldHVybiB7IHR5cGU6ICJiaW5hcnlvcCIsIGxlZnQsIG9wLCByaWdodCB9Ow0KCSAgICB9DQoJICAgIFNvdXJjZXMuYmluYXJ5T3AgPSBiaW5hcnlPcDsNCgkgICAgZnVuY3Rpb24gbmVnYXRlKGNoaWxkKSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAibmVnYXRlIiwgY2hpbGQgfTsNCgkgICAgfQ0KCSAgICBTb3VyY2VzLm5lZ2F0ZSA9IG5lZ2F0ZTsNCgkgICAgZnVuY3Rpb24gZW1wdHkoKSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAiZW1wdHkiIH07DQoJICAgIH0NCgkgICAgU291cmNlcy5lbXB0eSA9IGVtcHR5Ow0KCX0pKFNvdXJjZXMgfHwgKFNvdXJjZXMgPSB7fSkpOwoKCS8qKiBFbW9qaSByZWdleCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGZsYWdzLiAqLw0KCWNvbnN0IEVNT0pJX1JFR0VYID0gbmV3IFJlZ0V4cChlbW9qaVJlZ2V4KCksICIiKTsNCgkvKiogUHJvdmlkZXMgYSBsb29rdXAgdGFibGUgZm9yIHVuaXQgZHVyYXRpb25zIG9mIHRoZSBnaXZlbiB0eXBlLiAqLw0KCWNvbnN0IERVUkFUSU9OX1RZUEVTID0gew0KCSAgICB5ZWFyOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyB5ZWFyczogMSB9KSwNCgkgICAgeWVhcnM6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHllYXJzOiAxIH0pLA0KCSAgICB5cjogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksDQoJICAgIHlyczogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksDQoJICAgIG1vbnRoOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksDQoJICAgIG1vbnRoczogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgbW9udGhzOiAxIH0pLA0KCSAgICBtbzogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgbW9udGhzOiAxIH0pLA0KCSAgICBtb3M6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IG1vbnRoczogMSB9KSwNCgkgICAgd2VlazogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgd2Vla3M6IDEgfSksDQoJICAgIHdlZWtzOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSwNCgkgICAgd2s6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLA0KCSAgICB3a3M6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLA0KCSAgICB3OiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSwNCgkgICAgZGF5OiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLA0KCSAgICBkYXlzOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLA0KCSAgICBkOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLA0KCSAgICBob3VyOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBob3VyczogMSB9KSwNCgkgICAgaG91cnM6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IGhvdXJzOiAxIH0pLA0KCSAgICBocjogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksDQoJICAgIGhyczogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksDQoJICAgIGg6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IGhvdXJzOiAxIH0pLA0KCSAgICBtaW51dGU6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksDQoJICAgIG1pbnV0ZXM6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksDQoJICAgIG1pbjogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSwNCgkgICAgbWluczogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSwNCgkgICAgbTogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSwNCgkgICAgc2Vjb25kOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLA0KCSAgICBzZWNvbmRzOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLA0KCSAgICBzZWM6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksDQoJICAgIHNlY3M6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksDQoJICAgIHM6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksDQoJfTsNCgkvKiogU2hvcnRoYW5kIGZvciBjb21tb24gZGF0ZXMgKHJlbGF0aXZlIHRvIHJpZ2h0IG5vdykuICovDQoJY29uc3QgREFURV9TSE9SVEhBTkRTID0gew0KCSAgICBub3c6ICgpID0+IERhdGVUaW1lXzEubG9jYWwoKSwNCgkgICAgdG9kYXk6ICgpID0+IERhdGVUaW1lXzEubG9jYWwoKS5zdGFydE9mKCJkYXkiKSwNCgkgICAgeWVzdGVyZGF5OiAoKSA9PiBEYXRlVGltZV8xLmxvY2FsKCkNCgkgICAgICAgIC5zdGFydE9mKCJkYXkiKQ0KCSAgICAgICAgLm1pbnVzKER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IGRheXM6IDEgfSkpLA0KCSAgICB0b21vcnJvdzogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpDQoJICAgICAgICAuc3RhcnRPZigiZGF5IikNCgkgICAgICAgIC5wbHVzKER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IGRheXM6IDEgfSkpLA0KCSAgICBzb3c6ICgpID0+IERhdGVUaW1lXzEubG9jYWwoKS5zdGFydE9mKCJ3ZWVrIiksDQoJICAgICJzdGFydC1vZi13ZWVrIjogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpLnN0YXJ0T2YoIndlZWsiKSwNCgkgICAgZW93OiAoKSA9PiBEYXRlVGltZV8xLmxvY2FsKCkuZW5kT2YoIndlZWsiKSwNCgkgICAgImVuZC1vZi13ZWVrIjogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpLmVuZE9mKCJ3ZWVrIiksDQoJICAgIHNveTogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpLnN0YXJ0T2YoInllYXIiKSwNCgkgICAgInN0YXJ0LW9mLXllYXIiOiAoKSA9PiBEYXRlVGltZV8xLmxvY2FsKCkuc3RhcnRPZigieWVhciIpLA0KCSAgICBlb3k6ICgpID0+IERhdGVUaW1lXzEubG9jYWwoKS5lbmRPZigieWVhciIpLA0KCSAgICAiZW5kLW9mLXllYXIiOiAoKSA9PiBEYXRlVGltZV8xLmxvY2FsKCkuZW5kT2YoInllYXIiKSwNCgkgICAgc29tOiAoKSA9PiBEYXRlVGltZV8xLmxvY2FsKCkuc3RhcnRPZigibW9udGgiKSwNCgkgICAgInN0YXJ0LW9mLW1vbnRoIjogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpLnN0YXJ0T2YoIm1vbnRoIiksDQoJICAgIGVvbTogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpLmVuZE9mKCJtb250aCIpLA0KCSAgICAiZW5kLW9mLW1vbnRoIjogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpLmVuZE9mKCJtb250aCIpLA0KCX07DQoJLyoqDQoJICogS2V5d29yZHMgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGVzIGRpcmVjdGx5LiBVc2UgYHJvdy48dGhpbmc+YCBpZiBpdCBpcyBhIHZhcmlhYmxlIHlvdSBoYXZlIGRlZmluZWQgYW5kIHdhbnQNCgkgKiB0byBhY2Nlc3MuDQoJICovDQoJY29uc3QgS0VZV09SRFMgPSBbIkZST00iLCAiV0hFUkUiLCAiTElNSVQiLCAiR1JPVVAiLCAiRkxBVFRFTiJdOw0KCS8vLy8vLy8vLy8vLy8vLw0KCS8vIFV0aWxpdGllcyAvLw0KCS8vLy8vLy8vLy8vLy8vLw0KCS8qKiBTcGxpdCBvbiB1bmVzY2FwZWQgcGlwZXMgaW4gYW4gaW5uZXIgbGluay4gKi8NCglmdW5jdGlvbiBzcGxpdE9uVW5lc2NhcGVkUGlwZShsaW5rKSB7DQoJICAgIGxldCBwaXBlID0gLTE7DQoJICAgIHdoaWxlICgocGlwZSA9IGxpbmsuaW5kZXhPZigifCIsIHBpcGUgKyAxKSkgPj0gMCkgew0KCSAgICAgICAgaWYgKHBpcGUgPiAwICYmIGxpbmtbcGlwZSAtIDFdID09ICJcXCIpDQoJICAgICAgICAgICAgY29udGludWU7DQoJICAgICAgICByZXR1cm4gW2xpbmsuc3Vic3RyaW5nKDAsIHBpcGUpLnJlcGxhY2UoL1xcXHwvZywgInwiKSwgbGluay5zdWJzdHJpbmcocGlwZSArIDEpXTsNCgkgICAgfQ0KCSAgICByZXR1cm4gW2xpbmsucmVwbGFjZSgvXFxcfC9nLCAifCIpLCB1bmRlZmluZWRdOw0KCX0NCgkvKiogQXR0ZW1wdCB0byBwYXJzZSB0aGUgaW5zaWRlIG9mIGEgbGluayB0byBwdWxsIG91dCBkaXNwbGF5IG5hbWUsIHN1YnBhdGgsIGV0Yy4gKi8NCglmdW5jdGlvbiBwYXJzZUlubmVyTGluayhyYXdsaW5rKSB7DQoJICAgIGxldCBbbGluaywgZGlzcGxheV0gPSBzcGxpdE9uVW5lc2NhcGVkUGlwZShyYXdsaW5rKTsNCgkgICAgcmV0dXJuIExpbmsuaW5mZXIobGluaywgZmFsc2UsIGRpc3BsYXkpOw0KCX0NCgkvKiogQ3JlYXRlIGEgbGVmdC1hc3NvY2lhdGl2ZSBiaW5hcnkgcGFyc2VyIHdoaWNoIHBhcnNlcyB0aGUgZ2l2ZW4gc3ViLWVsZW1lbnQgYW5kIHNlcGFyYXRvci4gSGFuZGxlcyB3aGl0ZXNwYWNlLiAqLw0KCWZ1bmN0aW9uIGNyZWF0ZUJpbmFyeVBhcnNlcihjaGlsZCwgc2VwLCBjb21iaW5lKSB7DQoJICAgIHJldHVybiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChjaGlsZCwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXEocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlLCBzZXAsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgY2hpbGQpLm1hbnkoKSwgKGZpcnN0LCByZXN0KSA9PiB7DQoJICAgICAgICBpZiAocmVzdC5sZW5ndGggPT0gMCkNCgkgICAgICAgICAgICByZXR1cm4gZmlyc3Q7DQoJICAgICAgICBsZXQgbm9kZSA9IGNvbWJpbmUoZmlyc3QsIHJlc3RbMF1bMV0sIHJlc3RbMF1bM10pOw0KCSAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHJlc3QubGVuZ3RoOyBpbmRleCsrKSB7DQoJICAgICAgICAgICAgbm9kZSA9IGNvbWJpbmUobm9kZSwgcmVzdFtpbmRleF1bMV0sIHJlc3RbaW5kZXhdWzNdKTsNCgkgICAgICAgIH0NCgkgICAgICAgIHJldHVybiBub2RlOw0KCSAgICB9KTsNCgl9DQoJZnVuY3Rpb24gY2hhaW5PcHQoYmFzZSwgLi4uZnVuY3MpIHsNCgkgICAgcmV0dXJuIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuY3VzdG9tKChzdWNjZXNzLCBmYWlsdXJlKSA9PiB7DQoJICAgICAgICByZXR1cm4gKGlucHV0LCBpKSA9PiB7DQoJICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGJhc2UuXyhpbnB1dCwgaSk7DQoJICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3RhdHVzKQ0KCSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KCSAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpIHsNCgkgICAgICAgICAgICAgICAgbGV0IG5leHQgPSBmdW5jKHJlc3VsdC52YWx1ZSkuXyhpbnB1dCwgcmVzdWx0LmluZGV4KTsNCgkgICAgICAgICAgICAgICAgaWYgKCFuZXh0LnN0YXR1cykNCgkgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQoJICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5leHQ7DQoJICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQoJICAgICAgICB9Ow0KCSAgICB9KTsNCgl9DQoJY29uc3QgRVhQUkVTU0lPTiA9IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuY3JlYXRlTGFuZ3VhZ2Uoew0KCSAgICAvLyBBIGZsb2F0aW5nIHBvaW50IG51bWJlcjsgdGhlIGRlY2ltYWwgcG9pbnQgaXMgb3B0aW9uYWwuDQoJICAgIG51bWJlcjogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvLT9bMC05XSsoXC5bMC05XSspPy8pDQoJICAgICAgICAubWFwKHN0ciA9PiBOdW1iZXIucGFyc2VGbG9hdChzdHIpKQ0KCSAgICAgICAgLmRlc2MoIm51bWJlciIpLA0KCSAgICAvLyBBIHF1b3RlLXN1cnJvdW5kZWQgc3RyaW5nIHdoaWNoIHN1cHBvcnRzIGVzY2FwZSBjaGFyYWN0ZXJzICgnXCcpLg0KCSAgICBzdHJpbmc6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoJyInKQ0KCSAgICAgICAgLnRoZW4ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbHQocS5lc2NhcGVDaGFyYWN0ZXIsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMubm9uZU9mKCciXFwnKSkNCgkgICAgICAgIC5hdExlYXN0KDApDQoJICAgICAgICAubWFwKGNoYXJzID0+IGNoYXJzLmpvaW4oIiIpKSkNCgkgICAgICAgIC5za2lwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCciJykpDQoJICAgICAgICAuZGVzYygic3RyaW5nIiksDQoJICAgIGVzY2FwZUNoYXJhY3RlcjogXyA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiXFwiKQ0KCSAgICAgICAgLnRoZW4ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbnkpDQoJICAgICAgICAubWFwKGVzY2FwZWQgPT4gew0KCSAgICAgICAgLy8gSWYgd2UgYXJlIGVzY2FwaW5nIGEgYmFja3NsYXNoIG9yIGEgcXVvdGUsIHBhc3MgaW4gb24gaW4gZXNjYXBlZCBmb3JtDQoJICAgICAgICBpZiAoZXNjYXBlZCA9PT0gJyInKQ0KCSAgICAgICAgICAgIHJldHVybiAnIic7DQoJICAgICAgICBpZiAoZXNjYXBlZCA9PT0gIlxcIikNCgkgICAgICAgICAgICByZXR1cm4gIlxcIjsNCgkgICAgICAgIGVsc2UNCgkgICAgICAgICAgICByZXR1cm4gIlxcIiArIGVzY2FwZWQ7DQoJICAgIH0pLA0KCSAgICAvLyBBIGJvb2xlYW4gdHJ1ZS9mYWxzZSB2YWx1ZS4NCgkgICAgYm9vbDogXyA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvdHJ1ZXxmYWxzZXxUcnVlfEZhbHNlLykNCgkgICAgICAgIC5tYXAoc3RyID0+IHN0ci50b0xvd2VyQ2FzZSgpID09ICJ0cnVlIikNCgkgICAgICAgIC5kZXNjKCJib29sZWFuICgndHJ1ZScgb3IgJ2ZhbHNlJykiKSwNCgkgICAgLy8gQSB0YWcgb2YgdGhlIGZvcm0gJyNzdHVmZi9oZWxsby10aGVyZScuDQoJICAgIHRhZzogXyA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiIyIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvW1xwe0xldHRlcn0wLTlfLy1dL3UpLmRlc2MoInRleHQiKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoRU1PSklfUkVHRVgpLmRlc2MoInRleHQiKSkubWFueSgpLCAoc3RhcnQsIHJlc3QpID0+IHN0YXJ0ICsgcmVzdC5qb2luKCIiKSkuZGVzYygidGFnICgnI2hlbGxvL3N0dWZmJykiKSwNCgkgICAgLy8gQSB2YXJpYWJsZSBpZGVudGlmaWVyLCB3aGljaCBpcyBhbHBoYW51bWVyaWMgYW5kIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBvci4uLiBlbW9qaS4NCgkgICAgaWRlbnRpZmllcjogXyA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXHB7TGV0dGVyfS91KSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoRU1PSklfUkVHRVgpLmRlc2MoInRleHQiKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9bMC05XHB7TGV0dGVyfV8tXS91KSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoRU1PSklfUkVHRVgpLmRlc2MoInRleHQiKSkubWFueSgpLCAoZmlyc3QsIHJlc3QpID0+IGZpcnN0ICsgcmVzdC5qb2luKCIiKSkuZGVzYygidmFyaWFibGUgaWRlbnRpZmllciIpLA0KCSAgICAvLyBBbiBPYnNpZGlhbiBsaW5rIG9mIHRoZSBmb3JtIFtbPGxpbms+XV0uDQoJICAgIGxpbms6IF8gPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoL1xbXFsoW15cW1xdXSo/KVxdXF0vdSwgMSkNCgkgICAgICAgIC5tYXAobGlua0lubmVyID0+IHBhcnNlSW5uZXJMaW5rKGxpbmtJbm5lcikpDQoJICAgICAgICAuZGVzYygiZmlsZSBsaW5rIiksDQoJICAgIC8vIEFuIGVtYmVkZGFibGUgbGluayB3aGljaCBjYW4gc3RhcnQgd2l0aCAnIScuIFRoaXMgb3ZlcmxhcHMgd2l0aCB0aGUgbm9ybWFsIG5lZ2F0aW9uIG9wZXJhdG9yLCBzbyBpdCBpcyBvbmx5DQoJICAgIC8vIHByb3ZpZGVkIGZvciBtZXRhZGF0YSBwYXJzaW5nLg0KCSAgICBlbWJlZExpbms6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIiEiKS5hdE1vc3QoMSksIHEubGluaywgKHAsIGwpID0+IHsNCgkgICAgICAgIGlmIChwLmxlbmd0aCA+IDApDQoJICAgICAgICAgICAgbC5lbWJlZCA9IHRydWU7DQoJICAgICAgICByZXR1cm4gbDsNCgkgICAgfSkuZGVzYygiZmlsZSBsaW5rIiksDQoJICAgIC8vIEJpbmFyeSBwbHVzIG9yIG1pbnVzIG9wZXJhdG9yLg0KCSAgICBiaW5hcnlQbHVzTWludXM6IF8gPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoL1wrfC0vKQ0KCSAgICAgICAgLm1hcChzdHIgPT4gc3RyKQ0KCSAgICAgICAgLmRlc2MoIicrJyBvciAnLSciKSwNCgkgICAgLy8gQmluYXJ5IHRpbWVzIG9yIGRpdmlkZSBvcGVyYXRvci4NCgkgICAgYmluYXJ5TXVsRGl2OiBfID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cKnxcLy8pDQoJICAgICAgICAubWFwKHN0ciA9PiBzdHIpDQoJICAgICAgICAuZGVzYygiJyonIG9yICcvJyIpLA0KCSAgICAvLyBCaW5hcnkgY29tcGFyaXNvbiBvcGVyYXRvci4NCgkgICAgYmluYXJ5Q29tcGFyZU9wOiBfID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC8+PXw8PXwhPXw+fDx8PS8pDQoJICAgICAgICAubWFwKHN0ciA9PiBzdHIpDQoJICAgICAgICAuZGVzYygiJz49JyBvciAnPD0nIG9yICchPScgb3IgJz0nIG9yICc+JyBvciAnPCciKSwNCgkgICAgLy8gQmluYXJ5IGJvb2xlYW4gY29tYmluYXRpb24gb3BlcmF0b3IuDQoJICAgIGJpbmFyeUJvb2xlYW5PcDogXyA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvYW5kfG9yfCZ8XHwvaSkNCgkgICAgICAgIC5tYXAoc3RyID0+IHsNCgkgICAgICAgIGlmIChzdHIudG9Mb3dlckNhc2UoKSA9PSAiYW5kIikNCgkgICAgICAgICAgICByZXR1cm4gIiYiOw0KCSAgICAgICAgZWxzZSBpZiAoc3RyLnRvTG93ZXJDYXNlKCkgPT0gIm9yIikNCgkgICAgICAgICAgICByZXR1cm4gInwiOw0KCSAgICAgICAgZWxzZQ0KCSAgICAgICAgICAgIHJldHVybiBzdHI7DQoJICAgIH0pDQoJICAgICAgICAuZGVzYygiJ2FuZCcgb3IgJ29yJyIpLA0KCSAgICAvLyBBIGRhdGUgd2hpY2ggY2FuIGJlIFlZWVktTU1bLUREVEhIOm1tOnNzXS4NCgkgICAgcm9vdERhdGU6IF8gPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoL1xkezR9LyksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCItIiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cZHsyfS8pLCAoeWVhciwgXywgbW9udGgpID0+IHsNCgkgICAgICAgIHJldHVybiBEYXRlVGltZV8xLmZyb21PYmplY3QoeyB5ZWFyOiBOdW1iZXIucGFyc2VJbnQoeWVhciksIG1vbnRoOiBOdW1iZXIucGFyc2VJbnQobW9udGgpIH0pOw0KCSAgICB9KS5kZXNjKCJkYXRlIGluIGZvcm1hdCBZWVlZLU1NWy1ERFRISC1NTS1TUy5NU10iKSwNCgkgICAgZGF0ZVNob3J0aGFuZDogXyA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdCguLi5PYmplY3Qua2V5cyhEQVRFX1NIT1JUSEFORFMpDQoJICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aCkNCgkgICAgICAgIC5tYXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcpKSwNCgkgICAgZGF0ZTogcSA9PiBjaGFpbk9wdChxLnJvb3REYXRlLCAoeW0pID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCItIiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cZHsyfS8pLCAoXywgZGF5KSA9PiB5bS5zZXQoeyBkYXk6IE51bWJlci5wYXJzZUludChkYXkpIH0pKSwgKHltZCkgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIlQiKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoL1xkezJ9LyksIChfLCBob3VyKSA9PiB5bWQuc2V0KHsgaG91cjogTnVtYmVyLnBhcnNlSW50KGhvdXIpIH0pKSwgKHltZGgpID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCI6IiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cZHsyfS8pLCAoXywgbWludXRlKSA9PiB5bWRoLnNldCh7IG1pbnV0ZTogTnVtYmVyLnBhcnNlSW50KG1pbnV0ZSkgfSkpLCAoeW1kaG0pID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCI6IiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cZHsyfS8pLCAoXywgc2Vjb25kKSA9PiB5bWRobS5zZXQoeyBzZWNvbmQ6IE51bWJlci5wYXJzZUludChzZWNvbmQpIH0pKSwgKHltZGhtcykgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbHQocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIi4iKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoL1xkezN9LyksIChfLCBtaWxsaXNlY29uZCkgPT4geW1kaG1zLnNldCh7IG1pbGxpc2Vjb25kOiBOdW1iZXIucGFyc2VJbnQobWlsbGlzZWNvbmQpIH0pKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdWNjZWVkKHltZGhtcykgLy8gcGFzcw0KCSAgICApLCAoZHQpID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIrIikub3IocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIi0iKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cZHsxLDJ9KDpcZHsyfSk/LyksIChwbSwgaHIpID0+IGR0LnNldFpvbmUoIlVUQyIgKyBwbSArIGhyLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSkpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiWiIpLCAoKSA9PiBkdC5zZXRab25lKCJ1dGMiLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSkpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiWyIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvWzAtOUEtWmEteistXC9dKy91KSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIl0iKSwgKF9hLCB6b25lLCBfYikgPT4gZHQuc2V0Wm9uZSh6b25lLCB7IGtlZXBMb2NhbFRpbWU6IHRydWUgfSkpKSkNCgkgICAgICAgIC5hc3NlcnQoKGR0KSA9PiBkdC5pc1ZhbGlkLCAidmFsaWQgZGF0ZSIpDQoJICAgICAgICAuZGVzYygiZGF0ZSBpbiBmb3JtYXQgWVlZWS1NTVstRERUSEgtTU0tU1MuTVNdIiksDQoJICAgIC8vIEEgZGF0ZSwgcGx1cyB2YXJpb3VzIHNob3J0aGFuZCB0aW1lcyBvZiBkYXkgaXQgY291bGQgYmUuDQoJICAgIGRhdGVQbHVzOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHEuZGF0ZVNob3J0aGFuZC5tYXAoZCA9PiBEQVRFX1NIT1JUSEFORFNbZF0oKSksIHEuZGF0ZSkuZGVzYygiZGF0ZSBpbiBmb3JtYXQgWVlZWS1NTVstRERUSEgtTU0tU1MuTVNdIG9yIGluIHNob3J0aGFuZCIpLA0KCSAgICAvLyBBIGR1cmF0aW9uIG9mIHRpbWUuDQoJICAgIGR1cmF0aW9uVHlwZTogXyA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdCguLi5PYmplY3Qua2V5cyhEVVJBVElPTl9UWVBFUykNCgkgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiLmxlbmd0aCAtIGEubGVuZ3RoKQ0KCSAgICAgICAgLm1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZykpLA0KCSAgICBkdXJhdGlvbjogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChxLm51bWJlciwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlLCBxLmR1cmF0aW9uVHlwZSwgKGNvdW50LCBfLCB0KSA9PiBEVVJBVElPTl9UWVBFU1t0XS5tYXBVbml0cyh4ID0+IHggKiBjb3VudCkpDQoJICAgICAgICAuc2VwQnkxKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIsIikudHJpbShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UpLm9yKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSkpDQoJICAgICAgICAubWFwKGR1cmF0aW9ucyA9PiBkdXJhdGlvbnMucmVkdWNlKChwLCBjKSA9PiBwLnBsdXMoYykpKQ0KCSAgICAgICAgLmRlc2MoImR1cmF0aW9uIGxpa2UgNGhyMm1pbiIpLA0KCSAgICAvLyBBIHJhdyBudWxsIHZhbHVlLg0KCSAgICByYXdOdWxsOiBfID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJudWxsIiksDQoJICAgIC8vIFNvdXJjZSBwYXJzaW5nLg0KCSAgICB0YWdTb3VyY2U6IHEgPT4gcS50YWcubWFwKHRhZyA9PiBTb3VyY2VzLnRhZyh0YWcpKSwNCgkgICAgY3N2U291cmNlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJjc3YoIikuc2tpcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UpLCBxLnN0cmluZywgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKSwgKF8xLCBwYXRoLCBfMikgPT4gU291cmNlcy5jc3YocGF0aCkpLA0KCSAgICBsaW5rSW5jb21pbmdTb3VyY2U6IHEgPT4gcS5saW5rLm1hcChsaW5rID0+IFNvdXJjZXMubGluayhsaW5rLnBhdGgsIHRydWUpKSwNCgkgICAgbGlua091dGdvaW5nU291cmNlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJvdXRnb2luZygiKS5za2lwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSksIHEubGluaywgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKSwgKF8xLCBsaW5rLCBfMikgPT4gU291cmNlcy5saW5rKGxpbmsucGF0aCwgZmFsc2UpKSwNCgkgICAgZm9sZGVyU291cmNlOiBxID0+IHEuc3RyaW5nLm1hcChzdHIgPT4gU291cmNlcy5mb2xkZXIoc3RyKSksDQoJICAgIHBhcmVuc1NvdXJjZTogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiKCIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHEuc291cmNlLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIpIiksIChfMSwgXzIsIGZpZWxkLCBfMywgXzQpID0+IGZpZWxkKSwNCgkgICAgbmVnYXRlU291cmNlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCItIiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIhIikpLCBxLmF0b21Tb3VyY2UsIChfLCBzb3VyY2UpID0+IFNvdXJjZXMubmVnYXRlKHNvdXJjZSkpLA0KCSAgICBhdG9tU291cmNlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHEucGFyZW5zU291cmNlLCBxLm5lZ2F0ZVNvdXJjZSwgcS5saW5rT3V0Z29pbmdTb3VyY2UsIHEubGlua0luY29taW5nU291cmNlLCBxLmZvbGRlclNvdXJjZSwgcS50YWdTb3VyY2UsIHEuY3N2U291cmNlKSwNCgkgICAgYmluYXJ5T3BTb3VyY2U6IHEgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuYXRvbVNvdXJjZSwgcS5iaW5hcnlCb29sZWFuT3AubWFwKHMgPT4gcyksIFNvdXJjZXMuYmluYXJ5T3ApLA0KCSAgICBzb3VyY2U6IHEgPT4gcS5iaW5hcnlPcFNvdXJjZSwNCgkgICAgLy8gRmllbGQgcGFyc2luZy4NCgkgICAgdmFyaWFibGVGaWVsZDogcSA9PiBxLmlkZW50aWZpZXINCgkgICAgICAgIC5jaGFpbihyID0+IHsNCgkgICAgICAgIGlmIChLRVlXT1JEUy5pbmNsdWRlcyhyLnRvVXBwZXJDYXNlKCkpKSB7DQoJICAgICAgICAgICAgcmV0dXJuIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuZmFpbCgiVmFyaWFibGUgZmllbGRzIGNhbm5vdCBiZSBhIGtleXdvcmQgKCIgKyBLRVlXT1JEUy5qb2luKCIgb3IgIikgKyAiKSIpOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSB7DQoJICAgICAgICAgICAgcmV0dXJuIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3VjY2VlZChGaWVsZHMudmFyaWFibGUocikpOw0KCSAgICAgICAgfQ0KCSAgICB9KQ0KCSAgICAgICAgLmRlc2MoInZhcmlhYmxlIiksDQoJICAgIG51bWJlckZpZWxkOiBxID0+IHEubnVtYmVyLm1hcCh2YWwgPT4gRmllbGRzLmxpdGVyYWwodmFsKSkuZGVzYygibnVtYmVyIiksDQoJICAgIHN0cmluZ0ZpZWxkOiBxID0+IHEuc3RyaW5nLm1hcCh2YWwgPT4gRmllbGRzLmxpdGVyYWwodmFsKSkuZGVzYygic3RyaW5nIiksDQoJICAgIGJvb2xGaWVsZDogcSA9PiBxLmJvb2wubWFwKHZhbCA9PiBGaWVsZHMubGl0ZXJhbCh2YWwpKS5kZXNjKCJib29sZWFuIiksDQoJICAgIGRhdGVGaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiZGF0ZSgiKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlLCBxLmRhdGVQbHVzLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIpIiksIChwcmVmaXgsIF8xLCBkYXRlLCBfMiwgcG9zdGZpeCkgPT4gRmllbGRzLmxpdGVyYWwoZGF0ZSkpLmRlc2MoImRhdGUiKSwNCgkgICAgZHVyYXRpb25GaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiZHVyKCIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHEuZHVyYXRpb24sIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKSwgKHByZWZpeCwgXzEsIGR1ciwgXzIsIHBvc3RmaXgpID0+IEZpZWxkcy5saXRlcmFsKGR1cikpLmRlc2MoImR1cmF0aW9uIiksDQoJICAgIG51bGxGaWVsZDogcSA9PiBxLnJhd051bGwubWFwKF8gPT4gRmllbGRzLk5VTEwpLA0KCSAgICBsaW5rRmllbGQ6IHEgPT4gcS5saW5rLm1hcChmID0+IEZpZWxkcy5saXRlcmFsKGYpKSwNCgkgICAgbGlzdEZpZWxkOiBxID0+IHEuZmllbGQNCgkgICAgICAgIC5zZXBCeShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSkNCgkgICAgICAgIC53cmFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJbIikuc2tpcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UudGhlbihwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiXSIpKSkNCgkgICAgICAgIC5tYXAobCA9PiBGaWVsZHMubGlzdChsKSkNCgkgICAgICAgIC5kZXNjKCJsaXN0ICgnWzEsIDIsIDNdJykiKSwNCgkgICAgb2JqZWN0RmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocS5pZGVudGlmaWVyLm9yKHEuc3RyaW5nKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIjoiKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSksIHEuZmllbGQsIChuYW1lLCBfc2VwLCB2YWx1ZSkgPT4gew0KCSAgICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWUgfTsNCgkgICAgfSkNCgkgICAgICAgIC5zZXBCeShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSkNCgkgICAgICAgIC53cmFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJ7Iikuc2tpcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UudGhlbihwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygifSIpKSkNCgkgICAgICAgIC5tYXAodmFscyA9PiB7DQoJICAgICAgICBsZXQgcmVzID0ge307DQoJICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiB2YWxzKQ0KCSAgICAgICAgICAgIHJlc1tlbnRyeS5uYW1lXSA9IGVudHJ5LnZhbHVlOw0KCSAgICAgICAgcmV0dXJuIEZpZWxkcy5vYmplY3QocmVzKTsNCgkgICAgfSkNCgkgICAgICAgIC5kZXNjKCJvYmplY3QgKCd7IGE6IDEsIGI6IDIgfScpIiksDQoJICAgIGF0b21JbmxpbmVGaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdChxLmRhdGUsIHEuZHVyYXRpb24ubWFwKGQgPT4gbm9ybWFsaXplRHVyYXRpb24oZCkpLCBxLnN0cmluZywgcS50YWcsIHEuZW1iZWRMaW5rLCBxLmJvb2wsIHEubnVtYmVyLCBxLnJhd051bGwpLA0KCSAgICBpbmxpbmVGaWVsZExpc3Q6IHEgPT4gcS5hdG9tSW5saW5lRmllbGQuc2VwQnkocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIiwiKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSkubG9va2FoZWFkKHEuYXRvbUlubGluZUZpZWxkKSksDQoJICAgIGlubGluZUZpZWxkOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHEuYXRvbUlubGluZUZpZWxkLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSwgcS5pbmxpbmVGaWVsZExpc3QsIChmLCBfcywgbCkgPT4gW2ZdLmNvbmNhdChsKSksIHEuYXRvbUlubGluZUZpZWxkKSwNCgkgICAgYXRvbUZpZWxkOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KA0KCSAgICAvLyBQbGFjZSBlbWJlZCBsaW5rcyBhYm92ZSBuZWdhdGVkIGZpZWxkcyBhcyB0aGV5IGFyZSB0aGUgc3BlY2lhbCBwYXJzZXIgY2FzZSAnIVtbdGhpbmddXScgYW5kIGFyZSBnZW5lcmFsbHkgdW5hbWJpZ2lvdXMuDQoJICAgIHEuZW1iZWRMaW5rLm1hcChsID0+IEZpZWxkcy5saXRlcmFsKGwpKSwgcS5uZWdhdGVkRmllbGQsIHEubGlua0ZpZWxkLCBxLmxpc3RGaWVsZCwgcS5vYmplY3RGaWVsZCwgcS5sYW1iZGFGaWVsZCwgcS5wYXJlbnNGaWVsZCwgcS5ib29sRmllbGQsIHEubnVtYmVyRmllbGQsIHEuc3RyaW5nRmllbGQsIHEuZGF0ZUZpZWxkLCBxLmR1cmF0aW9uRmllbGQsIHEubnVsbEZpZWxkLCBxLnZhcmlhYmxlRmllbGQpLA0KCSAgICBpbmRleEZpZWxkOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHEuYXRvbUZpZWxkLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdChxLmRvdFBvc3RmaXgsIHEuaW5kZXhQb3N0Zml4LCBxLmZ1bmN0aW9uUG9zdGZpeCkubWFueSgpLCAob2JqLCBwb3N0Zml4ZXMpID0+IHsNCgkgICAgICAgIGxldCByZXN1bHQgPSBvYmo7DQoJICAgICAgICBmb3IgKGxldCBwb3N0IG9mIHBvc3RmaXhlcykgew0KCSAgICAgICAgICAgIHN3aXRjaCAocG9zdC50eXBlKSB7DQoJICAgICAgICAgICAgICAgIGNhc2UgImRvdCI6DQoJICAgICAgICAgICAgICAgIGNhc2UgImluZGV4IjoNCgkgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZpZWxkcy5pbmRleChyZXN1bHQsIHBvc3QuZmllbGQpOw0KCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoJICAgICAgICAgICAgICAgIGNhc2UgImZ1bmN0aW9uIjoNCgkgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZpZWxkcy5mdW5jKHJlc3VsdCwgcG9zdC5maWVsZHMpOw0KCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoJICAgICAgICAgICAgfQ0KCSAgICAgICAgfQ0KCSAgICAgICAgcmV0dXJuIHJlc3VsdDsNCgkgICAgfSksDQoJICAgIG5lZ2F0ZWRGaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiISIpLCBxLmluZGV4RmllbGQsIChfLCBmaWVsZCkgPT4gRmllbGRzLm5lZ2F0ZShmaWVsZCkpLmRlc2MoIm5lZ2F0ZWQgZmllbGQiKSwNCgkgICAgcGFyZW5zRmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIigiKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlLCBxLmZpZWxkLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIpIiksIChfMSwgXzIsIGZpZWxkLCBfMywgXzQpID0+IGZpZWxkKSwNCgkgICAgbGFtYmRhRmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocS5pZGVudGlmaWVyDQoJICAgICAgICAuc2VwQnkocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIiwiKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSkpDQoJICAgICAgICAud3JhcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiKCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSkpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiPT4iKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSksIHEuZmllbGQsIChpZGVudCwgX2lnbm9yZSwgdmFsdWUpID0+IHsNCgkgICAgICAgIHJldHVybiB7IHR5cGU6ICJsYW1iZGEiLCBhcmd1bWVudHM6IGlkZW50LCB2YWx1ZSB9Ow0KCSAgICB9KSwNCgkgICAgZG90UG9zdGZpeDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLiIpLCBxLmlkZW50aWZpZXIsIChfLCBmaWVsZCkgPT4gew0KCSAgICAgICAgcmV0dXJuIHsgdHlwZTogImRvdCIsIGZpZWxkOiBGaWVsZHMubGl0ZXJhbChmaWVsZCkgfTsNCgkgICAgfSksDQoJICAgIGluZGV4UG9zdGZpeDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiWyIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHEuZmllbGQsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIl0iKSwgKF8sIF8yLCBmaWVsZCwgXzMsIF80KSA9PiB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAiaW5kZXgiLCBmaWVsZCB9Ow0KCSAgICB9KSwNCgkgICAgZnVuY3Rpb25Qb3N0Zml4OiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIoIiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcS5maWVsZC5zZXBCeShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKSwgKF8sIF8xLCBmaWVsZHMsIF8yLCBfMykgPT4gew0KCSAgICAgICAgcmV0dXJuIHsgdHlwZTogImZ1bmN0aW9uIiwgZmllbGRzIH07DQoJICAgIH0pLA0KCSAgICAvLyBUaGUgcHJlY2VkZW5jZSBoaWVyYXJjaHkgb2Ygb3BlcmF0b3JzIC0gbXVsdGlwbHkvZGl2aWRlLCBhZGQvc3VidHJhY3QsIGNvbXBhcmUsIGFuZCB0aGVuIGJvb2xlYW4gb3BlcmF0aW9ucy4NCgkgICAgYmluYXJ5TXVsRGl2RmllbGQ6IHEgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuaW5kZXhGaWVsZCwgcS5iaW5hcnlNdWxEaXYsIEZpZWxkcy5iaW5hcnlPcCksDQoJICAgIGJpbmFyeVBsdXNNaW51c0ZpZWxkOiBxID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeU11bERpdkZpZWxkLCBxLmJpbmFyeVBsdXNNaW51cywgRmllbGRzLmJpbmFyeU9wKSwNCgkgICAgYmluYXJ5Q29tcGFyZUZpZWxkOiBxID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeVBsdXNNaW51c0ZpZWxkLCBxLmJpbmFyeUNvbXBhcmVPcCwgRmllbGRzLmJpbmFyeU9wKSwNCgkgICAgYmluYXJ5Qm9vbGVhbkZpZWxkOiBxID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeUNvbXBhcmVGaWVsZCwgcS5iaW5hcnlCb29sZWFuT3AsIEZpZWxkcy5iaW5hcnlPcCksDQoJICAgIGJpbmFyeU9wRmllbGQ6IHEgPT4gcS5iaW5hcnlCb29sZWFuRmllbGQsDQoJICAgIGZpZWxkOiBxID0+IHEuYmluYXJ5T3BGaWVsZCwNCgl9KTsKCgkvKiogUGFyc2UgaW5saW5lIGZpZWxkcyBhbmQgb3RoZXIgZW1iZWRkZWQgbWV0YWRhdGEgaW4gYSBsaW5lLiAqLw0KCS8qKiBUaGUgd3JhcHBlciBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIGlubGluZSBmaWVsZC4gKi8NCgljb25zdCBJTkxJTkVfRklFTERfV1JBUFBFUlMgPSBPYmplY3QuZnJlZXplKHsNCgkgICAgIlsiOiAiXSIsDQoJICAgICIoIjogIikiLA0KCX0pOw0KCS8qKg0KCSAqIEZpbmQgYSBtYXRjaGluZyBjbG9zaW5nIGJyYWNrZXQgdGhhdCBvY2N1cnMgYXQgb3IgYWZ0ZXIgYHN0YXJ0YCwgcmVzcGVjdGluZyBuZXN0aW5nIGFuZCBlc2NhcGVzLiBJZiBmb3VuZCwNCgkgKiByZXR1cm5zIHRoZSB2YWx1ZSBjb250YWluZWQgd2l0aGluIGFuZCB0aGUgc3RyaW5nIGluZGV4IGFmdGVyIHRoZSBlbmQgb2YgdGhlIHZhbHVlLg0KCSAqLw0KCWZ1bmN0aW9uIGZpbmRDbG9zaW5nKGxpbmUsIHN0YXJ0LCBvcGVuLCBjbG9zZSkgew0KCSAgICBsZXQgbmVzdGluZyA9IDA7DQoJICAgIGxldCBlc2NhcGVkID0gZmFsc2U7DQoJICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnQ7IGluZGV4IDwgbGluZS5sZW5ndGg7IGluZGV4KyspIHsNCgkgICAgICAgIGxldCBjaGFyID0gbGluZS5jaGFyQXQoaW5kZXgpOw0KCSAgICAgICAgLy8gQWxsb3dzIGZvciBkb3VibGUgZXNjYXBlcyBsaWtlICdcXCcgdG8gYmUgcmVuZGVyZWQgbm9ybWFsbHkuDQoJICAgICAgICBpZiAoY2hhciA9PSAiXFwiKSB7DQoJICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkOw0KCSAgICAgICAgICAgIGNvbnRpbnVlOw0KCSAgICAgICAgfQ0KCSAgICAgICAgaWYgKGVzY2FwZWQpIHsNCgkgICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7DQoJICAgICAgICAgICAgY29udGludWU7DQoJICAgICAgICB9DQoJICAgICAgICBpZiAoY2hhciA9PSBvcGVuKQ0KCSAgICAgICAgICAgIG5lc3RpbmcrKzsNCgkgICAgICAgIGVsc2UgaWYgKGNoYXIgPT0gY2xvc2UpDQoJICAgICAgICAgICAgbmVzdGluZy0tOw0KCSAgICAgICAgLy8gT25seSBvY2N1cnMgaWYgd2UgYXJlIG9uIGEgY2xvc2UgY2hhcmFjdGVyIGFuZCB0cmhlcmUgaXMgbm8gbW9yZSBuZXN0aW5nLg0KCSAgICAgICAgaWYgKG5lc3RpbmcgPCAwKQ0KCSAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBsaW5lLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpLnRyaW0oKSwgZW5kSW5kZXg6IGluZGV4ICsgMSB9Ow0KCSAgICAgICAgZXNjYXBlZCA9IGZhbHNlOw0KCSAgICB9DQoJICAgIHJldHVybiB1bmRlZmluZWQ7DQoJfQ0KCS8qKiBGaW5kIHRoZSAnOjonIHNlcGFyYXRvciBpbiBhbiBpbmxpbmUgZmllbGQuICovDQoJZnVuY3Rpb24gZmluZFNlcGFyYXRvcihsaW5lLCBzdGFydCkgew0KCSAgICBsZXQgc2VwID0gbGluZS5pbmRleE9mKCI6OiIsIHN0YXJ0KTsNCgkgICAgaWYgKHNlcCA8IDApDQoJICAgICAgICByZXR1cm4gdW5kZWZpbmVkOw0KCSAgICByZXR1cm4geyBrZXk6IGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBzZXApLnRyaW0oKSwgdmFsdWVJbmRleDogc2VwICsgMiB9Ow0KCX0NCgkvKiogVHJ5IHRvIGNvbXBsZXRlbHkgcGFyc2UgYW4gaW5saW5lIGZpZWxkIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4gQXNzdWVtcyBgc3RhcnRgIGlzIG9uIGEgd3JhcHBpbmcgY2hhcmFjdGVyLiAqLw0KCWZ1bmN0aW9uIGZpbmRTcGVjaWZpY0lubGluZUZpZWxkKGxpbmUsIHN0YXJ0KSB7DQoJICAgIGxldCBvcGVuID0gbGluZS5jaGFyQXQoc3RhcnQpOw0KCSAgICBsZXQga2V5ID0gZmluZFNlcGFyYXRvcihsaW5lLCBzdGFydCArIDEpOw0KCSAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpDQoJICAgICAgICByZXR1cm4gdW5kZWZpbmVkOw0KCSAgICAvLyBGYWlsIHRoZSBtYXRjaCBpZiB3ZSBmaW5kIGFueSBzZXBhcmF0b3IgY2hhcmFjdGVycyAobm90IGFsbG93ZWQgaW4ga2V5cykuDQoJICAgIGZvciAobGV0IHNlcCBvZiBPYmplY3Qua2V5cyhJTkxJTkVfRklFTERfV1JBUFBFUlMpLmNvbmNhdChPYmplY3QudmFsdWVzKElOTElORV9GSUVMRF9XUkFQUEVSUykpKSB7DQoJICAgICAgICBpZiAoa2V5LmtleS5pbmNsdWRlcyhzZXApKQ0KCSAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7DQoJICAgIH0NCgkgICAgbGV0IHZhbHVlID0gZmluZENsb3NpbmcobGluZSwga2V5LnZhbHVlSW5kZXgsIG9wZW4sIElOTElORV9GSUVMRF9XUkFQUEVSU1tvcGVuXSk7DQoJICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKQ0KCSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsNCgkgICAgcmV0dXJuIHsNCgkgICAgICAgIGtleToga2V5LmtleSwNCgkgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSwNCgkgICAgICAgIHN0YXJ0OiBzdGFydCwNCgkgICAgICAgIHN0YXJ0VmFsdWU6IGtleS52YWx1ZUluZGV4LA0KCSAgICAgICAgZW5kOiB2YWx1ZS5lbmRJbmRleCwNCgkgICAgICAgIHdyYXBwaW5nOiBvcGVuLA0KCSAgICB9Ow0KCX0NCgkvKiogUGFyc2UgYSB0ZXh0dWFsIGlubGluZSBmaWVsZCB2YWx1ZSBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gd29yayB3aXRoLiAqLw0KCWZ1bmN0aW9uIHBhcnNlSW5saW5lVmFsdWUodmFsdWUpIHsNCgkgICAgLy8gVGhlIHN0cmlwcGVkIGxpdGVyYWwgZmllbGQgcGFyc2VyIHVuZGVyc3RhbmRzIGFsbCBvZiB0aGUgbm9uLWFycmF5L25vbi1vYmplY3QgZmllbGRzIGFuZCBjYW4gcGFyc2UgdGhlbSBmb3IgdXMuDQoJICAgIC8vIElubGluZSBmaWVsZCBvYmplY3RzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZDsgaW5saW5lIGFycmF5IG9iamVjdHMgaGF2ZSB0byBiZSBoYW5kbGVkIGJ5IHRoZSBwYXJzZXINCgkgICAgLy8gc2VwYXJhdGVseS4NCgkgICAgbGV0IGlubGluZSA9IEVYUFJFU1NJT04uaW5saW5lRmllbGQucGFyc2UodmFsdWUpOw0KCSAgICBpZiAoaW5saW5lLnN0YXR1cykNCgkgICAgICAgIHJldHVybiBpbmxpbmUudmFsdWU7DQoJICAgIGVsc2UNCgkgICAgICAgIHJldHVybiB2YWx1ZTsNCgl9DQoJLyoqIEV4dHJhY3RzIGlubGluZSBmaWVsZHMgb2YgdGhlIGZvcm0gJ1trZXk6OiB2YWx1ZV0nIGZyb20gYSBsaW5lIG9mIHRleHQuIFRoaXMgaXMgZG9uZSBpbiBhIHJlbGF0aXZlbHkNCgkgKiAicm9idXN0IiB3YXkgdG8gYXZvaWQgZmFpbGluZyBkdWUgdG8gYmFkIG5lc3Rpbmcgb3Igb3RoZXIgaW50ZXJmZXJpbmcgTWFya2Rvd24gc3ltYm9sczoNCgkgKg0KCSAqIC0gTG9vayBmb3IgYW55IHdyYXBwZXJzICgnWycgYW5kICcoJykgaW4gdGhlIGxpbmUsIHRyeWluZyB0byBwYXJzZSB3aGF0ZXZlciBjb21lcyBhZnRlciBpdCBhcyBhbiBpbmxpbmUga2V5OjouDQoJICogLSBJZiBzdWNjZXNzZnVsLCBzY2FuIHVudGlsIHlvdSBmaW5kIGEgbWF0Y2hpbmcgZW5kIGJyYWNrZXQsIGFuZCBwYXJzZSB3aGF0ZXZlciByZW1haW5zIGFzIGFuIGlubGluZSB2YWx1ZS4NCgkgKi8NCglmdW5jdGlvbiBleHRyYWN0SW5saW5lRmllbGRzKGxpbmUsIGluY2x1ZGVUYXNrRmllbGRzID0gZmFsc2UpIHsNCgkgICAgbGV0IGZpZWxkcyA9IFtdOw0KCSAgICBmb3IgKGxldCB3cmFwcGVyIG9mIE9iamVjdC5rZXlzKElOTElORV9GSUVMRF9XUkFQUEVSUykpIHsNCgkgICAgICAgIGxldCBmb3VuZEluZGV4ID0gbGluZS5pbmRleE9mKHdyYXBwZXIpOw0KCSAgICAgICAgd2hpbGUgKGZvdW5kSW5kZXggPj0gMCkgew0KCSAgICAgICAgICAgIGxldCBwYXJzZWRGaWVsZCA9IGZpbmRTcGVjaWZpY0lubGluZUZpZWxkKGxpbmUsIGZvdW5kSW5kZXgpOw0KCSAgICAgICAgICAgIGlmICghcGFyc2VkRmllbGQpIHsNCgkgICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IGxpbmUuaW5kZXhPZih3cmFwcGVyLCBmb3VuZEluZGV4ICsgMSk7DQoJICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KCSAgICAgICAgICAgIH0NCgkgICAgICAgICAgICBmaWVsZHMucHVzaChwYXJzZWRGaWVsZCk7DQoJICAgICAgICAgICAgZm91bmRJbmRleCA9IGxpbmUuaW5kZXhPZih3cmFwcGVyLCBwYXJzZWRGaWVsZC5lbmQpOw0KCSAgICAgICAgfQ0KCSAgICB9DQoJICAgIGlmIChpbmNsdWRlVGFza0ZpZWxkcykNCgkgICAgICAgIGZpZWxkcyA9IGZpZWxkcy5jb25jYXQoZXh0cmFjdFNwZWNpYWxUYXNrRmllbGRzKGxpbmUpKTsNCgkgICAgZmllbGRzLnNvcnQoKGEsIGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0KTsNCgkgICAgcmV0dXJuIGZpZWxkczsNCgl9DQoJLyoqIFZhbGlkYXRlcyB0aGF0IGEgcmF3IGZpZWxkIG5hbWUgaGFzIGEgdmFsaWQgZm9ybS4gKi8NCgljb25zdCBGVUxMX0xJTkVfS0VZX1BBUlQgPSBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cChuZXcgUmVnRXhwKGVtb2ppUmVnZXgoKSwgInUiKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9bMC05XHB7TGV0dGVyfVx3XHNfLy1dKy91KSkNCgkgICAgLm1hbnkoKQ0KCSAgICAubWFwKHBhcnRzID0+IHBhcnRzLmpvaW4oIiIpKTsNCgljb25zdCBGVUxMX0xJTkVfS0VZX1BBUlNFUiA9IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9bXjAtOVx3XHB7TGV0dGVyfV0qL3UpDQoJICAgIC50aGVuKEZVTExfTElORV9LRVlfUEFSVCkNCgkgICAgLnNraXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoL1tfXCp+YF0qL3UpKTsNCgkvKiogQXR0ZW1wdCB0byBleHRyYWN0IGEgZnVsbC1saW5lIGZpZWxkIChLZXk6OiBWYWx1ZSBjb25zdW1pbmcgdGhlIGVudGlyZSBjb250ZW50IGxpbmUpLiAqLw0KCWZ1bmN0aW9uIGV4dHJhY3RGdWxsTGluZUZpZWxkKHRleHQpIHsNCgkgICAgbGV0IHNlcCA9IGZpbmRTZXBhcmF0b3IodGV4dCwgMCk7DQoJICAgIGlmICghc2VwKQ0KCSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsNCgkgICAgLy8gV2UgbmVlZCB0byBwb3N0LXByb2Nlc3MgdGhlIGtleSB0byBkcm9wIHVubmVjZXNzYXJ5IG9wZW5pbmcgYW5ub3RhdGlvbnMgYXMgd2VsbCBhcw0KCSAgICAvLyBkcm9wIHN1cnJvdW5kaW5nIE1hcmtkb3duLg0KCSAgICBsZXQgcmVhbEtleSA9IEZVTExfTElORV9LRVlfUEFSU0VSLnBhcnNlKHNlcC5rZXkpOw0KCSAgICBpZiAoIXJlYWxLZXkuc3RhdHVzKQ0KCSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsNCgkgICAgcmV0dXJuIHsNCgkgICAgICAgIGtleTogcmVhbEtleS52YWx1ZSwNCgkgICAgICAgIHZhbHVlOiB0ZXh0LnN1YnN0cmluZyhzZXAudmFsdWVJbmRleCkudHJpbSgpLA0KCSAgICAgICAgc3RhcnQ6IDAsDQoJICAgICAgICBzdGFydFZhbHVlOiBzZXAudmFsdWVJbmRleCwNCgkgICAgICAgIGVuZDogdGV4dC5sZW5ndGgsDQoJICAgIH07DQoJfQ0KCWNvbnN0IENSRUFURURfREFURV9SRUdFWCA9IC9cdXsyNzk1fVxzKihcZHs0fS1cZHsyfS1cZHsyfSkvdTsNCgljb25zdCBEVUVfREFURV9SRUdFWCA9IC9bXHV7MUY0QzV9XHV7MUY0QzZ9XHV7MUY1RDN9XHV7RkUwRn1dezEsfVxzKihcZHs0fS1cZHsyfS1cZHsyfSkvdTsNCgljb25zdCBET05FX0RBVEVfUkVHRVggPSAvXHV7MjcwNX1ccyooXGR7NH0tXGR7Mn0tXGR7Mn0pL3U7DQoJLyoqIFBhcnNlIHNwZWNpYWwgY29tcGxldGVkL2R1ZS9kb25lIHRhc2sgZmllbGRzIHdoaWNoIGFyZSBtYXJrZWQgdmlhIGVtb2ppLiAqLw0KCWZ1bmN0aW9uIGV4dHJhY3RTcGVjaWFsVGFza0ZpZWxkcyhsaW5lKSB7DQoJICAgIGxldCByZXN1bHRzID0gW107DQoJICAgIGxldCBjcmVhdGVkTWF0Y2ggPSBDUkVBVEVEX0RBVEVfUkVHRVguZXhlYyhsaW5lKTsNCgkgICAgaWYgKGNyZWF0ZWRNYXRjaCkNCgkgICAgICAgIHJlc3VsdHMucHVzaCh7DQoJICAgICAgICAgICAga2V5OiAiY3JlYXRlZCIsDQoJICAgICAgICAgICAgdmFsdWU6IGNyZWF0ZWRNYXRjaFsxXSwNCgkgICAgICAgICAgICBzdGFydDogY3JlYXRlZE1hdGNoLmluZGV4LA0KCSAgICAgICAgICAgIHN0YXJ0VmFsdWU6IGNyZWF0ZWRNYXRjaC5pbmRleCArIDEsDQoJICAgICAgICAgICAgZW5kOiBjcmVhdGVkTWF0Y2guaW5kZXggKyBjcmVhdGVkTWF0Y2hbMF0ubGVuZ3RoLA0KCSAgICAgICAgICAgIHdyYXBwaW5nOiAiZW1vamktc2hvcnRoYW5kIiwNCgkgICAgICAgIH0pOw0KCSAgICBsZXQgZHVlTWF0Y2ggPSBEVUVfREFURV9SRUdFWC5leGVjKGxpbmUpOw0KCSAgICBpZiAoZHVlTWF0Y2gpDQoJICAgICAgICByZXN1bHRzLnB1c2goew0KCSAgICAgICAgICAgIGtleTogImR1ZSIsDQoJICAgICAgICAgICAgdmFsdWU6IGR1ZU1hdGNoWzFdLA0KCSAgICAgICAgICAgIHN0YXJ0OiBkdWVNYXRjaC5pbmRleCwNCgkgICAgICAgICAgICBzdGFydFZhbHVlOiBkdWVNYXRjaC5pbmRleCArIDEsDQoJICAgICAgICAgICAgZW5kOiBkdWVNYXRjaC5pbmRleCArIGR1ZU1hdGNoWzBdLmxlbmd0aCwNCgkgICAgICAgICAgICB3cmFwcGluZzogImVtb2ppLXNob3J0aGFuZCIsDQoJICAgICAgICB9KTsNCgkgICAgbGV0IGNvbXBsZXRlZE1hdGNoID0gRE9ORV9EQVRFX1JFR0VYLmV4ZWMobGluZSk7DQoJICAgIGlmIChjb21wbGV0ZWRNYXRjaCkNCgkgICAgICAgIHJlc3VsdHMucHVzaCh7DQoJICAgICAgICAgICAga2V5OiAiY29tcGxldGlvbiIsDQoJICAgICAgICAgICAgdmFsdWU6IGNvbXBsZXRlZE1hdGNoWzFdLA0KCSAgICAgICAgICAgIHN0YXJ0OiBjb21wbGV0ZWRNYXRjaC5pbmRleCwNCgkgICAgICAgICAgICBzdGFydFZhbHVlOiBjb21wbGV0ZWRNYXRjaC5pbmRleCArIDEsDQoJICAgICAgICAgICAgZW5kOiBjb21wbGV0ZWRNYXRjaC5pbmRleCArIGNvbXBsZXRlZE1hdGNoWzBdLmxlbmd0aCwNCgkgICAgICAgICAgICB3cmFwcGluZzogImVtb2ppLXNob3J0aGFuZCIsDQoJICAgICAgICB9KTsNCgkgICAgcmV0dXJuIHJlc3VsdHM7DQoJfQoKCS8qKiBBbGwgZXh0cmFjdGVkIG1hcmtkb3duIGZpbGUgbWV0YWRhdGEgb2J0YWluZWQgZnJvbSBhIGZpbGUuICovDQoJY2xhc3MgUGFnZU1ldGFkYXRhIHsNCgkgICAgY29uc3RydWN0b3IocGF0aCwgaW5pdCkgew0KCSAgICAgICAgdGhpcy5wYXRoID0gcGF0aDsNCgkgICAgICAgIHRoaXMuZmllbGRzID0gbmV3IE1hcCgpOw0KCSAgICAgICAgdGhpcy5mcm9udG1hdHRlciA9IHt9Ow0KCSAgICAgICAgdGhpcy50YWdzID0gbmV3IFNldCgpOw0KCSAgICAgICAgdGhpcy5hbGlhc2VzID0gbmV3IFNldCgpOw0KCSAgICAgICAgdGhpcy5saW5rcyA9IFtdOw0KCSAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBpbml0KTsNCgkgICAgICAgIHRoaXMubGlzdHMgPSAodGhpcy5saXN0cyB8fCBbXSkubWFwKGwgPT4gbmV3IExpc3RJdGVtKGwpKTsNCgkgICAgfQ0KCSAgICAvKiogQ2Fub25pY2FsaXplIHJhdyBsaW5rcyBhbmQgb3RoZXIgZGF0YSBpbiBwYXJ0aWFsIGRhdGEgd2l0aCBub3JtYWxpemVycywgcmV0dXJuaW5nIGEgY29tcGxldGVkIG9iamVjdC4gKi8NCgkgICAgc3RhdGljIGNhbm9uaWNhbGl6ZShkYXRhLCBsaW5rTm9ybWFsaXplcikgew0KCSAgICAgICAgLy8gTXV0YXRlIHRoZSBkYXRhIGZvciBub3csIHdoaWNoIGlzIHByb2JhYmx5IGEgYmFkIGlkZWEgYnV0Li4uIGFsbCB3ZWxsLg0KCSAgICAgICAgaWYgKGRhdGEuZnJvbnRtYXR0ZXIpIHsNCgkgICAgICAgICAgICBkYXRhLmZyb250bWF0dGVyID0gVmFsdWVzLm1hcExlYXZlcyhkYXRhLmZyb250bWF0dGVyLCB0ID0+IFZhbHVlcy5pc0xpbmsodCkgPyBsaW5rTm9ybWFsaXplcih0KSA6IHQpOw0KCSAgICAgICAgfQ0KCSAgICAgICAgaWYgKGRhdGEuZmllbGRzKSB7DQoJICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIGRhdGEuZmllbGRzLmVudHJpZXMoKSkgew0KCSAgICAgICAgICAgICAgICBkYXRhLmZpZWxkcy5zZXQoa2V5LCBWYWx1ZXMubWFwTGVhdmVzKHZhbHVlLCB0ID0+IChWYWx1ZXMuaXNMaW5rKHQpID8gbGlua05vcm1hbGl6ZXIodCkgOiB0KSkpOw0KCSAgICAgICAgICAgIH0NCgkgICAgICAgIH0NCgkgICAgICAgIGlmIChkYXRhLmxpc3RzKSB7DQoJICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBkYXRhLmxpc3RzKSB7DQoJICAgICAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBpdGVtLmZpZWxkcy5lbnRyaWVzKCkpIHsNCgkgICAgICAgICAgICAgICAgICAgIGl0ZW0uZmllbGRzLnNldChrZXksIHZhbHVlLm1hcCh4ID0+IFZhbHVlcy5tYXBMZWF2ZXMoeCwgdCA9PiAoVmFsdWVzLmlzTGluayh0KSA/IGxpbmtOb3JtYWxpemVyKHQpIDogdCkpKSk7DQoJICAgICAgICAgICAgICAgIH0NCgkgICAgICAgICAgICB9DQoJICAgICAgICB9DQoJICAgICAgICBpZiAoZGF0YS5saW5rcykgew0KCSAgICAgICAgICAgIGRhdGEubGlua3MgPSBkYXRhLmxpbmtzLm1hcChsID0+IGxpbmtOb3JtYWxpemVyKGwpKTsNCgkgICAgICAgIH0NCgkgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IHVnbHksIGJ1dCBpdCdzIG5vdCBwb3NzaWJsZSB0byBub3JtYWxpemUgb24gdGhlIHdvcmtlciB0aHJlYWQgdGhhdCBkb2VzIHBhcnNpbmcuDQoJICAgICAgICAvLyBUaGUgYmVzdCB3YXkgdG8gaW1wcm92ZSB0aGlzIGlzIHRvIGluc3RlYWQganVzdCBjYW5vbmljYWxpemUgdGhlIGVudGlyZSBkYXRhIG9iamVjdDsgSSBjYW4gdHJ5IHRvDQoJICAgICAgICAvLyBvcHRpbWl6ZSBgVmFsdWVzLm1hcExlYXZlc2AgdG8gb25seSBtdXRhdGUgaWYgaXQgYWN0dWFsbHkgY2hhbmdlcyB0aGluZ3MuDQoJICAgICAgICByZXR1cm4gbmV3IFBhZ2VNZXRhZGF0YShkYXRhLnBhdGgsIGRhdGEpOw0KCSAgICB9DQoJICAgIC8qKiBUaGUgbmFtZSAoYmFzZWQgb24gcGF0aCkgb2YgdGhpcyBmaWxlLiAqLw0KCSAgICBuYW1lKCkgew0KCSAgICAgICAgcmV0dXJuIGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpOw0KCSAgICB9DQoJICAgIC8qKiBUaGUgY29udGFpbmluZyBmb2xkZXIgKGJhc2VkIG9uIHBhdGgpIG9mIHRoaXMgZmlsZS4gKi8NCgkgICAgZm9sZGVyKCkgew0KCSAgICAgICAgcmV0dXJuIGdldFBhcmVudEZvbGRlcih0aGlzLnBhdGgpOw0KCSAgICB9DQoJICAgIC8qKiBUaGUgZXh0ZW5zaW9uIG9mIHRoaXMgZmlsZSAobGlrZWx5ICdtZCcpLiAqLw0KCSAgICBleHRlbnNpb24oKSB7DQoJICAgICAgICByZXR1cm4gZ2V0RXh0ZW5zaW9uKHRoaXMucGF0aCk7DQoJICAgIH0NCgkgICAgLyoqIFJldHVybiBhIHNldCBvZiB0YWdzIEFORCBhbGwgb2YgdGhlaXIgcGFyZW50IHRhZ3MgKHNvICNoZWxsby95ZXMgd291bGQgYmVjb21lICNoZWxsbywgI2hlbGxvL3llcykuICovDQoJICAgIGZ1bGxUYWdzKCkgew0KCSAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBTZXQoKTsNCgkgICAgICAgIGZvciAobGV0IHRhZyBvZiB0aGlzLnRhZ3MpIHsNCgkgICAgICAgICAgICBmb3IgKGxldCBzdWJ0YWcgb2YgZXh0cmFjdFN1YnRhZ3ModGFnKSkNCgkgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChzdWJ0YWcpOw0KCSAgICAgICAgfQ0KCSAgICAgICAgcmV0dXJuIHJlc3VsdDsNCgkgICAgfQ0KCSAgICAvKiogQ29udmVydCBhbGwgbGlua3MgaW4gdGhpcyBmaWxlIHRvIGZpbGUgbGlua3MuICovDQoJICAgIGZpbGVMaW5rcygpIHsNCgkgICAgICAgIGxldCBkaXN0aW5jdFBhdGhzID0gbmV3IFNldCh0aGlzLmxpbmtzLm1hcChsID0+IGwucGF0aCkpOw0KCSAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZGlzdGluY3RQYXRocykubWFwKGwgPT4gTGluay5maWxlKGwpKTsNCgkgICAgfQ0KCSAgICAvKiogTWFwIHRoaXMgbWV0YWRhdGEgdG8gYSBmdWxsIG9iamVjdDsgdXNlcyB0aGUgaW5kZXggZm9yIGFkZGl0aW9uYWwgZGF0YSBsb29rdXBzLiAgKi8NCgkgICAgc2VyaWFsaXplKGluZGV4LCBjYWNoZSkgew0KCSAgICAgICAgLy8gQ29udmVydCBsaXN0IGl0ZW1zIHZpYSB0aGUgY2Fub25pY2FsaXphdGlvbiBjYWNoZS4NCgkgICAgICAgIGxldCByZWFsQ2FjaGUgPSBjYWNoZSAhPT0gbnVsbCAmJiBjYWNoZSAhPT0gdm9pZCAwID8gY2FjaGUgOiBuZXcgTGlzdFNlcmlhbGl6YXRpb25DYWNoZSh0aGlzLmxpc3RzKTsNCgkgICAgICAgIGxldCByZXN1bHQgPSB7DQoJICAgICAgICAgICAgZmlsZTogew0KCSAgICAgICAgICAgICAgICBwYXRoOiB0aGlzLnBhdGgsDQoJICAgICAgICAgICAgICAgIGZvbGRlcjogdGhpcy5mb2xkZXIoKSwNCgkgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lKCksDQoJICAgICAgICAgICAgICAgIGxpbms6IExpbmsuZmlsZSh0aGlzLnBhdGgpLA0KCSAgICAgICAgICAgICAgICBvdXRsaW5rczogdGhpcy5maWxlTGlua3MoKSwNCgkgICAgICAgICAgICAgICAgaW5saW5rczogQXJyYXkuZnJvbShpbmRleC5saW5rcy5nZXRJbnZlcnNlKHRoaXMucGF0aCkpLm1hcChsID0+IExpbmsuZmlsZShsKSksDQoJICAgICAgICAgICAgICAgIGV0YWdzOiBBcnJheS5mcm9tKHRoaXMudGFncyksDQoJICAgICAgICAgICAgICAgIHRhZ3M6IEFycmF5LmZyb20odGhpcy5mdWxsVGFncygpKSwNCgkgICAgICAgICAgICAgICAgYWxpYXNlczogQXJyYXkuZnJvbSh0aGlzLmFsaWFzZXMpLA0KCSAgICAgICAgICAgICAgICBsaXN0czogdGhpcy5saXN0cy5tYXAobCA9PiByZWFsQ2FjaGUuZ2V0KGwubGluZSkpLA0KCSAgICAgICAgICAgICAgICB0YXNrczogdGhpcy5saXN0cy5maWx0ZXIobCA9PiAhIWwudGFzaykubWFwKGwgPT4gcmVhbENhY2hlLmdldChsLmxpbmUpKSwNCgkgICAgICAgICAgICAgICAgY3RpbWU6IHRoaXMuY3RpbWUsDQoJICAgICAgICAgICAgICAgIGNkYXk6IHN0cmlwVGltZSh0aGlzLmN0aW1lKSwNCgkgICAgICAgICAgICAgICAgbXRpbWU6IHRoaXMubXRpbWUsDQoJICAgICAgICAgICAgICAgIG1kYXk6IHN0cmlwVGltZSh0aGlzLm10aW1lKSwNCgkgICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5zaXplLA0KCSAgICAgICAgICAgICAgICBzdGFycmVkOiBpbmRleC5zdGFycmVkLnN0YXJyZWQodGhpcy5wYXRoKSwNCgkgICAgICAgICAgICAgICAgZnJvbnRtYXR0ZXI6IFZhbHVlcy5kZWVwQ29weSh0aGlzLmZyb250bWF0dGVyKSwNCgkgICAgICAgICAgICAgICAgZXh0OiB0aGlzLmV4dGVuc2lvbigpLA0KCSAgICAgICAgICAgIH0sDQoJICAgICAgICB9Ow0KCSAgICAgICAgLy8gQWRkIHRoZSBjdXJyZW50IGRheSBpZiBwcmVzZW50Lg0KCSAgICAgICAgaWYgKHRoaXMuZGF5KQ0KCSAgICAgICAgICAgIHJlc3VsdC5maWxlLmRheSA9IHRoaXMuZGF5Ow0KCSAgICAgICAgLy8gVGhlbiBhcHBlbmQgdGhlIGNvbXB1dGVkIGZpZWxkcy4NCgkgICAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmZpZWxkcy5lbnRyaWVzKCkpIHsNCgkgICAgICAgICAgICBpZiAoa2V5IGluIHJlc3VsdCkNCgkgICAgICAgICAgICAgICAgY29udGludWU7IC8vIERvbid0IGFsbG93IGZpZWxkcyB0byBvdmVycmlkZSBleGlzdGluZyBrZXlzLg0KCSAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7DQoJICAgICAgICB9DQoJICAgICAgICByZXR1cm4gcmVzdWx0Ow0KCSAgICB9DQoJfQ0KCS8qKiBBIGxpc3QgaXRlbSBpbnNpZGUgb2YgYSBsaXN0LiAqLw0KCWNsYXNzIExpc3RJdGVtIHsNCgkgICAgY29uc3RydWN0b3IoaW5pdCkgew0KCSAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBpbml0KTsNCgkgICAgICAgIHRoaXMuZmllbGRzID0gdGhpcy5maWVsZHMgfHwge307DQoJICAgIH0NCgkgICAgaWQoKSB7DQoJICAgICAgICByZXR1cm4gYCR7dGhpcy5maWxlKCkucGF0aH0tJHt0aGlzLmxpbmV9YDsNCgkgICAgfQ0KCSAgICBmaWxlKCkgew0KCSAgICAgICAgcmV0dXJuIHRoaXMubGluay50b0ZpbGUoKTsNCgkgICAgfQ0KCSAgICBtYXJrZG93bigpIHsNCgkgICAgICAgIGlmICh0aGlzLnRhc2spDQoJICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuc3ltYm9sfSBbJHt0aGlzLnRhc2suY29tcGxldGVkID8gIngiIDogIiAifV0gJHt0aGlzLnRleHR9YDsNCgkgICAgICAgIGVsc2UNCgkgICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5zeW1ib2x9ICR7dGhpcy50ZXh0fWA7DQoJICAgIH0NCgkgICAgY3JlYXRlZCgpIHsNCgkgICAgICAgIHZhciBfYSwgX2IsIF9jOw0KCSAgICAgICAgcmV0dXJuIChfYyA9ICgoX2IgPSAoX2EgPSB0aGlzLmZpZWxkcy5nZXQoImNyZWF0ZWQiKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5maWVsZHMuZ2V0KCJjdGltZSIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB0aGlzLmZpZWxkcy5nZXQoImNkYXkiKSkpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY1swXTsNCgkgICAgfQ0KCSAgICBkdWUoKSB7DQoJICAgICAgICB2YXIgX2EsIF9iLCBfYzsNCgkgICAgICAgIHJldHVybiAoX2MgPSAoKF9iID0gKF9hID0gdGhpcy5maWVsZHMuZ2V0KCJkdWUiKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5maWVsZHMuZ2V0KCJkdWV0aW1lIikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRoaXMuZmllbGRzLmdldCgiZHVlZGF5IikpKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NbMF07DQoJICAgIH0NCgkgICAgY29tcGxldGVkKCkgew0KCSAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kOw0KCSAgICAgICAgcmV0dXJuIChfZCA9ICgoX2MgPSAoX2IgPSAoX2EgPSB0aGlzLmZpZWxkcy5nZXQoImNvbXBsZXRlZCIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLmZpZWxkcy5nZXQoImNvbXBsZXRpb24iKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdGhpcy5maWVsZHMuZ2V0KCJjb21wdGltZSIpKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiB0aGlzLmZpZWxkcy5nZXQoImNvbXBkYXkiKSkpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZFswXTsNCgkgICAgfQ0KCSAgICAvKiogQ3JlYXRlIGFuIEFQSS1mcmllbmRseSBjb3B5IG9mIHRoaXMgbGlzdCBpdGVtLiBEZS1kdXBsaWNhdGlvbiBpcyBkb25lIHZpYSB0aGUgcHJvdmlkZWQgY2FjaGUuICovDQoJICAgIHNlcmlhbGl6ZShjYWNoZSkgew0KCSAgICAgICAgLy8gTWFwIGNoaWxkcmVuIHRvIHRoZWlyIHNlcmlhbGl6ZWQvZGUtZHVwbGljYXRlZCBlcXVpdmFsZW50cyByaWdodCBhd2F5Lg0KCSAgICAgICAgbGV0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbi5tYXAobCA9PiBjYWNoZS5nZXQobCkpLmZpbHRlcigobCkgPT4gbCAhPT0gdW5kZWZpbmVkKTsNCgkgICAgICAgIGxldCByZXN1bHQgPSB7DQoJICAgICAgICAgICAgc3ltYm9sOiB0aGlzLnN5bWJvbCwNCgkgICAgICAgICAgICBsaW5rOiB0aGlzLmxpbmssDQoJICAgICAgICAgICAgc2VjdGlvbjogdGhpcy5zZWN0aW9uLA0KCSAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dCwNCgkgICAgICAgICAgICB0YWdzOiBBcnJheS5mcm9tKHRoaXMudGFncyksDQoJICAgICAgICAgICAgbGluZTogdGhpcy5saW5lLA0KCSAgICAgICAgICAgIGxpbmVDb3VudDogdGhpcy5saW5lQ291bnQsDQoJICAgICAgICAgICAgbGlzdDogdGhpcy5saXN0LA0KCSAgICAgICAgICAgIHBhdGg6IHRoaXMubGluay5wYXRoLA0KCSAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbiwNCgkgICAgICAgICAgICB0YXNrOiAhIXRoaXMudGFzaywNCgkgICAgICAgICAgICBhbm5vdGF0ZWQ6IHRoaXMuZmllbGRzLnNpemUgPiAwLA0KCSAgICAgICAgICAgIHBvc2l0aW9uOiBWYWx1ZXMuZGVlcENvcHkodGhpcy5wb3NpdGlvbiksDQoJICAgICAgICAgICAgc3VidGFza3M6IGNoaWxkcmVuLA0KCSAgICAgICAgICAgIHJlYWw6ICEhdGhpcy50YXNrLA0KCSAgICAgICAgICAgIGhlYWRlcjogdGhpcy5zZWN0aW9uLCAvLyBAZGVwcmVjYXRlZCwgdXNlICdpdGVtLnNlY3Rpb24nIGluc3RlYWQuDQoJICAgICAgICB9Ow0KCSAgICAgICAgaWYgKHRoaXMucGFyZW50KQ0KCSAgICAgICAgICAgIHJlc3VsdC5wYXJlbnQgPSB0aGlzLnBhcmVudDsNCgkgICAgICAgIGlmICh0aGlzLmJsb2NrSWQpDQoJICAgICAgICAgICAgcmVzdWx0LmJsb2NrSWQgPSB0aGlzLmJsb2NrSWQ7DQoJICAgICAgICBhZGRGaWVsZHModGhpcy5maWVsZHMsIHJlc3VsdCk7DQoJICAgICAgICBpZiAodGhpcy50YXNrKSB7DQoJICAgICAgICAgICAgcmVzdWx0LnN0YXR1cyA9IHRoaXMudGFzay5zdGF0dXM7DQoJICAgICAgICAgICAgcmVzdWx0LmNoZWNrZWQgPSB0aGlzLnRhc2suY2hlY2tlZDsNCgkgICAgICAgICAgICByZXN1bHQuY29tcGxldGVkID0gdGhpcy50YXNrLmNvbXBsZXRlZDsNCgkgICAgICAgICAgICByZXN1bHQuZnVsbHlDb21wbGV0ZWQgPSB0aGlzLnRhc2suZnVsbHlDb21wbGV0ZWQ7DQoJICAgICAgICAgICAgbGV0IGNyZWF0ZWQgPSB0aGlzLmNyZWF0ZWQoKSwgZHVlID0gdGhpcy5kdWUoKSwgY29tcGxldGVkID0gdGhpcy5jb21wbGV0ZWQoKTsNCgkgICAgICAgICAgICBpZiAoY3JlYXRlZCkNCgkgICAgICAgICAgICAgICAgcmVzdWx0LmNyZWF0ZWQgPSBWYWx1ZXMuZGVlcENvcHkoY3JlYXRlZCk7DQoJICAgICAgICAgICAgaWYgKGR1ZSkNCgkgICAgICAgICAgICAgICAgcmVzdWx0LmR1ZSA9IFZhbHVlcy5kZWVwQ29weShkdWUpOw0KCSAgICAgICAgICAgIGlmIChjb21wbGV0ZWQpDQoJICAgICAgICAgICAgICAgIHJlc3VsdC5jb21wbGV0aW9uID0gVmFsdWVzLmRlZXBDb3B5KGNvbXBsZXRlZCk7DQoJICAgICAgICB9DQoJICAgICAgICByZXR1cm4gcmVzdWx0Ow0KCSAgICB9DQoJfQ0KCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KCS8vIENvbnZlcnNpb24gLyBTZXJpYWxpemF0aW9uIFV0aWxpdGllcyAvLw0KCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KCS8qKiBEZS1kdXBsaWNhdGVzIGxpc3QgaXRlbXMgYWNyb3NzIHNlY3Rpb24gbWV0YWRhdGEgYW5kIHBhZ2UgbWV0YWRhdGEuICovDQoJY2xhc3MgTGlzdFNlcmlhbGl6YXRpb25DYWNoZSB7DQoJICAgIGNvbnN0cnVjdG9yKGxpc3RJdGVtcykgew0KCSAgICAgICAgdGhpcy5saXN0SXRlbXMgPSB7fTsNCgkgICAgICAgIHRoaXMuY2FjaGUgPSB7fTsNCgkgICAgICAgIHRoaXMuc2VlbiA9IG5ldyBTZXQoKTsNCgkgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgbGlzdEl0ZW1zKQ0KCSAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zW2l0ZW0ubGluZV0gPSBpdGVtOw0KCSAgICB9DQoJICAgIGdldChsaW5lbm8pIHsNCgkgICAgICAgIGlmIChsaW5lbm8gaW4gdGhpcy5jYWNoZSkNCgkgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZVtsaW5lbm9dOw0KCSAgICAgICAgZWxzZSBpZiAodGhpcy5zZWVuLmhhcyhsaW5lbm8pKSB7DQoJICAgICAgICAgICAgY29uc29sZS5sb2coYERhdGF2aWV3OiBFbmNvdW50ZXJlZCBhIGNpcmN1bGFyIGxpc3QgKGxpbmUgbnVtYmVyICR7bGluZW5vfTsgY2hpbGRyZW4gJHt0aGlzLmxpc3RJdGVtc1tsaW5lbm9dLmNoaWxkcmVuLmpvaW4oIiwgIil9KWApOw0KCSAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7DQoJICAgICAgICB9DQoJICAgICAgICB0aGlzLnNlZW4uYWRkKGxpbmVubyk7DQoJICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5saXN0SXRlbXNbbGluZW5vXS5zZXJpYWxpemUodGhpcyk7DQoJICAgICAgICB0aGlzLmNhY2hlW2xpbmVub10gPSByZXN1bHQ7DQoJICAgICAgICByZXR1cm4gcmVzdWx0Ow0KCSAgICB9DQoJfQ0KCWZ1bmN0aW9uIGFkZEZpZWxkcyhmaWVsZHMsIHRhcmdldCkgew0KCSAgICBmb3IgKGxldCBba2V5LCB2YWx1ZXNdIG9mIGZpZWxkcy5lbnRyaWVzKCkpIHsNCgkgICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0KQ0KCSAgICAgICAgICAgIGNvbnRpbnVlOw0KCSAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZXMubGVuZ3RoID09IDEgPyB2YWx1ZXNbMF0gOiB2YWx1ZXM7DQoJICAgIH0NCgkgICAgcmV0dXJuIHRhcmdldDsNCgl9CgoJLyoqIENvbW1vbiB1dGlsaXRpZXMgZm9yIGV4dHJhY3RpbmcgdGFncywgbGlua3MsIGFuZCBvdGhlciBidXNpbmVzcyBmcm9tIG1ldGFkYXRhLiAqLw0KCWNvbnN0IFBPVEVOVElBTF9UQUdfTUFUQ0hFUiA9IC8jW15ccyw7XC46IVw/JyJgKClcW1xdXHtcfV0rL2dpdTsNCgkvKiogRXh0cmFjdCBhbGwgdGFncyBmcm9tIHRoZSBnaXZlbiBzb3VyY2Ugc3RyaW5nLiAqLw0KCWZ1bmN0aW9uIGV4dHJhY3RUYWdzJDEoc291cmNlKSB7DQoJICAgIGxldCByZXN1bHQgPSBuZXcgU2V0KCk7DQoJICAgIGxldCBtYXRjaGVzID0gc291cmNlLm1hdGNoQWxsKFBPVEVOVElBTF9UQUdfTUFUQ0hFUik7DQoJICAgIGZvciAobGV0IG1hdGNoIG9mIG1hdGNoZXMpIHsNCgkgICAgICAgIGxldCBwYXJzZWQgPSBFWFBSRVNTSU9OLnRhZy5wYXJzZShtYXRjaFswXSk7DQoJICAgICAgICBpZiAocGFyc2VkLnN0YXR1cykNCgkgICAgICAgICAgICByZXN1bHQuYWRkKHBhcnNlZC52YWx1ZSk7DQoJICAgIH0NCgkgICAgcmV0dXJuIHJlc3VsdDsNCgl9CgoJLyoqIEltcG9ydGVyIGZvciBtYXJrZG93biBkb2N1bWVudHMuICovDQoJLyoqIEV4dHJhY3QgbWFya2Rvd24gbWV0YWRhdGEgZnJvbSB0aGUgZ2l2ZW4gT2JzaWRpYW4gbWFya2Rvd24gZmlsZS4gKi8NCglmdW5jdGlvbiBwYXJzZVBhZ2UocGF0aCwgY29udGVudHMsIHN0YXQsIG1ldGFkYXRhKSB7DQoJICAgIGxldCB0YWdzID0gbmV3IFNldCgpOw0KCSAgICBsZXQgYWxpYXNlcyA9IG5ldyBTZXQoKTsNCgkgICAgbGV0IGZpZWxkcyA9IG5ldyBNYXAoKTsNCgkgICAgbGV0IGxpbmtzID0gW107DQoJICAgIC8vIEZpbGUgdGFncywgaW5jbHVkaW5nIGZyb250LW1hdHRlciBhbmQgaW4tZmlsZSB0YWdzLg0KCSAgICAobWV0YWRhdGEudGFncyB8fCBbXSkuZm9yRWFjaCh0ID0+IHRhZ3MuYWRkKHQudGFnLnN0YXJ0c1dpdGgoIiMiKSA/IHQudGFnIDogIiMiICsgdC50YWcpKTsNCgkgICAgLy8gRnJvbnQtbWF0dGVyIGZpbGUgdGFncywgYWxpYXNlcywgQU5EIGZyb250bWF0dGVyIHByb3BlcnRpZXMuDQoJICAgIGlmIChtZXRhZGF0YS5mcm9udG1hdHRlcikgew0KCSAgICAgICAgZm9yIChsZXQgdGFnIG9mIGV4dHJhY3RUYWdzKG1ldGFkYXRhLmZyb250bWF0dGVyKSkgew0KCSAgICAgICAgICAgIGlmICghdGFnLnN0YXJ0c1dpdGgoIiMiKSkNCgkgICAgICAgICAgICAgICAgdGFnID0gIiMiICsgdGFnOw0KCSAgICAgICAgICAgIHRhZ3MuYWRkKHRhZyk7DQoJICAgICAgICB9DQoJICAgICAgICBmb3IgKGxldCBhbGlhcyBvZiBleHRyYWN0QWxpYXNlcyhtZXRhZGF0YS5mcm9udG1hdHRlcikgfHwgW10pDQoJICAgICAgICAgICAgYWxpYXNlcy5hZGQoYWxpYXMpOw0KCSAgICAgICAgbGV0IGZyb250RmllbGRzID0gcGFyc2VGcm9udG1hdHRlcihtZXRhZGF0YS5mcm9udG1hdHRlcik7DQoJICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZnJvbnRGaWVsZHMpKSB7DQoJICAgICAgICAgICAgaWYgKGtleSA9PSAicG9zaXRpb24iKQ0KCSAgICAgICAgICAgICAgICBjb250aW51ZTsNCgkgICAgICAgICAgICBhZGRJbmxpbmVGaWVsZChrZXksIHZhbHVlLCBmaWVsZHMpOw0KCSAgICAgICAgfQ0KCSAgICB9DQoJICAgIC8vIExpbmtzIGluIG1ldGFkYXRhLg0KCSAgICBmb3IgKGxldCByYXdMaW5rIG9mIG1ldGFkYXRhLmxpbmtzIHx8IFtdKSB7DQoJICAgICAgICBsaW5rcy5wdXNoKExpbmsuaW5mZXIocmF3TGluay5saW5rLCBmYWxzZSwgcmF3TGluay5kaXNwbGF5VGV4dCkpOw0KCSAgICB9DQoJICAgIC8vIEVtYmVkIExpbmtzIGluIG1ldGFkYXRhLg0KCSAgICBmb3IgKGxldCByYXdFbWJlZCBvZiBtZXRhZGF0YS5lbWJlZHMgfHwgW10pIHsNCgkgICAgICAgIGxpbmtzLnB1c2goTGluay5pbmZlcihyYXdFbWJlZC5saW5rLCB0cnVlLCByYXdFbWJlZC5kaXNwbGF5VGV4dCkpOw0KCSAgICB9DQoJICAgIC8vIE1lcmdlIGZyb250bWF0dGVyIGZpZWxkcyB3aXRoIHBhcnNlZCBmaWVsZHMuDQoJICAgIGxldCBtYXJrZG93bkRhdGEgPSBwYXJzZU1hcmtkb3duKHBhdGgsIGNvbnRlbnRzLnNwbGl0KCJcbiIpLCBtZXRhZGF0YSk7DQoJICAgIG1lcmdlRmllbGRHcm91cHMoZmllbGRzLCBtYXJrZG93bkRhdGEuZmllbGRzKTsNCgkgICAgLy8gU3RyaXAgInBvc2l0aW9uIiBmcm9tIGZyb250bWF0dGVyIHNpbmNlIGl0IGlzIE9ic2lkaWFuIGRldGVybWluZWQuDQoJICAgIGNvbnN0IGZyb250bWF0dGVyID0gbWV0YWRhdGEuZnJvbnRtYXR0ZXIgfHwge307DQoJICAgIGlmIChmcm9udG1hdHRlciAmJiAicG9zaXRpb24iIGluIGZyb250bWF0dGVyKQ0KCSAgICAgICAgZGVsZXRlIGZyb250bWF0dGVyWyJwb3NpdGlvbiJdOw0KCSAgICByZXR1cm4gbmV3IFBhZ2VNZXRhZGF0YShwYXRoLCB7DQoJICAgICAgICB0YWdzLA0KCSAgICAgICAgYWxpYXNlcywNCgkgICAgICAgIGxpbmtzLA0KCSAgICAgICAgbGlzdHM6IG1hcmtkb3duRGF0YS5saXN0cywNCgkgICAgICAgIGZpZWxkczogZmluYWxpemVJbmxpbmVGaWVsZHMoZmllbGRzKSwNCgkgICAgICAgIGZyb250bWF0dGVyOiBmcm9udG1hdHRlciwNCgkgICAgICAgIGN0aW1lOiBEYXRlVGltZV8xLmZyb21NaWxsaXMoc3RhdC5jdGltZSksDQoJICAgICAgICBtdGltZTogRGF0ZVRpbWVfMS5mcm9tTWlsbGlzKHN0YXQubXRpbWUpLA0KCSAgICAgICAgc2l6ZTogc3RhdC5zaXplLA0KCSAgICAgICAgZGF5OiBmaW5kRGF0ZShwYXRoLCBmaWVsZHMpLA0KCSAgICB9KTsNCgl9DQoJLyoqIEV4dHJhY3QgdGFncyBpbnRlbGxpZ2VudGx5IGZyb20gZnJvbnRtYXR0ZXIuIEhhbmRsZXMgYXJyYXlzLCBudW1iZXJzLCBhbmQgc3RyaW5ncy4gKi8NCglmdW5jdGlvbiBleHRyYWN0VGFncyhtZXRhZGF0YSkgew0KCSAgICBsZXQgdGFnS2V5cyA9IE9iamVjdC5rZXlzKG1ldGFkYXRhKS5maWx0ZXIodCA9PiB0LnRvTG93ZXJDYXNlKCkgPT0gInRhZ3MiIHx8IHQudG9Mb3dlckNhc2UoKSA9PSAidGFnIik7DQoJICAgIHJldHVybiB0YWdLZXlzDQoJICAgICAgICAubWFwKGsgPT4gc3BsaXRGcm9udG1hdHRlclRhZ09yQWxpYXMobWV0YWRhdGFba10sIC9bLFxzXSsvKSkNCgkgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IHAuY29uY2F0KGMpLCBbXSkNCgkgICAgICAgIC5tYXAoc3RyID0+IChzdHIuc3RhcnRzV2l0aCgiIyIpID8gc3RyIDogIiMiICsgc3RyKSk7DQoJfQ0KCS8qKiBFeHRyYWN0IHRhZ3MgaW50ZWxsaWdlbnRseSBmcm9tIGZyb250bWF0dGVyLiBIYW5kbGVzIGFycmF5cywgbnVtYmVycywgYW5kIHN0cmluZ3MuICAqLw0KCWZ1bmN0aW9uIGV4dHJhY3RBbGlhc2VzKG1ldGFkYXRhKSB7DQoJICAgIGxldCBhbGlhc0tleXMgPSBPYmplY3Qua2V5cyhtZXRhZGF0YSkuZmlsdGVyKHQgPT4gdC50b0xvd2VyQ2FzZSgpID09ICJhbGlhcyIgfHwgdC50b0xvd2VyQ2FzZSgpID09ICJhbGlhc2VzIik7DQoJICAgIHJldHVybiBhbGlhc0tleXMubWFwKGsgPT4gc3BsaXRGcm9udG1hdHRlclRhZ09yQWxpYXMobWV0YWRhdGFba10sIC8sLykpLnJlZHVjZSgocCwgYykgPT4gcC5jb25jYXQoYyksIFtdKTsNCgl9DQoJLyoqIFNwbGl0IGEgZnJvbnRtYXR0ZXIgbGlzdCBpbnRvIHNlcGFyYXRlIGVsZW1lbnRzOyBoYW5kbGVzIGFjdHVhbCBsaXN0cywgY29tbWEgc2VwYXJhdGVkIGxpc3RzLCBhbmQgc2luZ2xlIGVsZW1lbnRzLiAqLw0KCWZ1bmN0aW9uIHNwbGl0RnJvbnRtYXR0ZXJUYWdPckFsaWFzKGRhdGEsIG9uKSB7DQoJICAgIGlmIChkYXRhID09IG51bGwgfHwgZGF0YSA9PSB1bmRlZmluZWQpDQoJICAgICAgICByZXR1cm4gW107DQoJICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7DQoJICAgICAgICByZXR1cm4gZGF0YS5maWx0ZXIocyA9PiAhIXMpDQoJICAgICAgICAgICAgLm1hcChzID0+IHNwbGl0RnJvbnRtYXR0ZXJUYWdPckFsaWFzKHMsIG9uKSkNCgkgICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBwLmNvbmNhdChjKSwgW10pOw0KCSAgICB9DQoJICAgIC8vIEZvcmNlIHRvIGEgc3RyaW5nIHRvIGhhbmRsZSBudW1iZXJzIGFuZCBzbyBvbi4NCgkgICAgcmV0dXJuICgiIiArIGRhdGEpDQoJICAgICAgICAuc3BsaXQob24pDQoJICAgICAgICAuZmlsdGVyKHQgPT4gISF0KQ0KCSAgICAgICAgLm1hcCh0ID0+IHQudHJpbSgpKQ0KCSAgICAgICAgLmZpbHRlcih0ID0+IHQubGVuZ3RoID4gMCk7DQoJfQ0KCS8qKiBQYXJzZSByYXcgKG5ld2xpbmUtZGVsaW1pdGVkKSBtYXJrZG93biwgcmV0dXJuaW5nIGlubGluZSBmaWVsZHMsIGxpc3QgaXRlbXMsIGFuZCBvdGhlciBtZXRhZGF0YS4gKi8NCglmdW5jdGlvbiBwYXJzZU1hcmtkb3duKHBhdGgsIGNvbnRlbnRzLCBtZXRhZGF0YSkgew0KCSAgICBsZXQgZmllbGRzID0gbmV3IE1hcCgpOw0KCSAgICAvLyBFeHRyYWN0IHRhc2sgZGF0YSBhbmQgYXBwZW5kIHRoZSBnbG9iYWwgZGF0YSBleHRyYWN0ZWQgZnJvbSB0aGVtIHRvIG91ciBmaWVsZHMuDQoJICAgIGxldCBbbGlzdHMsIGV4dHJhRGF0YV0gPSBwYXJzZUxpc3RzKHBhdGgsIGNvbnRlbnRzLCBtZXRhZGF0YSk7DQoJICAgIGZvciAobGV0IFtrZXksIHZhbHVlc10gb2YgZXh0cmFEYXRhLmVudHJpZXMoKSkgew0KCSAgICAgICAgaWYgKCFmaWVsZHMuaGFzKGtleSkpDQoJICAgICAgICAgICAgZmllbGRzLnNldChrZXksIHZhbHVlcyk7DQoJICAgICAgICBlbHNlDQoJICAgICAgICAgICAgZmllbGRzLnNldChrZXksIGZpZWxkcy5nZXQoa2V5KS5jb25jYXQodmFsdWVzKSk7DQoJICAgIH0NCgkgICAgLy8gVGhlIE9ic2lkaWFuIG1ldGFkYXRhIGNhY2hlIHdpbGwgdHJhY2sgbGlzdCBlbGVtZW50cyBpbnNpZGUgb2Ygb3RoZXIgZWxlbWVudCBncm91cHMgKGxpa2UgYW5ub3RhdGlvbnMgYW5kDQoJICAgIC8vIGNhbGxvdXRzKS4uLiB0aGlzIG1lYW5zIHdlIG1pZ2h0IHNlZSBtZXRhZGF0YSB0d2ljZSwgc28gc2tpcCB0aGVtIG5vdy4gVmVyeSBhbm5veWluZy4NCgkgICAgY29uc3QgbGlzdExpbmVzVG9Ta2lwID0gbmV3IFNldCgpOw0KCSAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGlzdHMpIHsNCgkgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5saW5lQ291bnQ7IGkrKykNCgkgICAgICAgICAgICBsaXN0TGluZXNUb1NraXAuYWRkKGxpbmUubGluZSArIGkpOw0KCSAgICB9DQoJICAgIC8vIE9ubHkgcGFyc2UgaGVhZGluZyBhbmQgcGFyYWdyYXBoIGVsZW1lbnRzIGZvciBpbmxpbmUgZmllbGRzOyB3ZSB3aWxsIHBhcnNlIGxpc3QgbWV0YWRhdGEgc2VwYXJhdGVseS4NCgkgICAgZm9yIChsZXQgc2VjdGlvbiBvZiBtZXRhZGF0YS5zZWN0aW9ucyB8fCBbXSkgew0KCSAgICAgICAgaWYgKHNlY3Rpb24udHlwZSA9PSAibGlzdCIgfHwgc2VjdGlvbi50eXBlID09ICJydWxpbmciKQ0KCSAgICAgICAgICAgIGNvbnRpbnVlOw0KCSAgICAgICAgZm9yIChsZXQgbGluZW5vID0gc2VjdGlvbi5wb3NpdGlvbi5zdGFydC5saW5lOyBsaW5lbm8gPD0gc2VjdGlvbi5wb3NpdGlvbi5lbmQubGluZTsgbGluZW5vKyspIHsNCgkgICAgICAgICAgICBsZXQgbGluZSA9IGNvbnRlbnRzW2xpbmVub107DQoJICAgICAgICAgICAgaWYgKGxpbmUgPT0gdW5kZWZpbmVkIHx8IGxpbmUgPT0gbnVsbCkNCgkgICAgICAgICAgICAgICAgY29udGludWU7DQoJICAgICAgICAgICAgaWYgKGxpc3RMaW5lc1RvU2tpcC5oYXMobGluZW5vKSkNCgkgICAgICAgICAgICAgICAgY29udGludWU7DQoJICAgICAgICAgICAgLy8gRmFzdCBiYWlsLW91dCBmb3IgbGluZXMgdGhhdCBhcmUgdG9vIGxvbmcgb3IgZG8gbm90IGNvbnRhaW4gJzo6Jy4NCgkgICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPiAyMDQ4IHx8ICFsaW5lLmluY2x1ZGVzKCI6OiIpKQ0KCSAgICAgICAgICAgICAgICBjb250aW51ZTsNCgkgICAgICAgICAgICBsaW5lID0gbGluZS50cmltKCk7DQoJICAgICAgICAgICAgbGV0IGlubGluZUZpZWxkcyA9IGV4dHJhY3RJbmxpbmVGaWVsZHMobGluZSk7DQoJICAgICAgICAgICAgaWYgKGlubGluZUZpZWxkcy5sZW5ndGggPiAwKSB7DQoJICAgICAgICAgICAgICAgIGZvciAobGV0IGlmaWVsZCBvZiBpbmxpbmVGaWVsZHMpDQoJICAgICAgICAgICAgICAgICAgICBhZGRSYXdJbmxpbmVGaWVsZChpZmllbGQsIGZpZWxkcyk7DQoJICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgIGVsc2Ugew0KCSAgICAgICAgICAgICAgICBsZXQgZnVsbExpbmUgPSBleHRyYWN0RnVsbExpbmVGaWVsZChsaW5lKTsNCgkgICAgICAgICAgICAgICAgaWYgKGZ1bGxMaW5lKQ0KCSAgICAgICAgICAgICAgICAgICAgYWRkUmF3SW5saW5lRmllbGQoZnVsbExpbmUsIGZpZWxkcyk7DQoJICAgICAgICAgICAgfQ0KCSAgICAgICAgfQ0KCSAgICB9DQoJICAgIHJldHVybiB7IGZpZWxkcywgbGlzdHMgfTsNCgl9DQoJLy8gVE9ETzogQ29uc2lkZXIgdXNpbmcgYW4gYWN0dWFsIHBhcnNlciBpbiBsZWl1IG9mIGEgbW9yZSBleHBlbnNpdmUgcmVnZXguDQoJY29uc3QgTElTVF9JVEVNX1JFR0VYID0gL15bXHM+XSooXGQrXC58XGQrXCl8XCp8LXxcKylccyooXFsuezAsMX1cXSk/XHMqKC4qKSQvbXU7DQoJLyoqDQoJICogUGFyc2UgbGlzdCBpdGVtcyBmcm9tIHRoZSBwYWdlICsgbWV0YWRhdGEuIFRoaXMgcmVxdWlyZXMgc29tZSBhZGRpdGlvbmFsIHBhcnNpbmcgYWJvdmUgd2hhdGV2ZXIgT2JzaWRpYW4gcHJvdmlkZXMsDQoJICogc2luY2UgT2JzaWRpYW4gb25seSBnaXZlcyBsaW5lIG51bWJlcnMuDQoJICovDQoJZnVuY3Rpb24gcGFyc2VMaXN0cyhwYXRoLCBjb250ZW50LCBtZXRhZGF0YSkgew0KCSAgICB2YXIgX2E7DQoJICAgIGxldCBjYWNoZSA9IHt9Ow0KCSAgICAvLyBQbGFjZSBhbGwgb2YgdGhlIHZhbHVlcyBpbiB0aGUgY2FjaGUgYmVmb3JlIHJlc29sdmluZyBjaGlsZHJlbiAmIG1ldGFkYXRhIHJlbGF0aW9uc2hpcHMuDQoJICAgIGZvciAobGV0IHJhd0VsZW1lbnQgb2YgbWV0YWRhdGEubGlzdEl0ZW1zIHx8IFtdKSB7DQoJICAgICAgICAvLyBNYXRjaCBvbiB0aGUgZmlyc3QgbGluZSB0byBnZXQgdGhlIHN5bWJvbCBhbmQgZmlyc3QgbGluZSBvZiB0ZXh0Lg0KCSAgICAgICAgbGV0IHJhd01hdGNoID0gTElTVF9JVEVNX1JFR0VYLmV4ZWMoY29udGVudFtyYXdFbGVtZW50LnBvc2l0aW9uLnN0YXJ0LmxpbmVdKTsNCgkgICAgICAgIGlmICghcmF3TWF0Y2gpDQoJICAgICAgICAgICAgY29udGludWU7DQoJICAgICAgICAvLyBBbmQgdGhlbiBzdHJpcCB1bm5lY2Vzc2FyeSBzcGFjaW5nIGZyb20gdGhlIHJlbWFpbmluZyBsaW5lcy4NCgkgICAgICAgIGxldCB0ZXh0UGFydHMgPSBbcmF3TWF0Y2hbM11dDQoJICAgICAgICAgICAgLmNvbmNhdChjb250ZW50LnNsaWNlKHJhd0VsZW1lbnQucG9zaXRpb24uc3RhcnQubGluZSArIDEsIHJhd0VsZW1lbnQucG9zaXRpb24uZW5kLmxpbmUgKyAxKSkNCgkgICAgICAgICAgICAubWFwKHQgPT4gdC50cmltKCkpOw0KCSAgICAgICAgbGV0IHRleHRXaXRoTmV3bGluZSA9IHRleHRQYXJ0cy5qb2luKCJcbiIpOw0KCSAgICAgICAgbGV0IHRleHROb05ld2xpbmUgPSB0ZXh0UGFydHMuam9pbigiICIpOw0KCSAgICAgICAgLy8gRmluZCB0aGUgbGlzdCB0aGF0IHdlIGFyZSBhIHBhcnQgb2YgYnkgbGluZS4NCgkgICAgICAgIGxldCBjb250YWluaW5nTGlzdElkID0gKG1ldGFkYXRhLnNlY3Rpb25zIHx8IFtdKS5maW5kSW5kZXgocyA9PiBzLnR5cGUgPT0gImxpc3QiICYmDQoJICAgICAgICAgICAgcy5wb3NpdGlvbi5zdGFydC5saW5lIDw9IHJhd0VsZW1lbnQucG9zaXRpb24uc3RhcnQubGluZSAmJg0KCSAgICAgICAgICAgIHMucG9zaXRpb24uZW5kLmxpbmUgPj0gcmF3RWxlbWVudC5wb3NpdGlvbi5zdGFydC5saW5lKTsNCgkgICAgICAgIC8vIEZpbmQgdGhlIHNlY3Rpb24gd2UgYmVsb25nIHRvIGFzIHdlbGwuDQoJICAgICAgICBsZXQgc2VjdGlvbk5hbWUgPSBmaW5kUHJldmlvdXNIZWFkZXIocmF3RWxlbWVudC5wb3NpdGlvbi5zdGFydC5saW5lLCBtZXRhZGF0YS5oZWFkaW5ncyB8fCBbXSk7DQoJICAgICAgICBsZXQgc2VjdGlvbkxpbmsgPSBzZWN0aW9uTmFtZSA9PT0gdW5kZWZpbmVkID8gTGluay5maWxlKHBhdGgpIDogTGluay5oZWFkZXIocGF0aCwgc2VjdGlvbk5hbWUpOw0KCSAgICAgICAgbGV0IGNsb3Nlc3RMaW5rID0gcmF3RWxlbWVudC5pZCA9PT0gdW5kZWZpbmVkID8gc2VjdGlvbkxpbmsgOiBMaW5rLmJsb2NrKHBhdGgsIHJhd0VsZW1lbnQuaWQpOw0KCSAgICAgICAgLy8gQ29uc3RydWN0IHVuaXZlcnNhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGVsZW1lbnQgKGJlZm9yZSB0YXNrcykuDQoJICAgICAgICBsZXQgaXRlbSA9IG5ldyBMaXN0SXRlbSh7DQoJICAgICAgICAgICAgc3ltYm9sOiByYXdNYXRjaFsxXSwNCgkgICAgICAgICAgICBsaW5rOiBjbG9zZXN0TGluaywNCgkgICAgICAgICAgICBzZWN0aW9uOiBzZWN0aW9uTGluaywNCgkgICAgICAgICAgICB0ZXh0OiB0ZXh0V2l0aE5ld2xpbmUsDQoJICAgICAgICAgICAgdGFnczogZXh0cmFjdFRhZ3MkMSh0ZXh0Tm9OZXdsaW5lKSwNCgkgICAgICAgICAgICBsaW5lOiByYXdFbGVtZW50LnBvc2l0aW9uLnN0YXJ0LmxpbmUsDQoJICAgICAgICAgICAgbGluZUNvdW50OiByYXdFbGVtZW50LnBvc2l0aW9uLmVuZC5saW5lIC0gcmF3RWxlbWVudC5wb3NpdGlvbi5zdGFydC5saW5lICsgMSwNCgkgICAgICAgICAgICBsaXN0OiBjb250YWluaW5nTGlzdElkID09IC0xID8gLTEgOiAobWV0YWRhdGEuc2VjdGlvbnMgfHwgW10pW2NvbnRhaW5pbmdMaXN0SWRdLnBvc2l0aW9uLnN0YXJ0LmxpbmUsDQoJICAgICAgICAgICAgcG9zaXRpb246IHJhd0VsZW1lbnQucG9zaXRpb24sDQoJICAgICAgICAgICAgY2hpbGRyZW46IFtdLA0KCSAgICAgICAgICAgIGJsb2NrSWQ6IHJhd0VsZW1lbnQuaWQsDQoJICAgICAgICB9KTsNCgkgICAgICAgIGlmIChyYXdFbGVtZW50LnBhcmVudCA+PSAwICYmIHJhd0VsZW1lbnQucGFyZW50ICE9IGl0ZW0ubGluZSkNCgkgICAgICAgICAgICBpdGVtLnBhcmVudCA9IHJhd0VsZW1lbnQucGFyZW50Ow0KCSAgICAgICAgLy8gU2V0IHVwIHRoZSBiYXNpYyB0YXNrIGluZm9ybWF0aW9uIGZvciBub3csIHRob3VnaCB3ZSBoYXZlIHRvIHJlY29tcHV0ZSBgZnVsbHlDb21wdXRlZGAgbGF0ZXIuDQoJICAgICAgICBpZiAocmF3RWxlbWVudC50YXNrKSB7DQoJICAgICAgICAgICAgaXRlbS50YXNrID0gew0KCSAgICAgICAgICAgICAgICBzdGF0dXM6IHJhd0VsZW1lbnQudGFzaywNCgkgICAgICAgICAgICAgICAgY2hlY2tlZDogcmF3RWxlbWVudC50YXNrICE9ICIiICYmIHJhd0VsZW1lbnQudGFzayAhPSAiICIsDQoJICAgICAgICAgICAgICAgIGNvbXBsZXRlZDogcmF3RWxlbWVudC50YXNrID09ICJYIiB8fCByYXdFbGVtZW50LnRhc2sgPT0gIngiLA0KCSAgICAgICAgICAgICAgICBmdWxseUNvbXBsZXRlZDogcmF3RWxlbWVudC50YXNrID09ICJYIiB8fCByYXdFbGVtZW50LnRhc2sgPT0gIngiLA0KCSAgICAgICAgICAgIH07DQoJICAgICAgICB9DQoJICAgICAgICAvLyBFeHRyYWN0IGlubGluZSBmaWVsZHM7IGV4dHJhY3QgZnVsbC1saW5lIGZpZWxkcyBvbmx5IGlmIHdlIGFyZSBOT1QgYSB0YXNrLg0KCSAgICAgICAgaXRlbS5maWVsZHMgPSBuZXcgTWFwKCk7DQoJICAgICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGV4dHJhY3RJbmxpbmVGaWVsZHModGV4dE5vTmV3bGluZSwgdHJ1ZSkpDQoJICAgICAgICAgICAgYWRkUmF3SW5saW5lRmllbGQoZWxlbWVudCwgaXRlbS5maWVsZHMpOw0KCSAgICAgICAgaWYgKCFyYXdFbGVtZW50LnRhc2sgJiYgaXRlbS5maWVsZHMuc2l6ZSA9PSAwKSB7DQoJICAgICAgICAgICAgbGV0IGZ1bGxMaW5lID0gZXh0cmFjdEZ1bGxMaW5lRmllbGQodGV4dE5vTmV3bGluZSk7DQoJICAgICAgICAgICAgaWYgKGZ1bGxMaW5lKQ0KCSAgICAgICAgICAgICAgICBhZGRSYXdJbmxpbmVGaWVsZChmdWxsTGluZSwgaXRlbS5maWVsZHMpOw0KCSAgICAgICAgfQ0KCSAgICAgICAgY2FjaGVbaXRlbS5saW5lXSA9IGl0ZW07DQoJICAgIH0NCgkgICAgLy8gVHJlZSB1cGRhdGluZyBwYXNzZXMuIFVwZGF0ZSBjaGlsZCBsaXN0cy4gUHJvcG9nYXRlIG1ldGFkYXRhIHVwIHRvIHBhcmVudCB0YXNrcy4gVXBkYXRlIHRhc2sgYGZ1bGx5Q29tcGxldGVkYC4NCgkgICAgbGV0IGxpdGVyYWxzID0gbmV3IE1hcCgpOw0KCSAgICBmb3IgKGxldCBsaXN0SXRlbSBvZiBPYmplY3QudmFsdWVzKGNhY2hlKSkgew0KCSAgICAgICAgLy8gUGFzcyAxOiBVcGRhdGUgY2hpbGQgbGlzdHMuDQoJICAgICAgICBpZiAobGlzdEl0ZW0ucGFyZW50ICE9PSB1bmRlZmluZWQgJiYgbGlzdEl0ZW0ucGFyZW50IGluIGNhY2hlKSB7DQoJICAgICAgICAgICAgbGV0IHBhcmVudCA9IGNhY2hlW2xpc3RJdGVtLnBhcmVudF07DQoJICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2gobGlzdEl0ZW0ubGluZSk7DQoJICAgICAgICB9DQoJICAgICAgICAvLyBQYXNzIDI6IFByb3BvZ2F0ZSBtZXRhZGF0YSB1cCB0byB0aGUgcGFyZW50IHRhc2sgb3Igcm9vdCBlbGVtZW50Lg0KCSAgICAgICAgaWYgKCFsaXN0SXRlbS50YXNrKSB7DQoJICAgICAgICAgICAgbWVyZ2VGaWVsZEdyb3VwcyhsaXRlcmFscywgbGlzdEl0ZW0uZmllbGRzKTsNCgkgICAgICAgICAgICAvLyBUT0RPIChibGFja3NtaXRoZ3UpOiBUaGUgYmVsb3cgY29kZSBwcm9wZXJseSBwcm9wb2dhdGVzIG1ldGFkYXRhIHVwIHRvIHRoZSBuZWFyZXN0IHRhc2ssIHdoaWNoIGlzIHRoZQ0KCSAgICAgICAgICAgIC8vIG1vcmUgaW50dWl0aXZlIGJlaGF2aW9yLiBGb3Igbm93LCB0aG91Z2gsIHdlIHdpbGwga2VlcCB0aGUgZXhpc3RpbmcgbG9naWMuDQoJICAgICAgICAgICAgLyoNCgkgICAgICAgICAgICBsZXQgcm9vdDogTGlzdEl0ZW0gfCB1bmRlZmluZWQgPSBsaXN0SXRlbTsNCgkgICAgICAgICAgICB3aGlsZSAoISFyb290ICYmICFyb290LnRhc2spIHJvb3QgPSBjYWNoZVtyb290LnBhcmVudCA/PyAtMV07DQoKCSAgICAgICAgICAgIC8vIElmIHRoZSByb290IGlzIG51bGwsIGFwcGVuZCB0aGlzIG1ldGFkYXRhIHRvIHRoZSByb290OyBvdGhlcndpc2UsIGFwcGVuZCB0byB0aGUgdGFzay4NCgkgICAgICAgICAgICBtZXJnZUZpZWxkR3JvdXBzKHJvb3QgPT09IHVuZGVmaW5lZCB8fCByb290ID09IG51bGwgPyBsaXRlcmFscyA6IHJvb3QuZmllbGRzLCBsaXN0SXRlbS5maWVsZHMpOw0KCSAgICAgICAgICAgICovDQoJICAgICAgICB9DQoJICAgICAgICAvLyBQYXNzIDM6IFByb3BvZ2F0ZSBgZnVsbHlDb21wbGV0ZWRgIHVwIHRoZSB0YXNrIHRyZWUuIFRoaXMgaXMgYSBsaXR0bGUgbGVzcyBlZmZpY2llbnQgdGhhbiBqdXN0IGRvaW5nIGEgc2ltcGxlDQoJICAgICAgICAvLyBERlMgdXNpbmcgdGhlIGNoaWxkcmVuIElEcywgYnV0IGl0J3MgcHJvYmFibHkgZmluZS4NCgkgICAgICAgIGlmIChsaXN0SXRlbS50YXNrKSB7DQoJICAgICAgICAgICAgbGV0IGN1cnIgPSBsaXN0SXRlbTsNCgkgICAgICAgICAgICB3aGlsZSAoISFjdXJyKSB7DQoJICAgICAgICAgICAgICAgIGlmIChjdXJyLnRhc2spDQoJICAgICAgICAgICAgICAgICAgICBjdXJyLnRhc2suZnVsbHlDb21wbGV0ZWQgPSBjdXJyLnRhc2suZnVsbHlDb21wbGV0ZWQgJiYgbGlzdEl0ZW0udGFzay5jb21wbGV0ZWQ7DQoJICAgICAgICAgICAgICAgIGN1cnIgPSBjYWNoZVsoX2EgPSBjdXJyLnBhcmVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogLTFdOw0KCSAgICAgICAgICAgIH0NCgkgICAgICAgIH0NCgkgICAgfQ0KCSAgICByZXR1cm4gW09iamVjdC52YWx1ZXMoY2FjaGUpLCBsaXRlcmFsc107DQoJfQ0KCS8qKiBBdHRlbXB0IHRvIGZpbmQgYSBkYXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGFnZSBmcm9tIG1ldGFkYXRhIG9yIGZpbGVuYW1lcy4gKi8NCglmdW5jdGlvbiBmaW5kRGF0ZShmaWxlLCBmaWVsZHMpIHsNCgkgICAgdmFyIF9hLCBfYiwgX2MsIF9kOw0KCSAgICBmb3IgKGxldCBrZXkgb2YgZmllbGRzLmtleXMoKSkgew0KCSAgICAgICAgaWYgKCEoa2V5LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT0gImRhdGUiIHx8IGtleS50b0xvY2FsZUxvd2VyQ2FzZSgpID09ICJkYXkiKSkNCgkgICAgICAgICAgICBjb250aW51ZTsNCgkgICAgICAgIGxldCB2YWx1ZSA9IGZpZWxkcy5nZXQoa2V5KTsNCgkgICAgICAgIGlmIChWYWx1ZXMuaXNEYXRlKHZhbHVlKSkgew0KCSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsNCgkgICAgICAgIH0NCgkgICAgICAgIGVsc2UgaWYgKFZhbHVlcy5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwICYmIFZhbHVlcy5pc0RhdGUodmFsdWVbMF0pKSB7DQoJICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSBpZiAoVmFsdWVzLmlzTGluayh2YWx1ZSkpIHsNCgkgICAgICAgICAgICBsZXQgZGF0ZSA9IChfYyA9IChfYSA9IGV4dHJhY3REYXRlKHZhbHVlLnBhdGgpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBleHRyYWN0RGF0ZSgoX2IgPSB2YWx1ZS5zdWJwYXRoKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAiIikpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGV4dHJhY3REYXRlKChfZCA9IHZhbHVlLmRpc3BsYXkpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6ICIiKTsNCgkgICAgICAgICAgICBpZiAoZGF0ZSkNCgkgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7DQoJICAgICAgICB9DQoJICAgIH0NCgkgICAgcmV0dXJuIGV4dHJhY3REYXRlKGdldEZpbGVUaXRsZShmaWxlKSk7DQoJfQ0KCS8qKiBSZWN1cnNpdmVseSBjb252ZXJ0IGZyb250bWF0dGVyIGludG8gZmllbGRzLiBXZSBoYXZlIHRvIGRhbmNlIGFyb3VuZCBZQU1MIHN0cnVjdHVyZS4gKi8NCglmdW5jdGlvbiBwYXJzZUZyb250bWF0dGVyKHZhbHVlKSB7DQoJICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7DQoJICAgICAgICByZXR1cm4gbnVsbDsNCgkgICAgfQ0KCSAgICBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICJvYmplY3QiKSB7DQoJICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsNCgkgICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107DQoJICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgdmFsdWUpIHsNCgkgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VGcm9udG1hdHRlcihjaGlsZCkpOw0KCSAgICAgICAgICAgIH0NCgkgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSB7DQoJICAgICAgICAgICAgbGV0IG9iamVjdCA9IHZhbHVlOw0KCSAgICAgICAgICAgIGxldCByZXN1bHQgPSB7fTsNCgkgICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gb2JqZWN0KSB7DQoJICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gcGFyc2VGcm9udG1hdHRlcihvYmplY3Rba2V5XSk7DQoJICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQoJICAgICAgICB9DQoJICAgIH0NCgkgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAibnVtYmVyIikgew0KCSAgICAgICAgcmV0dXJuIHZhbHVlOw0KCSAgICB9DQoJICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gImJvb2xlYW4iKSB7DQoJICAgICAgICByZXR1cm4gdmFsdWU7DQoJICAgIH0NCgkgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgew0KCSAgICAgICAgbGV0IGRhdGVQYXJzZSA9IEVYUFJFU1NJT04uZGF0ZS5wYXJzZSh2YWx1ZSk7DQoJICAgICAgICBpZiAoZGF0ZVBhcnNlLnN0YXR1cykNCgkgICAgICAgICAgICByZXR1cm4gZGF0ZVBhcnNlLnZhbHVlOw0KCSAgICAgICAgbGV0IGR1cmF0aW9uUGFyc2UgPSBFWFBSRVNTSU9OLmR1cmF0aW9uLnBhcnNlKHZhbHVlKTsNCgkgICAgICAgIGlmIChkdXJhdGlvblBhcnNlLnN0YXR1cykNCgkgICAgICAgICAgICByZXR1cm4gZHVyYXRpb25QYXJzZS52YWx1ZTsNCgkgICAgICAgIGxldCBsaW5rUGFyc2UgPSBFWFBSRVNTSU9OLmVtYmVkTGluay5wYXJzZSh2YWx1ZSk7DQoJICAgICAgICBpZiAobGlua1BhcnNlLnN0YXR1cykNCgkgICAgICAgICAgICByZXR1cm4gbGlua1BhcnNlLnZhbHVlOw0KCSAgICAgICAgcmV0dXJuIHZhbHVlOw0KCSAgICB9DQoJICAgIC8vIEJhY2t1cCBpZiB3ZSBkb24ndCB1bmRlcnN0YW5kIHRoZSB0eXBlLg0KCSAgICByZXR1cm4gbnVsbDsNCgl9DQoJLyoqIEFkZCBhIHBhcnNlZCBpbmxpbmUgZmllbGQgdG8gdGhlIG91dHB1dCBtYXAuICovDQoJZnVuY3Rpb24gYWRkUmF3SW5saW5lRmllbGQoZmllbGQsIG91dHB1dCkgew0KCSAgICBhZGRJbmxpbmVGaWVsZChmaWVsZC5rZXksIHBhcnNlSW5saW5lVmFsdWUoZmllbGQudmFsdWUpLCBvdXRwdXQpOw0KCX0NCgkvKiogQWRkIGEgcmF3IGlubGluZSBmaWVsZCB0byBhbiBvdXRwdXQgbWFwLCBjYW5vbmljYWxpemluZyBhcyBuZWVkZWQuICovDQoJZnVuY3Rpb24gYWRkSW5saW5lRmllbGQoa2V5LCB2YWx1ZSwgb3V0cHV0KSB7DQoJICAgIHZhciBfYTsNCgkgICAgaWYgKCFvdXRwdXQuaGFzKGtleSkpDQoJICAgICAgICBvdXRwdXQuc2V0KGtleSwgW3ZhbHVlXSk7DQoJICAgIGVsc2UNCgkgICAgICAgIChfYSA9IG91dHB1dC5nZXQoa2V5KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnB1c2godmFsdWUpOw0KCX0NCgkvKiogR2l2ZW4gYSByYXcgbGlzdCBvZiBpbmxpbmUgZmllbGQgdmFsdWVzLCBhZGQgbm9ybWFsaXplZCBrZXlzIGFuZCBzcXVhc2ggdGhlbS4gKi8NCglmdW5jdGlvbiBmaW5hbGl6ZUlubGluZUZpZWxkcyhmaWVsZHMpIHsNCgkgICAgLy8gQ29tcHV0ZSB1bmlxdWUgbm9ybWFsaXplZCBrZXlzICh0aGF0IGRvIG5vdCBvdmVybGFwIHcvIHRoZSBmaWVsZHMpLg0KCSAgICBsZXQgbm9ybWFsaXplZCA9IG5ldyBNYXAoKTsNCgkgICAgZm9yIChsZXQgW2tleSwgdmFsdWVzXSBvZiBmaWVsZHMuZW50cmllcygpKSB7DQoJICAgICAgICBsZXQgbm9ybUtleSA9IGNhbm9uaWNhbGl6ZVZhck5hbWUoa2V5KTsNCgkgICAgICAgIGlmIChub3JtS2V5ID09ICIiIHx8IGZpZWxkcy5oYXMobm9ybUtleSkpDQoJICAgICAgICAgICAgY29udGludWU7DQoJICAgICAgICBpZiAoIW5vcm1hbGl6ZWQuaGFzKG5vcm1LZXkpKQ0KCSAgICAgICAgICAgIG5vcm1hbGl6ZWQuc2V0KG5vcm1LZXksIHZhbHVlcyk7DQoJICAgICAgICBlbHNlDQoJICAgICAgICAgICAgbm9ybWFsaXplZC5zZXQobm9ybUtleSwgbm9ybWFsaXplZC5nZXQobm9ybUtleSkuY29uY2F0KHZhbHVlcykpOw0KCSAgICB9DQoJICAgIC8vIENvbWJpbmUgbm9ybWFsaXplZCArIG5vcm1hbCBrZXlzLg0KCSAgICBsZXQgaW50ZXJpbSA9IG5ldyBNYXAoKTsNCgkgICAgbWVyZ2VGaWVsZEdyb3VwcyhpbnRlcmltLCBmaWVsZHMpOw0KCSAgICBtZXJnZUZpZWxkR3JvdXBzKGludGVyaW0sIG5vcm1hbGl6ZWQpOw0KCSAgICAvLyBBbmQgdGhlbiBmbGF0dGVuIHRoZW0uDQoJICAgIGxldCByZXN1bHQgPSBuZXcgTWFwKCk7DQoJICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBpbnRlcmltLmVudHJpZXMoKSkgew0KCSAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAxKQ0KCSAgICAgICAgICAgIHJlc3VsdC5zZXQoa2V5LCB2YWx1ZVswXSk7DQoJICAgICAgICBlbHNlDQoJICAgICAgICAgICAgcmVzdWx0LnNldChrZXksIHZhbHVlKTsNCgkgICAgfQ0KCSAgICByZXR1cm4gcmVzdWx0Ow0KCX0NCgkvKiogQ29weSBhbGwgZmllbGRzIG9mICdzb3VyY2UnIGludG8gJ3RhcmdldCcuICovDQoJZnVuY3Rpb24gbWVyZ2VGaWVsZEdyb3Vwcyh0YXJnZXQsIHNvdXJjZSkgew0KCSAgICBmb3IgKGxldCBrZXkgb2Ygc291cmNlLmtleXMoKSkgew0KCSAgICAgICAgaWYgKCF0YXJnZXQuaGFzKGtleSkpDQoJICAgICAgICAgICAgdGFyZ2V0LnNldChrZXksIHNvdXJjZS5nZXQoa2V5KSk7DQoJICAgICAgICBlbHNlDQoJICAgICAgICAgICAgdGFyZ2V0LnNldChrZXksIHRhcmdldC5nZXQoa2V5KS5jb25jYXQoc291cmNlLmdldChrZXkpKSk7DQoJICAgIH0NCgl9DQoJLyoqIEZpbmQgdGhlIGhlYWRlciB0aGF0IGlzIG1vc3QgaW1tZWRpYXRlbHkgYWJvdmUgdGhlIGdpdmVuIGxpbmUgbnVtYmVyLiAqLw0KCWZ1bmN0aW9uIGZpbmRQcmV2aW91c0hlYWRlcihsaW5lLCBoZWFkZXJzKSB7DQoJICAgIGlmIChoZWFkZXJzLmxlbmd0aCA9PSAwKQ0KCSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsNCgkgICAgaWYgKGhlYWRlcnNbMF0ucG9zaXRpb24uc3RhcnQubGluZSA+IGxpbmUpDQoJICAgICAgICByZXR1cm4gdW5kZWZpbmVkOw0KCSAgICBsZXQgaW5kZXggPSBoZWFkZXJzLmxlbmd0aCAtIDE7DQoJICAgIHdoaWxlIChpbmRleCA+PSAwICYmIGhlYWRlcnNbaW5kZXhdLnBvc2l0aW9uLnN0YXJ0LmxpbmUgPiBsaW5lKQ0KCSAgICAgICAgaW5kZXgtLTsNCgkgICAgcmV0dXJuIGhlYWRlcnNbaW5kZXhdLmhlYWRpbmc7DQoJfQoKCS8qKiBBY3R1YWwgaW1wb3J0IGltcGxlbWVudGF0aW9uIGJhY2tlbmQuIFRoaXMgbXVzdCByZW1haW4gc2VwYXJhdGUgZnJvbSBgaW1wb3J0LWVudHJ5YCBzaW5jZSBpdCBpcyB1c2VkIHdpdGhvdXQgd2ViIHdvcmtlcnMuICovDQoJZnVuY3Rpb24gcnVuSW1wb3J0KHBhdGgsIGNvbnRlbnRzLCBzdGF0cywgbWV0YWRhdGEpIHsNCgkgICAgcmV0dXJuIHBhcnNlUGFnZShwYXRoLCBjb250ZW50cywgc3RhdHMsIG1ldGFkYXRhKTsNCgl9CgoJLyoqIFNpbXBsaWZpZXMgcGFzc2luZyBkYXRhdmlldyB2YWx1ZXMgYWNyb3NzIHRoZSBKUyB3ZWIgd29ya2VyIGJhcnJpZXIuICovDQoJdmFyIFRyYW5zZmVyYWJsZTsNCgkoZnVuY3Rpb24gKFRyYW5zZmVyYWJsZSkgew0KCSAgICAvKiogQ29udmVydCBhIGxpdGVyYWwgdmFsdWUgdG8gYSBzZXJpYWxpemVyLWZyaWVuZGx5IHRyYW5zZmVyYWJsZSB2YWx1ZS4gKi8NCgkgICAgZnVuY3Rpb24gdHJhbnNmZXJhYmxlKHZhbHVlKSB7DQoJICAgICAgICAvLyBIYW5kbGUgc2ltcGxlIHVuaXZlcnNhbCB0eXBlcyBmaXJzdC4NCgkgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkgew0KCSAgICAgICAgICAgIGxldCBjb3BpZWQgPSBuZXcgTWFwKCk7DQoJICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsXSBvZiB2YWx1ZS5lbnRyaWVzKCkpDQoJICAgICAgICAgICAgICAgIGNvcGllZC5zZXQodHJhbnNmZXJhYmxlKGtleSksIHRyYW5zZmVyYWJsZSh2YWwpKTsNCgkgICAgICAgICAgICByZXR1cm4gY29waWVkOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHsNCgkgICAgICAgICAgICBsZXQgY29waWVkID0gbmV3IFNldCgpOw0KCSAgICAgICAgICAgIGZvciAobGV0IHZhbCBvZiB2YWx1ZSkNCgkgICAgICAgICAgICAgICAgY29waWVkLmFkZCh0cmFuc2ZlcmFibGUodmFsKSk7DQoJICAgICAgICAgICAgcmV0dXJuIGNvcGllZDsNCgkgICAgICAgIH0NCgkgICAgICAgIGxldCB3cmFwcGVkID0gVmFsdWVzLndyYXBWYWx1ZSh2YWx1ZSk7DQoJICAgICAgICBpZiAod3JhcHBlZCA9PT0gdW5kZWZpbmVkKQ0KCSAgICAgICAgICAgIHRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgdHJhbnNmZXJhYmxlIHZhbHVlOiAiICsgdmFsdWUpOw0KCSAgICAgICAgc3dpdGNoICh3cmFwcGVkLnR5cGUpIHsNCgkgICAgICAgICAgICBjYXNlICJudWxsIjoNCgkgICAgICAgICAgICBjYXNlICJudW1iZXIiOg0KCSAgICAgICAgICAgIGNhc2UgInN0cmluZyI6DQoJICAgICAgICAgICAgY2FzZSAiYm9vbGVhbiI6DQoJICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlOw0KCSAgICAgICAgICAgIGNhc2UgImRhdGUiOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gew0KCSAgICAgICAgICAgICAgICAgICAgIl9fX3RyYW5zZmVyLXR5cGUiOiAiZGF0ZSIsDQoJICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJhbnNmZXJhYmxlKHdyYXBwZWQudmFsdWUudG9PYmplY3QoKSksDQoJICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7IHpvbmU6IHdyYXBwZWQudmFsdWUuem9uZU5hbWUgfSwNCgkgICAgICAgICAgICAgICAgfTsNCgkgICAgICAgICAgICBjYXNlICJkdXJhdGlvbiI6DQoJICAgICAgICAgICAgICAgIHJldHVybiB7ICJfX190cmFuc2Zlci10eXBlIjogImR1cmF0aW9uIiwgdmFsdWU6IHRyYW5zZmVyYWJsZSh3cmFwcGVkLnZhbHVlLnRvT2JqZWN0KCkpIH07DQoJICAgICAgICAgICAgY2FzZSAiYXJyYXkiOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5tYXAodiA9PiB0cmFuc2ZlcmFibGUodikpOw0KCSAgICAgICAgICAgIGNhc2UgImxpbmsiOg0KCSAgICAgICAgICAgICAgICByZXR1cm4geyAiX19fdHJhbnNmZXItdHlwZSI6ICJsaW5rIiwgdmFsdWU6IHRyYW5zZmVyYWJsZSh3cmFwcGVkLnZhbHVlLnRvT2JqZWN0KCkpIH07DQoJICAgICAgICAgICAgY2FzZSAib2JqZWN0IjoNCgkgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHt9Ow0KCSAgICAgICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMod3JhcHBlZC52YWx1ZSkpDQoJICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHRyYW5zZmVyYWJsZSh2YWx1ZSk7DQoJICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQoJICAgICAgICB9DQoJICAgIH0NCgkgICAgVHJhbnNmZXJhYmxlLnRyYW5zZmVyYWJsZSA9IHRyYW5zZmVyYWJsZTsNCgkgICAgLyoqIENvbnZlcnQgYSB0cmFuc2ZlcmFibGUgdmFsdWUgYmFjayB0byBhIGxpdGVyYWwgdmFsdWUgd2UgY2FuIHdvcmsgd2l0aC4gKi8NCgkgICAgZnVuY3Rpb24gdmFsdWUodHJhbnNmZXJhYmxlKSB7DQoJICAgICAgICBpZiAodHJhbnNmZXJhYmxlID09PSBudWxsKSB7DQoJICAgICAgICAgICAgcmV0dXJuIG51bGw7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlIGlmICh0cmFuc2ZlcmFibGUgPT09IHVuZGVmaW5lZCkgew0KCSAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlIGlmICh0cmFuc2ZlcmFibGUgaW5zdGFuY2VvZiBNYXApIHsNCgkgICAgICAgICAgICBsZXQgcmVhbCA9IG5ldyBNYXAoKTsNCgkgICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWxdIG9mIHRyYW5zZmVyYWJsZS5lbnRyaWVzKCkpDQoJICAgICAgICAgICAgICAgIHJlYWwuc2V0KHZhbHVlKGtleSksIHZhbHVlKHZhbCkpOw0KCSAgICAgICAgICAgIHJldHVybiByZWFsOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSBpZiAodHJhbnNmZXJhYmxlIGluc3RhbmNlb2YgU2V0KSB7DQoJICAgICAgICAgICAgbGV0IHJlYWwgPSBuZXcgU2V0KCk7DQoJICAgICAgICAgICAgZm9yIChsZXQgdmFsIG9mIHRyYW5zZmVyYWJsZSkNCgkgICAgICAgICAgICAgICAgcmVhbC5hZGQodmFsdWUodmFsKSk7DQoJICAgICAgICAgICAgcmV0dXJuIHJlYWw7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRyYW5zZmVyYWJsZSkpIHsNCgkgICAgICAgICAgICByZXR1cm4gdHJhbnNmZXJhYmxlLm1hcCh2ID0+IHZhbHVlKHYpKTsNCgkgICAgICAgIH0NCgkgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0cmFuc2ZlcmFibGUgPT09ICJvYmplY3QiKSB7DQoJICAgICAgICAgICAgaWYgKCJfX190cmFuc2Zlci10eXBlIiBpbiB0cmFuc2ZlcmFibGUpIHsNCgkgICAgICAgICAgICAgICAgc3dpdGNoICh0cmFuc2ZlcmFibGVbIl9fX3RyYW5zZmVyLXR5cGUiXSkgew0KCSAgICAgICAgICAgICAgICAgICAgY2FzZSAiZGF0ZSI6DQoJICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJhd0RhdGUgPSBEYXRlVGltZV8xLmZyb21PYmplY3QodmFsdWUodHJhbnNmZXJhYmxlLnZhbHVlKSk7DQoJICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGVPcHRzID0gdmFsdWUodHJhbnNmZXJhYmxlLm9wdGlvbnMpOw0KCSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRlT3B0cy56b25lKQ0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdEYXRlLnNldFpvbmUoZGF0ZU9wdHMuem9uZSk7DQoJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhd0RhdGU7DQoJICAgICAgICAgICAgICAgICAgICBjYXNlICJkdXJhdGlvbiI6DQoJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIER1cmF0aW9uXzEuZnJvbU9iamVjdCh2YWx1ZSh0cmFuc2ZlcmFibGUudmFsdWUpKTsNCgkgICAgICAgICAgICAgICAgICAgIGNhc2UgImxpbmsiOg0KCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMaW5rLmZyb21PYmplY3QodmFsdWUodHJhbnNmZXJhYmxlLnZhbHVlKSk7DQoJICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KCSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBVbnJlY29nbml6ZWQgdHJhbnNmZXIgdHlwZSAnJHt0cmFuc2ZlcmFibGVbIl9fX3RyYW5zZmVyLXR5cGUiXX0nYCk7DQoJICAgICAgICAgICAgICAgIH0NCgkgICAgICAgICAgICB9DQoJICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHt9Ow0KCSAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXModHJhbnNmZXJhYmxlKSkNCgkgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZSh2YWwpOw0KCSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQoJICAgICAgICB9DQoJICAgICAgICByZXR1cm4gdHJhbnNmZXJhYmxlOw0KCSAgICB9DQoJICAgIFRyYW5zZmVyYWJsZS52YWx1ZSA9IHZhbHVlOw0KCX0pKFRyYW5zZmVyYWJsZSB8fCAoVHJhbnNmZXJhYmxlID0ge30pKTsKCgkvKiogRW50cnktcG9pbnQgc2NyaXB0IHVzZWQgYnkgdGhlIGluZGV4IGFzIGEgd2ViIHdvcmtlci4gKi8NCgkvKiogQW4gaW1wb3J0IHdoaWNoIGNhbiBmYWlsIGFuZCByYWlzZSBhbiBleGNlcHRpb24sIHdoaWNoIHdpbGwgYmUgY2F1Z2h0IGJ5IHRoZSBoYW5kbGVyLiAqLw0KCWZ1bmN0aW9uIGZhaWxhYmxlSW1wb3J0KHBhdGgsIGNvbnRlbnRzLCBzdGF0LCBtZXRhZGF0YSkgew0KCSAgICBpZiAobWV0YWRhdGEgPT09IHVuZGVmaW5lZCB8fCBtZXRhZGF0YSA9PT0gbnVsbCkgew0KCSAgICAgICAgdGhyb3cgRXJyb3IoYENhbm5vdCBpbmRleCBmaWxlLCBzaW5jZSBpdCBoYXMgbm8gT2JzaWRpYW4gZmlsZSBtZXRhZGF0YS5gKTsNCgkgICAgfQ0KCSAgICByZXR1cm4gcnVuSW1wb3J0KHBhdGgsIGNvbnRlbnRzLCBzdGF0LCBtZXRhZGF0YSk7DQoJfQ0KCW9ubWVzc2FnZSA9IGFzeW5jIChldnQpID0+IHsNCgkgICAgdHJ5IHsNCgkgICAgICAgIGxldCB7IHBhdGgsIGNvbnRlbnRzLCBzdGF0LCBtZXRhZGF0YSB9ID0gZXZ0LmRhdGE7DQoJICAgICAgICBsZXQgcmVzdWx0ID0gZmFpbGFibGVJbXBvcnQocGF0aCwgY29udGVudHMsIHN0YXQsIG1ldGFkYXRhKTsNCgkgICAgICAgIHBvc3RNZXNzYWdlKHsgcGF0aDogZXZ0LmRhdGEucGF0aCwgcmVzdWx0OiBUcmFuc2ZlcmFibGUudHJhbnNmZXJhYmxlKHJlc3VsdCkgfSk7DQoJICAgIH0NCgkgICAgY2F0Y2ggKGVycm9yKSB7DQoJICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7DQoJICAgICAgICBwb3N0TWVzc2FnZSh7DQoJICAgICAgICAgICAgcGF0aDogZXZ0LmRhdGEucGF0aCwNCgkgICAgICAgICAgICByZXN1bHQ6IHsNCgkgICAgICAgICAgICAgICAgJGVycm9yOiBgRmFpbGVkIHRvIGluZGV4IGZpbGU6ICR7ZXZ0LmRhdGEucGF0aH06ICR7ZXJyb3J9YCwNCgkgICAgICAgICAgICB9LA0KCSAgICAgICAgfSk7DQoJICAgIH0NCgl9OwoKfSkoKTsKCg==', null, false); +/* eslint-enable */ + +/** Controls and creates Dataview file importers, allowing for asynchronous loading and parsing of files. */ +/** Multi-threaded file parser which debounces rapid file requests automatically. */ +class FileImporter extends obsidian.Component { + constructor(numWorkers, vault, metadataCache) { + super(); + this.numWorkers = numWorkers; + this.vault = vault; + this.metadataCache = metadataCache; + this.workers = []; + this.busy = []; + this.reloadQueue = []; + this.reloadSet = new Set(); + this.callbacks = new Map(); + for (let index = 0; index < numWorkers; index++) { + let worker = new WorkerFactory({ name: "Dataview Indexer " + (index + 1) }); + worker.onmessage = evt => this.finish(evt.data.path, Transferable.value(evt.data.result), index); + this.workers.push(worker); + this.register(() => worker.terminate()); + this.busy.push(false); + } + } + /** + * Queue the given file for reloading. Multiple reload requests for the same file in a short time period will be de-bounced + * and all be resolved by a single actual file reload. + */ + reload(file) { + let promise = new Promise((resolve, reject) => { + var _a; + if (this.callbacks.has(file.path)) + (_a = this.callbacks.get(file.path)) === null || _a === void 0 ? void 0 : _a.push([resolve, reject]); + else + this.callbacks.set(file.path, [[resolve, reject]]); + }); + // De-bounce repeated requests for the same file. + if (this.reloadSet.has(file.path)) + return promise; + this.reloadSet.add(file.path); + // Immediately run this task if there are available workers; otherwise, add it to the queue. + let workerId = this.nextAvailableWorker(); + if (workerId !== undefined) { + this.send(file, workerId); + } + else { + this.reloadQueue.push(file); + } + return promise; + } + /** Finish the parsing of a file, potentially queueing a new file. */ + finish(path, data, index) { + var _a; + // Cache the callbacks before we do book-keeping. + let calls = [].concat((_a = this.callbacks.get(path)) !== null && _a !== void 0 ? _a : []); + // Book-keeping to clear metadata & allow the file to be re-loaded again. + this.reloadSet.delete(path); + this.callbacks.delete(path); + // Notify the queue this file is available for new work. + this.busy[index] = false; + // Queue a new job onto this worker. + let job = this.reloadQueue.shift(); + if (job !== undefined) + this.send(job, index); + // Resolve promises to let users know this file has finished. + if ("$error" in data) { + for (let [_, reject] of calls) + reject(data["$error"]); + } + else { + for (let [callback, _] of calls) + callback(data); + } + } + /** Send a new task to the given worker ID. */ + send(file, workerId) { + this.busy[workerId] = true; + this.vault.cachedRead(file).then(c => this.workers[workerId].postMessage({ + path: file.path, + contents: c, + stat: file.stat, + metadata: this.metadataCache.getFileCache(file), + })); + } + /** Find the next available, non-busy worker; return undefined if all workers are busy. */ + nextAvailableWorker() { + let index = this.busy.indexOf(false); + return index == -1 ? undefined : index; + } +} + +/** Stores various indices on all files in the vault to make dataview generation fast. */ +/** Aggregate index which has several sub-indices and will initialize all of them. */ +class FullIndex extends obsidian.Component { + /** Construct a new index using the app data and a current data version. */ + constructor(app, indexVersion, onChange) { + super(); + this.app = app; + this.indexVersion = indexVersion; + this.onChange = onChange; + this.initialized = false; + this.vault = app.vault; + this.metadataCache = app.metadataCache; + this.persister = new LocalStorageCache(app.appId || "shared", indexVersion); + this.pages = new Map(); + this.tags = new IndexMap(); + this.etags = new IndexMap(); + this.links = new IndexMap(); + this.revision = 0; + // Handles asynchronous reloading of files on web workers. + this.addChild((this.importer = new FileImporter(2, this.vault, this.metadataCache))); + // Prefix listens to file creation/deletion/rename, and not modifies, so we let it set up it's own listeners. + this.addChild((this.prefix = PrefixIndex.create(this.vault, () => this.touch()))); + // The CSV cache also needs to listen to filesystem events for cache invalidation. + this.addChild((this.csv = new CsvCache(this.vault))); + // The starred cache fetches starred entries semi-regularly via an interval. + this.addChild((this.starred = new StarredCache(this.app, () => this.touch()))); + } + /** Generate a full index from the given vault. */ + static create(app, indexVersion, onChange) { + return new FullIndex(app, indexVersion, onChange); + } + trigger(...args) { + this.metadataCache.trigger("dataview:metadata-change", ...args); + } + /** "Touch" the index, incrementing the revision number and causing downstream views to reload. */ + touch() { + this.revision += 1; + this.onChange(); + } + /** Runs through the whole vault to set up initial file metadata. */ + initialize() { + // The metadata cache is updated on initial file index and file loads. + this.registerEvent(this.metadataCache.on("resolve", file => this.reload(file))); + // Renames do not set off the metadata cache; catch these explicitly. + this.registerEvent(this.vault.on("rename", this.rename, this)); + // File creation does cause a metadata change, but deletes do not. Clear the caches for this. + this.registerEvent(this.vault.on("delete", af => { + if (!(af instanceof obsidian.TFile) || !PathFilters.markdown(af.path)) + return; + let file = af; + this.pages.delete(file.path); + this.tags.delete(file.path); + this.etags.delete(file.path); + this.links.delete(file.path); + this.touch(); + this.trigger("delete", file); + })); + // Asynchronously initialize actual content in the background. + this._initialize(this.vault.getMarkdownFiles()); + } + /** Drops the local storage cache and re-indexes all files; this should generally be used if you expect cache issues. */ + async reinitialize() { + await this.persister.recreate(); + const files = this.vault.getMarkdownFiles(); + const start = Date.now(); + let promises = files.map(file => this.reload(file)); + await Promise.all(promises); + console.log(`Dataview: re-initialized index with ${files.length} files (${(Date.now() - start) / 1000.0}s)`); + } + /** Internal asynchronous initializer. */ + async _initialize(files) { + let reloadStart = Date.now(); + let promises = files.map(l => this.reload(l)); + let results = await Promise.all(promises); + let cached = 0, skipped = 0; + for (let item of results) { + if (item.skipped) { + skipped += 1; + continue; + } + if (item.cached) + cached += 1; + } + this.initialized = true; + this.metadataCache.trigger("dataview:index-ready"); + console.log(`Dataview: all ${files.length} files have been indexed in ${(Date.now() - reloadStart) / 1000.0}s (${cached} cached, ${skipped} skipped).`); + // Drop keys for files which do not exist anymore. + let remaining = await this.persister.synchronize(files.map(l => l.path)); + if (remaining.size > 0) { + console.log(`Dataview: Dropped cache entries for ${remaining.size} deleted files.`); + } + } + rename(file, oldPath) { + if (!(file instanceof obsidian.TFile) || !PathFilters.markdown(file.path)) + return; + if (this.pages.has(oldPath)) { + const oldMeta = this.pages.get(oldPath); + this.pages.delete(oldPath); + if (oldMeta) { + oldMeta.path = file.path; + this.pages.set(file.path, oldMeta); + } + } + this.tags.rename(oldPath, file.path); + this.links.rename(oldPath, file.path); + this.etags.rename(oldPath, file.path); + this.touch(); + this.trigger("rename", file, oldPath); + } + /** Queue a file for reloading; this is done asynchronously in the background and may take a few seconds. */ + async reload(file) { + if (!PathFilters.markdown(file.path)) + return { cached: false, skipped: true }; + // The first load of a file is attempted from persisted cache; subsequent loads just use the importer. + if (this.pages.has(file.path) || this.initialized) { + await this.import(file); + return { cached: false, skipped: false }; + } + else { + // Check the cache for the latest data; if it is out of date or non-existent, then reload. + return this.persister.loadFile(file.path).then(async (cached) => { + if (!cached || cached.time < file.stat.mtime || cached.version != this.indexVersion) { + // This cache value is out of data, reload via the importer and update the cache. + // We will skip files with no active file metadata - they will be caught by a later reload + // via the 'resolve' metadata event. + let fileCache = this.metadataCache.getFileCache(file); + if (fileCache === undefined || fileCache === null) + return { cached: false, skipped: true }; + await this.import(file); + return { cached: false, skipped: false }; + } + else { + // Use the cached data since it is up to date and on the same version. + this.finish(file, cached.data); + return { cached: true, skipped: false }; + } + }); + } + } + /** Import a file directly from disk, skipping the cache. */ + async import(file) { + return this.importer.reload(file).then(r => { + this.finish(file, r); + this.persister.storeFile(file.path, r); + }); + } + /** Finish the reloading of file metadata by adding it to in memory indexes. */ + finish(file, parsed) { + let meta = PageMetadata.canonicalize(parsed, link => { + let realPath = this.metadataCache.getFirstLinkpathDest(link.path, file.path); + if (realPath) + return link.withPath(realPath.path); + else + return link; + }); + this.pages.set(file.path, meta); + this.tags.set(file.path, meta.fullTags()); + this.etags.set(file.path, meta.tags); + this.links.set(file.path, new Set(meta.links.map(l => l.path))); + this.touch(); + this.trigger("update", file); + } +} +/** Indexes files by their full prefix - essentially a simple prefix tree. */ +class PrefixIndex extends obsidian.Component { + constructor(vault, updateRevision) { + super(); + this.vault = vault; + this.updateRevision = updateRevision; + } + static create(vault, updateRevision) { + return new PrefixIndex(vault, updateRevision); + } + *walk(folder, filter) { + for (const file of folder.children) { + if (file instanceof obsidian.TFolder) { + yield* this.walk(file, filter); + } + else if (filter ? filter(file.path) : true) { + yield file.path; + } + } + } + /** Get the list of all files under the given path. */ + get(prefix, filter) { + let folder = this.vault.getAbstractFileByPath(prefix || "/"); + return new Set(folder instanceof obsidian.TFolder ? this.walk(folder, filter) : []); + } + /** Determines if the given path exists in the prefix index. */ + pathExists(path) { + return this.vault.getAbstractFileByPath(path || "/") != null; + } + /** Determines if the given prefix exists in the prefix index. */ + nodeExists(prefix) { + return this.vault.getAbstractFileByPath(prefix || "/") instanceof obsidian.TFolder; + } + /** + * Use the in-memory prefix index to convert a relative path to an absolute one. + */ + resolveRelative(path, origin) { + if (!origin) + return path; + else if (path.startsWith("/")) + return path.substring(1); + let relativePath = getParentFolder(origin) + "/" + path; + if (this.pathExists(relativePath)) + return relativePath; + else + return path; + } +} +/** Simple path filters which filter file types. */ +var PathFilters; +(function (PathFilters) { + function csv(path) { + return path.toLowerCase().endsWith(".csv"); + } + PathFilters.csv = csv; + function markdown(path) { + let lcPath = path.toLowerCase(); + return lcPath.endsWith(".md") || lcPath.endsWith(".markdown"); + } + PathFilters.markdown = markdown; +})(PathFilters || (PathFilters = {})); +/** + * Caches in-use CSVs to make high-frequency reloads (such as actively looking at a document + * that uses CSV) fast. + */ +class CsvCache extends obsidian.Component { + constructor(vault) { + super(); + this.vault = vault; + this.cache = new Map(); + // Force-flush the cache on CSV file deletions or modifications. + this.registerEvent(this.vault.on("modify", file => { + if (file instanceof obsidian.TFile && PathFilters.csv(file.path)) + this.cache.delete(file.path); + })); + this.registerEvent(this.vault.on("delete", file => { + if (file instanceof obsidian.TFile && PathFilters.csv(file.path)) + this.cache.delete(file.path); + })); + } + /** Load a CSV file from the cache, doing a fresh load if it has not been loaded. */ + async get(path) { + // Clear old entries on every fresh load, since the path being loaded may be stale. + this.clearOldEntries(); + let existing = this.cache.get(path); + if (existing) + return Result.success(existing.data); + else { + let value = await this.loadInternal(path); + if (value.successful) + this.cache.set(path, { data: value.value, loadTime: DateTime_1.now() }); + return value; + } + } + /** Do the actual raw loading of a CSV path (which is either local or an HTTP request). */ + async loadInternal(path) { + // Allow http://, https://, and file:// prefixes which use AJAX. + if (path.startsWith("http://") || path.startsWith("https://") || path.startsWith("file://")) { + try { + let result = await fetch(path, { + method: "GET", + mode: "no-cors", + redirect: "follow", + }); + return Result.success(parseCsv(await result.text())); + } + catch (ex) { + return Result.failure("" + ex + "\n\n" + ex.stack); + } + } + // Otherwise, assume it is a fully-qualified file path. + try { + let fileData = await this.vault.adapter.read(path); + return Result.success(parseCsv(fileData)); + } + catch (ex) { + return Result.failure(`Failed to load data from path '${path}'.`); + } + } + /** Clear old entries in the cache (as measured by insertion time). */ + clearOldEntries() { + let currentTime = DateTime_1.now(); + let keysToRemove = new Set(); + for (let [key, value] of this.cache.entries()) { + let entryAge = Math.abs(currentTime.diff(value.loadTime, "seconds").seconds); + if (entryAge > CsvCache.CACHE_EXPIRY_SECONDS) + keysToRemove.add(key); + } + keysToRemove.forEach(key => this.cache.delete(key)); + } +} +CsvCache.CACHE_EXPIRY_SECONDS = 5 * 60; +/** Optional connector to the Obsidian 'Starred' plugin which allows for efficiently querying if a file is starred or not. */ +class StarredCache extends obsidian.Component { + constructor(app, onUpdate) { + super(); + this.app = app; + this.onUpdate = onUpdate; + this.stars = StarredCache.fetch(this.app); + this.registerInterval(window.setInterval(() => this.reload(), StarredCache.REFRESH_INTERVAL)); + } + /** Determines if the given path is starred. */ + starred(path) { + return this.stars.has(path); + } + reload() { + let newStars = StarredCache.fetch(this.app); + if (!setsEqual(this.stars, newStars)) { + this.stars = newStars; + this.onUpdate(); + } + } + /** Fetch all starred files from the stars plugin, if present. */ + static fetch(app) { + var _a, _b, _c, _d; + let items = (_d = (_c = (_b = (_a = app === null || app === void 0 ? void 0 : app.internalPlugins) === null || _a === void 0 ? void 0 : _a.plugins) === null || _b === void 0 ? void 0 : _b.starred) === null || _c === void 0 ? void 0 : _c.instance) === null || _d === void 0 ? void 0 : _d.items; + if (items == undefined) + return new Set(); + return new Set(items.filter((l) => l.type === "file").map(l => l.path)); + } +} +/** How frequently to check for star updates. */ +StarredCache.REFRESH_INTERVAL = 30 * 1000; +/** A generic index which indexes variables of the form key -> value[], allowing both forward and reverse lookups. */ +class IndexMap { + /** Create a new, empty index map. */ + constructor() { + this.map = new Map(); + this.invMap = new Map(); + } + /** Returns all values for the given key. (This is unused except for tests - does it really need to be here?) */ + get(key) { + let result = this.map.get(key); + if (result) { + return new Set(result); + } + else { + return new Set(); + } + } + /** Returns all keys that reference the given key. Mutating the returned set is not allowed. */ + getInverse(value) { + return this.invMap.get(value) || IndexMap.EMPTY_SET; + } + /** Sets the key to the given values; this will delete the old mapping for the key if one was present. */ + set(key, values) { + var _a, _b; + if (!values.size) { + // no need to store if no values + this.delete(key); + return this; + } + let oldValues = this.map.get(key); + if (oldValues) { + for (let value of oldValues) { + // Only delete the ones we're not adding back + if (!values.has(key)) + (_a = this.invMap.get(value)) === null || _a === void 0 ? void 0 : _a.delete(key); + } + } + this.map.set(key, values); + for (let value of values) { + if (!this.invMap.has(value)) + this.invMap.set(value, new Set([key])); + else + (_b = this.invMap.get(value)) === null || _b === void 0 ? void 0 : _b.add(key); + } + return this; + } + /** Clears all values for the given key so they can be re-added. */ + delete(key) { + var _a; + let oldValues = this.map.get(key); + if (!oldValues) + return false; + this.map.delete(key); + for (let value of oldValues) { + (_a = this.invMap.get(value)) === null || _a === void 0 ? void 0 : _a.delete(key); + } + return true; + } + /** Rename all references to the given key to a new value. */ + rename(oldKey, newKey) { + let oldValues = this.map.get(oldKey); + if (!oldValues) + return false; + this.delete(oldKey); + this.set(newKey, oldValues); + return true; + } + /** Clear the entire index. */ + clear() { + this.map.clear(); + this.invMap.clear(); + } +} +IndexMap.EMPTY_SET = Object.freeze(new Set()); + +/** Utility functions for quickly creating fields. */ +var QueryFields; +(function (QueryFields) { + function named(name, field) { + return { name, field }; + } + QueryFields.named = named; + function sortBy(field, dir) { + return { field, direction: dir }; + } + QueryFields.sortBy = sortBy; +})(QueryFields || (QueryFields = {})); + +/** Return a new parser which executes the underlying parser and returns it's raw string representation. */ +function captureRaw(base) { + return parsimmon_umd_min.exports.custom((success, failure) => { + return (input, i) => { + let result = base._(input, i); + if (!result.status) + return result; + return Object.assign({}, result, { value: [result.value, input.substring(i, result.index)] }); + }; + }); +} +/** Strip newlines and excess whitespace out of text. */ +function stripNewlines(text) { + return text + .split(/[\r\n]+/) + .map(t => t.trim()) + .join(""); +} +/** A parsimmon-powered parser-combinator implementation of the query language. */ +const QUERY_LANGUAGE = parsimmon_umd_min.exports.createLanguage({ + // Simple atom parsing, like words, identifiers, numbers. + queryType: q => parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regexp(/TABLE|LIST|TASK|CALENDAR/i)) + .map(str => str.toLowerCase()) + .desc("query type ('TABLE', 'LIST', 'TASK', or 'CALENDAR')"), + explicitNamedField: q => parsimmon_umd_min.exports.seqMap(EXPRESSION.field.skip(parsimmon_umd_min.exports.whitespace), parsimmon_umd_min.exports.regexp(/AS/i).skip(parsimmon_umd_min.exports.whitespace), EXPRESSION.identifier.or(EXPRESSION.string), (field, _as, ident) => QueryFields.named(ident, field)), + namedField: q => parsimmon_umd_min.exports.alt(q.explicitNamedField, captureRaw(EXPRESSION.field).map(([value, text]) => QueryFields.named(stripNewlines(text), value))), + sortField: q => parsimmon_umd_min.exports.seqMap(EXPRESSION.field.skip(parsimmon_umd_min.exports.optWhitespace), parsimmon_umd_min.exports.regexp(/ASCENDING|DESCENDING|ASC|DESC/i).atMost(1), (field, dir) => { + let direction = dir.length == 0 ? "ascending" : dir[0].toLowerCase(); + if (direction == "desc") + direction = "descending"; + if (direction == "asc") + direction = "ascending"; + return { + field: field, + direction: direction, + }; + }), + headerClause: q => q.queryType + .skip(parsimmon_umd_min.exports.whitespace) + .chain(qtype => { + switch (qtype) { + case "table": + return parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/WITHOUT\s+ID/i) + .skip(parsimmon_umd_min.exports.optWhitespace) + .atMost(1), parsimmon_umd_min.exports.sepBy(q.namedField, parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)), (withoutId, fields) => { + return { type: "table", fields, showId: withoutId.length == 0 }; + }); + case "list": + return parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/WITHOUT\s+ID/i) + .skip(parsimmon_umd_min.exports.optWhitespace) + .atMost(1), EXPRESSION.field.atMost(1), (withoutId, format) => { + return { + type: "list", + format: format.length == 1 ? format[0] : undefined, + showId: withoutId.length == 0, + }; + }); + case "task": + return parsimmon_umd_min.exports.succeed({ type: "task" }); + case "calendar": + return parsimmon_umd_min.exports.seqMap(q.namedField, field => { + return { + type: "calendar", + showId: true, + field, + }; + }); + default: + return parsimmon_umd_min.exports.fail(`Unrecognized query type '${qtype}'`); + } + }) + .desc("TABLE or LIST or TASK or CALENDAR"), + fromClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/FROM/i), parsimmon_umd_min.exports.whitespace, EXPRESSION.source, (_1, _2, source) => source), + whereClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/WHERE/i), parsimmon_umd_min.exports.whitespace, EXPRESSION.field, (where, _, field) => { + return { type: "where", clause: field }; + }).desc("WHERE "), + sortByClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/SORT/i), parsimmon_umd_min.exports.whitespace, q.sortField.sepBy1(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)), (sort, _1, fields) => { + return { type: "sort", fields }; + }).desc("SORT field [ASC/DESC]"), + limitClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/LIMIT/i), parsimmon_umd_min.exports.whitespace, EXPRESSION.field, (limit, _1, field) => { + return { type: "limit", amount: field }; + }).desc("LIMIT "), + flattenClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/FLATTEN/i).skip(parsimmon_umd_min.exports.whitespace), q.namedField, (_, field) => { + return { type: "flatten", field }; + }).desc("FLATTEN [AS ]"), + groupByClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/GROUP BY/i).skip(parsimmon_umd_min.exports.whitespace), q.namedField, (_, field) => { + return { type: "group", field }; + }).desc("GROUP BY [AS ]"), + // Full query parsing. + clause: q => parsimmon_umd_min.exports.alt(q.fromClause, q.whereClause, q.sortByClause, q.limitClause, q.groupByClause, q.flattenClause), + query: q => parsimmon_umd_min.exports.seqMap(q.headerClause.trim(parsimmon_umd_min.exports.optWhitespace), q.fromClause.trim(parsimmon_umd_min.exports.optWhitespace).atMost(1), q.clause.trim(parsimmon_umd_min.exports.optWhitespace).many(), (header, from, clauses) => { + return { + header, + source: from.length == 0 ? Sources.folder("") : from[0], + operations: clauses, + settings: DEFAULT_QUERY_SETTINGS, + }; + }), +}); +/** + * Attempt to parse a query from the given query text, returning a string error + * if the parse failed. + */ +function parseQuery(text) { + try { + let query = QUERY_LANGUAGE.query.tryParse(text); + return Result.success(query); + } + catch (error) { + return Result.failure("" + error); + } +} + +/** Collect data matching a source query. */ +/** Find source paths which match the given source. */ +function matchingSourcePaths(source, index, originFile = "") { + var _a; + switch (source.type) { + case "empty": + return Result.success(new Set()); + case "tag": + return Result.success(index.tags.getInverse(source.tag)); + case "csv": + return Result.success(new Set([index.prefix.resolveRelative(source.path, originFile)])); + case "folder": + // Prefer loading from the folder at the given path. + if (index.prefix.nodeExists(source.folder)) + return Result.success(index.prefix.get(source.folder, PathFilters.markdown)); + // But allow for loading individual files if they exist. + if (index.prefix.pathExists(source.folder)) + return Result.success(new Set([source.folder])); + else if (index.prefix.pathExists(source.folder + ".md")) + return Result.success(new Set([source.folder + ".md"])); + // For backwards-compat, return an empty result even if the folder does not exist. + return Result.success(new Set()); + case "link": + let fullPath = (_a = index.metadataCache.getFirstLinkpathDest(source.file, originFile)) === null || _a === void 0 ? void 0 : _a.path; + if (!fullPath) { + // Look in links which includes unresolved links + return Result.success(index.links.getInverse(source.file)); + } + if (source.direction === "incoming") { + // To find all incoming links (i.e., things that link to this), use the index that Obsidian provides. + // TODO: Use an actual index so this isn't a fullscan. + let resolved = index.metadataCache.resolvedLinks; + let incoming = new Set(); + for (let [key, value] of Object.entries(resolved)) { + if (fullPath in value) + incoming.add(key); + } + return Result.success(incoming); + } + else { + let resolved = index.metadataCache.resolvedLinks; + if (!(fullPath in resolved)) + return Result.failure(`Could not find file "${source.file}" during link lookup - does it exist?`); + return Result.success(new Set(Object.keys(index.metadataCache.resolvedLinks[fullPath]))); + } + case "binaryop": + return Result.flatMap2(matchingSourcePaths(source.left, index, originFile), matchingSourcePaths(source.right, index, originFile), (left, right) => { + if (source.op == "&") { + let result = new Set(); + for (let elem of right) { + if (left.has(elem)) + result.add(elem); + } + return Result.success(result); + } + else if (source.op == "|") { + let result = new Set(left); + for (let elem of right) + result.add(elem); + return Result.success(result); + } + else { + return Result.failure(`Unrecognized operator '${source.op}'.`); + } + }); + case "negate": + return matchingSourcePaths(source.child, index, originFile).map(child => { + // TODO: This is obviously very inefficient. Can be improved by complicating the + // return type of this function & optimizing 'and' / 'or'. + let allFiles = new Set(index.vault.getMarkdownFiles().map(f => f.path)); + child.forEach(f => allFiles.delete(f)); + return allFiles; + }); + } +} +/** Convert a path to the data for that path; usually markdown pages, but could also be other file types (like CSV). */ +async function resolvePathData(path, index) { + if (PathFilters.csv(path)) + return resolveCsvData(path, index); + else + return resolveMarkdownData(path, index); +} +// TODO: We shouldn't be doing path normalization here relative to an origin file, +/** Convert a CSV path to the data in the CSV (in dataview format). */ +async function resolveCsvData(path, index) { + let rawData = await index.csv.get(path); + return rawData.map(rows => { + return rows.map((row, index) => { + return { + id: `${path}#${index}`, + data: row, + }; + }); + }); +} +/** Convert a path pointing to a markdown page, into the associated metadata. */ +function resolveMarkdownData(path, index) { + let page = index.pages.get(path); + if (!page) + return Result.success([]); + return Result.success([ + { + id: Link.file(path), + data: page.serialize(index), + }, + ]); +} +/** Resolve a source to the collection of data rows that it matches. */ +async function resolveSource(source, index, originFile = "") { + let paths = matchingSourcePaths(source, index, originFile); + if (!paths.successful) + return Result.failure(paths.error); + let result = []; + for (let path of paths.value) { + let resolved = await resolvePathData(path, index); + if (!resolved.successful) + return resolved; + for (let val of resolved.value) + result.push(val); + } + return Result.success(result); +} + +/** Default function implementations for the expression evaluator. */ +/** + * Allows for the creation of functions that check the number and type of their arguments, and dispatch + * to different implemenations based on the types of the inputs. + */ +class FunctionBuilder { + constructor(name) { + this.name = name; + this.variants = []; + this.vectorized = {}; + } + /** Add a general function variant which accepts any number of arguments of any type. */ + vararg(impl) { + this.variants.push({ args: [], varargs: true, impl }); + return this; + } + /** Add a function variant which takes in a single argument. */ + add1(argType, impl) { + this.variants.push({ + args: [argType], + varargs: false, + impl: (c, ...rest) => impl(rest[0], c), + }); + return this; + } + /** Add a function variant which takes in two typed arguments. */ + add2(arg1, arg2, impl) { + this.variants.push({ + args: [arg1, arg2], + varargs: false, + impl: (c, ...rest) => impl(rest[0], rest[1], c), + }); + return this; + } + /** Add a function variant which takes in three typed arguments. */ + add3(arg1, arg2, arg3, impl) { + this.variants.push({ + args: [arg1, arg2, arg3], + varargs: false, + impl: (c, ...rest) => impl(rest[0], rest[1], rest[2], c), + }); + return this; + } + /** Add vectorized variants which accept the given number of arguments and delegate. */ + vectorize(numArgs, positions) { + this.vectorized[numArgs] = positions; + return this; + } + /** Return a function which checks the number and type of arguments, passing them on to the first matching variant. */ + build() { + let self = (context, ...args) => { + let types = []; + for (let arg of args) { + let argType = Values.typeOf(arg); + if (!argType) + throw Error(`Unrecognized argument type for argument '${arg}'`); + types.push(argType); + } + // Handle vectorization, possibly in multiple fields. + if (this.vectorized[types.length]) { + let vectorizedPositions = this.vectorized[types.length].filter(k => types[k] == "array"); + if (vectorizedPositions.length > 0) { + let minLength = vectorizedPositions + .map(p => args[p].length) + .reduce((p, c) => Math.min(p, c)); + // Call the subfunction for each element in the longest array. + // If you call a vectorized function with different-length arrays, + // the output is limited by the length of the shortest array. + let result = []; + for (let vpos = 0; vpos < minLength; vpos++) { + let subargs = []; + for (let index = 0; index < args.length; index++) { + if (vectorizedPositions.includes(index)) { + let arr = args[index]; + subargs.push(arr[vpos]); + } + else { + subargs.push(args[index]); + } + } + result.push(self(context, ...subargs)); + } + return result; + } + } + outer: for (let variant of this.variants) { + if (variant.varargs) + return variant.impl(context, ...args); + if (variant.args.length != types.length) + continue; + for (let index = 0; index < variant.args.length; index++) { + if (variant.args[index] != "*" && variant.args[index] != types[index]) + continue outer; + } + return variant.impl(context, ...args); + } + throw Error(`No implementation of '${this.name}' found for arguments: ${types.join(", ")}`); + }; + return self; + } +} +/** Utilities for managing function implementations. */ +var Functions; +(function (Functions) { + /** Bind a context to a function implementation, yielding a function which does not need the context argument. */ + function bind(func, context) { + return (...args) => func(context, ...args); + } + Functions.bind = bind; + /** Bind a context to all functions in the given map, yielding a new map of bound functions. */ + function bindAll(funcs, context) { + let result = {}; + for (let [key, func] of Object.entries(funcs)) { + result[key] = Functions.bind(func, context); + } + return result; + } + Functions.bindAll = bindAll; +})(Functions || (Functions = {})); +/** + * Collection of all defined functions; defined here so that they can be called from within dataview, + * and test code. + */ +var DefaultFunctions; +(function (DefaultFunctions) { + /** Compute the length of a data type. */ + DefaultFunctions.length = new FunctionBuilder("length") + .add1("array", a => a.length) + .add1("object", a => Object.keys(a).length) + .add1("string", a => a.length) + .add1("null", _a => 0) + .build(); + /** List constructor function. */ + DefaultFunctions.list = (_context, ...args) => args; + /** Object constructor function. */ + DefaultFunctions.object = (_context, ...args) => { + if (args.length % 2 != 0) + throw Error("object() requires an even number of arguments"); + let result = {}; + for (let index = 0; index < args.length; index += 2) { + let key = args[index]; + if (!Values.isString(key)) + throw Error("keys should be of type string for object(key1, value1, ...)"); + result[key] = args[index + 1]; + } + return result; + }; + /** Internal link constructor function. */ + DefaultFunctions.link = new FunctionBuilder("link") + .add1("string", (a, c) => Link.file(c.linkHandler.normalize(a), false)) + .add1("link", a => a) + .add1("null", _a => null) + .vectorize(1, [0]) + .add2("string", "string", (t, d, c) => Link.file(c.linkHandler.normalize(t), false, d)) + .add3("string", "string", "boolean", (t, d, e, c) => Link.file(c.linkHandler.normalize(t), e, d)) + .add2("link", "string", (t, d) => t.withDisplay(d)) + .add2("null", "*", () => null) + .add2("*", "null", (t, _n, c) => DefaultFunctions.link(c, t)) + .vectorize(2, [0, 1]) + .build(); + /** Embed and un-embed a link. */ + DefaultFunctions.embed = new FunctionBuilder("embed") + .add1("link", l => l.toEmbed()) + .vectorize(1, [0]) + .add2("link", "boolean", (l, e, c) => (e ? l.toEmbed() : l.fromEmbed())) + .add1("null", () => null) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .vectorize(2, [0, 1]) + .build(); + /** External link constructor function. */ + DefaultFunctions.elink = new FunctionBuilder("elink") + .add2("string", "string", (a, d) => { + let elem = document.createElement("a"); + elem.textContent = d; + elem.rel = "noopener"; + elem.target = "_blank"; + elem.classList.add("external-link"); + elem.href = a; + return elem; + }) + .add2("string", "null", (s, _n, c) => DefaultFunctions.elink(c, s, s)) + .add2("null", "*", () => null) + .vectorize(2, [0]) + .add1("string", (a, c) => DefaultFunctions.elink(c, a, a)) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + /** Date constructor function. */ + DefaultFunctions.date = new FunctionBuilder("date") + .add1("string", str => { + let parsedDate = EXPRESSION.datePlus.parse(str); + if (parsedDate.status) + return parsedDate.value; + else + return null; + }) + .add1("date", d => d) + .add1("link", (link, c) => { + var _c, _d; + // Try to parse from the display... + if (link.display) { + let parsedDate = EXPRESSION.date.parse(link.display); + if (parsedDate.status) + return parsedDate.value; + } + // Then try to parse from the path... + let parsedDate = EXPRESSION.date.parse(link.path); + if (parsedDate.status) + return parsedDate.value; + // Then pull it from the file. + let resolved = c.linkHandler.resolve(link.path); + if (resolved && ((_c = resolved === null || resolved === void 0 ? void 0 : resolved.file) === null || _c === void 0 ? void 0 : _c.day)) { + return (_d = resolved === null || resolved === void 0 ? void 0 : resolved.file) === null || _d === void 0 ? void 0 : _d.day; + } + return null; + }) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + /** Duration constructor function. */ + DefaultFunctions.dur = new FunctionBuilder("dur") + .add1("string", str => { + let parsedDur = EXPRESSION.duration.parse(str.trim()); + if (parsedDur.status) + return parsedDur.value; + else + return null; + }) + .add1("duration", d => d) + .add1("null", d => d) + .vectorize(1, [0]) + .build(); + /** Format a date using a luxon/moment-style date format. */ + DefaultFunctions.dateformat = new FunctionBuilder("dateformat") + .add2("date", "string", (date, format) => date.toFormat(format, { locale: currentLocale() })) + .add2("null", "string", (_nul, _format) => null) + .vectorize(2, [0]) + .build(); + DefaultFunctions.localtime = new FunctionBuilder("localtime") + .add1("date", d => d.toLocal()) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + const NUMBER_REGEX = /-?[0-9]+(\.[0-9]+)?/; + /** Number constructor function. */ + DefaultFunctions.number = new FunctionBuilder("number") + .add1("number", a => a) + .add1("string", str => { + let match = NUMBER_REGEX.exec(str); + if (match) + return Number.parseFloat(match[0]); + else + return null; + }) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + /** + * Convert any value to a reasonable internal string representation. Most useful for dates, strings, numbers, and + * so on. + */ + DefaultFunctions.string = new FunctionBuilder("string").add1("*", (a, ctx) => Values.toString(a, ctx.settings)).build(); + DefaultFunctions.round = new FunctionBuilder("round") + .add1("number", n => Math.round(n)) + .add1("null", () => null) + .vectorize(1, [0]) + .add2("number", "number", (n, p) => { + if (p <= 0) + return Math.round(n); + return parseFloat(n.toFixed(p)); + }) + .add2("number", "null", n => Math.round(n)) + .add2("null", "*", () => null) + .vectorize(2, [0]) + .build(); + DefaultFunctions.min = new FunctionBuilder("min") + .add2("*", "null", (a, _n) => a) + .add2("null", "*", (_n, a) => a) + .add2("*", "*", (a, b, ctx) => (Values.compareValue(a, b, ctx.linkHandler.normalize) <= 0 ? a : b)) + .add1("array", (a, ctx) => DefaultFunctions.min(ctx, ...a)) + .vararg((ctx, ...args) => (args.length == 0 ? null : args.reduce((p, c) => DefaultFunctions.min(ctx, p, c)))) + .build(); + DefaultFunctions.max = new FunctionBuilder("max") + .add2("*", "null", (a, _n) => a) + .add2("null", "*", (_n, a) => a) + .add2("*", "*", (a, b, ctx) => (Values.compareValue(a, b, ctx.linkHandler.normalize) > 0 ? a : b)) + .add1("array", (a, ctx) => DefaultFunctions.max(ctx, ...a)) + .vararg((ctx, ...args) => (args.length == 0 ? null : args.reduce((p, c) => DefaultFunctions.max(ctx, p, c)))) + .build(); + DefaultFunctions.minby = new FunctionBuilder("minby") + .add2("array", "function", (arr, func, ctx) => { + if (arr.length == 0) + return null; + let values = arr.map(v => { + return { value: v, mapped: func(ctx, v) }; + }); + let filtered = values.filter(v => !Values.isNull(v.mapped)); + if (filtered.length == 0) + return arr[0]; + return filtered.reduce((p, c) => { + if (Values.compareValue(p.mapped, c.mapped, ctx.linkHandler.normalize) <= 0) + return p; + else + return c; + }).value; + }) + .add2("null", "function", (_arr, _func, _ctx) => null) + .build(); + DefaultFunctions.maxby = new FunctionBuilder("maxby") + .add2("array", "function", (arr, func, ctx) => { + if (arr.length == 0) + return null; + let values = arr.map(v => { + return { value: v, mapped: func(ctx, v) }; + }); + let filtered = values.filter(v => !Values.isNull(v.mapped)); + if (filtered.length == 0) + return arr[0]; + return filtered.reduce((p, c) => { + if (Values.compareValue(p.mapped, c.mapped, ctx.linkHandler.normalize) > 0) + return p; + else + return c; + }).value; + }) + .add2("null", "function", (_arr, _func, _ctx) => null) + .build(); + DefaultFunctions.striptime = new FunctionBuilder("striptime") + .add1("date", d => DateTime_1.fromObject({ year: d.year, month: d.month, day: d.day })) + .add1("null", _n => null) + .vectorize(1, [0]) + .build(); + // Default contains, which looks through data structures recursively. + DefaultFunctions.contains = new FunctionBuilder("contains") + .add2("array", "*", (l, elem, context) => l.some(e => DefaultFunctions.contains(context, e, elem))) + .add2("string", "string", (haystack, needle) => haystack.includes(needle)) + .add2("object", "string", (obj, key) => key in obj) + .add2("*", "*", (elem1, elem2, context) => context.evaluate(Fields.binaryOp(Fields.literal(elem1), "=", Fields.literal(elem2))).orElseThrow()) + .vectorize(2, [1]) + .build(); + // Case insensitive version of contains. + DefaultFunctions.icontains = new FunctionBuilder("icontains") + .add2("array", "*", (l, elem, context) => l.some(e => DefaultFunctions.icontains(context, e, elem))) + .add2("string", "string", (haystack, needle) => haystack.toLocaleLowerCase().includes(needle.toLocaleLowerCase())) + .add2("object", "string", (obj, key) => key in obj) + .add2("*", "*", (elem1, elem2, context) => context.evaluate(Fields.binaryOp(Fields.literal(elem1), "=", Fields.literal(elem2))).orElseThrow()) + .vectorize(2, [1]) + .build(); + // "exact" contains, does not look recursively. + DefaultFunctions.econtains = new FunctionBuilder("econtains") + .add2("array", "*", (l, elem, context) => l.some(e => context.evaluate(Fields.binaryOp(Fields.literal(elem), "=", Fields.literal(e))).orElseThrow())) + .add2("string", "string", (haystack, needle) => haystack.includes(needle)) + .add2("object", "string", (obj, key) => key in obj) + .add2("*", "*", (elem1, elem2, context) => context.evaluate(Fields.binaryOp(Fields.literal(elem1), "=", Fields.literal(elem2))).orElseThrow()) + .vectorize(2, [1]) + .build(); + // Case insensitive contains which looks for exact word matches (i.e., boundry-to-boundry match). + DefaultFunctions.containsword = new FunctionBuilder("containsword") + .add2("string", "string", (hay, needle) => !!hay.match(new RegExp(".*\\b" + escapeRegex(needle) + "\\b.*", "i"))) + .add2("null", "*", (_a, _b) => null) + .add2("*", "null", (_a, _b) => null) + .vectorize(2, [0, 1]) + .build(); + /** Extract 0 or more keys from a given object via indexing. */ + DefaultFunctions.extract = (context, ...args) => { + if (args.length == 0) + return "extract(object, key1, ...) requires at least 1 argument"; + // Manually handle vectorization in the first argument. + let object = args[0]; + if (Values.isArray(object)) + return object.map(v => DefaultFunctions.extract(context, v, ...args.slice(1))); + let result = {}; + for (let index = 1; index < args.length; index++) { + let key = args[index]; + if (!Values.isString(key)) + throw Error("extract(object, key1, ...) must be called with string keys"); + result[key] = context.evaluate(Fields.index(Fields.literal(object), Fields.literal(key))).orElseThrow(); + } + return result; + }; + // Reverse aan array or string. + DefaultFunctions.reverse = new FunctionBuilder("reverse") + .add1("array", l => { + let result = []; + for (let index = l.length - 1; index >= 0; index--) + result.push(l[index]); + return result; + }) + .add1("string", l => { + let result = ""; + for (let c = 0; c < l.length; c++) + result += l[l.length - c - 1]; + return result; + }) + .add1("*", e => e) + .build(); + // Sort an array; if given two arguments, sorts by the key returned. + DefaultFunctions.sort = new FunctionBuilder("sort") + .add1("array", (list, context) => DefaultFunctions.sort(context, list, (_ctx, a) => a)) + .add2("array", "function", (list, key, context) => { + let result = [].concat(list); + result.sort((a, b) => { + let akey = key(context, a); + let bkey = key(context, b); + let le = context + .evaluate(Fields.binaryOp(Fields.literal(akey), "<", Fields.literal(bkey))) + .orElseThrow(); + if (Values.isTruthy(le)) + return -1; + let eq = context + .evaluate(Fields.binaryOp(Fields.literal(akey), "=", Fields.literal(bkey))) + .orElseThrow(); + if (Values.isTruthy(eq)) + return 0; + return 1; + }); + return result; + }) + .add1("*", e => e) + .build(); + DefaultFunctions.regexmatch = new FunctionBuilder("regexmatch") + .add2("string", "string", (pattern, field) => { + if (!pattern.startsWith("^") && !pattern.endsWith("$")) + pattern = "^" + pattern + "$"; + return !!field.match(pattern); + }) + .add2("null", "*", (_n, _a) => false) + .add2("*", "null", (_a, _n) => false) + .vectorize(2, [0, 1]) + .build(); + DefaultFunctions.regexreplace = new FunctionBuilder("regexreplace") + .add3("string", "string", "string", (field, pat, rep) => { + try { + let reg = new RegExp(pat, "g"); + return field.replace(reg, rep); + } + catch (ex) { + throw Error(`Invalid regexp '${pat}' in regexreplace`); + } + }) + .add3("null", "*", "*", () => null) + .add3("*", "null", "*", () => null) + .add3("*", "*", "null", () => null) + .vectorize(3, [0, 1, 2]) + .build(); + DefaultFunctions.lower = new FunctionBuilder("lower") + .add1("string", s => s.toLocaleLowerCase()) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + DefaultFunctions.upper = new FunctionBuilder("upper") + .add1("string", s => s.toLocaleUpperCase()) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + DefaultFunctions.replace = new FunctionBuilder("replace") + .add3("string", "string", "string", (str, pat, repr) => str.split(pat).join(repr)) + .add3("null", "*", "*", () => null) + .add3("*", "null", "*", () => null) + .add3("*", "*", "null", () => null) + .vectorize(3, [0, 1, 2]) + .build(); + // Ensure undefined matches turn into empty strings for split/2 and split/3. + const splitImpl = (str, delim, limit) => str.split(new RegExp(delim), limit).map(str => str || ""); + /** Split a string on a given string. */ + DefaultFunctions.split = new FunctionBuilder("split") + .add2("string", "string", (string, splitter) => splitImpl(string, splitter)) + .add3("string", "string", "number", (string, splitter, limit) => splitImpl(string, splitter, limit)) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .add3("*", "*", "null", () => null) + .add3("*", "null", "*", () => null) + .add3("null", "*", "*", () => null) + .build(); + DefaultFunctions.startswith = new FunctionBuilder("startswith") + .add2("string", "string", (str, starting) => str.startsWith(starting)) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .vectorize(2, [0, 1]) + .build(); + DefaultFunctions.endswith = new FunctionBuilder("endswith") + .add2("string", "string", (str, ending) => str.endsWith(ending)) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .vectorize(2, [0, 1]) + .build(); + DefaultFunctions.padleft = new FunctionBuilder("padleft") + .add2("string", "number", (str, len) => str.padStart(len, " ")) + .add3("string", "number", "string", (str, len, padding) => str.padStart(len, padding)) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .add3("null", "*", "*", () => null) + .add3("*", "null", "*", () => null) + .add3("*", "*", "null", () => null) + .vectorize(2, [0, 1]) + .vectorize(3, [0, 1, 2]) + .build(); + DefaultFunctions.padright = new FunctionBuilder("padright") + .add2("string", "number", (str, len) => str.padEnd(len, " ")) + .add3("string", "number", "string", (str, len, padding) => str.padEnd(len, padding)) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .add3("null", "*", "*", () => null) + .add3("*", "null", "*", () => null) + .add3("*", "*", "null", () => null) + .vectorize(2, [0, 1]) + .vectorize(3, [0, 1, 2]) + .build(); + DefaultFunctions.substring = new FunctionBuilder("substring") + .add2("string", "number", (str, start) => str.substring(start)) + .add3("string", "number", "number", (str, start, end) => str.substring(start, end)) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .add3("null", "*", "*", () => null) + .add3("*", "null", "*", () => null) + .add3("*", "*", "null", () => null) + .vectorize(2, [0, 1]) + .vectorize(3, [0, 1, 2]) + .build(); + DefaultFunctions.fdefault = new FunctionBuilder("default") + .add2("*", "*", (v, bk) => (Values.isNull(v) ? bk : v)) + .vectorize(2, [0, 1]) + .build(); + DefaultFunctions.ldefault = new FunctionBuilder("ldefault") + .add2("*", "*", (v, bk) => (Values.isNull(v) ? bk : v)) + .build(); + DefaultFunctions.choice = new FunctionBuilder("choice") + .add3("*", "*", "*", (b, left, right) => (Values.isTruthy(b) ? left : right)) + .vectorize(3, [0]) + .build(); + DefaultFunctions.reduce = new FunctionBuilder("reduce") + .add2("array", "string", (lis, op, context) => { + if (lis.length == 0) + return null; + if (op != "+" && op != "-" && op != "*" && op != "/" && op != "&" && op != "|") + throw Error("reduce(array, op) supports '+', '-', '/', '*', '&', and '|'"); + let value = lis[0]; + for (let index = 1; index < lis.length; index++) { + value = context + .evaluate(Fields.binaryOp(Fields.literal(value), op, Fields.literal(lis[index]))) + .orElseThrow(); + } + return value; + }) + .add2("array", "function", (lis, op, context) => { + if (lis.length == 0) + return null; + let value = lis[0]; + for (let index = 1; index < lis.length; index++) { + // Skip null values to reduce the pain of summing over fields that may or may not exist. + if (Values.isNull(lis[index])) + continue; + value = op(context, value, lis[index]); + } + return value; + }) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .vectorize(2, [1]) + .build(); + DefaultFunctions.sum = new FunctionBuilder("sum") + .add1("array", (arr, c) => DefaultFunctions.reduce(c, arr, "+")) + .add1("*", e => e) + .build(); + DefaultFunctions.product = new FunctionBuilder("product") + .add1("array", (arr, c) => DefaultFunctions.reduce(c, arr, "*")) + .add1("*", e => e) + .build(); + DefaultFunctions.join = new FunctionBuilder("join") + .add2("array", "string", (arr, sep, ctx) => arr.map(e => Values.toString(e, ctx.settings)).join(sep)) + .add2("array", "null", (arr, _s, context) => DefaultFunctions.join(context, arr, ", ")) + .add2("*", "string", (elem, sep, ctx) => Values.toString(elem, ctx.settings)) + .add1("array", (arr, context) => DefaultFunctions.join(context, arr, ", ")) + .add1("*", (e, ctx) => Values.toString(e, ctx.settings)) + .vectorize(2, [1]) + .build(); + DefaultFunctions.any = new FunctionBuilder("any") + .add1("array", arr => arr.some(v => Values.isTruthy(v))) + .add2("array", "function", (arr, f, ctx) => arr.some(v => Values.isTruthy(f(ctx, v)))) + .vararg((_ctx, ...args) => args.some(v => Values.isTruthy(v))) + .build(); + DefaultFunctions.all = new FunctionBuilder("all") + .add1("array", arr => arr.every(v => Values.isTruthy(v))) + .add2("array", "function", (arr, f, ctx) => arr.every(v => Values.isTruthy(f(ctx, v)))) + .vararg((_ctx, ...args) => args.every(v => Values.isTruthy(v))) + .build(); + DefaultFunctions.none = new FunctionBuilder("all") + .add1("array", arr => !arr.some(v => Values.isTruthy(v))) + .add2("array", "function", (arr, f, ctx) => !arr.some(v => Values.isTruthy(f(ctx, v)))) + .vararg((_ctx, ...args) => !args.some(v => Values.isTruthy(v))) + .build(); + DefaultFunctions.filter = new FunctionBuilder("filter") + .add2("array", "function", (arr, f, ctx) => arr.filter(v => Values.isTruthy(f(ctx, v)))) + .add2("null", "*", () => null) + .build(); + DefaultFunctions.map = new FunctionBuilder("map") + .add2("array", "function", (arr, f, ctx) => arr.map(v => f(ctx, v))) + .add2("null", "*", () => null) + .build(); + DefaultFunctions.nonnull = new FunctionBuilder("nonnull") + .vararg((_ctx, ...args) => args.filter(v => Values.typeOf(v) != "null")) + .build(); + /** Gets an object containing a link's own properties */ + DefaultFunctions.meta = new FunctionBuilder("meta") + .add1("link", link => { + var _c, _d; + return ({ + display: (_c = link.display) !== null && _c !== void 0 ? _c : null, + embed: link.embed, + path: link.path, + subpath: (_d = link.subpath) !== null && _d !== void 0 ? _d : null, + type: link.type, + }); + }) + .build(); +})(DefaultFunctions || (DefaultFunctions = {})); +/** Default function implementations for the expression evaluator. */ +const DEFAULT_FUNCTIONS = { + // Constructors. + list: DefaultFunctions.list, + array: DefaultFunctions.list, + link: DefaultFunctions.link, + embed: DefaultFunctions.embed, + elink: DefaultFunctions.elink, + date: DefaultFunctions.date, + dur: DefaultFunctions.dur, + dateformat: DefaultFunctions.dateformat, + localtime: DefaultFunctions.localtime, + number: DefaultFunctions.number, + string: DefaultFunctions.string, + object: DefaultFunctions.object, + // Math Operations. + round: DefaultFunctions.round, + min: DefaultFunctions.min, + max: DefaultFunctions.max, + minby: DefaultFunctions.minby, + maxby: DefaultFunctions.maxby, + // String operations. + regexreplace: DefaultFunctions.regexreplace, + regexmatch: DefaultFunctions.regexmatch, + replace: DefaultFunctions.replace, + lower: DefaultFunctions.lower, + upper: DefaultFunctions.upper, + split: DefaultFunctions.split, + startswith: DefaultFunctions.startswith, + endswith: DefaultFunctions.endswith, + padleft: DefaultFunctions.padleft, + padright: DefaultFunctions.padright, + substring: DefaultFunctions.substring, + // Date Operations. + striptime: DefaultFunctions.striptime, + // List operations. + length: DefaultFunctions.length, + contains: DefaultFunctions.contains, + icontains: DefaultFunctions.icontains, + econtains: DefaultFunctions.econtains, + containsword: DefaultFunctions.containsword, + reverse: DefaultFunctions.reverse, + sort: DefaultFunctions.sort, + // Aggregation operations like reduce. + reduce: DefaultFunctions.reduce, + join: DefaultFunctions.join, + sum: DefaultFunctions.sum, + product: DefaultFunctions.product, + all: DefaultFunctions.all, + any: DefaultFunctions.any, + none: DefaultFunctions.none, + filter: DefaultFunctions.filter, + map: DefaultFunctions.map, + nonnull: DefaultFunctions.nonnull, + // Object/Utility operations. + extract: DefaultFunctions.extract, + default: DefaultFunctions.fdefault, + ldefault: DefaultFunctions.ldefault, + choice: DefaultFunctions.choice, + meta: DefaultFunctions.meta, +}; + +/** Provides a global dispatch table for evaluating binary operators, including comparison. */ +/** Provides implementations for binary operators on two types using a registry. */ +class BinaryOpHandler { + constructor() { + this.map = new Map(); + } + static create() { + return new BinaryOpHandler(); + } + register(left, op, right, func) { + this.map.set(BinaryOpHandler.repr(op, left, right), func); + return this; + } + registerComm(left, op, right, func) { + return this.register(left, op, right, func).register(right, op, left, (a, b, ctx) => func(b, a, ctx)); + } + /** Implement a comparison function. */ + compare(type, compare) { + return this.register(type, "<", type, (a, b, ctx) => compare(a, b, ctx) < 0) + .register(type, "<=", type, (a, b, ctx) => compare(a, b, ctx) <= 0) + .register(type, ">", type, (a, b, ctx) => compare(a, b, ctx) > 0) + .register(type, ">=", type, (a, b, ctx) => compare(a, b, ctx) >= 0) + .register(type, "=", type, (a, b, ctx) => compare(a, b, ctx) == 0) + .register(type, "!=", type, (a, b, ctx) => compare(a, b, ctx) != 0); + } + /** Attempt to evaluate the given binary operator on the two literal fields. */ + evaluate(op, left, right, ctx) { + let leftType = Values.typeOf(left); + let rightType = Values.typeOf(right); + if (!leftType) + return Result.failure(`Unrecognized value '${left}'`); + else if (!rightType) + return Result.failure(`Unrecognized value '${right}'`); + let handler = this.map.get(BinaryOpHandler.repr(op, leftType, rightType)); + if (handler) + return Result.success(handler(left, right, ctx)); + // Right-'*' fallback: + let handler2 = this.map.get(BinaryOpHandler.repr(op, leftType, "*")); + if (handler2) + return Result.success(handler2(left, right, ctx)); + // Left-'*' fallback: + let handler3 = this.map.get(BinaryOpHandler.repr(op, "*", rightType)); + if (handler3) + return Result.success(handler3(left, right, ctx)); + // Double '*' fallback. + let handler4 = this.map.get(BinaryOpHandler.repr(op, "*", "*")); + if (handler4) + return Result.success(handler4(left, right, ctx)); + return Result.failure(`No implementation found for '${leftType} ${op} ${rightType}'`); + } + /** Create a string representation of the given triplet for unique lookup in the map. */ + static repr(op, left, right) { + return `${left},${op},${right}`; + } +} +/** Configure and create a binary OP handler with the given parameters. */ +function createBinaryOps(linkNormalizer) { + return (BinaryOpHandler.create() + // TODO: Consider not using a universal comparison function. + .compare("*", (a, b) => Values.compareValue(a, b, linkNormalizer)) + // Global boolean operations. + .register("*", "&", "*", (a, b) => Values.isTruthy(a) && Values.isTruthy(b)) + .register("*", "|", "*", (a, b) => Values.isTruthy(a) || Values.isTruthy(b)) + // Number implementations. + .register("number", "+", "number", (a, b) => a + b) + .register("number", "-", "number", (a, b) => a - b) + .register("number", "*", "number", (a, b) => a * b) + .register("number", "/", "number", (a, b) => a / b) + // String implementations. + .register("string", "+", "*", (a, b, ctx) => a + Values.toString(b, ctx.settings)) + .register("*", "+", "string", (a, b, ctx) => Values.toString(a, ctx.settings) + b) + .registerComm("string", "*", "number", (a, b) => (b < 0 ? "" : a.repeat(b))) + // Date Operations. + .register("date", "-", "date", (a, b) => { + return normalizeDuration(a.diff(b, ["years", "months", "days", "hours", "minutes", "seconds", "milliseconds"])); + }) + .register("date", "-", "duration", (a, b) => a.minus(b)) + .registerComm("date", "+", "duration", (a, b) => a.plus(b)) + // Duration Operations. + .register("duration", "+", "duration", (a, b) => normalizeDuration(a.plus(b))) + .register("duration", "-", "duration", (a, b) => normalizeDuration(a.minus(b))) + .register("duration", "/", "number", (a, b) => normalizeDuration(a.mapUnits(x => x / b))) + .registerComm("duration", "*", "number", (a, b) => normalizeDuration(a.mapUnits(x => x * b))) + // Array operations. + .register("array", "+", "array", (a, b) => [].concat(a).concat(b)) + // Object operations. + .register("object", "+", "object", (a, b) => Object.assign({}, a, b))); +} + +/** Core implementation of the query language evaluation engine. */ +/** + * Evaluation context that expressions can be evaluated in. Includes global state, as well as available functions and a handler + * for binary operators. + */ +class Context { + /** + * Create a new context with the given namespace of globals, as well as optionally with custom binary operator, function, + * and link handlers. + */ + constructor(linkHandler, settings, globals = {}, binaryOps = createBinaryOps(linkHandler.normalize), functions = DEFAULT_FUNCTIONS) { + this.linkHandler = linkHandler; + this.settings = settings; + this.globals = globals; + this.binaryOps = binaryOps; + this.functions = functions; + } + /** Set a global value in this context. */ + set(name, value) { + this.globals[name] = value; + return this; + } + /** Get the value of a global variable by name. Returns null if not present. */ + get(name) { + var _a; + return (_a = this.globals[name]) !== null && _a !== void 0 ? _a : null; + } + /** Try to evaluate an arbitary field in this context, raising an exception on failure. */ + tryEvaluate(field, data = {}) { + return this.evaluate(field, data).orElseThrow(); + } + /** Evaluate an arbitrary field in this context. */ + evaluate(field, data = {}) { + var _a, _b; + switch (field.type) { + case "literal": + return Result.success(field.value); + case "variable": + if (field.name in data) + return Result.success(data[field.name]); + else if (field.name in this.globals) + return Result.success(this.globals[field.name]); + else + return Result.success(null); + case "negated": + return this.evaluate(field.child, data).map(s => !Values.isTruthy(s)); + case "binaryop": + return Result.flatMap2(this.evaluate(field.left, data), this.evaluate(field.right, data), (a, b) => this.binaryOps.evaluate(field.op, a, b, this)); + case "list": + let result = []; + for (let child of field.values) { + let subeval = this.evaluate(child, data); + if (!subeval.successful) + return subeval; + result.push(subeval.value); + } + return Result.success(result); + case "object": + let objResult = {}; + for (let [key, child] of Object.entries(field.values)) { + let subeval = this.evaluate(child, data); + if (!subeval.successful) + return subeval; + objResult[key] = subeval.value; + } + return Result.success(objResult); + case "lambda": + // Just relying on JS to capture 'data' for us implicitly; unsure + // if this is correct thing to do. Could cause wierd behaviors. + return Result.success((ctx, ...args) => { + let copy = Object.assign({}, data); + for (let arg = 0; arg < Math.min(args.length, field.arguments.length); arg++) { + copy[field.arguments[arg]] = args[arg]; + } + return ctx.evaluate(field.value, copy).orElseThrow(); + }); + case "function": + let rawFunc = field.func.type == "variable" + ? Result.success(field.func.name) + : this.evaluate(field.func, data); + if (!rawFunc.successful) + return rawFunc; + let func = rawFunc.value; + let args = []; + for (let arg of field.arguments) { + let resolved = this.evaluate(arg, data); + if (!resolved.successful) + return resolved; + args.push(resolved.value); + } + let call; + if (Values.isFunction(func)) + call = func; + else if (Values.isString(func) && func in this.functions) + call = this.functions[func]; + else if (Values.isString(func)) + return Result.failure(`Unrecognized function name '${func}'`); + else + return Result.failure(`Cannot call type '${Values.typeOf(func)}' as a function`); + try { + return Result.success(call(this, ...args)); + } + catch (e) { + return Result.failure(e.message); + } + case "index": + // TODO: Will move this out to an 'primitives' module and add more content to it. + let literalIndex = field.index.type == "variable" + ? Result.success(field.index.name) + : this.evaluate(field.index, data); + let checkedIndex = literalIndex.flatMap(s => Values.isString(s) || Values.isNumber(s) + ? Result.success(s) + : Result.failure("Can only index with a string, variable, or number")); + if (!checkedIndex.successful) + return checkedIndex; + let index = checkedIndex.value; + let checkedObject = field.object.type == "variable" && field.object.name == "row" + ? Result.success(Object.assign({}, this.globals, data)) + : this.evaluate(field.object, data); + if (!checkedObject.successful) + return checkedObject; + let object = Values.wrapValue(checkedObject.value); + if (!object) + return Result.failure("Unrecognized object to index into: " + object); + switch (object.type) { + case "object": + if (!Values.isString(index)) + return Result.failure('can only index into objects with strings (a.b or a["b"])'); + return Result.success((_a = object.value[index]) !== null && _a !== void 0 ? _a : null); + case "link": + if (!Values.isString(index)) + return Result.failure('can only index into links with strings (a.b or a["b"])'); + let linkValue = this.linkHandler.resolve(object.value.path); + if (Values.isNull(linkValue)) + return Result.success(null); + return Result.success((_b = linkValue[index]) !== null && _b !== void 0 ? _b : null); + case "array": + if (Values.isNumber(index)) { + if (index >= object.value.length || index < 0) + return Result.success(null); + else + return Result.success(object.value[index]); + } + else if (Values.isString(index)) { + let result = []; + for (let value of object.value) { + let next = this.evaluate(Fields.index(Fields.literal(value), Fields.literal(index))); + if (!next.successful) + continue; + result.push(next.value); + } + return Result.success(result); + } + else { + return Result.failure("Array indexing requires either a number (to get a specific element), or a string (to map all elements inside the array)"); + } + case "string": + if (!Values.isNumber(index)) + return Result.failure("string indexing requires a numeric index (string[index])"); + if (index >= object.value.length || index < 0) + return Result.success(null); + return Result.success(object.value[index]); + case "date": + if (!Values.isString(index)) + return Result.failure("date indexing requires a string representing the unit"); + switch (index) { + case "year": + return Result.success(object.value.year); + case "month": + return Result.success(object.value.month); + case "weekyear": + return Result.success(object.value.weekNumber); + case "week": + return Result.success(Math.floor(object.value.day / 7) + 1); + case "weekday": + return Result.success(object.value.weekday); + case "day": + return Result.success(object.value.day); + case "hour": + return Result.success(object.value.hour); + case "minute": + return Result.success(object.value.minute); + case "second": + return Result.success(object.value.second); + case "millisecond": + return Result.success(object.value.millisecond); + default: + return Result.success(null); + } + case "duration": + if (!Values.isString(index)) + return Result.failure("duration indexing requires a string representing the unit"); + switch (index) { + case "year": + case "years": + return Result.success(object.value.shiftTo("years").years); + case "month": + case "months": + return Result.success(object.value.shiftTo("months").months); + case "weeks": + return Result.success(object.value.shiftTo("weeks").weeks); + case "day": + case "days": + return Result.success(object.value.shiftTo("days").days); + case "hour": + case "hours": + return Result.success(object.value.shiftTo("hours").hours); + case "minute": + case "minutes": + return Result.success(object.value.shiftTo("minutes").minutes); + case "second": + case "seconds": + return Result.success(object.value.shiftTo("seconds").seconds); + case "millisecond": + case "milliseconds": + return Result.success(object.value.shiftTo("milliseconds").milliseconds); + default: + return Result.success(null); + } + default: + return Result.success(null); + } + } + } +} + +function iden(x) { + return x; +} +/** Shared execution code which just takes in arbitrary data, runs operations over it, and returns it + per-row errors. */ +function executeCore(rows, context, ops) { + let diagnostics = []; + let identMeaning = { type: "path" }; + let startTime = new Date().getTime(); + for (let op of ops) { + let opStartTime = new Date().getTime(); + let incomingRows = rows.length; + let errors = []; + switch (op.type) { + case "where": + let whereResult = []; + for (let index = 0; index < rows.length; index++) { + let row = rows[index]; + let value = context.evaluate(op.clause, row.data); + if (!value.successful) + errors.push({ index, message: value.error }); + else if (Values.isTruthy(value.value)) + whereResult.push(row); + } + rows = whereResult; + break; + case "sort": + let sortFields = op.fields; + let taggedData = []; + outer: for (let index = 0; index < rows.length; index++) { + let row = rows[index]; + let rowSorts = []; + for (let sIndex = 0; sIndex < sortFields.length; sIndex++) { + let value = context.evaluate(sortFields[sIndex].field, row.data); + if (!value.successful) { + errors.push({ index, message: value.error }); + continue outer; + } + rowSorts.push(value.value); + } + taggedData.push({ data: row, fields: rowSorts }); + } + // Sort rows by the sort fields, and then return the finished result. + taggedData.sort((a, b) => { + for (let index = 0; index < sortFields.length; index++) { + let factor = sortFields[index].direction === "ascending" ? 1 : -1; + let le = context.binaryOps + .evaluate("<", a.fields[index], b.fields[index], context) + .orElse(false); + if (Values.isTruthy(le)) + return factor * -1; + let ge = context.binaryOps + .evaluate(">", a.fields[index], b.fields[index], context) + .orElse(false); + if (Values.isTruthy(ge)) + return factor * 1; + } + return 0; + }); + rows = taggedData.map(v => v.data); + break; + case "limit": + let limiting = context.evaluate(op.amount); + if (!limiting.successful) + return Result.failure("Failed to execute 'limit' statement: " + limiting.error); + if (!Values.isNumber(limiting.value)) + return Result.failure(`Failed to execute 'limit' statement: limit should be a number, but got '${Values.typeOf(limiting.value)}' (${limiting.value})`); + rows = rows.slice(0, limiting.value); + break; + case "group": + let groupData = []; + for (let index = 0; index < rows.length; index++) { + let value = context.evaluate(op.field.field, rows[index].data); + if (!value.successful) { + errors.push({ index, message: value.error }); + continue; + } + groupData.push({ data: rows[index], key: value.value }); + } + // Sort by the key, which we will group on shortly. + groupData.sort((a, b) => { + let le = context.binaryOps.evaluate("<", a.key, b.key, context).orElse(false); + if (Values.isTruthy(le)) + return -1; + let ge = context.binaryOps.evaluate(">", a.key, b.key, context).orElse(false); + if (Values.isTruthy(ge)) + return 1; + return 0; + }); + // Then walk through and find fields that are equal. + let finalGroupData = []; + if (groupData.length > 0) + finalGroupData.push({ + key: groupData[0].key, + rows: [groupData[0].data.data], + [op.field.name]: groupData[0].key, + }); + for (let index = 1; index < groupData.length; index++) { + let curr = groupData[index], prev = groupData[index - 1]; + if (context.binaryOps.evaluate("=", curr.key, prev.key, context).orElse(false)) { + finalGroupData[finalGroupData.length - 1].rows.push(curr.data.data); + } + else { + finalGroupData.push({ + key: curr.key, + rows: [curr.data.data], + [op.field.name]: curr.key, + }); + } + } + rows = finalGroupData.map(d => { + return { id: d.key, data: d }; + }); + identMeaning = { type: "group", name: op.field.name, on: identMeaning }; + break; + case "flatten": + let flattenResult = []; + for (let index = 0; index < rows.length; index++) { + let row = rows[index]; + let value = context.evaluate(op.field.field, row.data); + if (!value.successful) { + errors.push({ index, message: value.error }); + continue; + } + let datapoints = Values.isArray(value.value) ? value.value : [value.value]; + for (let v of datapoints) { + let copy = Values.deepCopy(row); + copy.data[op.field.name] = v; + flattenResult.push(copy); + } + } + rows = flattenResult; + if (identMeaning.type == "group" && identMeaning.name == op.field.name) + identMeaning = identMeaning.on; + break; + default: + return Result.failure("Unrecognized query operation '" + op.type + "'"); + } + if (errors.length >= incomingRows && incomingRows > 0) { + return Result.failure(`Every row during operation '${op.type}' failed with an error; first ${Math.min(3, errors.length)}:\n + ${errors + .slice(0, 3) + .map(d => "- " + d.message) + .join("\n")}`); + } + diagnostics.push({ + incomingRows, + errors, + outgoingRows: rows.length, + timeMs: new Date().getTime() - opStartTime, + }); + } + return Result.success({ + data: rows, + idMeaning: identMeaning, + ops, + diagnostics, + timeMs: new Date().getTime() - startTime, + }); +} +/** Expanded version of executeCore which adds an additional "extraction" step to the pipeline. */ +function executeCoreExtract(rows, context, ops, fields) { + let internal = executeCore(rows, context, ops); + if (!internal.successful) + return internal; + let core = internal.value; + let startTime = new Date().getTime(); + let errors = []; + let res = []; + outer: for (let index = 0; index < core.data.length; index++) { + let page = { id: core.data[index].id, data: {} }; + for (let [name, field] of Object.entries(fields)) { + let value = context.evaluate(field, core.data[index].data); + if (!value.successful) { + errors.push({ index: index, message: value.error }); + continue outer; + } + page.data[name] = value.value; + } + res.push(page); + } + if (errors.length >= core.data.length && core.data.length > 0) { + return Result.failure(`Every row during final data extraction failed with an error; first ${Math.max(errors.length, 3)}:\n + ${errors + .slice(0, 3) + .map(d => "- " + d.message) + .join("\n")}`); + } + let execTime = new Date().getTime() - startTime; + return Result.success({ + data: res, + idMeaning: core.idMeaning, + diagnostics: core.diagnostics.concat([ + { + timeMs: execTime, + incomingRows: core.data.length, + outgoingRows: res.length, + errors, + }, + ]), + ops: core.ops.concat([{ type: "extract", fields }]), + timeMs: core.timeMs + execTime, + }); +} +/** Execute a list-based query, returning the final results. */ +async function executeList(query, index, origin, settings) { + var _a, _b; + // Start by collecting all of the files that match the 'from' queries. + let fileset = await resolveSource(query.source, index, origin); + if (!fileset.successful) + return Result.failure(fileset.error); + // Extract information about the origin page to add to the root context. + let rootContext = new Context(defaultLinkHandler(index, origin), settings, { + this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.serialize(index)) !== null && _b !== void 0 ? _b : {}, + }); + let targetField = query.header.format; + let fields = targetField ? { target: targetField } : {}; + return executeCoreExtract(fileset.value, rootContext, query.operations, fields).map(core => { + let data = core.data.map(p => { + var _a; + return iden({ + primary: p.id, + value: (_a = p.data["target"]) !== null && _a !== void 0 ? _a : undefined, + }); + }); + return { primaryMeaning: core.idMeaning, core, data }; + }); +} +/** Execute a table query. */ +async function executeTable(query, index, origin, settings) { + var _a, _b; + // Start by collecting all of the files that match the 'from' queries. + let fileset = await resolveSource(query.source, index, origin); + if (!fileset.successful) + return Result.failure(fileset.error); + // Extract information about the origin page to add to the root context. + let rootContext = new Context(defaultLinkHandler(index, origin), settings, { + this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.serialize(index)) !== null && _b !== void 0 ? _b : {}, + }); + let targetFields = query.header.fields; + let fields = {}; + for (let field of targetFields) + fields[field.name] = field.field; + return executeCoreExtract(fileset.value, rootContext, query.operations, fields).map(core => { + let names = targetFields.map(f => f.name); + let data = core.data.map(p => iden({ + id: p.id, + values: targetFields.map(f => p.data[f.name]), + })); + return { core, names, data, idMeaning: core.idMeaning }; + }); +} +/** Maps a raw core execution result to a task grouping which is much easier to render. */ +function extractTaskGroupings(id, rows) { + switch (id.type) { + case "path": + return rows; + case "group": + let key = id.name; + return rows.map(r => iden({ + key: r[key], + rows: extractTaskGroupings(id.on, r.rows), + })); + } +} +/** Execute a task query, returning all matching tasks. */ +async function executeTask(query, origin, index, settings) { + var _a, _b; + let fileset = matchingSourcePaths(query.source, index, origin); + if (!fileset.successful) + return Result.failure(fileset.error); + // Collect tasks from pages which match. + let incomingTasks = []; + for (let path of fileset.value) { + let page = index.pages.get(path); + if (!page) + continue; + let pageData = page.serialize(index); + let pageTasks = pageData.file.tasks.map(t => { + const tcopy = Values.deepCopy(t); + // Add page data to this copy. + for (let [key, value] of Object.entries(pageData)) { + if (key in tcopy) + continue; + tcopy[key] = value; + } + return { id: `${pageData.path}#${t.line}`, data: tcopy }; + }); + for (let task of pageTasks) + incomingTasks.push(task); + } + // Extract information about the origin page to add to the root context. + let rootContext = new Context(defaultLinkHandler(index, origin), settings, { + this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.serialize(index)) !== null && _b !== void 0 ? _b : {}, + }); + return executeCore(incomingTasks, rootContext, query.operations).map(core => { + return { + core, + tasks: extractTaskGroupings(core.idMeaning, core.data.map(r => r.data)), + }; + }); +} +/** Execute a single field inline a file, returning the evaluated result. */ +function executeInline(field, origin, index, settings) { + var _a, _b; + return new Context(defaultLinkHandler(index, origin), settings, { + this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.serialize(index)) !== null && _b !== void 0 ? _b : {}, + }).evaluate(field); +} +/** The default link resolver used when creating contexts. */ +function defaultLinkHandler(index, origin) { + return { + resolve: link => { + let realFile = index.metadataCache.getFirstLinkpathDest(link, origin); + if (!realFile) + return null; + let realPage = index.pages.get(realFile.path); + if (!realPage) + return null; + return realPage.serialize(index); + }, + normalize: link => { + var _a; + let realFile = index.metadataCache.getFirstLinkpathDest(link, origin); + return (_a = realFile === null || realFile === void 0 ? void 0 : realFile.path) !== null && _a !== void 0 ? _a : link; + }, + exists: link => { + let realFile = index.metadataCache.getFirstLinkpathDest(link, origin); + return !!realFile; + }, + }; +} +/** Execute a calendar-based query, returning the final results. */ +async function executeCalendar(query, index, origin, settings) { + var _a, _b; + // Start by collecting all of the files that match the 'from' queries. + let fileset = await resolveSource(query.source, index, origin); + if (!fileset.successful) + return Result.failure(fileset.error); + // Extract information about the origin page to add to the root context. + let rootContext = new Context(defaultLinkHandler(index, origin), settings, { + this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.serialize(index)) !== null && _b !== void 0 ? _b : {}, + }); + let targetField = query.header.field.field; + let fields = { + target: targetField, + link: { type: "index", object: { type: "variable", name: "file" }, index: { type: "variable", name: "link" } }, + }; + return executeCoreExtract(fileset.value, rootContext, query.operations, fields).map(core => { + let data = core.data.map(p => iden({ + date: p.data["target"], + link: p.data["link"], + })); + return { core, data }; + }); +} + +function compareVersions(v1, v2) { + // validate input and split into segments + const n1 = validateAndParse(v1); + const n2 = validateAndParse(v2); + + // pop off the patch + const p1 = n1.pop(); + const p2 = n2.pop(); + + // validate numbers + const r = compareSegments(n1, n2); + if (r !== 0) return r; + + // validate pre-release + if (p1 && p2) { + return compareSegments(p1.split('.'), p2.split('.')); + } else if (p1 || p2) { + return p1 ? -1 : 1; + } + + return 0; +} + +const validate = (v) => + typeof v === 'string' && /^[v\d]/.test(v) && semver.test(v); + +const compare = (v1, v2, operator) => { + // validate input operator + assertValidOperator(operator); + + // since result of compareVersions can only be -1 or 0 or 1 + // a simple map can be used to replace switch + const res = compareVersions(v1, v2); + + return operatorResMap[operator].includes(res); +}; + +const satisfies = (v, r) => { + // if no range operator then "=" + const m = r.match(/^([<>=~^]+)/); + const op = m ? m[1] : '='; + + // if gt/lt/eq then operator compare + if (op !== '^' && op !== '~') return compare(v, r, op); + + // else range of either "~" or "^" is assumed + const [v1, v2, v3] = validateAndParse(v); + const [r1, r2, r3] = validateAndParse(r); + if (compareStrings(v1, r1) !== 0) return false; + if (op === '^') { + return compareSegments([v2, v3], [r2, r3]) >= 0; + } + if (compareStrings(v2, r2) !== 0) return false; + return compareStrings(v3, r3) >= 0; +}; + +// export CJS style for parity +compareVersions.validate = validate; +compareVersions.compare = compare; +compareVersions.sastisfies = satisfies; + +const semver = + /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i; + +const validateAndParse = (v) => { + if (typeof v !== 'string') { + throw new TypeError('Invalid argument expected string'); + } + const match = v.match(semver); + if (!match) { + throw new Error(`Invalid argument not valid semver ('${v}' received)`); + } + match.shift(); + return match; +}; + +const isWildcard = (s) => s === '*' || s === 'x' || s === 'X'; + +const tryParse = (v) => { + const n = parseInt(v, 10); + return isNaN(n) ? v : n; +}; + +const forceType = (a, b) => + typeof a !== typeof b ? [String(a), String(b)] : [a, b]; + +const compareStrings = (a, b) => { + if (isWildcard(a) || isWildcard(b)) return 0; + const [ap, bp] = forceType(tryParse(a), tryParse(b)); + if (ap > bp) return 1; + if (ap < bp) return -1; + return 0; +}; + +const compareSegments = (a, b) => { + for (let i = 0; i < Math.max(a.length, b.length); i++) { + const r = compareStrings(a[i] || 0, b[i] || 0); + if (r !== 0) return r; + } + return 0; +}; + +const operatorResMap = { + '>': [1], + '>=': [0, 1], + '=': [0], + '<=': [-1, 0], + '<': [-1], +}; + +const allowedOperators = Object.keys(operatorResMap); + +const assertValidOperator = (op) => { + if (typeof op !== 'string') { + throw new TypeError( + `Invalid operator type, expected string but got ${typeof op}` + ); + } + if (allowedOperators.indexOf(op) === -1) { + throw new Error( + `Invalid operator, expected one of ${allowedOperators.join('|')}` + ); + } +}; + +var n,l$1,u$1,t$1,o$1,r$1,f$1,e$1={},c$1=[],s$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function a$1(n,l){for(var u in l)n[u]=l[u];return n}function h$1(n){var l=n.parentNode;l&&l.removeChild(n);}function v$1(l,u,i){var t,o,r,f={};for(r in u)"key"==r?t=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return y$1(l,f,t,o,null)}function y$1(n,i,t,o,r){var f={type:n,props:i,key:t,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==r?++u$1:r};return null==r&&null!=l$1.vnode&&l$1.vnode(f),f}function p$1(){return {current:null}}function d$1(n){return n.children}function _$1(n,l){this.props=n,this.context=l;}function k$2(n,l){if(null==l)return n.__?k$2(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l0?y$1(_.type,_.props,_.key,null,_.__v):_)){if(_.__=u,_.__b=u.__b+1,null===(p=w[h])||p&&_.key==p.key&&_.type===p.type)w[h]=void 0;else for(v=0;v2&&(f.children=arguments.length>3?n.call(arguments,2):i),y$1(l.type,f,t||l.key,o||l.ref,null)}function D$1(n,l){var u={__c:l="__cC"+f$1++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(m$1);},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n);};}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=c$1.slice,l$1={__e:function(n,l,u,i){for(var t,o,r;l=l.__;)if((t=l.__c)&&!t.__)try{if((o=t.constructor)&&null!=o.getDerivedStateFromError&&(t.setState(o.getDerivedStateFromError(n)),r=t.__d),null!=t.componentDidCatch&&(t.componentDidCatch(n,i||{}),r=t.__d),r)return t.__E=t}catch(l){n=l;}throw n}},u$1=0,_$1.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=a$1({},this.state),"function"==typeof n&&(n=n(a$1({},u),this.props)),n&&a$1(u,n),null!=n&&this.__v&&(l&&this.__h.push(l),m$1(this));},_$1.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),m$1(this));},_$1.prototype.render=d$1,t$1=[],o$1="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,g$2.__r=0,f$1=0; + +var t,u,r,o=0,i=[],c=l$1.__b,f=l$1.__r,e=l$1.diffed,a=l$1.__c,v=l$1.unmount;function l(t,r){l$1.__h&&l$1.__h(u,t,o||r),o=0;var i=u.__H||(u.__H={__:[],__h:[]});return t>=i.__.length&&i.__.push({}),i.__[t]}function m(n){return o=1,p(w$1,n)}function p(n,r,o){var i=l(t++,2);return i.t=n,i.__c||(i.__=[o?o(r):w$1(void 0,r),function(n){var t=i.t(i.__[0],n);i.__[0]!==t&&(i.__=[t,i.__[1]],i.__c.setState({}));}],i.__c=u),i.__}function y(r,o){var i=l(t++,3);!l$1.__s&&k$1(i.__H,o)&&(i.__=r,i.__H=o,u.__H.__h.push(i));}function d(r,o){var i=l(t++,4);!l$1.__s&&k$1(i.__H,o)&&(i.__=r,i.__H=o,u.__h.push(i));}function h(n){return o=5,_(function(){return {current:n}},[])}function s(n,t,u){o=6,d(function(){return "function"==typeof n?(n(t()),function(){return n(null)}):n?(n.current=t(),function(){return n.current=null}):void 0},null==u?u:u.concat(n));}function _(n,u){var r=l(t++,7);return k$1(r.__H,u)&&(r.__=n(),r.__H=u,r.__h=n),r.__}function A$1(n,t){return o=8,_(function(){return n},t)}function F$1(n){var r=u.context[n.__c],o=l(t++,9);return o.c=n,r?(null==o.__&&(o.__=!0,r.sub(u)),r.props.value):n.__}function T$1(t,u){l$1.useDebugValue&&l$1.useDebugValue(u?u(t):t);}function x$1(){for(var t;t=i.shift();)if(t.__P)try{t.__H.__h.forEach(g$1),t.__H.__h.forEach(j$1),t.__H.__h=[];}catch(u){t.__H.__h=[],l$1.__e(u,t.__v);}}l$1.__b=function(n){u=null,c&&c(n);},l$1.__r=function(n){f&&f(n),t=0;var r=(u=n.__c).__H;r&&(r.__h.forEach(g$1),r.__h.forEach(j$1),r.__h=[]);},l$1.diffed=function(t){e&&e(t);var o=t.__c;o&&o.__H&&o.__H.__h.length&&(1!==i.push(o)&&r===l$1.requestAnimationFrame||((r=l$1.requestAnimationFrame)||function(n){var t,u=function(){clearTimeout(r),b&&cancelAnimationFrame(t),setTimeout(n);},r=setTimeout(u,100);b&&(t=requestAnimationFrame(u));})(x$1)),u=null;},l$1.__c=function(t,u){u.some(function(t){try{t.__h.forEach(g$1),t.__h=t.__h.filter(function(n){return !n.__||j$1(n)});}catch(r){u.some(function(n){n.__h&&(n.__h=[]);}),u=[],l$1.__e(r,t.__v);}}),a&&a(t,u);},l$1.unmount=function(t){v&&v(t);var u,r=t.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{g$1(n);}catch(n){u=n;}}),u&&l$1.__e(u,r.__v));};var b="function"==typeof requestAnimationFrame;function g$1(n){var t=u,r=n.__c;"function"==typeof r&&(n.__c=void 0,r()),u=t;}function j$1(n){var t=u;n.__c=n.__(),u=t;}function k$1(n,t){return !n||n.length!==t.length||t.some(function(t,u){return t!==n[u]})}function w$1(n,t){return "function"==typeof t?t(n):t} + +function C(n,t){for(var e in t)n[e]=t[e];return n}function S(n,t){for(var e in n)if("__source"!==e&&!(e in t))return !0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return !0;return !1}function E(n){this.props=n;}function g(n,t){function e(n){var e=this.props.ref,r=e==n.ref;return !r&&e&&(e.call?e(null):e.current=null),t?!t(this.props,n)||!r:S(this.props,n)}function r(t){return this.shouldComponentUpdate=e,v$1(n,t)}return r.displayName="Memo("+(n.displayName||n.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r}(E.prototype=new _$1).isPureReactComponent=!0,E.prototype.shouldComponentUpdate=function(n,t){return S(this.props,n)||S(this.state,t)};var w=l$1.__b;l$1.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),w&&w(n);};var R="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function x(n){function t(t){var e=C({},t);return delete e.ref,n(e,t.ref||null)}return t.$$typeof=R,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(n.displayName||n.name)+")",t}var N=function(n,t){return null==n?null:A$2(A$2(n).map(t))},k={map:N,forEach:N,count:function(n){return n?A$2(n).length:0},only:function(n){var t=A$2(n);if(1!==t.length)throw "Children.only";return t[0]},toArray:A$2},A=l$1.__e;l$1.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);A(n,t,e,r);};var O=l$1.unmount;function L(){this.__u=0,this.t=null,this.__b=null;}function U(n){var t=n.__.__c;return t&&t.__e&&t.__e(n)}function F(n){var t,e,r;function u(u){if(t||(t=n()).then(function(n){e=n.default||n;},function(n){r=n;}),r)throw r;if(!e)throw t;return v$1(e,u)}return u.displayName="Lazy",u.__f=!0,u}function M(){this.u=null,this.o=null;}l$1.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&!0===n.__h&&(n.type=null),O&&O(n);},(L.prototype=new _$1).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=U(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l());};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__e){var n=r.state.__e;r.__v.__k[0]=function n(t,e,r){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)}),t.__c&&t.__c.__P===e&&(t.__e&&r.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=r)),t}(n,n.__c.__P,n.__c.__O);}var t;for(r.setState({__e:r.__b=null});t=r.t.pop();)t.forceUpdate();}},f=!0===t.__h;r.__u++||f||r.setState({__e:r.__b=r.__v.__k[0]}),n.then(i,i);},L.prototype.componentWillUnmount=function(){this.t=[];},L.prototype.render=function(n,t){if(this.__b){if(this.__v.__k){var e=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=function n(t,e,r){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c();}),t.__c.__H=null),null!=(t=C({},t)).__c&&(t.__c.__P===r&&(t.__c.__P=e),t.__c=null),t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)})),t}(this.__b,e,r.__O=r.__P);}this.__b=null;}var u=t.__e&&v$1(d$1,null,n.fallback);return u&&(u.__h=null),[v$1(d$1,null,t.__e?null:n.children),u]};var T=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]>>1,1),t.i.removeChild(n);}}),S$1(v$1(D,{context:t.context},n.__v),t.l)):t.l&&t.componentWillUnmount();}function W(n,t){var e=v$1(I,{__v:n,i:t});return e.containerInfo=t,e}(M.prototype=new _$1).__e=function(n){var t=this,e=U(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),T(t,n,r)):u();};e?e(o):o();}},M.prototype.render=function(n){this.u=null,this.o=new Map;var t=A$2(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},M.prototype.componentDidUpdate=M.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){T(n,e,t);});};var P="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,V=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,j="undefined"!=typeof document,z=function(n){return ("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(n)};function B(n,t,e){return null==t.__k&&(t.textContent=""),S$1(n,t),"function"==typeof e&&e(),n?n.__c:null}function $(n,t,e){return q$1(n,t),"function"==typeof e&&e(),n?n.__c:null}_$1.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(n){Object.defineProperty(_$1.prototype,n,{configurable:!0,get:function(){return this["UNSAFE_"+n]},set:function(t){Object.defineProperty(this,n,{configurable:!0,writable:!0,value:t});}});});var H=l$1.event;function Z(){}function Y(){return this.cancelBubble}function q(){return this.defaultPrevented}l$1.event=function(n){return H&&(n=H(n)),n.persist=Z,n.isPropagationStopped=Y,n.isDefaultPrevented=q,n.nativeEvent=n};var G,J={configurable:!0,get:function(){return this.class}},K=l$1.vnode;l$1.vnode=function(n){var t=n.type,e=n.props,r=e;if("string"==typeof t){var u=-1===t.indexOf("-");for(var o in r={},e){var i=e[o];j&&"children"===o&&"noscript"===t||"value"===o&&"defaultValue"in e&&null==i||("defaultValue"===o&&"value"in e&&null==e.value?o="value":"download"===o&&!0===i?i="":/ondoubleclick/i.test(o)?o="ondblclick":/^onchange(textarea|input)/i.test(o+t)&&!z(e.type)?o="oninput":/^onfocus$/i.test(o)?o="onfocusin":/^onblur$/i.test(o)?o="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(o)?o=o.toLowerCase():u&&V.test(o)?o=o.replace(/[A-Z0-9]/,"-$&").toLowerCase():null===i&&(i=void 0),r[o]=i);}"select"==t&&r.multiple&&Array.isArray(r.value)&&(r.value=A$2(e.children).forEach(function(n){n.props.selected=-1!=r.value.indexOf(n.props.value);})),"select"==t&&null!=r.defaultValue&&(r.value=A$2(e.children).forEach(function(n){n.props.selected=r.multiple?-1!=r.defaultValue.indexOf(n.props.value):r.defaultValue==n.props.value;})),n.props=r,e.class!=e.className&&(J.enumerable="className"in e,null!=e.className&&(r.class=e.className),Object.defineProperty(r,"className",J));}n.$$typeof=P,K&&K(n);};var Q=l$1.__r;l$1.__r=function(n){Q&&Q(n),G=n.__c;};var X={ReactCurrentDispatcher:{current:{readContext:function(n){return G.__n[n.__c].props.value}}}};function tn(n){return v$1.bind(null,n)}function en(n){return !!n&&n.$$typeof===P}function rn(n){return en(n)?B$1.apply(null,arguments):n}function un(n){return !!n.__k&&(S$1(null,n),!0)}function on(n){return n&&(n.base||1===n.nodeType&&n)||null}var ln=function(n,t){return n(t)},fn=function(n,t){return n(t)};var React = {useState:m,useReducer:p,useEffect:y,useLayoutEffect:d,useRef:h,useImperativeHandle:s,useMemo:_,useCallback:A$1,useContext:F$1,useDebugValue:T$1,version:"17.0.2",Children:k,render:B,hydrate:$,unmountComponentAtNode:un,createPortal:W,createElement:v$1,createContext:D$1,createFactory:tn,cloneElement:rn,createRef:p$1,Fragment:d$1,isValidElement:en,findDOMNode:on,Component:_$1,PureComponent:E,memo:g,forwardRef:x,flushSync:fn,unstable_batchedUpdates:ln,StrictMode:d$1,Suspense:L,SuspenseList:M,lazy:F,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:X}; + +const IMAGE_EXTENSIONS = Object.freeze(new Set([ + ".tif", + ".tiff", + ".gif", + ".png", + ".apng", + ".avif", + ".jpg", + ".jpeg", + ".jfif", + ".pjepg", + ".pjp", + ".svg", + ".webp", + ".bmp", + ".ico", + ".cur", +])); +/** Determines if the given link points to an embedded image. */ +function isImageEmbed(link) { + if (!link.path.contains(".")) + return false; + let extension = link.path.substring(link.path.lastIndexOf(".")); + return link.type == "file" && link.embed && IMAGE_EXTENSIONS.has(extension); +} +/** Extract text of the form 'WxH' or 'W' from the display of a link. */ +function extractImageDimensions(link) { + if (!link.display) + return undefined; + let match = /^(\d+)x(\d+)$/iu.exec(link.display); + if (match) + return [parseInt(match[1]), parseInt(match[2])]; + let match2 = /^(\d+)/.exec(link.display); + if (match2) + return [parseInt(match2[1])]; + // No match. + return undefined; +} + +/** Provides core preact / rendering utilities for all view types. */ +const DataviewContext = D$1(undefined); +/** Hacky preact component which wraps Obsidian's markdown renderer into a neat component. */ +function RawMarkdown({ content, sourcePath, inline = true, style, cls, onClick, }) { + const container = h(null); + const component = F$1(DataviewContext).component; + y(() => { + if (!container.current) + return; + container.current.innerHTML = ""; + obsidian.MarkdownRenderer.renderMarkdown(content, container.current, sourcePath, component).then(() => { + if (!container.current || !inline) + return; + // Unwrap any created paragraph elements if we are inline. + let paragraph = container.current.querySelector("p"); + while (paragraph) { + let children = paragraph.childNodes; + paragraph.replaceWith(...Array.from(children)); + paragraph = container.current.querySelector("p"); + } + }); + }, [content, sourcePath, container.current]); + return v$1("span", { ref: container, style: style, class: cls, onClick: onClick }); +} +/** Hacky preact component which wraps Obsidian's markdown renderer into a neat component. */ +const Markdown = React.memo(RawMarkdown); +/** Embeds an HTML element in the react DOM. */ +function RawEmbedHtml({ element }) { + const container = h(null); + y(() => { + if (!container.current) + return; + container.current.innerHTML = ""; + container.current.appendChild(element); + }, [container.current, element]); + return v$1("span", { ref: container }); +} +/** Embeds an HTML element in the react DOM. */ +const EmbedHtml = React.memo(RawEmbedHtml); +/** Intelligently render an arbitrary literal value. */ +function RawLit({ value, sourcePath, inline = false, depth = 0, }) { + var _a, _b; + const context = F$1(DataviewContext); + // Short-circuit if beyond the maximum render depth. + if (depth >= context.settings.maxRecursiveRenderDepth) + return v$1(d$1, null, "..."); + if (Values.isNull(value) || value === undefined) { + return v$1(Markdown, { content: context.settings.renderNullAs, sourcePath: sourcePath }); + } + else if (Values.isString(value)) { + return v$1(Markdown, { content: value, sourcePath: sourcePath }); + } + else if (Values.isNumber(value)) { + return v$1(d$1, null, "" + value); + } + else if (Values.isBoolean(value)) { + return v$1(d$1, null, "" + value); + } + else if (Values.isDate(value)) { + return v$1(d$1, null, renderMinimalDate(value, context.settings, currentLocale())); + } + else if (Values.isDuration(value)) { + return v$1(d$1, null, renderMinimalDuration(value)); + } + else if (Values.isLink(value)) { + // Special case handling of image/video/etc embeddings to bypass the Obsidian API not working. + if (isImageEmbed(value)) { + let realFile = context.app.metadataCache.getFirstLinkpathDest(value.path, sourcePath); + if (!realFile) + return v$1(Markdown, { content: value.markdown(), sourcePath: sourcePath }); + let dimensions = extractImageDimensions(value); + let resourcePath = context.app.vault.getResourcePath(realFile); + if (dimensions && dimensions.length == 2) + return v$1("img", { alt: value.path, src: resourcePath, width: dimensions[0], height: dimensions[1] }); + else if (dimensions && dimensions.length == 1) + return v$1("img", { alt: value.path, src: resourcePath, width: dimensions[0] }); + else + return v$1("img", { alt: value.path, src: resourcePath }); + } + return v$1(Markdown, { content: value.markdown(), sourcePath: sourcePath }); + } + else if (Values.isHtml(value)) { + return v$1(EmbedHtml, { element: value }); + } + else if (Values.isFunction(value)) { + return v$1(d$1, null, ""); + } + else if (Values.isArray(value) || DataArray.isDataArray(value)) { + if (!inline) { + return (v$1("ul", { class: "dataview dataview-ul dataview-result-list-ul" }, value.map(subvalue => (v$1("li", { class: "dataview-result-list-li" }, + v$1(Lit, { value: subvalue, sourcePath: sourcePath, inline: inline, depth: depth + 1 })))))); + } + else { + if (value.length == 0) + return v$1(d$1, null, ""); + return (v$1("span", { class: "dataview dataview-result-list-span" }, value.map((subvalue, index) => (v$1(d$1, null, + index == 0 ? "" : ", ", + v$1(Lit, { value: subvalue, sourcePath: sourcePath, inline: inline, depth: depth + 1 })))))); + } + } + else if (Values.isObject(value)) { + // Don't render classes in case they have recursive references; spoopy. + if (((_a = value === null || value === void 0 ? void 0 : value.constructor) === null || _a === void 0 ? void 0 : _a.name) && ((_b = value === null || value === void 0 ? void 0 : value.constructor) === null || _b === void 0 ? void 0 : _b.name) != "Object") { + return v$1(d$1, null, + "<", + value.constructor.name, + ">"); + } + if (!inline) { + return (v$1("ul", { class: "dataview dataview-ul dataview-result-object-ul" }, Object.entries(value).map(([key, value]) => (v$1("li", { class: "dataview dataview-li dataview-result-object-li" }, + key, + ": ", + v$1(Lit, { value: value, sourcePath: sourcePath, inline: inline, depth: depth + 1 })))))); + } + else { + if (Object.keys(value).length == 0) + return v$1(d$1, null, ""); + return (v$1("span", { class: "dataview dataview-result-object-span" }, Object.entries(value).map(([key, value], index) => (v$1(d$1, null, + index == 0 ? "" : ", ", + key, + ": ", + v$1(Lit, { value: value, sourcePath: sourcePath, inline: inline, depth: depth + 1 })))))); + } + } + return v$1(d$1, null, + ""); +} +/** Intelligently render an arbitrary literal value. */ +const Lit = React.memo(RawLit); +/** Render a simple nice looking error box in a code style. */ +function ErrorPre(props, {}) { + return v$1("pre", { class: "dataview dataview-error" }, props.children); +} +/** Render a pretty centered error message in a box. */ +function ErrorMessage({ message }) { + return (v$1("div", { class: "dataview dataview-error-box" }, + v$1("p", { class: "dataview dataview-error-message" }, message))); +} +/** + * Complex convienence hook which calls `compute` every time the index updates, updating the current state. + */ +function useIndexBackedState(container, app, settings, index, initial, compute) { + let [initialized, setInitialized] = m(false); + let [state, updateState] = m(initial); + let [lastReload, setLastReload] = m(index.revision); + if (!initialized) { + compute().then(v => updateState(v)); + setInitialized(true); + } + // Updated on every container re-create; automatically updates state. + y(() => { + let refreshOperation = () => { + if (lastReload != index.revision && container.isShown() && settings.refreshEnabled) { + setLastReload(index.revision); + compute().then(v => updateState(v)); + } + }; + // Refresh after index changes stop. + let workEvent = app.workspace.on("dataview:refresh-views", refreshOperation); + // ...or when the DOM is shown (sidebar expands, tab selected, nodes scrolled into view). + let nodeEvent = container.onNodeInserted(refreshOperation); + return () => { + app.workspace.offref(workEvent); + nodeEvent(); + }; + }, [container]); + return state; +} +/** A trivial wrapper which allows a react component to live for the duration of a `MarkdownRenderChild`. */ +class ReactRenderer extends obsidian.MarkdownRenderChild { + constructor(init, element) { + super(init.container); + this.init = init; + this.element = element; + } + onload() { + const context = Object.assign({}, { component: this }, this.init); + S$1(v$1(DataviewContext.Provider, { value: context }, this.element), this.containerEl); + } + onunload() { + un(this.containerEl); + } +} + +/** JSX component which renders a task element recursively. */ +function TaskItem({ item }) { + var _a; + let context = F$1(DataviewContext); + // Navigate to the given task on click. + const onClicked = (evt) => { + // Skip this event if a link was pressed. + if (evt.target != null && evt.target != undefined && evt.target.tagName == "A") { + return; + } + evt.stopPropagation(); + const selectionState = { + eState: { + cursor: { + from: { line: item.line, ch: item.position.start.col }, + to: { line: item.line + item.lineCount - 1, ch: item.position.end.col }, + }, + line: item.line, + }, + }; + context.app.workspace.openLinkText(item.link.toFile().obsidianLink(), item.path, evt.ctrlKey, selectionState); + }; + // Check/uncheck trhe task in the original file. + const onChecked = (evt) => { + evt.stopPropagation(); + const completed = evt.currentTarget.checked; + const status = completed ? "x" : " "; + // Update data-task on the parent element (css style) + const parent = evt.currentTarget.parentElement; + parent === null || parent === void 0 ? void 0 : parent.setAttribute("data-task", status); + let updatedText = undefined; + if (context.settings.taskCompletionTracking) + updatedText = setTaskCompletion(item.text, context.settings.taskCompletionText, completed); + rewriteTask(context.app.vault, item, status, updatedText); + }; + const checked = item.status !== " "; + return (v$1("li", { class: "dataview task-list-item" + (checked ? " is-checked" : ""), onClick: onClicked, "data-task": item.status }, + v$1("input", { class: "dataview task-list-item-checkbox", type: "checkbox", checked: checked, onClick: onChecked }), + v$1(Markdown, { inline: true, content: (_a = item.visual) !== null && _a !== void 0 ? _a : item.text, sourcePath: item.path }), + item.children.length > 0 && v$1(TaskList, { items: item.children }))); +} +/** JSX component which renders a plain list item recursively. */ +function ListItem({ item }) { + var _a; + return (v$1("li", { class: "dataview task-list-basic-item" }, + v$1(Markdown, { inline: true, content: (_a = item.visual) !== null && _a !== void 0 ? _a : item.text, sourcePath: item.path }), + item.children.length > 0 && v$1(TaskList, { items: item.children }))); +} +/** JSX component which renders a list of task items recursively. */ +function TaskList({ items }) { + const settings = F$1(DataviewContext).settings; + if (items.length == 0 && settings.warnOnEmptyResult) + return v$1(ErrorMessage, { message: "Dataview: No results to show for task query." }); + let [nest, _mask] = nestItems(items); + return (v$1("ul", { class: "contains-task-list" }, nest.map(item => (item.task ? v$1(TaskItem, { item: item }) : v$1(ListItem, { item: item }))))); +} +/** JSX component which recursively renders grouped tasks. */ +function TaskGrouping({ items, sourcePath }) { + const isGrouping = items.length > 0 && Groupings.isGrouping(items); + return (v$1(d$1, null, + isGrouping && + items.map(item => (v$1(d$1, null, + v$1("h4", null, + v$1(Lit, { value: item.key, sourcePath: sourcePath }), + v$1("span", { class: "dataview small-text" }, + "\u00A0(", + Groupings.count(item.rows), + ")")), + v$1("div", { class: "dataview result-group" }, + v$1(TaskGrouping, { items: item.rows, sourcePath: sourcePath }))))), + !isGrouping && v$1(TaskList, { items: items }))); +} +/** + * Pure view over (potentially grouped) tasks and list items which allows for checking/unchecking tasks and manipulating + * the task view. + */ +function TaskView({ query, sourcePath }) { + let context = F$1(DataviewContext); + let items = useIndexBackedState(context.container, context.app, context.settings, context.index, { state: "loading" }, async () => { + let result = await asyncTryOrPropogate(() => executeTask(query, sourcePath, context.index, context.settings)); + if (!result.successful) + return { state: "error", error: result.error, sourcePath }; + else + return { state: "ready", items: result.value.tasks }; + }); + if (items.state == "loading") + return (v$1(d$1, null, + v$1(ErrorPre, null, "Loading"))); + else if (items.state == "error") + return (v$1(d$1, null, + v$1(ErrorPre, null, + "Dataview: ", + items.error))); + return (v$1("div", { class: "dataview dataview-container" }, + v$1(TaskGrouping, { items: items.items, sourcePath: sourcePath }))); +} +function createTaskView(init, query, sourcePath) { + return new ReactRenderer(init, v$1(TaskView, { query: query, sourcePath: sourcePath })); +} +function createFixedTaskView(init, items, sourcePath) { + return new ReactRenderer(init, v$1(TaskGrouping, { items: items, sourcePath: sourcePath })); +} +///////////////////////// +// Task De-Duplication // +///////////////////////// +function listId(item) { + return item.path + ":" + item.line; +} +function parentListId(item) { + return item.path + ":" + item.parent; +} +/** Compute a map of all task IDs -> tasks. */ +function enumerateChildren(item, output) { + if (!output.has(listId(item))) + output.set(listId(item), item); + for (let child of item.children) + enumerateChildren(child, output); + return output; +} +/** Replace basic tasks with tasks from a lookup map. Retains the original order of the list. */ +function replaceChildren(elements, lookup) { + return elements.map(element => { + element.children = replaceChildren(element.children, lookup); + const id = listId(element); + const map = lookup.get(id); + if (map) + return map; + else + return element; + }); +} +/** + * Removes tasks from a list if they are already present by being a child of another task. Fixes child pointers. + * Retains original order of input list. + */ +function nestItems(raw) { + let elements = new Map(); + let mask = new Set(); + for (let elem of raw) { + let id = listId(elem); + elements.set(id, elem); + mask.add(id); + } + // List all elements & their children in the lookup map. + for (let elem of raw) + enumerateChildren(elem, elements); + let roots = raw.filter(elem => elem.parent == undefined || elem.parent == null || !elements.has(parentListId(elem))); + return [replaceChildren(roots, elements), mask]; +} +/////////////////////// +// Task Manipulation // +/////////////////////// +/** Trim empty ending lines. */ +function trimEndingLines(text) { + let parts = text.split(/\r?\n/u); + let trim = parts.length - 1; + while (trim > 0 && parts[trim].trim() == "") + trim--; + return parts.join("\n"); +} +/** Set the task completion key on check. */ +function setTaskCompletion(originalText, completionKey, complete) { + if (!complete) + return trimEndingLines(setInlineField(originalText, completionKey, undefined)); + let parts = originalText.split(/\r?\n/u); + parts[parts.length - 1] = setInlineField(parts[parts.length - 1], completionKey, DateTime_1.now().toISODate()); + return parts.join("\n"); +} +/** Rewrite a task with the given completion status and new text. */ +async function rewriteTask(vault, task, desiredStatus, desiredText) { + if (desiredStatus == task.status && (desiredText == undefined || desiredText == task.text)) + return; + desiredStatus = desiredStatus == "" ? " " : desiredStatus; + let rawFiletext = await vault.adapter.read(task.path); + let hasRN = rawFiletext.contains("\r"); + let filetext = rawFiletext.split(/\r?\n/u); + if (filetext.length < task.line) + return; + let match = LIST_ITEM_REGEX.exec(filetext[task.line]); + if (!match || match[2].length == 0) + return; + let taskTextParts = task.text.split("\n"); + if (taskTextParts[0].trim() != match[3].trim()) + return; + // We have a positive match here at this point, so go ahead and do the rewrite of the status. + let initialSpacing = /^[\s>]*/u.exec(filetext[task.line])[0]; + if (desiredText) { + let desiredParts = desiredText.split("\n"); + let newTextLines = [`${initialSpacing}${task.symbol} [${desiredStatus}] ${desiredParts[0]}`].concat(desiredParts.slice(1).map(l => initialSpacing + "\t" + l)); + filetext.splice(task.line, task.lineCount, ...newTextLines); + } + else { + filetext[task.line] = `${initialSpacing}${task.symbol} [${desiredStatus}] ${taskTextParts[0].trim()}`; + } + let newText = filetext.join(hasRN ? "\r\n" : "\n"); + await vault.adapter.write(task.path, newText); +} + +function SimpleListGrouping({ items, sourcePath }) { + return (v$1("ul", { class: "dataview list-view-ul" }, items.map(item => (v$1("li", null, + v$1(Lit, { value: item, sourcePath: sourcePath })))))); +} +function ListGrouping({ items, sourcePath, mode, }) { + return (v$1("ul", { class: "dataview list-view-ul" }, items.map(item => { + if (mode == "both") + return (v$1("li", null, + v$1(Lit, { value: item.primary, sourcePath: sourcePath }), + ":", + " ", + v$1(Lit, { value: item.value, sourcePath: sourcePath }))); + else if (mode == "id") + return (v$1("li", null, + v$1(Lit, { value: item.primary, sourcePath: sourcePath }))); + else + return (v$1("li", null, + v$1(Lit, { value: item.value, sourcePath: sourcePath }))); + }))); +} +/** Pure view over list elements. */ +function ListView({ query, sourcePath }) { + let context = F$1(DataviewContext); + let items = useIndexBackedState(context.container, context.app, context.settings, context.index, { state: "loading" }, async () => { + let result = await asyncTryOrPropogate(() => executeList(query, context.index, sourcePath, context.settings)); + if (!result.successful) + return { state: "error", error: result.error, sourcePath }; + let showId = query.header.showId; + let showValue = !!query.header.format; + let mode = showId && showValue ? "both" : showId ? "id" : "value"; + return { state: "ready", items: result.value.data, mode: mode }; + }); + if (items.state == "loading") + return (v$1(d$1, null, + v$1(ErrorPre, null, "Loading..."))); + else if (items.state == "error") + return (v$1(d$1, null, + " ", + v$1(ErrorPre, null, + "Dataview: ", + items.error), + " ")); + if (items.items.length == 0 && context.settings.warnOnEmptyResult) + return v$1(ErrorMessage, { message: "Dataview: No results to show for list query." }); + return v$1(ListGrouping, { items: items.items, sourcePath: sourcePath, mode: items.mode }); +} +function createListView(init, query, sourcePath) { + return new ReactRenderer(init, v$1(ListView, { query: query, sourcePath: sourcePath })); +} +function createFixedListView(init, elements, sourcePath) { + return new ReactRenderer(init, v$1(SimpleListGrouping, { items: elements, sourcePath: sourcePath })); +} + +/** Simple table over headings and corresponding values. */ +function TableGrouping({ headings, values, sourcePath, }) { + let settings = F$1(DataviewContext).settings; + return (v$1(d$1, null, + v$1("table", { class: "dataview table-view-table" }, + v$1("thead", { class: "table-view-thead" }, + v$1("tr", { class: "table-view-tr-header" }, headings.map((heading, index) => (v$1("th", { class: "table-view-th" }, + v$1(Markdown, { sourcePath: sourcePath, content: heading }), + index == 0 && v$1("span", { class: "dataview small-text" }, + "\u00A0(", + values.length, + ")")))))), + v$1("tbody", { class: "table-view-tbody" }, values.map(row => (v$1("tr", null, row.map(element => (v$1("td", null, + v$1(Lit, { value: element, sourcePath: sourcePath }))))))))), + settings.warnOnEmptyResult && values.length == 0 && (v$1(ErrorMessage, { message: "Dataview: No results to show for table query." })))); +} +/** Pure view over list elements. */ +function TableView({ query, sourcePath }) { + let context = F$1(DataviewContext); + let items = useIndexBackedState(context.container, context.app, context.settings, context.index, { state: "loading" }, async () => { + let result = await asyncTryOrPropogate(() => executeTable(query, context.index, sourcePath, context.settings)); + if (!result.successful) + return { state: "error", error: result.error }; + let showId = query.header.showId; + if (showId) { + let dataWithNames = []; + for (let entry of result.value.data) + dataWithNames.push([entry.id].concat(entry.values)); + let name = result.value.idMeaning.type === "group" + ? result.value.idMeaning.name + : context.settings.tableIdColumnName; + return { state: "ready", headings: [name].concat(result.value.names), values: dataWithNames }; + } + // Do not append the ID field by default. + return { state: "ready", headings: result.value.names, values: result.value.data.map(v => v.values) }; + }); + if (items.state == "loading") + return (v$1(d$1, null, + v$1(ErrorPre, null, "Loading..."))); + else if (items.state == "error") + return (v$1(d$1, null, + " ", + v$1(ErrorPre, null, + "Dataview: ", + items.error), + " ")); + return v$1(TableGrouping, { headings: items.headings, values: items.values, sourcePath: sourcePath }); +} +function createTableView(init, query, sourcePath) { + return new ReactRenderer(init, v$1(TableView, { query: query, sourcePath: sourcePath })); +} +function createFixedTableView(init, headings, values, sourcePath) { + return new ReactRenderer(init, v$1(TableGrouping, { values: values, headings: headings, sourcePath: sourcePath })); +} + +/** The general, externally accessible plugin API (available at `app.plugins.plugins.dataview.api` or as global `DataviewAPI`). */ +/** Asynchronous API calls related to file / system IO. */ +class DataviewIOApi { + constructor(api) { + this.api = api; + } + /** Load the contents of a CSV asynchronously, returning a data array of rows (or undefined if it does not exist). */ + async csv(path, originFile) { + if (!Values.isLink(path) && !Values.isString(path)) { + throw Error(`dv.io.csv only handles string or link paths; was provided type '${typeof path}'.`); + } + let data = await this.api.index.csv.get(this.normalize(path, originFile)); + if (data.successful) + return DataArray.from(data.value, this.api.settings); + else + throw Error(`Could not find CSV for path '${path}' (relative to origin '${originFile !== null && originFile !== void 0 ? originFile : "/"}')`); + } + /** Asynchronously load the contents of any link or path in an Obsidian vault. */ + async load(path, originFile) { + if (!Values.isLink(path) && !Values.isString(path)) { + throw Error(`dv.io.load only handles string or link paths; was provided type '${typeof path}'.`); + } + let existingFile = this.api.index.vault.getAbstractFileByPath(this.normalize(path, originFile)); + if (!existingFile || !(existingFile instanceof obsidian.TFile)) + return undefined; + return this.api.index.vault.cachedRead(existingFile); + } + /** Normalize a link or path relative to an optional origin file. Returns a textual fully-qualified-path. */ + normalize(path, originFile) { + let realPath; + if (Values.isLink(path)) + realPath = path.path; + else + realPath = path; + return this.api.index.prefix.resolveRelative(realPath, originFile); + } +} +class DataviewApi { + constructor(app, index, settings, verNum) { + this.app = app; + this.index = index; + this.settings = settings; + this.verNum = verNum; + /** Value utility functions for comparisons and type-checking. */ + this.value = Values; + /** Re-exporting of luxon for people who can't easily require it. Sorry! */ + this.luxon = Luxon; + /** utils to check api version */ + this.version = (() => { + const { verNum: version } = this; + return { + get current() { + return version; + }, + compare: (op, ver) => compare(version, ver, op), + satisfies: (range) => satisfies(version, range), + }; + })(); + this.evaluationContext = new Context(defaultLinkHandler(index, ""), settings); + this.func = Functions.bindAll(DEFAULT_FUNCTIONS, this.evaluationContext); + this.io = new DataviewIOApi(this); + } + ///////////////////////////// + // Index + Data Collection // + ///////////////////////////// + /** Return an array of paths (as strings) corresponding to pages which match the query. */ + pagePaths(query, originFile) { + let source; + try { + if (!query || query.trim() === "") + source = Sources.folder(""); + else + source = EXPRESSION.source.tryParse(query); + } + catch (ex) { + throw new Error(`Failed to parse query in 'pagePaths': ${ex}`); + } + return matchingSourcePaths(source, this.index, originFile) + .map(s => DataArray.from(s, this.settings)) + .orElseThrow(); + } + /** Map a page path to the actual data contained within that page. */ + page(path, originFile) { + if (!(typeof path === "string") && !Values.isLink(path)) { + throw Error("dv.page only handles string and link paths; was provided type '" + typeof path + "'"); + } + let rawPath = path instanceof Link ? path.path : path; + let normPath = this.app.metadataCache.getFirstLinkpathDest(rawPath, originFile !== null && originFile !== void 0 ? originFile : ""); + if (!normPath) + return undefined; + let pageObject = this.index.pages.get(normPath.path); + if (!pageObject) + return undefined; + return this._addDataArrays(pageObject.serialize(this.index)); + } + /** Return an array of page objects corresponding to pages which match the query. */ + pages(query, originFile) { + return this.pagePaths(query, originFile).flatMap(p => { + let res = this.page(p, originFile); + return res ? [res] : []; + }); + } + /** Remaps important metadata to add data arrays. */ + _addDataArrays(pageObject) { + // Remap the "file" metadata entries to be data arrays. + for (let [key, value] of Object.entries(pageObject.file)) { + if (Array.isArray(value)) + pageObject.file[key] = DataArray.wrap(value, this.settings); + } + return pageObject; + } + ///////////// + // Utility // + ///////////// + /** + * Convert an input element or array into a Dataview data-array. If the input is already a data array, + * it is returned unchanged. + */ + array(raw) { + if (DataArray.isDataArray(raw)) + return raw; + if (Array.isArray(raw)) + return DataArray.wrap(raw, this.settings); + return DataArray.wrap([raw], this.settings); + } + /** Return true if the given value is a javascript array OR a dataview data array. */ + isArray(raw) { + return DataArray.isDataArray(raw) || Array.isArray(raw); + } + /** Return true if the given value is a dataview data array; this returns FALSE for plain JS arrays. */ + isDataArray(raw) { + return DataArray.isDataArray(raw); + } + /** Create a dataview file link to the given path. */ + fileLink(path, embed = false, display) { + return Link.file(path, embed, display); + } + /** Attempt to extract a date from a string, link or date. */ + date(pathlike) { + return this.func.date(pathlike); + } + /** Attempt to extract a duration from a string or duration. */ + duration(str) { + return this.func.dur(str); + } + /** Parse a raw textual value into a complex Dataview type, if possible. */ + parse(value) { + let raw = EXPRESSION.inlineField.parse(value); + if (raw.status) + return raw.value; + else + return value; + } + /** Convert a basic JS type into a Dataview type by parsing dates, links, durations, and so on. */ + literal(value) { + return parseFrontmatter(value); + } + /** + * Compare two arbitrary JavaScript values using Dataview's default comparison rules. Returns a negative value if + * a < b, 0 if a = b, and a positive value if a > b. + */ + compare(a, b) { + return Values.compareValue(a, b); + } + /** Return true if the two given JavaScript values are equal using Dataview's default comparison rules. */ + equal(a, b) { + return this.compare(a, b) == 0; + } + /////////////////////////////// + // Dataview Query Evaluation // + /////////////////////////////// + /** + * Evaluate a dataview expression (like '2 + 2' or 'link("hello")'), returning the evaluated result. + * This takes an optional second argument which provides definitions for variables, such as: + * + * ``` + * dv.evaluate("x + 6", { x: 2 }) = 8 + * dv.evaluate('link(target)', { target: "Okay" }) = [[Okay]] + * ``` + * + * This method returns a Result type instead of throwing an error; you can check the result of the + * execution via `result.successful` and obtain `result.value` or `result.error` resultingly. If + * you'd rather this method throw on an error, use `dv.tryEvaluate`. + */ + evaluate(expression, context) { + let field = EXPRESSION.field.parse(expression); + if (!field.status) + return Result.failure(`Failed to parse expression "${expression}"`); + return this.evaluationContext.evaluate(field.value, context); + } + /** Error-throwing version of `dv.evaluate`. */ + tryEvaluate(expression, context) { + return this.evaluate(expression, context).orElseThrow(); + } + /////////////// + // Rendering // + /////////////// + /** Render a dataview list of the given values. */ + async list(values, container, component, filePath) { + if (!values) + return; + if (values !== undefined && values !== null && !Array.isArray(values) && !DataArray.isDataArray(values)) + values = Array.from(values); + // Append a child div, since React will keep re-rendering otherwise. + let subcontainer = container.createEl("div"); + component.addChild(createFixedListView({ app: this.app, settings: this.settings, index: this.index, container: subcontainer }, values, filePath)); + } + /** Render a dataview table with the given headers, and the 2D array of values. */ + async table(headers, values, container, component, filePath) { + if (!headers) + headers = []; + if (!values) + values = []; + if (!Array.isArray(headers) && !DataArray.isDataArray(headers)) + headers = Array.from(headers); + // Append a child div, since React will keep re-rendering otherwise. + let subcontainer = container.createEl("div"); + component.addChild(createFixedTableView({ app: this.app, settings: this.settings, index: this.index, container: subcontainer }, headers, values, filePath)); + } + /** Render a dataview task view with the given tasks. */ + async taskList(tasks, groupByFile = true, container, component, filePath = "") { + let groupedTasks = !Groupings.isGrouping(tasks) && groupByFile ? this.array(tasks).groupBy(t => Link.file(t.path)) : tasks; + // Append a child div, since React will override several task lists otherwise. + let taskContainer = container.createEl("div"); + component.addChild(createFixedTaskView({ app: this.app, settings: this.settings, index: this.index, container: taskContainer }, groupedTasks, filePath)); + } + /** Render an arbitrary value into a container. */ + async renderValue(value, container, component, filePath, inline = false) { + return renderValue(value, container, filePath, component, this.settings, inline); + } +} + function noop() { } function assign(tar, src) { // @ts-ignore @@ -2672,12805 +19242,146 @@ class Calendar extends SvelteComponent { } } -var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -var luxon = {}; - -Object.defineProperty(luxon, '__esModule', { value: true }); - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} - -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; -} - -function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); -} - -function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - - _setPrototypeOf(subClass, superClass); -} - -function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - return _getPrototypeOf(o); -} - -function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - - return _setPrototypeOf(o, p); -} - -function _isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) return false; - if (Reflect.construct.sham) return false; - if (typeof Proxy === "function") return true; - - try { - Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); - return true; - } catch (e) { - return false; - } -} - -function _construct(Parent, args, Class) { - if (_isNativeReflectConstruct()) { - _construct = Reflect.construct; - } else { - _construct = function _construct(Parent, args, Class) { - var a = [null]; - a.push.apply(a, args); - var Constructor = Function.bind.apply(Parent, a); - var instance = new Constructor(); - if (Class) _setPrototypeOf(instance, Class.prototype); - return instance; - }; - } - - return _construct.apply(null, arguments); -} - -function _isNativeFunction(fn) { - return Function.toString.call(fn).indexOf("[native code]") !== -1; -} - -function _wrapNativeSuper(Class) { - var _cache = typeof Map === "function" ? new Map() : undefined; - - _wrapNativeSuper = function _wrapNativeSuper(Class) { - if (Class === null || !_isNativeFunction(Class)) return Class; - - if (typeof Class !== "function") { - throw new TypeError("Super expression must either be null or a function"); - } - - if (typeof _cache !== "undefined") { - if (_cache.has(Class)) return _cache.get(Class); - - _cache.set(Class, Wrapper); - } - - function Wrapper() { - return _construct(Class, arguments, _getPrototypeOf(this).constructor); - } - - Wrapper.prototype = Object.create(Class.prototype, { - constructor: { - value: Wrapper, - enumerable: false, - writable: true, - configurable: true - } - }); - return _setPrototypeOf(Wrapper, Class); - }; - - return _wrapNativeSuper(Class); -} - -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; -} - -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} - -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - - return arr2; -} - -function _createForOfIteratorHelperLoose(o, allowArrayLike) { - var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; - if (it) return (it = it.call(o)).next.bind(it); - - if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { - if (it) o = it; - var i = 0; - return function () { - if (i >= o.length) return { - done: true - }; - return { - done: false, - value: o[i++] - }; - }; - } - - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -// these aren't really private, but nor are they really useful to document - -/** - * @private - */ -var LuxonError = /*#__PURE__*/function (_Error) { - _inheritsLoose(LuxonError, _Error); - - function LuxonError() { - return _Error.apply(this, arguments) || this; - } - - return LuxonError; -}( /*#__PURE__*/_wrapNativeSuper(Error)); -/** - * @private - */ - - -var InvalidDateTimeError = /*#__PURE__*/function (_LuxonError) { - _inheritsLoose(InvalidDateTimeError, _LuxonError); - - function InvalidDateTimeError(reason) { - return _LuxonError.call(this, "Invalid DateTime: " + reason.toMessage()) || this; - } - - return InvalidDateTimeError; -}(LuxonError); -/** - * @private - */ - -var InvalidIntervalError = /*#__PURE__*/function (_LuxonError2) { - _inheritsLoose(InvalidIntervalError, _LuxonError2); - - function InvalidIntervalError(reason) { - return _LuxonError2.call(this, "Invalid Interval: " + reason.toMessage()) || this; - } - - return InvalidIntervalError; -}(LuxonError); -/** - * @private - */ - -var InvalidDurationError = /*#__PURE__*/function (_LuxonError3) { - _inheritsLoose(InvalidDurationError, _LuxonError3); - - function InvalidDurationError(reason) { - return _LuxonError3.call(this, "Invalid Duration: " + reason.toMessage()) || this; - } - - return InvalidDurationError; -}(LuxonError); -/** - * @private - */ - -var ConflictingSpecificationError = /*#__PURE__*/function (_LuxonError4) { - _inheritsLoose(ConflictingSpecificationError, _LuxonError4); - - function ConflictingSpecificationError() { - return _LuxonError4.apply(this, arguments) || this; - } - - return ConflictingSpecificationError; -}(LuxonError); -/** - * @private - */ - -var InvalidUnitError = /*#__PURE__*/function (_LuxonError5) { - _inheritsLoose(InvalidUnitError, _LuxonError5); - - function InvalidUnitError(unit) { - return _LuxonError5.call(this, "Invalid unit " + unit) || this; - } - - return InvalidUnitError; -}(LuxonError); -/** - * @private - */ - -var InvalidArgumentError = /*#__PURE__*/function (_LuxonError6) { - _inheritsLoose(InvalidArgumentError, _LuxonError6); - - function InvalidArgumentError() { - return _LuxonError6.apply(this, arguments) || this; - } - - return InvalidArgumentError; -}(LuxonError); -/** - * @private - */ - -var ZoneIsAbstractError = /*#__PURE__*/function (_LuxonError7) { - _inheritsLoose(ZoneIsAbstractError, _LuxonError7); - - function ZoneIsAbstractError() { - return _LuxonError7.call(this, "Zone is an abstract class") || this; - } - - return ZoneIsAbstractError; -}(LuxonError); - -/** - * @private - */ -var n = "numeric", - s = "short", - l = "long"; -var DATE_SHORT = { - year: n, - month: n, - day: n -}; -var DATE_MED = { - year: n, - month: s, - day: n -}; -var DATE_MED_WITH_WEEKDAY = { - year: n, - month: s, - day: n, - weekday: s -}; -var DATE_FULL = { - year: n, - month: l, - day: n -}; -var DATE_HUGE = { - year: n, - month: l, - day: n, - weekday: l -}; -var TIME_SIMPLE = { - hour: n, - minute: n -}; -var TIME_WITH_SECONDS = { - hour: n, - minute: n, - second: n -}; -var TIME_WITH_SHORT_OFFSET = { - hour: n, - minute: n, - second: n, - timeZoneName: s -}; -var TIME_WITH_LONG_OFFSET = { - hour: n, - minute: n, - second: n, - timeZoneName: l -}; -var TIME_24_SIMPLE = { - hour: n, - minute: n, - hourCycle: "h23" -}; -var TIME_24_WITH_SECONDS = { - hour: n, - minute: n, - second: n, - hourCycle: "h23" -}; -var TIME_24_WITH_SHORT_OFFSET = { - hour: n, - minute: n, - second: n, - hourCycle: "h23", - timeZoneName: s -}; -var TIME_24_WITH_LONG_OFFSET = { - hour: n, - minute: n, - second: n, - hourCycle: "h23", - timeZoneName: l -}; -var DATETIME_SHORT = { - year: n, - month: n, - day: n, - hour: n, - minute: n -}; -var DATETIME_SHORT_WITH_SECONDS = { - year: n, - month: n, - day: n, - hour: n, - minute: n, - second: n -}; -var DATETIME_MED = { - year: n, - month: s, - day: n, - hour: n, - minute: n -}; -var DATETIME_MED_WITH_SECONDS = { - year: n, - month: s, - day: n, - hour: n, - minute: n, - second: n -}; -var DATETIME_MED_WITH_WEEKDAY = { - year: n, - month: s, - day: n, - weekday: s, - hour: n, - minute: n -}; -var DATETIME_FULL = { - year: n, - month: l, - day: n, - hour: n, - minute: n, - timeZoneName: s -}; -var DATETIME_FULL_WITH_SECONDS = { - year: n, - month: l, - day: n, - hour: n, - minute: n, - second: n, - timeZoneName: s -}; -var DATETIME_HUGE = { - year: n, - month: l, - day: n, - weekday: l, - hour: n, - minute: n, - timeZoneName: l -}; -var DATETIME_HUGE_WITH_SECONDS = { - year: n, - month: l, - day: n, - weekday: l, - hour: n, - minute: n, - second: n, - timeZoneName: l -}; - -/** - * @private - */ -// TYPES - -function isUndefined(o) { - return typeof o === "undefined"; -} -function isNumber(o) { - return typeof o === "number"; -} -function isInteger(o) { - return typeof o === "number" && o % 1 === 0; -} -function isString(o) { - return typeof o === "string"; -} -function isDate(o) { - return Object.prototype.toString.call(o) === "[object Date]"; -} // CAPABILITIES - -function hasRelative() { - try { - return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat; - } catch (e) { - return false; - } -} // OBJECTS AND ARRAYS - -function maybeArray(thing) { - return Array.isArray(thing) ? thing : [thing]; -} -function bestBy(arr, by, compare) { - if (arr.length === 0) { - return undefined; - } - - return arr.reduce(function (best, next) { - var pair = [by(next), next]; - - if (!best) { - return pair; - } else if (compare(best[0], pair[0]) === best[0]) { - return best; - } else { - return pair; - } - }, null)[1]; -} -function pick(obj, keys) { - return keys.reduce(function (a, k) { - a[k] = obj[k]; - return a; - }, {}); -} -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} // NUMBERS AND STRINGS - -function integerBetween(thing, bottom, top) { - return isInteger(thing) && thing >= bottom && thing <= top; -} // x % n but takes the sign of n instead of x - -function floorMod(x, n) { - return x - n * Math.floor(x / n); -} -function padStart(input, n) { - if (n === void 0) { - n = 2; - } - - var minus = input < 0 ? "-" : ""; - var target = minus ? input * -1 : input; - var result; - - if (target.toString().length < n) { - result = ("0".repeat(n) + target).slice(-n); - } else { - result = target.toString(); - } - - return "" + minus + result; -} -function parseInteger(string) { - if (isUndefined(string) || string === null || string === "") { - return undefined; - } else { - return parseInt(string, 10); - } -} -function parseFloating(string) { - if (isUndefined(string) || string === null || string === "") { - return undefined; - } else { - return parseFloat(string); - } -} -function parseMillis(fraction) { - // Return undefined (instead of 0) in these cases, where fraction is not set - if (isUndefined(fraction) || fraction === null || fraction === "") { - return undefined; - } else { - var f = parseFloat("0." + fraction) * 1000; - return Math.floor(f); - } -} -function roundTo(number, digits, towardZero) { - if (towardZero === void 0) { - towardZero = false; - } - - var factor = Math.pow(10, digits), - rounder = towardZero ? Math.trunc : Math.round; - return rounder(number * factor) / factor; -} // DATE BASICS - -function isLeapYear(year) { - return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); -} -function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; -} -function daysInMonth(year, month) { - var modMonth = floorMod(month - 1, 12) + 1, - modYear = year + (month - modMonth) / 12; - - if (modMonth === 2) { - return isLeapYear(modYear) ? 29 : 28; - } else { - return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1]; - } -} // covert a calendar object to a local timestamp (epoch, but with the offset baked in) - -function objToLocalTS(obj) { - var d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond); // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that - - if (obj.year < 100 && obj.year >= 0) { - d = new Date(d); - d.setUTCFullYear(d.getUTCFullYear() - 1900); - } - - return +d; -} -function weeksInWeekYear(weekYear) { - var p1 = (weekYear + Math.floor(weekYear / 4) - Math.floor(weekYear / 100) + Math.floor(weekYear / 400)) % 7, - last = weekYear - 1, - p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7; - return p1 === 4 || p2 === 3 ? 53 : 52; -} -function untruncateYear(year) { - if (year > 99) { - return year; - } else return year > 60 ? 1900 + year : 2000 + year; -} // PARSING - -function parseZoneInfo(ts, offsetFormat, locale, timeZone) { - if (timeZone === void 0) { - timeZone = null; - } - - var date = new Date(ts), - intlOpts = { - hourCycle: "h23", - year: "numeric", - month: "2-digit", - day: "2-digit", - hour: "2-digit", - minute: "2-digit" - }; - - if (timeZone) { - intlOpts.timeZone = timeZone; - } - - var modified = _extends({ - timeZoneName: offsetFormat - }, intlOpts); - - var parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(function (m) { - return m.type.toLowerCase() === "timezonename"; - }); - return parsed ? parsed.value : null; -} // signedOffset('-5', '30') -> -330 - -function signedOffset(offHourStr, offMinuteStr) { - var offHour = parseInt(offHourStr, 10); // don't || this because we want to preserve -0 - - if (Number.isNaN(offHour)) { - offHour = 0; - } - - var offMin = parseInt(offMinuteStr, 10) || 0, - offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin; - return offHour * 60 + offMinSigned; -} // COERCION - -function asNumber(value) { - var numericValue = Number(value); - if (typeof value === "boolean" || value === "" || Number.isNaN(numericValue)) throw new InvalidArgumentError("Invalid unit value " + value); - return numericValue; -} -function normalizeObject(obj, normalizer) { - var normalized = {}; - - for (var u in obj) { - if (hasOwnProperty(obj, u)) { - var v = obj[u]; - if (v === undefined || v === null) continue; - normalized[normalizer(u)] = asNumber(v); - } - } - - return normalized; -} -function formatOffset(offset, format) { - var hours = Math.trunc(Math.abs(offset / 60)), - minutes = Math.trunc(Math.abs(offset % 60)), - sign = offset >= 0 ? "+" : "-"; - - switch (format) { - case "short": - return "" + sign + padStart(hours, 2) + ":" + padStart(minutes, 2); - - case "narrow": - return "" + sign + hours + (minutes > 0 ? ":" + minutes : ""); - - case "techie": - return "" + sign + padStart(hours, 2) + padStart(minutes, 2); - - default: - throw new RangeError("Value format " + format + " is out of range for property format"); - } -} -function timeObject(obj) { - return pick(obj, ["hour", "minute", "second", "millisecond"]); -} -var ianaRegex = /[A-Za-z_+-]{1,256}(:?\/[A-Za-z0-9_+-]{1,256}(\/[A-Za-z0-9_+-]{1,256})?)?/; - -/** - * @private - */ - - -var monthsLong = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; -var monthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; -var monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]; -function months(length) { - switch (length) { - case "narrow": - return [].concat(monthsNarrow); - - case "short": - return [].concat(monthsShort); - - case "long": - return [].concat(monthsLong); - - case "numeric": - return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; - - case "2-digit": - return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; - - default: - return null; - } -} -var weekdaysLong = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; -var weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; -var weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"]; -function weekdays(length) { - switch (length) { - case "narrow": - return [].concat(weekdaysNarrow); - - case "short": - return [].concat(weekdaysShort); - - case "long": - return [].concat(weekdaysLong); - - case "numeric": - return ["1", "2", "3", "4", "5", "6", "7"]; - - default: - return null; - } -} -var meridiems = ["AM", "PM"]; -var erasLong = ["Before Christ", "Anno Domini"]; -var erasShort = ["BC", "AD"]; -var erasNarrow = ["B", "A"]; -function eras(length) { - switch (length) { - case "narrow": - return [].concat(erasNarrow); - - case "short": - return [].concat(erasShort); - - case "long": - return [].concat(erasLong); - - default: - return null; - } -} -function meridiemForDateTime(dt) { - return meridiems[dt.hour < 12 ? 0 : 1]; -} -function weekdayForDateTime(dt, length) { - return weekdays(length)[dt.weekday - 1]; -} -function monthForDateTime(dt, length) { - return months(length)[dt.month - 1]; -} -function eraForDateTime(dt, length) { - return eras(length)[dt.year < 0 ? 0 : 1]; -} -function formatRelativeTime(unit, count, numeric, narrow) { - if (numeric === void 0) { - numeric = "always"; - } - - if (narrow === void 0) { - narrow = false; - } - - var units = { - years: ["year", "yr."], - quarters: ["quarter", "qtr."], - months: ["month", "mo."], - weeks: ["week", "wk."], - days: ["day", "day", "days"], - hours: ["hour", "hr."], - minutes: ["minute", "min."], - seconds: ["second", "sec."] - }; - var lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1; - - if (numeric === "auto" && lastable) { - var isDay = unit === "days"; - - switch (count) { - case 1: - return isDay ? "tomorrow" : "next " + units[unit][0]; - - case -1: - return isDay ? "yesterday" : "last " + units[unit][0]; - - case 0: - return isDay ? "today" : "this " + units[unit][0]; - - } - } - - var isInPast = Object.is(count, -0) || count < 0, - fmtValue = Math.abs(count), - singular = fmtValue === 1, - lilUnits = units[unit], - fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit; - return isInPast ? fmtValue + " " + fmtUnit + " ago" : "in " + fmtValue + " " + fmtUnit; -} - -function stringifyTokens(splits, tokenToString) { - var s = ""; - - for (var _iterator = _createForOfIteratorHelperLoose(splits), _step; !(_step = _iterator()).done;) { - var token = _step.value; - - if (token.literal) { - s += token.val; - } else { - s += tokenToString(token.val); - } - } - - return s; -} - -var _macroTokenToFormatOpts = { - D: DATE_SHORT, - DD: DATE_MED, - DDD: DATE_FULL, - DDDD: DATE_HUGE, - t: TIME_SIMPLE, - tt: TIME_WITH_SECONDS, - ttt: TIME_WITH_SHORT_OFFSET, - tttt: TIME_WITH_LONG_OFFSET, - T: TIME_24_SIMPLE, - TT: TIME_24_WITH_SECONDS, - TTT: TIME_24_WITH_SHORT_OFFSET, - TTTT: TIME_24_WITH_LONG_OFFSET, - f: DATETIME_SHORT, - ff: DATETIME_MED, - fff: DATETIME_FULL, - ffff: DATETIME_HUGE, - F: DATETIME_SHORT_WITH_SECONDS, - FF: DATETIME_MED_WITH_SECONDS, - FFF: DATETIME_FULL_WITH_SECONDS, - FFFF: DATETIME_HUGE_WITH_SECONDS -}; -/** - * @private - */ - -var Formatter = /*#__PURE__*/function () { - Formatter.create = function create(locale, opts) { - if (opts === void 0) { - opts = {}; - } - - return new Formatter(locale, opts); - }; - - Formatter.parseFormat = function parseFormat(fmt) { - var current = null, - currentFull = "", - bracketed = false; - var splits = []; - - for (var i = 0; i < fmt.length; i++) { - var c = fmt.charAt(i); - - if (c === "'") { - if (currentFull.length > 0) { - splits.push({ - literal: bracketed, - val: currentFull - }); - } - - current = null; - currentFull = ""; - bracketed = !bracketed; - } else if (bracketed) { - currentFull += c; - } else if (c === current) { - currentFull += c; - } else { - if (currentFull.length > 0) { - splits.push({ - literal: false, - val: currentFull - }); - } - - currentFull = c; - current = c; - } - } - - if (currentFull.length > 0) { - splits.push({ - literal: bracketed, - val: currentFull - }); - } - - return splits; - }; - - Formatter.macroTokenToFormatOpts = function macroTokenToFormatOpts(token) { - return _macroTokenToFormatOpts[token]; - }; - - function Formatter(locale, formatOpts) { - this.opts = formatOpts; - this.loc = locale; - this.systemLoc = null; - } - - var _proto = Formatter.prototype; - - _proto.formatWithSystemDefault = function formatWithSystemDefault(dt, opts) { - if (this.systemLoc === null) { - this.systemLoc = this.loc.redefaultToSystem(); - } - - var df = this.systemLoc.dtFormatter(dt, _extends({}, this.opts, opts)); - return df.format(); - }; - - _proto.formatDateTime = function formatDateTime(dt, opts) { - if (opts === void 0) { - opts = {}; - } - - var df = this.loc.dtFormatter(dt, _extends({}, this.opts, opts)); - return df.format(); - }; - - _proto.formatDateTimeParts = function formatDateTimeParts(dt, opts) { - if (opts === void 0) { - opts = {}; - } - - var df = this.loc.dtFormatter(dt, _extends({}, this.opts, opts)); - return df.formatToParts(); - }; - - _proto.resolvedOptions = function resolvedOptions(dt, opts) { - if (opts === void 0) { - opts = {}; - } - - var df = this.loc.dtFormatter(dt, _extends({}, this.opts, opts)); - return df.resolvedOptions(); - }; - - _proto.num = function num(n, p) { - if (p === void 0) { - p = 0; - } - - // we get some perf out of doing this here, annoyingly - if (this.opts.forceSimple) { - return padStart(n, p); - } - - var opts = _extends({}, this.opts); - - if (p > 0) { - opts.padTo = p; - } - - return this.loc.numberFormatter(opts).format(n); - }; - - _proto.formatDateTimeFromString = function formatDateTimeFromString(dt, fmt) { - var _this = this; - - var knownEnglish = this.loc.listingMode() === "en", - useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory", - string = function string(opts, extract) { - return _this.loc.extract(dt, opts, extract); - }, - formatOffset = function formatOffset(opts) { - if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) { - return "Z"; - } - - return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : ""; - }, - meridiem = function meridiem() { - return knownEnglish ? meridiemForDateTime(dt) : string({ - hour: "numeric", - hourCycle: "h12" - }, "dayperiod"); - }, - month = function month(length, standalone) { - return knownEnglish ? monthForDateTime(dt, length) : string(standalone ? { - month: length - } : { - month: length, - day: "numeric" - }, "month"); - }, - weekday = function weekday(length, standalone) { - return knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? { - weekday: length - } : { - weekday: length, - month: "long", - day: "numeric" - }, "weekday"); - }, - maybeMacro = function maybeMacro(token) { - var formatOpts = Formatter.macroTokenToFormatOpts(token); - - if (formatOpts) { - return _this.formatWithSystemDefault(dt, formatOpts); - } else { - return token; - } - }, - era = function era(length) { - return knownEnglish ? eraForDateTime(dt, length) : string({ - era: length - }, "era"); - }, - tokenToString = function tokenToString(token) { - // Where possible: http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles - switch (token) { - // ms - case "S": - return _this.num(dt.millisecond); - - case "u": // falls through - - case "SSS": - return _this.num(dt.millisecond, 3); - // seconds - - case "s": - return _this.num(dt.second); - - case "ss": - return _this.num(dt.second, 2); - // fractional seconds - - case "uu": - return _this.num(Math.floor(dt.millisecond / 10), 2); - - case "uuu": - return _this.num(Math.floor(dt.millisecond / 100)); - // minutes - - case "m": - return _this.num(dt.minute); - - case "mm": - return _this.num(dt.minute, 2); - // hours - - case "h": - return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12); - - case "hh": - return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2); - - case "H": - return _this.num(dt.hour); - - case "HH": - return _this.num(dt.hour, 2); - // offset - - case "Z": - // like +6 - return formatOffset({ - format: "narrow", - allowZ: _this.opts.allowZ - }); - - case "ZZ": - // like +06:00 - return formatOffset({ - format: "short", - allowZ: _this.opts.allowZ - }); - - case "ZZZ": - // like +0600 - return formatOffset({ - format: "techie", - allowZ: _this.opts.allowZ - }); - - case "ZZZZ": - // like EST - return dt.zone.offsetName(dt.ts, { - format: "short", - locale: _this.loc.locale - }); - - case "ZZZZZ": - // like Eastern Standard Time - return dt.zone.offsetName(dt.ts, { - format: "long", - locale: _this.loc.locale - }); - // zone - - case "z": - // like America/New_York - return dt.zoneName; - // meridiems - - case "a": - return meridiem(); - // dates - - case "d": - return useDateTimeFormatter ? string({ - day: "numeric" - }, "day") : _this.num(dt.day); - - case "dd": - return useDateTimeFormatter ? string({ - day: "2-digit" - }, "day") : _this.num(dt.day, 2); - // weekdays - standalone - - case "c": - // like 1 - return _this.num(dt.weekday); - - case "ccc": - // like 'Tues' - return weekday("short", true); - - case "cccc": - // like 'Tuesday' - return weekday("long", true); - - case "ccccc": - // like 'T' - return weekday("narrow", true); - // weekdays - format - - case "E": - // like 1 - return _this.num(dt.weekday); - - case "EEE": - // like 'Tues' - return weekday("short", false); - - case "EEEE": - // like 'Tuesday' - return weekday("long", false); - - case "EEEEE": - // like 'T' - return weekday("narrow", false); - // months - standalone - - case "L": - // like 1 - return useDateTimeFormatter ? string({ - month: "numeric", - day: "numeric" - }, "month") : _this.num(dt.month); - - case "LL": - // like 01, doesn't seem to work - return useDateTimeFormatter ? string({ - month: "2-digit", - day: "numeric" - }, "month") : _this.num(dt.month, 2); - - case "LLL": - // like Jan - return month("short", true); - - case "LLLL": - // like January - return month("long", true); - - case "LLLLL": - // like J - return month("narrow", true); - // months - format - - case "M": - // like 1 - return useDateTimeFormatter ? string({ - month: "numeric" - }, "month") : _this.num(dt.month); - - case "MM": - // like 01 - return useDateTimeFormatter ? string({ - month: "2-digit" - }, "month") : _this.num(dt.month, 2); - - case "MMM": - // like Jan - return month("short", false); - - case "MMMM": - // like January - return month("long", false); - - case "MMMMM": - // like J - return month("narrow", false); - // years - - case "y": - // like 2014 - return useDateTimeFormatter ? string({ - year: "numeric" - }, "year") : _this.num(dt.year); - - case "yy": - // like 14 - return useDateTimeFormatter ? string({ - year: "2-digit" - }, "year") : _this.num(dt.year.toString().slice(-2), 2); - - case "yyyy": - // like 0012 - return useDateTimeFormatter ? string({ - year: "numeric" - }, "year") : _this.num(dt.year, 4); - - case "yyyyyy": - // like 000012 - return useDateTimeFormatter ? string({ - year: "numeric" - }, "year") : _this.num(dt.year, 6); - // eras - - case "G": - // like AD - return era("short"); - - case "GG": - // like Anno Domini - return era("long"); - - case "GGGGG": - return era("narrow"); - - case "kk": - return _this.num(dt.weekYear.toString().slice(-2), 2); - - case "kkkk": - return _this.num(dt.weekYear, 4); - - case "W": - return _this.num(dt.weekNumber); - - case "WW": - return _this.num(dt.weekNumber, 2); - - case "o": - return _this.num(dt.ordinal); - - case "ooo": - return _this.num(dt.ordinal, 3); - - case "q": - // like 1 - return _this.num(dt.quarter); - - case "qq": - // like 01 - return _this.num(dt.quarter, 2); - - case "X": - return _this.num(Math.floor(dt.ts / 1000)); - - case "x": - return _this.num(dt.ts); - - default: - return maybeMacro(token); - } - }; - - return stringifyTokens(Formatter.parseFormat(fmt), tokenToString); - }; - - _proto.formatDurationFromString = function formatDurationFromString(dur, fmt) { - var _this2 = this; - - var tokenToField = function tokenToField(token) { - switch (token[0]) { - case "S": - return "millisecond"; - - case "s": - return "second"; - - case "m": - return "minute"; - - case "h": - return "hour"; - - case "d": - return "day"; - - case "M": - return "month"; - - case "y": - return "year"; - - default: - return null; - } - }, - tokenToString = function tokenToString(lildur) { - return function (token) { - var mapped = tokenToField(token); - - if (mapped) { - return _this2.num(lildur.get(mapped), token.length); - } else { - return token; - } - }; - }, - tokens = Formatter.parseFormat(fmt), - realTokens = tokens.reduce(function (found, _ref) { - var literal = _ref.literal, - val = _ref.val; - return literal ? found : found.concat(val); - }, []), - collapsed = dur.shiftTo.apply(dur, realTokens.map(tokenToField).filter(function (t) { - return t; - })); - - return stringifyTokens(tokens, tokenToString(collapsed)); - }; - - return Formatter; -}(); - -var Invalid = /*#__PURE__*/function () { - function Invalid(reason, explanation) { - this.reason = reason; - this.explanation = explanation; - } - - var _proto = Invalid.prototype; - - _proto.toMessage = function toMessage() { - if (this.explanation) { - return this.reason + ": " + this.explanation; - } else { - return this.reason; - } - }; - - return Invalid; -}(); - -/** - * @interface - */ - -var Zone = /*#__PURE__*/function () { - function Zone() {} - - var _proto = Zone.prototype; - - /** - * Returns the offset's common name (such as EST) at the specified timestamp - * @abstract - * @param {number} ts - Epoch milliseconds for which to get the name - * @param {Object} opts - Options to affect the format - * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. - * @param {string} opts.locale - What locale to return the offset name in. - * @return {string} - */ - _proto.offsetName = function offsetName(ts, opts) { - throw new ZoneIsAbstractError(); - } - /** - * Returns the offset's value as a string - * @abstract - * @param {number} ts - Epoch milliseconds for which to get the offset - * @param {string} format - What style of offset to return. - * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively - * @return {string} - */ - ; - - _proto.formatOffset = function formatOffset(ts, format) { - throw new ZoneIsAbstractError(); - } - /** - * Return the offset in minutes for this zone at the specified timestamp. - * @abstract - * @param {number} ts - Epoch milliseconds for which to compute the offset - * @return {number} - */ - ; - - _proto.offset = function offset(ts) { - throw new ZoneIsAbstractError(); - } - /** - * Return whether this Zone is equal to another zone - * @abstract - * @param {Zone} otherZone - the zone to compare - * @return {boolean} - */ - ; - - _proto.equals = function equals(otherZone) { - throw new ZoneIsAbstractError(); - } - /** - * Return whether this Zone is valid. - * @abstract - * @type {boolean} - */ - ; - - _createClass(Zone, [{ - key: "type", - get: - /** - * The type of zone - * @abstract - * @type {string} - */ - function get() { - throw new ZoneIsAbstractError(); - } - /** - * The name of this zone. - * @abstract - * @type {string} - */ - - }, { - key: "name", - get: function get() { - throw new ZoneIsAbstractError(); - } - /** - * Returns whether the offset is known to be fixed for the whole year. - * @abstract - * @type {boolean} - */ - - }, { - key: "isUniversal", - get: function get() { - throw new ZoneIsAbstractError(); - } - }, { - key: "isValid", - get: function get() { - throw new ZoneIsAbstractError(); - } - }]); - - return Zone; -}(); - -var singleton$1 = null; -/** - * Represents the local zone for this JavaScript environment. - * @implements {Zone} - */ - -var SystemZone = /*#__PURE__*/function (_Zone) { - _inheritsLoose(SystemZone, _Zone); - - function SystemZone() { - return _Zone.apply(this, arguments) || this; - } - - var _proto = SystemZone.prototype; - - /** @override **/ - _proto.offsetName = function offsetName(ts, _ref) { - var format = _ref.format, - locale = _ref.locale; - return parseZoneInfo(ts, format, locale); - } - /** @override **/ - ; - - _proto.formatOffset = function formatOffset$1(ts, format) { - return formatOffset(this.offset(ts), format); - } - /** @override **/ - ; - - _proto.offset = function offset(ts) { - return -new Date(ts).getTimezoneOffset(); - } - /** @override **/ - ; - - _proto.equals = function equals(otherZone) { - return otherZone.type === "system"; - } - /** @override **/ - ; - - _createClass(SystemZone, [{ - key: "type", - get: - /** @override **/ - function get() { - return "system"; - } - /** @override **/ - - }, { - key: "name", - get: function get() { - return new Intl.DateTimeFormat().resolvedOptions().timeZone; - } - /** @override **/ - - }, { - key: "isUniversal", - get: function get() { - return false; - } - }, { - key: "isValid", - get: function get() { - return true; - } - }], [{ - key: "instance", - get: - /** - * Get a singleton instance of the local zone - * @return {SystemZone} - */ - function get() { - if (singleton$1 === null) { - singleton$1 = new SystemZone(); - } - - return singleton$1; - } - }]); - - return SystemZone; -}(Zone); - -var matchingRegex = RegExp("^" + ianaRegex.source + "$"); -var dtfCache = {}; - -function makeDTF(zone) { - if (!dtfCache[zone]) { - dtfCache[zone] = new Intl.DateTimeFormat("en-US", { - hour12: false, - timeZone: zone, - year: "numeric", - month: "2-digit", - day: "2-digit", - hour: "2-digit", - minute: "2-digit", - second: "2-digit" - }); - } - - return dtfCache[zone]; -} - -var typeToPos = { - year: 0, - month: 1, - day: 2, - hour: 3, - minute: 4, - second: 5 -}; - -function hackyOffset(dtf, date) { - var formatted = dtf.format(date).replace(/\u200E/g, ""), - parsed = /(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(formatted), - fMonth = parsed[1], - fDay = parsed[2], - fYear = parsed[3], - fHour = parsed[4], - fMinute = parsed[5], - fSecond = parsed[6]; - return [fYear, fMonth, fDay, fHour, fMinute, fSecond]; -} - -function partsOffset(dtf, date) { - var formatted = dtf.formatToParts(date), - filled = []; - - for (var i = 0; i < formatted.length; i++) { - var _formatted$i = formatted[i], - type = _formatted$i.type, - value = _formatted$i.value, - pos = typeToPos[type]; - - if (!isUndefined(pos)) { - filled[pos] = parseInt(value, 10); - } - } - - return filled; -} - -var ianaZoneCache = {}; -/** - * A zone identified by an IANA identifier, like America/New_York - * @implements {Zone} - */ - -var IANAZone = /*#__PURE__*/function (_Zone) { - _inheritsLoose(IANAZone, _Zone); - - /** - * @param {string} name - Zone name - * @return {IANAZone} - */ - IANAZone.create = function create(name) { - if (!ianaZoneCache[name]) { - ianaZoneCache[name] = new IANAZone(name); - } - - return ianaZoneCache[name]; - } - /** - * Reset local caches. Should only be necessary in testing scenarios. - * @return {void} - */ - ; - - IANAZone.resetCache = function resetCache() { - ianaZoneCache = {}; - dtfCache = {}; - } - /** - * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that. - * @param {string} s - The string to check validity on - * @example IANAZone.isValidSpecifier("America/New_York") //=> true - * @example IANAZone.isValidSpecifier("Fantasia/Castle") //=> true - * @example IANAZone.isValidSpecifier("Sport~~blorp") //=> false - * @return {boolean} - */ - ; - - IANAZone.isValidSpecifier = function isValidSpecifier(s) { - return !!(s && s.match(matchingRegex)); - } - /** - * Returns whether the provided string identifies a real zone - * @param {string} zone - The string to check - * @example IANAZone.isValidZone("America/New_York") //=> true - * @example IANAZone.isValidZone("Fantasia/Castle") //=> false - * @example IANAZone.isValidZone("Sport~~blorp") //=> false - * @return {boolean} - */ - ; - - IANAZone.isValidZone = function isValidZone(zone) { - if (!zone) { - return false; - } - - try { - new Intl.DateTimeFormat("en-US", { - timeZone: zone - }).format(); - return true; - } catch (e) { - return false; - } - }; - - function IANAZone(name) { - var _this; - - _this = _Zone.call(this) || this; - /** @private **/ - - _this.zoneName = name; - /** @private **/ - - _this.valid = IANAZone.isValidZone(name); - return _this; - } - /** @override **/ - - - var _proto = IANAZone.prototype; - - /** @override **/ - _proto.offsetName = function offsetName(ts, _ref) { - var format = _ref.format, - locale = _ref.locale; - return parseZoneInfo(ts, format, locale, this.name); - } - /** @override **/ - ; - - _proto.formatOffset = function formatOffset$1(ts, format) { - return formatOffset(this.offset(ts), format); - } - /** @override **/ - ; - - _proto.offset = function offset(ts) { - var date = new Date(ts); - if (isNaN(date)) return NaN; - - var dtf = makeDTF(this.name), - _ref2 = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date), - year = _ref2[0], - month = _ref2[1], - day = _ref2[2], - hour = _ref2[3], - minute = _ref2[4], - second = _ref2[5]; // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat - - - var adjustedHour = hour === 24 ? 0 : hour; - var asUTC = objToLocalTS({ - year: year, - month: month, - day: day, - hour: adjustedHour, - minute: minute, - second: second, - millisecond: 0 - }); - var asTS = +date; - var over = asTS % 1000; - asTS -= over >= 0 ? over : 1000 + over; - return (asUTC - asTS) / (60 * 1000); - } - /** @override **/ - ; - - _proto.equals = function equals(otherZone) { - return otherZone.type === "iana" && otherZone.name === this.name; - } - /** @override **/ - ; - - _createClass(IANAZone, [{ - key: "type", - get: function get() { - return "iana"; - } - /** @override **/ - - }, { - key: "name", - get: function get() { - return this.zoneName; - } - /** @override **/ - - }, { - key: "isUniversal", - get: function get() { - return false; - } - }, { - key: "isValid", - get: function get() { - return this.valid; - } - }]); - - return IANAZone; -}(Zone); - -var singleton = null; -/** - * A zone with a fixed offset (meaning no DST) - * @implements {Zone} - */ - -var FixedOffsetZone = /*#__PURE__*/function (_Zone) { - _inheritsLoose(FixedOffsetZone, _Zone); - - /** - * Get an instance with a specified offset - * @param {number} offset - The offset in minutes - * @return {FixedOffsetZone} - */ - FixedOffsetZone.instance = function instance(offset) { - return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset); - } - /** - * Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6" - * @param {string} s - The offset string to parse - * @example FixedOffsetZone.parseSpecifier("UTC+6") - * @example FixedOffsetZone.parseSpecifier("UTC+06") - * @example FixedOffsetZone.parseSpecifier("UTC-6:00") - * @return {FixedOffsetZone} - */ - ; - - FixedOffsetZone.parseSpecifier = function parseSpecifier(s) { - if (s) { - var r = s.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); - - if (r) { - return new FixedOffsetZone(signedOffset(r[1], r[2])); - } - } - - return null; - }; - - function FixedOffsetZone(offset) { - var _this; - - _this = _Zone.call(this) || this; - /** @private **/ - - _this.fixed = offset; - return _this; - } - /** @override **/ - - - var _proto = FixedOffsetZone.prototype; - - /** @override **/ - _proto.offsetName = function offsetName() { - return this.name; - } - /** @override **/ - ; - - _proto.formatOffset = function formatOffset$1(ts, format) { - return formatOffset(this.fixed, format); - } - /** @override **/ - ; - - /** @override **/ - _proto.offset = function offset() { - return this.fixed; - } - /** @override **/ - ; - - _proto.equals = function equals(otherZone) { - return otherZone.type === "fixed" && otherZone.fixed === this.fixed; - } - /** @override **/ - ; - - _createClass(FixedOffsetZone, [{ - key: "type", - get: function get() { - return "fixed"; - } - /** @override **/ - - }, { - key: "name", - get: function get() { - return this.fixed === 0 ? "UTC" : "UTC" + formatOffset(this.fixed, "narrow"); - } - }, { - key: "isUniversal", - get: function get() { - return true; - } - }, { - key: "isValid", - get: function get() { - return true; - } - }], [{ - key: "utcInstance", - get: - /** - * Get a singleton instance of UTC - * @return {FixedOffsetZone} - */ - function get() { - if (singleton === null) { - singleton = new FixedOffsetZone(0); - } - - return singleton; - } - }]); - - return FixedOffsetZone; -}(Zone); - -/** - * A zone that failed to parse. You should never need to instantiate this. - * @implements {Zone} - */ - -var InvalidZone = /*#__PURE__*/function (_Zone) { - _inheritsLoose(InvalidZone, _Zone); - - function InvalidZone(zoneName) { - var _this; - - _this = _Zone.call(this) || this; - /** @private */ - - _this.zoneName = zoneName; - return _this; - } - /** @override **/ - - - var _proto = InvalidZone.prototype; - - /** @override **/ - _proto.offsetName = function offsetName() { - return null; - } - /** @override **/ - ; - - _proto.formatOffset = function formatOffset() { - return ""; - } - /** @override **/ - ; - - _proto.offset = function offset() { - return NaN; - } - /** @override **/ - ; - - _proto.equals = function equals() { - return false; - } - /** @override **/ - ; - - _createClass(InvalidZone, [{ - key: "type", - get: function get() { - return "invalid"; - } - /** @override **/ - - }, { - key: "name", - get: function get() { - return this.zoneName; - } - /** @override **/ - - }, { - key: "isUniversal", - get: function get() { - return false; - } - }, { - key: "isValid", - get: function get() { - return false; - } - }]); - - return InvalidZone; -}(Zone); - -/** - * @private - */ -function normalizeZone(input, defaultZone) { - - if (isUndefined(input) || input === null) { - return defaultZone; - } else if (input instanceof Zone) { - return input; - } else if (isString(input)) { - var lowered = input.toLowerCase(); - if (lowered === "local" || lowered === "system") return defaultZone;else if (lowered === "utc" || lowered === "gmt") return FixedOffsetZone.utcInstance;else if (IANAZone.isValidSpecifier(lowered)) return IANAZone.create(input);else return FixedOffsetZone.parseSpecifier(lowered) || new InvalidZone(input); - } else if (isNumber(input)) { - return FixedOffsetZone.instance(input); - } else if (typeof input === "object" && input.offset && typeof input.offset === "number") { - // This is dumb, but the instanceof check above doesn't seem to really work - // so we're duck checking it - return input; - } else { - return new InvalidZone(input); - } -} - -var now = function now() { - return Date.now(); -}, - defaultZone = "system", - defaultLocale = null, - defaultNumberingSystem = null, - defaultOutputCalendar = null, - throwOnInvalid; -/** - * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here. - */ - - -var Settings = /*#__PURE__*/function () { - function Settings() {} - - /** - * Reset Luxon's global caches. Should only be necessary in testing scenarios. - * @return {void} - */ - Settings.resetCaches = function resetCaches() { - Locale.resetCache(); - IANAZone.resetCache(); - }; - - _createClass(Settings, null, [{ - key: "now", - get: - /** - * Get the callback for returning the current timestamp. - * @type {function} - */ - function get() { - return now; - } - /** - * Set the callback for returning the current timestamp. - * The function should return a number, which will be interpreted as an Epoch millisecond count - * @type {function} - * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future - * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time - */ - , - set: function set(n) { - now = n; - } - /** - * Set the default time zone to create DateTimes in. Does not affect existing instances. - * Use the value "system" to reset this value to the system's time zone. - * @type {string} - */ - - }, { - key: "defaultZone", - get: - /** - * Get the default time zone object currently used to create DateTimes. Does not affect existing instances. - * The default value is the system's time zone (the one set on the machine that runs this code). - * @type {Zone} - */ - function get() { - return normalizeZone(defaultZone, SystemZone.instance); - } - /** - * Get the default locale to create DateTimes with. Does not affect existing instances. - * @type {string} - */ - , - set: function set(zone) { - defaultZone = zone; - } - }, { - key: "defaultLocale", - get: function get() { - return defaultLocale; - } - /** - * Set the default locale to create DateTimes with. Does not affect existing instances. - * @type {string} - */ - , - set: function set(locale) { - defaultLocale = locale; - } - /** - * Get the default numbering system to create DateTimes with. Does not affect existing instances. - * @type {string} - */ - - }, { - key: "defaultNumberingSystem", - get: function get() { - return defaultNumberingSystem; - } - /** - * Set the default numbering system to create DateTimes with. Does not affect existing instances. - * @type {string} - */ - , - set: function set(numberingSystem) { - defaultNumberingSystem = numberingSystem; - } - /** - * Get the default output calendar to create DateTimes with. Does not affect existing instances. - * @type {string} - */ - - }, { - key: "defaultOutputCalendar", - get: function get() { - return defaultOutputCalendar; - } - /** - * Set the default output calendar to create DateTimes with. Does not affect existing instances. - * @type {string} - */ - , - set: function set(outputCalendar) { - defaultOutputCalendar = outputCalendar; - } - /** - * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals - * @type {boolean} - */ - - }, { - key: "throwOnInvalid", - get: function get() { - return throwOnInvalid; - } - /** - * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals - * @type {boolean} - */ - , - set: function set(t) { - throwOnInvalid = t; - } - }]); - - return Settings; -}(); - -var _excluded = ["base"]; -var intlDTCache = {}; - -function getCachedDTF(locString, opts) { - if (opts === void 0) { - opts = {}; - } - - var key = JSON.stringify([locString, opts]); - var dtf = intlDTCache[key]; - - if (!dtf) { - dtf = new Intl.DateTimeFormat(locString, opts); - intlDTCache[key] = dtf; - } - - return dtf; -} - -var intlNumCache = {}; - -function getCachedINF(locString, opts) { - if (opts === void 0) { - opts = {}; - } - - var key = JSON.stringify([locString, opts]); - var inf = intlNumCache[key]; - - if (!inf) { - inf = new Intl.NumberFormat(locString, opts); - intlNumCache[key] = inf; - } - - return inf; -} - -var intlRelCache = {}; - -function getCachedRTF(locString, opts) { - if (opts === void 0) { - opts = {}; - } - - var _opts = opts; - _opts.base; - var cacheKeyOpts = _objectWithoutPropertiesLoose(_opts, _excluded); // exclude `base` from the options - - - var key = JSON.stringify([locString, cacheKeyOpts]); - var inf = intlRelCache[key]; - - if (!inf) { - inf = new Intl.RelativeTimeFormat(locString, opts); - intlRelCache[key] = inf; - } - - return inf; -} - -var sysLocaleCache = null; - -function systemLocale() { - if (sysLocaleCache) { - return sysLocaleCache; - } else { - sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale; - return sysLocaleCache; - } -} - -function parseLocaleString(localeStr) { - // I really want to avoid writing a BCP 47 parser - // see, e.g. https://github.com/wooorm/bcp-47 - // Instead, we'll do this: - // a) if the string has no -u extensions, just leave it alone - // b) if it does, use Intl to resolve everything - // c) if Intl fails, try again without the -u - var uIndex = localeStr.indexOf("-u-"); - - if (uIndex === -1) { - return [localeStr]; - } else { - var options; - var smaller = localeStr.substring(0, uIndex); - - try { - options = getCachedDTF(localeStr).resolvedOptions(); - } catch (e) { - options = getCachedDTF(smaller).resolvedOptions(); - } - - var _options = options, - numberingSystem = _options.numberingSystem, - calendar = _options.calendar; // return the smaller one so that we can append the calendar and numbering overrides to it - - return [smaller, numberingSystem, calendar]; - } -} - -function intlConfigString(localeStr, numberingSystem, outputCalendar) { - if (outputCalendar || numberingSystem) { - localeStr += "-u"; - - if (outputCalendar) { - localeStr += "-ca-" + outputCalendar; - } - - if (numberingSystem) { - localeStr += "-nu-" + numberingSystem; - } - - return localeStr; - } else { - return localeStr; - } -} - -function mapMonths(f) { - var ms = []; - - for (var i = 1; i <= 12; i++) { - var dt = DateTime.utc(2016, i, 1); - ms.push(f(dt)); - } - - return ms; -} - -function mapWeekdays(f) { - var ms = []; - - for (var i = 1; i <= 7; i++) { - var dt = DateTime.utc(2016, 11, 13 + i); - ms.push(f(dt)); - } - - return ms; -} - -function listStuff(loc, length, defaultOK, englishFn, intlFn) { - var mode = loc.listingMode(defaultOK); - - if (mode === "error") { - return null; - } else if (mode === "en") { - return englishFn(length); - } else { - return intlFn(length); - } -} - -function supportsFastNumbers(loc) { - if (loc.numberingSystem && loc.numberingSystem !== "latn") { - return false; - } else { - return loc.numberingSystem === "latn" || !loc.locale || loc.locale.startsWith("en") || new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === "latn"; - } -} -/** - * @private - */ - - -var PolyNumberFormatter = /*#__PURE__*/function () { - function PolyNumberFormatter(intl, forceSimple, opts) { - this.padTo = opts.padTo || 0; - this.floor = opts.floor || false; - - if (!forceSimple) { - var intlOpts = { - useGrouping: false - }; - if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo; - this.inf = getCachedINF(intl, intlOpts); - } - } - - var _proto = PolyNumberFormatter.prototype; - - _proto.format = function format(i) { - if (this.inf) { - var fixed = this.floor ? Math.floor(i) : i; - return this.inf.format(fixed); - } else { - // to match the browser's numberformatter defaults - var _fixed = this.floor ? Math.floor(i) : roundTo(i, 3); - - return padStart(_fixed, this.padTo); - } - }; - - return PolyNumberFormatter; -}(); -/** - * @private - */ - - -var PolyDateFormatter = /*#__PURE__*/function () { - function PolyDateFormatter(dt, intl, opts) { - this.opts = opts; - var z; - - if (dt.zone.isUniversal) { - // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like. - // That is why fixed-offset TZ is set to that unless it is: - // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT. - // 2. Unsupported by the browser: - // - some do not support Etc/ - // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata - var gmtOffset = -1 * (dt.offset / 60); - var offsetZ = gmtOffset >= 0 ? "Etc/GMT+" + gmtOffset : "Etc/GMT" + gmtOffset; - - if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) { - z = offsetZ; - this.dt = dt; - } else { - // Not all fixed-offset zones like Etc/+4:30 are present in tzdata. - // So we have to make do. Two cases: - // 1. The format options tell us to show the zone. We can't do that, so the best - // we can do is format the date in UTC. - // 2. The format options don't tell us to show the zone. Then we can adjust them - // the time and tell the formatter to show it to us in UTC, so that the time is right - // and the bad zone doesn't show up. - z = "UTC"; - - if (opts.timeZoneName) { - this.dt = dt; - } else { - this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000); - } - } - } else if (dt.zone.type === "system") { - this.dt = dt; - } else { - this.dt = dt; - z = dt.zone.name; - } - - var intlOpts = _extends({}, this.opts); - - if (z) { - intlOpts.timeZone = z; - } - - this.dtf = getCachedDTF(intl, intlOpts); - } - - var _proto2 = PolyDateFormatter.prototype; - - _proto2.format = function format() { - return this.dtf.format(this.dt.toJSDate()); - }; - - _proto2.formatToParts = function formatToParts() { - return this.dtf.formatToParts(this.dt.toJSDate()); - }; - - _proto2.resolvedOptions = function resolvedOptions() { - return this.dtf.resolvedOptions(); - }; - - return PolyDateFormatter; -}(); -/** - * @private - */ - - -var PolyRelFormatter = /*#__PURE__*/function () { - function PolyRelFormatter(intl, isEnglish, opts) { - this.opts = _extends({ - style: "long" - }, opts); - - if (!isEnglish && hasRelative()) { - this.rtf = getCachedRTF(intl, opts); - } - } - - var _proto3 = PolyRelFormatter.prototype; - - _proto3.format = function format(count, unit) { - if (this.rtf) { - return this.rtf.format(count, unit); - } else { - return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long"); - } - }; - - _proto3.formatToParts = function formatToParts(count, unit) { - if (this.rtf) { - return this.rtf.formatToParts(count, unit); - } else { - return []; - } - }; - - return PolyRelFormatter; -}(); -/** - * @private - */ - - -var Locale = /*#__PURE__*/function () { - Locale.fromOpts = function fromOpts(opts) { - return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN); - }; - - Locale.create = function create(locale, numberingSystem, outputCalendar, defaultToEN) { - if (defaultToEN === void 0) { - defaultToEN = false; - } - - var specifiedLocale = locale || Settings.defaultLocale; // the system locale is useful for human readable strings but annoying for parsing/formatting known formats - - var localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()); - var numberingSystemR = numberingSystem || Settings.defaultNumberingSystem; - var outputCalendarR = outputCalendar || Settings.defaultOutputCalendar; - return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale); - }; - - Locale.resetCache = function resetCache() { - sysLocaleCache = null; - intlDTCache = {}; - intlNumCache = {}; - intlRelCache = {}; - }; - - Locale.fromObject = function fromObject(_temp) { - var _ref = _temp === void 0 ? {} : _temp, - locale = _ref.locale, - numberingSystem = _ref.numberingSystem, - outputCalendar = _ref.outputCalendar; - - return Locale.create(locale, numberingSystem, outputCalendar); - }; - - function Locale(locale, numbering, outputCalendar, specifiedLocale) { - var _parseLocaleString = parseLocaleString(locale), - parsedLocale = _parseLocaleString[0], - parsedNumberingSystem = _parseLocaleString[1], - parsedOutputCalendar = _parseLocaleString[2]; - - this.locale = parsedLocale; - this.numberingSystem = numbering || parsedNumberingSystem || null; - this.outputCalendar = outputCalendar || parsedOutputCalendar || null; - this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar); - this.weekdaysCache = { - format: {}, - standalone: {} - }; - this.monthsCache = { - format: {}, - standalone: {} - }; - this.meridiemCache = null; - this.eraCache = {}; - this.specifiedLocale = specifiedLocale; - this.fastNumbersCached = null; - } - - var _proto4 = Locale.prototype; - - _proto4.listingMode = function listingMode(defaultOK) { - - var isActuallyEn = this.isEnglish(); - var hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === "latn") && (this.outputCalendar === null || this.outputCalendar === "gregory"); - return isActuallyEn && hasNoWeirdness ? "en" : "intl"; - }; - - _proto4.clone = function clone(alts) { - if (!alts || Object.getOwnPropertyNames(alts).length === 0) { - return this; - } else { - return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, alts.defaultToEN || false); - } - }; - - _proto4.redefaultToEN = function redefaultToEN(alts) { - if (alts === void 0) { - alts = {}; - } - - return this.clone(_extends({}, alts, { - defaultToEN: true - })); - }; - - _proto4.redefaultToSystem = function redefaultToSystem(alts) { - if (alts === void 0) { - alts = {}; - } - - return this.clone(_extends({}, alts, { - defaultToEN: false - })); - }; - - _proto4.months = function months$1(length, format, defaultOK) { - var _this = this; - - if (format === void 0) { - format = false; - } - - if (defaultOK === void 0) { - defaultOK = true; - } - - return listStuff(this, length, defaultOK, months, function () { - var intl = format ? { - month: length, - day: "numeric" - } : { - month: length - }, - formatStr = format ? "format" : "standalone"; - - if (!_this.monthsCache[formatStr][length]) { - _this.monthsCache[formatStr][length] = mapMonths(function (dt) { - return _this.extract(dt, intl, "month"); - }); - } - - return _this.monthsCache[formatStr][length]; - }); - }; - - _proto4.weekdays = function weekdays$1(length, format, defaultOK) { - var _this2 = this; - - if (format === void 0) { - format = false; - } - - if (defaultOK === void 0) { - defaultOK = true; - } - - return listStuff(this, length, defaultOK, weekdays, function () { - var intl = format ? { - weekday: length, - year: "numeric", - month: "long", - day: "numeric" - } : { - weekday: length - }, - formatStr = format ? "format" : "standalone"; - - if (!_this2.weekdaysCache[formatStr][length]) { - _this2.weekdaysCache[formatStr][length] = mapWeekdays(function (dt) { - return _this2.extract(dt, intl, "weekday"); - }); - } - - return _this2.weekdaysCache[formatStr][length]; - }); - }; - - _proto4.meridiems = function meridiems$1(defaultOK) { - var _this3 = this; - - if (defaultOK === void 0) { - defaultOK = true; - } - - return listStuff(this, undefined, defaultOK, function () { - return meridiems; - }, function () { - // In theory there could be aribitrary day periods. We're gonna assume there are exactly two - // for AM and PM. This is probably wrong, but it's makes parsing way easier. - if (!_this3.meridiemCache) { - var intl = { - hour: "numeric", - hourCycle: "h12" - }; - _this3.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(function (dt) { - return _this3.extract(dt, intl, "dayperiod"); - }); - } - - return _this3.meridiemCache; - }); - }; - - _proto4.eras = function eras$1(length, defaultOK) { - var _this4 = this; - - if (defaultOK === void 0) { - defaultOK = true; - } - - return listStuff(this, length, defaultOK, eras, function () { - var intl = { - era: length - }; // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates - // to definitely enumerate them. - - if (!_this4.eraCache[length]) { - _this4.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(function (dt) { - return _this4.extract(dt, intl, "era"); - }); - } - - return _this4.eraCache[length]; - }); - }; - - _proto4.extract = function extract(dt, intlOpts, field) { - var df = this.dtFormatter(dt, intlOpts), - results = df.formatToParts(), - matching = results.find(function (m) { - return m.type.toLowerCase() === field; - }); - return matching ? matching.value : null; - }; - - _proto4.numberFormatter = function numberFormatter(opts) { - if (opts === void 0) { - opts = {}; - } - - // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave) - // (in contrast, the rest of the condition is used heavily) - return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts); - }; - - _proto4.dtFormatter = function dtFormatter(dt, intlOpts) { - if (intlOpts === void 0) { - intlOpts = {}; - } - - return new PolyDateFormatter(dt, this.intl, intlOpts); - }; - - _proto4.relFormatter = function relFormatter(opts) { - if (opts === void 0) { - opts = {}; - } - - return new PolyRelFormatter(this.intl, this.isEnglish(), opts); - }; - - _proto4.isEnglish = function isEnglish() { - return this.locale === "en" || this.locale.toLowerCase() === "en-us" || new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us"); - }; - - _proto4.equals = function equals(other) { - return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar; - }; - - _createClass(Locale, [{ - key: "fastNumbers", - get: function get() { - if (this.fastNumbersCached == null) { - this.fastNumbersCached = supportsFastNumbers(this); - } - - return this.fastNumbersCached; - } - }]); - - return Locale; -}(); - -/* - * This file handles parsing for well-specified formats. Here's how it works: - * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match. - * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object - * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence. - * Extractors can take a "cursor" representing the offset in the match to look at. This makes it easy to combine extractors. - * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions. - * Some extractions are super dumb and simpleParse and fromStrings help DRY them. - */ - -function combineRegexes() { - for (var _len = arguments.length, regexes = new Array(_len), _key = 0; _key < _len; _key++) { - regexes[_key] = arguments[_key]; - } - - var full = regexes.reduce(function (f, r) { - return f + r.source; - }, ""); - return RegExp("^" + full + "$"); -} - -function combineExtractors() { - for (var _len2 = arguments.length, extractors = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - extractors[_key2] = arguments[_key2]; - } - - return function (m) { - return extractors.reduce(function (_ref, ex) { - var mergedVals = _ref[0], - mergedZone = _ref[1], - cursor = _ref[2]; - - var _ex = ex(m, cursor), - val = _ex[0], - zone = _ex[1], - next = _ex[2]; - - return [_extends({}, mergedVals, val), mergedZone || zone, next]; - }, [{}, null, 1]).slice(0, 2); - }; -} - -function parse(s) { - if (s == null) { - return [null, null]; - } - - for (var _len3 = arguments.length, patterns = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { - patterns[_key3 - 1] = arguments[_key3]; - } - - for (var _i = 0, _patterns = patterns; _i < _patterns.length; _i++) { - var _patterns$_i = _patterns[_i], - regex = _patterns$_i[0], - extractor = _patterns$_i[1]; - var m = regex.exec(s); - - if (m) { - return extractor(m); - } - } - - return [null, null]; -} - -function simpleParse() { - for (var _len4 = arguments.length, keys = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - keys[_key4] = arguments[_key4]; - } - - return function (match, cursor) { - var ret = {}; - var i; - - for (i = 0; i < keys.length; i++) { - ret[keys[i]] = parseInteger(match[cursor + i]); - } - - return [ret, null, cursor + i]; - }; -} // ISO and SQL parsing - - -var offsetRegex = /(?:(Z)|([+-]\d\d)(?::?(\d\d))?)/, - isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/, - isoTimeRegex = RegExp("" + isoTimeBaseRegex.source + offsetRegex.source + "?"), - isoTimeExtensionRegex = RegExp("(?:T" + isoTimeRegex.source + ")?"), - isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/, - isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/, - isoOrdinalRegex = /(\d{4})-?(\d{3})/, - extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay"), - extractISOOrdinalData = simpleParse("year", "ordinal"), - sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/, - // dumbed-down version of the ISO one -sqlTimeRegex = RegExp(isoTimeBaseRegex.source + " ?(?:" + offsetRegex.source + "|(" + ianaRegex.source + "))?"), - sqlTimeExtensionRegex = RegExp("(?: " + sqlTimeRegex.source + ")?"); - -function int(match, pos, fallback) { - var m = match[pos]; - return isUndefined(m) ? fallback : parseInteger(m); -} - -function extractISOYmd(match, cursor) { - var item = { - year: int(match, cursor), - month: int(match, cursor + 1, 1), - day: int(match, cursor + 2, 1) - }; - return [item, null, cursor + 3]; -} - -function extractISOTime(match, cursor) { - var item = { - hours: int(match, cursor, 0), - minutes: int(match, cursor + 1, 0), - seconds: int(match, cursor + 2, 0), - milliseconds: parseMillis(match[cursor + 3]) - }; - return [item, null, cursor + 4]; -} - -function extractISOOffset(match, cursor) { - var local = !match[cursor] && !match[cursor + 1], - fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]), - zone = local ? null : FixedOffsetZone.instance(fullOffset); - return [{}, zone, cursor + 3]; -} - -function extractIANAZone(match, cursor) { - var zone = match[cursor] ? IANAZone.create(match[cursor]) : null; - return [{}, zone, cursor + 1]; -} // ISO time parsing - - -var isoTimeOnly = RegExp("^T?" + isoTimeBaseRegex.source + "$"); // ISO duration parsing - -var isoDuration = /^-?P(?:(?:(-?\d{1,9}(?:\.\d{1,9})?)Y)?(?:(-?\d{1,9}(?:\.\d{1,9})?)M)?(?:(-?\d{1,9}(?:\.\d{1,9})?)W)?(?:(-?\d{1,9}(?:\.\d{1,9})?)D)?(?:T(?:(-?\d{1,9}(?:\.\d{1,9})?)H)?(?:(-?\d{1,9}(?:\.\d{1,9})?)M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,9}))?S)?)?)$/; - -function extractISODuration(match) { - var s = match[0], - yearStr = match[1], - monthStr = match[2], - weekStr = match[3], - dayStr = match[4], - hourStr = match[5], - minuteStr = match[6], - secondStr = match[7], - millisecondsStr = match[8]; - var hasNegativePrefix = s[0] === "-"; - var negativeSeconds = secondStr && secondStr[0] === "-"; - - var maybeNegate = function maybeNegate(num, force) { - if (force === void 0) { - force = false; - } - - return num !== undefined && (force || num && hasNegativePrefix) ? -num : num; - }; - - return [{ - years: maybeNegate(parseFloating(yearStr)), - months: maybeNegate(parseFloating(monthStr)), - weeks: maybeNegate(parseFloating(weekStr)), - days: maybeNegate(parseFloating(dayStr)), - hours: maybeNegate(parseFloating(hourStr)), - minutes: maybeNegate(parseFloating(minuteStr)), - seconds: maybeNegate(parseFloating(secondStr), secondStr === "-0"), - milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds) - }]; -} // These are a little braindead. EDT *should* tell us that we're in, say, America/New_York -// and not just that we're in -240 *right now*. But since I don't think these are used that often -// I'm just going to ignore that - - -var obsOffsets = { - GMT: 0, - EDT: -4 * 60, - EST: -5 * 60, - CDT: -5 * 60, - CST: -6 * 60, - MDT: -6 * 60, - MST: -7 * 60, - PDT: -7 * 60, - PST: -8 * 60 -}; - -function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { - var result = { - year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr), - month: monthsShort.indexOf(monthStr) + 1, - day: parseInteger(dayStr), - hour: parseInteger(hourStr), - minute: parseInteger(minuteStr) - }; - if (secondStr) result.second = parseInteger(secondStr); - - if (weekdayStr) { - result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1; - } - - return result; -} // RFC 2822/5322 - - -var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/; - -function extractRFC2822(match) { - var weekdayStr = match[1], - dayStr = match[2], - monthStr = match[3], - yearStr = match[4], - hourStr = match[5], - minuteStr = match[6], - secondStr = match[7], - obsOffset = match[8], - milOffset = match[9], - offHourStr = match[10], - offMinuteStr = match[11], - result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); - var offset; - - if (obsOffset) { - offset = obsOffsets[obsOffset]; - } else if (milOffset) { - offset = 0; - } else { - offset = signedOffset(offHourStr, offMinuteStr); - } - - return [result, new FixedOffsetZone(offset)]; -} - -function preprocessRFC2822(s) { - // Remove comments and folding whitespace and replace multiple-spaces with a single space - return s.replace(/\([^)]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").trim(); -} // http date - - -var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/, - rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/, - ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/; - -function extractRFC1123Or850(match) { - var weekdayStr = match[1], - dayStr = match[2], - monthStr = match[3], - yearStr = match[4], - hourStr = match[5], - minuteStr = match[6], - secondStr = match[7], - result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); - return [result, FixedOffsetZone.utcInstance]; -} - -function extractASCII(match) { - var weekdayStr = match[1], - monthStr = match[2], - dayStr = match[3], - hourStr = match[4], - minuteStr = match[5], - secondStr = match[6], - yearStr = match[7], - result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); - return [result, FixedOffsetZone.utcInstance]; -} - -var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex); -var isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex); -var isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex); -var isoTimeCombinedRegex = combineRegexes(isoTimeRegex); -var extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset); -var extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset); -var extractISOOrdinalDateAndTime = combineExtractors(extractISOOrdinalData, extractISOTime, extractISOOffset); -var extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset); -/** - * @private - */ - -function parseISODate(s) { - return parse(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]); -} -function parseRFC2822Date(s) { - return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]); -} -function parseHTTPDate(s) { - return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]); -} -function parseISODuration(s) { - return parse(s, [isoDuration, extractISODuration]); -} -var extractISOTimeOnly = combineExtractors(extractISOTime); -function parseISOTimeOnly(s) { - return parse(s, [isoTimeOnly, extractISOTimeOnly]); -} -var sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex); -var sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex); -var extractISOYmdTimeOffsetAndIANAZone = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone); -var extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); -function parseSQL(s) { - return parse(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeOffsetAndIANAZone], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]); -} - -var INVALID$2 = "Invalid Duration"; // unit conversion constants - -var lowOrderMatrix = { - weeks: { - days: 7, - hours: 7 * 24, - minutes: 7 * 24 * 60, - seconds: 7 * 24 * 60 * 60, - milliseconds: 7 * 24 * 60 * 60 * 1000 - }, - days: { - hours: 24, - minutes: 24 * 60, - seconds: 24 * 60 * 60, - milliseconds: 24 * 60 * 60 * 1000 - }, - hours: { - minutes: 60, - seconds: 60 * 60, - milliseconds: 60 * 60 * 1000 - }, - minutes: { - seconds: 60, - milliseconds: 60 * 1000 - }, - seconds: { - milliseconds: 1000 - } -}, - casualMatrix = _extends({ - years: { - quarters: 4, - months: 12, - weeks: 52, - days: 365, - hours: 365 * 24, - minutes: 365 * 24 * 60, - seconds: 365 * 24 * 60 * 60, - milliseconds: 365 * 24 * 60 * 60 * 1000 - }, - quarters: { - months: 3, - weeks: 13, - days: 91, - hours: 91 * 24, - minutes: 91 * 24 * 60, - seconds: 91 * 24 * 60 * 60, - milliseconds: 91 * 24 * 60 * 60 * 1000 - }, - months: { - weeks: 4, - days: 30, - hours: 30 * 24, - minutes: 30 * 24 * 60, - seconds: 30 * 24 * 60 * 60, - milliseconds: 30 * 24 * 60 * 60 * 1000 - } -}, lowOrderMatrix), - daysInYearAccurate = 146097.0 / 400, - daysInMonthAccurate = 146097.0 / 4800, - accurateMatrix = _extends({ - years: { - quarters: 4, - months: 12, - weeks: daysInYearAccurate / 7, - days: daysInYearAccurate, - hours: daysInYearAccurate * 24, - minutes: daysInYearAccurate * 24 * 60, - seconds: daysInYearAccurate * 24 * 60 * 60, - milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 - }, - quarters: { - months: 3, - weeks: daysInYearAccurate / 28, - days: daysInYearAccurate / 4, - hours: daysInYearAccurate * 24 / 4, - minutes: daysInYearAccurate * 24 * 60 / 4, - seconds: daysInYearAccurate * 24 * 60 * 60 / 4, - milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 / 4 - }, - months: { - weeks: daysInMonthAccurate / 7, - days: daysInMonthAccurate, - hours: daysInMonthAccurate * 24, - minutes: daysInMonthAccurate * 24 * 60, - seconds: daysInMonthAccurate * 24 * 60 * 60, - milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000 - } -}, lowOrderMatrix); // units ordered by size - -var orderedUnits$1 = ["years", "quarters", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"]; -var reverseUnits = orderedUnits$1.slice(0).reverse(); // clone really means "create another instance just like this one, but with these changes" - -function clone$1(dur, alts, clear) { - if (clear === void 0) { - clear = false; - } - - // deep merge for vals - var conf = { - values: clear ? alts.values : _extends({}, dur.values, alts.values || {}), - loc: dur.loc.clone(alts.loc), - conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy - }; - return new Duration(conf); -} - -function antiTrunc(n) { - return n < 0 ? Math.floor(n) : Math.ceil(n); -} // NB: mutates parameters - - -function convert(matrix, fromMap, fromUnit, toMap, toUnit) { - var conv = matrix[toUnit][fromUnit], - raw = fromMap[fromUnit] / conv, - sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]), - // ok, so this is wild, but see the matrix in the tests - added = !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw); - toMap[toUnit] += added; - fromMap[fromUnit] -= added * conv; -} // NB: mutates parameters - - -function normalizeValues(matrix, vals) { - reverseUnits.reduce(function (previous, current) { - if (!isUndefined(vals[current])) { - if (previous) { - convert(matrix, vals, previous, vals, current); - } - - return current; - } else { - return previous; - } - }, null); -} -/** - * A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime. - * - * Here is a brief overview of commonly used methods and getters in Duration: - * - * * **Creation** To create a Duration, use {@link Duration#fromMillis}, {@link Duration#fromObject}, or {@link Duration#fromISO}. - * * **Unit values** See the {@link Duration#years}, {@link Duration.months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors. - * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors. - * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}. - * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON} - * - * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation. - */ - - -var Duration = /*#__PURE__*/function () { - /** - * @private - */ - function Duration(config) { - var accurate = config.conversionAccuracy === "longterm" || false; - /** - * @access private - */ - - this.values = config.values; - /** - * @access private - */ - - this.loc = config.loc || Locale.create(); - /** - * @access private - */ - - this.conversionAccuracy = accurate ? "longterm" : "casual"; - /** - * @access private - */ - - this.invalid = config.invalid || null; - /** - * @access private - */ - - this.matrix = accurate ? accurateMatrix : casualMatrix; - /** - * @access private - */ - - this.isLuxonDuration = true; - } - /** - * Create Duration from a number of milliseconds. - * @param {number} count of milliseconds - * @param {Object} opts - options for parsing - * @param {string} [opts.locale='en-US'] - the locale to use - * @param {string} opts.numberingSystem - the numbering system to use - * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use - * @return {Duration} - */ - - - Duration.fromMillis = function fromMillis(count, opts) { - return Duration.fromObject({ - milliseconds: count - }, opts); - } - /** - * Create a Duration from a JavaScript object with keys like 'years' and 'hours'. - * If this object is empty then a zero milliseconds duration is returned. - * @param {Object} obj - the object to create the DateTime from - * @param {number} obj.years - * @param {number} obj.quarters - * @param {number} obj.months - * @param {number} obj.weeks - * @param {number} obj.days - * @param {number} obj.hours - * @param {number} obj.minutes - * @param {number} obj.seconds - * @param {number} obj.milliseconds - * @param {Object} [opts=[]] - options for creating this Duration - * @param {string} [opts.locale='en-US'] - the locale to use - * @param {string} opts.numberingSystem - the numbering system to use - * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use - * @return {Duration} - */ - ; - - Duration.fromObject = function fromObject(obj, opts) { - if (opts === void 0) { - opts = {}; - } - - if (obj == null || typeof obj !== "object") { - throw new InvalidArgumentError("Duration.fromObject: argument expected to be an object, got " + (obj === null ? "null" : typeof obj)); - } - - return new Duration({ - values: normalizeObject(obj, Duration.normalizeUnit), - loc: Locale.fromObject(opts), - conversionAccuracy: opts.conversionAccuracy - }); - } - /** - * Create a Duration from DurationLike. - * - * @param {Object | number | Duration} durationLike - * One of: - * - object with keys like 'years' and 'hours'. - * - number representing milliseconds - * - Duration instance - * @return {Duration} - */ - ; - - Duration.fromDurationLike = function fromDurationLike(durationLike) { - if (isNumber(durationLike)) { - return Duration.fromMillis(durationLike); - } else if (Duration.isDuration(durationLike)) { - return durationLike; - } else if (typeof durationLike === "object") { - return Duration.fromObject(durationLike); - } else { - throw new InvalidArgumentError("Unknown duration argument " + durationLike + " of type " + typeof durationLike); - } - } - /** - * Create a Duration from an ISO 8601 duration string. - * @param {string} text - text to parse - * @param {Object} opts - options for parsing - * @param {string} [opts.locale='en-US'] - the locale to use - * @param {string} opts.numberingSystem - the numbering system to use - * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use - * @see https://en.wikipedia.org/wiki/ISO_8601#Durations - * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 } - * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 } - * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 } - * @return {Duration} - */ - ; - - Duration.fromISO = function fromISO(text, opts) { - var _parseISODuration = parseISODuration(text), - parsed = _parseISODuration[0]; - - if (parsed) { - return Duration.fromObject(parsed, opts); - } else { - return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); - } - } - /** - * Create a Duration from an ISO 8601 time string. - * @param {string} text - text to parse - * @param {Object} opts - options for parsing - * @param {string} [opts.locale='en-US'] - the locale to use - * @param {string} opts.numberingSystem - the numbering system to use - * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use - * @see https://en.wikipedia.org/wiki/ISO_8601#Times - * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 } - * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } - * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } - * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } - * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } - * @return {Duration} - */ - ; - - Duration.fromISOTime = function fromISOTime(text, opts) { - var _parseISOTimeOnly = parseISOTimeOnly(text), - parsed = _parseISOTimeOnly[0]; - - if (parsed) { - return Duration.fromObject(parsed, opts); - } else { - return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); - } - } - /** - * Create an invalid Duration. - * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent - * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information - * @return {Duration} - */ - ; - - Duration.invalid = function invalid(reason, explanation) { - if (explanation === void 0) { - explanation = null; - } - - if (!reason) { - throw new InvalidArgumentError("need to specify a reason the Duration is invalid"); - } - - var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); - - if (Settings.throwOnInvalid) { - throw new InvalidDurationError(invalid); - } else { - return new Duration({ - invalid: invalid - }); - } - } - /** - * @private - */ - ; - - Duration.normalizeUnit = function normalizeUnit(unit) { - var normalized = { - year: "years", - years: "years", - quarter: "quarters", - quarters: "quarters", - month: "months", - months: "months", - week: "weeks", - weeks: "weeks", - day: "days", - days: "days", - hour: "hours", - hours: "hours", - minute: "minutes", - minutes: "minutes", - second: "seconds", - seconds: "seconds", - millisecond: "milliseconds", - milliseconds: "milliseconds" - }[unit ? unit.toLowerCase() : unit]; - if (!normalized) throw new InvalidUnitError(unit); - return normalized; - } - /** - * Check if an object is a Duration. Works across context boundaries - * @param {object} o - * @return {boolean} - */ - ; - - Duration.isDuration = function isDuration(o) { - return o && o.isLuxonDuration || false; - } - /** - * Get the locale of a Duration, such 'en-GB' - * @type {string} - */ - ; - - var _proto = Duration.prototype; - - /** - * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens: - * * `S` for milliseconds - * * `s` for seconds - * * `m` for minutes - * * `h` for hours - * * `d` for days - * * `M` for months - * * `y` for years - * Notes: - * * Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits - * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting. - * @param {string} fmt - the format string - * @param {Object} opts - options - * @param {boolean} [opts.floor=true] - floor numerical values - * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2" - * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002" - * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000" - * @return {string} - */ - _proto.toFormat = function toFormat(fmt, opts) { - if (opts === void 0) { - opts = {}; - } - - // reverse-compat since 1.2; we always round down now, never up, and we do it by default - var fmtOpts = _extends({}, opts, { - floor: opts.round !== false && opts.floor !== false - }); - - return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID$2; - } - /** - * Returns a JavaScript object with this Duration's values. - * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 } - * @return {Object} - */ - ; - - _proto.toObject = function toObject() { - if (!this.isValid) return {}; - return _extends({}, this.values); - } - /** - * Returns an ISO 8601-compliant string representation of this Duration. - * @see https://en.wikipedia.org/wiki/ISO_8601#Durations - * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S' - * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S' - * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M' - * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M' - * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S' - * @return {string} - */ - ; - - _proto.toISO = function toISO() { - // we could use the formatter, but this is an easier way to get the minimum string - if (!this.isValid) return null; - var s = "P"; - if (this.years !== 0) s += this.years + "Y"; - if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + "M"; - if (this.weeks !== 0) s += this.weeks + "W"; - if (this.days !== 0) s += this.days + "D"; - if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) s += "T"; - if (this.hours !== 0) s += this.hours + "H"; - if (this.minutes !== 0) s += this.minutes + "M"; - if (this.seconds !== 0 || this.milliseconds !== 0) // this will handle "floating point madness" by removing extra decimal places - // https://stackoverflow.com/questions/588004/is-floating-point-math-broken - s += roundTo(this.seconds + this.milliseconds / 1000, 3) + "S"; - if (s === "P") s += "T0S"; - return s; - } - /** - * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day. - * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours. - * @see https://en.wikipedia.org/wiki/ISO_8601#Times - * @param {Object} opts - options - * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 - * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 - * @param {boolean} [opts.includePrefix=false] - include the `T` prefix - * @param {string} [opts.format='extended'] - choose between the basic and extended format - * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000' - * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00' - * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00' - * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000' - * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000' - * @return {string} - */ - ; - - _proto.toISOTime = function toISOTime(opts) { - if (opts === void 0) { - opts = {}; - } - - if (!this.isValid) return null; - var millis = this.toMillis(); - if (millis < 0 || millis >= 86400000) return null; - opts = _extends({ - suppressMilliseconds: false, - suppressSeconds: false, - includePrefix: false, - format: "extended" - }, opts); - var value = this.shiftTo("hours", "minutes", "seconds", "milliseconds"); - var fmt = opts.format === "basic" ? "hhmm" : "hh:mm"; - - if (!opts.suppressSeconds || value.seconds !== 0 || value.milliseconds !== 0) { - fmt += opts.format === "basic" ? "ss" : ":ss"; - - if (!opts.suppressMilliseconds || value.milliseconds !== 0) { - fmt += ".SSS"; - } - } - - var str = value.toFormat(fmt); - - if (opts.includePrefix) { - str = "T" + str; - } - - return str; - } - /** - * Returns an ISO 8601 representation of this Duration appropriate for use in JSON. - * @return {string} - */ - ; - - _proto.toJSON = function toJSON() { - return this.toISO(); - } - /** - * Returns an ISO 8601 representation of this Duration appropriate for use in debugging. - * @return {string} - */ - ; - - _proto.toString = function toString() { - return this.toISO(); - } - /** - * Returns an milliseconds value of this Duration. - * @return {number} - */ - ; - - _proto.toMillis = function toMillis() { - return this.as("milliseconds"); - } - /** - * Returns an milliseconds value of this Duration. Alias of {@link toMillis} - * @return {number} - */ - ; - - _proto.valueOf = function valueOf() { - return this.toMillis(); - } - /** - * Make this Duration longer by the specified amount. Return a newly-constructed Duration. - * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() - * @return {Duration} - */ - ; - - _proto.plus = function plus(duration) { - if (!this.isValid) return this; - var dur = Duration.fromDurationLike(duration), - result = {}; - - for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits$1), _step; !(_step = _iterator()).done;) { - var k = _step.value; - - if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) { - result[k] = dur.get(k) + this.get(k); - } - } - - return clone$1(this, { - values: result - }, true); - } - /** - * Make this Duration shorter by the specified amount. Return a newly-constructed Duration. - * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() - * @return {Duration} - */ - ; - - _proto.minus = function minus(duration) { - if (!this.isValid) return this; - var dur = Duration.fromDurationLike(duration); - return this.plus(dur.negate()); - } - /** - * Scale this Duration by the specified amount. Return a newly-constructed Duration. - * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number. - * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 } - * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === "hour" ? x * 2 : x) //=> { hours: 2, minutes: 30 } - * @return {Duration} - */ - ; - - _proto.mapUnits = function mapUnits(fn) { - if (!this.isValid) return this; - var result = {}; - - for (var _i = 0, _Object$keys = Object.keys(this.values); _i < _Object$keys.length; _i++) { - var k = _Object$keys[_i]; - result[k] = asNumber(fn(this.values[k], k)); - } - - return clone$1(this, { - values: result - }, true); - } - /** - * Get the value of unit. - * @param {string} unit - a unit such as 'minute' or 'day' - * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2 - * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0 - * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3 - * @return {number} - */ - ; - - _proto.get = function get(unit) { - return this[Duration.normalizeUnit(unit)]; - } - /** - * "Set" the values of specified units. Return a newly-constructed Duration. - * @param {Object} values - a mapping of units to numbers - * @example dur.set({ years: 2017 }) - * @example dur.set({ hours: 8, minutes: 30 }) - * @return {Duration} - */ - ; - - _proto.set = function set(values) { - if (!this.isValid) return this; - - var mixed = _extends({}, this.values, normalizeObject(values, Duration.normalizeUnit)); - - return clone$1(this, { - values: mixed - }); - } - /** - * "Set" the locale and/or numberingSystem. Returns a newly-constructed Duration. - * @example dur.reconfigure({ locale: 'en-GB' }) - * @return {Duration} - */ - ; - - _proto.reconfigure = function reconfigure(_temp) { - var _ref = _temp === void 0 ? {} : _temp, - locale = _ref.locale, - numberingSystem = _ref.numberingSystem, - conversionAccuracy = _ref.conversionAccuracy; - - var loc = this.loc.clone({ - locale: locale, - numberingSystem: numberingSystem - }), - opts = { - loc: loc - }; - - if (conversionAccuracy) { - opts.conversionAccuracy = conversionAccuracy; - } - - return clone$1(this, opts); - } - /** - * Return the length of the duration in the specified unit. - * @param {string} unit - a unit such as 'minutes' or 'days' - * @example Duration.fromObject({years: 1}).as('days') //=> 365 - * @example Duration.fromObject({years: 1}).as('months') //=> 12 - * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5 - * @return {number} - */ - ; - - _proto.as = function as(unit) { - return this.isValid ? this.shiftTo(unit).get(unit) : NaN; - } - /** - * Reduce this Duration to its canonical representation in its current units. - * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 } - * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 } - * @return {Duration} - */ - ; - - _proto.normalize = function normalize() { - if (!this.isValid) return this; - var vals = this.toObject(); - normalizeValues(this.matrix, vals); - return clone$1(this, { - values: vals - }, true); - } - /** - * Convert this Duration into its representation in a different set of units. - * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 } - * @return {Duration} - */ - ; - - _proto.shiftTo = function shiftTo() { - for (var _len = arguments.length, units = new Array(_len), _key = 0; _key < _len; _key++) { - units[_key] = arguments[_key]; - } - - if (!this.isValid) return this; - - if (units.length === 0) { - return this; - } - - units = units.map(function (u) { - return Duration.normalizeUnit(u); - }); - var built = {}, - accumulated = {}, - vals = this.toObject(); - var lastUnit; - - for (var _iterator2 = _createForOfIteratorHelperLoose(orderedUnits$1), _step2; !(_step2 = _iterator2()).done;) { - var k = _step2.value; - - if (units.indexOf(k) >= 0) { - lastUnit = k; - var own = 0; // anything we haven't boiled down yet should get boiled to this unit - - for (var ak in accumulated) { - own += this.matrix[ak][k] * accumulated[ak]; - accumulated[ak] = 0; - } // plus anything that's already in this unit - - - if (isNumber(vals[k])) { - own += vals[k]; - } - - var i = Math.trunc(own); - built[k] = i; - accumulated[k] = own - i; // we'd like to absorb these fractions in another unit - // plus anything further down the chain that should be rolled up in to this - - for (var down in vals) { - if (orderedUnits$1.indexOf(down) > orderedUnits$1.indexOf(k)) { - convert(this.matrix, vals, down, built, k); - } - } // otherwise, keep it in the wings to boil it later - - } else if (isNumber(vals[k])) { - accumulated[k] = vals[k]; - } - } // anything leftover becomes the decimal for the last unit - // lastUnit must be defined since units is not empty - - - for (var key in accumulated) { - if (accumulated[key] !== 0) { - built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key]; - } - } - - return clone$1(this, { - values: built - }, true).normalize(); - } - /** - * Return the negative of this Duration. - * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 } - * @return {Duration} - */ - ; - - _proto.negate = function negate() { - if (!this.isValid) return this; - var negated = {}; - - for (var _i2 = 0, _Object$keys2 = Object.keys(this.values); _i2 < _Object$keys2.length; _i2++) { - var k = _Object$keys2[_i2]; - negated[k] = -this.values[k]; - } - - return clone$1(this, { - values: negated - }, true); - } - /** - * Get the years. - * @type {number} - */ - ; - - /** - * Equality check - * Two Durations are equal iff they have the same units and the same values for each unit. - * @param {Duration} other - * @return {boolean} - */ - _proto.equals = function equals(other) { - if (!this.isValid || !other.isValid) { - return false; - } - - if (!this.loc.equals(other.loc)) { - return false; - } - - function eq(v1, v2) { - // Consider 0 and undefined as equal - if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0; - return v1 === v2; - } - - for (var _iterator3 = _createForOfIteratorHelperLoose(orderedUnits$1), _step3; !(_step3 = _iterator3()).done;) { - var u = _step3.value; - - if (!eq(this.values[u], other.values[u])) { - return false; - } - } - - return true; - }; - - _createClass(Duration, [{ - key: "locale", - get: function get() { - return this.isValid ? this.loc.locale : null; - } - /** - * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration - * - * @type {string} - */ - - }, { - key: "numberingSystem", - get: function get() { - return this.isValid ? this.loc.numberingSystem : null; - } - }, { - key: "years", - get: function get() { - return this.isValid ? this.values.years || 0 : NaN; - } - /** - * Get the quarters. - * @type {number} - */ - - }, { - key: "quarters", - get: function get() { - return this.isValid ? this.values.quarters || 0 : NaN; - } - /** - * Get the months. - * @type {number} - */ - - }, { - key: "months", - get: function get() { - return this.isValid ? this.values.months || 0 : NaN; - } - /** - * Get the weeks - * @type {number} - */ - - }, { - key: "weeks", - get: function get() { - return this.isValid ? this.values.weeks || 0 : NaN; - } - /** - * Get the days. - * @type {number} - */ - - }, { - key: "days", - get: function get() { - return this.isValid ? this.values.days || 0 : NaN; - } - /** - * Get the hours. - * @type {number} - */ - - }, { - key: "hours", - get: function get() { - return this.isValid ? this.values.hours || 0 : NaN; - } - /** - * Get the minutes. - * @type {number} - */ - - }, { - key: "minutes", - get: function get() { - return this.isValid ? this.values.minutes || 0 : NaN; - } - /** - * Get the seconds. - * @return {number} - */ - - }, { - key: "seconds", - get: function get() { - return this.isValid ? this.values.seconds || 0 : NaN; - } - /** - * Get the milliseconds. - * @return {number} - */ - - }, { - key: "milliseconds", - get: function get() { - return this.isValid ? this.values.milliseconds || 0 : NaN; - } - /** - * Returns whether the Duration is invalid. Invalid durations are returned by diff operations - * on invalid DateTimes or Intervals. - * @return {boolean} - */ - - }, { - key: "isValid", - get: function get() { - return this.invalid === null; - } - /** - * Returns an error code if this Duration became invalid, or null if the Duration is valid - * @return {string} - */ - - }, { - key: "invalidReason", - get: function get() { - return this.invalid ? this.invalid.reason : null; - } - /** - * Returns an explanation of why this Duration became invalid, or null if the Duration is valid - * @type {string} - */ - - }, { - key: "invalidExplanation", - get: function get() { - return this.invalid ? this.invalid.explanation : null; - } - }]); - - return Duration; -}(); - -var INVALID$1 = "Invalid Interval"; // checks if the start is equal to or before the end - -function validateStartEnd(start, end) { - if (!start || !start.isValid) { - return Interval.invalid("missing or invalid start"); - } else if (!end || !end.isValid) { - return Interval.invalid("missing or invalid end"); - } else if (end < start) { - return Interval.invalid("end before start", "The end of an interval must be after its start, but you had start=" + start.toISO() + " and end=" + end.toISO()); - } else { - return null; - } -} -/** - * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them. - * - * Here is a brief overview of the most commonly used methods and getters in Interval: - * - * * **Creation** To create an Interval, use {@link Interval#fromDateTimes}, {@link Interval#after}, {@link Interval#before}, or {@link Interval#fromISO}. - * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end. - * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}. - * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval#merge}, {@link Interval#xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}. - * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs} - * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}. - */ - - -var Interval = /*#__PURE__*/function () { - /** - * @private - */ - function Interval(config) { - /** - * @access private - */ - this.s = config.start; - /** - * @access private - */ - - this.e = config.end; - /** - * @access private - */ - - this.invalid = config.invalid || null; - /** - * @access private - */ - - this.isLuxonInterval = true; - } - /** - * Create an invalid Interval. - * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent - * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information - * @return {Interval} - */ - - - Interval.invalid = function invalid(reason, explanation) { - if (explanation === void 0) { - explanation = null; - } - - if (!reason) { - throw new InvalidArgumentError("need to specify a reason the Interval is invalid"); - } - - var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); - - if (Settings.throwOnInvalid) { - throw new InvalidIntervalError(invalid); - } else { - return new Interval({ - invalid: invalid - }); - } - } - /** - * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end. - * @param {DateTime|Date|Object} start - * @param {DateTime|Date|Object} end - * @return {Interval} - */ - ; - - Interval.fromDateTimes = function fromDateTimes(start, end) { - var builtStart = friendlyDateTime(start), - builtEnd = friendlyDateTime(end); - var validateError = validateStartEnd(builtStart, builtEnd); - - if (validateError == null) { - return new Interval({ - start: builtStart, - end: builtEnd - }); - } else { - return validateError; - } - } - /** - * Create an Interval from a start DateTime and a Duration to extend to. - * @param {DateTime|Date|Object} start - * @param {Duration|Object|number} duration - the length of the Interval. - * @return {Interval} - */ - ; - - Interval.after = function after(start, duration) { - var dur = Duration.fromDurationLike(duration), - dt = friendlyDateTime(start); - return Interval.fromDateTimes(dt, dt.plus(dur)); - } - /** - * Create an Interval from an end DateTime and a Duration to extend backwards to. - * @param {DateTime|Date|Object} end - * @param {Duration|Object|number} duration - the length of the Interval. - * @return {Interval} - */ - ; - - Interval.before = function before(end, duration) { - var dur = Duration.fromDurationLike(duration), - dt = friendlyDateTime(end); - return Interval.fromDateTimes(dt.minus(dur), dt); - } - /** - * Create an Interval from an ISO 8601 string. - * Accepts `/`, `/`, and `/` formats. - * @param {string} text - the ISO string to parse - * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO} - * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals - * @return {Interval} - */ - ; - - Interval.fromISO = function fromISO(text, opts) { - var _split = (text || "").split("/", 2), - s = _split[0], - e = _split[1]; - - if (s && e) { - var start, startIsValid; - - try { - start = DateTime.fromISO(s, opts); - startIsValid = start.isValid; - } catch (e) { - startIsValid = false; - } - - var end, endIsValid; - - try { - end = DateTime.fromISO(e, opts); - endIsValid = end.isValid; - } catch (e) { - endIsValid = false; - } - - if (startIsValid && endIsValid) { - return Interval.fromDateTimes(start, end); - } - - if (startIsValid) { - var dur = Duration.fromISO(e, opts); - - if (dur.isValid) { - return Interval.after(start, dur); - } - } else if (endIsValid) { - var _dur = Duration.fromISO(s, opts); - - if (_dur.isValid) { - return Interval.before(end, _dur); - } - } - } - - return Interval.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); - } - /** - * Check if an object is an Interval. Works across context boundaries - * @param {object} o - * @return {boolean} - */ - ; - - Interval.isInterval = function isInterval(o) { - return o && o.isLuxonInterval || false; - } - /** - * Returns the start of the Interval - * @type {DateTime} - */ - ; - - var _proto = Interval.prototype; - - /** - * Returns the length of the Interval in the specified unit. - * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in. - * @return {number} - */ - _proto.length = function length(unit) { - if (unit === void 0) { - unit = "milliseconds"; - } - - return this.isValid ? this.toDuration.apply(this, [unit]).get(unit) : NaN; - } - /** - * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part. - * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day' - * asks 'what dates are included in this interval?', not 'how many days long is this interval?' - * @param {string} [unit='milliseconds'] - the unit of time to count. - * @return {number} - */ - ; - - _proto.count = function count(unit) { - if (unit === void 0) { - unit = "milliseconds"; - } - - if (!this.isValid) return NaN; - var start = this.start.startOf(unit), - end = this.end.startOf(unit); - return Math.floor(end.diff(start, unit).get(unit)) + 1; - } - /** - * Returns whether this Interval's start and end are both in the same unit of time - * @param {string} unit - the unit of time to check sameness on - * @return {boolean} - */ - ; - - _proto.hasSame = function hasSame(unit) { - return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false; - } - /** - * Return whether this Interval has the same start and end DateTimes. - * @return {boolean} - */ - ; - - _proto.isEmpty = function isEmpty() { - return this.s.valueOf() === this.e.valueOf(); - } - /** - * Return whether this Interval's start is after the specified DateTime. - * @param {DateTime} dateTime - * @return {boolean} - */ - ; - - _proto.isAfter = function isAfter(dateTime) { - if (!this.isValid) return false; - return this.s > dateTime; - } - /** - * Return whether this Interval's end is before the specified DateTime. - * @param {DateTime} dateTime - * @return {boolean} - */ - ; - - _proto.isBefore = function isBefore(dateTime) { - if (!this.isValid) return false; - return this.e <= dateTime; - } - /** - * Return whether this Interval contains the specified DateTime. - * @param {DateTime} dateTime - * @return {boolean} - */ - ; - - _proto.contains = function contains(dateTime) { - if (!this.isValid) return false; - return this.s <= dateTime && this.e > dateTime; - } - /** - * "Sets" the start and/or end dates. Returns a newly-constructed Interval. - * @param {Object} values - the values to set - * @param {DateTime} values.start - the starting DateTime - * @param {DateTime} values.end - the ending DateTime - * @return {Interval} - */ - ; - - _proto.set = function set(_temp) { - var _ref = _temp === void 0 ? {} : _temp, - start = _ref.start, - end = _ref.end; - - if (!this.isValid) return this; - return Interval.fromDateTimes(start || this.s, end || this.e); - } - /** - * Split this Interval at each of the specified DateTimes - * @param {...DateTime} dateTimes - the unit of time to count. - * @return {Array} - */ - ; - - _proto.splitAt = function splitAt() { - var _this = this; - - if (!this.isValid) return []; - - for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { - dateTimes[_key] = arguments[_key]; - } - - var sorted = dateTimes.map(friendlyDateTime).filter(function (d) { - return _this.contains(d); - }).sort(), - results = []; - var s = this.s, - i = 0; - - while (s < this.e) { - var added = sorted[i] || this.e, - next = +added > +this.e ? this.e : added; - results.push(Interval.fromDateTimes(s, next)); - s = next; - i += 1; - } - - return results; - } - /** - * Split this Interval into smaller Intervals, each of the specified length. - * Left over time is grouped into a smaller interval - * @param {Duration|Object|number} duration - The length of each resulting interval. - * @return {Array} - */ - ; - - _proto.splitBy = function splitBy(duration) { - var dur = Duration.fromDurationLike(duration); - - if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) { - return []; - } - - var s = this.s, - idx = 1, - next; - var results = []; - - while (s < this.e) { - var added = this.start.plus(dur.mapUnits(function (x) { - return x * idx; - })); - next = +added > +this.e ? this.e : added; - results.push(Interval.fromDateTimes(s, next)); - s = next; - idx += 1; - } - - return results; - } - /** - * Split this Interval into the specified number of smaller intervals. - * @param {number} numberOfParts - The number of Intervals to divide the Interval into. - * @return {Array} - */ - ; - - _proto.divideEqually = function divideEqually(numberOfParts) { - if (!this.isValid) return []; - return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts); - } - /** - * Return whether this Interval overlaps with the specified Interval - * @param {Interval} other - * @return {boolean} - */ - ; - - _proto.overlaps = function overlaps(other) { - return this.e > other.s && this.s < other.e; - } - /** - * Return whether this Interval's end is adjacent to the specified Interval's start. - * @param {Interval} other - * @return {boolean} - */ - ; - - _proto.abutsStart = function abutsStart(other) { - if (!this.isValid) return false; - return +this.e === +other.s; - } - /** - * Return whether this Interval's start is adjacent to the specified Interval's end. - * @param {Interval} other - * @return {boolean} - */ - ; - - _proto.abutsEnd = function abutsEnd(other) { - if (!this.isValid) return false; - return +other.e === +this.s; - } - /** - * Return whether this Interval engulfs the start and end of the specified Interval. - * @param {Interval} other - * @return {boolean} - */ - ; - - _proto.engulfs = function engulfs(other) { - if (!this.isValid) return false; - return this.s <= other.s && this.e >= other.e; - } - /** - * Return whether this Interval has the same start and end as the specified Interval. - * @param {Interval} other - * @return {boolean} - */ - ; - - _proto.equals = function equals(other) { - if (!this.isValid || !other.isValid) { - return false; - } - - return this.s.equals(other.s) && this.e.equals(other.e); - } - /** - * Return an Interval representing the intersection of this Interval and the specified Interval. - * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals. - * Returns null if the intersection is empty, meaning, the intervals don't intersect. - * @param {Interval} other - * @return {Interval} - */ - ; - - _proto.intersection = function intersection(other) { - if (!this.isValid) return this; - var s = this.s > other.s ? this.s : other.s, - e = this.e < other.e ? this.e : other.e; - - if (s >= e) { - return null; - } else { - return Interval.fromDateTimes(s, e); - } - } - /** - * Return an Interval representing the union of this Interval and the specified Interval. - * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals. - * @param {Interval} other - * @return {Interval} - */ - ; - - _proto.union = function union(other) { - if (!this.isValid) return this; - var s = this.s < other.s ? this.s : other.s, - e = this.e > other.e ? this.e : other.e; - return Interval.fromDateTimes(s, e); - } - /** - * Merge an array of Intervals into a equivalent minimal set of Intervals. - * Combines overlapping and adjacent Intervals. - * @param {Array} intervals - * @return {Array} - */ - ; - - Interval.merge = function merge(intervals) { - var _intervals$sort$reduc = intervals.sort(function (a, b) { - return a.s - b.s; - }).reduce(function (_ref2, item) { - var sofar = _ref2[0], - current = _ref2[1]; - - if (!current) { - return [sofar, item]; - } else if (current.overlaps(item) || current.abutsStart(item)) { - return [sofar, current.union(item)]; - } else { - return [sofar.concat([current]), item]; - } - }, [[], null]), - found = _intervals$sort$reduc[0], - final = _intervals$sort$reduc[1]; - - if (final) { - found.push(final); - } - - return found; - } - /** - * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals. - * @param {Array} intervals - * @return {Array} - */ - ; - - Interval.xor = function xor(intervals) { - var _Array$prototype; - - var start = null, - currentCount = 0; - - var results = [], - ends = intervals.map(function (i) { - return [{ - time: i.s, - type: "s" - }, { - time: i.e, - type: "e" - }]; - }), - flattened = (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, ends), - arr = flattened.sort(function (a, b) { - return a.time - b.time; - }); - - for (var _iterator = _createForOfIteratorHelperLoose(arr), _step; !(_step = _iterator()).done;) { - var i = _step.value; - currentCount += i.type === "s" ? 1 : -1; - - if (currentCount === 1) { - start = i.time; - } else { - if (start && +start !== +i.time) { - results.push(Interval.fromDateTimes(start, i.time)); - } - - start = null; - } - } - - return Interval.merge(results); - } - /** - * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals. - * @param {...Interval} intervals - * @return {Array} - */ - ; - - _proto.difference = function difference() { - var _this2 = this; - - for (var _len2 = arguments.length, intervals = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - intervals[_key2] = arguments[_key2]; - } - - return Interval.xor([this].concat(intervals)).map(function (i) { - return _this2.intersection(i); - }).filter(function (i) { - return i && !i.isEmpty(); - }); - } - /** - * Returns a string representation of this Interval appropriate for debugging. - * @return {string} - */ - ; - - _proto.toString = function toString() { - if (!this.isValid) return INVALID$1; - return "[" + this.s.toISO() + " \u2013 " + this.e.toISO() + ")"; - } - /** - * Returns an ISO 8601-compliant string representation of this Interval. - * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals - * @param {Object} opts - The same options as {@link DateTime#toISO} - * @return {string} - */ - ; - - _proto.toISO = function toISO(opts) { - if (!this.isValid) return INVALID$1; - return this.s.toISO(opts) + "/" + this.e.toISO(opts); - } - /** - * Returns an ISO 8601-compliant string representation of date of this Interval. - * The time components are ignored. - * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals - * @return {string} - */ - ; - - _proto.toISODate = function toISODate() { - if (!this.isValid) return INVALID$1; - return this.s.toISODate() + "/" + this.e.toISODate(); - } - /** - * Returns an ISO 8601-compliant string representation of time of this Interval. - * The date components are ignored. - * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals - * @param {Object} opts - The same options as {@link DateTime#toISO} - * @return {string} - */ - ; - - _proto.toISOTime = function toISOTime(opts) { - if (!this.isValid) return INVALID$1; - return this.s.toISOTime(opts) + "/" + this.e.toISOTime(opts); - } - /** - * Returns a string representation of this Interval formatted according to the specified format string. - * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime#toFormat} for details. - * @param {Object} opts - options - * @param {string} [opts.separator = ' – '] - a separator to place between the start and end representations - * @return {string} - */ - ; - - _proto.toFormat = function toFormat(dateFormat, _temp2) { - var _ref3 = _temp2 === void 0 ? {} : _temp2, - _ref3$separator = _ref3.separator, - separator = _ref3$separator === void 0 ? " – " : _ref3$separator; - - if (!this.isValid) return INVALID$1; - return "" + this.s.toFormat(dateFormat) + separator + this.e.toFormat(dateFormat); - } - /** - * Return a Duration representing the time spanned by this interval. - * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration. - * @param {Object} opts - options that affect the creation of the Duration - * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use - * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 } - * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 } - * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 } - * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 } - * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 } - * @return {Duration} - */ - ; - - _proto.toDuration = function toDuration(unit, opts) { - if (!this.isValid) { - return Duration.invalid(this.invalidReason); - } - - return this.e.diff(this.s, unit, opts); - } - /** - * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes - * @param {function} mapFn - * @return {Interval} - * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC()) - * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 })) - */ - ; - - _proto.mapEndpoints = function mapEndpoints(mapFn) { - return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); - }; - - _createClass(Interval, [{ - key: "start", - get: function get() { - return this.isValid ? this.s : null; - } - /** - * Returns the end of the Interval - * @type {DateTime} - */ - - }, { - key: "end", - get: function get() { - return this.isValid ? this.e : null; - } - /** - * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'. - * @type {boolean} - */ - - }, { - key: "isValid", - get: function get() { - return this.invalidReason === null; - } - /** - * Returns an error code if this Interval is invalid, or null if the Interval is valid - * @type {string} - */ - - }, { - key: "invalidReason", - get: function get() { - return this.invalid ? this.invalid.reason : null; - } - /** - * Returns an explanation of why this Interval became invalid, or null if the Interval is valid - * @type {string} - */ - - }, { - key: "invalidExplanation", - get: function get() { - return this.invalid ? this.invalid.explanation : null; - } - }]); - - return Interval; -}(); - -/** - * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment. - */ - -var Info = /*#__PURE__*/function () { - function Info() {} - - /** - * Return whether the specified zone contains a DST. - * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone. - * @return {boolean} - */ - Info.hasDST = function hasDST(zone) { - if (zone === void 0) { - zone = Settings.defaultZone; - } - - var proto = DateTime.now().setZone(zone).set({ - month: 12 - }); - return !zone.isUniversal && proto.offset !== proto.set({ - month: 6 - }).offset; - } - /** - * Return whether the specified zone is a valid IANA specifier. - * @param {string} zone - Zone to check - * @return {boolean} - */ - ; - - Info.isValidIANAZone = function isValidIANAZone(zone) { - return IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone); - } - /** - * Converts the input into a {@link Zone} instance. - * - * * If `input` is already a Zone instance, it is returned unchanged. - * * If `input` is a string containing a valid time zone name, a Zone instance - * with that name is returned. - * * If `input` is a string that doesn't refer to a known time zone, a Zone - * instance with {@link Zone#isValid} == false is returned. - * * If `input is a number, a Zone instance with the specified fixed offset - * in minutes is returned. - * * If `input` is `null` or `undefined`, the default zone is returned. - * @param {string|Zone|number} [input] - the value to be converted - * @return {Zone} - */ - ; - - Info.normalizeZone = function normalizeZone$1(input) { - return normalizeZone(input, Settings.defaultZone); - } - /** - * Return an array of standalone month names. - * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat - * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" - * @param {Object} opts - options - * @param {string} [opts.locale] - the locale code - * @param {string} [opts.numberingSystem=null] - the numbering system - * @param {string} [opts.locObj=null] - an existing locale object to use - * @param {string} [opts.outputCalendar='gregory'] - the calendar - * @example Info.months()[0] //=> 'January' - * @example Info.months('short')[0] //=> 'Jan' - * @example Info.months('numeric')[0] //=> '1' - * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.' - * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١' - * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I' - * @return {Array} - */ - ; - - Info.months = function months(length, _temp) { - if (length === void 0) { - length = "long"; - } - - var _ref = _temp === void 0 ? {} : _temp, - _ref$locale = _ref.locale, - locale = _ref$locale === void 0 ? null : _ref$locale, - _ref$numberingSystem = _ref.numberingSystem, - numberingSystem = _ref$numberingSystem === void 0 ? null : _ref$numberingSystem, - _ref$locObj = _ref.locObj, - locObj = _ref$locObj === void 0 ? null : _ref$locObj, - _ref$outputCalendar = _ref.outputCalendar, - outputCalendar = _ref$outputCalendar === void 0 ? "gregory" : _ref$outputCalendar; - - return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length); - } - /** - * Return an array of format month names. - * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that - * changes the string. - * See {@link Info#months} - * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" - * @param {Object} opts - options - * @param {string} [opts.locale] - the locale code - * @param {string} [opts.numberingSystem=null] - the numbering system - * @param {string} [opts.locObj=null] - an existing locale object to use - * @param {string} [opts.outputCalendar='gregory'] - the calendar - * @return {Array} - */ - ; - - Info.monthsFormat = function monthsFormat(length, _temp2) { - if (length === void 0) { - length = "long"; - } - - var _ref2 = _temp2 === void 0 ? {} : _temp2, - _ref2$locale = _ref2.locale, - locale = _ref2$locale === void 0 ? null : _ref2$locale, - _ref2$numberingSystem = _ref2.numberingSystem, - numberingSystem = _ref2$numberingSystem === void 0 ? null : _ref2$numberingSystem, - _ref2$locObj = _ref2.locObj, - locObj = _ref2$locObj === void 0 ? null : _ref2$locObj, - _ref2$outputCalendar = _ref2.outputCalendar, - outputCalendar = _ref2$outputCalendar === void 0 ? "gregory" : _ref2$outputCalendar; - - return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true); - } - /** - * Return an array of standalone week names. - * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat - * @param {string} [length='long'] - the length of the weekday representation, such as "narrow", "short", "long". - * @param {Object} opts - options - * @param {string} [opts.locale] - the locale code - * @param {string} [opts.numberingSystem=null] - the numbering system - * @param {string} [opts.locObj=null] - an existing locale object to use - * @example Info.weekdays()[0] //=> 'Monday' - * @example Info.weekdays('short')[0] //=> 'Mon' - * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.' - * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين' - * @return {Array} - */ - ; - - Info.weekdays = function weekdays(length, _temp3) { - if (length === void 0) { - length = "long"; - } - - var _ref3 = _temp3 === void 0 ? {} : _temp3, - _ref3$locale = _ref3.locale, - locale = _ref3$locale === void 0 ? null : _ref3$locale, - _ref3$numberingSystem = _ref3.numberingSystem, - numberingSystem = _ref3$numberingSystem === void 0 ? null : _ref3$numberingSystem, - _ref3$locObj = _ref3.locObj, - locObj = _ref3$locObj === void 0 ? null : _ref3$locObj; - - return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length); - } - /** - * Return an array of format week names. - * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that - * changes the string. - * See {@link Info#weekdays} - * @param {string} [length='long'] - the length of the month representation, such as "narrow", "short", "long". - * @param {Object} opts - options - * @param {string} [opts.locale=null] - the locale code - * @param {string} [opts.numberingSystem=null] - the numbering system - * @param {string} [opts.locObj=null] - an existing locale object to use - * @return {Array} - */ - ; - - Info.weekdaysFormat = function weekdaysFormat(length, _temp4) { - if (length === void 0) { - length = "long"; - } - - var _ref4 = _temp4 === void 0 ? {} : _temp4, - _ref4$locale = _ref4.locale, - locale = _ref4$locale === void 0 ? null : _ref4$locale, - _ref4$numberingSystem = _ref4.numberingSystem, - numberingSystem = _ref4$numberingSystem === void 0 ? null : _ref4$numberingSystem, - _ref4$locObj = _ref4.locObj, - locObj = _ref4$locObj === void 0 ? null : _ref4$locObj; - - return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true); - } - /** - * Return an array of meridiems. - * @param {Object} opts - options - * @param {string} [opts.locale] - the locale code - * @example Info.meridiems() //=> [ 'AM', 'PM' ] - * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ] - * @return {Array} - */ - ; - - Info.meridiems = function meridiems(_temp5) { - var _ref5 = _temp5 === void 0 ? {} : _temp5, - _ref5$locale = _ref5.locale, - locale = _ref5$locale === void 0 ? null : _ref5$locale; - - return Locale.create(locale).meridiems(); - } - /** - * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian. - * @param {string} [length='short'] - the length of the era representation, such as "short" or "long". - * @param {Object} opts - options - * @param {string} [opts.locale] - the locale code - * @example Info.eras() //=> [ 'BC', 'AD' ] - * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ] - * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ] - * @return {Array} - */ - ; - - Info.eras = function eras(length, _temp6) { - if (length === void 0) { - length = "short"; - } - - var _ref6 = _temp6 === void 0 ? {} : _temp6, - _ref6$locale = _ref6.locale, - locale = _ref6$locale === void 0 ? null : _ref6$locale; - - return Locale.create(locale, null, "gregory").eras(length); - } - /** - * Return the set of available features in this environment. - * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case. - * Keys: - * * `relative`: whether this environment supports relative time formatting - * @example Info.features() //=> { relative: false } - * @return {Object} - */ - ; - - Info.features = function features() { - return { - relative: hasRelative() - }; - }; - - return Info; -}(); - -function dayDiff(earlier, later) { - var utcDayStart = function utcDayStart(dt) { - return dt.toUTC(0, { - keepLocalTime: true - }).startOf("day").valueOf(); - }, - ms = utcDayStart(later) - utcDayStart(earlier); - - return Math.floor(Duration.fromMillis(ms).as("days")); -} - -function highOrderDiffs(cursor, later, units) { - var differs = [["years", function (a, b) { - return b.year - a.year; - }], ["quarters", function (a, b) { - return b.quarter - a.quarter; - }], ["months", function (a, b) { - return b.month - a.month + (b.year - a.year) * 12; - }], ["weeks", function (a, b) { - var days = dayDiff(a, b); - return (days - days % 7) / 7; - }], ["days", dayDiff]]; - var results = {}; - var lowestOrder, highWater; - - for (var _i = 0, _differs = differs; _i < _differs.length; _i++) { - var _differs$_i = _differs[_i], - unit = _differs$_i[0], - differ = _differs$_i[1]; - - if (units.indexOf(unit) >= 0) { - var _cursor$plus; - - lowestOrder = unit; - var delta = differ(cursor, later); - highWater = cursor.plus((_cursor$plus = {}, _cursor$plus[unit] = delta, _cursor$plus)); - - if (highWater > later) { - var _cursor$plus2; - - cursor = cursor.plus((_cursor$plus2 = {}, _cursor$plus2[unit] = delta - 1, _cursor$plus2)); - delta -= 1; - } else { - cursor = highWater; - } - - results[unit] = delta; - } - } - - return [cursor, results, highWater, lowestOrder]; -} - -function _diff (earlier, later, units, opts) { - var _highOrderDiffs = highOrderDiffs(earlier, later, units), - cursor = _highOrderDiffs[0], - results = _highOrderDiffs[1], - highWater = _highOrderDiffs[2], - lowestOrder = _highOrderDiffs[3]; - - var remainingMillis = later - cursor; - var lowerOrderUnits = units.filter(function (u) { - return ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0; - }); - - if (lowerOrderUnits.length === 0) { - if (highWater < later) { - var _cursor$plus3; - - highWater = cursor.plus((_cursor$plus3 = {}, _cursor$plus3[lowestOrder] = 1, _cursor$plus3)); - } - - if (highWater !== cursor) { - results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor); - } - } - - var duration = Duration.fromObject(results, opts); - - if (lowerOrderUnits.length > 0) { - var _Duration$fromMillis; - - return (_Duration$fromMillis = Duration.fromMillis(remainingMillis, opts)).shiftTo.apply(_Duration$fromMillis, lowerOrderUnits).plus(duration); - } else { - return duration; - } -} - -var numberingSystems = { - arab: "[\u0660-\u0669]", - arabext: "[\u06F0-\u06F9]", - bali: "[\u1B50-\u1B59]", - beng: "[\u09E6-\u09EF]", - deva: "[\u0966-\u096F]", - fullwide: "[\uFF10-\uFF19]", - gujr: "[\u0AE6-\u0AEF]", - hanidec: "[〇|一|二|三|四|五|六|七|八|九]", - khmr: "[\u17E0-\u17E9]", - knda: "[\u0CE6-\u0CEF]", - laoo: "[\u0ED0-\u0ED9]", - limb: "[\u1946-\u194F]", - mlym: "[\u0D66-\u0D6F]", - mong: "[\u1810-\u1819]", - mymr: "[\u1040-\u1049]", - orya: "[\u0B66-\u0B6F]", - tamldec: "[\u0BE6-\u0BEF]", - telu: "[\u0C66-\u0C6F]", - thai: "[\u0E50-\u0E59]", - tibt: "[\u0F20-\u0F29]", - latn: "\\d" -}; -var numberingSystemsUTF16 = { - arab: [1632, 1641], - arabext: [1776, 1785], - bali: [6992, 7001], - beng: [2534, 2543], - deva: [2406, 2415], - fullwide: [65296, 65303], - gujr: [2790, 2799], - khmr: [6112, 6121], - knda: [3302, 3311], - laoo: [3792, 3801], - limb: [6470, 6479], - mlym: [3430, 3439], - mong: [6160, 6169], - mymr: [4160, 4169], - orya: [2918, 2927], - tamldec: [3046, 3055], - telu: [3174, 3183], - thai: [3664, 3673], - tibt: [3872, 3881] -}; -var hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split(""); -function parseDigits(str) { - var value = parseInt(str, 10); - - if (isNaN(value)) { - value = ""; - - for (var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - - if (str[i].search(numberingSystems.hanidec) !== -1) { - value += hanidecChars.indexOf(str[i]); - } else { - for (var key in numberingSystemsUTF16) { - var _numberingSystemsUTF = numberingSystemsUTF16[key], - min = _numberingSystemsUTF[0], - max = _numberingSystemsUTF[1]; - - if (code >= min && code <= max) { - value += code - min; - } - } - } - } - - return parseInt(value, 10); - } else { - return value; - } -} -function digitRegex(_ref, append) { - var numberingSystem = _ref.numberingSystem; - - if (append === void 0) { - append = ""; - } - - return new RegExp("" + numberingSystems[numberingSystem || "latn"] + append); -} - -var MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support"; - -function intUnit(regex, post) { - if (post === void 0) { - post = function post(i) { - return i; - }; - } - - return { - regex: regex, - deser: function deser(_ref) { - var s = _ref[0]; - return post(parseDigits(s)); - } - }; -} - -var NBSP = String.fromCharCode(160); -var spaceOrNBSP = "( |" + NBSP + ")"; -var spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, "g"); - -function fixListRegex(s) { - // make dots optional and also make them literal - // make space and non breakable space characters interchangeable - return s.replace(/\./g, "\\.?").replace(spaceOrNBSPRegExp, spaceOrNBSP); -} - -function stripInsensitivities(s) { - return s.replace(/\./g, "") // ignore dots that were made optional - .replace(spaceOrNBSPRegExp, " ") // interchange space and nbsp - .toLowerCase(); -} - -function oneOf(strings, startIndex) { - if (strings === null) { - return null; - } else { - return { - regex: RegExp(strings.map(fixListRegex).join("|")), - deser: function deser(_ref2) { - var s = _ref2[0]; - return strings.findIndex(function (i) { - return stripInsensitivities(s) === stripInsensitivities(i); - }) + startIndex; - } - }; - } -} - -function offset(regex, groups) { - return { - regex: regex, - deser: function deser(_ref3) { - var h = _ref3[1], - m = _ref3[2]; - return signedOffset(h, m); - }, - groups: groups - }; -} - -function simple(regex) { - return { - regex: regex, - deser: function deser(_ref4) { - var s = _ref4[0]; - return s; - } - }; -} - -function escapeToken(value) { - return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); -} - -function unitForToken(token, loc) { - var one = digitRegex(loc), - two = digitRegex(loc, "{2}"), - three = digitRegex(loc, "{3}"), - four = digitRegex(loc, "{4}"), - six = digitRegex(loc, "{6}"), - oneOrTwo = digitRegex(loc, "{1,2}"), - oneToThree = digitRegex(loc, "{1,3}"), - oneToSix = digitRegex(loc, "{1,6}"), - oneToNine = digitRegex(loc, "{1,9}"), - twoToFour = digitRegex(loc, "{2,4}"), - fourToSix = digitRegex(loc, "{4,6}"), - literal = function literal(t) { - return { - regex: RegExp(escapeToken(t.val)), - deser: function deser(_ref5) { - var s = _ref5[0]; - return s; - }, - literal: true - }; - }, - unitate = function unitate(t) { - if (token.literal) { - return literal(t); - } - - switch (t.val) { - // era - case "G": - return oneOf(loc.eras("short", false), 0); - - case "GG": - return oneOf(loc.eras("long", false), 0); - // years - - case "y": - return intUnit(oneToSix); - - case "yy": - return intUnit(twoToFour, untruncateYear); - - case "yyyy": - return intUnit(four); - - case "yyyyy": - return intUnit(fourToSix); - - case "yyyyyy": - return intUnit(six); - // months - - case "M": - return intUnit(oneOrTwo); - - case "MM": - return intUnit(two); - - case "MMM": - return oneOf(loc.months("short", true, false), 1); - - case "MMMM": - return oneOf(loc.months("long", true, false), 1); - - case "L": - return intUnit(oneOrTwo); - - case "LL": - return intUnit(two); - - case "LLL": - return oneOf(loc.months("short", false, false), 1); - - case "LLLL": - return oneOf(loc.months("long", false, false), 1); - // dates - - case "d": - return intUnit(oneOrTwo); - - case "dd": - return intUnit(two); - // ordinals - - case "o": - return intUnit(oneToThree); - - case "ooo": - return intUnit(three); - // time - - case "HH": - return intUnit(two); - - case "H": - return intUnit(oneOrTwo); - - case "hh": - return intUnit(two); - - case "h": - return intUnit(oneOrTwo); - - case "mm": - return intUnit(two); - - case "m": - return intUnit(oneOrTwo); - - case "q": - return intUnit(oneOrTwo); - - case "qq": - return intUnit(two); - - case "s": - return intUnit(oneOrTwo); - - case "ss": - return intUnit(two); - - case "S": - return intUnit(oneToThree); - - case "SSS": - return intUnit(three); - - case "u": - return simple(oneToNine); - - case "uu": - return simple(oneOrTwo); - - case "uuu": - return intUnit(one); - // meridiem - - case "a": - return oneOf(loc.meridiems(), 0); - // weekYear (k) - - case "kkkk": - return intUnit(four); - - case "kk": - return intUnit(twoToFour, untruncateYear); - // weekNumber (W) - - case "W": - return intUnit(oneOrTwo); - - case "WW": - return intUnit(two); - // weekdays - - case "E": - case "c": - return intUnit(one); - - case "EEE": - return oneOf(loc.weekdays("short", false, false), 1); - - case "EEEE": - return oneOf(loc.weekdays("long", false, false), 1); - - case "ccc": - return oneOf(loc.weekdays("short", true, false), 1); - - case "cccc": - return oneOf(loc.weekdays("long", true, false), 1); - // offset/zone - - case "Z": - case "ZZ": - return offset(new RegExp("([+-]" + oneOrTwo.source + ")(?::(" + two.source + "))?"), 2); - - case "ZZZ": - return offset(new RegExp("([+-]" + oneOrTwo.source + ")(" + two.source + ")?"), 2); - // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing - // because we don't have any way to figure out what they are - - case "z": - return simple(/[a-z_+-/]{1,256}?/i); - - default: - return literal(t); - } - }; - - var unit = unitate(token) || { - invalidReason: MISSING_FTP - }; - unit.token = token; - return unit; -} - -var partTypeStyleToTokenVal = { - year: { - "2-digit": "yy", - numeric: "yyyyy" - }, - month: { - numeric: "M", - "2-digit": "MM", - short: "MMM", - long: "MMMM" - }, - day: { - numeric: "d", - "2-digit": "dd" - }, - weekday: { - short: "EEE", - long: "EEEE" - }, - dayperiod: "a", - dayPeriod: "a", - hour: { - numeric: "h", - "2-digit": "hh" - }, - minute: { - numeric: "m", - "2-digit": "mm" - }, - second: { - numeric: "s", - "2-digit": "ss" - } -}; - -function tokenForPart(part, locale, formatOpts) { - var type = part.type, - value = part.value; - - if (type === "literal") { - return { - literal: true, - val: value - }; - } - - var style = formatOpts[type]; - var val = partTypeStyleToTokenVal[type]; - - if (typeof val === "object") { - val = val[style]; - } - - if (val) { - return { - literal: false, - val: val - }; - } - - return undefined; -} - -function buildRegex(units) { - var re = units.map(function (u) { - return u.regex; - }).reduce(function (f, r) { - return f + "(" + r.source + ")"; - }, ""); - return ["^" + re + "$", units]; -} - -function match(input, regex, handlers) { - var matches = input.match(regex); - - if (matches) { - var all = {}; - var matchIndex = 1; - - for (var i in handlers) { - if (hasOwnProperty(handlers, i)) { - var h = handlers[i], - groups = h.groups ? h.groups + 1 : 1; - - if (!h.literal && h.token) { - all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups)); - } - - matchIndex += groups; - } - } - - return [matches, all]; - } else { - return [matches, {}]; - } -} - -function dateTimeFromMatches(matches) { - var toField = function toField(token) { - switch (token) { - case "S": - return "millisecond"; - - case "s": - return "second"; - - case "m": - return "minute"; - - case "h": - case "H": - return "hour"; - - case "d": - return "day"; - - case "o": - return "ordinal"; - - case "L": - case "M": - return "month"; - - case "y": - return "year"; - - case "E": - case "c": - return "weekday"; - - case "W": - return "weekNumber"; - - case "k": - return "weekYear"; - - case "q": - return "quarter"; - - default: - return null; - } - }; - - var zone; - - if (!isUndefined(matches.Z)) { - zone = new FixedOffsetZone(matches.Z); - } else if (!isUndefined(matches.z)) { - zone = IANAZone.create(matches.z); - } else { - zone = null; - } - - if (!isUndefined(matches.q)) { - matches.M = (matches.q - 1) * 3 + 1; - } - - if (!isUndefined(matches.h)) { - if (matches.h < 12 && matches.a === 1) { - matches.h += 12; - } else if (matches.h === 12 && matches.a === 0) { - matches.h = 0; - } - } - - if (matches.G === 0 && matches.y) { - matches.y = -matches.y; - } - - if (!isUndefined(matches.u)) { - matches.S = parseMillis(matches.u); - } - - var vals = Object.keys(matches).reduce(function (r, k) { - var f = toField(k); - - if (f) { - r[f] = matches[k]; - } - - return r; - }, {}); - return [vals, zone]; -} - -var dummyDateTimeCache = null; - -function getDummyDateTime() { - if (!dummyDateTimeCache) { - dummyDateTimeCache = DateTime.fromMillis(1555555555555); - } - - return dummyDateTimeCache; -} - -function maybeExpandMacroToken(token, locale) { - if (token.literal) { - return token; - } - - var formatOpts = Formatter.macroTokenToFormatOpts(token.val); - - if (!formatOpts) { - return token; - } - - var formatter = Formatter.create(locale, formatOpts); - var parts = formatter.formatDateTimeParts(getDummyDateTime()); - var tokens = parts.map(function (p) { - return tokenForPart(p, locale, formatOpts); - }); - - if (tokens.includes(undefined)) { - return token; - } - - return tokens; -} - -function expandMacroTokens(tokens, locale) { - var _Array$prototype; - - return (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, tokens.map(function (t) { - return maybeExpandMacroToken(t, locale); - })); -} -/** - * @private - */ - - -function explainFromTokens(locale, input, format) { - var tokens = expandMacroTokens(Formatter.parseFormat(format), locale), - units = tokens.map(function (t) { - return unitForToken(t, locale); - }), - disqualifyingUnit = units.find(function (t) { - return t.invalidReason; - }); - - if (disqualifyingUnit) { - return { - input: input, - tokens: tokens, - invalidReason: disqualifyingUnit.invalidReason - }; - } else { - var _buildRegex = buildRegex(units), - regexString = _buildRegex[0], - handlers = _buildRegex[1], - regex = RegExp(regexString, "i"), - _match = match(input, regex, handlers), - rawMatches = _match[0], - matches = _match[1], - _ref6 = matches ? dateTimeFromMatches(matches) : [null, null], - result = _ref6[0], - zone = _ref6[1]; - - if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) { - throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format"); - } - - return { - input: input, - tokens: tokens, - regex: regex, - rawMatches: rawMatches, - matches: matches, - result: result, - zone: zone - }; - } -} -function parseFromTokens(locale, input, format) { - var _explainFromTokens = explainFromTokens(locale, input, format), - result = _explainFromTokens.result, - zone = _explainFromTokens.zone, - invalidReason = _explainFromTokens.invalidReason; - - return [result, zone, invalidReason]; -} - -var nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], - leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; - -function unitOutOfRange(unit, value) { - return new Invalid("unit out of range", "you specified " + value + " (of type " + typeof value + ") as a " + unit + ", which is invalid"); -} - -function dayOfWeek(year, month, day) { - var js = new Date(Date.UTC(year, month - 1, day)).getUTCDay(); - return js === 0 ? 7 : js; -} - -function computeOrdinal(year, month, day) { - return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1]; -} - -function uncomputeOrdinal(year, ordinal) { - var table = isLeapYear(year) ? leapLadder : nonLeapLadder, - month0 = table.findIndex(function (i) { - return i < ordinal; - }), - day = ordinal - table[month0]; - return { - month: month0 + 1, - day: day - }; -} -/** - * @private - */ - - -function gregorianToWeek(gregObj) { - var year = gregObj.year, - month = gregObj.month, - day = gregObj.day, - ordinal = computeOrdinal(year, month, day), - weekday = dayOfWeek(year, month, day); - var weekNumber = Math.floor((ordinal - weekday + 10) / 7), - weekYear; - - if (weekNumber < 1) { - weekYear = year - 1; - weekNumber = weeksInWeekYear(weekYear); - } else if (weekNumber > weeksInWeekYear(year)) { - weekYear = year + 1; - weekNumber = 1; - } else { - weekYear = year; - } - - return _extends({ - weekYear: weekYear, - weekNumber: weekNumber, - weekday: weekday - }, timeObject(gregObj)); -} -function weekToGregorian(weekData) { - var weekYear = weekData.weekYear, - weekNumber = weekData.weekNumber, - weekday = weekData.weekday, - weekdayOfJan4 = dayOfWeek(weekYear, 1, 4), - yearInDays = daysInYear(weekYear); - var ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3, - year; - - if (ordinal < 1) { - year = weekYear - 1; - ordinal += daysInYear(year); - } else if (ordinal > yearInDays) { - year = weekYear + 1; - ordinal -= daysInYear(weekYear); - } else { - year = weekYear; - } - - var _uncomputeOrdinal = uncomputeOrdinal(year, ordinal), - month = _uncomputeOrdinal.month, - day = _uncomputeOrdinal.day; - - return _extends({ - year: year, - month: month, - day: day - }, timeObject(weekData)); -} -function gregorianToOrdinal(gregData) { - var year = gregData.year, - month = gregData.month, - day = gregData.day; - var ordinal = computeOrdinal(year, month, day); - return _extends({ - year: year, - ordinal: ordinal - }, timeObject(gregData)); -} -function ordinalToGregorian(ordinalData) { - var year = ordinalData.year, - ordinal = ordinalData.ordinal; - - var _uncomputeOrdinal2 = uncomputeOrdinal(year, ordinal), - month = _uncomputeOrdinal2.month, - day = _uncomputeOrdinal2.day; - - return _extends({ - year: year, - month: month, - day: day - }, timeObject(ordinalData)); -} -function hasInvalidWeekData(obj) { - var validYear = isInteger(obj.weekYear), - validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)), - validWeekday = integerBetween(obj.weekday, 1, 7); - - if (!validYear) { - return unitOutOfRange("weekYear", obj.weekYear); - } else if (!validWeek) { - return unitOutOfRange("week", obj.week); - } else if (!validWeekday) { - return unitOutOfRange("weekday", obj.weekday); - } else return false; -} -function hasInvalidOrdinalData(obj) { - var validYear = isInteger(obj.year), - validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year)); - - if (!validYear) { - return unitOutOfRange("year", obj.year); - } else if (!validOrdinal) { - return unitOutOfRange("ordinal", obj.ordinal); - } else return false; -} -function hasInvalidGregorianData(obj) { - var validYear = isInteger(obj.year), - validMonth = integerBetween(obj.month, 1, 12), - validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month)); - - if (!validYear) { - return unitOutOfRange("year", obj.year); - } else if (!validMonth) { - return unitOutOfRange("month", obj.month); - } else if (!validDay) { - return unitOutOfRange("day", obj.day); - } else return false; -} -function hasInvalidTimeData(obj) { - var hour = obj.hour, - minute = obj.minute, - second = obj.second, - millisecond = obj.millisecond; - var validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0, - validMinute = integerBetween(minute, 0, 59), - validSecond = integerBetween(second, 0, 59), - validMillisecond = integerBetween(millisecond, 0, 999); - - if (!validHour) { - return unitOutOfRange("hour", hour); - } else if (!validMinute) { - return unitOutOfRange("minute", minute); - } else if (!validSecond) { - return unitOutOfRange("second", second); - } else if (!validMillisecond) { - return unitOutOfRange("millisecond", millisecond); - } else return false; -} - -var INVALID = "Invalid DateTime"; -var MAX_DATE = 8.64e15; - -function unsupportedZone(zone) { - return new Invalid("unsupported zone", "the zone \"" + zone.name + "\" is not supported"); -} // we cache week data on the DT object and this intermediates the cache - - -function possiblyCachedWeekData(dt) { - if (dt.weekData === null) { - dt.weekData = gregorianToWeek(dt.c); - } - - return dt.weekData; -} // clone really means, "make a new object with these modifications". all "setters" really use this -// to create a new object while only changing some of the properties - - -function clone(inst, alts) { - var current = { - ts: inst.ts, - zone: inst.zone, - c: inst.c, - o: inst.o, - loc: inst.loc, - invalid: inst.invalid - }; - return new DateTime(_extends({}, current, alts, { - old: current - })); -} // find the right offset a given local time. The o input is our guess, which determines which -// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST) - - -function fixOffset(localTS, o, tz) { - // Our UTC time is just a guess because our offset is just a guess - var utcGuess = localTS - o * 60 * 1000; // Test whether the zone matches the offset for this ts - - var o2 = tz.offset(utcGuess); // If so, offset didn't change and we're done - - if (o === o2) { - return [utcGuess, o]; - } // If not, change the ts by the difference in the offset - - - utcGuess -= (o2 - o) * 60 * 1000; // If that gives us the local time we want, we're done - - var o3 = tz.offset(utcGuess); - - if (o2 === o3) { - return [utcGuess, o2]; - } // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time - - - return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)]; -} // convert an epoch timestamp into a calendar object with the given offset - - -function tsToObj(ts, offset) { - ts += offset * 60 * 1000; - var d = new Date(ts); - return { - year: d.getUTCFullYear(), - month: d.getUTCMonth() + 1, - day: d.getUTCDate(), - hour: d.getUTCHours(), - minute: d.getUTCMinutes(), - second: d.getUTCSeconds(), - millisecond: d.getUTCMilliseconds() - }; -} // convert a calendar object to a epoch timestamp - - -function objToTS(obj, offset, zone) { - return fixOffset(objToLocalTS(obj), offset, zone); -} // create a new DT instance by adding a duration, adjusting for DSTs - - -function adjustTime(inst, dur) { - var oPre = inst.o, - year = inst.c.year + Math.trunc(dur.years), - month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3, - c = _extends({}, inst.c, { - year: year, - month: month, - day: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + Math.trunc(dur.weeks) * 7 - }), - millisToAdd = Duration.fromObject({ - years: dur.years - Math.trunc(dur.years), - quarters: dur.quarters - Math.trunc(dur.quarters), - months: dur.months - Math.trunc(dur.months), - weeks: dur.weeks - Math.trunc(dur.weeks), - days: dur.days - Math.trunc(dur.days), - hours: dur.hours, - minutes: dur.minutes, - seconds: dur.seconds, - milliseconds: dur.milliseconds - }).as("milliseconds"), - localTS = objToLocalTS(c); - - var _fixOffset = fixOffset(localTS, oPre, inst.zone), - ts = _fixOffset[0], - o = _fixOffset[1]; - - if (millisToAdd !== 0) { - ts += millisToAdd; // that could have changed the offset by going over a DST, but we want to keep the ts the same - - o = inst.zone.offset(ts); - } - - return { - ts: ts, - o: o - }; -} // helper useful in turning the results of parsing into real dates -// by handling the zone options - - -function parseDataToDateTime(parsed, parsedZone, opts, format, text) { - var setZone = opts.setZone, - zone = opts.zone; - - if (parsed && Object.keys(parsed).length !== 0) { - var interpretationZone = parsedZone || zone, - inst = DateTime.fromObject(parsed, _extends({}, opts, { - zone: interpretationZone - })); - return setZone ? inst : inst.setZone(zone); - } else { - return DateTime.invalid(new Invalid("unparsable", "the input \"" + text + "\" can't be parsed as " + format)); - } -} // if you want to output a technical format (e.g. RFC 2822), this helper -// helps handle the details - - -function toTechFormat(dt, format, allowZ) { - if (allowZ === void 0) { - allowZ = true; - } - - return dt.isValid ? Formatter.create(Locale.create("en-US"), { - allowZ: allowZ, - forceSimple: true - }).formatDateTimeFromString(dt, format) : null; -} // technical time formats (e.g. the time part of ISO 8601), take some options -// and this commonizes their handling - - -function toTechTimeFormat(dt, _ref) { - var _ref$suppressSeconds = _ref.suppressSeconds, - suppressSeconds = _ref$suppressSeconds === void 0 ? false : _ref$suppressSeconds, - _ref$suppressMillisec = _ref.suppressMilliseconds, - suppressMilliseconds = _ref$suppressMillisec === void 0 ? false : _ref$suppressMillisec, - includeOffset = _ref.includeOffset, - _ref$includePrefix = _ref.includePrefix, - includePrefix = _ref$includePrefix === void 0 ? false : _ref$includePrefix, - _ref$includeZone = _ref.includeZone, - includeZone = _ref$includeZone === void 0 ? false : _ref$includeZone, - _ref$spaceZone = _ref.spaceZone, - spaceZone = _ref$spaceZone === void 0 ? false : _ref$spaceZone, - _ref$format = _ref.format, - format = _ref$format === void 0 ? "extended" : _ref$format; - var fmt = format === "basic" ? "HHmm" : "HH:mm"; - - if (!suppressSeconds || dt.second !== 0 || dt.millisecond !== 0) { - fmt += format === "basic" ? "ss" : ":ss"; - - if (!suppressMilliseconds || dt.millisecond !== 0) { - fmt += ".SSS"; - } - } - - if ((includeZone || includeOffset) && spaceZone) { - fmt += " "; - } - - if (includeZone) { - fmt += "z"; - } else if (includeOffset) { - fmt += format === "basic" ? "ZZZ" : "ZZ"; - } - - var str = toTechFormat(dt, fmt); - - if (includePrefix) { - str = "T" + str; - } - - return str; -} // defaults for unspecified units in the supported calendars - - -var defaultUnitValues = { - month: 1, - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0 -}, - defaultWeekUnitValues = { - weekNumber: 1, - weekday: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0 -}, - defaultOrdinalUnitValues = { - ordinal: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0 -}; // Units in the supported calendars, sorted by bigness - -var orderedUnits = ["year", "month", "day", "hour", "minute", "second", "millisecond"], - orderedWeekUnits = ["weekYear", "weekNumber", "weekday", "hour", "minute", "second", "millisecond"], - orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"]; // standardize case and plurality in units - -function normalizeUnit(unit) { - var normalized = { - year: "year", - years: "year", - month: "month", - months: "month", - day: "day", - days: "day", - hour: "hour", - hours: "hour", - minute: "minute", - minutes: "minute", - quarter: "quarter", - quarters: "quarter", - second: "second", - seconds: "second", - millisecond: "millisecond", - milliseconds: "millisecond", - weekday: "weekday", - weekdays: "weekday", - weeknumber: "weekNumber", - weeksnumber: "weekNumber", - weeknumbers: "weekNumber", - weekyear: "weekYear", - weekyears: "weekYear", - ordinal: "ordinal" - }[unit.toLowerCase()]; - if (!normalized) throw new InvalidUnitError(unit); - return normalized; -} // this is a dumbed down version of fromObject() that runs about 60% faster -// but doesn't do any validation, makes a bunch of assumptions about what units -// are present, and so on. -// this is a dumbed down version of fromObject() that runs about 60% faster -// but doesn't do any validation, makes a bunch of assumptions about what units -// are present, and so on. - - -function quickDT(obj, opts) { - var zone = normalizeZone(opts.zone, Settings.defaultZone), - loc = Locale.fromObject(opts), - tsNow = Settings.now(); - var ts, o; // assume we have the higher-order units - - if (!isUndefined(obj.year)) { - for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits), _step; !(_step = _iterator()).done;) { - var u = _step.value; - - if (isUndefined(obj[u])) { - obj[u] = defaultUnitValues[u]; - } - } - - var invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj); - - if (invalid) { - return DateTime.invalid(invalid); - } - - var offsetProvis = zone.offset(tsNow); - - var _objToTS = objToTS(obj, offsetProvis, zone); - - ts = _objToTS[0]; - o = _objToTS[1]; - } else { - ts = tsNow; - } - - return new DateTime({ - ts: ts, - zone: zone, - loc: loc, - o: o - }); -} - -function diffRelative(start, end, opts) { - var round = isUndefined(opts.round) ? true : opts.round, - format = function format(c, unit) { - c = roundTo(c, round || opts.calendary ? 0 : 2, true); - var formatter = end.loc.clone(opts).relFormatter(opts); - return formatter.format(c, unit); - }, - differ = function differ(unit) { - if (opts.calendary) { - if (!end.hasSame(start, unit)) { - return end.startOf(unit).diff(start.startOf(unit), unit).get(unit); - } else return 0; - } else { - return end.diff(start, unit).get(unit); - } - }; - - if (opts.unit) { - return format(differ(opts.unit), opts.unit); - } - - for (var _iterator2 = _createForOfIteratorHelperLoose(opts.units), _step2; !(_step2 = _iterator2()).done;) { - var unit = _step2.value; - var count = differ(unit); - - if (Math.abs(count) >= 1) { - return format(count, unit); - } - } - - return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]); -} - -function lastOpts(argList) { - var opts = {}, - args; - - if (argList.length > 0 && typeof argList[argList.length - 1] === "object") { - opts = argList[argList.length - 1]; - args = Array.from(argList).slice(0, argList.length - 1); - } else { - args = Array.from(argList); - } - - return [opts, args]; -} -/** - * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them. - * - * A DateTime comprises of: - * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch. - * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone). - * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`. - * - * Here is a brief overview of the most commonly used functionality it provides: - * - * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime#local}, {@link DateTime#utc}, and (most flexibly) {@link DateTime#fromObject}. To create one from a standard string format, use {@link DateTime#fromISO}, {@link DateTime#fromHTTP}, and {@link DateTime#fromRFC2822}. To create one from a custom string format, use {@link DateTime#fromFormat}. To create one from a native JS date, use {@link DateTime#fromJSDate}. - * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month}, - * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors. - * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors. - * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors. - * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}. - * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}. - * - * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation. - */ - - -var DateTime = /*#__PURE__*/function () { - /** - * @access private - */ - function DateTime(config) { - var zone = config.zone || Settings.defaultZone; - var invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || (!zone.isValid ? unsupportedZone(zone) : null); - /** - * @access private - */ - - this.ts = isUndefined(config.ts) ? Settings.now() : config.ts; - var c = null, - o = null; - - if (!invalid) { - var unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone); - - if (unchanged) { - var _ref2 = [config.old.c, config.old.o]; - c = _ref2[0]; - o = _ref2[1]; - } else { - var ot = zone.offset(this.ts); - c = tsToObj(this.ts, ot); - invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null; - c = invalid ? null : c; - o = invalid ? null : ot; - } - } - /** - * @access private - */ - - - this._zone = zone; - /** - * @access private - */ - - this.loc = config.loc || Locale.create(); - /** - * @access private - */ - - this.invalid = invalid; - /** - * @access private - */ - - this.weekData = null; - /** - * @access private - */ - - this.c = c; - /** - * @access private - */ - - this.o = o; - /** - * @access private - */ - - this.isLuxonDateTime = true; - } // CONSTRUCT - - /** - * Create a DateTime for the current instant, in the system's time zone. - * - * Use Settings to override these default values if needed. - * @example DateTime.now().toISO() //~> now in the ISO format - * @return {DateTime} - */ - - - DateTime.now = function now() { - return new DateTime({}); - } - /** - * Create a local DateTime - * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used - * @param {number} [month=1] - The month, 1-indexed - * @param {number} [day=1] - The day of the month, 1-indexed - * @param {number} [hour=0] - The hour of the day, in 24-hour time - * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 - * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 - * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 - * @example DateTime.local() //~> now - * @example DateTime.local({ zone: "America/New_York" }) //~> now, in US east coast time - * @example DateTime.local(2017) //~> 2017-01-01T00:00:00 - * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00 - * @example DateTime.local(2017, 3, 12, { locale: "fr" }) //~> 2017-03-12T00:00:00, with a French locale - * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00 - * @example DateTime.local(2017, 3, 12, 5, { zone: "utc" }) //~> 2017-03-12T05:00:00, in UTC - * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00 - * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10 - * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765 - * @return {DateTime} - */ - ; - - DateTime.local = function local() { - var _lastOpts = lastOpts(arguments), - opts = _lastOpts[0], - args = _lastOpts[1], - year = args[0], - month = args[1], - day = args[2], - hour = args[3], - minute = args[4], - second = args[5], - millisecond = args[6]; - - return quickDT({ - year: year, - month: month, - day: day, - hour: hour, - minute: minute, - second: second, - millisecond: millisecond - }, opts); - } - /** - * Create a DateTime in UTC - * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used - * @param {number} [month=1] - The month, 1-indexed - * @param {number} [day=1] - The day of the month - * @param {number} [hour=0] - The hour of the day, in 24-hour time - * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 - * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 - * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 - * @param {Object} options - configuration options for the DateTime - * @param {string} [options.locale] - a locale to set on the resulting DateTime instance - * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance - * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance - * @example DateTime.utc() //~> now - * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z - * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z - * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z - * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z - * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z - * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: "fr" }) //~> 2017-03-12T05:45:00Z with a French locale - * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z - * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: "fr" }) //~> 2017-03-12T05:45:10.765Z with a French locale - * @return {DateTime} - */ - ; - - DateTime.utc = function utc() { - var _lastOpts2 = lastOpts(arguments), - opts = _lastOpts2[0], - args = _lastOpts2[1], - year = args[0], - month = args[1], - day = args[2], - hour = args[3], - minute = args[4], - second = args[5], - millisecond = args[6]; - - opts.zone = FixedOffsetZone.utcInstance; - return quickDT({ - year: year, - month: month, - day: day, - hour: hour, - minute: minute, - second: second, - millisecond: millisecond - }, opts); - } - /** - * Create a DateTime from a JavaScript Date object. Uses the default zone. - * @param {Date} date - a JavaScript Date object - * @param {Object} options - configuration options for the DateTime - * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into - * @return {DateTime} - */ - ; - - DateTime.fromJSDate = function fromJSDate(date, options) { - if (options === void 0) { - options = {}; - } - - var ts = isDate(date) ? date.valueOf() : NaN; - - if (Number.isNaN(ts)) { - return DateTime.invalid("invalid input"); - } - - var zoneToUse = normalizeZone(options.zone, Settings.defaultZone); - - if (!zoneToUse.isValid) { - return DateTime.invalid(unsupportedZone(zoneToUse)); - } - - return new DateTime({ - ts: ts, - zone: zoneToUse, - loc: Locale.fromObject(options) - }); - } - /** - * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. - * @param {number} milliseconds - a number of milliseconds since 1970 UTC - * @param {Object} options - configuration options for the DateTime - * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into - * @param {string} [options.locale] - a locale to set on the resulting DateTime instance - * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance - * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance - * @return {DateTime} - */ - ; - - DateTime.fromMillis = function fromMillis(milliseconds, options) { - if (options === void 0) { - options = {}; - } - - if (!isNumber(milliseconds)) { - throw new InvalidArgumentError("fromMillis requires a numerical input, but received a " + typeof milliseconds + " with value " + milliseconds); - } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) { - // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start - return DateTime.invalid("Timestamp out of range"); - } else { - return new DateTime({ - ts: milliseconds, - zone: normalizeZone(options.zone, Settings.defaultZone), - loc: Locale.fromObject(options) - }); - } - } - /** - * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. - * @param {number} seconds - a number of seconds since 1970 UTC - * @param {Object} options - configuration options for the DateTime - * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into - * @param {string} [options.locale] - a locale to set on the resulting DateTime instance - * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance - * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance - * @return {DateTime} - */ - ; - - DateTime.fromSeconds = function fromSeconds(seconds, options) { - if (options === void 0) { - options = {}; - } - - if (!isNumber(seconds)) { - throw new InvalidArgumentError("fromSeconds requires a numerical input"); - } else { - return new DateTime({ - ts: seconds * 1000, - zone: normalizeZone(options.zone, Settings.defaultZone), - loc: Locale.fromObject(options) - }); - } - } - /** - * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults. - * @param {Object} obj - the object to create the DateTime from - * @param {number} obj.year - a year, such as 1987 - * @param {number} obj.month - a month, 1-12 - * @param {number} obj.day - a day of the month, 1-31, depending on the month - * @param {number} obj.ordinal - day of the year, 1-365 or 366 - * @param {number} obj.weekYear - an ISO week year - * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year - * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday - * @param {number} obj.hour - hour of the day, 0-23 - * @param {number} obj.minute - minute of the hour, 0-59 - * @param {number} obj.second - second of the minute, 0-59 - * @param {number} obj.millisecond - millisecond of the second, 0-999 - * @param {Object} opts - options for creating this DateTime - * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone() - * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance - * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance - * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance - * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25' - * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01' - * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06 - * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }), - * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' }) - * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' }) - * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13' - * @return {DateTime} - */ - ; - - DateTime.fromObject = function fromObject(obj, opts) { - if (opts === void 0) { - opts = {}; - } - - obj = obj || {}; - var zoneToUse = normalizeZone(opts.zone, Settings.defaultZone); - - if (!zoneToUse.isValid) { - return DateTime.invalid(unsupportedZone(zoneToUse)); - } - - var tsNow = Settings.now(), - offsetProvis = zoneToUse.offset(tsNow), - normalized = normalizeObject(obj, normalizeUnit), - containsOrdinal = !isUndefined(normalized.ordinal), - containsGregorYear = !isUndefined(normalized.year), - containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), - containsGregor = containsGregorYear || containsGregorMD, - definiteWeekDef = normalized.weekYear || normalized.weekNumber, - loc = Locale.fromObject(opts); // cases: - // just a weekday -> this week's instance of that weekday, no worries - // (gregorian data or ordinal) + (weekYear or weekNumber) -> error - // (gregorian month or day) + ordinal -> error - // otherwise just use weeks or ordinals or gregorian, depending on what's specified - - if ((containsGregor || containsOrdinal) && definiteWeekDef) { - throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); - } - - if (containsGregorMD && containsOrdinal) { - throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); - } - - var useWeekData = definiteWeekDef || normalized.weekday && !containsGregor; // configure ourselves to deal with gregorian dates or week stuff - - var units, - defaultValues, - objNow = tsToObj(tsNow, offsetProvis); - - if (useWeekData) { - units = orderedWeekUnits; - defaultValues = defaultWeekUnitValues; - objNow = gregorianToWeek(objNow); - } else if (containsOrdinal) { - units = orderedOrdinalUnits; - defaultValues = defaultOrdinalUnitValues; - objNow = gregorianToOrdinal(objNow); - } else { - units = orderedUnits; - defaultValues = defaultUnitValues; - } // set default values for missing stuff - - - var foundFirst = false; - - for (var _iterator3 = _createForOfIteratorHelperLoose(units), _step3; !(_step3 = _iterator3()).done;) { - var u = _step3.value; - var v = normalized[u]; - - if (!isUndefined(v)) { - foundFirst = true; - } else if (foundFirst) { - normalized[u] = defaultValues[u]; - } else { - normalized[u] = objNow[u]; - } - } // make sure the values we have are in range - - - var higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized), - invalid = higherOrderInvalid || hasInvalidTimeData(normalized); - - if (invalid) { - return DateTime.invalid(invalid); - } // compute the actual time - - - var gregorian = useWeekData ? weekToGregorian(normalized) : containsOrdinal ? ordinalToGregorian(normalized) : normalized, - _objToTS2 = objToTS(gregorian, offsetProvis, zoneToUse), - tsFinal = _objToTS2[0], - offsetFinal = _objToTS2[1], - inst = new DateTime({ - ts: tsFinal, - zone: zoneToUse, - o: offsetFinal, - loc: loc - }); // gregorian data + weekday serves only to validate - - - if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) { - return DateTime.invalid("mismatched weekday", "you can't specify both a weekday of " + normalized.weekday + " and a date of " + inst.toISO()); - } - - return inst; - } - /** - * Create a DateTime from an ISO 8601 string - * @param {string} text - the ISO string - * @param {Object} opts - options to affect the creation - * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone - * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one - * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance - * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance - * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance - * @example DateTime.fromISO('2016-05-25T09:08:34.123') - * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00') - * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true}) - * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'}) - * @example DateTime.fromISO('2016-W05-4') - * @return {DateTime} - */ - ; - - DateTime.fromISO = function fromISO(text, opts) { - if (opts === void 0) { - opts = {}; - } - - var _parseISODate = parseISODate(text), - vals = _parseISODate[0], - parsedZone = _parseISODate[1]; - - return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text); - } - /** - * Create a DateTime from an RFC 2822 string - * @param {string} text - the RFC 2822 string - * @param {Object} opts - options to affect the creation - * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. - * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one - * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance - * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance - * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance - * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT') - * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600') - * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z') - * @return {DateTime} - */ - ; - - DateTime.fromRFC2822 = function fromRFC2822(text, opts) { - if (opts === void 0) { - opts = {}; - } - - var _parseRFC2822Date = parseRFC2822Date(text), - vals = _parseRFC2822Date[0], - parsedZone = _parseRFC2822Date[1]; - - return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text); - } - /** - * Create a DateTime from an HTTP header date - * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 - * @param {string} text - the HTTP header date - * @param {Object} opts - options to affect the creation - * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. - * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods. - * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance - * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance - * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance - * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT') - * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT') - * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994') - * @return {DateTime} - */ - ; - - DateTime.fromHTTP = function fromHTTP(text, opts) { - if (opts === void 0) { - opts = {}; - } - - var _parseHTTPDate = parseHTTPDate(text), - vals = _parseHTTPDate[0], - parsedZone = _parseHTTPDate[1]; - - return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts); - } - /** - * Create a DateTime from an input string and format string. - * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens). - * @param {string} text - the string to parse - * @param {string} fmt - the format the string is expected to be in (see the link below for the formats) - * @param {Object} opts - options to affect the creation - * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone - * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one - * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale - * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system - * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance - * @return {DateTime} - */ - ; - - DateTime.fromFormat = function fromFormat(text, fmt, opts) { - if (opts === void 0) { - opts = {}; - } - - if (isUndefined(text) || isUndefined(fmt)) { - throw new InvalidArgumentError("fromFormat requires an input string and a format"); - } - - var _opts = opts, - _opts$locale = _opts.locale, - locale = _opts$locale === void 0 ? null : _opts$locale, - _opts$numberingSystem = _opts.numberingSystem, - numberingSystem = _opts$numberingSystem === void 0 ? null : _opts$numberingSystem, - localeToUse = Locale.fromOpts({ - locale: locale, - numberingSystem: numberingSystem, - defaultToEN: true - }), - _parseFromTokens = parseFromTokens(localeToUse, text, fmt), - vals = _parseFromTokens[0], - parsedZone = _parseFromTokens[1], - invalid = _parseFromTokens[2]; - - if (invalid) { - return DateTime.invalid(invalid); - } else { - return parseDataToDateTime(vals, parsedZone, opts, "format " + fmt, text); - } - } - /** - * @deprecated use fromFormat instead - */ - ; - - DateTime.fromString = function fromString(text, fmt, opts) { - if (opts === void 0) { - opts = {}; - } - - return DateTime.fromFormat(text, fmt, opts); - } - /** - * Create a DateTime from a SQL date, time, or datetime - * Defaults to en-US if no locale has been specified, regardless of the system's locale - * @param {string} text - the string to parse - * @param {Object} opts - options to affect the creation - * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone - * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one - * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale - * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system - * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance - * @example DateTime.fromSQL('2017-05-15') - * @example DateTime.fromSQL('2017-05-15 09:12:34') - * @example DateTime.fromSQL('2017-05-15 09:12:34.342') - * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00') - * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles') - * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true }) - * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' }) - * @example DateTime.fromSQL('09:12:34.342') - * @return {DateTime} - */ - ; - - DateTime.fromSQL = function fromSQL(text, opts) { - if (opts === void 0) { - opts = {}; - } - - var _parseSQL = parseSQL(text), - vals = _parseSQL[0], - parsedZone = _parseSQL[1]; - - return parseDataToDateTime(vals, parsedZone, opts, "SQL", text); - } - /** - * Create an invalid DateTime. - * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent - * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information - * @return {DateTime} - */ - ; - - DateTime.invalid = function invalid(reason, explanation) { - if (explanation === void 0) { - explanation = null; - } - - if (!reason) { - throw new InvalidArgumentError("need to specify a reason the DateTime is invalid"); - } - - var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); - - if (Settings.throwOnInvalid) { - throw new InvalidDateTimeError(invalid); - } else { - return new DateTime({ - invalid: invalid - }); - } - } - /** - * Check if an object is a DateTime. Works across context boundaries - * @param {object} o - * @return {boolean} - */ - ; - - DateTime.isDateTime = function isDateTime(o) { - return o && o.isLuxonDateTime || false; - } // INFO - - /** - * Get the value of unit. - * @param {string} unit - a unit such as 'minute' or 'day' - * @example DateTime.local(2017, 7, 4).get('month'); //=> 7 - * @example DateTime.local(2017, 7, 4).get('day'); //=> 4 - * @return {number} - */ - ; - - var _proto = DateTime.prototype; - - _proto.get = function get(unit) { - return this[unit]; - } - /** - * Returns whether the DateTime is valid. Invalid DateTimes occur when: - * * The DateTime was created from invalid calendar information, such as the 13th month or February 30 - * * The DateTime was created by an operation on another invalid date - * @type {boolean} - */ - ; - - /** - * Returns the resolved Intl options for this DateTime. - * This is useful in understanding the behavior of formatting methods - * @param {Object} opts - the same options as toLocaleString - * @return {Object} - */ - _proto.resolvedLocaleOptions = function resolvedLocaleOptions(opts) { - if (opts === void 0) { - opts = {}; - } - - var _Formatter$create$res = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this), - locale = _Formatter$create$res.locale, - numberingSystem = _Formatter$create$res.numberingSystem, - calendar = _Formatter$create$res.calendar; - - return { - locale: locale, - numberingSystem: numberingSystem, - outputCalendar: calendar - }; - } // TRANSFORM - - /** - * "Set" the DateTime's zone to UTC. Returns a newly-constructed DateTime. - * - * Equivalent to {@link DateTime#setZone}('utc') - * @param {number} [offset=0] - optionally, an offset from UTC in minutes - * @param {Object} [opts={}] - options to pass to `setZone()` - * @return {DateTime} - */ - ; - - _proto.toUTC = function toUTC(offset, opts) { - if (offset === void 0) { - offset = 0; - } - - if (opts === void 0) { - opts = {}; - } - - return this.setZone(FixedOffsetZone.instance(offset), opts); - } - /** - * "Set" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime. - * - * Equivalent to `setZone('local')` - * @return {DateTime} - */ - ; - - _proto.toLocal = function toLocal() { - return this.setZone(Settings.defaultZone); - } - /** - * "Set" the DateTime's zone to specified zone. Returns a newly-constructed DateTime. - * - * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones. - * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class. - * @param {Object} opts - options - * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this. - * @return {DateTime} - */ - ; - - _proto.setZone = function setZone(zone, _temp) { - var _ref3 = _temp === void 0 ? {} : _temp, - _ref3$keepLocalTime = _ref3.keepLocalTime, - keepLocalTime = _ref3$keepLocalTime === void 0 ? false : _ref3$keepLocalTime, - _ref3$keepCalendarTim = _ref3.keepCalendarTime, - keepCalendarTime = _ref3$keepCalendarTim === void 0 ? false : _ref3$keepCalendarTim; - - zone = normalizeZone(zone, Settings.defaultZone); - - if (zone.equals(this.zone)) { - return this; - } else if (!zone.isValid) { - return DateTime.invalid(unsupportedZone(zone)); - } else { - var newTS = this.ts; - - if (keepLocalTime || keepCalendarTime) { - var offsetGuess = zone.offset(this.ts); - var asObj = this.toObject(); - - var _objToTS3 = objToTS(asObj, offsetGuess, zone); - - newTS = _objToTS3[0]; - } - - return clone(this, { - ts: newTS, - zone: zone - }); - } - } - /** - * "Set" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime. - * @param {Object} properties - the properties to set - * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' }) - * @return {DateTime} - */ - ; - - _proto.reconfigure = function reconfigure(_temp2) { - var _ref4 = _temp2 === void 0 ? {} : _temp2, - locale = _ref4.locale, - numberingSystem = _ref4.numberingSystem, - outputCalendar = _ref4.outputCalendar; - - var loc = this.loc.clone({ - locale: locale, - numberingSystem: numberingSystem, - outputCalendar: outputCalendar - }); - return clone(this, { - loc: loc - }); - } - /** - * "Set" the locale. Returns a newly-constructed DateTime. - * Just a convenient alias for reconfigure({ locale }) - * @example DateTime.local(2017, 5, 25).setLocale('en-GB') - * @return {DateTime} - */ - ; - - _proto.setLocale = function setLocale(locale) { - return this.reconfigure({ - locale: locale - }); - } - /** - * "Set" the values of specified units. Returns a newly-constructed DateTime. - * You can only set units with this method; for "setting" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}. - * @param {Object} values - a mapping of units to numbers - * @example dt.set({ year: 2017 }) - * @example dt.set({ hour: 8, minute: 30 }) - * @example dt.set({ weekday: 5 }) - * @example dt.set({ year: 2005, ordinal: 234 }) - * @return {DateTime} - */ - ; - - _proto.set = function set(values) { - if (!this.isValid) return this; - var normalized = normalizeObject(values, normalizeUnit), - settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday), - containsOrdinal = !isUndefined(normalized.ordinal), - containsGregorYear = !isUndefined(normalized.year), - containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), - containsGregor = containsGregorYear || containsGregorMD, - definiteWeekDef = normalized.weekYear || normalized.weekNumber; - - if ((containsGregor || containsOrdinal) && definiteWeekDef) { - throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); - } - - if (containsGregorMD && containsOrdinal) { - throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); - } - - var mixed; - - if (settingWeekStuff) { - mixed = weekToGregorian(_extends({}, gregorianToWeek(this.c), normalized)); - } else if (!isUndefined(normalized.ordinal)) { - mixed = ordinalToGregorian(_extends({}, gregorianToOrdinal(this.c), normalized)); - } else { - mixed = _extends({}, this.toObject(), normalized); // if we didn't set the day but we ended up on an overflow date, - // use the last day of the right month - - if (isUndefined(normalized.day)) { - mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day); - } - } - - var _objToTS4 = objToTS(mixed, this.o, this.zone), - ts = _objToTS4[0], - o = _objToTS4[1]; - - return clone(this, { - ts: ts, - o: o - }); - } - /** - * Add a period of time to this DateTime and return the resulting DateTime - * - * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between. - * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() - * @example DateTime.now().plus(123) //~> in 123 milliseconds - * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes - * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow - * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday - * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min - * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min - * @return {DateTime} - */ - ; - - _proto.plus = function plus(duration) { - if (!this.isValid) return this; - var dur = Duration.fromDurationLike(duration); - return clone(this, adjustTime(this, dur)); - } - /** - * Subtract a period of time to this DateTime and return the resulting DateTime - * See {@link DateTime#plus} - * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() - @return {DateTime} - */ - ; - - _proto.minus = function minus(duration) { - if (!this.isValid) return this; - var dur = Duration.fromDurationLike(duration).negate(); - return clone(this, adjustTime(this, dur)); - } - /** - * "Set" this DateTime to the beginning of a unit of time. - * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. - * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01' - * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01' - * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays - * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00' - * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00' - * @return {DateTime} - */ - ; - - _proto.startOf = function startOf(unit) { - if (!this.isValid) return this; - var o = {}, - normalizedUnit = Duration.normalizeUnit(unit); - - switch (normalizedUnit) { - case "years": - o.month = 1; - // falls through - - case "quarters": - case "months": - o.day = 1; - // falls through - - case "weeks": - case "days": - o.hour = 0; - // falls through - - case "hours": - o.minute = 0; - // falls through - - case "minutes": - o.second = 0; - // falls through - - case "seconds": - o.millisecond = 0; - break; - // no default, invalid units throw in normalizeUnit() - } - - if (normalizedUnit === "weeks") { - o.weekday = 1; - } - - if (normalizedUnit === "quarters") { - var q = Math.ceil(this.month / 3); - o.month = (q - 1) * 3 + 1; - } - - return this.set(o); - } - /** - * "Set" this DateTime to the end (meaning the last millisecond) of a unit of time - * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. - * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00' - * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00' - * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays - * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00' - * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00' - * @return {DateTime} - */ - ; - - _proto.endOf = function endOf(unit) { - var _this$plus; - - return this.isValid ? this.plus((_this$plus = {}, _this$plus[unit] = 1, _this$plus)).startOf(unit).minus(1) : this; - } // OUTPUT - - /** - * Returns a string representation of this DateTime formatted according to the specified format string. - * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens). - * Defaults to en-US if no locale has been specified, regardless of the system's locale. - * @param {string} fmt - the format string - * @param {Object} opts - opts to override the configuration options on this DateTime - * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22' - * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22' - * @example DateTime.now().toFormat('yyyy LLL dd', { locale: "fr" }) //=> '2017 avr. 22' - * @example DateTime.now().toFormat("HH 'hours and' mm 'minutes'") //=> '20 hours and 55 minutes' - * @return {string} - */ - ; - - _proto.toFormat = function toFormat(fmt, opts) { - if (opts === void 0) { - opts = {}; - } - - return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID; - } - /** - * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`. - * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation - * of the DateTime in the assigned locale. - * Defaults to the system's locale if no locale has been specified - * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat - * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options - * @param {Object} opts - opts to override the configuration options on this DateTime - * @example DateTime.now().toLocaleString(); //=> 4/20/2017 - * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017' - * @example DateTime.now().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017' - * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017' - * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM' - * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM' - * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20' - * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM' - * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32' - * @return {string} - */ - ; - - _proto.toLocaleString = function toLocaleString(formatOpts, opts) { - if (formatOpts === void 0) { - formatOpts = DATE_SHORT; - } - - if (opts === void 0) { - opts = {}; - } - - return this.isValid ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this) : INVALID; - } - /** - * Returns an array of format "parts", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output. - * Defaults to the system's locale if no locale has been specified - * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts - * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`. - * @example DateTime.now().toLocaleParts(); //=> [ - * //=> { type: 'day', value: '25' }, - * //=> { type: 'literal', value: '/' }, - * //=> { type: 'month', value: '05' }, - * //=> { type: 'literal', value: '/' }, - * //=> { type: 'year', value: '1982' } - * //=> ] - */ - ; - - _proto.toLocaleParts = function toLocaleParts(opts) { - if (opts === void 0) { - opts = {}; - } - - return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : []; - } - /** - * Returns an ISO 8601-compliant string representation of this DateTime - * @param {Object} opts - options - * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 - * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 - * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' - * @param {string} [opts.format='extended'] - choose between the basic and extended format - * @example DateTime.utc(1982, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z' - * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00' - * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335' - * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400' - * @return {string} - */ - ; - - _proto.toISO = function toISO(opts) { - if (opts === void 0) { - opts = {}; - } - - if (!this.isValid) { - return null; - } - - return this.toISODate(opts) + "T" + this.toISOTime(opts); - } - /** - * Returns an ISO 8601-compliant string representation of this DateTime's date component - * @param {Object} opts - options - * @param {string} [opts.format='extended'] - choose between the basic and extended format - * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25' - * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525' - * @return {string} - */ - ; - - _proto.toISODate = function toISODate(_temp3) { - var _ref5 = _temp3 === void 0 ? {} : _temp3, - _ref5$format = _ref5.format, - format = _ref5$format === void 0 ? "extended" : _ref5$format; - - var fmt = format === "basic" ? "yyyyMMdd" : "yyyy-MM-dd"; - - if (this.year > 9999) { - fmt = "+" + fmt; - } - - return toTechFormat(this, fmt); - } - /** - * Returns an ISO 8601-compliant string representation of this DateTime's week date - * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2' - * @return {string} - */ - ; - - _proto.toISOWeekDate = function toISOWeekDate() { - return toTechFormat(this, "kkkk-'W'WW-c"); - } - /** - * Returns an ISO 8601-compliant string representation of this DateTime's time component - * @param {Object} opts - options - * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 - * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 - * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' - * @param {boolean} [opts.includePrefix=false] - include the `T` prefix - * @param {string} [opts.format='extended'] - choose between the basic and extended format - * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z' - * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z' - * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z' - * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z' - * @return {string} - */ - ; - - _proto.toISOTime = function toISOTime(_temp4) { - var _ref6 = _temp4 === void 0 ? {} : _temp4, - _ref6$suppressMillise = _ref6.suppressMilliseconds, - suppressMilliseconds = _ref6$suppressMillise === void 0 ? false : _ref6$suppressMillise, - _ref6$suppressSeconds = _ref6.suppressSeconds, - suppressSeconds = _ref6$suppressSeconds === void 0 ? false : _ref6$suppressSeconds, - _ref6$includeOffset = _ref6.includeOffset, - includeOffset = _ref6$includeOffset === void 0 ? true : _ref6$includeOffset, - _ref6$includePrefix = _ref6.includePrefix, - includePrefix = _ref6$includePrefix === void 0 ? false : _ref6$includePrefix, - _ref6$format = _ref6.format, - format = _ref6$format === void 0 ? "extended" : _ref6$format; - - return toTechTimeFormat(this, { - suppressSeconds: suppressSeconds, - suppressMilliseconds: suppressMilliseconds, - includeOffset: includeOffset, - includePrefix: includePrefix, - format: format - }); - } - /** - * Returns an RFC 2822-compatible string representation of this DateTime, always in UTC - * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000' - * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400' - * @return {string} - */ - ; - - _proto.toRFC2822 = function toRFC2822() { - return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false); - } - /** - * Returns a string representation of this DateTime appropriate for use in HTTP headers. - * Specifically, the string conforms to RFC 1123. - * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 - * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT' - * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT' - * @return {string} - */ - ; - - _proto.toHTTP = function toHTTP() { - return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'"); - } - /** - * Returns a string representation of this DateTime appropriate for use in SQL Date - * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13' - * @return {string} - */ - ; - - _proto.toSQLDate = function toSQLDate() { - return toTechFormat(this, "yyyy-MM-dd"); - } - /** - * Returns a string representation of this DateTime appropriate for use in SQL Time - * @param {Object} opts - options - * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. - * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' - * @example DateTime.utc().toSQL() //=> '05:15:16.345' - * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00' - * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345' - * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York' - * @return {string} - */ - ; - - _proto.toSQLTime = function toSQLTime(_temp5) { - var _ref7 = _temp5 === void 0 ? {} : _temp5, - _ref7$includeOffset = _ref7.includeOffset, - includeOffset = _ref7$includeOffset === void 0 ? true : _ref7$includeOffset, - _ref7$includeZone = _ref7.includeZone, - includeZone = _ref7$includeZone === void 0 ? false : _ref7$includeZone; - - return toTechTimeFormat(this, { - includeOffset: includeOffset, - includeZone: includeZone, - spaceZone: true - }); - } - /** - * Returns a string representation of this DateTime appropriate for use in SQL DateTime - * @param {Object} opts - options - * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. - * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' - * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z' - * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00' - * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000' - * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York' - * @return {string} - */ - ; - - _proto.toSQL = function toSQL(opts) { - if (opts === void 0) { - opts = {}; - } - - if (!this.isValid) { - return null; - } - - return this.toSQLDate() + " " + this.toSQLTime(opts); - } - /** - * Returns a string representation of this DateTime appropriate for debugging - * @return {string} - */ - ; - - _proto.toString = function toString() { - return this.isValid ? this.toISO() : INVALID; - } - /** - * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis} - * @return {number} - */ - ; - - _proto.valueOf = function valueOf() { - return this.toMillis(); - } - /** - * Returns the epoch milliseconds of this DateTime. - * @return {number} - */ - ; - - _proto.toMillis = function toMillis() { - return this.isValid ? this.ts : NaN; - } - /** - * Returns the epoch seconds of this DateTime. - * @return {number} - */ - ; - - _proto.toSeconds = function toSeconds() { - return this.isValid ? this.ts / 1000 : NaN; - } - /** - * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON. - * @return {string} - */ - ; - - _proto.toJSON = function toJSON() { - return this.toISO(); - } - /** - * Returns a BSON serializable equivalent to this DateTime. - * @return {Date} - */ - ; - - _proto.toBSON = function toBSON() { - return this.toJSDate(); - } - /** - * Returns a JavaScript object with this DateTime's year, month, day, and so on. - * @param opts - options for generating the object - * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output - * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 } - * @return {Object} - */ - ; - - _proto.toObject = function toObject(opts) { - if (opts === void 0) { - opts = {}; - } - - if (!this.isValid) return {}; - - var base = _extends({}, this.c); - - if (opts.includeConfig) { - base.outputCalendar = this.outputCalendar; - base.numberingSystem = this.loc.numberingSystem; - base.locale = this.loc.locale; - } - - return base; - } - /** - * Returns a JavaScript Date equivalent to this DateTime. - * @return {Date} - */ - ; - - _proto.toJSDate = function toJSDate() { - return new Date(this.isValid ? this.ts : NaN); - } // COMPARE - - /** - * Return the difference between two DateTimes as a Duration. - * @param {DateTime} otherDateTime - the DateTime to compare this one to - * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration. - * @param {Object} opts - options that affect the creation of the Duration - * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use - * @example - * var i1 = DateTime.fromISO('1982-05-25T09:45'), - * i2 = DateTime.fromISO('1983-10-14T10:30'); - * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 } - * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 } - * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 } - * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 } - * @return {Duration} - */ - ; - - _proto.diff = function diff(otherDateTime, unit, opts) { - if (unit === void 0) { - unit = "milliseconds"; - } - - if (opts === void 0) { - opts = {}; - } - - if (!this.isValid || !otherDateTime.isValid) { - return Duration.invalid("created by diffing an invalid DateTime"); - } - - var durOpts = _extends({ - locale: this.locale, - numberingSystem: this.numberingSystem - }, opts); - - var units = maybeArray(unit).map(Duration.normalizeUnit), - otherIsLater = otherDateTime.valueOf() > this.valueOf(), - earlier = otherIsLater ? this : otherDateTime, - later = otherIsLater ? otherDateTime : this, - diffed = _diff(earlier, later, units, durOpts); - - return otherIsLater ? diffed.negate() : diffed; - } - /** - * Return the difference between this DateTime and right now. - * See {@link DateTime#diff} - * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration - * @param {Object} opts - options that affect the creation of the Duration - * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use - * @return {Duration} - */ - ; - - _proto.diffNow = function diffNow(unit, opts) { - if (unit === void 0) { - unit = "milliseconds"; - } - - if (opts === void 0) { - opts = {}; - } - - return this.diff(DateTime.now(), unit, opts); - } - /** - * Return an Interval spanning between this DateTime and another DateTime - * @param {DateTime} otherDateTime - the other end point of the Interval - * @return {Interval} - */ - ; - - _proto.until = function until(otherDateTime) { - return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this; - } - /** - * Return whether this DateTime is in the same unit of time as another DateTime. - * Higher-order units must also be identical for this function to return `true`. - * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed. - * @param {DateTime} otherDateTime - the other DateTime - * @param {string} unit - the unit of time to check sameness on - * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day - * @return {boolean} - */ - ; - - _proto.hasSame = function hasSame(otherDateTime, unit) { - if (!this.isValid) return false; - var inputMs = otherDateTime.valueOf(); - var otherZoneDateTime = this.setZone(otherDateTime.zone, { - keepLocalTime: true - }); - return otherZoneDateTime.startOf(unit) <= inputMs && inputMs <= otherZoneDateTime.endOf(unit); - } - /** - * Equality check - * Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid. - * To compare just the millisecond values, use `+dt1 === +dt2`. - * @param {DateTime} other - the other DateTime - * @return {boolean} - */ - ; - - _proto.equals = function equals(other) { - return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc); - } - /** - * Returns a string representation of a this time relative to now, such as "in two days". Can only internationalize if your - * platform supports Intl.RelativeTimeFormat. Rounds down by default. - * @param {Object} options - options that affect the output - * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. - * @param {string} [options.style="long"] - the style of units, must be "long", "short", or "narrow" - * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of "years", "quarters", "months", "weeks", "days", "hours", "minutes", or "seconds" - * @param {boolean} [options.round=true] - whether to round the numbers in the output. - * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding. - * @param {string} options.locale - override the locale of this DateTime - * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this - * @example DateTime.now().plus({ days: 1 }).toRelative() //=> "in 1 day" - * @example DateTime.now().setLocale("es").toRelative({ days: 1 }) //=> "dentro de 1 día" - * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: "fr" }) //=> "dans 23 heures" - * @example DateTime.now().minus({ days: 2 }).toRelative() //=> "2 days ago" - * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: "hours" }) //=> "48 hours ago" - * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> "1.5 days ago" - */ - ; - - _proto.toRelative = function toRelative(options) { - if (options === void 0) { - options = {}; - } - - if (!this.isValid) return null; - var base = options.base || DateTime.fromObject({}, { - zone: this.zone - }), - padding = options.padding ? this < base ? -options.padding : options.padding : 0; - var units = ["years", "months", "days", "hours", "minutes", "seconds"]; - var unit = options.unit; - - if (Array.isArray(options.unit)) { - units = options.unit; - unit = undefined; - } - - return diffRelative(base, this.plus(padding), _extends({}, options, { - numeric: "always", - units: units, - unit: unit - })); - } - /** - * Returns a string representation of this date relative to today, such as "yesterday" or "next month". - * Only internationalizes on platforms that supports Intl.RelativeTimeFormat. - * @param {Object} options - options that affect the output - * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. - * @param {string} options.locale - override the locale of this DateTime - * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", or "days" - * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this - * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> "tomorrow" - * @example DateTime.now().setLocale("es").plus({ days: 1 }).toRelative() //=> ""mañana" - * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: "fr" }) //=> "demain" - * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> "2 days ago" - */ - ; - - _proto.toRelativeCalendar = function toRelativeCalendar(options) { - if (options === void 0) { - options = {}; - } - - if (!this.isValid) return null; - return diffRelative(options.base || DateTime.fromObject({}, { - zone: this.zone - }), this, _extends({}, options, { - numeric: "auto", - units: ["years", "months", "days"], - calendary: true - })); - } - /** - * Return the min of several date times - * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum - * @return {DateTime} the min DateTime, or undefined if called with no argument - */ - ; - - DateTime.min = function min() { - for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { - dateTimes[_key] = arguments[_key]; - } - - if (!dateTimes.every(DateTime.isDateTime)) { - throw new InvalidArgumentError("min requires all arguments be DateTimes"); - } - - return bestBy(dateTimes, function (i) { - return i.valueOf(); - }, Math.min); - } - /** - * Return the max of several date times - * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum - * @return {DateTime} the max DateTime, or undefined if called with no argument - */ - ; - - DateTime.max = function max() { - for (var _len2 = arguments.length, dateTimes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - dateTimes[_key2] = arguments[_key2]; - } - - if (!dateTimes.every(DateTime.isDateTime)) { - throw new InvalidArgumentError("max requires all arguments be DateTimes"); - } - - return bestBy(dateTimes, function (i) { - return i.valueOf(); - }, Math.max); - } // MISC - - /** - * Explain how a string would be parsed by fromFormat() - * @param {string} text - the string to parse - * @param {string} fmt - the format the string is expected to be in (see description) - * @param {Object} options - options taken by fromFormat() - * @return {Object} - */ - ; - - DateTime.fromFormatExplain = function fromFormatExplain(text, fmt, options) { - if (options === void 0) { - options = {}; - } - - var _options = options, - _options$locale = _options.locale, - locale = _options$locale === void 0 ? null : _options$locale, - _options$numberingSys = _options.numberingSystem, - numberingSystem = _options$numberingSys === void 0 ? null : _options$numberingSys, - localeToUse = Locale.fromOpts({ - locale: locale, - numberingSystem: numberingSystem, - defaultToEN: true - }); - return explainFromTokens(localeToUse, text, fmt); - } - /** - * @deprecated use fromFormatExplain instead - */ - ; - - DateTime.fromStringExplain = function fromStringExplain(text, fmt, options) { - if (options === void 0) { - options = {}; - } - - return DateTime.fromFormatExplain(text, fmt, options); - } // FORMAT PRESETS - - /** - * {@link DateTime#toLocaleString} format like 10/14/1983 - * @type {Object} - */ - ; - - _createClass(DateTime, [{ - key: "isValid", - get: function get() { - return this.invalid === null; - } - /** - * Returns an error code if this DateTime is invalid, or null if the DateTime is valid - * @type {string} - */ - - }, { - key: "invalidReason", - get: function get() { - return this.invalid ? this.invalid.reason : null; - } - /** - * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid - * @type {string} - */ - - }, { - key: "invalidExplanation", - get: function get() { - return this.invalid ? this.invalid.explanation : null; - } - /** - * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime - * - * @type {string} - */ - - }, { - key: "locale", - get: function get() { - return this.isValid ? this.loc.locale : null; - } - /** - * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime - * - * @type {string} - */ - - }, { - key: "numberingSystem", - get: function get() { - return this.isValid ? this.loc.numberingSystem : null; - } - /** - * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime - * - * @type {string} - */ - - }, { - key: "outputCalendar", - get: function get() { - return this.isValid ? this.loc.outputCalendar : null; - } - /** - * Get the time zone associated with this DateTime. - * @type {Zone} - */ - - }, { - key: "zone", - get: function get() { - return this._zone; - } - /** - * Get the name of the time zone. - * @type {string} - */ - - }, { - key: "zoneName", - get: function get() { - return this.isValid ? this.zone.name : null; - } - /** - * Get the year - * @example DateTime.local(2017, 5, 25).year //=> 2017 - * @type {number} - */ - - }, { - key: "year", - get: function get() { - return this.isValid ? this.c.year : NaN; - } - /** - * Get the quarter - * @example DateTime.local(2017, 5, 25).quarter //=> 2 - * @type {number} - */ - - }, { - key: "quarter", - get: function get() { - return this.isValid ? Math.ceil(this.c.month / 3) : NaN; - } - /** - * Get the month (1-12). - * @example DateTime.local(2017, 5, 25).month //=> 5 - * @type {number} - */ - - }, { - key: "month", - get: function get() { - return this.isValid ? this.c.month : NaN; - } - /** - * Get the day of the month (1-30ish). - * @example DateTime.local(2017, 5, 25).day //=> 25 - * @type {number} - */ - - }, { - key: "day", - get: function get() { - return this.isValid ? this.c.day : NaN; - } - /** - * Get the hour of the day (0-23). - * @example DateTime.local(2017, 5, 25, 9).hour //=> 9 - * @type {number} - */ - - }, { - key: "hour", - get: function get() { - return this.isValid ? this.c.hour : NaN; - } - /** - * Get the minute of the hour (0-59). - * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30 - * @type {number} - */ - - }, { - key: "minute", - get: function get() { - return this.isValid ? this.c.minute : NaN; - } - /** - * Get the second of the minute (0-59). - * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52 - * @type {number} - */ - - }, { - key: "second", - get: function get() { - return this.isValid ? this.c.second : NaN; - } - /** - * Get the millisecond of the second (0-999). - * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654 - * @type {number} - */ - - }, { - key: "millisecond", - get: function get() { - return this.isValid ? this.c.millisecond : NaN; - } - /** - * Get the week year - * @see https://en.wikipedia.org/wiki/ISO_week_date - * @example DateTime.local(2014, 12, 31).weekYear //=> 2015 - * @type {number} - */ - - }, { - key: "weekYear", - get: function get() { - return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN; - } - /** - * Get the week number of the week year (1-52ish). - * @see https://en.wikipedia.org/wiki/ISO_week_date - * @example DateTime.local(2017, 5, 25).weekNumber //=> 21 - * @type {number} - */ - - }, { - key: "weekNumber", - get: function get() { - return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN; - } - /** - * Get the day of the week. - * 1 is Monday and 7 is Sunday - * @see https://en.wikipedia.org/wiki/ISO_week_date - * @example DateTime.local(2014, 11, 31).weekday //=> 4 - * @type {number} - */ - - }, { - key: "weekday", - get: function get() { - return this.isValid ? possiblyCachedWeekData(this).weekday : NaN; - } - /** - * Get the ordinal (meaning the day of the year) - * @example DateTime.local(2017, 5, 25).ordinal //=> 145 - * @type {number|DateTime} - */ - - }, { - key: "ordinal", - get: function get() { - return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN; - } - /** - * Get the human readable short month name, such as 'Oct'. - * Defaults to the system's locale if no locale has been specified - * @example DateTime.local(2017, 10, 30).monthShort //=> Oct - * @type {string} - */ - - }, { - key: "monthShort", - get: function get() { - return this.isValid ? Info.months("short", { - locObj: this.loc - })[this.month - 1] : null; - } - /** - * Get the human readable long month name, such as 'October'. - * Defaults to the system's locale if no locale has been specified - * @example DateTime.local(2017, 10, 30).monthLong //=> October - * @type {string} - */ - - }, { - key: "monthLong", - get: function get() { - return this.isValid ? Info.months("long", { - locObj: this.loc - })[this.month - 1] : null; - } - /** - * Get the human readable short weekday, such as 'Mon'. - * Defaults to the system's locale if no locale has been specified - * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon - * @type {string} - */ - - }, { - key: "weekdayShort", - get: function get() { - return this.isValid ? Info.weekdays("short", { - locObj: this.loc - })[this.weekday - 1] : null; - } - /** - * Get the human readable long weekday, such as 'Monday'. - * Defaults to the system's locale if no locale has been specified - * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday - * @type {string} - */ - - }, { - key: "weekdayLong", - get: function get() { - return this.isValid ? Info.weekdays("long", { - locObj: this.loc - })[this.weekday - 1] : null; - } - /** - * Get the UTC offset of this DateTime in minutes - * @example DateTime.now().offset //=> -240 - * @example DateTime.utc().offset //=> 0 - * @type {number} - */ - - }, { - key: "offset", - get: function get() { - return this.isValid ? +this.o : NaN; - } - /** - * Get the short human name for the zone's current offset, for example "EST" or "EDT". - * Defaults to the system's locale if no locale has been specified - * @type {string} - */ - - }, { - key: "offsetNameShort", - get: function get() { - if (this.isValid) { - return this.zone.offsetName(this.ts, { - format: "short", - locale: this.locale - }); - } else { - return null; - } - } - /** - * Get the long human name for the zone's current offset, for example "Eastern Standard Time" or "Eastern Daylight Time". - * Defaults to the system's locale if no locale has been specified - * @type {string} - */ - - }, { - key: "offsetNameLong", - get: function get() { - if (this.isValid) { - return this.zone.offsetName(this.ts, { - format: "long", - locale: this.locale - }); - } else { - return null; - } - } - /** - * Get whether this zone's offset ever changes, as in a DST. - * @type {boolean} - */ - - }, { - key: "isOffsetFixed", - get: function get() { - return this.isValid ? this.zone.isUniversal : null; - } - /** - * Get whether the DateTime is in a DST. - * @type {boolean} - */ - - }, { - key: "isInDST", - get: function get() { - if (this.isOffsetFixed) { - return false; - } else { - return this.offset > this.set({ - month: 1 - }).offset || this.offset > this.set({ - month: 5 - }).offset; - } - } - /** - * Returns true if this DateTime is in a leap year, false otherwise - * @example DateTime.local(2016).isInLeapYear //=> true - * @example DateTime.local(2013).isInLeapYear //=> false - * @type {boolean} - */ - - }, { - key: "isInLeapYear", - get: function get() { - return isLeapYear(this.year); - } - /** - * Returns the number of days in this DateTime's month - * @example DateTime.local(2016, 2).daysInMonth //=> 29 - * @example DateTime.local(2016, 3).daysInMonth //=> 31 - * @type {number} - */ - - }, { - key: "daysInMonth", - get: function get() { - return daysInMonth(this.year, this.month); - } - /** - * Returns the number of days in this DateTime's year - * @example DateTime.local(2016).daysInYear //=> 366 - * @example DateTime.local(2013).daysInYear //=> 365 - * @type {number} - */ - - }, { - key: "daysInYear", - get: function get() { - return this.isValid ? daysInYear(this.year) : NaN; - } - /** - * Returns the number of weeks in this DateTime's year - * @see https://en.wikipedia.org/wiki/ISO_week_date - * @example DateTime.local(2004).weeksInWeekYear //=> 53 - * @example DateTime.local(2013).weeksInWeekYear //=> 52 - * @type {number} - */ - - }, { - key: "weeksInWeekYear", - get: function get() { - return this.isValid ? weeksInWeekYear(this.weekYear) : NaN; - } - }], [{ - key: "DATE_SHORT", - get: function get() { - return DATE_SHORT; - } - /** - * {@link DateTime#toLocaleString} format like 'Oct 14, 1983' - * @type {Object} - */ - - }, { - key: "DATE_MED", - get: function get() { - return DATE_MED; - } - /** - * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983' - * @type {Object} - */ - - }, { - key: "DATE_MED_WITH_WEEKDAY", - get: function get() { - return DATE_MED_WITH_WEEKDAY; - } - /** - * {@link DateTime#toLocaleString} format like 'October 14, 1983' - * @type {Object} - */ - - }, { - key: "DATE_FULL", - get: function get() { - return DATE_FULL; - } - /** - * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983' - * @type {Object} - */ - - }, { - key: "DATE_HUGE", - get: function get() { - return DATE_HUGE; - } - /** - * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is. - * @type {Object} - */ - - }, { - key: "TIME_SIMPLE", - get: function get() { - return TIME_SIMPLE; - } - /** - * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is. - * @type {Object} - */ - - }, { - key: "TIME_WITH_SECONDS", - get: function get() { - return TIME_WITH_SECONDS; - } - /** - * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is. - * @type {Object} - */ - - }, { - key: "TIME_WITH_SHORT_OFFSET", - get: function get() { - return TIME_WITH_SHORT_OFFSET; - } - /** - * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is. - * @type {Object} - */ - - }, { - key: "TIME_WITH_LONG_OFFSET", - get: function get() { - return TIME_WITH_LONG_OFFSET; - } - /** - * {@link DateTime#toLocaleString} format like '09:30', always 24-hour. - * @type {Object} - */ - - }, { - key: "TIME_24_SIMPLE", - get: function get() { - return TIME_24_SIMPLE; - } - /** - * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour. - * @type {Object} - */ - - }, { - key: "TIME_24_WITH_SECONDS", - get: function get() { - return TIME_24_WITH_SECONDS; - } - /** - * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour. - * @type {Object} - */ - - }, { - key: "TIME_24_WITH_SHORT_OFFSET", - get: function get() { - return TIME_24_WITH_SHORT_OFFSET; - } - /** - * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour. - * @type {Object} - */ - - }, { - key: "TIME_24_WITH_LONG_OFFSET", - get: function get() { - return TIME_24_WITH_LONG_OFFSET; - } - /** - * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is. - * @type {Object} - */ - - }, { - key: "DATETIME_SHORT", - get: function get() { - return DATETIME_SHORT; - } - /** - * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is. - * @type {Object} - */ - - }, { - key: "DATETIME_SHORT_WITH_SECONDS", - get: function get() { - return DATETIME_SHORT_WITH_SECONDS; - } - /** - * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is. - * @type {Object} - */ - - }, { - key: "DATETIME_MED", - get: function get() { - return DATETIME_MED; - } - /** - * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is. - * @type {Object} - */ - - }, { - key: "DATETIME_MED_WITH_SECONDS", - get: function get() { - return DATETIME_MED_WITH_SECONDS; - } - /** - * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is. - * @type {Object} - */ - - }, { - key: "DATETIME_MED_WITH_WEEKDAY", - get: function get() { - return DATETIME_MED_WITH_WEEKDAY; - } - /** - * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is. - * @type {Object} - */ - - }, { - key: "DATETIME_FULL", - get: function get() { - return DATETIME_FULL; - } - /** - * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is. - * @type {Object} - */ - - }, { - key: "DATETIME_FULL_WITH_SECONDS", - get: function get() { - return DATETIME_FULL_WITH_SECONDS; - } - /** - * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is. - * @type {Object} - */ - - }, { - key: "DATETIME_HUGE", - get: function get() { - return DATETIME_HUGE; - } - /** - * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is. - * @type {Object} - */ - - }, { - key: "DATETIME_HUGE_WITH_SECONDS", - get: function get() { - return DATETIME_HUGE_WITH_SECONDS; - } - }]); - - return DateTime; -}(); -function friendlyDateTime(dateTimeish) { - if (DateTime.isDateTime(dateTimeish)) { - return dateTimeish; - } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) { - return DateTime.fromJSDate(dateTimeish); - } else if (dateTimeish && typeof dateTimeish === "object") { - return DateTime.fromObject(dateTimeish); - } else { - throw new InvalidArgumentError("Unknown datetime argument: " + dateTimeish + ", of type " + typeof dateTimeish); - } -} - -var VERSION = "2.1.1"; - -var DateTime_1 = luxon.DateTime = DateTime; -var Duration_1 = luxon.Duration = Duration; -var FixedOffsetZone_1 = luxon.FixedOffsetZone = FixedOffsetZone; -var IANAZone_1 = luxon.IANAZone = IANAZone; -var Info_1 = luxon.Info = Info; -var Interval_1 = luxon.Interval = Interval; -var InvalidZone_1 = luxon.InvalidZone = InvalidZone; -var Settings_1 = luxon.Settings = Settings; -var SystemZone_1 = luxon.SystemZone = SystemZone; -var VERSION_1 = luxon.VERSION = VERSION; -var Zone_1 = luxon.Zone = Zone; - -var Luxon = /*#__PURE__*/Object.freeze(/*#__PURE__*/_mergeNamespaces({ - __proto__: null, - DateTime: DateTime_1, - Duration: Duration_1, - FixedOffsetZone: FixedOffsetZone_1, - IANAZone: IANAZone_1, - Info: Info_1, - Interval: Interval_1, - InvalidZone: InvalidZone_1, - Settings: Settings_1, - SystemZone: SystemZone_1, - VERSION: VERSION_1, - Zone: Zone_1, - 'default': luxon -}, [luxon])); - -//////////////////// -// Query Settings // -//////////////////// -const DEFAULT_QUERY_SETTINGS = { - renderNullAs: "\\-", - taskLinkLocation: "end", - taskLinkText: "🔗", - taskCompletionTracking: false, - taskCompletionText: "completion", - warnOnEmptyResult: true, - refreshEnabled: true, - refreshInterval: 250, - defaultDateFormat: "MMMM dd, yyyy", - defaultDateTimeFormat: "h:mm a - MMMM dd, yyyy", - maxRecursiveRenderDepth: 6, - tableIdColumnName: "File", - tableGroupColumnName: "Group", -}; -/** Default settings for dataview on install. */ -const DEFAULT_SETTINGS = { - ...DEFAULT_QUERY_SETTINGS, - ...{ - inlineQueryPrefix: "=", - inlineJsQueryPrefix: "$=", - enableDataviewJs: false, - enableInlineDataviewJs: false, - prettyRenderInlineFields: true, - schemaVersion: 1, - }, -}; - -/** Functional return type for error handling. */ -class Success { - constructor(value) { - this.value = value; - this.successful = true; - } - map(f) { - return new Success(f(this.value)); - } - flatMap(f) { - return f(this.value); - } - orElse(_value) { - return this.value; - } - orElseThrow(_message) { - return this.value; - } -} -class Failure { - constructor(error) { - this.error = error; - this.successful = false; - } - map(_f) { - return this; - } - flatMap(_f) { - return this; - } - orElse(value) { - return value; - } - orElseThrow(message) { - if (message) - throw new Error(message(this.error)); - else - throw new Error("" + this.error); - } -} -var Result; -(function (Result) { - function success(value) { - return new Success(value); - } - Result.success = success; - function failure(error) { - return new Failure(error); - } - Result.failure = failure; - function flatMap2(first, second, f) { - if (first.successful) { - if (second.successful) - return f(first.value, second.value); - else - return failure(second.error); - } - else { - return failure(first.error); - } - } - Result.flatMap2 = flatMap2; - function map2(first, second, f) { - return flatMap2(first, second, (a, b) => success(f(a, b))); - } - Result.map2 = map2; -})(Result || (Result = {})); - -var parsimmon_umd_min = {exports: {}}; - -(function (module, exports) { -!function(n,t){module.exports=t();}("undefined"!=typeof self?self:commonjsGlobal,function(){return function(n){var t={};function r(e){if(t[e])return t[e].exports;var u=t[e]={i:e,l:!1,exports:{}};return n[e].call(u.exports,u,u.exports,r),u.l=!0,u.exports}return r.m=n,r.c=t,r.d=function(n,t,e){r.o(n,t)||Object.defineProperty(n,t,{configurable:!1,enumerable:!0,get:e});},r.r=function(n){Object.defineProperty(n,"__esModule",{value:!0});},r.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(t,"a",t),t},r.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},r.p="",r(r.s=0)}([function(n,t,r){function e(n){if(!(this instanceof e))return new e(n);this._=n;}var u=e.prototype;function o(n,t){for(var r=0;r>7),buf:function(n){var t=i(function(n,t,r,e){return n.concat(r===e.length-1?Buffer.from([t,0]).readUInt16BE(0):e.readUInt16BE(r))},[],n);return Buffer.from(f(function(n){return (n<<1&65535)>>8},t))}(r.buf)};}),r}function c(){return "undefined"!=typeof Buffer}function s(){if(!c())throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser.")}function l(n){s();var t=i(function(n,t){return n+t},0,n);if(t%8!=0)throw new Error("The bits ["+n.join(", ")+"] add up to "+t+" which is not an even number of bytes; the total should be divisible by 8");var r,u=t/8,o=(r=function(n){return n>48},i(function(n,t){return n||(r(t)?t:n)},null,n));if(o)throw new Error(o+" bit range requested exceeds 48 bit (6 byte) Number max.");return new e(function(t,r){var e=u+r;return e>t.length?x(r,u.toString()+" bytes"):b(e,i(function(n,t){var r=a(t,n.buf);return {coll:n.coll.concat(r.v),buf:r.buf}},{coll:[],buf:t.slice(r,e)},n).coll)})}function p(n,t){return new e(function(r,e){return s(),e+t>r.length?x(e,t+" bytes for "+n):b(e+t,r.slice(e,e+t))})}function h(n,t){if("number"!=typeof(r=t)||Math.floor(r)!==r||t<0||t>6)throw new Error(n+" requires integer length in range [0, 6].");var r;}function d(n){return h("uintBE",n),p("uintBE("+n+")",n).map(function(t){return t.readUIntBE(0,n)})}function v(n){return h("uintLE",n),p("uintLE("+n+")",n).map(function(t){return t.readUIntLE(0,n)})}function g(n){return h("intBE",n),p("intBE("+n+")",n).map(function(t){return t.readIntBE(0,n)})}function m(n){return h("intLE",n),p("intLE("+n+")",n).map(function(t){return t.readIntLE(0,n)})}function y(n){return n instanceof e}function E(n){return "[object Array]"==={}.toString.call(n)}function w(n){return c()&&Buffer.isBuffer(n)}function b(n,t){return {status:!0,index:n,value:t,furthest:-1,expected:[]}}function x(n,t){return E(t)||(t=[t]),{status:!1,index:-1,value:null,furthest:n,expected:t}}function B(n,t){if(!t)return n;if(n.furthest>t.furthest)return n;var r=n.furthest===t.furthest?function(n,t){if(function(){if(void 0!==e._supportsSet)return e._supportsSet;var n="undefined"!=typeof Set;return e._supportsSet=n,n}()&&Array.from){for(var r=new Set(n),u=0;u=0;){if(i in r){e=r[i].line,0===o&&(o=r[i].lineStart);break}"\n"===n.charAt(i)&&(u++,0===o&&(o=i+1)),i--;}var f=e+u,a=t-o;return r[t]={line:f,lineStart:o},{offset:t,line:f+1,column:a+1}}function _(n){if(!y(n))throw new Error("not a parser: "+n)}function L(n,t){return "string"==typeof n?n.charAt(t):n[t]}function O(n){if("number"!=typeof n)throw new Error("not a number: "+n)}function k(n){if("function"!=typeof n)throw new Error("not a function: "+n)}function P(n){if("string"!=typeof n)throw new Error("not a string: "+n)}var q=2,A=3,I=8,F=5*I,M=4*I,z=" ";function R(n,t){return new Array(t+1).join(n)}function U(n,t,r){var e=t-n.length;return e<=0?n:R(r,e)+n}function W(n,t,r,e){return {from:n-t>0?n-t:0,to:n+r>e?e:n+r}}function D(n,t){var r,e,u,o,a,c=t.index,s=c.offset,l=1;if(s===n.length)return "Got the end of the input";if(w(n)){var p=s-s%I,h=s-p,d=W(p,F,M+I,n.length),v=f(function(n){return f(function(n){return U(n.toString(16),2,"0")},n)},function(n,t){var r=n.length,e=[],u=0;if(r<=t)return [n.slice()];for(var o=0;o=4&&(r+=1),l=2,u=f(function(n){return n.length<=4?n.join(" "):n.slice(0,4).join(" ")+" "+n.slice(4).join(" ")},v),(a=(8*(o.to>0?o.to-1:o.to)).toString(16).length)<2&&(a=2);}else {var g=n.split(/\r\n|[\n\r\u2028\u2029]/);r=c.column-1,e=c.line-1,o=W(e,q,A,g.length),u=g.slice(o.from,o.to),a=o.to.toString().length;}var m=e-o.from;return w(n)&&(a=(8*(o.to>0?o.to-1:o.to)).toString(16).length)<2&&(a=2),i(function(t,e,u){var i,f=u===m,c=f?"> ":z;return i=w(n)?U((8*(o.from+u)).toString(16),a,"0"):U((o.from+u+1).toString(),a," "),[].concat(t,[c+i+" | "+e],f?[z+R(" ",a)+" | "+U("",r," ")+R("^",l)]:[])},[],u).join("\n")}function N(n,t){return ["\n","-- PARSING FAILED "+R("-",50),"\n\n",D(n,t),"\n\n",(r=t.expected,1===r.length?"Expected:\n\n"+r[0]:"Expected one of the following: \n\n"+r.join(", ")),"\n"].join("");var r;}function G(n){return void 0!==n.flags?n.flags:[n.global?"g":"",n.ignoreCase?"i":"",n.multiline?"m":"",n.unicode?"u":"",n.sticky?"y":""].join("")}function C(){for(var n=[].slice.call(arguments),t=n.length,r=0;r=2?O(t):t=0;var r=function(n){return RegExp("^(?:"+n.source+")",G(n))}(n),u=""+n;return e(function(n,e){var o=r.exec(n.slice(e));if(o){if(0<=t&&t<=o.length){var i=o[0],f=o[t];return b(e+i.length,f)}return x(e,"valid match group (0 to "+o.length+") in "+u)}return x(e,u)})}function X(n){return e(function(t,r){return b(r,n)})}function Y(n){return e(function(t,r){return x(r,n)})}function Z(n){if(y(n))return e(function(t,r){var e=n._(t,r);return e.index=r,e.value="",e});if("string"==typeof n)return Z(K(n));if(n instanceof RegExp)return Z(Q(n));throw new Error("not a string, regexp, or parser: "+n)}function $(n){return _(n),e(function(t,r){var e=n._(t,r),u=t.slice(r,e.index);return e.status?x(r,'not "'+u+'"'):b(r,null)})}function nn(n){return k(n),e(function(t,r){var e=L(t,r);return r=n.length?x(t,"any character/byte"):b(t+1,L(n,t))}),on=e(function(n,t){return b(n.length,n.slice(t))}),fn=e(function(n,t){return t=0}).desc(t)},e.optWhitespace=pn,e.Parser=e,e.range=function(n,t){return nn(function(r){return n<=r&&r<=t}).desc(n+"-"+t)},e.regex=Q,e.regexp=Q,e.sepBy=V,e.sepBy1=H,e.seq=C,e.seqMap=J,e.seqObj=function(){for(var n,t={},r=0,u=(n=arguments,Array.prototype.slice.call(n)),o=u.length,i=0;i255)throw new Error("Value specified to byte constructor ("+n+"=0x"+n.toString(16)+") is larger in value than a single byte.");var t=(n>15?"0x":"0x0")+n.toString(16);return e(function(r,e){var u=L(r,e);return u===n?b(e+1,u):x(e,t)})},buffer:function(n){return p("buffer",n).map(function(n){return Buffer.from(n)})},encodedString:function(n,t){return p("string",t).map(function(t){return t.toString(n)})},uintBE:d,uint8BE:d(1),uint16BE:d(2),uint32BE:d(4),uintLE:v,uint8LE:v(1),uint16LE:v(2),uint32LE:v(4),intBE:g,int8BE:g(1),int16BE:g(2),int32BE:g(4),intLE:m,int8LE:m(1),int16LE:m(2),int32LE:m(4),floatBE:p("floatBE",4).map(function(n){return n.readFloatBE(0)}),floatLE:p("floatLE",4).map(function(n){return n.readFloatLE(0)}),doubleBE:p("doubleBE",8).map(function(n){return n.readDoubleBE(0)}),doubleLE:p("doubleLE",8).map(function(n){return n.readDoubleLE(0)})},n.exports=e;}])}); -}(parsimmon_umd_min)); - -var emojiRegex = () => { - // https://mths.be/emoji - return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764(?:\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?|\u200D(?:\uD83D\uDC8B\u200D)?)\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69])|\uD83E\uDEF1\uD83C\uDFFF\u200D\uD83E\uDEF2)(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764(?:\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?|\u200D(?:\uD83D\uDC8B\u200D)?)\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69])|\uD83E\uDEF1\uD83C\uDFFE\u200D\uD83E\uDEF2)(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764(?:\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?|\u200D(?:\uD83D\uDC8B\u200D)?)\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69])|\uD83E\uDEF1\uD83C\uDFFD\u200D\uD83E\uDEF2)(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764(?:\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?|\u200D(?:\uD83D\uDC8B\u200D)?)\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69])|\uD83E\uDEF1\uD83C\uDFFC\u200D\uD83E\uDEF2)(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764(?:\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?|\u200D(?:\uD83D\uDC8B\u200D)?)\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69])|\uD83E\uDEF1\uD83C\uDFFB\u200D\uD83E\uDEF2)(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764(?:\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|[\u2695\u2696\u2708]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764(?:\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])))|\u200D(?:\u2764(?:\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?|\u200D(?:\uD83D\uDC8B\u200D)?)\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\u200D[\u2695\u2696\u2708])?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764(?:\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764(?:\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764(?:\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F?\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F?\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83D\uDC41\uFE0F?\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83C\uDFF3\uFE0F?\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F?\u200D\u26A7|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDEF1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764(?:\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\u200D(?:\uD83D\uDD25|\uD83E\uDE79))|\uD83D\uDC41\uFE0F?|\uD83C\uDFF3\uFE0F?|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F?\u20E3|\uD83E\uDD3C(?:\uD83C[\uDFFB-\uDFFF])|\u2764\uFE0F?|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF6])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD3C\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF6]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDDDE\uDDDF]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B50]|\uD83C[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDD-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7C\uDE80-\uDE86\uDE90-\uDEAC\uDEB0-\uDEBA\uDEC0-\uDEC2\uDED0-\uDED9\uDEE0-\uDEE7]/g; -}; - -/** Normalize a duration to all of the proper units. */ -function normalizeDuration(dur) { - return dur.shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds").normalize(); -} -/** Strip the time components of a date time object. */ -function stripTime(dt) { - return DateTime_1.fromObject({ - year: dt.year, - month: dt.month, - day: dt.day, - }); -} -/** Try to extract a YYYYMMDD date from a string. */ -function extractDate(str) { - let dateMatch = /(\d{4})-(\d{2})-(\d{2})/.exec(str); - if (!dateMatch) - dateMatch = /(\d{4})(\d{2})(\d{2})/.exec(str); - if (dateMatch) { - let year = Number.parseInt(dateMatch[1]); - let month = Number.parseInt(dateMatch[2]); - let day = Number.parseInt(dateMatch[3]); - return DateTime_1.fromObject({ year, month, day }); - } - return undefined; -} -/** Get the folder containing the given path (i.e., like computing 'path/..'). */ -function getParentFolder(path) { - return path.split("/").slice(0, -1).join("/"); -} -/** Get the "title" for a file, by stripping other parts of the path as well as the extension. */ -function getFileTitle(path) { - if (path.includes("/")) - path = path.substring(path.lastIndexOf("/") + 1); - if (path.endsWith(".md")) - path = path.substring(0, path.length - 3); - return path; -} -/** Get the extension of a file from the file path. */ -function getExtension(path) { - if (!path.includes(".")) - return ""; - return path.substring(path.lastIndexOf(".") + 1); -} -/** Try calling the given function; on failure, return the error message. */ -function tryOrPropogate(func) { - try { - return func(); - } - catch (error) { - return Result.failure("" + error + "\n\n" + error.stack); - } -} -/** Try asynchronously calling the given function; on failure, return the error message. */ -async function asyncTryOrPropogate(func) { - try { - return await func(); - } - catch (error) { - return Result.failure("" + error + "\n\n" + error.stack); - } -} -/** - * Escape regex characters in a string. - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions. - */ -function escapeRegex(str) { - return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); -} -/** A parsimmon parser which canonicalizes variable names while properly respecting emoji. */ -const VAR_NAME_CANONICALIZER = parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regex(new RegExp(emojiRegex(), "")), parsimmon_umd_min.exports.regex(/[0-9\p{Letter}_-]+/u).map(str => str.toLocaleLowerCase()), parsimmon_umd_min.exports.whitespace.map(_ => "-"), parsimmon_umd_min.exports.any.map(_ => "")) - .many() - .map(result => result.join("")); -/** Convert an arbitrary variable name into something JS/query friendly. */ -function canonicalizeVarName(name) { - return VAR_NAME_CANONICALIZER.tryParse(name); -} -const HEADER_CANONICALIZER = parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regex(new RegExp(emojiRegex(), "")), parsimmon_umd_min.exports.regex(/[0-9\p{Letter}_-]+/u), parsimmon_umd_min.exports.whitespace.map(_ => " "), parsimmon_umd_min.exports.any.map(_ => " ")) - .many() - .map(result => { - return result.join("").split(/\s+/).join(" ").trim(); -}); -/** - * Normalizes the text in a header to be something that is actually linkable to. This mimics - * how Obsidian does it's normalization, collapsing repeated spaces and stripping out control characters. - */ -function normalizeHeaderForLink(header) { - return HEADER_CANONICALIZER.tryParse(header); -} - -/** A specific task. */ -class Task { - constructor(init) { - Object.assign(this, init); - this.subtasks = (this.subtasks || []).map(t => new Task(t)); - } - /** Create a task from a record. */ - static fromObject(obj) { - return new Task(obj); - } - id() { - return `${this.path}-${this.line}`; - } - markdown() { - let result = `- [${this.completed ? "x" : " "}] ${this.text}`; - return result; - } - /** Return a new task where the created and completed fields are assigned to the given defaults if not present. */ - withDefaultDates(defaultCreated, defaultCompleted) { - var _a, _b; - let newTask = new Task(this); - newTask.created = (_a = newTask.created) !== null && _a !== void 0 ? _a : defaultCreated; - if (newTask.completed) - newTask.completion = (_b = newTask.completion) !== null && _b !== void 0 ? _b : defaultCompleted; - newTask.subtasks = newTask.subtasks.map(t => t.withDefaultDates(defaultCreated, defaultCompleted)); - return newTask; - } - toObject(inlineAnnotations = true) { - let result = { - text: this.text, - line: this.line, - path: this.path, - completed: this.completed, - fullyCompleted: this.fullyCompleted, - real: this.real, - link: this.link, - section: this.section, - header: this.section, - subtasks: this.subtasks.map(t => t.toObject(inlineAnnotations)), - annotated: !!this.due || !!this.completion || (!!this.annotations && Object.keys(this.annotations).length > 0), - }; - if (this.created) - result.created = this.created; - if (this.due) - result.due = this.due; - if (this.completion) - result.completion = this.completion; - if (this.annotations) { - if (inlineAnnotations) { - for (let [key, value] of Object.entries(this.annotations)) { - if (key in result) - continue; - result[key] = value; - } - } - else { - result.annotations = this.annotations; - } - } - return result; - } -} -/** An Obsidian link with all associated metadata. */ -class Link { - constructor(fields) { - Object.assign(this, fields); - } - /** Create a link to a specific file. */ - static file(path, embed = false, display) { - return new Link({ - path, - embed, - display, - subpath: undefined, - type: "file", - }); - } - /** Create a link to a specific file and header in that file. */ - static header(path, header, embed, display) { - // Headers need to be normalized to alpha-numeric & with extra spacing removed. - return new Link({ - path, - embed, - display, - subpath: normalizeHeaderForLink(header), - type: "header", - }); - } - /** Create a link to a specific file and block in that file. */ - static block(path, blockId, embed, display) { - return new Link({ - path, - embed, - display, - subpath: blockId, - type: "block", - }); - } - static fromObject(object) { - return new Link(object); - } - /** Checks for link equality (i.e., that the links are pointing to the same exact location). */ - equals(other) { - return this.path == other.path && this.type == other.type && this.subpath == other.subpath; - } - toString() { - return this.markdown(); - } - /** Convert this link to a raw object which */ - toObject() { - return { path: this.path, type: this.type, subpath: this.subpath, display: this.display, embed: this.embed }; - } - /** Return a new link which points to the same location but with a new display value. */ - withDisplay(display) { - return new Link(Object.assign({}, this, { display })); - } - /** Convert a file link into a link to a specific header. */ - withHeader(header) { - return Link.header(this.path, header, this.embed, this.display); - } - /** Convert any link into a link to its file. */ - toFile() { - return Link.file(this.path, this.embed, this.display); - } - /** Convert this link into an embedded link. */ - toEmbed() { - if (this.embed) - return this; - else { - let link = new Link(this); - link.embed = true; - return link; - } - } - /** Convert this link to markdown so it can be rendered. */ - markdown() { - let result = (this.embed ? "!" : "") + "[[" + this.path; - if (this.type == "header") - result += "#" + this.subpath; - else if (this.type == "block") - result += "#^" + this.subpath; - if (this.display) - result += "|" + this.display; - else { - result += "|" + getFileTitle(this.path); - if (this.type == "header" || this.type == "block") - result += " > " + this.subpath; - } - result += "]]"; - return result; - } - /** The stripped name of the file this link points into. */ - fileName() { - return getFileTitle(this.path).replace(".md", ""); - } -} -var Values; -(function (Values) { - /** Convert an arbitary value into a reasonable, Markdown-friendly string if possible. */ - function toString(field, setting = DEFAULT_QUERY_SETTINGS, recursive = false) { - let wrapped = wrapValue(field); - if (!wrapped) - return "null"; - switch (wrapped.type) { - case "string": - return wrapped.value; - case "number": - case "boolean": - case "html": - case "null": - return "" + wrapped.value; - case "link": - return wrapped.value.markdown(); - case "task": - return wrapped.value.markdown(); - case "function": - return ""; - case "array": - let result = ""; - if (recursive) - result += "["; - result += wrapped.value.map(f => toString(f, setting, true)).join(", "); - if (recursive) - result += "]"; - return result; - case "object": - return ("{ " + - Object.entries(wrapped.value) - .map(e => e[0] + ": " + toString(e[1], setting, true)) - .join(", ") + - " }"); - case "date": - if (wrapped.value.second == 0 && wrapped.value.hour == 0 && wrapped.value.minute == 0) { - return wrapped.value.toFormat(setting.defaultDateFormat); - } - return wrapped.value.toFormat(setting.defaultDateTimeFormat); - case "duration": - return wrapped.value.toISOTime(); - } - } - Values.toString = toString; - /** Wrap a literal value so you can switch on it easily. */ - function wrapValue(val) { - if (isNull(val)) - return { type: "null", value: val }; - else if (isNumber(val)) - return { type: "number", value: val }; - else if (isString(val)) - return { type: "string", value: val }; - else if (isBoolean(val)) - return { type: "boolean", value: val }; - else if (isDuration(val)) - return { type: "duration", value: val }; - else if (isDate(val)) - return { type: "date", value: val }; - else if (isHtml(val)) - return { type: "html", value: val }; - else if (isArray(val)) - return { type: "array", value: val }; - else if (isLink(val)) - return { type: "link", value: val }; - else if (isTask(val)) - return { type: "task", value: val }; - else if (isFunction(val)) - return { type: "function", value: val }; - else if (isObject(val)) - return { type: "object", value: val }; - else - return undefined; - } - Values.wrapValue = wrapValue; - /** Compare two arbitrary JavaScript values. Produces a total ordering over ANY possible dataview value. */ - function compareValue(val1, val2, linkNormalizer) { - var _a, _b; - // Handle undefined/nulls first. - if (val1 === undefined) - val1 = null; - if (val2 === undefined) - val2 = null; - if (val1 === null && val2 === null) - return 0; - else if (val1 === null) - return -1; - else if (val2 === null) - return 1; - // A non-null value now which we can wrap & compare on. - let wrap1 = wrapValue(val1); - let wrap2 = wrapValue(val2); - if (wrap1 === undefined && wrap2 === undefined) - return 0; - else if (wrap1 === undefined) - return -1; - else if (wrap2 === undefined) - return 1; - if (wrap1.type != wrap2.type) - return wrap1.type.localeCompare(wrap2.type); - switch (wrap1.type) { - case "string": - return wrap1.value.localeCompare(wrap2.value); - case "number": - if (wrap1.value < wrap2.value) - return -1; - else if (wrap1.value == wrap2.value) - return 0; - return 1; - case "null": - return 0; - case "boolean": - if (wrap1.value == wrap2.value) - return 0; - else - return wrap1.value ? 1 : -1; - case "link": - let link1 = wrap1.value; - let link2 = wrap2.value; - let normalize = linkNormalizer !== null && linkNormalizer !== void 0 ? linkNormalizer : ((x) => x); - // We can't compare by file name or display, since that would break link equality. Compare by path. - let pathCompare = normalize(link1.path).localeCompare(normalize(link2.path)); - if (pathCompare != 0) - return pathCompare; - // Then compare by type. - let typeCompare = link1.type.localeCompare(link2.type); - if (typeCompare != 0) - return typeCompare; - // Then compare by subpath existence. - if (link1.subpath && !link2.subpath) - return 1; - if (!link1.subpath && link2.subpath) - return -1; - if (!link1.subpath && !link2.subpath) - return 0; - // Since both have a subpath, compare by subpath. - return ((_a = link1.subpath) !== null && _a !== void 0 ? _a : "").localeCompare((_b = link2.subpath) !== null && _b !== void 0 ? _b : ""); - case "task": - let task1 = wrap1.value; - let task2 = wrap2.value; - // Use object comparison & compare the unique identifiers (path, line, and text as backup). - return compareValue({ path: task1.path, line: task1.line, text: task1.text }, { path: task2.path, line: task2.line, text: task2.text }); - case "date": - return wrap1.value < wrap2.value - ? -1 - : wrap1.value.equals(wrap2.value) - ? 0 - : 1; - case "duration": - return wrap1.value < wrap2.value - ? -1 - : wrap1.value.equals(wrap2.value) - ? 0 - : 1; - case "array": - let f1 = wrap1.value; - let f2 = wrap2.value; - for (let index = 0; index < Math.min(f1.length, f2.length); index++) { - let comp = compareValue(f1[index], f2[index]); - if (comp != 0) - return comp; - } - return f1.length - f2.length; - case "object": - let o1 = wrap1.value; - let o2 = wrap2.value; - let k1 = Array.from(Object.keys(o1)); - let k2 = Array.from(Object.keys(o2)); - k1.sort(); - k2.sort(); - let keyCompare = compareValue(k1, k2); - if (keyCompare != 0) - return keyCompare; - for (let key of k1) { - let comp = compareValue(o1[key], o2[key]); - if (comp != 0) - return comp; - } - return 0; - case "html": - return 0; - case "function": - return 0; - } - } - Values.compareValue = compareValue; - /** Find the corresponding Dataveiw type for an arbitrary value. */ - function typeOf(val) { - var _a; - return (_a = wrapValue(val)) === null || _a === void 0 ? void 0 : _a.type; - } - Values.typeOf = typeOf; - /** Determine if the given value is "truthy" (i.e., is non-null and has data in it). */ - function isTruthy(field) { - let wrapped = wrapValue(field); - if (!wrapped) - return false; - switch (wrapped.type) { - case "number": - return wrapped.value != 0; - case "string": - return wrapped.value.length > 0; - case "boolean": - return wrapped.value; - case "link": - return !!wrapped.value.path; - case "task": - return wrapped.value.text.length > 0; - case "date": - return wrapped.value.toMillis() != 0; - case "duration": - return wrapped.value.as("seconds") != 0; - case "object": - return Object.keys(wrapped.value).length > 0; - case "array": - return wrapped.value.length > 0; - case "null": - return false; - case "html": - return true; - case "function": - return true; - } - } - Values.isTruthy = isTruthy; - /** Deep copy a field. */ - function deepCopy(field) { - if (field === null || field === undefined) - return field; - if (Values.isArray(field)) { - return [].concat(field.map(v => deepCopy(v))); - } - else if (Values.isObject(field)) { - let result = {}; - for (let [key, value] of Object.entries(field)) - result[key] = deepCopy(value); - return result; - } - else { - return field; - } - } - Values.deepCopy = deepCopy; - function isString(val) { - return typeof val == "string"; - } - Values.isString = isString; - function isNumber(val) { - return typeof val == "number"; - } - Values.isNumber = isNumber; - function isDate(val) { - return val instanceof DateTime_1; - } - Values.isDate = isDate; - function isDuration(val) { - return val instanceof Duration_1; - } - Values.isDuration = isDuration; - function isNull(val) { - return val === null || val === undefined; - } - Values.isNull = isNull; - function isArray(val) { - return Array.isArray(val); - } - Values.isArray = isArray; - function isBoolean(val) { - return typeof val === "boolean"; - } - Values.isBoolean = isBoolean; - function isLink(val) { - return val instanceof Link; - } - Values.isLink = isLink; - function isTask(val) { - return val instanceof Task; - } - Values.isTask = isTask; - function isHtml(val) { - if (typeof HTMLElement !== "undefined") { - return val instanceof HTMLElement; - } - else { - return false; - } - } - Values.isHtml = isHtml; - function isObject(val) { - return (typeof val == "object" && - !isHtml(val) && - !isArray(val) && - !isDuration(val) && - !isDate(val) && - !isLink(val) && - !isTask(val)); - } - Values.isObject = isObject; - function isFunction(val) { - return typeof val == "function"; - } - Values.isFunction = isFunction; -})(Values || (Values = {})); -var Groupings; -(function (Groupings) { - function base(value) { - return { type: "base", value }; - } - Groupings.base = base; - function grouped(values) { - return { type: "grouped", groups: values }; - } - Groupings.grouped = grouped; -})(Groupings || (Groupings = {})); - -/** Implementation of DataArray, minus the dynamic variable access, which is implemented via proxy. */ -class DataArrayImpl { - constructor(values, settings, defaultComparator = Values.compareValue) { - this.values = values; - this.settings = settings; - this.defaultComparator = defaultComparator; - this.length = values.length; - } - static wrap(arr, settings, defaultComparator = Values.compareValue) { - return new Proxy(new DataArrayImpl(arr, settings, defaultComparator), DataArrayImpl.ARRAY_PROXY); - } - lwrap(values) { - return DataArrayImpl.wrap(values, this.settings, this.defaultComparator); - } - where(predicate) { - return this.lwrap(this.values.filter(predicate)); - } - filter(predicate) { - return this.where(predicate); - } - map(f) { - return this.lwrap(this.values.map(f)); - } - flatMap(f) { - let result = []; - for (let index = 0; index < this.length; index++) { - let value = f(this.values[index], index, this.values); - if (!value || value.length == 0) - continue; - for (let r of value) - result.push(r); - } - return this.lwrap(result); - } - mutate(f) { - this.values.forEach(f); - return this; - } - limit(count) { - return this.lwrap(this.values.slice(0, count)); - } - slice(start, end) { - return this.lwrap(this.values.slice(start, end)); - } - concat(other) { - return this.lwrap(this.values.concat(other.values)); - } - /** Return the first index of the given (optionally starting the search) */ - indexOf(element, fromIndex) { - return this.findIndex(e => this.defaultComparator(e, element) == 0, fromIndex); - } - /** Return the first element that satisfies the given predicate. */ - find(pred) { - let index = this.findIndex(pred); - if (index == -1) - return undefined; - else - return this.values[index]; - } - findIndex(pred, fromIndex) { - for (let index = fromIndex !== null && fromIndex !== void 0 ? fromIndex : 0; index < this.length; index++) { - if (pred(this.values[index], index, this.values)) - return index; - } - return -1; - } - includes(element) { - return this.indexOf(element, 0) != -1; - } - join(sep) { - return this.map(s => Values.toString(s, this.settings)) - .array() - .join(sep !== null && sep !== void 0 ? sep : ", "); - } - sort(key, direction, comparator) { - if (this.values.length == 0) - return this; - let realComparator = comparator !== null && comparator !== void 0 ? comparator : this.defaultComparator; - let realKey = key !== null && key !== void 0 ? key : ((l) => l); - // Associate each entry with it's index for the key function, and then do a normal sort. - let copy = [].concat(this.array()).map((elem, index) => { - return { index: index, value: elem }; - }); - copy.sort((a, b) => { - let aKey = realKey(a.value, a.index, this.values); - let bKey = realKey(b.value, b.index, this.values); - return direction === "desc" ? -realComparator(aKey, bKey) : realComparator(aKey, bKey); - }); - return this.lwrap(copy.map(e => e.value)); - } - groupBy(key, comparator) { - if (this.values.length == 0) - return this.lwrap([]); - // JavaScript sucks and we can't make hash maps over arbitrary types (only strings/ints), so - // we do a poor man algorithm where we SORT, followed by grouping. - let intermediate = this.sort(key, "asc", comparator); - comparator = comparator !== null && comparator !== void 0 ? comparator : this.defaultComparator; - let result = []; - let currentRow = [intermediate[0]]; - let current = key(intermediate[0], 0, intermediate.values); - for (let index = 1; index < intermediate.length; index++) { - let newKey = key(intermediate[index], index, intermediate.values); - if (comparator(current, newKey) != 0) { - result.push({ key: current, rows: this.lwrap(currentRow) }); - current = newKey; - currentRow = [intermediate[index]]; - } - else { - currentRow.push(intermediate[index]); - } - } - result.push({ key: current, rows: this.lwrap(currentRow) }); - return this.lwrap(result); - } - distinct(key, comparator) { - if (this.values.length == 0) - return this; - let realKey = key !== null && key !== void 0 ? key : (x => x); - // For similar reasons to groupBy, do a sort and take the first element of each block. - let intermediate = this.map((x, index) => { - return { key: realKey(x, index, this.values), value: x }; - }).sort(x => x.key, "asc", comparator); - comparator = comparator !== null && comparator !== void 0 ? comparator : this.defaultComparator; - let result = [intermediate[0].value]; - for (let index = 1; index < intermediate.length; index++) { - if (comparator(intermediate[index - 1].key, intermediate[index].key) != 0) { - result.push(intermediate[index].value); - } - } - return this.lwrap(result); - } - every(f) { - return this.values.every(f); - } - some(f) { - return this.values.some(f); - } - none(f) { - return this.values.every((v, i, a) => !f(v, i, a)); - } - first() { - return this.values.length > 0 ? this.values[0] : undefined; - } - last() { - return this.values.length > 0 ? this.values[this.values.length - 1] : undefined; - } - to(key) { - let result = []; - for (let child of this.values) { - let value = child[key]; - if (value === undefined || value === null) - continue; - if (Array.isArray(value) || DataArray.isDataArray(value)) - value.forEach(v => result.push(v)); - else - result.push(value); - } - return this.lwrap(result); - } - into(key) { - let result = []; - for (let child of this.values) { - let value = child[key]; - if (value === undefined || value === null) - continue; - result.push(value); - } - return this.lwrap(result); - } - expand(key) { - let result = []; - let queue = [].concat(this.values); - while (queue.length > 0) { - let next = queue.pop(); - let value = next[key]; - if (value === undefined || value === null) - continue; - if (Array.isArray(value)) - value.forEach(v => queue.push(v)); - else if (value instanceof DataArrayImpl) - value.forEach(v => queue.push(v)); - else - queue.push(value); - result.push(next); - } - return this.lwrap(result); - } - forEach(f) { - for (let index = 0; index < this.values.length; index++) { - f(this.values[index], index, this.values); - } - } - array() { - return [].concat(this.values); - } - [Symbol.iterator]() { - return this.values[Symbol.iterator](); - } - toString() { - return this.values.toString(); - } -} -DataArrayImpl.ARRAY_FUNCTIONS = new Set([ - "where", - "filter", - "map", - "flatMap", - "mutate", - "slice", - "concat", - "indexOf", - "limit", - "find", - "findIndex", - "includes", - "join", - "sort", - "groupBy", - "distinct", - "every", - "some", - "none", - "first", - "last", - "to", - "into", - "lwrap", - "expand", - "forEach", - "length", - "values", - "array", - "defaultComparator", - "toString", -]); -DataArrayImpl.ARRAY_PROXY = { - get: function (target, prop, reciever) { - if (typeof prop === "symbol") - return target[prop]; - else if (typeof prop === "number") - return target.values[prop]; - else if (!isNaN(parseInt(prop))) - return target.values[parseInt(prop)]; - else if (DataArrayImpl.ARRAY_FUNCTIONS.has(prop.toString())) - return target[prop.toString()]; - return target.to(prop); - }, -}; -/** Provides utility functions for generating data arrays. */ -var DataArray; -(function (DataArray) { - /** Create a new Dataview data array. */ - function wrap(raw, settings) { - return DataArrayImpl.wrap(raw, settings); - } - DataArray.wrap = wrap; - /** Create a new DataArray from an iterable object. */ - function from(raw, settings) { - let data = []; - for (let elem of raw) - data.push(elem); - return DataArrayImpl.wrap(data, settings); - } - DataArray.from = from; - /** Convert all arrays in a deep object into data arrays. */ - // TODO: Can instead pass settings to the toObject() functions; will probably refactor this soon. - function convert(object, settings) { - let type = Values.wrapValue(object); - if (!type) - return object; - switch (type.type) { - case "array": - return DataArray.wrap(type.value.map(v => convert(v, settings)), settings); - case "object": - let result = {}; - for (let [key, value] of Object.entries(type.value)) { - result[key] = convert(value, settings); - } - return result; - default: - return object; - } - } - DataArray.convert = convert; - /** Return true if the given object is a data array. */ - function isDataArray(obj) { - return obj instanceof DataArrayImpl; - } - DataArray.isDataArray = isDataArray; -})(DataArray || (DataArray = {})); - -/** Test-environment-friendly function which fetches the current system locale. */ -function currentLocale() { - if (typeof window === "undefined") - return "en-US"; - return window.navigator.language; -} - -/** Render simple fields compactly, removing wrapping content like paragraph and span. */ -async function renderCompactMarkdown(markdown, container, sourcePath, component) { - let subcontainer = container.createSpan(); - await obsidian.MarkdownRenderer.renderMarkdown(markdown, subcontainer, sourcePath, component); - let paragraph = subcontainer.querySelector("p"); - if (subcontainer.children.length == 1 && paragraph) { - while (paragraph.firstChild) { - subcontainer.appendChild(paragraph.firstChild); - } - subcontainer.removeChild(paragraph); - } -} -/** Create a list inside the given container, with the given data. */ -async function renderList(container, elements, component, originFile, settings) { - let listEl = container.createEl("ul", { cls: ["dataview", "list-view-ul"] }); - for (let elem of elements) { - let li = listEl.createEl("li"); - await renderValue(elem, li, originFile, component, settings, true, "list"); - } -} -/** Create a table inside the given container, with the given data. */ -async function renderTable(container, headers, values, component, originFile, settings) { - let tableEl = container.createEl("table", { cls: ["dataview", "table-view-table"] }); - let theadEl = tableEl.createEl("thead", { cls: "table-view-thead" }); - let headerEl = theadEl.createEl("tr", { cls: "table-view-tr-header" }); - for (let header of headers) { - headerEl.createEl("th", { text: header, cls: "table-view-th" }); - } - let tbodyEl = tableEl.createEl("tbody", { cls: "table-view-tbody" }); - for (let row of values) { - let rowEl = tbodyEl.createEl("tr"); - for (let value of row) { - let td = rowEl.createEl("td"); - await renderValue(value, td, originFile, component, settings, true); - } - } -} -/** Render a pre block with an error in it; returns the element to allow for dynamic updating. */ -function renderErrorPre(container, error) { - let pre = container.createEl("pre", { cls: ["dataview", "dataview-error"] }); - pre.appendText(error); - return pre; -} -/** Render a DateTime in a minimal format to save space. */ -function renderMinimalDate(time, settings) { - // If there is no relevant time specified, fall back to just rendering the date. - if (time.second == 0 && time.minute == 0 && time.hour == 0) { - return time.toFormat(settings.defaultDateFormat, { locale: currentLocale() }); - } - return time.toFormat(settings.defaultDateTimeFormat, { locale: currentLocale() }); -} -/** Render a duration in a minimal format to save space. */ -function renderMinimalDuration(dur) { - dur = normalizeDuration(dur); - let result = ""; - if (dur.years) - result += `${dur.years} years, `; - if (dur.months) - result += `${dur.months} months, `; - if (dur.weeks) - result += `${dur.weeks} weeks, `; - if (dur.days) - result += `${dur.days} days, `; - if (dur.hours) - result += `${dur.hours} hours, `; - if (dur.minutes) - result += `${dur.minutes} minutes, `; - if (dur.seconds) - result += `${Math.round(dur.seconds)} seconds, `; - if (dur.milliseconds) - result += `${Math.round(dur.milliseconds)} ms, `; - if (result.endsWith(", ")) - result = result.substring(0, result.length - 2); - return result; -} -/** Prettily render a value into a container with the given settings. */ -async function renderValue(field, container, originFile, component, settings, expandList = false, context = "root", depth = 0) { - var _a, _b; - // Prevent infinite recursion. - if (depth > settings.maxRecursiveRenderDepth) { - container.appendText("..."); - return; - } - if (Values.isNull(field)) { - await renderCompactMarkdown(settings.renderNullAs, container, originFile, component); - } - else if (Values.isDate(field)) { - container.appendText(renderMinimalDate(field, settings)); - } - else if (Values.isDuration(field)) { - container.appendText(renderMinimalDuration(field)); - } - else if (Values.isString(field) || Values.isBoolean(field) || Values.isNumber(field)) { - await renderCompactMarkdown("" + field, container, originFile, component); - } - else if (Values.isLink(field)) { - await renderCompactMarkdown(field.markdown(), container, originFile, component); - } - else if (Values.isHtml(field)) { - container.appendChild(field); - } - else if (Values.isFunction(field)) { - container.appendText(""); - } - else if (Values.isArray(field) || DataArray.isDataArray(field)) { - if (expandList) { - let list = container.createEl("ul", { - cls: [ - "dataview", - "dataview-ul", - context == "list" ? "dataview-result-list-ul" : "dataview-result-list-root-ul", - ], - }); - for (let child of field) { - let li = list.createEl("li", { cls: "dataview-result-list-li" }); - await renderValue(child, li, originFile, component, settings, expandList, "list", depth + 1); - } - } - else { - if (field.length == 0) { - container.appendText(""); - return; - } - let span = container.createEl("span", { cls: ["dataview", "dataview-result-list-span"] }); - let first = true; - for (let val of field) { - if (first) - first = false; - else - span.appendText(", "); - await renderValue(val, span, originFile, component, settings, expandList, "list", depth + 1); - } - } - } - else if (Values.isObject(field)) { - // Don't render classes in case they have recursive references; spoopy. - if (!Values.isTask(field) && ((_a = field === null || field === void 0 ? void 0 : field.constructor) === null || _a === void 0 ? void 0 : _a.name) && ((_b = field === null || field === void 0 ? void 0 : field.constructor) === null || _b === void 0 ? void 0 : _b.name) != "Object") { - container.appendText(`<${field.constructor.name}>`); - return; - } - if (expandList) { - let list = container.createEl("ul", { cls: ["dataview", "dataview-ul", "dataview-result-object-ul"] }); - for (let [key, value] of Object.entries(field)) { - let li = list.createEl("li", { cls: ["dataview", "dataview-li", "dataview-result-object-li"] }); - li.appendText(key + ": "); - await renderValue(value, li, originFile, component, settings, expandList, "list", depth + 1); - } - } - else { - if (Object.keys(field).length == 0) { - container.appendText(""); - return; - } - let span = container.createEl("span", { cls: ["dataview", "dataview-result-object-span"] }); - let first = true; - for (let [key, value] of Object.entries(field)) { - if (first) - first = false; - else - span.appendText(", "); - span.appendText(key + ": "); - await renderValue(value, span, originFile, component, settings, expandList, "list", depth + 1); - } - } - } - else { - container.appendText("Unrecognized: " + JSON.stringify(field)); - } -} - -/** Utility methods for creating & comparing fields. */ -var Fields; -(function (Fields) { - function variable(name) { - return { type: "variable", name }; - } - Fields.variable = variable; - function literal(value) { - return { type: "literal", value }; - } - Fields.literal = literal; - function binaryOp(left, op, right) { - return { type: "binaryop", left, op, right }; - } - Fields.binaryOp = binaryOp; - function index(obj, index) { - return { type: "index", object: obj, index }; - } - Fields.index = index; - /** Converts a string in dot-notation-format into a variable which indexes. */ - function indexVariable(name) { - let parts = name.split("."); - let result = Fields.variable(parts[0]); - for (let index = 1; index < parts.length; index++) { - result = Fields.index(result, Fields.literal(parts[index])); - } - return result; - } - Fields.indexVariable = indexVariable; - function lambda(args, value) { - return { type: "lambda", arguments: args, value }; - } - Fields.lambda = lambda; - function func(func, args) { - return { type: "function", func, arguments: args }; - } - Fields.func = func; - function list(values) { - return { type: "list", values }; - } - Fields.list = list; - function object(values) { - return { type: "object", values }; - } - Fields.object = object; - function negate(child) { - return { type: "negated", child }; - } - Fields.negate = negate; - function isCompareOp(op) { - return op == "<=" || op == "<" || op == ">" || op == ">=" || op == "!=" || op == "="; - } - Fields.isCompareOp = isCompareOp; - Fields.NULL = Fields.literal(null); -})(Fields || (Fields = {})); - -/** AST implementation for queries over data sources. */ -/** Utility functions for creating and manipulating sources. */ -var Sources; -(function (Sources) { - function tag(tag) { - return { type: "tag", tag }; - } - Sources.tag = tag; - function csv(path) { - return { type: "csv", path }; - } - Sources.csv = csv; - function folder(prefix) { - return { type: "folder", folder: prefix }; - } - Sources.folder = folder; - function link(file, incoming) { - return { type: "link", file, direction: incoming ? "incoming" : "outgoing" }; - } - Sources.link = link; - function binaryOp(left, op, right) { - return { type: "binaryop", left, op, right }; - } - Sources.binaryOp = binaryOp; - function negate(child) { - return { type: "negate", child }; - } - Sources.negate = negate; - function empty() { - return { type: "empty" }; - } - Sources.empty = empty; -})(Sources || (Sources = {})); - -/** Emoji regex without any additional flags. */ -const EMOJI_REGEX = new RegExp(emojiRegex(), ""); -/** Provides a lookup table for unit durations of the given type. */ -const DURATION_TYPES = { - year: Duration_1.fromObject({ years: 1 }), - years: Duration_1.fromObject({ years: 1 }), - yr: Duration_1.fromObject({ years: 1 }), - yrs: Duration_1.fromObject({ years: 1 }), - month: Duration_1.fromObject({ months: 1 }), - months: Duration_1.fromObject({ months: 1 }), - mo: Duration_1.fromObject({ months: 1 }), - mos: Duration_1.fromObject({ months: 1 }), - week: Duration_1.fromObject({ weeks: 1 }), - weeks: Duration_1.fromObject({ weeks: 1 }), - wk: Duration_1.fromObject({ weeks: 1 }), - wks: Duration_1.fromObject({ weeks: 1 }), - w: Duration_1.fromObject({ weeks: 1 }), - day: Duration_1.fromObject({ days: 1 }), - days: Duration_1.fromObject({ days: 1 }), - d: Duration_1.fromObject({ days: 1 }), - hour: Duration_1.fromObject({ hours: 1 }), - hours: Duration_1.fromObject({ hours: 1 }), - hr: Duration_1.fromObject({ hours: 1 }), - hrs: Duration_1.fromObject({ hours: 1 }), - h: Duration_1.fromObject({ hours: 1 }), - minute: Duration_1.fromObject({ minutes: 1 }), - minutes: Duration_1.fromObject({ minutes: 1 }), - min: Duration_1.fromObject({ minutes: 1 }), - mins: Duration_1.fromObject({ minutes: 1 }), - m: Duration_1.fromObject({ minutes: 1 }), - second: Duration_1.fromObject({ seconds: 1 }), - seconds: Duration_1.fromObject({ seconds: 1 }), - sec: Duration_1.fromObject({ seconds: 1 }), - secs: Duration_1.fromObject({ seconds: 1 }), - s: Duration_1.fromObject({ seconds: 1 }), -}; -/** Shorthand for common dates (relative to right now). */ -const DATE_SHORTHANDS = { - now: () => DateTime_1.local(), - today: () => DateTime_1.local().startOf("day"), - yesterday: () => DateTime_1.local() - .startOf("day") - .minus(Duration_1.fromObject({ days: 1 })), - tommorow: () => DateTime_1.local() - .startOf("day") - .plus(Duration_1.fromObject({ days: 1 })), - sow: () => DateTime_1.local().startOf("week"), - "start-of-week": () => DateTime_1.local().startOf("week"), - eow: () => DateTime_1.local().endOf("week"), - "end-of-week": () => DateTime_1.local().endOf("week"), - soy: () => DateTime_1.local().startOf("year"), - "start-of-year": () => DateTime_1.local().startOf("year"), - eoy: () => DateTime_1.local().endOf("year"), - "end-of-year": () => DateTime_1.local().endOf("year"), - som: () => DateTime_1.local().startOf("month"), - "start-of-month": () => DateTime_1.local().startOf("month"), - eom: () => DateTime_1.local().endOf("month"), - "end-of-month": () => DateTime_1.local().endOf("month"), -}; -/** - * Keywords which cannot be used as variables directly. Use `row.` if it is a variable you have defined and want - * to access. - */ -const KEYWORDS = ["FROM", "WHERE", "LIMIT", "GROUP", "FLATTEN"]; -/////////////// -// Utilities // -/////////////// -/** Attempt to parse the inside of a link to pull out display name, subpath, etc. */ -function parseInnerLink(link) { - let display = undefined; - if (link.includes("|")) { - let split = link.split("|"); - link = split[0]; - display = split[1]; - } - if (link.includes("#^")) { - let split = link.split("#^"); - return Link.block(split[0], split[1], false, display); - } - else if (link.includes("#")) { - let split = link.split("#"); - return Link.header(split[0], split[1], false, display); - } - return Link.file(link, false, display); -} -/** Create a left-associative binary parser which parses the given sub-element and separator. Handles whitespace. */ -function createBinaryParser(child, sep, combine) { - return parsimmon_umd_min.exports.seqMap(child, parsimmon_umd_min.exports.seq(parsimmon_umd_min.exports.optWhitespace, sep, parsimmon_umd_min.exports.optWhitespace, child).many(), (first, rest) => { - if (rest.length == 0) - return first; - let node = combine(first, rest[0][1], rest[0][3]); - for (let index = 1; index < rest.length; index++) { - node = combine(node, rest[index][1], rest[index][3]); - } - return node; - }); -} -function chainOpt(base, ...funcs) { - return parsimmon_umd_min.exports.custom((success, failure) => { - return (input, i) => { - let result = base._(input, i); - if (!result.status) - return result; - for (let func of funcs) { - let next = func(result.value)._(input, result.index); - if (!next.status) - return result; - result = next; - } - return result; - }; - }); -} -const EXPRESSION = parsimmon_umd_min.exports.createLanguage({ - // A floating point number; the decimal point is optional. - number: q => parsimmon_umd_min.exports.regexp(/-?[0-9]+(\.[0-9]+)?/) - .map(str => Number.parseFloat(str)) - .desc("number"), - // A quote-surrounded string which supports escape characters ('\'). - string: q => parsimmon_umd_min.exports.string('"') - .then(parsimmon_umd_min.exports.alt(q.escapeCharacter, parsimmon_umd_min.exports.noneOf('"\\')) - .atLeast(0) - .map(chars => chars.join(""))) - .skip(parsimmon_umd_min.exports.string('"')) - .desc("string"), - escapeCharacter: _ => parsimmon_umd_min.exports.string("\\") - .then(parsimmon_umd_min.exports.any) - .map(escaped => { - // If we are escaping a backslash or a quote, pass in on in escaped form - if (escaped === '"') - return '"'; - if (escaped === "\\") - return "\\"; - else - return "\\" + escaped; - }), - // A boolean true/false value. - bool: _ => parsimmon_umd_min.exports.regexp(/true|false|True|False/) - .map(str => str.toLowerCase() == "true") - .desc("boolean ('true' or 'false')"), - // A tag of the form '#stuff/hello-there'. - tag: _ => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("#"), parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regexp(/[\p{Letter}0-9_/-]/u), parsimmon_umd_min.exports.regexp(EMOJI_REGEX)).many(), (start, rest) => start + rest.join("")).desc("tag ('#hello/stuff')"), - // A variable identifier, which is alphanumeric and must start with a letter or... emoji. - identifier: _ => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regexp(/\p{Letter}/u), parsimmon_umd_min.exports.regexp(EMOJI_REGEX)), parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regexp(/[0-9\p{Letter}_-]/u), parsimmon_umd_min.exports.regexp(EMOJI_REGEX)).many(), (first, rest) => first + rest.join("")).desc("variable identifier"), - // A variable identifier, which is alphanumeric and must start with a letter. Can include dots. - identifierDot: _ => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regexp(/\p{Letter}/u), parsimmon_umd_min.exports.regexp(EMOJI_REGEX)), parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regexp(/[0-9\p{Letter}\._-]/u), parsimmon_umd_min.exports.regexp(EMOJI_REGEX)).many(), (first, rest) => first + rest.join("")).desc("variable identifier"), - // An Obsidian link of the form [[]]. - link: _ => parsimmon_umd_min.exports.regexp(/\[\[([^\[\]]*?)\]\]/u, 1) - .map(linkInner => parseInnerLink(linkInner)) - .desc("file link"), - // An embeddable link which can start with '!'. This overlaps with the normal negation operator, so it is only - // provided for metadata parsing. - embedLink: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("!").atMost(1), q.link, (p, l) => { - if (p.length > 0) - l.embed = true; - return l; - }), - // Binary plus or minus operator. - binaryPlusMinus: _ => parsimmon_umd_min.exports.regexp(/\+|-/) - .map(str => str) - .desc("'+' or '-'"), - // Binary times or divide operator. - binaryMulDiv: _ => parsimmon_umd_min.exports.regexp(/\*|\//) - .map(str => str) - .desc("'*' or '/'"), - // Binary comparison operator. - binaryCompareOp: _ => parsimmon_umd_min.exports.regexp(/>=|<=|!=|>|<|=/) - .map(str => str) - .desc("'>=' or '<=' or '!=' or '=' or '>' or '<'"), - // Binary boolean combination operator. - binaryBooleanOp: _ => parsimmon_umd_min.exports.regexp(/and|or|&|\|/i) - .map(str => { - if (str.toLowerCase() == "and") - return "&"; - else if (str.toLowerCase() == "or") - return "|"; - else - return str; - }) - .desc("'and' or 'or'"), - // A date which can be YYYY-MM[-DDTHH:mm:ss]. - rootDate: _ => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/\d{4}/), parsimmon_umd_min.exports.string("-"), parsimmon_umd_min.exports.regexp(/\d{2}/), (year, _, month) => { - return DateTime_1.fromObject({ year: Number.parseInt(year), month: Number.parseInt(month) }); - }).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"), - dateShorthand: _ => parsimmon_umd_min.exports.alt(...Object.keys(DATE_SHORTHANDS) - .sort((a, b) => b.length - a.length) - .map(parsimmon_umd_min.exports.string)), - date: q => chainOpt(q.rootDate, (ym) => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("-"), parsimmon_umd_min.exports.regexp(/\d{2}/), (_, day) => ym.set({ day: Number.parseInt(day) })), (ymd) => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("T"), parsimmon_umd_min.exports.regexp(/\d{2}/), (_, hour) => ymd.set({ hour: Number.parseInt(hour) })), (ymdh) => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string(":"), parsimmon_umd_min.exports.regexp(/\d{2}/), (_, minute) => ymdh.set({ minute: Number.parseInt(minute) })), (ymdhm) => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string(":"), parsimmon_umd_min.exports.regexp(/\d{2}/), (_, second) => ymdhm.set({ second: Number.parseInt(second) })), (ymdhms) => parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("."), parsimmon_umd_min.exports.regexp(/\d{3}/), (_, millisecond) => ymdhms.set({ millisecond: Number.parseInt(millisecond) })), parsimmon_umd_min.exports.succeed(ymdhms) // pass - ), (dt) => parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("+").or(parsimmon_umd_min.exports.string("-")), parsimmon_umd_min.exports.regexp(/\d{1,2}(:\d{2})?/), (pm, hr) => dt.setZone("UTC" + pm + hr, { keepLocalTime: true })), parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("Z"), () => dt.setZone("utc", { keepLocalTime: true })), parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("["), parsimmon_umd_min.exports.regexp(/[0-9A-Za-z+-\/]+/u), parsimmon_umd_min.exports.string("]"), (_a, zone, _b) => dt.setZone(zone, { keepLocalTime: true })))).assert((dt) => dt.isValid, "valid date"), - // A date, plus various shorthand times of day it could be. - datePlus: q => parsimmon_umd_min.exports.alt(q.dateShorthand.map(d => DATE_SHORTHANDS[d]()), q.date), - // A duration of time. - durationType: _ => parsimmon_umd_min.exports.alt(...Object.keys(DURATION_TYPES) - .sort((a, b) => b.length - a.length) - .map(parsimmon_umd_min.exports.string)), - duration: q => parsimmon_umd_min.exports.seqMap(q.number, parsimmon_umd_min.exports.optWhitespace, q.durationType, (count, _, t) => DURATION_TYPES[t].mapUnits(x => x * count)) - .sepBy1(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace).or(parsimmon_umd_min.exports.optWhitespace)) - .map(durations => durations.reduce((p, c) => p.plus(c))), - // A raw null value. - rawNull: _ => parsimmon_umd_min.exports.string("null"), - // Source parsing. - tagSource: q => q.tag.map(tag => Sources.tag(tag)), - csvSource: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("csv(").skip(parsimmon_umd_min.exports.optWhitespace), q.string, parsimmon_umd_min.exports.string(")"), (_1, path, _2) => Sources.csv(path)), - linkIncomingSource: q => q.link.map(link => Sources.link(link.path, true)), - linkOutgoingSource: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("outgoing(").skip(parsimmon_umd_min.exports.optWhitespace), q.link, parsimmon_umd_min.exports.string(")"), (_1, link, _2) => Sources.link(link.path, false)), - folderSource: q => q.string.map(str => Sources.folder(str)), - parensSource: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("("), parsimmon_umd_min.exports.optWhitespace, q.source, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (_1, _2, field, _3, _4) => field), - negateSource: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.string("-"), parsimmon_umd_min.exports.string("!")), q.atomSource, (_, source) => Sources.negate(source)), - atomSource: q => parsimmon_umd_min.exports.alt(q.parensSource, q.negateSource, q.linkOutgoingSource, q.linkIncomingSource, q.folderSource, q.tagSource, q.csvSource), - binaryOpSource: q => createBinaryParser(q.atomSource, q.binaryBooleanOp.map(s => s), Sources.binaryOp), - source: q => q.binaryOpSource, - // Field parsing. - variableField: q => q.identifier - .chain(r => { - if (KEYWORDS.includes(r.toUpperCase())) { - return parsimmon_umd_min.exports.fail("Variable fields cannot be a keyword (" + KEYWORDS.join(" or ") + ")"); - } - else { - return parsimmon_umd_min.exports.succeed(Fields.variable(r)); - } - }) - .desc("variable"), - numberField: q => q.number.map(val => Fields.literal(val)).desc("number"), - stringField: q => q.string.map(val => Fields.literal(val)).desc("string"), - boolField: q => q.bool.map(val => Fields.literal(val)).desc("boolean"), - dateField: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("date("), parsimmon_umd_min.exports.optWhitespace, q.datePlus, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (prefix, _1, date, _2, postfix) => Fields.literal(date)).desc("date"), - durationField: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("dur("), parsimmon_umd_min.exports.optWhitespace, q.duration, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (prefix, _1, dur, _2, postfix) => Fields.literal(dur)).desc("duration"), - nullField: q => q.rawNull.map(_ => Fields.NULL), - linkField: q => q.link.map(f => Fields.literal(f)), - listField: q => q.field - .sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)) - .wrap(parsimmon_umd_min.exports.string("[").skip(parsimmon_umd_min.exports.optWhitespace), parsimmon_umd_min.exports.optWhitespace.then(parsimmon_umd_min.exports.string("]"))) - .map(l => Fields.list(l)) - .desc("list ('[1, 2, 3]')"), - objectField: q => parsimmon_umd_min.exports.seqMap(q.identifier.or(q.string), parsimmon_umd_min.exports.string(":").trim(parsimmon_umd_min.exports.optWhitespace), q.field, (name, _sep, value) => { - return { name, value }; - }) - .sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)) - .wrap(parsimmon_umd_min.exports.string("{").skip(parsimmon_umd_min.exports.optWhitespace), parsimmon_umd_min.exports.optWhitespace.then(parsimmon_umd_min.exports.string("}"))) - .map(vals => { - let res = {}; - for (let entry of vals) - res[entry.name] = entry.value; - return Fields.object(res); - }) - .desc("object ('{ a: 1, b: 2 }')"), - atomInlineField: q => parsimmon_umd_min.exports.alt(q.date, q.duration.map(d => normalizeDuration(d)), q.string, q.embedLink, q.bool, q.number, q.rawNull), - inlineFieldList: q => q.atomInlineField.sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace).lookahead(q.atomInlineField)), - inlineField: q => parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.seqMap(q.atomInlineField, parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace), q.inlineFieldList, (f, _s, l) => [f].concat(l)), q.atomInlineField), - atomField: q => parsimmon_umd_min.exports.alt(q.negatedField, q.linkField, q.listField, q.objectField, q.lambdaField, q.parensField, q.boolField, q.numberField, q.stringField, q.dateField, q.durationField, q.nullField, q.variableField), - indexField: q => parsimmon_umd_min.exports.seqMap(q.atomField, parsimmon_umd_min.exports.alt(q.dotPostfix, q.indexPostfix, q.functionPostfix).many(), (obj, postfixes) => { - let result = obj; - for (let post of postfixes) { - switch (post.type) { - case "dot": - case "index": - result = Fields.index(result, post.field); - break; - case "function": - result = Fields.func(result, post.fields); - break; - } - } - return result; - }), - negatedField: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("!"), q.indexField, (_, field) => Fields.negate(field)).desc("negated field"), - parensField: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("("), parsimmon_umd_min.exports.optWhitespace, q.field, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (_1, _2, field, _3, _4) => field), - lambdaField: q => parsimmon_umd_min.exports.seqMap(q.identifier - .sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)) - .wrap(parsimmon_umd_min.exports.string("(").trim(parsimmon_umd_min.exports.optWhitespace), parsimmon_umd_min.exports.string(")").trim(parsimmon_umd_min.exports.optWhitespace)), parsimmon_umd_min.exports.string("=>").trim(parsimmon_umd_min.exports.optWhitespace), q.field, (ident, _ignore, value) => { - return { type: "lambda", arguments: ident, value }; - }), - dotPostfix: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("."), q.identifier, (_, field) => { - return { type: "dot", field: Fields.literal(field) }; - }), - indexPostfix: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("["), parsimmon_umd_min.exports.optWhitespace, q.field, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string("]"), (_, _2, field, _3, _4) => { - return { type: "index", field }; - }), - functionPostfix: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("("), parsimmon_umd_min.exports.optWhitespace, q.field.sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)), parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (_, _1, fields, _2, _3) => { - return { type: "function", fields }; - }), - // The precedence hierarchy of operators - multiply/divide, add/subtract, compare, and then boolean operations. - binaryMulDivField: q => createBinaryParser(q.indexField, q.binaryMulDiv, Fields.binaryOp), - binaryPlusMinusField: q => createBinaryParser(q.binaryMulDivField, q.binaryPlusMinus, Fields.binaryOp), - binaryCompareField: q => createBinaryParser(q.binaryPlusMinusField, q.binaryCompareOp, Fields.binaryOp), - binaryBooleanField: q => createBinaryParser(q.binaryCompareField, q.binaryBooleanOp, Fields.binaryOp), - binaryOpField: q => q.binaryBooleanField, - field: q => q.binaryOpField, -}); -/** - * Attempt to parse a field from the given text, returning a string error if the - * parse failed. - */ -function parseField(text) { - try { - return Result.success(EXPRESSION.field.tryParse(text)); - } - catch (error) { - return Result.failure("" + error); - } -} - -/** Parse inline fields and other embedded metadata in a line. */ -/** The wrapper characters that can be used to define an inline field. */ -const INLINE_FIELD_WRAPPERS = Object.freeze({ - "[": "]", - "(": ")", -}); -/** - * Find a matching closing bracket that occurs at or after `start`, respecting nesting and escapes. If found, - * returns the value contained within and the string index after the end of the value. - */ -function findClosing(line, start, open, close) { - let nesting = 0; - let escaped = false; - for (let index = start; index < line.length; index++) { - let char = line.charAt(index); - // Allows for double escapes like '\\' to be rendered normally. - if (char == "\\") { - escaped = !escaped; - continue; - } - if (escaped) { - escaped = false; - continue; - } - if (char == open) - nesting++; - else if (char == close) - nesting--; - // Only occurs if we are on a close character and trhere is no more nesting. - if (nesting < 0) - return { value: line.substring(start, index).trim(), endIndex: index + 1 }; - escaped = false; - } - return undefined; -} -/** Find the '::' separator in an inline field. */ -function findSeparator(line, start) { - let sep = line.indexOf("::", start); - let key = line.substring(start, sep); - // Fail the match if we find any separator characters (not allowed in keys). - for (let sep of Object.keys(INLINE_FIELD_WRAPPERS).concat(Object.values(INLINE_FIELD_WRAPPERS))) { - if (key.includes(sep)) - return undefined; - } - return { key: key.trim(), valueIndex: sep + 2 }; -} -/** Try to completely parse an inline field starting at the given position. Assuems `start` is on a wrapping character. */ -function findSpecificInlineField(line, start) { - let open = line.charAt(start); - let key = findSeparator(line, start + 1); - if (key === undefined) - return undefined; - let value = findClosing(line, key.valueIndex, open, INLINE_FIELD_WRAPPERS[open]); - if (value === undefined) - return undefined; - return { - key: key.key, - value: value.value, - start: start, - startValue: key.valueIndex, - end: value.endIndex, - wrapping: open, - }; -} -/** Parse a textual inline field value into something we can work with. */ -function parseInlineValue(value) { - // The stripped literal field parser understands all of the non-array/non-object fields and can parse them for us. - // Inline field objects are not currently supported; inline array objects have to be handled by the parser - // separately. - let inline = EXPRESSION.inlineField.parse(value); - if (inline.status) - return inline.value; - else - return value; -} -/** Extracts inline fields of the form '[key:: value]' from a line of text. This is done in a relatively - * "robust" way to avoid failing due to bad nesting or other interfering Markdown symbols: - * - * - Look for any wrappers ('[' and '(') in the line, trying to parse whatever comes after it as an inline key::. - * - If successful, scan until you find a matching end bracket, and parse whatever remains as an inline value. - */ -function extractInlineFields(line) { - let fields = []; - for (let wrapper of Object.keys(INLINE_FIELD_WRAPPERS)) { - let foundIndex = line.indexOf(wrapper); - while (foundIndex >= 0) { - let parsedField = findSpecificInlineField(line, foundIndex); - if (!parsedField) { - foundIndex = line.indexOf(wrapper, foundIndex + 1); - continue; - } - fields.push(parsedField); - foundIndex = line.indexOf(wrapper, parsedField.end); - } - } - fields.sort((a, b) => a.start - b.start); - return fields; -} -/** Sets or replaces the value of an inline field; if the value is 'undefined', deletes the key. */ -function setInlineField(source, key, value) { - let existing = extractInlineFields(source); - let existingKeys = existing.filter(f => f.key == key); - // Don't do anything if there are duplicate keys OR the key already doesn't exist. - if (existingKeys.length > 2 || (existingKeys.length == 0 && !value)) - return source; - let existingKey = existingKeys[0]; - let annotation = value ? `[${key}:: ${value}]` : ""; - if (existingKey) { - let prefix = source.substring(0, existingKey.start); - let suffix = source.substring(existingKey.end); - if (annotation) - return `${prefix}${annotation}${suffix}`; - else - return `${prefix}${suffix.trimStart()}`; - } - else if (annotation) { - return `${source.trimEnd()} ${annotation}`; - } - return source; -} - -/** All extracted markdown file metadata obtained from a file. */ -class PageMetadata { - constructor(path, init) { - this.path = path; - this.fields = new Map(); - this.tags = new Set(); - this.aliases = new Set(); - this.links = []; - this.tasks = []; - Object.assign(this, init); - } - /** Parse all subtags out of the given tag. I.e., #hello/i/am would yield [#hello/i/am, #hello/i, #hello]. */ - static parseSubtags(tag) { - let result = [tag]; - while (tag.includes("/")) { - tag = tag.substring(0, tag.lastIndexOf("/")); - result.push(tag); - } - return result; - } - /** The name (based on path) of this file. */ - name() { - return getFileTitle(this.path); - } - /** The containing folder (based on path) of this file. */ - folder() { - return getParentFolder(this.path); - } - /** The extension of this file (likely 'md'). */ - extension() { - return getExtension(this.path); - } - /** Return a set of tags AND all of their parent tags (so #hello/yes would become #hello, #hello/yes). */ - fullTags() { - // TODO: Memoize this, probably. - let result = new Set(); - for (let tag of this.tags) { - for (let subtag of PageMetadata.parseSubtags(tag)) - result.add(subtag); - } - return result; - } - /** Convert all links in this file to file links. */ - fileLinks() { - return this.links.map(link => Link.file(link.path)); - } - /** Map this metadata to a full object; uses the index for additional data lookups. */ - toObject(index) { - // Static fields first. Note this object should not have any pointers to the original object (so that the - // index cannot accidentally be mutated). - let result = { - file: { - path: this.path, - folder: this.folder(), - name: this.name(), - link: Link.file(this.path), - outlinks: this.fileLinks(), - inlinks: Array.from(index.links.getInverse(this.path)).map(l => Link.file(l, false)), - etags: Array.from(this.tags), - tags: Array.from(this.fullTags()), - aliases: Array.from(this.aliases), - tasks: this.tasks.map(t => t.toObject()), - ctime: this.ctime, - cday: stripTime(this.ctime), - mtime: this.mtime, - mday: stripTime(this.mtime), - size: this.size, - ext: this.extension(), - }, - }; - // Add the current day if present. - if (this.day) - result.file.day = this.day; - // Then append the computed fields. - for (let [key, value] of this.fields) { - if (key === "file") - continue; // Don't allow fields to override 'file'. - result[key] = value; - } - return result; - } -} - -/** Importer for markdown documents. */ -/** Attempt to find a date associated with the given page from metadata or filenames. */ -function findDate(file, fields) { - var _a, _b; - for (let key of fields.keys()) { - if (!(key.toLocaleLowerCase() == "date" || key.toLocaleLowerCase() == "day")) - continue; - let value = fields.get(key); - if (Values.isDate(value)) - return value; - else if (Values.isLink(value)) { - let date = extractDate(value.path); - if (date) - return date; - date = extractDate((_a = value.subpath) !== null && _a !== void 0 ? _a : ""); - if (date) - return date; - date = extractDate((_b = value.display) !== null && _b !== void 0 ? _b : ""); - if (date) - return date; - } - } - return extractDate(getFileTitle(file)); -} -/** Recursively convert frontmatter into fields. We have to dance around YAML structure. */ -function parseFrontmatter(value) { - if (value == null) { - return null; - } - else if (typeof value === "object") { - if (Array.isArray(value)) { - let result = []; - for (let child of value) { - result.push(parseFrontmatter(child)); - } - return result; - } - else { - let object = value; - let result = {}; - for (let key in object) { - result[key] = parseFrontmatter(object[key]); - } - return result; - } - } - else if (typeof value === "number") { - return value; - } - else if (typeof value === "boolean") { - return value; - } - else if (typeof value === "string") { - let dateParse = EXPRESSION.date.parse(value); - if (dateParse.status) - return dateParse.value; - let durationParse = EXPRESSION.duration.parse(value); - if (durationParse.status) - return durationParse.value; - let linkParse = EXPRESSION.embedLink.parse(value); - if (linkParse.status) - return linkParse.value; - return value; - } - // Backup if we don't understand the type. - return null; -} -/** Add an inline field to a nexisting field array, converting a single value into an array if it is present multiple times. */ -function addInlineField(fields, name, value) { - if (fields.has(name)) { - let existing = fields.get(name); - if (Values.isArray(existing)) - fields.set(name, existing.concat([value])); - else - fields.set(name, [existing, value]); - } - else { - fields.set(name, value); - } -} -/** Matches lines of the form "- [ ] ". */ -const TASK_REGEX = /^(\s*)[-*]\s*(\[[ Xx\.]?\])?\s*([^-*].*)$/iu; -/** Extract markdown metadata from the given Obsidian markdown file. */ -function parsePage(file, cache, markdownData) { - var _a; - let tags = new Set(); - let aliases = new Set(); - let fields = new Map(); - // Pull out the easy-to-extract information from the cache first... - let fileCache = cache.getFileCache(file); - if (fileCache) { - // File tags, including front-matter and in-file tags. - (_a = obsidian.getAllTags(fileCache)) === null || _a === void 0 ? void 0 : _a.forEach(t => tags.add(t)); - // Front-matter file tags, aliases, AND frontmatter properties. - if (fileCache.frontmatter) { - let frontTags = obsidian.parseFrontMatterTags(fileCache.frontmatter); - if (frontTags) { - for (let tag of frontTags) { - if (!tag.startsWith("#")) - tag = "#" + tag; - tags.add(tag); - } - } - let frontAliases = obsidian.parseFrontMatterAliases(fileCache.frontmatter); - if (frontAliases) { - for (let alias of frontAliases) - aliases.add(alias); - } - let frontFields = parseFrontmatter(fileCache.frontmatter); - for (let [key, value] of Object.entries(frontFields)) - fields.set(key, value); - } - } - // Grab links from the frontmatter cache. - let links = []; - if (file.path in cache.resolvedLinks) { - for (let resolved in cache.resolvedLinks[file.path]) - links.push(Link.file(resolved)); - } - // Merge frontmatter fields with parsed fields. - for (let [name, values] of markdownData.fields.entries()) { - for (let value of values) - addInlineField(fields, name, value); - } - // Add task defaults; this should probably be done in the task parsing directly - // once the parser has access to the common file metadata. - let pageCtime = DateTime_1.fromMillis(file.stat.ctime); - let fixedTasks = markdownData.tasks.map(t => t.withDefaultDates(pageCtime, undefined)); - return new PageMetadata(file.path, { - fields, - tags, - aliases, - links, - tasks: fixedTasks, - ctime: pageCtime, - mtime: DateTime_1.fromMillis(file.stat.mtime), - size: file.stat.size, - day: findDate(file.path, fields), - }); -} - -var papaparse_min = {exports: {}}; - -/* @license -Papa Parse -v5.3.1 -https://github.com/mholt/PapaParse -License: MIT -*/ - -(function (module, exports) { -!function(e,t){module.exports=t();}(commonjsGlobal,function s(){var f="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=n&&/blob:/i.test((f.location||{}).protocol),a={},h=0,b={parse:function(e,t){var i=(t=t||{}).dynamicTyping||!1;M(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!M(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var r=function(){if(!b.WORKERS_SUPPORTED)return !1;var e=(i=f.URL||f.webkitURL||null,r=s.toString(),b.BLOB_URL||(b.BLOB_URL=i.createObjectURL(new Blob(["(",r,")();"],{type:"text/javascript"})))),t=new f.Worker(e);var i,r;return t.onmessage=_,t.id=h++,a[t.id]=t}();return r.userStep=t.step,r.userChunk=t.chunk,r.userComplete=t.complete,r.userError=t.error,t.step=M(t.step),t.chunk=M(t.chunk),t.complete=M(t.complete),t.error=M(t.error),delete t.worker,void r.postMessage({input:e,config:t,workerId:r.id})}var n=null;b.NODE_STREAM_INPUT,"string"==typeof e?n=t.download?new l(t):new p(t):!0===e.readable&&M(e.read)&&M(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,_=!0,m=",",y="\r\n",s='"',a=s+s,i=!1,r=null,o=!1;!function(){if("object"!=typeof t)return;"string"!=typeof t.delimiter||b.BAD_DELIMITERS.filter(function(e){return -1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter);("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes);"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines);"string"==typeof t.newline&&(y=t.newline);"string"==typeof t.quoteChar&&(s=t.quoteChar);"boolean"==typeof t.header&&(_=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");r=t.columns;}void 0!==t.escapeChar&&(a=t.escapeChar+s);"boolean"==typeof t.escapeFormulae&&(o=t.escapeFormulae);}();var h=new RegExp(j(s),"g");"string"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return u(null,e,i);if("object"==typeof e[0])return u(r||Object.keys(e[0]),e,i)}else if("object"==typeof e)return "string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),u(e.fields||[],e.data||[],i);throw new Error("Unable to serialize unrecognized input");function u(e,t,i){var r="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0=this._config.preview;if(o)f.postMessage({results:n,workerId:b.WORKER_ID,finished:a});else if(M(this._config.chunk)&&!t){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);n=void 0,this._completeResults=void 0;}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!a||!M(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0;},this._sendError=function(e){M(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:b.WORKER_ID,error:e,finished:!1});};}function l(e){var r;(e=e||{}).chunkSize||(e.chunkSize=b.RemoteChunkSize),u.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded();}:function(){this._readChunk();},this.stream=function(e){this._input=e,this._nextChunk();},this._readChunk=function(){if(this._finished)this._chunkLoaded();else {if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),n||(r.onload=v(this._chunkLoaded,this),r.onerror=v(this._chunkError,this)),r.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)r.setRequestHeader(t,e[t]);}if(this._config.chunkSize){var i=this._start+this._config.chunkSize-1;r.setRequestHeader("Range","bytes="+this._start+"-"+i);}try{r.send(this._config.downloadRequestBody);}catch(e){this._chunkError(e.message);}n&&0===r.status&&this._chunkError();}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:r.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");if(null===t)return -1;return parseInt(t.substring(t.lastIndexOf("/")+1))}(r),this.parseChunk(r.responseText)));},this._chunkError=function(e){var t=r.statusText||e;this._sendError(new Error(t));};}function c(e){var r,n;(e=e||{}).chunkSize||(e.chunkSize=b.LocalChunkSize),u.call(this,e);var s="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,s?((r=new FileReader).onload=v(this._chunkLoaded,this),r.onerror=v(this._chunkError,this)):r=new FileReaderSync,this._nextChunk();},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result);},this._chunkError=function(){this._sendError(r.error);};}function p(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,t=this._config.chunkSize;return t?(e=i.substring(0,t),i=i.substring(t)):(e=i,i=""),this._finished=!i,this.parseChunk(e)}};}function g(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause();},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume();},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError);},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0);},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0;},this._streamData=v(function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()));}catch(e){this._streamError(e);}},this),this._streamError=v(function(e){this._streamCleanUp(),this._sendError(e);},this),this._streamEnd=v(function(){this._streamCleanUp(),r=!0,this._streamData("");},this),this._streamCleanUp=v(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError);},this);}function i(m){var a,o,h,r=Math.pow(2,53),n=-r,s=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,u=/^(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))$/,t=this,i=0,f=0,d=!1,e=!1,l=[],c={data:[],errors:[],meta:{}};if(M(m.step)){var p=m.step;m.step=function(e){if(c=e,_())g();else {if(g(),0===c.data.length)return;i+=e.data.length,m.preview&&i>m.preview?o.abort():(c.data=c.data[0],p(c,t));}};}function y(e){return "greedy"===m.skipEmptyLines?""===e.join("").trim():1===e.length&&0===e[0].length}function g(){if(c&&h&&(k("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+b.DefaultDelimiter+"'"),h=!1),m.skipEmptyLines)for(var e=0;e=l.length?"__parsed_extra":l[i]),m.transform&&(s=m.transform(s,n)),s=v(n,s),"__parsed_extra"===n?(r[n]=r[n]||[],r[n].push(s)):r[n]=s;}return m.header&&(i>l.length?k("FieldMismatch","TooManyFields","Too many fields: expected "+l.length+" fields but parsed "+i,f+t):i=r.length/2?"\r\n":"\r"}(e,r)),h=!1,m.delimiter)M(m.delimiter)&&(m.delimiter=m.delimiter(e),c.meta.delimiter=m.delimiter);else {var n=function(e,t,i,r,n){var s,a,o,h;n=n||[",","\t","|",";",b.RECORD_SEP,b.UNIT_SEP];for(var u=0;u=D)return C(!0)}else for(m=F,F++;;){if(-1===(m=r.indexOf(S,m+1)))return i||u.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:h.length,index:F}),E();if(m===n-1)return E(r.substring(F,m).replace(_,S));if(S!==L||r[m+1]!==L){if(S===L||0===m||r[m-1]!==L){-1!==p&&p=D)return C(!0);break}u.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:h.length,index:F}),m++;}}else m++;}return E();function k(e){h.push(e),d=F;}function b(e){var t=0;if(-1!==e){var i=r.substring(m+1,e);i&&""===i.trim()&&(t=i.length);}return t}function E(e){return i||(void 0===e&&(e=r.substring(F)),f.push(e),F=n,k(f),o&&R()),C()}function w(e){F=e,k(f),f=[],g=r.indexOf(x,F);}function C(e){return {data:h,errors:u,meta:{delimiter:O,linebreak:x,aborted:z,truncated:!!e,cursor:d+(t||0)}}}function R(){T(C()),h=[],u=[];}},this.abort=function(){z=!0;},this.getCharIndex=function(){return F};}function _(e){var t=e.data,i=a[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,m(t.workerId,{data:[],errors:[],meta:{aborted:!0}});},pause:y,resume:y};if(M(i.userStep)){for(var s=0;s transferable(v)); - case "object": - let result = {}; - for (let [key, value] of Object.entries(wrapped.value)) - result[key] = transferable(value); - return result; - case "link": - return { "___transfer-type": "link", value: transferable(wrapped.value.toObject()) }; - case "task": - return { "___transfer-type": "task", value: transferable(wrapped.value.toObject(false)) }; - default: - throw Error("Unrecognized transferable literal value: " + value); - } - } - Transferable.transferable = transferable; - /** Convert a transferable value back to a literal value we can work with. */ - function value(transferable) { - if (transferable === null) { - return null; - } - else if (transferable === undefined) { - return undefined; - } - else if (transferable instanceof Map) { - let real = new Map(); - for (let [key, val] of transferable.entries()) - real.set(value(key), value(val)); - return real; - } - else if (transferable instanceof Set) { - let real = new Set(); - for (let val of transferable) - real.add(value(val)); - return real; - } - else if (Array.isArray(transferable)) { - return transferable.map(v => value(v)); - } - else if (typeof transferable === "object") { - if ("___transfer-type" in transferable) { - switch (transferable["___transfer-type"]) { - case "date": - let rawDate = DateTime_1.fromObject(value(transferable.value)); - let dateOpts = value(transferable.options); - if (dateOpts.zone) - rawDate.setZone(dateOpts.zone); - return rawDate; - case "duration": - return Duration_1.fromObject(value(transferable.value)); - case "link": - return Link.fromObject(value(transferable.value)); - case "task": - return Task.fromObject(value(transferable.value)); - default: - throw Error(`Unrecognized transfer type '${transferable["___transfer-type"]}'`); - } - } - let result = {}; - for (let [key, val] of Object.entries(transferable)) - result[key] = value(val); - return result; - } - return transferable; - } - Transferable.value = value; -})(Transferable || (Transferable = {})); - -function decodeBase64(base64, enableUnicode) { - var binaryString = atob(base64); - if (enableUnicode) { - var binaryView = new Uint8Array(binaryString.length); - for (var i = 0, n = binaryString.length; i < n; ++i) { - binaryView[i] = binaryString.charCodeAt(i); - } - return String.fromCharCode.apply(null, new Uint16Array(binaryView.buffer)); - } - return binaryString; -} - -function createURL(base64, sourcemapArg, enableUnicodeArg) { - var sourcemap = sourcemapArg === undefined ? null : sourcemapArg; - var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg; - var source = decodeBase64(base64, enableUnicode); - var start = source.indexOf('\n', 10) + 1; - var body = source.substring(start) + (sourcemap ? '\/\/# sourceMappingURL=' + sourcemap : ''); - var blob = new Blob([body], { type: 'application/javascript' }); - return URL.createObjectURL(blob); -} - -function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) { - var url; - return function WorkerFactory(options) { - url = url || createURL(base64, sourcemapArg, enableUnicodeArg); - return new Worker(url, options); - }; -} - -var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewoJJ3VzZSBzdHJpY3QnOwoKCXZhciBjb21tb25qc0dsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHt9OwoKCXZhciBsdXhvbiA9IHt9OwoKCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsdXhvbiwgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pOwoKCWZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsKCSAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgewoJICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07CgkgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOwoJICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsKCSAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsKCSAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7CgkgIH0KCX0KCglmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7CgkgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOwoJICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7CgkgIHJldHVybiBDb25zdHJ1Y3RvcjsKCX0KCglmdW5jdGlvbiBfZXh0ZW5kcygpIHsKCSAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsKCSAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewoJICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsKCgkgICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7CgkgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7CgkgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsKCSAgICAgICAgfQoJICAgICAgfQoJICAgIH0KCgkgICAgcmV0dXJuIHRhcmdldDsKCSAgfTsKCgkgIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoJfQoKCWZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7CgkgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOwoJICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsKCgkgIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7Cgl9CgoJZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsKCSAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsKCSAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOwoJICB9OwoJICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOwoJfQoKCWZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7CgkgIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgewoJICAgIG8uX19wcm90b19fID0gcDsKCSAgICByZXR1cm4gbzsKCSAgfTsKCgkgIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7Cgl9CgoJZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHsKCSAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAidW5kZWZpbmVkIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsKCSAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsKCSAgaWYgKHR5cGVvZiBQcm94eSA9PT0gImZ1bmN0aW9uIikgcmV0dXJuIHRydWU7CgoJICB0cnkgewoJICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsKCSAgICByZXR1cm4gdHJ1ZTsKCSAgfSBjYXRjaCAoZSkgewoJICAgIHJldHVybiBmYWxzZTsKCSAgfQoJfQoKCWZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykgewoJICBpZiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7CgkgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0OwoJICB9IGVsc2UgewoJICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHsKCSAgICAgIHZhciBhID0gW251bGxdOwoJICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpOwoJICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpOwoJICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7CgkgICAgICBpZiAoQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTsKCSAgICAgIHJldHVybiBpbnN0YW5jZTsKCSAgICB9OwoJICB9CgoJICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpOwoJfQoKCWZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKGZuKSB7CgkgIHJldHVybiBGdW5jdGlvbi50b1N0cmluZy5jYWxsKGZuKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIikgIT09IC0xOwoJfQoKCWZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHsKCSAgdmFyIF9jYWNoZSA9IHR5cGVvZiBNYXAgPT09ICJmdW5jdGlvbiIgPyBuZXcgTWFwKCkgOiB1bmRlZmluZWQ7CgoJICBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykgewoJICAgIGlmIChDbGFzcyA9PT0gbnVsbCB8fCAhX2lzTmF0aXZlRnVuY3Rpb24oQ2xhc3MpKSByZXR1cm4gQ2xhc3M7CgoJICAgIGlmICh0eXBlb2YgQ2xhc3MgIT09ICJmdW5jdGlvbiIpIHsKCSAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7CgkgICAgfQoKCSAgICBpZiAodHlwZW9mIF9jYWNoZSAhPT0gInVuZGVmaW5lZCIpIHsKCSAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpOwoKCSAgICAgIF9jYWNoZS5zZXQoQ2xhc3MsIFdyYXBwZXIpOwoJICAgIH0KCgkgICAgZnVuY3Rpb24gV3JhcHBlcigpIHsKCSAgICAgIHJldHVybiBfY29uc3RydWN0KENsYXNzLCBhcmd1bWVudHMsIF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7CgkgICAgfQoKCSAgICBXcmFwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xhc3MucHJvdG90eXBlLCB7CgkgICAgICBjb25zdHJ1Y3RvcjogewoJICAgICAgICB2YWx1ZTogV3JhcHBlciwKCSAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCgkgICAgICAgIHdyaXRhYmxlOiB0cnVlLAoJICAgICAgICBjb25maWd1cmFibGU6IHRydWUKCSAgICAgIH0KCSAgICB9KTsKCSAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTsKCSAgfTsKCgkgIHJldHVybiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKTsKCX0KCglmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7CgkgIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OwoJICB2YXIgdGFyZ2V0ID0ge307CgkgIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsKCSAgdmFyIGtleSwgaTsKCgkgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7CgkgICAga2V5ID0gc291cmNlS2V5c1tpXTsKCSAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOwoJICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07CgkgIH0KCgkgIHJldHVybiB0YXJnZXQ7Cgl9CgoJZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgewoJICBpZiAoIW8pIHJldHVybjsKCSAgaWYgKHR5cGVvZiBvID09PSAic3RyaW5nIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7CgkgIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsKCSAgaWYgKG4gPT09ICJPYmplY3QiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7CgkgIGlmIChuID09PSAiTWFwIiB8fCBuID09PSAiU2V0IikgcmV0dXJuIEFycmF5LmZyb20obyk7CgkgIGlmIChuID09PSAiQXJndW1lbnRzIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7Cgl9CgoJZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsKCSAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7CgoJICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07CgoJICByZXR1cm4gYXJyMjsKCX0KCglmdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKG8sIGFsbG93QXJyYXlMaWtlKSB7CgkgIHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09ICJ1bmRlZmluZWQiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSB8fCBvWyJAQGl0ZXJhdG9yIl07CgkgIGlmIChpdCkgcmV0dXJuIChpdCA9IGl0LmNhbGwobykpLm5leHQuYmluZChpdCk7CgoJICBpZiAoQXJyYXkuaXNBcnJheShvKSB8fCAoaXQgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobykpIHx8IGFsbG93QXJyYXlMaWtlICYmIG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSAibnVtYmVyIikgewoJICAgIGlmIChpdCkgbyA9IGl0OwoJICAgIHZhciBpID0gMDsKCSAgICByZXR1cm4gZnVuY3Rpb24gKCkgewoJICAgICAgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7CgkgICAgICAgIGRvbmU6IHRydWUKCSAgICAgIH07CgkgICAgICByZXR1cm4gewoJICAgICAgICBkb25lOiBmYWxzZSwKCSAgICAgICAgdmFsdWU6IG9baSsrXQoJICAgICAgfTsKCSAgICB9OwoJICB9CgoJICB0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIik7Cgl9CgoJLy8gdGhlc2UgYXJlbid0IHJlYWxseSBwcml2YXRlLCBidXQgbm9yIGFyZSB0aGV5IHJlYWxseSB1c2VmdWwgdG8gZG9jdW1lbnQKCgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCXZhciBMdXhvbkVycm9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfRXJyb3IpIHsKCSAgX2luaGVyaXRzTG9vc2UoTHV4b25FcnJvciwgX0Vycm9yKTsKCgkgIGZ1bmN0aW9uIEx1eG9uRXJyb3IoKSB7CgkgICAgcmV0dXJuIF9FcnJvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CgkgIH0KCgkgIHJldHVybiBMdXhvbkVycm9yOwoJfSggLyojX19QVVJFX18qL193cmFwTmF0aXZlU3VwZXIoRXJyb3IpKTsKCS8qKgoJICogQHByaXZhdGUKCSAqLwoKCgl2YXIgSW52YWxpZERhdGVUaW1lRXJyb3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9MdXhvbkVycm9yKSB7CgkgIF9pbmhlcml0c0xvb3NlKEludmFsaWREYXRlVGltZUVycm9yLCBfTHV4b25FcnJvcik7CgoJICBmdW5jdGlvbiBJbnZhbGlkRGF0ZVRpbWVFcnJvcihyZWFzb24pIHsKCSAgICByZXR1cm4gX0x1eG9uRXJyb3IuY2FsbCh0aGlzLCAiSW52YWxpZCBEYXRlVGltZTogIiArIHJlYXNvbi50b01lc3NhZ2UoKSkgfHwgdGhpczsKCSAgfQoKCSAgcmV0dXJuIEludmFsaWREYXRlVGltZUVycm9yOwoJfShMdXhvbkVycm9yKTsKCS8qKgoJICogQHByaXZhdGUKCSAqLwoKCXZhciBJbnZhbGlkSW50ZXJ2YWxFcnJvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0x1eG9uRXJyb3IyKSB7CgkgIF9pbmhlcml0c0xvb3NlKEludmFsaWRJbnRlcnZhbEVycm9yLCBfTHV4b25FcnJvcjIpOwoKCSAgZnVuY3Rpb24gSW52YWxpZEludGVydmFsRXJyb3IocmVhc29uKSB7CgkgICAgcmV0dXJuIF9MdXhvbkVycm9yMi5jYWxsKHRoaXMsICJJbnZhbGlkIEludGVydmFsOiAiICsgcmVhc29uLnRvTWVzc2FnZSgpKSB8fCB0aGlzOwoJICB9CgoJICByZXR1cm4gSW52YWxpZEludGVydmFsRXJyb3I7Cgl9KEx1eG9uRXJyb3IpOwoJLyoqCgkgKiBAcHJpdmF0ZQoJICovCgoJdmFyIEludmFsaWREdXJhdGlvbkVycm9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfTHV4b25FcnJvcjMpIHsKCSAgX2luaGVyaXRzTG9vc2UoSW52YWxpZER1cmF0aW9uRXJyb3IsIF9MdXhvbkVycm9yMyk7CgoJICBmdW5jdGlvbiBJbnZhbGlkRHVyYXRpb25FcnJvcihyZWFzb24pIHsKCSAgICByZXR1cm4gX0x1eG9uRXJyb3IzLmNhbGwodGhpcywgIkludmFsaWQgRHVyYXRpb246ICIgKyByZWFzb24udG9NZXNzYWdlKCkpIHx8IHRoaXM7CgkgIH0KCgkgIHJldHVybiBJbnZhbGlkRHVyYXRpb25FcnJvcjsKCX0oTHV4b25FcnJvcik7CgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCgl2YXIgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9MdXhvbkVycm9yNCkgewoJICBfaW5oZXJpdHNMb29zZShDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciwgX0x1eG9uRXJyb3I0KTsKCgkgIGZ1bmN0aW9uIENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKCkgewoJICAgIHJldHVybiBfTHV4b25FcnJvcjQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwoJICB9CgoJICByZXR1cm4gQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3I7Cgl9KEx1eG9uRXJyb3IpOwoJLyoqCgkgKiBAcHJpdmF0ZQoJICovCgoJdmFyIEludmFsaWRVbml0RXJyb3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9MdXhvbkVycm9yNSkgewoJICBfaW5oZXJpdHNMb29zZShJbnZhbGlkVW5pdEVycm9yLCBfTHV4b25FcnJvcjUpOwoKCSAgZnVuY3Rpb24gSW52YWxpZFVuaXRFcnJvcih1bml0KSB7CgkgICAgcmV0dXJuIF9MdXhvbkVycm9yNS5jYWxsKHRoaXMsICJJbnZhbGlkIHVuaXQgIiArIHVuaXQpIHx8IHRoaXM7CgkgIH0KCgkgIHJldHVybiBJbnZhbGlkVW5pdEVycm9yOwoJfShMdXhvbkVycm9yKTsKCS8qKgoJICogQHByaXZhdGUKCSAqLwoKCXZhciBJbnZhbGlkQXJndW1lbnRFcnJvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0x1eG9uRXJyb3I2KSB7CgkgIF9pbmhlcml0c0xvb3NlKEludmFsaWRBcmd1bWVudEVycm9yLCBfTHV4b25FcnJvcjYpOwoKCSAgZnVuY3Rpb24gSW52YWxpZEFyZ3VtZW50RXJyb3IoKSB7CgkgICAgcmV0dXJuIF9MdXhvbkVycm9yNi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CgkgIH0KCgkgIHJldHVybiBJbnZhbGlkQXJndW1lbnRFcnJvcjsKCX0oTHV4b25FcnJvcik7CgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCgl2YXIgWm9uZUlzQWJzdHJhY3RFcnJvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0x1eG9uRXJyb3I3KSB7CgkgIF9pbmhlcml0c0xvb3NlKFpvbmVJc0Fic3RyYWN0RXJyb3IsIF9MdXhvbkVycm9yNyk7CgoJICBmdW5jdGlvbiBab25lSXNBYnN0cmFjdEVycm9yKCkgewoJICAgIHJldHVybiBfTHV4b25FcnJvcjcuY2FsbCh0aGlzLCAiWm9uZSBpcyBhbiBhYnN0cmFjdCBjbGFzcyIpIHx8IHRoaXM7CgkgIH0KCgkgIHJldHVybiBab25lSXNBYnN0cmFjdEVycm9yOwoJfShMdXhvbkVycm9yKTsKCgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCXZhciBuID0gIm51bWVyaWMiLAoJICAgIHMgPSAic2hvcnQiLAoJICAgIGwgPSAibG9uZyI7Cgl2YXIgREFURV9TSE9SVCA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IG4sCgkgIGRheTogbgoJfTsKCXZhciBEQVRFX01FRCA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IHMsCgkgIGRheTogbgoJfTsKCXZhciBEQVRFX01FRF9XSVRIX1dFRUtEQVkgPSB7CgkgIHllYXI6IG4sCgkgIG1vbnRoOiBzLAoJICBkYXk6IG4sCgkgIHdlZWtkYXk6IHMKCX07Cgl2YXIgREFURV9GVUxMID0gewoJICB5ZWFyOiBuLAoJICBtb250aDogbCwKCSAgZGF5OiBuCgl9OwoJdmFyIERBVEVfSFVHRSA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IGwsCgkgIGRheTogbiwKCSAgd2Vla2RheTogbAoJfTsKCXZhciBUSU1FX1NJTVBMRSA9IHsKCSAgaG91cjogbiwKCSAgbWludXRlOiBuCgl9OwoJdmFyIFRJTUVfV0lUSF9TRUNPTkRTID0gewoJICBob3VyOiBuLAoJICBtaW51dGU6IG4sCgkgIHNlY29uZDogbgoJfTsKCXZhciBUSU1FX1dJVEhfU0hPUlRfT0ZGU0VUID0gewoJICBob3VyOiBuLAoJICBtaW51dGU6IG4sCgkgIHNlY29uZDogbiwKCSAgdGltZVpvbmVOYW1lOiBzCgl9OwoJdmFyIFRJTUVfV0lUSF9MT05HX09GRlNFVCA9IHsKCSAgaG91cjogbiwKCSAgbWludXRlOiBuLAoJICBzZWNvbmQ6IG4sCgkgIHRpbWVab25lTmFtZTogbAoJfTsKCXZhciBUSU1FXzI0X1NJTVBMRSA9IHsKCSAgaG91cjogbiwKCSAgbWludXRlOiBuLAoJICBob3VyQ3ljbGU6ICJoMjMiCgl9OwoJdmFyIFRJTUVfMjRfV0lUSF9TRUNPTkRTID0gewoJICBob3VyOiBuLAoJICBtaW51dGU6IG4sCgkgIHNlY29uZDogbiwKCSAgaG91ckN5Y2xlOiAiaDIzIgoJfTsKCXZhciBUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUID0gewoJICBob3VyOiBuLAoJICBtaW51dGU6IG4sCgkgIHNlY29uZDogbiwKCSAgaG91ckN5Y2xlOiAiaDIzIiwKCSAgdGltZVpvbmVOYW1lOiBzCgl9OwoJdmFyIFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCA9IHsKCSAgaG91cjogbiwKCSAgbWludXRlOiBuLAoJICBzZWNvbmQ6IG4sCgkgIGhvdXJDeWNsZTogImgyMyIsCgkgIHRpbWVab25lTmFtZTogbAoJfTsKCXZhciBEQVRFVElNRV9TSE9SVCA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IG4sCgkgIGRheTogbiwKCSAgaG91cjogbiwKCSAgbWludXRlOiBuCgl9OwoJdmFyIERBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUyA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IG4sCgkgIGRheTogbiwKCSAgaG91cjogbiwKCSAgbWludXRlOiBuLAoJICBzZWNvbmQ6IG4KCX07Cgl2YXIgREFURVRJTUVfTUVEID0gewoJICB5ZWFyOiBuLAoJICBtb250aDogcywKCSAgZGF5OiBuLAoJICBob3VyOiBuLAoJICBtaW51dGU6IG4KCX07Cgl2YXIgREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUyA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IHMsCgkgIGRheTogbiwKCSAgaG91cjogbiwKCSAgbWludXRlOiBuLAoJICBzZWNvbmQ6IG4KCX07Cgl2YXIgREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWSA9IHsKCSAgeWVhcjogbiwKCSAgbW9udGg6IHMsCgkgIGRheTogbiwKCSAgd2Vla2RheTogcywKCSAgaG91cjogbiwKCSAgbWludXRlOiBuCgl9OwoJdmFyIERBVEVUSU1FX0ZVTEwgPSB7CgkgIHllYXI6IG4sCgkgIG1vbnRoOiBsLAoJICBkYXk6IG4sCgkgIGhvdXI6IG4sCgkgIG1pbnV0ZTogbiwKCSAgdGltZVpvbmVOYW1lOiBzCgl9OwoJdmFyIERBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTID0gewoJICB5ZWFyOiBuLAoJICBtb250aDogbCwKCSAgZGF5OiBuLAoJICBob3VyOiBuLAoJICBtaW51dGU6IG4sCgkgIHNlY29uZDogbiwKCSAgdGltZVpvbmVOYW1lOiBzCgl9OwoJdmFyIERBVEVUSU1FX0hVR0UgPSB7CgkgIHllYXI6IG4sCgkgIG1vbnRoOiBsLAoJICBkYXk6IG4sCgkgIHdlZWtkYXk6IGwsCgkgIGhvdXI6IG4sCgkgIG1pbnV0ZTogbiwKCSAgdGltZVpvbmVOYW1lOiBsCgl9OwoJdmFyIERBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTID0gewoJICB5ZWFyOiBuLAoJICBtb250aDogbCwKCSAgZGF5OiBuLAoJICB3ZWVrZGF5OiBsLAoJICBob3VyOiBuLAoJICBtaW51dGU6IG4sCgkgIHNlY29uZDogbiwKCSAgdGltZVpvbmVOYW1lOiBsCgl9OwoKCS8qKgoJICogQHByaXZhdGUKCSAqLwoJLy8gVFlQRVMKCglmdW5jdGlvbiBpc1VuZGVmaW5lZChvKSB7CgkgIHJldHVybiB0eXBlb2YgbyA9PT0gInVuZGVmaW5lZCI7Cgl9CglmdW5jdGlvbiBpc051bWJlcihvKSB7CgkgIHJldHVybiB0eXBlb2YgbyA9PT0gIm51bWJlciI7Cgl9CglmdW5jdGlvbiBpc0ludGVnZXIobykgewoJICByZXR1cm4gdHlwZW9mIG8gPT09ICJudW1iZXIiICYmIG8gJSAxID09PSAwOwoJfQoJZnVuY3Rpb24gaXNTdHJpbmcobykgewoJICByZXR1cm4gdHlwZW9mIG8gPT09ICJzdHJpbmciOwoJfQoJZnVuY3Rpb24gaXNEYXRlKG8pIHsKCSAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gIltvYmplY3QgRGF0ZV0iOwoJfSAvLyBDQVBBQklMSVRJRVMKCglmdW5jdGlvbiBoYXNSZWxhdGl2ZSgpIHsKCSAgdHJ5IHsKCSAgICByZXR1cm4gdHlwZW9mIEludGwgIT09ICJ1bmRlZmluZWQiICYmICEhSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQ7CgkgIH0gY2F0Y2ggKGUpIHsKCSAgICByZXR1cm4gZmFsc2U7CgkgIH0KCX0gLy8gT0JKRUNUUyBBTkQgQVJSQVlTCgoJZnVuY3Rpb24gbWF5YmVBcnJheSh0aGluZykgewoJICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGluZykgPyB0aGluZyA6IFt0aGluZ107Cgl9CglmdW5jdGlvbiBiZXN0QnkoYXJyLCBieSwgY29tcGFyZSkgewoJICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkgewoJICAgIHJldHVybiB1bmRlZmluZWQ7CgkgIH0KCgkgIHJldHVybiBhcnIucmVkdWNlKGZ1bmN0aW9uIChiZXN0LCBuZXh0KSB7CgkgICAgdmFyIHBhaXIgPSBbYnkobmV4dCksIG5leHRdOwoKCSAgICBpZiAoIWJlc3QpIHsKCSAgICAgIHJldHVybiBwYWlyOwoJICAgIH0gZWxzZSBpZiAoY29tcGFyZShiZXN0WzBdLCBwYWlyWzBdKSA9PT0gYmVzdFswXSkgewoJICAgICAgcmV0dXJuIGJlc3Q7CgkgICAgfSBlbHNlIHsKCSAgICAgIHJldHVybiBwYWlyOwoJICAgIH0KCSAgfSwgbnVsbClbMV07Cgl9CglmdW5jdGlvbiBwaWNrKG9iaiwga2V5cykgewoJICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGspIHsKCSAgICBhW2tdID0gb2JqW2tdOwoJICAgIHJldHVybiBhOwoJICB9LCB7fSk7Cgl9CglmdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHsKCSAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOwoJfSAvLyBOVU1CRVJTIEFORCBTVFJJTkdTCgoJZnVuY3Rpb24gaW50ZWdlckJldHdlZW4odGhpbmcsIGJvdHRvbSwgdG9wKSB7CgkgIHJldHVybiBpc0ludGVnZXIodGhpbmcpICYmIHRoaW5nID49IGJvdHRvbSAmJiB0aGluZyA8PSB0b3A7Cgl9IC8vIHggJSBuIGJ1dCB0YWtlcyB0aGUgc2lnbiBvZiBuIGluc3RlYWQgb2YgeAoKCWZ1bmN0aW9uIGZsb29yTW9kKHgsIG4pIHsKCSAgcmV0dXJuIHggLSBuICogTWF0aC5mbG9vcih4IC8gbik7Cgl9CglmdW5jdGlvbiBwYWRTdGFydChpbnB1dCwgbikgewoJICBpZiAobiA9PT0gdm9pZCAwKSB7CgkgICAgbiA9IDI7CgkgIH0KCgkgIHZhciBtaW51cyA9IGlucHV0IDwgMCA/ICItIiA6ICIiOwoJICB2YXIgdGFyZ2V0ID0gbWludXMgPyBpbnB1dCAqIC0xIDogaW5wdXQ7CgkgIHZhciByZXN1bHQ7CgoJICBpZiAodGFyZ2V0LnRvU3RyaW5nKCkubGVuZ3RoIDwgbikgewoJICAgIHJlc3VsdCA9ICgiMCIucmVwZWF0KG4pICsgdGFyZ2V0KS5zbGljZSgtbik7CgkgIH0gZWxzZSB7CgkgICAgcmVzdWx0ID0gdGFyZ2V0LnRvU3RyaW5nKCk7CgkgIH0KCgkgIHJldHVybiAiIiArIG1pbnVzICsgcmVzdWx0OwoJfQoJZnVuY3Rpb24gcGFyc2VJbnRlZ2VyKHN0cmluZykgewoJICBpZiAoaXNVbmRlZmluZWQoc3RyaW5nKSB8fCBzdHJpbmcgPT09IG51bGwgfHwgc3RyaW5nID09PSAiIikgewoJICAgIHJldHVybiB1bmRlZmluZWQ7CgkgIH0gZWxzZSB7CgkgICAgcmV0dXJuIHBhcnNlSW50KHN0cmluZywgMTApOwoJICB9Cgl9CglmdW5jdGlvbiBwYXJzZUZsb2F0aW5nKHN0cmluZykgewoJICBpZiAoaXNVbmRlZmluZWQoc3RyaW5nKSB8fCBzdHJpbmcgPT09IG51bGwgfHwgc3RyaW5nID09PSAiIikgewoJICAgIHJldHVybiB1bmRlZmluZWQ7CgkgIH0gZWxzZSB7CgkgICAgcmV0dXJuIHBhcnNlRmxvYXQoc3RyaW5nKTsKCSAgfQoJfQoJZnVuY3Rpb24gcGFyc2VNaWxsaXMoZnJhY3Rpb24pIHsKCSAgLy8gUmV0dXJuIHVuZGVmaW5lZCAoaW5zdGVhZCBvZiAwKSBpbiB0aGVzZSBjYXNlcywgd2hlcmUgZnJhY3Rpb24gaXMgbm90IHNldAoJICBpZiAoaXNVbmRlZmluZWQoZnJhY3Rpb24pIHx8IGZyYWN0aW9uID09PSBudWxsIHx8IGZyYWN0aW9uID09PSAiIikgewoJICAgIHJldHVybiB1bmRlZmluZWQ7CgkgIH0gZWxzZSB7CgkgICAgdmFyIGYgPSBwYXJzZUZsb2F0KCIwLiIgKyBmcmFjdGlvbikgKiAxMDAwOwoJICAgIHJldHVybiBNYXRoLmZsb29yKGYpOwoJICB9Cgl9CglmdW5jdGlvbiByb3VuZFRvKG51bWJlciwgZGlnaXRzLCB0b3dhcmRaZXJvKSB7CgkgIGlmICh0b3dhcmRaZXJvID09PSB2b2lkIDApIHsKCSAgICB0b3dhcmRaZXJvID0gZmFsc2U7CgkgIH0KCgkgIHZhciBmYWN0b3IgPSBNYXRoLnBvdygxMCwgZGlnaXRzKSwKCSAgICAgIHJvdW5kZXIgPSB0b3dhcmRaZXJvID8gTWF0aC50cnVuYyA6IE1hdGgucm91bmQ7CgkgIHJldHVybiByb3VuZGVyKG51bWJlciAqIGZhY3RvcikgLyBmYWN0b3I7Cgl9IC8vIERBVEUgQkFTSUNTCgoJZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7CgkgIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKTsKCX0KCWZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikgewoJICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTsKCX0KCWZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7CgkgIHZhciBtb2RNb250aCA9IGZsb29yTW9kKG1vbnRoIC0gMSwgMTIpICsgMSwKCSAgICAgIG1vZFllYXIgPSB5ZWFyICsgKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7CgoJICBpZiAobW9kTW9udGggPT09IDIpIHsKCSAgICByZXR1cm4gaXNMZWFwWWVhcihtb2RZZWFyKSA/IDI5IDogMjg7CgkgIH0gZWxzZSB7CgkgICAgcmV0dXJuIFszMSwgbnVsbCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdW21vZE1vbnRoIC0gMV07CgkgIH0KCX0gLy8gY292ZXJ0IGEgY2FsZW5kYXIgb2JqZWN0IHRvIGEgbG9jYWwgdGltZXN0YW1wIChlcG9jaCwgYnV0IHdpdGggdGhlIG9mZnNldCBiYWtlZCBpbikKCglmdW5jdGlvbiBvYmpUb0xvY2FsVFMob2JqKSB7CgkgIHZhciBkID0gRGF0ZS5VVEMob2JqLnllYXIsIG9iai5tb250aCAtIDEsIG9iai5kYXksIG9iai5ob3VyLCBvYmoubWludXRlLCBvYmouc2Vjb25kLCBvYmoubWlsbGlzZWNvbmQpOyAvLyBmb3IgbGVnYWN5IHJlYXNvbnMsIHllYXJzIGJldHdlZW4gMCBhbmQgOTkgYXJlIGludGVycHJldGVkIGFzIDE5WFg7IHJldmVydCB0aGF0CgoJICBpZiAob2JqLnllYXIgPCAxMDAgJiYgb2JqLnllYXIgPj0gMCkgewoJICAgIGQgPSBuZXcgRGF0ZShkKTsKCSAgICBkLnNldFVUQ0Z1bGxZZWFyKGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDApOwoJICB9CgoJICByZXR1cm4gK2Q7Cgl9CglmdW5jdGlvbiB3ZWVrc0luV2Vla1llYXIod2Vla1llYXIpIHsKCSAgdmFyIHAxID0gKHdlZWtZZWFyICsgTWF0aC5mbG9vcih3ZWVrWWVhciAvIDQpIC0gTWF0aC5mbG9vcih3ZWVrWWVhciAvIDEwMCkgKyBNYXRoLmZsb29yKHdlZWtZZWFyIC8gNDAwKSkgJSA3LAoJICAgICAgbGFzdCA9IHdlZWtZZWFyIC0gMSwKCSAgICAgIHAyID0gKGxhc3QgKyBNYXRoLmZsb29yKGxhc3QgLyA0KSAtIE1hdGguZmxvb3IobGFzdCAvIDEwMCkgKyBNYXRoLmZsb29yKGxhc3QgLyA0MDApKSAlIDc7CgkgIHJldHVybiBwMSA9PT0gNCB8fCBwMiA9PT0gMyA/IDUzIDogNTI7Cgl9CglmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyKSB7CgkgIGlmICh5ZWFyID4gOTkpIHsKCSAgICByZXR1cm4geWVhcjsKCSAgfSBlbHNlIHJldHVybiB5ZWFyID4gNjAgPyAxOTAwICsgeWVhciA6IDIwMDAgKyB5ZWFyOwoJfSAvLyBQQVJTSU5HCgoJZnVuY3Rpb24gcGFyc2Vab25lSW5mbyh0cywgb2Zmc2V0Rm9ybWF0LCBsb2NhbGUsIHRpbWVab25lKSB7CgkgIGlmICh0aW1lWm9uZSA9PT0gdm9pZCAwKSB7CgkgICAgdGltZVpvbmUgPSBudWxsOwoJICB9CgoJICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHRzKSwKCSAgICAgIGludGxPcHRzID0gewoJICAgIGhvdXJDeWNsZTogImgyMyIsCgkgICAgeWVhcjogIm51bWVyaWMiLAoJICAgIG1vbnRoOiAiMi1kaWdpdCIsCgkgICAgZGF5OiAiMi1kaWdpdCIsCgkgICAgaG91cjogIjItZGlnaXQiLAoJICAgIG1pbnV0ZTogIjItZGlnaXQiCgkgIH07CgoJICBpZiAodGltZVpvbmUpIHsKCSAgICBpbnRsT3B0cy50aW1lWm9uZSA9IHRpbWVab25lOwoJICB9CgoJICB2YXIgbW9kaWZpZWQgPSBfZXh0ZW5kcyh7CgkgICAgdGltZVpvbmVOYW1lOiBvZmZzZXRGb3JtYXQKCSAgfSwgaW50bE9wdHMpOwoKCSAgdmFyIHBhcnNlZCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgbW9kaWZpZWQpLmZvcm1hdFRvUGFydHMoZGF0ZSkuZmluZChmdW5jdGlvbiAobSkgewoJICAgIHJldHVybiBtLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gInRpbWV6b25lbmFtZSI7CgkgIH0pOwoJICByZXR1cm4gcGFyc2VkID8gcGFyc2VkLnZhbHVlIDogbnVsbDsKCX0gLy8gc2lnbmVkT2Zmc2V0KCctNScsICczMCcpIC0+IC0zMzAKCglmdW5jdGlvbiBzaWduZWRPZmZzZXQob2ZmSG91clN0ciwgb2ZmTWludXRlU3RyKSB7CgkgIHZhciBvZmZIb3VyID0gcGFyc2VJbnQob2ZmSG91clN0ciwgMTApOyAvLyBkb24ndCB8fCB0aGlzIGJlY2F1c2Ugd2Ugd2FudCB0byBwcmVzZXJ2ZSAtMAoKCSAgaWYgKE51bWJlci5pc05hTihvZmZIb3VyKSkgewoJICAgIG9mZkhvdXIgPSAwOwoJICB9CgoJICB2YXIgb2ZmTWluID0gcGFyc2VJbnQob2ZmTWludXRlU3RyLCAxMCkgfHwgMCwKCSAgICAgIG9mZk1pblNpZ25lZCA9IG9mZkhvdXIgPCAwIHx8IE9iamVjdC5pcyhvZmZIb3VyLCAtMCkgPyAtb2ZmTWluIDogb2ZmTWluOwoJICByZXR1cm4gb2ZmSG91ciAqIDYwICsgb2ZmTWluU2lnbmVkOwoJfSAvLyBDT0VSQ0lPTgoKCWZ1bmN0aW9uIGFzTnVtYmVyKHZhbHVlKSB7CgkgIHZhciBudW1lcmljVmFsdWUgPSBOdW1iZXIodmFsdWUpOwoJICBpZiAodHlwZW9mIHZhbHVlID09PSAiYm9vbGVhbiIgfHwgdmFsdWUgPT09ICIiIHx8IE51bWJlci5pc05hTihudW1lcmljVmFsdWUpKSB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoIkludmFsaWQgdW5pdCB2YWx1ZSAiICsgdmFsdWUpOwoJICByZXR1cm4gbnVtZXJpY1ZhbHVlOwoJfQoJZnVuY3Rpb24gbm9ybWFsaXplT2JqZWN0KG9iaiwgbm9ybWFsaXplcikgewoJICB2YXIgbm9ybWFsaXplZCA9IHt9OwoKCSAgZm9yICh2YXIgdSBpbiBvYmopIHsKCSAgICBpZiAoaGFzT3duUHJvcGVydHkob2JqLCB1KSkgewoJICAgICAgdmFyIHYgPSBvYmpbdV07CgkgICAgICBpZiAodiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwpIGNvbnRpbnVlOwoJICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVyKHUpXSA9IGFzTnVtYmVyKHYpOwoJICAgIH0KCSAgfQoKCSAgcmV0dXJuIG5vcm1hbGl6ZWQ7Cgl9CglmdW5jdGlvbiBmb3JtYXRPZmZzZXQob2Zmc2V0LCBmb3JtYXQpIHsKCSAgdmFyIGhvdXJzID0gTWF0aC50cnVuYyhNYXRoLmFicyhvZmZzZXQgLyA2MCkpLAoJICAgICAgbWludXRlcyA9IE1hdGgudHJ1bmMoTWF0aC5hYnMob2Zmc2V0ICUgNjApKSwKCSAgICAgIHNpZ24gPSBvZmZzZXQgPj0gMCA/ICIrIiA6ICItIjsKCgkgIHN3aXRjaCAoZm9ybWF0KSB7CgkgICAgY2FzZSAic2hvcnQiOgoJICAgICAgcmV0dXJuICIiICsgc2lnbiArIHBhZFN0YXJ0KGhvdXJzLCAyKSArICI6IiArIHBhZFN0YXJ0KG1pbnV0ZXMsIDIpOwoKCSAgICBjYXNlICJuYXJyb3ciOgoJICAgICAgcmV0dXJuICIiICsgc2lnbiArIGhvdXJzICsgKG1pbnV0ZXMgPiAwID8gIjoiICsgbWludXRlcyA6ICIiKTsKCgkgICAgY2FzZSAidGVjaGllIjoKCSAgICAgIHJldHVybiAiIiArIHNpZ24gKyBwYWRTdGFydChob3VycywgMikgKyBwYWRTdGFydChtaW51dGVzLCAyKTsKCgkgICAgZGVmYXVsdDoKCSAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJWYWx1ZSBmb3JtYXQgIiArIGZvcm1hdCArICIgaXMgb3V0IG9mIHJhbmdlIGZvciBwcm9wZXJ0eSBmb3JtYXQiKTsKCSAgfQoJfQoJZnVuY3Rpb24gdGltZU9iamVjdChvYmopIHsKCSAgcmV0dXJuIHBpY2sob2JqLCBbImhvdXIiLCAibWludXRlIiwgInNlY29uZCIsICJtaWxsaXNlY29uZCJdKTsKCX0KCXZhciBpYW5hUmVnZXggPSAvW0EtWmEtel8rLV17MSwyNTZ9KDo/XC9bQS1aYS16MC05XystXXsxLDI1Nn0oXC9bQS1aYS16MC05XystXXsxLDI1Nn0pPyk/LzsKCgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCgoJdmFyIG1vbnRoc0xvbmcgPSBbIkphbnVhcnkiLCAiRmVicnVhcnkiLCAiTWFyY2giLCAiQXByaWwiLCAiTWF5IiwgIkp1bmUiLCAiSnVseSIsICJBdWd1c3QiLCAiU2VwdGVtYmVyIiwgIk9jdG9iZXIiLCAiTm92ZW1iZXIiLCAiRGVjZW1iZXIiXTsKCXZhciBtb250aHNTaG9ydCA9IFsiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiXTsKCXZhciBtb250aHNOYXJyb3cgPSBbIkoiLCAiRiIsICJNIiwgIkEiLCAiTSIsICJKIiwgIkoiLCAiQSIsICJTIiwgIk8iLCAiTiIsICJEIl07CglmdW5jdGlvbiBtb250aHMobGVuZ3RoKSB7CgkgIHN3aXRjaCAobGVuZ3RoKSB7CgkgICAgY2FzZSAibmFycm93IjoKCSAgICAgIHJldHVybiBbXS5jb25jYXQobW9udGhzTmFycm93KTsKCgkgICAgY2FzZSAic2hvcnQiOgoJICAgICAgcmV0dXJuIFtdLmNvbmNhdChtb250aHNTaG9ydCk7CgoJICAgIGNhc2UgImxvbmciOgoJICAgICAgcmV0dXJuIFtdLmNvbmNhdChtb250aHNMb25nKTsKCgkgICAgY2FzZSAibnVtZXJpYyI6CgkgICAgICByZXR1cm4gWyIxIiwgIjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiwgIjgiLCAiOSIsICIxMCIsICIxMSIsICIxMiJdOwoKCSAgICBjYXNlICIyLWRpZ2l0IjoKCSAgICAgIHJldHVybiBbIjAxIiwgIjAyIiwgIjAzIiwgIjA0IiwgIjA1IiwgIjA2IiwgIjA3IiwgIjA4IiwgIjA5IiwgIjEwIiwgIjExIiwgIjEyIl07CgoJICAgIGRlZmF1bHQ6CgkgICAgICByZXR1cm4gbnVsbDsKCSAgfQoJfQoJdmFyIHdlZWtkYXlzTG9uZyA9IFsiTW9uZGF5IiwgIlR1ZXNkYXkiLCAiV2VkbmVzZGF5IiwgIlRodXJzZGF5IiwgIkZyaWRheSIsICJTYXR1cmRheSIsICJTdW5kYXkiXTsKCXZhciB3ZWVrZGF5c1Nob3J0ID0gWyJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4iXTsKCXZhciB3ZWVrZGF5c05hcnJvdyA9IFsiTSIsICJUIiwgIlciLCAiVCIsICJGIiwgIlMiLCAiUyJdOwoJZnVuY3Rpb24gd2Vla2RheXMobGVuZ3RoKSB7CgkgIHN3aXRjaCAobGVuZ3RoKSB7CgkgICAgY2FzZSAibmFycm93IjoKCSAgICAgIHJldHVybiBbXS5jb25jYXQod2Vla2RheXNOYXJyb3cpOwoKCSAgICBjYXNlICJzaG9ydCI6CgkgICAgICByZXR1cm4gW10uY29uY2F0KHdlZWtkYXlzU2hvcnQpOwoKCSAgICBjYXNlICJsb25nIjoKCSAgICAgIHJldHVybiBbXS5jb25jYXQod2Vla2RheXNMb25nKTsKCgkgICAgY2FzZSAibnVtZXJpYyI6CgkgICAgICByZXR1cm4gWyIxIiwgIjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3Il07CgoJICAgIGRlZmF1bHQ6CgkgICAgICByZXR1cm4gbnVsbDsKCSAgfQoJfQoJdmFyIG1lcmlkaWVtcyA9IFsiQU0iLCAiUE0iXTsKCXZhciBlcmFzTG9uZyA9IFsiQmVmb3JlIENocmlzdCIsICJBbm5vIERvbWluaSJdOwoJdmFyIGVyYXNTaG9ydCA9IFsiQkMiLCAiQUQiXTsKCXZhciBlcmFzTmFycm93ID0gWyJCIiwgIkEiXTsKCWZ1bmN0aW9uIGVyYXMobGVuZ3RoKSB7CgkgIHN3aXRjaCAobGVuZ3RoKSB7CgkgICAgY2FzZSAibmFycm93IjoKCSAgICAgIHJldHVybiBbXS5jb25jYXQoZXJhc05hcnJvdyk7CgoJICAgIGNhc2UgInNob3J0IjoKCSAgICAgIHJldHVybiBbXS5jb25jYXQoZXJhc1Nob3J0KTsKCgkgICAgY2FzZSAibG9uZyI6CgkgICAgICByZXR1cm4gW10uY29uY2F0KGVyYXNMb25nKTsKCgkgICAgZGVmYXVsdDoKCSAgICAgIHJldHVybiBudWxsOwoJICB9Cgl9CglmdW5jdGlvbiBtZXJpZGllbUZvckRhdGVUaW1lKGR0KSB7CgkgIHJldHVybiBtZXJpZGllbXNbZHQuaG91ciA8IDEyID8gMCA6IDFdOwoJfQoJZnVuY3Rpb24gd2Vla2RheUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIHsKCSAgcmV0dXJuIHdlZWtkYXlzKGxlbmd0aClbZHQud2Vla2RheSAtIDFdOwoJfQoJZnVuY3Rpb24gbW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSB7CgkgIHJldHVybiBtb250aHMobGVuZ3RoKVtkdC5tb250aCAtIDFdOwoJfQoJZnVuY3Rpb24gZXJhRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkgewoJICByZXR1cm4gZXJhcyhsZW5ndGgpW2R0LnllYXIgPCAwID8gMCA6IDFdOwoJfQoJZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmVUaW1lKHVuaXQsIGNvdW50LCBudW1lcmljLCBuYXJyb3cpIHsKCSAgaWYgKG51bWVyaWMgPT09IHZvaWQgMCkgewoJICAgIG51bWVyaWMgPSAiYWx3YXlzIjsKCSAgfQoKCSAgaWYgKG5hcnJvdyA9PT0gdm9pZCAwKSB7CgkgICAgbmFycm93ID0gZmFsc2U7CgkgIH0KCgkgIHZhciB1bml0cyA9IHsKCSAgICB5ZWFyczogWyJ5ZWFyIiwgInlyLiJdLAoJICAgIHF1YXJ0ZXJzOiBbInF1YXJ0ZXIiLCAicXRyLiJdLAoJICAgIG1vbnRoczogWyJtb250aCIsICJtby4iXSwKCSAgICB3ZWVrczogWyJ3ZWVrIiwgIndrLiJdLAoJICAgIGRheXM6IFsiZGF5IiwgImRheSIsICJkYXlzIl0sCgkgICAgaG91cnM6IFsiaG91ciIsICJoci4iXSwKCSAgICBtaW51dGVzOiBbIm1pbnV0ZSIsICJtaW4uIl0sCgkgICAgc2Vjb25kczogWyJzZWNvbmQiLCAic2VjLiJdCgkgIH07CgkgIHZhciBsYXN0YWJsZSA9IFsiaG91cnMiLCAibWludXRlcyIsICJzZWNvbmRzIl0uaW5kZXhPZih1bml0KSA9PT0gLTE7CgoJICBpZiAobnVtZXJpYyA9PT0gImF1dG8iICYmIGxhc3RhYmxlKSB7CgkgICAgdmFyIGlzRGF5ID0gdW5pdCA9PT0gImRheXMiOwoKCSAgICBzd2l0Y2ggKGNvdW50KSB7CgkgICAgICBjYXNlIDE6CgkgICAgICAgIHJldHVybiBpc0RheSA/ICJ0b21vcnJvdyIgOiAibmV4dCAiICsgdW5pdHNbdW5pdF1bMF07CgoJICAgICAgY2FzZSAtMToKCSAgICAgICAgcmV0dXJuIGlzRGF5ID8gInllc3RlcmRheSIgOiAibGFzdCAiICsgdW5pdHNbdW5pdF1bMF07CgoJICAgICAgY2FzZSAwOgoJICAgICAgICByZXR1cm4gaXNEYXkgPyAidG9kYXkiIDogInRoaXMgIiArIHVuaXRzW3VuaXRdWzBdOwoKCSAgICB9CgkgIH0KCgkgIHZhciBpc0luUGFzdCA9IE9iamVjdC5pcyhjb3VudCwgLTApIHx8IGNvdW50IDwgMCwKCSAgICAgIGZtdFZhbHVlID0gTWF0aC5hYnMoY291bnQpLAoJICAgICAgc2luZ3VsYXIgPSBmbXRWYWx1ZSA9PT0gMSwKCSAgICAgIGxpbFVuaXRzID0gdW5pdHNbdW5pdF0sCgkgICAgICBmbXRVbml0ID0gbmFycm93ID8gc2luZ3VsYXIgPyBsaWxVbml0c1sxXSA6IGxpbFVuaXRzWzJdIHx8IGxpbFVuaXRzWzFdIDogc2luZ3VsYXIgPyB1bml0c1t1bml0XVswXSA6IHVuaXQ7CgkgIHJldHVybiBpc0luUGFzdCA/IGZtdFZhbHVlICsgIiAiICsgZm10VW5pdCArICIgYWdvIiA6ICJpbiAiICsgZm10VmFsdWUgKyAiICIgKyBmbXRVbml0OwoJfQoKCWZ1bmN0aW9uIHN0cmluZ2lmeVRva2VucyhzcGxpdHMsIHRva2VuVG9TdHJpbmcpIHsKCSAgdmFyIHMgPSAiIjsKCgkgIGZvciAodmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2Uoc3BsaXRzKSwgX3N0ZXA7ICEoX3N0ZXAgPSBfaXRlcmF0b3IoKSkuZG9uZTspIHsKCSAgICB2YXIgdG9rZW4gPSBfc3RlcC52YWx1ZTsKCgkgICAgaWYgKHRva2VuLmxpdGVyYWwpIHsKCSAgICAgIHMgKz0gdG9rZW4udmFsOwoJICAgIH0gZWxzZSB7CgkgICAgICBzICs9IHRva2VuVG9TdHJpbmcodG9rZW4udmFsKTsKCSAgICB9CgkgIH0KCgkgIHJldHVybiBzOwoJfQoKCXZhciBfbWFjcm9Ub2tlblRvRm9ybWF0T3B0cyA9IHsKCSAgRDogREFURV9TSE9SVCwKCSAgREQ6IERBVEVfTUVELAoJICBEREQ6IERBVEVfRlVMTCwKCSAgRERERDogREFURV9IVUdFLAoJICB0OiBUSU1FX1NJTVBMRSwKCSAgdHQ6IFRJTUVfV0lUSF9TRUNPTkRTLAoJICB0dHQ6IFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQsCgkgIHR0dHQ6IFRJTUVfV0lUSF9MT05HX09GRlNFVCwKCSAgVDogVElNRV8yNF9TSU1QTEUsCgkgIFRUOiBUSU1FXzI0X1dJVEhfU0VDT05EUywKCSAgVFRUOiBUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VULAoJICBUVFRUOiBUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQsCgkgIGY6IERBVEVUSU1FX1NIT1JULAoJICBmZjogREFURVRJTUVfTUVELAoJICBmZmY6IERBVEVUSU1FX0ZVTEwsCgkgIGZmZmY6IERBVEVUSU1FX0hVR0UsCgkgIEY6IERBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUywKCSAgRkY6IERBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMsCgkgIEZGRjogREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMsCgkgIEZGRkY6IERBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTCgl9OwoJLyoqCgkgKiBAcHJpdmF0ZQoJICovCgoJdmFyIEZvcm1hdHRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CgkgIEZvcm1hdHRlci5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUobG9jYWxlLCBvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgcmV0dXJuIG5ldyBGb3JtYXR0ZXIobG9jYWxlLCBvcHRzKTsKCSAgfTsKCgkgIEZvcm1hdHRlci5wYXJzZUZvcm1hdCA9IGZ1bmN0aW9uIHBhcnNlRm9ybWF0KGZtdCkgewoJICAgIHZhciBjdXJyZW50ID0gbnVsbCwKCSAgICAgICAgY3VycmVudEZ1bGwgPSAiIiwKCSAgICAgICAgYnJhY2tldGVkID0gZmFsc2U7CgkgICAgdmFyIHNwbGl0cyA9IFtdOwoKCSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZtdC5sZW5ndGg7IGkrKykgewoJICAgICAgdmFyIGMgPSBmbXQuY2hhckF0KGkpOwoKCSAgICAgIGlmIChjID09PSAiJyIpIHsKCSAgICAgICAgaWYgKGN1cnJlbnRGdWxsLmxlbmd0aCA+IDApIHsKCSAgICAgICAgICBzcGxpdHMucHVzaCh7CgkgICAgICAgICAgICBsaXRlcmFsOiBicmFja2V0ZWQsCgkgICAgICAgICAgICB2YWw6IGN1cnJlbnRGdWxsCgkgICAgICAgICAgfSk7CgkgICAgICAgIH0KCgkgICAgICAgIGN1cnJlbnQgPSBudWxsOwoJICAgICAgICBjdXJyZW50RnVsbCA9ICIiOwoJICAgICAgICBicmFja2V0ZWQgPSAhYnJhY2tldGVkOwoJICAgICAgfSBlbHNlIGlmIChicmFja2V0ZWQpIHsKCSAgICAgICAgY3VycmVudEZ1bGwgKz0gYzsKCSAgICAgIH0gZWxzZSBpZiAoYyA9PT0gY3VycmVudCkgewoJICAgICAgICBjdXJyZW50RnVsbCArPSBjOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgaWYgKGN1cnJlbnRGdWxsLmxlbmd0aCA+IDApIHsKCSAgICAgICAgICBzcGxpdHMucHVzaCh7CgkgICAgICAgICAgICBsaXRlcmFsOiBmYWxzZSwKCSAgICAgICAgICAgIHZhbDogY3VycmVudEZ1bGwKCSAgICAgICAgICB9KTsKCSAgICAgICAgfQoKCSAgICAgICAgY3VycmVudEZ1bGwgPSBjOwoJICAgICAgICBjdXJyZW50ID0gYzsKCSAgICAgIH0KCSAgICB9CgoJICAgIGlmIChjdXJyZW50RnVsbC5sZW5ndGggPiAwKSB7CgkgICAgICBzcGxpdHMucHVzaCh7CgkgICAgICAgIGxpdGVyYWw6IGJyYWNrZXRlZCwKCSAgICAgICAgdmFsOiBjdXJyZW50RnVsbAoJICAgICAgfSk7CgkgICAgfQoKCSAgICByZXR1cm4gc3BsaXRzOwoJICB9OwoKCSAgRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHMgPSBmdW5jdGlvbiBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuKSB7CgkgICAgcmV0dXJuIF9tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzW3Rva2VuXTsKCSAgfTsKCgkgIGZ1bmN0aW9uIEZvcm1hdHRlcihsb2NhbGUsIGZvcm1hdE9wdHMpIHsKCSAgICB0aGlzLm9wdHMgPSBmb3JtYXRPcHRzOwoJICAgIHRoaXMubG9jID0gbG9jYWxlOwoJICAgIHRoaXMuc3lzdGVtTG9jID0gbnVsbDsKCSAgfQoKCSAgdmFyIF9wcm90byA9IEZvcm1hdHRlci5wcm90b3R5cGU7CgoJICBfcHJvdG8uZm9ybWF0V2l0aFN5c3RlbURlZmF1bHQgPSBmdW5jdGlvbiBmb3JtYXRXaXRoU3lzdGVtRGVmYXVsdChkdCwgb3B0cykgewoJICAgIGlmICh0aGlzLnN5c3RlbUxvYyA9PT0gbnVsbCkgewoJICAgICAgdGhpcy5zeXN0ZW1Mb2MgPSB0aGlzLmxvYy5yZWRlZmF1bHRUb1N5c3RlbSgpOwoJICAgIH0KCgkgICAgdmFyIGRmID0gdGhpcy5zeXN0ZW1Mb2MuZHRGb3JtYXR0ZXIoZHQsIF9leHRlbmRzKHt9LCB0aGlzLm9wdHMsIG9wdHMpKTsKCSAgICByZXR1cm4gZGYuZm9ybWF0KCk7CgkgIH07CgoJICBfcHJvdG8uZm9ybWF0RGF0ZVRpbWUgPSBmdW5jdGlvbiBmb3JtYXREYXRlVGltZShkdCwgb3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHZhciBkZiA9IHRoaXMubG9jLmR0Rm9ybWF0dGVyKGR0LCBfZXh0ZW5kcyh7fSwgdGhpcy5vcHRzLCBvcHRzKSk7CgkgICAgcmV0dXJuIGRmLmZvcm1hdCgpOwoJICB9OwoKCSAgX3Byb3RvLmZvcm1hdERhdGVUaW1lUGFydHMgPSBmdW5jdGlvbiBmb3JtYXREYXRlVGltZVBhcnRzKGR0LCBvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgdmFyIGRmID0gdGhpcy5sb2MuZHRGb3JtYXR0ZXIoZHQsIF9leHRlbmRzKHt9LCB0aGlzLm9wdHMsIG9wdHMpKTsKCSAgICByZXR1cm4gZGYuZm9ybWF0VG9QYXJ0cygpOwoJICB9OwoKCSAgX3Byb3RvLnJlc29sdmVkT3B0aW9ucyA9IGZ1bmN0aW9uIHJlc29sdmVkT3B0aW9ucyhkdCwgb3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHZhciBkZiA9IHRoaXMubG9jLmR0Rm9ybWF0dGVyKGR0LCBfZXh0ZW5kcyh7fSwgdGhpcy5vcHRzLCBvcHRzKSk7CgkgICAgcmV0dXJuIGRmLnJlc29sdmVkT3B0aW9ucygpOwoJICB9OwoKCSAgX3Byb3RvLm51bSA9IGZ1bmN0aW9uIG51bShuLCBwKSB7CgkgICAgaWYgKHAgPT09IHZvaWQgMCkgewoJICAgICAgcCA9IDA7CgkgICAgfQoKCSAgICAvLyB3ZSBnZXQgc29tZSBwZXJmIG91dCBvZiBkb2luZyB0aGlzIGhlcmUsIGFubm95aW5nbHkKCSAgICBpZiAodGhpcy5vcHRzLmZvcmNlU2ltcGxlKSB7CgkgICAgICByZXR1cm4gcGFkU3RhcnQobiwgcCk7CgkgICAgfQoKCSAgICB2YXIgb3B0cyA9IF9leHRlbmRzKHt9LCB0aGlzLm9wdHMpOwoKCSAgICBpZiAocCA+IDApIHsKCSAgICAgIG9wdHMucGFkVG8gPSBwOwoJICAgIH0KCgkgICAgcmV0dXJuIHRoaXMubG9jLm51bWJlckZvcm1hdHRlcihvcHRzKS5mb3JtYXQobik7CgkgIH07CgoJICBfcHJvdG8uZm9ybWF0RGF0ZVRpbWVGcm9tU3RyaW5nID0gZnVuY3Rpb24gZm9ybWF0RGF0ZVRpbWVGcm9tU3RyaW5nKGR0LCBmbXQpIHsKCSAgICB2YXIgX3RoaXMgPSB0aGlzOwoKCSAgICB2YXIga25vd25FbmdsaXNoID0gdGhpcy5sb2MubGlzdGluZ01vZGUoKSA9PT0gImVuIiwKCSAgICAgICAgdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPSB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAmJiB0aGlzLmxvYy5vdXRwdXRDYWxlbmRhciAhPT0gImdyZWdvcnkiLAoJICAgICAgICBzdHJpbmcgPSBmdW5jdGlvbiBzdHJpbmcob3B0cywgZXh0cmFjdCkgewoJICAgICAgcmV0dXJuIF90aGlzLmxvYy5leHRyYWN0KGR0LCBvcHRzLCBleHRyYWN0KTsKCSAgICB9LAoJICAgICAgICBmb3JtYXRPZmZzZXQgPSBmdW5jdGlvbiBmb3JtYXRPZmZzZXQob3B0cykgewoJICAgICAgaWYgKGR0LmlzT2Zmc2V0Rml4ZWQgJiYgZHQub2Zmc2V0ID09PSAwICYmIG9wdHMuYWxsb3daKSB7CgkgICAgICAgIHJldHVybiAiWiI7CgkgICAgICB9CgoJICAgICAgcmV0dXJuIGR0LmlzVmFsaWQgPyBkdC56b25lLmZvcm1hdE9mZnNldChkdC50cywgb3B0cy5mb3JtYXQpIDogIiI7CgkgICAgfSwKCSAgICAgICAgbWVyaWRpZW0gPSBmdW5jdGlvbiBtZXJpZGllbSgpIHsKCSAgICAgIHJldHVybiBrbm93bkVuZ2xpc2ggPyBtZXJpZGllbUZvckRhdGVUaW1lKGR0KSA6IHN0cmluZyh7CgkgICAgICAgIGhvdXI6ICJudW1lcmljIiwKCSAgICAgICAgaG91ckN5Y2xlOiAiaDEyIgoJICAgICAgfSwgImRheXBlcmlvZCIpOwoJICAgIH0sCgkgICAgICAgIG1vbnRoID0gZnVuY3Rpb24gbW9udGgobGVuZ3RoLCBzdGFuZGFsb25lKSB7CgkgICAgICByZXR1cm4ga25vd25FbmdsaXNoID8gbW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSA6IHN0cmluZyhzdGFuZGFsb25lID8gewoJICAgICAgICBtb250aDogbGVuZ3RoCgkgICAgICB9IDogewoJICAgICAgICBtb250aDogbGVuZ3RoLAoJICAgICAgICBkYXk6ICJudW1lcmljIgoJICAgICAgfSwgIm1vbnRoIik7CgkgICAgfSwKCSAgICAgICAgd2Vla2RheSA9IGZ1bmN0aW9uIHdlZWtkYXkobGVuZ3RoLCBzdGFuZGFsb25lKSB7CgkgICAgICByZXR1cm4ga25vd25FbmdsaXNoID8gd2Vla2RheUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIDogc3RyaW5nKHN0YW5kYWxvbmUgPyB7CgkgICAgICAgIHdlZWtkYXk6IGxlbmd0aAoJICAgICAgfSA6IHsKCSAgICAgICAgd2Vla2RheTogbGVuZ3RoLAoJICAgICAgICBtb250aDogImxvbmciLAoJICAgICAgICBkYXk6ICJudW1lcmljIgoJICAgICAgfSwgIndlZWtkYXkiKTsKCSAgICB9LAoJICAgICAgICBtYXliZU1hY3JvID0gZnVuY3Rpb24gbWF5YmVNYWNybyh0b2tlbikgewoJICAgICAgdmFyIGZvcm1hdE9wdHMgPSBGb3JtYXR0ZXIubWFjcm9Ub2tlblRvRm9ybWF0T3B0cyh0b2tlbik7CgoJICAgICAgaWYgKGZvcm1hdE9wdHMpIHsKCSAgICAgICAgcmV0dXJuIF90aGlzLmZvcm1hdFdpdGhTeXN0ZW1EZWZhdWx0KGR0LCBmb3JtYXRPcHRzKTsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHJldHVybiB0b2tlbjsKCSAgICAgIH0KCSAgICB9LAoJICAgICAgICBlcmEgPSBmdW5jdGlvbiBlcmEobGVuZ3RoKSB7CgkgICAgICByZXR1cm4ga25vd25FbmdsaXNoID8gZXJhRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkgOiBzdHJpbmcoewoJICAgICAgICBlcmE6IGxlbmd0aAoJICAgICAgfSwgImVyYSIpOwoJICAgIH0sCgkgICAgICAgIHRva2VuVG9TdHJpbmcgPSBmdW5jdGlvbiB0b2tlblRvU3RyaW5nKHRva2VuKSB7CgkgICAgICAvLyBXaGVyZSBwb3NzaWJsZTogaHR0cDovL2NsZHIudW5pY29kZS5vcmcvdHJhbnNsYXRpb24vZGF0ZS10aW1lLTEvZGF0ZS10aW1lI1RPQy1TdGFuZGFsb25lLXZzLi1Gb3JtYXQtU3R5bGVzCgkgICAgICBzd2l0Y2ggKHRva2VuKSB7CgkgICAgICAgIC8vIG1zCgkgICAgICAgIGNhc2UgIlMiOgoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQubWlsbGlzZWNvbmQpOwoKCSAgICAgICAgY2FzZSAidSI6IC8vIGZhbGxzIHRocm91Z2gKCgkgICAgICAgIGNhc2UgIlNTUyI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC5taWxsaXNlY29uZCwgMyk7CgkgICAgICAgIC8vIHNlY29uZHMKCgkgICAgICAgIGNhc2UgInMiOgoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQuc2Vjb25kKTsKCgkgICAgICAgIGNhc2UgInNzIjoKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LnNlY29uZCwgMik7CgkgICAgICAgIC8vIGZyYWN0aW9uYWwgc2Vjb25kcwoKCSAgICAgICAgY2FzZSAidXUiOgoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oTWF0aC5mbG9vcihkdC5taWxsaXNlY29uZCAvIDEwKSwgMik7CgoJICAgICAgICBjYXNlICJ1dXUiOgoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oTWF0aC5mbG9vcihkdC5taWxsaXNlY29uZCAvIDEwMCkpOwoJICAgICAgICAvLyBtaW51dGVzCgoJICAgICAgICBjYXNlICJtIjoKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0Lm1pbnV0ZSk7CgoJICAgICAgICBjYXNlICJtbSI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC5taW51dGUsIDIpOwoJICAgICAgICAvLyBob3VycwoKCSAgICAgICAgY2FzZSAiaCI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC5ob3VyICUgMTIgPT09IDAgPyAxMiA6IGR0LmhvdXIgJSAxMik7CgoJICAgICAgICBjYXNlICJoaCI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC5ob3VyICUgMTIgPT09IDAgPyAxMiA6IGR0LmhvdXIgJSAxMiwgMik7CgoJICAgICAgICBjYXNlICJIIjoKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LmhvdXIpOwoKCSAgICAgICAgY2FzZSAiSEgiOgoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQuaG91ciwgMik7CgkgICAgICAgIC8vIG9mZnNldAoKCSAgICAgICAgY2FzZSAiWiI6CgkgICAgICAgICAgLy8gbGlrZSArNgoJICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoewoJICAgICAgICAgICAgZm9ybWF0OiAibmFycm93IiwKCSAgICAgICAgICAgIGFsbG93WjogX3RoaXMub3B0cy5hbGxvd1oKCSAgICAgICAgICB9KTsKCgkgICAgICAgIGNhc2UgIlpaIjoKCSAgICAgICAgICAvLyBsaWtlICswNjowMAoJICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoewoJICAgICAgICAgICAgZm9ybWF0OiAic2hvcnQiLAoJICAgICAgICAgICAgYWxsb3daOiBfdGhpcy5vcHRzLmFsbG93WgoJICAgICAgICAgIH0pOwoKCSAgICAgICAgY2FzZSAiWlpaIjoKCSAgICAgICAgICAvLyBsaWtlICswNjAwCgkgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7CgkgICAgICAgICAgICBmb3JtYXQ6ICJ0ZWNoaWUiLAoJICAgICAgICAgICAgYWxsb3daOiBfdGhpcy5vcHRzLmFsbG93WgoJICAgICAgICAgIH0pOwoKCSAgICAgICAgY2FzZSAiWlpaWiI6CgkgICAgICAgICAgLy8gbGlrZSBFU1QKCSAgICAgICAgICByZXR1cm4gZHQuem9uZS5vZmZzZXROYW1lKGR0LnRzLCB7CgkgICAgICAgICAgICBmb3JtYXQ6ICJzaG9ydCIsCgkgICAgICAgICAgICBsb2NhbGU6IF90aGlzLmxvYy5sb2NhbGUKCSAgICAgICAgICB9KTsKCgkgICAgICAgIGNhc2UgIlpaWlpaIjoKCSAgICAgICAgICAvLyBsaWtlIEVhc3Rlcm4gU3RhbmRhcmQgVGltZQoJICAgICAgICAgIHJldHVybiBkdC56b25lLm9mZnNldE5hbWUoZHQudHMsIHsKCSAgICAgICAgICAgIGZvcm1hdDogImxvbmciLAoJICAgICAgICAgICAgbG9jYWxlOiBfdGhpcy5sb2MubG9jYWxlCgkgICAgICAgICAgfSk7CgkgICAgICAgIC8vIHpvbmUKCgkgICAgICAgIGNhc2UgInoiOgoJICAgICAgICAgIC8vIGxpa2UgQW1lcmljYS9OZXdfWW9yawoJICAgICAgICAgIHJldHVybiBkdC56b25lTmFtZTsKCSAgICAgICAgLy8gbWVyaWRpZW1zCgoJICAgICAgICBjYXNlICJhIjoKCSAgICAgICAgICByZXR1cm4gbWVyaWRpZW0oKTsKCSAgICAgICAgLy8gZGF0ZXMKCgkgICAgICAgIGNhc2UgImQiOgoJICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7CgkgICAgICAgICAgICBkYXk6ICJudW1lcmljIgoJICAgICAgICAgIH0sICJkYXkiKSA6IF90aGlzLm51bShkdC5kYXkpOwoKCSAgICAgICAgY2FzZSAiZGQiOgoJICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7CgkgICAgICAgICAgICBkYXk6ICIyLWRpZ2l0IgoJICAgICAgICAgIH0sICJkYXkiKSA6IF90aGlzLm51bShkdC5kYXksIDIpOwoJICAgICAgICAvLyB3ZWVrZGF5cyAtIHN0YW5kYWxvbmUKCgkgICAgICAgIGNhc2UgImMiOgoJICAgICAgICAgIC8vIGxpa2UgMQoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQud2Vla2RheSk7CgoJICAgICAgICBjYXNlICJjY2MiOgoJICAgICAgICAgIC8vIGxpa2UgJ1R1ZXMnCgkgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoInNob3J0IiwgdHJ1ZSk7CgoJICAgICAgICBjYXNlICJjY2NjIjoKCSAgICAgICAgICAvLyBsaWtlICdUdWVzZGF5JwoJICAgICAgICAgIHJldHVybiB3ZWVrZGF5KCJsb25nIiwgdHJ1ZSk7CgoJICAgICAgICBjYXNlICJjY2NjYyI6CgkgICAgICAgICAgLy8gbGlrZSAnVCcKCSAgICAgICAgICByZXR1cm4gd2Vla2RheSgibmFycm93IiwgdHJ1ZSk7CgkgICAgICAgIC8vIHdlZWtkYXlzIC0gZm9ybWF0CgoJICAgICAgICBjYXNlICJFIjoKCSAgICAgICAgICAvLyBsaWtlIDEKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LndlZWtkYXkpOwoKCSAgICAgICAgY2FzZSAiRUVFIjoKCSAgICAgICAgICAvLyBsaWtlICdUdWVzJwoJICAgICAgICAgIHJldHVybiB3ZWVrZGF5KCJzaG9ydCIsIGZhbHNlKTsKCgkgICAgICAgIGNhc2UgIkVFRUUiOgoJICAgICAgICAgIC8vIGxpa2UgJ1R1ZXNkYXknCgkgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoImxvbmciLCBmYWxzZSk7CgoJICAgICAgICBjYXNlICJFRUVFRSI6CgkgICAgICAgICAgLy8gbGlrZSAnVCcKCSAgICAgICAgICByZXR1cm4gd2Vla2RheSgibmFycm93IiwgZmFsc2UpOwoJICAgICAgICAvLyBtb250aHMgLSBzdGFuZGFsb25lCgoJICAgICAgICBjYXNlICJMIjoKCSAgICAgICAgICAvLyBsaWtlIDEKCSAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoewoJICAgICAgICAgICAgbW9udGg6ICJudW1lcmljIiwKCSAgICAgICAgICAgIGRheTogIm51bWVyaWMiCgkgICAgICAgICAgfSwgIm1vbnRoIikgOiBfdGhpcy5udW0oZHQubW9udGgpOwoKCSAgICAgICAgY2FzZSAiTEwiOgoJICAgICAgICAgIC8vIGxpa2UgMDEsIGRvZXNuJ3Qgc2VlbSB0byB3b3JrCgkgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsKCSAgICAgICAgICAgIG1vbnRoOiAiMi1kaWdpdCIsCgkgICAgICAgICAgICBkYXk6ICJudW1lcmljIgoJICAgICAgICAgIH0sICJtb250aCIpIDogX3RoaXMubnVtKGR0Lm1vbnRoLCAyKTsKCgkgICAgICAgIGNhc2UgIkxMTCI6CgkgICAgICAgICAgLy8gbGlrZSBKYW4KCSAgICAgICAgICByZXR1cm4gbW9udGgoInNob3J0IiwgdHJ1ZSk7CgoJICAgICAgICBjYXNlICJMTExMIjoKCSAgICAgICAgICAvLyBsaWtlIEphbnVhcnkKCSAgICAgICAgICByZXR1cm4gbW9udGgoImxvbmciLCB0cnVlKTsKCgkgICAgICAgIGNhc2UgIkxMTExMIjoKCSAgICAgICAgICAvLyBsaWtlIEoKCSAgICAgICAgICByZXR1cm4gbW9udGgoIm5hcnJvdyIsIHRydWUpOwoJICAgICAgICAvLyBtb250aHMgLSBmb3JtYXQKCgkgICAgICAgIGNhc2UgIk0iOgoJICAgICAgICAgIC8vIGxpa2UgMQoJICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7CgkgICAgICAgICAgICBtb250aDogIm51bWVyaWMiCgkgICAgICAgICAgfSwgIm1vbnRoIikgOiBfdGhpcy5udW0oZHQubW9udGgpOwoKCSAgICAgICAgY2FzZSAiTU0iOgoJICAgICAgICAgIC8vIGxpa2UgMDEKCSAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoewoJICAgICAgICAgICAgbW9udGg6ICIyLWRpZ2l0IgoJICAgICAgICAgIH0sICJtb250aCIpIDogX3RoaXMubnVtKGR0Lm1vbnRoLCAyKTsKCgkgICAgICAgIGNhc2UgIk1NTSI6CgkgICAgICAgICAgLy8gbGlrZSBKYW4KCSAgICAgICAgICByZXR1cm4gbW9udGgoInNob3J0IiwgZmFsc2UpOwoKCSAgICAgICAgY2FzZSAiTU1NTSI6CgkgICAgICAgICAgLy8gbGlrZSBKYW51YXJ5CgkgICAgICAgICAgcmV0dXJuIG1vbnRoKCJsb25nIiwgZmFsc2UpOwoKCSAgICAgICAgY2FzZSAiTU1NTU0iOgoJICAgICAgICAgIC8vIGxpa2UgSgoJICAgICAgICAgIHJldHVybiBtb250aCgibmFycm93IiwgZmFsc2UpOwoJICAgICAgICAvLyB5ZWFycwoKCSAgICAgICAgY2FzZSAieSI6CgkgICAgICAgICAgLy8gbGlrZSAyMDE0CgkgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsKCSAgICAgICAgICAgIHllYXI6ICJudW1lcmljIgoJICAgICAgICAgIH0sICJ5ZWFyIikgOiBfdGhpcy5udW0oZHQueWVhcik7CgoJICAgICAgICBjYXNlICJ5eSI6CgkgICAgICAgICAgLy8gbGlrZSAxNAoJICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7CgkgICAgICAgICAgICB5ZWFyOiAiMi1kaWdpdCIKCSAgICAgICAgICB9LCAieWVhciIpIDogX3RoaXMubnVtKGR0LnllYXIudG9TdHJpbmcoKS5zbGljZSgtMiksIDIpOwoKCSAgICAgICAgY2FzZSAieXl5eSI6CgkgICAgICAgICAgLy8gbGlrZSAwMDEyCgkgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsKCSAgICAgICAgICAgIHllYXI6ICJudW1lcmljIgoJICAgICAgICAgIH0sICJ5ZWFyIikgOiBfdGhpcy5udW0oZHQueWVhciwgNCk7CgoJICAgICAgICBjYXNlICJ5eXl5eXkiOgoJICAgICAgICAgIC8vIGxpa2UgMDAwMDEyCgkgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsKCSAgICAgICAgICAgIHllYXI6ICJudW1lcmljIgoJICAgICAgICAgIH0sICJ5ZWFyIikgOiBfdGhpcy5udW0oZHQueWVhciwgNik7CgkgICAgICAgIC8vIGVyYXMKCgkgICAgICAgIGNhc2UgIkciOgoJICAgICAgICAgIC8vIGxpa2UgQUQKCSAgICAgICAgICByZXR1cm4gZXJhKCJzaG9ydCIpOwoKCSAgICAgICAgY2FzZSAiR0ciOgoJICAgICAgICAgIC8vIGxpa2UgQW5ubyBEb21pbmkKCSAgICAgICAgICByZXR1cm4gZXJhKCJsb25nIik7CgoJICAgICAgICBjYXNlICJHR0dHRyI6CgkgICAgICAgICAgcmV0dXJuIGVyYSgibmFycm93Iik7CgoJICAgICAgICBjYXNlICJrayI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC53ZWVrWWVhci50b1N0cmluZygpLnNsaWNlKC0yKSwgMik7CgoJICAgICAgICBjYXNlICJra2trIjoKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LndlZWtZZWFyLCA0KTsKCgkgICAgICAgIGNhc2UgIlciOgoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQud2Vla051bWJlcik7CgoJICAgICAgICBjYXNlICJXVyI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC53ZWVrTnVtYmVyLCAyKTsKCgkgICAgICAgIGNhc2UgIm8iOgoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQub3JkaW5hbCk7CgoJICAgICAgICBjYXNlICJvb28iOgoJICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQub3JkaW5hbCwgMyk7CgoJICAgICAgICBjYXNlICJxIjoKCSAgICAgICAgICAvLyBsaWtlIDEKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LnF1YXJ0ZXIpOwoKCSAgICAgICAgY2FzZSAicXEiOgoJICAgICAgICAgIC8vIGxpa2UgMDEKCSAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LnF1YXJ0ZXIsIDIpOwoKCSAgICAgICAgY2FzZSAiWCI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShNYXRoLmZsb29yKGR0LnRzIC8gMTAwMCkpOwoKCSAgICAgICAgY2FzZSAieCI6CgkgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC50cyk7CgoJICAgICAgICBkZWZhdWx0OgoJICAgICAgICAgIHJldHVybiBtYXliZU1hY3JvKHRva2VuKTsKCSAgICAgIH0KCSAgICB9OwoKCSAgICByZXR1cm4gc3RyaW5naWZ5VG9rZW5zKEZvcm1hdHRlci5wYXJzZUZvcm1hdChmbXQpLCB0b2tlblRvU3RyaW5nKTsKCSAgfTsKCgkgIF9wcm90by5mb3JtYXREdXJhdGlvbkZyb21TdHJpbmcgPSBmdW5jdGlvbiBmb3JtYXREdXJhdGlvbkZyb21TdHJpbmcoZHVyLCBmbXQpIHsKCSAgICB2YXIgX3RoaXMyID0gdGhpczsKCgkgICAgdmFyIHRva2VuVG9GaWVsZCA9IGZ1bmN0aW9uIHRva2VuVG9GaWVsZCh0b2tlbikgewoJICAgICAgc3dpdGNoICh0b2tlblswXSkgewoJICAgICAgICBjYXNlICJTIjoKCSAgICAgICAgICByZXR1cm4gIm1pbGxpc2Vjb25kIjsKCgkgICAgICAgIGNhc2UgInMiOgoJICAgICAgICAgIHJldHVybiAic2Vjb25kIjsKCgkgICAgICAgIGNhc2UgIm0iOgoJICAgICAgICAgIHJldHVybiAibWludXRlIjsKCgkgICAgICAgIGNhc2UgImgiOgoJICAgICAgICAgIHJldHVybiAiaG91ciI7CgoJICAgICAgICBjYXNlICJkIjoKCSAgICAgICAgICByZXR1cm4gImRheSI7CgoJICAgICAgICBjYXNlICJNIjoKCSAgICAgICAgICByZXR1cm4gIm1vbnRoIjsKCgkgICAgICAgIGNhc2UgInkiOgoJICAgICAgICAgIHJldHVybiAieWVhciI7CgoJICAgICAgICBkZWZhdWx0OgoJICAgICAgICAgIHJldHVybiBudWxsOwoJICAgICAgfQoJICAgIH0sCgkgICAgICAgIHRva2VuVG9TdHJpbmcgPSBmdW5jdGlvbiB0b2tlblRvU3RyaW5nKGxpbGR1cikgewoJICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0b2tlbikgewoJICAgICAgICB2YXIgbWFwcGVkID0gdG9rZW5Ub0ZpZWxkKHRva2VuKTsKCgkgICAgICAgIGlmIChtYXBwZWQpIHsKCSAgICAgICAgICByZXR1cm4gX3RoaXMyLm51bShsaWxkdXIuZ2V0KG1hcHBlZCksIHRva2VuLmxlbmd0aCk7CgkgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgcmV0dXJuIHRva2VuOwoJICAgICAgICB9CgkgICAgICB9OwoJICAgIH0sCgkgICAgICAgIHRva2VucyA9IEZvcm1hdHRlci5wYXJzZUZvcm1hdChmbXQpLAoJICAgICAgICByZWFsVG9rZW5zID0gdG9rZW5zLnJlZHVjZShmdW5jdGlvbiAoZm91bmQsIF9yZWYpIHsKCSAgICAgIHZhciBsaXRlcmFsID0gX3JlZi5saXRlcmFsLAoJICAgICAgICAgIHZhbCA9IF9yZWYudmFsOwoJICAgICAgcmV0dXJuIGxpdGVyYWwgPyBmb3VuZCA6IGZvdW5kLmNvbmNhdCh2YWwpOwoJICAgIH0sIFtdKSwKCSAgICAgICAgY29sbGFwc2VkID0gZHVyLnNoaWZ0VG8uYXBwbHkoZHVyLCByZWFsVG9rZW5zLm1hcCh0b2tlblRvRmllbGQpLmZpbHRlcihmdW5jdGlvbiAodCkgewoJICAgICAgcmV0dXJuIHQ7CgkgICAgfSkpOwoKCSAgICByZXR1cm4gc3RyaW5naWZ5VG9rZW5zKHRva2VucywgdG9rZW5Ub1N0cmluZyhjb2xsYXBzZWQpKTsKCSAgfTsKCgkgIHJldHVybiBGb3JtYXR0ZXI7Cgl9KCk7CgoJdmFyIEludmFsaWQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewoJICBmdW5jdGlvbiBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pIHsKCSAgICB0aGlzLnJlYXNvbiA9IHJlYXNvbjsKCSAgICB0aGlzLmV4cGxhbmF0aW9uID0gZXhwbGFuYXRpb247CgkgIH0KCgkgIHZhciBfcHJvdG8gPSBJbnZhbGlkLnByb3RvdHlwZTsKCgkgIF9wcm90by50b01lc3NhZ2UgPSBmdW5jdGlvbiB0b01lc3NhZ2UoKSB7CgkgICAgaWYgKHRoaXMuZXhwbGFuYXRpb24pIHsKCSAgICAgIHJldHVybiB0aGlzLnJlYXNvbiArICI6ICIgKyB0aGlzLmV4cGxhbmF0aW9uOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gdGhpcy5yZWFzb247CgkgICAgfQoJICB9OwoKCSAgcmV0dXJuIEludmFsaWQ7Cgl9KCk7CgoJLyoqCgkgKiBAaW50ZXJmYWNlCgkgKi8KCgl2YXIgWm9uZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CgkgIGZ1bmN0aW9uIFpvbmUoKSB7fQoKCSAgdmFyIF9wcm90byA9IFpvbmUucHJvdG90eXBlOwoKCSAgLyoqCgkgICAqIFJldHVybnMgdGhlIG9mZnNldCdzIGNvbW1vbiBuYW1lIChzdWNoIGFzIEVTVCkgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXAKCSAgICogQGFic3RyYWN0CgkgICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBuYW1lCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyB0byBhZmZlY3QgdGhlIGZvcm1hdAoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5mb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uIEFjY2VwdHMgJ2xvbmcnIG9yICdzaG9ydCcuCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmxvY2FsZSAtIFdoYXQgbG9jYWxlIHRvIHJldHVybiB0aGUgb2Zmc2V0IG5hbWUgaW4uCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIF9wcm90by5vZmZzZXROYW1lID0gZnVuY3Rpb24gb2Zmc2V0TmFtZSh0cywgb3B0cykgewoJICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgdGhlIG9mZnNldCdzIHZhbHVlIGFzIGEgc3RyaW5nCgkgICAqIEBhYnN0cmFjdAoJICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgb2Zmc2V0CgkgICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uCgkgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICduYXJyb3cnLCAnc2hvcnQnLCBvciAndGVjaGllJy4gUmV0dXJuaW5nICcrNicsICcrMDY6MDAnLCBvciAnKzA2MDAnIHJlc3BlY3RpdmVseQoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8uZm9ybWF0T2Zmc2V0ID0gZnVuY3Rpb24gZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHsKCSAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gdGhlIG9mZnNldCBpbiBtaW51dGVzIGZvciB0aGlzIHpvbmUgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXAuCgkgICAqIEBhYnN0cmFjdAoJICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGNvbXB1dGUgdGhlIG9mZnNldAoJICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAqLwoJICA7CgoJICBfcHJvdG8ub2Zmc2V0ID0gZnVuY3Rpb24gb2Zmc2V0KHRzKSB7CgkgICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBab25lIGlzIGVxdWFsIHRvIGFub3RoZXIgem9uZQoJICAgKiBAYWJzdHJhY3QKCSAgICogQHBhcmFtIHtab25lfSBvdGhlclpvbmUgLSB0aGUgem9uZSB0byBjb21wYXJlCgkgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICBfcHJvdG8uZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyWm9uZSkgewoJICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgWm9uZSBpcyB2YWxpZC4KCSAgICogQGFic3RyYWN0CgkgICAqIEB0eXBlIHtib29sZWFufQoJICAgKi8KCSAgOwoKCSAgX2NyZWF0ZUNsYXNzKFpvbmUsIFt7CgkgICAga2V5OiAidHlwZSIsCgkgICAgZ2V0OgoJICAgIC8qKgoJICAgICAqIFRoZSB0eXBlIG9mIHpvbmUKCSAgICAgKiBAYWJzdHJhY3QKCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoJICAgIGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFRoZSBuYW1lIG9mIHRoaXMgem9uZS4KCSAgICAgKiBAYWJzdHJhY3QKCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIm5hbWUiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTsKCSAgICB9CgkgICAgLyoqCgkgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBvZmZzZXQgaXMga25vd24gdG8gYmUgZml4ZWQgZm9yIHRoZSB3aG9sZSB5ZWFyLgoJICAgICAqIEBhYnN0cmFjdAoJICAgICAqIEB0eXBlIHtib29sZWFufQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImlzVW5pdmVyc2FsIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CgkgICAgfQoJICB9LCB7CgkgICAga2V5OiAiaXNWYWxpZCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpOwoJICAgIH0KCSAgfV0pOwoKCSAgcmV0dXJuIFpvbmU7Cgl9KCk7CgoJdmFyIHNpbmdsZXRvbiQxID0gbnVsbDsKCS8qKgoJICogUmVwcmVzZW50cyB0aGUgbG9jYWwgem9uZSBmb3IgdGhpcyBKYXZhU2NyaXB0IGVudmlyb25tZW50LgoJICogQGltcGxlbWVudHMge1pvbmV9CgkgKi8KCgl2YXIgU3lzdGVtWm9uZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1pvbmUpIHsKCSAgX2luaGVyaXRzTG9vc2UoU3lzdGVtWm9uZSwgX1pvbmUpOwoKCSAgZnVuY3Rpb24gU3lzdGVtWm9uZSgpIHsKCSAgICByZXR1cm4gX1pvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwoJICB9CgoJICB2YXIgX3Byb3RvID0gU3lzdGVtWm9uZS5wcm90b3R5cGU7CgoJICAvKiogQG92ZXJyaWRlICoqLwoJICBfcHJvdG8ub2Zmc2V0TmFtZSA9IGZ1bmN0aW9uIG9mZnNldE5hbWUodHMsIF9yZWYpIHsKCSAgICB2YXIgZm9ybWF0ID0gX3JlZi5mb3JtYXQsCgkgICAgICAgIGxvY2FsZSA9IF9yZWYubG9jYWxlOwoJICAgIHJldHVybiBwYXJzZVpvbmVJbmZvKHRzLCBmb3JtYXQsIGxvY2FsZSk7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCSAgOwoKCSAgX3Byb3RvLmZvcm1hdE9mZnNldCA9IGZ1bmN0aW9uIGZvcm1hdE9mZnNldCQxKHRzLCBmb3JtYXQpIHsKCSAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHRoaXMub2Zmc2V0KHRzKSwgZm9ybWF0KTsKCSAgfQoJICAvKiogQG92ZXJyaWRlICoqLwoJICA7CgoJICBfcHJvdG8ub2Zmc2V0ID0gZnVuY3Rpb24gb2Zmc2V0KHRzKSB7CgkgICAgcmV0dXJuIC1uZXcgRGF0ZSh0cykuZ2V0VGltZXpvbmVPZmZzZXQoKTsKCSAgfQoJICAvKiogQG92ZXJyaWRlICoqLwoJICA7CgoJICBfcHJvdG8uZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyWm9uZSkgewoJICAgIHJldHVybiBvdGhlclpvbmUudHlwZSA9PT0gInN5c3RlbSI7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCSAgOwoKCSAgX2NyZWF0ZUNsYXNzKFN5c3RlbVpvbmUsIFt7CgkgICAga2V5OiAidHlwZSIsCgkgICAgZ2V0OgoJICAgIC8qKiBAb3ZlcnJpZGUgKiovCgkgICAgZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuICJzeXN0ZW0iOwoJICAgIH0KCSAgICAvKiogQG92ZXJyaWRlICoqLwoKCSAgfSwgewoJICAgIGtleTogIm5hbWUiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmU7CgkgICAgfQoJICAgIC8qKiBAb3ZlcnJpZGUgKiovCgoJICB9LCB7CgkgICAga2V5OiAiaXNVbml2ZXJzYWwiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIGZhbHNlOwoJICAgIH0KCSAgfSwgewoJICAgIGtleTogImlzVmFsaWQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRydWU7CgkgICAgfQoJICB9XSwgW3sKCSAgICBrZXk6ICJpbnN0YW5jZSIsCgkgICAgZ2V0OgoJICAgIC8qKgoJICAgICAqIEdldCBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgbG9jYWwgem9uZQoJICAgICAqIEByZXR1cm4ge1N5c3RlbVpvbmV9CgkgICAgICovCgkgICAgZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgaWYgKHNpbmdsZXRvbiQxID09PSBudWxsKSB7CgkgICAgICAgIHNpbmdsZXRvbiQxID0gbmV3IFN5c3RlbVpvbmUoKTsKCSAgICAgIH0KCgkgICAgICByZXR1cm4gc2luZ2xldG9uJDE7CgkgICAgfQoJICB9XSk7CgoJICByZXR1cm4gU3lzdGVtWm9uZTsKCX0oWm9uZSk7CgoJdmFyIG1hdGNoaW5nUmVnZXggPSBSZWdFeHAoIl4iICsgaWFuYVJlZ2V4LnNvdXJjZSArICIkIik7Cgl2YXIgZHRmQ2FjaGUgPSB7fTsKCglmdW5jdGlvbiBtYWtlRFRGKHpvbmUpIHsKCSAgaWYgKCFkdGZDYWNoZVt6b25lXSkgewoJICAgIGR0ZkNhY2hlW3pvbmVdID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIiwgewoJICAgICAgaG91cjEyOiBmYWxzZSwKCSAgICAgIHRpbWVab25lOiB6b25lLAoJICAgICAgeWVhcjogIm51bWVyaWMiLAoJICAgICAgbW9udGg6ICIyLWRpZ2l0IiwKCSAgICAgIGRheTogIjItZGlnaXQiLAoJICAgICAgaG91cjogIjItZGlnaXQiLAoJICAgICAgbWludXRlOiAiMi1kaWdpdCIsCgkgICAgICBzZWNvbmQ6ICIyLWRpZ2l0IgoJICAgIH0pOwoJICB9CgoJICByZXR1cm4gZHRmQ2FjaGVbem9uZV07Cgl9CgoJdmFyIHR5cGVUb1BvcyA9IHsKCSAgeWVhcjogMCwKCSAgbW9udGg6IDEsCgkgIGRheTogMiwKCSAgaG91cjogMywKCSAgbWludXRlOiA0LAoJICBzZWNvbmQ6IDUKCX07CgoJZnVuY3Rpb24gaGFja3lPZmZzZXQoZHRmLCBkYXRlKSB7CgkgIHZhciBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0KGRhdGUpLnJlcGxhY2UoL1x1MjAwRS9nLCAiIiksCgkgICAgICBwYXJzZWQgPSAvKFxkKylcLyhcZCspXC8oXGQrKSw/IChcZCspOihcZCspOihcZCspLy5leGVjKGZvcm1hdHRlZCksCgkgICAgICBmTW9udGggPSBwYXJzZWRbMV0sCgkgICAgICBmRGF5ID0gcGFyc2VkWzJdLAoJICAgICAgZlllYXIgPSBwYXJzZWRbM10sCgkgICAgICBmSG91ciA9IHBhcnNlZFs0XSwKCSAgICAgIGZNaW51dGUgPSBwYXJzZWRbNV0sCgkgICAgICBmU2Vjb25kID0gcGFyc2VkWzZdOwoJICByZXR1cm4gW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXTsKCX0KCglmdW5jdGlvbiBwYXJ0c09mZnNldChkdGYsIGRhdGUpIHsKCSAgdmFyIGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXRUb1BhcnRzKGRhdGUpLAoJICAgICAgZmlsbGVkID0gW107CgoJICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1hdHRlZC5sZW5ndGg7IGkrKykgewoJICAgIHZhciBfZm9ybWF0dGVkJGkgPSBmb3JtYXR0ZWRbaV0sCgkgICAgICAgIHR5cGUgPSBfZm9ybWF0dGVkJGkudHlwZSwKCSAgICAgICAgdmFsdWUgPSBfZm9ybWF0dGVkJGkudmFsdWUsCgkgICAgICAgIHBvcyA9IHR5cGVUb1Bvc1t0eXBlXTsKCgkgICAgaWYgKCFpc1VuZGVmaW5lZChwb3MpKSB7CgkgICAgICBmaWxsZWRbcG9zXSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7CgkgICAgfQoJICB9CgoJICByZXR1cm4gZmlsbGVkOwoJfQoKCXZhciBpYW5hWm9uZUNhY2hlID0ge307CgkvKioKCSAqIEEgem9uZSBpZGVudGlmaWVkIGJ5IGFuIElBTkEgaWRlbnRpZmllciwgbGlrZSBBbWVyaWNhL05ld19Zb3JrCgkgKiBAaW1wbGVtZW50cyB7Wm9uZX0KCSAqLwoKCXZhciBJQU5BWm9uZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1pvbmUpIHsKCSAgX2luaGVyaXRzTG9vc2UoSUFOQVpvbmUsIF9ab25lKTsKCgkgIC8qKgoJICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFpvbmUgbmFtZQoJICAgKiBAcmV0dXJuIHtJQU5BWm9uZX0KCSAgICovCgkgIElBTkFab25lLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShuYW1lKSB7CgkgICAgaWYgKCFpYW5hWm9uZUNhY2hlW25hbWVdKSB7CgkgICAgICBpYW5hWm9uZUNhY2hlW25hbWVdID0gbmV3IElBTkFab25lKG5hbWUpOwoJICAgIH0KCgkgICAgcmV0dXJuIGlhbmFab25lQ2FjaGVbbmFtZV07CgkgIH0KCSAgLyoqCgkgICAqIFJlc2V0IGxvY2FsIGNhY2hlcy4gU2hvdWxkIG9ubHkgYmUgbmVjZXNzYXJ5IGluIHRlc3Rpbmcgc2NlbmFyaW9zLgoJICAgKiBAcmV0dXJuIHt2b2lkfQoJICAgKi8KCSAgOwoKCSAgSUFOQVpvbmUucmVzZXRDYWNoZSA9IGZ1bmN0aW9uIHJlc2V0Q2FjaGUoKSB7CgkgICAgaWFuYVpvbmVDYWNoZSA9IHt9OwoJICAgIGR0ZkNhY2hlID0ge307CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgc3RyaW5nIGlzIGEgdmFsaWQgc3BlY2lmaWVyLiBUaGlzIG9ubHkgY2hlY2tzIHRoZSBzdHJpbmcncyBmb3JtYXQsIG5vdCB0aGF0IHRoZSBzcGVjaWZpZXIgaWRlbnRpZmllcyBhIGtub3duIHpvbmU7IHNlZSBpc1ZhbGlkWm9uZSBmb3IgdGhhdC4KCSAgICogQHBhcmFtIHtzdHJpbmd9IHMgLSBUaGUgc3RyaW5nIHRvIGNoZWNrIHZhbGlkaXR5IG9uCgkgICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRTcGVjaWZpZXIoIkFtZXJpY2EvTmV3X1lvcmsiKSAvLz0+IHRydWUKCSAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcigiRmFudGFzaWEvQ2FzdGxlIikgLy89PiB0cnVlCgkgICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRTcGVjaWZpZXIoIlNwb3J0fn5ibG9ycCIpIC8vPT4gZmFsc2UKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIElBTkFab25lLmlzVmFsaWRTcGVjaWZpZXIgPSBmdW5jdGlvbiBpc1ZhbGlkU3BlY2lmaWVyKHMpIHsKCSAgICByZXR1cm4gISEocyAmJiBzLm1hdGNoKG1hdGNoaW5nUmVnZXgpKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBzdHJpbmcgaWRlbnRpZmllcyBhIHJlYWwgem9uZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gem9uZSAtIFRoZSBzdHJpbmcgdG8gY2hlY2sKCSAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoIkFtZXJpY2EvTmV3X1lvcmsiKSAvLz0+IHRydWUKCSAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoIkZhbnRhc2lhL0Nhc3RsZSIpIC8vPT4gZmFsc2UKCSAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoIlNwb3J0fn5ibG9ycCIpIC8vPT4gZmFsc2UKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIElBTkFab25lLmlzVmFsaWRab25lID0gZnVuY3Rpb24gaXNWYWxpZFpvbmUoem9uZSkgewoJICAgIGlmICghem9uZSkgewoJICAgICAgcmV0dXJuIGZhbHNlOwoJICAgIH0KCgkgICAgdHJ5IHsKCSAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCJlbi1VUyIsIHsKCSAgICAgICAgdGltZVpvbmU6IHpvbmUKCSAgICAgIH0pLmZvcm1hdCgpOwoJICAgICAgcmV0dXJuIHRydWU7CgkgICAgfSBjYXRjaCAoZSkgewoJICAgICAgcmV0dXJuIGZhbHNlOwoJICAgIH0KCSAgfTsKCgkgIGZ1bmN0aW9uIElBTkFab25lKG5hbWUpIHsKCSAgICB2YXIgX3RoaXM7CgoJICAgIF90aGlzID0gX1pvbmUuY2FsbCh0aGlzKSB8fCB0aGlzOwoJICAgIC8qKiBAcHJpdmF0ZSAqKi8KCgkgICAgX3RoaXMuem9uZU5hbWUgPSBuYW1lOwoJICAgIC8qKiBAcHJpdmF0ZSAqKi8KCgkgICAgX3RoaXMudmFsaWQgPSBJQU5BWm9uZS5pc1ZhbGlkWm9uZShuYW1lKTsKCSAgICByZXR1cm4gX3RoaXM7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCgoJICB2YXIgX3Byb3RvID0gSUFOQVpvbmUucHJvdG90eXBlOwoKCSAgLyoqIEBvdmVycmlkZSAqKi8KCSAgX3Byb3RvLm9mZnNldE5hbWUgPSBmdW5jdGlvbiBvZmZzZXROYW1lKHRzLCBfcmVmKSB7CgkgICAgdmFyIGZvcm1hdCA9IF9yZWYuZm9ybWF0LAoJICAgICAgICBsb2NhbGUgPSBfcmVmLmxvY2FsZTsKCSAgICByZXR1cm4gcGFyc2Vab25lSW5mbyh0cywgZm9ybWF0LCBsb2NhbGUsIHRoaXMubmFtZSk7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCSAgOwoKCSAgX3Byb3RvLmZvcm1hdE9mZnNldCA9IGZ1bmN0aW9uIGZvcm1hdE9mZnNldCQxKHRzLCBmb3JtYXQpIHsKCSAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHRoaXMub2Zmc2V0KHRzKSwgZm9ybWF0KTsKCSAgfQoJICAvKiogQG92ZXJyaWRlICoqLwoJICA7CgoJICBfcHJvdG8ub2Zmc2V0ID0gZnVuY3Rpb24gb2Zmc2V0KHRzKSB7CgkgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh0cyk7CgkgICAgaWYgKGlzTmFOKGRhdGUpKSByZXR1cm4gTmFOOwoKCSAgICB2YXIgZHRmID0gbWFrZURURih0aGlzLm5hbWUpLAoJICAgICAgICBfcmVmMiA9IGR0Zi5mb3JtYXRUb1BhcnRzID8gcGFydHNPZmZzZXQoZHRmLCBkYXRlKSA6IGhhY2t5T2Zmc2V0KGR0ZiwgZGF0ZSksCgkgICAgICAgIHllYXIgPSBfcmVmMlswXSwKCSAgICAgICAgbW9udGggPSBfcmVmMlsxXSwKCSAgICAgICAgZGF5ID0gX3JlZjJbMl0sCgkgICAgICAgIGhvdXIgPSBfcmVmMlszXSwKCSAgICAgICAgbWludXRlID0gX3JlZjJbNF0sCgkgICAgICAgIHNlY29uZCA9IF9yZWYyWzVdOyAvLyBiZWNhdXNlIHdlJ3JlIHVzaW5nIGhvdXIxMiBhbmQgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTAyNTU2NCZjYW49MiZxPSUyMjI0JTNBMDAlMjIlMjBkYXRldGltZWZvcm1hdAoKCgkgICAgdmFyIGFkanVzdGVkSG91ciA9IGhvdXIgPT09IDI0ID8gMCA6IGhvdXI7CgkgICAgdmFyIGFzVVRDID0gb2JqVG9Mb2NhbFRTKHsKCSAgICAgIHllYXI6IHllYXIsCgkgICAgICBtb250aDogbW9udGgsCgkgICAgICBkYXk6IGRheSwKCSAgICAgIGhvdXI6IGFkanVzdGVkSG91ciwKCSAgICAgIG1pbnV0ZTogbWludXRlLAoJICAgICAgc2Vjb25kOiBzZWNvbmQsCgkgICAgICBtaWxsaXNlY29uZDogMAoJICAgIH0pOwoJICAgIHZhciBhc1RTID0gK2RhdGU7CgkgICAgdmFyIG92ZXIgPSBhc1RTICUgMTAwMDsKCSAgICBhc1RTIC09IG92ZXIgPj0gMCA/IG92ZXIgOiAxMDAwICsgb3ZlcjsKCSAgICByZXR1cm4gKGFzVVRDIC0gYXNUUykgLyAoNjAgKiAxMDAwKTsKCSAgfQoJICAvKiogQG92ZXJyaWRlICoqLwoJICA7CgoJICBfcHJvdG8uZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyWm9uZSkgewoJICAgIHJldHVybiBvdGhlclpvbmUudHlwZSA9PT0gImlhbmEiICYmIG90aGVyWm9uZS5uYW1lID09PSB0aGlzLm5hbWU7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCSAgOwoKCSAgX2NyZWF0ZUNsYXNzKElBTkFab25lLCBbewoJICAgIGtleTogInR5cGUiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuICJpYW5hIjsKCSAgICB9CgkgICAgLyoqIEBvdmVycmlkZSAqKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJuYW1lIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLnpvbmVOYW1lOwoJICAgIH0KCSAgICAvKiogQG92ZXJyaWRlICoqLwoKCSAgfSwgewoJICAgIGtleTogImlzVW5pdmVyc2FsIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBmYWxzZTsKCSAgICB9CgkgIH0sIHsKCSAgICBrZXk6ICJpc1ZhbGlkIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLnZhbGlkOwoJICAgIH0KCSAgfV0pOwoKCSAgcmV0dXJuIElBTkFab25lOwoJfShab25lKTsKCgl2YXIgc2luZ2xldG9uID0gbnVsbDsKCS8qKgoJICogQSB6b25lIHdpdGggYSBmaXhlZCBvZmZzZXQgKG1lYW5pbmcgbm8gRFNUKQoJICogQGltcGxlbWVudHMge1pvbmV9CgkgKi8KCgl2YXIgRml4ZWRPZmZzZXRab25lID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfWm9uZSkgewoJICBfaW5oZXJpdHNMb29zZShGaXhlZE9mZnNldFpvbmUsIF9ab25lKTsKCgkgIC8qKgoJICAgKiBHZXQgYW4gaW5zdGFuY2Ugd2l0aCBhIHNwZWNpZmllZCBvZmZzZXQKCSAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIFRoZSBvZmZzZXQgaW4gbWludXRlcwoJICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9CgkgICAqLwoJICBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UgPSBmdW5jdGlvbiBpbnN0YW5jZShvZmZzZXQpIHsKCSAgICByZXR1cm4gb2Zmc2V0ID09PSAwID8gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlIDogbmV3IEZpeGVkT2Zmc2V0Wm9uZShvZmZzZXQpOwoJICB9CgkgIC8qKgoJICAgKiBHZXQgYW4gaW5zdGFuY2Ugb2YgRml4ZWRPZmZzZXRab25lIGZyb20gYSBVVEMgb2Zmc2V0IHN0cmluZywgbGlrZSAiVVRDKzYiCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBzIC0gVGhlIG9mZnNldCBzdHJpbmcgdG8gcGFyc2UKCSAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKCJVVEMrNiIpCgkgICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcigiVVRDKzA2IikKCSAgICogQGV4YW1wbGUgRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKCJVVEMtNjowMCIpCgkgICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX0KCSAgICovCgkgIDsKCgkgIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllciA9IGZ1bmN0aW9uIHBhcnNlU3BlY2lmaWVyKHMpIHsKCSAgICBpZiAocykgewoJICAgICAgdmFyIHIgPSBzLm1hdGNoKC9edXRjKD86KFsrLV1cZHsxLDJ9KSg/OjooXGR7Mn0pKT8pPyQvaSk7CgoJICAgICAgaWYgKHIpIHsKCSAgICAgICAgcmV0dXJuIG5ldyBGaXhlZE9mZnNldFpvbmUoc2lnbmVkT2Zmc2V0KHJbMV0sIHJbMl0pKTsKCSAgICAgIH0KCSAgICB9CgoJICAgIHJldHVybiBudWxsOwoJICB9OwoKCSAgZnVuY3Rpb24gRml4ZWRPZmZzZXRab25lKG9mZnNldCkgewoJICAgIHZhciBfdGhpczsKCgkgICAgX3RoaXMgPSBfWm9uZS5jYWxsKHRoaXMpIHx8IHRoaXM7CgkgICAgLyoqIEBwcml2YXRlICoqLwoKCSAgICBfdGhpcy5maXhlZCA9IG9mZnNldDsKCSAgICByZXR1cm4gX3RoaXM7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCgoJICB2YXIgX3Byb3RvID0gRml4ZWRPZmZzZXRab25lLnByb3RvdHlwZTsKCgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIF9wcm90by5vZmZzZXROYW1lID0gZnVuY3Rpb24gb2Zmc2V0TmFtZSgpIHsKCSAgICByZXR1cm4gdGhpcy5uYW1lOwoJICB9CgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIDsKCgkgIF9wcm90by5mb3JtYXRPZmZzZXQgPSBmdW5jdGlvbiBmb3JtYXRPZmZzZXQkMSh0cywgZm9ybWF0KSB7CgkgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh0aGlzLmZpeGVkLCBmb3JtYXQpOwoJICB9CgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIDsKCgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIF9wcm90by5vZmZzZXQgPSBmdW5jdGlvbiBvZmZzZXQoKSB7CgkgICAgcmV0dXJuIHRoaXMuZml4ZWQ7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCSAgOwoKCSAgX3Byb3RvLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhvdGhlclpvbmUpIHsKCSAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09ICJmaXhlZCIgJiYgb3RoZXJab25lLmZpeGVkID09PSB0aGlzLmZpeGVkOwoJICB9CgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIDsKCgkgIF9jcmVhdGVDbGFzcyhGaXhlZE9mZnNldFpvbmUsIFt7CgkgICAga2V5OiAidHlwZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gImZpeGVkIjsKCSAgICB9CgkgICAgLyoqIEBvdmVycmlkZSAqKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJuYW1lIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmZpeGVkID09PSAwID8gIlVUQyIgOiAiVVRDIiArIGZvcm1hdE9mZnNldCh0aGlzLmZpeGVkLCAibmFycm93Iik7CgkgICAgfQoJICB9LCB7CgkgICAga2V5OiAiaXNVbml2ZXJzYWwiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRydWU7CgkgICAgfQoJICB9LCB7CgkgICAga2V5OiAiaXNWYWxpZCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdHJ1ZTsKCSAgICB9CgkgIH1dLCBbewoJICAgIGtleTogInV0Y0luc3RhbmNlIiwKCSAgICBnZXQ6CgkgICAgLyoqCgkgICAgICogR2V0IGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIFVUQwoJICAgICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX0KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICBpZiAoc2luZ2xldG9uID09PSBudWxsKSB7CgkgICAgICAgIHNpbmdsZXRvbiA9IG5ldyBGaXhlZE9mZnNldFpvbmUoMCk7CgkgICAgICB9CgoJICAgICAgcmV0dXJuIHNpbmdsZXRvbjsKCSAgICB9CgkgIH1dKTsKCgkgIHJldHVybiBGaXhlZE9mZnNldFpvbmU7Cgl9KFpvbmUpOwoKCS8qKgoJICogQSB6b25lIHRoYXQgZmFpbGVkIHRvIHBhcnNlLiBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcy4KCSAqIEBpbXBsZW1lbnRzIHtab25lfQoJICovCgoJdmFyIEludmFsaWRab25lID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfWm9uZSkgewoJICBfaW5oZXJpdHNMb29zZShJbnZhbGlkWm9uZSwgX1pvbmUpOwoKCSAgZnVuY3Rpb24gSW52YWxpZFpvbmUoem9uZU5hbWUpIHsKCSAgICB2YXIgX3RoaXM7CgoJICAgIF90aGlzID0gX1pvbmUuY2FsbCh0aGlzKSB8fCB0aGlzOwoJICAgIC8qKiAgQHByaXZhdGUgKi8KCgkgICAgX3RoaXMuem9uZU5hbWUgPSB6b25lTmFtZTsKCSAgICByZXR1cm4gX3RoaXM7CgkgIH0KCSAgLyoqIEBvdmVycmlkZSAqKi8KCgoJICB2YXIgX3Byb3RvID0gSW52YWxpZFpvbmUucHJvdG90eXBlOwoKCSAgLyoqIEBvdmVycmlkZSAqKi8KCSAgX3Byb3RvLm9mZnNldE5hbWUgPSBmdW5jdGlvbiBvZmZzZXROYW1lKCkgewoJICAgIHJldHVybiBudWxsOwoJICB9CgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIDsKCgkgIF9wcm90by5mb3JtYXRPZmZzZXQgPSBmdW5jdGlvbiBmb3JtYXRPZmZzZXQoKSB7CgkgICAgcmV0dXJuICIiOwoJICB9CgkgIC8qKiBAb3ZlcnJpZGUgKiovCgkgIDsKCgkgIF9wcm90by5vZmZzZXQgPSBmdW5jdGlvbiBvZmZzZXQoKSB7CgkgICAgcmV0dXJuIE5hTjsKCSAgfQoJICAvKiogQG92ZXJyaWRlICoqLwoJICA7CgoJICBfcHJvdG8uZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKCkgewoJICAgIHJldHVybiBmYWxzZTsKCSAgfQoJICAvKiogQG92ZXJyaWRlICoqLwoJICA7CgoJICBfY3JlYXRlQ2xhc3MoSW52YWxpZFpvbmUsIFt7CgkgICAga2V5OiAidHlwZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gImludmFsaWQiOwoJICAgIH0KCSAgICAvKiogQG92ZXJyaWRlICoqLwoKCSAgfSwgewoJICAgIGtleTogIm5hbWUiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuem9uZU5hbWU7CgkgICAgfQoJICAgIC8qKiBAb3ZlcnJpZGUgKiovCgoJICB9LCB7CgkgICAga2V5OiAiaXNVbml2ZXJzYWwiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIGZhbHNlOwoJICAgIH0KCSAgfSwgewoJICAgIGtleTogImlzVmFsaWQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIGZhbHNlOwoJICAgIH0KCSAgfV0pOwoKCSAgcmV0dXJuIEludmFsaWRab25lOwoJfShab25lKTsKCgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCWZ1bmN0aW9uIG5vcm1hbGl6ZVpvbmUoaW5wdXQsIGRlZmF1bHRab25lKSB7CgoJICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpIHx8IGlucHV0ID09PSBudWxsKSB7CgkgICAgcmV0dXJuIGRlZmF1bHRab25lOwoJICB9IGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgWm9uZSkgewoJICAgIHJldHVybiBpbnB1dDsKCSAgfSBlbHNlIGlmIChpc1N0cmluZyhpbnB1dCkpIHsKCSAgICB2YXIgbG93ZXJlZCA9IGlucHV0LnRvTG93ZXJDYXNlKCk7CgkgICAgaWYgKGxvd2VyZWQgPT09ICJsb2NhbCIgfHwgbG93ZXJlZCA9PT0gInN5c3RlbSIpIHJldHVybiBkZWZhdWx0Wm9uZTtlbHNlIGlmIChsb3dlcmVkID09PSAidXRjIiB8fCBsb3dlcmVkID09PSAiZ210IikgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZTtlbHNlIGlmIChJQU5BWm9uZS5pc1ZhbGlkU3BlY2lmaWVyKGxvd2VyZWQpKSByZXR1cm4gSUFOQVpvbmUuY3JlYXRlKGlucHV0KTtlbHNlIHJldHVybiBGaXhlZE9mZnNldFpvbmUucGFyc2VTcGVjaWZpZXIobG93ZXJlZCkgfHwgbmV3IEludmFsaWRab25lKGlucHV0KTsKCSAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHsKCSAgICByZXR1cm4gRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKGlucHV0KTsKCSAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICJvYmplY3QiICYmIGlucHV0Lm9mZnNldCAmJiB0eXBlb2YgaW5wdXQub2Zmc2V0ID09PSAibnVtYmVyIikgewoJICAgIC8vIFRoaXMgaXMgZHVtYiwgYnV0IHRoZSBpbnN0YW5jZW9mIGNoZWNrIGFib3ZlIGRvZXNuJ3Qgc2VlbSB0byByZWFsbHkgd29yawoJICAgIC8vIHNvIHdlJ3JlIGR1Y2sgY2hlY2tpbmcgaXQKCSAgICByZXR1cm4gaW5wdXQ7CgkgIH0gZWxzZSB7CgkgICAgcmV0dXJuIG5ldyBJbnZhbGlkWm9uZShpbnB1dCk7CgkgIH0KCX0KCgl2YXIgbm93ID0gZnVuY3Rpb24gbm93KCkgewoJICByZXR1cm4gRGF0ZS5ub3coKTsKCX0sCgkgICAgZGVmYXVsdFpvbmUgPSAic3lzdGVtIiwKCSAgICBkZWZhdWx0TG9jYWxlID0gbnVsbCwKCSAgICBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtID0gbnVsbCwKCSAgICBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIgPSBudWxsLAoJICAgIHRocm93T25JbnZhbGlkOwoJLyoqCgkgKiBTZXR0aW5ncyBjb250YWlucyBzdGF0aWMgZ2V0dGVycyBhbmQgc2V0dGVycyB0aGF0IGNvbnRyb2wgTHV4b24ncyBvdmVyYWxsIGJlaGF2aW9yLiBMdXhvbiBpcyBhIHNpbXBsZSBsaWJyYXJ5IHdpdGggZmV3IG9wdGlvbnMsIGJ1dCB0aGUgb25lcyBpdCBkb2VzIGhhdmUgbGl2ZSBoZXJlLgoJICovCgoKCXZhciBTZXR0aW5ncyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CgkgIGZ1bmN0aW9uIFNldHRpbmdzKCkge30KCgkgIC8qKgoJICAgKiBSZXNldCBMdXhvbidzIGdsb2JhbCBjYWNoZXMuIFNob3VsZCBvbmx5IGJlIG5lY2Vzc2FyeSBpbiB0ZXN0aW5nIHNjZW5hcmlvcy4KCSAgICogQHJldHVybiB7dm9pZH0KCSAgICovCgkgIFNldHRpbmdzLnJlc2V0Q2FjaGVzID0gZnVuY3Rpb24gcmVzZXRDYWNoZXMoKSB7CgkgICAgTG9jYWxlLnJlc2V0Q2FjaGUoKTsKCSAgICBJQU5BWm9uZS5yZXNldENhY2hlKCk7CgkgIH07CgoJICBfY3JlYXRlQ2xhc3MoU2V0dGluZ3MsIG51bGwsIFt7CgkgICAga2V5OiAibm93IiwKCSAgICBnZXQ6CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBjYWxsYmFjayBmb3IgcmV0dXJuaW5nIHRoZSBjdXJyZW50IHRpbWVzdGFtcC4KCSAgICAgKiBAdHlwZSB7ZnVuY3Rpb259CgkgICAgICovCgkgICAgZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIG5vdzsKCSAgICB9CgkgICAgLyoqCgkgICAgICogU2V0IHRoZSBjYWxsYmFjayBmb3IgcmV0dXJuaW5nIHRoZSBjdXJyZW50IHRpbWVzdGFtcC4KCSAgICAgKiBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIG51bWJlciwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBFcG9jaCBtaWxsaXNlY29uZCBjb3VudAoJICAgICAqIEB0eXBlIHtmdW5jdGlvbn0KCSAgICAgKiBAZXhhbXBsZSBTZXR0aW5ncy5ub3cgPSAoKSA9PiBEYXRlLm5vdygpICsgMzAwMCAvLyBwcmV0ZW5kIGl0IGlzIDMgc2Vjb25kcyBpbiB0aGUgZnV0dXJlCgkgICAgICogQGV4YW1wbGUgU2V0dGluZ3Mubm93ID0gKCkgPT4gMCAvLyBhbHdheXMgcHJldGVuZCBpdCdzIEphbiAxLCAxOTcwIGF0IG1pZG5pZ2h0IGluIFVUQyB0aW1lCgkgICAgICovCgkgICAgLAoJICAgIHNldDogZnVuY3Rpb24gc2V0KG4pIHsKCSAgICAgIG5vdyA9IG47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFNldCB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgdG8gY3JlYXRlIERhdGVUaW1lcyBpbi4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy4KCSAgICAgKiBVc2UgdGhlIHZhbHVlICJzeXN0ZW0iIHRvIHJlc2V0IHRoaXMgdmFsdWUgdG8gdGhlIHN5c3RlbSdzIHRpbWUgem9uZS4KCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImRlZmF1bHRab25lIiwKCSAgICBnZXQ6CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBkZWZhdWx0IHRpbWUgem9uZSBvYmplY3QgY3VycmVudGx5IHVzZWQgdG8gY3JlYXRlIERhdGVUaW1lcy4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy4KCSAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgc3lzdGVtJ3MgdGltZSB6b25lICh0aGUgb25lIHNldCBvbiB0aGUgbWFjaGluZSB0aGF0IHJ1bnMgdGhpcyBjb2RlKS4KCSAgICAgKiBAdHlwZSB7Wm9uZX0KCSAgICAgKi8KCSAgICBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gbm9ybWFsaXplWm9uZShkZWZhdWx0Wm9uZSwgU3lzdGVtWm9uZS5pbnN0YW5jZSk7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgZGVmYXVsdCBsb2NhbGUgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgkgICAgLAoJICAgIHNldDogZnVuY3Rpb24gc2V0KHpvbmUpIHsKCSAgICAgIGRlZmF1bHRab25lID0gem9uZTsKCSAgICB9CgkgIH0sIHsKCSAgICBrZXk6ICJkZWZhdWx0TG9jYWxlIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBkZWZhdWx0TG9jYWxlOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBTZXQgdGhlIGRlZmF1bHQgbG9jYWxlIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy4KCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoJICAgICwKCSAgICBzZXQ6IGZ1bmN0aW9uIHNldChsb2NhbGUpIHsKCSAgICAgIGRlZmF1bHRMb2NhbGUgPSBsb2NhbGU7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgZGVmYXVsdCBudW1iZXJpbmcgc3lzdGVtIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy4KCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImRlZmF1bHROdW1iZXJpbmdTeXN0ZW0iLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW07CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFNldCB0aGUgZGVmYXVsdCBudW1iZXJpbmcgc3lzdGVtIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy4KCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoJICAgICwKCSAgICBzZXQ6IGZ1bmN0aW9uIHNldChudW1iZXJpbmdTeXN0ZW0pIHsKCSAgICAgIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0gPSBudW1iZXJpbmdTeXN0ZW07CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgZGVmYXVsdCBvdXRwdXQgY2FsZW5kYXIgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiZGVmYXVsdE91dHB1dENhbGVuZGFyIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBkZWZhdWx0T3V0cHV0Q2FsZW5kYXI7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFNldCB0aGUgZGVmYXVsdCBvdXRwdXQgY2FsZW5kYXIgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgkgICAgLAoJICAgIHNldDogZnVuY3Rpb24gc2V0KG91dHB1dENhbGVuZGFyKSB7CgkgICAgICBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIgPSBvdXRwdXRDYWxlbmRhcjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHdoZXRoZXIgTHV4b24gd2lsbCB0aHJvdyB3aGVuIGl0IGVuY291bnRlcnMgaW52YWxpZCBEYXRlVGltZXMsIER1cmF0aW9ucywgb3IgSW50ZXJ2YWxzCgkgICAgICogQHR5cGUge2Jvb2xlYW59CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAidGhyb3dPbkludmFsaWQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRocm93T25JbnZhbGlkOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBTZXQgd2hldGhlciBMdXhvbiB3aWxsIHRocm93IHdoZW4gaXQgZW5jb3VudGVycyBpbnZhbGlkIERhdGVUaW1lcywgRHVyYXRpb25zLCBvciBJbnRlcnZhbHMKCSAgICAgKiBAdHlwZSB7Ym9vbGVhbn0KCSAgICAgKi8KCSAgICAsCgkgICAgc2V0OiBmdW5jdGlvbiBzZXQodCkgewoJICAgICAgdGhyb3dPbkludmFsaWQgPSB0OwoJICAgIH0KCSAgfV0pOwoKCSAgcmV0dXJuIFNldHRpbmdzOwoJfSgpOwoKCXZhciBfZXhjbHVkZWQgPSBbImJhc2UiXTsKCXZhciBpbnRsRFRDYWNoZSA9IHt9OwoKCWZ1bmN0aW9uIGdldENhY2hlZERURihsb2NTdHJpbmcsIG9wdHMpIHsKCSAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgIG9wdHMgPSB7fTsKCSAgfQoKCSAgdmFyIGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTsKCSAgdmFyIGR0ZiA9IGludGxEVENhY2hlW2tleV07CgoJICBpZiAoIWR0ZikgewoJICAgIGR0ZiA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY1N0cmluZywgb3B0cyk7CgkgICAgaW50bERUQ2FjaGVba2V5XSA9IGR0ZjsKCSAgfQoKCSAgcmV0dXJuIGR0ZjsKCX0KCgl2YXIgaW50bE51bUNhY2hlID0ge307CgoJZnVuY3Rpb24gZ2V0Q2FjaGVkSU5GKGxvY1N0cmluZywgb3B0cykgewoJICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgb3B0cyA9IHt9OwoJICB9CgoJICB2YXIga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgb3B0c10pOwoJICB2YXIgaW5mID0gaW50bE51bUNhY2hlW2tleV07CgoJICBpZiAoIWluZikgewoJICAgIGluZiA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NTdHJpbmcsIG9wdHMpOwoJICAgIGludGxOdW1DYWNoZVtrZXldID0gaW5mOwoJICB9CgoJICByZXR1cm4gaW5mOwoJfQoKCXZhciBpbnRsUmVsQ2FjaGUgPSB7fTsKCglmdW5jdGlvbiBnZXRDYWNoZWRSVEYobG9jU3RyaW5nLCBvcHRzKSB7CgkgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICBvcHRzID0ge307CgkgIH0KCgkgIHZhciBfb3B0cyA9IG9wdHM7CgkgICAgICBfb3B0cy5iYXNlOwoJICAgICAgdmFyIGNhY2hlS2V5T3B0cyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9vcHRzLCBfZXhjbHVkZWQpOyAvLyBleGNsdWRlIGBiYXNlYCBmcm9tIHRoZSBvcHRpb25zCgoKCSAgdmFyIGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIGNhY2hlS2V5T3B0c10pOwoJICB2YXIgaW5mID0gaW50bFJlbENhY2hlW2tleV07CgoJICBpZiAoIWluZikgewoJICAgIGluZiA9IG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChsb2NTdHJpbmcsIG9wdHMpOwoJICAgIGludGxSZWxDYWNoZVtrZXldID0gaW5mOwoJICB9CgoJICByZXR1cm4gaW5mOwoJfQoKCXZhciBzeXNMb2NhbGVDYWNoZSA9IG51bGw7CgoJZnVuY3Rpb24gc3lzdGVtTG9jYWxlKCkgewoJICBpZiAoc3lzTG9jYWxlQ2FjaGUpIHsKCSAgICByZXR1cm4gc3lzTG9jYWxlQ2FjaGU7CgkgIH0gZWxzZSB7CgkgICAgc3lzTG9jYWxlQ2FjaGUgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTsKCSAgICByZXR1cm4gc3lzTG9jYWxlQ2FjaGU7CgkgIH0KCX0KCglmdW5jdGlvbiBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGVTdHIpIHsKCSAgLy8gSSByZWFsbHkgd2FudCB0byBhdm9pZCB3cml0aW5nIGEgQkNQIDQ3IHBhcnNlcgoJICAvLyBzZWUsIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL3dvb29ybS9iY3AtNDcKCSAgLy8gSW5zdGVhZCwgd2UnbGwgZG8gdGhpczoKCSAgLy8gYSkgaWYgdGhlIHN0cmluZyBoYXMgbm8gLXUgZXh0ZW5zaW9ucywganVzdCBsZWF2ZSBpdCBhbG9uZQoJICAvLyBiKSBpZiBpdCBkb2VzLCB1c2UgSW50bCB0byByZXNvbHZlIGV2ZXJ5dGhpbmcKCSAgLy8gYykgaWYgSW50bCBmYWlscywgdHJ5IGFnYWluIHdpdGhvdXQgdGhlIC11CgkgIHZhciB1SW5kZXggPSBsb2NhbGVTdHIuaW5kZXhPZigiLXUtIik7CgoJICBpZiAodUluZGV4ID09PSAtMSkgewoJICAgIHJldHVybiBbbG9jYWxlU3RyXTsKCSAgfSBlbHNlIHsKCSAgICB2YXIgb3B0aW9uczsKCSAgICB2YXIgc21hbGxlciA9IGxvY2FsZVN0ci5zdWJzdHJpbmcoMCwgdUluZGV4KTsKCgkgICAgdHJ5IHsKCSAgICAgIG9wdGlvbnMgPSBnZXRDYWNoZWREVEYobG9jYWxlU3RyKS5yZXNvbHZlZE9wdGlvbnMoKTsKCSAgICB9IGNhdGNoIChlKSB7CgkgICAgICBvcHRpb25zID0gZ2V0Q2FjaGVkRFRGKHNtYWxsZXIpLnJlc29sdmVkT3B0aW9ucygpOwoJICAgIH0KCgkgICAgdmFyIF9vcHRpb25zID0gb3B0aW9ucywKCSAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX29wdGlvbnMubnVtYmVyaW5nU3lzdGVtLAoJICAgICAgICBjYWxlbmRhciA9IF9vcHRpb25zLmNhbGVuZGFyOyAvLyByZXR1cm4gdGhlIHNtYWxsZXIgb25lIHNvIHRoYXQgd2UgY2FuIGFwcGVuZCB0aGUgY2FsZW5kYXIgYW5kIG51bWJlcmluZyBvdmVycmlkZXMgdG8gaXQKCgkgICAgcmV0dXJuIFtzbWFsbGVyLCBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyXTsKCSAgfQoJfQoKCWZ1bmN0aW9uIGludGxDb25maWdTdHJpbmcobG9jYWxlU3RyLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSB7CgkgIGlmIChvdXRwdXRDYWxlbmRhciB8fCBudW1iZXJpbmdTeXN0ZW0pIHsKCSAgICBsb2NhbGVTdHIgKz0gIi11IjsKCgkgICAgaWYgKG91dHB1dENhbGVuZGFyKSB7CgkgICAgICBsb2NhbGVTdHIgKz0gIi1jYS0iICsgb3V0cHV0Q2FsZW5kYXI7CgkgICAgfQoKCSAgICBpZiAobnVtYmVyaW5nU3lzdGVtKSB7CgkgICAgICBsb2NhbGVTdHIgKz0gIi1udS0iICsgbnVtYmVyaW5nU3lzdGVtOwoJICAgIH0KCgkgICAgcmV0dXJuIGxvY2FsZVN0cjsKCSAgfSBlbHNlIHsKCSAgICByZXR1cm4gbG9jYWxlU3RyOwoJICB9Cgl9CgoJZnVuY3Rpb24gbWFwTW9udGhzKGYpIHsKCSAgdmFyIG1zID0gW107CgoJICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMjsgaSsrKSB7CgkgICAgdmFyIGR0ID0gRGF0ZVRpbWUudXRjKDIwMTYsIGksIDEpOwoJICAgIG1zLnB1c2goZihkdCkpOwoJICB9CgoJICByZXR1cm4gbXM7Cgl9CgoJZnVuY3Rpb24gbWFwV2Vla2RheXMoZikgewoJICB2YXIgbXMgPSBbXTsKCgkgIGZvciAodmFyIGkgPSAxOyBpIDw9IDc7IGkrKykgewoJICAgIHZhciBkdCA9IERhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMgKyBpKTsKCSAgICBtcy5wdXNoKGYoZHQpKTsKCSAgfQoKCSAgcmV0dXJuIG1zOwoJfQoKCWZ1bmN0aW9uIGxpc3RTdHVmZihsb2MsIGxlbmd0aCwgZGVmYXVsdE9LLCBlbmdsaXNoRm4sIGludGxGbikgewoJICB2YXIgbW9kZSA9IGxvYy5saXN0aW5nTW9kZShkZWZhdWx0T0spOwoKCSAgaWYgKG1vZGUgPT09ICJlcnJvciIpIHsKCSAgICByZXR1cm4gbnVsbDsKCSAgfSBlbHNlIGlmIChtb2RlID09PSAiZW4iKSB7CgkgICAgcmV0dXJuIGVuZ2xpc2hGbihsZW5ndGgpOwoJICB9IGVsc2UgewoJICAgIHJldHVybiBpbnRsRm4obGVuZ3RoKTsKCSAgfQoJfQoKCWZ1bmN0aW9uIHN1cHBvcnRzRmFzdE51bWJlcnMobG9jKSB7CgkgIGlmIChsb2MubnVtYmVyaW5nU3lzdGVtICYmIGxvYy5udW1iZXJpbmdTeXN0ZW0gIT09ICJsYXRuIikgewoJICAgIHJldHVybiBmYWxzZTsKCSAgfSBlbHNlIHsKCSAgICByZXR1cm4gbG9jLm51bWJlcmluZ1N5c3RlbSA9PT0gImxhdG4iIHx8ICFsb2MubG9jYWxlIHx8IGxvYy5sb2NhbGUuc3RhcnRzV2l0aCgiZW4iKSB8fCBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2MuaW50bCkucmVzb2x2ZWRPcHRpb25zKCkubnVtYmVyaW5nU3lzdGVtID09PSAibGF0biI7CgkgIH0KCX0KCS8qKgoJICogQHByaXZhdGUKCSAqLwoKCgl2YXIgUG9seU51bWJlckZvcm1hdHRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CgkgIGZ1bmN0aW9uIFBvbHlOdW1iZXJGb3JtYXR0ZXIoaW50bCwgZm9yY2VTaW1wbGUsIG9wdHMpIHsKCSAgICB0aGlzLnBhZFRvID0gb3B0cy5wYWRUbyB8fCAwOwoJICAgIHRoaXMuZmxvb3IgPSBvcHRzLmZsb29yIHx8IGZhbHNlOwoKCSAgICBpZiAoIWZvcmNlU2ltcGxlKSB7CgkgICAgICB2YXIgaW50bE9wdHMgPSB7CgkgICAgICAgIHVzZUdyb3VwaW5nOiBmYWxzZQoJICAgICAgfTsKCSAgICAgIGlmIChvcHRzLnBhZFRvID4gMCkgaW50bE9wdHMubWluaW11bUludGVnZXJEaWdpdHMgPSBvcHRzLnBhZFRvOwoJICAgICAgdGhpcy5pbmYgPSBnZXRDYWNoZWRJTkYoaW50bCwgaW50bE9wdHMpOwoJICAgIH0KCSAgfQoKCSAgdmFyIF9wcm90byA9IFBvbHlOdW1iZXJGb3JtYXR0ZXIucHJvdG90eXBlOwoKCSAgX3Byb3RvLmZvcm1hdCA9IGZ1bmN0aW9uIGZvcm1hdChpKSB7CgkgICAgaWYgKHRoaXMuaW5mKSB7CgkgICAgICB2YXIgZml4ZWQgPSB0aGlzLmZsb29yID8gTWF0aC5mbG9vcihpKSA6IGk7CgkgICAgICByZXR1cm4gdGhpcy5pbmYuZm9ybWF0KGZpeGVkKTsKCSAgICB9IGVsc2UgewoJICAgICAgLy8gdG8gbWF0Y2ggdGhlIGJyb3dzZXIncyBudW1iZXJmb3JtYXR0ZXIgZGVmYXVsdHMKCSAgICAgIHZhciBfZml4ZWQgPSB0aGlzLmZsb29yID8gTWF0aC5mbG9vcihpKSA6IHJvdW5kVG8oaSwgMyk7CgoJICAgICAgcmV0dXJuIHBhZFN0YXJ0KF9maXhlZCwgdGhpcy5wYWRUbyk7CgkgICAgfQoJICB9OwoKCSAgcmV0dXJuIFBvbHlOdW1iZXJGb3JtYXR0ZXI7Cgl9KCk7CgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCgoJdmFyIFBvbHlEYXRlRm9ybWF0dGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKCSAgZnVuY3Rpb24gUG9seURhdGVGb3JtYXR0ZXIoZHQsIGludGwsIG9wdHMpIHsKCSAgICB0aGlzLm9wdHMgPSBvcHRzOwoJICAgIHZhciB6OwoKCSAgICBpZiAoZHQuem9uZS5pc1VuaXZlcnNhbCkgewoJICAgICAgLy8gVVRDLTggb3IgRXRjL1VUQy04IGFyZSBub3QgcGFydCBvZiB0emRhdGEsIG9ubHkgRXRjL0dNVCs4IGFuZCB0aGUgbGlrZS4KCSAgICAgIC8vIFRoYXQgaXMgd2h5IGZpeGVkLW9mZnNldCBUWiBpcyBzZXQgdG8gdGhhdCB1bmxlc3MgaXQgaXM6CgkgICAgICAvLyAxLiBSZXByZXNlbnRpbmcgb2Zmc2V0IDAgd2hlbiBVVEMgaXMgdXNlZCB0byBtYWludGFpbiBwcmV2aW91cyBiZWhhdmlvciBhbmQgZG9lcyBub3QgYmVjb21lIEdNVC4KCSAgICAgIC8vIDIuIFVuc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyOgoJICAgICAgLy8gICAgLSBzb21lIGRvIG5vdCBzdXBwb3J0IEV0Yy8KCSAgICAgIC8vICAgIC0gPCBFdGMvR01ULTE0LCA+IEV0Yy9HTVQrMTIsIGFuZCAzMC1taW51dGUgb3IgNDUtbWludXRlIG9mZnNldHMgYXJlIG5vdCBwYXJ0IG9mIHR6ZGF0YQoJICAgICAgdmFyIGdtdE9mZnNldCA9IC0xICogKGR0Lm9mZnNldCAvIDYwKTsKCSAgICAgIHZhciBvZmZzZXRaID0gZ210T2Zmc2V0ID49IDAgPyAiRXRjL0dNVCsiICsgZ210T2Zmc2V0IDogIkV0Yy9HTVQiICsgZ210T2Zmc2V0OwoKCSAgICAgIGlmIChkdC5vZmZzZXQgIT09IDAgJiYgSUFOQVpvbmUuY3JlYXRlKG9mZnNldFopLnZhbGlkKSB7CgkgICAgICAgIHogPSBvZmZzZXRaOwoJICAgICAgICB0aGlzLmR0ID0gZHQ7CgkgICAgICB9IGVsc2UgewoJICAgICAgICAvLyBOb3QgYWxsIGZpeGVkLW9mZnNldCB6b25lcyBsaWtlIEV0Yy8rNDozMCBhcmUgcHJlc2VudCBpbiB0emRhdGEuCgkgICAgICAgIC8vIFNvIHdlIGhhdmUgdG8gbWFrZSBkby4gVHdvIGNhc2VzOgoJICAgICAgICAvLyAxLiBUaGUgZm9ybWF0IG9wdGlvbnMgdGVsbCB1cyB0byBzaG93IHRoZSB6b25lLiBXZSBjYW4ndCBkbyB0aGF0LCBzbyB0aGUgYmVzdAoJICAgICAgICAvLyB3ZSBjYW4gZG8gaXMgZm9ybWF0IHRoZSBkYXRlIGluIFVUQy4KCSAgICAgICAgLy8gMi4gVGhlIGZvcm1hdCBvcHRpb25zIGRvbid0IHRlbGwgdXMgdG8gc2hvdyB0aGUgem9uZS4gVGhlbiB3ZSBjYW4gYWRqdXN0IHRoZW0KCSAgICAgICAgLy8gdGhlIHRpbWUgYW5kIHRlbGwgdGhlIGZvcm1hdHRlciB0byBzaG93IGl0IHRvIHVzIGluIFVUQywgc28gdGhhdCB0aGUgdGltZSBpcyByaWdodAoJICAgICAgICAvLyBhbmQgdGhlIGJhZCB6b25lIGRvZXNuJ3Qgc2hvdyB1cC4KCSAgICAgICAgeiA9ICJVVEMiOwoKCSAgICAgICAgaWYgKG9wdHMudGltZVpvbmVOYW1lKSB7CgkgICAgICAgICAgdGhpcy5kdCA9IGR0OwoJICAgICAgICB9IGVsc2UgewoJICAgICAgICAgIHRoaXMuZHQgPSBkdC5vZmZzZXQgPT09IDAgPyBkdCA6IERhdGVUaW1lLmZyb21NaWxsaXMoZHQudHMgKyBkdC5vZmZzZXQgKiA2MCAqIDEwMDApOwoJICAgICAgICB9CgkgICAgICB9CgkgICAgfSBlbHNlIGlmIChkdC56b25lLnR5cGUgPT09ICJzeXN0ZW0iKSB7CgkgICAgICB0aGlzLmR0ID0gZHQ7CgkgICAgfSBlbHNlIHsKCSAgICAgIHRoaXMuZHQgPSBkdDsKCSAgICAgIHogPSBkdC56b25lLm5hbWU7CgkgICAgfQoKCSAgICB2YXIgaW50bE9wdHMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5vcHRzKTsKCgkgICAgaWYgKHopIHsKCSAgICAgIGludGxPcHRzLnRpbWVab25lID0gejsKCSAgICB9CgoJICAgIHRoaXMuZHRmID0gZ2V0Q2FjaGVkRFRGKGludGwsIGludGxPcHRzKTsKCSAgfQoKCSAgdmFyIF9wcm90bzIgPSBQb2x5RGF0ZUZvcm1hdHRlci5wcm90b3R5cGU7CgoJICBfcHJvdG8yLmZvcm1hdCA9IGZ1bmN0aW9uIGZvcm1hdCgpIHsKCSAgICByZXR1cm4gdGhpcy5kdGYuZm9ybWF0KHRoaXMuZHQudG9KU0RhdGUoKSk7CgkgIH07CgoJICBfcHJvdG8yLmZvcm1hdFRvUGFydHMgPSBmdW5jdGlvbiBmb3JtYXRUb1BhcnRzKCkgewoJICAgIHJldHVybiB0aGlzLmR0Zi5mb3JtYXRUb1BhcnRzKHRoaXMuZHQudG9KU0RhdGUoKSk7CgkgIH07CgoJICBfcHJvdG8yLnJlc29sdmVkT3B0aW9ucyA9IGZ1bmN0aW9uIHJlc29sdmVkT3B0aW9ucygpIHsKCSAgICByZXR1cm4gdGhpcy5kdGYucmVzb2x2ZWRPcHRpb25zKCk7CgkgIH07CgoJICByZXR1cm4gUG9seURhdGVGb3JtYXR0ZXI7Cgl9KCk7CgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCgoJdmFyIFBvbHlSZWxGb3JtYXR0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewoJICBmdW5jdGlvbiBQb2x5UmVsRm9ybWF0dGVyKGludGwsIGlzRW5nbGlzaCwgb3B0cykgewoJICAgIHRoaXMub3B0cyA9IF9leHRlbmRzKHsKCSAgICAgIHN0eWxlOiAibG9uZyIKCSAgICB9LCBvcHRzKTsKCgkgICAgaWYgKCFpc0VuZ2xpc2ggJiYgaGFzUmVsYXRpdmUoKSkgewoJICAgICAgdGhpcy5ydGYgPSBnZXRDYWNoZWRSVEYoaW50bCwgb3B0cyk7CgkgICAgfQoJICB9CgoJICB2YXIgX3Byb3RvMyA9IFBvbHlSZWxGb3JtYXR0ZXIucHJvdG90eXBlOwoKCSAgX3Byb3RvMy5mb3JtYXQgPSBmdW5jdGlvbiBmb3JtYXQoY291bnQsIHVuaXQpIHsKCSAgICBpZiAodGhpcy5ydGYpIHsKCSAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXQoY291bnQsIHVuaXQpOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gZm9ybWF0UmVsYXRpdmVUaW1lKHVuaXQsIGNvdW50LCB0aGlzLm9wdHMubnVtZXJpYywgdGhpcy5vcHRzLnN0eWxlICE9PSAibG9uZyIpOwoJICAgIH0KCSAgfTsKCgkgIF9wcm90bzMuZm9ybWF0VG9QYXJ0cyA9IGZ1bmN0aW9uIGZvcm1hdFRvUGFydHMoY291bnQsIHVuaXQpIHsKCSAgICBpZiAodGhpcy5ydGYpIHsKCSAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXRUb1BhcnRzKGNvdW50LCB1bml0KTsKCSAgICB9IGVsc2UgewoJICAgICAgcmV0dXJuIFtdOwoJICAgIH0KCSAgfTsKCgkgIHJldHVybiBQb2x5UmVsRm9ybWF0dGVyOwoJfSgpOwoJLyoqCgkgKiBAcHJpdmF0ZQoJICovCgoKCXZhciBMb2NhbGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewoJICBMb2NhbGUuZnJvbU9wdHMgPSBmdW5jdGlvbiBmcm9tT3B0cyhvcHRzKSB7CgkgICAgcmV0dXJuIExvY2FsZS5jcmVhdGUob3B0cy5sb2NhbGUsIG9wdHMubnVtYmVyaW5nU3lzdGVtLCBvcHRzLm91dHB1dENhbGVuZGFyLCBvcHRzLmRlZmF1bHRUb0VOKTsKCSAgfTsKCgkgIExvY2FsZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCBkZWZhdWx0VG9FTikgewoJICAgIGlmIChkZWZhdWx0VG9FTiA9PT0gdm9pZCAwKSB7CgkgICAgICBkZWZhdWx0VG9FTiA9IGZhbHNlOwoJICAgIH0KCgkgICAgdmFyIHNwZWNpZmllZExvY2FsZSA9IGxvY2FsZSB8fCBTZXR0aW5ncy5kZWZhdWx0TG9jYWxlOyAvLyB0aGUgc3lzdGVtIGxvY2FsZSBpcyB1c2VmdWwgZm9yIGh1bWFuIHJlYWRhYmxlIHN0cmluZ3MgYnV0IGFubm95aW5nIGZvciBwYXJzaW5nL2Zvcm1hdHRpbmcga25vd24gZm9ybWF0cwoKCSAgICB2YXIgbG9jYWxlUiA9IHNwZWNpZmllZExvY2FsZSB8fCAoZGVmYXVsdFRvRU4gPyAiZW4tVVMiIDogc3lzdGVtTG9jYWxlKCkpOwoJICAgIHZhciBudW1iZXJpbmdTeXN0ZW1SID0gbnVtYmVyaW5nU3lzdGVtIHx8IFNldHRpbmdzLmRlZmF1bHROdW1iZXJpbmdTeXN0ZW07CgkgICAgdmFyIG91dHB1dENhbGVuZGFyUiA9IG91dHB1dENhbGVuZGFyIHx8IFNldHRpbmdzLmRlZmF1bHRPdXRwdXRDYWxlbmRhcjsKCSAgICByZXR1cm4gbmV3IExvY2FsZShsb2NhbGVSLCBudW1iZXJpbmdTeXN0ZW1SLCBvdXRwdXRDYWxlbmRhclIsIHNwZWNpZmllZExvY2FsZSk7CgkgIH07CgoJICBMb2NhbGUucmVzZXRDYWNoZSA9IGZ1bmN0aW9uIHJlc2V0Q2FjaGUoKSB7CgkgICAgc3lzTG9jYWxlQ2FjaGUgPSBudWxsOwoJICAgIGludGxEVENhY2hlID0ge307CgkgICAgaW50bE51bUNhY2hlID0ge307CgkgICAgaW50bFJlbENhY2hlID0ge307CgkgIH07CgoJICBMb2NhbGUuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3QoX3RlbXApIHsKCSAgICB2YXIgX3JlZiA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLAoJICAgICAgICBsb2NhbGUgPSBfcmVmLmxvY2FsZSwKCSAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX3JlZi5udW1iZXJpbmdTeXN0ZW0sCgkgICAgICAgIG91dHB1dENhbGVuZGFyID0gX3JlZi5vdXRwdXRDYWxlbmRhcjsKCgkgICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKTsKCSAgfTsKCgkgIGZ1bmN0aW9uIExvY2FsZShsb2NhbGUsIG51bWJlcmluZywgb3V0cHV0Q2FsZW5kYXIsIHNwZWNpZmllZExvY2FsZSkgewoJICAgIHZhciBfcGFyc2VMb2NhbGVTdHJpbmcgPSBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGUpLAoJICAgICAgICBwYXJzZWRMb2NhbGUgPSBfcGFyc2VMb2NhbGVTdHJpbmdbMF0sCgkgICAgICAgIHBhcnNlZE51bWJlcmluZ1N5c3RlbSA9IF9wYXJzZUxvY2FsZVN0cmluZ1sxXSwKCSAgICAgICAgcGFyc2VkT3V0cHV0Q2FsZW5kYXIgPSBfcGFyc2VMb2NhbGVTdHJpbmdbMl07CgoJICAgIHRoaXMubG9jYWxlID0gcGFyc2VkTG9jYWxlOwoJICAgIHRoaXMubnVtYmVyaW5nU3lzdGVtID0gbnVtYmVyaW5nIHx8IHBhcnNlZE51bWJlcmluZ1N5c3RlbSB8fCBudWxsOwoJICAgIHRoaXMub3V0cHV0Q2FsZW5kYXIgPSBvdXRwdXRDYWxlbmRhciB8fCBwYXJzZWRPdXRwdXRDYWxlbmRhciB8fCBudWxsOwoJICAgIHRoaXMuaW50bCA9IGludGxDb25maWdTdHJpbmcodGhpcy5sb2NhbGUsIHRoaXMubnVtYmVyaW5nU3lzdGVtLCB0aGlzLm91dHB1dENhbGVuZGFyKTsKCSAgICB0aGlzLndlZWtkYXlzQ2FjaGUgPSB7CgkgICAgICBmb3JtYXQ6IHt9LAoJICAgICAgc3RhbmRhbG9uZToge30KCSAgICB9OwoJICAgIHRoaXMubW9udGhzQ2FjaGUgPSB7CgkgICAgICBmb3JtYXQ6IHt9LAoJICAgICAgc3RhbmRhbG9uZToge30KCSAgICB9OwoJICAgIHRoaXMubWVyaWRpZW1DYWNoZSA9IG51bGw7CgkgICAgdGhpcy5lcmFDYWNoZSA9IHt9OwoJICAgIHRoaXMuc3BlY2lmaWVkTG9jYWxlID0gc3BlY2lmaWVkTG9jYWxlOwoJICAgIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQgPSBudWxsOwoJICB9CgoJICB2YXIgX3Byb3RvNCA9IExvY2FsZS5wcm90b3R5cGU7CgoJICBfcHJvdG80Lmxpc3RpbmdNb2RlID0gZnVuY3Rpb24gbGlzdGluZ01vZGUoZGVmYXVsdE9LKSB7CgoJICAgIHZhciBpc0FjdHVhbGx5RW4gPSB0aGlzLmlzRW5nbGlzaCgpOwoJICAgIHZhciBoYXNOb1dlaXJkbmVzcyA9ICh0aGlzLm51bWJlcmluZ1N5c3RlbSA9PT0gbnVsbCB8fCB0aGlzLm51bWJlcmluZ1N5c3RlbSA9PT0gImxhdG4iKSAmJiAodGhpcy5vdXRwdXRDYWxlbmRhciA9PT0gbnVsbCB8fCB0aGlzLm91dHB1dENhbGVuZGFyID09PSAiZ3JlZ29yeSIpOwoJICAgIHJldHVybiBpc0FjdHVhbGx5RW4gJiYgaGFzTm9XZWlyZG5lc3MgPyAiZW4iIDogImludGwiOwoJICB9OwoKCSAgX3Byb3RvNC5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lKGFsdHMpIHsKCSAgICBpZiAoIWFsdHMgfHwgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYWx0cykubGVuZ3RoID09PSAwKSB7CgkgICAgICByZXR1cm4gdGhpczsKCSAgICB9IGVsc2UgewoJICAgICAgcmV0dXJuIExvY2FsZS5jcmVhdGUoYWx0cy5sb2NhbGUgfHwgdGhpcy5zcGVjaWZpZWRMb2NhbGUsIGFsdHMubnVtYmVyaW5nU3lzdGVtIHx8IHRoaXMubnVtYmVyaW5nU3lzdGVtLCBhbHRzLm91dHB1dENhbGVuZGFyIHx8IHRoaXMub3V0cHV0Q2FsZW5kYXIsIGFsdHMuZGVmYXVsdFRvRU4gfHwgZmFsc2UpOwoJICAgIH0KCSAgfTsKCgkgIF9wcm90bzQucmVkZWZhdWx0VG9FTiA9IGZ1bmN0aW9uIHJlZGVmYXVsdFRvRU4oYWx0cykgewoJICAgIGlmIChhbHRzID09PSB2b2lkIDApIHsKCSAgICAgIGFsdHMgPSB7fTsKCSAgICB9CgoJICAgIHJldHVybiB0aGlzLmNsb25lKF9leHRlbmRzKHt9LCBhbHRzLCB7CgkgICAgICBkZWZhdWx0VG9FTjogdHJ1ZQoJICAgIH0pKTsKCSAgfTsKCgkgIF9wcm90bzQucmVkZWZhdWx0VG9TeXN0ZW0gPSBmdW5jdGlvbiByZWRlZmF1bHRUb1N5c3RlbShhbHRzKSB7CgkgICAgaWYgKGFsdHMgPT09IHZvaWQgMCkgewoJICAgICAgYWx0cyA9IHt9OwoJICAgIH0KCgkgICAgcmV0dXJuIHRoaXMuY2xvbmUoX2V4dGVuZHMoe30sIGFsdHMsIHsKCSAgICAgIGRlZmF1bHRUb0VOOiBmYWxzZQoJICAgIH0pKTsKCSAgfTsKCgkgIF9wcm90bzQubW9udGhzID0gZnVuY3Rpb24gbW9udGhzJDEobGVuZ3RoLCBmb3JtYXQsIGRlZmF1bHRPSykgewoJICAgIHZhciBfdGhpcyA9IHRoaXM7CgoJICAgIGlmIChmb3JtYXQgPT09IHZvaWQgMCkgewoJICAgICAgZm9ybWF0ID0gZmFsc2U7CgkgICAgfQoKCSAgICBpZiAoZGVmYXVsdE9LID09PSB2b2lkIDApIHsKCSAgICAgIGRlZmF1bHRPSyA9IHRydWU7CgkgICAgfQoKCSAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIGxlbmd0aCwgZGVmYXVsdE9LLCBtb250aHMsIGZ1bmN0aW9uICgpIHsKCSAgICAgIHZhciBpbnRsID0gZm9ybWF0ID8gewoJICAgICAgICBtb250aDogbGVuZ3RoLAoJICAgICAgICBkYXk6ICJudW1lcmljIgoJICAgICAgfSA6IHsKCSAgICAgICAgbW9udGg6IGxlbmd0aAoJICAgICAgfSwKCSAgICAgICAgICBmb3JtYXRTdHIgPSBmb3JtYXQgPyAiZm9ybWF0IiA6ICJzdGFuZGFsb25lIjsKCgkgICAgICBpZiAoIV90aGlzLm1vbnRoc0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSkgewoJICAgICAgICBfdGhpcy5tb250aHNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF0gPSBtYXBNb250aHMoZnVuY3Rpb24gKGR0KSB7CgkgICAgICAgICAgcmV0dXJuIF90aGlzLmV4dHJhY3QoZHQsIGludGwsICJtb250aCIpOwoJICAgICAgICB9KTsKCSAgICAgIH0KCgkgICAgICByZXR1cm4gX3RoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdOwoJICAgIH0pOwoJICB9OwoKCSAgX3Byb3RvNC53ZWVrZGF5cyA9IGZ1bmN0aW9uIHdlZWtkYXlzJDEobGVuZ3RoLCBmb3JtYXQsIGRlZmF1bHRPSykgewoJICAgIHZhciBfdGhpczIgPSB0aGlzOwoKCSAgICBpZiAoZm9ybWF0ID09PSB2b2lkIDApIHsKCSAgICAgIGZvcm1hdCA9IGZhbHNlOwoJICAgIH0KCgkgICAgaWYgKGRlZmF1bHRPSyA9PT0gdm9pZCAwKSB7CgkgICAgICBkZWZhdWx0T0sgPSB0cnVlOwoJICAgIH0KCgkgICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIGRlZmF1bHRPSywgd2Vla2RheXMsIGZ1bmN0aW9uICgpIHsKCSAgICAgIHZhciBpbnRsID0gZm9ybWF0ID8gewoJICAgICAgICB3ZWVrZGF5OiBsZW5ndGgsCgkgICAgICAgIHllYXI6ICJudW1lcmljIiwKCSAgICAgICAgbW9udGg6ICJsb25nIiwKCSAgICAgICAgZGF5OiAibnVtZXJpYyIKCSAgICAgIH0gOiB7CgkgICAgICAgIHdlZWtkYXk6IGxlbmd0aAoJICAgICAgfSwKCSAgICAgICAgICBmb3JtYXRTdHIgPSBmb3JtYXQgPyAiZm9ybWF0IiA6ICJzdGFuZGFsb25lIjsKCgkgICAgICBpZiAoIV90aGlzMi53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSkgewoJICAgICAgICBfdGhpczIud2Vla2RheXNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF0gPSBtYXBXZWVrZGF5cyhmdW5jdGlvbiAoZHQpIHsKCSAgICAgICAgICByZXR1cm4gX3RoaXMyLmV4dHJhY3QoZHQsIGludGwsICJ3ZWVrZGF5Iik7CgkgICAgICAgIH0pOwoJICAgICAgfQoKCSAgICAgIHJldHVybiBfdGhpczIud2Vla2RheXNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF07CgkgICAgfSk7CgkgIH07CgoJICBfcHJvdG80Lm1lcmlkaWVtcyA9IGZ1bmN0aW9uIG1lcmlkaWVtcyQxKGRlZmF1bHRPSykgewoJICAgIHZhciBfdGhpczMgPSB0aGlzOwoKCSAgICBpZiAoZGVmYXVsdE9LID09PSB2b2lkIDApIHsKCSAgICAgIGRlZmF1bHRPSyA9IHRydWU7CgkgICAgfQoKCSAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIHVuZGVmaW5lZCwgZGVmYXVsdE9LLCBmdW5jdGlvbiAoKSB7CgkgICAgICByZXR1cm4gbWVyaWRpZW1zOwoJICAgIH0sIGZ1bmN0aW9uICgpIHsKCSAgICAgIC8vIEluIHRoZW9yeSB0aGVyZSBjb3VsZCBiZSBhcmliaXRyYXJ5IGRheSBwZXJpb2RzLiBXZSdyZSBnb25uYSBhc3N1bWUgdGhlcmUgYXJlIGV4YWN0bHkgdHdvCgkgICAgICAvLyBmb3IgQU0gYW5kIFBNLiBUaGlzIGlzIHByb2JhYmx5IHdyb25nLCBidXQgaXQncyBtYWtlcyBwYXJzaW5nIHdheSBlYXNpZXIuCgkgICAgICBpZiAoIV90aGlzMy5tZXJpZGllbUNhY2hlKSB7CgkgICAgICAgIHZhciBpbnRsID0gewoJICAgICAgICAgIGhvdXI6ICJudW1lcmljIiwKCSAgICAgICAgICBob3VyQ3ljbGU6ICJoMTIiCgkgICAgICAgIH07CgkgICAgICAgIF90aGlzMy5tZXJpZGllbUNhY2hlID0gW0RhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMsIDkpLCBEYXRlVGltZS51dGMoMjAxNiwgMTEsIDEzLCAxOSldLm1hcChmdW5jdGlvbiAoZHQpIHsKCSAgICAgICAgICByZXR1cm4gX3RoaXMzLmV4dHJhY3QoZHQsIGludGwsICJkYXlwZXJpb2QiKTsKCSAgICAgICAgfSk7CgkgICAgICB9CgoJICAgICAgcmV0dXJuIF90aGlzMy5tZXJpZGllbUNhY2hlOwoJICAgIH0pOwoJICB9OwoKCSAgX3Byb3RvNC5lcmFzID0gZnVuY3Rpb24gZXJhcyQxKGxlbmd0aCwgZGVmYXVsdE9LKSB7CgkgICAgdmFyIF90aGlzNCA9IHRoaXM7CgoJICAgIGlmIChkZWZhdWx0T0sgPT09IHZvaWQgMCkgewoJICAgICAgZGVmYXVsdE9LID0gdHJ1ZTsKCSAgICB9CgoJICAgIHJldHVybiBsaXN0U3R1ZmYodGhpcywgbGVuZ3RoLCBkZWZhdWx0T0ssIGVyYXMsIGZ1bmN0aW9uICgpIHsKCSAgICAgIHZhciBpbnRsID0gewoJICAgICAgICBlcmE6IGxlbmd0aAoJICAgICAgfTsgLy8gVGhpcyBpcyBwcm9ibGVtYXRpYy4gRGlmZmVyZW50IGNhbGVuZGFycyBhcmUgZ29pbmcgdG8gZGVmaW5lIGVyYXMgdG90YWxseSBkaWZmZXJlbnRseS4gV2hhdCBJIG5lZWQgaXMgdGhlIG1pbmltdW0gc2V0IG9mIGRhdGVzCgkgICAgICAvLyB0byBkZWZpbml0ZWx5IGVudW1lcmF0ZSB0aGVtLgoKCSAgICAgIGlmICghX3RoaXM0LmVyYUNhY2hlW2xlbmd0aF0pIHsKCSAgICAgICAgX3RoaXM0LmVyYUNhY2hlW2xlbmd0aF0gPSBbRGF0ZVRpbWUudXRjKC00MCwgMSwgMSksIERhdGVUaW1lLnV0YygyMDE3LCAxLCAxKV0ubWFwKGZ1bmN0aW9uIChkdCkgewoJICAgICAgICAgIHJldHVybiBfdGhpczQuZXh0cmFjdChkdCwgaW50bCwgImVyYSIpOwoJICAgICAgICB9KTsKCSAgICAgIH0KCgkgICAgICByZXR1cm4gX3RoaXM0LmVyYUNhY2hlW2xlbmd0aF07CgkgICAgfSk7CgkgIH07CgoJICBfcHJvdG80LmV4dHJhY3QgPSBmdW5jdGlvbiBleHRyYWN0KGR0LCBpbnRsT3B0cywgZmllbGQpIHsKCSAgICB2YXIgZGYgPSB0aGlzLmR0Rm9ybWF0dGVyKGR0LCBpbnRsT3B0cyksCgkgICAgICAgIHJlc3VsdHMgPSBkZi5mb3JtYXRUb1BhcnRzKCksCgkgICAgICAgIG1hdGNoaW5nID0gcmVzdWx0cy5maW5kKGZ1bmN0aW9uIChtKSB7CgkgICAgICByZXR1cm4gbS50eXBlLnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkOwoJICAgIH0pOwoJICAgIHJldHVybiBtYXRjaGluZyA/IG1hdGNoaW5nLnZhbHVlIDogbnVsbDsKCSAgfTsKCgkgIF9wcm90bzQubnVtYmVyRm9ybWF0dGVyID0gZnVuY3Rpb24gbnVtYmVyRm9ybWF0dGVyKG9wdHMpIHsKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICAvLyB0aGlzIGZvcmNlc2ltcGxlIG9wdGlvbiBpcyBuZXZlciB1c2VkICh0aGUgb25seSBjYWxsZXIgc2hvcnQtY2lyY3VpdHMgb24gaXQsIGJ1dCBpdCBzZWVtcyBzYWZlciB0byBsZWF2ZSkKCSAgICAvLyAoaW4gY29udHJhc3QsIHRoZSByZXN0IG9mIHRoZSBjb25kaXRpb24gaXMgdXNlZCBoZWF2aWx5KQoJICAgIHJldHVybiBuZXcgUG9seU51bWJlckZvcm1hdHRlcih0aGlzLmludGwsIG9wdHMuZm9yY2VTaW1wbGUgfHwgdGhpcy5mYXN0TnVtYmVycywgb3B0cyk7CgkgIH07CgoJICBfcHJvdG80LmR0Rm9ybWF0dGVyID0gZnVuY3Rpb24gZHRGb3JtYXR0ZXIoZHQsIGludGxPcHRzKSB7CgkgICAgaWYgKGludGxPcHRzID09PSB2b2lkIDApIHsKCSAgICAgIGludGxPcHRzID0ge307CgkgICAgfQoKCSAgICByZXR1cm4gbmV3IFBvbHlEYXRlRm9ybWF0dGVyKGR0LCB0aGlzLmludGwsIGludGxPcHRzKTsKCSAgfTsKCgkgIF9wcm90bzQucmVsRm9ybWF0dGVyID0gZnVuY3Rpb24gcmVsRm9ybWF0dGVyKG9wdHMpIHsKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICByZXR1cm4gbmV3IFBvbHlSZWxGb3JtYXR0ZXIodGhpcy5pbnRsLCB0aGlzLmlzRW5nbGlzaCgpLCBvcHRzKTsKCSAgfTsKCgkgIF9wcm90bzQuaXNFbmdsaXNoID0gZnVuY3Rpb24gaXNFbmdsaXNoKCkgewoJICAgIHJldHVybiB0aGlzLmxvY2FsZSA9PT0gImVuIiB8fCB0aGlzLmxvY2FsZS50b0xvd2VyQ2FzZSgpID09PSAiZW4tdXMiIHx8IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMuaW50bCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlLnN0YXJ0c1dpdGgoImVuLXVzIik7CgkgIH07CgoJICBfcHJvdG80LmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhvdGhlcikgewoJICAgIHJldHVybiB0aGlzLmxvY2FsZSA9PT0gb3RoZXIubG9jYWxlICYmIHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBvdGhlci5udW1iZXJpbmdTeXN0ZW0gJiYgdGhpcy5vdXRwdXRDYWxlbmRhciA9PT0gb3RoZXIub3V0cHV0Q2FsZW5kYXI7CgkgIH07CgoJICBfY3JlYXRlQ2xhc3MoTG9jYWxlLCBbewoJICAgIGtleTogImZhc3ROdW1iZXJzIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIGlmICh0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkID09IG51bGwpIHsKCSAgICAgICAgdGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9IHN1cHBvcnRzRmFzdE51bWJlcnModGhpcyk7CgkgICAgICB9CgoJICAgICAgcmV0dXJuIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQ7CgkgICAgfQoJICB9XSk7CgoJICByZXR1cm4gTG9jYWxlOwoJfSgpOwoKCS8qCgkgKiBUaGlzIGZpbGUgaGFuZGxlcyBwYXJzaW5nIGZvciB3ZWxsLXNwZWNpZmllZCBmb3JtYXRzLiBIZXJlJ3MgaG93IGl0IHdvcmtzOgoJICogVHdvIHRoaW5ncyBnbyBpbnRvIHBhcnNpbmc6IGEgcmVnZXggdG8gbWF0Y2ggd2l0aCBhbmQgYW4gZXh0cmFjdG9yIHRvIHRha2UgYXBhcnQgdGhlIGdyb3VwcyBpbiB0aGUgbWF0Y2guCgkgKiBBbiBleHRyYWN0b3IgaXMganVzdCBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSByZWdleCBtYXRjaCBhcnJheSBhbmQgcmV0dXJucyBhIHsgeWVhcjogLi4uLCBtb250aDogLi4uIH0gb2JqZWN0CgkgKiBwYXJzZSgpIGRvZXMgdGhlIHdvcmsgb2YgZXhlY3V0aW5nIHRoZSByZWdleCBhbmQgYXBwbHlpbmcgdGhlIGV4dHJhY3Rvci4gSXQgdGFrZXMgbXVsdGlwbGUgcmVnZXgvZXh0cmFjdG9yIHBhaXJzIHRvIHRyeSBpbiBzZXF1ZW5jZS4KCSAqIEV4dHJhY3RvcnMgY2FuIHRha2UgYSAiY3Vyc29yIiByZXByZXNlbnRpbmcgdGhlIG9mZnNldCBpbiB0aGUgbWF0Y2ggdG8gbG9vayBhdC4gVGhpcyBtYWtlcyBpdCBlYXN5IHRvIGNvbWJpbmUgZXh0cmFjdG9ycy4KCSAqIGNvbWJpbmVFeHRyYWN0b3JzKCkgZG9lcyB0aGUgd29yayBvZiBjb21iaW5pbmcgdGhlbSwga2VlcGluZyB0cmFjayBvZiB0aGUgY3Vyc29yIHRocm91Z2ggbXVsdGlwbGUgZXh0cmFjdGlvbnMuCgkgKiBTb21lIGV4dHJhY3Rpb25zIGFyZSBzdXBlciBkdW1iIGFuZCBzaW1wbGVQYXJzZSBhbmQgZnJvbVN0cmluZ3MgaGVscCBEUlkgdGhlbS4KCSAqLwoKCWZ1bmN0aW9uIGNvbWJpbmVSZWdleGVzKCkgewoJICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVnZXhlcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKCSAgICByZWdleGVzW19rZXldID0gYXJndW1lbnRzW19rZXldOwoJICB9CgoJICB2YXIgZnVsbCA9IHJlZ2V4ZXMucmVkdWNlKGZ1bmN0aW9uIChmLCByKSB7CgkgICAgcmV0dXJuIGYgKyByLnNvdXJjZTsKCSAgfSwgIiIpOwoJICByZXR1cm4gUmVnRXhwKCJeIiArIGZ1bGwgKyAiJCIpOwoJfQoKCWZ1bmN0aW9uIGNvbWJpbmVFeHRyYWN0b3JzKCkgewoJICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGV4dHJhY3RvcnMgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHsKCSAgICBleHRyYWN0b3JzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07CgkgIH0KCgkgIHJldHVybiBmdW5jdGlvbiAobSkgewoJICAgIHJldHVybiBleHRyYWN0b3JzLnJlZHVjZShmdW5jdGlvbiAoX3JlZiwgZXgpIHsKCSAgICAgIHZhciBtZXJnZWRWYWxzID0gX3JlZlswXSwKCSAgICAgICAgICBtZXJnZWRab25lID0gX3JlZlsxXSwKCSAgICAgICAgICBjdXJzb3IgPSBfcmVmWzJdOwoKCSAgICAgIHZhciBfZXggPSBleChtLCBjdXJzb3IpLAoJICAgICAgICAgIHZhbCA9IF9leFswXSwKCSAgICAgICAgICB6b25lID0gX2V4WzFdLAoJICAgICAgICAgIG5leHQgPSBfZXhbMl07CgoJICAgICAgcmV0dXJuIFtfZXh0ZW5kcyh7fSwgbWVyZ2VkVmFscywgdmFsKSwgbWVyZ2VkWm9uZSB8fCB6b25lLCBuZXh0XTsKCSAgICB9LCBbe30sIG51bGwsIDFdKS5zbGljZSgwLCAyKTsKCSAgfTsKCX0KCglmdW5jdGlvbiBwYXJzZShzKSB7CgkgIGlmIChzID09IG51bGwpIHsKCSAgICByZXR1cm4gW251bGwsIG51bGxdOwoJICB9CgoJICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHBhdHRlcm5zID0gbmV3IEFycmF5KF9sZW4zID4gMSA/IF9sZW4zIC0gMSA6IDApLCBfa2V5MyA9IDE7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHsKCSAgICBwYXR0ZXJuc1tfa2V5MyAtIDFdID0gYXJndW1lbnRzW19rZXkzXTsKCSAgfQoKCSAgZm9yICh2YXIgX2kgPSAwLCBfcGF0dGVybnMgPSBwYXR0ZXJuczsgX2kgPCBfcGF0dGVybnMubGVuZ3RoOyBfaSsrKSB7CgkgICAgdmFyIF9wYXR0ZXJucyRfaSA9IF9wYXR0ZXJuc1tfaV0sCgkgICAgICAgIHJlZ2V4ID0gX3BhdHRlcm5zJF9pWzBdLAoJICAgICAgICBleHRyYWN0b3IgPSBfcGF0dGVybnMkX2lbMV07CgkgICAgdmFyIG0gPSByZWdleC5leGVjKHMpOwoKCSAgICBpZiAobSkgewoJICAgICAgcmV0dXJuIGV4dHJhY3RvcihtKTsKCSAgICB9CgkgIH0KCgkgIHJldHVybiBbbnVsbCwgbnVsbF07Cgl9CgoJZnVuY3Rpb24gc2ltcGxlUGFyc2UoKSB7CgkgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwga2V5cyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykgewoJICAgIGtleXNbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTsKCSAgfQoKCSAgcmV0dXJuIGZ1bmN0aW9uIChtYXRjaCwgY3Vyc29yKSB7CgkgICAgdmFyIHJldCA9IHt9OwoJICAgIHZhciBpOwoKCSAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewoJICAgICAgcmV0W2tleXNbaV1dID0gcGFyc2VJbnRlZ2VyKG1hdGNoW2N1cnNvciArIGldKTsKCSAgICB9CgoJICAgIHJldHVybiBbcmV0LCBudWxsLCBjdXJzb3IgKyBpXTsKCSAgfTsKCX0gLy8gSVNPIGFuZCBTUUwgcGFyc2luZwoKCgl2YXIgb2Zmc2V0UmVnZXggPSAvKD86KFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/KS8sCgkgICAgaXNvVGltZUJhc2VSZWdleCA9IC8oXGRcZCkoPzo6PyhcZFxkKSg/Ojo/KFxkXGQpKD86Wy4sXShcZHsxLDMwfSkpPyk/KT8vLAoJICAgIGlzb1RpbWVSZWdleCA9IFJlZ0V4cCgiIiArIGlzb1RpbWVCYXNlUmVnZXguc291cmNlICsgb2Zmc2V0UmVnZXguc291cmNlICsgIj8iKSwKCSAgICBpc29UaW1lRXh0ZW5zaW9uUmVnZXggPSBSZWdFeHAoIig/OlQiICsgaXNvVGltZVJlZ2V4LnNvdXJjZSArICIpPyIpLAoJICAgIGlzb1ltZFJlZ2V4ID0gLyhbKy1dXGR7Nn18XGR7NH0pKD86LT8oXGRcZCkoPzotPyhcZFxkKSk/KT8vLAoJICAgIGlzb1dlZWtSZWdleCA9IC8oXGR7NH0pLT9XKFxkXGQpKD86LT8oXGQpKT8vLAoJICAgIGlzb09yZGluYWxSZWdleCA9IC8oXGR7NH0pLT8oXGR7M30pLywKCSAgICBleHRyYWN0SVNPV2Vla0RhdGEgPSBzaW1wbGVQYXJzZSgid2Vla1llYXIiLCAid2Vla051bWJlciIsICJ3ZWVrRGF5IiksCgkgICAgZXh0cmFjdElTT09yZGluYWxEYXRhID0gc2ltcGxlUGFyc2UoInllYXIiLCAib3JkaW5hbCIpLAoJICAgIHNxbFltZFJlZ2V4ID0gLyhcZHs0fSktKFxkXGQpLShcZFxkKS8sCgkgICAgLy8gZHVtYmVkLWRvd24gdmVyc2lvbiBvZiB0aGUgSVNPIG9uZQoJc3FsVGltZVJlZ2V4ID0gUmVnRXhwKGlzb1RpbWVCYXNlUmVnZXguc291cmNlICsgIiA/KD86IiArIG9mZnNldFJlZ2V4LnNvdXJjZSArICJ8KCIgKyBpYW5hUmVnZXguc291cmNlICsgIikpPyIpLAoJICAgIHNxbFRpbWVFeHRlbnNpb25SZWdleCA9IFJlZ0V4cCgiKD86ICIgKyBzcWxUaW1lUmVnZXguc291cmNlICsgIik/Iik7CgoJZnVuY3Rpb24gaW50KG1hdGNoLCBwb3MsIGZhbGxiYWNrKSB7CgkgIHZhciBtID0gbWF0Y2hbcG9zXTsKCSAgcmV0dXJuIGlzVW5kZWZpbmVkKG0pID8gZmFsbGJhY2sgOiBwYXJzZUludGVnZXIobSk7Cgl9CgoJZnVuY3Rpb24gZXh0cmFjdElTT1ltZChtYXRjaCwgY3Vyc29yKSB7CgkgIHZhciBpdGVtID0gewoJICAgIHllYXI6IGludChtYXRjaCwgY3Vyc29yKSwKCSAgICBtb250aDogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAxKSwKCSAgICBkYXk6IGludChtYXRjaCwgY3Vyc29yICsgMiwgMSkKCSAgfTsKCSAgcmV0dXJuIFtpdGVtLCBudWxsLCBjdXJzb3IgKyAzXTsKCX0KCglmdW5jdGlvbiBleHRyYWN0SVNPVGltZShtYXRjaCwgY3Vyc29yKSB7CgkgIHZhciBpdGVtID0gewoJICAgIGhvdXJzOiBpbnQobWF0Y2gsIGN1cnNvciwgMCksCgkgICAgbWludXRlczogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAwKSwKCSAgICBzZWNvbmRzOiBpbnQobWF0Y2gsIGN1cnNvciArIDIsIDApLAoJICAgIG1pbGxpc2Vjb25kczogcGFyc2VNaWxsaXMobWF0Y2hbY3Vyc29yICsgM10pCgkgIH07CgkgIHJldHVybiBbaXRlbSwgbnVsbCwgY3Vyc29yICsgNF07Cgl9CgoJZnVuY3Rpb24gZXh0cmFjdElTT09mZnNldChtYXRjaCwgY3Vyc29yKSB7CgkgIHZhciBsb2NhbCA9ICFtYXRjaFtjdXJzb3JdICYmICFtYXRjaFtjdXJzb3IgKyAxXSwKCSAgICAgIGZ1bGxPZmZzZXQgPSBzaWduZWRPZmZzZXQobWF0Y2hbY3Vyc29yICsgMV0sIG1hdGNoW2N1cnNvciArIDJdKSwKCSAgICAgIHpvbmUgPSBsb2NhbCA/IG51bGwgOiBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UoZnVsbE9mZnNldCk7CgkgIHJldHVybiBbe30sIHpvbmUsIGN1cnNvciArIDNdOwoJfQoKCWZ1bmN0aW9uIGV4dHJhY3RJQU5BWm9uZShtYXRjaCwgY3Vyc29yKSB7CgkgIHZhciB6b25lID0gbWF0Y2hbY3Vyc29yXSA/IElBTkFab25lLmNyZWF0ZShtYXRjaFtjdXJzb3JdKSA6IG51bGw7CgkgIHJldHVybiBbe30sIHpvbmUsIGN1cnNvciArIDFdOwoJfSAvLyBJU08gdGltZSBwYXJzaW5nCgoKCXZhciBpc29UaW1lT25seSA9IFJlZ0V4cCgiXlQ/IiArIGlzb1RpbWVCYXNlUmVnZXguc291cmNlICsgIiQiKTsgLy8gSVNPIGR1cmF0aW9uIHBhcnNpbmcKCgl2YXIgaXNvRHVyYXRpb24gPSAvXi0/UCg/Oig/OigtP1xkezEsOX0oPzpcLlxkezEsOX0pPylZKT8oPzooLT9cZHsxLDl9KD86XC5cZHsxLDl9KT8pTSk/KD86KC0/XGR7MSw5fSg/OlwuXGR7MSw5fSk/KVcpPyg/OigtP1xkezEsOX0oPzpcLlxkezEsOX0pPylEKT8oPzpUKD86KC0/XGR7MSw5fSg/OlwuXGR7MSw5fSk/KUgpPyg/OigtP1xkezEsOX0oPzpcLlxkezEsOX0pPylNKT8oPzooLT9cZHsxLDIwfSkoPzpbLixdKC0/XGR7MSw5fSkpP1MpPyk/KSQvOwoKCWZ1bmN0aW9uIGV4dHJhY3RJU09EdXJhdGlvbihtYXRjaCkgewoJICB2YXIgcyA9IG1hdGNoWzBdLAoJICAgICAgeWVhclN0ciA9IG1hdGNoWzFdLAoJICAgICAgbW9udGhTdHIgPSBtYXRjaFsyXSwKCSAgICAgIHdlZWtTdHIgPSBtYXRjaFszXSwKCSAgICAgIGRheVN0ciA9IG1hdGNoWzRdLAoJICAgICAgaG91clN0ciA9IG1hdGNoWzVdLAoJICAgICAgbWludXRlU3RyID0gbWF0Y2hbNl0sCgkgICAgICBzZWNvbmRTdHIgPSBtYXRjaFs3XSwKCSAgICAgIG1pbGxpc2Vjb25kc1N0ciA9IG1hdGNoWzhdOwoJICB2YXIgaGFzTmVnYXRpdmVQcmVmaXggPSBzWzBdID09PSAiLSI7CgkgIHZhciBuZWdhdGl2ZVNlY29uZHMgPSBzZWNvbmRTdHIgJiYgc2Vjb25kU3RyWzBdID09PSAiLSI7CgoJICB2YXIgbWF5YmVOZWdhdGUgPSBmdW5jdGlvbiBtYXliZU5lZ2F0ZShudW0sIGZvcmNlKSB7CgkgICAgaWYgKGZvcmNlID09PSB2b2lkIDApIHsKCSAgICAgIGZvcmNlID0gZmFsc2U7CgkgICAgfQoKCSAgICByZXR1cm4gbnVtICE9PSB1bmRlZmluZWQgJiYgKGZvcmNlIHx8IG51bSAmJiBoYXNOZWdhdGl2ZVByZWZpeCkgPyAtbnVtIDogbnVtOwoJICB9OwoKCSAgcmV0dXJuIFt7CgkgICAgeWVhcnM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoeWVhclN0cikpLAoJICAgIG1vbnRoczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhtb250aFN0cikpLAoJICAgIHdlZWtzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKHdlZWtTdHIpKSwKCSAgICBkYXlzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKGRheVN0cikpLAoJICAgIGhvdXJzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKGhvdXJTdHIpKSwKCSAgICBtaW51dGVzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKG1pbnV0ZVN0cikpLAoJICAgIHNlY29uZHM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcoc2Vjb25kU3RyKSwgc2Vjb25kU3RyID09PSAiLTAiKSwKCSAgICBtaWxsaXNlY29uZHM6IG1heWJlTmVnYXRlKHBhcnNlTWlsbGlzKG1pbGxpc2Vjb25kc1N0ciksIG5lZ2F0aXZlU2Vjb25kcykKCSAgfV07Cgl9IC8vIFRoZXNlIGFyZSBhIGxpdHRsZSBicmFpbmRlYWQuIEVEVCAqc2hvdWxkKiB0ZWxsIHVzIHRoYXQgd2UncmUgaW4sIHNheSwgQW1lcmljYS9OZXdfWW9yawoJLy8gYW5kIG5vdCBqdXN0IHRoYXQgd2UncmUgaW4gLTI0MCAqcmlnaHQgbm93Ki4gQnV0IHNpbmNlIEkgZG9uJ3QgdGhpbmsgdGhlc2UgYXJlIHVzZWQgdGhhdCBvZnRlbgoJLy8gSSdtIGp1c3QgZ29pbmcgdG8gaWdub3JlIHRoYXQKCgoJdmFyIG9ic09mZnNldHMgPSB7CgkgIEdNVDogMCwKCSAgRURUOiAtNCAqIDYwLAoJICBFU1Q6IC01ICogNjAsCgkgIENEVDogLTUgKiA2MCwKCSAgQ1NUOiAtNiAqIDYwLAoJICBNRFQ6IC02ICogNjAsCgkgIE1TVDogLTcgKiA2MCwKCSAgUERUOiAtNyAqIDYwLAoJICBQU1Q6IC04ICogNjAKCX07CgoJZnVuY3Rpb24gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpIHsKCSAgdmFyIHJlc3VsdCA9IHsKCSAgICB5ZWFyOiB5ZWFyU3RyLmxlbmd0aCA9PT0gMiA/IHVudHJ1bmNhdGVZZWFyKHBhcnNlSW50ZWdlcih5ZWFyU3RyKSkgOiBwYXJzZUludGVnZXIoeWVhclN0ciksCgkgICAgbW9udGg6IG1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpICsgMSwKCSAgICBkYXk6IHBhcnNlSW50ZWdlcihkYXlTdHIpLAoJICAgIGhvdXI6IHBhcnNlSW50ZWdlcihob3VyU3RyKSwKCSAgICBtaW51dGU6IHBhcnNlSW50ZWdlcihtaW51dGVTdHIpCgkgIH07CgkgIGlmIChzZWNvbmRTdHIpIHJlc3VsdC5zZWNvbmQgPSBwYXJzZUludGVnZXIoc2Vjb25kU3RyKTsKCgkgIGlmICh3ZWVrZGF5U3RyKSB7CgkgICAgcmVzdWx0LndlZWtkYXkgPSB3ZWVrZGF5U3RyLmxlbmd0aCA+IDMgPyB3ZWVrZGF5c0xvbmcuaW5kZXhPZih3ZWVrZGF5U3RyKSArIDEgOiB3ZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0cikgKyAxOwoJICB9CgoJICByZXR1cm4gcmVzdWx0OwoJfSAvLyBSRkMgMjgyMi81MzIyCgoKCXZhciByZmMyODIyID0gL14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSxccyk/KFxkezEsMn0pXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXHMoXGR7Miw0fSlccyhcZFxkKTooXGRcZCkoPzo6KFxkXGQpKT9ccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoPzooWystXVxkXGQpKFxkXGQpKSkkLzsKCglmdW5jdGlvbiBleHRyYWN0UkZDMjgyMihtYXRjaCkgewoJICB2YXIgd2Vla2RheVN0ciA9IG1hdGNoWzFdLAoJICAgICAgZGF5U3RyID0gbWF0Y2hbMl0sCgkgICAgICBtb250aFN0ciA9IG1hdGNoWzNdLAoJICAgICAgeWVhclN0ciA9IG1hdGNoWzRdLAoJICAgICAgaG91clN0ciA9IG1hdGNoWzVdLAoJICAgICAgbWludXRlU3RyID0gbWF0Y2hbNl0sCgkgICAgICBzZWNvbmRTdHIgPSBtYXRjaFs3XSwKCSAgICAgIG9ic09mZnNldCA9IG1hdGNoWzhdLAoJICAgICAgbWlsT2Zmc2V0ID0gbWF0Y2hbOV0sCgkgICAgICBvZmZIb3VyU3RyID0gbWF0Y2hbMTBdLAoJICAgICAgb2ZmTWludXRlU3RyID0gbWF0Y2hbMTFdLAoJICAgICAgcmVzdWx0ID0gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpOwoJICB2YXIgb2Zmc2V0OwoKCSAgaWYgKG9ic09mZnNldCkgewoJICAgIG9mZnNldCA9IG9ic09mZnNldHNbb2JzT2Zmc2V0XTsKCSAgfSBlbHNlIGlmIChtaWxPZmZzZXQpIHsKCSAgICBvZmZzZXQgPSAwOwoJICB9IGVsc2UgewoJICAgIG9mZnNldCA9IHNpZ25lZE9mZnNldChvZmZIb3VyU3RyLCBvZmZNaW51dGVTdHIpOwoJICB9CgoJICByZXR1cm4gW3Jlc3VsdCwgbmV3IEZpeGVkT2Zmc2V0Wm9uZShvZmZzZXQpXTsKCX0KCglmdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7CgkgIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlCgkgIHJldHVybiBzLnJlcGxhY2UoL1woW14pXSpcKXxbXG5cdF0vZywgIiAiKS5yZXBsYWNlKC8oXHNccyspL2csICIgIikudHJpbSgpOwoJfSAvLyBodHRwIGRhdGUKCgoJdmFyIHJmYzExMjMgPSAvXihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLCAoXGRcZCkgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAoXGR7NH0pIChcZFxkKTooXGRcZCk6KFxkXGQpIEdNVCQvLAoJICAgIHJmYzg1MCA9IC9eKE1vbmRheXxUdWVzZGF5fFdlZHNkYXl8VGh1cnNkYXl8RnJpZGF5fFNhdHVyZGF5fFN1bmRheSksIChcZFxkKS0oSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpLShcZFxkKSAoXGRcZCk6KFxkXGQpOihcZFxkKSBHTVQkLywKCSAgICBhc2NpaSA9IC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1bikgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAoIFxkfFxkXGQpIChcZFxkKTooXGRcZCk6KFxkXGQpIChcZHs0fSkkLzsKCglmdW5jdGlvbiBleHRyYWN0UkZDMTEyM09yODUwKG1hdGNoKSB7CgkgIHZhciB3ZWVrZGF5U3RyID0gbWF0Y2hbMV0sCgkgICAgICBkYXlTdHIgPSBtYXRjaFsyXSwKCSAgICAgIG1vbnRoU3RyID0gbWF0Y2hbM10sCgkgICAgICB5ZWFyU3RyID0gbWF0Y2hbNF0sCgkgICAgICBob3VyU3RyID0gbWF0Y2hbNV0sCgkgICAgICBtaW51dGVTdHIgPSBtYXRjaFs2XSwKCSAgICAgIHNlY29uZFN0ciA9IG1hdGNoWzddLAoJICAgICAgcmVzdWx0ID0gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpOwoJICByZXR1cm4gW3Jlc3VsdCwgRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlXTsKCX0KCglmdW5jdGlvbiBleHRyYWN0QVNDSUkobWF0Y2gpIHsKCSAgdmFyIHdlZWtkYXlTdHIgPSBtYXRjaFsxXSwKCSAgICAgIG1vbnRoU3RyID0gbWF0Y2hbMl0sCgkgICAgICBkYXlTdHIgPSBtYXRjaFszXSwKCSAgICAgIGhvdXJTdHIgPSBtYXRjaFs0XSwKCSAgICAgIG1pbnV0ZVN0ciA9IG1hdGNoWzVdLAoJICAgICAgc2Vjb25kU3RyID0gbWF0Y2hbNl0sCgkgICAgICB5ZWFyU3RyID0gbWF0Y2hbN10sCgkgICAgICByZXN1bHQgPSBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cik7CgkgIHJldHVybiBbcmVzdWx0LCBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2VdOwoJfQoKCXZhciBpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvWW1kUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7Cgl2YXIgaXNvV2Vla1dpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29XZWVrUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7Cgl2YXIgaXNvT3JkaW5hbFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29PcmRpbmFsUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7Cgl2YXIgaXNvVGltZUNvbWJpbmVkUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29UaW1lUmVnZXgpOwoJdmFyIGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0ID0gY29tYmluZUV4dHJhY3RvcnMoZXh0cmFjdElTT1ltZCwgZXh0cmFjdElTT1RpbWUsIGV4dHJhY3RJU09PZmZzZXQpOwoJdmFyIGV4dHJhY3RJU09XZWVrVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKGV4dHJhY3RJU09XZWVrRGF0YSwgZXh0cmFjdElTT1RpbWUsIGV4dHJhY3RJU09PZmZzZXQpOwoJdmFyIGV4dHJhY3RJU09PcmRpbmFsRGF0ZUFuZFRpbWUgPSBjb21iaW5lRXh0cmFjdG9ycyhleHRyYWN0SVNPT3JkaW5hbERhdGEsIGV4dHJhY3RJU09UaW1lLCBleHRyYWN0SVNPT2Zmc2V0KTsKCXZhciBleHRyYWN0SVNPVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKGV4dHJhY3RJU09UaW1lLCBleHRyYWN0SVNPT2Zmc2V0KTsKCS8qKgoJICogQHByaXZhdGUKCSAqLwoKCWZ1bmN0aW9uIHBhcnNlSVNPRGF0ZShzKSB7CgkgIHJldHVybiBwYXJzZShzLCBbaXNvWW1kV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT1ltZFRpbWVBbmRPZmZzZXRdLCBbaXNvV2Vla1dpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09XZWVrVGltZUFuZE9mZnNldF0sIFtpc29PcmRpbmFsV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT09yZGluYWxEYXRlQW5kVGltZV0sIFtpc29UaW1lQ29tYmluZWRSZWdleCwgZXh0cmFjdElTT1RpbWVBbmRPZmZzZXRdKTsKCX0KCWZ1bmN0aW9uIHBhcnNlUkZDMjgyMkRhdGUocykgewoJICByZXR1cm4gcGFyc2UocHJlcHJvY2Vzc1JGQzI4MjIocyksIFtyZmMyODIyLCBleHRyYWN0UkZDMjgyMl0pOwoJfQoJZnVuY3Rpb24gcGFyc2VIVFRQRGF0ZShzKSB7CgkgIHJldHVybiBwYXJzZShzLCBbcmZjMTEyMywgZXh0cmFjdFJGQzExMjNPcjg1MF0sIFtyZmM4NTAsIGV4dHJhY3RSRkMxMTIzT3I4NTBdLCBbYXNjaWksIGV4dHJhY3RBU0NJSV0pOwoJfQoJZnVuY3Rpb24gcGFyc2VJU09EdXJhdGlvbihzKSB7CgkgIHJldHVybiBwYXJzZShzLCBbaXNvRHVyYXRpb24sIGV4dHJhY3RJU09EdXJhdGlvbl0pOwoJfQoJdmFyIGV4dHJhY3RJU09UaW1lT25seSA9IGNvbWJpbmVFeHRyYWN0b3JzKGV4dHJhY3RJU09UaW1lKTsKCWZ1bmN0aW9uIHBhcnNlSVNPVGltZU9ubHkocykgewoJICByZXR1cm4gcGFyc2UocywgW2lzb1RpbWVPbmx5LCBleHRyYWN0SVNPVGltZU9ubHldKTsKCX0KCXZhciBzcWxZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoc3FsWW1kUmVnZXgsIHNxbFRpbWVFeHRlbnNpb25SZWdleCk7Cgl2YXIgc3FsVGltZUNvbWJpbmVkUmVnZXggPSBjb21iaW5lUmVnZXhlcyhzcWxUaW1lUmVnZXgpOwoJdmFyIGV4dHJhY3RJU09ZbWRUaW1lT2Zmc2V0QW5kSUFOQVpvbmUgPSBjb21iaW5lRXh0cmFjdG9ycyhleHRyYWN0SVNPWW1kLCBleHRyYWN0SVNPVGltZSwgZXh0cmFjdElTT09mZnNldCwgZXh0cmFjdElBTkFab25lKTsKCXZhciBleHRyYWN0SVNPVGltZU9mZnNldEFuZElBTkFab25lID0gY29tYmluZUV4dHJhY3RvcnMoZXh0cmFjdElTT1RpbWUsIGV4dHJhY3RJU09PZmZzZXQsIGV4dHJhY3RJQU5BWm9uZSk7CglmdW5jdGlvbiBwYXJzZVNRTChzKSB7CgkgIHJldHVybiBwYXJzZShzLCBbc3FsWW1kV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT1ltZFRpbWVPZmZzZXRBbmRJQU5BWm9uZV0sIFtzcWxUaW1lQ29tYmluZWRSZWdleCwgZXh0cmFjdElTT1RpbWVPZmZzZXRBbmRJQU5BWm9uZV0pOwoJfQoKCXZhciBJTlZBTElEJDIgPSAiSW52YWxpZCBEdXJhdGlvbiI7IC8vIHVuaXQgY29udmVyc2lvbiBjb25zdGFudHMKCgl2YXIgbG93T3JkZXJNYXRyaXggPSB7CgkgIHdlZWtzOiB7CgkgICAgZGF5czogNywKCSAgICBob3VyczogNyAqIDI0LAoJICAgIG1pbnV0ZXM6IDcgKiAyNCAqIDYwLAoJICAgIHNlY29uZHM6IDcgKiAyNCAqIDYwICogNjAsCgkgICAgbWlsbGlzZWNvbmRzOiA3ICogMjQgKiA2MCAqIDYwICogMTAwMAoJICB9LAoJICBkYXlzOiB7CgkgICAgaG91cnM6IDI0LAoJICAgIG1pbnV0ZXM6IDI0ICogNjAsCgkgICAgc2Vjb25kczogMjQgKiA2MCAqIDYwLAoJICAgIG1pbGxpc2Vjb25kczogMjQgKiA2MCAqIDYwICogMTAwMAoJICB9LAoJICBob3VyczogewoJICAgIG1pbnV0ZXM6IDYwLAoJICAgIHNlY29uZHM6IDYwICogNjAsCgkgICAgbWlsbGlzZWNvbmRzOiA2MCAqIDYwICogMTAwMAoJICB9LAoJICBtaW51dGVzOiB7CgkgICAgc2Vjb25kczogNjAsCgkgICAgbWlsbGlzZWNvbmRzOiA2MCAqIDEwMDAKCSAgfSwKCSAgc2Vjb25kczogewoJICAgIG1pbGxpc2Vjb25kczogMTAwMAoJICB9Cgl9LAoJICAgIGNhc3VhbE1hdHJpeCA9IF9leHRlbmRzKHsKCSAgeWVhcnM6IHsKCSAgICBxdWFydGVyczogNCwKCSAgICBtb250aHM6IDEyLAoJICAgIHdlZWtzOiA1MiwKCSAgICBkYXlzOiAzNjUsCgkgICAgaG91cnM6IDM2NSAqIDI0LAoJICAgIG1pbnV0ZXM6IDM2NSAqIDI0ICogNjAsCgkgICAgc2Vjb25kczogMzY1ICogMjQgKiA2MCAqIDYwLAoJICAgIG1pbGxpc2Vjb25kczogMzY1ICogMjQgKiA2MCAqIDYwICogMTAwMAoJICB9LAoJICBxdWFydGVyczogewoJICAgIG1vbnRoczogMywKCSAgICB3ZWVrczogMTMsCgkgICAgZGF5czogOTEsCgkgICAgaG91cnM6IDkxICogMjQsCgkgICAgbWludXRlczogOTEgKiAyNCAqIDYwLAoJICAgIHNlY29uZHM6IDkxICogMjQgKiA2MCAqIDYwLAoJICAgIG1pbGxpc2Vjb25kczogOTEgKiAyNCAqIDYwICogNjAgKiAxMDAwCgkgIH0sCgkgIG1vbnRoczogewoJICAgIHdlZWtzOiA0LAoJICAgIGRheXM6IDMwLAoJICAgIGhvdXJzOiAzMCAqIDI0LAoJICAgIG1pbnV0ZXM6IDMwICogMjQgKiA2MCwKCSAgICBzZWNvbmRzOiAzMCAqIDI0ICogNjAgKiA2MCwKCSAgICBtaWxsaXNlY29uZHM6IDMwICogMjQgKiA2MCAqIDYwICogMTAwMAoJICB9Cgl9LCBsb3dPcmRlck1hdHJpeCksCgkgICAgZGF5c0luWWVhckFjY3VyYXRlID0gMTQ2MDk3LjAgLyA0MDAsCgkgICAgZGF5c0luTW9udGhBY2N1cmF0ZSA9IDE0NjA5Ny4wIC8gNDgwMCwKCSAgICBhY2N1cmF0ZU1hdHJpeCA9IF9leHRlbmRzKHsKCSAgeWVhcnM6IHsKCSAgICBxdWFydGVyczogNCwKCSAgICBtb250aHM6IDEyLAoJICAgIHdlZWtzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyA3LAoJICAgIGRheXM6IGRheXNJblllYXJBY2N1cmF0ZSwKCSAgICBob3VyczogZGF5c0luWWVhckFjY3VyYXRlICogMjQsCgkgICAgbWludXRlczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCwKCSAgICBzZWNvbmRzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjAsCgkgICAgbWlsbGlzZWNvbmRzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgKiAxMDAwCgkgIH0sCgkgIHF1YXJ0ZXJzOiB7CgkgICAgbW9udGhzOiAzLAoJICAgIHdlZWtzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyAyOCwKCSAgICBkYXlzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyA0LAoJICAgIGhvdXJzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAvIDQsCgkgICAgbWludXRlczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAvIDQsCgkgICAgc2Vjb25kczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwIC8gNCwKCSAgICBtaWxsaXNlY29uZHM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDAgLyA0CgkgIH0sCgkgIG1vbnRoczogewoJICAgIHdlZWtzOiBkYXlzSW5Nb250aEFjY3VyYXRlIC8gNywKCSAgICBkYXlzOiBkYXlzSW5Nb250aEFjY3VyYXRlLAoJICAgIGhvdXJzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQsCgkgICAgbWludXRlczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAsCgkgICAgc2Vjb25kczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCwKCSAgICBtaWxsaXNlY29uZHM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgKiAxMDAwCgkgIH0KCX0sIGxvd09yZGVyTWF0cml4KTsgLy8gdW5pdHMgb3JkZXJlZCBieSBzaXplCgoJdmFyIG9yZGVyZWRVbml0cyQxID0gWyJ5ZWFycyIsICJxdWFydGVycyIsICJtb250aHMiLCAid2Vla3MiLCAiZGF5cyIsICJob3VycyIsICJtaW51dGVzIiwgInNlY29uZHMiLCAibWlsbGlzZWNvbmRzIl07Cgl2YXIgcmV2ZXJzZVVuaXRzID0gb3JkZXJlZFVuaXRzJDEuc2xpY2UoMCkucmV2ZXJzZSgpOyAvLyBjbG9uZSByZWFsbHkgbWVhbnMgImNyZWF0ZSBhbm90aGVyIGluc3RhbmNlIGp1c3QgbGlrZSB0aGlzIG9uZSwgYnV0IHdpdGggdGhlc2UgY2hhbmdlcyIKCglmdW5jdGlvbiBjbG9uZSQxKGR1ciwgYWx0cywgY2xlYXIpIHsKCSAgaWYgKGNsZWFyID09PSB2b2lkIDApIHsKCSAgICBjbGVhciA9IGZhbHNlOwoJICB9CgoJICAvLyBkZWVwIG1lcmdlIGZvciB2YWxzCgkgIHZhciBjb25mID0gewoJICAgIHZhbHVlczogY2xlYXIgPyBhbHRzLnZhbHVlcyA6IF9leHRlbmRzKHt9LCBkdXIudmFsdWVzLCBhbHRzLnZhbHVlcyB8fCB7fSksCgkgICAgbG9jOiBkdXIubG9jLmNsb25lKGFsdHMubG9jKSwKCSAgICBjb252ZXJzaW9uQWNjdXJhY3k6IGFsdHMuY29udmVyc2lvbkFjY3VyYWN5IHx8IGR1ci5jb252ZXJzaW9uQWNjdXJhY3kKCSAgfTsKCSAgcmV0dXJuIG5ldyBEdXJhdGlvbihjb25mKTsKCX0KCglmdW5jdGlvbiBhbnRpVHJ1bmMobikgewoJICByZXR1cm4gbiA8IDAgPyBNYXRoLmZsb29yKG4pIDogTWF0aC5jZWlsKG4pOwoJfSAvLyBOQjogbXV0YXRlcyBwYXJhbWV0ZXJzCgoKCWZ1bmN0aW9uIGNvbnZlcnQobWF0cml4LCBmcm9tTWFwLCBmcm9tVW5pdCwgdG9NYXAsIHRvVW5pdCkgewoJICB2YXIgY29udiA9IG1hdHJpeFt0b1VuaXRdW2Zyb21Vbml0XSwKCSAgICAgIHJhdyA9IGZyb21NYXBbZnJvbVVuaXRdIC8gY29udiwKCSAgICAgIHNhbWVTaWduID0gTWF0aC5zaWduKHJhdykgPT09IE1hdGguc2lnbih0b01hcFt0b1VuaXRdKSwKCSAgICAgIC8vIG9rLCBzbyB0aGlzIGlzIHdpbGQsIGJ1dCBzZWUgdGhlIG1hdHJpeCBpbiB0aGUgdGVzdHMKCSAgYWRkZWQgPSAhc2FtZVNpZ24gJiYgdG9NYXBbdG9Vbml0XSAhPT0gMCAmJiBNYXRoLmFicyhyYXcpIDw9IDEgPyBhbnRpVHJ1bmMocmF3KSA6IE1hdGgudHJ1bmMocmF3KTsKCSAgdG9NYXBbdG9Vbml0XSArPSBhZGRlZDsKCSAgZnJvbU1hcFtmcm9tVW5pdF0gLT0gYWRkZWQgKiBjb252OwoJfSAvLyBOQjogbXV0YXRlcyBwYXJhbWV0ZXJzCgoKCWZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlcyhtYXRyaXgsIHZhbHMpIHsKCSAgcmV2ZXJzZVVuaXRzLnJlZHVjZShmdW5jdGlvbiAocHJldmlvdXMsIGN1cnJlbnQpIHsKCSAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbHNbY3VycmVudF0pKSB7CgkgICAgICBpZiAocHJldmlvdXMpIHsKCSAgICAgICAgY29udmVydChtYXRyaXgsIHZhbHMsIHByZXZpb3VzLCB2YWxzLCBjdXJyZW50KTsKCSAgICAgIH0KCgkgICAgICByZXR1cm4gY3VycmVudDsKCSAgICB9IGVsc2UgewoJICAgICAgcmV0dXJuIHByZXZpb3VzOwoJICAgIH0KCSAgfSwgbnVsbCk7Cgl9CgkvKioKCSAqIEEgRHVyYXRpb24gb2JqZWN0IHJlcHJlc2VudHMgYSBwZXJpb2Qgb2YgdGltZSwgbGlrZSAiMiBtb250aHMiIG9yICIxIGRheSwgMSBob3VyIi4gQ29uY2VwdHVhbGx5LCBpdCdzIGp1c3QgYSBtYXAgb2YgdW5pdHMgdG8gdGhlaXIgcXVhbnRpdGllcywgYWNjb21wYW5pZWQgYnkgc29tZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gYW5kIG1ldGhvZHMgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBpbnRlcnJvZ2F0aW5nLCB0cmFuc2Zvcm1pbmcsIGFuZCBmb3JtYXR0aW5nIHRoZW0uIFRoZXkgY2FuIGJlIHVzZWQgb24gdGhlaXIgb3duIG9yIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgTHV4b24gdHlwZXM7IGZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSB7QGxpbmsgRGF0ZVRpbWUjcGx1c30gdG8gYWRkIGEgRHVyYXRpb24gb2JqZWN0IHRvIGEgRGF0ZVRpbWUsIHByb2R1Y2luZyBhbm90aGVyIERhdGVUaW1lLgoJICoKCSAqIEhlcmUgaXMgYSBicmllZiBvdmVydmlldyBvZiBjb21tb25seSB1c2VkIG1ldGhvZHMgYW5kIGdldHRlcnMgaW4gRHVyYXRpb246CgkgKgoJICogKiAqKkNyZWF0aW9uKiogVG8gY3JlYXRlIGEgRHVyYXRpb24sIHVzZSB7QGxpbmsgRHVyYXRpb24jZnJvbU1pbGxpc30sIHtAbGluayBEdXJhdGlvbiNmcm9tT2JqZWN0fSwgb3Ige0BsaW5rIER1cmF0aW9uI2Zyb21JU099LgoJICogKiAqKlVuaXQgdmFsdWVzKiogU2VlIHRoZSB7QGxpbmsgRHVyYXRpb24jeWVhcnN9LCB7QGxpbmsgRHVyYXRpb24ubW9udGhzfSwge0BsaW5rIER1cmF0aW9uI3dlZWtzfSwge0BsaW5rIER1cmF0aW9uI2RheXN9LCB7QGxpbmsgRHVyYXRpb24jaG91cnN9LCB7QGxpbmsgRHVyYXRpb24jbWludXRlc30sIHtAbGluayBEdXJhdGlvbiNzZWNvbmRzfSwge0BsaW5rIER1cmF0aW9uI21pbGxpc2Vjb25kc30gYWNjZXNzb3JzLgoJICogKiAqKkNvbmZpZ3VyYXRpb24qKiBTZWUgIHtAbGluayBEdXJhdGlvbiNsb2NhbGV9IGFuZCB7QGxpbmsgRHVyYXRpb24jbnVtYmVyaW5nU3lzdGVtfSBhY2Nlc3NvcnMuCgkgKiAqICoqVHJhbnNmb3JtYXRpb24qKiBUbyBjcmVhdGUgbmV3IER1cmF0aW9ucyBvdXQgb2Ygb2xkIG9uZXMgdXNlIHtAbGluayBEdXJhdGlvbiNwbHVzfSwge0BsaW5rIER1cmF0aW9uI21pbnVzfSwge0BsaW5rIER1cmF0aW9uI25vcm1hbGl6ZX0sIHtAbGluayBEdXJhdGlvbiNzZXR9LCB7QGxpbmsgRHVyYXRpb24jcmVjb25maWd1cmV9LCB7QGxpbmsgRHVyYXRpb24jc2hpZnRUb30sIGFuZCB7QGxpbmsgRHVyYXRpb24jbmVnYXRlfS4KCSAqICogKipPdXRwdXQqKiBUbyBjb252ZXJ0IHRoZSBEdXJhdGlvbiBpbnRvIG90aGVyIHJlcHJlc2VudGF0aW9ucywgc2VlIHtAbGluayBEdXJhdGlvbiNhc30sIHtAbGluayBEdXJhdGlvbiN0b0lTT30sIHtAbGluayBEdXJhdGlvbiN0b0Zvcm1hdH0sIGFuZCB7QGxpbmsgRHVyYXRpb24jdG9KU09OfQoJICoKCSAqIFRoZXJlJ3MgYXJlIG1vcmUgbWV0aG9kcyBkb2N1bWVudGVkIGJlbG93LiBJbiBhZGRpdGlvbiwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3VidGxlciB0b3BpY3MgbGlrZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgdmFsaWRpdHksIHNlZSB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbi4KCSAqLwoKCgl2YXIgRHVyYXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewoJICAvKioKCSAgICogQHByaXZhdGUKCSAgICovCgkgIGZ1bmN0aW9uIER1cmF0aW9uKGNvbmZpZykgewoJICAgIHZhciBhY2N1cmF0ZSA9IGNvbmZpZy5jb252ZXJzaW9uQWNjdXJhY3kgPT09ICJsb25ndGVybSIgfHwgZmFsc2U7CgkgICAgLyoqCgkgICAgICogQGFjY2VzcyBwcml2YXRlCgkgICAgICovCgoJICAgIHRoaXMudmFsdWVzID0gY29uZmlnLnZhbHVlczsKCSAgICAvKioKCSAgICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICAgKi8KCgkgICAgdGhpcy5sb2MgPSBjb25maWcubG9jIHx8IExvY2FsZS5jcmVhdGUoKTsKCSAgICAvKioKCSAgICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICAgKi8KCgkgICAgdGhpcy5jb252ZXJzaW9uQWNjdXJhY3kgPSBhY2N1cmF0ZSA/ICJsb25ndGVybSIgOiAiY2FzdWFsIjsKCSAgICAvKioKCSAgICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICAgKi8KCgkgICAgdGhpcy5pbnZhbGlkID0gY29uZmlnLmludmFsaWQgfHwgbnVsbDsKCSAgICAvKioKCSAgICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICAgKi8KCgkgICAgdGhpcy5tYXRyaXggPSBhY2N1cmF0ZSA/IGFjY3VyYXRlTWF0cml4IDogY2FzdWFsTWF0cml4OwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLmlzTHV4b25EdXJhdGlvbiA9IHRydWU7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBEdXJhdGlvbiBmcm9tIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4KCSAgICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IG9mIG1pbGxpc2Vjb25kcwoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmcKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2UKCSAgICogQHJldHVybiB7RHVyYXRpb259CgkgICAqLwoKCgkgIER1cmF0aW9uLmZyb21NaWxsaXMgPSBmdW5jdGlvbiBmcm9tTWlsbGlzKGNvdW50LCBvcHRzKSB7CgkgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QoewoJICAgICAgbWlsbGlzZWNvbmRzOiBjb3VudAoJICAgIH0sIG9wdHMpOwoJICB9CgkgIC8qKgoJICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCBrZXlzIGxpa2UgJ3llYXJzJyBhbmQgJ2hvdXJzJy4KCSAgICogSWYgdGhpcyBvYmplY3QgaXMgZW1wdHkgdGhlbiBhIHplcm8gbWlsbGlzZWNvbmRzIGR1cmF0aW9uIGlzIHJldHVybmVkLgoJICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gdGhlIG9iamVjdCB0byBjcmVhdGUgdGhlIERhdGVUaW1lIGZyb20KCSAgICogQHBhcmFtIHtudW1iZXJ9IG9iai55ZWFycwoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnF1YXJ0ZXJzCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubW9udGhzCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla3MKCSAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5kYXlzCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouaG91cnMKCSAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taW51dGVzCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouc2Vjb25kcwoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbGxpc2Vjb25kcwoJICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHM9W11dIC0gb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhpcyBEdXJhdGlvbgoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZQoJICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KCSAgICovCgkgIDsKCgkgIER1cmF0aW9uLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iaiwgb3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIGlmIChvYmogPT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAib2JqZWN0IikgewoJICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJEdXJhdGlvbi5mcm9tT2JqZWN0OiBhcmd1bWVudCBleHBlY3RlZCB0byBiZSBhbiBvYmplY3QsIGdvdCAiICsgKG9iaiA9PT0gbnVsbCA/ICJudWxsIiA6IHR5cGVvZiBvYmopKTsKCSAgICB9CgoJICAgIHJldHVybiBuZXcgRHVyYXRpb24oewoJICAgICAgdmFsdWVzOiBub3JtYWxpemVPYmplY3Qob2JqLCBEdXJhdGlvbi5ub3JtYWxpemVVbml0KSwKCSAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0cyksCgkgICAgICBjb252ZXJzaW9uQWNjdXJhY3k6IG9wdHMuY29udmVyc2lvbkFjY3VyYWN5CgkgICAgfSk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gRHVyYXRpb25MaWtlLgoJICAgKgoJICAgKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IER1cmF0aW9ufSBkdXJhdGlvbkxpa2UKCSAgICogT25lIG9mOgoJICAgKiAtIG9iamVjdCB3aXRoIGtleXMgbGlrZSAneWVhcnMnIGFuZCAnaG91cnMnLgoJICAgKiAtIG51bWJlciByZXByZXNlbnRpbmcgbWlsbGlzZWNvbmRzCgkgICAqIC0gRHVyYXRpb24gaW5zdGFuY2UKCSAgICogQHJldHVybiB7RHVyYXRpb259CgkgICAqLwoJICA7CgoJICBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlID0gZnVuY3Rpb24gZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbkxpa2UpIHsKCSAgICBpZiAoaXNOdW1iZXIoZHVyYXRpb25MaWtlKSkgewoJICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21NaWxsaXMoZHVyYXRpb25MaWtlKTsKCSAgICB9IGVsc2UgaWYgKER1cmF0aW9uLmlzRHVyYXRpb24oZHVyYXRpb25MaWtlKSkgewoJICAgICAgcmV0dXJuIGR1cmF0aW9uTGlrZTsKCSAgICB9IGVsc2UgaWYgKHR5cGVvZiBkdXJhdGlvbkxpa2UgPT09ICJvYmplY3QiKSB7CgkgICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChkdXJhdGlvbkxpa2UpOwoJICAgIH0gZWxzZSB7CgkgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoIlVua25vd24gZHVyYXRpb24gYXJndW1lbnQgIiArIGR1cmF0aW9uTGlrZSArICIgb2YgdHlwZSAiICsgdHlwZW9mIGR1cmF0aW9uTGlrZSk7CgkgICAgfQoJICB9CgkgIC8qKgoJICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIGFuIElTTyA4NjAxIGR1cmF0aW9uIHN0cmluZy4KCSAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0ZXh0IHRvIHBhcnNlCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZwoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZQoJICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI0R1cmF0aW9ucwoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPKCdQM1k2TTFXNERUMTJIMzBNNVMnKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMywgbW9udGhzOiA2LCB3ZWVrczogMSwgZGF5czogNCwgaG91cnM6IDEyLCBtaW51dGVzOiAzMCwgc2Vjb25kczogNSB9CgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU08oJ1BUMjNIJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDIzIH0KCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUDVZM00nKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogNSwgbW9udGhzOiAzIH0KCSAgICogQHJldHVybiB7RHVyYXRpb259CgkgICAqLwoJICA7CgoJICBEdXJhdGlvbi5mcm9tSVNPID0gZnVuY3Rpb24gZnJvbUlTTyh0ZXh0LCBvcHRzKSB7CgkgICAgdmFyIF9wYXJzZUlTT0R1cmF0aW9uID0gcGFyc2VJU09EdXJhdGlvbih0ZXh0KSwKCSAgICAgICAgcGFyc2VkID0gX3BhcnNlSVNPRHVyYXRpb25bMF07CgoJICAgIGlmIChwYXJzZWQpIHsKCSAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHBhcnNlZCwgb3B0cyk7CgkgICAgfSBlbHNlIHsKCSAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKCJ1bnBhcnNhYmxlIiwgInRoZSBpbnB1dCBcIiIgKyB0ZXh0ICsgIlwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMSIpOwoJICAgIH0KCSAgfQoJICAvKioKCSAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSB0aW1lIHN0cmluZy4KCSAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0ZXh0IHRvIHBhcnNlCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgcGFyc2luZwoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZQoJICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVzCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCcxMToyMjozMy40NDQnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDIyLCBzZWNvbmRzOiAzMywgbWlsbGlzZWNvbmRzOiA0NDQgfQoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTE6MDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfQoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnVDExOjAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH0KCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJzExMDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfQoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnVDExMDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfQoJICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KCSAgICovCgkgIDsKCgkgIER1cmF0aW9uLmZyb21JU09UaW1lID0gZnVuY3Rpb24gZnJvbUlTT1RpbWUodGV4dCwgb3B0cykgewoJICAgIHZhciBfcGFyc2VJU09UaW1lT25seSA9IHBhcnNlSVNPVGltZU9ubHkodGV4dCksCgkgICAgICAgIHBhcnNlZCA9IF9wYXJzZUlTT1RpbWVPbmx5WzBdOwoKCSAgICBpZiAocGFyc2VkKSB7CgkgICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChwYXJzZWQsIG9wdHMpOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZCgidW5wYXJzYWJsZSIsICJ0aGUgaW5wdXQgXCIiICsgdGV4dCArICJcIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDEiKTsKCSAgICB9CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhbiBpbnZhbGlkIER1cmF0aW9uLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gc2ltcGxlIHN0cmluZyBvZiB3aHkgdGhpcyBkYXRldGltZSBpcyBpbnZhbGlkLiBTaG91bGQgbm90IGNvbnRhaW4gcGFyYW1ldGVycyBvciBhbnl0aGluZyBlbHNlIGRhdGEtZGVwZW5kZW50CgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwbGFuYXRpb249bnVsbF0gLSBsb25nZXIgZXhwbGFuYXRpb24sIG1heSBpbmNsdWRlIHBhcmFtZXRlcnMgYW5kIG90aGVyIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KCSAgICogQHJldHVybiB7RHVyYXRpb259CgkgICAqLwoJICA7CgoJICBEdXJhdGlvbi5pbnZhbGlkID0gZnVuY3Rpb24gaW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uKSB7CgkgICAgaWYgKGV4cGxhbmF0aW9uID09PSB2b2lkIDApIHsKCSAgICAgIGV4cGxhbmF0aW9uID0gbnVsbDsKCSAgICB9CgoJICAgIGlmICghcmVhc29uKSB7CgkgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRHVyYXRpb24gaXMgaW52YWxpZCIpOwoJICAgIH0KCgkgICAgdmFyIGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7CgoJICAgIGlmIChTZXR0aW5ncy50aHJvd09uSW52YWxpZCkgewoJICAgICAgdGhyb3cgbmV3IEludmFsaWREdXJhdGlvbkVycm9yKGludmFsaWQpOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gbmV3IER1cmF0aW9uKHsKCSAgICAgICAgaW52YWxpZDogaW52YWxpZAoJICAgICAgfSk7CgkgICAgfQoJICB9CgkgIC8qKgoJICAgKiBAcHJpdmF0ZQoJICAgKi8KCSAgOwoKCSAgRHVyYXRpb24ubm9ybWFsaXplVW5pdCA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXQodW5pdCkgewoJICAgIHZhciBub3JtYWxpemVkID0gewoJICAgICAgeWVhcjogInllYXJzIiwKCSAgICAgIHllYXJzOiAieWVhcnMiLAoJICAgICAgcXVhcnRlcjogInF1YXJ0ZXJzIiwKCSAgICAgIHF1YXJ0ZXJzOiAicXVhcnRlcnMiLAoJICAgICAgbW9udGg6ICJtb250aHMiLAoJICAgICAgbW9udGhzOiAibW9udGhzIiwKCSAgICAgIHdlZWs6ICJ3ZWVrcyIsCgkgICAgICB3ZWVrczogIndlZWtzIiwKCSAgICAgIGRheTogImRheXMiLAoJICAgICAgZGF5czogImRheXMiLAoJICAgICAgaG91cjogImhvdXJzIiwKCSAgICAgIGhvdXJzOiAiaG91cnMiLAoJICAgICAgbWludXRlOiAibWludXRlcyIsCgkgICAgICBtaW51dGVzOiAibWludXRlcyIsCgkgICAgICBzZWNvbmQ6ICJzZWNvbmRzIiwKCSAgICAgIHNlY29uZHM6ICJzZWNvbmRzIiwKCSAgICAgIG1pbGxpc2Vjb25kOiAibWlsbGlzZWNvbmRzIiwKCSAgICAgIG1pbGxpc2Vjb25kczogIm1pbGxpc2Vjb25kcyIKCSAgICB9W3VuaXQgPyB1bml0LnRvTG93ZXJDYXNlKCkgOiB1bml0XTsKCSAgICBpZiAoIW5vcm1hbGl6ZWQpIHRocm93IG5ldyBJbnZhbGlkVW5pdEVycm9yKHVuaXQpOwoJICAgIHJldHVybiBub3JtYWxpemVkOwoJICB9CgkgIC8qKgoJICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYSBEdXJhdGlvbi4gV29ya3MgYWNyb3NzIGNvbnRleHQgYm91bmRhcmllcwoJICAgKiBAcGFyYW0ge29iamVjdH0gbwoJICAgKiBAcmV0dXJuIHtib29sZWFufQoJICAgKi8KCSAgOwoKCSAgRHVyYXRpb24uaXNEdXJhdGlvbiA9IGZ1bmN0aW9uIGlzRHVyYXRpb24obykgewoJICAgIHJldHVybiBvICYmIG8uaXNMdXhvbkR1cmF0aW9uIHx8IGZhbHNlOwoJICB9CgkgIC8qKgoJICAgKiBHZXQgIHRoZSBsb2NhbGUgb2YgYSBEdXJhdGlvbiwgc3VjaCAnZW4tR0InCgkgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICB2YXIgX3Byb3RvID0gRHVyYXRpb24ucHJvdG90eXBlOwoKCSAgLyoqCgkgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy4gWW91IG1heSB1c2UgdGhlc2UgdG9rZW5zOgoJICAgKiAqIGBTYCBmb3IgbWlsbGlzZWNvbmRzCgkgICAqICogYHNgIGZvciBzZWNvbmRzCgkgICAqICogYG1gIGZvciBtaW51dGVzCgkgICAqICogYGhgIGZvciBob3VycwoJICAgKiAqIGBkYCBmb3IgZGF5cwoJICAgKiAqIGBNYCBmb3IgbW9udGhzCgkgICAqICogYHlgIGZvciB5ZWFycwoJICAgKiBOb3RlczoKCSAgICogKiBBZGQgcGFkZGluZyBieSByZXBlYXRpbmcgdGhlIHRva2VuLCBlLmcuICJ5eSIgcGFkcyB0aGUgeWVhcnMgdG8gdHdvIGRpZ2l0cywgImhoaGgiIHBhZHMgdGhlIGhvdXJzIG91dCB0byBmb3VyIGRpZ2l0cwoJICAgKiAqIFRoZSBkdXJhdGlvbiB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgc2V0IG9mIHVuaXRzIGluIHRoZSBmb3JtYXQgc3RyaW5nIHVzaW5nIHtAbGluayBEdXJhdGlvbiNzaGlmdFRvfSBhbmQgdGhlIER1cmF0aW9ucydzIGNvbnZlcnNpb24gYWNjdXJhY3kgc2V0dGluZy4KCSAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgc3RyaW5nCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmZsb29yPXRydWVdIC0gZmxvb3IgbnVtZXJpY2FsIHZhbHVlcwoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoInkgZCBzIikgLy89PiAiMSA2IDIiCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b0Zvcm1hdCgieXkgZGQgc3NzIikgLy89PiAiMDEgMDYgMDAyIgoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoIk0gUyIpIC8vPT4gIjEyIDUxODQwMjAwMCIKCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgX3Byb3RvLnRvRm9ybWF0ID0gZnVuY3Rpb24gdG9Gb3JtYXQoZm10LCBvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgLy8gcmV2ZXJzZS1jb21wYXQgc2luY2UgMS4yOyB3ZSBhbHdheXMgcm91bmQgZG93biBub3csIG5ldmVyIHVwLCBhbmQgd2UgZG8gaXQgYnkgZGVmYXVsdAoJICAgIHZhciBmbXRPcHRzID0gX2V4dGVuZHMoe30sIG9wdHMsIHsKCSAgICAgIGZsb29yOiBvcHRzLnJvdW5kICE9PSBmYWxzZSAmJiBvcHRzLmZsb29yICE9PSBmYWxzZQoJICAgIH0pOwoKCSAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYywgZm10T3B0cykuZm9ybWF0RHVyYXRpb25Gcm9tU3RyaW5nKHRoaXMsIGZtdCkgOiBJTlZBTElEJDI7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIHRoaXMgRHVyYXRpb24ncyB2YWx1ZXMuCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9CgkgICAqIEByZXR1cm4ge09iamVjdH0KCSAgICovCgkgIDsKCgkgIF9wcm90by50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KCkgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4ge307CgkgICAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGlzLnZhbHVlcyk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uLgoJICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI0R1cmF0aW9ucwoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDMsIHNlY29uZHM6IDQ1IH0pLnRvSVNPKCkgLy89PiAnUDNZVDQ1UycKCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1vbnRoczogNCwgc2Vjb25kczogNDUgfSkudG9JU08oKSAvLz0+ICdQNE1UNDVTJwoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiA1IH0pLnRvSVNPKCkgLy89PiAnUDVNJwoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbWludXRlczogNSB9KS50b0lTTygpIC8vPT4gJ1BUNU0nCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaWxsaXNlY29uZHM6IDYgfSkudG9JU08oKSAvLz0+ICdQVDAuMDA2UycKCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvSVNPID0gZnVuY3Rpb24gdG9JU08oKSB7CgkgICAgLy8gd2UgY291bGQgdXNlIHRoZSBmb3JtYXR0ZXIsIGJ1dCB0aGlzIGlzIGFuIGVhc2llciB3YXkgdG8gZ2V0IHRoZSBtaW5pbXVtIHN0cmluZwoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDsKCSAgICB2YXIgcyA9ICJQIjsKCSAgICBpZiAodGhpcy55ZWFycyAhPT0gMCkgcyArPSB0aGlzLnllYXJzICsgIlkiOwoJICAgIGlmICh0aGlzLm1vbnRocyAhPT0gMCB8fCB0aGlzLnF1YXJ0ZXJzICE9PSAwKSBzICs9IHRoaXMubW9udGhzICsgdGhpcy5xdWFydGVycyAqIDMgKyAiTSI7CgkgICAgaWYgKHRoaXMud2Vla3MgIT09IDApIHMgKz0gdGhpcy53ZWVrcyArICJXIjsKCSAgICBpZiAodGhpcy5kYXlzICE9PSAwKSBzICs9IHRoaXMuZGF5cyArICJEIjsKCSAgICBpZiAodGhpcy5ob3VycyAhPT0gMCB8fCB0aGlzLm1pbnV0ZXMgIT09IDAgfHwgdGhpcy5zZWNvbmRzICE9PSAwIHx8IHRoaXMubWlsbGlzZWNvbmRzICE9PSAwKSBzICs9ICJUIjsKCSAgICBpZiAodGhpcy5ob3VycyAhPT0gMCkgcyArPSB0aGlzLmhvdXJzICsgIkgiOwoJICAgIGlmICh0aGlzLm1pbnV0ZXMgIT09IDApIHMgKz0gdGhpcy5taW51dGVzICsgIk0iOwoJICAgIGlmICh0aGlzLnNlY29uZHMgIT09IDAgfHwgdGhpcy5taWxsaXNlY29uZHMgIT09IDApIC8vIHRoaXMgd2lsbCBoYW5kbGUgImZsb2F0aW5nIHBvaW50IG1hZG5lc3MiIGJ5IHJlbW92aW5nIGV4dHJhIGRlY2ltYWwgcGxhY2VzCgkgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81ODgwMDQvaXMtZmxvYXRpbmctcG9pbnQtbWF0aC1icm9rZW4KCSAgICAgIHMgKz0gcm91bmRUbyh0aGlzLnNlY29uZHMgKyB0aGlzLm1pbGxpc2Vjb25kcyAvIDEwMDAsIDMpICsgIlMiOwoJICAgIGlmIChzID09PSAiUCIpIHMgKz0gIlQwUyI7CgkgICAgcmV0dXJuIHM7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uLCBmb3JtYXR0ZWQgYXMgYSB0aW1lIG9mIGRheS4KCSAgICogTm90ZSB0aGF0IHRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgZHVyYXRpb24gaXMgaW52YWxpZCwgbmVnYXRpdmUsIG9yIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAyNCBob3Vycy4KCSAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lcwoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVByZWZpeD1mYWxzZV0gLSBpbmNsdWRlIHRoZSBgVGAgcHJlZml4CgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdAoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSgpIC8vPT4gJzExOjAwOjAwLjAwMCcKCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc01pbGxpc2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcxMTowMDowMCcKCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc1NlY29uZHM6IHRydWUgfSkgLy89PiAnMTE6MDAnCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgaW5jbHVkZVByZWZpeDogdHJ1ZSB9KSAvLz0+ICdUMTE6MDA6MDAuMDAwJwoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcxMTAwMDAuMDAwJwoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9JU09UaW1lID0gZnVuY3Rpb24gdG9JU09UaW1lKG9wdHMpIHsKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7CgkgICAgdmFyIG1pbGxpcyA9IHRoaXMudG9NaWxsaXMoKTsKCSAgICBpZiAobWlsbGlzIDwgMCB8fCBtaWxsaXMgPj0gODY0MDAwMDApIHJldHVybiBudWxsOwoJICAgIG9wdHMgPSBfZXh0ZW5kcyh7CgkgICAgICBzdXBwcmVzc01pbGxpc2Vjb25kczogZmFsc2UsCgkgICAgICBzdXBwcmVzc1NlY29uZHM6IGZhbHNlLAoJICAgICAgaW5jbHVkZVByZWZpeDogZmFsc2UsCgkgICAgICBmb3JtYXQ6ICJleHRlbmRlZCIKCSAgICB9LCBvcHRzKTsKCSAgICB2YXIgdmFsdWUgPSB0aGlzLnNoaWZ0VG8oImhvdXJzIiwgIm1pbnV0ZXMiLCAic2Vjb25kcyIsICJtaWxsaXNlY29uZHMiKTsKCSAgICB2YXIgZm10ID0gb3B0cy5mb3JtYXQgPT09ICJiYXNpYyIgPyAiaGhtbSIgOiAiaGg6bW0iOwoKCSAgICBpZiAoIW9wdHMuc3VwcHJlc3NTZWNvbmRzIHx8IHZhbHVlLnNlY29uZHMgIT09IDAgfHwgdmFsdWUubWlsbGlzZWNvbmRzICE9PSAwKSB7CgkgICAgICBmbXQgKz0gb3B0cy5mb3JtYXQgPT09ICJiYXNpYyIgPyAic3MiIDogIjpzcyI7CgoJICAgICAgaWYgKCFvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzIHx8IHZhbHVlLm1pbGxpc2Vjb25kcyAhPT0gMCkgewoJICAgICAgICBmbXQgKz0gIi5TU1MiOwoJICAgICAgfQoJICAgIH0KCgkgICAgdmFyIHN0ciA9IHZhbHVlLnRvRm9ybWF0KGZtdCk7CgoJICAgIGlmIChvcHRzLmluY2x1ZGVQcmVmaXgpIHsKCSAgICAgIHN0ciA9ICJUIiArIHN0cjsKCSAgICB9CgoJICAgIHJldHVybiBzdHI7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIEpTT04uCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04oKSB7CgkgICAgcmV0dXJuIHRoaXMudG9JU08oKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBJU08gODYwMSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gZGVidWdnaW5nLgoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHsKCSAgICByZXR1cm4gdGhpcy50b0lTTygpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGFuIG1pbGxpc2Vjb25kcyB2YWx1ZSBvZiB0aGlzIER1cmF0aW9uLgoJICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9NaWxsaXMgPSBmdW5jdGlvbiB0b01pbGxpcygpIHsKCSAgICByZXR1cm4gdGhpcy5hcygibWlsbGlzZWNvbmRzIik7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYW4gbWlsbGlzZWNvbmRzIHZhbHVlIG9mIHRoaXMgRHVyYXRpb24uIEFsaWFzIG9mIHtAbGluayB0b01pbGxpc30KCSAgICogQHJldHVybiB7bnVtYmVyfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnZhbHVlT2YgPSBmdW5jdGlvbiB2YWx1ZU9mKCkgewoJICAgIHJldHVybiB0aGlzLnRvTWlsbGlzKCk7CgkgIH0KCSAgLyoqCgkgICAqIE1ha2UgdGhpcyBEdXJhdGlvbiBsb25nZXIgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLgoJICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGFtb3VudCB0byBhZGQuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpCgkgICAqIEByZXR1cm4ge0R1cmF0aW9ufQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnBsdXMgPSBmdW5jdGlvbiBwbHVzKGR1cmF0aW9uKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwoJICAgIHZhciBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKSwKCSAgICAgICAgcmVzdWx0ID0ge307CgoJICAgIGZvciAodmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2Uob3JkZXJlZFVuaXRzJDEpLCBfc3RlcDsgIShfc3RlcCA9IF9pdGVyYXRvcigpKS5kb25lOykgewoJICAgICAgdmFyIGsgPSBfc3RlcC52YWx1ZTsKCgkgICAgICBpZiAoaGFzT3duUHJvcGVydHkoZHVyLnZhbHVlcywgaykgfHwgaGFzT3duUHJvcGVydHkodGhpcy52YWx1ZXMsIGspKSB7CgkgICAgICAgIHJlc3VsdFtrXSA9IGR1ci5nZXQoaykgKyB0aGlzLmdldChrKTsKCSAgICAgIH0KCSAgICB9CgoJICAgIHJldHVybiBjbG9uZSQxKHRoaXMsIHsKCSAgICAgIHZhbHVlczogcmVzdWx0CgkgICAgfSwgdHJ1ZSk7CgkgIH0KCSAgLyoqCgkgICAqIE1ha2UgdGhpcyBEdXJhdGlvbiBzaG9ydGVyIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi4KCSAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gc3VidHJhY3QuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpCgkgICAqIEByZXR1cm4ge0R1cmF0aW9ufQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLm1pbnVzID0gZnVuY3Rpb24gbWludXMoZHVyYXRpb24pIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CgkgICAgdmFyIGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pOwoJICAgIHJldHVybiB0aGlzLnBsdXMoZHVyLm5lZ2F0ZSgpKTsKCSAgfQoJICAvKioKCSAgICogU2NhbGUgdGhpcyBEdXJhdGlvbiBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uCgkgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggdW5pdC4gQXJpdHkgaXMgMSBvciAyOiB0aGUgdmFsdWUgb2YgdGhlIHVuaXQgYW5kLCBvcHRpb25hbGx5LCB0aGUgdW5pdCBuYW1lLiBNdXN0IHJldHVybiBhIG51bWJlci4KCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBtaW51dGVzOiAzMCB9KS5tYXBVbml0cyh4ID0+IHggKiAyKSAvLz0+IHsgaG91cnM6IDIsIG1pbnV0ZXM6IDYwIH0KCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBtaW51dGVzOiAzMCB9KS5tYXBVbml0cygoeCwgdSkgPT4gdSA9PT0gImhvdXIiID8geCAqIDIgOiB4KSAvLz0+IHsgaG91cnM6IDIsIG1pbnV0ZXM6IDMwIH0KCSAgICogQHJldHVybiB7RHVyYXRpb259CgkgICAqLwoJICA7CgoJICBfcHJvdG8ubWFwVW5pdHMgPSBmdW5jdGlvbiBtYXBVbml0cyhmbikgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCSAgICB2YXIgcmVzdWx0ID0ge307CgoJICAgIGZvciAodmFyIF9pID0gMCwgX09iamVjdCRrZXlzID0gT2JqZWN0LmtleXModGhpcy52YWx1ZXMpOyBfaSA8IF9PYmplY3Qka2V5cy5sZW5ndGg7IF9pKyspIHsKCSAgICAgIHZhciBrID0gX09iamVjdCRrZXlzW19pXTsKCSAgICAgIHJlc3VsdFtrXSA9IGFzTnVtYmVyKGZuKHRoaXMudmFsdWVzW2tdLCBrKSk7CgkgICAgfQoKCSAgICByZXR1cm4gY2xvbmUkMSh0aGlzLCB7CgkgICAgICB2YWx1ZXM6IHJlc3VsdAoJICAgIH0sIHRydWUpOwoJICB9CgkgIC8qKgoJICAgKiBHZXQgdGhlIHZhbHVlIG9mIHVuaXQuCgkgICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gYSB1bml0IHN1Y2ggYXMgJ21pbnV0ZScgb3IgJ2RheScKCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDIsIGRheXM6IDN9KS5nZXQoJ3llYXJzJykgLy89PiAyCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAyLCBkYXlzOiAzfSkuZ2V0KCdtb250aHMnKSAvLz0+IDAKCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDIsIGRheXM6IDN9KS5nZXQoJ2RheXMnKSAvLz0+IDMKCSAgICogQHJldHVybiB7bnVtYmVyfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLmdldCA9IGZ1bmN0aW9uIGdldCh1bml0KSB7CgkgICAgcmV0dXJuIHRoaXNbRHVyYXRpb24ubm9ybWFsaXplVW5pdCh1bml0KV07CgkgIH0KCSAgLyoqCgkgICAqICJTZXQiIHRoZSB2YWx1ZXMgb2Ygc3BlY2lmaWVkIHVuaXRzLiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi4KCSAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlcyAtIGEgbWFwcGluZyBvZiB1bml0cyB0byBudW1iZXJzCgkgICAqIEBleGFtcGxlIGR1ci5zZXQoeyB5ZWFyczogMjAxNyB9KQoJICAgKiBAZXhhbXBsZSBkdXIuc2V0KHsgaG91cnM6IDgsIG1pbnV0ZXM6IDMwIH0pCgkgICAqIEByZXR1cm4ge0R1cmF0aW9ufQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldCh2YWx1ZXMpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CgoJICAgIHZhciBtaXhlZCA9IF9leHRlbmRzKHt9LCB0aGlzLnZhbHVlcywgbm9ybWFsaXplT2JqZWN0KHZhbHVlcywgRHVyYXRpb24ubm9ybWFsaXplVW5pdCkpOwoKCSAgICByZXR1cm4gY2xvbmUkMSh0aGlzLCB7CgkgICAgICB2YWx1ZXM6IG1peGVkCgkgICAgfSk7CgkgIH0KCSAgLyoqCgkgICAqICJTZXQiIHRoZSBsb2NhbGUgYW5kL29yIG51bWJlcmluZ1N5c3RlbS4gIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi4KCSAgICogQGV4YW1wbGUgZHVyLnJlY29uZmlndXJlKHsgbG9jYWxlOiAnZW4tR0InIH0pCgkgICAqIEByZXR1cm4ge0R1cmF0aW9ufQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnJlY29uZmlndXJlID0gZnVuY3Rpb24gcmVjb25maWd1cmUoX3RlbXApIHsKCSAgICB2YXIgX3JlZiA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLAoJICAgICAgICBsb2NhbGUgPSBfcmVmLmxvY2FsZSwKCSAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX3JlZi5udW1iZXJpbmdTeXN0ZW0sCgkgICAgICAgIGNvbnZlcnNpb25BY2N1cmFjeSA9IF9yZWYuY29udmVyc2lvbkFjY3VyYWN5OwoKCSAgICB2YXIgbG9jID0gdGhpcy5sb2MuY2xvbmUoewoJICAgICAgbG9jYWxlOiBsb2NhbGUsCgkgICAgICBudW1iZXJpbmdTeXN0ZW06IG51bWJlcmluZ1N5c3RlbQoJICAgIH0pLAoJICAgICAgICBvcHRzID0gewoJICAgICAgbG9jOiBsb2MKCSAgICB9OwoKCSAgICBpZiAoY29udmVyc2lvbkFjY3VyYWN5KSB7CgkgICAgICBvcHRzLmNvbnZlcnNpb25BY2N1cmFjeSA9IGNvbnZlcnNpb25BY2N1cmFjeTsKCSAgICB9CgoJICAgIHJldHVybiBjbG9uZSQxKHRoaXMsIG9wdHMpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgZHVyYXRpb24gaW4gdGhlIHNwZWNpZmllZCB1bml0LgoJICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIGEgdW5pdCBzdWNoIGFzICdtaW51dGVzJyBvciAnZGF5cycKCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDF9KS5hcygnZGF5cycpIC8vPT4gMzY1CgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3Qoe3llYXJzOiAxfSkuYXMoJ21vbnRocycpIC8vPT4gMTIKCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7aG91cnM6IDYwfSkuYXMoJ2RheXMnKSAvLz0+IDIuNQoJICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAqLwoJICA7CgoJICBfcHJvdG8uYXMgPSBmdW5jdGlvbiBhcyh1bml0KSB7CgkgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuc2hpZnRUbyh1bml0KS5nZXQodW5pdCkgOiBOYU47CgkgIH0KCSAgLyoqCgkgICAqIFJlZHVjZSB0aGlzIER1cmF0aW9uIHRvIGl0cyBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gaW4gaXRzIGN1cnJlbnQgdW5pdHMuCgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMiwgZGF5czogNTAwMCB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMTUsIGRheXM6IDI1NSB9CgkgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTIsIG1pbnV0ZXM6IC00NSB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDE1IH0KCSAgICogQHJldHVybiB7RHVyYXRpb259CgkgICAqLwoJICA7CgoJICBfcHJvdG8ubm9ybWFsaXplID0gZnVuY3Rpb24gbm9ybWFsaXplKCkgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCSAgICB2YXIgdmFscyA9IHRoaXMudG9PYmplY3QoKTsKCSAgICBub3JtYWxpemVWYWx1ZXModGhpcy5tYXRyaXgsIHZhbHMpOwoJICAgIHJldHVybiBjbG9uZSQxKHRoaXMsIHsKCSAgICAgIHZhbHVlczogdmFscwoJICAgIH0sIHRydWUpOwoJICB9CgkgIC8qKgoJICAgKiBDb252ZXJ0IHRoaXMgRHVyYXRpb24gaW50byBpdHMgcmVwcmVzZW50YXRpb24gaW4gYSBkaWZmZXJlbnQgc2V0IG9mIHVuaXRzLgoJICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIHNlY29uZHM6IDMwIH0pLnNoaWZ0VG8oJ21pbnV0ZXMnLCAnbWlsbGlzZWNvbmRzJykudG9PYmplY3QoKSAvLz0+IHsgbWludXRlczogNjAsIG1pbGxpc2Vjb25kczogMzAwMDAgfQoJICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5zaGlmdFRvID0gZnVuY3Rpb24gc2hpZnRUbygpIHsKCSAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgdW5pdHMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CgkgICAgICB1bml0c1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKCSAgICB9CgoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCgkgICAgaWYgKHVuaXRzLmxlbmd0aCA9PT0gMCkgewoJICAgICAgcmV0dXJuIHRoaXM7CgkgICAgfQoKCSAgICB1bml0cyA9IHVuaXRzLm1hcChmdW5jdGlvbiAodSkgewoJICAgICAgcmV0dXJuIER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodSk7CgkgICAgfSk7CgkgICAgdmFyIGJ1aWx0ID0ge30sCgkgICAgICAgIGFjY3VtdWxhdGVkID0ge30sCgkgICAgICAgIHZhbHMgPSB0aGlzLnRvT2JqZWN0KCk7CgkgICAgdmFyIGxhc3RVbml0OwoKCSAgICBmb3IgKHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShvcmRlcmVkVW5pdHMkMSksIF9zdGVwMjsgIShfc3RlcDIgPSBfaXRlcmF0b3IyKCkpLmRvbmU7KSB7CgkgICAgICB2YXIgayA9IF9zdGVwMi52YWx1ZTsKCgkgICAgICBpZiAodW5pdHMuaW5kZXhPZihrKSA+PSAwKSB7CgkgICAgICAgIGxhc3RVbml0ID0gazsKCSAgICAgICAgdmFyIG93biA9IDA7IC8vIGFueXRoaW5nIHdlIGhhdmVuJ3QgYm9pbGVkIGRvd24geWV0IHNob3VsZCBnZXQgYm9pbGVkIHRvIHRoaXMgdW5pdAoKCSAgICAgICAgZm9yICh2YXIgYWsgaW4gYWNjdW11bGF0ZWQpIHsKCSAgICAgICAgICBvd24gKz0gdGhpcy5tYXRyaXhbYWtdW2tdICogYWNjdW11bGF0ZWRbYWtdOwoJICAgICAgICAgIGFjY3VtdWxhdGVkW2FrXSA9IDA7CgkgICAgICAgIH0gLy8gcGx1cyBhbnl0aGluZyB0aGF0J3MgYWxyZWFkeSBpbiB0aGlzIHVuaXQKCgoJICAgICAgICBpZiAoaXNOdW1iZXIodmFsc1trXSkpIHsKCSAgICAgICAgICBvd24gKz0gdmFsc1trXTsKCSAgICAgICAgfQoKCSAgICAgICAgdmFyIGkgPSBNYXRoLnRydW5jKG93bik7CgkgICAgICAgIGJ1aWx0W2tdID0gaTsKCSAgICAgICAgYWNjdW11bGF0ZWRba10gPSBvd24gLSBpOyAvLyB3ZSdkIGxpa2UgdG8gYWJzb3JiIHRoZXNlIGZyYWN0aW9ucyBpbiBhbm90aGVyIHVuaXQKCSAgICAgICAgLy8gcGx1cyBhbnl0aGluZyBmdXJ0aGVyIGRvd24gdGhlIGNoYWluIHRoYXQgc2hvdWxkIGJlIHJvbGxlZCB1cCBpbiB0byB0aGlzCgoJICAgICAgICBmb3IgKHZhciBkb3duIGluIHZhbHMpIHsKCSAgICAgICAgICBpZiAob3JkZXJlZFVuaXRzJDEuaW5kZXhPZihkb3duKSA+IG9yZGVyZWRVbml0cyQxLmluZGV4T2YoaykpIHsKCSAgICAgICAgICAgIGNvbnZlcnQodGhpcy5tYXRyaXgsIHZhbHMsIGRvd24sIGJ1aWx0LCBrKTsKCSAgICAgICAgICB9CgkgICAgICAgIH0gLy8gb3RoZXJ3aXNlLCBrZWVwIGl0IGluIHRoZSB3aW5ncyB0byBib2lsIGl0IGxhdGVyCgoJICAgICAgfSBlbHNlIGlmIChpc051bWJlcih2YWxzW2tdKSkgewoJICAgICAgICBhY2N1bXVsYXRlZFtrXSA9IHZhbHNba107CgkgICAgICB9CgkgICAgfSAvLyBhbnl0aGluZyBsZWZ0b3ZlciBiZWNvbWVzIHRoZSBkZWNpbWFsIGZvciB0aGUgbGFzdCB1bml0CgkgICAgLy8gbGFzdFVuaXQgbXVzdCBiZSBkZWZpbmVkIHNpbmNlIHVuaXRzIGlzIG5vdCBlbXB0eQoKCgkgICAgZm9yICh2YXIga2V5IGluIGFjY3VtdWxhdGVkKSB7CgkgICAgICBpZiAoYWNjdW11bGF0ZWRba2V5XSAhPT0gMCkgewoJICAgICAgICBidWlsdFtsYXN0VW5pdF0gKz0ga2V5ID09PSBsYXN0VW5pdCA/IGFjY3VtdWxhdGVkW2tleV0gOiBhY2N1bXVsYXRlZFtrZXldIC8gdGhpcy5tYXRyaXhbbGFzdFVuaXRdW2tleV07CgkgICAgICB9CgkgICAgfQoKCSAgICByZXR1cm4gY2xvbmUkMSh0aGlzLCB7CgkgICAgICB2YWx1ZXM6IGJ1aWx0CgkgICAgfSwgdHJ1ZSkubm9ybWFsaXplKCk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB0aGUgbmVnYXRpdmUgb2YgdGhpcyBEdXJhdGlvbi4KCSAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxLCBzZWNvbmRzOiAzMCB9KS5uZWdhdGUoKS50b09iamVjdCgpIC8vPT4geyBob3VyczogLTEsIHNlY29uZHM6IC0zMCB9CgkgICAqIEByZXR1cm4ge0R1cmF0aW9ufQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLm5lZ2F0ZSA9IGZ1bmN0aW9uIG5lZ2F0ZSgpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CgkgICAgdmFyIG5lZ2F0ZWQgPSB7fTsKCgkgICAgZm9yICh2YXIgX2kyID0gMCwgX09iamVjdCRrZXlzMiA9IE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKTsgX2kyIDwgX09iamVjdCRrZXlzMi5sZW5ndGg7IF9pMisrKSB7CgkgICAgICB2YXIgayA9IF9PYmplY3Qka2V5czJbX2kyXTsKCSAgICAgIG5lZ2F0ZWRba10gPSAtdGhpcy52YWx1ZXNba107CgkgICAgfQoKCSAgICByZXR1cm4gY2xvbmUkMSh0aGlzLCB7CgkgICAgICB2YWx1ZXM6IG5lZ2F0ZWQKCSAgICB9LCB0cnVlKTsKCSAgfQoJICAvKioKCSAgICogR2V0IHRoZSB5ZWFycy4KCSAgICogQHR5cGUge251bWJlcn0KCSAgICovCgkgIDsKCgkgIC8qKgoJICAgKiBFcXVhbGl0eSBjaGVjawoJICAgKiBUd28gRHVyYXRpb25zIGFyZSBlcXVhbCBpZmYgdGhleSBoYXZlIHRoZSBzYW1lIHVuaXRzIGFuZCB0aGUgc2FtZSB2YWx1ZXMgZm9yIGVhY2ggdW5pdC4KCSAgICogQHBhcmFtIHtEdXJhdGlvbn0gb3RoZXIKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIF9wcm90by5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhb3RoZXIuaXNWYWxpZCkgewoJICAgICAgcmV0dXJuIGZhbHNlOwoJICAgIH0KCgkgICAgaWYgKCF0aGlzLmxvYy5lcXVhbHMob3RoZXIubG9jKSkgewoJICAgICAgcmV0dXJuIGZhbHNlOwoJICAgIH0KCgkgICAgZnVuY3Rpb24gZXEodjEsIHYyKSB7CgkgICAgICAvLyBDb25zaWRlciAwIGFuZCB1bmRlZmluZWQgYXMgZXF1YWwKCSAgICAgIGlmICh2MSA9PT0gdW5kZWZpbmVkIHx8IHYxID09PSAwKSByZXR1cm4gdjIgPT09IHVuZGVmaW5lZCB8fCB2MiA9PT0gMDsKCSAgICAgIHJldHVybiB2MSA9PT0gdjI7CgkgICAgfQoKCSAgICBmb3IgKHZhciBfaXRlcmF0b3IzID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShvcmRlcmVkVW5pdHMkMSksIF9zdGVwMzsgIShfc3RlcDMgPSBfaXRlcmF0b3IzKCkpLmRvbmU7KSB7CgkgICAgICB2YXIgdSA9IF9zdGVwMy52YWx1ZTsKCgkgICAgICBpZiAoIWVxKHRoaXMudmFsdWVzW3VdLCBvdGhlci52YWx1ZXNbdV0pKSB7CgkgICAgICAgIHJldHVybiBmYWxzZTsKCSAgICAgIH0KCSAgICB9CgoJICAgIHJldHVybiB0cnVlOwoJICB9OwoKCSAgX2NyZWF0ZUNsYXNzKER1cmF0aW9uLCBbewoJICAgIGtleTogImxvY2FsZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubG9jYWxlIDogbnVsbDsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBudW1iZXJpbmcgc3lzdGVtIG9mIGEgRHVyYXRpb24sIHN1Y2ggJ2JlbmcnLiBUaGUgbnVtYmVyaW5nIHN5c3RlbSBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRHVyYXRpb24KCSAgICAgKgoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAibnVtYmVyaW5nU3lzdGVtIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsOwoJICAgIH0KCSAgfSwgewoJICAgIGtleTogInllYXJzIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy55ZWFycyB8fCAwIDogTmFOOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIHF1YXJ0ZXJzLgoJICAgICAqIEB0eXBlIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAicXVhcnRlcnMiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLnF1YXJ0ZXJzIHx8IDAgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgbW9udGhzLgoJICAgICAqIEB0eXBlIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAibW9udGhzIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5tb250aHMgfHwgMCA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSB3ZWVrcwoJICAgICAqIEB0eXBlIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAid2Vla3MiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLndlZWtzIHx8IDAgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgZGF5cy4KCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImRheXMiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLmRheXMgfHwgMCA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBob3Vycy4KCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImhvdXJzIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5ob3VycyB8fCAwIDogTmFOOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIG1pbnV0ZXMuCgkgICAgICogQHR5cGUge251bWJlcn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJtaW51dGVzIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5taW51dGVzIHx8IDAgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgc2Vjb25kcy4KCSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAic2Vjb25kcyIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuc2Vjb25kcyB8fCAwIDogTmFOOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIG1pbGxpc2Vjb25kcy4KCSAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAibWlsbGlzZWNvbmRzIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5taWxsaXNlY29uZHMgfHwgMCA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBEdXJhdGlvbiBpcyBpbnZhbGlkLiBJbnZhbGlkIGR1cmF0aW9ucyBhcmUgcmV0dXJuZWQgYnkgZGlmZiBvcGVyYXRpb25zCgkgICAgICogb24gaW52YWxpZCBEYXRlVGltZXMgb3IgSW50ZXJ2YWxzLgoJICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaXNWYWxpZCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID09PSBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBEdXJhdGlvbiBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRHVyYXRpb24gaXMgdmFsaWQKCSAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaW52YWxpZFJlYXNvbiIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgRHVyYXRpb24gYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIER1cmF0aW9uIGlzIHZhbGlkCgkgICAgICogQHR5cGUge3N0cmluZ30KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJpbnZhbGlkRXhwbGFuYXRpb24iLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7CgkgICAgfQoJICB9XSk7CgoJICByZXR1cm4gRHVyYXRpb247Cgl9KCk7CgoJdmFyIElOVkFMSUQkMSA9ICJJbnZhbGlkIEludGVydmFsIjsgLy8gY2hlY2tzIGlmIHRoZSBzdGFydCBpcyBlcXVhbCB0byBvciBiZWZvcmUgdGhlIGVuZAoKCWZ1bmN0aW9uIHZhbGlkYXRlU3RhcnRFbmQoc3RhcnQsIGVuZCkgewoJICBpZiAoIXN0YXJ0IHx8ICFzdGFydC5pc1ZhbGlkKSB7CgkgICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoIm1pc3Npbmcgb3IgaW52YWxpZCBzdGFydCIpOwoJICB9IGVsc2UgaWYgKCFlbmQgfHwgIWVuZC5pc1ZhbGlkKSB7CgkgICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoIm1pc3Npbmcgb3IgaW52YWxpZCBlbmQiKTsKCSAgfSBlbHNlIGlmIChlbmQgPCBzdGFydCkgewoJICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKCJlbmQgYmVmb3JlIHN0YXJ0IiwgIlRoZSBlbmQgb2YgYW4gaW50ZXJ2YWwgbXVzdCBiZSBhZnRlciBpdHMgc3RhcnQsIGJ1dCB5b3UgaGFkIHN0YXJ0PSIgKyBzdGFydC50b0lTTygpICsgIiBhbmQgZW5kPSIgKyBlbmQudG9JU08oKSk7CgkgIH0gZWxzZSB7CgkgICAgcmV0dXJuIG51bGw7CgkgIH0KCX0KCS8qKgoJICogQW4gSW50ZXJ2YWwgb2JqZWN0IHJlcHJlc2VudHMgYSBoYWxmLW9wZW4gaW50ZXJ2YWwgb2YgdGltZSwgd2hlcmUgZWFjaCBlbmRwb2ludCBpcyBhIHtAbGluayBEYXRlVGltZX0uIENvbmNlcHR1YWxseSwgaXQncyBhIGNvbnRhaW5lciBmb3IgdGhvc2UgdHdvIGVuZHBvaW50cywgYWNjb21wYW5pZWQgYnkgbWV0aG9kcyBmb3IgY3JlYXRpbmcsIHBhcnNpbmcsIGludGVycm9nYXRpbmcsIGNvbXBhcmluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLgoJICoKCSAqIEhlcmUgaXMgYSBicmllZiBvdmVydmlldyBvZiB0aGUgbW9zdCBjb21tb25seSB1c2VkIG1ldGhvZHMgYW5kIGdldHRlcnMgaW4gSW50ZXJ2YWw6CgkgKgoJICogKiAqKkNyZWF0aW9uKiogVG8gY3JlYXRlIGFuIEludGVydmFsLCB1c2Uge0BsaW5rIEludGVydmFsI2Zyb21EYXRlVGltZXN9LCB7QGxpbmsgSW50ZXJ2YWwjYWZ0ZXJ9LCB7QGxpbmsgSW50ZXJ2YWwjYmVmb3JlfSwgb3Ige0BsaW5rIEludGVydmFsI2Zyb21JU099LgoJICogKiAqKkFjY2Vzc29ycyoqIFVzZSB7QGxpbmsgSW50ZXJ2YWwjc3RhcnR9IGFuZCB7QGxpbmsgSW50ZXJ2YWwjZW5kfSB0byBnZXQgdGhlIHN0YXJ0IGFuZCBlbmQuCgkgKiAqICoqSW50ZXJyb2dhdGlvbioqIFRvIGFuYWx5emUgdGhlIEludGVydmFsLCB1c2Uge0BsaW5rIEludGVydmFsI2NvdW50fSwge0BsaW5rIEludGVydmFsI2xlbmd0aH0sIHtAbGluayBJbnRlcnZhbCNoYXNTYW1lfSwge0BsaW5rIEludGVydmFsI2NvbnRhaW5zfSwge0BsaW5rIEludGVydmFsI2lzQWZ0ZXJ9LCBvciB7QGxpbmsgSW50ZXJ2YWwjaXNCZWZvcmV9LgoJICogKiAqKlRyYW5zZm9ybWF0aW9uKiogVG8gY3JlYXRlIG90aGVyIEludGVydmFscyBvdXQgb2YgdGhpcyBvbmUsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjc2V0fSwge0BsaW5rIEludGVydmFsI3NwbGl0QXR9LCB7QGxpbmsgSW50ZXJ2YWwjc3BsaXRCeX0sIHtAbGluayBJbnRlcnZhbCNkaXZpZGVFcXVhbGx5fSwge0BsaW5rIEludGVydmFsI21lcmdlfSwge0BsaW5rIEludGVydmFsI3hvcn0sIHtAbGluayBJbnRlcnZhbCN1bmlvbn0sIHtAbGluayBJbnRlcnZhbCNpbnRlcnNlY3Rpb259LCBvciB7QGxpbmsgSW50ZXJ2YWwjZGlmZmVyZW5jZX0uCgkgKiAqICoqQ29tcGFyaXNvbioqIFRvIGNvbXBhcmUgdGhpcyBJbnRlcnZhbCB0byBhbm90aGVyIG9uZSwgdXNlIHtAbGluayBJbnRlcnZhbCNlcXVhbHN9LCB7QGxpbmsgSW50ZXJ2YWwjb3ZlcmxhcHN9LCB7QGxpbmsgSW50ZXJ2YWwjYWJ1dHNTdGFydH0sIHtAbGluayBJbnRlcnZhbCNhYnV0c0VuZH0sIHtAbGluayBJbnRlcnZhbCNlbmd1bGZzfQoJICogKiAqKk91dHB1dCoqIFRvIGNvbnZlcnQgdGhlIEludGVydmFsIGludG8gb3RoZXIgcmVwcmVzZW50YXRpb25zLCBzZWUge0BsaW5rIEludGVydmFsI3RvU3RyaW5nfSwge0BsaW5rIEludGVydmFsI3RvSVNPfSwge0BsaW5rIEludGVydmFsI3RvSVNPRGF0ZX0sIHtAbGluayBJbnRlcnZhbCN0b0lTT1RpbWV9LCB7QGxpbmsgSW50ZXJ2YWwjdG9Gb3JtYXR9LCBhbmQge0BsaW5rIEludGVydmFsI3RvRHVyYXRpb259LgoJICovCgoKCXZhciBJbnRlcnZhbCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CgkgIC8qKgoJICAgKiBAcHJpdmF0ZQoJICAgKi8KCSAgZnVuY3Rpb24gSW50ZXJ2YWwoY29uZmlnKSB7CgkgICAgLyoqCgkgICAgICogQGFjY2VzcyBwcml2YXRlCgkgICAgICovCgkgICAgdGhpcy5zID0gY29uZmlnLnN0YXJ0OwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLmUgPSBjb25maWcuZW5kOwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLmludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCBudWxsOwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLmlzTHV4b25JbnRlcnZhbCA9IHRydWU7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhbiBpbnZhbGlkIEludGVydmFsLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gc2ltcGxlIHN0cmluZyBvZiB3aHkgdGhpcyBJbnRlcnZhbCBpcyBpbnZhbGlkLiBTaG91bGQgbm90IGNvbnRhaW4gcGFyYW1ldGVycyBvciBhbnl0aGluZyBlbHNlIGRhdGEtZGVwZW5kZW50CgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwbGFuYXRpb249bnVsbF0gLSBsb25nZXIgZXhwbGFuYXRpb24sIG1heSBpbmNsdWRlIHBhcmFtZXRlcnMgYW5kIG90aGVyIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KCSAgICogQHJldHVybiB7SW50ZXJ2YWx9CgkgICAqLwoKCgkgIEludGVydmFsLmludmFsaWQgPSBmdW5jdGlvbiBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pIHsKCSAgICBpZiAoZXhwbGFuYXRpb24gPT09IHZvaWQgMCkgewoJICAgICAgZXhwbGFuYXRpb24gPSBudWxsOwoJICAgIH0KCgkgICAgaWYgKCFyZWFzb24pIHsKCSAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBJbnRlcnZhbCBpcyBpbnZhbGlkIik7CgkgICAgfQoKCSAgICB2YXIgaW52YWxpZCA9IHJlYXNvbiBpbnN0YW5jZW9mIEludmFsaWQgPyByZWFzb24gOiBuZXcgSW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uKTsKCgkgICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7CgkgICAgICB0aHJvdyBuZXcgSW52YWxpZEludGVydmFsRXJyb3IoaW52YWxpZCk7CgkgICAgfSBlbHNlIHsKCSAgICAgIHJldHVybiBuZXcgSW50ZXJ2YWwoewoJICAgICAgICBpbnZhbGlkOiBpbnZhbGlkCgkgICAgICB9KTsKCSAgICB9CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGEgc3RhcnQgRGF0ZVRpbWUgYW5kIGFuIGVuZCBEYXRlVGltZS4gSW5jbHVzaXZlIG9mIHRoZSBzdGFydCBidXQgbm90IHRoZSBlbmQuCgkgICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IHN0YXJ0CgkgICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IGVuZAoJICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KCSAgICovCgkgIDsKCgkgIEludGVydmFsLmZyb21EYXRlVGltZXMgPSBmdW5jdGlvbiBmcm9tRGF0ZVRpbWVzKHN0YXJ0LCBlbmQpIHsKCSAgICB2YXIgYnVpbHRTdGFydCA9IGZyaWVuZGx5RGF0ZVRpbWUoc3RhcnQpLAoJICAgICAgICBidWlsdEVuZCA9IGZyaWVuZGx5RGF0ZVRpbWUoZW5kKTsKCSAgICB2YXIgdmFsaWRhdGVFcnJvciA9IHZhbGlkYXRlU3RhcnRFbmQoYnVpbHRTdGFydCwgYnVpbHRFbmQpOwoKCSAgICBpZiAodmFsaWRhdGVFcnJvciA9PSBudWxsKSB7CgkgICAgICByZXR1cm4gbmV3IEludGVydmFsKHsKCSAgICAgICAgc3RhcnQ6IGJ1aWx0U3RhcnQsCgkgICAgICAgIGVuZDogYnVpbHRFbmQKCSAgICAgIH0pOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gdmFsaWRhdGVFcnJvcjsKCSAgICB9CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGEgc3RhcnQgRGF0ZVRpbWUgYW5kIGEgRHVyYXRpb24gdG8gZXh0ZW5kIHRvLgoJICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBzdGFydAoJICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwuCgkgICAqIEByZXR1cm4ge0ludGVydmFsfQoJICAgKi8KCSAgOwoKCSAgSW50ZXJ2YWwuYWZ0ZXIgPSBmdW5jdGlvbiBhZnRlcihzdGFydCwgZHVyYXRpb24pIHsKCSAgICB2YXIgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksCgkgICAgICAgIGR0ID0gZnJpZW5kbHlEYXRlVGltZShzdGFydCk7CgkgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQsIGR0LnBsdXMoZHVyKSk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGFuIGVuZCBEYXRlVGltZSBhbmQgYSBEdXJhdGlvbiB0byBleHRlbmQgYmFja3dhcmRzIHRvLgoJICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBlbmQKCSAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIHRoZSBsZW5ndGggb2YgdGhlIEludGVydmFsLgoJICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KCSAgICovCgkgIDsKCgkgIEludGVydmFsLmJlZm9yZSA9IGZ1bmN0aW9uIGJlZm9yZShlbmQsIGR1cmF0aW9uKSB7CgkgICAgdmFyIGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLAoJICAgICAgICBkdCA9IGZyaWVuZGx5RGF0ZVRpbWUoZW5kKTsKCSAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdC5taW51cyhkdXIpLCBkdCk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGFuIElTTyA4NjAxIHN0cmluZy4KCSAgICogQWNjZXB0cyBgPHN0YXJ0Pi88ZW5kPmAsIGA8c3RhcnQ+LzxkdXJhdGlvbj5gLCBhbmQgYDxkdXJhdGlvbj4vPGVuZD5gIGZvcm1hdHMuCgkgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIElTTyBzdHJpbmcgdG8gcGFyc2UKCSAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIG9wdGlvbnMgdG8gcGFzcyB7QGxpbmsgRGF0ZVRpbWUjZnJvbUlTT30gYW5kIG9wdGlvbmFsbHkge0BsaW5rIER1cmF0aW9uI2Zyb21JU099CgkgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHMKCSAgICogQHJldHVybiB7SW50ZXJ2YWx9CgkgICAqLwoJICA7CgoJICBJbnRlcnZhbC5mcm9tSVNPID0gZnVuY3Rpb24gZnJvbUlTTyh0ZXh0LCBvcHRzKSB7CgkgICAgdmFyIF9zcGxpdCA9ICh0ZXh0IHx8ICIiKS5zcGxpdCgiLyIsIDIpLAoJICAgICAgICBzID0gX3NwbGl0WzBdLAoJICAgICAgICBlID0gX3NwbGl0WzFdOwoKCSAgICBpZiAocyAmJiBlKSB7CgkgICAgICB2YXIgc3RhcnQsIHN0YXJ0SXNWYWxpZDsKCgkgICAgICB0cnkgewoJICAgICAgICBzdGFydCA9IERhdGVUaW1lLmZyb21JU08ocywgb3B0cyk7CgkgICAgICAgIHN0YXJ0SXNWYWxpZCA9IHN0YXJ0LmlzVmFsaWQ7CgkgICAgICB9IGNhdGNoIChlKSB7CgkgICAgICAgIHN0YXJ0SXNWYWxpZCA9IGZhbHNlOwoJICAgICAgfQoKCSAgICAgIHZhciBlbmQsIGVuZElzVmFsaWQ7CgoJICAgICAgdHJ5IHsKCSAgICAgICAgZW5kID0gRGF0ZVRpbWUuZnJvbUlTTyhlLCBvcHRzKTsKCSAgICAgICAgZW5kSXNWYWxpZCA9IGVuZC5pc1ZhbGlkOwoJICAgICAgfSBjYXRjaCAoZSkgewoJICAgICAgICBlbmRJc1ZhbGlkID0gZmFsc2U7CgkgICAgICB9CgoJICAgICAgaWYgKHN0YXJ0SXNWYWxpZCAmJiBlbmRJc1ZhbGlkKSB7CgkgICAgICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHN0YXJ0LCBlbmQpOwoJICAgICAgfQoKCSAgICAgIGlmIChzdGFydElzVmFsaWQpIHsKCSAgICAgICAgdmFyIGR1ciA9IER1cmF0aW9uLmZyb21JU08oZSwgb3B0cyk7CgoJICAgICAgICBpZiAoZHVyLmlzVmFsaWQpIHsKCSAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwuYWZ0ZXIoc3RhcnQsIGR1cik7CgkgICAgICAgIH0KCSAgICAgIH0gZWxzZSBpZiAoZW5kSXNWYWxpZCkgewoJICAgICAgICB2YXIgX2R1ciA9IER1cmF0aW9uLmZyb21JU08ocywgb3B0cyk7CgoJICAgICAgICBpZiAoX2R1ci5pc1ZhbGlkKSB7CgkgICAgICAgICAgcmV0dXJuIEludGVydmFsLmJlZm9yZShlbmQsIF9kdXIpOwoJICAgICAgICB9CgkgICAgICB9CgkgICAgfQoKCSAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZCgidW5wYXJzYWJsZSIsICJ0aGUgaW5wdXQgXCIiICsgdGV4dCArICJcIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDEiKTsKCSAgfQoJICAvKioKCSAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEludGVydmFsLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzCgkgICAqIEBwYXJhbSB7b2JqZWN0fSBvCgkgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICBJbnRlcnZhbC5pc0ludGVydmFsID0gZnVuY3Rpb24gaXNJbnRlcnZhbChvKSB7CgkgICAgcmV0dXJuIG8gJiYgby5pc0x1eG9uSW50ZXJ2YWwgfHwgZmFsc2U7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgdGhlIHN0YXJ0IG9mIHRoZSBJbnRlcnZhbAoJICAgKiBAdHlwZSB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICB2YXIgX3Byb3RvID0gSW50ZXJ2YWwucHJvdG90eXBlOwoKCSAgLyoqCgkgICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwgaW4gdGhlIHNwZWNpZmllZCB1bml0LgoJICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byByZXR1cm4gdGhlIGxlbmd0aCBpbi4KCSAgICogQHJldHVybiB7bnVtYmVyfQoJICAgKi8KCSAgX3Byb3RvLmxlbmd0aCA9IGZ1bmN0aW9uIGxlbmd0aCh1bml0KSB7CgkgICAgaWYgKHVuaXQgPT09IHZvaWQgMCkgewoJICAgICAgdW5pdCA9ICJtaWxsaXNlY29uZHMiOwoJICAgIH0KCgkgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudG9EdXJhdGlvbi5hcHBseSh0aGlzLCBbdW5pdF0pLmdldCh1bml0KSA6IE5hTjsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyB0aGUgY291bnQgb2YgbWludXRlcywgaG91cnMsIGRheXMsIG1vbnRocywgb3IgeWVhcnMgaW5jbHVkZWQgaW4gdGhlIEludGVydmFsLCBldmVuIGluIHBhcnQuCgkgICAqIFVubGlrZSB7QGxpbmsgSW50ZXJ2YWwjbGVuZ3RofSB0aGlzIGNvdW50cyBzZWN0aW9ucyBvZiB0aGUgY2FsZW5kYXIsIG5vdCBwZXJpb2RzIG9mIHRpbWUsIGUuZy4gc3BlY2lmeWluZyAnZGF5JwoJICAgKiBhc2tzICd3aGF0IGRhdGVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzIGludGVydmFsPycsIG5vdCAnaG93IG1hbnkgZGF5cyBsb25nIGlzIHRoaXMgaW50ZXJ2YWw/JwoJICAgKiBAcGFyYW0ge3N0cmluZ30gW3VuaXQ9J21pbGxpc2Vjb25kcyddIC0gdGhlIHVuaXQgb2YgdGltZSB0byBjb3VudC4KCSAgICogQHJldHVybiB7bnVtYmVyfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLmNvdW50ID0gZnVuY3Rpb24gY291bnQodW5pdCkgewoJICAgIGlmICh1bml0ID09PSB2b2lkIDApIHsKCSAgICAgIHVuaXQgPSAibWlsbGlzZWNvbmRzIjsKCSAgICB9CgoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gTmFOOwoJICAgIHZhciBzdGFydCA9IHRoaXMuc3RhcnQuc3RhcnRPZih1bml0KSwKCSAgICAgICAgZW5kID0gdGhpcy5lbmQuc3RhcnRPZih1bml0KTsKCSAgICByZXR1cm4gTWF0aC5mbG9vcihlbmQuZGlmZihzdGFydCwgdW5pdCkuZ2V0KHVuaXQpKSArIDE7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgd2hldGhlciB0aGlzIEludGVydmFsJ3Mgc3RhcnQgYW5kIGVuZCBhcmUgYm90aCBpbiB0aGUgc2FtZSB1bml0IG9mIHRpbWUKCSAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSB0aGUgdW5pdCBvZiB0aW1lIHRvIGNoZWNrIHNhbWVuZXNzIG9uCgkgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICBfcHJvdG8uaGFzU2FtZSA9IGZ1bmN0aW9uIGhhc1NhbWUodW5pdCkgewoJICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmlzRW1wdHkoKSB8fCB0aGlzLmUubWludXMoMSkuaGFzU2FtZSh0aGlzLnMsIHVuaXQpIDogZmFsc2U7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgaGFzIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgRGF0ZVRpbWVzLgoJICAgKiBAcmV0dXJuIHtib29sZWFufQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLmlzRW1wdHkgPSBmdW5jdGlvbiBpc0VtcHR5KCkgewoJICAgIHJldHVybiB0aGlzLnMudmFsdWVPZigpID09PSB0aGlzLmUudmFsdWVPZigpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsJ3Mgc3RhcnQgaXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBEYXRlVGltZS4KCSAgICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVRpbWUKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5pc0FmdGVyID0gZnVuY3Rpb24gaXNBZnRlcihkYXRlVGltZSkgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7CgkgICAgcmV0dXJuIHRoaXMucyA+IGRhdGVUaW1lOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsJ3MgZW5kIGlzIGJlZm9yZSB0aGUgc3BlY2lmaWVkIERhdGVUaW1lLgoJICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBkYXRlVGltZQoJICAgKiBAcmV0dXJuIHtib29sZWFufQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLmlzQmVmb3JlID0gZnVuY3Rpb24gaXNCZWZvcmUoZGF0ZVRpbWUpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlOwoJICAgIHJldHVybiB0aGlzLmUgPD0gZGF0ZVRpbWU7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgY29udGFpbnMgdGhlIHNwZWNpZmllZCBEYXRlVGltZS4KCSAgICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVRpbWUKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5jb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKGRhdGVUaW1lKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTsKCSAgICByZXR1cm4gdGhpcy5zIDw9IGRhdGVUaW1lICYmIHRoaXMuZSA+IGRhdGVUaW1lOwoJICB9CgkgIC8qKgoJICAgKiAiU2V0cyIgdGhlIHN0YXJ0IGFuZC9vciBlbmQgZGF0ZXMuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBJbnRlcnZhbC4KCSAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlcyAtIHRoZSB2YWx1ZXMgdG8gc2V0CgkgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IHZhbHVlcy5zdGFydCAtIHRoZSBzdGFydGluZyBEYXRlVGltZQoJICAgKiBAcGFyYW0ge0RhdGVUaW1lfSB2YWx1ZXMuZW5kIC0gdGhlIGVuZGluZyBEYXRlVGltZQoJICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KCSAgICovCgkgIDsKCgkgIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQoX3RlbXApIHsKCSAgICB2YXIgX3JlZiA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLAoJICAgICAgICBzdGFydCA9IF9yZWYuc3RhcnQsCgkgICAgICAgIGVuZCA9IF9yZWYuZW5kOwoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CgkgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQgfHwgdGhpcy5zLCBlbmQgfHwgdGhpcy5lKTsKCSAgfQoJICAvKioKCSAgICogU3BsaXQgdGhpcyBJbnRlcnZhbCBhdCBlYWNoIG9mIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWVzCgkgICAqIEBwYXJhbSB7Li4uRGF0ZVRpbWV9IGRhdGVUaW1lcyAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY291bnQuCgkgICAqIEByZXR1cm4ge0FycmF5fQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnNwbGl0QXQgPSBmdW5jdGlvbiBzcGxpdEF0KCkgewoJICAgIHZhciBfdGhpcyA9IHRoaXM7CgoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gW107CgoJICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBkYXRlVGltZXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CgkgICAgICBkYXRlVGltZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CgkgICAgfQoKCSAgICB2YXIgc29ydGVkID0gZGF0ZVRpbWVzLm1hcChmcmllbmRseURhdGVUaW1lKS5maWx0ZXIoZnVuY3Rpb24gKGQpIHsKCSAgICAgIHJldHVybiBfdGhpcy5jb250YWlucyhkKTsKCSAgICB9KS5zb3J0KCksCgkgICAgICAgIHJlc3VsdHMgPSBbXTsKCSAgICB2YXIgcyA9IHRoaXMucywKCSAgICAgICAgaSA9IDA7CgoJICAgIHdoaWxlIChzIDwgdGhpcy5lKSB7CgkgICAgICB2YXIgYWRkZWQgPSBzb3J0ZWRbaV0gfHwgdGhpcy5lLAoJICAgICAgICAgIG5leHQgPSArYWRkZWQgPiArdGhpcy5lID8gdGhpcy5lIDogYWRkZWQ7CgkgICAgICByZXN1bHRzLnB1c2goSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBuZXh0KSk7CgkgICAgICBzID0gbmV4dDsKCSAgICAgIGkgKz0gMTsKCSAgICB9CgoJICAgIHJldHVybiByZXN1bHRzOwoJICB9CgkgIC8qKgoJICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGludG8gc21hbGxlciBJbnRlcnZhbHMsIGVhY2ggb2YgdGhlIHNwZWNpZmllZCBsZW5ndGguCgkgICAqIExlZnQgb3ZlciB0aW1lIGlzIGdyb3VwZWQgaW50byBhIHNtYWxsZXIgaW50ZXJ2YWwKCSAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBsZW5ndGggb2YgZWFjaCByZXN1bHRpbmcgaW50ZXJ2YWwuCgkgICAqIEByZXR1cm4ge0FycmF5fQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnNwbGl0QnkgPSBmdW5jdGlvbiBzcGxpdEJ5KGR1cmF0aW9uKSB7CgkgICAgdmFyIGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pOwoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhZHVyLmlzVmFsaWQgfHwgZHVyLmFzKCJtaWxsaXNlY29uZHMiKSA9PT0gMCkgewoJICAgICAgcmV0dXJuIFtdOwoJICAgIH0KCgkgICAgdmFyIHMgPSB0aGlzLnMsCgkgICAgICAgIGlkeCA9IDEsCgkgICAgICAgIG5leHQ7CgkgICAgdmFyIHJlc3VsdHMgPSBbXTsKCgkgICAgd2hpbGUgKHMgPCB0aGlzLmUpIHsKCSAgICAgIHZhciBhZGRlZCA9IHRoaXMuc3RhcnQucGx1cyhkdXIubWFwVW5pdHMoZnVuY3Rpb24gKHgpIHsKCSAgICAgICAgcmV0dXJuIHggKiBpZHg7CgkgICAgICB9KSk7CgkgICAgICBuZXh0ID0gK2FkZGVkID4gK3RoaXMuZSA/IHRoaXMuZSA6IGFkZGVkOwoJICAgICAgcmVzdWx0cy5wdXNoKEludGVydmFsLmZyb21EYXRlVGltZXMocywgbmV4dCkpOwoJICAgICAgcyA9IG5leHQ7CgkgICAgICBpZHggKz0gMTsKCSAgICB9CgoJICAgIHJldHVybiByZXN1bHRzOwoJICB9CgkgIC8qKgoJICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGludG8gdGhlIHNwZWNpZmllZCBudW1iZXIgb2Ygc21hbGxlciBpbnRlcnZhbHMuCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXJPZlBhcnRzIC0gVGhlIG51bWJlciBvZiBJbnRlcnZhbHMgdG8gZGl2aWRlIHRoZSBJbnRlcnZhbCBpbnRvLgoJICAgKiBAcmV0dXJuIHtBcnJheX0KCSAgICovCgkgIDsKCgkgIF9wcm90by5kaXZpZGVFcXVhbGx5ID0gZnVuY3Rpb24gZGl2aWRlRXF1YWxseShudW1iZXJPZlBhcnRzKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBbXTsKCSAgICByZXR1cm4gdGhpcy5zcGxpdEJ5KHRoaXMubGVuZ3RoKCkgLyBudW1iZXJPZlBhcnRzKS5zbGljZSgwLCBudW1iZXJPZlBhcnRzKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBvdmVybGFwcyB3aXRoIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwKCSAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXIKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5vdmVybGFwcyA9IGZ1bmN0aW9uIG92ZXJsYXBzKG90aGVyKSB7CgkgICAgcmV0dXJuIHRoaXMuZSA+IG90aGVyLnMgJiYgdGhpcy5zIDwgb3RoZXIuZTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBhZGphY2VudCB0byB0aGUgc3BlY2lmaWVkIEludGVydmFsJ3Mgc3RhcnQuCgkgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCgkgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICBfcHJvdG8uYWJ1dHNTdGFydCA9IGZ1bmN0aW9uIGFidXRzU3RhcnQob3RoZXIpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlOwoJICAgIHJldHVybiArdGhpcy5lID09PSArb3RoZXIuczsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIHN0YXJ0IGlzIGFkamFjZW50IHRvIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwncyBlbmQuCgkgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCgkgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICBfcHJvdG8uYWJ1dHNFbmQgPSBmdW5jdGlvbiBhYnV0c0VuZChvdGhlcikgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7CgkgICAgcmV0dXJuICtvdGhlci5lID09PSArdGhpcy5zOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGVuZ3VsZnMgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC4KCSAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXIKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5lbmd1bGZzID0gZnVuY3Rpb24gZW5ndWxmcyhvdGhlcikgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7CgkgICAgcmV0dXJuIHRoaXMucyA8PSBvdGhlci5zICYmIHRoaXMuZSA+PSBvdGhlci5lOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGhhcyB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIGFzIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuCgkgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCgkgICAqIEByZXR1cm4ge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICBfcHJvdG8uZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyLmlzVmFsaWQpIHsKCSAgICAgIHJldHVybiBmYWxzZTsKCSAgICB9CgoJICAgIHJldHVybiB0aGlzLnMuZXF1YWxzKG90aGVyLnMpICYmIHRoaXMuZS5lcXVhbHMob3RoZXIuZSk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIEludGVydmFsIGFuZCB0aGUgc3BlY2lmaWVkIEludGVydmFsLgoJICAgKiBTcGVjaWZpY2FsbHksIHRoZSByZXN1bHRpbmcgSW50ZXJ2YWwgaGFzIHRoZSBtYXhpbXVtIHN0YXJ0IHRpbWUgYW5kIHRoZSBtaW5pbXVtIGVuZCB0aW1lIG9mIHRoZSB0d28gSW50ZXJ2YWxzLgoJICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIGludGVyc2VjdGlvbiBpcyBlbXB0eSwgbWVhbmluZywgdGhlIGludGVydmFscyBkb24ndCBpbnRlcnNlY3QuCgkgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCgkgICAqIEByZXR1cm4ge0ludGVydmFsfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLmludGVyc2VjdGlvbiA9IGZ1bmN0aW9uIGludGVyc2VjdGlvbihvdGhlcikgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCSAgICB2YXIgcyA9IHRoaXMucyA+IG90aGVyLnMgPyB0aGlzLnMgOiBvdGhlci5zLAoJICAgICAgICBlID0gdGhpcy5lIDwgb3RoZXIuZSA/IHRoaXMuZSA6IG90aGVyLmU7CgoJICAgIGlmIChzID49IGUpIHsKCSAgICAgIHJldHVybiBudWxsOwoJICAgIH0gZWxzZSB7CgkgICAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBlKTsKCSAgICB9CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIHVuaW9uIG9mIHRoaXMgSW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuCgkgICAqIFNwZWNpZmljYWxseSwgdGhlIHJlc3VsdGluZyBJbnRlcnZhbCBoYXMgdGhlIG1pbmltdW0gc3RhcnQgdGltZSBhbmQgdGhlIG1heGltdW0gZW5kIHRpbWUgb2YgdGhlIHR3byBJbnRlcnZhbHMuCgkgICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyCgkgICAqIEByZXR1cm4ge0ludGVydmFsfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnVuaW9uID0gZnVuY3Rpb24gdW5pb24ob3RoZXIpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CgkgICAgdmFyIHMgPSB0aGlzLnMgPCBvdGhlci5zID8gdGhpcy5zIDogb3RoZXIucywKCSAgICAgICAgZSA9IHRoaXMuZSA+IG90aGVyLmUgPyB0aGlzLmUgOiBvdGhlci5lOwoJICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIGUpOwoJICB9CgkgIC8qKgoJICAgKiBNZXJnZSBhbiBhcnJheSBvZiBJbnRlcnZhbHMgaW50byBhIGVxdWl2YWxlbnQgbWluaW1hbCBzZXQgb2YgSW50ZXJ2YWxzLgoJICAgKiBDb21iaW5lcyBvdmVybGFwcGluZyBhbmQgYWRqYWNlbnQgSW50ZXJ2YWxzLgoJICAgKiBAcGFyYW0ge0FycmF5fSBpbnRlcnZhbHMKCSAgICogQHJldHVybiB7QXJyYXl9CgkgICAqLwoJICA7CgoJICBJbnRlcnZhbC5tZXJnZSA9IGZ1bmN0aW9uIG1lcmdlKGludGVydmFscykgewoJICAgIHZhciBfaW50ZXJ2YWxzJHNvcnQkcmVkdWMgPSBpbnRlcnZhbHMuc29ydChmdW5jdGlvbiAoYSwgYikgewoJICAgICAgcmV0dXJuIGEucyAtIGIuczsKCSAgICB9KS5yZWR1Y2UoZnVuY3Rpb24gKF9yZWYyLCBpdGVtKSB7CgkgICAgICB2YXIgc29mYXIgPSBfcmVmMlswXSwKCSAgICAgICAgICBjdXJyZW50ID0gX3JlZjJbMV07CgoJICAgICAgaWYgKCFjdXJyZW50KSB7CgkgICAgICAgIHJldHVybiBbc29mYXIsIGl0ZW1dOwoJICAgICAgfSBlbHNlIGlmIChjdXJyZW50Lm92ZXJsYXBzKGl0ZW0pIHx8IGN1cnJlbnQuYWJ1dHNTdGFydChpdGVtKSkgewoJICAgICAgICByZXR1cm4gW3NvZmFyLCBjdXJyZW50LnVuaW9uKGl0ZW0pXTsKCSAgICAgIH0gZWxzZSB7CgkgICAgICAgIHJldHVybiBbc29mYXIuY29uY2F0KFtjdXJyZW50XSksIGl0ZW1dOwoJICAgICAgfQoJICAgIH0sIFtbXSwgbnVsbF0pLAoJICAgICAgICBmb3VuZCA9IF9pbnRlcnZhbHMkc29ydCRyZWR1Y1swXSwKCSAgICAgICAgZmluYWwgPSBfaW50ZXJ2YWxzJHNvcnQkcmVkdWNbMV07CgoJICAgIGlmIChmaW5hbCkgewoJICAgICAgZm91bmQucHVzaChmaW5hbCk7CgkgICAgfQoKCSAgICByZXR1cm4gZm91bmQ7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiBhbiBhcnJheSBvZiBJbnRlcnZhbHMgcmVwcmVzZW50aW5nIHRoZSBzcGFucyBvZiB0aW1lIHRoYXQgb25seSBhcHBlYXIgaW4gb25lIG9mIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWxzLgoJICAgKiBAcGFyYW0ge0FycmF5fSBpbnRlcnZhbHMKCSAgICogQHJldHVybiB7QXJyYXl9CgkgICAqLwoJICA7CgoJICBJbnRlcnZhbC54b3IgPSBmdW5jdGlvbiB4b3IoaW50ZXJ2YWxzKSB7CgkgICAgdmFyIF9BcnJheSRwcm90b3R5cGU7CgoJICAgIHZhciBzdGFydCA9IG51bGwsCgkgICAgICAgIGN1cnJlbnRDb3VudCA9IDA7CgoJICAgIHZhciByZXN1bHRzID0gW10sCgkgICAgICAgIGVuZHMgPSBpbnRlcnZhbHMubWFwKGZ1bmN0aW9uIChpKSB7CgkgICAgICByZXR1cm4gW3sKCSAgICAgICAgdGltZTogaS5zLAoJICAgICAgICB0eXBlOiAicyIKCSAgICAgIH0sIHsKCSAgICAgICAgdGltZTogaS5lLAoJICAgICAgICB0eXBlOiAiZSIKCSAgICAgIH1dOwoJICAgIH0pLAoJICAgICAgICBmbGF0dGVuZWQgPSAoX0FycmF5JHByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZSkuY29uY2F0LmFwcGx5KF9BcnJheSRwcm90b3R5cGUsIGVuZHMpLAoJICAgICAgICBhcnIgPSBmbGF0dGVuZWQuc29ydChmdW5jdGlvbiAoYSwgYikgewoJICAgICAgcmV0dXJuIGEudGltZSAtIGIudGltZTsKCSAgICB9KTsKCgkgICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShhcnIpLCBfc3RlcDsgIShfc3RlcCA9IF9pdGVyYXRvcigpKS5kb25lOykgewoJICAgICAgdmFyIGkgPSBfc3RlcC52YWx1ZTsKCSAgICAgIGN1cnJlbnRDb3VudCArPSBpLnR5cGUgPT09ICJzIiA/IDEgOiAtMTsKCgkgICAgICBpZiAoY3VycmVudENvdW50ID09PSAxKSB7CgkgICAgICAgIHN0YXJ0ID0gaS50aW1lOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgaWYgKHN0YXJ0ICYmICtzdGFydCAhPT0gK2kudGltZSkgewoJICAgICAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHN0YXJ0LCBpLnRpbWUpKTsKCSAgICAgICAgfQoKCSAgICAgICAgc3RhcnQgPSBudWxsOwoJICAgICAgfQoJICAgIH0KCgkgICAgcmV0dXJuIEludGVydmFsLm1lcmdlKHJlc3VsdHMpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgcmVwcmVzZW50aW5nIHRoZSBzcGFuIG9mIHRpbWUgaW4gdGhpcyBJbnRlcnZhbCB0aGF0IGRvZXNuJ3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFscy4KCSAgICogQHBhcmFtIHsuLi5JbnRlcnZhbH0gaW50ZXJ2YWxzCgkgICAqIEByZXR1cm4ge0FycmF5fQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLmRpZmZlcmVuY2UgPSBmdW5jdGlvbiBkaWZmZXJlbmNlKCkgewoJICAgIHZhciBfdGhpczIgPSB0aGlzOwoKCSAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGludGVydmFscyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewoJICAgICAgaW50ZXJ2YWxzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07CgkgICAgfQoKCSAgICByZXR1cm4gSW50ZXJ2YWwueG9yKFt0aGlzXS5jb25jYXQoaW50ZXJ2YWxzKSkubWFwKGZ1bmN0aW9uIChpKSB7CgkgICAgICByZXR1cm4gX3RoaXMyLmludGVyc2VjdGlvbihpKTsKCSAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKGkpIHsKCSAgICAgIHJldHVybiBpICYmICFpLmlzRW1wdHkoKTsKCSAgICB9KTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsIGFwcHJvcHJpYXRlIGZvciBkZWJ1Z2dpbmcuCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxOwoJICAgIHJldHVybiAiWyIgKyB0aGlzLnMudG9JU08oKSArICIgXHUyMDEzICIgKyB0aGlzLmUudG9JU08oKSArICIpIjsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwuCgkgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHMKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBUaGUgc2FtZSBvcHRpb25zIGFzIHtAbGluayBEYXRlVGltZSN0b0lTT30KCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvSVNPID0gZnVuY3Rpb24gdG9JU08ob3B0cykgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxOwoJICAgIHJldHVybiB0aGlzLnMudG9JU08ob3B0cykgKyAiLyIgKyB0aGlzLmUudG9JU08ob3B0cyk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBkYXRlIG9mIHRoaXMgSW50ZXJ2YWwuCgkgICAqIFRoZSB0aW1lIGNvbXBvbmVudHMgYXJlIGlnbm9yZWQuCgkgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHMKCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvSVNPRGF0ZSA9IGZ1bmN0aW9uIHRvSVNPRGF0ZSgpIHsKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQkMTsKCSAgICByZXR1cm4gdGhpcy5zLnRvSVNPRGF0ZSgpICsgIi8iICsgdGhpcy5lLnRvSVNPRGF0ZSgpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGltZSBvZiB0aGlzIEludGVydmFsLgoJICAgKiBUaGUgZGF0ZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLgoJICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099CgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0lTT1RpbWUgPSBmdW5jdGlvbiB0b0lTT1RpbWUob3B0cykgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxOwoJICAgIHJldHVybiB0aGlzLnMudG9JU09UaW1lKG9wdHMpICsgIi8iICsgdGhpcy5lLnRvSVNPVGltZShvcHRzKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0ZUZvcm1hdCAtIHRoZSBmb3JtYXQgc3RyaW5nLiBUaGlzIHN0cmluZyBmb3JtYXRzIHRoZSBzdGFydCBhbmQgZW5kIHRpbWUuIFNlZSB7QGxpbmsgRGF0ZVRpbWUjdG9Gb3JtYXR9IGZvciBkZXRhaWxzLgoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLnNlcGFyYXRvciA9ICAnIOKAkyAnXSAtIGEgc2VwYXJhdG9yIHRvIHBsYWNlIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgcmVwcmVzZW50YXRpb25zCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0Zvcm1hdCA9IGZ1bmN0aW9uIHRvRm9ybWF0KGRhdGVGb3JtYXQsIF90ZW1wMikgewoJICAgIHZhciBfcmVmMyA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDIsCgkgICAgICAgIF9yZWYzJHNlcGFyYXRvciA9IF9yZWYzLnNlcGFyYXRvciwKCSAgICAgICAgc2VwYXJhdG9yID0gX3JlZjMkc2VwYXJhdG9yID09PSB2b2lkIDAgPyAiIOKAkyAiIDogX3JlZjMkc2VwYXJhdG9yOwoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQkMTsKCSAgICByZXR1cm4gIiIgKyB0aGlzLnMudG9Gb3JtYXQoZGF0ZUZvcm1hdCkgKyBzZXBhcmF0b3IgKyB0aGlzLmUudG9Gb3JtYXQoZGF0ZUZvcm1hdCk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiBhIER1cmF0aW9uIHJlcHJlc2VudGluZyB0aGUgdGltZSBzcGFubmVkIGJ5IHRoaXMgaW50ZXJ2YWwuCgkgICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbdW5pdD1bJ21pbGxpc2Vjb25kcyddXSAtIHRoZSB1bml0IG9yIHVuaXRzIChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byBpbmNsdWRlIGluIHRoZSBkdXJhdGlvbi4KCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiB0aGUgRHVyYXRpb24KCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlCgkgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oKS50b09iamVjdCgpIC8vPT4geyBtaWxsaXNlY29uZHM6IDg4NDg5MjU3IH0KCSAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbignZGF5cycpLnRvT2JqZWN0KCkgLy89PiB7IGRheXM6IDEuMDI0MTgxMjE1Mjc3Nzc3OCB9CgkgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oWydob3VycycsICdtaW51dGVzJ10pLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAyNCwgbWludXRlczogMzQuODIwOTUgfQoJICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKFsnaG91cnMnLCAnbWludXRlcycsICdzZWNvbmRzJ10pLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAyNCwgbWludXRlczogMzQsIHNlY29uZHM6IDQ5LjI1NyB9CgkgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oJ3NlY29uZHMnKS50b09iamVjdCgpIC8vPT4geyBzZWNvbmRzOiA4ODQ4OS4yNTcgfQoJICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0R1cmF0aW9uID0gZnVuY3Rpb24gdG9EdXJhdGlvbih1bml0LCBvcHRzKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHsKCSAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKHRoaXMuaW52YWxpZFJlYXNvbik7CgkgICAgfQoKCSAgICByZXR1cm4gdGhpcy5lLmRpZmYodGhpcy5zLCB1bml0LCBvcHRzKTsKCSAgfQoJICAvKioKCSAgICogUnVuIG1hcEZuIG9uIHRoZSBpbnRlcnZhbCBzdGFydCBhbmQgZW5kLCByZXR1cm5pbmcgYSBuZXcgSW50ZXJ2YWwgZnJvbSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lcwoJICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtYXBGbgoJICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KCSAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikubWFwRW5kcG9pbnRzKGVuZHBvaW50ID0+IGVuZHBvaW50LnRvVVRDKCkpCgkgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLm1hcEVuZHBvaW50cyhlbmRwb2ludCA9PiBlbmRwb2ludC5wbHVzKHsgaG91cnM6IDIgfSkpCgkgICAqLwoJICA7CgoJICBfcHJvdG8ubWFwRW5kcG9pbnRzID0gZnVuY3Rpb24gbWFwRW5kcG9pbnRzKG1hcEZuKSB7CgkgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMobWFwRm4odGhpcy5zKSwgbWFwRm4odGhpcy5lKSk7CgkgIH07CgoJICBfY3JlYXRlQ2xhc3MoSW50ZXJ2YWwsIFt7CgkgICAga2V5OiAic3RhcnQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMucyA6IG51bGw7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFJldHVybnMgdGhlIGVuZCBvZiB0aGUgSW50ZXJ2YWwKCSAgICAgKiBAdHlwZSB7RGF0ZVRpbWV9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiZW5kIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmUgOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIGVuZCBpcyBhdCBsZWFzdCBpdHMgc3RhcnQsIG1lYW5pbmcgdGhhdCB0aGUgSW50ZXJ2YWwgaXNuJ3QgJ2JhY2t3YXJkcycuCgkgICAgICogQHR5cGUge2Jvb2xlYW59CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaXNWYWxpZCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkUmVhc29uID09PSBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBJbnRlcnZhbCBpcyBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBJbnRlcnZhbCBpcyB2YWxpZAoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaW52YWxpZFJlYXNvbiIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgSW50ZXJ2YWwgYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIEludGVydmFsIGlzIHZhbGlkCgkgICAgICogQHR5cGUge3N0cmluZ30KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJpbnZhbGlkRXhwbGFuYXRpb24iLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7CgkgICAgfQoJICB9XSk7CgoJICByZXR1cm4gSW50ZXJ2YWw7Cgl9KCk7CgoJLyoqCgkgKiBUaGUgSW5mbyBjbGFzcyBjb250YWlucyBzdGF0aWMgbWV0aG9kcyBmb3IgcmV0cmlldmluZyBnZW5lcmFsIHRpbWUgYW5kIGRhdGUgcmVsYXRlZCBkYXRhLiBGb3IgZXhhbXBsZSwgaXQgaGFzIG1ldGhvZHMgZm9yIGZpbmRpbmcgb3V0IGlmIGEgdGltZSB6b25lIGhhcyBhIERTVCwgZm9yIGxpc3RpbmcgdGhlIG1vbnRocyBpbiBhbnkgc3VwcG9ydGVkIGxvY2FsZSwgYW5kIGZvciBkaXNjb3ZlcmluZyB3aGljaCBvZiBMdXhvbiBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgoJICovCgoJdmFyIEluZm8gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewoJICBmdW5jdGlvbiBJbmZvKCkge30KCgkgIC8qKgoJICAgKiBSZXR1cm4gd2hldGhlciB0aGUgc3BlY2lmaWVkIHpvbmUgY29udGFpbnMgYSBEU1QuCgkgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFt6b25lPSdsb2NhbCddIC0gWm9uZSB0byBjaGVjay4gRGVmYXVsdHMgdG8gdGhlIGVudmlyb25tZW50J3MgbG9jYWwgem9uZS4KCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIEluZm8uaGFzRFNUID0gZnVuY3Rpb24gaGFzRFNUKHpvbmUpIHsKCSAgICBpZiAoem9uZSA9PT0gdm9pZCAwKSB7CgkgICAgICB6b25lID0gU2V0dGluZ3MuZGVmYXVsdFpvbmU7CgkgICAgfQoKCSAgICB2YXIgcHJvdG8gPSBEYXRlVGltZS5ub3coKS5zZXRab25lKHpvbmUpLnNldCh7CgkgICAgICBtb250aDogMTIKCSAgICB9KTsKCSAgICByZXR1cm4gIXpvbmUuaXNVbml2ZXJzYWwgJiYgcHJvdG8ub2Zmc2V0ICE9PSBwcm90by5zZXQoewoJICAgICAgbW9udGg6IDYKCSAgICB9KS5vZmZzZXQ7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgem9uZSBpcyBhIHZhbGlkIElBTkEgc3BlY2lmaWVyLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gem9uZSAtIFpvbmUgdG8gY2hlY2sKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIEluZm8uaXNWYWxpZElBTkFab25lID0gZnVuY3Rpb24gaXNWYWxpZElBTkFab25lKHpvbmUpIHsKCSAgICByZXR1cm4gSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcih6b25lKSAmJiBJQU5BWm9uZS5pc1ZhbGlkWm9uZSh6b25lKTsKCSAgfQoJICAvKioKCSAgICogQ29udmVydHMgdGhlIGlucHV0IGludG8gYSB7QGxpbmsgWm9uZX0gaW5zdGFuY2UuCgkgICAqCgkgICAqICogSWYgYGlucHV0YCBpcyBhbHJlYWR5IGEgWm9uZSBpbnN0YW5jZSwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLgoJICAgKiAqIElmIGBpbnB1dGAgaXMgYSBzdHJpbmcgY29udGFpbmluZyBhIHZhbGlkIHRpbWUgem9uZSBuYW1lLCBhIFpvbmUgaW5zdGFuY2UKCSAgICogICB3aXRoIHRoYXQgbmFtZSBpcyByZXR1cm5lZC4KCSAgICogKiBJZiBgaW5wdXRgIGlzIGEgc3RyaW5nIHRoYXQgZG9lc24ndCByZWZlciB0byBhIGtub3duIHRpbWUgem9uZSwgYSBab25lCgkgICAqICAgaW5zdGFuY2Ugd2l0aCB7QGxpbmsgWm9uZSNpc1ZhbGlkfSA9PSBmYWxzZSBpcyByZXR1cm5lZC4KCSAgICogKiBJZiBgaW5wdXQgaXMgYSBudW1iZXIsIGEgWm9uZSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZml4ZWQgb2Zmc2V0CgkgICAqICAgaW4gbWludXRlcyBpcyByZXR1cm5lZC4KCSAgICogKiBJZiBgaW5wdXRgIGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYCwgdGhlIGRlZmF1bHQgem9uZSBpcyByZXR1cm5lZC4KCSAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZXxudW1iZXJ9IFtpbnB1dF0gLSB0aGUgdmFsdWUgdG8gYmUgY29udmVydGVkCgkgICAqIEByZXR1cm4ge1pvbmV9CgkgICAqLwoJICA7CgoJICBJbmZvLm5vcm1hbGl6ZVpvbmUgPSBmdW5jdGlvbiBub3JtYWxpemVab25lJDEoaW5wdXQpIHsKCSAgICByZXR1cm4gbm9ybWFsaXplWm9uZShpbnB1dCwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gYW4gYXJyYXkgb2Ygc3RhbmRhbG9uZSBtb250aCBuYW1lcy4KCSAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdAoJICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgIm51bWVyaWMiLCAiMi1kaWdpdCIsICJuYXJyb3ciLCAic2hvcnQiLCAibG9uZyIKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm91dHB1dENhbGVuZGFyPSdncmVnb3J5J10gLSB0aGUgY2FsZW5kYXIKCSAgICogQGV4YW1wbGUgSW5mby5tb250aHMoKVswXSAvLz0+ICdKYW51YXJ5JwoJICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnc2hvcnQnKVswXSAvLz0+ICdKYW4nCgkgICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdudW1lcmljJylbMF0gLy89PiAnMScKCSAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ3Nob3J0JywgeyBsb2NhbGU6ICdmci1DQScgfSApWzBdIC8vPT4gJ2phbnYuJwoJICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbnVtZXJpYycsIHsgbG9jYWxlOiAnYXInIH0pWzBdIC8vPT4gJ9mhJwoJICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbG9uZycsIHsgb3V0cHV0Q2FsZW5kYXI6ICdpc2xhbWljJyB9KVswXSAvLz0+ICdSYWJpyrsgSScKCSAgICogQHJldHVybiB7QXJyYXl9CgkgICAqLwoJICA7CgoJICBJbmZvLm1vbnRocyA9IGZ1bmN0aW9uIG1vbnRocyhsZW5ndGgsIF90ZW1wKSB7CgkgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7CgkgICAgICBsZW5ndGggPSAibG9uZyI7CgkgICAgfQoKCSAgICB2YXIgX3JlZiA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLAoJICAgICAgICBfcmVmJGxvY2FsZSA9IF9yZWYubG9jYWxlLAoJICAgICAgICBsb2NhbGUgPSBfcmVmJGxvY2FsZSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYkbG9jYWxlLAoJICAgICAgICBfcmVmJG51bWJlcmluZ1N5c3RlbSA9IF9yZWYubnVtYmVyaW5nU3lzdGVtLAoJICAgICAgICBudW1iZXJpbmdTeXN0ZW0gPSBfcmVmJG51bWJlcmluZ1N5c3RlbSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYkbnVtYmVyaW5nU3lzdGVtLAoJICAgICAgICBfcmVmJGxvY09iaiA9IF9yZWYubG9jT2JqLAoJICAgICAgICBsb2NPYmogPSBfcmVmJGxvY09iaiA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYkbG9jT2JqLAoJICAgICAgICBfcmVmJG91dHB1dENhbGVuZGFyID0gX3JlZi5vdXRwdXRDYWxlbmRhciwKCSAgICAgICAgb3V0cHV0Q2FsZW5kYXIgPSBfcmVmJG91dHB1dENhbGVuZGFyID09PSB2b2lkIDAgPyAiZ3JlZ29yeSIgOiBfcmVmJG91dHB1dENhbGVuZGFyOwoKCSAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBvdXRwdXRDYWxlbmRhcikpLm1vbnRocyhsZW5ndGgpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZm9ybWF0IG1vbnRoIG5hbWVzLgoJICAgKiBGb3JtYXQgbW9udGhzIGRpZmZlciBmcm9tIHN0YW5kYWxvbmUgbW9udGhzIGluIHRoYXQgdGhleSdyZSBtZWFudCB0byBhcHBlYXIgbmV4dCB0byB0aGUgZGF5IG9mIHRoZSBtb250aC4gSW4gc29tZSBsYW5ndWFnZXMsIHRoYXQKCSAgICogY2hhbmdlcyB0aGUgc3RyaW5nLgoJICAgKiBTZWUge0BsaW5rIEluZm8jbW9udGhzfQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgIm51bWVyaWMiLCAiMi1kaWdpdCIsICJuYXJyb3ciLCAic2hvcnQiLCAibG9uZyIKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm91dHB1dENhbGVuZGFyPSdncmVnb3J5J10gLSB0aGUgY2FsZW5kYXIKCSAgICogQHJldHVybiB7QXJyYXl9CgkgICAqLwoJICA7CgoJICBJbmZvLm1vbnRoc0Zvcm1hdCA9IGZ1bmN0aW9uIG1vbnRoc0Zvcm1hdChsZW5ndGgsIF90ZW1wMikgewoJICAgIGlmIChsZW5ndGggPT09IHZvaWQgMCkgewoJICAgICAgbGVuZ3RoID0gImxvbmciOwoJICAgIH0KCgkgICAgdmFyIF9yZWYyID0gX3RlbXAyID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wMiwKCSAgICAgICAgX3JlZjIkbG9jYWxlID0gX3JlZjIubG9jYWxlLAoJICAgICAgICBsb2NhbGUgPSBfcmVmMiRsb2NhbGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMiRsb2NhbGUsCgkgICAgICAgIF9yZWYyJG51bWJlcmluZ1N5c3RlbSA9IF9yZWYyLm51bWJlcmluZ1N5c3RlbSwKCSAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX3JlZjIkbnVtYmVyaW5nU3lzdGVtID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjIkbnVtYmVyaW5nU3lzdGVtLAoJICAgICAgICBfcmVmMiRsb2NPYmogPSBfcmVmMi5sb2NPYmosCgkgICAgICAgIGxvY09iaiA9IF9yZWYyJGxvY09iaiA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYyJGxvY09iaiwKCSAgICAgICAgX3JlZjIkb3V0cHV0Q2FsZW5kYXIgPSBfcmVmMi5vdXRwdXRDYWxlbmRhciwKCSAgICAgICAgb3V0cHV0Q2FsZW5kYXIgPSBfcmVmMiRvdXRwdXRDYWxlbmRhciA9PT0gdm9pZCAwID8gImdyZWdvcnkiIDogX3JlZjIkb3V0cHV0Q2FsZW5kYXI7CgoJICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSkubW9udGhzKGxlbmd0aCwgdHJ1ZSk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiBhbiBhcnJheSBvZiBzdGFuZGFsb25lIHdlZWsgbmFtZXMuCgkgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXQKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIHdlZWtkYXkgcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgIm5hcnJvdyIsICJzaG9ydCIsICJsb25nIi4KCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2UKCSAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygpWzBdIC8vPT4gJ01vbmRheScKCSAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnKVswXSAvLz0+ICdNb24nCgkgICAqIEBleGFtcGxlIEluZm8ud2Vla2RheXMoJ3Nob3J0JywgeyBsb2NhbGU6ICdmci1DQScgfSlbMF0gLy89PiAnbHVuLicKCSAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnLCB7IGxvY2FsZTogJ2FyJyB9KVswXSAvLz0+ICfYp9mE2KfYq9mG2YrZhicKCSAgICogQHJldHVybiB7QXJyYXl9CgkgICAqLwoJICA7CgoJICBJbmZvLndlZWtkYXlzID0gZnVuY3Rpb24gd2Vla2RheXMobGVuZ3RoLCBfdGVtcDMpIHsKCSAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsKCSAgICAgIGxlbmd0aCA9ICJsb25nIjsKCSAgICB9CgoJICAgIHZhciBfcmVmMyA9IF90ZW1wMyA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDMsCgkgICAgICAgIF9yZWYzJGxvY2FsZSA9IF9yZWYzLmxvY2FsZSwKCSAgICAgICAgbG9jYWxlID0gX3JlZjMkbG9jYWxlID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjMkbG9jYWxlLAoJICAgICAgICBfcmVmMyRudW1iZXJpbmdTeXN0ZW0gPSBfcmVmMy5udW1iZXJpbmdTeXN0ZW0sCgkgICAgICAgIG51bWJlcmluZ1N5c3RlbSA9IF9yZWYzJG51bWJlcmluZ1N5c3RlbSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYzJG51bWJlcmluZ1N5c3RlbSwKCSAgICAgICAgX3JlZjMkbG9jT2JqID0gX3JlZjMubG9jT2JqLAoJICAgICAgICBsb2NPYmogPSBfcmVmMyRsb2NPYmogPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMyRsb2NPYmo7CgoJICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG51bGwpKS53ZWVrZGF5cyhsZW5ndGgpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgZm9ybWF0IHdlZWsgbmFtZXMuCgkgICAqIEZvcm1hdCB3ZWVrZGF5cyBkaWZmZXIgZnJvbSBzdGFuZGFsb25lIHdlZWtkYXlzIGluIHRoYXQgdGhleSdyZSBtZWFudCB0byBhcHBlYXIgbmV4dCB0byBtb3JlIGRhdGUgaW5mb3JtYXRpb24uIEluIHNvbWUgbGFuZ3VhZ2VzLCB0aGF0CgkgICAqIGNoYW5nZXMgdGhlIHN0cmluZy4KCSAgICogU2VlIHtAbGluayBJbmZvI3dlZWtkYXlzfQoJICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgIm5hcnJvdyIsICJzaG9ydCIsICJsb25nIi4KCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9bnVsbF0gLSB0aGUgbG9jYWxlIGNvZGUKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZQoJICAgKiBAcmV0dXJuIHtBcnJheX0KCSAgICovCgkgIDsKCgkgIEluZm8ud2Vla2RheXNGb3JtYXQgPSBmdW5jdGlvbiB3ZWVrZGF5c0Zvcm1hdChsZW5ndGgsIF90ZW1wNCkgewoJICAgIGlmIChsZW5ndGggPT09IHZvaWQgMCkgewoJICAgICAgbGVuZ3RoID0gImxvbmciOwoJICAgIH0KCgkgICAgdmFyIF9yZWY0ID0gX3RlbXA0ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNCwKCSAgICAgICAgX3JlZjQkbG9jYWxlID0gX3JlZjQubG9jYWxlLAoJICAgICAgICBsb2NhbGUgPSBfcmVmNCRsb2NhbGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmNCRsb2NhbGUsCgkgICAgICAgIF9yZWY0JG51bWJlcmluZ1N5c3RlbSA9IF9yZWY0Lm51bWJlcmluZ1N5c3RlbSwKCSAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX3JlZjQkbnVtYmVyaW5nU3lzdGVtID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjQkbnVtYmVyaW5nU3lzdGVtLAoJICAgICAgICBfcmVmNCRsb2NPYmogPSBfcmVmNC5sb2NPYmosCgkgICAgICAgIGxvY09iaiA9IF9yZWY0JGxvY09iaiA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWY0JGxvY09iajsKCgkgICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgbnVsbCkpLndlZWtkYXlzKGxlbmd0aCwgdHJ1ZSk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiBhbiBhcnJheSBvZiBtZXJpZGllbXMuCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZQoJICAgKiBAZXhhbXBsZSBJbmZvLm1lcmlkaWVtcygpIC8vPT4gWyAnQU0nLCAnUE0nIF0KCSAgICogQGV4YW1wbGUgSW5mby5tZXJpZGllbXMoeyBsb2NhbGU6ICdteScgfSkgLy89PiBbICfhgJThgLbhgJThgIDhgLonLCAn4YCK4YCU4YCxJyBdCgkgICAqIEByZXR1cm4ge0FycmF5fQoJICAgKi8KCSAgOwoKCSAgSW5mby5tZXJpZGllbXMgPSBmdW5jdGlvbiBtZXJpZGllbXMoX3RlbXA1KSB7CgkgICAgdmFyIF9yZWY1ID0gX3RlbXA1ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNSwKCSAgICAgICAgX3JlZjUkbG9jYWxlID0gX3JlZjUubG9jYWxlLAoJICAgICAgICBsb2NhbGUgPSBfcmVmNSRsb2NhbGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmNSRsb2NhbGU7CgoJICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSkubWVyaWRpZW1zKCk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiBhbiBhcnJheSBvZiBlcmFzLCBzdWNoIGFzIFsnQkMnLCAnQUQnXS4gVGhlIGxvY2FsZSBjYW4gYmUgc3BlY2lmaWVkLCBidXQgdGhlIGNhbGVuZGFyIHN5c3RlbSBpcyBhbHdheXMgR3JlZ29yaWFuLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nc2hvcnQnXSAtIHRoZSBsZW5ndGggb2YgdGhlIGVyYSByZXByZXNlbnRhdGlvbiwgc3VjaCBhcyAic2hvcnQiIG9yICJsb25nIi4KCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlCgkgICAqIEBleGFtcGxlIEluZm8uZXJhcygpIC8vPT4gWyAnQkMnLCAnQUQnIF0KCSAgICogQGV4YW1wbGUgSW5mby5lcmFzKCdsb25nJykgLy89PiBbICdCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJyBdCgkgICAqIEBleGFtcGxlIEluZm8uZXJhcygnbG9uZycsIHsgbG9jYWxlOiAnZnInIH0pIC8vPT4gWyAnYXZhbnQgSsOpc3VzLUNocmlzdCcsICdhcHLDqHMgSsOpc3VzLUNocmlzdCcgXQoJICAgKiBAcmV0dXJuIHtBcnJheX0KCSAgICovCgkgIDsKCgkgIEluZm8uZXJhcyA9IGZ1bmN0aW9uIGVyYXMobGVuZ3RoLCBfdGVtcDYpIHsKCSAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsKCSAgICAgIGxlbmd0aCA9ICJzaG9ydCI7CgkgICAgfQoKCSAgICB2YXIgX3JlZjYgPSBfdGVtcDYgPT09IHZvaWQgMCA/IHt9IDogX3RlbXA2LAoJICAgICAgICBfcmVmNiRsb2NhbGUgPSBfcmVmNi5sb2NhbGUsCgkgICAgICAgIGxvY2FsZSA9IF9yZWY2JGxvY2FsZSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWY2JGxvY2FsZTsKCgkgICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudWxsLCAiZ3JlZ29yeSIpLmVyYXMobGVuZ3RoKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGZlYXR1cmVzIGluIHRoaXMgZW52aXJvbm1lbnQuCgkgICAqIFNvbWUgZmVhdHVyZXMgb2YgTHV4b24gYXJlIG5vdCBhdmFpbGFibGUgaW4gYWxsIGVudmlyb25tZW50cy4gRm9yIGV4YW1wbGUsIG9uIG9sZGVyIGJyb3dzZXJzLCByZWxhdGl2ZSB0aW1lIGZvcm1hdHRpbmcgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLiBVc2UgdGhpcyBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IGlmIHRoYXQncyB0aGUgY2FzZS4KCSAgICogS2V5czoKCSAgICogKiBgcmVsYXRpdmVgOiB3aGV0aGVyIHRoaXMgZW52aXJvbm1lbnQgc3VwcG9ydHMgcmVsYXRpdmUgdGltZSBmb3JtYXR0aW5nCgkgICAqIEBleGFtcGxlIEluZm8uZmVhdHVyZXMoKSAvLz0+IHsgcmVsYXRpdmU6IGZhbHNlIH0KCSAgICogQHJldHVybiB7T2JqZWN0fQoJICAgKi8KCSAgOwoKCSAgSW5mby5mZWF0dXJlcyA9IGZ1bmN0aW9uIGZlYXR1cmVzKCkgewoJICAgIHJldHVybiB7CgkgICAgICByZWxhdGl2ZTogaGFzUmVsYXRpdmUoKQoJICAgIH07CgkgIH07CgoJICByZXR1cm4gSW5mbzsKCX0oKTsKCglmdW5jdGlvbiBkYXlEaWZmKGVhcmxpZXIsIGxhdGVyKSB7CgkgIHZhciB1dGNEYXlTdGFydCA9IGZ1bmN0aW9uIHV0Y0RheVN0YXJ0KGR0KSB7CgkgICAgcmV0dXJuIGR0LnRvVVRDKDAsIHsKCSAgICAgIGtlZXBMb2NhbFRpbWU6IHRydWUKCSAgICB9KS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCk7CgkgIH0sCgkgICAgICBtcyA9IHV0Y0RheVN0YXJ0KGxhdGVyKSAtIHV0Y0RheVN0YXJ0KGVhcmxpZXIpOwoKCSAgcmV0dXJuIE1hdGguZmxvb3IoRHVyYXRpb24uZnJvbU1pbGxpcyhtcykuYXMoImRheXMiKSk7Cgl9CgoJZnVuY3Rpb24gaGlnaE9yZGVyRGlmZnMoY3Vyc29yLCBsYXRlciwgdW5pdHMpIHsKCSAgdmFyIGRpZmZlcnMgPSBbWyJ5ZWFycyIsIGZ1bmN0aW9uIChhLCBiKSB7CgkgICAgcmV0dXJuIGIueWVhciAtIGEueWVhcjsKCSAgfV0sIFsicXVhcnRlcnMiLCBmdW5jdGlvbiAoYSwgYikgewoJICAgIHJldHVybiBiLnF1YXJ0ZXIgLSBhLnF1YXJ0ZXI7CgkgIH1dLCBbIm1vbnRocyIsIGZ1bmN0aW9uIChhLCBiKSB7CgkgICAgcmV0dXJuIGIubW9udGggLSBhLm1vbnRoICsgKGIueWVhciAtIGEueWVhcikgKiAxMjsKCSAgfV0sIFsid2Vla3MiLCBmdW5jdGlvbiAoYSwgYikgewoJICAgIHZhciBkYXlzID0gZGF5RGlmZihhLCBiKTsKCSAgICByZXR1cm4gKGRheXMgLSBkYXlzICUgNykgLyA3OwoJICB9XSwgWyJkYXlzIiwgZGF5RGlmZl1dOwoJICB2YXIgcmVzdWx0cyA9IHt9OwoJICB2YXIgbG93ZXN0T3JkZXIsIGhpZ2hXYXRlcjsKCgkgIGZvciAodmFyIF9pID0gMCwgX2RpZmZlcnMgPSBkaWZmZXJzOyBfaSA8IF9kaWZmZXJzLmxlbmd0aDsgX2krKykgewoJICAgIHZhciBfZGlmZmVycyRfaSA9IF9kaWZmZXJzW19pXSwKCSAgICAgICAgdW5pdCA9IF9kaWZmZXJzJF9pWzBdLAoJICAgICAgICBkaWZmZXIgPSBfZGlmZmVycyRfaVsxXTsKCgkgICAgaWYgKHVuaXRzLmluZGV4T2YodW5pdCkgPj0gMCkgewoJICAgICAgdmFyIF9jdXJzb3IkcGx1czsKCgkgICAgICBsb3dlc3RPcmRlciA9IHVuaXQ7CgkgICAgICB2YXIgZGVsdGEgPSBkaWZmZXIoY3Vyc29yLCBsYXRlcik7CgkgICAgICBoaWdoV2F0ZXIgPSBjdXJzb3IucGx1cygoX2N1cnNvciRwbHVzID0ge30sIF9jdXJzb3IkcGx1c1t1bml0XSA9IGRlbHRhLCBfY3Vyc29yJHBsdXMpKTsKCgkgICAgICBpZiAoaGlnaFdhdGVyID4gbGF0ZXIpIHsKCSAgICAgICAgdmFyIF9jdXJzb3IkcGx1czI7CgoJICAgICAgICBjdXJzb3IgPSBjdXJzb3IucGx1cygoX2N1cnNvciRwbHVzMiA9IHt9LCBfY3Vyc29yJHBsdXMyW3VuaXRdID0gZGVsdGEgLSAxLCBfY3Vyc29yJHBsdXMyKSk7CgkgICAgICAgIGRlbHRhIC09IDE7CgkgICAgICB9IGVsc2UgewoJICAgICAgICBjdXJzb3IgPSBoaWdoV2F0ZXI7CgkgICAgICB9CgoJICAgICAgcmVzdWx0c1t1bml0XSA9IGRlbHRhOwoJICAgIH0KCSAgfQoKCSAgcmV0dXJuIFtjdXJzb3IsIHJlc3VsdHMsIGhpZ2hXYXRlciwgbG93ZXN0T3JkZXJdOwoJfQoKCWZ1bmN0aW9uIF9kaWZmIChlYXJsaWVyLCBsYXRlciwgdW5pdHMsIG9wdHMpIHsKCSAgdmFyIF9oaWdoT3JkZXJEaWZmcyA9IGhpZ2hPcmRlckRpZmZzKGVhcmxpZXIsIGxhdGVyLCB1bml0cyksCgkgICAgICBjdXJzb3IgPSBfaGlnaE9yZGVyRGlmZnNbMF0sCgkgICAgICByZXN1bHRzID0gX2hpZ2hPcmRlckRpZmZzWzFdLAoJICAgICAgaGlnaFdhdGVyID0gX2hpZ2hPcmRlckRpZmZzWzJdLAoJICAgICAgbG93ZXN0T3JkZXIgPSBfaGlnaE9yZGVyRGlmZnNbM107CgoJICB2YXIgcmVtYWluaW5nTWlsbGlzID0gbGF0ZXIgLSBjdXJzb3I7CgkgIHZhciBsb3dlck9yZGVyVW5pdHMgPSB1bml0cy5maWx0ZXIoZnVuY3Rpb24gKHUpIHsKCSAgICByZXR1cm4gWyJob3VycyIsICJtaW51dGVzIiwgInNlY29uZHMiLCAibWlsbGlzZWNvbmRzIl0uaW5kZXhPZih1KSA+PSAwOwoJICB9KTsKCgkgIGlmIChsb3dlck9yZGVyVW5pdHMubGVuZ3RoID09PSAwKSB7CgkgICAgaWYgKGhpZ2hXYXRlciA8IGxhdGVyKSB7CgkgICAgICB2YXIgX2N1cnNvciRwbHVzMzsKCgkgICAgICBoaWdoV2F0ZXIgPSBjdXJzb3IucGx1cygoX2N1cnNvciRwbHVzMyA9IHt9LCBfY3Vyc29yJHBsdXMzW2xvd2VzdE9yZGVyXSA9IDEsIF9jdXJzb3IkcGx1czMpKTsKCSAgICB9CgoJICAgIGlmIChoaWdoV2F0ZXIgIT09IGN1cnNvcikgewoJICAgICAgcmVzdWx0c1tsb3dlc3RPcmRlcl0gPSAocmVzdWx0c1tsb3dlc3RPcmRlcl0gfHwgMCkgKyByZW1haW5pbmdNaWxsaXMgLyAoaGlnaFdhdGVyIC0gY3Vyc29yKTsKCSAgICB9CgkgIH0KCgkgIHZhciBkdXJhdGlvbiA9IER1cmF0aW9uLmZyb21PYmplY3QocmVzdWx0cywgb3B0cyk7CgoJICBpZiAobG93ZXJPcmRlclVuaXRzLmxlbmd0aCA+IDApIHsKCSAgICB2YXIgX0R1cmF0aW9uJGZyb21NaWxsaXM7CgoJICAgIHJldHVybiAoX0R1cmF0aW9uJGZyb21NaWxsaXMgPSBEdXJhdGlvbi5mcm9tTWlsbGlzKHJlbWFpbmluZ01pbGxpcywgb3B0cykpLnNoaWZ0VG8uYXBwbHkoX0R1cmF0aW9uJGZyb21NaWxsaXMsIGxvd2VyT3JkZXJVbml0cykucGx1cyhkdXJhdGlvbik7CgkgIH0gZWxzZSB7CgkgICAgcmV0dXJuIGR1cmF0aW9uOwoJICB9Cgl9CgoJdmFyIG51bWJlcmluZ1N5c3RlbXMgPSB7CgkgIGFyYWI6ICJbXHUwNjYwLVx1MDY2OV0iLAoJICBhcmFiZXh0OiAiW1x1MDZGMC1cdTA2RjldIiwKCSAgYmFsaTogIltcdTFCNTAtXHUxQjU5XSIsCgkgIGJlbmc6ICJbXHUwOUU2LVx1MDlFRl0iLAoJICBkZXZhOiAiW1x1MDk2Ni1cdTA5NkZdIiwKCSAgZnVsbHdpZGU6ICJbXHVGRjEwLVx1RkYxOV0iLAoJICBndWpyOiAiW1x1MEFFNi1cdTBBRUZdIiwKCSAgaGFuaWRlYzogIlvjgId85LiAfOS6jHzkuIl85ZubfOS6lHzlha185LiDfOWFq3zkuZ1dIiwKCSAga2htcjogIltcdTE3RTAtXHUxN0U5XSIsCgkgIGtuZGE6ICJbXHUwQ0U2LVx1MENFRl0iLAoJICBsYW9vOiAiW1x1MEVEMC1cdTBFRDldIiwKCSAgbGltYjogIltcdTE5NDYtXHUxOTRGXSIsCgkgIG1seW06ICJbXHUwRDY2LVx1MEQ2Rl0iLAoJICBtb25nOiAiW1x1MTgxMC1cdTE4MTldIiwKCSAgbXltcjogIltcdTEwNDAtXHUxMDQ5XSIsCgkgIG9yeWE6ICJbXHUwQjY2LVx1MEI2Rl0iLAoJICB0YW1sZGVjOiAiW1x1MEJFNi1cdTBCRUZdIiwKCSAgdGVsdTogIltcdTBDNjYtXHUwQzZGXSIsCgkgIHRoYWk6ICJbXHUwRTUwLVx1MEU1OV0iLAoJICB0aWJ0OiAiW1x1MEYyMC1cdTBGMjldIiwKCSAgbGF0bjogIlxcZCIKCX07Cgl2YXIgbnVtYmVyaW5nU3lzdGVtc1VURjE2ID0gewoJICBhcmFiOiBbMTYzMiwgMTY0MV0sCgkgIGFyYWJleHQ6IFsxNzc2LCAxNzg1XSwKCSAgYmFsaTogWzY5OTIsIDcwMDFdLAoJICBiZW5nOiBbMjUzNCwgMjU0M10sCgkgIGRldmE6IFsyNDA2LCAyNDE1XSwKCSAgZnVsbHdpZGU6IFs2NTI5NiwgNjUzMDNdLAoJICBndWpyOiBbMjc5MCwgMjc5OV0sCgkgIGtobXI6IFs2MTEyLCA2MTIxXSwKCSAga25kYTogWzMzMDIsIDMzMTFdLAoJICBsYW9vOiBbMzc5MiwgMzgwMV0sCgkgIGxpbWI6IFs2NDcwLCA2NDc5XSwKCSAgbWx5bTogWzM0MzAsIDM0MzldLAoJICBtb25nOiBbNjE2MCwgNjE2OV0sCgkgIG15bXI6IFs0MTYwLCA0MTY5XSwKCSAgb3J5YTogWzI5MTgsIDI5MjddLAoJICB0YW1sZGVjOiBbMzA0NiwgMzA1NV0sCgkgIHRlbHU6IFszMTc0LCAzMTgzXSwKCSAgdGhhaTogWzM2NjQsIDM2NzNdLAoJICB0aWJ0OiBbMzg3MiwgMzg4MV0KCX07Cgl2YXIgaGFuaWRlY0NoYXJzID0gbnVtYmVyaW5nU3lzdGVtcy5oYW5pZGVjLnJlcGxhY2UoL1tcW3xcXV0vZywgIiIpLnNwbGl0KCIiKTsKCWZ1bmN0aW9uIHBhcnNlRGlnaXRzKHN0cikgewoJICB2YXIgdmFsdWUgPSBwYXJzZUludChzdHIsIDEwKTsKCgkgIGlmIChpc05hTih2YWx1ZSkpIHsKCSAgICB2YWx1ZSA9ICIiOwoKCSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgewoJICAgICAgdmFyIGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTsKCgkgICAgICBpZiAoc3RyW2ldLnNlYXJjaChudW1iZXJpbmdTeXN0ZW1zLmhhbmlkZWMpICE9PSAtMSkgewoJICAgICAgICB2YWx1ZSArPSBoYW5pZGVjQ2hhcnMuaW5kZXhPZihzdHJbaV0pOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgZm9yICh2YXIga2V5IGluIG51bWJlcmluZ1N5c3RlbXNVVEYxNikgewoJICAgICAgICAgIHZhciBfbnVtYmVyaW5nU3lzdGVtc1VURiA9IG51bWJlcmluZ1N5c3RlbXNVVEYxNltrZXldLAoJICAgICAgICAgICAgICBtaW4gPSBfbnVtYmVyaW5nU3lzdGVtc1VURlswXSwKCSAgICAgICAgICAgICAgbWF4ID0gX251bWJlcmluZ1N5c3RlbXNVVEZbMV07CgoJICAgICAgICAgIGlmIChjb2RlID49IG1pbiAmJiBjb2RlIDw9IG1heCkgewoJICAgICAgICAgICAgdmFsdWUgKz0gY29kZSAtIG1pbjsKCSAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAgIH0KCSAgICB9CgoJICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApOwoJICB9IGVsc2UgewoJICAgIHJldHVybiB2YWx1ZTsKCSAgfQoJfQoJZnVuY3Rpb24gZGlnaXRSZWdleChfcmVmLCBhcHBlbmQpIHsKCSAgdmFyIG51bWJlcmluZ1N5c3RlbSA9IF9yZWYubnVtYmVyaW5nU3lzdGVtOwoKCSAgaWYgKGFwcGVuZCA9PT0gdm9pZCAwKSB7CgkgICAgYXBwZW5kID0gIiI7CgkgIH0KCgkgIHJldHVybiBuZXcgUmVnRXhwKCIiICsgbnVtYmVyaW5nU3lzdGVtc1tudW1iZXJpbmdTeXN0ZW0gfHwgImxhdG4iXSArIGFwcGVuZCk7Cgl9CgoJdmFyIE1JU1NJTkdfRlRQID0gIm1pc3NpbmcgSW50bC5EYXRlVGltZUZvcm1hdC5mb3JtYXRUb1BhcnRzIHN1cHBvcnQiOwoKCWZ1bmN0aW9uIGludFVuaXQocmVnZXgsIHBvc3QpIHsKCSAgaWYgKHBvc3QgPT09IHZvaWQgMCkgewoJICAgIHBvc3QgPSBmdW5jdGlvbiBwb3N0KGkpIHsKCSAgICAgIHJldHVybiBpOwoJICAgIH07CgkgIH0KCgkgIHJldHVybiB7CgkgICAgcmVnZXg6IHJlZ2V4LAoJICAgIGRlc2VyOiBmdW5jdGlvbiBkZXNlcihfcmVmKSB7CgkgICAgICB2YXIgcyA9IF9yZWZbMF07CgkgICAgICByZXR1cm4gcG9zdChwYXJzZURpZ2l0cyhzKSk7CgkgICAgfQoJICB9OwoJfQoKCXZhciBOQlNQID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApOwoJdmFyIHNwYWNlT3JOQlNQID0gIiggfCIgKyBOQlNQICsgIikiOwoJdmFyIHNwYWNlT3JOQlNQUmVnRXhwID0gbmV3IFJlZ0V4cChzcGFjZU9yTkJTUCwgImciKTsKCglmdW5jdGlvbiBmaXhMaXN0UmVnZXgocykgewoJICAvLyBtYWtlIGRvdHMgb3B0aW9uYWwgYW5kIGFsc28gbWFrZSB0aGVtIGxpdGVyYWwKCSAgLy8gbWFrZSBzcGFjZSBhbmQgbm9uIGJyZWFrYWJsZSBzcGFjZSBjaGFyYWN0ZXJzIGludGVyY2hhbmdlYWJsZQoJICByZXR1cm4gcy5yZXBsYWNlKC9cLi9nLCAiXFwuPyIpLnJlcGxhY2Uoc3BhY2VPck5CU1BSZWdFeHAsIHNwYWNlT3JOQlNQKTsKCX0KCglmdW5jdGlvbiBzdHJpcEluc2Vuc2l0aXZpdGllcyhzKSB7CgkgIHJldHVybiBzLnJlcGxhY2UoL1wuL2csICIiKSAvLyBpZ25vcmUgZG90cyB0aGF0IHdlcmUgbWFkZSBvcHRpb25hbAoJICAucmVwbGFjZShzcGFjZU9yTkJTUFJlZ0V4cCwgIiAiKSAvLyBpbnRlcmNoYW5nZSBzcGFjZSBhbmQgbmJzcAoJICAudG9Mb3dlckNhc2UoKTsKCX0KCglmdW5jdGlvbiBvbmVPZihzdHJpbmdzLCBzdGFydEluZGV4KSB7CgkgIGlmIChzdHJpbmdzID09PSBudWxsKSB7CgkgICAgcmV0dXJuIG51bGw7CgkgIH0gZWxzZSB7CgkgICAgcmV0dXJuIHsKCSAgICAgIHJlZ2V4OiBSZWdFeHAoc3RyaW5ncy5tYXAoZml4TGlzdFJlZ2V4KS5qb2luKCJ8IikpLAoJICAgICAgZGVzZXI6IGZ1bmN0aW9uIGRlc2VyKF9yZWYyKSB7CgkgICAgICAgIHZhciBzID0gX3JlZjJbMF07CgkgICAgICAgIHJldHVybiBzdHJpbmdzLmZpbmRJbmRleChmdW5jdGlvbiAoaSkgewoJICAgICAgICAgIHJldHVybiBzdHJpcEluc2Vuc2l0aXZpdGllcyhzKSA9PT0gc3RyaXBJbnNlbnNpdGl2aXRpZXMoaSk7CgkgICAgICAgIH0pICsgc3RhcnRJbmRleDsKCSAgICAgIH0KCSAgICB9OwoJICB9Cgl9CgoJZnVuY3Rpb24gb2Zmc2V0KHJlZ2V4LCBncm91cHMpIHsKCSAgcmV0dXJuIHsKCSAgICByZWdleDogcmVnZXgsCgkgICAgZGVzZXI6IGZ1bmN0aW9uIGRlc2VyKF9yZWYzKSB7CgkgICAgICB2YXIgaCA9IF9yZWYzWzFdLAoJICAgICAgICAgIG0gPSBfcmVmM1syXTsKCSAgICAgIHJldHVybiBzaWduZWRPZmZzZXQoaCwgbSk7CgkgICAgfSwKCSAgICBncm91cHM6IGdyb3VwcwoJICB9OwoJfQoKCWZ1bmN0aW9uIHNpbXBsZShyZWdleCkgewoJICByZXR1cm4gewoJICAgIHJlZ2V4OiByZWdleCwKCSAgICBkZXNlcjogZnVuY3Rpb24gZGVzZXIoX3JlZjQpIHsKCSAgICAgIHZhciBzID0gX3JlZjRbMF07CgkgICAgICByZXR1cm4gczsKCSAgICB9CgkgIH07Cgl9CgoJZnVuY3Rpb24gZXNjYXBlVG9rZW4odmFsdWUpIHsKCSAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csICJcXCQmIik7Cgl9CgoJZnVuY3Rpb24gdW5pdEZvclRva2VuKHRva2VuLCBsb2MpIHsKCSAgdmFyIG9uZSA9IGRpZ2l0UmVnZXgobG9jKSwKCSAgICAgIHR3byA9IGRpZ2l0UmVnZXgobG9jLCAiezJ9IiksCgkgICAgICB0aHJlZSA9IGRpZ2l0UmVnZXgobG9jLCAiezN9IiksCgkgICAgICBmb3VyID0gZGlnaXRSZWdleChsb2MsICJ7NH0iKSwKCSAgICAgIHNpeCA9IGRpZ2l0UmVnZXgobG9jLCAiezZ9IiksCgkgICAgICBvbmVPclR3byA9IGRpZ2l0UmVnZXgobG9jLCAiezEsMn0iKSwKCSAgICAgIG9uZVRvVGhyZWUgPSBkaWdpdFJlZ2V4KGxvYywgInsxLDN9IiksCgkgICAgICBvbmVUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCAiezEsNn0iKSwKCSAgICAgIG9uZVRvTmluZSA9IGRpZ2l0UmVnZXgobG9jLCAiezEsOX0iKSwKCSAgICAgIHR3b1RvRm91ciA9IGRpZ2l0UmVnZXgobG9jLCAiezIsNH0iKSwKCSAgICAgIGZvdXJUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCAiezQsNn0iKSwKCSAgICAgIGxpdGVyYWwgPSBmdW5jdGlvbiBsaXRlcmFsKHQpIHsKCSAgICByZXR1cm4gewoJICAgICAgcmVnZXg6IFJlZ0V4cChlc2NhcGVUb2tlbih0LnZhbCkpLAoJICAgICAgZGVzZXI6IGZ1bmN0aW9uIGRlc2VyKF9yZWY1KSB7CgkgICAgICAgIHZhciBzID0gX3JlZjVbMF07CgkgICAgICAgIHJldHVybiBzOwoJICAgICAgfSwKCSAgICAgIGxpdGVyYWw6IHRydWUKCSAgICB9OwoJICB9LAoJICAgICAgdW5pdGF0ZSA9IGZ1bmN0aW9uIHVuaXRhdGUodCkgewoJICAgIGlmICh0b2tlbi5saXRlcmFsKSB7CgkgICAgICByZXR1cm4gbGl0ZXJhbCh0KTsKCSAgICB9CgoJICAgIHN3aXRjaCAodC52YWwpIHsKCSAgICAgIC8vIGVyYQoJICAgICAgY2FzZSAiRyI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2MuZXJhcygic2hvcnQiLCBmYWxzZSksIDApOwoKCSAgICAgIGNhc2UgIkdHIjoKCSAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5lcmFzKCJsb25nIiwgZmFsc2UpLCAwKTsKCSAgICAgIC8vIHllYXJzCgoJICAgICAgY2FzZSAieSI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvU2l4KTsKCgkgICAgICBjYXNlICJ5eSI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KHR3b1RvRm91ciwgdW50cnVuY2F0ZVllYXIpOwoKCSAgICAgIGNhc2UgInl5eXkiOgoJICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyKTsKCgkgICAgICBjYXNlICJ5eXl5eSI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KGZvdXJUb1NpeCk7CgoJICAgICAgY2FzZSAieXl5eXl5IjoKCSAgICAgICAgcmV0dXJuIGludFVuaXQoc2l4KTsKCSAgICAgIC8vIG1vbnRocwoKCSAgICAgIGNhc2UgIk0iOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgoJICAgICAgY2FzZSAiTU0iOgoJICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoKCSAgICAgIGNhc2UgIk1NTSI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKCJzaG9ydCIsIHRydWUsIGZhbHNlKSwgMSk7CgoJICAgICAgY2FzZSAiTU1NTSI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKCJsb25nIiwgdHJ1ZSwgZmFsc2UpLCAxKTsKCgkgICAgICBjYXNlICJMIjoKCSAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pOwoKCSAgICAgIGNhc2UgIkxMIjoKCSAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTsKCgkgICAgICBjYXNlICJMTEwiOgoJICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocygic2hvcnQiLCBmYWxzZSwgZmFsc2UpLCAxKTsKCgkgICAgICBjYXNlICJMTExMIjoKCSAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoImxvbmciLCBmYWxzZSwgZmFsc2UpLCAxKTsKCSAgICAgIC8vIGRhdGVzCgoJICAgICAgY2FzZSAiZCI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTsKCgkgICAgICBjYXNlICJkZCI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CgkgICAgICAvLyBvcmRpbmFscwoKCSAgICAgIGNhc2UgIm8iOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmVUb1RocmVlKTsKCgkgICAgICBjYXNlICJvb28iOgoJICAgICAgICByZXR1cm4gaW50VW5pdCh0aHJlZSk7CgkgICAgICAvLyB0aW1lCgoJICAgICAgY2FzZSAiSEgiOgoJICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoKCSAgICAgIGNhc2UgIkgiOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgoJICAgICAgY2FzZSAiaGgiOgoJICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoKCSAgICAgIGNhc2UgImgiOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgoJICAgICAgY2FzZSAibW0iOgoJICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoKCSAgICAgIGNhc2UgIm0iOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgoJICAgICAgY2FzZSAicSI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTsKCgkgICAgICBjYXNlICJxcSI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CgoJICAgICAgY2FzZSAicyI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTsKCgkgICAgICBjYXNlICJzcyI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CgoJICAgICAgY2FzZSAiUyI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvVGhyZWUpOwoKCSAgICAgIGNhc2UgIlNTUyI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KHRocmVlKTsKCgkgICAgICBjYXNlICJ1IjoKCSAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVUb05pbmUpOwoKCSAgICAgIGNhc2UgInV1IjoKCSAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVPclR3byk7CgoJICAgICAgY2FzZSAidXV1IjoKCSAgICAgICAgcmV0dXJuIGludFVuaXQob25lKTsKCSAgICAgIC8vIG1lcmlkaWVtCgoJICAgICAgY2FzZSAiYSI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2MubWVyaWRpZW1zKCksIDApOwoJICAgICAgLy8gd2Vla1llYXIgKGspCgoJICAgICAgY2FzZSAia2trayI6CgkgICAgICAgIHJldHVybiBpbnRVbml0KGZvdXIpOwoKCSAgICAgIGNhc2UgImtrIjoKCSAgICAgICAgcmV0dXJuIGludFVuaXQodHdvVG9Gb3VyLCB1bnRydW5jYXRlWWVhcik7CgkgICAgICAvLyB3ZWVrTnVtYmVyIChXKQoKCSAgICAgIGNhc2UgIlciOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgoJICAgICAgY2FzZSAiV1ciOgoJICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoJICAgICAgLy8gd2Vla2RheXMKCgkgICAgICBjYXNlICJFIjoKCSAgICAgIGNhc2UgImMiOgoJICAgICAgICByZXR1cm4gaW50VW5pdChvbmUpOwoKCSAgICAgIGNhc2UgIkVFRSI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoInNob3J0IiwgZmFsc2UsIGZhbHNlKSwgMSk7CgoJICAgICAgY2FzZSAiRUVFRSI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoImxvbmciLCBmYWxzZSwgZmFsc2UpLCAxKTsKCgkgICAgICBjYXNlICJjY2MiOgoJICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKCJzaG9ydCIsIHRydWUsIGZhbHNlKSwgMSk7CgoJICAgICAgY2FzZSAiY2NjYyI6CgkgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoImxvbmciLCB0cnVlLCBmYWxzZSksIDEpOwoJICAgICAgLy8gb2Zmc2V0L3pvbmUKCgkgICAgICBjYXNlICJaIjoKCSAgICAgIGNhc2UgIlpaIjoKCSAgICAgICAgcmV0dXJuIG9mZnNldChuZXcgUmVnRXhwKCIoWystXSIgKyBvbmVPclR3by5zb3VyY2UgKyAiKSg/OjooIiArIHR3by5zb3VyY2UgKyAiKSk/IiksIDIpOwoKCSAgICAgIGNhc2UgIlpaWiI6CgkgICAgICAgIHJldHVybiBvZmZzZXQobmV3IFJlZ0V4cCgiKFsrLV0iICsgb25lT3JUd28uc291cmNlICsgIikoIiArIHR3by5zb3VyY2UgKyAiKT8iKSwgMik7CgkgICAgICAvLyB3ZSBkb24ndCBzdXBwb3J0IFpaWlogKFBTVCkgb3IgWlpaWlogKFBhY2lmaWMgU3RhbmRhcmQgVGltZSkgaW4gcGFyc2luZwoJICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueSB3YXkgdG8gZmlndXJlIG91dCB3aGF0IHRoZXkgYXJlCgoJICAgICAgY2FzZSAieiI6CgkgICAgICAgIHJldHVybiBzaW1wbGUoL1thLXpfKy0vXXsxLDI1Nn0/L2kpOwoKCSAgICAgIGRlZmF1bHQ6CgkgICAgICAgIHJldHVybiBsaXRlcmFsKHQpOwoJICAgIH0KCSAgfTsKCgkgIHZhciB1bml0ID0gdW5pdGF0ZSh0b2tlbikgfHwgewoJICAgIGludmFsaWRSZWFzb246IE1JU1NJTkdfRlRQCgkgIH07CgkgIHVuaXQudG9rZW4gPSB0b2tlbjsKCSAgcmV0dXJuIHVuaXQ7Cgl9CgoJdmFyIHBhcnRUeXBlU3R5bGVUb1Rva2VuVmFsID0gewoJICB5ZWFyOiB7CgkgICAgIjItZGlnaXQiOiAieXkiLAoJICAgIG51bWVyaWM6ICJ5eXl5eSIKCSAgfSwKCSAgbW9udGg6IHsKCSAgICBudW1lcmljOiAiTSIsCgkgICAgIjItZGlnaXQiOiAiTU0iLAoJICAgIHNob3J0OiAiTU1NIiwKCSAgICBsb25nOiAiTU1NTSIKCSAgfSwKCSAgZGF5OiB7CgkgICAgbnVtZXJpYzogImQiLAoJICAgICIyLWRpZ2l0IjogImRkIgoJICB9LAoJICB3ZWVrZGF5OiB7CgkgICAgc2hvcnQ6ICJFRUUiLAoJICAgIGxvbmc6ICJFRUVFIgoJICB9LAoJICBkYXlwZXJpb2Q6ICJhIiwKCSAgZGF5UGVyaW9kOiAiYSIsCgkgIGhvdXI6IHsKCSAgICBudW1lcmljOiAiaCIsCgkgICAgIjItZGlnaXQiOiAiaGgiCgkgIH0sCgkgIG1pbnV0ZTogewoJICAgIG51bWVyaWM6ICJtIiwKCSAgICAiMi1kaWdpdCI6ICJtbSIKCSAgfSwKCSAgc2Vjb25kOiB7CgkgICAgbnVtZXJpYzogInMiLAoJICAgICIyLWRpZ2l0IjogInNzIgoJICB9Cgl9OwoKCWZ1bmN0aW9uIHRva2VuRm9yUGFydChwYXJ0LCBsb2NhbGUsIGZvcm1hdE9wdHMpIHsKCSAgdmFyIHR5cGUgPSBwYXJ0LnR5cGUsCgkgICAgICB2YWx1ZSA9IHBhcnQudmFsdWU7CgoJICBpZiAodHlwZSA9PT0gImxpdGVyYWwiKSB7CgkgICAgcmV0dXJuIHsKCSAgICAgIGxpdGVyYWw6IHRydWUsCgkgICAgICB2YWw6IHZhbHVlCgkgICAgfTsKCSAgfQoKCSAgdmFyIHN0eWxlID0gZm9ybWF0T3B0c1t0eXBlXTsKCSAgdmFyIHZhbCA9IHBhcnRUeXBlU3R5bGVUb1Rva2VuVmFsW3R5cGVdOwoKCSAgaWYgKHR5cGVvZiB2YWwgPT09ICJvYmplY3QiKSB7CgkgICAgdmFsID0gdmFsW3N0eWxlXTsKCSAgfQoKCSAgaWYgKHZhbCkgewoJICAgIHJldHVybiB7CgkgICAgICBsaXRlcmFsOiBmYWxzZSwKCSAgICAgIHZhbDogdmFsCgkgICAgfTsKCSAgfQoKCSAgcmV0dXJuIHVuZGVmaW5lZDsKCX0KCglmdW5jdGlvbiBidWlsZFJlZ2V4KHVuaXRzKSB7CgkgIHZhciByZSA9IHVuaXRzLm1hcChmdW5jdGlvbiAodSkgewoJICAgIHJldHVybiB1LnJlZ2V4OwoJICB9KS5yZWR1Y2UoZnVuY3Rpb24gKGYsIHIpIHsKCSAgICByZXR1cm4gZiArICIoIiArIHIuc291cmNlICsgIikiOwoJICB9LCAiIik7CgkgIHJldHVybiBbIl4iICsgcmUgKyAiJCIsIHVuaXRzXTsKCX0KCglmdW5jdGlvbiBtYXRjaChpbnB1dCwgcmVnZXgsIGhhbmRsZXJzKSB7CgkgIHZhciBtYXRjaGVzID0gaW5wdXQubWF0Y2gocmVnZXgpOwoKCSAgaWYgKG1hdGNoZXMpIHsKCSAgICB2YXIgYWxsID0ge307CgkgICAgdmFyIG1hdGNoSW5kZXggPSAxOwoKCSAgICBmb3IgKHZhciBpIGluIGhhbmRsZXJzKSB7CgkgICAgICBpZiAoaGFzT3duUHJvcGVydHkoaGFuZGxlcnMsIGkpKSB7CgkgICAgICAgIHZhciBoID0gaGFuZGxlcnNbaV0sCgkgICAgICAgICAgICBncm91cHMgPSBoLmdyb3VwcyA/IGguZ3JvdXBzICsgMSA6IDE7CgoJICAgICAgICBpZiAoIWgubGl0ZXJhbCAmJiBoLnRva2VuKSB7CgkgICAgICAgICAgYWxsW2gudG9rZW4udmFsWzBdXSA9IGguZGVzZXIobWF0Y2hlcy5zbGljZShtYXRjaEluZGV4LCBtYXRjaEluZGV4ICsgZ3JvdXBzKSk7CgkgICAgICAgIH0KCgkgICAgICAgIG1hdGNoSW5kZXggKz0gZ3JvdXBzOwoJICAgICAgfQoJICAgIH0KCgkgICAgcmV0dXJuIFttYXRjaGVzLCBhbGxdOwoJICB9IGVsc2UgewoJICAgIHJldHVybiBbbWF0Y2hlcywge31dOwoJICB9Cgl9CgoJZnVuY3Rpb24gZGF0ZVRpbWVGcm9tTWF0Y2hlcyhtYXRjaGVzKSB7CgkgIHZhciB0b0ZpZWxkID0gZnVuY3Rpb24gdG9GaWVsZCh0b2tlbikgewoJICAgIHN3aXRjaCAodG9rZW4pIHsKCSAgICAgIGNhc2UgIlMiOgoJICAgICAgICByZXR1cm4gIm1pbGxpc2Vjb25kIjsKCgkgICAgICBjYXNlICJzIjoKCSAgICAgICAgcmV0dXJuICJzZWNvbmQiOwoKCSAgICAgIGNhc2UgIm0iOgoJICAgICAgICByZXR1cm4gIm1pbnV0ZSI7CgoJICAgICAgY2FzZSAiaCI6CgkgICAgICBjYXNlICJIIjoKCSAgICAgICAgcmV0dXJuICJob3VyIjsKCgkgICAgICBjYXNlICJkIjoKCSAgICAgICAgcmV0dXJuICJkYXkiOwoKCSAgICAgIGNhc2UgIm8iOgoJICAgICAgICByZXR1cm4gIm9yZGluYWwiOwoKCSAgICAgIGNhc2UgIkwiOgoJICAgICAgY2FzZSAiTSI6CgkgICAgICAgIHJldHVybiAibW9udGgiOwoKCSAgICAgIGNhc2UgInkiOgoJICAgICAgICByZXR1cm4gInllYXIiOwoKCSAgICAgIGNhc2UgIkUiOgoJICAgICAgY2FzZSAiYyI6CgkgICAgICAgIHJldHVybiAid2Vla2RheSI7CgoJICAgICAgY2FzZSAiVyI6CgkgICAgICAgIHJldHVybiAid2Vla051bWJlciI7CgoJICAgICAgY2FzZSAiayI6CgkgICAgICAgIHJldHVybiAid2Vla1llYXIiOwoKCSAgICAgIGNhc2UgInEiOgoJICAgICAgICByZXR1cm4gInF1YXJ0ZXIiOwoKCSAgICAgIGRlZmF1bHQ6CgkgICAgICAgIHJldHVybiBudWxsOwoJICAgIH0KCSAgfTsKCgkgIHZhciB6b25lOwoKCSAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLlopKSB7CgkgICAgem9uZSA9IG5ldyBGaXhlZE9mZnNldFpvbmUobWF0Y2hlcy5aKTsKCSAgfSBlbHNlIGlmICghaXNVbmRlZmluZWQobWF0Y2hlcy56KSkgewoJICAgIHpvbmUgPSBJQU5BWm9uZS5jcmVhdGUobWF0Y2hlcy56KTsKCSAgfSBlbHNlIHsKCSAgICB6b25lID0gbnVsbDsKCSAgfQoKCSAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnEpKSB7CgkgICAgbWF0Y2hlcy5NID0gKG1hdGNoZXMucSAtIDEpICogMyArIDE7CgkgIH0KCgkgIGlmICghaXNVbmRlZmluZWQobWF0Y2hlcy5oKSkgewoJICAgIGlmIChtYXRjaGVzLmggPCAxMiAmJiBtYXRjaGVzLmEgPT09IDEpIHsKCSAgICAgIG1hdGNoZXMuaCArPSAxMjsKCSAgICB9IGVsc2UgaWYgKG1hdGNoZXMuaCA9PT0gMTIgJiYgbWF0Y2hlcy5hID09PSAwKSB7CgkgICAgICBtYXRjaGVzLmggPSAwOwoJICAgIH0KCSAgfQoKCSAgaWYgKG1hdGNoZXMuRyA9PT0gMCAmJiBtYXRjaGVzLnkpIHsKCSAgICBtYXRjaGVzLnkgPSAtbWF0Y2hlcy55OwoJICB9CgoJICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMudSkpIHsKCSAgICBtYXRjaGVzLlMgPSBwYXJzZU1pbGxpcyhtYXRjaGVzLnUpOwoJICB9CgoJICB2YXIgdmFscyA9IE9iamVjdC5rZXlzKG1hdGNoZXMpLnJlZHVjZShmdW5jdGlvbiAociwgaykgewoJICAgIHZhciBmID0gdG9GaWVsZChrKTsKCgkgICAgaWYgKGYpIHsKCSAgICAgIHJbZl0gPSBtYXRjaGVzW2tdOwoJICAgIH0KCgkgICAgcmV0dXJuIHI7CgkgIH0sIHt9KTsKCSAgcmV0dXJuIFt2YWxzLCB6b25lXTsKCX0KCgl2YXIgZHVtbXlEYXRlVGltZUNhY2hlID0gbnVsbDsKCglmdW5jdGlvbiBnZXREdW1teURhdGVUaW1lKCkgewoJICBpZiAoIWR1bW15RGF0ZVRpbWVDYWNoZSkgewoJICAgIGR1bW15RGF0ZVRpbWVDYWNoZSA9IERhdGVUaW1lLmZyb21NaWxsaXMoMTU1NTU1NTU1NTU1NSk7CgkgIH0KCgkgIHJldHVybiBkdW1teURhdGVUaW1lQ2FjaGU7Cgl9CgoJZnVuY3Rpb24gbWF5YmVFeHBhbmRNYWNyb1Rva2VuKHRva2VuLCBsb2NhbGUpIHsKCSAgaWYgKHRva2VuLmxpdGVyYWwpIHsKCSAgICByZXR1cm4gdG9rZW47CgkgIH0KCgkgIHZhciBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4udmFsKTsKCgkgIGlmICghZm9ybWF0T3B0cykgewoJICAgIHJldHVybiB0b2tlbjsKCSAgfQoKCSAgdmFyIGZvcm1hdHRlciA9IEZvcm1hdHRlci5jcmVhdGUobG9jYWxlLCBmb3JtYXRPcHRzKTsKCSAgdmFyIHBhcnRzID0gZm9ybWF0dGVyLmZvcm1hdERhdGVUaW1lUGFydHMoZ2V0RHVtbXlEYXRlVGltZSgpKTsKCSAgdmFyIHRva2VucyA9IHBhcnRzLm1hcChmdW5jdGlvbiAocCkgewoJICAgIHJldHVybiB0b2tlbkZvclBhcnQocCwgbG9jYWxlLCBmb3JtYXRPcHRzKTsKCSAgfSk7CgoJICBpZiAodG9rZW5zLmluY2x1ZGVzKHVuZGVmaW5lZCkpIHsKCSAgICByZXR1cm4gdG9rZW47CgkgIH0KCgkgIHJldHVybiB0b2tlbnM7Cgl9CgoJZnVuY3Rpb24gZXhwYW5kTWFjcm9Ub2tlbnModG9rZW5zLCBsb2NhbGUpIHsKCSAgdmFyIF9BcnJheSRwcm90b3R5cGU7CgoJICByZXR1cm4gKF9BcnJheSRwcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGUpLmNvbmNhdC5hcHBseShfQXJyYXkkcHJvdG90eXBlLCB0b2tlbnMubWFwKGZ1bmN0aW9uICh0KSB7CgkgICAgcmV0dXJuIG1heWJlRXhwYW5kTWFjcm9Ub2tlbih0LCBsb2NhbGUpOwoJICB9KSk7Cgl9CgkvKioKCSAqIEBwcml2YXRlCgkgKi8KCgoJZnVuY3Rpb24gZXhwbGFpbkZyb21Ub2tlbnMobG9jYWxlLCBpbnB1dCwgZm9ybWF0KSB7CgkgIHZhciB0b2tlbnMgPSBleHBhbmRNYWNyb1Rva2VucyhGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm9ybWF0KSwgbG9jYWxlKSwKCSAgICAgIHVuaXRzID0gdG9rZW5zLm1hcChmdW5jdGlvbiAodCkgewoJICAgIHJldHVybiB1bml0Rm9yVG9rZW4odCwgbG9jYWxlKTsKCSAgfSksCgkgICAgICBkaXNxdWFsaWZ5aW5nVW5pdCA9IHVuaXRzLmZpbmQoZnVuY3Rpb24gKHQpIHsKCSAgICByZXR1cm4gdC5pbnZhbGlkUmVhc29uOwoJICB9KTsKCgkgIGlmIChkaXNxdWFsaWZ5aW5nVW5pdCkgewoJICAgIHJldHVybiB7CgkgICAgICBpbnB1dDogaW5wdXQsCgkgICAgICB0b2tlbnM6IHRva2VucywKCSAgICAgIGludmFsaWRSZWFzb246IGRpc3F1YWxpZnlpbmdVbml0LmludmFsaWRSZWFzb24KCSAgICB9OwoJICB9IGVsc2UgewoJICAgIHZhciBfYnVpbGRSZWdleCA9IGJ1aWxkUmVnZXgodW5pdHMpLAoJICAgICAgICByZWdleFN0cmluZyA9IF9idWlsZFJlZ2V4WzBdLAoJICAgICAgICBoYW5kbGVycyA9IF9idWlsZFJlZ2V4WzFdLAoJICAgICAgICByZWdleCA9IFJlZ0V4cChyZWdleFN0cmluZywgImkiKSwKCSAgICAgICAgX21hdGNoID0gbWF0Y2goaW5wdXQsIHJlZ2V4LCBoYW5kbGVycyksCgkgICAgICAgIHJhd01hdGNoZXMgPSBfbWF0Y2hbMF0sCgkgICAgICAgIG1hdGNoZXMgPSBfbWF0Y2hbMV0sCgkgICAgICAgIF9yZWY2ID0gbWF0Y2hlcyA/IGRhdGVUaW1lRnJvbU1hdGNoZXMobWF0Y2hlcykgOiBbbnVsbCwgbnVsbF0sCgkgICAgICAgIHJlc3VsdCA9IF9yZWY2WzBdLAoJICAgICAgICB6b25lID0gX3JlZjZbMV07CgoJICAgIGlmIChoYXNPd25Qcm9wZXJ0eShtYXRjaGVzLCAiYSIpICYmIGhhc093blByb3BlcnR5KG1hdGNoZXMsICJIIikpIHsKCSAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcigiQ2FuJ3QgaW5jbHVkZSBtZXJpZGllbSB3aGVuIHNwZWNpZnlpbmcgMjQtaG91ciBmb3JtYXQiKTsKCSAgICB9CgoJICAgIHJldHVybiB7CgkgICAgICBpbnB1dDogaW5wdXQsCgkgICAgICB0b2tlbnM6IHRva2VucywKCSAgICAgIHJlZ2V4OiByZWdleCwKCSAgICAgIHJhd01hdGNoZXM6IHJhd01hdGNoZXMsCgkgICAgICBtYXRjaGVzOiBtYXRjaGVzLAoJICAgICAgcmVzdWx0OiByZXN1bHQsCgkgICAgICB6b25lOiB6b25lCgkgICAgfTsKCSAgfQoJfQoJZnVuY3Rpb24gcGFyc2VGcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCkgewoJICB2YXIgX2V4cGxhaW5Gcm9tVG9rZW5zID0gZXhwbGFpbkZyb21Ub2tlbnMobG9jYWxlLCBpbnB1dCwgZm9ybWF0KSwKCSAgICAgIHJlc3VsdCA9IF9leHBsYWluRnJvbVRva2Vucy5yZXN1bHQsCgkgICAgICB6b25lID0gX2V4cGxhaW5Gcm9tVG9rZW5zLnpvbmUsCgkgICAgICBpbnZhbGlkUmVhc29uID0gX2V4cGxhaW5Gcm9tVG9rZW5zLmludmFsaWRSZWFzb247CgoJICByZXR1cm4gW3Jlc3VsdCwgem9uZSwgaW52YWxpZFJlYXNvbl07Cgl9CgoJdmFyIG5vbkxlYXBMYWRkZXIgPSBbMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzRdLAoJICAgIGxlYXBMYWRkZXIgPSBbMCwgMzEsIDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzVdOwoKCWZ1bmN0aW9uIHVuaXRPdXRPZlJhbmdlKHVuaXQsIHZhbHVlKSB7CgkgIHJldHVybiBuZXcgSW52YWxpZCgidW5pdCBvdXQgb2YgcmFuZ2UiLCAieW91IHNwZWNpZmllZCAiICsgdmFsdWUgKyAiIChvZiB0eXBlICIgKyB0eXBlb2YgdmFsdWUgKyAiKSBhcyBhICIgKyB1bml0ICsgIiwgd2hpY2ggaXMgaW52YWxpZCIpOwoJfQoKCWZ1bmN0aW9uIGRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KSB7CgkgIHZhciBqcyA9IG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoIC0gMSwgZGF5KSkuZ2V0VVRDRGF5KCk7CgkgIHJldHVybiBqcyA9PT0gMCA/IDcgOiBqczsKCX0KCglmdW5jdGlvbiBjb21wdXRlT3JkaW5hbCh5ZWFyLCBtb250aCwgZGF5KSB7CgkgIHJldHVybiBkYXkgKyAoaXNMZWFwWWVhcih5ZWFyKSA/IGxlYXBMYWRkZXIgOiBub25MZWFwTGFkZGVyKVttb250aCAtIDFdOwoJfQoKCWZ1bmN0aW9uIHVuY29tcHV0ZU9yZGluYWwoeWVhciwgb3JkaW5hbCkgewoJICB2YXIgdGFibGUgPSBpc0xlYXBZZWFyKHllYXIpID8gbGVhcExhZGRlciA6IG5vbkxlYXBMYWRkZXIsCgkgICAgICBtb250aDAgPSB0YWJsZS5maW5kSW5kZXgoZnVuY3Rpb24gKGkpIHsKCSAgICByZXR1cm4gaSA8IG9yZGluYWw7CgkgIH0pLAoJICAgICAgZGF5ID0gb3JkaW5hbCAtIHRhYmxlW21vbnRoMF07CgkgIHJldHVybiB7CgkgICAgbW9udGg6IG1vbnRoMCArIDEsCgkgICAgZGF5OiBkYXkKCSAgfTsKCX0KCS8qKgoJICogQHByaXZhdGUKCSAqLwoKCglmdW5jdGlvbiBncmVnb3JpYW5Ub1dlZWsoZ3JlZ09iaikgewoJICB2YXIgeWVhciA9IGdyZWdPYmoueWVhciwKCSAgICAgIG1vbnRoID0gZ3JlZ09iai5tb250aCwKCSAgICAgIGRheSA9IGdyZWdPYmouZGF5LAoJICAgICAgb3JkaW5hbCA9IGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpLAoJICAgICAgd2Vla2RheSA9IGRheU9mV2Vlayh5ZWFyLCBtb250aCwgZGF5KTsKCSAgdmFyIHdlZWtOdW1iZXIgPSBNYXRoLmZsb29yKChvcmRpbmFsIC0gd2Vla2RheSArIDEwKSAvIDcpLAoJICAgICAgd2Vla1llYXI7CgoJICBpZiAod2Vla051bWJlciA8IDEpIHsKCSAgICB3ZWVrWWVhciA9IHllYXIgLSAxOwoJICAgIHdlZWtOdW1iZXIgPSB3ZWVrc0luV2Vla1llYXIod2Vla1llYXIpOwoJICB9IGVsc2UgaWYgKHdlZWtOdW1iZXIgPiB3ZWVrc0luV2Vla1llYXIoeWVhcikpIHsKCSAgICB3ZWVrWWVhciA9IHllYXIgKyAxOwoJICAgIHdlZWtOdW1iZXIgPSAxOwoJICB9IGVsc2UgewoJICAgIHdlZWtZZWFyID0geWVhcjsKCSAgfQoKCSAgcmV0dXJuIF9leHRlbmRzKHsKCSAgICB3ZWVrWWVhcjogd2Vla1llYXIsCgkgICAgd2Vla051bWJlcjogd2Vla051bWJlciwKCSAgICB3ZWVrZGF5OiB3ZWVrZGF5CgkgIH0sIHRpbWVPYmplY3QoZ3JlZ09iaikpOwoJfQoJZnVuY3Rpb24gd2Vla1RvR3JlZ29yaWFuKHdlZWtEYXRhKSB7CgkgIHZhciB3ZWVrWWVhciA9IHdlZWtEYXRhLndlZWtZZWFyLAoJICAgICAgd2Vla051bWJlciA9IHdlZWtEYXRhLndlZWtOdW1iZXIsCgkgICAgICB3ZWVrZGF5ID0gd2Vla0RhdGEud2Vla2RheSwKCSAgICAgIHdlZWtkYXlPZkphbjQgPSBkYXlPZldlZWsod2Vla1llYXIsIDEsIDQpLAoJICAgICAgeWVhckluRGF5cyA9IGRheXNJblllYXIod2Vla1llYXIpOwoJICB2YXIgb3JkaW5hbCA9IHdlZWtOdW1iZXIgKiA3ICsgd2Vla2RheSAtIHdlZWtkYXlPZkphbjQgLSAzLAoJICAgICAgeWVhcjsKCgkgIGlmIChvcmRpbmFsIDwgMSkgewoJICAgIHllYXIgPSB3ZWVrWWVhciAtIDE7CgkgICAgb3JkaW5hbCArPSBkYXlzSW5ZZWFyKHllYXIpOwoJICB9IGVsc2UgaWYgKG9yZGluYWwgPiB5ZWFySW5EYXlzKSB7CgkgICAgeWVhciA9IHdlZWtZZWFyICsgMTsKCSAgICBvcmRpbmFsIC09IGRheXNJblllYXIod2Vla1llYXIpOwoJICB9IGVsc2UgewoJICAgIHllYXIgPSB3ZWVrWWVhcjsKCSAgfQoKCSAgdmFyIF91bmNvbXB1dGVPcmRpbmFsID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKSwKCSAgICAgIG1vbnRoID0gX3VuY29tcHV0ZU9yZGluYWwubW9udGgsCgkgICAgICBkYXkgPSBfdW5jb21wdXRlT3JkaW5hbC5kYXk7CgoJICByZXR1cm4gX2V4dGVuZHMoewoJICAgIHllYXI6IHllYXIsCgkgICAgbW9udGg6IG1vbnRoLAoJICAgIGRheTogZGF5CgkgIH0sIHRpbWVPYmplY3Qod2Vla0RhdGEpKTsKCX0KCWZ1bmN0aW9uIGdyZWdvcmlhblRvT3JkaW5hbChncmVnRGF0YSkgewoJICB2YXIgeWVhciA9IGdyZWdEYXRhLnllYXIsCgkgICAgICBtb250aCA9IGdyZWdEYXRhLm1vbnRoLAoJICAgICAgZGF5ID0gZ3JlZ0RhdGEuZGF5OwoJICB2YXIgb3JkaW5hbCA9IGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpOwoJICByZXR1cm4gX2V4dGVuZHMoewoJICAgIHllYXI6IHllYXIsCgkgICAgb3JkaW5hbDogb3JkaW5hbAoJICB9LCB0aW1lT2JqZWN0KGdyZWdEYXRhKSk7Cgl9CglmdW5jdGlvbiBvcmRpbmFsVG9HcmVnb3JpYW4ob3JkaW5hbERhdGEpIHsKCSAgdmFyIHllYXIgPSBvcmRpbmFsRGF0YS55ZWFyLAoJICAgICAgb3JkaW5hbCA9IG9yZGluYWxEYXRhLm9yZGluYWw7CgoJICB2YXIgX3VuY29tcHV0ZU9yZGluYWwyID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKSwKCSAgICAgIG1vbnRoID0gX3VuY29tcHV0ZU9yZGluYWwyLm1vbnRoLAoJICAgICAgZGF5ID0gX3VuY29tcHV0ZU9yZGluYWwyLmRheTsKCgkgIHJldHVybiBfZXh0ZW5kcyh7CgkgICAgeWVhcjogeWVhciwKCSAgICBtb250aDogbW9udGgsCgkgICAgZGF5OiBkYXkKCSAgfSwgdGltZU9iamVjdChvcmRpbmFsRGF0YSkpOwoJfQoJZnVuY3Rpb24gaGFzSW52YWxpZFdlZWtEYXRhKG9iaikgewoJICB2YXIgdmFsaWRZZWFyID0gaXNJbnRlZ2VyKG9iai53ZWVrWWVhciksCgkgICAgICB2YWxpZFdlZWsgPSBpbnRlZ2VyQmV0d2VlbihvYmoud2Vla051bWJlciwgMSwgd2Vla3NJbldlZWtZZWFyKG9iai53ZWVrWWVhcikpLAoJICAgICAgdmFsaWRXZWVrZGF5ID0gaW50ZWdlckJldHdlZW4ob2JqLndlZWtkYXksIDEsIDcpOwoKCSAgaWYgKCF2YWxpZFllYXIpIHsKCSAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoIndlZWtZZWFyIiwgb2JqLndlZWtZZWFyKTsKCSAgfSBlbHNlIGlmICghdmFsaWRXZWVrKSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJ3ZWVrIiwgb2JqLndlZWspOwoJICB9IGVsc2UgaWYgKCF2YWxpZFdlZWtkYXkpIHsKCSAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoIndlZWtkYXkiLCBvYmoud2Vla2RheSk7CgkgIH0gZWxzZSByZXR1cm4gZmFsc2U7Cgl9CglmdW5jdGlvbiBoYXNJbnZhbGlkT3JkaW5hbERhdGEob2JqKSB7CgkgIHZhciB2YWxpZFllYXIgPSBpc0ludGVnZXIob2JqLnllYXIpLAoJICAgICAgdmFsaWRPcmRpbmFsID0gaW50ZWdlckJldHdlZW4ob2JqLm9yZGluYWwsIDEsIGRheXNJblllYXIob2JqLnllYXIpKTsKCgkgIGlmICghdmFsaWRZZWFyKSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJ5ZWFyIiwgb2JqLnllYXIpOwoJICB9IGVsc2UgaWYgKCF2YWxpZE9yZGluYWwpIHsKCSAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoIm9yZGluYWwiLCBvYmoub3JkaW5hbCk7CgkgIH0gZWxzZSByZXR1cm4gZmFsc2U7Cgl9CglmdW5jdGlvbiBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShvYmopIHsKCSAgdmFyIHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoueWVhciksCgkgICAgICB2YWxpZE1vbnRoID0gaW50ZWdlckJldHdlZW4ob2JqLm1vbnRoLCAxLCAxMiksCgkgICAgICB2YWxpZERheSA9IGludGVnZXJCZXR3ZWVuKG9iai5kYXksIDEsIGRheXNJbk1vbnRoKG9iai55ZWFyLCBvYmoubW9udGgpKTsKCgkgIGlmICghdmFsaWRZZWFyKSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJ5ZWFyIiwgb2JqLnllYXIpOwoJICB9IGVsc2UgaWYgKCF2YWxpZE1vbnRoKSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJtb250aCIsIG9iai5tb250aCk7CgkgIH0gZWxzZSBpZiAoIXZhbGlkRGF5KSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJkYXkiLCBvYmouZGF5KTsKCSAgfSBlbHNlIHJldHVybiBmYWxzZTsKCX0KCWZ1bmN0aW9uIGhhc0ludmFsaWRUaW1lRGF0YShvYmopIHsKCSAgdmFyIGhvdXIgPSBvYmouaG91ciwKCSAgICAgIG1pbnV0ZSA9IG9iai5taW51dGUsCgkgICAgICBzZWNvbmQgPSBvYmouc2Vjb25kLAoJICAgICAgbWlsbGlzZWNvbmQgPSBvYmoubWlsbGlzZWNvbmQ7CgkgIHZhciB2YWxpZEhvdXIgPSBpbnRlZ2VyQmV0d2Vlbihob3VyLCAwLCAyMykgfHwgaG91ciA9PT0gMjQgJiYgbWludXRlID09PSAwICYmIHNlY29uZCA9PT0gMCAmJiBtaWxsaXNlY29uZCA9PT0gMCwKCSAgICAgIHZhbGlkTWludXRlID0gaW50ZWdlckJldHdlZW4obWludXRlLCAwLCA1OSksCgkgICAgICB2YWxpZFNlY29uZCA9IGludGVnZXJCZXR3ZWVuKHNlY29uZCwgMCwgNTkpLAoJICAgICAgdmFsaWRNaWxsaXNlY29uZCA9IGludGVnZXJCZXR3ZWVuKG1pbGxpc2Vjb25kLCAwLCA5OTkpOwoKCSAgaWYgKCF2YWxpZEhvdXIpIHsKCSAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoImhvdXIiLCBob3VyKTsKCSAgfSBlbHNlIGlmICghdmFsaWRNaW51dGUpIHsKCSAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoIm1pbnV0ZSIsIG1pbnV0ZSk7CgkgIH0gZWxzZSBpZiAoIXZhbGlkU2Vjb25kKSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJzZWNvbmQiLCBzZWNvbmQpOwoJICB9IGVsc2UgaWYgKCF2YWxpZE1pbGxpc2Vjb25kKSB7CgkgICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKCJtaWxsaXNlY29uZCIsIG1pbGxpc2Vjb25kKTsKCSAgfSBlbHNlIHJldHVybiBmYWxzZTsKCX0KCgl2YXIgSU5WQUxJRCA9ICJJbnZhbGlkIERhdGVUaW1lIjsKCXZhciBNQVhfREFURSA9IDguNjRlMTU7CgoJZnVuY3Rpb24gdW5zdXBwb3J0ZWRab25lKHpvbmUpIHsKCSAgcmV0dXJuIG5ldyBJbnZhbGlkKCJ1bnN1cHBvcnRlZCB6b25lIiwgInRoZSB6b25lIFwiIiArIHpvbmUubmFtZSArICJcIiBpcyBub3Qgc3VwcG9ydGVkIik7Cgl9IC8vIHdlIGNhY2hlIHdlZWsgZGF0YSBvbiB0aGUgRFQgb2JqZWN0IGFuZCB0aGlzIGludGVybWVkaWF0ZXMgdGhlIGNhY2hlCgoKCWZ1bmN0aW9uIHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEoZHQpIHsKCSAgaWYgKGR0LndlZWtEYXRhID09PSBudWxsKSB7CgkgICAgZHQud2Vla0RhdGEgPSBncmVnb3JpYW5Ub1dlZWsoZHQuYyk7CgkgIH0KCgkgIHJldHVybiBkdC53ZWVrRGF0YTsKCX0gLy8gY2xvbmUgcmVhbGx5IG1lYW5zLCAibWFrZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGVzZSBtb2RpZmljYXRpb25zIi4gYWxsICJzZXR0ZXJzIiByZWFsbHkgdXNlIHRoaXMKCS8vIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3Qgd2hpbGUgb25seSBjaGFuZ2luZyBzb21lIG9mIHRoZSBwcm9wZXJ0aWVzCgoKCWZ1bmN0aW9uIGNsb25lKGluc3QsIGFsdHMpIHsKCSAgdmFyIGN1cnJlbnQgPSB7CgkgICAgdHM6IGluc3QudHMsCgkgICAgem9uZTogaW5zdC56b25lLAoJICAgIGM6IGluc3QuYywKCSAgICBvOiBpbnN0Lm8sCgkgICAgbG9jOiBpbnN0LmxvYywKCSAgICBpbnZhbGlkOiBpbnN0LmludmFsaWQKCSAgfTsKCSAgcmV0dXJuIG5ldyBEYXRlVGltZShfZXh0ZW5kcyh7fSwgY3VycmVudCwgYWx0cywgewoJICAgIG9sZDogY3VycmVudAoJICB9KSk7Cgl9IC8vIGZpbmQgdGhlIHJpZ2h0IG9mZnNldCBhIGdpdmVuIGxvY2FsIHRpbWUuIFRoZSBvIGlucHV0IGlzIG91ciBndWVzcywgd2hpY2ggZGV0ZXJtaW5lcyB3aGljaAoJLy8gb2Zmc2V0IHdlJ2xsIHBpY2sgaW4gYW1iaWd1b3VzIGNhc2VzIChlLmcuIHRoZXJlIGFyZSB0d28gMyBBTXMgYi9jIEZhbGxiYWNrIERTVCkKCgoJZnVuY3Rpb24gZml4T2Zmc2V0KGxvY2FsVFMsIG8sIHR6KSB7CgkgIC8vIE91ciBVVEMgdGltZSBpcyBqdXN0IGEgZ3Vlc3MgYmVjYXVzZSBvdXIgb2Zmc2V0IGlzIGp1c3QgYSBndWVzcwoJICB2YXIgdXRjR3Vlc3MgPSBsb2NhbFRTIC0gbyAqIDYwICogMTAwMDsgLy8gVGVzdCB3aGV0aGVyIHRoZSB6b25lIG1hdGNoZXMgdGhlIG9mZnNldCBmb3IgdGhpcyB0cwoKCSAgdmFyIG8yID0gdHoub2Zmc2V0KHV0Y0d1ZXNzKTsgLy8gSWYgc28sIG9mZnNldCBkaWRuJ3QgY2hhbmdlIGFuZCB3ZSdyZSBkb25lCgoJICBpZiAobyA9PT0gbzIpIHsKCSAgICByZXR1cm4gW3V0Y0d1ZXNzLCBvXTsKCSAgfSAvLyBJZiBub3QsIGNoYW5nZSB0aGUgdHMgYnkgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIG9mZnNldAoKCgkgIHV0Y0d1ZXNzIC09IChvMiAtIG8pICogNjAgKiAxMDAwOyAvLyBJZiB0aGF0IGdpdmVzIHVzIHRoZSBsb2NhbCB0aW1lIHdlIHdhbnQsIHdlJ3JlIGRvbmUKCgkgIHZhciBvMyA9IHR6Lm9mZnNldCh1dGNHdWVzcyk7CgoJICBpZiAobzIgPT09IG8zKSB7CgkgICAgcmV0dXJuIFt1dGNHdWVzcywgbzJdOwoJICB9IC8vIElmIGl0J3MgZGlmZmVyZW50LCB3ZSdyZSBpbiBhIGhvbGUgdGltZS4gVGhlIG9mZnNldCBoYXMgY2hhbmdlZCwgYnV0IHRoZSB3ZSBkb24ndCBhZGp1c3QgdGhlIHRpbWUKCgoJICByZXR1cm4gW2xvY2FsVFMgLSBNYXRoLm1pbihvMiwgbzMpICogNjAgKiAxMDAwLCBNYXRoLm1heChvMiwgbzMpXTsKCX0gLy8gY29udmVydCBhbiBlcG9jaCB0aW1lc3RhbXAgaW50byBhIGNhbGVuZGFyIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBvZmZzZXQKCgoJZnVuY3Rpb24gdHNUb09iaih0cywgb2Zmc2V0KSB7CgkgIHRzICs9IG9mZnNldCAqIDYwICogMTAwMDsKCSAgdmFyIGQgPSBuZXcgRGF0ZSh0cyk7CgkgIHJldHVybiB7CgkgICAgeWVhcjogZC5nZXRVVENGdWxsWWVhcigpLAoJICAgIG1vbnRoOiBkLmdldFVUQ01vbnRoKCkgKyAxLAoJICAgIGRheTogZC5nZXRVVENEYXRlKCksCgkgICAgaG91cjogZC5nZXRVVENIb3VycygpLAoJICAgIG1pbnV0ZTogZC5nZXRVVENNaW51dGVzKCksCgkgICAgc2Vjb25kOiBkLmdldFVUQ1NlY29uZHMoKSwKCSAgICBtaWxsaXNlY29uZDogZC5nZXRVVENNaWxsaXNlY29uZHMoKQoJICB9OwoJfSAvLyBjb252ZXJ0IGEgY2FsZW5kYXIgb2JqZWN0IHRvIGEgZXBvY2ggdGltZXN0YW1wCgoKCWZ1bmN0aW9uIG9ialRvVFMob2JqLCBvZmZzZXQsIHpvbmUpIHsKCSAgcmV0dXJuIGZpeE9mZnNldChvYmpUb0xvY2FsVFMob2JqKSwgb2Zmc2V0LCB6b25lKTsKCX0gLy8gY3JlYXRlIGEgbmV3IERUIGluc3RhbmNlIGJ5IGFkZGluZyBhIGR1cmF0aW9uLCBhZGp1c3RpbmcgZm9yIERTVHMKCgoJZnVuY3Rpb24gYWRqdXN0VGltZShpbnN0LCBkdXIpIHsKCSAgdmFyIG9QcmUgPSBpbnN0Lm8sCgkgICAgICB5ZWFyID0gaW5zdC5jLnllYXIgKyBNYXRoLnRydW5jKGR1ci55ZWFycyksCgkgICAgICBtb250aCA9IGluc3QuYy5tb250aCArIE1hdGgudHJ1bmMoZHVyLm1vbnRocykgKyBNYXRoLnRydW5jKGR1ci5xdWFydGVycykgKiAzLAoJICAgICAgYyA9IF9leHRlbmRzKHt9LCBpbnN0LmMsIHsKCSAgICB5ZWFyOiB5ZWFyLAoJICAgIG1vbnRoOiBtb250aCwKCSAgICBkYXk6IE1hdGgubWluKGluc3QuYy5kYXksIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSkgKyBNYXRoLnRydW5jKGR1ci5kYXlzKSArIE1hdGgudHJ1bmMoZHVyLndlZWtzKSAqIDcKCSAgfSksCgkgICAgICBtaWxsaXNUb0FkZCA9IER1cmF0aW9uLmZyb21PYmplY3QoewoJICAgIHllYXJzOiBkdXIueWVhcnMgLSBNYXRoLnRydW5jKGR1ci55ZWFycyksCgkgICAgcXVhcnRlcnM6IGR1ci5xdWFydGVycyAtIE1hdGgudHJ1bmMoZHVyLnF1YXJ0ZXJzKSwKCSAgICBtb250aHM6IGR1ci5tb250aHMgLSBNYXRoLnRydW5jKGR1ci5tb250aHMpLAoJICAgIHdlZWtzOiBkdXIud2Vla3MgLSBNYXRoLnRydW5jKGR1ci53ZWVrcyksCgkgICAgZGF5czogZHVyLmRheXMgLSBNYXRoLnRydW5jKGR1ci5kYXlzKSwKCSAgICBob3VyczogZHVyLmhvdXJzLAoJICAgIG1pbnV0ZXM6IGR1ci5taW51dGVzLAoJICAgIHNlY29uZHM6IGR1ci5zZWNvbmRzLAoJICAgIG1pbGxpc2Vjb25kczogZHVyLm1pbGxpc2Vjb25kcwoJICB9KS5hcygibWlsbGlzZWNvbmRzIiksCgkgICAgICBsb2NhbFRTID0gb2JqVG9Mb2NhbFRTKGMpOwoKCSAgdmFyIF9maXhPZmZzZXQgPSBmaXhPZmZzZXQobG9jYWxUUywgb1ByZSwgaW5zdC56b25lKSwKCSAgICAgIHRzID0gX2ZpeE9mZnNldFswXSwKCSAgICAgIG8gPSBfZml4T2Zmc2V0WzFdOwoKCSAgaWYgKG1pbGxpc1RvQWRkICE9PSAwKSB7CgkgICAgdHMgKz0gbWlsbGlzVG9BZGQ7IC8vIHRoYXQgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBvZmZzZXQgYnkgZ29pbmcgb3ZlciBhIERTVCwgYnV0IHdlIHdhbnQgdG8ga2VlcCB0aGUgdHMgdGhlIHNhbWUKCgkgICAgbyA9IGluc3Quem9uZS5vZmZzZXQodHMpOwoJICB9CgoJICByZXR1cm4gewoJICAgIHRzOiB0cywKCSAgICBvOiBvCgkgIH07Cgl9IC8vIGhlbHBlciB1c2VmdWwgaW4gdHVybmluZyB0aGUgcmVzdWx0cyBvZiBwYXJzaW5nIGludG8gcmVhbCBkYXRlcwoJLy8gYnkgaGFuZGxpbmcgdGhlIHpvbmUgb3B0aW9ucwoKCglmdW5jdGlvbiBwYXJzZURhdGFUb0RhdGVUaW1lKHBhcnNlZCwgcGFyc2VkWm9uZSwgb3B0cywgZm9ybWF0LCB0ZXh0KSB7CgkgIHZhciBzZXRab25lID0gb3B0cy5zZXRab25lLAoJICAgICAgem9uZSA9IG9wdHMuem9uZTsKCgkgIGlmIChwYXJzZWQgJiYgT2JqZWN0LmtleXMocGFyc2VkKS5sZW5ndGggIT09IDApIHsKCSAgICB2YXIgaW50ZXJwcmV0YXRpb25ab25lID0gcGFyc2VkWm9uZSB8fCB6b25lLAoJICAgICAgICBpbnN0ID0gRGF0ZVRpbWUuZnJvbU9iamVjdChwYXJzZWQsIF9leHRlbmRzKHt9LCBvcHRzLCB7CgkgICAgICB6b25lOiBpbnRlcnByZXRhdGlvblpvbmUKCSAgICB9KSk7CgkgICAgcmV0dXJuIHNldFpvbmUgPyBpbnN0IDogaW5zdC5zZXRab25lKHpvbmUpOwoJICB9IGVsc2UgewoJICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKG5ldyBJbnZhbGlkKCJ1bnBhcnNhYmxlIiwgInRoZSBpbnB1dCBcIiIgKyB0ZXh0ICsgIlwiIGNhbid0IGJlIHBhcnNlZCBhcyAiICsgZm9ybWF0KSk7CgkgIH0KCX0gLy8gaWYgeW91IHdhbnQgdG8gb3V0cHV0IGEgdGVjaG5pY2FsIGZvcm1hdCAoZS5nLiBSRkMgMjgyMiksIHRoaXMgaGVscGVyCgkvLyBoZWxwcyBoYW5kbGUgdGhlIGRldGFpbHMKCgoJZnVuY3Rpb24gdG9UZWNoRm9ybWF0KGR0LCBmb3JtYXQsIGFsbG93WikgewoJICBpZiAoYWxsb3daID09PSB2b2lkIDApIHsKCSAgICBhbGxvd1ogPSB0cnVlOwoJICB9CgoJICByZXR1cm4gZHQuaXNWYWxpZCA/IEZvcm1hdHRlci5jcmVhdGUoTG9jYWxlLmNyZWF0ZSgiZW4tVVMiKSwgewoJICAgIGFsbG93WjogYWxsb3daLAoJICAgIGZvcmNlU2ltcGxlOiB0cnVlCgkgIH0pLmZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhkdCwgZm9ybWF0KSA6IG51bGw7Cgl9IC8vIHRlY2huaWNhbCB0aW1lIGZvcm1hdHMgKGUuZy4gdGhlIHRpbWUgcGFydCBvZiBJU08gODYwMSksIHRha2Ugc29tZSBvcHRpb25zCgkvLyBhbmQgdGhpcyBjb21tb25pemVzIHRoZWlyIGhhbmRsaW5nCgoKCWZ1bmN0aW9uIHRvVGVjaFRpbWVGb3JtYXQoZHQsIF9yZWYpIHsKCSAgdmFyIF9yZWYkc3VwcHJlc3NTZWNvbmRzID0gX3JlZi5zdXBwcmVzc1NlY29uZHMsCgkgICAgICBzdXBwcmVzc1NlY29uZHMgPSBfcmVmJHN1cHByZXNzU2Vjb25kcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHN1cHByZXNzU2Vjb25kcywKCSAgICAgIF9yZWYkc3VwcHJlc3NNaWxsaXNlYyA9IF9yZWYuc3VwcHJlc3NNaWxsaXNlY29uZHMsCgkgICAgICBzdXBwcmVzc01pbGxpc2Vjb25kcyA9IF9yZWYkc3VwcHJlc3NNaWxsaXNlYyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJHN1cHByZXNzTWlsbGlzZWMsCgkgICAgICBpbmNsdWRlT2Zmc2V0ID0gX3JlZi5pbmNsdWRlT2Zmc2V0LAoJICAgICAgX3JlZiRpbmNsdWRlUHJlZml4ID0gX3JlZi5pbmNsdWRlUHJlZml4LAoJICAgICAgaW5jbHVkZVByZWZpeCA9IF9yZWYkaW5jbHVkZVByZWZpeCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGluY2x1ZGVQcmVmaXgsCgkgICAgICBfcmVmJGluY2x1ZGVab25lID0gX3JlZi5pbmNsdWRlWm9uZSwKCSAgICAgIGluY2x1ZGVab25lID0gX3JlZiRpbmNsdWRlWm9uZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGluY2x1ZGVab25lLAoJICAgICAgX3JlZiRzcGFjZVpvbmUgPSBfcmVmLnNwYWNlWm9uZSwKCSAgICAgIHNwYWNlWm9uZSA9IF9yZWYkc3BhY2Vab25lID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkc3BhY2Vab25lLAoJICAgICAgX3JlZiRmb3JtYXQgPSBfcmVmLmZvcm1hdCwKCSAgICAgIGZvcm1hdCA9IF9yZWYkZm9ybWF0ID09PSB2b2lkIDAgPyAiZXh0ZW5kZWQiIDogX3JlZiRmb3JtYXQ7CgkgIHZhciBmbXQgPSBmb3JtYXQgPT09ICJiYXNpYyIgPyAiSEhtbSIgOiAiSEg6bW0iOwoKCSAgaWYgKCFzdXBwcmVzc1NlY29uZHMgfHwgZHQuc2Vjb25kICE9PSAwIHx8IGR0Lm1pbGxpc2Vjb25kICE9PSAwKSB7CgkgICAgZm10ICs9IGZvcm1hdCA9PT0gImJhc2ljIiA/ICJzcyIgOiAiOnNzIjsKCgkgICAgaWYgKCFzdXBwcmVzc01pbGxpc2Vjb25kcyB8fCBkdC5taWxsaXNlY29uZCAhPT0gMCkgewoJICAgICAgZm10ICs9ICIuU1NTIjsKCSAgICB9CgkgIH0KCgkgIGlmICgoaW5jbHVkZVpvbmUgfHwgaW5jbHVkZU9mZnNldCkgJiYgc3BhY2Vab25lKSB7CgkgICAgZm10ICs9ICIgIjsKCSAgfQoKCSAgaWYgKGluY2x1ZGVab25lKSB7CgkgICAgZm10ICs9ICJ6IjsKCSAgfSBlbHNlIGlmIChpbmNsdWRlT2Zmc2V0KSB7CgkgICAgZm10ICs9IGZvcm1hdCA9PT0gImJhc2ljIiA/ICJaWloiIDogIlpaIjsKCSAgfQoKCSAgdmFyIHN0ciA9IHRvVGVjaEZvcm1hdChkdCwgZm10KTsKCgkgIGlmIChpbmNsdWRlUHJlZml4KSB7CgkgICAgc3RyID0gIlQiICsgc3RyOwoJICB9CgoJICByZXR1cm4gc3RyOwoJfSAvLyBkZWZhdWx0cyBmb3IgdW5zcGVjaWZpZWQgdW5pdHMgaW4gdGhlIHN1cHBvcnRlZCBjYWxlbmRhcnMKCgoJdmFyIGRlZmF1bHRVbml0VmFsdWVzID0gewoJICBtb250aDogMSwKCSAgZGF5OiAxLAoJICBob3VyOiAwLAoJICBtaW51dGU6IDAsCgkgIHNlY29uZDogMCwKCSAgbWlsbGlzZWNvbmQ6IDAKCX0sCgkgICAgZGVmYXVsdFdlZWtVbml0VmFsdWVzID0gewoJICB3ZWVrTnVtYmVyOiAxLAoJICB3ZWVrZGF5OiAxLAoJICBob3VyOiAwLAoJICBtaW51dGU6IDAsCgkgIHNlY29uZDogMCwKCSAgbWlsbGlzZWNvbmQ6IDAKCX0sCgkgICAgZGVmYXVsdE9yZGluYWxVbml0VmFsdWVzID0gewoJICBvcmRpbmFsOiAxLAoJICBob3VyOiAwLAoJICBtaW51dGU6IDAsCgkgIHNlY29uZDogMCwKCSAgbWlsbGlzZWNvbmQ6IDAKCX07IC8vIFVuaXRzIGluIHRoZSBzdXBwb3J0ZWQgY2FsZW5kYXJzLCBzb3J0ZWQgYnkgYmlnbmVzcwoKCXZhciBvcmRlcmVkVW5pdHMgPSBbInllYXIiLCAibW9udGgiLCAiZGF5IiwgImhvdXIiLCAibWludXRlIiwgInNlY29uZCIsICJtaWxsaXNlY29uZCJdLAoJICAgIG9yZGVyZWRXZWVrVW5pdHMgPSBbIndlZWtZZWFyIiwgIndlZWtOdW1iZXIiLCAid2Vla2RheSIsICJob3VyIiwgIm1pbnV0ZSIsICJzZWNvbmQiLCAibWlsbGlzZWNvbmQiXSwKCSAgICBvcmRlcmVkT3JkaW5hbFVuaXRzID0gWyJ5ZWFyIiwgIm9yZGluYWwiLCAiaG91ciIsICJtaW51dGUiLCAic2Vjb25kIiwgIm1pbGxpc2Vjb25kIl07IC8vIHN0YW5kYXJkaXplIGNhc2UgYW5kIHBsdXJhbGl0eSBpbiB1bml0cwoKCWZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXQodW5pdCkgewoJICB2YXIgbm9ybWFsaXplZCA9IHsKCSAgICB5ZWFyOiAieWVhciIsCgkgICAgeWVhcnM6ICJ5ZWFyIiwKCSAgICBtb250aDogIm1vbnRoIiwKCSAgICBtb250aHM6ICJtb250aCIsCgkgICAgZGF5OiAiZGF5IiwKCSAgICBkYXlzOiAiZGF5IiwKCSAgICBob3VyOiAiaG91ciIsCgkgICAgaG91cnM6ICJob3VyIiwKCSAgICBtaW51dGU6ICJtaW51dGUiLAoJICAgIG1pbnV0ZXM6ICJtaW51dGUiLAoJICAgIHF1YXJ0ZXI6ICJxdWFydGVyIiwKCSAgICBxdWFydGVyczogInF1YXJ0ZXIiLAoJICAgIHNlY29uZDogInNlY29uZCIsCgkgICAgc2Vjb25kczogInNlY29uZCIsCgkgICAgbWlsbGlzZWNvbmQ6ICJtaWxsaXNlY29uZCIsCgkgICAgbWlsbGlzZWNvbmRzOiAibWlsbGlzZWNvbmQiLAoJICAgIHdlZWtkYXk6ICJ3ZWVrZGF5IiwKCSAgICB3ZWVrZGF5czogIndlZWtkYXkiLAoJICAgIHdlZWtudW1iZXI6ICJ3ZWVrTnVtYmVyIiwKCSAgICB3ZWVrc251bWJlcjogIndlZWtOdW1iZXIiLAoJICAgIHdlZWtudW1iZXJzOiAid2Vla051bWJlciIsCgkgICAgd2Vla3llYXI6ICJ3ZWVrWWVhciIsCgkgICAgd2Vla3llYXJzOiAid2Vla1llYXIiLAoJICAgIG9yZGluYWw6ICJvcmRpbmFsIgoJICB9W3VuaXQudG9Mb3dlckNhc2UoKV07CgkgIGlmICghbm9ybWFsaXplZCkgdGhyb3cgbmV3IEludmFsaWRVbml0RXJyb3IodW5pdCk7CgkgIHJldHVybiBub3JtYWxpemVkOwoJfSAvLyB0aGlzIGlzIGEgZHVtYmVkIGRvd24gdmVyc2lvbiBvZiBmcm9tT2JqZWN0KCkgdGhhdCBydW5zIGFib3V0IDYwJSBmYXN0ZXIKCS8vIGJ1dCBkb2Vzbid0IGRvIGFueSB2YWxpZGF0aW9uLCBtYWtlcyBhIGJ1bmNoIG9mIGFzc3VtcHRpb25zIGFib3V0IHdoYXQgdW5pdHMKCS8vIGFyZSBwcmVzZW50LCBhbmQgc28gb24uCgkvLyB0aGlzIGlzIGEgZHVtYmVkIGRvd24gdmVyc2lvbiBvZiBmcm9tT2JqZWN0KCkgdGhhdCBydW5zIGFib3V0IDYwJSBmYXN0ZXIKCS8vIGJ1dCBkb2Vzbid0IGRvIGFueSB2YWxpZGF0aW9uLCBtYWtlcyBhIGJ1bmNoIG9mIGFzc3VtcHRpb25zIGFib3V0IHdoYXQgdW5pdHMKCS8vIGFyZSBwcmVzZW50LCBhbmQgc28gb24uCgoKCWZ1bmN0aW9uIHF1aWNrRFQob2JqLCBvcHRzKSB7CgkgIHZhciB6b25lID0gbm9ybWFsaXplWm9uZShvcHRzLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKSwKCSAgICAgIGxvYyA9IExvY2FsZS5mcm9tT2JqZWN0KG9wdHMpLAoJICAgICAgdHNOb3cgPSBTZXR0aW5ncy5ub3coKTsKCSAgdmFyIHRzLCBvOyAvLyBhc3N1bWUgd2UgaGF2ZSB0aGUgaGlnaGVyLW9yZGVyIHVuaXRzCgoJICBpZiAoIWlzVW5kZWZpbmVkKG9iai55ZWFyKSkgewoJICAgIGZvciAodmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2Uob3JkZXJlZFVuaXRzKSwgX3N0ZXA7ICEoX3N0ZXAgPSBfaXRlcmF0b3IoKSkuZG9uZTspIHsKCSAgICAgIHZhciB1ID0gX3N0ZXAudmFsdWU7CgoJICAgICAgaWYgKGlzVW5kZWZpbmVkKG9ialt1XSkpIHsKCSAgICAgICAgb2JqW3VdID0gZGVmYXVsdFVuaXRWYWx1ZXNbdV07CgkgICAgICB9CgkgICAgfQoKCSAgICB2YXIgaW52YWxpZCA9IGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhKG9iaikgfHwgaGFzSW52YWxpZFRpbWVEYXRhKG9iaik7CgoJICAgIGlmIChpbnZhbGlkKSB7CgkgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChpbnZhbGlkKTsKCSAgICB9CgoJICAgIHZhciBvZmZzZXRQcm92aXMgPSB6b25lLm9mZnNldCh0c05vdyk7CgoJICAgIHZhciBfb2JqVG9UUyA9IG9ialRvVFMob2JqLCBvZmZzZXRQcm92aXMsIHpvbmUpOwoKCSAgICB0cyA9IF9vYmpUb1RTWzBdOwoJICAgIG8gPSBfb2JqVG9UU1sxXTsKCSAgfSBlbHNlIHsKCSAgICB0cyA9IHRzTm93OwoJICB9CgoJICByZXR1cm4gbmV3IERhdGVUaW1lKHsKCSAgICB0czogdHMsCgkgICAgem9uZTogem9uZSwKCSAgICBsb2M6IGxvYywKCSAgICBvOiBvCgkgIH0pOwoJfQoKCWZ1bmN0aW9uIGRpZmZSZWxhdGl2ZShzdGFydCwgZW5kLCBvcHRzKSB7CgkgIHZhciByb3VuZCA9IGlzVW5kZWZpbmVkKG9wdHMucm91bmQpID8gdHJ1ZSA6IG9wdHMucm91bmQsCgkgICAgICBmb3JtYXQgPSBmdW5jdGlvbiBmb3JtYXQoYywgdW5pdCkgewoJICAgIGMgPSByb3VuZFRvKGMsIHJvdW5kIHx8IG9wdHMuY2FsZW5kYXJ5ID8gMCA6IDIsIHRydWUpOwoJICAgIHZhciBmb3JtYXR0ZXIgPSBlbmQubG9jLmNsb25lKG9wdHMpLnJlbEZvcm1hdHRlcihvcHRzKTsKCSAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdChjLCB1bml0KTsKCSAgfSwKCSAgICAgIGRpZmZlciA9IGZ1bmN0aW9uIGRpZmZlcih1bml0KSB7CgkgICAgaWYgKG9wdHMuY2FsZW5kYXJ5KSB7CgkgICAgICBpZiAoIWVuZC5oYXNTYW1lKHN0YXJ0LCB1bml0KSkgewoJICAgICAgICByZXR1cm4gZW5kLnN0YXJ0T2YodW5pdCkuZGlmZihzdGFydC5zdGFydE9mKHVuaXQpLCB1bml0KS5nZXQodW5pdCk7CgkgICAgICB9IGVsc2UgcmV0dXJuIDA7CgkgICAgfSBlbHNlIHsKCSAgICAgIHJldHVybiBlbmQuZGlmZihzdGFydCwgdW5pdCkuZ2V0KHVuaXQpOwoJICAgIH0KCSAgfTsKCgkgIGlmIChvcHRzLnVuaXQpIHsKCSAgICByZXR1cm4gZm9ybWF0KGRpZmZlcihvcHRzLnVuaXQpLCBvcHRzLnVuaXQpOwoJICB9CgoJICBmb3IgKHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShvcHRzLnVuaXRzKSwgX3N0ZXAyOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIoKSkuZG9uZTspIHsKCSAgICB2YXIgdW5pdCA9IF9zdGVwMi52YWx1ZTsKCSAgICB2YXIgY291bnQgPSBkaWZmZXIodW5pdCk7CgoJICAgIGlmIChNYXRoLmFicyhjb3VudCkgPj0gMSkgewoJICAgICAgcmV0dXJuIGZvcm1hdChjb3VudCwgdW5pdCk7CgkgICAgfQoJICB9CgoJICByZXR1cm4gZm9ybWF0KHN0YXJ0ID4gZW5kID8gLTAgOiAwLCBvcHRzLnVuaXRzW29wdHMudW5pdHMubGVuZ3RoIC0gMV0pOwoJfQoKCWZ1bmN0aW9uIGxhc3RPcHRzKGFyZ0xpc3QpIHsKCSAgdmFyIG9wdHMgPSB7fSwKCSAgICAgIGFyZ3M7CgoJICBpZiAoYXJnTGlzdC5sZW5ndGggPiAwICYmIHR5cGVvZiBhcmdMaXN0W2FyZ0xpc3QubGVuZ3RoIC0gMV0gPT09ICJvYmplY3QiKSB7CgkgICAgb3B0cyA9IGFyZ0xpc3RbYXJnTGlzdC5sZW5ndGggLSAxXTsKCSAgICBhcmdzID0gQXJyYXkuZnJvbShhcmdMaXN0KS5zbGljZSgwLCBhcmdMaXN0Lmxlbmd0aCAtIDEpOwoJICB9IGVsc2UgewoJICAgIGFyZ3MgPSBBcnJheS5mcm9tKGFyZ0xpc3QpOwoJICB9CgoJICByZXR1cm4gW29wdHMsIGFyZ3NdOwoJfQoJLyoqCgkgKiBBIERhdGVUaW1lIGlzIGFuIGltbXV0YWJsZSBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBzcGVjaWZpYyBkYXRlIGFuZCB0aW1lIGFuZCBhY2NvbXBhbnlpbmcgbWV0aG9kcy4gSXQgY29udGFpbnMgY2xhc3MgYW5kIGluc3RhbmNlIG1ldGhvZHMgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBpbnRlcnJvZ2F0aW5nLCB0cmFuc2Zvcm1pbmcsIGFuZCBmb3JtYXR0aW5nIHRoZW0uCgkgKgoJICogQSBEYXRlVGltZSBjb21wcmlzZXMgb2Y6CgkgKiAqIEEgdGltZXN0YW1wLiBFYWNoIERhdGVUaW1lIGluc3RhbmNlIHJlZmVycyB0byBhIHNwZWNpZmljIG1pbGxpc2Vjb25kIG9mIHRoZSBVbml4IGVwb2NoLgoJICogKiBBIHRpbWUgem9uZS4gRWFjaCBpbnN0YW5jZSBpcyBjb25zaWRlcmVkIGluIHRoZSBjb250ZXh0IG9mIGEgc3BlY2lmaWMgem9uZSAoYnkgZGVmYXVsdCB0aGUgbG9jYWwgc3lzdGVtJ3Mgem9uZSkuCgkgKiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyB0aGF0IGVmZmVjdCBob3cgb3V0cHV0IHN0cmluZ3MgYXJlIGZvcm1hdHRlZCwgc3VjaCBhcyBgbG9jYWxlYCwgYG51bWJlcmluZ1N5c3RlbWAsIGFuZCBgb3V0cHV0Q2FsZW5kYXJgLgoJICoKCSAqIEhlcmUgaXMgYSBicmllZiBvdmVydmlldyBvZiB0aGUgbW9zdCBjb21tb25seSB1c2VkIGZ1bmN0aW9uYWxpdHkgaXQgcHJvdmlkZXM6CgkgKgoJICogKiAqKkNyZWF0aW9uKio6IFRvIGNyZWF0ZSBhIERhdGVUaW1lIGZyb20gaXRzIGNvbXBvbmVudHMsIHVzZSBvbmUgb2YgaXRzIGZhY3RvcnkgY2xhc3MgbWV0aG9kczoge0BsaW5rIERhdGVUaW1lI2xvY2FsfSwge0BsaW5rIERhdGVUaW1lI3V0Y30sIGFuZCAobW9zdCBmbGV4aWJseSkge0BsaW5rIERhdGVUaW1lI2Zyb21PYmplY3R9LiBUbyBjcmVhdGUgb25lIGZyb20gYSBzdGFuZGFyZCBzdHJpbmcgZm9ybWF0LCB1c2Uge0BsaW5rIERhdGVUaW1lI2Zyb21JU099LCB7QGxpbmsgRGF0ZVRpbWUjZnJvbUhUVFB9LCBhbmQge0BsaW5rIERhdGVUaW1lI2Zyb21SRkMyODIyfS4gVG8gY3JlYXRlIG9uZSBmcm9tIGEgY3VzdG9tIHN0cmluZyBmb3JtYXQsIHVzZSB7QGxpbmsgRGF0ZVRpbWUjZnJvbUZvcm1hdH0uIFRvIGNyZWF0ZSBvbmUgZnJvbSBhIG5hdGl2ZSBKUyBkYXRlLCB1c2Uge0BsaW5rIERhdGVUaW1lI2Zyb21KU0RhdGV9LgoJICogKiAqKkdyZWdvcmlhbiBjYWxlbmRhciBhbmQgdGltZSoqOiBUbyBleGFtaW5lIHRoZSBHcmVnb3JpYW4gcHJvcGVydGllcyBvZiBhIERhdGVUaW1lIGluZGl2aWR1YWxseSAoaS5lIGFzIG9wcG9zZWQgdG8gY29sbGVjdGl2ZWx5IHRocm91Z2gge0BsaW5rIERhdGVUaW1lI3RvT2JqZWN0fSksIHVzZSB0aGUge0BsaW5rIERhdGVUaW1lI3llYXJ9LCB7QGxpbmsgRGF0ZVRpbWUjbW9udGh9LAoJICoge0BsaW5rIERhdGVUaW1lI2RheX0sIHtAbGluayBEYXRlVGltZSNob3VyfSwge0BsaW5rIERhdGVUaW1lI21pbnV0ZX0sIHtAbGluayBEYXRlVGltZSNzZWNvbmR9LCB7QGxpbmsgRGF0ZVRpbWUjbWlsbGlzZWNvbmR9IGFjY2Vzc29ycy4KCSAqICogKipXZWVrIGNhbGVuZGFyKio6IEZvciBJU08gd2VlayBjYWxlbmRhciBhdHRyaWJ1dGVzLCBzZWUgdGhlIHtAbGluayBEYXRlVGltZSN3ZWVrWWVhcn0sIHtAbGluayBEYXRlVGltZSN3ZWVrTnVtYmVyfSwgYW5kIHtAbGluayBEYXRlVGltZSN3ZWVrZGF5fSBhY2Nlc3NvcnMuCgkgKiAqICoqQ29uZmlndXJhdGlvbioqIFNlZSB0aGUge0BsaW5rIERhdGVUaW1lI2xvY2FsZX0gYW5kIHtAbGluayBEYXRlVGltZSNudW1iZXJpbmdTeXN0ZW19IGFjY2Vzc29ycy4KCSAqICogKipUcmFuc2Zvcm1hdGlvbioqOiBUbyB0cmFuc2Zvcm0gdGhlIERhdGVUaW1lIGludG8gb3RoZXIgRGF0ZVRpbWVzLCB1c2Uge0BsaW5rIERhdGVUaW1lI3NldH0sIHtAbGluayBEYXRlVGltZSNyZWNvbmZpZ3VyZX0sIHtAbGluayBEYXRlVGltZSNzZXRab25lfSwge0BsaW5rIERhdGVUaW1lI3NldExvY2FsZX0sIHtAbGluayBEYXRlVGltZS5wbHVzfSwge0BsaW5rIERhdGVUaW1lI21pbnVzfSwge0BsaW5rIERhdGVUaW1lI2VuZE9mfSwge0BsaW5rIERhdGVUaW1lI3N0YXJ0T2Z9LCB7QGxpbmsgRGF0ZVRpbWUjdG9VVEN9LCBhbmQge0BsaW5rIERhdGVUaW1lI3RvTG9jYWx9LgoJICogKiAqKk91dHB1dCoqOiBUbyBjb252ZXJ0IHRoZSBEYXRlVGltZSB0byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHVzZSB0aGUge0BsaW5rIERhdGVUaW1lI3RvUmVsYXRpdmV9LCB7QGxpbmsgRGF0ZVRpbWUjdG9SZWxhdGl2ZUNhbGVuZGFyfSwge0BsaW5rIERhdGVUaW1lI3RvSlNPTn0sIHtAbGluayBEYXRlVGltZSN0b0lTT30sIHtAbGluayBEYXRlVGltZSN0b0hUVFB9LCB7QGxpbmsgRGF0ZVRpbWUjdG9PYmplY3R9LCB7QGxpbmsgRGF0ZVRpbWUjdG9SRkMyODIyfSwge0BsaW5rIERhdGVUaW1lI3RvU3RyaW5nfSwge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSwge0BsaW5rIERhdGVUaW1lI3RvRm9ybWF0fSwge0BsaW5rIERhdGVUaW1lI3RvTWlsbGlzfSBhbmQge0BsaW5rIERhdGVUaW1lI3RvSlNEYXRlfS4KCSAqCgkgKiBUaGVyZSdzIHBsZW50eSBvdGhlcnMgZG9jdW1lbnRlZCBiZWxvdy4gSW4gYWRkaXRpb24sIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN1YnRsZXIgdG9waWNzIGxpa2UgaW50ZXJuYXRpb25hbGl6YXRpb24sIHRpbWUgem9uZXMsIGFsdGVybmF0aXZlIGNhbGVuZGFycywgdmFsaWRpdHksIGFuZCBzbyBvbiwgc2VlIHRoZSBleHRlcm5hbCBkb2N1bWVudGF0aW9uLgoJICovCgoKCXZhciBEYXRlVGltZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CgkgIC8qKgoJICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICovCgkgIGZ1bmN0aW9uIERhdGVUaW1lKGNvbmZpZykgewoJICAgIHZhciB6b25lID0gY29uZmlnLnpvbmUgfHwgU2V0dGluZ3MuZGVmYXVsdFpvbmU7CgkgICAgdmFyIGludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCAoTnVtYmVyLmlzTmFOKGNvbmZpZy50cykgPyBuZXcgSW52YWxpZCgiaW52YWxpZCBpbnB1dCIpIDogbnVsbCkgfHwgKCF6b25lLmlzVmFsaWQgPyB1bnN1cHBvcnRlZFpvbmUoem9uZSkgOiBudWxsKTsKCSAgICAvKioKCSAgICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICAgKi8KCgkgICAgdGhpcy50cyA9IGlzVW5kZWZpbmVkKGNvbmZpZy50cykgPyBTZXR0aW5ncy5ub3coKSA6IGNvbmZpZy50czsKCSAgICB2YXIgYyA9IG51bGwsCgkgICAgICAgIG8gPSBudWxsOwoKCSAgICBpZiAoIWludmFsaWQpIHsKCSAgICAgIHZhciB1bmNoYW5nZWQgPSBjb25maWcub2xkICYmIGNvbmZpZy5vbGQudHMgPT09IHRoaXMudHMgJiYgY29uZmlnLm9sZC56b25lLmVxdWFscyh6b25lKTsKCgkgICAgICBpZiAodW5jaGFuZ2VkKSB7CgkgICAgICAgIHZhciBfcmVmMiA9IFtjb25maWcub2xkLmMsIGNvbmZpZy5vbGQub107CgkgICAgICAgIGMgPSBfcmVmMlswXTsKCSAgICAgICAgbyA9IF9yZWYyWzFdOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgdmFyIG90ID0gem9uZS5vZmZzZXQodGhpcy50cyk7CgkgICAgICAgIGMgPSB0c1RvT2JqKHRoaXMudHMsIG90KTsKCSAgICAgICAgaW52YWxpZCA9IE51bWJlci5pc05hTihjLnllYXIpID8gbmV3IEludmFsaWQoImludmFsaWQgaW5wdXQiKSA6IG51bGw7CgkgICAgICAgIGMgPSBpbnZhbGlkID8gbnVsbCA6IGM7CgkgICAgICAgIG8gPSBpbnZhbGlkID8gbnVsbCA6IG90OwoJICAgICAgfQoJICAgIH0KCSAgICAvKioKCSAgICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICAgKi8KCgoJICAgIHRoaXMuX3pvbmUgPSB6b25lOwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLmxvYyA9IGNvbmZpZy5sb2MgfHwgTG9jYWxlLmNyZWF0ZSgpOwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLmludmFsaWQgPSBpbnZhbGlkOwoJICAgIC8qKgoJICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICAgICAqLwoKCSAgICB0aGlzLndlZWtEYXRhID0gbnVsbDsKCSAgICAvKioKCSAgICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICAgKi8KCgkgICAgdGhpcy5jID0gYzsKCSAgICAvKioKCSAgICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICAgKi8KCgkgICAgdGhpcy5vID0gbzsKCSAgICAvKioKCSAgICAgKiBAYWNjZXNzIHByaXZhdGUKCSAgICAgKi8KCgkgICAgdGhpcy5pc0x1eG9uRGF0ZVRpbWUgPSB0cnVlOwoJICB9IC8vIENPTlNUUlVDVAoKCSAgLyoqCgkgICAqIENyZWF0ZSBhIERhdGVUaW1lIGZvciB0aGUgY3VycmVudCBpbnN0YW50LCBpbiB0aGUgc3lzdGVtJ3MgdGltZSB6b25lLgoJICAgKgoJICAgKiBVc2UgU2V0dGluZ3MgdG8gb3ZlcnJpZGUgdGhlc2UgZGVmYXVsdCB2YWx1ZXMgaWYgbmVlZGVkLgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTygpIC8vfj4gbm93IGluIHRoZSBJU08gZm9ybWF0CgkgICAqIEByZXR1cm4ge0RhdGVUaW1lfQoJICAgKi8KCgoJICBEYXRlVGltZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7CgkgICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7fSk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhIGxvY2FsIERhdGVUaW1lCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYGxvY2FsKClgIHdpdGggbm8gYXJndW1lbnRzKSwgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQKCSAgICogQHBhcmFtIHtudW1iZXJ9IFttb250aD0xXSAtIFRoZSBtb250aCwgMS1pbmRleGVkCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGF5PTFdIC0gVGhlIGRheSBvZiB0aGUgbW9udGgsIDEtaW5kZXhlZAoJICAgKiBAcGFyYW0ge251bWJlcn0gW2hvdXI9MF0gLSBUaGUgaG91ciBvZiB0aGUgZGF5LCBpbiAyNC1ob3VyIHRpbWUKCSAgICogQHBhcmFtIHtudW1iZXJ9IFttaW51dGU9MF0gLSBUaGUgbWludXRlIG9mIHRoZSBob3VyLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNTkKCSAgICogQHBhcmFtIHtudW1iZXJ9IFtzZWNvbmQ9MF0gLSBUaGUgc2Vjb25kIG9mIHRoZSBtaW51dGUsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OQoJICAgKiBAcGFyYW0ge251bWJlcn0gW21pbGxpc2Vjb25kPTBdIC0gVGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA5OTkKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IG5vdwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCh7IHpvbmU6ICJBbWVyaWNhL05ld19Zb3JrIiB9KSAgICAgIC8vfj4gbm93LCBpbiBVUyBlYXN0IGNvYXN0IHRpbWUKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDEtMDFUMDA6MDA6MDAKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMDFUMDA6MDA6MDAKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIHsgbG9jYWxlOiAiZnIiIH0pICAgICAvL34+IDIwMTctMDMtMTJUMDA6MDA6MDAsIHdpdGggYSBGcmVuY2ggbG9jYWxlCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCA1KSAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCA1LCB7IHpvbmU6ICJ1dGMiIH0pICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwLCBpbiBVVEMKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1KSAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MDAKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCkgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCwgNzY1KSAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTAuNzY1CgkgICAqIEByZXR1cm4ge0RhdGVUaW1lfQoJICAgKi8KCSAgOwoKCSAgRGF0ZVRpbWUubG9jYWwgPSBmdW5jdGlvbiBsb2NhbCgpIHsKCSAgICB2YXIgX2xhc3RPcHRzID0gbGFzdE9wdHMoYXJndW1lbnRzKSwKCSAgICAgICAgb3B0cyA9IF9sYXN0T3B0c1swXSwKCSAgICAgICAgYXJncyA9IF9sYXN0T3B0c1sxXSwKCSAgICAgICAgeWVhciA9IGFyZ3NbMF0sCgkgICAgICAgIG1vbnRoID0gYXJnc1sxXSwKCSAgICAgICAgZGF5ID0gYXJnc1syXSwKCSAgICAgICAgaG91ciA9IGFyZ3NbM10sCgkgICAgICAgIG1pbnV0ZSA9IGFyZ3NbNF0sCgkgICAgICAgIHNlY29uZCA9IGFyZ3NbNV0sCgkgICAgICAgIG1pbGxpc2Vjb25kID0gYXJnc1s2XTsKCgkgICAgcmV0dXJuIHF1aWNrRFQoewoJICAgICAgeWVhcjogeWVhciwKCSAgICAgIG1vbnRoOiBtb250aCwKCSAgICAgIGRheTogZGF5LAoJICAgICAgaG91cjogaG91ciwKCSAgICAgIG1pbnV0ZTogbWludXRlLAoJICAgICAgc2Vjb25kOiBzZWNvbmQsCgkgICAgICBtaWxsaXNlY29uZDogbWlsbGlzZWNvbmQKCSAgICB9LCBvcHRzKTsKCSAgfQoJICAvKioKCSAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgaW4gVVRDCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBbeWVhcl0gLSBUaGUgY2FsZW5kYXIgeWVhci4gSWYgb21pdHRlZCAoYXMgaW4sIGNhbGwgYHV0YygpYCB3aXRoIG5vIGFyZ3VtZW50cyksIHRoZSBjdXJyZW50IHRpbWUgd2lsbCBiZSB1c2VkCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBbbW9udGg9MV0gLSBUaGUgbW9udGgsIDEtaW5kZXhlZAoJICAgKiBAcGFyYW0ge251bWJlcn0gW2RheT0xXSAtIFRoZSBkYXkgb2YgdGhlIG1vbnRoCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBbaG91cj0wXSAtIFRoZSBob3VyIG9mIHRoZSBkYXksIGluIDI0LWhvdXIgdGltZQoJICAgKiBAcGFyYW0ge251bWJlcn0gW21pbnV0ZT0wXSAtIFRoZSBtaW51dGUgb2YgdGhlIGhvdXIsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OQoJICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZD0wXSAtIFRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5CgkgICAqIEBwYXJhbSB7bnVtYmVyfSBbbWlsbGlzZWNvbmQ9MF0gLSBUaGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDk5OQoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sb2NhbGVdIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm91dHB1dENhbGVuZGFyXSAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm51bWJlcmluZ1N5c3RlbV0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IG5vdwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDEtMDFUMDA6MDA6MDBaCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0wMVQwMDowMDowMFoKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDAwOjAwOjAwWgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6MDA6MDBaCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSwgNDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFoKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgeyBsb2NhbGU6ICJmciIgfSkgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjAwWiB3aXRoIGEgRnJlbmNoIGxvY2FsZQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCkgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MTBaCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSwgNDUsIDEwLCA3NjUsIHsgbG9jYWxlOiAiZnIiIH0pIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMC43NjVaIHdpdGggYSBGcmVuY2ggbG9jYWxlCgkgICAqIEByZXR1cm4ge0RhdGVUaW1lfQoJICAgKi8KCSAgOwoKCSAgRGF0ZVRpbWUudXRjID0gZnVuY3Rpb24gdXRjKCkgewoJICAgIHZhciBfbGFzdE9wdHMyID0gbGFzdE9wdHMoYXJndW1lbnRzKSwKCSAgICAgICAgb3B0cyA9IF9sYXN0T3B0czJbMF0sCgkgICAgICAgIGFyZ3MgPSBfbGFzdE9wdHMyWzFdLAoJICAgICAgICB5ZWFyID0gYXJnc1swXSwKCSAgICAgICAgbW9udGggPSBhcmdzWzFdLAoJICAgICAgICBkYXkgPSBhcmdzWzJdLAoJICAgICAgICBob3VyID0gYXJnc1szXSwKCSAgICAgICAgbWludXRlID0gYXJnc1s0XSwKCSAgICAgICAgc2Vjb25kID0gYXJnc1s1XSwKCSAgICAgICAgbWlsbGlzZWNvbmQgPSBhcmdzWzZdOwoKCSAgICBvcHRzLnpvbmUgPSBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2U7CgkgICAgcmV0dXJuIHF1aWNrRFQoewoJICAgICAgeWVhcjogeWVhciwKCSAgICAgIG1vbnRoOiBtb250aCwKCSAgICAgIGRheTogZGF5LAoJICAgICAgaG91cjogaG91ciwKCSAgICAgIG1pbnV0ZTogbWludXRlLAoJICAgICAgc2Vjb25kOiBzZWNvbmQsCgkgICAgICBtaWxsaXNlY29uZDogbWlsbGlzZWNvbmQKCSAgICB9LCBvcHRzKTsKCSAgfQoJICAvKioKCSAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIEphdmFTY3JpcHQgRGF0ZSBvYmplY3QuIFVzZXMgdGhlIGRlZmF1bHQgem9uZS4KCSAgICogQHBhcmFtIHtEYXRlfSBkYXRlIC0gYSBKYXZhU2NyaXB0IERhdGUgb2JqZWN0CgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRGF0ZVRpbWUKCSAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdGlvbnMuem9uZT0nbG9jYWwnXSAtIHRoZSB6b25lIHRvIHBsYWNlIHRoZSBEYXRlVGltZSBpbnRvCgkgICAqIEByZXR1cm4ge0RhdGVUaW1lfQoJICAgKi8KCSAgOwoKCSAgRGF0ZVRpbWUuZnJvbUpTRGF0ZSA9IGZ1bmN0aW9uIGZyb21KU0RhdGUoZGF0ZSwgb3B0aW9ucykgewoJICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsKCSAgICAgIG9wdGlvbnMgPSB7fTsKCSAgICB9CgoJICAgIHZhciB0cyA9IGlzRGF0ZShkYXRlKSA/IGRhdGUudmFsdWVPZigpIDogTmFOOwoKCSAgICBpZiAoTnVtYmVyLmlzTmFOKHRzKSkgewoJICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoImludmFsaWQgaW5wdXQiKTsKCSAgICB9CgoJICAgIHZhciB6b25lVG9Vc2UgPSBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpOwoKCSAgICBpZiAoIXpvbmVUb1VzZS5pc1ZhbGlkKSB7CgkgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZVRvVXNlKSk7CgkgICAgfQoKCSAgICByZXR1cm4gbmV3IERhdGVUaW1lKHsKCSAgICAgIHRzOiB0cywKCSAgICAgIHpvbmU6IHpvbmVUb1VzZSwKCSAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucykKCSAgICB9KTsKCSAgfQoJICAvKioKCSAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoIChtZWFuaW5nIHNpbmNlIDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuIFVzZXMgdGhlIGRlZmF1bHQgem9uZS4KCSAgICogQHBhcmFtIHtudW1iZXJ9IG1pbGxpc2Vjb25kcyAtIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAxOTcwIFVUQwoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lCgkgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50bwoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxlXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIERhdGVUaW1lLmZyb21NaWxsaXMgPSBmdW5jdGlvbiBmcm9tTWlsbGlzKG1pbGxpc2Vjb25kcywgb3B0aW9ucykgewoJICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsKCSAgICAgIG9wdGlvbnMgPSB7fTsKCSAgICB9CgoJICAgIGlmICghaXNOdW1iZXIobWlsbGlzZWNvbmRzKSkgewoJICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJmcm9tTWlsbGlzIHJlcXVpcmVzIGEgbnVtZXJpY2FsIGlucHV0LCBidXQgcmVjZWl2ZWQgYSAiICsgdHlwZW9mIG1pbGxpc2Vjb25kcyArICIgd2l0aCB2YWx1ZSAiICsgbWlsbGlzZWNvbmRzKTsKCSAgICB9IGVsc2UgaWYgKG1pbGxpc2Vjb25kcyA8IC1NQVhfREFURSB8fCBtaWxsaXNlY29uZHMgPiBNQVhfREFURSkgewoJICAgICAgLy8gdGhpcyBpc24ndCBwZXJmZWN0IGJlY2F1c2UgYmVjYXVzZSB3ZSBjYW4gc3RpbGwgZW5kIHVwIG91dCBvZiByYW5nZSBiZWNhdXNlIG9mIGFkZGl0aW9uYWwgc2hpZnRpbmcsIGJ1dCBpdCdzIGEgc3RhcnQKCSAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKCJUaW1lc3RhbXAgb3V0IG9mIHJhbmdlIik7CgkgICAgfSBlbHNlIHsKCSAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoewoJICAgICAgICB0czogbWlsbGlzZWNvbmRzLAoJICAgICAgICB6b25lOiBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpLAoJICAgICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpCgkgICAgICB9KTsKCSAgICB9CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKG1lYW5pbmcgc2luY2UgMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLgoJICAgKiBAcGFyYW0ge251bWJlcn0gc2Vjb25kcyAtIGEgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgMTk3MCBVVEMKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZQoJICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG8KCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5mcm9tU2Vjb25kcyA9IGZ1bmN0aW9uIGZyb21TZWNvbmRzKHNlY29uZHMsIG9wdGlvbnMpIHsKCSAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRpb25zID0ge307CgkgICAgfQoKCSAgICBpZiAoIWlzTnVtYmVyKHNlY29uZHMpKSB7CgkgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoImZyb21TZWNvbmRzIHJlcXVpcmVzIGEgbnVtZXJpY2FsIGlucHV0Iik7CgkgICAgfSBlbHNlIHsKCSAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoewoJICAgICAgICB0czogc2Vjb25kcyAqIDEwMDAsCgkgICAgICAgIHpvbmU6IG5vcm1hbGl6ZVpvbmUob3B0aW9ucy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksCgkgICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucykKCSAgICAgIH0pOwoJICAgIH0KCSAgfQoJICAvKioKCSAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGgga2V5cyBsaWtlICd5ZWFyJyBhbmQgJ2hvdXInIHdpdGggcmVhc29uYWJsZSBkZWZhdWx0cy4KCSAgICogQHBhcmFtIHtPYmplY3R9IG9iaiAtIHRoZSBvYmplY3QgdG8gY3JlYXRlIHRoZSBEYXRlVGltZSBmcm9tCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoueWVhciAtIGEgeWVhciwgc3VjaCBhcyAxOTg3CgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubW9udGggLSBhIG1vbnRoLCAxLTEyCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouZGF5IC0gYSBkYXkgb2YgdGhlIG1vbnRoLCAxLTMxLCBkZXBlbmRpbmcgb24gdGhlIG1vbnRoCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoub3JkaW5hbCAtIGRheSBvZiB0aGUgeWVhciwgMS0zNjUgb3IgMzY2CgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla1llYXIgLSBhbiBJU08gd2VlayB5ZWFyCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla051bWJlciAtIGFuIElTTyB3ZWVrIG51bWJlciwgYmV0d2VlbiAxIGFuZCA1MiBvciA1MywgZGVwZW5kaW5nIG9uIHRoZSB5ZWFyCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla2RheSAtIGFuIElTTyB3ZWVrZGF5LCAxLTcsIHdoZXJlIDEgaXMgTW9uZGF5IGFuZCA3IGlzIFN1bmRheQoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmhvdXIgLSBob3VyIG9mIHRoZSBkYXksIDAtMjMKCSAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taW51dGUgLSBtaW51dGUgb2YgdGhlIGhvdXIsIDAtNTkKCSAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5zZWNvbmQgLSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgMC01OQoJICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbGxpc2Vjb25kIC0gbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgMC05OTkKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBjcmVhdGluZyB0aGlzIERhdGVUaW1lCgkgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBpbnRlcnByZXQgdGhlIG51bWJlcnMgaW4gdGhlIGNvbnRleHQgb2YgYSBwYXJ0aWN1bGFyIHpvbmUuIENhbiB0YWtlIGFueSB2YWx1ZSB0YWtlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gc2V0Wm9uZSgpCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyLCBtb250aDogNSwgZGF5OiAyNX0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDUtMjUnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB5ZWFyOiAxOTgyIH0pLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDEtMDEnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0pIC8vfj4gdG9kYXkgYXQgMTA6MjY6MDYKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAndXRjJyB9KSwKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAnbG9jYWwnIH0pCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0sIHsgem9uZTogJ0FtZXJpY2EvTmV3X1lvcmsnIH0pCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyB3ZWVrWWVhcjogMjAxNiwgd2Vla051bWJlcjogMiwgd2Vla2RheTogMyB9KS50b0lTT0RhdGUoKSAvLz0+ICcyMDE2LTAxLTEzJwoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIERhdGVUaW1lLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iaiwgb3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIG9iaiA9IG9iaiB8fCB7fTsKCSAgICB2YXIgem9uZVRvVXNlID0gbm9ybWFsaXplWm9uZShvcHRzLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTsKCgkgICAgaWYgKCF6b25lVG9Vc2UuaXNWYWxpZCkgewoJICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQodW5zdXBwb3J0ZWRab25lKHpvbmVUb1VzZSkpOwoJICAgIH0KCgkgICAgdmFyIHRzTm93ID0gU2V0dGluZ3Mubm93KCksCgkgICAgICAgIG9mZnNldFByb3ZpcyA9IHpvbmVUb1VzZS5vZmZzZXQodHNOb3cpLAoJICAgICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplT2JqZWN0KG9iaiwgbm9ybWFsaXplVW5pdCksCgkgICAgICAgIGNvbnRhaW5zT3JkaW5hbCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpLAoJICAgICAgICBjb250YWluc0dyZWdvclllYXIgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC55ZWFyKSwKCSAgICAgICAgY29udGFpbnNHcmVnb3JNRCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm1vbnRoKSB8fCAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5kYXkpLAoJICAgICAgICBjb250YWluc0dyZWdvciA9IGNvbnRhaW5zR3JlZ29yWWVhciB8fCBjb250YWluc0dyZWdvck1ELAoJICAgICAgICBkZWZpbml0ZVdlZWtEZWYgPSBub3JtYWxpemVkLndlZWtZZWFyIHx8IG5vcm1hbGl6ZWQud2Vla051bWJlciwKCSAgICAgICAgbG9jID0gTG9jYWxlLmZyb21PYmplY3Qob3B0cyk7IC8vIGNhc2VzOgoJICAgIC8vIGp1c3QgYSB3ZWVrZGF5IC0+IHRoaXMgd2VlaydzIGluc3RhbmNlIG9mIHRoYXQgd2Vla2RheSwgbm8gd29ycmllcwoJICAgIC8vIChncmVnb3JpYW4gZGF0YSBvciBvcmRpbmFsKSArICh3ZWVrWWVhciBvciB3ZWVrTnVtYmVyKSAtPiBlcnJvcgoJICAgIC8vIChncmVnb3JpYW4gbW9udGggb3IgZGF5KSArIG9yZGluYWwgLT4gZXJyb3IKCSAgICAvLyBvdGhlcndpc2UganVzdCB1c2Ugd2Vla3Mgb3Igb3JkaW5hbHMgb3IgZ3JlZ29yaWFuLCBkZXBlbmRpbmcgb24gd2hhdCdzIHNwZWNpZmllZAoKCSAgICBpZiAoKGNvbnRhaW5zR3JlZ29yIHx8IGNvbnRhaW5zT3JkaW5hbCkgJiYgZGVmaW5pdGVXZWVrRGVmKSB7CgkgICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoIkNhbid0IG1peCB3ZWVrWWVhci93ZWVrTnVtYmVyIHVuaXRzIHdpdGggeWVhci9tb250aC9kYXkgb3Igb3JkaW5hbHMiKTsKCSAgICB9CgoJICAgIGlmIChjb250YWluc0dyZWdvck1EICYmIGNvbnRhaW5zT3JkaW5hbCkgewoJICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKCJDYW4ndCBtaXggb3JkaW5hbCBkYXRlcyB3aXRoIG1vbnRoL2RheSIpOwoJICAgIH0KCgkgICAgdmFyIHVzZVdlZWtEYXRhID0gZGVmaW5pdGVXZWVrRGVmIHx8IG5vcm1hbGl6ZWQud2Vla2RheSAmJiAhY29udGFpbnNHcmVnb3I7IC8vIGNvbmZpZ3VyZSBvdXJzZWx2ZXMgdG8gZGVhbCB3aXRoIGdyZWdvcmlhbiBkYXRlcyBvciB3ZWVrIHN0dWZmCgoJICAgIHZhciB1bml0cywKCSAgICAgICAgZGVmYXVsdFZhbHVlcywKCSAgICAgICAgb2JqTm93ID0gdHNUb09iaih0c05vdywgb2Zmc2V0UHJvdmlzKTsKCgkgICAgaWYgKHVzZVdlZWtEYXRhKSB7CgkgICAgICB1bml0cyA9IG9yZGVyZWRXZWVrVW5pdHM7CgkgICAgICBkZWZhdWx0VmFsdWVzID0gZGVmYXVsdFdlZWtVbml0VmFsdWVzOwoJICAgICAgb2JqTm93ID0gZ3JlZ29yaWFuVG9XZWVrKG9iak5vdyk7CgkgICAgfSBlbHNlIGlmIChjb250YWluc09yZGluYWwpIHsKCSAgICAgIHVuaXRzID0gb3JkZXJlZE9yZGluYWxVbml0czsKCSAgICAgIGRlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0T3JkaW5hbFVuaXRWYWx1ZXM7CgkgICAgICBvYmpOb3cgPSBncmVnb3JpYW5Ub09yZGluYWwob2JqTm93KTsKCSAgICB9IGVsc2UgewoJICAgICAgdW5pdHMgPSBvcmRlcmVkVW5pdHM7CgkgICAgICBkZWZhdWx0VmFsdWVzID0gZGVmYXVsdFVuaXRWYWx1ZXM7CgkgICAgfSAvLyBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIG1pc3Npbmcgc3R1ZmYKCgoJICAgIHZhciBmb3VuZEZpcnN0ID0gZmFsc2U7CgoJICAgIGZvciAodmFyIF9pdGVyYXRvcjMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHVuaXRzKSwgX3N0ZXAzOyAhKF9zdGVwMyA9IF9pdGVyYXRvcjMoKSkuZG9uZTspIHsKCSAgICAgIHZhciB1ID0gX3N0ZXAzLnZhbHVlOwoJICAgICAgdmFyIHYgPSBub3JtYWxpemVkW3VdOwoKCSAgICAgIGlmICghaXNVbmRlZmluZWQodikpIHsKCSAgICAgICAgZm91bmRGaXJzdCA9IHRydWU7CgkgICAgICB9IGVsc2UgaWYgKGZvdW5kRmlyc3QpIHsKCSAgICAgICAgbm9ybWFsaXplZFt1XSA9IGRlZmF1bHRWYWx1ZXNbdV07CgkgICAgICB9IGVsc2UgewoJICAgICAgICBub3JtYWxpemVkW3VdID0gb2JqTm93W3VdOwoJICAgICAgfQoJICAgIH0gLy8gbWFrZSBzdXJlIHRoZSB2YWx1ZXMgd2UgaGF2ZSBhcmUgaW4gcmFuZ2UKCgoJICAgIHZhciBoaWdoZXJPcmRlckludmFsaWQgPSB1c2VXZWVrRGF0YSA/IGhhc0ludmFsaWRXZWVrRGF0YShub3JtYWxpemVkKSA6IGNvbnRhaW5zT3JkaW5hbCA/IGhhc0ludmFsaWRPcmRpbmFsRGF0YShub3JtYWxpemVkKSA6IGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhKG5vcm1hbGl6ZWQpLAoJICAgICAgICBpbnZhbGlkID0gaGlnaGVyT3JkZXJJbnZhbGlkIHx8IGhhc0ludmFsaWRUaW1lRGF0YShub3JtYWxpemVkKTsKCgkgICAgaWYgKGludmFsaWQpIHsKCSAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpOwoJICAgIH0gLy8gY29tcHV0ZSB0aGUgYWN0dWFsIHRpbWUKCgoJICAgIHZhciBncmVnb3JpYW4gPSB1c2VXZWVrRGF0YSA/IHdlZWtUb0dyZWdvcmlhbihub3JtYWxpemVkKSA6IGNvbnRhaW5zT3JkaW5hbCA/IG9yZGluYWxUb0dyZWdvcmlhbihub3JtYWxpemVkKSA6IG5vcm1hbGl6ZWQsCgkgICAgICAgIF9vYmpUb1RTMiA9IG9ialRvVFMoZ3JlZ29yaWFuLCBvZmZzZXRQcm92aXMsIHpvbmVUb1VzZSksCgkgICAgICAgIHRzRmluYWwgPSBfb2JqVG9UUzJbMF0sCgkgICAgICAgIG9mZnNldEZpbmFsID0gX29ialRvVFMyWzFdLAoJICAgICAgICBpbnN0ID0gbmV3IERhdGVUaW1lKHsKCSAgICAgIHRzOiB0c0ZpbmFsLAoJICAgICAgem9uZTogem9uZVRvVXNlLAoJICAgICAgbzogb2Zmc2V0RmluYWwsCgkgICAgICBsb2M6IGxvYwoJICAgIH0pOyAvLyBncmVnb3JpYW4gZGF0YSArIHdlZWtkYXkgc2VydmVzIG9ubHkgdG8gdmFsaWRhdGUKCgoJICAgIGlmIChub3JtYWxpemVkLndlZWtkYXkgJiYgY29udGFpbnNHcmVnb3IgJiYgb2JqLndlZWtkYXkgIT09IGluc3Qud2Vla2RheSkgewoJICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoIm1pc21hdGNoZWQgd2Vla2RheSIsICJ5b3UgY2FuJ3Qgc3BlY2lmeSBib3RoIGEgd2Vla2RheSBvZiAiICsgbm9ybWFsaXplZC53ZWVrZGF5ICsgIiBhbmQgYSBkYXRlIG9mICIgKyBpbnN0LnRvSVNPKCkpOwoJICAgIH0KCgkgICAgcmV0dXJuIGluc3Q7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYW4gSVNPIDg2MDEgc3RyaW5nCgkgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIElTTyBzdHJpbmcKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb24KCSAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIHVzZSB0aGlzIHpvbmUgaWYgbm8gb2Zmc2V0IGlzIHNwZWNpZmllZCBpbiB0aGUgaW5wdXQgc3RyaW5nIGl0c2VsZi4gV2lsbCBhbHNvIGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhpcyB6b25lCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgZml4ZWQtb2Zmc2V0IHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaXRzZWxmLCBpZiBpdCBzcGVjaWZpZXMgb25lCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm91dHB1dENhbGVuZGFyXSAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbV0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMycpCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzKzA2OjAwJykKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMrMDY6MDAnLCB7c2V0Wm9uZTogdHJ1ZX0pCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzJywge3pvbmU6ICd1dGMnfSkKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi1XMDUtNCcpCgkgICAqIEByZXR1cm4ge0RhdGVUaW1lfQoJICAgKi8KCSAgOwoKCSAgRGF0ZVRpbWUuZnJvbUlTTyA9IGZ1bmN0aW9uIGZyb21JU08odGV4dCwgb3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHZhciBfcGFyc2VJU09EYXRlID0gcGFyc2VJU09EYXRlKHRleHQpLAoJICAgICAgICB2YWxzID0gX3BhcnNlSVNPRGF0ZVswXSwKCSAgICAgICAgcGFyc2VkWm9uZSA9IF9wYXJzZUlTT0RhdGVbMV07CgoJICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsICJJU08gODYwMSIsIHRleHQpOwoJICB9CgkgIC8qKgoJICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIFJGQyAyODIyIHN0cmluZwoJICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBSRkMgMjgyMiBzdHJpbmcKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb24KCSAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhpcyB6b25lLiBTaW5jZSB0aGUgb2Zmc2V0IGlzIGFsd2F5cyBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIHRoaXMgaGFzIG5vIGVmZmVjdCBvbiB0aGUgaW50ZXJwcmV0YXRpb24gb2Ygc3RyaW5nLCBtZXJlbHkgdGhlIHpvbmUgdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpcyBleHByZXNzZWQgaW4uCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgZml4ZWQtb2Zmc2V0IHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaXRzZWxmLCBpZiBpdCBzcGVjaWZpZXMgb25lCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCcyNSBOb3YgMjAxNiAxMzoyMzoxMiBHTVQnKQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tUkZDMjgyMignRnJpLCAyNSBOb3YgMjAxNiAxMzoyMzoxMiArMDYwMCcpCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCcyNSBOb3YgMjAxNiAxMzoyMyBaJykKCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5mcm9tUkZDMjgyMiA9IGZ1bmN0aW9uIGZyb21SRkMyODIyKHRleHQsIG9wdHMpIHsKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICB2YXIgX3BhcnNlUkZDMjgyMkRhdGUgPSBwYXJzZVJGQzI4MjJEYXRlKHRleHQpLAoJICAgICAgICB2YWxzID0gX3BhcnNlUkZDMjgyMkRhdGVbMF0sCgkgICAgICAgIHBhcnNlZFpvbmUgPSBfcGFyc2VSRkMyODIyRGF0ZVsxXTsKCgkgICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgIlJGQyAyODIyIiwgdGV4dCk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYW4gSFRUUCBoZWFkZXIgZGF0ZQoJICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzMuaHRtbCNzZWMzLjMuMQoJICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBIVFRQIGhlYWRlciBkYXRlCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uCgkgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBjb252ZXJ0IHRoZSB0aW1lIHRvIHRoaXMgem9uZS4gU2luY2UgSFRUUCBkYXRlcyBhcmUgYWx3YXlzIGluIFVUQywgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzdHJpbmcsIG1lcmVseSB0aGUgem9uZSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGlzIGV4cHJlc3NlZCBpbi4KCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggdGhlIGZpeGVkLW9mZnNldCB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nLiBGb3IgSFRUUCBkYXRlcywgdGhpcyBpcyBhbHdheXMgVVRDLCBzbyB0aGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgdGhlIGB6b25lYCBvcHRpb24gdG8gJ3V0YycsIGJ1dCB0aGlzIG9wdGlvbiBpcyBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCBzaW1pbGFyIG1ldGhvZHMuCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW4sIDA2IE5vdiAxOTk0IDA4OjQ5OjM3IEdNVCcpCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW5kYXksIDA2LU5vdi05NCAwODo0OTozNyBHTVQnKQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSFRUUCgnU3VuIE5vdiAgNiAwODo0OTozNyAxOTk0JykKCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5mcm9tSFRUUCA9IGZ1bmN0aW9uIGZyb21IVFRQKHRleHQsIG9wdHMpIHsKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICB2YXIgX3BhcnNlSFRUUERhdGUgPSBwYXJzZUhUVFBEYXRlKHRleHQpLAoJICAgICAgICB2YWxzID0gX3BhcnNlSFRUUERhdGVbMF0sCgkgICAgICAgIHBhcnNlZFpvbmUgPSBfcGFyc2VIVFRQRGF0ZVsxXTsKCgkgICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgIkhUVFAiLCBvcHRzKTsKCSAgfQoJICAvKioKCSAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBpbnB1dCBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmcuCgkgICAqIERlZmF1bHRzIHRvIGVuLVVTIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN5c3RlbSdzIGxvY2FsZS4gRm9yIGEgdGFibGUgb2YgdG9rZW5zIGFuZCB0aGVpciBpbnRlcnByZXRhdGlvbnMsIHNlZSBbaGVyZV0oaHR0cHM6Ly9tb21lbnQuZ2l0aHViLmlvL2x1eG9uLyMvcGFyc2luZz9pZD10YWJsZS1vZi10b2tlbnMpLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBzdHJpbmcgdG8gcGFyc2UKCSAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgdGhlIHN0cmluZyBpcyBleHBlY3RlZCB0byBiZSBpbiAoc2VlIHRoZSBsaW5rIGJlbG93IGZvciB0aGUgZm9ybWF0cykKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb24KCSAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIHVzZSB0aGlzIHpvbmUgaWYgbm8gb2Zmc2V0IGlzIHNwZWNpZmllZCBpbiB0aGUgaW5wdXQgc3RyaW5nIGl0c2VsZi4gV2lsbCBhbHNvIGNvbnZlcnQgdGhlIERhdGVUaW1lIHRvIHRoaXMgem9uZQoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCBhIHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaXRzZWxmLCBpZiBpdCBzcGVjaWZpZXMgb25lCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSBhIGxvY2FsZSBzdHJpbmcgdG8gdXNlIHdoZW4gcGFyc2luZy4gV2lsbCBhbHNvIHNldCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyBsb2NhbGUKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlIHdoZW4gcGFyc2luZy4gV2lsbCBhbHNvIHNldCB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIHRvIHRoaXMgbnVtYmVyaW5nIHN5c3RlbQoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5mcm9tRm9ybWF0ID0gZnVuY3Rpb24gZnJvbUZvcm1hdCh0ZXh0LCBmbXQsIG9wdHMpIHsKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICBpZiAoaXNVbmRlZmluZWQodGV4dCkgfHwgaXNVbmRlZmluZWQoZm10KSkgewoJICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJmcm9tRm9ybWF0IHJlcXVpcmVzIGFuIGlucHV0IHN0cmluZyBhbmQgYSBmb3JtYXQiKTsKCSAgICB9CgoJICAgIHZhciBfb3B0cyA9IG9wdHMsCgkgICAgICAgIF9vcHRzJGxvY2FsZSA9IF9vcHRzLmxvY2FsZSwKCSAgICAgICAgbG9jYWxlID0gX29wdHMkbG9jYWxlID09PSB2b2lkIDAgPyBudWxsIDogX29wdHMkbG9jYWxlLAoJICAgICAgICBfb3B0cyRudW1iZXJpbmdTeXN0ZW0gPSBfb3B0cy5udW1iZXJpbmdTeXN0ZW0sCgkgICAgICAgIG51bWJlcmluZ1N5c3RlbSA9IF9vcHRzJG51bWJlcmluZ1N5c3RlbSA9PT0gdm9pZCAwID8gbnVsbCA6IF9vcHRzJG51bWJlcmluZ1N5c3RlbSwKCSAgICAgICAgbG9jYWxlVG9Vc2UgPSBMb2NhbGUuZnJvbU9wdHMoewoJICAgICAgbG9jYWxlOiBsb2NhbGUsCgkgICAgICBudW1iZXJpbmdTeXN0ZW06IG51bWJlcmluZ1N5c3RlbSwKCSAgICAgIGRlZmF1bHRUb0VOOiB0cnVlCgkgICAgfSksCgkgICAgICAgIF9wYXJzZUZyb21Ub2tlbnMgPSBwYXJzZUZyb21Ub2tlbnMobG9jYWxlVG9Vc2UsIHRleHQsIGZtdCksCgkgICAgICAgIHZhbHMgPSBfcGFyc2VGcm9tVG9rZW5zWzBdLAoJICAgICAgICBwYXJzZWRab25lID0gX3BhcnNlRnJvbVRva2Vuc1sxXSwKCSAgICAgICAgaW52YWxpZCA9IF9wYXJzZUZyb21Ub2tlbnNbMl07CgoJICAgIGlmIChpbnZhbGlkKSB7CgkgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChpbnZhbGlkKTsKCSAgICB9IGVsc2UgewoJICAgICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgImZvcm1hdCAiICsgZm10LCB0ZXh0KTsKCSAgICB9CgkgIH0KCSAgLyoqCgkgICAqIEBkZXByZWNhdGVkIHVzZSBmcm9tRm9ybWF0IGluc3RlYWQKCSAgICovCgkgIDsKCgkgIERhdGVUaW1lLmZyb21TdHJpbmcgPSBmdW5jdGlvbiBmcm9tU3RyaW5nKHRleHQsIGZtdCwgb3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHJldHVybiBEYXRlVGltZS5mcm9tRm9ybWF0KHRleHQsIGZtdCwgb3B0cyk7CgkgIH0KCSAgLyoqCgkgICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBTUUwgZGF0ZSwgdGltZSwgb3IgZGF0ZXRpbWUKCSAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZQoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvbgoJICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyB6b25lCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmUKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIGEgbG9jYWxlIHN0cmluZyB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSBEYXRlVGltZSB0byB0aGlzIGxvY2FsZQoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgdG8gdGhpcyBudW1iZXJpbmcgc3lzdGVtCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1JykKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNCcpCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyJykKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDIrMDY6MDAnKQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiBBbWVyaWNhL0xvc19BbmdlbGVzJykKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDIgQW1lcmljYS9Mb3NfQW5nZWxlcycsIHsgc2V0Wm9uZTogdHJ1ZSB9KQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MicsIHsgem9uZTogJ0FtZXJpY2EvTG9zX0FuZ2VsZXMnIH0pCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzA5OjEyOjM0LjM0MicpCgkgICAqIEByZXR1cm4ge0RhdGVUaW1lfQoJICAgKi8KCSAgOwoKCSAgRGF0ZVRpbWUuZnJvbVNRTCA9IGZ1bmN0aW9uIGZyb21TUUwodGV4dCwgb3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHZhciBfcGFyc2VTUUwgPSBwYXJzZVNRTCh0ZXh0KSwKCSAgICAgICAgdmFscyA9IF9wYXJzZVNRTFswXSwKCSAgICAgICAgcGFyc2VkWm9uZSA9IF9wYXJzZVNRTFsxXTsKCgkgICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgIlNRTCIsIHRleHQpOwoJICB9CgkgIC8qKgoJICAgKiBDcmVhdGUgYW4gaW52YWxpZCBEYXRlVGltZS4KCSAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbiAtIHNpbXBsZSBzdHJpbmcgb2Ygd2h5IHRoaXMgRGF0ZVRpbWUgaXMgaW52YWxpZC4gU2hvdWxkIG5vdCBjb250YWluIHBhcmFtZXRlcnMgb3IgYW55dGhpbmcgZWxzZSBkYXRhLWRlcGVuZGVudAoJICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4cGxhbmF0aW9uPW51bGxdIC0gbG9uZ2VyIGV4cGxhbmF0aW9uLCBtYXkgaW5jbHVkZSBwYXJhbWV0ZXJzIGFuZCBvdGhlciB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uCgkgICAqIEByZXR1cm4ge0RhdGVUaW1lfQoJICAgKi8KCSAgOwoKCSAgRGF0ZVRpbWUuaW52YWxpZCA9IGZ1bmN0aW9uIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbikgewoJICAgIGlmIChleHBsYW5hdGlvbiA9PT0gdm9pZCAwKSB7CgkgICAgICBleHBsYW5hdGlvbiA9IG51bGw7CgkgICAgfQoKCSAgICBpZiAoIXJlYXNvbikgewoJICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJuZWVkIHRvIHNwZWNpZnkgYSByZWFzb24gdGhlIERhdGVUaW1lIGlzIGludmFsaWQiKTsKCSAgICB9CgoJICAgIHZhciBpbnZhbGlkID0gcmVhc29uIGluc3RhbmNlb2YgSW52YWxpZCA/IHJlYXNvbiA6IG5ldyBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pOwoKCSAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHsKCSAgICAgIHRocm93IG5ldyBJbnZhbGlkRGF0ZVRpbWVFcnJvcihpbnZhbGlkKTsKCSAgICB9IGVsc2UgewoJICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7CgkgICAgICAgIGludmFsaWQ6IGludmFsaWQKCSAgICAgIH0pOwoJICAgIH0KCSAgfQoJICAvKioKCSAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgRGF0ZVRpbWUuIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXMKCSAgICogQHBhcmFtIHtvYmplY3R9IG8KCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIERhdGVUaW1lLmlzRGF0ZVRpbWUgPSBmdW5jdGlvbiBpc0RhdGVUaW1lKG8pIHsKCSAgICByZXR1cm4gbyAmJiBvLmlzTHV4b25EYXRlVGltZSB8fCBmYWxzZTsKCSAgfSAvLyBJTkZPCgoJICAvKioKCSAgICogR2V0IHRoZSB2YWx1ZSBvZiB1bml0LgoJICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIGEgdW5pdCBzdWNoIGFzICdtaW51dGUnIG9yICdkYXknCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDcsIDQpLmdldCgnbW9udGgnKTsgLy89PiA3CgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDcsIDQpLmdldCgnZGF5Jyk7IC8vPT4gNAoJICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAqLwoJICA7CgoJICB2YXIgX3Byb3RvID0gRGF0ZVRpbWUucHJvdG90eXBlOwoKCSAgX3Byb3RvLmdldCA9IGZ1bmN0aW9uIGdldCh1bml0KSB7CgkgICAgcmV0dXJuIHRoaXNbdW5pdF07CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgd2hldGhlciB0aGUgRGF0ZVRpbWUgaXMgdmFsaWQuIEludmFsaWQgRGF0ZVRpbWVzIG9jY3VyIHdoZW46CgkgICAqICogVGhlIERhdGVUaW1lIHdhcyBjcmVhdGVkIGZyb20gaW52YWxpZCBjYWxlbmRhciBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgMTN0aCBtb250aCBvciBGZWJydWFyeSAzMAoJICAgKiAqIFRoZSBEYXRlVGltZSB3YXMgY3JlYXRlZCBieSBhbiBvcGVyYXRpb24gb24gYW5vdGhlciBpbnZhbGlkIGRhdGUKCSAgICogQHR5cGUge2Jvb2xlYW59CgkgICAqLwoJICA7CgoJICAvKioKCSAgICogUmV0dXJucyB0aGUgcmVzb2x2ZWQgSW50bCBvcHRpb25zIGZvciB0aGlzIERhdGVUaW1lLgoJICAgKiBUaGlzIGlzIHVzZWZ1bCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBiZWhhdmlvciBvZiBmb3JtYXR0aW5nIG1ldGhvZHMKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSB0aGUgc2FtZSBvcHRpb25zIGFzIHRvTG9jYWxlU3RyaW5nCgkgICAqIEByZXR1cm4ge09iamVjdH0KCSAgICovCgkgIF9wcm90by5yZXNvbHZlZExvY2FsZU9wdGlvbnMgPSBmdW5jdGlvbiByZXNvbHZlZExvY2FsZU9wdGlvbnMob3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHZhciBfRm9ybWF0dGVyJGNyZWF0ZSRyZXMgPSBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLmNsb25lKG9wdHMpLCBvcHRzKS5yZXNvbHZlZE9wdGlvbnModGhpcyksCgkgICAgICAgIGxvY2FsZSA9IF9Gb3JtYXR0ZXIkY3JlYXRlJHJlcy5sb2NhbGUsCgkgICAgICAgIG51bWJlcmluZ1N5c3RlbSA9IF9Gb3JtYXR0ZXIkY3JlYXRlJHJlcy5udW1iZXJpbmdTeXN0ZW0sCgkgICAgICAgIGNhbGVuZGFyID0gX0Zvcm1hdHRlciRjcmVhdGUkcmVzLmNhbGVuZGFyOwoKCSAgICByZXR1cm4gewoJICAgICAgbG9jYWxlOiBsb2NhbGUsCgkgICAgICBudW1iZXJpbmdTeXN0ZW06IG51bWJlcmluZ1N5c3RlbSwKCSAgICAgIG91dHB1dENhbGVuZGFyOiBjYWxlbmRhcgoJICAgIH07CgkgIH0gLy8gVFJBTlNGT1JNCgoJICAvKioKCSAgICogIlNldCIgdGhlIERhdGVUaW1lJ3Mgem9uZSB0byBVVEMuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS4KCSAgICoKCSAgICogRXF1aXZhbGVudCB0byB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0oJ3V0YycpCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0PTBdIC0gb3B0aW9uYWxseSwgYW4gb2Zmc2V0IGZyb20gVVRDIGluIG1pbnV0ZXMKCSAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzPXt9XSAtIG9wdGlvbnMgdG8gcGFzcyB0byBgc2V0Wm9uZSgpYAoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIF9wcm90by50b1VUQyA9IGZ1bmN0aW9uIHRvVVRDKG9mZnNldCwgb3B0cykgewoJICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkgewoJICAgICAgb2Zmc2V0ID0gMDsKCSAgICB9CgoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHJldHVybiB0aGlzLnNldFpvbmUoRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKG9mZnNldCksIG9wdHMpOwoJICB9CgkgIC8qKgoJICAgKiAiU2V0IiB0aGUgRGF0ZVRpbWUncyB6b25lIHRvIHRoZSBob3N0J3MgbG9jYWwgem9uZS4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLgoJICAgKgoJICAgKiBFcXVpdmFsZW50IHRvIGBzZXRab25lKCdsb2NhbCcpYAoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0xvY2FsID0gZnVuY3Rpb24gdG9Mb2NhbCgpIHsKCSAgICByZXR1cm4gdGhpcy5zZXRab25lKFNldHRpbmdzLmRlZmF1bHRab25lKTsKCSAgfQoJICAvKioKCSAgICogIlNldCIgdGhlIERhdGVUaW1lJ3Mgem9uZSB0byBzcGVjaWZpZWQgem9uZS4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLgoJICAgKgoJICAgKiBCeSBkZWZhdWx0LCB0aGUgc2V0dGVyIGtlZXBzIHRoZSB1bmRlcmx5aW5nIHRpbWUgdGhlIHNhbWUgKGFzIGluLCB0aGUgc2FtZSB0aW1lc3RhbXApLCBidXQgdGhlIG5ldyBpbnN0YW5jZSB3aWxsIHJlcG9ydCBkaWZmZXJlbnQgbG9jYWwgdGltZXMgYW5kIGNvbnNpZGVyIERTVHMgd2hlbiBtYWtpbmcgY29tcHV0YXRpb25zLCBhcyB3aXRoIHtAbGluayBEYXRlVGltZSNwbHVzfS4gWW91IG1heSB3aXNoIHRvIHVzZSB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbH0gYW5kIHtAbGluayBEYXRlVGltZSN0b1VUQ30gd2hpY2ggcHJvdmlkZSBzaW1wbGUgY29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yIGNvbW1vbmx5IHVzZWQgem9uZXMuCgkgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFt6b25lPSdsb2NhbCddIC0gYSB6b25lIGlkZW50aWZpZXIuIEFzIGEgc3RyaW5nLCB0aGF0IGNhbiBiZSBhbnkgSUFOQSB6b25lIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBlbnZpcm9ubWVudCwgb3IgYSBmaXhlZC1vZmZzZXQgbmFtZSBvZiB0aGUgZm9ybSAnVVRDKzMnLCBvciB0aGUgc3RyaW5ncyAnbG9jYWwnIG9yICd1dGMnLiBZb3UgbWF5IGFsc28gc3VwcGx5IGFuIGluc3RhbmNlIG9mIGEge0BsaW5rIERhdGVUaW1lI1pvbmV9IGNsYXNzLgoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5rZWVwTG9jYWxUaW1lPWZhbHNlXSAtIElmIHRydWUsIGFkanVzdCB0aGUgdW5kZXJseWluZyB0aW1lIHNvIHRoYXQgdGhlIGxvY2FsIHRpbWUgc3RheXMgdGhlIHNhbWUsIGJ1dCBpbiB0aGUgdGFyZ2V0IHpvbmUuIFlvdSBzaG91bGQgcmFyZWx5IG5lZWQgdGhpcy4KCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBfcHJvdG8uc2V0Wm9uZSA9IGZ1bmN0aW9uIHNldFpvbmUoem9uZSwgX3RlbXApIHsKCSAgICB2YXIgX3JlZjMgPSBfdGVtcCA9PT0gdm9pZCAwID8ge30gOiBfdGVtcCwKCSAgICAgICAgX3JlZjMka2VlcExvY2FsVGltZSA9IF9yZWYzLmtlZXBMb2NhbFRpbWUsCgkgICAgICAgIGtlZXBMb2NhbFRpbWUgPSBfcmVmMyRrZWVwTG9jYWxUaW1lID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYzJGtlZXBMb2NhbFRpbWUsCgkgICAgICAgIF9yZWYzJGtlZXBDYWxlbmRhclRpbSA9IF9yZWYzLmtlZXBDYWxlbmRhclRpbWUsCgkgICAgICAgIGtlZXBDYWxlbmRhclRpbWUgPSBfcmVmMyRrZWVwQ2FsZW5kYXJUaW0gPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjMka2VlcENhbGVuZGFyVGltOwoKCSAgICB6b25lID0gbm9ybWFsaXplWm9uZSh6b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7CgoJICAgIGlmICh6b25lLmVxdWFscyh0aGlzLnpvbmUpKSB7CgkgICAgICByZXR1cm4gdGhpczsKCSAgICB9IGVsc2UgaWYgKCF6b25lLmlzVmFsaWQpIHsKCSAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lKSk7CgkgICAgfSBlbHNlIHsKCSAgICAgIHZhciBuZXdUUyA9IHRoaXMudHM7CgoJICAgICAgaWYgKGtlZXBMb2NhbFRpbWUgfHwga2VlcENhbGVuZGFyVGltZSkgewoJICAgICAgICB2YXIgb2Zmc2V0R3Vlc3MgPSB6b25lLm9mZnNldCh0aGlzLnRzKTsKCSAgICAgICAgdmFyIGFzT2JqID0gdGhpcy50b09iamVjdCgpOwoKCSAgICAgICAgdmFyIF9vYmpUb1RTMyA9IG9ialRvVFMoYXNPYmosIG9mZnNldEd1ZXNzLCB6b25lKTsKCgkgICAgICAgIG5ld1RTID0gX29ialRvVFMzWzBdOwoJICAgICAgfQoKCSAgICAgIHJldHVybiBjbG9uZSh0aGlzLCB7CgkgICAgICAgIHRzOiBuZXdUUywKCSAgICAgICAgem9uZTogem9uZQoJICAgICAgfSk7CgkgICAgfQoJICB9CgkgIC8qKgoJICAgKiAiU2V0IiB0aGUgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG9yIG91dHB1dENhbGVuZGFyLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIC0gdGhlIHByb3BlcnRpZXMgdG8gc2V0CgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KQoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIF9wcm90by5yZWNvbmZpZ3VyZSA9IGZ1bmN0aW9uIHJlY29uZmlndXJlKF90ZW1wMikgewoJICAgIHZhciBfcmVmNCA9IF90ZW1wMiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDIsCgkgICAgICAgIGxvY2FsZSA9IF9yZWY0LmxvY2FsZSwKCSAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX3JlZjQubnVtYmVyaW5nU3lzdGVtLAoJICAgICAgICBvdXRwdXRDYWxlbmRhciA9IF9yZWY0Lm91dHB1dENhbGVuZGFyOwoKCSAgICB2YXIgbG9jID0gdGhpcy5sb2MuY2xvbmUoewoJICAgICAgbG9jYWxlOiBsb2NhbGUsCgkgICAgICBudW1iZXJpbmdTeXN0ZW06IG51bWJlcmluZ1N5c3RlbSwKCSAgICAgIG91dHB1dENhbGVuZGFyOiBvdXRwdXRDYWxlbmRhcgoJICAgIH0pOwoJICAgIHJldHVybiBjbG9uZSh0aGlzLCB7CgkgICAgICBsb2M6IGxvYwoJICAgIH0pOwoJICB9CgkgIC8qKgoJICAgKiAiU2V0IiB0aGUgbG9jYWxlLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuCgkgICAqIEp1c3QgYSBjb252ZW5pZW50IGFsaWFzIGZvciByZWNvbmZpZ3VyZSh7IGxvY2FsZSB9KQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkuc2V0TG9jYWxlKCdlbi1HQicpCgkgICAqIEByZXR1cm4ge0RhdGVUaW1lfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnNldExvY2FsZSA9IGZ1bmN0aW9uIHNldExvY2FsZShsb2NhbGUpIHsKCSAgICByZXR1cm4gdGhpcy5yZWNvbmZpZ3VyZSh7CgkgICAgICBsb2NhbGU6IGxvY2FsZQoJICAgIH0pOwoJICB9CgkgIC8qKgoJICAgKiAiU2V0IiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLgoJICAgKiBZb3UgY2FuIG9ubHkgc2V0IHVuaXRzIHdpdGggdGhpcyBtZXRob2Q7IGZvciAic2V0dGluZyIgbWV0YWRhdGEsIHNlZSB7QGxpbmsgRGF0ZVRpbWUjcmVjb25maWd1cmV9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0uCgkgICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgLSBhIG1hcHBpbmcgb2YgdW5pdHMgdG8gbnVtYmVycwoJICAgKiBAZXhhbXBsZSBkdC5zZXQoeyB5ZWFyOiAyMDE3IH0pCgkgICAqIEBleGFtcGxlIGR0LnNldCh7IGhvdXI6IDgsIG1pbnV0ZTogMzAgfSkKCSAgICogQGV4YW1wbGUgZHQuc2V0KHsgd2Vla2RheTogNSB9KQoJICAgKiBAZXhhbXBsZSBkdC5zZXQoeyB5ZWFyOiAyMDA1LCBvcmRpbmFsOiAyMzQgfSkKCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KHZhbHVlcykgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCSAgICB2YXIgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZU9iamVjdCh2YWx1ZXMsIG5vcm1hbGl6ZVVuaXQpLAoJICAgICAgICBzZXR0aW5nV2Vla1N0dWZmID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla1llYXIpIHx8ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtOdW1iZXIpIHx8ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtkYXkpLAoJICAgICAgICBjb250YWluc09yZGluYWwgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5vcmRpbmFsKSwKCSAgICAgICAgY29udGFpbnNHcmVnb3JZZWFyID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQueWVhciksCgkgICAgICAgIGNvbnRhaW5zR3JlZ29yTUQgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5tb250aCkgfHwgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSwKCSAgICAgICAgY29udGFpbnNHcmVnb3IgPSBjb250YWluc0dyZWdvclllYXIgfHwgY29udGFpbnNHcmVnb3JNRCwKCSAgICAgICAgZGVmaW5pdGVXZWVrRGVmID0gbm9ybWFsaXplZC53ZWVrWWVhciB8fCBub3JtYWxpemVkLndlZWtOdW1iZXI7CgoJICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHsKCSAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcigiQ2FuJ3QgbWl4IHdlZWtZZWFyL3dlZWtOdW1iZXIgdW5pdHMgd2l0aCB5ZWFyL21vbnRoL2RheSBvciBvcmRpbmFscyIpOwoJICAgIH0KCgkgICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7CgkgICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5Iik7CgkgICAgfQoKCSAgICB2YXIgbWl4ZWQ7CgoJICAgIGlmIChzZXR0aW5nV2Vla1N0dWZmKSB7CgkgICAgICBtaXhlZCA9IHdlZWtUb0dyZWdvcmlhbihfZXh0ZW5kcyh7fSwgZ3JlZ29yaWFuVG9XZWVrKHRoaXMuYyksIG5vcm1hbGl6ZWQpKTsKCSAgICB9IGVsc2UgaWYgKCFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpKSB7CgkgICAgICBtaXhlZCA9IG9yZGluYWxUb0dyZWdvcmlhbihfZXh0ZW5kcyh7fSwgZ3JlZ29yaWFuVG9PcmRpbmFsKHRoaXMuYyksIG5vcm1hbGl6ZWQpKTsKCSAgICB9IGVsc2UgewoJICAgICAgbWl4ZWQgPSBfZXh0ZW5kcyh7fSwgdGhpcy50b09iamVjdCgpLCBub3JtYWxpemVkKTsgLy8gaWYgd2UgZGlkbid0IHNldCB0aGUgZGF5IGJ1dCB3ZSBlbmRlZCB1cCBvbiBhbiBvdmVyZmxvdyBkYXRlLAoJICAgICAgLy8gdXNlIHRoZSBsYXN0IGRheSBvZiB0aGUgcmlnaHQgbW9udGgKCgkgICAgICBpZiAoaXNVbmRlZmluZWQobm9ybWFsaXplZC5kYXkpKSB7CgkgICAgICAgIG1peGVkLmRheSA9IE1hdGgubWluKGRheXNJbk1vbnRoKG1peGVkLnllYXIsIG1peGVkLm1vbnRoKSwgbWl4ZWQuZGF5KTsKCSAgICAgIH0KCSAgICB9CgoJICAgIHZhciBfb2JqVG9UUzQgPSBvYmpUb1RTKG1peGVkLCB0aGlzLm8sIHRoaXMuem9uZSksCgkgICAgICAgIHRzID0gX29ialRvVFM0WzBdLAoJICAgICAgICBvID0gX29ialRvVFM0WzFdOwoKCSAgICByZXR1cm4gY2xvbmUodGhpcywgewoJICAgICAgdHM6IHRzLAoJICAgICAgbzogbwoJICAgIH0pOwoJICB9CgkgIC8qKgoJICAgKiBBZGQgYSBwZXJpb2Qgb2YgdGltZSB0byB0aGlzIERhdGVUaW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBEYXRlVGltZQoJICAgKgoJICAgKiBBZGRpbmcgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG9yIG1pbGxpc2Vjb25kcyBpbmNyZWFzZXMgdGhlIHRpbWVzdGFtcCBieSB0aGUgcmlnaHQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4gQWRkaW5nIGRheXMsIG1vbnRocywgb3IgeWVhcnMgc2hpZnRzIHRoZSBjYWxlbmRhciwgYWNjb3VudGluZyBmb3IgRFNUcyBhbmQgbGVhcCB5ZWFycyBhbG9uZyB0aGUgd2F5LiBUaHVzLCBgZHQucGx1cyh7IGhvdXJzOiAyNCB9KWAgbWF5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0aW1lIHRoYW4gYGR0LnBsdXMoeyBkYXlzOiAxIH0pYCBpZiB0aGVyZSdzIGEgRFNUIHNoaWZ0IGluIGJldHdlZW4uCgkgICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KCkKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cygxMjMpIC8vfj4gaW4gMTIzIG1pbGxpc2Vjb25kcwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgbWludXRlczogMTUgfSkgLy9+PiBpbiAxNSBtaW51dGVzCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pIC8vfj4gdGhpcyB0aW1lIHRvbW9ycm93CgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAtMSB9KSAvL34+IHRoaXMgdGltZSB5ZXN0ZXJkYXkKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGhvdXJzOiAzLCBtaW51dGVzOiAxMyB9KSAvL34+IGluIDMgaHIsIDEzIG1pbgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMywgbWludXRlczogMTMgfSkpIC8vfj4gaW4gMyBociwgMTMgbWluCgkgICAqIEByZXR1cm4ge0RhdGVUaW1lfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnBsdXMgPSBmdW5jdGlvbiBwbHVzKGR1cmF0aW9uKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwoJICAgIHZhciBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTsKCSAgICByZXR1cm4gY2xvbmUodGhpcywgYWRqdXN0VGltZSh0aGlzLCBkdXIpKTsKCSAgfQoJICAvKioKCSAgICogU3VidHJhY3QgYSBwZXJpb2Qgb2YgdGltZSB0byB0aGlzIERhdGVUaW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBEYXRlVGltZQoJICAgKiBTZWUge0BsaW5rIERhdGVUaW1lI3BsdXN9CgkgICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIHN1YnRyYWN0LiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKQoJICAgQHJldHVybiB7RGF0ZVRpbWV9CgkgICovCgkgIDsKCgkgIF9wcm90by5taW51cyA9IGZ1bmN0aW9uIG1pbnVzKGR1cmF0aW9uKSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwoJICAgIHZhciBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKS5uZWdhdGUoKTsKCSAgICByZXR1cm4gY2xvbmUodGhpcywgYWRqdXN0VGltZSh0aGlzLCBkdXIpKTsKCSAgfQoJICAvKioKCSAgICogIlNldCIgdGhpcyBEYXRlVGltZSB0byB0aGUgYmVnaW5uaW5nIG9mIGEgdW5pdCBvZiB0aW1lLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIFRoZSB1bml0IHRvIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YuIENhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsIG9yICdtaWxsaXNlY29uZCcuCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ21vbnRoJykudG9JU09EYXRlKCk7IC8vPT4gJzIwMTQtMDMtMDEnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ3llYXInKS50b0lTT0RhdGUoKTsgLy89PiAnMjAxNC0wMS0wMScKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZignd2VlaycpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAzLTAzJywgd2Vla3MgYWx3YXlzIHN0YXJ0IG9uIE1vbmRheXMKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMywgNSwgMzApLnN0YXJ0T2YoJ2RheScpLnRvSVNPVGltZSgpOyAvLz0+ICcwMDowMC4wMDAtMDU6MDAnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5zdGFydE9mKCdob3VyJykudG9JU09UaW1lKCk7IC8vPT4gJzA1OjAwOjAwLjAwMC0wNTowMCcKCSAgICogQHJldHVybiB7RGF0ZVRpbWV9CgkgICAqLwoJICA7CgoJICBfcHJvdG8uc3RhcnRPZiA9IGZ1bmN0aW9uIHN0YXJ0T2YodW5pdCkgewoJICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCSAgICB2YXIgbyA9IHt9LAoJICAgICAgICBub3JtYWxpemVkVW5pdCA9IER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodW5pdCk7CgoJICAgIHN3aXRjaCAobm9ybWFsaXplZFVuaXQpIHsKCSAgICAgIGNhc2UgInllYXJzIjoKCSAgICAgICAgby5tb250aCA9IDE7CgkgICAgICAvLyBmYWxscyB0aHJvdWdoCgoJICAgICAgY2FzZSAicXVhcnRlcnMiOgoJICAgICAgY2FzZSAibW9udGhzIjoKCSAgICAgICAgby5kYXkgPSAxOwoJICAgICAgLy8gZmFsbHMgdGhyb3VnaAoKCSAgICAgIGNhc2UgIndlZWtzIjoKCSAgICAgIGNhc2UgImRheXMiOgoJICAgICAgICBvLmhvdXIgPSAwOwoJICAgICAgLy8gZmFsbHMgdGhyb3VnaAoKCSAgICAgIGNhc2UgImhvdXJzIjoKCSAgICAgICAgby5taW51dGUgPSAwOwoJICAgICAgLy8gZmFsbHMgdGhyb3VnaAoKCSAgICAgIGNhc2UgIm1pbnV0ZXMiOgoJICAgICAgICBvLnNlY29uZCA9IDA7CgkgICAgICAvLyBmYWxscyB0aHJvdWdoCgoJICAgICAgY2FzZSAic2Vjb25kcyI6CgkgICAgICAgIG8ubWlsbGlzZWNvbmQgPSAwOwoJICAgICAgICBicmVhazsKCSAgICAgIC8vIG5vIGRlZmF1bHQsIGludmFsaWQgdW5pdHMgdGhyb3cgaW4gbm9ybWFsaXplVW5pdCgpCgkgICAgfQoKCSAgICBpZiAobm9ybWFsaXplZFVuaXQgPT09ICJ3ZWVrcyIpIHsKCSAgICAgIG8ud2Vla2RheSA9IDE7CgkgICAgfQoKCSAgICBpZiAobm9ybWFsaXplZFVuaXQgPT09ICJxdWFydGVycyIpIHsKCSAgICAgIHZhciBxID0gTWF0aC5jZWlsKHRoaXMubW9udGggLyAzKTsKCSAgICAgIG8ubW9udGggPSAocSAtIDEpICogMyArIDE7CgkgICAgfQoKCSAgICByZXR1cm4gdGhpcy5zZXQobyk7CgkgIH0KCSAgLyoqCgkgICAqICJTZXQiIHRoaXMgRGF0ZVRpbWUgdG8gdGhlIGVuZCAobWVhbmluZyB0aGUgbGFzdCBtaWxsaXNlY29uZCkgb2YgYSB1bml0IG9mIHRpbWUKCSAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBUaGUgdW5pdCB0byBnbyB0byB0aGUgZW5kIG9mLiBDYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLCBvciAnbWlsbGlzZWNvbmQnLgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5lbmRPZignbW9udGgnKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTMxVDIzOjU5OjU5Ljk5OS0wNTowMCcKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ3llYXInKS50b0lTTygpOyAvLz0+ICcyMDE0LTEyLTMxVDIzOjU5OjU5Ljk5OS0wNTowMCcKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ3dlZWsnKS50b0lTTygpOyAvLyA9PiAnMjAxNC0wMy0wOVQyMzo1OTo1OS45OTktMDU6MDAnLCB3ZWVrcyBzdGFydCBvbiBNb25kYXlzCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5lbmRPZignZGF5JykudG9JU08oKTsgLy89PiAnMjAxNC0wMy0wM1QyMzo1OTo1OS45OTktMDU6MDAnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5lbmRPZignaG91cicpLnRvSVNPKCk7IC8vPT4gJzIwMTQtMDMtMDNUMDU6NTk6NTkuOTk5LTA1OjAwJwoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KCSAgICovCgkgIDsKCgkgIF9wcm90by5lbmRPZiA9IGZ1bmN0aW9uIGVuZE9mKHVuaXQpIHsKCSAgICB2YXIgX3RoaXMkcGx1czsKCgkgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMucGx1cygoX3RoaXMkcGx1cyA9IHt9LCBfdGhpcyRwbHVzW3VuaXRdID0gMSwgX3RoaXMkcGx1cykpLnN0YXJ0T2YodW5pdCkubWludXMoMSkgOiB0aGlzOwoJICB9IC8vIE9VVFBVVAoKCSAgLyoqCgkgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy4KCSAgICogKipZb3UgbWF5IG5vdCB3YW50IHRoaXMuKiogU2VlIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9yIGEgbW9yZSBmbGV4aWJsZSBmb3JtYXR0aW5nIHRvb2wuIEZvciBhIHRhYmxlIG9mIHRva2VucyBhbmQgdGhlaXIgaW50ZXJwcmV0YXRpb25zLCBzZWUgW2hlcmVdKGh0dHBzOi8vbW9tZW50LmdpdGh1Yi5pby9sdXhvbi8jL2Zvcm1hdHRpbmc/aWQ9dGFibGUtb2YtdG9rZW5zKS4KCSAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlLgoJICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCBzdHJpbmcKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRzIHRvIG92ZXJyaWRlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb24gdGhpcyBEYXRlVGltZQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnKSAvLz0+ICcyMDE3IEFwciAyMicKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuc2V0TG9jYWxlKCdmcicpLnRvRm9ybWF0KCd5eXl5IExMTCBkZCcpIC8vPT4gJzIwMTcgYXZyLiAyMicKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoJ3l5eXkgTExMIGRkJywgeyBsb2NhbGU6ICJmciIgfSkgLy89PiAnMjAxNyBhdnIuIDIyJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgiSEggJ2hvdXJzIGFuZCcgbW0gJ21pbnV0ZXMnIikgLy89PiAnMjAgaG91cnMgYW5kIDU1IG1pbnV0ZXMnCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0Zvcm1hdCA9IGZ1bmN0aW9uIHRvRm9ybWF0KGZtdCwgb3B0cykgewoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLnJlZGVmYXVsdFRvRU4ob3B0cykpLmZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyh0aGlzLCBmbXQpIDogSU5WQUxJRDsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhIGxvY2FsaXplZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoaXMgZGF0ZS4gQWNjZXB0cyB0aGUgc2FtZSBvcHRpb25zIGFzIHRoZSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIGFuZCBhbnkgcHJlc2V0cyBkZWZpbmVkIGJ5IEx1eG9uLCBzdWNoIGFzIGBEYXRlVGltZS5EQVRFX0ZVTExgIG9yIGBEYXRlVGltZS5USU1FX1NJTVBMRWAuCgkgICAqIFRoZSBleGFjdCBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCBpcyBicm93c2VyLXNwZWNpZmljLCBidXQgaW4gZ2VuZXJhbCBpdCB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSByZXByZXNlbnRhdGlvbgoJICAgKiBvZiB0aGUgRGF0ZVRpbWUgaW4gdGhlIGFzc2lnbmVkIGxvY2FsZS4KCSAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkCgkgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXQKCSAgICogQHBhcmFtIGZvcm1hdE9wdHMge09iamVjdH0gLSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIG9wdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucwoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdHMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGlzIERhdGVUaW1lCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKCk7IC8vPT4gNC8yMC8yMDE3CgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZSgnZW4tZ2InKS50b0xvY2FsZVN0cmluZygpOyAvLz0+ICcyMC8wNC8yMDE3JwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IGxvY2FsZTogJ2VuLWdiJyB9KTsgLy89PiAnMjAvMDQvMjAxNycKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9GVUxMKTsgLy89PiAnQXByaWwgMjAsIDIwMTcnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLlRJTUVfU0lNUExFKTsgLy89PiAnMTE6MzIgQU0nCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVUSU1FX1NIT1JUKTsgLy89PiAnNC8yMC8yMDE3LCAxMTozMiBBTScKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyB3ZWVrZGF5OiAnbG9uZycsIG1vbnRoOiAnbG9uZycsIGRheTogJzItZGlnaXQnIH0pOyAvLz0+ICdUaHVyc2RheSwgQXByaWwgMjAnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgd2Vla2RheTogJ3Nob3J0JywgbW9udGg6ICdzaG9ydCcsIGRheTogJzItZGlnaXQnLCBob3VyOiAnMi1kaWdpdCcsIG1pbnV0ZTogJzItZGlnaXQnIH0pOyAvLz0+ICdUaHUsIEFwciAyMCwgMTE6MjcgQU0nCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JywgaG91ckN5Y2xlOiAnaDIzJyB9KTsgLy89PiAnMTE6MzInCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKGZvcm1hdE9wdHMsIG9wdHMpIHsKCSAgICBpZiAoZm9ybWF0T3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBmb3JtYXRPcHRzID0gREFURV9TSE9SVDsKCSAgICB9CgoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLmNsb25lKG9wdHMpLCBmb3JtYXRPcHRzKS5mb3JtYXREYXRlVGltZSh0aGlzKSA6IElOVkFMSUQ7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZm9ybWF0ICJwYXJ0cyIsIG1lYW5pbmcgaW5kaXZpZHVhbCB0b2tlbnMgYWxvbmcgd2l0aCBtZXRhZGF0YS4gVGhpcyBpcyBhbGxvd3MgY2FsbGVycyB0byBwb3N0LXByb2Nlc3MgaW5kaXZpZHVhbCBzZWN0aW9ucyBvZiB0aGUgZm9ybWF0dGVkIG91dHB1dC4KCSAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkCgkgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXQvZm9ybWF0VG9QYXJ0cwoJICAgKiBAcGFyYW0gb3B0cyB7T2JqZWN0fSAtIEludGwuRGF0ZVRpbWVGb3JtYXQgY29uc3RydWN0b3Igb3B0aW9ucywgc2FtZSBhcyBgdG9Mb2NhbGVTdHJpbmdgLgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVBhcnRzKCk7IC8vPT4gWwoJICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2RheScsIHZhbHVlOiAnMjUnIH0sCgkgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnbGl0ZXJhbCcsIHZhbHVlOiAnLycgfSwKCSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdtb250aCcsIHZhbHVlOiAnMDUnIH0sCgkgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnbGl0ZXJhbCcsIHZhbHVlOiAnLycgfSwKCSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICd5ZWFyJywgdmFsdWU6ICcxOTgyJyB9CgkgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+IF0KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0xvY2FsZVBhcnRzID0gZnVuY3Rpb24gdG9Mb2NhbGVQYXJ0cyhvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MuY2xvbmUob3B0cyksIG9wdHMpLmZvcm1hdERhdGVUaW1lUGFydHModGhpcykgOiBbXTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NNaWxsaXNlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMAoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzU2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIHNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMAoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXQ9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJ1onIG9yICctMDQ6MDAnCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdAoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPKCkgLy89PiAnMTk4Mi0wNS0yNVQwMDowMDowMC4wMDBaJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTygpIC8vPT4gJzIwMTctMDQtMjJUMjA6NDc6MDUuMzM1LTA0OjAwJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIC8vPT4gJzIwMTctMDQtMjJUMjA6NDc6MDUuMzM1JwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTyh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcyMDE3MDQyMlQyMDQ3MDUuMzM1LTA0MDAnCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0lTTyA9IGZ1bmN0aW9uIHRvSVNPKG9wdHMpIHsKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgewoJICAgICAgcmV0dXJuIG51bGw7CgkgICAgfQoKCSAgICByZXR1cm4gdGhpcy50b0lTT0RhdGUob3B0cykgKyAiVCIgKyB0aGlzLnRvSVNPVGltZShvcHRzKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUncyBkYXRlIGNvbXBvbmVudAoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKCSAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0CgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09EYXRlKCkgLy89PiAnMTk4Mi0wNS0yNScKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDE5ODIsIDUsIDI1KS50b0lTT0RhdGUoeyBmb3JtYXQ6ICdiYXNpYycgfSkgLy89PiAnMTk4MjA1MjUnCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b0lTT0RhdGUgPSBmdW5jdGlvbiB0b0lTT0RhdGUoX3RlbXAzKSB7CgkgICAgdmFyIF9yZWY1ID0gX3RlbXAzID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wMywKCSAgICAgICAgX3JlZjUkZm9ybWF0ID0gX3JlZjUuZm9ybWF0LAoJICAgICAgICBmb3JtYXQgPSBfcmVmNSRmb3JtYXQgPT09IHZvaWQgMCA/ICJleHRlbmRlZCIgOiBfcmVmNSRmb3JtYXQ7CgoJICAgIHZhciBmbXQgPSBmb3JtYXQgPT09ICJiYXNpYyIgPyAieXl5eU1NZGQiIDogInl5eXktTU0tZGQiOwoKCSAgICBpZiAodGhpcy55ZWFyID4gOTk5OSkgewoJICAgICAgZm10ID0gIisiICsgZm10OwoJICAgIH0KCgkgICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCBmbXQpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIHdlZWsgZGF0ZQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPV2Vla0RhdGUoKSAvLz0+ICcxOTgyLVcyMS0yJwoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9JU09XZWVrRGF0ZSA9IGZ1bmN0aW9uIHRvSVNPV2Vla0RhdGUoKSB7CgkgICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCAia2tray0nVydXVy1jIik7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lJ3MgdGltZSBjb21wb25lbnQKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NNaWxsaXNlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBtaWxsaXNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMAoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzU2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIHNlY29uZHMgZnJvbSB0aGUgZm9ybWF0IGlmIHRoZXkncmUgMAoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXQ9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJ1onIG9yICctMDQ6MDAnCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVByZWZpeD1mYWxzZV0gLSBpbmNsdWRlIHRoZSBgVGAgcHJlZml4CgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdAoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSgpIC8vPT4gJzA3OjM0OjE5LjM2MVonCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQsIHNlY29uZHM6IDAsIG1pbGxpc2Vjb25kczogMCB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc1NlY29uZHM6IHRydWUgfSkgLy89PiAnMDc6MzRaJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcwNzM0MTkuMzYxWicKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCB9KS50b0lTT1RpbWUoeyBpbmNsdWRlUHJlZml4OiB0cnVlIH0pIC8vPT4gJ1QwNzozNDoxOS4zNjFaJwoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9JU09UaW1lID0gZnVuY3Rpb24gdG9JU09UaW1lKF90ZW1wNCkgewoJICAgIHZhciBfcmVmNiA9IF90ZW1wNCA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDQsCgkgICAgICAgIF9yZWY2JHN1cHByZXNzTWlsbGlzZSA9IF9yZWY2LnN1cHByZXNzTWlsbGlzZWNvbmRzLAoJICAgICAgICBzdXBwcmVzc01pbGxpc2Vjb25kcyA9IF9yZWY2JHN1cHByZXNzTWlsbGlzZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmNiRzdXBwcmVzc01pbGxpc2UsCgkgICAgICAgIF9yZWY2JHN1cHByZXNzU2Vjb25kcyA9IF9yZWY2LnN1cHByZXNzU2Vjb25kcywKCSAgICAgICAgc3VwcHJlc3NTZWNvbmRzID0gX3JlZjYkc3VwcHJlc3NTZWNvbmRzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY2JHN1cHByZXNzU2Vjb25kcywKCSAgICAgICAgX3JlZjYkaW5jbHVkZU9mZnNldCA9IF9yZWY2LmluY2x1ZGVPZmZzZXQsCgkgICAgICAgIGluY2x1ZGVPZmZzZXQgPSBfcmVmNiRpbmNsdWRlT2Zmc2V0ID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjYkaW5jbHVkZU9mZnNldCwKCSAgICAgICAgX3JlZjYkaW5jbHVkZVByZWZpeCA9IF9yZWY2LmluY2x1ZGVQcmVmaXgsCgkgICAgICAgIGluY2x1ZGVQcmVmaXggPSBfcmVmNiRpbmNsdWRlUHJlZml4ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY2JGluY2x1ZGVQcmVmaXgsCgkgICAgICAgIF9yZWY2JGZvcm1hdCA9IF9yZWY2LmZvcm1hdCwKCSAgICAgICAgZm9ybWF0ID0gX3JlZjYkZm9ybWF0ID09PSB2b2lkIDAgPyAiZXh0ZW5kZWQiIDogX3JlZjYkZm9ybWF0OwoKCSAgICByZXR1cm4gdG9UZWNoVGltZUZvcm1hdCh0aGlzLCB7CgkgICAgICBzdXBwcmVzc1NlY29uZHM6IHN1cHByZXNzU2Vjb25kcywKCSAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzOiBzdXBwcmVzc01pbGxpc2Vjb25kcywKCSAgICAgIGluY2x1ZGVPZmZzZXQ6IGluY2x1ZGVPZmZzZXQsCgkgICAgICBpbmNsdWRlUHJlZml4OiBpbmNsdWRlUHJlZml4LAoJICAgICAgZm9ybWF0OiBmb3JtYXQKCSAgICB9KTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBSRkMgMjgyMi1jb21wYXRpYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lLCBhbHdheXMgaW4gVVRDCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9SRkMyODIyKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAwMDowMDowMCArMDAwMCcKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvUkZDMjgyMigpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgLTA0MDAnCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b1JGQzI4MjIgPSBmdW5jdGlvbiB0b1JGQzI4MjIoKSB7CgkgICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCAiRUVFLCBkZCBMTEwgeXl5eSBISDptbTpzcyBaWloiLCBmYWxzZSk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIEhUVFAgaGVhZGVycy4KCSAgICogU3BlY2lmaWNhbGx5LCB0aGUgc3RyaW5nIGNvbmZvcm1zIHRvIFJGQyAxMTIzLgoJICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzMuaHRtbCNzZWMzLjMuMQoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvSFRUUCgpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMDA6MDA6MDAgR01UJwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMsIDE5KS50b0hUVFAoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDE5OjAwOjAwIEdNVCcKCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvSFRUUCA9IGZ1bmN0aW9uIHRvSFRUUCgpIHsKCSAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMudG9VVEMoKSwgIkVFRSwgZGQgTExMIHl5eXkgSEg6bW06c3MgJ0dNVCciKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gU1FMIERhdGUKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1NRTERhdGUoKSAvLz0+ICcyMDE0LTA3LTEzJwoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9TUUxEYXRlID0gZnVuY3Rpb24gdG9TUUxEYXRlKCkgewoJICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcywgInl5eXktTU0tZGQiKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gU1FMIFRpbWUKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVpvbmU9ZmFsc2VdIC0gaW5jbHVkZSB0aGUgem9uZSwgc3VjaCBhcyAnQW1lcmljYS9OZXdfWW9yaycuIE92ZXJyaWRlcyBpbmNsdWRlT2Zmc2V0LgoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXQ9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJ1onIG9yICctMDQ6MDAnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnRvU1FMKCkgLy89PiAnMDU6MTU6MTYuMzQ1JwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCgpIC8vPT4gJzA1OjE1OjE2LjM0NSAtMDQ6MDAnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvU1FMKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMDU6MTU6MTYuMzQ1JwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCh7IGluY2x1ZGVab25lOiBmYWxzZSB9KSAvLz0+ICcwNToxNToxNi4zNDUgQW1lcmljYS9OZXdfWW9yaycKCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvU1FMVGltZSA9IGZ1bmN0aW9uIHRvU1FMVGltZShfdGVtcDUpIHsKCSAgICB2YXIgX3JlZjcgPSBfdGVtcDUgPT09IHZvaWQgMCA/IHt9IDogX3RlbXA1LAoJICAgICAgICBfcmVmNyRpbmNsdWRlT2Zmc2V0ID0gX3JlZjcuaW5jbHVkZU9mZnNldCwKCSAgICAgICAgaW5jbHVkZU9mZnNldCA9IF9yZWY3JGluY2x1ZGVPZmZzZXQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmNyRpbmNsdWRlT2Zmc2V0LAoJICAgICAgICBfcmVmNyRpbmNsdWRlWm9uZSA9IF9yZWY3LmluY2x1ZGVab25lLAoJICAgICAgICBpbmNsdWRlWm9uZSA9IF9yZWY3JGluY2x1ZGVab25lID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY3JGluY2x1ZGVab25lOwoKCSAgICByZXR1cm4gdG9UZWNoVGltZUZvcm1hdCh0aGlzLCB7CgkgICAgICBpbmNsdWRlT2Zmc2V0OiBpbmNsdWRlT2Zmc2V0LAoJICAgICAgaW5jbHVkZVpvbmU6IGluY2x1ZGVab25lLAoJICAgICAgc3BhY2Vab25lOiB0cnVlCgkgICAgfSk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIFNRTCBEYXRlVGltZQoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKCSAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlWm9uZT1mYWxzZV0gLSBpbmNsdWRlIHRoZSB6b25lLCBzdWNoIGFzICdBbWVyaWNhL05ld19Zb3JrJy4gT3ZlcnJpZGVzIGluY2x1ZGVPZmZzZXQuCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCcKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1NRTCgpIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIFonCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1NRTCgpIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIC0wNDowMCcKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAnCgkgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1NRTCh7IGluY2x1ZGVab25lOiB0cnVlIH0pIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwIEFtZXJpY2EvTmV3X1lvcmsnCgkgICAqIEByZXR1cm4ge3N0cmluZ30KCSAgICovCgkgIDsKCgkgIF9wcm90by50b1NRTCA9IGZ1bmN0aW9uIHRvU1FMKG9wdHMpIHsKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgewoJICAgICAgcmV0dXJuIG51bGw7CgkgICAgfQoKCSAgICByZXR1cm4gdGhpcy50b1NRTERhdGUoKSArICIgIiArIHRoaXMudG9TUUxUaW1lKG9wdHMpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIGRlYnVnZ2luZwoJICAgKiBAcmV0dXJuIHtzdHJpbmd9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHsKCSAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy50b0lTTygpIDogSU5WQUxJRDsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyB0aGUgZXBvY2ggbWlsbGlzZWNvbmRzIG9mIHRoaXMgRGF0ZVRpbWUuIEFsaWFzIG9mIHtAbGluayBEYXRlVGltZSN0b01pbGxpc30KCSAgICogQHJldHVybiB7bnVtYmVyfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnZhbHVlT2YgPSBmdW5jdGlvbiB2YWx1ZU9mKCkgewoJICAgIHJldHVybiB0aGlzLnRvTWlsbGlzKCk7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgdGhlIGVwb2NoIG1pbGxpc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLgoJICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9NaWxsaXMgPSBmdW5jdGlvbiB0b01pbGxpcygpIHsKCSAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy50cyA6IE5hTjsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyB0aGUgZXBvY2ggc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLgoJICAgKiBAcmV0dXJuIHtudW1iZXJ9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9TZWNvbmRzID0gZnVuY3Rpb24gdG9TZWNvbmRzKCkgewoJICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRzIC8gMTAwMCA6IE5hTjsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhbiBJU08gODYwMSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gSlNPTi4KCSAgICogQHJldHVybiB7c3RyaW5nfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHsKCSAgICByZXR1cm4gdGhpcy50b0lTTygpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGEgQlNPTiBzZXJpYWxpemFibGUgZXF1aXZhbGVudCB0byB0aGlzIERhdGVUaW1lLgoJICAgKiBAcmV0dXJuIHtEYXRlfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvQlNPTiA9IGZ1bmN0aW9uIHRvQlNPTigpIHsKCSAgICByZXR1cm4gdGhpcy50b0pTRGF0ZSgpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCB0aGlzIERhdGVUaW1lJ3MgeWVhciwgbW9udGgsIGRheSwgYW5kIHNvIG9uLgoJICAgKiBAcGFyYW0gb3B0cyAtIG9wdGlvbnMgZm9yIGdlbmVyYXRpbmcgdGhlIG9iamVjdAoJICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVDb25maWc9ZmFsc2VdIC0gaW5jbHVkZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMgaW4gdGhlIG91dHB1dAoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b09iamVjdCgpIC8vPT4geyB5ZWFyOiAyMDE3LCBtb250aDogNCwgZGF5OiAyMiwgaG91cjogMjAsIG1pbnV0ZTogNDksIHNlY29uZDogNDIsIG1pbGxpc2Vjb25kOiAyNjggfQoJICAgKiBAcmV0dXJuIHtPYmplY3R9CgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9PYmplY3QgPSBmdW5jdGlvbiB0b09iamVjdChvcHRzKSB7CgkgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0cyA9IHt9OwoJICAgIH0KCgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTsKCgkgICAgdmFyIGJhc2UgPSBfZXh0ZW5kcyh7fSwgdGhpcy5jKTsKCgkgICAgaWYgKG9wdHMuaW5jbHVkZUNvbmZpZykgewoJICAgICAgYmFzZS5vdXRwdXRDYWxlbmRhciA9IHRoaXMub3V0cHV0Q2FsZW5kYXI7CgkgICAgICBiYXNlLm51bWJlcmluZ1N5c3RlbSA9IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbTsKCSAgICAgIGJhc2UubG9jYWxlID0gdGhpcy5sb2MubG9jYWxlOwoJICAgIH0KCgkgICAgcmV0dXJuIGJhc2U7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybnMgYSBKYXZhU2NyaXB0IERhdGUgZXF1aXZhbGVudCB0byB0aGlzIERhdGVUaW1lLgoJICAgKiBAcmV0dXJuIHtEYXRlfQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLnRvSlNEYXRlID0gZnVuY3Rpb24gdG9KU0RhdGUoKSB7CgkgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgOiBOYU4pOwoJICB9IC8vIENPTVBBUkUKCgkgIC8qKgoJICAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gRGF0ZVRpbWVzIGFzIGEgRHVyYXRpb24uCgkgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyRGF0ZVRpbWUgLSB0aGUgRGF0ZVRpbWUgdG8gY29tcGFyZSB0aGlzIG9uZSB0bwoJICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3VuaXQ9WydtaWxsaXNlY29uZHMnXV0gLSB0aGUgdW5pdCBvciBhcnJheSBvZiB1bml0cyAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gaW5jbHVkZSBpbiB0aGUgZHVyYXRpb24uCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZQoJICAgKiBAZXhhbXBsZQoJICAgKiB2YXIgaTEgPSBEYXRlVGltZS5mcm9tSVNPKCcxOTgyLTA1LTI1VDA5OjQ1JyksCgkgICAqICAgICBpMiA9IERhdGVUaW1lLmZyb21JU08oJzE5ODMtMTAtMTRUMTA6MzAnKTsKCSAgICogaTIuZGlmZihpMSkudG9PYmplY3QoKSAvLz0+IHsgbWlsbGlzZWNvbmRzOiA0MzgwNzUwMDAwMCB9CgkgICAqIGkyLmRpZmYoaTEsICdob3VycycpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMjE2OC43NSB9CgkgICAqIGkyLmRpZmYoaTEsIFsnbW9udGhzJywgJ2RheXMnXSkudG9PYmplY3QoKSAvLz0+IHsgbW9udGhzOiAxNiwgZGF5czogMTkuMDMxMjUgfQoJICAgKiBpMi5kaWZmKGkxLCBbJ21vbnRocycsICdkYXlzJywgJ2hvdXJzJ10pLnRvT2JqZWN0KCkgLy89PiB7IG1vbnRoczogMTYsIGRheXM6IDE5LCBob3VyczogMC43NSB9CgkgICAqIEByZXR1cm4ge0R1cmF0aW9ufQoJICAgKi8KCSAgOwoKCSAgX3Byb3RvLmRpZmYgPSBmdW5jdGlvbiBkaWZmKG90aGVyRGF0ZVRpbWUsIHVuaXQsIG9wdHMpIHsKCSAgICBpZiAodW5pdCA9PT0gdm9pZCAwKSB7CgkgICAgICB1bml0ID0gIm1pbGxpc2Vjb25kcyI7CgkgICAgfQoKCSAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRzID0ge307CgkgICAgfQoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhb3RoZXJEYXRlVGltZS5pc1ZhbGlkKSB7CgkgICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZCgiY3JlYXRlZCBieSBkaWZmaW5nIGFuIGludmFsaWQgRGF0ZVRpbWUiKTsKCSAgICB9CgoJICAgIHZhciBkdXJPcHRzID0gX2V4dGVuZHMoewoJICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSwKCSAgICAgIG51bWJlcmluZ1N5c3RlbTogdGhpcy5udW1iZXJpbmdTeXN0ZW0KCSAgICB9LCBvcHRzKTsKCgkgICAgdmFyIHVuaXRzID0gbWF5YmVBcnJheSh1bml0KS5tYXAoRHVyYXRpb24ubm9ybWFsaXplVW5pdCksCgkgICAgICAgIG90aGVySXNMYXRlciA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpID4gdGhpcy52YWx1ZU9mKCksCgkgICAgICAgIGVhcmxpZXIgPSBvdGhlcklzTGF0ZXIgPyB0aGlzIDogb3RoZXJEYXRlVGltZSwKCSAgICAgICAgbGF0ZXIgPSBvdGhlcklzTGF0ZXIgPyBvdGhlckRhdGVUaW1lIDogdGhpcywKCSAgICAgICAgZGlmZmVkID0gX2RpZmYoZWFybGllciwgbGF0ZXIsIHVuaXRzLCBkdXJPcHRzKTsKCgkgICAgcmV0dXJuIG90aGVySXNMYXRlciA/IGRpZmZlZC5uZWdhdGUoKSA6IGRpZmZlZDsKCSAgfQoJICAvKioKCSAgICogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBEYXRlVGltZSBhbmQgcmlnaHQgbm93LgoJICAgKiBTZWUge0BsaW5rIERhdGVUaW1lI2RpZmZ9CgkgICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbdW5pdD1bJ21pbGxpc2Vjb25kcyddXSAtIHRoZSB1bml0IG9yIHVuaXRzIHVuaXRzIChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byBpbmNsdWRlIGluIHRoZSBkdXJhdGlvbgoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIHRoZSBEdXJhdGlvbgoJICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2UKCSAgICogQHJldHVybiB7RHVyYXRpb259CgkgICAqLwoJICA7CgoJICBfcHJvdG8uZGlmZk5vdyA9IGZ1bmN0aW9uIGRpZmZOb3codW5pdCwgb3B0cykgewoJICAgIGlmICh1bml0ID09PSB2b2lkIDApIHsKCSAgICAgIHVuaXQgPSAibWlsbGlzZWNvbmRzIjsKCSAgICB9CgoJICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKCSAgICAgIG9wdHMgPSB7fTsKCSAgICB9CgoJICAgIHJldHVybiB0aGlzLmRpZmYoRGF0ZVRpbWUubm93KCksIHVuaXQsIG9wdHMpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgc3Bhbm5pbmcgYmV0d2VlbiB0aGlzIERhdGVUaW1lIGFuZCBhbm90aGVyIERhdGVUaW1lCgkgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyRGF0ZVRpbWUgLSB0aGUgb3RoZXIgZW5kIHBvaW50IG9mIHRoZSBJbnRlcnZhbAoJICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KCSAgICovCgkgIDsKCgkgIF9wcm90by51bnRpbCA9IGZ1bmN0aW9uIHVudGlsKG90aGVyRGF0ZVRpbWUpIHsKCSAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyh0aGlzLCBvdGhlckRhdGVUaW1lKSA6IHRoaXM7CgkgIH0KCSAgLyoqCgkgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgRGF0ZVRpbWUgaXMgaW4gdGhlIHNhbWUgdW5pdCBvZiB0aW1lIGFzIGFub3RoZXIgRGF0ZVRpbWUuCgkgICAqIEhpZ2hlci1vcmRlciB1bml0cyBtdXN0IGFsc28gYmUgaWRlbnRpY2FsIGZvciB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiBgdHJ1ZWAuCgkgICAqIE5vdGUgdGhhdCB0aW1lIHpvbmVzIGFyZSAqKmlnbm9yZWQqKiBpbiB0aGlzIGNvbXBhcmlzb24sIHdoaWNoIGNvbXBhcmVzIHRoZSAqKmxvY2FsKiogY2FsZW5kYXIgdGltZS4gVXNlIHtAbGluayBEYXRlVGltZSNzZXRab25lfSB0byBjb252ZXJ0IG9uZSBvZiB0aGUgZGF0ZXMgaWYgbmVlZGVkLgoJICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIG90aGVyIERhdGVUaW1lCgkgICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gdGhlIHVuaXQgb2YgdGltZSB0byBjaGVjayBzYW1lbmVzcyBvbgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5oYXNTYW1lKG90aGVyRFQsICdkYXknKTsgLy9+PiB0cnVlIGlmIG90aGVyRFQgaXMgaW4gdGhlIHNhbWUgY3VycmVudCBjYWxlbmRhciBkYXkKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5oYXNTYW1lID0gZnVuY3Rpb24gaGFzU2FtZShvdGhlckRhdGVUaW1lLCB1bml0KSB7CgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTsKCSAgICB2YXIgaW5wdXRNcyA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpOwoJICAgIHZhciBvdGhlclpvbmVEYXRlVGltZSA9IHRoaXMuc2V0Wm9uZShvdGhlckRhdGVUaW1lLnpvbmUsIHsKCSAgICAgIGtlZXBMb2NhbFRpbWU6IHRydWUKCSAgICB9KTsKCSAgICByZXR1cm4gb3RoZXJab25lRGF0ZVRpbWUuc3RhcnRPZih1bml0KSA8PSBpbnB1dE1zICYmIGlucHV0TXMgPD0gb3RoZXJab25lRGF0ZVRpbWUuZW5kT2YodW5pdCk7CgkgIH0KCSAgLyoqCgkgICAqIEVxdWFsaXR5IGNoZWNrCgkgICAqIFR3byBEYXRlVGltZXMgYXJlIGVxdWFsIGlmZiB0aGV5IHJlcHJlc2VudCB0aGUgc2FtZSBtaWxsaXNlY29uZCwgaGF2ZSB0aGUgc2FtZSB6b25lIGFuZCBsb2NhdGlvbiwgYW5kIGFyZSBib3RoIHZhbGlkLgoJICAgKiBUbyBjb21wYXJlIGp1c3QgdGhlIG1pbGxpc2Vjb25kIHZhbHVlcywgdXNlIGArZHQxID09PSArZHQyYC4KCSAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXIgLSB0aGUgb3RoZXIgRGF0ZVRpbWUKCSAgICogQHJldHVybiB7Ym9vbGVhbn0KCSAgICovCgkgIDsKCgkgIF9wcm90by5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHsKCSAgICByZXR1cm4gdGhpcy5pc1ZhbGlkICYmIG90aGVyLmlzVmFsaWQgJiYgdGhpcy52YWx1ZU9mKCkgPT09IG90aGVyLnZhbHVlT2YoKSAmJiB0aGlzLnpvbmUuZXF1YWxzKG90aGVyLnpvbmUpICYmIHRoaXMubG9jLmVxdWFscyhvdGhlci5sb2MpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhpcyB0aW1lIHJlbGF0aXZlIHRvIG5vdywgc3VjaCBhcyAiaW4gdHdvIGRheXMiLiBDYW4gb25seSBpbnRlcm5hdGlvbmFsaXplIGlmIHlvdXIKCSAgICogcGxhdGZvcm0gc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuIFJvdW5kcyBkb3duIGJ5IGRlZmF1bHQuCgkgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0CgkgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zdHlsZT0ibG9uZyJdIC0gdGhlIHN0eWxlIG9mIHVuaXRzLCBtdXN0IGJlICJsb25nIiwgInNob3J0Iiwgb3IgIm5hcnJvdyIKCSAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IG9wdGlvbnMudW5pdCAtIHVzZSBhIHNwZWNpZmljIHVuaXQgb3IgYXJyYXkgb2YgdW5pdHM7IGlmIG9taXR0ZWQsIG9yIGFuIGFycmF5LCB0aGUgbWV0aG9kIHdpbGwgcGljayB0aGUgYmVzdCB1bml0LiBVc2UgYW4gYXJyYXkgb3Igb25lIG9mICJ5ZWFycyIsICJxdWFydGVycyIsICJtb250aHMiLCAid2Vla3MiLCAiZGF5cyIsICJob3VycyIsICJtaW51dGVzIiwgb3IgInNlY29uZHMiCgkgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucm91bmQ9dHJ1ZV0gLSB3aGV0aGVyIHRvIHJvdW5kIHRoZSBudW1iZXJzIGluIHRoZSBvdXRwdXQuCgkgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5wYWRkaW5nPTBdIC0gcGFkZGluZyBpbiBtaWxsaXNlY29uZHMuIFRoaXMgYWxsb3dzIHlvdSB0byByb3VuZCB1cCB0aGUgcmVzdWx0IGlmIGl0IGZpdHMgaW5zaWRlIHRoZSB0aHJlc2hvbGQuIERvbid0IHVzZSBpbiBjb21iaW5hdGlvbiB3aXRoIHtyb3VuZDogZmFsc2V9IGJlY2F1c2UgdGhlIGRlY2ltYWwgb3V0cHV0IHdpbGwgaW5jbHVkZSB0aGUgcGFkZGluZy4KCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubG9jYWxlIC0gb3ZlcnJpZGUgdGhlIGxvY2FsZSBvZiB0aGlzIERhdGVUaW1lCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm51bWJlcmluZ1N5c3RlbSAtIG92ZXJyaWRlIHRoZSBudW1iZXJpbmdTeXN0ZW0gb2YgdGhpcyBEYXRlVGltZS4gVGhlIEludGwgc3lzdGVtIG1heSBjaG9vc2Ugbm90IHRvIGhvbm9yIHRoaXMKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZSgpIC8vPT4gImluIDEgZGF5IgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoImVzIikudG9SZWxhdGl2ZSh7IGRheXM6IDEgfSkgLy89PiAiZGVudHJvIGRlIDEgZMOtYSIKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZSh7IGxvY2FsZTogImZyIiB9KSAvLz0+ICJkYW5zIDIzIGhldXJlcyIKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmUoKSAvLz0+ICIyIGRheXMgYWdvIgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZSh7IHVuaXQ6ICJob3VycyIgfSkgLy89PiAiNDggaG91cnMgYWdvIgoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGhvdXJzOiAzNiB9KS50b1JlbGF0aXZlKHsgcm91bmQ6IGZhbHNlIH0pIC8vPT4gIjEuNSBkYXlzIGFnbyIKCSAgICovCgkgIDsKCgkgIF9wcm90by50b1JlbGF0aXZlID0gZnVuY3Rpb24gdG9SZWxhdGl2ZShvcHRpb25zKSB7CgkgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgewoJICAgICAgb3B0aW9ucyA9IHt9OwoJICAgIH0KCgkgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBudWxsOwoJICAgIHZhciBiYXNlID0gb3B0aW9ucy5iYXNlIHx8IERhdGVUaW1lLmZyb21PYmplY3Qoe30sIHsKCSAgICAgIHpvbmU6IHRoaXMuem9uZQoJICAgIH0pLAoJICAgICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nID8gdGhpcyA8IGJhc2UgPyAtb3B0aW9ucy5wYWRkaW5nIDogb3B0aW9ucy5wYWRkaW5nIDogMDsKCSAgICB2YXIgdW5pdHMgPSBbInllYXJzIiwgIm1vbnRocyIsICJkYXlzIiwgImhvdXJzIiwgIm1pbnV0ZXMiLCAic2Vjb25kcyJdOwoJICAgIHZhciB1bml0ID0gb3B0aW9ucy51bml0OwoKCSAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnVuaXQpKSB7CgkgICAgICB1bml0cyA9IG9wdGlvbnMudW5pdDsKCSAgICAgIHVuaXQgPSB1bmRlZmluZWQ7CgkgICAgfQoKCSAgICByZXR1cm4gZGlmZlJlbGF0aXZlKGJhc2UsIHRoaXMucGx1cyhwYWRkaW5nKSwgX2V4dGVuZHMoe30sIG9wdGlvbnMsIHsKCSAgICAgIG51bWVyaWM6ICJhbHdheXMiLAoJICAgICAgdW5pdHM6IHVuaXRzLAoJICAgICAgdW5pdDogdW5pdAoJICAgIH0pKTsKCSAgfQoJICAvKioKCSAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGRhdGUgcmVsYXRpdmUgdG8gdG9kYXksIHN1Y2ggYXMgInllc3RlcmRheSIgb3IgIm5leHQgbW9udGgiLgoJICAgKiBPbmx5IGludGVybmF0aW9uYWxpemVzIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnRzIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0LgoJICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIG91dHB1dAoJICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBbb3B0aW9ucy5iYXNlPURhdGVUaW1lLm5vdygpXSAtIHRoZSBEYXRlVGltZSB0byB1c2UgYXMgdGhlIGJhc2lzIHRvIHdoaWNoIHRoaXMgdGltZSBpcyBjb21wYXJlZC4gRGVmYXVsdHMgdG8gbm93LgoJICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5sb2NhbGUgLSBvdmVycmlkZSB0aGUgbG9jYWxlIG9mIHRoaXMgRGF0ZVRpbWUKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMudW5pdCAtIHVzZSBhIHNwZWNpZmljIHVuaXQ7IGlmIG9taXR0ZWQsIHRoZSBtZXRob2Qgd2lsbCBwaWNrIHRoZSB1bml0LiBVc2Ugb25lIG9mICJ5ZWFycyIsICJxdWFydGVycyIsICJtb250aHMiLCAid2Vla3MiLCBvciAiZGF5cyIKCSAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gb3ZlcnJpZGUgdGhlIG51bWJlcmluZ1N5c3RlbSBvZiB0aGlzIERhdGVUaW1lLiBUaGUgSW50bCBzeXN0ZW0gbWF5IGNob29zZSBub3QgdG8gaG9ub3IgdGhpcwoJICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoKSAvLz0+ICJ0b21vcnJvdyIKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuc2V0TG9jYWxlKCJlcyIpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoKSAvLz0+ICIibWHDsWFuYSIKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZUNhbGVuZGFyKHsgbG9jYWxlOiAiZnIiIH0pIC8vPT4gImRlbWFpbiIKCSAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmVDYWxlbmRhcigpIC8vPT4gIjIgZGF5cyBhZ28iCgkgICAqLwoJICA7CgoJICBfcHJvdG8udG9SZWxhdGl2ZUNhbGVuZGFyID0gZnVuY3Rpb24gdG9SZWxhdGl2ZUNhbGVuZGFyKG9wdGlvbnMpIHsKCSAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRpb25zID0ge307CgkgICAgfQoKCSAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7CgkgICAgcmV0dXJuIGRpZmZSZWxhdGl2ZShvcHRpb25zLmJhc2UgfHwgRGF0ZVRpbWUuZnJvbU9iamVjdCh7fSwgewoJICAgICAgem9uZTogdGhpcy56b25lCgkgICAgfSksIHRoaXMsIF9leHRlbmRzKHt9LCBvcHRpb25zLCB7CgkgICAgICBudW1lcmljOiAiYXV0byIsCgkgICAgICB1bml0czogWyJ5ZWFycyIsICJtb250aHMiLCAiZGF5cyJdLAoJICAgICAgY2FsZW5kYXJ5OiB0cnVlCgkgICAgfSkpOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gdGhlIG1pbiBvZiBzZXZlcmFsIGRhdGUgdGltZXMKCSAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWluaW11bQoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0gdGhlIG1pbiBEYXRlVGltZSwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5taW4gPSBmdW5jdGlvbiBtaW4oKSB7CgkgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGRhdGVUaW1lcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKCSAgICAgIGRhdGVUaW1lc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKCSAgICB9CgoJICAgIGlmICghZGF0ZVRpbWVzLmV2ZXJ5KERhdGVUaW1lLmlzRGF0ZVRpbWUpKSB7CgkgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoIm1pbiByZXF1aXJlcyBhbGwgYXJndW1lbnRzIGJlIERhdGVUaW1lcyIpOwoJICAgIH0KCgkgICAgcmV0dXJuIGJlc3RCeShkYXRlVGltZXMsIGZ1bmN0aW9uIChpKSB7CgkgICAgICByZXR1cm4gaS52YWx1ZU9mKCk7CgkgICAgfSwgTWF0aC5taW4pOwoJICB9CgkgIC8qKgoJICAgKiBSZXR1cm4gdGhlIG1heCBvZiBzZXZlcmFsIGRhdGUgdGltZXMKCSAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWF4aW11bQoJICAgKiBAcmV0dXJuIHtEYXRlVGltZX0gdGhlIG1heCBEYXRlVGltZSwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5tYXggPSBmdW5jdGlvbiBtYXgoKSB7CgkgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBkYXRlVGltZXMgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHsKCSAgICAgIGRhdGVUaW1lc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdOwoJICAgIH0KCgkgICAgaWYgKCFkYXRlVGltZXMuZXZlcnkoRGF0ZVRpbWUuaXNEYXRlVGltZSkpIHsKCSAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigibWF4IHJlcXVpcmVzIGFsbCBhcmd1bWVudHMgYmUgRGF0ZVRpbWVzIik7CgkgICAgfQoKCSAgICByZXR1cm4gYmVzdEJ5KGRhdGVUaW1lcywgZnVuY3Rpb24gKGkpIHsKCSAgICAgIHJldHVybiBpLnZhbHVlT2YoKTsKCSAgICB9LCBNYXRoLm1heCk7CgkgIH0gLy8gTUlTQwoKCSAgLyoqCgkgICAqIEV4cGxhaW4gaG93IGEgc3RyaW5nIHdvdWxkIGJlIHBhcnNlZCBieSBmcm9tRm9ybWF0KCkKCSAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgc3RyaW5nIHRvIHBhcnNlCgkgICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHRoZSBzdHJpbmcgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gKHNlZSBkZXNjcmlwdGlvbikKCSAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIHRha2VuIGJ5IGZyb21Gb3JtYXQoKQoJICAgKiBAcmV0dXJuIHtPYmplY3R9CgkgICAqLwoJICA7CgoJICBEYXRlVGltZS5mcm9tRm9ybWF0RXhwbGFpbiA9IGZ1bmN0aW9uIGZyb21Gb3JtYXRFeHBsYWluKHRleHQsIGZtdCwgb3B0aW9ucykgewoJICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsKCSAgICAgIG9wdGlvbnMgPSB7fTsKCSAgICB9CgoJICAgIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsCgkgICAgICAgIF9vcHRpb25zJGxvY2FsZSA9IF9vcHRpb25zLmxvY2FsZSwKCSAgICAgICAgbG9jYWxlID0gX29wdGlvbnMkbG9jYWxlID09PSB2b2lkIDAgPyBudWxsIDogX29wdGlvbnMkbG9jYWxlLAoJICAgICAgICBfb3B0aW9ucyRudW1iZXJpbmdTeXMgPSBfb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0sCgkgICAgICAgIG51bWJlcmluZ1N5c3RlbSA9IF9vcHRpb25zJG51bWJlcmluZ1N5cyA9PT0gdm9pZCAwID8gbnVsbCA6IF9vcHRpb25zJG51bWJlcmluZ1N5cywKCSAgICAgICAgbG9jYWxlVG9Vc2UgPSBMb2NhbGUuZnJvbU9wdHMoewoJICAgICAgbG9jYWxlOiBsb2NhbGUsCgkgICAgICBudW1iZXJpbmdTeXN0ZW06IG51bWJlcmluZ1N5c3RlbSwKCSAgICAgIGRlZmF1bHRUb0VOOiB0cnVlCgkgICAgfSk7CgkgICAgcmV0dXJuIGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZVRvVXNlLCB0ZXh0LCBmbXQpOwoJICB9CgkgIC8qKgoJICAgKiBAZGVwcmVjYXRlZCB1c2UgZnJvbUZvcm1hdEV4cGxhaW4gaW5zdGVhZAoJICAgKi8KCSAgOwoKCSAgRGF0ZVRpbWUuZnJvbVN0cmluZ0V4cGxhaW4gPSBmdW5jdGlvbiBmcm9tU3RyaW5nRXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMpIHsKCSAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7CgkgICAgICBvcHRpb25zID0ge307CgkgICAgfQoKCSAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdEV4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zKTsKCSAgfSAvLyBGT1JNQVQgUFJFU0VUUwoKCSAgLyoqCgkgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgMTAvMTQvMTk4MwoJICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgKi8KCSAgOwoKCSAgX2NyZWF0ZUNsYXNzKERhdGVUaW1lLCBbewoJICAgIGtleTogImlzVmFsaWQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZCA9PT0gbnVsbDsKCSAgICB9CgkgICAgLyoqCgkgICAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgRGF0ZVRpbWUgaXMgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRGF0ZVRpbWUgaXMgdmFsaWQKCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImludmFsaWRSZWFzb24iLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5yZWFzb24gOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBSZXR1cm5zIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGlzIERhdGVUaW1lIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEYXRlVGltZSBpcyB2YWxpZAoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaW52YWxpZEV4cGxhbmF0aW9uIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIGxvY2FsZSBvZiBhIERhdGVUaW1lLCBzdWNoICdlbi1HQicuIFRoZSBsb2NhbGUgaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lCgkgICAgICoKCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImxvY2FsZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubG9jYWxlIDogbnVsbDsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBudW1iZXJpbmcgc3lzdGVtIG9mIGEgRGF0ZVRpbWUsIHN1Y2ggJ2JlbmcnLiBUaGUgbnVtYmVyaW5nIHN5c3RlbSBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRGF0ZVRpbWUKCSAgICAgKgoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAibnVtYmVyaW5nU3lzdGVtIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIG91dHB1dCBjYWxlbmRhciBvZiBhIERhdGVUaW1lLCBzdWNoICdpc2xhbWljJy4gVGhlIG91dHB1dCBjYWxlbmRhciBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRGF0ZVRpbWUKCSAgICAgKgoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAib3V0cHV0Q2FsZW5kYXIiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLm91dHB1dENhbGVuZGFyIDogbnVsbDsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSB0aW1lIHpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgRGF0ZVRpbWUuCgkgICAgICogQHR5cGUge1pvbmV9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiem9uZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5fem9uZTsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSB0aW1lIHpvbmUuCgkgICAgICogQHR5cGUge3N0cmluZ30KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJ6b25lTmFtZSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy56b25lLm5hbWUgOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIHllYXIKCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkueWVhciAvLz0+IDIwMTcKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogInllYXIiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy55ZWFyIDogTmFOOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIHF1YXJ0ZXIKCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkucXVhcnRlciAvLz0+IDIKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogInF1YXJ0ZXIiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IE1hdGguY2VpbCh0aGlzLmMubW9udGggLyAzKSA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBtb250aCAoMS0xMikuCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLm1vbnRoIC8vPT4gNQoJICAgICAqIEB0eXBlIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAibW9udGgiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5tb250aCA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBkYXkgb2YgdGhlIG1vbnRoICgxLTMwaXNoKS4KCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkuZGF5IC8vPT4gMjUKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImRheSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLmRheSA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBob3VyIG9mIHRoZSBkYXkgKDAtMjMpLgoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5KS5ob3VyIC8vPT4gOQoJICAgICAqIEB0eXBlIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiaG91ciIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLmhvdXIgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgbWludXRlIG9mIHRoZSBob3VyICgwLTU5KS4KCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSwgOSwgMzApLm1pbnV0ZSAvLz0+IDMwCgkgICAgICogQHR5cGUge251bWJlcn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJtaW51dGUiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5taW51dGUgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgc2Vjb25kIG9mIHRoZSBtaW51dGUgKDAtNTkpLgoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5LCAzMCwgNTIpLnNlY29uZCAvLz0+IDUyCgkgICAgICogQHR5cGUge251bWJlcn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJzZWNvbmQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5zZWNvbmQgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCAoMC05OTkpLgoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5LCAzMCwgNTIsIDY1NCkubWlsbGlzZWNvbmQgLy89PiA2NTQKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIm1pbGxpc2Vjb25kIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubWlsbGlzZWNvbmQgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgd2VlayB5ZWFyCgkgICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMTIsIDMxKS53ZWVrWWVhciAvLz0+IDIwMTUKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIndlZWtZZWFyIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKHRoaXMpLndlZWtZZWFyIDogTmFOOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIHdlZWsgbnVtYmVyIG9mIHRoZSB3ZWVrIHllYXIgKDEtNTJpc2gpLgoJICAgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZQoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS53ZWVrTnVtYmVyIC8vPT4gMjEKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIndlZWtOdW1iZXIiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla051bWJlciA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsuCgkgICAgICogMSBpcyBNb25kYXkgYW5kIDcgaXMgU3VuZGF5CgkgICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMTEsIDMxKS53ZWVrZGF5IC8vPT4gNAoJICAgICAqIEB0eXBlIHtudW1iZXJ9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAid2Vla2RheSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gcG9zc2libHlDYWNoZWRXZWVrRGF0YSh0aGlzKS53ZWVrZGF5IDogTmFOOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIG9yZGluYWwgKG1lYW5pbmcgdGhlIGRheSBvZiB0aGUgeWVhcikKCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkub3JkaW5hbCAvLz0+IDE0NQoJICAgICAqIEB0eXBlIHtudW1iZXJ8RGF0ZVRpbWV9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAib3JkaW5hbCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gZ3JlZ29yaWFuVG9PcmRpbmFsKHRoaXMuYykub3JkaW5hbCA6IE5hTjsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBzaG9ydCBtb250aCBuYW1lLCBzdWNoIGFzICdPY3QnLgoJICAgICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZAoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkubW9udGhTaG9ydCAvLz0+IE9jdAoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAibW9udGhTaG9ydCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby5tb250aHMoInNob3J0IiwgewoJICAgICAgICBsb2NPYmo6IHRoaXMubG9jCgkgICAgICB9KVt0aGlzLm1vbnRoIC0gMV0gOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIGxvbmcgbW9udGggbmFtZSwgc3VjaCBhcyAnT2N0b2JlcicuCgkgICAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS5tb250aExvbmcgLy89PiBPY3RvYmVyCgkgICAgICogQHR5cGUge3N0cmluZ30KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJtb250aExvbmciLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ubW9udGhzKCJsb25nIiwgewoJICAgICAgICBsb2NPYmo6IHRoaXMubG9jCgkgICAgICB9KVt0aGlzLm1vbnRoIC0gMV0gOiBudWxsOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIHNob3J0IHdlZWtkYXksIHN1Y2ggYXMgJ01vbicuCgkgICAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5U2hvcnQgLy89PiBNb24KCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIndlZWtkYXlTaG9ydCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby53ZWVrZGF5cygic2hvcnQiLCB7CgkgICAgICAgIGxvY09iajogdGhpcy5sb2MKCSAgICAgIH0pW3RoaXMud2Vla2RheSAtIDFdIDogbnVsbDsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBsb25nIHdlZWtkYXksIHN1Y2ggYXMgJ01vbmRheScuCgkgICAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS53ZWVrZGF5TG9uZyAvLz0+IE1vbmRheQoJICAgICAqIEB0eXBlIHtzdHJpbmd9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAid2Vla2RheUxvbmciLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ud2Vla2RheXMoImxvbmciLCB7CgkgICAgICAgIGxvY09iajogdGhpcy5sb2MKCSAgICAgIH0pW3RoaXMud2Vla2RheSAtIDFdIDogbnVsbDsKCSAgICB9CgkgICAgLyoqCgkgICAgICogR2V0IHRoZSBVVEMgb2Zmc2V0IG9mIHRoaXMgRGF0ZVRpbWUgaW4gbWludXRlcwoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm9mZnNldCAvLz0+IC0yNDAKCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5vZmZzZXQgLy89PiAwCgkgICAgICogQHR5cGUge251bWJlcn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJvZmZzZXQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/ICt0aGlzLm8gOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgc2hvcnQgaHVtYW4gbmFtZSBmb3IgdGhlIHpvbmUncyBjdXJyZW50IG9mZnNldCwgZm9yIGV4YW1wbGUgIkVTVCIgb3IgIkVEVCIuCgkgICAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkCgkgICAgICogQHR5cGUge3N0cmluZ30KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJvZmZzZXROYW1lU2hvcnQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgaWYgKHRoaXMuaXNWYWxpZCkgewoJICAgICAgICByZXR1cm4gdGhpcy56b25lLm9mZnNldE5hbWUodGhpcy50cywgewoJICAgICAgICAgIGZvcm1hdDogInNob3J0IiwKCSAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlCgkgICAgICAgIH0pOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgcmV0dXJuIG51bGw7CgkgICAgICB9CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB0aGUgbG9uZyBodW1hbiBuYW1lIGZvciB0aGUgem9uZSdzIGN1cnJlbnQgb2Zmc2V0LCBmb3IgZXhhbXBsZSAiRWFzdGVybiBTdGFuZGFyZCBUaW1lIiBvciAiRWFzdGVybiBEYXlsaWdodCBUaW1lIi4KCSAgICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQKCSAgICAgKiBAdHlwZSB7c3RyaW5nfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIm9mZnNldE5hbWVMb25nIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIGlmICh0aGlzLmlzVmFsaWQpIHsKCSAgICAgICAgcmV0dXJuIHRoaXMuem9uZS5vZmZzZXROYW1lKHRoaXMudHMsIHsKCSAgICAgICAgICBmb3JtYXQ6ICJsb25nIiwKCSAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlCgkgICAgICAgIH0pOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgcmV0dXJuIG51bGw7CgkgICAgICB9CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB3aGV0aGVyIHRoaXMgem9uZSdzIG9mZnNldCBldmVyIGNoYW5nZXMsIGFzIGluIGEgRFNULgoJICAgICAqIEB0eXBlIHtib29sZWFufQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImlzT2Zmc2V0Rml4ZWQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuem9uZS5pc1VuaXZlcnNhbCA6IG51bGw7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIEdldCB3aGV0aGVyIHRoZSBEYXRlVGltZSBpcyBpbiBhIERTVC4KCSAgICAgKiBAdHlwZSB7Ym9vbGVhbn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJpc0luRFNUIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIGlmICh0aGlzLmlzT2Zmc2V0Rml4ZWQpIHsKCSAgICAgICAgcmV0dXJuIGZhbHNlOwoJICAgICAgfSBlbHNlIHsKCSAgICAgICAgcmV0dXJuIHRoaXMub2Zmc2V0ID4gdGhpcy5zZXQoewoJICAgICAgICAgIG1vbnRoOiAxCgkgICAgICAgIH0pLm9mZnNldCB8fCB0aGlzLm9mZnNldCA+IHRoaXMuc2V0KHsKCSAgICAgICAgICBtb250aDogNQoJICAgICAgICB9KS5vZmZzZXQ7CgkgICAgICB9CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIERhdGVUaW1lIGlzIGluIGEgbGVhcCB5ZWFyLCBmYWxzZSBvdGhlcndpc2UKCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2KS5pc0luTGVhcFllYXIgLy89PiB0cnVlCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykuaXNJbkxlYXBZZWFyIC8vPT4gZmFsc2UKCSAgICAgKiBAdHlwZSB7Ym9vbGVhbn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJpc0luTGVhcFllYXIiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKTsKCSAgICB9CgkgICAgLyoqCgkgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRheXMgaW4gdGhpcyBEYXRlVGltZSdzIG1vbnRoCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNiwgMikuZGF5c0luTW9udGggLy89PiAyOQoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYsIDMpLmRheXNJbk1vbnRoIC8vPT4gMzEKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogImRheXNJbk1vbnRoIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIsIHRoaXMubW9udGgpOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIERhdGVUaW1lJ3MgeWVhcgoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYpLmRheXNJblllYXIgLy89PiAzNjYKCSAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDEzKS5kYXlzSW5ZZWFyIC8vPT4gMzY1CgkgICAgICogQHR5cGUge251bWJlcn0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJkYXlzSW5ZZWFyIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBkYXlzSW5ZZWFyKHRoaXMueWVhcikgOiBOYU47CgkgICAgfQoJICAgIC8qKgoJICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3ZWVrcyBpbiB0aGlzIERhdGVUaW1lJ3MgeWVhcgoJICAgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZQoJICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMDQpLndlZWtzSW5XZWVrWWVhciAvLz0+IDUzCgkgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykud2Vla3NJbldlZWtZZWFyIC8vPT4gNTIKCSAgICAgKiBAdHlwZSB7bnVtYmVyfQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIndlZWtzSW5XZWVrWWVhciIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gd2Vla3NJbldlZWtZZWFyKHRoaXMud2Vla1llYXIpIDogTmFOOwoJICAgIH0KCSAgfV0sIFt7CgkgICAga2V5OiAiREFURV9TSE9SVCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gREFURV9TSE9SVDsKCSAgICB9CgkgICAgLyoqCgkgICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzJwoJICAgICAqIEB0eXBlIHtPYmplY3R9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiREFURV9NRUQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIERBVEVfTUVEOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmksIE9jdCAxNCwgMTk4MycKCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIkRBVEVfTUVEX1dJVEhfV0VFS0RBWSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gREFURV9NRURfV0lUSF9XRUVLREFZOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzJwoJICAgICAqIEB0eXBlIHtPYmplY3R9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiREFURV9GVUxMIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBEQVRFX0ZVTEw7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ1R1ZXNkYXksIE9jdG9iZXIgMTQsIDE5ODMnCgkgICAgICogQHR5cGUge09iamVjdH0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJEQVRFX0hVR0UiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIERBVEVfSFVHRTsKCSAgICB9CgkgICAgLyoqCgkgICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIlRJTUVfU0lNUExFIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBUSU1FX1NJTVBMRTsKCSAgICB9CgkgICAgLyoqCgkgICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIlRJTUVfV0lUSF9TRUNPTkRTIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBUSU1FX1dJVEhfU0VDT05EUzsKCSAgICB9CgkgICAgLyoqCgkgICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgQU0gRURUJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCgkgICAgICogQHR5cGUge09iamVjdH0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJUSU1FX1dJVEhfU0hPUlRfT0ZGU0VUIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBUSU1FX1dJVEhfU0hPUlRfT0ZGU0VUOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIlRJTUVfV0lUSF9MT05HX09GRlNFVCIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gVElNRV9XSVRIX0xPTkdfT0ZGU0VUOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMCcsIGFsd2F5cyAyNC1ob3VyLgoJICAgICAqIEB0eXBlIHtPYmplY3R9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiVElNRV8yNF9TSU1QTEUiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIFRJTUVfMjRfU0lNUExFOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMycsIGFsd2F5cyAyNC1ob3VyLgoJICAgICAqIEB0eXBlIHtPYmplY3R9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiVElNRV8yNF9XSVRIX1NFQ09ORFMiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIFRJTUVfMjRfV0lUSF9TRUNPTkRTOwoJICAgIH0KCSAgICAvKioKCSAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBFRFQnLCBhbHdheXMgMjQtaG91ci4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIlRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIFRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQ7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScsIGFsd2F5cyAyNC1ob3VyLgoJICAgICAqIEB0eXBlIHtPYmplY3R9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQ7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzEwLzE0LzE5ODMsIDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIkRBVEVUSU1FX1NIT1JUIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBEQVRFVElNRV9TSE9SVDsKCSAgICB9CgkgICAgLyoqCgkgICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMTAvMTQvMTk4MywgOTozMDozMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgoJICAgICAqIEB0eXBlIHtPYmplY3R9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBEQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFM7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgoJICAgICAqIEB0eXBlIHtPYmplY3R9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiREFURVRJTUVfTUVEIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBEQVRFVElNRV9NRUQ7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MywgOTozMDozMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgoJICAgICAqIEB0eXBlIHtPYmplY3R9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUyIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUzsKCSAgICB9CgkgICAgLyoqCgkgICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpLCAxNCBPY3QgMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgoJICAgICAqIEB0eXBlIHtPYmplY3R9CgkgICAgICovCgoJICB9LCB7CgkgICAga2V5OiAiREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWSIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWTsKCSAgICB9CgkgICAgLyoqCgkgICAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0b2JlciAxNCwgMTk4MywgOTozMCBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIkRBVEVUSU1FX0ZVTEwiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIERBVEVUSU1FX0ZVTEw7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdG9iZXIgMTQsIDE5ODMsIDk6MzA6MzMgQU0gRURUJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCgkgICAgICogQHR5cGUge09iamVjdH0KCSAgICAgKi8KCgkgIH0sIHsKCSAgICBrZXk6ICJEQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUyIsCgkgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CgkgICAgICByZXR1cm4gREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFM7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaWRheSwgT2N0b2JlciAxNCwgMTk4MywgOTozMCBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIkRBVEVUSU1FX0hVR0UiLAoJICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewoJICAgICAgcmV0dXJuIERBVEVUSU1FX0hVR0U7CgkgICAgfQoJICAgIC8qKgoJICAgICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaWRheSwgT2N0b2JlciAxNCwgMTk4MywgOTozMDozMyBBTSBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KCSAgICAgKiBAdHlwZSB7T2JqZWN0fQoJICAgICAqLwoKCSAgfSwgewoJICAgIGtleTogIkRBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTIiwKCSAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKCSAgICAgIHJldHVybiBEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUzsKCSAgICB9CgkgIH1dKTsKCgkgIHJldHVybiBEYXRlVGltZTsKCX0oKTsKCWZ1bmN0aW9uIGZyaWVuZGx5RGF0ZVRpbWUoZGF0ZVRpbWVpc2gpIHsKCSAgaWYgKERhdGVUaW1lLmlzRGF0ZVRpbWUoZGF0ZVRpbWVpc2gpKSB7CgkgICAgcmV0dXJuIGRhdGVUaW1laXNoOwoJICB9IGVsc2UgaWYgKGRhdGVUaW1laXNoICYmIGRhdGVUaW1laXNoLnZhbHVlT2YgJiYgaXNOdW1iZXIoZGF0ZVRpbWVpc2gudmFsdWVPZigpKSkgewoJICAgIHJldHVybiBEYXRlVGltZS5mcm9tSlNEYXRlKGRhdGVUaW1laXNoKTsKCSAgfSBlbHNlIGlmIChkYXRlVGltZWlzaCAmJiB0eXBlb2YgZGF0ZVRpbWVpc2ggPT09ICJvYmplY3QiKSB7CgkgICAgcmV0dXJuIERhdGVUaW1lLmZyb21PYmplY3QoZGF0ZVRpbWVpc2gpOwoJICB9IGVsc2UgewoJICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigiVW5rbm93biBkYXRldGltZSBhcmd1bWVudDogIiArIGRhdGVUaW1laXNoICsgIiwgb2YgdHlwZSAiICsgdHlwZW9mIGRhdGVUaW1laXNoKTsKCSAgfQoJfQoKCXZhciBWRVJTSU9OID0gIjIuMS4xIjsKCgl2YXIgRGF0ZVRpbWVfMSA9IGx1eG9uLkRhdGVUaW1lID0gRGF0ZVRpbWU7Cgl2YXIgRHVyYXRpb25fMSA9IGx1eG9uLkR1cmF0aW9uID0gRHVyYXRpb247CglsdXhvbi5GaXhlZE9mZnNldFpvbmUgPSBGaXhlZE9mZnNldFpvbmU7CglsdXhvbi5JQU5BWm9uZSA9IElBTkFab25lOwoJbHV4b24uSW5mbyA9IEluZm87CglsdXhvbi5JbnRlcnZhbCA9IEludGVydmFsOwoJbHV4b24uSW52YWxpZFpvbmUgPSBJbnZhbGlkWm9uZTsKCWx1eG9uLlNldHRpbmdzID0gU2V0dGluZ3M7CglsdXhvbi5TeXN0ZW1ab25lID0gU3lzdGVtWm9uZTsKCWx1eG9uLlZFUlNJT04gPSBWRVJTSU9OOwoJbHV4b24uWm9uZSA9IFpvbmU7CgoJLy8vLy8vLy8vLy8vLy8vLy8vLy8NCgkvLyBRdWVyeSBTZXR0aW5ncyAvLw0KCS8vLy8vLy8vLy8vLy8vLy8vLy8vDQoJY29uc3QgREVGQVVMVF9RVUVSWV9TRVRUSU5HUyA9IHsNCgkgICAgcmVuZGVyTnVsbEFzOiAiXFwtIiwNCgkgICAgdGFza0xpbmtMb2NhdGlvbjogImVuZCIsDQoJICAgIHRhc2tMaW5rVGV4dDogIvCflJciLA0KCSAgICB0YXNrQ29tcGxldGlvblRyYWNraW5nOiBmYWxzZSwNCgkgICAgdGFza0NvbXBsZXRpb25UZXh0OiAiY29tcGxldGlvbiIsDQoJICAgIHdhcm5PbkVtcHR5UmVzdWx0OiB0cnVlLA0KCSAgICByZWZyZXNoRW5hYmxlZDogdHJ1ZSwNCgkgICAgcmVmcmVzaEludGVydmFsOiAyNTAsDQoJICAgIGRlZmF1bHREYXRlRm9ybWF0OiAiTU1NTSBkZCwgeXl5eSIsDQoJICAgIGRlZmF1bHREYXRlVGltZUZvcm1hdDogImg6bW0gYSAtIE1NTU0gZGQsIHl5eXkiLA0KCSAgICBtYXhSZWN1cnNpdmVSZW5kZXJEZXB0aDogNiwNCgkgICAgdGFibGVJZENvbHVtbk5hbWU6ICJGaWxlIiwNCgkgICAgdGFibGVHcm91cENvbHVtbk5hbWU6ICJHcm91cCIsDQoJfTsNCgkvKiogRGVmYXVsdCBzZXR0aW5ncyBmb3IgZGF0YXZpZXcgb24gaW5zdGFsbC4gKi8NCgkoew0KCSAgICAuLi5ERUZBVUxUX1FVRVJZX1NFVFRJTkdTLA0KCSAgICAuLi57DQoJICAgICAgICBpbmxpbmVRdWVyeVByZWZpeDogIj0iLA0KCSAgICAgICAgaW5saW5lSnNRdWVyeVByZWZpeDogIiQ9IiwNCgkgICAgICAgIGVuYWJsZURhdGF2aWV3SnM6IGZhbHNlLA0KCSAgICAgICAgZW5hYmxlSW5saW5lRGF0YXZpZXdKczogZmFsc2UsDQoJICAgICAgICBwcmV0dHlSZW5kZXJJbmxpbmVGaWVsZHM6IHRydWUsDQoJICAgICAgICBzY2hlbWFWZXJzaW9uOiAxLA0KCSAgICB9LA0KCX0pOwoKCS8qKiBGdW5jdGlvbmFsIHJldHVybiB0eXBlIGZvciBlcnJvciBoYW5kbGluZy4gKi8NCgljbGFzcyBTdWNjZXNzIHsNCgkgICAgY29uc3RydWN0b3IodmFsdWUpIHsNCgkgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsNCgkgICAgICAgIHRoaXMuc3VjY2Vzc2Z1bCA9IHRydWU7DQoJICAgIH0NCgkgICAgbWFwKGYpIHsNCgkgICAgICAgIHJldHVybiBuZXcgU3VjY2VzcyhmKHRoaXMudmFsdWUpKTsNCgkgICAgfQ0KCSAgICBmbGF0TWFwKGYpIHsNCgkgICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpOw0KCSAgICB9DQoJICAgIG9yRWxzZShfdmFsdWUpIHsNCgkgICAgICAgIHJldHVybiB0aGlzLnZhbHVlOw0KCSAgICB9DQoJICAgIG9yRWxzZVRocm93KF9tZXNzYWdlKSB7DQoJICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsNCgkgICAgfQ0KCX0NCgljbGFzcyBGYWlsdXJlIHsNCgkgICAgY29uc3RydWN0b3IoZXJyb3IpIHsNCgkgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjsNCgkgICAgICAgIHRoaXMuc3VjY2Vzc2Z1bCA9IGZhbHNlOw0KCSAgICB9DQoJICAgIG1hcChfZikgew0KCSAgICAgICAgcmV0dXJuIHRoaXM7DQoJICAgIH0NCgkgICAgZmxhdE1hcChfZikgew0KCSAgICAgICAgcmV0dXJuIHRoaXM7DQoJICAgIH0NCgkgICAgb3JFbHNlKHZhbHVlKSB7DQoJICAgICAgICByZXR1cm4gdmFsdWU7DQoJICAgIH0NCgkgICAgb3JFbHNlVGhyb3cobWVzc2FnZSkgew0KCSAgICAgICAgaWYgKG1lc3NhZ2UpDQoJICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UodGhpcy5lcnJvcikpOw0KCSAgICAgICAgZWxzZQ0KCSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiIiArIHRoaXMuZXJyb3IpOw0KCSAgICB9DQoJfQ0KCXZhciBSZXN1bHQ7DQoJKGZ1bmN0aW9uIChSZXN1bHQpIHsNCgkgICAgZnVuY3Rpb24gc3VjY2Vzcyh2YWx1ZSkgew0KCSAgICAgICAgcmV0dXJuIG5ldyBTdWNjZXNzKHZhbHVlKTsNCgkgICAgfQ0KCSAgICBSZXN1bHQuc3VjY2VzcyA9IHN1Y2Nlc3M7DQoJICAgIGZ1bmN0aW9uIGZhaWx1cmUoZXJyb3IpIHsNCgkgICAgICAgIHJldHVybiBuZXcgRmFpbHVyZShlcnJvcik7DQoJICAgIH0NCgkgICAgUmVzdWx0LmZhaWx1cmUgPSBmYWlsdXJlOw0KCSAgICBmdW5jdGlvbiBmbGF0TWFwMihmaXJzdCwgc2Vjb25kLCBmKSB7DQoJICAgICAgICBpZiAoZmlyc3Quc3VjY2Vzc2Z1bCkgew0KCSAgICAgICAgICAgIGlmIChzZWNvbmQuc3VjY2Vzc2Z1bCkNCgkgICAgICAgICAgICAgICAgcmV0dXJuIGYoZmlyc3QudmFsdWUsIHNlY29uZC52YWx1ZSk7DQoJICAgICAgICAgICAgZWxzZQ0KCSAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShzZWNvbmQuZXJyb3IpOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSB7DQoJICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoZmlyc3QuZXJyb3IpOw0KCSAgICAgICAgfQ0KCSAgICB9DQoJICAgIFJlc3VsdC5mbGF0TWFwMiA9IGZsYXRNYXAyOw0KCSAgICBmdW5jdGlvbiBtYXAyKGZpcnN0LCBzZWNvbmQsIGYpIHsNCgkgICAgICAgIHJldHVybiBmbGF0TWFwMihmaXJzdCwgc2Vjb25kLCAoYSwgYikgPT4gc3VjY2VzcyhmKGEsIGIpKSk7DQoJICAgIH0NCgkgICAgUmVzdWx0Lm1hcDIgPSBtYXAyOw0KCX0pKFJlc3VsdCB8fCAoUmVzdWx0ID0ge30pKTsKCgl2YXIgcGFyc2ltbW9uX3VtZF9taW4gPSB7ZXhwb3J0czoge319OwoKCShmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzKSB7CgkhZnVuY3Rpb24obix0KXttb2R1bGUuZXhwb3J0cz10KCk7fSgidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjpjb21tb25qc0dsb2JhbCxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgdD17fTtmdW5jdGlvbiByKGUpe2lmKHRbZV0pcmV0dXJuIHRbZV0uZXhwb3J0czt2YXIgdT10W2VdPXtpOmUsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gbltlXS5jYWxsKHUuZXhwb3J0cyx1LHUuZXhwb3J0cyxyKSx1Lmw9ITAsdS5leHBvcnRzfXJldHVybiByLm09bixyLmM9dCxyLmQ9ZnVuY3Rpb24obix0LGUpe3IubyhuLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobix0LHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6ZX0pO30sci5yPWZ1bmN0aW9uKG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt9LHIubj1mdW5jdGlvbihuKXt2YXIgdD1uJiZuLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBufTtyZXR1cm4gci5kKHQsImEiLHQpLHR9LHIubz1mdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobix0KX0sci5wPSIiLHIoci5zPTApfShbZnVuY3Rpb24obix0LHIpe2Z1bmN0aW9uIGUobil7aWYoISh0aGlzIGluc3RhbmNlb2YgZSkpcmV0dXJuIG5ldyBlKG4pO3RoaXMuXz1uO312YXIgdT1lLnByb3RvdHlwZTtmdW5jdGlvbiBvKG4sdCl7Zm9yKHZhciByPTA7cjxuO3IrKyl0KHIpO31mdW5jdGlvbiBpKG4sdCxyKXtyZXR1cm4gZnVuY3Rpb24obix0KXtvKHQubGVuZ3RoLGZ1bmN0aW9uKHIpe24odFtyXSxyLHQpO30pO30oZnVuY3Rpb24ocixlLHUpe3Q9bih0LHIsZSx1KTt9LHIpLHR9ZnVuY3Rpb24gZihuLHQpe3JldHVybiBpKGZ1bmN0aW9uKHQscixlLHUpe3JldHVybiB0LmNvbmNhdChbbihyLGUsdSldKX0sW10sdCl9ZnVuY3Rpb24gYShuLHQpe3ZhciByPXt2OjAsYnVmOnR9O3JldHVybiBvKG4sZnVuY3Rpb24oKXt2YXIgbjtyPXt2OnIudjw8MXwobj1yLmJ1ZixuWzBdPj43KSxidWY6ZnVuY3Rpb24obil7dmFyIHQ9aShmdW5jdGlvbihuLHQscixlKXtyZXR1cm4gbi5jb25jYXQocj09PWUubGVuZ3RoLTE/QnVmZmVyLmZyb20oW3QsMF0pLnJlYWRVSW50MTZCRSgwKTplLnJlYWRVSW50MTZCRShyKSl9LFtdLG4pO3JldHVybiBCdWZmZXIuZnJvbShmKGZ1bmN0aW9uKG4pe3JldHVybiAobjw8MSY2NTUzNSk+Pjh9LHQpKX0oci5idWYpfTt9KSxyfWZ1bmN0aW9uIGMoKXtyZXR1cm4gInVuZGVmaW5lZCIhPXR5cGVvZiBCdWZmZXJ9ZnVuY3Rpb24gcygpe2lmKCFjKCkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIgZ2xvYmFsIGRvZXMgbm90IGV4aXN0OyBwbGVhc2UgdXNlIHdlYnBhY2sgaWYgeW91IG5lZWQgdG8gcGFyc2UgQnVmZmVycyBpbiB0aGUgYnJvd3Nlci4iKX1mdW5jdGlvbiBsKG4pe3MoKTt2YXIgdD1pKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4rdH0sMCxuKTtpZih0JTghPTApdGhyb3cgbmV3IEVycm9yKCJUaGUgYml0cyBbIituLmpvaW4oIiwgIikrIl0gYWRkIHVwIHRvICIrdCsiIHdoaWNoIGlzIG5vdCBhbiBldmVuIG51bWJlciBvZiBieXRlczsgdGhlIHRvdGFsIHNob3VsZCBiZSBkaXZpc2libGUgYnkgOCIpO3ZhciByLHU9dC84LG89KHI9ZnVuY3Rpb24obil7cmV0dXJuIG4+NDh9LGkoZnVuY3Rpb24obix0KXtyZXR1cm4gbnx8KHIodCk/dDpuKX0sbnVsbCxuKSk7aWYobyl0aHJvdyBuZXcgRXJyb3IobysiIGJpdCByYW5nZSByZXF1ZXN0ZWQgZXhjZWVkcyA0OCBiaXQgKDYgYnl0ZSkgTnVtYmVyIG1heC4iKTtyZXR1cm4gbmV3IGUoZnVuY3Rpb24odCxyKXt2YXIgZT11K3I7cmV0dXJuIGU+dC5sZW5ndGg/eChyLHUudG9TdHJpbmcoKSsiIGJ5dGVzIik6YihlLGkoZnVuY3Rpb24obix0KXt2YXIgcj1hKHQsbi5idWYpO3JldHVybiB7Y29sbDpuLmNvbGwuY29uY2F0KHIudiksYnVmOnIuYnVmfX0se2NvbGw6W10sYnVmOnQuc2xpY2UocixlKX0sbikuY29sbCl9KX1mdW5jdGlvbiBwKG4sdCl7cmV0dXJuIG5ldyBlKGZ1bmN0aW9uKHIsZSl7cmV0dXJuIHMoKSxlK3Q+ci5sZW5ndGg/eChlLHQrIiBieXRlcyBmb3IgIituKTpiKGUrdCxyLnNsaWNlKGUsZSt0KSl9KX1mdW5jdGlvbiBoKG4sdCl7aWYoIm51bWJlciIhPXR5cGVvZihyPXQpfHxNYXRoLmZsb29yKHIpIT09cnx8dDwwfHx0PjYpdGhyb3cgbmV3IEVycm9yKG4rIiByZXF1aXJlcyBpbnRlZ2VyIGxlbmd0aCBpbiByYW5nZSBbMCwgNl0uIik7dmFyIHI7fWZ1bmN0aW9uIGQobil7cmV0dXJuIGgoInVpbnRCRSIsbikscCgidWludEJFKCIrbisiKSIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRVSW50QkUoMCxuKX0pfWZ1bmN0aW9uIHYobil7cmV0dXJuIGgoInVpbnRMRSIsbikscCgidWludExFKCIrbisiKSIsbikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlYWRVSW50TEUoMCxuKX0pfWZ1bmN0aW9uIGcobil7cmV0dXJuIGgoImludEJFIixuKSxwKCJpbnRCRSgiK24rIikiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkSW50QkUoMCxuKX0pfWZ1bmN0aW9uIG0obil7cmV0dXJuIGgoImludExFIixuKSxwKCJpbnRMRSgiK24rIikiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkSW50TEUoMCxuKX0pfWZ1bmN0aW9uIHkobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBlfWZ1bmN0aW9uIEUobil7cmV0dXJuICJbb2JqZWN0IEFycmF5XSI9PT17fS50b1N0cmluZy5jYWxsKG4pfWZ1bmN0aW9uIHcobil7cmV0dXJuIGMoKSYmQnVmZmVyLmlzQnVmZmVyKG4pfWZ1bmN0aW9uIGIobix0KXtyZXR1cm4ge3N0YXR1czohMCxpbmRleDpuLHZhbHVlOnQsZnVydGhlc3Q6LTEsZXhwZWN0ZWQ6W119fWZ1bmN0aW9uIHgobix0KXtyZXR1cm4gRSh0KXx8KHQ9W3RdKSx7c3RhdHVzOiExLGluZGV4Oi0xLHZhbHVlOm51bGwsZnVydGhlc3Q6bixleHBlY3RlZDp0fX1mdW5jdGlvbiBCKG4sdCl7aWYoIXQpcmV0dXJuIG47aWYobi5mdXJ0aGVzdD50LmZ1cnRoZXN0KXJldHVybiBuO3ZhciByPW4uZnVydGhlc3Q9PT10LmZ1cnRoZXN0P2Z1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1lLl9zdXBwb3J0c1NldClyZXR1cm4gZS5fc3VwcG9ydHNTZXQ7dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBTZXQ7cmV0dXJuIGUuX3N1cHBvcnRzU2V0PW4sbn0oKSYmQXJyYXkuZnJvbSl7Zm9yKHZhciByPW5ldyBTZXQobiksdT0wO3U8dC5sZW5ndGg7dSsrKXIuYWRkKHRbdV0pO3ZhciBvPUFycmF5LmZyb20ocik7cmV0dXJuIG8uc29ydCgpLG99Zm9yKHZhciBpPXt9LGY9MDtmPG4ubGVuZ3RoO2YrKylpW25bZl1dPSEwO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKWlbdFthXV09ITA7dmFyIGM9W107Zm9yKHZhciBzIGluIGkpKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGkscykmJmMucHVzaChzKTtyZXR1cm4gYy5zb3J0KCksY30obi5leHBlY3RlZCx0LmV4cGVjdGVkKTp0LmV4cGVjdGVkO3JldHVybiB7c3RhdHVzOm4uc3RhdHVzLGluZGV4Om4uaW5kZXgsdmFsdWU6bi52YWx1ZSxmdXJ0aGVzdDp0LmZ1cnRoZXN0LGV4cGVjdGVkOnJ9fXZhciBqPXt9O2Z1bmN0aW9uIFMobix0KXtpZih3KG4pKXJldHVybiB7b2Zmc2V0OnQsbGluZTotMSxjb2x1bW46LTF9O24gaW4ganx8KGpbbl09e30pO2Zvcih2YXIgcj1qW25dLGU9MCx1PTAsbz0wLGk9dDtpPj0wOyl7aWYoaSBpbiByKXtlPXJbaV0ubGluZSwwPT09byYmKG89cltpXS5saW5lU3RhcnQpO2JyZWFrfSJcbiI9PT1uLmNoYXJBdChpKSYmKHUrKywwPT09byYmKG89aSsxKSksaS0tO312YXIgZj1lK3UsYT10LW87cmV0dXJuIHJbdF09e2xpbmU6ZixsaW5lU3RhcnQ6b30se29mZnNldDp0LGxpbmU6ZisxLGNvbHVtbjphKzF9fWZ1bmN0aW9uIF8obil7aWYoIXkobikpdGhyb3cgbmV3IEVycm9yKCJub3QgYSBwYXJzZXI6ICIrbil9ZnVuY3Rpb24gTChuLHQpe3JldHVybiAic3RyaW5nIj09dHlwZW9mIG4/bi5jaGFyQXQodCk6blt0XX1mdW5jdGlvbiBPKG4pe2lmKCJudW1iZXIiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoIm5vdCBhIG51bWJlcjogIituKX1mdW5jdGlvbiBrKG4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigibm90IGEgZnVuY3Rpb246ICIrbil9ZnVuY3Rpb24gUChuKXtpZigic3RyaW5nIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKCJub3QgYSBzdHJpbmc6ICIrbil9dmFyIHE9MixBPTMsST04LEY9NSpJLE09NCpJLHo9IiAgIjtmdW5jdGlvbiBSKG4sdCl7cmV0dXJuIG5ldyBBcnJheSh0KzEpLmpvaW4obil9ZnVuY3Rpb24gVShuLHQscil7dmFyIGU9dC1uLmxlbmd0aDtyZXR1cm4gZTw9MD9uOlIocixlKStufWZ1bmN0aW9uIFcobix0LHIsZSl7cmV0dXJuIHtmcm9tOm4tdD4wP24tdDowLHRvOm4rcj5lP2U6bityfX1mdW5jdGlvbiBEKG4sdCl7dmFyIHIsZSx1LG8sYSxjPXQuaW5kZXgscz1jLm9mZnNldCxsPTE7aWYocz09PW4ubGVuZ3RoKXJldHVybiAiR290IHRoZSBlbmQgb2YgdGhlIGlucHV0IjtpZih3KG4pKXt2YXIgcD1zLXMlSSxoPXMtcCxkPVcocCxGLE0rSSxuLmxlbmd0aCksdj1mKGZ1bmN0aW9uKG4pe3JldHVybiBmKGZ1bmN0aW9uKG4pe3JldHVybiBVKG4udG9TdHJpbmcoMTYpLDIsIjAiKX0sbil9LGZ1bmN0aW9uKG4sdCl7dmFyIHI9bi5sZW5ndGgsZT1bXSx1PTA7aWYocjw9dClyZXR1cm4gW24uc2xpY2UoKV07Zm9yKHZhciBvPTA7bzxyO28rKyllW3VdfHxlLnB1c2goW10pLGVbdV0ucHVzaChuW29dKSwobysxKSV0PT0wJiZ1Kys7cmV0dXJuIGV9KG4uc2xpY2UoZC5mcm9tLGQudG8pLnRvSlNPTigpLmRhdGEsSSkpO289ZnVuY3Rpb24obil7cmV0dXJuIDA9PT1uLmZyb20mJjE9PT1uLnRvP3tmcm9tOm4uZnJvbSx0bzpuLnRvfTp7ZnJvbTpuLmZyb20vSSx0bzpNYXRoLmZsb29yKG4udG8vSSl9fShkKSxlPXAvSSxyPTMqaCxoPj00JiYocis9MSksbD0yLHU9ZihmdW5jdGlvbihuKXtyZXR1cm4gbi5sZW5ndGg8PTQ/bi5qb2luKCIgIik6bi5zbGljZSgwLDQpLmpvaW4oIiAiKSsiICAiK24uc2xpY2UoNCkuam9pbigiICIpfSx2KSwoYT0oOCooby50bz4wP28udG8tMTpvLnRvKSkudG9TdHJpbmcoMTYpLmxlbmd0aCk8MiYmKGE9Mik7fWVsc2Uge3ZhciBnPW4uc3BsaXQoL1xyXG58W1xuXHJcdTIwMjhcdTIwMjldLyk7cj1jLmNvbHVtbi0xLGU9Yy5saW5lLTEsbz1XKGUscSxBLGcubGVuZ3RoKSx1PWcuc2xpY2Uoby5mcm9tLG8udG8pLGE9by50by50b1N0cmluZygpLmxlbmd0aDt9dmFyIG09ZS1vLmZyb207cmV0dXJuIHcobikmJihhPSg4KihvLnRvPjA/by50by0xOm8udG8pKS50b1N0cmluZygxNikubGVuZ3RoKTwyJiYoYT0yKSxpKGZ1bmN0aW9uKHQsZSx1KXt2YXIgaSxmPXU9PT1tLGM9Zj8iPiAiOno7cmV0dXJuIGk9dyhuKT9VKCg4KihvLmZyb20rdSkpLnRvU3RyaW5nKDE2KSxhLCIwIik6VSgoby5mcm9tK3UrMSkudG9TdHJpbmcoKSxhLCIgIiksW10uY29uY2F0KHQsW2MraSsiIHwgIitlXSxmP1t6K1IoIiAiLGEpKyIgfCAiK1UoIiIsciwiICIpK1IoIl4iLGwpXTpbXSl9LFtdLHUpLmpvaW4oIlxuIil9ZnVuY3Rpb24gTihuLHQpe3JldHVybiBbIlxuIiwiLS0gUEFSU0lORyBGQUlMRUQgIitSKCItIiw1MCksIlxuXG4iLEQobix0KSwiXG5cbiIsKHI9dC5leHBlY3RlZCwxPT09ci5sZW5ndGg/IkV4cGVjdGVkOlxuXG4iK3JbMF06IkV4cGVjdGVkIG9uZSBvZiB0aGUgZm9sbG93aW5nOiBcblxuIityLmpvaW4oIiwgIikpLCJcbiJdLmpvaW4oIiIpO3ZhciByO31mdW5jdGlvbiBHKG4pe3JldHVybiB2b2lkIDAhPT1uLmZsYWdzP24uZmxhZ3M6W24uZ2xvYmFsPyJnIjoiIixuLmlnbm9yZUNhc2U/ImkiOiIiLG4ubXVsdGlsaW5lPyJtIjoiIixuLnVuaWNvZGU/InUiOiIiLG4uc3RpY2t5PyJ5IjoiIl0uam9pbigiIil9ZnVuY3Rpb24gQygpe2Zvcih2YXIgbj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyksdD1uLmxlbmd0aCxyPTA7cjx0O3IrPTEpXyhuW3JdKTtyZXR1cm4gZShmdW5jdGlvbihyLGUpe2Zvcih2YXIgdSxvPW5ldyBBcnJheSh0KSxpPTA7aTx0O2krPTEpe2lmKCEodT1CKG5baV0uXyhyLGUpLHUpKS5zdGF0dXMpcmV0dXJuIHU7b1tpXT11LnZhbHVlLGU9dS5pbmRleDt9cmV0dXJuIEIoYihlLG8pLHUpfSl9ZnVuY3Rpb24gSigpe3ZhciBuPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtpZigwPT09bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJzZXFNYXAgbmVlZHMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50Iik7dmFyIHQ9bi5wb3AoKTtyZXR1cm4gayh0KSxDLmFwcGx5KG51bGwsbikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0LmFwcGx5KG51bGwsbil9KX1mdW5jdGlvbiBUKCl7dmFyIG49W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLHQ9bi5sZW5ndGg7aWYoMD09PXQpcmV0dXJuIFkoInplcm8gYWx0ZXJuYXRlcyIpO2Zvcih2YXIgcj0wO3I8dDtyKz0xKV8obltyXSk7cmV0dXJuIGUoZnVuY3Rpb24odCxyKXtmb3IodmFyIGUsdT0wO3U8bi5sZW5ndGg7dSs9MSlpZigoZT1CKG5bdV0uXyh0LHIpLGUpKS5zdGF0dXMpcmV0dXJuIGU7cmV0dXJuIGV9KX1mdW5jdGlvbiBWKG4sdCl7cmV0dXJuIEgobix0KS5vcihYKFtdKSl9ZnVuY3Rpb24gSChuLHQpe3JldHVybiBfKG4pLF8odCksSihuLHQudGhlbihuKS5tYW55KCksZnVuY3Rpb24obix0KXtyZXR1cm4gW25dLmNvbmNhdCh0KX0pfWZ1bmN0aW9uIEsobil7UChuKTt2YXIgdD0iJyIrbisiJyI7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT1lK24ubGVuZ3RoLG89ci5zbGljZShlLHUpO3JldHVybiBvPT09bj9iKHUsbyk6eChlLHQpfSl9ZnVuY3Rpb24gUShuLHQpeyFmdW5jdGlvbihuKXtpZighKG4gaW5zdGFuY2VvZiBSZWdFeHApKXRocm93IG5ldyBFcnJvcigibm90IGEgcmVnZXhwOiAiK24pO2Zvcih2YXIgdD1HKG4pLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGU9dC5jaGFyQXQocik7aWYoImkiIT09ZSYmIm0iIT09ZSYmInUiIT09ZSYmInMiIT09ZSl0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIHJlZ2V4cCBmbGFnICInK2UrJyI6ICcrbil9fShuKSxhcmd1bWVudHMubGVuZ3RoPj0yP08odCk6dD0wO3ZhciByPWZ1bmN0aW9uKG4pe3JldHVybiBSZWdFeHAoIl4oPzoiK24uc291cmNlKyIpIixHKG4pKX0obiksdT0iIituO3JldHVybiBlKGZ1bmN0aW9uKG4sZSl7dmFyIG89ci5leGVjKG4uc2xpY2UoZSkpO2lmKG8pe2lmKDA8PXQmJnQ8PW8ubGVuZ3RoKXt2YXIgaT1vWzBdLGY9b1t0XTtyZXR1cm4gYihlK2kubGVuZ3RoLGYpfXJldHVybiB4KGUsInZhbGlkIG1hdGNoIGdyb3VwICgwIHRvICIrby5sZW5ndGgrIikgaW4gIit1KX1yZXR1cm4geChlLHUpfSl9ZnVuY3Rpb24gWChuKXtyZXR1cm4gZShmdW5jdGlvbih0LHIpe3JldHVybiBiKHIsbil9KX1mdW5jdGlvbiBZKG4pe3JldHVybiBlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHgocixuKX0pfWZ1bmN0aW9uIFoobil7aWYoeShuKSlyZXR1cm4gZShmdW5jdGlvbih0LHIpe3ZhciBlPW4uXyh0LHIpO3JldHVybiBlLmluZGV4PXIsZS52YWx1ZT0iIixlfSk7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBaKEsobikpO2lmKG4gaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIFooUShuKSk7dGhyb3cgbmV3IEVycm9yKCJub3QgYSBzdHJpbmcsIHJlZ2V4cCwgb3IgcGFyc2VyOiAiK24pfWZ1bmN0aW9uICQobil7cmV0dXJuIF8obiksZShmdW5jdGlvbih0LHIpe3ZhciBlPW4uXyh0LHIpLHU9dC5zbGljZShyLGUuaW5kZXgpO3JldHVybiBlLnN0YXR1cz94KHIsJ25vdCAiJyt1KyciJyk6YihyLG51bGwpfSl9ZnVuY3Rpb24gbm4obil7cmV0dXJuIGsobiksZShmdW5jdGlvbih0LHIpe3ZhciBlPUwodCxyKTtyZXR1cm4gcjx0Lmxlbmd0aCYmbihlKT9iKHIrMSxlKTp4KHIsImEgY2hhcmFjdGVyL2J5dGUgbWF0Y2hpbmcgIituKX0pfWZ1bmN0aW9uIHRuKG4sdCl7YXJndW1lbnRzLmxlbmd0aDwyJiYodD1uLG49dm9pZCAwKTt2YXIgcj1lKGZ1bmN0aW9uKG4sZSl7cmV0dXJuIHIuXz10KCkuXyxyLl8obixlKX0pO3JldHVybiBuP3IuZGVzYyhuKTpyfWZ1bmN0aW9uIHJuKCl7cmV0dXJuIFkoImZhbnRhc3ktbGFuZC9lbXB0eSIpfXUucGFyc2U9ZnVuY3Rpb24obil7aWYoInN0cmluZyIhPXR5cGVvZiBuJiYhdyhuKSl0aHJvdyBuZXcgRXJyb3IoIi5wYXJzZSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgc3RyaW5nIG9yIEJ1ZmZlciBhcyBpdHMgYXJndW1lbnQiKTt2YXIgdCxyPXRoaXMuc2tpcChmbikuXyhuLDApO3JldHVybiB0PXIuc3RhdHVzP3tzdGF0dXM6ITAsdmFsdWU6ci52YWx1ZX06e3N0YXR1czohMSxpbmRleDpTKG4sci5mdXJ0aGVzdCksZXhwZWN0ZWQ6ci5leHBlY3RlZH0sZGVsZXRlIGpbbl0sdH0sdS50cnlQYXJzZT1mdW5jdGlvbihuKXt2YXIgdD10aGlzLnBhcnNlKG4pO2lmKHQuc3RhdHVzKXJldHVybiB0LnZhbHVlO3ZhciByPU4obix0KSxlPW5ldyBFcnJvcihyKTt0aHJvdyBlLnR5cGU9IlBhcnNpbW1vbkVycm9yIixlLnJlc3VsdD10LGV9LHUuYXNzZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuY2hhaW4oZnVuY3Rpb24ocil7cmV0dXJuIG4ocik/WChyKTpZKHQpfSl9LHUub3I9ZnVuY3Rpb24obil7cmV0dXJuIFQodGhpcyxuKX0sdS50cmltPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLndyYXAobixuKX0sdS53cmFwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEoobix0aGlzLHQsZnVuY3Rpb24obix0KXtyZXR1cm4gdH0pfSx1LnRocnU9ZnVuY3Rpb24obil7cmV0dXJuIG4odGhpcyl9LHUudGhlbj1mdW5jdGlvbihuKXtyZXR1cm4gXyhuKSxDKHRoaXMsbikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuWzFdfSl9LHUubWFueT1mdW5jdGlvbigpe3ZhciBuPXRoaXM7cmV0dXJuIGUoZnVuY3Rpb24odCxyKXtmb3IodmFyIGU9W10sdT12b2lkIDA7Oyl7aWYoISh1PUIobi5fKHQsciksdSkpLnN0YXR1cylyZXR1cm4gQihiKHIsZSksdSk7aWYocj09PXUuaW5kZXgpdGhyb3cgbmV3IEVycm9yKCJpbmZpbml0ZSBsb29wIGRldGVjdGVkIGluIC5tYW55KCkgcGFyc2VyIC0tLSBjYWxsaW5nIC5tYW55KCkgb24gYSBwYXJzZXIgd2hpY2ggY2FuIGFjY2VwdCB6ZXJvIGNoYXJhY3RlcnMgaXMgdXN1YWxseSB0aGUgY2F1c2UiKTtyPXUuaW5kZXgsZS5wdXNoKHUudmFsdWUpO319KX0sdS50aWVXaXRoPWZ1bmN0aW9uKG4pe3JldHVybiBQKG4pLHRoaXMubWFwKGZ1bmN0aW9uKHQpe2lmKGZ1bmN0aW9uKG4pe2lmKCFFKG4pKXRocm93IG5ldyBFcnJvcigibm90IGFuIGFycmF5OiAiK24pfSh0KSx0Lmxlbmd0aCl7UCh0WzBdKTtmb3IodmFyIHI9dFswXSxlPTE7ZTx0Lmxlbmd0aDtlKyspUCh0W2VdKSxyKz1uK3RbZV07cmV0dXJuIHJ9cmV0dXJuICIifSl9LHUudGllPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGllV2l0aCgiIil9LHUudGltZXM9ZnVuY3Rpb24obix0KXt2YXIgcj10aGlzO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PW4pLE8obiksTyh0KSxlKGZ1bmN0aW9uKGUsdSl7Zm9yKHZhciBvPVtdLGk9dm9pZCAwLGY9dm9pZCAwLGE9MDthPG47YSs9MSl7aWYoZj1CKGk9ci5fKGUsdSksZiksIWkuc3RhdHVzKXJldHVybiBmO3U9aS5pbmRleCxvLnB1c2goaS52YWx1ZSk7fWZvcig7YTx0JiYoZj1CKGk9ci5fKGUsdSksZiksaS5zdGF0dXMpO2ErPTEpdT1pLmluZGV4LG8ucHVzaChpLnZhbHVlKTtyZXR1cm4gQihiKHUsbyksZil9KX0sdS5yZXN1bHQ9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG59KX0sdS5hdE1vc3Q9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMudGltZXMoMCxuKX0sdS5hdExlYXN0PWZ1bmN0aW9uKG4pe3JldHVybiBKKHRoaXMudGltZXMobiksdGhpcy5tYW55KCksZnVuY3Rpb24obix0KXtyZXR1cm4gbi5jb25jYXQodCl9KX0sdS5tYXA9ZnVuY3Rpb24obil7ayhuKTt2YXIgdD10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9dC5fKHIsZSk7cmV0dXJuIHUuc3RhdHVzP0IoYih1LmluZGV4LG4odS52YWx1ZSkpLHUpOnV9KX0sdS5jb250cmFtYXA9ZnVuY3Rpb24obil7ayhuKTt2YXIgdD10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9dC5wYXJzZShuKHIuc2xpY2UoZSkpKTtyZXR1cm4gdS5zdGF0dXM/YihlK3IubGVuZ3RoLHUudmFsdWUpOnV9KX0sdS5wcm9tYXA9ZnVuY3Rpb24obix0KXtyZXR1cm4gayhuKSxrKHQpLHRoaXMuY29udHJhbWFwKG4pLm1hcCh0KX0sdS5za2lwPWZ1bmN0aW9uKG4pe3JldHVybiBDKHRoaXMsbikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuWzBdfSl9LHUubWFyaz1mdW5jdGlvbigpe3JldHVybiBKKGVuLHRoaXMsZW4sZnVuY3Rpb24obix0LHIpe3JldHVybiB7c3RhcnQ6bix2YWx1ZTp0LGVuZDpyfX0pfSx1Lm5vZGU9ZnVuY3Rpb24obil7cmV0dXJuIEooZW4sdGhpcyxlbixmdW5jdGlvbih0LHIsZSl7cmV0dXJuIHtuYW1lOm4sdmFsdWU6cixzdGFydDp0LGVuZDplfX0pfSx1LnNlcEJ5PWZ1bmN0aW9uKG4pe3JldHVybiBWKHRoaXMsbil9LHUuc2VwQnkxPWZ1bmN0aW9uKG4pe3JldHVybiBIKHRoaXMsbil9LHUubG9va2FoZWFkPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnNraXAoWihuKSl9LHUubm90Rm9sbG93ZWRCeT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5za2lwKCQobikpfSx1LmRlc2M9ZnVuY3Rpb24obil7RShuKXx8KG49W25dKTt2YXIgdD10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9dC5fKHIsZSk7cmV0dXJuIHUuc3RhdHVzfHwodS5leHBlY3RlZD1uKSx1fSl9LHUuZmFsbGJhY2s9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMub3IoWChuKSl9LHUuYXA9ZnVuY3Rpb24obil7cmV0dXJuIEoobix0aGlzLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4odCl9KX0sdS5jaGFpbj1mdW5jdGlvbihuKXt2YXIgdD10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9dC5fKHIsZSk7cmV0dXJuIHUuc3RhdHVzP0Iobih1LnZhbHVlKS5fKHIsdS5pbmRleCksdSk6dX0pfSx1LmNvbmNhdD11Lm9yLHUuZW1wdHk9cm4sdS5vZj1YLHVbImZhbnRhc3ktbGFuZC9hcCJdPXUuYXAsdVsiZmFudGFzeS1sYW5kL2NoYWluIl09dS5jaGFpbix1WyJmYW50YXN5LWxhbmQvY29uY2F0Il09dS5jb25jYXQsdVsiZmFudGFzeS1sYW5kL2VtcHR5Il09dS5lbXB0eSx1WyJmYW50YXN5LWxhbmQvb2YiXT11Lm9mLHVbImZhbnRhc3ktbGFuZC9tYXAiXT11Lm1hcDt2YXIgZW49ZShmdW5jdGlvbihuLHQpe3JldHVybiBiKHQsUyhuLHQpKX0pLHVuPWUoZnVuY3Rpb24obix0KXtyZXR1cm4gdD49bi5sZW5ndGg/eCh0LCJhbnkgY2hhcmFjdGVyL2J5dGUiKTpiKHQrMSxMKG4sdCkpfSksb249ZShmdW5jdGlvbihuLHQpe3JldHVybiBiKG4ubGVuZ3RoLG4uc2xpY2UodCkpfSksZm49ZShmdW5jdGlvbihuLHQpe3JldHVybiB0PG4ubGVuZ3RoP3godCwiRU9GIik6Yih0LG51bGwpfSksYW49USgvWzAtOV0vKS5kZXNjKCJhIGRpZ2l0IiksY249USgvWzAtOV0qLykuZGVzYygib3B0aW9uYWwgZGlnaXRzIiksc249USgvW2Etel0vaSkuZGVzYygiYSBsZXR0ZXIiKSxsbj1RKC9bYS16XSovaSkuZGVzYygib3B0aW9uYWwgbGV0dGVycyIpLHBuPVEoL1xzKi8pLmRlc2MoIm9wdGlvbmFsIHdoaXRlc3BhY2UiKSxobj1RKC9ccysvKS5kZXNjKCJ3aGl0ZXNwYWNlIiksZG49SygiXHIiKSx2bj1LKCJcbiIpLGduPUsoIlxyXG4iKSxtbj1UKGduLHZuLGRuKS5kZXNjKCJuZXdsaW5lIikseW49VChtbixmbik7ZS5hbGw9b24sZS5hbHQ9VCxlLmFueT11bixlLmNyPWRuLGUuY3JlYXRlTGFuZ3VhZ2U9ZnVuY3Rpb24obil7dmFyIHQ9e307Zm9yKHZhciByIGluIG4pKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJmZ1bmN0aW9uKHIpe3Rbcl09dG4oZnVuY3Rpb24oKXtyZXR1cm4gbltyXSh0KX0pO30ocik7cmV0dXJuIHR9LGUuY3JsZj1nbixlLmN1c3RvbT1mdW5jdGlvbihuKXtyZXR1cm4gZShuKGIseCkpfSxlLmRpZ2l0PWFuLGUuZGlnaXRzPWNuLGUuZW1wdHk9cm4sZS5lbmQ9eW4sZS5lb2Y9Zm4sZS5mYWlsPVksZS5mb3JtYXRFcnJvcj1OLGUuaW5kZXg9ZW4sZS5pc1BhcnNlcj15LGUubGF6eT10bixlLmxldHRlcj1zbixlLmxldHRlcnM9bG4sZS5sZj12bixlLmxvb2thaGVhZD1aLGUubWFrZUZhaWx1cmU9eCxlLm1ha2VTdWNjZXNzPWIsZS5uZXdsaW5lPW1uLGUubm9uZU9mPWZ1bmN0aW9uKG4pe3JldHVybiBubihmdW5jdGlvbih0KXtyZXR1cm4gbi5pbmRleE9mKHQpPDB9KS5kZXNjKCJub25lIG9mICciK24rIiciKX0sZS5ub3RGb2xsb3dlZEJ5PSQsZS5vZj1YLGUub25lT2Y9ZnVuY3Rpb24obil7Zm9yKHZhciB0PW4uc3BsaXQoIiIpLHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdPSInIit0W3JdKyInIjtyZXR1cm4gbm4oZnVuY3Rpb24odCl7cmV0dXJuIG4uaW5kZXhPZih0KT49MH0pLmRlc2ModCl9LGUub3B0V2hpdGVzcGFjZT1wbixlLlBhcnNlcj1lLGUucmFuZ2U9ZnVuY3Rpb24obix0KXtyZXR1cm4gbm4oZnVuY3Rpb24ocil7cmV0dXJuIG48PXImJnI8PXR9KS5kZXNjKG4rIi0iK3QpfSxlLnJlZ2V4PVEsZS5yZWdleHA9USxlLnNlcEJ5PVYsZS5zZXBCeTE9SCxlLnNlcT1DLGUuc2VxTWFwPUosZS5zZXFPYmo9ZnVuY3Rpb24oKXtmb3IodmFyIG4sdD17fSxyPTAsdT0obj1hcmd1bWVudHMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobikpLG89dS5sZW5ndGgsaT0wO2k8bztpKz0xKXt2YXIgZj11W2ldO2lmKCF5KGYpKXtpZihFKGYpJiYyPT09Zi5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgZlswXSYmeShmWzFdKSl7dmFyIGE9ZlswXTtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxhKSl0aHJvdyBuZXcgRXJyb3IoInNlcU9iajogZHVwbGljYXRlIGtleSAiK2EpO3RbYV09ITAscisrO2NvbnRpbnVlfXRocm93IG5ldyBFcnJvcigic2VxT2JqIGFyZ3VtZW50cyBtdXN0IGJlIHBhcnNlcnMgb3IgW3N0cmluZywgcGFyc2VyXSBhcnJheSBwYWlycy4iKX19aWYoMD09PXIpdGhyb3cgbmV3IEVycm9yKCJzZXFPYmogZXhwZWN0cyBhdCBsZWFzdCBvbmUgbmFtZWQgcGFyc2VyLCBmb3VuZCB6ZXJvIik7cmV0dXJuIGUoZnVuY3Rpb24obix0KXtmb3IodmFyIHIsZT17fSxpPTA7aTxvO2krPTEpe3ZhciBmLGE7aWYoRSh1W2ldKT8oZj11W2ldWzBdLGE9dVtpXVsxXSk6KGY9bnVsbCxhPXVbaV0pLCEocj1CKGEuXyhuLHQpLHIpKS5zdGF0dXMpcmV0dXJuIHI7ZiYmKGVbZl09ci52YWx1ZSksdD1yLmluZGV4O31yZXR1cm4gQihiKHQsZSkscil9KX0sZS5zdHJpbmc9SyxlLnN1Y2NlZWQ9WCxlLnRha2VXaGlsZT1mdW5jdGlvbihuKXtyZXR1cm4gayhuKSxlKGZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPXI7ZTx0Lmxlbmd0aCYmbihMKHQsZSkpOyllKys7cmV0dXJuIGIoZSx0LnNsaWNlKHIsZSkpfSl9LGUudGVzdD1ubixlLndoaXRlc3BhY2U9aG4sZVsiZmFudGFzeS1sYW5kL2VtcHR5Il09cm4sZVsiZmFudGFzeS1sYW5kL29mIl09WCxlLkJpbmFyeT17Yml0U2VxOmwsYml0U2VxT2JqOmZ1bmN0aW9uKG4pe3MoKTt2YXIgdD17fSxyPTAsZT1mKGZ1bmN0aW9uKG4pe2lmKEUobikpe3ZhciBlPW47aWYoMiE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiWyIrZS5qb2luKCIsICIpKyJdIHNob3VsZCBiZSBsZW5ndGggMiwgZ290IGxlbmd0aCAiK2UubGVuZ3RoKTtpZihQKGVbMF0pLE8oZVsxXSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZVswXSkpdGhyb3cgbmV3IEVycm9yKCJkdXBsaWNhdGUga2V5IGluIGJpdFNlcU9iajogIitlWzBdKTtyZXR1cm4gdFtlWzBdXT0hMCxyKyssZX1yZXR1cm4gTyhuKSxbbnVsbCxuXX0sbik7aWYocjwxKXRocm93IG5ldyBFcnJvcigiYml0U2VxT2JqIGV4cGVjdHMgYXQgbGVhc3Qgb25lIG5hbWVkIHBhaXIsIGdvdCBbIituLmpvaW4oIiwgIikrIl0iKTt2YXIgdT1mKGZ1bmN0aW9uKG4pe3JldHVybiBuWzBdfSxlKTtyZXR1cm4gbChmKGZ1bmN0aW9uKG4pe3JldHVybiBuWzFdfSxlKSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBpKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG51bGwhPT10WzBdJiYoblt0WzBdXT10WzFdKSxufSx7fSxmKGZ1bmN0aW9uKHQscil7cmV0dXJuIFt0LG5bcl1dfSx1KSl9KX0sYnl0ZTpmdW5jdGlvbihuKXtpZihzKCksTyhuKSxuPjI1NSl0aHJvdyBuZXcgRXJyb3IoIlZhbHVlIHNwZWNpZmllZCB0byBieXRlIGNvbnN0cnVjdG9yICgiK24rIj0weCIrbi50b1N0cmluZygxNikrIikgaXMgbGFyZ2VyIGluIHZhbHVlIHRoYW4gYSBzaW5nbGUgYnl0ZS4iKTt2YXIgdD0obj4xNT8iMHgiOiIweDAiKStuLnRvU3RyaW5nKDE2KTtyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PUwocixlKTtyZXR1cm4gdT09PW4/YihlKzEsdSk6eChlLHQpfSl9LGJ1ZmZlcjpmdW5jdGlvbihuKXtyZXR1cm4gcCgiYnVmZmVyIixuKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIEJ1ZmZlci5mcm9tKG4pfSl9LGVuY29kZWRTdHJpbmc6ZnVuY3Rpb24obix0KXtyZXR1cm4gcCgic3RyaW5nIix0KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcobil9KX0sdWludEJFOmQsdWludDhCRTpkKDEpLHVpbnQxNkJFOmQoMiksdWludDMyQkU6ZCg0KSx1aW50TEU6dix1aW50OExFOnYoMSksdWludDE2TEU6digyKSx1aW50MzJMRTp2KDQpLGludEJFOmcsaW50OEJFOmcoMSksaW50MTZCRTpnKDIpLGludDMyQkU6Zyg0KSxpbnRMRTptLGludDhMRTptKDEpLGludDE2TEU6bSgyKSxpbnQzMkxFOm0oNCksZmxvYXRCRTpwKCJmbG9hdEJFIiw0KS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVhZEZsb2F0QkUoMCl9KSxmbG9hdExFOnAoImZsb2F0TEUiLDQpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZWFkRmxvYXRMRSgwKX0pLGRvdWJsZUJFOnAoImRvdWJsZUJFIiw4KS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVhZERvdWJsZUJFKDApfSksZG91YmxlTEU6cCgiZG91YmxlTEUiLDgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZWFkRG91YmxlTEUoMCl9KX0sbi5leHBvcnRzPWU7fV0pfSk7Cgl9KHBhcnNpbW1vbl91bWRfbWluKSk7CgoJdmFyIGVtb2ppUmVnZXggPSAoKSA9PiB7CgkJLy8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppCgkJcmV0dXJuIC9cdUQ4M0NcdURGRjRcdURCNDBcdURDNjdcdURCNDBcdURDNjIoPzpcdURCNDBcdURDNzdcdURCNDBcdURDNkNcdURCNDBcdURDNzN8XHVEQjQwXHVEQzczXHVEQjQwXHVEQzYzXHVEQjQwXHVEQzc0fFx1REI0MFx1REM2NVx1REI0MFx1REM2RVx1REI0MFx1REM2NylcdURCNDBcdURDN0Z8KD86XHVEODNFXHVEREQxXHVEODNDXHVERkZGXHUyMDBEXHUyNzY0KD86XHVGRTBGXHUyMDBEKD86XHVEODNEXHVEQzhCXHUyMDBEKT98XHUyMDBEKD86XHVEODNEXHVEQzhCXHUyMDBEKT8pXHVEODNFXHVEREQxfFx1RDgzRFx1REM2OVx1RDgzQ1x1REZGRlx1MjAwRFx1RDgzRVx1REQxRFx1MjAwRCg/Olx1RDgzRFtcdURDNjhcdURDNjldKXxcdUQ4M0VcdURFRjFcdUQ4M0NcdURGRkZcdTIwMERcdUQ4M0VcdURFRjIpKD86XHVEODNDW1x1REZGQi1cdURGRkVdKXwoPzpcdUQ4M0VcdURERDFcdUQ4M0NcdURGRkVcdTIwMERcdTI3NjQoPzpcdUZFMEZcdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMEQpP3xcdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMEQpPylcdUQ4M0VcdURERDF8XHVEODNEXHVEQzY5XHVEODNDXHVERkZFXHUyMDBEXHVEODNFXHVERDFEXHUyMDBEKD86XHVEODNEW1x1REM2OFx1REM2OV0pfFx1RDgzRVx1REVGMVx1RDgzQ1x1REZGRVx1MjAwRFx1RDgzRVx1REVGMikoPzpcdUQ4M0NbXHVERkZCLVx1REZGRFx1REZGRl0pfCg/Olx1RDgzRVx1REREMVx1RDgzQ1x1REZGRFx1MjAwRFx1Mjc2NCg/Olx1RkUwRlx1MjAwRCg/Olx1RDgzRFx1REM4Qlx1MjAwRCk/fFx1MjAwRCg/Olx1RDgzRFx1REM4Qlx1MjAwRCk/KVx1RDgzRVx1REREMXxcdUQ4M0RcdURDNjlcdUQ4M0NcdURGRkRcdTIwMERcdUQ4M0VcdUREMURcdTIwMEQoPzpcdUQ4M0RbXHVEQzY4XHVEQzY5XSl8XHVEODNFXHVERUYxXHVEODNDXHVERkZEXHUyMDBEXHVEODNFXHVERUYyKSg/Olx1RDgzQ1tcdURGRkJcdURGRkNcdURGRkVcdURGRkZdKXwoPzpcdUQ4M0VcdURERDFcdUQ4M0NcdURGRkNcdTIwMERcdTI3NjQoPzpcdUZFMEZcdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMEQpP3xcdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMEQpPylcdUQ4M0VcdURERDF8XHVEODNEXHVEQzY5XHVEODNDXHVERkZDXHUyMDBEXHVEODNFXHVERDFEXHUyMDBEKD86XHVEODNEW1x1REM2OFx1REM2OV0pfFx1RDgzRVx1REVGMVx1RDgzQ1x1REZGQ1x1MjAwRFx1RDgzRVx1REVGMikoPzpcdUQ4M0NbXHVERkZCXHVERkZELVx1REZGRl0pfCg/Olx1RDgzRVx1REREMVx1RDgzQ1x1REZGQlx1MjAwRFx1Mjc2NCg/Olx1RkUwRlx1MjAwRCg/Olx1RDgzRFx1REM4Qlx1MjAwRCk/fFx1MjAwRCg/Olx1RDgzRFx1REM4Qlx1MjAwRCk/KVx1RDgzRVx1REREMXxcdUQ4M0RcdURDNjlcdUQ4M0NcdURGRkJcdTIwMERcdUQ4M0VcdUREMURcdTIwMEQoPzpcdUQ4M0RbXHVEQzY4XHVEQzY5XSl8XHVEODNFXHVERUYxXHVEODNDXHVERkZCXHUyMDBEXHVEODNFXHVERUYyKSg/Olx1RDgzQ1tcdURGRkMtXHVERkZGXSl8XHVEODNEXHVEQzY4KD86XHVEODNDXHVERkZCKD86XHUyMDBEKD86XHUyNzY0KD86XHVGRTBGXHUyMDBEKD86XHVEODNEXHVEQzhCXHUyMDBEXHVEODNEXHVEQzY4KD86XHVEODNDW1x1REZGQi1cdURGRkZdKXxcdUQ4M0RcdURDNjgoPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pKXxcdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMERcdUQ4M0RcdURDNjgoPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pfFx1RDgzRFx1REM2OCg/Olx1RDgzQ1tcdURGRkItXHVERkZGXSkpKXxcdUQ4M0VcdUREMURcdTIwMERcdUQ4M0RcdURDNjgoPzpcdUQ4M0NbXHVERkZDLVx1REZGRl0pfFtcdTI2OTVcdTI2OTZcdTI3MDhdXHVGRTBGfFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRVtcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXSkpP3woPzpcdUQ4M0NbXHVERkZDLVx1REZGRl0pXHUyMDBEXHUyNzY0KD86XHVGRTBGXHUyMDBEKD86XHVEODNEXHVEQzhCXHUyMDBEXHVEODNEXHVEQzY4KD86XHVEODNDW1x1REZGQi1cdURGRkZdKXxcdUQ4M0RcdURDNjgoPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pKXxcdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMERcdUQ4M0RcdURDNjgoPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pfFx1RDgzRFx1REM2OCg/Olx1RDgzQ1tcdURGRkItXHVERkZGXSkpKXxcdTIwMEQoPzpcdTI3NjQoPzpcdUZFMEZcdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMEQpP3xcdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMEQpPylcdUQ4M0RcdURDNjh8KD86XHVEODNEW1x1REM2OFx1REM2OV0pXHUyMDBEKD86XHVEODNEXHVEQzY2XHUyMDBEXHVEODNEXHVEQzY2fFx1RDgzRFx1REM2N1x1MjAwRCg/Olx1RDgzRFtcdURDNjZcdURDNjddKSl8XHVEODNEXHVEQzY2XHUyMDBEXHVEODNEXHVEQzY2fFx1RDgzRFx1REM2N1x1MjAwRCg/Olx1RDgzRFtcdURDNjZcdURDNjddKXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0VbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF0pfFx1RDgzQ1x1REZGRlx1MjAwRCg/Olx1RDgzRVx1REQxRFx1MjAwRFx1RDgzRFx1REM2OCg/Olx1RDgzQ1tcdURGRkItXHVERkZFXSl8XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFW1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdKXxcdUQ4M0NcdURGRkVcdTIwMEQoPzpcdUQ4M0VcdUREMURcdTIwMERcdUQ4M0RcdURDNjgoPzpcdUQ4M0NbXHVERkZCLVx1REZGRFx1REZGRl0pfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRVtcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXSl8XHVEODNDXHVERkZEXHUyMDBEKD86XHVEODNFXHVERDFEXHUyMDBEXHVEODNEXHVEQzY4KD86XHVEODNDW1x1REZGQlx1REZGQ1x1REZGRVx1REZGRl0pfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRVtcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXSl8XHVEODNDXHVERkZDXHUyMDBEKD86XHVEODNFXHVERDFEXHUyMDBEXHVEODNEXHVEQzY4KD86XHVEODNDW1x1REZGQlx1REZGRC1cdURGRkZdKXxcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0VbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF0pfCg/Olx1RDgzQ1x1REZGRlx1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1RDgzQ1x1REZGRVx1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1RDgzQ1x1REZGRFx1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1RDgzQ1x1REZGQ1x1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdKVx1RkUwRnxcdTIwMEQoPzooPzpcdUQ4M0RbXHVEQzY4XHVEQzY5XSlcdTIwMEQoPzpcdUQ4M0RbXHVEQzY2XHVEQzY3XSl8XHVEODNEW1x1REM2Nlx1REM2N10pfFx1RDgzQ1x1REZGRlx1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1RDgzQ1x1REZGRVx1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1RDgzQ1x1REZGRFx1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1RDgzQ1x1REZGQ1x1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1RDgzQ1x1REZGRnxcdUQ4M0NcdURGRkV8XHVEODNDXHVERkZEfFx1RDgzQ1x1REZGQ3xcdTIwMERbXHUyNjk1XHUyNjk2XHUyNzA4XSk/fCg/Olx1RDgzRFx1REM2OSg/Olx1RDgzQ1x1REZGQlx1MjAwRFx1Mjc2NCg/Olx1RkUwRlx1MjAwRCg/Olx1RDgzRFx1REM4Qlx1MjAwRCg/Olx1RDgzRFtcdURDNjhcdURDNjldKXxcdUQ4M0RbXHVEQzY4XHVEQzY5XSl8XHUyMDBEKD86XHVEODNEXHVEQzhCXHUyMDBEKD86XHVEODNEW1x1REM2OFx1REM2OV0pfFx1RDgzRFtcdURDNjhcdURDNjldKSl8KD86XHVEODNDW1x1REZGQy1cdURGRkZdKVx1MjAwRFx1Mjc2NCg/Olx1RkUwRlx1MjAwRCg/Olx1RDgzRFx1REM4Qlx1MjAwRCg/Olx1RDgzRFtcdURDNjhcdURDNjldKXxcdUQ4M0RbXHVEQzY4XHVEQzY5XSl8XHUyMDBEKD86XHVEODNEXHVEQzhCXHUyMDBEKD86XHVEODNEW1x1REM2OFx1REM2OV0pfFx1RDgzRFtcdURDNjhcdURDNjldKSkpfFx1RDgzRVx1REREMSg/Olx1RDgzQ1tcdURGRkItXHVERkZGXSlcdTIwMERcdUQ4M0VcdUREMURcdTIwMERcdUQ4M0VcdURERDEpKD86XHVEODNDW1x1REZGQi1cdURGRkZdKXxcdUQ4M0RcdURDNjlcdTIwMERcdUQ4M0RcdURDNjlcdTIwMEQoPzpcdUQ4M0RcdURDNjZcdTIwMERcdUQ4M0RcdURDNjZ8XHVEODNEXHVEQzY3XHUyMDBEKD86XHVEODNEW1x1REM2Nlx1REM2N10pKXxcdUQ4M0RcdURDNjkoPzpcdTIwMEQoPzpcdTI3NjQoPzpcdUZFMEZcdTIwMEQoPzpcdUQ4M0RcdURDOEJcdTIwMEQoPzpcdUQ4M0RbXHVEQzY4XHVEQzY5XSl8XHVEODNEW1x1REM2OFx1REM2OV0pfFx1MjAwRCg/Olx1RDgzRFx1REM4Qlx1MjAwRCg/Olx1RDgzRFtcdURDNjhcdURDNjldKXxcdUQ4M0RbXHVEQzY4XHVEQzY5XSkpfFx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRVtcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXSl8XHVEODNDXHVERkZGXHUyMDBEKD86XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFW1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdKXxcdUQ4M0NcdURGRkVcdTIwMEQoPzpcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0VbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF0pfFx1RDgzQ1x1REZGRFx1MjAwRCg/Olx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRVtcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXSl8XHVEODNDXHVERkZDXHUyMDBEKD86XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFW1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdKXxcdUQ4M0NcdURGRkJcdTIwMEQoPzpcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0VbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF0pKXxcdUQ4M0VcdURERDEoPzpcdTIwMEQoPzpcdUQ4M0VcdUREMURcdTIwMERcdUQ4M0VcdURERDF8XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY4NFx1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFW1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdKXxcdUQ4M0NcdURGRkZcdTIwMEQoPzpcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjg0XHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0VbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF0pfFx1RDgzQ1x1REZGRVx1MjAwRCg/Olx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGODRcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRVtcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXSl8XHVEODNDXHVERkZEXHUyMDBEKD86XHVEODNDW1x1REYzRVx1REY3M1x1REY3Q1x1REY4NFx1REY5M1x1REZBNFx1REZBOFx1REZFQlx1REZFRF18XHVEODNEW1x1RENCQlx1RENCQ1x1REQyN1x1REQyQ1x1REU4MFx1REU5Ml18XHVEODNFW1x1RERBRi1cdUREQjNcdUREQkNcdUREQkRdKXxcdUQ4M0NcdURGRkNcdTIwMEQoPzpcdUQ4M0NbXHVERjNFXHVERjczXHVERjdDXHVERjg0XHVERjkzXHVERkE0XHVERkE4XHVERkVCXHVERkVEXXxcdUQ4M0RbXHVEQ0JCXHVEQ0JDXHVERDI3XHVERDJDXHVERTgwXHVERTkyXXxcdUQ4M0VbXHVEREFGLVx1RERCM1x1RERCQ1x1RERCRF0pfFx1RDgzQ1x1REZGQlx1MjAwRCg/Olx1RDgzQ1tcdURGM0VcdURGNzNcdURGN0NcdURGODRcdURGOTNcdURGQTRcdURGQThcdURGRUJcdURGRURdfFx1RDgzRFtcdURDQkJcdURDQkNcdUREMjdcdUREMkNcdURFODBcdURFOTJdfFx1RDgzRVtcdUREQUYtXHVEREIzXHVEREJDXHVEREJEXSkpfFx1RDgzRFx1REM2OVx1MjAwRFx1RDgzRFx1REM2Nlx1MjAwRFx1RDgzRFx1REM2NnxcdUQ4M0RcdURDNjlcdTIwMERcdUQ4M0RcdURDNjlcdTIwMEQoPzpcdUQ4M0RbXHVEQzY2XHVEQzY3XSl8XHVEODNEXHVEQzY5XHUyMDBEXHVEODNEXHVEQzY3XHUyMDBEKD86XHVEODNEW1x1REM2Nlx1REM2N10pfCg/Olx1RDgzRFx1REM0MVx1RkUwRj9cdTIwMERcdUQ4M0RcdURERTh8XHVEODNFXHVEREQxKD86XHVEODNDXHVERkZGXHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF18XHVEODNDXHVERkZFXHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF18XHVEODNDXHVERkZEXHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF18XHVEODNDXHVERkZDXHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF18XHVEODNDXHVERkZCXHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF18XHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF0pfFx1RDgzRFx1REM2OSg/Olx1RDgzQ1x1REZGRlx1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1RDgzQ1x1REZGRVx1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1RDgzQ1x1REZGRFx1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1RDgzQ1x1REZGQ1x1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1RDgzQ1x1REZGQlx1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdfFx1MjAwRFtcdTI2OTVcdTI2OTZcdTI3MDhdKXxcdUQ4M0RcdURFMzZcdTIwMERcdUQ4M0NcdURGMkJ8XHVEODNDXHVERkYzXHVGRTBGP1x1MjAwRFx1MjZBN3xcdUQ4M0RcdURDM0JcdTIwMERcdTI3NDR8KD86KD86XHVEODNDW1x1REZDM1x1REZDNFx1REZDQV18XHVEODNEW1x1REM2RVx1REM3MFx1REM3MVx1REM3M1x1REM3N1x1REM4MVx1REM4Mlx1REM4Nlx1REM4N1x1REU0NS1cdURFNDdcdURFNEJcdURFNERcdURFNEVcdURFQTNcdURFQjQtXHVERUI2XXxcdUQ4M0VbXHVERDI2XHVERDM1XHVERDM3LVx1REQzOVx1REQzRFx1REQzRVx1RERCOFx1RERCOVx1RERDRC1cdUREQ0ZcdURERDRcdURERDYtXHVEREREXSkoPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pfFx1RDgzRFx1REM2RnxcdUQ4M0VbXHVERERFXHVERERGXSlcdTIwMERbXHUyNjQwXHUyNjQyXXwoPzpcdTI2Rjl8XHVEODNDW1x1REZDQlx1REZDQ118XHVEODNEXHVERDc1KSg/Oig/Olx1RkUwRnxcdUQ4M0NbXHVERkZCLVx1REZGRl0pXHUyMDBEW1x1MjY0MFx1MjY0Ml18XHUyMDBEW1x1MjY0MFx1MjY0Ml0pfFx1RDgzQ1x1REZGNFx1MjAwRFx1MjYyMHwoPzpcdUQ4M0NbXHVERkMzXHVERkM0XHVERkNBXXxcdUQ4M0RbXHVEQzZFXHVEQzcwXHVEQzcxXHVEQzczXHVEQzc3XHVEQzgxXHVEQzgyXHVEQzg2XHVEQzg3XHVERTQ1LVx1REU0N1x1REU0Qlx1REU0RFx1REU0RVx1REVBM1x1REVCNC1cdURFQjZdfFx1RDgzRVtcdUREMjZcdUREMzVcdUREMzctXHVERDM5XHVERDNDLVx1REQzRVx1RERCOFx1RERCOVx1RERDRC1cdUREQ0ZcdURERDRcdURERDYtXHVEREREXSlcdTIwMERbXHUyNjQwXHUyNjQyXXxbXHhBOVx4QUVcdTIwM0NcdTIwNDlcdTIxMjJcdTIxMzlcdTIxOTQtXHUyMTk5XHUyMUE5XHUyMUFBXHUyMzFBXHUyMzFCXHUyMzI4XHUyM0NGXHUyM0VELVx1MjNFRlx1MjNGMVx1MjNGMlx1MjNGOC1cdTIzRkFcdTI0QzJcdTI1QUFcdTI1QUJcdTI1QjZcdTI1QzBcdTI1RkJcdTI1RkNcdTI1RkVcdTI2MDAtXHUyNjA0XHUyNjBFXHUyNjExXHUyNjE0XHUyNjE1XHUyNjE4XHUyNjIwXHUyNjIyXHUyNjIzXHUyNjI2XHUyNjJBXHUyNjJFXHUyNjJGXHUyNjM4LVx1MjYzQVx1MjY0MFx1MjY0Mlx1MjY0OC1cdTI2NTNcdTI2NUZcdTI2NjBcdTI2NjNcdTI2NjVcdTI2NjZcdTI2NjhcdTI2N0JcdTI2N0VcdTI2N0ZcdTI2OTJcdTI2OTQtXHUyNjk3XHUyNjk5XHUyNjlCXHUyNjlDXHUyNkEwXHUyNkE3XHUyNkFBXHUyNkIwXHUyNkIxXHUyNkJEXHUyNkJFXHUyNkM0XHUyNkM4XHUyNkNGXHUyNkQxXHUyNkQzXHUyNkU5XHUyNkYwLVx1MjZGNVx1MjZGN1x1MjZGOFx1MjZGQVx1MjcwMlx1MjcwOFx1MjcwOVx1MjcwRlx1MjcxMlx1MjcxNFx1MjcxNlx1MjcxRFx1MjcyMVx1MjczM1x1MjczNFx1Mjc0NFx1Mjc0N1x1Mjc2M1x1MjdBMVx1MjkzNFx1MjkzNVx1MkIwNS1cdTJCMDdcdTJCMUJcdTJCMUNcdTJCNTVcdTMwMzBcdTMwM0RcdTMyOTdcdTMyOTldfFx1RDgzQ1tcdURDMDRcdURENzBcdURENzFcdUREN0VcdUREN0ZcdURFMDJcdURFMzdcdURGMjFcdURGMjQtXHVERjJDXHVERjM2XHVERjdEXHVERjk2XHVERjk3XHVERjk5LVx1REY5Qlx1REY5RVx1REY5Rlx1REZDRFx1REZDRVx1REZENC1cdURGREZcdURGRjVcdURGRjddfFx1RDgzRFtcdURDM0ZcdURDRkRcdURENDlcdURENEFcdURENkZcdURENzBcdURENzNcdURENzYtXHVERDc5XHVERDg3XHVERDhBLVx1REQ4RFx1RERBNVx1RERBOFx1RERCMVx1RERCMlx1RERCQ1x1RERDMi1cdUREQzRcdURERDEtXHVEREQzXHVERERDLVx1RERERVx1RERFMVx1RERFM1x1RERFOFx1RERFRlx1RERGM1x1RERGQVx1REVDQlx1REVDRC1cdURFQ0ZcdURFRTAtXHVERUU1XHVERUU5XHVERUYwXHVERUYzXSlcdUZFMEZ8XHVEODNEXHVEQzQxXHVGRTBGP1x1MjAwRFx1RDgzRFx1RERFOHxcdUQ4M0VcdURERDEoPzpcdUQ4M0NcdURGRkZcdTIwMERbXHUyNjk1XHUyNjk2XHUyNzA4XXxcdUQ4M0NcdURGRkVcdTIwMERbXHUyNjk1XHUyNjk2XHUyNzA4XXxcdUQ4M0NcdURGRkRcdTIwMERbXHUyNjk1XHUyNjk2XHUyNzA4XXxcdUQ4M0NcdURGRkNcdTIwMERbXHUyNjk1XHUyNjk2XHUyNzA4XXxcdUQ4M0NcdURGRkJcdTIwMERbXHUyNjk1XHUyNjk2XHUyNzA4XXxcdTIwMERbXHUyNjk1XHUyNjk2XHUyNzA4XSl8XHVEODNEXHVEQzY5KD86XHVEODNDXHVERkZGXHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF18XHVEODNDXHVERkZFXHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF18XHVEODNDXHVERkZEXHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF18XHVEODNDXHVERkZDXHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF18XHVEODNDXHVERkZCXHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF18XHUyMDBEW1x1MjY5NVx1MjY5Nlx1MjcwOF0pfFx1RDgzQ1x1REZGM1x1RkUwRj9cdTIwMERcdUQ4M0NcdURGMDh8XHVEODNEXHVEQzY5XHUyMDBEXHVEODNEXHVEQzY3fFx1RDgzRFx1REM2OVx1MjAwRFx1RDgzRFx1REM2NnxcdUQ4M0RcdURFMzZcdTIwMERcdUQ4M0NcdURGMkJ8XHVEODNDXHVERkYzXHVGRTBGP1x1MjAwRFx1MjZBN3xcdUQ4M0RcdURFMzVcdTIwMERcdUQ4M0RcdURDQUJ8XHVEODNEXHVERTJFXHUyMDBEXHVEODNEXHVEQ0E4fFx1RDgzRFx1REMxNVx1MjAwRFx1RDgzRVx1RERCQXxcdUQ4M0VcdURFRjEoPzpcdUQ4M0NcdURGRkZ8XHVEODNDXHVERkZFfFx1RDgzQ1x1REZGRHxcdUQ4M0NcdURGRkN8XHVEODNDXHVERkZCKT98XHVEODNFXHVEREQxKD86XHVEODNDXHVERkZGfFx1RDgzQ1x1REZGRXxcdUQ4M0NcdURGRkR8XHVEODNDXHVERkZDfFx1RDgzQ1x1REZGQik/fFx1RDgzRFx1REM2OSg/Olx1RDgzQ1x1REZGRnxcdUQ4M0NcdURGRkV8XHVEODNDXHVERkZEfFx1RDgzQ1x1REZGQ3xcdUQ4M0NcdURGRkIpP3xcdUQ4M0RcdURDM0JcdTIwMERcdTI3NDR8KD86KD86XHVEODNDW1x1REZDM1x1REZDNFx1REZDQV18XHVEODNEW1x1REM2RVx1REM3MFx1REM3MVx1REM3M1x1REM3N1x1REM4MVx1REM4Mlx1REM4Nlx1REM4N1x1REU0NS1cdURFNDdcdURFNEJcdURFNERcdURFNEVcdURFQTNcdURFQjQtXHVERUI2XXxcdUQ4M0VbXHVERDI2XHVERDM1XHVERDM3LVx1REQzOVx1REQzRFx1REQzRVx1RERCOFx1RERCOVx1RERDRC1cdUREQ0ZcdURERDRcdURERDYtXHVEREREXSkoPzpcdUQ4M0NbXHVERkZCLVx1REZGRl0pfFx1RDgzRFx1REM2RnxcdUQ4M0VbXHVERERFXHVERERGXSlcdTIwMERbXHUyNjQwXHUyNjQyXXwoPzpcdTI2Rjl8XHVEODNDW1x1REZDQlx1REZDQ118XHVEODNEXHVERDc1KSg/Oig/Olx1RkUwRnxcdUQ4M0NbXHVERkZCLVx1REZGRl0pXHUyMDBEW1x1MjY0MFx1MjY0Ml18XHUyMDBEW1x1MjY0MFx1MjY0Ml0pfFx1RDgzQ1x1REZGNFx1MjAwRFx1MjYyMHxcdUQ4M0NcdURERkRcdUQ4M0NcdURERjB8XHVEODNDXHVEREY2XHVEODNDXHVEREU2fFx1RDgzQ1x1RERGNFx1RDgzQ1x1RERGMnxcdUQ4M0RcdURDMDhcdTIwMERcdTJCMUJ8XHUyNzY0KD86XHVGRTBGXHUyMDBEKD86XHVEODNEXHVERDI1fFx1RDgzRVx1REU3OSl8XHUyMDBEKD86XHVEODNEXHVERDI1fFx1RDgzRVx1REU3OSkpfFx1RDgzRFx1REM0MVx1RkUwRj98XHVEODNDXHVERkYzXHVGRTBGP3woPzpcdUQ4M0NbXHVERkMzXHVERkM0XHVERkNBXXxcdUQ4M0RbXHVEQzZFXHVEQzcwXHVEQzcxXHVEQzczXHVEQzc3XHVEQzgxXHVEQzgyXHVEQzg2XHVEQzg3XHVERTQ1LVx1REU0N1x1REU0Qlx1REU0RFx1REU0RVx1REVBM1x1REVCNC1cdURFQjZdfFx1RDgzRVtcdUREMjZcdUREMzVcdUREMzctXHVERDM5XHVERDNDLVx1REQzRVx1RERCOFx1RERCOVx1RERDRC1cdUREQ0ZcdURERDRcdURERDYtXHVEREREXSlcdTIwMERbXHUyNjQwXHUyNjQyXXxcdUQ4M0NcdURERkYoPzpcdUQ4M0NbXHVEREU2XHVEREYyXHVEREZDXSl8XHVEODNDXHVEREZFKD86XHVEODNDW1x1RERFQVx1RERGOV0pfFx1RDgzQ1x1RERGQyg/Olx1RDgzQ1tcdURERUJcdURERjhdKXxcdUQ4M0NcdURERkIoPzpcdUQ4M0NbXHVEREU2XHVEREU4XHVEREVBXHVEREVDXHVEREVFXHVEREYzXHVEREZBXSl8XHVEODNDXHVEREZBKD86XHVEODNDW1x1RERFNlx1RERFQ1x1RERGMlx1RERGM1x1RERGOFx1RERGRVx1RERGRl0pfFx1RDgzQ1x1RERGOSg/Olx1RDgzQ1tcdURERTZcdURERThcdURERTlcdURERUItXHVEREVEXHVEREVGLVx1RERGNFx1RERGN1x1RERGOVx1RERGQlx1RERGQ1x1RERGRl0pfFx1RDgzQ1x1RERGOCg/Olx1RDgzQ1tcdURERTYtXHVEREVBXHVEREVDLVx1RERGNFx1RERGNy1cdURERjlcdURERkJcdURERkQtXHVEREZGXSl8XHVEODNDXHVEREY3KD86XHVEODNDW1x1RERFQVx1RERGNFx1RERGOFx1RERGQVx1RERGQ10pfFx1RDgzQ1x1RERGNSg/Olx1RDgzQ1tcdURERTZcdURERUEtXHVEREVEXHVEREYwLVx1RERGM1x1RERGNy1cdURERjlcdURERkNcdURERkVdKXxcdUQ4M0NcdURERjMoPzpcdUQ4M0NbXHVEREU2XHVEREU4XHVEREVBLVx1RERFQ1x1RERFRVx1RERGMVx1RERGNFx1RERGNVx1RERGN1x1RERGQVx1RERGRl0pfFx1RDgzQ1x1RERGMig/Olx1RDgzQ1tcdURERTZcdURERTgtXHVEREVEXHVEREYwLVx1RERGRl0pfFx1RDgzQ1x1RERGMSg/Olx1RDgzQ1tcdURERTYtXHVEREU4XHVEREVFXHVEREYwXHVEREY3LVx1RERGQlx1RERGRV0pfFx1RDgzQ1x1RERGMCg/Olx1RDgzQ1tcdURERUFcdURERUMtXHVEREVFXHVEREYyXHVEREYzXHVEREY1XHVEREY3XHVEREZDXHVEREZFXHVEREZGXSl8XHVEODNDXHVEREVGKD86XHVEODNDW1x1RERFQVx1RERGMlx1RERGNFx1RERGNV0pfFx1RDgzQ1x1RERFRSg/Olx1RDgzQ1tcdURERTgtXHVEREVBXHVEREYxLVx1RERGNFx1RERGNi1cdURERjldKXxcdUQ4M0NcdURERUQoPzpcdUQ4M0NbXHVEREYwXHVEREYyXHVEREYzXHVEREY3XHVEREY5XHVEREZBXSl8XHVEODNDXHVEREVDKD86XHVEODNDW1x1RERFNlx1RERFN1x1RERFOS1cdURERUVcdURERjEtXHVEREYzXHVEREY1LVx1RERGQVx1RERGQ1x1RERGRV0pfFx1RDgzQ1x1RERFQig/Olx1RDgzQ1tcdURERUUtXHVEREYwXHVEREYyXHVEREY0XHVEREY3XSl8XHVEODNDXHVEREVBKD86XHVEODNDW1x1RERFNlx1RERFOFx1RERFQVx1RERFQ1x1RERFRFx1RERGNy1cdURERkFdKXxcdUQ4M0NcdURERTkoPzpcdUQ4M0NbXHVEREVBXHVEREVDXHVEREVGXHVEREYwXHVEREYyXHVEREY0XHVEREZGXSl8XHVEODNDXHVEREU4KD86XHVEODNDW1x1RERFNlx1RERFOFx1RERFOVx1RERFQi1cdURERUVcdURERjAtXHVEREY1XHVEREY3XHVEREZBLVx1RERGRl0pfFx1RDgzQ1x1RERFNyg/Olx1RDgzQ1tcdURERTZcdURERTdcdURERTktXHVEREVGXHVEREYxLVx1RERGNFx1RERGNi1cdURERjlcdURERkJcdURERkNcdURERkVcdURERkZdKXxcdUQ4M0NcdURERTYoPzpcdUQ4M0NbXHVEREU4LVx1RERFQ1x1RERFRVx1RERGMVx1RERGMlx1RERGNFx1RERGNi1cdURERkFcdURERkNcdURERkRcdURERkZdKXxbI1wqMC05XVx1RkUwRj9cdTIwRTN8XHVEODNFXHVERDNDKD86XHVEODNDW1x1REZGQi1cdURGRkZdKXxcdTI3NjRcdUZFMEY/fCg/Olx1RDgzQ1tcdURGQzNcdURGQzRcdURGQ0FdfFx1RDgzRFtcdURDNkVcdURDNzBcdURDNzFcdURDNzNcdURDNzdcdURDODFcdURDODJcdURDODZcdURDODdcdURFNDUtXHVERTQ3XHVERTRCXHVERTREXHVERTRFXHVERUEzXHVERUI0LVx1REVCNl18XHVEODNFW1x1REQyNlx1REQzNVx1REQzNy1cdUREMzlcdUREM0RcdUREM0VcdUREQjhcdUREQjlcdUREQ0QtXHVERENGXHVEREQ0XHVEREQ2LVx1RERERF0pKD86XHVEODNDW1x1REZGQi1cdURGRkZdKXwoPzpcdTI2Rjl8XHVEODNDW1x1REZDQlx1REZDQ118XHVEODNEXHVERDc1KSg/Olx1RkUwRnxcdUQ4M0NbXHVERkZCLVx1REZGRl0pP3xcdUQ4M0NcdURGRjR8KD86W1x1MjcwQVx1MjcwQl18XHVEODNDW1x1REY4NVx1REZDMlx1REZDN118XHVEODNEW1x1REM0Mlx1REM0M1x1REM0Ni1cdURDNTBcdURDNjZcdURDNjdcdURDNkItXHVEQzZEXHVEQzcyXHVEQzc0LVx1REM3Nlx1REM3OFx1REM3Q1x1REM4M1x1REM4NVx1REM4Rlx1REM5MVx1RENBQVx1REQ3QVx1REQ5NVx1REQ5Nlx1REU0Q1x1REU0Rlx1REVDMFx1REVDQ118XHVEODNFW1x1REQwQ1x1REQwRlx1REQxOC1cdUREMUZcdUREMzAtXHVERDM0XHVERDM2XHVERDc3XHVEREI1XHVEREI2XHVEREJCXHVEREQyXHVEREQzXHVEREQ1XHVERUMzLVx1REVDNVx1REVGMFx1REVGMi1cdURFRjZdKSg/Olx1RDgzQ1tcdURGRkItXHVERkZGXSl8KD86W1x1MjYxRFx1MjcwQ1x1MjcwRF18XHVEODNEW1x1REQ3NFx1REQ5MF0pKD86XHVGRTBGfFx1RDgzQ1tcdURGRkItXHVERkZGXSl8W1x1MjYxRFx1MjcwQS1cdTI3MERdfFx1RDgzQ1tcdURGODVcdURGQzJcdURGQzddfFx1RDgzRFtcdURDMDhcdURDMTVcdURDM0JcdURDNDJcdURDNDNcdURDNDYtXHVEQzUwXHVEQzY2XHVEQzY3XHVEQzZCLVx1REM2RFx1REM3Mlx1REM3NC1cdURDNzZcdURDNzhcdURDN0NcdURDODNcdURDODVcdURDOEZcdURDOTFcdURDQUFcdURENzRcdUREN0FcdUREOTBcdUREOTVcdUREOTZcdURFMkVcdURFMzVcdURFMzZcdURFNENcdURFNEZcdURFQzBcdURFQ0NdfFx1RDgzRVtcdUREMENcdUREMEZcdUREMTgtXHVERDFGXHVERDMwLVx1REQzNFx1REQzNlx1REQzQ1x1REQ3N1x1RERCNVx1RERCNlx1RERCQlx1REREMlx1REREM1x1RERENVx1REVDMy1cdURFQzVcdURFRjBcdURFRjItXHVERUY2XXxcdUQ4M0NbXHVERkMzXHVERkM0XHVERkNBXXxcdUQ4M0RbXHVEQzZFXHVEQzcwXHVEQzcxXHVEQzczXHVEQzc3XHVEQzgxXHVEQzgyXHVEQzg2XHVEQzg3XHVERTQ1LVx1REU0N1x1REU0Qlx1REU0RFx1REU0RVx1REVBM1x1REVCNC1cdURFQjZdfFx1RDgzRVtcdUREMjZcdUREMzVcdUREMzctXHVERDM5XHVERDNEXHVERDNFXHVEREI4XHVEREI5XHVERENELVx1RERDRlx1RERENFx1RERENi1cdURERERdfFx1RDgzRFx1REM2RnxcdUQ4M0VbXHVERERFXHVERERGXXxbXHhBOVx4QUVcdTIwM0NcdTIwNDlcdTIxMjJcdTIxMzlcdTIxOTQtXHUyMTk5XHUyMUE5XHUyMUFBXHUyMzFBXHUyMzFCXHUyMzI4XHUyM0NGXHUyM0VELVx1MjNFRlx1MjNGMVx1MjNGMlx1MjNGOC1cdTIzRkFcdTI0QzJcdTI1QUFcdTI1QUJcdTI1QjZcdTI1QzBcdTI1RkJcdTI1RkNcdTI1RkVcdTI2MDAtXHUyNjA0XHUyNjBFXHUyNjExXHUyNjE0XHUyNjE1XHUyNjE4XHUyNjIwXHUyNjIyXHUyNjIzXHUyNjI2XHUyNjJBXHUyNjJFXHUyNjJGXHUyNjM4LVx1MjYzQVx1MjY0MFx1MjY0Mlx1MjY0OC1cdTI2NTNcdTI2NUZcdTI2NjBcdTI2NjNcdTI2NjVcdTI2NjZcdTI2NjhcdTI2N0JcdTI2N0VcdTI2N0ZcdTI2OTJcdTI2OTQtXHUyNjk3XHUyNjk5XHUyNjlCXHUyNjlDXHUyNkEwXHUyNkE3XHUyNkFBXHUyNkIwXHUyNkIxXHUyNkJEXHUyNkJFXHUyNkM0XHUyNkM4XHUyNkNGXHUyNkQxXHUyNkQzXHUyNkU5XHUyNkYwLVx1MjZGNVx1MjZGN1x1MjZGOFx1MjZGQVx1MjcwMlx1MjcwOFx1MjcwOVx1MjcwRlx1MjcxMlx1MjcxNFx1MjcxNlx1MjcxRFx1MjcyMVx1MjczM1x1MjczNFx1Mjc0NFx1Mjc0N1x1Mjc2M1x1MjdBMVx1MjkzNFx1MjkzNVx1MkIwNS1cdTJCMDdcdTJCMUJcdTJCMUNcdTJCNTVcdTMwMzBcdTMwM0RcdTMyOTdcdTMyOTldfFx1RDgzQ1tcdURDMDRcdURENzBcdURENzFcdUREN0VcdUREN0ZcdURFMDJcdURFMzdcdURGMjFcdURGMjQtXHVERjJDXHVERjM2XHVERjdEXHVERjk2XHVERjk3XHVERjk5LVx1REY5Qlx1REY5RVx1REY5Rlx1REZDRFx1REZDRVx1REZENC1cdURGREZcdURGRjVcdURGRjddfFx1RDgzRFtcdURDM0ZcdURDRkRcdURENDlcdURENEFcdURENkZcdURENzBcdURENzNcdURENzYtXHVERDc5XHVERDg3XHVERDhBLVx1REQ4RFx1RERBNVx1RERBOFx1RERCMVx1RERCMlx1RERCQ1x1RERDMi1cdUREQzRcdURERDEtXHVEREQzXHVERERDLVx1RERERVx1RERFMVx1RERFM1x1RERFOFx1RERFRlx1RERGM1x1RERGQVx1REVDQlx1REVDRC1cdURFQ0ZcdURFRTAtXHVERUU1XHVERUU5XHVERUYwXHVERUYzXXxbXHUyM0U5LVx1MjNFQ1x1MjNGMFx1MjNGM1x1MjVGRFx1MjY5M1x1MjZBMVx1MjZBQlx1MjZDNVx1MjZDRVx1MjZENFx1MjZFQVx1MjZGRFx1MjcwNVx1MjcyOFx1Mjc0Q1x1Mjc0RVx1Mjc1My1cdTI3NTVcdTI3NTdcdTI3OTUtXHUyNzk3XHUyN0IwXHUyN0JGXHUyQjUwXXxcdUQ4M0NbXHVEQ0NGXHVERDhFXHVERDkxLVx1REQ5QVx1REUwMVx1REUxQVx1REUyRlx1REUzMi1cdURFMzZcdURFMzgtXHVERTNBXHVERTUwXHVERTUxXHVERjAwLVx1REYyMFx1REYyRC1cdURGMzVcdURGMzctXHVERjdDXHVERjdFLVx1REY4NFx1REY4Ni1cdURGOTNcdURGQTAtXHVERkMxXHVERkM1XHVERkM2XHVERkM4XHVERkM5XHVERkNGLVx1REZEM1x1REZFMC1cdURGRjBcdURGRjgtXHVERkZGXXxcdUQ4M0RbXHVEQzAwLVx1REMwN1x1REMwOS1cdURDMTRcdURDMTYtXHVEQzNBXHVEQzNDLVx1REMzRVx1REM0MFx1REM0NFx1REM0NVx1REM1MS1cdURDNjVcdURDNkFcdURDNzktXHVEQzdCXHVEQzdELVx1REM4MFx1REM4NFx1REM4OC1cdURDOEVcdURDOTBcdURDOTItXHVEQ0E5XHVEQ0FCLVx1RENGQ1x1RENGRi1cdUREM0RcdURENEItXHVERDRFXHVERDUwLVx1REQ2N1x1RERBNFx1RERGQi1cdURFMkRcdURFMkYtXHVERTM0XHVERTM3LVx1REU0NFx1REU0OC1cdURFNEFcdURFODAtXHVERUEyXHVERUE0LVx1REVCM1x1REVCNy1cdURFQkZcdURFQzEtXHVERUM1XHVERUQwLVx1REVEMlx1REVENS1cdURFRDdcdURFREQtXHVERURGXHVERUVCXHVERUVDXHVERUY0LVx1REVGQ1x1REZFMC1cdURGRUJcdURGRjBdfFx1RDgzRVtcdUREMERcdUREMEVcdUREMTAtXHVERDE3XHVERDIwLVx1REQyNVx1REQyNy1cdUREMkZcdUREM0FcdUREM0YtXHVERDQ1XHVERDQ3LVx1REQ3Nlx1REQ3OC1cdUREQjRcdUREQjdcdUREQkFcdUREQkMtXHVERENDXHVEREQwXHVEREUwLVx1RERGRlx1REU3MC1cdURFNzRcdURFNzgtXHVERTdDXHVERTgwLVx1REU4Nlx1REU5MC1cdURFQUNcdURFQjAtXHVERUJBXHVERUMwLVx1REVDMlx1REVEMC1cdURFRDlcdURFRTAtXHVERUU3XS9nOwoJfTsKCgkvKiogTm9ybWFsaXplIGEgZHVyYXRpb24gdG8gYWxsIG9mIHRoZSBwcm9wZXIgdW5pdHMuICovDQoJZnVuY3Rpb24gbm9ybWFsaXplRHVyYXRpb24oZHVyKSB7DQoJICAgIHJldHVybiBkdXIuc2hpZnRUbygieWVhcnMiLCAibW9udGhzIiwgIndlZWtzIiwgImRheXMiLCAiaG91cnMiLCAibWludXRlcyIsICJzZWNvbmRzIiwgIm1pbGxpc2Vjb25kcyIpLm5vcm1hbGl6ZSgpOw0KCX0NCgkvKiogR2V0IHRoZSAidGl0bGUiIGZvciBhIGZpbGUsIGJ5IHN0cmlwcGluZyBvdGhlciBwYXJ0cyBvZiB0aGUgcGF0aCBhcyB3ZWxsIGFzIHRoZSBleHRlbnNpb24uICovDQoJZnVuY3Rpb24gZ2V0RmlsZVRpdGxlKHBhdGgpIHsNCgkgICAgaWYgKHBhdGguaW5jbHVkZXMoIi8iKSkNCgkgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCIvIikgKyAxKTsNCgkgICAgaWYgKHBhdGguZW5kc1dpdGgoIi5tZCIpKQ0KCSAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gMyk7DQoJICAgIHJldHVybiBwYXRoOw0KCX0NCgkvKiogQSBwYXJzaW1tb24gcGFyc2VyIHdoaWNoIGNhbm9uaWNhbGl6ZXMgdmFyaWFibGUgbmFtZXMgd2hpbGUgcHJvcGVybHkgcmVzcGVjdGluZyBlbW9qaS4gKi8NCgljb25zdCBWQVJfTkFNRV9DQU5PTklDQUxJWkVSID0gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbHQocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleChuZXcgUmVnRXhwKGVtb2ppUmVnZXgoKSwgIiIpKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleCgvWzAtOVxwe0xldHRlcn1fLV0rL3UpLm1hcChzdHIgPT4gc3RyLnRvTG9jYWxlTG93ZXJDYXNlKCkpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLndoaXRlc3BhY2UubWFwKF8gPT4gIi0iKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbnkubWFwKF8gPT4gIiIpKQ0KCSAgICAubWFueSgpDQoJICAgIC5tYXAocmVzdWx0ID0+IHJlc3VsdC5qb2luKCIiKSk7DQoJLyoqIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhcmlhYmxlIG5hbWUgaW50byBzb21ldGhpbmcgSlMvcXVlcnkgZnJpZW5kbHkuICovDQoJZnVuY3Rpb24gY2Fub25pY2FsaXplVmFyTmFtZShuYW1lKSB7DQoJICAgIHJldHVybiBWQVJfTkFNRV9DQU5PTklDQUxJWkVSLnRyeVBhcnNlKG5hbWUpOw0KCX0NCgljb25zdCBIRUFERVJfQ0FOT05JQ0FMSVpFUiA9IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXgobmV3IFJlZ0V4cChlbW9qaVJlZ2V4KCksICIiKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXgoL1swLTlccHtMZXR0ZXJ9Xy1dKy91KSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy53aGl0ZXNwYWNlLm1hcChfID0+ICIgIiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYW55Lm1hcChfID0+ICIgIikpDQoJICAgIC5tYW55KCkNCgkgICAgLm1hcChyZXN1bHQgPT4gew0KCSAgICByZXR1cm4gcmVzdWx0LmpvaW4oIiIpLnNwbGl0KC9ccysvKS5qb2luKCIgIikudHJpbSgpOw0KCX0pOw0KCS8qKg0KCSAqIE5vcm1hbGl6ZXMgdGhlIHRleHQgaW4gYSBoZWFkZXIgdG8gYmUgc29tZXRoaW5nIHRoYXQgaXMgYWN0dWFsbHkgbGlua2FibGUgdG8uIFRoaXMgbWltaWNzDQoJICogaG93IE9ic2lkaWFuIGRvZXMgaXQncyBub3JtYWxpemF0aW9uLCBjb2xsYXBzaW5nIHJlcGVhdGVkIHNwYWNlcyBhbmQgc3RyaXBwaW5nIG91dCBjb250cm9sIGNoYXJhY3RlcnMuDQoJICovDQoJZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyRm9yTGluayhoZWFkZXIpIHsNCgkgICAgcmV0dXJuIEhFQURFUl9DQU5PTklDQUxJWkVSLnRyeVBhcnNlKGhlYWRlcik7DQoJfQoKCS8qKiBBIHNwZWNpZmljIHRhc2suICovDQoJY2xhc3MgVGFzayB7DQoJICAgIGNvbnN0cnVjdG9yKGluaXQpIHsNCgkgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7DQoJICAgICAgICB0aGlzLnN1YnRhc2tzID0gKHRoaXMuc3VidGFza3MgfHwgW10pLm1hcCh0ID0+IG5ldyBUYXNrKHQpKTsNCgkgICAgfQ0KCSAgICAvKiogQ3JlYXRlIGEgdGFzayBmcm9tIGEgcmVjb3JkLiAqLw0KCSAgICBzdGF0aWMgZnJvbU9iamVjdChvYmopIHsNCgkgICAgICAgIHJldHVybiBuZXcgVGFzayhvYmopOw0KCSAgICB9DQoJICAgIGlkKCkgew0KCSAgICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0tJHt0aGlzLmxpbmV9YDsNCgkgICAgfQ0KCSAgICBtYXJrZG93bigpIHsNCgkgICAgICAgIGxldCByZXN1bHQgPSBgLSBbJHt0aGlzLmNvbXBsZXRlZCA/ICJ4IiA6ICIgIn1dICR7dGhpcy50ZXh0fWA7DQoJICAgICAgICByZXR1cm4gcmVzdWx0Ow0KCSAgICB9DQoJICAgIC8qKiBSZXR1cm4gYSBuZXcgdGFzayB3aGVyZSB0aGUgY3JlYXRlZCBhbmQgY29tcGxldGVkIGZpZWxkcyBhcmUgYXNzaWduZWQgdG8gdGhlIGdpdmVuIGRlZmF1bHRzIGlmIG5vdCBwcmVzZW50LiAqLw0KCSAgICB3aXRoRGVmYXVsdERhdGVzKGRlZmF1bHRDcmVhdGVkLCBkZWZhdWx0Q29tcGxldGVkKSB7DQoJICAgICAgICB2YXIgX2EsIF9iOw0KCSAgICAgICAgbGV0IG5ld1Rhc2sgPSBuZXcgVGFzayh0aGlzKTsNCgkgICAgICAgIG5ld1Rhc2suY3JlYXRlZCA9IChfYSA9IG5ld1Rhc2suY3JlYXRlZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZGVmYXVsdENyZWF0ZWQ7DQoJICAgICAgICBpZiAobmV3VGFzay5jb21wbGV0ZWQpDQoJICAgICAgICAgICAgbmV3VGFzay5jb21wbGV0aW9uID0gKF9iID0gbmV3VGFzay5jb21wbGV0aW9uKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBkZWZhdWx0Q29tcGxldGVkOw0KCSAgICAgICAgbmV3VGFzay5zdWJ0YXNrcyA9IG5ld1Rhc2suc3VidGFza3MubWFwKHQgPT4gdC53aXRoRGVmYXVsdERhdGVzKGRlZmF1bHRDcmVhdGVkLCBkZWZhdWx0Q29tcGxldGVkKSk7DQoJICAgICAgICByZXR1cm4gbmV3VGFzazsNCgkgICAgfQ0KCSAgICB0b09iamVjdChpbmxpbmVBbm5vdGF0aW9ucyA9IHRydWUpIHsNCgkgICAgICAgIGxldCByZXN1bHQgPSB7DQoJICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0LA0KCSAgICAgICAgICAgIGxpbmU6IHRoaXMubGluZSwNCgkgICAgICAgICAgICBwYXRoOiB0aGlzLnBhdGgsDQoJICAgICAgICAgICAgY29tcGxldGVkOiB0aGlzLmNvbXBsZXRlZCwNCgkgICAgICAgICAgICBmdWxseUNvbXBsZXRlZDogdGhpcy5mdWxseUNvbXBsZXRlZCwNCgkgICAgICAgICAgICByZWFsOiB0aGlzLnJlYWwsDQoJICAgICAgICAgICAgbGluazogdGhpcy5saW5rLA0KCSAgICAgICAgICAgIHNlY3Rpb246IHRoaXMuc2VjdGlvbiwNCgkgICAgICAgICAgICBoZWFkZXI6IHRoaXMuc2VjdGlvbiwNCgkgICAgICAgICAgICBzdWJ0YXNrczogdGhpcy5zdWJ0YXNrcy5tYXAodCA9PiB0LnRvT2JqZWN0KGlubGluZUFubm90YXRpb25zKSksDQoJICAgICAgICAgICAgYW5ub3RhdGVkOiAhIXRoaXMuZHVlIHx8ICEhdGhpcy5jb21wbGV0aW9uIHx8ICghIXRoaXMuYW5ub3RhdGlvbnMgJiYgT2JqZWN0LmtleXModGhpcy5hbm5vdGF0aW9ucykubGVuZ3RoID4gMCksDQoJICAgICAgICB9Ow0KCSAgICAgICAgaWYgKHRoaXMuY3JlYXRlZCkNCgkgICAgICAgICAgICByZXN1bHQuY3JlYXRlZCA9IHRoaXMuY3JlYXRlZDsNCgkgICAgICAgIGlmICh0aGlzLmR1ZSkNCgkgICAgICAgICAgICByZXN1bHQuZHVlID0gdGhpcy5kdWU7DQoJICAgICAgICBpZiAodGhpcy5jb21wbGV0aW9uKQ0KCSAgICAgICAgICAgIHJlc3VsdC5jb21wbGV0aW9uID0gdGhpcy5jb21wbGV0aW9uOw0KCSAgICAgICAgaWYgKHRoaXMuYW5ub3RhdGlvbnMpIHsNCgkgICAgICAgICAgICBpZiAoaW5saW5lQW5ub3RhdGlvbnMpIHsNCgkgICAgICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYW5ub3RhdGlvbnMpKSB7DQoJICAgICAgICAgICAgICAgICAgICBpZiAoa2V5IGluIHJlc3VsdCkNCgkgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCgkgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7DQoJICAgICAgICAgICAgICAgIH0NCgkgICAgICAgICAgICB9DQoJICAgICAgICAgICAgZWxzZSB7DQoJICAgICAgICAgICAgICAgIHJlc3VsdC5hbm5vdGF0aW9ucyA9IHRoaXMuYW5ub3RhdGlvbnM7DQoJICAgICAgICAgICAgfQ0KCSAgICAgICAgfQ0KCSAgICAgICAgcmV0dXJuIHJlc3VsdDsNCgkgICAgfQ0KCX0NCgkvKiogQW4gT2JzaWRpYW4gbGluayB3aXRoIGFsbCBhc3NvY2lhdGVkIG1ldGFkYXRhLiAqLw0KCWNsYXNzIExpbmsgew0KCSAgICBjb25zdHJ1Y3RvcihmaWVsZHMpIHsNCgkgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgZmllbGRzKTsNCgkgICAgfQ0KCSAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUuICovDQoJICAgIHN0YXRpYyBmaWxlKHBhdGgsIGVtYmVkID0gZmFsc2UsIGRpc3BsYXkpIHsNCgkgICAgICAgIHJldHVybiBuZXcgTGluayh7DQoJICAgICAgICAgICAgcGF0aCwNCgkgICAgICAgICAgICBlbWJlZCwNCgkgICAgICAgICAgICBkaXNwbGF5LA0KCSAgICAgICAgICAgIHN1YnBhdGg6IHVuZGVmaW5lZCwNCgkgICAgICAgICAgICB0eXBlOiAiZmlsZSIsDQoJICAgICAgICB9KTsNCgkgICAgfQ0KCSAgICAvKiogQ3JlYXRlIGEgbGluayB0byBhIHNwZWNpZmljIGZpbGUgYW5kIGhlYWRlciBpbiB0aGF0IGZpbGUuICovDQoJICAgIHN0YXRpYyBoZWFkZXIocGF0aCwgaGVhZGVyLCBlbWJlZCwgZGlzcGxheSkgew0KCSAgICAgICAgLy8gSGVhZGVycyBuZWVkIHRvIGJlIG5vcm1hbGl6ZWQgdG8gYWxwaGEtbnVtZXJpYyAmIHdpdGggZXh0cmEgc3BhY2luZyByZW1vdmVkLg0KCSAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHsNCgkgICAgICAgICAgICBwYXRoLA0KCSAgICAgICAgICAgIGVtYmVkLA0KCSAgICAgICAgICAgIGRpc3BsYXksDQoJICAgICAgICAgICAgc3VicGF0aDogbm9ybWFsaXplSGVhZGVyRm9yTGluayhoZWFkZXIpLA0KCSAgICAgICAgICAgIHR5cGU6ICJoZWFkZXIiLA0KCSAgICAgICAgfSk7DQoJICAgIH0NCgkgICAgLyoqIENyZWF0ZSBhIGxpbmsgdG8gYSBzcGVjaWZpYyBmaWxlIGFuZCBibG9jayBpbiB0aGF0IGZpbGUuICovDQoJICAgIHN0YXRpYyBibG9jayhwYXRoLCBibG9ja0lkLCBlbWJlZCwgZGlzcGxheSkgew0KCSAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHsNCgkgICAgICAgICAgICBwYXRoLA0KCSAgICAgICAgICAgIGVtYmVkLA0KCSAgICAgICAgICAgIGRpc3BsYXksDQoJICAgICAgICAgICAgc3VicGF0aDogYmxvY2tJZCwNCgkgICAgICAgICAgICB0eXBlOiAiYmxvY2siLA0KCSAgICAgICAgfSk7DQoJICAgIH0NCgkgICAgc3RhdGljIGZyb21PYmplY3Qob2JqZWN0KSB7DQoJICAgICAgICByZXR1cm4gbmV3IExpbmsob2JqZWN0KTsNCgkgICAgfQ0KCSAgICAvKiogQ2hlY2tzIGZvciBsaW5rIGVxdWFsaXR5IChpLmUuLCB0aGF0IHRoZSBsaW5rcyBhcmUgcG9pbnRpbmcgdG8gdGhlIHNhbWUgZXhhY3QgbG9jYXRpb24pLiAqLw0KCSAgICBlcXVhbHMob3RoZXIpIHsNCgkgICAgICAgIHJldHVybiB0aGlzLnBhdGggPT0gb3RoZXIucGF0aCAmJiB0aGlzLnR5cGUgPT0gb3RoZXIudHlwZSAmJiB0aGlzLnN1YnBhdGggPT0gb3RoZXIuc3VicGF0aDsNCgkgICAgfQ0KCSAgICB0b1N0cmluZygpIHsNCgkgICAgICAgIHJldHVybiB0aGlzLm1hcmtkb3duKCk7DQoJICAgIH0NCgkgICAgLyoqIENvbnZlcnQgdGhpcyBsaW5rIHRvIGEgcmF3IG9iamVjdCB3aGljaCAqLw0KCSAgICB0b09iamVjdCgpIHsNCgkgICAgICAgIHJldHVybiB7IHBhdGg6IHRoaXMucGF0aCwgdHlwZTogdGhpcy50eXBlLCBzdWJwYXRoOiB0aGlzLnN1YnBhdGgsIGRpc3BsYXk6IHRoaXMuZGlzcGxheSwgZW1iZWQ6IHRoaXMuZW1iZWQgfTsNCgkgICAgfQ0KCSAgICAvKiogUmV0dXJuIGEgbmV3IGxpbmsgd2hpY2ggcG9pbnRzIHRvIHRoZSBzYW1lIGxvY2F0aW9uIGJ1dCB3aXRoIGEgbmV3IGRpc3BsYXkgdmFsdWUuICovDQoJICAgIHdpdGhEaXNwbGF5KGRpc3BsYXkpIHsNCgkgICAgICAgIHJldHVybiBuZXcgTGluayhPYmplY3QuYXNzaWduKHt9LCB0aGlzLCB7IGRpc3BsYXkgfSkpOw0KCSAgICB9DQoJICAgIC8qKiBDb252ZXJ0IGEgZmlsZSBsaW5rIGludG8gYSBsaW5rIHRvIGEgc3BlY2lmaWMgaGVhZGVyLiAqLw0KCSAgICB3aXRoSGVhZGVyKGhlYWRlcikgew0KCSAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHRoaXMucGF0aCwgaGVhZGVyLCB0aGlzLmVtYmVkLCB0aGlzLmRpc3BsYXkpOw0KCSAgICB9DQoJICAgIC8qKiBDb252ZXJ0IGFueSBsaW5rIGludG8gYSBsaW5rIHRvIGl0cyBmaWxlLiAqLw0KCSAgICB0b0ZpbGUoKSB7DQoJICAgICAgICByZXR1cm4gTGluay5maWxlKHRoaXMucGF0aCwgdGhpcy5lbWJlZCwgdGhpcy5kaXNwbGF5KTsNCgkgICAgfQ0KCSAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgaW50byBhbiBlbWJlZGRlZCBsaW5rLiAqLw0KCSAgICB0b0VtYmVkKCkgew0KCSAgICAgICAgaWYgKHRoaXMuZW1iZWQpDQoJICAgICAgICAgICAgcmV0dXJuIHRoaXM7DQoJICAgICAgICBlbHNlIHsNCgkgICAgICAgICAgICBsZXQgbGluayA9IG5ldyBMaW5rKHRoaXMpOw0KCSAgICAgICAgICAgIGxpbmsuZW1iZWQgPSB0cnVlOw0KCSAgICAgICAgICAgIHJldHVybiBsaW5rOw0KCSAgICAgICAgfQ0KCSAgICB9DQoJICAgIC8qKiBDb252ZXJ0IHRoaXMgbGluayB0byBtYXJrZG93biBzbyBpdCBjYW4gYmUgcmVuZGVyZWQuICovDQoJICAgIG1hcmtkb3duKCkgew0KCSAgICAgICAgbGV0IHJlc3VsdCA9ICh0aGlzLmVtYmVkID8gIiEiIDogIiIpICsgIltbIiArIHRoaXMucGF0aDsNCgkgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gImhlYWRlciIpDQoJICAgICAgICAgICAgcmVzdWx0ICs9ICIjIiArIHRoaXMuc3VicGF0aDsNCgkgICAgICAgIGVsc2UgaWYgKHRoaXMudHlwZSA9PSAiYmxvY2siKQ0KCSAgICAgICAgICAgIHJlc3VsdCArPSAiI14iICsgdGhpcy5zdWJwYXRoOw0KCSAgICAgICAgaWYgKHRoaXMuZGlzcGxheSkNCgkgICAgICAgICAgICByZXN1bHQgKz0gInwiICsgdGhpcy5kaXNwbGF5Ow0KCSAgICAgICAgZWxzZSB7DQoJICAgICAgICAgICAgcmVzdWx0ICs9ICJ8IiArIGdldEZpbGVUaXRsZSh0aGlzLnBhdGgpOw0KCSAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gImhlYWRlciIgfHwgdGhpcy50eXBlID09ICJibG9jayIpDQoJICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiID4gIiArIHRoaXMuc3VicGF0aDsNCgkgICAgICAgIH0NCgkgICAgICAgIHJlc3VsdCArPSAiXV0iOw0KCSAgICAgICAgcmV0dXJuIHJlc3VsdDsNCgkgICAgfQ0KCSAgICAvKiogVGhlIHN0cmlwcGVkIG5hbWUgb2YgdGhlIGZpbGUgdGhpcyBsaW5rIHBvaW50cyBpbnRvLiAqLw0KCSAgICBmaWxlTmFtZSgpIHsNCgkgICAgICAgIHJldHVybiBnZXRGaWxlVGl0bGUodGhpcy5wYXRoKS5yZXBsYWNlKCIubWQiLCAiIik7DQoJICAgIH0NCgl9DQoJdmFyIFZhbHVlczsNCgkoZnVuY3Rpb24gKFZhbHVlcykgew0KCSAgICAvKiogQ29udmVydCBhbiBhcmJpdGFyeSB2YWx1ZSBpbnRvIGEgcmVhc29uYWJsZSwgTWFya2Rvd24tZnJpZW5kbHkgc3RyaW5nIGlmIHBvc3NpYmxlLiAqLw0KCSAgICBmdW5jdGlvbiB0b1N0cmluZyhmaWVsZCwgc2V0dGluZyA9IERFRkFVTFRfUVVFUllfU0VUVElOR1MsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7DQoJICAgICAgICBsZXQgd3JhcHBlZCA9IHdyYXBWYWx1ZShmaWVsZCk7DQoJICAgICAgICBpZiAoIXdyYXBwZWQpDQoJICAgICAgICAgICAgcmV0dXJuICJudWxsIjsNCgkgICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7DQoJICAgICAgICAgICAgY2FzZSAic3RyaW5nIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7DQoJICAgICAgICAgICAgY2FzZSAibnVtYmVyIjoNCgkgICAgICAgICAgICBjYXNlICJib29sZWFuIjoNCgkgICAgICAgICAgICBjYXNlICJodG1sIjoNCgkgICAgICAgICAgICBjYXNlICJudWxsIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuICIiICsgd3JhcHBlZC52YWx1ZTsNCgkgICAgICAgICAgICBjYXNlICJsaW5rIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFya2Rvd24oKTsNCgkgICAgICAgICAgICBjYXNlICJ0YXNrIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFya2Rvd24oKTsNCgkgICAgICAgICAgICBjYXNlICJmdW5jdGlvbiI6DQoJICAgICAgICAgICAgICAgIHJldHVybiAiPGZ1bmN0aW9uPiI7DQoJICAgICAgICAgICAgY2FzZSAiYXJyYXkiOg0KCSAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gIiI7DQoJICAgICAgICAgICAgICAgIGlmIChyZWN1cnNpdmUpDQoJICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIlsiOw0KCSAgICAgICAgICAgICAgICByZXN1bHQgKz0gd3JhcHBlZC52YWx1ZS5tYXAoZiA9PiB0b1N0cmluZyhmLCBzZXR0aW5nLCB0cnVlKSkuam9pbigiLCAiKTsNCgkgICAgICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkNCgkgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiXSI7DQoJICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQoJICAgICAgICAgICAgY2FzZSAib2JqZWN0IjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuICgieyAiICsNCgkgICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHdyYXBwZWQudmFsdWUpDQoJICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChlID0+IGVbMF0gKyAiOiAiICsgdG9TdHJpbmcoZVsxXSwgc2V0dGluZywgdHJ1ZSkpDQoJICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oIiwgIikgKw0KCSAgICAgICAgICAgICAgICAgICAgIiB9Iik7DQoJICAgICAgICAgICAgY2FzZSAiZGF0ZSI6DQoJICAgICAgICAgICAgICAgIGlmICh3cmFwcGVkLnZhbHVlLnNlY29uZCA9PSAwICYmIHdyYXBwZWQudmFsdWUuaG91ciA9PSAwICYmIHdyYXBwZWQudmFsdWUubWludXRlID09IDApIHsNCgkgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvRm9ybWF0KHNldHRpbmcuZGVmYXVsdERhdGVGb3JtYXQpOw0KCSAgICAgICAgICAgICAgICB9DQoJICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvRm9ybWF0KHNldHRpbmcuZGVmYXVsdERhdGVUaW1lRm9ybWF0KTsNCgkgICAgICAgICAgICBjYXNlICJkdXJhdGlvbiI6DQoJICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvSVNPVGltZSgpOw0KCSAgICAgICAgfQ0KCSAgICB9DQoJICAgIFZhbHVlcy50b1N0cmluZyA9IHRvU3RyaW5nOw0KCSAgICAvKiogV3JhcCBhIGxpdGVyYWwgdmFsdWUgc28geW91IGNhbiBzd2l0Y2ggb24gaXQgZWFzaWx5LiAqLw0KCSAgICBmdW5jdGlvbiB3cmFwVmFsdWUodmFsKSB7DQoJICAgICAgICBpZiAoaXNOdWxsKHZhbCkpDQoJICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogIm51bGwiLCB2YWx1ZTogdmFsIH07DQoJICAgICAgICBlbHNlIGlmIChpc051bWJlcih2YWwpKQ0KCSAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogdmFsIH07DQoJICAgICAgICBlbHNlIGlmIChpc1N0cmluZyh2YWwpKQ0KCSAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJzdHJpbmciLCB2YWx1ZTogdmFsIH07DQoJICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW4odmFsKSkNCgkgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAiYm9vbGVhbiIsIHZhbHVlOiB2YWwgfTsNCgkgICAgICAgIGVsc2UgaWYgKGlzRHVyYXRpb24odmFsKSkNCgkgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAiZHVyYXRpb24iLCB2YWx1ZTogdmFsIH07DQoJICAgICAgICBlbHNlIGlmIChpc0RhdGUodmFsKSkNCgkgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAiZGF0ZSIsIHZhbHVlOiB2YWwgfTsNCgkgICAgICAgIGVsc2UgaWYgKGlzSHRtbCh2YWwpKQ0KCSAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJodG1sIiwgdmFsdWU6IHZhbCB9Ow0KCSAgICAgICAgZWxzZSBpZiAoaXNBcnJheSh2YWwpKQ0KCSAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJhcnJheSIsIHZhbHVlOiB2YWwgfTsNCgkgICAgICAgIGVsc2UgaWYgKGlzTGluayh2YWwpKQ0KCSAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJsaW5rIiwgdmFsdWU6IHZhbCB9Ow0KCSAgICAgICAgZWxzZSBpZiAoaXNUYXNrKHZhbCkpDQoJICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogInRhc2siLCB2YWx1ZTogdmFsIH07DQoJICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbCkpDQoJICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImZ1bmN0aW9uIiwgdmFsdWU6IHZhbCB9Ow0KCSAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QodmFsKSkNCgkgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAib2JqZWN0IiwgdmFsdWU6IHZhbCB9Ow0KCSAgICAgICAgZWxzZQ0KCSAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7DQoJICAgIH0NCgkgICAgVmFsdWVzLndyYXBWYWx1ZSA9IHdyYXBWYWx1ZTsNCgkgICAgLyoqIENvbXBhcmUgdHdvIGFyYml0cmFyeSBKYXZhU2NyaXB0IHZhbHVlcy4gUHJvZHVjZXMgYSB0b3RhbCBvcmRlcmluZyBvdmVyIEFOWSBwb3NzaWJsZSBkYXRhdmlldyB2YWx1ZS4gKi8NCgkgICAgZnVuY3Rpb24gY29tcGFyZVZhbHVlKHZhbDEsIHZhbDIsIGxpbmtOb3JtYWxpemVyKSB7DQoJICAgICAgICB2YXIgX2EsIF9iOw0KCSAgICAgICAgLy8gSGFuZGxlIHVuZGVmaW5lZC9udWxscyBmaXJzdC4NCgkgICAgICAgIGlmICh2YWwxID09PSB1bmRlZmluZWQpDQoJICAgICAgICAgICAgdmFsMSA9IG51bGw7DQoJICAgICAgICBpZiAodmFsMiA9PT0gdW5kZWZpbmVkKQ0KCSAgICAgICAgICAgIHZhbDIgPSBudWxsOw0KCSAgICAgICAgaWYgKHZhbDEgPT09IG51bGwgJiYgdmFsMiA9PT0gbnVsbCkNCgkgICAgICAgICAgICByZXR1cm4gMDsNCgkgICAgICAgIGVsc2UgaWYgKHZhbDEgPT09IG51bGwpDQoJICAgICAgICAgICAgcmV0dXJuIC0xOw0KCSAgICAgICAgZWxzZSBpZiAodmFsMiA9PT0gbnVsbCkNCgkgICAgICAgICAgICByZXR1cm4gMTsNCgkgICAgICAgIC8vIEEgbm9uLW51bGwgdmFsdWUgbm93IHdoaWNoIHdlIGNhbiB3cmFwICYgY29tcGFyZSBvbi4NCgkgICAgICAgIGxldCB3cmFwMSA9IHdyYXBWYWx1ZSh2YWwxKTsNCgkgICAgICAgIGxldCB3cmFwMiA9IHdyYXBWYWx1ZSh2YWwyKTsNCgkgICAgICAgIGlmICh3cmFwMSA9PT0gdW5kZWZpbmVkICYmIHdyYXAyID09PSB1bmRlZmluZWQpDQoJICAgICAgICAgICAgcmV0dXJuIDA7DQoJICAgICAgICBlbHNlIGlmICh3cmFwMSA9PT0gdW5kZWZpbmVkKQ0KCSAgICAgICAgICAgIHJldHVybiAtMTsNCgkgICAgICAgIGVsc2UgaWYgKHdyYXAyID09PSB1bmRlZmluZWQpDQoJICAgICAgICAgICAgcmV0dXJuIDE7DQoJICAgICAgICBpZiAod3JhcDEudHlwZSAhPSB3cmFwMi50eXBlKQ0KCSAgICAgICAgICAgIHJldHVybiB3cmFwMS50eXBlLmxvY2FsZUNvbXBhcmUod3JhcDIudHlwZSk7DQoJICAgICAgICBzd2l0Y2ggKHdyYXAxLnR5cGUpIHsNCgkgICAgICAgICAgICBjYXNlICJzdHJpbmciOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUubG9jYWxlQ29tcGFyZSh3cmFwMi52YWx1ZSk7DQoJICAgICAgICAgICAgY2FzZSAibnVtYmVyIjoNCgkgICAgICAgICAgICAgICAgaWYgKHdyYXAxLnZhbHVlIDwgd3JhcDIudmFsdWUpDQoJICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQoJICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdyYXAxLnZhbHVlID09IHdyYXAyLnZhbHVlKQ0KCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQoJICAgICAgICAgICAgICAgIHJldHVybiAxOw0KCSAgICAgICAgICAgIGNhc2UgIm51bGwiOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gMDsNCgkgICAgICAgICAgICBjYXNlICJib29sZWFuIjoNCgkgICAgICAgICAgICAgICAgaWYgKHdyYXAxLnZhbHVlID09IHdyYXAyLnZhbHVlKQ0KCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQoJICAgICAgICAgICAgICAgIGVsc2UNCgkgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwMS52YWx1ZSA/IDEgOiAtMTsNCgkgICAgICAgICAgICBjYXNlICJsaW5rIjoNCgkgICAgICAgICAgICAgICAgbGV0IGxpbmsxID0gd3JhcDEudmFsdWU7DQoJICAgICAgICAgICAgICAgIGxldCBsaW5rMiA9IHdyYXAyLnZhbHVlOw0KCSAgICAgICAgICAgICAgICBsZXQgbm9ybWFsaXplID0gbGlua05vcm1hbGl6ZXIgIT09IG51bGwgJiYgbGlua05vcm1hbGl6ZXIgIT09IHZvaWQgMCA/IGxpbmtOb3JtYWxpemVyIDogKCh4KSA9PiB4KTsNCgkgICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgY29tcGFyZSBieSBmaWxlIG5hbWUgb3IgZGlzcGxheSwgc2luY2UgdGhhdCB3b3VsZCBicmVhayBsaW5rIGVxdWFsaXR5LiBDb21wYXJlIGJ5IHBhdGguDQoJICAgICAgICAgICAgICAgIGxldCBwYXRoQ29tcGFyZSA9IG5vcm1hbGl6ZShsaW5rMS5wYXRoKS5sb2NhbGVDb21wYXJlKG5vcm1hbGl6ZShsaW5rMi5wYXRoKSk7DQoJICAgICAgICAgICAgICAgIGlmIChwYXRoQ29tcGFyZSAhPSAwKQ0KCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGhDb21wYXJlOw0KCSAgICAgICAgICAgICAgICAvLyBUaGVuIGNvbXBhcmUgYnkgdHlwZS4NCgkgICAgICAgICAgICAgICAgbGV0IHR5cGVDb21wYXJlID0gbGluazEudHlwZS5sb2NhbGVDb21wYXJlKGxpbmsyLnR5cGUpOw0KCSAgICAgICAgICAgICAgICBpZiAodHlwZUNvbXBhcmUgIT0gMCkNCgkgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlQ29tcGFyZTsNCgkgICAgICAgICAgICAgICAgLy8gVGhlbiBjb21wYXJlIGJ5IHN1YnBhdGggZXhpc3RlbmNlLg0KCSAgICAgICAgICAgICAgICBpZiAobGluazEuc3VicGF0aCAmJiAhbGluazIuc3VicGF0aCkNCgkgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOw0KCSAgICAgICAgICAgICAgICBpZiAoIWxpbmsxLnN1YnBhdGggJiYgbGluazIuc3VicGF0aCkNCgkgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCgkgICAgICAgICAgICAgICAgaWYgKCFsaW5rMS5zdWJwYXRoICYmICFsaW5rMi5zdWJwYXRoKQ0KCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQoJICAgICAgICAgICAgICAgIC8vIFNpbmNlIGJvdGggaGF2ZSBhIHN1YnBhdGgsIGNvbXBhcmUgYnkgc3VicGF0aC4NCgkgICAgICAgICAgICAgICAgcmV0dXJuICgoX2EgPSBsaW5rMS5zdWJwYXRoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAiIikubG9jYWxlQ29tcGFyZSgoX2IgPSBsaW5rMi5zdWJwYXRoKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAiIik7DQoJICAgICAgICAgICAgY2FzZSAidGFzayI6DQoJICAgICAgICAgICAgICAgIGxldCB0YXNrMSA9IHdyYXAxLnZhbHVlOw0KCSAgICAgICAgICAgICAgICBsZXQgdGFzazIgPSB3cmFwMi52YWx1ZTsNCgkgICAgICAgICAgICAgICAgLy8gVXNlIG9iamVjdCBjb21wYXJpc29uICYgY29tcGFyZSB0aGUgdW5pcXVlIGlkZW50aWZpZXJzIChwYXRoLCBsaW5lLCBhbmQgdGV4dCBhcyBiYWNrdXApLg0KCSAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZVZhbHVlKHsgcGF0aDogdGFzazEucGF0aCwgbGluZTogdGFzazEubGluZSwgdGV4dDogdGFzazEudGV4dCB9LCB7IHBhdGg6IHRhc2syLnBhdGgsIGxpbmU6IHRhc2syLmxpbmUsIHRleHQ6IHRhc2syLnRleHQgfSk7DQoJICAgICAgICAgICAgY2FzZSAiZGF0ZSI6DQoJICAgICAgICAgICAgICAgIHJldHVybiB3cmFwMS52YWx1ZSA8IHdyYXAyLnZhbHVlDQoJICAgICAgICAgICAgICAgICAgICA/IC0xDQoJICAgICAgICAgICAgICAgICAgICA6IHdyYXAxLnZhbHVlLmVxdWFscyh3cmFwMi52YWx1ZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICA/IDANCgkgICAgICAgICAgICAgICAgICAgICAgICA6IDE7DQoJICAgICAgICAgICAgY2FzZSAiZHVyYXRpb24iOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUgPCB3cmFwMi52YWx1ZQ0KCSAgICAgICAgICAgICAgICAgICAgPyAtMQ0KCSAgICAgICAgICAgICAgICAgICAgOiB3cmFwMS52YWx1ZS5lcXVhbHMod3JhcDIudmFsdWUpDQoJICAgICAgICAgICAgICAgICAgICAgICAgPyAwDQoJICAgICAgICAgICAgICAgICAgICAgICAgOiAxOw0KCSAgICAgICAgICAgIGNhc2UgImFycmF5IjoNCgkgICAgICAgICAgICAgICAgbGV0IGYxID0gd3JhcDEudmFsdWU7DQoJICAgICAgICAgICAgICAgIGxldCBmMiA9IHdyYXAyLnZhbHVlOw0KCSAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgTWF0aC5taW4oZjEubGVuZ3RoLCBmMi5sZW5ndGgpOyBpbmRleCsrKSB7DQoJICAgICAgICAgICAgICAgICAgICBsZXQgY29tcCA9IGNvbXBhcmVWYWx1ZShmMVtpbmRleF0sIGYyW2luZGV4XSk7DQoJICAgICAgICAgICAgICAgICAgICBpZiAoY29tcCAhPSAwKQ0KCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wOw0KCSAgICAgICAgICAgICAgICB9DQoJICAgICAgICAgICAgICAgIHJldHVybiBmMS5sZW5ndGggLSBmMi5sZW5ndGg7DQoJICAgICAgICAgICAgY2FzZSAib2JqZWN0IjoNCgkgICAgICAgICAgICAgICAgbGV0IG8xID0gd3JhcDEudmFsdWU7DQoJICAgICAgICAgICAgICAgIGxldCBvMiA9IHdyYXAyLnZhbHVlOw0KCSAgICAgICAgICAgICAgICBsZXQgazEgPSBBcnJheS5mcm9tKE9iamVjdC5rZXlzKG8xKSk7DQoJICAgICAgICAgICAgICAgIGxldCBrMiA9IEFycmF5LmZyb20oT2JqZWN0LmtleXMobzIpKTsNCgkgICAgICAgICAgICAgICAgazEuc29ydCgpOw0KCSAgICAgICAgICAgICAgICBrMi5zb3J0KCk7DQoJICAgICAgICAgICAgICAgIGxldCBrZXlDb21wYXJlID0gY29tcGFyZVZhbHVlKGsxLCBrMik7DQoJICAgICAgICAgICAgICAgIGlmIChrZXlDb21wYXJlICE9IDApDQoJICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5Q29tcGFyZTsNCgkgICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIGsxKSB7DQoJICAgICAgICAgICAgICAgICAgICBsZXQgY29tcCA9IGNvbXBhcmVWYWx1ZShvMVtrZXldLCBvMltrZXldKTsNCgkgICAgICAgICAgICAgICAgICAgIGlmIChjb21wICE9IDApDQoJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXA7DQoJICAgICAgICAgICAgICAgIH0NCgkgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQoJICAgICAgICAgICAgY2FzZSAiaHRtbCI6DQoJICAgICAgICAgICAgICAgIHJldHVybiAwOw0KCSAgICAgICAgICAgIGNhc2UgImZ1bmN0aW9uIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQoJICAgICAgICB9DQoJICAgIH0NCgkgICAgVmFsdWVzLmNvbXBhcmVWYWx1ZSA9IGNvbXBhcmVWYWx1ZTsNCgkgICAgLyoqIEZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgRGF0YXZlaXcgdHlwZSBmb3IgYW4gYXJiaXRyYXJ5IHZhbHVlLiAqLw0KCSAgICBmdW5jdGlvbiB0eXBlT2YodmFsKSB7DQoJICAgICAgICB2YXIgX2E7DQoJICAgICAgICByZXR1cm4gKF9hID0gd3JhcFZhbHVlKHZhbCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50eXBlOw0KCSAgICB9DQoJICAgIFZhbHVlcy50eXBlT2YgPSB0eXBlT2Y7DQoJICAgIC8qKiBEZXRlcm1pbmUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzICJ0cnV0aHkiIChpLmUuLCBpcyBub24tbnVsbCBhbmQgaGFzIGRhdGEgaW4gaXQpLiAqLw0KCSAgICBmdW5jdGlvbiBpc1RydXRoeShmaWVsZCkgew0KCSAgICAgICAgbGV0IHdyYXBwZWQgPSB3cmFwVmFsdWUoZmllbGQpOw0KCSAgICAgICAgaWYgKCF3cmFwcGVkKQ0KCSAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCgkgICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7DQoJICAgICAgICAgICAgY2FzZSAibnVtYmVyIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUgIT0gMDsNCgkgICAgICAgICAgICBjYXNlICJzdHJpbmciOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5sZW5ndGggPiAwOw0KCSAgICAgICAgICAgIGNhc2UgImJvb2xlYW4iOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZTsNCgkgICAgICAgICAgICBjYXNlICJsaW5rIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuICEhd3JhcHBlZC52YWx1ZS5wYXRoOw0KCSAgICAgICAgICAgIGNhc2UgInRhc2siOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS50ZXh0Lmxlbmd0aCA+IDA7DQoJICAgICAgICAgICAgY2FzZSAiZGF0ZSI6DQoJICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvTWlsbGlzKCkgIT0gMDsNCgkgICAgICAgICAgICBjYXNlICJkdXJhdGlvbiI6DQoJICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLmFzKCJzZWNvbmRzIikgIT0gMDsNCgkgICAgICAgICAgICBjYXNlICJvYmplY3QiOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod3JhcHBlZC52YWx1ZSkubGVuZ3RoID4gMDsNCgkgICAgICAgICAgICBjYXNlICJhcnJheSI6DQoJICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLmxlbmd0aCA+IDA7DQoJICAgICAgICAgICAgY2FzZSAibnVsbCI6DQoJICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCgkgICAgICAgICAgICBjYXNlICJodG1sIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQoJICAgICAgICAgICAgY2FzZSAiZnVuY3Rpb24iOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCgkgICAgICAgIH0NCgkgICAgfQ0KCSAgICBWYWx1ZXMuaXNUcnV0aHkgPSBpc1RydXRoeTsNCgkgICAgLyoqIERlZXAgY29weSBhIGZpZWxkLiAqLw0KCSAgICBmdW5jdGlvbiBkZWVwQ29weShmaWVsZCkgew0KCSAgICAgICAgaWYgKGZpZWxkID09PSBudWxsIHx8IGZpZWxkID09PSB1bmRlZmluZWQpDQoJICAgICAgICAgICAgcmV0dXJuIGZpZWxkOw0KCSAgICAgICAgaWYgKFZhbHVlcy5pc0FycmF5KGZpZWxkKSkgew0KCSAgICAgICAgICAgIHJldHVybiBbXS5jb25jYXQoZmllbGQubWFwKHYgPT4gZGVlcENvcHkodikpKTsNCgkgICAgICAgIH0NCgkgICAgICAgIGVsc2UgaWYgKFZhbHVlcy5pc09iamVjdChmaWVsZCkpIHsNCgkgICAgICAgICAgICBsZXQgcmVzdWx0ID0ge307DQoJICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkKSkNCgkgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBkZWVwQ29weSh2YWx1ZSk7DQoJICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCgkgICAgICAgIH0NCgkgICAgICAgIGVsc2Ugew0KCSAgICAgICAgICAgIHJldHVybiBmaWVsZDsNCgkgICAgICAgIH0NCgkgICAgfQ0KCSAgICBWYWx1ZXMuZGVlcENvcHkgPSBkZWVwQ29weTsNCgkgICAgZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7DQoJICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PSAic3RyaW5nIjsNCgkgICAgfQ0KCSAgICBWYWx1ZXMuaXNTdHJpbmcgPSBpc1N0cmluZzsNCgkgICAgZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7DQoJICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PSAibnVtYmVyIjsNCgkgICAgfQ0KCSAgICBWYWx1ZXMuaXNOdW1iZXIgPSBpc051bWJlcjsNCgkgICAgZnVuY3Rpb24gaXNEYXRlKHZhbCkgew0KCSAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIERhdGVUaW1lXzE7DQoJICAgIH0NCgkgICAgVmFsdWVzLmlzRGF0ZSA9IGlzRGF0ZTsNCgkgICAgZnVuY3Rpb24gaXNEdXJhdGlvbih2YWwpIHsNCgkgICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBEdXJhdGlvbl8xOw0KCSAgICB9DQoJICAgIFZhbHVlcy5pc0R1cmF0aW9uID0gaXNEdXJhdGlvbjsNCgkgICAgZnVuY3Rpb24gaXNOdWxsKHZhbCkgew0KCSAgICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZDsNCgkgICAgfQ0KCSAgICBWYWx1ZXMuaXNOdWxsID0gaXNOdWxsOw0KCSAgICBmdW5jdGlvbiBpc0FycmF5KHZhbCkgew0KCSAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKTsNCgkgICAgfQ0KCSAgICBWYWx1ZXMuaXNBcnJheSA9IGlzQXJyYXk7DQoJICAgIGZ1bmN0aW9uIGlzQm9vbGVhbih2YWwpIHsNCgkgICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAiYm9vbGVhbiI7DQoJICAgIH0NCgkgICAgVmFsdWVzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjsNCgkgICAgZnVuY3Rpb24gaXNMaW5rKHZhbCkgew0KCSAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIExpbms7DQoJICAgIH0NCgkgICAgVmFsdWVzLmlzTGluayA9IGlzTGluazsNCgkgICAgZnVuY3Rpb24gaXNUYXNrKHZhbCkgew0KCSAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIFRhc2s7DQoJICAgIH0NCgkgICAgVmFsdWVzLmlzVGFzayA9IGlzVGFzazsNCgkgICAgZnVuY3Rpb24gaXNIdG1sKHZhbCkgew0KCSAgICAgICAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gInVuZGVmaW5lZCIpIHsNCgkgICAgICAgICAgICByZXR1cm4gdmFsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlIHsNCgkgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQoJICAgICAgICB9DQoJICAgIH0NCgkgICAgVmFsdWVzLmlzSHRtbCA9IGlzSHRtbDsNCgkgICAgZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7DQoJICAgICAgICByZXR1cm4gKHR5cGVvZiB2YWwgPT0gIm9iamVjdCIgJiYNCgkgICAgICAgICAgICAhaXNIdG1sKHZhbCkgJiYNCgkgICAgICAgICAgICAhaXNBcnJheSh2YWwpICYmDQoJICAgICAgICAgICAgIWlzRHVyYXRpb24odmFsKSAmJg0KCSAgICAgICAgICAgICFpc0RhdGUodmFsKSAmJg0KCSAgICAgICAgICAgICFpc0xpbmsodmFsKSAmJg0KCSAgICAgICAgICAgICFpc1Rhc2sodmFsKSk7DQoJICAgIH0NCgkgICAgVmFsdWVzLmlzT2JqZWN0ID0gaXNPYmplY3Q7DQoJICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7DQoJICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PSAiZnVuY3Rpb24iOw0KCSAgICB9DQoJICAgIFZhbHVlcy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjsNCgl9KShWYWx1ZXMgfHwgKFZhbHVlcyA9IHt9KSk7DQoJdmFyIEdyb3VwaW5nczsNCgkoZnVuY3Rpb24gKEdyb3VwaW5ncykgew0KCSAgICBmdW5jdGlvbiBiYXNlKHZhbHVlKSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAiYmFzZSIsIHZhbHVlIH07DQoJICAgIH0NCgkgICAgR3JvdXBpbmdzLmJhc2UgPSBiYXNlOw0KCSAgICBmdW5jdGlvbiBncm91cGVkKHZhbHVlcykgew0KCSAgICAgICAgcmV0dXJuIHsgdHlwZTogImdyb3VwZWQiLCBncm91cHM6IHZhbHVlcyB9Ow0KCSAgICB9DQoJICAgIEdyb3VwaW5ncy5ncm91cGVkID0gZ3JvdXBlZDsNCgl9KShHcm91cGluZ3MgfHwgKEdyb3VwaW5ncyA9IHt9KSk7CgoJLyoqIFV0aWxpdHkgbWV0aG9kcyBmb3IgY3JlYXRpbmcgJiBjb21wYXJpbmcgZmllbGRzLiAqLw0KCXZhciBGaWVsZHM7DQoJKGZ1bmN0aW9uIChGaWVsZHMpIHsNCgkgICAgZnVuY3Rpb24gdmFyaWFibGUobmFtZSkgew0KCSAgICAgICAgcmV0dXJuIHsgdHlwZTogInZhcmlhYmxlIiwgbmFtZSB9Ow0KCSAgICB9DQoJICAgIEZpZWxkcy52YXJpYWJsZSA9IHZhcmlhYmxlOw0KCSAgICBmdW5jdGlvbiBsaXRlcmFsKHZhbHVlKSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAibGl0ZXJhbCIsIHZhbHVlIH07DQoJICAgIH0NCgkgICAgRmllbGRzLmxpdGVyYWwgPSBsaXRlcmFsOw0KCSAgICBmdW5jdGlvbiBiaW5hcnlPcChsZWZ0LCBvcCwgcmlnaHQpIHsNCgkgICAgICAgIHJldHVybiB7IHR5cGU6ICJiaW5hcnlvcCIsIGxlZnQsIG9wLCByaWdodCB9Ow0KCSAgICB9DQoJICAgIEZpZWxkcy5iaW5hcnlPcCA9IGJpbmFyeU9wOw0KCSAgICBmdW5jdGlvbiBpbmRleChvYmosIGluZGV4KSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAiaW5kZXgiLCBvYmplY3Q6IG9iaiwgaW5kZXggfTsNCgkgICAgfQ0KCSAgICBGaWVsZHMuaW5kZXggPSBpbmRleDsNCgkgICAgLyoqIENvbnZlcnRzIGEgc3RyaW5nIGluIGRvdC1ub3RhdGlvbi1mb3JtYXQgaW50byBhIHZhcmlhYmxlIHdoaWNoIGluZGV4ZXMuICovDQoJICAgIGZ1bmN0aW9uIGluZGV4VmFyaWFibGUobmFtZSkgew0KCSAgICAgICAgbGV0IHBhcnRzID0gbmFtZS5zcGxpdCgiLiIpOw0KCSAgICAgICAgbGV0IHJlc3VsdCA9IEZpZWxkcy52YXJpYWJsZShwYXJ0c1swXSk7DQoJICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcGFydHMubGVuZ3RoOyBpbmRleCsrKSB7DQoJICAgICAgICAgICAgcmVzdWx0ID0gRmllbGRzLmluZGV4KHJlc3VsdCwgRmllbGRzLmxpdGVyYWwocGFydHNbaW5kZXhdKSk7DQoJICAgICAgICB9DQoJICAgICAgICByZXR1cm4gcmVzdWx0Ow0KCSAgICB9DQoJICAgIEZpZWxkcy5pbmRleFZhcmlhYmxlID0gaW5kZXhWYXJpYWJsZTsNCgkgICAgZnVuY3Rpb24gbGFtYmRhKGFyZ3MsIHZhbHVlKSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAibGFtYmRhIiwgYXJndW1lbnRzOiBhcmdzLCB2YWx1ZSB9Ow0KCSAgICB9DQoJICAgIEZpZWxkcy5sYW1iZGEgPSBsYW1iZGE7DQoJICAgIGZ1bmN0aW9uIGZ1bmMoZnVuYywgYXJncykgew0KCSAgICAgICAgcmV0dXJuIHsgdHlwZTogImZ1bmN0aW9uIiwgZnVuYywgYXJndW1lbnRzOiBhcmdzIH07DQoJICAgIH0NCgkgICAgRmllbGRzLmZ1bmMgPSBmdW5jOw0KCSAgICBmdW5jdGlvbiBsaXN0KHZhbHVlcykgew0KCSAgICAgICAgcmV0dXJuIHsgdHlwZTogImxpc3QiLCB2YWx1ZXMgfTsNCgkgICAgfQ0KCSAgICBGaWVsZHMubGlzdCA9IGxpc3Q7DQoJICAgIGZ1bmN0aW9uIG9iamVjdCh2YWx1ZXMpIHsNCgkgICAgICAgIHJldHVybiB7IHR5cGU6ICJvYmplY3QiLCB2YWx1ZXMgfTsNCgkgICAgfQ0KCSAgICBGaWVsZHMub2JqZWN0ID0gb2JqZWN0Ow0KCSAgICBmdW5jdGlvbiBuZWdhdGUoY2hpbGQpIHsNCgkgICAgICAgIHJldHVybiB7IHR5cGU6ICJuZWdhdGVkIiwgY2hpbGQgfTsNCgkgICAgfQ0KCSAgICBGaWVsZHMubmVnYXRlID0gbmVnYXRlOw0KCSAgICBmdW5jdGlvbiBpc0NvbXBhcmVPcChvcCkgew0KCSAgICAgICAgcmV0dXJuIG9wID09ICI8PSIgfHwgb3AgPT0gIjwiIHx8IG9wID09ICI+IiB8fCBvcCA9PSAiPj0iIHx8IG9wID09ICIhPSIgfHwgb3AgPT0gIj0iOw0KCSAgICB9DQoJICAgIEZpZWxkcy5pc0NvbXBhcmVPcCA9IGlzQ29tcGFyZU9wOw0KCSAgICBGaWVsZHMuTlVMTCA9IEZpZWxkcy5saXRlcmFsKG51bGwpOw0KCX0pKEZpZWxkcyB8fCAoRmllbGRzID0ge30pKTsKCgkvKiogQVNUIGltcGxlbWVudGF0aW9uIGZvciBxdWVyaWVzIG92ZXIgZGF0YSBzb3VyY2VzLiAqLw0KCS8qKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBzb3VyY2VzLiAqLw0KCXZhciBTb3VyY2VzOw0KCShmdW5jdGlvbiAoU291cmNlcykgew0KCSAgICBmdW5jdGlvbiB0YWcodGFnKSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAidGFnIiwgdGFnIH07DQoJICAgIH0NCgkgICAgU291cmNlcy50YWcgPSB0YWc7DQoJICAgIGZ1bmN0aW9uIGNzdihwYXRoKSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAiY3N2IiwgcGF0aCB9Ow0KCSAgICB9DQoJICAgIFNvdXJjZXMuY3N2ID0gY3N2Ow0KCSAgICBmdW5jdGlvbiBmb2xkZXIocHJlZml4KSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAiZm9sZGVyIiwgZm9sZGVyOiBwcmVmaXggfTsNCgkgICAgfQ0KCSAgICBTb3VyY2VzLmZvbGRlciA9IGZvbGRlcjsNCgkgICAgZnVuY3Rpb24gbGluayhmaWxlLCBpbmNvbWluZykgew0KCSAgICAgICAgcmV0dXJuIHsgdHlwZTogImxpbmsiLCBmaWxlLCBkaXJlY3Rpb246IGluY29taW5nID8gImluY29taW5nIiA6ICJvdXRnb2luZyIgfTsNCgkgICAgfQ0KCSAgICBTb3VyY2VzLmxpbmsgPSBsaW5rOw0KCSAgICBmdW5jdGlvbiBiaW5hcnlPcChsZWZ0LCBvcCwgcmlnaHQpIHsNCgkgICAgICAgIHJldHVybiB7IHR5cGU6ICJiaW5hcnlvcCIsIGxlZnQsIG9wLCByaWdodCB9Ow0KCSAgICB9DQoJICAgIFNvdXJjZXMuYmluYXJ5T3AgPSBiaW5hcnlPcDsNCgkgICAgZnVuY3Rpb24gbmVnYXRlKGNoaWxkKSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAibmVnYXRlIiwgY2hpbGQgfTsNCgkgICAgfQ0KCSAgICBTb3VyY2VzLm5lZ2F0ZSA9IG5lZ2F0ZTsNCgkgICAgZnVuY3Rpb24gZW1wdHkoKSB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAiZW1wdHkiIH07DQoJICAgIH0NCgkgICAgU291cmNlcy5lbXB0eSA9IGVtcHR5Ow0KCX0pKFNvdXJjZXMgfHwgKFNvdXJjZXMgPSB7fSkpOwoKCS8qKiBFbW9qaSByZWdleCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGZsYWdzLiAqLw0KCWNvbnN0IEVNT0pJX1JFR0VYID0gbmV3IFJlZ0V4cChlbW9qaVJlZ2V4KCksICIiKTsNCgkvKiogUHJvdmlkZXMgYSBsb29rdXAgdGFibGUgZm9yIHVuaXQgZHVyYXRpb25zIG9mIHRoZSBnaXZlbiB0eXBlLiAqLw0KCWNvbnN0IERVUkFUSU9OX1RZUEVTID0gew0KCSAgICB5ZWFyOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyB5ZWFyczogMSB9KSwNCgkgICAgeWVhcnM6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHllYXJzOiAxIH0pLA0KCSAgICB5cjogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksDQoJICAgIHlyczogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgeWVhcnM6IDEgfSksDQoJICAgIG1vbnRoOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBtb250aHM6IDEgfSksDQoJICAgIG1vbnRoczogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgbW9udGhzOiAxIH0pLA0KCSAgICBtbzogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgbW9udGhzOiAxIH0pLA0KCSAgICBtb3M6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IG1vbnRoczogMSB9KSwNCgkgICAgd2VlazogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgd2Vla3M6IDEgfSksDQoJICAgIHdlZWtzOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSwNCgkgICAgd2s6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLA0KCSAgICB3a3M6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLA0KCSAgICB3OiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSwNCgkgICAgZGF5OiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLA0KCSAgICBkYXlzOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLA0KCSAgICBkOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLA0KCSAgICBob3VyOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBob3VyczogMSB9KSwNCgkgICAgaG91cnM6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IGhvdXJzOiAxIH0pLA0KCSAgICBocjogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksDQoJICAgIGhyczogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgaG91cnM6IDEgfSksDQoJICAgIGg6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IGhvdXJzOiAxIH0pLA0KCSAgICBtaW51dGU6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksDQoJICAgIG1pbnV0ZXM6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksDQoJICAgIG1pbjogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSwNCgkgICAgbWluczogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSwNCgkgICAgbTogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgbWludXRlczogMSB9KSwNCgkgICAgc2Vjb25kOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLA0KCSAgICBzZWNvbmRzOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLA0KCSAgICBzZWM6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksDQoJICAgIHNlY3M6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksDQoJICAgIHM6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHNlY29uZHM6IDEgfSksDQoJfTsNCgkvKiogU2hvcnRoYW5kIGZvciBjb21tb24gZGF0ZXMgKHJlbGF0aXZlIHRvIHJpZ2h0IG5vdykuICovDQoJY29uc3QgREFURV9TSE9SVEhBTkRTID0gew0KCSAgICBub3c6ICgpID0+IERhdGVUaW1lXzEubG9jYWwoKSwNCgkgICAgdG9kYXk6ICgpID0+IERhdGVUaW1lXzEubG9jYWwoKS5zdGFydE9mKCJkYXkiKSwNCgkgICAgeWVzdGVyZGF5OiAoKSA9PiBEYXRlVGltZV8xLmxvY2FsKCkNCgkgICAgICAgIC5zdGFydE9mKCJkYXkiKQ0KCSAgICAgICAgLm1pbnVzKER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IGRheXM6IDEgfSkpLA0KCSAgICB0b21tb3JvdzogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpDQoJICAgICAgICAuc3RhcnRPZigiZGF5IikNCgkgICAgICAgIC5wbHVzKER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IGRheXM6IDEgfSkpLA0KCSAgICBzb3c6ICgpID0+IERhdGVUaW1lXzEubG9jYWwoKS5zdGFydE9mKCJ3ZWVrIiksDQoJICAgICJzdGFydC1vZi13ZWVrIjogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpLnN0YXJ0T2YoIndlZWsiKSwNCgkgICAgZW93OiAoKSA9PiBEYXRlVGltZV8xLmxvY2FsKCkuZW5kT2YoIndlZWsiKSwNCgkgICAgImVuZC1vZi13ZWVrIjogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpLmVuZE9mKCJ3ZWVrIiksDQoJICAgIHNveTogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpLnN0YXJ0T2YoInllYXIiKSwNCgkgICAgInN0YXJ0LW9mLXllYXIiOiAoKSA9PiBEYXRlVGltZV8xLmxvY2FsKCkuc3RhcnRPZigieWVhciIpLA0KCSAgICBlb3k6ICgpID0+IERhdGVUaW1lXzEubG9jYWwoKS5lbmRPZigieWVhciIpLA0KCSAgICAiZW5kLW9mLXllYXIiOiAoKSA9PiBEYXRlVGltZV8xLmxvY2FsKCkuZW5kT2YoInllYXIiKSwNCgkgICAgc29tOiAoKSA9PiBEYXRlVGltZV8xLmxvY2FsKCkuc3RhcnRPZigibW9udGgiKSwNCgkgICAgInN0YXJ0LW9mLW1vbnRoIjogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpLnN0YXJ0T2YoIm1vbnRoIiksDQoJICAgIGVvbTogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpLmVuZE9mKCJtb250aCIpLA0KCSAgICAiZW5kLW9mLW1vbnRoIjogKCkgPT4gRGF0ZVRpbWVfMS5sb2NhbCgpLmVuZE9mKCJtb250aCIpLA0KCX07DQoJLyoqDQoJICogS2V5d29yZHMgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGVzIGRpcmVjdGx5LiBVc2UgYHJvdy48dGhpbmc+YCBpZiBpdCBpcyBhIHZhcmlhYmxlIHlvdSBoYXZlIGRlZmluZWQgYW5kIHdhbnQNCgkgKiB0byBhY2Nlc3MuDQoJICovDQoJY29uc3QgS0VZV09SRFMgPSBbIkZST00iLCAiV0hFUkUiLCAiTElNSVQiLCAiR1JPVVAiLCAiRkxBVFRFTiJdOw0KCS8vLy8vLy8vLy8vLy8vLw0KCS8vIFV0aWxpdGllcyAvLw0KCS8vLy8vLy8vLy8vLy8vLw0KCS8qKiBBdHRlbXB0IHRvIHBhcnNlIHRoZSBpbnNpZGUgb2YgYSBsaW5rIHRvIHB1bGwgb3V0IGRpc3BsYXkgbmFtZSwgc3VicGF0aCwgZXRjLiAqLw0KCWZ1bmN0aW9uIHBhcnNlSW5uZXJMaW5rKGxpbmspIHsNCgkgICAgbGV0IGRpc3BsYXkgPSB1bmRlZmluZWQ7DQoJICAgIGlmIChsaW5rLmluY2x1ZGVzKCJ8IikpIHsNCgkgICAgICAgIGxldCBzcGxpdCA9IGxpbmsuc3BsaXQoInwiKTsNCgkgICAgICAgIGxpbmsgPSBzcGxpdFswXTsNCgkgICAgICAgIGRpc3BsYXkgPSBzcGxpdFsxXTsNCgkgICAgfQ0KCSAgICBpZiAobGluay5pbmNsdWRlcygiI14iKSkgew0KCSAgICAgICAgbGV0IHNwbGl0ID0gbGluay5zcGxpdCgiI14iKTsNCgkgICAgICAgIHJldHVybiBMaW5rLmJsb2NrKHNwbGl0WzBdLCBzcGxpdFsxXSwgZmFsc2UsIGRpc3BsYXkpOw0KCSAgICB9DQoJICAgIGVsc2UgaWYgKGxpbmsuaW5jbHVkZXMoIiMiKSkgew0KCSAgICAgICAgbGV0IHNwbGl0ID0gbGluay5zcGxpdCgiIyIpOw0KCSAgICAgICAgcmV0dXJuIExpbmsuaGVhZGVyKHNwbGl0WzBdLCBzcGxpdFsxXSwgZmFsc2UsIGRpc3BsYXkpOw0KCSAgICB9DQoJICAgIHJldHVybiBMaW5rLmZpbGUobGluaywgZmFsc2UsIGRpc3BsYXkpOw0KCX0NCgkvKiogQ3JlYXRlIGEgbGVmdC1hc3NvY2lhdGl2ZSBiaW5hcnkgcGFyc2VyIHdoaWNoIHBhcnNlcyB0aGUgZ2l2ZW4gc3ViLWVsZW1lbnQgYW5kIHNlcGFyYXRvci4gSGFuZGxlcyB3aGl0ZXNwYWNlLiAqLw0KCWZ1bmN0aW9uIGNyZWF0ZUJpbmFyeVBhcnNlcihjaGlsZCwgc2VwLCBjb21iaW5lKSB7DQoJICAgIHJldHVybiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChjaGlsZCwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXEocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlLCBzZXAsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgY2hpbGQpLm1hbnkoKSwgKGZpcnN0LCByZXN0KSA9PiB7DQoJICAgICAgICBpZiAocmVzdC5sZW5ndGggPT0gMCkNCgkgICAgICAgICAgICByZXR1cm4gZmlyc3Q7DQoJICAgICAgICBsZXQgbm9kZSA9IGNvbWJpbmUoZmlyc3QsIHJlc3RbMF1bMV0sIHJlc3RbMF1bM10pOw0KCSAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHJlc3QubGVuZ3RoOyBpbmRleCsrKSB7DQoJICAgICAgICAgICAgbm9kZSA9IGNvbWJpbmUobm9kZSwgcmVzdFtpbmRleF1bMV0sIHJlc3RbaW5kZXhdWzNdKTsNCgkgICAgICAgIH0NCgkgICAgICAgIHJldHVybiBub2RlOw0KCSAgICB9KTsNCgl9DQoJZnVuY3Rpb24gY2hhaW5PcHQoYmFzZSwgLi4uZnVuY3MpIHsNCgkgICAgcmV0dXJuIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuY3VzdG9tKChzdWNjZXNzLCBmYWlsdXJlKSA9PiB7DQoJICAgICAgICByZXR1cm4gKGlucHV0LCBpKSA9PiB7DQoJICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGJhc2UuXyhpbnB1dCwgaSk7DQoJICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3RhdHVzKQ0KCSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KCSAgICAgICAgICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3MpIHsNCgkgICAgICAgICAgICAgICAgbGV0IG5leHQgPSBmdW5jKHJlc3VsdC52YWx1ZSkuXyhpbnB1dCwgcmVzdWx0LmluZGV4KTsNCgkgICAgICAgICAgICAgICAgaWYgKCFuZXh0LnN0YXR1cykNCgkgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQoJICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5leHQ7DQoJICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQoJICAgICAgICB9Ow0KCSAgICB9KTsNCgl9DQoJY29uc3QgRVhQUkVTU0lPTiA9IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuY3JlYXRlTGFuZ3VhZ2Uoew0KCSAgICAvLyBBIGZsb2F0aW5nIHBvaW50IG51bWJlcjsgdGhlIGRlY2ltYWwgcG9pbnQgaXMgb3B0aW9uYWwuDQoJICAgIG51bWJlcjogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvLT9bMC05XSsoXC5bMC05XSspPy8pDQoJICAgICAgICAubWFwKHN0ciA9PiBOdW1iZXIucGFyc2VGbG9hdChzdHIpKQ0KCSAgICAgICAgLmRlc2MoIm51bWJlciIpLA0KCSAgICAvLyBBIHF1b3RlLXN1cnJvdW5kZWQgc3RyaW5nIHdoaWNoIHN1cHBvcnRzIGVzY2FwZSBjaGFyYWN0ZXJzICgnXCcpLg0KCSAgICBzdHJpbmc6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoJyInKQ0KCSAgICAgICAgLnRoZW4ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbHQocS5lc2NhcGVDaGFyYWN0ZXIsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMubm9uZU9mKCciXFwnKSkNCgkgICAgICAgIC5hdExlYXN0KDApDQoJICAgICAgICAubWFwKGNoYXJzID0+IGNoYXJzLmpvaW4oIiIpKSkNCgkgICAgICAgIC5za2lwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCciJykpDQoJICAgICAgICAuZGVzYygic3RyaW5nIiksDQoJICAgIGVzY2FwZUNoYXJhY3RlcjogXyA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiXFwiKQ0KCSAgICAgICAgLnRoZW4ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbnkpDQoJICAgICAgICAubWFwKGVzY2FwZWQgPT4gew0KCSAgICAgICAgLy8gSWYgd2UgYXJlIGVzY2FwaW5nIGEgYmFja3NsYXNoIG9yIGEgcXVvdGUsIHBhc3MgaW4gb24gaW4gZXNjYXBlZCBmb3JtDQoJICAgICAgICBpZiAoZXNjYXBlZCA9PT0gJyInKQ0KCSAgICAgICAgICAgIHJldHVybiAnIic7DQoJICAgICAgICBpZiAoZXNjYXBlZCA9PT0gIlxcIikNCgkgICAgICAgICAgICByZXR1cm4gIlxcIjsNCgkgICAgICAgIGVsc2UNCgkgICAgICAgICAgICByZXR1cm4gIlxcIiArIGVzY2FwZWQ7DQoJICAgIH0pLA0KCSAgICAvLyBBIGJvb2xlYW4gdHJ1ZS9mYWxzZSB2YWx1ZS4NCgkgICAgYm9vbDogXyA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvdHJ1ZXxmYWxzZXxUcnVlfEZhbHNlLykNCgkgICAgICAgIC5tYXAoc3RyID0+IHN0ci50b0xvd2VyQ2FzZSgpID09ICJ0cnVlIikNCgkgICAgICAgIC5kZXNjKCJib29sZWFuICgndHJ1ZScgb3IgJ2ZhbHNlJykiKSwNCgkgICAgLy8gQSB0YWcgb2YgdGhlIGZvcm0gJyNzdHVmZi9oZWxsby10aGVyZScuDQoJICAgIHRhZzogXyA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiIyIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvW1xwe0xldHRlcn0wLTlfLy1dL3UpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cChFTU9KSV9SRUdFWCkpLm1hbnkoKSwgKHN0YXJ0LCByZXN0KSA9PiBzdGFydCArIHJlc3Quam9pbigiIikpLmRlc2MoInRhZyAoJyNoZWxsby9zdHVmZicpIiksDQoJICAgIC8vIEEgdmFyaWFibGUgaWRlbnRpZmllciwgd2hpY2ggaXMgYWxwaGFudW1lcmljIGFuZCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgb3IuLi4gZW1vamkuDQoJICAgIGlkZW50aWZpZXI6IF8gPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbHQocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoL1xwe0xldHRlcn0vdSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKEVNT0pJX1JFR0VYKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9bMC05XHB7TGV0dGVyfV8tXS91KSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoRU1PSklfUkVHRVgpKS5tYW55KCksIChmaXJzdCwgcmVzdCkgPT4gZmlyc3QgKyByZXN0LmpvaW4oIiIpKS5kZXNjKCJ2YXJpYWJsZSBpZGVudGlmaWVyIiksDQoJICAgIC8vIEEgdmFyaWFibGUgaWRlbnRpZmllciwgd2hpY2ggaXMgYWxwaGFudW1lcmljIGFuZCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIuIENhbiBpbmNsdWRlIGRvdHMuDQoJICAgIGlkZW50aWZpZXJEb3Q6IF8gPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbHQocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoL1xwe0xldHRlcn0vdSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKEVNT0pJX1JFR0VYKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9bMC05XHB7TGV0dGVyfVwuXy1dL3UpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cChFTU9KSV9SRUdFWCkpLm1hbnkoKSwgKGZpcnN0LCByZXN0KSA9PiBmaXJzdCArIHJlc3Quam9pbigiIikpLmRlc2MoInZhcmlhYmxlIGlkZW50aWZpZXIiKSwNCgkgICAgLy8gQW4gT2JzaWRpYW4gbGluayBvZiB0aGUgZm9ybSBbWzxsaW5rPl1dLg0KCSAgICBsaW5rOiBfID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cW1xbKFteXFtcXV0qPylcXVxdL3UsIDEpDQoJICAgICAgICAubWFwKGxpbmtJbm5lciA9PiBwYXJzZUlubmVyTGluayhsaW5rSW5uZXIpKQ0KCSAgICAgICAgLmRlc2MoImZpbGUgbGluayIpLA0KCSAgICAvLyBBbiBlbWJlZGRhYmxlIGxpbmsgd2hpY2ggY2FuIHN0YXJ0IHdpdGggJyEnLiBUaGlzIG92ZXJsYXBzIHdpdGggdGhlIG5vcm1hbCBuZWdhdGlvbiBvcGVyYXRvciwgc28gaXQgaXMgb25seQ0KCSAgICAvLyBwcm92aWRlZCBmb3IgbWV0YWRhdGEgcGFyc2luZy4NCgkgICAgZW1iZWRMaW5rOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIhIikuYXRNb3N0KDEpLCBxLmxpbmssIChwLCBsKSA9PiB7DQoJICAgICAgICBpZiAocC5sZW5ndGggPiAwKQ0KCSAgICAgICAgICAgIGwuZW1iZWQgPSB0cnVlOw0KCSAgICAgICAgcmV0dXJuIGw7DQoJICAgIH0pLA0KCSAgICAvLyBCaW5hcnkgcGx1cyBvciBtaW51cyBvcGVyYXRvci4NCgkgICAgYmluYXJ5UGx1c01pbnVzOiBfID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cK3wtLykNCgkgICAgICAgIC5tYXAoc3RyID0+IHN0cikNCgkgICAgICAgIC5kZXNjKCInKycgb3IgJy0nIiksDQoJICAgIC8vIEJpbmFyeSB0aW1lcyBvciBkaXZpZGUgb3BlcmF0b3IuDQoJICAgIGJpbmFyeU11bERpdjogXyA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXCp8XC8vKQ0KCSAgICAgICAgLm1hcChzdHIgPT4gc3RyKQ0KCSAgICAgICAgLmRlc2MoIicqJyBvciAnLyciKSwNCgkgICAgLy8gQmluYXJ5IGNvbXBhcmlzb24gb3BlcmF0b3IuDQoJICAgIGJpbmFyeUNvbXBhcmVPcDogXyA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvPj18PD18IT18Pnw8fD0vKQ0KCSAgICAgICAgLm1hcChzdHIgPT4gc3RyKQ0KCSAgICAgICAgLmRlc2MoIic+PScgb3IgJzw9JyBvciAnIT0nIG9yICc9JyBvciAnPicgb3IgJzwnIiksDQoJICAgIC8vIEJpbmFyeSBib29sZWFuIGNvbWJpbmF0aW9uIG9wZXJhdG9yLg0KCSAgICBiaW5hcnlCb29sZWFuT3A6IF8gPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoL2FuZHxvcnwmfFx8L2kpDQoJICAgICAgICAubWFwKHN0ciA9PiB7DQoJICAgICAgICBpZiAoc3RyLnRvTG93ZXJDYXNlKCkgPT0gImFuZCIpDQoJICAgICAgICAgICAgcmV0dXJuICImIjsNCgkgICAgICAgIGVsc2UgaWYgKHN0ci50b0xvd2VyQ2FzZSgpID09ICJvciIpDQoJICAgICAgICAgICAgcmV0dXJuICJ8IjsNCgkgICAgICAgIGVsc2UNCgkgICAgICAgICAgICByZXR1cm4gc3RyOw0KCSAgICB9KQ0KCSAgICAgICAgLmRlc2MoIidhbmQnIG9yICdvciciKSwNCgkgICAgLy8gQSBkYXRlIHdoaWNoIGNhbiBiZSBZWVlZLU1NWy1ERFRISDptbTpzc10uDQoJICAgIHJvb3REYXRlOiBfID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cZHs0fS8pLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLSIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXGR7Mn0vKSwgKHllYXIsIF8sIG1vbnRoKSA9PiB7DQoJICAgICAgICByZXR1cm4gRGF0ZVRpbWVfMS5mcm9tT2JqZWN0KHsgeWVhcjogTnVtYmVyLnBhcnNlSW50KHllYXIpLCBtb250aDogTnVtYmVyLnBhcnNlSW50KG1vbnRoKSB9KTsNCgkgICAgfSkuZGVzYygiZGF0ZSBpbiBmb3JtYXQgWVlZWS1NTVstRERUSEgtTU0tU1MuTVNdIiksDQoJICAgIGRhdGVTaG9ydGhhbmQ6IF8gPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbHQoLi4uT2JqZWN0LmtleXMoREFURV9TSE9SVEhBTkRTKQ0KCSAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpDQoJICAgICAgICAubWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKSksDQoJICAgIGRhdGU6IHEgPT4gY2hhaW5PcHQocS5yb290RGF0ZSwgKHltKSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLSIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXGR7Mn0vKSwgKF8sIGRheSkgPT4geW0uc2V0KHsgZGF5OiBOdW1iZXIucGFyc2VJbnQoZGF5KSB9KSksICh5bWQpID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJUIiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cZHsyfS8pLCAoXywgaG91cikgPT4geW1kLnNldCh7IGhvdXI6IE51bWJlci5wYXJzZUludChob3VyKSB9KSksICh5bWRoKSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiOiIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXGR7Mn0vKSwgKF8sIG1pbnV0ZSkgPT4geW1kaC5zZXQoeyBtaW51dGU6IE51bWJlci5wYXJzZUludChtaW51dGUpIH0pKSwgKHltZGhtKSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiOiIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXGR7Mn0vKSwgKF8sIHNlY29uZCkgPT4geW1kaG0uc2V0KHsgc2Vjb25kOiBOdW1iZXIucGFyc2VJbnQoc2Vjb25kKSB9KSksICh5bWRobXMpID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIuIiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cZHszfS8pLCAoXywgbWlsbGlzZWNvbmQpID0+IHltZGhtcy5zZXQoeyBtaWxsaXNlY29uZDogTnVtYmVyLnBhcnNlSW50KG1pbGxpc2Vjb25kKSB9KSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3VjY2VlZCh5bWRobXMpIC8vIHBhc3MNCgkgICAgKSwgKGR0KSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiKyIpLm9yKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCItIikpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXGR7MSwyfSg6XGR7Mn0pPy8pLCAocG0sIGhyKSA9PiBkdC5zZXRab25lKCJVVEMiICsgcG0gKyBociwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIloiKSwgKCkgPT4gZHQuc2V0Wm9uZSgidXRjIiwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIlsiKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoL1swLTlBLVphLXorLVwvXSsvdSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJdIiksIChfYSwgem9uZSwgX2IpID0+IGR0LnNldFpvbmUoem9uZSwgeyBrZWVwTG9jYWxUaW1lOiB0cnVlIH0pKSkpLmFzc2VydCgoZHQpID0+IGR0LmlzVmFsaWQsICJ2YWxpZCBkYXRlIiksDQoJICAgIC8vIEEgZGF0ZSwgcGx1cyB2YXJpb3VzIHNob3J0aGFuZCB0aW1lcyBvZiBkYXkgaXQgY291bGQgYmUuDQoJICAgIGRhdGVQbHVzOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHEuZGF0ZVNob3J0aGFuZC5tYXAoZCA9PiBEQVRFX1NIT1JUSEFORFNbZF0oKSksIHEuZGF0ZSksDQoJICAgIC8vIEEgZHVyYXRpb24gb2YgdGltZS4NCgkgICAgZHVyYXRpb25UeXBlOiBfID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KC4uLk9iamVjdC5rZXlzKERVUkFUSU9OX1RZUEVTKQ0KCSAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpDQoJICAgICAgICAubWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKSksDQoJICAgIGR1cmF0aW9uOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHEubnVtYmVyLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHEuZHVyYXRpb25UeXBlLCAoY291bnQsIF8sIHQpID0+IERVUkFUSU9OX1RZUEVTW3RdLm1hcFVuaXRzKHggPT4geCAqIGNvdW50KSkNCgkgICAgICAgIC5zZXBCeTEocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIiwiKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSkub3IocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSkNCgkgICAgICAgIC5tYXAoZHVyYXRpb25zID0+IGR1cmF0aW9ucy5yZWR1Y2UoKHAsIGMpID0+IHAucGx1cyhjKSkpLA0KCSAgICAvLyBBIHJhdyBudWxsIHZhbHVlLg0KCSAgICByYXdOdWxsOiBfID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJudWxsIiksDQoJICAgIC8vIFNvdXJjZSBwYXJzaW5nLg0KCSAgICB0YWdTb3VyY2U6IHEgPT4gcS50YWcubWFwKHRhZyA9PiBTb3VyY2VzLnRhZyh0YWcpKSwNCgkgICAgY3N2U291cmNlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJjc3YoIikuc2tpcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UpLCBxLnN0cmluZywgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKSwgKF8xLCBwYXRoLCBfMikgPT4gU291cmNlcy5jc3YocGF0aCkpLA0KCSAgICBsaW5rSW5jb21pbmdTb3VyY2U6IHEgPT4gcS5saW5rLm1hcChsaW5rID0+IFNvdXJjZXMubGluayhsaW5rLnBhdGgsIHRydWUpKSwNCgkgICAgbGlua091dGdvaW5nU291cmNlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJvdXRnb2luZygiKS5za2lwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSksIHEubGluaywgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKSwgKF8xLCBsaW5rLCBfMikgPT4gU291cmNlcy5saW5rKGxpbmsucGF0aCwgZmFsc2UpKSwNCgkgICAgZm9sZGVyU291cmNlOiBxID0+IHEuc3RyaW5nLm1hcChzdHIgPT4gU291cmNlcy5mb2xkZXIoc3RyKSksDQoJICAgIHBhcmVuc1NvdXJjZTogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiKCIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHEuc291cmNlLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIpIiksIChfMSwgXzIsIGZpZWxkLCBfMywgXzQpID0+IGZpZWxkKSwNCgkgICAgbmVnYXRlU291cmNlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCItIiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIhIikpLCBxLmF0b21Tb3VyY2UsIChfLCBzb3VyY2UpID0+IFNvdXJjZXMubmVnYXRlKHNvdXJjZSkpLA0KCSAgICBhdG9tU291cmNlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHEucGFyZW5zU291cmNlLCBxLm5lZ2F0ZVNvdXJjZSwgcS5saW5rT3V0Z29pbmdTb3VyY2UsIHEubGlua0luY29taW5nU291cmNlLCBxLmZvbGRlclNvdXJjZSwgcS50YWdTb3VyY2UsIHEuY3N2U291cmNlKSwNCgkgICAgYmluYXJ5T3BTb3VyY2U6IHEgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuYXRvbVNvdXJjZSwgcS5iaW5hcnlCb29sZWFuT3AubWFwKHMgPT4gcyksIFNvdXJjZXMuYmluYXJ5T3ApLA0KCSAgICBzb3VyY2U6IHEgPT4gcS5iaW5hcnlPcFNvdXJjZSwNCgkgICAgLy8gRmllbGQgcGFyc2luZy4NCgkgICAgdmFyaWFibGVGaWVsZDogcSA9PiBxLmlkZW50aWZpZXINCgkgICAgICAgIC5jaGFpbihyID0+IHsNCgkgICAgICAgIGlmIChLRVlXT1JEUy5pbmNsdWRlcyhyLnRvVXBwZXJDYXNlKCkpKSB7DQoJICAgICAgICAgICAgcmV0dXJuIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuZmFpbCgiVmFyaWFibGUgZmllbGRzIGNhbm5vdCBiZSBhIGtleXdvcmQgKCIgKyBLRVlXT1JEUy5qb2luKCIgb3IgIikgKyAiKSIpOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSB7DQoJICAgICAgICAgICAgcmV0dXJuIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3VjY2VlZChGaWVsZHMudmFyaWFibGUocikpOw0KCSAgICAgICAgfQ0KCSAgICB9KQ0KCSAgICAgICAgLmRlc2MoInZhcmlhYmxlIiksDQoJICAgIG51bWJlckZpZWxkOiBxID0+IHEubnVtYmVyLm1hcCh2YWwgPT4gRmllbGRzLmxpdGVyYWwodmFsKSkuZGVzYygibnVtYmVyIiksDQoJICAgIHN0cmluZ0ZpZWxkOiBxID0+IHEuc3RyaW5nLm1hcCh2YWwgPT4gRmllbGRzLmxpdGVyYWwodmFsKSkuZGVzYygic3RyaW5nIiksDQoJICAgIGJvb2xGaWVsZDogcSA9PiBxLmJvb2wubWFwKHZhbCA9PiBGaWVsZHMubGl0ZXJhbCh2YWwpKS5kZXNjKCJib29sZWFuIiksDQoJICAgIGRhdGVGaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiZGF0ZSgiKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlLCBxLmRhdGVQbHVzLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIpIiksIChwcmVmaXgsIF8xLCBkYXRlLCBfMiwgcG9zdGZpeCkgPT4gRmllbGRzLmxpdGVyYWwoZGF0ZSkpLmRlc2MoImRhdGUiKSwNCgkgICAgZHVyYXRpb25GaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiZHVyKCIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHEuZHVyYXRpb24sIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKSwgKHByZWZpeCwgXzEsIGR1ciwgXzIsIHBvc3RmaXgpID0+IEZpZWxkcy5saXRlcmFsKGR1cikpLmRlc2MoImR1cmF0aW9uIiksDQoJICAgIG51bGxGaWVsZDogcSA9PiBxLnJhd051bGwubWFwKF8gPT4gRmllbGRzLk5VTEwpLA0KCSAgICBsaW5rRmllbGQ6IHEgPT4gcS5saW5rLm1hcChmID0+IEZpZWxkcy5saXRlcmFsKGYpKSwNCgkgICAgbGlzdEZpZWxkOiBxID0+IHEuZmllbGQNCgkgICAgICAgIC5zZXBCeShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSkNCgkgICAgICAgIC53cmFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJbIikuc2tpcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UudGhlbihwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiXSIpKSkNCgkgICAgICAgIC5tYXAobCA9PiBGaWVsZHMubGlzdChsKSkNCgkgICAgICAgIC5kZXNjKCJsaXN0ICgnWzEsIDIsIDNdJykiKSwNCgkgICAgb2JqZWN0RmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocS5pZGVudGlmaWVyLm9yKHEuc3RyaW5nKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIjoiKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSksIHEuZmllbGQsIChuYW1lLCBfc2VwLCB2YWx1ZSkgPT4gew0KCSAgICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWUgfTsNCgkgICAgfSkNCgkgICAgICAgIC5zZXBCeShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSkNCgkgICAgICAgIC53cmFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJ7Iikuc2tpcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UudGhlbihwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygifSIpKSkNCgkgICAgICAgIC5tYXAodmFscyA9PiB7DQoJICAgICAgICBsZXQgcmVzID0ge307DQoJICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiB2YWxzKQ0KCSAgICAgICAgICAgIHJlc1tlbnRyeS5uYW1lXSA9IGVudHJ5LnZhbHVlOw0KCSAgICAgICAgcmV0dXJuIEZpZWxkcy5vYmplY3QocmVzKTsNCgkgICAgfSkNCgkgICAgICAgIC5kZXNjKCJvYmplY3QgKCd7IGE6IDEsIGI6IDIgfScpIiksDQoJICAgIGF0b21JbmxpbmVGaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdChxLmRhdGUsIHEuZHVyYXRpb24ubWFwKGQgPT4gbm9ybWFsaXplRHVyYXRpb24oZCkpLCBxLnN0cmluZywgcS5lbWJlZExpbmssIHEuYm9vbCwgcS5udW1iZXIsIHEucmF3TnVsbCksDQoJICAgIGlubGluZUZpZWxkTGlzdDogcSA9PiBxLmF0b21JbmxpbmVGaWVsZC5zZXBCeShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKS5sb29rYWhlYWQocS5hdG9tSW5saW5lRmllbGQpKSwNCgkgICAgaW5saW5lRmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbHQocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocS5hdG9tSW5saW5lRmllbGQsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIsIikudHJpbShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UpLCBxLmlubGluZUZpZWxkTGlzdCwgKGYsIF9zLCBsKSA9PiBbZl0uY29uY2F0KGwpKSwgcS5hdG9tSW5saW5lRmllbGQpLA0KCSAgICBhdG9tRmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbHQocS5uZWdhdGVkRmllbGQsIHEubGlua0ZpZWxkLCBxLmxpc3RGaWVsZCwgcS5vYmplY3RGaWVsZCwgcS5sYW1iZGFGaWVsZCwgcS5wYXJlbnNGaWVsZCwgcS5ib29sRmllbGQsIHEubnVtYmVyRmllbGQsIHEuc3RyaW5nRmllbGQsIHEuZGF0ZUZpZWxkLCBxLmR1cmF0aW9uRmllbGQsIHEubnVsbEZpZWxkLCBxLnZhcmlhYmxlRmllbGQpLA0KCSAgICBpbmRleEZpZWxkOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHEuYXRvbUZpZWxkLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdChxLmRvdFBvc3RmaXgsIHEuaW5kZXhQb3N0Zml4LCBxLmZ1bmN0aW9uUG9zdGZpeCkubWFueSgpLCAob2JqLCBwb3N0Zml4ZXMpID0+IHsNCgkgICAgICAgIGxldCByZXN1bHQgPSBvYmo7DQoJICAgICAgICBmb3IgKGxldCBwb3N0IG9mIHBvc3RmaXhlcykgew0KCSAgICAgICAgICAgIHN3aXRjaCAocG9zdC50eXBlKSB7DQoJICAgICAgICAgICAgICAgIGNhc2UgImRvdCI6DQoJICAgICAgICAgICAgICAgIGNhc2UgImluZGV4IjoNCgkgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZpZWxkcy5pbmRleChyZXN1bHQsIHBvc3QuZmllbGQpOw0KCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoJICAgICAgICAgICAgICAgIGNhc2UgImZ1bmN0aW9uIjoNCgkgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZpZWxkcy5mdW5jKHJlc3VsdCwgcG9zdC5maWVsZHMpOw0KCSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoJICAgICAgICAgICAgfQ0KCSAgICAgICAgfQ0KCSAgICAgICAgcmV0dXJuIHJlc3VsdDsNCgkgICAgfSksDQoJICAgIG5lZ2F0ZWRGaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiISIpLCBxLmluZGV4RmllbGQsIChfLCBmaWVsZCkgPT4gRmllbGRzLm5lZ2F0ZShmaWVsZCkpLmRlc2MoIm5lZ2F0ZWQgZmllbGQiKSwNCgkgICAgcGFyZW5zRmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIigiKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlLCBxLmZpZWxkLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIpIiksIChfMSwgXzIsIGZpZWxkLCBfMywgXzQpID0+IGZpZWxkKSwNCgkgICAgbGFtYmRhRmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocS5pZGVudGlmaWVyDQoJICAgICAgICAuc2VwQnkocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIiwiKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSkpDQoJICAgICAgICAud3JhcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiKCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSkpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiPT4iKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSksIHEuZmllbGQsIChpZGVudCwgX2lnbm9yZSwgdmFsdWUpID0+IHsNCgkgICAgICAgIHJldHVybiB7IHR5cGU6ICJsYW1iZGEiLCBhcmd1bWVudHM6IGlkZW50LCB2YWx1ZSB9Ow0KCSAgICB9KSwNCgkgICAgZG90UG9zdGZpeDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLiIpLCBxLmlkZW50aWZpZXIsIChfLCBmaWVsZCkgPT4gew0KCSAgICAgICAgcmV0dXJuIHsgdHlwZTogImRvdCIsIGZpZWxkOiBGaWVsZHMubGl0ZXJhbChmaWVsZCkgfTsNCgkgICAgfSksDQoJICAgIGluZGV4UG9zdGZpeDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiWyIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHEuZmllbGQsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIl0iKSwgKF8sIF8yLCBmaWVsZCwgXzMsIF80KSA9PiB7DQoJICAgICAgICByZXR1cm4geyB0eXBlOiAiaW5kZXgiLCBmaWVsZCB9Ow0KCSAgICB9KSwNCgkgICAgZnVuY3Rpb25Qb3N0Zml4OiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIoIiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcS5maWVsZC5zZXBCeShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKSwgKF8sIF8xLCBmaWVsZHMsIF8yLCBfMykgPT4gew0KCSAgICAgICAgcmV0dXJuIHsgdHlwZTogImZ1bmN0aW9uIiwgZmllbGRzIH07DQoJICAgIH0pLA0KCSAgICAvLyBUaGUgcHJlY2VkZW5jZSBoaWVyYXJjaHkgb2Ygb3BlcmF0b3JzIC0gbXVsdGlwbHkvZGl2aWRlLCBhZGQvc3VidHJhY3QsIGNvbXBhcmUsIGFuZCB0aGVuIGJvb2xlYW4gb3BlcmF0aW9ucy4NCgkgICAgYmluYXJ5TXVsRGl2RmllbGQ6IHEgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuaW5kZXhGaWVsZCwgcS5iaW5hcnlNdWxEaXYsIEZpZWxkcy5iaW5hcnlPcCksDQoJICAgIGJpbmFyeVBsdXNNaW51c0ZpZWxkOiBxID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeU11bERpdkZpZWxkLCBxLmJpbmFyeVBsdXNNaW51cywgRmllbGRzLmJpbmFyeU9wKSwNCgkgICAgYmluYXJ5Q29tcGFyZUZpZWxkOiBxID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeVBsdXNNaW51c0ZpZWxkLCBxLmJpbmFyeUNvbXBhcmVPcCwgRmllbGRzLmJpbmFyeU9wKSwNCgkgICAgYmluYXJ5Qm9vbGVhbkZpZWxkOiBxID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeUNvbXBhcmVGaWVsZCwgcS5iaW5hcnlCb29sZWFuT3AsIEZpZWxkcy5iaW5hcnlPcCksDQoJICAgIGJpbmFyeU9wRmllbGQ6IHEgPT4gcS5iaW5hcnlCb29sZWFuRmllbGQsDQoJICAgIGZpZWxkOiBxID0+IHEuYmluYXJ5T3BGaWVsZCwNCgl9KTsKCgkvKiogUGFyc2UgaW5saW5lIGZpZWxkcyBhbmQgb3RoZXIgZW1iZWRkZWQgbWV0YWRhdGEgaW4gYSBsaW5lLiAqLw0KCS8qKiBUaGUgd3JhcHBlciBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFuIGlubGluZSBmaWVsZC4gKi8NCgljb25zdCBJTkxJTkVfRklFTERfV1JBUFBFUlMgPSBPYmplY3QuZnJlZXplKHsNCgkgICAgIlsiOiAiXSIsDQoJICAgICIoIjogIikiLA0KCX0pOw0KCS8qKg0KCSAqIEZpbmQgYSBtYXRjaGluZyBjbG9zaW5nIGJyYWNrZXQgdGhhdCBvY2N1cnMgYXQgb3IgYWZ0ZXIgYHN0YXJ0YCwgcmVzcGVjdGluZyBuZXN0aW5nIGFuZCBlc2NhcGVzLiBJZiBmb3VuZCwNCgkgKiByZXR1cm5zIHRoZSB2YWx1ZSBjb250YWluZWQgd2l0aGluIGFuZCB0aGUgc3RyaW5nIGluZGV4IGFmdGVyIHRoZSBlbmQgb2YgdGhlIHZhbHVlLg0KCSAqLw0KCWZ1bmN0aW9uIGZpbmRDbG9zaW5nKGxpbmUsIHN0YXJ0LCBvcGVuLCBjbG9zZSkgew0KCSAgICBsZXQgbmVzdGluZyA9IDA7DQoJICAgIGxldCBlc2NhcGVkID0gZmFsc2U7DQoJICAgIGZvciAobGV0IGluZGV4ID0gc3RhcnQ7IGluZGV4IDwgbGluZS5sZW5ndGg7IGluZGV4KyspIHsNCgkgICAgICAgIGxldCBjaGFyID0gbGluZS5jaGFyQXQoaW5kZXgpOw0KCSAgICAgICAgLy8gQWxsb3dzIGZvciBkb3VibGUgZXNjYXBlcyBsaWtlICdcXCcgdG8gYmUgcmVuZGVyZWQgbm9ybWFsbHkuDQoJICAgICAgICBpZiAoY2hhciA9PSAiXFwiKSB7DQoJICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkOw0KCSAgICAgICAgICAgIGNvbnRpbnVlOw0KCSAgICAgICAgfQ0KCSAgICAgICAgaWYgKGVzY2FwZWQpIHsNCgkgICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7DQoJICAgICAgICAgICAgY29udGludWU7DQoJICAgICAgICB9DQoJICAgICAgICBpZiAoY2hhciA9PSBvcGVuKQ0KCSAgICAgICAgICAgIG5lc3RpbmcrKzsNCgkgICAgICAgIGVsc2UgaWYgKGNoYXIgPT0gY2xvc2UpDQoJICAgICAgICAgICAgbmVzdGluZy0tOw0KCSAgICAgICAgLy8gT25seSBvY2N1cnMgaWYgd2UgYXJlIG9uIGEgY2xvc2UgY2hhcmFjdGVyIGFuZCB0cmhlcmUgaXMgbm8gbW9yZSBuZXN0aW5nLg0KCSAgICAgICAgaWYgKG5lc3RpbmcgPCAwKQ0KCSAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBsaW5lLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpLnRyaW0oKSwgZW5kSW5kZXg6IGluZGV4ICsgMSB9Ow0KCSAgICAgICAgZXNjYXBlZCA9IGZhbHNlOw0KCSAgICB9DQoJICAgIHJldHVybiB1bmRlZmluZWQ7DQoJfQ0KCS8qKiBGaW5kIHRoZSAnOjonIHNlcGFyYXRvciBpbiBhbiBpbmxpbmUgZmllbGQuICovDQoJZnVuY3Rpb24gZmluZFNlcGFyYXRvcihsaW5lLCBzdGFydCkgew0KCSAgICBsZXQgc2VwID0gbGluZS5pbmRleE9mKCI6OiIsIHN0YXJ0KTsNCgkgICAgbGV0IGtleSA9IGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBzZXApOw0KCSAgICAvLyBGYWlsIHRoZSBtYXRjaCBpZiB3ZSBmaW5kIGFueSBzZXBhcmF0b3IgY2hhcmFjdGVycyAobm90IGFsbG93ZWQgaW4ga2V5cykuDQoJICAgIGZvciAobGV0IHNlcCBvZiBPYmplY3Qua2V5cyhJTkxJTkVfRklFTERfV1JBUFBFUlMpLmNvbmNhdChPYmplY3QudmFsdWVzKElOTElORV9GSUVMRF9XUkFQUEVSUykpKSB7DQoJICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKHNlcCkpDQoJICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsNCgkgICAgfQ0KCSAgICByZXR1cm4geyBrZXk6IGtleS50cmltKCksIHZhbHVlSW5kZXg6IHNlcCArIDIgfTsNCgl9DQoJLyoqIFRyeSB0byBjb21wbGV0ZWx5IHBhcnNlIGFuIGlubGluZSBmaWVsZCBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uIEFzc3VlbXMgYHN0YXJ0YCBpcyBvbiBhIHdyYXBwaW5nIGNoYXJhY3Rlci4gKi8NCglmdW5jdGlvbiBmaW5kU3BlY2lmaWNJbmxpbmVGaWVsZChsaW5lLCBzdGFydCkgew0KCSAgICBsZXQgb3BlbiA9IGxpbmUuY2hhckF0KHN0YXJ0KTsNCgkgICAgbGV0IGtleSA9IGZpbmRTZXBhcmF0b3IobGluZSwgc3RhcnQgKyAxKTsNCgkgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKQ0KCSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsNCgkgICAgbGV0IHZhbHVlID0gZmluZENsb3NpbmcobGluZSwga2V5LnZhbHVlSW5kZXgsIG9wZW4sIElOTElORV9GSUVMRF9XUkFQUEVSU1tvcGVuXSk7DQoJICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKQ0KCSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsNCgkgICAgcmV0dXJuIHsNCgkgICAgICAgIGtleToga2V5LmtleSwNCgkgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSwNCgkgICAgICAgIHN0YXJ0OiBzdGFydCwNCgkgICAgICAgIHN0YXJ0VmFsdWU6IGtleS52YWx1ZUluZGV4LA0KCSAgICAgICAgZW5kOiB2YWx1ZS5lbmRJbmRleCwNCgkgICAgICAgIHdyYXBwaW5nOiBvcGVuLA0KCSAgICB9Ow0KCX0NCgkvKiogUGFyc2UgYSB0ZXh0dWFsIGlubGluZSBmaWVsZCB2YWx1ZSBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gd29yayB3aXRoLiAqLw0KCWZ1bmN0aW9uIHBhcnNlSW5saW5lVmFsdWUodmFsdWUpIHsNCgkgICAgLy8gVGhlIHN0cmlwcGVkIGxpdGVyYWwgZmllbGQgcGFyc2VyIHVuZGVyc3RhbmRzIGFsbCBvZiB0aGUgbm9uLWFycmF5L25vbi1vYmplY3QgZmllbGRzIGFuZCBjYW4gcGFyc2UgdGhlbSBmb3IgdXMuDQoJICAgIC8vIElubGluZSBmaWVsZCBvYmplY3RzIGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZDsgaW5saW5lIGFycmF5IG9iamVjdHMgaGF2ZSB0byBiZSBoYW5kbGVkIGJ5IHRoZSBwYXJzZXINCgkgICAgLy8gc2VwYXJhdGVseS4NCgkgICAgbGV0IGlubGluZSA9IEVYUFJFU1NJT04uaW5saW5lRmllbGQucGFyc2UodmFsdWUpOw0KCSAgICBpZiAoaW5saW5lLnN0YXR1cykNCgkgICAgICAgIHJldHVybiBpbmxpbmUudmFsdWU7DQoJICAgIGVsc2UNCgkgICAgICAgIHJldHVybiB2YWx1ZTsNCgl9DQoJLyoqIEV4dHJhY3RzIGlubGluZSBmaWVsZHMgb2YgdGhlIGZvcm0gJ1trZXk6OiB2YWx1ZV0nIGZyb20gYSBsaW5lIG9mIHRleHQuIFRoaXMgaXMgZG9uZSBpbiBhIHJlbGF0aXZlbHkNCgkgKiAicm9idXN0IiB3YXkgdG8gYXZvaWQgZmFpbGluZyBkdWUgdG8gYmFkIG5lc3Rpbmcgb3Igb3RoZXIgaW50ZXJmZXJpbmcgTWFya2Rvd24gc3ltYm9sczoNCgkgKg0KCSAqIC0gTG9vayBmb3IgYW55IHdyYXBwZXJzICgnWycgYW5kICcoJykgaW4gdGhlIGxpbmUsIHRyeWluZyB0byBwYXJzZSB3aGF0ZXZlciBjb21lcyBhZnRlciBpdCBhcyBhbiBpbmxpbmUga2V5OjouDQoJICogLSBJZiBzdWNjZXNzZnVsLCBzY2FuIHVudGlsIHlvdSBmaW5kIGEgbWF0Y2hpbmcgZW5kIGJyYWNrZXQsIGFuZCBwYXJzZSB3aGF0ZXZlciByZW1haW5zIGFzIGFuIGlubGluZSB2YWx1ZS4NCgkgKi8NCglmdW5jdGlvbiBleHRyYWN0SW5saW5lRmllbGRzKGxpbmUpIHsNCgkgICAgbGV0IGZpZWxkcyA9IFtdOw0KCSAgICBmb3IgKGxldCB3cmFwcGVyIG9mIE9iamVjdC5rZXlzKElOTElORV9GSUVMRF9XUkFQUEVSUykpIHsNCgkgICAgICAgIGxldCBmb3VuZEluZGV4ID0gbGluZS5pbmRleE9mKHdyYXBwZXIpOw0KCSAgICAgICAgd2hpbGUgKGZvdW5kSW5kZXggPj0gMCkgew0KCSAgICAgICAgICAgIGxldCBwYXJzZWRGaWVsZCA9IGZpbmRTcGVjaWZpY0lubGluZUZpZWxkKGxpbmUsIGZvdW5kSW5kZXgpOw0KCSAgICAgICAgICAgIGlmICghcGFyc2VkRmllbGQpIHsNCgkgICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IGxpbmUuaW5kZXhPZih3cmFwcGVyLCBmb3VuZEluZGV4ICsgMSk7DQoJICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KCSAgICAgICAgICAgIH0NCgkgICAgICAgICAgICBmaWVsZHMucHVzaChwYXJzZWRGaWVsZCk7DQoJICAgICAgICAgICAgZm91bmRJbmRleCA9IGxpbmUuaW5kZXhPZih3cmFwcGVyLCBwYXJzZWRGaWVsZC5lbmQpOw0KCSAgICAgICAgfQ0KCSAgICB9DQoJICAgIGZpZWxkcy5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0IC0gYi5zdGFydCk7DQoJICAgIHJldHVybiBmaWVsZHM7DQoJfQ0KCWNvbnN0IENSRUFURURfREFURV9SRUdFWCA9IC9cdXsyNzk1fVxzKihcZHs0fS1cZHsyfS1cZHsyfSkvdTsNCgljb25zdCBEVUVfREFURV9SRUdFWCA9IC9bXHV7MUY0QzV9XHV7MUY0QzZ9XHV7MUY1RDN9XVxzKihcZHs0fS1cZHsyfS1cZHsyfSkvdTsNCgljb25zdCBET05FX0RBVEVfUkVHRVggPSAvXHV7MjcwNX1ccyooXGR7NH0tXGR7Mn0tXGR7Mn0pL3U7DQoJLyoqIFBhcnNlIHNwZWNpYWwgY29tcGxldGVkL2R1ZS9kb25lIHRhc2sgZmllbGRzIHdoaWNoIGFyZSBtYXJrZWQgdmlhIGVtb2ppLiAqLw0KCWZ1bmN0aW9uIGV4dHJhY3RTcGVjaWFsVGFza0ZpZWxkcyhsaW5lLCBhbm5vdGF0aW9ucykgew0KCSAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfajsNCgkgICAgbGV0IHJlc3VsdCA9IHt9Ow0KCSAgICBsZXQgY3JlYXRlZE1hdGNoID0gQ1JFQVRFRF9EQVRFX1JFR0VYLmV4ZWMobGluZSk7DQoJICAgIGlmIChjcmVhdGVkTWF0Y2gpDQoJICAgICAgICByZXN1bHQuY3JlYXRlZCA9IERhdGVUaW1lXzEuZnJvbUlTTyhjcmVhdGVkTWF0Y2hbMV0pOw0KCSAgICBsZXQgZHVlTWF0Y2ggPSBEVUVfREFURV9SRUdFWC5leGVjKGxpbmUpOw0KCSAgICBpZiAoZHVlTWF0Y2gpDQoJICAgICAgICByZXN1bHQuZHVlID0gRGF0ZVRpbWVfMS5mcm9tSVNPKGR1ZU1hdGNoWzFdKTsNCgkgICAgbGV0IGNvbXBsZXRlZE1hdGNoID0gRE9ORV9EQVRFX1JFR0VYLmV4ZWMobGluZSk7DQoJICAgIGlmIChjb21wbGV0ZWRNYXRjaCkNCgkgICAgICAgIHJlc3VsdC5jb21wbGV0ZWQgPSBEYXRlVGltZV8xLmZyb21JU08oY29tcGxldGVkTWF0Y2hbMV0pOw0KCSAgICAvLyBBbGxvdyBmb3IgdGV4dHVhbCBmaWVsZHMgdG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBlbW9qaSBmb3IgbG9zZXJzIGxpa2UgbWUuDQoJICAgIGlmIChhbm5vdGF0aW9ucykgew0KCSAgICAgICAgbGV0IGFuQ3JlYXRlZCA9IChfYiA9IChfYSA9IGFubm90YXRpb25zLmNyZWF0ZWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGFubm90YXRpb25zLmN0aW1lKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBhbm5vdGF0aW9ucy5jZGF5Ow0KCSAgICAgICAgaWYgKGFuQ3JlYXRlZCAmJiBWYWx1ZXMuaXNEYXRlKGFuQ3JlYXRlZCkpDQoJICAgICAgICAgICAgcmVzdWx0LmNyZWF0ZWQgPSAoX2MgPSByZXN1bHQuY3JlYXRlZCkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogYW5DcmVhdGVkOw0KCSAgICAgICAgbGV0IGFuQ29tcGxldGVkID0gKF9lID0gKF9kID0gYW5ub3RhdGlvbnMuY29tcGxldGlvbikgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogYW5ub3RhdGlvbnMuY29tcHRpbWUpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IGFubm90YXRpb25zLmNvbXBkYXk7DQoJICAgICAgICBpZiAoYW5Db21wbGV0ZWQgJiYgVmFsdWVzLmlzRGF0ZShhbkNvbXBsZXRlZCkpDQoJICAgICAgICAgICAgcmVzdWx0LmNvbXBsZXRlZCA9IChfZiA9IHJlc3VsdC5jb21wbGV0ZWQpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IGFuQ29tcGxldGVkOw0KCSAgICAgICAgbGV0IGFuRHVlID0gKF9oID0gKF9nID0gYW5ub3RhdGlvbnMuZHVlKSAhPT0gbnVsbCAmJiBfZyAhPT0gdm9pZCAwID8gX2cgOiBhbm5vdGF0aW9ucy5kdWV0aW1lKSAhPT0gbnVsbCAmJiBfaCAhPT0gdm9pZCAwID8gX2ggOiBhbm5vdGF0aW9ucy5kdWVkYXk7DQoJICAgICAgICBpZiAoYW5EdWUgJiYgVmFsdWVzLmlzRGF0ZShhbkR1ZSkpDQoJICAgICAgICAgICAgcmVzdWx0LmR1ZSA9IChfaiA9IHJlc3VsdC5kdWUpICE9PSBudWxsICYmIF9qICE9PSB2b2lkIDAgPyBfaiA6IGFuRHVlOw0KCSAgICB9DQoJICAgIHJldHVybiByZXN1bHQ7DQoJfQoKCS8qKiBJbXBvcnRlciBmb3IgbWFya2Rvd24gZG9jdW1lbnRzLiAqLw0KCS8qKiBNYXRjaGVzIGxpbmVzIG9mIHRoZSBmb3JtICItIFsgXSA8dGFzayB0aGluZz4iLiAqLw0KCWNvbnN0IFRBU0tfUkVHRVggPSAvXihccyopWy0qXVxzKihcW1sgWHhcLl0/XF0pP1xzKihbXi0qXS4qKSQvaXU7DQoJLyoqIE1hdGNoZXMgT2JzaWRpYW4gYmxvY2sgSURzLCB3aGljaCBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSBvZiB0aGUgZm9ybSBeYmxvY2tpZC4gKi8NCgljb25zdCBUQVNLX0JMT0NLX1JFR0VYID0gL1xeKFxTKykkLzsNCgkvKiogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHByZWRpY2F0ZSBpcyB0cnVlIGZvciB0aGUgdGFzayBvciBhbnkgc3VidGFza3MuICovDQoJZnVuY3Rpb24gdGFza0FueSh0LCBmKSB7DQoJICAgIGlmIChmKHQpKQ0KCSAgICAgICAgcmV0dXJuIHRydWU7DQoJICAgIGZvciAobGV0IHN1YiBvZiB0LnN1YnRhc2tzKQ0KCSAgICAgICAgaWYgKHRhc2tBbnkoc3ViLCBmKSkNCgkgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCgkgICAgcmV0dXJuIGZhbHNlOw0KCX0NCglmdW5jdGlvbiBhbGFzdChhcnIpIHsNCgkgICAgaWYgKGFyci5sZW5ndGggPiAwKQ0KCSAgICAgICAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07DQoJICAgIGVsc2UNCgkgICAgICAgIHJldHVybiB1bmRlZmluZWQ7DQoJfQ0KCS8qKiBGaW5kIHRoZSBoZWFkZXIgdGhhdCBpcyBtb3N0IGltbWVkaWF0ZWx5IGFib3ZlIHRoZSBnaXZlbiBsaW5lIG51bWJlci4gKi8NCglmdW5jdGlvbiBmaW5kUHJldmlvdXNIZWFkZXIobGluZSwgaGVhZGVycykgew0KCSAgICBpZiAoaGVhZGVycy5sZW5ndGggPT0gMCkNCgkgICAgICAgIHJldHVybiB1bmRlZmluZWQ7DQoJICAgIGlmIChoZWFkZXJzWzBdLnBvc2l0aW9uLnN0YXJ0LmxpbmUgPiBsaW5lKQ0KCSAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsNCgkgICAgbGV0IGluZGV4ID0gaGVhZGVycy5sZW5ndGggLSAxOw0KCSAgICB3aGlsZSAoaW5kZXggPj0gMCAmJiBoZWFkZXJzW2luZGV4XS5wb3NpdGlvbi5zdGFydC5saW5lID4gbGluZSkNCgkgICAgICAgIGluZGV4LS07DQoJICAgIHJldHVybiBoZWFkZXJzW2luZGV4XS5oZWFkaW5nOw0KCX0NCgkvKioNCgkgKiBBIGhhY2t5IGFwcHJvYWNoIHRvIHNjYW5uaW5nIGZvciBhbGwgdGFza3MgdXNpbmcgcmVnZXguIERvZXMgbm90IHN1cHBvcnQgbXVsdGlsaW5lDQoJICogdGFza3MgeWV0ICh0aG91Z2ggY2FuIHByb2JhYmx5IGJlIHJldHJvLWZpdHRlZCB0byBkbyBzbykuDQoJICovDQoJZnVuY3Rpb24gZmluZFRhc2tzSW5GaWxlKHBhdGgsIGZpbGUsIG1ldGFkYXRhKSB7DQoJICAgIHZhciBfYSwgX2IsIF9jOw0KCSAgICAvLyBEdW1teSB0b3Agb2YgdGhlIHN0YWNrIHRoYXQgd2UnbGwganVzdCBuZXZlciBnZXQgcmlkIG9mLg0KCSAgICBsZXQgc3RhY2sgPSBbXTsNCgkgICAgc3RhY2sucHVzaChbDQoJICAgICAgICBuZXcgVGFzayh7IHRleHQ6ICJSb290IiwgbGluZTogLTEsIHBhdGgsIGNvbXBsZXRlZDogZmFsc2UsIGZ1bGx5Q29tcGxldGVkOiBmYWxzZSwgcmVhbDogZmFsc2UsIHN1YnRhc2tzOiBbXSB9KSwNCgkgICAgICAgIC00LA0KCSAgICBdKTsNCgkgICAgbGV0IGxpbmVubyA9IC0xOw0KCSAgICBmb3IgKGxldCBsaW5lIG9mIGZpbGUucmVwbGFjZSgiXHIiLCAiIikuc3BsaXQoIlxuIikpIHsNCgkgICAgICAgIGxpbmVubyArPSAxOw0KCSAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgYWN0dWFsbHkgYSBsaXN0IGVsZW1lbnQsIHRvIHNraXAgbGluZXMgd2hpY2ggb2J2aW91c2x5IHdvbid0IG1hdGNoLg0KCSAgICAgICAgaWYgKCFsaW5lLmluY2x1ZGVzKCIqIikgJiYgIWxpbmUuaW5jbHVkZXMoIi0iKSkgew0KCSAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAxKQ0KCSAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsNCgkgICAgICAgICAgICBjb250aW51ZTsNCgkgICAgICAgIH0NCgkgICAgICAgIGxldCBtYXRjaCA9IFRBU0tfUkVHRVguZXhlYyhsaW5lKTsNCgkgICAgICAgIGlmICghbWF0Y2gpIHsNCgkgICAgICAgICAgICBpZiAobGluZS50cmltKCkubGVuZ3RoID09IDApDQoJICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KCSAgICAgICAgICAgIC8vIE5vbi1lbXB0eSBsaW5lIHRoYXQgaXMgbm90IGEgdGFzaywgcmVzZXQuDQoJICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDEpDQoJICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpOw0KCSAgICAgICAgICAgIGNvbnRpbnVlOw0KCSAgICAgICAgfQ0KCSAgICAgICAgLy8gTG9vayBmb3IgYmxvY2sgSURzIG9uIHRoaXMgbGluZTsgaWYgcHJlc2VudCwgbGluayB0byB0aGF0LiBPdGhlcndpc2UsIGxpbmsgdG8gdGhlIG5lYXJlc3QgaGVhZGVyDQoJICAgICAgICAvLyBhbmQgdGhlbiB0byBqdXN0IHRoZSBwYWdlLg0KCSAgICAgICAgbGV0IGxpbmsgPSBMaW5rLmZpbGUocGF0aCwgZmFsc2UpOw0KCSAgICAgICAgbGV0IGJsb2NrTWF0Y2ggPSBUQVNLX0JMT0NLX1JFR0VYLmV4ZWMobGluZSk7DQoJICAgICAgICBsZXQgbGFzdEhlYWRlciA9IGZpbmRQcmV2aW91c0hlYWRlcihsaW5lbm8sIG1ldGFkYXRhLmhlYWRpbmdzIHx8IFtdKTsNCgkgICAgICAgIGlmIChibG9ja01hdGNoKSB7DQoJICAgICAgICAgICAgbGluayA9IExpbmsuYmxvY2socGF0aCwgYmxvY2tNYXRjaFsxXSwgZmFsc2UpOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSBpZiAobGFzdEhlYWRlcikgew0KCSAgICAgICAgICAgIGxpbmsgPSBMaW5rLmhlYWRlcihwYXRoLCBsYXN0SGVhZGVyLCBmYWxzZSk7DQoJICAgICAgICB9DQoJICAgICAgICAvLyBBZGQgYWxsIGlubGluZSBmaWVsZCBkZWZpbml0aW9ucy4NCgkgICAgICAgIGxldCBhbm5vdGF0aW9ucyA9IHt9Ow0KCSAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgZXh0cmFjdElubGluZUZpZWxkcyhsaW5lKSkgew0KCSAgICAgICAgICAgIGxldCB2YWx1ZSA9IHBhcnNlSW5saW5lVmFsdWUoZmllbGQudmFsdWUpOw0KCSAgICAgICAgICAgIGFubm90YXRpb25zW2ZpZWxkLmtleV0gPSB2YWx1ZTsNCgkgICAgICAgICAgICBhbm5vdGF0aW9uc1tjYW5vbmljYWxpemVWYXJOYW1lKGZpZWxkLmtleSldID0gdmFsdWU7DQoJICAgICAgICB9DQoJICAgICAgICBsZXQgc3BlY2lhbCA9IGV4dHJhY3RTcGVjaWFsVGFza0ZpZWxkcyhsaW5lLCBhbm5vdGF0aW9ucyk7DQoJICAgICAgICBsZXQgaW5kZW50ID0gbWF0Y2hbMV0ucmVwbGFjZSgiXHQiLCAiICAgICIpLmxlbmd0aDsNCgkgICAgICAgIGxldCBpc1JlYWwgPSAhIW1hdGNoWzJdICYmIG1hdGNoWzJdLnRyaW0oKS5sZW5ndGggPiAwOw0KCSAgICAgICAgbGV0IGlzQ29tcGxldGVkID0gIWlzUmVhbCB8fCBtYXRjaFsyXSA9PSAiW1hdIiB8fCBtYXRjaFsyXSA9PSAiW3hdIjsNCgkgICAgICAgIGxldCB0YXNrID0gbmV3IFRhc2soew0KCSAgICAgICAgICAgIHRleHQ6IG1hdGNoWzNdLA0KCSAgICAgICAgICAgIGNvbXBsZXRlZDogaXNDb21wbGV0ZWQsDQoJICAgICAgICAgICAgZnVsbHlDb21wbGV0ZWQ6IGlzQ29tcGxldGVkLA0KCSAgICAgICAgICAgIHJlYWw6IGlzUmVhbCwNCgkgICAgICAgICAgICBwYXRoLA0KCSAgICAgICAgICAgIGxpbmU6IGxpbmVubywNCgkgICAgICAgICAgICBzZWN0aW9uOiBsYXN0SGVhZGVyID8gTGluay5oZWFkZXIocGF0aCwgbGFzdEhlYWRlciwgZmFsc2UpIDogTGluay5maWxlKHBhdGgsIGZhbHNlKSwNCgkgICAgICAgICAgICBsaW5rLA0KCSAgICAgICAgICAgIHN1YnRhc2tzOiBbXSwNCgkgICAgICAgICAgICBhbm5vdGF0aW9ucywNCgkgICAgICAgICAgICBjcmVhdGVkOiBzcGVjaWFsLmNyZWF0ZWQsDQoJICAgICAgICAgICAgZHVlOiBzcGVjaWFsLmR1ZSwNCgkgICAgICAgICAgICBjb21wbGV0aW9uOiBzcGVjaWFsLmNvbXBsZXRlZCwNCgkgICAgICAgIH0pOw0KCSAgICAgICAgd2hpbGUgKGluZGVudCA8PSAoKF9iID0gKF9hID0gYWxhc3Qoc3RhY2spKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IC00KSkNCgkgICAgICAgICAgICBzdGFjay5wb3AoKTsNCgkgICAgICAgIGZvciAobGV0IFtlbGVtLCBfXSBvZiBzdGFjaykNCgkgICAgICAgICAgICBlbGVtLmZ1bGx5Q29tcGxldGVkID0gZWxlbS5mdWxseUNvbXBsZXRlZCAmJiB0YXNrLmZ1bGx5Q29tcGxldGVkOw0KCSAgICAgICAgKF9jID0gYWxhc3Qoc3RhY2spKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NbMF0uc3VidGFza3MucHVzaCh0YXNrKTsNCgkgICAgICAgIHN0YWNrLnB1c2goW3Rhc2ssIGluZGVudF0pOw0KCSAgICB9DQoJICAgIC8vIFJldHVybiBldmVyeXRoaW5nIHVuZGVyIHRoZSByb290LCB3aGljaCBzaG91bGQgYmUgYWxsIHRhc2tzLg0KCSAgICAvLyBTdHJpcCB0cmVlcyBvZiB0YXNrcyB3aGljaCBhcmUgcHVyZWx5IG5vdCByZWFsIChsb2w/KS4NCgkgICAgcmV0dXJuIHN0YWNrWzBdWzBdLnN1YnRhc2tzLmZpbHRlcih0ID0+IHRhc2tBbnkodCwgc3QgPT4gc3QucmVhbCkpOw0KCX0NCglmdW5jdGlvbiBwYXJzZU1hcmtkb3duKHBhdGgsIG1ldGFkYXRhLCBjb250ZW50cywgaW5saW5lUmVnZXgpIHsNCgkgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nOw0KCSAgICBsZXQgZmllbGRzID0gbmV3IE1hcCgpOw0KCSAgICAvLyBUcmF3bCB0aHJvdWdoIGZpbGUgY29udGVudHMgdG8gbG9jYXRlIGN1c3RvbSBpbmxpbmUgZmlsZSBjb250ZW50Li4uDQoJICAgIGZvciAobGV0IGxpbmUgb2YgY29udGVudHMuc3BsaXQoIlxuIikpIHsNCgkgICAgICAgIC8vIEZhc3QgYmFpbC1vdXQgZm9yIGxpbmVzIHRoYXQgYXJlIHRvbyBsb25nLg0KCSAgICAgICAgaWYgKCFsaW5lLmluY2x1ZGVzKCI6OiIpKQ0KCSAgICAgICAgICAgIGNvbnRpbnVlOw0KCSAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpOw0KCSAgICAgICAgLy8gU2tpcCByZWFsIHRhc2sgbGluZXMsIHNpbmNlIHRoZXkgY2FuIGhhdmUgdGhlaXIgb3duIGN1c3RvbSBtZXRhZGF0YS4NCgkgICAgICAgIC8vIFRPRE86IEFic3RyYWN0IHRoaXMgY2hlY2sgKGkuZS4sIGltcHJvdmUgdGFzayBwYXJzaW5nIHRvIGJlIG1vcmUgZW5jYXBzdWxhdGVkKS4NCgkgICAgICAgIGxldCB0YXNrUGFyc2UgPSBUQVNLX1JFR0VYLmV4ZWMobGluZSk7DQoJICAgICAgICBpZiAodGFza1BhcnNlICYmICgoX2MgPSAoX2IgPSAoX2EgPSB0YXNrUGFyc2VbMl0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50cmltKCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDApID4gMCkNCgkgICAgICAgICAgICBjb250aW51ZTsNCgkgICAgICAgIC8vIEhhbmRsZSBpbmxpbmUtaW5saW5lIGZpZWxkcyAoaGFoYS4uLikNCgkgICAgICAgIGxldCBoYXNJbmxpbmVJbmxpbmUgPSBmYWxzZTsNCgkgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIGV4dHJhY3RJbmxpbmVGaWVsZHMobGluZSkpIHsNCgkgICAgICAgICAgICBsZXQgdmFsdWUgPSBwYXJzZUlubGluZVZhbHVlKGZpZWxkLnZhbHVlKTsNCgkgICAgICAgICAgICBmaWVsZHMuc2V0KGZpZWxkLmtleSwgKChfZCA9IGZpZWxkcy5nZXQoZmllbGQua2V5KSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogW10pLmNvbmNhdChbdmFsdWVdKSk7DQoJICAgICAgICAgICAgbGV0IHNpbXBsZU5hbWUgPSBjYW5vbmljYWxpemVWYXJOYW1lKGZpZWxkLmtleSk7DQoJICAgICAgICAgICAgaWYgKHNpbXBsZU5hbWUubGVuZ3RoID4gMCAmJiBzaW1wbGVOYW1lICE9IGZpZWxkLmtleS50cmltKCkpIHsNCgkgICAgICAgICAgICAgICAgZmllbGRzLnNldChzaW1wbGVOYW1lLCAoKF9lID0gZmllbGRzLmdldChzaW1wbGVOYW1lKSkgIT09IG51bGwgJiYgX2UgIT09IHZvaWQgMCA/IF9lIDogW10pLmNvbmNhdChbdmFsdWVdKSk7DQoJICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgIGhhc0lubGluZUlubGluZSA9IHRydWU7DQoJICAgICAgICB9DQoJICAgICAgICAvLyBIYW5kbGUgZnVsbC1saW5lIGlubGluZSBmaWVsZHMgaWYgdGhlcmUgYXJlIG5vIGlubGluZS1pbmxpbmUgZmllbGRzLg0KCSAgICAgICAgaWYgKCFoYXNJbmxpbmVJbmxpbmUpIHsNCgkgICAgICAgICAgICBsZXQgbWF0Y2ggPSBpbmxpbmVSZWdleC5leGVjKGxpbmUpOw0KCSAgICAgICAgICAgIGlmIChtYXRjaCkgew0KCSAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IG1hdGNoWzFdLnRyaW0oKTsNCgkgICAgICAgICAgICAgICAgbGV0IGlubGluZUZpZWxkID0gcGFyc2VJbmxpbmVWYWx1ZShtYXRjaFsyXSk7DQoJICAgICAgICAgICAgICAgIGZpZWxkcy5zZXQobmFtZSwgKChfZiA9IGZpZWxkcy5nZXQobmFtZSkpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IFtdKS5jb25jYXQoW2lubGluZUZpZWxkXSkpOw0KCSAgICAgICAgICAgICAgICBsZXQgc2ltcGxlTmFtZSA9IGNhbm9uaWNhbGl6ZVZhck5hbWUobWF0Y2hbMV0udHJpbSgpKTsNCgkgICAgICAgICAgICAgICAgaWYgKHNpbXBsZU5hbWUubGVuZ3RoID4gMCAmJiBzaW1wbGVOYW1lICE9IG1hdGNoWzFdLnRyaW0oKSkgew0KCSAgICAgICAgICAgICAgICAgICAgZmllbGRzLnNldChzaW1wbGVOYW1lLCAoKF9nID0gZmllbGRzLmdldChzaW1wbGVOYW1lKSkgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogW10pLmNvbmNhdChbaW5saW5lRmllbGRdKSk7DQoJICAgICAgICAgICAgICAgIH0NCgkgICAgICAgICAgICB9DQoJICAgICAgICB9DQoJICAgIH0NCgkgICAgLy8gQW5kIGV4dHJhY3QgdGFza3MuLi4NCgkgICAgbGV0IHRhc2tzID0gZmluZFRhc2tzSW5GaWxlKHBhdGgsIGNvbnRlbnRzLCBtZXRhZGF0YSk7DQoJICAgIHJldHVybiB7IGZpZWxkcywgdGFza3MgfTsNCgl9CgoJLyoqIEFjdHVhbCByYXcgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBiYWNrZ3JvdW5kIGltcG9ydGVyLiBNYWlubHkgaGFuZGxlcyBtZXNzYWdlIHBhc3NpbmcuICovDQoJZnVuY3Rpb24gcnVuSW1wb3J0KHBhdGgsIGNvbnRlbnRzLCBtZXRhZGF0YSkgew0KCSAgICByZXR1cm4gcGFyc2VNYXJrZG93bihwYXRoLCBtZXRhZGF0YSwgY29udGVudHMsIC9bX1wqfmBdKihbMC05XHdccHtMZXR0ZXJ9XVstMC05XHdccHtMZXR0ZXJ9XHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxzL10qKVtfXCp+YF0qXHMqOjpccyooLispL3UpOw0KCX0KCgl2YXIgVHJhbnNmZXJhYmxlOw0KCShmdW5jdGlvbiAoVHJhbnNmZXJhYmxlKSB7DQoJICAgIC8qKiBDb252ZXJ0IGEgbGl0ZXJhbCB2YWx1ZSB0byBhIHNlcmlhbGl6ZXItZnJpZW5kbHkgdHJhbnNmZXJhYmxlIHZhbHVlLiBEb2VzIG5vdCB3b3JrIGZvciBhbGwgdHlwZXMuICovDQoJICAgIGZ1bmN0aW9uIHRyYW5zZmVyYWJsZSh2YWx1ZSkgew0KCSAgICAgICAgLy8gSGFuZGxlIG5vbi1kYXRhdmlldyB2YWx1ZXMgZmlyc3QuDQoJICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHsNCgkgICAgICAgICAgICBsZXQgY29waWVkID0gbmV3IE1hcCgpOw0KCSAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbF0gb2YgdmFsdWUuZW50cmllcygpKQ0KCSAgICAgICAgICAgICAgICBjb3BpZWQuc2V0KHRyYW5zZmVyYWJsZShrZXkpLCB0cmFuc2ZlcmFibGUodmFsKSk7DQoJICAgICAgICAgICAgcmV0dXJuIGNvcGllZDsNCgkgICAgICAgIH0NCgkgICAgICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0KSB7DQoJICAgICAgICAgICAgbGV0IGNvcGllZCA9IG5ldyBTZXQoKTsNCgkgICAgICAgICAgICBmb3IgKGxldCB2YWwgb2YgdmFsdWUpDQoJICAgICAgICAgICAgICAgIGNvcGllZC5hZGQodHJhbnNmZXJhYmxlKHZhbCkpOw0KCSAgICAgICAgICAgIHJldHVybiBjb3BpZWQ7DQoJICAgICAgICB9DQoJICAgICAgICBsZXQgd3JhcHBlZCA9IFZhbHVlcy53cmFwVmFsdWUodmFsdWUpOw0KCSAgICAgICAgaWYgKHdyYXBwZWQgPT09IHVuZGVmaW5lZCkNCgkgICAgICAgICAgICB0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIHRyYW5zZmVyYWJsZSB2YWx1ZTogIiArIHZhbHVlKTsNCgkgICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7DQoJICAgICAgICAgICAgY2FzZSAibnVsbCI6DQoJICAgICAgICAgICAgY2FzZSAibnVtYmVyIjoNCgkgICAgICAgICAgICBjYXNlICJzdHJpbmciOg0KCSAgICAgICAgICAgIGNhc2UgImJvb2xlYW4iOg0KCSAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZTsNCgkgICAgICAgICAgICBjYXNlICJkYXRlIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHsNCgkgICAgICAgICAgICAgICAgICAgICJfX190cmFuc2Zlci10eXBlIjogImRhdGUiLA0KCSAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRyYW5zZmVyYWJsZSh3cmFwcGVkLnZhbHVlLnRvT2JqZWN0KCkpLA0KCSAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogeyB6b25lOiB3cmFwcGVkLnZhbHVlLnpvbmVOYW1lIH0sDQoJICAgICAgICAgICAgICAgIH07DQoJICAgICAgICAgICAgY2FzZSAiZHVyYXRpb24iOg0KCSAgICAgICAgICAgICAgICByZXR1cm4geyAiX19fdHJhbnNmZXItdHlwZSI6ICJkdXJhdGlvbiIsIHZhbHVlOiB0cmFuc2ZlcmFibGUod3JhcHBlZC52YWx1ZS50b09iamVjdCgpKSB9Ow0KCSAgICAgICAgICAgIGNhc2UgImFycmF5IjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFwKHYgPT4gdHJhbnNmZXJhYmxlKHYpKTsNCgkgICAgICAgICAgICBjYXNlICJvYmplY3QiOg0KCSAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0ge307DQoJICAgICAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh3cmFwcGVkLnZhbHVlKSkNCgkgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdHJhbnNmZXJhYmxlKHZhbHVlKTsNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCgkgICAgICAgICAgICBjYXNlICJsaW5rIjoNCgkgICAgICAgICAgICAgICAgcmV0dXJuIHsgIl9fX3RyYW5zZmVyLXR5cGUiOiAibGluayIsIHZhbHVlOiB0cmFuc2ZlcmFibGUod3JhcHBlZC52YWx1ZS50b09iamVjdCgpKSB9Ow0KCSAgICAgICAgICAgIGNhc2UgInRhc2siOg0KCSAgICAgICAgICAgICAgICByZXR1cm4geyAiX19fdHJhbnNmZXItdHlwZSI6ICJ0YXNrIiwgdmFsdWU6IHRyYW5zZmVyYWJsZSh3cmFwcGVkLnZhbHVlLnRvT2JqZWN0KGZhbHNlKSkgfTsNCgkgICAgICAgICAgICBkZWZhdWx0Og0KCSAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIHRyYW5zZmVyYWJsZSBsaXRlcmFsIHZhbHVlOiAiICsgdmFsdWUpOw0KCSAgICAgICAgfQ0KCSAgICB9DQoJICAgIFRyYW5zZmVyYWJsZS50cmFuc2ZlcmFibGUgPSB0cmFuc2ZlcmFibGU7DQoJICAgIC8qKiBDb252ZXJ0IGEgdHJhbnNmZXJhYmxlIHZhbHVlIGJhY2sgdG8gYSBsaXRlcmFsIHZhbHVlIHdlIGNhbiB3b3JrIHdpdGguICovDQoJICAgIGZ1bmN0aW9uIHZhbHVlKHRyYW5zZmVyYWJsZSkgew0KCSAgICAgICAgaWYgKHRyYW5zZmVyYWJsZSA9PT0gbnVsbCkgew0KCSAgICAgICAgICAgIHJldHVybiBudWxsOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSBpZiAodHJhbnNmZXJhYmxlID09PSB1bmRlZmluZWQpIHsNCgkgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSBpZiAodHJhbnNmZXJhYmxlIGluc3RhbmNlb2YgTWFwKSB7DQoJICAgICAgICAgICAgbGV0IHJlYWwgPSBuZXcgTWFwKCk7DQoJICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsXSBvZiB0cmFuc2ZlcmFibGUuZW50cmllcygpKQ0KCSAgICAgICAgICAgICAgICByZWFsLnNldCh2YWx1ZShrZXkpLCB2YWx1ZSh2YWwpKTsNCgkgICAgICAgICAgICByZXR1cm4gcmVhbDsNCgkgICAgICAgIH0NCgkgICAgICAgIGVsc2UgaWYgKHRyYW5zZmVyYWJsZSBpbnN0YW5jZW9mIFNldCkgew0KCSAgICAgICAgICAgIGxldCByZWFsID0gbmV3IFNldCgpOw0KCSAgICAgICAgICAgIGZvciAobGV0IHZhbCBvZiB0cmFuc2ZlcmFibGUpDQoJICAgICAgICAgICAgICAgIHJlYWwuYWRkKHZhbHVlKHZhbCkpOw0KCSAgICAgICAgICAgIHJldHVybiByZWFsOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0cmFuc2ZlcmFibGUpKSB7DQoJICAgICAgICAgICAgcmV0dXJuIHRyYW5zZmVyYWJsZS5tYXAodiA9PiB2YWx1ZSh2KSk7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlIGlmICh0eXBlb2YgdHJhbnNmZXJhYmxlID09PSAib2JqZWN0Iikgew0KCSAgICAgICAgICAgIGlmICgiX19fdHJhbnNmZXItdHlwZSIgaW4gdHJhbnNmZXJhYmxlKSB7DQoJICAgICAgICAgICAgICAgIHN3aXRjaCAodHJhbnNmZXJhYmxlWyJfX190cmFuc2Zlci10eXBlIl0pIHsNCgkgICAgICAgICAgICAgICAgICAgIGNhc2UgImRhdGUiOg0KCSAgICAgICAgICAgICAgICAgICAgICAgIGxldCByYXdEYXRlID0gRGF0ZVRpbWVfMS5mcm9tT2JqZWN0KHZhbHVlKHRyYW5zZmVyYWJsZS52YWx1ZSkpOw0KCSAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRlT3B0cyA9IHZhbHVlKHRyYW5zZmVyYWJsZS5vcHRpb25zKTsNCgkgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZU9wdHMuem9uZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3RGF0ZS5zZXRab25lKGRhdGVPcHRzLnpvbmUpOw0KCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByYXdEYXRlOw0KCSAgICAgICAgICAgICAgICAgICAgY2FzZSAiZHVyYXRpb24iOg0KCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEdXJhdGlvbl8xLmZyb21PYmplY3QodmFsdWUodHJhbnNmZXJhYmxlLnZhbHVlKSk7DQoJICAgICAgICAgICAgICAgICAgICBjYXNlICJsaW5rIjoNCgkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGluay5mcm9tT2JqZWN0KHZhbHVlKHRyYW5zZmVyYWJsZS52YWx1ZSkpOw0KCSAgICAgICAgICAgICAgICAgICAgY2FzZSAidGFzayI6DQoJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suZnJvbU9iamVjdCh2YWx1ZSh0cmFuc2ZlcmFibGUudmFsdWUpKTsNCgkgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQoJICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFVucmVjb2duaXplZCB0cmFuc2ZlciB0eXBlICcke3RyYW5zZmVyYWJsZVsiX19fdHJhbnNmZXItdHlwZSJdfSdgKTsNCgkgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgIH0NCgkgICAgICAgICAgICBsZXQgcmVzdWx0ID0ge307DQoJICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyh0cmFuc2ZlcmFibGUpKQ0KCSAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlKHZhbCk7DQoJICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCgkgICAgICAgIH0NCgkgICAgICAgIHJldHVybiB0cmFuc2ZlcmFibGU7DQoJICAgIH0NCgkgICAgVHJhbnNmZXJhYmxlLnZhbHVlID0gdmFsdWU7DQoJfSkoVHJhbnNmZXJhYmxlIHx8IChUcmFuc2ZlcmFibGUgPSB7fSkpOwoKCS8qKiBFbnRyeS1wb2ludCBzY3JpcHQgdXNlZCBieSB0aGUgaW5kZXggYXMgYSB3ZWIgd29ya2VyLiAqLw0KCW9ubWVzc2FnZSA9IGFzeW5jIChldnQpID0+IHsNCgkgICAgbGV0IHJlc3VsdCA9IHJ1bkltcG9ydChldnQuZGF0YS5wYXRoLCBldnQuZGF0YS5jb250ZW50cywgZXZ0LmRhdGEubWV0YWRhdGEpOw0KCSAgICBwb3N0TWVzc2FnZSh7IHBhdGg6IGV2dC5kYXRhLnBhdGgsIHJlc3VsdDogVHJhbnNmZXJhYmxlLnRyYW5zZmVyYWJsZShyZXN1bHQpIH0pOw0KCX07Cgp9KSgpOwoK', null, false); -/* eslint-enable */ - -/** Controls and creates Dataview file importers, allowing for asynchronous loading and parsing of files. */ -/** Multi-threaded file parser which debounces rapid file requests automatically. */ -class FileImporter extends obsidian.Component { - constructor(numWorkers, vault, metadataCache) { - super(); - this.numWorkers = numWorkers; - this.vault = vault; - this.metadataCache = metadataCache; - this.workers = []; - this.busy = []; - this.reloadQueue = []; - this.reloadSet = new Set(); - this.callbacks = new Map(); - for (let index = 0; index < numWorkers; index++) { - let worker = new WorkerFactory({ name: "Dataview Indexer " + (index + 1) }); - worker.onmessage = evt => this.finish(evt.data.path, Transferable.value(evt.data.result), index); - this.workers.push(worker); - this.register(() => worker.terminate()); - this.busy.push(false); - } - } - /** - * Queue the given file for reloading. Multiple reload requests for the same file in a short time period will be de-bounced - * and all be resolved by a single actual file reload. - */ - reload(file) { - let promise = new Promise((resolve, _reject) => { - var _a; - if (this.callbacks.has(file.path)) - (_a = this.callbacks.get(file.path)) === null || _a === void 0 ? void 0 : _a.push(resolve); - else - this.callbacks.set(file.path, [resolve]); - }); - // De-bounce repeated requests for the same file. - if (this.reloadSet.has(file.path)) - return promise; - this.reloadSet.add(file.path); - // Immediately run this task if there are available workers; otherwise, add it to the queue. - let workerId = this.nextAvailableWorker(); - if (workerId !== undefined) { - this.send(file, workerId); - } - else { - this.reloadQueue.push(file); - } - return promise; - } - /** Finish the parsing of a file, potentially queueing a new file. */ - finish(path, data, index) { - var _a; - // Cache the callbacks before we do book-keeping. - let calls = [].concat((_a = this.callbacks.get(path)) !== null && _a !== void 0 ? _a : []); - // Book-keeping to clear metadata & allow the file to be re-loaded again. - this.reloadSet.delete(path); - this.callbacks.delete(path); - // Notify the queue this file is available for new work. - this.busy[index] = false; - // Queue a new job onto this worker. - let job = this.reloadQueue.shift(); - if (job !== undefined) - this.send(job, index); - // Resolve promises to let users know this file has finished. - for (let callback of calls) - callback(data); - } - /** Send a new task to the given worker ID. */ - send(file, workerId) { - this.busy[workerId] = true; - this.vault.cachedRead(file).then(c => this.workers[workerId].postMessage({ - path: file.path, - contents: c, - metadata: this.metadataCache.getFileCache(file), - })); - } - /** Find the next available, non-busy worker; return undefined if all workers are busy. */ - nextAvailableWorker() { - let index = this.busy.indexOf(false); - return index == -1 ? undefined : index; - } -} - -/** Stores various indices on all files in the vault to make dataview generation fast. */ -const emptySet = Object.freeze(new Set()); -/** A generic index which indexes variables of the form key -> value[], allowing both forward and reverse lookups. */ -class IndexMap { - /** Create a new, empty index map. */ +/** Generic code for embedded Dataviews. */ +class DataviewRefreshableRenderer extends obsidian.MarkdownRenderChild { constructor() { - this.map = new Map(); - this.invMap = new Map(); - } - /** Returns all values for the given key. (This is unused except for tests - does it really need to be here?) */ - get(key) { - let result = this.map.get(key); - if (result) { - return new Set(result); - } - else { - return new Set(); - } - } - /** Returns all keys that reference the given key. Mutating the returned set is not allowed. */ - getInverse(value) { - return this.invMap.get(value) || emptySet; - } - set(key, values) { - var _a, _b; - if (!values.size) { - // no need to store if no values - this.delete(key); - return this; - } - let oldValues = this.map.get(key); - if (oldValues) { - for (let value of oldValues) { - // Only delete the ones we're not adding back - if (!values.has(key)) - (_a = this.invMap.get(value)) === null || _a === void 0 ? void 0 : _a.delete(key); + super(...arguments); + this.maybeRefresh = () => { + // If the index revision has changed recently, then queue a reload. + // But only if we're mounted in the DOM and auto-refreshing is active. + if (this.lastReload != this.index.revision && this.container.isShown() && this.settings.refreshEnabled) { + this.lastReload = this.index.revision; + this.render(); } - } - this.map.set(key, values); - for (let value of values) { - if (!this.invMap.has(value)) - this.invMap.set(value, new Set([key])); - else - (_b = this.invMap.get(value)) === null || _b === void 0 ? void 0 : _b.add(key); - } - return this; - } - /** Clears all values for the given key so they can be re-added. */ - delete(key) { - var _a; - let oldValues = this.map.get(key); - if (!oldValues) - return false; - this.map.delete(key); - for (let value of oldValues) { - (_a = this.invMap.get(value)) === null || _a === void 0 ? void 0 : _a.delete(key); - } - return true; - } - /** Rename all references to the given key to a new value. */ - rename(oldKey, newKey) { - let oldValues = this.map.get(oldKey); - if (!oldValues) - return false; - this.delete(oldKey); - this.set(newKey, oldValues); - return true; - } - /** Clear the entire index. */ - clear() { - this.map.clear(); - this.invMap.clear(); - } -} -/** Aggregate index which has several sub-indices and will initialize all of them. */ -class FullIndex extends obsidian.Component { - /** Construct a new index over the given vault and metadata cache. */ - constructor(vault, metadataCache, onChange) { - super(); - this.vault = vault; - this.metadataCache = metadataCache; - this.onChange = onChange; - this.pages = new Map(); - this.tags = new IndexMap(); - this.etags = new IndexMap(); - this.links = new IndexMap(); - this.revision = 0; - // Handles asynchronous reloading of files on web workers. - this.addChild((this.importer = new FileImporter(2, this.vault, this.metadataCache))); - // Prefix listens to file creation/deletion/rename, and not modifies, so we let it set up it's own listeners. - this.addChild((this.prefix = PrefixIndex.create(this.vault, () => this.touch()))); - // The CSV cache also needs to listen to filesystem events for cache invalidation. - this.csv = new CsvCache(this.vault); - } - /** Generate a full index from the given vault. */ - static create(vault, metadata, onChange) { - return new FullIndex(vault, metadata, onChange); - } - trigger(...args) { - this.metadataCache.trigger("dataview:metadata-change", ...args); - } - /** Runs through the whole vault to set up initial file */ - initialize() { - // Traverse all markdown files & fill in initial data. - let start = new Date().getTime(); - const empty = { fields: new Map(), tasks: [] }; - for (const file of this.vault.getMarkdownFiles()) { - this.reloadInternal(file, empty); - this.reload(file); - } - console.log("Dataview: Task & metadata parsing queued in %.3fs.", (new Date().getTime() - start) / 1000.0); - // The metadata cache is updated on file changes. - this.registerEvent(this.metadataCache.on("changed", file => this.reload(file))); - // Renames do not set off the metadata cache; catch these explicitly. - this.registerEvent(this.vault.on("rename", this.rename, this)); - // File creation does cause a metadata change, but deletes do not. Clear the caches for this. - this.registerEvent(this.vault.on("delete", af => { - if (!(af instanceof obsidian.TFile)) - return; - let file = af; - this.pages.delete(file.path); - this.tags.delete(file.path); - this.etags.delete(file.path); - this.links.delete(file.path); - this.touch(); - this.trigger("delete", file); - })); - // Initialize sub-indices. - this.prefix.initialize(); - } - rename(file, oldPath) { - if (file instanceof obsidian.TFile) { - if (this.pages.has(oldPath)) { - const oldMeta = this.pages.get(oldPath); - this.pages.delete(oldPath); - if (oldMeta) { - oldMeta.path = file.path; - this.pages.set(file.path, oldMeta); - } - } - this.tags.rename(oldPath, file.path); - this.links.rename(oldPath, file.path); - this.etags.rename(oldPath, file.path); - } - this.touch(); - this.trigger("rename", file, oldPath); - } - /** Queue a file for reloading; this is done asynchronously in the background and may take a few seconds. */ - reload(file) { - this.importer.reload(file).then(r => this.reloadInternal(file, r)); - } - /** "Touch" the index, incrementing the revision number and causing downstream views to reload. */ - touch() { - this.revision += 1; - this.onChange(); - } - reloadInternal(file, parsed) { - let meta = parsePage(file, this.metadataCache, parsed); - this.pages.set(file.path, meta); - this.tags.set(file.path, meta.fullTags()); - this.etags.set(file.path, meta.tags); - this.links.set(file.path, new Set(meta.links.map(l => l.path))); - this.touch(); - this.trigger("update", file); - } -} -/** Indexes files by their full prefix - essentially a simple prefix tree. */ -class PrefixIndex extends obsidian.Component { - constructor(vault, updateRevision) { - super(); - this.vault = vault; - this.updateRevision = updateRevision; - } - static create(vault, updateRevision) { - return new PrefixIndex(vault, updateRevision); - } - /** Run through the whole vault to set up the initial prefix index. */ - initialize() { } - *walk(folder, filter) { - for (const file of folder.children) { - if (file instanceof obsidian.TFolder) { - yield* this.walk(file, filter); - } - else if (filter ? filter(file.path) : true) { - yield file.path; - } - } - } - /** Get the list of all files under the given path. */ - get(prefix, filter) { - let folder = this.vault.getAbstractFileByPath(prefix || "/"); - return new Set(folder instanceof obsidian.TFolder ? this.walk(folder, filter) : []); - } - /** Determines if the given path exists in the prefix index. */ - pathExists(path) { - return this.vault.getAbstractFileByPath(path || "/") != null; - } - /** Determines if the given prefix exists in the prefix index. */ - nodeExists(prefix) { - return this.vault.getAbstractFileByPath(prefix || "/") instanceof obsidian.TFolder; - } - /** - * Use the in-memory prefix index to convert a relative path to an absolute one. - */ - resolveRelative(path, origin) { - if (!origin) - return path; - else if (path.startsWith("/")) - return path.substring(1); - let relativePath = getParentFolder(origin) + "/" + path; - if (this.pathExists(relativePath)) - return relativePath; - else - return path; - } -} -/** Simple path filters which filter file types. */ -var PathFilters; -(function (PathFilters) { - function csv(path) { - return path.toLowerCase().endsWith(".csv"); - } - PathFilters.csv = csv; - function markdown(path) { - let lcPath = path.toLowerCase(); - return lcPath.endsWith(".md") || lcPath.endsWith(".markdown"); - } - PathFilters.markdown = markdown; -})(PathFilters || (PathFilters = {})); -/** - * Caches in-use CSVs to make high-frequency reloads (such as actively looking at a document - * that uses CSV) fast. - */ -class CsvCache { - constructor(vault) { - this.vault = vault; - this.cache = new Map(); - } - /** Load a CSV file from the cache, doing a fresh load if it has not been loaded. */ - async get(path) { - // Clear old entries on every fresh load, since the path being loaded may be stale. - this.clearOldEntries(); - let existing = this.cache.get(path); - if (existing) - return Result.success(existing.data); - else { - let value = await this.load(path); - if (value.successful) - this.cache.set(path, { data: value.value, loadTime: DateTime_1.now() }); - return value; - } - } - /** Do the actual raw loading of a CSV path (which is either local or an HTTP request). */ - async load(path) { - // Allow http://, https://, and file:// prefixes which use AJAX. - if (path.startsWith("http://") || path.startsWith("https://") || path.startsWith("file://")) { - try { - let result = await fetch(path, { - method: "GET", - mode: "no-cors", - redirect: "follow", - }); - return Result.success(parseCsv(await result.text())); - } - catch (ex) { - return Result.failure("" + ex + "\n\n" + ex.stack); - } - } - // Otherwise, assume it is a fully-qualified file path. - try { - let fileData = await this.vault.adapter.read(path); - return Result.success(parseCsv(fileData)); - } - catch (ex) { - return Result.failure(`Failed to load data from path '${path}'.`); - } - } - /** Clear old entries in the cache (as measured by insertion time). */ - clearOldEntries() { - let currentTime = DateTime_1.now(); - let keysToRemove = new Set(); - for (let [key, value] of this.cache.entries()) { - let entryAge = Math.abs(currentTime.diff(value.loadTime, "seconds").seconds); - if (entryAge > CsvCache.CACHE_EXPIRY_SECONDS) - keysToRemove.add(key); - } - keysToRemove.forEach(key => this.cache.delete(key)); - } -} -CsvCache.CACHE_EXPIRY_SECONDS = 5 * 60; - -/** - * Render a task grouping (indenting nested groupings for clarity). This will automatically bind the tasks to be checkable, - * which requires access to a vault. - */ -async function renderTasks(container, tasks, originFile, component, vault, settings) { - switch (tasks.type) { - case "base": - await renderTaskList(container, tasks.value, component, vault, settings); - break; - case "grouped": - for (let { key, value } of tasks.groups) { - let header = container.createEl("h4"); - await renderValue(key, header, originFile, component, settings); - let div = container.createDiv({ cls: ["dataview", "result-group"] }); - await renderTasks(div, value, originFile, component, vault, settings); - } - break; - } -} -/** Render a list of tasks as a single list. */ -async function renderTaskList(container, tasks, component, vault, settings) { - let ul = container.createEl("ul", { cls: "contains-task-list" }); - for (let task of tasks) { - let li = ul.createEl("li"); - if (task.real) { - li.addClass("task-list-item"); - if (task.completed) - li.addClass("is-checked"); - } - // Append the task link if it is present. - let text = task.text; - switch (settings.taskLinkLocation) { - case "start": - if (!settings.taskLinkText) - break; - text = task.link.withDisplay(settings.taskLinkText).markdown() + " " + text; - break; - case "end": - if (!settings.taskLinkText) - break; - text += " " + task.link.withDisplay(settings.taskLinkText).markdown(); - break; - } - // Render the text as markdown so that bolds, links, and other things work properly. - await obsidian.MarkdownRenderer.renderMarkdown(text, li, task.path, new obsidian.Component()); - // Unwrap the paragraph element that is created. - let paragraph = li.querySelector("p"); - if (paragraph) { - li.innerHTML = paragraph.innerHTML; - paragraph.remove(); - } - if (task.real) { - let checkbox = createCheckbox(task.path, task.line, task.text, task.completed); - li.prepend(checkbox); - addCheckHandler(checkbox, vault, component, settings); - } - if (task.subtasks.length > 0) { - renderTaskList(li, task.subtasks, component, vault, settings); - } - } -} -function createCheckbox(file, line, text, checked) { - let check = document.createElement("input"); - check.addClass("task-list-item-checkbox"); - check.type = "checkbox"; - check.dataset["file"] = file; - check.dataset["lineno"] = "" + line; - // This field is technically optional, but is provided to double-check - // we are editing the right line! - check.dataset["text"] = text; - if (checked) { - check.setAttribute("checked", ""); - } - return check; -} -function addCheckHandler(checkbox, vault, component, settings) { - component.registerDomEvent(checkbox, "click", event => { - var _a, _b, _c, _d; - let file = checkbox.dataset["file"]; - let lineno = checkbox.dataset["lineno"]; - let text = checkbox.dataset["text"]; - if (!file || !lineno || !text) - return; - if (!checkbox.hasAttribute("checked")) { - let newCheckbox = createCheckbox(file, parseInt(lineno), text, true); - (_a = checkbox.parentElement) === null || _a === void 0 ? void 0 : _a.addClass("is-checked"); - (_b = checkbox.parentElement) === null || _b === void 0 ? void 0 : _b.replaceChild(newCheckbox, checkbox); - setTaskCheckedInFile(vault, file, parseInt(lineno), text, false, true, settings.taskCompletionTracking ? settings.taskCompletionText : undefined); - addCheckHandler(newCheckbox, vault, component, settings); - } - else { - let newCheckbox = createCheckbox(file, parseInt(lineno), text, false); - (_c = checkbox.parentElement) === null || _c === void 0 ? void 0 : _c.removeClass("is-checked"); - (_d = checkbox.parentElement) === null || _d === void 0 ? void 0 : _d.replaceChild(newCheckbox, checkbox); - setTaskCheckedInFile(vault, file, parseInt(lineno), text, true, false, settings.taskCompletionTracking ? settings.taskCompletionText : undefined); - addCheckHandler(newCheckbox, vault, component, settings); - } - }); -} -/** Check a task in a file by rewriting it. */ -async function setTaskCheckedInFile(vault, path, taskLine, taskText, wasChecked, check, completionKey) { - if (check == wasChecked) - return; - let text = await vault.adapter.read(path); - let splitText = text.replace("\r", "").split("\n"); - if (splitText.length < taskLine) - return; - let match = TASK_REGEX.exec(splitText[taskLine]); - if (!match) - return; - let foundText = match[3]; - let checkMarking = match[2] - .trim() - .substring(1, match[2].trim().length - 1) - .trim(); - let foundCompleted = checkMarking == "X" || checkMarking == "x"; - if (taskText.trim() != foundText.trim()) - return; - if (wasChecked != foundCompleted) - return; - let completion = undefined; - if (check) { - splitText[taskLine] = splitText[taskLine] - .replace("- [ ]", "- [x]") - .replace("- []", "- [x]") - .replace("-[]", "- [x]") - .replace("-[ ]", "- [x]") - .replace("* [ ]", "* [x]") - .replace("* []", "* [x]") - .replace("*[]", "* [x]") - .replace("*[ ]", "* [x]"); - completion = DateTime_1.now().toISODate(); - } - else { - splitText[taskLine] = splitText[taskLine] - .replace("- [X]", "- [ ]") - .replace("-[X]", "- [ ]") - .replace("- [x]", "- [ ]") - .replace("-[x]", "- [ ]") - .replace("* [X]", "* [ ]") - .replace("*[X]", "* [ ]") - .replace("* [x]", "* [ ]") - .replace("*[x]", "* [ ]"); - } - // If we should add a completion key, then do so now. - if (completionKey) - splitText[taskLine] = setInlineField(splitText[taskLine], completionKey, completion); - // Respect '\n' or '\r\n' just to be careful (mainly relevant to avoid bad git diffs for some users). - let final = splitText.join(text.contains("\r") ? "\r\n" : "\n"); - await vault.adapter.write(path, final, {}); -} - -/** Utility functions for quickly creating fields. */ -var QueryFields; -(function (QueryFields) { - function named(name, field) { - return { name, field }; - } - QueryFields.named = named; - function sortBy(field, dir) { - return { field, direction: dir }; - } - QueryFields.sortBy = sortBy; -})(QueryFields || (QueryFields = {})); - -/** A parsimmon-powered parser-combinator implementation of the query language. */ -const QUERY_LANGUAGE = parsimmon_umd_min.exports.createLanguage({ - // Simple atom parsing, like words, identifiers, numbers. - queryType: q => parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regexp(/TABLE|LIST|TASK|CALENDAR/i)) - .map(str => str.toLowerCase()) - .desc("query type ('TABLE', 'LIST', 'TASK', or 'CALENDAR')"), - explicitNamedField: q => parsimmon_umd_min.exports.seqMap(EXPRESSION.field.skip(parsimmon_umd_min.exports.whitespace), parsimmon_umd_min.exports.regexp(/AS/i).skip(parsimmon_umd_min.exports.whitespace), EXPRESSION.identifier.or(EXPRESSION.string), (field, _as, ident) => QueryFields.named(ident, field)), - namedField: q => parsimmon_umd_min.exports.alt(q.explicitNamedField, EXPRESSION.identifierDot.map(ident => QueryFields.named(ident, Fields.indexVariable(ident)))), - sortField: q => parsimmon_umd_min.exports.seqMap(EXPRESSION.field.skip(parsimmon_umd_min.exports.optWhitespace), parsimmon_umd_min.exports.regexp(/ASCENDING|DESCENDING|ASC|DESC/i).atMost(1), (field, dir) => { - let direction = dir.length == 0 ? "ascending" : dir[0].toLowerCase(); - if (direction == "desc") - direction = "descending"; - if (direction == "asc") - direction = "ascending"; - return { - field: field, - direction: direction, }; - }), - headerClause: q => q.queryType.skip(parsimmon_umd_min.exports.whitespace).chain(qtype => { - switch (qtype) { - case "table": - return parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/WITHOUT\s+ID/i) - .skip(parsimmon_umd_min.exports.optWhitespace) - .atMost(1), parsimmon_umd_min.exports.sepBy(q.namedField, parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)), (withoutId, fields) => { - return { type: "table", fields, showId: withoutId.length == 0 }; - }); - case "list": - return parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/WITHOUT\s+ID/i) - .skip(parsimmon_umd_min.exports.optWhitespace) - .atMost(1), EXPRESSION.field.atMost(1), (withoutId, format) => { - return { - type: "list", - format: format.length == 1 ? format[0] : undefined, - showId: withoutId.length == 0, - }; - }); - case "task": - return parsimmon_umd_min.exports.succeed({ type: "task" }); - case "calendar": - return parsimmon_umd_min.exports.seqMap(q.namedField, field => { - return { - type: "calendar", - showId: true, - field, - }; - }); - default: - return parsimmon_umd_min.exports.fail(`Unrecognized query type '${qtype}'`); - } - }), - fromClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/FROM/i), parsimmon_umd_min.exports.whitespace, EXPRESSION.source, (_1, _2, source) => source), - whereClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/WHERE/i), parsimmon_umd_min.exports.whitespace, EXPRESSION.field, (where, _, field) => { - return { type: "where", clause: field }; - }), - sortByClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/SORT/i), parsimmon_umd_min.exports.whitespace, q.sortField.sepBy1(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)), (sort, _1, fields) => { - return { type: "sort", fields }; - }), - limitClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/LIMIT/i), parsimmon_umd_min.exports.whitespace, EXPRESSION.field, (limit, _1, field) => { - return { type: "limit", amount: field }; - }), - flattenClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/FLATTEN/i).skip(parsimmon_umd_min.exports.whitespace), q.namedField, (_, field) => { - return { type: "flatten", field }; - }), - groupByClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/GROUP BY/i).skip(parsimmon_umd_min.exports.whitespace), q.namedField, (_, field) => { - return { type: "group", field }; - }), - // Full query parsing. - clause: q => parsimmon_umd_min.exports.alt(q.fromClause, q.whereClause, q.sortByClause, q.limitClause, q.groupByClause, q.flattenClause), - query: q => parsimmon_umd_min.exports.seqMap(q.headerClause.trim(parsimmon_umd_min.exports.optWhitespace), q.fromClause.trim(parsimmon_umd_min.exports.optWhitespace).atMost(1), q.clause.trim(parsimmon_umd_min.exports.optWhitespace).many(), (header, from, clauses) => { - return { - header, - source: from.length == 0 ? Sources.folder("") : from[0], - operations: clauses, - settings: DEFAULT_QUERY_SETTINGS, - }; - }), -}); -/** - * Attempt to parse a query from the given query text, returning a string error - * if the parse failed. - */ -function parseQuery(text) { - try { - let query = QUERY_LANGUAGE.query.tryParse(text); - return Result.success(query); } - catch (error) { - return Result.failure("" + error); + onload() { + this.render(); + this.lastReload = this.index.revision; + // Refresh after index changes stop. + this.registerEvent(this.app.workspace.on("dataview:refresh-views", this.maybeRefresh)); + // ...or when the DOM is shown (sidebar expands, tab selected, nodes scrolled into view). + this.register(this.container.onNodeInserted(this.maybeRefresh)); } } -/** Provides a global dispatch table for evaluating binary operators, including comparison. */ -/** Provides implementations for binary operators on two types using a registry. */ -class BinaryOpHandler { - constructor() { - this.map = new Map(); - } - static create() { - return new BinaryOpHandler(); - } - register(left, op, right, func) { - this.map.set(BinaryOpHandler.repr(op, left, right), func); - return this; - } - registerComm(left, op, right, func) { - return this.register(left, op, right, func).register(right, op, left, (a, b, ctx) => func(b, a, ctx)); - } - /** Implement a comparison function. */ - compare(type, compare) { - return this.register(type, "<", type, (a, b, ctx) => compare(a, b, ctx) < 0) - .register(type, "<=", type, (a, b, ctx) => compare(a, b, ctx) <= 0) - .register(type, ">", type, (a, b, ctx) => compare(a, b, ctx) > 0) - .register(type, ">=", type, (a, b, ctx) => compare(a, b, ctx) >= 0) - .register(type, "=", type, (a, b, ctx) => compare(a, b, ctx) == 0) - .register(type, "!=", type, (a, b, ctx) => compare(a, b, ctx) != 0); - } - /** Attempt to evaluate the given binary operator on the two literal fields. */ - evaluate(op, left, right, ctx) { - let leftType = Values.typeOf(left); - let rightType = Values.typeOf(right); - if (!leftType) - return Result.failure(`Unrecognized value '${left}'`); - else if (!rightType) - return Result.failure(`Unrecognized value '${right}'`); - let handler = this.map.get(BinaryOpHandler.repr(op, leftType, rightType)); - if (handler) - return Result.success(handler(left, right, ctx)); - // Right-'*' fallback: - let handler2 = this.map.get(BinaryOpHandler.repr(op, leftType, "*")); - if (handler2) - return Result.success(handler2(left, right, ctx)); - // Left-'*' fallback: - let handler3 = this.map.get(BinaryOpHandler.repr(op, "*", rightType)); - if (handler3) - return Result.success(handler3(left, right, ctx)); - // Double '*' fallback. - let handler4 = this.map.get(BinaryOpHandler.repr(op, "*", "*")); - if (handler4) - return Result.success(handler4(left, right, ctx)); - return Result.failure(`No implementation found for '${leftType} ${op} ${rightType}'`); - } - /** Create a string representation of the given triplet for unique lookup in the map. */ - static repr(op, left, right) { - return `${left},${op},${right}`; - } -} -/** Configure and create a binary OP handler with the given parameters. */ -function createBinaryOps(linkNormalizer) { - return (BinaryOpHandler.create() - // TODO: Consider not using a universal comparison function. - .compare("*", (a, b) => Values.compareValue(a, b, linkNormalizer)) - // Global boolean operations. - .register("*", "&", "*", (a, b) => Values.isTruthy(a) && Values.isTruthy(b)) - .register("*", "|", "*", (a, b) => Values.isTruthy(a) || Values.isTruthy(b)) - // Number implementations. - .register("number", "+", "number", (a, b) => a + b) - .register("number", "-", "number", (a, b) => a - b) - .register("number", "*", "number", (a, b) => a * b) - .register("number", "/", "number", (a, b) => a / b) - // String implementations. - .register("string", "+", "*", (a, b, ctx) => a + Values.toString(b, ctx.settings)) - .register("*", "+", "string", (a, b, ctx) => Values.toString(a, ctx.settings) + b) - .registerComm("string", "*", "number", (a, b) => (b < 0 ? "" : a.repeat(b))) - // Date Operations. - .register("date", "-", "date", (a, b) => { - return normalizeDuration(a.diff(b, ["years", "months", "days", "hours", "minutes", "seconds", "milliseconds"])); - }) - .register("date", "-", "duration", (a, b) => a.minus(b)) - .registerComm("date", "+", "duration", (a, b) => a.plus(b)) - // Duration Operations. - .register("duration", "+", "duration", (a, b) => normalizeDuration(a.plus(b))) - .register("duration", "-", "duration", (a, b) => normalizeDuration(a.minus(b))) - // Array operations. - .register("array", "+", "array", (a, b) => [].concat(a).concat(b)) - // Object operations. - .register("object", "+", "object", (a, b) => Object.assign({}, a, b))); -} - -/** Default function implementations for the expression evaluator. */ -/** - * Allows for the creation of functions that check the number and type of their arguments, and dispatch - * to different implemenations based on the types of the inputs. - */ -class FunctionBuilder { - constructor(name) { - this.name = name; - this.variants = []; - this.vectorized = {}; - } - /** Add a general function variant which accepts any number of arguments of any type. */ - vararg(impl) { - this.variants.push({ args: [], varargs: true, impl }); - return this; - } - /** Add a function variant which takes in a single argument. */ - add1(argType, impl) { - this.variants.push({ - args: [argType], - varargs: false, - impl: (c, ...rest) => impl(rest[0], c), - }); - return this; - } - /** Add a function variant which takes in two typed arguments. */ - add2(arg1, arg2, impl) { - this.variants.push({ - args: [arg1, arg2], - varargs: false, - impl: (c, ...rest) => impl(rest[0], rest[1], c), - }); - return this; - } - /** Add a function variant which takes in three typed arguments. */ - add3(arg1, arg2, arg3, impl) { - this.variants.push({ - args: [arg1, arg2, arg3], - varargs: false, - impl: (c, ...rest) => impl(rest[0], rest[1], rest[2], c), - }); - return this; - } - /** Add vectorized variants which accept the given number of arguments and delegate. */ - vectorize(numArgs, positions) { - this.vectorized[numArgs] = positions; - return this; - } - /** Return a function which checks the number and type of arguments, passing them on to the first matching variant. */ - build() { - let self = (context, ...args) => { - let types = []; - for (let arg of args) { - let argType = Values.typeOf(arg); - if (!argType) - throw Error(`Unrecognized argument type for argument '${arg}'`); - types.push(argType); - } - // Handle vectorization, possibly in multiple fields. - if (this.vectorized[types.length]) { - let vectorizedPositions = this.vectorized[types.length].filter(k => types[k] == "array"); - if (vectorizedPositions.length > 0) { - let minLength = vectorizedPositions - .map(p => args[p].length) - .reduce((p, c) => Math.min(p, c)); - // Call the subfunction for each element in the longest array. - // If you call a vectorized function with different-length arrays, - // the output is limited by the length of the shortest array. - let result = []; - for (let vpos = 0; vpos < minLength; vpos++) { - let subargs = []; - for (let index = 0; index < args.length; index++) { - if (vectorizedPositions.includes(index)) { - let arr = args[index]; - subargs.push(arr[vpos]); - } - else { - subargs.push(args[index]); - } - } - result.push(self(context, ...subargs)); - } - return result; - } - } - outer: for (let variant of this.variants) { - if (variant.varargs) - return variant.impl(context, ...args); - if (variant.args.length != types.length) - continue; - for (let index = 0; index < variant.args.length; index++) { - if (variant.args[index] != "*" && variant.args[index] != types[index]) - continue outer; - } - return variant.impl(context, ...args); - } - throw Error(`No implementation of '${this.name}' found for arguments: ${types.join(", ")}`); - }; - return self; - } -} -/** Utilities for managing function implementations. */ -var Functions; -(function (Functions) { - /** Bind a context to a function implementation, yielding a function which does not need the context argument. */ - function bind(func, context) { - return (...args) => func(context, ...args); - } - Functions.bind = bind; - /** Bind a context to all functions in the given map, yielding a new map of bound functions. */ - function bindAll(funcs, context) { - let result = {}; - for (let [key, func] of Object.entries(funcs)) { - result[key] = Functions.bind(func, context); - } - return result; - } - Functions.bindAll = bindAll; -})(Functions || (Functions = {})); -/** - * Collection of all defined functions; defined here so that they can be called from within dataview, - * and test code. - */ -var DefaultFunctions; -(function (DefaultFunctions) { - /** Compute the length of a data type. */ - DefaultFunctions.length = new FunctionBuilder("length") - .add1("array", a => a.length) - .add1("object", a => Object.keys(a).length) - .add1("string", a => a.length) - .add1("null", _a => 0) - .build(); - /** List constructor function. */ - DefaultFunctions.list = (_context, ...args) => args; - /** Object constructor function. */ - DefaultFunctions.object = (_context, ...args) => { - if (args.length % 2 != 0) - throw Error("object() requires an even number of arguments"); - let result = {}; - for (let index = 0; index < args.length; index += 2) { - let key = args[index]; - if (!Values.isString(key)) - throw Error("keys should be of type string for object(key1, value1, ...)"); - result[key] = args[index + 1]; - } - return result; - }; - /** Internal link constructor function. */ - DefaultFunctions.link = new FunctionBuilder("link") - .add1("string", (a, c) => Link.file(c.linkHandler.normalize(a), false)) - .add1("link", a => a) - .add1("null", _a => null) - .vectorize(1, [0]) - .add2("string", "string", (t, d, c) => Link.file(c.linkHandler.normalize(t), false, d)) - .add2("link", "string", (t, d) => t.withDisplay(d)) - .add2("null", "*", () => null) - .add2("*", "null", (t, _n, c) => DefaultFunctions.link(c, t)) - .vectorize(2, [0, 1]) - .build(); - /** External link constructor function. */ - DefaultFunctions.elink = new FunctionBuilder("elink") - .add2("string", "string", (a, d) => { - let elem = document.createElement("a"); - elem.textContent = d; - elem.rel = "noopener"; - elem.target = "_blank"; - elem.classList.add("external-link"); - elem.href = a; - return elem; - }) - .add2("string", "null", (s, _n, c) => DefaultFunctions.elink(c, s, s)) - .add2("null", "*", () => null) - .vectorize(2, [0]) - .add1("string", (a, c) => DefaultFunctions.elink(c, a, a)) - .add1("null", () => null) - .vectorize(1, [0]) - .build(); - /** Date constructor function. */ - DefaultFunctions.date = new FunctionBuilder("date") - .add1("string", str => { - let parsedDate = EXPRESSION.datePlus.parse(str); - if (parsedDate.status) - return parsedDate.value; - else - return null; - }) - .add1("date", d => d) - .add1("link", (link, c) => { - var _c, _d, _e, _f; - // Try to parse from the display... - if (link.display) { - let parsedDate = EXPRESSION.date.parse(link.display); - if (parsedDate.status) - return parsedDate.value; - } - // Then try to parse from the path... - let parsedDate = EXPRESSION.date.parse(link.path); - if (parsedDate.status) - return parsedDate.value; - // Then pull it from the file. - let resolved = c.linkHandler.resolve(link.path); - if (resolved && ((_d = (_c = resolved) === null || _c === void 0 ? void 0 : _c.file) === null || _d === void 0 ? void 0 : _d.day)) { - return (_f = (_e = resolved) === null || _e === void 0 ? void 0 : _e.file) === null || _f === void 0 ? void 0 : _f.day; - } - return null; - }) - .add1("null", () => null) - .vectorize(1, [0]) - .build(); - /** Duration constructor function. */ - DefaultFunctions.dur = new FunctionBuilder("dur") - .add1("string", str => { - let parsedDur = EXPRESSION.duration.parse(str.trim()); - if (parsedDur.status) - return parsedDur.value; - else - return null; - }) - .add1("duration", d => d) - .add1("null", d => d) - .vectorize(1, [0]) - .build(); - /** Format a date using a luxon/moment-style date format. */ - DefaultFunctions.dateformat = new FunctionBuilder("dateformat") - .add2("date", "string", (date, format) => date.toFormat(format, { locale: currentLocale() })) - .add2("null", "string", (_nul, _format) => null) - .vectorize(2, [0]) - .build(); - DefaultFunctions.localtime = new FunctionBuilder("localtime") - .add1("date", d => d.toLocal()) - .add1("null", () => null) - .vectorize(1, [0]) - .build(); - const NUMBER_REGEX = /-?[0-9]+(\.[0-9]+)?/; - /** Number constructor function. */ - DefaultFunctions.number = new FunctionBuilder("number") - .add1("number", a => a) - .add1("string", str => { - let match = NUMBER_REGEX.exec(str); - if (match) - return Number.parseFloat(match[0]); - else - return null; - }) - .add1("null", () => null) - .vectorize(1, [0]) - .build(); - /** - * Convert any value to a reasonable internal string representation. Most useful for dates, strings, numbers, and - * so on. - */ - DefaultFunctions.string = new FunctionBuilder("string").add1("*", (a, ctx) => Values.toString(a, ctx.settings)).build(); - DefaultFunctions.round = new FunctionBuilder("round") - .add1("number", n => Math.round(n)) - .add1("null", () => null) - .vectorize(1, [0]) - .add2("number", "number", (n, p) => { - if (p <= 0) - return Math.round(n); - return parseFloat(n.toFixed(p)); - }) - .add2("number", "null", n => Math.round(n)) - .add2("null", "*", () => null) - .vectorize(2, [0]) - .build(); - DefaultFunctions.min = new FunctionBuilder("min") - .add2("*", "null", (a, _n) => a) - .add2("null", "*", (_n, a) => a) - .add2("*", "*", (a, b, ctx) => (Values.compareValue(a, b, ctx.linkHandler.normalize) <= 0 ? a : b)) - .add1("array", (a, ctx) => DefaultFunctions.min(ctx, ...a)) - .vararg((ctx, ...args) => (args.length == 0 ? null : args.reduce((p, c) => DefaultFunctions.min(ctx, p, c)))) - .build(); - DefaultFunctions.max = new FunctionBuilder("max") - .add2("*", "null", (a, _n) => a) - .add2("null", "*", (_n, a) => a) - .add2("*", "*", (a, b, ctx) => (Values.compareValue(a, b, ctx.linkHandler.normalize) > 0 ? a : b)) - .add1("array", (a, ctx) => DefaultFunctions.max(ctx, ...a)) - .vararg((ctx, ...args) => (args.length == 0 ? null : args.reduce((p, c) => DefaultFunctions.max(ctx, p, c)))) - .build(); - DefaultFunctions.minby = new FunctionBuilder("minby") - .add2("array", "function", (arr, func, ctx) => { - if (arr.length == 0) - return null; - let values = arr.map(v => { - return { value: v, mapped: func(ctx, v) }; - }); - let filtered = values.filter(v => !Values.isNull(v.mapped)); - if (filtered.length == 0) - return arr[0]; - return filtered.reduce((p, c) => { - if (Values.compareValue(p.mapped, c.mapped, ctx.linkHandler.normalize) <= 0) - return p; - else - return c; - }).value; - }) - .add2("null", "function", (_arr, _func, _ctx) => null) - .build(); - DefaultFunctions.maxby = new FunctionBuilder("maxby") - .add2("array", "function", (arr, func, ctx) => { - if (arr.length == 0) - return null; - let values = arr.map(v => { - return { value: v, mapped: func(ctx, v) }; - }); - let filtered = values.filter(v => !Values.isNull(v.mapped)); - if (filtered.length == 0) - return arr[0]; - return filtered.reduce((p, c) => { - if (Values.compareValue(p.mapped, c.mapped, ctx.linkHandler.normalize) > 0) - return p; - else - return c; - }).value; - }) - .add2("null", "function", (_arr, _func, _ctx) => null) - .build(); - DefaultFunctions.striptime = new FunctionBuilder("striptime") - .add1("date", d => DateTime_1.fromObject({ year: d.year, month: d.month, day: d.day })) - .add1("null", _n => null) - .vectorize(1, [0]) - .build(); - // Default contains, which looks through data structures recursively. - DefaultFunctions.contains = new FunctionBuilder("contains") - .add2("array", "*", (l, elem, context) => l.some(e => DefaultFunctions.contains(context, e, elem))) - .add2("string", "string", (haystack, needle) => haystack.includes(needle)) - .add2("object", "string", (obj, key) => key in obj) - .add2("*", "*", (elem1, elem2, context) => context.evaluate(Fields.binaryOp(Fields.literal(elem1), "=", Fields.literal(elem2))).orElseThrow()) - .vectorize(2, [1]) - .build(); - // Case insensitive version of contains. - DefaultFunctions.icontains = new FunctionBuilder("icontains") - .add2("array", "*", (l, elem, context) => l.some(e => DefaultFunctions.icontains(context, e, elem))) - .add2("string", "string", (haystack, needle) => haystack.toLocaleLowerCase().includes(needle.toLocaleLowerCase())) - .add2("object", "string", (obj, key) => key in obj) - .add2("*", "*", (elem1, elem2, context) => context.evaluate(Fields.binaryOp(Fields.literal(elem1), "=", Fields.literal(elem2))).orElseThrow()) - .vectorize(2, [1]) - .build(); - // "exact" contains, does not look recursively. - DefaultFunctions.econtains = new FunctionBuilder("econtains") - .add2("array", "*", (l, elem, context) => l.some(e => context.evaluate(Fields.binaryOp(Fields.literal(elem), "=", Fields.literal(e))).orElseThrow())) - .add2("string", "string", (haystack, needle) => haystack.includes(needle)) - .add2("object", "string", (obj, key) => key in obj) - .add2("*", "*", (elem1, elem2, context) => context.evaluate(Fields.binaryOp(Fields.literal(elem1), "=", Fields.literal(elem2))).orElseThrow()) - .vectorize(2, [1]) - .build(); - // Case insensitive contains which looks for exact word matches (i.e., boundry-to-boundry match). - DefaultFunctions.containsword = new FunctionBuilder("containsword") - .add2("string", "string", (hay, needle) => !!hay.match(new RegExp(".*\\b" + escapeRegex(needle) + "\\b.*", "i"))) - .add2("null", "*", (_a, _b) => null) - .add2("*", "null", (_a, _b) => null) - .vectorize(2, [0, 1]) - .build(); - /** Extract 0 or more keys from a given object via indexing. */ - DefaultFunctions.extract = (context, ...args) => { - if (args.length == 0) - return "extract(object, key1, ...) requires at least 1 argument"; - // Manually handle vectorization in the first argument. - let object = args[0]; - if (Values.isArray(object)) - return object.map(v => DefaultFunctions.extract(context, v, ...args.slice(1))); - let result = {}; - for (let index = 1; index < args.length; index++) { - let key = args[index]; - if (!Values.isString(key)) - throw Error("extract(object, key1, ...) must be called with string keys"); - result[key] = context.evaluate(Fields.index(Fields.literal(object), Fields.literal(key))).orElseThrow(); - } - return result; - }; - // Reverse aan array or string. - DefaultFunctions.reverse = new FunctionBuilder("reverse") - .add1("array", l => { - let result = []; - for (let index = l.length - 1; index >= 0; index--) - result.push(l[index]); - return result; - }) - .add1("string", l => { - let result = ""; - for (let c = 0; c < l.length; c++) - result += l[l.length - c - 1]; - return result; - }) - .add1("*", e => e) - .build(); - // Sort an array; if given two arguments, sorts by the key returned. - DefaultFunctions.sort = new FunctionBuilder("sort") - .add1("array", (list, context) => DefaultFunctions.sort(context, list, (_ctx, a) => a)) - .add2("array", "function", (list, key, context) => { - let result = [].concat(list); - result.sort((a, b) => { - let akey = key(context, a); - let bkey = key(context, b); - let le = context - .evaluate(Fields.binaryOp(Fields.literal(akey), "<", Fields.literal(bkey))) - .orElseThrow(); - if (Values.isTruthy(le)) - return -1; - let eq = context - .evaluate(Fields.binaryOp(Fields.literal(akey), "=", Fields.literal(bkey))) - .orElseThrow(); - if (Values.isTruthy(eq)) - return 0; - return 1; - }); - return result; - }) - .add1("*", e => e) - .build(); - DefaultFunctions.regexmatch = new FunctionBuilder("regexmatch") - .add2("string", "string", (pattern, field) => { - if (!pattern.startsWith("^") && !pattern.endsWith("$")) - pattern = "^" + pattern + "$"; - return !!field.match(pattern); - }) - .add2("null", "*", (_n, _a) => false) - .add2("*", "null", (_a, _n) => false) - .vectorize(2, [0, 1]) - .build(); - DefaultFunctions.regexreplace = new FunctionBuilder("regexreplace") - .add3("string", "string", "string", (field, pat, rep) => { - try { - let reg = new RegExp(pat, "g"); - return field.replace(reg, rep); - } - catch (ex) { - throw Error(`Invalid regexp '${pat}' in regexreplace`); - } - }) - .add3("null", "*", "*", () => null) - .add3("*", "null", "*", () => null) - .add3("*", "*", "null", () => null) - .vectorize(3, [0, 1, 2]) - .build(); - DefaultFunctions.lower = new FunctionBuilder("lower") - .add1("string", s => s.toLocaleLowerCase()) - .add1("null", () => null) - .vectorize(1, [0]) - .build(); - DefaultFunctions.upper = new FunctionBuilder("upper") - .add1("string", s => s.toLocaleUpperCase()) - .add1("null", () => null) - .vectorize(1, [0]) - .build(); - DefaultFunctions.replace = new FunctionBuilder("replace") - .add3("string", "string", "string", (str, pat, repr) => str.split(pat).join(repr)) - .add3("null", "*", "*", () => null) - .add3("*", "null", "*", () => null) - .add3("*", "*", "null", () => null) - .vectorize(3, [0, 1, 2]) - .build(); - // Ensure undefined matches turn into empty strings for split/2 and split/3. - const splitImpl = (str, delim, limit) => str.split(new RegExp(delim), limit).map(str => str || ""); - /** Split a string on a given string. */ - DefaultFunctions.split = new FunctionBuilder("split") - .add2("string", "string", (string, splitter) => splitImpl(string, splitter)) - .add3("string", "string", "number", (string, splitter, limit) => splitImpl(string, splitter, limit)) - .add2("null", "*", () => null) - .add2("*", "null", () => null) - .add3("*", "*", "null", () => null) - .add3("*", "null", "*", () => null) - .add3("null", "*", "*", () => null) - .build(); - DefaultFunctions.startswith = new FunctionBuilder("startswith") - .add2("string", "string", (str, starting) => str.startsWith(starting)) - .add2("null", "*", () => null) - .add2("*", "null", () => null) - .vectorize(2, [0, 1]) - .build(); - DefaultFunctions.endswith = new FunctionBuilder("endswith") - .add2("string", "string", (str, ending) => str.endsWith(ending)) - .add2("null", "*", () => null) - .add2("*", "null", () => null) - .vectorize(2, [0, 1]) - .build(); - DefaultFunctions.padleft = new FunctionBuilder("padleft") - .add2("string", "number", (str, len) => str.padStart(len, " ")) - .add3("string", "number", "string", (str, len, padding) => str.padStart(len, padding)) - .add2("null", "*", () => null) - .add2("*", "null", () => null) - .add3("null", "*", "*", () => null) - .add3("*", "null", "*", () => null) - .add3("*", "*", "null", () => null) - .vectorize(2, [0, 1]) - .vectorize(3, [0, 1, 2]) - .build(); - DefaultFunctions.padright = new FunctionBuilder("padright") - .add2("string", "number", (str, len) => str.padEnd(len, " ")) - .add3("string", "number", "string", (str, len, padding) => str.padEnd(len, padding)) - .add2("null", "*", () => null) - .add2("*", "null", () => null) - .add3("null", "*", "*", () => null) - .add3("*", "null", "*", () => null) - .add3("*", "*", "null", () => null) - .vectorize(2, [0, 1]) - .vectorize(3, [0, 1, 2]) - .build(); - DefaultFunctions.fdefault = new FunctionBuilder("default") - .add2("*", "*", (v, bk) => (Values.isNull(v) ? bk : v)) - .vectorize(2, [0, 1]) - .build(); - DefaultFunctions.ldefault = new FunctionBuilder("ldefault") - .add2("*", "*", (v, bk) => (Values.isNull(v) ? bk : v)) - .build(); - DefaultFunctions.choice = new FunctionBuilder("choice") - .add3("*", "*", "*", (b, left, right) => (Values.isTruthy(b) ? left : right)) - .vectorize(3, [0]) - .build(); - DefaultFunctions.reduce = new FunctionBuilder("reduce") - .add2("array", "string", (lis, op, context) => { - if (lis.length == 0) - return null; - if (op != "+" && op != "-" && op != "*" && op != "/" && op != "&" && op != "|") - throw Error("reduce(array, op) supports '+', '-', '/', '*', '&', and '|'"); - let value = lis[0]; - for (let index = 1; index < lis.length; index++) { - value = context - .evaluate(Fields.binaryOp(Fields.literal(value), op, Fields.literal(lis[index]))) - .orElseThrow(); - } - return value; - }) - .add2("array", "function", (lis, op, context) => { - if (lis.length == 0) - return null; - let value = lis[0]; - for (let index = 1; index < lis.length; index++) { - // Skip null values to reduce the pain of summing over fields that may or may not exist. - if (Values.isNull(lis[index])) - continue; - value = op(context, value, lis[index]); - } - return value; - }) - .add2("null", "*", () => null) - .add2("*", "null", () => null) - .vectorize(2, [1]) - .build(); - DefaultFunctions.sum = new FunctionBuilder("sum") - .add1("array", (arr, c) => DefaultFunctions.reduce(c, arr, "+")) - .add1("*", e => e) - .build(); - DefaultFunctions.product = new FunctionBuilder("product") - .add1("array", (arr, c) => DefaultFunctions.reduce(c, arr, "*")) - .add1("*", e => e) - .build(); - DefaultFunctions.join = new FunctionBuilder("join") - .add2("array", "string", (arr, sep, ctx) => arr.map(e => Values.toString(e, ctx.settings)).join(sep)) - .add2("array", "null", (arr, _s, context) => DefaultFunctions.join(context, arr, ", ")) - .add2("*", "string", (elem, sep, ctx) => Values.toString(elem, ctx.settings)) - .add1("array", (arr, context) => DefaultFunctions.join(context, arr, ", ")) - .add1("*", (e, ctx) => Values.toString(e, ctx.settings)) - .vectorize(2, [1]) - .build(); - DefaultFunctions.any = new FunctionBuilder("any") - .add1("array", arr => arr.some(v => Values.isTruthy(v))) - .add2("array", "function", (arr, f, ctx) => arr.some(v => Values.isTruthy(f(ctx, v)))) - .vararg((_ctx, ...args) => args.some(v => Values.isTruthy(v))) - .build(); - DefaultFunctions.all = new FunctionBuilder("all") - .add1("array", arr => arr.every(v => Values.isTruthy(v))) - .add2("array", "function", (arr, f, ctx) => arr.every(v => Values.isTruthy(f(ctx, v)))) - .vararg((_ctx, ...args) => args.every(v => Values.isTruthy(v))) - .build(); - DefaultFunctions.none = new FunctionBuilder("all") - .add1("array", arr => !arr.some(v => Values.isTruthy(v))) - .add2("array", "function", (arr, f, ctx) => !arr.some(v => Values.isTruthy(f(ctx, v)))) - .vararg((_ctx, ...args) => !args.some(v => Values.isTruthy(v))) - .build(); - DefaultFunctions.filter = new FunctionBuilder("filter") - .add2("array", "function", (arr, f, ctx) => arr.filter(v => Values.isTruthy(f(ctx, v)))) - .add2("null", "*", () => null) - .build(); - DefaultFunctions.map = new FunctionBuilder("map") - .add2("array", "function", (arr, f, ctx) => arr.map(v => f(ctx, v))) - .add2("null", "*", () => null) - .build(); - DefaultFunctions.nonnull = new FunctionBuilder("nonnull") - .vararg((_ctx, ...args) => args.filter(v => Values.typeOf(v) != "null")) - .build(); - /** Gets an object containing a link's own properties */ - DefaultFunctions.meta = new FunctionBuilder("meta") - .add1("link", link => { - var _c, _d; - return ({ - display: (_c = link.display) !== null && _c !== void 0 ? _c : null, - embed: link.embed, - path: link.path, - subpath: (_d = link.subpath) !== null && _d !== void 0 ? _d : null, - type: link.type, - }); - }) - .build(); -})(DefaultFunctions || (DefaultFunctions = {})); -/** Default function implementations for the expression evaluator. */ -const DEFAULT_FUNCTIONS = { - // Constructors. - list: DefaultFunctions.list, - array: DefaultFunctions.list, - link: DefaultFunctions.link, - elink: DefaultFunctions.elink, - date: DefaultFunctions.date, - dur: DefaultFunctions.dur, - dateformat: DefaultFunctions.dateformat, - localtime: DefaultFunctions.localtime, - number: DefaultFunctions.number, - string: DefaultFunctions.string, - object: DefaultFunctions.object, - // Math Operations. - round: DefaultFunctions.round, - min: DefaultFunctions.min, - max: DefaultFunctions.max, - minby: DefaultFunctions.minby, - maxby: DefaultFunctions.maxby, - // String operations. - regexreplace: DefaultFunctions.regexreplace, - regexmatch: DefaultFunctions.regexmatch, - replace: DefaultFunctions.replace, - lower: DefaultFunctions.lower, - upper: DefaultFunctions.upper, - split: DefaultFunctions.split, - startswith: DefaultFunctions.startswith, - endswith: DefaultFunctions.endswith, - padleft: DefaultFunctions.padleft, - padright: DefaultFunctions.padright, - // Date Operations. - striptime: DefaultFunctions.striptime, - // List operations. - length: DefaultFunctions.length, - contains: DefaultFunctions.contains, - icontains: DefaultFunctions.icontains, - econtains: DefaultFunctions.econtains, - containsword: DefaultFunctions.containsword, - reverse: DefaultFunctions.reverse, - sort: DefaultFunctions.sort, - // Aggregation operations like reduce. - reduce: DefaultFunctions.reduce, - join: DefaultFunctions.join, - sum: DefaultFunctions.sum, - product: DefaultFunctions.product, - all: DefaultFunctions.all, - any: DefaultFunctions.any, - none: DefaultFunctions.none, - filter: DefaultFunctions.filter, - map: DefaultFunctions.map, - nonnull: DefaultFunctions.nonnull, - // Object/Utility operations. - extract: DefaultFunctions.extract, - default: DefaultFunctions.fdefault, - ldefault: DefaultFunctions.ldefault, - choice: DefaultFunctions.choice, - meta: DefaultFunctions.meta, -}; - -/** Core implementation of the query language evaluation engine. */ -/** - * Evaluation context that expressions can be evaluated in. Includes global state, as well as available functions and a handler - * for binary operators. - */ -class Context { - /** - * Create a new context with the given namespace of globals, as well as optionally with custom binary operator, function, - * and link handlers. - */ - constructor(linkHandler, settings, globals = {}, binaryOps = createBinaryOps(linkHandler.normalize), functions = DEFAULT_FUNCTIONS) { - this.linkHandler = linkHandler; - this.settings = settings; - this.globals = globals; - this.binaryOps = binaryOps; - this.functions = functions; - } - /** Set a global value in this context. */ - set(name, value) { - this.globals[name] = value; - return this; - } - /** Get the value of a global variable by name. Returns null if not present. */ - get(name) { - var _a; - return (_a = this.globals[name]) !== null && _a !== void 0 ? _a : null; - } - /** Try to evaluate an arbitary field in this context, raising an exception on failure. */ - tryEvaluate(field, data = {}) { - return this.evaluate(field, data).orElseThrow(); - } - /** Evaluate an arbitrary field in this context. */ - evaluate(field, data = {}) { - var _a, _b; - switch (field.type) { - case "literal": - return Result.success(field.value); - case "variable": - if (field.name in data) - return Result.success(data[field.name]); - else if (field.name in this.globals) - return Result.success(this.globals[field.name]); - else - return Result.success(null); - case "negated": - return this.evaluate(field.child, data).map(s => !Values.isTruthy(s)); - case "binaryop": - return Result.flatMap2(this.evaluate(field.left, data), this.evaluate(field.right, data), (a, b) => this.binaryOps.evaluate(field.op, a, b, this)); - case "list": - let result = []; - for (let child of field.values) { - let subeval = this.evaluate(child, data); - if (!subeval.successful) - return subeval; - result.push(subeval.value); - } - return Result.success(result); - case "object": - let objResult = {}; - for (let [key, child] of Object.entries(field)) { - let subeval = this.evaluate(child, data); - if (!subeval.successful) - return subeval; - objResult[key] = subeval.value; - } - return Result.success(objResult); - case "lambda": - // Just relying on JS to capture 'data' for us implicitly; unsure - // if this is correct thing to do. Could cause wierd behaviors. - return Result.success((ctx, ...args) => { - let copy = Object.assign({}, data); - for (let arg = 0; arg < Math.min(args.length, field.arguments.length); arg++) { - copy[field.arguments[arg]] = args[arg]; - } - return ctx.evaluate(field.value, copy).orElseThrow(); - }); - case "function": - let rawFunc = field.func.type == "variable" - ? Result.success(field.func.name) - : this.evaluate(field.func, data); - if (!rawFunc.successful) - return rawFunc; - let func = rawFunc.value; - let args = []; - for (let arg of field.arguments) { - let resolved = this.evaluate(arg, data); - if (!resolved.successful) - return resolved; - args.push(resolved.value); - } - let call; - if (Values.isFunction(func)) - call = func; - else if (Values.isString(func) && func in this.functions) - call = this.functions[func]; - else if (Values.isString(func)) - return Result.failure(`Unrecognized function name '${func}'`); - else - return Result.failure(`Cannot call type '${Values.typeOf(func)}' as a function`); - try { - return Result.success(call(this, ...args)); - } - catch (e) { - return Result.failure(e.message); - } - case "index": - // TODO: Will move this out to an 'primitives' module and add more content to it. - let literalIndex = field.index.type == "variable" - ? Result.success(field.index.name) - : this.evaluate(field.index, data); - let checkedIndex = literalIndex.flatMap(s => Values.isString(s) || Values.isNumber(s) - ? Result.success(s) - : Result.failure("Can only index with a string, variable, or number")); - if (!checkedIndex.successful) - return checkedIndex; - let index = checkedIndex.value; - let checkedObject = field.object.type == "variable" && field.object.name == "row" - ? Result.success(Object.assign({}, this.globals, data)) - : this.evaluate(field.object, data); - if (!checkedObject.successful) - return checkedObject; - let object = Values.wrapValue(checkedObject.value); - if (!object) - return Result.failure("Unrecognized object to index into: " + object); - switch (object.type) { - case "object": - if (!Values.isString(index)) - return Result.failure('can only index into objects with strings (a.b or a["b"])'); - return Result.success((_a = object.value[index]) !== null && _a !== void 0 ? _a : null); - case "link": - if (!Values.isString(index)) - return Result.failure('can only index into links with strings (a.b or a["b"])'); - let linkValue = this.linkHandler.resolve(object.value.path); - if (Values.isNull(linkValue)) - return Result.success(null); - return Result.success((_b = linkValue[index]) !== null && _b !== void 0 ? _b : null); - case "array": - if (Values.isNumber(index)) { - if (index >= object.value.length || index < 0) - return Result.success(null); - else - return Result.success(object.value[index]); - } - else if (Values.isString(index)) { - let result = []; - for (let value of object.value) { - let next = this.evaluate(Fields.index(Fields.literal(value), Fields.literal(index))); - if (!next.successful) - continue; - result.push(next.value); - } - return Result.success(result); - } - else { - return Result.failure("Array indexing requires either a number (to get a specific element), or a string (to map all elements inside the array)"); - } - case "string": - if (!Values.isNumber(index)) - return Result.failure("string indexing requires a numeric index (string[index])"); - if (index >= object.value.length || index < 0) - return Result.success(null); - return Result.success(object.value[index]); - case "date": - if (!Values.isString(index)) - return Result.failure("date indexing requires a string representing the unit"); - switch (index) { - case "year": - return Result.success(object.value.year); - case "month": - return Result.success(object.value.month); - case "weekyear": - return Result.success(object.value.weekNumber); - case "week": - return Result.success(Math.floor(object.value.day / 7) + 1); - case "weekday": - return Result.success(object.value.weekday); - case "day": - return Result.success(object.value.day); - case "hour": - return Result.success(object.value.hour); - case "minute": - return Result.success(object.value.minute); - case "second": - return Result.success(object.value.second); - case "millisecond": - return Result.success(object.value.millisecond); - default: - return Result.success(null); - } - case "duration": - if (!Values.isString(index)) - return Result.failure("duration indexing requires a string representing the unit"); - switch (index) { - case "year": - case "years": - return Result.success(object.value.shiftTo("years").years); - case "month": - case "months": - return Result.success(object.value.shiftTo("months").months); - case "weeks": - return Result.success(object.value.shiftTo("weeks").weeks); - case "day": - case "days": - return Result.success(object.value.shiftTo("days").days); - case "hour": - case "hours": - return Result.success(object.value.shiftTo("hours").hours); - case "minute": - case "minutes": - return Result.success(object.value.shiftTo("minutes").minutes); - case "second": - case "seconds": - return Result.success(object.value.shiftTo("seconds").seconds); - case "millisecond": - case "milliseconds": - return Result.success(object.value.shiftTo("millisecond").milliseconds); - default: - return Result.success(null); - } - default: - return Result.success(null); - } - } - } -} - -/** Collect data matching a source query. */ -/** Find source paths which match the given source. */ -function matchingSourcePaths(source, index, originFile = "") { - var _a; - switch (source.type) { - case "empty": - return Result.success(new Set()); - case "tag": - return Result.success(index.tags.getInverse(source.tag)); - case "csv": - return Result.success(new Set([index.prefix.resolveRelative(source.path, originFile)])); - case "folder": - // Prefer loading from the folder at the given path. - if (index.prefix.nodeExists(source.folder)) - return Result.success(index.prefix.get(source.folder, PathFilters.markdown)); - // But allow for loading individual files if they exist. - if (index.prefix.pathExists(source.folder)) - return Result.success(new Set([source.folder])); - else if (index.prefix.pathExists(source.folder + ".md")) - return Result.success(new Set([source.folder + ".md"])); - // For backwards-compat, return an empty result even if the folder does not exist. - return Result.success(new Set()); - case "link": - let fullPath = (_a = index.metadataCache.getFirstLinkpathDest(source.file, originFile)) === null || _a === void 0 ? void 0 : _a.path; - if (!fullPath) - return Result.failure(`Could not resolve link "${source.file}" during link lookup - does it exist?`); - if (source.direction === "incoming") { - // To find all incoming links (i.e., things that link to this), use the index that Obsidian provides. - // TODO: Use an actual index so this isn't a fullscan. - let resolved = index.metadataCache.resolvedLinks; - let incoming = new Set(); - for (let [key, value] of Object.entries(resolved)) { - if (fullPath in value) - incoming.add(key); - } - return Result.success(incoming); - } - else { - let resolved = index.metadataCache.resolvedLinks; - if (!(fullPath in resolved)) - return Result.failure(`Could not find file "${source.file}" during link lookup - does it exist?`); - return Result.success(new Set(Object.keys(index.metadataCache.resolvedLinks[fullPath]))); - } - case "binaryop": - return Result.flatMap2(matchingSourcePaths(source.left, index, originFile), matchingSourcePaths(source.right, index, originFile), (left, right) => { - if (source.op == "&") { - let result = new Set(); - for (let elem of right) { - if (left.has(elem)) - result.add(elem); - } - return Result.success(result); - } - else if (source.op == "|") { - let result = new Set(left); - for (let elem of right) - result.add(elem); - return Result.success(result); - } - else { - return Result.failure(`Unrecognized operator '${source.op}'.`); - } - }); - case "negate": - return matchingSourcePaths(source.child, index, originFile).map(child => { - // TODO: This is obviously very inefficient. Can be improved by complicating the - // return type of this function & optimizing 'and' / 'or'. - let allFiles = new Set(index.vault.getMarkdownFiles().map(f => f.path)); - child.forEach(f => allFiles.delete(f)); - return allFiles; - }); - } -} -/** Convert a path to the data for that path; usually markdown pages, but could also be other file types (like CSV). */ -async function resolvePathData(path, index) { - if (PathFilters.csv(path)) - return resolveCsvData(path, index); - else - return resolveMarkdownData(path, index); -} -// TODO: We shouldn't be doing path normalization here relative to an origin file, -/** Convert a CSV path to the data in the CSV (in dataview format). */ -async function resolveCsvData(path, index) { - let rawData = await index.csv.get(path); - return rawData.map(rows => { - return rows.map((row, index) => { - return { - id: `${path}#${index}`, - data: row, - }; - }); - }); -} -/** Convert a path pointing to a markdown page, into the associated metadata. */ -function resolveMarkdownData(path, index) { - let page = index.pages.get(path); - if (!page) - return Result.success([]); - return Result.success([ - { - id: Link.file(path), - data: page.toObject(index), - }, - ]); -} -/** Resolve a source to the collection of data rows that it matches. */ -async function resolveSource(source, index, originFile = "") { - let paths = matchingSourcePaths(source, index, originFile); - if (!paths.successful) - return Result.failure(paths.error); - let result = []; - for (let path of paths.value) { - let resolved = await resolvePathData(path, index); - if (!resolved.successful) - return resolved; - for (let val of resolved.value) - result.push(val); - } - return Result.success(result); -} - -function iden(x) { - return x; -} -/** Shared execution code which just takes in arbitrary data, runs operations over it, and returns it + per-row errors. */ -function executeCore(rows, context, ops) { - let diagnostics = []; - let identMeaning = { type: "path" }; - let startTime = new Date().getTime(); - for (let op of ops) { - let opStartTime = new Date().getTime(); - let incomingRows = rows.length; - let errors = []; - switch (op.type) { - case "where": - let whereResult = []; - for (let index = 0; index < rows.length; index++) { - let row = rows[index]; - let value = context.evaluate(op.clause, row.data); - if (!value.successful) - errors.push({ index, message: value.error }); - else if (Values.isTruthy(value.value)) - whereResult.push(row); - } - rows = whereResult; - break; - case "sort": - let sortFields = op.fields; - let taggedData = []; - outer: for (let index = 0; index < rows.length; index++) { - let row = rows[index]; - let rowSorts = []; - for (let sIndex = 0; sIndex < sortFields.length; sIndex++) { - let value = context.evaluate(sortFields[sIndex].field, row.data); - if (!value.successful) { - errors.push({ index, message: value.error }); - continue outer; - } - rowSorts.push(value.value); - } - taggedData.push({ data: row, fields: rowSorts }); - } - // Sort rows by the sort fields, and then return the finished result. - taggedData.sort((a, b) => { - for (let index = 0; index < sortFields.length; index++) { - let factor = sortFields[index].direction === "ascending" ? 1 : -1; - let le = context.binaryOps - .evaluate("<", a.fields[index], b.fields[index], context) - .orElse(false); - if (Values.isTruthy(le)) - return factor * -1; - let ge = context.binaryOps - .evaluate(">", a.fields[index], b.fields[index], context) - .orElse(false); - if (Values.isTruthy(ge)) - return factor * 1; - } - return 0; - }); - rows = taggedData.map(v => v.data); - break; - case "limit": - let limiting = context.evaluate(op.amount); - if (!limiting.successful) - return Result.failure("Failed to execute 'limit' statement: " + limiting.error); - if (!Values.isNumber(limiting.value)) - return Result.failure(`Failed to execute 'limit' statement: limit should be a number, but got '${Values.typeOf(limiting.value)}' (${limiting.value})`); - rows = rows.slice(0, limiting.value); - break; - case "group": - let groupData = []; - for (let index = 0; index < rows.length; index++) { - let value = context.evaluate(op.field.field, rows[index].data); - if (!value.successful) { - errors.push({ index, message: value.error }); - continue; - } - groupData.push({ data: rows[index], key: value.value }); - } - // Sort by the key, which we will group on shortly. - groupData.sort((a, b) => { - let le = context.binaryOps.evaluate("<", a.key, b.key, context).orElse(false); - if (Values.isTruthy(le)) - return -1; - let ge = context.binaryOps.evaluate(">", a.key, b.key, context).orElse(false); - if (Values.isTruthy(ge)) - return 1; - return 0; - }); - // Then walk through and find fields that are equal. - let finalGroupData = []; - if (groupData.length > 0) - finalGroupData.push({ - key: groupData[0].key, - rows: [groupData[0].data.data], - [op.field.name]: groupData[0].key, - }); - for (let index = 1; index < groupData.length; index++) { - let curr = groupData[index], prev = groupData[index - 1]; - if (context.binaryOps.evaluate("=", curr.key, prev.key, context).orElse(false)) { - finalGroupData[finalGroupData.length - 1].rows.push(curr.data.data); - } - else { - finalGroupData.push({ - key: curr.key, - rows: [curr.data.data], - [op.field.name]: curr.key, - }); - } - } - rows = finalGroupData.map(d => { - return { id: d.key, data: d }; - }); - identMeaning = { type: "group", name: op.field.name, on: identMeaning }; - break; - case "flatten": - let flattenResult = []; - for (let index = 0; index < rows.length; index++) { - let row = rows[index]; - let value = context.evaluate(op.field.field, row.data); - if (!value.successful) { - errors.push({ index, message: value.error }); - continue; - } - let datapoints = Values.isArray(value.value) ? value.value : [value.value]; - for (let v of datapoints) { - let copy = Values.deepCopy(row); - copy.data[op.field.name] = v; - flattenResult.push(copy); - } - } - rows = flattenResult; - if (identMeaning.type == "group" && identMeaning.name == op.field.name) - identMeaning = identMeaning.on; - break; - default: - return Result.failure("Unrecognized query operation '" + op.type + "'"); - } - if (errors.length >= incomingRows && incomingRows > 0) { - return Result.failure(`Every row during operation '${op.type}' failed with an error; first ${Math.min(3, errors.length)}:\n - ${errors - .slice(0, 3) - .map(d => "- " + d.message) - .join("\n")}`); - } - diagnostics.push({ - incomingRows, - errors, - outgoingRows: rows.length, - timeMs: new Date().getTime() - opStartTime, - }); - } - return Result.success({ - data: rows, - idMeaning: identMeaning, - ops, - diagnostics, - timeMs: new Date().getTime() - startTime, - }); -} -/** Expanded version of executeCore which adds an additional "extraction" step to the pipeline. */ -function executeCoreExtract(rows, context, ops, fields) { - let internal = executeCore(rows, context, ops); - if (!internal.successful) - return internal; - let core = internal.value; - let startTime = new Date().getTime(); - let errors = []; - let res = []; - outer: for (let index = 0; index < core.data.length; index++) { - let page = { id: core.data[index].id, data: {} }; - for (let [name, field] of Object.entries(fields)) { - let value = context.evaluate(field, core.data[index].data); - if (!value.successful) { - errors.push({ index: index, message: value.error }); - continue outer; - } - page.data[name] = value.value; - } - res.push(page); - } - if (errors.length >= core.data.length && core.data.length > 0) { - return Result.failure(`Every row during final data extraction failed with an error; first ${Math.max(errors.length, 3)}:\n - ${errors - .slice(0, 3) - .map(d => "- " + d.message) - .join("\n")}`); - } - let execTime = new Date().getTime() - startTime; - return Result.success({ - data: res, - idMeaning: core.idMeaning, - diagnostics: core.diagnostics.concat([ - { - timeMs: execTime, - incomingRows: core.data.length, - outgoingRows: res.length, - errors, - }, - ]), - ops: core.ops.concat([{ type: "extract", fields }]), - timeMs: core.timeMs + execTime, - }); -} -/** Execute a list-based query, returning the final results. */ -async function executeList(query, index, origin, settings) { - var _a, _b; - // Start by collecting all of the files that match the 'from' queries. - let fileset = await resolveSource(query.source, index, origin); - if (!fileset.successful) - return Result.failure(fileset.error); - // Extract information about the origin page to add to the root context. - let rootContext = new Context(defaultLinkHandler(index, origin), settings, { - this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.toObject(index)) !== null && _b !== void 0 ? _b : {}, - }); - let targetField = query.header.format; - let fields = targetField ? { target: targetField } : {}; - return executeCoreExtract(fileset.value, rootContext, query.operations, fields).map(core => { - let data = core.data.map(p => { - var _a; - return iden({ - primary: p.id, - value: (_a = p.data["target"]) !== null && _a !== void 0 ? _a : undefined, - }); - }); - return { primaryMeaning: core.idMeaning, core, data }; - }); -} -/** Execute a table query. */ -async function executeTable(query, index, origin, settings) { - var _a, _b; - // Start by collecting all of the files that match the 'from' queries. - let fileset = await resolveSource(query.source, index, origin); - if (!fileset.successful) - return Result.failure(fileset.error); - // Extract information about the origin page to add to the root context. - let rootContext = new Context(defaultLinkHandler(index, origin), settings, { - this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.toObject(index)) !== null && _b !== void 0 ? _b : {}, - }); - let targetFields = query.header.fields; - let fields = {}; - for (let field of targetFields) - fields[field.name] = field.field; - return executeCoreExtract(fileset.value, rootContext, query.operations, fields).map(core => { - let names = targetFields.map(f => f.name); - let data = core.data.map(p => iden({ - id: p.id, - values: targetFields.map(f => p.data[f.name]), - })); - return { core, names, data, idMeaning: core.idMeaning }; - }); -} -/** Maps a raw core execution result to a task grouping which is much easier to */ -function extractTaskGroupings(id, rows) { - switch (id.type) { - case "path": - return { type: "base", value: rows.map(r => Task.fromObject(r)) }; - case "group": - let key = id.name; - return { - type: "grouped", - groups: rows.map(r => iden({ - key: r[key], - value: extractTaskGroupings(id.on, r.rows), - })), - }; - } -} -/** Execute a task query, returning all matching tasks. */ -async function executeTask(query, origin, index, settings) { - var _a, _b; - let fileset = matchingSourcePaths(query.source, index, origin); - if (!fileset.successful) - return Result.failure(fileset.error); - // Collect tasks from pages which match. - let incomingTasks = []; - for (let path of fileset.value) { - let page = index.pages.get(path); - if (!page) - continue; - let pageData = page.toObject(index); - let rpage = page; - let pageTasks = page.tasks.map(t => { - let copy = t.toObject(); - // Add page data to this copy. - for (let [key, value] of Object.entries(pageData)) { - if (key in copy) - continue; - copy[key] = value; - } - return { id: `${rpage.path}#${t.line}`, data: copy }; - }); - for (let task of pageTasks) - incomingTasks.push(task); - } - // Extract information about the origin page to add to the root context. - let rootContext = new Context(defaultLinkHandler(index, origin), settings, { - this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.toObject(index)) !== null && _b !== void 0 ? _b : {}, - }); - return executeCore(incomingTasks, rootContext, query.operations).map(core => { - return { - core, - tasks: extractTaskGroupings(core.idMeaning, core.data.map(r => r.data)), - }; - }); -} -/** Execute a single field inline a file, returning the evaluated result. */ -function executeInline(field, origin, index, settings) { - var _a, _b; - return new Context(defaultLinkHandler(index, origin), settings, { - this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.toObject(index)) !== null && _b !== void 0 ? _b : {}, - }).evaluate(field); -} -/** The default link resolver used when creating contexts. */ -function defaultLinkHandler(index, origin) { - return { - resolve: link => { - let realFile = index.metadataCache.getFirstLinkpathDest(link, origin); - if (!realFile) - return null; - let realPage = index.pages.get(realFile.path); - if (!realPage) - return null; - return realPage.toObject(index); - }, - normalize: link => { - var _a; - let realFile = index.metadataCache.getFirstLinkpathDest(link, origin); - return (_a = realFile === null || realFile === void 0 ? void 0 : realFile.path) !== null && _a !== void 0 ? _a : link; - }, - exists: link => { - let realFile = index.metadataCache.getFirstLinkpathDest(link, origin); - return !!realFile; - }, - }; -} -/** Execute a calendar-based query, returning the final results. */ -async function executeCalendar(query, index, origin, settings) { - var _a, _b; - // Start by collecting all of the files that match the 'from' queries. - let fileset = await resolveSource(query.source, index, origin); - if (!fileset.successful) - return Result.failure(fileset.error); - // Extract information about the origin page to add to the root context. - let rootContext = new Context(defaultLinkHandler(index, origin), settings, { - this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.toObject(index)) !== null && _b !== void 0 ? _b : {}, - }); - let targetField = query.header.field.field; - let fields = { - target: targetField, - link: { type: "index", object: { type: "variable", name: "file" }, index: { type: "variable", name: "link" } }, - }; - return executeCoreExtract(fileset.value, rootContext, query.operations, fields).map(core => { - let data = core.data.map(p => iden({ - date: p.data["target"], - link: p.data["link"], - })); - return { core, data }; - }); -} - -function compareVersions(v1, v2) { - // validate input and split into segments - const n1 = validateAndParse(v1); - const n2 = validateAndParse(v2); - - // pop off the patch - const p1 = n1.pop(); - const p2 = n2.pop(); - - // validate numbers - const r = compareSegments(n1, n2); - if (r !== 0) return r; - - // validate pre-release - if (p1 && p2) { - return compareSegments(p1.split('.'), p2.split('.')); - } else if (p1 || p2) { - return p1 ? -1 : 1; - } - - return 0; -} - -const compare = (v1, v2, operator) => { - // validate input operator - assertValidOperator(operator); - - // since result of compareVersions can only be -1 or 0 or 1 - // a simple map can be used to replace switch - const res = compareVersions(v1, v2); - - return operatorResMap[operator].includes(res); -}; - -const satisfies = (v, r) => { - // if no range operator then "=" - const m = r.match(/^([<>=~^]+)/); - const op = m ? m[1] : '='; - - // if gt/lt/eq then operator compare - if (op !== '^' && op !== '~') return compare(v, r, op); - - // else range of either "~" or "^" is assumed - const [v1, v2, v3] = validateAndParse(v); - const [r1, r2, r3] = validateAndParse(r); - if (compareStrings(v1, r1) !== 0) return false; - if (op === '^') { - return compareSegments([v2, v3], [r2, r3]) >= 0; - } - if (compareStrings(v2, r2) !== 0) return false; - return compareStrings(v3, r3) >= 0; -}; - -const semver = - /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i; - -const validateAndParse = (v) => { - if (typeof v !== 'string') { - throw new TypeError('Invalid argument expected string'); - } - const match = v.match(semver); - if (!match) { - throw new Error(`Invalid argument not valid semver ('${v}' received)`); - } - match.shift(); - return match; -}; - -const isWildcard = (s) => s === '*' || s === 'x' || s === 'X'; - -const tryParse = (v) => { - const n = parseInt(v, 10); - return isNaN(n) ? v : n; -}; - -const forceType = (a, b) => - typeof a !== typeof b ? [String(a), String(b)] : [a, b]; - -const compareStrings = (a, b) => { - if (isWildcard(a) || isWildcard(b)) return 0; - const [ap, bp] = forceType(tryParse(a), tryParse(b)); - if (ap > bp) return 1; - if (ap < bp) return -1; - return 0; -}; - -const compareSegments = (a, b) => { - for (let i = 0; i < Math.max(a.length, b.length); i++) { - const r = compareStrings(a[i] || 0, b[i] || 0); - if (r !== 0) return r; - } - return 0; -}; - -const operatorResMap = { - '>': [1], - '>=': [0, 1], - '=': [0], - '<=': [-1, 0], - '<': [-1], -}; - -const allowedOperators = Object.keys(operatorResMap); - -const assertValidOperator = (op) => { - if (typeof op !== 'string') { - throw new TypeError( - `Invalid operator type, expected string but got ${typeof op}` - ); - } - if (allowedOperators.indexOf(op) === -1) { - throw new Error( - `Invalid operator, expected one of ${allowedOperators.join('|')}` - ); - } -}; - -/** The general, externally accessible plugin API (available at `app.plugins.plugins.dataview.api`). */ -/** Asynchronous API calls related to file / system IO. */ -class DataviewIOApi { - constructor(api) { - this.api = api; - } - /** Load the contents of a CSV asynchronously, returning a data array of rows (or undefined if it does not exist). */ - async csv(path, originFile) { - if (!Values.isLink(path) && !Values.isString(path)) { - throw Error(`dv.io.csv only handles string or link paths; was provided type '${typeof path}'.`); - } - let data = await this.api.index.csv.get(this.normalize(path, originFile)); - if (data.successful) - return DataArray.from(data.value, this.api.settings); - else - throw Error(`Could not find CSV for path '${path}' (relative to origin '${originFile !== null && originFile !== void 0 ? originFile : "/"}')`); - } - /** Asynchronously load the contents of any link or path in an Obsidian vault. */ - async load(path, originFile) { - if (!Values.isLink(path) && !Values.isString(path)) { - throw Error(`dv.io.load only handles string or link paths; was provided type '${typeof path}'.`); - } - return this.api.index.vault.adapter.read(this.normalize(path, originFile)); - } - /** Normalize a link or path relative to an optional origin file. Returns a textual fully-qualified-path. */ - normalize(path, originFile) { - let realPath; - if (Values.isLink(path)) - realPath = path.path; - else - realPath = path; - return this.api.index.prefix.resolveRelative(realPath, originFile); - } -} -class DataviewApi { - constructor(app, index, settings, verNum) { - this.app = app; +class DataviewCalendarRenderer extends DataviewRefreshableRenderer { + constructor(query, container, index, origin, settings, app) { + super(container); + this.query = query; + this.container = container; this.index = index; + this.origin = origin; this.settings = settings; - this.verNum = verNum; - /** Value utility functions for comparisons and type-checking. */ - this.value = Values; - /** Re-exporting of luxon for people who can't easily require it. Sorry! */ - this.luxon = Luxon; - /** utils to check api version */ - this.version = (() => { - const { verNum: version } = this; - return { - get current() { - return version; - }, - compare: (op, ver) => compare(version, ver, op), - satisfies: range => satisfies(version, range), + this.app = app; + } + async render() { + var _a; + this.container.innerHTML = ""; + let maybeResult = await asyncTryOrPropogate(() => executeCalendar(this.query, this.index, this.origin, this.settings)); + if (!maybeResult.successful) { + renderErrorPre(this.container, "Dataview: " + maybeResult.error); + return; + } + else if (maybeResult.value.data.length == 0 && this.settings.warnOnEmptyResult) { + renderErrorPre(this.container, "Dataview: Query returned 0 results."); + return; + } + let dateMap = new Map(); + for (let data of maybeResult.value.data) { + const dot = { + color: "default", + className: "note", + isFilled: true, + link: data.link, }; - })(); - this.evaluationContext = new Context(defaultLinkHandler(index, ""), settings); - this.func = Functions.bindAll(DEFAULT_FUNCTIONS, this.evaluationContext); - this.io = new DataviewIOApi(this); - } - ///////////////////////////// - // Index + Data Collection // - ///////////////////////////// - /** Return an array of paths (as strings) corresponding to pages which match the query. */ - pagePaths(query, originFile) { - let source; - try { - if (!query || query.trim() === "") - source = Sources.folder(""); - else - source = EXPRESSION.source.tryParse(query); + const d = data.date.toFormat("yyyyLLdd"); + if (!dateMap.has(d)) { + dateMap.set(d, [dot]); + } + else { + (_a = dateMap.get(d)) === null || _a === void 0 ? void 0 : _a.push(dot); + } } - catch (ex) { - throw new Error(`Failed to parse query in 'pagePaths': ${ex}`); - } - return matchingSourcePaths(source, this.index, originFile) - .map(s => DataArray.from(s, this.settings)) - .orElseThrow(); - } - /** Map a page path to the actual data contained within that page. */ - page(path, originFile) { - if (!(typeof path === "string") && !Values.isLink(path)) { - throw Error("dv.page only handles string and link paths; was provided type '" + typeof path + "'"); - } - let rawPath = path instanceof Link ? path.path : path; - let normPath = this.app.metadataCache.getFirstLinkpathDest(rawPath, originFile !== null && originFile !== void 0 ? originFile : ""); - if (!normPath) - return undefined; - let pageObject = this.index.pages.get(normPath.path); - if (!pageObject) - return undefined; - return DataArray.convert(pageObject.toObject(this.index), this.settings); - } - /** Return an array of page objects corresponding to pages which match the query. */ - pages(query, originFile) { - return this.pagePaths(query, originFile).flatMap(p => { - let res = this.page(p, originFile); - return res ? [res] : []; + const querySource = { + getDailyMetadata: async (date) => { + return { + dots: dateMap.get(date.format("YYYYMMDD")) || [], + }; + }, + }; + const sources = [querySource]; + const renderer = this; + this.calendar = new Calendar({ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + target: this.container, + props: { + onHoverDay(date, targetEl) { + const vals = dateMap.get(date.format("YYYYMMDD")); + if (!vals || vals.length == 0) { + return; + } + if ((vals === null || vals === void 0 ? void 0 : vals.length) == 0) { + return; + } + renderer.app.workspace.trigger("link-hover", {}, targetEl, vals[0].link.path, vals[0].link.path); + }, + onClickDay: async (date) => { + const vals = dateMap.get(date.format("YYYYMMDD")); + if (!vals || vals.length == 0) { + return; + } + if ((vals === null || vals === void 0 ? void 0 : vals.length) == 0) { + return; + } + const file = renderer.app.metadataCache.getFirstLinkpathDest(vals[0].link.path, ""); + if (file == null) { + return; + } + const leaf = renderer.app.workspace.getUnpinnedLeaf(); + await leaf.openFile(file, { active: true }); + }, + showWeekNums: false, + sources, + }, }); } - ///////////// - // Utility // - ///////////// - /** - * Convert an input element or array into a Dataview data-array. If the input is already a data array, - * it is returned unchanged. - */ - array(raw) { - if (DataArray.isDataArray(raw)) - return raw; - if (Array.isArray(raw)) - return DataArray.wrap(raw, this.settings); - return DataArray.wrap([raw], this.settings); + onClose() { + if (this.calendar) { + this.calendar.$destroy(); + } + return Promise.resolve(); } - /** Return true if theg given value is a javascript array OR a dataview data array. */ - isArray(raw) { - return DataArray.isDataArray(raw) || Array.isArray(raw); +} + +/** Refreshable renderer which renders inline instead of in a div. */ +class DataviewInlineRenderer extends DataviewRefreshableRenderer { + constructor(field, fieldText, container, target, index, origin, settings, app) { + super(container); + this.field = field; + this.fieldText = fieldText; + this.container = container; + this.target = target; + this.index = index; + this.origin = origin; + this.settings = settings; + this.app = app; } - /** Create a dataview file link to the given path. */ - fileLink(path, embed = false, display) { - return Link.file(path, embed, display); - } - /** Attempt to extract a date from a string, link or date. */ - date(pathlike) { - return this.func.date(pathlike); - } - /** Attempt to extract a duration from a string or duration. */ - duration(str) { - return this.func.dur(str); - } - /** - * Compare two arbitrary JavaScript values using Dataview's default comparison rules. Returns a negative value if - * a < b, 0 if a = b, and a positive value if a > b. - */ - compare(a, b) { - return Values.compareValue(a, b); - } - /** Return true if the two given JavaScript values are equal using Dataview's default comparison rules. */ - equal(a, b) { - return this.compare(a, b) == 0; - } - /////////////// - // Rendering // - /////////////// - /** Render a dataview list of the given values. */ - list(values, container, component, filePath) { - if (!values) - return; - if (DataArray.isDataArray(values)) - values = values.array(); - renderList(container, values, component, filePath, this.settings); - } - /** Render a dataview table with the given headers, and the 2D array of values. */ - table(headers, values, container, component, filePath) { - if (!values) - values = []; - if (DataArray.isDataArray(values)) - values = values.array(); - renderTable(container, headers, values, component, filePath, this.settings); - } - /** Render a dataview task view with the given tasks. */ - async taskList(tasks, groupByFile = true, container, component, filePath = "") { + async render() { var _a; - if (DataArray.isDataArray(tasks)) - tasks = tasks.array(); - let taskComponent = new obsidian.Component(); - component.addChild(taskComponent); - if (groupByFile) { - let byFile = new Map(); - for (let task of tasks) { - if (!byFile.has(task.path)) - byFile.set(task.path, []); - (_a = byFile.get(task.path)) === null || _a === void 0 ? void 0 : _a.push(task); - } - let groupings = Groupings.grouped(Array.from(byFile.entries()).map(([path, tasks]) => { - return { key: Link.file(path), value: Groupings.base(tasks) }; - })); - let subcontainer = container.createDiv(); - await renderTasks(subcontainer, groupings, filePath, taskComponent, this.app.vault, this.settings); + (_a = this.errorbox) === null || _a === void 0 ? void 0 : _a.remove(); + let result = tryOrPropogate(() => executeInline(this.field, this.origin, this.index, this.settings)); + if (!result.successful) { + this.errorbox = this.container.createEl("div"); + renderErrorPre(this.errorbox, "Dataview (for inline query '" + this.fieldText + "'): " + result.error); } else { - let subcontainer = container.createDiv(); - await renderTasks(subcontainer, Groupings.base(tasks), filePath, taskComponent, this.app.vault, this.settings); + let temp = document.createElement("span"); + temp.addClasses(["dataview", "dataview-inline-query"]); + await renderValue(result.value, temp, this.origin, this, this.settings, false); + this.target.replaceWith(temp); } } - /** Render an arbitrary value into a container. */ - async renderValue(value, container, component, filePath, inline = false) { - await renderValue(value, container, filePath, component, this.settings, inline); - } } /** Fancy wrappers for the JavaScript API, used both by external plugins AND by the dataview javascript view. */ @@ -15509,8 +19420,10 @@ class DataviewInlineApi { this.api = new DataviewApi(this.app, this.index, this.settings, verNum); this.io = new DataviewInlineIOApi(this.api.io, this.currentFilePath); // Set up the evaluation context with variables from the current file. - let fileMeta = (_b = (_a = this.index.pages.get(this.currentFilePath)) === null || _a === void 0 ? void 0 : _a.toObject(this.index)) !== null && _b !== void 0 ? _b : {}; - this.evaluationContext = new Context(defaultLinkHandler(this.index, this.currentFilePath), settings, fileMeta); + let fileMeta = (_b = (_a = this.index.pages.get(this.currentFilePath)) === null || _a === void 0 ? void 0 : _a.serialize(this.index)) !== null && _b !== void 0 ? _b : {}; + this.evaluationContext = new Context(defaultLinkHandler(this.index, this.currentFilePath), settings, { + this: fileMeta, + }); this.func = Functions.bindAll(DEFAULT_FUNCTIONS, this.evaluationContext); } ///////////////////////////// @@ -15532,6 +19445,34 @@ class DataviewInlineApi { current() { return this.page(this.currentFilePath); } + /////////////////////////////// + // Dataview Query Evaluation // + /////////////////////////////// + /** + * Evaluate a dataview expression (like '2 + 2' or 'link("hello")'), returning the evaluated result. + * This takes an optional second argument which provides definitions for variables, such as: + * + * ``` + * dv.evaluate("x + 6", { x: 2 }) = 8 + * dv.evaluate('link(target)', { target: "Okay" }) = [[Okay]] + * ``` + * + * Note that `this` is implicitly available and refers to the current file. + * + * This method returns a Result type instead of throwing an error; you can check the result of the + * execution via `result.successful` and obtain `result.value` or `result.error` resultingly. If + * you'd rather this method throw on an error, use `dv.tryEvaluate`. + */ + evaluate(expression, context) { + let field = EXPRESSION.field.parse(expression); + if (!field.status) + return Result.failure(`Failed to parse expression "${expression}"`); + return this.evaluationContext.evaluate(field.value, context); + } + /** Error-throwing version of `dv.evaluate`. */ + tryEvaluate(expression, context) { + return this.evaluate(expression, context).orElseThrow(); + } ///////////// // Utility // ///////////// @@ -15546,6 +19487,10 @@ class DataviewInlineApi { isArray(raw) { return this.api.isArray(raw); } + /** Return true if the given value is a dataview data array; this returns FALSE for plain JS arrays. */ + isDataArray(raw) { + return DataArray.isDataArray(raw); + } /** Create a dataview file link to the given path. */ fileLink(path, embed = false, display) { return Link.file(path, embed, display); @@ -15566,6 +19511,14 @@ class DataviewInlineApi { duration(dur) { return this.api.duration(dur); } + /** Parse a raw textual value into a complex Dataview type, if possible. */ + parse(value) { + return this.api.parse(value); + } + /** Convert a basic JS type into a Dataview type by parsing dates, links, durations, and so on. */ + literal(value) { + return this.api.literal(value); + } /** * Compare two arbitrary JavaScript values using Dataview's default comparison rules. Returns a negative value if * a < b, 0 if a = b, and a positive value if a > b. @@ -15581,28 +19534,28 @@ class DataviewInlineApi { // Rendering Functions // ///////////////////////// /** Render an HTML element, containing arbitrary text. */ - async el(el, text, options) { + el(el, text, { container = this.container, ...options } = {}) { let wrapped = Values.wrapValue(text); if (wrapped === null || wrapped === undefined) { - return this.container.createEl(el, Object.assign({ text }, options)); + return container.createEl(el, Object.assign({ text }, options)); } - let _el = this.container.createEl(el, options); - await renderValue(wrapped.value, _el, this.currentFilePath, this.component, this.settings, true); + let _el = container.createEl(el, options); + renderValue(wrapped.value, _el, this.currentFilePath, this.component, this.settings, true); return _el; } /** Render an HTML header; the level can be anything from 1 - 6. */ - async header(level, text, options) { + header(level, text, options) { let header = { 1: "h1", 2: "h2", 3: "h3", 4: "h4", 5: "h5", 6: "h6" }[level]; if (!header) throw Error(`Unrecognized level '${level}' (expected 1, 2, 3, 4, 5, or 6)`); return this.el(header, text, options); } /** Render an HTML paragraph, containing arbitrary text. */ - async paragraph(text, options) { + paragraph(text, options) { return this.el("p", text, options); } /** Render an inline span, containing arbitrary text. */ - async span(text, options) { + span(text, options) { return this.el("span", text, options); } /** @@ -15614,6 +19567,8 @@ class DataviewInlineApi { let simpleViewFile = this.app.metadataCache.getFirstLinkpathDest(viewName + ".js", this.currentFilePath); if (simpleViewFile) { let contents = await this.app.vault.read(simpleViewFile); + if (contents.contains("await")) + contents = "(async () => { " + contents + " })()"; let func = new Function("dv", "input", contents); try { // This may directly render, in which case it will likely return undefined or null. @@ -15634,6 +19589,8 @@ class DataviewInlineApi { return; } let viewContents = await this.app.vault.read(viewFile); + if (viewContents.contains("await")) + viewContents = "(async () => { " + viewContents + " })()"; let viewFunction = new Function("dv", "input", viewContents); try { let result = await Promise.resolve(viewFunction(this, input)); @@ -15687,6 +19644,76 @@ function makeApiContext(index, component, app, settings, verNum, container, orig return new DataviewInlineApi(index, component, container, app, settings, verNum, originFile); } +class DataviewJSRenderer extends DataviewRefreshableRenderer { + constructor(script, container, app, index, origin, settings, verNum) { + super(container); + this.script = script; + this.container = container; + this.app = app; + this.index = index; + this.origin = origin; + this.settings = settings; + this.verNum = verNum; + } + async render() { + this.container.innerHTML = ""; + if (!this.settings.enableDataviewJs) { + this.containerEl.innerHTML = ""; + renderErrorPre(this.container, "Dataview JS queries are disabled. You can enable them in the Dataview settings."); + return; + } + // Assume that the code is javascript, and try to eval it. + try { + await asyncEvalInContext(DataviewJSRenderer.PREAMBLE + this.script, makeApiContext(this.index, this, this.app, this.settings, this.verNum, this.container, this.origin)); + } + catch (e) { + this.containerEl.innerHTML = ""; + renderErrorPre(this.container, "Evaluation Error: " + e.stack); + } + } +} +DataviewJSRenderer.PREAMBLE = "const dataview = this;const dv = this;"; +/** Inline JS renderer accessible using '=$' by default. */ +class DataviewInlineJSRenderer extends DataviewRefreshableRenderer { + constructor(script, container, target, app, index, origin, settings, verNum) { + super(container); + this.script = script; + this.container = container; + this.target = target; + this.app = app; + this.index = index; + this.origin = origin; + this.settings = settings; + this.verNum = verNum; + } + async render() { + var _a; + (_a = this.errorbox) === null || _a === void 0 ? void 0 : _a.remove(); + if (!this.settings.enableDataviewJs || !this.settings.enableInlineDataviewJs) { + let temp = document.createElement("span"); + temp.innerText = "(disabled; enable in settings)"; + this.target.replaceWith(temp); + this.target = temp; + return; + } + // Assume that the code is javascript, and try to eval it. + try { + let temp = document.createElement("span"); + let result = await asyncEvalInContext(DataviewInlineJSRenderer.PREAMBLE + this.script, makeApiContext(this.index, this, this.app, this.settings, this.verNum, temp, this.origin)); + this.target.replaceWith(temp); + this.target = temp; + if (result === undefined) + return; + renderValue(result, temp, this.origin, this, this.settings, false); + } + catch (e) { + this.errorbox = this.container.createEl("div"); + renderErrorPre(this.errorbox, "Dataview (for inline JS query '" + this.script + "'): " + e); + } + } +} +DataviewInlineJSRenderer.PREAMBLE = "const dataview = this;const dv=this;"; + const API_NAME = "DataviewAPI"; // this line will throw error if name out of sync class DataviewPlugin extends obsidian.Plugin { constructor() { @@ -15697,14 +19724,14 @@ class DataviewPlugin extends obsidian.Plugin { var _a; // Settings initialization; write defaults first time around. this.settings = Object.assign(DEFAULT_SETTINGS, (_a = (await this.loadData())) !== null && _a !== void 0 ? _a : {}); - this.addSettingTab(new DataviewSettingsTab(this.app, this)); - this.index = FullIndex.create(this.app.vault, this.app.metadataCache, () => { + this.addSettingTab(new GeneralSettingsTab(this.app, this)); + this.index = this.addChild(FullIndex.create(this.app, this.manifest.version, () => { if (this.settings.refreshEnabled) this.debouncedRefresh(); - }); - // Set up view refreshing + })); + // Set up automatic (intelligent) view refreshing that debounces. this.updateRefreshSettings(); - this.addChild(this.index); + // From this point onwards the dataview API is fully functional (even if the index needs to do some background indexing). this.api = new DataviewApi(this.app, this.index, this.settings, this.manifest.version); // Register API to global window object. (window[API_NAME] = this.api) && this.register(() => delete window[API_NAME]); @@ -15713,15 +19740,31 @@ class DataviewPlugin extends obsidian.Plugin { // DataviewJS codeblocks. this.registerPriorityCodeblockPostProcessor("dataviewjs", -100, async (source, el, ctx) => this.dataviewjs(source, el, ctx, ctx.sourcePath)); // Dataview inline queries. - this.registerPriorityMarkdownPostProcessor(-100, async (el, ctx) => this.dataviewInline(el, ctx, ctx.sourcePath)); + this.registerPriorityMarkdownPostProcessor(-100, async (el, ctx) => { + this.dataviewInline(el, ctx, ctx.sourcePath); + }); // Dataview inline-inline query fancy rendering. Runs at a low priority; should apply to Dataview views. this.registerPriorityMarkdownPostProcessor(100, async (el, ctx) => { // Allow for lame people to disable the pretty rendering. - if (!this.settings.prettyRenderInlineFields) + if (!this.settings.prettyRenderInlineFields || isDataviewDisabled(ctx.sourcePath)) return; - // Handle p, header elements explicitly (opt-in rather than opt-out for now). - for (let p of el.findAllSelf("p,h1,h2,h3,h4,h5,h6,li,span,th,td")) - await replaceInlineFields(ctx, p, ctx.sourcePath, this.settings); + await replaceInlineFields(ctx, el, this.settings); + }); + // Dataview "force refresh" operation. + this.addCommand({ + id: "dataview-force-refresh-views", + name: "Force Refresh All Views and Blocks", + callback: () => { + this.index.touch(); + this.app.workspace.trigger("dataview:refresh-views"); + }, + }); + this.addCommand({ + id: "dataview-drop-cache", + name: "Drop All Cached File Metadata", + callback: () => { + this.index.reinitialize(); + }, }); // Run index initialization, which actually traverses the vault to index files. if (!this.app.workspace.layoutReady) { @@ -15732,7 +19775,7 @@ class DataviewPlugin extends obsidian.Plugin { } // Not required anymore, though holding onto it for backwards-compatibility. this.app.metadataCache.trigger("dataview:api-ready", this.api); - console.log(`Dataview: Version ${this.manifest.version} Loaded`); + console.log(`Dataview: version ${this.manifest.version} (requires obsidian ${this.manifest.minAppVersion})`); } updateRefreshSettings() { this.debouncedRefresh = obsidian.debounce(() => this.app.workspace.trigger("dataview:refresh-views"), this.settings.refreshInterval, true); @@ -15753,6 +19796,10 @@ class DataviewPlugin extends obsidian.Plugin { * a long-lived view object to the given component for life-cycle management. */ async dataview(source, el, component, sourcePath) { + if (isDataviewDisabled(sourcePath)) { + renderCodeBlock(el, source); + return; + } let maybeQuery = tryOrPropogate(() => parseQuery(source)); // In case of parse error, just render the error. if (!maybeQuery.successful) { @@ -15760,15 +19807,16 @@ class DataviewPlugin extends obsidian.Plugin { return; } let query = maybeQuery.value; + let init = { app: this.app, settings: this.settings, index: this.index, container: el }; switch (query.header.type) { case "task": - component.addChild(new DataviewTaskRenderer(query, el, this.index, sourcePath, this.app.vault, this.settings, this.app)); + component.addChild(createTaskView(init, query, sourcePath)); break; case "list": - component.addChild(new DataviewListRenderer(query, el, this.index, sourcePath, this.settings, this.app)); + component.addChild(createListView(init, query, sourcePath)); break; case "table": - component.addChild(new DataviewTableRenderer(query, el, this.index, sourcePath, this.settings, this.app)); + component.addChild(createTableView(init, query, sourcePath)); break; case "calendar": component.addChild(new DataviewCalendarRenderer(query, el, this.index, sourcePath, this.settings, this.app)); @@ -15777,21 +19825,31 @@ class DataviewPlugin extends obsidian.Plugin { } /** Generate a DataviewJS view running the given source in the given element. */ async dataviewjs(source, el, component, sourcePath) { + if (isDataviewDisabled(sourcePath)) { + renderCodeBlock(el, source, "javascript"); + return; + } component.addChild(new DataviewJSRenderer(source, el, this.app, this.index, sourcePath, this.settings, this.manifest.version)); } /** Render all dataview inline expressions in the given element. */ async dataviewInline(el, component, sourcePath) { + if (isDataviewDisabled(sourcePath)) + return; // Search for blocks inside this element; for each one, look for things of the form `= ...`. let codeblocks = el.querySelectorAll("code"); for (let index = 0; index < codeblocks.length; index++) { let codeblock = codeblocks.item(index); let text = codeblock.innerText.trim(); - if (text.startsWith(this.settings.inlineJsQueryPrefix)) { + if (this.settings.inlineJsQueryPrefix.length > 0 && text.startsWith(this.settings.inlineJsQueryPrefix)) { let code = text.substring(this.settings.inlineJsQueryPrefix.length).trim(); + if (code.length == 0) + continue; component.addChild(new DataviewInlineJSRenderer(code, el, codeblock, this.app, this.index, sourcePath, this.settings, this.manifest.version)); } - else if (text.startsWith(this.settings.inlineQueryPrefix)) { + else if (this.settings.inlineQueryPrefix.length > 0 && text.startsWith(this.settings.inlineQueryPrefix)) { let potentialField = text.substring(this.settings.inlineQueryPrefix.length).trim(); + if (potentialField.length == 0) + continue; let field = tryOrPropogate(() => parseField(potentialField)); if (!field.successful) { let errorBlock = el.createEl("div"); @@ -15810,13 +19868,20 @@ class DataviewPlugin extends obsidian.Plugin { this.updateRefreshSettings(); await this.saveData(this.settings); } - /** Call the given callback when the dataview API has initialized. */ + /** @deprecated Call the given callback when the dataview API has initialized. */ withApi(callback) { callback(this.api); } + /** + * Create an API element localized to the given path, with lifecycle management managed by the given component. + * The API will output results to the given HTML element. + */ + localApi(path, component, el) { + return new DataviewInlineApi(this.index, component, el, this.app, this.settings, this.manifest.version, path); + } } /** All of the dataview settings in a single, nice tab. */ -class DataviewSettingsTab extends obsidian.PluginSettingTab { +class GeneralSettingsTab extends obsidian.PluginSettingTab { constructor(app, plugin) { super(app, plugin); this.plugin = plugin; @@ -15849,14 +19914,22 @@ class DataviewSettingsTab extends obsidian.PluginSettingTab { .addText(text => text .setPlaceholder("=") .setValue(this.plugin.settings.inlineQueryPrefix) - .onChange(async (value) => await this.plugin.updateSettings({ inlineQueryPrefix: value }))); + .onChange(async (value) => { + if (value.length == 0) + return; + await this.plugin.updateSettings({ inlineQueryPrefix: value }); + })); new obsidian.Setting(this.containerEl) .setName("JavaScript Inline Query Prefix") .setDesc("The prefix to JavaScript inline queries (to mark them as DataviewJS queries). Defaults to '$='.") .addText(text => text .setPlaceholder("$=") .setValue(this.plugin.settings.inlineJsQueryPrefix) - .onChange(async (value) => await this.plugin.updateSettings({ inlineJsQueryPrefix: value }))); + .onChange(async (value) => { + if (value.length == 0) + return; + await this.plugin.updateSettings({ inlineJsQueryPrefix: value }); + })); this.containerEl.createEl("h2", { text: "View Settings" }); this.containerEl.createEl("h3", { text: "General" }); new obsidian.Setting(this.containerEl) @@ -15950,25 +20023,6 @@ class DataviewSettingsTab extends obsidian.PluginSettingTab { this.plugin.index.touch(); })); this.containerEl.createEl("h3", { text: "Task Settings" }); - new obsidian.Setting(this.containerEl) - .setName("Task Link Type") - .setDesc("'Start' and 'End' place a symbol link in their respective location; 'None' disables linking.") - .addDropdown(dropdown => dropdown - .addOption("start", "Start") - .addOption("end", "End") - .addOption("none", "None") - .setValue(this.plugin.settings.taskLinkLocation) - .onChange(async (value) => { - await this.plugin.updateSettings({ taskLinkLocation: value }); - this.plugin.index.touch(); - })); - new obsidian.Setting(this.containerEl) - .setName("Task Link Text") - .setDesc("Text used when linking from a task to its source note in the 'Start' and 'End' link types.") - .addText(text => text.setValue(this.plugin.settings.taskLinkText).onChange(async (value) => { - await this.plugin.updateSettings({ taskLinkText: value.trim() }); - this.plugin.index.touch(); - })); new obsidian.Setting(this.containerEl) .setName("Automatic Task Completion Tracking") .setDesc("If enabled, Dataview will automatically append tasks with their completion date when they are checked in Dataview views.") @@ -15983,370 +20037,91 @@ class DataviewSettingsTab extends obsidian.PluginSettingTab { })); } } -class DataviewRefreshableRenderer extends obsidian.MarkdownRenderChild { - constructor() { - super(...arguments); - this.maybeRefresh = () => { - // If the index revision has changed recently, then queue a reload. - if (this.lastReload != this.index.revision) { - // But only if we're mounted in the DOM and auto-refreshing is active - if (this.container.isShown() && this.settings.refreshEnabled) { - this.lastReload = this.index.revision; - this.render(); +const acceptNode = (node) => { + switch (node.nodeName) { + // skip code and math equations + case "CODE": + case "MJX-CONTAINER": + return NodeFilter.FILTER_REJECT; + case "#text": { + if (node.nodeValue && extractInlineFields(node.nodeValue).length > 0) { + return NodeFilter.FILTER_ACCEPT; + } + else + return NodeFilter.FILTER_REJECT; + } + default: + return NodeFilter.FILTER_SKIP; + } +}; +/** Replaces raw textual inline fields in text containers with pretty HTML equivalents. */ +async function replaceInlineFields(ctx, container, settings) { + const originFile = ctx.sourcePath; + const walker = document.createTreeWalker(container, NodeFilter.SHOW_ALL, { + acceptNode, + }); + let currentNode = walker.currentNode; + while (currentNode) { + // if being a text node, replace inline fields + if (currentNode.nodeType === 3) { + const text = currentNode; + // don't wait for new node to be inserted + (async () => { + let textNodes = [text]; + if (text.__PENDING__) { + // wait for prevous post processor to finish + await text.__PENDING__; + // rescan for new text nodes + textNodes = [...text.parentElement.childNodes].filter((n) => n instanceof Text); } - } - }; - } - onload() { - this.render(); - this.lastReload = this.index.revision; - // Refresh after index changes stop - this.registerEvent(this.app.workspace.on("dataview:refresh-views", this.maybeRefresh)); - // ...or when the DOM is shown (sidebar expands, tab selected, nodes scrolled into view) - this.register(this.container.onNodeInserted(this.maybeRefresh)); - } -} -/** Renders a list dataview for the given query. */ -class DataviewListRenderer extends DataviewRefreshableRenderer { - constructor(query, container, index, origin, settings, app) { - super(container); - this.query = query; - this.container = container; - this.index = index; - this.origin = origin; - this.settings = settings; - this.app = app; - } - async render() { - this.container.innerHTML = ""; - let maybeResult = await asyncTryOrPropogate(() => executeList(this.query, this.index, this.origin, this.settings)); - if (!maybeResult.successful) { - renderErrorPre(this.container, "Dataview: " + maybeResult.error); - return; + const pending = Promise.all(textNodes.map(insertInlineFieldsToText)); + // save promise to __PENDING__ to notify other async post processor + text.__PENDING__ = pending; + await pending; + delete text.__PENDING__; + })(); } - else if (maybeResult.value.data.length == 0 && this.settings.warnOnEmptyResult) { - renderErrorPre(this.container, "Dataview: Query returned 0 results."); - return; - } - let showId = this.query.header.showId; - let showValue = !!this.query.header.format; - let result = maybeResult.value; - let rendered = []; - for (let row of result.data) { - if (showValue && showId) { - let span = document.createElement("span"); - await renderValue(row.primary, span, this.origin, this, this.settings, false, "list"); - span.appendText(": "); - await renderValue(row.value || null, span, this.origin, this, this.settings, true, "list"); - rendered.push(span); - } - else if (showId) { - rendered.push(row.primary); - } - else if (showValue) { - rendered.push(row.value || null); - } - } - await renderList(this.container, rendered, this, this.origin, this.settings); + currentNode = walker.nextNode(); } -} -class DataviewTableRenderer extends DataviewRefreshableRenderer { - constructor(query, container, index, origin, settings, app) { - super(container); - this.query = query; - this.container = container; - this.index = index; - this.origin = origin; - this.settings = settings; - this.app = app; - } - async render() { - this.container.innerHTML = ""; - let maybeResult = await asyncTryOrPropogate(() => executeTable(this.query, this.index, this.origin, this.settings)); - if (!maybeResult.successful) { - renderErrorPre(this.container, "Dataview: " + maybeResult.error); - return; - } - let result = maybeResult.value; - if (this.query.header.showId) { - let dataWithNames = []; - for (let entry of result.data) { - dataWithNames.push([entry.id].concat(entry.values)); - } - let name = result.idMeaning.type === "group" - ? this.settings.tableGroupColumnName - : this.settings.tableIdColumnName; - await renderTable(this.container, [name].concat(result.names), dataWithNames, this, this.origin, this.settings); - } - else { - await renderTable(this.container, result.names, result.data.map(v => v.values), this, this.origin, this.settings); - } - // Render after the empty table, so the table header still renders. - if (result.data.length == 0 && this.settings.warnOnEmptyResult) { - renderErrorPre(this.container, "Dataview: Query returned 0 results."); - } - } -} -class DataviewCalendarRenderer extends DataviewRefreshableRenderer { - constructor(query, container, index, origin, settings, app) { - super(container); - this.query = query; - this.container = container; - this.index = index; - this.origin = origin; - this.settings = settings; - this.app = app; - } - async render() { + async function insertInlineFieldsToText(text) { var _a; - this.container.innerHTML = ""; - let maybeResult = await asyncTryOrPropogate(() => executeCalendar(this.query, this.index, this.origin, this.settings)); - if (!maybeResult.successful) { - renderErrorPre(this.container, "Dataview: " + maybeResult.error); - return; - } - else if (maybeResult.value.data.length == 0 && this.settings.warnOnEmptyResult) { - renderErrorPre(this.container, "Dataview: Query returned 0 results."); - return; - } - let dateMap = new Map(); - for (let data of maybeResult.value.data) { - const dot = { - color: "default", - className: "note", - isFilled: true, - link: data.link, - }; - const d = data.date.toFormat("yyyyLLdd"); - if (!dateMap.has(d)) { - dateMap.set(d, [dot]); + const inlineFields = extractInlineFields(text.wholeText); + for (let i = inlineFields.length - 1; i >= 0; i--) { + const field = inlineFields[i]; + let component = new obsidian.MarkdownRenderChild(container); + ctx.addChild(component); + let renderContainer = document.createElement("span"); + renderContainer.addClasses(["dataview", "inline-field"]); + // Block inline fields render the key, parenthesis ones do not. + if (field.wrapping == "[") { + renderContainer.createSpan({ + text: field.key, + cls: ["dataview", "inline-field-key"], + attr: { + "data-dv-key": field.key, + "data-dv-norm-key": canonicalizeVarName(field.key), + }, + }); + let valueContainer = renderContainer.createSpan({ cls: ["dataview", "inline-field-value"] }); + await renderValue(parseInlineValue(field.value), valueContainer, originFile, component, settings, false); } else { - (_a = dateMap.get(d)) === null || _a === void 0 ? void 0 : _a.push(dot); + let valueContainer = renderContainer.createSpan({ cls: ["dataview", "inline-field-standalone-value"] }); + await renderValue(parseInlineValue(field.value), valueContainer, originFile, component, settings, false); } - } - const querySource = { - getDailyMetadata: async (date) => { - return { - dots: dateMap.get(date.format("YYYYMMDD")) || [], - }; - }, - }; - const sources = [querySource]; - const renderer = this; - this.calendar = new Calendar({ - // eslint-disable-next-line @typescript-eslint/no-explicit-any - target: this.container, - props: { - onHoverDay(date, targetEl) { - const vals = dateMap.get(date.format("YYYYMMDD")); - if (!vals || vals.length == 0) { - return; - } - if ((vals === null || vals === void 0 ? void 0 : vals.length) == 0) { - return; - } - renderer.app.workspace.trigger("link-hover", {}, targetEl, vals[0].link.path, vals[0].link.path); - }, - onClickDay: async (date) => { - const vals = dateMap.get(date.format("YYYYMMDD")); - if (!vals || vals.length == 0) { - return; - } - if ((vals === null || vals === void 0 ? void 0 : vals.length) == 0) { - return; - } - const file = renderer.app.metadataCache.getFirstLinkpathDest(vals[0].link.path, ""); - if (file == null) { - return; - } - const mode = this.app.vault.getConfig("defaultViewMode"); - const leaf = renderer.app.workspace.getUnpinnedLeaf(); - await leaf.openFile(file, { active: true, mode }); - }, - showWeekNums: false, - sources, - }, - }); - } - onClose() { - if (this.calendar) { - this.calendar.$destroy(); - } - return Promise.resolve(); - } -} -class DataviewTaskRenderer extends DataviewRefreshableRenderer { - constructor(query, container, index, origin, vault, settings, app) { - super(container); - this.query = query; - this.container = container; - this.index = index; - this.origin = origin; - this.vault = vault; - this.settings = settings; - this.app = app; - } - async render() { - var _a; - if (this.taskBindings) - this.removeChild(this.taskBindings); - this.container.innerHTML = ""; - let result = await asyncTryOrPropogate(() => executeTask(this.query, this.origin, this.index, this.settings)); - if (!result.successful) { - renderErrorPre(this.container, "Dataview: " + result.error); - } - else { - // If there is no grouping going on, group by the file path by default. - let tasks = result.value.tasks; - if (tasks.type == "base") { - let byFile = new Map(); - for (let task of tasks.value) { - if (!byFile.has(task.path)) - byFile.set(task.path, []); - (_a = byFile.get(task.path)) === null || _a === void 0 ? void 0 : _a.push(task); - } - tasks = Groupings.grouped(Array.from(byFile.entries()).map(([path, tasks]) => { - return { key: Link.file(path), value: Groupings.base(tasks) }; - })); - } - this.taskBindings = new obsidian.Component(); - this.addChild(this.taskBindings); - await renderTasks(this.container, tasks, this.origin, this.taskBindings, this.vault, this.settings); + const toReplace = text.splitText(field.start); + (_a = toReplace.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(renderContainer, toReplace); + toReplace.textContent = toReplace.wholeText.substring(field.end - field.start); } } } -/** Renders inline query results. */ -class DataviewInlineRenderer extends DataviewRefreshableRenderer { - constructor(field, fieldText, container, target, index, origin, settings, app) { - super(container); - this.field = field; - this.fieldText = fieldText; - this.container = container; - this.target = target; - this.index = index; - this.origin = origin; - this.settings = settings; - this.app = app; - } - async render() { - var _a; - (_a = this.errorbox) === null || _a === void 0 ? void 0 : _a.remove(); - let result = tryOrPropogate(() => executeInline(this.field, this.origin, this.index, this.settings)); - if (!result.successful) { - this.errorbox = this.container.createEl("div"); - renderErrorPre(this.errorbox, "Dataview (for inline query '" + this.fieldText + "'): " + result.error); - } - else { - let temp = document.createElement("span"); - await renderValue(result.value, temp, this.origin, this, this.settings, false); - this.target.replaceWith(temp); - } - } -} -class DataviewJSRenderer extends DataviewRefreshableRenderer { - constructor(script, container, app, index, origin, settings, verNum) { - super(container); - this.script = script; - this.container = container; - this.app = app; - this.index = index; - this.origin = origin; - this.settings = settings; - this.verNum = verNum; - } - async render() { - this.container.innerHTML = ""; - if (!this.settings.enableDataviewJs) { - this.containerEl.innerHTML = ""; - renderErrorPre(this.container, "Dataview JS queries are disabled. You can enable them in the Dataview settings."); - return; - } - // Assume that the code is javascript, and try to eval it. - try { - await asyncEvalInContext(DataviewJSRenderer.PREAMBLE + this.script, makeApiContext(this.index, this, this.app, this.settings, this.verNum, this.container, this.origin)); - } - catch (e) { - this.containerEl.innerHTML = ""; - renderErrorPre(this.container, "Evaluation Error: " + e.stack); - } - } -} -DataviewJSRenderer.PREAMBLE = "const dataview = this;const dv = this;"; -/** Inline JS renderer accessible using '=$' by default. */ -class DataviewInlineJSRenderer extends DataviewRefreshableRenderer { - constructor(script, container, target, app, index, origin, settings, verNum) { - super(container); - this.script = script; - this.container = container; - this.target = target; - this.app = app; - this.index = index; - this.origin = origin; - this.settings = settings; - this.verNum = verNum; - } - async render() { - var _a; - (_a = this.errorbox) === null || _a === void 0 ? void 0 : _a.remove(); - if (!this.settings.enableDataviewJs || !this.settings.enableInlineDataviewJs) { - let temp = document.createElement("span"); - temp.innerText = "(disabled; enable in settings)"; - this.target.replaceWith(temp); - this.target = temp; - return; - } - // Assume that the code is javascript, and try to eval it. - try { - let temp = document.createElement("span"); - let result = await asyncEvalInContext(DataviewInlineJSRenderer.PREAMBLE + this.script, makeApiContext(this.index, this, this.app, this.settings, this.verNum, temp, this.origin)); - this.target.replaceWith(temp); - this.target = temp; - if (result === undefined) - return; - renderValue(result, temp, this.origin, this, this.settings, false); - } - catch (e) { - this.errorbox = this.container.createEl("div"); - renderErrorPre(this.errorbox, "Dataview (for inline JS query '" + this.script + "'): " + e); - } - } -} -DataviewInlineJSRenderer.PREAMBLE = "const dataview = this;const dv=this;"; -/** Replaces raw textual inline fields in text containers with pretty HTML equivalents. */ -async function replaceInlineFields(ctx, container, originFile, settings) { - let inlineFields = extractInlineFields(container.innerHTML); - if (inlineFields.length == 0) - return undefined; - let component = new obsidian.MarkdownRenderChild(container); - ctx.addChild(component); - let result = container.innerHTML; - for (let x = inlineFields.length - 1; x >= 0; x--) { - let field = inlineFields[x]; - let renderContainer = document.createElement("span"); - renderContainer.addClasses(["dataview", "inline-field"]); - // Block inline fields render the key, parenthesis ones do not. - if (field.wrapping == "[") { - renderContainer.createSpan({ - text: field.key, - cls: ["dataview", "inline-field-key"], - attr: { - "data-dv-key": field.key, - "data-dv-norm-key": canonicalizeVarName(field.key), - }, - }); - let valueContainer = renderContainer.createSpan({ cls: ["dataview", "inline-field-value"] }); - await renderValue(parseInlineValue(field.value), valueContainer, originFile, component, settings, false); - } - else { - let valueContainer = renderContainer.createSpan({ cls: ["dataview", "inline-field-standalone-value"] }); - await renderValue(parseInlineValue(field.value), valueContainer, originFile, component, settings, false); - } - result = result.slice(0, field.start) + renderContainer.outerHTML + result.slice(field.end); - } - container.innerHTML = result; - return component; +/** Determines if source-path has a `?no-dataview` annotation that disables dataview. */ +function isDataviewDisabled(sourcePath) { + let questionLocation = sourcePath.lastIndexOf("?"); + if (questionLocation == -1) + return false; + return sourcePath.substring(questionLocation).contains("no-dataview"); } module.exports = DataviewPlugin; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL29ic2lkaWFuLWNhbGVuZGFyLXVpL2Rpc3QvaW5kZXgubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2x1eG9uL2J1aWxkL2Nqcy1icm93c2VyL2x1eG9uLmpzIiwiLi4vc3JjL3NldHRpbmdzLnRzIiwiLi4vc3JjL2FwaS9yZXN1bHQudHMiLCIuLi9ub2RlX21vZHVsZXMvcGFyc2ltbW9uL2J1aWxkL3BhcnNpbW1vbi51bWQubWluLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Vtb2ppLXJlZ2V4L2luZGV4LmpzIiwiLi4vc3JjL3V0aWwvbm9ybWFsaXplLnRzIiwiLi4vc3JjL2RhdGEvdmFsdWUudHMiLCIuLi9zcmMvYXBpL2RhdGEtYXJyYXkudHMiLCIuLi9zcmMvdXRpbC9sb2NhbGUudHMiLCIuLi9zcmMvdWkvcmVuZGVyLnRzIiwiLi4vc3JjL2V4cHJlc3Npb24vZmllbGQudHMiLCIuLi9zcmMvZGF0YS9zb3VyY2UudHMiLCIuLi9zcmMvZXhwcmVzc2lvbi9wYXJzZS50cyIsIi4uL3NyYy9kYXRhL3BhcnNlL2lubGluZS1maWVsZC50cyIsIi4uL3NyYy9kYXRhL21ldGFkYXRhLnRzIiwiLi4vc3JjL2RhdGEvcGFyc2UvbWFya2Rvd24tZmlsZS50cyIsIi4uL25vZGVfbW9kdWxlcy9wYXBhcGFyc2UvcGFwYXBhcnNlLm1pbi5qcyIsIi4uL3NyYy9kYXRhL3BhcnNlL2Nzdi50cyIsIi4uL3NyYy9kYXRhL3RyYW5zZmVyYWJsZS50cyIsIi4uL3NyYy9kYXRhL2ltcG9ydC9pbXBvcnQtbWFuYWdlci50cyIsIi4uL3NyYy9kYXRhL2luZGV4LnRzIiwiLi4vc3JjL3VpL3Rhc2tzLnRzIiwiLi4vc3JjL3F1ZXJ5L3F1ZXJ5LnRzIiwiLi4vc3JjL3F1ZXJ5L3BhcnNlLnRzIiwiLi4vc3JjL2V4cHJlc3Npb24vYmluYXJ5b3AudHMiLCIuLi9zcmMvZXhwcmVzc2lvbi9mdW5jdGlvbnMudHMiLCIuLi9zcmMvZXhwcmVzc2lvbi9jb250ZXh0LnRzIiwiLi4vc3JjL2RhdGEvcmVzb2x2ZXIudHMiLCIuLi9zcmMvcXVlcnkvZW5naW5lLnRzIiwiLi4vbm9kZV9tb2R1bGVzL2NvbXBhcmUtdmVyc2lvbnMvaW5kZXgubWpzIiwiLi4vc3JjL2FwaS9wbHVnaW4tYXBpLnRzIiwiLi4vc3JjL2FwaS9pbmxpbmUtYXBpLnRzIiwiLi4vc3JjL21haW4udHMiXSwic291cmNlc0NvbnRlbnQiOm51bGwsIm5hbWVzIjpbInRoaXMiLCJEYXRlVGltZSIsIlAuYWx0IiwiUC5yZWdleCIsIlAud2hpdGVzcGFjZSIsIlAuYW55IiwiRHVyYXRpb24iLCJNYXJrZG93blJlbmRlcmVyIiwiUC5zZXFNYXAiLCJQLnNlcSIsIlAub3B0V2hpdGVzcGFjZSIsIlAuY3VzdG9tIiwiUC5jcmVhdGVMYW5ndWFnZSIsIlAucmVnZXhwIiwiUC5zdHJpbmciLCJQLm5vbmVPZiIsIlAuc3VjY2VlZCIsIlAuZmFpbCIsImdldEFsbFRhZ3MiLCJwYXJzZUZyb250TWF0dGVyVGFncyIsInBhcnNlRnJvbnRNYXR0ZXJBbGlhc2VzIiwiUGFwYS5wYXJzZSIsIkNvbXBvbmVudCIsIkRhdGF2aWV3SW1wb3J0V29ya2VyIiwiVEZpbGUiLCJURm9sZGVyIiwiUC5zZXBCeSIsIlBsdWdpbiIsImRlYm91bmNlIiwiUGx1Z2luU2V0dGluZ1RhYiIsIlNldHRpbmciLCJNYXJrZG93blJlbmRlckNoaWxkIiwiVGFza3MucmVuZGVyVGFza3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxTQUFTLElBQUksR0FBRyxHQUFHO0FBQ25CLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDMUI7QUFDQSxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksR0FBRztBQUN2QixRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFDRCxTQUFT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QUNELFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDbEMsRUFBRSxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9DO0FBQ0EsRUFBRSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDdEIsSUFBSSxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pDLEdBQUcsTUFBTTtBQUNULElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDM0IsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDeEc7QUFDQSxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUU7QUFDdkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxj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LENBQUM7QUFDeEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDekgsSUFBSSxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBRyxRQUFRLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDdEUsSUFBSSxJQUFJLFlBQVksR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDO0FBQ3BDLFFBQVEsS0FBSyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBUSxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtBQUNBLElBQUksSUFBSSxDQUFDLEVBQUU7QUFDWCxNQUFNLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxXQUFXLEdBQUc7QUFDdkIsRUFBRSxLQUFLLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFB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QUFFLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNoRCxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdGLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDaEQsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUM5QyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUMxRyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2hELElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEQsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQztBQUNyRDtBQUNBLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyRSxJQUFJLElBQUksQ0FBQyxLQUFLLEdB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QyxPQUFPLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDcEMsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ25ELEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsQ0FBQyxLQUFLLEVBQUU7QUFDbkMsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUs7QUFDNUMsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUs7QUFDMUIsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN2QjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDbkMsSUFBSSxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLE9BQU8sR0FBRztBQUN0QyxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztBQUNyQjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDakM7QUFDQSxJQUFJLEtBQUssSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO0FBQ2xHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxH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QyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMvRSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDN0MsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEQsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFO0FBQ2pELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDcEMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQzdDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDcEMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQzNDLElBQUksSUFBSSxDQUFDLElBQUksQ0FB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SSxDQUFDO0FBQ3BCLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztBQUMxQixFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDcEIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwQixFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDcEIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwQixFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDcEIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwQixFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDdkIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwQixFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBQ0YsSUFBSSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUMxQixFQUFFLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEM7QUFDQSxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FB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LENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztBQUNsRixNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDL0IsSUFBSSxJQUFJLEVBQUUsSUFBSTtBQUNkLElBQUksS0FBSyxFQUFFLEtBQUs7QUFDaEIsSUFBSSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUMxRyxHQUFHLENBQUM7QUFDSixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO0FBQ3hDLElBQUksS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQzVDLElBQUksUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0FBQ3JELElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQy9DLElBQUksS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMs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QUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZILEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQ2pELElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDekIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3ZILEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLGNBQWMsR0FBRyxTQUFTLGNBQWMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFO0FBQ3BFLElBQUksSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDL0IsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDekIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMs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QUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEtBQUssR0FBRyxTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDdEMsSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN6QixNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7QUFDaEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN2QixNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsUUFBUSxHQUFHLFNBQVMsUUFBUSxHQUFHO0FBQ3hDLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7QUFDakQsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVMsT0FBTyxHQUFHO0FBQ3RDLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsUUFBUSxHQUFHLFNBQVMsUUFBUSxHQUFHO0FBQ3hDLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxTQUFTLFNBQVMsR0FBRztBQUMxQyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sR0FB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QVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFtRCxlQUFlLENBQUMsR0FBb0gsQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUNBLGNBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFjLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU0sV0FBVyxFQUFFLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0ZBQStGLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLDJFQUEyRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsMERBQTBELENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsMkNBQTJDLENBQUMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUNBQXFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxNQUFNLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnSUFBZ0ksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFD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RSxDQUFDO0lBQ3hDLEVBQUUsRUFBRUEsVUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNyQyxHQUFHLEVBQUVBLFVBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDdEMsQ0FBQyxFQUFFQSxVQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBRXBDLEdBQUcsRUFBRUEsVUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNyQyxJQUFJLEVBQUVBLFVBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDdEMsQ0FBQyxFQUFFQSxVQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBRW5DLElBQUksRUFBRUEsVUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN2QyxLQUFLLEVBQUVBLFVBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDeEMsRUFBRSxFQUFFQSxVQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3JDLEdBQUcsRUFBRUEsVUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN0QyxDQUFDLEVBQUVBLFVBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFFcEMsTUFBTSxFQUFFQSxVQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzNDLE9BQU8sRUFBRUEsVUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUM1QyxHQUFHLEVBQUVBLFVBQVEs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QUFDLENBQUMsQ0FBQyxDQUFDLENBQXlHLGVBQWUsQ0FBQyxHQUFhLENBQUMsQ0FBQ0QsY0FBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQWMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLFlBQVksTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFNLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtEQUFrRCxDQUFDLENBQUMsQ0FBQyxrTkFBa04sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyw0REFBNEQsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxPQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsNkNBQTZDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLFlBQVksTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMs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LENBQUM7U0FDL0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvQixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDbEcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssaUJBQUEsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3pDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksTUFBTSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssaUJBQUEsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNGLEtBQUssRUFBRSxDQUFDO0lBRUEsb0JBQUcsR0FBaUIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDO1NBQ3RELElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDL0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMvQixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENB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QUFDO1NBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLElBQUksQ0FBQztTQUNsQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUM7U0FDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDO1NBQ2xDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDcEIsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdkIsS0FBSyxFQUFFLENBQUM7SUFFQSx5QkFBUSxHQUFHLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQztTQUNqRCxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDdEQsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNwQixLQUFLLEVBQUUsQ0FBQztJQUVBLHlCQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsVUFBVSxDQUFDO1NBQ2xELElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN0RCxLQUFLLEVBQUUsQ0FBQztJQUVBLHVCQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDO1NBQzlDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxD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QyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyRixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdELEtBQUssRUFBRSxDQUFDO0lBRUEsb0JBQUcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUM7U0FDeEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hELElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlELEtBQUssRUFBRSxDQUFDO0lBRUEscUJBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUM7U0FDekMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEQsSUFB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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL2x1eG9uL2J1aWxkL2Nqcy1icm93c2VyL2x1eG9uLmpzIiwiLi4vc3JjL3NldHRpbmdzLnRzIiwiLi4vc3JjL2FwaS9yZXN1bHQudHMiLCIuLi9ub2RlX21vZHVsZXMvcGFyc2ltbW9uL2J1aWxkL3BhcnNpbW1vbi51bWQubWluLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Vtb2ppLXJlZ2V4L2luZGV4LmpzIiwiLi4vc3JjL3V0aWwvbm9ybWFsaXplLnRzIiwiLi4vc3JjL2RhdGEtbW9kZWwvdmFsdWUudHMiLCIuLi9zcmMvYXBpL2RhdGEtYXJyYXkudHMiLCIuLi9zcmMvdXRpbC9sb2NhbGUudHMiLCIuLi9zcmMvdWkvcmVuZGVyLnRzIiwiLi4vbm9kZV9tb2R1bGVzL3BhcGFwYXJzZS9wYXBhcGFyc2UubWluLmpzIiwiLi4vc3JjL2V4cHJlc3Npb24vZmllbGQudHMiLCIuLi9zcmMvZGF0YS1pbmRleC9zb3VyY2UudHMiLCIuLi9zcmMvZXhwcmVzc2lvbi9wYXJzZS50cyIsIi4uL3NyYy9kYXRhLWltcG9ydC9pbmxpbmUtZmllbGQudHMiLCIuLi9zcmMvZGF0YS1tb2RlbC9tYXJrZG93bi50cyIsIi4uL3NyYy9kYXRhLWltcG9ydC9tYXJrZG93bi1maWxlLnRzIiwiLi4vc3JjL2RhdGEtaW1wb3J0L2Nzdi50cyIsIi4uL3NyYy9kYXRhLW1vZGVsL3RyYW5zZmVyYWJsZS50cyIsIi4uL25vZGVfbW9kdWxlcy9sb2NhbGZvcmFnZS9kaXN0L2xvY2FsZm9yYWdlLmpzIiwiLi4vc3JjL2RhdGEtaW1wb3J0L3BlcnNpc3Rlci50cyIsIi4uL3NyYy9kYXRhLWltcG9ydC93ZWItd29ya2VyL2ltcG9ydC1tYW5hZ2VyLnRzIiwiLi4vc3JjL2RhdGEtaW5kZXgvaW5kZXgudHMiLCIuLi9zcmMvcXVlcnkvcXVlcnkudHMiLCIuLi9zcmMvcXVlcnkvcGFyc2UudHMiLCIuLi9zcmMvZGF0YS1pbmRleC9yZXNvbHZlci50cyIsIi4uL3NyYy9leHByZXNzaW9uL2Z1bmN0aW9ucy50cyIsIi4uL3NyYy9leHByZXNzaW9uL2JpbmFyeW9wLnRzIiwiLi4vc3JjL2V4cHJlc3Npb24vY29udGV4dC50cyIsIi4uL3NyYy9xdWVyeS9lbmdpbmUudHMiLCIuLi9ub2RlX21vZHVsZXMvY29tcGFyZS12ZXJzaW9ucy9pbmRleC5tanMiLCIuLi9ub2RlX21vZHVsZXMvcHJlYWN0L2Rpc3QvcHJlYWN0Lm1vZHVsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tb2R1bGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tb2R1bGUuanMiLCIuLi9zcmMvdXRpbC9tZWRpYS50cyIsIi4uL3NyYy91aS9tYXJrZG93bi50c3giLCIuLi9zcmMvdWkvdmlld3MvdGFzay12aWV3LnRzeCIsIi4uL3NyYy91aS92aWV3cy9saXN0LXZpZXcudHN4IiwiLi4vc3JjL3VpL3ZpZXdzL3RhYmxlLXZpZXcudHN4IiwiLi4vc3JjL2FwaS9wbHVnaW4tYXBpLnRzIiwiLi4vbm9kZV9tb2R1bGVzL29ic2lkaWFuLWNhbGVuZGFyLXVpL2Rpc3QvaW5kZXgubWpzIiwiLi4vc3JjL3VpL3JlZnJlc2hhYmxlLXZpZXcudHMiLCIuLi9zcmMvdWkvdmlld3MvY2FsZW5kYXItdmlldy50cyIsIi4uL3NyYy91aS92aWV3cy9pbmxpbmUtdmlldy50cyIsIi4uL3NyYy9hcGkvaW5saW5lLWFwaS50cyIsIi4uL3NyYy91aS92aWV3cy9qcy12aWV3LnRzIiwiLi4vc3JjL21haW4udHMiXSwic291cmNlc0NvbnRlbnQiOm51bGwsIm5hbWVzIjpbIm4iLCJzIiwibCIsInRoaXMiLCJEYXRlVGltZSIsIlAuYWx0IiwiUC5yZWdleCIsIlAud2hpdGVzcGFjZSIsIlAuYW55IiwiRHVyYXRpb24iLCJNYXJrZG93blJlbmRlcmVyIiwiUC5zZXFNYXAiLCJQLnNlcSIsIlAub3B0V2hpdGVzcGFjZSIsIlAuY3VzdG9tIiwiUC5jcmVhdGVMYW5ndWFnZSIsIlAucmVnZXhwIiwiUC5zdHJpbmciLCJQLm5vbmVPZiIsIlAuc3VjY2VlZCIsIlAuZmFpbCIsIkxpc3RJdGVtIiwiUGFwYS5wYXJzZSIsInJlcXVpcmUiLCJnbG9iYWwiLCJDb21wb25lbnQiLCJEYXRhdmlld0ltcG9ydFdvcmtlciIsIlRGaWxlIiwiVEZvbGRlciIsIlAuc2VwQnkiLCJ1IiwidCIsIm8iLCJyIiwiZiIsImUiLCJjIiwiYSIsImgiLCJ2IiwieSIsInAiLCJkIiwiXyIsImsiLCJiIiwibSIsImciLCJqIiwieiIsInciLCJ4IiwiUCIsIk4iLCJNIiwiQSIsIkMiLCJIIiwiJCIsIlQiLCJJIiwiTyIsIkwiLCJTIiwicSIsIkIiLCJEIiwiRiIsImkiLCJjcmVhdGVDb250ZXh0IiwidXNlUmVmIiwidXNlQ29udGV4dCIsInVzZUVmZmVjdCIsIkZyYWdtZW50IiwidXNlU3RhdGUiLCJNYXJrZG93blJlbmRlckNoaWxkIiwicmVuZGVyIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsIlBsdWdpbiIsImRlYm91bmNlIiwiUGx1Z2luU2V0dGluZ1RhYiIsIlNldHRpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsU0FBUyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzFDLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsSUFBSSxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzNELElBQUksVUFBVSxD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VCxJQUFJLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLEdBQUc7QUFDSCxDQUFDO0FBQ0QsU0FBUyxXQUFXLENBQUMsUUFBUSxFQUFFO0FBQy9CO0FBQ0EsRUFBRSxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLEtBQUssSUFBSSxJQUFJLFFBQVEsS0FBSyxFQUFFLEVBQUU7QUFDckUsSUFBSSxPQUFPLFNBQVMsQ0FBQztBQUNyQixHQUFHLE1BQU07QUFDVCxJQUFJLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQy9DLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSCxDQUFDO0FBQ0QsU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDN0MsRUFBRSxJQUFJLFVBQVUsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUM3QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDdkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7QUFDbkMsTUFBTSxPQUFPLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNyRCxFQUFFLE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0MsQ0FBQztBQUNEO0FBQ0EsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFO0FBQzFCLEVBQUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFDRCxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUU7QUFDMUIsRUFBRSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLENBQUM7QUFDRCxTQUFTLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQztBQUM1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUMvQztBQUNBLEVBQUUsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQ3RCLElBQUksT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN6QyxHQUFHLE1BQU07QUFDVCxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFO0FBQzNCLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hHO0FBQ0EsRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFO0FBQ3ZDLElBQUksQ0FBQyxHQUFHLElBQUksSUFB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LENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzRCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDMUMsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMxRixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxPQUFPLEdBQUc7QUFDdEMsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNqRCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxRQUFRLEVBQUU7QUFDOUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNwQyxJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDN0IsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLENBQUMsUUFBUSxFQUFFO0FBQ2hELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDcEMsSUFBSSxPQUFP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LEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUMzQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ3BDLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xELEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRTtBQUN6QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUN6QyxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUU7QUFDckQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFD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T0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDL0IsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLEdBQUc7QUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLFNBQVMsQ0FBQztBQUN4QyxJQUFJLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3BFLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsU0FBUyxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQ3RDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFDeEMsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6RCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsU0FBUyxHQUFHLFNBQVMsU0FBUyxHQUFHO0FBQzFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFDeEMsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekQsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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Q3ZCLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwQixFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDcEIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3BCLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztBQUMxQixFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDcEIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwQixFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDcEIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwQixFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDcEIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwQixFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDdkIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNwQixFQUFFLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBQ0YsSUFBSSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FB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NUIsSUFBSSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0I7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDOUIsTUFBTSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakMsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFDRDtBQUNBLFNBQVMsUUFBUSxDQUFDLE9BQU8sRUFBRTtBQUMzQixFQUFFLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDZixNQUFNLElBQUksQ0FBQztBQUNYO0FBQ0EsRUFBRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0FBQzdFLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVELEdBQUcsTUFBTTtBQUNULElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFNLFdBQVcsRUFBRSxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLCtGQUErRixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQywyRUFBMkUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLDBEQUEwRCxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLDJDQUEyQyxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU0sMEJBQTBCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksTUFBTSxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0lBQWdJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUVBQW1FLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsMENBQTBDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxD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QUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLFlBQVksTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsY0FBYyxZQUFZLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsWUFBWSxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU0sUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBQyxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDLENBQUMsa05BQWtOLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsNERBQTRELENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE9BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUUsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLDZDQUE2QyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxZQUFZLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENB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SUFDeEMsRUFBRSxFQUFFQSxVQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3JDLEdBQUcsRUFBRUEsVUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN0QyxDQUFDLEVBQUVBLFVBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFFcEMsR0FBRyxFQUFFQSxVQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3JDLElBQUksRUFBRUEsVUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN0QyxDQUFDLEVBQUVBLFVBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFFbkMsSUFBSSxFQUFFQSxVQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3ZDLEtBQUssRUFBRUEsVUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN4QyxFQUFFLEVBQUVBLFVBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDckMsR0FBRyxFQUFFQSxVQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3RDLENBQUMsRUFBRUEsVUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUVwQyxNQUFNLEVBQUVBLFVBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDM0MsT0FBTyxFQUFFQSxVQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzVDLEdBQUcsRUFBRUEsVUFBUSxDQUFDLFVB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Q0FBQSxFQUFBLEdBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQUksSUFBQSxJQUFBLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQUksSUFBQSxJQUFBLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBRyxJQUFBLElBQUEsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxDQUFDLENBQUMsQ0FBQztLQUNuRztJQUVNLEdBQUcsR0FBQTs7QUFDTixRQUFBLE9BQU8sQ0FBQSxFQUFBLElBQUMsQ0FBQSxFQUFBLEdBQUEsQ0FBQSxFQUFBLEdBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQUksSUFBQSxJQUFBLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQUksSUFBQSxJQUFBLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxFQUFBLEdBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBRyxJQUFBLElBQUEsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxDQUFDLENBQUMsQ0FBQztLQUNuRztJQUVNLFNBQVMsR0FBQTs7UUFDWixPQUFPLENBQUEsRUFBQSxJQUFDLENBQUEsRUFBQSxHQUFBLENBQUEsRUFBQSxHQUFBLE1BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLG1DQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsbUNBQzdCLElBQUksQ0FBQyxNQUFNLENB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LEVBQUUsR0FBRyxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqRixJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUM7U0FDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sSUFBSSxDQUFDO1NBQ2xDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQztTQUNsQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QixTQUFBLEtBQUssRUFBRSxDQUFDOztBQUdiLElBQUEsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBYSxFQUFFLEtBQWMsS0FDekQsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQzs7QUFHakQsSUFBQSxnQkFBQSxDQUFBLEtBQUssR0FBaUIsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDO0FBQzFELFNBQUEsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxLQUFLLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDM0UsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEtBQUssU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbkcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUM7U0FDN0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7U0FDN0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDO1NBQ2xDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLElBQUksQ0FBQztTQUNsQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDbEMsU0FBQSxLQUFLLEVBQUUsQ0FBQztBQUVBLElBQUEsZ0JBQUEsQ0FBQSxVQUFVLEdBQWlCLElBQUksZUFBZSxDQUFDLFlBQVksQ0FBQztBQUNwRSxTQUFBLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsS0FBSyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3JFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sSUFBSSxDQUFDO1NBQzdCLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDO1NBQzdCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEIsU0FBQSxLQUFLLEVBQUUsQ0FBQztBQUVBLElBQUEsZ0JBQUEsQ0FBQSxRQUFRLEdBQWlCLElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQztBQUNoRSxTQUFBLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sS0FBSyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQy9ELElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sSUFBSSxDQUFDO1NBQzdCLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDO1NBQzdCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEIsU0FBQSxL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QUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQztTQUM3QixJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUM7U0FDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sSUFBSSxDQUFDO1NBQ2xDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQztTQUNsQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFNBQUEsS0FBSyxFQUFFLENBQUM7QUFFQSxJQUFBLGdCQUFBLENBQUEsUUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQztBQUNqRCxTQUFBLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN0RCxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFNBQUEsS0FBSyxFQUFFLENBQUM7QUFFQSxJQUFBLGdCQUFBLENBQUEsUUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQztBQUNsRCxTQUFBLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxTQUFBLEtBQUssRUFBRSxDQUFDO0FBRUEsSUFBQSxnQkFBQSxDQUFBLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxRQUFRLENB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QyxFQUFFLEdBQUcsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RGLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsU0FBQSxLQUFLLEVBQUUsQ0FBQztBQUVBLElBQUEsZ0JBQUEsQ0FBQSxJQUFJLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDO1NBQ3pDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELFNBQUEsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEYsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELFNBQUEsS0FBSyxFQUFFLENBQUM7QUFFQSxJQUFBLGdCQUFBLENBQUEsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQztBQUM5QyxTQUFBLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2RixJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLElBQUksQ0FBQztBQUM3QixTQUFBLEtBQUssRUFBRSxDQUFDO0FBRUEsSUFBQSxnQkFBQSxDQUFBLEdBQUcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUM7QUFDeEMsU0FBQSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLElBQUksQ0FBQztBQUM3QixTQUFBLEtBQUssRUFBRSxDQUFDO0FBRUEsSUFBQSxnQkFBQSxDQUFBLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUM7U0FDaEQsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7QUFDdkUsU0FBQSxLQUFLLEVBQUUsQ0FBQzs7QUFHQSxJQUFBLGdCQUFBLENBQUEsSUFBSSxHQUFpQixJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUM7QUFDeEQsU0FBQSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksSUFBRzs7QUFBQyxRQUFBLFFBQUM7QUFDbkIsWUFBQSxPQUFPLEVBQUUsQ0FBQSxFQUFBLEdBQUEsSUFBSSxDQUFDLE9BQU8sbUNBQUksSUFBSTtZQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2YsWUFBQSxPQUFPLEVBQUUsQ0FBQSxFQUFBLEdBQUEsSUFBSSxDQUFDLE9BQU8sbUNBQUksSUFBSTtZQUM3QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDbEIsU0FBQSxFQUFDO0tBQUEsQ0FBQztBQUNGLFNBQUEsS0FBSyxFQUFFLENBQUM7QUFDakIsQ0FBQyxFQS9oQmdCLGdCQUFnQixLQUFoQixnQkFBZ0IsR0EraEJoQyxFQUFBLENBQUEsQ0FBQSxDQUFBO0FBRUQ7QUFDTyxNQUFNLGlCQUFpQixHQUFpQzs7SUFFM0QsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUk7SUFDM0IsS0FBSyxFQUFFLGdCQUFnQixDQUFDLElBQUk7SUFDNUIsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUk7SUFDM0IsS0FBSyxFQUFFLGdCQUFnQixDQUFDLEtBQUs7SUFDN0IsS0FBSyxFQUFFLGdCQUFnQixDQUFDLEtBQUs7SUFDN0IsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUk7SUFDM0IsR0FBRyxFQUFFLGdCQUFnQixDQUFDLEdBQUc7SUFDekIsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFVBQVU7SUFDdkMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLFNBQVM7SUFDckMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU07SUFDL0IsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU07SUFDL0IsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU07O0lBRy9CLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO0lBQzdCLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHO0lBQ3pCLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHO0lBQ3pCLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO0lBQzdCLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLOztJQUc3QixZQUFZLEVBQUUsZ0JBQWdCLENBQUMsWUFBWTtJQUMzQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTtJQUN2QyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsT0FBTztJQUNqQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztJQUM3QixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztJQUM3QixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztJQUM3QixVQUFVLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTtJQUN2QyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtJQUNuQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsT0FBTztJQUNqQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtJQUNuQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUzs7SUFHckMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLFNBQVM7O0lBR3JDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNO0lBQy9CLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRO0lBQ25DLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTO0lBQ3JDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTO0lBQ3JDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxZQUFZO0lBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPO0lBQ2pDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJOztJQUczQixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtJQUMvQixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtJQUMzQixHQUFHLEVBQUUsZ0JBQWdCLENBQUMsR0FBRztJQUN6QixPQUFPLEVBQUUsZ0JBQWdCLENBQUMsT0FBTztJQUNqQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsR0FBRztJQUN6QixHQUFHLEVBQUUsZ0JBQWdCLENBQUMsR0FBRztJQUN6QixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtJQUMzQixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtJQUMvQixHQUFHLEVBQUUsZ0JBQWdCLENBQUMsR0FBRztJQUN6QixPQUFPLEVBQUUsZ0JBQWdCLENBQUMsT0FBTzs7SUFHakMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE9BQU87SUFDakMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLFFBQVE7SUFDbEMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLFFBQVE7SUFDbkMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU07SUFDL0IsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUk7Q0FDOUI7O0FDbHhCRDtBQXNCQTtNQUNhLGVBQWUsQ0FBQTtBQU94QixJQUFBLFdBQUEsR0FBQTtBQUNJLFFBQUEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0tBQ3hCO0FBTk0sSUFBQSxPQUFPLE1BQU0sR0FBQTtRQUNoQixPQUFPLElBQUksZUFBZSxFQUFFLENBQUM7S0FDaEM7QUFNTSxJQUFBLFFBQVEsQ0FDWCxJQUFPLEVBQ1AsRUFBWSxFQUNaLEtBQVEsRUFDUixJQUF3RCxFQUFBO0FBRXhELFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDZjtBQUVNLElBQUEsWUFBWSxDQUNmLElBQU8sRUFDUCxFQUFZLEVBQ1osS0FBUSxFQUNSLElBQXdELEVBQUE7QUFFeEQsUUFBQSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUN6Rzs7SUFHTSxPQUFPLENBQTZCLElBQU8sRUFBRSxPQUF1QyxFQUFBO0FBQ3ZGLFFBQUEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNsRSxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDaEUsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2xFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqRSxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUMzRTs7QUFHTSxJQUFBLFFBQVEsQ0FBQyxFQUFZLEVBQUUsSUFBYSxFQUFFLEtBQWMsRUFBRSxHQUFZLEVBQUE7UUFDckUsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLFFBQUEsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLElBQUksQ0FBQSxDQUFBLENBQUcsQ0FBQyxDQUFDO0FBQ2hFLGFBQUEsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEtBQUssQ0FBQSxDQUFBLENBQUcsQ0FBQyxDQUFDO0FBRTVFLFFBQUEsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBQSxJQUFJLE9BQU87QUFBRSxZQUFBLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOztBQUc5RCxRQUFBLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLFFBQUEsSUFBSSxRQUFRO0FBQUUsWUFBQSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzs7QUFHaEUsUUFBQSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN0RSxRQUFBLElBQUksUUFBUTtBQUFFLFlBQUEsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0FBR2hFLFFBQUEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEUsUUFBQSxJQUFJLFFBQVE7QUFBRSxZQUFBLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRWhFLFFBQUEsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQWdDLDZCQUFBLEVBQUEsUUFBUSxDQUFJLENBQUEsRUFBQSxFQUFFLENBQUksQ0FBQSxFQUFBLFNBQVMsQ0FBRyxDQUFBLENBQUEsQ0FBQyxDQUFDO0tBQ3pGOztBQUdNLElBQUEsT0FBTyxJQUFJLENBQUMsRUFBWSxFQUFFLElBQXNCLEVBQUUsS0FBdUIsRUFBQTtBQUM1RSxRQUFBLE9BQU8sR0FBRyxJQUFJLENBQUEsQ0FBQSxFQUFJLEVBQUUsQ0FBSSxDQUFBLEVBQUEsS0FBSyxFQUFFLENBQUM7S0FDbkM7QUFDSixDQUFBO0FBRUQ7QUFDTSxTQUFVLGVBQWUsQ0FBQyxjQUFxQyxFQUFBO0FBQ2pFLElBQUEsUUFDSSxlQUFlLENBQUMsTUFBTSxFQUFFOztTQUVuQixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUM7O1NBRWpFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUUzRSxTQUFBLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxTQUFBLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxTQUFBLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxTQUFBLFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzs7QUFFbEQsU0FBQSxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pGLFNBQUEsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRixTQUFBLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUUzRSxTQUFBLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxF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Q0MsR0FBQyxDQUFDLEVBQUUsQ0FBQ0MsR0FBQyxDQUFDLEVBQUUsQ0FBQ25DLEdBQUMsQ0FBQyxvRUFBb0UsU0FBU29DLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT0MsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTQSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUVWLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFNUIsR0FBQyxDQUFDLEtBQUssRUFBRUEsR0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBU3VDLEdBQUMsRUFBRSxDQUFDLE9BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBU0MsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLFNBQVNDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQ0EsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFNLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUNBLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBU0MsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPQSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFZixHQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUNnQixHQUFDLENBQUMsR0FBRyxFQUFFLEVBQUVkLEdBQUMsR0FBRy9CLEdBQUMsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMrQixHQUFDLENBQUMvQixHQUFDLENBQUMsaUJBQWlCLEdBQUc4QixHQUFDLEVBQUVlLEdBQUMsRUFBQyxDQUFDLFNBQVNBLEdBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUNBLEdBQUMsQ0FBQyxHQUFHLENBQUNoQixHQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQ0EsR0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ0EsR0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNNLEdBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDVyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDSixHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQ0ssR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRUosR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsU0FBU0ssR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRWQsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUNJLEdBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsR0FBQyxDQUFDRSxHQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ0YsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUNRLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUViLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDZ0IsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQ1IsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQ0EsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1MsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQ0MsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVNILEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDQSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBU0csR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDQSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVNILEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVNJLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRUEsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUV6RCxHQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLFNBQVN3RCxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRUEsR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxHQUFDLENBQUNDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0QsR0FBQyxDQUFDQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLHlCQUF5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTQSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMxRCxHQUFDLENBQUMsS0FBSyxDQUFDQSxHQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVN5RCxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN6RCxHQUFDLENBQUMsS0FBSyxDQUFDQSxHQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVM4QyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzlDLEdBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUl5QyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUNrQixHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDeEIsR0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ0EsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQ25DLEdBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDbUMsR0FBQyxDQUFDQSxHQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHSyxHQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDUSxHQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQ1ksR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1RCxHQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNBLEdBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMrQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDL0MsR0FBQyxDQUFDLEdBQUcsRUFBRUEsR0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQ0EsR0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVM0RCxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFM0IsR0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFDLENBQUMsR0FBR3FCLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUNOLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRU4sR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRU4sR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUVtQixHQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRUEsR0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVNILEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUNwRCxHQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVNtRCxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR25ELEdBQUMsQ0FBQyxPQUFPLEVBQUVBLEdBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRW9ELEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixHQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQ3BELEdBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFbUQsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRWYsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLENBQUMsU0FBU3VCLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBU0UsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzdELEdBQUMsQ0FBQyxFQUFFLEVBQUVBLEdBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzhDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUNULEdBQUMsQ0FBQ0csR0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFUCxHQUFDLENBQUNBLEdBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ2MsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTZSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDRCxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsR0FBQyxFQUFDLENBQUMsU0FBU0MsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM1QixHQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMwQixHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUNoQyxHQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQ1ksR0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDVixHQUFDLENBQUMsS0FBSyxDQUFDbEMsR0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzRCLEdBQUMsQ0FBQyxDQUFDLENBQXVEYSxHQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQ04sR0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUNBLEdBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUNTLEdBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLENBQUNILEdBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ0csR0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQ0gsR0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUNELEdBQUMsQ0FBQ1gsR0FBQyxDQUFDLEVBQUUsQ0FBQ0MsR0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDZSxHQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ2IsR0FBQyxDQUFDLENBQUM7O0FDQW5pVCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUNsQyxHQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ0EsR0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUNBLEdBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDQSxHQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ0EsR0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLEdBQUMsQ0FBQyxHQUFHLEVBQUVBLEdBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ2tELEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLEdBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbEQsR0FBQyxDQUFDLEdBQUcsRUFBRTRDLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzVDLEdBQUMsQ0FBQyxHQUFHLEVBQUU0QyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFNLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT0EsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBU1csR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVNZLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBU1IsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzNELEdBQUMsQ0FBQyxhQUFhLEVBQUVBLEdBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBaUssU0FBU21ELEdBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQ0osR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUNoRCxHQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQ0EsR0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDQSxHQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQytDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUNoRCxHQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLEdBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDQSxHQUFDLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUVtRCxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQ25ELEdBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQytDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUNoRCxHQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQ0EsR0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDK0MsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUvQyxHQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLHFCQUFxQixDQUFDLFNBQVMrQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsU0FBU0osR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBU00sR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUNBaC9ELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQ2pELEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSW9DLEdBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ0MsR0FBQyxDQUFDLEdBQUcsQ0FBQ0EsR0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDSSxHQUFDLENBQUNBLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQ0EsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ0EsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBSyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUNBLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0osR0FBQyxDQUFDLEdBQUcsQ0FBQ0EsR0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNBLEdBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU9yQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQ3FDLEdBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSUQsR0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUVwQyxHQUFDLENBQUNzQyxHQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUN0QyxHQUFDLENBQUNzQyxHQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQ0UsR0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNBLEdBQUMsQ0FBQ3hDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsb0JBQW9CLEdBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNBLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJb0MsR0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDSyxHQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLDJPQUEyTyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLFdBQVcsRUFBRSxPQUFPLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxNQUFNLEVBQUUsQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDRCxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPSyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUNULEdBQUMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsb0JBQW9CLENBQUMsMkJBQTJCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDQSxHQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDQyxHQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQ0EsR0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsR0FBQyxDQUFDLEtBQUssQ0FBQ0EsR0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsY0FBYyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLGNBQWMsR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQ0ksR0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQ0EsR0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ0osR0FBQyxDQUFDLEdBQUcsQ0FBQ0EsR0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFHLENBQUMsQ0FBSSxJQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWEsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBT3JDLEdBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ3VDLEdBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHQyxHQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUksSUFBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBTSxZQUFjLENBQUMsUUFBUSxDQUFDekMsQ0FBQyxDQUFDLFVBQVUsQ0FBQytCLENBQUMsQ0FBQyxTQUFTLENBQUNJLENBQUMsQ0FBQyxlQUFlLENBQUNGLENBQUMsQ0FBQyxNQUFNLENBQUNILENBQUMsQ0FBQyxtQkFBbUIsQ0FBQ0UsQ0FBQyxDQUFDLE9BQU8sQ0FBQ29DLENBQUMsQ0FBQyxXQUFXLENBQUNsRSxHQUFDLENBQUMsVUFBVSxDQUFDZ0MsR0FBQyxDQUFDLGFBQWEsQ0FBQ0UsR0FBQyxD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 diff --git a/notes/.obsidian/plugins/dataview/manifest.json b/notes/.obsidian/plugins/dataview/manifest.json index 470e9a4..f953127 100644 --- a/notes/.obsidian/plugins/dataview/manifest.json +++ b/notes/.obsidian/plugins/dataview/manifest.json @@ -1,7 +1,7 @@ { "id": "dataview", "name": "Dataview", - "version": "0.4.26", + "version": "0.5.28", "minAppVersion": "0.13.11", "description": "Complex data views for the data-obsessed.", "author": "Michael Brenan ", diff --git a/notes/.obsidian/plugins/dataview/styles.css b/notes/.obsidian/plugins/dataview/styles.css index 9650924..34607a4 100644 --- a/notes/.obsidian/plugins/dataview/styles.css +++ b/notes/.obsidian/plugins/dataview/styles.css @@ -9,6 +9,10 @@ text-align: left; } +.table-view-table > tbody > tr:hover { + background-color: var(--text-selection); +} + .table-view-table > thead > tr > th { font-weight: 700; font-size: larger; @@ -28,6 +32,11 @@ max-width: 100%; } +/** Live Preview padding fixes, specifically for DataviewJS custom HTML elements. */ +.is-live-preview .block-language-dataviewjs > p, .is-live-preview .block-language-dataviewjs > span { + line-height: 1.0; +} + /** Rendered value styling for any view. */ .dataview-result-list-root-ul { padding: 0em !important; @@ -39,7 +48,9 @@ padding-left: 8px; } -/** Inline Field Rendering. */ +/*******************/ +/** Inline Fields **/ +/*******************/ .dataview.inline-field-key { border-top-left-radius: 250px; @@ -69,3 +80,46 @@ background-color: var(--background-secondary-alt); color: var(--text-nav-selected); } + +/***************/ +/** Task View **/ +/***************/ + +.dataview.task-list-item, .dataview.task-list-basic-item { + margin-top: 3px; + margin-bottom: 3px; + transition: 0.4s; +} + +.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover { + background-color: var(--text-selection); + box-shadow: -40px 0 0 var(--text-selection); + cursor: pointer; +} + +/*****************/ +/** Error Views **/ +/*****************/ + +div.dataview-error-box { + width: 100%; + min-height: 150px; + display: flex; + align-items: center; + justify-content: center; + border: 4px dashed var(--background-secondary); +} + +.dataview-error-message { + color: var(--text-muted); + text-align: center; +} + +/*************************/ +/** Additional Metadata **/ +/*************************/ + +.dataview.small-text { + font-size: smaller; + color: var(--text-selection); +} diff --git a/notes/.obsidian/plugins/obsidian-admonition/data.json b/notes/.obsidian/plugins/obsidian-admonition/data.json index 2b3f104..21f399f 100644 --- a/notes/.obsidian/plugins/obsidian-admonition/data.json +++ b/notes/.obsidian/plugins/obsidian-admonition/data.json @@ -15,7 +15,7 @@ }, "syntaxHighlight": false, "copyButton": false, - "version": "9.0.1", + "version": "9.0.3", "autoCollapse": false, "defaultCollapseType": "open", "injectColor": true, diff --git a/notes/.obsidian/plugins/obsidian-admonition/main.js b/notes/.obsidian/plugins/obsidian-admonition/main.js index af39ade..5854120 100644 --- a/notes/.obsidian/plugins/obsidian-admonition/main.js +++ b/notes/.obsidian/plugins/obsidian-admonition/main.js @@ -470,13 +470,13 @@ var c6=Object.create;var X1=Object.defineProperty;var a6=Object.getOwnPropertyDe `];for(let e of Array.from(this.sheet.cssRules))c.push(e.cssText);return c.join(` -`)}addAdmonition(c){if(!c.icon)return;let e;c.icon.type=="obsidian"?e=`.callout[data-callout="${c.type}"] { - --callout-color: ${c.color}; /* RGB Tuple (just like admonitions) */ +`)}addAdmonition(c){if(!c.icon)return;let e,i=c.injectColor??this.plugin.data.injectColor?`--callout-color: ${c.color};`:"";c.icon.type=="obsidian"?e=`.callout[data-callout="${c.type}"] { + ${i} --callout-icon: ${c.icon.name}; /* Icon name from the Obsidian Icon Set */ }`:e=`.callout[data-callout="${c.type}"] { - --callout-color: ${c.color}; + ${i} --callout-icon: '${(this.plugin.iconManager.getIconNode(c.icon)?.outerHTML??"").replace(/(width|height)=(\\?"|')\d+(\\?"|')/g,"")}'; - }`,this.indexing.contains(c.type)&&this.sheet.deleteRule(this.indexing.indexOf(c.type)),this.indexing=[...this.indexing.filter(i=>i!=c.type),c.type],this.sheet.insertRule(e,this.sheet.cssRules.length),this.updateSnippet()}removeAdmonition(c){if(!this.indexing.contains(c.type))return;let e=this.indexing.indexOf(c.type);this.sheet.deleteRule(e),this.indexing.splice(e,1),this.updateSnippet()}get sheet(){return this.style.sheet}unload(){this.style.detach()}get snippetPath(){return this.plugin.app.customCss.getSnippetPath(this.plugin.data.snippetPath)}setUseSnippet(){this.plugin.data.useSnippet&&this.updateSnippet()}async updateSnippet(){!this.plugin.data.useSnippet||(await this.plugin.app.vault.adapter.exists(this.snippetPath)?await this.plugin.app.vault.adapter.write(this.snippetPath,this.generateCssString()):await this.plugin.app.vault.create(this.snippetPath,this.generateCssString()),this.plugin.app.customCss.setCssEnabledStatus(this.plugin.data.snippetPath,!0),this.plugin.app.customCss.readCssFolders())}};var bb={userAdmonitions:{},syntaxHighlight:!1,copyButton:!1,version:"",autoCollapse:!1,defaultCollapseType:"open",injectColor:!0,parseTitles:!0,dropShadow:!0,hideEmpty:!1,open:{admonitions:!0,icons:!0,other:!0,advanced:!1},icons:[],useFontAwesome:!0,rpgDownloadedOnce:!1,msDocConverted:!1,useSnippet:!1,snippetPath:`custom-admonitions.${[...Array(6).keys()].map(()=>(16*Math.random()|0).toString(16)).join("")}`},r4=class extends x.Plugin{constructor(){super(...arguments);this.postprocessors=new Map;this.iconManager=new i4(this)}get types(){return Object.keys(this.admonitions)}get admonitionArray(){return Object.keys(this.admonitions).map(c=>({...this.admonitions[c],type:c}))}async onload(){console.log("Obsidian Admonition loaded"),this.postprocessors=new Map,await this.loadSettings(),await this.iconManager.load(),this.app.workspace.onLayoutReady(async()=>{this.addChild(this.calloutManager=new d2(this)),this.registerEditorSuggest(new t4(this)),Object.keys(this.admonitions).forEach(c=>{this.registerType(c)}),this.addSettingTab(new l2(this.app,this)),(0,x.addIcon)(K1,M4),(0,x.addIcon)(Q1,C4),(0,x.addIcon)(P1,H4),(0,x.addIcon)(E1,g4),this.addCommand({id:"collapse-admonitions",name:"Collapse Admonitions in Note",checkCallback:c=>{if(c)return!!this.app.workspace.getActiveViewOfType(x.MarkdownView);let e=this.app.workspace.getActiveViewOfType(x.MarkdownView);if(!e||!(e instanceof x.MarkdownView))return;let i=e.contentEl.querySelectorAll("details[open].admonition-plugin");for(let n=0;n{if(c)return!!this.app.workspace.getActiveViewOfType(x.MarkdownView);let e=this.app.workspace.getActiveViewOfType(x.MarkdownView);if(!e||!(e instanceof x.MarkdownView))return;let i=e.contentEl.querySelectorAll("details:not([open]).admonition-plugin");for(let n=0;n{let i=new r2(this);i.onClose=()=>{if(!i.insert)return;let n="",o="";i.title.length&&i.title.toLowerCase()!=i.type.toLowerCase()&&(n=`title: ${i.title} + }`,this.indexing.contains(c.type)&&this.sheet.deleteRule(this.indexing.indexOf(c.type)),this.indexing=[...this.indexing.filter(n=>n!=c.type),c.type],this.sheet.insertRule(e,this.sheet.cssRules.length),this.updateSnippet()}removeAdmonition(c){if(!this.indexing.contains(c.type))return;let e=this.indexing.indexOf(c.type);this.sheet.deleteRule(e),this.indexing.splice(e,1),this.updateSnippet()}get sheet(){return this.style.sheet}unload(){this.style.detach()}get snippetPath(){return this.plugin.app.customCss.getSnippetPath(this.plugin.data.snippetPath)}setUseSnippet(){this.plugin.data.useSnippet&&this.updateSnippet()}async updateSnippet(){!this.plugin.data.useSnippet||(await this.plugin.app.vault.adapter.exists(this.snippetPath)?await this.plugin.app.vault.adapter.write(this.snippetPath,this.generateCssString()):await this.plugin.app.vault.create(this.snippetPath,this.generateCssString()),this.plugin.app.customCss.setCssEnabledStatus(this.plugin.data.snippetPath,!0),this.plugin.app.customCss.readCssFolders())}};var bb={userAdmonitions:{},syntaxHighlight:!1,copyButton:!1,version:"",autoCollapse:!1,defaultCollapseType:"open",injectColor:!0,parseTitles:!0,dropShadow:!0,hideEmpty:!1,open:{admonitions:!0,icons:!0,other:!0,advanced:!1},icons:[],useFontAwesome:!0,rpgDownloadedOnce:!1,msDocConverted:!1,useSnippet:!1,snippetPath:`custom-admonitions.${[...Array(6).keys()].map(()=>(16*Math.random()|0).toString(16)).join("")}`},r4=class extends x.Plugin{constructor(){super(...arguments);this.postprocessors=new Map;this.iconManager=new i4(this)}get types(){return Object.keys(this.admonitions)}get admonitionArray(){return Object.keys(this.admonitions).map(c=>({...this.admonitions[c],type:c}))}async onload(){console.log("Obsidian Admonition loaded"),this.postprocessors=new Map,await this.loadSettings(),await this.iconManager.load(),this.app.workspace.onLayoutReady(async()=>{this.addChild(this.calloutManager=new d2(this)),this.registerEditorSuggest(new t4(this)),Object.keys(this.admonitions).forEach(c=>{this.registerType(c)}),this.addSettingTab(new l2(this.app,this)),(0,x.addIcon)(K1,M4),(0,x.addIcon)(Q1,C4),(0,x.addIcon)(P1,H4),(0,x.addIcon)(E1,g4),this.addCommand({id:"collapse-admonitions",name:"Collapse Admonitions in Note",checkCallback:c=>{if(c)return!!this.app.workspace.getActiveViewOfType(x.MarkdownView);let e=this.app.workspace.getActiveViewOfType(x.MarkdownView);if(!e||!(e instanceof x.MarkdownView))return;let i=e.contentEl.querySelectorAll("details[open].admonition-plugin");for(let n=0;n{if(c)return!!this.app.workspace.getActiveViewOfType(x.MarkdownView);let e=this.app.workspace.getActiveViewOfType(x.MarkdownView);if(!e||!(e instanceof x.MarkdownView))return;let i=e.contentEl.querySelectorAll("details:not([open]).admonition-plugin");for(let n=0;n{let i=new r2(this);i.onClose=()=>{if(!i.insert)return;let n="",o="";i.title.length&&i.title.toLowerCase()!=i.type.toLowerCase()&&(n=`title: ${i.title} `),(this.data.autoCollapse&&i.collapse!=this.data.defaultCollapseType||!this.data.autoCollapse&&i.collapse!="none")&&(o=`collapse: ${i.collapse} `),c.getDoc().replaceSelection(`\`\`\`ad-${i.type} ${n}${o} @@ -488,7 +488,7 @@ ${c.getDoc().getSelection()} > `)} `)},i.open()}})})}async downloadIcon(c){this.iconManager.downloadIcon(c)}async removeIcon(c){this.iconManager.removeIcon(c)}async postprocessor(c,e,i,n){if(!!this.admonitions[c])try{let o=typeof n=="string"?n:n?.sourcePath??this.app.workspace.getActiveFile()?.path??"",{title:r,collapse:t,content:l,icon:f,color:s}=u4(c,e,this.admonitions[c]);this.data.autoCollapse&&!t?t=this.data.defaultCollapseType??"open":t&&t.trim()==="none"&&(t="");let h=this.admonitions[c],m=this.getAdmonitionElement(c,r,this.iconManager.iconDefinitions.find(({name:v})=>f===v)??h.icon,s??(h.injectColor??this.data.injectColor?h.color:null),t);this.renderAdmonitionContent(m,c,l,n,o,e),t&&t!="none"&&this.calloutManager.setCollapsible(m);let z=i.parentElement;return z&&z.addClass("admonition-parent",`admonition-${c}-parent`),i.replaceWith(m),m}catch(o){console.error(o);let r=createEl("pre");r.createEl("code",{attr:{style:"color: var(--text-error) !important"}}).createSpan({text:`There was an error rendering the admonition: -`+e}),i.replaceWith(r)}}getAdmonitionElement(c,e,i,n,o){let r=createDiv({cls:`callout admonition admonition-${c} admonition-plugin ${e?.trim().length?"":"no-title"}`,attr:{style:`--admonition-color: ${n};`,"data-callout":c,"data-callout-fold":""}}),t=r.createDiv({cls:`callout-title admonition-title ${e?.trim().length?"":"no-title"}`});if(e&&e.trim().length){let l=t.createDiv("callout-icon admonition-title-icon");i&&i.name&&i.type&&l.appendChild(this.iconManager.getIconNode(i)??createDiv());let f=t.createDiv("callout-title-inner admonition-title-content");x.MarkdownRenderer.renderMarkdown(e,f,"",null),f.firstElementChild&&f.firstElementChild instanceof HTMLParagraphElement&&f.setChildrenInPlace(Array.from(f.firstElementChild.childNodes))}return o&&(r.addClass("is-collapsible"),o=="closed"&&r.addClass("is-collapsed")),this.data.dropShadow||r.addClass("no-drop"),r}renderAdmonitionContent(c,e,i,n,o,r){let t=new x.MarkdownRenderChild(c);if(t.containerEl=c,n&&typeof n!="string"&&n.addChild(t),i&&i?.trim().length){let l=this.getAdmonitionContentElement(e,c,i);if(/^`{3,}mermaid/m.test(i)){let s=!c.hasAttribute("open");c instanceof HTMLDetailsElement&&c.setAttribute("open","open"),setImmediate(()=>{x.MarkdownRenderer.renderMarkdown(i,l,o,t),c instanceof HTMLDetailsElement&&s&&c.removeAttribute("open")})}else x.MarkdownRenderer.renderMarkdown(i,l,o,t);(!i.length||l.textContent.trim()=="")&&this.data.hideEmpty&&c.addClass("no-content");let f=l.querySelectorAll(".task-list-item-checkbox");if(f?.length){let s=r.split(` +`+e}),i.replaceWith(r)}}getAdmonitionElement(c,e,i,n,o){let r=createDiv({cls:`callout admonition admonition-${c} admonition-plugin ${e?.trim().length?"":"no-title"}`,attr:{style:n?`--callout-color: ${n};`:"","data-callout":c,"data-callout-fold":""}}),t=r.createDiv({cls:`callout-title admonition-title ${e?.trim().length?"":"no-title"}`});if(e&&e.trim().length){let l=t.createDiv("callout-icon admonition-title-icon");i&&i.name&&i.type&&l.appendChild(this.iconManager.getIconNode(i)??createDiv());let f=t.createDiv("callout-title-inner admonition-title-content");x.MarkdownRenderer.renderMarkdown(e,f,"",null),f.firstElementChild&&f.firstElementChild instanceof HTMLParagraphElement&&f.setChildrenInPlace(Array.from(f.firstElementChild.childNodes))}return o&&(r.addClass("is-collapsible"),o=="closed"&&r.addClass("is-collapsed")),this.data.dropShadow||r.addClass("no-drop"),r}renderAdmonitionContent(c,e,i,n,o,r){let t=new x.MarkdownRenderChild(c);if(t.containerEl=c,n&&typeof n!="string"&&n.addChild(t),i&&i?.trim().length){let l=this.getAdmonitionContentElement(e,c,i);if(/^`{3,}mermaid/m.test(i)){let s=!c.hasAttribute("open");c instanceof HTMLDetailsElement&&c.setAttribute("open","open"),setImmediate(()=>{x.MarkdownRenderer.renderMarkdown(i,l,o,t),c instanceof HTMLDetailsElement&&s&&c.removeAttribute("open")})}else x.MarkdownRenderer.renderMarkdown(i,l,o,t);(!i.length||l.textContent.trim()=="")&&this.data.hideEmpty&&c.addClass("no-content");let f=l.querySelectorAll(".task-list-item-checkbox");if(f?.length){let s=r.split(` `),h=0;f.forEach(m=>{let z=s.slice(h).findIndex(v=>/^[ \t>]*\- \[.\]/.test(v));z!=-1&&(m.dataset.line=`${z+h+1}`,h=z+h+1)})}}}getAdmonitionContentElement(c,e,i){let n=e.createDiv("callout-content admonition-content");if(this.admonitions[c].copy??this.data.copyButton){let o=n.createDiv("admonition-content-copy");(0,x.setIcon)(o,"copy"),o.addEventListener("click",()=>{navigator.clipboard.writeText(i.trim()).then(async()=>{new x.Notice("Admonition content copied to clipboard.")})})}return n}registerType(c){this.data.syntaxHighlight&&this.turnOnSyntaxHighlighting([c]),this.postprocessors.has(c)&&x.MarkdownPreviewRenderer.unregisterCodeBlockPostProcessor(`ad-${c}`),this.postprocessors.set(c,this.registerMarkdownCodeBlockProcessor(`ad-${c}`,(i,n,o)=>this.postprocessor(c,i,n,o)));let e=this.admonitions[c];e.command&&this.registerCommandsFor(e)}get admonitions(){return{...V4,...this.data.userAdmonitions}}async addAdmonition(c){this.data.userAdmonitions={...this.data.userAdmonitions,[c.type]:c},this.registerType(c.type),this.calloutManager.addAdmonition(c),await this.saveSettings()}registerCommandsFor(c){c.command=!0,this.addCommand({id:`insert-${c.type}-callout`,name:`Insert ${c.type} Callout`,editorCheckCallback:(e,i,n)=>{if(e)return c.command;if(c.command)try{let o=i.getDoc().getSelection();i.getDoc().replaceSelection(`> [!${c.type}] > ${o.split(` `).join(` diff --git a/notes/.obsidian/plugins/obsidian-admonition/manifest.json b/notes/.obsidian/plugins/obsidian-admonition/manifest.json index bbf5fbe..38ff906 100644 --- a/notes/.obsidian/plugins/obsidian-admonition/manifest.json +++ b/notes/.obsidian/plugins/obsidian-admonition/manifest.json @@ -1,7 +1,7 @@ { "id": "obsidian-admonition", "name": "Admonition", - "version": "9.0.1", + "version": "9.0.3", "minAppVersion": "0.14.0", "description": "Enhanced callouts for Obsidian.md", "author": "Jeremy Valentine", diff --git a/notes/.obsidian/plugins/obsidian-chartsview-plugin/main.js b/notes/.obsidian/plugins/obsidian-chartsview-plugin/main.js index 5724e2a..1e4e93d 100644 --- a/notes/.obsidian/plugins/obsidian-chartsview-plugin/main.js +++ b/notes/.obsidian/plugins/obsidian-chartsview-plugin/main.js @@ -3,130017 +3,531 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ -var __create = Object.create; -var __defProp = Object.defineProperty; -var __defProps = Object.defineProperties; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropDescs = Object.getOwnPropertyDescriptors; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getOwnPropSymbols = Object.getOwnPropertySymbols; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __propIsEnum = Object.prototype.propertyIsEnumerable; -var __defNormalProp = (obj, key, value2) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value: value2 }) : obj[key] = value2; -var __spreadValues = (a4, b10) => { - for (var prop in b10 || (b10 = {})) - if (__hasOwnProp.call(b10, prop)) - __defNormalProp(a4, prop, b10[prop]); - if (__getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(b10)) { - if (__propIsEnum.call(b10, prop)) - __defNormalProp(a4, prop, b10[prop]); - } - return a4; -}; -var __spreadProps = (a4, b10) => __defProps(a4, __getOwnPropDescs(b10)); -var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); -var __commonJS = (cb, mod5) => function __require() { - return mod5 || (0, cb[Object.keys(cb)[0]])((mod5 = { exports: {} }).exports, mod5), mod5.exports; -}; -var __export = (target, all) => { - __markAsModule(target); - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __reExport = (target, module2, desc) => { - if (module2 && typeof module2 === "object" || typeof module2 === "function") { - for (let key of __getOwnPropNames(module2)) - if (!__hasOwnProp.call(target, key) && key !== "default") - __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); - } - return target; -}; -var __toModule = (module2) => { - return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); -}; -var __async = (__this, __arguments, generator) => { - return new Promise((resolve, reject) => { - var fulfilled = (value2) => { - try { - step(generator.next(value2)); - } catch (e4) { - reject(e4); - } - }; - var rejected = (value2) => { - try { - step(generator.throw(value2)); - } catch (e4) { - reject(e4); - } - }; - var step = (x6) => x6.done ? resolve(x6.value) : Promise.resolve(x6.value).then(fulfilled, rejected); - step((generator = generator.apply(__this, __arguments)).next()); - }); -}; - -// node_modules/tslib/tslib.js -var require_tslib = __commonJS({ - "node_modules/tslib/tslib.js"(exports, module2) { - var __extends18; - var __assign32; - var __rest48; - var __decorate4; - var __param4; - var __metadata4; - var __awaiter7; - var __generator5; - var __exportStar4; - var __values4; - var __read4; - var __spread4; - var __spreadArrays4; - var __spreadArray6; - var __await4; - var __asyncGenerator4; - var __asyncDelegator4; - var __asyncValues4; - var __makeTemplateObject4; - var __importStar4; - var __importDefault4; - var __classPrivateFieldGet4; - var __classPrivateFieldSet4; - var __createBinding4; - (function(factory) { - var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; - if (typeof define === "function" && define.amd) { - define("tslib", ["exports"], function(exports2) { - factory(createExporter(root, createExporter(exports2))); - }); - } else if (typeof module2 === "object" && typeof module2.exports === "object") { - factory(createExporter(root, createExporter(module2.exports))); - } else { - factory(createExporter(root)); - } - function createExporter(exports2, previous) { - if (exports2 !== root) { - if (typeof Object.create === "function") { - Object.defineProperty(exports2, "__esModule", { value: true }); - } else { - exports2.__esModule = true; - } - } - return function(id, v3) { - return exports2[id] = previous ? previous(id, v3) : v3; - }; - } - })(function(exporter) { - var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b10) { - d3.__proto__ = b10; - } || function(d3, b10) { - for (var p4 in b10) - if (Object.prototype.hasOwnProperty.call(b10, p4)) - d3[p4] = b10[p4]; - }; - __extends18 = function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; - __assign32 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - __rest48 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; - }; - __decorate4 = function(decorators, target, key, desc) { - var c5 = arguments.length, r4 = c5 < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d3; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") - r4 = Reflect.decorate(decorators, target, key, desc); - else - for (var i4 = decorators.length - 1; i4 >= 0; i4--) - if (d3 = decorators[i4]) - r4 = (c5 < 3 ? d3(r4) : c5 > 3 ? d3(target, key, r4) : d3(target, key)) || r4; - return c5 > 3 && r4 && Object.defineProperty(target, key, r4), r4; - }; - __param4 = function(paramIndex, decorator) { - return function(target, key) { - decorator(target, key, paramIndex); - }; - }; - __metadata4 = function(metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") - return Reflect.metadata(metadataKey, metadataValue); - }; - __awaiter7 = function(thisArg, _arguments, P4, generator) { - function adopt(value2) { - return value2 instanceof P4 ? value2 : new P4(function(resolve) { - resolve(value2); - }); - } - return new (P4 || (P4 = Promise))(function(resolve, reject) { - function fulfilled(value2) { - try { - step(generator.next(value2)); - } catch (e4) { - reject(e4); - } - } - function rejected(value2) { - try { - step(generator["throw"](value2)); - } catch (e4) { - reject(e4); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - __generator5 = function(thisArg, body) { - var _8 = { label: 0, sent: function() { - if (t4[0] & 1) - throw t4[1]; - return t4[1]; - }, trys: [], ops: [] }, f3, y5, t4, g4; - return g4 = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g4[Symbol.iterator] = function() { - return this; - }), g4; - function verb(n3) { - return function(v3) { - return step([n3, v3]); - }; - } - function step(op) { - if (f3) - throw new TypeError("Generator is already executing."); - while (_8) - try { - if (f3 = 1, y5 && (t4 = op[0] & 2 ? y5["return"] : op[0] ? y5["throw"] || ((t4 = y5["return"]) && t4.call(y5), 0) : y5.next) && !(t4 = t4.call(y5, op[1])).done) - return t4; - if (y5 = 0, t4) - op = [op[0] & 2, t4.value]; - switch (op[0]) { - case 0: - case 1: - t4 = op; - break; - case 4: - _8.label++; - return { value: op[1], done: false }; - case 5: - _8.label++; - y5 = op[1]; - op = [0]; - continue; - case 7: - op = _8.ops.pop(); - _8.trys.pop(); - continue; - default: - if (!(t4 = _8.trys, t4 = t4.length > 0 && t4[t4.length - 1]) && (op[0] === 6 || op[0] === 2)) { - _8 = 0; - continue; - } - if (op[0] === 3 && (!t4 || op[1] > t4[0] && op[1] < t4[3])) { - _8.label = op[1]; - break; - } - if (op[0] === 6 && _8.label < t4[1]) { - _8.label = t4[1]; - t4 = op; - break; - } - if (t4 && _8.label < t4[2]) { - _8.label = t4[2]; - _8.ops.push(op); - break; - } - if (t4[2]) - _8.ops.pop(); - _8.trys.pop(); - continue; - } - op = body.call(thisArg, _8); - } catch (e4) { - op = [6, e4]; - y5 = 0; - } finally { - f3 = t4 = 0; - } - if (op[0] & 5) - throw op[1]; - return { value: op[0] ? op[1] : void 0, done: true }; - } - }; - __exportStar4 = function(m4, o3) { - for (var p4 in m4) - if (p4 !== "default" && !Object.prototype.hasOwnProperty.call(o3, p4)) - __createBinding4(o3, m4, p4); - }; - __createBinding4 = Object.create ? function(o3, m4, k4, k22) { - if (k22 === void 0) - k22 = k4; - Object.defineProperty(o3, k22, { enumerable: true, get: function() { - return m4[k4]; - } }); - } : function(o3, m4, k4, k22) { - if (k22 === void 0) - k22 = k4; - o3[k22] = m4[k4]; - }; - __values4 = function(o3) { - var s4 = typeof Symbol === "function" && Symbol.iterator, m4 = s4 && o3[s4], i4 = 0; - if (m4) - return m4.call(o3); - if (o3 && typeof o3.length === "number") - return { - next: function() { - if (o3 && i4 >= o3.length) - o3 = void 0; - return { value: o3 && o3[i4++], done: !o3 }; - } - }; - throw new TypeError(s4 ? "Object is not iterable." : "Symbol.iterator is not defined."); - }; - __read4 = function(o3, n3) { - var m4 = typeof Symbol === "function" && o3[Symbol.iterator]; - if (!m4) - return o3; - var i4 = m4.call(o3), r4, ar = [], e4; - try { - while ((n3 === void 0 || n3-- > 0) && !(r4 = i4.next()).done) - ar.push(r4.value); - } catch (error) { - e4 = { error }; - } finally { - try { - if (r4 && !r4.done && (m4 = i4["return"])) - m4.call(i4); - } finally { - if (e4) - throw e4.error; - } - } - return ar; - }; - __spread4 = function() { - for (var ar = [], i4 = 0; i4 < arguments.length; i4++) - ar = ar.concat(__read4(arguments[i4])); - return ar; - }; - __spreadArrays4 = function() { - for (var s4 = 0, i4 = 0, il = arguments.length; i4 < il; i4++) - s4 += arguments[i4].length; - for (var r4 = Array(s4), k4 = 0, i4 = 0; i4 < il; i4++) - for (var a4 = arguments[i4], j4 = 0, jl = a4.length; j4 < jl; j4++, k4++) - r4[k4] = a4[j4]; - return r4; - }; - __spreadArray6 = function(to, from, pack2) { - if (pack2 || arguments.length === 2) - for (var i4 = 0, l4 = from.length, ar; i4 < l4; i4++) { - if (ar || !(i4 in from)) { - if (!ar) - ar = Array.prototype.slice.call(from, 0, i4); - ar[i4] = from[i4]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); - }; - __await4 = function(v3) { - return this instanceof __await4 ? (this.v = v3, this) : new __await4(v3); - }; - __asyncGenerator4 = function(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) - throw new TypeError("Symbol.asyncIterator is not defined."); - var g4 = generator.apply(thisArg, _arguments || []), i4, q3 = []; - return i4 = {}, verb("next"), verb("throw"), verb("return"), i4[Symbol.asyncIterator] = function() { - return this; - }, i4; - function verb(n3) { - if (g4[n3]) - i4[n3] = function(v3) { - return new Promise(function(a4, b10) { - q3.push([n3, v3, a4, b10]) > 1 || resume(n3, v3); - }); - }; - } - function resume(n3, v3) { - try { - step(g4[n3](v3)); - } catch (e4) { - settle(q3[0][3], e4); - } - } - function step(r4) { - r4.value instanceof __await4 ? Promise.resolve(r4.value.v).then(fulfill, reject) : settle(q3[0][2], r4); - } - function fulfill(value2) { - resume("next", value2); - } - function reject(value2) { - resume("throw", value2); - } - function settle(f3, v3) { - if (f3(v3), q3.shift(), q3.length) - resume(q3[0][0], q3[0][1]); - } - }; - __asyncDelegator4 = function(o3) { - var i4, p4; - return i4 = {}, verb("next"), verb("throw", function(e4) { - throw e4; - }), verb("return"), i4[Symbol.iterator] = function() { - return this; - }, i4; - function verb(n3, f3) { - i4[n3] = o3[n3] ? function(v3) { - return (p4 = !p4) ? { value: __await4(o3[n3](v3)), done: n3 === "return" } : f3 ? f3(v3) : v3; - } : f3; - } - }; - __asyncValues4 = function(o3) { - if (!Symbol.asyncIterator) - throw new TypeError("Symbol.asyncIterator is not defined."); - var m4 = o3[Symbol.asyncIterator], i4; - return m4 ? m4.call(o3) : (o3 = typeof __values4 === "function" ? __values4(o3) : o3[Symbol.iterator](), i4 = {}, verb("next"), verb("throw"), verb("return"), i4[Symbol.asyncIterator] = function() { - return this; - }, i4); - function verb(n3) { - i4[n3] = o3[n3] && function(v3) { - return new Promise(function(resolve, reject) { - v3 = o3[n3](v3), settle(resolve, reject, v3.done, v3.value); - }); - }; - } - function settle(resolve, reject, d3, v3) { - Promise.resolve(v3).then(function(v4) { - resolve({ value: v4, done: d3 }); - }, reject); - } - }; - __makeTemplateObject4 = function(cooked, raw) { - if (Object.defineProperty) { - Object.defineProperty(cooked, "raw", { value: raw }); - } else { - cooked.raw = raw; - } - return cooked; - }; - var __setModuleDefault = Object.create ? function(o3, v3) { - Object.defineProperty(o3, "default", { enumerable: true, value: v3 }); - } : function(o3, v3) { - o3["default"] = v3; - }; - __importStar4 = function(mod5) { - if (mod5 && mod5.__esModule) - return mod5; - var result = {}; - if (mod5 != null) { - for (var k4 in mod5) - if (k4 !== "default" && Object.prototype.hasOwnProperty.call(mod5, k4)) - __createBinding4(result, mod5, k4); - } - __setModuleDefault(result, mod5); - return result; - }; - __importDefault4 = function(mod5) { - return mod5 && mod5.__esModule ? mod5 : { "default": mod5 }; - }; - __classPrivateFieldGet4 = function(receiver, state2, kind, f3) { - if (kind === "a" && !f3) - throw new TypeError("Private accessor was defined without a getter"); - if (typeof state2 === "function" ? receiver !== state2 || !f3 : !state2.has(receiver)) - throw new TypeError("Cannot read private member from an object whose class did not declare it"); - return kind === "m" ? f3 : kind === "a" ? f3.call(receiver) : f3 ? f3.value : state2.get(receiver); - }; - __classPrivateFieldSet4 = function(receiver, state2, value2, kind, f3) { - if (kind === "m") - throw new TypeError("Private method is not writable"); - if (kind === "a" && !f3) - throw new TypeError("Private accessor was defined without a setter"); - if (typeof state2 === "function" ? receiver !== state2 || !f3 : !state2.has(receiver)) - throw new TypeError("Cannot write private member to an object whose class did not declare it"); - return kind === "a" ? f3.call(receiver, value2) : f3 ? f3.value = value2 : state2.set(receiver, value2), value2; - }; - exporter("__extends", __extends18); - exporter("__assign", __assign32); - exporter("__rest", __rest48); - exporter("__decorate", __decorate4); - exporter("__param", __param4); - exporter("__metadata", __metadata4); - exporter("__awaiter", __awaiter7); - exporter("__generator", __generator5); - exporter("__exportStar", __exportStar4); - exporter("__createBinding", __createBinding4); - exporter("__values", __values4); - exporter("__read", __read4); - exporter("__spread", __spread4); - exporter("__spreadArrays", __spreadArrays4); - exporter("__spreadArray", __spreadArray6); - exporter("__await", __await4); - exporter("__asyncGenerator", __asyncGenerator4); - exporter("__asyncDelegator", __asyncDelegator4); - exporter("__asyncValues", __asyncValues4); - exporter("__makeTemplateObject", __makeTemplateObject4); - exporter("__importStar", __importStar4); - exporter("__importDefault", __importDefault4); - exporter("__classPrivateFieldGet", __classPrivateFieldGet4); - exporter("__classPrivateFieldSet", __classPrivateFieldSet4); - }); - } -}); - -// node_modules/@antv/util/lib/is-array-like.js -var require_is_array_like = __commonJS({ - "node_modules/@antv/util/lib/is-array-like.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var isArrayLike = function(value2) { - return value2 !== null && typeof value2 !== "function" && isFinite(value2.length); - }; - exports.default = isArrayLike; - } -}); - -// node_modules/@antv/util/lib/contains.js -var require_contains = __commonJS({ - "node_modules/@antv/util/lib/contains.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_like_1 = require_is_array_like(); - var contains3 = function(arr, value2) { - if (!is_array_like_1.default(arr)) { - return false; - } - return arr.indexOf(value2) > -1; - }; - exports.default = contains3; - } -}); - -// node_modules/@antv/util/lib/filter.js -var require_filter = __commonJS({ - "node_modules/@antv/util/lib/filter.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_like_1 = require_is_array_like(); - var filter17 = function(arr, func) { - if (!is_array_like_1.default(arr)) { - return arr; - } - var result = []; - for (var index2 = 0; index2 < arr.length; index2++) { - var value2 = arr[index2]; - if (func(value2, index2)) { - result.push(value2); - } - } - return result; - }; - exports.default = filter17; - } -}); - -// node_modules/@antv/util/lib/difference.js -var require_difference = __commonJS({ - "node_modules/@antv/util/lib/difference.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var filter_1 = require_filter(); - var contains_1 = require_contains(); - var difference2 = function(arr, values4) { - if (values4 === void 0) { - values4 = []; - } - return filter_1.default(arr, function(value2) { - return !contains_1.default(values4, value2); - }); - }; - exports.default = difference2; - } -}); - -// node_modules/@antv/util/lib/is-type.js -var require_is_type = __commonJS({ - "node_modules/@antv/util/lib/is-type.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var toString7 = {}.toString; - var isType7 = function(value2, type2) { - return toString7.call(value2) === "[object " + type2 + "]"; - }; - exports.default = isType7; - } -}); - -// node_modules/@antv/util/lib/is-function.js -var require_is_function = __commonJS({ - "node_modules/@antv/util/lib/is-function.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_type_1 = require_is_type(); - exports.default = function(value2) { - return is_type_1.default(value2, "Function"); - }; - } -}); - -// node_modules/@antv/util/lib/is-nil.js -var require_is_nil = __commonJS({ - "node_modules/@antv/util/lib/is-nil.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var isNil67 = function(value2) { - return value2 === null || value2 === void 0; - }; - exports.default = isNil67; - } -}); - -// node_modules/@antv/util/lib/is-array.js -var require_is_array = __commonJS({ - "node_modules/@antv/util/lib/is-array.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_type_1 = require_is_type(); - exports.default = function(value2) { - return Array.isArray ? Array.isArray(value2) : is_type_1.default(value2, "Array"); - }; - } -}); - -// node_modules/@antv/util/lib/is-object.js -var require_is_object = __commonJS({ - "node_modules/@antv/util/lib/is-object.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.default = function(value2) { - var type2 = typeof value2; - return value2 !== null && type2 === "object" || type2 === "function"; - }; - } -}); - -// node_modules/@antv/util/lib/each.js -var require_each = __commonJS({ - "node_modules/@antv/util/lib/each.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var is_object_1 = require_is_object(); - function each168(elements, func) { - if (!elements) { - return; - } - var rst; - if (is_array_1.default(elements)) { - for (var i4 = 0, len5 = elements.length; i4 < len5; i4++) { - rst = func(elements[i4], i4); - if (rst === false) { - break; - } - } - } else if (is_object_1.default(elements)) { - for (var k4 in elements) { - if (elements.hasOwnProperty(k4)) { - rst = func(elements[k4], k4); - if (rst === false) { - break; - } - } - } - } - } - exports.default = each168; - } -}); - -// node_modules/@antv/util/lib/keys.js -var require_keys = __commonJS({ - "node_modules/@antv/util/lib/keys.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var each_1 = require_each(); - var is_function_1 = require_is_function(); - var keys6 = Object.keys ? function(obj) { - return Object.keys(obj); - } : function(obj) { - var result = []; - each_1.default(obj, function(value2, key) { - if (!(is_function_1.default(obj) && key === "prototype")) { - result.push(key); - } - }); - return result; - }; - exports.default = keys6; - } -}); - -// node_modules/@antv/util/lib/is-match.js -var require_is_match = __commonJS({ - "node_modules/@antv/util/lib/is-match.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_nil_1 = require_is_nil(); - var keys_1 = require_keys(); - function isMatch2(obj, attrs) { - var _keys = keys_1.default(attrs); - var length5 = _keys.length; - if (is_nil_1.default(obj)) - return !length5; - for (var i4 = 0; i4 < length5; i4 += 1) { - var key = _keys[i4]; - if (attrs[key] !== obj[key] || !(key in obj)) { - return false; - } - } - return true; - } - exports.default = isMatch2; - } -}); - -// node_modules/@antv/util/lib/is-object-like.js -var require_is_object_like = __commonJS({ - "node_modules/@antv/util/lib/is-object-like.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var isObjectLike5 = function(value2) { - return typeof value2 === "object" && value2 !== null; - }; - exports.default = isObjectLike5; - } -}); - -// node_modules/@antv/util/lib/is-plain-object.js -var require_is_plain_object = __commonJS({ - "node_modules/@antv/util/lib/is-plain-object.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_object_like_1 = require_is_object_like(); - var is_type_1 = require_is_type(); - var isPlainObject10 = function(value2) { - if (!is_object_like_1.default(value2) || !is_type_1.default(value2, "Object")) { - return false; - } - if (Object.getPrototypeOf(value2) === null) { - return true; - } - var proto = value2; - while (Object.getPrototypeOf(proto) !== null) { - proto = Object.getPrototypeOf(proto); - } - return Object.getPrototypeOf(value2) === proto; - }; - exports.default = isPlainObject10; - } -}); - -// node_modules/@antv/util/lib/find.js -var require_find = __commonJS({ - "node_modules/@antv/util/lib/find.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_function_1 = require_is_function(); - var is_match_1 = require_is_match(); - var is_array_1 = require_is_array(); - var is_plain_object_1 = require_is_plain_object(); - function find11(arr, predicate) { - if (!is_array_1.default(arr)) - return null; - var _predicate; - if (is_function_1.default(predicate)) { - _predicate = predicate; - } - if (is_plain_object_1.default(predicate)) { - _predicate = function(a4) { - return is_match_1.default(a4, predicate); - }; - } - if (_predicate) { - for (var i4 = 0; i4 < arr.length; i4 += 1) { - if (_predicate(arr[i4])) { - return arr[i4]; - } - } - } - return null; - } - exports.default = find11; - } -}); - -// node_modules/@antv/util/lib/find-index.js -var require_find_index = __commonJS({ - "node_modules/@antv/util/lib/find-index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - function findIndex3(arr, predicate, fromIndex) { - if (fromIndex === void 0) { - fromIndex = 0; - } - for (var i4 = fromIndex; i4 < arr.length; i4++) { - if (predicate(arr[i4], i4)) { - return i4; - } - } - return -1; - } - exports.default = findIndex3; - } -}); - -// node_modules/@antv/util/lib/first-value.js -var require_first_value = __commonJS({ - "node_modules/@antv/util/lib/first-value.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_nil_1 = require_is_nil(); - var is_array_1 = require_is_array(); - var firstValue2 = function(data3, name) { - var rst = null; - for (var i4 = 0; i4 < data3.length; i4++) { - var obj = data3[i4]; - var value2 = obj[name]; - if (!is_nil_1.default(value2)) { - if (is_array_1.default(value2)) { - rst = value2[0]; - } else { - rst = value2; - } - break; - } - } - return rst; - }; - exports.default = firstValue2; - } -}); - -// node_modules/@antv/util/lib/flatten.js -var require_flatten = __commonJS({ - "node_modules/@antv/util/lib/flatten.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var flatten9 = function(arr) { - if (!is_array_1.default(arr)) { - return []; - } - var rst = []; - for (var i4 = 0; i4 < arr.length; i4++) { - rst = rst.concat(arr[i4]); - } - return rst; - }; - exports.default = flatten9; - } -}); - -// node_modules/@antv/util/lib/flatten-deep.js -var require_flatten_deep = __commonJS({ - "node_modules/@antv/util/lib/flatten-deep.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var flattenDeep = function(arr, result) { - if (result === void 0) { - result = []; - } - if (!is_array_1.default(arr)) { - result.push(arr); - } else { - for (var i4 = 0; i4 < arr.length; i4 += 1) { - flattenDeep(arr[i4], result); - } - } - return result; - }; - exports.default = flattenDeep; - } -}); - -// node_modules/@antv/util/lib/max.js -var require_max = __commonJS({ - "node_modules/@antv/util/lib/max.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - exports.default = function(arr) { - if (!is_array_1.default(arr)) { - return void 0; - } - return arr.reduce(function(prev, curr) { - return Math.max(prev, curr); - }, arr[0]); - }; - } -}); - -// node_modules/@antv/util/lib/min.js -var require_min = __commonJS({ - "node_modules/@antv/util/lib/min.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - exports.default = function(arr) { - if (!is_array_1.default(arr)) { - return void 0; - } - return arr.reduce(function(prev, curr) { - return Math.min(prev, curr); - }, arr[0]); - }; - } -}); - -// node_modules/@antv/util/lib/get-range.js -var require_get_range = __commonJS({ - "node_modules/@antv/util/lib/get-range.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var max_1 = require_max(); - var min_1 = require_min(); - var getRange3 = function(values4) { - var filterValues = values4.filter(function(v3) { - return !isNaN(v3); - }); - if (!filterValues.length) { - return { - min: 0, - max: 0 - }; - } - if (is_array_1.default(values4[0])) { - var tmp = []; - for (var i4 = 0; i4 < values4.length; i4++) { - tmp = tmp.concat(values4[i4]); - } - filterValues = tmp; - } - var max15 = max_1.default(filterValues); - var min13 = min_1.default(filterValues); - return { - min: min13, - max: max15 - }; - }; - exports.default = getRange3; - } -}); - -// node_modules/@antv/util/lib/pull.js -var require_pull = __commonJS({ - "node_modules/@antv/util/lib/pull.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var arrPrototype = Array.prototype; - var splice = arrPrototype.splice; - var indexOf2 = arrPrototype.indexOf; - var pull = function(arr) { - var values4 = []; - for (var _i = 1; _i < arguments.length; _i++) { - values4[_i - 1] = arguments[_i]; - } - for (var i4 = 0; i4 < values4.length; i4++) { - var value2 = values4[i4]; - var fromIndex = -1; - while ((fromIndex = indexOf2.call(arr, value2)) > -1) { - splice.call(arr, fromIndex, 1); - } - } - return arr; - }; - exports.default = pull; - } -}); - -// node_modules/@antv/util/lib/pull-at.js -var require_pull_at = __commonJS({ - "node_modules/@antv/util/lib/pull-at.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_like_1 = require_is_array_like(); - var splice = Array.prototype.splice; - var pullAt = function pullAt2(arr, indexes) { - if (!is_array_like_1.default(arr)) { - return []; - } - var length5 = arr ? indexes.length : 0; - var last17 = length5 - 1; - while (length5--) { - var previous = void 0; - var index2 = indexes[length5]; - if (length5 === last17 || index2 !== previous) { - previous = index2; - splice.call(arr, index2, 1); - } - } - return arr; - }; - exports.default = pullAt; - } -}); - -// node_modules/@antv/util/lib/reduce.js -var require_reduce = __commonJS({ - "node_modules/@antv/util/lib/reduce.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var each_1 = require_each(); - var is_array_1 = require_is_array(); - var is_plain_object_1 = require_is_plain_object(); - var reduce11 = function(arr, fn, init) { - if (!is_array_1.default(arr) && !is_plain_object_1.default(arr)) { - return arr; - } - var result = init; - each_1.default(arr, function(data3, i4) { - result = fn(result, data3, i4); - }); - return result; - }; - exports.default = reduce11; - } -}); - -// node_modules/@antv/util/lib/remove.js -var require_remove = __commonJS({ - "node_modules/@antv/util/lib/remove.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_like_1 = require_is_array_like(); - var pull_at_1 = require_pull_at(); - var remove2 = function(arr, predicate) { - var result = []; - if (!is_array_like_1.default(arr)) { - return result; - } - var i4 = -1; - var indexes = []; - var length5 = arr.length; - while (++i4 < length5) { - var value2 = arr[i4]; - if (predicate(value2, i4, arr)) { - result.push(value2); - indexes.push(i4); - } - } - pull_at_1.default(arr, indexes); - return result; - }; - exports.default = remove2; - } -}); - -// node_modules/@antv/util/lib/is-string.js -var require_is_string = __commonJS({ - "node_modules/@antv/util/lib/is-string.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_type_1 = require_is_type(); - exports.default = function(str8) { - return is_type_1.default(str8, "String"); - }; - } -}); - -// node_modules/@antv/util/lib/sort-by.js -var require_sort_by = __commonJS({ - "node_modules/@antv/util/lib/sort-by.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var is_string_1 = require_is_string(); - var is_function_1 = require_is_function(); - function sortBy2(arr, key) { - var comparer; - if (is_function_1.default(key)) { - comparer = function(a4, b10) { - return key(a4) - key(b10); - }; - } else { - var keys_1 = []; - if (is_string_1.default(key)) { - keys_1.push(key); - } else if (is_array_1.default(key)) { - keys_1 = key; - } - comparer = function(a4, b10) { - for (var i4 = 0; i4 < keys_1.length; i4 += 1) { - var prop = keys_1[i4]; - if (a4[prop] > b10[prop]) { - return 1; - } - if (a4[prop] < b10[prop]) { - return -1; - } - } - return 0; - }; - } - arr.sort(comparer); - return arr; - } - exports.default = sortBy2; - } -}); - -// node_modules/@antv/util/lib/uniq.js -var require_uniq = __commonJS({ - "node_modules/@antv/util/lib/uniq.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - function uniq10(arr, cache3) { - if (cache3 === void 0) { - cache3 = new Map(); - } - var r4 = []; - if (Array.isArray(arr)) { - for (var i4 = 0, len5 = arr.length; i4 < len5; i4++) { - var item = arr[i4]; - if (!cache3.has(item)) { - r4.push(item); - cache3.set(item, true); - } - } - } - return r4; - } - exports.default = uniq10; - } -}); - -// node_modules/@antv/util/lib/union.js -var require_union = __commonJS({ - "node_modules/@antv/util/lib/union.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var uniq_1 = require_uniq(); - var union = function() { - var sources = []; - for (var _i = 0; _i < arguments.length; _i++) { - sources[_i] = arguments[_i]; - } - return uniq_1.default([].concat.apply([], sources)); - }; - exports.default = union; - } -}); - -// node_modules/@antv/util/lib/values-of-key.js -var require_values_of_key = __commonJS({ - "node_modules/@antv/util/lib/values-of-key.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var is_nil_1 = require_is_nil(); - exports.default = function(data3, name) { - var rst = []; - var tmpMap = {}; - for (var i4 = 0; i4 < data3.length; i4++) { - var obj = data3[i4]; - var value2 = obj[name]; - if (!is_nil_1.default(value2)) { - if (!is_array_1.default(value2)) { - value2 = [value2]; - } - for (var j4 = 0; j4 < value2.length; j4++) { - var val = value2[j4]; - if (!tmpMap[val]) { - rst.push(val); - tmpMap[val] = true; - } - } - } - } - return rst; - }; - } -}); - -// node_modules/@antv/util/lib/head.js -var require_head = __commonJS({ - "node_modules/@antv/util/lib/head.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_like_1 = require_is_array_like(); - function head13(o3) { - if (is_array_like_1.default(o3)) { - return o3[0]; - } - return void 0; - } - exports.default = head13; - } -}); - -// node_modules/@antv/util/lib/last.js -var require_last = __commonJS({ - "node_modules/@antv/util/lib/last.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_like_1 = require_is_array_like(); - function last17(o3) { - if (is_array_like_1.default(o3)) { - var arr = o3; - return arr[arr.length - 1]; - } - return void 0; - } - exports.default = last17; - } -}); - -// node_modules/@antv/util/lib/starts-with.js -var require_starts_with = __commonJS({ - "node_modules/@antv/util/lib/starts-with.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var is_string_1 = require_is_string(); - function startsWith(arr, e4) { - return is_array_1.default(arr) || is_string_1.default(arr) ? arr[0] === e4 : false; - } - exports.default = startsWith; - } -}); - -// node_modules/@antv/util/lib/ends-with.js -var require_ends_with = __commonJS({ - "node_modules/@antv/util/lib/ends-with.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var is_string_1 = require_is_string(); - function endsWith(arr, e4) { - return is_array_1.default(arr) || is_string_1.default(arr) ? arr[arr.length - 1] === e4 : false; - } - exports.default = endsWith; - } -}); - -// node_modules/@antv/util/lib/every.js -var require_every = __commonJS({ - "node_modules/@antv/util/lib/every.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var every4 = function(arr, func) { - for (var i4 = 0; i4 < arr.length; i4++) { - if (!func(arr[i4], i4)) - return false; - } - return true; - }; - exports.default = every4; - } -}); - -// node_modules/@antv/util/lib/some.js -var require_some = __commonJS({ - "node_modules/@antv/util/lib/some.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var some5 = function(arr, func) { - for (var i4 = 0; i4 < arr.length; i4++) { - if (func(arr[i4], i4)) - return true; - } - return false; - }; - exports.default = some5; - } -}); - -// node_modules/@antv/util/lib/group-by.js -var require_group_by = __commonJS({ - "node_modules/@antv/util/lib/group-by.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var is_function_1 = require_is_function(); - var hasOwnProperty = Object.prototype.hasOwnProperty; - function groupBy12(data3, condition) { - if (!condition || !is_array_1.default(data3)) { - return {}; - } - var result = {}; - var predicate = is_function_1.default(condition) ? condition : function(item2) { - return item2[condition]; - }; - var key; - for (var i4 = 0; i4 < data3.length; i4++) { - var item = data3[i4]; - key = predicate(item); - if (hasOwnProperty.call(result, key)) { - result[key].push(item); - } else { - result[key] = [item]; - } - } - return result; - } - exports.default = groupBy12; - } -}); - -// node_modules/@antv/util/lib/group-to-map.js -var require_group_to_map = __commonJS({ - "node_modules/@antv/util/lib/group-to-map.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var is_function_1 = require_is_function(); - var group_by_1 = require_group_by(); - function groupToMap2(data3, condition) { - if (!condition) { - return { - 0: data3 - }; - } - if (!is_function_1.default(condition)) { - var paramscondition_1 = is_array_1.default(condition) ? condition : condition.replace(/\s+/g, "").split("*"); - condition = function(row) { - var unique = "_"; - for (var i4 = 0, l4 = paramscondition_1.length; i4 < l4; i4++) { - unique += row[paramscondition_1[i4]] && row[paramscondition_1[i4]].toString(); - } - return unique; - }; - } - return group_by_1.default(data3, condition); - } - exports.default = groupToMap2; - } -}); - -// node_modules/@antv/util/lib/group.js -var require_group = __commonJS({ - "node_modules/@antv/util/lib/group.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var group_to_map_1 = require_group_to_map(); - exports.default = function(data3, condition) { - if (!condition) { - return [data3]; - } - var groups = group_to_map_1.default(data3, condition); - var array = []; - for (var i4 in groups) { - array.push(groups[i4]); - } - return array; - }; - } -}); - -// node_modules/@antv/util/lib/get-wrap-behavior.js -var require_get_wrap_behavior = __commonJS({ - "node_modules/@antv/util/lib/get-wrap-behavior.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - function getWrapBehavior(obj, action) { - return obj["_wrap_" + action]; - } - exports.default = getWrapBehavior; - } -}); - -// node_modules/@antv/util/lib/wrap-behavior.js -var require_wrap_behavior = __commonJS({ - "node_modules/@antv/util/lib/wrap-behavior.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - function wrapBehavior4(obj, action) { - if (obj["_wrap_" + action]) { - return obj["_wrap_" + action]; - } - var method = function(e4) { - obj[action](e4); - }; - obj["_wrap_" + action] = method; - return method; - } - exports.default = wrapBehavior4; - } -}); - -// node_modules/@antv/util/lib/number2color.js -var require_number2color = __commonJS({ - "node_modules/@antv/util/lib/number2color.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var numColorCache = {}; - function numberToColor(num) { - var color4 = numColorCache[num]; - if (!color4) { - var str8 = num.toString(16); - for (var i4 = str8.length; i4 < 6; i4++) { - str8 = "0" + str8; - } - color4 = "#" + str8; - numColorCache[num] = color4; - } - return color4; - } - exports.default = numberToColor; - } -}); - -// node_modules/@antv/util/lib/parse-radius.js -var require_parse_radius = __commonJS({ - "node_modules/@antv/util/lib/parse-radius.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - function parseRadius4(radius) { - var r1 = 0, r22 = 0, r32 = 0, r4 = 0; - if (is_array_1.default(radius)) { - if (radius.length === 1) { - r1 = r22 = r32 = r4 = radius[0]; - } else if (radius.length === 2) { - r1 = r32 = radius[0]; - r22 = r4 = radius[1]; - } else if (radius.length === 3) { - r1 = radius[0]; - r22 = r4 = radius[1]; - r32 = radius[2]; - } else { - r1 = radius[0]; - r22 = radius[1]; - r32 = radius[2]; - r4 = radius[3]; - } - } else { - r1 = r22 = r32 = r4 = radius; - } - return { - r1, - r2: r22, - r3: r32, - r4 - }; - } - exports.default = parseRadius4; - } -}); - -// node_modules/@antv/util/lib/clamp.js -var require_clamp = __commonJS({ - "node_modules/@antv/util/lib/clamp.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var clamp12 = function(a4, min13, max15) { - if (a4 < min13) { - return min13; - } else if (a4 > max15) { - return max15; - } - return a4; - }; - exports.default = clamp12; - } -}); - -// node_modules/@antv/util/lib/fixed-base.js -var require_fixed_base = __commonJS({ - "node_modules/@antv/util/lib/fixed-base.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var fixedBase2 = function(v3, base) { - var str8 = base.toString(); - var index2 = str8.indexOf("."); - if (index2 === -1) { - return Math.round(v3); - } - var length5 = str8.substr(index2 + 1).length; - if (length5 > 20) { - length5 = 20; - } - return parseFloat(v3.toFixed(length5)); - }; - exports.default = fixedBase2; - } -}); - -// node_modules/@antv/util/lib/is-number.js -var require_is_number = __commonJS({ - "node_modules/@antv/util/lib/is-number.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_type_1 = require_is_type(); - var isNumber57 = function(value2) { - return is_type_1.default(value2, "Number"); - }; - exports.default = isNumber57; - } -}); - -// node_modules/@antv/util/lib/is-decimal.js -var require_is_decimal = __commonJS({ - "node_modules/@antv/util/lib/is-decimal.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_number_1 = require_is_number(); - var isDecimal = function(num) { - return is_number_1.default(num) && num % 1 !== 0; - }; - exports.default = isDecimal; - } -}); - -// node_modules/@antv/util/lib/is-even.js -var require_is_even = __commonJS({ - "node_modules/@antv/util/lib/is-even.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_number_1 = require_is_number(); - var isEven = function(num) { - return is_number_1.default(num) && num % 2 === 0; - }; - exports.default = isEven; - } -}); - -// node_modules/@antv/util/lib/is-integer.js -var require_is_integer = __commonJS({ - "node_modules/@antv/util/lib/is-integer.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_number_1 = require_is_number(); - var isInteger2 = Number.isInteger ? Number.isInteger : function(num) { - return is_number_1.default(num) && num % 1 === 0; - }; - exports.default = isInteger2; - } -}); - -// node_modules/@antv/util/lib/is-negative.js -var require_is_negative = __commonJS({ - "node_modules/@antv/util/lib/is-negative.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_number_1 = require_is_number(); - var isNegative = function(num) { - return is_number_1.default(num) && num < 0; - }; - exports.default = isNegative; - } -}); - -// node_modules/@antv/util/lib/is-number-equal.js -var require_is_number_equal = __commonJS({ - "node_modules/@antv/util/lib/is-number-equal.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var PRECISION = 1e-5; - function isNumberEqual11(a4, b10, precision) { - if (precision === void 0) { - precision = PRECISION; - } - return Math.abs(a4 - b10) < precision; - } - exports.default = isNumberEqual11; - } -}); - -// node_modules/@antv/util/lib/is-odd.js -var require_is_odd = __commonJS({ - "node_modules/@antv/util/lib/is-odd.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_number_1 = require_is_number(); - var isOdd = function(num) { - return is_number_1.default(num) && num % 2 !== 0; - }; - exports.default = isOdd; - } -}); - -// node_modules/@antv/util/lib/is-positive.js -var require_is_positive = __commonJS({ - "node_modules/@antv/util/lib/is-positive.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_number_1 = require_is_number(); - var isPositive = function(num) { - return is_number_1.default(num) && num > 0; - }; - exports.default = isPositive; - } -}); - -// node_modules/@antv/util/lib/max-by.js -var require_max_by = __commonJS({ - "node_modules/@antv/util/lib/max-by.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var is_function_1 = require_is_function(); - exports.default = function(arr, fn) { - if (!is_array_1.default(arr)) { - return void 0; - } - var maxItem; - var max15 = -Infinity; - for (var i4 = 0; i4 < arr.length; i4++) { - var item = arr[i4]; - var v3 = is_function_1.default(fn) ? fn(item) : item[fn]; - if (v3 > max15) { - maxItem = item; - max15 = v3; - } - } - return maxItem; - }; - } -}); - -// node_modules/@antv/util/lib/min-by.js -var require_min_by = __commonJS({ - "node_modules/@antv/util/lib/min-by.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var is_function_1 = require_is_function(); - exports.default = function(arr, fn) { - if (!is_array_1.default(arr)) { - return void 0; - } - var minItem; - var min13 = Infinity; - for (var i4 = 0; i4 < arr.length; i4++) { - var item = arr[i4]; - var v3 = is_function_1.default(fn) ? fn(item) : item[fn]; - if (v3 < min13) { - minItem = item; - min13 = v3; - } - } - return minItem; - }; - } -}); - -// node_modules/@antv/util/lib/mod.js -var require_mod = __commonJS({ - "node_modules/@antv/util/lib/mod.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var mod5 = function(n3, m4) { - return (n3 % m4 + m4) % m4; - }; - exports.default = mod5; - } -}); - -// node_modules/@antv/util/lib/to-degree.js -var require_to_degree = __commonJS({ - "node_modules/@antv/util/lib/to-degree.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var DEGREE = 180 / Math.PI; - var toDegree = function(radian) { - return DEGREE * radian; - }; - exports.default = toDegree; - } -}); - -// node_modules/@antv/util/lib/to-integer.js -var require_to_integer = __commonJS({ - "node_modules/@antv/util/lib/to-integer.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.default = parseInt; - } -}); - -// node_modules/@antv/util/lib/to-radian.js -var require_to_radian = __commonJS({ - "node_modules/@antv/util/lib/to-radian.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var RADIAN = Math.PI / 180; - var toRadian4 = function(degree4) { - return RADIAN * degree4; - }; - exports.default = toRadian4; - } -}); - -// node_modules/@antv/util/lib/for-in.js -var require_for_in = __commonJS({ - "node_modules/@antv/util/lib/for-in.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var each_1 = require_each(); - exports.default = each_1.default; - } -}); - -// node_modules/@antv/util/lib/has.js -var require_has = __commonJS({ - "node_modules/@antv/util/lib/has.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.default = function(obj, key) { - return obj.hasOwnProperty(key); - }; - } -}); - -// node_modules/@antv/util/lib/has-key.js -var require_has_key = __commonJS({ - "node_modules/@antv/util/lib/has-key.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var has_1 = require_has(); - exports.default = has_1.default; - } -}); - -// node_modules/@antv/util/lib/values.js -var require_values = __commonJS({ - "node_modules/@antv/util/lib/values.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var each_1 = require_each(); - var is_function_1 = require_is_function(); - var values4 = Object.values ? function(obj) { - return Object.values(obj); - } : function(obj) { - var result = []; - each_1.default(obj, function(value2, key) { - if (!(is_function_1.default(obj) && key === "prototype")) { - result.push(value2); - } - }); - return result; - }; - exports.default = values4; - } -}); - -// node_modules/@antv/util/lib/has-value.js -var require_has_value = __commonJS({ - "node_modules/@antv/util/lib/has-value.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var contains_1 = require_contains(); - var values_1 = require_values(); - exports.default = function(obj, value2) { - return contains_1.default(values_1.default(obj), value2); - }; - } -}); - -// node_modules/@antv/util/lib/to-string.js -var require_to_string = __commonJS({ - "node_modules/@antv/util/lib/to-string.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_nil_1 = require_is_nil(); - exports.default = function(value2) { - if (is_nil_1.default(value2)) - return ""; - return value2.toString(); - }; - } -}); - -// node_modules/@antv/util/lib/lower-case.js -var require_lower_case = __commonJS({ - "node_modules/@antv/util/lib/lower-case.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var to_string_1 = require_to_string(); - var lowerCase4 = function(str8) { - return to_string_1.default(str8).toLowerCase(); - }; - exports.default = lowerCase4; - } -}); - -// node_modules/@antv/util/lib/lower-first.js -var require_lower_first = __commonJS({ - "node_modules/@antv/util/lib/lower-first.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var to_string_1 = require_to_string(); - var lowerFirst = function(value2) { - var str8 = to_string_1.default(value2); - return str8.charAt(0).toLowerCase() + str8.substring(1); - }; - exports.default = lowerFirst; - } -}); - -// node_modules/@antv/util/lib/substitute.js -var require_substitute = __commonJS({ - "node_modules/@antv/util/lib/substitute.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - function substitute5(str8, o3) { - if (!str8 || !o3) { - return str8; - } - return str8.replace(/\\?\{([^{}]+)\}/g, function(match, name) { - if (match.charAt(0) === "\\") { - return match.slice(1); - } - return o3[name] === void 0 ? "" : o3[name]; - }); - } - exports.default = substitute5; - } -}); - -// node_modules/@antv/util/lib/upper-case.js -var require_upper_case = __commonJS({ - "node_modules/@antv/util/lib/upper-case.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var to_string_1 = require_to_string(); - var upperCase = function(str8) { - return to_string_1.default(str8).toUpperCase(); - }; - exports.default = upperCase; - } -}); - -// node_modules/@antv/util/lib/upper-first.js -var require_upper_first = __commonJS({ - "node_modules/@antv/util/lib/upper-first.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var to_string_1 = require_to_string(); - var upperFirst8 = function(value2) { - var str8 = to_string_1.default(value2); - return str8.charAt(0).toUpperCase() + str8.substring(1); - }; - exports.default = upperFirst8; - } -}); - -// node_modules/@antv/util/lib/get-type.js -var require_get_type = __commonJS({ - "node_modules/@antv/util/lib/get-type.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var toString7 = {}.toString; - var getType2 = function(value2) { - return toString7.call(value2).replace(/^\[object /, "").replace(/]$/, ""); - }; - exports.default = getType2; - } -}); - -// node_modules/@antv/util/lib/is-arguments.js -var require_is_arguments = __commonJS({ - "node_modules/@antv/util/lib/is-arguments.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_type_1 = require_is_type(); - var isArguments = function(value2) { - return is_type_1.default(value2, "Arguments"); - }; - exports.default = isArguments; - } -}); - -// node_modules/@antv/util/lib/is-boolean.js -var require_is_boolean = __commonJS({ - "node_modules/@antv/util/lib/is-boolean.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_type_1 = require_is_type(); - var isBoolean10 = function(value2) { - return is_type_1.default(value2, "Boolean"); - }; - exports.default = isBoolean10; - } -}); - -// node_modules/@antv/util/lib/is-date.js -var require_is_date = __commonJS({ - "node_modules/@antv/util/lib/is-date.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_type_1 = require_is_type(); - var isDate3 = function(value2) { - return is_type_1.default(value2, "Date"); - }; - exports.default = isDate3; - } -}); - -// node_modules/@antv/util/lib/is-error.js -var require_is_error = __commonJS({ - "node_modules/@antv/util/lib/is-error.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_type_1 = require_is_type(); - var isError = function(value2) { - return is_type_1.default(value2, "Error"); - }; - exports.default = isError; - } -}); - -// node_modules/@antv/util/lib/is-finite.js -var require_is_finite = __commonJS({ - "node_modules/@antv/util/lib/is-finite.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_number_1 = require_is_number(); - function default_1(value2) { - return is_number_1.default(value2) && isFinite(value2); - } - exports.default = default_1; - } -}); - -// node_modules/@antv/util/lib/is-null.js -var require_is_null = __commonJS({ - "node_modules/@antv/util/lib/is-null.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var isNull3 = function(value2) { - return value2 === null; - }; - exports.default = isNull3; - } -}); - -// node_modules/@antv/util/lib/is-prototype.js -var require_is_prototype = __commonJS({ - "node_modules/@antv/util/lib/is-prototype.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var objectProto4 = Object.prototype; - var isPrototype = function(value2) { - var Ctor = value2 && value2.constructor; - var proto = typeof Ctor === "function" && Ctor.prototype || objectProto4; - return value2 === proto; - }; - exports.default = isPrototype; - } -}); - -// node_modules/@antv/util/lib/is-reg-exp.js -var require_is_reg_exp = __commonJS({ - "node_modules/@antv/util/lib/is-reg-exp.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_type_1 = require_is_type(); - var isRegExp = function(str8) { - return is_type_1.default(str8, "RegExp"); - }; - exports.default = isRegExp; - } -}); - -// node_modules/@antv/util/lib/is-undefined.js -var require_is_undefined = __commonJS({ - "node_modules/@antv/util/lib/is-undefined.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var isUndefined5 = function(value2) { - return value2 === void 0; - }; - exports.default = isUndefined5; - } -}); - -// node_modules/@antv/util/lib/is-element.js -var require_is_element = __commonJS({ - "node_modules/@antv/util/lib/is-element.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var isElement3 = function(o3) { - return o3 instanceof Element || o3 instanceof HTMLDocument; - }; - exports.default = isElement3; - } -}); - -// node_modules/@antv/util/lib/request-animation-frame.js -var require_request_animation_frame = __commonJS({ - "node_modules/@antv/util/lib/request-animation-frame.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - function requestAnimationFrame4(fn) { - var method = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.msRequestAnimationFrame || function(f3) { - return setTimeout(f3, 16); - }; - return method(fn); - } - exports.default = requestAnimationFrame4; - } -}); - -// node_modules/@antv/util/lib/clear-animation-frame.js -var require_clear_animation_frame = __commonJS({ - "node_modules/@antv/util/lib/clear-animation-frame.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - function cancelAnimationFrame3(handler) { - var method = window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.msCancelAnimationFrame || clearTimeout; - method(handler); - } - exports.default = cancelAnimationFrame3; - } -}); - -// node_modules/@antv/util/lib/mix.js -var require_mix = __commonJS({ - "node_modules/@antv/util/lib/mix.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - function _mix(dist4, obj) { - for (var key in obj) { - if (obj.hasOwnProperty(key) && key !== "constructor" && obj[key] !== void 0) { - dist4[key] = obj[key]; - } - } - } - function mix31(dist4, src1, src2, src3) { - if (src1) - _mix(dist4, src1); - if (src2) - _mix(dist4, src2); - if (src3) - _mix(dist4, src3); - return dist4; - } - exports.default = mix31; - } -}); - -// node_modules/@antv/util/lib/augment.js -var require_augment = __commonJS({ - "node_modules/@antv/util/lib/augment.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var mix_1 = require_mix(); - var is_function_1 = require_is_function(); - var augment = function() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var c5 = args[0]; - for (var i4 = 1; i4 < args.length; i4++) { - var obj = args[i4]; - if (is_function_1.default(obj)) { - obj = obj.prototype; - } - mix_1.default(c5.prototype, obj); - } - }; - exports.default = augment; - } -}); - -// node_modules/@antv/util/lib/clone.js -var require_clone = __commonJS({ - "node_modules/@antv/util/lib/clone.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var clone41 = function(obj) { - if (typeof obj !== "object" || obj === null) { - return obj; - } - var rst; - if (is_array_1.default(obj)) { - rst = []; - for (var i4 = 0, l4 = obj.length; i4 < l4; i4++) { - if (typeof obj[i4] === "object" && obj[i4] != null) { - rst[i4] = clone41(obj[i4]); - } else { - rst[i4] = obj[i4]; - } - } - } else { - rst = {}; - for (var k4 in obj) { - if (typeof obj[k4] === "object" && obj[k4] != null) { - rst[k4] = clone41(obj[k4]); - } else { - rst[k4] = obj[k4]; - } - } - } - return rst; - }; - exports.default = clone41; - } -}); - -// node_modules/@antv/util/lib/debounce.js -var require_debounce = __commonJS({ - "node_modules/@antv/util/lib/debounce.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - function debounce5(func, wait, immediate) { - var timeout2; - return function() { - var context = this, args = arguments; - var later = function() { - timeout2 = null; - if (!immediate) { - func.apply(context, args); - } - }; - var callNow = immediate && !timeout2; - clearTimeout(timeout2); - timeout2 = setTimeout(later, wait); - if (callNow) { - func.apply(context, args); - } - }; - } - exports.default = debounce5; - } -}); - -// node_modules/@antv/util/lib/memoize.js -var require_memoize = __commonJS({ - "node_modules/@antv/util/lib/memoize.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_function_1 = require_is_function(); - exports.default = function(f3, resolver) { - if (!is_function_1.default(f3)) { - throw new TypeError("Expected a function"); - } - var memoized = function() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var key = resolver ? resolver.apply(this, args) : args[0]; - var cache3 = memoized.cache; - if (cache3.has(key)) { - return cache3.get(key); - } - var result = f3.apply(this, args); - cache3.set(key, result); - return result; - }; - memoized.cache = new Map(); - return memoized; - }; - } -}); - -// node_modules/@antv/util/lib/deep-mix.js -var require_deep_mix = __commonJS({ - "node_modules/@antv/util/lib/deep-mix.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_1 = require_is_array(); - var is_plain_object_1 = require_is_plain_object(); - var MAX_MIX_LEVEL2 = 5; - function _deepMix(dist4, src, level, maxLevel) { - level = level || 0; - maxLevel = maxLevel || MAX_MIX_LEVEL2; - for (var key in src) { - if (src.hasOwnProperty(key)) { - var value2 = src[key]; - if (value2 !== null && is_plain_object_1.default(value2)) { - if (!is_plain_object_1.default(dist4[key])) { - dist4[key] = {}; - } - if (level < maxLevel) { - _deepMix(dist4[key], value2, level + 1, maxLevel); - } else { - dist4[key] = src[key]; - } - } else if (is_array_1.default(value2)) { - dist4[key] = []; - dist4[key] = dist4[key].concat(value2); - } else if (value2 !== void 0) { - dist4[key] = value2; - } - } - } - } - var deepMix58 = function(rst) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - for (var i4 = 0; i4 < args.length; i4 += 1) { - _deepMix(rst, args[i4]); - } - return rst; - }; - exports.default = deepMix58; - } -}); - -// node_modules/@antv/util/lib/extend.js -var require_extend = __commonJS({ - "node_modules/@antv/util/lib/extend.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var mix_1 = require_mix(); - var is_function_1 = require_is_function(); - var extend4 = function(subclass, superclass, overrides, staticOverrides) { - if (!is_function_1.default(superclass)) { - overrides = superclass; - superclass = subclass; - subclass = function() { - }; - } - var create8 = Object.create ? function(proto, c5) { - return Object.create(proto, { - constructor: { - value: c5 - } - }); - } : function(proto, c5) { - function Tmp() { - } - Tmp.prototype = proto; - var o3 = new Tmp(); - o3.constructor = c5; - return o3; - }; - var superObj = create8(superclass.prototype, subclass); - subclass.prototype = mix_1.default(superObj, subclass.prototype); - subclass.superclass = create8(superclass.prototype, superclass); - mix_1.default(superObj, overrides); - mix_1.default(subclass, staticOverrides); - return subclass; - }; - exports.default = extend4; - } -}); - -// node_modules/@antv/util/lib/index-of.js -var require_index_of = __commonJS({ - "node_modules/@antv/util/lib/index-of.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_like_1 = require_is_array_like(); - var indexOf2 = function(arr, obj) { - if (!is_array_like_1.default(arr)) { - return -1; - } - var m4 = Array.prototype.indexOf; - if (m4) { - return m4.call(arr, obj); - } - var index2 = -1; - for (var i4 = 0; i4 < arr.length; i4++) { - if (arr[i4] === obj) { - index2 = i4; - break; - } - } - return index2; - }; - exports.default = indexOf2; - } -}); - -// node_modules/@antv/util/lib/is-empty.js -var require_is_empty = __commonJS({ - "node_modules/@antv/util/lib/is-empty.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_nil_1 = require_is_nil(); - var is_array_like_1 = require_is_array_like(); - var get_type_1 = require_get_type(); - var is_prototype_1 = require_is_prototype(); - var hasOwnProperty = Object.prototype.hasOwnProperty; - function isEmpty14(value2) { - if (is_nil_1.default(value2)) { - return true; - } - if (is_array_like_1.default(value2)) { - return !value2.length; - } - var type2 = get_type_1.default(value2); - if (type2 === "Map" || type2 === "Set") { - return !value2.size; - } - if (is_prototype_1.default(value2)) { - return !Object.keys(value2).length; - } - for (var key in value2) { - if (hasOwnProperty.call(value2, key)) { - return false; - } - } - return true; - } - exports.default = isEmpty14; - } -}); - -// node_modules/@antv/util/lib/is-equal.js -var require_is_equal = __commonJS({ - "node_modules/@antv/util/lib/is-equal.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_object_like_1 = require_is_object_like(); - var is_array_like_1 = require_is_array_like(); - var is_string_1 = require_is_string(); - var isEqual24 = function(value2, other2) { - if (value2 === other2) { - return true; - } - if (!value2 || !other2) { - return false; - } - if (is_string_1.default(value2) || is_string_1.default(other2)) { - return false; - } - if (is_array_like_1.default(value2) || is_array_like_1.default(other2)) { - if (value2.length !== other2.length) { - return false; - } - var rst = true; - for (var i4 = 0; i4 < value2.length; i4++) { - rst = isEqual24(value2[i4], other2[i4]); - if (!rst) { - break; - } - } - return rst; - } - if (is_object_like_1.default(value2) || is_object_like_1.default(other2)) { - var valueKeys = Object.keys(value2); - var otherKeys = Object.keys(other2); - if (valueKeys.length !== otherKeys.length) { - return false; - } - var rst = true; - for (var i4 = 0; i4 < valueKeys.length; i4++) { - rst = isEqual24(value2[valueKeys[i4]], other2[valueKeys[i4]]); - if (!rst) { - break; - } - } - return rst; - } - return false; - }; - exports.default = isEqual24; - } -}); - -// node_modules/@antv/util/lib/is-equal-with.js -var require_is_equal_with = __commonJS({ - "node_modules/@antv/util/lib/is-equal-with.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_function_1 = require_is_function(); - var is_equal_1 = require_is_equal(); - exports.default = function(value2, other2, fn) { - if (!is_function_1.default(fn)) { - return is_equal_1.default(value2, other2); - } - return !!fn(value2, other2); - }; - } -}); - -// node_modules/@antv/util/lib/map.js -var require_map = __commonJS({ - "node_modules/@antv/util/lib/map.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_like_1 = require_is_array_like(); - var map23 = function(arr, func) { - if (!is_array_like_1.default(arr)) { - return arr; - } - var result = []; - for (var index2 = 0; index2 < arr.length; index2++) { - var value2 = arr[index2]; - result.push(func(value2, index2)); - } - return result; - }; - exports.default = map23; - } -}); - -// node_modules/@antv/util/lib/map-values.js -var require_map_values = __commonJS({ - "node_modules/@antv/util/lib/map-values.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_nil_1 = require_is_nil(); - var is_object_1 = require_is_object(); - var identity4 = function(v3) { - return v3; - }; - exports.default = function(object, func) { - if (func === void 0) { - func = identity4; - } - var r4 = {}; - if (is_object_1.default(object) && !is_nil_1.default(object)) { - Object.keys(object).forEach(function(key) { - r4[key] = func(object[key], key); - }); - } - return r4; - }; - } -}); - -// node_modules/@antv/util/lib/get.js -var require_get = __commonJS({ - "node_modules/@antv/util/lib/get.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_string_1 = require_is_string(); - exports.default = function(obj, key, defaultValue) { - var p4 = 0; - var keyArr = is_string_1.default(key) ? key.split(".") : key; - while (obj && p4 < keyArr.length) { - obj = obj[keyArr[p4++]]; - } - return obj === void 0 || p4 < keyArr.length ? defaultValue : obj; - }; - } -}); - -// node_modules/@antv/util/lib/set.js -var require_set = __commonJS({ - "node_modules/@antv/util/lib/set.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_object_1 = require_is_object(); - var is_string_1 = require_is_string(); - var is_number_1 = require_is_number(); - exports.default = function(obj, path, value2) { - var o3 = obj; - var keyArr = is_string_1.default(path) ? path.split(".") : path; - keyArr.forEach(function(key, idx) { - if (idx < keyArr.length - 1) { - if (!is_object_1.default(o3[key])) { - o3[key] = is_number_1.default(keyArr[idx + 1]) ? [] : {}; - } - o3 = o3[key]; - } else { - o3[key] = value2; - } - }); - return obj; - }; - } -}); - -// node_modules/@antv/util/lib/pick.js -var require_pick = __commonJS({ - "node_modules/@antv/util/lib/pick.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var each_1 = require_each(); - var is_plain_object_1 = require_is_plain_object(); - var hasOwnProperty = Object.prototype.hasOwnProperty; - exports.default = function(object, keys6) { - if (object === null || !is_plain_object_1.default(object)) { - return {}; - } - var result = {}; - each_1.default(keys6, function(key) { - if (hasOwnProperty.call(object, key)) { - result[key] = object[key]; - } - }); - return result; - }; - } -}); - -// node_modules/@antv/util/lib/omit.js -var require_omit = __commonJS({ - "node_modules/@antv/util/lib/omit.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var reduce_1 = require_reduce(); - exports.default = function(obj, keys6) { - return reduce_1.default(obj, function(r4, curr, key) { - if (!keys6.includes(key)) { - r4[key] = curr; - } - return r4; - }, {}); - }; - } -}); - -// node_modules/@antv/util/lib/throttle.js -var require_throttle = __commonJS({ - "node_modules/@antv/util/lib/throttle.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.default = function(func, wait, options) { - var timeout2, context, args, result; - var previous = 0; - if (!options) - options = {}; - var later = function() { - previous = options.leading === false ? 0 : Date.now(); - timeout2 = null; - result = func.apply(context, args); - if (!timeout2) - context = args = null; - }; - var throttled = function() { - var now2 = Date.now(); - if (!previous && options.leading === false) - previous = now2; - var remaining = wait - (now2 - previous); - context = this; - args = arguments; - if (remaining <= 0 || remaining > wait) { - if (timeout2) { - clearTimeout(timeout2); - timeout2 = null; - } - previous = now2; - result = func.apply(context, args); - if (!timeout2) - context = args = null; - } else if (!timeout2 && options.trailing !== false) { - timeout2 = setTimeout(later, remaining); - } - return result; - }; - throttled.cancel = function() { - clearTimeout(timeout2); - previous = 0; - timeout2 = context = args = null; - }; - return throttled; - }; - } -}); - -// node_modules/@antv/util/lib/to-array.js -var require_to_array = __commonJS({ - "node_modules/@antv/util/lib/to-array.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_array_like_1 = require_is_array_like(); - exports.default = function(value2) { - return is_array_like_1.default(value2) ? Array.prototype.slice.call(value2) : []; - }; - } -}); - -// node_modules/@antv/util/lib/unique-id.js -var require_unique_id = __commonJS({ - "node_modules/@antv/util/lib/unique-id.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var map23 = {}; - exports.default = function(prefix2) { - prefix2 = prefix2 || "g"; - if (!map23[prefix2]) { - map23[prefix2] = 1; - } else { - map23[prefix2] += 1; - } - return prefix2 + map23[prefix2]; - }; - } -}); - -// node_modules/@antv/util/lib/noop.js -var require_noop = __commonJS({ - "node_modules/@antv/util/lib/noop.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.default = function() { - }; - } -}); - -// node_modules/@antv/util/lib/identity.js -var require_identity = __commonJS({ - "node_modules/@antv/util/lib/identity.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.default = function(v3) { - return v3; - }; - } -}); - -// node_modules/@antv/util/lib/size.js -var require_size = __commonJS({ - "node_modules/@antv/util/lib/size.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_nil_1 = require_is_nil(); - var is_array_like_1 = require_is_array_like(); - function size14(o3) { - if (is_nil_1.default(o3)) { - return 0; - } - if (is_array_like_1.default(o3)) { - return o3.length; - } - return Object.keys(o3).length; - } - exports.default = size14; - } -}); - -// node_modules/@antv/util/lib/measure-text-width.js -var require_measure_text_width = __commonJS({ - "node_modules/@antv/util/lib/measure-text-width.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var tslib_1 = require_tslib(); - var values_1 = require_values(); - var memoize_1 = require_memoize(); - var is_string_1 = require_is_string(); - var ctx3; - exports.default = memoize_1.default(function(text, font) { - if (font === void 0) { - font = {}; - } - var fontSize = font.fontSize, fontFamily = font.fontFamily, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant; - if (!ctx3) { - ctx3 = document.createElement("canvas").getContext("2d"); - } - ctx3.font = [fontStyle, fontVariant, fontWeight, fontSize + "px", fontFamily].join(" "); - return ctx3.measureText(is_string_1.default(text) ? text : "").width; - }, function(text, font) { - if (font === void 0) { - font = {}; - } - return tslib_1.__spreadArrays([text], values_1.default(font)).join(""); - }); - } -}); - -// node_modules/@antv/util/lib/get-ellipsis-text.js -var require_get_ellipsis_text = __commonJS({ - "node_modules/@antv/util/lib/get-ellipsis-text.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var is_string_1 = require_is_string(); - var to_string_1 = require_to_string(); - var measure_text_width_1 = require_measure_text_width(); - exports.default = function(text, maxWidth, font, str8) { - if (str8 === void 0) { - str8 = "..."; - } - var STEP = 16; - var PLACEHOLDER_WIDTH = measure_text_width_1.default(str8, font); - var leftText = !is_string_1.default(text) ? to_string_1.default(text) : text; - var leftWidth = maxWidth; - var r4 = []; - var currentText; - var currentWidth; - if (measure_text_width_1.default(text, font) <= maxWidth) { - return text; - } - while (true) { - currentText = leftText.substr(0, STEP); - currentWidth = measure_text_width_1.default(currentText, font); - if (currentWidth + PLACEHOLDER_WIDTH > leftWidth) { - if (currentWidth > leftWidth) { - break; - } - } - r4.push(currentText); - leftWidth -= currentWidth; - leftText = leftText.substr(STEP); - if (!leftText) { - return r4.join(""); - } - } - while (true) { - currentText = leftText.substr(0, 1); - currentWidth = measure_text_width_1.default(currentText, font); - if (currentWidth + PLACEHOLDER_WIDTH > leftWidth) { - break; - } - r4.push(currentText); - leftWidth -= currentWidth; - leftText = leftText.substr(1); - if (!leftText) { - return r4.join(""); - } - } - return "" + r4.join("") + str8; - }; - } -}); - -// node_modules/@antv/util/lib/cache.js -var require_cache = __commonJS({ - "node_modules/@antv/util/lib/cache.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var default_1 = function() { - function default_12() { - this.map = {}; - } - default_12.prototype.has = function(key) { - return this.map[key] !== void 0; - }; - default_12.prototype.get = function(key, def) { - var v3 = this.map[key]; - return v3 === void 0 ? def : v3; - }; - default_12.prototype.set = function(key, value2) { - this.map[key] = value2; - }; - default_12.prototype.clear = function() { - this.map = {}; - }; - default_12.prototype.delete = function(key) { - delete this.map[key]; - }; - default_12.prototype.size = function() { - return Object.keys(this.map).length; - }; - return default_12; - }(); - exports.default = default_1; - } -}); - -// node_modules/@antv/util/lib/index.js -var require_lib = __commonJS({ - "node_modules/@antv/util/lib/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var contains_1 = require_contains(); - Object.defineProperty(exports, "contains", { enumerable: true, get: function() { - return contains_1.default; - } }); - Object.defineProperty(exports, "includes", { enumerable: true, get: function() { - return contains_1.default; - } }); - var difference_1 = require_difference(); - Object.defineProperty(exports, "difference", { enumerable: true, get: function() { - return difference_1.default; - } }); - var find_1 = require_find(); - Object.defineProperty(exports, "find", { enumerable: true, get: function() { - return find_1.default; - } }); - var find_index_1 = require_find_index(); - Object.defineProperty(exports, "findIndex", { enumerable: true, get: function() { - return find_index_1.default; - } }); - var first_value_1 = require_first_value(); - Object.defineProperty(exports, "firstValue", { enumerable: true, get: function() { - return first_value_1.default; - } }); - var flatten_1 = require_flatten(); - Object.defineProperty(exports, "flatten", { enumerable: true, get: function() { - return flatten_1.default; - } }); - var flatten_deep_1 = require_flatten_deep(); - Object.defineProperty(exports, "flattenDeep", { enumerable: true, get: function() { - return flatten_deep_1.default; - } }); - var get_range_1 = require_get_range(); - Object.defineProperty(exports, "getRange", { enumerable: true, get: function() { - return get_range_1.default; - } }); - var pull_1 = require_pull(); - Object.defineProperty(exports, "pull", { enumerable: true, get: function() { - return pull_1.default; - } }); - var pull_at_1 = require_pull_at(); - Object.defineProperty(exports, "pullAt", { enumerable: true, get: function() { - return pull_at_1.default; - } }); - var reduce_1 = require_reduce(); - Object.defineProperty(exports, "reduce", { enumerable: true, get: function() { - return reduce_1.default; - } }); - var remove_1 = require_remove(); - Object.defineProperty(exports, "remove", { enumerable: true, get: function() { - return remove_1.default; - } }); - var sort_by_1 = require_sort_by(); - Object.defineProperty(exports, "sortBy", { enumerable: true, get: function() { - return sort_by_1.default; - } }); - var union_1 = require_union(); - Object.defineProperty(exports, "union", { enumerable: true, get: function() { - return union_1.default; - } }); - var uniq_1 = require_uniq(); - Object.defineProperty(exports, "uniq", { enumerable: true, get: function() { - return uniq_1.default; - } }); - var values_of_key_1 = require_values_of_key(); - Object.defineProperty(exports, "valuesOfKey", { enumerable: true, get: function() { - return values_of_key_1.default; - } }); - var head_1 = require_head(); - Object.defineProperty(exports, "head", { enumerable: true, get: function() { - return head_1.default; - } }); - var last_1 = require_last(); - Object.defineProperty(exports, "last", { enumerable: true, get: function() { - return last_1.default; - } }); - var starts_with_1 = require_starts_with(); - Object.defineProperty(exports, "startsWith", { enumerable: true, get: function() { - return starts_with_1.default; - } }); - var ends_with_1 = require_ends_with(); - Object.defineProperty(exports, "endsWith", { enumerable: true, get: function() { - return ends_with_1.default; - } }); - var filter_1 = require_filter(); - Object.defineProperty(exports, "filter", { enumerable: true, get: function() { - return filter_1.default; - } }); - var every_1 = require_every(); - Object.defineProperty(exports, "every", { enumerable: true, get: function() { - return every_1.default; - } }); - var some_1 = require_some(); - Object.defineProperty(exports, "some", { enumerable: true, get: function() { - return some_1.default; - } }); - var group_1 = require_group(); - Object.defineProperty(exports, "group", { enumerable: true, get: function() { - return group_1.default; - } }); - var group_by_1 = require_group_by(); - Object.defineProperty(exports, "groupBy", { enumerable: true, get: function() { - return group_by_1.default; - } }); - var group_to_map_1 = require_group_to_map(); - Object.defineProperty(exports, "groupToMap", { enumerable: true, get: function() { - return group_to_map_1.default; - } }); - var get_wrap_behavior_1 = require_get_wrap_behavior(); - Object.defineProperty(exports, "getWrapBehavior", { enumerable: true, get: function() { - return get_wrap_behavior_1.default; - } }); - var wrap_behavior_1 = require_wrap_behavior(); - Object.defineProperty(exports, "wrapBehavior", { enumerable: true, get: function() { - return wrap_behavior_1.default; - } }); - var number2color_1 = require_number2color(); - Object.defineProperty(exports, "number2color", { enumerable: true, get: function() { - return number2color_1.default; - } }); - var parse_radius_1 = require_parse_radius(); - Object.defineProperty(exports, "parseRadius", { enumerable: true, get: function() { - return parse_radius_1.default; - } }); - var clamp_1 = require_clamp(); - Object.defineProperty(exports, "clamp", { enumerable: true, get: function() { - return clamp_1.default; - } }); - var fixed_base_1 = require_fixed_base(); - Object.defineProperty(exports, "fixedBase", { enumerable: true, get: function() { - return fixed_base_1.default; - } }); - var is_decimal_1 = require_is_decimal(); - Object.defineProperty(exports, "isDecimal", { enumerable: true, get: function() { - return is_decimal_1.default; - } }); - var is_even_1 = require_is_even(); - Object.defineProperty(exports, "isEven", { enumerable: true, get: function() { - return is_even_1.default; - } }); - var is_integer_1 = require_is_integer(); - Object.defineProperty(exports, "isInteger", { enumerable: true, get: function() { - return is_integer_1.default; - } }); - var is_negative_1 = require_is_negative(); - Object.defineProperty(exports, "isNegative", { enumerable: true, get: function() { - return is_negative_1.default; - } }); - var is_number_equal_1 = require_is_number_equal(); - Object.defineProperty(exports, "isNumberEqual", { enumerable: true, get: function() { - return is_number_equal_1.default; - } }); - var is_odd_1 = require_is_odd(); - Object.defineProperty(exports, "isOdd", { enumerable: true, get: function() { - return is_odd_1.default; - } }); - var is_positive_1 = require_is_positive(); - Object.defineProperty(exports, "isPositive", { enumerable: true, get: function() { - return is_positive_1.default; - } }); - var max_1 = require_max(); - Object.defineProperty(exports, "max", { enumerable: true, get: function() { - return max_1.default; - } }); - var max_by_1 = require_max_by(); - Object.defineProperty(exports, "maxBy", { enumerable: true, get: function() { - return max_by_1.default; - } }); - var min_1 = require_min(); - Object.defineProperty(exports, "min", { enumerable: true, get: function() { - return min_1.default; - } }); - var min_by_1 = require_min_by(); - Object.defineProperty(exports, "minBy", { enumerable: true, get: function() { - return min_by_1.default; - } }); - var mod_1 = require_mod(); - Object.defineProperty(exports, "mod", { enumerable: true, get: function() { - return mod_1.default; - } }); - var to_degree_1 = require_to_degree(); - Object.defineProperty(exports, "toDegree", { enumerable: true, get: function() { - return to_degree_1.default; - } }); - var to_integer_1 = require_to_integer(); - Object.defineProperty(exports, "toInteger", { enumerable: true, get: function() { - return to_integer_1.default; - } }); - var to_radian_1 = require_to_radian(); - Object.defineProperty(exports, "toRadian", { enumerable: true, get: function() { - return to_radian_1.default; - } }); - var for_in_1 = require_for_in(); - Object.defineProperty(exports, "forIn", { enumerable: true, get: function() { - return for_in_1.default; - } }); - var has_1 = require_has(); - Object.defineProperty(exports, "has", { enumerable: true, get: function() { - return has_1.default; - } }); - var has_key_1 = require_has_key(); - Object.defineProperty(exports, "hasKey", { enumerable: true, get: function() { - return has_key_1.default; - } }); - var has_value_1 = require_has_value(); - Object.defineProperty(exports, "hasValue", { enumerable: true, get: function() { - return has_value_1.default; - } }); - var keys_1 = require_keys(); - Object.defineProperty(exports, "keys", { enumerable: true, get: function() { - return keys_1.default; - } }); - var is_match_1 = require_is_match(); - Object.defineProperty(exports, "isMatch", { enumerable: true, get: function() { - return is_match_1.default; - } }); - var values_1 = require_values(); - Object.defineProperty(exports, "values", { enumerable: true, get: function() { - return values_1.default; - } }); - var lower_case_1 = require_lower_case(); - Object.defineProperty(exports, "lowerCase", { enumerable: true, get: function() { - return lower_case_1.default; - } }); - var lower_first_1 = require_lower_first(); - Object.defineProperty(exports, "lowerFirst", { enumerable: true, get: function() { - return lower_first_1.default; - } }); - var substitute_1 = require_substitute(); - Object.defineProperty(exports, "substitute", { enumerable: true, get: function() { - return substitute_1.default; - } }); - var upper_case_1 = require_upper_case(); - Object.defineProperty(exports, "upperCase", { enumerable: true, get: function() { - return upper_case_1.default; - } }); - var upper_first_1 = require_upper_first(); - Object.defineProperty(exports, "upperFirst", { enumerable: true, get: function() { - return upper_first_1.default; - } }); - var get_type_1 = require_get_type(); - Object.defineProperty(exports, "getType", { enumerable: true, get: function() { - return get_type_1.default; - } }); - var is_arguments_1 = require_is_arguments(); - Object.defineProperty(exports, "isArguments", { enumerable: true, get: function() { - return is_arguments_1.default; - } }); - var is_array_1 = require_is_array(); - Object.defineProperty(exports, "isArray", { enumerable: true, get: function() { - return is_array_1.default; - } }); - var is_array_like_1 = require_is_array_like(); - Object.defineProperty(exports, "isArrayLike", { enumerable: true, get: function() { - return is_array_like_1.default; - } }); - var is_boolean_1 = require_is_boolean(); - Object.defineProperty(exports, "isBoolean", { enumerable: true, get: function() { - return is_boolean_1.default; - } }); - var is_date_1 = require_is_date(); - Object.defineProperty(exports, "isDate", { enumerable: true, get: function() { - return is_date_1.default; - } }); - var is_error_1 = require_is_error(); - Object.defineProperty(exports, "isError", { enumerable: true, get: function() { - return is_error_1.default; - } }); - var is_function_1 = require_is_function(); - Object.defineProperty(exports, "isFunction", { enumerable: true, get: function() { - return is_function_1.default; - } }); - var is_finite_1 = require_is_finite(); - Object.defineProperty(exports, "isFinite", { enumerable: true, get: function() { - return is_finite_1.default; - } }); - var is_nil_1 = require_is_nil(); - Object.defineProperty(exports, "isNil", { enumerable: true, get: function() { - return is_nil_1.default; - } }); - var is_null_1 = require_is_null(); - Object.defineProperty(exports, "isNull", { enumerable: true, get: function() { - return is_null_1.default; - } }); - var is_number_1 = require_is_number(); - Object.defineProperty(exports, "isNumber", { enumerable: true, get: function() { - return is_number_1.default; - } }); - var is_object_1 = require_is_object(); - Object.defineProperty(exports, "isObject", { enumerable: true, get: function() { - return is_object_1.default; - } }); - var is_object_like_1 = require_is_object_like(); - Object.defineProperty(exports, "isObjectLike", { enumerable: true, get: function() { - return is_object_like_1.default; - } }); - var is_plain_object_1 = require_is_plain_object(); - Object.defineProperty(exports, "isPlainObject", { enumerable: true, get: function() { - return is_plain_object_1.default; - } }); - var is_prototype_1 = require_is_prototype(); - Object.defineProperty(exports, "isPrototype", { enumerable: true, get: function() { - return is_prototype_1.default; - } }); - var is_reg_exp_1 = require_is_reg_exp(); - Object.defineProperty(exports, "isRegExp", { enumerable: true, get: function() { - return is_reg_exp_1.default; - } }); - var is_string_1 = require_is_string(); - Object.defineProperty(exports, "isString", { enumerable: true, get: function() { - return is_string_1.default; - } }); - var is_type_1 = require_is_type(); - Object.defineProperty(exports, "isType", { enumerable: true, get: function() { - return is_type_1.default; - } }); - var is_undefined_1 = require_is_undefined(); - Object.defineProperty(exports, "isUndefined", { enumerable: true, get: function() { - return is_undefined_1.default; - } }); - var is_element_1 = require_is_element(); - Object.defineProperty(exports, "isElement", { enumerable: true, get: function() { - return is_element_1.default; - } }); - var request_animation_frame_1 = require_request_animation_frame(); - Object.defineProperty(exports, "requestAnimationFrame", { enumerable: true, get: function() { - return request_animation_frame_1.default; - } }); - var clear_animation_frame_1 = require_clear_animation_frame(); - Object.defineProperty(exports, "clearAnimationFrame", { enumerable: true, get: function() { - return clear_animation_frame_1.default; - } }); - var augment_1 = require_augment(); - Object.defineProperty(exports, "augment", { enumerable: true, get: function() { - return augment_1.default; - } }); - var clone_1 = require_clone(); - Object.defineProperty(exports, "clone", { enumerable: true, get: function() { - return clone_1.default; - } }); - var debounce_1 = require_debounce(); - Object.defineProperty(exports, "debounce", { enumerable: true, get: function() { - return debounce_1.default; - } }); - var memoize_1 = require_memoize(); - Object.defineProperty(exports, "memoize", { enumerable: true, get: function() { - return memoize_1.default; - } }); - var deep_mix_1 = require_deep_mix(); - Object.defineProperty(exports, "deepMix", { enumerable: true, get: function() { - return deep_mix_1.default; - } }); - var each_1 = require_each(); - Object.defineProperty(exports, "each", { enumerable: true, get: function() { - return each_1.default; - } }); - var extend_12 = require_extend(); - Object.defineProperty(exports, "extend", { enumerable: true, get: function() { - return extend_12.default; - } }); - var index_of_1 = require_index_of(); - Object.defineProperty(exports, "indexOf", { enumerable: true, get: function() { - return index_of_1.default; - } }); - var is_empty_1 = require_is_empty(); - Object.defineProperty(exports, "isEmpty", { enumerable: true, get: function() { - return is_empty_1.default; - } }); - var is_equal_1 = require_is_equal(); - Object.defineProperty(exports, "isEqual", { enumerable: true, get: function() { - return is_equal_1.default; - } }); - var is_equal_with_1 = require_is_equal_with(); - Object.defineProperty(exports, "isEqualWith", { enumerable: true, get: function() { - return is_equal_with_1.default; - } }); - var map_1 = require_map(); - Object.defineProperty(exports, "map", { enumerable: true, get: function() { - return map_1.default; - } }); - var map_values_1 = require_map_values(); - Object.defineProperty(exports, "mapValues", { enumerable: true, get: function() { - return map_values_1.default; - } }); - var mix_1 = require_mix(); - Object.defineProperty(exports, "mix", { enumerable: true, get: function() { - return mix_1.default; - } }); - Object.defineProperty(exports, "assign", { enumerable: true, get: function() { - return mix_1.default; - } }); - var get_1 = require_get(); - Object.defineProperty(exports, "get", { enumerable: true, get: function() { - return get_1.default; - } }); - var set_1 = require_set(); - Object.defineProperty(exports, "set", { enumerable: true, get: function() { - return set_1.default; - } }); - var pick_1 = require_pick(); - Object.defineProperty(exports, "pick", { enumerable: true, get: function() { - return pick_1.default; - } }); - var omit_1 = require_omit(); - Object.defineProperty(exports, "omit", { enumerable: true, get: function() { - return omit_1.default; - } }); - var throttle_1 = require_throttle(); - Object.defineProperty(exports, "throttle", { enumerable: true, get: function() { - return throttle_1.default; - } }); - var to_array_1 = require_to_array(); - Object.defineProperty(exports, "toArray", { enumerable: true, get: function() { - return to_array_1.default; - } }); - var to_string_1 = require_to_string(); - Object.defineProperty(exports, "toString", { enumerable: true, get: function() { - return to_string_1.default; - } }); - var unique_id_1 = require_unique_id(); - Object.defineProperty(exports, "uniqueId", { enumerable: true, get: function() { - return unique_id_1.default; - } }); - var noop_1 = require_noop(); - Object.defineProperty(exports, "noop", { enumerable: true, get: function() { - return noop_1.default; - } }); - var identity_1 = require_identity(); - Object.defineProperty(exports, "identity", { enumerable: true, get: function() { - return identity_1.default; - } }); - var size_1 = require_size(); - Object.defineProperty(exports, "size", { enumerable: true, get: function() { - return size_1.default; - } }); - var measure_text_width_1 = require_measure_text_width(); - Object.defineProperty(exports, "measureTextWidth", { enumerable: true, get: function() { - return measure_text_width_1.default; - } }); - var get_ellipsis_text_1 = require_get_ellipsis_text(); - Object.defineProperty(exports, "getEllipsisText", { enumerable: true, get: function() { - return get_ellipsis_text_1.default; - } }); - var cache_1 = require_cache(); - Object.defineProperty(exports, "Cache", { enumerable: true, get: function() { - return cache_1.default; - } }); - } -}); - -// node_modules/@antv/adjust/node_modules/tslib/tslib.js -var require_tslib2 = __commonJS({ - "node_modules/@antv/adjust/node_modules/tslib/tslib.js"(exports, module2) { - var __extends18; - var __assign32; - var __rest48; - var __decorate4; - var __param4; - var __metadata4; - var __awaiter7; - var __generator5; - var __exportStar4; - var __values4; - var __read4; - var __spread4; - var __spreadArrays4; - var __await4; - var __asyncGenerator4; - var __asyncDelegator4; - var __asyncValues4; - var __makeTemplateObject4; - var __importStar4; - var __importDefault4; - var __classPrivateFieldGet4; - var __classPrivateFieldSet4; - var __createBinding4; - (function(factory) { - var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; - if (typeof define === "function" && define.amd) { - define("tslib", ["exports"], function(exports2) { - factory(createExporter(root, createExporter(exports2))); - }); - } else if (typeof module2 === "object" && typeof module2.exports === "object") { - factory(createExporter(root, createExporter(module2.exports))); - } else { - factory(createExporter(root)); - } - function createExporter(exports2, previous) { - if (exports2 !== root) { - if (typeof Object.create === "function") { - Object.defineProperty(exports2, "__esModule", { value: true }); - } else { - exports2.__esModule = true; - } - } - return function(id, v3) { - return exports2[id] = previous ? previous(id, v3) : v3; - }; - } - })(function(exporter) { - var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b10) { - d3.__proto__ = b10; - } || function(d3, b10) { - for (var p4 in b10) - if (b10.hasOwnProperty(p4)) - d3[p4] = b10[p4]; - }; - __extends18 = function(d3, b10) { - extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; - __assign32 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - __rest48 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; - }; - __decorate4 = function(decorators, target, key, desc) { - var c5 = arguments.length, r4 = c5 < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d3; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") - r4 = Reflect.decorate(decorators, target, key, desc); - else - for (var i4 = decorators.length - 1; i4 >= 0; i4--) - if (d3 = decorators[i4]) - r4 = (c5 < 3 ? d3(r4) : c5 > 3 ? d3(target, key, r4) : d3(target, key)) || r4; - return c5 > 3 && r4 && Object.defineProperty(target, key, r4), r4; - }; - __param4 = function(paramIndex, decorator) { - return function(target, key) { - decorator(target, key, paramIndex); - }; - }; - __metadata4 = function(metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") - return Reflect.metadata(metadataKey, metadataValue); - }; - __awaiter7 = function(thisArg, _arguments, P4, generator) { - function adopt(value2) { - return value2 instanceof P4 ? value2 : new P4(function(resolve) { - resolve(value2); - }); - } - return new (P4 || (P4 = Promise))(function(resolve, reject) { - function fulfilled(value2) { - try { - step(generator.next(value2)); - } catch (e4) { - reject(e4); - } - } - function rejected(value2) { - try { - step(generator["throw"](value2)); - } catch (e4) { - reject(e4); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - __generator5 = function(thisArg, body) { - var _8 = { label: 0, sent: function() { - if (t4[0] & 1) - throw t4[1]; - return t4[1]; - }, trys: [], ops: [] }, f3, y5, t4, g4; - return g4 = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g4[Symbol.iterator] = function() { - return this; - }), g4; - function verb(n3) { - return function(v3) { - return step([n3, v3]); - }; - } - function step(op) { - if (f3) - throw new TypeError("Generator is already executing."); - while (_8) - try { - if (f3 = 1, y5 && (t4 = op[0] & 2 ? y5["return"] : op[0] ? y5["throw"] || ((t4 = y5["return"]) && t4.call(y5), 0) : y5.next) && !(t4 = t4.call(y5, op[1])).done) - return t4; - if (y5 = 0, t4) - op = [op[0] & 2, t4.value]; - switch (op[0]) { - case 0: - case 1: - t4 = op; - break; - case 4: - _8.label++; - return { value: op[1], done: false }; - case 5: - _8.label++; - y5 = op[1]; - op = [0]; - continue; - case 7: - op = _8.ops.pop(); - _8.trys.pop(); - continue; - default: - if (!(t4 = _8.trys, t4 = t4.length > 0 && t4[t4.length - 1]) && (op[0] === 6 || op[0] === 2)) { - _8 = 0; - continue; - } - if (op[0] === 3 && (!t4 || op[1] > t4[0] && op[1] < t4[3])) { - _8.label = op[1]; - break; - } - if (op[0] === 6 && _8.label < t4[1]) { - _8.label = t4[1]; - t4 = op; - break; - } - if (t4 && _8.label < t4[2]) { - _8.label = t4[2]; - _8.ops.push(op); - break; - } - if (t4[2]) - _8.ops.pop(); - _8.trys.pop(); - continue; - } - op = body.call(thisArg, _8); - } catch (e4) { - op = [6, e4]; - y5 = 0; - } finally { - f3 = t4 = 0; - } - if (op[0] & 5) - throw op[1]; - return { value: op[0] ? op[1] : void 0, done: true }; - } - }; - __createBinding4 = function(o3, m4, k4, k22) { - if (k22 === void 0) - k22 = k4; - o3[k22] = m4[k4]; - }; - __exportStar4 = function(m4, exports2) { - for (var p4 in m4) - if (p4 !== "default" && !exports2.hasOwnProperty(p4)) - exports2[p4] = m4[p4]; - }; - __values4 = function(o3) { - var s4 = typeof Symbol === "function" && Symbol.iterator, m4 = s4 && o3[s4], i4 = 0; - if (m4) - return m4.call(o3); - if (o3 && typeof o3.length === "number") - return { - next: function() { - if (o3 && i4 >= o3.length) - o3 = void 0; - return { value: o3 && o3[i4++], done: !o3 }; - } - }; - throw new TypeError(s4 ? "Object is not iterable." : "Symbol.iterator is not defined."); - }; - __read4 = function(o3, n3) { - var m4 = typeof Symbol === "function" && o3[Symbol.iterator]; - if (!m4) - return o3; - var i4 = m4.call(o3), r4, ar = [], e4; - try { - while ((n3 === void 0 || n3-- > 0) && !(r4 = i4.next()).done) - ar.push(r4.value); - } catch (error) { - e4 = { error }; - } finally { - try { - if (r4 && !r4.done && (m4 = i4["return"])) - m4.call(i4); - } finally { - if (e4) - throw e4.error; - } - } - return ar; - }; - __spread4 = function() { - for (var ar = [], i4 = 0; i4 < arguments.length; i4++) - ar = ar.concat(__read4(arguments[i4])); - return ar; - }; - __spreadArrays4 = function() { - for (var s4 = 0, i4 = 0, il = arguments.length; i4 < il; i4++) - s4 += arguments[i4].length; - for (var r4 = Array(s4), k4 = 0, i4 = 0; i4 < il; i4++) - for (var a4 = arguments[i4], j4 = 0, jl = a4.length; j4 < jl; j4++, k4++) - r4[k4] = a4[j4]; - return r4; - }; - __await4 = function(v3) { - return this instanceof __await4 ? (this.v = v3, this) : new __await4(v3); - }; - __asyncGenerator4 = function(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) - throw new TypeError("Symbol.asyncIterator is not defined."); - var g4 = generator.apply(thisArg, _arguments || []), i4, q3 = []; - return i4 = {}, verb("next"), verb("throw"), verb("return"), i4[Symbol.asyncIterator] = function() { - return this; - }, i4; - function verb(n3) { - if (g4[n3]) - i4[n3] = function(v3) { - return new Promise(function(a4, b10) { - q3.push([n3, v3, a4, b10]) > 1 || resume(n3, v3); - }); - }; - } - function resume(n3, v3) { - try { - step(g4[n3](v3)); - } catch (e4) { - settle(q3[0][3], e4); - } - } - function step(r4) { - r4.value instanceof __await4 ? Promise.resolve(r4.value.v).then(fulfill, reject) : settle(q3[0][2], r4); - } - function fulfill(value2) { - resume("next", value2); - } - function reject(value2) { - resume("throw", value2); - } - function settle(f3, v3) { - if (f3(v3), q3.shift(), q3.length) - resume(q3[0][0], q3[0][1]); - } - }; - __asyncDelegator4 = function(o3) { - var i4, p4; - return i4 = {}, verb("next"), verb("throw", function(e4) { - throw e4; - }), verb("return"), i4[Symbol.iterator] = function() { - return this; - }, i4; - function verb(n3, f3) { - i4[n3] = o3[n3] ? function(v3) { - return (p4 = !p4) ? { value: __await4(o3[n3](v3)), done: n3 === "return" } : f3 ? f3(v3) : v3; - } : f3; - } - }; - __asyncValues4 = function(o3) { - if (!Symbol.asyncIterator) - throw new TypeError("Symbol.asyncIterator is not defined."); - var m4 = o3[Symbol.asyncIterator], i4; - return m4 ? m4.call(o3) : (o3 = typeof __values4 === "function" ? __values4(o3) : o3[Symbol.iterator](), i4 = {}, verb("next"), verb("throw"), verb("return"), i4[Symbol.asyncIterator] = function() { - return this; - }, i4); - function verb(n3) { - i4[n3] = o3[n3] && function(v3) { - return new Promise(function(resolve, reject) { - v3 = o3[n3](v3), settle(resolve, reject, v3.done, v3.value); - }); - }; - } - function settle(resolve, reject, d3, v3) { - Promise.resolve(v3).then(function(v4) { - resolve({ value: v4, done: d3 }); - }, reject); - } - }; - __makeTemplateObject4 = function(cooked, raw) { - if (Object.defineProperty) { - Object.defineProperty(cooked, "raw", { value: raw }); - } else { - cooked.raw = raw; - } - return cooked; - }; - __importStar4 = function(mod5) { - if (mod5 && mod5.__esModule) - return mod5; - var result = {}; - if (mod5 != null) { - for (var k4 in mod5) - if (Object.hasOwnProperty.call(mod5, k4)) - result[k4] = mod5[k4]; - } - result["default"] = mod5; - return result; - }; - __importDefault4 = function(mod5) { - return mod5 && mod5.__esModule ? mod5 : { "default": mod5 }; - }; - __classPrivateFieldGet4 = function(receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); - }; - __classPrivateFieldSet4 = function(receiver, privateMap, value2) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value2); - return value2; - }; - exporter("__extends", __extends18); - exporter("__assign", __assign32); - exporter("__rest", __rest48); - exporter("__decorate", __decorate4); - exporter("__param", __param4); - exporter("__metadata", __metadata4); - exporter("__awaiter", __awaiter7); - exporter("__generator", __generator5); - exporter("__exportStar", __exportStar4); - exporter("__createBinding", __createBinding4); - exporter("__values", __values4); - exporter("__read", __read4); - exporter("__spread", __spread4); - exporter("__spreadArrays", __spreadArrays4); - exporter("__await", __await4); - exporter("__asyncGenerator", __asyncGenerator4); - exporter("__asyncDelegator", __asyncDelegator4); - exporter("__asyncValues", __asyncValues4); - exporter("__makeTemplateObject", __makeTemplateObject4); - exporter("__importStar", __importStar4); - exporter("__importDefault", __importDefault4); - exporter("__classPrivateFieldGet", __classPrivateFieldGet4); - exporter("__classPrivateFieldSet", __classPrivateFieldSet4); - }); - } -}); - -// node_modules/@antv/attr/node_modules/tslib/tslib.js -var require_tslib3 = __commonJS({ - "node_modules/@antv/attr/node_modules/tslib/tslib.js"(exports, module2) { - var __extends18; - var __assign32; - var __rest48; - var __decorate4; - var __param4; - var __metadata4; - var __awaiter7; - var __generator5; - var __exportStar4; - var __values4; - var __read4; - var __spread4; - var __spreadArrays4; - var __await4; - var __asyncGenerator4; - var __asyncDelegator4; - var __asyncValues4; - var __makeTemplateObject4; - var __importStar4; - var __importDefault4; - var __classPrivateFieldGet4; - var __classPrivateFieldSet4; - var __createBinding4; - (function(factory) { - var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {}; - if (typeof define === "function" && define.amd) { - define("tslib", ["exports"], function(exports2) { - factory(createExporter(root, createExporter(exports2))); - }); - } else if (typeof module2 === "object" && typeof module2.exports === "object") { - factory(createExporter(root, createExporter(module2.exports))); - } else { - factory(createExporter(root)); - } - function createExporter(exports2, previous) { - if (exports2 !== root) { - if (typeof Object.create === "function") { - Object.defineProperty(exports2, "__esModule", { value: true }); - } else { - exports2.__esModule = true; - } - } - return function(id, v3) { - return exports2[id] = previous ? previous(id, v3) : v3; - }; - } - })(function(exporter) { - var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d3, b10) { - d3.__proto__ = b10; - } || function(d3, b10) { - for (var p4 in b10) - if (b10.hasOwnProperty(p4)) - d3[p4] = b10[p4]; - }; - __extends18 = function(d3, b10) { - extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; - __assign32 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - __rest48 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; - }; - __decorate4 = function(decorators, target, key, desc) { - var c5 = arguments.length, r4 = c5 < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d3; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") - r4 = Reflect.decorate(decorators, target, key, desc); - else - for (var i4 = decorators.length - 1; i4 >= 0; i4--) - if (d3 = decorators[i4]) - r4 = (c5 < 3 ? d3(r4) : c5 > 3 ? d3(target, key, r4) : d3(target, key)) || r4; - return c5 > 3 && r4 && Object.defineProperty(target, key, r4), r4; - }; - __param4 = function(paramIndex, decorator) { - return function(target, key) { - decorator(target, key, paramIndex); - }; - }; - __metadata4 = function(metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") - return Reflect.metadata(metadataKey, metadataValue); - }; - __awaiter7 = function(thisArg, _arguments, P4, generator) { - function adopt(value2) { - return value2 instanceof P4 ? value2 : new P4(function(resolve) { - resolve(value2); - }); - } - return new (P4 || (P4 = Promise))(function(resolve, reject) { - function fulfilled(value2) { - try { - step(generator.next(value2)); - } catch (e4) { - reject(e4); - } - } - function rejected(value2) { - try { - step(generator["throw"](value2)); - } catch (e4) { - reject(e4); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - __generator5 = function(thisArg, body) { - var _8 = { label: 0, sent: function() { - if (t4[0] & 1) - throw t4[1]; - return t4[1]; - }, trys: [], ops: [] }, f3, y5, t4, g4; - return g4 = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g4[Symbol.iterator] = function() { - return this; - }), g4; - function verb(n3) { - return function(v3) { - return step([n3, v3]); - }; - } - function step(op) { - if (f3) - throw new TypeError("Generator is already executing."); - while (_8) - try { - if (f3 = 1, y5 && (t4 = op[0] & 2 ? y5["return"] : op[0] ? y5["throw"] || ((t4 = y5["return"]) && t4.call(y5), 0) : y5.next) && !(t4 = t4.call(y5, op[1])).done) - return t4; - if (y5 = 0, t4) - op = [op[0] & 2, t4.value]; - switch (op[0]) { - case 0: - case 1: - t4 = op; - break; - case 4: - _8.label++; - return { value: op[1], done: false }; - case 5: - _8.label++; - y5 = op[1]; - op = [0]; - continue; - case 7: - op = _8.ops.pop(); - _8.trys.pop(); - continue; - default: - if (!(t4 = _8.trys, t4 = t4.length > 0 && t4[t4.length - 1]) && (op[0] === 6 || op[0] === 2)) { - _8 = 0; - continue; - } - if (op[0] === 3 && (!t4 || op[1] > t4[0] && op[1] < t4[3])) { - _8.label = op[1]; - break; - } - if (op[0] === 6 && _8.label < t4[1]) { - _8.label = t4[1]; - t4 = op; - break; - } - if (t4 && _8.label < t4[2]) { - _8.label = t4[2]; - _8.ops.push(op); - break; - } - if (t4[2]) - _8.ops.pop(); - _8.trys.pop(); - continue; - } - op = body.call(thisArg, _8); - } catch (e4) { - op = [6, e4]; - y5 = 0; - } finally { - f3 = t4 = 0; - } - if (op[0] & 5) - throw op[1]; - return { value: op[0] ? op[1] : void 0, done: true }; - } - }; - __createBinding4 = function(o3, m4, k4, k22) { - if (k22 === void 0) - k22 = k4; - o3[k22] = m4[k4]; - }; - __exportStar4 = function(m4, exports2) { - for (var p4 in m4) - if (p4 !== "default" && !exports2.hasOwnProperty(p4)) - exports2[p4] = m4[p4]; - }; - __values4 = function(o3) { - var s4 = typeof Symbol === "function" && Symbol.iterator, m4 = s4 && o3[s4], i4 = 0; - if (m4) - return m4.call(o3); - if (o3 && typeof o3.length === "number") - return { - next: function() { - if (o3 && i4 >= o3.length) - o3 = void 0; - return { value: o3 && o3[i4++], done: !o3 }; - } - }; - throw new TypeError(s4 ? "Object is not iterable." : "Symbol.iterator is not defined."); - }; - __read4 = function(o3, n3) { - var m4 = typeof Symbol === "function" && o3[Symbol.iterator]; - if (!m4) - return o3; - var i4 = m4.call(o3), r4, ar = [], e4; - try { - while ((n3 === void 0 || n3-- > 0) && !(r4 = i4.next()).done) - ar.push(r4.value); - } catch (error) { - e4 = { error }; - } finally { - try { - if (r4 && !r4.done && (m4 = i4["return"])) - m4.call(i4); - } finally { - if (e4) - throw e4.error; - } - } - return ar; - }; - __spread4 = function() { - for (var ar = [], i4 = 0; i4 < arguments.length; i4++) - ar = ar.concat(__read4(arguments[i4])); - return ar; - }; - __spreadArrays4 = function() { - for (var s4 = 0, i4 = 0, il = arguments.length; i4 < il; i4++) - s4 += arguments[i4].length; - for (var r4 = Array(s4), k4 = 0, i4 = 0; i4 < il; i4++) - for (var a4 = arguments[i4], j4 = 0, jl = a4.length; j4 < jl; j4++, k4++) - r4[k4] = a4[j4]; - return r4; - }; - __await4 = function(v3) { - return this instanceof __await4 ? (this.v = v3, this) : new __await4(v3); - }; - __asyncGenerator4 = function(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) - throw new TypeError("Symbol.asyncIterator is not defined."); - var g4 = generator.apply(thisArg, _arguments || []), i4, q3 = []; - return i4 = {}, verb("next"), verb("throw"), verb("return"), i4[Symbol.asyncIterator] = function() { - return this; - }, i4; - function verb(n3) { - if (g4[n3]) - i4[n3] = function(v3) { - return new Promise(function(a4, b10) { - q3.push([n3, v3, a4, b10]) > 1 || resume(n3, v3); - }); - }; - } - function resume(n3, v3) { - try { - step(g4[n3](v3)); - } catch (e4) { - settle(q3[0][3], e4); - } - } - function step(r4) { - r4.value instanceof __await4 ? Promise.resolve(r4.value.v).then(fulfill, reject) : settle(q3[0][2], r4); - } - function fulfill(value2) { - resume("next", value2); - } - function reject(value2) { - resume("throw", value2); - } - function settle(f3, v3) { - if (f3(v3), q3.shift(), q3.length) - resume(q3[0][0], q3[0][1]); - } - }; - __asyncDelegator4 = function(o3) { - var i4, p4; - return i4 = {}, verb("next"), verb("throw", function(e4) { - throw e4; - }), verb("return"), i4[Symbol.iterator] = function() { - return this; - }, i4; - function verb(n3, f3) { - i4[n3] = o3[n3] ? function(v3) { - return (p4 = !p4) ? { value: __await4(o3[n3](v3)), done: n3 === "return" } : f3 ? f3(v3) : v3; - } : f3; - } - }; - __asyncValues4 = function(o3) { - if (!Symbol.asyncIterator) - throw new TypeError("Symbol.asyncIterator is not defined."); - var m4 = o3[Symbol.asyncIterator], i4; - return m4 ? m4.call(o3) : (o3 = typeof __values4 === "function" ? __values4(o3) : o3[Symbol.iterator](), i4 = {}, verb("next"), verb("throw"), verb("return"), i4[Symbol.asyncIterator] = function() { - return this; - }, i4); - function verb(n3) { - i4[n3] = o3[n3] && function(v3) { - return new Promise(function(resolve, reject) { - v3 = o3[n3](v3), settle(resolve, reject, v3.done, v3.value); - }); - }; - } - function settle(resolve, reject, d3, v3) { - Promise.resolve(v3).then(function(v4) { - resolve({ value: v4, done: d3 }); - }, reject); - } - }; - __makeTemplateObject4 = function(cooked, raw) { - if (Object.defineProperty) { - Object.defineProperty(cooked, "raw", { value: raw }); - } else { - cooked.raw = raw; - } - return cooked; - }; - __importStar4 = function(mod5) { - if (mod5 && mod5.__esModule) - return mod5; - var result = {}; - if (mod5 != null) { - for (var k4 in mod5) - if (Object.hasOwnProperty.call(mod5, k4)) - result[k4] = mod5[k4]; - } - result["default"] = mod5; - return result; - }; - __importDefault4 = function(mod5) { - return mod5 && mod5.__esModule ? mod5 : { "default": mod5 }; - }; - __classPrivateFieldGet4 = function(receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); - }; - __classPrivateFieldSet4 = function(receiver, privateMap, value2) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value2); - return value2; - }; - exporter("__extends", __extends18); - exporter("__assign", __assign32); - exporter("__rest", __rest48); - exporter("__decorate", __decorate4); - exporter("__param", __param4); - exporter("__metadata", __metadata4); - exporter("__awaiter", __awaiter7); - exporter("__generator", __generator5); - exporter("__exportStar", __exportStar4); - exporter("__createBinding", __createBinding4); - exporter("__values", __values4); - exporter("__read", __read4); - exporter("__spread", __spread4); - exporter("__spreadArrays", __spreadArrays4); - exporter("__await", __await4); - exporter("__asyncGenerator", __asyncGenerator4); - exporter("__asyncDelegator", __asyncDelegator4); - exporter("__asyncValues", __asyncValues4); - exporter("__makeTemplateObject", __makeTemplateObject4); - exporter("__importStar", __importStar4); - exporter("__importDefault", __importDefault4); - exporter("__classPrivateFieldGet", __classPrivateFieldGet4); - exporter("__classPrivateFieldSet", __classPrivateFieldSet4); - }); - } -}); - -// node_modules/size-sensor/lib/id.js -var require_id = __commonJS({ - "node_modules/size-sensor/lib/id.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports["default"] = void 0; - var id = 1; - var _default2 = function _default3() { - return "".concat(id++); - }; - exports["default"] = _default2; - } -}); - -// node_modules/size-sensor/lib/debounce.js -var require_debounce2 = __commonJS({ - "node_modules/size-sensor/lib/debounce.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports["default"] = void 0; - var _default2 = function _default3(fn) { - var delay = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 60; - var timer3 = null; - return function() { - var _this = this; - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - clearTimeout(timer3); - timer3 = setTimeout(function() { - fn.apply(_this, args); - }, delay); - }; - }; - exports["default"] = _default2; - } -}); - -// node_modules/size-sensor/lib/constant.js -var require_constant = __commonJS({ - "node_modules/size-sensor/lib/constant.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.SensorTabIndex = exports.SensorClassName = exports.SizeSensorId = void 0; - var SizeSensorId = "size-sensor-id"; - exports.SizeSensorId = SizeSensorId; - var SensorClassName = "size-sensor-object"; - exports.SensorClassName = SensorClassName; - var SensorTabIndex = "-1"; - exports.SensorTabIndex = SensorTabIndex; - } -}); - -// node_modules/size-sensor/lib/sensors/object.js -var require_object = __commonJS({ - "node_modules/size-sensor/lib/sensors/object.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.createSensor = void 0; - var _debounce = _interopRequireDefault(require_debounce2()); - var _constant = require_constant(); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { "default": obj }; - } - var createSensor = function createSensor2(element) { - var sensor = void 0; - var listeners = []; - var newSensor = function newSensor2() { - if (getComputedStyle(element).position === "static") { - element.style.position = "relative"; - } - var obj = document.createElement("object"); - obj.onload = function() { - obj.contentDocument.defaultView.addEventListener("resize", resizeListener); - resizeListener(); - }; - obj.style.display = "block"; - obj.style.position = "absolute"; - obj.style.top = "0"; - obj.style.left = "0"; - obj.style.height = "100%"; - obj.style.width = "100%"; - obj.style.overflow = "hidden"; - obj.style.pointerEvents = "none"; - obj.style.zIndex = "-1"; - obj.style.opacity = "0"; - obj.setAttribute("class", _constant.SensorClassName); - obj.setAttribute("tabindex", _constant.SensorTabIndex); - obj.type = "text/html"; - element.appendChild(obj); - obj.data = "about:blank"; - return obj; - }; - var resizeListener = (0, _debounce["default"])(function() { - listeners.forEach(function(listener) { - listener(element); - }); - }); - var bind3 = function bind4(cb) { - if (!sensor) { - sensor = newSensor(); - } - if (listeners.indexOf(cb) === -1) { - listeners.push(cb); - } - }; - var destroy = function destroy2() { - if (sensor && sensor.parentNode) { - if (sensor.contentDocument) { - sensor.contentDocument.defaultView.removeEventListener("resize", resizeListener); - } - sensor.parentNode.removeChild(sensor); - sensor = void 0; - listeners = []; - } - }; - var unbind2 = function unbind3(cb) { - var idx = listeners.indexOf(cb); - if (idx !== -1) { - listeners.splice(idx, 1); - } - if (listeners.length === 0 && sensor) { - destroy(); - } - }; - return { - element, - bind: bind3, - destroy, - unbind: unbind2 - }; - }; - exports.createSensor = createSensor; - } -}); - -// node_modules/size-sensor/lib/sensors/resizeObserver.js -var require_resizeObserver = __commonJS({ - "node_modules/size-sensor/lib/sensors/resizeObserver.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.createSensor = void 0; - var _debounce = _interopRequireDefault(require_debounce2()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { "default": obj }; - } - var createSensor = function createSensor2(element) { - var sensor = void 0; - var listeners = []; - var resizeListener = (0, _debounce["default"])(function() { - listeners.forEach(function(listener) { - listener(element); - }); - }); - var newSensor = function newSensor2() { - var s4 = new ResizeObserver(resizeListener); - s4.observe(element); - resizeListener(); - return s4; - }; - var bind3 = function bind4(cb) { - if (!sensor) { - sensor = newSensor(); - } - if (listeners.indexOf(cb) === -1) { - listeners.push(cb); - } - }; - var destroy = function destroy2() { - sensor.disconnect(); - listeners = []; - sensor = void 0; - }; - var unbind2 = function unbind3(cb) { - var idx = listeners.indexOf(cb); - if (idx !== -1) { - listeners.splice(idx, 1); - } - if (listeners.length === 0 && sensor) { - destroy(); - } - }; - return { - element, - bind: bind3, - destroy, - unbind: unbind2 - }; - }; - exports.createSensor = createSensor; - } -}); - -// node_modules/size-sensor/lib/sensors/index.js -var require_sensors = __commonJS({ - "node_modules/size-sensor/lib/sensors/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.createSensor = void 0; - var _object = require_object(); - var _resizeObserver = require_resizeObserver(); - var createSensor = typeof ResizeObserver !== "undefined" ? _resizeObserver.createSensor : _object.createSensor; - exports.createSensor = createSensor; - } -}); - -// node_modules/size-sensor/lib/sensorPool.js -var require_sensorPool = __commonJS({ - "node_modules/size-sensor/lib/sensorPool.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.removeSensor = exports.getSensor = void 0; - var _id = _interopRequireDefault(require_id()); - var _sensors = require_sensors(); - var _constant = require_constant(); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { "default": obj }; - } - var Sensors = {}; - var getSensor = function getSensor2(element) { - var sensorId = element.getAttribute(_constant.SizeSensorId); - if (sensorId && Sensors[sensorId]) { - return Sensors[sensorId]; - } - var newId = (0, _id["default"])(); - element.setAttribute(_constant.SizeSensorId, newId); - var sensor = (0, _sensors.createSensor)(element); - Sensors[newId] = sensor; - return sensor; - }; - exports.getSensor = getSensor; - var removeSensor = function removeSensor2(sensor) { - var sensorId = sensor.element.getAttribute(_constant.SizeSensorId); - sensor.element.removeAttribute(_constant.SizeSensorId); - sensor.destroy(); - if (sensorId && Sensors[sensorId]) { - delete Sensors[sensorId]; - } - }; - exports.removeSensor = removeSensor; - } -}); - -// node_modules/size-sensor/lib/index.js -var require_lib2 = __commonJS({ - "node_modules/size-sensor/lib/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.ver = exports.clear = exports.bind = void 0; - var _sensorPool = require_sensorPool(); - var bind3 = function bind4(element, cb) { - var sensor = (0, _sensorPool.getSensor)(element); - sensor.bind(cb); - return function() { - sensor.unbind(cb); - }; - }; - exports.bind = bind3; - var clear = function clear2(element) { - var sensor = (0, _sensorPool.getSensor)(element); - (0, _sensorPool.removeSensor)(sensor); - }; - exports.clear = clear; - var ver = "1.0.1"; - exports.ver = ver; - } -}); - -// node_modules/d3-regression/dist/d3-regression.js -var require_d3_regression = __commonJS({ - "node_modules/d3-regression/dist/d3-regression.js"(exports, module2) { - (function(global2, factory) { - typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = global2 || self, factory(global2.d3 = {})); - })(exports, function(exports2) { - "use strict"; - function _slicedToArray2(arr, i4) { - return _arrayWithHoles2(arr) || _iterableToArrayLimit2(arr, i4) || _nonIterableRest2(); - } - function _arrayWithHoles2(arr) { - if (Array.isArray(arr)) - return arr; - } - function _iterableToArrayLimit2(arr, i4) { - var _arr = []; - var _n = true; - var _d = false; - var _e = void 0; - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - if (i4 && _arr.length === i4) - break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) - _i["return"](); - } finally { - if (_d) - throw _e; - } - } - return _arr; - } - function _nonIterableRest2() { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - function points(data3, x6, y5, sort2) { - data3 = data3.filter(function(d4, i5) { - var u3 = x6(d4, i5), v3 = y5(d4, i5); - return u3 != null && isFinite(u3) && v3 != null && isFinite(v3); - }); - if (sort2) { - data3.sort(function(a4, b10) { - return x6(a4) - x6(b10); - }); - } - var n3 = data3.length, X2 = new Float64Array(n3), Y2 = new Float64Array(n3); - var ux = 0, uy = 0, xv, yv, d3; - for (var i4 = 0; i4 < n3; ) { - d3 = data3[i4]; - X2[i4] = xv = +x6(d3, i4, data3); - Y2[i4] = yv = +y5(d3, i4, data3); - ++i4; - ux += (xv - ux) / i4; - uy += (yv - uy) / i4; - } - for (var _i = 0; _i < n3; ++_i) { - X2[_i] -= ux; - Y2[_i] -= uy; - } - return [X2, Y2, ux, uy]; - } - function visitPoints(data3, x6, y5, cb) { - var iterations = 0; - for (var i4 = 0, n3 = data3.length; i4 < n3; i4++) { - var d3 = data3[i4], dx = +x6(d3, i4, data3), dy = +y5(d3, i4, data3); - if (dx != null && isFinite(dx) && dy != null && isFinite(dy)) { - cb(dx, dy, iterations++); - } - } - } - function determination(data3, x6, y5, uY, predict) { - var SSE = 0, SST = 0; - visitPoints(data3, x6, y5, function(dx, dy) { - var sse = dy - predict(dx), sst = dy - uY; - SSE += sse * sse; - SST += sst * sst; - }); - return 1 - SSE / SST; - } - function angle3(line2) { - return Math.atan2(line2[1][1] - line2[0][1], line2[1][0] - line2[0][0]) * 180 / Math.PI; - } - function midpoint(line2) { - return [(line2[0][0] + line2[1][0]) / 2, (line2[0][1] + line2[1][1]) / 2]; - } - function interpose(xmin, xmax, predict) { - var l4 = Math.log(xmax - xmin) * Math.LOG10E + 1 | 0; - var precision = 1 * Math.pow(10, -l4 / 2 - 1), maxIter = 1e4; - var points2 = [px(xmin), px(xmax)], iter = 0; - while (find11(points2) && iter < maxIter) { - } - return points2; - function px(x6) { - return [x6, predict(x6)]; - } - function find11(points3) { - iter++; - var n3 = points3.length; - var found = false; - for (var i4 = 0; i4 < n3 - 1; i4++) { - var p0 = points3[i4], p1 = points3[i4 + 1], m4 = midpoint([p0, p1]), mp = px(m4[0]), a0 = angle3([p0, m4]), a1 = angle3([p0, mp]), a4 = Math.abs(a0 - a1); - if (a4 > precision) { - points3.splice(i4 + 1, 0, mp); - found = true; - } - } - return found; - } - } - function ols(uX, uY, uXY, uX2) { - var delta = uX2 - uX * uX, slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta, intercept = uY - slope * uX; - return [intercept, slope]; - } - function exponential2() { - var x6 = function x7(d3) { - return d3[0]; - }, y5 = function y6(d3) { - return d3[1]; - }, domain; - function exponential3(data3) { - var n3 = 0, Y2 = 0, YL = 0, XY = 0, XYL = 0, X2Y = 0, xmin = domain ? +domain[0] : Infinity, xmax = domain ? +domain[1] : -Infinity; - visitPoints(data3, x6, y5, function(dx, dy) { - var ly = Math.log(dy), xy = dx * dy; - ++n3; - Y2 += (dy - Y2) / n3; - XY += (xy - XY) / n3; - X2Y += (dx * xy - X2Y) / n3; - YL += (dy * ly - YL) / n3; - XYL += (xy * ly - XYL) / n3; - if (!domain) { - if (dx < xmin) - xmin = dx; - if (dx > xmax) - xmax = dx; - } - }); - var _ols = ols(XY / Y2, YL / Y2, XYL / Y2, X2Y / Y2), _ols2 = _slicedToArray2(_ols, 2), a4 = _ols2[0], b10 = _ols2[1]; - a4 = Math.exp(a4); - var fn = function fn2(x7) { - return a4 * Math.exp(b10 * x7); - }, out = interpose(xmin, xmax, fn); - out.a = a4; - out.b = b10; - out.predict = fn; - out.rSquared = determination(data3, x6, y5, Y2, fn); - return out; - } - exponential3.domain = function(arr) { - return arguments.length ? (domain = arr, exponential3) : domain; - }; - exponential3.x = function(fn) { - return arguments.length ? (x6 = fn, exponential3) : x6; - }; - exponential3.y = function(fn) { - return arguments.length ? (y5 = fn, exponential3) : y5; - }; - return exponential3; - } - function linear4() { - var x6 = function x7(d3) { - return d3[0]; - }, y5 = function y6(d3) { - return d3[1]; - }, domain; - function linear5(data3) { - var n3 = 0, X2 = 0, Y2 = 0, XY = 0, X22 = 0, xmin = domain ? +domain[0] : Infinity, xmax = domain ? +domain[1] : -Infinity; - visitPoints(data3, x6, y5, function(dx, dy) { - ++n3; - X2 += (dx - X2) / n3; - Y2 += (dy - Y2) / n3; - XY += (dx * dy - XY) / n3; - X22 += (dx * dx - X22) / n3; - if (!domain) { - if (dx < xmin) - xmin = dx; - if (dx > xmax) - xmax = dx; - } - }); - var _ols = ols(X2, Y2, XY, X22), _ols2 = _slicedToArray2(_ols, 2), intercept = _ols2[0], slope = _ols2[1], fn = function fn2(x7) { - return slope * x7 + intercept; - }, out = [[xmin, fn(xmin)], [xmax, fn(xmax)]]; - out.a = slope; - out.b = intercept; - out.predict = fn; - out.rSquared = determination(data3, x6, y5, Y2, fn); - return out; - } - linear5.domain = function(arr) { - return arguments.length ? (domain = arr, linear5) : domain; - }; - linear5.x = function(fn) { - return arguments.length ? (x6 = fn, linear5) : x6; - }; - linear5.y = function(fn) { - return arguments.length ? (y5 = fn, linear5) : y5; - }; - return linear5; - } - function median(arr) { - arr.sort(function(a4, b10) { - return a4 - b10; - }); - var i4 = arr.length / 2; - return i4 % 1 === 0 ? (arr[i4 - 1] + arr[i4]) / 2 : arr[Math.floor(i4)]; - } - var maxiters = 2, epsilon = 1e-12; - function loess() { - var x6 = function x7(d3) { - return d3[0]; - }, y5 = function y6(d3) { - return d3[1]; - }, bandwidth = 0.3; - function loess2(data3) { - var _points = points(data3, x6, y5, true), _points2 = _slicedToArray2(_points, 4), xv = _points2[0], yv = _points2[1], ux = _points2[2], uy = _points2[3], n3 = xv.length, bw = Math.max(2, ~~(bandwidth * n3)), yhat = new Float64Array(n3), residuals = new Float64Array(n3), robustWeights = new Float64Array(n3).fill(1); - for (var iter = -1; ++iter <= maxiters; ) { - var interval3 = [0, bw - 1]; - for (var i4 = 0; i4 < n3; ++i4) { - var dx = xv[i4], i0 = interval3[0], i1 = interval3[1], edge2 = dx - xv[i0] > xv[i1] - dx ? i0 : i1; - var W2 = 0, X2 = 0, Y2 = 0, XY = 0, X22 = 0, denom = 1 / Math.abs(xv[edge2] - dx || 1); - for (var k4 = i0; k4 <= i1; ++k4) { - var xk = xv[k4], yk = yv[k4], w4 = tricube(Math.abs(dx - xk) * denom) * robustWeights[k4], xkw = xk * w4; - W2 += w4; - X2 += xkw; - Y2 += yk * w4; - XY += yk * xkw; - X22 += xk * xkw; - } - var _ols = ols(X2 / W2, Y2 / W2, XY / W2, X22 / W2), _ols2 = _slicedToArray2(_ols, 2), a4 = _ols2[0], b10 = _ols2[1]; - yhat[i4] = a4 + b10 * dx; - residuals[i4] = Math.abs(yv[i4] - yhat[i4]); - updateInterval(xv, i4 + 1, interval3); - } - if (iter === maxiters) { - break; - } - var medianResidual = median(residuals); - if (Math.abs(medianResidual) < epsilon) - break; - for (var _i = 0, arg, _w; _i < n3; ++_i) { - arg = residuals[_i] / (6 * medianResidual); - robustWeights[_i] = arg >= 1 ? epsilon : (_w = 1 - arg * arg) * _w; - } - } - return output(xv, yhat, ux, uy); - } - loess2.bandwidth = function(bw) { - return arguments.length ? (bandwidth = bw, loess2) : bandwidth; - }; - loess2.x = function(fn) { - return arguments.length ? (x6 = fn, loess2) : x6; - }; - loess2.y = function(fn) { - return arguments.length ? (y5 = fn, loess2) : y5; - }; - return loess2; - } - function tricube(x6) { - return (x6 = 1 - x6 * x6 * x6) * x6 * x6; - } - function updateInterval(xv, i4, interval3) { - var val = xv[i4], left2 = interval3[0], right2 = interval3[1] + 1; - if (right2 >= xv.length) - return; - while (i4 > left2 && xv[right2] - val <= val - xv[left2]) { - interval3[0] = ++left2; - interval3[1] = right2; - ++right2; - } - } - function output(xv, yhat, ux, uy) { - var n3 = xv.length, out = []; - var i4 = 0, cnt = 0, prev = [], v3; - for (; i4 < n3; ++i4) { - v3 = xv[i4] + ux; - if (prev[0] === v3) { - prev[1] += (yhat[i4] - prev[1]) / ++cnt; - } else { - cnt = 0; - prev[1] += uy; - prev = [v3, yhat[i4]]; - out.push(prev); - } - } - prev[1] += uy; - return out; - } - function logarithmic() { - var x6 = function x7(d3) { - return d3[0]; - }, y5 = function y6(d3) { - return d3[1]; - }, base = Math.E, domain; - function logarithmic2(data3) { - var n3 = 0, X2 = 0, Y2 = 0, XY = 0, X22 = 0, xmin = domain ? +domain[0] : Infinity, xmax = domain ? +domain[1] : -Infinity, lb = Math.log(base); - visitPoints(data3, x6, y5, function(dx, dy) { - var lx = Math.log(dx) / lb; - ++n3; - X2 += (lx - X2) / n3; - Y2 += (dy - Y2) / n3; - XY += (lx * dy - XY) / n3; - X22 += (lx * lx - X22) / n3; - if (!domain) { - if (dx < xmin) - xmin = dx; - if (dx > xmax) - xmax = dx; - } - }); - var _ols = ols(X2, Y2, XY, X22), _ols2 = _slicedToArray2(_ols, 2), intercept = _ols2[0], slope = _ols2[1], fn = function fn2(x7) { - return slope * Math.log(x7) / lb + intercept; - }, out = interpose(xmin, xmax, fn); - out.a = slope; - out.b = intercept; - out.predict = fn; - out.rSquared = determination(data3, x6, y5, Y2, fn); - return out; - } - logarithmic2.domain = function(arr) { - return arguments.length ? (domain = arr, logarithmic2) : domain; - }; - logarithmic2.x = function(fn) { - return arguments.length ? (x6 = fn, logarithmic2) : x6; - }; - logarithmic2.y = function(fn) { - return arguments.length ? (y5 = fn, logarithmic2) : y5; - }; - logarithmic2.base = function(n3) { - return arguments.length ? (base = n3, logarithmic2) : base; - }; - return logarithmic2; - } - function quad() { - var x6 = function x7(d3) { - return d3[0]; - }, y5 = function y6(d3) { - return d3[1]; - }, domain; - function quadratic(data3) { - var _points = points(data3, x6, y5), _points2 = _slicedToArray2(_points, 4), xv = _points2[0], yv = _points2[1], ux = _points2[2], uy = _points2[3], n3 = xv.length; - var X2 = 0, X3 = 0, X4 = 0, XY = 0, X2Y = 0, i4, dx, dy, x22; - for (i4 = 0; i4 < n3; ) { - dx = xv[i4]; - dy = yv[i4++]; - x22 = dx * dx; - X2 += (x22 - X2) / i4; - X3 += (x22 * dx - X3) / i4; - X4 += (x22 * x22 - X4) / i4; - XY += (dx * dy - XY) / i4; - X2Y += (x22 * dy - X2Y) / i4; - } - var Y2 = 0, n0 = 0, xmin = domain ? +domain[0] : Infinity, xmax = domain ? +domain[1] : -Infinity; - visitPoints(data3, x6, y5, function(dx2, dy2) { - n0++; - Y2 += (dy2 - Y2) / n0; - if (!domain) { - if (dx2 < xmin) - xmin = dx2; - if (dx2 > xmax) - xmax = dx2; - } - }); - var X2X2 = X4 - X2 * X2, d3 = X2 * X2X2 - X3 * X3, a4 = (X2Y * X2 - XY * X3) / d3, b10 = (XY * X2X2 - X2Y * X3) / d3, c5 = -a4 * X2, fn = function fn2(x7) { - x7 = x7 - ux; - return a4 * x7 * x7 + b10 * x7 + c5 + uy; - }; - var out = interpose(xmin, xmax, fn); - out.a = a4; - out.b = b10 - 2 * a4 * ux; - out.c = c5 - b10 * ux + a4 * ux * ux + uy; - out.predict = fn; - out.rSquared = determination(data3, x6, y5, Y2, fn); - return out; - } - quadratic.domain = function(arr) { - return arguments.length ? (domain = arr, quadratic) : domain; - }; - quadratic.x = function(fn) { - return arguments.length ? (x6 = fn, quadratic) : x6; - }; - quadratic.y = function(fn) { - return arguments.length ? (y5 = fn, quadratic) : y5; - }; - return quadratic; - } - function polynomial() { - var x6 = function x7(d3) { - return d3[0]; - }, y5 = function y6(d3) { - return d3[1]; - }, order2 = 3, domain; - function polynomial2(data3) { - if (order2 === 1) { - var o3 = linear4().x(x6).y(y5).domain(domain)(data3); - o3.coefficients = [o3.b, o3.a]; - delete o3.a; - delete o3.b; - return o3; - } - if (order2 === 2) { - var _o = quad().x(x6).y(y5).domain(domain)(data3); - _o.coefficients = [_o.c, _o.b, _o.a]; - delete _o.a; - delete _o.b; - delete _o.c; - return _o; - } - var _points = points(data3, x6, y5), _points2 = _slicedToArray2(_points, 4), xv = _points2[0], yv = _points2[1], ux = _points2[2], uy = _points2[3], n3 = xv.length, lhs = [], rhs = [], k4 = order2 + 1; - var Y2 = 0, n0 = 0, xmin = domain ? +domain[0] : Infinity, xmax = domain ? +domain[1] : -Infinity; - visitPoints(data3, x6, y5, function(dx, dy) { - ++n0; - Y2 += (dy - Y2) / n0; - if (!domain) { - if (dx < xmin) - xmin = dx; - if (dx > xmax) - xmax = dx; - } - }); - var i4, j4, l4, v3, c5; - for (i4 = 0; i4 < k4; ++i4) { - for (l4 = 0, v3 = 0; l4 < n3; ++l4) { - v3 += Math.pow(xv[l4], i4) * yv[l4]; - } - lhs.push(v3); - c5 = new Float64Array(k4); - for (j4 = 0; j4 < k4; ++j4) { - for (l4 = 0, v3 = 0; l4 < n3; ++l4) { - v3 += Math.pow(xv[l4], i4 + j4); - } - c5[j4] = v3; - } - rhs.push(c5); - } - rhs.push(lhs); - var coef = gaussianElimination(rhs), fn = function fn2(x7) { - x7 -= ux; - var y6 = uy + coef[0] + coef[1] * x7 + coef[2] * x7 * x7; - for (i4 = 3; i4 < k4; ++i4) { - y6 += coef[i4] * Math.pow(x7, i4); - } - return y6; - }, out = interpose(xmin, xmax, fn); - out.coefficients = uncenter(k4, coef, -ux, uy); - out.predict = fn; - out.rSquared = determination(data3, x6, y5, Y2, fn); - return out; - } - polynomial2.domain = function(arr) { - return arguments.length ? (domain = arr, polynomial2) : domain; - }; - polynomial2.x = function(fn) { - return arguments.length ? (x6 = fn, polynomial2) : x6; - }; - polynomial2.y = function(fn) { - return arguments.length ? (y5 = fn, polynomial2) : y5; - }; - polynomial2.order = function(n3) { - return arguments.length ? (order2 = n3, polynomial2) : order2; - }; - return polynomial2; - } - function uncenter(k4, a4, x6, y5) { - var z3 = Array(k4); - var i4, j4, v3, c5; - for (i4 = 0; i4 < k4; ++i4) { - z3[i4] = 0; - } - for (i4 = k4 - 1; i4 >= 0; --i4) { - v3 = a4[i4]; - c5 = 1; - z3[i4] += v3; - for (j4 = 1; j4 <= i4; ++j4) { - c5 *= (i4 + 1 - j4) / j4; - z3[i4 - j4] += v3 * Math.pow(x6, j4) * c5; - } - } - z3[0] += y5; - return z3; - } - function gaussianElimination(matrix) { - var n3 = matrix.length - 1, coef = []; - var i4, j4, k4, r4, t4; - for (i4 = 0; i4 < n3; ++i4) { - r4 = i4; - for (j4 = i4 + 1; j4 < n3; ++j4) { - if (Math.abs(matrix[i4][j4]) > Math.abs(matrix[i4][r4])) { - r4 = j4; - } - } - for (k4 = i4; k4 < n3 + 1; ++k4) { - t4 = matrix[k4][i4]; - matrix[k4][i4] = matrix[k4][r4]; - matrix[k4][r4] = t4; - } - for (j4 = i4 + 1; j4 < n3; ++j4) { - for (k4 = n3; k4 >= i4; k4--) { - matrix[k4][j4] -= matrix[k4][i4] * matrix[i4][j4] / matrix[i4][i4]; - } - } - } - for (j4 = n3 - 1; j4 >= 0; --j4) { - t4 = 0; - for (k4 = j4 + 1; k4 < n3; ++k4) { - t4 += matrix[k4][j4] * coef[k4]; - } - coef[j4] = (matrix[n3][j4] - t4) / matrix[j4][j4]; - } - return coef; - } - function power() { - var x6 = function x7(d3) { - return d3[0]; - }, y5 = function y6(d3) { - return d3[1]; - }, domain; - function power2(data3) { - var n3 = 0, X2 = 0, Y2 = 0, XY = 0, X22 = 0, YS = 0, xmin = domain ? +domain[0] : Infinity, xmax = domain ? +domain[1] : -Infinity; - visitPoints(data3, x6, y5, function(dx, dy) { - var lx = Math.log(dx), ly = Math.log(dy); - ++n3; - X2 += (lx - X2) / n3; - Y2 += (ly - Y2) / n3; - XY += (lx * ly - XY) / n3; - X22 += (lx * lx - X22) / n3; - YS += (dy - YS) / n3; - if (!domain) { - if (dx < xmin) - xmin = dx; - if (dx > xmax) - xmax = dx; - } - }); - var _ols = ols(X2, Y2, XY, X22), _ols2 = _slicedToArray2(_ols, 2), a4 = _ols2[0], b10 = _ols2[1]; - a4 = Math.exp(a4); - var fn = function fn2(x7) { - return a4 * Math.pow(x7, b10); - }, out = interpose(xmin, xmax, fn); - out.a = a4; - out.b = b10; - out.predict = fn; - out.rSquared = determination(data3, x6, y5, YS, fn); - return out; - } - power2.domain = function(arr) { - return arguments.length ? (domain = arr, power2) : domain; - }; - power2.x = function(fn) { - return arguments.length ? (x6 = fn, power2) : x6; - }; - power2.y = function(fn) { - return arguments.length ? (y5 = fn, power2) : y5; - }; - return power2; - } - exports2.regressionExp = exponential2; - exports2.regressionLinear = linear4; - exports2.regressionLoess = loess; - exports2.regressionLog = logarithmic; - exports2.regressionPoly = polynomial; - exports2.regressionPow = power; - exports2.regressionQuad = quad; - Object.defineProperty(exports2, "__esModule", { value: true }); - }); - } -}); - -// node_modules/pdfast/src/helper.js -var require_helper = __commonJS({ - "node_modules/pdfast/src/helper.js"(exports, module2) { - "use strict"; - var self2 = module2.exports; - module2.exports.isNumber = function(x6) { - return typeof x6 === "number"; - }; - module2.exports.findMin = function(arr) { - if (arr.length === 0) { - return Infinity; - } - var curr = arr[0]; - for (var i4 = 1; i4 < arr.length; i4++) { - curr = Math.min(curr, arr[i4]); - } - return curr; - }; - module2.exports.findMax = function(arr) { - if (arr.length === 0) { - return -Infinity; - } - var curr = arr[0]; - for (var i4 = 1; i4 < arr.length; i4++) { - curr = Math.max(curr, arr[i4]); - } - return curr; - }; - module2.exports.findMinMulti = function(arr) { - var curr = self2.findMin(arr[0]); - for (var i4 = 1; i4 < arr.length; i4++) { - curr = Math.min(curr, self2.findMin(arr[i4])); - } - return curr; - }; - module2.exports.findMaxMulti = function(arr) { - var curr = self2.findMax(arr[0]); - for (var i4 = 1; i4 < arr.length; i4++) { - curr = Math.max(curr, self2.findMax(arr[i4])); - } - return curr; - }; - module2.exports.inside = function(min13, max15, x6) { - return min13 <= x6 && x6 <= max15; - }; - } -}); - -// node_modules/pdfast/src/index.js -var require_src = __commonJS({ - "node_modules/pdfast/src/index.js"(exports, module2) { - "use strict"; - var DEFAULT_SIZE2 = 50; - var DEFAULT_WIDTH = 2; - var LN_2 = Math.log(2); - var self2 = module2.exports; - var helper2 = require_helper(); - function kernel(x6) { - return 1 - Math.abs(x6); - } - module2.exports.getUnifiedMinMax = function(arr, options) { - return self2.getUnifiedMinMaxMulti([arr], options); - }; - module2.exports.getUnifiedMinMaxMulti = function(arrMulti, options) { - options = options || {}; - var relaxMin = false; - var relaxMax = false; - var width2 = helper2.isNumber(options.width) ? options.width : DEFAULT_WIDTH; - var size14 = helper2.isNumber(options.size) ? options.size : DEFAULT_SIZE2; - var min13 = helper2.isNumber(options.min) ? options.min : (relaxMin = true, helper2.findMinMulti(arrMulti)); - var max15 = helper2.isNumber(options.max) ? options.max : (relaxMax = true, helper2.findMaxMulti(arrMulti)); - var range = max15 - min13; - var step = range / (size14 - 1); - if (relaxMin) { - min13 = min13 - 2 * width2 * step; - } - if (relaxMax) { - max15 = max15 + 2 * width2 * step; - } - return { - min: min13, - max: max15 - }; - }; - module2.exports.create = function(arr, options) { - options = options || {}; - if (!arr || arr.length === 0) { - return []; - } - var size14 = helper2.isNumber(options.size) ? options.size : DEFAULT_SIZE2; - var width2 = helper2.isNumber(options.width) ? options.width : DEFAULT_WIDTH; - var normalizedMinMax = self2.getUnifiedMinMax(arr, { - size: size14, - width: width2, - min: options.min, - max: options.max - }); - var min13 = normalizedMinMax.min; - var max15 = normalizedMinMax.max; - var range = max15 - min13; - var step = range / (size14 - 1); - if (range === 0) { - return [{ x: min13, y: 1 }]; - } - var buckets = []; - for (var i4 = 0; i4 < size14; i4++) { - buckets.push({ - x: min13 + i4 * step, - y: 0 - }); - } - var xToBucket = function(x6) { - return Math.floor((x6 - min13) / step); - }; - var partialArea = generatePartialAreas(kernel, width2); - var fullArea = partialArea[width2]; - var c5 = partialArea[width2 - 1] - partialArea[width2 - 2]; - var initalValue = 0; - arr.forEach(function(x6) { - var bucket = xToBucket(x6); - if (bucket + width2 < 0 || bucket - width2 >= buckets.length) { - return; - } - var start = Math.max(bucket - width2, 0); - var mid2 = bucket; - var end2 = Math.min(bucket + width2, buckets.length - 1); - var leftBlockCount = start - (bucket - width2); - var rightBlockCount = bucket + width2 - end2; - var spilledAreaLeft = partialArea[-width2 - 1 + leftBlockCount] || 0; - var spilledAreaRight = partialArea[-width2 - 1 + rightBlockCount] || 0; - var weight = fullArea / (fullArea - spilledAreaLeft - spilledAreaRight); - if (leftBlockCount > 0) { - initalValue += weight * (leftBlockCount - 1) * c5; - } - var startGradPos = Math.max(0, bucket - width2 + 1); - if (helper2.inside(0, buckets.length - 1, startGradPos)) { - buckets[startGradPos].y += weight * 1 * c5; - } - if (helper2.inside(0, buckets.length - 1, mid2 + 1)) { - buckets[mid2 + 1].y -= weight * 2 * c5; - } - if (helper2.inside(0, buckets.length - 1, end2 + 1)) { - buckets[end2 + 1].y += weight * 1 * c5; - } - }); - var accumulator = initalValue; - var gradAccumulator = 0; - var area2 = 0; - buckets.forEach(function(bucket) { - gradAccumulator += bucket.y; - accumulator += gradAccumulator; - bucket.y = accumulator; - area2 += accumulator; - }); - if (area2 > 0) { - buckets.forEach(function(bucket) { - bucket.y /= area2; - }); - } - return buckets; - }; - function generatePartialAreas(kernel2, width2) { - var partialAreas = {}; - var accumulator = 0; - for (var i4 = -width2; i4 <= width2; i4++) { - accumulator += kernel2(i4 / width2); - partialAreas[i4] = accumulator; - } - return partialAreas; - } - module2.exports.getExpectedValueFromPdf = function(pdf2) { - if (!pdf2 || pdf2.length === 0) { - return void 0; - } - var expected = 0; - pdf2.forEach(function(obj) { - expected += obj.x * obj.y; - }); - return expected; - }; - module2.exports.getXWithLeftTailArea = function(pdf2, area2) { - if (!pdf2 || pdf2.length === 0) { - return void 0; - } - var accumulator = 0; - var last17 = 0; - for (var i4 = 0; i4 < pdf2.length; i4++) { - last17 = i4; - accumulator += pdf2[i4].y; - if (accumulator >= area2) { - break; - } - } - return pdf2[last17].x; - }; - module2.exports.getPerplexity = function(pdf2) { - if (!pdf2 || pdf2.length === 0) { - return void 0; - } - var entropy = 0; - pdf2.forEach(function(obj) { - var ln3 = Math.log(obj.y); - if (isFinite(ln3)) { - entropy += obj.y * ln3; - } - }); - entropy = -entropy / LN_2; - return Math.pow(2, entropy); - }; - } -}); - -// node_modules/fmin/build/fmin.js -var require_fmin = __commonJS({ - "node_modules/fmin/build/fmin.js"(exports, module2) { - (function(global2, factory) { - typeof exports === "object" && typeof module2 !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : factory(global2.fmin = global2.fmin || {}); - })(exports, function(exports2) { - "use strict"; - function bisect2(f3, a4, b10, parameters) { - parameters = parameters || {}; - var maxIterations = parameters.maxIterations || 100, tolerance3 = parameters.tolerance || 1e-10, fA = f3(a4), fB = f3(b10), delta = b10 - a4; - if (fA * fB > 0) { - throw "Initial bisect points must have opposite signs"; - } - if (fA === 0) - return a4; - if (fB === 0) - return b10; - for (var i4 = 0; i4 < maxIterations; ++i4) { - delta /= 2; - var mid2 = a4 + delta, fMid = f3(mid2); - if (fMid * fA >= 0) { - a4 = mid2; - } - if (Math.abs(delta) < tolerance3 || fMid === 0) { - return mid2; - } - } - return a4 + delta; - } - function zeros2(x6) { - var r4 = new Array(x6); - for (var i4 = 0; i4 < x6; ++i4) { - r4[i4] = 0; - } - return r4; - } - function zerosM2(x6, y5) { - return zeros2(x6).map(function() { - return zeros2(y5); - }); - } - function dot7(a4, b10) { - var ret = 0; - for (var i4 = 0; i4 < a4.length; ++i4) { - ret += a4[i4] * b10[i4]; - } - return ret; - } - function norm22(a4) { - return Math.sqrt(dot7(a4, a4)); - } - function scale12(ret, value2, c5) { - for (var i4 = 0; i4 < value2.length; ++i4) { - ret[i4] = value2[i4] * c5; - } - } - function weightedSum(ret, w1, v1, w22, v22) { - for (var j4 = 0; j4 < ret.length; ++j4) { - ret[j4] = w1 * v1[j4] + w22 * v22[j4]; - } - } - function nelderMead3(f3, x0, parameters) { - parameters = parameters || {}; - var maxIterations = parameters.maxIterations || x0.length * 200, nonZeroDelta = parameters.nonZeroDelta || 1.05, zeroDelta = parameters.zeroDelta || 1e-3, minErrorDelta = parameters.minErrorDelta || 1e-6, minTolerance = parameters.minErrorDelta || 1e-5, rho = parameters.rho !== void 0 ? parameters.rho : 1, chi = parameters.chi !== void 0 ? parameters.chi : 2, psi = parameters.psi !== void 0 ? parameters.psi : -0.5, sigma = parameters.sigma !== void 0 ? parameters.sigma : 0.5, maxDiff; - var N3 = x0.length, simplex = new Array(N3 + 1); - simplex[0] = x0; - simplex[0].fx = f3(x0); - simplex[0].id = 0; - for (var i4 = 0; i4 < N3; ++i4) { - var point2 = x0.slice(); - point2[i4] = point2[i4] ? point2[i4] * nonZeroDelta : zeroDelta; - simplex[i4 + 1] = point2; - simplex[i4 + 1].fx = f3(point2); - simplex[i4 + 1].id = i4 + 1; - } - function updateSimplex(value2) { - for (var i5 = 0; i5 < value2.length; i5++) { - simplex[N3][i5] = value2[i5]; - } - simplex[N3].fx = value2.fx; - } - var sortOrder = function(a4, b10) { - return a4.fx - b10.fx; - }; - var centroid = x0.slice(), reflected = x0.slice(), contracted = x0.slice(), expanded = x0.slice(); - for (var iteration = 0; iteration < maxIterations; ++iteration) { - simplex.sort(sortOrder); - if (parameters.history) { - var sortedSimplex = simplex.map(function(x6) { - var state2 = x6.slice(); - state2.fx = x6.fx; - state2.id = x6.id; - return state2; - }); - sortedSimplex.sort(function(a4, b10) { - return a4.id - b10.id; - }); - parameters.history.push({ - x: simplex[0].slice(), - fx: simplex[0].fx, - simplex: sortedSimplex - }); - } - maxDiff = 0; - for (i4 = 0; i4 < N3; ++i4) { - maxDiff = Math.max(maxDiff, Math.abs(simplex[0][i4] - simplex[1][i4])); - } - if (Math.abs(simplex[0].fx - simplex[N3].fx) < minErrorDelta && maxDiff < minTolerance) { - break; - } - for (i4 = 0; i4 < N3; ++i4) { - centroid[i4] = 0; - for (var j4 = 0; j4 < N3; ++j4) { - centroid[i4] += simplex[j4][i4]; - } - centroid[i4] /= N3; - } - var worst = simplex[N3]; - weightedSum(reflected, 1 + rho, centroid, -rho, worst); - reflected.fx = f3(reflected); - if (reflected.fx < simplex[0].fx) { - weightedSum(expanded, 1 + chi, centroid, -chi, worst); - expanded.fx = f3(expanded); - if (expanded.fx < reflected.fx) { - updateSimplex(expanded); - } else { - updateSimplex(reflected); - } - } else if (reflected.fx >= simplex[N3 - 1].fx) { - var shouldReduce = false; - if (reflected.fx > worst.fx) { - weightedSum(contracted, 1 + psi, centroid, -psi, worst); - contracted.fx = f3(contracted); - if (contracted.fx < worst.fx) { - updateSimplex(contracted); - } else { - shouldReduce = true; - } - } else { - weightedSum(contracted, 1 - psi * rho, centroid, psi * rho, worst); - contracted.fx = f3(contracted); - if (contracted.fx < reflected.fx) { - updateSimplex(contracted); - } else { - shouldReduce = true; - } - } - if (shouldReduce) { - if (sigma >= 1) - break; - for (i4 = 1; i4 < simplex.length; ++i4) { - weightedSum(simplex[i4], 1 - sigma, simplex[0], sigma, simplex[i4]); - simplex[i4].fx = f3(simplex[i4]); - } - } - } else { - updateSimplex(reflected); - } - } - simplex.sort(sortOrder); - return { - fx: simplex[0].fx, - x: simplex[0] - }; - } - function wolfeLineSearch(f3, pk, current, next, a4, c1, c22) { - var phi0 = current.fx, phiPrime0 = dot7(current.fxprime, pk), phi2 = phi0, phi_old = phi0, phiPrime = phiPrime0, a0 = 0; - a4 = a4 || 1; - c1 = c1 || 1e-6; - c22 = c22 || 0.1; - function zoom2(a_lo, a_high, phi_lo) { - for (var iteration2 = 0; iteration2 < 16; ++iteration2) { - a4 = (a_lo + a_high) / 2; - weightedSum(next.x, 1, current.x, a4, pk); - phi2 = next.fx = f3(next.x, next.fxprime); - phiPrime = dot7(next.fxprime, pk); - if (phi2 > phi0 + c1 * a4 * phiPrime0 || phi2 >= phi_lo) { - a_high = a4; - } else { - if (Math.abs(phiPrime) <= -c22 * phiPrime0) { - return a4; - } - if (phiPrime * (a_high - a_lo) >= 0) { - a_high = a_lo; - } - a_lo = a4; - phi_lo = phi2; - } - } - return 0; - } - for (var iteration = 0; iteration < 10; ++iteration) { - weightedSum(next.x, 1, current.x, a4, pk); - phi2 = next.fx = f3(next.x, next.fxprime); - phiPrime = dot7(next.fxprime, pk); - if (phi2 > phi0 + c1 * a4 * phiPrime0 || iteration && phi2 >= phi_old) { - return zoom2(a0, a4, phi_old); - } - if (Math.abs(phiPrime) <= -c22 * phiPrime0) { - return a4; - } - if (phiPrime >= 0) { - return zoom2(a4, a0, phi2); - } - phi_old = phi2; - a0 = a4; - a4 *= 2; - } - return a4; - } - function conjugateGradient2(f3, initial, params) { - var current = { x: initial.slice(), fx: 0, fxprime: initial.slice() }, next = { x: initial.slice(), fx: 0, fxprime: initial.slice() }, yk = initial.slice(), pk, temp, a4 = 1, maxIterations; - params = params || {}; - maxIterations = params.maxIterations || initial.length * 20; - current.fx = f3(current.x, current.fxprime); - pk = current.fxprime.slice(); - scale12(pk, current.fxprime, -1); - for (var i4 = 0; i4 < maxIterations; ++i4) { - a4 = wolfeLineSearch(f3, pk, current, next, a4); - if (params.history) { - params.history.push({ - x: current.x.slice(), - fx: current.fx, - fxprime: current.fxprime.slice(), - alpha: a4 - }); - } - if (!a4) { - scale12(pk, current.fxprime, -1); - } else { - weightedSum(yk, 1, next.fxprime, -1, current.fxprime); - var delta_k = dot7(current.fxprime, current.fxprime), beta_k = Math.max(0, dot7(yk, next.fxprime) / delta_k); - weightedSum(pk, beta_k, pk, -1, next.fxprime); - temp = current; - current = next; - next = temp; - } - if (norm22(current.fxprime) <= 1e-5) { - break; - } - } - if (params.history) { - params.history.push({ - x: current.x.slice(), - fx: current.fx, - fxprime: current.fxprime.slice(), - alpha: a4 - }); - } - return current; - } - function gradientDescent(f3, initial, params) { - params = params || {}; - var maxIterations = params.maxIterations || initial.length * 100, learnRate = params.learnRate || 1e-3, current = { x: initial.slice(), fx: 0, fxprime: initial.slice() }; - for (var i4 = 0; i4 < maxIterations; ++i4) { - current.fx = f3(current.x, current.fxprime); - if (params.history) { - params.history.push({ - x: current.x.slice(), - fx: current.fx, - fxprime: current.fxprime.slice() - }); - } - weightedSum(current.x, 1, current.x, -learnRate, current.fxprime); - if (norm22(current.fxprime) <= 1e-5) { - break; - } - } - return current; - } - function gradientDescentLineSearch(f3, initial, params) { - params = params || {}; - var current = { x: initial.slice(), fx: 0, fxprime: initial.slice() }, next = { x: initial.slice(), fx: 0, fxprime: initial.slice() }, maxIterations = params.maxIterations || initial.length * 100, learnRate = params.learnRate || 1, pk = initial.slice(), c1 = params.c1 || 1e-3, c22 = params.c2 || 0.1, temp, functionCalls = []; - if (params.history) { - var inner = f3; - f3 = function(x6, fxprime) { - functionCalls.push(x6.slice()); - return inner(x6, fxprime); - }; - } - current.fx = f3(current.x, current.fxprime); - for (var i4 = 0; i4 < maxIterations; ++i4) { - scale12(pk, current.fxprime, -1); - learnRate = wolfeLineSearch(f3, pk, current, next, learnRate, c1, c22); - if (params.history) { - params.history.push({ - x: current.x.slice(), - fx: current.fx, - fxprime: current.fxprime.slice(), - functionCalls, - learnRate, - alpha: learnRate - }); - functionCalls = []; - } - temp = current; - current = next; - next = temp; - if (learnRate === 0 || norm22(current.fxprime) < 1e-5) - break; - } - return current; - } - exports2.bisect = bisect2; - exports2.nelderMead = nelderMead3; - exports2.conjugateGradient = conjugateGradient2; - exports2.gradientDescent = gradientDescent; - exports2.gradientDescentLineSearch = gradientDescentLineSearch; - exports2.zeros = zeros2; - exports2.zerosM = zerosM2; - exports2.norm2 = norm22; - exports2.weightedSum = weightedSum; - exports2.scale = scale12; - }); - } -}); - -// node_modules/@antv/algorithm/lib/workers/constant.js -var require_constant2 = __commonJS({ - "node_modules/@antv/algorithm/lib/workers/constant.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.MESSAGE = exports.ALGORITHM = void 0; - var ALGORITHM = { - pageRank: "pageRank", - breadthFirstSearch: "breadthFirstSearch", - connectedComponent: "connectedComponent", - depthFirstSearch: "depthFirstSearch", - detectCycle: "detectCycle", - detectDirectedCycle: "detectDirectedCycle", - detectAllCycles: "detectAllCycles", - detectAllDirectedCycle: "detectAllDirectedCycle", - detectAllUndirectedCycle: "detectAllUndirectedCycle", - dijkstra: "dijkstra", - findAllPath: "findAllPath", - findShortestPath: "findShortestPath", - floydWarshall: "floydWarshall", - getAdjMatrix: "getAdjMatrix", - getDegree: "getDegree", - getInDegree: "getInDegree", - getNeighbors: "getNeighbors", - getOutDegree: "getOutDegree", - labelPropagation: "labelPropagation", - louvain: "louvain", - GADDI: "GADDI", - minimumSpanningTree: "minimumSpanningTree", - SUCCESS: "SUCCESS", - FAILURE: "FAILURE" - }; - exports.ALGORITHM = ALGORITHM; - var MESSAGE = { - SUCCESS: "SUCCESS", - FAILURE: "FAILURE" - }; - exports.MESSAGE = MESSAGE; - } -}); - -// node_modules/@antv/algorithm/lib/adjacent-matrix.js -var require_adjacent_matrix = __commonJS({ - "node_modules/@antv/algorithm/lib/adjacent-matrix.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var adjMatrix3 = function adjMatrix4(graphData, directed) { - var nodes = graphData.nodes, edges = graphData.edges; - var matrix = []; - var nodeMap = {}; - if (!nodes) { - throw new Error("invalid nodes data!"); - } - if (nodes) { - nodes.forEach(function(node, i4) { - nodeMap[node.id] = i4; - var row = []; - matrix.push(row); - }); - } - if (edges) { - edges.forEach(function(edge2) { - var source = edge2.source, target = edge2.target; - var sIndex = nodeMap[source]; - var tIndex = nodeMap[target]; - if (!sIndex && sIndex !== 0 || !tIndex && tIndex !== 0) - return; - matrix[sIndex][tIndex] = 1; - if (!directed) { - matrix[tIndex][sIndex] = 1; - } - }); - } - return matrix; - }; - var _default2 = adjMatrix3; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/structs/linked-list.js -var require_linked_list = __commonJS({ - "node_modules/@antv/algorithm/lib/structs/linked-list.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = exports.LinkedListNode = void 0; - var defaultComparator3 = function defaultComparator4(a4, b10) { - if (a4 === b10) { - return true; - } - return false; - }; - var LinkedListNode2 = function() { - function LinkedListNode3(value2, next) { - if (next === void 0) { - next = null; - } - this.value = value2; - this.next = next; - } - LinkedListNode3.prototype.toString = function(callback) { - return callback ? callback(this.value) : "".concat(this.value); - }; - return LinkedListNode3; - }(); - exports.LinkedListNode = LinkedListNode2; - var LinkedList2 = function() { - function LinkedList3(comparator) { - if (comparator === void 0) { - comparator = defaultComparator3; - } - this.head = null; - this.tail = null; - this.compare = comparator; - } - LinkedList3.prototype.prepend = function(value2) { - var newNode = new LinkedListNode2(value2, this.head); - this.head = newNode; - if (!this.tail) { - this.tail = newNode; - } - return this; - }; - LinkedList3.prototype.append = function(value2) { - var newNode = new LinkedListNode2(value2); - if (!this.head) { - this.head = newNode; - this.tail = newNode; - return this; - } - this.tail.next = newNode; - this.tail = newNode; - return this; - }; - LinkedList3.prototype.delete = function(value2) { - if (!this.head) { - return null; - } - var deleteNode = null; - while (this.head && this.compare(this.head.value, value2)) { - deleteNode = this.head; - this.head = this.head.next; - } - var currentNode = this.head; - if (currentNode !== null) { - while (currentNode.next) { - if (this.compare(currentNode.next.value, value2)) { - deleteNode = currentNode.next; - currentNode.next = currentNode.next.next; - } else { - currentNode = currentNode.next; - } - } - } - if (this.compare(this.tail.value, value2)) { - this.tail = currentNode; - } - return deleteNode; - }; - LinkedList3.prototype.find = function(_a6) { - var _b = _a6.value, value2 = _b === void 0 ? void 0 : _b, _c = _a6.callback, callback = _c === void 0 ? void 0 : _c; - if (!this.head) { - return null; - } - var currentNode = this.head; - while (currentNode) { - if (callback && callback(currentNode.value)) { - return currentNode; - } - if (value2 !== void 0 && this.compare(currentNode.value, value2)) { - return currentNode; - } - currentNode = currentNode.next; - } - return null; - }; - LinkedList3.prototype.deleteTail = function() { - var deletedTail = this.tail; - if (this.head === this.tail) { - this.head = null; - this.tail = null; - return deletedTail; - } - var currentNode = this.head; - while (currentNode.next) { - if (!currentNode.next.next) { - currentNode.next = null; - } else { - currentNode = currentNode.next; - } - } - this.tail = currentNode; - return deletedTail; - }; - LinkedList3.prototype.deleteHead = function() { - if (!this.head) { - return null; - } - var deletedHead = this.head; - if (this.head.next) { - this.head = this.head.next; - } else { - this.head = null; - this.tail = null; - } - return deletedHead; - }; - LinkedList3.prototype.fromArray = function(values4) { - var _this = this; - values4.forEach(function(value2) { - return _this.append(value2); - }); - return this; - }; - LinkedList3.prototype.toArray = function() { - var nodes = []; - var currentNode = this.head; - while (currentNode) { - nodes.push(currentNode); - currentNode = currentNode.next; - } - return nodes; - }; - LinkedList3.prototype.reverse = function() { - var currentNode = this.head; - var prevNode = null; - var nextNode = null; - while (currentNode) { - nextNode = currentNode.next; - currentNode.next = prevNode; - prevNode = currentNode; - currentNode = nextNode; - } - this.tail = this.head; - this.head = prevNode; - }; - LinkedList3.prototype.toString = function(callback) { - if (callback === void 0) { - callback = void 0; - } - return this.toArray().map(function(node) { - return node.toString(callback); - }).toString(); - }; - return LinkedList3; - }(); - var _default2 = LinkedList2; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/structs/queue.js -var require_queue = __commonJS({ - "node_modules/@antv/algorithm/lib/structs/queue.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var _linkedList = _interopRequireDefault(require_linked_list()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var Queue2 = function() { - function Queue3() { - this.linkedList = new _linkedList.default(); - } - Queue3.prototype.isEmpty = function() { - return !this.linkedList.head; - }; - Queue3.prototype.peek = function() { - if (!this.linkedList.head) { - return null; - } - return this.linkedList.head.value; - }; - Queue3.prototype.enqueue = function(value2) { - this.linkedList.append(value2); - }; - Queue3.prototype.dequeue = function() { - var removeHead = this.linkedList.deleteHead(); - return removeHead ? removeHead.value : null; - }; - Queue3.prototype.toString = function(callback) { - return this.linkedList.toString(callback); - }; - return Queue3; - }(); - var _default2 = Queue2; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/util.js -var require_util = __commonJS({ - "node_modules/@antv/algorithm/lib/util.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.uniqueId = exports.getOutEdgesNodeId = exports.getNeighbors = exports.getEdgesByNodeId = void 0; - var getNeighbors3 = function getNeighbors4(nodeId, edges, type2) { - if (edges === void 0) { - edges = []; - } - var currentEdges = edges.filter(function(edge2) { - return edge2.source === nodeId || edge2.target === nodeId; - }); - if (type2 === "target") { - var neighhborsConverter_1 = function neighhborsConverter_12(edge2) { - return edge2.source === nodeId; - }; - return currentEdges.filter(neighhborsConverter_1).map(function(edge2) { - return edge2.target; - }); - } - if (type2 === "source") { - var neighhborsConverter_2 = function neighhborsConverter_22(edge2) { - return edge2.target === nodeId; - }; - return currentEdges.filter(neighhborsConverter_2).map(function(edge2) { - return edge2.source; - }); - } - var neighhborsConverter = function neighhborsConverter2(edge2) { - return edge2.source === nodeId ? edge2.target : edge2.source; - }; - return currentEdges.map(neighhborsConverter); - }; - exports.getNeighbors = getNeighbors3; - var getOutEdgesNodeId3 = function getOutEdgesNodeId4(nodeId, edges) { - return edges.filter(function(edge2) { - return edge2.source === nodeId; - }); - }; - exports.getOutEdgesNodeId = getOutEdgesNodeId3; - var getEdgesByNodeId3 = function getEdgesByNodeId4(nodeId, edges) { - return edges.filter(function(edge2) { - return edge2.source === nodeId || edge2.target === nodeId; - }); - }; - exports.getEdgesByNodeId = getEdgesByNodeId3; - var uniqueId14 = function uniqueId15(index2) { - if (index2 === void 0) { - index2 = 0; - } - var random1 = "".concat(Math.random()).split(".")[1].substr(0, 5); - var random22 = "".concat(Math.random()).split(".")[1].substr(0, 5); - return "".concat(index2, "-").concat(random1).concat(random22); - }; - exports.uniqueId = uniqueId14; - } -}); - -// node_modules/@antv/algorithm/lib/bfs.js -var require_bfs = __commonJS({ - "node_modules/@antv/algorithm/lib/bfs.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var _queue = _interopRequireDefault(require_queue()); - var _util = require_util(); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - function initCallbacks3(callbacks) { - if (callbacks === void 0) { - callbacks = {}; - } - var initiatedCallback = callbacks; - var stubCallback = function stubCallback2() { - }; - var allowTraversalCallback = function() { - var seen = {}; - return function(_a6) { - var next = _a6.next; - var id = next; - if (!seen[id]) { - seen[id] = true; - return true; - } - return false; - }; - }(); - initiatedCallback.allowTraversal = callbacks.allowTraversal || allowTraversalCallback; - initiatedCallback.enter = callbacks.enter || stubCallback; - initiatedCallback.leave = callbacks.leave || stubCallback; - return initiatedCallback; - } - var breadthFirstSearch3 = function breadthFirstSearch4(graphData, startNodeId, originalCallbacks, directed) { - if (directed === void 0) { - directed = true; - } - var callbacks = initCallbacks3(originalCallbacks); - var nodeQueue = new _queue.default(); - var _a6 = graphData.edges, edges = _a6 === void 0 ? [] : _a6; - nodeQueue.enqueue(startNodeId); - var previousNode = ""; - var _loop_1 = function _loop_12() { - var currentNode = nodeQueue.dequeue(); - callbacks.enter({ - current: currentNode, - previous: previousNode - }); - (0, _util.getNeighbors)(currentNode, edges, directed ? "target" : void 0).forEach(function(nextNode) { - if (callbacks.allowTraversal({ - previous: previousNode, - current: currentNode, - next: nextNode - })) { - nodeQueue.enqueue(nextNode); - } - }); - callbacks.leave({ - current: currentNode, - previous: previousNode - }); - previousNode = currentNode; - }; - while (!nodeQueue.isEmpty()) { - _loop_1(); - } - }; - var _default2 = breadthFirstSearch3; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/connected-component.js -var require_connected_component = __commonJS({ - "node_modules/@antv/algorithm/lib/connected-component.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = getConnectedComponents2; - exports.detectStrongConnectComponents = exports.detectConnectedComponents = void 0; - var _util = require_util(); - var detectConnectedComponents3 = function detectConnectedComponents4(graphData) { - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var allComponents = []; - var visited = {}; - var nodeStack = []; - var getComponent = function getComponent2(node2) { - nodeStack.push(node2); - visited[node2.id] = true; - var neighbors = (0, _util.getNeighbors)(node2.id, edges); - var _loop_1 = function _loop_12(i6) { - var neighbor = neighbors[i6]; - if (!visited[neighbor]) { - var targetNode = nodes.filter(function(node3) { - return node3.id === neighbor; - }); - if (targetNode.length > 0) { - getComponent2(targetNode[0]); - } - } - }; - for (var i5 = 0; i5 < neighbors.length; ++i5) { - _loop_1(i5); - } - }; - for (var i4 = 0; i4 < nodes.length; i4++) { - var node = nodes[i4]; - if (!visited[node.id]) { - getComponent(node); - var component2 = []; - while (nodeStack.length > 0) { - component2.push(nodeStack.pop()); - } - allComponents.push(component2); - } - } - return allComponents; - }; - exports.detectConnectedComponents = detectConnectedComponents3; - var detectStrongConnectComponents3 = function detectStrongConnectComponents4(graphData) { - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var nodeStack = []; - var inStack = {}; - var indices = {}; - var lowLink = {}; - var allComponents = []; - var index2 = 0; - var getComponent = function getComponent2(node2) { - indices[node2.id] = index2; - lowLink[node2.id] = index2; - index2 += 1; - nodeStack.push(node2); - inStack[node2.id] = true; - var neighbors = (0, _util.getNeighbors)(node2.id, edges, "target").filter(function(n3) { - return nodes.map(function(node3) { - return node3.id; - }).indexOf(n3) > -1; - }); - var _loop_2 = function _loop_22(i5) { - var targetNodeID = neighbors[i5]; - if (!indices[targetNodeID] && indices[targetNodeID] !== 0) { - var targetNode = nodes.filter(function(node3) { - return node3.id === targetNodeID; - }); - if (targetNode.length > 0) { - getComponent2(targetNode[0]); - } - lowLink[node2.id] = Math.min(lowLink[node2.id], lowLink[targetNodeID]); - } else if (inStack[targetNodeID]) { - lowLink[node2.id] = Math.min(lowLink[node2.id], indices[targetNodeID]); - } - }; - for (var i4 = 0; i4 < neighbors.length; i4++) { - _loop_2(i4); - } - if (lowLink[node2.id] === indices[node2.id]) { - var component2 = []; - while (nodeStack.length > 0) { - var tmpNode = nodeStack.pop(); - inStack[tmpNode.id] = false; - component2.push(tmpNode); - if (tmpNode === node2) - break; - } - if (component2.length > 0) { - allComponents.push(component2); - } - } - }; - for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { - var node = nodes_1[_i]; - if (!indices[node.id] && indices[node.id] !== 0) { - getComponent(node); - } - } - return allComponents; - }; - exports.detectStrongConnectComponents = detectStrongConnectComponents3; - function getConnectedComponents2(graphData, directed) { - if (directed) - return detectStrongConnectComponents3(graphData); - return detectConnectedComponents3(graphData); - } - } -}); - -// node_modules/@antv/algorithm/lib/degree.js -var require_degree = __commonJS({ - "node_modules/@antv/algorithm/lib/degree.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.getOutDegree = exports.getInDegree = exports.default = void 0; - var degree4 = function degree5(graphData) { - var degrees = {}; - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - nodes.forEach(function(node) { - degrees[node.id] = { - degree: 0, - inDegree: 0, - outDegree: 0 - }; - }); - edges.forEach(function(edge2) { - degrees[edge2.source].degree++; - degrees[edge2.source].outDegree++; - degrees[edge2.target].degree++; - degrees[edge2.target].inDegree++; - }); - return degrees; - }; - var _default2 = degree4; - exports.default = _default2; - var getInDegree3 = function getInDegree4(graphData, nodeId) { - var nodeDegree = degree4(graphData); - if (nodeDegree[nodeId]) { - return degree4(graphData)[nodeId].inDegree; - } - return 0; - }; - exports.getInDegree = getInDegree3; - var getOutDegree3 = function getOutDegree4(graphData, nodeId) { - var nodeDegree = degree4(graphData); - if (nodeDegree[nodeId]) { - return degree4(graphData)[nodeId].outDegree; - } - return 0; - }; - exports.getOutDegree = getOutDegree3; - } -}); - -// node_modules/@antv/algorithm/lib/dfs.js -var require_dfs = __commonJS({ - "node_modules/@antv/algorithm/lib/dfs.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = depthFirstSearch2; - var _util = require_util(); - function initCallbacks3(callbacks) { - if (callbacks === void 0) { - callbacks = {}; - } - var initiatedCallback = callbacks; - var stubCallback = function stubCallback2() { - }; - var allowTraversalCallback = function() { - var seen = {}; - return function(_a6) { - var next = _a6.next; - if (!seen[next]) { - seen[next] = true; - return true; - } - return false; - }; - }(); - initiatedCallback.allowTraversal = callbacks.allowTraversal || allowTraversalCallback; - initiatedCallback.enter = callbacks.enter || stubCallback; - initiatedCallback.leave = callbacks.leave || stubCallback; - return initiatedCallback; - } - function depthFirstSearchRecursive2(graphData, currentNode, previousNode, callbacks) { - callbacks.enter({ - current: currentNode, - previous: previousNode - }); - var _a6 = graphData.edges, edges = _a6 === void 0 ? [] : _a6; - (0, _util.getNeighbors)(currentNode, edges, "target").forEach(function(nextNode) { - if (callbacks.allowTraversal({ - previous: previousNode, - current: currentNode, - next: nextNode - })) { - depthFirstSearchRecursive2(graphData, nextNode, currentNode, callbacks); - } - }); - callbacks.leave({ - current: currentNode, - previous: previousNode - }); - } - function depthFirstSearch2(graphData, startNodeId, callbacks) { - depthFirstSearchRecursive2(graphData, startNodeId, "", initCallbacks3(callbacks)); - } - } -}); - -// node_modules/@antv/algorithm/lib/detect-cycle.js -var require_detect_cycle = __commonJS({ - "node_modules/@antv/algorithm/lib/detect-cycle.js"(exports) { - "use strict"; - function _typeof5(obj) { - "@babel/helpers - typeof"; - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof5 = function _typeof6(obj2) { - return typeof obj2; - }; - } else { - _typeof5 = function _typeof6(obj2) { - return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }; - } - return _typeof5(obj); - } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.detectAllUndirectedCycle = exports.detectAllDirectedCycle = exports.detectAllCycles = exports.default = void 0; - var _dfs = _interopRequireDefault(require_dfs()); - var _connectedComponent = _interopRequireWildcard(require_connected_component()); - var _util = require_util(); - function _getRequireWildcardCache(nodeInterop) { - if (typeof WeakMap !== "function") - return null; - var cacheBabelInterop = new WeakMap(); - var cacheNodeInterop = new WeakMap(); - return (_getRequireWildcardCache = function _getRequireWildcardCache2(nodeInterop2) { - return nodeInterop2 ? cacheNodeInterop : cacheBabelInterop; - })(nodeInterop); - } - function _interopRequireWildcard(obj, nodeInterop) { - if (!nodeInterop && obj && obj.__esModule) { - return obj; - } - if (obj === null || _typeof5(obj) !== "object" && typeof obj !== "function") { - return { default: obj }; - } - var cache3 = _getRequireWildcardCache(nodeInterop); - if (cache3 && cache3.has(obj)) { - return cache3.get(obj); - } - var newObj = {}; - var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; - for (var key in obj) { - if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { - var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; - if (desc && (desc.get || desc.set)) { - Object.defineProperty(newObj, key, desc); - } else { - newObj[key] = obj[key]; - } - } - } - newObj.default = obj; - if (cache3) { - cache3.set(obj, newObj); - } - return newObj; - } - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var detectDirectedCycle4 = function detectDirectedCycle5(graphData) { - var cycle = null; - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6; - var dfsParentMap = {}; - var unvisitedSet = {}; - var visitingSet = {}; - var visitedSet = {}; - nodes.forEach(function(node) { - unvisitedSet[node.id] = node; - }); - var callbacks = { - enter: function enter(_a7) { - var currentNode = _a7.current, previousNode = _a7.previous; - if (visitingSet[currentNode]) { - cycle = {}; - var currentCycleNode = currentNode; - var previousCycleNode = previousNode; - while (previousCycleNode !== currentNode) { - cycle[currentCycleNode] = previousCycleNode; - currentCycleNode = previousCycleNode; - previousCycleNode = dfsParentMap[previousCycleNode]; - } - cycle[currentCycleNode] = previousCycleNode; - } else { - visitingSet[currentNode] = currentNode; - delete unvisitedSet[currentNode]; - dfsParentMap[currentNode] = previousNode; - } - }, - leave: function leave(_a7) { - var currentNode = _a7.current; - visitedSet[currentNode] = currentNode; - delete visitingSet[currentNode]; - }, - allowTraversal: function allowTraversal(_a7) { - var nextNode = _a7.next; - if (cycle) { - return false; - } - return !visitedSet[nextNode]; - } - }; - while (Object.keys(unvisitedSet).length) { - var firsetUnVisitedKey = Object.keys(unvisitedSet)[0]; - (0, _dfs.default)(graphData, firsetUnVisitedKey, callbacks); - } - return cycle; - }; - var detectAllUndirectedCycle3 = function detectAllUndirectedCycle4(graphData, nodeIds, include) { - var _a6, _b; - if (include === void 0) { - include = true; - } - var allCycles = []; - var components = (0, _connectedComponent.default)(graphData, false); - for (var _i = 0, components_1 = components; _i < components_1.length; _i++) { - var component2 = components_1[_i]; - if (!component2.length) - continue; - var root = component2[0]; - var rootId = root.id; - var stack = [root]; - var parent_1 = (_a6 = {}, _a6[rootId] = root, _a6); - var used = (_b = {}, _b[rootId] = new Set(), _b); - while (stack.length > 0) { - var curNode = stack.pop(); - var curNodeId = curNode.id; - var neighbors = (0, _util.getNeighbors)(curNodeId, graphData.edges); - var _loop_1 = function _loop_12(i5) { - var _c; - var neighborId = neighbors[i5]; - var neighbor = graphData.nodes.find(function(node) { - return node.id === neighborId; - }); - if (neighborId === curNodeId) { - allCycles.push((_c = {}, _c[neighborId] = curNode, _c)); - } else if (!(neighborId in used)) { - parent_1[neighborId] = curNode; - stack.push(neighbor); - used[neighborId] = new Set([curNode]); - } else if (!used[curNodeId].has(neighbor)) { - var cycleValid = true; - var cyclePath = [neighbor, curNode]; - var p4 = parent_1[curNodeId]; - while (used[neighborId].size && !used[neighborId].has(p4)) { - cyclePath.push(p4); - if (p4 === parent_1[p4.id]) - break; - else - p4 = parent_1[p4.id]; - } - cyclePath.push(p4); - if (nodeIds && include) { - cycleValid = false; - if (cyclePath.findIndex(function(node) { - return nodeIds.indexOf(node.id) > -1; - }) > -1) { - cycleValid = true; - } - } else if (nodeIds && !include) { - if (cyclePath.findIndex(function(node) { - return nodeIds.indexOf(node.id) > -1; - }) > -1) { - cycleValid = false; - } - } - if (cycleValid) { - var cycle = {}; - for (var index2 = 1; index2 < cyclePath.length; index2 += 1) { - cycle[cyclePath[index2 - 1].id] = cyclePath[index2]; - } - if (cyclePath.length) { - cycle[cyclePath[cyclePath.length - 1].id] = cyclePath[0]; - } - allCycles.push(cycle); - } - used[neighborId].add(curNode); - } - }; - for (var i4 = 0; i4 < neighbors.length; i4 += 1) { - _loop_1(i4); - } - } - } - return allCycles; - }; - exports.detectAllUndirectedCycle = detectAllUndirectedCycle3; - var detectAllDirectedCycle3 = function detectAllDirectedCycle4(graphData, nodeIds, include) { - if (include === void 0) { - include = true; - } - var path = []; - var blocked = new Set(); - var B3 = []; - var allCycles = []; - var idx2Node = {}; - var node2Idx = {}; - var unblock = function unblock2(thisNode) { - var stack = [thisNode]; - while (stack.length > 0) { - var node2 = stack.pop(); - if (blocked.has(node2)) { - blocked.delete(node2); - B3[node2.id].forEach(function(n3) { - stack.push(n3); - }); - B3[node2.id].clear(); - } - } - }; - var circuit = function circuit2(node2, start, adjList2) { - var closed = false; - if (nodeIds && include === false && nodeIds.indexOf(node2.id) > -1) - return closed; - path.push(node2); - blocked.add(node2); - var neighbors = adjList2[node2.id]; - for (var i5 = 0; i5 < neighbors.length; i5 += 1) { - var neighbor = idx2Node[neighbors[i5]]; - if (neighbor === start) { - var cycle = {}; - for (var index2 = 1; index2 < path.length; index2 += 1) { - cycle[path[index2 - 1].id] = path[index2]; - } - if (path.length) { - cycle[path[path.length - 1].id] = path[0]; - } - allCycles.push(cycle); - closed = true; - } else if (!blocked.has(neighbor)) { - if (circuit2(neighbor, start, adjList2)) { - closed = true; - } - } - } - if (closed) { - unblock(node2); - } else { - for (var i5 = 0; i5 < neighbors.length; i5 += 1) { - var neighbor = idx2Node[neighbors[i5]]; - if (!B3[neighbor.id].has(node2)) { - B3[neighbor.id].add(node2); - } - } - } - path.pop(); - return closed; - }; - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6; - for (var i4 = 0; i4 < nodes.length; i4 += 1) { - var node = nodes[i4]; - var nodeId = node.id; - node2Idx[nodeId] = i4; - idx2Node[i4] = node; - } - if (nodeIds && include) { - var _loop_2 = function _loop_22(i5) { - var nodeId2 = nodeIds[i5]; - node2Idx[nodes[i5].id] = node2Idx[nodeId2]; - node2Idx[nodeId2] = 0; - idx2Node[0] = nodes.find(function(node2) { - return node2.id === nodeId2; - }); - idx2Node[node2Idx[nodes[i5].id]] = nodes[i5]; - }; - for (var i4 = 0; i4 < nodeIds.length; i4++) { - _loop_2(i4); - } - } - var getMinComponentAdj = function getMinComponentAdj2(components) { - var _a7; - var minCompIdx; - var minIdx2 = Infinity; - for (var i5 = 0; i5 < components.length; i5 += 1) { - var comp = components[i5]; - for (var j4 = 0; j4 < comp.length; j4++) { - var nodeIdx_1 = node2Idx[comp[j4].id]; - if (nodeIdx_1 < minIdx2) { - minIdx2 = nodeIdx_1; - minCompIdx = i5; - } - } - } - var component3 = components[minCompIdx]; - var adjList2 = []; - for (var i5 = 0; i5 < component3.length; i5 += 1) { - var node2 = component3[i5]; - adjList2[node2.id] = []; - for (var _i = 0, _b = (0, _util.getNeighbors)(node2.id, graphData.edges, "target").filter(function(n3) { - return component3.map(function(c5) { - return c5.id; - }).indexOf(n3) > -1; - }); _i < _b.length; _i++) { - var neighbor = _b[_i]; - if (neighbor === node2.id && !(include === false && nodeIds.indexOf(node2.id) > -1)) { - allCycles.push((_a7 = {}, _a7[node2.id] = node2, _a7)); - } else { - adjList2[node2.id].push(node2Idx[neighbor]); - } - } - } - return { - component: component3, - adjList: adjList2, - minIdx: minIdx2 - }; - }; - var nodeIdx = 0; - while (nodeIdx < nodes.length) { - var subgraphNodes = nodes.filter(function(n3) { - return node2Idx[n3.id] >= nodeIdx; - }); - var sccs = (0, _connectedComponent.detectStrongConnectComponents)({ - nodes: subgraphNodes, - edges: graphData.edges - }).filter(function(component3) { - return component3.length > 1; - }); - if (sccs.length === 0) - break; - var scc = getMinComponentAdj(sccs); - var minIdx = scc.minIdx, adjList = scc.adjList, component2 = scc.component; - if (component2.length > 1) { - component2.forEach(function(node2) { - B3[node2.id] = new Set(); - }); - var startNode = idx2Node[minIdx]; - if (nodeIds && include && nodeIds.indexOf(startNode.id) === -1) - return allCycles; - circuit(startNode, startNode, adjList); - nodeIdx = minIdx + 1; - } else { - break; - } - } - return allCycles; - }; - exports.detectAllDirectedCycle = detectAllDirectedCycle3; - var detectAllCycles3 = function detectAllCycles4(graphData, directed, nodeIds, include) { - if (include === void 0) { - include = true; - } - if (directed) - return detectAllDirectedCycle3(graphData, nodeIds, include); - return detectAllUndirectedCycle3(graphData, nodeIds, include); - }; - exports.detectAllCycles = detectAllCycles3; - var _default2 = detectDirectedCycle4; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/dijkstra.js -var require_dijkstra = __commonJS({ - "node_modules/@antv/algorithm/lib/dijkstra.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var _tslib = require_tslib(); - var _util = require_lib(); - var _util2 = require_util(); - var minVertex3 = function minVertex4(D3, nodes, marks) { - var minDis = Infinity; - var minNode; - for (var i4 = 0; i4 < nodes.length; i4++) { - var nodeId = nodes[i4].id; - if (!marks[nodeId] && D3[nodeId] <= minDis) { - minDis = D3[nodeId]; - minNode = nodes[i4]; - } - } - return minNode; - }; - var dijkstra3 = function dijkstra4(graphData, source, directed, weightPropertyName) { - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var nodeIds = []; - var marks = {}; - var D3 = {}; - var prevs = {}; - nodes.forEach(function(node, i5) { - var id = node.id; - nodeIds.push(id); - D3[id] = Infinity; - if (id === source) - D3[id] = 0; - }); - var nodeNum = nodes.length; - var _loop_1 = function _loop_12(i5) { - var minNode = minVertex3(D3, nodes, marks); - var minNodeId = minNode.id; - marks[minNodeId] = true; - if (D3[minNodeId] === Infinity) - return "continue"; - var relatedEdges = []; - if (directed) - relatedEdges = (0, _util2.getOutEdgesNodeId)(minNodeId, edges); - else - relatedEdges = (0, _util2.getEdgesByNodeId)(minNodeId, edges); - relatedEdges.forEach(function(edge2) { - var edgeTarget = edge2.target; - var edgeSource = edge2.source; - var w4 = edgeTarget === minNodeId ? edgeSource : edgeTarget; - var weight = weightPropertyName && edge2[weightPropertyName] ? edge2[weightPropertyName] : 1; - if (D3[w4] > D3[minNode.id] + weight) { - D3[w4] = D3[minNode.id] + weight; - prevs[w4] = [minNode.id]; - } else if (D3[w4] === D3[minNode.id] + weight) { - prevs[w4].push(minNode.id); - } - }); - }; - for (var i4 = 0; i4 < nodeNum; i4++) { - _loop_1(i4); - } - prevs[source] = [source]; - var paths = {}; - for (var target in D3) { - if (D3[target] !== Infinity) { - findAllPaths2(source, target, prevs, paths); - } - } - var path = {}; - for (var target in paths) { - path[target] = paths[target][0]; - } - return { - length: D3, - path, - allPath: paths - }; - }; - var _default2 = dijkstra3; - exports.default = _default2; - function findAllPaths2(source, target, prevs, foundPaths) { - if (source === target) { - return [source]; - } - if (foundPaths[target]) { - return foundPaths[target]; - } - var paths = []; - for (var _i = 0, _a6 = prevs[target]; _i < _a6.length; _i++) { - var prev = _a6[_i]; - var prevPaths = findAllPaths2(source, prev, prevs, foundPaths); - if (!prevPaths) - return; - for (var _b = 0, prevPaths_1 = prevPaths; _b < prevPaths_1.length; _b++) { - var prePath = prevPaths_1[_b]; - if ((0, _util.isArray)(prePath)) - paths.push((0, _tslib.__spreadArray)((0, _tslib.__spreadArray)([], prePath, true), [target], false)); - else - paths.push([prePath, target]); - } - } - foundPaths[target] = paths; - return foundPaths[target]; - } - } -}); - -// node_modules/@antv/algorithm/lib/find-path.js -var require_find_path = __commonJS({ - "node_modules/@antv/algorithm/lib/find-path.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.findShortestPath = exports.findAllPath = void 0; - var _dijkstra = _interopRequireDefault(require_dijkstra()); - var _util = require_util(); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var findShortestPath3 = function findShortestPath4(graphData, start, end2, directed, weightPropertyName) { - var _a6 = (0, _dijkstra.default)(graphData, start, directed, weightPropertyName), length5 = _a6.length, path = _a6.path, allPath = _a6.allPath; - return { - length: length5[end2], - path: path[end2], - allPath: allPath[end2] - }; - }; - exports.findShortestPath = findShortestPath3; - var findAllPath3 = function findAllPath4(graphData, start, end2, directed) { - var _a6; - if (start === end2) - return [[start]]; - var _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var visited = [start]; - var isVisited = (_a6 = {}, _a6[start] = true, _a6); - var stack = []; - var allPath = []; - var neighbors = directed ? (0, _util.getNeighbors)(start, edges, "target") : (0, _util.getNeighbors)(start, edges); - stack.push(neighbors); - while (visited.length > 0 && stack.length > 0) { - var children = stack[stack.length - 1]; - if (children.length) { - var child = children.shift(); - if (child) { - visited.push(child); - isVisited[child] = true; - neighbors = directed ? (0, _util.getNeighbors)(child, edges, "target") : (0, _util.getNeighbors)(child, edges); - stack.push(neighbors.filter(function(neighbor) { - return !isVisited[neighbor]; - })); - } - } else { - var node = visited.pop(); - isVisited[node] = false; - stack.pop(); - continue; - } - if (visited[visited.length - 1] === end2) { - var path = visited.map(function(node2) { - return node2; - }); - allPath.push(path); - var node = visited.pop(); - isVisited[node] = false; - stack.pop(); - } - } - return allPath; - }; - exports.findAllPath = findAllPath3; - } -}); - -// node_modules/@antv/algorithm/lib/floydWarshall.js -var require_floydWarshall = __commonJS({ - "node_modules/@antv/algorithm/lib/floydWarshall.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var _adjacentMatrix = _interopRequireDefault(require_adjacent_matrix()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var floydWarshall6 = function floydWarshall7(graphData, directed) { - var adjacentMatrix = (0, _adjacentMatrix.default)(graphData, directed); - var dist4 = []; - var size14 = adjacentMatrix.length; - for (var i4 = 0; i4 < size14; i4 += 1) { - dist4[i4] = []; - for (var j4 = 0; j4 < size14; j4 += 1) { - if (i4 === j4) { - dist4[i4][j4] = 0; - } else if (adjacentMatrix[i4][j4] === 0 || !adjacentMatrix[i4][j4]) { - dist4[i4][j4] = Infinity; - } else { - dist4[i4][j4] = adjacentMatrix[i4][j4]; - } - } - } - for (var k4 = 0; k4 < size14; k4 += 1) { - for (var i4 = 0; i4 < size14; i4 += 1) { - for (var j4 = 0; j4 < size14; j4 += 1) { - if (dist4[i4][j4] > dist4[i4][k4] + dist4[k4][j4]) { - dist4[i4][j4] = dist4[i4][k4] + dist4[k4][j4]; - } - } - } - } - return dist4; - }; - var _default2 = floydWarshall6; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/label-propagation.js -var require_label_propagation = __commonJS({ - "node_modules/@antv/algorithm/lib/label-propagation.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var _adjacentMatrix = _interopRequireDefault(require_adjacent_matrix()); - var _util = require_util(); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var labelPropagation3 = function labelPropagation4(graphData, directed, weightPropertyName, maxIteration) { - if (directed === void 0) { - directed = false; - } - if (weightPropertyName === void 0) { - weightPropertyName = "weight"; - } - if (maxIteration === void 0) { - maxIteration = 1e3; - } - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var clusters = {}; - var nodeMap = {}; - nodes.forEach(function(node, i4) { - var cid = (0, _util.uniqueId)(); - node.clusterId = cid; - clusters[cid] = { - id: cid, - nodes: [node] - }; - nodeMap[node.id] = { - node, - idx: i4 - }; - }); - var adjMatrix3 = (0, _adjacentMatrix.default)(graphData, directed); - var ks = []; - var neighbors = {}; - adjMatrix3.forEach(function(row, i4) { - var k4 = 0; - var iid = nodes[i4].id; - neighbors[iid] = {}; - row.forEach(function(entry, j4) { - if (!entry) - return; - k4 += entry; - var jid = nodes[j4].id; - neighbors[iid][jid] = entry; - }); - ks.push(k4); - }); - var iter = 0; - var _loop_1 = function _loop_12() { - var changed = false; - nodes.forEach(function(node) { - var neighborClusters = {}; - Object.keys(neighbors[node.id]).forEach(function(neighborId) { - var neighborWeight = neighbors[node.id][neighborId]; - var neighborNode = nodeMap[neighborId].node; - var neighborClusterId = neighborNode.clusterId; - if (!neighborClusters[neighborClusterId]) - neighborClusters[neighborClusterId] = 0; - neighborClusters[neighborClusterId] += neighborWeight; - }); - var maxWeight = -Infinity; - var bestClusterIds = []; - Object.keys(neighborClusters).forEach(function(clusterId) { - if (maxWeight < neighborClusters[clusterId]) { - maxWeight = neighborClusters[clusterId]; - bestClusterIds = [clusterId]; - } else if (maxWeight === neighborClusters[clusterId]) { - bestClusterIds.push(clusterId); - } - }); - if (bestClusterIds.length === 1 && bestClusterIds[0] === node.clusterId) - return; - var selfClusterIdx = bestClusterIds.indexOf(node.clusterId); - if (selfClusterIdx >= 0) - bestClusterIds.splice(selfClusterIdx, 1); - if (bestClusterIds && bestClusterIds.length) { - changed = true; - var selfCluster = clusters[node.clusterId]; - var nodeInSelfClusterIdx = selfCluster.nodes.indexOf(node); - selfCluster.nodes.splice(nodeInSelfClusterIdx, 1); - var randomIdx = Math.floor(Math.random() * bestClusterIds.length); - var bestCluster = clusters[bestClusterIds[randomIdx]]; - bestCluster.nodes.push(node); - node.clusterId = bestCluster.id; - } - }); - if (!changed) - return "break"; - iter++; - }; - while (iter < maxIteration) { - var state_1 = _loop_1(); - if (state_1 === "break") - break; - } - Object.keys(clusters).forEach(function(clusterId) { - var cluster = clusters[clusterId]; - if (!cluster.nodes || !cluster.nodes.length) { - delete clusters[clusterId]; - } - }); - var clusterEdges = []; - var clusterEdgeMap = {}; - edges.forEach(function(edge2) { - var source = edge2.source, target = edge2.target; - var weight = edge2[weightPropertyName] || 1; - var sourceClusterId = nodeMap[source].node.clusterId; - var targetClusterId = nodeMap[target].node.clusterId; - var newEdgeId = "".concat(sourceClusterId, "---").concat(targetClusterId); - if (clusterEdgeMap[newEdgeId]) { - clusterEdgeMap[newEdgeId].weight += weight; - clusterEdgeMap[newEdgeId].count++; - } else { - var newEdge = { - source: sourceClusterId, - target: targetClusterId, - weight, - count: 1 - }; - clusterEdgeMap[newEdgeId] = newEdge; - clusterEdges.push(newEdge); - } - }); - var clustersArray = []; - Object.keys(clusters).forEach(function(clusterId) { - clustersArray.push(clusters[clusterId]); - }); - return { - clusters: clustersArray, - clusterEdges - }; - }; - var _default2 = labelPropagation3; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/utils/vector.js -var require_vector = __commonJS({ - "node_modules/@antv/algorithm/lib/utils/vector.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var _util = require_lib(); - var Vector2 = function() { - function Vector3(arr) { - this.arr = arr; - } - Vector3.prototype.getArr = function() { - return this.arr || []; - }; - Vector3.prototype.add = function(otherVector) { - var _a6; - var otherArr = otherVector.arr; - if (!((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length)) { - return new Vector3(otherArr); - } - if (!(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) { - return new Vector3(this.arr); - } - if (this.arr.length === otherArr.length) { - var res = []; - for (var index2 in this.arr) { - res[index2] = this.arr[index2] + otherArr[index2]; - } - return new Vector3(res); - } - }; - Vector3.prototype.subtract = function(otherVector) { - var _a6; - var otherArr = otherVector.arr; - if (!((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length)) { - return new Vector3(otherArr); - } - if (!(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) { - return new Vector3(this.arr); - } - if (this.arr.length === otherArr.length) { - var res = []; - for (var index2 in this.arr) { - res[index2] = this.arr[index2] - otherArr[index2]; - } - return new Vector3(res); - } - }; - Vector3.prototype.avg = function(length5) { - var res = []; - if (length5 !== 0) { - for (var index2 in this.arr) { - res[index2] = this.arr[index2] / length5; - } - } - return new Vector3(res); - }; - Vector3.prototype.negate = function() { - var res = []; - for (var index2 in this.arr) { - res[index2] = -this.arr[index2]; - } - return new Vector3(res); - }; - Vector3.prototype.squareEuclideanDistance = function(otherVector) { - var _a6; - var otherArr = otherVector.arr; - if (!((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length) || !(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) { - return 0; - } - if (this.arr.length === otherArr.length) { - var res = 0; - for (var index2 in this.arr) { - res += Math.pow(this.arr[index2] - otherVector.arr[index2], 2); - } - return res; - } - }; - Vector3.prototype.euclideanDistance = function(otherVector) { - var _a6; - var otherArr = otherVector.arr; - if (!((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length) || !(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) { - return 0; - } - if (this.arr.length === otherArr.length) { - var res = 0; - for (var index2 in this.arr) { - res += Math.pow(this.arr[index2] - otherVector.arr[index2], 2); - } - return Math.sqrt(res); - } else { - console.error("The two vectors are unequal in length."); - } - }; - Vector3.prototype.normalize = function() { - var res = []; - var cloneArr = (0, _util.clone)(this.arr); - cloneArr.sort(function(a4, b10) { - return a4 - b10; - }); - var max15 = cloneArr[cloneArr.length - 1]; - var min13 = cloneArr[0]; - for (var index2 in this.arr) { - res[index2] = (this.arr[index2] - min13) / (max15 - min13); - } - return new Vector3(res); - }; - Vector3.prototype.norm2 = function() { - var _a6; - if (!((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length)) { - return 0; - } - var res = 0; - for (var index2 in this.arr) { - res += Math.pow(this.arr[index2], 2); - } - return Math.sqrt(res); - }; - Vector3.prototype.dot = function(otherVector) { - var _a6; - var otherArr = otherVector.arr; - if (!((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length) || !(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) { - return 0; - } - if (this.arr.length === otherArr.length) { - var res = 0; - for (var index2 in this.arr) { - res += this.arr[index2] * otherVector.arr[index2]; - } - return res; - } else { - console.error("The two vectors are unequal in length."); - } - }; - Vector3.prototype.equal = function(otherVector) { - var _a6; - var otherArr = otherVector.arr; - if (((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length) !== (otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) { - return false; - } - for (var index2 in this.arr) { - if (this.arr[index2] !== otherArr[index2]) { - return false; - } - } - return true; - }; - return Vector3; - }(); - var _default2 = Vector2; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/constants/time.js -var require_time = __commonJS({ - "node_modules/@antv/algorithm/lib/constants/time.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.secondReg = exports.dateReg = void 0; - var secondReg2 = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/; - exports.secondReg = secondReg2; - var dateReg2 = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/; - exports.dateReg = dateReg2; - } -}); - -// node_modules/@antv/algorithm/lib/utils/node-properties.js -var require_node_properties = __commonJS({ - "node_modules/@antv/algorithm/lib/utils/node-properties.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.getPropertyWeight = exports.getAllSortProperties = exports.getAllProperties = exports.default = void 0; - var _time = require_time(); - var getAllSortProperties = function getAllSortProperties2(nodes, n3) { - if (nodes === void 0) { - nodes = []; - } - if (n3 === void 0) { - n3 = 100; - } - var propertyKeyInfo = {}; - nodes.forEach(function(node) { - if (!node.properties) { - return; - } - Object.keys(node.properties).forEach(function(propertyKey) { - if (propertyKey === "id" || !"".concat(node.properties[propertyKey]).match(_time.secondReg) && !"".concat(node.properties[propertyKey]).match(_time.dateReg) && isNaN(Number(node.properties[propertyKey]))) { - if (propertyKeyInfo.hasOwnProperty(propertyKey)) { - delete propertyKeyInfo[propertyKey]; - } - return; - } - if (propertyKeyInfo.hasOwnProperty(propertyKey)) { - propertyKeyInfo[propertyKey] += 1; - } else { - propertyKeyInfo[propertyKey] = 1; - } - }); - }); - var sortKeys = Object.keys(propertyKeyInfo).sort(function(a4, b10) { - return propertyKeyInfo[b10] - propertyKeyInfo[a4]; - }); - return sortKeys.length < n3 ? sortKeys : sortKeys.slice(0, n3); - }; - exports.getAllSortProperties = getAllSortProperties; - var processProperty = function processProperty2(properties, propertyKeys) { - return propertyKeys.map(function(key) { - if (properties.hasOwnProperty(key)) { - if (!isNaN(Number(properties[key]))) { - return Number(properties[key]); - } - if (properties[key].match(_time.secondReg) || properties[key].match(_time.dateReg)) { - return Number(Date.parse(new Date(properties[key]))) / 1e3; - } - } - return 0; - }); - }; - var getPropertyWeight = function getPropertyWeight2(nodes) { - var propertyKeys = getAllSortProperties(nodes); - var allPropertiesWeight = []; - for (var i4 = 0; i4 < nodes.length; i4++) { - allPropertiesWeight[i4] = processProperty(nodes[i4].properties, propertyKeys); - } - return allPropertiesWeight; - }; - exports.getPropertyWeight = getPropertyWeight; - var getAllProperties3 = function getAllProperties4(nodes, key) { - if (key === void 0) { - key = "properties"; - } - var allProperties = []; - nodes.forEach(function(node) { - if (!node.properties) { - return; - } - allProperties.push(node[key]); - }); - return allProperties; - }; - exports.getAllProperties = getAllProperties3; - var _default2 = { - getAllSortProperties, - getPropertyWeight, - getAllProperties: getAllProperties3 - }; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/types.js -var require_types = __commonJS({ - "node_modules/@antv/algorithm/lib/types.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.DistanceType = void 0; - var DistanceType2; - exports.DistanceType = DistanceType2; - (function(DistanceType3) { - DistanceType3["EuclideanDistance"] = "euclideanDistance"; - })(DistanceType2 || (exports.DistanceType = DistanceType2 = {})); - } -}); - -// node_modules/@antv/algorithm/lib/utils/data-preprocessing.js -var require_data_preprocessing = __commonJS({ - "node_modules/@antv/algorithm/lib/utils/data-preprocessing.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.oneHot = exports.getDistance = exports.getAllKeyValueMap = exports.default = void 0; - var _util = require_lib(); - var _types = require_types(); - var _vector = _interopRequireDefault(require_vector()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var getAllKeyValueMap3 = function getAllKeyValueMap4(dataList, involvedKeys, uninvolvedKeys) { - var keys6 = []; - if (involvedKeys === null || involvedKeys === void 0 ? void 0 : involvedKeys.length) { - keys6 = involvedKeys; - } else { - dataList.forEach(function(data3) { - keys6 = keys6.concat(Object.keys(data3)); - }); - keys6 = (0, _util.uniq)(keys6); - } - var allKeyValueMap = {}; - keys6.forEach(function(key) { - var value2 = []; - dataList.forEach(function(data3) { - if (data3[key] !== void 0 && data3[key] !== "") { - value2.push(data3[key]); - } - }); - if (value2.length && !(uninvolvedKeys === null || uninvolvedKeys === void 0 ? void 0 : uninvolvedKeys.includes(key))) { - allKeyValueMap[key] = (0, _util.uniq)(value2); - } - }); - return allKeyValueMap; - }; - exports.getAllKeyValueMap = getAllKeyValueMap3; - var oneHot3 = function oneHot4(dataList, involvedKeys, uninvolvedKeys) { - var allKeyValueMap = getAllKeyValueMap3(dataList, involvedKeys, uninvolvedKeys); - var oneHotCode = []; - dataList.forEach(function(data3, index2) { - var code = []; - Object.keys(allKeyValueMap).forEach(function(key) { - var keyValue = data3[key]; - var allKeyValue = allKeyValueMap[key]; - var valueIndex = allKeyValue.findIndex(function(value2) { - return keyValue === value2; - }); - var subCode = []; - for (var i4 = 0; i4 < allKeyValue.length; i4++) { - if (i4 === valueIndex) { - subCode.push(1); - } else { - subCode.push(0); - } - } - code = code.concat(subCode); - }); - oneHotCode[index2] = code; - }); - return oneHotCode; - }; - exports.oneHot = oneHot3; - var getDistance3 = function getDistance4(item, otherItem, distanceType, graphData) { - if (distanceType === void 0) { - distanceType = _types.DistanceType.EuclideanDistance; - } - var distance15 = 0; - switch (distanceType) { - case _types.DistanceType.EuclideanDistance: - distance15 = new _vector.default(item).euclideanDistance(new _vector.default(otherItem)); - break; - default: - break; - } - return distance15; - }; - exports.getDistance = getDistance3; - var _default2 = { - getAllKeyValueMap: getAllKeyValueMap3, - oneHot: oneHot3, - getDistance: getDistance3 - }; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/louvain.js -var require_louvain = __commonJS({ - "node_modules/@antv/algorithm/lib/louvain.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var _util = require_lib(); - var _adjacentMatrix = _interopRequireDefault(require_adjacent_matrix()); - var _vector = _interopRequireDefault(require_vector()); - var _nodeProperties = require_node_properties(); - var _dataPreprocessing = require_data_preprocessing(); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var getModularity3 = function getModularity4(nodes, adjMatrix3, ks, m4) { - var length5 = adjMatrix3.length; - var param = 2 * m4; - var modularity = 0; - for (var i4 = 0; i4 < length5; i4++) { - var clusteri = nodes[i4].clusterId; - for (var j4 = 0; j4 < length5; j4++) { - var clusterj = nodes[j4].clusterId; - if (clusteri !== clusterj) - continue; - var entry = adjMatrix3[i4][j4] || 0; - var ki = ks[i4] || 0; - var kj = ks[j4] || 0; - modularity += entry - ki * kj / param; - } - } - modularity *= 1 / param; - return modularity; - }; - var getInertialModularity3 = function getInertialModularity4(nodes, allPropertiesWeight) { - if (nodes === void 0) { - nodes = []; - } - var length5 = nodes.length; - var totalProperties = new _vector.default([]); - for (var i4 = 0; i4 < length5; i4++) { - totalProperties = totalProperties.add(new _vector.default(allPropertiesWeight[i4])); - } - var avgProperties = totalProperties.avg(length5); - avgProperties.normalize(); - var variance = 0; - for (var i4 = 0; i4 < length5; i4++) { - var propertiesi = new _vector.default(allPropertiesWeight[i4]); - var squareEuclideanDistance = propertiesi.squareEuclideanDistance(avgProperties); - variance += squareEuclideanDistance; - } - var squareEuclideanDistanceInfo = []; - nodes.forEach(function() { - squareEuclideanDistanceInfo.push([]); - }); - for (var i4 = 0; i4 < length5; i4++) { - var propertiesi = new _vector.default(allPropertiesWeight[i4]); - nodes[i4]["clusterInertial"] = 0; - for (var j4 = 0; j4 < length5; j4++) { - if (i4 === j4) { - squareEuclideanDistanceInfo[i4][j4] = 0; - continue; - } - var propertiesj = new _vector.default(allPropertiesWeight[j4]); - squareEuclideanDistanceInfo[i4][j4] = propertiesi.squareEuclideanDistance(propertiesj); - nodes[i4]["clusterInertial"] += squareEuclideanDistanceInfo[i4][j4]; - } - } - var inertialModularity = 0; - var param = 2 * length5 * variance; - for (var i4 = 0; i4 < length5; i4++) { - var clusteri = nodes[i4].clusterId; - for (var j4 = 0; j4 < length5; j4++) { - var clusterj = nodes[j4].clusterId; - if (i4 === j4 || clusteri !== clusterj) - continue; - var inertial = nodes[i4].clusterInertial * nodes[j4].clusterInertial / Math.pow(param, 2) - squareEuclideanDistanceInfo[i4][j4] / param; - inertialModularity += inertial; - } - } - return Number(inertialModularity.toFixed(4)); - }; - var louvain3 = function louvain4(graphData, directed, weightPropertyName, threshold, inertialModularity, inertialWeight) { - if (directed === void 0) { - directed = false; - } - if (weightPropertyName === void 0) { - weightPropertyName = "weight"; - } - if (threshold === void 0) { - threshold = 1e-4; - } - if (inertialModularity === void 0) { - inertialModularity = false; - } - if (inertialWeight === void 0) { - inertialWeight = 1; - } - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var allPropertiesWeight = []; - if (inertialModularity) { - nodes.forEach(function(node, index2) { - node.properties = node.properties || {}; - node.originIndex = index2; - }); - var nodeTypeInfo_1 = []; - if (nodes.every(function(node) { - return node.hasOwnProperty("nodeType"); - })) { - nodeTypeInfo_1 = Array.from(new Set(nodes.map(function(node) { - return node.nodeType; - }))); - nodes.forEach(function(node) { - node.properties.nodeType = nodeTypeInfo_1.findIndex(function(nodeType) { - return nodeType === node.nodeType; - }); - }); - } - var properties = (0, _nodeProperties.getAllProperties)(nodes); - allPropertiesWeight = (0, _dataPreprocessing.oneHot)(properties); - } - var uniqueId14 = 1; - var clusters = {}; - var nodeMap = {}; - nodes.forEach(function(node, i4) { - var cid = String(uniqueId14++); - node.clusterId = cid; - clusters[cid] = { - id: cid, - nodes: [node] - }; - nodeMap[node.id] = { - node, - idx: i4 - }; - }); - var adjMatrix3 = (0, _adjacentMatrix.default)(graphData, directed); - var ks = []; - var neighbors = {}; - var m4 = 0; - adjMatrix3.forEach(function(row, i4) { - var k4 = 0; - var iid = nodes[i4].id; - neighbors[iid] = {}; - row.forEach(function(entry, j4) { - if (!entry) - return; - k4 += entry; - var jid = nodes[j4].id; - neighbors[iid][jid] = entry; - m4 += entry; - }); - ks.push(k4); - }); - m4 /= 2; - var totalModularity = Infinity; - var previousModularity = Infinity; - var iter = 0; - var finalNodes = []; - var finalClusters = {}; - while (true) { - if (inertialModularity && nodes.every(function(node) { - return node.hasOwnProperty("properties"); - })) { - totalModularity = getModularity3(nodes, adjMatrix3, ks, m4) + getInertialModularity3(nodes, allPropertiesWeight) * inertialWeight; - } else { - totalModularity = getModularity3(nodes, adjMatrix3, ks, m4); - } - if (iter === 0) { - previousModularity = totalModularity; - finalNodes = nodes; - finalClusters = clusters; - } - var increaseWithinThreshold = totalModularity > 0 && totalModularity > previousModularity && totalModularity - previousModularity < threshold; - if (totalModularity > previousModularity) { - finalNodes = nodes.map(function(node) { - return { - node, - clusterId: node.clusterId - }; - }); - finalClusters = (0, _util.clone)(clusters); - previousModularity = totalModularity; - } - if (increaseWithinThreshold || iter > 100) { - break; - } - ; - iter++; - Object.keys(clusters).forEach(function(clusterId) { - var sumTot = 0; - edges.forEach(function(edge2) { - var source = edge2.source, target = edge2.target; - var sourceClusterId = nodeMap[source].node.clusterId; - var targetClusterId = nodeMap[target].node.clusterId; - if (sourceClusterId === clusterId && targetClusterId !== clusterId || targetClusterId === clusterId && sourceClusterId !== clusterId) { - sumTot = sumTot + (edge2[weightPropertyName] || 1); - } - }); - clusters[clusterId].sumTot = sumTot; - }); - nodes.forEach(function(node, i4) { - var selfCluster = clusters[node.clusterId]; - var bestIncrease = 0; - var bestCluster; - var commonParam = ks[i4] / (2 * m4); - var kiin = 0; - var selfClusterNodes = selfCluster.nodes; - selfClusterNodes.forEach(function(scNode) { - var scNodeIdx = nodeMap[scNode.id].idx; - kiin += adjMatrix3[i4][scNodeIdx] || 0; - }); - var removeModurarity = kiin - selfCluster.sumTot * commonParam; - var selfClusterNodesAfterRemove = selfClusterNodes.filter(function(scNode) { - return scNode.id !== node.id; - }); - var propertiesWeightRemove = []; - selfClusterNodesAfterRemove.forEach(function(nodeRemove, index2) { - propertiesWeightRemove[index2] = allPropertiesWeight[nodeRemove.originIndex]; - }); - var removeInertialModularity = getInertialModularity3(selfClusterNodesAfterRemove, allPropertiesWeight) * inertialWeight; - var nodeNeighborIds = neighbors[node.id]; - Object.keys(nodeNeighborIds).forEach(function(neighborNodeId) { - var neighborNode = nodeMap[neighborNodeId].node; - var neighborClusterId = neighborNode.clusterId; - if (neighborClusterId === node.clusterId) - return; - var neighborCluster = clusters[neighborClusterId]; - var clusterNodes = neighborCluster.nodes; - if (!clusterNodes || !clusterNodes.length) - return; - var neighborClusterKiin = 0; - clusterNodes.forEach(function(cNode) { - var cNodeIdx = nodeMap[cNode.id].idx; - neighborClusterKiin += adjMatrix3[i4][cNodeIdx] || 0; - }); - var addModurarity = neighborClusterKiin - neighborCluster.sumTot * commonParam; - var clusterNodesAfterAdd = clusterNodes.concat([node]); - var propertiesWeightAdd = []; - clusterNodesAfterAdd.forEach(function(nodeAdd, index2) { - propertiesWeightAdd[index2] = allPropertiesWeight[nodeAdd.originIndex]; - }); - var addInertialModularity = getInertialModularity3(clusterNodesAfterAdd, allPropertiesWeight) * inertialWeight; - var increase = addModurarity - removeModurarity; - if (inertialModularity) { - increase = addModurarity + addInertialModularity - (removeModurarity + removeInertialModularity); - } - if (increase > bestIncrease) { - bestIncrease = increase; - bestCluster = neighborCluster; - } - }); - if (bestIncrease > 0) { - bestCluster.nodes.push(node); - var previousClusterId_1 = node.clusterId; - node.clusterId = bestCluster.id; - var nodeInSelfClusterIdx = selfCluster.nodes.indexOf(node); - selfCluster.nodes.splice(nodeInSelfClusterIdx, 1); - var neighborClusterSumTot_1 = 0; - var selfClusterSumTot_1 = 0; - edges.forEach(function(edge2) { - var source = edge2.source, target = edge2.target; - var sourceClusterId = nodeMap[source].node.clusterId; - var targetClusterId = nodeMap[target].node.clusterId; - if (sourceClusterId === bestCluster.id && targetClusterId !== bestCluster.id || targetClusterId === bestCluster.id && sourceClusterId !== bestCluster.id) { - neighborClusterSumTot_1 = neighborClusterSumTot_1 + (edge2[weightPropertyName] || 1); - } - if (sourceClusterId === previousClusterId_1 && targetClusterId !== previousClusterId_1 || targetClusterId === previousClusterId_1 && sourceClusterId !== previousClusterId_1) { - selfClusterSumTot_1 = selfClusterSumTot_1 + (edge2[weightPropertyName] || 1); - } - }); - bestCluster.sumTot = neighborClusterSumTot_1; - selfCluster.sumTot = selfClusterSumTot_1; - } - }); - } - var newClusterIdMap = {}; - var clusterIdx = 0; - Object.keys(finalClusters).forEach(function(clusterId) { - var cluster = finalClusters[clusterId]; - if (!cluster.nodes || !cluster.nodes.length) { - delete finalClusters[clusterId]; - return; - } - var newId = String(clusterIdx + 1); - if (newId === clusterId) { - return; - } - cluster.id = newId; - cluster.nodes = cluster.nodes.map(function(item) { - return { - id: item.id, - clusterId: newId - }; - }); - finalClusters[newId] = cluster; - newClusterIdMap[clusterId] = newId; - delete finalClusters[clusterId]; - clusterIdx++; - }); - finalNodes.forEach(function(nodeInfo) { - var node = nodeInfo.node, clusterId = nodeInfo.clusterId; - node.clusterId = clusterId; - if (node.clusterId && newClusterIdMap[node.clusterId]) - node.clusterId = newClusterIdMap[node.clusterId]; - }); - var clusterEdges = []; - var clusterEdgeMap = {}; - edges.forEach(function(edge2) { - var source = edge2.source, target = edge2.target; - var weight = edge2[weightPropertyName] || 1; - var sourceClusterId = nodeMap[source].node.clusterId; - var targetClusterId = nodeMap[target].node.clusterId; - var newEdgeId = "".concat(sourceClusterId, "---").concat(targetClusterId); - if (clusterEdgeMap[newEdgeId]) { - clusterEdgeMap[newEdgeId].weight += weight; - clusterEdgeMap[newEdgeId].count++; - } else { - var newEdge = { - source: sourceClusterId, - target: targetClusterId, - weight, - count: 1 - }; - clusterEdgeMap[newEdgeId] = newEdge; - clusterEdges.push(newEdge); - } - }); - var clustersArray = []; - Object.keys(finalClusters).forEach(function(clusterId) { - clustersArray.push(finalClusters[clusterId]); - }); - return { - clusters: clustersArray, - clusterEdges - }; - }; - var _default2 = louvain3; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/structs/union-find.js -var require_union_find = __commonJS({ - "node_modules/@antv/algorithm/lib/structs/union-find.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var UnionFind2 = function() { - function UnionFind3(items) { - this.count = items.length; - this.parent = {}; - for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { - var i4 = items_1[_i]; - this.parent[i4] = i4; - } - } - UnionFind3.prototype.find = function(item) { - while (this.parent[item] !== item) { - item = this.parent[item]; - } - return item; - }; - UnionFind3.prototype.union = function(a4, b10) { - var rootA = this.find(a4); - var rootB = this.find(b10); - if (rootA === rootB) - return; - if (rootA < rootB) { - if (this.parent[b10] !== b10) - this.union(this.parent[b10], a4); - this.parent[b10] = this.parent[a4]; - } else { - if (this.parent[a4] !== a4) - this.union(this.parent[a4], b10); - this.parent[a4] = this.parent[b10]; - } - }; - UnionFind3.prototype.connected = function(a4, b10) { - return this.find(a4) === this.find(b10); - }; - return UnionFind3; - }(); - var _default2 = UnionFind2; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/structs/binary-heap.js -var require_binary_heap = __commonJS({ - "node_modules/@antv/algorithm/lib/structs/binary-heap.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var defaultCompare3 = function defaultCompare4(a4, b10) { - return a4 - b10; - }; - var MinBinaryHeap2 = function() { - function MinBinaryHeap3(compareFn) { - if (compareFn === void 0) { - compareFn = defaultCompare3; - } - this.compareFn = compareFn; - this.list = []; - } - MinBinaryHeap3.prototype.getLeft = function(index2) { - return 2 * index2 + 1; - }; - MinBinaryHeap3.prototype.getRight = function(index2) { - return 2 * index2 + 2; - }; - MinBinaryHeap3.prototype.getParent = function(index2) { - if (index2 === 0) { - return null; - } - return Math.floor((index2 - 1) / 2); - }; - MinBinaryHeap3.prototype.isEmpty = function() { - return this.list.length <= 0; - }; - MinBinaryHeap3.prototype.top = function() { - return this.isEmpty() ? void 0 : this.list[0]; - }; - MinBinaryHeap3.prototype.delMin = function() { - var top = this.top(); - var bottom = this.list.pop(); - if (this.list.length > 0) { - this.list[0] = bottom; - this.moveDown(0); - } - return top; - }; - MinBinaryHeap3.prototype.insert = function(value2) { - if (value2 !== null) { - this.list.push(value2); - var index2 = this.list.length - 1; - this.moveUp(index2); - return true; - } - return false; - }; - MinBinaryHeap3.prototype.moveUp = function(index2) { - var parent = this.getParent(index2); - while (index2 && index2 > 0 && this.compareFn(this.list[parent], this.list[index2]) > 0) { - var tmp = this.list[parent]; - this.list[parent] = this.list[index2]; - this.list[index2] = tmp; - index2 = parent; - parent = this.getParent(index2); - } - }; - MinBinaryHeap3.prototype.moveDown = function(index2) { - var _a6; - var element = index2; - var left2 = this.getLeft(index2); - var right2 = this.getRight(index2); - var size14 = this.list.length; - if (left2 !== null && left2 < size14 && this.compareFn(this.list[element], this.list[left2]) > 0) { - element = left2; - } else if (right2 !== null && right2 < size14 && this.compareFn(this.list[element], this.list[right2]) > 0) { - element = right2; - } - if (index2 !== element) { - _a6 = [this.list[element], this.list[index2]], this.list[index2] = _a6[0], this.list[element] = _a6[1]; - this.moveDown(element); - } - }; - return MinBinaryHeap3; - }(); - var _default2 = MinBinaryHeap2; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/mts.js -var require_mts = __commonJS({ - "node_modules/@antv/algorithm/lib/mts.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var _unionFind = _interopRequireDefault(require_union_find()); - var _binaryHeap = _interopRequireDefault(require_binary_heap()); - var _util = require_util(); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var primMST3 = function primMST4(graphData, weight) { - var selectedEdges = []; - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - if (nodes.length === 0) { - return selectedEdges; - } - var currNode = nodes[0]; - var visited = new Set(); - visited.add(currNode); - var compareWeight = function compareWeight2(a4, b10) { - if (weight) { - return a4.weight - b10.weight; - } - return 0; - }; - var edgeQueue = new _binaryHeap.default(compareWeight); - (0, _util.getEdgesByNodeId)(currNode.id, edges).forEach(function(edge2) { - edgeQueue.insert(edge2); - }); - while (!edgeQueue.isEmpty()) { - var currEdge = edgeQueue.delMin(); - var source = currEdge.source; - var target = currEdge.target; - if (visited.has(source) && visited.has(target)) - continue; - selectedEdges.push(currEdge); - if (!visited.has(source)) { - visited.add(source); - (0, _util.getEdgesByNodeId)(source, edges).forEach(function(edge2) { - edgeQueue.insert(edge2); - }); - } - if (!visited.has(target)) { - visited.add(target); - (0, _util.getEdgesByNodeId)(target, edges).forEach(function(edge2) { - edgeQueue.insert(edge2); - }); - } - } - return selectedEdges; - }; - var kruskalMST3 = function kruskalMST4(graphData, weight) { - var selectedEdges = []; - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - if (nodes.length === 0) { - return selectedEdges; - } - var weightEdges = edges.map(function(edge2) { - return edge2; - }); - if (weight) { - weightEdges.sort(function(a4, b10) { - return a4.weight - b10.weight; - }); - } - var disjointSet = new _unionFind.default(nodes.map(function(n3) { - return n3.id; - })); - while (weightEdges.length > 0) { - var curEdge = weightEdges.shift(); - var source = curEdge.source; - var target = curEdge.target; - if (!disjointSet.connected(source, target)) { - selectedEdges.push(curEdge); - disjointSet.union(source, target); - } - } - return selectedEdges; - }; - var minimumSpanningTree3 = function minimumSpanningTree4(graphData, weight, algo) { - var algos = { - prim: primMST3, - kruskal: kruskalMST3 - }; - if (!algo) - return kruskalMST3(graphData, weight); - return algos[algo](graphData, weight); - }; - var _default2 = minimumSpanningTree3; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/pageRank.js -var require_pageRank = __commonJS({ - "node_modules/@antv/algorithm/lib/pageRank.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var _degree = _interopRequireDefault(require_degree()); - var _util = require_util(); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var pageRank3 = function pageRank4(graphData, epsilon, linkProb) { - if (typeof epsilon !== "number") - epsilon = 1e-6; - if (typeof linkProb !== "number") - linkProb = 0.85; - var distance15 = 1; - var leakedRank = 0; - var maxIterations = 1e3; - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var nodesCount = nodes.length; - var currentRank; - var curRanks = {}; - var prevRanks = {}; - for (var j4 = 0; j4 < nodesCount; ++j4) { - var node = nodes[j4]; - var nodeId = node.id; - curRanks[nodeId] = 1 / nodesCount; - prevRanks[nodeId] = 1 / nodesCount; - } - var nodeDegree = (0, _degree.default)(graphData); - while (maxIterations > 0 && distance15 > epsilon) { - leakedRank = 0; - for (var j4 = 0; j4 < nodesCount; ++j4) { - var node = nodes[j4]; - var nodeId = node.id; - currentRank = 0; - if (nodeDegree[node.id].inDegree === 0) { - curRanks[nodeId] = 0; - } else { - var neighbors = (0, _util.getNeighbors)(nodeId, edges, "source"); - for (var i4 = 0; i4 < neighbors.length; ++i4) { - var neighbor = neighbors[i4]; - var outDegree = nodeDegree[neighbor].outDegree; - if (outDegree > 0) - currentRank += prevRanks[neighbor] / outDegree; - } - curRanks[nodeId] = linkProb * currentRank; - leakedRank += curRanks[nodeId]; - } - } - leakedRank = (1 - leakedRank) / nodesCount; - distance15 = 0; - for (var j4 = 0; j4 < nodesCount; ++j4) { - var node = nodes[j4]; - var nodeId = node.id; - currentRank = curRanks[nodeId] + leakedRank; - distance15 += Math.abs(currentRank - prevRanks[nodeId]); - prevRanks[nodeId] = currentRank; - } - maxIterations -= 1; - } - return prevRanks; - }; - var _default2 = pageRank3; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/gSpan/struct.js -var require_struct = __commonJS({ - "node_modules/@antv/algorithm/lib/gSpan/struct.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.VACANT_NODE_LABEL = exports.VACANT_NODE_ID = exports.VACANT_GRAPH_ID = exports.VACANT_EDGE_LABEL = exports.VACANT_EDGE_ID = exports.Node = exports.Graph = exports.Edge = exports.AUTO_EDGE_ID = void 0; - var VACANT_EDGE_ID2 = -1; - exports.VACANT_EDGE_ID = VACANT_EDGE_ID2; - var VACANT_NODE_ID2 = -1; - exports.VACANT_NODE_ID = VACANT_NODE_ID2; - var VACANT_EDGE_LABEL2 = "-1"; - exports.VACANT_EDGE_LABEL = VACANT_EDGE_LABEL2; - var VACANT_NODE_LABEL2 = "-1"; - exports.VACANT_NODE_LABEL = VACANT_NODE_LABEL2; - var VACANT_GRAPH_ID2 = -1; - exports.VACANT_GRAPH_ID = VACANT_GRAPH_ID2; - var AUTO_EDGE_ID = "-1"; - exports.AUTO_EDGE_ID = AUTO_EDGE_ID; - var Edge4 = function() { - function Edge5(id, from, to, label17) { - if (id === void 0) { - id = VACANT_EDGE_ID2; - } - if (from === void 0) { - from = VACANT_NODE_ID2; - } - if (to === void 0) { - to = VACANT_NODE_ID2; - } - if (label17 === void 0) { - label17 = VACANT_EDGE_LABEL2; - } - this.id = id; - this.from = from; - this.to = to; - this.label = label17; - } - return Edge5; - }(); - exports.Edge = Edge4; - var Node5 = function() { - function Node6(id, label17) { - if (id === void 0) { - id = VACANT_NODE_ID2; - } - if (label17 === void 0) { - label17 = VACANT_NODE_LABEL2; - } - this.id = id; - this.label = label17; - this.edges = []; - this.edgeMap = {}; - } - Node6.prototype.addEdge = function(edge2) { - this.edges.push(edge2); - this.edgeMap[edge2.id] = edge2; - }; - return Node6; - }(); - exports.Node = Node5; - var Graph10 = function() { - function Graph11(id, edgeIdAutoIncrease, directed) { - if (id === void 0) { - id = VACANT_NODE_ID2; - } - if (edgeIdAutoIncrease === void 0) { - edgeIdAutoIncrease = true; - } - if (directed === void 0) { - directed = false; - } - this.id = id; - this.edgeIdAutoIncrease = edgeIdAutoIncrease; - this.edges = []; - this.nodes = []; - this.nodeMap = {}; - this.edgeMap = {}; - this.nodeLabelMap = {}; - this.edgeLabelMap = {}; - this.counter = 0; - this.directed = directed; - } - Graph11.prototype.getNodeNum = function() { - return this.nodes.length; - }; - Graph11.prototype.addNode = function(id, label17) { - if (this.nodeMap[id]) - return; - var node = new Node5(id, label17); - this.nodes.push(node); - this.nodeMap[id] = node; - if (!this.nodeLabelMap[label17]) - this.nodeLabelMap[label17] = []; - this.nodeLabelMap[label17].push(id); - }; - Graph11.prototype.addEdge = function(id, from, to, label17) { - if (this.edgeIdAutoIncrease || id === void 0) - id = this.counter++; - if (this.nodeMap[from] && this.nodeMap[to] && this.nodeMap[to].edgeMap[id]) - return; - var edge2 = new Edge4(id, from, to, label17); - this.edges.push(edge2); - this.edgeMap[id] = edge2; - this.nodeMap[from].addEdge(edge2); - if (!this.edgeLabelMap[label17]) - this.edgeLabelMap[label17] = []; - this.edgeLabelMap[label17].push(edge2); - if (!this.directed) { - var rEdge = new Edge4(id, to, from, label17); - this.nodeMap[to].addEdge(rEdge); - this.edgeLabelMap[label17].push(rEdge); - } - }; - return Graph11; - }(); - exports.Graph = Graph10; - } -}); - -// node_modules/@antv/algorithm/lib/gSpan/gSpan.js -var require_gSpan = __commonJS({ - "node_modules/@antv/algorithm/lib/gSpan/gSpan.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var _util = require_lib(); - var _struct = require_struct(); - var DFSedge2 = function() { - function DFSedge3(fromNode, toNode, fromNodeLabel, edgeLabel, toNodeLabel) { - this.fromNode = fromNode; - this.toNode = toNode; - this.nodeEdgeNodeLabel = { - nodeLabel1: fromNodeLabel || _struct.VACANT_NODE_LABEL, - edgeLabel: edgeLabel || _struct.VACANT_EDGE_LABEL, - nodeLabel2: toNodeLabel || _struct.VACANT_NODE_LABEL - }; - } - DFSedge3.prototype.equalTo = function(other2) { - return this.fromNode === other2.formNode && this.toNode === other2.toNode && this.nodeEdgeNodeLabel === other2.nodeEdgeNodeLabel; - }; - DFSedge3.prototype.notEqualTo = function(other2) { - return !this.equalTo(other2); - }; - return DFSedge3; - }(); - var DFScode2 = function() { - function DFScode3() { - this.rmpath = []; - this.dfsEdgeList = []; - } - DFScode3.prototype.equalTo = function(other2) { - var aLength = this.dfsEdgeList.length; - var bLength = other2.length; - if (aLength !== bLength) - return false; - for (var i4 = 0; i4 < aLength; i4++) { - if (this.dfsEdgeList[i4] !== other2[i4]) - return false; - } - return true; - }; - DFScode3.prototype.notEqualTo = function(other2) { - return !this.equalTo(other2); - }; - DFScode3.prototype.pushBack = function(fromNode, toNode, fromNodeLabel, edgeLabel, toNodeLabel) { - this.dfsEdgeList.push(new DFSedge2(fromNode, toNode, fromNodeLabel, edgeLabel, toNodeLabel)); - return this.dfsEdgeList; - }; - DFScode3.prototype.toGraph = function(graphId, directed) { - if (graphId === void 0) { - graphId = _struct.VACANT_GRAPH_ID; - } - if (directed === void 0) { - directed = false; - } - var graph = new _struct.Graph(graphId, true, directed); - this.dfsEdgeList.forEach(function(dfsEdge) { - var fromNodeId = dfsEdge.fromNode; - var toNodeId = dfsEdge.toNode; - var _a6 = dfsEdge.nodeEdgeNodeLabel, nodeLabel1 = _a6.nodeLabel1, edgeLabel = _a6.edgeLabel, nodeLabel2 = _a6.nodeLabel2; - if (nodeLabel1 !== _struct.VACANT_NODE_LABEL) - graph.addNode(fromNodeId, nodeLabel1); - if (nodeLabel2 !== _struct.VACANT_NODE_LABEL) - graph.addNode(toNodeId, nodeLabel2); - if (nodeLabel1 !== _struct.VACANT_NODE_LABEL && nodeLabel2 !== nodeLabel1) - graph.addEdge(void 0, fromNodeId, toNodeId, edgeLabel); - }); - return graph; - }; - DFScode3.prototype.buildRmpath = function() { - this.rmpath = []; - var oldFrom = void 0; - var selfLength = this.dfsEdgeList.length; - for (var i4 = selfLength - 1; i4 >= 0; i4--) { - var dfsEdge = this.dfsEdgeList[i4]; - var fromNodeIdx = dfsEdge.fromNode; - var toNodeIdx = dfsEdge.toNode; - if (fromNodeIdx < toNodeIdx && (oldFrom === void 0 || toNodeIdx === oldFrom)) { - this.rmpath.push(i4); - oldFrom = fromNodeIdx; - } - } - return this.rmpath; - }; - DFScode3.prototype.getNodeNum = function() { - var nodeMap = {}; - this.dfsEdgeList.forEach(function(dfsEdge) { - if (!nodeMap[dfsEdge.fromNode]) - nodeMap[dfsEdge.fromNode] = true; - if (!nodeMap[dfsEdge.toNode]) - nodeMap[dfsEdge.toNode] = true; - }); - return Object.keys(nodeMap).length; - }; - return DFScode3; - }(); - var History2 = function() { - function History3(pdfs) { - this.his = {}; - this.nodesUsed = {}; - this.edgesUsed = {}; - this.edges = []; - if (!pdfs) - return; - while (pdfs) { - var e4 = pdfs.edge; - this.edges.push(e4); - this.nodesUsed[e4.from] = 1; - this.nodesUsed[e4.to] = 1; - this.edgesUsed[e4.id] = 1; - pdfs = pdfs.preNode; - } - this.edges = this.edges.reverse(); - } - History3.prototype.hasNode = function(node) { - return this.nodesUsed[node.id] === 1; - }; - History3.prototype.hasEdge = function(edge2) { - return this.edgesUsed[edge2.id] === 1; - }; - return History3; - }(); - var GSpan2 = function() { - function GSpan3(_a6) { - var graphs8 = _a6.graphs, _b = _a6.minSupport, minSupport = _b === void 0 ? 2 : _b, _c = _a6.minNodeNum, minNodeNum = _c === void 0 ? 1 : _c, _d = _a6.maxNodeNum, maxNodeNum = _d === void 0 ? 4 : _d, _e = _a6.top, top = _e === void 0 ? 10 : _e, _f = _a6.directed, directed = _f === void 0 ? false : _f, _g = _a6.verbose, verbose = _g === void 0 ? false : _g; - this.graphs = graphs8; - this.dfsCode = new DFScode2(); - this.support = 0; - this.frequentSize1Subgraphs = []; - this.frequentSubgraphs = []; - this.minSupport = minSupport; - this.top = top; - this.directed = directed; - this.counter = 0; - this.maxNodeNum = maxNodeNum; - this.minNodeNum = minNodeNum; - this.verbose = verbose; - if (this.maxNodeNum < this.minNodeNum) - this.maxNodeNum = this.minNodeNum; - this.reportDF = []; - } - GSpan3.prototype.findForwardRootEdges = function(graph, fromNode) { - var _this = this; - var result = []; - var nodeMap = graph.nodeMap; - fromNode.edges.forEach(function(edge2) { - if (_this.directed || fromNode.label <= nodeMap[edge2.to].label) - result.push(edge2); - }); - return result; - }; - GSpan3.prototype.findBackwardEdge = function(graph, edge1, edge2, history) { - if (!this.directed && edge1 === edge2) - return null; - var nodeMap = graph.nodeMap; - var edge2To = nodeMap[edge2.to]; - var edge2ToEdges = edge2To.edges; - var edgeLength = edge2ToEdges.length; - for (var i4 = 0; i4 < edgeLength; i4++) { - var edge3 = edge2ToEdges[i4]; - if (history.hasEdge(edge3) || edge3.to !== edge1.from) - continue; - if (!this.directed) { - if (edge1.label < edge3.label || edge1.label === edge3.label && nodeMap[edge1.to].label <= nodeMap[edge2.to].label) { - return edge3; - } - } else { - if (nodeMap[edge1.from].label < nodeMap[edge2.to].label || nodeMap[edge1.from].label === nodeMap[edge2.to].label && edge1.label <= edge3.label) { - return edge3; - } - } - } - return null; - }; - GSpan3.prototype.findForwardPureEdges = function(graph, rightmostEdge, minNodeLabel, history) { - var result = []; - var rightmostEdgeToId = rightmostEdge.to; - var edges = graph.nodeMap[rightmostEdgeToId].edges; - var edgeLength = edges.length; - for (var i4 = 0; i4 < edgeLength; i4++) { - var edge2 = edges[i4]; - var toNode = graph.nodeMap[edge2.to]; - if (minNodeLabel <= toNode.label && !history.hasNode(toNode)) { - result.push(edge2); - } - } - return result; - }; - GSpan3.prototype.findForwardRmpathEdges = function(graph, rightmostEdge, minNodeLabel, history) { - var result = []; - var nodeMap = graph.nodeMap; - var toNodeLabel = nodeMap[rightmostEdge.to].label; - var fromNode = nodeMap[rightmostEdge.from]; - var edges = fromNode.edges; - var edgeLength = edges.length; - for (var i4 = 0; i4 < edgeLength; i4++) { - var edge2 = edges[i4]; - var newToNodeLabel = nodeMap[edge2.to].label; - if (rightmostEdge.to === edge2.to || minNodeLabel > newToNodeLabel || history.hasNode(nodeMap[edge2.to])) { - continue; - } - if (rightmostEdge.label < edge2.label || rightmostEdge.label === edge2.label && toNodeLabel <= newToNodeLabel) { - result.push(edge2); - } - } - return result; - }; - GSpan3.prototype.getSupport = function(projected) { - var graphMap = {}; - projected.forEach(function(pro) { - if (!graphMap[pro.graphId]) - graphMap[pro.graphId] = true; - }); - return Object.keys(graphMap).length; - }; - GSpan3.prototype.findMinLabel = function(obj) { - var minLabel = void 0; - Object.keys(obj).forEach(function(nodeEdgeNodeLabel) { - var _a6 = obj[nodeEdgeNodeLabel], nodeLabel1 = _a6.nodeLabel1, edgeLabel = _a6.edgeLabel, nodeLabel2 = _a6.nodeLabel2; - if (!minLabel) { - minLabel = { - nodeLabel1, - edgeLabel, - nodeLabel2 - }; - return; - } - if (nodeLabel1 < minLabel.nodeLabel1 || nodeLabel1 === minLabel.nodeLabel1 && edgeLabel < minLabel.edgeLabel || nodeLabel1 === minLabel.nodeLabel1 && edgeLabel === minLabel.edgeLabel && nodeLabel2 < minLabel.nodeLabel2) { - minLabel = { - nodeLabel1, - edgeLabel, - nodeLabel2 - }; - } - }); - return minLabel; - }; - GSpan3.prototype.isMin = function() { - var _this = this; - var dfsCode = this.dfsCode; - if (this.verbose) - console.log("isMin checking", dfsCode); - if (dfsCode.dfsEdgeList.length === 1) - return true; - var directed = this.directed; - var graph = dfsCode.toGraph(_struct.VACANT_GRAPH_ID, directed); - var nodeMap = graph.nodeMap; - var dfsCodeMin = new DFScode2(); - var root = {}; - graph.nodes.forEach(function(node) { - var forwardEdges = _this.findForwardRootEdges(graph, node); - forwardEdges.forEach(function(edge2) { - var otherNode = nodeMap[edge2.to]; - var nodeEdgeNodeLabel = "".concat(node.label, "-").concat(edge2.label, "-").concat(otherNode.label); - if (!root[nodeEdgeNodeLabel]) - root[nodeEdgeNodeLabel] = { - projected: [], - nodeLabel1: node.label, - edgeLabel: edge2.label, - nodeLabel2: otherNode.label - }; - var pdfs = { - graphId: graph.id, - edge: edge2, - preNode: null - }; - root[nodeEdgeNodeLabel].projected.push(pdfs); - }); - }); - var minLabel = this.findMinLabel(root); - if (!minLabel) - return; - dfsCodeMin.dfsEdgeList.push(new DFSedge2(0, 1, minLabel.nodeLabel1, minLabel.edgeLabel, minLabel.nodeLabel2)); - var projectIsMin = function projectIsMin2(projected) { - var rmpath = dfsCodeMin.buildRmpath(); - var minNodeLabel = dfsCodeMin.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1; - var maxToC = dfsCodeMin.dfsEdgeList[rmpath[0]].toNode; - var backwardRoot = {}; - var flag = false, newTo = 0; - var end2 = directed ? -1 : 0; - var _loop_1 = function _loop_12(i5) { - if (flag) - return "break"; - projected.forEach(function(p4) { - var history = new History2(p4); - var backwardEdge = _this.findBackwardEdge(graph, history.edges[rmpath[i5]], history.edges[rmpath[0]], history); - if (backwardEdge) { - if (!backwardRoot[backwardEdge.label]) { - backwardRoot[backwardEdge.label] = { - projected: [], - edgeLabel: backwardEdge.label - }; - } - backwardRoot[backwardEdge.label].projected.push({ - graphId: graph.id, - edge: backwardRoot, - preNode: p4 - }); - newTo = dfsCodeMin.dfsEdgeList[rmpath[i5]].fromNode; - flag = true; - } - }); - }; - for (var i4 = rmpath.length - 1; i4 > end2; i4--) { - var state_1 = _loop_1(i4); - if (state_1 === "break") - break; - } - if (flag) { - var minBackwardEdgeLabel = _this.findMinLabel(backwardRoot); - dfsCodeMin.dfsEdgeList.push(new DFSedge2(maxToC, newTo, _struct.VACANT_NODE_LABEL, minBackwardEdgeLabel.edgeLabel, _struct.VACANT_NODE_LABEL)); - var idx_1 = dfsCodeMin.dfsEdgeList.length - 1; - if (_this.dfsCode.dfsEdgeList[idx_1] !== dfsCodeMin.dfsEdgeList[idx_1]) - return false; - return projectIsMin2(backwardRoot[minBackwardEdgeLabel.edgeLabel].projected); - } - var forwardRoot = {}; - flag = false; - var newFrom = 0; - projected.forEach(function(p4) { - var history = new History2(p4); - var forwardPureEdges = _this.findForwardPureEdges(graph, history.edges[rmpath[0]], minNodeLabel, history); - if (forwardPureEdges.length > 0) { - flag = true; - newFrom = maxToC; - forwardPureEdges.forEach(function(edge2) { - var key2 = "".concat(edge2.label, "-").concat(nodeMap[edge2.to].label); - if (!forwardRoot[key2]) - forwardRoot[key2] = { - projected: [], - edgeLabel: edge2.label, - nodeLabel2: nodeMap[edge2.to].label - }; - forwardRoot[key2].projected.push({ - graphId: graph.id, - edge: edge2, - preNode: p4 - }); - }); - } - }); - var pathLength = rmpath.length; - var _loop_2 = function _loop_22(i5) { - if (flag) - return "break"; - var value2 = rmpath[i5]; - projected.forEach(function(p4) { - var history = new History2(p4); - var forwardRmpathEdges = _this.findForwardRmpathEdges(graph, history.edges[value2], minNodeLabel, history); - if (forwardRmpathEdges.length > 0) { - flag = true; - newFrom = dfsCodeMin.dfsEdgeList[value2].fromNode; - forwardRmpathEdges.forEach(function(edge2) { - var key2 = "".concat(edge2.label, "-").concat(nodeMap[edge2.to].label); - if (!forwardRoot[key2]) - forwardRoot[key2] = { - projected: [], - edgeLabel: edge2.label, - nodeLabel2: nodeMap[edge2.to].label - }; - forwardRoot[key2].projected.push({ - graphId: graph.id, - edge: edge2, - preNode: p4 - }); - }); - } - }); - }; - for (var i4 = 0; i4 < pathLength; i4++) { - var state_2 = _loop_2(i4); - if (state_2 === "break") - break; - } - if (!flag) - return true; - var forwardMinEdgeNodeLabel = _this.findMinLabel(forwardRoot); - dfsCodeMin.dfsEdgeList.push(new DFSedge2(newFrom, maxToC + 1, _struct.VACANT_NODE_LABEL, forwardMinEdgeNodeLabel.edgeLabel, forwardMinEdgeNodeLabel.nodeLabel2)); - var idx = dfsCodeMin.dfsEdgeList.length - 1; - if (dfsCode.dfsEdgeList[idx] !== dfsCodeMin.dfsEdgeList[idx]) - return false; - return projectIsMin2(forwardRoot["".concat(forwardMinEdgeNodeLabel.edgeLabel, "-").concat(forwardMinEdgeNodeLabel.nodeLabel2)].projected); - }; - var key = "".concat(minLabel.nodeLabel1, "-").concat(minLabel.edgeLabel, "-").concat(minLabel.nodeLabel2); - return projectIsMin(root[key].projected); - }; - GSpan3.prototype.report = function() { - if (this.dfsCode.getNodeNum() < this.minNodeNum) - return; - this.counter++; - var graph = this.dfsCode.toGraph(this.counter, this.directed); - this.frequentSubgraphs.push((0, _util.clone)(graph)); - }; - GSpan3.prototype.subGraphMining = function(projected) { - var _this = this; - var support = this.getSupport(projected); - if (support < this.minSupport) - return; - if (!this.isMin()) - return; - this.report(); - var nodeNum = this.dfsCode.getNodeNum(); - var rmpath = this.dfsCode.buildRmpath(); - var maxToC = this.dfsCode.dfsEdgeList[rmpath[0]].toNode; - var minNodeLabel = this.dfsCode.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1; - var forwardRoot = {}; - var backwardRoot = {}; - projected.forEach(function(p4) { - var graph = _this.graphs[p4.graphId]; - var nodeMap = graph.nodeMap; - var history = new History2(p4); - for (var i4 = rmpath.length - 1; i4 >= 0; i4--) { - var backwardEdge = _this.findBackwardEdge(graph, history.edges[rmpath[i4]], history.edges[rmpath[0]], history); - if (backwardEdge) { - var key = "".concat(_this.dfsCode.dfsEdgeList[rmpath[i4]].fromNode, "-").concat(backwardEdge.label); - if (!backwardRoot[key]) - backwardRoot[key] = { - projected: [], - toNodeId: _this.dfsCode.dfsEdgeList[rmpath[i4]].fromNode, - edgeLabel: backwardEdge.label - }; - backwardRoot[key].projected.push({ - graphId: p4.graphId, - edge: backwardEdge, - preNode: p4 - }); - } - } - if (nodeNum >= _this.maxNodeNum) - return; - var forwardPureEdges = _this.findForwardPureEdges(graph, history.edges[rmpath[0]], minNodeLabel, history); - forwardPureEdges.forEach(function(edge2) { - var key2 = "".concat(maxToC, "-").concat(edge2.label, "-").concat(nodeMap[edge2.to].label); - if (!forwardRoot[key2]) - forwardRoot[key2] = { - projected: [], - fromNodeId: maxToC, - edgeLabel: edge2.label, - nodeLabel2: nodeMap[edge2.to].label - }; - forwardRoot[key2].projected.push({ - graphId: p4.graphId, - edge: edge2, - preNode: p4 - }); - }); - var _loop_3 = function _loop_32(i5) { - var forwardRmpathEdges = _this.findForwardRmpathEdges(graph, history.edges[rmpath[i5]], minNodeLabel, history); - forwardRmpathEdges.forEach(function(edge2) { - var key2 = "".concat(_this.dfsCode.dfsEdgeList[rmpath[i5]].fromNode, "-").concat(edge2.label, "-").concat(nodeMap[edge2.to].label); - if (!forwardRoot[key2]) - forwardRoot[key2] = { - projected: [], - fromNodeId: _this.dfsCode.dfsEdgeList[rmpath[i5]].fromNode, - edgeLabel: edge2.label, - nodeLabel2: nodeMap[edge2.to].label - }; - forwardRoot[key2].projected.push({ - graphId: p4.graphId, - edge: edge2, - preNode: p4 - }); - }); - }; - for (var i4 = 0; i4 < rmpath.length; i4++) { - _loop_3(i4); - } - }); - Object.keys(backwardRoot).forEach(function(key) { - var _a6 = backwardRoot[key], toNodeId = _a6.toNodeId, edgeLabel = _a6.edgeLabel; - _this.dfsCode.dfsEdgeList.push(new DFSedge2(maxToC, toNodeId, "-1", edgeLabel, "-1")); - _this.subGraphMining(backwardRoot[key].projected); - _this.dfsCode.dfsEdgeList.pop(); - }); - Object.keys(forwardRoot).forEach(function(key) { - var _a6 = forwardRoot[key], fromNodeId = _a6.fromNodeId, edgeLabel = _a6.edgeLabel, nodeLabel2 = _a6.nodeLabel2; - _this.dfsCode.dfsEdgeList.push(new DFSedge2(fromNodeId, maxToC + 1, _struct.VACANT_NODE_LABEL, edgeLabel, nodeLabel2)); - _this.subGraphMining(forwardRoot[key].projected); - _this.dfsCode.dfsEdgeList.pop(); - }); - }; - GSpan3.prototype.generate1EdgeFrequentSubGraphs = function() { - var graphs8 = this.graphs; - var directed = this.directed; - var minSupport = this.minSupport; - var frequentSize1Subgraphs = this.frequentSize1Subgraphs; - var nodeLabelCounter = {}, nodeEdgeNodeCounter = {}; - var nodeLableCounted = {}; - var nodeEdgeNodeLabelCounted = {}; - Object.keys(graphs8).forEach(function(key) { - var graph = graphs8[key]; - var nodeMap = graph.nodeMap; - graph.nodes.forEach(function(node, i4) { - var nodeLabel = node.label; - var graphNodeKey = "".concat(key, "-").concat(nodeLabel); - if (!nodeLableCounted[graphNodeKey]) { - var counter = nodeLabelCounter[nodeLabel] || 0; - counter++; - nodeLabelCounter[nodeLabel] = counter; - } - nodeLableCounted[graphNodeKey] = { - graphKey: key, - label: nodeLabel - }; - node.edges.forEach(function(edge2) { - var nodeLabel1 = nodeLabel; - var nodeLabel2 = nodeMap[edge2.to].label; - if (!directed && nodeLabel1 > nodeLabel2) { - var tmp = nodeLabel2; - nodeLabel2 = nodeLabel1; - nodeLabel1 = tmp; - } - var edgeLabel = edge2.label; - var graphNodeEdgeNodeKey = "".concat(key, "-").concat(nodeLabel1, "-").concat(edgeLabel, "-").concat(nodeLabel2); - var nodeEdgeNodeKey = "".concat(nodeLabel1, "-").concat(edgeLabel, "-").concat(nodeLabel2); - if (!nodeEdgeNodeCounter[nodeEdgeNodeKey]) { - var counter2 = nodeEdgeNodeCounter[nodeEdgeNodeKey] || 0; - counter2++; - nodeEdgeNodeCounter[nodeEdgeNodeKey] = counter2; - } - nodeEdgeNodeLabelCounted[graphNodeEdgeNodeKey] = { - graphId: key, - nodeLabel1, - edgeLabel, - nodeLabel2 - }; - }); - }); - }); - Object.keys(nodeLabelCounter).forEach(function(label17) { - var count2 = nodeLabelCounter[label17]; - if (count2 < minSupport) - return; - var g4 = { - nodes: [], - edges: [] - }; - g4.nodes.push({ - id: "0", - label: label17 - }); - frequentSize1Subgraphs.push(g4); - }); - return frequentSize1Subgraphs; - }; - GSpan3.prototype.run = function() { - var _this = this; - this.frequentSize1Subgraphs = this.generate1EdgeFrequentSubGraphs(); - if (this.maxNodeNum < 2) - return; - var graphs8 = this.graphs; - var directed = this.directed; - var root = {}; - Object.keys(graphs8).forEach(function(graphId) { - var graph = graphs8[graphId]; - var nodeMap = graph.nodeMap; - graph.nodes.forEach(function(node) { - var forwardRootEdges = _this.findForwardRootEdges(graph, node); - forwardRootEdges.forEach(function(edge2) { - var toNode = nodeMap[edge2.to]; - var nodeEdgeNodeLabel = "".concat(node.label, "-").concat(edge2.label, "-").concat(toNode.label); - if (!root[nodeEdgeNodeLabel]) - root[nodeEdgeNodeLabel] = { - projected: [], - nodeLabel1: node.label, - edgeLabel: edge2.label, - nodeLabel2: toNode.label - }; - var pdfs = { - graphId, - edge: edge2, - preNode: null - }; - root[nodeEdgeNodeLabel].projected.push(pdfs); - }); - }); - }); - Object.keys(root).forEach(function(nodeEdgeNodeLabel) { - var _a6 = root[nodeEdgeNodeLabel], projected = _a6.projected, nodeLabel1 = _a6.nodeLabel1, edgeLabel = _a6.edgeLabel, nodeLabel2 = _a6.nodeLabel2; - _this.dfsCode.dfsEdgeList.push(new DFSedge2(0, 1, nodeLabel1, edgeLabel, nodeLabel2)); - _this.subGraphMining(projected); - _this.dfsCode.dfsEdgeList.pop(); - }); - }; - return GSpan3; - }(); - var formatGraphs3 = function formatGraphs4(graphs8, directed, nodeLabelProp, edgeLabelProp) { - var result = {}; - Object.keys(graphs8).forEach(function(key, i4) { - var graph = graphs8[key]; - var fGraph = new _struct.Graph(i4, true, directed); - var nodeIdxMap = {}; - graph.nodes.forEach(function(node, j4) { - fGraph.addNode(j4, node[nodeLabelProp]); - nodeIdxMap[node.id] = j4; - }); - graph.edges.forEach(function(edge2, k4) { - var sourceIdx = nodeIdxMap[edge2.source]; - var targetIdx = nodeIdxMap[edge2.target]; - fGraph.addEdge(-1, sourceIdx, targetIdx, edge2[edgeLabelProp]); - }); - if (fGraph && fGraph.getNodeNum()) - result[fGraph.id] = fGraph; - }); - return result; - }; - var toGraphDatas3 = function toGraphDatas4(graphs8, nodeLabelProp, edgeLabelProp) { - var result = []; - graphs8.forEach(function(graph) { - var graphData = { - nodes: [], - edges: [] - }; - graph.nodes.forEach(function(node) { - var _a6; - graphData.nodes.push((_a6 = { - id: "".concat(node.id) - }, _a6[nodeLabelProp] = node.label, _a6)); - }); - graph.edges.forEach(function(edge2) { - var _a6; - graphData.edges.push((_a6 = { - source: "".concat(edge2.from), - target: "".concat(edge2.to) - }, _a6[edgeLabelProp] = edge2.label, _a6)); - }); - result.push(graphData); - }); - return result; - }; - var DEFAULT_LABEL_NAME2 = "cluster"; - var gSpan3 = function gSpan4(params) { - var graphs8 = params.graphs, _a6 = params.directed, directed = _a6 === void 0 ? false : _a6, _b = params.nodeLabelProp, nodeLabelProp = _b === void 0 ? DEFAULT_LABEL_NAME2 : _b, _c = params.edgeLabelProp, edgeLabelProp = _c === void 0 ? DEFAULT_LABEL_NAME2 : _c; - var formattedGraphs = formatGraphs3(graphs8, directed, nodeLabelProp, edgeLabelProp); - var minSupport = params.minSupport, maxNodeNum = params.maxNodeNum, minNodeNum = params.minNodeNum, verbose = params.verbose, top = params.top; - var algoParams = { - graphs: formattedGraphs, - minSupport, - maxNodeNum, - minNodeNum, - top, - verbose, - directed - }; - var calculator = new GSpan2(algoParams); - calculator.run(); - var result = toGraphDatas3(calculator.frequentSubgraphs, nodeLabelProp, edgeLabelProp); - return result; - }; - var _default2 = gSpan3; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/gaddi.js -var require_gaddi = __commonJS({ - "node_modules/@antv/algorithm/lib/gaddi.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var _tslib = require_tslib(); - var _floydWarshall = _interopRequireDefault(require_floydWarshall()); - var _gSpan = _interopRequireDefault(require_gSpan()); - var _dijkstra = _interopRequireDefault(require_dijkstra()); - var _util = require_util(); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var findKNeighborUnits3 = function findKNeighborUnits4(graphData, spm, nodeLabelProp, k4) { - if (nodeLabelProp === void 0) { - nodeLabelProp = "cluster"; - } - if (k4 === void 0) { - k4 = 2; - } - var units = []; - var nodes = graphData.nodes; - spm.forEach(function(row, i4) { - units.push(findKNeighborUnit3(nodes, row, i4, nodeLabelProp, k4)); - }); - return units; - }; - var findKNeighborUnit3 = function findKNeighborUnit4(nodes, row, i4, nodeLabelProp, k4) { - var unitNodeIdxs = [i4]; - var neighbors = []; - var labelCountMap = {}; - row.forEach(function(v3, j4) { - if (v3 <= k4 && i4 !== j4) { - unitNodeIdxs.push(j4); - neighbors.push(nodes[j4]); - var label17 = nodes[j4][nodeLabelProp]; - if (!labelCountMap[label17]) - labelCountMap[label17] = { - count: 1, - dists: [v3] - }; - else { - labelCountMap[label17].count++; - labelCountMap[label17].dists.push(v3); - } - } - }); - Object.keys(labelCountMap).forEach(function(label17) { - labelCountMap[label17].dists = labelCountMap[label17].dists.sort(function(a4, b10) { - return a4 - b10; - }); - }); - return { - nodeIdx: i4, - nodeId: nodes[i4].id, - nodeIdxs: unitNodeIdxs, - neighbors, - neighborNum: unitNodeIdxs.length - 1, - nodeLabelCountMap: labelCountMap - }; - }; - var findNodePairsRandomly3 = function findNodePairsRandomly4(k4, nodeNum, maxNodePairNum, kNeighborUnits, spm) { - var nodePairNumEachNode = Math.ceil(maxNodePairNum / nodeNum); - var nodePairMap = {}; - var foundNodePairCount = 0; - kNeighborUnits.forEach(function(unit, i4) { - var nodePairForICount = 0; - var outerLoopCount = 0; - var neighbors = unit.nodeIdxs; - var neighborNum = unit.neighborNum - 1; - while (nodePairForICount < nodePairNumEachNode) { - var oidx = neighbors[1 + Math.floor(Math.random() * neighborNum)]; - var innerLoopCount = 0; - while (nodePairMap["".concat(i4, "-").concat(oidx)] || nodePairMap["".concat(oidx, "-").concat(i4)]) { - oidx = Math.floor(Math.random() * nodeNum); - innerLoopCount++; - if (innerLoopCount > 2 * nodeNum) - break; - } - if (innerLoopCount < 2 * nodeNum) { - nodePairMap["".concat(i4, "-").concat(oidx)] = { - start: i4, - end: oidx, - distance: spm[i4][oidx] - }; - nodePairForICount++; - foundNodePairCount++; - if (foundNodePairCount >= maxNodePairNum) - return nodePairMap; - } - outerLoopCount++; - if (outerLoopCount > 2 * nodeNum) - break; - } - if (nodePairForICount < nodePairNumEachNode) { - var gap = nodePairNumEachNode - nodePairForICount; - nodePairNumEachNode = (nodePairNumEachNode + gap) / (nodeNum - i4 - 1); - } - }); - return nodePairMap; - }; - var getIntersectNeighborInducedGraph3 = function getIntersectNeighborInducedGraph4(nodePairMap, neighborUnits, graphData, cachedInducedGraphMap) { - var nodes = graphData.nodes; - if (!cachedInducedGraphMap) - cachedInducedGraphMap = {}; - Object.keys(nodePairMap).forEach(function(key) { - var _a6, _b; - if (cachedInducedGraphMap && cachedInducedGraphMap[key]) - return; - cachedInducedGraphMap[key] = { - nodes: [], - edges: [] - }; - var pair = nodePairMap[key]; - var startUnitNodeIds = (_a6 = neighborUnits[pair.start]) === null || _a6 === void 0 ? void 0 : _a6.nodeIdxs; - var endUnitNodeIds = (_b = neighborUnits[pair.end]) === null || _b === void 0 ? void 0 : _b.nodeIdxs; - if (!startUnitNodeIds || !endUnitNodeIds) - return; - var endSet = new Set(endUnitNodeIds); - var intersect2 = startUnitNodeIds.filter(function(x6) { - return endSet.has(x6); - }); - if (!intersect2 || !intersect2.length) - return; - var intersectIdMap = {}; - var intersectLength = intersect2.length; - for (var i4 = 0; i4 < intersectLength; i4++) { - var node = nodes[intersect2[i4]]; - cachedInducedGraphMap[key].nodes.push(node); - intersectIdMap[node.id] = true; - } - graphData.edges.forEach(function(edge2) { - if (intersectIdMap[edge2.source] && intersectIdMap[edge2.target]) - cachedInducedGraphMap[key].edges.push(edge2); - }); - }); - return cachedInducedGraphMap; - }; - var getMatchedCount3 = function getMatchedCount4(graph, structure, nodeLabelProp, edgeLabelProp) { - var _a6, _b; - var nodeMap = {}; - graph.nodes.forEach(function(node) { - nodeMap[node.id] = node; - }); - var count2 = 0; - if (!((_a6 = structure === null || structure === void 0 ? void 0 : structure.edges) === null || _a6 === void 0 ? void 0 : _a6.length) || ((_b = structure === null || structure === void 0 ? void 0 : structure.nodes) === null || _b === void 0 ? void 0 : _b.length) < 2) - return 0; - graph.edges.forEach(function(e4) { - var sourceLabel = nodeMap[e4.source][nodeLabelProp]; - var targetLabel = nodeMap[e4.target][nodeLabelProp]; - var strNodeLabel1 = structure === null || structure === void 0 ? void 0 : structure.nodes[0][nodeLabelProp]; - var strNodeLabel2 = structure === null || structure === void 0 ? void 0 : structure.nodes[1][nodeLabelProp]; - var strEdgeLabel = structure === null || structure === void 0 ? void 0 : structure.edges[0][edgeLabelProp]; - if (e4[edgeLabelProp] !== strEdgeLabel) - return; - if (sourceLabel === strNodeLabel1 && targetLabel === strNodeLabel2 || sourceLabel === strNodeLabel2 && targetLabel === strNodeLabel1) { - count2++; - } - }); - return count2; - }; - var findRepresentStructure3 = function findRepresentStructure4(matchedCountMap, structureNum, structures) { - var maxOffset = Infinity, representClusterType = 0; - var _loop_1 = function _loop_12(i5) { - var countMapI = matchedCountMap[i5]; - var sortedGraphKeys = Object.keys(countMapI).sort(function(a4, b10) { - return countMapI[a4] - countMapI[b10]; - }); - var groupNum = 10; - var clusters = []; - sortedGraphKeys.forEach(function(key, j4) { - if (!clusters[j4 % groupNum]) - clusters[j4 % groupNum] = { - graphs: [], - totalCount: 0, - aveCount: 0 - }; - clusters[j4 % groupNum].graphs.push(key); - clusters[j4 % groupNum].totalCount += countMapI[key]; - }); - var aveIntraDist = 0; - var aveCounts = []; - clusters.forEach(function(graphsInCluster) { - var aveCount = graphsInCluster.totalCount / graphsInCluster.graphs.length; - graphsInCluster.aveCount = aveCount; - aveCounts.push(aveCount); - var aveIntraPerCluster = 0; - var graphsNum = graphsInCluster.length; - graphsInCluster.graphs.forEach(function(graphKey1, j4) { - var graph1Count = countMapI[graphKey1]; - graphsInCluster.graphs.forEach(function(graphKey2, k4) { - if (j4 === k4) - return; - aveIntraPerCluster += Math.abs(graph1Count - countMapI[graphKey2]); - }); - }); - aveIntraPerCluster /= graphsNum * (graphsNum - 1) / 2; - aveIntraDist += aveIntraPerCluster; - }); - aveIntraDist /= clusters.length; - var aveInterDist = 0; - aveCounts.forEach(function(aveCount1, j4) { - aveCounts.forEach(function(aveCount2, k4) { - if (j4 === k4) - return; - aveInterDist += Math.abs(aveCount1 - aveCount2); - }); - aveInterDist /= aveCounts.length * (aveCounts.length - 1) / 2; - }); - var offset = aveInterDist - aveIntraDist; - if (maxOffset < offset) { - maxOffset = offset; - representClusterType = i5; - } - }; - for (var i4 = 0; i4 < structureNum; i4++) { - _loop_1(i4); - } - return { - structure: structures[representClusterType], - structureCountMap: matchedCountMap[representClusterType] - }; - }; - var getNodeMaps3 = function getNodeMaps4(nodes, nodeLabelProp) { - var nodeMap = {}, nodeLabelMap = {}; - nodes.forEach(function(node, i4) { - nodeMap[node.id] = { - idx: i4, - node, - degree: 0, - inDegree: 0, - outDegree: 0 - }; - var label17 = node[nodeLabelProp]; - if (!nodeLabelMap[label17]) - nodeLabelMap[label17] = []; - nodeLabelMap[label17].push(node); - }); - return { - nodeMap, - nodeLabelMap - }; - }; - var getEdgeMaps3 = function getEdgeMaps4(edges, edgeLabelProp, nodeMap) { - var edgeMap = {}, edgeLabelMap = {}; - edges.forEach(function(edge2, i4) { - edgeMap["".concat(_util.uniqueId)] = { - idx: i4, - edge: edge2 - }; - var label17 = edge2[edgeLabelProp]; - if (!edgeLabelMap[label17]) - edgeLabelMap[label17] = []; - edgeLabelMap[label17].push(edge2); - var sourceNode = nodeMap[edge2.source]; - if (sourceNode) { - sourceNode.degree++; - sourceNode.outDegree++; - } - var targetNode = nodeMap[edge2.target]; - if (targetNode) { - targetNode.degree++; - targetNode.inDegree++; - } - }); - return { - edgeMap, - edgeLabelMap - }; - }; - var getSpmMap3 = function getSpmMap4(nodes, spm, directed) { - var length5 = spm.length; - var map23 = {}; - spm.forEach(function(row, i4) { - var start = directed ? 0 : i4 + 1; - var iId = nodes[i4].id; - for (var j4 = start; j4 < length5; j4++) { - if (i4 === j4) - continue; - var jId = nodes[j4].id; - var dist4 = row[j4]; - map23["".concat(iId, "-").concat(jId)] = dist4; - if (!directed) - map23["".concat(jId, "-").concat(iId)] = dist4; - } - }); - return map23; - }; - var getNDSDist3 = function getNDSDist4(graph, node1, node2, nodeMap, spDist, kNeighborUnits, structure, nodeLabelProp, edgeLabelProp, cachedNDSMap, cachedInterInducedGraph) { - var _a6; - var key = "".concat(node1.id, "-").concat(node2.id); - if (cachedNDSMap && cachedNDSMap[key]) - return cachedNDSMap[key]; - var interInducedGraph = cachedInterInducedGraph ? cachedInterInducedGraph[key] : void 0; - if (!interInducedGraph) { - var pairMap = (_a6 = {}, _a6[key] = { - start: nodeMap[node1.id].idx, - end: nodeMap[node2.id].idx, - distance: spDist - }, _a6); - cachedInterInducedGraph = getIntersectNeighborInducedGraph3(pairMap, kNeighborUnits, graph, cachedInterInducedGraph); - interInducedGraph = cachedInterInducedGraph[key]; - } - return getMatchedCount3(interInducedGraph, structure, nodeLabelProp, edgeLabelProp); - }; - var stashPatternNodeLabelDegreeMap3 = function stashPatternNodeLabelDegreeMap4(minPatternNodeLabelDegreeMap, neighborLabel, patternNodeMap, patternNodeLabelMap) { - var _a6, _b, _c; - var minPatternNodeLabelDegree = (_a6 = minPatternNodeLabelDegreeMap[neighborLabel]) === null || _a6 === void 0 ? void 0 : _a6.degree; - var minPatternNodeLabelInDegree = (_b = minPatternNodeLabelDegreeMap[neighborLabel]) === null || _b === void 0 ? void 0 : _b.inDegree; - var minPatternNodeLabelOutDegree = (_c = minPatternNodeLabelDegreeMap[neighborLabel]) === null || _c === void 0 ? void 0 : _c.outDegree; - if (minPatternNodeLabelDegreeMap[neighborLabel] === void 0) { - minPatternNodeLabelDegree = Infinity; - minPatternNodeLabelInDegree = Infinity; - minPatternNodeLabelOutDegree = Infinity; - patternNodeLabelMap[neighborLabel].forEach(function(patternNodeWithLabel) { - var patternNodeDegree = patternNodeMap[patternNodeWithLabel.id].degree; - if (minPatternNodeLabelDegree > patternNodeDegree) - minPatternNodeLabelDegree = patternNodeDegree; - var patternNodeInDegree = patternNodeMap[patternNodeWithLabel.id].inDegree; - if (minPatternNodeLabelInDegree > patternNodeInDegree) - minPatternNodeLabelInDegree = patternNodeInDegree; - var patternNodeOutDegree = patternNodeMap[patternNodeWithLabel.id].outDegree; - if (minPatternNodeLabelOutDegree > patternNodeOutDegree) - minPatternNodeLabelOutDegree = patternNodeOutDegree; - }); - minPatternNodeLabelDegreeMap[neighborLabel] = { - degree: minPatternNodeLabelDegree, - inDegree: minPatternNodeLabelInDegree, - outDegree: minPatternNodeLabelOutDegree - }; - } - return { - minPatternNodeLabelDegree, - minPatternNodeLabelInDegree, - minPatternNodeLabelOutDegree - }; - }; - var GADDI3 = function GADDI4(graphData, pattern2, directed, k4, length5, nodeLabelProp, edgeLabelProp) { - var _a6; - if (directed === void 0) { - directed = false; - } - if (nodeLabelProp === void 0) { - nodeLabelProp = "cluster"; - } - if (edgeLabelProp === void 0) { - edgeLabelProp = "cluster"; - } - if (!graphData || !graphData.nodes) - return; - var nodeNum = graphData.nodes.length; - if (!nodeNum) - return; - var spm = (0, _floydWarshall.default)(graphData, directed); - var patternSpm = (0, _floydWarshall.default)(pattern2, directed); - var spmMap = getSpmMap3(graphData.nodes, spm, directed); - var patternSpmMap = getSpmMap3(pattern2.nodes, patternSpm, directed); - var _b = getNodeMaps3(graphData.nodes, nodeLabelProp), nodeMap = _b.nodeMap, nodeLabelMap = _b.nodeLabelMap; - var _c = getNodeMaps3(pattern2.nodes, nodeLabelProp), patternNodeMap = _c.nodeMap, patternNodeLabelMap = _c.nodeLabelMap; - getEdgeMaps3(graphData.edges, edgeLabelProp, nodeMap); - var patternEdgeLabelMap = getEdgeMaps3(pattern2.edges, edgeLabelProp, patternNodeMap).edgeLabelMap; - var patternSpmSpread = []; - patternSpm === null || patternSpm === void 0 ? void 0 : patternSpm.forEach(function(row) { - patternSpmSpread = patternSpmSpread.concat(row); - }); - if (!length5) - length5 = Math.max.apply(Math, (0, _tslib.__spreadArray)((0, _tslib.__spreadArray)([], patternSpmSpread, false), [2], false)); - if (!k4) - k4 = length5; - var kNeighborUnits = findKNeighborUnits3(graphData, spm, nodeLabelProp, k4); - var patternKNeighborUnits = findKNeighborUnits3(pattern2, patternSpm, nodeLabelProp, k4); - var maxNodePairNum = Math.min(100, nodeNum * (nodeNum - 1) / 2); - var nodePairsMap = findNodePairsRandomly3(k4, nodeNum, maxNodePairNum, kNeighborUnits, spm); - var intGMap = getIntersectNeighborInducedGraph3(nodePairsMap, kNeighborUnits, graphData); - var top = 10, minSupport = 1, minNodeNum = 1, maxNodeNum = 4; - var params = { - graphs: intGMap, - nodeLabelProp, - edgeLabelProp, - minSupport, - minNodeNum, - maxNodeNum, - directed - }; - var freStructures = (0, _gSpan.default)(params).slice(0, top); - var structureNum = freStructures.length; - var matchedCountMap = []; - freStructures.forEach(function(structure, i5) { - matchedCountMap[i5] = {}; - Object.keys(intGMap).forEach(function(key) { - var graph = intGMap[key]; - var subStructureCount = getMatchedCount3(graph, structure, nodeLabelProp, edgeLabelProp); - matchedCountMap[i5][key] = subStructureCount; - }); - }); - var _d = findRepresentStructure3(matchedCountMap, structureNum, freStructures), dsG = _d.structure, ndsDist = _d.structureCountMap; - var beginPNode = pattern2.nodes[0], candidates = [], label17 = (_a6 = pattern2.nodes[0]) === null || _a6 === void 0 ? void 0 : _a6[nodeLabelProp], maxNodeNumWithSameLabel = -Infinity; - pattern2.nodes.forEach(function(node) { - var pLabel = node[nodeLabelProp]; - var nodesWithSameLabel = nodeLabelMap[pLabel]; - if ((nodesWithSameLabel === null || nodesWithSameLabel === void 0 ? void 0 : nodesWithSameLabel.length) > maxNodeNumWithSameLabel) { - maxNodeNumWithSameLabel = nodesWithSameLabel.length; - candidates = nodesWithSameLabel; - label17 = pLabel; - beginPNode = node; - } - }); - var minPatternNodeLabelDegreeMap = {}; - var patternIntGraphMap = {}, patternNDSDist = {}, patternNDSDistMap = {}; - var patternSpDist = {}; - var patternSpDistBack = {}; - Object.keys(patternNodeLabelMap).forEach(function(label22, j4) { - patternSpDist[label22] = []; - if (directed) { - patternSpDistBack[label22] = []; - } - var maxDist = -Infinity; - var patternNodesWithLabel2 = patternNodeLabelMap[label22]; - var patternNodePairMap = {}; - patternNodesWithLabel2.forEach(function(nodeWithLabel2) { - var dist4 = patternSpmMap["".concat(beginPNode.id, "-").concat(nodeWithLabel2.id)]; - dist4 && patternSpDist[label22].push(dist4); - if (maxDist < dist4) - maxDist = dist4; - patternNodePairMap["".concat(beginPNode.id, "-").concat(nodeWithLabel2.id)] = { - start: 0, - end: patternNodeMap[nodeWithLabel2.id].idx, - distance: dist4 - }; - if (directed) { - var distBack = patternSpmMap["".concat(nodeWithLabel2.id, "-").concat(beginPNode.id)]; - distBack && patternSpDistBack[label22].push(distBack); - } - }); - patternSpDist[label22] = patternSpDist[label22].sort(function(a4, b10) { - return a4 - b10; - }); - if (directed) - patternSpDistBack[label22] = patternSpDistBack[label22].sort(function(a4, b10) { - return a4 - b10; - }); - patternIntGraphMap = getIntersectNeighborInducedGraph3(patternNodePairMap, patternKNeighborUnits, pattern2, patternIntGraphMap); - var currentPatternNDSDistArray = []; - Object.keys(patternNodePairMap).forEach(function(key) { - if (patternNDSDist[key]) { - currentPatternNDSDistArray.push(patternNDSDist[key]); - return; - } - var patternIntGraph = patternIntGraphMap[key]; - patternNDSDist[key] = getMatchedCount3(patternIntGraph, dsG, nodeLabelProp, edgeLabelProp); - currentPatternNDSDistArray.push(patternNDSDist[key]); - }); - currentPatternNDSDistArray = currentPatternNDSDistArray.sort(function(a4, b10) { - return b10 - a4; - }); - patternNDSDistMap["".concat(beginPNode.id, "-").concat(label22)] = currentPatternNDSDistArray; - if (label22 === label17) - return; - var candidatesNum = (candidates === null || candidates === void 0 ? void 0 : candidates.length) || 0; - var _loop_4 = function _loop_42(m5) { - var cNode = candidates[m5]; - var graphNeighborUnit = kNeighborUnits[nodeMap[cNode.id].idx]; - var graphNeighborUnitCountMap = graphNeighborUnit.nodeLabelCountMap[label22]; - var patternLabel2Num = patternNodeLabelMap[label22].length; - if (!graphNeighborUnitCountMap || graphNeighborUnitCountMap.count < patternLabel2Num) { - candidates.splice(m5, 1); - return "continue"; - } - var prune2Invalid = false; - for (var n3 = 0; n3 < patternLabel2Num; n3++) { - if (graphNeighborUnitCountMap.dists[n3] > patternSpDist[label22][n3]) { - prune2Invalid = true; - break; - } - } - if (prune2Invalid) { - candidates.splice(m5, 1); - return "continue"; - } - var cNodePairMap = {}; - graphNeighborUnit.neighbors.forEach(function(neighborNode) { - var dist4 = spmMap["".concat(cNode.id, "-").concat(neighborNode.id)]; - cNodePairMap["".concat(cNode.id, "-").concat(neighborNode.id)] = { - start: nodeMap[cNode.id].idx, - end: nodeMap[neighborNode.id].idx, - distance: dist4 - }; - }); - intGMap = getIntersectNeighborInducedGraph3(cNodePairMap, kNeighborUnits, graphData, intGMap); - var currentNDSDistArray = []; - Object.keys(cNodePairMap).forEach(function(key) { - if (ndsDist[key]) { - currentNDSDistArray.push(ndsDist[key]); - return; - } - var intGraph = intGMap[key]; - ndsDist[key] = getMatchedCount3(intGraph, dsG, nodeLabelProp, edgeLabelProp); - currentNDSDistArray.push(ndsDist[key]); - }); - currentNDSDistArray = currentNDSDistArray.sort(function(a4, b10) { - return b10 - a4; - }); - var prune3Invalid = false; - for (var n3 = 0; n3 < patternLabel2Num; n3++) { - if (currentNDSDistArray[n3] < currentPatternNDSDistArray[n3]) { - prune3Invalid = true; - break; - } - } - if (prune3Invalid) { - candidates.splice(m5, 1); - return "continue"; - } - }; - for (var m4 = candidatesNum - 1; m4 >= 0; m4--) { - _loop_4(m4); - } - }); - var candidateGraphs = []; - candidates === null || candidates === void 0 ? void 0 : candidates.forEach(function(candidate) { - var nodeIdx = nodeMap[candidate.id].idx; - var lengthNeighborUnit = findKNeighborUnit3(graphData.nodes, spm[nodeIdx], nodeIdx, nodeLabelProp, length5); - var neighborNodes = lengthNeighborUnit.neighbors; - var neighborNum = neighborNodes.length; - var unmatched = false; - for (var i5 = neighborNum - 1; i5 >= 0; i5--) { - if (neighborNodes.length + 1 < pattern2.nodes.length) { - unmatched = true; - return; - } - var neighborNode = neighborNodes[i5]; - var neighborLabel = neighborNode[nodeLabelProp]; - if (!patternNodeLabelMap[neighborLabel] || !patternNodeLabelMap[neighborLabel].length) { - neighborNodes.splice(i5, 1); - continue; - } - if (!patternSpDist[neighborLabel] || !patternSpDist[neighborLabel].length) { - neighborNodes.splice(i5, 1); - continue; - } - var key = "".concat(candidate.id, "-").concat(neighborNode.id); - var distToCandidate = spmMap[key]; - var idx = patternSpDist[neighborLabel].length - 1; - var maxDistWithLabelInPattern = patternSpDist[neighborLabel][idx]; - if (distToCandidate > maxDistWithLabelInPattern) { - neighborNodes.splice(i5, 1); - continue; - } - if (directed) { - var keyBack = "".concat(neighborNode.id, "-").concat(candidate.id); - var distFromCandidate = spmMap[keyBack]; - idx = patternSpDistBack[neighborLabel].length - 1; - var maxBackDistWithLabelInPattern = patternSpDistBack[neighborLabel][idx]; - if (distFromCandidate > maxBackDistWithLabelInPattern) { - neighborNodes.splice(i5, 1); - continue; - } - } - var ndsToCandidate = ndsDist[key] ? ndsDist[key] : getNDSDist3(graphData, candidate, neighborNode, nodeMap, distToCandidate, kNeighborUnits, dsG, nodeLabelProp, edgeLabelProp, ndsDist, intGMap); - var patternKey = "".concat(beginPNode.id, "-").concat(neighborLabel); - var minNdsWithLabelInPattern = patternNDSDistMap[patternKey][patternNDSDistMap[patternKey].length - 1]; - if (ndsToCandidate < minNdsWithLabelInPattern) { - neighborNodes.splice(i5, 1); - continue; - } - var _a7 = stashPatternNodeLabelDegreeMap3(minPatternNodeLabelDegreeMap, neighborLabel, patternNodeMap, patternNodeLabelMap), minPatternNodeLabelDegree = _a7.minPatternNodeLabelDegree, minPatternNodeLabelInDegree = _a7.minPatternNodeLabelInDegree, minPatternNodeLabelOutDegree = _a7.minPatternNodeLabelOutDegree; - if (nodeMap[neighborNode.id].degree < minPatternNodeLabelDegree) { - neighborNodes.splice(i5, 1); - continue; - } - } - if (!unmatched) { - candidateGraphs.push({ - nodes: [candidate].concat(neighborNodes) - }); - } - }); - var undirectedLengthsToBeginPNode = (0, _dijkstra.default)(pattern2, beginPNode.id, false).length; - var undirectedLengthsToBeginPNodeLabelMap = {}; - if (directed) { - Object.keys(undirectedLengthsToBeginPNode).forEach(function(nodeId) { - var nodeLabel = patternNodeMap[nodeId].node[nodeLabelProp]; - if (!undirectedLengthsToBeginPNodeLabelMap[nodeLabel]) - undirectedLengthsToBeginPNodeLabelMap[nodeLabel] = [undirectedLengthsToBeginPNode[nodeId]]; - else - undirectedLengthsToBeginPNodeLabelMap[nodeLabel].push(undirectedLengthsToBeginPNode[nodeId]); - }); - Object.keys(undirectedLengthsToBeginPNodeLabelMap).forEach(function(pLabel) { - undirectedLengthsToBeginPNodeLabelMap[pLabel].sort(function(a4, b10) { - return a4 - b10; - }); - }); - } else { - undirectedLengthsToBeginPNodeLabelMap = patternSpDist; - } - var candidateGraphNum = candidateGraphs.length; - var _loop_2 = function _loop_22(i5) { - var candidateGraph = candidateGraphs[i5]; - var candidate = candidateGraph.nodes[0]; - var candidateNodeLabelCountMap = {}; - var candidateNodeMap = {}; - candidateGraph.nodes.forEach(function(node, q3) { - candidateNodeMap[node.id] = { - idx: q3, - node, - degree: 0, - inDegree: 0, - outDegree: 0 - }; - var cNodeLabel2 = node[nodeLabelProp]; - if (!candidateNodeLabelCountMap[cNodeLabel2]) - candidateNodeLabelCountMap[cNodeLabel2] = 1; - else - candidateNodeLabelCountMap[cNodeLabel2]++; - }); - var candidateEdges = []; - var edgeLabelCountMap = {}; - graphData.edges.forEach(function(edge2) { - if (candidateNodeMap[edge2.source] && candidateNodeMap[edge2.target]) { - candidateEdges.push(edge2); - if (!edgeLabelCountMap[edge2[edgeLabelProp]]) - edgeLabelCountMap[edge2[edgeLabelProp]] = 1; - else - edgeLabelCountMap[edge2[edgeLabelProp]]++; - candidateNodeMap[edge2.source].degree++; - candidateNodeMap[edge2.target].degree++; - candidateNodeMap[edge2.source].outDegree++; - candidateNodeMap[edge2.target].inDegree++; - } - }); - var pattenrEdgeLabelNum = Object.keys(patternEdgeLabelMap).length; - var prunedByEdgeLabel = false; - for (var e4 = 0; e4 < pattenrEdgeLabelNum; e4++) { - var label_1 = Object.keys(patternEdgeLabelMap)[e4]; - if (!edgeLabelCountMap[label_1] || edgeLabelCountMap[label_1] < patternEdgeLabelMap[label_1].length) { - prunedByEdgeLabel = true; - break; - } - } - if (prunedByEdgeLabel) { - candidateGraphs.splice(i5, 1); - return "continue"; - } - var candidateEdgeNum = candidateEdges.length; - if (candidateEdgeNum < pattern2.edges.length) { - candidateGraphs.splice(i5, 1); - return "break"; - } - var candidateGraphInvalid = false; - var _loop_5 = function _loop_52(e6) { - var edge2 = candidateEdges[e6]; - var edgeLabel2 = edge2[edgeLabelProp]; - var patternEdgesWithLabel = patternEdgeLabelMap[edgeLabel2]; - if (!patternEdgesWithLabel || !patternEdgesWithLabel.length) { - edgeLabelCountMap[edgeLabel2]--; - if (patternEdgesWithLabel && edgeLabelCountMap[edgeLabel2] < patternEdgesWithLabel.length) { - candidateGraphInvalid = true; - return "break"; - } - candidateEdges.splice(e6, 1); - candidateNodeMap[edge2.source].degree--; - candidateNodeMap[edge2.target].degree--; - candidateNodeMap[edge2.source].outDegree--; - candidateNodeMap[edge2.target].inDegree--; - return "continue"; - } - var sourceLabel = candidateNodeMap[edge2.source].node[nodeLabelProp]; - var targetLabel = candidateNodeMap[edge2.target].node[nodeLabelProp]; - var edgeMatched = false; - patternEdgesWithLabel.forEach(function(patternEdge) { - var patternSource = patternNodeMap[patternEdge.source].node; - var patternTarget = patternNodeMap[patternEdge.target].node; - if (patternSource[nodeLabelProp] === sourceLabel && patternTarget[nodeLabelProp] === targetLabel) - edgeMatched = true; - if (!directed && patternSource[nodeLabelProp] === targetLabel && patternTarget[nodeLabelProp] === sourceLabel) - edgeMatched = true; - }); - if (!edgeMatched) { - edgeLabelCountMap[edgeLabel2]--; - if (patternEdgesWithLabel && edgeLabelCountMap[edgeLabel2] < patternEdgesWithLabel.length) { - candidateGraphInvalid = true; - return "break"; - } - candidateEdges.splice(e6, 1); - candidateNodeMap[edge2.source].degree--; - candidateNodeMap[edge2.target].degree--; - candidateNodeMap[edge2.source].outDegree--; - candidateNodeMap[edge2.target].inDegree--; - return "continue"; - } - }; - for (var e4 = candidateEdgeNum - 1; e4 >= 0; e4--) { - var state_2 = _loop_5(e4); - if (state_2 === "break") - break; - } - if (candidateGraphInvalid) { - candidateGraphs.splice(i5, 1); - return "continue"; - } - candidateGraph.edges = candidateEdges; - var lengthsToCandidate = (0, _dijkstra.default)(candidateGraph, candidateGraph.nodes[0].id, false).length; - Object.keys(lengthsToCandidate).reverse().forEach(function(targetId) { - if (targetId === candidateGraph.nodes[0].id || candidateGraphInvalid) - return; - if (lengthsToCandidate[targetId] === Infinity) { - var targetNodeLabel = candidateNodeMap[targetId].node[nodeLabelProp]; - candidateNodeLabelCountMap[targetNodeLabel]--; - if (candidateNodeLabelCountMap[targetNodeLabel] < patternNodeLabelMap[targetNodeLabel].length) { - candidateGraphInvalid = true; - return; - } - var idx = candidateGraph.nodes.indexOf(candidateNodeMap[targetId].node); - candidateGraph.nodes.splice(idx, 1); - candidateNodeMap[targetId] = void 0; - return; - } - var nLabel = nodeMap[targetId].node[nodeLabelProp]; - if (!undirectedLengthsToBeginPNodeLabelMap[nLabel] || !undirectedLengthsToBeginPNodeLabelMap[nLabel].length || lengthsToCandidate[targetId] > undirectedLengthsToBeginPNodeLabelMap[nLabel][undirectedLengthsToBeginPNodeLabelMap[nLabel].length - 1]) { - var targetNodeLabel = candidateNodeMap[targetId].node[nodeLabelProp]; - candidateNodeLabelCountMap[targetNodeLabel]--; - if (candidateNodeLabelCountMap[targetNodeLabel] < patternNodeLabelMap[targetNodeLabel].length) { - candidateGraphInvalid = true; - return; - } - var idx = candidateGraph.nodes.indexOf(candidateNodeMap[targetId].node); - candidateGraph.nodes.splice(idx, 1); - candidateNodeMap[targetId] = void 0; - } - }); - if (candidateGraphInvalid) { - candidateGraphs.splice(i5, 1); - return "continue"; - } - var degreeChanged = true; - var loopCount = 0; - while (degreeChanged && !candidateGraphInvalid) { - degreeChanged = false; - var condition = directed ? candidateNodeMap[candidate.id].degree < patternNodeMap[beginPNode.id].degree || candidateNodeMap[candidate.id].inDegree < patternNodeMap[beginPNode.id].inDegree || candidateNodeMap[candidate.id].outDegree < patternNodeMap[beginPNode.id].outDegree : candidateNodeMap[candidate.id].degree < patternNodeMap[beginPNode.id].degree; - if (condition) { - candidateGraphInvalid = true; - break; - } - if (candidateNodeLabelCountMap[candidate[nodeLabelProp]] < patternNodeLabelMap[candidate[nodeLabelProp]].length) { - candidateGraphInvalid = true; - break; - } - var currentCandidateNodeNum = candidateGraph.nodes.length; - for (var o3 = currentCandidateNodeNum - 1; o3 >= 0; o3--) { - var cgNode = candidateGraph.nodes[o3]; - var nodeDegree = candidateNodeMap[cgNode.id].degree; - var nodeInDegree = candidateNodeMap[cgNode.id].inDegree; - var nodeOutDegree = candidateNodeMap[cgNode.id].outDegree; - var cNodeLabel = cgNode[nodeLabelProp]; - var _e = stashPatternNodeLabelDegreeMap3(minPatternNodeLabelDegreeMap, cNodeLabel, patternNodeMap, patternNodeLabelMap), minPatternNodeLabelDegree = _e.minPatternNodeLabelDegree, minPatternNodeLabelInDegree = _e.minPatternNodeLabelInDegree, minPatternNodeLabelOutDegree = _e.minPatternNodeLabelOutDegree; - var deleteCondition = directed ? nodeDegree < minPatternNodeLabelDegree || nodeInDegree < minPatternNodeLabelInDegree || nodeOutDegree < minPatternNodeLabelOutDegree : nodeDegree < minPatternNodeLabelDegree; - if (deleteCondition) { - candidateNodeLabelCountMap[cgNode[nodeLabelProp]]--; - if (candidateNodeLabelCountMap[cgNode[nodeLabelProp]] < patternNodeLabelMap[cgNode[nodeLabelProp]].length) { - candidateGraphInvalid = true; - break; - } - candidateGraph.nodes.splice(o3, 1); - candidateNodeMap[cgNode.id] = void 0; - degreeChanged = true; - } - } - if (candidateGraphInvalid || !degreeChanged && loopCount !== 0) - break; - candidateEdgeNum = candidateEdges.length; - for (var y5 = candidateEdgeNum - 1; y5 >= 0; y5--) { - var cedge = candidateEdges[y5]; - if (!candidateNodeMap[cedge.source] || !candidateNodeMap[cedge.target]) { - candidateEdges.splice(y5, 1); - var edgeLabel = cedge[edgeLabelProp]; - edgeLabelCountMap[edgeLabel]--; - if (candidateNodeMap[cedge.source]) { - candidateNodeMap[cedge.source].degree--; - candidateNodeMap[cedge.source].outDegree--; - } - if (candidateNodeMap[cedge.target]) { - candidateNodeMap[cedge.target].degree--; - candidateNodeMap[cedge.target].inDegree--; - } - if (patternEdgeLabelMap[edgeLabel] && edgeLabelCountMap[edgeLabel] < patternEdgeLabelMap[edgeLabel].length) { - candidateGraphInvalid = true; - break; - } - degreeChanged = true; - } - } - loopCount++; - } - if (candidateGraphInvalid) { - candidateGraphs.splice(i5, 1); - return "continue"; - } - if (candidateGraphInvalid || candidateGraph.nodes.length < pattern2.nodes.length || candidateEdges.length < pattern2.edges.length) { - candidateGraphs.splice(i5, 1); - return "continue"; - } - }; - for (var i4 = candidateGraphNum - 1; i4 >= 0; i4--) { - var state_1 = _loop_2(i4); - if (state_1 === "break") - break; - } - var currentLength = candidateGraphs.length; - var _loop_3 = function _loop_32(i5) { - var cg1 = candidateGraphs[i5]; - var cg1EdgeMap = {}; - cg1.edges.forEach(function(edge2) { - var key = "".concat(edge2.source, "-").concat(edge2.target, "-").concat(edge2.label); - if (!cg1EdgeMap[key]) - cg1EdgeMap[key] = 1; - else - cg1EdgeMap[key]++; - }); - var _loop_6 = function _loop_62(j5) { - var cg2 = candidateGraphs[j5]; - var cg2EdgeMap = {}; - cg2.edges.forEach(function(edge2) { - var key = "".concat(edge2.source, "-").concat(edge2.target, "-").concat(edge2.label); - if (!cg2EdgeMap[key]) - cg2EdgeMap[key] = 1; - else - cg2EdgeMap[key]++; - }); - var same = true; - if (Object.keys(cg2EdgeMap).length !== Object.keys(cg1EdgeMap).length) { - same = false; - } else { - Object.keys(cg1EdgeMap).forEach(function(key) { - if (cg2EdgeMap[key] !== cg1EdgeMap[key]) - same = false; - }); - } - if (same) { - candidateGraphs.splice(j5, 1); - } - }; - for (var j4 = currentLength - 1; j4 > i5; j4--) { - _loop_6(j4); - } - currentLength = candidateGraphs.length; - }; - for (var i4 = 0; i4 <= currentLength - 1; i4++) { - _loop_3(i4); - } - return candidateGraphs; - }; - var _default2 = GADDI3; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/workers/algorithm.js -var require_algorithm = __commonJS({ - "node_modules/@antv/algorithm/lib/workers/algorithm.js"(exports) { - "use strict"; - function _typeof5(obj) { - "@babel/helpers - typeof"; - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof5 = function _typeof6(obj2) { - return typeof obj2; - }; - } else { - _typeof5 = function _typeof6(obj2) { - return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }; - } - return _typeof5(obj); - } - Object.defineProperty(exports, "__esModule", { - value: true - }); - Object.defineProperty(exports, "GADDI", { - enumerable: true, - get: function get100() { - return _gaddi.default; - } - }); - Object.defineProperty(exports, "breadthFirstSearch", { - enumerable: true, - get: function get100() { - return _bfs.default; - } - }); - Object.defineProperty(exports, "connectedComponent", { - enumerable: true, - get: function get100() { - return _connectedComponent.default; - } - }); - Object.defineProperty(exports, "depthFirstSearch", { - enumerable: true, - get: function get100() { - return _dfs.default; - } - }); - Object.defineProperty(exports, "detectCycle", { - enumerable: true, - get: function get100() { - return _detectCycle.default; - } - }); - Object.defineProperty(exports, "dijkstra", { - enumerable: true, - get: function get100() { - return _dijkstra.default; - } - }); - Object.defineProperty(exports, "findAllPath", { - enumerable: true, - get: function get100() { - return _findPath.findAllPath; - } - }); - Object.defineProperty(exports, "findShortestPath", { - enumerable: true, - get: function get100() { - return _findPath.findShortestPath; - } - }); - Object.defineProperty(exports, "floydWarshall", { - enumerable: true, - get: function get100() { - return _floydWarshall.default; - } - }); - Object.defineProperty(exports, "getAdjMatrix", { - enumerable: true, - get: function get100() { - return _adjacentMatrix.default; - } - }); - Object.defineProperty(exports, "getDegree", { - enumerable: true, - get: function get100() { - return _degree.default; - } - }); - Object.defineProperty(exports, "getInDegree", { - enumerable: true, - get: function get100() { - return _degree.getInDegree; - } - }); - Object.defineProperty(exports, "getNeighbors", { - enumerable: true, - get: function get100() { - return _util.getNeighbors; - } - }); - Object.defineProperty(exports, "getOutDegree", { - enumerable: true, - get: function get100() { - return _degree.getOutDegree; - } - }); - Object.defineProperty(exports, "labelPropagation", { - enumerable: true, - get: function get100() { - return _labelPropagation.default; - } - }); - Object.defineProperty(exports, "louvain", { - enumerable: true, - get: function get100() { - return _louvain.default; - } - }); - Object.defineProperty(exports, "minimumSpanningTree", { - enumerable: true, - get: function get100() { - return _mts.default; - } - }); - Object.defineProperty(exports, "pageRank", { - enumerable: true, - get: function get100() { - return _pageRank.default; - } - }); - var _adjacentMatrix = _interopRequireDefault(require_adjacent_matrix()); - var _bfs = _interopRequireDefault(require_bfs()); - var _connectedComponent = _interopRequireDefault(require_connected_component()); - var _degree = _interopRequireWildcard(require_degree()); - var _detectCycle = _interopRequireDefault(require_detect_cycle()); - var _dfs = _interopRequireDefault(require_dfs()); - var _dijkstra = _interopRequireDefault(require_dijkstra()); - var _findPath = require_find_path(); - var _floydWarshall = _interopRequireDefault(require_floydWarshall()); - var _labelPropagation = _interopRequireDefault(require_label_propagation()); - var _louvain = _interopRequireDefault(require_louvain()); - var _mts = _interopRequireDefault(require_mts()); - var _pageRank = _interopRequireDefault(require_pageRank()); - var _gaddi = _interopRequireDefault(require_gaddi()); - var _util = require_util(); - function _getRequireWildcardCache(nodeInterop) { - if (typeof WeakMap !== "function") - return null; - var cacheBabelInterop = new WeakMap(); - var cacheNodeInterop = new WeakMap(); - return (_getRequireWildcardCache = function _getRequireWildcardCache2(nodeInterop2) { - return nodeInterop2 ? cacheNodeInterop : cacheBabelInterop; - })(nodeInterop); - } - function _interopRequireWildcard(obj, nodeInterop) { - if (!nodeInterop && obj && obj.__esModule) { - return obj; - } - if (obj === null || _typeof5(obj) !== "object" && typeof obj !== "function") { - return { default: obj }; - } - var cache3 = _getRequireWildcardCache(nodeInterop); - if (cache3 && cache3.has(obj)) { - return cache3.get(obj); - } - var newObj = {}; - var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; - for (var key in obj) { - if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { - var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; - if (desc && (desc.get || desc.set)) { - Object.defineProperty(newObj, key, desc); - } else { - newObj[key] = obj[key]; - } - } - } - newObj.default = obj; - if (cache3) { - cache3.set(obj, newObj); - } - return newObj; - } - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - } -}); - -// node_modules/@antv/algorithm/lib/workers/index.worker.js -var require_index_worker = __commonJS({ - "node_modules/@antv/algorithm/lib/workers/index.worker.js"(exports) { - "use strict"; - function _typeof5(obj) { - "@babel/helpers - typeof"; - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof5 = function _typeof6(obj2) { - return typeof obj2; - }; - } else { - _typeof5 = function _typeof6(obj2) { - return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }; - } - return _typeof5(obj); - } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var algorithm = _interopRequireWildcard(require_algorithm()); - var _constant = require_constant2(); - function _getRequireWildcardCache(nodeInterop) { - if (typeof WeakMap !== "function") - return null; - var cacheBabelInterop = new WeakMap(); - var cacheNodeInterop = new WeakMap(); - return (_getRequireWildcardCache = function _getRequireWildcardCache2(nodeInterop2) { - return nodeInterop2 ? cacheNodeInterop : cacheBabelInterop; - })(nodeInterop); - } - function _interopRequireWildcard(obj, nodeInterop) { - if (!nodeInterop && obj && obj.__esModule) { - return obj; - } - if (obj === null || _typeof5(obj) !== "object" && typeof obj !== "function") { - return { default: obj }; - } - var cache3 = _getRequireWildcardCache(nodeInterop); - if (cache3 && cache3.has(obj)) { - return cache3.get(obj); - } - var newObj = {}; - var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; - for (var key in obj) { - if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { - var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; - if (desc && (desc.get || desc.set)) { - Object.defineProperty(newObj, key, desc); - } else { - newObj[key] = obj[key]; - } - } - } - newObj.default = obj; - if (cache3) { - cache3.set(obj, newObj); - } - return newObj; - } - var ctx3 = typeof self !== "undefined" ? self : {}; - ctx3.onmessage = function(event) { - var _a6 = event.data, _algorithmType = _a6._algorithmType, data3 = _a6.data; - if (!_algorithmType) { - return; - } - if (typeof algorithm[_algorithmType] === "function") { - var result = algorithm[_algorithmType].apply(algorithm, data3); - ctx3.postMessage({ - _algorithmType: _constant.MESSAGE.SUCCESS, - data: result - }); - return; - } - ctx3.postMessage({ - _algorithmType: _constant.MESSAGE.FAILURE - }); - }; - var _default2 = null; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/workers/createWorker.js -var require_createWorker = __commonJS({ - "node_modules/@antv/algorithm/lib/workers/createWorker.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var _constant = require_constant2(); - var _index = _interopRequireDefault(require_index_worker()); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var createWorker = function createWorker2(type2) { - return function() { - var data3 = []; - for (var _i = 0; _i < arguments.length; _i++) { - data3[_i] = arguments[_i]; - } - return new Promise(function(resolve, reject) { - var worker = new _index.default(); - worker.postMessage({ - _algorithmType: type2, - data: data3 - }); - worker.onmessage = function(event) { - var _a6 = event.data, data4 = _a6.data, _algorithmType = _a6._algorithmType; - if (_constant.MESSAGE.SUCCESS === _algorithmType) { - resolve(data4); - } else { - reject(); - } - worker.terminate(); - }; - }); - }; - }; - var _default2 = createWorker; - exports.default = _default2; - } -}); - -// node_modules/@antv/algorithm/lib/workers/index.js -var require_workers = __commonJS({ - "node_modules/@antv/algorithm/lib/workers/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.pageRankAsync = exports.minimumSpanningTreeAsync = exports.louvainAsync = exports.labelPropagationAsync = exports.getOutDegreeAsync = exports.getNeighborsAsync = exports.getInDegreeAsync = exports.getDegreeAsync = exports.getAdjMatrixAsync = exports.floydWarshallAsync = exports.findShortestPathAsync = exports.findAllPathAsync = exports.dijkstraAsync = exports.detectCycleAsync = exports.detectAllUndirectedCycleAsync = exports.detectAllDirectedCycleAsync = exports.detectAllCyclesAsync = exports.connectedComponentAsync = exports.GADDIAsync = void 0; - var _createWorker = _interopRequireDefault(require_createWorker()); - var _constant = require_constant2(); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { default: obj }; - } - var getAdjMatrixAsync = function getAdjMatrixAsync2(graphData, directed) { - return (0, _createWorker.default)(_constant.ALGORITHM.getAdjMatrix).apply(void 0, [graphData, directed]); - }; - exports.getAdjMatrixAsync = getAdjMatrixAsync; - var connectedComponentAsync = function connectedComponentAsync2(graphData, directed) { - return (0, _createWorker.default)(_constant.ALGORITHM.connectedComponent).apply(void 0, [graphData, directed]); - }; - exports.connectedComponentAsync = connectedComponentAsync; - var getDegreeAsync = function getDegreeAsync2(graphData) { - return (0, _createWorker.default)(_constant.ALGORITHM.getDegree)(graphData); - }; - exports.getDegreeAsync = getDegreeAsync; - var getInDegreeAsync = function getInDegreeAsync2(graphData, nodeId) { - return (0, _createWorker.default)(_constant.ALGORITHM.getInDegree)(graphData, nodeId); - }; - exports.getInDegreeAsync = getInDegreeAsync; - var getOutDegreeAsync = function getOutDegreeAsync2(graphData, nodeId) { - return (0, _createWorker.default)(_constant.ALGORITHM.getOutDegree)(graphData, nodeId); - }; - exports.getOutDegreeAsync = getOutDegreeAsync; - var detectCycleAsync = function detectCycleAsync2(graphData) { - return (0, _createWorker.default)(_constant.ALGORITHM.detectCycle)(graphData); - }; - exports.detectCycleAsync = detectCycleAsync; - var detectAllCyclesAsync = function detectAllCyclesAsync2(graphData) { - return (0, _createWorker.default)(_constant.ALGORITHM.detectAllCycles)(graphData); - }; - exports.detectAllCyclesAsync = detectAllCyclesAsync; - var detectAllDirectedCycleAsync = function detectAllDirectedCycleAsync2(graphData) { - return (0, _createWorker.default)(_constant.ALGORITHM.detectAllDirectedCycle)(graphData); - }; - exports.detectAllDirectedCycleAsync = detectAllDirectedCycleAsync; - var detectAllUndirectedCycleAsync = function detectAllUndirectedCycleAsync2(graphData) { - return (0, _createWorker.default)(_constant.ALGORITHM.detectAllUndirectedCycle)(graphData); - }; - exports.detectAllUndirectedCycleAsync = detectAllUndirectedCycleAsync; - var dijkstraAsync = function dijkstraAsync2(graphData, source, directed, weightPropertyName) { - return (0, _createWorker.default)(_constant.ALGORITHM.dijkstra).apply(void 0, [graphData, source, directed, weightPropertyName]); - }; - exports.dijkstraAsync = dijkstraAsync; - var findAllPathAsync = function findAllPathAsync2(graphData, start, end2, directed) { - return (0, _createWorker.default)(_constant.ALGORITHM.findAllPath).apply(void 0, [graphData, start, end2, directed]); - }; - exports.findAllPathAsync = findAllPathAsync; - var findShortestPathAsync = function findShortestPathAsync2(graphData, start, end2, directed, weightPropertyName) { - return (0, _createWorker.default)(_constant.ALGORITHM.findShortestPath).apply(void 0, [graphData, start, end2, directed, weightPropertyName]); - }; - exports.findShortestPathAsync = findShortestPathAsync; - var floydWarshallAsync = function floydWarshallAsync2(graphData, directed) { - return (0, _createWorker.default)(_constant.ALGORITHM.floydWarshall).apply(void 0, [graphData, directed]); - }; - exports.floydWarshallAsync = floydWarshallAsync; - var labelPropagationAsync = function labelPropagationAsync2(graphData, directed, weightPropertyName, maxIteration) { - if (maxIteration === void 0) { - maxIteration = 1e3; - } - return (0, _createWorker.default)(_constant.ALGORITHM.labelPropagation)(graphData, directed, weightPropertyName, maxIteration); - }; - exports.labelPropagationAsync = labelPropagationAsync; - var louvainAsync = function louvainAsync2(graphData, directed, weightPropertyName, threshold) { - return (0, _createWorker.default)(_constant.ALGORITHM.louvain)(graphData, directed, weightPropertyName, threshold); - }; - exports.louvainAsync = louvainAsync; - var minimumSpanningTreeAsync = function minimumSpanningTreeAsync2(graphData, weight, algo) { - return (0, _createWorker.default)(_constant.ALGORITHM.minimumSpanningTree).apply(void 0, [graphData, weight, algo]); - }; - exports.minimumSpanningTreeAsync = minimumSpanningTreeAsync; - var pageRankAsync = function pageRankAsync2(graphData, epsilon, linkProb) { - return (0, _createWorker.default)(_constant.ALGORITHM.pageRank).apply(void 0, [graphData, epsilon, linkProb]); - }; - exports.pageRankAsync = pageRankAsync; - var getNeighborsAsync = function getNeighborsAsync2(nodeId, edges, type2) { - return (0, _createWorker.default)(_constant.ALGORITHM.getNeighbors).apply(void 0, [nodeId, edges, type2]); - }; - exports.getNeighborsAsync = getNeighborsAsync; - var GADDIAsync = function GADDIAsync2(graphData, pattern2, directed, k4, length5, nodeLabelProp, edgeLabelProp) { - if (directed === void 0) { - directed = false; - } - if (nodeLabelProp === void 0) { - nodeLabelProp = "cluster"; - } - if (edgeLabelProp === void 0) { - edgeLabelProp = "cluster"; - } - return (0, _createWorker.default)(_constant.ALGORITHM.GADDI).apply(void 0, [graphData, pattern2, directed, k4, length5, nodeLabelProp, edgeLabelProp]); - }; - exports.GADDIAsync = GADDIAsync; - } -}); - -// node_modules/@antv/algorithm/lib/asyncIndex.js -var require_asyncIndex = __commonJS({ - "node_modules/@antv/algorithm/lib/asyncIndex.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - Object.defineProperty(exports, "GADDIAsync", { - enumerable: true, - get: function get100() { - return _index.GADDIAsync; - } - }); - Object.defineProperty(exports, "connectedComponentAsync", { - enumerable: true, - get: function get100() { - return _index.connectedComponentAsync; - } - }); - exports.default = void 0; - Object.defineProperty(exports, "detectAllCyclesAsync", { - enumerable: true, - get: function get100() { - return _index.detectAllCyclesAsync; - } - }); - Object.defineProperty(exports, "detectAllDirectedCycleAsync", { - enumerable: true, - get: function get100() { - return _index.detectAllDirectedCycleAsync; - } - }); - Object.defineProperty(exports, "detectAllUndirectedCycleAsync", { - enumerable: true, - get: function get100() { - return _index.detectAllUndirectedCycleAsync; - } - }); - Object.defineProperty(exports, "detectCycleAsync", { - enumerable: true, - get: function get100() { - return _index.detectCycleAsync; - } - }); - exports.detectDirectedCycleAsync = void 0; - Object.defineProperty(exports, "dijkstraAsync", { - enumerable: true, - get: function get100() { - return _index.dijkstraAsync; - } - }); - Object.defineProperty(exports, "findAllPathAsync", { - enumerable: true, - get: function get100() { - return _index.findAllPathAsync; - } - }); - Object.defineProperty(exports, "findShortestPathAsync", { - enumerable: true, - get: function get100() { - return _index.findShortestPathAsync; - } - }); - Object.defineProperty(exports, "floydWarshallAsync", { - enumerable: true, - get: function get100() { - return _index.floydWarshallAsync; - } - }); - Object.defineProperty(exports, "getAdjMatrixAsync", { - enumerable: true, - get: function get100() { - return _index.getAdjMatrixAsync; - } - }); - Object.defineProperty(exports, "getDegreeAsync", { - enumerable: true, - get: function get100() { - return _index.getDegreeAsync; - } - }); - Object.defineProperty(exports, "getInDegreeAsync", { - enumerable: true, - get: function get100() { - return _index.getInDegreeAsync; - } - }); - Object.defineProperty(exports, "getNeighborsAsync", { - enumerable: true, - get: function get100() { - return _index.getNeighborsAsync; - } - }); - Object.defineProperty(exports, "getOutDegreeAsync", { - enumerable: true, - get: function get100() { - return _index.getOutDegreeAsync; - } - }); - Object.defineProperty(exports, "labelPropagationAsync", { - enumerable: true, - get: function get100() { - return _index.labelPropagationAsync; - } - }); - Object.defineProperty(exports, "louvainAsync", { - enumerable: true, - get: function get100() { - return _index.louvainAsync; - } - }); - Object.defineProperty(exports, "minimumSpanningTreeAsync", { - enumerable: true, - get: function get100() { - return _index.minimumSpanningTreeAsync; - } - }); - Object.defineProperty(exports, "pageRankAsync", { - enumerable: true, - get: function get100() { - return _index.pageRankAsync; - } - }); - var _index = require_workers(); - var detectDirectedCycleAsync = _index.detectCycleAsync; - exports.detectDirectedCycleAsync = detectDirectedCycleAsync; - var _default2 = { - getAdjMatrixAsync: _index.getAdjMatrixAsync, - connectedComponentAsync: _index.connectedComponentAsync, - getDegreeAsync: _index.getDegreeAsync, - getInDegreeAsync: _index.getInDegreeAsync, - getOutDegreeAsync: _index.getOutDegreeAsync, - detectCycleAsync: _index.detectCycleAsync, - detectDirectedCycleAsync, - detectAllCyclesAsync: _index.detectAllCyclesAsync, - detectAllDirectedCycleAsync: _index.detectAllDirectedCycleAsync, - detectAllUndirectedCycleAsync: _index.detectAllUndirectedCycleAsync, - dijkstraAsync: _index.dijkstraAsync, - findAllPathAsync: _index.findAllPathAsync, - findShortestPathAsync: _index.findShortestPathAsync, - floydWarshallAsync: _index.floydWarshallAsync, - labelPropagationAsync: _index.labelPropagationAsync, - louvainAsync: _index.louvainAsync, - minimumSpanningTreeAsync: _index.minimumSpanningTreeAsync, - pageRankAsync: _index.pageRankAsync, - getNeighborsAsync: _index.getNeighborsAsync, - GADDIAsync: _index.GADDIAsync - }; - exports.default = _default2; - } -}); - -// node_modules/color-name/index.js -var require_color_name = __commonJS({ - "node_modules/color-name/index.js"(exports, module2) { - "use strict"; - module2.exports = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] - }; - } -}); - -// node_modules/is-arrayish/index.js -var require_is_arrayish = __commonJS({ - "node_modules/is-arrayish/index.js"(exports, module2) { - module2.exports = function isArrayish(obj) { - if (!obj || typeof obj === "string") { - return false; - } - return obj instanceof Array || Array.isArray(obj) || obj.length >= 0 && (obj.splice instanceof Function || Object.getOwnPropertyDescriptor(obj, obj.length - 1) && obj.constructor.name !== "String"); - }; - } -}); - -// node_modules/simple-swizzle/index.js -var require_simple_swizzle = __commonJS({ - "node_modules/simple-swizzle/index.js"(exports, module2) { - "use strict"; - var isArrayish = require_is_arrayish(); - var concat = Array.prototype.concat; - var slice = Array.prototype.slice; - var swizzle = module2.exports = function swizzle2(args) { - var results = []; - for (var i4 = 0, len5 = args.length; i4 < len5; i4++) { - var arg = args[i4]; - if (isArrayish(arg)) { - results = concat.call(results, slice.call(arg)); - } else { - results.push(arg); - } - } - return results; - }; - swizzle.wrap = function(fn) { - return function() { - return fn(swizzle(arguments)); - }; - }; - } -}); - -// node_modules/color-string/index.js -var require_color_string = __commonJS({ - "node_modules/color-string/index.js"(exports, module2) { - var colorNames = require_color_name(); - var swizzle = require_simple_swizzle(); - var hasOwnProperty = Object.hasOwnProperty; - var reverseNames = {}; - for (name in colorNames) { - if (hasOwnProperty.call(colorNames, name)) { - reverseNames[colorNames[name]] = name; - } - } - var name; - var cs = module2.exports = { - to: {}, - get: {} - }; - cs.get = function(string) { - var prefix2 = string.substring(0, 3).toLowerCase(); - var val; - var model; - switch (prefix2) { - case "hsl": - val = cs.get.hsl(string); - model = "hsl"; - break; - case "hwb": - val = cs.get.hwb(string); - model = "hwb"; - break; - default: - val = cs.get.rgb(string); - model = "rgb"; - break; - } - if (!val) { - return null; - } - return { model, value: val }; - }; - cs.get.rgb = function(string) { - if (!string) { - return null; - } - var abbr = /^#([a-f0-9]{3,4})$/i; - var hex2 = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; - var rgba2 = /^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/; - var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/; - var keyword = /^(\w+)$/; - var rgb2 = [0, 0, 0, 1]; - var match; - var i4; - var hexAlpha; - if (match = string.match(hex2)) { - hexAlpha = match[2]; - match = match[1]; - for (i4 = 0; i4 < 3; i4++) { - var i22 = i4 * 2; - rgb2[i4] = parseInt(match.slice(i22, i22 + 2), 16); - } - if (hexAlpha) { - rgb2[3] = parseInt(hexAlpha, 16) / 255; - } - } else if (match = string.match(abbr)) { - match = match[1]; - hexAlpha = match[3]; - for (i4 = 0; i4 < 3; i4++) { - rgb2[i4] = parseInt(match[i4] + match[i4], 16); - } - if (hexAlpha) { - rgb2[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; - } - } else if (match = string.match(rgba2)) { - for (i4 = 0; i4 < 3; i4++) { - rgb2[i4] = parseInt(match[i4 + 1], 0); - } - if (match[4]) { - if (match[5]) { - rgb2[3] = parseFloat(match[4]) * 0.01; - } else { - rgb2[3] = parseFloat(match[4]); - } - } - } else if (match = string.match(per)) { - for (i4 = 0; i4 < 3; i4++) { - rgb2[i4] = Math.round(parseFloat(match[i4 + 1]) * 2.55); - } - if (match[4]) { - if (match[5]) { - rgb2[3] = parseFloat(match[4]) * 0.01; - } else { - rgb2[3] = parseFloat(match[4]); - } - } - } else if (match = string.match(keyword)) { - if (match[1] === "transparent") { - return [0, 0, 0, 0]; - } - if (!hasOwnProperty.call(colorNames, match[1])) { - return null; - } - rgb2 = colorNames[match[1]]; - rgb2[3] = 1; - return rgb2; - } else { - return null; - } - for (i4 = 0; i4 < 3; i4++) { - rgb2[i4] = clamp12(rgb2[i4], 0, 255); - } - rgb2[3] = clamp12(rgb2[3], 0, 1); - return rgb2; - }; - cs.get.hsl = function(string) { - if (!string) { - return null; - } - var hsl2 = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; - var match = string.match(hsl2); - if (match) { - var alpha = parseFloat(match[4]); - var h3 = (parseFloat(match[1]) % 360 + 360) % 360; - var s4 = clamp12(parseFloat(match[2]), 0, 100); - var l4 = clamp12(parseFloat(match[3]), 0, 100); - var a4 = clamp12(isNaN(alpha) ? 1 : alpha, 0, 1); - return [h3, s4, l4, a4]; - } - return null; - }; - cs.get.hwb = function(string) { - if (!string) { - return null; - } - var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/; - var match = string.match(hwb); - if (match) { - var alpha = parseFloat(match[4]); - var h3 = (parseFloat(match[1]) % 360 + 360) % 360; - var w4 = clamp12(parseFloat(match[2]), 0, 100); - var b10 = clamp12(parseFloat(match[3]), 0, 100); - var a4 = clamp12(isNaN(alpha) ? 1 : alpha, 0, 1); - return [h3, w4, b10, a4]; - } - return null; - }; - cs.to.hex = function() { - var rgba2 = swizzle(arguments); - return "#" + hexDouble(rgba2[0]) + hexDouble(rgba2[1]) + hexDouble(rgba2[2]) + (rgba2[3] < 1 ? hexDouble(Math.round(rgba2[3] * 255)) : ""); - }; - cs.to.rgb = function() { - var rgba2 = swizzle(arguments); - return rgba2.length < 4 || rgba2[3] === 1 ? "rgb(" + Math.round(rgba2[0]) + ", " + Math.round(rgba2[1]) + ", " + Math.round(rgba2[2]) + ")" : "rgba(" + Math.round(rgba2[0]) + ", " + Math.round(rgba2[1]) + ", " + Math.round(rgba2[2]) + ", " + rgba2[3] + ")"; - }; - cs.to.rgb.percent = function() { - var rgba2 = swizzle(arguments); - var r4 = Math.round(rgba2[0] / 255 * 100); - var g4 = Math.round(rgba2[1] / 255 * 100); - var b10 = Math.round(rgba2[2] / 255 * 100); - return rgba2.length < 4 || rgba2[3] === 1 ? "rgb(" + r4 + "%, " + g4 + "%, " + b10 + "%)" : "rgba(" + r4 + "%, " + g4 + "%, " + b10 + "%, " + rgba2[3] + ")"; - }; - cs.to.hsl = function() { - var hsla2 = swizzle(arguments); - return hsla2.length < 4 || hsla2[3] === 1 ? "hsl(" + hsla2[0] + ", " + hsla2[1] + "%, " + hsla2[2] + "%)" : "hsla(" + hsla2[0] + ", " + hsla2[1] + "%, " + hsla2[2] + "%, " + hsla2[3] + ")"; - }; - cs.to.hwb = function() { - var hwba = swizzle(arguments); - var a4 = ""; - if (hwba.length >= 4 && hwba[3] !== 1) { - a4 = ", " + hwba[3]; - } - return "hwb(" + hwba[0] + ", " + hwba[1] + "%, " + hwba[2] + "%" + a4 + ")"; - }; - cs.to.keyword = function(rgb2) { - return reverseNames[rgb2.slice(0, 3)]; - }; - function clamp12(num, min13, max15) { - return Math.min(Math.max(min13, num), max15); - } - function hexDouble(num) { - var str8 = Math.round(num).toString(16).toUpperCase(); - return str8.length < 2 ? "0" + str8 : str8; - } - } -}); - -// node_modules/color-convert/conversions.js -var require_conversions = __commonJS({ - "node_modules/color-convert/conversions.js"(exports, module2) { - var cssKeywords = require_color_name(); - var reverseKeywords = {}; - for (key in cssKeywords) { - if (cssKeywords.hasOwnProperty(key)) { - reverseKeywords[cssKeywords[key]] = key; - } - } - var key; - var convert = module2.exports = { - rgb: { channels: 3, labels: "rgb" }, - hsl: { channels: 3, labels: "hsl" }, - hsv: { channels: 3, labels: "hsv" }, - hwb: { channels: 3, labels: "hwb" }, - cmyk: { channels: 4, labels: "cmyk" }, - xyz: { channels: 3, labels: "xyz" }, - lab: { channels: 3, labels: "lab" }, - lch: { channels: 3, labels: "lch" }, - hex: { channels: 1, labels: ["hex"] }, - keyword: { channels: 1, labels: ["keyword"] }, - ansi16: { channels: 1, labels: ["ansi16"] }, - ansi256: { channels: 1, labels: ["ansi256"] }, - hcg: { channels: 3, labels: ["h", "c", "g"] }, - apple: { channels: 3, labels: ["r16", "g16", "b16"] }, - gray: { channels: 1, labels: ["gray"] } - }; - for (model in convert) { - if (convert.hasOwnProperty(model)) { - if (!("channels" in convert[model])) { - throw new Error("missing channels property: " + model); - } - if (!("labels" in convert[model])) { - throw new Error("missing channel labels property: " + model); - } - if (convert[model].labels.length !== convert[model].channels) { - throw new Error("channel and label counts mismatch: " + model); - } - channels = convert[model].channels; - labels = convert[model].labels; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], "channels", { value: channels }); - Object.defineProperty(convert[model], "labels", { value: labels }); - } - } - var channels; - var labels; - var model; - convert.rgb.hsl = function(rgb2) { - var r4 = rgb2[0] / 255; - var g4 = rgb2[1] / 255; - var b10 = rgb2[2] / 255; - var min13 = Math.min(r4, g4, b10); - var max15 = Math.max(r4, g4, b10); - var delta = max15 - min13; - var h3; - var s4; - var l4; - if (max15 === min13) { - h3 = 0; - } else if (r4 === max15) { - h3 = (g4 - b10) / delta; - } else if (g4 === max15) { - h3 = 2 + (b10 - r4) / delta; - } else if (b10 === max15) { - h3 = 4 + (r4 - g4) / delta; - } - h3 = Math.min(h3 * 60, 360); - if (h3 < 0) { - h3 += 360; - } - l4 = (min13 + max15) / 2; - if (max15 === min13) { - s4 = 0; - } else if (l4 <= 0.5) { - s4 = delta / (max15 + min13); - } else { - s4 = delta / (2 - max15 - min13); - } - return [h3, s4 * 100, l4 * 100]; - }; - convert.rgb.hsv = function(rgb2) { - var rdif; - var gdif; - var bdif; - var h3; - var s4; - var r4 = rgb2[0] / 255; - var g4 = rgb2[1] / 255; - var b10 = rgb2[2] / 255; - var v3 = Math.max(r4, g4, b10); - var diff2 = v3 - Math.min(r4, g4, b10); - var diffc = function(c5) { - return (v3 - c5) / 6 / diff2 + 1 / 2; - }; - if (diff2 === 0) { - h3 = s4 = 0; - } else { - s4 = diff2 / v3; - rdif = diffc(r4); - gdif = diffc(g4); - bdif = diffc(b10); - if (r4 === v3) { - h3 = bdif - gdif; - } else if (g4 === v3) { - h3 = 1 / 3 + rdif - bdif; - } else if (b10 === v3) { - h3 = 2 / 3 + gdif - rdif; - } - if (h3 < 0) { - h3 += 1; - } else if (h3 > 1) { - h3 -= 1; - } - } - return [ - h3 * 360, - s4 * 100, - v3 * 100 - ]; - }; - convert.rgb.hwb = function(rgb2) { - var r4 = rgb2[0]; - var g4 = rgb2[1]; - var b10 = rgb2[2]; - var h3 = convert.rgb.hsl(rgb2)[0]; - var w4 = 1 / 255 * Math.min(r4, Math.min(g4, b10)); - b10 = 1 - 1 / 255 * Math.max(r4, Math.max(g4, b10)); - return [h3, w4 * 100, b10 * 100]; - }; - convert.rgb.cmyk = function(rgb2) { - var r4 = rgb2[0] / 255; - var g4 = rgb2[1] / 255; - var b10 = rgb2[2] / 255; - var c5; - var m4; - var y5; - var k4; - k4 = Math.min(1 - r4, 1 - g4, 1 - b10); - c5 = (1 - r4 - k4) / (1 - k4) || 0; - m4 = (1 - g4 - k4) / (1 - k4) || 0; - y5 = (1 - b10 - k4) / (1 - k4) || 0; - return [c5 * 100, m4 * 100, y5 * 100, k4 * 100]; - }; - function comparativeDistance(x6, y5) { - return Math.pow(x6[0] - y5[0], 2) + Math.pow(x6[1] - y5[1], 2) + Math.pow(x6[2] - y5[2], 2); - } - convert.rgb.keyword = function(rgb2) { - var reversed = reverseKeywords[rgb2]; - if (reversed) { - return reversed; - } - var currentClosestDistance = Infinity; - var currentClosestKeyword; - for (var keyword in cssKeywords) { - if (cssKeywords.hasOwnProperty(keyword)) { - var value2 = cssKeywords[keyword]; - var distance15 = comparativeDistance(rgb2, value2); - if (distance15 < currentClosestDistance) { - currentClosestDistance = distance15; - currentClosestKeyword = keyword; - } - } - } - return currentClosestKeyword; - }; - convert.keyword.rgb = function(keyword) { - return cssKeywords[keyword]; - }; - convert.rgb.xyz = function(rgb2) { - var r4 = rgb2[0] / 255; - var g4 = rgb2[1] / 255; - var b10 = rgb2[2] / 255; - r4 = r4 > 0.04045 ? Math.pow((r4 + 0.055) / 1.055, 2.4) : r4 / 12.92; - g4 = g4 > 0.04045 ? Math.pow((g4 + 0.055) / 1.055, 2.4) : g4 / 12.92; - b10 = b10 > 0.04045 ? Math.pow((b10 + 0.055) / 1.055, 2.4) : b10 / 12.92; - var x6 = r4 * 0.4124 + g4 * 0.3576 + b10 * 0.1805; - var y5 = r4 * 0.2126 + g4 * 0.7152 + b10 * 0.0722; - var z3 = r4 * 0.0193 + g4 * 0.1192 + b10 * 0.9505; - return [x6 * 100, y5 * 100, z3 * 100]; - }; - convert.rgb.lab = function(rgb2) { - var xyz = convert.rgb.xyz(rgb2); - var x6 = xyz[0]; - var y5 = xyz[1]; - var z3 = xyz[2]; - var l4; - var a4; - var b10; - x6 /= 95.047; - y5 /= 100; - z3 /= 108.883; - x6 = x6 > 8856e-6 ? Math.pow(x6, 1 / 3) : 7.787 * x6 + 16 / 116; - y5 = y5 > 8856e-6 ? Math.pow(y5, 1 / 3) : 7.787 * y5 + 16 / 116; - z3 = z3 > 8856e-6 ? Math.pow(z3, 1 / 3) : 7.787 * z3 + 16 / 116; - l4 = 116 * y5 - 16; - a4 = 500 * (x6 - y5); - b10 = 200 * (y5 - z3); - return [l4, a4, b10]; - }; - convert.hsl.rgb = function(hsl2) { - var h3 = hsl2[0] / 360; - var s4 = hsl2[1] / 100; - var l4 = hsl2[2] / 100; - var t1; - var t22; - var t32; - var rgb2; - var val; - if (s4 === 0) { - val = l4 * 255; - return [val, val, val]; - } - if (l4 < 0.5) { - t22 = l4 * (1 + s4); - } else { - t22 = l4 + s4 - l4 * s4; - } - t1 = 2 * l4 - t22; - rgb2 = [0, 0, 0]; - for (var i4 = 0; i4 < 3; i4++) { - t32 = h3 + 1 / 3 * -(i4 - 1); - if (t32 < 0) { - t32++; - } - if (t32 > 1) { - t32--; - } - if (6 * t32 < 1) { - val = t1 + (t22 - t1) * 6 * t32; - } else if (2 * t32 < 1) { - val = t22; - } else if (3 * t32 < 2) { - val = t1 + (t22 - t1) * (2 / 3 - t32) * 6; - } else { - val = t1; - } - rgb2[i4] = val * 255; - } - return rgb2; - }; - convert.hsl.hsv = function(hsl2) { - var h3 = hsl2[0]; - var s4 = hsl2[1] / 100; - var l4 = hsl2[2] / 100; - var smin = s4; - var lmin = Math.max(l4, 0.01); - var sv; - var v3; - l4 *= 2; - s4 *= l4 <= 1 ? l4 : 2 - l4; - smin *= lmin <= 1 ? lmin : 2 - lmin; - v3 = (l4 + s4) / 2; - sv = l4 === 0 ? 2 * smin / (lmin + smin) : 2 * s4 / (l4 + s4); - return [h3, sv * 100, v3 * 100]; - }; - convert.hsv.rgb = function(hsv) { - var h3 = hsv[0] / 60; - var s4 = hsv[1] / 100; - var v3 = hsv[2] / 100; - var hi = Math.floor(h3) % 6; - var f3 = h3 - Math.floor(h3); - var p4 = 255 * v3 * (1 - s4); - var q3 = 255 * v3 * (1 - s4 * f3); - var t4 = 255 * v3 * (1 - s4 * (1 - f3)); - v3 *= 255; - switch (hi) { - case 0: - return [v3, t4, p4]; - case 1: - return [q3, v3, p4]; - case 2: - return [p4, v3, t4]; - case 3: - return [p4, q3, v3]; - case 4: - return [t4, p4, v3]; - case 5: - return [v3, p4, q3]; - } - }; - convert.hsv.hsl = function(hsv) { - var h3 = hsv[0]; - var s4 = hsv[1] / 100; - var v3 = hsv[2] / 100; - var vmin = Math.max(v3, 0.01); - var lmin; - var sl; - var l4; - l4 = (2 - s4) * v3; - lmin = (2 - s4) * vmin; - sl = s4 * vmin; - sl /= lmin <= 1 ? lmin : 2 - lmin; - sl = sl || 0; - l4 /= 2; - return [h3, sl * 100, l4 * 100]; - }; - convert.hwb.rgb = function(hwb) { - var h3 = hwb[0] / 360; - var wh = hwb[1] / 100; - var bl = hwb[2] / 100; - var ratio = wh + bl; - var i4; - var v3; - var f3; - var n3; - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - i4 = Math.floor(6 * h3); - v3 = 1 - bl; - f3 = 6 * h3 - i4; - if ((i4 & 1) !== 0) { - f3 = 1 - f3; - } - n3 = wh + f3 * (v3 - wh); - var r4; - var g4; - var b10; - switch (i4) { - default: - case 6: - case 0: - r4 = v3; - g4 = n3; - b10 = wh; - break; - case 1: - r4 = n3; - g4 = v3; - b10 = wh; - break; - case 2: - r4 = wh; - g4 = v3; - b10 = n3; - break; - case 3: - r4 = wh; - g4 = n3; - b10 = v3; - break; - case 4: - r4 = n3; - g4 = wh; - b10 = v3; - break; - case 5: - r4 = v3; - g4 = wh; - b10 = n3; - break; - } - return [r4 * 255, g4 * 255, b10 * 255]; - }; - convert.cmyk.rgb = function(cmyk) { - var c5 = cmyk[0] / 100; - var m4 = cmyk[1] / 100; - var y5 = cmyk[2] / 100; - var k4 = cmyk[3] / 100; - var r4; - var g4; - var b10; - r4 = 1 - Math.min(1, c5 * (1 - k4) + k4); - g4 = 1 - Math.min(1, m4 * (1 - k4) + k4); - b10 = 1 - Math.min(1, y5 * (1 - k4) + k4); - return [r4 * 255, g4 * 255, b10 * 255]; - }; - convert.xyz.rgb = function(xyz) { - var x6 = xyz[0] / 100; - var y5 = xyz[1] / 100; - var z3 = xyz[2] / 100; - var r4; - var g4; - var b10; - r4 = x6 * 3.2406 + y5 * -1.5372 + z3 * -0.4986; - g4 = x6 * -0.9689 + y5 * 1.8758 + z3 * 0.0415; - b10 = x6 * 0.0557 + y5 * -0.204 + z3 * 1.057; - r4 = r4 > 31308e-7 ? 1.055 * Math.pow(r4, 1 / 2.4) - 0.055 : r4 * 12.92; - g4 = g4 > 31308e-7 ? 1.055 * Math.pow(g4, 1 / 2.4) - 0.055 : g4 * 12.92; - b10 = b10 > 31308e-7 ? 1.055 * Math.pow(b10, 1 / 2.4) - 0.055 : b10 * 12.92; - r4 = Math.min(Math.max(0, r4), 1); - g4 = Math.min(Math.max(0, g4), 1); - b10 = Math.min(Math.max(0, b10), 1); - return [r4 * 255, g4 * 255, b10 * 255]; - }; - convert.xyz.lab = function(xyz) { - var x6 = xyz[0]; - var y5 = xyz[1]; - var z3 = xyz[2]; - var l4; - var a4; - var b10; - x6 /= 95.047; - y5 /= 100; - z3 /= 108.883; - x6 = x6 > 8856e-6 ? Math.pow(x6, 1 / 3) : 7.787 * x6 + 16 / 116; - y5 = y5 > 8856e-6 ? Math.pow(y5, 1 / 3) : 7.787 * y5 + 16 / 116; - z3 = z3 > 8856e-6 ? Math.pow(z3, 1 / 3) : 7.787 * z3 + 16 / 116; - l4 = 116 * y5 - 16; - a4 = 500 * (x6 - y5); - b10 = 200 * (y5 - z3); - return [l4, a4, b10]; - }; - convert.lab.xyz = function(lab) { - var l4 = lab[0]; - var a4 = lab[1]; - var b10 = lab[2]; - var x6; - var y5; - var z3; - y5 = (l4 + 16) / 116; - x6 = a4 / 500 + y5; - z3 = y5 - b10 / 200; - var y22 = Math.pow(y5, 3); - var x22 = Math.pow(x6, 3); - var z22 = Math.pow(z3, 3); - y5 = y22 > 8856e-6 ? y22 : (y5 - 16 / 116) / 7.787; - x6 = x22 > 8856e-6 ? x22 : (x6 - 16 / 116) / 7.787; - z3 = z22 > 8856e-6 ? z22 : (z3 - 16 / 116) / 7.787; - x6 *= 95.047; - y5 *= 100; - z3 *= 108.883; - return [x6, y5, z3]; - }; - convert.lab.lch = function(lab) { - var l4 = lab[0]; - var a4 = lab[1]; - var b10 = lab[2]; - var hr; - var h3; - var c5; - hr = Math.atan2(b10, a4); - h3 = hr * 360 / 2 / Math.PI; - if (h3 < 0) { - h3 += 360; - } - c5 = Math.sqrt(a4 * a4 + b10 * b10); - return [l4, c5, h3]; - }; - convert.lch.lab = function(lch) { - var l4 = lch[0]; - var c5 = lch[1]; - var h3 = lch[2]; - var a4; - var b10; - var hr; - hr = h3 / 360 * 2 * Math.PI; - a4 = c5 * Math.cos(hr); - b10 = c5 * Math.sin(hr); - return [l4, a4, b10]; - }; - convert.rgb.ansi16 = function(args) { - var r4 = args[0]; - var g4 = args[1]; - var b10 = args[2]; - var value2 = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; - value2 = Math.round(value2 / 50); - if (value2 === 0) { - return 30; - } - var ansi = 30 + (Math.round(b10 / 255) << 2 | Math.round(g4 / 255) << 1 | Math.round(r4 / 255)); - if (value2 === 2) { - ansi += 60; - } - return ansi; - }; - convert.hsv.ansi16 = function(args) { - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); - }; - convert.rgb.ansi256 = function(args) { - var r4 = args[0]; - var g4 = args[1]; - var b10 = args[2]; - if (r4 === g4 && g4 === b10) { - if (r4 < 8) { - return 16; - } - if (r4 > 248) { - return 231; - } - return Math.round((r4 - 8) / 247 * 24) + 232; - } - var ansi = 16 + 36 * Math.round(r4 / 255 * 5) + 6 * Math.round(g4 / 255 * 5) + Math.round(b10 / 255 * 5); - return ansi; - }; - convert.ansi16.rgb = function(args) { - var color4 = args % 10; - if (color4 === 0 || color4 === 7) { - if (args > 50) { - color4 += 3.5; - } - color4 = color4 / 10.5 * 255; - return [color4, color4, color4]; - } - var mult = (~~(args > 50) + 1) * 0.5; - var r4 = (color4 & 1) * mult * 255; - var g4 = (color4 >> 1 & 1) * mult * 255; - var b10 = (color4 >> 2 & 1) * mult * 255; - return [r4, g4, b10]; - }; - convert.ansi256.rgb = function(args) { - if (args >= 232) { - var c5 = (args - 232) * 10 + 8; - return [c5, c5, c5]; - } - args -= 16; - var rem; - var r4 = Math.floor(args / 36) / 5 * 255; - var g4 = Math.floor((rem = args % 36) / 6) / 5 * 255; - var b10 = rem % 6 / 5 * 255; - return [r4, g4, b10]; - }; - convert.rgb.hex = function(args) { - var integer = ((Math.round(args[0]) & 255) << 16) + ((Math.round(args[1]) & 255) << 8) + (Math.round(args[2]) & 255); - var string = integer.toString(16).toUpperCase(); - return "000000".substring(string.length) + string; - }; - convert.hex.rgb = function(args) { - var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - var colorString = match[0]; - if (match[0].length === 3) { - colorString = colorString.split("").map(function(char) { - return char + char; - }).join(""); - } - var integer = parseInt(colorString, 16); - var r4 = integer >> 16 & 255; - var g4 = integer >> 8 & 255; - var b10 = integer & 255; - return [r4, g4, b10]; - }; - convert.rgb.hcg = function(rgb2) { - var r4 = rgb2[0] / 255; - var g4 = rgb2[1] / 255; - var b10 = rgb2[2] / 255; - var max15 = Math.max(Math.max(r4, g4), b10); - var min13 = Math.min(Math.min(r4, g4), b10); - var chroma = max15 - min13; - var grayscale; - var hue; - if (chroma < 1) { - grayscale = min13 / (1 - chroma); - } else { - grayscale = 0; - } - if (chroma <= 0) { - hue = 0; - } else if (max15 === r4) { - hue = (g4 - b10) / chroma % 6; - } else if (max15 === g4) { - hue = 2 + (b10 - r4) / chroma; - } else { - hue = 4 + (r4 - g4) / chroma + 4; - } - hue /= 6; - hue %= 1; - return [hue * 360, chroma * 100, grayscale * 100]; - }; - convert.hsl.hcg = function(hsl2) { - var s4 = hsl2[1] / 100; - var l4 = hsl2[2] / 100; - var c5 = 1; - var f3 = 0; - if (l4 < 0.5) { - c5 = 2 * s4 * l4; - } else { - c5 = 2 * s4 * (1 - l4); - } - if (c5 < 1) { - f3 = (l4 - 0.5 * c5) / (1 - c5); - } - return [hsl2[0], c5 * 100, f3 * 100]; - }; - convert.hsv.hcg = function(hsv) { - var s4 = hsv[1] / 100; - var v3 = hsv[2] / 100; - var c5 = s4 * v3; - var f3 = 0; - if (c5 < 1) { - f3 = (v3 - c5) / (1 - c5); - } - return [hsv[0], c5 * 100, f3 * 100]; - }; - convert.hcg.rgb = function(hcg) { - var h3 = hcg[0] / 360; - var c5 = hcg[1] / 100; - var g4 = hcg[2] / 100; - if (c5 === 0) { - return [g4 * 255, g4 * 255, g4 * 255]; - } - var pure = [0, 0, 0]; - var hi = h3 % 1 * 6; - var v3 = hi % 1; - var w4 = 1 - v3; - var mg = 0; - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; - pure[1] = v3; - pure[2] = 0; - break; - case 1: - pure[0] = w4; - pure[1] = 1; - pure[2] = 0; - break; - case 2: - pure[0] = 0; - pure[1] = 1; - pure[2] = v3; - break; - case 3: - pure[0] = 0; - pure[1] = w4; - pure[2] = 1; - break; - case 4: - pure[0] = v3; - pure[1] = 0; - pure[2] = 1; - break; - default: - pure[0] = 1; - pure[1] = 0; - pure[2] = w4; - } - mg = (1 - c5) * g4; - return [ - (c5 * pure[0] + mg) * 255, - (c5 * pure[1] + mg) * 255, - (c5 * pure[2] + mg) * 255 - ]; - }; - convert.hcg.hsv = function(hcg) { - var c5 = hcg[1] / 100; - var g4 = hcg[2] / 100; - var v3 = c5 + g4 * (1 - c5); - var f3 = 0; - if (v3 > 0) { - f3 = c5 / v3; - } - return [hcg[0], f3 * 100, v3 * 100]; - }; - convert.hcg.hsl = function(hcg) { - var c5 = hcg[1] / 100; - var g4 = hcg[2] / 100; - var l4 = g4 * (1 - c5) + 0.5 * c5; - var s4 = 0; - if (l4 > 0 && l4 < 0.5) { - s4 = c5 / (2 * l4); - } else if (l4 >= 0.5 && l4 < 1) { - s4 = c5 / (2 * (1 - l4)); - } - return [hcg[0], s4 * 100, l4 * 100]; - }; - convert.hcg.hwb = function(hcg) { - var c5 = hcg[1] / 100; - var g4 = hcg[2] / 100; - var v3 = c5 + g4 * (1 - c5); - return [hcg[0], (v3 - c5) * 100, (1 - v3) * 100]; - }; - convert.hwb.hcg = function(hwb) { - var w4 = hwb[1] / 100; - var b10 = hwb[2] / 100; - var v3 = 1 - b10; - var c5 = v3 - w4; - var g4 = 0; - if (c5 < 1) { - g4 = (v3 - c5) / (1 - c5); - } - return [hwb[0], c5 * 100, g4 * 100]; - }; - convert.apple.rgb = function(apple) { - return [apple[0] / 65535 * 255, apple[1] / 65535 * 255, apple[2] / 65535 * 255]; - }; - convert.rgb.apple = function(rgb2) { - return [rgb2[0] / 255 * 65535, rgb2[1] / 255 * 65535, rgb2[2] / 255 * 65535]; - }; - convert.gray.rgb = function(args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; - }; - convert.gray.hsl = convert.gray.hsv = function(args) { - return [0, 0, args[0]]; - }; - convert.gray.hwb = function(gray) { - return [0, 100, gray[0]]; - }; - convert.gray.cmyk = function(gray) { - return [0, 0, 0, gray[0]]; - }; - convert.gray.lab = function(gray) { - return [gray[0], 0, 0]; - }; - convert.gray.hex = function(gray) { - var val = Math.round(gray[0] / 100 * 255) & 255; - var integer = (val << 16) + (val << 8) + val; - var string = integer.toString(16).toUpperCase(); - return "000000".substring(string.length) + string; - }; - convert.rgb.gray = function(rgb2) { - var val = (rgb2[0] + rgb2[1] + rgb2[2]) / 3; - return [val / 255 * 100]; - }; - } -}); - -// node_modules/color-convert/route.js -var require_route = __commonJS({ - "node_modules/color-convert/route.js"(exports, module2) { - var conversions = require_conversions(); - function buildGraph() { - var graph = {}; - var models = Object.keys(conversions); - for (var len5 = models.length, i4 = 0; i4 < len5; i4++) { - graph[models[i4]] = { - distance: -1, - parent: null - }; - } - return graph; - } - function deriveBFS(fromModel) { - var graph = buildGraph(); - var queue = [fromModel]; - graph[fromModel].distance = 0; - while (queue.length) { - var current = queue.pop(); - var adjacents = Object.keys(conversions[current]); - for (var len5 = adjacents.length, i4 = 0; i4 < len5; i4++) { - var adjacent = adjacents[i4]; - var node = graph[adjacent]; - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - return graph; - } - function link(from, to) { - return function(args) { - return to(from(args)); - }; - } - function wrapConversion(toModel, graph) { - var path = [graph[toModel].parent, toModel]; - var fn = conversions[graph[toModel].parent][toModel]; - var cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - fn.conversion = path; - return fn; - } - module2.exports = function(fromModel) { - var graph = deriveBFS(fromModel); - var conversion = {}; - var models = Object.keys(graph); - for (var len5 = models.length, i4 = 0; i4 < len5; i4++) { - var toModel = models[i4]; - var node = graph[toModel]; - if (node.parent === null) { - continue; - } - conversion[toModel] = wrapConversion(toModel, graph); - } - return conversion; - }; - } -}); - -// node_modules/color-convert/index.js -var require_color_convert = __commonJS({ - "node_modules/color-convert/index.js"(exports, module2) { - var conversions = require_conversions(); - var route = require_route(); - var convert = {}; - var models = Object.keys(conversions); - function wrapRaw(fn) { - var wrappedFn = function(args) { - if (args === void 0 || args === null) { - return args; - } - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - return fn(args); - }; - if ("conversion" in fn) { - wrappedFn.conversion = fn.conversion; - } - return wrappedFn; - } - function wrapRounded(fn) { - var wrappedFn = function(args) { - if (args === void 0 || args === null) { - return args; - } - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - var result = fn(args); - if (typeof result === "object") { - for (var len5 = result.length, i4 = 0; i4 < len5; i4++) { - result[i4] = Math.round(result[i4]); - } - } - return result; - }; - if ("conversion" in fn) { - wrappedFn.conversion = fn.conversion; - } - return wrappedFn; - } - models.forEach(function(fromModel) { - convert[fromModel] = {}; - Object.defineProperty(convert[fromModel], "channels", { value: conversions[fromModel].channels }); - Object.defineProperty(convert[fromModel], "labels", { value: conversions[fromModel].labels }); - var routes = route(fromModel); - var routeModels = Object.keys(routes); - routeModels.forEach(function(toModel) { - var fn = routes[toModel]; - convert[fromModel][toModel] = wrapRounded(fn); - convert[fromModel][toModel].raw = wrapRaw(fn); - }); - }); - module2.exports = convert; - } -}); - -// node_modules/color/index.js -var require_color = __commonJS({ - "node_modules/color/index.js"(exports, module2) { - "use strict"; - var colorString = require_color_string(); - var convert = require_color_convert(); - var _slice = [].slice; - var skippedModels = [ - "keyword", - "gray", - "hex" - ]; - var hashedModelKeys = {}; - Object.keys(convert).forEach(function(model) { - hashedModelKeys[_slice.call(convert[model].labels).sort().join("")] = model; - }); - var limiters = {}; - function Color3(obj, model) { - if (!(this instanceof Color3)) { - return new Color3(obj, model); - } - if (model && model in skippedModels) { - model = null; - } - if (model && !(model in convert)) { - throw new Error("Unknown model: " + model); - } - var i4; - var channels; - if (obj == null) { - this.model = "rgb"; - this.color = [0, 0, 0]; - this.valpha = 1; - } else if (obj instanceof Color3) { - this.model = obj.model; - this.color = obj.color.slice(); - this.valpha = obj.valpha; - } else if (typeof obj === "string") { - var result = colorString.get(obj); - if (result === null) { - throw new Error("Unable to parse color from string: " + obj); - } - this.model = result.model; - channels = convert[this.model].channels; - this.color = result.value.slice(0, channels); - this.valpha = typeof result.value[channels] === "number" ? result.value[channels] : 1; - } else if (obj.length) { - this.model = model || "rgb"; - channels = convert[this.model].channels; - var newArr = _slice.call(obj, 0, channels); - this.color = zeroArray2(newArr, channels); - this.valpha = typeof obj[channels] === "number" ? obj[channels] : 1; - } else if (typeof obj === "number") { - obj &= 16777215; - this.model = "rgb"; - this.color = [ - obj >> 16 & 255, - obj >> 8 & 255, - obj & 255 - ]; - this.valpha = 1; - } else { - this.valpha = 1; - var keys6 = Object.keys(obj); - if ("alpha" in obj) { - keys6.splice(keys6.indexOf("alpha"), 1); - this.valpha = typeof obj.alpha === "number" ? obj.alpha : 0; - } - var hashedKeys = keys6.sort().join(""); - if (!(hashedKeys in hashedModelKeys)) { - throw new Error("Unable to parse color from object: " + JSON.stringify(obj)); - } - this.model = hashedModelKeys[hashedKeys]; - var labels = convert[this.model].labels; - var color4 = []; - for (i4 = 0; i4 < labels.length; i4++) { - color4.push(obj[labels[i4]]); - } - this.color = zeroArray2(color4); - } - if (limiters[this.model]) { - channels = convert[this.model].channels; - for (i4 = 0; i4 < channels; i4++) { - var limit = limiters[this.model][i4]; - if (limit) { - this.color[i4] = limit(this.color[i4]); - } - } - } - this.valpha = Math.max(0, Math.min(1, this.valpha)); - if (Object.freeze) { - Object.freeze(this); - } - } - Color3.prototype = { - toString: function() { - return this.string(); - }, - toJSON: function() { - return this[this.model](); - }, - string: function(places) { - var self2 = this.model in colorString.to ? this : this.rgb(); - self2 = self2.round(typeof places === "number" ? places : 1); - var args = self2.valpha === 1 ? self2.color : self2.color.concat(this.valpha); - return colorString.to[self2.model](args); - }, - percentString: function(places) { - var self2 = this.rgb().round(typeof places === "number" ? places : 1); - var args = self2.valpha === 1 ? self2.color : self2.color.concat(this.valpha); - return colorString.to.rgb.percent(args); - }, - array: function() { - return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); - }, - object: function() { - var result = {}; - var channels = convert[this.model].channels; - var labels = convert[this.model].labels; - for (var i4 = 0; i4 < channels; i4++) { - result[labels[i4]] = this.color[i4]; - } - if (this.valpha !== 1) { - result.alpha = this.valpha; - } - return result; - }, - unitArray: function() { - var rgb2 = this.rgb().color; - rgb2[0] /= 255; - rgb2[1] /= 255; - rgb2[2] /= 255; - if (this.valpha !== 1) { - rgb2.push(this.valpha); - } - return rgb2; - }, - unitObject: function() { - var rgb2 = this.rgb().object(); - rgb2.r /= 255; - rgb2.g /= 255; - rgb2.b /= 255; - if (this.valpha !== 1) { - rgb2.alpha = this.valpha; - } - return rgb2; - }, - round: function(places) { - places = Math.max(places || 0, 0); - return new Color3(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); - }, - alpha: function(val) { - if (arguments.length) { - return new Color3(this.color.concat(Math.max(0, Math.min(1, val))), this.model); - } - return this.valpha; - }, - red: getset("rgb", 0, maxfn(255)), - green: getset("rgb", 1, maxfn(255)), - blue: getset("rgb", 2, maxfn(255)), - hue: getset(["hsl", "hsv", "hsl", "hwb", "hcg"], 0, function(val) { - return (val % 360 + 360) % 360; - }), - saturationl: getset("hsl", 1, maxfn(100)), - lightness: getset("hsl", 2, maxfn(100)), - saturationv: getset("hsv", 1, maxfn(100)), - value: getset("hsv", 2, maxfn(100)), - chroma: getset("hcg", 1, maxfn(100)), - gray: getset("hcg", 2, maxfn(100)), - white: getset("hwb", 1, maxfn(100)), - wblack: getset("hwb", 2, maxfn(100)), - cyan: getset("cmyk", 0, maxfn(100)), - magenta: getset("cmyk", 1, maxfn(100)), - yellow: getset("cmyk", 2, maxfn(100)), - black: getset("cmyk", 3, maxfn(100)), - x: getset("xyz", 0, maxfn(100)), - y: getset("xyz", 1, maxfn(100)), - z: getset("xyz", 2, maxfn(100)), - l: getset("lab", 0, maxfn(100)), - a: getset("lab", 1), - b: getset("lab", 2), - keyword: function(val) { - if (arguments.length) { - return new Color3(val); - } - return convert[this.model].keyword(this.color); - }, - hex: function(val) { - if (arguments.length) { - return new Color3(val); - } - return colorString.to.hex(this.rgb().round().color); - }, - rgbNumber: function() { - var rgb2 = this.rgb().color; - return (rgb2[0] & 255) << 16 | (rgb2[1] & 255) << 8 | rgb2[2] & 255; - }, - luminosity: function() { - var rgb2 = this.rgb().color; - var lum = []; - for (var i4 = 0; i4 < rgb2.length; i4++) { - var chan = rgb2[i4] / 255; - lum[i4] = chan <= 0.03928 ? chan / 12.92 : Math.pow((chan + 0.055) / 1.055, 2.4); - } - return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; - }, - contrast: function(color22) { - var lum1 = this.luminosity(); - var lum2 = color22.luminosity(); - if (lum1 > lum2) { - return (lum1 + 0.05) / (lum2 + 0.05); - } - return (lum2 + 0.05) / (lum1 + 0.05); - }, - level: function(color22) { - var contrastRatio = this.contrast(color22); - if (contrastRatio >= 7.1) { - return "AAA"; - } - return contrastRatio >= 4.5 ? "AA" : ""; - }, - isDark: function() { - var rgb2 = this.rgb().color; - var yiq = (rgb2[0] * 299 + rgb2[1] * 587 + rgb2[2] * 114) / 1e3; - return yiq < 128; - }, - isLight: function() { - return !this.isDark(); - }, - negate: function() { - var rgb2 = this.rgb(); - for (var i4 = 0; i4 < 3; i4++) { - rgb2.color[i4] = 255 - rgb2.color[i4]; - } - return rgb2; - }, - lighten: function(ratio) { - var hsl2 = this.hsl(); - hsl2.color[2] += hsl2.color[2] * ratio; - return hsl2; - }, - darken: function(ratio) { - var hsl2 = this.hsl(); - hsl2.color[2] -= hsl2.color[2] * ratio; - return hsl2; - }, - saturate: function(ratio) { - var hsl2 = this.hsl(); - hsl2.color[1] += hsl2.color[1] * ratio; - return hsl2; - }, - desaturate: function(ratio) { - var hsl2 = this.hsl(); - hsl2.color[1] -= hsl2.color[1] * ratio; - return hsl2; - }, - whiten: function(ratio) { - var hwb = this.hwb(); - hwb.color[1] += hwb.color[1] * ratio; - return hwb; - }, - blacken: function(ratio) { - var hwb = this.hwb(); - hwb.color[2] += hwb.color[2] * ratio; - return hwb; - }, - grayscale: function() { - var rgb2 = this.rgb().color; - var val = rgb2[0] * 0.3 + rgb2[1] * 0.59 + rgb2[2] * 0.11; - return Color3.rgb(val, val, val); - }, - fade: function(ratio) { - return this.alpha(this.valpha - this.valpha * ratio); - }, - opaquer: function(ratio) { - return this.alpha(this.valpha + this.valpha * ratio); - }, - rotate: function(degrees) { - var hsl2 = this.hsl(); - var hue = hsl2.color[0]; - hue = (hue + degrees) % 360; - hue = hue < 0 ? 360 + hue : hue; - hsl2.color[0] = hue; - return hsl2; - }, - mix: function(mixinColor, weight) { - if (!mixinColor || !mixinColor.rgb) { - throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); - } - var color1 = mixinColor.rgb(); - var color22 = this.rgb(); - var p4 = weight === void 0 ? 0.5 : weight; - var w4 = 2 * p4 - 1; - var a4 = color1.alpha() - color22.alpha(); - var w1 = ((w4 * a4 === -1 ? w4 : (w4 + a4) / (1 + w4 * a4)) + 1) / 2; - var w22 = 1 - w1; - return Color3.rgb(w1 * color1.red() + w22 * color22.red(), w1 * color1.green() + w22 * color22.green(), w1 * color1.blue() + w22 * color22.blue(), color1.alpha() * p4 + color22.alpha() * (1 - p4)); - } - }; - Object.keys(convert).forEach(function(model) { - if (skippedModels.indexOf(model) !== -1) { - return; - } - var channels = convert[model].channels; - Color3.prototype[model] = function() { - if (this.model === model) { - return new Color3(this); - } - if (arguments.length) { - return new Color3(arguments, model); - } - var newAlpha = typeof arguments[channels] === "number" ? channels : this.valpha; - return new Color3(assertArray(convert[this.model][model].raw(this.color)).concat(newAlpha), model); - }; - Color3[model] = function(color4) { - if (typeof color4 === "number") { - color4 = zeroArray2(_slice.call(arguments), channels); - } - return new Color3(color4, model); - }; - }); - function roundTo(num, places) { - return Number(num.toFixed(places)); - } - function roundToPlace(places) { - return function(num) { - return roundTo(num, places); - }; - } - function getset(model, channel, modifier) { - model = Array.isArray(model) ? model : [model]; - model.forEach(function(m4) { - (limiters[m4] || (limiters[m4] = []))[channel] = modifier; - }); - model = model[0]; - return function(val) { - var result; - if (arguments.length) { - if (modifier) { - val = modifier(val); - } - result = this[model](); - result.color[channel] = val; - return result; - } - result = this[model]().color[channel]; - if (modifier) { - result = modifier(result); - } - return result; - }; - } - function maxfn(max15) { - return function(v3) { - return Math.max(0, Math.min(max15, v3)); - }; - } - function assertArray(val) { - return Array.isArray(val) ? val : [val]; - } - function zeroArray2(arr, length5) { - for (var i4 = 0; i4 < length5; i4++) { - if (typeof arr[i4] !== "number") { - arr[i4] = 0; - } - } - return arr; - } - module2.exports = Color3; - } -}); - -// node_modules/tinycolor2/tinycolor.js -var require_tinycolor = __commonJS({ - "node_modules/tinycolor2/tinycolor.js"(exports, module2) { - (function(Math2) { - var trimLeft = /^\s+/, trimRight = /\s+$/, tinyCounter = 0, mathRound = Math2.round, mathMin = Math2.min, mathMax = Math2.max, mathRandom = Math2.random; - function tinycolor2(color4, opts) { - color4 = color4 ? color4 : ""; - opts = opts || {}; - if (color4 instanceof tinycolor2) { - return color4; - } - if (!(this instanceof tinycolor2)) { - return new tinycolor2(color4, opts); - } - var rgb2 = inputToRGB(color4); - this._originalInput = color4, this._r = rgb2.r, this._g = rgb2.g, this._b = rgb2.b, this._a = rgb2.a, this._roundA = mathRound(100 * this._a) / 100, this._format = opts.format || rgb2.format; - this._gradientType = opts.gradientType; - if (this._r < 1) { - this._r = mathRound(this._r); - } - if (this._g < 1) { - this._g = mathRound(this._g); - } - if (this._b < 1) { - this._b = mathRound(this._b); - } - this._ok = rgb2.ok; - this._tc_id = tinyCounter++; - } - tinycolor2.prototype = { - isDark: function() { - return this.getBrightness() < 128; - }, - isLight: function() { - return !this.isDark(); - }, - isValid: function() { - return this._ok; - }, - getOriginalInput: function() { - return this._originalInput; - }, - getFormat: function() { - return this._format; - }, - getAlpha: function() { - return this._a; - }, - getBrightness: function() { - var rgb2 = this.toRgb(); - return (rgb2.r * 299 + rgb2.g * 587 + rgb2.b * 114) / 1e3; - }, - getLuminance: function() { - var rgb2 = this.toRgb(); - var RsRGB, GsRGB, BsRGB, R3, G2, B3; - RsRGB = rgb2.r / 255; - GsRGB = rgb2.g / 255; - BsRGB = rgb2.b / 255; - if (RsRGB <= 0.03928) { - R3 = RsRGB / 12.92; - } else { - R3 = Math2.pow((RsRGB + 0.055) / 1.055, 2.4); - } - if (GsRGB <= 0.03928) { - G2 = GsRGB / 12.92; - } else { - G2 = Math2.pow((GsRGB + 0.055) / 1.055, 2.4); - } - if (BsRGB <= 0.03928) { - B3 = BsRGB / 12.92; - } else { - B3 = Math2.pow((BsRGB + 0.055) / 1.055, 2.4); - } - return 0.2126 * R3 + 0.7152 * G2 + 0.0722 * B3; - }, - setAlpha: function(value2) { - this._a = boundAlpha(value2); - this._roundA = mathRound(100 * this._a) / 100; - return this; - }, - toHsv: function() { - var hsv = rgbToHsv(this._r, this._g, this._b); - return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a }; - }, - toHsvString: function() { - var hsv = rgbToHsv(this._r, this._g, this._b); - var h3 = mathRound(hsv.h * 360), s4 = mathRound(hsv.s * 100), v3 = mathRound(hsv.v * 100); - return this._a == 1 ? "hsv(" + h3 + ", " + s4 + "%, " + v3 + "%)" : "hsva(" + h3 + ", " + s4 + "%, " + v3 + "%, " + this._roundA + ")"; - }, - toHsl: function() { - var hsl2 = rgbToHsl(this._r, this._g, this._b); - return { h: hsl2.h * 360, s: hsl2.s, l: hsl2.l, a: this._a }; - }, - toHslString: function() { - var hsl2 = rgbToHsl(this._r, this._g, this._b); - var h3 = mathRound(hsl2.h * 360), s4 = mathRound(hsl2.s * 100), l4 = mathRound(hsl2.l * 100); - return this._a == 1 ? "hsl(" + h3 + ", " + s4 + "%, " + l4 + "%)" : "hsla(" + h3 + ", " + s4 + "%, " + l4 + "%, " + this._roundA + ")"; - }, - toHex: function(allow3Char) { - return rgbToHex(this._r, this._g, this._b, allow3Char); - }, - toHexString: function(allow3Char) { - return "#" + this.toHex(allow3Char); - }, - toHex8: function(allow4Char) { - return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char); - }, - toHex8String: function(allow4Char) { - return "#" + this.toHex8(allow4Char); - }, - toRgb: function() { - return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a }; - }, - toRgbString: function() { - return this._a == 1 ? "rgb(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" : "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")"; - }, - toPercentageRgb: function() { - return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a }; - }, - toPercentageRgbString: function() { - return this._a == 1 ? "rgb(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" : "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")"; - }, - toName: function() { - if (this._a === 0) { - return "transparent"; - } - if (this._a < 1) { - return false; - } - return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false; - }, - toFilter: function(secondColor) { - var hex8String = "#" + rgbaToArgbHex(this._r, this._g, this._b, this._a); - var secondHex8String = hex8String; - var gradientType = this._gradientType ? "GradientType = 1, " : ""; - if (secondColor) { - var s4 = tinycolor2(secondColor); - secondHex8String = "#" + rgbaToArgbHex(s4._r, s4._g, s4._b, s4._a); - } - return "progid:DXImageTransform.Microsoft.gradient(" + gradientType + "startColorstr=" + hex8String + ",endColorstr=" + secondHex8String + ")"; - }, - toString: function(format2) { - var formatSet = !!format2; - format2 = format2 || this._format; - var formattedString = false; - var hasAlpha = this._a < 1 && this._a >= 0; - var needsAlphaFormat = !formatSet && hasAlpha && (format2 === "hex" || format2 === "hex6" || format2 === "hex3" || format2 === "hex4" || format2 === "hex8" || format2 === "name"); - if (needsAlphaFormat) { - if (format2 === "name" && this._a === 0) { - return this.toName(); - } - return this.toRgbString(); - } - if (format2 === "rgb") { - formattedString = this.toRgbString(); - } - if (format2 === "prgb") { - formattedString = this.toPercentageRgbString(); - } - if (format2 === "hex" || format2 === "hex6") { - formattedString = this.toHexString(); - } - if (format2 === "hex3") { - formattedString = this.toHexString(true); - } - if (format2 === "hex4") { - formattedString = this.toHex8String(true); - } - if (format2 === "hex8") { - formattedString = this.toHex8String(); - } - if (format2 === "name") { - formattedString = this.toName(); - } - if (format2 === "hsl") { - formattedString = this.toHslString(); - } - if (format2 === "hsv") { - formattedString = this.toHsvString(); - } - return formattedString || this.toHexString(); - }, - clone: function() { - return tinycolor2(this.toString()); - }, - _applyModification: function(fn, args) { - var color4 = fn.apply(null, [this].concat([].slice.call(args))); - this._r = color4._r; - this._g = color4._g; - this._b = color4._b; - this.setAlpha(color4._a); - return this; - }, - lighten: function() { - return this._applyModification(lighten, arguments); - }, - brighten: function() { - return this._applyModification(brighten, arguments); - }, - darken: function() { - return this._applyModification(darken, arguments); - }, - desaturate: function() { - return this._applyModification(desaturate, arguments); - }, - saturate: function() { - return this._applyModification(saturate, arguments); - }, - greyscale: function() { - return this._applyModification(greyscale, arguments); - }, - spin: function() { - return this._applyModification(spin, arguments); - }, - _applyCombination: function(fn, args) { - return fn.apply(null, [this].concat([].slice.call(args))); - }, - analogous: function() { - return this._applyCombination(analogous, arguments); - }, - complement: function() { - return this._applyCombination(complement, arguments); - }, - monochromatic: function() { - return this._applyCombination(monochromatic, arguments); - }, - splitcomplement: function() { - return this._applyCombination(splitcomplement, arguments); - }, - triad: function() { - return this._applyCombination(triad, arguments); - }, - tetrad: function() { - return this._applyCombination(tetrad, arguments); - } - }; - tinycolor2.fromRatio = function(color4, opts) { - if (typeof color4 == "object") { - var newColor = {}; - for (var i4 in color4) { - if (color4.hasOwnProperty(i4)) { - if (i4 === "a") { - newColor[i4] = color4[i4]; - } else { - newColor[i4] = convertToPercentage(color4[i4]); - } - } - } - color4 = newColor; - } - return tinycolor2(color4, opts); - }; - function inputToRGB(color4) { - var rgb2 = { r: 0, g: 0, b: 0 }; - var a4 = 1; - var s4 = null; - var v3 = null; - var l4 = null; - var ok = false; - var format2 = false; - if (typeof color4 == "string") { - color4 = stringInputToObject(color4); - } - if (typeof color4 == "object") { - if (isValidCSSUnit(color4.r) && isValidCSSUnit(color4.g) && isValidCSSUnit(color4.b)) { - rgb2 = rgbToRgb(color4.r, color4.g, color4.b); - ok = true; - format2 = String(color4.r).substr(-1) === "%" ? "prgb" : "rgb"; - } else if (isValidCSSUnit(color4.h) && isValidCSSUnit(color4.s) && isValidCSSUnit(color4.v)) { - s4 = convertToPercentage(color4.s); - v3 = convertToPercentage(color4.v); - rgb2 = hsvToRgb(color4.h, s4, v3); - ok = true; - format2 = "hsv"; - } else if (isValidCSSUnit(color4.h) && isValidCSSUnit(color4.s) && isValidCSSUnit(color4.l)) { - s4 = convertToPercentage(color4.s); - l4 = convertToPercentage(color4.l); - rgb2 = hslToRgb(color4.h, s4, l4); - ok = true; - format2 = "hsl"; - } - if (color4.hasOwnProperty("a")) { - a4 = color4.a; - } - } - a4 = boundAlpha(a4); - return { - ok, - format: color4.format || format2, - r: mathMin(255, mathMax(rgb2.r, 0)), - g: mathMin(255, mathMax(rgb2.g, 0)), - b: mathMin(255, mathMax(rgb2.b, 0)), - a: a4 - }; - } - function rgbToRgb(r4, g4, b10) { - return { - r: bound01(r4, 255) * 255, - g: bound01(g4, 255) * 255, - b: bound01(b10, 255) * 255 - }; - } - function rgbToHsl(r4, g4, b10) { - r4 = bound01(r4, 255); - g4 = bound01(g4, 255); - b10 = bound01(b10, 255); - var max15 = mathMax(r4, g4, b10), min13 = mathMin(r4, g4, b10); - var h3, s4, l4 = (max15 + min13) / 2; - if (max15 == min13) { - h3 = s4 = 0; - } else { - var d3 = max15 - min13; - s4 = l4 > 0.5 ? d3 / (2 - max15 - min13) : d3 / (max15 + min13); - switch (max15) { - case r4: - h3 = (g4 - b10) / d3 + (g4 < b10 ? 6 : 0); - break; - case g4: - h3 = (b10 - r4) / d3 + 2; - break; - case b10: - h3 = (r4 - g4) / d3 + 4; - break; - } - h3 /= 6; - } - return { h: h3, s: s4, l: l4 }; - } - function hslToRgb(h3, s4, l4) { - var r4, g4, b10; - h3 = bound01(h3, 360); - s4 = bound01(s4, 100); - l4 = bound01(l4, 100); - function hue2rgb(p5, q4, t4) { - if (t4 < 0) - t4 += 1; - if (t4 > 1) - t4 -= 1; - if (t4 < 1 / 6) - return p5 + (q4 - p5) * 6 * t4; - if (t4 < 1 / 2) - return q4; - if (t4 < 2 / 3) - return p5 + (q4 - p5) * (2 / 3 - t4) * 6; - return p5; - } - if (s4 === 0) { - r4 = g4 = b10 = l4; - } else { - var q3 = l4 < 0.5 ? l4 * (1 + s4) : l4 + s4 - l4 * s4; - var p4 = 2 * l4 - q3; - r4 = hue2rgb(p4, q3, h3 + 1 / 3); - g4 = hue2rgb(p4, q3, h3); - b10 = hue2rgb(p4, q3, h3 - 1 / 3); - } - return { r: r4 * 255, g: g4 * 255, b: b10 * 255 }; - } - function rgbToHsv(r4, g4, b10) { - r4 = bound01(r4, 255); - g4 = bound01(g4, 255); - b10 = bound01(b10, 255); - var max15 = mathMax(r4, g4, b10), min13 = mathMin(r4, g4, b10); - var h3, s4, v3 = max15; - var d3 = max15 - min13; - s4 = max15 === 0 ? 0 : d3 / max15; - if (max15 == min13) { - h3 = 0; - } else { - switch (max15) { - case r4: - h3 = (g4 - b10) / d3 + (g4 < b10 ? 6 : 0); - break; - case g4: - h3 = (b10 - r4) / d3 + 2; - break; - case b10: - h3 = (r4 - g4) / d3 + 4; - break; - } - h3 /= 6; - } - return { h: h3, s: s4, v: v3 }; - } - function hsvToRgb(h3, s4, v3) { - h3 = bound01(h3, 360) * 6; - s4 = bound01(s4, 100); - v3 = bound01(v3, 100); - var i4 = Math2.floor(h3), f3 = h3 - i4, p4 = v3 * (1 - s4), q3 = v3 * (1 - f3 * s4), t4 = v3 * (1 - (1 - f3) * s4), mod5 = i4 % 6, r4 = [v3, q3, p4, p4, t4, v3][mod5], g4 = [t4, v3, v3, q3, p4, p4][mod5], b10 = [p4, p4, t4, v3, v3, q3][mod5]; - return { r: r4 * 255, g: g4 * 255, b: b10 * 255 }; - } - function rgbToHex(r4, g4, b10, allow3Char) { - var hex2 = [ - pad2(mathRound(r4).toString(16)), - pad2(mathRound(g4).toString(16)), - pad2(mathRound(b10).toString(16)) - ]; - if (allow3Char && hex2[0].charAt(0) == hex2[0].charAt(1) && hex2[1].charAt(0) == hex2[1].charAt(1) && hex2[2].charAt(0) == hex2[2].charAt(1)) { - return hex2[0].charAt(0) + hex2[1].charAt(0) + hex2[2].charAt(0); - } - return hex2.join(""); - } - function rgbaToHex(r4, g4, b10, a4, allow4Char) { - var hex2 = [ - pad2(mathRound(r4).toString(16)), - pad2(mathRound(g4).toString(16)), - pad2(mathRound(b10).toString(16)), - pad2(convertDecimalToHex(a4)) - ]; - if (allow4Char && hex2[0].charAt(0) == hex2[0].charAt(1) && hex2[1].charAt(0) == hex2[1].charAt(1) && hex2[2].charAt(0) == hex2[2].charAt(1) && hex2[3].charAt(0) == hex2[3].charAt(1)) { - return hex2[0].charAt(0) + hex2[1].charAt(0) + hex2[2].charAt(0) + hex2[3].charAt(0); - } - return hex2.join(""); - } - function rgbaToArgbHex(r4, g4, b10, a4) { - var hex2 = [ - pad2(convertDecimalToHex(a4)), - pad2(mathRound(r4).toString(16)), - pad2(mathRound(g4).toString(16)), - pad2(mathRound(b10).toString(16)) - ]; - return hex2.join(""); - } - tinycolor2.equals = function(color1, color22) { - if (!color1 || !color22) { - return false; - } - return tinycolor2(color1).toRgbString() == tinycolor2(color22).toRgbString(); - }; - tinycolor2.random = function() { - return tinycolor2.fromRatio({ - r: mathRandom(), - g: mathRandom(), - b: mathRandom() - }); - }; - function desaturate(color4, amount) { - amount = amount === 0 ? 0 : amount || 10; - var hsl2 = tinycolor2(color4).toHsl(); - hsl2.s -= amount / 100; - hsl2.s = clamp01(hsl2.s); - return tinycolor2(hsl2); - } - function saturate(color4, amount) { - amount = amount === 0 ? 0 : amount || 10; - var hsl2 = tinycolor2(color4).toHsl(); - hsl2.s += amount / 100; - hsl2.s = clamp01(hsl2.s); - return tinycolor2(hsl2); - } - function greyscale(color4) { - return tinycolor2(color4).desaturate(100); - } - function lighten(color4, amount) { - amount = amount === 0 ? 0 : amount || 10; - var hsl2 = tinycolor2(color4).toHsl(); - hsl2.l += amount / 100; - hsl2.l = clamp01(hsl2.l); - return tinycolor2(hsl2); - } - function brighten(color4, amount) { - amount = amount === 0 ? 0 : amount || 10; - var rgb2 = tinycolor2(color4).toRgb(); - rgb2.r = mathMax(0, mathMin(255, rgb2.r - mathRound(255 * -(amount / 100)))); - rgb2.g = mathMax(0, mathMin(255, rgb2.g - mathRound(255 * -(amount / 100)))); - rgb2.b = mathMax(0, mathMin(255, rgb2.b - mathRound(255 * -(amount / 100)))); - return tinycolor2(rgb2); - } - function darken(color4, amount) { - amount = amount === 0 ? 0 : amount || 10; - var hsl2 = tinycolor2(color4).toHsl(); - hsl2.l -= amount / 100; - hsl2.l = clamp01(hsl2.l); - return tinycolor2(hsl2); - } - function spin(color4, amount) { - var hsl2 = tinycolor2(color4).toHsl(); - var hue = (hsl2.h + amount) % 360; - hsl2.h = hue < 0 ? 360 + hue : hue; - return tinycolor2(hsl2); - } - function complement(color4) { - var hsl2 = tinycolor2(color4).toHsl(); - hsl2.h = (hsl2.h + 180) % 360; - return tinycolor2(hsl2); - } - function triad(color4) { - var hsl2 = tinycolor2(color4).toHsl(); - var h3 = hsl2.h; - return [ - tinycolor2(color4), - tinycolor2({ h: (h3 + 120) % 360, s: hsl2.s, l: hsl2.l }), - tinycolor2({ h: (h3 + 240) % 360, s: hsl2.s, l: hsl2.l }) - ]; - } - function tetrad(color4) { - var hsl2 = tinycolor2(color4).toHsl(); - var h3 = hsl2.h; - return [ - tinycolor2(color4), - tinycolor2({ h: (h3 + 90) % 360, s: hsl2.s, l: hsl2.l }), - tinycolor2({ h: (h3 + 180) % 360, s: hsl2.s, l: hsl2.l }), - tinycolor2({ h: (h3 + 270) % 360, s: hsl2.s, l: hsl2.l }) - ]; - } - function splitcomplement(color4) { - var hsl2 = tinycolor2(color4).toHsl(); - var h3 = hsl2.h; - return [ - tinycolor2(color4), - tinycolor2({ h: (h3 + 72) % 360, s: hsl2.s, l: hsl2.l }), - tinycolor2({ h: (h3 + 216) % 360, s: hsl2.s, l: hsl2.l }) - ]; - } - function analogous(color4, results, slices) { - results = results || 6; - slices = slices || 30; - var hsl2 = tinycolor2(color4).toHsl(); - var part = 360 / slices; - var ret = [tinycolor2(color4)]; - for (hsl2.h = (hsl2.h - (part * results >> 1) + 720) % 360; --results; ) { - hsl2.h = (hsl2.h + part) % 360; - ret.push(tinycolor2(hsl2)); - } - return ret; - } - function monochromatic(color4, results) { - results = results || 6; - var hsv = tinycolor2(color4).toHsv(); - var h3 = hsv.h, s4 = hsv.s, v3 = hsv.v; - var ret = []; - var modification = 1 / results; - while (results--) { - ret.push(tinycolor2({ h: h3, s: s4, v: v3 })); - v3 = (v3 + modification) % 1; - } - return ret; - } - tinycolor2.mix = function(color1, color22, amount) { - amount = amount === 0 ? 0 : amount || 50; - var rgb1 = tinycolor2(color1).toRgb(); - var rgb2 = tinycolor2(color22).toRgb(); - var p4 = amount / 100; - var rgba2 = { - r: (rgb2.r - rgb1.r) * p4 + rgb1.r, - g: (rgb2.g - rgb1.g) * p4 + rgb1.g, - b: (rgb2.b - rgb1.b) * p4 + rgb1.b, - a: (rgb2.a - rgb1.a) * p4 + rgb1.a - }; - return tinycolor2(rgba2); - }; - tinycolor2.readability = function(color1, color22) { - var c1 = tinycolor2(color1); - var c22 = tinycolor2(color22); - return (Math2.max(c1.getLuminance(), c22.getLuminance()) + 0.05) / (Math2.min(c1.getLuminance(), c22.getLuminance()) + 0.05); - }; - tinycolor2.isReadable = function(color1, color22, wcag2) { - var readability = tinycolor2.readability(color1, color22); - var wcag2Parms, out; - out = false; - wcag2Parms = validateWCAG2Parms(wcag2); - switch (wcag2Parms.level + wcag2Parms.size) { - case "AAsmall": - case "AAAlarge": - out = readability >= 4.5; - break; - case "AAlarge": - out = readability >= 3; - break; - case "AAAsmall": - out = readability >= 7; - break; - } - return out; - }; - tinycolor2.mostReadable = function(baseColor, colorList, args) { - var bestColor = null; - var bestScore = 0; - var readability; - var includeFallbackColors, level, size14; - args = args || {}; - includeFallbackColors = args.includeFallbackColors; - level = args.level; - size14 = args.size; - for (var i4 = 0; i4 < colorList.length; i4++) { - readability = tinycolor2.readability(baseColor, colorList[i4]); - if (readability > bestScore) { - bestScore = readability; - bestColor = tinycolor2(colorList[i4]); - } - } - if (tinycolor2.isReadable(baseColor, bestColor, { "level": level, "size": size14 }) || !includeFallbackColors) { - return bestColor; - } else { - args.includeFallbackColors = false; - return tinycolor2.mostReadable(baseColor, ["#fff", "#000"], args); - } - }; - var names = tinycolor2.names = { - aliceblue: "f0f8ff", - antiquewhite: "faebd7", - aqua: "0ff", - aquamarine: "7fffd4", - azure: "f0ffff", - beige: "f5f5dc", - bisque: "ffe4c4", - black: "000", - blanchedalmond: "ffebcd", - blue: "00f", - blueviolet: "8a2be2", - brown: "a52a2a", - burlywood: "deb887", - burntsienna: "ea7e5d", - cadetblue: "5f9ea0", - chartreuse: "7fff00", - chocolate: "d2691e", - coral: "ff7f50", - cornflowerblue: "6495ed", - cornsilk: "fff8dc", - crimson: "dc143c", - cyan: "0ff", - darkblue: "00008b", - darkcyan: "008b8b", - darkgoldenrod: "b8860b", - darkgray: "a9a9a9", - darkgreen: "006400", - darkgrey: "a9a9a9", - darkkhaki: "bdb76b", - darkmagenta: "8b008b", - darkolivegreen: "556b2f", - darkorange: "ff8c00", - darkorchid: "9932cc", - darkred: "8b0000", - darksalmon: "e9967a", - darkseagreen: "8fbc8f", - darkslateblue: "483d8b", - darkslategray: "2f4f4f", - darkslategrey: "2f4f4f", - darkturquoise: "00ced1", - darkviolet: "9400d3", - deeppink: "ff1493", - deepskyblue: "00bfff", - dimgray: "696969", - dimgrey: "696969", - dodgerblue: "1e90ff", - firebrick: "b22222", - floralwhite: "fffaf0", - forestgreen: "228b22", - fuchsia: "f0f", - gainsboro: "dcdcdc", - ghostwhite: "f8f8ff", - gold: "ffd700", - goldenrod: "daa520", - gray: "808080", - green: "008000", - greenyellow: "adff2f", - grey: "808080", - honeydew: "f0fff0", - hotpink: "ff69b4", - indianred: "cd5c5c", - indigo: "4b0082", - ivory: "fffff0", - khaki: "f0e68c", - lavender: "e6e6fa", - lavenderblush: "fff0f5", - lawngreen: "7cfc00", - lemonchiffon: "fffacd", - lightblue: "add8e6", - lightcoral: "f08080", - lightcyan: "e0ffff", - lightgoldenrodyellow: "fafad2", - lightgray: "d3d3d3", - lightgreen: "90ee90", - lightgrey: "d3d3d3", - lightpink: "ffb6c1", - lightsalmon: "ffa07a", - lightseagreen: "20b2aa", - lightskyblue: "87cefa", - lightslategray: "789", - lightslategrey: "789", - lightsteelblue: "b0c4de", - lightyellow: "ffffe0", - lime: "0f0", - limegreen: "32cd32", - linen: "faf0e6", - magenta: "f0f", - maroon: "800000", - mediumaquamarine: "66cdaa", - mediumblue: "0000cd", - mediumorchid: "ba55d3", - mediumpurple: "9370db", - mediumseagreen: "3cb371", - mediumslateblue: "7b68ee", - mediumspringgreen: "00fa9a", - mediumturquoise: "48d1cc", - mediumvioletred: "c71585", - midnightblue: "191970", - mintcream: "f5fffa", - mistyrose: "ffe4e1", - moccasin: "ffe4b5", - navajowhite: "ffdead", - navy: "000080", - oldlace: "fdf5e6", - olive: "808000", - olivedrab: "6b8e23", - orange: "ffa500", - orangered: "ff4500", - orchid: "da70d6", - palegoldenrod: "eee8aa", - palegreen: "98fb98", - paleturquoise: "afeeee", - palevioletred: "db7093", - papayawhip: "ffefd5", - peachpuff: "ffdab9", - peru: "cd853f", - pink: "ffc0cb", - plum: "dda0dd", - powderblue: "b0e0e6", - purple: "800080", - rebeccapurple: "663399", - red: "f00", - rosybrown: "bc8f8f", - royalblue: "4169e1", - saddlebrown: "8b4513", - salmon: "fa8072", - sandybrown: "f4a460", - seagreen: "2e8b57", - seashell: "fff5ee", - sienna: "a0522d", - silver: "c0c0c0", - skyblue: "87ceeb", - slateblue: "6a5acd", - slategray: "708090", - slategrey: "708090", - snow: "fffafa", - springgreen: "00ff7f", - steelblue: "4682b4", - tan: "d2b48c", - teal: "008080", - thistle: "d8bfd8", - tomato: "ff6347", - turquoise: "40e0d0", - violet: "ee82ee", - wheat: "f5deb3", - white: "fff", - whitesmoke: "f5f5f5", - yellow: "ff0", - yellowgreen: "9acd32" - }; - var hexNames = tinycolor2.hexNames = flip(names); - function flip(o3) { - var flipped = {}; - for (var i4 in o3) { - if (o3.hasOwnProperty(i4)) { - flipped[o3[i4]] = i4; - } - } - return flipped; - } - function boundAlpha(a4) { - a4 = parseFloat(a4); - if (isNaN(a4) || a4 < 0 || a4 > 1) { - a4 = 1; - } - return a4; - } - function bound01(n3, max15) { - if (isOnePointZero(n3)) { - n3 = "100%"; - } - var processPercent = isPercentage(n3); - n3 = mathMin(max15, mathMax(0, parseFloat(n3))); - if (processPercent) { - n3 = parseInt(n3 * max15, 10) / 100; - } - if (Math2.abs(n3 - max15) < 1e-6) { - return 1; - } - return n3 % max15 / parseFloat(max15); - } - function clamp01(val) { - return mathMin(1, mathMax(0, val)); - } - function parseIntFromHex(val) { - return parseInt(val, 16); - } - function isOnePointZero(n3) { - return typeof n3 == "string" && n3.indexOf(".") != -1 && parseFloat(n3) === 1; - } - function isPercentage(n3) { - return typeof n3 === "string" && n3.indexOf("%") != -1; - } - function pad2(c5) { - return c5.length == 1 ? "0" + c5 : "" + c5; - } - function convertToPercentage(n3) { - if (n3 <= 1) { - n3 = n3 * 100 + "%"; - } - return n3; - } - function convertDecimalToHex(d3) { - return Math2.round(parseFloat(d3) * 255).toString(16); - } - function convertHexToDecimal(h3) { - return parseIntFromHex(h3) / 255; - } - var matchers = function() { - var CSS_INTEGER = "[-\\+]?\\d+%?"; - var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; - var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; - var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; - var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; - return { - CSS_UNIT: new RegExp(CSS_UNIT), - rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), - rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), - hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), - hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), - hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), - hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), - hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, - hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, - hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, - hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ - }; - }(); - function isValidCSSUnit(color4) { - return !!matchers.CSS_UNIT.exec(color4); - } - function stringInputToObject(color4) { - color4 = color4.replace(trimLeft, "").replace(trimRight, "").toLowerCase(); - var named9 = false; - if (names[color4]) { - color4 = names[color4]; - named9 = true; - } else if (color4 == "transparent") { - return { r: 0, g: 0, b: 0, a: 0, format: "name" }; - } - var match; - if (match = matchers.rgb.exec(color4)) { - return { r: match[1], g: match[2], b: match[3] }; - } - if (match = matchers.rgba.exec(color4)) { - return { r: match[1], g: match[2], b: match[3], a: match[4] }; - } - if (match = matchers.hsl.exec(color4)) { - return { h: match[1], s: match[2], l: match[3] }; - } - if (match = matchers.hsla.exec(color4)) { - return { h: match[1], s: match[2], l: match[3], a: match[4] }; - } - if (match = matchers.hsv.exec(color4)) { - return { h: match[1], s: match[2], v: match[3] }; - } - if (match = matchers.hsva.exec(color4)) { - return { h: match[1], s: match[2], v: match[3], a: match[4] }; - } - if (match = matchers.hex8.exec(color4)) { - return { - r: parseIntFromHex(match[1]), - g: parseIntFromHex(match[2]), - b: parseIntFromHex(match[3]), - a: convertHexToDecimal(match[4]), - format: named9 ? "name" : "hex8" - }; - } - if (match = matchers.hex6.exec(color4)) { - return { - r: parseIntFromHex(match[1]), - g: parseIntFromHex(match[2]), - b: parseIntFromHex(match[3]), - format: named9 ? "name" : "hex" - }; - } - if (match = matchers.hex4.exec(color4)) { - return { - r: parseIntFromHex(match[1] + "" + match[1]), - g: parseIntFromHex(match[2] + "" + match[2]), - b: parseIntFromHex(match[3] + "" + match[3]), - a: convertHexToDecimal(match[4] + "" + match[4]), - format: named9 ? "name" : "hex8" - }; - } - if (match = matchers.hex3.exec(color4)) { - return { - r: parseIntFromHex(match[1] + "" + match[1]), - g: parseIntFromHex(match[2] + "" + match[2]), - b: parseIntFromHex(match[3] + "" + match[3]), - format: named9 ? "name" : "hex" - }; - } - return false; - } - function validateWCAG2Parms(parms) { - var level, size14; - parms = parms || { "level": "AA", "size": "small" }; - level = (parms.level || "AA").toUpperCase(); - size14 = (parms.size || "small").toLowerCase(); - if (level !== "AA" && level !== "AAA") { - level = "AA"; - } - if (size14 !== "small" && size14 !== "large") { - size14 = "small"; - } - return { "level": level, "size": size14 }; - } - if (typeof module2 !== "undefined" && module2.exports) { - module2.exports = tinycolor2; - } else if (typeof define === "function" && define.amd) { - define(function() { - return tinycolor2; - }); - } else { - window.tinycolor = tinycolor2; - } - })(Math); - } -}); - -// node_modules/lodash/lodash.js -var require_lodash = __commonJS({ - "node_modules/lodash/lodash.js"(exports, module2) { - (function() { - var undefined2; - var VERSION2 = "4.17.21"; - var LARGE_ARRAY_SIZE = 200; - var CORE_ERROR_TEXT = "Unsupported core-js use. Try https://npms.io/search?q=ponyfill.", FUNC_ERROR_TEXT = "Expected a function", INVALID_TEMPL_VAR_ERROR_TEXT = "Invalid `variable` option passed into `_.template`"; - var HASH_UNDEFINED = "__lodash_hash_undefined__"; - var MAX_MEMOIZE_SIZE = 500; - var PLACEHOLDER = "__lodash_placeholder__"; - var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4; - var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; - var WRAP_BIND_FLAG = 1, WRAP_BIND_KEY_FLAG = 2, WRAP_CURRY_BOUND_FLAG = 4, WRAP_CURRY_FLAG = 8, WRAP_CURRY_RIGHT_FLAG = 16, WRAP_PARTIAL_FLAG = 32, WRAP_PARTIAL_RIGHT_FLAG = 64, WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256, WRAP_FLIP_FLAG = 512; - var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = "..."; - var HOT_COUNT = 800, HOT_SPAN = 16; - var LAZY_FILTER_FLAG = 1, LAZY_MAP_FLAG = 2, LAZY_WHILE_FLAG = 3; - var INFINITY = 1 / 0, MAX_SAFE_INTEGER4 = 9007199254740991, MAX_INTEGER = 17976931348623157e292, NAN = 0 / 0; - var MAX_ARRAY_LENGTH = 4294967295, MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - var wrapFlags = [ - ["ary", WRAP_ARY_FLAG], - ["bind", WRAP_BIND_FLAG], - ["bindKey", WRAP_BIND_KEY_FLAG], - ["curry", WRAP_CURRY_FLAG], - ["curryRight", WRAP_CURRY_RIGHT_FLAG], - ["flip", WRAP_FLIP_FLAG], - ["partial", WRAP_PARTIAL_FLAG], - ["partialRight", WRAP_PARTIAL_RIGHT_FLAG], - ["rearg", WRAP_REARG_FLAG] - ]; - var argsTag4 = "[object Arguments]", arrayTag4 = "[object Array]", asyncTag = "[object AsyncFunction]", boolTag4 = "[object Boolean]", dateTag4 = "[object Date]", domExcTag = "[object DOMException]", errorTag4 = "[object Error]", funcTag4 = "[object Function]", genTag = "[object GeneratorFunction]", mapTag4 = "[object Map]", numberTag4 = "[object Number]", nullTag = "[object Null]", objectTag4 = "[object Object]", promiseTag = "[object Promise]", proxyTag = "[object Proxy]", regexpTag4 = "[object RegExp]", setTag5 = "[object Set]", stringTag4 = "[object String]", symbolTag = "[object Symbol]", undefinedTag = "[object Undefined]", weakMapTag4 = "[object WeakMap]", weakSetTag = "[object WeakSet]"; - var arrayBufferTag4 = "[object ArrayBuffer]", dataViewTag4 = "[object DataView]", float32Tag4 = "[object Float32Array]", float64Tag4 = "[object Float64Array]", int8Tag4 = "[object Int8Array]", int16Tag4 = "[object Int16Array]", int32Tag4 = "[object Int32Array]", uint8Tag4 = "[object Uint8Array]", uint8ClampedTag4 = "[object Uint8ClampedArray]", uint16Tag4 = "[object Uint16Array]", uint32Tag4 = "[object Uint32Array]"; - var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, reUnescapedHtml = /[&<>"']/g, reHasEscapedHtml = RegExp(reEscapedHtml.source), reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - var reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, reInterpolate = /<%=([\s\S]+?)%>/g; - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, reHasRegExpChar = RegExp(reRegExpChar.source); - var reTrimStart = /^\s+/; - var reWhitespace = /\s/; - var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, reSplitDetails = /,? & /; - var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; - var reEscapeChar = /\\(\\)?/g; - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - var reFlags = /\w*$/; - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - var reIsBinary = /^0b[01]+$/i; - var reIsHostCtor = /^\[object .+?Constructor\]$/; - var reIsOctal = /^0o[0-7]+$/i; - var reIsUint = /^(?:0|[1-9]\d*)$/; - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - var reNoMatch = /($^)/; - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsDingbatRange = "\\u2700-\\u27bf", rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff", rsMathOpRange = "\\xac\\xb1\\xd7\\xf7", rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf", rsPunctuationRange = "\\u2000-\\u206f", rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde", rsVarRange = "\\ufe0e\\ufe0f", rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - var rsApos = "['\u2019]", rsAstral = "[" + rsAstralRange + "]", rsBreak = "[" + rsBreakRange + "]", rsCombo = "[" + rsComboRange + "]", rsDigits = "\\d+", rsDingbat = "[" + rsDingbatRange + "]", rsLower = "[" + rsLowerRange + "]", rsMisc = "[^" + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsUpper = "[" + rsUpperRange + "]", rsZWJ = "\\u200d"; - var rsMiscLower = "(?:" + rsLower + "|" + rsMisc + ")", rsMiscUpper = "(?:" + rsUpper + "|" + rsMisc + ")", rsOptContrLower = "(?:" + rsApos + "(?:d|ll|m|re|s|t|ve))?", rsOptContrUpper = "(?:" + rsApos + "(?:D|LL|M|RE|S|T|VE))?", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsOrdLower = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", rsOrdUpper = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = "(?:" + [rsDingbat, rsRegional, rsSurrPair].join("|") + ")" + rsSeq, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")"; - var reApos = RegExp(rsApos, "g"); - var reComboMark = RegExp(rsCombo, "g"); - var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g"); - var reUnicodeWord = RegExp([ - rsUpper + "?" + rsLower + "+" + rsOptContrLower + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")", - rsMiscUpper + "+" + rsOptContrUpper + "(?=" + [rsBreak, rsUpper + rsMiscLower, "$"].join("|") + ")", - rsUpper + "?" + rsMiscLower + "+" + rsOptContrLower, - rsUpper + "+" + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji - ].join("|"), "g"); - var reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + "]"); - var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - var contextProps = [ - "Array", - "Buffer", - "DataView", - "Date", - "Error", - "Float32Array", - "Float64Array", - "Function", - "Int8Array", - "Int16Array", - "Int32Array", - "Map", - "Math", - "Object", - "Promise", - "RegExp", - "Set", - "String", - "Symbol", - "TypeError", - "Uint8Array", - "Uint8ClampedArray", - "Uint16Array", - "Uint32Array", - "WeakMap", - "_", - "clearTimeout", - "isFinite", - "parseInt", - "setTimeout" - ]; - var templateCounter = -1; - var typedArrayTags4 = {}; - typedArrayTags4[float32Tag4] = typedArrayTags4[float64Tag4] = typedArrayTags4[int8Tag4] = typedArrayTags4[int16Tag4] = typedArrayTags4[int32Tag4] = typedArrayTags4[uint8Tag4] = typedArrayTags4[uint8ClampedTag4] = typedArrayTags4[uint16Tag4] = typedArrayTags4[uint32Tag4] = true; - typedArrayTags4[argsTag4] = typedArrayTags4[arrayTag4] = typedArrayTags4[arrayBufferTag4] = typedArrayTags4[boolTag4] = typedArrayTags4[dataViewTag4] = typedArrayTags4[dateTag4] = typedArrayTags4[errorTag4] = typedArrayTags4[funcTag4] = typedArrayTags4[mapTag4] = typedArrayTags4[numberTag4] = typedArrayTags4[objectTag4] = typedArrayTags4[regexpTag4] = typedArrayTags4[setTag5] = typedArrayTags4[stringTag4] = typedArrayTags4[weakMapTag4] = false; - var cloneableTags = {}; - cloneableTags[argsTag4] = cloneableTags[arrayTag4] = cloneableTags[arrayBufferTag4] = cloneableTags[dataViewTag4] = cloneableTags[boolTag4] = cloneableTags[dateTag4] = cloneableTags[float32Tag4] = cloneableTags[float64Tag4] = cloneableTags[int8Tag4] = cloneableTags[int16Tag4] = cloneableTags[int32Tag4] = cloneableTags[mapTag4] = cloneableTags[numberTag4] = cloneableTags[objectTag4] = cloneableTags[regexpTag4] = cloneableTags[setTag5] = cloneableTags[stringTag4] = cloneableTags[symbolTag] = cloneableTags[uint8Tag4] = cloneableTags[uint8ClampedTag4] = cloneableTags[uint16Tag4] = cloneableTags[uint32Tag4] = true; - cloneableTags[errorTag4] = cloneableTags[funcTag4] = cloneableTags[weakMapTag4] = false; - var deburredLetters = { - "\xC0": "A", - "\xC1": "A", - "\xC2": "A", - "\xC3": "A", - "\xC4": "A", - "\xC5": "A", - "\xE0": "a", - "\xE1": "a", - "\xE2": "a", - "\xE3": "a", - "\xE4": "a", - "\xE5": "a", - "\xC7": "C", - "\xE7": "c", - "\xD0": "D", - "\xF0": "d", - "\xC8": "E", - "\xC9": "E", - "\xCA": "E", - "\xCB": "E", - "\xE8": "e", - "\xE9": "e", - "\xEA": "e", - "\xEB": "e", - "\xCC": "I", - "\xCD": "I", - "\xCE": "I", - "\xCF": "I", - "\xEC": "i", - "\xED": "i", - "\xEE": "i", - "\xEF": "i", - "\xD1": "N", - "\xF1": "n", - "\xD2": "O", - "\xD3": "O", - "\xD4": "O", - "\xD5": "O", - "\xD6": "O", - "\xD8": "O", - "\xF2": "o", - "\xF3": "o", - "\xF4": "o", - "\xF5": "o", - "\xF6": "o", - "\xF8": "o", - "\xD9": "U", - "\xDA": "U", - "\xDB": "U", - "\xDC": "U", - "\xF9": "u", - "\xFA": "u", - "\xFB": "u", - "\xFC": "u", - "\xDD": "Y", - "\xFD": "y", - "\xFF": "y", - "\xC6": "Ae", - "\xE6": "ae", - "\xDE": "Th", - "\xFE": "th", - "\xDF": "ss", - "\u0100": "A", - "\u0102": "A", - "\u0104": "A", - "\u0101": "a", - "\u0103": "a", - "\u0105": "a", - "\u0106": "C", - "\u0108": "C", - "\u010A": "C", - "\u010C": "C", - "\u0107": "c", - "\u0109": "c", - "\u010B": "c", - "\u010D": "c", - "\u010E": "D", - "\u0110": "D", - "\u010F": "d", - "\u0111": "d", - "\u0112": "E", - "\u0114": "E", - "\u0116": "E", - "\u0118": "E", - "\u011A": "E", - "\u0113": "e", - "\u0115": "e", - "\u0117": "e", - "\u0119": "e", - "\u011B": "e", - "\u011C": "G", - "\u011E": "G", - "\u0120": "G", - "\u0122": "G", - "\u011D": "g", - "\u011F": "g", - "\u0121": "g", - "\u0123": "g", - "\u0124": "H", - "\u0126": "H", - "\u0125": "h", - "\u0127": "h", - "\u0128": "I", - "\u012A": "I", - "\u012C": "I", - "\u012E": "I", - "\u0130": "I", - "\u0129": "i", - "\u012B": "i", - "\u012D": "i", - "\u012F": "i", - "\u0131": "i", - "\u0134": "J", - "\u0135": "j", - "\u0136": "K", - "\u0137": "k", - "\u0138": "k", - "\u0139": "L", - "\u013B": "L", - "\u013D": "L", - "\u013F": "L", - "\u0141": "L", - "\u013A": "l", - "\u013C": "l", - "\u013E": "l", - "\u0140": "l", - "\u0142": "l", - "\u0143": "N", - "\u0145": "N", - "\u0147": "N", - "\u014A": "N", - "\u0144": "n", - "\u0146": "n", - "\u0148": "n", - "\u014B": "n", - "\u014C": "O", - "\u014E": "O", - "\u0150": "O", - "\u014D": "o", - "\u014F": "o", - "\u0151": "o", - "\u0154": "R", - "\u0156": "R", - "\u0158": "R", - "\u0155": "r", - "\u0157": "r", - "\u0159": "r", - "\u015A": "S", - "\u015C": "S", - "\u015E": "S", - "\u0160": "S", - "\u015B": "s", - "\u015D": "s", - "\u015F": "s", - "\u0161": "s", - "\u0162": "T", - "\u0164": "T", - "\u0166": "T", - "\u0163": "t", - "\u0165": "t", - "\u0167": "t", - "\u0168": "U", - "\u016A": "U", - "\u016C": "U", - "\u016E": "U", - "\u0170": "U", - "\u0172": "U", - "\u0169": "u", - "\u016B": "u", - "\u016D": "u", - "\u016F": "u", - "\u0171": "u", - "\u0173": "u", - "\u0174": "W", - "\u0175": "w", - "\u0176": "Y", - "\u0177": "y", - "\u0178": "Y", - "\u0179": "Z", - "\u017B": "Z", - "\u017D": "Z", - "\u017A": "z", - "\u017C": "z", - "\u017E": "z", - "\u0132": "IJ", - "\u0133": "ij", - "\u0152": "Oe", - "\u0153": "oe", - "\u0149": "'n", - "\u017F": "s" - }; - var htmlEscapes = { - "&": "&", - "<": "<", - ">": ">", - '"': """, - "'": "'" - }; - var htmlUnescapes = { - "&": "&", - "<": "<", - ">": ">", - """: '"', - "'": "'" - }; - var stringEscapes = { - "\\": "\\", - "'": "'", - "\n": "n", - "\r": "r", - "\u2028": "u2028", - "\u2029": "u2029" - }; - var freeParseFloat = parseFloat, freeParseInt = parseInt; - var freeGlobal = typeof global == "object" && global && global.Object === Object && global; - var freeSelf = typeof self == "object" && self && self.Object === Object && self; - var root = freeGlobal || freeSelf || Function("return this")(); - var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; - var freeModule = freeExports && typeof module2 == "object" && module2 && !module2.nodeType && module2; - var moduleExports = freeModule && freeModule.exports === freeExports; - var freeProcess = moduleExports && freeGlobal.process; - var nodeUtil = function() { - try { - var types2 = freeModule && freeModule.require && freeModule.require("util").types; - if (types2) { - return types2; - } - return freeProcess && freeProcess.binding && freeProcess.binding("util"); - } catch (e4) { - } - }(); - var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, nodeIsDate = nodeUtil && nodeUtil.isDate, nodeIsMap = nodeUtil && nodeUtil.isMap, nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, nodeIsSet = nodeUtil && nodeUtil.isSet, nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - function apply(func, thisArg, args) { - switch (args.length) { - case 0: - return func.call(thisArg); - case 1: - return func.call(thisArg, args[0]); - case 2: - return func.call(thisArg, args[0], args[1]); - case 3: - return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - function arrayAggregator(array, setter, iteratee, accumulator) { - var index2 = -1, length5 = array == null ? 0 : array.length; - while (++index2 < length5) { - var value2 = array[index2]; - setter(accumulator, value2, iteratee(value2), array); - } - return accumulator; - } - function arrayEach(array, iteratee) { - var index2 = -1, length5 = array == null ? 0 : array.length; - while (++index2 < length5) { - if (iteratee(array[index2], index2, array) === false) { - break; - } - } - return array; - } - function arrayEachRight(array, iteratee) { - var length5 = array == null ? 0 : array.length; - while (length5--) { - if (iteratee(array[length5], length5, array) === false) { - break; - } - } - return array; - } - function arrayEvery(array, predicate) { - var index2 = -1, length5 = array == null ? 0 : array.length; - while (++index2 < length5) { - if (!predicate(array[index2], index2, array)) { - return false; - } - } - return true; - } - function arrayFilter(array, predicate) { - var index2 = -1, length5 = array == null ? 0 : array.length, resIndex = 0, result = []; - while (++index2 < length5) { - var value2 = array[index2]; - if (predicate(value2, index2, array)) { - result[resIndex++] = value2; - } - } - return result; - } - function arrayIncludes(array, value2) { - var length5 = array == null ? 0 : array.length; - return !!length5 && baseIndexOf(array, value2, 0) > -1; - } - function arrayIncludesWith(array, value2, comparator) { - var index2 = -1, length5 = array == null ? 0 : array.length; - while (++index2 < length5) { - if (comparator(value2, array[index2])) { - return true; - } - } - return false; - } - function arrayMap(array, iteratee) { - var index2 = -1, length5 = array == null ? 0 : array.length, result = Array(length5); - while (++index2 < length5) { - result[index2] = iteratee(array[index2], index2, array); - } - return result; - } - function arrayPush(array, values4) { - var index2 = -1, length5 = values4.length, offset = array.length; - while (++index2 < length5) { - array[offset + index2] = values4[index2]; - } - return array; - } - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index2 = -1, length5 = array == null ? 0 : array.length; - if (initAccum && length5) { - accumulator = array[++index2]; - } - while (++index2 < length5) { - accumulator = iteratee(accumulator, array[index2], index2, array); - } - return accumulator; - } - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length5 = array == null ? 0 : array.length; - if (initAccum && length5) { - accumulator = array[--length5]; - } - while (length5--) { - accumulator = iteratee(accumulator, array[length5], length5, array); - } - return accumulator; - } - function arraySome(array, predicate) { - var index2 = -1, length5 = array == null ? 0 : array.length; - while (++index2 < length5) { - if (predicate(array[index2], index2, array)) { - return true; - } - } - return false; - } - var asciiSize = baseProperty("length"); - function asciiToArray(string) { - return string.split(""); - } - function asciiWords(string) { - return string.match(reAsciiWord) || []; - } - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value2, key, collection2) { - if (predicate(value2, key, collection2)) { - result = key; - return false; - } - }); - return result; - } - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length5 = array.length, index2 = fromIndex + (fromRight ? 1 : -1); - while (fromRight ? index2-- : ++index2 < length5) { - if (predicate(array[index2], index2, array)) { - return index2; - } - } - return -1; - } - function baseIndexOf(array, value2, fromIndex) { - return value2 === value2 ? strictIndexOf(array, value2, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); - } - function baseIndexOfWith(array, value2, fromIndex, comparator) { - var index2 = fromIndex - 1, length5 = array.length; - while (++index2 < length5) { - if (comparator(array[index2], value2)) { - return index2; - } - } - return -1; - } - function baseIsNaN(value2) { - return value2 !== value2; - } - function baseMean(array, iteratee) { - var length5 = array == null ? 0 : array.length; - return length5 ? baseSum(array, iteratee) / length5 : NAN; - } - function baseProperty(key) { - return function(object) { - return object == null ? undefined2 : object[key]; - }; - } - function basePropertyOf(object) { - return function(key) { - return object == null ? undefined2 : object[key]; - }; - } - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value2, index2, collection2) { - accumulator = initAccum ? (initAccum = false, value2) : iteratee(accumulator, value2, index2, collection2); - }); - return accumulator; - } - function baseSortBy(array, comparer) { - var length5 = array.length; - array.sort(comparer); - while (length5--) { - array[length5] = array[length5].value; - } - return array; - } - function baseSum(array, iteratee) { - var result, index2 = -1, length5 = array.length; - while (++index2 < length5) { - var current = iteratee(array[index2]); - if (current !== undefined2) { - result = result === undefined2 ? current : result + current; - } - } - return result; - } - function baseTimes(n3, iteratee) { - var index2 = -1, result = Array(n3); - while (++index2 < n3) { - result[index2] = iteratee(index2); - } - return result; - } - function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); - } - function baseTrim(string) { - return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string; - } - function baseUnary(func) { - return function(value2) { - return func(value2); - }; - } - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - function cacheHas(cache3, key) { - return cache3.has(key); - } - function charsStartIndex(strSymbols, chrSymbols) { - var index2 = -1, length5 = strSymbols.length; - while (++index2 < length5 && baseIndexOf(chrSymbols, strSymbols[index2], 0) > -1) { - } - return index2; - } - function charsEndIndex(strSymbols, chrSymbols) { - var index2 = strSymbols.length; - while (index2-- && baseIndexOf(chrSymbols, strSymbols[index2], 0) > -1) { - } - return index2; - } - function countHolders(array, placeholder) { - var length5 = array.length, result = 0; - while (length5--) { - if (array[length5] === placeholder) { - ++result; - } - } - return result; - } - var deburrLetter = basePropertyOf(deburredLetters); - var escapeHtmlChar = basePropertyOf(htmlEscapes); - function escapeStringChar(chr) { - return "\\" + stringEscapes[chr]; - } - function getValue3(object, key) { - return object == null ? undefined2 : object[key]; - } - function hasUnicode(string) { - return reHasUnicode.test(string); - } - function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); - } - function iteratorToArray(iterator) { - var data3, result = []; - while (!(data3 = iterator.next()).done) { - result.push(data3.value); - } - return result; - } - function mapToArray(map23) { - var index2 = -1, result = Array(map23.size); - map23.forEach(function(value2, key) { - result[++index2] = [key, value2]; - }); - return result; - } - function overArg(func, transform18) { - return function(arg) { - return func(transform18(arg)); - }; - } - function replaceHolders(array, placeholder) { - var index2 = -1, length5 = array.length, resIndex = 0, result = []; - while (++index2 < length5) { - var value2 = array[index2]; - if (value2 === placeholder || value2 === PLACEHOLDER) { - array[index2] = PLACEHOLDER; - result[resIndex++] = index2; - } - } - return result; - } - function setToArray(set13) { - var index2 = -1, result = Array(set13.size); - set13.forEach(function(value2) { - result[++index2] = value2; - }); - return result; - } - function setToPairs(set13) { - var index2 = -1, result = Array(set13.size); - set13.forEach(function(value2) { - result[++index2] = [value2, value2]; - }); - return result; - } - function strictIndexOf(array, value2, fromIndex) { - var index2 = fromIndex - 1, length5 = array.length; - while (++index2 < length5) { - if (array[index2] === value2) { - return index2; - } - } - return -1; - } - function strictLastIndexOf(array, value2, fromIndex) { - var index2 = fromIndex + 1; - while (index2--) { - if (array[index2] === value2) { - return index2; - } - } - return index2; - } - function stringSize(string) { - return hasUnicode(string) ? unicodeSize(string) : asciiSize(string); - } - function stringToArray(string) { - return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string); - } - function trimmedEndIndex(string) { - var index2 = string.length; - while (index2-- && reWhitespace.test(string.charAt(index2))) { - } - return index2; - } - var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; - } - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } - function unicodeWords(string) { - return string.match(reUnicodeWord) || []; - } - var runInContext = function runInContext2(context) { - context = context == null ? root : _8.defaults(root.Object(), context, _8.pick(root, contextProps)); - var Array2 = context.Array, Date2 = context.Date, Error2 = context.Error, Function2 = context.Function, Math2 = context.Math, Object2 = context.Object, RegExp2 = context.RegExp, String2 = context.String, TypeError2 = context.TypeError; - var arrayProto = Array2.prototype, funcProto = Function2.prototype, objectProto4 = Object2.prototype; - var coreJsData = context["__core-js_shared__"]; - var funcToString = funcProto.toString; - var hasOwnProperty = objectProto4.hasOwnProperty; - var idCounter = 0; - var maskSrcKey = function() { - var uid2 = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ""); - return uid2 ? "Symbol(src)_1." + uid2 : ""; - }(); - var nativeObjectToString = objectProto4.toString; - var objectCtorString = funcToString.call(Object2); - var oldDash = root._; - var reIsNative = RegExp2("^" + funcToString.call(hasOwnProperty).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"); - var Buffer3 = moduleExports ? context.Buffer : undefined2, Symbol2 = context.Symbol, Uint8Array2 = context.Uint8Array, allocUnsafe = Buffer3 ? Buffer3.allocUnsafe : undefined2, getPrototype = overArg(Object2.getPrototypeOf, Object2), objectCreate = Object2.create, propertyIsEnumerable = objectProto4.propertyIsEnumerable, splice = arrayProto.splice, spreadableSymbol = Symbol2 ? Symbol2.isConcatSpreadable : undefined2, symIterator = Symbol2 ? Symbol2.iterator : undefined2, symToStringTag = Symbol2 ? Symbol2.toStringTag : undefined2; - var defineProperty = function() { - try { - var func = getNative(Object2, "defineProperty"); - func({}, "", {}); - return func; - } catch (e4) { - } - }(); - var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, ctxNow = Date2 && Date2.now !== root.Date.now && Date2.now, ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; - var nativeCeil = Math2.ceil, nativeFloor = Math2.floor, nativeGetSymbols = Object2.getOwnPropertySymbols, nativeIsBuffer = Buffer3 ? Buffer3.isBuffer : undefined2, nativeIsFinite = context.isFinite, nativeJoin = arrayProto.join, nativeKeys = overArg(Object2.keys, Object2), nativeMax = Math2.max, nativeMin = Math2.min, nativeNow = Date2.now, nativeParseInt = context.parseInt, nativeRandom = Math2.random, nativeReverse = arrayProto.reverse; - var DataView2 = getNative(context, "DataView"), Map2 = getNative(context, "Map"), Promise2 = getNative(context, "Promise"), Set2 = getNative(context, "Set"), WeakMap2 = getNative(context, "WeakMap"), nativeCreate = getNative(Object2, "create"); - var metaMap = WeakMap2 && new WeakMap2(); - var realNames = {}; - var dataViewCtorString = toSource(DataView2), mapCtorString = toSource(Map2), promiseCtorString = toSource(Promise2), setCtorString = toSource(Set2), weakMapCtorString = toSource(WeakMap2); - var symbolProto = Symbol2 ? Symbol2.prototype : undefined2, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined2, symbolToString = symbolProto ? symbolProto.toString : undefined2; - function lodash(value2) { - if (isObjectLike5(value2) && !isArray87(value2) && !(value2 instanceof LazyWrapper)) { - if (value2 instanceof LodashWrapper) { - return value2; - } - if (hasOwnProperty.call(value2, "__wrapped__")) { - return wrapperClone(value2); - } - } - return new LodashWrapper(value2); - } - var baseCreate = function() { - function object() { - } - return function(proto) { - if (!isObject33(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result2 = new object(); - object.prototype = undefined2; - return result2; - }; - }(); - function baseLodash() { - } - function LodashWrapper(value2, chainAll) { - this.__wrapped__ = value2; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined2; - } - lodash.templateSettings = { - "escape": reEscape, - "evaluate": reEvaluate, - "interpolate": reInterpolate, - "variable": "", - "imports": { - "_": lodash - } - }; - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - function LazyWrapper(value2) { - this.__wrapped__ = value2; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } - function lazyClone() { - var result2 = new LazyWrapper(this.__wrapped__); - result2.__actions__ = copyArray(this.__actions__); - result2.__dir__ = this.__dir__; - result2.__filtered__ = this.__filtered__; - result2.__iteratees__ = copyArray(this.__iteratees__); - result2.__takeCount__ = this.__takeCount__; - result2.__views__ = copyArray(this.__views__); - return result2; - } - function lazyReverse() { - if (this.__filtered__) { - var result2 = new LazyWrapper(this); - result2.__dir__ = -1; - result2.__filtered__ = true; - } else { - result2 = this.clone(); - result2.__dir__ *= -1; - } - return result2; - } - function lazyValue() { - var array = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray87(array), isRight = dir < 0, arrLength = isArr ? array.length : 0, view = getView(0, arrLength, this.__views__), start = view.start, end2 = view.end, length5 = end2 - start, index2 = isRight ? end2 : start - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin(length5, this.__takeCount__); - if (!isArr || !isRight && arrLength == length5 && takeCount == length5) { - return baseWrapperValue(array, this.__actions__); - } - var result2 = []; - outer: - while (length5-- && resIndex < takeCount) { - index2 += dir; - var iterIndex = -1, value2 = array[index2]; - while (++iterIndex < iterLength) { - var data3 = iteratees[iterIndex], iteratee2 = data3.iteratee, type2 = data3.type, computed = iteratee2(value2); - if (type2 == LAZY_MAP_FLAG) { - value2 = computed; - } else if (!computed) { - if (type2 == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result2[resIndex++] = value2; - } - return result2; - } - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; - function Hash(entries) { - var index2 = -1, length5 = entries == null ? 0 : entries.length; - this.clear(); - while (++index2 < length5) { - var entry = entries[index2]; - this.set(entry[0], entry[1]); - } - } - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; - } - function hashDelete(key) { - var result2 = this.has(key) && delete this.__data__[key]; - this.size -= result2 ? 1 : 0; - return result2; - } - function hashGet(key) { - var data3 = this.__data__; - if (nativeCreate) { - var result2 = data3[key]; - return result2 === HASH_UNDEFINED ? undefined2 : result2; - } - return hasOwnProperty.call(data3, key) ? data3[key] : undefined2; - } - function hashHas(key) { - var data3 = this.__data__; - return nativeCreate ? data3[key] !== undefined2 : hasOwnProperty.call(data3, key); - } - function hashSet(key, value2) { - var data3 = this.__data__; - this.size += this.has(key) ? 0 : 1; - data3[key] = nativeCreate && value2 === undefined2 ? HASH_UNDEFINED : value2; - return this; - } - Hash.prototype.clear = hashClear; - Hash.prototype["delete"] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; - function ListCache(entries) { - var index2 = -1, length5 = entries == null ? 0 : entries.length; - this.clear(); - while (++index2 < length5) { - var entry = entries[index2]; - this.set(entry[0], entry[1]); - } - } - function listCacheClear() { - this.__data__ = []; - this.size = 0; - } - function listCacheDelete(key) { - var data3 = this.__data__, index2 = assocIndexOf(data3, key); - if (index2 < 0) { - return false; - } - var lastIndex = data3.length - 1; - if (index2 == lastIndex) { - data3.pop(); - } else { - splice.call(data3, index2, 1); - } - --this.size; - return true; - } - function listCacheGet(key) { - var data3 = this.__data__, index2 = assocIndexOf(data3, key); - return index2 < 0 ? undefined2 : data3[index2][1]; - } - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } - function listCacheSet(key, value2) { - var data3 = this.__data__, index2 = assocIndexOf(data3, key); - if (index2 < 0) { - ++this.size; - data3.push([key, value2]); - } else { - data3[index2][1] = value2; - } - return this; - } - ListCache.prototype.clear = listCacheClear; - ListCache.prototype["delete"] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; - function MapCache(entries) { - var index2 = -1, length5 = entries == null ? 0 : entries.length; - this.clear(); - while (++index2 < length5) { - var entry = entries[index2]; - this.set(entry[0], entry[1]); - } - } - function mapCacheClear() { - this.size = 0; - this.__data__ = { - "hash": new Hash(), - "map": new (Map2 || ListCache)(), - "string": new Hash() - }; - } - function mapCacheDelete(key) { - var result2 = getMapData(this, key)["delete"](key); - this.size -= result2 ? 1 : 0; - return result2; - } - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } - function mapCacheSet(key, value2) { - var data3 = getMapData(this, key), size15 = data3.size; - data3.set(key, value2); - this.size += data3.size == size15 ? 0 : 1; - return this; - } - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype["delete"] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; - function SetCache(values5) { - var index2 = -1, length5 = values5 == null ? 0 : values5.length; - this.__data__ = new MapCache(); - while (++index2 < length5) { - this.add(values5[index2]); - } - } - function setCacheAdd(value2) { - this.__data__.set(value2, HASH_UNDEFINED); - return this; - } - function setCacheHas(value2) { - return this.__data__.has(value2); - } - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; - function Stack3(entries) { - var data3 = this.__data__ = new ListCache(entries); - this.size = data3.size; - } - function stackClear() { - this.__data__ = new ListCache(); - this.size = 0; - } - function stackDelete(key) { - var data3 = this.__data__, result2 = data3["delete"](key); - this.size = data3.size; - return result2; - } - function stackGet(key) { - return this.__data__.get(key); - } - function stackHas(key) { - return this.__data__.has(key); - } - function stackSet(key, value2) { - var data3 = this.__data__; - if (data3 instanceof ListCache) { - var pairs2 = data3.__data__; - if (!Map2 || pairs2.length < LARGE_ARRAY_SIZE - 1) { - pairs2.push([key, value2]); - this.size = ++data3.size; - return this; - } - data3 = this.__data__ = new MapCache(pairs2); - } - data3.set(key, value2); - this.size = data3.size; - return this; - } - Stack3.prototype.clear = stackClear; - Stack3.prototype["delete"] = stackDelete; - Stack3.prototype.get = stackGet; - Stack3.prototype.has = stackHas; - Stack3.prototype.set = stackSet; - function arrayLikeKeys(value2, inherited) { - var isArr = isArray87(value2), isArg = !isArr && isArguments(value2), isBuff = !isArr && !isArg && isBuffer(value2), isType7 = !isArr && !isArg && !isBuff && isTypedArray4(value2), skipIndexes = isArr || isArg || isBuff || isType7, result2 = skipIndexes ? baseTimes(value2.length, String2) : [], length5 = result2.length; - for (var key in value2) { - if ((inherited || hasOwnProperty.call(value2, key)) && !(skipIndexes && (key == "length" || isBuff && (key == "offset" || key == "parent") || isType7 && (key == "buffer" || key == "byteLength" || key == "byteOffset") || isIndex(key, length5)))) { - result2.push(key); - } - } - return result2; - } - function arraySample(array) { - var length5 = array.length; - return length5 ? array[baseRandom(0, length5 - 1)] : undefined2; - } - function arraySampleSize(array, n3) { - return shuffleSelf(copyArray(array), baseClamp(n3, 0, array.length)); - } - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } - function assignMergeValue(object, key, value2) { - if (value2 !== undefined2 && !eq(object[key], value2) || value2 === undefined2 && !(key in object)) { - baseAssignValue(object, key, value2); - } - } - function assignValue(object, key, value2) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value2)) || value2 === undefined2 && !(key in object)) { - baseAssignValue(object, key, value2); - } - } - function assocIndexOf(array, key) { - var length5 = array.length; - while (length5--) { - if (eq(array[length5][0], key)) { - return length5; - } - } - return -1; - } - function baseAggregator(collection, setter, iteratee2, accumulator) { - baseEach(collection, function(value2, key, collection2) { - setter(accumulator, value2, iteratee2(value2), collection2); - }); - return accumulator; - } - function baseAssign(object, source) { - return object && copyObject(source, keys6(source), object); - } - function baseAssignIn(object, source) { - return object && copyObject(source, keysIn(source), object); - } - function baseAssignValue(object, key, value2) { - if (key == "__proto__" && defineProperty) { - defineProperty(object, key, { - "configurable": true, - "enumerable": true, - "value": value2, - "writable": true - }); - } else { - object[key] = value2; - } - } - function baseAt(object, paths) { - var index2 = -1, length5 = paths.length, result2 = Array2(length5), skip = object == null; - while (++index2 < length5) { - result2[index2] = skip ? undefined2 : get100(object, paths[index2]); - } - return result2; - } - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined2) { - number = number <= upper ? number : upper; - } - if (lower !== undefined2) { - number = number >= lower ? number : lower; - } - } - return number; - } - function baseClone(value2, bitmask, customizer, key, object, stack) { - var result2, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG; - if (customizer) { - result2 = object ? customizer(value2, key, object, stack) : customizer(value2); - } - if (result2 !== undefined2) { - return result2; - } - if (!isObject33(value2)) { - return value2; - } - var isArr = isArray87(value2); - if (isArr) { - result2 = initCloneArray(value2); - if (!isDeep) { - return copyArray(value2, result2); - } - } else { - var tag = getTag(value2), isFunc = tag == funcTag4 || tag == genTag; - if (isBuffer(value2)) { - return cloneBuffer(value2, isDeep); - } - if (tag == objectTag4 || tag == argsTag4 || isFunc && !object) { - result2 = isFlat || isFunc ? {} : initCloneObject(value2); - if (!isDeep) { - return isFlat ? copySymbolsIn(value2, baseAssignIn(result2, value2)) : copySymbols(value2, baseAssign(result2, value2)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value2 : {}; - } - result2 = initCloneByTag(value2, tag, isDeep); - } - } - stack || (stack = new Stack3()); - var stacked = stack.get(value2); - if (stacked) { - return stacked; - } - stack.set(value2, result2); - if (isSet(value2)) { - value2.forEach(function(subValue) { - result2.add(baseClone(subValue, bitmask, customizer, subValue, value2, stack)); - }); - } else if (isMap(value2)) { - value2.forEach(function(subValue, key2) { - result2.set(key2, baseClone(subValue, bitmask, customizer, key2, value2, stack)); - }); - } - var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys6; - var props = isArr ? undefined2 : keysFunc(value2); - arrayEach(props || value2, function(subValue, key2) { - if (props) { - key2 = subValue; - subValue = value2[key2]; - } - assignValue(result2, key2, baseClone(subValue, bitmask, customizer, key2, value2, stack)); - }); - return result2; - } - function baseConforms(source) { - var props = keys6(source); - return function(object) { - return baseConformsTo(object, source, props); - }; - } - function baseConformsTo(object, source, props) { - var length5 = props.length; - if (object == null) { - return !length5; - } - object = Object2(object); - while (length5--) { - var key = props[length5], predicate = source[key], value2 = object[key]; - if (value2 === undefined2 && !(key in object) || !predicate(value2)) { - return false; - } - } - return true; - } - function baseDelay(func, wait, args) { - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - return setTimeout2(function() { - func.apply(undefined2, args); - }, wait); - } - function baseDifference(array, values5, iteratee2, comparator) { - var index2 = -1, includes3 = arrayIncludes, isCommon = true, length5 = array.length, result2 = [], valuesLength = values5.length; - if (!length5) { - return result2; - } - if (iteratee2) { - values5 = arrayMap(values5, baseUnary(iteratee2)); - } - if (comparator) { - includes3 = arrayIncludesWith; - isCommon = false; - } else if (values5.length >= LARGE_ARRAY_SIZE) { - includes3 = cacheHas; - isCommon = false; - values5 = new SetCache(values5); - } - outer: - while (++index2 < length5) { - var value2 = array[index2], computed = iteratee2 == null ? value2 : iteratee2(value2); - value2 = comparator || value2 !== 0 ? value2 : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values5[valuesIndex] === computed) { - continue outer; - } - } - result2.push(value2); - } else if (!includes3(values5, computed, comparator)) { - result2.push(value2); - } - } - return result2; - } - var baseEach = createBaseEach(baseForOwn); - var baseEachRight = createBaseEach(baseForOwnRight, true); - function baseEvery(collection, predicate) { - var result2 = true; - baseEach(collection, function(value2, index2, collection2) { - result2 = !!predicate(value2, index2, collection2); - return result2; - }); - return result2; - } - function baseExtremum(array, iteratee2, comparator) { - var index2 = -1, length5 = array.length; - while (++index2 < length5) { - var value2 = array[index2], current = iteratee2(value2); - if (current != null && (computed === undefined2 ? current === current && !isSymbol(current) : comparator(current, computed))) { - var computed = current, result2 = value2; - } - } - return result2; - } - function baseFill(array, value2, start, end2) { - var length5 = array.length; - start = toInteger(start); - if (start < 0) { - start = -start > length5 ? 0 : length5 + start; - } - end2 = end2 === undefined2 || end2 > length5 ? length5 : toInteger(end2); - if (end2 < 0) { - end2 += length5; - } - end2 = start > end2 ? 0 : toLength(end2); - while (start < end2) { - array[start++] = value2; - } - return array; - } - function baseFilter(collection, predicate) { - var result2 = []; - baseEach(collection, function(value2, index2, collection2) { - if (predicate(value2, index2, collection2)) { - result2.push(value2); - } - }); - return result2; - } - function baseFlatten(array, depth, predicate, isStrict, result2) { - var index2 = -1, length5 = array.length; - predicate || (predicate = isFlattenable); - result2 || (result2 = []); - while (++index2 < length5) { - var value2 = array[index2]; - if (depth > 0 && predicate(value2)) { - if (depth > 1) { - baseFlatten(value2, depth - 1, predicate, isStrict, result2); - } else { - arrayPush(result2, value2); - } - } else if (!isStrict) { - result2[result2.length] = value2; - } - } - return result2; - } - var baseFor = createBaseFor(); - var baseForRight = createBaseFor(true); - function baseForOwn(object, iteratee2) { - return object && baseFor(object, iteratee2, keys6); - } - function baseForOwnRight(object, iteratee2) { - return object && baseForRight(object, iteratee2, keys6); - } - function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction44(object[key]); - }); - } - function baseGet(object, path) { - path = castPath(path, object); - var index2 = 0, length5 = path.length; - while (object != null && index2 < length5) { - object = object[toKey(path[index2++])]; - } - return index2 && index2 == length5 ? object : undefined2; - } - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result2 = keysFunc(object); - return isArray87(object) ? result2 : arrayPush(result2, symbolsFunc(object)); - } - function baseGetTag(value2) { - if (value2 == null) { - return value2 === undefined2 ? undefinedTag : nullTag; - } - return symToStringTag && symToStringTag in Object2(value2) ? getRawTag(value2) : objectToString4(value2); - } - function baseGt(value2, other2) { - return value2 > other2; - } - function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); - } - function baseHasIn(object, key) { - return object != null && key in Object2(object); - } - function baseInRange(number, start, end2) { - return number >= nativeMin(start, end2) && number < nativeMax(start, end2); - } - function baseIntersection(arrays, iteratee2, comparator) { - var includes3 = comparator ? arrayIncludesWith : arrayIncludes, length5 = arrays[0].length, othLength = arrays.length, othIndex = othLength, caches = Array2(othLength), maxLength = Infinity, result2 = []; - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee2) { - array = arrayMap(array, baseUnary(iteratee2)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee2 || length5 >= 120 && array.length >= 120) ? new SetCache(othIndex && array) : undefined2; - } - array = arrays[0]; - var index2 = -1, seen = caches[0]; - outer: - while (++index2 < length5 && result2.length < maxLength) { - var value2 = array[index2], computed = iteratee2 ? iteratee2(value2) : value2; - value2 = comparator || value2 !== 0 ? value2 : 0; - if (!(seen ? cacheHas(seen, computed) : includes3(result2, computed, comparator))) { - othIndex = othLength; - while (--othIndex) { - var cache3 = caches[othIndex]; - if (!(cache3 ? cacheHas(cache3, computed) : includes3(arrays[othIndex], computed, comparator))) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result2.push(value2); - } - } - return result2; - } - function baseInverter(object, setter, iteratee2, accumulator) { - baseForOwn(object, function(value2, key, object2) { - setter(accumulator, iteratee2(value2), key, object2); - }); - return accumulator; - } - function baseInvoke(object, path, args) { - path = castPath(path, object); - object = parent(object, path); - var func = object == null ? object : object[toKey(last17(path))]; - return func == null ? undefined2 : apply(func, object, args); - } - function baseIsArguments(value2) { - return isObjectLike5(value2) && baseGetTag(value2) == argsTag4; - } - function baseIsArrayBuffer(value2) { - return isObjectLike5(value2) && baseGetTag(value2) == arrayBufferTag4; - } - function baseIsDate(value2) { - return isObjectLike5(value2) && baseGetTag(value2) == dateTag4; - } - function baseIsEqual(value2, other2, bitmask, customizer, stack) { - if (value2 === other2) { - return true; - } - if (value2 == null || other2 == null || !isObjectLike5(value2) && !isObjectLike5(other2)) { - return value2 !== value2 && other2 !== other2; - } - return baseIsEqualDeep(value2, other2, bitmask, customizer, baseIsEqual, stack); - } - function baseIsEqualDeep(object, other2, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray87(object), othIsArr = isArray87(other2), objTag = objIsArr ? arrayTag4 : getTag(object), othTag = othIsArr ? arrayTag4 : getTag(other2); - objTag = objTag == argsTag4 ? objectTag4 : objTag; - othTag = othTag == argsTag4 ? objectTag4 : othTag; - var objIsObj = objTag == objectTag4, othIsObj = othTag == objectTag4, isSameTag = objTag == othTag; - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other2)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack3()); - return objIsArr || isTypedArray4(object) ? equalArrays(object, other2, bitmask, customizer, equalFunc, stack) : equalByTag(object, other2, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty.call(other2, "__wrapped__"); - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other2.value() : other2; - stack || (stack = new Stack3()); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack3()); - return equalObjects(object, other2, bitmask, customizer, equalFunc, stack); - } - function baseIsMap(value2) { - return isObjectLike5(value2) && getTag(value2) == mapTag4; - } - function baseIsMatch(object, source, matchData, customizer) { - var index2 = matchData.length, length5 = index2, noCustomizer = !customizer; - if (object == null) { - return !length5; - } - object = Object2(object); - while (index2--) { - var data3 = matchData[index2]; - if (noCustomizer && data3[2] ? data3[1] !== object[data3[0]] : !(data3[0] in object)) { - return false; - } - } - while (++index2 < length5) { - data3 = matchData[index2]; - var key = data3[0], objValue = object[key], srcValue = data3[1]; - if (noCustomizer && data3[2]) { - if (objValue === undefined2 && !(key in object)) { - return false; - } - } else { - var stack = new Stack3(); - if (customizer) { - var result2 = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result2 === undefined2 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result2)) { - return false; - } - } - } - return true; - } - function baseIsNative(value2) { - if (!isObject33(value2) || isMasked(value2)) { - return false; - } - var pattern2 = isFunction44(value2) ? reIsNative : reIsHostCtor; - return pattern2.test(toSource(value2)); - } - function baseIsRegExp(value2) { - return isObjectLike5(value2) && baseGetTag(value2) == regexpTag4; - } - function baseIsSet(value2) { - return isObjectLike5(value2) && getTag(value2) == setTag5; - } - function baseIsTypedArray4(value2) { - return isObjectLike5(value2) && isLength4(value2.length) && !!typedArrayTags4[baseGetTag(value2)]; - } - function baseIteratee(value2) { - if (typeof value2 == "function") { - return value2; - } - if (value2 == null) { - return identity4; - } - if (typeof value2 == "object") { - return isArray87(value2) ? baseMatchesProperty(value2[0], value2[1]) : baseMatches(value2); - } - return property(value2); - } - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result2 = []; - for (var key in Object2(object)) { - if (hasOwnProperty.call(object, key) && key != "constructor") { - result2.push(key); - } - } - return result2; - } - function baseKeysIn(object) { - if (!isObject33(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), result2 = []; - for (var key in object) { - if (!(key == "constructor" && (isProto || !hasOwnProperty.call(object, key)))) { - result2.push(key); - } - } - return result2; - } - function baseLt(value2, other2) { - return value2 < other2; - } - function baseMap(collection, iteratee2) { - var index2 = -1, result2 = isArrayLike(collection) ? Array2(collection.length) : []; - baseEach(collection, function(value2, key, collection2) { - result2[++index2] = iteratee2(value2, key, collection2); - }); - return result2; - } - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get100(object, path); - return objValue === undefined2 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; - } - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - stack || (stack = new Stack3()); - if (isObject33(srcValue)) { - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } else { - var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : undefined2; - if (newValue === undefined2) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, keysIn); - } - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue); - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : undefined2; - var isCommon = newValue === undefined2; - if (isCommon) { - var isArr = isArray87(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray4(srcValue); - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray87(objValue)) { - newValue = objValue; - } else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } else { - newValue = []; - } - } else if (isPlainObject10(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } else if (!isObject33(objValue) || isFunction44(objValue)) { - newValue = initCloneObject(srcValue); - } - } else { - isCommon = false; - } - } - if (isCommon) { - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack["delete"](srcValue); - } - assignMergeValue(object, key, newValue); - } - function baseNth(array, n3) { - var length5 = array.length; - if (!length5) { - return; - } - n3 += n3 < 0 ? length5 : 0; - return isIndex(n3, length5) ? array[n3] : undefined2; - } - function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = arrayMap(iteratees, function(iteratee2) { - if (isArray87(iteratee2)) { - return function(value2) { - return baseGet(value2, iteratee2.length === 1 ? iteratee2[0] : iteratee2); - }; - } - return iteratee2; - }); - } else { - iteratees = [identity4]; - } - var index2 = -1; - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - var result2 = baseMap(collection, function(value2, key, collection2) { - var criteria = arrayMap(iteratees, function(iteratee2) { - return iteratee2(value2); - }); - return { "criteria": criteria, "index": ++index2, "value": value2 }; - }); - return baseSortBy(result2, function(object, other2) { - return compareMultiple(object, other2, orders); - }); - } - function basePick(object, paths) { - return basePickBy(object, paths, function(value2, path) { - return hasIn(object, path); - }); - } - function basePickBy(object, paths, predicate) { - var index2 = -1, length5 = paths.length, result2 = {}; - while (++index2 < length5) { - var path = paths[index2], value2 = baseGet(object, path); - if (predicate(value2, path)) { - baseSet(result2, castPath(path, object), value2); - } - } - return result2; - } - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; - } - function basePullAll(array, values5, iteratee2, comparator) { - var indexOf3 = comparator ? baseIndexOfWith : baseIndexOf, index2 = -1, length5 = values5.length, seen = array; - if (array === values5) { - values5 = copyArray(values5); - } - if (iteratee2) { - seen = arrayMap(array, baseUnary(iteratee2)); - } - while (++index2 < length5) { - var fromIndex = 0, value2 = values5[index2], computed = iteratee2 ? iteratee2(value2) : value2; - while ((fromIndex = indexOf3(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; - } - function basePullAt(array, indexes) { - var length5 = array ? indexes.length : 0, lastIndex = length5 - 1; - while (length5--) { - var index2 = indexes[length5]; - if (length5 == lastIndex || index2 !== previous) { - var previous = index2; - if (isIndex(index2)) { - splice.call(array, index2, 1); - } else { - baseUnset(array, index2); - } - } - } - return array; - } - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } - function baseRange(start, end2, step, fromRight) { - var index2 = -1, length5 = nativeMax(nativeCeil((end2 - start) / (step || 1)), 0), result2 = Array2(length5); - while (length5--) { - result2[fromRight ? length5 : ++index2] = start; - start += step; - } - return result2; - } - function baseRepeat(string, n3) { - var result2 = ""; - if (!string || n3 < 1 || n3 > MAX_SAFE_INTEGER4) { - return result2; - } - do { - if (n3 % 2) { - result2 += string; - } - n3 = nativeFloor(n3 / 2); - if (n3) { - string += string; - } - } while (n3); - return result2; - } - function baseRest(func, start) { - return setToString(overRest(func, start, identity4), func + ""); - } - function baseSample(collection) { - return arraySample(values4(collection)); - } - function baseSampleSize(collection, n3) { - var array = values4(collection); - return shuffleSelf(array, baseClamp(n3, 0, array.length)); - } - function baseSet(object, path, value2, customizer) { - if (!isObject33(object)) { - return object; - } - path = castPath(path, object); - var index2 = -1, length5 = path.length, lastIndex = length5 - 1, nested = object; - while (nested != null && ++index2 < length5) { - var key = toKey(path[index2]), newValue = value2; - if (key === "__proto__" || key === "constructor" || key === "prototype") { - return object; - } - if (index2 != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined2; - if (newValue === undefined2) { - newValue = isObject33(objValue) ? objValue : isIndex(path[index2 + 1]) ? [] : {}; - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; - } - var baseSetData = !metaMap ? identity4 : function(func, data3) { - metaMap.set(func, data3); - return func; - }; - var baseSetToString = !defineProperty ? identity4 : function(func, string) { - return defineProperty(func, "toString", { - "configurable": true, - "enumerable": false, - "value": constant2(string), - "writable": true - }); - }; - function baseShuffle(collection) { - return shuffleSelf(values4(collection)); - } - function baseSlice(array, start, end2) { - var index2 = -1, length5 = array.length; - if (start < 0) { - start = -start > length5 ? 0 : length5 + start; - } - end2 = end2 > length5 ? length5 : end2; - if (end2 < 0) { - end2 += length5; - } - length5 = start > end2 ? 0 : end2 - start >>> 0; - start >>>= 0; - var result2 = Array2(length5); - while (++index2 < length5) { - result2[index2] = array[index2 + start]; - } - return result2; - } - function baseSome(collection, predicate) { - var result2; - baseEach(collection, function(value2, index2, collection2) { - result2 = predicate(value2, index2, collection2); - return !result2; - }); - return !!result2; - } - function baseSortedIndex(array, value2, retHighest) { - var low = 0, high = array == null ? low : array.length; - if (typeof value2 == "number" && value2 === value2 && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid2 = low + high >>> 1, computed = array[mid2]; - if (computed !== null && !isSymbol(computed) && (retHighest ? computed <= value2 : computed < value2)) { - low = mid2 + 1; - } else { - high = mid2; - } - } - return high; - } - return baseSortedIndexBy(array, value2, identity4, retHighest); - } - function baseSortedIndexBy(array, value2, iteratee2, retHighest) { - var low = 0, high = array == null ? 0 : array.length; - if (high === 0) { - return 0; - } - value2 = iteratee2(value2); - var valIsNaN = value2 !== value2, valIsNull = value2 === null, valIsSymbol = isSymbol(value2), valIsUndefined = value2 === undefined2; - while (low < high) { - var mid2 = nativeFloor((low + high) / 2), computed = iteratee2(array[mid2]), othIsDefined = computed !== undefined2, othIsNull = computed === null, othIsReflexive = computed === computed, othIsSymbol = isSymbol(computed); - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? computed <= value2 : computed < value2; - } - if (setLow) { - low = mid2 + 1; - } else { - high = mid2; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } - function baseSortedUniq(array, iteratee2) { - var index2 = -1, length5 = array.length, resIndex = 0, result2 = []; - while (++index2 < length5) { - var value2 = array[index2], computed = iteratee2 ? iteratee2(value2) : value2; - if (!index2 || !eq(computed, seen)) { - var seen = computed; - result2[resIndex++] = value2 === 0 ? 0 : value2; - } - } - return result2; - } - function baseToNumber(value2) { - if (typeof value2 == "number") { - return value2; - } - if (isSymbol(value2)) { - return NAN; - } - return +value2; - } - function baseToString(value2) { - if (typeof value2 == "string") { - return value2; - } - if (isArray87(value2)) { - return arrayMap(value2, baseToString) + ""; - } - if (isSymbol(value2)) { - return symbolToString ? symbolToString.call(value2) : ""; - } - var result2 = value2 + ""; - return result2 == "0" && 1 / value2 == -INFINITY ? "-0" : result2; - } - function baseUniq(array, iteratee2, comparator) { - var index2 = -1, includes3 = arrayIncludes, length5 = array.length, isCommon = true, result2 = [], seen = result2; - if (comparator) { - isCommon = false; - includes3 = arrayIncludesWith; - } else if (length5 >= LARGE_ARRAY_SIZE) { - var set14 = iteratee2 ? null : createSet(array); - if (set14) { - return setToArray(set14); - } - isCommon = false; - includes3 = cacheHas; - seen = new SetCache(); - } else { - seen = iteratee2 ? [] : result2; - } - outer: - while (++index2 < length5) { - var value2 = array[index2], computed = iteratee2 ? iteratee2(value2) : value2; - value2 = comparator || value2 !== 0 ? value2 : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee2) { - seen.push(computed); - } - result2.push(value2); - } else if (!includes3(seen, computed, comparator)) { - if (seen !== result2) { - seen.push(computed); - } - result2.push(value2); - } - } - return result2; - } - function baseUnset(object, path) { - path = castPath(path, object); - object = parent(object, path); - return object == null || delete object[toKey(last17(path))]; - } - function baseUpdate2(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); - } - function baseWhile(array, predicate, isDrop, fromRight) { - var length5 = array.length, index2 = fromRight ? length5 : -1; - while ((fromRight ? index2-- : ++index2 < length5) && predicate(array[index2], index2, array)) { - } - return isDrop ? baseSlice(array, fromRight ? 0 : index2, fromRight ? index2 + 1 : length5) : baseSlice(array, fromRight ? index2 + 1 : 0, fromRight ? length5 : index2); - } - function baseWrapperValue(value2, actions) { - var result2 = value2; - if (result2 instanceof LazyWrapper) { - result2 = result2.value(); - } - return arrayReduce(actions, function(result3, action) { - return action.func.apply(action.thisArg, arrayPush([result3], action.args)); - }, result2); - } - function baseXor(arrays, iteratee2, comparator) { - var length5 = arrays.length; - if (length5 < 2) { - return length5 ? baseUniq(arrays[0]) : []; - } - var index2 = -1, result2 = Array2(length5); - while (++index2 < length5) { - var array = arrays[index2], othIndex = -1; - while (++othIndex < length5) { - if (othIndex != index2) { - result2[index2] = baseDifference(result2[index2] || array, arrays[othIndex], iteratee2, comparator); - } - } - } - return baseUniq(baseFlatten(result2, 1), iteratee2, comparator); - } - function baseZipObject(props, values5, assignFunc) { - var index2 = -1, length5 = props.length, valsLength = values5.length, result2 = {}; - while (++index2 < length5) { - var value2 = index2 < valsLength ? values5[index2] : undefined2; - assignFunc(result2, props[index2], value2); - } - return result2; - } - function castArrayLikeObject(value2) { - return isArrayLikeObject(value2) ? value2 : []; - } - function castFunction(value2) { - return typeof value2 == "function" ? value2 : identity4; - } - function castPath(value2, object) { - if (isArray87(value2)) { - return value2; - } - return isKey(value2, object) ? [value2] : stringToPath(toString7(value2)); - } - var castRest = baseRest; - function castSlice(array, start, end2) { - var length5 = array.length; - end2 = end2 === undefined2 ? length5 : end2; - return !start && end2 >= length5 ? array : baseSlice(array, start, end2); - } - var clearTimeout2 = ctxClearTimeout || function(id) { - return root.clearTimeout(id); - }; - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length5 = buffer.length, result2 = allocUnsafe ? allocUnsafe(length5) : new buffer.constructor(length5); - buffer.copy(result2); - return result2; - } - function cloneArrayBuffer(arrayBuffer) { - var result2 = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array2(result2).set(new Uint8Array2(arrayBuffer)); - return result2; - } - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } - function cloneRegExp(regexp) { - var result2 = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result2.lastIndex = regexp.lastIndex; - return result2; - } - function cloneSymbol(symbol) { - return symbolValueOf ? Object2(symbolValueOf.call(symbol)) : {}; - } - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } - function compareAscending(value2, other2) { - if (value2 !== other2) { - var valIsDefined = value2 !== undefined2, valIsNull = value2 === null, valIsReflexive = value2 === value2, valIsSymbol = isSymbol(value2); - var othIsDefined = other2 !== undefined2, othIsNull = other2 === null, othIsReflexive = other2 === other2, othIsSymbol = isSymbol(other2); - if (!othIsNull && !othIsSymbol && !valIsSymbol && value2 > other2 || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) { - return 1; - } - if (!valIsNull && !valIsSymbol && !othIsSymbol && value2 < other2 || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) { - return -1; - } - } - return 0; - } - function compareMultiple(object, other2, orders) { - var index2 = -1, objCriteria = object.criteria, othCriteria = other2.criteria, length5 = objCriteria.length, ordersLength = orders.length; - while (++index2 < length5) { - var result2 = compareAscending(objCriteria[index2], othCriteria[index2]); - if (result2) { - if (index2 >= ordersLength) { - return result2; - } - var order2 = orders[index2]; - return result2 * (order2 == "desc" ? -1 : 1); - } - } - return object.index - other2.index; - } - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, argsLength = args.length, holdersLength = holders.length, leftIndex = -1, leftLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(leftLength + rangeLength), isUncurried = !isCurried; - while (++leftIndex < leftLength) { - result2[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result2[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result2[leftIndex++] = args[argsIndex++]; - } - return result2; - } - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, argsLength = args.length, holdersIndex = -1, holdersLength = holders.length, rightIndex = -1, rightLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(rangeLength + rightLength), isUncurried = !isCurried; - while (++argsIndex < rangeLength) { - result2[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result2[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result2[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result2; - } - function copyArray(source, array) { - var index2 = -1, length5 = source.length; - array || (array = Array2(length5)); - while (++index2 < length5) { - array[index2] = source[index2]; - } - return array; - } - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - var index2 = -1, length5 = props.length; - while (++index2 < length5) { - var key = props[index2]; - var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined2; - if (newValue === undefined2) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); - } - function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn(source), object); - } - function createAggregator(setter, initializer) { - return function(collection, iteratee2) { - var func = isArray87(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {}; - return func(collection, setter, getIteratee(iteratee2, 2), accumulator); - }; - } - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index2 = -1, length5 = sources.length, customizer = length5 > 1 ? sources[length5 - 1] : undefined2, guard = length5 > 2 ? sources[2] : undefined2; - customizer = assigner.length > 3 && typeof customizer == "function" ? (length5--, customizer) : undefined2; - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length5 < 3 ? undefined2 : customizer; - length5 = 1; - } - object = Object2(object); - while (++index2 < length5) { - var source = sources[index2]; - if (source) { - assigner(object, source, index2, customizer); - } - } - return object; - }); - } - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee2) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee2); - } - var length5 = collection.length, index2 = fromRight ? length5 : -1, iterable = Object2(collection); - while (fromRight ? index2-- : ++index2 < length5) { - if (iteratee2(iterable[index2], index2, iterable) === false) { - break; - } - } - return collection; - }; - } - function createBaseFor(fromRight) { - return function(object, iteratee2, keysFunc) { - var index2 = -1, iterable = Object2(object), props = keysFunc(object), length5 = props.length; - while (length5--) { - var key = props[fromRight ? length5 : ++index2]; - if (iteratee2(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func); - function wrapper() { - var fn = this && this !== root && this instanceof wrapper ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } - function createCaseFirst(methodName) { - return function(string) { - string = toString7(string); - var strSymbols = hasUnicode(string) ? stringToArray(string) : undefined2; - var chr = strSymbols ? strSymbols[0] : string.charAt(0); - var trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string.slice(1); - return chr[methodName]() + trailing; - }; - } - function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, "")), callback, ""); - }; - } - function createCtor(Ctor) { - return function() { - var args = arguments; - switch (args.length) { - case 0: - return new Ctor(); - case 1: - return new Ctor(args[0]); - case 2: - return new Ctor(args[0], args[1]); - case 3: - return new Ctor(args[0], args[1], args[2]); - case 4: - return new Ctor(args[0], args[1], args[2], args[3]); - case 5: - return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: - return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: - return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), result2 = Ctor.apply(thisBinding, args); - return isObject33(result2) ? result2 : thisBinding; - }; - } - function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - function wrapper() { - var length5 = arguments.length, args = Array2(length5), index2 = length5, placeholder = getHolder(wrapper); - while (index2--) { - args[index2] = arguments[index2]; - } - var holders = length5 < 3 && args[0] !== placeholder && args[length5 - 1] !== placeholder ? [] : replaceHolders(args, placeholder); - length5 -= holders.length; - if (length5 < arity) { - return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, undefined2, args, holders, undefined2, undefined2, arity - length5); - } - var fn = this && this !== root && this instanceof wrapper ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; - } - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object2(collection); - if (!isArrayLike(collection)) { - var iteratee2 = getIteratee(predicate, 3); - collection = keys6(collection); - predicate = function(key) { - return iteratee2(iterable[key], key, iterable); - }; - } - var index2 = findIndexFunc(collection, predicate, fromIndex); - return index2 > -1 ? iterable[iteratee2 ? collection[index2] : index2] : undefined2; - }; - } - function createFlow(fromRight) { - return flatRest(function(funcs) { - var length5 = funcs.length, index2 = length5, prereq = LodashWrapper.prototype.thru; - if (fromRight) { - funcs.reverse(); - } - while (index2--) { - var func = funcs[index2]; - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == "wrapper") { - var wrapper = new LodashWrapper([], true); - } - } - index2 = wrapper ? index2 : length5; - while (++index2 < length5) { - func = funcs[index2]; - var funcName = getFuncName(func), data3 = funcName == "wrapper" ? getData(func) : undefined2; - if (data3 && isLaziable(data3[0]) && data3[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data3[4].length && data3[9] == 1) { - wrapper = wrapper[getFuncName(data3[0])].apply(wrapper, data3[3]); - } else { - wrapper = func.length == 1 && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func); - } - } - return function() { - var args = arguments, value2 = args[0]; - if (wrapper && args.length == 1 && isArray87(value2)) { - return wrapper.plant(value2).value(); - } - var index3 = 0, result2 = length5 ? funcs[index3].apply(this, args) : value2; - while (++index3 < length5) { - result2 = funcs[index3].call(this, result2); - } - return result2; - }; - }); - } - function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary2, arity) { - var isAry = bitmask & WRAP_ARY_FLAG, isBind = bitmask & WRAP_BIND_FLAG, isBindKey = bitmask & WRAP_BIND_KEY_FLAG, isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), isFlip = bitmask & WRAP_FLIP_FLAG, Ctor = isBindKey ? undefined2 : createCtor(func); - function wrapper() { - var length5 = arguments.length, args = Array2(length5), index2 = length5; - while (index2--) { - args[index2] = arguments[index2]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length5 -= holdersCount; - if (isCurried && length5 < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, thisArg, args, newHolders, argPos, ary2, arity - length5); - } - var thisBinding = isBind ? thisArg : this, fn = isBindKey ? thisBinding[func] : func; - length5 = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length5 > 1) { - args.reverse(); - } - if (isAry && ary2 < length5) { - args.length = ary2; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } - function createInverter(setter, toIteratee) { - return function(object, iteratee2) { - return baseInverter(object, setter, toIteratee(iteratee2), {}); - }; - } - function createMathOperation(operator, defaultValue) { - return function(value2, other2) { - var result2; - if (value2 === undefined2 && other2 === undefined2) { - return defaultValue; - } - if (value2 !== undefined2) { - result2 = value2; - } - if (other2 !== undefined2) { - if (result2 === undefined2) { - return other2; - } - if (typeof value2 == "string" || typeof other2 == "string") { - value2 = baseToString(value2); - other2 = baseToString(other2); - } else { - value2 = baseToNumber(value2); - other2 = baseToNumber(other2); - } - result2 = operator(value2, other2); - } - return result2; - }; - } - function createOver(arrayFunc) { - return flatRest(function(iteratees) { - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - return baseRest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee2) { - return apply(iteratee2, thisArg, args); - }); - }); - }); - } - function createPadding(length5, chars) { - chars = chars === undefined2 ? " " : baseToString(chars); - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length5) : chars; - } - var result2 = baseRepeat(chars, nativeCeil(length5 / stringSize(chars))); - return hasUnicode(chars) ? castSlice(stringToArray(result2), 0, length5).join("") : result2.slice(0, length5); - } - function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func); - function wrapper() { - var argsIndex = -1, argsLength = arguments.length, leftIndex = -1, leftLength = partials.length, args = Array2(leftLength + argsLength), fn = this && this !== root && this instanceof wrapper ? Ctor : func; - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } - function createRange(fromRight) { - return function(start, end2, step) { - if (step && typeof step != "number" && isIterateeCall(start, end2, step)) { - end2 = step = undefined2; - } - start = toFinite(start); - if (end2 === undefined2) { - end2 = start; - start = 0; - } else { - end2 = toFinite(end2); - } - step = step === undefined2 ? start < end2 ? 1 : -1 : toFinite(step); - return baseRange(start, end2, step, fromRight); - }; - } - function createRelationalOperation(operator) { - return function(value2, other2) { - if (!(typeof value2 == "string" && typeof other2 == "string")) { - value2 = toNumber(value2); - other2 = toNumber(other2); - } - return operator(value2, other2); - }; - } - function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary2, arity) { - var isCurry = bitmask & WRAP_CURRY_FLAG, newHolders = isCurry ? holders : undefined2, newHoldersRight = isCurry ? undefined2 : holders, newPartials = isCurry ? partials : undefined2, newPartialsRight = isCurry ? undefined2 : partials; - bitmask |= isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG; - bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); - if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { - bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); - } - var newData = [ - func, - bitmask, - thisArg, - newPartials, - newHolders, - newPartialsRight, - newHoldersRight, - argPos, - ary2, - arity - ]; - var result2 = wrapFunc.apply(undefined2, newData); - if (isLaziable(func)) { - setData(result2, newData); - } - result2.placeholder = placeholder; - return setWrapToString(result2, func, bitmask); - } - function createRound(methodName) { - var func = Math2[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); - if (precision && nativeIsFinite(number)) { - var pair = (toString7(number) + "e").split("e"), value2 = func(pair[0] + "e" + (+pair[1] + precision)); - pair = (toString7(value2) + "e").split("e"); - return +(pair[0] + "e" + (+pair[1] - precision)); - } - return func(number); - }; - } - var createSet = !(Set2 && 1 / setToArray(new Set2([, -0]))[1] == INFINITY) ? noop7 : function(values5) { - return new Set2(values5); - }; - function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag4) { - return mapToArray(object); - } - if (tag == setTag5) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; - } - function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary2, arity) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; - if (!isBindKey && typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - var length5 = partials ? partials.length : 0; - if (!length5) { - bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); - partials = holders = undefined2; - } - ary2 = ary2 === undefined2 ? ary2 : nativeMax(toInteger(ary2), 0); - arity = arity === undefined2 ? arity : toInteger(arity); - length5 -= holders ? holders.length : 0; - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, holdersRight = holders; - partials = holders = undefined2; - } - var data3 = isBindKey ? undefined2 : getData(func); - var newData = [ - func, - bitmask, - thisArg, - partials, - holders, - partialsRight, - holdersRight, - argPos, - ary2, - arity - ]; - if (data3) { - mergeData(newData, data3); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] === undefined2 ? isBindKey ? 0 : func.length : nativeMax(newData[9] - length5, 0); - if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { - bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == WRAP_BIND_FLAG) { - var result2 = createBind(func, bitmask, thisArg); - } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { - result2 = createCurry(func, bitmask, arity); - } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { - result2 = createPartial(func, bitmask, thisArg, partials); - } else { - result2 = createHybrid.apply(undefined2, newData); - } - var setter = data3 ? baseSetData : setData; - return setWrapToString(setter(result2, newData), func, bitmask); - } - function customDefaultsAssignIn(objValue, srcValue, key, object) { - if (objValue === undefined2 || eq(objValue, objectProto4[key]) && !hasOwnProperty.call(object, key)) { - return srcValue; - } - return objValue; - } - function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { - if (isObject33(objValue) && isObject33(srcValue)) { - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined2, customDefaultsMerge, stack); - stack["delete"](srcValue); - } - return objValue; - } - function customOmitClone(value2) { - return isPlainObject10(value2) ? undefined2 : value2; - } - function equalArrays(array, other2, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other2.length; - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - var arrStacked = stack.get(array); - var othStacked = stack.get(other2); - if (arrStacked && othStacked) { - return arrStacked == other2 && othStacked == array; - } - var index2 = -1, result2 = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined2; - stack.set(array, other2); - stack.set(other2, array); - while (++index2 < arrLength) { - var arrValue = array[index2], othValue = other2[index2]; - if (customizer) { - var compared = isPartial ? customizer(othValue, arrValue, index2, other2, array, stack) : customizer(arrValue, othValue, index2, array, other2, stack); - } - if (compared !== undefined2) { - if (compared) { - continue; - } - result2 = false; - break; - } - if (seen) { - if (!arraySome(other2, function(othValue2, othIndex) { - if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result2 = false; - break; - } - } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - result2 = false; - break; - } - } - stack["delete"](array); - stack["delete"](other2); - return result2; - } - function equalByTag(object, other2, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag4: - if (object.byteLength != other2.byteLength || object.byteOffset != other2.byteOffset) { - return false; - } - object = object.buffer; - other2 = other2.buffer; - case arrayBufferTag4: - if (object.byteLength != other2.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other2))) { - return false; - } - return true; - case boolTag4: - case dateTag4: - case numberTag4: - return eq(+object, +other2); - case errorTag4: - return object.name == other2.name && object.message == other2.message; - case regexpTag4: - case stringTag4: - return object == other2 + ""; - case mapTag4: - var convert = mapToArray; - case setTag5: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG; - convert || (convert = setToArray); - if (object.size != other2.size && !isPartial) { - return false; - } - var stacked = stack.get(object); - if (stacked) { - return stacked == other2; - } - bitmask |= COMPARE_UNORDERED_FLAG; - stack.set(object, other2); - var result2 = equalArrays(convert(object), convert(other2), bitmask, customizer, equalFunc, stack); - stack["delete"](object); - return result2; - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other2); - } - } - return false; - } - function equalObjects(object, other2, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other2), othLength = othProps.length; - if (objLength != othLength && !isPartial) { - return false; - } - var index2 = objLength; - while (index2--) { - var key = objProps[index2]; - if (!(isPartial ? key in other2 : hasOwnProperty.call(other2, key))) { - return false; - } - } - var objStacked = stack.get(object); - var othStacked = stack.get(other2); - if (objStacked && othStacked) { - return objStacked == other2 && othStacked == object; - } - var result2 = true; - stack.set(object, other2); - stack.set(other2, object); - var skipCtor = isPartial; - while (++index2 < objLength) { - key = objProps[index2]; - var objValue = object[key], othValue = other2[key]; - if (customizer) { - var compared = isPartial ? customizer(othValue, objValue, key, other2, object, stack) : customizer(objValue, othValue, key, object, other2, stack); - } - if (!(compared === undefined2 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { - result2 = false; - break; - } - skipCtor || (skipCtor = key == "constructor"); - } - if (result2 && !skipCtor) { - var objCtor = object.constructor, othCtor = other2.constructor; - if (objCtor != othCtor && ("constructor" in object && "constructor" in other2) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { - result2 = false; - } - } - stack["delete"](object); - stack["delete"](other2); - return result2; - } - function flatRest(func) { - return setToString(overRest(func, undefined2, flatten9), func + ""); - } - function getAllKeys(object) { - return baseGetAllKeys(object, keys6, getSymbols); - } - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); - } - var getData = !metaMap ? noop7 : function(func) { - return metaMap.get(func); - }; - function getFuncName(func) { - var result2 = func.name + "", array = realNames[result2], length5 = hasOwnProperty.call(realNames, result2) ? array.length : 0; - while (length5--) { - var data3 = array[length5], otherFunc = data3.func; - if (otherFunc == null || otherFunc == func) { - return data3.name; - } - } - return result2; - } - function getHolder(func) { - var object = hasOwnProperty.call(lodash, "placeholder") ? lodash : func; - return object.placeholder; - } - function getIteratee() { - var result2 = lodash.iteratee || iteratee; - result2 = result2 === iteratee ? baseIteratee : result2; - return arguments.length ? result2(arguments[0], arguments[1]) : result2; - } - function getMapData(map24, key) { - var data3 = map24.__data__; - return isKeyable(key) ? data3[typeof key == "string" ? "string" : "hash"] : data3.map; - } - function getMatchData(object) { - var result2 = keys6(object), length5 = result2.length; - while (length5--) { - var key = result2[length5], value2 = object[key]; - result2[length5] = [key, value2, isStrictComparable(value2)]; - } - return result2; - } - function getNative(object, key) { - var value2 = getValue3(object, key); - return baseIsNative(value2) ? value2 : undefined2; - } - function getRawTag(value2) { - var isOwn = hasOwnProperty.call(value2, symToStringTag), tag = value2[symToStringTag]; - try { - value2[symToStringTag] = undefined2; - var unmasked = true; - } catch (e4) { - } - var result2 = nativeObjectToString.call(value2); - if (unmasked) { - if (isOwn) { - value2[symToStringTag] = tag; - } else { - delete value2[symToStringTag]; - } - } - return result2; - } - var getSymbols = !nativeGetSymbols ? stubArray : function(object) { - if (object == null) { - return []; - } - object = Object2(object); - return arrayFilter(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); - }; - var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result2 = []; - while (object) { - arrayPush(result2, getSymbols(object)); - object = getPrototype(object); - } - return result2; - }; - var getTag = baseGetTag; - if (DataView2 && getTag(new DataView2(new ArrayBuffer(1))) != dataViewTag4 || Map2 && getTag(new Map2()) != mapTag4 || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag5 || WeakMap2 && getTag(new WeakMap2()) != weakMapTag4) { - getTag = function(value2) { - var result2 = baseGetTag(value2), Ctor = result2 == objectTag4 ? value2.constructor : undefined2, ctorString = Ctor ? toSource(Ctor) : ""; - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: - return dataViewTag4; - case mapCtorString: - return mapTag4; - case promiseCtorString: - return promiseTag; - case setCtorString: - return setTag5; - case weakMapCtorString: - return weakMapTag4; - } - } - return result2; - }; - } - function getView(start, end2, transforms) { - var index2 = -1, length5 = transforms.length; - while (++index2 < length5) { - var data3 = transforms[index2], size15 = data3.size; - switch (data3.type) { - case "drop": - start += size15; - break; - case "dropRight": - end2 -= size15; - break; - case "take": - end2 = nativeMin(end2, start + size15); - break; - case "takeRight": - start = nativeMax(start, end2 - size15); - break; - } - } - return { "start": start, "end": end2 }; - } - function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; - } - function hasPath2(object, path, hasFunc) { - path = castPath(path, object); - var index2 = -1, length5 = path.length, result2 = false; - while (++index2 < length5) { - var key = toKey(path[index2]); - if (!(result2 = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result2 || ++index2 != length5) { - return result2; - } - length5 = object == null ? 0 : object.length; - return !!length5 && isLength4(length5) && isIndex(key, length5) && (isArray87(object) || isArguments(object)); - } - function initCloneArray(array) { - var length5 = array.length, result2 = new array.constructor(length5); - if (length5 && typeof array[0] == "string" && hasOwnProperty.call(array, "index")) { - result2.index = array.index; - result2.input = array.input; - } - return result2; - } - function initCloneObject(object) { - return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {}; - } - function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag4: - return cloneArrayBuffer(object); - case boolTag4: - case dateTag4: - return new Ctor(+object); - case dataViewTag4: - return cloneDataView(object, isDeep); - case float32Tag4: - case float64Tag4: - case int8Tag4: - case int16Tag4: - case int32Tag4: - case uint8Tag4: - case uint8ClampedTag4: - case uint16Tag4: - case uint32Tag4: - return cloneTypedArray(object, isDeep); - case mapTag4: - return new Ctor(); - case numberTag4: - case stringTag4: - return new Ctor(object); - case regexpTag4: - return cloneRegExp(object); - case setTag5: - return new Ctor(); - case symbolTag: - return cloneSymbol(object); - } - } - function insertWrapDetails(source, details) { - var length5 = details.length; - if (!length5) { - return source; - } - var lastIndex = length5 - 1; - details[lastIndex] = (length5 > 1 ? "& " : "") + details[lastIndex]; - details = details.join(length5 > 2 ? ", " : " "); - return source.replace(reWrapComment, "{\n/* [wrapped with " + details + "] */\n"); - } - function isFlattenable(value2) { - return isArray87(value2) || isArguments(value2) || !!(spreadableSymbol && value2 && value2[spreadableSymbol]); - } - function isIndex(value2, length5) { - var type2 = typeof value2; - length5 = length5 == null ? MAX_SAFE_INTEGER4 : length5; - return !!length5 && (type2 == "number" || type2 != "symbol" && reIsUint.test(value2)) && (value2 > -1 && value2 % 1 == 0 && value2 < length5); - } - function isIterateeCall(value2, index2, object) { - if (!isObject33(object)) { - return false; - } - var type2 = typeof index2; - if (type2 == "number" ? isArrayLike(object) && isIndex(index2, object.length) : type2 == "string" && index2 in object) { - return eq(object[index2], value2); - } - return false; - } - function isKey(value2, object) { - if (isArray87(value2)) { - return false; - } - var type2 = typeof value2; - if (type2 == "number" || type2 == "symbol" || type2 == "boolean" || value2 == null || isSymbol(value2)) { - return true; - } - return reIsPlainProp.test(value2) || !reIsDeepProp.test(value2) || object != null && value2 in Object2(object); - } - function isKeyable(value2) { - var type2 = typeof value2; - return type2 == "string" || type2 == "number" || type2 == "symbol" || type2 == "boolean" ? value2 !== "__proto__" : value2 === null; - } - function isLaziable(func) { - var funcName = getFuncName(func), other2 = lodash[funcName]; - if (typeof other2 != "function" || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other2) { - return true; - } - var data3 = getData(other2); - return !!data3 && func === data3[0]; - } - function isMasked(func) { - return !!maskSrcKey && maskSrcKey in func; - } - var isMaskable = coreJsData ? isFunction44 : stubFalse; - function isPrototype(value2) { - var Ctor = value2 && value2.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto4; - return value2 === proto; - } - function isStrictComparable(value2) { - return value2 === value2 && !isObject33(value2); - } - function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && (srcValue !== undefined2 || key in Object2(object)); - }; - } - function memoizeCapped(func) { - var result2 = memoize6(func, function(key) { - if (cache3.size === MAX_MEMOIZE_SIZE) { - cache3.clear(); - } - return key; - }); - var cache3 = result2.cache; - return result2; - } - function mergeData(data3, source) { - var bitmask = data3[1], srcBitmask = source[1], newBitmask = bitmask | srcBitmask, isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); - var isCombo = srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_CURRY_FLAG || srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_REARG_FLAG && data3[7].length <= source[8] || srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG) && source[7].length <= source[8] && bitmask == WRAP_CURRY_FLAG; - if (!(isCommon || isCombo)) { - return data3; - } - if (srcBitmask & WRAP_BIND_FLAG) { - data3[2] = source[2]; - newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; - } - var value2 = source[3]; - if (value2) { - var partials = data3[3]; - data3[3] = partials ? composeArgs(partials, value2, source[4]) : value2; - data3[4] = partials ? replaceHolders(data3[3], PLACEHOLDER) : source[4]; - } - value2 = source[5]; - if (value2) { - partials = data3[5]; - data3[5] = partials ? composeArgsRight(partials, value2, source[6]) : value2; - data3[6] = partials ? replaceHolders(data3[5], PLACEHOLDER) : source[6]; - } - value2 = source[7]; - if (value2) { - data3[7] = value2; - } - if (srcBitmask & WRAP_ARY_FLAG) { - data3[8] = data3[8] == null ? source[8] : nativeMin(data3[8], source[8]); - } - if (data3[9] == null) { - data3[9] = source[9]; - } - data3[0] = source[0]; - data3[1] = newBitmask; - return data3; - } - function nativeKeysIn(object) { - var result2 = []; - if (object != null) { - for (var key in Object2(object)) { - result2.push(key); - } - } - return result2; - } - function objectToString4(value2) { - return nativeObjectToString.call(value2); - } - function overRest(func, start, transform19) { - start = nativeMax(start === undefined2 ? func.length - 1 : start, 0); - return function() { - var args = arguments, index2 = -1, length5 = nativeMax(args.length - start, 0), array = Array2(length5); - while (++index2 < length5) { - array[index2] = args[start + index2]; - } - index2 = -1; - var otherArgs = Array2(start + 1); - while (++index2 < start) { - otherArgs[index2] = args[index2]; - } - otherArgs[start] = transform19(array); - return apply(func, this, otherArgs); - }; - } - function parent(object, path) { - return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); - } - function reorder(array, indexes) { - var arrLength = array.length, length5 = nativeMin(indexes.length, arrLength), oldArray = copyArray(array); - while (length5--) { - var index2 = indexes[length5]; - array[length5] = isIndex(index2, arrLength) ? oldArray[index2] : undefined2; - } - return array; - } - function safeGet(object, key) { - if (key === "constructor" && typeof object[key] === "function") { - return; - } - if (key == "__proto__") { - return; - } - return object[key]; - } - var setData = shortOut(baseSetData); - var setTimeout2 = ctxSetTimeout || function(func, wait) { - return root.setTimeout(func, wait); - }; - var setToString = shortOut(baseSetToString); - function setWrapToString(wrapper, reference, bitmask) { - var source = reference + ""; - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); - } - function shortOut(func) { - var count2 = 0, lastCalled = 0; - return function() { - var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); - lastCalled = stamp; - if (remaining > 0) { - if (++count2 >= HOT_COUNT) { - return arguments[0]; - } - } else { - count2 = 0; - } - return func.apply(undefined2, arguments); - }; - } - function shuffleSelf(array, size15) { - var index2 = -1, length5 = array.length, lastIndex = length5 - 1; - size15 = size15 === undefined2 ? length5 : size15; - while (++index2 < size15) { - var rand = baseRandom(index2, lastIndex), value2 = array[rand]; - array[rand] = array[index2]; - array[index2] = value2; - } - array.length = size15; - return array; - } - var stringToPath = memoizeCapped(function(string) { - var result2 = []; - if (string.charCodeAt(0) === 46) { - result2.push(""); - } - string.replace(rePropName, function(match, number, quote, subString) { - result2.push(quote ? subString.replace(reEscapeChar, "$1") : number || match); - }); - return result2; - }); - function toKey(value2) { - if (typeof value2 == "string" || isSymbol(value2)) { - return value2; - } - var result2 = value2 + ""; - return result2 == "0" && 1 / value2 == -INFINITY ? "-0" : result2; - } - function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e4) { - } - try { - return func + ""; - } catch (e4) { - } - } - return ""; - } - function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value2 = "_." + pair[0]; - if (bitmask & pair[1] && !arrayIncludes(details, value2)) { - details.push(value2); - } - }); - return details.sort(); - } - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result2 = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result2.__actions__ = copyArray(wrapper.__actions__); - result2.__index__ = wrapper.__index__; - result2.__values__ = wrapper.__values__; - return result2; - } - function chunk(array, size15, guard) { - if (guard ? isIterateeCall(array, size15, guard) : size15 === undefined2) { - size15 = 1; - } else { - size15 = nativeMax(toInteger(size15), 0); - } - var length5 = array == null ? 0 : array.length; - if (!length5 || size15 < 1) { - return []; - } - var index2 = 0, resIndex = 0, result2 = Array2(nativeCeil(length5 / size15)); - while (index2 < length5) { - result2[resIndex++] = baseSlice(array, index2, index2 += size15); - } - return result2; - } - function compact(array) { - var index2 = -1, length5 = array == null ? 0 : array.length, resIndex = 0, result2 = []; - while (++index2 < length5) { - var value2 = array[index2]; - if (value2) { - result2[resIndex++] = value2; - } - } - return result2; - } - function concat() { - var length5 = arguments.length; - if (!length5) { - return []; - } - var args = Array2(length5 - 1), array = arguments[0], index2 = length5; - while (index2--) { - args[index2 - 1] = arguments[index2]; - } - return arrayPush(isArray87(array) ? copyArray(array) : [array], baseFlatten(args, 1)); - } - var difference2 = baseRest(function(array, values5) { - return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values5, 1, isArrayLikeObject, true)) : []; - }); - var differenceBy = baseRest(function(array, values5) { - var iteratee2 = last17(values5); - if (isArrayLikeObject(iteratee2)) { - iteratee2 = undefined2; - } - return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values5, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2)) : []; - }); - var differenceWith = baseRest(function(array, values5) { - var comparator = last17(values5); - if (isArrayLikeObject(comparator)) { - comparator = undefined2; - } - return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values5, 1, isArrayLikeObject, true), undefined2, comparator) : []; - }); - function drop(array, n3, guard) { - var length5 = array == null ? 0 : array.length; - if (!length5) { - return []; - } - n3 = guard || n3 === undefined2 ? 1 : toInteger(n3); - return baseSlice(array, n3 < 0 ? 0 : n3, length5); - } - function dropRight(array, n3, guard) { - var length5 = array == null ? 0 : array.length; - if (!length5) { - return []; - } - n3 = guard || n3 === undefined2 ? 1 : toInteger(n3); - n3 = length5 - n3; - return baseSlice(array, 0, n3 < 0 ? 0 : n3); - } - function dropRightWhile(array, predicate) { - return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true, true) : []; - } - function dropWhile(array, predicate) { - return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true) : []; - } - function fill(array, value2, start, end2) { - var length5 = array == null ? 0 : array.length; - if (!length5) { - return []; - } - if (start && typeof start != "number" && isIterateeCall(array, value2, start)) { - start = 0; - end2 = length5; - } - return baseFill(array, value2, start, end2); - } - function findIndex3(array, predicate, fromIndex) { - var length5 = array == null ? 0 : array.length; - if (!length5) { - return -1; - } - var index2 = fromIndex == null ? 0 : toInteger(fromIndex); - if (index2 < 0) { - index2 = nativeMax(length5 + index2, 0); - } - return baseFindIndex(array, getIteratee(predicate, 3), index2); - } - function findLastIndex(array, predicate, fromIndex) { - var length5 = array == null ? 0 : array.length; - if (!length5) { - return -1; - } - var index2 = length5 - 1; - if (fromIndex !== undefined2) { - index2 = toInteger(fromIndex); - index2 = fromIndex < 0 ? nativeMax(length5 + index2, 0) : nativeMin(index2, length5 - 1); - } - return baseFindIndex(array, getIteratee(predicate, 3), index2, true); - } - function flatten9(array) { - var length5 = array == null ? 0 : array.length; - return length5 ? baseFlatten(array, 1) : []; - } - function flattenDeep(array) { - var length5 = array == null ? 0 : array.length; - return length5 ? baseFlatten(array, INFINITY) : []; - } - function flattenDepth(array, depth) { - var length5 = array == null ? 0 : array.length; - if (!length5) { - return []; - } - depth = depth === undefined2 ? 1 : toInteger(depth); - return baseFlatten(array, depth); - } - function fromPairs(pairs2) { - var index2 = -1, length5 = pairs2 == null ? 0 : pairs2.length, result2 = {}; - while (++index2 < length5) { - var pair = pairs2[index2]; - result2[pair[0]] = pair[1]; - } - return result2; - } - function head13(array) { - return array && array.length ? array[0] : undefined2; - } - function indexOf2(array, value2, fromIndex) { - var length5 = array == null ? 0 : array.length; - if (!length5) { - return -1; - } - var index2 = fromIndex == null ? 0 : toInteger(fromIndex); - if (index2 < 0) { - index2 = nativeMax(length5 + index2, 0); - } - return baseIndexOf(array, value2, index2); - } - function initial(array) { - var length5 = array == null ? 0 : array.length; - return length5 ? baseSlice(array, 0, -1) : []; - } - var intersection2 = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : []; - }); - var intersectionBy = baseRest(function(arrays) { - var iteratee2 = last17(arrays), mapped = arrayMap(arrays, castArrayLikeObject); - if (iteratee2 === last17(mapped)) { - iteratee2 = undefined2; - } else { - mapped.pop(); - } - return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, getIteratee(iteratee2, 2)) : []; - }); - var intersectionWith = baseRest(function(arrays) { - var comparator = last17(arrays), mapped = arrayMap(arrays, castArrayLikeObject); - comparator = typeof comparator == "function" ? comparator : undefined2; - if (comparator) { - mapped.pop(); - } - return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined2, comparator) : []; - }); - function join(array, separator) { - return array == null ? "" : nativeJoin.call(array, separator); - } - function last17(array) { - var length5 = array == null ? 0 : array.length; - return length5 ? array[length5 - 1] : undefined2; - } - function lastIndexOf(array, value2, fromIndex) { - var length5 = array == null ? 0 : array.length; - if (!length5) { - return -1; - } - var index2 = length5; - if (fromIndex !== undefined2) { - index2 = toInteger(fromIndex); - index2 = index2 < 0 ? nativeMax(length5 + index2, 0) : nativeMin(index2, length5 - 1); - } - return value2 === value2 ? strictLastIndexOf(array, value2, index2) : baseFindIndex(array, baseIsNaN, index2, true); - } - function nth(array, n3) { - return array && array.length ? baseNth(array, toInteger(n3)) : undefined2; - } - var pull = baseRest(pullAll); - function pullAll(array, values5) { - return array && array.length && values5 && values5.length ? basePullAll(array, values5) : array; - } - function pullAllBy(array, values5, iteratee2) { - return array && array.length && values5 && values5.length ? basePullAll(array, values5, getIteratee(iteratee2, 2)) : array; - } - function pullAllWith(array, values5, comparator) { - return array && array.length && values5 && values5.length ? basePullAll(array, values5, undefined2, comparator) : array; - } - var pullAt = flatRest(function(array, indexes) { - var length5 = array == null ? 0 : array.length, result2 = baseAt(array, indexes); - basePullAt(array, arrayMap(indexes, function(index2) { - return isIndex(index2, length5) ? +index2 : index2; - }).sort(compareAscending)); - return result2; - }); - function remove2(array, predicate) { - var result2 = []; - if (!(array && array.length)) { - return result2; - } - var index2 = -1, indexes = [], length5 = array.length; - predicate = getIteratee(predicate, 3); - while (++index2 < length5) { - var value2 = array[index2]; - if (predicate(value2, index2, array)) { - result2.push(value2); - indexes.push(index2); - } - } - basePullAt(array, indexes); - return result2; - } - function reverse(array) { - return array == null ? array : nativeReverse.call(array); - } - function slice(array, start, end2) { - var length5 = array == null ? 0 : array.length; - if (!length5) { - return []; - } - if (end2 && typeof end2 != "number" && isIterateeCall(array, start, end2)) { - start = 0; - end2 = length5; - } else { - start = start == null ? 0 : toInteger(start); - end2 = end2 === undefined2 ? length5 : toInteger(end2); - } - return baseSlice(array, start, end2); - } - function sortedIndex(array, value2) { - return baseSortedIndex(array, value2); - } - function sortedIndexBy(array, value2, iteratee2) { - return baseSortedIndexBy(array, value2, getIteratee(iteratee2, 2)); - } - function sortedIndexOf(array, value2) { - var length5 = array == null ? 0 : array.length; - if (length5) { - var index2 = baseSortedIndex(array, value2); - if (index2 < length5 && eq(array[index2], value2)) { - return index2; - } - } - return -1; - } - function sortedLastIndex(array, value2) { - return baseSortedIndex(array, value2, true); - } - function sortedLastIndexBy(array, value2, iteratee2) { - return baseSortedIndexBy(array, value2, getIteratee(iteratee2, 2), true); - } - function sortedLastIndexOf(array, value2) { - var length5 = array == null ? 0 : array.length; - if (length5) { - var index2 = baseSortedIndex(array, value2, true) - 1; - if (eq(array[index2], value2)) { - return index2; - } - } - return -1; - } - function sortedUniq(array) { - return array && array.length ? baseSortedUniq(array) : []; - } - function sortedUniqBy(array, iteratee2) { - return array && array.length ? baseSortedUniq(array, getIteratee(iteratee2, 2)) : []; - } - function tail(array) { - var length5 = array == null ? 0 : array.length; - return length5 ? baseSlice(array, 1, length5) : []; - } - function take(array, n3, guard) { - if (!(array && array.length)) { - return []; - } - n3 = guard || n3 === undefined2 ? 1 : toInteger(n3); - return baseSlice(array, 0, n3 < 0 ? 0 : n3); - } - function takeRight(array, n3, guard) { - var length5 = array == null ? 0 : array.length; - if (!length5) { - return []; - } - n3 = guard || n3 === undefined2 ? 1 : toInteger(n3); - n3 = length5 - n3; - return baseSlice(array, n3 < 0 ? 0 : n3, length5); - } - function takeRightWhile(array, predicate) { - return array && array.length ? baseWhile(array, getIteratee(predicate, 3), false, true) : []; - } - function takeWhile(array, predicate) { - return array && array.length ? baseWhile(array, getIteratee(predicate, 3)) : []; - } - var union = baseRest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); - }); - var unionBy = baseRest(function(arrays) { - var iteratee2 = last17(arrays); - if (isArrayLikeObject(iteratee2)) { - iteratee2 = undefined2; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2)); - }); - var unionWith = baseRest(function(arrays) { - var comparator = last17(arrays); - comparator = typeof comparator == "function" ? comparator : undefined2; - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined2, comparator); - }); - function uniq10(array) { - return array && array.length ? baseUniq(array) : []; - } - function uniqBy(array, iteratee2) { - return array && array.length ? baseUniq(array, getIteratee(iteratee2, 2)) : []; - } - function uniqWith(array, comparator) { - comparator = typeof comparator == "function" ? comparator : undefined2; - return array && array.length ? baseUniq(array, undefined2, comparator) : []; - } - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var length5 = 0; - array = arrayFilter(array, function(group3) { - if (isArrayLikeObject(group3)) { - length5 = nativeMax(group3.length, length5); - return true; - } - }); - return baseTimes(length5, function(index2) { - return arrayMap(array, baseProperty(index2)); - }); - } - function unzipWith(array, iteratee2) { - if (!(array && array.length)) { - return []; - } - var result2 = unzip(array); - if (iteratee2 == null) { - return result2; - } - return arrayMap(result2, function(group3) { - return apply(iteratee2, undefined2, group3); - }); - } - var without = baseRest(function(array, values5) { - return isArrayLikeObject(array) ? baseDifference(array, values5) : []; - }); - var xor = baseRest(function(arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)); - }); - var xorBy = baseRest(function(arrays) { - var iteratee2 = last17(arrays); - if (isArrayLikeObject(iteratee2)) { - iteratee2 = undefined2; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee2, 2)); - }); - var xorWith = baseRest(function(arrays) { - var comparator = last17(arrays); - comparator = typeof comparator == "function" ? comparator : undefined2; - return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined2, comparator); - }); - var zip = baseRest(unzip); - function zipObject2(props, values5) { - return baseZipObject(props || [], values5 || [], assignValue); - } - function zipObjectDeep(props, values5) { - return baseZipObject(props || [], values5 || [], baseSet); - } - var zipWith = baseRest(function(arrays) { - var length5 = arrays.length, iteratee2 = length5 > 1 ? arrays[length5 - 1] : undefined2; - iteratee2 = typeof iteratee2 == "function" ? (arrays.pop(), iteratee2) : undefined2; - return unzipWith(arrays, iteratee2); - }); - function chain(value2) { - var result2 = lodash(value2); - result2.__chain__ = true; - return result2; - } - function tap(value2, interceptor) { - interceptor(value2); - return value2; - } - function thru(value2, interceptor) { - return interceptor(value2); - } - var wrapperAt = flatRest(function(paths) { - var length5 = paths.length, start = length5 ? paths[0] : 0, value2 = this.__wrapped__, interceptor = function(object) { - return baseAt(object, paths); - }; - if (length5 > 1 || this.__actions__.length || !(value2 instanceof LazyWrapper) || !isIndex(start)) { - return this.thru(interceptor); - } - value2 = value2.slice(start, +start + (length5 ? 1 : 0)); - value2.__actions__.push({ - "func": thru, - "args": [interceptor], - "thisArg": undefined2 - }); - return new LodashWrapper(value2, this.__chain__).thru(function(array) { - if (length5 && !array.length) { - array.push(undefined2); - } - return array; - }); - }); - function wrapperChain() { - return chain(this); - } - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } - function wrapperNext() { - if (this.__values__ === undefined2) { - this.__values__ = toArray3(this.value()); - } - var done = this.__index__ >= this.__values__.length, value2 = done ? undefined2 : this.__values__[this.__index__++]; - return { "done": done, "value": value2 }; - } - function wrapperToIterator() { - return this; - } - function wrapperPlant(value2) { - var result2, parent2 = this; - while (parent2 instanceof baseLodash) { - var clone42 = wrapperClone(parent2); - clone42.__index__ = 0; - clone42.__values__ = undefined2; - if (result2) { - previous.__wrapped__ = clone42; - } else { - result2 = clone42; - } - var previous = clone42; - parent2 = parent2.__wrapped__; - } - previous.__wrapped__ = value2; - return result2; - } - function wrapperReverse() { - var value2 = this.__wrapped__; - if (value2 instanceof LazyWrapper) { - var wrapped = value2; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - "func": thru, - "args": [reverse], - "thisArg": undefined2 - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - var countBy = createAggregator(function(result2, value2, key) { - if (hasOwnProperty.call(result2, key)) { - ++result2[key]; - } else { - baseAssignValue(result2, key, 1); - } - }); - function every4(collection, predicate, guard) { - var func = isArray87(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined2; - } - return func(collection, getIteratee(predicate, 3)); - } - function filter17(collection, predicate) { - var func = isArray87(collection) ? arrayFilter : baseFilter; - return func(collection, getIteratee(predicate, 3)); - } - var find11 = createFind(findIndex3); - var findLast = createFind(findLastIndex); - function flatMap(collection, iteratee2) { - return baseFlatten(map23(collection, iteratee2), 1); - } - function flatMapDeep(collection, iteratee2) { - return baseFlatten(map23(collection, iteratee2), INFINITY); - } - function flatMapDepth(collection, iteratee2, depth) { - depth = depth === undefined2 ? 1 : toInteger(depth); - return baseFlatten(map23(collection, iteratee2), depth); - } - function forEach4(collection, iteratee2) { - var func = isArray87(collection) ? arrayEach : baseEach; - return func(collection, getIteratee(iteratee2, 3)); - } - function forEachRight(collection, iteratee2) { - var func = isArray87(collection) ? arrayEachRight : baseEachRight; - return func(collection, getIteratee(iteratee2, 3)); - } - var groupBy12 = createAggregator(function(result2, value2, key) { - if (hasOwnProperty.call(result2, key)) { - result2[key].push(value2); - } else { - baseAssignValue(result2, key, [value2]); - } - }); - function includes2(collection, value2, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values4(collection); - fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0; - var length5 = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length5 + fromIndex, 0); - } - return isString67(collection) ? fromIndex <= length5 && collection.indexOf(value2, fromIndex) > -1 : !!length5 && baseIndexOf(collection, value2, fromIndex) > -1; - } - var invokeMap = baseRest(function(collection, path, args) { - var index2 = -1, isFunc = typeof path == "function", result2 = isArrayLike(collection) ? Array2(collection.length) : []; - baseEach(collection, function(value2) { - result2[++index2] = isFunc ? apply(path, value2, args) : baseInvoke(value2, path, args); - }); - return result2; - }); - var keyBy = createAggregator(function(result2, value2, key) { - baseAssignValue(result2, key, value2); - }); - function map23(collection, iteratee2) { - var func = isArray87(collection) ? arrayMap : baseMap; - return func(collection, getIteratee(iteratee2, 3)); - } - function orderBy(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (!isArray87(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - orders = guard ? undefined2 : orders; - if (!isArray87(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseOrderBy(collection, iteratees, orders); - } - var partition3 = createAggregator(function(result2, value2, key) { - result2[key ? 0 : 1].push(value2); - }, function() { - return [[], []]; - }); - function reduce11(collection, iteratee2, accumulator) { - var func = isArray87(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3; - return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEach); - } - function reduceRight(collection, iteratee2, accumulator) { - var func = isArray87(collection) ? arrayReduceRight : baseReduce, initAccum = arguments.length < 3; - return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEachRight); - } - function reject(collection, predicate) { - var func = isArray87(collection) ? arrayFilter : baseFilter; - return func(collection, negate4(getIteratee(predicate, 3))); - } - function sample(collection) { - var func = isArray87(collection) ? arraySample : baseSample; - return func(collection); - } - function sampleSize(collection, n3, guard) { - if (guard ? isIterateeCall(collection, n3, guard) : n3 === undefined2) { - n3 = 1; - } else { - n3 = toInteger(n3); - } - var func = isArray87(collection) ? arraySampleSize : baseSampleSize; - return func(collection, n3); - } - function shuffle3(collection) { - var func = isArray87(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } - function size14(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - return isString67(collection) ? stringSize(collection) : collection.length; - } - var tag = getTag(collection); - if (tag == mapTag4 || tag == setTag5) { - return collection.size; - } - return baseKeys(collection).length; - } - function some5(collection, predicate, guard) { - var func = isArray87(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined2; - } - return func(collection, getIteratee(predicate, 3)); - } - var sortBy2 = baseRest(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length5 = iteratees.length; - if (length5 > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length5 > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []); - }); - var now2 = ctxNow || function() { - return root.Date.now(); - }; - function after(n3, func) { - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - n3 = toInteger(n3); - return function() { - if (--n3 < 1) { - return func.apply(this, arguments); - } - }; - } - function ary(func, n3, guard) { - n3 = guard ? undefined2 : n3; - n3 = func && n3 == null ? func.length : n3; - return createWrap(func, WRAP_ARY_FLAG, undefined2, undefined2, undefined2, undefined2, n3); - } - function before(n3, func) { - var result2; - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - n3 = toInteger(n3); - return function() { - if (--n3 > 0) { - result2 = func.apply(this, arguments); - } - if (n3 <= 1) { - func = undefined2; - } - return result2; - }; - } - var bind3 = baseRest(function(func, thisArg, partials) { - var bitmask = WRAP_BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind3)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(func, bitmask, thisArg, partials, holders); - }); - var bindKey = baseRest(function(object, key, partials) { - var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(key, bitmask, object, partials, holders); - }); - function curry(func, arity, guard) { - arity = guard ? undefined2 : arity; - var result2 = createWrap(func, WRAP_CURRY_FLAG, undefined2, undefined2, undefined2, undefined2, undefined2, arity); - result2.placeholder = curry.placeholder; - return result2; - } - function curryRight(func, arity, guard) { - arity = guard ? undefined2 : arity; - var result2 = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined2, undefined2, undefined2, undefined2, undefined2, arity); - result2.placeholder = curryRight.placeholder; - return result2; - } - function debounce5(func, wait, options) { - var lastArgs, lastThis, maxWait, result2, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject33(options)) { - leading = !!options.leading; - maxing = "maxWait" in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = "trailing" in options ? !!options.trailing : trailing; - } - function invokeFunc(time2) { - var args = lastArgs, thisArg = lastThis; - lastArgs = lastThis = undefined2; - lastInvokeTime = time2; - result2 = func.apply(thisArg, args); - return result2; - } - function leadingEdge(time2) { - lastInvokeTime = time2; - timerId = setTimeout2(timerExpired, wait); - return leading ? invokeFunc(time2) : result2; - } - function remainingWait(time2) { - var timeSinceLastCall = time2 - lastCallTime, timeSinceLastInvoke = time2 - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; - return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; - } - function shouldInvoke(time2) { - var timeSinceLastCall = time2 - lastCallTime, timeSinceLastInvoke = time2 - lastInvokeTime; - return lastCallTime === undefined2 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; - } - function timerExpired() { - var time2 = now2(); - if (shouldInvoke(time2)) { - return trailingEdge(time2); - } - timerId = setTimeout2(timerExpired, remainingWait(time2)); - } - function trailingEdge(time2) { - timerId = undefined2; - if (trailing && lastArgs) { - return invokeFunc(time2); - } - lastArgs = lastThis = undefined2; - return result2; - } - function cancel() { - if (timerId !== undefined2) { - clearTimeout2(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined2; - } - function flush() { - return timerId === undefined2 ? result2 : trailingEdge(now2()); - } - function debounced() { - var time2 = now2(), isInvoking = shouldInvoke(time2); - lastArgs = arguments; - lastThis = this; - lastCallTime = time2; - if (isInvoking) { - if (timerId === undefined2) { - return leadingEdge(lastCallTime); - } - if (maxing) { - clearTimeout2(timerId); - timerId = setTimeout2(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined2) { - timerId = setTimeout2(timerExpired, wait); - } - return result2; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - function flip(func) { - return createWrap(func, WRAP_FLIP_FLAG); - } - function memoize6(func, resolver) { - if (typeof func != "function" || resolver != null && typeof resolver != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache3 = memoized.cache; - if (cache3.has(key)) { - return cache3.get(key); - } - var result2 = func.apply(this, args); - memoized.cache = cache3.set(key, result2) || cache3; - return result2; - }; - memoized.cache = new (memoize6.Cache || MapCache)(); - return memoized; - } - memoize6.Cache = MapCache; - function negate4(predicate) { - if (typeof predicate != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - return function() { - var args = arguments; - switch (args.length) { - case 0: - return !predicate.call(this); - case 1: - return !predicate.call(this, args[0]); - case 2: - return !predicate.call(this, args[0], args[1]); - case 3: - return !predicate.call(this, args[0], args[1], args[2]); - } - return !predicate.apply(this, args); - }; - } - function once(func) { - return before(2, func); - } - var overArgs = castRest(function(func, transforms) { - transforms = transforms.length == 1 && isArray87(transforms[0]) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); - var funcsLength = transforms.length; - return baseRest(function(args) { - var index2 = -1, length5 = nativeMin(args.length, funcsLength); - while (++index2 < length5) { - args[index2] = transforms[index2].call(this, args[index2]); - } - return apply(func, this, args); - }); - }); - var partial = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partial)); - return createWrap(func, WRAP_PARTIAL_FLAG, undefined2, partials, holders); - }); - var partialRight = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partialRight)); - return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined2, partials, holders); - }); - var rearg = flatRest(function(func, indexes) { - return createWrap(func, WRAP_REARG_FLAG, undefined2, undefined2, undefined2, indexes); - }); - function rest(func, start) { - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - start = start === undefined2 ? start : toInteger(start); - return baseRest(func, start); - } - function spread(func, start) { - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - start = start == null ? 0 : nativeMax(toInteger(start), 0); - return baseRest(function(args) { - var array = args[start], otherArgs = castSlice(args, 0, start); - if (array) { - arrayPush(otherArgs, array); - } - return apply(func, this, otherArgs); - }); - } - function throttle6(func, wait, options) { - var leading = true, trailing = true; - if (typeof func != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - if (isObject33(options)) { - leading = "leading" in options ? !!options.leading : leading; - trailing = "trailing" in options ? !!options.trailing : trailing; - } - return debounce5(func, wait, { - "leading": leading, - "maxWait": wait, - "trailing": trailing - }); - } - function unary(func) { - return ary(func, 1); - } - function wrap(value2, wrapper) { - return partial(castFunction(wrapper), value2); - } - function castArray() { - if (!arguments.length) { - return []; - } - var value2 = arguments[0]; - return isArray87(value2) ? value2 : [value2]; - } - function clone41(value2) { - return baseClone(value2, CLONE_SYMBOLS_FLAG); - } - function cloneWith(value2, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return baseClone(value2, CLONE_SYMBOLS_FLAG, customizer); - } - function cloneDeep(value2) { - return baseClone(value2, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); - } - function cloneDeepWith(value2, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return baseClone(value2, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); - } - function conformsTo(object, source) { - return source == null || baseConformsTo(object, source, keys6(source)); - } - function eq(value2, other2) { - return value2 === other2 || value2 !== value2 && other2 !== other2; - } - var gt = createRelationalOperation(baseGt); - var gte = createRelationalOperation(function(value2, other2) { - return value2 >= other2; - }); - var isArguments = baseIsArguments(function() { - return arguments; - }()) ? baseIsArguments : function(value2) { - return isObjectLike5(value2) && hasOwnProperty.call(value2, "callee") && !propertyIsEnumerable.call(value2, "callee"); - }; - var isArray87 = Array2.isArray; - var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; - function isArrayLike(value2) { - return value2 != null && isLength4(value2.length) && !isFunction44(value2); - } - function isArrayLikeObject(value2) { - return isObjectLike5(value2) && isArrayLike(value2); - } - function isBoolean10(value2) { - return value2 === true || value2 === false || isObjectLike5(value2) && baseGetTag(value2) == boolTag4; - } - var isBuffer = nativeIsBuffer || stubFalse; - var isDate3 = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - function isElement3(value2) { - return isObjectLike5(value2) && value2.nodeType === 1 && !isPlainObject10(value2); - } - function isEmpty14(value2) { - if (value2 == null) { - return true; - } - if (isArrayLike(value2) && (isArray87(value2) || typeof value2 == "string" || typeof value2.splice == "function" || isBuffer(value2) || isTypedArray4(value2) || isArguments(value2))) { - return !value2.length; - } - var tag = getTag(value2); - if (tag == mapTag4 || tag == setTag5) { - return !value2.size; - } - if (isPrototype(value2)) { - return !baseKeys(value2).length; - } - for (var key in value2) { - if (hasOwnProperty.call(value2, key)) { - return false; - } - } - return true; - } - function isEqual24(value2, other2) { - return baseIsEqual(value2, other2); - } - function isEqualWith(value2, other2, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - var result2 = customizer ? customizer(value2, other2) : undefined2; - return result2 === undefined2 ? baseIsEqual(value2, other2, undefined2, customizer) : !!result2; - } - function isError(value2) { - if (!isObjectLike5(value2)) { - return false; - } - var tag = baseGetTag(value2); - return tag == errorTag4 || tag == domExcTag || typeof value2.message == "string" && typeof value2.name == "string" && !isPlainObject10(value2); - } - function isFinite2(value2) { - return typeof value2 == "number" && nativeIsFinite(value2); - } - function isFunction44(value2) { - if (!isObject33(value2)) { - return false; - } - var tag = baseGetTag(value2); - return tag == funcTag4 || tag == genTag || tag == asyncTag || tag == proxyTag; - } - function isInteger2(value2) { - return typeof value2 == "number" && value2 == toInteger(value2); - } - function isLength4(value2) { - return typeof value2 == "number" && value2 > -1 && value2 % 1 == 0 && value2 <= MAX_SAFE_INTEGER4; - } - function isObject33(value2) { - var type2 = typeof value2; - return value2 != null && (type2 == "object" || type2 == "function"); - } - function isObjectLike5(value2) { - return value2 != null && typeof value2 == "object"; - } - var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - function isMatch2(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); - } - function isMatchWith(object, source, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return baseIsMatch(object, source, getMatchData(source), customizer); - } - function isNaN6(value2) { - return isNumber57(value2) && value2 != +value2; - } - function isNative(value2) { - if (isMaskable(value2)) { - throw new Error2(CORE_ERROR_TEXT); - } - return baseIsNative(value2); - } - function isNull3(value2) { - return value2 === null; - } - function isNil67(value2) { - return value2 == null; - } - function isNumber57(value2) { - return typeof value2 == "number" || isObjectLike5(value2) && baseGetTag(value2) == numberTag4; - } - function isPlainObject10(value2) { - if (!isObjectLike5(value2) || baseGetTag(value2) != objectTag4) { - return false; - } - var proto = getPrototype(value2); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, "constructor") && proto.constructor; - return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; - } - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - function isSafeInteger(value2) { - return isInteger2(value2) && value2 >= -MAX_SAFE_INTEGER4 && value2 <= MAX_SAFE_INTEGER4; - } - var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - function isString67(value2) { - return typeof value2 == "string" || !isArray87(value2) && isObjectLike5(value2) && baseGetTag(value2) == stringTag4; - } - function isSymbol(value2) { - return typeof value2 == "symbol" || isObjectLike5(value2) && baseGetTag(value2) == symbolTag; - } - var isTypedArray4 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray4; - function isUndefined5(value2) { - return value2 === undefined2; - } - function isWeakMap(value2) { - return isObjectLike5(value2) && getTag(value2) == weakMapTag4; - } - function isWeakSet(value2) { - return isObjectLike5(value2) && baseGetTag(value2) == weakSetTag; - } - var lt = createRelationalOperation(baseLt); - var lte = createRelationalOperation(function(value2, other2) { - return value2 <= other2; - }); - function toArray3(value2) { - if (!value2) { - return []; - } - if (isArrayLike(value2)) { - return isString67(value2) ? stringToArray(value2) : copyArray(value2); - } - if (symIterator && value2[symIterator]) { - return iteratorToArray(value2[symIterator]()); - } - var tag = getTag(value2), func = tag == mapTag4 ? mapToArray : tag == setTag5 ? setToArray : values4; - return func(value2); - } - function toFinite(value2) { - if (!value2) { - return value2 === 0 ? value2 : 0; - } - value2 = toNumber(value2); - if (value2 === INFINITY || value2 === -INFINITY) { - var sign = value2 < 0 ? -1 : 1; - return sign * MAX_INTEGER; - } - return value2 === value2 ? value2 : 0; - } - function toInteger(value2) { - var result2 = toFinite(value2), remainder = result2 % 1; - return result2 === result2 ? remainder ? result2 - remainder : result2 : 0; - } - function toLength(value2) { - return value2 ? baseClamp(toInteger(value2), 0, MAX_ARRAY_LENGTH) : 0; - } - function toNumber(value2) { - if (typeof value2 == "number") { - return value2; - } - if (isSymbol(value2)) { - return NAN; - } - if (isObject33(value2)) { - var other2 = typeof value2.valueOf == "function" ? value2.valueOf() : value2; - value2 = isObject33(other2) ? other2 + "" : other2; - } - if (typeof value2 != "string") { - return value2 === 0 ? value2 : +value2; - } - value2 = baseTrim(value2); - var isBinary2 = reIsBinary.test(value2); - return isBinary2 || reIsOctal.test(value2) ? freeParseInt(value2.slice(2), isBinary2 ? 2 : 8) : reIsBadHex.test(value2) ? NAN : +value2; - } - function toPlainObject(value2) { - return copyObject(value2, keysIn(value2)); - } - function toSafeInteger(value2) { - return value2 ? baseClamp(toInteger(value2), -MAX_SAFE_INTEGER4, MAX_SAFE_INTEGER4) : value2 === 0 ? value2 : 0; - } - function toString7(value2) { - return value2 == null ? "" : baseToString(value2); - } - var assign14 = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys6(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } - }); - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); - var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys6(source), object, customizer); - }); - var at = flatRest(baseAt); - function create8(prototype, properties) { - var result2 = baseCreate(prototype); - return properties == null ? result2 : baseAssign(result2, properties); - } - var defaults = baseRest(function(object, sources) { - object = Object2(object); - var index2 = -1; - var length5 = sources.length; - var guard = length5 > 2 ? sources[2] : undefined2; - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - length5 = 1; - } - while (++index2 < length5) { - var source = sources[index2]; - var props = keysIn(source); - var propsIndex = -1; - var propsLength = props.length; - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value2 = object[key]; - if (value2 === undefined2 || eq(value2, objectProto4[key]) && !hasOwnProperty.call(object, key)) { - object[key] = source[key]; - } - } - } - return object; - }); - var defaultsDeep = baseRest(function(args) { - args.push(undefined2, customDefaultsMerge); - return apply(mergeWith, undefined2, args); - }); - function findKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); - } - function findLastKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); - } - function forIn2(object, iteratee2) { - return object == null ? object : baseFor(object, getIteratee(iteratee2, 3), keysIn); - } - function forInRight(object, iteratee2) { - return object == null ? object : baseForRight(object, getIteratee(iteratee2, 3), keysIn); - } - function forOwn(object, iteratee2) { - return object && baseForOwn(object, getIteratee(iteratee2, 3)); - } - function forOwnRight(object, iteratee2) { - return object && baseForOwnRight(object, getIteratee(iteratee2, 3)); - } - function functions(object) { - return object == null ? [] : baseFunctions(object, keys6(object)); - } - function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); - } - function get100(object, path, defaultValue) { - var result2 = object == null ? undefined2 : baseGet(object, path); - return result2 === undefined2 ? defaultValue : result2; - } - function has(object, path) { - return object != null && hasPath2(object, path, baseHas); - } - function hasIn(object, path) { - return object != null && hasPath2(object, path, baseHasIn); - } - var invert5 = createInverter(function(result2, value2, key) { - if (value2 != null && typeof value2.toString != "function") { - value2 = nativeObjectToString.call(value2); - } - result2[value2] = key; - }, constant2(identity4)); - var invertBy = createInverter(function(result2, value2, key) { - if (value2 != null && typeof value2.toString != "function") { - value2 = nativeObjectToString.call(value2); - } - if (hasOwnProperty.call(result2, value2)) { - result2[value2].push(key); - } else { - result2[value2] = [key]; - } - }, getIteratee); - var invoke = baseRest(baseInvoke); - function keys6(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - function mapKeys(object, iteratee2) { - var result2 = {}; - iteratee2 = getIteratee(iteratee2, 3); - baseForOwn(object, function(value2, key, object2) { - baseAssignValue(result2, iteratee2(value2, key, object2), value2); - }); - return result2; - } - function mapValues2(object, iteratee2) { - var result2 = {}; - iteratee2 = getIteratee(iteratee2, 3); - baseForOwn(object, function(value2, key, object2) { - baseAssignValue(result2, key, iteratee2(value2, key, object2)); - }); - return result2; - } - var merge3 = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); - var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { - baseMerge(object, source, srcIndex, customizer); - }); - var omit6 = flatRest(function(object, paths) { - var result2 = {}; - if (object == null) { - return result2; - } - var isDeep = false; - paths = arrayMap(paths, function(path) { - path = castPath(path, object); - isDeep || (isDeep = path.length > 1); - return path; - }); - copyObject(object, getAllKeysIn(object), result2); - if (isDeep) { - result2 = baseClone(result2, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); - } - var length5 = paths.length; - while (length5--) { - baseUnset(result2, paths[length5]); - } - return result2; - }); - function omitBy(object, predicate) { - return pickBy(object, negate4(getIteratee(predicate))); - } - var pick5 = flatRest(function(object, paths) { - return object == null ? {} : basePick(object, paths); - }); - function pickBy(object, predicate) { - if (object == null) { - return {}; - } - var props = arrayMap(getAllKeysIn(object), function(prop) { - return [prop]; - }); - predicate = getIteratee(predicate); - return basePickBy(object, props, function(value2, path) { - return predicate(value2, path[0]); - }); - } - function result(object, path, defaultValue) { - path = castPath(path, object); - var index2 = -1, length5 = path.length; - if (!length5) { - length5 = 1; - object = undefined2; - } - while (++index2 < length5) { - var value2 = object == null ? undefined2 : object[toKey(path[index2])]; - if (value2 === undefined2) { - index2 = length5; - value2 = defaultValue; - } - object = isFunction44(value2) ? value2.call(object) : value2; - } - return object; - } - function set13(object, path, value2) { - return object == null ? object : baseSet(object, path, value2); - } - function setWith(object, path, value2, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return object == null ? object : baseSet(object, path, value2, customizer); - } - var toPairs = createToPairs(keys6); - var toPairsIn = createToPairs(keysIn); - function transform18(object, iteratee2, accumulator) { - var isArr = isArray87(object), isArrLike = isArr || isBuffer(object) || isTypedArray4(object); - iteratee2 = getIteratee(iteratee2, 4); - if (accumulator == null) { - var Ctor = object && object.constructor; - if (isArrLike) { - accumulator = isArr ? new Ctor() : []; - } else if (isObject33(object)) { - accumulator = isFunction44(Ctor) ? baseCreate(getPrototype(object)) : {}; - } else { - accumulator = {}; - } - } - (isArrLike ? arrayEach : baseForOwn)(object, function(value2, index2, object2) { - return iteratee2(accumulator, value2, index2, object2); - }); - return accumulator; - } - function unset(object, path) { - return object == null ? true : baseUnset(object, path); - } - function update15(object, path, updater) { - return object == null ? object : baseUpdate2(object, path, castFunction(updater)); - } - function updateWith(object, path, updater, customizer) { - customizer = typeof customizer == "function" ? customizer : undefined2; - return object == null ? object : baseUpdate2(object, path, castFunction(updater), customizer); - } - function values4(object) { - return object == null ? [] : baseValues(object, keys6(object)); - } - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)); - } - function clamp12(number, lower, upper) { - if (upper === undefined2) { - upper = lower; - lower = undefined2; - } - if (upper !== undefined2) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined2) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); - } - function inRange(number, start, end2) { - start = toFinite(start); - if (end2 === undefined2) { - end2 = start; - start = 0; - } else { - end2 = toFinite(end2); - } - number = toNumber(number); - return baseInRange(number, start, end2); - } - function random5(lower, upper, floating) { - if (floating && typeof floating != "boolean" && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined2; - } - if (floating === undefined2) { - if (typeof upper == "boolean") { - floating = upper; - upper = undefined2; - } else if (typeof lower == "boolean") { - floating = lower; - lower = undefined2; - } - } - if (lower === undefined2 && upper === undefined2) { - lower = 0; - upper = 1; - } else { - lower = toFinite(lower); - if (upper === undefined2) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + rand * (upper - lower + freeParseFloat("1e-" + ((rand + "").length - 1))), upper); - } - return baseRandom(lower, upper); - } - var camelCase = createCompounder(function(result2, word2, index2) { - word2 = word2.toLowerCase(); - return result2 + (index2 ? capitalize(word2) : word2); - }); - function capitalize(string) { - return upperFirst8(toString7(string).toLowerCase()); - } - function deburr(string) { - string = toString7(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ""); - } - function endsWith(string, target, position2) { - string = toString7(string); - target = baseToString(target); - var length5 = string.length; - position2 = position2 === undefined2 ? length5 : baseClamp(toInteger(position2), 0, length5); - var end2 = position2; - position2 -= target.length; - return position2 >= 0 && string.slice(position2, end2) == target; - } - function escape(string) { - string = toString7(string); - return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string; - } - function escapeRegExp(string) { - string = toString7(string); - return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, "\\$&") : string; - } - var kebabCase2 = createCompounder(function(result2, word2, index2) { - return result2 + (index2 ? "-" : "") + word2.toLowerCase(); - }); - var lowerCase4 = createCompounder(function(result2, word2, index2) { - return result2 + (index2 ? " " : "") + word2.toLowerCase(); - }); - var lowerFirst = createCaseFirst("toLowerCase"); - function pad2(string, length5, chars) { - string = toString7(string); - length5 = toInteger(length5); - var strLength = length5 ? stringSize(string) : 0; - if (!length5 || strLength >= length5) { - return string; - } - var mid2 = (length5 - strLength) / 2; - return createPadding(nativeFloor(mid2), chars) + string + createPadding(nativeCeil(mid2), chars); - } - function padEnd2(string, length5, chars) { - string = toString7(string); - length5 = toInteger(length5); - var strLength = length5 ? stringSize(string) : 0; - return length5 && strLength < length5 ? string + createPadding(length5 - strLength, chars) : string; - } - function padStart2(string, length5, chars) { - string = toString7(string); - length5 = toInteger(length5); - var strLength = length5 ? stringSize(string) : 0; - return length5 && strLength < length5 ? createPadding(length5 - strLength, chars) + string : string; - } - function parseInt2(string, radix, guard) { - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - return nativeParseInt(toString7(string).replace(reTrimStart, ""), radix || 0); - } - function repeat2(string, n3, guard) { - if (guard ? isIterateeCall(string, n3, guard) : n3 === undefined2) { - n3 = 1; - } else { - n3 = toInteger(n3); - } - return baseRepeat(toString7(string), n3); - } - function replace() { - var args = arguments, string = toString7(args[0]); - return args.length < 3 ? string : string.replace(args[1], args[2]); - } - var snakeCase = createCompounder(function(result2, word2, index2) { - return result2 + (index2 ? "_" : "") + word2.toLowerCase(); - }); - function split(string, separator, limit) { - if (limit && typeof limit != "number" && isIterateeCall(string, separator, limit)) { - separator = limit = undefined2; - } - limit = limit === undefined2 ? MAX_ARRAY_LENGTH : limit >>> 0; - if (!limit) { - return []; - } - string = toString7(string); - if (string && (typeof separator == "string" || separator != null && !isRegExp(separator))) { - separator = baseToString(separator); - if (!separator && hasUnicode(string)) { - return castSlice(stringToArray(string), 0, limit); - } - } - return string.split(separator, limit); - } - var startCase = createCompounder(function(result2, word2, index2) { - return result2 + (index2 ? " " : "") + upperFirst8(word2); - }); - function startsWith(string, target, position2) { - string = toString7(string); - position2 = position2 == null ? 0 : baseClamp(toInteger(position2), 0, string.length); - target = baseToString(target); - return string.slice(position2, position2 + target.length) == target; - } - function template2(string, options, guard) { - var settings = lodash.templateSettings; - if (guard && isIterateeCall(string, options, guard)) { - options = undefined2; - } - string = toString7(string); - options = assignInWith({}, options, settings, customDefaultsAssignIn); - var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), importsKeys = keys6(imports), importsValues = baseValues(imports, importsKeys); - var isEscaping, isEvaluating, index2 = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '"; - var reDelimiters = RegExp2((options.escape || reNoMatch).source + "|" + interpolate.source + "|" + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + "|" + (options.evaluate || reNoMatch).source + "|$", "g"); - var sourceURL = "//# sourceURL=" + (hasOwnProperty.call(options, "sourceURL") ? (options.sourceURL + "").replace(/\s/g, " ") : "lodash.templateSources[" + ++templateCounter + "]") + "\n"; - string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { - interpolateValue || (interpolateValue = esTemplateValue); - source += string.slice(index2, offset).replace(reUnescapedString, escapeStringChar); - if (escapeValue) { - isEscaping = true; - source += "' +\n__e(" + escapeValue + ") +\n'"; - } - if (evaluateValue) { - isEvaluating = true; - source += "';\n" + evaluateValue + ";\n__p += '"; - } - if (interpolateValue) { - source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; - } - index2 = offset + match.length; - return match; - }); - source += "';\n"; - var variable = hasOwnProperty.call(options, "variable") && options.variable; - if (!variable) { - source = "with (obj) {\n" + source + "\n}\n"; - } else if (reForbiddenIdentifierChars.test(variable)) { - throw new Error2(INVALID_TEMPL_VAR_ERROR_TEXT); - } - source = (isEvaluating ? source.replace(reEmptyStringLeading, "") : source).replace(reEmptyStringMiddle, "$1").replace(reEmptyStringTrailing, "$1;"); - source = "function(" + (variable || "obj") + ") {\n" + (variable ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (isEscaping ? ", __e = _.escape" : "") + (isEvaluating ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + source + "return __p\n}"; - var result2 = attempt(function() { - return Function2(importsKeys, sourceURL + "return " + source).apply(undefined2, importsValues); - }); - result2.source = source; - if (isError(result2)) { - throw result2; - } - return result2; - } - function toLower(value2) { - return toString7(value2).toLowerCase(); - } - function toUpper(value2) { - return toString7(value2).toUpperCase(); - } - function trim(string, chars, guard) { - string = toString7(string); - if (string && (guard || chars === undefined2)) { - return baseTrim(string); - } - if (!string || !(chars = baseToString(chars))) { - return string; - } - var strSymbols = stringToArray(string), chrSymbols = stringToArray(chars), start = charsStartIndex(strSymbols, chrSymbols), end2 = charsEndIndex(strSymbols, chrSymbols) + 1; - return castSlice(strSymbols, start, end2).join(""); - } - function trimEnd(string, chars, guard) { - string = toString7(string); - if (string && (guard || chars === undefined2)) { - return string.slice(0, trimmedEndIndex(string) + 1); - } - if (!string || !(chars = baseToString(chars))) { - return string; - } - var strSymbols = stringToArray(string), end2 = charsEndIndex(strSymbols, stringToArray(chars)) + 1; - return castSlice(strSymbols, 0, end2).join(""); - } - function trimStart(string, chars, guard) { - string = toString7(string); - if (string && (guard || chars === undefined2)) { - return string.replace(reTrimStart, ""); - } - if (!string || !(chars = baseToString(chars))) { - return string; - } - var strSymbols = stringToArray(string), start = charsStartIndex(strSymbols, stringToArray(chars)); - return castSlice(strSymbols, start).join(""); - } - function truncate(string, options) { - var length5 = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION; - if (isObject33(options)) { - var separator = "separator" in options ? options.separator : separator; - length5 = "length" in options ? toInteger(options.length) : length5; - omission = "omission" in options ? baseToString(options.omission) : omission; - } - string = toString7(string); - var strLength = string.length; - if (hasUnicode(string)) { - var strSymbols = stringToArray(string); - strLength = strSymbols.length; - } - if (length5 >= strLength) { - return string; - } - var end2 = length5 - stringSize(omission); - if (end2 < 1) { - return omission; - } - var result2 = strSymbols ? castSlice(strSymbols, 0, end2).join("") : string.slice(0, end2); - if (separator === undefined2) { - return result2 + omission; - } - if (strSymbols) { - end2 += result2.length - end2; - } - if (isRegExp(separator)) { - if (string.slice(end2).search(separator)) { - var match, substring = result2; - if (!separator.global) { - separator = RegExp2(separator.source, toString7(reFlags.exec(separator)) + "g"); - } - separator.lastIndex = 0; - while (match = separator.exec(substring)) { - var newEnd = match.index; - } - result2 = result2.slice(0, newEnd === undefined2 ? end2 : newEnd); - } - } else if (string.indexOf(baseToString(separator), end2) != end2) { - var index2 = result2.lastIndexOf(separator); - if (index2 > -1) { - result2 = result2.slice(0, index2); - } - } - return result2 + omission; - } - function unescape(string) { - string = toString7(string); - return string && reHasEscapedHtml.test(string) ? string.replace(reEscapedHtml, unescapeHtmlChar) : string; - } - var upperCase = createCompounder(function(result2, word2, index2) { - return result2 + (index2 ? " " : "") + word2.toUpperCase(); - }); - var upperFirst8 = createCaseFirst("toUpperCase"); - function words(string, pattern2, guard) { - string = toString7(string); - pattern2 = guard ? undefined2 : pattern2; - if (pattern2 === undefined2) { - return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); - } - return string.match(pattern2) || []; - } - var attempt = baseRest(function(func, args) { - try { - return apply(func, undefined2, args); - } catch (e4) { - return isError(e4) ? e4 : new Error2(e4); - } - }); - var bindAll = flatRest(function(object, methodNames) { - arrayEach(methodNames, function(key) { - key = toKey(key); - baseAssignValue(object, key, bind3(object[key], object)); - }); - return object; - }); - function cond(pairs2) { - var length5 = pairs2 == null ? 0 : pairs2.length, toIteratee = getIteratee(); - pairs2 = !length5 ? [] : arrayMap(pairs2, function(pair) { - if (typeof pair[1] != "function") { - throw new TypeError2(FUNC_ERROR_TEXT); - } - return [toIteratee(pair[0]), pair[1]]; - }); - return baseRest(function(args) { - var index2 = -1; - while (++index2 < length5) { - var pair = pairs2[index2]; - if (apply(pair[0], this, args)) { - return apply(pair[1], this, args); - } - } - }); - } - function conforms(source) { - return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); - } - function constant2(value2) { - return function() { - return value2; - }; - } - function defaultTo(value2, defaultValue) { - return value2 == null || value2 !== value2 ? defaultValue : value2; - } - var flow2 = createFlow(); - var flowRight = createFlow(true); - function identity4(value2) { - return value2; - } - function iteratee(func) { - return baseIteratee(typeof func == "function" ? func : baseClone(func, CLONE_DEEP_FLAG)); - } - function matches(source) { - return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); - } - function matchesProperty(path, srcValue) { - return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); - } - var method = baseRest(function(path, args) { - return function(object) { - return baseInvoke(object, path, args); - }; - }); - var methodOf = baseRest(function(object, args) { - return function(path) { - return baseInvoke(object, path, args); - }; - }); - function mixin(object, source, options) { - var props = keys6(source), methodNames = baseFunctions(source, props); - if (options == null && !(isObject33(source) && (methodNames.length || !props.length))) { - options = source; - source = object; - object = this; - methodNames = baseFunctions(source, keys6(source)); - } - var chain2 = !(isObject33(options) && "chain" in options) || !!options.chain, isFunc = isFunction44(object); - arrayEach(methodNames, function(methodName) { - var func = source[methodName]; - object[methodName] = func; - if (isFunc) { - object.prototype[methodName] = function() { - var chainAll = this.__chain__; - if (chain2 || chainAll) { - var result2 = object(this.__wrapped__), actions = result2.__actions__ = copyArray(this.__actions__); - actions.push({ "func": func, "args": arguments, "thisArg": object }); - result2.__chain__ = chainAll; - return result2; - } - return func.apply(object, arrayPush([this.value()], arguments)); - }; - } - }); - return object; - } - function noConflict() { - if (root._ === this) { - root._ = oldDash; - } - return this; - } - function noop7() { - } - function nthArg(n3) { - n3 = toInteger(n3); - return baseRest(function(args) { - return baseNth(args, n3); - }); - } - var over = createOver(arrayMap); - var overEvery = createOver(arrayEvery); - var overSome = createOver(arraySome); - function property(path) { - return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); - } - function propertyOf(object) { - return function(path) { - return object == null ? undefined2 : baseGet(object, path); - }; - } - var range = createRange(); - var rangeRight = createRange(true); - function stubArray() { - return []; - } - function stubFalse() { - return false; - } - function stubObject() { - return {}; - } - function stubString() { - return ""; - } - function stubTrue() { - return true; - } - function times(n3, iteratee2) { - n3 = toInteger(n3); - if (n3 < 1 || n3 > MAX_SAFE_INTEGER4) { - return []; - } - var index2 = MAX_ARRAY_LENGTH, length5 = nativeMin(n3, MAX_ARRAY_LENGTH); - iteratee2 = getIteratee(iteratee2); - n3 -= MAX_ARRAY_LENGTH; - var result2 = baseTimes(length5, iteratee2); - while (++index2 < n3) { - iteratee2(index2); - } - return result2; - } - function toPath(value2) { - if (isArray87(value2)) { - return arrayMap(value2, toKey); - } - return isSymbol(value2) ? [value2] : copyArray(stringToPath(toString7(value2))); - } - function uniqueId14(prefix2) { - var id = ++idCounter; - return toString7(prefix2) + id; - } - var add8 = createMathOperation(function(augend, addend) { - return augend + addend; - }, 0); - var ceil4 = createRound("ceil"); - var divide4 = createMathOperation(function(dividend, divisor) { - return dividend / divisor; - }, 1); - var floor4 = createRound("floor"); - function max15(array) { - return array && array.length ? baseExtremum(array, identity4, baseGt) : undefined2; - } - function maxBy3(array, iteratee2) { - return array && array.length ? baseExtremum(array, getIteratee(iteratee2, 2), baseGt) : undefined2; - } - function mean(array) { - return baseMean(array, identity4); - } - function meanBy(array, iteratee2) { - return baseMean(array, getIteratee(iteratee2, 2)); - } - function min13(array) { - return array && array.length ? baseExtremum(array, identity4, baseLt) : undefined2; - } - function minBy3(array, iteratee2) { - return array && array.length ? baseExtremum(array, getIteratee(iteratee2, 2), baseLt) : undefined2; - } - var multiply7 = createMathOperation(function(multiplier, multiplicand) { - return multiplier * multiplicand; - }, 1); - var round5 = createRound("round"); - var subtract6 = createMathOperation(function(minuend, subtrahend) { - return minuend - subtrahend; - }, 0); - function sum(array) { - return array && array.length ? baseSum(array, identity4) : 0; - } - function sumBy2(array, iteratee2) { - return array && array.length ? baseSum(array, getIteratee(iteratee2, 2)) : 0; - } - lodash.after = after; - lodash.ary = ary; - lodash.assign = assign14; - lodash.assignIn = assignIn; - lodash.assignInWith = assignInWith; - lodash.assignWith = assignWith; - lodash.at = at; - lodash.before = before; - lodash.bind = bind3; - lodash.bindAll = bindAll; - lodash.bindKey = bindKey; - lodash.castArray = castArray; - lodash.chain = chain; - lodash.chunk = chunk; - lodash.compact = compact; - lodash.concat = concat; - lodash.cond = cond; - lodash.conforms = conforms; - lodash.constant = constant2; - lodash.countBy = countBy; - lodash.create = create8; - lodash.curry = curry; - lodash.curryRight = curryRight; - lodash.debounce = debounce5; - lodash.defaults = defaults; - lodash.defaultsDeep = defaultsDeep; - lodash.defer = defer; - lodash.delay = delay; - lodash.difference = difference2; - lodash.differenceBy = differenceBy; - lodash.differenceWith = differenceWith; - lodash.drop = drop; - lodash.dropRight = dropRight; - lodash.dropRightWhile = dropRightWhile; - lodash.dropWhile = dropWhile; - lodash.fill = fill; - lodash.filter = filter17; - lodash.flatMap = flatMap; - lodash.flatMapDeep = flatMapDeep; - lodash.flatMapDepth = flatMapDepth; - lodash.flatten = flatten9; - lodash.flattenDeep = flattenDeep; - lodash.flattenDepth = flattenDepth; - lodash.flip = flip; - lodash.flow = flow2; - lodash.flowRight = flowRight; - lodash.fromPairs = fromPairs; - lodash.functions = functions; - lodash.functionsIn = functionsIn; - lodash.groupBy = groupBy12; - lodash.initial = initial; - lodash.intersection = intersection2; - lodash.intersectionBy = intersectionBy; - lodash.intersectionWith = intersectionWith; - lodash.invert = invert5; - lodash.invertBy = invertBy; - lodash.invokeMap = invokeMap; - lodash.iteratee = iteratee; - lodash.keyBy = keyBy; - lodash.keys = keys6; - lodash.keysIn = keysIn; - lodash.map = map23; - lodash.mapKeys = mapKeys; - lodash.mapValues = mapValues2; - lodash.matches = matches; - lodash.matchesProperty = matchesProperty; - lodash.memoize = memoize6; - lodash.merge = merge3; - lodash.mergeWith = mergeWith; - lodash.method = method; - lodash.methodOf = methodOf; - lodash.mixin = mixin; - lodash.negate = negate4; - lodash.nthArg = nthArg; - lodash.omit = omit6; - lodash.omitBy = omitBy; - lodash.once = once; - lodash.orderBy = orderBy; - lodash.over = over; - lodash.overArgs = overArgs; - lodash.overEvery = overEvery; - lodash.overSome = overSome; - lodash.partial = partial; - lodash.partialRight = partialRight; - lodash.partition = partition3; - lodash.pick = pick5; - lodash.pickBy = pickBy; - lodash.property = property; - lodash.propertyOf = propertyOf; - lodash.pull = pull; - lodash.pullAll = pullAll; - lodash.pullAllBy = pullAllBy; - lodash.pullAllWith = pullAllWith; - lodash.pullAt = pullAt; - lodash.range = range; - lodash.rangeRight = rangeRight; - lodash.rearg = rearg; - lodash.reject = reject; - lodash.remove = remove2; - lodash.rest = rest; - lodash.reverse = reverse; - lodash.sampleSize = sampleSize; - lodash.set = set13; - lodash.setWith = setWith; - lodash.shuffle = shuffle3; - lodash.slice = slice; - lodash.sortBy = sortBy2; - lodash.sortedUniq = sortedUniq; - lodash.sortedUniqBy = sortedUniqBy; - lodash.split = split; - lodash.spread = spread; - lodash.tail = tail; - lodash.take = take; - lodash.takeRight = takeRight; - lodash.takeRightWhile = takeRightWhile; - lodash.takeWhile = takeWhile; - lodash.tap = tap; - lodash.throttle = throttle6; - lodash.thru = thru; - lodash.toArray = toArray3; - lodash.toPairs = toPairs; - lodash.toPairsIn = toPairsIn; - lodash.toPath = toPath; - lodash.toPlainObject = toPlainObject; - lodash.transform = transform18; - lodash.unary = unary; - lodash.union = union; - lodash.unionBy = unionBy; - lodash.unionWith = unionWith; - lodash.uniq = uniq10; - lodash.uniqBy = uniqBy; - lodash.uniqWith = uniqWith; - lodash.unset = unset; - lodash.unzip = unzip; - lodash.unzipWith = unzipWith; - lodash.update = update15; - lodash.updateWith = updateWith; - lodash.values = values4; - lodash.valuesIn = valuesIn; - lodash.without = without; - lodash.words = words; - lodash.wrap = wrap; - lodash.xor = xor; - lodash.xorBy = xorBy; - lodash.xorWith = xorWith; - lodash.zip = zip; - lodash.zipObject = zipObject2; - lodash.zipObjectDeep = zipObjectDeep; - lodash.zipWith = zipWith; - lodash.entries = toPairs; - lodash.entriesIn = toPairsIn; - lodash.extend = assignIn; - lodash.extendWith = assignInWith; - mixin(lodash, lodash); - lodash.add = add8; - lodash.attempt = attempt; - lodash.camelCase = camelCase; - lodash.capitalize = capitalize; - lodash.ceil = ceil4; - lodash.clamp = clamp12; - lodash.clone = clone41; - lodash.cloneDeep = cloneDeep; - lodash.cloneDeepWith = cloneDeepWith; - lodash.cloneWith = cloneWith; - lodash.conformsTo = conformsTo; - lodash.deburr = deburr; - lodash.defaultTo = defaultTo; - lodash.divide = divide4; - lodash.endsWith = endsWith; - lodash.eq = eq; - lodash.escape = escape; - lodash.escapeRegExp = escapeRegExp; - lodash.every = every4; - lodash.find = find11; - lodash.findIndex = findIndex3; - lodash.findKey = findKey; - lodash.findLast = findLast; - lodash.findLastIndex = findLastIndex; - lodash.findLastKey = findLastKey; - lodash.floor = floor4; - lodash.forEach = forEach4; - lodash.forEachRight = forEachRight; - lodash.forIn = forIn2; - lodash.forInRight = forInRight; - lodash.forOwn = forOwn; - lodash.forOwnRight = forOwnRight; - lodash.get = get100; - lodash.gt = gt; - lodash.gte = gte; - lodash.has = has; - lodash.hasIn = hasIn; - lodash.head = head13; - lodash.identity = identity4; - lodash.includes = includes2; - lodash.indexOf = indexOf2; - lodash.inRange = inRange; - lodash.invoke = invoke; - lodash.isArguments = isArguments; - lodash.isArray = isArray87; - lodash.isArrayBuffer = isArrayBuffer; - lodash.isArrayLike = isArrayLike; - lodash.isArrayLikeObject = isArrayLikeObject; - lodash.isBoolean = isBoolean10; - lodash.isBuffer = isBuffer; - lodash.isDate = isDate3; - lodash.isElement = isElement3; - lodash.isEmpty = isEmpty14; - lodash.isEqual = isEqual24; - lodash.isEqualWith = isEqualWith; - lodash.isError = isError; - lodash.isFinite = isFinite2; - lodash.isFunction = isFunction44; - lodash.isInteger = isInteger2; - lodash.isLength = isLength4; - lodash.isMap = isMap; - lodash.isMatch = isMatch2; - lodash.isMatchWith = isMatchWith; - lodash.isNaN = isNaN6; - lodash.isNative = isNative; - lodash.isNil = isNil67; - lodash.isNull = isNull3; - lodash.isNumber = isNumber57; - lodash.isObject = isObject33; - lodash.isObjectLike = isObjectLike5; - lodash.isPlainObject = isPlainObject10; - lodash.isRegExp = isRegExp; - lodash.isSafeInteger = isSafeInteger; - lodash.isSet = isSet; - lodash.isString = isString67; - lodash.isSymbol = isSymbol; - lodash.isTypedArray = isTypedArray4; - lodash.isUndefined = isUndefined5; - lodash.isWeakMap = isWeakMap; - lodash.isWeakSet = isWeakSet; - lodash.join = join; - lodash.kebabCase = kebabCase2; - lodash.last = last17; - lodash.lastIndexOf = lastIndexOf; - lodash.lowerCase = lowerCase4; - lodash.lowerFirst = lowerFirst; - lodash.lt = lt; - lodash.lte = lte; - lodash.max = max15; - lodash.maxBy = maxBy3; - lodash.mean = mean; - lodash.meanBy = meanBy; - lodash.min = min13; - lodash.minBy = minBy3; - lodash.stubArray = stubArray; - lodash.stubFalse = stubFalse; - lodash.stubObject = stubObject; - lodash.stubString = stubString; - lodash.stubTrue = stubTrue; - lodash.multiply = multiply7; - lodash.nth = nth; - lodash.noConflict = noConflict; - lodash.noop = noop7; - lodash.now = now2; - lodash.pad = pad2; - lodash.padEnd = padEnd2; - lodash.padStart = padStart2; - lodash.parseInt = parseInt2; - lodash.random = random5; - lodash.reduce = reduce11; - lodash.reduceRight = reduceRight; - lodash.repeat = repeat2; - lodash.replace = replace; - lodash.result = result; - lodash.round = round5; - lodash.runInContext = runInContext2; - lodash.sample = sample; - lodash.size = size14; - lodash.snakeCase = snakeCase; - lodash.some = some5; - lodash.sortedIndex = sortedIndex; - lodash.sortedIndexBy = sortedIndexBy; - lodash.sortedIndexOf = sortedIndexOf; - lodash.sortedLastIndex = sortedLastIndex; - lodash.sortedLastIndexBy = sortedLastIndexBy; - lodash.sortedLastIndexOf = sortedLastIndexOf; - lodash.startCase = startCase; - lodash.startsWith = startsWith; - lodash.subtract = subtract6; - lodash.sum = sum; - lodash.sumBy = sumBy2; - lodash.template = template2; - lodash.times = times; - lodash.toFinite = toFinite; - lodash.toInteger = toInteger; - lodash.toLength = toLength; - lodash.toLower = toLower; - lodash.toNumber = toNumber; - lodash.toSafeInteger = toSafeInteger; - lodash.toString = toString7; - lodash.toUpper = toUpper; - lodash.trim = trim; - lodash.trimEnd = trimEnd; - lodash.trimStart = trimStart; - lodash.truncate = truncate; - lodash.unescape = unescape; - lodash.uniqueId = uniqueId14; - lodash.upperCase = upperCase; - lodash.upperFirst = upperFirst8; - lodash.each = forEach4; - lodash.eachRight = forEachRight; - lodash.first = head13; - mixin(lodash, function() { - var source = {}; - baseForOwn(lodash, function(func, methodName) { - if (!hasOwnProperty.call(lodash.prototype, methodName)) { - source[methodName] = func; - } - }); - return source; - }(), { "chain": false }); - lodash.VERSION = VERSION2; - arrayEach(["bind", "bindKey", "curry", "curryRight", "partial", "partialRight"], function(methodName) { - lodash[methodName].placeholder = lodash; - }); - arrayEach(["drop", "take"], function(methodName, index2) { - LazyWrapper.prototype[methodName] = function(n3) { - n3 = n3 === undefined2 ? 1 : nativeMax(toInteger(n3), 0); - var result2 = this.__filtered__ && !index2 ? new LazyWrapper(this) : this.clone(); - if (result2.__filtered__) { - result2.__takeCount__ = nativeMin(n3, result2.__takeCount__); - } else { - result2.__views__.push({ - "size": nativeMin(n3, MAX_ARRAY_LENGTH), - "type": methodName + (result2.__dir__ < 0 ? "Right" : "") - }); - } - return result2; - }; - LazyWrapper.prototype[methodName + "Right"] = function(n3) { - return this.reverse()[methodName](n3).reverse(); - }; - }); - arrayEach(["filter", "map", "takeWhile"], function(methodName, index2) { - var type2 = index2 + 1, isFilter = type2 == LAZY_FILTER_FLAG || type2 == LAZY_WHILE_FLAG; - LazyWrapper.prototype[methodName] = function(iteratee2) { - var result2 = this.clone(); - result2.__iteratees__.push({ - "iteratee": getIteratee(iteratee2, 3), - "type": type2 - }); - result2.__filtered__ = result2.__filtered__ || isFilter; - return result2; - }; - }); - arrayEach(["head", "last"], function(methodName, index2) { - var takeName = "take" + (index2 ? "Right" : ""); - LazyWrapper.prototype[methodName] = function() { - return this[takeName](1).value()[0]; - }; - }); - arrayEach(["initial", "tail"], function(methodName, index2) { - var dropName = "drop" + (index2 ? "" : "Right"); - LazyWrapper.prototype[methodName] = function() { - return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); - }; - }); - LazyWrapper.prototype.compact = function() { - return this.filter(identity4); - }; - LazyWrapper.prototype.find = function(predicate) { - return this.filter(predicate).head(); - }; - LazyWrapper.prototype.findLast = function(predicate) { - return this.reverse().find(predicate); - }; - LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { - if (typeof path == "function") { - return new LazyWrapper(this); - } - return this.map(function(value2) { - return baseInvoke(value2, path, args); - }); - }); - LazyWrapper.prototype.reject = function(predicate) { - return this.filter(negate4(getIteratee(predicate))); - }; - LazyWrapper.prototype.slice = function(start, end2) { - start = toInteger(start); - var result2 = this; - if (result2.__filtered__ && (start > 0 || end2 < 0)) { - return new LazyWrapper(result2); - } - if (start < 0) { - result2 = result2.takeRight(-start); - } else if (start) { - result2 = result2.drop(start); - } - if (end2 !== undefined2) { - end2 = toInteger(end2); - result2 = end2 < 0 ? result2.dropRight(-end2) : result2.take(end2 - start); - } - return result2; - }; - LazyWrapper.prototype.takeRightWhile = function(predicate) { - return this.reverse().takeWhile(predicate).reverse(); - }; - LazyWrapper.prototype.toArray = function() { - return this.take(MAX_ARRAY_LENGTH); - }; - baseForOwn(LazyWrapper.prototype, function(func, methodName) { - var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), isTaker = /^(?:head|last)$/.test(methodName), lodashFunc = lodash[isTaker ? "take" + (methodName == "last" ? "Right" : "") : methodName], retUnwrapped = isTaker || /^find/.test(methodName); - if (!lodashFunc) { - return; - } - lodash.prototype[methodName] = function() { - var value2 = this.__wrapped__, args = isTaker ? [1] : arguments, isLazy = value2 instanceof LazyWrapper, iteratee2 = args[0], useLazy = isLazy || isArray87(value2); - var interceptor = function(value3) { - var result3 = lodashFunc.apply(lodash, arrayPush([value3], args)); - return isTaker && chainAll ? result3[0] : result3; - }; - if (useLazy && checkIteratee && typeof iteratee2 == "function" && iteratee2.length != 1) { - isLazy = useLazy = false; - } - var chainAll = this.__chain__, isHybrid = !!this.__actions__.length, isUnwrapped = retUnwrapped && !chainAll, onlyLazy = isLazy && !isHybrid; - if (!retUnwrapped && useLazy) { - value2 = onlyLazy ? value2 : new LazyWrapper(this); - var result2 = func.apply(value2, args); - result2.__actions__.push({ "func": thru, "args": [interceptor], "thisArg": undefined2 }); - return new LodashWrapper(result2, chainAll); - } - if (isUnwrapped && onlyLazy) { - return func.apply(this, args); - } - result2 = this.thru(interceptor); - return isUnwrapped ? isTaker ? result2.value()[0] : result2.value() : result2; - }; - }); - arrayEach(["pop", "push", "shift", "sort", "splice", "unshift"], function(methodName) { - var func = arrayProto[methodName], chainName = /^(?:push|sort|unshift)$/.test(methodName) ? "tap" : "thru", retUnwrapped = /^(?:pop|shift)$/.test(methodName); - lodash.prototype[methodName] = function() { - var args = arguments; - if (retUnwrapped && !this.__chain__) { - var value2 = this.value(); - return func.apply(isArray87(value2) ? value2 : [], args); - } - return this[chainName](function(value3) { - return func.apply(isArray87(value3) ? value3 : [], args); - }); - }; - }); - baseForOwn(LazyWrapper.prototype, function(func, methodName) { - var lodashFunc = lodash[methodName]; - if (lodashFunc) { - var key = lodashFunc.name + ""; - if (!hasOwnProperty.call(realNames, key)) { - realNames[key] = []; - } - realNames[key].push({ "name": methodName, "func": lodashFunc }); - } - }); - realNames[createHybrid(undefined2, WRAP_BIND_KEY_FLAG).name] = [{ - "name": "wrapper", - "func": undefined2 - }]; - LazyWrapper.prototype.clone = lazyClone; - LazyWrapper.prototype.reverse = lazyReverse; - LazyWrapper.prototype.value = lazyValue; - lodash.prototype.at = wrapperAt; - lodash.prototype.chain = wrapperChain; - lodash.prototype.commit = wrapperCommit; - lodash.prototype.next = wrapperNext; - lodash.prototype.plant = wrapperPlant; - lodash.prototype.reverse = wrapperReverse; - lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; - lodash.prototype.first = lodash.prototype.head; - if (symIterator) { - lodash.prototype[symIterator] = wrapperToIterator; - } - return lodash; - }; - var _8 = runInContext(); - if (typeof define == "function" && typeof define.amd == "object" && define.amd) { - root._ = _8; - define(function() { - return _8; - }); - } else if (freeModule) { - (freeModule.exports = _8)._ = _8; - freeExports._ = _8; - } else { - root._ = _8; - } - }).call(exports); - } -}); - -// node_modules/@dagrejs/graphlib/lib/lodash.js -var require_lodash2 = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/lodash.js"(exports, module2) { - var lodash; - if (typeof require === "function") { - try { - lodash = require_lodash(); - } catch (e4) { - } - } - if (!lodash) { - lodash = window._; - } - module2.exports = lodash; - } -}); - -// node_modules/@dagrejs/graphlib/lib/graph.js -var require_graph = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/graph.js"(exports, module2) { - "use strict"; - var _8 = require_lodash2(); - module2.exports = Graph10; - var DEFAULT_EDGE_NAME = "\0"; - var GRAPH_NODE = "\0"; - var EDGE_KEY_DELIM = ""; - function Graph10(opts) { - this._isDirected = _8.has(opts, "directed") ? opts.directed : true; - this._isMultigraph = _8.has(opts, "multigraph") ? opts.multigraph : false; - this._isCompound = _8.has(opts, "compound") ? opts.compound : false; - this._label = void 0; - this._defaultNodeLabelFn = _8.constant(void 0); - this._defaultEdgeLabelFn = _8.constant(void 0); - this._nodes = {}; - if (this._isCompound) { - this._parent = {}; - this._children = {}; - this._children[GRAPH_NODE] = {}; - } - this._in = {}; - this._preds = {}; - this._out = {}; - this._sucs = {}; - this._edgeObjs = {}; - this._edgeLabels = {}; - } - Graph10.prototype._nodeCount = 0; - Graph10.prototype._edgeCount = 0; - Graph10.prototype.isDirected = function() { - return this._isDirected; - }; - Graph10.prototype.isMultigraph = function() { - return this._isMultigraph; - }; - Graph10.prototype.isCompound = function() { - return this._isCompound; - }; - Graph10.prototype.setGraph = function(label17) { - this._label = label17; - return this; - }; - Graph10.prototype.graph = function() { - return this._label; - }; - Graph10.prototype.setDefaultNodeLabel = function(newDefault) { - if (!_8.isFunction(newDefault)) { - newDefault = _8.constant(newDefault); - } - this._defaultNodeLabelFn = newDefault; - return this; - }; - Graph10.prototype.nodeCount = function() { - return this._nodeCount; - }; - Graph10.prototype.nodes = function() { - return _8.keys(this._nodes); - }; - Graph10.prototype.sources = function() { - return _8.filter(this.nodes(), _8.bind(function(v3) { - return _8.isEmpty(this._in[v3]); - }, this)); - }; - Graph10.prototype.sinks = function() { - return _8.filter(this.nodes(), _8.bind(function(v3) { - return _8.isEmpty(this._out[v3]); - }, this)); - }; - Graph10.prototype.setNodes = function(vs, value2) { - var args = arguments; - _8.each(vs, _8.bind(function(v3) { - if (args.length > 1) { - this.setNode(v3, value2); - } else { - this.setNode(v3); - } - }, this)); - return this; - }; - Graph10.prototype.setNode = function(v3, value2) { - if (_8.has(this._nodes, v3)) { - if (arguments.length > 1) { - this._nodes[v3] = value2; - } - return this; - } - this._nodes[v3] = arguments.length > 1 ? value2 : this._defaultNodeLabelFn(v3); - if (this._isCompound) { - this._parent[v3] = GRAPH_NODE; - this._children[v3] = {}; - this._children[GRAPH_NODE][v3] = true; - } - this._in[v3] = {}; - this._preds[v3] = {}; - this._out[v3] = {}; - this._sucs[v3] = {}; - ++this._nodeCount; - return this; - }; - Graph10.prototype.node = function(v3) { - return this._nodes[v3]; - }; - Graph10.prototype.hasNode = function(v3) { - return _8.has(this._nodes, v3); - }; - Graph10.prototype.removeNode = function(v3) { - var self2 = this; - if (_8.has(this._nodes, v3)) { - var removeEdge = function(e4) { - self2.removeEdge(self2._edgeObjs[e4]); - }; - delete this._nodes[v3]; - if (this._isCompound) { - this._removeFromParentsChildList(v3); - delete this._parent[v3]; - _8.each(this.children(v3), _8.bind(function(child) { - this.setParent(child); - }, this)); - delete this._children[v3]; - } - _8.each(_8.keys(this._in[v3]), removeEdge); - delete this._in[v3]; - delete this._preds[v3]; - _8.each(_8.keys(this._out[v3]), removeEdge); - delete this._out[v3]; - delete this._sucs[v3]; - --this._nodeCount; - } - return this; - }; - Graph10.prototype.setParent = function(v3, parent) { - if (!this._isCompound) { - throw new Error("Cannot set parent in a non-compound graph"); - } - if (_8.isUndefined(parent)) { - parent = GRAPH_NODE; - } else { - parent += ""; - for (var ancestor = parent; !_8.isUndefined(ancestor); ancestor = this.parent(ancestor)) { - if (ancestor === v3) { - throw new Error("Setting " + parent + " as parent of " + v3 + " would create create a cycle"); - } - } - this.setNode(parent); - } - this.setNode(v3); - this._removeFromParentsChildList(v3); - this._parent[v3] = parent; - this._children[parent][v3] = true; - return this; - }; - Graph10.prototype._removeFromParentsChildList = function(v3) { - delete this._children[this._parent[v3]][v3]; - }; - Graph10.prototype.parent = function(v3) { - if (this._isCompound) { - var parent = this._parent[v3]; - if (parent !== GRAPH_NODE) { - return parent; - } - } - }; - Graph10.prototype.children = function(v3) { - if (_8.isUndefined(v3)) { - v3 = GRAPH_NODE; - } - if (this._isCompound) { - var children = this._children[v3]; - if (children) { - return _8.keys(children); - } - } else if (v3 === GRAPH_NODE) { - return this.nodes(); - } else if (this.hasNode(v3)) { - return []; - } - }; - Graph10.prototype.predecessors = function(v3) { - var predsV = this._preds[v3]; - if (predsV) { - return _8.keys(predsV); - } - }; - Graph10.prototype.successors = function(v3) { - var sucsV = this._sucs[v3]; - if (sucsV) { - return _8.keys(sucsV); - } - }; - Graph10.prototype.neighbors = function(v3) { - var preds = this.predecessors(v3); - if (preds) { - return _8.union(preds, this.successors(v3)); - } - }; - Graph10.prototype.isLeaf = function(v3) { - var neighbors; - if (this.isDirected()) { - neighbors = this.successors(v3); - } else { - neighbors = this.neighbors(v3); - } - return neighbors.length === 0; - }; - Graph10.prototype.filterNodes = function(filter17) { - var copy8 = new this.constructor({ - directed: this._isDirected, - multigraph: this._isMultigraph, - compound: this._isCompound - }); - copy8.setGraph(this.graph()); - _8.each(this._nodes, _8.bind(function(value2, v3) { - if (filter17(v3)) { - copy8.setNode(v3, value2); - } - }, this)); - _8.each(this._edgeObjs, _8.bind(function(e4) { - if (copy8.hasNode(e4.v) && copy8.hasNode(e4.w)) { - copy8.setEdge(e4, this.edge(e4)); - } - }, this)); - var self2 = this; - var parents = {}; - function findParent(v3) { - var parent = self2.parent(v3); - if (parent === void 0 || copy8.hasNode(parent)) { - parents[v3] = parent; - return parent; - } else if (parent in parents) { - return parents[parent]; - } else { - return findParent(parent); - } - } - if (this._isCompound) { - _8.each(copy8.nodes(), function(v3) { - copy8.setParent(v3, findParent(v3)); - }); - } - return copy8; - }; - Graph10.prototype.setDefaultEdgeLabel = function(newDefault) { - if (!_8.isFunction(newDefault)) { - newDefault = _8.constant(newDefault); - } - this._defaultEdgeLabelFn = newDefault; - return this; - }; - Graph10.prototype.edgeCount = function() { - return this._edgeCount; - }; - Graph10.prototype.edges = function() { - return _8.values(this._edgeObjs); - }; - Graph10.prototype.setPath = function(vs, value2) { - var self2 = this, args = arguments; - _8.reduce(vs, function(v3, w4) { - if (args.length > 1) { - self2.setEdge(v3, w4, value2); - } else { - self2.setEdge(v3, w4); - } - return w4; - }); - return this; - }; - Graph10.prototype.setEdge = function() { - var v3, w4, name, value2, valueSpecified = false, arg0 = arguments[0]; - if (typeof arg0 === "object" && arg0 !== null && "v" in arg0) { - v3 = arg0.v; - w4 = arg0.w; - name = arg0.name; - if (arguments.length === 2) { - value2 = arguments[1]; - valueSpecified = true; - } - } else { - v3 = arg0; - w4 = arguments[1]; - name = arguments[3]; - if (arguments.length > 2) { - value2 = arguments[2]; - valueSpecified = true; - } - } - v3 = "" + v3; - w4 = "" + w4; - if (!_8.isUndefined(name)) { - name = "" + name; - } - var e4 = edgeArgsToId(this._isDirected, v3, w4, name); - if (_8.has(this._edgeLabels, e4)) { - if (valueSpecified) { - this._edgeLabels[e4] = value2; - } - return this; - } - if (!_8.isUndefined(name) && !this._isMultigraph) { - throw new Error("Cannot set a named edge when isMultigraph = false"); - } - this.setNode(v3); - this.setNode(w4); - this._edgeLabels[e4] = valueSpecified ? value2 : this._defaultEdgeLabelFn(v3, w4, name); - var edgeObj = edgeArgsToObj(this._isDirected, v3, w4, name); - v3 = edgeObj.v; - w4 = edgeObj.w; - Object.freeze(edgeObj); - this._edgeObjs[e4] = edgeObj; - incrementOrInitEntry(this._preds[w4], v3); - incrementOrInitEntry(this._sucs[v3], w4); - this._in[w4][e4] = edgeObj; - this._out[v3][e4] = edgeObj; - this._edgeCount++; - return this; - }; - Graph10.prototype.edge = function(v3, w4, name) { - var e4 = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v3, w4, name); - return this._edgeLabels[e4]; - }; - Graph10.prototype.hasEdge = function(v3, w4, name) { - var e4 = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v3, w4, name); - return _8.has(this._edgeLabels, e4); - }; - Graph10.prototype.removeEdge = function(v3, w4, name) { - var e4 = arguments.length === 1 ? edgeObjToId(this._isDirected, arguments[0]) : edgeArgsToId(this._isDirected, v3, w4, name), edge2 = this._edgeObjs[e4]; - if (edge2) { - v3 = edge2.v; - w4 = edge2.w; - delete this._edgeLabels[e4]; - delete this._edgeObjs[e4]; - decrementOrRemoveEntry(this._preds[w4], v3); - decrementOrRemoveEntry(this._sucs[v3], w4); - delete this._in[w4][e4]; - delete this._out[v3][e4]; - this._edgeCount--; - } - return this; - }; - Graph10.prototype.inEdges = function(v3, u3) { - var inV = this._in[v3]; - if (inV) { - var edges = _8.values(inV); - if (!u3) { - return edges; - } - return _8.filter(edges, function(edge2) { - return edge2.v === u3; - }); - } - }; - Graph10.prototype.outEdges = function(v3, w4) { - var outV = this._out[v3]; - if (outV) { - var edges = _8.values(outV); - if (!w4) { - return edges; - } - return _8.filter(edges, function(edge2) { - return edge2.w === w4; - }); - } - }; - Graph10.prototype.nodeEdges = function(v3, w4) { - var inEdges = this.inEdges(v3, w4); - if (inEdges) { - return inEdges.concat(this.outEdges(v3, w4)); - } - }; - function incrementOrInitEntry(map23, k4) { - if (map23[k4]) { - map23[k4]++; - } else { - map23[k4] = 1; - } - } - function decrementOrRemoveEntry(map23, k4) { - if (!--map23[k4]) { - delete map23[k4]; - } - } - function edgeArgsToId(isDirected, v_, w_, name) { - var v3 = "" + v_; - var w4 = "" + w_; - if (!isDirected && v3 > w4) { - var tmp = v3; - v3 = w4; - w4 = tmp; - } - return v3 + EDGE_KEY_DELIM + w4 + EDGE_KEY_DELIM + (_8.isUndefined(name) ? DEFAULT_EDGE_NAME : name); - } - function edgeArgsToObj(isDirected, v_, w_, name) { - var v3 = "" + v_; - var w4 = "" + w_; - if (!isDirected && v3 > w4) { - var tmp = v3; - v3 = w4; - w4 = tmp; - } - var edgeObj = { v: v3, w: w4 }; - if (name) { - edgeObj.name = name; - } - return edgeObj; - } - function edgeObjToId(isDirected, edgeObj) { - return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name); - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/version.js -var require_version = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/version.js"(exports, module2) { - module2.exports = "2.1.4"; - } -}); - -// node_modules/@dagrejs/graphlib/lib/index.js -var require_lib3 = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/index.js"(exports, module2) { - module2.exports = { - Graph: require_graph(), - version: require_version() - }; - } -}); - -// node_modules/@dagrejs/graphlib/lib/json.js -var require_json = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/json.js"(exports, module2) { - var _8 = require_lodash2(); - var Graph10 = require_graph(); - module2.exports = { - write, - read - }; - function write(g4) { - var json2 = { - options: { - directed: g4.isDirected(), - multigraph: g4.isMultigraph(), - compound: g4.isCompound() - }, - nodes: writeNodes(g4), - edges: writeEdges(g4) - }; - if (!_8.isUndefined(g4.graph())) { - json2.value = _8.clone(g4.graph()); - } - return json2; - } - function writeNodes(g4) { - return _8.map(g4.nodes(), function(v3) { - var nodeValue = g4.node(v3), parent = g4.parent(v3), node = { v: v3 }; - if (!_8.isUndefined(nodeValue)) { - node.value = nodeValue; - } - if (!_8.isUndefined(parent)) { - node.parent = parent; - } - return node; - }); - } - function writeEdges(g4) { - return _8.map(g4.edges(), function(e4) { - var edgeValue = g4.edge(e4), edge2 = { v: e4.v, w: e4.w }; - if (!_8.isUndefined(e4.name)) { - edge2.name = e4.name; - } - if (!_8.isUndefined(edgeValue)) { - edge2.value = edgeValue; - } - return edge2; - }); - } - function read(json2) { - var g4 = new Graph10(json2.options).setGraph(json2.value); - _8.each(json2.nodes, function(entry) { - g4.setNode(entry.v, entry.value); - if (entry.parent) { - g4.setParent(entry.v, entry.parent); - } - }); - _8.each(json2.edges, function(entry) { - g4.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value); - }); - return g4; - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/alg/components.js -var require_components = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/alg/components.js"(exports, module2) { - var _8 = require_lodash2(); - module2.exports = components; - function components(g4) { - var visited = {}, cmpts = [], cmpt; - function dfs2(v3) { - if (_8.has(visited, v3)) - return; - visited[v3] = true; - cmpt.push(v3); - _8.each(g4.successors(v3), dfs2); - _8.each(g4.predecessors(v3), dfs2); - } - _8.each(g4.nodes(), function(v3) { - cmpt = []; - dfs2(v3); - if (cmpt.length) { - cmpts.push(cmpt); - } - }); - return cmpts; - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/data/priority-queue.js -var require_priority_queue = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/data/priority-queue.js"(exports, module2) { - var _8 = require_lodash2(); - module2.exports = PriorityQueue; - function PriorityQueue() { - this._arr = []; - this._keyIndices = {}; - } - PriorityQueue.prototype.size = function() { - return this._arr.length; - }; - PriorityQueue.prototype.keys = function() { - return this._arr.map(function(x6) { - return x6.key; - }); - }; - PriorityQueue.prototype.has = function(key) { - return _8.has(this._keyIndices, key); - }; - PriorityQueue.prototype.priority = function(key) { - var index2 = this._keyIndices[key]; - if (index2 !== void 0) { - return this._arr[index2].priority; - } - }; - PriorityQueue.prototype.min = function() { - if (this.size() === 0) { - throw new Error("Queue underflow"); - } - return this._arr[0].key; - }; - PriorityQueue.prototype.add = function(key, priority) { - var keyIndices = this._keyIndices; - key = String(key); - if (!_8.has(keyIndices, key)) { - var arr = this._arr; - var index2 = arr.length; - keyIndices[key] = index2; - arr.push({ key, priority }); - this._decrease(index2); - return true; - } - return false; - }; - PriorityQueue.prototype.removeMin = function() { - this._swap(0, this._arr.length - 1); - var min13 = this._arr.pop(); - delete this._keyIndices[min13.key]; - this._heapify(0); - return min13.key; - }; - PriorityQueue.prototype.decrease = function(key, priority) { - var index2 = this._keyIndices[key]; - if (priority > this._arr[index2].priority) { - throw new Error("New priority is greater than current priority. Key: " + key + " Old: " + this._arr[index2].priority + " New: " + priority); - } - this._arr[index2].priority = priority; - this._decrease(index2); - }; - PriorityQueue.prototype._heapify = function(i4) { - var arr = this._arr; - var l4 = 2 * i4, r4 = l4 + 1, largest = i4; - if (l4 < arr.length) { - largest = arr[l4].priority < arr[largest].priority ? l4 : largest; - if (r4 < arr.length) { - largest = arr[r4].priority < arr[largest].priority ? r4 : largest; - } - if (largest !== i4) { - this._swap(i4, largest); - this._heapify(largest); - } - } - }; - PriorityQueue.prototype._decrease = function(index2) { - var arr = this._arr; - var priority = arr[index2].priority; - var parent; - while (index2 !== 0) { - parent = index2 >> 1; - if (arr[parent].priority < priority) { - break; - } - this._swap(index2, parent); - index2 = parent; - } - }; - PriorityQueue.prototype._swap = function(i4, j4) { - var arr = this._arr; - var keyIndices = this._keyIndices; - var origArrI = arr[i4]; - var origArrJ = arr[j4]; - arr[i4] = origArrJ; - arr[j4] = origArrI; - keyIndices[origArrJ.key] = i4; - keyIndices[origArrI.key] = j4; - }; - } -}); - -// node_modules/@dagrejs/graphlib/lib/alg/dijkstra.js -var require_dijkstra2 = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/alg/dijkstra.js"(exports, module2) { - var _8 = require_lodash2(); - var PriorityQueue = require_priority_queue(); - module2.exports = dijkstra3; - var DEFAULT_WEIGHT_FUNC = _8.constant(1); - function dijkstra3(g4, source, weightFn, edgeFn) { - return runDijkstra(g4, String(source), weightFn || DEFAULT_WEIGHT_FUNC, edgeFn || function(v3) { - return g4.outEdges(v3); - }); - } - function runDijkstra(g4, source, weightFn, edgeFn) { - var results = {}, pq = new PriorityQueue(), v3, vEntry; - var updateNeighbors = function(edge2) { - var w4 = edge2.v !== v3 ? edge2.v : edge2.w, wEntry = results[w4], weight = weightFn(edge2), distance15 = vEntry.distance + weight; - if (weight < 0) { - throw new Error("dijkstra does not allow negative edge weights. Bad edge: " + edge2 + " Weight: " + weight); - } - if (distance15 < wEntry.distance) { - wEntry.distance = distance15; - wEntry.predecessor = v3; - pq.decrease(w4, distance15); - } - }; - g4.nodes().forEach(function(v4) { - var distance15 = v4 === source ? 0 : Number.POSITIVE_INFINITY; - results[v4] = { distance: distance15 }; - pq.add(v4, distance15); - }); - while (pq.size() > 0) { - v3 = pq.removeMin(); - vEntry = results[v3]; - if (vEntry.distance === Number.POSITIVE_INFINITY) { - break; - } - edgeFn(v3).forEach(updateNeighbors); - } - return results; - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/alg/dijkstra-all.js -var require_dijkstra_all = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/alg/dijkstra-all.js"(exports, module2) { - var dijkstra3 = require_dijkstra2(); - var _8 = require_lodash2(); - module2.exports = dijkstraAll; - function dijkstraAll(g4, weightFunc, edgeFunc) { - return _8.transform(g4.nodes(), function(acc, v3) { - acc[v3] = dijkstra3(g4, v3, weightFunc, edgeFunc); - }, {}); - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/alg/tarjan.js -var require_tarjan = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/alg/tarjan.js"(exports, module2) { - var _8 = require_lodash2(); - module2.exports = tarjan; - function tarjan(g4) { - var index2 = 0, stack = [], visited = {}, results = []; - function dfs2(v3) { - var entry = visited[v3] = { - onStack: true, - lowlink: index2, - index: index2++ - }; - stack.push(v3); - g4.successors(v3).forEach(function(w5) { - if (!_8.has(visited, w5)) { - dfs2(w5); - entry.lowlink = Math.min(entry.lowlink, visited[w5].lowlink); - } else if (visited[w5].onStack) { - entry.lowlink = Math.min(entry.lowlink, visited[w5].index); - } - }); - if (entry.lowlink === entry.index) { - var cmpt = [], w4; - do { - w4 = stack.pop(); - visited[w4].onStack = false; - cmpt.push(w4); - } while (v3 !== w4); - results.push(cmpt); - } - } - g4.nodes().forEach(function(v3) { - if (!_8.has(visited, v3)) { - dfs2(v3); - } - }); - return results; - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/alg/find-cycles.js -var require_find_cycles = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/alg/find-cycles.js"(exports, module2) { - var _8 = require_lodash2(); - var tarjan = require_tarjan(); - module2.exports = findCycles; - function findCycles(g4) { - return _8.filter(tarjan(g4), function(cmpt) { - return cmpt.length > 1 || cmpt.length === 1 && g4.hasEdge(cmpt[0], cmpt[0]); - }); - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/alg/floyd-warshall.js -var require_floyd_warshall = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/alg/floyd-warshall.js"(exports, module2) { - var _8 = require_lodash2(); - module2.exports = floydWarshall6; - var DEFAULT_WEIGHT_FUNC = _8.constant(1); - function floydWarshall6(g4, weightFn, edgeFn) { - return runFloydWarshall(g4, weightFn || DEFAULT_WEIGHT_FUNC, edgeFn || function(v3) { - return g4.outEdges(v3); - }); - } - function runFloydWarshall(g4, weightFn, edgeFn) { - var results = {}, nodes = g4.nodes(); - nodes.forEach(function(v3) { - results[v3] = {}; - results[v3][v3] = { distance: 0 }; - nodes.forEach(function(w4) { - if (v3 !== w4) { - results[v3][w4] = { distance: Number.POSITIVE_INFINITY }; - } - }); - edgeFn(v3).forEach(function(edge2) { - var w4 = edge2.v === v3 ? edge2.w : edge2.v, d3 = weightFn(edge2); - results[v3][w4] = { distance: d3, predecessor: v3 }; - }); - }); - nodes.forEach(function(k4) { - var rowK = results[k4]; - nodes.forEach(function(i4) { - var rowI = results[i4]; - nodes.forEach(function(j4) { - var ik = rowI[k4]; - var kj = rowK[j4]; - var ij = rowI[j4]; - var altDistance = ik.distance + kj.distance; - if (altDistance < ij.distance) { - ij.distance = altDistance; - ij.predecessor = kj.predecessor; - } - }); - }); - }); - return results; - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/alg/topsort.js -var require_topsort = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/alg/topsort.js"(exports, module2) { - var _8 = require_lodash2(); - module2.exports = topsort; - topsort.CycleException = CycleException; - function topsort(g4) { - var visited = {}, stack = {}, results = []; - function visit(node) { - if (_8.has(stack, node)) { - throw new CycleException(); - } - if (!_8.has(visited, node)) { - stack[node] = true; - visited[node] = true; - _8.each(g4.predecessors(node), visit); - delete stack[node]; - results.push(node); - } - } - _8.each(g4.sinks(), visit); - if (_8.size(visited) !== g4.nodeCount()) { - throw new CycleException(); - } - return results; - } - function CycleException() { - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/alg/is-acyclic.js -var require_is_acyclic = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/alg/is-acyclic.js"(exports, module2) { - var topsort = require_topsort(); - module2.exports = isAcyclic; - function isAcyclic(g4) { - try { - topsort(g4); - } catch (e4) { - if (e4 instanceof topsort.CycleException) { - return false; - } - throw e4; - } - return true; - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/alg/dfs.js -var require_dfs2 = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/alg/dfs.js"(exports, module2) { - var _8 = require_lodash2(); - module2.exports = dfs2; - function dfs2(g4, vs, order2) { - if (!_8.isArray(vs)) { - vs = [vs]; - } - var navigation = (g4.isDirected() ? g4.successors : g4.neighbors).bind(g4); - var acc = [], visited = {}; - _8.each(vs, function(v3) { - if (!g4.hasNode(v3)) { - throw new Error("Graph does not have node: " + v3); - } - doDfs(g4, v3, order2 === "post", visited, navigation, acc); - }); - return acc; - } - function doDfs(g4, v3, postorder3, visited, navigation, acc) { - if (!_8.has(visited, v3)) { - visited[v3] = true; - if (!postorder3) { - acc.push(v3); - } - _8.each(navigation(v3), function(w4) { - doDfs(g4, w4, postorder3, visited, navigation, acc); - }); - if (postorder3) { - acc.push(v3); - } - } - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/alg/postorder.js -var require_postorder = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/alg/postorder.js"(exports, module2) { - var dfs2 = require_dfs2(); - module2.exports = postorder3; - function postorder3(g4, vs) { - return dfs2(g4, vs, "post"); - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/alg/preorder.js -var require_preorder = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/alg/preorder.js"(exports, module2) { - var dfs2 = require_dfs2(); - module2.exports = preorder2; - function preorder2(g4, vs) { - return dfs2(g4, vs, "pre"); - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/alg/prim.js -var require_prim = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/alg/prim.js"(exports, module2) { - var _8 = require_lodash2(); - var Graph10 = require_graph(); - var PriorityQueue = require_priority_queue(); - module2.exports = prim; - function prim(g4, weightFunc) { - var result = new Graph10(), parents = {}, pq = new PriorityQueue(), v3; - function updateNeighbors(edge2) { - var w4 = edge2.v === v3 ? edge2.w : edge2.v, pri = pq.priority(w4); - if (pri !== void 0) { - var edgeWeight = weightFunc(edge2); - if (edgeWeight < pri) { - parents[w4] = v3; - pq.decrease(w4, edgeWeight); - } - } - } - if (g4.nodeCount() === 0) { - return result; - } - _8.each(g4.nodes(), function(v4) { - pq.add(v4, Number.POSITIVE_INFINITY); - result.setNode(v4); - }); - pq.decrease(g4.nodes()[0], 0); - var init = false; - while (pq.size() > 0) { - v3 = pq.removeMin(); - if (_8.has(parents, v3)) { - result.setEdge(v3, parents[v3]); - } else if (init) { - throw new Error("Input graph is not connected: " + g4); - } else { - init = true; - } - g4.nodeEdges(v3).forEach(updateNeighbors); - } - return result; - } - } -}); - -// node_modules/@dagrejs/graphlib/lib/alg/index.js -var require_alg = __commonJS({ - "node_modules/@dagrejs/graphlib/lib/alg/index.js"(exports, module2) { - module2.exports = { - components: require_components(), - dijkstra: require_dijkstra2(), - dijkstraAll: require_dijkstra_all(), - findCycles: require_find_cycles(), - floydWarshall: require_floyd_warshall(), - isAcyclic: require_is_acyclic(), - postorder: require_postorder(), - preorder: require_preorder(), - prim: require_prim(), - tarjan: require_tarjan(), - topsort: require_topsort() - }; - } -}); - -// node_modules/@dagrejs/graphlib/index.js -var require_graphlib = __commonJS({ - "node_modules/@dagrejs/graphlib/index.js"(exports, module2) { - var lib = require_lib3(); - module2.exports = { - Graph: lib.Graph, - json: require_json(), - alg: require_alg(), - version: lib.version - }; - } -}); - -// node_modules/regenerator-runtime/runtime.js -var require_runtime = __commonJS({ - "node_modules/regenerator-runtime/runtime.js"(exports, module2) { - var runtime = function(exports2) { - "use strict"; - var Op = Object.prototype; - var hasOwn = Op.hasOwnProperty; - var undefined2; - var $Symbol = typeof Symbol === "function" ? Symbol : {}; - var iteratorSymbol = $Symbol.iterator || "@@iterator"; - var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; - var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; - function define2(obj, key, value2) { - Object.defineProperty(obj, key, { - value: value2, - enumerable: true, - configurable: true, - writable: true - }); - return obj[key]; - } - try { - define2({}, ""); - } catch (err) { - define2 = function(obj, key, value2) { - return obj[key] = value2; - }; - } - function wrap(innerFn, outerFn, self2, tryLocsList) { - var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; - var generator = Object.create(protoGenerator.prototype); - var context = new Context2(tryLocsList || []); - generator._invoke = makeInvokeMethod(innerFn, self2, context); - return generator; - } - exports2.wrap = wrap; - function tryCatch(fn, obj, arg) { - try { - return { type: "normal", arg: fn.call(obj, arg) }; - } catch (err) { - return { type: "throw", arg: err }; - } - } - var GenStateSuspendedStart = "suspendedStart"; - var GenStateSuspendedYield = "suspendedYield"; - var GenStateExecuting = "executing"; - var GenStateCompleted = "completed"; - var ContinueSentinel = {}; - function Generator() { - } - function GeneratorFunction() { - } - function GeneratorFunctionPrototype() { - } - var IteratorPrototype = {}; - define2(IteratorPrototype, iteratorSymbol, function() { - return this; - }); - var getProto = Object.getPrototypeOf; - var NativeIteratorPrototype = getProto && getProto(getProto(values4([]))); - if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { - IteratorPrototype = NativeIteratorPrototype; - } - var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); - GeneratorFunction.prototype = GeneratorFunctionPrototype; - define2(Gp, "constructor", GeneratorFunctionPrototype); - define2(GeneratorFunctionPrototype, "constructor", GeneratorFunction); - GeneratorFunction.displayName = define2(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"); - function defineIteratorMethods(prototype) { - ["next", "throw", "return"].forEach(function(method) { - define2(prototype, method, function(arg) { - return this._invoke(method, arg); - }); - }); - } - exports2.isGeneratorFunction = function(genFun) { - var ctor = typeof genFun === "function" && genFun.constructor; - return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === "GeneratorFunction" : false; - }; - exports2.mark = function(genFun) { - if (Object.setPrototypeOf) { - Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); - } else { - genFun.__proto__ = GeneratorFunctionPrototype; - define2(genFun, toStringTagSymbol, "GeneratorFunction"); - } - genFun.prototype = Object.create(Gp); - return genFun; - }; - exports2.awrap = function(arg) { - return { __await: arg }; - }; - function AsyncIterator(generator, PromiseImpl) { - function invoke(method, arg, resolve, reject) { - var record = tryCatch(generator[method], generator, arg); - if (record.type === "throw") { - reject(record.arg); - } else { - var result = record.arg; - var value2 = result.value; - if (value2 && typeof value2 === "object" && hasOwn.call(value2, "__await")) { - return PromiseImpl.resolve(value2.__await).then(function(value3) { - invoke("next", value3, resolve, reject); - }, function(err) { - invoke("throw", err, resolve, reject); - }); - } - return PromiseImpl.resolve(value2).then(function(unwrapped) { - result.value = unwrapped; - resolve(result); - }, function(error) { - return invoke("throw", error, resolve, reject); - }); - } - } - var previousPromise; - function enqueue(method, arg) { - function callInvokeWithMethodAndArg() { - return new PromiseImpl(function(resolve, reject) { - invoke(method, arg, resolve, reject); - }); - } - return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); - } - this._invoke = enqueue; - } - defineIteratorMethods(AsyncIterator.prototype); - define2(AsyncIterator.prototype, asyncIteratorSymbol, function() { - return this; - }); - exports2.AsyncIterator = AsyncIterator; - exports2.async = function(innerFn, outerFn, self2, tryLocsList, PromiseImpl) { - if (PromiseImpl === void 0) - PromiseImpl = Promise; - var iter = new AsyncIterator(wrap(innerFn, outerFn, self2, tryLocsList), PromiseImpl); - return exports2.isGeneratorFunction(outerFn) ? iter : iter.next().then(function(result) { - return result.done ? result.value : iter.next(); - }); - }; - function makeInvokeMethod(innerFn, self2, context) { - var state2 = GenStateSuspendedStart; - return function invoke(method, arg) { - if (state2 === GenStateExecuting) { - throw new Error("Generator is already running"); - } - if (state2 === GenStateCompleted) { - if (method === "throw") { - throw arg; - } - return doneResult(); - } - context.method = method; - context.arg = arg; - while (true) { - var delegate = context.delegate; - if (delegate) { - var delegateResult = maybeInvokeDelegate(delegate, context); - if (delegateResult) { - if (delegateResult === ContinueSentinel) - continue; - return delegateResult; - } - } - if (context.method === "next") { - context.sent = context._sent = context.arg; - } else if (context.method === "throw") { - if (state2 === GenStateSuspendedStart) { - state2 = GenStateCompleted; - throw context.arg; - } - context.dispatchException(context.arg); - } else if (context.method === "return") { - context.abrupt("return", context.arg); - } - state2 = GenStateExecuting; - var record = tryCatch(innerFn, self2, context); - if (record.type === "normal") { - state2 = context.done ? GenStateCompleted : GenStateSuspendedYield; - if (record.arg === ContinueSentinel) { - continue; - } - return { - value: record.arg, - done: context.done - }; - } else if (record.type === "throw") { - state2 = GenStateCompleted; - context.method = "throw"; - context.arg = record.arg; - } - } - }; - } - function maybeInvokeDelegate(delegate, context) { - var method = delegate.iterator[context.method]; - if (method === undefined2) { - context.delegate = null; - if (context.method === "throw") { - if (delegate.iterator["return"]) { - context.method = "return"; - context.arg = undefined2; - maybeInvokeDelegate(delegate, context); - if (context.method === "throw") { - return ContinueSentinel; - } - } - context.method = "throw"; - context.arg = new TypeError("The iterator does not provide a 'throw' method"); - } - return ContinueSentinel; - } - var record = tryCatch(method, delegate.iterator, context.arg); - if (record.type === "throw") { - context.method = "throw"; - context.arg = record.arg; - context.delegate = null; - return ContinueSentinel; - } - var info = record.arg; - if (!info) { - context.method = "throw"; - context.arg = new TypeError("iterator result is not an object"); - context.delegate = null; - return ContinueSentinel; - } - if (info.done) { - context[delegate.resultName] = info.value; - context.next = delegate.nextLoc; - if (context.method !== "return") { - context.method = "next"; - context.arg = undefined2; - } - } else { - return info; - } - context.delegate = null; - return ContinueSentinel; - } - defineIteratorMethods(Gp); - define2(Gp, toStringTagSymbol, "Generator"); - define2(Gp, iteratorSymbol, function() { - return this; - }); - define2(Gp, "toString", function() { - return "[object Generator]"; - }); - function pushTryEntry(locs) { - var entry = { tryLoc: locs[0] }; - if (1 in locs) { - entry.catchLoc = locs[1]; - } - if (2 in locs) { - entry.finallyLoc = locs[2]; - entry.afterLoc = locs[3]; - } - this.tryEntries.push(entry); - } - function resetTryEntry(entry) { - var record = entry.completion || {}; - record.type = "normal"; - delete record.arg; - entry.completion = record; - } - function Context2(tryLocsList) { - this.tryEntries = [{ tryLoc: "root" }]; - tryLocsList.forEach(pushTryEntry, this); - this.reset(true); - } - exports2.keys = function(object) { - var keys6 = []; - for (var key in object) { - keys6.push(key); - } - keys6.reverse(); - return function next() { - while (keys6.length) { - var key2 = keys6.pop(); - if (key2 in object) { - next.value = key2; - next.done = false; - return next; - } - } - next.done = true; - return next; - }; - }; - function values4(iterable) { - if (iterable) { - var iteratorMethod = iterable[iteratorSymbol]; - if (iteratorMethod) { - return iteratorMethod.call(iterable); - } - if (typeof iterable.next === "function") { - return iterable; - } - if (!isNaN(iterable.length)) { - var i4 = -1, next = function next2() { - while (++i4 < iterable.length) { - if (hasOwn.call(iterable, i4)) { - next2.value = iterable[i4]; - next2.done = false; - return next2; - } - } - next2.value = undefined2; - next2.done = true; - return next2; - }; - return next.next = next; - } - } - return { next: doneResult }; - } - exports2.values = values4; - function doneResult() { - return { value: undefined2, done: true }; - } - Context2.prototype = { - constructor: Context2, - reset: function(skipTempReset) { - this.prev = 0; - this.next = 0; - this.sent = this._sent = undefined2; - this.done = false; - this.delegate = null; - this.method = "next"; - this.arg = undefined2; - this.tryEntries.forEach(resetTryEntry); - if (!skipTempReset) { - for (var name in this) { - if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { - this[name] = undefined2; - } - } - } - }, - stop: function() { - this.done = true; - var rootEntry = this.tryEntries[0]; - var rootRecord = rootEntry.completion; - if (rootRecord.type === "throw") { - throw rootRecord.arg; - } - return this.rval; - }, - dispatchException: function(exception2) { - if (this.done) { - throw exception2; - } - var context = this; - function handle(loc, caught) { - record.type = "throw"; - record.arg = exception2; - context.next = loc; - if (caught) { - context.method = "next"; - context.arg = undefined2; - } - return !!caught; - } - for (var i4 = this.tryEntries.length - 1; i4 >= 0; --i4) { - var entry = this.tryEntries[i4]; - var record = entry.completion; - if (entry.tryLoc === "root") { - return handle("end"); - } - if (entry.tryLoc <= this.prev) { - var hasCatch = hasOwn.call(entry, "catchLoc"); - var hasFinally = hasOwn.call(entry, "finallyLoc"); - if (hasCatch && hasFinally) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } else if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else if (hasCatch) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } - } else if (hasFinally) { - if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - } else { - throw new Error("try statement without catch or finally"); - } - } - } - }, - abrupt: function(type2, arg) { - for (var i4 = this.tryEntries.length - 1; i4 >= 0; --i4) { - var entry = this.tryEntries[i4]; - if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { - var finallyEntry = entry; - break; - } - } - if (finallyEntry && (type2 === "break" || type2 === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { - finallyEntry = null; - } - var record = finallyEntry ? finallyEntry.completion : {}; - record.type = type2; - record.arg = arg; - if (finallyEntry) { - this.method = "next"; - this.next = finallyEntry.finallyLoc; - return ContinueSentinel; - } - return this.complete(record); - }, - complete: function(record, afterLoc) { - if (record.type === "throw") { - throw record.arg; - } - if (record.type === "break" || record.type === "continue") { - this.next = record.arg; - } else if (record.type === "return") { - this.rval = this.arg = record.arg; - this.method = "return"; - this.next = "end"; - } else if (record.type === "normal" && afterLoc) { - this.next = afterLoc; - } - return ContinueSentinel; - }, - finish: function(finallyLoc) { - for (var i4 = this.tryEntries.length - 1; i4 >= 0; --i4) { - var entry = this.tryEntries[i4]; - if (entry.finallyLoc === finallyLoc) { - this.complete(entry.completion, entry.afterLoc); - resetTryEntry(entry); - return ContinueSentinel; - } - } - }, - "catch": function(tryLoc) { - for (var i4 = this.tryEntries.length - 1; i4 >= 0; --i4) { - var entry = this.tryEntries[i4]; - if (entry.tryLoc === tryLoc) { - var record = entry.completion; - if (record.type === "throw") { - var thrown = record.arg; - resetTryEntry(entry); - } - return thrown; - } - } - throw new Error("illegal catch attempt"); - }, - delegateYield: function(iterable, resultName, nextLoc) { - this.delegate = { - iterator: values4(iterable), - resultName, - nextLoc - }; - if (this.method === "next") { - this.arg = undefined2; - } - return ContinueSentinel; - } - }; - return exports2; - }(typeof module2 === "object" ? module2.exports : {}); - try { - regeneratorRuntime = runtime; - } catch (accidentalStrictMode) { - if (typeof globalThis === "object") { - globalThis.regeneratorRuntime = runtime; - } else { - Function("r", "regeneratorRuntime = r")(runtime); - } - } - } -}); - -// node_modules/@babel/runtime/regenerator/index.js -var require_regenerator = __commonJS({ - "node_modules/@babel/runtime/regenerator/index.js"(exports, module2) { - module2.exports = require_runtime(); - } -}); - -// node_modules/inversify/lib/constants/metadata_keys.js -var require_metadata_keys = __commonJS({ - "node_modules/inversify/lib/constants/metadata_keys.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.NON_CUSTOM_TAG_KEYS = exports.POST_CONSTRUCT = exports.DESIGN_PARAM_TYPES = exports.PARAM_TYPES = exports.TAGGED_PROP = exports.TAGGED = exports.MULTI_INJECT_TAG = exports.INJECT_TAG = exports.OPTIONAL_TAG = exports.UNMANAGED_TAG = exports.NAME_TAG = exports.NAMED_TAG = void 0; - exports.NAMED_TAG = "named"; - exports.NAME_TAG = "name"; - exports.UNMANAGED_TAG = "unmanaged"; - exports.OPTIONAL_TAG = "optional"; - exports.INJECT_TAG = "inject"; - exports.MULTI_INJECT_TAG = "multi_inject"; - exports.TAGGED = "inversify:tagged"; - exports.TAGGED_PROP = "inversify:tagged_props"; - exports.PARAM_TYPES = "inversify:paramtypes"; - exports.DESIGN_PARAM_TYPES = "design:paramtypes"; - exports.POST_CONSTRUCT = "post_construct"; - function getNonCustomTagKeys() { - return [ - exports.INJECT_TAG, - exports.MULTI_INJECT_TAG, - exports.NAME_TAG, - exports.UNMANAGED_TAG, - exports.NAMED_TAG, - exports.OPTIONAL_TAG - ]; - } - exports.NON_CUSTOM_TAG_KEYS = getNonCustomTagKeys(); - } -}); - -// node_modules/inversify/lib/constants/literal_types.js -var require_literal_types = __commonJS({ - "node_modules/inversify/lib/constants/literal_types.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.TargetTypeEnum = exports.BindingTypeEnum = exports.BindingScopeEnum = void 0; - var BindingScopeEnum = { - Request: "Request", - Singleton: "Singleton", - Transient: "Transient" - }; - exports.BindingScopeEnum = BindingScopeEnum; - var BindingTypeEnum = { - ConstantValue: "ConstantValue", - Constructor: "Constructor", - DynamicValue: "DynamicValue", - Factory: "Factory", - Function: "Function", - Instance: "Instance", - Invalid: "Invalid", - Provider: "Provider" - }; - exports.BindingTypeEnum = BindingTypeEnum; - var TargetTypeEnum = { - ClassProperty: "ClassProperty", - ConstructorArgument: "ConstructorArgument", - Variable: "Variable" - }; - exports.TargetTypeEnum = TargetTypeEnum; - } -}); - -// node_modules/inversify/lib/utils/id.js -var require_id2 = __commonJS({ - "node_modules/inversify/lib/utils/id.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.id = void 0; - var idCounter = 0; - function id() { - return idCounter++; - } - exports.id = id; - } -}); - -// node_modules/inversify/lib/bindings/binding.js -var require_binding = __commonJS({ - "node_modules/inversify/lib/bindings/binding.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Binding = void 0; - var literal_types_1 = require_literal_types(); - var id_1 = require_id2(); - var Binding = function() { - function Binding2(serviceIdentifier, scope) { - this.id = id_1.id(); - this.activated = false; - this.serviceIdentifier = serviceIdentifier; - this.scope = scope; - this.type = literal_types_1.BindingTypeEnum.Invalid; - this.constraint = function(request) { - return true; - }; - this.implementationType = null; - this.cache = null; - this.factory = null; - this.provider = null; - this.onActivation = null; - this.dynamicValue = null; - } - Binding2.prototype.clone = function() { - var clone41 = new Binding2(this.serviceIdentifier, this.scope); - clone41.activated = clone41.scope === literal_types_1.BindingScopeEnum.Singleton ? this.activated : false; - clone41.implementationType = this.implementationType; - clone41.dynamicValue = this.dynamicValue; - clone41.scope = this.scope; - clone41.type = this.type; - clone41.factory = this.factory; - clone41.provider = this.provider; - clone41.constraint = this.constraint; - clone41.onActivation = this.onActivation; - clone41.cache = this.cache; - return clone41; - }; - return Binding2; - }(); - exports.Binding = Binding; - } -}); - -// node_modules/inversify/lib/constants/error_msgs.js -var require_error_msgs = __commonJS({ - "node_modules/inversify/lib/constants/error_msgs.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.STACK_OVERFLOW = exports.CIRCULAR_DEPENDENCY_IN_FACTORY = exports.POST_CONSTRUCT_ERROR = exports.MULTIPLE_POST_CONSTRUCT_METHODS = exports.CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK = exports.CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE = exports.CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE = exports.CONTAINER_OPTIONS_MUST_BE_AN_OBJECT = exports.ARGUMENTS_LENGTH_MISMATCH = exports.INVALID_DECORATOR_OPERATION = exports.INVALID_TO_SELF_VALUE = exports.INVALID_FUNCTION_BINDING = exports.INVALID_MIDDLEWARE_RETURN = exports.NO_MORE_SNAPSHOTS_AVAILABLE = exports.INVALID_BINDING_TYPE = exports.NOT_IMPLEMENTED = exports.CIRCULAR_DEPENDENCY = exports.UNDEFINED_INJECT_ANNOTATION = exports.MISSING_INJECT_ANNOTATION = exports.MISSING_INJECTABLE_ANNOTATION = exports.NOT_REGISTERED = exports.CANNOT_UNBIND = exports.AMBIGUOUS_MATCH = exports.KEY_NOT_FOUND = exports.NULL_ARGUMENT = exports.DUPLICATED_METADATA = exports.DUPLICATED_INJECTABLE_DECORATOR = void 0; - exports.DUPLICATED_INJECTABLE_DECORATOR = "Cannot apply @injectable decorator multiple times."; - exports.DUPLICATED_METADATA = "Metadata key was used more than once in a parameter:"; - exports.NULL_ARGUMENT = "NULL argument"; - exports.KEY_NOT_FOUND = "Key Not Found"; - exports.AMBIGUOUS_MATCH = "Ambiguous match found for serviceIdentifier:"; - exports.CANNOT_UNBIND = "Could not unbind serviceIdentifier:"; - exports.NOT_REGISTERED = "No matching bindings found for serviceIdentifier:"; - exports.MISSING_INJECTABLE_ANNOTATION = "Missing required @injectable annotation in:"; - exports.MISSING_INJECT_ANNOTATION = "Missing required @inject or @multiInject annotation in:"; - var UNDEFINED_INJECT_ANNOTATION = function(name) { - return "@inject called with undefined this could mean that the class " + name + " has a circular dependency problem. You can use a LazyServiceIdentifer to overcome this limitation."; - }; - exports.UNDEFINED_INJECT_ANNOTATION = UNDEFINED_INJECT_ANNOTATION; - exports.CIRCULAR_DEPENDENCY = "Circular dependency found:"; - exports.NOT_IMPLEMENTED = "Sorry, this feature is not fully implemented yet."; - exports.INVALID_BINDING_TYPE = "Invalid binding type:"; - exports.NO_MORE_SNAPSHOTS_AVAILABLE = "No snapshot available to restore."; - exports.INVALID_MIDDLEWARE_RETURN = "Invalid return type in middleware. Middleware must return!"; - exports.INVALID_FUNCTION_BINDING = "Value provided to function binding must be a function!"; - exports.INVALID_TO_SELF_VALUE = "The toSelf function can only be applied when a constructor is used as service identifier"; - exports.INVALID_DECORATOR_OPERATION = "The @inject @multiInject @tagged and @named decorators must be applied to the parameters of a class constructor or a class property."; - var ARGUMENTS_LENGTH_MISMATCH = function() { - var values4 = []; - for (var _i = 0; _i < arguments.length; _i++) { - values4[_i] = arguments[_i]; - } - return "The number of constructor arguments in the derived class " + (values4[0] + " must be >= than the number of constructor arguments of its base class."); - }; - exports.ARGUMENTS_LENGTH_MISMATCH = ARGUMENTS_LENGTH_MISMATCH; - exports.CONTAINER_OPTIONS_MUST_BE_AN_OBJECT = "Invalid Container constructor argument. Container options must be an object."; - exports.CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE = "Invalid Container option. Default scope must be a string ('singleton' or 'transient')."; - exports.CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE = "Invalid Container option. Auto bind injectable must be a boolean"; - exports.CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK = "Invalid Container option. Skip base check must be a boolean"; - exports.MULTIPLE_POST_CONSTRUCT_METHODS = "Cannot apply @postConstruct decorator multiple times in the same class"; - var POST_CONSTRUCT_ERROR = function() { - var values4 = []; - for (var _i = 0; _i < arguments.length; _i++) { - values4[_i] = arguments[_i]; - } - return "@postConstruct error in class " + values4[0] + ": " + values4[1]; - }; - exports.POST_CONSTRUCT_ERROR = POST_CONSTRUCT_ERROR; - var CIRCULAR_DEPENDENCY_IN_FACTORY = function() { - var values4 = []; - for (var _i = 0; _i < arguments.length; _i++) { - values4[_i] = arguments[_i]; - } - return "It looks like there is a circular dependency " + ("in one of the '" + values4[0] + "' bindings. Please investigate bindings with") + ("service identifier '" + values4[1] + "'."); - }; - exports.CIRCULAR_DEPENDENCY_IN_FACTORY = CIRCULAR_DEPENDENCY_IN_FACTORY; - exports.STACK_OVERFLOW = "Maximum call stack size exceeded"; - } -}); - -// node_modules/inversify/lib/planning/metadata_reader.js -var require_metadata_reader = __commonJS({ - "node_modules/inversify/lib/planning/metadata_reader.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.MetadataReader = void 0; - var METADATA_KEY = require_metadata_keys(); - var MetadataReader = function() { - function MetadataReader2() { - } - MetadataReader2.prototype.getConstructorMetadata = function(constructorFunc) { - var compilerGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.PARAM_TYPES, constructorFunc); - var userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED, constructorFunc); - return { - compilerGeneratedMetadata, - userGeneratedMetadata: userGeneratedMetadata || {} - }; - }; - MetadataReader2.prototype.getPropertiesMetadata = function(constructorFunc) { - var userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED_PROP, constructorFunc) || []; - return userGeneratedMetadata; - }; - return MetadataReader2; - }(); - exports.MetadataReader = MetadataReader; - } -}); - -// node_modules/inversify/lib/bindings/binding_count.js -var require_binding_count = __commonJS({ - "node_modules/inversify/lib/bindings/binding_count.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BindingCount = void 0; - var BindingCount = { - MultipleBindingsAvailable: 2, - NoBindingsAvailable: 0, - OnlyOneBindingAvailable: 1 - }; - exports.BindingCount = BindingCount; - } -}); - -// node_modules/inversify/lib/utils/exceptions.js -var require_exceptions = __commonJS({ - "node_modules/inversify/lib/utils/exceptions.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.isStackOverflowExeption = void 0; - var ERROR_MSGS = require_error_msgs(); - function isStackOverflowExeption(error) { - return error instanceof RangeError || error.message === ERROR_MSGS.STACK_OVERFLOW; - } - exports.isStackOverflowExeption = isStackOverflowExeption; - } -}); - -// node_modules/inversify/lib/utils/serialization.js -var require_serialization = __commonJS({ - "node_modules/inversify/lib/utils/serialization.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.circularDependencyToException = exports.listMetadataForTarget = exports.listRegisteredBindingsForServiceIdentifier = exports.getServiceIdentifierAsString = exports.getFunctionName = void 0; - var ERROR_MSGS = require_error_msgs(); - function getServiceIdentifierAsString(serviceIdentifier) { - if (typeof serviceIdentifier === "function") { - var _serviceIdentifier = serviceIdentifier; - return _serviceIdentifier.name; - } else if (typeof serviceIdentifier === "symbol") { - return serviceIdentifier.toString(); - } else { - var _serviceIdentifier = serviceIdentifier; - return _serviceIdentifier; - } - } - exports.getServiceIdentifierAsString = getServiceIdentifierAsString; - function listRegisteredBindingsForServiceIdentifier(container2, serviceIdentifier, getBindings) { - var registeredBindingsList = ""; - var registeredBindings = getBindings(container2, serviceIdentifier); - if (registeredBindings.length !== 0) { - registeredBindingsList = "\nRegistered bindings:"; - registeredBindings.forEach(function(binding) { - var name = "Object"; - if (binding.implementationType !== null) { - name = getFunctionName(binding.implementationType); - } - registeredBindingsList = registeredBindingsList + "\n " + name; - if (binding.constraint.metaData) { - registeredBindingsList = registeredBindingsList + " - " + binding.constraint.metaData; - } - }); - } - return registeredBindingsList; - } - exports.listRegisteredBindingsForServiceIdentifier = listRegisteredBindingsForServiceIdentifier; - function alreadyDependencyChain(request, serviceIdentifier) { - if (request.parentRequest === null) { - return false; - } else if (request.parentRequest.serviceIdentifier === serviceIdentifier) { - return true; - } else { - return alreadyDependencyChain(request.parentRequest, serviceIdentifier); - } - } - function dependencyChainToString(request) { - function _createStringArr(req, result) { - if (result === void 0) { - result = []; - } - var serviceIdentifier = getServiceIdentifierAsString(req.serviceIdentifier); - result.push(serviceIdentifier); - if (req.parentRequest !== null) { - return _createStringArr(req.parentRequest, result); - } - return result; - } - var stringArr = _createStringArr(request); - return stringArr.reverse().join(" --> "); - } - function circularDependencyToException(request) { - request.childRequests.forEach(function(childRequest) { - if (alreadyDependencyChain(childRequest, childRequest.serviceIdentifier)) { - var services = dependencyChainToString(childRequest); - throw new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY + " " + services); - } else { - circularDependencyToException(childRequest); - } - }); - } - exports.circularDependencyToException = circularDependencyToException; - function listMetadataForTarget(serviceIdentifierString, target) { - if (target.isTagged() || target.isNamed()) { - var m_1 = ""; - var namedTag = target.getNamedTag(); - var otherTags = target.getCustomTags(); - if (namedTag !== null) { - m_1 += namedTag.toString() + "\n"; - } - if (otherTags !== null) { - otherTags.forEach(function(tag) { - m_1 += tag.toString() + "\n"; - }); - } - return " " + serviceIdentifierString + "\n " + serviceIdentifierString + " - " + m_1; - } else { - return " " + serviceIdentifierString; - } - } - exports.listMetadataForTarget = listMetadataForTarget; - function getFunctionName(v3) { - if (v3.name) { - return v3.name; - } else { - var name_1 = v3.toString(); - var match = name_1.match(/^function\s*([^\s(]+)/); - return match ? match[1] : "Anonymous function: " + name_1; - } - } - exports.getFunctionName = getFunctionName; - } -}); - -// node_modules/inversify/lib/planning/context.js -var require_context = __commonJS({ - "node_modules/inversify/lib/planning/context.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Context = void 0; - var id_1 = require_id2(); - var Context2 = function() { - function Context3(container2) { - this.id = id_1.id(); - this.container = container2; - } - Context3.prototype.addPlan = function(plan) { - this.plan = plan; - }; - Context3.prototype.setCurrentRequest = function(currentRequest) { - this.currentRequest = currentRequest; - }; - return Context3; - }(); - exports.Context = Context2; - } -}); - -// node_modules/inversify/lib/planning/metadata.js -var require_metadata = __commonJS({ - "node_modules/inversify/lib/planning/metadata.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Metadata = void 0; - var METADATA_KEY = require_metadata_keys(); - var Metadata = function() { - function Metadata2(key, value2) { - this.key = key; - this.value = value2; - } - Metadata2.prototype.toString = function() { - if (this.key === METADATA_KEY.NAMED_TAG) { - return "named: " + this.value.toString() + " "; - } else { - return "tagged: { key:" + this.key.toString() + ", value: " + this.value + " }"; - } - }; - return Metadata2; - }(); - exports.Metadata = Metadata; - } -}); - -// node_modules/inversify/lib/planning/plan.js -var require_plan = __commonJS({ - "node_modules/inversify/lib/planning/plan.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Plan = void 0; - var Plan = function() { - function Plan2(parentContext, rootRequest) { - this.parentContext = parentContext; - this.rootRequest = rootRequest; - } - return Plan2; - }(); - exports.Plan = Plan; - } -}); - -// node_modules/inversify/lib/annotation/decorator_utils.js -var require_decorator_utils = __commonJS({ - "node_modules/inversify/lib/annotation/decorator_utils.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.tagProperty = exports.tagParameter = exports.decorate = void 0; - var ERROR_MSGS = require_error_msgs(); - var METADATA_KEY = require_metadata_keys(); - function tagParameter(annotationTarget, propertyName, parameterIndex, metadata) { - var metadataKey = METADATA_KEY.TAGGED; - _tagParameterOrProperty(metadataKey, annotationTarget, propertyName, metadata, parameterIndex); - } - exports.tagParameter = tagParameter; - function tagProperty(annotationTarget, propertyName, metadata) { - var metadataKey = METADATA_KEY.TAGGED_PROP; - _tagParameterOrProperty(metadataKey, annotationTarget.constructor, propertyName, metadata); - } - exports.tagProperty = tagProperty; - function _tagParameterOrProperty(metadataKey, annotationTarget, propertyName, metadata, parameterIndex) { - var paramsOrPropertiesMetadata = {}; - var isParameterDecorator = typeof parameterIndex === "number"; - var key = parameterIndex !== void 0 && isParameterDecorator ? parameterIndex.toString() : propertyName; - if (isParameterDecorator && propertyName !== void 0) { - throw new Error(ERROR_MSGS.INVALID_DECORATOR_OPERATION); - } - if (Reflect.hasOwnMetadata(metadataKey, annotationTarget)) { - paramsOrPropertiesMetadata = Reflect.getMetadata(metadataKey, annotationTarget); - } - var paramOrPropertyMetadata = paramsOrPropertiesMetadata[key]; - if (!Array.isArray(paramOrPropertyMetadata)) { - paramOrPropertyMetadata = []; - } else { - for (var _i = 0, paramOrPropertyMetadata_1 = paramOrPropertyMetadata; _i < paramOrPropertyMetadata_1.length; _i++) { - var m4 = paramOrPropertyMetadata_1[_i]; - if (m4.key === metadata.key) { - throw new Error(ERROR_MSGS.DUPLICATED_METADATA + " " + m4.key.toString()); - } - } - } - paramOrPropertyMetadata.push(metadata); - paramsOrPropertiesMetadata[key] = paramOrPropertyMetadata; - Reflect.defineMetadata(metadataKey, paramsOrPropertiesMetadata, annotationTarget); - } - function _decorate(decorators, target) { - Reflect.decorate(decorators, target); - } - function _param(paramIndex, decorator) { - return function(target, key) { - decorator(target, key, paramIndex); - }; - } - function decorate(decorator, target, parameterIndex) { - if (typeof parameterIndex === "number") { - _decorate([_param(parameterIndex, decorator)], target); - } else if (typeof parameterIndex === "string") { - Reflect.decorate([decorator], target, parameterIndex); - } else { - _decorate([decorator], target); - } - } - exports.decorate = decorate; - } -}); - -// node_modules/inversify/lib/annotation/inject.js -var require_inject = __commonJS({ - "node_modules/inversify/lib/annotation/inject.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.inject = exports.LazyServiceIdentifer = void 0; - var error_msgs_1 = require_error_msgs(); - var METADATA_KEY = require_metadata_keys(); - var metadata_1 = require_metadata(); - var decorator_utils_1 = require_decorator_utils(); - var LazyServiceIdentifer = function() { - function LazyServiceIdentifer2(cb) { - this._cb = cb; - } - LazyServiceIdentifer2.prototype.unwrap = function() { - return this._cb(); - }; - return LazyServiceIdentifer2; - }(); - exports.LazyServiceIdentifer = LazyServiceIdentifer; - function inject24(serviceIdentifier) { - return function(target, targetKey, index2) { - if (serviceIdentifier === void 0) { - throw new Error(error_msgs_1.UNDEFINED_INJECT_ANNOTATION(target.name)); - } - var metadata = new metadata_1.Metadata(METADATA_KEY.INJECT_TAG, serviceIdentifier); - if (typeof index2 === "number") { - decorator_utils_1.tagParameter(target, targetKey, index2, metadata); - } else { - decorator_utils_1.tagProperty(target, targetKey, metadata); - } - }; - } - exports.inject = inject24; - } -}); - -// node_modules/inversify/lib/planning/queryable_string.js -var require_queryable_string = __commonJS({ - "node_modules/inversify/lib/planning/queryable_string.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.QueryableString = void 0; - var QueryableString = function() { - function QueryableString2(str8) { - this.str = str8; - } - QueryableString2.prototype.startsWith = function(searchString) { - return this.str.indexOf(searchString) === 0; - }; - QueryableString2.prototype.endsWith = function(searchString) { - var reverseString = ""; - var reverseSearchString = searchString.split("").reverse().join(""); - reverseString = this.str.split("").reverse().join(""); - return this.startsWith.call({ str: reverseString }, reverseSearchString); - }; - QueryableString2.prototype.contains = function(searchString) { - return this.str.indexOf(searchString) !== -1; - }; - QueryableString2.prototype.equals = function(compareString) { - return this.str === compareString; - }; - QueryableString2.prototype.value = function() { - return this.str; - }; - return QueryableString2; - }(); - exports.QueryableString = QueryableString; - } -}); - -// node_modules/inversify/lib/planning/target.js -var require_target = __commonJS({ - "node_modules/inversify/lib/planning/target.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Target = void 0; - var METADATA_KEY = require_metadata_keys(); - var id_1 = require_id2(); - var metadata_1 = require_metadata(); - var queryable_string_1 = require_queryable_string(); - var Target2 = function() { - function Target3(type2, name, serviceIdentifier, namedOrTagged) { - this.id = id_1.id(); - this.type = type2; - this.serviceIdentifier = serviceIdentifier; - this.name = new queryable_string_1.QueryableString(name || ""); - this.metadata = new Array(); - var metadataItem = null; - if (typeof namedOrTagged === "string") { - metadataItem = new metadata_1.Metadata(METADATA_KEY.NAMED_TAG, namedOrTagged); - } else if (namedOrTagged instanceof metadata_1.Metadata) { - metadataItem = namedOrTagged; - } - if (metadataItem !== null) { - this.metadata.push(metadataItem); - } - } - Target3.prototype.hasTag = function(key) { - for (var _i = 0, _a6 = this.metadata; _i < _a6.length; _i++) { - var m4 = _a6[_i]; - if (m4.key === key) { - return true; - } - } - return false; - }; - Target3.prototype.isArray = function() { - return this.hasTag(METADATA_KEY.MULTI_INJECT_TAG); - }; - Target3.prototype.matchesArray = function(name) { - return this.matchesTag(METADATA_KEY.MULTI_INJECT_TAG)(name); - }; - Target3.prototype.isNamed = function() { - return this.hasTag(METADATA_KEY.NAMED_TAG); - }; - Target3.prototype.isTagged = function() { - return this.metadata.some(function(metadata) { - return METADATA_KEY.NON_CUSTOM_TAG_KEYS.every(function(key) { - return metadata.key !== key; - }); - }); - }; - Target3.prototype.isOptional = function() { - return this.matchesTag(METADATA_KEY.OPTIONAL_TAG)(true); - }; - Target3.prototype.getNamedTag = function() { - if (this.isNamed()) { - return this.metadata.filter(function(m4) { - return m4.key === METADATA_KEY.NAMED_TAG; - })[0]; - } - return null; - }; - Target3.prototype.getCustomTags = function() { - if (this.isTagged()) { - return this.metadata.filter(function(metadata) { - return METADATA_KEY.NON_CUSTOM_TAG_KEYS.every(function(key) { - return metadata.key !== key; - }); - }); - } else { - return null; - } - }; - Target3.prototype.matchesNamedTag = function(name) { - return this.matchesTag(METADATA_KEY.NAMED_TAG)(name); - }; - Target3.prototype.matchesTag = function(key) { - var _this = this; - return function(value2) { - for (var _i = 0, _a6 = _this.metadata; _i < _a6.length; _i++) { - var m4 = _a6[_i]; - if (m4.key === key && m4.value === value2) { - return true; - } - } - return false; - }; - }; - return Target3; - }(); - exports.Target = Target2; - } -}); - -// node_modules/inversify/lib/planning/reflection_utils.js -var require_reflection_utils = __commonJS({ - "node_modules/inversify/lib/planning/reflection_utils.js"(exports) { - "use strict"; - var __spreadArray6 = exports && exports.__spreadArray || function(to, from) { - for (var i4 = 0, il = from.length, j4 = to.length; i4 < il; i4++, j4++) - to[j4] = from[i4]; - return to; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getFunctionName = exports.getBaseClassDependencyCount = exports.getDependencies = void 0; - var inject_1 = require_inject(); - var ERROR_MSGS = require_error_msgs(); - var literal_types_1 = require_literal_types(); - var METADATA_KEY = require_metadata_keys(); - var serialization_1 = require_serialization(); - Object.defineProperty(exports, "getFunctionName", { enumerable: true, get: function() { - return serialization_1.getFunctionName; - } }); - var target_1 = require_target(); - function getDependencies(metadataReader, func) { - var constructorName = serialization_1.getFunctionName(func); - var targets = getTargets(metadataReader, constructorName, func, false); - return targets; - } - exports.getDependencies = getDependencies; - function getTargets(metadataReader, constructorName, func, isBaseClass) { - var metadata = metadataReader.getConstructorMetadata(func); - var serviceIdentifiers = metadata.compilerGeneratedMetadata; - if (serviceIdentifiers === void 0) { - var msg = ERROR_MSGS.MISSING_INJECTABLE_ANNOTATION + " " + constructorName + "."; - throw new Error(msg); - } - var constructorArgsMetadata = metadata.userGeneratedMetadata; - var keys6 = Object.keys(constructorArgsMetadata); - var hasUserDeclaredUnknownInjections = func.length === 0 && keys6.length > 0; - var hasOptionalParameters = keys6.length > func.length; - var iterations = hasUserDeclaredUnknownInjections || hasOptionalParameters ? keys6.length : func.length; - var constructorTargets = getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations); - var propertyTargets = getClassPropsAsTargets(metadataReader, func); - var targets = __spreadArray6(__spreadArray6([], constructorTargets), propertyTargets); - return targets; - } - function getConstructorArgsAsTarget(index2, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata) { - var targetMetadata = constructorArgsMetadata[index2.toString()] || []; - var metadata = formatTargetMetadata(targetMetadata); - var isManaged = metadata.unmanaged !== true; - var serviceIdentifier = serviceIdentifiers[index2]; - var injectIdentifier = metadata.inject || metadata.multiInject; - serviceIdentifier = injectIdentifier ? injectIdentifier : serviceIdentifier; - if (serviceIdentifier instanceof inject_1.LazyServiceIdentifer) { - serviceIdentifier = serviceIdentifier.unwrap(); - } - if (isManaged) { - var isObject33 = serviceIdentifier === Object; - var isFunction44 = serviceIdentifier === Function; - var isUndefined5 = serviceIdentifier === void 0; - var isUnknownType = isObject33 || isFunction44 || isUndefined5; - if (!isBaseClass && isUnknownType) { - var msg = ERROR_MSGS.MISSING_INJECT_ANNOTATION + " argument " + index2 + " in class " + constructorName + "."; - throw new Error(msg); - } - var target = new target_1.Target(literal_types_1.TargetTypeEnum.ConstructorArgument, metadata.targetName, serviceIdentifier); - target.metadata = targetMetadata; - return target; - } - return null; - } - function getConstructorArgsAsTargets(isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata, iterations) { - var targets = []; - for (var i4 = 0; i4 < iterations; i4++) { - var index2 = i4; - var target = getConstructorArgsAsTarget(index2, isBaseClass, constructorName, serviceIdentifiers, constructorArgsMetadata); - if (target !== null) { - targets.push(target); - } - } - return targets; - } - function getClassPropsAsTargets(metadataReader, constructorFunc) { - var classPropsMetadata = metadataReader.getPropertiesMetadata(constructorFunc); - var targets = []; - var keys6 = Object.keys(classPropsMetadata); - for (var _i = 0, keys_1 = keys6; _i < keys_1.length; _i++) { - var key = keys_1[_i]; - var targetMetadata = classPropsMetadata[key]; - var metadata = formatTargetMetadata(classPropsMetadata[key]); - var targetName = metadata.targetName || key; - var serviceIdentifier = metadata.inject || metadata.multiInject; - var target = new target_1.Target(literal_types_1.TargetTypeEnum.ClassProperty, targetName, serviceIdentifier); - target.metadata = targetMetadata; - targets.push(target); - } - var baseConstructor = Object.getPrototypeOf(constructorFunc.prototype).constructor; - if (baseConstructor !== Object) { - var baseTargets = getClassPropsAsTargets(metadataReader, baseConstructor); - targets = __spreadArray6(__spreadArray6([], targets), baseTargets); - } - return targets; - } - function getBaseClassDependencyCount(metadataReader, func) { - var baseConstructor = Object.getPrototypeOf(func.prototype).constructor; - if (baseConstructor !== Object) { - var baseConstructorName = serialization_1.getFunctionName(baseConstructor); - var targets = getTargets(metadataReader, baseConstructorName, baseConstructor, true); - var metadata = targets.map(function(t4) { - return t4.metadata.filter(function(m4) { - return m4.key === METADATA_KEY.UNMANAGED_TAG; - }); - }); - var unmanagedCount = [].concat.apply([], metadata).length; - var dependencyCount = targets.length - unmanagedCount; - if (dependencyCount > 0) { - return dependencyCount; - } else { - return getBaseClassDependencyCount(metadataReader, baseConstructor); - } - } else { - return 0; - } - } - exports.getBaseClassDependencyCount = getBaseClassDependencyCount; - function formatTargetMetadata(targetMetadata) { - var targetMetadataMap = {}; - targetMetadata.forEach(function(m4) { - targetMetadataMap[m4.key.toString()] = m4.value; - }); - return { - inject: targetMetadataMap[METADATA_KEY.INJECT_TAG], - multiInject: targetMetadataMap[METADATA_KEY.MULTI_INJECT_TAG], - targetName: targetMetadataMap[METADATA_KEY.NAME_TAG], - unmanaged: targetMetadataMap[METADATA_KEY.UNMANAGED_TAG] - }; - } - } -}); - -// node_modules/inversify/lib/planning/request.js -var require_request = __commonJS({ - "node_modules/inversify/lib/planning/request.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Request = void 0; - var id_1 = require_id2(); - var Request = function() { - function Request2(serviceIdentifier, parentContext, parentRequest, bindings, target) { - this.id = id_1.id(); - this.serviceIdentifier = serviceIdentifier; - this.parentContext = parentContext; - this.parentRequest = parentRequest; - this.target = target; - this.childRequests = []; - this.bindings = Array.isArray(bindings) ? bindings : [bindings]; - this.requestScope = parentRequest === null ? new Map() : null; - } - Request2.prototype.addChildRequest = function(serviceIdentifier, bindings, target) { - var child = new Request2(serviceIdentifier, this.parentContext, this, bindings, target); - this.childRequests.push(child); - return child; - }; - return Request2; - }(); - exports.Request = Request; - } -}); - -// node_modules/inversify/lib/planning/planner.js -var require_planner = __commonJS({ - "node_modules/inversify/lib/planning/planner.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.getBindingDictionary = exports.createMockRequest = exports.plan = void 0; - var binding_count_1 = require_binding_count(); - var ERROR_MSGS = require_error_msgs(); - var literal_types_1 = require_literal_types(); - var METADATA_KEY = require_metadata_keys(); - var exceptions_1 = require_exceptions(); - var serialization_1 = require_serialization(); - var context_1 = require_context(); - var metadata_1 = require_metadata(); - var plan_1 = require_plan(); - var reflection_utils_1 = require_reflection_utils(); - var request_1 = require_request(); - var target_1 = require_target(); - function getBindingDictionary(cntnr) { - return cntnr._bindingDictionary; - } - exports.getBindingDictionary = getBindingDictionary; - function _createTarget(isMultiInject, targetType, serviceIdentifier, name, key, value2) { - var metadataKey = isMultiInject ? METADATA_KEY.MULTI_INJECT_TAG : METADATA_KEY.INJECT_TAG; - var injectMetadata = new metadata_1.Metadata(metadataKey, serviceIdentifier); - var target = new target_1.Target(targetType, name, serviceIdentifier, injectMetadata); - if (key !== void 0) { - var tagMetadata = new metadata_1.Metadata(key, value2); - target.metadata.push(tagMetadata); - } - return target; - } - function _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target) { - var bindings = getBindings(context.container, target.serviceIdentifier); - var activeBindings = []; - if (bindings.length === binding_count_1.BindingCount.NoBindingsAvailable && context.container.options.autoBindInjectable && typeof target.serviceIdentifier === "function" && metadataReader.getConstructorMetadata(target.serviceIdentifier).compilerGeneratedMetadata) { - context.container.bind(target.serviceIdentifier).toSelf(); - bindings = getBindings(context.container, target.serviceIdentifier); - } - if (!avoidConstraints) { - activeBindings = bindings.filter(function(binding) { - var request = new request_1.Request(binding.serviceIdentifier, context, parentRequest, binding, target); - return binding.constraint(request); - }); - } else { - activeBindings = bindings; - } - _validateActiveBindingCount(target.serviceIdentifier, activeBindings, target, context.container); - return activeBindings; - } - function _validateActiveBindingCount(serviceIdentifier, bindings, target, container2) { - switch (bindings.length) { - case binding_count_1.BindingCount.NoBindingsAvailable: - if (target.isOptional()) { - return bindings; - } else { - var serviceIdentifierString = serialization_1.getServiceIdentifierAsString(serviceIdentifier); - var msg = ERROR_MSGS.NOT_REGISTERED; - msg += serialization_1.listMetadataForTarget(serviceIdentifierString, target); - msg += serialization_1.listRegisteredBindingsForServiceIdentifier(container2, serviceIdentifierString, getBindings); - throw new Error(msg); - } - case binding_count_1.BindingCount.OnlyOneBindingAvailable: - if (!target.isArray()) { - return bindings; - } - case binding_count_1.BindingCount.MultipleBindingsAvailable: - default: - if (!target.isArray()) { - var serviceIdentifierString = serialization_1.getServiceIdentifierAsString(serviceIdentifier); - var msg = ERROR_MSGS.AMBIGUOUS_MATCH + " " + serviceIdentifierString; - msg += serialization_1.listRegisteredBindingsForServiceIdentifier(container2, serviceIdentifierString, getBindings); - throw new Error(msg); - } else { - return bindings; - } - } - } - function _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, parentRequest, target) { - var activeBindings; - var childRequest; - if (parentRequest === null) { - activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, null, target); - childRequest = new request_1.Request(serviceIdentifier, context, null, activeBindings, target); - var thePlan = new plan_1.Plan(context, childRequest); - context.addPlan(thePlan); - } else { - activeBindings = _getActiveBindings(metadataReader, avoidConstraints, context, parentRequest, target); - childRequest = parentRequest.addChildRequest(target.serviceIdentifier, activeBindings, target); - } - activeBindings.forEach(function(binding) { - var subChildRequest = null; - if (target.isArray()) { - subChildRequest = childRequest.addChildRequest(binding.serviceIdentifier, binding, target); - } else { - if (binding.cache) { - return; - } - subChildRequest = childRequest; - } - if (binding.type === literal_types_1.BindingTypeEnum.Instance && binding.implementationType !== null) { - var dependencies = reflection_utils_1.getDependencies(metadataReader, binding.implementationType); - if (!context.container.options.skipBaseClassChecks) { - var baseClassDependencyCount = reflection_utils_1.getBaseClassDependencyCount(metadataReader, binding.implementationType); - if (dependencies.length < baseClassDependencyCount) { - var error = ERROR_MSGS.ARGUMENTS_LENGTH_MISMATCH(reflection_utils_1.getFunctionName(binding.implementationType)); - throw new Error(error); - } - } - dependencies.forEach(function(dependency) { - _createSubRequests(metadataReader, false, dependency.serviceIdentifier, context, subChildRequest, dependency); - }); - } - }); - } - function getBindings(container2, serviceIdentifier) { - var bindings = []; - var bindingDictionary = getBindingDictionary(container2); - if (bindingDictionary.hasKey(serviceIdentifier)) { - bindings = bindingDictionary.get(serviceIdentifier); - } else if (container2.parent !== null) { - bindings = getBindings(container2.parent, serviceIdentifier); - } - return bindings; - } - function plan(metadataReader, container2, isMultiInject, targetType, serviceIdentifier, key, value2, avoidConstraints) { - if (avoidConstraints === void 0) { - avoidConstraints = false; - } - var context = new context_1.Context(container2); - var target = _createTarget(isMultiInject, targetType, serviceIdentifier, "", key, value2); - try { - _createSubRequests(metadataReader, avoidConstraints, serviceIdentifier, context, null, target); - return context; - } catch (error) { - if (exceptions_1.isStackOverflowExeption(error)) { - if (context.plan) { - serialization_1.circularDependencyToException(context.plan.rootRequest); - } - } - throw error; - } - } - exports.plan = plan; - function createMockRequest(container2, serviceIdentifier, key, value2) { - var target = new target_1.Target(literal_types_1.TargetTypeEnum.Variable, "", serviceIdentifier, new metadata_1.Metadata(key, value2)); - var context = new context_1.Context(container2); - var request = new request_1.Request(serviceIdentifier, context, null, [], target); - return request; - } - exports.createMockRequest = createMockRequest; - } -}); - -// node_modules/inversify/lib/resolution/instantiation.js -var require_instantiation = __commonJS({ - "node_modules/inversify/lib/resolution/instantiation.js"(exports) { - "use strict"; - var __spreadArray6 = exports && exports.__spreadArray || function(to, from) { - for (var i4 = 0, il = from.length, j4 = to.length; i4 < il; i4++, j4++) - to[j4] = from[i4]; - return to; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.resolveInstance = void 0; - var error_msgs_1 = require_error_msgs(); - var literal_types_1 = require_literal_types(); - var METADATA_KEY = require_metadata_keys(); - function _injectProperties(instance, childRequests, resolveRequest) { - var propertyInjectionsRequests = childRequests.filter(function(childRequest) { - return childRequest.target !== null && childRequest.target.type === literal_types_1.TargetTypeEnum.ClassProperty; - }); - var propertyInjections = propertyInjectionsRequests.map(resolveRequest); - propertyInjectionsRequests.forEach(function(r4, index2) { - var propertyName = ""; - propertyName = r4.target.name.value(); - var injection = propertyInjections[index2]; - instance[propertyName] = injection; - }); - return instance; - } - function _createInstance(Func, injections) { - return new (Func.bind.apply(Func, __spreadArray6([void 0], injections)))(); - } - function _postConstruct(constr, result) { - if (Reflect.hasMetadata(METADATA_KEY.POST_CONSTRUCT, constr)) { - var data3 = Reflect.getMetadata(METADATA_KEY.POST_CONSTRUCT, constr); - try { - result[data3.value](); - } catch (e4) { - throw new Error(error_msgs_1.POST_CONSTRUCT_ERROR(constr.name, e4.message)); - } - } - } - function resolveInstance(constr, childRequests, resolveRequest) { - var result = null; - if (childRequests.length > 0) { - var constructorInjectionsRequests = childRequests.filter(function(childRequest) { - return childRequest.target !== null && childRequest.target.type === literal_types_1.TargetTypeEnum.ConstructorArgument; - }); - var constructorInjections = constructorInjectionsRequests.map(resolveRequest); - result = _createInstance(constr, constructorInjections); - result = _injectProperties(result, childRequests, resolveRequest); - } else { - result = new constr(); - } - _postConstruct(constr, result); - return result; - } - exports.resolveInstance = resolveInstance; - } -}); - -// node_modules/inversify/lib/resolution/resolver.js -var require_resolver = __commonJS({ - "node_modules/inversify/lib/resolution/resolver.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.resolve = void 0; - var ERROR_MSGS = require_error_msgs(); - var literal_types_1 = require_literal_types(); - var exceptions_1 = require_exceptions(); - var serialization_1 = require_serialization(); - var instantiation_1 = require_instantiation(); - var invokeFactory = function(factoryType, serviceIdentifier, fn) { - try { - return fn(); - } catch (error) { - if (exceptions_1.isStackOverflowExeption(error)) { - throw new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY_IN_FACTORY(factoryType, serviceIdentifier.toString())); - } else { - throw error; - } - } - }; - var _resolveRequest = function(requestScope) { - return function(request) { - request.parentContext.setCurrentRequest(request); - var bindings = request.bindings; - var childRequests = request.childRequests; - var targetIsAnArray = request.target && request.target.isArray(); - var targetParentIsNotAnArray = !request.parentRequest || !request.parentRequest.target || !request.target || !request.parentRequest.target.matchesArray(request.target.serviceIdentifier); - if (targetIsAnArray && targetParentIsNotAnArray) { - return childRequests.map(function(childRequest) { - var _f = _resolveRequest(requestScope); - return _f(childRequest); - }); - } else { - var result = null; - if (request.target.isOptional() && bindings.length === 0) { - return void 0; - } - var binding_1 = bindings[0]; - var isSingleton = binding_1.scope === literal_types_1.BindingScopeEnum.Singleton; - var isRequestSingleton = binding_1.scope === literal_types_1.BindingScopeEnum.Request; - if (isSingleton && binding_1.activated) { - return binding_1.cache; - } - if (isRequestSingleton && requestScope !== null && requestScope.has(binding_1.id)) { - return requestScope.get(binding_1.id); - } - if (binding_1.type === literal_types_1.BindingTypeEnum.ConstantValue) { - result = binding_1.cache; - binding_1.activated = true; - } else if (binding_1.type === literal_types_1.BindingTypeEnum.Function) { - result = binding_1.cache; - binding_1.activated = true; - } else if (binding_1.type === literal_types_1.BindingTypeEnum.Constructor) { - result = binding_1.implementationType; - } else if (binding_1.type === literal_types_1.BindingTypeEnum.DynamicValue && binding_1.dynamicValue !== null) { - result = invokeFactory("toDynamicValue", binding_1.serviceIdentifier, function() { - return binding_1.dynamicValue(request.parentContext); - }); - } else if (binding_1.type === literal_types_1.BindingTypeEnum.Factory && binding_1.factory !== null) { - result = invokeFactory("toFactory", binding_1.serviceIdentifier, function() { - return binding_1.factory(request.parentContext); - }); - } else if (binding_1.type === literal_types_1.BindingTypeEnum.Provider && binding_1.provider !== null) { - result = invokeFactory("toProvider", binding_1.serviceIdentifier, function() { - return binding_1.provider(request.parentContext); - }); - } else if (binding_1.type === literal_types_1.BindingTypeEnum.Instance && binding_1.implementationType !== null) { - result = instantiation_1.resolveInstance(binding_1.implementationType, childRequests, _resolveRequest(requestScope)); - } else { - var serviceIdentifier = serialization_1.getServiceIdentifierAsString(request.serviceIdentifier); - throw new Error(ERROR_MSGS.INVALID_BINDING_TYPE + " " + serviceIdentifier); - } - if (typeof binding_1.onActivation === "function") { - result = binding_1.onActivation(request.parentContext, result); - } - if (isSingleton) { - binding_1.cache = result; - binding_1.activated = true; - } - if (isRequestSingleton && requestScope !== null && !requestScope.has(binding_1.id)) { - requestScope.set(binding_1.id, result); - } - return result; - } - }; - }; - function resolve(context) { - var _f = _resolveRequest(context.plan.rootRequest.requestScope); - return _f(context.plan.rootRequest); - } - exports.resolve = resolve; - } -}); - -// node_modules/inversify/lib/syntax/constraint_helpers.js -var require_constraint_helpers = __commonJS({ - "node_modules/inversify/lib/syntax/constraint_helpers.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.typeConstraint = exports.namedConstraint = exports.taggedConstraint = exports.traverseAncerstors = void 0; - var METADATA_KEY = require_metadata_keys(); - var metadata_1 = require_metadata(); - var traverseAncerstors = function(request, constraint) { - var parent = request.parentRequest; - if (parent !== null) { - return constraint(parent) ? true : traverseAncerstors(parent, constraint); - } else { - return false; - } - }; - exports.traverseAncerstors = traverseAncerstors; - var taggedConstraint = function(key) { - return function(value2) { - var constraint = function(request) { - return request !== null && request.target !== null && request.target.matchesTag(key)(value2); - }; - constraint.metaData = new metadata_1.Metadata(key, value2); - return constraint; - }; - }; - exports.taggedConstraint = taggedConstraint; - var namedConstraint = taggedConstraint(METADATA_KEY.NAMED_TAG); - exports.namedConstraint = namedConstraint; - var typeConstraint = function(type2) { - return function(request) { - var binding = null; - if (request !== null) { - binding = request.bindings[0]; - if (typeof type2 === "string") { - var serviceIdentifier = binding.serviceIdentifier; - return serviceIdentifier === type2; - } else { - var constructor = request.bindings[0].implementationType; - return type2 === constructor; - } - } - return false; - }; - }; - exports.typeConstraint = typeConstraint; - } -}); - -// node_modules/inversify/lib/syntax/binding_when_syntax.js -var require_binding_when_syntax = __commonJS({ - "node_modules/inversify/lib/syntax/binding_when_syntax.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BindingWhenSyntax = void 0; - var binding_on_syntax_1 = require_binding_on_syntax(); - var constraint_helpers_1 = require_constraint_helpers(); - var BindingWhenSyntax = function() { - function BindingWhenSyntax2(binding) { - this._binding = binding; - } - BindingWhenSyntax2.prototype.when = function(constraint) { - this._binding.constraint = constraint; - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenTargetNamed = function(name) { - this._binding.constraint = constraint_helpers_1.namedConstraint(name); - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenTargetIsDefault = function() { - this._binding.constraint = function(request) { - var targetIsDefault = request.target !== null && !request.target.isNamed() && !request.target.isTagged(); - return targetIsDefault; - }; - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenTargetTagged = function(tag, value2) { - this._binding.constraint = constraint_helpers_1.taggedConstraint(tag)(value2); - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenInjectedInto = function(parent) { - this._binding.constraint = function(request) { - return constraint_helpers_1.typeConstraint(parent)(request.parentRequest); - }; - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenParentNamed = function(name) { - this._binding.constraint = function(request) { - return constraint_helpers_1.namedConstraint(name)(request.parentRequest); - }; - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenParentTagged = function(tag, value2) { - this._binding.constraint = function(request) { - return constraint_helpers_1.taggedConstraint(tag)(value2)(request.parentRequest); - }; - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenAnyAncestorIs = function(ancestor) { - this._binding.constraint = function(request) { - return constraint_helpers_1.traverseAncerstors(request, constraint_helpers_1.typeConstraint(ancestor)); - }; - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenNoAncestorIs = function(ancestor) { - this._binding.constraint = function(request) { - return !constraint_helpers_1.traverseAncerstors(request, constraint_helpers_1.typeConstraint(ancestor)); - }; - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenAnyAncestorNamed = function(name) { - this._binding.constraint = function(request) { - return constraint_helpers_1.traverseAncerstors(request, constraint_helpers_1.namedConstraint(name)); - }; - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenNoAncestorNamed = function(name) { - this._binding.constraint = function(request) { - return !constraint_helpers_1.traverseAncerstors(request, constraint_helpers_1.namedConstraint(name)); - }; - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenAnyAncestorTagged = function(tag, value2) { - this._binding.constraint = function(request) { - return constraint_helpers_1.traverseAncerstors(request, constraint_helpers_1.taggedConstraint(tag)(value2)); - }; - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenNoAncestorTagged = function(tag, value2) { - this._binding.constraint = function(request) { - return !constraint_helpers_1.traverseAncerstors(request, constraint_helpers_1.taggedConstraint(tag)(value2)); - }; - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenAnyAncestorMatches = function(constraint) { - this._binding.constraint = function(request) { - return constraint_helpers_1.traverseAncerstors(request, constraint); - }; - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - BindingWhenSyntax2.prototype.whenNoAncestorMatches = function(constraint) { - this._binding.constraint = function(request) { - return !constraint_helpers_1.traverseAncerstors(request, constraint); - }; - return new binding_on_syntax_1.BindingOnSyntax(this._binding); - }; - return BindingWhenSyntax2; - }(); - exports.BindingWhenSyntax = BindingWhenSyntax; - } -}); - -// node_modules/inversify/lib/syntax/binding_on_syntax.js -var require_binding_on_syntax = __commonJS({ - "node_modules/inversify/lib/syntax/binding_on_syntax.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BindingOnSyntax = void 0; - var binding_when_syntax_1 = require_binding_when_syntax(); - var BindingOnSyntax = function() { - function BindingOnSyntax2(binding) { - this._binding = binding; - } - BindingOnSyntax2.prototype.onActivation = function(handler) { - this._binding.onActivation = handler; - return new binding_when_syntax_1.BindingWhenSyntax(this._binding); - }; - return BindingOnSyntax2; - }(); - exports.BindingOnSyntax = BindingOnSyntax; - } -}); - -// node_modules/inversify/lib/syntax/binding_when_on_syntax.js -var require_binding_when_on_syntax = __commonJS({ - "node_modules/inversify/lib/syntax/binding_when_on_syntax.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BindingWhenOnSyntax = void 0; - var binding_on_syntax_1 = require_binding_on_syntax(); - var binding_when_syntax_1 = require_binding_when_syntax(); - var BindingWhenOnSyntax = function() { - function BindingWhenOnSyntax2(binding) { - this._binding = binding; - this._bindingWhenSyntax = new binding_when_syntax_1.BindingWhenSyntax(this._binding); - this._bindingOnSyntax = new binding_on_syntax_1.BindingOnSyntax(this._binding); - } - BindingWhenOnSyntax2.prototype.when = function(constraint) { - return this._bindingWhenSyntax.when(constraint); - }; - BindingWhenOnSyntax2.prototype.whenTargetNamed = function(name) { - return this._bindingWhenSyntax.whenTargetNamed(name); - }; - BindingWhenOnSyntax2.prototype.whenTargetIsDefault = function() { - return this._bindingWhenSyntax.whenTargetIsDefault(); - }; - BindingWhenOnSyntax2.prototype.whenTargetTagged = function(tag, value2) { - return this._bindingWhenSyntax.whenTargetTagged(tag, value2); - }; - BindingWhenOnSyntax2.prototype.whenInjectedInto = function(parent) { - return this._bindingWhenSyntax.whenInjectedInto(parent); - }; - BindingWhenOnSyntax2.prototype.whenParentNamed = function(name) { - return this._bindingWhenSyntax.whenParentNamed(name); - }; - BindingWhenOnSyntax2.prototype.whenParentTagged = function(tag, value2) { - return this._bindingWhenSyntax.whenParentTagged(tag, value2); - }; - BindingWhenOnSyntax2.prototype.whenAnyAncestorIs = function(ancestor) { - return this._bindingWhenSyntax.whenAnyAncestorIs(ancestor); - }; - BindingWhenOnSyntax2.prototype.whenNoAncestorIs = function(ancestor) { - return this._bindingWhenSyntax.whenNoAncestorIs(ancestor); - }; - BindingWhenOnSyntax2.prototype.whenAnyAncestorNamed = function(name) { - return this._bindingWhenSyntax.whenAnyAncestorNamed(name); - }; - BindingWhenOnSyntax2.prototype.whenAnyAncestorTagged = function(tag, value2) { - return this._bindingWhenSyntax.whenAnyAncestorTagged(tag, value2); - }; - BindingWhenOnSyntax2.prototype.whenNoAncestorNamed = function(name) { - return this._bindingWhenSyntax.whenNoAncestorNamed(name); - }; - BindingWhenOnSyntax2.prototype.whenNoAncestorTagged = function(tag, value2) { - return this._bindingWhenSyntax.whenNoAncestorTagged(tag, value2); - }; - BindingWhenOnSyntax2.prototype.whenAnyAncestorMatches = function(constraint) { - return this._bindingWhenSyntax.whenAnyAncestorMatches(constraint); - }; - BindingWhenOnSyntax2.prototype.whenNoAncestorMatches = function(constraint) { - return this._bindingWhenSyntax.whenNoAncestorMatches(constraint); - }; - BindingWhenOnSyntax2.prototype.onActivation = function(handler) { - return this._bindingOnSyntax.onActivation(handler); - }; - return BindingWhenOnSyntax2; - }(); - exports.BindingWhenOnSyntax = BindingWhenOnSyntax; - } -}); - -// node_modules/inversify/lib/syntax/binding_in_syntax.js -var require_binding_in_syntax = __commonJS({ - "node_modules/inversify/lib/syntax/binding_in_syntax.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BindingInSyntax = void 0; - var literal_types_1 = require_literal_types(); - var binding_when_on_syntax_1 = require_binding_when_on_syntax(); - var BindingInSyntax = function() { - function BindingInSyntax2(binding) { - this._binding = binding; - } - BindingInSyntax2.prototype.inRequestScope = function() { - this._binding.scope = literal_types_1.BindingScopeEnum.Request; - return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding); - }; - BindingInSyntax2.prototype.inSingletonScope = function() { - this._binding.scope = literal_types_1.BindingScopeEnum.Singleton; - return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding); - }; - BindingInSyntax2.prototype.inTransientScope = function() { - this._binding.scope = literal_types_1.BindingScopeEnum.Transient; - return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding); - }; - return BindingInSyntax2; - }(); - exports.BindingInSyntax = BindingInSyntax; - } -}); - -// node_modules/inversify/lib/syntax/binding_in_when_on_syntax.js -var require_binding_in_when_on_syntax = __commonJS({ - "node_modules/inversify/lib/syntax/binding_in_when_on_syntax.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BindingInWhenOnSyntax = void 0; - var binding_in_syntax_1 = require_binding_in_syntax(); - var binding_on_syntax_1 = require_binding_on_syntax(); - var binding_when_syntax_1 = require_binding_when_syntax(); - var BindingInWhenOnSyntax = function() { - function BindingInWhenOnSyntax2(binding) { - this._binding = binding; - this._bindingWhenSyntax = new binding_when_syntax_1.BindingWhenSyntax(this._binding); - this._bindingOnSyntax = new binding_on_syntax_1.BindingOnSyntax(this._binding); - this._bindingInSyntax = new binding_in_syntax_1.BindingInSyntax(binding); - } - BindingInWhenOnSyntax2.prototype.inRequestScope = function() { - return this._bindingInSyntax.inRequestScope(); - }; - BindingInWhenOnSyntax2.prototype.inSingletonScope = function() { - return this._bindingInSyntax.inSingletonScope(); - }; - BindingInWhenOnSyntax2.prototype.inTransientScope = function() { - return this._bindingInSyntax.inTransientScope(); - }; - BindingInWhenOnSyntax2.prototype.when = function(constraint) { - return this._bindingWhenSyntax.when(constraint); - }; - BindingInWhenOnSyntax2.prototype.whenTargetNamed = function(name) { - return this._bindingWhenSyntax.whenTargetNamed(name); - }; - BindingInWhenOnSyntax2.prototype.whenTargetIsDefault = function() { - return this._bindingWhenSyntax.whenTargetIsDefault(); - }; - BindingInWhenOnSyntax2.prototype.whenTargetTagged = function(tag, value2) { - return this._bindingWhenSyntax.whenTargetTagged(tag, value2); - }; - BindingInWhenOnSyntax2.prototype.whenInjectedInto = function(parent) { - return this._bindingWhenSyntax.whenInjectedInto(parent); - }; - BindingInWhenOnSyntax2.prototype.whenParentNamed = function(name) { - return this._bindingWhenSyntax.whenParentNamed(name); - }; - BindingInWhenOnSyntax2.prototype.whenParentTagged = function(tag, value2) { - return this._bindingWhenSyntax.whenParentTagged(tag, value2); - }; - BindingInWhenOnSyntax2.prototype.whenAnyAncestorIs = function(ancestor) { - return this._bindingWhenSyntax.whenAnyAncestorIs(ancestor); - }; - BindingInWhenOnSyntax2.prototype.whenNoAncestorIs = function(ancestor) { - return this._bindingWhenSyntax.whenNoAncestorIs(ancestor); - }; - BindingInWhenOnSyntax2.prototype.whenAnyAncestorNamed = function(name) { - return this._bindingWhenSyntax.whenAnyAncestorNamed(name); - }; - BindingInWhenOnSyntax2.prototype.whenAnyAncestorTagged = function(tag, value2) { - return this._bindingWhenSyntax.whenAnyAncestorTagged(tag, value2); - }; - BindingInWhenOnSyntax2.prototype.whenNoAncestorNamed = function(name) { - return this._bindingWhenSyntax.whenNoAncestorNamed(name); - }; - BindingInWhenOnSyntax2.prototype.whenNoAncestorTagged = function(tag, value2) { - return this._bindingWhenSyntax.whenNoAncestorTagged(tag, value2); - }; - BindingInWhenOnSyntax2.prototype.whenAnyAncestorMatches = function(constraint) { - return this._bindingWhenSyntax.whenAnyAncestorMatches(constraint); - }; - BindingInWhenOnSyntax2.prototype.whenNoAncestorMatches = function(constraint) { - return this._bindingWhenSyntax.whenNoAncestorMatches(constraint); - }; - BindingInWhenOnSyntax2.prototype.onActivation = function(handler) { - return this._bindingOnSyntax.onActivation(handler); - }; - return BindingInWhenOnSyntax2; - }(); - exports.BindingInWhenOnSyntax = BindingInWhenOnSyntax; - } -}); - -// node_modules/inversify/lib/syntax/binding_to_syntax.js -var require_binding_to_syntax = __commonJS({ - "node_modules/inversify/lib/syntax/binding_to_syntax.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.BindingToSyntax = void 0; - var ERROR_MSGS = require_error_msgs(); - var literal_types_1 = require_literal_types(); - var binding_in_when_on_syntax_1 = require_binding_in_when_on_syntax(); - var binding_when_on_syntax_1 = require_binding_when_on_syntax(); - var BindingToSyntax = function() { - function BindingToSyntax2(binding) { - this._binding = binding; - } - BindingToSyntax2.prototype.to = function(constructor) { - this._binding.type = literal_types_1.BindingTypeEnum.Instance; - this._binding.implementationType = constructor; - return new binding_in_when_on_syntax_1.BindingInWhenOnSyntax(this._binding); - }; - BindingToSyntax2.prototype.toSelf = function() { - if (typeof this._binding.serviceIdentifier !== "function") { - throw new Error("" + ERROR_MSGS.INVALID_TO_SELF_VALUE); - } - var self2 = this._binding.serviceIdentifier; - return this.to(self2); - }; - BindingToSyntax2.prototype.toConstantValue = function(value2) { - this._binding.type = literal_types_1.BindingTypeEnum.ConstantValue; - this._binding.cache = value2; - this._binding.dynamicValue = null; - this._binding.implementationType = null; - this._binding.scope = literal_types_1.BindingScopeEnum.Singleton; - return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding); - }; - BindingToSyntax2.prototype.toDynamicValue = function(func) { - this._binding.type = literal_types_1.BindingTypeEnum.DynamicValue; - this._binding.cache = null; - this._binding.dynamicValue = func; - this._binding.implementationType = null; - return new binding_in_when_on_syntax_1.BindingInWhenOnSyntax(this._binding); - }; - BindingToSyntax2.prototype.toConstructor = function(constructor) { - this._binding.type = literal_types_1.BindingTypeEnum.Constructor; - this._binding.implementationType = constructor; - this._binding.scope = literal_types_1.BindingScopeEnum.Singleton; - return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding); - }; - BindingToSyntax2.prototype.toFactory = function(factory) { - this._binding.type = literal_types_1.BindingTypeEnum.Factory; - this._binding.factory = factory; - this._binding.scope = literal_types_1.BindingScopeEnum.Singleton; - return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding); - }; - BindingToSyntax2.prototype.toFunction = function(func) { - if (typeof func !== "function") { - throw new Error(ERROR_MSGS.INVALID_FUNCTION_BINDING); - } - var bindingWhenOnSyntax = this.toConstantValue(func); - this._binding.type = literal_types_1.BindingTypeEnum.Function; - this._binding.scope = literal_types_1.BindingScopeEnum.Singleton; - return bindingWhenOnSyntax; - }; - BindingToSyntax2.prototype.toAutoFactory = function(serviceIdentifier) { - this._binding.type = literal_types_1.BindingTypeEnum.Factory; - this._binding.factory = function(context) { - var autofactory = function() { - return context.container.get(serviceIdentifier); - }; - return autofactory; - }; - this._binding.scope = literal_types_1.BindingScopeEnum.Singleton; - return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding); - }; - BindingToSyntax2.prototype.toProvider = function(provider) { - this._binding.type = literal_types_1.BindingTypeEnum.Provider; - this._binding.provider = provider; - this._binding.scope = literal_types_1.BindingScopeEnum.Singleton; - return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding); - }; - BindingToSyntax2.prototype.toService = function(service) { - this.toDynamicValue(function(context) { - return context.container.get(service); - }); - }; - return BindingToSyntax2; - }(); - exports.BindingToSyntax = BindingToSyntax; - } -}); - -// node_modules/inversify/lib/container/container_snapshot.js -var require_container_snapshot = __commonJS({ - "node_modules/inversify/lib/container/container_snapshot.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.ContainerSnapshot = void 0; - var ContainerSnapshot = function() { - function ContainerSnapshot2() { - } - ContainerSnapshot2.of = function(bindings, middleware) { - var snapshot = new ContainerSnapshot2(); - snapshot.bindings = bindings; - snapshot.middleware = middleware; - return snapshot; - }; - return ContainerSnapshot2; - }(); - exports.ContainerSnapshot = ContainerSnapshot; - } -}); - -// node_modules/inversify/lib/container/lookup.js -var require_lookup = __commonJS({ - "node_modules/inversify/lib/container/lookup.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Lookup = void 0; - var ERROR_MSGS = require_error_msgs(); - var Lookup = function() { - function Lookup2() { - this._map = new Map(); - } - Lookup2.prototype.getMap = function() { - return this._map; - }; - Lookup2.prototype.add = function(serviceIdentifier, value2) { - if (serviceIdentifier === null || serviceIdentifier === void 0) { - throw new Error(ERROR_MSGS.NULL_ARGUMENT); - } - if (value2 === null || value2 === void 0) { - throw new Error(ERROR_MSGS.NULL_ARGUMENT); - } - var entry = this._map.get(serviceIdentifier); - if (entry !== void 0) { - entry.push(value2); - this._map.set(serviceIdentifier, entry); - } else { - this._map.set(serviceIdentifier, [value2]); - } - }; - Lookup2.prototype.get = function(serviceIdentifier) { - if (serviceIdentifier === null || serviceIdentifier === void 0) { - throw new Error(ERROR_MSGS.NULL_ARGUMENT); - } - var entry = this._map.get(serviceIdentifier); - if (entry !== void 0) { - return entry; - } else { - throw new Error(ERROR_MSGS.KEY_NOT_FOUND); - } - }; - Lookup2.prototype.remove = function(serviceIdentifier) { - if (serviceIdentifier === null || serviceIdentifier === void 0) { - throw new Error(ERROR_MSGS.NULL_ARGUMENT); - } - if (!this._map.delete(serviceIdentifier)) { - throw new Error(ERROR_MSGS.KEY_NOT_FOUND); - } - }; - Lookup2.prototype.removeByCondition = function(condition) { - var _this = this; - this._map.forEach(function(entries, key) { - var updatedEntries = entries.filter(function(entry) { - return !condition(entry); - }); - if (updatedEntries.length > 0) { - _this._map.set(key, updatedEntries); - } else { - _this._map.delete(key); - } - }); - }; - Lookup2.prototype.hasKey = function(serviceIdentifier) { - if (serviceIdentifier === null || serviceIdentifier === void 0) { - throw new Error(ERROR_MSGS.NULL_ARGUMENT); - } - return this._map.has(serviceIdentifier); - }; - Lookup2.prototype.clone = function() { - var copy8 = new Lookup2(); - this._map.forEach(function(value2, key) { - value2.forEach(function(b10) { - return copy8.add(key, b10.clone()); - }); - }); - return copy8; - }; - Lookup2.prototype.traverse = function(func) { - this._map.forEach(function(value2, key) { - func(key, value2); - }); - }; - return Lookup2; - }(); - exports.Lookup = Lookup; - } -}); - -// node_modules/inversify/lib/container/container.js -var require_container = __commonJS({ - "node_modules/inversify/lib/container/container.js"(exports) { - "use strict"; - var __awaiter7 = exports && exports.__awaiter || function(thisArg, _arguments, P4, generator) { - function adopt(value2) { - return value2 instanceof P4 ? value2 : new P4(function(resolve) { - resolve(value2); - }); - } - return new (P4 || (P4 = Promise))(function(resolve, reject) { - function fulfilled(value2) { - try { - step(generator.next(value2)); - } catch (e4) { - reject(e4); - } - } - function rejected(value2) { - try { - step(generator["throw"](value2)); - } catch (e4) { - reject(e4); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - }; - var __generator5 = exports && exports.__generator || function(thisArg, body) { - var _8 = { label: 0, sent: function() { - if (t4[0] & 1) - throw t4[1]; - return t4[1]; - }, trys: [], ops: [] }, f3, y5, t4, g4; - return g4 = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g4[Symbol.iterator] = function() { - return this; - }), g4; - function verb(n3) { - return function(v3) { - return step([n3, v3]); - }; - } - function step(op) { - if (f3) - throw new TypeError("Generator is already executing."); - while (_8) - try { - if (f3 = 1, y5 && (t4 = op[0] & 2 ? y5["return"] : op[0] ? y5["throw"] || ((t4 = y5["return"]) && t4.call(y5), 0) : y5.next) && !(t4 = t4.call(y5, op[1])).done) - return t4; - if (y5 = 0, t4) - op = [op[0] & 2, t4.value]; - switch (op[0]) { - case 0: - case 1: - t4 = op; - break; - case 4: - _8.label++; - return { value: op[1], done: false }; - case 5: - _8.label++; - y5 = op[1]; - op = [0]; - continue; - case 7: - op = _8.ops.pop(); - _8.trys.pop(); - continue; - default: - if (!(t4 = _8.trys, t4 = t4.length > 0 && t4[t4.length - 1]) && (op[0] === 6 || op[0] === 2)) { - _8 = 0; - continue; - } - if (op[0] === 3 && (!t4 || op[1] > t4[0] && op[1] < t4[3])) { - _8.label = op[1]; - break; - } - if (op[0] === 6 && _8.label < t4[1]) { - _8.label = t4[1]; - t4 = op; - break; - } - if (t4 && _8.label < t4[2]) { - _8.label = t4[2]; - _8.ops.push(op); - break; - } - if (t4[2]) - _8.ops.pop(); - _8.trys.pop(); - continue; - } - op = body.call(thisArg, _8); - } catch (e4) { - op = [6, e4]; - y5 = 0; - } finally { - f3 = t4 = 0; - } - if (op[0] & 5) - throw op[1]; - return { value: op[0] ? op[1] : void 0, done: true }; - } - }; - var __spreadArray6 = exports && exports.__spreadArray || function(to, from) { - for (var i4 = 0, il = from.length, j4 = to.length; i4 < il; i4++, j4++) - to[j4] = from[i4]; - return to; - }; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.Container = void 0; - var binding_1 = require_binding(); - var ERROR_MSGS = require_error_msgs(); - var literal_types_1 = require_literal_types(); - var METADATA_KEY = require_metadata_keys(); - var metadata_reader_1 = require_metadata_reader(); - var planner_1 = require_planner(); - var resolver_1 = require_resolver(); - var binding_to_syntax_1 = require_binding_to_syntax(); - var id_1 = require_id2(); - var serialization_1 = require_serialization(); - var container_snapshot_1 = require_container_snapshot(); - var lookup_1 = require_lookup(); - var Container3 = function() { - function Container4(containerOptions) { - this._appliedMiddleware = []; - var options = containerOptions || {}; - if (typeof options !== "object") { - throw new Error("" + ERROR_MSGS.CONTAINER_OPTIONS_MUST_BE_AN_OBJECT); - } - if (options.defaultScope === void 0) { - options.defaultScope = literal_types_1.BindingScopeEnum.Transient; - } else if (options.defaultScope !== literal_types_1.BindingScopeEnum.Singleton && options.defaultScope !== literal_types_1.BindingScopeEnum.Transient && options.defaultScope !== literal_types_1.BindingScopeEnum.Request) { - throw new Error("" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE); - } - if (options.autoBindInjectable === void 0) { - options.autoBindInjectable = false; - } else if (typeof options.autoBindInjectable !== "boolean") { - throw new Error("" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE); - } - if (options.skipBaseClassChecks === void 0) { - options.skipBaseClassChecks = false; - } else if (typeof options.skipBaseClassChecks !== "boolean") { - throw new Error("" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK); - } - this.options = { - autoBindInjectable: options.autoBindInjectable, - defaultScope: options.defaultScope, - skipBaseClassChecks: options.skipBaseClassChecks - }; - this.id = id_1.id(); - this._bindingDictionary = new lookup_1.Lookup(); - this._snapshots = []; - this._middleware = null; - this.parent = null; - this._metadataReader = new metadata_reader_1.MetadataReader(); - } - Container4.merge = function(container1, container2) { - var container3 = []; - for (var _i = 2; _i < arguments.length; _i++) { - container3[_i - 2] = arguments[_i]; - } - var container4 = new Container4(); - var targetContainers = __spreadArray6([container1, container2], container3).map(function(targetContainer) { - return planner_1.getBindingDictionary(targetContainer); - }); - var bindingDictionary = planner_1.getBindingDictionary(container4); - function copyDictionary(origin, destination) { - origin.traverse(function(key, value2) { - value2.forEach(function(binding) { - destination.add(binding.serviceIdentifier, binding.clone()); - }); - }); - } - targetContainers.forEach(function(targetBindingDictionary) { - copyDictionary(targetBindingDictionary, bindingDictionary); - }); - return container4; - }; - Container4.prototype.load = function() { - var modules = []; - for (var _i = 0; _i < arguments.length; _i++) { - modules[_i] = arguments[_i]; - } - var getHelpers = this._getContainerModuleHelpersFactory(); - for (var _a6 = 0, modules_1 = modules; _a6 < modules_1.length; _a6++) { - var currentModule = modules_1[_a6]; - var containerModuleHelpers = getHelpers(currentModule.id); - currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction); - } - }; - Container4.prototype.loadAsync = function() { - var modules = []; - for (var _i = 0; _i < arguments.length; _i++) { - modules[_i] = arguments[_i]; - } - return __awaiter7(this, void 0, void 0, function() { - var getHelpers, _a6, modules_2, currentModule, containerModuleHelpers; - return __generator5(this, function(_b) { - switch (_b.label) { - case 0: - getHelpers = this._getContainerModuleHelpersFactory(); - _a6 = 0, modules_2 = modules; - _b.label = 1; - case 1: - if (!(_a6 < modules_2.length)) - return [3, 4]; - currentModule = modules_2[_a6]; - containerModuleHelpers = getHelpers(currentModule.id); - return [4, currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction)]; - case 2: - _b.sent(); - _b.label = 3; - case 3: - _a6++; - return [3, 1]; - case 4: - return [2]; - } - }); - }); - }; - Container4.prototype.unload = function() { - var _this = this; - var modules = []; - for (var _i = 0; _i < arguments.length; _i++) { - modules[_i] = arguments[_i]; - } - var conditionFactory = function(expected) { - return function(item) { - return item.moduleId === expected; - }; - }; - modules.forEach(function(module3) { - var condition = conditionFactory(module3.id); - _this._bindingDictionary.removeByCondition(condition); - }); - }; - Container4.prototype.bind = function(serviceIdentifier) { - var scope = this.options.defaultScope || literal_types_1.BindingScopeEnum.Transient; - var binding = new binding_1.Binding(serviceIdentifier, scope); - this._bindingDictionary.add(serviceIdentifier, binding); - return new binding_to_syntax_1.BindingToSyntax(binding); - }; - Container4.prototype.rebind = function(serviceIdentifier) { - this.unbind(serviceIdentifier); - return this.bind(serviceIdentifier); - }; - Container4.prototype.unbind = function(serviceIdentifier) { - try { - this._bindingDictionary.remove(serviceIdentifier); - } catch (e4) { - throw new Error(ERROR_MSGS.CANNOT_UNBIND + " " + serialization_1.getServiceIdentifierAsString(serviceIdentifier)); - } - }; - Container4.prototype.unbindAll = function() { - this._bindingDictionary = new lookup_1.Lookup(); - }; - Container4.prototype.isBound = function(serviceIdentifier) { - var bound = this._bindingDictionary.hasKey(serviceIdentifier); - if (!bound && this.parent) { - bound = this.parent.isBound(serviceIdentifier); - } - return bound; - }; - Container4.prototype.isBoundNamed = function(serviceIdentifier, named9) { - return this.isBoundTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named9); - }; - Container4.prototype.isBoundTagged = function(serviceIdentifier, key, value2) { - var bound = false; - if (this._bindingDictionary.hasKey(serviceIdentifier)) { - var bindings = this._bindingDictionary.get(serviceIdentifier); - var request_1 = planner_1.createMockRequest(this, serviceIdentifier, key, value2); - bound = bindings.some(function(b10) { - return b10.constraint(request_1); - }); - } - if (!bound && this.parent) { - bound = this.parent.isBoundTagged(serviceIdentifier, key, value2); - } - return bound; - }; - Container4.prototype.snapshot = function() { - this._snapshots.push(container_snapshot_1.ContainerSnapshot.of(this._bindingDictionary.clone(), this._middleware)); - }; - Container4.prototype.restore = function() { - var snapshot = this._snapshots.pop(); - if (snapshot === void 0) { - throw new Error(ERROR_MSGS.NO_MORE_SNAPSHOTS_AVAILABLE); - } - this._bindingDictionary = snapshot.bindings; - this._middleware = snapshot.middleware; - }; - Container4.prototype.createChild = function(containerOptions) { - var child = new Container4(containerOptions || this.options); - child.parent = this; - return child; - }; - Container4.prototype.applyMiddleware = function() { - var middlewares = []; - for (var _i = 0; _i < arguments.length; _i++) { - middlewares[_i] = arguments[_i]; - } - this._appliedMiddleware = this._appliedMiddleware.concat(middlewares); - var initial = this._middleware ? this._middleware : this._planAndResolve(); - this._middleware = middlewares.reduce(function(prev, curr) { - return curr(prev); - }, initial); - }; - Container4.prototype.applyCustomMetadataReader = function(metadataReader) { - this._metadataReader = metadataReader; - }; - Container4.prototype.get = function(serviceIdentifier) { - return this._get(false, false, literal_types_1.TargetTypeEnum.Variable, serviceIdentifier); - }; - Container4.prototype.getTagged = function(serviceIdentifier, key, value2) { - return this._get(false, false, literal_types_1.TargetTypeEnum.Variable, serviceIdentifier, key, value2); - }; - Container4.prototype.getNamed = function(serviceIdentifier, named9) { - return this.getTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named9); - }; - Container4.prototype.getAll = function(serviceIdentifier) { - return this._get(true, true, literal_types_1.TargetTypeEnum.Variable, serviceIdentifier); - }; - Container4.prototype.getAllTagged = function(serviceIdentifier, key, value2) { - return this._get(false, true, literal_types_1.TargetTypeEnum.Variable, serviceIdentifier, key, value2); - }; - Container4.prototype.getAllNamed = function(serviceIdentifier, named9) { - return this.getAllTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named9); - }; - Container4.prototype.resolve = function(constructorFunction) { - var tempContainer = this.createChild(); - tempContainer.bind(constructorFunction).toSelf(); - this._appliedMiddleware.forEach(function(m4) { - tempContainer.applyMiddleware(m4); - }); - return tempContainer.get(constructorFunction); - }; - Container4.prototype._getContainerModuleHelpersFactory = function() { - var _this = this; - var setModuleId = function(bindingToSyntax, moduleId) { - bindingToSyntax._binding.moduleId = moduleId; - }; - var getBindFunction = function(moduleId) { - return function(serviceIdentifier) { - var _bind = _this.bind.bind(_this); - var bindingToSyntax = _bind(serviceIdentifier); - setModuleId(bindingToSyntax, moduleId); - return bindingToSyntax; - }; - }; - var getUnbindFunction = function(moduleId) { - return function(serviceIdentifier) { - var _unbind = _this.unbind.bind(_this); - _unbind(serviceIdentifier); - }; - }; - var getIsboundFunction = function(moduleId) { - return function(serviceIdentifier) { - var _isBound = _this.isBound.bind(_this); - return _isBound(serviceIdentifier); - }; - }; - var getRebindFunction = function(moduleId) { - return function(serviceIdentifier) { - var _rebind = _this.rebind.bind(_this); - var bindingToSyntax = _rebind(serviceIdentifier); - setModuleId(bindingToSyntax, moduleId); - return bindingToSyntax; - }; - }; - return function(mId) { - return { - bindFunction: getBindFunction(mId), - isboundFunction: getIsboundFunction(mId), - rebindFunction: getRebindFunction(mId), - unbindFunction: getUnbindFunction(mId) - }; - }; - }; - Container4.prototype._get = function(avoidConstraints, isMultiInject, targetType, serviceIdentifier, key, value2) { - var result = null; - var defaultArgs = { - avoidConstraints, - contextInterceptor: function(context) { - return context; - }, - isMultiInject, - key, - serviceIdentifier, - targetType, - value: value2 - }; - if (this._middleware) { - result = this._middleware(defaultArgs); - if (result === void 0 || result === null) { - throw new Error(ERROR_MSGS.INVALID_MIDDLEWARE_RETURN); - } - } else { - result = this._planAndResolve()(defaultArgs); - } - return result; - }; - Container4.prototype._planAndResolve = function() { - var _this = this; - return function(args) { - var context = planner_1.plan(_this._metadataReader, _this, args.isMultiInject, args.targetType, args.serviceIdentifier, args.key, args.value, args.avoidConstraints); - context = args.contextInterceptor(context); - var result = resolver_1.resolve(context); - return result; - }; - }; - return Container4; - }(); - exports.Container = Container3; - } -}); - -// node_modules/inversify/lib/container/container_module.js -var require_container_module = __commonJS({ - "node_modules/inversify/lib/container/container_module.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.AsyncContainerModule = exports.ContainerModule = void 0; - var id_1 = require_id2(); - var ContainerModule = function() { - function ContainerModule2(registry) { - this.id = id_1.id(); - this.registry = registry; - } - return ContainerModule2; - }(); - exports.ContainerModule = ContainerModule; - var AsyncContainerModule = function() { - function AsyncContainerModule2(registry) { - this.id = id_1.id(); - this.registry = registry; - } - return AsyncContainerModule2; - }(); - exports.AsyncContainerModule = AsyncContainerModule; - } -}); - -// node_modules/inversify/lib/annotation/injectable.js -var require_injectable = __commonJS({ - "node_modules/inversify/lib/annotation/injectable.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.injectable = void 0; - var ERRORS_MSGS = require_error_msgs(); - var METADATA_KEY = require_metadata_keys(); - function injectable35() { - return function(target) { - if (Reflect.hasOwnMetadata(METADATA_KEY.PARAM_TYPES, target)) { - throw new Error(ERRORS_MSGS.DUPLICATED_INJECTABLE_DECORATOR); - } - var types2 = Reflect.getMetadata(METADATA_KEY.DESIGN_PARAM_TYPES, target) || []; - Reflect.defineMetadata(METADATA_KEY.PARAM_TYPES, types2, target); - return target; - }; - } - exports.injectable = injectable35; - } -}); - -// node_modules/inversify/lib/annotation/tagged.js -var require_tagged = __commonJS({ - "node_modules/inversify/lib/annotation/tagged.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.tagged = void 0; - var metadata_1 = require_metadata(); - var decorator_utils_1 = require_decorator_utils(); - function tagged(metadataKey, metadataValue) { - return function(target, targetKey, index2) { - var metadata = new metadata_1.Metadata(metadataKey, metadataValue); - if (typeof index2 === "number") { - decorator_utils_1.tagParameter(target, targetKey, index2, metadata); - } else { - decorator_utils_1.tagProperty(target, targetKey, metadata); - } - }; - } - exports.tagged = tagged; - } -}); - -// node_modules/inversify/lib/annotation/named.js -var require_named = __commonJS({ - "node_modules/inversify/lib/annotation/named.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.named = void 0; - var METADATA_KEY = require_metadata_keys(); - var metadata_1 = require_metadata(); - var decorator_utils_1 = require_decorator_utils(); - function named9(name) { - return function(target, targetKey, index2) { - var metadata = new metadata_1.Metadata(METADATA_KEY.NAMED_TAG, name); - if (typeof index2 === "number") { - decorator_utils_1.tagParameter(target, targetKey, index2, metadata); - } else { - decorator_utils_1.tagProperty(target, targetKey, metadata); - } - }; - } - exports.named = named9; - } -}); - -// node_modules/inversify/lib/annotation/optional.js -var require_optional = __commonJS({ - "node_modules/inversify/lib/annotation/optional.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.optional = void 0; - var METADATA_KEY = require_metadata_keys(); - var metadata_1 = require_metadata(); - var decorator_utils_1 = require_decorator_utils(); - function optional2() { - return function(target, targetKey, index2) { - var metadata = new metadata_1.Metadata(METADATA_KEY.OPTIONAL_TAG, true); - if (typeof index2 === "number") { - decorator_utils_1.tagParameter(target, targetKey, index2, metadata); - } else { - decorator_utils_1.tagProperty(target, targetKey, metadata); - } - }; - } - exports.optional = optional2; - } -}); - -// node_modules/inversify/lib/annotation/unmanaged.js -var require_unmanaged = __commonJS({ - "node_modules/inversify/lib/annotation/unmanaged.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.unmanaged = void 0; - var METADATA_KEY = require_metadata_keys(); - var metadata_1 = require_metadata(); - var decorator_utils_1 = require_decorator_utils(); - function unmanaged() { - return function(target, targetKey, index2) { - var metadata = new metadata_1.Metadata(METADATA_KEY.UNMANAGED_TAG, true); - decorator_utils_1.tagParameter(target, targetKey, index2, metadata); - }; - } - exports.unmanaged = unmanaged; - } -}); - -// node_modules/inversify/lib/annotation/multi_inject.js -var require_multi_inject = __commonJS({ - "node_modules/inversify/lib/annotation/multi_inject.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.multiInject = void 0; - var METADATA_KEY = require_metadata_keys(); - var metadata_1 = require_metadata(); - var decorator_utils_1 = require_decorator_utils(); - function multiInject(serviceIdentifier) { - return function(target, targetKey, index2) { - var metadata = new metadata_1.Metadata(METADATA_KEY.MULTI_INJECT_TAG, serviceIdentifier); - if (typeof index2 === "number") { - decorator_utils_1.tagParameter(target, targetKey, index2, metadata); - } else { - decorator_utils_1.tagProperty(target, targetKey, metadata); - } - }; - } - exports.multiInject = multiInject; - } -}); - -// node_modules/inversify/lib/annotation/target_name.js -var require_target_name = __commonJS({ - "node_modules/inversify/lib/annotation/target_name.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.targetName = void 0; - var METADATA_KEY = require_metadata_keys(); - var metadata_1 = require_metadata(); - var decorator_utils_1 = require_decorator_utils(); - function targetName(name) { - return function(target, targetKey, index2) { - var metadata = new metadata_1.Metadata(METADATA_KEY.NAME_TAG, name); - decorator_utils_1.tagParameter(target, targetKey, index2, metadata); - }; - } - exports.targetName = targetName; - } -}); - -// node_modules/inversify/lib/annotation/post_construct.js -var require_post_construct = __commonJS({ - "node_modules/inversify/lib/annotation/post_construct.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.postConstruct = void 0; - var ERRORS_MSGS = require_error_msgs(); - var METADATA_KEY = require_metadata_keys(); - var metadata_1 = require_metadata(); - function postConstruct() { - return function(target, propertyKey, descriptor) { - var metadata = new metadata_1.Metadata(METADATA_KEY.POST_CONSTRUCT, propertyKey); - if (Reflect.hasOwnMetadata(METADATA_KEY.POST_CONSTRUCT, target.constructor)) { - throw new Error(ERRORS_MSGS.MULTIPLE_POST_CONSTRUCT_METHODS); - } - Reflect.defineMetadata(METADATA_KEY.POST_CONSTRUCT, metadata, target.constructor); - }; - } - exports.postConstruct = postConstruct; - } -}); - -// node_modules/inversify/lib/utils/binding_utils.js -var require_binding_utils = __commonJS({ - "node_modules/inversify/lib/utils/binding_utils.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.multiBindToService = void 0; - var multiBindToService = function(container2) { - return function(service) { - return function() { - var types2 = []; - for (var _i = 0; _i < arguments.length; _i++) { - types2[_i] = arguments[_i]; - } - return types2.forEach(function(t4) { - return container2.bind(t4).toService(service); - }); - }; - }; - }; - exports.multiBindToService = multiBindToService; - } -}); - -// node_modules/inversify/lib/inversify.js -var require_inversify = __commonJS({ - "node_modules/inversify/lib/inversify.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - exports.multiBindToService = exports.getServiceIdentifierAsString = exports.typeConstraint = exports.namedConstraint = exports.taggedConstraint = exports.traverseAncerstors = exports.decorate = exports.id = exports.MetadataReader = exports.postConstruct = exports.targetName = exports.multiInject = exports.unmanaged = exports.optional = exports.LazyServiceIdentifer = exports.inject = exports.named = exports.tagged = exports.injectable = exports.ContainerModule = exports.AsyncContainerModule = exports.TargetTypeEnum = exports.BindingTypeEnum = exports.BindingScopeEnum = exports.Container = exports.METADATA_KEY = void 0; - var keys6 = require_metadata_keys(); - exports.METADATA_KEY = keys6; - var container_1 = require_container(); - Object.defineProperty(exports, "Container", { enumerable: true, get: function() { - return container_1.Container; - } }); - var literal_types_1 = require_literal_types(); - Object.defineProperty(exports, "BindingScopeEnum", { enumerable: true, get: function() { - return literal_types_1.BindingScopeEnum; - } }); - Object.defineProperty(exports, "BindingTypeEnum", { enumerable: true, get: function() { - return literal_types_1.BindingTypeEnum; - } }); - Object.defineProperty(exports, "TargetTypeEnum", { enumerable: true, get: function() { - return literal_types_1.TargetTypeEnum; - } }); - var container_module_1 = require_container_module(); - Object.defineProperty(exports, "AsyncContainerModule", { enumerable: true, get: function() { - return container_module_1.AsyncContainerModule; - } }); - Object.defineProperty(exports, "ContainerModule", { enumerable: true, get: function() { - return container_module_1.ContainerModule; - } }); - var injectable_1 = require_injectable(); - Object.defineProperty(exports, "injectable", { enumerable: true, get: function() { - return injectable_1.injectable; - } }); - var tagged_1 = require_tagged(); - Object.defineProperty(exports, "tagged", { enumerable: true, get: function() { - return tagged_1.tagged; - } }); - var named_1 = require_named(); - Object.defineProperty(exports, "named", { enumerable: true, get: function() { - return named_1.named; - } }); - var inject_1 = require_inject(); - Object.defineProperty(exports, "inject", { enumerable: true, get: function() { - return inject_1.inject; - } }); - Object.defineProperty(exports, "LazyServiceIdentifer", { enumerable: true, get: function() { - return inject_1.LazyServiceIdentifer; - } }); - var optional_1 = require_optional(); - Object.defineProperty(exports, "optional", { enumerable: true, get: function() { - return optional_1.optional; - } }); - var unmanaged_1 = require_unmanaged(); - Object.defineProperty(exports, "unmanaged", { enumerable: true, get: function() { - return unmanaged_1.unmanaged; - } }); - var multi_inject_1 = require_multi_inject(); - Object.defineProperty(exports, "multiInject", { enumerable: true, get: function() { - return multi_inject_1.multiInject; - } }); - var target_name_1 = require_target_name(); - Object.defineProperty(exports, "targetName", { enumerable: true, get: function() { - return target_name_1.targetName; - } }); - var post_construct_1 = require_post_construct(); - Object.defineProperty(exports, "postConstruct", { enumerable: true, get: function() { - return post_construct_1.postConstruct; - } }); - var metadata_reader_1 = require_metadata_reader(); - Object.defineProperty(exports, "MetadataReader", { enumerable: true, get: function() { - return metadata_reader_1.MetadataReader; - } }); - var id_1 = require_id2(); - Object.defineProperty(exports, "id", { enumerable: true, get: function() { - return id_1.id; - } }); - var decorator_utils_1 = require_decorator_utils(); - Object.defineProperty(exports, "decorate", { enumerable: true, get: function() { - return decorator_utils_1.decorate; - } }); - var constraint_helpers_1 = require_constraint_helpers(); - Object.defineProperty(exports, "traverseAncerstors", { enumerable: true, get: function() { - return constraint_helpers_1.traverseAncerstors; - } }); - Object.defineProperty(exports, "taggedConstraint", { enumerable: true, get: function() { - return constraint_helpers_1.taggedConstraint; - } }); - Object.defineProperty(exports, "namedConstraint", { enumerable: true, get: function() { - return constraint_helpers_1.namedConstraint; - } }); - Object.defineProperty(exports, "typeConstraint", { enumerable: true, get: function() { - return constraint_helpers_1.typeConstraint; - } }); - var serialization_1 = require_serialization(); - Object.defineProperty(exports, "getServiceIdentifierAsString", { enumerable: true, get: function() { - return serialization_1.getServiceIdentifierAsString; - } }); - var binding_utils_1 = require_binding_utils(); - Object.defineProperty(exports, "multiBindToService", { enumerable: true, get: function() { - return binding_utils_1.multiBindToService; - } }); - } -}); - -// node_modules/inversify-inject-decorators/lib/decorators.js -var require_decorators = __commonJS({ - "node_modules/inversify-inject-decorators/lib/decorators.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var INJECTION = Symbol.for("INJECTION"); - function _proxyGetter(proto, key, resolve, doCache) { - function getter() { - if (doCache && !Reflect.hasMetadata(INJECTION, this, key)) { - Reflect.defineMetadata(INJECTION, resolve(), this, key); - } - if (Reflect.hasMetadata(INJECTION, this, key)) { - return Reflect.getMetadata(INJECTION, this, key); - } else { - return resolve(); - } - } - function setter(newVal) { - Reflect.defineMetadata(INJECTION, newVal, this, key); - } - Object.defineProperty(proto, key, { - configurable: true, - enumerable: true, - get: getter, - set: setter - }); - } - function makePropertyInjectDecorator(container2, doCache) { - return function(serviceIdentifier) { - return function(proto, key) { - var resolve = function() { - return container2.get(serviceIdentifier); - }; - _proxyGetter(proto, key, resolve, doCache); - }; - }; - } - exports.makePropertyInjectDecorator = makePropertyInjectDecorator; - function makePropertyInjectNamedDecorator(container2, doCache) { - return function(serviceIdentifier, named9) { - return function(proto, key) { - var resolve = function() { - return container2.getNamed(serviceIdentifier, named9); - }; - _proxyGetter(proto, key, resolve, doCache); - }; - }; - } - exports.makePropertyInjectNamedDecorator = makePropertyInjectNamedDecorator; - function makePropertyInjectTaggedDecorator(container2, doCache) { - return function(serviceIdentifier, key, value2) { - return function(proto, propertyName) { - var resolve = function() { - return container2.getTagged(serviceIdentifier, key, value2); - }; - _proxyGetter(proto, propertyName, resolve, doCache); - }; - }; - } - exports.makePropertyInjectTaggedDecorator = makePropertyInjectTaggedDecorator; - function makePropertyMultiInjectDecorator(container2, doCache) { - return function(serviceIdentifier) { - return function(proto, key) { - var resolve = function() { - return container2.getAll(serviceIdentifier); - }; - _proxyGetter(proto, key, resolve, doCache); - }; - }; - } - exports.makePropertyMultiInjectDecorator = makePropertyMultiInjectDecorator; - } -}); - -// node_modules/inversify-inject-decorators/lib/index.js -var require_lib4 = __commonJS({ - "node_modules/inversify-inject-decorators/lib/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var decorators_1 = require_decorators(); - function getDecorators2(container2, doCache) { - if (doCache === void 0) { - doCache = true; - } - var lazyInject2 = decorators_1.makePropertyInjectDecorator(container2, doCache); - var lazyInjectNamed = decorators_1.makePropertyInjectNamedDecorator(container2, doCache); - var lazyInjectTagged = decorators_1.makePropertyInjectTaggedDecorator(container2, doCache); - var lazyMultiInject2 = decorators_1.makePropertyMultiInjectDecorator(container2, doCache); - return { - lazyInject: lazyInject2, - lazyInjectNamed, - lazyInjectTagged, - lazyMultiInject: lazyMultiInject2 - }; - } - exports.default = getDecorators2; - } -}); - -// node_modules/@webgpu/types/dist/constants.js -var require_constants = __commonJS({ - "node_modules/@webgpu/types/dist/constants.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - var ExtensionName; - (function(ExtensionName2) { - ExtensionName2["TextureCompressionBC"] = "texture-compression-bc"; - })(ExtensionName = exports.ExtensionName || (exports.ExtensionName = {})); - var AddressMode; - (function(AddressMode2) { - AddressMode2["ClampToEdge"] = "clamp-to-edge"; - AddressMode2["Repeat"] = "repeat"; - AddressMode2["MirrorRepeat"] = "mirror-repeat"; - })(AddressMode = exports.AddressMode || (exports.AddressMode = {})); - var BindingType2; - (function(BindingType3) { - BindingType3["UniformBuffer"] = "uniform-buffer"; - BindingType3["StorageBuffer"] = "storage-buffer"; - BindingType3["ReadonlyStorageBuffer"] = "readonly-storage-buffer"; - BindingType3["Sampler"] = "sampler"; - BindingType3["ComparisonSampler"] = "comparison-sampler"; - BindingType3["SampledTexture"] = "sampled-texture"; - BindingType3["ReadonlyStorageTexture"] = "readonly-storage-texture"; - BindingType3["WriteonlyStorageTexture"] = "writeonly-storage-texture"; - })(BindingType2 = exports.BindingType || (exports.BindingType = {})); - var BlendFactor2; - (function(BlendFactor3) { - BlendFactor3["Zero"] = "zero"; - BlendFactor3["One"] = "one"; - BlendFactor3["SrcColor"] = "src-color"; - BlendFactor3["OneMinusSrcColor"] = "one-minus-src-color"; - BlendFactor3["SrcAlpha"] = "src-alpha"; - BlendFactor3["OneMinusSrcAlpha"] = "one-minus-src-alpha"; - BlendFactor3["DstColor"] = "dst-color"; - BlendFactor3["OneMinusDstColor"] = "one-minus-dst-color"; - BlendFactor3["DstAlpha"] = "dst-alpha"; - BlendFactor3["OneMinusDstAlpha"] = "one-minus-dst-alpha"; - BlendFactor3["SrcAlphaSaturated"] = "src-alpha-saturated"; - BlendFactor3["BlendColor"] = "blend-color"; - BlendFactor3["OneMinusBlendColor"] = "one-minus-blend-color"; - })(BlendFactor2 = exports.BlendFactor || (exports.BlendFactor = {})); - var BlendOperation2; - (function(BlendOperation3) { - BlendOperation3["Add"] = "add"; - BlendOperation3["Subtract"] = "subtract"; - BlendOperation3["ReverseSubtract"] = "reverse-subtract"; - BlendOperation3["Min"] = "min"; - BlendOperation3["Max"] = "max"; - })(BlendOperation2 = exports.BlendOperation || (exports.BlendOperation = {})); - var CompareFunction2; - (function(CompareFunction3) { - CompareFunction3["Never"] = "never"; - CompareFunction3["Less"] = "less"; - CompareFunction3["Equal"] = "equal"; - CompareFunction3["LessEqual"] = "less-equal"; - CompareFunction3["Greater"] = "greater"; - CompareFunction3["NotEqual"] = "not-equal"; - CompareFunction3["GreaterEqual"] = "greater-equal"; - CompareFunction3["Always"] = "always"; - })(CompareFunction2 = exports.CompareFunction || (exports.CompareFunction = {})); - var CullMode3; - (function(CullMode4) { - CullMode4["None"] = "none"; - CullMode4["Front"] = "front"; - CullMode4["Back"] = "back"; - })(CullMode3 = exports.CullMode || (exports.CullMode = {})); - var FilterMode; - (function(FilterMode2) { - FilterMode2["Nearest"] = "nearest"; - FilterMode2["Linear"] = "linear"; - })(FilterMode = exports.FilterMode || (exports.FilterMode = {})); - var FrontFace2; - (function(FrontFace3) { - FrontFace3["CCW"] = "ccw"; - FrontFace3["CW"] = "cw"; - })(FrontFace2 = exports.FrontFace || (exports.FrontFace = {})); - var IndexFormat2; - (function(IndexFormat3) { - IndexFormat3["Uint16"] = "uint16"; - IndexFormat3["Uint32"] = "uint32"; - })(IndexFormat2 = exports.IndexFormat || (exports.IndexFormat = {})); - var InputStepMode; - (function(InputStepMode2) { - InputStepMode2["Vertex"] = "vertex"; - InputStepMode2["Instance"] = "instance"; - })(InputStepMode = exports.InputStepMode || (exports.InputStepMode = {})); - var LoadOp2; - (function(LoadOp3) { - LoadOp3["Load"] = "load"; - })(LoadOp2 = exports.LoadOp || (exports.LoadOp = {})); - var PrimitiveTopology2; - (function(PrimitiveTopology3) { - PrimitiveTopology3["PointList"] = "point-list"; - PrimitiveTopology3["LineList"] = "line-list"; - PrimitiveTopology3["LineStrip"] = "line-strip"; - PrimitiveTopology3["TriangleList"] = "triangle-list"; - PrimitiveTopology3["TriangleStrip"] = "triangle-strip"; - })(PrimitiveTopology2 = exports.PrimitiveTopology || (exports.PrimitiveTopology = {})); - var StencilOperation2; - (function(StencilOperation3) { - StencilOperation3["Keep"] = "keep"; - StencilOperation3["Zero"] = "zero"; - StencilOperation3["Replace"] = "replace"; - StencilOperation3["Invert"] = "invert"; - StencilOperation3["IncrementClamp"] = "increment-clamp"; - StencilOperation3["DecrementClamp"] = "decrement-clamp"; - StencilOperation3["IncrementWrap"] = "increment-wrap"; - StencilOperation3["DecrementWrap"] = "decrement-wrap"; - })(StencilOperation2 = exports.StencilOperation || (exports.StencilOperation = {})); - var StoreOp2; - (function(StoreOp3) { - StoreOp3["Store"] = "store"; - StoreOp3["Clear"] = "clear"; - })(StoreOp2 = exports.StoreOp || (exports.StoreOp = {})); - var TextureDimension3; - (function(TextureDimension4) { - TextureDimension4["E1d"] = "1d"; - TextureDimension4["E2d"] = "2d"; - TextureDimension4["E3d"] = "3d"; - })(TextureDimension3 = exports.TextureDimension || (exports.TextureDimension = {})); - var TextureFormat6; - (function(TextureFormat7) { - TextureFormat7["R8Unorm"] = "r8unorm"; - TextureFormat7["R8Snorm"] = "r8snorm"; - TextureFormat7["R8Uint"] = "r8uint"; - TextureFormat7["R8Sint"] = "r8sint"; - TextureFormat7["R16Uint"] = "r16uint"; - TextureFormat7["R16Sint"] = "r16sint"; - TextureFormat7["R16Float"] = "r16float"; - TextureFormat7["RG8Unorm"] = "rg8unorm"; - TextureFormat7["RG8Snorm"] = "rg8snorm"; - TextureFormat7["RG8Uint"] = "rg8uint"; - TextureFormat7["RG8Sint"] = "rg8sint"; - TextureFormat7["R32Uint"] = "r32uint"; - TextureFormat7["R32Sint"] = "r32sint"; - TextureFormat7["R32Float"] = "r32float"; - TextureFormat7["RG16Uint"] = "rg16uint"; - TextureFormat7["RG16Sint"] = "rg16sint"; - TextureFormat7["RG16Float"] = "rg16float"; - TextureFormat7["RGBA8Unorm"] = "rgba8unorm"; - TextureFormat7["RGBA8UnormSRGB"] = "rgba8unorm-srgb"; - TextureFormat7["RGBA8Snorm"] = "rgba8snorm"; - TextureFormat7["RGBA8Uint"] = "rgba8uint"; - TextureFormat7["RGBA8Sint"] = "rgba8sint"; - TextureFormat7["BGRA8Unorm"] = "bgra8unorm"; - TextureFormat7["BGRA8UnormSRGB"] = "bgra8unorm-srgb"; - TextureFormat7["RGB10A2Unorm"] = "rgb10a2unorm"; - TextureFormat7["RG11B10Float"] = "rg11b10float"; - TextureFormat7["RG32Uint"] = "rg32uint"; - TextureFormat7["RG32Sint"] = "rg32sint"; - TextureFormat7["RG32Float"] = "rg32float"; - TextureFormat7["RGBA16Uint"] = "rgba16uint"; - TextureFormat7["RGBA16Sint"] = "rgba16sint"; - TextureFormat7["RGBA16Float"] = "rgba16float"; - TextureFormat7["RGBA32Uint"] = "rgba32uint"; - TextureFormat7["RGBA32Sint"] = "rgba32sint"; - TextureFormat7["RGBA32Float"] = "rgba32float"; - TextureFormat7["Depth32Float"] = "depth32float"; - TextureFormat7["Depth24Plus"] = "depth24plus"; - TextureFormat7["Depth24PlusStencil8"] = "depth24plus-stencil8"; - })(TextureFormat6 = exports.TextureFormat || (exports.TextureFormat = {})); - var TextureComponentType; - (function(TextureComponentType2) { - TextureComponentType2["Float"] = "float"; - TextureComponentType2["Sint"] = "sint"; - TextureComponentType2["Uint"] = "uint"; - })(TextureComponentType = exports.TextureComponentType || (exports.TextureComponentType = {})); - var TextureViewDimension2; - (function(TextureViewDimension3) { - TextureViewDimension3["E1d"] = "1d"; - TextureViewDimension3["E2d"] = "2d"; - TextureViewDimension3["E2dArray"] = "2d-array"; - TextureViewDimension3["Cube"] = "cube"; - TextureViewDimension3["CubeArray"] = "cube-array"; - TextureViewDimension3["E3d"] = "3d"; - })(TextureViewDimension2 = exports.TextureViewDimension || (exports.TextureViewDimension = {})); - var VertexFormat; - (function(VertexFormat2) { - VertexFormat2["Uchar2"] = "uchar2"; - VertexFormat2["Uchar4"] = "uchar4"; - VertexFormat2["Char2"] = "char2"; - VertexFormat2["Char4"] = "char4"; - VertexFormat2["Uchar2Norm"] = "uchar2norm"; - VertexFormat2["Uchar4Norm"] = "uchar4norm"; - VertexFormat2["Char2Norm"] = "char2norm"; - VertexFormat2["Char4Norm"] = "char4norm"; - VertexFormat2["Ushort2"] = "ushort2"; - VertexFormat2["Ushort4"] = "ushort4"; - VertexFormat2["Short2"] = "short2"; - VertexFormat2["Short4"] = "short4"; - VertexFormat2["Ushort2Norm"] = "ushort2norm"; - VertexFormat2["Ushort4Norm"] = "ushort4norm"; - VertexFormat2["Short2Norm"] = "short2norm"; - VertexFormat2["Short4Norm"] = "short4norm"; - VertexFormat2["Half2"] = "half2"; - VertexFormat2["Half4"] = "half4"; - VertexFormat2["Float"] = "float"; - VertexFormat2["Float2"] = "float2"; - VertexFormat2["Float3"] = "float3"; - VertexFormat2["Float4"] = "float4"; - VertexFormat2["Uint"] = "uint"; - VertexFormat2["Uint2"] = "uint2"; - VertexFormat2["Uint3"] = "uint3"; - VertexFormat2["Uint4"] = "uint4"; - VertexFormat2["Int"] = "int"; - VertexFormat2["Int2"] = "int2"; - VertexFormat2["Int3"] = "int3"; - VertexFormat2["Int4"] = "int4"; - })(VertexFormat = exports.VertexFormat || (exports.VertexFormat = {})); - var TextureAspect2; - (function(TextureAspect3) { - TextureAspect3["All"] = "all"; - TextureAspect3["StencilOnly"] = "stencil-only"; - TextureAspect3["DepthOnly"] = "depth-only"; - })(TextureAspect2 = exports.TextureAspect || (exports.TextureAspect = {})); - var CompilationMessageType; - (function(CompilationMessageType2) { - CompilationMessageType2["Error"] = "error"; - CompilationMessageType2["Warning"] = "warning"; - CompilationMessageType2["Info"] = "info"; - })(CompilationMessageType = exports.CompilationMessageType || (exports.CompilationMessageType = {})); - var QueryType; - (function(QueryType2) { - QueryType2["Occlusion"] = "occlusion"; - })(QueryType = exports.QueryType || (exports.QueryType = {})); - var BufferUsage5; - (function(BufferUsage6) { - BufferUsage6[BufferUsage6["MapRead"] = 1] = "MapRead"; - BufferUsage6[BufferUsage6["MapWrite"] = 2] = "MapWrite"; - BufferUsage6[BufferUsage6["CopySrc"] = 4] = "CopySrc"; - BufferUsage6[BufferUsage6["CopyDst"] = 8] = "CopyDst"; - BufferUsage6[BufferUsage6["Index"] = 16] = "Index"; - BufferUsage6[BufferUsage6["Vertex"] = 32] = "Vertex"; - BufferUsage6[BufferUsage6["Uniform"] = 64] = "Uniform"; - BufferUsage6[BufferUsage6["Storage"] = 128] = "Storage"; - BufferUsage6[BufferUsage6["Indirect"] = 256] = "Indirect"; - BufferUsage6[BufferUsage6["QueryResolve"] = 512] = "QueryResolve"; - })(BufferUsage5 = exports.BufferUsage || (exports.BufferUsage = {})); - var ColorWrite2; - (function(ColorWrite3) { - ColorWrite3[ColorWrite3["Red"] = 1] = "Red"; - ColorWrite3[ColorWrite3["Green"] = 2] = "Green"; - ColorWrite3[ColorWrite3["Blue"] = 4] = "Blue"; - ColorWrite3[ColorWrite3["Alpha"] = 8] = "Alpha"; - ColorWrite3[ColorWrite3["All"] = 15] = "All"; - })(ColorWrite2 = exports.ColorWrite || (exports.ColorWrite = {})); - var ShaderStage2; - (function(ShaderStage3) { - ShaderStage3[ShaderStage3["Vertex"] = 1] = "Vertex"; - ShaderStage3[ShaderStage3["Fragment"] = 2] = "Fragment"; - ShaderStage3[ShaderStage3["Compute"] = 4] = "Compute"; - })(ShaderStage2 = exports.ShaderStage || (exports.ShaderStage = {})); - var TextureUsage3; - (function(TextureUsage4) { - TextureUsage4[TextureUsage4["CopySrc"] = 1] = "CopySrc"; - TextureUsage4[TextureUsage4["CopyDst"] = 2] = "CopyDst"; - TextureUsage4[TextureUsage4["Sampled"] = 4] = "Sampled"; - TextureUsage4[TextureUsage4["Storage"] = 8] = "Storage"; - TextureUsage4[TextureUsage4["OutputAttachment"] = 16] = "OutputAttachment"; - })(TextureUsage3 = exports.TextureUsage || (exports.TextureUsage = {})); - var MapMode2; - (function(MapMode3) { - MapMode3[MapMode3["Read"] = 1] = "Read"; - MapMode3[MapMode3["Write"] = 2] = "Write"; - })(MapMode2 = exports.MapMode || (exports.MapMode = {})); - } -}); - -// node_modules/regl/dist/regl.js -var require_regl = __commonJS({ - "node_modules/regl/dist/regl.js"(exports, module2) { - (function(global2, factory) { - typeof exports === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global2.createREGL = factory(); - })(exports, function() { - "use strict"; - var isTypedArray4 = function(x6) { - return x6 instanceof Uint8Array || x6 instanceof Uint16Array || x6 instanceof Uint32Array || x6 instanceof Int8Array || x6 instanceof Int16Array || x6 instanceof Int32Array || x6 instanceof Float32Array || x6 instanceof Float64Array || x6 instanceof Uint8ClampedArray; - }; - var extend4 = function(base, opts) { - var keys6 = Object.keys(opts); - for (var i4 = 0; i4 < keys6.length; ++i4) { - base[keys6[i4]] = opts[keys6[i4]]; - } - return base; - }; - var endl = "\n"; - function decodeB64(str8) { - if (typeof atob !== "undefined") { - return atob(str8); - } - return "base64:" + str8; - } - function raise(message) { - var error = new Error("(regl) " + message); - console.error(error); - throw error; - } - function check(pred, message) { - if (!pred) { - raise(message); - } - } - function encolon(message) { - if (message) { - return ": " + message; - } - return ""; - } - function checkParameter(param, possibilities, message) { - if (!(param in possibilities)) { - raise("unknown parameter (" + param + ")" + encolon(message) + ". possible values: " + Object.keys(possibilities).join()); - } - } - function checkIsTypedArray(data3, message) { - if (!isTypedArray4(data3)) { - raise("invalid parameter type" + encolon(message) + ". must be a typed array"); - } - } - function standardTypeEh(value2, type2) { - switch (type2) { - case "number": - return typeof value2 === "number"; - case "object": - return typeof value2 === "object"; - case "string": - return typeof value2 === "string"; - case "boolean": - return typeof value2 === "boolean"; - case "function": - return typeof value2 === "function"; - case "undefined": - return typeof value2 === "undefined"; - case "symbol": - return typeof value2 === "symbol"; - } - } - function checkTypeOf(value2, type2, message) { - if (!standardTypeEh(value2, type2)) { - raise("invalid parameter type" + encolon(message) + ". expected " + type2 + ", got " + typeof value2); - } - } - function checkNonNegativeInt(value2, message) { - if (!(value2 >= 0 && (value2 | 0) === value2)) { - raise("invalid parameter type, (" + value2 + ")" + encolon(message) + ". must be a nonnegative integer"); - } - } - function checkOneOf(value2, list, message) { - if (list.indexOf(value2) < 0) { - raise("invalid value" + encolon(message) + ". must be one of: " + list); - } - } - var constructorKeys = [ - "gl", - "canvas", - "container", - "attributes", - "pixelRatio", - "extensions", - "optionalExtensions", - "profile", - "onDone" - ]; - function checkConstructor(obj) { - Object.keys(obj).forEach(function(key) { - if (constructorKeys.indexOf(key) < 0) { - raise('invalid regl constructor argument "' + key + '". must be one of ' + constructorKeys); - } - }); - } - function leftPad(str8, n3) { - str8 = str8 + ""; - while (str8.length < n3) { - str8 = " " + str8; - } - return str8; - } - function ShaderFile() { - this.name = "unknown"; - this.lines = []; - this.index = {}; - this.hasErrors = false; - } - function ShaderLine(number, line3) { - this.number = number; - this.line = line3; - this.errors = []; - } - function ShaderError(fileNumber, lineNumber, message) { - this.file = fileNumber; - this.line = lineNumber; - this.message = message; - } - function guessCommand() { - var error = new Error(); - var stack = (error.stack || error).toString(); - var pat = /compileProcedure.*\n\s*at.*\((.*)\)/.exec(stack); - if (pat) { - return pat[1]; - } - var pat2 = /compileProcedure.*\n\s*at\s+(.*)(\n|$)/.exec(stack); - if (pat2) { - return pat2[1]; - } - return "unknown"; - } - function guessCallSite() { - var error = new Error(); - var stack = (error.stack || error).toString(); - var pat = /at REGLCommand.*\n\s+at.*\((.*)\)/.exec(stack); - if (pat) { - return pat[1]; - } - var pat2 = /at REGLCommand.*\n\s+at\s+(.*)\n/.exec(stack); - if (pat2) { - return pat2[1]; - } - return "unknown"; - } - function parseSource(source, command) { - var lines2 = source.split("\n"); - var lineNumber = 1; - var fileNumber = 0; - var files = { - unknown: new ShaderFile(), - 0: new ShaderFile() - }; - files.unknown.name = files[0].name = command || guessCommand(); - files.unknown.lines.push(new ShaderLine(0, "")); - for (var i4 = 0; i4 < lines2.length; ++i4) { - var line3 = lines2[i4]; - var parts = /^\s*#\s*(\w+)\s+(.+)\s*$/.exec(line3); - if (parts) { - switch (parts[1]) { - case "line": - var lineNumberInfo = /(\d+)(\s+\d+)?/.exec(parts[2]); - if (lineNumberInfo) { - lineNumber = lineNumberInfo[1] | 0; - if (lineNumberInfo[2]) { - fileNumber = lineNumberInfo[2] | 0; - if (!(fileNumber in files)) { - files[fileNumber] = new ShaderFile(); - } - } - } - break; - case "define": - var nameInfo = /SHADER_NAME(_B64)?\s+(.*)$/.exec(parts[2]); - if (nameInfo) { - files[fileNumber].name = nameInfo[1] ? decodeB64(nameInfo[2]) : nameInfo[2]; - } - break; - } - } - files[fileNumber].lines.push(new ShaderLine(lineNumber++, line3)); - } - Object.keys(files).forEach(function(fileNumber2) { - var file = files[fileNumber2]; - file.lines.forEach(function(line4) { - file.index[line4.number] = line4; - }); - }); - return files; - } - function parseErrorLog(errLog) { - var result = []; - errLog.split("\n").forEach(function(errMsg) { - if (errMsg.length < 5) { - return; - } - var parts = /^ERROR:\s+(\d+):(\d+):\s*(.*)$/.exec(errMsg); - if (parts) { - result.push(new ShaderError(parts[1] | 0, parts[2] | 0, parts[3].trim())); - } else if (errMsg.length > 0) { - result.push(new ShaderError("unknown", 0, errMsg)); - } - }); - return result; - } - function annotateFiles(files, errors) { - errors.forEach(function(error) { - var file = files[error.file]; - if (file) { - var line3 = file.index[error.line]; - if (line3) { - line3.errors.push(error); - file.hasErrors = true; - return; - } - } - files.unknown.hasErrors = true; - files.unknown.lines[0].errors.push(error); - }); - } - function checkShaderError(gl2, shader, source, type2, command) { - if (!gl2.getShaderParameter(shader, gl2.COMPILE_STATUS)) { - var errLog = gl2.getShaderInfoLog(shader); - var typeName = type2 === gl2.FRAGMENT_SHADER ? "fragment" : "vertex"; - checkCommandType(source, "string", typeName + " shader source must be a string", command); - var files = parseSource(source, command); - var errors = parseErrorLog(errLog); - annotateFiles(files, errors); - Object.keys(files).forEach(function(fileNumber) { - var file = files[fileNumber]; - if (!file.hasErrors) { - return; - } - var strings = [""]; - var styles = [""]; - function push(str8, style) { - strings.push(str8); - styles.push(style || ""); - } - push("file number " + fileNumber + ": " + file.name + "\n", "color:red;text-decoration:underline;font-weight:bold"); - file.lines.forEach(function(line3) { - if (line3.errors.length > 0) { - push(leftPad(line3.number, 4) + "| ", "background-color:yellow; font-weight:bold"); - push(line3.line + endl, "color:red; background-color:yellow; font-weight:bold"); - var offset = 0; - line3.errors.forEach(function(error) { - var message = error.message; - var token2 = /^\s*'(.*)'\s*:\s*(.*)$/.exec(message); - if (token2) { - var tokenPat = token2[1]; - message = token2[2]; - switch (tokenPat) { - case "assign": - tokenPat = "="; - break; - } - offset = Math.max(line3.line.indexOf(tokenPat, offset), 0); - } else { - offset = 0; - } - push(leftPad("| ", 6)); - push(leftPad("^^^", offset + 3) + endl, "font-weight:bold"); - push(leftPad("| ", 6)); - push(message + endl, "font-weight:bold"); - }); - push(leftPad("| ", 6) + endl); - } else { - push(leftPad(line3.number, 4) + "| "); - push(line3.line + endl, "color:red"); - } - }); - if (typeof document !== "undefined" && !window.chrome) { - styles[0] = strings.join("%c"); - console.log.apply(console, styles); - } else { - console.log(strings.join("")); - } - }); - check.raise("Error compiling " + typeName + " shader, " + files[0].name); - } - } - function checkLinkError(gl2, program, fragShader, vertShader, command) { - if (!gl2.getProgramParameter(program, gl2.LINK_STATUS)) { - var errLog = gl2.getProgramInfoLog(program); - var fragParse = parseSource(fragShader, command); - var vertParse = parseSource(vertShader, command); - var header = 'Error linking program with vertex shader, "' + vertParse[0].name + '", and fragment shader "' + fragParse[0].name + '"'; - if (typeof document !== "undefined") { - console.log("%c" + header + endl + "%c" + errLog, "color:red;text-decoration:underline;font-weight:bold", "color:red"); - } else { - console.log(header + endl + errLog); - } - check.raise(header); - } - } - function saveCommandRef(object) { - object._commandRef = guessCommand(); - } - function saveDrawCommandInfo(opts, uniforms, attributes, stringStore) { - saveCommandRef(opts); - function id(str8) { - if (str8) { - return stringStore.id(str8); - } - return 0; - } - opts._fragId = id(opts.static.frag); - opts._vertId = id(opts.static.vert); - function addProps(dict, set13) { - Object.keys(set13).forEach(function(u3) { - dict[stringStore.id(u3)] = true; - }); - } - var uniformSet = opts._uniformSet = {}; - addProps(uniformSet, uniforms.static); - addProps(uniformSet, uniforms.dynamic); - var attributeSet = opts._attributeSet = {}; - addProps(attributeSet, attributes.static); - addProps(attributeSet, attributes.dynamic); - opts._hasCount = "count" in opts.static || "count" in opts.dynamic || "elements" in opts.static || "elements" in opts.dynamic; - } - function commandRaise(message, command) { - var callSite = guessCallSite(); - raise(message + " in command " + (command || guessCommand()) + (callSite === "unknown" ? "" : " called from " + callSite)); - } - function checkCommand(pred, message, command) { - if (!pred) { - commandRaise(message, command || guessCommand()); - } - } - function checkParameterCommand(param, possibilities, message, command) { - if (!(param in possibilities)) { - commandRaise("unknown parameter (" + param + ")" + encolon(message) + ". possible values: " + Object.keys(possibilities).join(), command || guessCommand()); - } - } - function checkCommandType(value2, type2, message, command) { - if (!standardTypeEh(value2, type2)) { - commandRaise("invalid parameter type" + encolon(message) + ". expected " + type2 + ", got " + typeof value2, command || guessCommand()); - } - } - function checkOptional(block) { - block(); - } - function checkFramebufferFormat(attachment, texFormats, rbFormats) { - if (attachment.texture) { - checkOneOf(attachment.texture._texture.internalformat, texFormats, "unsupported texture format for attachment"); - } else { - checkOneOf(attachment.renderbuffer._renderbuffer.format, rbFormats, "unsupported renderbuffer format for attachment"); - } - } - var GL_CLAMP_TO_EDGE = 33071; - var GL_NEAREST = 9728; - var GL_NEAREST_MIPMAP_NEAREST = 9984; - var GL_LINEAR_MIPMAP_NEAREST = 9985; - var GL_NEAREST_MIPMAP_LINEAR = 9986; - var GL_LINEAR_MIPMAP_LINEAR = 9987; - var GL_BYTE = 5120; - var GL_UNSIGNED_BYTE = 5121; - var GL_SHORT = 5122; - var GL_UNSIGNED_SHORT = 5123; - var GL_INT = 5124; - var GL_UNSIGNED_INT = 5125; - var GL_FLOAT = 5126; - var GL_UNSIGNED_SHORT_4_4_4_4 = 32819; - var GL_UNSIGNED_SHORT_5_5_5_1 = 32820; - var GL_UNSIGNED_SHORT_5_6_5 = 33635; - var GL_UNSIGNED_INT_24_8_WEBGL = 34042; - var GL_HALF_FLOAT_OES = 36193; - var TYPE_SIZE = {}; - TYPE_SIZE[GL_BYTE] = TYPE_SIZE[GL_UNSIGNED_BYTE] = 1; - TYPE_SIZE[GL_SHORT] = TYPE_SIZE[GL_UNSIGNED_SHORT] = TYPE_SIZE[GL_HALF_FLOAT_OES] = TYPE_SIZE[GL_UNSIGNED_SHORT_5_6_5] = TYPE_SIZE[GL_UNSIGNED_SHORT_4_4_4_4] = TYPE_SIZE[GL_UNSIGNED_SHORT_5_5_5_1] = 2; - TYPE_SIZE[GL_INT] = TYPE_SIZE[GL_UNSIGNED_INT] = TYPE_SIZE[GL_FLOAT] = TYPE_SIZE[GL_UNSIGNED_INT_24_8_WEBGL] = 4; - function pixelSize(type2, channels) { - if (type2 === GL_UNSIGNED_SHORT_5_5_5_1 || type2 === GL_UNSIGNED_SHORT_4_4_4_4 || type2 === GL_UNSIGNED_SHORT_5_6_5) { - return 2; - } else if (type2 === GL_UNSIGNED_INT_24_8_WEBGL) { - return 4; - } else { - return TYPE_SIZE[type2] * channels; - } - } - function isPow2(v3) { - return !(v3 & v3 - 1) && !!v3; - } - function checkTexture2D(info, mipData, limits) { - var i4; - var w4 = mipData.width; - var h3 = mipData.height; - var c5 = mipData.channels; - check(w4 > 0 && w4 <= limits.maxTextureSize && h3 > 0 && h3 <= limits.maxTextureSize, "invalid texture shape"); - if (info.wrapS !== GL_CLAMP_TO_EDGE || info.wrapT !== GL_CLAMP_TO_EDGE) { - check(isPow2(w4) && isPow2(h3), "incompatible wrap mode for texture, both width and height must be power of 2"); - } - if (mipData.mipmask === 1) { - if (w4 !== 1 && h3 !== 1) { - check(info.minFilter !== GL_NEAREST_MIPMAP_NEAREST && info.minFilter !== GL_NEAREST_MIPMAP_LINEAR && info.minFilter !== GL_LINEAR_MIPMAP_NEAREST && info.minFilter !== GL_LINEAR_MIPMAP_LINEAR, "min filter requires mipmap"); - } - } else { - check(isPow2(w4) && isPow2(h3), "texture must be a square power of 2 to support mipmapping"); - check(mipData.mipmask === (w4 << 1) - 1, "missing or incomplete mipmap data"); - } - if (mipData.type === GL_FLOAT) { - if (limits.extensions.indexOf("oes_texture_float_linear") < 0) { - check(info.minFilter === GL_NEAREST && info.magFilter === GL_NEAREST, "filter not supported, must enable oes_texture_float_linear"); - } - check(!info.genMipmaps, "mipmap generation not supported with float textures"); - } - var mipimages = mipData.images; - for (i4 = 0; i4 < 16; ++i4) { - if (mipimages[i4]) { - var mw = w4 >> i4; - var mh = h3 >> i4; - check(mipData.mipmask & 1 << i4, "missing mipmap data"); - var img = mipimages[i4]; - check(img.width === mw && img.height === mh, "invalid shape for mip images"); - check(img.format === mipData.format && img.internalformat === mipData.internalformat && img.type === mipData.type, "incompatible type for mip image"); - if (img.compressed) { - } else if (img.data) { - var rowSize = Math.ceil(pixelSize(img.type, c5) * mw / img.unpackAlignment) * img.unpackAlignment; - check(img.data.byteLength === rowSize * mh, "invalid data for image, buffer size is inconsistent with image format"); - } else if (img.element) { - } else if (img.copy) { - } - } else if (!info.genMipmaps) { - check((mipData.mipmask & 1 << i4) === 0, "extra mipmap data"); - } - } - if (mipData.compressed) { - check(!info.genMipmaps, "mipmap generation for compressed images not supported"); - } - } - function checkTextureCube(texture, info, faces, limits) { - var w4 = texture.width; - var h3 = texture.height; - var c5 = texture.channels; - check(w4 > 0 && w4 <= limits.maxTextureSize && h3 > 0 && h3 <= limits.maxTextureSize, "invalid texture shape"); - check(w4 === h3, "cube map must be square"); - check(info.wrapS === GL_CLAMP_TO_EDGE && info.wrapT === GL_CLAMP_TO_EDGE, "wrap mode not supported by cube map"); - for (var i4 = 0; i4 < faces.length; ++i4) { - var face = faces[i4]; - check(face.width === w4 && face.height === h3, "inconsistent cube map face shape"); - if (info.genMipmaps) { - check(!face.compressed, "can not generate mipmap for compressed textures"); - check(face.mipmask === 1, "can not specify mipmaps and generate mipmaps"); - } else { - } - var mipmaps = face.images; - for (var j4 = 0; j4 < 16; ++j4) { - var img = mipmaps[j4]; - if (img) { - var mw = w4 >> j4; - var mh = h3 >> j4; - check(face.mipmask & 1 << j4, "missing mipmap data"); - check(img.width === mw && img.height === mh, "invalid shape for mip images"); - check(img.format === texture.format && img.internalformat === texture.internalformat && img.type === texture.type, "incompatible type for mip image"); - if (img.compressed) { - } else if (img.data) { - check(img.data.byteLength === mw * mh * Math.max(pixelSize(img.type, c5), img.unpackAlignment), "invalid data for image, buffer size is inconsistent with image format"); - } else if (img.element) { - } else if (img.copy) { - } - } - } - } - } - var check$1 = extend4(check, { - optional: checkOptional, - raise, - commandRaise, - command: checkCommand, - parameter: checkParameter, - commandParameter: checkParameterCommand, - constructor: checkConstructor, - type: checkTypeOf, - commandType: checkCommandType, - isTypedArray: checkIsTypedArray, - nni: checkNonNegativeInt, - oneOf: checkOneOf, - shaderError: checkShaderError, - linkError: checkLinkError, - callSite: guessCallSite, - saveCommandRef, - saveDrawInfo: saveDrawCommandInfo, - framebufferFormat: checkFramebufferFormat, - guessCommand, - texture2D: checkTexture2D, - textureCube: checkTextureCube - }); - var VARIABLE_COUNTER = 0; - var DYN_FUNC = 0; - var DYN_CONSTANT = 5; - var DYN_ARRAY = 6; - function DynamicVariable(type2, data3) { - this.id = VARIABLE_COUNTER++; - this.type = type2; - this.data = data3; - } - function escapeStr(str8) { - return str8.replace(/\\/g, "\\\\").replace(/"/g, '\\"'); - } - function splitParts(str8) { - if (str8.length === 0) { - return []; - } - var firstChar = str8.charAt(0); - var lastChar = str8.charAt(str8.length - 1); - if (str8.length > 1 && firstChar === lastChar && (firstChar === '"' || firstChar === "'")) { - return ['"' + escapeStr(str8.substr(1, str8.length - 2)) + '"']; - } - var parts = /\[(false|true|null|\d+|'[^']*'|"[^"]*")\]/.exec(str8); - if (parts) { - return splitParts(str8.substr(0, parts.index)).concat(splitParts(parts[1])).concat(splitParts(str8.substr(parts.index + parts[0].length))); - } - var subparts = str8.split("."); - if (subparts.length === 1) { - return ['"' + escapeStr(str8) + '"']; - } - var result = []; - for (var i4 = 0; i4 < subparts.length; ++i4) { - result = result.concat(splitParts(subparts[i4])); - } - return result; - } - function toAccessorString(str8) { - return "[" + splitParts(str8).join("][") + "]"; - } - function defineDynamic(type2, data3) { - return new DynamicVariable(type2, toAccessorString(data3 + "")); - } - function isDynamic(x6) { - return typeof x6 === "function" && !x6._reglType || x6 instanceof DynamicVariable; - } - function unbox(x6, path) { - if (typeof x6 === "function") { - return new DynamicVariable(DYN_FUNC, x6); - } else if (typeof x6 === "number" || typeof x6 === "boolean") { - return new DynamicVariable(DYN_CONSTANT, x6); - } else if (Array.isArray(x6)) { - return new DynamicVariable(DYN_ARRAY, x6.map((y5, i4) => unbox(y5, path + "[" + i4 + "]"))); - } else if (x6 instanceof DynamicVariable) { - return x6; - } - check$1(false, "invalid option type in uniform " + path); - } - var dynamic = { - DynamicVariable, - define: defineDynamic, - isDynamic, - unbox, - accessor: toAccessorString - }; - var raf = { - next: typeof requestAnimationFrame === "function" ? function(cb) { - return requestAnimationFrame(cb); - } : function(cb) { - return setTimeout(cb, 16); - }, - cancel: typeof cancelAnimationFrame === "function" ? function(raf2) { - return cancelAnimationFrame(raf2); - } : clearTimeout - }; - var clock2 = typeof performance !== "undefined" && performance.now ? function() { - return performance.now(); - } : function() { - return +new Date(); - }; - function createStringStore() { - var stringIds = { "": 0 }; - var stringValues = [""]; - return { - id: function(str8) { - var result = stringIds[str8]; - if (result) { - return result; - } - result = stringIds[str8] = stringValues.length; - stringValues.push(str8); - return result; - }, - str: function(id) { - return stringValues[id]; - } - }; - } - function createCanvas2(element, onDone, pixelRatio) { - var canvas = document.createElement("canvas"); - extend4(canvas.style, { - border: 0, - margin: 0, - padding: 0, - top: 0, - left: 0 - }); - element.appendChild(canvas); - if (element === document.body) { - canvas.style.position = "absolute"; - extend4(element.style, { - margin: 0, - padding: 0 - }); - } - function resize() { - var w4 = window.innerWidth; - var h3 = window.innerHeight; - if (element !== document.body) { - var bounds = element.getBoundingClientRect(); - w4 = bounds.right - bounds.left; - h3 = bounds.bottom - bounds.top; - } - canvas.width = pixelRatio * w4; - canvas.height = pixelRatio * h3; - extend4(canvas.style, { - width: w4 + "px", - height: h3 + "px" - }); - } - var resizeObserver; - if (element !== document.body && typeof ResizeObserver === "function") { - resizeObserver = new ResizeObserver(function() { - setTimeout(resize); - }); - resizeObserver.observe(element); - } else { - window.addEventListener("resize", resize, false); - } - function onDestroy() { - if (resizeObserver) { - resizeObserver.disconnect(); - } else { - window.removeEventListener("resize", resize); - } - element.removeChild(canvas); - } - resize(); - return { - canvas, - onDestroy - }; - } - function createContext(canvas, contextAttributes) { - function get100(name) { - try { - return canvas.getContext(name, contextAttributes); - } catch (e4) { - return null; - } - } - return get100("webgl") || get100("experimental-webgl") || get100("webgl-experimental"); - } - function isHTMLElement(obj) { - return typeof obj.nodeName === "string" && typeof obj.appendChild === "function" && typeof obj.getBoundingClientRect === "function"; - } - function isWebGLContext(obj) { - return typeof obj.drawArrays === "function" || typeof obj.drawElements === "function"; - } - function parseExtensions(input) { - if (typeof input === "string") { - return input.split(); - } - check$1(Array.isArray(input), "invalid extension array"); - return input; - } - function getElement(desc) { - if (typeof desc === "string") { - check$1(typeof document !== "undefined", "not supported outside of DOM"); - return document.querySelector(desc); - } - return desc; - } - function parseArgs(args_) { - var args = args_ || {}; - var element, container2, canvas, gl2; - var contextAttributes = {}; - var extensions = []; - var optionalExtensions = []; - var pixelRatio = typeof window === "undefined" ? 1 : window.devicePixelRatio; - var profile = false; - var onDone = function(err) { - if (err) { - check$1.raise(err); - } - }; - var onDestroy = function() { - }; - if (typeof args === "string") { - check$1(typeof document !== "undefined", "selector queries only supported in DOM enviroments"); - element = document.querySelector(args); - check$1(element, "invalid query string for element"); - } else if (typeof args === "object") { - if (isHTMLElement(args)) { - element = args; - } else if (isWebGLContext(args)) { - gl2 = args; - canvas = gl2.canvas; - } else { - check$1.constructor(args); - if ("gl" in args) { - gl2 = args.gl; - } else if ("canvas" in args) { - canvas = getElement(args.canvas); - } else if ("container" in args) { - container2 = getElement(args.container); - } - if ("attributes" in args) { - contextAttributes = args.attributes; - check$1.type(contextAttributes, "object", "invalid context attributes"); - } - if ("extensions" in args) { - extensions = parseExtensions(args.extensions); - } - if ("optionalExtensions" in args) { - optionalExtensions = parseExtensions(args.optionalExtensions); - } - if ("onDone" in args) { - check$1.type(args.onDone, "function", "invalid or missing onDone callback"); - onDone = args.onDone; - } - if ("profile" in args) { - profile = !!args.profile; - } - if ("pixelRatio" in args) { - pixelRatio = +args.pixelRatio; - check$1(pixelRatio > 0, "invalid pixel ratio"); - } - } - } else { - check$1.raise("invalid arguments to regl"); - } - if (element) { - if (element.nodeName.toLowerCase() === "canvas") { - canvas = element; - } else { - container2 = element; - } - } - if (!gl2) { - if (!canvas) { - check$1(typeof document !== "undefined", "must manually specify webgl context outside of DOM environments"); - var result = createCanvas2(container2 || document.body, onDone, pixelRatio); - if (!result) { - return null; - } - canvas = result.canvas; - onDestroy = result.onDestroy; - } - if (contextAttributes.premultipliedAlpha === void 0) - contextAttributes.premultipliedAlpha = true; - gl2 = createContext(canvas, contextAttributes); - } - if (!gl2) { - onDestroy(); - onDone("webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org"); - return null; - } - return { - gl: gl2, - canvas, - container: container2, - extensions, - optionalExtensions, - pixelRatio, - profile, - onDone, - onDestroy - }; - } - function createExtensionCache(gl2, config) { - var extensions = {}; - function tryLoadExtension(name_) { - check$1.type(name_, "string", "extension name must be string"); - var name2 = name_.toLowerCase(); - var ext; - try { - ext = extensions[name2] = gl2.getExtension(name2); - } catch (e4) { - } - return !!ext; - } - for (var i4 = 0; i4 < config.extensions.length; ++i4) { - var name = config.extensions[i4]; - if (!tryLoadExtension(name)) { - config.onDestroy(); - config.onDone('"' + name + '" extension is not supported by the current WebGL context, try upgrading your system or a different browser'); - return null; - } - } - config.optionalExtensions.forEach(tryLoadExtension); - return { - extensions, - restore: function() { - Object.keys(extensions).forEach(function(name2) { - if (extensions[name2] && !tryLoadExtension(name2)) { - throw new Error("(regl): error restoring extension " + name2); - } - }); - } - }; - } - function loop(n3, f3) { - var result = Array(n3); - for (var i4 = 0; i4 < n3; ++i4) { - result[i4] = f3(i4); - } - return result; - } - var GL_BYTE$1 = 5120; - var GL_UNSIGNED_BYTE$2 = 5121; - var GL_SHORT$1 = 5122; - var GL_UNSIGNED_SHORT$1 = 5123; - var GL_INT$1 = 5124; - var GL_UNSIGNED_INT$1 = 5125; - var GL_FLOAT$2 = 5126; - function nextPow16(v3) { - for (var i4 = 16; i4 <= 1 << 28; i4 *= 16) { - if (v3 <= i4) { - return i4; - } - } - return 0; - } - function log22(v3) { - var r4, shift; - r4 = (v3 > 65535) << 4; - v3 >>>= r4; - shift = (v3 > 255) << 3; - v3 >>>= shift; - r4 |= shift; - shift = (v3 > 15) << 2; - v3 >>>= shift; - r4 |= shift; - shift = (v3 > 3) << 1; - v3 >>>= shift; - r4 |= shift; - return r4 | v3 >> 1; - } - function createPool() { - var bufferPool = loop(8, function() { - return []; - }); - function alloc(n3) { - var sz = nextPow16(n3); - var bin = bufferPool[log22(sz) >> 2]; - if (bin.length > 0) { - return bin.pop(); - } - return new ArrayBuffer(sz); - } - function free(buf) { - bufferPool[log22(buf.byteLength) >> 2].push(buf); - } - function allocType(type2, n3) { - var result = null; - switch (type2) { - case GL_BYTE$1: - result = new Int8Array(alloc(n3), 0, n3); - break; - case GL_UNSIGNED_BYTE$2: - result = new Uint8Array(alloc(n3), 0, n3); - break; - case GL_SHORT$1: - result = new Int16Array(alloc(2 * n3), 0, n3); - break; - case GL_UNSIGNED_SHORT$1: - result = new Uint16Array(alloc(2 * n3), 0, n3); - break; - case GL_INT$1: - result = new Int32Array(alloc(4 * n3), 0, n3); - break; - case GL_UNSIGNED_INT$1: - result = new Uint32Array(alloc(4 * n3), 0, n3); - break; - case GL_FLOAT$2: - result = new Float32Array(alloc(4 * n3), 0, n3); - break; - default: - return null; - } - if (result.length !== n3) { - return result.subarray(0, n3); - } - return result; - } - function freeType(array) { - free(array.buffer); - } - return { - alloc, - free, - allocType, - freeType - }; - } - var pool = createPool(); - pool.zero = createPool(); - var GL_SUBPIXEL_BITS = 3408; - var GL_RED_BITS = 3410; - var GL_GREEN_BITS = 3411; - var GL_BLUE_BITS = 3412; - var GL_ALPHA_BITS = 3413; - var GL_DEPTH_BITS = 3414; - var GL_STENCIL_BITS = 3415; - var GL_ALIASED_POINT_SIZE_RANGE = 33901; - var GL_ALIASED_LINE_WIDTH_RANGE = 33902; - var GL_MAX_TEXTURE_SIZE = 3379; - var GL_MAX_VIEWPORT_DIMS = 3386; - var GL_MAX_VERTEX_ATTRIBS = 34921; - var GL_MAX_VERTEX_UNIFORM_VECTORS = 36347; - var GL_MAX_VARYING_VECTORS = 36348; - var GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = 35661; - var GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 35660; - var GL_MAX_TEXTURE_IMAGE_UNITS = 34930; - var GL_MAX_FRAGMENT_UNIFORM_VECTORS = 36349; - var GL_MAX_CUBE_MAP_TEXTURE_SIZE = 34076; - var GL_MAX_RENDERBUFFER_SIZE = 34024; - var GL_VENDOR = 7936; - var GL_RENDERER = 7937; - var GL_VERSION = 7938; - var GL_SHADING_LANGUAGE_VERSION = 35724; - var GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 34047; - var GL_MAX_COLOR_ATTACHMENTS_WEBGL = 36063; - var GL_MAX_DRAW_BUFFERS_WEBGL = 34852; - var GL_TEXTURE_2D = 3553; - var GL_TEXTURE_CUBE_MAP = 34067; - var GL_TEXTURE_CUBE_MAP_POSITIVE_X = 34069; - var GL_TEXTURE0 = 33984; - var GL_RGBA = 6408; - var GL_FLOAT$1 = 5126; - var GL_UNSIGNED_BYTE$1 = 5121; - var GL_FRAMEBUFFER = 36160; - var GL_FRAMEBUFFER_COMPLETE = 36053; - var GL_COLOR_ATTACHMENT0 = 36064; - var GL_COLOR_BUFFER_BIT$1 = 16384; - var wrapLimits = function(gl2, extensions) { - var maxAnisotropic = 1; - if (extensions.ext_texture_filter_anisotropic) { - maxAnisotropic = gl2.getParameter(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT); - } - var maxDrawbuffers = 1; - var maxColorAttachments = 1; - if (extensions.webgl_draw_buffers) { - maxDrawbuffers = gl2.getParameter(GL_MAX_DRAW_BUFFERS_WEBGL); - maxColorAttachments = gl2.getParameter(GL_MAX_COLOR_ATTACHMENTS_WEBGL); - } - var readFloat = !!extensions.oes_texture_float; - if (readFloat) { - var readFloatTexture = gl2.createTexture(); - gl2.bindTexture(GL_TEXTURE_2D, readFloatTexture); - gl2.texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_FLOAT$1, null); - var fbo = gl2.createFramebuffer(); - gl2.bindFramebuffer(GL_FRAMEBUFFER, fbo); - gl2.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, readFloatTexture, 0); - gl2.bindTexture(GL_TEXTURE_2D, null); - if (gl2.checkFramebufferStatus(GL_FRAMEBUFFER) !== GL_FRAMEBUFFER_COMPLETE) - readFloat = false; - else { - gl2.viewport(0, 0, 1, 1); - gl2.clearColor(1, 0, 0, 1); - gl2.clear(GL_COLOR_BUFFER_BIT$1); - var pixels = pool.allocType(GL_FLOAT$1, 4); - gl2.readPixels(0, 0, 1, 1, GL_RGBA, GL_FLOAT$1, pixels); - if (gl2.getError()) - readFloat = false; - else { - gl2.deleteFramebuffer(fbo); - gl2.deleteTexture(readFloatTexture); - readFloat = pixels[0] === 1; - } - pool.freeType(pixels); - } - } - var isIE = typeof navigator !== "undefined" && (/MSIE/.test(navigator.userAgent) || /Trident\//.test(navigator.appVersion) || /Edge/.test(navigator.userAgent)); - var npotTextureCube = true; - if (!isIE) { - var cubeTexture = gl2.createTexture(); - var data3 = pool.allocType(GL_UNSIGNED_BYTE$1, 36); - gl2.activeTexture(GL_TEXTURE0); - gl2.bindTexture(GL_TEXTURE_CUBE_MAP, cubeTexture); - gl2.texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA, 3, 3, 0, GL_RGBA, GL_UNSIGNED_BYTE$1, data3); - pool.freeType(data3); - gl2.bindTexture(GL_TEXTURE_CUBE_MAP, null); - gl2.deleteTexture(cubeTexture); - npotTextureCube = !gl2.getError(); - } - return { - colorBits: [ - gl2.getParameter(GL_RED_BITS), - gl2.getParameter(GL_GREEN_BITS), - gl2.getParameter(GL_BLUE_BITS), - gl2.getParameter(GL_ALPHA_BITS) - ], - depthBits: gl2.getParameter(GL_DEPTH_BITS), - stencilBits: gl2.getParameter(GL_STENCIL_BITS), - subpixelBits: gl2.getParameter(GL_SUBPIXEL_BITS), - extensions: Object.keys(extensions).filter(function(ext) { - return !!extensions[ext]; - }), - maxAnisotropic, - maxDrawbuffers, - maxColorAttachments, - pointSizeDims: gl2.getParameter(GL_ALIASED_POINT_SIZE_RANGE), - lineWidthDims: gl2.getParameter(GL_ALIASED_LINE_WIDTH_RANGE), - maxViewportDims: gl2.getParameter(GL_MAX_VIEWPORT_DIMS), - maxCombinedTextureUnits: gl2.getParameter(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS), - maxCubeMapSize: gl2.getParameter(GL_MAX_CUBE_MAP_TEXTURE_SIZE), - maxRenderbufferSize: gl2.getParameter(GL_MAX_RENDERBUFFER_SIZE), - maxTextureUnits: gl2.getParameter(GL_MAX_TEXTURE_IMAGE_UNITS), - maxTextureSize: gl2.getParameter(GL_MAX_TEXTURE_SIZE), - maxAttributes: gl2.getParameter(GL_MAX_VERTEX_ATTRIBS), - maxVertexUniforms: gl2.getParameter(GL_MAX_VERTEX_UNIFORM_VECTORS), - maxVertexTextureUnits: gl2.getParameter(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS), - maxVaryingVectors: gl2.getParameter(GL_MAX_VARYING_VECTORS), - maxFragmentUniforms: gl2.getParameter(GL_MAX_FRAGMENT_UNIFORM_VECTORS), - glsl: gl2.getParameter(GL_SHADING_LANGUAGE_VERSION), - renderer: gl2.getParameter(GL_RENDERER), - vendor: gl2.getParameter(GL_VENDOR), - version: gl2.getParameter(GL_VERSION), - readFloat, - npotTextureCube - }; - }; - function isNDArrayLike(obj) { - return !!obj && typeof obj === "object" && Array.isArray(obj.shape) && Array.isArray(obj.stride) && typeof obj.offset === "number" && obj.shape.length === obj.stride.length && (Array.isArray(obj.data) || isTypedArray4(obj.data)); - } - var values4 = function(obj) { - return Object.keys(obj).map(function(key) { - return obj[key]; - }); - }; - var flattenUtils = { - shape: arrayShape$1, - flatten: flattenArray - }; - function flatten1D(array, nx, out) { - for (var i4 = 0; i4 < nx; ++i4) { - out[i4] = array[i4]; - } - } - function flatten2D(array, nx, ny, out) { - var ptr = 0; - for (var i4 = 0; i4 < nx; ++i4) { - var row = array[i4]; - for (var j4 = 0; j4 < ny; ++j4) { - out[ptr++] = row[j4]; - } - } - } - function flatten3D(array, nx, ny, nz, out, ptr_) { - var ptr = ptr_; - for (var i4 = 0; i4 < nx; ++i4) { - var row = array[i4]; - for (var j4 = 0; j4 < ny; ++j4) { - var col = row[j4]; - for (var k4 = 0; k4 < nz; ++k4) { - out[ptr++] = col[k4]; - } - } - } - } - function flattenRec(array, shape, level, out, ptr) { - var stride = 1; - for (var i4 = level + 1; i4 < shape.length; ++i4) { - stride *= shape[i4]; - } - var n3 = shape[level]; - if (shape.length - level === 4) { - var nx = shape[level + 1]; - var ny = shape[level + 2]; - var nz = shape[level + 3]; - for (i4 = 0; i4 < n3; ++i4) { - flatten3D(array[i4], nx, ny, nz, out, ptr); - ptr += stride; - } - } else { - for (i4 = 0; i4 < n3; ++i4) { - flattenRec(array[i4], shape, level + 1, out, ptr); - ptr += stride; - } - } - } - function flattenArray(array, shape, type2, out_) { - var sz = 1; - if (shape.length) { - for (var i4 = 0; i4 < shape.length; ++i4) { - sz *= shape[i4]; - } - } else { - sz = 0; - } - var out = out_ || pool.allocType(type2, sz); - switch (shape.length) { - case 0: - break; - case 1: - flatten1D(array, shape[0], out); - break; - case 2: - flatten2D(array, shape[0], shape[1], out); - break; - case 3: - flatten3D(array, shape[0], shape[1], shape[2], out, 0); - break; - default: - flattenRec(array, shape, 0, out, 0); - } - return out; - } - function arrayShape$1(array_) { - var shape = []; - for (var array = array_; array.length; array = array[0]) { - shape.push(array.length); - } - return shape; - } - var arrayTypes = { - "[object Int8Array]": 5120, - "[object Int16Array]": 5122, - "[object Int32Array]": 5124, - "[object Uint8Array]": 5121, - "[object Uint8ClampedArray]": 5121, - "[object Uint16Array]": 5123, - "[object Uint32Array]": 5125, - "[object Float32Array]": 5126, - "[object Float64Array]": 5121, - "[object ArrayBuffer]": 5121 - }; - var int8 = 5120; - var int16 = 5122; - var int32 = 5124; - var uint8 = 5121; - var uint16 = 5123; - var uint32 = 5125; - var float2 = 5126; - var float32 = 5126; - var glTypes = { - int8, - int16, - int32, - uint8, - uint16, - uint32, - float: float2, - float32 - }; - var dynamic$1 = 35048; - var stream = 35040; - var usageTypes = { - dynamic: dynamic$1, - stream, - "static": 35044 - }; - var arrayFlatten = flattenUtils.flatten; - var arrayShape = flattenUtils.shape; - var GL_STATIC_DRAW = 35044; - var GL_STREAM_DRAW = 35040; - var GL_UNSIGNED_BYTE$3 = 5121; - var GL_FLOAT$3 = 5126; - var DTYPES_SIZES = []; - DTYPES_SIZES[5120] = 1; - DTYPES_SIZES[5122] = 2; - DTYPES_SIZES[5124] = 4; - DTYPES_SIZES[5121] = 1; - DTYPES_SIZES[5123] = 2; - DTYPES_SIZES[5125] = 4; - DTYPES_SIZES[5126] = 4; - function typedArrayCode(data3) { - return arrayTypes[Object.prototype.toString.call(data3)] | 0; - } - function copyArray(out, inp) { - for (var i4 = 0; i4 < inp.length; ++i4) { - out[i4] = inp[i4]; - } - } - function transpose5(result, data3, shapeX, shapeY, strideX, strideY, offset) { - var ptr = 0; - for (var i4 = 0; i4 < shapeX; ++i4) { - for (var j4 = 0; j4 < shapeY; ++j4) { - result[ptr++] = data3[strideX * i4 + strideY * j4 + offset]; - } - } - } - function wrapBufferState(gl2, stats2, config, destroyBuffer) { - var bufferCount = 0; - var bufferSet = {}; - function REGLBuffer(type2) { - this.id = bufferCount++; - this.buffer = gl2.createBuffer(); - this.type = type2; - this.usage = GL_STATIC_DRAW; - this.byteLength = 0; - this.dimension = 1; - this.dtype = GL_UNSIGNED_BYTE$3; - this.persistentData = null; - if (config.profile) { - this.stats = { size: 0 }; - } - } - REGLBuffer.prototype.bind = function() { - gl2.bindBuffer(this.type, this.buffer); - }; - REGLBuffer.prototype.destroy = function() { - destroy(this); - }; - var streamPool = []; - function createStream(type2, data3) { - var buffer = streamPool.pop(); - if (!buffer) { - buffer = new REGLBuffer(type2); - } - buffer.bind(); - initBufferFromData(buffer, data3, GL_STREAM_DRAW, 0, 1, false); - return buffer; - } - function destroyStream(stream$$1) { - streamPool.push(stream$$1); - } - function initBufferFromTypedArray(buffer, data3, usage) { - buffer.byteLength = data3.byteLength; - gl2.bufferData(buffer.type, data3, usage); - } - function initBufferFromData(buffer, data3, usage, dtype, dimension, persist) { - var shape; - buffer.usage = usage; - if (Array.isArray(data3)) { - buffer.dtype = dtype || GL_FLOAT$3; - if (data3.length > 0) { - var flatData; - if (Array.isArray(data3[0])) { - shape = arrayShape(data3); - var dim = 1; - for (var i4 = 1; i4 < shape.length; ++i4) { - dim *= shape[i4]; - } - buffer.dimension = dim; - flatData = arrayFlatten(data3, shape, buffer.dtype); - initBufferFromTypedArray(buffer, flatData, usage); - if (persist) { - buffer.persistentData = flatData; - } else { - pool.freeType(flatData); - } - } else if (typeof data3[0] === "number") { - buffer.dimension = dimension; - var typedData = pool.allocType(buffer.dtype, data3.length); - copyArray(typedData, data3); - initBufferFromTypedArray(buffer, typedData, usage); - if (persist) { - buffer.persistentData = typedData; - } else { - pool.freeType(typedData); - } - } else if (isTypedArray4(data3[0])) { - buffer.dimension = data3[0].length; - buffer.dtype = dtype || typedArrayCode(data3[0]) || GL_FLOAT$3; - flatData = arrayFlatten(data3, [data3.length, data3[0].length], buffer.dtype); - initBufferFromTypedArray(buffer, flatData, usage); - if (persist) { - buffer.persistentData = flatData; - } else { - pool.freeType(flatData); - } - } else { - check$1.raise("invalid buffer data"); - } - } - } else if (isTypedArray4(data3)) { - buffer.dtype = dtype || typedArrayCode(data3); - buffer.dimension = dimension; - initBufferFromTypedArray(buffer, data3, usage); - if (persist) { - buffer.persistentData = new Uint8Array(new Uint8Array(data3.buffer)); - } - } else if (isNDArrayLike(data3)) { - shape = data3.shape; - var stride = data3.stride; - var offset = data3.offset; - var shapeX = 0; - var shapeY = 0; - var strideX = 0; - var strideY = 0; - if (shape.length === 1) { - shapeX = shape[0]; - shapeY = 1; - strideX = stride[0]; - strideY = 0; - } else if (shape.length === 2) { - shapeX = shape[0]; - shapeY = shape[1]; - strideX = stride[0]; - strideY = stride[1]; - } else { - check$1.raise("invalid shape"); - } - buffer.dtype = dtype || typedArrayCode(data3.data) || GL_FLOAT$3; - buffer.dimension = shapeY; - var transposeData2 = pool.allocType(buffer.dtype, shapeX * shapeY); - transpose5(transposeData2, data3.data, shapeX, shapeY, strideX, strideY, offset); - initBufferFromTypedArray(buffer, transposeData2, usage); - if (persist) { - buffer.persistentData = transposeData2; - } else { - pool.freeType(transposeData2); - } - } else if (data3 instanceof ArrayBuffer) { - buffer.dtype = GL_UNSIGNED_BYTE$3; - buffer.dimension = dimension; - initBufferFromTypedArray(buffer, data3, usage); - if (persist) { - buffer.persistentData = new Uint8Array(new Uint8Array(data3)); - } - } else { - check$1.raise("invalid buffer data"); - } - } - function destroy(buffer) { - stats2.bufferCount--; - destroyBuffer(buffer); - var handle = buffer.buffer; - check$1(handle, "buffer must not be deleted already"); - gl2.deleteBuffer(handle); - buffer.buffer = null; - delete bufferSet[buffer.id]; - } - function createBuffer(options, type2, deferInit, persistent) { - stats2.bufferCount++; - var buffer = new REGLBuffer(type2); - bufferSet[buffer.id] = buffer; - function reglBuffer(options2) { - var usage = GL_STATIC_DRAW; - var data3 = null; - var byteLength = 0; - var dtype = 0; - var dimension = 1; - if (Array.isArray(options2) || isTypedArray4(options2) || isNDArrayLike(options2) || options2 instanceof ArrayBuffer) { - data3 = options2; - } else if (typeof options2 === "number") { - byteLength = options2 | 0; - } else if (options2) { - check$1.type(options2, "object", "buffer arguments must be an object, a number or an array"); - if ("data" in options2) { - check$1(data3 === null || Array.isArray(data3) || isTypedArray4(data3) || isNDArrayLike(data3), "invalid data for buffer"); - data3 = options2.data; - } - if ("usage" in options2) { - check$1.parameter(options2.usage, usageTypes, "invalid buffer usage"); - usage = usageTypes[options2.usage]; - } - if ("type" in options2) { - check$1.parameter(options2.type, glTypes, "invalid buffer type"); - dtype = glTypes[options2.type]; - } - if ("dimension" in options2) { - check$1.type(options2.dimension, "number", "invalid dimension"); - dimension = options2.dimension | 0; - } - if ("length" in options2) { - check$1.nni(byteLength, "buffer length must be a nonnegative integer"); - byteLength = options2.length | 0; - } - } - buffer.bind(); - if (!data3) { - if (byteLength) - gl2.bufferData(buffer.type, byteLength, usage); - buffer.dtype = dtype || GL_UNSIGNED_BYTE$3; - buffer.usage = usage; - buffer.dimension = dimension; - buffer.byteLength = byteLength; - } else { - initBufferFromData(buffer, data3, usage, dtype, dimension, persistent); - } - if (config.profile) { - buffer.stats.size = buffer.byteLength * DTYPES_SIZES[buffer.dtype]; - } - return reglBuffer; - } - function setSubData(data3, offset) { - check$1(offset + data3.byteLength <= buffer.byteLength, "invalid buffer subdata call, buffer is too small. Can't write data of size " + data3.byteLength + " starting from offset " + offset + " to a buffer of size " + buffer.byteLength); - gl2.bufferSubData(buffer.type, offset, data3); - } - function subdata(data3, offset_) { - var offset = (offset_ || 0) | 0; - var shape; - buffer.bind(); - if (isTypedArray4(data3) || data3 instanceof ArrayBuffer) { - setSubData(data3, offset); - } else if (Array.isArray(data3)) { - if (data3.length > 0) { - if (typeof data3[0] === "number") { - var converted = pool.allocType(buffer.dtype, data3.length); - copyArray(converted, data3); - setSubData(converted, offset); - pool.freeType(converted); - } else if (Array.isArray(data3[0]) || isTypedArray4(data3[0])) { - shape = arrayShape(data3); - var flatData = arrayFlatten(data3, shape, buffer.dtype); - setSubData(flatData, offset); - pool.freeType(flatData); - } else { - check$1.raise("invalid buffer data"); - } - } - } else if (isNDArrayLike(data3)) { - shape = data3.shape; - var stride = data3.stride; - var shapeX = 0; - var shapeY = 0; - var strideX = 0; - var strideY = 0; - if (shape.length === 1) { - shapeX = shape[0]; - shapeY = 1; - strideX = stride[0]; - strideY = 0; - } else if (shape.length === 2) { - shapeX = shape[0]; - shapeY = shape[1]; - strideX = stride[0]; - strideY = stride[1]; - } else { - check$1.raise("invalid shape"); - } - var dtype = Array.isArray(data3.data) ? buffer.dtype : typedArrayCode(data3.data); - var transposeData2 = pool.allocType(dtype, shapeX * shapeY); - transpose5(transposeData2, data3.data, shapeX, shapeY, strideX, strideY, data3.offset); - setSubData(transposeData2, offset); - pool.freeType(transposeData2); - } else { - check$1.raise("invalid data for buffer subdata"); - } - return reglBuffer; - } - if (!deferInit) { - reglBuffer(options); - } - reglBuffer._reglType = "buffer"; - reglBuffer._buffer = buffer; - reglBuffer.subdata = subdata; - if (config.profile) { - reglBuffer.stats = buffer.stats; - } - reglBuffer.destroy = function() { - destroy(buffer); - }; - return reglBuffer; - } - function restoreBuffers() { - values4(bufferSet).forEach(function(buffer) { - buffer.buffer = gl2.createBuffer(); - gl2.bindBuffer(buffer.type, buffer.buffer); - gl2.bufferData(buffer.type, buffer.persistentData || buffer.byteLength, buffer.usage); - }); - } - if (config.profile) { - stats2.getTotalBufferSize = function() { - var total = 0; - Object.keys(bufferSet).forEach(function(key) { - total += bufferSet[key].stats.size; - }); - return total; - }; - } - return { - create: createBuffer, - createStream, - destroyStream, - clear: function() { - values4(bufferSet).forEach(destroy); - streamPool.forEach(destroy); - }, - getBuffer: function(wrapper) { - if (wrapper && wrapper._buffer instanceof REGLBuffer) { - return wrapper._buffer; - } - return null; - }, - restore: restoreBuffers, - _initBuffer: initBufferFromData - }; - } - var points = 0; - var point2 = 0; - var lines = 1; - var line2 = 1; - var triangles = 4; - var triangle3 = 4; - var primTypes = { - points, - point: point2, - lines, - line: line2, - triangles, - triangle: triangle3, - "line loop": 2, - "line strip": 3, - "triangle strip": 5, - "triangle fan": 6 - }; - var GL_POINTS = 0; - var GL_LINES = 1; - var GL_TRIANGLES = 4; - var GL_BYTE$2 = 5120; - var GL_UNSIGNED_BYTE$4 = 5121; - var GL_SHORT$2 = 5122; - var GL_UNSIGNED_SHORT$2 = 5123; - var GL_INT$2 = 5124; - var GL_UNSIGNED_INT$2 = 5125; - var GL_ELEMENT_ARRAY_BUFFER = 34963; - var GL_STREAM_DRAW$1 = 35040; - var GL_STATIC_DRAW$1 = 35044; - function wrapElementsState(gl2, extensions, bufferState, stats2) { - var elementSet = {}; - var elementCount = 0; - var elementTypes = { - "uint8": GL_UNSIGNED_BYTE$4, - "uint16": GL_UNSIGNED_SHORT$2 - }; - if (extensions.oes_element_index_uint) { - elementTypes.uint32 = GL_UNSIGNED_INT$2; - } - function REGLElementBuffer(buffer) { - this.id = elementCount++; - elementSet[this.id] = this; - this.buffer = buffer; - this.primType = GL_TRIANGLES; - this.vertCount = 0; - this.type = 0; - } - REGLElementBuffer.prototype.bind = function() { - this.buffer.bind(); - }; - var bufferPool = []; - function createElementStream(data3) { - var result = bufferPool.pop(); - if (!result) { - result = new REGLElementBuffer(bufferState.create(null, GL_ELEMENT_ARRAY_BUFFER, true, false)._buffer); - } - initElements(result, data3, GL_STREAM_DRAW$1, -1, -1, 0, 0); - return result; - } - function destroyElementStream(elements) { - bufferPool.push(elements); - } - function initElements(elements, data3, usage, prim, count2, byteLength, type2) { - elements.buffer.bind(); - var dtype; - if (data3) { - var predictedType = type2; - if (!type2 && (!isTypedArray4(data3) || isNDArrayLike(data3) && !isTypedArray4(data3.data))) { - predictedType = extensions.oes_element_index_uint ? GL_UNSIGNED_INT$2 : GL_UNSIGNED_SHORT$2; - } - bufferState._initBuffer(elements.buffer, data3, usage, predictedType, 3); - } else { - gl2.bufferData(GL_ELEMENT_ARRAY_BUFFER, byteLength, usage); - elements.buffer.dtype = dtype || GL_UNSIGNED_BYTE$4; - elements.buffer.usage = usage; - elements.buffer.dimension = 3; - elements.buffer.byteLength = byteLength; - } - dtype = type2; - if (!type2) { - switch (elements.buffer.dtype) { - case GL_UNSIGNED_BYTE$4: - case GL_BYTE$2: - dtype = GL_UNSIGNED_BYTE$4; - break; - case GL_UNSIGNED_SHORT$2: - case GL_SHORT$2: - dtype = GL_UNSIGNED_SHORT$2; - break; - case GL_UNSIGNED_INT$2: - case GL_INT$2: - dtype = GL_UNSIGNED_INT$2; - break; - default: - check$1.raise("unsupported type for element array"); - } - elements.buffer.dtype = dtype; - } - elements.type = dtype; - check$1(dtype !== GL_UNSIGNED_INT$2 || !!extensions.oes_element_index_uint, "32 bit element buffers not supported, enable oes_element_index_uint first"); - var vertCount = count2; - if (vertCount < 0) { - vertCount = elements.buffer.byteLength; - if (dtype === GL_UNSIGNED_SHORT$2) { - vertCount >>= 1; - } else if (dtype === GL_UNSIGNED_INT$2) { - vertCount >>= 2; - } - } - elements.vertCount = vertCount; - var primType = prim; - if (prim < 0) { - primType = GL_TRIANGLES; - var dimension = elements.buffer.dimension; - if (dimension === 1) - primType = GL_POINTS; - if (dimension === 2) - primType = GL_LINES; - if (dimension === 3) - primType = GL_TRIANGLES; - } - elements.primType = primType; - } - function destroyElements(elements) { - stats2.elementsCount--; - check$1(elements.buffer !== null, "must not double destroy elements"); - delete elementSet[elements.id]; - elements.buffer.destroy(); - elements.buffer = null; - } - function createElements(options, persistent) { - var buffer = bufferState.create(null, GL_ELEMENT_ARRAY_BUFFER, true); - var elements = new REGLElementBuffer(buffer._buffer); - stats2.elementsCount++; - function reglElements(options2) { - if (!options2) { - buffer(); - elements.primType = GL_TRIANGLES; - elements.vertCount = 0; - elements.type = GL_UNSIGNED_BYTE$4; - } else if (typeof options2 === "number") { - buffer(options2); - elements.primType = GL_TRIANGLES; - elements.vertCount = options2 | 0; - elements.type = GL_UNSIGNED_BYTE$4; - } else { - var data3 = null; - var usage = GL_STATIC_DRAW$1; - var primType = -1; - var vertCount = -1; - var byteLength = 0; - var dtype = 0; - if (Array.isArray(options2) || isTypedArray4(options2) || isNDArrayLike(options2)) { - data3 = options2; - } else { - check$1.type(options2, "object", "invalid arguments for elements"); - if ("data" in options2) { - data3 = options2.data; - check$1(Array.isArray(data3) || isTypedArray4(data3) || isNDArrayLike(data3), "invalid data for element buffer"); - } - if ("usage" in options2) { - check$1.parameter(options2.usage, usageTypes, "invalid element buffer usage"); - usage = usageTypes[options2.usage]; - } - if ("primitive" in options2) { - check$1.parameter(options2.primitive, primTypes, "invalid element buffer primitive"); - primType = primTypes[options2.primitive]; - } - if ("count" in options2) { - check$1(typeof options2.count === "number" && options2.count >= 0, "invalid vertex count for elements"); - vertCount = options2.count | 0; - } - if ("type" in options2) { - check$1.parameter(options2.type, elementTypes, "invalid buffer type"); - dtype = elementTypes[options2.type]; - } - if ("length" in options2) { - byteLength = options2.length | 0; - } else { - byteLength = vertCount; - if (dtype === GL_UNSIGNED_SHORT$2 || dtype === GL_SHORT$2) { - byteLength *= 2; - } else if (dtype === GL_UNSIGNED_INT$2 || dtype === GL_INT$2) { - byteLength *= 4; - } - } - } - initElements(elements, data3, usage, primType, vertCount, byteLength, dtype); - } - return reglElements; - } - reglElements(options); - reglElements._reglType = "elements"; - reglElements._elements = elements; - reglElements.subdata = function(data3, offset) { - buffer.subdata(data3, offset); - return reglElements; - }; - reglElements.destroy = function() { - destroyElements(elements); - }; - return reglElements; - } - return { - create: createElements, - createStream: createElementStream, - destroyStream: destroyElementStream, - getElements: function(elements) { - if (typeof elements === "function" && elements._elements instanceof REGLElementBuffer) { - return elements._elements; - } - return null; - }, - clear: function() { - values4(elementSet).forEach(destroyElements); - } - }; - } - var FLOAT = new Float32Array(1); - var INT = new Uint32Array(FLOAT.buffer); - var GL_UNSIGNED_SHORT$4 = 5123; - function convertToHalfFloat(array) { - var ushorts = pool.allocType(GL_UNSIGNED_SHORT$4, array.length); - for (var i4 = 0; i4 < array.length; ++i4) { - if (isNaN(array[i4])) { - ushorts[i4] = 65535; - } else if (array[i4] === Infinity) { - ushorts[i4] = 31744; - } else if (array[i4] === -Infinity) { - ushorts[i4] = 64512; - } else { - FLOAT[0] = array[i4]; - var x6 = INT[0]; - var sgn = x6 >>> 31 << 15; - var exp2 = (x6 << 1 >>> 24) - 127; - var frac = x6 >> 13 & (1 << 10) - 1; - if (exp2 < -24) { - ushorts[i4] = sgn; - } else if (exp2 < -14) { - var s4 = -14 - exp2; - ushorts[i4] = sgn + (frac + (1 << 10) >> s4); - } else if (exp2 > 15) { - ushorts[i4] = sgn + 31744; - } else { - ushorts[i4] = sgn + (exp2 + 15 << 10) + frac; - } - } - } - return ushorts; - } - function isArrayLike(s4) { - return Array.isArray(s4) || isTypedArray4(s4); - } - var isPow2$1 = function(v3) { - return !(v3 & v3 - 1) && !!v3; - }; - var GL_COMPRESSED_TEXTURE_FORMATS = 34467; - var GL_TEXTURE_2D$1 = 3553; - var GL_TEXTURE_CUBE_MAP$1 = 34067; - var GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 = 34069; - var GL_RGBA$1 = 6408; - var GL_ALPHA = 6406; - var GL_RGB = 6407; - var GL_LUMINANCE = 6409; - var GL_LUMINANCE_ALPHA = 6410; - var GL_RGBA4 = 32854; - var GL_RGB5_A1 = 32855; - var GL_RGB565 = 36194; - var GL_UNSIGNED_SHORT_4_4_4_4$1 = 32819; - var GL_UNSIGNED_SHORT_5_5_5_1$1 = 32820; - var GL_UNSIGNED_SHORT_5_6_5$1 = 33635; - var GL_UNSIGNED_INT_24_8_WEBGL$1 = 34042; - var GL_DEPTH_COMPONENT = 6402; - var GL_DEPTH_STENCIL = 34041; - var GL_SRGB_EXT = 35904; - var GL_SRGB_ALPHA_EXT = 35906; - var GL_HALF_FLOAT_OES$1 = 36193; - var GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 33776; - var GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = 33777; - var GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778; - var GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779; - var GL_COMPRESSED_RGB_ATC_WEBGL = 35986; - var GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL = 35987; - var GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL = 34798; - var GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 35840; - var GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 35841; - var GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 35842; - var GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 35843; - var GL_COMPRESSED_RGB_ETC1_WEBGL = 36196; - var GL_UNSIGNED_BYTE$5 = 5121; - var GL_UNSIGNED_SHORT$3 = 5123; - var GL_UNSIGNED_INT$3 = 5125; - var GL_FLOAT$4 = 5126; - var GL_TEXTURE_WRAP_S = 10242; - var GL_TEXTURE_WRAP_T = 10243; - var GL_REPEAT = 10497; - var GL_CLAMP_TO_EDGE$1 = 33071; - var GL_MIRRORED_REPEAT = 33648; - var GL_TEXTURE_MAG_FILTER = 10240; - var GL_TEXTURE_MIN_FILTER = 10241; - var GL_NEAREST$1 = 9728; - var GL_LINEAR = 9729; - var GL_NEAREST_MIPMAP_NEAREST$1 = 9984; - var GL_LINEAR_MIPMAP_NEAREST$1 = 9985; - var GL_NEAREST_MIPMAP_LINEAR$1 = 9986; - var GL_LINEAR_MIPMAP_LINEAR$1 = 9987; - var GL_GENERATE_MIPMAP_HINT = 33170; - var GL_DONT_CARE = 4352; - var GL_FASTEST = 4353; - var GL_NICEST = 4354; - var GL_TEXTURE_MAX_ANISOTROPY_EXT = 34046; - var GL_UNPACK_ALIGNMENT = 3317; - var GL_UNPACK_FLIP_Y_WEBGL = 37440; - var GL_UNPACK_PREMULTIPLY_ALPHA_WEBGL = 37441; - var GL_UNPACK_COLORSPACE_CONVERSION_WEBGL = 37443; - var GL_BROWSER_DEFAULT_WEBGL = 37444; - var GL_TEXTURE0$1 = 33984; - var MIPMAP_FILTERS = [ - GL_NEAREST_MIPMAP_NEAREST$1, - GL_NEAREST_MIPMAP_LINEAR$1, - GL_LINEAR_MIPMAP_NEAREST$1, - GL_LINEAR_MIPMAP_LINEAR$1 - ]; - var CHANNELS_FORMAT = [ - 0, - GL_LUMINANCE, - GL_LUMINANCE_ALPHA, - GL_RGB, - GL_RGBA$1 - ]; - var FORMAT_CHANNELS = {}; - FORMAT_CHANNELS[GL_LUMINANCE] = FORMAT_CHANNELS[GL_ALPHA] = FORMAT_CHANNELS[GL_DEPTH_COMPONENT] = 1; - FORMAT_CHANNELS[GL_DEPTH_STENCIL] = FORMAT_CHANNELS[GL_LUMINANCE_ALPHA] = 2; - FORMAT_CHANNELS[GL_RGB] = FORMAT_CHANNELS[GL_SRGB_EXT] = 3; - FORMAT_CHANNELS[GL_RGBA$1] = FORMAT_CHANNELS[GL_SRGB_ALPHA_EXT] = 4; - function objectName(str8) { - return "[object " + str8 + "]"; - } - var CANVAS_CLASS = objectName("HTMLCanvasElement"); - var OFFSCREENCANVAS_CLASS = objectName("OffscreenCanvas"); - var CONTEXT2D_CLASS = objectName("CanvasRenderingContext2D"); - var BITMAP_CLASS = objectName("ImageBitmap"); - var IMAGE_CLASS = objectName("HTMLImageElement"); - var VIDEO_CLASS = objectName("HTMLVideoElement"); - var PIXEL_CLASSES = Object.keys(arrayTypes).concat([ - CANVAS_CLASS, - OFFSCREENCANVAS_CLASS, - CONTEXT2D_CLASS, - BITMAP_CLASS, - IMAGE_CLASS, - VIDEO_CLASS - ]); - var TYPE_SIZES = []; - TYPE_SIZES[GL_UNSIGNED_BYTE$5] = 1; - TYPE_SIZES[GL_FLOAT$4] = 4; - TYPE_SIZES[GL_HALF_FLOAT_OES$1] = 2; - TYPE_SIZES[GL_UNSIGNED_SHORT$3] = 2; - TYPE_SIZES[GL_UNSIGNED_INT$3] = 4; - var FORMAT_SIZES_SPECIAL = []; - FORMAT_SIZES_SPECIAL[GL_RGBA4] = 2; - FORMAT_SIZES_SPECIAL[GL_RGB5_A1] = 2; - FORMAT_SIZES_SPECIAL[GL_RGB565] = 2; - FORMAT_SIZES_SPECIAL[GL_DEPTH_STENCIL] = 4; - FORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_S3TC_DXT1_EXT] = 0.5; - FORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_S3TC_DXT1_EXT] = 0.5; - FORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_S3TC_DXT3_EXT] = 1; - FORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_S3TC_DXT5_EXT] = 1; - FORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_ATC_WEBGL] = 0.5; - FORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL] = 1; - FORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL] = 1; - FORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG] = 0.5; - FORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG] = 0.25; - FORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG] = 0.5; - FORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG] = 0.25; - FORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_ETC1_WEBGL] = 0.5; - function isNumericArray(arr) { - return Array.isArray(arr) && (arr.length === 0 || typeof arr[0] === "number"); - } - function isRectArray(arr) { - if (!Array.isArray(arr)) { - return false; - } - var width2 = arr.length; - if (width2 === 0 || !isArrayLike(arr[0])) { - return false; - } - return true; - } - function classString(x6) { - return Object.prototype.toString.call(x6); - } - function isCanvasElement(object) { - return classString(object) === CANVAS_CLASS; - } - function isOffscreenCanvas(object) { - return classString(object) === OFFSCREENCANVAS_CLASS; - } - function isContext2D(object) { - return classString(object) === CONTEXT2D_CLASS; - } - function isBitmap(object) { - return classString(object) === BITMAP_CLASS; - } - function isImageElement(object) { - return classString(object) === IMAGE_CLASS; - } - function isVideoElement(object) { - return classString(object) === VIDEO_CLASS; - } - function isPixelData(object) { - if (!object) { - return false; - } - var className = classString(object); - if (PIXEL_CLASSES.indexOf(className) >= 0) { - return true; - } - return isNumericArray(object) || isRectArray(object) || isNDArrayLike(object); - } - function typedArrayCode$1(data3) { - return arrayTypes[Object.prototype.toString.call(data3)] | 0; - } - function convertData(result, data3) { - var n3 = data3.length; - switch (result.type) { - case GL_UNSIGNED_BYTE$5: - case GL_UNSIGNED_SHORT$3: - case GL_UNSIGNED_INT$3: - case GL_FLOAT$4: - var converted = pool.allocType(result.type, n3); - converted.set(data3); - result.data = converted; - break; - case GL_HALF_FLOAT_OES$1: - result.data = convertToHalfFloat(data3); - break; - default: - check$1.raise("unsupported texture type, must specify a typed array"); - } - } - function preConvert(image, n3) { - return pool.allocType(image.type === GL_HALF_FLOAT_OES$1 ? GL_FLOAT$4 : image.type, n3); - } - function postConvert(image, data3) { - if (image.type === GL_HALF_FLOAT_OES$1) { - image.data = convertToHalfFloat(data3); - pool.freeType(data3); - } else { - image.data = data3; - } - } - function transposeData(image, array, strideX, strideY, strideC, offset) { - var w4 = image.width; - var h3 = image.height; - var c5 = image.channels; - var n3 = w4 * h3 * c5; - var data3 = preConvert(image, n3); - var p4 = 0; - for (var i4 = 0; i4 < h3; ++i4) { - for (var j4 = 0; j4 < w4; ++j4) { - for (var k4 = 0; k4 < c5; ++k4) { - data3[p4++] = array[strideX * j4 + strideY * i4 + strideC * k4 + offset]; - } - } - } - postConvert(image, data3); - } - function getTextureSize(format2, type2, width2, height, isMipmap, isCube) { - var s4; - if (typeof FORMAT_SIZES_SPECIAL[format2] !== "undefined") { - s4 = FORMAT_SIZES_SPECIAL[format2]; - } else { - s4 = FORMAT_CHANNELS[format2] * TYPE_SIZES[type2]; - } - if (isCube) { - s4 *= 6; - } - if (isMipmap) { - var total = 0; - var w4 = width2; - while (w4 >= 1) { - total += s4 * w4 * w4; - w4 /= 2; - } - return total; - } else { - return s4 * width2 * height; - } - } - function createTextureSet(gl2, extensions, limits, reglPoll, contextState, stats2, config) { - var mipmapHint = { - "don't care": GL_DONT_CARE, - "dont care": GL_DONT_CARE, - "nice": GL_NICEST, - "fast": GL_FASTEST - }; - var wrapModes = { - "repeat": GL_REPEAT, - "clamp": GL_CLAMP_TO_EDGE$1, - "mirror": GL_MIRRORED_REPEAT - }; - var magFilters = { - "nearest": GL_NEAREST$1, - "linear": GL_LINEAR - }; - var minFilters = extend4({ - "mipmap": GL_LINEAR_MIPMAP_LINEAR$1, - "nearest mipmap nearest": GL_NEAREST_MIPMAP_NEAREST$1, - "linear mipmap nearest": GL_LINEAR_MIPMAP_NEAREST$1, - "nearest mipmap linear": GL_NEAREST_MIPMAP_LINEAR$1, - "linear mipmap linear": GL_LINEAR_MIPMAP_LINEAR$1 - }, magFilters); - var colorSpace = { - "none": 0, - "browser": GL_BROWSER_DEFAULT_WEBGL - }; - var textureTypes = { - "uint8": GL_UNSIGNED_BYTE$5, - "rgba4": GL_UNSIGNED_SHORT_4_4_4_4$1, - "rgb565": GL_UNSIGNED_SHORT_5_6_5$1, - "rgb5 a1": GL_UNSIGNED_SHORT_5_5_5_1$1 - }; - var textureFormats = { - "alpha": GL_ALPHA, - "luminance": GL_LUMINANCE, - "luminance alpha": GL_LUMINANCE_ALPHA, - "rgb": GL_RGB, - "rgba": GL_RGBA$1, - "rgba4": GL_RGBA4, - "rgb5 a1": GL_RGB5_A1, - "rgb565": GL_RGB565 - }; - var compressedTextureFormats = {}; - if (extensions.ext_srgb) { - textureFormats.srgb = GL_SRGB_EXT; - textureFormats.srgba = GL_SRGB_ALPHA_EXT; - } - if (extensions.oes_texture_float) { - textureTypes.float32 = textureTypes.float = GL_FLOAT$4; - } - if (extensions.oes_texture_half_float) { - textureTypes["float16"] = textureTypes["half float"] = GL_HALF_FLOAT_OES$1; - } - if (extensions.webgl_depth_texture) { - extend4(textureFormats, { - "depth": GL_DEPTH_COMPONENT, - "depth stencil": GL_DEPTH_STENCIL - }); - extend4(textureTypes, { - "uint16": GL_UNSIGNED_SHORT$3, - "uint32": GL_UNSIGNED_INT$3, - "depth stencil": GL_UNSIGNED_INT_24_8_WEBGL$1 - }); - } - if (extensions.webgl_compressed_texture_s3tc) { - extend4(compressedTextureFormats, { - "rgb s3tc dxt1": GL_COMPRESSED_RGB_S3TC_DXT1_EXT, - "rgba s3tc dxt1": GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, - "rgba s3tc dxt3": GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, - "rgba s3tc dxt5": GL_COMPRESSED_RGBA_S3TC_DXT5_EXT - }); - } - if (extensions.webgl_compressed_texture_atc) { - extend4(compressedTextureFormats, { - "rgb atc": GL_COMPRESSED_RGB_ATC_WEBGL, - "rgba atc explicit alpha": GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL, - "rgba atc interpolated alpha": GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL - }); - } - if (extensions.webgl_compressed_texture_pvrtc) { - extend4(compressedTextureFormats, { - "rgb pvrtc 4bppv1": GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, - "rgb pvrtc 2bppv1": GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, - "rgba pvrtc 4bppv1": GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, - "rgba pvrtc 2bppv1": GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG - }); - } - if (extensions.webgl_compressed_texture_etc1) { - compressedTextureFormats["rgb etc1"] = GL_COMPRESSED_RGB_ETC1_WEBGL; - } - var supportedCompressedFormats = Array.prototype.slice.call(gl2.getParameter(GL_COMPRESSED_TEXTURE_FORMATS)); - Object.keys(compressedTextureFormats).forEach(function(name) { - var format2 = compressedTextureFormats[name]; - if (supportedCompressedFormats.indexOf(format2) >= 0) { - textureFormats[name] = format2; - } - }); - var supportedFormats = Object.keys(textureFormats); - limits.textureFormats = supportedFormats; - var textureFormatsInvert = []; - Object.keys(textureFormats).forEach(function(key) { - var val = textureFormats[key]; - textureFormatsInvert[val] = key; - }); - var textureTypesInvert = []; - Object.keys(textureTypes).forEach(function(key) { - var val = textureTypes[key]; - textureTypesInvert[val] = key; - }); - var magFiltersInvert = []; - Object.keys(magFilters).forEach(function(key) { - var val = magFilters[key]; - magFiltersInvert[val] = key; - }); - var minFiltersInvert = []; - Object.keys(minFilters).forEach(function(key) { - var val = minFilters[key]; - minFiltersInvert[val] = key; - }); - var wrapModesInvert = []; - Object.keys(wrapModes).forEach(function(key) { - var val = wrapModes[key]; - wrapModesInvert[val] = key; - }); - var colorFormats = supportedFormats.reduce(function(color4, key) { - var glenum = textureFormats[key]; - if (glenum === GL_LUMINANCE || glenum === GL_ALPHA || glenum === GL_LUMINANCE || glenum === GL_LUMINANCE_ALPHA || glenum === GL_DEPTH_COMPONENT || glenum === GL_DEPTH_STENCIL || extensions.ext_srgb && (glenum === GL_SRGB_EXT || glenum === GL_SRGB_ALPHA_EXT)) { - color4[glenum] = glenum; - } else if (glenum === GL_RGB5_A1 || key.indexOf("rgba") >= 0) { - color4[glenum] = GL_RGBA$1; - } else { - color4[glenum] = GL_RGB; - } - return color4; - }, {}); - function TexFlags() { - this.internalformat = GL_RGBA$1; - this.format = GL_RGBA$1; - this.type = GL_UNSIGNED_BYTE$5; - this.compressed = false; - this.premultiplyAlpha = false; - this.flipY = false; - this.unpackAlignment = 1; - this.colorSpace = GL_BROWSER_DEFAULT_WEBGL; - this.width = 0; - this.height = 0; - this.channels = 0; - } - function copyFlags(result, other2) { - result.internalformat = other2.internalformat; - result.format = other2.format; - result.type = other2.type; - result.compressed = other2.compressed; - result.premultiplyAlpha = other2.premultiplyAlpha; - result.flipY = other2.flipY; - result.unpackAlignment = other2.unpackAlignment; - result.colorSpace = other2.colorSpace; - result.width = other2.width; - result.height = other2.height; - result.channels = other2.channels; - } - function parseFlags2(flags, options) { - if (typeof options !== "object" || !options) { - return; - } - if ("premultiplyAlpha" in options) { - check$1.type(options.premultiplyAlpha, "boolean", "invalid premultiplyAlpha"); - flags.premultiplyAlpha = options.premultiplyAlpha; - } - if ("flipY" in options) { - check$1.type(options.flipY, "boolean", "invalid texture flip"); - flags.flipY = options.flipY; - } - if ("alignment" in options) { - check$1.oneOf(options.alignment, [1, 2, 4, 8], "invalid texture unpack alignment"); - flags.unpackAlignment = options.alignment; - } - if ("colorSpace" in options) { - check$1.parameter(options.colorSpace, colorSpace, "invalid colorSpace"); - flags.colorSpace = colorSpace[options.colorSpace]; - } - if ("type" in options) { - var type2 = options.type; - check$1(extensions.oes_texture_float || !(type2 === "float" || type2 === "float32"), "you must enable the OES_texture_float extension in order to use floating point textures."); - check$1(extensions.oes_texture_half_float || !(type2 === "half float" || type2 === "float16"), "you must enable the OES_texture_half_float extension in order to use 16-bit floating point textures."); - check$1(extensions.webgl_depth_texture || !(type2 === "uint16" || type2 === "uint32" || type2 === "depth stencil"), "you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures."); - check$1.parameter(type2, textureTypes, "invalid texture type"); - flags.type = textureTypes[type2]; - } - var w4 = flags.width; - var h3 = flags.height; - var c5 = flags.channels; - var hasChannels = false; - if ("shape" in options) { - check$1(Array.isArray(options.shape) && options.shape.length >= 2, "shape must be an array"); - w4 = options.shape[0]; - h3 = options.shape[1]; - if (options.shape.length === 3) { - c5 = options.shape[2]; - check$1(c5 > 0 && c5 <= 4, "invalid number of channels"); - hasChannels = true; - } - check$1(w4 >= 0 && w4 <= limits.maxTextureSize, "invalid width"); - check$1(h3 >= 0 && h3 <= limits.maxTextureSize, "invalid height"); - } else { - if ("radius" in options) { - w4 = h3 = options.radius; - check$1(w4 >= 0 && w4 <= limits.maxTextureSize, "invalid radius"); - } - if ("width" in options) { - w4 = options.width; - check$1(w4 >= 0 && w4 <= limits.maxTextureSize, "invalid width"); - } - if ("height" in options) { - h3 = options.height; - check$1(h3 >= 0 && h3 <= limits.maxTextureSize, "invalid height"); - } - if ("channels" in options) { - c5 = options.channels; - check$1(c5 > 0 && c5 <= 4, "invalid number of channels"); - hasChannels = true; - } - } - flags.width = w4 | 0; - flags.height = h3 | 0; - flags.channels = c5 | 0; - var hasFormat = false; - if ("format" in options) { - var formatStr = options.format; - check$1(extensions.webgl_depth_texture || !(formatStr === "depth" || formatStr === "depth stencil"), "you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures."); - check$1.parameter(formatStr, textureFormats, "invalid texture format"); - var internalformat = flags.internalformat = textureFormats[formatStr]; - flags.format = colorFormats[internalformat]; - if (formatStr in textureTypes) { - if (!("type" in options)) { - flags.type = textureTypes[formatStr]; - } - } - if (formatStr in compressedTextureFormats) { - flags.compressed = true; - } - hasFormat = true; - } - if (!hasChannels && hasFormat) { - flags.channels = FORMAT_CHANNELS[flags.format]; - } else if (hasChannels && !hasFormat) { - if (flags.channels !== CHANNELS_FORMAT[flags.format]) { - flags.format = flags.internalformat = CHANNELS_FORMAT[flags.channels]; - } - } else if (hasFormat && hasChannels) { - check$1(flags.channels === FORMAT_CHANNELS[flags.format], "number of channels inconsistent with specified format"); - } - } - function setFlags(flags) { - gl2.pixelStorei(GL_UNPACK_FLIP_Y_WEBGL, flags.flipY); - gl2.pixelStorei(GL_UNPACK_PREMULTIPLY_ALPHA_WEBGL, flags.premultiplyAlpha); - gl2.pixelStorei(GL_UNPACK_COLORSPACE_CONVERSION_WEBGL, flags.colorSpace); - gl2.pixelStorei(GL_UNPACK_ALIGNMENT, flags.unpackAlignment); - } - function TexImage() { - TexFlags.call(this); - this.xOffset = 0; - this.yOffset = 0; - this.data = null; - this.needsFree = false; - this.element = null; - this.needsCopy = false; - } - function parseImage(image, options) { - var data3 = null; - if (isPixelData(options)) { - data3 = options; - } else if (options) { - check$1.type(options, "object", "invalid pixel data type"); - parseFlags2(image, options); - if ("x" in options) { - image.xOffset = options.x | 0; - } - if ("y" in options) { - image.yOffset = options.y | 0; - } - if (isPixelData(options.data)) { - data3 = options.data; - } - } - check$1(!image.compressed || data3 instanceof Uint8Array, "compressed texture data must be stored in a uint8array"); - if (options.copy) { - check$1(!data3, "can not specify copy and data field for the same texture"); - var viewW = contextState.viewportWidth; - var viewH = contextState.viewportHeight; - image.width = image.width || viewW - image.xOffset; - image.height = image.height || viewH - image.yOffset; - image.needsCopy = true; - check$1(image.xOffset >= 0 && image.xOffset < viewW && image.yOffset >= 0 && image.yOffset < viewH && image.width > 0 && image.width <= viewW && image.height > 0 && image.height <= viewH, "copy texture read out of bounds"); - } else if (!data3) { - image.width = image.width || 1; - image.height = image.height || 1; - image.channels = image.channels || 4; - } else if (isTypedArray4(data3)) { - image.channels = image.channels || 4; - image.data = data3; - if (!("type" in options) && image.type === GL_UNSIGNED_BYTE$5) { - image.type = typedArrayCode$1(data3); - } - } else if (isNumericArray(data3)) { - image.channels = image.channels || 4; - convertData(image, data3); - image.alignment = 1; - image.needsFree = true; - } else if (isNDArrayLike(data3)) { - var array = data3.data; - if (!Array.isArray(array) && image.type === GL_UNSIGNED_BYTE$5) { - image.type = typedArrayCode$1(array); - } - var shape = data3.shape; - var stride = data3.stride; - var shapeX, shapeY, shapeC, strideX, strideY, strideC; - if (shape.length === 3) { - shapeC = shape[2]; - strideC = stride[2]; - } else { - check$1(shape.length === 2, "invalid ndarray pixel data, must be 2 or 3D"); - shapeC = 1; - strideC = 1; - } - shapeX = shape[0]; - shapeY = shape[1]; - strideX = stride[0]; - strideY = stride[1]; - image.alignment = 1; - image.width = shapeX; - image.height = shapeY; - image.channels = shapeC; - image.format = image.internalformat = CHANNELS_FORMAT[shapeC]; - image.needsFree = true; - transposeData(image, array, strideX, strideY, strideC, data3.offset); - } else if (isCanvasElement(data3) || isOffscreenCanvas(data3) || isContext2D(data3)) { - if (isCanvasElement(data3) || isOffscreenCanvas(data3)) { - image.element = data3; - } else { - image.element = data3.canvas; - } - image.width = image.element.width; - image.height = image.element.height; - image.channels = 4; - } else if (isBitmap(data3)) { - image.element = data3; - image.width = data3.width; - image.height = data3.height; - image.channels = 4; - } else if (isImageElement(data3)) { - image.element = data3; - image.width = data3.naturalWidth; - image.height = data3.naturalHeight; - image.channels = 4; - } else if (isVideoElement(data3)) { - image.element = data3; - image.width = data3.videoWidth; - image.height = data3.videoHeight; - image.channels = 4; - } else if (isRectArray(data3)) { - var w4 = image.width || data3[0].length; - var h3 = image.height || data3.length; - var c5 = image.channels; - if (isArrayLike(data3[0][0])) { - c5 = c5 || data3[0][0].length; - } else { - c5 = c5 || 1; - } - var arrayShape2 = flattenUtils.shape(data3); - var n3 = 1; - for (var dd = 0; dd < arrayShape2.length; ++dd) { - n3 *= arrayShape2[dd]; - } - var allocData = preConvert(image, n3); - flattenUtils.flatten(data3, arrayShape2, "", allocData); - postConvert(image, allocData); - image.alignment = 1; - image.width = w4; - image.height = h3; - image.channels = c5; - image.format = image.internalformat = CHANNELS_FORMAT[c5]; - image.needsFree = true; - } - if (image.type === GL_FLOAT$4) { - check$1(limits.extensions.indexOf("oes_texture_float") >= 0, "oes_texture_float extension not enabled"); - } else if (image.type === GL_HALF_FLOAT_OES$1) { - check$1(limits.extensions.indexOf("oes_texture_half_float") >= 0, "oes_texture_half_float extension not enabled"); - } - } - function setImage(info, target, miplevel) { - var element = info.element; - var data3 = info.data; - var internalformat = info.internalformat; - var format2 = info.format; - var type2 = info.type; - var width2 = info.width; - var height = info.height; - setFlags(info); - if (element) { - gl2.texImage2D(target, miplevel, format2, format2, type2, element); - } else if (info.compressed) { - gl2.compressedTexImage2D(target, miplevel, internalformat, width2, height, 0, data3); - } else if (info.needsCopy) { - reglPoll(); - gl2.copyTexImage2D(target, miplevel, format2, info.xOffset, info.yOffset, width2, height, 0); - } else { - gl2.texImage2D(target, miplevel, format2, width2, height, 0, format2, type2, data3 || null); - } - } - function setSubImage(info, target, x6, y5, miplevel) { - var element = info.element; - var data3 = info.data; - var internalformat = info.internalformat; - var format2 = info.format; - var type2 = info.type; - var width2 = info.width; - var height = info.height; - setFlags(info); - if (element) { - gl2.texSubImage2D(target, miplevel, x6, y5, format2, type2, element); - } else if (info.compressed) { - gl2.compressedTexSubImage2D(target, miplevel, x6, y5, internalformat, width2, height, data3); - } else if (info.needsCopy) { - reglPoll(); - gl2.copyTexSubImage2D(target, miplevel, x6, y5, info.xOffset, info.yOffset, width2, height); - } else { - gl2.texSubImage2D(target, miplevel, x6, y5, width2, height, format2, type2, data3); - } - } - var imagePool = []; - function allocImage() { - return imagePool.pop() || new TexImage(); - } - function freeImage(image) { - if (image.needsFree) { - pool.freeType(image.data); - } - TexImage.call(image); - imagePool.push(image); - } - function MipMap() { - TexFlags.call(this); - this.genMipmaps = false; - this.mipmapHint = GL_DONT_CARE; - this.mipmask = 0; - this.images = Array(16); - } - function parseMipMapFromShape(mipmap, width2, height) { - var img = mipmap.images[0] = allocImage(); - mipmap.mipmask = 1; - img.width = mipmap.width = width2; - img.height = mipmap.height = height; - img.channels = mipmap.channels = 4; - } - function parseMipMapFromObject(mipmap, options) { - var imgData = null; - if (isPixelData(options)) { - imgData = mipmap.images[0] = allocImage(); - copyFlags(imgData, mipmap); - parseImage(imgData, options); - mipmap.mipmask = 1; - } else { - parseFlags2(mipmap, options); - if (Array.isArray(options.mipmap)) { - var mipData = options.mipmap; - for (var i4 = 0; i4 < mipData.length; ++i4) { - imgData = mipmap.images[i4] = allocImage(); - copyFlags(imgData, mipmap); - imgData.width >>= i4; - imgData.height >>= i4; - parseImage(imgData, mipData[i4]); - mipmap.mipmask |= 1 << i4; - } - } else { - imgData = mipmap.images[0] = allocImage(); - copyFlags(imgData, mipmap); - parseImage(imgData, options); - mipmap.mipmask = 1; - } - } - copyFlags(mipmap, mipmap.images[0]); - if (mipmap.compressed && (mipmap.internalformat === GL_COMPRESSED_RGB_S3TC_DXT1_EXT || mipmap.internalformat === GL_COMPRESSED_RGBA_S3TC_DXT1_EXT || mipmap.internalformat === GL_COMPRESSED_RGBA_S3TC_DXT3_EXT || mipmap.internalformat === GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)) { - check$1(mipmap.width % 4 === 0 && mipmap.height % 4 === 0, "for compressed texture formats, mipmap level 0 must have width and height that are a multiple of 4"); - } - } - function setMipMap(mipmap, target) { - var images = mipmap.images; - for (var i4 = 0; i4 < images.length; ++i4) { - if (!images[i4]) { - return; - } - setImage(images[i4], target, i4); - } - } - var mipPool = []; - function allocMipMap() { - var result = mipPool.pop() || new MipMap(); - TexFlags.call(result); - result.mipmask = 0; - for (var i4 = 0; i4 < 16; ++i4) { - result.images[i4] = null; - } - return result; - } - function freeMipMap(mipmap) { - var images = mipmap.images; - for (var i4 = 0; i4 < images.length; ++i4) { - if (images[i4]) { - freeImage(images[i4]); - } - images[i4] = null; - } - mipPool.push(mipmap); - } - function TexInfo() { - this.minFilter = GL_NEAREST$1; - this.magFilter = GL_NEAREST$1; - this.wrapS = GL_CLAMP_TO_EDGE$1; - this.wrapT = GL_CLAMP_TO_EDGE$1; - this.anisotropic = 1; - this.genMipmaps = false; - this.mipmapHint = GL_DONT_CARE; - } - function parseTexInfo(info, options) { - if ("min" in options) { - var minFilter = options.min; - check$1.parameter(minFilter, minFilters); - info.minFilter = minFilters[minFilter]; - if (MIPMAP_FILTERS.indexOf(info.minFilter) >= 0 && !("faces" in options)) { - info.genMipmaps = true; - } - } - if ("mag" in options) { - var magFilter = options.mag; - check$1.parameter(magFilter, magFilters); - info.magFilter = magFilters[magFilter]; - } - var wrapS = info.wrapS; - var wrapT = info.wrapT; - if ("wrap" in options) { - var wrap = options.wrap; - if (typeof wrap === "string") { - check$1.parameter(wrap, wrapModes); - wrapS = wrapT = wrapModes[wrap]; - } else if (Array.isArray(wrap)) { - check$1.parameter(wrap[0], wrapModes); - check$1.parameter(wrap[1], wrapModes); - wrapS = wrapModes[wrap[0]]; - wrapT = wrapModes[wrap[1]]; - } - } else { - if ("wrapS" in options) { - var optWrapS = options.wrapS; - check$1.parameter(optWrapS, wrapModes); - wrapS = wrapModes[optWrapS]; - } - if ("wrapT" in options) { - var optWrapT = options.wrapT; - check$1.parameter(optWrapT, wrapModes); - wrapT = wrapModes[optWrapT]; - } - } - info.wrapS = wrapS; - info.wrapT = wrapT; - if ("anisotropic" in options) { - var anisotropic = options.anisotropic; - check$1(typeof anisotropic === "number" && anisotropic >= 1 && anisotropic <= limits.maxAnisotropic, "aniso samples must be between 1 and "); - info.anisotropic = options.anisotropic; - } - if ("mipmap" in options) { - var hasMipMap = false; - switch (typeof options.mipmap) { - case "string": - check$1.parameter(options.mipmap, mipmapHint, "invalid mipmap hint"); - info.mipmapHint = mipmapHint[options.mipmap]; - info.genMipmaps = true; - hasMipMap = true; - break; - case "boolean": - hasMipMap = info.genMipmaps = options.mipmap; - break; - case "object": - check$1(Array.isArray(options.mipmap), "invalid mipmap type"); - info.genMipmaps = false; - hasMipMap = true; - break; - default: - check$1.raise("invalid mipmap type"); - } - if (hasMipMap && !("min" in options)) { - info.minFilter = GL_NEAREST_MIPMAP_NEAREST$1; - } - } - } - function setTexInfo(info, target) { - gl2.texParameteri(target, GL_TEXTURE_MIN_FILTER, info.minFilter); - gl2.texParameteri(target, GL_TEXTURE_MAG_FILTER, info.magFilter); - gl2.texParameteri(target, GL_TEXTURE_WRAP_S, info.wrapS); - gl2.texParameteri(target, GL_TEXTURE_WRAP_T, info.wrapT); - if (extensions.ext_texture_filter_anisotropic) { - gl2.texParameteri(target, GL_TEXTURE_MAX_ANISOTROPY_EXT, info.anisotropic); - } - if (info.genMipmaps) { - gl2.hint(GL_GENERATE_MIPMAP_HINT, info.mipmapHint); - gl2.generateMipmap(target); - } - } - var textureCount = 0; - var textureSet = {}; - var numTexUnits = limits.maxTextureUnits; - var textureUnits = Array(numTexUnits).map(function() { - return null; - }); - function REGLTexture(target) { - TexFlags.call(this); - this.mipmask = 0; - this.internalformat = GL_RGBA$1; - this.id = textureCount++; - this.refCount = 1; - this.target = target; - this.texture = gl2.createTexture(); - this.unit = -1; - this.bindCount = 0; - this.texInfo = new TexInfo(); - if (config.profile) { - this.stats = { size: 0 }; - } - } - function tempBind(texture) { - gl2.activeTexture(GL_TEXTURE0$1); - gl2.bindTexture(texture.target, texture.texture); - } - function tempRestore() { - var prev = textureUnits[0]; - if (prev) { - gl2.bindTexture(prev.target, prev.texture); - } else { - gl2.bindTexture(GL_TEXTURE_2D$1, null); - } - } - function destroy(texture) { - var handle = texture.texture; - check$1(handle, "must not double destroy texture"); - var unit = texture.unit; - var target = texture.target; - if (unit >= 0) { - gl2.activeTexture(GL_TEXTURE0$1 + unit); - gl2.bindTexture(target, null); - textureUnits[unit] = null; - } - gl2.deleteTexture(handle); - texture.texture = null; - texture.params = null; - texture.pixels = null; - texture.refCount = 0; - delete textureSet[texture.id]; - stats2.textureCount--; - } - extend4(REGLTexture.prototype, { - bind: function() { - var texture = this; - texture.bindCount += 1; - var unit = texture.unit; - if (unit < 0) { - for (var i4 = 0; i4 < numTexUnits; ++i4) { - var other2 = textureUnits[i4]; - if (other2) { - if (other2.bindCount > 0) { - continue; - } - other2.unit = -1; - } - textureUnits[i4] = texture; - unit = i4; - break; - } - if (unit >= numTexUnits) { - check$1.raise("insufficient number of texture units"); - } - if (config.profile && stats2.maxTextureUnits < unit + 1) { - stats2.maxTextureUnits = unit + 1; - } - texture.unit = unit; - gl2.activeTexture(GL_TEXTURE0$1 + unit); - gl2.bindTexture(texture.target, texture.texture); - } - return unit; - }, - unbind: function() { - this.bindCount -= 1; - }, - decRef: function() { - if (--this.refCount <= 0) { - destroy(this); - } - } - }); - function createTexture2D(a4, b10) { - var texture = new REGLTexture(GL_TEXTURE_2D$1); - textureSet[texture.id] = texture; - stats2.textureCount++; - function reglTexture2D(a5, b11) { - var texInfo = texture.texInfo; - TexInfo.call(texInfo); - var mipData = allocMipMap(); - if (typeof a5 === "number") { - if (typeof b11 === "number") { - parseMipMapFromShape(mipData, a5 | 0, b11 | 0); - } else { - parseMipMapFromShape(mipData, a5 | 0, a5 | 0); - } - } else if (a5) { - check$1.type(a5, "object", "invalid arguments to regl.texture"); - parseTexInfo(texInfo, a5); - parseMipMapFromObject(mipData, a5); - } else { - parseMipMapFromShape(mipData, 1, 1); - } - if (texInfo.genMipmaps) { - mipData.mipmask = (mipData.width << 1) - 1; - } - texture.mipmask = mipData.mipmask; - copyFlags(texture, mipData); - check$1.texture2D(texInfo, mipData, limits); - texture.internalformat = mipData.internalformat; - reglTexture2D.width = mipData.width; - reglTexture2D.height = mipData.height; - tempBind(texture); - setMipMap(mipData, GL_TEXTURE_2D$1); - setTexInfo(texInfo, GL_TEXTURE_2D$1); - tempRestore(); - freeMipMap(mipData); - if (config.profile) { - texture.stats.size = getTextureSize(texture.internalformat, texture.type, mipData.width, mipData.height, texInfo.genMipmaps, false); - } - reglTexture2D.format = textureFormatsInvert[texture.internalformat]; - reglTexture2D.type = textureTypesInvert[texture.type]; - reglTexture2D.mag = magFiltersInvert[texInfo.magFilter]; - reglTexture2D.min = minFiltersInvert[texInfo.minFilter]; - reglTexture2D.wrapS = wrapModesInvert[texInfo.wrapS]; - reglTexture2D.wrapT = wrapModesInvert[texInfo.wrapT]; - return reglTexture2D; - } - function subimage(image, x_, y_, level_) { - check$1(!!image, "must specify image data"); - var x6 = x_ | 0; - var y5 = y_ | 0; - var level = level_ | 0; - var imageData = allocImage(); - copyFlags(imageData, texture); - imageData.width = 0; - imageData.height = 0; - parseImage(imageData, image); - imageData.width = imageData.width || (texture.width >> level) - x6; - imageData.height = imageData.height || (texture.height >> level) - y5; - check$1(texture.type === imageData.type && texture.format === imageData.format && texture.internalformat === imageData.internalformat, "incompatible format for texture.subimage"); - check$1(x6 >= 0 && y5 >= 0 && x6 + imageData.width <= texture.width && y5 + imageData.height <= texture.height, "texture.subimage write out of bounds"); - check$1(texture.mipmask & 1 << level, "missing mipmap data"); - check$1(imageData.data || imageData.element || imageData.needsCopy, "missing image data"); - tempBind(texture); - setSubImage(imageData, GL_TEXTURE_2D$1, x6, y5, level); - tempRestore(); - freeImage(imageData); - return reglTexture2D; - } - function resize(w_, h_) { - var w4 = w_ | 0; - var h3 = h_ | 0 || w4; - if (w4 === texture.width && h3 === texture.height) { - return reglTexture2D; - } - reglTexture2D.width = texture.width = w4; - reglTexture2D.height = texture.height = h3; - tempBind(texture); - for (var i4 = 0; texture.mipmask >> i4; ++i4) { - var _w = w4 >> i4; - var _h = h3 >> i4; - if (!_w || !_h) - break; - gl2.texImage2D(GL_TEXTURE_2D$1, i4, texture.format, _w, _h, 0, texture.format, texture.type, null); - } - tempRestore(); - if (config.profile) { - texture.stats.size = getTextureSize(texture.internalformat, texture.type, w4, h3, false, false); - } - return reglTexture2D; - } - reglTexture2D(a4, b10); - reglTexture2D.subimage = subimage; - reglTexture2D.resize = resize; - reglTexture2D._reglType = "texture2d"; - reglTexture2D._texture = texture; - if (config.profile) { - reglTexture2D.stats = texture.stats; - } - reglTexture2D.destroy = function() { - texture.decRef(); - }; - return reglTexture2D; - } - function createTextureCube(a0, a1, a22, a32, a4, a5) { - var texture = new REGLTexture(GL_TEXTURE_CUBE_MAP$1); - textureSet[texture.id] = texture; - stats2.cubeCount++; - var faces = new Array(6); - function reglTextureCube(a02, a12, a23, a33, a42, a52) { - var i4; - var texInfo = texture.texInfo; - TexInfo.call(texInfo); - for (i4 = 0; i4 < 6; ++i4) { - faces[i4] = allocMipMap(); - } - if (typeof a02 === "number" || !a02) { - var s4 = a02 | 0 || 1; - for (i4 = 0; i4 < 6; ++i4) { - parseMipMapFromShape(faces[i4], s4, s4); - } - } else if (typeof a02 === "object") { - if (a12) { - parseMipMapFromObject(faces[0], a02); - parseMipMapFromObject(faces[1], a12); - parseMipMapFromObject(faces[2], a23); - parseMipMapFromObject(faces[3], a33); - parseMipMapFromObject(faces[4], a42); - parseMipMapFromObject(faces[5], a52); - } else { - parseTexInfo(texInfo, a02); - parseFlags2(texture, a02); - if ("faces" in a02) { - var faceInput = a02.faces; - check$1(Array.isArray(faceInput) && faceInput.length === 6, "cube faces must be a length 6 array"); - for (i4 = 0; i4 < 6; ++i4) { - check$1(typeof faceInput[i4] === "object" && !!faceInput[i4], "invalid input for cube map face"); - copyFlags(faces[i4], texture); - parseMipMapFromObject(faces[i4], faceInput[i4]); - } - } else { - for (i4 = 0; i4 < 6; ++i4) { - parseMipMapFromObject(faces[i4], a02); - } - } - } - } else { - check$1.raise("invalid arguments to cube map"); - } - copyFlags(texture, faces[0]); - if (!limits.npotTextureCube) { - check$1(isPow2$1(texture.width) && isPow2$1(texture.height), "your browser does not support non power or two texture dimensions"); - } - if (texInfo.genMipmaps) { - texture.mipmask = (faces[0].width << 1) - 1; - } else { - texture.mipmask = faces[0].mipmask; - } - check$1.textureCube(texture, texInfo, faces, limits); - texture.internalformat = faces[0].internalformat; - reglTextureCube.width = faces[0].width; - reglTextureCube.height = faces[0].height; - tempBind(texture); - for (i4 = 0; i4 < 6; ++i4) { - setMipMap(faces[i4], GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 + i4); - } - setTexInfo(texInfo, GL_TEXTURE_CUBE_MAP$1); - tempRestore(); - if (config.profile) { - texture.stats.size = getTextureSize(texture.internalformat, texture.type, reglTextureCube.width, reglTextureCube.height, texInfo.genMipmaps, true); - } - reglTextureCube.format = textureFormatsInvert[texture.internalformat]; - reglTextureCube.type = textureTypesInvert[texture.type]; - reglTextureCube.mag = magFiltersInvert[texInfo.magFilter]; - reglTextureCube.min = minFiltersInvert[texInfo.minFilter]; - reglTextureCube.wrapS = wrapModesInvert[texInfo.wrapS]; - reglTextureCube.wrapT = wrapModesInvert[texInfo.wrapT]; - for (i4 = 0; i4 < 6; ++i4) { - freeMipMap(faces[i4]); - } - return reglTextureCube; - } - function subimage(face, image, x_, y_, level_) { - check$1(!!image, "must specify image data"); - check$1(typeof face === "number" && face === (face | 0) && face >= 0 && face < 6, "invalid face"); - var x6 = x_ | 0; - var y5 = y_ | 0; - var level = level_ | 0; - var imageData = allocImage(); - copyFlags(imageData, texture); - imageData.width = 0; - imageData.height = 0; - parseImage(imageData, image); - imageData.width = imageData.width || (texture.width >> level) - x6; - imageData.height = imageData.height || (texture.height >> level) - y5; - check$1(texture.type === imageData.type && texture.format === imageData.format && texture.internalformat === imageData.internalformat, "incompatible format for texture.subimage"); - check$1(x6 >= 0 && y5 >= 0 && x6 + imageData.width <= texture.width && y5 + imageData.height <= texture.height, "texture.subimage write out of bounds"); - check$1(texture.mipmask & 1 << level, "missing mipmap data"); - check$1(imageData.data || imageData.element || imageData.needsCopy, "missing image data"); - tempBind(texture); - setSubImage(imageData, GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 + face, x6, y5, level); - tempRestore(); - freeImage(imageData); - return reglTextureCube; - } - function resize(radius_) { - var radius = radius_ | 0; - if (radius === texture.width) { - return; - } - reglTextureCube.width = texture.width = radius; - reglTextureCube.height = texture.height = radius; - tempBind(texture); - for (var i4 = 0; i4 < 6; ++i4) { - for (var j4 = 0; texture.mipmask >> j4; ++j4) { - gl2.texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 + i4, j4, texture.format, radius >> j4, radius >> j4, 0, texture.format, texture.type, null); - } - } - tempRestore(); - if (config.profile) { - texture.stats.size = getTextureSize(texture.internalformat, texture.type, reglTextureCube.width, reglTextureCube.height, false, true); - } - return reglTextureCube; - } - reglTextureCube(a0, a1, a22, a32, a4, a5); - reglTextureCube.subimage = subimage; - reglTextureCube.resize = resize; - reglTextureCube._reglType = "textureCube"; - reglTextureCube._texture = texture; - if (config.profile) { - reglTextureCube.stats = texture.stats; - } - reglTextureCube.destroy = function() { - texture.decRef(); - }; - return reglTextureCube; - } - function destroyTextures() { - for (var i4 = 0; i4 < numTexUnits; ++i4) { - gl2.activeTexture(GL_TEXTURE0$1 + i4); - gl2.bindTexture(GL_TEXTURE_2D$1, null); - textureUnits[i4] = null; - } - values4(textureSet).forEach(destroy); - stats2.cubeCount = 0; - stats2.textureCount = 0; - } - if (config.profile) { - stats2.getTotalTextureSize = function() { - var total = 0; - Object.keys(textureSet).forEach(function(key) { - total += textureSet[key].stats.size; - }); - return total; - }; - } - function restoreTextures() { - for (var i4 = 0; i4 < numTexUnits; ++i4) { - var tex = textureUnits[i4]; - if (tex) { - tex.bindCount = 0; - tex.unit = -1; - textureUnits[i4] = null; - } - } - values4(textureSet).forEach(function(texture) { - texture.texture = gl2.createTexture(); - gl2.bindTexture(texture.target, texture.texture); - for (var i5 = 0; i5 < 32; ++i5) { - if ((texture.mipmask & 1 << i5) === 0) { - continue; - } - if (texture.target === GL_TEXTURE_2D$1) { - gl2.texImage2D(GL_TEXTURE_2D$1, i5, texture.internalformat, texture.width >> i5, texture.height >> i5, 0, texture.internalformat, texture.type, null); - } else { - for (var j4 = 0; j4 < 6; ++j4) { - gl2.texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 + j4, i5, texture.internalformat, texture.width >> i5, texture.height >> i5, 0, texture.internalformat, texture.type, null); - } - } - } - setTexInfo(texture.texInfo, texture.target); - }); - } - function refreshTextures() { - for (var i4 = 0; i4 < numTexUnits; ++i4) { - var tex = textureUnits[i4]; - if (tex) { - tex.bindCount = 0; - tex.unit = -1; - textureUnits[i4] = null; - } - gl2.activeTexture(GL_TEXTURE0$1 + i4); - gl2.bindTexture(GL_TEXTURE_2D$1, null); - gl2.bindTexture(GL_TEXTURE_CUBE_MAP$1, null); - } - } - return { - create2D: createTexture2D, - createCube: createTextureCube, - clear: destroyTextures, - getTexture: function(wrapper) { - return null; - }, - restore: restoreTextures, - refresh: refreshTextures - }; - } - var GL_RENDERBUFFER = 36161; - var GL_RGBA4$1 = 32854; - var GL_RGB5_A1$1 = 32855; - var GL_RGB565$1 = 36194; - var GL_DEPTH_COMPONENT16 = 33189; - var GL_STENCIL_INDEX8 = 36168; - var GL_DEPTH_STENCIL$1 = 34041; - var GL_SRGB8_ALPHA8_EXT = 35907; - var GL_RGBA32F_EXT = 34836; - var GL_RGBA16F_EXT = 34842; - var GL_RGB16F_EXT = 34843; - var FORMAT_SIZES = []; - FORMAT_SIZES[GL_RGBA4$1] = 2; - FORMAT_SIZES[GL_RGB5_A1$1] = 2; - FORMAT_SIZES[GL_RGB565$1] = 2; - FORMAT_SIZES[GL_DEPTH_COMPONENT16] = 2; - FORMAT_SIZES[GL_STENCIL_INDEX8] = 1; - FORMAT_SIZES[GL_DEPTH_STENCIL$1] = 4; - FORMAT_SIZES[GL_SRGB8_ALPHA8_EXT] = 4; - FORMAT_SIZES[GL_RGBA32F_EXT] = 16; - FORMAT_SIZES[GL_RGBA16F_EXT] = 8; - FORMAT_SIZES[GL_RGB16F_EXT] = 6; - function getRenderbufferSize(format2, width2, height) { - return FORMAT_SIZES[format2] * width2 * height; - } - var wrapRenderbuffers = function(gl2, extensions, limits, stats2, config) { - var formatTypes = { - "rgba4": GL_RGBA4$1, - "rgb565": GL_RGB565$1, - "rgb5 a1": GL_RGB5_A1$1, - "depth": GL_DEPTH_COMPONENT16, - "stencil": GL_STENCIL_INDEX8, - "depth stencil": GL_DEPTH_STENCIL$1 - }; - if (extensions.ext_srgb) { - formatTypes["srgba"] = GL_SRGB8_ALPHA8_EXT; - } - if (extensions.ext_color_buffer_half_float) { - formatTypes["rgba16f"] = GL_RGBA16F_EXT; - formatTypes["rgb16f"] = GL_RGB16F_EXT; - } - if (extensions.webgl_color_buffer_float) { - formatTypes["rgba32f"] = GL_RGBA32F_EXT; - } - var formatTypesInvert = []; - Object.keys(formatTypes).forEach(function(key) { - var val = formatTypes[key]; - formatTypesInvert[val] = key; - }); - var renderbufferCount = 0; - var renderbufferSet = {}; - function REGLRenderbuffer(renderbuffer) { - this.id = renderbufferCount++; - this.refCount = 1; - this.renderbuffer = renderbuffer; - this.format = GL_RGBA4$1; - this.width = 0; - this.height = 0; - if (config.profile) { - this.stats = { size: 0 }; - } - } - REGLRenderbuffer.prototype.decRef = function() { - if (--this.refCount <= 0) { - destroy(this); - } - }; - function destroy(rb) { - var handle = rb.renderbuffer; - check$1(handle, "must not double destroy renderbuffer"); - gl2.bindRenderbuffer(GL_RENDERBUFFER, null); - gl2.deleteRenderbuffer(handle); - rb.renderbuffer = null; - rb.refCount = 0; - delete renderbufferSet[rb.id]; - stats2.renderbufferCount--; - } - function createRenderbuffer(a4, b10) { - var renderbuffer = new REGLRenderbuffer(gl2.createRenderbuffer()); - renderbufferSet[renderbuffer.id] = renderbuffer; - stats2.renderbufferCount++; - function reglRenderbuffer(a5, b11) { - var w4 = 0; - var h3 = 0; - var format2 = GL_RGBA4$1; - if (typeof a5 === "object" && a5) { - var options = a5; - if ("shape" in options) { - var shape = options.shape; - check$1(Array.isArray(shape) && shape.length >= 2, "invalid renderbuffer shape"); - w4 = shape[0] | 0; - h3 = shape[1] | 0; - } else { - if ("radius" in options) { - w4 = h3 = options.radius | 0; - } - if ("width" in options) { - w4 = options.width | 0; - } - if ("height" in options) { - h3 = options.height | 0; - } - } - if ("format" in options) { - check$1.parameter(options.format, formatTypes, "invalid renderbuffer format"); - format2 = formatTypes[options.format]; - } - } else if (typeof a5 === "number") { - w4 = a5 | 0; - if (typeof b11 === "number") { - h3 = b11 | 0; - } else { - h3 = w4; - } - } else if (!a5) { - w4 = h3 = 1; - } else { - check$1.raise("invalid arguments to renderbuffer constructor"); - } - check$1(w4 > 0 && h3 > 0 && w4 <= limits.maxRenderbufferSize && h3 <= limits.maxRenderbufferSize, "invalid renderbuffer size"); - if (w4 === renderbuffer.width && h3 === renderbuffer.height && format2 === renderbuffer.format) { - return; - } - reglRenderbuffer.width = renderbuffer.width = w4; - reglRenderbuffer.height = renderbuffer.height = h3; - renderbuffer.format = format2; - gl2.bindRenderbuffer(GL_RENDERBUFFER, renderbuffer.renderbuffer); - gl2.renderbufferStorage(GL_RENDERBUFFER, format2, w4, h3); - check$1(gl2.getError() === 0, "invalid render buffer format"); - if (config.profile) { - renderbuffer.stats.size = getRenderbufferSize(renderbuffer.format, renderbuffer.width, renderbuffer.height); - } - reglRenderbuffer.format = formatTypesInvert[renderbuffer.format]; - return reglRenderbuffer; - } - function resize(w_, h_) { - var w4 = w_ | 0; - var h3 = h_ | 0 || w4; - if (w4 === renderbuffer.width && h3 === renderbuffer.height) { - return reglRenderbuffer; - } - check$1(w4 > 0 && h3 > 0 && w4 <= limits.maxRenderbufferSize && h3 <= limits.maxRenderbufferSize, "invalid renderbuffer size"); - reglRenderbuffer.width = renderbuffer.width = w4; - reglRenderbuffer.height = renderbuffer.height = h3; - gl2.bindRenderbuffer(GL_RENDERBUFFER, renderbuffer.renderbuffer); - gl2.renderbufferStorage(GL_RENDERBUFFER, renderbuffer.format, w4, h3); - check$1(gl2.getError() === 0, "invalid render buffer format"); - if (config.profile) { - renderbuffer.stats.size = getRenderbufferSize(renderbuffer.format, renderbuffer.width, renderbuffer.height); - } - return reglRenderbuffer; - } - reglRenderbuffer(a4, b10); - reglRenderbuffer.resize = resize; - reglRenderbuffer._reglType = "renderbuffer"; - reglRenderbuffer._renderbuffer = renderbuffer; - if (config.profile) { - reglRenderbuffer.stats = renderbuffer.stats; - } - reglRenderbuffer.destroy = function() { - renderbuffer.decRef(); - }; - return reglRenderbuffer; - } - if (config.profile) { - stats2.getTotalRenderbufferSize = function() { - var total = 0; - Object.keys(renderbufferSet).forEach(function(key) { - total += renderbufferSet[key].stats.size; - }); - return total; - }; - } - function restoreRenderbuffers() { - values4(renderbufferSet).forEach(function(rb) { - rb.renderbuffer = gl2.createRenderbuffer(); - gl2.bindRenderbuffer(GL_RENDERBUFFER, rb.renderbuffer); - gl2.renderbufferStorage(GL_RENDERBUFFER, rb.format, rb.width, rb.height); - }); - gl2.bindRenderbuffer(GL_RENDERBUFFER, null); - } - return { - create: createRenderbuffer, - clear: function() { - values4(renderbufferSet).forEach(destroy); - }, - restore: restoreRenderbuffers - }; - }; - var GL_FRAMEBUFFER$1 = 36160; - var GL_RENDERBUFFER$1 = 36161; - var GL_TEXTURE_2D$2 = 3553; - var GL_TEXTURE_CUBE_MAP_POSITIVE_X$2 = 34069; - var GL_COLOR_ATTACHMENT0$1 = 36064; - var GL_DEPTH_ATTACHMENT = 36096; - var GL_STENCIL_ATTACHMENT = 36128; - var GL_DEPTH_STENCIL_ATTACHMENT = 33306; - var GL_FRAMEBUFFER_COMPLETE$1 = 36053; - var GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 36054; - var GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 36055; - var GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 36057; - var GL_FRAMEBUFFER_UNSUPPORTED = 36061; - var GL_HALF_FLOAT_OES$2 = 36193; - var GL_UNSIGNED_BYTE$6 = 5121; - var GL_FLOAT$5 = 5126; - var GL_RGB$1 = 6407; - var GL_RGBA$2 = 6408; - var GL_DEPTH_COMPONENT$1 = 6402; - var colorTextureFormatEnums = [ - GL_RGB$1, - GL_RGBA$2 - ]; - var textureFormatChannels = []; - textureFormatChannels[GL_RGBA$2] = 4; - textureFormatChannels[GL_RGB$1] = 3; - var textureTypeSizes = []; - textureTypeSizes[GL_UNSIGNED_BYTE$6] = 1; - textureTypeSizes[GL_FLOAT$5] = 4; - textureTypeSizes[GL_HALF_FLOAT_OES$2] = 2; - var GL_RGBA4$2 = 32854; - var GL_RGB5_A1$2 = 32855; - var GL_RGB565$2 = 36194; - var GL_DEPTH_COMPONENT16$1 = 33189; - var GL_STENCIL_INDEX8$1 = 36168; - var GL_DEPTH_STENCIL$2 = 34041; - var GL_SRGB8_ALPHA8_EXT$1 = 35907; - var GL_RGBA32F_EXT$1 = 34836; - var GL_RGBA16F_EXT$1 = 34842; - var GL_RGB16F_EXT$1 = 34843; - var colorRenderbufferFormatEnums = [ - GL_RGBA4$2, - GL_RGB5_A1$2, - GL_RGB565$2, - GL_SRGB8_ALPHA8_EXT$1, - GL_RGBA16F_EXT$1, - GL_RGB16F_EXT$1, - GL_RGBA32F_EXT$1 - ]; - var statusCode = {}; - statusCode[GL_FRAMEBUFFER_COMPLETE$1] = "complete"; - statusCode[GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT] = "incomplete attachment"; - statusCode[GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS] = "incomplete dimensions"; - statusCode[GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT] = "incomplete, missing attachment"; - statusCode[GL_FRAMEBUFFER_UNSUPPORTED] = "unsupported"; - function wrapFBOState(gl2, extensions, limits, textureState, renderbufferState, stats2) { - var framebufferState = { - cur: null, - next: null, - dirty: false, - setFBO: null - }; - var colorTextureFormats = ["rgba"]; - var colorRenderbufferFormats = ["rgba4", "rgb565", "rgb5 a1"]; - if (extensions.ext_srgb) { - colorRenderbufferFormats.push("srgba"); - } - if (extensions.ext_color_buffer_half_float) { - colorRenderbufferFormats.push("rgba16f", "rgb16f"); - } - if (extensions.webgl_color_buffer_float) { - colorRenderbufferFormats.push("rgba32f"); - } - var colorTypes = ["uint8"]; - if (extensions.oes_texture_half_float) { - colorTypes.push("half float", "float16"); - } - if (extensions.oes_texture_float) { - colorTypes.push("float", "float32"); - } - function FramebufferAttachment(target, texture, renderbuffer) { - this.target = target; - this.texture = texture; - this.renderbuffer = renderbuffer; - var w4 = 0; - var h3 = 0; - if (texture) { - w4 = texture.width; - h3 = texture.height; - } else if (renderbuffer) { - w4 = renderbuffer.width; - h3 = renderbuffer.height; - } - this.width = w4; - this.height = h3; - } - function decRef(attachment) { - if (attachment) { - if (attachment.texture) { - attachment.texture._texture.decRef(); - } - if (attachment.renderbuffer) { - attachment.renderbuffer._renderbuffer.decRef(); - } - } - } - function incRefAndCheckShape(attachment, width2, height) { - if (!attachment) { - return; - } - if (attachment.texture) { - var texture = attachment.texture._texture; - var tw = Math.max(1, texture.width); - var th = Math.max(1, texture.height); - check$1(tw === width2 && th === height, "inconsistent width/height for supplied texture"); - texture.refCount += 1; - } else { - var renderbuffer = attachment.renderbuffer._renderbuffer; - check$1(renderbuffer.width === width2 && renderbuffer.height === height, "inconsistent width/height for renderbuffer"); - renderbuffer.refCount += 1; - } - } - function attach(location, attachment) { - if (attachment) { - if (attachment.texture) { - gl2.framebufferTexture2D(GL_FRAMEBUFFER$1, location, attachment.target, attachment.texture._texture.texture, 0); - } else { - gl2.framebufferRenderbuffer(GL_FRAMEBUFFER$1, location, GL_RENDERBUFFER$1, attachment.renderbuffer._renderbuffer.renderbuffer); - } - } - } - function parseAttachment(attachment) { - var target = GL_TEXTURE_2D$2; - var texture = null; - var renderbuffer = null; - var data3 = attachment; - if (typeof attachment === "object") { - data3 = attachment.data; - if ("target" in attachment) { - target = attachment.target | 0; - } - } - check$1.type(data3, "function", "invalid attachment data"); - var type2 = data3._reglType; - if (type2 === "texture2d") { - texture = data3; - check$1(target === GL_TEXTURE_2D$2); - } else if (type2 === "textureCube") { - texture = data3; - check$1(target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X$2 && target < GL_TEXTURE_CUBE_MAP_POSITIVE_X$2 + 6, "invalid cube map target"); - } else if (type2 === "renderbuffer") { - renderbuffer = data3; - target = GL_RENDERBUFFER$1; - } else { - check$1.raise("invalid regl object for attachment"); - } - return new FramebufferAttachment(target, texture, renderbuffer); - } - function allocAttachment(width2, height, isTexture, format2, type2) { - if (isTexture) { - var texture = textureState.create2D({ - width: width2, - height, - format: format2, - type: type2 - }); - texture._texture.refCount = 0; - return new FramebufferAttachment(GL_TEXTURE_2D$2, texture, null); - } else { - var rb = renderbufferState.create({ - width: width2, - height, - format: format2 - }); - rb._renderbuffer.refCount = 0; - return new FramebufferAttachment(GL_RENDERBUFFER$1, null, rb); - } - } - function unwrapAttachment(attachment) { - return attachment && (attachment.texture || attachment.renderbuffer); - } - function resizeAttachment(attachment, w4, h3) { - if (attachment) { - if (attachment.texture) { - attachment.texture.resize(w4, h3); - } else if (attachment.renderbuffer) { - attachment.renderbuffer.resize(w4, h3); - } - attachment.width = w4; - attachment.height = h3; - } - } - var framebufferCount = 0; - var framebufferSet = {}; - function REGLFramebuffer() { - this.id = framebufferCount++; - framebufferSet[this.id] = this; - this.framebuffer = gl2.createFramebuffer(); - this.width = 0; - this.height = 0; - this.colorAttachments = []; - this.depthAttachment = null; - this.stencilAttachment = null; - this.depthStencilAttachment = null; - } - function decFBORefs(framebuffer) { - framebuffer.colorAttachments.forEach(decRef); - decRef(framebuffer.depthAttachment); - decRef(framebuffer.stencilAttachment); - decRef(framebuffer.depthStencilAttachment); - } - function destroy(framebuffer) { - var handle = framebuffer.framebuffer; - check$1(handle, "must not double destroy framebuffer"); - gl2.deleteFramebuffer(handle); - framebuffer.framebuffer = null; - stats2.framebufferCount--; - delete framebufferSet[framebuffer.id]; - } - function updateFramebuffer(framebuffer) { - var i4; - gl2.bindFramebuffer(GL_FRAMEBUFFER$1, framebuffer.framebuffer); - var colorAttachments = framebuffer.colorAttachments; - for (i4 = 0; i4 < colorAttachments.length; ++i4) { - attach(GL_COLOR_ATTACHMENT0$1 + i4, colorAttachments[i4]); - } - for (i4 = colorAttachments.length; i4 < limits.maxColorAttachments; ++i4) { - gl2.framebufferTexture2D(GL_FRAMEBUFFER$1, GL_COLOR_ATTACHMENT0$1 + i4, GL_TEXTURE_2D$2, null, 0); - } - gl2.framebufferTexture2D(GL_FRAMEBUFFER$1, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D$2, null, 0); - gl2.framebufferTexture2D(GL_FRAMEBUFFER$1, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D$2, null, 0); - gl2.framebufferTexture2D(GL_FRAMEBUFFER$1, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D$2, null, 0); - attach(GL_DEPTH_ATTACHMENT, framebuffer.depthAttachment); - attach(GL_STENCIL_ATTACHMENT, framebuffer.stencilAttachment); - attach(GL_DEPTH_STENCIL_ATTACHMENT, framebuffer.depthStencilAttachment); - var status = gl2.checkFramebufferStatus(GL_FRAMEBUFFER$1); - if (!gl2.isContextLost() && status !== GL_FRAMEBUFFER_COMPLETE$1) { - check$1.raise("framebuffer configuration not supported, status = " + statusCode[status]); - } - gl2.bindFramebuffer(GL_FRAMEBUFFER$1, framebufferState.next ? framebufferState.next.framebuffer : null); - framebufferState.cur = framebufferState.next; - gl2.getError(); - } - function createFBO(a0, a1) { - var framebuffer = new REGLFramebuffer(); - stats2.framebufferCount++; - function reglFramebuffer(a4, b10) { - var i4; - check$1(framebufferState.next !== framebuffer, "can not update framebuffer which is currently in use"); - var width2 = 0; - var height = 0; - var needsDepth = true; - var needsStencil = true; - var colorBuffer = null; - var colorTexture = true; - var colorFormat = "rgba"; - var colorType = "uint8"; - var colorCount = 1; - var depthBuffer = null; - var stencilBuffer = null; - var depthStencilBuffer = null; - var depthStencilTexture = false; - if (typeof a4 === "number") { - width2 = a4 | 0; - height = b10 | 0 || width2; - } else if (!a4) { - width2 = height = 1; - } else { - check$1.type(a4, "object", "invalid arguments for framebuffer"); - var options = a4; - if ("shape" in options) { - var shape = options.shape; - check$1(Array.isArray(shape) && shape.length >= 2, "invalid shape for framebuffer"); - width2 = shape[0]; - height = shape[1]; - } else { - if ("radius" in options) { - width2 = height = options.radius; - } - if ("width" in options) { - width2 = options.width; - } - if ("height" in options) { - height = options.height; - } - } - if ("color" in options || "colors" in options) { - colorBuffer = options.color || options.colors; - if (Array.isArray(colorBuffer)) { - check$1(colorBuffer.length === 1 || extensions.webgl_draw_buffers, "multiple render targets not supported"); - } - } - if (!colorBuffer) { - if ("colorCount" in options) { - colorCount = options.colorCount | 0; - check$1(colorCount > 0, "invalid color buffer count"); - } - if ("colorTexture" in options) { - colorTexture = !!options.colorTexture; - colorFormat = "rgba4"; - } - if ("colorType" in options) { - colorType = options.colorType; - if (!colorTexture) { - if (colorType === "half float" || colorType === "float16") { - check$1(extensions.ext_color_buffer_half_float, "you must enable EXT_color_buffer_half_float to use 16-bit render buffers"); - colorFormat = "rgba16f"; - } else if (colorType === "float" || colorType === "float32") { - check$1(extensions.webgl_color_buffer_float, "you must enable WEBGL_color_buffer_float in order to use 32-bit floating point renderbuffers"); - colorFormat = "rgba32f"; - } - } else { - check$1(extensions.oes_texture_float || !(colorType === "float" || colorType === "float32"), "you must enable OES_texture_float in order to use floating point framebuffer objects"); - check$1(extensions.oes_texture_half_float || !(colorType === "half float" || colorType === "float16"), "you must enable OES_texture_half_float in order to use 16-bit floating point framebuffer objects"); - } - check$1.oneOf(colorType, colorTypes, "invalid color type"); - } - if ("colorFormat" in options) { - colorFormat = options.colorFormat; - if (colorTextureFormats.indexOf(colorFormat) >= 0) { - colorTexture = true; - } else if (colorRenderbufferFormats.indexOf(colorFormat) >= 0) { - colorTexture = false; - } else { - if (colorTexture) { - check$1.oneOf(options.colorFormat, colorTextureFormats, "invalid color format for texture"); - } else { - check$1.oneOf(options.colorFormat, colorRenderbufferFormats, "invalid color format for renderbuffer"); - } - } - } - } - if ("depthTexture" in options || "depthStencilTexture" in options) { - depthStencilTexture = !!(options.depthTexture || options.depthStencilTexture); - check$1(!depthStencilTexture || extensions.webgl_depth_texture, "webgl_depth_texture extension not supported"); - } - if ("depth" in options) { - if (typeof options.depth === "boolean") { - needsDepth = options.depth; - } else { - depthBuffer = options.depth; - needsStencil = false; - } - } - if ("stencil" in options) { - if (typeof options.stencil === "boolean") { - needsStencil = options.stencil; - } else { - stencilBuffer = options.stencil; - needsDepth = false; - } - } - if ("depthStencil" in options) { - if (typeof options.depthStencil === "boolean") { - needsDepth = needsStencil = options.depthStencil; - } else { - depthStencilBuffer = options.depthStencil; - needsDepth = false; - needsStencil = false; - } - } - } - var colorAttachments = null; - var depthAttachment = null; - var stencilAttachment = null; - var depthStencilAttachment = null; - if (Array.isArray(colorBuffer)) { - colorAttachments = colorBuffer.map(parseAttachment); - } else if (colorBuffer) { - colorAttachments = [parseAttachment(colorBuffer)]; - } else { - colorAttachments = new Array(colorCount); - for (i4 = 0; i4 < colorCount; ++i4) { - colorAttachments[i4] = allocAttachment(width2, height, colorTexture, colorFormat, colorType); - } - } - check$1(extensions.webgl_draw_buffers || colorAttachments.length <= 1, "you must enable the WEBGL_draw_buffers extension in order to use multiple color buffers."); - check$1(colorAttachments.length <= limits.maxColorAttachments, "too many color attachments, not supported"); - width2 = width2 || colorAttachments[0].width; - height = height || colorAttachments[0].height; - if (depthBuffer) { - depthAttachment = parseAttachment(depthBuffer); - } else if (needsDepth && !needsStencil) { - depthAttachment = allocAttachment(width2, height, depthStencilTexture, "depth", "uint32"); - } - if (stencilBuffer) { - stencilAttachment = parseAttachment(stencilBuffer); - } else if (needsStencil && !needsDepth) { - stencilAttachment = allocAttachment(width2, height, false, "stencil", "uint8"); - } - if (depthStencilBuffer) { - depthStencilAttachment = parseAttachment(depthStencilBuffer); - } else if (!depthBuffer && !stencilBuffer && needsStencil && needsDepth) { - depthStencilAttachment = allocAttachment(width2, height, depthStencilTexture, "depth stencil", "depth stencil"); - } - check$1(!!depthBuffer + !!stencilBuffer + !!depthStencilBuffer <= 1, "invalid framebuffer configuration, can specify exactly one depth/stencil attachment"); - var commonColorAttachmentSize = null; - for (i4 = 0; i4 < colorAttachments.length; ++i4) { - incRefAndCheckShape(colorAttachments[i4], width2, height); - check$1(!colorAttachments[i4] || colorAttachments[i4].texture && colorTextureFormatEnums.indexOf(colorAttachments[i4].texture._texture.format) >= 0 || colorAttachments[i4].renderbuffer && colorRenderbufferFormatEnums.indexOf(colorAttachments[i4].renderbuffer._renderbuffer.format) >= 0, "framebuffer color attachment " + i4 + " is invalid"); - if (colorAttachments[i4] && colorAttachments[i4].texture) { - var colorAttachmentSize = textureFormatChannels[colorAttachments[i4].texture._texture.format] * textureTypeSizes[colorAttachments[i4].texture._texture.type]; - if (commonColorAttachmentSize === null) { - commonColorAttachmentSize = colorAttachmentSize; - } else { - check$1(commonColorAttachmentSize === colorAttachmentSize, "all color attachments much have the same number of bits per pixel."); - } - } - } - incRefAndCheckShape(depthAttachment, width2, height); - check$1(!depthAttachment || depthAttachment.texture && depthAttachment.texture._texture.format === GL_DEPTH_COMPONENT$1 || depthAttachment.renderbuffer && depthAttachment.renderbuffer._renderbuffer.format === GL_DEPTH_COMPONENT16$1, "invalid depth attachment for framebuffer object"); - incRefAndCheckShape(stencilAttachment, width2, height); - check$1(!stencilAttachment || stencilAttachment.renderbuffer && stencilAttachment.renderbuffer._renderbuffer.format === GL_STENCIL_INDEX8$1, "invalid stencil attachment for framebuffer object"); - incRefAndCheckShape(depthStencilAttachment, width2, height); - check$1(!depthStencilAttachment || depthStencilAttachment.texture && depthStencilAttachment.texture._texture.format === GL_DEPTH_STENCIL$2 || depthStencilAttachment.renderbuffer && depthStencilAttachment.renderbuffer._renderbuffer.format === GL_DEPTH_STENCIL$2, "invalid depth-stencil attachment for framebuffer object"); - decFBORefs(framebuffer); - framebuffer.width = width2; - framebuffer.height = height; - framebuffer.colorAttachments = colorAttachments; - framebuffer.depthAttachment = depthAttachment; - framebuffer.stencilAttachment = stencilAttachment; - framebuffer.depthStencilAttachment = depthStencilAttachment; - reglFramebuffer.color = colorAttachments.map(unwrapAttachment); - reglFramebuffer.depth = unwrapAttachment(depthAttachment); - reglFramebuffer.stencil = unwrapAttachment(stencilAttachment); - reglFramebuffer.depthStencil = unwrapAttachment(depthStencilAttachment); - reglFramebuffer.width = framebuffer.width; - reglFramebuffer.height = framebuffer.height; - updateFramebuffer(framebuffer); - return reglFramebuffer; - } - function resize(w_, h_) { - check$1(framebufferState.next !== framebuffer, "can not resize a framebuffer which is currently in use"); - var w4 = Math.max(w_ | 0, 1); - var h3 = Math.max(h_ | 0 || w4, 1); - if (w4 === framebuffer.width && h3 === framebuffer.height) { - return reglFramebuffer; - } - var colorAttachments = framebuffer.colorAttachments; - for (var i4 = 0; i4 < colorAttachments.length; ++i4) { - resizeAttachment(colorAttachments[i4], w4, h3); - } - resizeAttachment(framebuffer.depthAttachment, w4, h3); - resizeAttachment(framebuffer.stencilAttachment, w4, h3); - resizeAttachment(framebuffer.depthStencilAttachment, w4, h3); - framebuffer.width = reglFramebuffer.width = w4; - framebuffer.height = reglFramebuffer.height = h3; - updateFramebuffer(framebuffer); - return reglFramebuffer; - } - reglFramebuffer(a0, a1); - return extend4(reglFramebuffer, { - resize, - _reglType: "framebuffer", - _framebuffer: framebuffer, - destroy: function() { - destroy(framebuffer); - decFBORefs(framebuffer); - }, - use: function(block) { - framebufferState.setFBO({ - framebuffer: reglFramebuffer - }, block); - } - }); - } - function createCubeFBO(options) { - var faces = Array(6); - function reglFramebufferCube(a4) { - var i4; - check$1(faces.indexOf(framebufferState.next) < 0, "can not update framebuffer which is currently in use"); - var params = { - color: null - }; - var radius = 0; - var colorBuffer = null; - var colorFormat = "rgba"; - var colorType = "uint8"; - var colorCount = 1; - if (typeof a4 === "number") { - radius = a4 | 0; - } else if (!a4) { - radius = 1; - } else { - check$1.type(a4, "object", "invalid arguments for framebuffer"); - var options2 = a4; - if ("shape" in options2) { - var shape = options2.shape; - check$1(Array.isArray(shape) && shape.length >= 2, "invalid shape for framebuffer"); - check$1(shape[0] === shape[1], "cube framebuffer must be square"); - radius = shape[0]; - } else { - if ("radius" in options2) { - radius = options2.radius | 0; - } - if ("width" in options2) { - radius = options2.width | 0; - if ("height" in options2) { - check$1(options2.height === radius, "must be square"); - } - } else if ("height" in options2) { - radius = options2.height | 0; - } - } - if ("color" in options2 || "colors" in options2) { - colorBuffer = options2.color || options2.colors; - if (Array.isArray(colorBuffer)) { - check$1(colorBuffer.length === 1 || extensions.webgl_draw_buffers, "multiple render targets not supported"); - } - } - if (!colorBuffer) { - if ("colorCount" in options2) { - colorCount = options2.colorCount | 0; - check$1(colorCount > 0, "invalid color buffer count"); - } - if ("colorType" in options2) { - check$1.oneOf(options2.colorType, colorTypes, "invalid color type"); - colorType = options2.colorType; - } - if ("colorFormat" in options2) { - colorFormat = options2.colorFormat; - check$1.oneOf(options2.colorFormat, colorTextureFormats, "invalid color format for texture"); - } - } - if ("depth" in options2) { - params.depth = options2.depth; - } - if ("stencil" in options2) { - params.stencil = options2.stencil; - } - if ("depthStencil" in options2) { - params.depthStencil = options2.depthStencil; - } - } - var colorCubes; - if (colorBuffer) { - if (Array.isArray(colorBuffer)) { - colorCubes = []; - for (i4 = 0; i4 < colorBuffer.length; ++i4) { - colorCubes[i4] = colorBuffer[i4]; - } - } else { - colorCubes = [colorBuffer]; - } - } else { - colorCubes = Array(colorCount); - var cubeMapParams = { - radius, - format: colorFormat, - type: colorType - }; - for (i4 = 0; i4 < colorCount; ++i4) { - colorCubes[i4] = textureState.createCube(cubeMapParams); - } - } - params.color = Array(colorCubes.length); - for (i4 = 0; i4 < colorCubes.length; ++i4) { - var cube = colorCubes[i4]; - check$1(typeof cube === "function" && cube._reglType === "textureCube", "invalid cube map"); - radius = radius || cube.width; - check$1(cube.width === radius && cube.height === radius, "invalid cube map shape"); - params.color[i4] = { - target: GL_TEXTURE_CUBE_MAP_POSITIVE_X$2, - data: colorCubes[i4] - }; - } - for (i4 = 0; i4 < 6; ++i4) { - for (var j4 = 0; j4 < colorCubes.length; ++j4) { - params.color[j4].target = GL_TEXTURE_CUBE_MAP_POSITIVE_X$2 + i4; - } - if (i4 > 0) { - params.depth = faces[0].depth; - params.stencil = faces[0].stencil; - params.depthStencil = faces[0].depthStencil; - } - if (faces[i4]) { - faces[i4](params); - } else { - faces[i4] = createFBO(params); - } - } - return extend4(reglFramebufferCube, { - width: radius, - height: radius, - color: colorCubes - }); - } - function resize(radius_) { - var i4; - var radius = radius_ | 0; - check$1(radius > 0 && radius <= limits.maxCubeMapSize, "invalid radius for cube fbo"); - if (radius === reglFramebufferCube.width) { - return reglFramebufferCube; - } - var colors = reglFramebufferCube.color; - for (i4 = 0; i4 < colors.length; ++i4) { - colors[i4].resize(radius); - } - for (i4 = 0; i4 < 6; ++i4) { - faces[i4].resize(radius); - } - reglFramebufferCube.width = reglFramebufferCube.height = radius; - return reglFramebufferCube; - } - reglFramebufferCube(options); - return extend4(reglFramebufferCube, { - faces, - resize, - _reglType: "framebufferCube", - destroy: function() { - faces.forEach(function(f3) { - f3.destroy(); - }); - } - }); - } - function restoreFramebuffers() { - framebufferState.cur = null; - framebufferState.next = null; - framebufferState.dirty = true; - values4(framebufferSet).forEach(function(fb) { - fb.framebuffer = gl2.createFramebuffer(); - updateFramebuffer(fb); - }); - } - return extend4(framebufferState, { - getFramebuffer: function(object) { - if (typeof object === "function" && object._reglType === "framebuffer") { - var fbo = object._framebuffer; - if (fbo instanceof REGLFramebuffer) { - return fbo; - } - } - return null; - }, - create: createFBO, - createCube: createCubeFBO, - clear: function() { - values4(framebufferSet).forEach(destroy); - }, - restore: restoreFramebuffers - }); - } - var GL_FLOAT$6 = 5126; - var GL_ARRAY_BUFFER$1 = 34962; - function AttributeRecord() { - this.state = 0; - this.x = 0; - this.y = 0; - this.z = 0; - this.w = 0; - this.buffer = null; - this.size = 0; - this.normalized = false; - this.type = GL_FLOAT$6; - this.offset = 0; - this.stride = 0; - this.divisor = 0; - } - function wrapAttributeState(gl2, extensions, limits, stats2, bufferState) { - var NUM_ATTRIBUTES = limits.maxAttributes; - var attributeBindings = new Array(NUM_ATTRIBUTES); - for (var i4 = 0; i4 < NUM_ATTRIBUTES; ++i4) { - attributeBindings[i4] = new AttributeRecord(); - } - var vaoCount = 0; - var vaoSet = {}; - var state2 = { - Record: AttributeRecord, - scope: {}, - state: attributeBindings, - currentVAO: null, - targetVAO: null, - restore: extVAO() ? restoreVAO : function() { - }, - createVAO, - getVAO, - destroyBuffer, - setVAO: extVAO() ? setVAOEXT : setVAOEmulated, - clear: extVAO() ? destroyVAOEXT : function() { - } - }; - function destroyBuffer(buffer) { - for (var i5 = 0; i5 < attributeBindings.length; ++i5) { - var record = attributeBindings[i5]; - if (record.buffer === buffer) { - gl2.disableVertexAttribArray(i5); - record.buffer = null; - } - } - } - function extVAO() { - return extensions.oes_vertex_array_object; - } - function extInstanced() { - return extensions.angle_instanced_arrays; - } - function getVAO(vao) { - if (typeof vao === "function" && vao._vao) { - return vao._vao; - } - return null; - } - function setVAOEXT(vao) { - if (vao === state2.currentVAO) { - return; - } - var ext = extVAO(); - if (vao) { - ext.bindVertexArrayOES(vao.vao); - } else { - ext.bindVertexArrayOES(null); - } - state2.currentVAO = vao; - } - function setVAOEmulated(vao) { - if (vao === state2.currentVAO) { - return; - } - if (vao) { - vao.bindAttrs(); - } else { - var exti = extInstanced(); - for (var i5 = 0; i5 < attributeBindings.length; ++i5) { - var binding = attributeBindings[i5]; - if (binding.buffer) { - gl2.enableVertexAttribArray(i5); - gl2.vertexAttribPointer(i5, binding.size, binding.type, binding.normalized, binding.stride, binding.offfset); - if (exti && binding.divisor) { - exti.vertexAttribDivisorANGLE(i5, binding.divisor); - } - } else { - gl2.disableVertexAttribArray(i5); - gl2.vertexAttrib4f(i5, binding.x, binding.y, binding.z, binding.w); - } - } - } - state2.currentVAO = vao; - } - function destroyVAOEXT() { - values4(vaoSet).forEach(function(vao) { - vao.destroy(); - }); - } - function REGLVAO() { - this.id = ++vaoCount; - this.attributes = []; - var extension = extVAO(); - if (extension) { - this.vao = extension.createVertexArrayOES(); - } else { - this.vao = null; - } - vaoSet[this.id] = this; - this.buffers = []; - } - REGLVAO.prototype.bindAttrs = function() { - var exti = extInstanced(); - var attributes = this.attributes; - for (var i5 = 0; i5 < attributes.length; ++i5) { - var attr = attributes[i5]; - if (attr.buffer) { - gl2.enableVertexAttribArray(i5); - gl2.bindBuffer(GL_ARRAY_BUFFER$1, attr.buffer.buffer); - gl2.vertexAttribPointer(i5, attr.size, attr.type, attr.normalized, attr.stride, attr.offset); - if (exti && attr.divisor) { - exti.vertexAttribDivisorANGLE(i5, attr.divisor); - } - } else { - gl2.disableVertexAttribArray(i5); - gl2.vertexAttrib4f(i5, attr.x, attr.y, attr.z, attr.w); - } - } - for (var j4 = attributes.length; j4 < NUM_ATTRIBUTES; ++j4) { - gl2.disableVertexAttribArray(j4); - } - }; - REGLVAO.prototype.refresh = function() { - var ext = extVAO(); - if (ext) { - ext.bindVertexArrayOES(this.vao); - this.bindAttrs(); - state2.currentVAO = this; - } - }; - REGLVAO.prototype.destroy = function() { - if (this.vao) { - var extension = extVAO(); - if (this === state2.currentVAO) { - state2.currentVAO = null; - extension.bindVertexArrayOES(null); - } - extension.deleteVertexArrayOES(this.vao); - this.vao = null; - } - if (vaoSet[this.id]) { - delete vaoSet[this.id]; - stats2.vaoCount -= 1; - } - }; - function restoreVAO() { - var ext = extVAO(); - if (ext) { - values4(vaoSet).forEach(function(vao) { - vao.refresh(); - }); - } - } - function createVAO(_attr) { - var vao = new REGLVAO(); - stats2.vaoCount += 1; - function updateVAO(attributes) { - check$1(Array.isArray(attributes), "arguments to vertex array constructor must be an array"); - check$1(attributes.length < NUM_ATTRIBUTES, "too many attributes"); - check$1(attributes.length > 0, "must specify at least one attribute"); - var bufUpdated = {}; - var nattributes = vao.attributes; - nattributes.length = attributes.length; - for (var i5 = 0; i5 < attributes.length; ++i5) { - var spec = attributes[i5]; - var rec = nattributes[i5] = new AttributeRecord(); - var data3 = spec.data || spec; - if (Array.isArray(data3) || isTypedArray4(data3) || isNDArrayLike(data3)) { - var buf; - if (vao.buffers[i5]) { - buf = vao.buffers[i5]; - if (isTypedArray4(data3) && buf._buffer.byteLength >= data3.byteLength) { - buf.subdata(data3); - } else { - buf.destroy(); - vao.buffers[i5] = null; - } - } - if (!vao.buffers[i5]) { - buf = vao.buffers[i5] = bufferState.create(spec, GL_ARRAY_BUFFER$1, false, true); - } - rec.buffer = bufferState.getBuffer(buf); - rec.size = rec.buffer.dimension | 0; - rec.normalized = false; - rec.type = rec.buffer.dtype; - rec.offset = 0; - rec.stride = 0; - rec.divisor = 0; - rec.state = 1; - bufUpdated[i5] = 1; - } else if (bufferState.getBuffer(spec)) { - rec.buffer = bufferState.getBuffer(spec); - rec.size = rec.buffer.dimension | 0; - rec.normalized = false; - rec.type = rec.buffer.dtype; - rec.offset = 0; - rec.stride = 0; - rec.divisor = 0; - rec.state = 1; - } else if (bufferState.getBuffer(spec.buffer)) { - rec.buffer = bufferState.getBuffer(spec.buffer); - rec.size = (+spec.size || rec.buffer.dimension) | 0; - rec.normalized = !!spec.normalized || false; - if ("type" in spec) { - check$1.parameter(spec.type, glTypes, "invalid buffer type"); - rec.type = glTypes[spec.type]; - } else { - rec.type = rec.buffer.dtype; - } - rec.offset = (spec.offset || 0) | 0; - rec.stride = (spec.stride || 0) | 0; - rec.divisor = (spec.divisor || 0) | 0; - rec.state = 1; - check$1(rec.size >= 1 && rec.size <= 4, "size must be between 1 and 4"); - check$1(rec.offset >= 0, "invalid offset"); - check$1(rec.stride >= 0 && rec.stride <= 255, "stride must be between 0 and 255"); - check$1(rec.divisor >= 0, "divisor must be positive"); - check$1(!rec.divisor || !!extensions.angle_instanced_arrays, "ANGLE_instanced_arrays must be enabled to use divisor"); - } else if ("x" in spec) { - check$1(i5 > 0, "first attribute must not be a constant"); - rec.x = +spec.x || 0; - rec.y = +spec.y || 0; - rec.z = +spec.z || 0; - rec.w = +spec.w || 0; - rec.state = 2; - } else { - check$1(false, "invalid attribute spec for location " + i5); - } - } - for (var j4 = 0; j4 < vao.buffers.length; ++j4) { - if (!bufUpdated[j4] && vao.buffers[j4]) { - vao.buffers[j4].destroy(); - vao.buffers[j4] = null; - } - } - vao.refresh(); - return updateVAO; - } - updateVAO.destroy = function() { - for (var j4 = 0; j4 < vao.buffers.length; ++j4) { - if (vao.buffers[j4]) { - vao.buffers[j4].destroy(); - } - } - vao.buffers.length = 0; - vao.destroy(); - }; - updateVAO._vao = vao; - updateVAO._reglType = "vao"; - return updateVAO(_attr); - } - return state2; - } - var GL_FRAGMENT_SHADER = 35632; - var GL_VERTEX_SHADER = 35633; - var GL_ACTIVE_UNIFORMS = 35718; - var GL_ACTIVE_ATTRIBUTES = 35721; - function wrapShaderState(gl2, stringStore, stats2, config) { - var fragShaders = {}; - var vertShaders = {}; - function ActiveInfo(name, id, location, info) { - this.name = name; - this.id = id; - this.location = location; - this.info = info; - } - function insertActiveInfo(list, info) { - for (var i4 = 0; i4 < list.length; ++i4) { - if (list[i4].id === info.id) { - list[i4].location = info.location; - return; - } - } - list.push(info); - } - function getShader(type2, id, command) { - var cache3 = type2 === GL_FRAGMENT_SHADER ? fragShaders : vertShaders; - var shader = cache3[id]; - if (!shader) { - var source = stringStore.str(id); - shader = gl2.createShader(type2); - gl2.shaderSource(shader, source); - gl2.compileShader(shader); - check$1.shaderError(gl2, shader, source, type2, command); - cache3[id] = shader; - } - return shader; - } - var programCache = {}; - var programList = []; - var PROGRAM_COUNTER = 0; - function REGLProgram(fragId, vertId) { - this.id = PROGRAM_COUNTER++; - this.fragId = fragId; - this.vertId = vertId; - this.program = null; - this.uniforms = []; - this.attributes = []; - this.refCount = 1; - if (config.profile) { - this.stats = { - uniformsCount: 0, - attributesCount: 0 - }; - } - } - function linkProgram(desc, command, attributeLocations) { - var i4, info; - var fragShader = getShader(GL_FRAGMENT_SHADER, desc.fragId); - var vertShader = getShader(GL_VERTEX_SHADER, desc.vertId); - var program = desc.program = gl2.createProgram(); - gl2.attachShader(program, fragShader); - gl2.attachShader(program, vertShader); - if (attributeLocations) { - for (i4 = 0; i4 < attributeLocations.length; ++i4) { - var binding = attributeLocations[i4]; - gl2.bindAttribLocation(program, binding[0], binding[1]); - } - } - gl2.linkProgram(program); - check$1.linkError(gl2, program, stringStore.str(desc.fragId), stringStore.str(desc.vertId), command); - var numUniforms = gl2.getProgramParameter(program, GL_ACTIVE_UNIFORMS); - if (config.profile) { - desc.stats.uniformsCount = numUniforms; - } - var uniforms = desc.uniforms; - for (i4 = 0; i4 < numUniforms; ++i4) { - info = gl2.getActiveUniform(program, i4); - if (info) { - if (info.size > 1) { - for (var j4 = 0; j4 < info.size; ++j4) { - var name = info.name.replace("[0]", "[" + j4 + "]"); - insertActiveInfo(uniforms, new ActiveInfo(name, stringStore.id(name), gl2.getUniformLocation(program, name), info)); - } - } else { - insertActiveInfo(uniforms, new ActiveInfo(info.name, stringStore.id(info.name), gl2.getUniformLocation(program, info.name), info)); - } - } - } - var numAttributes = gl2.getProgramParameter(program, GL_ACTIVE_ATTRIBUTES); - if (config.profile) { - desc.stats.attributesCount = numAttributes; - } - var attributes = desc.attributes; - for (i4 = 0; i4 < numAttributes; ++i4) { - info = gl2.getActiveAttrib(program, i4); - if (info) { - insertActiveInfo(attributes, new ActiveInfo(info.name, stringStore.id(info.name), gl2.getAttribLocation(program, info.name), info)); - } - } - } - if (config.profile) { - stats2.getMaxUniformsCount = function() { - var m4 = 0; - programList.forEach(function(desc) { - if (desc.stats.uniformsCount > m4) { - m4 = desc.stats.uniformsCount; - } - }); - return m4; - }; - stats2.getMaxAttributesCount = function() { - var m4 = 0; - programList.forEach(function(desc) { - if (desc.stats.attributesCount > m4) { - m4 = desc.stats.attributesCount; - } - }); - return m4; - }; - } - function restoreShaders() { - fragShaders = {}; - vertShaders = {}; - for (var i4 = 0; i4 < programList.length; ++i4) { - linkProgram(programList[i4], null, programList[i4].attributes.map(function(info) { - return [info.location, info.name]; - })); - } - } - return { - clear: function() { - var deleteShader = gl2.deleteShader.bind(gl2); - values4(fragShaders).forEach(deleteShader); - fragShaders = {}; - values4(vertShaders).forEach(deleteShader); - vertShaders = {}; - programList.forEach(function(desc) { - gl2.deleteProgram(desc.program); - }); - programList.length = 0; - programCache = {}; - stats2.shaderCount = 0; - }, - program: function(vertId, fragId, command, attribLocations) { - check$1.command(vertId >= 0, "missing vertex shader", command); - check$1.command(fragId >= 0, "missing fragment shader", command); - var cache3 = programCache[fragId]; - if (!cache3) { - cache3 = programCache[fragId] = {}; - } - var prevProgram = cache3[vertId]; - if (prevProgram) { - prevProgram.refCount++; - if (!attribLocations) { - return prevProgram; - } - } - var program = new REGLProgram(fragId, vertId); - stats2.shaderCount++; - linkProgram(program, command, attribLocations); - if (!prevProgram) { - cache3[vertId] = program; - } - programList.push(program); - return extend4(program, { - destroy: function() { - program.refCount--; - if (program.refCount <= 0) { - gl2.deleteProgram(program.program); - var idx = programList.indexOf(program); - programList.splice(idx, 1); - stats2.shaderCount--; - } - if (cache3[program.vertId].refCount <= 0) { - gl2.deleteShader(vertShaders[program.vertId]); - delete vertShaders[program.vertId]; - delete programCache[program.fragId][program.vertId]; - } - if (!Object.keys(programCache[program.fragId]).length) { - gl2.deleteShader(fragShaders[program.fragId]); - delete fragShaders[program.fragId]; - delete programCache[program.fragId]; - } - } - }); - }, - restore: restoreShaders, - shader: getShader, - frag: -1, - vert: -1 - }; - } - var GL_RGBA$3 = 6408; - var GL_UNSIGNED_BYTE$7 = 5121; - var GL_PACK_ALIGNMENT = 3333; - var GL_FLOAT$7 = 5126; - function wrapReadPixels(gl2, framebufferState, reglPoll, context, glAttributes, extensions, limits) { - function readPixelsImpl(input) { - var type2; - if (framebufferState.next === null) { - check$1(glAttributes.preserveDrawingBuffer, 'you must create a webgl context with "preserveDrawingBuffer":true in order to read pixels from the drawing buffer'); - type2 = GL_UNSIGNED_BYTE$7; - } else { - check$1(framebufferState.next.colorAttachments[0].texture !== null, "You cannot read from a renderbuffer"); - type2 = framebufferState.next.colorAttachments[0].texture._texture.type; - if (extensions.oes_texture_float) { - check$1(type2 === GL_UNSIGNED_BYTE$7 || type2 === GL_FLOAT$7, "Reading from a framebuffer is only allowed for the types 'uint8' and 'float'"); - if (type2 === GL_FLOAT$7) { - check$1(limits.readFloat, "Reading 'float' values is not permitted in your browser. For a fallback, please see: https://www.npmjs.com/package/glsl-read-float"); - } - } else { - check$1(type2 === GL_UNSIGNED_BYTE$7, "Reading from a framebuffer is only allowed for the type 'uint8'"); - } - } - var x6 = 0; - var y5 = 0; - var width2 = context.framebufferWidth; - var height = context.framebufferHeight; - var data3 = null; - if (isTypedArray4(input)) { - data3 = input; - } else if (input) { - check$1.type(input, "object", "invalid arguments to regl.read()"); - x6 = input.x | 0; - y5 = input.y | 0; - check$1(x6 >= 0 && x6 < context.framebufferWidth, "invalid x offset for regl.read"); - check$1(y5 >= 0 && y5 < context.framebufferHeight, "invalid y offset for regl.read"); - width2 = (input.width || context.framebufferWidth - x6) | 0; - height = (input.height || context.framebufferHeight - y5) | 0; - data3 = input.data || null; - } - if (data3) { - if (type2 === GL_UNSIGNED_BYTE$7) { - check$1(data3 instanceof Uint8Array, "buffer must be 'Uint8Array' when reading from a framebuffer of type 'uint8'"); - } else if (type2 === GL_FLOAT$7) { - check$1(data3 instanceof Float32Array, "buffer must be 'Float32Array' when reading from a framebuffer of type 'float'"); - } - } - check$1(width2 > 0 && width2 + x6 <= context.framebufferWidth, "invalid width for read pixels"); - check$1(height > 0 && height + y5 <= context.framebufferHeight, "invalid height for read pixels"); - reglPoll(); - var size14 = width2 * height * 4; - if (!data3) { - if (type2 === GL_UNSIGNED_BYTE$7) { - data3 = new Uint8Array(size14); - } else if (type2 === GL_FLOAT$7) { - data3 = data3 || new Float32Array(size14); - } - } - check$1.isTypedArray(data3, "data buffer for regl.read() must be a typedarray"); - check$1(data3.byteLength >= size14, "data buffer for regl.read() too small"); - gl2.pixelStorei(GL_PACK_ALIGNMENT, 4); - gl2.readPixels(x6, y5, width2, height, GL_RGBA$3, type2, data3); - return data3; - } - function readPixelsFBO(options) { - var result; - framebufferState.setFBO({ - framebuffer: options.framebuffer - }, function() { - result = readPixelsImpl(options); - }); - return result; - } - function readPixels(options) { - if (!options || !("framebuffer" in options)) { - return readPixelsImpl(options); - } else { - return readPixelsFBO(options); - } - } - return readPixels; - } - function slice(x6) { - return Array.prototype.slice.call(x6); - } - function join(x6) { - return slice(x6).join(""); - } - function createEnvironment() { - var varCounter = 0; - var linkedNames = []; - var linkedValues = []; - function link(value2) { - for (var i4 = 0; i4 < linkedValues.length; ++i4) { - if (linkedValues[i4] === value2) { - return linkedNames[i4]; - } - } - var name = "g" + varCounter++; - linkedNames.push(name); - linkedValues.push(value2); - return name; - } - function block() { - var code = []; - function push() { - code.push.apply(code, slice(arguments)); - } - var vars = []; - function def() { - var name = "v" + varCounter++; - vars.push(name); - if (arguments.length > 0) { - code.push(name, "="); - code.push.apply(code, slice(arguments)); - code.push(";"); - } - return name; - } - return extend4(push, { - def, - toString: function() { - return join([ - vars.length > 0 ? "var " + vars.join(",") + ";" : "", - join(code) - ]); - } - }); - } - function scope() { - var entry = block(); - var exit = block(); - var entryToString = entry.toString; - var exitToString = exit.toString; - function save(object, prop) { - exit(object, prop, "=", entry.def(object, prop), ";"); - } - return extend4(function() { - entry.apply(entry, slice(arguments)); - }, { - def: entry.def, - entry, - exit, - save, - set: function(object, prop, value2) { - save(object, prop); - entry(object, prop, "=", value2, ";"); - }, - toString: function() { - return entryToString() + exitToString(); - } - }); - } - function conditional() { - var pred = join(arguments); - var thenBlock = scope(); - var elseBlock = scope(); - var thenToString = thenBlock.toString; - var elseToString = elseBlock.toString; - return extend4(thenBlock, { - then: function() { - thenBlock.apply(thenBlock, slice(arguments)); - return this; - }, - else: function() { - elseBlock.apply(elseBlock, slice(arguments)); - return this; - }, - toString: function() { - var elseClause = elseToString(); - if (elseClause) { - elseClause = "else{" + elseClause + "}"; - } - return join([ - "if(", - pred, - "){", - thenToString(), - "}", - elseClause - ]); - } - }); - } - var globalBlock = block(); - var procedures = {}; - function proc(name, count2) { - var args = []; - function arg() { - var name2 = "a" + args.length; - args.push(name2); - return name2; - } - count2 = count2 || 0; - for (var i4 = 0; i4 < count2; ++i4) { - arg(); - } - var body = scope(); - var bodyToString = body.toString; - var result = procedures[name] = extend4(body, { - arg, - toString: function() { - return join([ - "function(", - args.join(), - "){", - bodyToString(), - "}" - ]); - } - }); - return result; - } - function compile() { - var code = [ - '"use strict";', - globalBlock, - "return {" - ]; - Object.keys(procedures).forEach(function(name) { - code.push('"', name, '":', procedures[name].toString(), ","); - }); - code.push("}"); - var src = join(code).replace(/;/g, ";\n").replace(/}/g, "}\n").replace(/{/g, "{\n"); - var proc2 = Function.apply(null, linkedNames.concat(src)); - return proc2.apply(null, linkedValues); - } - return { - global: globalBlock, - link, - block, - proc, - scope, - cond: conditional, - compile - }; - } - var CUTE_COMPONENTS = "xyzw".split(""); - var GL_UNSIGNED_BYTE$8 = 5121; - var ATTRIB_STATE_POINTER = 1; - var ATTRIB_STATE_CONSTANT = 2; - var DYN_FUNC$1 = 0; - var DYN_PROP$1 = 1; - var DYN_CONTEXT$1 = 2; - var DYN_STATE$1 = 3; - var DYN_THUNK = 4; - var DYN_CONSTANT$1 = 5; - var DYN_ARRAY$1 = 6; - var S_DITHER = "dither"; - var S_BLEND_ENABLE = "blend.enable"; - var S_BLEND_COLOR = "blend.color"; - var S_BLEND_EQUATION = "blend.equation"; - var S_BLEND_FUNC = "blend.func"; - var S_DEPTH_ENABLE = "depth.enable"; - var S_DEPTH_FUNC = "depth.func"; - var S_DEPTH_RANGE = "depth.range"; - var S_DEPTH_MASK = "depth.mask"; - var S_COLOR_MASK = "colorMask"; - var S_CULL_ENABLE = "cull.enable"; - var S_CULL_FACE = "cull.face"; - var S_FRONT_FACE = "frontFace"; - var S_LINE_WIDTH = "lineWidth"; - var S_POLYGON_OFFSET_ENABLE = "polygonOffset.enable"; - var S_POLYGON_OFFSET_OFFSET = "polygonOffset.offset"; - var S_SAMPLE_ALPHA = "sample.alpha"; - var S_SAMPLE_ENABLE = "sample.enable"; - var S_SAMPLE_COVERAGE = "sample.coverage"; - var S_STENCIL_ENABLE = "stencil.enable"; - var S_STENCIL_MASK = "stencil.mask"; - var S_STENCIL_FUNC = "stencil.func"; - var S_STENCIL_OPFRONT = "stencil.opFront"; - var S_STENCIL_OPBACK = "stencil.opBack"; - var S_SCISSOR_ENABLE = "scissor.enable"; - var S_SCISSOR_BOX = "scissor.box"; - var S_VIEWPORT = "viewport"; - var S_PROFILE = "profile"; - var S_FRAMEBUFFER = "framebuffer"; - var S_VERT = "vert"; - var S_FRAG = "frag"; - var S_ELEMENTS = "elements"; - var S_PRIMITIVE = "primitive"; - var S_COUNT = "count"; - var S_OFFSET = "offset"; - var S_INSTANCES = "instances"; - var S_VAO = "vao"; - var SUFFIX_WIDTH = "Width"; - var SUFFIX_HEIGHT = "Height"; - var S_FRAMEBUFFER_WIDTH = S_FRAMEBUFFER + SUFFIX_WIDTH; - var S_FRAMEBUFFER_HEIGHT = S_FRAMEBUFFER + SUFFIX_HEIGHT; - var S_VIEWPORT_WIDTH = S_VIEWPORT + SUFFIX_WIDTH; - var S_VIEWPORT_HEIGHT = S_VIEWPORT + SUFFIX_HEIGHT; - var S_DRAWINGBUFFER = "drawingBuffer"; - var S_DRAWINGBUFFER_WIDTH = S_DRAWINGBUFFER + SUFFIX_WIDTH; - var S_DRAWINGBUFFER_HEIGHT = S_DRAWINGBUFFER + SUFFIX_HEIGHT; - var NESTED_OPTIONS = [ - S_BLEND_FUNC, - S_BLEND_EQUATION, - S_STENCIL_FUNC, - S_STENCIL_OPFRONT, - S_STENCIL_OPBACK, - S_SAMPLE_COVERAGE, - S_VIEWPORT, - S_SCISSOR_BOX, - S_POLYGON_OFFSET_OFFSET - ]; - var GL_ARRAY_BUFFER$2 = 34962; - var GL_ELEMENT_ARRAY_BUFFER$1 = 34963; - var GL_FRAGMENT_SHADER$1 = 35632; - var GL_VERTEX_SHADER$1 = 35633; - var GL_TEXTURE_2D$3 = 3553; - var GL_TEXTURE_CUBE_MAP$2 = 34067; - var GL_CULL_FACE = 2884; - var GL_BLEND = 3042; - var GL_DITHER = 3024; - var GL_STENCIL_TEST = 2960; - var GL_DEPTH_TEST = 2929; - var GL_SCISSOR_TEST = 3089; - var GL_POLYGON_OFFSET_FILL = 32823; - var GL_SAMPLE_ALPHA_TO_COVERAGE = 32926; - var GL_SAMPLE_COVERAGE = 32928; - var GL_FLOAT$8 = 5126; - var GL_FLOAT_VEC2 = 35664; - var GL_FLOAT_VEC3 = 35665; - var GL_FLOAT_VEC4 = 35666; - var GL_INT$3 = 5124; - var GL_INT_VEC2 = 35667; - var GL_INT_VEC3 = 35668; - var GL_INT_VEC4 = 35669; - var GL_BOOL = 35670; - var GL_BOOL_VEC2 = 35671; - var GL_BOOL_VEC3 = 35672; - var GL_BOOL_VEC4 = 35673; - var GL_FLOAT_MAT2 = 35674; - var GL_FLOAT_MAT3 = 35675; - var GL_FLOAT_MAT4 = 35676; - var GL_SAMPLER_2D = 35678; - var GL_SAMPLER_CUBE = 35680; - var GL_TRIANGLES$1 = 4; - var GL_FRONT = 1028; - var GL_BACK = 1029; - var GL_CW = 2304; - var GL_CCW = 2305; - var GL_MIN_EXT = 32775; - var GL_MAX_EXT = 32776; - var GL_ALWAYS = 519; - var GL_KEEP = 7680; - var GL_ZERO = 0; - var GL_ONE = 1; - var GL_FUNC_ADD = 32774; - var GL_LESS = 513; - var GL_FRAMEBUFFER$2 = 36160; - var GL_COLOR_ATTACHMENT0$2 = 36064; - var blendFuncs = { - "0": 0, - "1": 1, - "zero": 0, - "one": 1, - "src color": 768, - "one minus src color": 769, - "src alpha": 770, - "one minus src alpha": 771, - "dst color": 774, - "one minus dst color": 775, - "dst alpha": 772, - "one minus dst alpha": 773, - "constant color": 32769, - "one minus constant color": 32770, - "constant alpha": 32771, - "one minus constant alpha": 32772, - "src alpha saturate": 776 - }; - var invalidBlendCombinations = [ - "constant color, constant alpha", - "one minus constant color, constant alpha", - "constant color, one minus constant alpha", - "one minus constant color, one minus constant alpha", - "constant alpha, constant color", - "constant alpha, one minus constant color", - "one minus constant alpha, constant color", - "one minus constant alpha, one minus constant color" - ]; - var compareFuncs = { - "never": 512, - "less": 513, - "<": 513, - "equal": 514, - "=": 514, - "==": 514, - "===": 514, - "lequal": 515, - "<=": 515, - "greater": 516, - ">": 516, - "notequal": 517, - "!=": 517, - "!==": 517, - "gequal": 518, - ">=": 518, - "always": 519 - }; - var stencilOps = { - "0": 0, - "zero": 0, - "keep": 7680, - "replace": 7681, - "increment": 7682, - "decrement": 7683, - "increment wrap": 34055, - "decrement wrap": 34056, - "invert": 5386 - }; - var shaderType = { - "frag": GL_FRAGMENT_SHADER$1, - "vert": GL_VERTEX_SHADER$1 - }; - var orientationType = { - "cw": GL_CW, - "ccw": GL_CCW - }; - function isBufferArgs(x6) { - return Array.isArray(x6) || isTypedArray4(x6) || isNDArrayLike(x6); - } - function sortState(state2) { - return state2.sort(function(a4, b10) { - if (a4 === S_VIEWPORT) { - return -1; - } else if (b10 === S_VIEWPORT) { - return 1; - } - return a4 < b10 ? -1 : 1; - }); - } - function Declaration(thisDep, contextDep, propDep, append) { - this.thisDep = thisDep; - this.contextDep = contextDep; - this.propDep = propDep; - this.append = append; - } - function isStatic(decl) { - return decl && !(decl.thisDep || decl.contextDep || decl.propDep); - } - function createStaticDecl(append) { - return new Declaration(false, false, false, append); - } - function createDynamicDecl(dyn, append) { - var type2 = dyn.type; - if (type2 === DYN_FUNC$1) { - var numArgs = dyn.data.length; - return new Declaration(true, numArgs >= 1, numArgs >= 2, append); - } else if (type2 === DYN_THUNK) { - var data3 = dyn.data; - return new Declaration(data3.thisDep, data3.contextDep, data3.propDep, append); - } else if (type2 === DYN_CONSTANT$1) { - return new Declaration(false, false, false, append); - } else if (type2 === DYN_ARRAY$1) { - var thisDep = false; - var contextDep = false; - var propDep = false; - for (var i4 = 0; i4 < dyn.data.length; ++i4) { - var subDyn = dyn.data[i4]; - if (subDyn.type === DYN_PROP$1) { - propDep = true; - } else if (subDyn.type === DYN_CONTEXT$1) { - contextDep = true; - } else if (subDyn.type === DYN_STATE$1) { - thisDep = true; - } else if (subDyn.type === DYN_FUNC$1) { - thisDep = true; - var subArgs = subDyn.data; - if (subArgs >= 1) { - contextDep = true; - } - if (subArgs >= 2) { - propDep = true; - } - } else if (subDyn.type === DYN_THUNK) { - thisDep = thisDep || subDyn.data.thisDep; - contextDep = contextDep || subDyn.data.contextDep; - propDep = propDep || subDyn.data.propDep; - } - } - return new Declaration(thisDep, contextDep, propDep, append); - } else { - return new Declaration(type2 === DYN_STATE$1, type2 === DYN_CONTEXT$1, type2 === DYN_PROP$1, append); - } - } - var SCOPE_DECL = new Declaration(false, false, false, function() { - }); - function reglCore(gl2, stringStore, extensions, limits, bufferState, elementState, textureState, framebufferState, uniformState, attributeState, shaderState, drawState, contextState, timer3, config) { - var AttributeRecord2 = attributeState.Record; - var blendEquations = { - "add": 32774, - "subtract": 32778, - "reverse subtract": 32779 - }; - if (extensions.ext_blend_minmax) { - blendEquations.min = GL_MIN_EXT; - blendEquations.max = GL_MAX_EXT; - } - var extInstancing = extensions.angle_instanced_arrays; - var extDrawBuffers = extensions.webgl_draw_buffers; - var currentState = { - dirty: true, - profile: config.profile - }; - var nextState = {}; - var GL_STATE_NAMES = []; - var GL_FLAGS = {}; - var GL_VARIABLES = {}; - function propName(name) { - return name.replace(".", "_"); - } - function stateFlag(sname, cap, init) { - var name = propName(sname); - GL_STATE_NAMES.push(sname); - nextState[name] = currentState[name] = !!init; - GL_FLAGS[name] = cap; - } - function stateVariable(sname, func, init) { - var name = propName(sname); - GL_STATE_NAMES.push(sname); - if (Array.isArray(init)) { - currentState[name] = init.slice(); - nextState[name] = init.slice(); - } else { - currentState[name] = nextState[name] = init; - } - GL_VARIABLES[name] = func; - } - stateFlag(S_DITHER, GL_DITHER); - stateFlag(S_BLEND_ENABLE, GL_BLEND); - stateVariable(S_BLEND_COLOR, "blendColor", [0, 0, 0, 0]); - stateVariable(S_BLEND_EQUATION, "blendEquationSeparate", [GL_FUNC_ADD, GL_FUNC_ADD]); - stateVariable(S_BLEND_FUNC, "blendFuncSeparate", [GL_ONE, GL_ZERO, GL_ONE, GL_ZERO]); - stateFlag(S_DEPTH_ENABLE, GL_DEPTH_TEST, true); - stateVariable(S_DEPTH_FUNC, "depthFunc", GL_LESS); - stateVariable(S_DEPTH_RANGE, "depthRange", [0, 1]); - stateVariable(S_DEPTH_MASK, "depthMask", true); - stateVariable(S_COLOR_MASK, S_COLOR_MASK, [true, true, true, true]); - stateFlag(S_CULL_ENABLE, GL_CULL_FACE); - stateVariable(S_CULL_FACE, "cullFace", GL_BACK); - stateVariable(S_FRONT_FACE, S_FRONT_FACE, GL_CCW); - stateVariable(S_LINE_WIDTH, S_LINE_WIDTH, 1); - stateFlag(S_POLYGON_OFFSET_ENABLE, GL_POLYGON_OFFSET_FILL); - stateVariable(S_POLYGON_OFFSET_OFFSET, "polygonOffset", [0, 0]); - stateFlag(S_SAMPLE_ALPHA, GL_SAMPLE_ALPHA_TO_COVERAGE); - stateFlag(S_SAMPLE_ENABLE, GL_SAMPLE_COVERAGE); - stateVariable(S_SAMPLE_COVERAGE, "sampleCoverage", [1, false]); - stateFlag(S_STENCIL_ENABLE, GL_STENCIL_TEST); - stateVariable(S_STENCIL_MASK, "stencilMask", -1); - stateVariable(S_STENCIL_FUNC, "stencilFunc", [GL_ALWAYS, 0, -1]); - stateVariable(S_STENCIL_OPFRONT, "stencilOpSeparate", [GL_FRONT, GL_KEEP, GL_KEEP, GL_KEEP]); - stateVariable(S_STENCIL_OPBACK, "stencilOpSeparate", [GL_BACK, GL_KEEP, GL_KEEP, GL_KEEP]); - stateFlag(S_SCISSOR_ENABLE, GL_SCISSOR_TEST); - stateVariable(S_SCISSOR_BOX, "scissor", [0, 0, gl2.drawingBufferWidth, gl2.drawingBufferHeight]); - stateVariable(S_VIEWPORT, S_VIEWPORT, [0, 0, gl2.drawingBufferWidth, gl2.drawingBufferHeight]); - var sharedState = { - gl: gl2, - context: contextState, - strings: stringStore, - next: nextState, - current: currentState, - draw: drawState, - elements: elementState, - buffer: bufferState, - shader: shaderState, - attributes: attributeState.state, - vao: attributeState, - uniforms: uniformState, - framebuffer: framebufferState, - extensions, - timer: timer3, - isBufferArgs - }; - var sharedConstants = { - primTypes, - compareFuncs, - blendFuncs, - blendEquations, - stencilOps, - glTypes, - orientationType - }; - check$1.optional(function() { - sharedState.isArrayLike = isArrayLike; - }); - if (extDrawBuffers) { - sharedConstants.backBuffer = [GL_BACK]; - sharedConstants.drawBuffer = loop(limits.maxDrawbuffers, function(i4) { - if (i4 === 0) { - return [0]; - } - return loop(i4, function(j4) { - return GL_COLOR_ATTACHMENT0$2 + j4; - }); - }); - } - var drawCallCounter = 0; - function createREGLEnvironment() { - var env = createEnvironment(); - var link = env.link; - var global2 = env.global; - env.id = drawCallCounter++; - env.batchId = "0"; - var SHARED = link(sharedState); - var shared = env.shared = { - props: "a0" - }; - Object.keys(sharedState).forEach(function(prop) { - shared[prop] = global2.def(SHARED, ".", prop); - }); - check$1.optional(function() { - env.CHECK = link(check$1); - env.commandStr = check$1.guessCommand(); - env.command = link(env.commandStr); - env.assert = function(block, pred, message) { - block("if(!(", pred, "))", this.CHECK, ".commandRaise(", link(message), ",", this.command, ");"); - }; - sharedConstants.invalidBlendCombinations = invalidBlendCombinations; - }); - var nextVars = env.next = {}; - var currentVars = env.current = {}; - Object.keys(GL_VARIABLES).forEach(function(variable) { - if (Array.isArray(currentState[variable])) { - nextVars[variable] = global2.def(shared.next, ".", variable); - currentVars[variable] = global2.def(shared.current, ".", variable); - } - }); - var constants = env.constants = {}; - Object.keys(sharedConstants).forEach(function(name) { - constants[name] = global2.def(JSON.stringify(sharedConstants[name])); - }); - env.invoke = function(block, x6) { - switch (x6.type) { - case DYN_FUNC$1: - var argList = [ - "this", - shared.context, - shared.props, - env.batchId - ]; - return block.def(link(x6.data), ".call(", argList.slice(0, Math.max(x6.data.length + 1, 4)), ")"); - case DYN_PROP$1: - return block.def(shared.props, x6.data); - case DYN_CONTEXT$1: - return block.def(shared.context, x6.data); - case DYN_STATE$1: - return block.def("this", x6.data); - case DYN_THUNK: - x6.data.append(env, block); - return x6.data.ref; - case DYN_CONSTANT$1: - return x6.data.toString(); - case DYN_ARRAY$1: - return x6.data.map(function(y5) { - return env.invoke(block, y5); - }); - } - }; - env.attribCache = {}; - var scopeAttribs = {}; - env.scopeAttrib = function(name) { - var id = stringStore.id(name); - if (id in scopeAttribs) { - return scopeAttribs[id]; - } - var binding = attributeState.scope[id]; - if (!binding) { - binding = attributeState.scope[id] = new AttributeRecord2(); - } - var result = scopeAttribs[id] = link(binding); - return result; - }; - return env; - } - function parseProfile(options) { - var staticOptions = options.static; - var dynamicOptions = options.dynamic; - var profileEnable; - if (S_PROFILE in staticOptions) { - var value2 = !!staticOptions[S_PROFILE]; - profileEnable = createStaticDecl(function(env, scope) { - return value2; - }); - profileEnable.enable = value2; - } else if (S_PROFILE in dynamicOptions) { - var dyn = dynamicOptions[S_PROFILE]; - profileEnable = createDynamicDecl(dyn, function(env, scope) { - return env.invoke(scope, dyn); - }); - } - return profileEnable; - } - function parseFramebuffer(options, env) { - var staticOptions = options.static; - var dynamicOptions = options.dynamic; - if (S_FRAMEBUFFER in staticOptions) { - var framebuffer = staticOptions[S_FRAMEBUFFER]; - if (framebuffer) { - framebuffer = framebufferState.getFramebuffer(framebuffer); - check$1.command(framebuffer, "invalid framebuffer object"); - return createStaticDecl(function(env2, block) { - var FRAMEBUFFER = env2.link(framebuffer); - var shared = env2.shared; - block.set(shared.framebuffer, ".next", FRAMEBUFFER); - var CONTEXT = shared.context; - block.set(CONTEXT, "." + S_FRAMEBUFFER_WIDTH, FRAMEBUFFER + ".width"); - block.set(CONTEXT, "." + S_FRAMEBUFFER_HEIGHT, FRAMEBUFFER + ".height"); - return FRAMEBUFFER; - }); - } else { - return createStaticDecl(function(env2, scope) { - var shared = env2.shared; - scope.set(shared.framebuffer, ".next", "null"); - var CONTEXT = shared.context; - scope.set(CONTEXT, "." + S_FRAMEBUFFER_WIDTH, CONTEXT + "." + S_DRAWINGBUFFER_WIDTH); - scope.set(CONTEXT, "." + S_FRAMEBUFFER_HEIGHT, CONTEXT + "." + S_DRAWINGBUFFER_HEIGHT); - return "null"; - }); - } - } else if (S_FRAMEBUFFER in dynamicOptions) { - var dyn = dynamicOptions[S_FRAMEBUFFER]; - return createDynamicDecl(dyn, function(env2, scope) { - var FRAMEBUFFER_FUNC = env2.invoke(scope, dyn); - var shared = env2.shared; - var FRAMEBUFFER_STATE = shared.framebuffer; - var FRAMEBUFFER = scope.def(FRAMEBUFFER_STATE, ".getFramebuffer(", FRAMEBUFFER_FUNC, ")"); - check$1.optional(function() { - env2.assert(scope, "!" + FRAMEBUFFER_FUNC + "||" + FRAMEBUFFER, "invalid framebuffer object"); - }); - scope.set(FRAMEBUFFER_STATE, ".next", FRAMEBUFFER); - var CONTEXT = shared.context; - scope.set(CONTEXT, "." + S_FRAMEBUFFER_WIDTH, FRAMEBUFFER + "?" + FRAMEBUFFER + ".width:" + CONTEXT + "." + S_DRAWINGBUFFER_WIDTH); - scope.set(CONTEXT, "." + S_FRAMEBUFFER_HEIGHT, FRAMEBUFFER + "?" + FRAMEBUFFER + ".height:" + CONTEXT + "." + S_DRAWINGBUFFER_HEIGHT); - return FRAMEBUFFER; - }); - } else { - return null; - } - } - function parseViewportScissor(options, framebuffer, env) { - var staticOptions = options.static; - var dynamicOptions = options.dynamic; - function parseBox(param) { - if (param in staticOptions) { - var box2 = staticOptions[param]; - check$1.commandType(box2, "object", "invalid " + param, env.commandStr); - var isStatic2 = true; - var x6 = box2.x | 0; - var y5 = box2.y | 0; - var w4, h3; - if ("width" in box2) { - w4 = box2.width | 0; - check$1.command(w4 >= 0, "invalid " + param, env.commandStr); - } else { - isStatic2 = false; - } - if ("height" in box2) { - h3 = box2.height | 0; - check$1.command(h3 >= 0, "invalid " + param, env.commandStr); - } else { - isStatic2 = false; - } - return new Declaration(!isStatic2 && framebuffer && framebuffer.thisDep, !isStatic2 && framebuffer && framebuffer.contextDep, !isStatic2 && framebuffer && framebuffer.propDep, function(env2, scope) { - var CONTEXT = env2.shared.context; - var BOX_W = w4; - if (!("width" in box2)) { - BOX_W = scope.def(CONTEXT, ".", S_FRAMEBUFFER_WIDTH, "-", x6); - } - var BOX_H = h3; - if (!("height" in box2)) { - BOX_H = scope.def(CONTEXT, ".", S_FRAMEBUFFER_HEIGHT, "-", y5); - } - return [x6, y5, BOX_W, BOX_H]; - }); - } else if (param in dynamicOptions) { - var dynBox = dynamicOptions[param]; - var result = createDynamicDecl(dynBox, function(env2, scope) { - var BOX = env2.invoke(scope, dynBox); - check$1.optional(function() { - env2.assert(scope, BOX + "&&typeof " + BOX + '==="object"', "invalid " + param); - }); - var CONTEXT = env2.shared.context; - var BOX_X = scope.def(BOX, ".x|0"); - var BOX_Y = scope.def(BOX, ".y|0"); - var BOX_W = scope.def('"width" in ', BOX, "?", BOX, ".width|0:", "(", CONTEXT, ".", S_FRAMEBUFFER_WIDTH, "-", BOX_X, ")"); - var BOX_H = scope.def('"height" in ', BOX, "?", BOX, ".height|0:", "(", CONTEXT, ".", S_FRAMEBUFFER_HEIGHT, "-", BOX_Y, ")"); - check$1.optional(function() { - env2.assert(scope, BOX_W + ">=0&&" + BOX_H + ">=0", "invalid " + param); - }); - return [BOX_X, BOX_Y, BOX_W, BOX_H]; - }); - if (framebuffer) { - result.thisDep = result.thisDep || framebuffer.thisDep; - result.contextDep = result.contextDep || framebuffer.contextDep; - result.propDep = result.propDep || framebuffer.propDep; - } - return result; - } else if (framebuffer) { - return new Declaration(framebuffer.thisDep, framebuffer.contextDep, framebuffer.propDep, function(env2, scope) { - var CONTEXT = env2.shared.context; - return [ - 0, - 0, - scope.def(CONTEXT, ".", S_FRAMEBUFFER_WIDTH), - scope.def(CONTEXT, ".", S_FRAMEBUFFER_HEIGHT) - ]; - }); - } else { - return null; - } - } - var viewport = parseBox(S_VIEWPORT); - if (viewport) { - var prevViewport = viewport; - viewport = new Declaration(viewport.thisDep, viewport.contextDep, viewport.propDep, function(env2, scope) { - var VIEWPORT = prevViewport.append(env2, scope); - var CONTEXT = env2.shared.context; - scope.set(CONTEXT, "." + S_VIEWPORT_WIDTH, VIEWPORT[2]); - scope.set(CONTEXT, "." + S_VIEWPORT_HEIGHT, VIEWPORT[3]); - return VIEWPORT; - }); - } - return { - viewport, - scissor_box: parseBox(S_SCISSOR_BOX) - }; - } - function parseAttribLocations(options, attributes) { - var staticOptions = options.static; - var staticProgram = typeof staticOptions[S_FRAG] === "string" && typeof staticOptions[S_VERT] === "string"; - if (staticProgram) { - if (Object.keys(attributes.dynamic).length > 0) { - return null; - } - var staticAttributes = attributes.static; - var sAttributes = Object.keys(staticAttributes); - if (sAttributes.length > 0 && typeof staticAttributes[sAttributes[0]] === "number") { - var bindings = []; - for (var i4 = 0; i4 < sAttributes.length; ++i4) { - check$1(typeof staticAttributes[sAttributes[i4]] === "number", "must specify all vertex attribute locations when using vaos"); - bindings.push([staticAttributes[sAttributes[i4]] | 0, sAttributes[i4]]); - } - return bindings; - } - } - return null; - } - function parseProgram(options, env, attribLocations) { - var staticOptions = options.static; - var dynamicOptions = options.dynamic; - function parseShader(name) { - if (name in staticOptions) { - var id = stringStore.id(staticOptions[name]); - check$1.optional(function() { - shaderState.shader(shaderType[name], id, check$1.guessCommand()); - }); - var result = createStaticDecl(function() { - return id; - }); - result.id = id; - return result; - } else if (name in dynamicOptions) { - var dyn = dynamicOptions[name]; - return createDynamicDecl(dyn, function(env2, scope) { - var str8 = env2.invoke(scope, dyn); - var id2 = scope.def(env2.shared.strings, ".id(", str8, ")"); - check$1.optional(function() { - scope(env2.shared.shader, ".shader(", shaderType[name], ",", id2, ",", env2.command, ");"); - }); - return id2; - }); - } - return null; - } - var frag = parseShader(S_FRAG); - var vert = parseShader(S_VERT); - var program = null; - var progVar; - if (isStatic(frag) && isStatic(vert)) { - program = shaderState.program(vert.id, frag.id, null, attribLocations); - progVar = createStaticDecl(function(env2, scope) { - return env2.link(program); - }); - } else { - progVar = new Declaration(frag && frag.thisDep || vert && vert.thisDep, frag && frag.contextDep || vert && vert.contextDep, frag && frag.propDep || vert && vert.propDep, function(env2, scope) { - var SHADER_STATE = env2.shared.shader; - var fragId; - if (frag) { - fragId = frag.append(env2, scope); - } else { - fragId = scope.def(SHADER_STATE, ".", S_FRAG); - } - var vertId; - if (vert) { - vertId = vert.append(env2, scope); - } else { - vertId = scope.def(SHADER_STATE, ".", S_VERT); - } - var progDef = SHADER_STATE + ".program(" + vertId + "," + fragId; - check$1.optional(function() { - progDef += "," + env2.command; - }); - return scope.def(progDef + ")"); - }); - } - return { - frag, - vert, - progVar, - program - }; - } - function parseDraw(options, env) { - var staticOptions = options.static; - var dynamicOptions = options.dynamic; - function parseElements() { - if (S_ELEMENTS in staticOptions) { - var elements2 = staticOptions[S_ELEMENTS]; - if (isBufferArgs(elements2)) { - elements2 = elementState.getElements(elementState.create(elements2, true)); - } else if (elements2) { - elements2 = elementState.getElements(elements2); - check$1.command(elements2, "invalid elements", env.commandStr); - } - var result = createStaticDecl(function(env2, scope) { - if (elements2) { - var result2 = env2.link(elements2); - env2.ELEMENTS = result2; - return result2; - } - env2.ELEMENTS = null; - return null; - }); - result.value = elements2; - return result; - } else if (S_ELEMENTS in dynamicOptions) { - var dyn = dynamicOptions[S_ELEMENTS]; - return createDynamicDecl(dyn, function(env2, scope) { - var shared = env2.shared; - var IS_BUFFER_ARGS = shared.isBufferArgs; - var ELEMENT_STATE2 = shared.elements; - var elementDefn = env2.invoke(scope, dyn); - var elements3 = scope.def("null"); - var elementStream = scope.def(IS_BUFFER_ARGS, "(", elementDefn, ")"); - var ifte = env2.cond(elementStream).then(elements3, "=", ELEMENT_STATE2, ".createStream(", elementDefn, ");").else(elements3, "=", ELEMENT_STATE2, ".getElements(", elementDefn, ");"); - check$1.optional(function() { - env2.assert(ifte.else, "!" + elementDefn + "||" + elements3, "invalid elements"); - }); - scope.entry(ifte); - scope.exit(env2.cond(elementStream).then(ELEMENT_STATE2, ".destroyStream(", elements3, ");")); - env2.ELEMENTS = elements3; - return elements3; - }); - } - return null; - } - var elements = parseElements(); - function parsePrimitive() { - if (S_PRIMITIVE in staticOptions) { - var primitive = staticOptions[S_PRIMITIVE]; - check$1.commandParameter(primitive, primTypes, "invalid primitve", env.commandStr); - return createStaticDecl(function(env2, scope) { - return primTypes[primitive]; - }); - } else if (S_PRIMITIVE in dynamicOptions) { - var dynPrimitive = dynamicOptions[S_PRIMITIVE]; - return createDynamicDecl(dynPrimitive, function(env2, scope) { - var PRIM_TYPES = env2.constants.primTypes; - var prim = env2.invoke(scope, dynPrimitive); - check$1.optional(function() { - env2.assert(scope, prim + " in " + PRIM_TYPES, "invalid primitive, must be one of " + Object.keys(primTypes)); - }); - return scope.def(PRIM_TYPES, "[", prim, "]"); - }); - } else if (elements) { - if (isStatic(elements)) { - if (elements.value) { - return createStaticDecl(function(env2, scope) { - return scope.def(env2.ELEMENTS, ".primType"); - }); - } else { - return createStaticDecl(function() { - return GL_TRIANGLES$1; - }); - } - } else { - return new Declaration(elements.thisDep, elements.contextDep, elements.propDep, function(env2, scope) { - var elements2 = env2.ELEMENTS; - return scope.def(elements2, "?", elements2, ".primType:", GL_TRIANGLES$1); - }); - } - } - return null; - } - function parseParam(param, isOffset) { - if (param in staticOptions) { - var value2 = staticOptions[param] | 0; - check$1.command(!isOffset || value2 >= 0, "invalid " + param, env.commandStr); - return createStaticDecl(function(env2, scope) { - if (isOffset) { - env2.OFFSET = value2; - } - return value2; - }); - } else if (param in dynamicOptions) { - var dynValue = dynamicOptions[param]; - return createDynamicDecl(dynValue, function(env2, scope) { - var result = env2.invoke(scope, dynValue); - if (isOffset) { - env2.OFFSET = result; - check$1.optional(function() { - env2.assert(scope, result + ">=0", "invalid " + param); - }); - } - return result; - }); - } else if (isOffset && elements) { - return createStaticDecl(function(env2, scope) { - env2.OFFSET = "0"; - return 0; - }); - } - return null; - } - var OFFSET = parseParam(S_OFFSET, true); - function parseVertCount() { - if (S_COUNT in staticOptions) { - var count2 = staticOptions[S_COUNT] | 0; - check$1.command(typeof count2 === "number" && count2 >= 0, "invalid vertex count", env.commandStr); - return createStaticDecl(function() { - return count2; - }); - } else if (S_COUNT in dynamicOptions) { - var dynCount = dynamicOptions[S_COUNT]; - return createDynamicDecl(dynCount, function(env2, scope) { - var result2 = env2.invoke(scope, dynCount); - check$1.optional(function() { - env2.assert(scope, "typeof " + result2 + '==="number"&&' + result2 + ">=0&&" + result2 + "===(" + result2 + "|0)", "invalid vertex count"); - }); - return result2; - }); - } else if (elements) { - if (isStatic(elements)) { - if (elements) { - if (OFFSET) { - return new Declaration(OFFSET.thisDep, OFFSET.contextDep, OFFSET.propDep, function(env2, scope) { - var result2 = scope.def(env2.ELEMENTS, ".vertCount-", env2.OFFSET); - check$1.optional(function() { - env2.assert(scope, result2 + ">=0", "invalid vertex offset/element buffer too small"); - }); - return result2; - }); - } else { - return createStaticDecl(function(env2, scope) { - return scope.def(env2.ELEMENTS, ".vertCount"); - }); - } - } else { - var result = createStaticDecl(function() { - return -1; - }); - check$1.optional(function() { - result.MISSING = true; - }); - return result; - } - } else { - var variable = new Declaration(elements.thisDep || OFFSET.thisDep, elements.contextDep || OFFSET.contextDep, elements.propDep || OFFSET.propDep, function(env2, scope) { - var elements2 = env2.ELEMENTS; - if (env2.OFFSET) { - return scope.def(elements2, "?", elements2, ".vertCount-", env2.OFFSET, ":-1"); - } - return scope.def(elements2, "?", elements2, ".vertCount:-1"); - }); - check$1.optional(function() { - variable.DYNAMIC = true; - }); - return variable; - } - } - return null; - } - return { - elements, - primitive: parsePrimitive(), - count: parseVertCount(), - instances: parseParam(S_INSTANCES, false), - offset: OFFSET - }; - } - function parseGLState(options, env) { - var staticOptions = options.static; - var dynamicOptions = options.dynamic; - var STATE = {}; - GL_STATE_NAMES.forEach(function(prop) { - var param = propName(prop); - function parseParam(parseStatic, parseDynamic) { - if (prop in staticOptions) { - var value2 = parseStatic(staticOptions[prop]); - STATE[param] = createStaticDecl(function() { - return value2; - }); - } else if (prop in dynamicOptions) { - var dyn = dynamicOptions[prop]; - STATE[param] = createDynamicDecl(dyn, function(env2, scope) { - return parseDynamic(env2, scope, env2.invoke(scope, dyn)); - }); - } - } - switch (prop) { - case S_CULL_ENABLE: - case S_BLEND_ENABLE: - case S_DITHER: - case S_STENCIL_ENABLE: - case S_DEPTH_ENABLE: - case S_SCISSOR_ENABLE: - case S_POLYGON_OFFSET_ENABLE: - case S_SAMPLE_ALPHA: - case S_SAMPLE_ENABLE: - case S_DEPTH_MASK: - return parseParam(function(value2) { - check$1.commandType(value2, "boolean", prop, env.commandStr); - return value2; - }, function(env2, scope, value2) { - check$1.optional(function() { - env2.assert(scope, "typeof " + value2 + '==="boolean"', "invalid flag " + prop, env2.commandStr); - }); - return value2; - }); - case S_DEPTH_FUNC: - return parseParam(function(value2) { - check$1.commandParameter(value2, compareFuncs, "invalid " + prop, env.commandStr); - return compareFuncs[value2]; - }, function(env2, scope, value2) { - var COMPARE_FUNCS = env2.constants.compareFuncs; - check$1.optional(function() { - env2.assert(scope, value2 + " in " + COMPARE_FUNCS, "invalid " + prop + ", must be one of " + Object.keys(compareFuncs)); - }); - return scope.def(COMPARE_FUNCS, "[", value2, "]"); - }); - case S_DEPTH_RANGE: - return parseParam(function(value2) { - check$1.command(isArrayLike(value2) && value2.length === 2 && typeof value2[0] === "number" && typeof value2[1] === "number" && value2[0] <= value2[1], "depth range is 2d array", env.commandStr); - return value2; - }, function(env2, scope, value2) { - check$1.optional(function() { - env2.assert(scope, env2.shared.isArrayLike + "(" + value2 + ")&&" + value2 + ".length===2&&typeof " + value2 + '[0]==="number"&&typeof ' + value2 + '[1]==="number"&&' + value2 + "[0]<=" + value2 + "[1]", "depth range must be a 2d array"); - }); - var Z_NEAR = scope.def("+", value2, "[0]"); - var Z_FAR = scope.def("+", value2, "[1]"); - return [Z_NEAR, Z_FAR]; - }); - case S_BLEND_FUNC: - return parseParam(function(value2) { - check$1.commandType(value2, "object", "blend.func", env.commandStr); - var srcRGB = "srcRGB" in value2 ? value2.srcRGB : value2.src; - var srcAlpha = "srcAlpha" in value2 ? value2.srcAlpha : value2.src; - var dstRGB = "dstRGB" in value2 ? value2.dstRGB : value2.dst; - var dstAlpha = "dstAlpha" in value2 ? value2.dstAlpha : value2.dst; - check$1.commandParameter(srcRGB, blendFuncs, param + ".srcRGB", env.commandStr); - check$1.commandParameter(srcAlpha, blendFuncs, param + ".srcAlpha", env.commandStr); - check$1.commandParameter(dstRGB, blendFuncs, param + ".dstRGB", env.commandStr); - check$1.commandParameter(dstAlpha, blendFuncs, param + ".dstAlpha", env.commandStr); - check$1.command(invalidBlendCombinations.indexOf(srcRGB + ", " + dstRGB) === -1, "unallowed blending combination (srcRGB, dstRGB) = (" + srcRGB + ", " + dstRGB + ")", env.commandStr); - return [ - blendFuncs[srcRGB], - blendFuncs[dstRGB], - blendFuncs[srcAlpha], - blendFuncs[dstAlpha] - ]; - }, function(env2, scope, value2) { - var BLEND_FUNCS = env2.constants.blendFuncs; - check$1.optional(function() { - env2.assert(scope, value2 + "&&typeof " + value2 + '==="object"', "invalid blend func, must be an object"); - }); - function read(prefix2, suffix) { - var func = scope.def('"', prefix2, suffix, '" in ', value2, "?", value2, ".", prefix2, suffix, ":", value2, ".", prefix2); - check$1.optional(function() { - env2.assert(scope, func + " in " + BLEND_FUNCS, "invalid " + prop + "." + prefix2 + suffix + ", must be one of " + Object.keys(blendFuncs)); - }); - return func; - } - var srcRGB = read("src", "RGB"); - var dstRGB = read("dst", "RGB"); - check$1.optional(function() { - var INVALID_BLEND_COMBINATIONS = env2.constants.invalidBlendCombinations; - env2.assert(scope, INVALID_BLEND_COMBINATIONS + ".indexOf(" + srcRGB + '+", "+' + dstRGB + ") === -1 ", "unallowed blending combination for (srcRGB, dstRGB)"); - }); - var SRC_RGB = scope.def(BLEND_FUNCS, "[", srcRGB, "]"); - var SRC_ALPHA = scope.def(BLEND_FUNCS, "[", read("src", "Alpha"), "]"); - var DST_RGB = scope.def(BLEND_FUNCS, "[", dstRGB, "]"); - var DST_ALPHA = scope.def(BLEND_FUNCS, "[", read("dst", "Alpha"), "]"); - return [SRC_RGB, DST_RGB, SRC_ALPHA, DST_ALPHA]; - }); - case S_BLEND_EQUATION: - return parseParam(function(value2) { - if (typeof value2 === "string") { - check$1.commandParameter(value2, blendEquations, "invalid " + prop, env.commandStr); - return [ - blendEquations[value2], - blendEquations[value2] - ]; - } else if (typeof value2 === "object") { - check$1.commandParameter(value2.rgb, blendEquations, prop + ".rgb", env.commandStr); - check$1.commandParameter(value2.alpha, blendEquations, prop + ".alpha", env.commandStr); - return [ - blendEquations[value2.rgb], - blendEquations[value2.alpha] - ]; - } else { - check$1.commandRaise("invalid blend.equation", env.commandStr); - } - }, function(env2, scope, value2) { - var BLEND_EQUATIONS = env2.constants.blendEquations; - var RGB = scope.def(); - var ALPHA = scope.def(); - var ifte = env2.cond("typeof ", value2, '==="string"'); - check$1.optional(function() { - function checkProp(block, name, value3) { - env2.assert(block, value3 + " in " + BLEND_EQUATIONS, "invalid " + name + ", must be one of " + Object.keys(blendEquations)); - } - checkProp(ifte.then, prop, value2); - env2.assert(ifte.else, value2 + "&&typeof " + value2 + '==="object"', "invalid " + prop); - checkProp(ifte.else, prop + ".rgb", value2 + ".rgb"); - checkProp(ifte.else, prop + ".alpha", value2 + ".alpha"); - }); - ifte.then(RGB, "=", ALPHA, "=", BLEND_EQUATIONS, "[", value2, "];"); - ifte.else(RGB, "=", BLEND_EQUATIONS, "[", value2, ".rgb];", ALPHA, "=", BLEND_EQUATIONS, "[", value2, ".alpha];"); - scope(ifte); - return [RGB, ALPHA]; - }); - case S_BLEND_COLOR: - return parseParam(function(value2) { - check$1.command(isArrayLike(value2) && value2.length === 4, "blend.color must be a 4d array", env.commandStr); - return loop(4, function(i4) { - return +value2[i4]; - }); - }, function(env2, scope, value2) { - check$1.optional(function() { - env2.assert(scope, env2.shared.isArrayLike + "(" + value2 + ")&&" + value2 + ".length===4", "blend.color must be a 4d array"); - }); - return loop(4, function(i4) { - return scope.def("+", value2, "[", i4, "]"); - }); - }); - case S_STENCIL_MASK: - return parseParam(function(value2) { - check$1.commandType(value2, "number", param, env.commandStr); - return value2 | 0; - }, function(env2, scope, value2) { - check$1.optional(function() { - env2.assert(scope, "typeof " + value2 + '==="number"', "invalid stencil.mask"); - }); - return scope.def(value2, "|0"); - }); - case S_STENCIL_FUNC: - return parseParam(function(value2) { - check$1.commandType(value2, "object", param, env.commandStr); - var cmp = value2.cmp || "keep"; - var ref = value2.ref || 0; - var mask = "mask" in value2 ? value2.mask : -1; - check$1.commandParameter(cmp, compareFuncs, prop + ".cmp", env.commandStr); - check$1.commandType(ref, "number", prop + ".ref", env.commandStr); - check$1.commandType(mask, "number", prop + ".mask", env.commandStr); - return [ - compareFuncs[cmp], - ref, - mask - ]; - }, function(env2, scope, value2) { - var COMPARE_FUNCS = env2.constants.compareFuncs; - check$1.optional(function() { - function assert() { - env2.assert(scope, Array.prototype.join.call(arguments, ""), "invalid stencil.func"); - } - assert(value2 + "&&typeof ", value2, '==="object"'); - assert('!("cmp" in ', value2, ")||(", value2, ".cmp in ", COMPARE_FUNCS, ")"); - }); - var cmp = scope.def('"cmp" in ', value2, "?", COMPARE_FUNCS, "[", value2, ".cmp]", ":", GL_KEEP); - var ref = scope.def(value2, ".ref|0"); - var mask = scope.def('"mask" in ', value2, "?", value2, ".mask|0:-1"); - return [cmp, ref, mask]; - }); - case S_STENCIL_OPFRONT: - case S_STENCIL_OPBACK: - return parseParam(function(value2) { - check$1.commandType(value2, "object", param, env.commandStr); - var fail = value2.fail || "keep"; - var zfail = value2.zfail || "keep"; - var zpass = value2.zpass || "keep"; - check$1.commandParameter(fail, stencilOps, prop + ".fail", env.commandStr); - check$1.commandParameter(zfail, stencilOps, prop + ".zfail", env.commandStr); - check$1.commandParameter(zpass, stencilOps, prop + ".zpass", env.commandStr); - return [ - prop === S_STENCIL_OPBACK ? GL_BACK : GL_FRONT, - stencilOps[fail], - stencilOps[zfail], - stencilOps[zpass] - ]; - }, function(env2, scope, value2) { - var STENCIL_OPS = env2.constants.stencilOps; - check$1.optional(function() { - env2.assert(scope, value2 + "&&typeof " + value2 + '==="object"', "invalid " + prop); - }); - function read(name) { - check$1.optional(function() { - env2.assert(scope, '!("' + name + '" in ' + value2 + ")||(" + value2 + "." + name + " in " + STENCIL_OPS + ")", "invalid " + prop + "." + name + ", must be one of " + Object.keys(stencilOps)); - }); - return scope.def('"', name, '" in ', value2, "?", STENCIL_OPS, "[", value2, ".", name, "]:", GL_KEEP); - } - return [ - prop === S_STENCIL_OPBACK ? GL_BACK : GL_FRONT, - read("fail"), - read("zfail"), - read("zpass") - ]; - }); - case S_POLYGON_OFFSET_OFFSET: - return parseParam(function(value2) { - check$1.commandType(value2, "object", param, env.commandStr); - var factor = value2.factor | 0; - var units = value2.units | 0; - check$1.commandType(factor, "number", param + ".factor", env.commandStr); - check$1.commandType(units, "number", param + ".units", env.commandStr); - return [factor, units]; - }, function(env2, scope, value2) { - check$1.optional(function() { - env2.assert(scope, value2 + "&&typeof " + value2 + '==="object"', "invalid " + prop); - }); - var FACTOR = scope.def(value2, ".factor|0"); - var UNITS = scope.def(value2, ".units|0"); - return [FACTOR, UNITS]; - }); - case S_CULL_FACE: - return parseParam(function(value2) { - var face = 0; - if (value2 === "front") { - face = GL_FRONT; - } else if (value2 === "back") { - face = GL_BACK; - } - check$1.command(!!face, param, env.commandStr); - return face; - }, function(env2, scope, value2) { - check$1.optional(function() { - env2.assert(scope, value2 + '==="front"||' + value2 + '==="back"', "invalid cull.face"); - }); - return scope.def(value2, '==="front"?', GL_FRONT, ":", GL_BACK); - }); - case S_LINE_WIDTH: - return parseParam(function(value2) { - check$1.command(typeof value2 === "number" && value2 >= limits.lineWidthDims[0] && value2 <= limits.lineWidthDims[1], "invalid line width, must be a positive number between " + limits.lineWidthDims[0] + " and " + limits.lineWidthDims[1], env.commandStr); - return value2; - }, function(env2, scope, value2) { - check$1.optional(function() { - env2.assert(scope, "typeof " + value2 + '==="number"&&' + value2 + ">=" + limits.lineWidthDims[0] + "&&" + value2 + "<=" + limits.lineWidthDims[1], "invalid line width"); - }); - return value2; - }); - case S_FRONT_FACE: - return parseParam(function(value2) { - check$1.commandParameter(value2, orientationType, param, env.commandStr); - return orientationType[value2]; - }, function(env2, scope, value2) { - check$1.optional(function() { - env2.assert(scope, value2 + '==="cw"||' + value2 + '==="ccw"', "invalid frontFace, must be one of cw,ccw"); - }); - return scope.def(value2 + '==="cw"?' + GL_CW + ":" + GL_CCW); - }); - case S_COLOR_MASK: - return parseParam(function(value2) { - check$1.command(isArrayLike(value2) && value2.length === 4, "color.mask must be length 4 array", env.commandStr); - return value2.map(function(v3) { - return !!v3; - }); - }, function(env2, scope, value2) { - check$1.optional(function() { - env2.assert(scope, env2.shared.isArrayLike + "(" + value2 + ")&&" + value2 + ".length===4", "invalid color.mask"); - }); - return loop(4, function(i4) { - return "!!" + value2 + "[" + i4 + "]"; - }); - }); - case S_SAMPLE_COVERAGE: - return parseParam(function(value2) { - check$1.command(typeof value2 === "object" && value2, param, env.commandStr); - var sampleValue = "value" in value2 ? value2.value : 1; - var sampleInvert = !!value2.invert; - check$1.command(typeof sampleValue === "number" && sampleValue >= 0 && sampleValue <= 1, "sample.coverage.value must be a number between 0 and 1", env.commandStr); - return [sampleValue, sampleInvert]; - }, function(env2, scope, value2) { - check$1.optional(function() { - env2.assert(scope, value2 + "&&typeof " + value2 + '==="object"', "invalid sample.coverage"); - }); - var VALUE = scope.def('"value" in ', value2, "?+", value2, ".value:1"); - var INVERT = scope.def("!!", value2, ".invert"); - return [VALUE, INVERT]; - }); - } - }); - return STATE; - } - function parseUniforms(uniforms, env) { - var staticUniforms = uniforms.static; - var dynamicUniforms = uniforms.dynamic; - var UNIFORMS = {}; - Object.keys(staticUniforms).forEach(function(name) { - var value2 = staticUniforms[name]; - var result; - if (typeof value2 === "number" || typeof value2 === "boolean") { - result = createStaticDecl(function() { - return value2; - }); - } else if (typeof value2 === "function") { - var reglType = value2._reglType; - if (reglType === "texture2d" || reglType === "textureCube") { - result = createStaticDecl(function(env2) { - return env2.link(value2); - }); - } else if (reglType === "framebuffer" || reglType === "framebufferCube") { - check$1.command(value2.color.length > 0, 'missing color attachment for framebuffer sent to uniform "' + name + '"', env.commandStr); - result = createStaticDecl(function(env2) { - return env2.link(value2.color[0]); - }); - } else { - check$1.commandRaise('invalid data for uniform "' + name + '"', env.commandStr); - } - } else if (isArrayLike(value2)) { - result = createStaticDecl(function(env2) { - var ITEM = env2.global.def("[", loop(value2.length, function(i4) { - check$1.command(typeof value2[i4] === "number" || typeof value2[i4] === "boolean", "invalid uniform " + name, env2.commandStr); - return value2[i4]; - }), "]"); - return ITEM; - }); - } else { - check$1.commandRaise('invalid or missing data for uniform "' + name + '"', env.commandStr); - } - result.value = value2; - UNIFORMS[name] = result; - }); - Object.keys(dynamicUniforms).forEach(function(key) { - var dyn = dynamicUniforms[key]; - UNIFORMS[key] = createDynamicDecl(dyn, function(env2, scope) { - return env2.invoke(scope, dyn); - }); - }); - return UNIFORMS; - } - function parseAttributes(attributes, env) { - var staticAttributes = attributes.static; - var dynamicAttributes = attributes.dynamic; - var attributeDefs = {}; - Object.keys(staticAttributes).forEach(function(attribute) { - var value2 = staticAttributes[attribute]; - var id = stringStore.id(attribute); - var record = new AttributeRecord2(); - if (isBufferArgs(value2)) { - record.state = ATTRIB_STATE_POINTER; - record.buffer = bufferState.getBuffer(bufferState.create(value2, GL_ARRAY_BUFFER$2, false, true)); - record.type = 0; - } else { - var buffer = bufferState.getBuffer(value2); - if (buffer) { - record.state = ATTRIB_STATE_POINTER; - record.buffer = buffer; - record.type = 0; - } else { - check$1.command(typeof value2 === "object" && value2, "invalid data for attribute " + attribute, env.commandStr); - if ("constant" in value2) { - var constant2 = value2.constant; - record.buffer = "null"; - record.state = ATTRIB_STATE_CONSTANT; - if (typeof constant2 === "number") { - record.x = constant2; - } else { - check$1.command(isArrayLike(constant2) && constant2.length > 0 && constant2.length <= 4, "invalid constant for attribute " + attribute, env.commandStr); - CUTE_COMPONENTS.forEach(function(c5, i4) { - if (i4 < constant2.length) { - record[c5] = constant2[i4]; - } - }); - } - } else { - if (isBufferArgs(value2.buffer)) { - buffer = bufferState.getBuffer(bufferState.create(value2.buffer, GL_ARRAY_BUFFER$2, false, true)); - } else { - buffer = bufferState.getBuffer(value2.buffer); - } - check$1.command(!!buffer, 'missing buffer for attribute "' + attribute + '"', env.commandStr); - var offset = value2.offset | 0; - check$1.command(offset >= 0, 'invalid offset for attribute "' + attribute + '"', env.commandStr); - var stride = value2.stride | 0; - check$1.command(stride >= 0 && stride < 256, 'invalid stride for attribute "' + attribute + '", must be integer betweeen [0, 255]', env.commandStr); - var size14 = value2.size | 0; - check$1.command(!("size" in value2) || size14 > 0 && size14 <= 4, 'invalid size for attribute "' + attribute + '", must be 1,2,3,4', env.commandStr); - var normalized = !!value2.normalized; - var type2 = 0; - if ("type" in value2) { - check$1.commandParameter(value2.type, glTypes, "invalid type for attribute " + attribute, env.commandStr); - type2 = glTypes[value2.type]; - } - var divisor = value2.divisor | 0; - if ("divisor" in value2) { - check$1.command(divisor === 0 || extInstancing, 'cannot specify divisor for attribute "' + attribute + '", instancing not supported', env.commandStr); - check$1.command(divisor >= 0, 'invalid divisor for attribute "' + attribute + '"', env.commandStr); - } - check$1.optional(function() { - var command = env.commandStr; - var VALID_KEYS = [ - "buffer", - "offset", - "divisor", - "normalized", - "type", - "size", - "stride" - ]; - Object.keys(value2).forEach(function(prop) { - check$1.command(VALID_KEYS.indexOf(prop) >= 0, 'unknown parameter "' + prop + '" for attribute pointer "' + attribute + '" (valid parameters are ' + VALID_KEYS + ")", command); - }); - }); - record.buffer = buffer; - record.state = ATTRIB_STATE_POINTER; - record.size = size14; - record.normalized = normalized; - record.type = type2 || buffer.dtype; - record.offset = offset; - record.stride = stride; - record.divisor = divisor; - } - } - } - attributeDefs[attribute] = createStaticDecl(function(env2, scope) { - var cache3 = env2.attribCache; - if (id in cache3) { - return cache3[id]; - } - var result = { - isStream: false - }; - Object.keys(record).forEach(function(key) { - result[key] = record[key]; - }); - if (record.buffer) { - result.buffer = env2.link(record.buffer); - result.type = result.type || result.buffer + ".dtype"; - } - cache3[id] = result; - return result; - }); - }); - Object.keys(dynamicAttributes).forEach(function(attribute) { - var dyn = dynamicAttributes[attribute]; - function appendAttributeCode(env2, block) { - var VALUE = env2.invoke(block, dyn); - var shared = env2.shared; - var constants = env2.constants; - var IS_BUFFER_ARGS = shared.isBufferArgs; - var BUFFER_STATE = shared.buffer; - check$1.optional(function() { - env2.assert(block, VALUE + "&&(typeof " + VALUE + '==="object"||typeof ' + VALUE + '==="function")&&(' + IS_BUFFER_ARGS + "(" + VALUE + ")||" + BUFFER_STATE + ".getBuffer(" + VALUE + ")||" + BUFFER_STATE + ".getBuffer(" + VALUE + ".buffer)||" + IS_BUFFER_ARGS + "(" + VALUE + '.buffer)||("constant" in ' + VALUE + "&&(typeof " + VALUE + '.constant==="number"||' + shared.isArrayLike + "(" + VALUE + ".constant))))", 'invalid dynamic attribute "' + attribute + '"'); - }); - var result = { - isStream: block.def(false) - }; - var defaultRecord = new AttributeRecord2(); - defaultRecord.state = ATTRIB_STATE_POINTER; - Object.keys(defaultRecord).forEach(function(key) { - result[key] = block.def("" + defaultRecord[key]); - }); - var BUFFER = result.buffer; - var TYPE = result.type; - block("if(", IS_BUFFER_ARGS, "(", VALUE, ")){", result.isStream, "=true;", BUFFER, "=", BUFFER_STATE, ".createStream(", GL_ARRAY_BUFFER$2, ",", VALUE, ");", TYPE, "=", BUFFER, ".dtype;", "}else{", BUFFER, "=", BUFFER_STATE, ".getBuffer(", VALUE, ");", "if(", BUFFER, "){", TYPE, "=", BUFFER, ".dtype;", '}else if("constant" in ', VALUE, "){", result.state, "=", ATTRIB_STATE_CONSTANT, ";", "if(typeof " + VALUE + '.constant === "number"){', result[CUTE_COMPONENTS[0]], "=", VALUE, ".constant;", CUTE_COMPONENTS.slice(1).map(function(n3) { - return result[n3]; - }).join("="), "=0;", "}else{", CUTE_COMPONENTS.map(function(name, i4) { - return result[name] + "=" + VALUE + ".constant.length>" + i4 + "?" + VALUE + ".constant[" + i4 + "]:0;"; - }).join(""), "}}else{", "if(", IS_BUFFER_ARGS, "(", VALUE, ".buffer)){", BUFFER, "=", BUFFER_STATE, ".createStream(", GL_ARRAY_BUFFER$2, ",", VALUE, ".buffer);", "}else{", BUFFER, "=", BUFFER_STATE, ".getBuffer(", VALUE, ".buffer);", "}", TYPE, '="type" in ', VALUE, "?", constants.glTypes, "[", VALUE, ".type]:", BUFFER, ".dtype;", result.normalized, "=!!", VALUE, ".normalized;"); - function emitReadRecord(name) { - block(result[name], "=", VALUE, ".", name, "|0;"); - } - emitReadRecord("size"); - emitReadRecord("offset"); - emitReadRecord("stride"); - emitReadRecord("divisor"); - block("}}"); - block.exit("if(", result.isStream, "){", BUFFER_STATE, ".destroyStream(", BUFFER, ");", "}"); - return result; - } - attributeDefs[attribute] = createDynamicDecl(dyn, appendAttributeCode); - }); - return attributeDefs; - } - function parseVAO(options, env) { - var staticOptions = options.static; - var dynamicOptions = options.dynamic; - if (S_VAO in staticOptions) { - var vao = staticOptions[S_VAO]; - if (vao !== null && attributeState.getVAO(vao) === null) { - vao = attributeState.createVAO(vao); - } - return createStaticDecl(function(env2) { - return env2.link(attributeState.getVAO(vao)); - }); - } else if (S_VAO in dynamicOptions) { - var dyn = dynamicOptions[S_VAO]; - return createDynamicDecl(dyn, function(env2, scope) { - var vaoRef = env2.invoke(scope, dyn); - return scope.def(env2.shared.vao + ".getVAO(" + vaoRef + ")"); - }); - } - return null; - } - function parseContext(context) { - var staticContext = context.static; - var dynamicContext = context.dynamic; - var result = {}; - Object.keys(staticContext).forEach(function(name) { - var value2 = staticContext[name]; - result[name] = createStaticDecl(function(env, scope) { - if (typeof value2 === "number" || typeof value2 === "boolean") { - return "" + value2; - } else { - return env.link(value2); - } - }); - }); - Object.keys(dynamicContext).forEach(function(name) { - var dyn = dynamicContext[name]; - result[name] = createDynamicDecl(dyn, function(env, scope) { - return env.invoke(scope, dyn); - }); - }); - return result; - } - function parseArguments(options, attributes, uniforms, context, env) { - var staticOptions = options.static; - var dynamicOptions = options.dynamic; - check$1.optional(function() { - var KEY_NAMES = [ - S_FRAMEBUFFER, - S_VERT, - S_FRAG, - S_ELEMENTS, - S_PRIMITIVE, - S_OFFSET, - S_COUNT, - S_INSTANCES, - S_PROFILE, - S_VAO - ].concat(GL_STATE_NAMES); - function checkKeys(dict) { - Object.keys(dict).forEach(function(key) { - check$1.command(KEY_NAMES.indexOf(key) >= 0, 'unknown parameter "' + key + '"', env.commandStr); - }); - } - checkKeys(staticOptions); - checkKeys(dynamicOptions); - }); - var attribLocations = parseAttribLocations(options, attributes); - var framebuffer = parseFramebuffer(options, env); - var viewportAndScissor = parseViewportScissor(options, framebuffer, env); - var draw4 = parseDraw(options, env); - var state2 = parseGLState(options, env); - var shader = parseProgram(options, env, attribLocations); - function copyBox(name) { - var defn = viewportAndScissor[name]; - if (defn) { - state2[name] = defn; - } - } - copyBox(S_VIEWPORT); - copyBox(propName(S_SCISSOR_BOX)); - var dirty = Object.keys(state2).length > 0; - var result = { - framebuffer, - draw: draw4, - shader, - state: state2, - dirty, - scopeVAO: null, - drawVAO: null, - useVAO: false, - attributes: {} - }; - result.profile = parseProfile(options, env); - result.uniforms = parseUniforms(uniforms, env); - result.drawVAO = result.scopeVAO = parseVAO(options, env); - if (!result.drawVAO && shader.program && !attribLocations && extensions.angle_instanced_arrays) { - var useVAO = true; - var staticBindings = shader.program.attributes.map(function(attr) { - var binding = attributes.static[attr]; - useVAO = useVAO && !!binding; - return binding; - }); - if (useVAO && staticBindings.length > 0) { - var vao = attributeState.getVAO(attributeState.createVAO(staticBindings)); - result.drawVAO = new Declaration(null, null, null, function(env2, scope) { - return env2.link(vao); - }); - result.useVAO = true; - } - } - if (attribLocations) { - result.useVAO = true; - } else { - result.attributes = parseAttributes(attributes, env); - } - result.context = parseContext(context, env); - return result; - } - function emitContext(env, scope, context) { - var shared = env.shared; - var CONTEXT = shared.context; - var contextEnter = env.scope(); - Object.keys(context).forEach(function(name) { - scope.save(CONTEXT, "." + name); - var defn = context[name]; - var value2 = defn.append(env, scope); - if (Array.isArray(value2)) { - contextEnter(CONTEXT, ".", name, "=[", value2.join(), "];"); - } else { - contextEnter(CONTEXT, ".", name, "=", value2, ";"); - } - }); - scope(contextEnter); - } - function emitPollFramebuffer(env, scope, framebuffer, skipCheck) { - var shared = env.shared; - var GL = shared.gl; - var FRAMEBUFFER_STATE = shared.framebuffer; - var EXT_DRAW_BUFFERS; - if (extDrawBuffers) { - EXT_DRAW_BUFFERS = scope.def(shared.extensions, ".webgl_draw_buffers"); - } - var constants = env.constants; - var DRAW_BUFFERS = constants.drawBuffer; - var BACK_BUFFER = constants.backBuffer; - var NEXT; - if (framebuffer) { - NEXT = framebuffer.append(env, scope); - } else { - NEXT = scope.def(FRAMEBUFFER_STATE, ".next"); - } - if (!skipCheck) { - scope("if(", NEXT, "!==", FRAMEBUFFER_STATE, ".cur){"); - } - scope("if(", NEXT, "){", GL, ".bindFramebuffer(", GL_FRAMEBUFFER$2, ",", NEXT, ".framebuffer);"); - if (extDrawBuffers) { - scope(EXT_DRAW_BUFFERS, ".drawBuffersWEBGL(", DRAW_BUFFERS, "[", NEXT, ".colorAttachments.length]);"); - } - scope("}else{", GL, ".bindFramebuffer(", GL_FRAMEBUFFER$2, ",null);"); - if (extDrawBuffers) { - scope(EXT_DRAW_BUFFERS, ".drawBuffersWEBGL(", BACK_BUFFER, ");"); - } - scope("}", FRAMEBUFFER_STATE, ".cur=", NEXT, ";"); - if (!skipCheck) { - scope("}"); - } - } - function emitPollState(env, scope, args) { - var shared = env.shared; - var GL = shared.gl; - var CURRENT_VARS = env.current; - var NEXT_VARS = env.next; - var CURRENT_STATE = shared.current; - var NEXT_STATE = shared.next; - var block = env.cond(CURRENT_STATE, ".dirty"); - GL_STATE_NAMES.forEach(function(prop) { - var param = propName(prop); - if (param in args.state) { - return; - } - var NEXT, CURRENT; - if (param in NEXT_VARS) { - NEXT = NEXT_VARS[param]; - CURRENT = CURRENT_VARS[param]; - var parts = loop(currentState[param].length, function(i4) { - return block.def(NEXT, "[", i4, "]"); - }); - block(env.cond(parts.map(function(p4, i4) { - return p4 + "!==" + CURRENT + "[" + i4 + "]"; - }).join("||")).then(GL, ".", GL_VARIABLES[param], "(", parts, ");", parts.map(function(p4, i4) { - return CURRENT + "[" + i4 + "]=" + p4; - }).join(";"), ";")); - } else { - NEXT = block.def(NEXT_STATE, ".", param); - var ifte = env.cond(NEXT, "!==", CURRENT_STATE, ".", param); - block(ifte); - if (param in GL_FLAGS) { - ifte(env.cond(NEXT).then(GL, ".enable(", GL_FLAGS[param], ");").else(GL, ".disable(", GL_FLAGS[param], ");"), CURRENT_STATE, ".", param, "=", NEXT, ";"); - } else { - ifte(GL, ".", GL_VARIABLES[param], "(", NEXT, ");", CURRENT_STATE, ".", param, "=", NEXT, ";"); - } - } - }); - if (Object.keys(args.state).length === 0) { - block(CURRENT_STATE, ".dirty=false;"); - } - scope(block); - } - function emitSetOptions(env, scope, options, filter17) { - var shared = env.shared; - var CURRENT_VARS = env.current; - var CURRENT_STATE = shared.current; - var GL = shared.gl; - sortState(Object.keys(options)).forEach(function(param) { - var defn = options[param]; - if (filter17 && !filter17(defn)) { - return; - } - var variable = defn.append(env, scope); - if (GL_FLAGS[param]) { - var flag = GL_FLAGS[param]; - if (isStatic(defn)) { - if (variable) { - scope(GL, ".enable(", flag, ");"); - } else { - scope(GL, ".disable(", flag, ");"); - } - } else { - scope(env.cond(variable).then(GL, ".enable(", flag, ");").else(GL, ".disable(", flag, ");")); - } - scope(CURRENT_STATE, ".", param, "=", variable, ";"); - } else if (isArrayLike(variable)) { - var CURRENT = CURRENT_VARS[param]; - scope(GL, ".", GL_VARIABLES[param], "(", variable, ");", variable.map(function(v3, i4) { - return CURRENT + "[" + i4 + "]=" + v3; - }).join(";"), ";"); - } else { - scope(GL, ".", GL_VARIABLES[param], "(", variable, ");", CURRENT_STATE, ".", param, "=", variable, ";"); - } - }); - } - function injectExtensions(env, scope) { - if (extInstancing) { - env.instancing = scope.def(env.shared.extensions, ".angle_instanced_arrays"); - } - } - function emitProfile(env, scope, args, useScope, incrementCounter) { - var shared = env.shared; - var STATS = env.stats; - var CURRENT_STATE = shared.current; - var TIMER = shared.timer; - var profileArg = args.profile; - function perfCounter() { - if (typeof performance === "undefined") { - return "Date.now()"; - } else { - return "performance.now()"; - } - } - var CPU_START, QUERY_COUNTER; - function emitProfileStart(block) { - CPU_START = scope.def(); - block(CPU_START, "=", perfCounter(), ";"); - if (typeof incrementCounter === "string") { - block(STATS, ".count+=", incrementCounter, ";"); - } else { - block(STATS, ".count++;"); - } - if (timer3) { - if (useScope) { - QUERY_COUNTER = scope.def(); - block(QUERY_COUNTER, "=", TIMER, ".getNumPendingQueries();"); - } else { - block(TIMER, ".beginQuery(", STATS, ");"); - } - } - } - function emitProfileEnd(block) { - block(STATS, ".cpuTime+=", perfCounter(), "-", CPU_START, ";"); - if (timer3) { - if (useScope) { - block(TIMER, ".pushScopeStats(", QUERY_COUNTER, ",", TIMER, ".getNumPendingQueries(),", STATS, ");"); - } else { - block(TIMER, ".endQuery();"); - } - } - } - function scopeProfile(value2) { - var prev = scope.def(CURRENT_STATE, ".profile"); - scope(CURRENT_STATE, ".profile=", value2, ";"); - scope.exit(CURRENT_STATE, ".profile=", prev, ";"); - } - var USE_PROFILE; - if (profileArg) { - if (isStatic(profileArg)) { - if (profileArg.enable) { - emitProfileStart(scope); - emitProfileEnd(scope.exit); - scopeProfile("true"); - } else { - scopeProfile("false"); - } - return; - } - USE_PROFILE = profileArg.append(env, scope); - scopeProfile(USE_PROFILE); - } else { - USE_PROFILE = scope.def(CURRENT_STATE, ".profile"); - } - var start = env.block(); - emitProfileStart(start); - scope("if(", USE_PROFILE, "){", start, "}"); - var end2 = env.block(); - emitProfileEnd(end2); - scope.exit("if(", USE_PROFILE, "){", end2, "}"); - } - function emitAttributes(env, scope, args, attributes, filter17) { - var shared = env.shared; - function typeLength(x6) { - switch (x6) { - case GL_FLOAT_VEC2: - case GL_INT_VEC2: - case GL_BOOL_VEC2: - return 2; - case GL_FLOAT_VEC3: - case GL_INT_VEC3: - case GL_BOOL_VEC3: - return 3; - case GL_FLOAT_VEC4: - case GL_INT_VEC4: - case GL_BOOL_VEC4: - return 4; - default: - return 1; - } - } - function emitBindAttribute(ATTRIBUTE, size14, record) { - var GL = shared.gl; - var LOCATION = scope.def(ATTRIBUTE, ".location"); - var BINDING = scope.def(shared.attributes, "[", LOCATION, "]"); - var STATE = record.state; - var BUFFER = record.buffer; - var CONST_COMPONENTS = [ - record.x, - record.y, - record.z, - record.w - ]; - var COMMON_KEYS = [ - "buffer", - "normalized", - "offset", - "stride" - ]; - function emitBuffer() { - scope("if(!", BINDING, ".buffer){", GL, ".enableVertexAttribArray(", LOCATION, ");}"); - var TYPE = record.type; - var SIZE; - if (!record.size) { - SIZE = size14; - } else { - SIZE = scope.def(record.size, "||", size14); - } - scope("if(", BINDING, ".type!==", TYPE, "||", BINDING, ".size!==", SIZE, "||", COMMON_KEYS.map(function(key) { - return BINDING + "." + key + "!==" + record[key]; - }).join("||"), "){", GL, ".bindBuffer(", GL_ARRAY_BUFFER$2, ",", BUFFER, ".buffer);", GL, ".vertexAttribPointer(", [ - LOCATION, - SIZE, - TYPE, - record.normalized, - record.stride, - record.offset - ], ");", BINDING, ".type=", TYPE, ";", BINDING, ".size=", SIZE, ";", COMMON_KEYS.map(function(key) { - return BINDING + "." + key + "=" + record[key] + ";"; - }).join(""), "}"); - if (extInstancing) { - var DIVISOR = record.divisor; - scope("if(", BINDING, ".divisor!==", DIVISOR, "){", env.instancing, ".vertexAttribDivisorANGLE(", [LOCATION, DIVISOR], ");", BINDING, ".divisor=", DIVISOR, ";}"); - } - } - function emitConstant() { - scope("if(", BINDING, ".buffer){", GL, ".disableVertexAttribArray(", LOCATION, ");", BINDING, ".buffer=null;", "}if(", CUTE_COMPONENTS.map(function(c5, i4) { - return BINDING + "." + c5 + "!==" + CONST_COMPONENTS[i4]; - }).join("||"), "){", GL, ".vertexAttrib4f(", LOCATION, ",", CONST_COMPONENTS, ");", CUTE_COMPONENTS.map(function(c5, i4) { - return BINDING + "." + c5 + "=" + CONST_COMPONENTS[i4] + ";"; - }).join(""), "}"); - } - if (STATE === ATTRIB_STATE_POINTER) { - emitBuffer(); - } else if (STATE === ATTRIB_STATE_CONSTANT) { - emitConstant(); - } else { - scope("if(", STATE, "===", ATTRIB_STATE_POINTER, "){"); - emitBuffer(); - scope("}else{"); - emitConstant(); - scope("}"); - } - } - attributes.forEach(function(attribute) { - var name = attribute.name; - var arg = args.attributes[name]; - var record; - if (arg) { - if (!filter17(arg)) { - return; - } - record = arg.append(env, scope); - } else { - if (!filter17(SCOPE_DECL)) { - return; - } - var scopeAttrib = env.scopeAttrib(name); - check$1.optional(function() { - env.assert(scope, scopeAttrib + ".state", "missing attribute " + name); - }); - record = {}; - Object.keys(new AttributeRecord2()).forEach(function(key) { - record[key] = scope.def(scopeAttrib, ".", key); - }); - } - emitBindAttribute(env.link(attribute), typeLength(attribute.info.type), record); - }); - } - function emitUniforms(env, scope, args, uniforms, filter17) { - var shared = env.shared; - var GL = shared.gl; - var infix; - for (var i4 = 0; i4 < uniforms.length; ++i4) { - var uniform = uniforms[i4]; - var name = uniform.name; - var type2 = uniform.info.type; - var arg = args.uniforms[name]; - var UNIFORM = env.link(uniform); - var LOCATION = UNIFORM + ".location"; - var VALUE; - if (arg) { - if (!filter17(arg)) { - continue; - } - if (isStatic(arg)) { - var value2 = arg.value; - check$1.command(value2 !== null && typeof value2 !== "undefined", 'missing uniform "' + name + '"', env.commandStr); - if (type2 === GL_SAMPLER_2D || type2 === GL_SAMPLER_CUBE) { - check$1.command(typeof value2 === "function" && (type2 === GL_SAMPLER_2D && (value2._reglType === "texture2d" || value2._reglType === "framebuffer") || type2 === GL_SAMPLER_CUBE && (value2._reglType === "textureCube" || value2._reglType === "framebufferCube")), "invalid texture for uniform " + name, env.commandStr); - var TEX_VALUE = env.link(value2._texture || value2.color[0]._texture); - scope(GL, ".uniform1i(", LOCATION, ",", TEX_VALUE + ".bind());"); - scope.exit(TEX_VALUE, ".unbind();"); - } else if (type2 === GL_FLOAT_MAT2 || type2 === GL_FLOAT_MAT3 || type2 === GL_FLOAT_MAT4) { - check$1.optional(function() { - check$1.command(isArrayLike(value2), "invalid matrix for uniform " + name, env.commandStr); - check$1.command(type2 === GL_FLOAT_MAT2 && value2.length === 4 || type2 === GL_FLOAT_MAT3 && value2.length === 9 || type2 === GL_FLOAT_MAT4 && value2.length === 16, "invalid length for matrix uniform " + name, env.commandStr); - }); - var MAT_VALUE = env.global.def("new Float32Array([" + Array.prototype.slice.call(value2) + "])"); - var dim = 2; - if (type2 === GL_FLOAT_MAT3) { - dim = 3; - } else if (type2 === GL_FLOAT_MAT4) { - dim = 4; - } - scope(GL, ".uniformMatrix", dim, "fv(", LOCATION, ",false,", MAT_VALUE, ");"); - } else { - switch (type2) { - case GL_FLOAT$8: - check$1.commandType(value2, "number", "uniform " + name, env.commandStr); - infix = "1f"; - break; - case GL_FLOAT_VEC2: - check$1.command(isArrayLike(value2) && value2.length === 2, "uniform " + name, env.commandStr); - infix = "2f"; - break; - case GL_FLOAT_VEC3: - check$1.command(isArrayLike(value2) && value2.length === 3, "uniform " + name, env.commandStr); - infix = "3f"; - break; - case GL_FLOAT_VEC4: - check$1.command(isArrayLike(value2) && value2.length === 4, "uniform " + name, env.commandStr); - infix = "4f"; - break; - case GL_BOOL: - check$1.commandType(value2, "boolean", "uniform " + name, env.commandStr); - infix = "1i"; - break; - case GL_INT$3: - check$1.commandType(value2, "number", "uniform " + name, env.commandStr); - infix = "1i"; - break; - case GL_BOOL_VEC2: - check$1.command(isArrayLike(value2) && value2.length === 2, "uniform " + name, env.commandStr); - infix = "2i"; - break; - case GL_INT_VEC2: - check$1.command(isArrayLike(value2) && value2.length === 2, "uniform " + name, env.commandStr); - infix = "2i"; - break; - case GL_BOOL_VEC3: - check$1.command(isArrayLike(value2) && value2.length === 3, "uniform " + name, env.commandStr); - infix = "3i"; - break; - case GL_INT_VEC3: - check$1.command(isArrayLike(value2) && value2.length === 3, "uniform " + name, env.commandStr); - infix = "3i"; - break; - case GL_BOOL_VEC4: - check$1.command(isArrayLike(value2) && value2.length === 4, "uniform " + name, env.commandStr); - infix = "4i"; - break; - case GL_INT_VEC4: - check$1.command(isArrayLike(value2) && value2.length === 4, "uniform " + name, env.commandStr); - infix = "4i"; - break; - } - scope(GL, ".uniform", infix, "(", LOCATION, ",", isArrayLike(value2) ? Array.prototype.slice.call(value2) : value2, ");"); - } - continue; - } else { - VALUE = arg.append(env, scope); - } - } else { - if (!filter17(SCOPE_DECL)) { - continue; - } - VALUE = scope.def(shared.uniforms, "[", stringStore.id(name), "]"); - } - if (type2 === GL_SAMPLER_2D) { - check$1(!Array.isArray(VALUE), "must specify a scalar prop for textures"); - scope("if(", VALUE, "&&", VALUE, '._reglType==="framebuffer"){', VALUE, "=", VALUE, ".color[0];", "}"); - } else if (type2 === GL_SAMPLER_CUBE) { - check$1(!Array.isArray(VALUE), "must specify a scalar prop for cube maps"); - scope("if(", VALUE, "&&", VALUE, '._reglType==="framebufferCube"){', VALUE, "=", VALUE, ".color[0];", "}"); - } - check$1.optional(function() { - function emitCheck(pred, message) { - env.assert(scope, pred, 'bad data or missing for uniform "' + name + '". ' + message); - } - function checkType(type3) { - check$1(!Array.isArray(VALUE), "must not specify an array type for uniform"); - emitCheck("typeof " + VALUE + '==="' + type3 + '"', "invalid type, expected " + type3); - } - function checkVector(n3, type3) { - if (Array.isArray(VALUE)) { - check$1(VALUE.length === n3, "must have length " + n3); - } else { - emitCheck(shared.isArrayLike + "(" + VALUE + ")&&" + VALUE + ".length===" + n3, "invalid vector, should have length " + n3, env.commandStr); - } - } - function checkTexture(target) { - check$1(!Array.isArray(VALUE), "must not specify a value type"); - emitCheck("typeof " + VALUE + '==="function"&&' + VALUE + '._reglType==="texture' + (target === GL_TEXTURE_2D$3 ? "2d" : "Cube") + '"', "invalid texture type", env.commandStr); - } - switch (type2) { - case GL_INT$3: - checkType("number"); - break; - case GL_INT_VEC2: - checkVector(2, "number"); - break; - case GL_INT_VEC3: - checkVector(3, "number"); - break; - case GL_INT_VEC4: - checkVector(4, "number"); - break; - case GL_FLOAT$8: - checkType("number"); - break; - case GL_FLOAT_VEC2: - checkVector(2, "number"); - break; - case GL_FLOAT_VEC3: - checkVector(3, "number"); - break; - case GL_FLOAT_VEC4: - checkVector(4, "number"); - break; - case GL_BOOL: - checkType("boolean"); - break; - case GL_BOOL_VEC2: - checkVector(2, "boolean"); - break; - case GL_BOOL_VEC3: - checkVector(3, "boolean"); - break; - case GL_BOOL_VEC4: - checkVector(4, "boolean"); - break; - case GL_FLOAT_MAT2: - checkVector(4, "number"); - break; - case GL_FLOAT_MAT3: - checkVector(9, "number"); - break; - case GL_FLOAT_MAT4: - checkVector(16, "number"); - break; - case GL_SAMPLER_2D: - checkTexture(GL_TEXTURE_2D$3); - break; - case GL_SAMPLER_CUBE: - checkTexture(GL_TEXTURE_CUBE_MAP$2); - break; - } - }); - var unroll = 1; - switch (type2) { - case GL_SAMPLER_2D: - case GL_SAMPLER_CUBE: - var TEX = scope.def(VALUE, "._texture"); - scope(GL, ".uniform1i(", LOCATION, ",", TEX, ".bind());"); - scope.exit(TEX, ".unbind();"); - continue; - case GL_INT$3: - case GL_BOOL: - infix = "1i"; - break; - case GL_INT_VEC2: - case GL_BOOL_VEC2: - infix = "2i"; - unroll = 2; - break; - case GL_INT_VEC3: - case GL_BOOL_VEC3: - infix = "3i"; - unroll = 3; - break; - case GL_INT_VEC4: - case GL_BOOL_VEC4: - infix = "4i"; - unroll = 4; - break; - case GL_FLOAT$8: - infix = "1f"; - break; - case GL_FLOAT_VEC2: - infix = "2f"; - unroll = 2; - break; - case GL_FLOAT_VEC3: - infix = "3f"; - unroll = 3; - break; - case GL_FLOAT_VEC4: - infix = "4f"; - unroll = 4; - break; - case GL_FLOAT_MAT2: - infix = "Matrix2fv"; - break; - case GL_FLOAT_MAT3: - infix = "Matrix3fv"; - break; - case GL_FLOAT_MAT4: - infix = "Matrix4fv"; - break; - } - scope(GL, ".uniform", infix, "(", LOCATION, ","); - if (infix.charAt(0) === "M") { - var matSize = Math.pow(type2 - GL_FLOAT_MAT2 + 2, 2); - var STORAGE = env.global.def("new Float32Array(", matSize, ")"); - if (Array.isArray(VALUE)) { - scope("false,(", loop(matSize, function(i5) { - return STORAGE + "[" + i5 + "]=" + VALUE[i5]; - }), ",", STORAGE, ")"); - } else { - scope("false,(Array.isArray(", VALUE, ")||", VALUE, " instanceof Float32Array)?", VALUE, ":(", loop(matSize, function(i5) { - return STORAGE + "[" + i5 + "]=" + VALUE + "[" + i5 + "]"; - }), ",", STORAGE, ")"); - } - } else if (unroll > 1) { - scope(loop(unroll, function(i5) { - return Array.isArray(VALUE) ? VALUE[i5] : VALUE + "[" + i5 + "]"; - })); - } else { - check$1(!Array.isArray(VALUE), "uniform value must not be an array"); - scope(VALUE); - } - scope(");"); - } - } - function emitDraw(env, outer, inner, args) { - var shared = env.shared; - var GL = shared.gl; - var DRAW_STATE = shared.draw; - var drawOptions = args.draw; - function emitElements() { - var defn = drawOptions.elements; - var ELEMENTS2; - var scope = outer; - if (defn) { - if (defn.contextDep && args.contextDynamic || defn.propDep) { - scope = inner; - } - ELEMENTS2 = defn.append(env, scope); - } else { - ELEMENTS2 = scope.def(DRAW_STATE, ".", S_ELEMENTS); - } - if (ELEMENTS2) { - scope("if(" + ELEMENTS2 + ")" + GL + ".bindBuffer(" + GL_ELEMENT_ARRAY_BUFFER$1 + "," + ELEMENTS2 + ".buffer.buffer);"); - } - return ELEMENTS2; - } - function emitCount() { - var defn = drawOptions.count; - var COUNT2; - var scope = outer; - if (defn) { - if (defn.contextDep && args.contextDynamic || defn.propDep) { - scope = inner; - } - COUNT2 = defn.append(env, scope); - check$1.optional(function() { - if (defn.MISSING) { - env.assert(outer, "false", "missing vertex count"); - } - if (defn.DYNAMIC) { - env.assert(scope, COUNT2 + ">=0", "missing vertex count"); - } - }); - } else { - COUNT2 = scope.def(DRAW_STATE, ".", S_COUNT); - check$1.optional(function() { - env.assert(scope, COUNT2 + ">=0", "missing vertex count"); - }); - } - return COUNT2; - } - var ELEMENTS = emitElements(); - function emitValue(name) { - var defn = drawOptions[name]; - if (defn) { - if (defn.contextDep && args.contextDynamic || defn.propDep) { - return defn.append(env, inner); - } else { - return defn.append(env, outer); - } - } else { - return outer.def(DRAW_STATE, ".", name); - } - } - var PRIMITIVE = emitValue(S_PRIMITIVE); - var OFFSET = emitValue(S_OFFSET); - var COUNT = emitCount(); - if (typeof COUNT === "number") { - if (COUNT === 0) { - return; - } - } else { - inner("if(", COUNT, "){"); - inner.exit("}"); - } - var INSTANCES, EXT_INSTANCING; - if (extInstancing) { - INSTANCES = emitValue(S_INSTANCES); - EXT_INSTANCING = env.instancing; - } - var ELEMENT_TYPE = ELEMENTS + ".type"; - var elementsStatic = drawOptions.elements && isStatic(drawOptions.elements); - function emitInstancing() { - function drawElements() { - inner(EXT_INSTANCING, ".drawElementsInstancedANGLE(", [ - PRIMITIVE, - COUNT, - ELEMENT_TYPE, - OFFSET + "<<((" + ELEMENT_TYPE + "-" + GL_UNSIGNED_BYTE$8 + ")>>1)", - INSTANCES - ], ");"); - } - function drawArrays() { - inner(EXT_INSTANCING, ".drawArraysInstancedANGLE(", [PRIMITIVE, OFFSET, COUNT, INSTANCES], ");"); - } - if (ELEMENTS) { - if (!elementsStatic) { - inner("if(", ELEMENTS, "){"); - drawElements(); - inner("}else{"); - drawArrays(); - inner("}"); - } else { - drawElements(); - } - } else { - drawArrays(); - } - } - function emitRegular() { - function drawElements() { - inner(GL + ".drawElements(" + [ - PRIMITIVE, - COUNT, - ELEMENT_TYPE, - OFFSET + "<<((" + ELEMENT_TYPE + "-" + GL_UNSIGNED_BYTE$8 + ")>>1)" - ] + ");"); - } - function drawArrays() { - inner(GL + ".drawArrays(" + [PRIMITIVE, OFFSET, COUNT] + ");"); - } - if (ELEMENTS) { - if (!elementsStatic) { - inner("if(", ELEMENTS, "){"); - drawElements(); - inner("}else{"); - drawArrays(); - inner("}"); - } else { - drawElements(); - } - } else { - drawArrays(); - } - } - if (extInstancing && (typeof INSTANCES !== "number" || INSTANCES >= 0)) { - if (typeof INSTANCES === "string") { - inner("if(", INSTANCES, ">0){"); - emitInstancing(); - inner("}else if(", INSTANCES, "<0){"); - emitRegular(); - inner("}"); - } else { - emitInstancing(); - } - } else { - emitRegular(); - } - } - function createBody(emitBody, parentEnv, args, program, count2) { - var env = createREGLEnvironment(); - var scope = env.proc("body", count2); - check$1.optional(function() { - env.commandStr = parentEnv.commandStr; - env.command = env.link(parentEnv.commandStr); - }); - if (extInstancing) { - env.instancing = scope.def(env.shared.extensions, ".angle_instanced_arrays"); - } - emitBody(env, scope, args, program); - return env.compile().body; - } - function emitDrawBody(env, draw4, args, program) { - injectExtensions(env, draw4); - if (args.useVAO) { - if (args.drawVAO) { - draw4(env.shared.vao, ".setVAO(", args.drawVAO.append(env, draw4), ");"); - } else { - draw4(env.shared.vao, ".setVAO(", env.shared.vao, ".targetVAO);"); - } - } else { - draw4(env.shared.vao, ".setVAO(null);"); - emitAttributes(env, draw4, args, program.attributes, function() { - return true; - }); - } - emitUniforms(env, draw4, args, program.uniforms, function() { - return true; - }); - emitDraw(env, draw4, draw4, args); - } - function emitDrawProc(env, args) { - var draw4 = env.proc("draw", 1); - injectExtensions(env, draw4); - emitContext(env, draw4, args.context); - emitPollFramebuffer(env, draw4, args.framebuffer); - emitPollState(env, draw4, args); - emitSetOptions(env, draw4, args.state); - emitProfile(env, draw4, args, false, true); - var program = args.shader.progVar.append(env, draw4); - draw4(env.shared.gl, ".useProgram(", program, ".program);"); - if (args.shader.program) { - emitDrawBody(env, draw4, args, args.shader.program); - } else { - draw4(env.shared.vao, ".setVAO(null);"); - var drawCache = env.global.def("{}"); - var PROG_ID = draw4.def(program, ".id"); - var CACHED_PROC = draw4.def(drawCache, "[", PROG_ID, "]"); - draw4(env.cond(CACHED_PROC).then(CACHED_PROC, ".call(this,a0);").else(CACHED_PROC, "=", drawCache, "[", PROG_ID, "]=", env.link(function(program2) { - return createBody(emitDrawBody, env, args, program2, 1); - }), "(", program, ");", CACHED_PROC, ".call(this,a0);")); - } - if (Object.keys(args.state).length > 0) { - draw4(env.shared.current, ".dirty=true;"); - } - } - function emitBatchDynamicShaderBody(env, scope, args, program) { - env.batchId = "a1"; - injectExtensions(env, scope); - function all() { - return true; - } - emitAttributes(env, scope, args, program.attributes, all); - emitUniforms(env, scope, args, program.uniforms, all); - emitDraw(env, scope, scope, args); - } - function emitBatchBody(env, scope, args, program) { - injectExtensions(env, scope); - var contextDynamic = args.contextDep; - var BATCH_ID = scope.def(); - var PROP_LIST = "a0"; - var NUM_PROPS = "a1"; - var PROPS = scope.def(); - env.shared.props = PROPS; - env.batchId = BATCH_ID; - var outer = env.scope(); - var inner = env.scope(); - scope(outer.entry, "for(", BATCH_ID, "=0;", BATCH_ID, "<", NUM_PROPS, ";++", BATCH_ID, "){", PROPS, "=", PROP_LIST, "[", BATCH_ID, "];", inner, "}", outer.exit); - function isInnerDefn(defn) { - return defn.contextDep && contextDynamic || defn.propDep; - } - function isOuterDefn(defn) { - return !isInnerDefn(defn); - } - if (args.needsContext) { - emitContext(env, inner, args.context); - } - if (args.needsFramebuffer) { - emitPollFramebuffer(env, inner, args.framebuffer); - } - emitSetOptions(env, inner, args.state, isInnerDefn); - if (args.profile && isInnerDefn(args.profile)) { - emitProfile(env, inner, args, false, true); - } - if (!program) { - var progCache = env.global.def("{}"); - var PROGRAM = args.shader.progVar.append(env, inner); - var PROG_ID = inner.def(PROGRAM, ".id"); - var CACHED_PROC = inner.def(progCache, "[", PROG_ID, "]"); - inner(env.shared.gl, ".useProgram(", PROGRAM, ".program);", "if(!", CACHED_PROC, "){", CACHED_PROC, "=", progCache, "[", PROG_ID, "]=", env.link(function(program2) { - return createBody(emitBatchDynamicShaderBody, env, args, program2, 2); - }), "(", PROGRAM, ");}", CACHED_PROC, ".call(this,a0[", BATCH_ID, "],", BATCH_ID, ");"); - } else { - if (args.useVAO) { - if (args.drawVAO) { - if (isInnerDefn(args.drawVAO)) { - inner(env.shared.vao, ".setVAO(", args.drawVAO.append(env, inner), ");"); - } else { - outer(env.shared.vao, ".setVAO(", args.drawVAO.append(env, outer), ");"); - } - } else { - outer(env.shared.vao, ".setVAO(", env.shared.vao, ".targetVAO);"); - } - } else { - outer(env.shared.vao, ".setVAO(null);"); - emitAttributes(env, outer, args, program.attributes, isOuterDefn); - emitAttributes(env, inner, args, program.attributes, isInnerDefn); - } - emitUniforms(env, outer, args, program.uniforms, isOuterDefn); - emitUniforms(env, inner, args, program.uniforms, isInnerDefn); - emitDraw(env, outer, inner, args); - } - } - function emitBatchProc(env, args) { - var batch = env.proc("batch", 2); - env.batchId = "0"; - injectExtensions(env, batch); - var contextDynamic = false; - var needsContext = true; - Object.keys(args.context).forEach(function(name) { - contextDynamic = contextDynamic || args.context[name].propDep; - }); - if (!contextDynamic) { - emitContext(env, batch, args.context); - needsContext = false; - } - var framebuffer = args.framebuffer; - var needsFramebuffer = false; - if (framebuffer) { - if (framebuffer.propDep) { - contextDynamic = needsFramebuffer = true; - } else if (framebuffer.contextDep && contextDynamic) { - needsFramebuffer = true; - } - if (!needsFramebuffer) { - emitPollFramebuffer(env, batch, framebuffer); - } - } else { - emitPollFramebuffer(env, batch, null); - } - if (args.state.viewport && args.state.viewport.propDep) { - contextDynamic = true; - } - function isInnerDefn(defn) { - return defn.contextDep && contextDynamic || defn.propDep; - } - emitPollState(env, batch, args); - emitSetOptions(env, batch, args.state, function(defn) { - return !isInnerDefn(defn); - }); - if (!args.profile || !isInnerDefn(args.profile)) { - emitProfile(env, batch, args, false, "a1"); - } - args.contextDep = contextDynamic; - args.needsContext = needsContext; - args.needsFramebuffer = needsFramebuffer; - var progDefn = args.shader.progVar; - if (progDefn.contextDep && contextDynamic || progDefn.propDep) { - emitBatchBody(env, batch, args, null); - } else { - var PROGRAM = progDefn.append(env, batch); - batch(env.shared.gl, ".useProgram(", PROGRAM, ".program);"); - if (args.shader.program) { - emitBatchBody(env, batch, args, args.shader.program); - } else { - batch(env.shared.vao, ".setVAO(null);"); - var batchCache = env.global.def("{}"); - var PROG_ID = batch.def(PROGRAM, ".id"); - var CACHED_PROC = batch.def(batchCache, "[", PROG_ID, "]"); - batch(env.cond(CACHED_PROC).then(CACHED_PROC, ".call(this,a0,a1);").else(CACHED_PROC, "=", batchCache, "[", PROG_ID, "]=", env.link(function(program) { - return createBody(emitBatchBody, env, args, program, 2); - }), "(", PROGRAM, ");", CACHED_PROC, ".call(this,a0,a1);")); - } - } - if (Object.keys(args.state).length > 0) { - batch(env.shared.current, ".dirty=true;"); - } - } - function emitScopeProc(env, args) { - var scope = env.proc("scope", 3); - env.batchId = "a2"; - var shared = env.shared; - var CURRENT_STATE = shared.current; - emitContext(env, scope, args.context); - if (args.framebuffer) { - args.framebuffer.append(env, scope); - } - sortState(Object.keys(args.state)).forEach(function(name) { - var defn = args.state[name]; - var value2 = defn.append(env, scope); - if (isArrayLike(value2)) { - value2.forEach(function(v3, i4) { - scope.set(env.next[name], "[" + i4 + "]", v3); - }); - } else { - scope.set(shared.next, "." + name, value2); - } - }); - emitProfile(env, scope, args, true, true); - [S_ELEMENTS, S_OFFSET, S_COUNT, S_INSTANCES, S_PRIMITIVE].forEach(function(opt) { - var variable = args.draw[opt]; - if (!variable) { - return; - } - scope.set(shared.draw, "." + opt, "" + variable.append(env, scope)); - }); - Object.keys(args.uniforms).forEach(function(opt) { - var value2 = args.uniforms[opt].append(env, scope); - if (Array.isArray(value2)) { - value2 = "[" + value2.join() + "]"; - } - scope.set(shared.uniforms, "[" + stringStore.id(opt) + "]", value2); - }); - Object.keys(args.attributes).forEach(function(name) { - var record = args.attributes[name].append(env, scope); - var scopeAttrib = env.scopeAttrib(name); - Object.keys(new AttributeRecord2()).forEach(function(prop) { - scope.set(scopeAttrib, "." + prop, record[prop]); - }); - }); - if (args.scopeVAO) { - scope.set(shared.vao, ".targetVAO", args.scopeVAO.append(env, scope)); - } - function saveShader(name) { - var shader = args.shader[name]; - if (shader) { - scope.set(shared.shader, "." + name, shader.append(env, scope)); - } - } - saveShader(S_VERT); - saveShader(S_FRAG); - if (Object.keys(args.state).length > 0) { - scope(CURRENT_STATE, ".dirty=true;"); - scope.exit(CURRENT_STATE, ".dirty=true;"); - } - scope("a1(", env.shared.context, ",a0,", env.batchId, ");"); - } - function isDynamicObject(object) { - if (typeof object !== "object" || isArrayLike(object)) { - return; - } - var props = Object.keys(object); - for (var i4 = 0; i4 < props.length; ++i4) { - if (dynamic.isDynamic(object[props[i4]])) { - return true; - } - } - return false; - } - function splatObject(env, options, name) { - var object = options.static[name]; - if (!object || !isDynamicObject(object)) { - return; - } - var globals = env.global; - var keys6 = Object.keys(object); - var thisDep = false; - var contextDep = false; - var propDep = false; - var objectRef = env.global.def("{}"); - keys6.forEach(function(key) { - var value2 = object[key]; - if (dynamic.isDynamic(value2)) { - if (typeof value2 === "function") { - value2 = object[key] = dynamic.unbox(value2); - } - var deps = createDynamicDecl(value2, null); - thisDep = thisDep || deps.thisDep; - propDep = propDep || deps.propDep; - contextDep = contextDep || deps.contextDep; - } else { - globals(objectRef, ".", key, "="); - switch (typeof value2) { - case "number": - globals(value2); - break; - case "string": - globals('"', value2, '"'); - break; - case "object": - if (Array.isArray(value2)) { - globals("[", value2.join(), "]"); - } - break; - default: - globals(env.link(value2)); - break; - } - globals(";"); - } - }); - function appendBlock(env2, block) { - keys6.forEach(function(key) { - var value2 = object[key]; - if (!dynamic.isDynamic(value2)) { - return; - } - var ref = env2.invoke(block, value2); - block(objectRef, ".", key, "=", ref, ";"); - }); - } - options.dynamic[name] = new dynamic.DynamicVariable(DYN_THUNK, { - thisDep, - contextDep, - propDep, - ref: objectRef, - append: appendBlock - }); - delete options.static[name]; - } - function compileCommand(options, attributes, uniforms, context, stats2) { - var env = createREGLEnvironment(); - env.stats = env.link(stats2); - Object.keys(attributes.static).forEach(function(key) { - splatObject(env, attributes, key); - }); - NESTED_OPTIONS.forEach(function(name) { - splatObject(env, options, name); - }); - var args = parseArguments(options, attributes, uniforms, context, env); - emitDrawProc(env, args); - emitScopeProc(env, args); - emitBatchProc(env, args); - return extend4(env.compile(), { - destroy: function() { - args.shader.program.destroy(); - } - }); - } - return { - next: nextState, - current: currentState, - procs: function() { - var env = createREGLEnvironment(); - var poll = env.proc("poll"); - var refresh = env.proc("refresh"); - var common2 = env.block(); - poll(common2); - refresh(common2); - var shared = env.shared; - var GL = shared.gl; - var NEXT_STATE = shared.next; - var CURRENT_STATE = shared.current; - common2(CURRENT_STATE, ".dirty=false;"); - emitPollFramebuffer(env, poll); - emitPollFramebuffer(env, refresh, null, true); - var INSTANCING; - if (extInstancing) { - INSTANCING = env.link(extInstancing); - } - if (extensions.oes_vertex_array_object) { - refresh(env.link(extensions.oes_vertex_array_object), ".bindVertexArrayOES(null);"); - } - for (var i4 = 0; i4 < limits.maxAttributes; ++i4) { - var BINDING = refresh.def(shared.attributes, "[", i4, "]"); - var ifte = env.cond(BINDING, ".buffer"); - ifte.then(GL, ".enableVertexAttribArray(", i4, ");", GL, ".bindBuffer(", GL_ARRAY_BUFFER$2, ",", BINDING, ".buffer.buffer);", GL, ".vertexAttribPointer(", i4, ",", BINDING, ".size,", BINDING, ".type,", BINDING, ".normalized,", BINDING, ".stride,", BINDING, ".offset);").else(GL, ".disableVertexAttribArray(", i4, ");", GL, ".vertexAttrib4f(", i4, ",", BINDING, ".x,", BINDING, ".y,", BINDING, ".z,", BINDING, ".w);", BINDING, ".buffer=null;"); - refresh(ifte); - if (extInstancing) { - refresh(INSTANCING, ".vertexAttribDivisorANGLE(", i4, ",", BINDING, ".divisor);"); - } - } - refresh(env.shared.vao, ".currentVAO=null;", env.shared.vao, ".setVAO(", env.shared.vao, ".targetVAO);"); - Object.keys(GL_FLAGS).forEach(function(flag) { - var cap = GL_FLAGS[flag]; - var NEXT = common2.def(NEXT_STATE, ".", flag); - var block = env.block(); - block("if(", NEXT, "){", GL, ".enable(", cap, ")}else{", GL, ".disable(", cap, ")}", CURRENT_STATE, ".", flag, "=", NEXT, ";"); - refresh(block); - poll("if(", NEXT, "!==", CURRENT_STATE, ".", flag, "){", block, "}"); - }); - Object.keys(GL_VARIABLES).forEach(function(name) { - var func = GL_VARIABLES[name]; - var init = currentState[name]; - var NEXT, CURRENT; - var block = env.block(); - block(GL, ".", func, "("); - if (isArrayLike(init)) { - var n3 = init.length; - NEXT = env.global.def(NEXT_STATE, ".", name); - CURRENT = env.global.def(CURRENT_STATE, ".", name); - block(loop(n3, function(i5) { - return NEXT + "[" + i5 + "]"; - }), ");", loop(n3, function(i5) { - return CURRENT + "[" + i5 + "]=" + NEXT + "[" + i5 + "];"; - }).join("")); - poll("if(", loop(n3, function(i5) { - return NEXT + "[" + i5 + "]!==" + CURRENT + "[" + i5 + "]"; - }).join("||"), "){", block, "}"); - } else { - NEXT = common2.def(NEXT_STATE, ".", name); - CURRENT = common2.def(CURRENT_STATE, ".", name); - block(NEXT, ");", CURRENT_STATE, ".", name, "=", NEXT, ";"); - poll("if(", NEXT, "!==", CURRENT, "){", block, "}"); - } - refresh(block); - }); - return env.compile(); - }(), - compile: compileCommand - }; - } - function stats() { - return { - vaoCount: 0, - bufferCount: 0, - elementsCount: 0, - framebufferCount: 0, - shaderCount: 0, - textureCount: 0, - cubeCount: 0, - renderbufferCount: 0, - maxTextureUnits: 0 - }; - } - var GL_QUERY_RESULT_EXT = 34918; - var GL_QUERY_RESULT_AVAILABLE_EXT = 34919; - var GL_TIME_ELAPSED_EXT = 35007; - var createTimer = function(gl2, extensions) { - if (!extensions.ext_disjoint_timer_query) { - return null; - } - var queryPool = []; - function allocQuery() { - return queryPool.pop() || extensions.ext_disjoint_timer_query.createQueryEXT(); - } - function freeQuery(query) { - queryPool.push(query); - } - var pendingQueries = []; - function beginQuery(stats2) { - var query = allocQuery(); - extensions.ext_disjoint_timer_query.beginQueryEXT(GL_TIME_ELAPSED_EXT, query); - pendingQueries.push(query); - pushScopeStats(pendingQueries.length - 1, pendingQueries.length, stats2); - } - function endQuery() { - extensions.ext_disjoint_timer_query.endQueryEXT(GL_TIME_ELAPSED_EXT); - } - function PendingStats() { - this.startQueryIndex = -1; - this.endQueryIndex = -1; - this.sum = 0; - this.stats = null; - } - var pendingStatsPool = []; - function allocPendingStats() { - return pendingStatsPool.pop() || new PendingStats(); - } - function freePendingStats(pendingStats2) { - pendingStatsPool.push(pendingStats2); - } - var pendingStats = []; - function pushScopeStats(start, end2, stats2) { - var ps = allocPendingStats(); - ps.startQueryIndex = start; - ps.endQueryIndex = end2; - ps.sum = 0; - ps.stats = stats2; - pendingStats.push(ps); - } - var timeSum = []; - var queryPtr = []; - function update15() { - var ptr, i4; - var n3 = pendingQueries.length; - if (n3 === 0) { - return; - } - queryPtr.length = Math.max(queryPtr.length, n3 + 1); - timeSum.length = Math.max(timeSum.length, n3 + 1); - timeSum[0] = 0; - queryPtr[0] = 0; - var queryTime = 0; - ptr = 0; - for (i4 = 0; i4 < pendingQueries.length; ++i4) { - var query = pendingQueries[i4]; - if (extensions.ext_disjoint_timer_query.getQueryObjectEXT(query, GL_QUERY_RESULT_AVAILABLE_EXT)) { - queryTime += extensions.ext_disjoint_timer_query.getQueryObjectEXT(query, GL_QUERY_RESULT_EXT); - freeQuery(query); - } else { - pendingQueries[ptr++] = query; - } - timeSum[i4 + 1] = queryTime; - queryPtr[i4 + 1] = ptr; - } - pendingQueries.length = ptr; - ptr = 0; - for (i4 = 0; i4 < pendingStats.length; ++i4) { - var stats2 = pendingStats[i4]; - var start = stats2.startQueryIndex; - var end2 = stats2.endQueryIndex; - stats2.sum += timeSum[end2] - timeSum[start]; - var startPtr = queryPtr[start]; - var endPtr = queryPtr[end2]; - if (endPtr === startPtr) { - stats2.stats.gpuTime += stats2.sum / 1e6; - freePendingStats(stats2); - } else { - stats2.startQueryIndex = startPtr; - stats2.endQueryIndex = endPtr; - pendingStats[ptr++] = stats2; - } - } - pendingStats.length = ptr; - } - return { - beginQuery, - endQuery, - pushScopeStats, - update: update15, - getNumPendingQueries: function() { - return pendingQueries.length; - }, - clear: function() { - queryPool.push.apply(queryPool, pendingQueries); - for (var i4 = 0; i4 < queryPool.length; i4++) { - extensions.ext_disjoint_timer_query.deleteQueryEXT(queryPool[i4]); - } - pendingQueries.length = 0; - queryPool.length = 0; - }, - restore: function() { - pendingQueries.length = 0; - queryPool.length = 0; - } - }; - }; - var GL_COLOR_BUFFER_BIT = 16384; - var GL_DEPTH_BUFFER_BIT = 256; - var GL_STENCIL_BUFFER_BIT = 1024; - var GL_ARRAY_BUFFER = 34962; - var CONTEXT_LOST_EVENT = "webglcontextlost"; - var CONTEXT_RESTORED_EVENT = "webglcontextrestored"; - var DYN_PROP = 1; - var DYN_CONTEXT = 2; - var DYN_STATE = 3; - function find11(haystack, needle) { - for (var i4 = 0; i4 < haystack.length; ++i4) { - if (haystack[i4] === needle) { - return i4; - } - } - return -1; - } - function wrapREGL(args) { - var config = parseArgs(args); - if (!config) { - return null; - } - var gl2 = config.gl; - var glAttributes = gl2.getContextAttributes(); - var contextLost = gl2.isContextLost(); - var extensionState = createExtensionCache(gl2, config); - if (!extensionState) { - return null; - } - var stringStore = createStringStore(); - var stats$$1 = stats(); - var extensions = extensionState.extensions; - var timer3 = createTimer(gl2, extensions); - var START_TIME = clock2(); - var WIDTH = gl2.drawingBufferWidth; - var HEIGHT = gl2.drawingBufferHeight; - var contextState = { - tick: 0, - time: 0, - viewportWidth: WIDTH, - viewportHeight: HEIGHT, - framebufferWidth: WIDTH, - framebufferHeight: HEIGHT, - drawingBufferWidth: WIDTH, - drawingBufferHeight: HEIGHT, - pixelRatio: config.pixelRatio - }; - var uniformState = {}; - var drawState = { - elements: null, - primitive: 4, - count: -1, - offset: 0, - instances: -1 - }; - var limits = wrapLimits(gl2, extensions); - var bufferState = wrapBufferState(gl2, stats$$1, config, destroyBuffer); - var attributeState = wrapAttributeState(gl2, extensions, limits, stats$$1, bufferState); - function destroyBuffer(buffer) { - return attributeState.destroyBuffer(buffer); - } - var elementState = wrapElementsState(gl2, extensions, bufferState, stats$$1); - var shaderState = wrapShaderState(gl2, stringStore, stats$$1, config); - var textureState = createTextureSet(gl2, extensions, limits, function() { - core2.procs.poll(); - }, contextState, stats$$1, config); - var renderbufferState = wrapRenderbuffers(gl2, extensions, limits, stats$$1, config); - var framebufferState = wrapFBOState(gl2, extensions, limits, textureState, renderbufferState, stats$$1); - var core2 = reglCore(gl2, stringStore, extensions, limits, bufferState, elementState, textureState, framebufferState, uniformState, attributeState, shaderState, drawState, contextState, timer3, config); - var readPixels = wrapReadPixels(gl2, framebufferState, core2.procs.poll, contextState, glAttributes, extensions, limits); - var nextState = core2.next; - var canvas = gl2.canvas; - var rafCallbacks = []; - var lossCallbacks = []; - var restoreCallbacks = []; - var destroyCallbacks = [config.onDestroy]; - var activeRAF = null; - function handleRAF() { - if (rafCallbacks.length === 0) { - if (timer3) { - timer3.update(); - } - activeRAF = null; - return; - } - activeRAF = raf.next(handleRAF); - poll(); - for (var i4 = rafCallbacks.length - 1; i4 >= 0; --i4) { - var cb = rafCallbacks[i4]; - if (cb) { - cb(contextState, null, 0); - } - } - gl2.flush(); - if (timer3) { - timer3.update(); - } - } - function startRAF() { - if (!activeRAF && rafCallbacks.length > 0) { - activeRAF = raf.next(handleRAF); - } - } - function stopRAF() { - if (activeRAF) { - raf.cancel(handleRAF); - activeRAF = null; - } - } - function handleContextLoss(event) { - event.preventDefault(); - contextLost = true; - stopRAF(); - lossCallbacks.forEach(function(cb) { - cb(); - }); - } - function handleContextRestored(event) { - gl2.getError(); - contextLost = false; - extensionState.restore(); - shaderState.restore(); - bufferState.restore(); - textureState.restore(); - renderbufferState.restore(); - framebufferState.restore(); - attributeState.restore(); - if (timer3) { - timer3.restore(); - } - core2.procs.refresh(); - startRAF(); - restoreCallbacks.forEach(function(cb) { - cb(); - }); - } - if (canvas) { - canvas.addEventListener(CONTEXT_LOST_EVENT, handleContextLoss, false); - canvas.addEventListener(CONTEXT_RESTORED_EVENT, handleContextRestored, false); - } - function destroy() { - rafCallbacks.length = 0; - stopRAF(); - if (canvas) { - canvas.removeEventListener(CONTEXT_LOST_EVENT, handleContextLoss); - canvas.removeEventListener(CONTEXT_RESTORED_EVENT, handleContextRestored); - } - shaderState.clear(); - framebufferState.clear(); - renderbufferState.clear(); - textureState.clear(); - elementState.clear(); - bufferState.clear(); - attributeState.clear(); - if (timer3) { - timer3.clear(); - } - destroyCallbacks.forEach(function(cb) { - cb(); - }); - } - function compileProcedure(options) { - check$1(!!options, "invalid args to regl({...})"); - check$1.type(options, "object", "invalid args to regl({...})"); - function flattenNestedOptions(options2) { - var result = extend4({}, options2); - delete result.uniforms; - delete result.attributes; - delete result.context; - delete result.vao; - if ("stencil" in result && result.stencil.op) { - result.stencil.opBack = result.stencil.opFront = result.stencil.op; - delete result.stencil.op; - } - function merge3(name) { - if (name in result) { - var child = result[name]; - delete result[name]; - Object.keys(child).forEach(function(prop) { - result[name + "." + prop] = child[prop]; - }); - } - } - merge3("blend"); - merge3("depth"); - merge3("cull"); - merge3("stencil"); - merge3("polygonOffset"); - merge3("scissor"); - merge3("sample"); - if ("vao" in options2) { - result.vao = options2.vao; - } - return result; - } - function separateDynamic(object, useArrays) { - var staticItems = {}; - var dynamicItems = {}; - Object.keys(object).forEach(function(option) { - var value2 = object[option]; - if (dynamic.isDynamic(value2)) { - dynamicItems[option] = dynamic.unbox(value2, option); - return; - } else if (useArrays && Array.isArray(value2)) { - for (var i4 = 0; i4 < value2.length; ++i4) { - if (dynamic.isDynamic(value2[i4])) { - dynamicItems[option] = dynamic.unbox(value2, option); - return; - } - } - } - staticItems[option] = value2; - }); - return { - dynamic: dynamicItems, - static: staticItems - }; - } - var context = separateDynamic(options.context || {}, true); - var uniforms = separateDynamic(options.uniforms || {}, true); - var attributes = separateDynamic(options.attributes || {}, false); - var opts = separateDynamic(flattenNestedOptions(options), false); - var stats$$12 = { - gpuTime: 0, - cpuTime: 0, - count: 0 - }; - var compiled = core2.compile(opts, attributes, uniforms, context, stats$$12); - var draw4 = compiled.draw; - var batch = compiled.batch; - var scope = compiled.scope; - var EMPTY_ARRAY = []; - function reserve(count2) { - while (EMPTY_ARRAY.length < count2) { - EMPTY_ARRAY.push(null); - } - return EMPTY_ARRAY; - } - function REGLCommand(args2, body) { - var i4; - if (contextLost) { - check$1.raise("context lost"); - } - if (typeof args2 === "function") { - return scope.call(this, null, args2, 0); - } else if (typeof body === "function") { - if (typeof args2 === "number") { - for (i4 = 0; i4 < args2; ++i4) { - scope.call(this, null, body, i4); - } - } else if (Array.isArray(args2)) { - for (i4 = 0; i4 < args2.length; ++i4) { - scope.call(this, args2[i4], body, i4); - } - } else { - return scope.call(this, args2, body, 0); - } - } else if (typeof args2 === "number") { - if (args2 > 0) { - return batch.call(this, reserve(args2 | 0), args2 | 0); - } - } else if (Array.isArray(args2)) { - if (args2.length) { - return batch.call(this, args2, args2.length); - } - } else { - return draw4.call(this, args2); - } - } - return extend4(REGLCommand, { - stats: stats$$12, - destroy: function() { - compiled.destroy(); - } - }); - } - var setFBO = framebufferState.setFBO = compileProcedure({ - framebuffer: dynamic.define.call(null, DYN_PROP, "framebuffer") - }); - function clearImpl(_8, options) { - var clearFlags = 0; - core2.procs.poll(); - var c5 = options.color; - if (c5) { - gl2.clearColor(+c5[0] || 0, +c5[1] || 0, +c5[2] || 0, +c5[3] || 0); - clearFlags |= GL_COLOR_BUFFER_BIT; - } - if ("depth" in options) { - gl2.clearDepth(+options.depth); - clearFlags |= GL_DEPTH_BUFFER_BIT; - } - if ("stencil" in options) { - gl2.clearStencil(options.stencil | 0); - clearFlags |= GL_STENCIL_BUFFER_BIT; - } - check$1(!!clearFlags, "called regl.clear with no buffer specified"); - gl2.clear(clearFlags); - } - function clear(options) { - check$1(typeof options === "object" && options, "regl.clear() takes an object as input"); - if ("framebuffer" in options) { - if (options.framebuffer && options.framebuffer_reglType === "framebufferCube") { - for (var i4 = 0; i4 < 6; ++i4) { - setFBO(extend4({ - framebuffer: options.framebuffer.faces[i4] - }, options), clearImpl); - } - } else { - setFBO(options, clearImpl); - } - } else { - clearImpl(null, options); - } - } - function frame2(cb) { - check$1.type(cb, "function", "regl.frame() callback must be a function"); - rafCallbacks.push(cb); - function cancel() { - var i4 = find11(rafCallbacks, cb); - check$1(i4 >= 0, "cannot cancel a frame twice"); - function pendingCancel() { - var index2 = find11(rafCallbacks, pendingCancel); - rafCallbacks[index2] = rafCallbacks[rafCallbacks.length - 1]; - rafCallbacks.length -= 1; - if (rafCallbacks.length <= 0) { - stopRAF(); - } - } - rafCallbacks[i4] = pendingCancel; - } - startRAF(); - return { - cancel - }; - } - function pollViewport() { - var viewport = nextState.viewport; - var scissorBox = nextState.scissor_box; - viewport[0] = viewport[1] = scissorBox[0] = scissorBox[1] = 0; - contextState.viewportWidth = contextState.framebufferWidth = contextState.drawingBufferWidth = viewport[2] = scissorBox[2] = gl2.drawingBufferWidth; - contextState.viewportHeight = contextState.framebufferHeight = contextState.drawingBufferHeight = viewport[3] = scissorBox[3] = gl2.drawingBufferHeight; - } - function poll() { - contextState.tick += 1; - contextState.time = now2(); - pollViewport(); - core2.procs.poll(); - } - function refresh() { - textureState.refresh(); - pollViewport(); - core2.procs.refresh(); - if (timer3) { - timer3.update(); - } - } - function now2() { - return (clock2() - START_TIME) / 1e3; - } - refresh(); - function addListener(event, callback) { - check$1.type(callback, "function", "listener callback must be a function"); - var callbacks; - switch (event) { - case "frame": - return frame2(callback); - case "lost": - callbacks = lossCallbacks; - break; - case "restore": - callbacks = restoreCallbacks; - break; - case "destroy": - callbacks = destroyCallbacks; - break; - default: - check$1.raise("invalid event, must be one of frame,lost,restore,destroy"); - } - callbacks.push(callback); - return { - cancel: function() { - for (var i4 = 0; i4 < callbacks.length; ++i4) { - if (callbacks[i4] === callback) { - callbacks[i4] = callbacks[callbacks.length - 1]; - callbacks.pop(); - return; - } - } - } - }; - } - var regl2 = extend4(compileProcedure, { - clear, - prop: dynamic.define.bind(null, DYN_PROP), - context: dynamic.define.bind(null, DYN_CONTEXT), - this: dynamic.define.bind(null, DYN_STATE), - draw: compileProcedure({}), - buffer: function(options) { - return bufferState.create(options, GL_ARRAY_BUFFER, false, false); - }, - elements: function(options) { - return elementState.create(options, false); - }, - texture: textureState.create2D, - cube: textureState.createCube, - renderbuffer: renderbufferState.create, - framebuffer: framebufferState.create, - framebufferCube: framebufferState.createCube, - vao: attributeState.createVAO, - attributes: glAttributes, - frame: frame2, - on: addListener, - limits, - hasExtension: function(name) { - return limits.extensions.indexOf(name.toLowerCase()) >= 0; - }, - read: readPixels, - destroy, - _gl: gl2, - _refresh: refresh, - poll: function() { - poll(); - if (timer3) { - timer3.update(); - } - }, - now: now2, - stats: stats$$1 - }); - config.onDone(null, regl2); - return regl2; - } - return wrapREGL; - }); - } -}); - -// node_modules/gl-vec2/epsilon.js -var require_epsilon = __commonJS({ - "node_modules/gl-vec2/epsilon.js"(exports, module2) { - module2.exports = 1e-6; - } -}); - -// node_modules/gl-vec2/create.js -var require_create = __commonJS({ - "node_modules/gl-vec2/create.js"(exports, module2) { - module2.exports = create8; - function create8() { - var out = new Float32Array(2); - out[0] = 0; - out[1] = 0; - return out; - } - } -}); - -// node_modules/gl-vec2/clone.js -var require_clone2 = __commonJS({ - "node_modules/gl-vec2/clone.js"(exports, module2) { - module2.exports = clone41; - function clone41(a4) { - var out = new Float32Array(2); - out[0] = a4[0]; - out[1] = a4[1]; - return out; - } - } -}); - -// node_modules/gl-vec2/fromValues.js -var require_fromValues = __commonJS({ - "node_modules/gl-vec2/fromValues.js"(exports, module2) { - module2.exports = fromValues7; - function fromValues7(x6, y5) { - var out = new Float32Array(2); - out[0] = x6; - out[1] = y5; - return out; - } - } -}); - -// node_modules/gl-vec2/copy.js -var require_copy = __commonJS({ - "node_modules/gl-vec2/copy.js"(exports, module2) { - module2.exports = copy8; - function copy8(out, a4) { - out[0] = a4[0]; - out[1] = a4[1]; - return out; - } - } -}); - -// node_modules/gl-vec2/set.js -var require_set2 = __commonJS({ - "node_modules/gl-vec2/set.js"(exports, module2) { - module2.exports = set13; - function set13(out, x6, y5) { - out[0] = x6; - out[1] = y5; - return out; - } - } -}); - -// node_modules/gl-vec2/equals.js -var require_equals = __commonJS({ - "node_modules/gl-vec2/equals.js"(exports, module2) { - module2.exports = equals7; - var EPSILON3 = require_epsilon(); - function equals7(a4, b10) { - var a0 = a4[0]; - var a1 = a4[1]; - var b02 = b10[0]; - var b12 = b10[1]; - return Math.abs(a0 - b02) <= EPSILON3 * Math.max(1, Math.abs(a0), Math.abs(b02)) && Math.abs(a1 - b12) <= EPSILON3 * Math.max(1, Math.abs(a1), Math.abs(b12)); - } - } -}); - -// node_modules/gl-vec2/exactEquals.js -var require_exactEquals = __commonJS({ - "node_modules/gl-vec2/exactEquals.js"(exports, module2) { - module2.exports = exactEquals7; - function exactEquals7(a4, b10) { - return a4[0] === b10[0] && a4[1] === b10[1]; - } - } -}); - -// node_modules/gl-vec2/add.js -var require_add = __commonJS({ - "node_modules/gl-vec2/add.js"(exports, module2) { - module2.exports = add8; - function add8(out, a4, b10) { - out[0] = a4[0] + b10[0]; - out[1] = a4[1] + b10[1]; - return out; - } - } -}); - -// node_modules/gl-vec2/subtract.js -var require_subtract = __commonJS({ - "node_modules/gl-vec2/subtract.js"(exports, module2) { - module2.exports = subtract6; - function subtract6(out, a4, b10) { - out[0] = a4[0] - b10[0]; - out[1] = a4[1] - b10[1]; - return out; - } - } -}); - -// node_modules/gl-vec2/sub.js -var require_sub = __commonJS({ - "node_modules/gl-vec2/sub.js"(exports, module2) { - module2.exports = require_subtract(); - } -}); - -// node_modules/gl-vec2/multiply.js -var require_multiply = __commonJS({ - "node_modules/gl-vec2/multiply.js"(exports, module2) { - module2.exports = multiply7; - function multiply7(out, a4, b10) { - out[0] = a4[0] * b10[0]; - out[1] = a4[1] * b10[1]; - return out; - } - } -}); - -// node_modules/gl-vec2/mul.js -var require_mul = __commonJS({ - "node_modules/gl-vec2/mul.js"(exports, module2) { - module2.exports = require_multiply(); - } -}); - -// node_modules/gl-vec2/divide.js -var require_divide = __commonJS({ - "node_modules/gl-vec2/divide.js"(exports, module2) { - module2.exports = divide4; - function divide4(out, a4, b10) { - out[0] = a4[0] / b10[0]; - out[1] = a4[1] / b10[1]; - return out; - } - } -}); - -// node_modules/gl-vec2/div.js -var require_div = __commonJS({ - "node_modules/gl-vec2/div.js"(exports, module2) { - module2.exports = require_divide(); - } -}); - -// node_modules/gl-vec2/inverse.js -var require_inverse = __commonJS({ - "node_modules/gl-vec2/inverse.js"(exports, module2) { - module2.exports = inverse4; - function inverse4(out, a4) { - out[0] = 1 / a4[0]; - out[1] = 1 / a4[1]; - return out; - } - } -}); - -// node_modules/gl-vec2/min.js -var require_min2 = __commonJS({ - "node_modules/gl-vec2/min.js"(exports, module2) { - module2.exports = min13; - function min13(out, a4, b10) { - out[0] = Math.min(a4[0], b10[0]); - out[1] = Math.min(a4[1], b10[1]); - return out; - } - } -}); - -// node_modules/gl-vec2/max.js -var require_max2 = __commonJS({ - "node_modules/gl-vec2/max.js"(exports, module2) { - module2.exports = max15; - function max15(out, a4, b10) { - out[0] = Math.max(a4[0], b10[0]); - out[1] = Math.max(a4[1], b10[1]); - return out; - } - } -}); - -// node_modules/gl-vec2/rotate.js -var require_rotate = __commonJS({ - "node_modules/gl-vec2/rotate.js"(exports, module2) { - module2.exports = rotate8; - function rotate8(out, a4, angle3) { - var c5 = Math.cos(angle3), s4 = Math.sin(angle3); - var x6 = a4[0], y5 = a4[1]; - out[0] = x6 * c5 - y5 * s4; - out[1] = x6 * s4 + y5 * c5; - return out; - } - } -}); - -// node_modules/gl-vec2/floor.js -var require_floor = __commonJS({ - "node_modules/gl-vec2/floor.js"(exports, module2) { - module2.exports = floor4; - function floor4(out, a4) { - out[0] = Math.floor(a4[0]); - out[1] = Math.floor(a4[1]); - return out; - } - } -}); - -// node_modules/gl-vec2/ceil.js -var require_ceil = __commonJS({ - "node_modules/gl-vec2/ceil.js"(exports, module2) { - module2.exports = ceil4; - function ceil4(out, a4) { - out[0] = Math.ceil(a4[0]); - out[1] = Math.ceil(a4[1]); - return out; - } - } -}); - -// node_modules/gl-vec2/round.js -var require_round = __commonJS({ - "node_modules/gl-vec2/round.js"(exports, module2) { - module2.exports = round5; - function round5(out, a4) { - out[0] = Math.round(a4[0]); - out[1] = Math.round(a4[1]); - return out; - } - } -}); - -// node_modules/gl-vec2/scale.js -var require_scale = __commonJS({ - "node_modules/gl-vec2/scale.js"(exports, module2) { - module2.exports = scale12; - function scale12(out, a4, b10) { - out[0] = a4[0] * b10; - out[1] = a4[1] * b10; - return out; - } - } -}); - -// node_modules/gl-vec2/scaleAndAdd.js -var require_scaleAndAdd = __commonJS({ - "node_modules/gl-vec2/scaleAndAdd.js"(exports, module2) { - module2.exports = scaleAndAdd4; - function scaleAndAdd4(out, a4, b10, scale12) { - out[0] = a4[0] + b10[0] * scale12; - out[1] = a4[1] + b10[1] * scale12; - return out; - } - } -}); - -// node_modules/gl-vec2/distance.js -var require_distance = __commonJS({ - "node_modules/gl-vec2/distance.js"(exports, module2) { - module2.exports = distance15; - function distance15(a4, b10) { - var x6 = b10[0] - a4[0], y5 = b10[1] - a4[1]; - return Math.sqrt(x6 * x6 + y5 * y5); - } - } -}); - -// node_modules/gl-vec2/dist.js -var require_dist = __commonJS({ - "node_modules/gl-vec2/dist.js"(exports, module2) { - module2.exports = require_distance(); - } -}); - -// node_modules/gl-vec2/squaredDistance.js -var require_squaredDistance = __commonJS({ - "node_modules/gl-vec2/squaredDistance.js"(exports, module2) { - module2.exports = squaredDistance4; - function squaredDistance4(a4, b10) { - var x6 = b10[0] - a4[0], y5 = b10[1] - a4[1]; - return x6 * x6 + y5 * y5; - } - } -}); - -// node_modules/gl-vec2/sqrDist.js -var require_sqrDist = __commonJS({ - "node_modules/gl-vec2/sqrDist.js"(exports, module2) { - module2.exports = require_squaredDistance(); - } -}); - -// node_modules/gl-vec2/length.js -var require_length = __commonJS({ - "node_modules/gl-vec2/length.js"(exports, module2) { - module2.exports = length5; - function length5(a4) { - var x6 = a4[0], y5 = a4[1]; - return Math.sqrt(x6 * x6 + y5 * y5); - } - } -}); - -// node_modules/gl-vec2/len.js -var require_len = __commonJS({ - "node_modules/gl-vec2/len.js"(exports, module2) { - module2.exports = require_length(); - } -}); - -// node_modules/gl-vec2/squaredLength.js -var require_squaredLength = __commonJS({ - "node_modules/gl-vec2/squaredLength.js"(exports, module2) { - module2.exports = squaredLength5; - function squaredLength5(a4) { - var x6 = a4[0], y5 = a4[1]; - return x6 * x6 + y5 * y5; - } - } -}); - -// node_modules/gl-vec2/sqrLen.js -var require_sqrLen = __commonJS({ - "node_modules/gl-vec2/sqrLen.js"(exports, module2) { - module2.exports = require_squaredLength(); - } -}); - -// node_modules/gl-vec2/negate.js -var require_negate = __commonJS({ - "node_modules/gl-vec2/negate.js"(exports, module2) { - module2.exports = negate4; - function negate4(out, a4) { - out[0] = -a4[0]; - out[1] = -a4[1]; - return out; - } - } -}); - -// node_modules/gl-vec2/normalize.js -var require_normalize = __commonJS({ - "node_modules/gl-vec2/normalize.js"(exports, module2) { - module2.exports = normalize5; - function normalize5(out, a4) { - var x6 = a4[0], y5 = a4[1]; - var len5 = x6 * x6 + y5 * y5; - if (len5 > 0) { - len5 = 1 / Math.sqrt(len5); - out[0] = a4[0] * len5; - out[1] = a4[1] * len5; - } - return out; - } - } -}); - -// node_modules/gl-vec2/dot.js -var require_dot = __commonJS({ - "node_modules/gl-vec2/dot.js"(exports, module2) { - module2.exports = dot7; - function dot7(a4, b10) { - return a4[0] * b10[0] + a4[1] * b10[1]; - } - } -}); - -// node_modules/gl-vec2/cross.js -var require_cross = __commonJS({ - "node_modules/gl-vec2/cross.js"(exports, module2) { - module2.exports = cross6; - function cross6(out, a4, b10) { - var z3 = a4[0] * b10[1] - a4[1] * b10[0]; - out[0] = out[1] = 0; - out[2] = z3; - return out; - } - } -}); - -// node_modules/gl-vec2/lerp.js -var require_lerp = __commonJS({ - "node_modules/gl-vec2/lerp.js"(exports, module2) { - module2.exports = lerp8; - function lerp8(out, a4, b10, t4) { - var ax = a4[0], ay = a4[1]; - out[0] = ax + t4 * (b10[0] - ax); - out[1] = ay + t4 * (b10[1] - ay); - return out; - } - } -}); - -// node_modules/gl-vec2/random.js -var require_random = __commonJS({ - "node_modules/gl-vec2/random.js"(exports, module2) { - module2.exports = random5; - function random5(out, scale12) { - scale12 = scale12 || 1; - var r4 = Math.random() * 2 * Math.PI; - out[0] = Math.cos(r4) * scale12; - out[1] = Math.sin(r4) * scale12; - return out; - } - } -}); - -// node_modules/gl-vec2/transformMat2.js -var require_transformMat2 = __commonJS({ - "node_modules/gl-vec2/transformMat2.js"(exports, module2) { - module2.exports = transformMat22; - function transformMat22(out, a4, m4) { - var x6 = a4[0], y5 = a4[1]; - out[0] = m4[0] * x6 + m4[2] * y5; - out[1] = m4[1] * x6 + m4[3] * y5; - return out; - } - } -}); - -// node_modules/gl-vec2/transformMat2d.js -var require_transformMat2d = __commonJS({ - "node_modules/gl-vec2/transformMat2d.js"(exports, module2) { - module2.exports = transformMat2d2; - function transformMat2d2(out, a4, m4) { - var x6 = a4[0], y5 = a4[1]; - out[0] = m4[0] * x6 + m4[2] * y5 + m4[4]; - out[1] = m4[1] * x6 + m4[3] * y5 + m4[5]; - return out; - } - } -}); - -// node_modules/gl-vec2/transformMat3.js -var require_transformMat3 = __commonJS({ - "node_modules/gl-vec2/transformMat3.js"(exports, module2) { - module2.exports = transformMat33; - function transformMat33(out, a4, m4) { - var x6 = a4[0], y5 = a4[1]; - out[0] = m4[0] * x6 + m4[3] * y5 + m4[6]; - out[1] = m4[1] * x6 + m4[4] * y5 + m4[7]; - return out; - } - } -}); - -// node_modules/gl-vec2/transformMat4.js -var require_transformMat4 = __commonJS({ - "node_modules/gl-vec2/transformMat4.js"(exports, module2) { - module2.exports = transformMat44; - function transformMat44(out, a4, m4) { - var x6 = a4[0], y5 = a4[1]; - out[0] = m4[0] * x6 + m4[4] * y5 + m4[12]; - out[1] = m4[1] * x6 + m4[5] * y5 + m4[13]; - return out; - } - } -}); - -// node_modules/gl-vec2/forEach.js -var require_forEach = __commonJS({ - "node_modules/gl-vec2/forEach.js"(exports, module2) { - module2.exports = forEach4; - var vec = require_create()(); - function forEach4(a4, stride, offset, count2, fn, arg) { - var i4, l4; - if (!stride) { - stride = 2; - } - if (!offset) { - offset = 0; - } - if (count2) { - l4 = Math.min(count2 * stride + offset, a4.length); - } else { - l4 = a4.length; - } - for (i4 = offset; i4 < l4; i4 += stride) { - vec[0] = a4[i4]; - vec[1] = a4[i4 + 1]; - fn(vec, vec, arg); - a4[i4] = vec[0]; - a4[i4 + 1] = vec[1]; - } - return a4; - } - } -}); - -// node_modules/gl-vec2/limit.js -var require_limit = __commonJS({ - "node_modules/gl-vec2/limit.js"(exports, module2) { - module2.exports = limit; - function limit(out, a4, max15) { - var mSq = a4[0] * a4[0] + a4[1] * a4[1]; - if (mSq > max15 * max15) { - var n3 = Math.sqrt(mSq); - out[0] = a4[0] / n3 * max15; - out[1] = a4[1] / n3 * max15; - } else { - out[0] = a4[0]; - out[1] = a4[1]; - } - return out; - } - } -}); - -// node_modules/gl-vec2/index.js -var require_gl_vec2 = __commonJS({ - "node_modules/gl-vec2/index.js"(exports, module2) { - module2.exports = { - EPSILON: require_epsilon(), - create: require_create(), - clone: require_clone2(), - fromValues: require_fromValues(), - copy: require_copy(), - set: require_set2(), - equals: require_equals(), - exactEquals: require_exactEquals(), - add: require_add(), - subtract: require_subtract(), - sub: require_sub(), - multiply: require_multiply(), - mul: require_mul(), - divide: require_divide(), - div: require_div(), - inverse: require_inverse(), - min: require_min2(), - max: require_max2(), - rotate: require_rotate(), - floor: require_floor(), - ceil: require_ceil(), - round: require_round(), - scale: require_scale(), - scaleAndAdd: require_scaleAndAdd(), - distance: require_distance(), - dist: require_dist(), - squaredDistance: require_squaredDistance(), - sqrDist: require_sqrDist(), - length: require_length(), - len: require_len(), - squaredLength: require_squaredLength(), - sqrLen: require_sqrLen(), - negate: require_negate(), - normalize: require_normalize(), - dot: require_dot(), - cross: require_cross(), - lerp: require_lerp(), - random: require_random(), - transformMat2: require_transformMat2(), - transformMat2d: require_transformMat2d(), - transformMat3: require_transformMat3(), - transformMat4: require_transformMat4(), - forEach: require_forEach(), - limit: require_limit() - }; - } -}); - -// node_modules/polyline-miter-util/index.js -var require_polyline_miter_util = __commonJS({ - "node_modules/polyline-miter-util/index.js"(exports, module2) { - var add8 = require_add(); - var set13 = require_set2(); - var normalize5 = require_normalize(); - var subtract6 = require_subtract(); - var dot7 = require_dot(); - var tmp = [0, 0]; - module2.exports.computeMiter = function computeMiter2(tangent, miter, lineA, lineB, halfThick) { - add8(tangent, lineA, lineB); - normalize5(tangent, tangent); - set13(miter, -tangent[1], tangent[0]); - set13(tmp, -lineA[1], lineA[0]); - return halfThick / dot7(miter, tmp); - }; - module2.exports.normal = function normal2(out, dir) { - set13(out, -dir[1], dir[0]); - return out; - }; - module2.exports.direction = function direction3(out, a4, b10) { - subtract6(out, a4, b10); - normalize5(out, out); - return out; - }; - } -}); - -// node_modules/@antv/hierarchy/build/hierarchy.js -var require_hierarchy = __commonJS({ - "node_modules/@antv/hierarchy/build/hierarchy.js"(exports, module2) { - (function webpackUniversalModuleDefinition(root, factory) { - if (typeof exports === "object" && typeof module2 === "object") - module2.exports = factory(); - else if (typeof define === "function" && define.amd) - define([], factory); - else if (typeof exports === "object") - exports["Hierarchy"] = factory(); - else - root["Hierarchy"] = factory(); - })(typeof self !== "undefined" ? self : exports, function() { - return function(modules) { - var installedModules = {}; - function __webpack_require__(moduleId) { - if (installedModules[moduleId]) { - return installedModules[moduleId].exports; - } - var module3 = installedModules[moduleId] = { - i: moduleId, - l: false, - exports: {} - }; - modules[moduleId].call(module3.exports, module3, module3.exports, __webpack_require__); - module3.l = true; - return module3.exports; - } - __webpack_require__.m = modules; - __webpack_require__.c = installedModules; - __webpack_require__.d = function(exports2, name, getter) { - if (!__webpack_require__.o(exports2, name)) { - Object.defineProperty(exports2, name, { - configurable: false, - enumerable: true, - get: getter - }); - } - }; - __webpack_require__.n = function(module3) { - var getter = module3 && module3.__esModule ? function getDefault4() { - return module3["default"]; - } : function getModuleExports() { - return module3; - }; - __webpack_require__.d(getter, "a", getter); - return getter; - }; - __webpack_require__.o = function(object, property) { - return Object.prototype.hasOwnProperty.call(object, property); - }; - __webpack_require__.p = ""; - return __webpack_require__(__webpack_require__.s = 31); - }([ - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(4); - __webpack_exports__["a"] = function(value2) { - return Array.isArray ? Array.isArray(value2) : Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a"])(value2, "Array"); - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var isArrayLike = function(value2) { - return value2 !== null && typeof value2 !== "function" && isFinite(value2.length); - }; - __webpack_exports__["a"] = isArrayLike; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(0); - var __WEBPACK_IMPORTED_MODULE_1__is_object__ = __webpack_require__(13); - function each168(elements, func) { - if (!elements) { - return; - } - var rst; - if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a"])(elements)) { - for (var i4 = 0, len5 = elements.length; i4 < len5; i4++) { - rst = func(elements[i4], i4); - if (rst === false) { - break; - } - } - } else if (Object(__WEBPACK_IMPORTED_MODULE_1__is_object__["a"])(elements)) { - for (var k4 in elements) { - if (elements.hasOwnProperty(k4)) { - rst = func(elements[k4], k4); - if (rst === false) { - break; - } - } - } - } - } - __webpack_exports__["a"] = each168; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(4); - __webpack_exports__["a"] = function(value2) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a"])(value2, "Function"); - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var toString7 = {}.toString; - var isType7 = function(value2, type2) { - return toString7.call(value2) === "[object " + type2 + "]"; - }; - __webpack_exports__["a"] = isType7; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(4); - var isNumber57 = function(value2) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a"])(value2, "Number"); - }; - __webpack_exports__["a"] = isNumber57; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var isNil67 = function(value2) { - return value2 === null || value2 === void 0; - }; - __webpack_exports__["a"] = isNil67; - }, - function(module3, exports2, __webpack_require__) { - var _require = __webpack_require__(33), mix31 = _require.mix; - module3.exports = { - assign: mix31 - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(4); - __webpack_exports__["a"] = function(str8) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a"])(str8, "String"); - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_object_like__ = __webpack_require__(15); - var __WEBPACK_IMPORTED_MODULE_1__is_type__ = __webpack_require__(4); - var isPlainObject10 = function(value2) { - if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_object_like__["a"])(value2) || !Object(__WEBPACK_IMPORTED_MODULE_1__is_type__["a"])(value2, "Object")) { - return false; - } - if (Object.getPrototypeOf(value2) === null) { - return true; - } - var proto = value2; - while (Object.getPrototypeOf(proto) !== null) { - proto = Object.getPrototypeOf(proto); - } - return Object.getPrototypeOf(value2) === proto; - }; - __webpack_exports__["a"] = isPlainObject10; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_nil__ = __webpack_require__(6); - __webpack_exports__["a"] = function(value2) { - if (Object(__WEBPACK_IMPORTED_MODULE_0__is_nil__["a"])(value2)) - return ""; - return value2.toString(); - }; - }, - function(module3, exports2, __webpack_require__) { - var hierarchy2 = __webpack_require__(18); - var Layout2 = /* @__PURE__ */ function() { - function Layout3(root, options) { - if (options === void 0) { - options = {}; - } - var me = this; - me.options = options; - me.rootNode = hierarchy2(root, options); - } - var _proto = Layout3.prototype; - _proto.execute = function execute() { - throw new Error("please override this method"); - }; - return Layout3; - }(); - module3.exports = Layout2; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(1); - var contains3 = function(arr, value2) { - if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a"])(arr)) { - return false; - } - return arr.indexOf(value2) > -1; - }; - __webpack_exports__["a"] = contains3; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__["a"] = function(value2) { - var type2 = typeof value2; - return value2 !== null && type2 === "object" || type2 === "function"; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(2); - var __WEBPACK_IMPORTED_MODULE_1__is_array_like__ = __webpack_require__(1); - var filter17 = function(arr, func) { - if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_array_like__["a"])(arr)) { - return arr; - } - var result = []; - Object(__WEBPACK_IMPORTED_MODULE_0__each__["a"])(arr, function(value2, index2) { - if (func(value2, index2)) { - result.push(value2); - } - }); - return result; - }; - __webpack_exports__["a"] = filter17; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var isObjectLike5 = function(value2) { - return typeof value2 === "object" && value2 !== null; - }; - __webpack_exports__["a"] = isObjectLike5; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__["a"] = mix31; - function _mix(dist4, obj) { - for (var key in obj) { - if (obj.hasOwnProperty(key) && key !== "constructor" && obj[key] !== void 0) { - dist4[key] = obj[key]; - } - } - } - function mix31(dist4, src1, src2, src3) { - if (src1) - _mix(dist4, src1); - if (src2) - _mix(dist4, src2); - if (src3) - _mix(dist4, src3); - return dist4; - } - }, - function(module3, exports2, __webpack_require__) { - var separateTree = __webpack_require__(30); - var VALID_DIRECTIONS = [ - "LR", - "RL", - "TB", - "BT", - "H", - "V" - ]; - var HORIZONTAL_DIRECTIONS = ["LR", "RL", "H"]; - var isHorizontal2 = function isHorizontal3(direction3) { - return HORIZONTAL_DIRECTIONS.indexOf(direction3) > -1; - }; - var DEFAULT_DIRECTION = VALID_DIRECTIONS[0]; - module3.exports = function(root, options, layoutAlgrithm) { - var direction3 = options.direction || DEFAULT_DIRECTION; - options.isHorizontal = isHorizontal2(direction3); - if (direction3 && VALID_DIRECTIONS.indexOf(direction3) === -1) { - throw new TypeError("Invalid direction: " + direction3); - } - if (direction3 === VALID_DIRECTIONS[0]) { - layoutAlgrithm(root, options); - } else if (direction3 === VALID_DIRECTIONS[1]) { - layoutAlgrithm(root, options); - root.right2left(); - } else if (direction3 === VALID_DIRECTIONS[2]) { - layoutAlgrithm(root, options); - } else if (direction3 === VALID_DIRECTIONS[3]) { - layoutAlgrithm(root, options); - root.bottom2top(); - } else if (direction3 === VALID_DIRECTIONS[4] || direction3 === VALID_DIRECTIONS[5]) { - var _separateTree = separateTree(root, options), left2 = _separateTree.left, right2 = _separateTree.right; - layoutAlgrithm(left2, options); - layoutAlgrithm(right2, options); - options.isHorizontal ? left2.right2left() : left2.bottom2top(); - right2.translate(left2.x - right2.x, left2.y - right2.y); - root.x = left2.x; - root.y = right2.y; - var bb = root.getBoundingBox(); - if (options.isHorizontal) { - if (bb.top < 0) { - root.translate(0, -bb.top); - } - } else { - if (bb.left < 0) { - root.translate(-bb.left, 0); - } - } - } - var fixedRoot = options.fixedRoot; - if (fixedRoot === void 0) - fixedRoot = true; - if (fixedRoot) { - root.translate(-(root.x + root.width / 2 + root.hgap), -(root.y + root.height / 2 + root.vgap)); - } - return root; - }; - }, - function(module3, exports2, __webpack_require__) { - var util = __webpack_require__(7); - var PEM = 18; - var DEFAULT_HEIGHT = PEM * 2; - var DEFAULT_GAP = PEM; - var DEFAULT_OPTIONS37 = { - getId: function getId4(d3) { - return d3.id || d3.name; - }, - getPreH: function getPreH(d3) { - return d3.preH || 0; - }, - getPreV: function getPreV(d3) { - return d3.preV || 0; - }, - getHGap: function getHGap4(d3) { - return d3.hgap || DEFAULT_GAP; - }, - getVGap: function getVGap4(d3) { - return d3.vgap || DEFAULT_GAP; - }, - getChildren: function getChildren(d3) { - return d3.children; - }, - getHeight: function getHeight6(d3) { - return d3.height || DEFAULT_HEIGHT; - }, - getWidth: function getWidth4(d3) { - var label17 = d3.label || " "; - return d3.width || label17.split("").length * PEM; - } - }; - function Node5(data3, options) { - var me = this; - me.vgap = me.hgap = 0; - if (data3 instanceof Node5) - return data3; - me.data = data3; - var hgap = options.getHGap(data3); - var vgap = options.getVGap(data3); - me.preH = options.getPreH(data3); - me.preV = options.getPreV(data3); - me.width = options.getWidth(data3); - me.height = options.getHeight(data3); - me.width += me.preH; - me.height += me.preV; - me.id = options.getId(data3); - me.x = me.y = 0; - me.depth = 0; - if (!me.children) { - me.children = []; - } - me.addGap(hgap, vgap); - return me; - } - util.assign(Node5.prototype, { - isRoot: function isRoot() { - return this.depth === 0; - }, - isLeaf: function isLeaf() { - return this.children.length === 0; - }, - addGap: function addGap(hgap, vgap) { - var me = this; - me.hgap += hgap; - me.vgap += vgap; - me.width += 2 * hgap; - me.height += 2 * vgap; - }, - eachNode: function eachNode(callback) { - var me = this; - var nodes = [me]; - var current; - while (current = nodes.shift()) { - callback(current); - nodes = current.children.concat(nodes); - } - }, - DFTraverse: function DFTraverse(callback) { - this.eachNode(callback); - }, - BFTraverse: function BFTraverse(callback) { - var me = this; - var nodes = [me]; - var current; - while (current = nodes.shift()) { - callback(current); - nodes = nodes.concat(current.children); - } - }, - getBoundingBox: function getBoundingBox2() { - var bb = { - left: Number.MAX_VALUE, - top: Number.MAX_VALUE, - width: 0, - height: 0 - }; - this.eachNode(function(node) { - bb.left = Math.min(bb.left, node.x); - bb.top = Math.min(bb.top, node.y); - bb.width = Math.max(bb.width, node.x + node.width); - bb.height = Math.max(bb.height, node.y + node.height); - }); - return bb; - }, - translate: function translate6(tx, ty) { - if (tx === void 0) { - tx = 0; - } - if (ty === void 0) { - ty = 0; - } - this.eachNode(function(node) { - node.x += tx; - node.y += ty; - node.x += node.preH; - node.y += node.preV; - }); - }, - right2left: function right2left() { - var me = this; - var bb = me.getBoundingBox(); - me.eachNode(function(node) { - node.x = node.x - (node.x - bb.left) * 2 - node.width; - }); - me.translate(bb.width, 0); - }, - bottom2top: function bottom2top() { - var me = this; - var bb = me.getBoundingBox(); - me.eachNode(function(node) { - node.y = node.y - (node.y - bb.top) * 2 - node.height; - }); - me.translate(0, bb.height); - } - }); - function hierarchy2(data3, options, isolated) { - if (options === void 0) { - options = {}; - } - options = util.assign({}, DEFAULT_OPTIONS37, options); - var root = new Node5(data3, options); - var nodes = [root]; - var node; - if (!isolated && !data3.collapsed) { - while (node = nodes.shift()) { - if (!node.data.collapsed) { - var children = options.getChildren(node.data); - var length5 = children ? children.length : 0; - node.children = new Array(length5); - if (children && length5) { - for (var i4 = 0; i4 < length5; i4++) { - var child = new Node5(children[i4], options); - node.children[i4] = child; - nodes.push(child); - child.parent = node; - child.depth = node.depth + 1; - } - } - } - } - } - return root; - } - module3.exports = hierarchy2; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_nil__ = __webpack_require__(6); - var __WEBPACK_IMPORTED_MODULE_1__keys__ = __webpack_require__(20); - function isMatch2(obj, attrs) { - var _keys = Object(__WEBPACK_IMPORTED_MODULE_1__keys__["a"])(attrs); - var length5 = _keys.length; - if (Object(__WEBPACK_IMPORTED_MODULE_0__is_nil__["a"])(obj)) - return !length5; - for (var i4 = 0; i4 < length5; i4 += 1) { - var key = _keys[i4]; - if (attrs[key] !== obj[key] || !(key in obj)) { - return false; - } - } - return true; - } - __webpack_exports__["a"] = isMatch2; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(2); - var __WEBPACK_IMPORTED_MODULE_1__is_function__ = __webpack_require__(3); - var keys6 = Object.keys ? function(obj) { - return Object.keys(obj); - } : function(obj) { - var result = []; - Object(__WEBPACK_IMPORTED_MODULE_0__each__["a"])(obj, function(value2, key) { - if (!(Object(__WEBPACK_IMPORTED_MODULE_1__is_function__["a"])(obj) && key === "prototype")) { - result.push(key); - } - }); - return result; - }; - __webpack_exports__["a"] = keys6; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(1); - var splice = Array.prototype.splice; - var pullAt = function pullAt2(arr, indexes) { - if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a"])(arr)) { - return []; - } - var length5 = arr ? indexes.length : 0; - var last17 = length5 - 1; - while (length5--) { - var previous = void 0; - var index2 = indexes[length5]; - if (length5 === last17 || index2 !== previous) { - previous = index2; - splice.call(arr, index2, 1); - } - } - return arr; - }; - __webpack_exports__["a"] = pullAt; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__contains__ = __webpack_require__(12); - var __WEBPACK_IMPORTED_MODULE_1__each__ = __webpack_require__(2); - var uniq10 = function(arr) { - var resultArr = []; - Object(__WEBPACK_IMPORTED_MODULE_1__each__["a"])(arr, function(item) { - if (!Object(__WEBPACK_IMPORTED_MODULE_0__contains__["a"])(resultArr, item)) { - resultArr.push(item); - } - }); - return resultArr; - }; - __webpack_exports__["a"] = uniq10; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(0); - var __WEBPACK_IMPORTED_MODULE_1__is_function__ = __webpack_require__(3); - var __WEBPACK_IMPORTED_MODULE_2__group_by__ = __webpack_require__(24); - var groupToMap2 = function(data3, condition) { - if (!condition) { - return { - 0: data3 - }; - } - if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_function__["a"])(condition)) { - var paramsCondition_1 = Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a"])(condition) ? condition : condition.replace(/\s+/g, "").split("*"); - condition = function(row) { - var unique = "_"; - for (var i4 = 0, l4 = paramsCondition_1.length; i4 < l4; i4++) { - unique += row[paramsCondition_1[i4]] && row[paramsCondition_1[i4]].toString(); - } - return unique; - }; - } - var groups = Object(__WEBPACK_IMPORTED_MODULE_2__group_by__["a"])(data3, condition); - return groups; - }; - __webpack_exports__["a"] = groupToMap2; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(2); - var __WEBPACK_IMPORTED_MODULE_1__is_array__ = __webpack_require__(0); - var __WEBPACK_IMPORTED_MODULE_2__is_function__ = __webpack_require__(3); - var hasOwnProperty = Object.prototype.hasOwnProperty; - function groupBy12(data3, condition) { - if (!condition || !Object(__WEBPACK_IMPORTED_MODULE_1__is_array__["a"])(data3)) { - return {}; - } - var result = {}; - var predicate = Object(__WEBPACK_IMPORTED_MODULE_2__is_function__["a"])(condition) ? condition : function(item) { - return item[condition]; - }; - var key; - Object(__WEBPACK_IMPORTED_MODULE_0__each__["a"])(data3, function(item) { - key = predicate(item); - if (hasOwnProperty.call(result, key)) { - result[key].push(item); - } else { - result[key] = [item]; - } - }); - return result; - } - __webpack_exports__["a"] = groupBy12; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__["a"] = function(obj, key) { - return obj.hasOwnProperty(key); - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(2); - var __WEBPACK_IMPORTED_MODULE_1__is_function__ = __webpack_require__(3); - var values4 = Object.values ? function(obj) { - return Object.values(obj); - } : function(obj) { - var result = []; - Object(__WEBPACK_IMPORTED_MODULE_0__each__["a"])(obj, function(value2, key) { - if (!(Object(__WEBPACK_IMPORTED_MODULE_1__is_function__["a"])(obj) && key === "prototype")) { - result.push(value2); - } - }); - return result; - }; - __webpack_exports__["a"] = values4; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var toString7 = {}.toString; - var getType2 = function(value2) { - return toString7.call(value2).replace(/^\[object /, "").replace(/]$/, ""); - }; - __webpack_exports__["a"] = getType2; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var objectProto4 = Object.prototype; - var isPrototype = function(value2) { - var Ctor = value2 && value2.constructor; - var proto = typeof Ctor === "function" && Ctor.prototype || objectProto4; - return value2 === proto; - }; - __webpack_exports__["a"] = isPrototype; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_object_like__ = __webpack_require__(15); - var __WEBPACK_IMPORTED_MODULE_1__is_array_like__ = __webpack_require__(1); - var __WEBPACK_IMPORTED_MODULE_2__is_string__ = __webpack_require__(8); - var isEqual24 = function(value2, other2) { - if (value2 === other2) { - return true; - } - if (!value2 || !other2) { - return false; - } - if (Object(__WEBPACK_IMPORTED_MODULE_2__is_string__["a"])(value2) || Object(__WEBPACK_IMPORTED_MODULE_2__is_string__["a"])(other2)) { - return false; - } - if (Object(__WEBPACK_IMPORTED_MODULE_1__is_array_like__["a"])(value2) || Object(__WEBPACK_IMPORTED_MODULE_1__is_array_like__["a"])(other2)) { - if (value2.length !== other2.length) { - return false; - } - var rst = true; - for (var i4 = 0; i4 < value2.length; i4++) { - rst = isEqual24(value2[i4], other2[i4]); - if (!rst) { - break; - } - } - return rst; - } - if (Object(__WEBPACK_IMPORTED_MODULE_0__is_object_like__["a"])(value2) || Object(__WEBPACK_IMPORTED_MODULE_0__is_object_like__["a"])(other2)) { - var valueKeys = Object.keys(value2); - var otherKeys = Object.keys(other2); - if (valueKeys.length !== otherKeys.length) { - return false; - } - var rst = true; - for (var i4 = 0; i4 < valueKeys.length; i4++) { - rst = isEqual24(value2[valueKeys[i4]], other2[valueKeys[i4]]); - if (!rst) { - break; - } - } - return rst; - } - return false; - }; - __webpack_exports__["a"] = isEqual24; - }, - function(module3, exports2, __webpack_require__) { - var hierarchy2 = __webpack_require__(18); - module3.exports = function(root, options) { - var left2 = hierarchy2(root.data, options, true); - var right2 = hierarchy2(root.data, options, true); - var treeSize = root.children.length; - var rightTreeSize = Math.round(treeSize / 2); - var getSide = options.getSide || function(child2, index2) { - if (index2 < rightTreeSize) { - return "right"; - } - return "left"; - }; - for (var i4 = 0; i4 < treeSize; i4++) { - var child = root.children[i4]; - var side = getSide(child, i4); - if (side === "right") { - right2.children.push(child); - } else { - left2.children.push(child); - } - } - left2.eachNode(function(node) { - if (!node.isRoot()) { - node.side = "left"; - } - }); - right2.eachNode(function(node) { - if (!node.isRoot()) { - node.side = "right"; - } - }); - return { - left: left2, - right: right2 - }; - }; - }, - function(module3, exports2, __webpack_require__) { - var hierarchy2 = { - compactBox: __webpack_require__(32), - dendrogram: __webpack_require__(114), - indented: __webpack_require__(116), - mindmap: __webpack_require__(118) - }; - module3.exports = hierarchy2; - }, - function(module3, exports2, __webpack_require__) { - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; - } - var TreeLayout2 = __webpack_require__(11); - var nonLayeredTidyTree = __webpack_require__(113); - var doTreeLayout = __webpack_require__(17); - var util = __webpack_require__(7); - var CompactBoxTreeLayout = /* @__PURE__ */ function(_TreeLayout) { - _inheritsLoose(CompactBoxTreeLayout2, _TreeLayout); - function CompactBoxTreeLayout2() { - return _TreeLayout.apply(this, arguments) || this; - } - var _proto = CompactBoxTreeLayout2.prototype; - _proto.execute = function execute() { - var me = this; - return doTreeLayout(me.rootNode, me.options, nonLayeredTidyTree); - }; - return CompactBoxTreeLayout2; - }(TreeLayout2); - var DEFAULT_OPTIONS37 = {}; - function compactBoxLayout(root, options) { - options = util.assign({}, DEFAULT_OPTIONS37, options); - return new CompactBoxTreeLayout(root, options).execute(); - } - module3.exports = compactBoxLayout; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); - var __WEBPACK_IMPORTED_MODULE_0__contains__ = __webpack_require__(12); - __webpack_require__.d(__webpack_exports__, "contains", function() { - return __WEBPACK_IMPORTED_MODULE_0__contains__["a"]; - }); - __webpack_require__.d(__webpack_exports__, "includes", function() { - return __WEBPACK_IMPORTED_MODULE_0__contains__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_1__difference__ = __webpack_require__(34); - __webpack_require__.d(__webpack_exports__, "difference", function() { - return __WEBPACK_IMPORTED_MODULE_1__difference__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_2__find__ = __webpack_require__(35); - __webpack_require__.d(__webpack_exports__, "find", function() { - return __WEBPACK_IMPORTED_MODULE_2__find__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_3__find_index__ = __webpack_require__(36); - __webpack_require__.d(__webpack_exports__, "findIndex", function() { - return __WEBPACK_IMPORTED_MODULE_3__find_index__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_4__first_value__ = __webpack_require__(37); - __webpack_require__.d(__webpack_exports__, "firstValue", function() { - return __WEBPACK_IMPORTED_MODULE_4__first_value__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_5__flatten__ = __webpack_require__(38); - __webpack_require__.d(__webpack_exports__, "flatten", function() { - return __WEBPACK_IMPORTED_MODULE_5__flatten__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_6__flatten_deep__ = __webpack_require__(39); - __webpack_require__.d(__webpack_exports__, "flattenDeep", function() { - return __WEBPACK_IMPORTED_MODULE_6__flatten_deep__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_7__get_range__ = __webpack_require__(40); - __webpack_require__.d(__webpack_exports__, "getRange", function() { - return __WEBPACK_IMPORTED_MODULE_7__get_range__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_8__pull__ = __webpack_require__(41); - __webpack_require__.d(__webpack_exports__, "pull", function() { - return __WEBPACK_IMPORTED_MODULE_8__pull__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_9__pull_at__ = __webpack_require__(21); - __webpack_require__.d(__webpack_exports__, "pullAt", function() { - return __WEBPACK_IMPORTED_MODULE_9__pull_at__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_10__reduce__ = __webpack_require__(42); - __webpack_require__.d(__webpack_exports__, "reduce", function() { - return __WEBPACK_IMPORTED_MODULE_10__reduce__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_11__remove__ = __webpack_require__(43); - __webpack_require__.d(__webpack_exports__, "remove", function() { - return __WEBPACK_IMPORTED_MODULE_11__remove__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_12__sort_by__ = __webpack_require__(44); - __webpack_require__.d(__webpack_exports__, "sortBy", function() { - return __WEBPACK_IMPORTED_MODULE_12__sort_by__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_13__union__ = __webpack_require__(45); - __webpack_require__.d(__webpack_exports__, "union", function() { - return __WEBPACK_IMPORTED_MODULE_13__union__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_14__uniq__ = __webpack_require__(22); - __webpack_require__.d(__webpack_exports__, "uniq", function() { - return __WEBPACK_IMPORTED_MODULE_14__uniq__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_15__values_of_key__ = __webpack_require__(46); - __webpack_require__.d(__webpack_exports__, "valuesOfKey", function() { - return __WEBPACK_IMPORTED_MODULE_15__values_of_key__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_16__head__ = __webpack_require__(47); - __webpack_require__.d(__webpack_exports__, "head", function() { - return __WEBPACK_IMPORTED_MODULE_16__head__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_17__last__ = __webpack_require__(48); - __webpack_require__.d(__webpack_exports__, "last", function() { - return __WEBPACK_IMPORTED_MODULE_17__last__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_18__starts_with__ = __webpack_require__(49); - __webpack_require__.d(__webpack_exports__, "startsWith", function() { - return __WEBPACK_IMPORTED_MODULE_18__starts_with__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_19__ends_with__ = __webpack_require__(50); - __webpack_require__.d(__webpack_exports__, "endsWith", function() { - return __WEBPACK_IMPORTED_MODULE_19__ends_with__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_20__filter__ = __webpack_require__(14); - __webpack_require__.d(__webpack_exports__, "filter", function() { - return __WEBPACK_IMPORTED_MODULE_20__filter__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_21__every__ = __webpack_require__(51); - __webpack_require__.d(__webpack_exports__, "every", function() { - return __WEBPACK_IMPORTED_MODULE_21__every__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_22__some__ = __webpack_require__(52); - __webpack_require__.d(__webpack_exports__, "some", function() { - return __WEBPACK_IMPORTED_MODULE_22__some__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_23__group__ = __webpack_require__(53); - __webpack_require__.d(__webpack_exports__, "group", function() { - return __WEBPACK_IMPORTED_MODULE_23__group__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_24__group_by__ = __webpack_require__(24); - __webpack_require__.d(__webpack_exports__, "groupBy", function() { - return __WEBPACK_IMPORTED_MODULE_24__group_by__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_25__group_to_map__ = __webpack_require__(23); - __webpack_require__.d(__webpack_exports__, "groupToMap", function() { - return __WEBPACK_IMPORTED_MODULE_25__group_to_map__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_26__get_wrap_behavior__ = __webpack_require__(54); - __webpack_require__.d(__webpack_exports__, "getWrapBehavior", function() { - return __WEBPACK_IMPORTED_MODULE_26__get_wrap_behavior__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_27__wrap_behavior__ = __webpack_require__(55); - __webpack_require__.d(__webpack_exports__, "wrapBehavior", function() { - return __WEBPACK_IMPORTED_MODULE_27__wrap_behavior__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_28__number2color__ = __webpack_require__(56); - __webpack_require__.d(__webpack_exports__, "number2color", function() { - return __WEBPACK_IMPORTED_MODULE_28__number2color__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_29__parse_radius__ = __webpack_require__(57); - __webpack_require__.d(__webpack_exports__, "parseRadius", function() { - return __WEBPACK_IMPORTED_MODULE_29__parse_radius__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_30__clamp__ = __webpack_require__(58); - __webpack_require__.d(__webpack_exports__, "clamp", function() { - return __WEBPACK_IMPORTED_MODULE_30__clamp__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_31__fixed_base__ = __webpack_require__(59); - __webpack_require__.d(__webpack_exports__, "fixedBase", function() { - return __WEBPACK_IMPORTED_MODULE_31__fixed_base__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_32__is_decimal__ = __webpack_require__(60); - __webpack_require__.d(__webpack_exports__, "isDecimal", function() { - return __WEBPACK_IMPORTED_MODULE_32__is_decimal__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_33__is_even__ = __webpack_require__(61); - __webpack_require__.d(__webpack_exports__, "isEven", function() { - return __WEBPACK_IMPORTED_MODULE_33__is_even__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_34__is_integer__ = __webpack_require__(62); - __webpack_require__.d(__webpack_exports__, "isInteger", function() { - return __WEBPACK_IMPORTED_MODULE_34__is_integer__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_35__is_negative__ = __webpack_require__(63); - __webpack_require__.d(__webpack_exports__, "isNegative", function() { - return __WEBPACK_IMPORTED_MODULE_35__is_negative__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_36__is_number_equal__ = __webpack_require__(64); - __webpack_require__.d(__webpack_exports__, "isNumberEqual", function() { - return __WEBPACK_IMPORTED_MODULE_36__is_number_equal__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_37__is_odd__ = __webpack_require__(65); - __webpack_require__.d(__webpack_exports__, "isOdd", function() { - return __WEBPACK_IMPORTED_MODULE_37__is_odd__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_38__is_positive__ = __webpack_require__(66); - __webpack_require__.d(__webpack_exports__, "isPositive", function() { - return __WEBPACK_IMPORTED_MODULE_38__is_positive__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_39__max_by__ = __webpack_require__(67); - __webpack_require__.d(__webpack_exports__, "maxBy", function() { - return __WEBPACK_IMPORTED_MODULE_39__max_by__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_40__min_by__ = __webpack_require__(68); - __webpack_require__.d(__webpack_exports__, "minBy", function() { - return __WEBPACK_IMPORTED_MODULE_40__min_by__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_41__mod__ = __webpack_require__(69); - __webpack_require__.d(__webpack_exports__, "mod", function() { - return __WEBPACK_IMPORTED_MODULE_41__mod__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_42__to_degree__ = __webpack_require__(70); - __webpack_require__.d(__webpack_exports__, "toDegree", function() { - return __WEBPACK_IMPORTED_MODULE_42__to_degree__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_43__to_integer__ = __webpack_require__(71); - __webpack_require__.d(__webpack_exports__, "toInteger", function() { - return __WEBPACK_IMPORTED_MODULE_43__to_integer__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_44__to_radian__ = __webpack_require__(72); - __webpack_require__.d(__webpack_exports__, "toRadian", function() { - return __WEBPACK_IMPORTED_MODULE_44__to_radian__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_45__for_in__ = __webpack_require__(73); - __webpack_require__.d(__webpack_exports__, "forIn", function() { - return __WEBPACK_IMPORTED_MODULE_45__for_in__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_46__has__ = __webpack_require__(25); - __webpack_require__.d(__webpack_exports__, "has", function() { - return __WEBPACK_IMPORTED_MODULE_46__has__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_47__has_key__ = __webpack_require__(74); - __webpack_require__.d(__webpack_exports__, "hasKey", function() { - return __WEBPACK_IMPORTED_MODULE_47__has_key__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_48__has_value__ = __webpack_require__(75); - __webpack_require__.d(__webpack_exports__, "hasValue", function() { - return __WEBPACK_IMPORTED_MODULE_48__has_value__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_49__keys__ = __webpack_require__(20); - __webpack_require__.d(__webpack_exports__, "keys", function() { - return __WEBPACK_IMPORTED_MODULE_49__keys__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_50__is_match__ = __webpack_require__(19); - __webpack_require__.d(__webpack_exports__, "isMatch", function() { - return __WEBPACK_IMPORTED_MODULE_50__is_match__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_51__values__ = __webpack_require__(26); - __webpack_require__.d(__webpack_exports__, "values", function() { - return __WEBPACK_IMPORTED_MODULE_51__values__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_52__lower_case__ = __webpack_require__(76); - __webpack_require__.d(__webpack_exports__, "lowerCase", function() { - return __WEBPACK_IMPORTED_MODULE_52__lower_case__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_53__lower_first__ = __webpack_require__(77); - __webpack_require__.d(__webpack_exports__, "lowerFirst", function() { - return __WEBPACK_IMPORTED_MODULE_53__lower_first__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_54__substitute__ = __webpack_require__(78); - __webpack_require__.d(__webpack_exports__, "substitute", function() { - return __WEBPACK_IMPORTED_MODULE_54__substitute__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_55__upper_case__ = __webpack_require__(79); - __webpack_require__.d(__webpack_exports__, "upperCase", function() { - return __WEBPACK_IMPORTED_MODULE_55__upper_case__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_56__upper_first__ = __webpack_require__(80); - __webpack_require__.d(__webpack_exports__, "upperFirst", function() { - return __WEBPACK_IMPORTED_MODULE_56__upper_first__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_57__get_type__ = __webpack_require__(27); - __webpack_require__.d(__webpack_exports__, "getType", function() { - return __WEBPACK_IMPORTED_MODULE_57__get_type__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_58__is_arguments__ = __webpack_require__(81); - __webpack_require__.d(__webpack_exports__, "isArguments", function() { - return __WEBPACK_IMPORTED_MODULE_58__is_arguments__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_59__is_array__ = __webpack_require__(0); - __webpack_require__.d(__webpack_exports__, "isArray", function() { - return __WEBPACK_IMPORTED_MODULE_59__is_array__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_60__is_array_like__ = __webpack_require__(1); - __webpack_require__.d(__webpack_exports__, "isArrayLike", function() { - return __WEBPACK_IMPORTED_MODULE_60__is_array_like__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_61__is_boolean__ = __webpack_require__(82); - __webpack_require__.d(__webpack_exports__, "isBoolean", function() { - return __WEBPACK_IMPORTED_MODULE_61__is_boolean__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_62__is_date__ = __webpack_require__(83); - __webpack_require__.d(__webpack_exports__, "isDate", function() { - return __WEBPACK_IMPORTED_MODULE_62__is_date__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_63__is_error__ = __webpack_require__(84); - __webpack_require__.d(__webpack_exports__, "isError", function() { - return __WEBPACK_IMPORTED_MODULE_63__is_error__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_64__is_function__ = __webpack_require__(3); - __webpack_require__.d(__webpack_exports__, "isFunction", function() { - return __WEBPACK_IMPORTED_MODULE_64__is_function__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_65__is_finite__ = __webpack_require__(85); - __webpack_require__.d(__webpack_exports__, "isFinite", function() { - return __WEBPACK_IMPORTED_MODULE_65__is_finite__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_66__is_nil__ = __webpack_require__(6); - __webpack_require__.d(__webpack_exports__, "isNil", function() { - return __WEBPACK_IMPORTED_MODULE_66__is_nil__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_67__is_null__ = __webpack_require__(86); - __webpack_require__.d(__webpack_exports__, "isNull", function() { - return __WEBPACK_IMPORTED_MODULE_67__is_null__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_68__is_number__ = __webpack_require__(5); - __webpack_require__.d(__webpack_exports__, "isNumber", function() { - return __WEBPACK_IMPORTED_MODULE_68__is_number__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_69__is_object__ = __webpack_require__(13); - __webpack_require__.d(__webpack_exports__, "isObject", function() { - return __WEBPACK_IMPORTED_MODULE_69__is_object__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_70__is_object_like__ = __webpack_require__(15); - __webpack_require__.d(__webpack_exports__, "isObjectLike", function() { - return __WEBPACK_IMPORTED_MODULE_70__is_object_like__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_71__is_plain_object__ = __webpack_require__(9); - __webpack_require__.d(__webpack_exports__, "isPlainObject", function() { - return __WEBPACK_IMPORTED_MODULE_71__is_plain_object__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_72__is_prototype__ = __webpack_require__(28); - __webpack_require__.d(__webpack_exports__, "isPrototype", function() { - return __WEBPACK_IMPORTED_MODULE_72__is_prototype__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_73__is_reg_exp__ = __webpack_require__(87); - __webpack_require__.d(__webpack_exports__, "isRegExp", function() { - return __WEBPACK_IMPORTED_MODULE_73__is_reg_exp__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_74__is_string__ = __webpack_require__(8); - __webpack_require__.d(__webpack_exports__, "isString", function() { - return __WEBPACK_IMPORTED_MODULE_74__is_string__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_75__is_type__ = __webpack_require__(4); - __webpack_require__.d(__webpack_exports__, "isType", function() { - return __WEBPACK_IMPORTED_MODULE_75__is_type__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_76__is_undefined__ = __webpack_require__(88); - __webpack_require__.d(__webpack_exports__, "isUndefined", function() { - return __WEBPACK_IMPORTED_MODULE_76__is_undefined__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_77__is_element__ = __webpack_require__(89); - __webpack_require__.d(__webpack_exports__, "isElement", function() { - return __WEBPACK_IMPORTED_MODULE_77__is_element__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_78__request_animation_frame__ = __webpack_require__(90); - __webpack_require__.d(__webpack_exports__, "requestAnimationFrame", function() { - return __WEBPACK_IMPORTED_MODULE_78__request_animation_frame__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_79__clear_animation_frame__ = __webpack_require__(91); - __webpack_require__.d(__webpack_exports__, "clearAnimationFrame", function() { - return __WEBPACK_IMPORTED_MODULE_79__clear_animation_frame__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_80__augment__ = __webpack_require__(92); - __webpack_require__.d(__webpack_exports__, "augment", function() { - return __WEBPACK_IMPORTED_MODULE_80__augment__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_81__clone__ = __webpack_require__(93); - __webpack_require__.d(__webpack_exports__, "clone", function() { - return __WEBPACK_IMPORTED_MODULE_81__clone__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_82__debounce__ = __webpack_require__(94); - __webpack_require__.d(__webpack_exports__, "debounce", function() { - return __WEBPACK_IMPORTED_MODULE_82__debounce__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_83__memoize__ = __webpack_require__(95); - __webpack_require__.d(__webpack_exports__, "memoize", function() { - return __WEBPACK_IMPORTED_MODULE_83__memoize__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_84__deep_mix__ = __webpack_require__(96); - __webpack_require__.d(__webpack_exports__, "deepMix", function() { - return __WEBPACK_IMPORTED_MODULE_84__deep_mix__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_85__each__ = __webpack_require__(2); - __webpack_require__.d(__webpack_exports__, "each", function() { - return __WEBPACK_IMPORTED_MODULE_85__each__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_86__extend__ = __webpack_require__(97); - __webpack_require__.d(__webpack_exports__, "extend", function() { - return __WEBPACK_IMPORTED_MODULE_86__extend__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_87__index_of__ = __webpack_require__(98); - __webpack_require__.d(__webpack_exports__, "indexOf", function() { - return __WEBPACK_IMPORTED_MODULE_87__index_of__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_88__is_empty__ = __webpack_require__(99); - __webpack_require__.d(__webpack_exports__, "isEmpty", function() { - return __WEBPACK_IMPORTED_MODULE_88__is_empty__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_89__is_equal__ = __webpack_require__(29); - __webpack_require__.d(__webpack_exports__, "isEqual", function() { - return __WEBPACK_IMPORTED_MODULE_89__is_equal__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_90__is_equal_with__ = __webpack_require__(100); - __webpack_require__.d(__webpack_exports__, "isEqualWith", function() { - return __WEBPACK_IMPORTED_MODULE_90__is_equal_with__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_91__map__ = __webpack_require__(101); - __webpack_require__.d(__webpack_exports__, "map", function() { - return __WEBPACK_IMPORTED_MODULE_91__map__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_92__map_values__ = __webpack_require__(102); - __webpack_require__.d(__webpack_exports__, "mapValues", function() { - return __WEBPACK_IMPORTED_MODULE_92__map_values__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_93__mix__ = __webpack_require__(16); - __webpack_require__.d(__webpack_exports__, "mix", function() { - return __WEBPACK_IMPORTED_MODULE_93__mix__["a"]; - }); - __webpack_require__.d(__webpack_exports__, "assign", function() { - return __WEBPACK_IMPORTED_MODULE_93__mix__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_94__get__ = __webpack_require__(103); - __webpack_require__.d(__webpack_exports__, "get", function() { - return __WEBPACK_IMPORTED_MODULE_94__get__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_95__set__ = __webpack_require__(104); - __webpack_require__.d(__webpack_exports__, "set", function() { - return __WEBPACK_IMPORTED_MODULE_95__set__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_96__pick__ = __webpack_require__(105); - __webpack_require__.d(__webpack_exports__, "pick", function() { - return __WEBPACK_IMPORTED_MODULE_96__pick__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_97__throttle__ = __webpack_require__(106); - __webpack_require__.d(__webpack_exports__, "throttle", function() { - return __WEBPACK_IMPORTED_MODULE_97__throttle__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_98__to_array__ = __webpack_require__(107); - __webpack_require__.d(__webpack_exports__, "toArray", function() { - return __WEBPACK_IMPORTED_MODULE_98__to_array__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_99__to_string__ = __webpack_require__(10); - __webpack_require__.d(__webpack_exports__, "toString", function() { - return __WEBPACK_IMPORTED_MODULE_99__to_string__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_100__unique_id__ = __webpack_require__(108); - __webpack_require__.d(__webpack_exports__, "uniqueId", function() { - return __WEBPACK_IMPORTED_MODULE_100__unique_id__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_101__noop__ = __webpack_require__(109); - __webpack_require__.d(__webpack_exports__, "noop", function() { - return __WEBPACK_IMPORTED_MODULE_101__noop__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_102__identity__ = __webpack_require__(110); - __webpack_require__.d(__webpack_exports__, "identity", function() { - return __WEBPACK_IMPORTED_MODULE_102__identity__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_103__size__ = __webpack_require__(111); - __webpack_require__.d(__webpack_exports__, "size", function() { - return __WEBPACK_IMPORTED_MODULE_103__size__["a"]; - }); - var __WEBPACK_IMPORTED_MODULE_104__cache__ = __webpack_require__(112); - __webpack_require__.d(__webpack_exports__, "Cache", function() { - return __WEBPACK_IMPORTED_MODULE_104__cache__["a"]; - }); - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__filter__ = __webpack_require__(14); - var __WEBPACK_IMPORTED_MODULE_1__contains__ = __webpack_require__(12); - var difference2 = function(arr, values4) { - if (values4 === void 0) { - values4 = []; - } - return Object(__WEBPACK_IMPORTED_MODULE_0__filter__["a"])(arr, function(value2) { - return !Object(__WEBPACK_IMPORTED_MODULE_1__contains__["a"])(values4, value2); - }); - }; - __webpack_exports__["a"] = difference2; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_function__ = __webpack_require__(3); - var __WEBPACK_IMPORTED_MODULE_1__is_match__ = __webpack_require__(19); - var __WEBPACK_IMPORTED_MODULE_2__is_array__ = __webpack_require__(0); - var __WEBPACK_IMPORTED_MODULE_3__is_plain_object__ = __webpack_require__(9); - function find11(arr, predicate) { - if (!Object(__WEBPACK_IMPORTED_MODULE_2__is_array__["a"])(arr)) - return null; - var _predicate; - if (Object(__WEBPACK_IMPORTED_MODULE_0__is_function__["a"])(predicate)) { - _predicate = predicate; - } - if (Object(__WEBPACK_IMPORTED_MODULE_3__is_plain_object__["a"])(predicate)) { - _predicate = function(a4) { - return Object(__WEBPACK_IMPORTED_MODULE_1__is_match__["a"])(a4, predicate); - }; - } - if (_predicate) { - for (var i4 = 0; i4 < arr.length; i4 += 1) { - if (_predicate(arr[i4])) { - return arr[i4]; - } - } - } - return null; - } - __webpack_exports__["a"] = find11; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - function findIndex3(arr, predicate, fromIndex) { - if (fromIndex === void 0) { - fromIndex = 0; - } - for (var i4 = fromIndex; i4 < arr.length; i4++) { - if (predicate(arr[i4], i4)) { - return i4; - } - } - return -1; - } - __webpack_exports__["a"] = findIndex3; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_nil__ = __webpack_require__(6); - var __WEBPACK_IMPORTED_MODULE_1__is_array__ = __webpack_require__(0); - var firstValue2 = function(data3, name) { - var rst = null; - for (var i4 = 0; i4 < data3.length; i4++) { - var obj = data3[i4]; - var value2 = obj[name]; - if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_nil__["a"])(value2)) { - if (Object(__WEBPACK_IMPORTED_MODULE_1__is_array__["a"])(value2)) { - rst = value2[0]; - } else { - rst = value2; - } - break; - } - } - return rst; - }; - __webpack_exports__["a"] = firstValue2; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(0); - var flatten9 = function(arr) { - if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a"])(arr)) { - return []; - } - var rst = []; - for (var i4 = 0; i4 < arr.length; i4++) { - rst = rst.concat(arr[i4]); - } - return rst; - }; - __webpack_exports__["a"] = flatten9; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(0); - var flattenDeep = function(arr, result) { - if (result === void 0) { - result = []; - } - if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a"])(arr)) { - result.push(arr); - } else { - for (var i4 = 0; i4 < arr.length; i4 += 1) { - flattenDeep(arr[i4], result); - } - } - return result; - }; - __webpack_exports__["a"] = flattenDeep; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(0); - var __WEBPACK_IMPORTED_MODULE_1__filter__ = __webpack_require__(14); - var getRange3 = function(values4) { - values4 = Object(__WEBPACK_IMPORTED_MODULE_1__filter__["a"])(values4, function(v3) { - return !isNaN(v3); - }); - if (!values4.length) { - return { - min: 0, - max: 0 - }; - } - if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a"])(values4[0])) { - var tmp = []; - for (var i4 = 0; i4 < values4.length; i4++) { - tmp = tmp.concat(values4[i4]); - } - values4 = tmp; - } - var max15 = Math.max.apply(null, values4); - var min13 = Math.min.apply(null, values4); - return { - min: min13, - max: max15 - }; - }; - __webpack_exports__["a"] = getRange3; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var arrPrototype = Array.prototype; - var splice = arrPrototype.splice; - var indexOf2 = arrPrototype.indexOf; - var pull = function(arr) { - var values4 = []; - for (var _i = 1; _i < arguments.length; _i++) { - values4[_i - 1] = arguments[_i]; - } - for (var i4 = 0; i4 < values4.length; i4++) { - var value2 = values4[i4]; - var fromIndex = -1; - while ((fromIndex = indexOf2.call(arr, value2)) > -1) { - splice.call(arr, fromIndex, 1); - } - } - return arr; - }; - __webpack_exports__["a"] = pull; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(2); - var __WEBPACK_IMPORTED_MODULE_1__is_array__ = __webpack_require__(0); - var __WEBPACK_IMPORTED_MODULE_2__is_plain_object__ = __webpack_require__(9); - var reduce11 = function(arr, fn, init) { - if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_array__["a"])(arr) && !Object(__WEBPACK_IMPORTED_MODULE_2__is_plain_object__["a"])(arr)) { - return arr; - } - var result = init; - Object(__WEBPACK_IMPORTED_MODULE_0__each__["a"])(arr, function(data3, i4) { - result = fn(result, data3, i4); - }); - return result; - }; - __webpack_exports__["a"] = reduce11; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(1); - var __WEBPACK_IMPORTED_MODULE_1__pull_at__ = __webpack_require__(21); - var remove2 = function(arr, predicate) { - var result = []; - if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a"])(arr)) { - return result; - } - var i4 = -1; - var indexes = []; - var length5 = arr.length; - while (++i4 < length5) { - var value2 = arr[i4]; - if (predicate(value2, i4, arr)) { - result.push(value2); - indexes.push(i4); - } - } - Object(__WEBPACK_IMPORTED_MODULE_1__pull_at__["a"])(arr, indexes); - return result; - }; - __webpack_exports__["a"] = remove2; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(0); - var __WEBPACK_IMPORTED_MODULE_1__is_string__ = __webpack_require__(8); - var __WEBPACK_IMPORTED_MODULE_2__is_function__ = __webpack_require__(3); - function sortBy2(arr, key) { - var comparer; - if (Object(__WEBPACK_IMPORTED_MODULE_2__is_function__["a"])(key)) { - comparer = function(a4, b10) { - return key(a4) - key(b10); - }; - } else { - var keys_1 = []; - if (Object(__WEBPACK_IMPORTED_MODULE_1__is_string__["a"])(key)) { - keys_1.push(key); - } else if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a"])(key)) { - keys_1 = key; - } - comparer = function(a4, b10) { - for (var i4 = 0; i4 < keys_1.length; i4 += 1) { - var prop = keys_1[i4]; - if (a4[prop] > b10[prop]) { - return 1; - } - if (a4[prop] < b10[prop]) { - return -1; - } - } - return 0; - }; - } - arr.sort(comparer); - return arr; - } - __webpack_exports__["a"] = sortBy2; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__uniq__ = __webpack_require__(22); - var union = function() { - var sources = []; - for (var _i = 0; _i < arguments.length; _i++) { - sources[_i] = arguments[_i]; - } - return Object(__WEBPACK_IMPORTED_MODULE_0__uniq__["a"])([].concat.apply([], sources)); - }; - __webpack_exports__["a"] = union; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(2); - var __WEBPACK_IMPORTED_MODULE_1__is_array__ = __webpack_require__(0); - var __WEBPACK_IMPORTED_MODULE_2__is_nil__ = __webpack_require__(6); - __webpack_exports__["a"] = function(data3, name) { - var rst = []; - var tmpMap = {}; - data3.forEach(function(obj) { - var value2 = obj[name]; - if (!Object(__WEBPACK_IMPORTED_MODULE_2__is_nil__["a"])(value2)) { - if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_array__["a"])(value2)) { - value2 = [value2]; - } - Object(__WEBPACK_IMPORTED_MODULE_0__each__["a"])(value2, function(val) { - if (!tmpMap[val]) { - rst.push(val); - tmpMap[val] = true; - } - }); - } - }); - return rst; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__["a"] = head13; - var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(1); - function head13(o3) { - if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a"])(o3)) { - return o3[0]; - } - return void 0; - } - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__["a"] = last17; - var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(1); - function last17(o3) { - if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a"])(o3)) { - var arr = o3; - return arr[arr.length - 1]; - } - return void 0; - } - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(0); - var __WEBPACK_IMPORTED_MODULE_1__is_string__ = __webpack_require__(8); - function startsWith(arr, e4) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a"])(arr) || Object(__WEBPACK_IMPORTED_MODULE_1__is_string__["a"])(arr) ? arr[0] === e4 : false; - } - __webpack_exports__["a"] = startsWith; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(0); - var __WEBPACK_IMPORTED_MODULE_1__is_string__ = __webpack_require__(8); - function endsWith(arr, e4) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a"])(arr) || Object(__WEBPACK_IMPORTED_MODULE_1__is_string__["a"])(arr) ? arr[arr.length - 1] === e4 : false; - } - __webpack_exports__["a"] = endsWith; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var every4 = function(arr, func) { - for (var i4 = 0; i4 < arr.length; i4++) { - if (!func(arr[i4], i4)) - return false; - } - return true; - }; - __webpack_exports__["a"] = every4; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var some5 = function(arr, func) { - for (var i4 = 0; i4 < arr.length; i4++) { - if (func(arr[i4], i4)) - return true; - } - return false; - }; - __webpack_exports__["a"] = some5; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__group_to_map__ = __webpack_require__(23); - __webpack_exports__["a"] = function(data3, condition) { - if (!condition) { - return [data3]; - } - var groups = Object(__WEBPACK_IMPORTED_MODULE_0__group_to_map__["a"])(data3, condition); - var array = []; - for (var i4 in groups) { - array.push(groups[i4]); - } - return array; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - function getWrapBehavior(obj, action) { - return obj["_wrap_" + action]; - } - __webpack_exports__["a"] = getWrapBehavior; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - function wrapBehavior4(obj, action) { - if (obj["_wrap_" + action]) { - return obj["_wrap_" + action]; - } - var method = function(e4) { - obj[action](e4); - }; - obj["_wrap_" + action] = method; - return method; - } - __webpack_exports__["a"] = wrapBehavior4; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var numColorCache = {}; - function numberToColor(num) { - var color4 = numColorCache[num]; - if (!color4) { - var str8 = num.toString(16); - for (var i4 = str8.length; i4 < 6; i4++) { - str8 = "0" + str8; - } - color4 = "#" + str8; - numColorCache[num] = color4; - } - return color4; - } - __webpack_exports__["a"] = numberToColor; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(0); - function parseRadius4(radius) { - var r1 = 0, r22 = 0, r32 = 0, r4 = 0; - if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a"])(radius)) { - if (radius.length === 1) { - r1 = r22 = r32 = r4 = radius[0]; - } else if (radius.length === 2) { - r1 = r32 = radius[0]; - r22 = r4 = radius[1]; - } else if (radius.length === 3) { - r1 = radius[0]; - r22 = r4 = radius[1]; - r32 = radius[2]; - } else { - r1 = radius[0]; - r22 = radius[1]; - r32 = radius[2]; - r4 = radius[3]; - } - } else { - r1 = r22 = r32 = r4 = radius; - } - return { - r1, - r2: r22, - r3: r32, - r4 - }; - } - __webpack_exports__["a"] = parseRadius4; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var clamp12 = function(a4, min13, max15) { - if (a4 < min13) { - return min13; - } else if (a4 > max15) { - return max15; - } - return a4; - }; - __webpack_exports__["a"] = clamp12; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var fixedBase2 = function(v3, base) { - var str8 = base.toString(); - var index2 = str8.indexOf("."); - if (index2 === -1) { - return Math.round(v3); - } - var length5 = str8.substr(index2 + 1).length; - if (length5 > 20) { - length5 = 20; - } - return parseFloat(v3.toFixed(length5)); - }; - __webpack_exports__["a"] = fixedBase2; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(5); - var isDecimal = function(num) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a"])(num) && num % 1 !== 0; - }; - __webpack_exports__["a"] = isDecimal; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(5); - var isEven = function(num) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a"])(num) && num % 2 === 0; - }; - __webpack_exports__["a"] = isEven; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(5); - var isInteger2 = Number.isInteger ? Number.isInteger : function(num) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a"])(num) && num % 1 === 0; - }; - __webpack_exports__["a"] = isInteger2; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(5); - var isNegative = function(num) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a"])(num) && num < 0; - }; - __webpack_exports__["a"] = isNegative; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__["a"] = isNumberEqual11; - var PRECISION = 1e-5; - function isNumberEqual11(a4, b10, precision) { - if (precision === void 0) { - precision = PRECISION; - } - return Math.abs(a4 - b10) < precision; - } - ; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(5); - var isOdd = function(num) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a"])(num) && num % 2 !== 0; - }; - __webpack_exports__["a"] = isOdd; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(5); - var isPositive = function(num) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a"])(num) && num > 0; - }; - __webpack_exports__["a"] = isPositive; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(2); - var __WEBPACK_IMPORTED_MODULE_1__is_array__ = __webpack_require__(0); - var __WEBPACK_IMPORTED_MODULE_2__is_function__ = __webpack_require__(3); - __webpack_exports__["a"] = function(arr, fn) { - if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_array__["a"])(arr)) { - return void 0; - } - var max15 = arr[0]; - var maxData; - if (Object(__WEBPACK_IMPORTED_MODULE_2__is_function__["a"])(fn)) { - maxData = fn(arr[0]); - } else { - maxData = arr[0][fn]; - } - var data3; - Object(__WEBPACK_IMPORTED_MODULE_0__each__["a"])(arr, function(val) { - if (Object(__WEBPACK_IMPORTED_MODULE_2__is_function__["a"])(fn)) { - data3 = fn(val); - } else { - data3 = val[fn]; - } - if (data3 > maxData) { - max15 = val; - maxData = data3; - } - }); - return max15; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(2); - var __WEBPACK_IMPORTED_MODULE_1__is_array__ = __webpack_require__(0); - var __WEBPACK_IMPORTED_MODULE_2__is_function__ = __webpack_require__(3); - __webpack_exports__["a"] = function(arr, fn) { - if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_array__["a"])(arr)) { - return void 0; - } - var min13 = arr[0]; - var minData; - if (Object(__WEBPACK_IMPORTED_MODULE_2__is_function__["a"])(fn)) { - minData = fn(arr[0]); - } else { - minData = arr[0][fn]; - } - var data3; - Object(__WEBPACK_IMPORTED_MODULE_0__each__["a"])(arr, function(val) { - if (Object(__WEBPACK_IMPORTED_MODULE_2__is_function__["a"])(fn)) { - data3 = fn(val); - } else { - data3 = val[fn]; - } - if (data3 < minData) { - min13 = val; - minData = data3; - } - }); - return min13; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var mod5 = function(n3, m4) { - return (n3 % m4 + m4) % m4; - }; - __webpack_exports__["a"] = mod5; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var DEGREE = 180 / Math.PI; - var toDegree = function(radian) { - return DEGREE * radian; - }; - __webpack_exports__["a"] = toDegree; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__["a"] = parseInt; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var RADIAN = Math.PI / 180; - var toRadian4 = function(degree4) { - return RADIAN * degree4; - }; - __webpack_exports__["a"] = toRadian4; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(2); - __webpack_exports__["a"] = __WEBPACK_IMPORTED_MODULE_0__each__["a"]; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__has__ = __webpack_require__(25); - __webpack_exports__["a"] = __WEBPACK_IMPORTED_MODULE_0__has__["a"]; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__contains__ = __webpack_require__(12); - var __WEBPACK_IMPORTED_MODULE_1__values__ = __webpack_require__(26); - __webpack_exports__["a"] = function(obj, value2) { - return Object(__WEBPACK_IMPORTED_MODULE_0__contains__["a"])(Object(__WEBPACK_IMPORTED_MODULE_1__values__["a"])(obj), value2); - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__to_string__ = __webpack_require__(10); - var lowerCase4 = function(str8) { - return Object(__WEBPACK_IMPORTED_MODULE_0__to_string__["a"])(str8).toLowerCase(); - }; - __webpack_exports__["a"] = lowerCase4; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__to_string__ = __webpack_require__(10); - var lowerFirst = function(value2) { - var str8 = Object(__WEBPACK_IMPORTED_MODULE_0__to_string__["a"])(value2); - return str8.charAt(0).toLowerCase() + str8.substring(1); - }; - __webpack_exports__["a"] = lowerFirst; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - function substitute5(str8, o3) { - if (!str8 || !o3) { - return str8; - } - return str8.replace(/\\?\{([^{}]+)\}/g, function(match, name) { - if (match.charAt(0) === "\\") { - return match.slice(1); - } - return o3[name] === void 0 ? "" : o3[name]; - }); - } - __webpack_exports__["a"] = substitute5; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__to_string__ = __webpack_require__(10); - var upperCase = function(str8) { - return Object(__WEBPACK_IMPORTED_MODULE_0__to_string__["a"])(str8).toUpperCase(); - }; - __webpack_exports__["a"] = upperCase; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__to_string__ = __webpack_require__(10); - var upperFirst8 = function(value2) { - var str8 = Object(__WEBPACK_IMPORTED_MODULE_0__to_string__["a"])(value2); - return str8.charAt(0).toUpperCase() + str8.substring(1); - }; - __webpack_exports__["a"] = upperFirst8; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(4); - var isArguments = function(value2) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a"])(value2, "Arguments"); - }; - __webpack_exports__["a"] = isArguments; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(4); - var isBoolean10 = function(value2) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a"])(value2, "Boolean"); - }; - __webpack_exports__["a"] = isBoolean10; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(4); - var isDate3 = function(value2) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a"])(value2, "Date"); - }; - __webpack_exports__["a"] = isDate3; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(4); - var isError = function(value2) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a"])(value2, "Error"); - }; - __webpack_exports__["a"] = isError; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_number__ = __webpack_require__(5); - __webpack_exports__["a"] = function(value2) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_number__["a"])(value2) && isFinite(value2); - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var isNull3 = function(value2) { - return value2 === null; - }; - __webpack_exports__["a"] = isNull3; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_type__ = __webpack_require__(4); - var isRegExp = function(str8) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_type__["a"])(str8, "RegExp"); - }; - __webpack_exports__["a"] = isRegExp; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var isUndefined5 = function(value2) { - return value2 === void 0; - }; - __webpack_exports__["a"] = isUndefined5; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var isElement3 = function(o3) { - return o3 instanceof Element || o3 instanceof HTMLDocument; - }; - __webpack_exports__["a"] = isElement3; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__["a"] = requestAnimationFrame4; - function requestAnimationFrame4(fn) { - var method = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.msRequestAnimationFrame || function(f3) { - return setTimeout(f3, 16); - }; - return method(fn); - } - ; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__["a"] = cancelAnimationFrame3; - function cancelAnimationFrame3(handler) { - var method = window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.msCancelAnimationFrame || clearTimeout; - method(handler); - } - ; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__mix__ = __webpack_require__(16); - var __WEBPACK_IMPORTED_MODULE_1__is_function__ = __webpack_require__(3); - var augment = function() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var c5 = args[0]; - for (var i4 = 1; i4 < args.length; i4++) { - var obj = args[i4]; - if (Object(__WEBPACK_IMPORTED_MODULE_1__is_function__["a"])(obj)) { - obj = obj.prototype; - } - Object(__WEBPACK_IMPORTED_MODULE_0__mix__["a"])(c5.prototype, obj); - } - }; - __webpack_exports__["a"] = augment; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(0); - var clone41 = function(obj) { - if (typeof obj !== "object" || obj === null) { - return obj; - } - var rst; - if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a"])(obj)) { - rst = []; - for (var i4 = 0, l4 = obj.length; i4 < l4; i4++) { - if (typeof obj[i4] === "object" && obj[i4] != null) { - rst[i4] = clone41(obj[i4]); - } else { - rst[i4] = obj[i4]; - } - } - } else { - rst = {}; - for (var k4 in obj) { - if (typeof obj[k4] === "object" && obj[k4] != null) { - rst[k4] = clone41(obj[k4]); - } else { - rst[k4] = obj[k4]; - } - } - } - return rst; - }; - __webpack_exports__["a"] = clone41; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - function debounce5(func, wait, immediate) { - var timeout2; - return function() { - var context = this, args = arguments; - var later = function() { - timeout2 = null; - if (!immediate) { - func.apply(context, args); - } - }; - var callNow = immediate && !timeout2; - clearTimeout(timeout2); - timeout2 = setTimeout(later, wait); - if (callNow) { - func.apply(context, args); - } - }; - } - __webpack_exports__["a"] = debounce5; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_function__ = __webpack_require__(3); - __webpack_exports__["a"] = function(f3, resolver) { - if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_function__["a"])(f3)) { - throw new TypeError("Expected a function"); - } - var memoized = function() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var key = resolver ? resolver.apply(this, args) : args[0]; - var cache3 = memoized.cache; - if (cache3.has(key)) { - return cache3.get(key); - } - var result = f3.apply(this, args); - cache3.set(key, result); - return result; - }; - memoized.cache = new Map(); - return memoized; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array__ = __webpack_require__(0); - var __WEBPACK_IMPORTED_MODULE_1__is_plain_object__ = __webpack_require__(9); - var MAX_MIX_LEVEL2 = 5; - function _deepMix(dist4, src, level, maxLevel) { - level = level || 0; - maxLevel = maxLevel || MAX_MIX_LEVEL2; - for (var key in src) { - if (src.hasOwnProperty(key)) { - var value2 = src[key]; - if (value2 !== null && Object(__WEBPACK_IMPORTED_MODULE_1__is_plain_object__["a"])(value2)) { - if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_plain_object__["a"])(dist4[key])) { - dist4[key] = {}; - } - if (level < maxLevel) { - _deepMix(dist4[key], value2, level + 1, maxLevel); - } else { - dist4[key] = src[key]; - } - } else if (Object(__WEBPACK_IMPORTED_MODULE_0__is_array__["a"])(value2)) { - dist4[key] = []; - dist4[key] = dist4[key].concat(value2); - } else if (value2 !== void 0) { - dist4[key] = value2; - } - } - } - } - var deepMix58 = function(rst) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - for (var i4 = 0; i4 < args.length; i4 += 1) { - _deepMix(rst, args[i4]); - } - return rst; - }; - __webpack_exports__["a"] = deepMix58; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__mix__ = __webpack_require__(16); - var __WEBPACK_IMPORTED_MODULE_1__is_function__ = __webpack_require__(3); - var extend4 = function(subclass, superclass, overrides, staticOverrides) { - if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_function__["a"])(superclass)) { - overrides = superclass; - superclass = subclass; - subclass = function() { - }; - } - var create8 = Object.create ? function(proto, c5) { - return Object.create(proto, { - constructor: { - value: c5 - } - }); - } : function(proto, c5) { - function Tmp() { - } - Tmp.prototype = proto; - var o3 = new Tmp(); - o3.constructor = c5; - return o3; - }; - var superObj = create8(superclass.prototype, subclass); - subclass.prototype = Object(__WEBPACK_IMPORTED_MODULE_0__mix__["a"])(superObj, subclass.prototype); - subclass.superclass = create8(superclass.prototype, superclass); - Object(__WEBPACK_IMPORTED_MODULE_0__mix__["a"])(superObj, overrides); - Object(__WEBPACK_IMPORTED_MODULE_0__mix__["a"])(subclass, staticOverrides); - return subclass; - }; - __webpack_exports__["a"] = extend4; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(1); - var indexOf2 = function(arr, obj) { - if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a"])(arr)) { - return -1; - } - var m4 = Array.prototype.indexOf; - if (m4) { - return m4.call(arr, obj); - } - var index2 = -1; - for (var i4 = 0; i4 < arr.length; i4++) { - if (arr[i4] === obj) { - index2 = i4; - break; - } - } - return index2; - }; - __webpack_exports__["a"] = indexOf2; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_nil__ = __webpack_require__(6); - var __WEBPACK_IMPORTED_MODULE_1__is_array_like__ = __webpack_require__(1); - var __WEBPACK_IMPORTED_MODULE_2__get_type__ = __webpack_require__(27); - var __WEBPACK_IMPORTED_MODULE_3__is_prototype__ = __webpack_require__(28); - var hasOwnProperty = Object.prototype.hasOwnProperty; - function isEmpty14(value2) { - if (Object(__WEBPACK_IMPORTED_MODULE_0__is_nil__["a"])(value2)) { - return true; - } - if (Object(__WEBPACK_IMPORTED_MODULE_1__is_array_like__["a"])(value2)) { - return !value2.length; - } - var type2 = Object(__WEBPACK_IMPORTED_MODULE_2__get_type__["a"])(value2); - if (type2 === "Map" || type2 === "Set") { - return !value2.size; - } - if (Object(__WEBPACK_IMPORTED_MODULE_3__is_prototype__["a"])(value2)) { - return !Object.keys(value2).length; - } - for (var key in value2) { - if (hasOwnProperty.call(value2, key)) { - return false; - } - } - return true; - } - __webpack_exports__["a"] = isEmpty14; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_function__ = __webpack_require__(3); - var __WEBPACK_IMPORTED_MODULE_1__is_equal__ = __webpack_require__(29); - __webpack_exports__["a"] = function(value2, other2, fn) { - if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_function__["a"])(fn)) { - return Object(__WEBPACK_IMPORTED_MODULE_1__is_equal__["a"])(value2, other2); - } - return !!fn(value2, other2); - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(2); - var __WEBPACK_IMPORTED_MODULE_1__is_array_like__ = __webpack_require__(1); - var map23 = function(arr, func) { - if (!Object(__WEBPACK_IMPORTED_MODULE_1__is_array_like__["a"])(arr)) { - return arr; - } - var result = []; - Object(__WEBPACK_IMPORTED_MODULE_0__each__["a"])(arr, function(value2, index2) { - result.push(func(value2, index2)); - }); - return result; - }; - __webpack_exports__["a"] = map23; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_nil__ = __webpack_require__(6); - var __WEBPACK_IMPORTED_MODULE_1__is_object__ = __webpack_require__(13); - var identity4 = function(v3) { - return v3; - }; - __webpack_exports__["a"] = function(object, func) { - if (func === void 0) { - func = identity4; - } - var r4 = {}; - if (Object(__WEBPACK_IMPORTED_MODULE_1__is_object__["a"])(object) && !Object(__WEBPACK_IMPORTED_MODULE_0__is_nil__["a"])(object)) { - Object.keys(object).forEach(function(key) { - r4[key] = func(object[key], key); - }); - } - return r4; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_string__ = __webpack_require__(8); - __webpack_exports__["a"] = function(obj, key, defaultValue) { - var p4 = 0; - var keyArr = Object(__WEBPACK_IMPORTED_MODULE_0__is_string__["a"])(key) ? key.split(".") : key; - while (obj && p4 < keyArr.length) { - obj = obj[keyArr[p4++]]; - } - return obj === void 0 || p4 < keyArr.length ? defaultValue : obj; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_object__ = __webpack_require__(13); - var __WEBPACK_IMPORTED_MODULE_1__is_string__ = __webpack_require__(8); - var __WEBPACK_IMPORTED_MODULE_2__is_number__ = __webpack_require__(5); - __webpack_exports__["a"] = function(obj, path, value2) { - var o3 = obj; - var keyArr = Object(__WEBPACK_IMPORTED_MODULE_1__is_string__["a"])(path) ? path.split(".") : path; - keyArr.forEach(function(key, idx) { - if (idx < keyArr.length - 1) { - if (!Object(__WEBPACK_IMPORTED_MODULE_0__is_object__["a"])(o3[key])) { - o3[key] = Object(__WEBPACK_IMPORTED_MODULE_2__is_number__["a"])(keyArr[idx + 1]) ? [] : {}; - } - o3 = o3[key]; - } else { - o3[key] = value2; - } - }); - return obj; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__each__ = __webpack_require__(2); - var __WEBPACK_IMPORTED_MODULE_1__is_plain_object__ = __webpack_require__(9); - var hasOwnProperty = Object.prototype.hasOwnProperty; - __webpack_exports__["a"] = function(object, keys6) { - if (object === null || !Object(__WEBPACK_IMPORTED_MODULE_1__is_plain_object__["a"])(object)) { - return {}; - } - var result = {}; - Object(__WEBPACK_IMPORTED_MODULE_0__each__["a"])(keys6, function(key) { - if (hasOwnProperty.call(object, key)) { - result[key] = object[key]; - } - }); - return result; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__["a"] = function(func, wait, options) { - var timeout2, context, args, result; - var previous = 0; - if (!options) - options = {}; - var later = function() { - previous = options.leading === false ? 0 : Date.now(); - timeout2 = null; - result = func.apply(context, args); - if (!timeout2) - context = args = null; - }; - var throttled = function() { - var now2 = Date.now(); - if (!previous && options.leading === false) - previous = now2; - var remaining = wait - (now2 - previous); - context = this; - args = arguments; - if (remaining <= 0 || remaining > wait) { - if (timeout2) { - clearTimeout(timeout2); - timeout2 = null; - } - previous = now2; - result = func.apply(context, args); - if (!timeout2) - context = args = null; - } else if (!timeout2 && options.trailing !== false) { - timeout2 = setTimeout(later, remaining); - } - return result; - }; - throttled.cancel = function() { - clearTimeout(timeout2); - previous = 0; - timeout2 = context = args = null; - }; - return throttled; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var __WEBPACK_IMPORTED_MODULE_0__is_array_like__ = __webpack_require__(1); - __webpack_exports__["a"] = function(value2) { - return Object(__WEBPACK_IMPORTED_MODULE_0__is_array_like__["a"])(value2) ? Array.prototype.slice.call(value2) : []; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var map23 = {}; - __webpack_exports__["a"] = function(prefix2) { - prefix2 = prefix2 || "g"; - if (!map23[prefix2]) { - map23[prefix2] = 1; - } else { - map23[prefix2] += 1; - } - return prefix2 + map23[prefix2]; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__["a"] = function() { - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__["a"] = function(v3) { - return v3; - }; - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - __webpack_exports__["a"] = size14; - var __WEBPACK_IMPORTED_MODULE_0__is_nil__ = __webpack_require__(6); - var __WEBPACK_IMPORTED_MODULE_1__is_array_like__ = __webpack_require__(1); - function size14(o3) { - if (Object(__WEBPACK_IMPORTED_MODULE_0__is_nil__["a"])(o3)) { - return 0; - } - if (Object(__WEBPACK_IMPORTED_MODULE_1__is_array_like__["a"])(o3)) { - return o3.length; - } - return Object.keys(o3).length; - } - }, - function(module3, __webpack_exports__, __webpack_require__) { - "use strict"; - var default_1 = function() { - function default_12() { - this.map = {}; - } - default_12.prototype.has = function(key) { - return this.map[key] !== void 0; - }; - default_12.prototype.get = function(key, def) { - var v3 = this.map[key]; - return v3 === void 0 ? def : v3; - }; - default_12.prototype.set = function(key, value2) { - this.map[key] = value2; - }; - default_12.prototype.clear = function() { - this.map = {}; - }; - default_12.prototype.delete = function(key) { - delete this.map[key]; - }; - default_12.prototype.size = function() { - return Object.keys(this.map).length; - }; - return default_12; - }(); - __webpack_exports__["a"] = default_1; - }, - function(module3, exports2) { - function WrappedTree(w4, h3, y5, c5) { - if (c5 === void 0) { - c5 = []; - } - var me = this; - me.w = w4 || 0; - me.h = h3 || 0; - me.y = y5 || 0; - me.x = 0; - me.c = c5 || []; - me.cs = c5.length; - me.prelim = 0; - me.mod = 0; - me.shift = 0; - me.change = 0; - me.tl = null; - me.tr = null; - me.el = null; - me.er = null; - me.msel = 0; - me.mser = 0; - } - WrappedTree.fromNode = function(root, isHorizontal2) { - if (!root) - return null; - var children = []; - root.children.forEach(function(child) { - children.push(WrappedTree.fromNode(child, isHorizontal2)); - }); - if (isHorizontal2) - return new WrappedTree(root.height, root.width, root.x, children); - return new WrappedTree(root.width, root.height, root.y, children); - }; - function moveRight(node, move3, isHorizontal2) { - if (isHorizontal2) { - node.y += move3; - } else { - node.x += move3; - } - node.children.forEach(function(child) { - moveRight(child, move3, isHorizontal2); - }); - } - function getMin(node, isHorizontal2) { - var res = isHorizontal2 ? node.y : node.x; - node.children.forEach(function(child) { - res = Math.min(getMin(child, isHorizontal2), res); - }); - return res; - } - function normalize5(node, isHorizontal2) { - var min13 = getMin(node, isHorizontal2); - moveRight(node, -min13, isHorizontal2); - } - function convertBack(converted, root, isHorizontal2) { - if (isHorizontal2) { - root.y = converted.x; - } else { - root.x = converted.x; - } - converted.c.forEach(function(child, i4) { - convertBack(child, root.children[i4], isHorizontal2); - }); - } - function layer(node, isHorizontal2, d3) { - if (d3 === void 0) { - d3 = 0; - } - if (isHorizontal2) { - node.x = d3; - d3 += node.width; - } else { - node.y = d3; - d3 += node.height; - } - node.children.forEach(function(child) { - layer(child, isHorizontal2, d3); - }); - } - module3.exports = function(root, options) { - if (options === void 0) { - options = {}; - } - var isHorizontal2 = options.isHorizontal; - function firstWalk(t4) { - if (t4.cs === 0) { - setExtremes(t4); - return; - } - firstWalk(t4.c[0]); - var ih = updateIYL(bottom(t4.c[0].el), 0, null); - for (var i4 = 1; i4 < t4.cs; ++i4) { - firstWalk(t4.c[i4]); - var min13 = bottom(t4.c[i4].er); - separate(t4, i4, ih); - ih = updateIYL(min13, i4, ih); - } - positionRoot(t4); - setExtremes(t4); - } - function setExtremes(t4) { - if (t4.cs === 0) { - t4.el = t4; - t4.er = t4; - t4.msel = t4.mser = 0; - } else { - t4.el = t4.c[0].el; - t4.msel = t4.c[0].msel; - t4.er = t4.c[t4.cs - 1].er; - t4.mser = t4.c[t4.cs - 1].mser; - } - } - function separate(t4, i4, ih) { - var sr = t4.c[i4 - 1]; - var mssr = sr.mod; - var cl = t4.c[i4]; - var mscl = cl.mod; - while (sr !== null && cl !== null) { - if (bottom(sr) > ih.low) - ih = ih.nxt; - var dist4 = mssr + sr.prelim + sr.w - (mscl + cl.prelim); - if (dist4 > 0) { - mscl += dist4; - moveSubtree2(t4, i4, ih.index, dist4); - } - var sy = bottom(sr); - var cy = bottom(cl); - if (sy <= cy) { - sr = nextRightContour(sr); - if (sr !== null) - mssr += sr.mod; - } - if (sy >= cy) { - cl = nextLeftContour(cl); - if (cl !== null) - mscl += cl.mod; - } - } - if (!sr && !!cl) { - setLeftThread(t4, i4, cl, mscl); - } else if (!!sr && !cl) { - setRightThread(t4, i4, sr, mssr); - } - } - function moveSubtree2(t4, i4, si, dist4) { - t4.c[i4].mod += dist4; - t4.c[i4].msel += dist4; - t4.c[i4].mser += dist4; - distributeExtra(t4, i4, si, dist4); - } - function nextLeftContour(t4) { - return t4.cs === 0 ? t4.tl : t4.c[0]; - } - function nextRightContour(t4) { - return t4.cs === 0 ? t4.tr : t4.c[t4.cs - 1]; - } - function bottom(t4) { - return t4.y + t4.h; - } - function setLeftThread(t4, i4, cl, modsumcl) { - var li = t4.c[0].el; - li.tl = cl; - var diff2 = modsumcl - cl.mod - t4.c[0].msel; - li.mod += diff2; - li.prelim -= diff2; - t4.c[0].el = t4.c[i4].el; - t4.c[0].msel = t4.c[i4].msel; - } - function setRightThread(t4, i4, sr, modsumsr) { - var ri = t4.c[i4].er; - ri.tr = sr; - var diff2 = modsumsr - sr.mod - t4.c[i4].mser; - ri.mod += diff2; - ri.prelim -= diff2; - t4.c[i4].er = t4.c[i4 - 1].er; - t4.c[i4].mser = t4.c[i4 - 1].mser; - } - function positionRoot(t4) { - t4.prelim = (t4.c[0].prelim + t4.c[0].mod + t4.c[t4.cs - 1].mod + t4.c[t4.cs - 1].prelim + t4.c[t4.cs - 1].w) / 2 - t4.w / 2; - } - function secondWalk(t4, modsum) { - modsum += t4.mod; - t4.x = t4.prelim + modsum; - addChildSpacing(t4); - for (var i4 = 0; i4 < t4.cs; i4++) { - secondWalk(t4.c[i4], modsum); - } - } - function distributeExtra(t4, i4, si, dist4) { - if (si !== i4 - 1) { - var nr = i4 - si; - t4.c[si + 1].shift += dist4 / nr; - t4.c[i4].shift -= dist4 / nr; - t4.c[i4].change -= dist4 - dist4 / nr; - } - } - function addChildSpacing(t4) { - var d3 = 0; - var modsumdelta = 0; - for (var i4 = 0; i4 < t4.cs; i4++) { - d3 += t4.c[i4].shift; - modsumdelta += d3 + t4.c[i4].change; - t4.c[i4].mod += modsumdelta; - } - } - function updateIYL(low, index2, ih) { - while (ih !== null && low >= ih.low) { - ih = ih.nxt; - } - return { - low, - index: index2, - nxt: ih - }; - } - layer(root, isHorizontal2); - var wt = WrappedTree.fromNode(root, isHorizontal2); - firstWalk(wt); - secondWalk(wt, 0); - convertBack(wt, root, isHorizontal2); - normalize5(root, isHorizontal2); - return root; - }; - }, - function(module3, exports2, __webpack_require__) { - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; - } - var TreeLayout2 = __webpack_require__(11); - var dendrogram = __webpack_require__(115); - var doTreeLayout = __webpack_require__(17); - var util = __webpack_require__(7); - var DendrogramLayout = /* @__PURE__ */ function(_TreeLayout) { - _inheritsLoose(DendrogramLayout2, _TreeLayout); - function DendrogramLayout2() { - return _TreeLayout.apply(this, arguments) || this; - } - var _proto = DendrogramLayout2.prototype; - _proto.execute = function execute() { - var me = this; - me.rootNode.width = 0; - return doTreeLayout(me.rootNode, me.options, dendrogram); - }; - return DendrogramLayout2; - }(TreeLayout2); - var DEFAULT_OPTIONS37 = {}; - function dendrogramLayout(root, options) { - options = util.assign({}, DEFAULT_OPTIONS37, options); - return new DendrogramLayout(root, options).execute(); - } - module3.exports = dendrogramLayout; - }, - function(module3, exports2, __webpack_require__) { - var util = __webpack_require__(7); - function WrappedTree(height, children) { - if (height === void 0) { - height = 0; - } - if (children === void 0) { - children = []; - } - var me = this; - me.x = me.y = 0; - me.leftChild = me.rightChild = null; - me.height = 0; - me.children = children; - } - var DEFAULT_OPTIONS37 = { - isHorizontal: true, - nodeSep: 20, - nodeSize: 20, - rankSep: 200, - subTreeSep: 10 - }; - function convertBack(converted, root, isHorizontal2) { - if (isHorizontal2) { - root.x = converted.x; - root.y = converted.y; - } else { - root.x = converted.y; - root.y = converted.x; - } - converted.children.forEach(function(child, i4) { - convertBack(child, root.children[i4], isHorizontal2); - }); - } - module3.exports = function(root, options) { - if (options === void 0) { - options = {}; - } - options = util.assign({}, DEFAULT_OPTIONS37, options); - var maxDepth = 0; - function wrappedTreeFromNode(n3) { - if (!n3) - return null; - n3.width = 0; - if (n3.depth && n3.depth > maxDepth) { - maxDepth = n3.depth; - } - var children = n3.children; - var childrenCount = children.length; - var t4 = new WrappedTree(n3.height, []); - children.forEach(function(child, i4) { - var childWT = wrappedTreeFromNode(child); - t4.children.push(childWT); - if (i4 === 0) { - t4.leftChild = childWT; - } - if (i4 === childrenCount - 1) { - t4.rightChild = childWT; - } - }); - t4.originNode = n3; - t4.isLeaf = n3.isLeaf(); - return t4; - } - function getDrawingDepth(t4) { - if (t4.isLeaf || t4.children.length === 0) { - t4.drawingDepth = maxDepth; - } else { - var depths = t4.children.map(function(child) { - return getDrawingDepth(child); - }); - var minChildDepth = Math.min.apply(null, depths); - t4.drawingDepth = minChildDepth - 1; - } - return t4.drawingDepth; - } - var prevLeaf; - function position2(t4) { - t4.x = t4.drawingDepth * options.rankSep; - if (t4.isLeaf) { - t4.y = 0; - if (prevLeaf) { - t4.y = prevLeaf.y + prevLeaf.height + options.nodeSep; - if (t4.originNode.parent !== prevLeaf.originNode.parent) { - t4.y += options.subTreeSep; - } - } - prevLeaf = t4; - } else { - t4.children.forEach(function(child) { - position2(child); - }); - t4.y = (t4.leftChild.y + t4.rightChild.y) / 2; - } - } - var wt = wrappedTreeFromNode(root); - getDrawingDepth(wt); - position2(wt); - convertBack(wt, root, options.isHorizontal); - return root; - }; - }, - function(module3, exports2, __webpack_require__) { - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; - } - var TreeLayout2 = __webpack_require__(11); - var indentedTree = __webpack_require__(117); - var separateTree = __webpack_require__(30); - var util = __webpack_require__(7); - var VALID_DIRECTIONS = [ - "LR", - "RL", - "H" - ]; - var DEFAULT_DIRECTION = VALID_DIRECTIONS[0]; - var IndentedLayout = /* @__PURE__ */ function(_TreeLayout) { - _inheritsLoose(IndentedLayout2, _TreeLayout); - function IndentedLayout2() { - return _TreeLayout.apply(this, arguments) || this; - } - var _proto = IndentedLayout2.prototype; - _proto.execute = function execute() { - var me = this; - var options = me.options; - var root = me.rootNode; - options.isHorizontal = true; - var _options$indent = options.indent, indent2 = _options$indent === void 0 ? 20 : _options$indent, _options$dropCap = options.dropCap, dropCap = _options$dropCap === void 0 ? true : _options$dropCap; - var direction3 = options.direction || DEFAULT_DIRECTION; - if (direction3 && VALID_DIRECTIONS.indexOf(direction3) === -1) { - throw new TypeError("Invalid direction: " + direction3); - } - if (direction3 === VALID_DIRECTIONS[0]) { - indentedTree(root, indent2, dropCap); - } else if (direction3 === VALID_DIRECTIONS[1]) { - indentedTree(root, indent2, dropCap); - root.right2left(); - } else if (direction3 === VALID_DIRECTIONS[2]) { - var _separateTree = separateTree(root, options), left2 = _separateTree.left, right2 = _separateTree.right; - indentedTree(left2, indent2, dropCap); - left2.right2left(); - indentedTree(right2, indent2, dropCap); - var bbox = left2.getBoundingBox(); - right2.translate(bbox.width, 0); - root.x = right2.x - root.width / 2; - } - return root; - }; - return IndentedLayout2; - }(TreeLayout2); - var DEFAULT_OPTIONS37 = {}; - function indentedLayout(root, options) { - options = util.assign({}, DEFAULT_OPTIONS37, options); - return new IndentedLayout(root, options).execute(); - } - module3.exports = indentedLayout; - }, - function(module3, exports2) { - function positionNode(node, previousNode, indent2, dropCap) { - var displacementX = typeof indent2 === "function" ? indent2(node) : indent2 * node.depth; - if (!dropCap) { - try { - if (node.id === node.parent.children[0].id) { - node.x += displacementX; - node.y = previousNode ? previousNode.y : 0; - return; - } - } catch (e4) { - } - } - node.x += displacementX; - node.y = previousNode ? previousNode.y + previousNode.height : 0; - return; - } - module3.exports = function(root, indent2, dropCap) { - var previousNode = null; - root.eachNode(function(node) { - positionNode(node, previousNode, indent2, dropCap); - previousNode = node; - }); - }; - }, - function(module3, exports2, __webpack_require__) { - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - subClass.__proto__ = superClass; - } - var TreeLayout2 = __webpack_require__(11); - var mindmap = __webpack_require__(119); - var doTreeLayout = __webpack_require__(17); - var util = __webpack_require__(7); - var MindmapLayout = /* @__PURE__ */ function(_TreeLayout) { - _inheritsLoose(MindmapLayout2, _TreeLayout); - function MindmapLayout2() { - return _TreeLayout.apply(this, arguments) || this; - } - var _proto = MindmapLayout2.prototype; - _proto.execute = function execute() { - var me = this; - return doTreeLayout(me.rootNode, me.options, mindmap); - }; - return MindmapLayout2; - }(TreeLayout2); - var DEFAULT_OPTIONS37 = {}; - function mindmapLayout(root, options) { - options = util.assign({}, DEFAULT_OPTIONS37, options); - return new MindmapLayout(root, options).execute(); - } - module3.exports = mindmapLayout; - }, - function(module3, exports2, __webpack_require__) { - var util = __webpack_require__(7); - function secondWalk(node, options) { - var totalHeight = 0; - if (!node.children.length) { - totalHeight = node.height; - } else { - node.children.forEach(function(c5) { - totalHeight += secondWalk(c5, options); - }); - } - node._subTreeSep = options.getSubTreeSep(node.data); - node.totalHeight = Math.max(node.height, totalHeight) + 2 * node._subTreeSep; - return node.totalHeight; - } - function thirdWalk(node) { - var children = node.children; - var len5 = children.length; - if (len5) { - children.forEach(function(c5) { - thirdWalk(c5); - }); - var first = children[0]; - var last17 = children[len5 - 1]; - var childrenHeight = last17.y - first.y + last17.height; - var childrenTotalHeight = 0; - children.forEach(function(child) { - childrenTotalHeight += child.totalHeight; - }); - if (childrenHeight > node.height) { - node.y = first.y + childrenHeight / 2 - node.height / 2; - } else if (children.length !== 1 || node.height > childrenTotalHeight) { - var offset = node.y + (node.height - childrenHeight) / 2 - first.y; - children.forEach(function(c5) { - c5.translate(0, offset); - }); - } else { - node.y = (first.y + first.height / 2 + last17.y + last17.height / 2) / 2 - node.height / 2; - } - } - } - var DEFAULT_OPTIONS37 = { - getSubTreeSep: function getSubTreeSep() { - return 0; - } - }; - module3.exports = function(root, options) { - if (options === void 0) { - options = {}; - } - options = util.assign({}, DEFAULT_OPTIONS37, options); - root.parent = { - x: 0, - width: 0, - height: 0, - y: 0 - }; - root.BFTraverse(function(node) { - node.x = node.parent.x + node.parent.width; - }); - root.parent = null; - secondWalk(root, options); - root.startY = 0; - root.y = root.totalHeight / 2 - root.height / 2; - root.eachNode(function(node) { - var children = node.children; - var len5 = children.length; - if (len5) { - var first = children[0]; - first.startY = node.startY + node._subTreeSep; - if (len5 === 1) { - first.y = node.y + node.height / 2 - first.height / 2; - } else { - first.y = first.startY + first.totalHeight / 2 - first.height / 2; - for (var i4 = 1; i4 < len5; i4++) { - var c5 = children[i4]; - c5.startY = children[i4 - 1].startY + children[i4 - 1].totalHeight; - c5.y = c5.startY + c5.totalHeight / 2 - c5.height / 2; - } - } - } - }); - thirdWalk(root); - }; - } - ]); - }); - } -}); - -// node_modules/insert-css/index.js -var require_insert_css = __commonJS({ - "node_modules/insert-css/index.js"(exports, module2) { - var containers = []; - var styleElements = []; - var usage = "insert-css: You need to provide a CSS string. Usage: insertCss(cssString[, options])."; - function insertCss4(css, options) { - options = options || {}; - if (css === void 0) { - throw new Error(usage); - } - var position2 = options.prepend === true ? "prepend" : "append"; - var container2 = options.container !== void 0 ? options.container : document.querySelector("head"); - var containerId = containers.indexOf(container2); - if (containerId === -1) { - containerId = containers.push(container2) - 1; - styleElements[containerId] = {}; - } - var styleElement; - if (styleElements[containerId] !== void 0 && styleElements[containerId][position2] !== void 0) { - styleElement = styleElements[containerId][position2]; - } else { - styleElement = styleElements[containerId][position2] = createStyleElement(); - if (position2 === "prepend") { - container2.insertBefore(styleElement, container2.childNodes[0]); - } else { - container2.appendChild(styleElement); - } - } - if (css.charCodeAt(0) === 65279) { - css = css.substr(1, css.length); - } - if (styleElement.styleSheet) { - styleElement.styleSheet.cssText += css; - } else { - styleElement.textContent += css; - } - return styleElement; - } - function createStyleElement() { - var styleElement = document.createElement("style"); - styleElement.setAttribute("type", "text/css"); - return styleElement; - } - module2.exports = insertCss4; - module2.exports.insertCss = insertCss4; - } -}); - -// node_modules/papaparse/papaparse.min.js -var require_papaparse_min = __commonJS({ - "node_modules/papaparse/papaparse.min.js"(exports, module2) { - !function(e4, t4) { - typeof define == "function" && define.amd ? define([], t4) : typeof module2 == "object" && typeof exports != "undefined" ? module2.exports = t4() : e4.Papa = t4(); - }(exports, function s4() { - "use strict"; - var f3 = typeof self != "undefined" ? self : typeof window != "undefined" ? window : f3 !== void 0 ? f3 : {}; - var n3 = !f3.document && !!f3.postMessage, o3 = n3 && /blob:/i.test((f3.location || {}).protocol), a4 = {}, h3 = 0, b10 = { parse: function(e4, t4) { - var i5 = (t4 = t4 || {}).dynamicTyping || false; - M3(i5) && (t4.dynamicTypingFunction = i5, i5 = {}); - if (t4.dynamicTyping = i5, t4.transform = !!M3(t4.transform) && t4.transform, t4.worker && b10.WORKERS_SUPPORTED) { - var r4 = function() { - if (!b10.WORKERS_SUPPORTED) - return false; - var e6 = (i6 = f3.URL || f3.webkitURL || null, r5 = s4.toString(), b10.BLOB_URL || (b10.BLOB_URL = i6.createObjectURL(new Blob(["(", r5, ")();"], { type: "text/javascript" })))), t5 = new f3.Worker(e6); - var i6, r5; - return t5.onmessage = _8, t5.id = h3++, a4[t5.id] = t5; - }(); - return r4.userStep = t4.step, r4.userChunk = t4.chunk, r4.userComplete = t4.complete, r4.userError = t4.error, t4.step = M3(t4.step), t4.chunk = M3(t4.chunk), t4.complete = M3(t4.complete), t4.error = M3(t4.error), delete t4.worker, void r4.postMessage({ input: e4, config: t4, workerId: r4.id }); - } - var n4 = null; - b10.NODE_STREAM_INPUT, typeof e4 == "string" ? n4 = t4.download ? new l4(t4) : new p4(t4) : e4.readable === true && M3(e4.read) && M3(e4.on) ? n4 = new g4(t4) : (f3.File && e4 instanceof File || e4 instanceof Object) && (n4 = new c5(t4)); - return n4.stream(e4); - }, unparse: function(e4, t4) { - var n4 = false, _9 = true, m5 = ",", y6 = "\r\n", s5 = '"', a5 = s5 + s5, i5 = false, r4 = null, o4 = false; - !function() { - if (typeof t4 != "object") - return; - typeof t4.delimiter != "string" || b10.BAD_DELIMITERS.filter(function(e6) { - return t4.delimiter.indexOf(e6) !== -1; - }).length || (m5 = t4.delimiter); - (typeof t4.quotes == "boolean" || typeof t4.quotes == "function" || Array.isArray(t4.quotes)) && (n4 = t4.quotes); - typeof t4.skipEmptyLines != "boolean" && typeof t4.skipEmptyLines != "string" || (i5 = t4.skipEmptyLines); - typeof t4.newline == "string" && (y6 = t4.newline); - typeof t4.quoteChar == "string" && (s5 = t4.quoteChar); - typeof t4.header == "boolean" && (_9 = t4.header); - if (Array.isArray(t4.columns)) { - if (t4.columns.length === 0) - throw new Error("Option columns is empty"); - r4 = t4.columns; - } - t4.escapeChar !== void 0 && (a5 = t4.escapeChar + s5); - typeof t4.escapeFormulae == "boolean" && (o4 = t4.escapeFormulae); - }(); - var h4 = new RegExp(j4(s5), "g"); - typeof e4 == "string" && (e4 = JSON.parse(e4)); - if (Array.isArray(e4)) { - if (!e4.length || Array.isArray(e4[0])) - return u4(null, e4, i5); - if (typeof e4[0] == "object") - return u4(r4 || Object.keys(e4[0]), e4, i5); - } else if (typeof e4 == "object") - return typeof e4.data == "string" && (e4.data = JSON.parse(e4.data)), Array.isArray(e4.data) && (e4.fields || (e4.fields = e4.meta && e4.meta.fields), e4.fields || (e4.fields = Array.isArray(e4.data[0]) ? e4.fields : typeof e4.data[0] == "object" ? Object.keys(e4.data[0]) : []), Array.isArray(e4.data[0]) || typeof e4.data[0] == "object" || (e4.data = [e4.data])), u4(e4.fields || [], e4.data || [], i5); - throw new Error("Unable to serialize unrecognized input"); - function u4(e6, t5, i6) { - var r5 = ""; - typeof e6 == "string" && (e6 = JSON.parse(e6)), typeof t5 == "string" && (t5 = JSON.parse(t5)); - var n5 = Array.isArray(e6) && 0 < e6.length, s6 = !Array.isArray(t5[0]); - if (n5 && _9) { - for (var a6 = 0; a6 < e6.length; a6++) - 0 < a6 && (r5 += m5), r5 += v4(e6[a6], a6); - 0 < t5.length && (r5 += y6); - } - for (var o5 = 0; o5 < t5.length; o5++) { - var h5 = n5 ? e6.length : t5[o5].length, u5 = false, f4 = n5 ? Object.keys(t5[o5]).length === 0 : t5[o5].length === 0; - if (i6 && !n5 && (u5 = i6 === "greedy" ? t5[o5].join("").trim() === "" : t5[o5].length === 1 && t5[o5][0].length === 0), i6 === "greedy" && n5) { - for (var d4 = [], l5 = 0; l5 < h5; l5++) { - var c6 = s6 ? e6[l5] : l5; - d4.push(t5[o5][c6]); - } - u5 = d4.join("").trim() === ""; - } - if (!u5) { - for (var p5 = 0; p5 < h5; p5++) { - 0 < p5 && !f4 && (r5 += m5); - var g5 = n5 && s6 ? e6[p5] : p5; - r5 += v4(t5[o5][g5], p5); - } - o5 < t5.length - 1 && (!i6 || 0 < h5 && !f4) && (r5 += y6); - } - } - return r5; - } - function v4(e6, t5) { - if (e6 == null) - return ""; - if (e6.constructor === Date) - return JSON.stringify(e6).slice(1, 25); - o4 === true && typeof e6 == "string" && e6.match(/^[=+\-@].*$/) !== null && (e6 = "'" + e6); - var i6 = e6.toString().replace(h4, a5), r5 = typeof n4 == "boolean" && n4 || typeof n4 == "function" && n4(e6, t5) || Array.isArray(n4) && n4[t5] || function(e7, t6) { - for (var i7 = 0; i7 < t6.length; i7++) - if (-1 < e7.indexOf(t6[i7])) - return true; - return false; - }(i6, b10.BAD_DELIMITERS) || -1 < i6.indexOf(m5) || i6.charAt(0) === " " || i6.charAt(i6.length - 1) === " "; - return r5 ? s5 + i6 + s5 : i6; - } - } }; - if (b10.RECORD_SEP = String.fromCharCode(30), b10.UNIT_SEP = String.fromCharCode(31), b10.BYTE_ORDER_MARK = "\uFEFF", b10.BAD_DELIMITERS = ["\r", "\n", '"', b10.BYTE_ORDER_MARK], b10.WORKERS_SUPPORTED = !n3 && !!f3.Worker, b10.NODE_STREAM_INPUT = 1, b10.LocalChunkSize = 10485760, b10.RemoteChunkSize = 5242880, b10.DefaultDelimiter = ",", b10.Parser = E2, b10.ParserHandle = i4, b10.NetworkStreamer = l4, b10.FileStreamer = c5, b10.StringStreamer = p4, b10.ReadableStreamStreamer = g4, f3.jQuery) { - var d3 = f3.jQuery; - d3.fn.parse = function(o4) { - var i5 = o4.config || {}, h4 = []; - return this.each(function(e6) { - if (!(d3(this).prop("tagName").toUpperCase() === "INPUT" && d3(this).attr("type").toLowerCase() === "file" && f3.FileReader) || !this.files || this.files.length === 0) - return true; - for (var t4 = 0; t4 < this.files.length; t4++) - h4.push({ file: this.files[t4], inputElem: this, instanceConfig: d3.extend({}, i5) }); - }), e4(), this; - function e4() { - if (h4.length !== 0) { - var e6, t4, i6, r4, n4 = h4[0]; - if (M3(o4.before)) { - var s5 = o4.before(n4.file, n4.inputElem); - if (typeof s5 == "object") { - if (s5.action === "abort") - return e6 = "AbortError", t4 = n4.file, i6 = n4.inputElem, r4 = s5.reason, void (M3(o4.error) && o4.error({ name: e6 }, t4, i6, r4)); - if (s5.action === "skip") - return void u4(); - typeof s5.config == "object" && (n4.instanceConfig = d3.extend(n4.instanceConfig, s5.config)); - } else if (s5 === "skip") - return void u4(); - } - var a5 = n4.instanceConfig.complete; - n4.instanceConfig.complete = function(e7) { - M3(a5) && a5(e7, n4.file, n4.inputElem), u4(); - }, b10.parse(n4.file, n4.instanceConfig); - } else - M3(o4.complete) && o4.complete(); - } - function u4() { - h4.splice(0, 1), e4(); - } - }; - } - function u3(e4) { - this._handle = null, this._finished = false, this._completed = false, this._halted = false, this._input = null, this._baseIndex = 0, this._partialLine = "", this._rowCount = 0, this._start = 0, this._nextChunk = null, this.isFirstChunk = true, this._completeResults = { data: [], errors: [], meta: {} }, function(e6) { - var t4 = w4(e6); - t4.chunkSize = parseInt(t4.chunkSize), e6.step || e6.chunk || (t4.chunkSize = null); - this._handle = new i4(t4), (this._handle.streamer = this)._config = t4; - }.call(this, e4), this.parseChunk = function(e6, t4) { - if (this.isFirstChunk && M3(this._config.beforeFirstChunk)) { - var i5 = this._config.beforeFirstChunk(e6); - i5 !== void 0 && (e6 = i5); - } - this.isFirstChunk = false, this._halted = false; - var r4 = this._partialLine + e6; - this._partialLine = ""; - var n4 = this._handle.parse(r4, this._baseIndex, !this._finished); - if (!this._handle.paused() && !this._handle.aborted()) { - var s5 = n4.meta.cursor; - this._finished || (this._partialLine = r4.substring(s5 - this._baseIndex), this._baseIndex = s5), n4 && n4.data && (this._rowCount += n4.data.length); - var a5 = this._finished || this._config.preview && this._rowCount >= this._config.preview; - if (o3) - f3.postMessage({ results: n4, workerId: b10.WORKER_ID, finished: a5 }); - else if (M3(this._config.chunk) && !t4) { - if (this._config.chunk(n4, this._handle), this._handle.paused() || this._handle.aborted()) - return void (this._halted = true); - n4 = void 0, this._completeResults = void 0; - } - return this._config.step || this._config.chunk || (this._completeResults.data = this._completeResults.data.concat(n4.data), this._completeResults.errors = this._completeResults.errors.concat(n4.errors), this._completeResults.meta = n4.meta), this._completed || !a5 || !M3(this._config.complete) || n4 && n4.meta.aborted || (this._config.complete(this._completeResults, this._input), this._completed = true), a5 || n4 && n4.meta.paused || this._nextChunk(), n4; - } - this._halted = true; - }, this._sendError = function(e6) { - M3(this._config.error) ? this._config.error(e6) : o3 && this._config.error && f3.postMessage({ workerId: b10.WORKER_ID, error: e6, finished: false }); - }; - } - function l4(e4) { - var r4; - (e4 = e4 || {}).chunkSize || (e4.chunkSize = b10.RemoteChunkSize), u3.call(this, e4), this._nextChunk = n3 ? function() { - this._readChunk(), this._chunkLoaded(); - } : function() { - this._readChunk(); - }, this.stream = function(e6) { - this._input = e6, this._nextChunk(); - }, this._readChunk = function() { - if (this._finished) - this._chunkLoaded(); - else { - if (r4 = new XMLHttpRequest(), this._config.withCredentials && (r4.withCredentials = this._config.withCredentials), n3 || (r4.onload = v3(this._chunkLoaded, this), r4.onerror = v3(this._chunkError, this)), r4.open(this._config.downloadRequestBody ? "POST" : "GET", this._input, !n3), this._config.downloadRequestHeaders) { - var e6 = this._config.downloadRequestHeaders; - for (var t4 in e6) - r4.setRequestHeader(t4, e6[t4]); - } - if (this._config.chunkSize) { - var i5 = this._start + this._config.chunkSize - 1; - r4.setRequestHeader("Range", "bytes=" + this._start + "-" + i5); - } - try { - r4.send(this._config.downloadRequestBody); - } catch (e7) { - this._chunkError(e7.message); - } - n3 && r4.status === 0 && this._chunkError(); - } - }, this._chunkLoaded = function() { - r4.readyState === 4 && (r4.status < 200 || 400 <= r4.status ? this._chunkError() : (this._start += this._config.chunkSize ? this._config.chunkSize : r4.responseText.length, this._finished = !this._config.chunkSize || this._start >= function(e6) { - var t4 = e6.getResponseHeader("Content-Range"); - if (t4 === null) - return -1; - return parseInt(t4.substring(t4.lastIndexOf("/") + 1)); - }(r4), this.parseChunk(r4.responseText))); - }, this._chunkError = function(e6) { - var t4 = r4.statusText || e6; - this._sendError(new Error(t4)); - }; - } - function c5(e4) { - var r4, n4; - (e4 = e4 || {}).chunkSize || (e4.chunkSize = b10.LocalChunkSize), u3.call(this, e4); - var s5 = typeof FileReader != "undefined"; - this.stream = function(e6) { - this._input = e6, n4 = e6.slice || e6.webkitSlice || e6.mozSlice, s5 ? ((r4 = new FileReader()).onload = v3(this._chunkLoaded, this), r4.onerror = v3(this._chunkError, this)) : r4 = new FileReaderSync(), this._nextChunk(); - }, this._nextChunk = function() { - this._finished || this._config.preview && !(this._rowCount < this._config.preview) || this._readChunk(); - }, this._readChunk = function() { - var e6 = this._input; - if (this._config.chunkSize) { - var t4 = Math.min(this._start + this._config.chunkSize, this._input.size); - e6 = n4.call(e6, this._start, t4); - } - var i5 = r4.readAsText(e6, this._config.encoding); - s5 || this._chunkLoaded({ target: { result: i5 } }); - }, this._chunkLoaded = function(e6) { - this._start += this._config.chunkSize, this._finished = !this._config.chunkSize || this._start >= this._input.size, this.parseChunk(e6.target.result); - }, this._chunkError = function() { - this._sendError(r4.error); - }; - } - function p4(e4) { - var i5; - u3.call(this, e4 = e4 || {}), this.stream = function(e6) { - return i5 = e6, this._nextChunk(); - }, this._nextChunk = function() { - if (!this._finished) { - var e6, t4 = this._config.chunkSize; - return t4 ? (e6 = i5.substring(0, t4), i5 = i5.substring(t4)) : (e6 = i5, i5 = ""), this._finished = !i5, this.parseChunk(e6); - } - }; - } - function g4(e4) { - u3.call(this, e4 = e4 || {}); - var t4 = [], i5 = true, r4 = false; - this.pause = function() { - u3.prototype.pause.apply(this, arguments), this._input.pause(); - }, this.resume = function() { - u3.prototype.resume.apply(this, arguments), this._input.resume(); - }, this.stream = function(e6) { - this._input = e6, this._input.on("data", this._streamData), this._input.on("end", this._streamEnd), this._input.on("error", this._streamError); - }, this._checkIsFinished = function() { - r4 && t4.length === 1 && (this._finished = true); - }, this._nextChunk = function() { - this._checkIsFinished(), t4.length ? this.parseChunk(t4.shift()) : i5 = true; - }, this._streamData = v3(function(e6) { - try { - t4.push(typeof e6 == "string" ? e6 : e6.toString(this._config.encoding)), i5 && (i5 = false, this._checkIsFinished(), this.parseChunk(t4.shift())); - } catch (e7) { - this._streamError(e7); - } - }, this), this._streamError = v3(function(e6) { - this._streamCleanUp(), this._sendError(e6); - }, this), this._streamEnd = v3(function() { - this._streamCleanUp(), r4 = true, this._streamData(""); - }, this), this._streamCleanUp = v3(function() { - this._input.removeListener("data", this._streamData), this._input.removeListener("end", this._streamEnd), this._input.removeListener("error", this._streamError); - }, this); - } - function i4(m5) { - var a5, o4, h4, r4 = Math.pow(2, 53), n4 = -r4, s5 = /^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/, u4 = /^(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))$/, t4 = this, i5 = 0, f4 = 0, d4 = false, e4 = false, l5 = [], c6 = { data: [], errors: [], meta: {} }; - if (M3(m5.step)) { - var p5 = m5.step; - m5.step = function(e6) { - if (c6 = e6, _9()) - g5(); - else { - if (g5(), c6.data.length === 0) - return; - i5 += e6.data.length, m5.preview && i5 > m5.preview ? o4.abort() : (c6.data = c6.data[0], p5(c6, t4)); - } - }; - } - function y6(e6) { - return m5.skipEmptyLines === "greedy" ? e6.join("").trim() === "" : e6.length === 1 && e6[0].length === 0; - } - function g5() { - if (c6 && h4 && (k4("Delimiter", "UndetectableDelimiter", "Unable to auto-detect delimiting character; defaulted to '" + b10.DefaultDelimiter + "'"), h4 = false), m5.skipEmptyLines) - for (var e6 = 0; e6 < c6.data.length; e6++) - y6(c6.data[e6]) && c6.data.splice(e6--, 1); - return _9() && function() { - if (!c6) - return; - function e7(e8, t6) { - M3(m5.transformHeader) && (e8 = m5.transformHeader(e8, t6)), l5.push(e8); - } - if (Array.isArray(c6.data[0])) { - for (var t5 = 0; _9() && t5 < c6.data.length; t5++) - c6.data[t5].forEach(e7); - c6.data.splice(0, 1); - } else - c6.data.forEach(e7); - }(), function() { - if (!c6 || !m5.header && !m5.dynamicTyping && !m5.transform) - return c6; - function e7(e8, t6) { - var i6, r5 = m5.header ? {} : []; - for (i6 = 0; i6 < e8.length; i6++) { - var n5 = i6, s6 = e8[i6]; - m5.header && (n5 = i6 >= l5.length ? "__parsed_extra" : l5[i6]), m5.transform && (s6 = m5.transform(s6, n5)), s6 = v4(n5, s6), n5 === "__parsed_extra" ? (r5[n5] = r5[n5] || [], r5[n5].push(s6)) : r5[n5] = s6; - } - return m5.header && (i6 > l5.length ? k4("FieldMismatch", "TooManyFields", "Too many fields: expected " + l5.length + " fields but parsed " + i6, f4 + t6) : i6 < l5.length && k4("FieldMismatch", "TooFewFields", "Too few fields: expected " + l5.length + " fields but parsed " + i6, f4 + t6)), r5; - } - var t5 = 1; - !c6.data.length || Array.isArray(c6.data[0]) ? (c6.data = c6.data.map(e7), t5 = c6.data.length) : c6.data = e7(c6.data, 0); - m5.header && c6.meta && (c6.meta.fields = l5); - return f4 += t5, c6; - }(); - } - function _9() { - return m5.header && l5.length === 0; - } - function v4(e6, t5) { - return i6 = e6, m5.dynamicTypingFunction && m5.dynamicTyping[i6] === void 0 && (m5.dynamicTyping[i6] = m5.dynamicTypingFunction(i6)), (m5.dynamicTyping[i6] || m5.dynamicTyping) === true ? t5 === "true" || t5 === "TRUE" || t5 !== "false" && t5 !== "FALSE" && (function(e7) { - if (s5.test(e7)) { - var t6 = parseFloat(e7); - if (n4 < t6 && t6 < r4) - return true; - } - return false; - }(t5) ? parseFloat(t5) : u4.test(t5) ? new Date(t5) : t5 === "" ? null : t5) : t5; - var i6; - } - function k4(e6, t5, i6, r5) { - var n5 = { type: e6, code: t5, message: i6 }; - r5 !== void 0 && (n5.row = r5), c6.errors.push(n5); - } - this.parse = function(e6, t5, i6) { - var r5 = m5.quoteChar || '"'; - if (m5.newline || (m5.newline = function(e7, t6) { - e7 = e7.substring(0, 1048576); - var i7 = new RegExp(j4(t6) + "([^]*?)" + j4(t6), "gm"), r6 = (e7 = e7.replace(i7, "")).split("\r"), n6 = e7.split("\n"), s7 = 1 < n6.length && n6[0].length < r6[0].length; - if (r6.length === 1 || s7) - return "\n"; - for (var a6 = 0, o5 = 0; o5 < r6.length; o5++) - r6[o5][0] === "\n" && a6++; - return a6 >= r6.length / 2 ? "\r\n" : "\r"; - }(e6, r5)), h4 = false, m5.delimiter) - M3(m5.delimiter) && (m5.delimiter = m5.delimiter(e6), c6.meta.delimiter = m5.delimiter); - else { - var n5 = function(e7, t6, i7, r6, n6) { - var s7, a6, o5, h5; - n6 = n6 || [",", " ", "|", ";", b10.RECORD_SEP, b10.UNIT_SEP]; - for (var u5 = 0; u5 < n6.length; u5++) { - var f5 = n6[u5], d5 = 0, l6 = 0, c7 = 0; - o5 = void 0; - for (var p6 = new E2({ comments: r6, delimiter: f5, newline: t6, preview: 10 }).parse(e7), g6 = 0; g6 < p6.data.length; g6++) - if (i7 && y6(p6.data[g6])) - c7++; - else { - var _10 = p6.data[g6].length; - l6 += _10, o5 !== void 0 ? 0 < _10 && (d5 += Math.abs(_10 - o5), o5 = _10) : o5 = _10; - } - 0 < p6.data.length && (l6 /= p6.data.length - c7), (a6 === void 0 || d5 <= a6) && (h5 === void 0 || h5 < l6) && 1.99 < l6 && (a6 = d5, s7 = f5, h5 = l6); - } - return { successful: !!(m5.delimiter = s7), bestDelimiter: s7 }; - }(e6, m5.newline, m5.skipEmptyLines, m5.comments, m5.delimitersToGuess); - n5.successful ? m5.delimiter = n5.bestDelimiter : (h4 = true, m5.delimiter = b10.DefaultDelimiter), c6.meta.delimiter = m5.delimiter; - } - var s6 = w4(m5); - return m5.preview && m5.header && s6.preview++, a5 = e6, o4 = new E2(s6), c6 = o4.parse(a5, t5, i6), g5(), d4 ? { meta: { paused: true } } : c6 || { meta: { paused: false } }; - }, this.paused = function() { - return d4; - }, this.pause = function() { - d4 = true, o4.abort(), a5 = M3(m5.chunk) ? "" : a5.substring(o4.getCharIndex()); - }, this.resume = function() { - t4.streamer._halted ? (d4 = false, t4.streamer.parseChunk(a5, true)) : setTimeout(t4.resume, 3); - }, this.aborted = function() { - return e4; - }, this.abort = function() { - e4 = true, o4.abort(), c6.meta.aborted = true, M3(m5.complete) && m5.complete(c6), a5 = ""; - }; - } - function j4(e4) { - return e4.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); - } - function E2(e4) { - var S3, O3 = (e4 = e4 || {}).delimiter, x6 = e4.newline, I3 = e4.comments, T5 = e4.step, D3 = e4.preview, A4 = e4.fastMode, L3 = S3 = e4.quoteChar === void 0 ? '"' : e4.quoteChar; - if (e4.escapeChar !== void 0 && (L3 = e4.escapeChar), (typeof O3 != "string" || -1 < b10.BAD_DELIMITERS.indexOf(O3)) && (O3 = ","), I3 === O3) - throw new Error("Comment character same as delimiter"); - I3 === true ? I3 = "#" : (typeof I3 != "string" || -1 < b10.BAD_DELIMITERS.indexOf(I3)) && (I3 = false), x6 !== "\n" && x6 !== "\r" && x6 !== "\r\n" && (x6 = "\n"); - var F3 = 0, z3 = false; - this.parse = function(r4, t4, i5) { - if (typeof r4 != "string") - throw new Error("Input must be a string"); - var n4 = r4.length, e6 = O3.length, s5 = x6.length, a5 = I3.length, o4 = M3(T5), h4 = [], u4 = [], f4 = [], d4 = F3 = 0; - if (!r4) - return C3(); - if (A4 || A4 !== false && r4.indexOf(S3) === -1) { - for (var l5 = r4.split(x6), c6 = 0; c6 < l5.length; c6++) { - if (f4 = l5[c6], F3 += f4.length, c6 !== l5.length - 1) - F3 += x6.length; - else if (i5) - return C3(); - if (!I3 || f4.substring(0, a5) !== I3) { - if (o4) { - if (h4 = [], k4(f4.split(O3)), R3(), z3) - return C3(); - } else - k4(f4.split(O3)); - if (D3 && D3 <= c6) - return h4 = h4.slice(0, D3), C3(true); - } - } - return C3(); - } - for (var p5 = r4.indexOf(O3, F3), g5 = r4.indexOf(x6, F3), _9 = new RegExp(j4(L3) + j4(S3), "g"), m5 = r4.indexOf(S3, F3); ; ) - if (r4[F3] !== S3) - if (I3 && f4.length === 0 && r4.substring(F3, F3 + a5) === I3) { - if (g5 === -1) - return C3(); - F3 = g5 + s5, g5 = r4.indexOf(x6, F3), p5 = r4.indexOf(O3, F3); - } else if (p5 !== -1 && (p5 < g5 || g5 === -1)) - f4.push(r4.substring(F3, p5)), F3 = p5 + e6, p5 = r4.indexOf(O3, F3); - else { - if (g5 === -1) - break; - if (f4.push(r4.substring(F3, g5)), w5(g5 + s5), o4 && (R3(), z3)) - return C3(); - if (D3 && h4.length >= D3) - return C3(true); - } - else - for (m5 = F3, F3++; ; ) { - if ((m5 = r4.indexOf(S3, m5 + 1)) === -1) - return i5 || u4.push({ type: "Quotes", code: "MissingQuotes", message: "Quoted field unterminated", row: h4.length, index: F3 }), E3(); - if (m5 === n4 - 1) - return E3(r4.substring(F3, m5).replace(_9, S3)); - if (S3 !== L3 || r4[m5 + 1] !== L3) { - if (S3 === L3 || m5 === 0 || r4[m5 - 1] !== L3) { - p5 !== -1 && p5 < m5 + 1 && (p5 = r4.indexOf(O3, m5 + 1)), g5 !== -1 && g5 < m5 + 1 && (g5 = r4.indexOf(x6, m5 + 1)); - var y6 = b11(g5 === -1 ? p5 : Math.min(p5, g5)); - if (r4[m5 + 1 + y6] === O3) { - f4.push(r4.substring(F3, m5).replace(_9, S3)), r4[F3 = m5 + 1 + y6 + e6] !== S3 && (m5 = r4.indexOf(S3, F3)), p5 = r4.indexOf(O3, F3), g5 = r4.indexOf(x6, F3); - break; - } - var v4 = b11(g5); - if (r4.substring(m5 + 1 + v4, m5 + 1 + v4 + s5) === x6) { - if (f4.push(r4.substring(F3, m5).replace(_9, S3)), w5(m5 + 1 + v4 + s5), p5 = r4.indexOf(O3, F3), m5 = r4.indexOf(S3, F3), o4 && (R3(), z3)) - return C3(); - if (D3 && h4.length >= D3) - return C3(true); - break; - } - u4.push({ type: "Quotes", code: "InvalidQuotes", message: "Trailing quote on quoted field is malformed", row: h4.length, index: F3 }), m5++; - } - } else - m5++; - } - return E3(); - function k4(e7) { - h4.push(e7), d4 = F3; - } - function b11(e7) { - var t5 = 0; - if (e7 !== -1) { - var i6 = r4.substring(m5 + 1, e7); - i6 && i6.trim() === "" && (t5 = i6.length); - } - return t5; - } - function E3(e7) { - return i5 || (e7 === void 0 && (e7 = r4.substring(F3)), f4.push(e7), F3 = n4, k4(f4), o4 && R3()), C3(); - } - function w5(e7) { - F3 = e7, k4(f4), f4 = [], g5 = r4.indexOf(x6, F3); - } - function C3(e7) { - return { data: h4, errors: u4, meta: { delimiter: O3, linebreak: x6, aborted: z3, truncated: !!e7, cursor: d4 + (t4 || 0) } }; - } - function R3() { - T5(C3()), h4 = [], u4 = []; - } - }, this.abort = function() { - z3 = true; - }, this.getCharIndex = function() { - return F3; - }; - } - function _8(e4) { - var t4 = e4.data, i5 = a4[t4.workerId], r4 = false; - if (t4.error) - i5.userError(t4.error, t4.file); - else if (t4.results && t4.results.data) { - var n4 = { abort: function() { - r4 = true, m4(t4.workerId, { data: [], errors: [], meta: { aborted: true } }); - }, pause: y5, resume: y5 }; - if (M3(i5.userStep)) { - for (var s5 = 0; s5 < t4.results.data.length && (i5.userStep({ data: t4.results.data[s5], errors: t4.results.errors, meta: t4.results.meta }, n4), !r4); s5++) - ; - delete t4.results; - } else - M3(i5.userChunk) && (i5.userChunk(t4.results, n4, t4.file), delete t4.results); - } - t4.finished && !r4 && m4(t4.workerId, t4.results); - } - function m4(e4, t4) { - var i5 = a4[e4]; - M3(i5.userComplete) && i5.userComplete(t4), i5.terminate(), delete a4[e4]; - } - function y5() { - throw new Error("Not implemented."); - } - function w4(e4) { - if (typeof e4 != "object" || e4 === null) - return e4; - var t4 = Array.isArray(e4) ? [] : {}; - for (var i5 in e4) - t4[i5] = w4(e4[i5]); - return t4; - } - function v3(e4, t4) { - return function() { - e4.apply(t4, arguments); - }; - } - function M3(e4) { - return typeof e4 == "function"; - } - return o3 && (f3.onmessage = function(e4) { - var t4 = e4.data; - b10.WORKER_ID === void 0 && t4 && (b10.WORKER_ID = t4.workerId); - if (typeof t4.input == "string") - f3.postMessage({ workerId: b10.WORKER_ID, results: b10.parse(t4.input, t4.config), finished: true }); - else if (f3.File && t4.input instanceof File || t4.input instanceof Object) { - var i5 = b10.parse(t4.input, t4.config); - i5 && f3.postMessage({ workerId: b10.WORKER_ID, results: i5, finished: true }); - } - }), (l4.prototype = Object.create(u3.prototype)).constructor = l4, (c5.prototype = Object.create(u3.prototype)).constructor = c5, (p4.prototype = Object.create(p4.prototype)).constructor = p4, (g4.prototype = Object.create(u3.prototype)).constructor = g4, b10; - }); - } -}); - -// node_modules/obsidian-dataview/lib/index.js -var require_lib5 = __commonJS({ - "node_modules/obsidian-dataview/lib/index.js"(exports) { - "use strict"; - Object.defineProperty(exports, "__esModule", { value: true }); - require("obsidian"); - var getAPI = (app) => { - var _a6; - if (app) - return (_a6 = app.plugins.plugins.dataview) === null || _a6 === void 0 ? void 0 : _a6.api; - else - return window["DataviewAPI"]; - }; - var isPluginEnabled = (app) => app.plugins.enabledPlugins.has("dataview"); - exports.getAPI = getAPI; - exports.isPluginEnabled = isPluginEnabled; - } -}); - -// src/main.tsx -__export(exports, { - default: () => ChartsViewPlugin -}); - -// node_modules/file-select-dialog/dist/file-select-dialog.esm.js -var e = class extends Error { -}; -var t = class extends e { -}; -var n = class extends e { -}; -var c = (e4, t4 = ",") => e4.join(t4); -var l = { accept: "*", multiple: false, strict: false }; -var r = (e4) => { - const { accept: t4, multiple: n3, strict: r4 } = __spreadValues(__spreadValues({}, l), e4), i4 = p({ multiple: n3, accept: Array.isArray(t4) ? c(t4) : t4 }); - return new Promise((e6) => { - i4.onchange = () => { - e6(s(i4.files, n3, r4)), i4.remove(); - }, i4.click(); - }); -}; -var s = (e4, c5, l4) => new Promise((r4, s4) => { - if (!e4) - return s4(new t()); - const p4 = i(e4, c5, l4); - if (!p4) - return s4(new n()); - r4(p4); -}); -var i = (e4, t4, n3) => !t4 && n3 ? e4.length === 1 ? e4[0] : null : e4.length ? e4 : null; -var p = ({ accept: e4, multiple: t4 }) => { - const n3 = document.createElement("input"); - return n3.type = "file", n3.multiple = t4, n3.accept = e4, n3; -}; - -// node_modules/js-yaml/dist/js-yaml.mjs -function isNothing(subject) { - return typeof subject === "undefined" || subject === null; -} -function isObject(subject) { - return typeof subject === "object" && subject !== null; -} -function toArray(sequence) { - if (Array.isArray(sequence)) - return sequence; - else if (isNothing(sequence)) - return []; - return [sequence]; -} -function extend(target, source) { - var index2, length5, key, sourceKeys; - if (source) { - sourceKeys = Object.keys(source); - for (index2 = 0, length5 = sourceKeys.length; index2 < length5; index2 += 1) { - key = sourceKeys[index2]; - target[key] = source[key]; - } - } - return target; -} -function repeat(string, count2) { - var result = "", cycle; - for (cycle = 0; cycle < count2; cycle += 1) { - result += string; - } - return result; -} -function isNegativeZero(number) { - return number === 0 && Number.NEGATIVE_INFINITY === 1 / number; -} -var isNothing_1 = isNothing; -var isObject_1 = isObject; -var toArray_1 = toArray; -var repeat_1 = repeat; -var isNegativeZero_1 = isNegativeZero; -var extend_1 = extend; -var common = { - isNothing: isNothing_1, - isObject: isObject_1, - toArray: toArray_1, - repeat: repeat_1, - isNegativeZero: isNegativeZero_1, - extend: extend_1 -}; -function formatError(exception2, compact) { - var where = "", message = exception2.reason || "(unknown reason)"; - if (!exception2.mark) - return message; - if (exception2.mark.name) { - where += 'in "' + exception2.mark.name + '" '; - } - where += "(" + (exception2.mark.line + 1) + ":" + (exception2.mark.column + 1) + ")"; - if (!compact && exception2.mark.snippet) { - where += "\n\n" + exception2.mark.snippet; - } - return message + " " + where; -} -function YAMLException$1(reason, mark) { - Error.call(this); - this.name = "YAMLException"; - this.reason = reason; - this.mark = mark; - this.message = formatError(this, false); - if (Error.captureStackTrace) { - Error.captureStackTrace(this, this.constructor); - } else { - this.stack = new Error().stack || ""; - } -} -YAMLException$1.prototype = Object.create(Error.prototype); -YAMLException$1.prototype.constructor = YAMLException$1; -YAMLException$1.prototype.toString = function toString(compact) { - return this.name + ": " + formatError(this, compact); -}; -var exception = YAMLException$1; -function getLine(buffer, lineStart, lineEnd, position2, maxLineLength) { - var head13 = ""; - var tail = ""; - var maxHalfLength = Math.floor(maxLineLength / 2) - 1; - if (position2 - lineStart > maxHalfLength) { - head13 = " ... "; - lineStart = position2 - maxHalfLength + head13.length; - } - if (lineEnd - position2 > maxHalfLength) { - tail = " ..."; - lineEnd = position2 + maxHalfLength - tail.length; - } - return { - str: head13 + buffer.slice(lineStart, lineEnd).replace(/\t/g, "\u2192") + tail, - pos: position2 - lineStart + head13.length - }; -} -function padStart(string, max15) { - return common.repeat(" ", max15 - string.length) + string; -} -function makeSnippet(mark, options) { - options = Object.create(options || null); - if (!mark.buffer) - return null; - if (!options.maxLength) - options.maxLength = 79; - if (typeof options.indent !== "number") - options.indent = 1; - if (typeof options.linesBefore !== "number") - options.linesBefore = 3; - if (typeof options.linesAfter !== "number") - options.linesAfter = 2; - var re = /\r?\n|\r|\0/g; - var lineStarts = [0]; - var lineEnds = []; - var match; - var foundLineNo = -1; - while (match = re.exec(mark.buffer)) { - lineEnds.push(match.index); - lineStarts.push(match.index + match[0].length); - if (mark.position <= match.index && foundLineNo < 0) { - foundLineNo = lineStarts.length - 2; - } - } - if (foundLineNo < 0) - foundLineNo = lineStarts.length - 1; - var result = "", i4, line2; - var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length; - var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3); - for (i4 = 1; i4 <= options.linesBefore; i4++) { - if (foundLineNo - i4 < 0) - break; - line2 = getLine(mark.buffer, lineStarts[foundLineNo - i4], lineEnds[foundLineNo - i4], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i4]), maxLineLength); - result = common.repeat(" ", options.indent) + padStart((mark.line - i4 + 1).toString(), lineNoLength) + " | " + line2.str + "\n" + result; - } - line2 = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); - result += common.repeat(" ", options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + " | " + line2.str + "\n"; - result += common.repeat("-", options.indent + lineNoLength + 3 + line2.pos) + "^\n"; - for (i4 = 1; i4 <= options.linesAfter; i4++) { - if (foundLineNo + i4 >= lineEnds.length) - break; - line2 = getLine(mark.buffer, lineStarts[foundLineNo + i4], lineEnds[foundLineNo + i4], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i4]), maxLineLength); - result += common.repeat(" ", options.indent) + padStart((mark.line + i4 + 1).toString(), lineNoLength) + " | " + line2.str + "\n"; - } - return result.replace(/\n$/, ""); -} -var snippet = makeSnippet; -var TYPE_CONSTRUCTOR_OPTIONS = [ - "kind", - "multi", - "resolve", - "construct", - "instanceOf", - "predicate", - "represent", - "representName", - "defaultStyle", - "styleAliases" -]; -var YAML_NODE_KINDS = [ - "scalar", - "sequence", - "mapping" -]; -function compileStyleAliases(map23) { - var result = {}; - if (map23 !== null) { - Object.keys(map23).forEach(function(style) { - map23[style].forEach(function(alias) { - result[String(alias)] = style; - }); - }); - } - return result; -} -function Type$1(tag, options) { - options = options || {}; - Object.keys(options).forEach(function(name) { - if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { - throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); - } - }); - this.options = options; - this.tag = tag; - this.kind = options["kind"] || null; - this.resolve = options["resolve"] || function() { - return true; - }; - this.construct = options["construct"] || function(data3) { - return data3; - }; - this.instanceOf = options["instanceOf"] || null; - this.predicate = options["predicate"] || null; - this.represent = options["represent"] || null; - this.representName = options["representName"] || null; - this.defaultStyle = options["defaultStyle"] || null; - this.multi = options["multi"] || false; - this.styleAliases = compileStyleAliases(options["styleAliases"] || null); - if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { - throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); - } -} -var type = Type$1; -function compileList(schema3, name) { - var result = []; - schema3[name].forEach(function(currentType) { - var newIndex = result.length; - result.forEach(function(previousType, previousIndex) { - if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) { - newIndex = previousIndex; - } - }); - result[newIndex] = currentType; - }); - return result; -} -function compileMap() { - var result = { - scalar: {}, - sequence: {}, - mapping: {}, - fallback: {}, - multi: { - scalar: [], - sequence: [], - mapping: [], - fallback: [] - } - }, index2, length5; - function collectType(type2) { - if (type2.multi) { - result.multi[type2.kind].push(type2); - result.multi["fallback"].push(type2); - } else { - result[type2.kind][type2.tag] = result["fallback"][type2.tag] = type2; - } - } - for (index2 = 0, length5 = arguments.length; index2 < length5; index2 += 1) { - arguments[index2].forEach(collectType); - } - return result; -} -function Schema$1(definition) { - return this.extend(definition); -} -Schema$1.prototype.extend = function extend2(definition) { - var implicit = []; - var explicit = []; - if (definition instanceof type) { - explicit.push(definition); - } else if (Array.isArray(definition)) { - explicit = explicit.concat(definition); - } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) { - if (definition.implicit) - implicit = implicit.concat(definition.implicit); - if (definition.explicit) - explicit = explicit.concat(definition.explicit); - } else { - throw new exception("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })"); - } - implicit.forEach(function(type$1) { - if (!(type$1 instanceof type)) { - throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object."); - } - if (type$1.loadKind && type$1.loadKind !== "scalar") { - throw new exception("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported."); - } - if (type$1.multi) { - throw new exception("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit."); - } - }); - explicit.forEach(function(type$1) { - if (!(type$1 instanceof type)) { - throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object."); - } - }); - var result = Object.create(Schema$1.prototype); - result.implicit = (this.implicit || []).concat(implicit); - result.explicit = (this.explicit || []).concat(explicit); - result.compiledImplicit = compileList(result, "implicit"); - result.compiledExplicit = compileList(result, "explicit"); - result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); - return result; -}; -var schema = Schema$1; -var str = new type("tag:yaml.org,2002:str", { - kind: "scalar", - construct: function(data3) { - return data3 !== null ? data3 : ""; - } -}); -var seq = new type("tag:yaml.org,2002:seq", { - kind: "sequence", - construct: function(data3) { - return data3 !== null ? data3 : []; - } -}); -var map = new type("tag:yaml.org,2002:map", { - kind: "mapping", - construct: function(data3) { - return data3 !== null ? data3 : {}; - } -}); -var failsafe = new schema({ - explicit: [ - str, - seq, - map - ] -}); -function resolveYamlNull(data3) { - if (data3 === null) - return true; - var max15 = data3.length; - return max15 === 1 && data3 === "~" || max15 === 4 && (data3 === "null" || data3 === "Null" || data3 === "NULL"); -} -function constructYamlNull() { - return null; -} -function isNull(object) { - return object === null; -} -var _null = new type("tag:yaml.org,2002:null", { - kind: "scalar", - resolve: resolveYamlNull, - construct: constructYamlNull, - predicate: isNull, - represent: { - canonical: function() { - return "~"; - }, - lowercase: function() { - return "null"; - }, - uppercase: function() { - return "NULL"; - }, - camelcase: function() { - return "Null"; - }, - empty: function() { - return ""; - } - }, - defaultStyle: "lowercase" -}); -function resolveYamlBoolean(data3) { - if (data3 === null) - return false; - var max15 = data3.length; - return max15 === 4 && (data3 === "true" || data3 === "True" || data3 === "TRUE") || max15 === 5 && (data3 === "false" || data3 === "False" || data3 === "FALSE"); -} -function constructYamlBoolean(data3) { - return data3 === "true" || data3 === "True" || data3 === "TRUE"; -} -function isBoolean(object) { - return Object.prototype.toString.call(object) === "[object Boolean]"; -} -var bool = new type("tag:yaml.org,2002:bool", { - kind: "scalar", - resolve: resolveYamlBoolean, - construct: constructYamlBoolean, - predicate: isBoolean, - represent: { - lowercase: function(object) { - return object ? "true" : "false"; - }, - uppercase: function(object) { - return object ? "TRUE" : "FALSE"; - }, - camelcase: function(object) { - return object ? "True" : "False"; - } - }, - defaultStyle: "lowercase" -}); -function isHexCode(c5) { - return 48 <= c5 && c5 <= 57 || 65 <= c5 && c5 <= 70 || 97 <= c5 && c5 <= 102; -} -function isOctCode(c5) { - return 48 <= c5 && c5 <= 55; -} -function isDecCode(c5) { - return 48 <= c5 && c5 <= 57; -} -function resolveYamlInteger(data3) { - if (data3 === null) - return false; - var max15 = data3.length, index2 = 0, hasDigits = false, ch2; - if (!max15) - return false; - ch2 = data3[index2]; - if (ch2 === "-" || ch2 === "+") { - ch2 = data3[++index2]; - } - if (ch2 === "0") { - if (index2 + 1 === max15) - return true; - ch2 = data3[++index2]; - if (ch2 === "b") { - index2++; - for (; index2 < max15; index2++) { - ch2 = data3[index2]; - if (ch2 === "_") - continue; - if (ch2 !== "0" && ch2 !== "1") - return false; - hasDigits = true; - } - return hasDigits && ch2 !== "_"; - } - if (ch2 === "x") { - index2++; - for (; index2 < max15; index2++) { - ch2 = data3[index2]; - if (ch2 === "_") - continue; - if (!isHexCode(data3.charCodeAt(index2))) - return false; - hasDigits = true; - } - return hasDigits && ch2 !== "_"; - } - if (ch2 === "o") { - index2++; - for (; index2 < max15; index2++) { - ch2 = data3[index2]; - if (ch2 === "_") - continue; - if (!isOctCode(data3.charCodeAt(index2))) - return false; - hasDigits = true; - } - return hasDigits && ch2 !== "_"; - } - } - if (ch2 === "_") - return false; - for (; index2 < max15; index2++) { - ch2 = data3[index2]; - if (ch2 === "_") - continue; - if (!isDecCode(data3.charCodeAt(index2))) { - return false; - } - hasDigits = true; - } - if (!hasDigits || ch2 === "_") - return false; - return true; -} -function constructYamlInteger(data3) { - var value2 = data3, sign = 1, ch2; - if (value2.indexOf("_") !== -1) { - value2 = value2.replace(/_/g, ""); - } - ch2 = value2[0]; - if (ch2 === "-" || ch2 === "+") { - if (ch2 === "-") - sign = -1; - value2 = value2.slice(1); - ch2 = value2[0]; - } - if (value2 === "0") - return 0; - if (ch2 === "0") { - if (value2[1] === "b") - return sign * parseInt(value2.slice(2), 2); - if (value2[1] === "x") - return sign * parseInt(value2.slice(2), 16); - if (value2[1] === "o") - return sign * parseInt(value2.slice(2), 8); - } - return sign * parseInt(value2, 10); -} -function isInteger(object) { - return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 === 0 && !common.isNegativeZero(object)); -} -var int = new type("tag:yaml.org,2002:int", { - kind: "scalar", - resolve: resolveYamlInteger, - construct: constructYamlInteger, - predicate: isInteger, - represent: { - binary: function(obj) { - return obj >= 0 ? "0b" + obj.toString(2) : "-0b" + obj.toString(2).slice(1); - }, - octal: function(obj) { - return obj >= 0 ? "0o" + obj.toString(8) : "-0o" + obj.toString(8).slice(1); - }, - decimal: function(obj) { - return obj.toString(10); - }, - hexadecimal: function(obj) { - return obj >= 0 ? "0x" + obj.toString(16).toUpperCase() : "-0x" + obj.toString(16).toUpperCase().slice(1); - } - }, - defaultStyle: "decimal", - styleAliases: { - binary: [2, "bin"], - octal: [8, "oct"], - decimal: [10, "dec"], - hexadecimal: [16, "hex"] - } -}); -var YAML_FLOAT_PATTERN = new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"); -function resolveYamlFloat(data3) { - if (data3 === null) - return false; - if (!YAML_FLOAT_PATTERN.test(data3) || data3[data3.length - 1] === "_") { - return false; - } - return true; -} -function constructYamlFloat(data3) { - var value2, sign; - value2 = data3.replace(/_/g, "").toLowerCase(); - sign = value2[0] === "-" ? -1 : 1; - if ("+-".indexOf(value2[0]) >= 0) { - value2 = value2.slice(1); - } - if (value2 === ".inf") { - return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; - } else if (value2 === ".nan") { - return NaN; - } - return sign * parseFloat(value2, 10); -} -var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; -function representYamlFloat(object, style) { - var res; - if (isNaN(object)) { - switch (style) { - case "lowercase": - return ".nan"; - case "uppercase": - return ".NAN"; - case "camelcase": - return ".NaN"; - } - } else if (Number.POSITIVE_INFINITY === object) { - switch (style) { - case "lowercase": - return ".inf"; - case "uppercase": - return ".INF"; - case "camelcase": - return ".Inf"; - } - } else if (Number.NEGATIVE_INFINITY === object) { - switch (style) { - case "lowercase": - return "-.inf"; - case "uppercase": - return "-.INF"; - case "camelcase": - return "-.Inf"; - } - } else if (common.isNegativeZero(object)) { - return "-0.0"; - } - res = object.toString(10); - return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res; -} -function isFloat(object) { - return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 !== 0 || common.isNegativeZero(object)); -} -var float = new type("tag:yaml.org,2002:float", { - kind: "scalar", - resolve: resolveYamlFloat, - construct: constructYamlFloat, - predicate: isFloat, - represent: representYamlFloat, - defaultStyle: "lowercase" -}); -var json = failsafe.extend({ - implicit: [ - _null, - bool, - int, - float - ] -}); -var core = json; -var YAML_DATE_REGEXP = new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"); -var YAML_TIMESTAMP_REGEXP = new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$"); -function resolveYamlTimestamp(data3) { - if (data3 === null) - return false; - if (YAML_DATE_REGEXP.exec(data3) !== null) - return true; - if (YAML_TIMESTAMP_REGEXP.exec(data3) !== null) - return true; - return false; -} -function constructYamlTimestamp(data3) { - var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date; - match = YAML_DATE_REGEXP.exec(data3); - if (match === null) - match = YAML_TIMESTAMP_REGEXP.exec(data3); - if (match === null) - throw new Error("Date resolve error"); - year = +match[1]; - month = +match[2] - 1; - day = +match[3]; - if (!match[4]) { - return new Date(Date.UTC(year, month, day)); - } - hour = +match[4]; - minute = +match[5]; - second = +match[6]; - if (match[7]) { - fraction = match[7].slice(0, 3); - while (fraction.length < 3) { - fraction += "0"; - } - fraction = +fraction; - } - if (match[9]) { - tz_hour = +match[10]; - tz_minute = +(match[11] || 0); - delta = (tz_hour * 60 + tz_minute) * 6e4; - if (match[9] === "-") - delta = -delta; - } - date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); - if (delta) - date.setTime(date.getTime() - delta); - return date; -} -function representYamlTimestamp(object) { - return object.toISOString(); -} -var timestamp = new type("tag:yaml.org,2002:timestamp", { - kind: "scalar", - resolve: resolveYamlTimestamp, - construct: constructYamlTimestamp, - instanceOf: Date, - represent: representYamlTimestamp -}); -function resolveYamlMerge(data3) { - return data3 === "<<" || data3 === null; -} -var merge = new type("tag:yaml.org,2002:merge", { - kind: "scalar", - resolve: resolveYamlMerge -}); -var BASE64_MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r"; -function resolveYamlBinary(data3) { - if (data3 === null) - return false; - var code, idx, bitlen = 0, max15 = data3.length, map23 = BASE64_MAP; - for (idx = 0; idx < max15; idx++) { - code = map23.indexOf(data3.charAt(idx)); - if (code > 64) - continue; - if (code < 0) - return false; - bitlen += 6; - } - return bitlen % 8 === 0; -} -function constructYamlBinary(data3) { - var idx, tailbits, input = data3.replace(/[\r\n=]/g, ""), max15 = input.length, map23 = BASE64_MAP, bits = 0, result = []; - for (idx = 0; idx < max15; idx++) { - if (idx % 4 === 0 && idx) { - result.push(bits >> 16 & 255); - result.push(bits >> 8 & 255); - result.push(bits & 255); - } - bits = bits << 6 | map23.indexOf(input.charAt(idx)); - } - tailbits = max15 % 4 * 6; - if (tailbits === 0) { - result.push(bits >> 16 & 255); - result.push(bits >> 8 & 255); - result.push(bits & 255); - } else if (tailbits === 18) { - result.push(bits >> 10 & 255); - result.push(bits >> 2 & 255); - } else if (tailbits === 12) { - result.push(bits >> 4 & 255); - } - return new Uint8Array(result); -} -function representYamlBinary(object) { - var result = "", bits = 0, idx, tail, max15 = object.length, map23 = BASE64_MAP; - for (idx = 0; idx < max15; idx++) { - if (idx % 3 === 0 && idx) { - result += map23[bits >> 18 & 63]; - result += map23[bits >> 12 & 63]; - result += map23[bits >> 6 & 63]; - result += map23[bits & 63]; - } - bits = (bits << 8) + object[idx]; - } - tail = max15 % 3; - if (tail === 0) { - result += map23[bits >> 18 & 63]; - result += map23[bits >> 12 & 63]; - result += map23[bits >> 6 & 63]; - result += map23[bits & 63]; - } else if (tail === 2) { - result += map23[bits >> 10 & 63]; - result += map23[bits >> 4 & 63]; - result += map23[bits << 2 & 63]; - result += map23[64]; - } else if (tail === 1) { - result += map23[bits >> 2 & 63]; - result += map23[bits << 4 & 63]; - result += map23[64]; - result += map23[64]; - } - return result; -} -function isBinary(obj) { - return Object.prototype.toString.call(obj) === "[object Uint8Array]"; -} -var binary = new type("tag:yaml.org,2002:binary", { - kind: "scalar", - resolve: resolveYamlBinary, - construct: constructYamlBinary, - predicate: isBinary, - represent: representYamlBinary -}); -var _hasOwnProperty$3 = Object.prototype.hasOwnProperty; -var _toString$2 = Object.prototype.toString; -function resolveYamlOmap(data3) { - if (data3 === null) - return true; - var objectKeys = [], index2, length5, pair, pairKey, pairHasKey, object = data3; - for (index2 = 0, length5 = object.length; index2 < length5; index2 += 1) { - pair = object[index2]; - pairHasKey = false; - if (_toString$2.call(pair) !== "[object Object]") - return false; - for (pairKey in pair) { - if (_hasOwnProperty$3.call(pair, pairKey)) { - if (!pairHasKey) - pairHasKey = true; - else - return false; - } - } - if (!pairHasKey) - return false; - if (objectKeys.indexOf(pairKey) === -1) - objectKeys.push(pairKey); - else - return false; - } - return true; -} -function constructYamlOmap(data3) { - return data3 !== null ? data3 : []; -} -var omap = new type("tag:yaml.org,2002:omap", { - kind: "sequence", - resolve: resolveYamlOmap, - construct: constructYamlOmap -}); -var _toString$1 = Object.prototype.toString; -function resolveYamlPairs(data3) { - if (data3 === null) - return true; - var index2, length5, pair, keys6, result, object = data3; - result = new Array(object.length); - for (index2 = 0, length5 = object.length; index2 < length5; index2 += 1) { - pair = object[index2]; - if (_toString$1.call(pair) !== "[object Object]") - return false; - keys6 = Object.keys(pair); - if (keys6.length !== 1) - return false; - result[index2] = [keys6[0], pair[keys6[0]]]; - } - return true; -} -function constructYamlPairs(data3) { - if (data3 === null) - return []; - var index2, length5, pair, keys6, result, object = data3; - result = new Array(object.length); - for (index2 = 0, length5 = object.length; index2 < length5; index2 += 1) { - pair = object[index2]; - keys6 = Object.keys(pair); - result[index2] = [keys6[0], pair[keys6[0]]]; - } - return result; -} -var pairs = new type("tag:yaml.org,2002:pairs", { - kind: "sequence", - resolve: resolveYamlPairs, - construct: constructYamlPairs -}); -var _hasOwnProperty$2 = Object.prototype.hasOwnProperty; -function resolveYamlSet(data3) { - if (data3 === null) - return true; - var key, object = data3; - for (key in object) { - if (_hasOwnProperty$2.call(object, key)) { - if (object[key] !== null) - return false; - } - } - return true; -} -function constructYamlSet(data3) { - return data3 !== null ? data3 : {}; -} -var set = new type("tag:yaml.org,2002:set", { - kind: "mapping", - resolve: resolveYamlSet, - construct: constructYamlSet -}); -var _default = core.extend({ - implicit: [ - timestamp, - merge - ], - explicit: [ - binary, - omap, - pairs, - set - ] -}); -var _hasOwnProperty$1 = Object.prototype.hasOwnProperty; -var CONTEXT_FLOW_IN = 1; -var CONTEXT_FLOW_OUT = 2; -var CONTEXT_BLOCK_IN = 3; -var CONTEXT_BLOCK_OUT = 4; -var CHOMPING_CLIP = 1; -var CHOMPING_STRIP = 2; -var CHOMPING_KEEP = 3; -var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; -var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; -var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; -var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; -function _class(obj) { - return Object.prototype.toString.call(obj); -} -function is_EOL(c5) { - return c5 === 10 || c5 === 13; -} -function is_WHITE_SPACE(c5) { - return c5 === 9 || c5 === 32; -} -function is_WS_OR_EOL(c5) { - return c5 === 9 || c5 === 32 || c5 === 10 || c5 === 13; -} -function is_FLOW_INDICATOR(c5) { - return c5 === 44 || c5 === 91 || c5 === 93 || c5 === 123 || c5 === 125; -} -function fromHexCode(c5) { - var lc; - if (48 <= c5 && c5 <= 57) { - return c5 - 48; - } - lc = c5 | 32; - if (97 <= lc && lc <= 102) { - return lc - 97 + 10; - } - return -1; -} -function escapedHexLen(c5) { - if (c5 === 120) { - return 2; - } - if (c5 === 117) { - return 4; - } - if (c5 === 85) { - return 8; - } - return 0; -} -function fromDecimalCode(c5) { - if (48 <= c5 && c5 <= 57) { - return c5 - 48; - } - return -1; -} -function simpleEscapeSequence(c5) { - return c5 === 48 ? "\0" : c5 === 97 ? "\x07" : c5 === 98 ? "\b" : c5 === 116 ? " " : c5 === 9 ? " " : c5 === 110 ? "\n" : c5 === 118 ? "\v" : c5 === 102 ? "\f" : c5 === 114 ? "\r" : c5 === 101 ? "" : c5 === 32 ? " " : c5 === 34 ? '"' : c5 === 47 ? "/" : c5 === 92 ? "\\" : c5 === 78 ? "\x85" : c5 === 95 ? "\xA0" : c5 === 76 ? "\u2028" : c5 === 80 ? "\u2029" : ""; -} -function charFromCodepoint(c5) { - if (c5 <= 65535) { - return String.fromCharCode(c5); - } - return String.fromCharCode((c5 - 65536 >> 10) + 55296, (c5 - 65536 & 1023) + 56320); -} -var simpleEscapeCheck = new Array(256); -var simpleEscapeMap = new Array(256); -for (i4 = 0; i4 < 256; i4++) { - simpleEscapeCheck[i4] = simpleEscapeSequence(i4) ? 1 : 0; - simpleEscapeMap[i4] = simpleEscapeSequence(i4); -} -var i4; -function State$1(input, options) { - this.input = input; - this.filename = options["filename"] || null; - this.schema = options["schema"] || _default; - this.onWarning = options["onWarning"] || null; - this.legacy = options["legacy"] || false; - this.json = options["json"] || false; - this.listener = options["listener"] || null; - this.implicitTypes = this.schema.compiledImplicit; - this.typeMap = this.schema.compiledTypeMap; - this.length = input.length; - this.position = 0; - this.line = 0; - this.lineStart = 0; - this.lineIndent = 0; - this.firstTabInLine = -1; - this.documents = []; -} -function generateError(state2, message) { - var mark = { - name: state2.filename, - buffer: state2.input.slice(0, -1), - position: state2.position, - line: state2.line, - column: state2.position - state2.lineStart - }; - mark.snippet = snippet(mark); - return new exception(message, mark); -} -function throwError(state2, message) { - throw generateError(state2, message); -} -function throwWarning(state2, message) { - if (state2.onWarning) { - state2.onWarning.call(null, generateError(state2, message)); - } -} -var directiveHandlers = { - YAML: function handleYamlDirective(state2, name, args) { - var match, major, minor; - if (state2.version !== null) { - throwError(state2, "duplication of %YAML directive"); - } - if (args.length !== 1) { - throwError(state2, "YAML directive accepts exactly one argument"); - } - match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); - if (match === null) { - throwError(state2, "ill-formed argument of the YAML directive"); - } - major = parseInt(match[1], 10); - minor = parseInt(match[2], 10); - if (major !== 1) { - throwError(state2, "unacceptable YAML version of the document"); - } - state2.version = args[0]; - state2.checkLineBreaks = minor < 2; - if (minor !== 1 && minor !== 2) { - throwWarning(state2, "unsupported YAML version of the document"); - } - }, - TAG: function handleTagDirective(state2, name, args) { - var handle, prefix2; - if (args.length !== 2) { - throwError(state2, "TAG directive accepts exactly two arguments"); - } - handle = args[0]; - prefix2 = args[1]; - if (!PATTERN_TAG_HANDLE.test(handle)) { - throwError(state2, "ill-formed tag handle (first argument) of the TAG directive"); - } - if (_hasOwnProperty$1.call(state2.tagMap, handle)) { - throwError(state2, 'there is a previously declared suffix for "' + handle + '" tag handle'); - } - if (!PATTERN_TAG_URI.test(prefix2)) { - throwError(state2, "ill-formed tag prefix (second argument) of the TAG directive"); - } - try { - prefix2 = decodeURIComponent(prefix2); - } catch (err) { - throwError(state2, "tag prefix is malformed: " + prefix2); - } - state2.tagMap[handle] = prefix2; - } -}; -function captureSegment(state2, start, end2, checkJson) { - var _position, _length, _character, _result; - if (start < end2) { - _result = state2.input.slice(start, end2); - if (checkJson) { - for (_position = 0, _length = _result.length; _position < _length; _position += 1) { - _character = _result.charCodeAt(_position); - if (!(_character === 9 || 32 <= _character && _character <= 1114111)) { - throwError(state2, "expected valid JSON character"); - } - } - } else if (PATTERN_NON_PRINTABLE.test(_result)) { - throwError(state2, "the stream contains non-printable characters"); - } - state2.result += _result; - } -} -function mergeMappings(state2, destination, source, overridableKeys) { - var sourceKeys, key, index2, quantity; - if (!common.isObject(source)) { - throwError(state2, "cannot merge mappings; the provided source object is unacceptable"); - } - sourceKeys = Object.keys(source); - for (index2 = 0, quantity = sourceKeys.length; index2 < quantity; index2 += 1) { - key = sourceKeys[index2]; - if (!_hasOwnProperty$1.call(destination, key)) { - destination[key] = source[key]; - overridableKeys[key] = true; - } - } -} -function storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) { - var index2, quantity; - if (Array.isArray(keyNode)) { - keyNode = Array.prototype.slice.call(keyNode); - for (index2 = 0, quantity = keyNode.length; index2 < quantity; index2 += 1) { - if (Array.isArray(keyNode[index2])) { - throwError(state2, "nested arrays are not supported inside keys"); - } - if (typeof keyNode === "object" && _class(keyNode[index2]) === "[object Object]") { - keyNode[index2] = "[object Object]"; - } - } - } - if (typeof keyNode === "object" && _class(keyNode) === "[object Object]") { - keyNode = "[object Object]"; - } - keyNode = String(keyNode); - if (_result === null) { - _result = {}; - } - if (keyTag === "tag:yaml.org,2002:merge") { - if (Array.isArray(valueNode)) { - for (index2 = 0, quantity = valueNode.length; index2 < quantity; index2 += 1) { - mergeMappings(state2, _result, valueNode[index2], overridableKeys); - } - } else { - mergeMappings(state2, _result, valueNode, overridableKeys); - } - } else { - if (!state2.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) { - state2.line = startLine || state2.line; - state2.lineStart = startLineStart || state2.lineStart; - state2.position = startPos || state2.position; - throwError(state2, "duplicated mapping key"); - } - if (keyNode === "__proto__") { - Object.defineProperty(_result, keyNode, { - configurable: true, - enumerable: true, - writable: true, - value: valueNode - }); - } else { - _result[keyNode] = valueNode; - } - delete overridableKeys[keyNode]; - } - return _result; -} -function readLineBreak(state2) { - var ch2; - ch2 = state2.input.charCodeAt(state2.position); - if (ch2 === 10) { - state2.position++; - } else if (ch2 === 13) { - state2.position++; - if (state2.input.charCodeAt(state2.position) === 10) { - state2.position++; - } - } else { - throwError(state2, "a line break is expected"); - } - state2.line += 1; - state2.lineStart = state2.position; - state2.firstTabInLine = -1; -} -function skipSeparationSpace(state2, allowComments, checkIndent) { - var lineBreaks = 0, ch2 = state2.input.charCodeAt(state2.position); - while (ch2 !== 0) { - while (is_WHITE_SPACE(ch2)) { - if (ch2 === 9 && state2.firstTabInLine === -1) { - state2.firstTabInLine = state2.position; - } - ch2 = state2.input.charCodeAt(++state2.position); - } - if (allowComments && ch2 === 35) { - do { - ch2 = state2.input.charCodeAt(++state2.position); - } while (ch2 !== 10 && ch2 !== 13 && ch2 !== 0); - } - if (is_EOL(ch2)) { - readLineBreak(state2); - ch2 = state2.input.charCodeAt(state2.position); - lineBreaks++; - state2.lineIndent = 0; - while (ch2 === 32) { - state2.lineIndent++; - ch2 = state2.input.charCodeAt(++state2.position); - } - } else { - break; - } - } - if (checkIndent !== -1 && lineBreaks !== 0 && state2.lineIndent < checkIndent) { - throwWarning(state2, "deficient indentation"); - } - return lineBreaks; -} -function testDocumentSeparator(state2) { - var _position = state2.position, ch2; - ch2 = state2.input.charCodeAt(_position); - if ((ch2 === 45 || ch2 === 46) && ch2 === state2.input.charCodeAt(_position + 1) && ch2 === state2.input.charCodeAt(_position + 2)) { - _position += 3; - ch2 = state2.input.charCodeAt(_position); - if (ch2 === 0 || is_WS_OR_EOL(ch2)) { - return true; - } - } - return false; -} -function writeFoldedLines(state2, count2) { - if (count2 === 1) { - state2.result += " "; - } else if (count2 > 1) { - state2.result += common.repeat("\n", count2 - 1); - } -} -function readPlainScalar(state2, nodeIndent, withinFlowCollection) { - var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state2.kind, _result = state2.result, ch2; - ch2 = state2.input.charCodeAt(state2.position); - if (is_WS_OR_EOL(ch2) || is_FLOW_INDICATOR(ch2) || ch2 === 35 || ch2 === 38 || ch2 === 42 || ch2 === 33 || ch2 === 124 || ch2 === 62 || ch2 === 39 || ch2 === 34 || ch2 === 37 || ch2 === 64 || ch2 === 96) { - return false; - } - if (ch2 === 63 || ch2 === 45) { - following = state2.input.charCodeAt(state2.position + 1); - if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) { - return false; - } - } - state2.kind = "scalar"; - state2.result = ""; - captureStart = captureEnd = state2.position; - hasPendingContent = false; - while (ch2 !== 0) { - if (ch2 === 58) { - following = state2.input.charCodeAt(state2.position + 1); - if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) { - break; - } - } else if (ch2 === 35) { - preceding = state2.input.charCodeAt(state2.position - 1); - if (is_WS_OR_EOL(preceding)) { - break; - } - } else if (state2.position === state2.lineStart && testDocumentSeparator(state2) || withinFlowCollection && is_FLOW_INDICATOR(ch2)) { - break; - } else if (is_EOL(ch2)) { - _line = state2.line; - _lineStart = state2.lineStart; - _lineIndent = state2.lineIndent; - skipSeparationSpace(state2, false, -1); - if (state2.lineIndent >= nodeIndent) { - hasPendingContent = true; - ch2 = state2.input.charCodeAt(state2.position); - continue; - } else { - state2.position = captureEnd; - state2.line = _line; - state2.lineStart = _lineStart; - state2.lineIndent = _lineIndent; - break; - } - } - if (hasPendingContent) { - captureSegment(state2, captureStart, captureEnd, false); - writeFoldedLines(state2, state2.line - _line); - captureStart = captureEnd = state2.position; - hasPendingContent = false; - } - if (!is_WHITE_SPACE(ch2)) { - captureEnd = state2.position + 1; - } - ch2 = state2.input.charCodeAt(++state2.position); - } - captureSegment(state2, captureStart, captureEnd, false); - if (state2.result) { - return true; - } - state2.kind = _kind; - state2.result = _result; - return false; -} -function readSingleQuotedScalar(state2, nodeIndent) { - var ch2, captureStart, captureEnd; - ch2 = state2.input.charCodeAt(state2.position); - if (ch2 !== 39) { - return false; - } - state2.kind = "scalar"; - state2.result = ""; - state2.position++; - captureStart = captureEnd = state2.position; - while ((ch2 = state2.input.charCodeAt(state2.position)) !== 0) { - if (ch2 === 39) { - captureSegment(state2, captureStart, state2.position, true); - ch2 = state2.input.charCodeAt(++state2.position); - if (ch2 === 39) { - captureStart = state2.position; - state2.position++; - captureEnd = state2.position; - } else { - return true; - } - } else if (is_EOL(ch2)) { - captureSegment(state2, captureStart, captureEnd, true); - writeFoldedLines(state2, skipSeparationSpace(state2, false, nodeIndent)); - captureStart = captureEnd = state2.position; - } else if (state2.position === state2.lineStart && testDocumentSeparator(state2)) { - throwError(state2, "unexpected end of the document within a single quoted scalar"); - } else { - state2.position++; - captureEnd = state2.position; - } - } - throwError(state2, "unexpected end of the stream within a single quoted scalar"); -} -function readDoubleQuotedScalar(state2, nodeIndent) { - var captureStart, captureEnd, hexLength, hexResult, tmp, ch2; - ch2 = state2.input.charCodeAt(state2.position); - if (ch2 !== 34) { - return false; - } - state2.kind = "scalar"; - state2.result = ""; - state2.position++; - captureStart = captureEnd = state2.position; - while ((ch2 = state2.input.charCodeAt(state2.position)) !== 0) { - if (ch2 === 34) { - captureSegment(state2, captureStart, state2.position, true); - state2.position++; - return true; - } else if (ch2 === 92) { - captureSegment(state2, captureStart, state2.position, true); - ch2 = state2.input.charCodeAt(++state2.position); - if (is_EOL(ch2)) { - skipSeparationSpace(state2, false, nodeIndent); - } else if (ch2 < 256 && simpleEscapeCheck[ch2]) { - state2.result += simpleEscapeMap[ch2]; - state2.position++; - } else if ((tmp = escapedHexLen(ch2)) > 0) { - hexLength = tmp; - hexResult = 0; - for (; hexLength > 0; hexLength--) { - ch2 = state2.input.charCodeAt(++state2.position); - if ((tmp = fromHexCode(ch2)) >= 0) { - hexResult = (hexResult << 4) + tmp; - } else { - throwError(state2, "expected hexadecimal character"); - } - } - state2.result += charFromCodepoint(hexResult); - state2.position++; - } else { - throwError(state2, "unknown escape sequence"); - } - captureStart = captureEnd = state2.position; - } else if (is_EOL(ch2)) { - captureSegment(state2, captureStart, captureEnd, true); - writeFoldedLines(state2, skipSeparationSpace(state2, false, nodeIndent)); - captureStart = captureEnd = state2.position; - } else if (state2.position === state2.lineStart && testDocumentSeparator(state2)) { - throwError(state2, "unexpected end of the document within a double quoted scalar"); - } else { - state2.position++; - captureEnd = state2.position; - } - } - throwError(state2, "unexpected end of the stream within a double quoted scalar"); -} -function readFlowCollection(state2, nodeIndent) { - var readNext = true, _line, _lineStart, _pos, _tag = state2.tag, _result, _anchor = state2.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = Object.create(null), keyNode, keyTag, valueNode, ch2; - ch2 = state2.input.charCodeAt(state2.position); - if (ch2 === 91) { - terminator = 93; - isMapping = false; - _result = []; - } else if (ch2 === 123) { - terminator = 125; - isMapping = true; - _result = {}; - } else { - return false; - } - if (state2.anchor !== null) { - state2.anchorMap[state2.anchor] = _result; - } - ch2 = state2.input.charCodeAt(++state2.position); - while (ch2 !== 0) { - skipSeparationSpace(state2, true, nodeIndent); - ch2 = state2.input.charCodeAt(state2.position); - if (ch2 === terminator) { - state2.position++; - state2.tag = _tag; - state2.anchor = _anchor; - state2.kind = isMapping ? "mapping" : "sequence"; - state2.result = _result; - return true; - } else if (!readNext) { - throwError(state2, "missed comma between flow collection entries"); - } else if (ch2 === 44) { - throwError(state2, "expected the node content, but found ','"); - } - keyTag = keyNode = valueNode = null; - isPair = isExplicitPair = false; - if (ch2 === 63) { - following = state2.input.charCodeAt(state2.position + 1); - if (is_WS_OR_EOL(following)) { - isPair = isExplicitPair = true; - state2.position++; - skipSeparationSpace(state2, true, nodeIndent); - } - } - _line = state2.line; - _lineStart = state2.lineStart; - _pos = state2.position; - composeNode(state2, nodeIndent, CONTEXT_FLOW_IN, false, true); - keyTag = state2.tag; - keyNode = state2.result; - skipSeparationSpace(state2, true, nodeIndent); - ch2 = state2.input.charCodeAt(state2.position); - if ((isExplicitPair || state2.line === _line) && ch2 === 58) { - isPair = true; - ch2 = state2.input.charCodeAt(++state2.position); - skipSeparationSpace(state2, true, nodeIndent); - composeNode(state2, nodeIndent, CONTEXT_FLOW_IN, false, true); - valueNode = state2.result; - } - if (isMapping) { - storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos); - } else if (isPair) { - _result.push(storeMappingPair(state2, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); - } else { - _result.push(keyNode); - } - skipSeparationSpace(state2, true, nodeIndent); - ch2 = state2.input.charCodeAt(state2.position); - if (ch2 === 44) { - readNext = true; - ch2 = state2.input.charCodeAt(++state2.position); - } else { - readNext = false; - } - } - throwError(state2, "unexpected end of the stream within a flow collection"); -} -function readBlockScalar(state2, nodeIndent) { - var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch2; - ch2 = state2.input.charCodeAt(state2.position); - if (ch2 === 124) { - folding = false; - } else if (ch2 === 62) { - folding = true; - } else { - return false; - } - state2.kind = "scalar"; - state2.result = ""; - while (ch2 !== 0) { - ch2 = state2.input.charCodeAt(++state2.position); - if (ch2 === 43 || ch2 === 45) { - if (CHOMPING_CLIP === chomping) { - chomping = ch2 === 43 ? CHOMPING_KEEP : CHOMPING_STRIP; - } else { - throwError(state2, "repeat of a chomping mode identifier"); - } - } else if ((tmp = fromDecimalCode(ch2)) >= 0) { - if (tmp === 0) { - throwError(state2, "bad explicit indentation width of a block scalar; it cannot be less than one"); - } else if (!detectedIndent) { - textIndent = nodeIndent + tmp - 1; - detectedIndent = true; - } else { - throwError(state2, "repeat of an indentation width identifier"); - } - } else { - break; - } - } - if (is_WHITE_SPACE(ch2)) { - do { - ch2 = state2.input.charCodeAt(++state2.position); - } while (is_WHITE_SPACE(ch2)); - if (ch2 === 35) { - do { - ch2 = state2.input.charCodeAt(++state2.position); - } while (!is_EOL(ch2) && ch2 !== 0); - } - } - while (ch2 !== 0) { - readLineBreak(state2); - state2.lineIndent = 0; - ch2 = state2.input.charCodeAt(state2.position); - while ((!detectedIndent || state2.lineIndent < textIndent) && ch2 === 32) { - state2.lineIndent++; - ch2 = state2.input.charCodeAt(++state2.position); - } - if (!detectedIndent && state2.lineIndent > textIndent) { - textIndent = state2.lineIndent; - } - if (is_EOL(ch2)) { - emptyLines++; - continue; - } - if (state2.lineIndent < textIndent) { - if (chomping === CHOMPING_KEEP) { - state2.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); - } else if (chomping === CHOMPING_CLIP) { - if (didReadContent) { - state2.result += "\n"; - } - } - break; - } - if (folding) { - if (is_WHITE_SPACE(ch2)) { - atMoreIndented = true; - state2.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); - } else if (atMoreIndented) { - atMoreIndented = false; - state2.result += common.repeat("\n", emptyLines + 1); - } else if (emptyLines === 0) { - if (didReadContent) { - state2.result += " "; - } - } else { - state2.result += common.repeat("\n", emptyLines); - } - } else { - state2.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines); - } - didReadContent = true; - detectedIndent = true; - emptyLines = 0; - captureStart = state2.position; - while (!is_EOL(ch2) && ch2 !== 0) { - ch2 = state2.input.charCodeAt(++state2.position); - } - captureSegment(state2, captureStart, state2.position, false); - } - return true; -} -function readBlockSequence(state2, nodeIndent) { - var _line, _tag = state2.tag, _anchor = state2.anchor, _result = [], following, detected = false, ch2; - if (state2.firstTabInLine !== -1) - return false; - if (state2.anchor !== null) { - state2.anchorMap[state2.anchor] = _result; - } - ch2 = state2.input.charCodeAt(state2.position); - while (ch2 !== 0) { - if (state2.firstTabInLine !== -1) { - state2.position = state2.firstTabInLine; - throwError(state2, "tab characters must not be used in indentation"); - } - if (ch2 !== 45) { - break; - } - following = state2.input.charCodeAt(state2.position + 1); - if (!is_WS_OR_EOL(following)) { - break; - } - detected = true; - state2.position++; - if (skipSeparationSpace(state2, true, -1)) { - if (state2.lineIndent <= nodeIndent) { - _result.push(null); - ch2 = state2.input.charCodeAt(state2.position); - continue; - } - } - _line = state2.line; - composeNode(state2, nodeIndent, CONTEXT_BLOCK_IN, false, true); - _result.push(state2.result); - skipSeparationSpace(state2, true, -1); - ch2 = state2.input.charCodeAt(state2.position); - if ((state2.line === _line || state2.lineIndent > nodeIndent) && ch2 !== 0) { - throwError(state2, "bad indentation of a sequence entry"); - } else if (state2.lineIndent < nodeIndent) { - break; - } - } - if (detected) { - state2.tag = _tag; - state2.anchor = _anchor; - state2.kind = "sequence"; - state2.result = _result; - return true; - } - return false; -} -function readBlockMapping(state2, nodeIndent, flowIndent) { - var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state2.tag, _anchor = state2.anchor, _result = {}, overridableKeys = Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch2; - if (state2.firstTabInLine !== -1) - return false; - if (state2.anchor !== null) { - state2.anchorMap[state2.anchor] = _result; - } - ch2 = state2.input.charCodeAt(state2.position); - while (ch2 !== 0) { - if (!atExplicitKey && state2.firstTabInLine !== -1) { - state2.position = state2.firstTabInLine; - throwError(state2, "tab characters must not be used in indentation"); - } - following = state2.input.charCodeAt(state2.position + 1); - _line = state2.line; - if ((ch2 === 63 || ch2 === 58) && is_WS_OR_EOL(following)) { - if (ch2 === 63) { - if (atExplicitKey) { - storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); - keyTag = keyNode = valueNode = null; - } - detected = true; - atExplicitKey = true; - allowCompact = true; - } else if (atExplicitKey) { - atExplicitKey = false; - allowCompact = true; - } else { - throwError(state2, "incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"); - } - state2.position += 1; - ch2 = following; - } else { - _keyLine = state2.line; - _keyLineStart = state2.lineStart; - _keyPos = state2.position; - if (!composeNode(state2, flowIndent, CONTEXT_FLOW_OUT, false, true)) { - break; - } - if (state2.line === _line) { - ch2 = state2.input.charCodeAt(state2.position); - while (is_WHITE_SPACE(ch2)) { - ch2 = state2.input.charCodeAt(++state2.position); - } - if (ch2 === 58) { - ch2 = state2.input.charCodeAt(++state2.position); - if (!is_WS_OR_EOL(ch2)) { - throwError(state2, "a whitespace character is expected after the key-value separator within a block mapping"); - } - if (atExplicitKey) { - storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); - keyTag = keyNode = valueNode = null; - } - detected = true; - atExplicitKey = false; - allowCompact = false; - keyTag = state2.tag; - keyNode = state2.result; - } else if (detected) { - throwError(state2, "can not read an implicit mapping pair; a colon is missed"); - } else { - state2.tag = _tag; - state2.anchor = _anchor; - return true; - } - } else if (detected) { - throwError(state2, "can not read a block mapping entry; a multiline key may not be an implicit key"); - } else { - state2.tag = _tag; - state2.anchor = _anchor; - return true; - } - } - if (state2.line === _line || state2.lineIndent > nodeIndent) { - if (atExplicitKey) { - _keyLine = state2.line; - _keyLineStart = state2.lineStart; - _keyPos = state2.position; - } - if (composeNode(state2, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { - if (atExplicitKey) { - keyNode = state2.result; - } else { - valueNode = state2.result; - } - } - if (!atExplicitKey) { - storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos); - keyTag = keyNode = valueNode = null; - } - skipSeparationSpace(state2, true, -1); - ch2 = state2.input.charCodeAt(state2.position); - } - if ((state2.line === _line || state2.lineIndent > nodeIndent) && ch2 !== 0) { - throwError(state2, "bad indentation of a mapping entry"); - } else if (state2.lineIndent < nodeIndent) { - break; - } - } - if (atExplicitKey) { - storeMappingPair(state2, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); - } - if (detected) { - state2.tag = _tag; - state2.anchor = _anchor; - state2.kind = "mapping"; - state2.result = _result; - } - return detected; -} -function readTagProperty(state2) { - var _position, isVerbatim = false, isNamed = false, tagHandle, tagName, ch2; - ch2 = state2.input.charCodeAt(state2.position); - if (ch2 !== 33) - return false; - if (state2.tag !== null) { - throwError(state2, "duplication of a tag property"); - } - ch2 = state2.input.charCodeAt(++state2.position); - if (ch2 === 60) { - isVerbatim = true; - ch2 = state2.input.charCodeAt(++state2.position); - } else if (ch2 === 33) { - isNamed = true; - tagHandle = "!!"; - ch2 = state2.input.charCodeAt(++state2.position); - } else { - tagHandle = "!"; - } - _position = state2.position; - if (isVerbatim) { - do { - ch2 = state2.input.charCodeAt(++state2.position); - } while (ch2 !== 0 && ch2 !== 62); - if (state2.position < state2.length) { - tagName = state2.input.slice(_position, state2.position); - ch2 = state2.input.charCodeAt(++state2.position); - } else { - throwError(state2, "unexpected end of the stream within a verbatim tag"); - } - } else { - while (ch2 !== 0 && !is_WS_OR_EOL(ch2)) { - if (ch2 === 33) { - if (!isNamed) { - tagHandle = state2.input.slice(_position - 1, state2.position + 1); - if (!PATTERN_TAG_HANDLE.test(tagHandle)) { - throwError(state2, "named tag handle cannot contain such characters"); - } - isNamed = true; - _position = state2.position + 1; - } else { - throwError(state2, "tag suffix cannot contain exclamation marks"); - } - } - ch2 = state2.input.charCodeAt(++state2.position); - } - tagName = state2.input.slice(_position, state2.position); - if (PATTERN_FLOW_INDICATORS.test(tagName)) { - throwError(state2, "tag suffix cannot contain flow indicator characters"); - } - } - if (tagName && !PATTERN_TAG_URI.test(tagName)) { - throwError(state2, "tag name cannot contain such characters: " + tagName); - } - try { - tagName = decodeURIComponent(tagName); - } catch (err) { - throwError(state2, "tag name is malformed: " + tagName); - } - if (isVerbatim) { - state2.tag = tagName; - } else if (_hasOwnProperty$1.call(state2.tagMap, tagHandle)) { - state2.tag = state2.tagMap[tagHandle] + tagName; - } else if (tagHandle === "!") { - state2.tag = "!" + tagName; - } else if (tagHandle === "!!") { - state2.tag = "tag:yaml.org,2002:" + tagName; - } else { - throwError(state2, 'undeclared tag handle "' + tagHandle + '"'); - } - return true; -} -function readAnchorProperty(state2) { - var _position, ch2; - ch2 = state2.input.charCodeAt(state2.position); - if (ch2 !== 38) - return false; - if (state2.anchor !== null) { - throwError(state2, "duplication of an anchor property"); - } - ch2 = state2.input.charCodeAt(++state2.position); - _position = state2.position; - while (ch2 !== 0 && !is_WS_OR_EOL(ch2) && !is_FLOW_INDICATOR(ch2)) { - ch2 = state2.input.charCodeAt(++state2.position); - } - if (state2.position === _position) { - throwError(state2, "name of an anchor node must contain at least one character"); - } - state2.anchor = state2.input.slice(_position, state2.position); - return true; -} -function readAlias(state2) { - var _position, alias, ch2; - ch2 = state2.input.charCodeAt(state2.position); - if (ch2 !== 42) - return false; - ch2 = state2.input.charCodeAt(++state2.position); - _position = state2.position; - while (ch2 !== 0 && !is_WS_OR_EOL(ch2) && !is_FLOW_INDICATOR(ch2)) { - ch2 = state2.input.charCodeAt(++state2.position); - } - if (state2.position === _position) { - throwError(state2, "name of an alias node must contain at least one character"); - } - alias = state2.input.slice(_position, state2.position); - if (!_hasOwnProperty$1.call(state2.anchorMap, alias)) { - throwError(state2, 'unidentified alias "' + alias + '"'); - } - state2.result = state2.anchorMap[alias]; - skipSeparationSpace(state2, true, -1); - return true; -} -function composeNode(state2, parentIndent, nodeContext, allowToSeek, allowCompact) { - var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type2, flowIndent, blockIndent; - if (state2.listener !== null) { - state2.listener("open", state2); - } - state2.tag = null; - state2.anchor = null; - state2.kind = null; - state2.result = null; - allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext; - if (allowToSeek) { - if (skipSeparationSpace(state2, true, -1)) { - atNewLine = true; - if (state2.lineIndent > parentIndent) { - indentStatus = 1; - } else if (state2.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state2.lineIndent < parentIndent) { - indentStatus = -1; - } - } - } - if (indentStatus === 1) { - while (readTagProperty(state2) || readAnchorProperty(state2)) { - if (skipSeparationSpace(state2, true, -1)) { - atNewLine = true; - allowBlockCollections = allowBlockStyles; - if (state2.lineIndent > parentIndent) { - indentStatus = 1; - } else if (state2.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state2.lineIndent < parentIndent) { - indentStatus = -1; - } - } else { - allowBlockCollections = false; - } - } - } - if (allowBlockCollections) { - allowBlockCollections = atNewLine || allowCompact; - } - if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { - if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { - flowIndent = parentIndent; - } else { - flowIndent = parentIndent + 1; - } - blockIndent = state2.position - state2.lineStart; - if (indentStatus === 1) { - if (allowBlockCollections && (readBlockSequence(state2, blockIndent) || readBlockMapping(state2, blockIndent, flowIndent)) || readFlowCollection(state2, flowIndent)) { - hasContent = true; - } else { - if (allowBlockScalars && readBlockScalar(state2, flowIndent) || readSingleQuotedScalar(state2, flowIndent) || readDoubleQuotedScalar(state2, flowIndent)) { - hasContent = true; - } else if (readAlias(state2)) { - hasContent = true; - if (state2.tag !== null || state2.anchor !== null) { - throwError(state2, "alias node should not have any properties"); - } - } else if (readPlainScalar(state2, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { - hasContent = true; - if (state2.tag === null) { - state2.tag = "?"; - } - } - if (state2.anchor !== null) { - state2.anchorMap[state2.anchor] = state2.result; - } - } - } else if (indentStatus === 0) { - hasContent = allowBlockCollections && readBlockSequence(state2, blockIndent); - } - } - if (state2.tag === null) { - if (state2.anchor !== null) { - state2.anchorMap[state2.anchor] = state2.result; - } - } else if (state2.tag === "?") { - if (state2.result !== null && state2.kind !== "scalar") { - throwError(state2, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state2.kind + '"'); - } - for (typeIndex = 0, typeQuantity = state2.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { - type2 = state2.implicitTypes[typeIndex]; - if (type2.resolve(state2.result)) { - state2.result = type2.construct(state2.result); - state2.tag = type2.tag; - if (state2.anchor !== null) { - state2.anchorMap[state2.anchor] = state2.result; - } - break; - } - } - } else if (state2.tag !== "!") { - if (_hasOwnProperty$1.call(state2.typeMap[state2.kind || "fallback"], state2.tag)) { - type2 = state2.typeMap[state2.kind || "fallback"][state2.tag]; - } else { - type2 = null; - typeList = state2.typeMap.multi[state2.kind || "fallback"]; - for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { - if (state2.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { - type2 = typeList[typeIndex]; - break; - } - } - } - if (!type2) { - throwError(state2, "unknown tag !<" + state2.tag + ">"); - } - if (state2.result !== null && type2.kind !== state2.kind) { - throwError(state2, "unacceptable node kind for !<" + state2.tag + '> tag; it should be "' + type2.kind + '", not "' + state2.kind + '"'); - } - if (!type2.resolve(state2.result, state2.tag)) { - throwError(state2, "cannot resolve a node with !<" + state2.tag + "> explicit tag"); - } else { - state2.result = type2.construct(state2.result, state2.tag); - if (state2.anchor !== null) { - state2.anchorMap[state2.anchor] = state2.result; - } - } - } - if (state2.listener !== null) { - state2.listener("close", state2); - } - return state2.tag !== null || state2.anchor !== null || hasContent; -} -function readDocument(state2) { - var documentStart = state2.position, _position, directiveName, directiveArgs, hasDirectives = false, ch2; - state2.version = null; - state2.checkLineBreaks = state2.legacy; - state2.tagMap = Object.create(null); - state2.anchorMap = Object.create(null); - while ((ch2 = state2.input.charCodeAt(state2.position)) !== 0) { - skipSeparationSpace(state2, true, -1); - ch2 = state2.input.charCodeAt(state2.position); - if (state2.lineIndent > 0 || ch2 !== 37) { - break; - } - hasDirectives = true; - ch2 = state2.input.charCodeAt(++state2.position); - _position = state2.position; - while (ch2 !== 0 && !is_WS_OR_EOL(ch2)) { - ch2 = state2.input.charCodeAt(++state2.position); - } - directiveName = state2.input.slice(_position, state2.position); - directiveArgs = []; - if (directiveName.length < 1) { - throwError(state2, "directive name must not be less than one character in length"); - } - while (ch2 !== 0) { - while (is_WHITE_SPACE(ch2)) { - ch2 = state2.input.charCodeAt(++state2.position); - } - if (ch2 === 35) { - do { - ch2 = state2.input.charCodeAt(++state2.position); - } while (ch2 !== 0 && !is_EOL(ch2)); - break; - } - if (is_EOL(ch2)) - break; - _position = state2.position; - while (ch2 !== 0 && !is_WS_OR_EOL(ch2)) { - ch2 = state2.input.charCodeAt(++state2.position); - } - directiveArgs.push(state2.input.slice(_position, state2.position)); - } - if (ch2 !== 0) - readLineBreak(state2); - if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) { - directiveHandlers[directiveName](state2, directiveName, directiveArgs); - } else { - throwWarning(state2, 'unknown document directive "' + directiveName + '"'); - } - } - skipSeparationSpace(state2, true, -1); - if (state2.lineIndent === 0 && state2.input.charCodeAt(state2.position) === 45 && state2.input.charCodeAt(state2.position + 1) === 45 && state2.input.charCodeAt(state2.position + 2) === 45) { - state2.position += 3; - skipSeparationSpace(state2, true, -1); - } else if (hasDirectives) { - throwError(state2, "directives end mark is expected"); - } - composeNode(state2, state2.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); - skipSeparationSpace(state2, true, -1); - if (state2.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state2.input.slice(documentStart, state2.position))) { - throwWarning(state2, "non-ASCII line breaks are interpreted as content"); - } - state2.documents.push(state2.result); - if (state2.position === state2.lineStart && testDocumentSeparator(state2)) { - if (state2.input.charCodeAt(state2.position) === 46) { - state2.position += 3; - skipSeparationSpace(state2, true, -1); - } - return; - } - if (state2.position < state2.length - 1) { - throwError(state2, "end of the stream or a document separator is expected"); - } else { - return; - } -} -function loadDocuments(input, options) { - input = String(input); - options = options || {}; - if (input.length !== 0) { - if (input.charCodeAt(input.length - 1) !== 10 && input.charCodeAt(input.length - 1) !== 13) { - input += "\n"; - } - if (input.charCodeAt(0) === 65279) { - input = input.slice(1); - } - } - var state2 = new State$1(input, options); - var nullpos = input.indexOf("\0"); - if (nullpos !== -1) { - state2.position = nullpos; - throwError(state2, "null byte is not allowed in input"); - } - state2.input += "\0"; - while (state2.input.charCodeAt(state2.position) === 32) { - state2.lineIndent += 1; - state2.position += 1; - } - while (state2.position < state2.length - 1) { - readDocument(state2); - } - return state2.documents; -} -function loadAll$1(input, iterator, options) { - if (iterator !== null && typeof iterator === "object" && typeof options === "undefined") { - options = iterator; - iterator = null; - } - var documents = loadDocuments(input, options); - if (typeof iterator !== "function") { - return documents; - } - for (var index2 = 0, length5 = documents.length; index2 < length5; index2 += 1) { - iterator(documents[index2]); - } -} -function load$1(input, options) { - var documents = loadDocuments(input, options); - if (documents.length === 0) { - return void 0; - } else if (documents.length === 1) { - return documents[0]; - } - throw new exception("expected a single document in the stream, but found more"); -} -var loadAll_1 = loadAll$1; -var load_1 = load$1; -var loader = { - loadAll: loadAll_1, - load: load_1 -}; -var _toString = Object.prototype.toString; -var _hasOwnProperty = Object.prototype.hasOwnProperty; -var CHAR_BOM = 65279; -var CHAR_TAB = 9; -var CHAR_LINE_FEED = 10; -var CHAR_CARRIAGE_RETURN = 13; -var CHAR_SPACE = 32; -var CHAR_EXCLAMATION = 33; -var CHAR_DOUBLE_QUOTE = 34; -var CHAR_SHARP = 35; -var CHAR_PERCENT = 37; -var CHAR_AMPERSAND = 38; -var CHAR_SINGLE_QUOTE = 39; -var CHAR_ASTERISK = 42; -var CHAR_COMMA = 44; -var CHAR_MINUS = 45; -var CHAR_COLON = 58; -var CHAR_EQUALS = 61; -var CHAR_GREATER_THAN = 62; -var CHAR_QUESTION = 63; -var CHAR_COMMERCIAL_AT = 64; -var CHAR_LEFT_SQUARE_BRACKET = 91; -var CHAR_RIGHT_SQUARE_BRACKET = 93; -var CHAR_GRAVE_ACCENT = 96; -var CHAR_LEFT_CURLY_BRACKET = 123; -var CHAR_VERTICAL_LINE = 124; -var CHAR_RIGHT_CURLY_BRACKET = 125; -var ESCAPE_SEQUENCES = {}; -ESCAPE_SEQUENCES[0] = "\\0"; -ESCAPE_SEQUENCES[7] = "\\a"; -ESCAPE_SEQUENCES[8] = "\\b"; -ESCAPE_SEQUENCES[9] = "\\t"; -ESCAPE_SEQUENCES[10] = "\\n"; -ESCAPE_SEQUENCES[11] = "\\v"; -ESCAPE_SEQUENCES[12] = "\\f"; -ESCAPE_SEQUENCES[13] = "\\r"; -ESCAPE_SEQUENCES[27] = "\\e"; -ESCAPE_SEQUENCES[34] = '\\"'; -ESCAPE_SEQUENCES[92] = "\\\\"; -ESCAPE_SEQUENCES[133] = "\\N"; -ESCAPE_SEQUENCES[160] = "\\_"; -ESCAPE_SEQUENCES[8232] = "\\L"; -ESCAPE_SEQUENCES[8233] = "\\P"; -var DEPRECATED_BOOLEANS_SYNTAX = [ - "y", - "Y", - "yes", - "Yes", - "YES", - "on", - "On", - "ON", - "n", - "N", - "no", - "No", - "NO", - "off", - "Off", - "OFF" -]; -var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; -function compileStyleMap(schema3, map23) { - var result, keys6, index2, length5, tag, style, type2; - if (map23 === null) - return {}; - result = {}; - keys6 = Object.keys(map23); - for (index2 = 0, length5 = keys6.length; index2 < length5; index2 += 1) { - tag = keys6[index2]; - style = String(map23[tag]); - if (tag.slice(0, 2) === "!!") { - tag = "tag:yaml.org,2002:" + tag.slice(2); - } - type2 = schema3.compiledTypeMap["fallback"][tag]; - if (type2 && _hasOwnProperty.call(type2.styleAliases, style)) { - style = type2.styleAliases[style]; - } - result[tag] = style; - } - return result; -} -function encodeHex(character) { - var string, handle, length5; - string = character.toString(16).toUpperCase(); - if (character <= 255) { - handle = "x"; - length5 = 2; - } else if (character <= 65535) { - handle = "u"; - length5 = 4; - } else if (character <= 4294967295) { - handle = "U"; - length5 = 8; - } else { - throw new exception("code point within a string may not be greater than 0xFFFFFFFF"); - } - return "\\" + handle + common.repeat("0", length5 - string.length) + string; -} -var QUOTING_TYPE_SINGLE = 1; -var QUOTING_TYPE_DOUBLE = 2; -function State(options) { - this.schema = options["schema"] || _default; - this.indent = Math.max(1, options["indent"] || 2); - this.noArrayIndent = options["noArrayIndent"] || false; - this.skipInvalid = options["skipInvalid"] || false; - this.flowLevel = common.isNothing(options["flowLevel"]) ? -1 : options["flowLevel"]; - this.styleMap = compileStyleMap(this.schema, options["styles"] || null); - this.sortKeys = options["sortKeys"] || false; - this.lineWidth = options["lineWidth"] || 80; - this.noRefs = options["noRefs"] || false; - this.noCompatMode = options["noCompatMode"] || false; - this.condenseFlow = options["condenseFlow"] || false; - this.quotingType = options["quotingType"] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; - this.forceQuotes = options["forceQuotes"] || false; - this.replacer = typeof options["replacer"] === "function" ? options["replacer"] : null; - this.implicitTypes = this.schema.compiledImplicit; - this.explicitTypes = this.schema.compiledExplicit; - this.tag = null; - this.result = ""; - this.duplicates = []; - this.usedDuplicates = null; -} -function indentString(string, spaces) { - var ind = common.repeat(" ", spaces), position2 = 0, next = -1, result = "", line2, length5 = string.length; - while (position2 < length5) { - next = string.indexOf("\n", position2); - if (next === -1) { - line2 = string.slice(position2); - position2 = length5; - } else { - line2 = string.slice(position2, next + 1); - position2 = next + 1; - } - if (line2.length && line2 !== "\n") - result += ind; - result += line2; - } - return result; -} -function generateNextLine(state2, level) { - return "\n" + common.repeat(" ", state2.indent * level); -} -function testImplicitResolving(state2, str8) { - var index2, length5, type2; - for (index2 = 0, length5 = state2.implicitTypes.length; index2 < length5; index2 += 1) { - type2 = state2.implicitTypes[index2]; - if (type2.resolve(str8)) { - return true; - } - } - return false; -} -function isWhitespace(c5) { - return c5 === CHAR_SPACE || c5 === CHAR_TAB; -} -function isPrintable(c5) { - return 32 <= c5 && c5 <= 126 || 161 <= c5 && c5 <= 55295 && c5 !== 8232 && c5 !== 8233 || 57344 <= c5 && c5 <= 65533 && c5 !== CHAR_BOM || 65536 <= c5 && c5 <= 1114111; -} -function isNsCharOrWhitespace(c5) { - return isPrintable(c5) && c5 !== CHAR_BOM && c5 !== CHAR_CARRIAGE_RETURN && c5 !== CHAR_LINE_FEED; -} -function isPlainSafe(c5, prev, inblock) { - var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c5); - var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c5); - return (inblock ? cIsNsCharOrWhitespace : cIsNsCharOrWhitespace && c5 !== CHAR_COMMA && c5 !== CHAR_LEFT_SQUARE_BRACKET && c5 !== CHAR_RIGHT_SQUARE_BRACKET && c5 !== CHAR_LEFT_CURLY_BRACKET && c5 !== CHAR_RIGHT_CURLY_BRACKET) && c5 !== CHAR_SHARP && !(prev === CHAR_COLON && !cIsNsChar) || isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c5 === CHAR_SHARP || prev === CHAR_COLON && cIsNsChar; -} -function isPlainSafeFirst(c5) { - return isPrintable(c5) && c5 !== CHAR_BOM && !isWhitespace(c5) && c5 !== CHAR_MINUS && c5 !== CHAR_QUESTION && c5 !== CHAR_COLON && c5 !== CHAR_COMMA && c5 !== CHAR_LEFT_SQUARE_BRACKET && c5 !== CHAR_RIGHT_SQUARE_BRACKET && c5 !== CHAR_LEFT_CURLY_BRACKET && c5 !== CHAR_RIGHT_CURLY_BRACKET && c5 !== CHAR_SHARP && c5 !== CHAR_AMPERSAND && c5 !== CHAR_ASTERISK && c5 !== CHAR_EXCLAMATION && c5 !== CHAR_VERTICAL_LINE && c5 !== CHAR_EQUALS && c5 !== CHAR_GREATER_THAN && c5 !== CHAR_SINGLE_QUOTE && c5 !== CHAR_DOUBLE_QUOTE && c5 !== CHAR_PERCENT && c5 !== CHAR_COMMERCIAL_AT && c5 !== CHAR_GRAVE_ACCENT; -} -function isPlainSafeLast(c5) { - return !isWhitespace(c5) && c5 !== CHAR_COLON; -} -function codePointAt(string, pos) { - var first = string.charCodeAt(pos), second; - if (first >= 55296 && first <= 56319 && pos + 1 < string.length) { - second = string.charCodeAt(pos + 1); - if (second >= 56320 && second <= 57343) { - return (first - 55296) * 1024 + second - 56320 + 65536; - } - } - return first; -} -function needIndentIndicator(string) { - var leadingSpaceRe = /^\n* /; - return leadingSpaceRe.test(string); -} -var STYLE_PLAIN = 1; -var STYLE_SINGLE = 2; -var STYLE_LITERAL = 3; -var STYLE_FOLDED = 4; -var STYLE_DOUBLE = 5; -function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType, quotingType, forceQuotes, inblock) { - var i4; - var char = 0; - var prevChar = null; - var hasLineBreak = false; - var hasFoldableLine = false; - var shouldTrackWidth = lineWidth !== -1; - var previousLineBreak = -1; - var plain = isPlainSafeFirst(codePointAt(string, 0)) && isPlainSafeLast(codePointAt(string, string.length - 1)); - if (singleLineOnly || forceQuotes) { - for (i4 = 0; i4 < string.length; char >= 65536 ? i4 += 2 : i4++) { - char = codePointAt(string, i4); - if (!isPrintable(char)) { - return STYLE_DOUBLE; - } - plain = plain && isPlainSafe(char, prevChar, inblock); - prevChar = char; - } - } else { - for (i4 = 0; i4 < string.length; char >= 65536 ? i4 += 2 : i4++) { - char = codePointAt(string, i4); - if (char === CHAR_LINE_FEED) { - hasLineBreak = true; - if (shouldTrackWidth) { - hasFoldableLine = hasFoldableLine || i4 - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " "; - previousLineBreak = i4; - } - } else if (!isPrintable(char)) { - return STYLE_DOUBLE; - } - plain = plain && isPlainSafe(char, prevChar, inblock); - prevChar = char; - } - hasFoldableLine = hasFoldableLine || shouldTrackWidth && (i4 - previousLineBreak - 1 > lineWidth && string[previousLineBreak + 1] !== " "); - } - if (!hasLineBreak && !hasFoldableLine) { - if (plain && !forceQuotes && !testAmbiguousType(string)) { - return STYLE_PLAIN; - } - return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; - } - if (indentPerLevel > 9 && needIndentIndicator(string)) { - return STYLE_DOUBLE; - } - if (!forceQuotes) { - return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; - } - return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; -} -function writeScalar(state2, string, level, iskey, inblock) { - state2.dump = function() { - if (string.length === 0) { - return state2.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; - } - if (!state2.noCompatMode) { - if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { - return state2.quotingType === QUOTING_TYPE_DOUBLE ? '"' + string + '"' : "'" + string + "'"; - } - } - var indent2 = state2.indent * Math.max(1, level); - var lineWidth = state2.lineWidth === -1 ? -1 : Math.max(Math.min(state2.lineWidth, 40), state2.lineWidth - indent2); - var singleLineOnly = iskey || state2.flowLevel > -1 && level >= state2.flowLevel; - function testAmbiguity(string2) { - return testImplicitResolving(state2, string2); - } - switch (chooseScalarStyle(string, singleLineOnly, state2.indent, lineWidth, testAmbiguity, state2.quotingType, state2.forceQuotes && !iskey, inblock)) { - case STYLE_PLAIN: - return string; - case STYLE_SINGLE: - return "'" + string.replace(/'/g, "''") + "'"; - case STYLE_LITERAL: - return "|" + blockHeader(string, state2.indent) + dropEndingNewline(indentString(string, indent2)); - case STYLE_FOLDED: - return ">" + blockHeader(string, state2.indent) + dropEndingNewline(indentString(foldString(string, lineWidth), indent2)); - case STYLE_DOUBLE: - return '"' + escapeString(string) + '"'; - default: - throw new exception("impossible error: invalid scalar style"); - } - }(); -} -function blockHeader(string, indentPerLevel) { - var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ""; - var clip = string[string.length - 1] === "\n"; - var keep = clip && (string[string.length - 2] === "\n" || string === "\n"); - var chomp = keep ? "+" : clip ? "" : "-"; - return indentIndicator + chomp + "\n"; -} -function dropEndingNewline(string) { - return string[string.length - 1] === "\n" ? string.slice(0, -1) : string; -} -function foldString(string, width2) { - var lineRe = /(\n+)([^\n]*)/g; - var result = function() { - var nextLF = string.indexOf("\n"); - nextLF = nextLF !== -1 ? nextLF : string.length; - lineRe.lastIndex = nextLF; - return foldLine(string.slice(0, nextLF), width2); - }(); - var prevMoreIndented = string[0] === "\n" || string[0] === " "; - var moreIndented; - var match; - while (match = lineRe.exec(string)) { - var prefix2 = match[1], line2 = match[2]; - moreIndented = line2[0] === " "; - result += prefix2 + (!prevMoreIndented && !moreIndented && line2 !== "" ? "\n" : "") + foldLine(line2, width2); - prevMoreIndented = moreIndented; - } - return result; -} -function foldLine(line2, width2) { - if (line2 === "" || line2[0] === " ") - return line2; - var breakRe = / [^ ]/g; - var match; - var start = 0, end2, curr = 0, next = 0; - var result = ""; - while (match = breakRe.exec(line2)) { - next = match.index; - if (next - start > width2) { - end2 = curr > start ? curr : next; - result += "\n" + line2.slice(start, end2); - start = end2 + 1; - } - curr = next; - } - result += "\n"; - if (line2.length - start > width2 && curr > start) { - result += line2.slice(start, curr) + "\n" + line2.slice(curr + 1); - } else { - result += line2.slice(start); - } - return result.slice(1); -} -function escapeString(string) { - var result = ""; - var char = 0; - var escapeSeq; - for (var i4 = 0; i4 < string.length; char >= 65536 ? i4 += 2 : i4++) { - char = codePointAt(string, i4); - escapeSeq = ESCAPE_SEQUENCES[char]; - if (!escapeSeq && isPrintable(char)) { - result += string[i4]; - if (char >= 65536) - result += string[i4 + 1]; - } else { - result += escapeSeq || encodeHex(char); - } - } - return result; -} -function writeFlowSequence(state2, level, object) { - var _result = "", _tag = state2.tag, index2, length5, value2; - for (index2 = 0, length5 = object.length; index2 < length5; index2 += 1) { - value2 = object[index2]; - if (state2.replacer) { - value2 = state2.replacer.call(object, String(index2), value2); - } - if (writeNode(state2, level, value2, false, false) || typeof value2 === "undefined" && writeNode(state2, level, null, false, false)) { - if (_result !== "") - _result += "," + (!state2.condenseFlow ? " " : ""); - _result += state2.dump; - } - } - state2.tag = _tag; - state2.dump = "[" + _result + "]"; -} -function writeBlockSequence(state2, level, object, compact) { - var _result = "", _tag = state2.tag, index2, length5, value2; - for (index2 = 0, length5 = object.length; index2 < length5; index2 += 1) { - value2 = object[index2]; - if (state2.replacer) { - value2 = state2.replacer.call(object, String(index2), value2); - } - if (writeNode(state2, level + 1, value2, true, true, false, true) || typeof value2 === "undefined" && writeNode(state2, level + 1, null, true, true, false, true)) { - if (!compact || _result !== "") { - _result += generateNextLine(state2, level); - } - if (state2.dump && CHAR_LINE_FEED === state2.dump.charCodeAt(0)) { - _result += "-"; - } else { - _result += "- "; - } - _result += state2.dump; - } - } - state2.tag = _tag; - state2.dump = _result || "[]"; -} -function writeFlowMapping(state2, level, object) { - var _result = "", _tag = state2.tag, objectKeyList = Object.keys(object), index2, length5, objectKey, objectValue, pairBuffer; - for (index2 = 0, length5 = objectKeyList.length; index2 < length5; index2 += 1) { - pairBuffer = ""; - if (_result !== "") - pairBuffer += ", "; - if (state2.condenseFlow) - pairBuffer += '"'; - objectKey = objectKeyList[index2]; - objectValue = object[objectKey]; - if (state2.replacer) { - objectValue = state2.replacer.call(object, objectKey, objectValue); - } - if (!writeNode(state2, level, objectKey, false, false)) { - continue; - } - if (state2.dump.length > 1024) - pairBuffer += "? "; - pairBuffer += state2.dump + (state2.condenseFlow ? '"' : "") + ":" + (state2.condenseFlow ? "" : " "); - if (!writeNode(state2, level, objectValue, false, false)) { - continue; - } - pairBuffer += state2.dump; - _result += pairBuffer; - } - state2.tag = _tag; - state2.dump = "{" + _result + "}"; -} -function writeBlockMapping(state2, level, object, compact) { - var _result = "", _tag = state2.tag, objectKeyList = Object.keys(object), index2, length5, objectKey, objectValue, explicitPair, pairBuffer; - if (state2.sortKeys === true) { - objectKeyList.sort(); - } else if (typeof state2.sortKeys === "function") { - objectKeyList.sort(state2.sortKeys); - } else if (state2.sortKeys) { - throw new exception("sortKeys must be a boolean or a function"); - } - for (index2 = 0, length5 = objectKeyList.length; index2 < length5; index2 += 1) { - pairBuffer = ""; - if (!compact || _result !== "") { - pairBuffer += generateNextLine(state2, level); - } - objectKey = objectKeyList[index2]; - objectValue = object[objectKey]; - if (state2.replacer) { - objectValue = state2.replacer.call(object, objectKey, objectValue); - } - if (!writeNode(state2, level + 1, objectKey, true, true, true)) { - continue; - } - explicitPair = state2.tag !== null && state2.tag !== "?" || state2.dump && state2.dump.length > 1024; - if (explicitPair) { - if (state2.dump && CHAR_LINE_FEED === state2.dump.charCodeAt(0)) { - pairBuffer += "?"; - } else { - pairBuffer += "? "; - } - } - pairBuffer += state2.dump; - if (explicitPair) { - pairBuffer += generateNextLine(state2, level); - } - if (!writeNode(state2, level + 1, objectValue, true, explicitPair)) { - continue; - } - if (state2.dump && CHAR_LINE_FEED === state2.dump.charCodeAt(0)) { - pairBuffer += ":"; - } else { - pairBuffer += ": "; - } - pairBuffer += state2.dump; - _result += pairBuffer; - } - state2.tag = _tag; - state2.dump = _result || "{}"; -} -function detectType(state2, object, explicit) { - var _result, typeList, index2, length5, type2, style; - typeList = explicit ? state2.explicitTypes : state2.implicitTypes; - for (index2 = 0, length5 = typeList.length; index2 < length5; index2 += 1) { - type2 = typeList[index2]; - if ((type2.instanceOf || type2.predicate) && (!type2.instanceOf || typeof object === "object" && object instanceof type2.instanceOf) && (!type2.predicate || type2.predicate(object))) { - if (explicit) { - if (type2.multi && type2.representName) { - state2.tag = type2.representName(object); - } else { - state2.tag = type2.tag; - } - } else { - state2.tag = "?"; - } - if (type2.represent) { - style = state2.styleMap[type2.tag] || type2.defaultStyle; - if (_toString.call(type2.represent) === "[object Function]") { - _result = type2.represent(object, style); - } else if (_hasOwnProperty.call(type2.represent, style)) { - _result = type2.represent[style](object, style); - } else { - throw new exception("!<" + type2.tag + '> tag resolver accepts not "' + style + '" style'); - } - state2.dump = _result; - } - return true; - } - } - return false; -} -function writeNode(state2, level, object, block, compact, iskey, isblockseq) { - state2.tag = null; - state2.dump = object; - if (!detectType(state2, object, false)) { - detectType(state2, object, true); - } - var type2 = _toString.call(state2.dump); - var inblock = block; - var tagStr; - if (block) { - block = state2.flowLevel < 0 || state2.flowLevel > level; - } - var objectOrArray = type2 === "[object Object]" || type2 === "[object Array]", duplicateIndex, duplicate; - if (objectOrArray) { - duplicateIndex = state2.duplicates.indexOf(object); - duplicate = duplicateIndex !== -1; - } - if (state2.tag !== null && state2.tag !== "?" || duplicate || state2.indent !== 2 && level > 0) { - compact = false; - } - if (duplicate && state2.usedDuplicates[duplicateIndex]) { - state2.dump = "*ref_" + duplicateIndex; - } else { - if (objectOrArray && duplicate && !state2.usedDuplicates[duplicateIndex]) { - state2.usedDuplicates[duplicateIndex] = true; - } - if (type2 === "[object Object]") { - if (block && Object.keys(state2.dump).length !== 0) { - writeBlockMapping(state2, level, state2.dump, compact); - if (duplicate) { - state2.dump = "&ref_" + duplicateIndex + state2.dump; - } - } else { - writeFlowMapping(state2, level, state2.dump); - if (duplicate) { - state2.dump = "&ref_" + duplicateIndex + " " + state2.dump; - } - } - } else if (type2 === "[object Array]") { - if (block && state2.dump.length !== 0) { - if (state2.noArrayIndent && !isblockseq && level > 0) { - writeBlockSequence(state2, level - 1, state2.dump, compact); - } else { - writeBlockSequence(state2, level, state2.dump, compact); - } - if (duplicate) { - state2.dump = "&ref_" + duplicateIndex + state2.dump; - } - } else { - writeFlowSequence(state2, level, state2.dump); - if (duplicate) { - state2.dump = "&ref_" + duplicateIndex + " " + state2.dump; - } - } - } else if (type2 === "[object String]") { - if (state2.tag !== "?") { - writeScalar(state2, state2.dump, level, iskey, inblock); - } - } else if (type2 === "[object Undefined]") { - return false; - } else { - if (state2.skipInvalid) - return false; - throw new exception("unacceptable kind of an object to dump " + type2); - } - if (state2.tag !== null && state2.tag !== "?") { - tagStr = encodeURI(state2.tag[0] === "!" ? state2.tag.slice(1) : state2.tag).replace(/!/g, "%21"); - if (state2.tag[0] === "!") { - tagStr = "!" + tagStr; - } else if (tagStr.slice(0, 18) === "tag:yaml.org,2002:") { - tagStr = "!!" + tagStr.slice(18); - } else { - tagStr = "!<" + tagStr + ">"; - } - state2.dump = tagStr + " " + state2.dump; - } - } - return true; -} -function getDuplicateReferences(object, state2) { - var objects = [], duplicatesIndexes = [], index2, length5; - inspectNode(object, objects, duplicatesIndexes); - for (index2 = 0, length5 = duplicatesIndexes.length; index2 < length5; index2 += 1) { - state2.duplicates.push(objects[duplicatesIndexes[index2]]); - } - state2.usedDuplicates = new Array(length5); -} -function inspectNode(object, objects, duplicatesIndexes) { - var objectKeyList, index2, length5; - if (object !== null && typeof object === "object") { - index2 = objects.indexOf(object); - if (index2 !== -1) { - if (duplicatesIndexes.indexOf(index2) === -1) { - duplicatesIndexes.push(index2); - } - } else { - objects.push(object); - if (Array.isArray(object)) { - for (index2 = 0, length5 = object.length; index2 < length5; index2 += 1) { - inspectNode(object[index2], objects, duplicatesIndexes); - } - } else { - objectKeyList = Object.keys(object); - for (index2 = 0, length5 = objectKeyList.length; index2 < length5; index2 += 1) { - inspectNode(object[objectKeyList[index2]], objects, duplicatesIndexes); - } - } - } - } -} -function dump$1(input, options) { - options = options || {}; - var state2 = new State(options); - if (!state2.noRefs) - getDuplicateReferences(input, state2); - var value2 = input; - if (state2.replacer) { - value2 = state2.replacer.call({ "": value2 }, "", value2); - } - if (writeNode(state2, 0, value2, true, true)) - return state2.dump + "\n"; - return ""; -} -var dump_1 = dump$1; -var dumper = { - dump: dump_1 -}; -function renamed(from, to) { - return function() { - throw new Error("Function yaml." + from + " is removed in js-yaml 4. Use yaml." + to + " instead, which is now safe by default."); - }; -} -var Type = type; -var Schema = schema; -var FAILSAFE_SCHEMA = failsafe; -var JSON_SCHEMA = json; -var CORE_SCHEMA = core; -var DEFAULT_SCHEMA = _default; -var load = loader.load; -var loadAll = loader.loadAll; -var dump = dumper.dump; -var YAMLException = exception; -var types = { - binary, - float, - map, - null: _null, - pairs, - set, - timestamp, - bool, - int, - merge, - omap, - seq, - str -}; -var safeLoad = renamed("safeLoad", "load"); -var safeLoadAll = renamed("safeLoadAll", "loadAll"); -var safeDump = renamed("safeDump", "dump"); -var jsYaml = { - Type, - Schema, - FAILSAFE_SCHEMA, - JSON_SCHEMA, - CORE_SCHEMA, - DEFAULT_SCHEMA, - load, - loadAll, - dump, - YAMLException, - types, - safeLoad, - safeLoadAll, - safeDump -}; -var js_yaml_default = jsYaml; - -// node_modules/preact/dist/preact.module.js -var n2; -var l2; -var u; -var i2; -var t2; -var r2; -var o; -var f; -var e2 = {}; -var c2 = []; -var s2 = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i; -function a(n3, l4) { - for (var u3 in l4) - n3[u3] = l4[u3]; - return n3; -} -function h(n3) { - var l4 = n3.parentNode; - l4 && l4.removeChild(n3); -} -function v(l4, u3, i4) { - var t4, r4, o3, f3 = {}; - for (o3 in u3) - o3 == "key" ? t4 = u3[o3] : o3 == "ref" ? r4 = u3[o3] : f3[o3] = u3[o3]; - if (arguments.length > 2 && (f3.children = arguments.length > 3 ? n2.call(arguments, 2) : i4), typeof l4 == "function" && l4.defaultProps != null) - for (o3 in l4.defaultProps) - f3[o3] === void 0 && (f3[o3] = l4.defaultProps[o3]); - return y(l4, f3, t4, r4, null); -} -function y(n3, i4, t4, r4, o3) { - var f3 = { type: n3, props: i4, key: t4, ref: r4, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, __h: null, constructor: void 0, __v: o3 == null ? ++u : o3 }; - return o3 == null && l2.vnode != null && l2.vnode(f3), f3; -} -function p2() { - return { current: null }; -} -function d(n3) { - return n3.children; -} -function _(n3, l4) { - this.props = n3, this.context = l4; -} -function k(n3, l4) { - if (l4 == null) - return n3.__ ? k(n3.__, n3.__.__k.indexOf(n3) + 1) : null; - for (var u3; l4 < n3.__k.length; l4++) - if ((u3 = n3.__k[l4]) != null && u3.__e != null) - return u3.__e; - return typeof n3.type == "function" ? k(n3) : null; -} -function b(n3) { - var l4, u3; - if ((n3 = n3.__) != null && n3.__c != null) { - for (n3.__e = n3.__c.base = null, l4 = 0; l4 < n3.__k.length; l4++) - if ((u3 = n3.__k[l4]) != null && u3.__e != null) { - n3.__e = n3.__c.base = u3.__e; - break; - } - return b(n3); - } -} -function m(n3) { - (!n3.__d && (n3.__d = true) && t2.push(n3) && !g.__r++ || o !== l2.debounceRendering) && ((o = l2.debounceRendering) || r2)(g); -} -function g() { - for (var n3; g.__r = t2.length; ) - n3 = t2.sort(function(n4, l4) { - return n4.__v.__b - l4.__v.__b; - }), t2 = [], n3.some(function(n4) { - var l4, u3, i4, t4, r4, o3; - n4.__d && (r4 = (t4 = (l4 = n4).__v).__e, (o3 = l4.__P) && (u3 = [], (i4 = a({}, t4)).__v = t4.__v + 1, j(o3, t4, i4, l4.__n, o3.ownerSVGElement !== void 0, t4.__h != null ? [r4] : null, u3, r4 == null ? k(t4) : r4, t4.__h), z(u3, t4), t4.__e != r4 && b(t4))); - }); -} -function w(n3, l4, u3, i4, t4, r4, o3, f3, s4, a4) { - var h3, v3, p4, _8, b10, m4, g4, w4 = i4 && i4.__k || c2, A4 = w4.length; - for (u3.__k = [], h3 = 0; h3 < l4.length; h3++) - if ((_8 = u3.__k[h3] = (_8 = l4[h3]) == null || typeof _8 == "boolean" ? null : typeof _8 == "string" || typeof _8 == "number" || typeof _8 == "bigint" ? y(null, _8, null, null, _8) : Array.isArray(_8) ? y(d, { children: _8 }, null, null, null) : _8.__b > 0 ? y(_8.type, _8.props, _8.key, null, _8.__v) : _8) != null) { - if (_8.__ = u3, _8.__b = u3.__b + 1, (p4 = w4[h3]) === null || p4 && _8.key == p4.key && _8.type === p4.type) - w4[h3] = void 0; - else - for (v3 = 0; v3 < A4; v3++) { - if ((p4 = w4[v3]) && _8.key == p4.key && _8.type === p4.type) { - w4[v3] = void 0; - break; - } - p4 = null; - } - j(n3, _8, p4 = p4 || e2, t4, r4, o3, f3, s4, a4), b10 = _8.__e, (v3 = _8.ref) && p4.ref != v3 && (g4 || (g4 = []), p4.ref && g4.push(p4.ref, null, _8), g4.push(v3, _8.__c || b10, _8)), b10 != null ? (m4 == null && (m4 = b10), typeof _8.type == "function" && _8.__k === p4.__k ? _8.__d = s4 = x(_8, s4, n3) : s4 = P(n3, _8, p4, w4, b10, s4), typeof u3.type == "function" && (u3.__d = s4)) : s4 && p4.__e == s4 && s4.parentNode != n3 && (s4 = k(p4)); - } - for (u3.__e = m4, h3 = A4; h3--; ) - w4[h3] != null && (typeof u3.type == "function" && w4[h3].__e != null && w4[h3].__e == u3.__d && (u3.__d = k(i4, h3 + 1)), N(w4[h3], w4[h3])); - if (g4) - for (h3 = 0; h3 < g4.length; h3++) - M(g4[h3], g4[++h3], g4[++h3]); -} -function x(n3, l4, u3) { - for (var i4, t4 = n3.__k, r4 = 0; t4 && r4 < t4.length; r4++) - (i4 = t4[r4]) && (i4.__ = n3, l4 = typeof i4.type == "function" ? x(i4, l4, u3) : P(u3, i4, i4, t4, i4.__e, l4)); - return l4; -} -function A(n3, l4) { - return l4 = l4 || [], n3 == null || typeof n3 == "boolean" || (Array.isArray(n3) ? n3.some(function(n4) { - A(n4, l4); - }) : l4.push(n3)), l4; -} -function P(n3, l4, u3, i4, t4, r4) { - var o3, f3, e4; - if (l4.__d !== void 0) - o3 = l4.__d, l4.__d = void 0; - else if (u3 == null || t4 != r4 || t4.parentNode == null) - n: - if (r4 == null || r4.parentNode !== n3) - n3.appendChild(t4), o3 = null; - else { - for (f3 = r4, e4 = 0; (f3 = f3.nextSibling) && e4 < i4.length; e4 += 2) - if (f3 == t4) - break n; - n3.insertBefore(t4, r4), o3 = r4; - } - return o3 !== void 0 ? o3 : t4.nextSibling; -} -function C(n3, l4, u3, i4, t4) { - var r4; - for (r4 in u3) - r4 === "children" || r4 === "key" || r4 in l4 || H(n3, r4, null, u3[r4], i4); - for (r4 in l4) - t4 && typeof l4[r4] != "function" || r4 === "children" || r4 === "key" || r4 === "value" || r4 === "checked" || u3[r4] === l4[r4] || H(n3, r4, l4[r4], u3[r4], i4); -} -function $(n3, l4, u3) { - l4[0] === "-" ? n3.setProperty(l4, u3) : n3[l4] = u3 == null ? "" : typeof u3 != "number" || s2.test(l4) ? u3 : u3 + "px"; -} -function H(n3, l4, u3, i4, t4) { - var r4; - n: - if (l4 === "style") - if (typeof u3 == "string") - n3.style.cssText = u3; - else { - if (typeof i4 == "string" && (n3.style.cssText = i4 = ""), i4) - for (l4 in i4) - u3 && l4 in u3 || $(n3.style, l4, ""); - if (u3) - for (l4 in u3) - i4 && u3[l4] === i4[l4] || $(n3.style, l4, u3[l4]); - } - else if (l4[0] === "o" && l4[1] === "n") - r4 = l4 !== (l4 = l4.replace(/Capture$/, "")), l4 = l4.toLowerCase() in n3 ? l4.toLowerCase().slice(2) : l4.slice(2), n3.l || (n3.l = {}), n3.l[l4 + r4] = u3, u3 ? i4 || n3.addEventListener(l4, r4 ? T : I, r4) : n3.removeEventListener(l4, r4 ? T : I, r4); - else if (l4 !== "dangerouslySetInnerHTML") { - if (t4) - l4 = l4.replace(/xlink[H:h]/, "h").replace(/sName$/, "s"); - else if (l4 !== "href" && l4 !== "list" && l4 !== "form" && l4 !== "tabIndex" && l4 !== "download" && l4 in n3) - try { - n3[l4] = u3 == null ? "" : u3; - break n; - } catch (n4) { - } - typeof u3 == "function" || (u3 != null && (u3 !== false || l4[0] === "a" && l4[1] === "r") ? n3.setAttribute(l4, u3) : n3.removeAttribute(l4)); - } -} -function I(n3) { - this.l[n3.type + false](l2.event ? l2.event(n3) : n3); -} -function T(n3) { - this.l[n3.type + true](l2.event ? l2.event(n3) : n3); -} -function j(n3, u3, i4, t4, r4, o3, f3, e4, c5) { - var s4, h3, v3, y5, p4, k4, b10, m4, g4, x6, A4, P4 = u3.type; - if (u3.constructor !== void 0) - return null; - i4.__h != null && (c5 = i4.__h, e4 = u3.__e = i4.__e, u3.__h = null, o3 = [e4]), (s4 = l2.__b) && s4(u3); - try { - n: - if (typeof P4 == "function") { - if (m4 = u3.props, g4 = (s4 = P4.contextType) && t4[s4.__c], x6 = s4 ? g4 ? g4.props.value : s4.__ : t4, i4.__c ? b10 = (h3 = u3.__c = i4.__c).__ = h3.__E : ("prototype" in P4 && P4.prototype.render ? u3.__c = h3 = new P4(m4, x6) : (u3.__c = h3 = new _(m4, x6), h3.constructor = P4, h3.render = O), g4 && g4.sub(h3), h3.props = m4, h3.state || (h3.state = {}), h3.context = x6, h3.__n = t4, v3 = h3.__d = true, h3.__h = []), h3.__s == null && (h3.__s = h3.state), P4.getDerivedStateFromProps != null && (h3.__s == h3.state && (h3.__s = a({}, h3.__s)), a(h3.__s, P4.getDerivedStateFromProps(m4, h3.__s))), y5 = h3.props, p4 = h3.state, v3) - P4.getDerivedStateFromProps == null && h3.componentWillMount != null && h3.componentWillMount(), h3.componentDidMount != null && h3.__h.push(h3.componentDidMount); - else { - if (P4.getDerivedStateFromProps == null && m4 !== y5 && h3.componentWillReceiveProps != null && h3.componentWillReceiveProps(m4, x6), !h3.__e && h3.shouldComponentUpdate != null && h3.shouldComponentUpdate(m4, h3.__s, x6) === false || u3.__v === i4.__v) { - h3.props = m4, h3.state = h3.__s, u3.__v !== i4.__v && (h3.__d = false), h3.__v = u3, u3.__e = i4.__e, u3.__k = i4.__k, u3.__k.forEach(function(n4) { - n4 && (n4.__ = u3); - }), h3.__h.length && f3.push(h3); - break n; - } - h3.componentWillUpdate != null && h3.componentWillUpdate(m4, h3.__s, x6), h3.componentDidUpdate != null && h3.__h.push(function() { - h3.componentDidUpdate(y5, p4, k4); - }); - } - h3.context = x6, h3.props = m4, h3.state = h3.__s, (s4 = l2.__r) && s4(u3), h3.__d = false, h3.__v = u3, h3.__P = n3, s4 = h3.render(h3.props, h3.state, h3.context), h3.state = h3.__s, h3.getChildContext != null && (t4 = a(a({}, t4), h3.getChildContext())), v3 || h3.getSnapshotBeforeUpdate == null || (k4 = h3.getSnapshotBeforeUpdate(y5, p4)), A4 = s4 != null && s4.type === d && s4.key == null ? s4.props.children : s4, w(n3, Array.isArray(A4) ? A4 : [A4], u3, i4, t4, r4, o3, f3, e4, c5), h3.base = u3.__e, u3.__h = null, h3.__h.length && f3.push(h3), b10 && (h3.__E = h3.__ = null), h3.__e = false; - } else - o3 == null && u3.__v === i4.__v ? (u3.__k = i4.__k, u3.__e = i4.__e) : u3.__e = L(i4.__e, u3, i4, t4, r4, o3, f3, c5); - (s4 = l2.diffed) && s4(u3); - } catch (n4) { - u3.__v = null, (c5 || o3 != null) && (u3.__e = e4, u3.__h = !!c5, o3[o3.indexOf(e4)] = null), l2.__e(n4, u3, i4); - } -} -function z(n3, u3) { - l2.__c && l2.__c(u3, n3), n3.some(function(u4) { - try { - n3 = u4.__h, u4.__h = [], n3.some(function(n4) { - n4.call(u4); - }); - } catch (n4) { - l2.__e(n4, u4.__v); - } - }); -} -function L(l4, u3, i4, t4, r4, o3, f3, c5) { - var s4, a4, v3, y5 = i4.props, p4 = u3.props, d3 = u3.type, _8 = 0; - if (d3 === "svg" && (r4 = true), o3 != null) { - for (; _8 < o3.length; _8++) - if ((s4 = o3[_8]) && "setAttribute" in s4 == !!d3 && (d3 ? s4.localName === d3 : s4.nodeType === 3)) { - l4 = s4, o3[_8] = null; - break; - } - } - if (l4 == null) { - if (d3 === null) - return document.createTextNode(p4); - l4 = r4 ? document.createElementNS("http://www.w3.org/2000/svg", d3) : document.createElement(d3, p4.is && p4), o3 = null, c5 = false; - } - if (d3 === null) - y5 === p4 || c5 && l4.data === p4 || (l4.data = p4); - else { - if (o3 = o3 && n2.call(l4.childNodes), a4 = (y5 = i4.props || e2).dangerouslySetInnerHTML, v3 = p4.dangerouslySetInnerHTML, !c5) { - if (o3 != null) - for (y5 = {}, _8 = 0; _8 < l4.attributes.length; _8++) - y5[l4.attributes[_8].name] = l4.attributes[_8].value; - (v3 || a4) && (v3 && (a4 && v3.__html == a4.__html || v3.__html === l4.innerHTML) || (l4.innerHTML = v3 && v3.__html || "")); - } - if (C(l4, p4, y5, r4, c5), v3) - u3.__k = []; - else if (_8 = u3.props.children, w(l4, Array.isArray(_8) ? _8 : [_8], u3, i4, t4, r4 && d3 !== "foreignObject", o3, f3, o3 ? o3[0] : i4.__k && k(i4, 0), c5), o3 != null) - for (_8 = o3.length; _8--; ) - o3[_8] != null && h(o3[_8]); - c5 || ("value" in p4 && (_8 = p4.value) !== void 0 && (_8 !== y5.value || _8 !== l4.value || d3 === "progress" && !_8) && H(l4, "value", _8, y5.value, false), "checked" in p4 && (_8 = p4.checked) !== void 0 && _8 !== l4.checked && H(l4, "checked", _8, y5.checked, false)); - } - return l4; -} -function M(n3, u3, i4) { - try { - typeof n3 == "function" ? n3(u3) : n3.current = u3; - } catch (n4) { - l2.__e(n4, i4); - } -} -function N(n3, u3, i4) { - var t4, r4; - if (l2.unmount && l2.unmount(n3), (t4 = n3.ref) && (t4.current && t4.current !== n3.__e || M(t4, null, u3)), (t4 = n3.__c) != null) { - if (t4.componentWillUnmount) - try { - t4.componentWillUnmount(); - } catch (n4) { - l2.__e(n4, u3); - } - t4.base = t4.__P = null; - } - if (t4 = n3.__k) - for (r4 = 0; r4 < t4.length; r4++) - t4[r4] && N(t4[r4], u3, typeof n3.type != "function"); - i4 || n3.__e == null || h(n3.__e), n3.__e = n3.__d = void 0; -} -function O(n3, l4, u3) { - return this.constructor(n3, u3); -} -function S(u3, i4, t4) { - var r4, o3, f3; - l2.__ && l2.__(u3, i4), o3 = (r4 = typeof t4 == "function") ? null : t4 && t4.__k || i4.__k, f3 = [], j(i4, u3 = (!r4 && t4 || i4).__k = v(d, null, [u3]), o3 || e2, e2, i4.ownerSVGElement !== void 0, !r4 && t4 ? [t4] : o3 ? null : i4.firstChild ? n2.call(i4.childNodes) : null, f3, !r4 && t4 ? t4 : o3 ? o3.__e : i4.firstChild, r4), z(f3, u3); -} -function q(n3, l4) { - S(n3, l4, q); -} -function B(l4, u3, i4) { - var t4, r4, o3, f3 = a({}, l4.props); - for (o3 in u3) - o3 == "key" ? t4 = u3[o3] : o3 == "ref" ? r4 = u3[o3] : f3[o3] = u3[o3]; - return arguments.length > 2 && (f3.children = arguments.length > 3 ? n2.call(arguments, 2) : i4), y(l4.type, f3, t4 || l4.key, r4 || l4.ref, null); -} -function D(n3, l4) { - var u3 = { __c: l4 = "__cC" + f++, __: n3, Consumer: function(n4, l5) { - return n4.children(l5); - }, Provider: function(n4) { - var u4, i4; - return this.getChildContext || (u4 = [], (i4 = {})[l4] = this, this.getChildContext = function() { - return i4; - }, this.shouldComponentUpdate = function(n5) { - this.props.value !== n5.value && u4.some(m); - }, this.sub = function(n5) { - u4.push(n5); - var l5 = n5.componentWillUnmount; - n5.componentWillUnmount = function() { - u4.splice(u4.indexOf(n5), 1), l5 && l5.call(n5); - }; - }), n4.children; - } }; - return u3.Provider.__ = u3.Consumer.contextType = u3; -} -n2 = c2.slice, l2 = { __e: function(n3, l4) { - for (var u3, i4, t4; l4 = l4.__; ) - if ((u3 = l4.__c) && !u3.__) - try { - if ((i4 = u3.constructor) && i4.getDerivedStateFromError != null && (u3.setState(i4.getDerivedStateFromError(n3)), t4 = u3.__d), u3.componentDidCatch != null && (u3.componentDidCatch(n3), t4 = u3.__d), t4) - return u3.__E = u3; - } catch (l5) { - n3 = l5; - } - throw n3; -} }, u = 0, i2 = function(n3) { - return n3 != null && n3.constructor === void 0; -}, _.prototype.setState = function(n3, l4) { - var u3; - u3 = this.__s != null && this.__s !== this.state ? this.__s : this.__s = a({}, this.state), typeof n3 == "function" && (n3 = n3(a({}, u3), this.props)), n3 && a(u3, n3), n3 != null && this.__v && (l4 && this.__h.push(l4), m(this)); -}, _.prototype.forceUpdate = function(n3) { - this.__v && (this.__e = true, n3 && this.__h.push(n3), m(this)); -}, _.prototype.render = d, t2 = [], r2 = typeof Promise == "function" ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, g.__r = 0, f = 0; - -// node_modules/preact/hooks/dist/hooks.module.js -var t3; -var u2; -var r3; -var o2 = 0; -var i3 = []; -var c3 = l2.__b; -var f2 = l2.__r; -var e3 = l2.diffed; -var a2 = l2.__c; -var v2 = l2.unmount; -function m2(t4, r4) { - l2.__h && l2.__h(u2, t4, o2 || r4), o2 = 0; - var i4 = u2.__H || (u2.__H = { __: [], __h: [] }); - return t4 >= i4.__.length && i4.__.push({}), i4.__[t4]; -} -function l3(n3) { - return o2 = 1, p3(w2, n3); -} -function p3(n3, r4, o3) { - var i4 = m2(t3++, 2); - return i4.t = n3, i4.__c || (i4.__ = [o3 ? o3(r4) : w2(void 0, r4), function(n4) { - var t4 = i4.t(i4.__[0], n4); - i4.__[0] !== t4 && (i4.__ = [t4, i4.__[1]], i4.__c.setState({})); - }], i4.__c = u2), i4.__; -} -function y2(r4, o3) { - var i4 = m2(t3++, 3); - !l2.__s && k2(i4.__H, o3) && (i4.__ = r4, i4.__H = o3, u2.__H.__h.push(i4)); -} -function h2(r4, o3) { - var i4 = m2(t3++, 4); - !l2.__s && k2(i4.__H, o3) && (i4.__ = r4, i4.__H = o3, u2.__h.push(i4)); -} -function s3(n3) { - return o2 = 5, d2(function() { - return { current: n3 }; - }, []); -} -function _2(n3, t4, u3) { - o2 = 6, h2(function() { - typeof n3 == "function" ? n3(t4()) : n3 && (n3.current = t4()); - }, u3 == null ? u3 : u3.concat(n3)); -} -function d2(n3, u3) { - var r4 = m2(t3++, 7); - return k2(r4.__H, u3) && (r4.__ = n3(), r4.__H = u3, r4.__h = n3), r4.__; -} -function A2(n3, t4) { - return o2 = 8, d2(function() { - return n3; - }, t4); -} -function F(n3) { - var r4 = u2.context[n3.__c], o3 = m2(t3++, 9); - return o3.c = n3, r4 ? (o3.__ == null && (o3.__ = true, r4.sub(u2)), r4.props.value) : n3.__; -} -function T2(t4, u3) { - l2.useDebugValue && l2.useDebugValue(u3 ? u3(t4) : t4); -} -function x2() { - var t4; - for (i3.sort(function(n3, t5) { - return n3.__v.__b - t5.__v.__b; - }); t4 = i3.pop(); ) - if (t4.__P) - try { - t4.__H.__h.forEach(g2), t4.__H.__h.forEach(j2), t4.__H.__h = []; - } catch (u3) { - t4.__H.__h = [], l2.__e(u3, t4.__v); - } -} -l2.__b = function(n3) { - u2 = null, c3 && c3(n3); -}, l2.__r = function(n3) { - f2 && f2(n3), t3 = 0; - var r4 = (u2 = n3.__c).__H; - r4 && (r4.__h.forEach(g2), r4.__h.forEach(j2), r4.__h = []); -}, l2.diffed = function(t4) { - e3 && e3(t4); - var o3 = t4.__c; - o3 && o3.__H && o3.__H.__h.length && (i3.push(o3) !== 1 && r3 === l2.requestAnimationFrame || ((r3 = l2.requestAnimationFrame) || function(n3) { - var t5, u3 = function() { - clearTimeout(r4), b2 && cancelAnimationFrame(t5), setTimeout(n3); - }, r4 = setTimeout(u3, 100); - b2 && (t5 = requestAnimationFrame(u3)); - })(x2)), u2 = null; -}, l2.__c = function(t4, u3) { - u3.some(function(t5) { - try { - t5.__h.forEach(g2), t5.__h = t5.__h.filter(function(n3) { - return !n3.__ || j2(n3); - }); - } catch (r4) { - u3.some(function(n3) { - n3.__h && (n3.__h = []); - }), u3 = [], l2.__e(r4, t5.__v); - } - }), a2 && a2(t4, u3); -}, l2.unmount = function(t4) { - v2 && v2(t4); - var u3, r4 = t4.__c; - r4 && r4.__H && (r4.__H.__.forEach(function(n3) { - try { - g2(n3); - } catch (n4) { - u3 = n4; - } - }), u3 && l2.__e(u3, r4.__v)); -}; -var b2 = typeof requestAnimationFrame == "function"; -function g2(n3) { - var t4 = u2, r4 = n3.__c; - typeof r4 == "function" && (n3.__c = void 0, r4()), u2 = t4; -} -function j2(n3) { - var t4 = u2; - n3.__c = n3.__(), u2 = t4; -} -function k2(n3, t4) { - return !n3 || n3.length !== t4.length || t4.some(function(t5, u3) { - return t5 !== n3[u3]; - }); -} -function w2(n3, t4) { - return typeof t4 == "function" ? t4(n3) : t4; -} - -// node_modules/preact/compat/dist/compat.module.js -function S2(n3, t4) { - for (var e4 in t4) - n3[e4] = t4[e4]; - return n3; -} -function C2(n3, t4) { - for (var e4 in n3) - if (e4 !== "__source" && !(e4 in t4)) - return true; - for (var r4 in t4) - if (r4 !== "__source" && n3[r4] !== t4[r4]) - return true; - return false; -} -function E(n3) { - this.props = n3; -} -function g3(n3, t4) { - function e4(n4) { - var e6 = this.props.ref, r5 = e6 == n4.ref; - return !r5 && e6 && (e6.call ? e6(null) : e6.current = null), t4 ? !t4(this.props, n4) || !r5 : C2(this.props, n4); - } - function r4(t5) { - return this.shouldComponentUpdate = e4, v(n3, t5); - } - return r4.displayName = "Memo(" + (n3.displayName || n3.name) + ")", r4.prototype.isReactComponent = true, r4.__f = true, r4; -} -(E.prototype = new _()).isPureReactComponent = true, E.prototype.shouldComponentUpdate = function(n3, t4) { - return C2(this.props, n3) || C2(this.state, t4); -}; -var w3 = l2.__b; -l2.__b = function(n3) { - n3.type && n3.type.__f && n3.ref && (n3.props.ref = n3.ref, n3.ref = null), w3 && w3(n3); -}; -var R = typeof Symbol != "undefined" && Symbol.for && Symbol.for("react.forward_ref") || 3911; -function x3(n3) { - function t4(t5, e4) { - var r4 = S2({}, t5); - return delete r4.ref, n3(r4, (e4 = t5.ref || e4) && (typeof e4 != "object" || "current" in e4) ? e4 : null); - } - return t4.$$typeof = R, t4.render = t4, t4.prototype.isReactComponent = t4.__f = true, t4.displayName = "ForwardRef(" + (n3.displayName || n3.name) + ")", t4; -} -var N2 = function(n3, t4) { - return n3 == null ? null : A(A(n3).map(t4)); -}; -var k3 = { map: N2, forEach: N2, count: function(n3) { - return n3 ? A(n3).length : 0; -}, only: function(n3) { - var t4 = A(n3); - if (t4.length !== 1) - throw "Children.only"; - return t4[0]; -}, toArray: A }; -var A3 = l2.__e; -l2.__e = function(n3, t4, e4) { - if (n3.then) { - for (var r4, u3 = t4; u3 = u3.__; ) - if ((r4 = u3.__c) && r4.__c) - return t4.__e == null && (t4.__e = e4.__e, t4.__k = e4.__k), r4.__c(n3, t4); - } - A3(n3, t4, e4); -}; -var O2 = l2.unmount; -function L2() { - this.__u = 0, this.t = null, this.__b = null; -} -function U(n3) { - var t4 = n3.__.__c; - return t4 && t4.__e && t4.__e(n3); -} -function F2(n3) { - var t4, e4, r4; - function u3(u4) { - if (t4 || (t4 = n3()).then(function(n4) { - e4 = n4.default || n4; - }, function(n4) { - r4 = n4; - }), r4) - throw r4; - if (!e4) - throw t4; - return v(e4, u4); - } - return u3.displayName = "Lazy", u3.__f = true, u3; -} -function M2() { - this.u = null, this.o = null; -} -l2.unmount = function(n3) { - var t4 = n3.__c; - t4 && t4.__R && t4.__R(), t4 && n3.__h === true && (n3.type = null), O2 && O2(n3); -}, (L2.prototype = new _()).__c = function(n3, t4) { - var e4 = t4.__c, r4 = this; - r4.t == null && (r4.t = []), r4.t.push(e4); - var u3 = U(r4.__v), o3 = false, i4 = function() { - o3 || (o3 = true, e4.__R = null, u3 ? u3(l4) : l4()); - }; - e4.__R = i4; - var l4 = function() { - if (!--r4.__u) { - if (r4.state.__e) { - var n4 = r4.state.__e; - r4.__v.__k[0] = function n5(t6, e6, r5) { - return t6 && (t6.__v = null, t6.__k = t6.__k && t6.__k.map(function(t7) { - return n5(t7, e6, r5); - }), t6.__c && t6.__c.__P === e6 && (t6.__e && r5.insertBefore(t6.__e, t6.__d), t6.__c.__e = true, t6.__c.__P = r5)), t6; - }(n4, n4.__c.__P, n4.__c.__O); - } - var t5; - for (r4.setState({ __e: r4.__b = null }); t5 = r4.t.pop(); ) - t5.forceUpdate(); - } - }, c5 = t4.__h === true; - r4.__u++ || c5 || r4.setState({ __e: r4.__b = r4.__v.__k[0] }), n3.then(i4, i4); -}, L2.prototype.componentWillUnmount = function() { - this.t = []; -}, L2.prototype.render = function(n3, t4) { - if (this.__b) { - if (this.__v.__k) { - var e4 = document.createElement("div"), r4 = this.__v.__k[0].__c; - this.__v.__k[0] = function n4(t5, e6, r5) { - return t5 && (t5.__c && t5.__c.__H && (t5.__c.__H.__.forEach(function(n5) { - typeof n5.__c == "function" && n5.__c(); - }), t5.__c.__H = null), (t5 = S2({}, t5)).__c != null && (t5.__c.__P === r5 && (t5.__c.__P = e6), t5.__c = null), t5.__k = t5.__k && t5.__k.map(function(t6) { - return n4(t6, e6, r5); - })), t5; - }(this.__b, e4, r4.__O = r4.__P); - } - this.__b = null; - } - var u3 = t4.__e && v(d, null, n3.fallback); - return u3 && (u3.__h = null), [v(d, null, t4.__e ? null : n3.children), u3]; -}; -var T3 = function(n3, t4, e4) { - if (++e4[1] === e4[0] && n3.o.delete(t4), n3.props.revealOrder && (n3.props.revealOrder[0] !== "t" || !n3.o.size)) - for (e4 = n3.u; e4; ) { - for (; e4.length > 3; ) - e4.pop()(); - if (e4[1] < e4[0]) - break; - n3.u = e4 = e4[2]; - } -}; -function D2(n3) { - return this.getChildContext = function() { - return n3.context; - }, n3.children; -} -function I2(n3) { - var t4 = this, e4 = n3.i; - t4.componentWillUnmount = function() { - S(null, t4.l), t4.l = null, t4.i = null; - }, t4.i && t4.i !== e4 && t4.componentWillUnmount(), n3.__v ? (t4.l || (t4.i = e4, t4.l = { nodeType: 1, parentNode: e4, childNodes: [], appendChild: function(n4) { - this.childNodes.push(n4), t4.i.appendChild(n4); - }, insertBefore: function(n4, e6) { - this.childNodes.push(n4), t4.i.appendChild(n4); - }, removeChild: function(n4) { - this.childNodes.splice(this.childNodes.indexOf(n4) >>> 1, 1), t4.i.removeChild(n4); - } }), S(v(D2, { context: t4.context }, n3.__v), t4.l)) : t4.l && t4.componentWillUnmount(); -} -function W(n3, t4) { - return v(I2, { __v: n3, i: t4 }); -} -(M2.prototype = new _()).__e = function(n3) { - var t4 = this, e4 = U(t4.__v), r4 = t4.o.get(n3); - return r4[0]++, function(u3) { - var o3 = function() { - t4.props.revealOrder ? (r4.push(u3), T3(t4, n3, r4)) : u3(); - }; - e4 ? e4(o3) : o3(); - }; -}, M2.prototype.render = function(n3) { - this.u = null, this.o = new Map(); - var t4 = A(n3.children); - n3.revealOrder && n3.revealOrder[0] === "b" && t4.reverse(); - for (var e4 = t4.length; e4--; ) - this.o.set(t4[e4], this.u = [1, 0, this.u]); - return n3.children; -}, M2.prototype.componentDidUpdate = M2.prototype.componentDidMount = function() { - var n3 = this; - this.o.forEach(function(t4, e4) { - T3(n3, e4, t4); - }); -}; -var j3 = typeof Symbol != "undefined" && Symbol.for && Symbol.for("react.element") || 60103; -var P2 = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/; -var V = typeof document != "undefined"; -var z2 = function(n3) { - return (typeof Symbol != "undefined" && typeof Symbol() == "symbol" ? /fil|che|rad/i : /fil|che|ra/i).test(n3); -}; -function B2(n3, t4, e4) { - return t4.__k == null && (t4.textContent = ""), S(n3, t4), typeof e4 == "function" && e4(), n3 ? n3.__c : null; -} -function $2(n3, t4, e4) { - return q(n3, t4), typeof e4 == "function" && e4(), n3 ? n3.__c : null; -} -_.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(n3) { - Object.defineProperty(_.prototype, n3, { configurable: true, get: function() { - return this["UNSAFE_" + n3]; - }, set: function(t4) { - Object.defineProperty(this, n3, { configurable: true, writable: true, value: t4 }); - } }); -}); -var H2 = l2.event; -function Z() { -} -function Y() { - return this.cancelBubble; -} -function q2() { - return this.defaultPrevented; -} -l2.event = function(n3) { - return H2 && (n3 = H2(n3)), n3.persist = Z, n3.isPropagationStopped = Y, n3.isDefaultPrevented = q2, n3.nativeEvent = n3; -}; -var G; -var J = { configurable: true, get: function() { - return this.class; -} }; -var K = l2.vnode; -l2.vnode = function(n3) { - var t4 = n3.type, e4 = n3.props, r4 = e4; - if (typeof t4 == "string") { - var u3 = t4.indexOf("-") === -1; - for (var o3 in r4 = {}, e4) { - var i4 = e4[o3]; - V && o3 === "children" && t4 === "noscript" || o3 === "value" && "defaultValue" in e4 && i4 == null || (o3 === "defaultValue" && "value" in e4 && e4.value == null ? o3 = "value" : o3 === "download" && i4 === true ? i4 = "" : /ondoubleclick/i.test(o3) ? o3 = "ondblclick" : /^onchange(textarea|input)/i.test(o3 + t4) && !z2(e4.type) ? o3 = "oninput" : /^onfocus$/i.test(o3) ? o3 = "onfocusin" : /^onblur$/i.test(o3) ? o3 = "onfocusout" : /^on(Ani|Tra|Tou|BeforeInp)/.test(o3) ? o3 = o3.toLowerCase() : u3 && P2.test(o3) ? o3 = o3.replace(/[A-Z0-9]/, "-$&").toLowerCase() : i4 === null && (i4 = void 0), r4[o3] = i4); - } - t4 == "select" && r4.multiple && Array.isArray(r4.value) && (r4.value = A(e4.children).forEach(function(n4) { - n4.props.selected = r4.value.indexOf(n4.props.value) != -1; - })), t4 == "select" && r4.defaultValue != null && (r4.value = A(e4.children).forEach(function(n4) { - n4.props.selected = r4.multiple ? r4.defaultValue.indexOf(n4.props.value) != -1 : r4.defaultValue == n4.props.value; - })), n3.props = r4, e4.class != e4.className && (J.enumerable = "className" in e4, e4.className != null && (r4.class = e4.className), Object.defineProperty(r4, "className", J)); - } - n3.$$typeof = j3, K && K(n3); -}; -var Q = l2.__r; -l2.__r = function(n3) { - Q && Q(n3), G = n3.__c; -}; -var X = { ReactCurrentDispatcher: { current: { readContext: function(n3) { - return G.__n[n3.__c].props.value; -} } } }; -function tn(n3) { - return v.bind(null, n3); -} -function en(n3) { - return !!n3 && n3.$$typeof === j3; -} -function rn(n3) { - return en(n3) ? B.apply(null, arguments) : n3; -} -function un(n3) { - return !!n3.__k && (S(null, n3), true); -} -function on(n3) { - return n3 && (n3.base || n3.nodeType === 1 && n3) || null; -} -var ln = function(n3, t4) { - return n3(t4); -}; -var cn = function(n3, t4) { - return n3(t4); -}; -var compat_module_default = { useState: l3, useReducer: p3, useEffect: y2, useLayoutEffect: h2, useRef: s3, useImperativeHandle: _2, useMemo: d2, useCallback: A2, useContext: F, useDebugValue: T2, version: "17.0.2", Children: k3, render: B2, hydrate: $2, unmountComponentAtNode: un, createPortal: W, createElement: v, createContext: D, createFactory: tn, cloneElement: rn, createRef: p2, Fragment: d, isValidElement: en, findDOMNode: on, Component: _, PureComponent: E, memo: g3, forwardRef: x3, flushSync: cn, unstable_batchedUpdates: ln, StrictMode: d, Suspense: L2, SuspenseList: M2, lazy: F2, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: X }; - -// src/main.tsx -var import_obsidian5 = __toModule(require("obsidian")); - -// node_modules/@ant-design/plots/es/index.js -var es_exports = {}; -__export(es_exports, { - Area: () => area_default2, - Bar: () => bar_default, - BidirectionalBar: () => bidirectionalBar_default, - Box: () => box_default, - Bullet: () => bullet_default, - Chord: () => chord_default, - CirclePacking: () => circlePacking_default, - Column: () => column_default, - DualAxes: () => dualAxes_default, - FUNNEL_CONVERSATION_FIELD: () => FUNNEL_CONVERSATION, - Facet: () => facet_default, - Funnel: () => funnel_default, - G2: () => esm_exports3, - Gauge: () => gauge_default, - Heatmap: () => heatmap_default2, - Histogram: () => histogram_default, - Line: () => line_default10, - Liquid: () => liquid_default, - Mix: () => mix_default, - MultiView: () => mix_default, - Pie: () => pie_default2, - Plot: () => Plot, - Progress: () => progress_default, - Radar: () => radar_default, - RadialBar: () => radialBar_default, - RingProgress: () => ringProgress_default, - Rose: () => rose_default, - Sankey: () => sankey_default, - Scatter: () => scatter_default, - Stock: () => stock_default, - Sunburst: () => sunburst_default, - TinyArea: () => tinyArea_default, - TinyColumn: () => tinyColumn_default, - TinyLine: () => tinyLine_default, - Treemap: () => treemap_default2, - Venn: () => venn_default, - Violin: () => violin_default2, - Waterfall: () => waterfall_default, - WordCloud: () => wordCloud_default, - adaptors: () => adaptors, - default: () => es_default, - flow: () => flow, - getCanvasPattern: () => getCanvasPattern, - measureTextWidth: () => measureTextWidth2 -}); - -// node_modules/@antv/g2/esm/index.js -var esm_exports3 = {}; -__export(esm_exports3, { - Action: () => base_default12, - BRUSH_FILTER_EVENTS: () => EVENTS3, - Chart: () => chart_default, - ComponentController: () => Controller, - Coordinate: () => base_default7, - DIRECTION: () => DIRECTION, - ELEMENT_RANGE_HIGHLIGHT_EVENTS: () => EVENTS2, - Element: () => element_default2, - Event: () => event_default, - Facet: () => Facet, - Geometry: () => base_default13, - GeometryLabel: () => base_default14, - Interaction: () => interaction_default, - InteractionAction: () => base_default12, - LAYER: () => LAYER, - Scale: () => base_default4, - TooltipController: () => tooltip_default, - Util: () => Util, - VERSION: () => VERSION, - VIEW_LIFE_CIRCLE: () => VIEW_LIFE_CIRCLE, - View: () => view_default, - getActionClass: () => getActionClass, - getAnimation: () => getAnimation, - getEngine: () => getEngine, - getFacet: () => getFacet, - getGeometryLabel: () => getGeometryLabel, - getGeometryLabelLayout: () => getGeometryLabelLayout, - getInteraction: () => getInteraction, - getShapeFactory: () => getShapeFactory, - getTheme: () => getTheme, - registerAction: () => registerAction, - registerAnimation: () => registerAnimation, - registerComponentController: () => registerComponentController, - registerEngine: () => registerEngine, - registerFacet: () => registerFacet, - registerGeometry: () => registerGeometry, - registerGeometryLabel: () => registerGeometryLabel, - registerGeometryLabelLayout: () => registerGeometryLabelLayout, - registerInteraction: () => registerInteraction, - registerShape: () => registerShape, - registerShapeFactory: () => registerShapeFactory, - registerTheme: () => registerTheme -}); - -// node_modules/tslib/modules/index.js -var import_tslib = __toModule(require_tslib()); -var { - __extends, - __assign, - __rest, - __decorate, - __param, - __metadata, - __awaiter, - __generator, - __exportStar, - __createBinding, - __values, - __read, - __spread, - __spreadArrays, - __spreadArray, - __await, - __asyncGenerator, - __asyncDelegator, - __asyncValues, - __makeTemplateObject, - __importStar, - __importDefault, - __classPrivateFieldGet, - __classPrivateFieldSet -} = import_tslib.default; - -// node_modules/@antv/g2/esm/chart/chart.js -var import_util129 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/constant.js -var LAYER; -(function(LAYER2) { - LAYER2["FORE"] = "fore"; - LAYER2["MID"] = "mid"; - LAYER2["BG"] = "bg"; -})(LAYER || (LAYER = {})); -var DIRECTION; -(function(DIRECTION2) { - DIRECTION2["TOP"] = "top"; - DIRECTION2["TOP_LEFT"] = "top-left"; - DIRECTION2["TOP_RIGHT"] = "top-right"; - DIRECTION2["RIGHT"] = "right"; - DIRECTION2["RIGHT_TOP"] = "right-top"; - DIRECTION2["RIGHT_BOTTOM"] = "right-bottom"; - DIRECTION2["LEFT"] = "left"; - DIRECTION2["LEFT_TOP"] = "left-top"; - DIRECTION2["LEFT_BOTTOM"] = "left-bottom"; - DIRECTION2["BOTTOM"] = "bottom"; - DIRECTION2["BOTTOM_LEFT"] = "bottom-left"; - DIRECTION2["BOTTOM_RIGHT"] = "bottom-right"; - DIRECTION2["RADIUS"] = "radius"; - DIRECTION2["CIRCLE"] = "circle"; - DIRECTION2["NONE"] = "none"; -})(DIRECTION || (DIRECTION = {})); -var COMPONENT_TYPE; -(function(COMPONENT_TYPE2) { - COMPONENT_TYPE2["AXIS"] = "axis"; - COMPONENT_TYPE2["GRID"] = "grid"; - COMPONENT_TYPE2["LEGEND"] = "legend"; - COMPONENT_TYPE2["TOOLTIP"] = "tooltip"; - COMPONENT_TYPE2["ANNOTATION"] = "annotation"; - COMPONENT_TYPE2["SLIDER"] = "slider"; - COMPONENT_TYPE2["SCROLLBAR"] = "scrollbar"; - COMPONENT_TYPE2["OTHER"] = "other"; -})(COMPONENT_TYPE || (COMPONENT_TYPE = {})); -var GROUP_Z_INDEX = { - FORE: 3, - MID: 2, - BG: 1 -}; -var VIEW_LIFE_CIRCLE; -(function(VIEW_LIFE_CIRCLE2) { - VIEW_LIFE_CIRCLE2["BEFORE_RENDER"] = "beforerender"; - VIEW_LIFE_CIRCLE2["AFTER_RENDER"] = "afterrender"; - VIEW_LIFE_CIRCLE2["BEFORE_PAINT"] = "beforepaint"; - VIEW_LIFE_CIRCLE2["AFTER_PAINT"] = "afterpaint"; - VIEW_LIFE_CIRCLE2["BEFORE_CHANGE_DATA"] = "beforechangedata"; - VIEW_LIFE_CIRCLE2["AFTER_CHANGE_DATA"] = "afterchangedata"; - VIEW_LIFE_CIRCLE2["BEFORE_CLEAR"] = "beforeclear"; - VIEW_LIFE_CIRCLE2["AFTER_CLEAR"] = "afterclear"; - VIEW_LIFE_CIRCLE2["BEFORE_DESTROY"] = "beforedestroy"; - VIEW_LIFE_CIRCLE2["BEFORE_CHANGE_SIZE"] = "beforechangesize"; - VIEW_LIFE_CIRCLE2["AFTER_CHANGE_SIZE"] = "afterchangesize"; -})(VIEW_LIFE_CIRCLE || (VIEW_LIFE_CIRCLE = {})); -var GEOMETRY_LIFE_CIRCLE; -(function(GEOMETRY_LIFE_CIRCLE2) { - GEOMETRY_LIFE_CIRCLE2["BEFORE_DRAW_ANIMATE"] = "beforeanimate"; - GEOMETRY_LIFE_CIRCLE2["AFTER_DRAW_ANIMATE"] = "afteranimate"; -})(GEOMETRY_LIFE_CIRCLE || (GEOMETRY_LIFE_CIRCLE = {})); -var PLOT_EVENTS; -(function(PLOT_EVENTS2) { - PLOT_EVENTS2["MOUSE_ENTER"] = "plot:mouseenter"; - PLOT_EVENTS2["MOUSE_DOWN"] = "plot:mousedown"; - PLOT_EVENTS2["MOUSE_MOVE"] = "plot:mousemove"; - PLOT_EVENTS2["MOUSE_UP"] = "plot:mouseup"; - PLOT_EVENTS2["MOUSE_LEAVE"] = "plot:mouseleave"; - PLOT_EVENTS2["TOUCH_START"] = "plot:touchstart"; - PLOT_EVENTS2["TOUCH_MOVE"] = "plot:touchmove"; - PLOT_EVENTS2["TOUCH_END"] = "plot:touchend"; - PLOT_EVENTS2["TOUCH_CANCEL"] = "plot:touchcancel"; - PLOT_EVENTS2["CLICK"] = "plot:click"; - PLOT_EVENTS2["DBLCLICK"] = "plot:dblclick"; - PLOT_EVENTS2["CONTEXTMENU"] = "plot:contextmenu"; - PLOT_EVENTS2["LEAVE"] = "plot:leave"; - PLOT_EVENTS2["ENTER"] = "plot:enter"; -})(PLOT_EVENTS || (PLOT_EVENTS = {})); -var ELEMENT_STATE; -(function(ELEMENT_STATE2) { - ELEMENT_STATE2["ACTIVE"] = "active"; - ELEMENT_STATE2["INACTIVE"] = "inactive"; - ELEMENT_STATE2["SELECTED"] = "selected"; - ELEMENT_STATE2["DEFAULT"] = "default"; -})(ELEMENT_STATE || (ELEMENT_STATE = {})); -var GROUP_ATTRS = ["color", "shape", "size"]; -var FIELD_ORIGIN = "_origin"; -var MIN_CHART_WIDTH = 1; -var MIN_CHART_HEIGHT = 1; -var COMPONENT_MAX_VIEW_PERCENTAGE = 0.25; - -// node_modules/@antv/g2/esm/engine/index.js -var ENGINES = {}; -function getEngine(name) { - var G2 = ENGINES[name]; - if (!G2) { - throw new Error("G engine '".concat(name, "' is not exist, please register it at first.")); - } - return G2; -} -function registerEngine(name, engine) { - ENGINES[name] = engine; -} - -// node_modules/@antv/dom-util/esm/add-event-listener.js -function addEventListener(target, eventType, callback) { - if (target) { - if (typeof target.addEventListener === "function") { - target.addEventListener(eventType, callback, false); - return { - remove: function() { - target.removeEventListener(eventType, callback, false); - } - }; - } - if (typeof target.attachEvent === "function") { - target.attachEvent("on" + eventType, callback); - return { - remove: function() { - target.detachEvent("on" + eventType, callback); - } - }; - } - } -} - -// node_modules/@antv/dom-util/esm/create-dom.js -var TABLE; -var TABLE_TR; -var FRAGMENT_REG; -var CONTAINERS; -function initConstants() { - TABLE = document.createElement("table"); - TABLE_TR = document.createElement("tr"); - FRAGMENT_REG = /^\s*<(\w+|!)[^>]*>/; - CONTAINERS = { - tr: document.createElement("tbody"), - tbody: TABLE, - thead: TABLE, - tfoot: TABLE, - td: TABLE_TR, - th: TABLE_TR, - "*": document.createElement("div") - }; -} -function createDom(str8) { - if (!TABLE) { - initConstants(); - } - var name = FRAGMENT_REG.test(str8) && RegExp.$1; - if (!name || !(name in CONTAINERS)) { - name = "*"; - } - var container2 = CONTAINERS[name]; - str8 = str8.replace(/(^\s*)|(\s*$)/g, ""); - container2.innerHTML = "" + str8; - var dom = container2.childNodes[0]; - container2.removeChild(dom); - return dom; -} - -// node_modules/@antv/dom-util/esm/get-style.js -function getStyle(dom, name, defaultValue) { - var v3; - try { - v3 = window.getComputedStyle ? window.getComputedStyle(dom, null)[name] : dom.style[name]; - } catch (e4) { - } finally { - v3 = v3 === void 0 ? defaultValue : v3; - } - return v3; -} - -// node_modules/@antv/dom-util/esm/get-height.js -function getHeight(el, defaultValue) { - var height = getStyle(el, "height", defaultValue); - if (height === "auto") { - height = el.offsetHeight; - } - return parseFloat(height); -} - -// node_modules/@antv/dom-util/esm/get-outer-height.js -function getOuterHeight(el, defaultValue) { - var height = getHeight(el, defaultValue); - var bTop = parseFloat(getStyle(el, "borderTopWidth")) || 0; - var pTop = parseFloat(getStyle(el, "paddingTop")) || 0; - var pBottom = parseFloat(getStyle(el, "paddingBottom")) || 0; - var bBottom = parseFloat(getStyle(el, "borderBottomWidth")) || 0; - var mTop = parseFloat(getStyle(el, "marginTop")) || 0; - var mBottom = parseFloat(getStyle(el, "marginBottom")) || 0; - return height + bTop + bBottom + pTop + pBottom + mTop + mBottom; -} - -// node_modules/@antv/dom-util/esm/get-width.js -function getHeight2(el, defaultValue) { - var width2 = getStyle(el, "width", defaultValue); - if (width2 === "auto") { - width2 = el.offsetWidth; - } - return parseFloat(width2); -} - -// node_modules/@antv/dom-util/esm/get-outer-width.js -function getOuterWidth(el, defaultValue) { - var width2 = getHeight2(el, defaultValue); - var bLeft = parseFloat(getStyle(el, "borderLeftWidth")) || 0; - var pLeft = parseFloat(getStyle(el, "paddingLeft")) || 0; - var pRight = parseFloat(getStyle(el, "paddingRight")) || 0; - var bRight = parseFloat(getStyle(el, "borderRightWidth")) || 0; - var mRight = parseFloat(getStyle(el, "marginRight")) || 0; - var mLeft = parseFloat(getStyle(el, "marginLeft")) || 0; - return width2 + bLeft + bRight + pLeft + pRight + mLeft + mRight; -} - -// node_modules/@antv/dom-util/esm/modify-css.js -function modifyCSS(dom, css) { - if (dom) { - for (var key in css) { - if (css.hasOwnProperty(key)) { - dom.style[key] = css[key]; - } - } - } - return dom; -} - -// node_modules/@antv/g2/esm/util/dom.js -function getElementSize(ele) { - var style = getComputedStyle(ele); - return { - width: (ele.clientWidth || parseInt(style.width, 10)) - parseInt(style.paddingLeft, 10) - parseInt(style.paddingRight, 10), - height: (ele.clientHeight || parseInt(style.height, 10)) - parseInt(style.paddingTop, 10) - parseInt(style.paddingBottom, 10) - }; -} -function isNumber(v3) { - return typeof v3 === "number" && !isNaN(v3); -} -function getChartSize(ele, autoFit, width2, height) { - var w4 = width2; - var h3 = height; - if (autoFit) { - var size14 = getElementSize(ele); - w4 = size14.width ? size14.width : w4; - h3 = size14.height ? size14.height : h3; - } - return { - width: Math.max(isNumber(w4) ? w4 : MIN_CHART_WIDTH, MIN_CHART_WIDTH), - height: Math.max(isNumber(h3) ? h3 : MIN_CHART_HEIGHT, MIN_CHART_HEIGHT) - }; -} -function removeDom(dom) { - var parent = dom.parentNode; - if (parent) { - parent.removeChild(dom); - } -} - -// node_modules/@antv/g2/esm/chart/view.js -var import_util127 = __toModule(require_lib()); - -// node_modules/@antv/event-emitter/esm/index.js -var WILDCARD = "*"; -var EventEmitter = function() { - function EventEmitter2() { - this._events = {}; - } - EventEmitter2.prototype.on = function(evt, callback, once) { - if (!this._events[evt]) { - this._events[evt] = []; - } - this._events[evt].push({ - callback, - once: !!once - }); - return this; - }; - EventEmitter2.prototype.once = function(evt, callback) { - this.on(evt, callback, true); - return this; - }; - EventEmitter2.prototype.emit = function(evt) { - var _this = this; - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - var events = this._events[evt] || []; - var wildcardEvents = this._events[WILDCARD] || []; - var doEmit = function(es) { - var length5 = es.length; - for (var i4 = 0; i4 < length5; i4++) { - if (!es[i4]) { - continue; - } - var _a6 = es[i4], callback = _a6.callback, once = _a6.once; - if (once) { - es.splice(i4, 1); - if (es.length === 0) { - delete _this._events[evt]; - } - length5--; - i4--; - } - callback.apply(_this, args); - } - }; - doEmit(events); - doEmit(wildcardEvents); - }; - EventEmitter2.prototype.off = function(evt, callback) { - if (!evt) { - this._events = {}; - } else { - if (!callback) { - delete this._events[evt]; - } else { - var events = this._events[evt] || []; - var length_1 = events.length; - for (var i4 = 0; i4 < length_1; i4++) { - if (events[i4].callback === callback) { - events.splice(i4, 1); - length_1--; - i4--; - } - } - if (events.length === 0) { - delete this._events[evt]; - } - } - } - return this; - }; - EventEmitter2.prototype.getEvents = function() { - return this._events; - }; - return EventEmitter2; -}(); -var esm_default = EventEmitter; - -// node_modules/@antv/g2/esm/base.js -var Base = function(_super) { - __extends(Base4, _super); - function Base4(cfg) { - var _this = _super.call(this) || this; - _this.destroyed = false; - var _a6 = cfg.visible, visible = _a6 === void 0 ? true : _a6; - _this.visible = visible; - return _this; - } - Base4.prototype.show = function() { - var visible = this.visible; - if (!visible) { - this.changeVisible(true); - } - }; - Base4.prototype.hide = function() { - var visible = this.visible; - if (visible) { - this.changeVisible(false); - } - }; - Base4.prototype.destroy = function() { - this.off(); - this.destroyed = true; - }; - Base4.prototype.changeVisible = function(visible) { - if (this.visible === visible) { - return; - } - this.visible = visible; - }; - return Base4; -}(esm_default); -var base_default = Base; - -// node_modules/@antv/g2/esm/facet/index.js -var import_util109 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/facet/facet.js -var import_util108 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/util/axis.js -var import_util107 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/util/scale.js -var import_util106 = __toModule(require_lib()); - -// node_modules/@antv/g-base/esm/util/path.js -var path_exports = {}; -__export(path_exports, { - catmullRomToBezier: () => catmullRomToBezier, - fillPath: () => fillPath, - fillPathByDiff: () => fillPathByDiff, - formatPath: () => formatPath, - intersection: () => intersection, - parsePathArray: () => parsePathArray, - parsePathString: () => parsePathString, - pathToAbsolute: () => pathToAbsolute, - pathToCurve: () => pathToCurve, - rectPath: () => rectPath -}); -var import_util = __toModule(require_lib()); -var SPACES = " \n\v\f\r \xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029"; -var PATH_COMMAND = new RegExp("([a-z])[" + SPACES + ",]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[" + SPACES + "]*,?[" + SPACES + "]*)+)", "ig"); -var PATH_VALUES = new RegExp("(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[" + SPACES + "]*,?[" + SPACES + "]*", "ig"); -var parsePathString = function(pathString) { - if (!pathString) { - return null; - } - if ((0, import_util.isArray)(pathString)) { - return pathString; - } - var paramCounts = { - a: 7, - c: 6, - o: 2, - h: 1, - l: 2, - m: 2, - r: 4, - q: 4, - s: 4, - t: 2, - v: 1, - u: 3, - z: 0 - }; - var data3 = []; - String(pathString).replace(PATH_COMMAND, function(a4, b10, c5) { - var params = []; - var name = b10.toLowerCase(); - c5.replace(PATH_VALUES, function(a5, b11) { - b11 && params.push(+b11); - }); - if (name === "m" && params.length > 2) { - data3.push([b10].concat(params.splice(0, 2))); - name = "l"; - b10 = b10 === "m" ? "l" : "L"; - } - if (name === "o" && params.length === 1) { - data3.push([b10, params[0]]); - } - if (name === "r") { - data3.push([b10].concat(params)); - } else { - while (params.length >= paramCounts[name]) { - data3.push([b10].concat(params.splice(0, paramCounts[name]))); - if (!paramCounts[name]) { - break; - } - } - } - return pathString; - }); - return data3; -}; -var catmullRomToBezier = function(crp, z3) { - var d3 = []; - for (var i4 = 0, iLen = crp.length; iLen - 2 * !z3 > i4; i4 += 2) { - var p4 = [ - { - x: +crp[i4 - 2], - y: +crp[i4 - 1] - }, - { - x: +crp[i4], - y: +crp[i4 + 1] - }, - { - x: +crp[i4 + 2], - y: +crp[i4 + 3] - }, - { - x: +crp[i4 + 4], - y: +crp[i4 + 5] - } - ]; - if (z3) { - if (!i4) { - p4[0] = { - x: +crp[iLen - 2], - y: +crp[iLen - 1] - }; - } else if (iLen - 4 === i4) { - p4[3] = { - x: +crp[0], - y: +crp[1] - }; - } else if (iLen - 2 === i4) { - p4[2] = { - x: +crp[0], - y: +crp[1] - }; - p4[3] = { - x: +crp[2], - y: +crp[3] - }; - } - } else { - if (iLen - 4 === i4) { - p4[3] = p4[2]; - } else if (!i4) { - p4[0] = { - x: +crp[i4], - y: +crp[i4 + 1] - }; - } - } - d3.push([ - "C", - (-p4[0].x + 6 * p4[1].x + p4[2].x) / 6, - (-p4[0].y + 6 * p4[1].y + p4[2].y) / 6, - (p4[1].x + 6 * p4[2].x - p4[3].x) / 6, - (p4[1].y + 6 * p4[2].y - p4[3].y) / 6, - p4[2].x, - p4[2].y - ]); - } - return d3; -}; -var ellipsePath = function(x6, y5, rx, ry, a4) { - var res = []; - if (a4 === null && ry === null) { - ry = rx; - } - x6 = +x6; - y5 = +y5; - rx = +rx; - ry = +ry; - if (a4 !== null) { - var rad = Math.PI / 180; - var x1 = x6 + rx * Math.cos(-ry * rad); - var x22 = x6 + rx * Math.cos(-a4 * rad); - var y1 = y5 + rx * Math.sin(-ry * rad); - var y22 = y5 + rx * Math.sin(-a4 * rad); - res = [ - ["M", x1, y1], - ["A", rx, rx, 0, +(a4 - ry > 180), 0, x22, y22] - ]; - } else { - res = [["M", x6, y5], ["m", 0, -ry], ["a", rx, ry, 0, 1, 1, 0, 2 * ry], ["a", rx, ry, 0, 1, 1, 0, -2 * ry], ["z"]]; - } - return res; -}; -var pathToAbsolute = function(pathArray) { - pathArray = parsePathString(pathArray); - if (!pathArray || !pathArray.length) { - return [["M", 0, 0]]; - } - var res = []; - var x6 = 0; - var y5 = 0; - var mx = 0; - var my = 0; - var start = 0; - var pa0; - var dots; - if (pathArray[0][0] === "M") { - x6 = +pathArray[0][1]; - y5 = +pathArray[0][2]; - mx = x6; - my = y5; - start++; - res[0] = ["M", x6, y5]; - } - var crz = pathArray.length === 3 && pathArray[0][0] === "M" && pathArray[1][0].toUpperCase() === "R" && pathArray[2][0].toUpperCase() === "Z"; - for (var r4 = void 0, pa = void 0, i4 = start, ii = pathArray.length; i4 < ii; i4++) { - res.push(r4 = []); - pa = pathArray[i4]; - pa0 = pa[0]; - if (pa0 !== pa0.toUpperCase()) { - r4[0] = pa0.toUpperCase(); - switch (r4[0]) { - case "A": - r4[1] = pa[1]; - r4[2] = pa[2]; - r4[3] = pa[3]; - r4[4] = pa[4]; - r4[5] = pa[5]; - r4[6] = +pa[6] + x6; - r4[7] = +pa[7] + y5; - break; - case "V": - r4[1] = +pa[1] + y5; - break; - case "H": - r4[1] = +pa[1] + x6; - break; - case "R": - dots = [x6, y5].concat(pa.slice(1)); - for (var j4 = 2, jj = dots.length; j4 < jj; j4++) { - dots[j4] = +dots[j4] + x6; - dots[++j4] = +dots[j4] + y5; - } - res.pop(); - res = res.concat(catmullRomToBezier(dots, crz)); - break; - case "O": - res.pop(); - dots = ellipsePath(x6, y5, pa[1], pa[2]); - dots.push(dots[0]); - res = res.concat(dots); - break; - case "U": - res.pop(); - res = res.concat(ellipsePath(x6, y5, pa[1], pa[2], pa[3])); - r4 = ["U"].concat(res[res.length - 1].slice(-2)); - break; - case "M": - mx = +pa[1] + x6; - my = +pa[2] + y5; - break; - default: - for (var j4 = 1, jj = pa.length; j4 < jj; j4++) { - r4[j4] = +pa[j4] + (j4 % 2 ? x6 : y5); - } - } - } else if (pa0 === "R") { - dots = [x6, y5].concat(pa.slice(1)); - res.pop(); - res = res.concat(catmullRomToBezier(dots, crz)); - r4 = ["R"].concat(pa.slice(-2)); - } else if (pa0 === "O") { - res.pop(); - dots = ellipsePath(x6, y5, pa[1], pa[2]); - dots.push(dots[0]); - res = res.concat(dots); - } else if (pa0 === "U") { - res.pop(); - res = res.concat(ellipsePath(x6, y5, pa[1], pa[2], pa[3])); - r4 = ["U"].concat(res[res.length - 1].slice(-2)); - } else { - for (var k4 = 0, kk = pa.length; k4 < kk; k4++) { - r4[k4] = pa[k4]; - } - } - pa0 = pa0.toUpperCase(); - if (pa0 !== "O") { - switch (r4[0]) { - case "Z": - x6 = +mx; - y5 = +my; - break; - case "H": - x6 = r4[1]; - break; - case "V": - y5 = r4[1]; - break; - case "M": - mx = r4[r4.length - 2]; - my = r4[r4.length - 1]; - break; - default: - x6 = r4[r4.length - 2]; - y5 = r4[r4.length - 1]; - } - } - } - return res; -}; -var l2c = function(x1, y1, x22, y22) { - return [x1, y1, x22, y22, x22, y22]; -}; -var q2c = function(x1, y1, ax, ay, x22, y22) { - var _13 = 1 / 3; - var _23 = 2 / 3; - return [_13 * x1 + _23 * ax, _13 * y1 + _23 * ay, _13 * x22 + _23 * ax, _13 * y22 + _23 * ay, x22, y22]; -}; -var a2c = function(x1, y1, rx, ry, angle3, large_arc_flag, sweep_flag, x22, y22, recursive) { - if (rx === ry) { - rx += 1; - } - var _120 = Math.PI * 120 / 180; - var rad = Math.PI / 180 * (+angle3 || 0); - var res = []; - var xy; - var f1; - var f22; - var cx; - var cy; - var rotate8 = function(x7, y6, rad2) { - var X2 = x7 * Math.cos(rad2) - y6 * Math.sin(rad2); - var Y2 = x7 * Math.sin(rad2) + y6 * Math.cos(rad2); - return { - x: X2, - y: Y2 - }; - }; - if (!recursive) { - xy = rotate8(x1, y1, -rad); - x1 = xy.x; - y1 = xy.y; - xy = rotate8(x22, y22, -rad); - x22 = xy.x; - y22 = xy.y; - if (x1 === x22 && y1 === y22) { - x22 += 1; - y22 += 1; - } - var x6 = (x1 - x22) / 2; - var y5 = (y1 - y22) / 2; - var h3 = x6 * x6 / (rx * rx) + y5 * y5 / (ry * ry); - if (h3 > 1) { - h3 = Math.sqrt(h3); - rx = h3 * rx; - ry = h3 * ry; - } - var rx2 = rx * rx; - var ry2 = ry * ry; - var k4 = (large_arc_flag === sweep_flag ? -1 : 1) * Math.sqrt(Math.abs((rx2 * ry2 - rx2 * y5 * y5 - ry2 * x6 * x6) / (rx2 * y5 * y5 + ry2 * x6 * x6))); - cx = k4 * rx * y5 / ry + (x1 + x22) / 2; - cy = k4 * -ry * x6 / rx + (y1 + y22) / 2; - f1 = Math.asin(((y1 - cy) / ry).toFixed(9)); - f22 = Math.asin(((y22 - cy) / ry).toFixed(9)); - f1 = x1 < cx ? Math.PI - f1 : f1; - f22 = x22 < cx ? Math.PI - f22 : f22; - f1 < 0 && (f1 = Math.PI * 2 + f1); - f22 < 0 && (f22 = Math.PI * 2 + f22); - if (sweep_flag && f1 > f22) { - f1 = f1 - Math.PI * 2; - } - if (!sweep_flag && f22 > f1) { - f22 = f22 - Math.PI * 2; - } - } else { - f1 = recursive[0]; - f22 = recursive[1]; - cx = recursive[2]; - cy = recursive[3]; - } - var df = f22 - f1; - if (Math.abs(df) > _120) { - var f2old = f22; - var x2old = x22; - var y2old = y22; - f22 = f1 + _120 * (sweep_flag && f22 > f1 ? 1 : -1); - x22 = cx + rx * Math.cos(f22); - y22 = cy + ry * Math.sin(f22); - res = a2c(x22, y22, rx, ry, angle3, 0, sweep_flag, x2old, y2old, [f22, f2old, cx, cy]); - } - df = f22 - f1; - var c1 = Math.cos(f1); - var s1 = Math.sin(f1); - var c22 = Math.cos(f22); - var s22 = Math.sin(f22); - var t4 = Math.tan(df / 4); - var hx = 4 / 3 * rx * t4; - var hy = 4 / 3 * ry * t4; - var m1 = [x1, y1]; - var m22 = [x1 + hx * s1, y1 - hy * c1]; - var m32 = [x22 + hx * s22, y22 - hy * c22]; - var m4 = [x22, y22]; - m22[0] = 2 * m1[0] - m22[0]; - m22[1] = 2 * m1[1] - m22[1]; - if (recursive) { - return [m22, m32, m4].concat(res); - } - res = [m22, m32, m4].concat(res).join().split(","); - var newres = []; - for (var i4 = 0, ii = res.length; i4 < ii; i4++) { - newres[i4] = i4 % 2 ? rotate8(res[i4 - 1], res[i4], rad).y : rotate8(res[i4], res[i4 + 1], rad).x; - } - return newres; -}; -var pathToCurve = function(path, path2) { - var p4 = pathToAbsolute(path); - var p22 = path2 && pathToAbsolute(path2); - var attrs = { - x: 0, - y: 0, - bx: 0, - by: 0, - X: 0, - Y: 0, - qx: null, - qy: null - }; - var attrs2 = { - x: 0, - y: 0, - bx: 0, - by: 0, - X: 0, - Y: 0, - qx: null, - qy: null - }; - var pcoms1 = []; - var pcoms2 = []; - var pfirst = ""; - var pcom = ""; - var ii; - var processPath = function(path3, d3, pcom2) { - var nx; - var ny; - if (!path3) { - return ["C", d3.x, d3.y, d3.x, d3.y, d3.x, d3.y]; - } - !(path3[0] in { - T: 1, - Q: 1 - }) && (d3.qx = d3.qy = null); - switch (path3[0]) { - case "M": - d3.X = path3[1]; - d3.Y = path3[2]; - break; - case "A": - path3 = ["C"].concat(a2c.apply(0, [d3.x, d3.y].concat(path3.slice(1)))); - break; - case "S": - if (pcom2 === "C" || pcom2 === "S") { - nx = d3.x * 2 - d3.bx; - ny = d3.y * 2 - d3.by; - } else { - nx = d3.x; - ny = d3.y; - } - path3 = ["C", nx, ny].concat(path3.slice(1)); - break; - case "T": - if (pcom2 === "Q" || pcom2 === "T") { - d3.qx = d3.x * 2 - d3.qx; - d3.qy = d3.y * 2 - d3.qy; - } else { - d3.qx = d3.x; - d3.qy = d3.y; - } - path3 = ["C"].concat(q2c(d3.x, d3.y, d3.qx, d3.qy, path3[1], path3[2])); - break; - case "Q": - d3.qx = path3[1]; - d3.qy = path3[2]; - path3 = ["C"].concat(q2c(d3.x, d3.y, path3[1], path3[2], path3[3], path3[4])); - break; - case "L": - path3 = ["C"].concat(l2c(d3.x, d3.y, path3[1], path3[2])); - break; - case "H": - path3 = ["C"].concat(l2c(d3.x, d3.y, path3[1], d3.y)); - break; - case "V": - path3 = ["C"].concat(l2c(d3.x, d3.y, d3.x, path3[1])); - break; - case "Z": - path3 = ["C"].concat(l2c(d3.x, d3.y, d3.X, d3.Y)); - break; - default: - break; - } - return path3; - }; - var fixArc = function(pp, i5) { - if (pp[i5].length > 7) { - pp[i5].shift(); - var pi2 = pp[i5]; - while (pi2.length) { - pcoms1[i5] = "A"; - p22 && (pcoms2[i5] = "A"); - pp.splice(i5++, 0, ["C"].concat(pi2.splice(0, 6))); - } - pp.splice(i5, 1); - ii = Math.max(p4.length, p22 && p22.length || 0); - } - }; - var fixM = function(path1, path22, a1, a22, i5) { - if (path1 && path22 && path1[i5][0] === "M" && path22[i5][0] !== "M") { - path22.splice(i5, 0, ["M", a22.x, a22.y]); - a1.bx = 0; - a1.by = 0; - a1.x = path1[i5][1]; - a1.y = path1[i5][2]; - ii = Math.max(p4.length, p22 && p22.length || 0); - } - }; - ii = Math.max(p4.length, p22 && p22.length || 0); - for (var i4 = 0; i4 < ii; i4++) { - p4[i4] && (pfirst = p4[i4][0]); - if (pfirst !== "C") { - pcoms1[i4] = pfirst; - i4 && (pcom = pcoms1[i4 - 1]); - } - p4[i4] = processPath(p4[i4], attrs, pcom); - if (pcoms1[i4] !== "A" && pfirst === "C") - pcoms1[i4] = "C"; - fixArc(p4, i4); - if (p22) { - p22[i4] && (pfirst = p22[i4][0]); - if (pfirst !== "C") { - pcoms2[i4] = pfirst; - i4 && (pcom = pcoms2[i4 - 1]); - } - p22[i4] = processPath(p22[i4], attrs2, pcom); - if (pcoms2[i4] !== "A" && pfirst === "C") { - pcoms2[i4] = "C"; - } - fixArc(p22, i4); - } - fixM(p4, p22, attrs, attrs2, i4); - fixM(p22, p4, attrs2, attrs, i4); - var seg = p4[i4]; - var seg2 = p22 && p22[i4]; - var seglen = seg.length; - var seg2len = p22 && seg2.length; - attrs.x = seg[seglen - 2]; - attrs.y = seg[seglen - 1]; - attrs.bx = parseFloat(seg[seglen - 4]) || attrs.x; - attrs.by = parseFloat(seg[seglen - 3]) || attrs.y; - attrs2.bx = p22 && (parseFloat(seg2[seg2len - 4]) || attrs2.x); - attrs2.by = p22 && (parseFloat(seg2[seg2len - 3]) || attrs2.y); - attrs2.x = p22 && seg2[seg2len - 2]; - attrs2.y = p22 && seg2[seg2len - 1]; - } - return p22 ? [p4, p22] : p4; -}; -var p2s = /,?([a-z]),?/gi; -var parsePathArray = function(path) { - return path.join(",").replace(p2s, "$1"); -}; -var base3 = function(t4, p1, p22, p32, p4) { - var t1 = -3 * p1 + 9 * p22 - 9 * p32 + 3 * p4; - var t22 = t4 * t1 + 6 * p1 - 12 * p22 + 6 * p32; - return t4 * t22 - 3 * p1 + 3 * p22; -}; -var bezlen = function(x1, y1, x22, y22, x32, y32, x42, y42, z3) { - if (z3 === null) { - z3 = 1; - } - z3 = z3 > 1 ? 1 : z3 < 0 ? 0 : z3; - var z22 = z3 / 2; - var n3 = 12; - var Tvalues = [ - -0.1252, - 0.1252, - -0.3678, - 0.3678, - -0.5873, - 0.5873, - -0.7699, - 0.7699, - -0.9041, - 0.9041, - -0.9816, - 0.9816 - ]; - var Cvalues = [0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601, 0.1069, 0.1069, 0.0472, 0.0472]; - var sum = 0; - for (var i4 = 0; i4 < n3; i4++) { - var ct = z22 * Tvalues[i4] + z22; - var xbase = base3(ct, x1, x22, x32, x42); - var ybase = base3(ct, y1, y22, y32, y42); - var comb = xbase * xbase + ybase * ybase; - sum += Cvalues[i4] * Math.sqrt(comb); - } - return z22 * sum; -}; -var curveDim = function(x0, y0, x1, y1, x22, y22, x32, y32) { - var tvalues = []; - var bounds = [[], []]; - var a4; - var b10; - var c5; - var t4; - for (var i4 = 0; i4 < 2; ++i4) { - if (i4 === 0) { - b10 = 6 * x0 - 12 * x1 + 6 * x22; - a4 = -3 * x0 + 9 * x1 - 9 * x22 + 3 * x32; - c5 = 3 * x1 - 3 * x0; - } else { - b10 = 6 * y0 - 12 * y1 + 6 * y22; - a4 = -3 * y0 + 9 * y1 - 9 * y22 + 3 * y32; - c5 = 3 * y1 - 3 * y0; - } - if (Math.abs(a4) < 1e-12) { - if (Math.abs(b10) < 1e-12) { - continue; - } - t4 = -c5 / b10; - if (t4 > 0 && t4 < 1) { - tvalues.push(t4); - } - continue; - } - var b2ac = b10 * b10 - 4 * c5 * a4; - var sqrtb2ac = Math.sqrt(b2ac); - if (b2ac < 0) { - continue; - } - var t1 = (-b10 + sqrtb2ac) / (2 * a4); - if (t1 > 0 && t1 < 1) { - tvalues.push(t1); - } - var t22 = (-b10 - sqrtb2ac) / (2 * a4); - if (t22 > 0 && t22 < 1) { - tvalues.push(t22); - } - } - var j4 = tvalues.length; - var jlen = j4; - var mt; - while (j4--) { - t4 = tvalues[j4]; - mt = 1 - t4; - bounds[0][j4] = mt * mt * mt * x0 + 3 * mt * mt * t4 * x1 + 3 * mt * t4 * t4 * x22 + t4 * t4 * t4 * x32; - bounds[1][j4] = mt * mt * mt * y0 + 3 * mt * mt * t4 * y1 + 3 * mt * t4 * t4 * y22 + t4 * t4 * t4 * y32; - } - bounds[0][jlen] = x0; - bounds[1][jlen] = y0; - bounds[0][jlen + 1] = x32; - bounds[1][jlen + 1] = y32; - bounds[0].length = bounds[1].length = jlen + 2; - return { - min: { - x: Math.min.apply(0, bounds[0]), - y: Math.min.apply(0, bounds[1]) - }, - max: { - x: Math.max.apply(0, bounds[0]), - y: Math.max.apply(0, bounds[1]) - } - }; -}; -var intersect = function(x1, y1, x22, y22, x32, y32, x42, y42) { - if (Math.max(x1, x22) < Math.min(x32, x42) || Math.min(x1, x22) > Math.max(x32, x42) || Math.max(y1, y22) < Math.min(y32, y42) || Math.min(y1, y22) > Math.max(y32, y42)) { - return; - } - var nx = (x1 * y22 - y1 * x22) * (x32 - x42) - (x1 - x22) * (x32 * y42 - y32 * x42); - var ny = (x1 * y22 - y1 * x22) * (y32 - y42) - (y1 - y22) * (x32 * y42 - y32 * x42); - var denominator = (x1 - x22) * (y32 - y42) - (y1 - y22) * (x32 - x42); - if (!denominator) { - return; - } - var px = nx / denominator; - var py = ny / denominator; - var px2 = +px.toFixed(2); - var py2 = +py.toFixed(2); - if (px2 < +Math.min(x1, x22).toFixed(2) || px2 > +Math.max(x1, x22).toFixed(2) || px2 < +Math.min(x32, x42).toFixed(2) || px2 > +Math.max(x32, x42).toFixed(2) || py2 < +Math.min(y1, y22).toFixed(2) || py2 > +Math.max(y1, y22).toFixed(2) || py2 < +Math.min(y32, y42).toFixed(2) || py2 > +Math.max(y32, y42).toFixed(2)) { - return; - } - return { - x: px, - y: py - }; -}; -var isPointInsideBBox = function(bbox, x6, y5) { - return x6 >= bbox.x && x6 <= bbox.x + bbox.width && y5 >= bbox.y && y5 <= bbox.y + bbox.height; -}; -var rectPath = function(x6, y5, w4, h3, r4) { - if (r4) { - return [ - ["M", +x6 + +r4, y5], - ["l", w4 - r4 * 2, 0], - ["a", r4, r4, 0, 0, 1, r4, r4], - ["l", 0, h3 - r4 * 2], - ["a", r4, r4, 0, 0, 1, -r4, r4], - ["l", r4 * 2 - w4, 0], - ["a", r4, r4, 0, 0, 1, -r4, -r4], - ["l", 0, r4 * 2 - h3], - ["a", r4, r4, 0, 0, 1, r4, -r4], - ["z"] - ]; - } - var res = [["M", x6, y5], ["l", w4, 0], ["l", 0, h3], ["l", -w4, 0], ["z"]]; - res.parsePathArray = parsePathArray; - return res; -}; -var box = function(x6, y5, width2, height) { - if (x6 === null) { - x6 = y5 = width2 = height = 0; - } - if (y5 === null) { - y5 = x6.y; - width2 = x6.width; - height = x6.height; - x6 = x6.x; - } - return { - x: x6, - y: y5, - width: width2, - w: width2, - height, - h: height, - x2: x6 + width2, - y2: y5 + height, - cx: x6 + width2 / 2, - cy: y5 + height / 2, - r1: Math.min(width2, height) / 2, - r2: Math.max(width2, height) / 2, - r0: Math.sqrt(width2 * width2 + height * height) / 2, - path: rectPath(x6, y5, width2, height), - vb: [x6, y5, width2, height].join(" ") - }; -}; -var isBBoxIntersect = function(bbox1, bbox2) { - bbox1 = box(bbox1); - bbox2 = box(bbox2); - return isPointInsideBBox(bbox2, bbox1.x, bbox1.y) || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y) || isPointInsideBBox(bbox2, bbox1.x, bbox1.y2) || isPointInsideBBox(bbox2, bbox1.x2, bbox1.y2) || isPointInsideBBox(bbox1, bbox2.x, bbox2.y) || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y) || isPointInsideBBox(bbox1, bbox2.x, bbox2.y2) || isPointInsideBBox(bbox1, bbox2.x2, bbox2.y2) || (bbox1.x < bbox2.x2 && bbox1.x > bbox2.x || bbox2.x < bbox1.x2 && bbox2.x > bbox1.x) && (bbox1.y < bbox2.y2 && bbox1.y > bbox2.y || bbox2.y < bbox1.y2 && bbox2.y > bbox1.y); -}; -var bezierBBox = function(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) { - if (!(0, import_util.isArray)(p1x)) { - p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y]; - } - var bbox = curveDim.apply(null, p1x); - return box(bbox.min.x, bbox.min.y, bbox.max.x - bbox.min.x, bbox.max.y - bbox.min.y); -}; -var findDotsAtSegment = function(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t4) { - var t1 = 1 - t4; - var t13 = Math.pow(t1, 3); - var t12 = Math.pow(t1, 2); - var t22 = t4 * t4; - var t32 = t22 * t4; - var x6 = t13 * p1x + t12 * 3 * t4 * c1x + t1 * 3 * t4 * t4 * c2x + t32 * p2x; - var y5 = t13 * p1y + t12 * 3 * t4 * c1y + t1 * 3 * t4 * t4 * c2y + t32 * p2y; - var mx = p1x + 2 * t4 * (c1x - p1x) + t22 * (c2x - 2 * c1x + p1x); - var my = p1y + 2 * t4 * (c1y - p1y) + t22 * (c2y - 2 * c1y + p1y); - var nx = c1x + 2 * t4 * (c2x - c1x) + t22 * (p2x - 2 * c2x + c1x); - var ny = c1y + 2 * t4 * (c2y - c1y) + t22 * (p2y - 2 * c2y + c1y); - var ax = t1 * p1x + t4 * c1x; - var ay = t1 * p1y + t4 * c1y; - var cx = t1 * c2x + t4 * p2x; - var cy = t1 * c2y + t4 * p2y; - var alpha = 90 - Math.atan2(mx - nx, my - ny) * 180 / Math.PI; - return { - x: x6, - y: y5, - m: { - x: mx, - y: my - }, - n: { - x: nx, - y: ny - }, - start: { - x: ax, - y: ay - }, - end: { - x: cx, - y: cy - }, - alpha - }; -}; -var interHelper = function(bez1, bez2, justCount) { - var bbox1 = bezierBBox(bez1); - var bbox2 = bezierBBox(bez2); - if (!isBBoxIntersect(bbox1, bbox2)) { - return justCount ? 0 : []; - } - var l1 = bezlen.apply(0, bez1); - var l22 = bezlen.apply(0, bez2); - var n1 = ~~(l1 / 8); - var n22 = ~~(l22 / 8); - var dots1 = []; - var dots2 = []; - var xy = {}; - var res = justCount ? 0 : []; - for (var i4 = 0; i4 < n1 + 1; i4++) { - var d3 = findDotsAtSegment.apply(0, bez1.concat(i4 / n1)); - dots1.push({ - x: d3.x, - y: d3.y, - t: i4 / n1 - }); - } - for (var i4 = 0; i4 < n22 + 1; i4++) { - var d3 = findDotsAtSegment.apply(0, bez2.concat(i4 / n22)); - dots2.push({ - x: d3.x, - y: d3.y, - t: i4 / n22 - }); - } - for (var i4 = 0; i4 < n1; i4++) { - for (var j4 = 0; j4 < n22; j4++) { - var di = dots1[i4]; - var di1 = dots1[i4 + 1]; - var dj = dots2[j4]; - var dj1 = dots2[j4 + 1]; - var ci = Math.abs(di1.x - di.x) < 1e-3 ? "y" : "x"; - var cj = Math.abs(dj1.x - dj.x) < 1e-3 ? "y" : "x"; - var is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y); - if (is) { - if (xy[is.x.toFixed(4)] === is.y.toFixed(4)) { - continue; - } - xy[is.x.toFixed(4)] = is.y.toFixed(4); - var t1 = di.t + Math.abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t); - var t22 = dj.t + Math.abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t); - if (t1 >= 0 && t1 <= 1 && t22 >= 0 && t22 <= 1) { - if (justCount) { - res += 1; - } else { - res.push({ - x: is.x, - y: is.y, - t1, - t2: t22 - }); - } - } - } - } - } - return res; -}; -var interPathHelper = function(path1, path2, justCount) { - path1 = pathToCurve(path1); - path2 = pathToCurve(path2); - var x1; - var y1; - var x22; - var y22; - var x1m; - var y1m; - var x2m; - var y2m; - var bez1; - var bez2; - var res = justCount ? 0 : []; - for (var i4 = 0, ii = path1.length; i4 < ii; i4++) { - var pi2 = path1[i4]; - if (pi2[0] === "M") { - x1 = x1m = pi2[1]; - y1 = y1m = pi2[2]; - } else { - if (pi2[0] === "C") { - bez1 = [x1, y1].concat(pi2.slice(1)); - x1 = bez1[6]; - y1 = bez1[7]; - } else { - bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m]; - x1 = x1m; - y1 = y1m; - } - for (var j4 = 0, jj = path2.length; j4 < jj; j4++) { - var pj = path2[j4]; - if (pj[0] === "M") { - x22 = x2m = pj[1]; - y22 = y2m = pj[2]; - } else { - if (pj[0] === "C") { - bez2 = [x22, y22].concat(pj.slice(1)); - x22 = bez2[6]; - y22 = bez2[7]; - } else { - bez2 = [x22, y22, x22, y22, x2m, y2m, x2m, y2m]; - x22 = x2m; - y22 = y2m; - } - var intr = interHelper(bez1, bez2, justCount); - if (justCount) { - res += intr; - } else { - for (var k4 = 0, kk = intr.length; k4 < kk; k4++) { - intr[k4].segment1 = i4; - intr[k4].segment2 = j4; - intr[k4].bez1 = bez1; - intr[k4].bez2 = bez2; - } - res = res.concat(intr); - } - } - } - } - } - return res; -}; -var intersection = function(path1, path2) { - return interPathHelper(path1, path2); -}; -function decasteljau(points, t4) { - var left2 = []; - var right2 = []; - function recurse(points2, t5) { - if (points2.length === 1) { - left2.push(points2[0]); - right2.push(points2[0]); - } else { - var middlePoints = []; - for (var i4 = 0; i4 < points2.length - 1; i4++) { - if (i4 === 0) { - left2.push(points2[0]); - } - if (i4 === points2.length - 2) { - right2.push(points2[i4 + 1]); - } - middlePoints[i4] = [ - (1 - t5) * points2[i4][0] + t5 * points2[i4 + 1][0], - (1 - t5) * points2[i4][1] + t5 * points2[i4 + 1][1] - ]; - } - recurse(middlePoints, t5); - } - } - if (points.length) { - recurse(points, t4); - } - return { left: left2, right: right2.reverse() }; -} -function splitCurve(start, end2, count2) { - var points = [[start[1], start[2]]]; - count2 = count2 || 2; - var segments = []; - if (end2[0] === "A") { - points.push(end2[6]); - points.push(end2[7]); - } else if (end2[0] === "C") { - points.push([end2[1], end2[2]]); - points.push([end2[3], end2[4]]); - points.push([end2[5], end2[6]]); - } else if (end2[0] === "S" || end2[0] === "Q") { - points.push([end2[1], end2[2]]); - points.push([end2[3], end2[4]]); - } else { - points.push([end2[1], end2[2]]); - } - var leftSegments = points; - var t4 = 1 / count2; - for (var i4 = 0; i4 < count2 - 1; i4++) { - var rt = t4 / (1 - t4 * i4); - var split = decasteljau(leftSegments, rt); - segments.push(split.left); - leftSegments = split.right; - } - segments.push(leftSegments); - var result = segments.map(function(segment) { - var cmd = []; - if (segment.length === 4) { - cmd.push("C"); - cmd = cmd.concat(segment[2]); - } - if (segment.length >= 3) { - if (segment.length === 3) { - cmd.push("Q"); - } - cmd = cmd.concat(segment[1]); - } - if (segment.length === 2) { - cmd.push("L"); - } - cmd = cmd.concat(segment[segment.length - 1]); - return cmd; - }); - return result; -} -var splitSegment = function(start, end2, count2) { - if (count2 === 1) { - return [[].concat(start)]; - } - var segments = []; - if (end2[0] === "L" || end2[0] === "C" || end2[0] === "Q") { - segments = segments.concat(splitCurve(start, end2, count2)); - } else { - var temp = [].concat(start); - if (temp[0] === "M") { - temp[0] = "L"; - } - for (var i4 = 0; i4 <= count2 - 1; i4++) { - segments.push(temp); - } - } - return segments; -}; -var fillPath = function(source, target) { - if (source.length === 1) { - return source; - } - var sourceLen = source.length - 1; - var targetLen = target.length - 1; - var ratio = sourceLen / targetLen; - var segmentsToFill = []; - if (source.length === 1 && source[0][0] === "M") { - for (var i4 = 0; i4 < targetLen - sourceLen; i4++) { - source.push(source[0]); - } - return source; - } - for (var i4 = 0; i4 < targetLen; i4++) { - var index2 = Math.floor(ratio * i4); - segmentsToFill[index2] = (segmentsToFill[index2] || 0) + 1; - } - var filled = segmentsToFill.reduce(function(filled2, count2, i5) { - if (i5 === sourceLen) { - return filled2.concat(source[sourceLen]); - } - return filled2.concat(splitSegment(source[i5], source[i5 + 1], count2)); - }, []); - filled.unshift(source[0]); - if (target[targetLen] === "Z" || target[targetLen] === "z") { - filled.push("Z"); - } - return filled; -}; -var isEqual = function(obj1, obj2) { - if (obj1.length !== obj2.length) { - return false; - } - var result = true; - (0, import_util.each)(obj1, function(item, i4) { - if (item !== obj2[i4]) { - result = false; - return false; - } - }); - return result; -}; -function getMinDiff(del, add8, modify) { - var type2 = null; - var min13 = modify; - if (add8 < min13) { - min13 = add8; - type2 = "add"; - } - if (del < min13) { - min13 = del; - type2 = "del"; - } - return { - type: type2, - min: min13 - }; -} -var levenshteinDistance = function(source, target) { - var sourceLen = source.length; - var targetLen = target.length; - var sourceSegment; - var targetSegment; - var temp = 0; - if (sourceLen === 0 || targetLen === 0) { - return null; - } - var dist4 = []; - for (var i4 = 0; i4 <= sourceLen; i4++) { - dist4[i4] = []; - dist4[i4][0] = { min: i4 }; - } - for (var j4 = 0; j4 <= targetLen; j4++) { - dist4[0][j4] = { min: j4 }; - } - for (var i4 = 1; i4 <= sourceLen; i4++) { - sourceSegment = source[i4 - 1]; - for (var j4 = 1; j4 <= targetLen; j4++) { - targetSegment = target[j4 - 1]; - if (isEqual(sourceSegment, targetSegment)) { - temp = 0; - } else { - temp = 1; - } - var del = dist4[i4 - 1][j4].min + 1; - var add8 = dist4[i4][j4 - 1].min + 1; - var modify = dist4[i4 - 1][j4 - 1].min + temp; - dist4[i4][j4] = getMinDiff(del, add8, modify); - } - } - return dist4; -}; -var fillPathByDiff = function(source, target) { - var diffMatrix = levenshteinDistance(source, target); - var sourceLen = source.length; - var targetLen = target.length; - var changes = []; - var index2 = 1; - var minPos = 1; - if (diffMatrix[sourceLen][targetLen].min !== sourceLen) { - for (var i4 = 1; i4 <= sourceLen; i4++) { - var min13 = diffMatrix[i4][i4].min; - minPos = i4; - for (var j4 = index2; j4 <= targetLen; j4++) { - if (diffMatrix[i4][j4].min < min13) { - min13 = diffMatrix[i4][j4].min; - minPos = j4; - } - } - index2 = minPos; - if (diffMatrix[i4][index2].type) { - changes.push({ index: i4 - 1, type: diffMatrix[i4][index2].type }); - } - } - for (var i4 = changes.length - 1; i4 >= 0; i4--) { - index2 = changes[i4].index; - if (changes[i4].type === "add") { - source.splice(index2, 0, [].concat(source[index2])); - } else { - source.splice(index2, 1); - } - } - } - sourceLen = source.length; - var diff2 = targetLen - sourceLen; - if (sourceLen < targetLen) { - for (var i4 = 0; i4 < diff2; i4++) { - if (source[sourceLen - 1][0] === "z" || source[sourceLen - 1][0] === "Z") { - source.splice(sourceLen - 2, 0, source[sourceLen - 2]); - } else { - source.push(source[sourceLen - 1]); - } - sourceLen += 1; - } - } - return source; -}; -function _splitPoints(points, former, count2) { - var result = [].concat(points); - var index2; - var t4 = 1 / (count2 + 1); - var formerEnd = _getSegmentPoints(former)[0]; - for (var i4 = 1; i4 <= count2; i4++) { - t4 *= i4; - index2 = Math.floor(points.length * t4); - if (index2 === 0) { - result.unshift([formerEnd[0] * t4 + points[index2][0] * (1 - t4), formerEnd[1] * t4 + points[index2][1] * (1 - t4)]); - } else { - result.splice(index2, 0, [ - formerEnd[0] * t4 + points[index2][0] * (1 - t4), - formerEnd[1] * t4 + points[index2][1] * (1 - t4) - ]); - } - } - return result; -} -function _getSegmentPoints(segment) { - var points = []; - switch (segment[0]) { - case "M": - points.push([segment[1], segment[2]]); - break; - case "L": - points.push([segment[1], segment[2]]); - break; - case "A": - points.push([segment[6], segment[7]]); - break; - case "Q": - points.push([segment[3], segment[4]]); - points.push([segment[1], segment[2]]); - break; - case "T": - points.push([segment[1], segment[2]]); - break; - case "C": - points.push([segment[5], segment[6]]); - points.push([segment[1], segment[2]]); - points.push([segment[3], segment[4]]); - break; - case "S": - points.push([segment[3], segment[4]]); - points.push([segment[1], segment[2]]); - break; - case "H": - points.push([segment[1], segment[1]]); - break; - case "V": - points.push([segment[1], segment[1]]); - break; - default: - } - return points; -} -var formatPath = function(fromPath, toPath) { - if (fromPath.length <= 1) { - return fromPath; - } - var points; - for (var i4 = 0; i4 < toPath.length; i4++) { - if (fromPath[i4][0] !== toPath[i4][0]) { - points = _getSegmentPoints(fromPath[i4]); - switch (toPath[i4][0]) { - case "M": - fromPath[i4] = ["M"].concat(points[0]); - break; - case "L": - fromPath[i4] = ["L"].concat(points[0]); - break; - case "A": - fromPath[i4] = [].concat(toPath[i4]); - fromPath[i4][6] = points[0][0]; - fromPath[i4][7] = points[0][1]; - break; - case "Q": - if (points.length < 2) { - if (i4 > 0) { - points = _splitPoints(points, fromPath[i4 - 1], 1); - } else { - fromPath[i4] = toPath[i4]; - break; - } - } - fromPath[i4] = ["Q"].concat(points.reduce(function(arr, i5) { - return arr.concat(i5); - }, [])); - break; - case "T": - fromPath[i4] = ["T"].concat(points[0]); - break; - case "C": - if (points.length < 3) { - if (i4 > 0) { - points = _splitPoints(points, fromPath[i4 - 1], 2); - } else { - fromPath[i4] = toPath[i4]; - break; - } - } - fromPath[i4] = ["C"].concat(points.reduce(function(arr, i5) { - return arr.concat(i5); - }, [])); - break; - case "S": - if (points.length < 2) { - if (i4 > 0) { - points = _splitPoints(points, fromPath[i4 - 1], 1); - } else { - fromPath[i4] = toPath[i4]; - break; - } - } - fromPath[i4] = ["S"].concat(points.reduce(function(arr, i5) { - return arr.concat(i5); - }, [])); - break; - default: - fromPath[i4] = toPath[i4]; - } - } - } - return fromPath; -}; - -// node_modules/@antv/g-base/esm/event/graph-event.js -var GraphEvent = function() { - function GraphEvent2(type2, event) { - this.bubbles = true; - this.target = null; - this.currentTarget = null; - this.delegateTarget = null; - this.delegateObject = null; - this.defaultPrevented = false; - this.propagationStopped = false; - this.shape = null; - this.fromShape = null; - this.toShape = null; - this.propagationPath = []; - this.type = type2; - this.name = type2; - this.originalEvent = event; - this.timeStamp = event.timeStamp; - } - GraphEvent2.prototype.preventDefault = function() { - this.defaultPrevented = true; - if (this.originalEvent.preventDefault) { - this.originalEvent.preventDefault(); - } - }; - GraphEvent2.prototype.stopPropagation = function() { - this.propagationStopped = true; - }; - GraphEvent2.prototype.toString = function() { - var type2 = this.type; - return "[Event (type=" + type2 + ")]"; - }; - GraphEvent2.prototype.save = function() { - }; - GraphEvent2.prototype.restore = function() { - }; - return GraphEvent2; -}(); -var graph_event_default = GraphEvent; - -// node_modules/@antv/g-base/esm/util/util.js -var import_util2 = __toModule(require_lib()); -function removeFromArray(arr, obj) { - var index2 = arr.indexOf(obj); - if (index2 !== -1) { - arr.splice(index2, 1); - } -} -var isBrowser = typeof window !== "undefined" && typeof window.document !== "undefined"; -function isParent(container2, shape) { - if (container2.isCanvas()) { - return true; - } - var parent = shape.getParent(); - var isParent2 = false; - while (parent) { - if (parent === container2) { - isParent2 = true; - break; - } - parent = parent.getParent(); - } - return isParent2; -} -function isAllowCapture(element) { - return element.cfg.visible && element.cfg.capture; -} - -// node_modules/@antv/g-base/esm/abstract/base.js -var Base2 = function(_super) { - __extends(Base4, _super); - function Base4(cfg) { - var _this = _super.call(this) || this; - _this.destroyed = false; - var defaultCfg2 = _this.getDefaultCfg(); - _this.cfg = (0, import_util2.mix)(defaultCfg2, cfg); - return _this; - } - Base4.prototype.getDefaultCfg = function() { - return {}; - }; - Base4.prototype.get = function(name) { - return this.cfg[name]; - }; - Base4.prototype.set = function(name, value2) { - this.cfg[name] = value2; - }; - Base4.prototype.destroy = function() { - this.cfg = { - destroyed: true - }; - this.off(); - this.destroyed = true; - }; - return Base4; -}(esm_default); -var base_default2 = Base2; - -// node_modules/detect-browser/es/index.js -var __spreadArray2 = function(to, from, pack2) { - if (pack2 || arguments.length === 2) - for (var i4 = 0, l4 = from.length, ar; i4 < l4; i4++) { - if (ar || !(i4 in from)) { - if (!ar) - ar = Array.prototype.slice.call(from, 0, i4); - ar[i4] = from[i4]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -}; -var BrowserInfo = function() { - function BrowserInfo2(name, version3, os) { - this.name = name; - this.version = version3; - this.os = os; - this.type = "browser"; - } - return BrowserInfo2; -}(); -var NodeInfo = function() { - function NodeInfo2(version3) { - this.version = version3; - this.type = "node"; - this.name = "node"; - this.os = process.platform; - } - return NodeInfo2; -}(); -var SearchBotDeviceInfo = function() { - function SearchBotDeviceInfo2(name, version3, os, bot) { - this.name = name; - this.version = version3; - this.os = os; - this.bot = bot; - this.type = "bot-device"; - } - return SearchBotDeviceInfo2; -}(); -var BotInfo = function() { - function BotInfo2() { - this.type = "bot"; - this.bot = true; - this.name = "bot"; - this.version = null; - this.os = null; - } - return BotInfo2; -}(); -var ReactNativeInfo = function() { - function ReactNativeInfo2() { - this.type = "react-native"; - this.name = "react-native"; - this.version = null; - this.os = null; - } - return ReactNativeInfo2; -}(); -var SEARCHBOX_UA_REGEX = /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/; -var SEARCHBOT_OS_REGEX = /(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/; -var REQUIRED_VERSION_PARTS = 3; -var userAgentRules = [ - ["aol", /AOLShield\/([0-9\._]+)/], - ["edge", /Edge\/([0-9\._]+)/], - ["edge-ios", /EdgiOS\/([0-9\._]+)/], - ["yandexbrowser", /YaBrowser\/([0-9\._]+)/], - ["kakaotalk", /KAKAOTALK\s([0-9\.]+)/], - ["samsung", /SamsungBrowser\/([0-9\.]+)/], - ["silk", /\bSilk\/([0-9._-]+)\b/], - ["miui", /MiuiBrowser\/([0-9\.]+)$/], - ["beaker", /BeakerBrowser\/([0-9\.]+)/], - ["edge-chromium", /EdgA?\/([0-9\.]+)/], - [ - "chromium-webview", - /(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/ - ], - ["chrome", /(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/], - ["phantomjs", /PhantomJS\/([0-9\.]+)(:?\s|$)/], - ["crios", /CriOS\/([0-9\.]+)(:?\s|$)/], - ["firefox", /Firefox\/([0-9\.]+)(?:\s|$)/], - ["fxios", /FxiOS\/([0-9\.]+)/], - ["opera-mini", /Opera Mini.*Version\/([0-9\.]+)/], - ["opera", /Opera\/([0-9\.]+)(?:\s|$)/], - ["opera", /OPR\/([0-9\.]+)(:?\s|$)/], - ["pie", /^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/], - ["pie", /^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/], - ["netfront", /^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/], - ["ie", /Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/], - ["ie", /MSIE\s([0-9\.]+);.*Trident\/[4-7].0/], - ["ie", /MSIE\s(7\.0)/], - ["bb10", /BB10;\sTouch.*Version\/([0-9\.]+)/], - ["android", /Android\s([0-9\.]+)/], - ["ios", /Version\/([0-9\._]+).*Mobile.*Safari.*/], - ["safari", /Version\/([0-9\._]+).*Safari/], - ["facebook", /FB[AS]V\/([0-9\.]+)/], - ["instagram", /Instagram\s([0-9\.]+)/], - ["ios-webview", /AppleWebKit\/([0-9\.]+).*Mobile/], - ["ios-webview", /AppleWebKit\/([0-9\.]+).*Gecko\)$/], - ["curl", /^curl\/([0-9\.]+)$/], - ["searchbot", SEARCHBOX_UA_REGEX] -]; -var operatingSystemRules = [ - ["iOS", /iP(hone|od|ad)/], - ["Android OS", /Android/], - ["BlackBerry OS", /BlackBerry|BB10/], - ["Windows Mobile", /IEMobile/], - ["Amazon OS", /Kindle/], - ["Windows 3.11", /Win16/], - ["Windows 95", /(Windows 95)|(Win95)|(Windows_95)/], - ["Windows 98", /(Windows 98)|(Win98)/], - ["Windows 2000", /(Windows NT 5.0)|(Windows 2000)/], - ["Windows XP", /(Windows NT 5.1)|(Windows XP)/], - ["Windows Server 2003", /(Windows NT 5.2)/], - ["Windows Vista", /(Windows NT 6.0)/], - ["Windows 7", /(Windows NT 6.1)/], - ["Windows 8", /(Windows NT 6.2)/], - ["Windows 8.1", /(Windows NT 6.3)/], - ["Windows 10", /(Windows NT 10.0)/], - ["Windows ME", /Windows ME/], - ["Windows CE", /Windows CE|WinCE|Microsoft Pocket Internet Explorer/], - ["Open BSD", /OpenBSD/], - ["Sun OS", /SunOS/], - ["Chrome OS", /CrOS/], - ["Linux", /(Linux)|(X11)/], - ["Mac OS", /(Mac_PowerPC)|(Macintosh)/], - ["QNX", /QNX/], - ["BeOS", /BeOS/], - ["OS/2", /OS\/2/] -]; -function detect(userAgent) { - if (!!userAgent) { - return parseUserAgent(userAgent); - } - if (typeof document === "undefined" && typeof navigator !== "undefined" && navigator.product === "ReactNative") { - return new ReactNativeInfo(); - } - if (typeof navigator !== "undefined") { - return parseUserAgent(navigator.userAgent); - } - return getNodeVersion(); -} -function matchUserAgent(ua) { - return ua !== "" && userAgentRules.reduce(function(matched, _a6) { - var browser2 = _a6[0], regex = _a6[1]; - if (matched) { - return matched; - } - var uaMatch = regex.exec(ua); - return !!uaMatch && [browser2, uaMatch]; - }, false); -} -function parseUserAgent(ua) { - var matchedRule = matchUserAgent(ua); - if (!matchedRule) { - return null; - } - var name = matchedRule[0], match = matchedRule[1]; - if (name === "searchbot") { - return new BotInfo(); - } - var versionParts = match[1] && match[1].split(".").join("_").split("_").slice(0, 3); - if (versionParts) { - if (versionParts.length < REQUIRED_VERSION_PARTS) { - versionParts = __spreadArray2(__spreadArray2([], versionParts, true), createVersionParts(REQUIRED_VERSION_PARTS - versionParts.length), true); - } - } else { - versionParts = []; - } - var version3 = versionParts.join("."); - var os = detectOS(ua); - var searchBotMatch = SEARCHBOT_OS_REGEX.exec(ua); - if (searchBotMatch && searchBotMatch[1]) { - return new SearchBotDeviceInfo(name, version3, os, searchBotMatch[1]); - } - return new BrowserInfo(name, version3, os); -} -function detectOS(ua) { - for (var ii = 0, count2 = operatingSystemRules.length; ii < count2; ii++) { - var _a6 = operatingSystemRules[ii], os = _a6[0], regex = _a6[1]; - var match = regex.exec(ua); - if (match) { - return os; - } - } - return null; -} -function getNodeVersion() { - var isNode = typeof process !== "undefined" && process.version; - return isNode ? new NodeInfo(process.version.slice(1)) : null; -} -function createVersionParts(count2) { - var output = []; - for (var ii = 0; ii < count2; ii++) { - output.push("0"); - } - return output; -} - -// node_modules/@antv/g-base/esm/abstract/container.js -var import_util6 = __toModule(require_lib()); - -// node_modules/@antv/g-base/esm/abstract/element.js -var import_util4 = __toModule(require_lib()); - -// node_modules/gl-matrix/esm/common.js -var EPSILON = 1e-6; -var ARRAY_TYPE = typeof Float32Array !== "undefined" ? Float32Array : Array; -var RANDOM = Math.random; -var degree = Math.PI / 180; -if (!Math.hypot) - Math.hypot = function() { - var y5 = 0, i4 = arguments.length; - while (i4--) { - y5 += arguments[i4] * arguments[i4]; - } - return Math.sqrt(y5); - }; - -// node_modules/gl-matrix/esm/mat3.js -var mat3_exports = {}; -__export(mat3_exports, { - add: () => add, - adjoint: () => adjoint, - clone: () => clone, - copy: () => copy, - create: () => create, - determinant: () => determinant, - equals: () => equals, - exactEquals: () => exactEquals, - frob: () => frob, - fromMat2d: () => fromMat2d, - fromMat4: () => fromMat4, - fromQuat: () => fromQuat, - fromRotation: () => fromRotation, - fromScaling: () => fromScaling, - fromTranslation: () => fromTranslation, - fromValues: () => fromValues, - identity: () => identity, - invert: () => invert, - mul: () => mul, - multiply: () => multiply, - multiplyScalar: () => multiplyScalar, - multiplyScalarAndAdd: () => multiplyScalarAndAdd, - normalFromMat4: () => normalFromMat4, - projection: () => projection, - rotate: () => rotate, - scale: () => scale, - set: () => set2, - str: () => str2, - sub: () => sub, - subtract: () => subtract, - translate: () => translate, - transpose: () => transpose -}); -function create() { - var out = new ARRAY_TYPE(9); - if (ARRAY_TYPE != Float32Array) { - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[5] = 0; - out[6] = 0; - out[7] = 0; - } - out[0] = 1; - out[4] = 1; - out[8] = 1; - return out; -} -function fromMat4(out, a4) { - out[0] = a4[0]; - out[1] = a4[1]; - out[2] = a4[2]; - out[3] = a4[4]; - out[4] = a4[5]; - out[5] = a4[6]; - out[6] = a4[8]; - out[7] = a4[9]; - out[8] = a4[10]; - return out; -} -function clone(a4) { - var out = new ARRAY_TYPE(9); - out[0] = a4[0]; - out[1] = a4[1]; - out[2] = a4[2]; - out[3] = a4[3]; - out[4] = a4[4]; - out[5] = a4[5]; - out[6] = a4[6]; - out[7] = a4[7]; - out[8] = a4[8]; - return out; -} -function copy(out, a4) { - out[0] = a4[0]; - out[1] = a4[1]; - out[2] = a4[2]; - out[3] = a4[3]; - out[4] = a4[4]; - out[5] = a4[5]; - out[6] = a4[6]; - out[7] = a4[7]; - out[8] = a4[8]; - return out; -} -function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) { - var out = new ARRAY_TYPE(9); - out[0] = m00; - out[1] = m01; - out[2] = m02; - out[3] = m10; - out[4] = m11; - out[5] = m12; - out[6] = m20; - out[7] = m21; - out[8] = m22; - return out; -} -function set2(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) { - out[0] = m00; - out[1] = m01; - out[2] = m02; - out[3] = m10; - out[4] = m11; - out[5] = m12; - out[6] = m20; - out[7] = m21; - out[8] = m22; - return out; -} -function identity(out) { - out[0] = 1; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = 1; - out[5] = 0; - out[6] = 0; - out[7] = 0; - out[8] = 1; - return out; -} -function transpose(out, a4) { - if (out === a4) { - var a01 = a4[1], a02 = a4[2], a12 = a4[5]; - out[1] = a4[3]; - out[2] = a4[6]; - out[3] = a01; - out[5] = a4[7]; - out[6] = a02; - out[7] = a12; - } else { - out[0] = a4[0]; - out[1] = a4[3]; - out[2] = a4[6]; - out[3] = a4[1]; - out[4] = a4[4]; - out[5] = a4[7]; - out[6] = a4[2]; - out[7] = a4[5]; - out[8] = a4[8]; - } - return out; -} -function invert(out, a4) { - var a00 = a4[0], a01 = a4[1], a02 = a4[2]; - var a10 = a4[3], a11 = a4[4], a12 = a4[5]; - var a20 = a4[6], a21 = a4[7], a22 = a4[8]; - var b01 = a22 * a11 - a12 * a21; - var b11 = -a22 * a10 + a12 * a20; - var b21 = a21 * a10 - a11 * a20; - var det = a00 * b01 + a01 * b11 + a02 * b21; - if (!det) { - return null; - } - det = 1 / det; - out[0] = b01 * det; - out[1] = (-a22 * a01 + a02 * a21) * det; - out[2] = (a12 * a01 - a02 * a11) * det; - out[3] = b11 * det; - out[4] = (a22 * a00 - a02 * a20) * det; - out[5] = (-a12 * a00 + a02 * a10) * det; - out[6] = b21 * det; - out[7] = (-a21 * a00 + a01 * a20) * det; - out[8] = (a11 * a00 - a01 * a10) * det; - return out; -} -function adjoint(out, a4) { - var a00 = a4[0], a01 = a4[1], a02 = a4[2]; - var a10 = a4[3], a11 = a4[4], a12 = a4[5]; - var a20 = a4[6], a21 = a4[7], a22 = a4[8]; - out[0] = a11 * a22 - a12 * a21; - out[1] = a02 * a21 - a01 * a22; - out[2] = a01 * a12 - a02 * a11; - out[3] = a12 * a20 - a10 * a22; - out[4] = a00 * a22 - a02 * a20; - out[5] = a02 * a10 - a00 * a12; - out[6] = a10 * a21 - a11 * a20; - out[7] = a01 * a20 - a00 * a21; - out[8] = a00 * a11 - a01 * a10; - return out; -} -function determinant(a4) { - var a00 = a4[0], a01 = a4[1], a02 = a4[2]; - var a10 = a4[3], a11 = a4[4], a12 = a4[5]; - var a20 = a4[6], a21 = a4[7], a22 = a4[8]; - return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20); -} -function multiply(out, a4, b10) { - var a00 = a4[0], a01 = a4[1], a02 = a4[2]; - var a10 = a4[3], a11 = a4[4], a12 = a4[5]; - var a20 = a4[6], a21 = a4[7], a22 = a4[8]; - var b00 = b10[0], b01 = b10[1], b02 = b10[2]; - var b102 = b10[3], b11 = b10[4], b12 = b10[5]; - var b20 = b10[6], b21 = b10[7], b222 = b10[8]; - out[0] = b00 * a00 + b01 * a10 + b02 * a20; - out[1] = b00 * a01 + b01 * a11 + b02 * a21; - out[2] = b00 * a02 + b01 * a12 + b02 * a22; - out[3] = b102 * a00 + b11 * a10 + b12 * a20; - out[4] = b102 * a01 + b11 * a11 + b12 * a21; - out[5] = b102 * a02 + b11 * a12 + b12 * a22; - out[6] = b20 * a00 + b21 * a10 + b222 * a20; - out[7] = b20 * a01 + b21 * a11 + b222 * a21; - out[8] = b20 * a02 + b21 * a12 + b222 * a22; - return out; -} -function translate(out, a4, v3) { - var a00 = a4[0], a01 = a4[1], a02 = a4[2], a10 = a4[3], a11 = a4[4], a12 = a4[5], a20 = a4[6], a21 = a4[7], a22 = a4[8], x6 = v3[0], y5 = v3[1]; - out[0] = a00; - out[1] = a01; - out[2] = a02; - out[3] = a10; - out[4] = a11; - out[5] = a12; - out[6] = x6 * a00 + y5 * a10 + a20; - out[7] = x6 * a01 + y5 * a11 + a21; - out[8] = x6 * a02 + y5 * a12 + a22; - return out; -} -function rotate(out, a4, rad) { - var a00 = a4[0], a01 = a4[1], a02 = a4[2], a10 = a4[3], a11 = a4[4], a12 = a4[5], a20 = a4[6], a21 = a4[7], a22 = a4[8], s4 = Math.sin(rad), c5 = Math.cos(rad); - out[0] = c5 * a00 + s4 * a10; - out[1] = c5 * a01 + s4 * a11; - out[2] = c5 * a02 + s4 * a12; - out[3] = c5 * a10 - s4 * a00; - out[4] = c5 * a11 - s4 * a01; - out[5] = c5 * a12 - s4 * a02; - out[6] = a20; - out[7] = a21; - out[8] = a22; - return out; -} -function scale(out, a4, v3) { - var x6 = v3[0], y5 = v3[1]; - out[0] = x6 * a4[0]; - out[1] = x6 * a4[1]; - out[2] = x6 * a4[2]; - out[3] = y5 * a4[3]; - out[4] = y5 * a4[4]; - out[5] = y5 * a4[5]; - out[6] = a4[6]; - out[7] = a4[7]; - out[8] = a4[8]; - return out; -} -function fromTranslation(out, v3) { - out[0] = 1; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = 1; - out[5] = 0; - out[6] = v3[0]; - out[7] = v3[1]; - out[8] = 1; - return out; -} -function fromRotation(out, rad) { - var s4 = Math.sin(rad), c5 = Math.cos(rad); - out[0] = c5; - out[1] = s4; - out[2] = 0; - out[3] = -s4; - out[4] = c5; - out[5] = 0; - out[6] = 0; - out[7] = 0; - out[8] = 1; - return out; -} -function fromScaling(out, v3) { - out[0] = v3[0]; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = v3[1]; - out[5] = 0; - out[6] = 0; - out[7] = 0; - out[8] = 1; - return out; -} -function fromMat2d(out, a4) { - out[0] = a4[0]; - out[1] = a4[1]; - out[2] = 0; - out[3] = a4[2]; - out[4] = a4[3]; - out[5] = 0; - out[6] = a4[4]; - out[7] = a4[5]; - out[8] = 1; - return out; -} -function fromQuat(out, q3) { - var x6 = q3[0], y5 = q3[1], z3 = q3[2], w4 = q3[3]; - var x22 = x6 + x6; - var y22 = y5 + y5; - var z22 = z3 + z3; - var xx = x6 * x22; - var yx = y5 * x22; - var yy = y5 * y22; - var zx = z3 * x22; - var zy = z3 * y22; - var zz = z3 * z22; - var wx = w4 * x22; - var wy = w4 * y22; - var wz = w4 * z22; - out[0] = 1 - yy - zz; - out[3] = yx - wz; - out[6] = zx + wy; - out[1] = yx + wz; - out[4] = 1 - xx - zz; - out[7] = zy - wx; - out[2] = zx - wy; - out[5] = zy + wx; - out[8] = 1 - xx - yy; - return out; -} -function normalFromMat4(out, a4) { - var a00 = a4[0], a01 = a4[1], a02 = a4[2], a03 = a4[3]; - var a10 = a4[4], a11 = a4[5], a12 = a4[6], a13 = a4[7]; - var a20 = a4[8], a21 = a4[9], a22 = a4[10], a23 = a4[11]; - var a30 = a4[12], a31 = a4[13], a32 = a4[14], a33 = a4[15]; - var b00 = a00 * a11 - a01 * a10; - var b01 = a00 * a12 - a02 * a10; - var b02 = a00 * a13 - a03 * a10; - var b03 = a01 * a12 - a02 * a11; - var b04 = a01 * a13 - a03 * a11; - var b05 = a02 * a13 - a03 * a12; - var b06 = a20 * a31 - a21 * a30; - var b07 = a20 * a32 - a22 * a30; - var b08 = a20 * a33 - a23 * a30; - var b09 = a21 * a32 - a22 * a31; - var b10 = a21 * a33 - a23 * a31; - var b11 = a22 * a33 - a23 * a32; - var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; - if (!det) { - return null; - } - det = 1 / det; - out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det; - out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det; - out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det; - out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det; - out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det; - out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det; - out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det; - out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det; - out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det; - return out; -} -function projection(out, width2, height) { - out[0] = 2 / width2; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = -2 / height; - out[5] = 0; - out[6] = -1; - out[7] = 1; - out[8] = 1; - return out; -} -function str2(a4) { - return "mat3(" + a4[0] + ", " + a4[1] + ", " + a4[2] + ", " + a4[3] + ", " + a4[4] + ", " + a4[5] + ", " + a4[6] + ", " + a4[7] + ", " + a4[8] + ")"; -} -function frob(a4) { - return Math.hypot(a4[0], a4[1], a4[2], a4[3], a4[4], a4[5], a4[6], a4[7], a4[8]); -} -function add(out, a4, b10) { - out[0] = a4[0] + b10[0]; - out[1] = a4[1] + b10[1]; - out[2] = a4[2] + b10[2]; - out[3] = a4[3] + b10[3]; - out[4] = a4[4] + b10[4]; - out[5] = a4[5] + b10[5]; - out[6] = a4[6] + b10[6]; - out[7] = a4[7] + b10[7]; - out[8] = a4[8] + b10[8]; - return out; -} -function subtract(out, a4, b10) { - out[0] = a4[0] - b10[0]; - out[1] = a4[1] - b10[1]; - out[2] = a4[2] - b10[2]; - out[3] = a4[3] - b10[3]; - out[4] = a4[4] - b10[4]; - out[5] = a4[5] - b10[5]; - out[6] = a4[6] - b10[6]; - out[7] = a4[7] - b10[7]; - out[8] = a4[8] - b10[8]; - return out; -} -function multiplyScalar(out, a4, b10) { - out[0] = a4[0] * b10; - out[1] = a4[1] * b10; - out[2] = a4[2] * b10; - out[3] = a4[3] * b10; - out[4] = a4[4] * b10; - out[5] = a4[5] * b10; - out[6] = a4[6] * b10; - out[7] = a4[7] * b10; - out[8] = a4[8] * b10; - return out; -} -function multiplyScalarAndAdd(out, a4, b10, scale12) { - out[0] = a4[0] + b10[0] * scale12; - out[1] = a4[1] + b10[1] * scale12; - out[2] = a4[2] + b10[2] * scale12; - out[3] = a4[3] + b10[3] * scale12; - out[4] = a4[4] + b10[4] * scale12; - out[5] = a4[5] + b10[5] * scale12; - out[6] = a4[6] + b10[6] * scale12; - out[7] = a4[7] + b10[7] * scale12; - out[8] = a4[8] + b10[8] * scale12; - return out; -} -function exactEquals(a4, b10) { - return a4[0] === b10[0] && a4[1] === b10[1] && a4[2] === b10[2] && a4[3] === b10[3] && a4[4] === b10[4] && a4[5] === b10[5] && a4[6] === b10[6] && a4[7] === b10[7] && a4[8] === b10[8]; -} -function equals(a4, b10) { - var a0 = a4[0], a1 = a4[1], a22 = a4[2], a32 = a4[3], a42 = a4[4], a5 = a4[5], a6 = a4[6], a7 = a4[7], a8 = a4[8]; - var b02 = b10[0], b12 = b10[1], b23 = b10[2], b32 = b10[3], b42 = b10[4], b52 = b10[5], b62 = b10[6], b72 = b10[7], b82 = b10[8]; - return Math.abs(a0 - b02) <= EPSILON * Math.max(1, Math.abs(a0), Math.abs(b02)) && Math.abs(a1 - b12) <= EPSILON * Math.max(1, Math.abs(a1), Math.abs(b12)) && Math.abs(a22 - b23) <= EPSILON * Math.max(1, Math.abs(a22), Math.abs(b23)) && Math.abs(a32 - b32) <= EPSILON * Math.max(1, Math.abs(a32), Math.abs(b32)) && Math.abs(a42 - b42) <= EPSILON * Math.max(1, Math.abs(a42), Math.abs(b42)) && Math.abs(a5 - b52) <= EPSILON * Math.max(1, Math.abs(a5), Math.abs(b52)) && Math.abs(a6 - b62) <= EPSILON * Math.max(1, Math.abs(a6), Math.abs(b62)) && Math.abs(a7 - b72) <= EPSILON * Math.max(1, Math.abs(a7), Math.abs(b72)) && Math.abs(a8 - b82) <= EPSILON * Math.max(1, Math.abs(a8), Math.abs(b82)); -} -var mul = multiply; -var sub = subtract; - -// node_modules/gl-matrix/esm/mat4.js -var mat4_exports = {}; -__export(mat4_exports, { - add: () => add2, - adjoint: () => adjoint2, - clone: () => clone2, - copy: () => copy2, - create: () => create2, - determinant: () => determinant2, - equals: () => equals2, - exactEquals: () => exactEquals2, - frob: () => frob2, - fromQuat: () => fromQuat3, - fromQuat2: () => fromQuat2, - fromRotation: () => fromRotation2, - fromRotationTranslation: () => fromRotationTranslation, - fromRotationTranslationScale: () => fromRotationTranslationScale, - fromRotationTranslationScaleOrigin: () => fromRotationTranslationScaleOrigin, - fromScaling: () => fromScaling2, - fromTranslation: () => fromTranslation2, - fromValues: () => fromValues2, - fromXRotation: () => fromXRotation, - fromYRotation: () => fromYRotation, - fromZRotation: () => fromZRotation, - frustum: () => frustum, - getRotation: () => getRotation, - getScaling: () => getScaling, - getTranslation: () => getTranslation, - identity: () => identity2, - invert: () => invert2, - lookAt: () => lookAt, - mul: () => mul2, - multiply: () => multiply2, - multiplyScalar: () => multiplyScalar2, - multiplyScalarAndAdd: () => multiplyScalarAndAdd2, - ortho: () => ortho, - orthoNO: () => orthoNO, - orthoZO: () => orthoZO, - perspective: () => perspective, - perspectiveFromFieldOfView: () => perspectiveFromFieldOfView, - perspectiveNO: () => perspectiveNO, - perspectiveZO: () => perspectiveZO, - rotate: () => rotate2, - rotateX: () => rotateX, - rotateY: () => rotateY, - rotateZ: () => rotateZ, - scale: () => scale2, - set: () => set3, - str: () => str3, - sub: () => sub2, - subtract: () => subtract2, - targetTo: () => targetTo, - translate: () => translate2, - transpose: () => transpose2 -}); -function create2() { - var out = new ARRAY_TYPE(16); - if (ARRAY_TYPE != Float32Array) { - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = 0; - out[6] = 0; - out[7] = 0; - out[8] = 0; - out[9] = 0; - out[11] = 0; - out[12] = 0; - out[13] = 0; - out[14] = 0; - } - out[0] = 1; - out[5] = 1; - out[10] = 1; - out[15] = 1; - return out; -} -function clone2(a4) { - var out = new ARRAY_TYPE(16); - out[0] = a4[0]; - out[1] = a4[1]; - out[2] = a4[2]; - out[3] = a4[3]; - out[4] = a4[4]; - out[5] = a4[5]; - out[6] = a4[6]; - out[7] = a4[7]; - out[8] = a4[8]; - out[9] = a4[9]; - out[10] = a4[10]; - out[11] = a4[11]; - out[12] = a4[12]; - out[13] = a4[13]; - out[14] = a4[14]; - out[15] = a4[15]; - return out; -} -function copy2(out, a4) { - out[0] = a4[0]; - out[1] = a4[1]; - out[2] = a4[2]; - out[3] = a4[3]; - out[4] = a4[4]; - out[5] = a4[5]; - out[6] = a4[6]; - out[7] = a4[7]; - out[8] = a4[8]; - out[9] = a4[9]; - out[10] = a4[10]; - out[11] = a4[11]; - out[12] = a4[12]; - out[13] = a4[13]; - out[14] = a4[14]; - out[15] = a4[15]; - return out; -} -function fromValues2(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) { - var out = new ARRAY_TYPE(16); - out[0] = m00; - out[1] = m01; - out[2] = m02; - out[3] = m03; - out[4] = m10; - out[5] = m11; - out[6] = m12; - out[7] = m13; - out[8] = m20; - out[9] = m21; - out[10] = m22; - out[11] = m23; - out[12] = m30; - out[13] = m31; - out[14] = m32; - out[15] = m33; - return out; -} -function set3(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) { - out[0] = m00; - out[1] = m01; - out[2] = m02; - out[3] = m03; - out[4] = m10; - out[5] = m11; - out[6] = m12; - out[7] = m13; - out[8] = m20; - out[9] = m21; - out[10] = m22; - out[11] = m23; - out[12] = m30; - out[13] = m31; - out[14] = m32; - out[15] = m33; - return out; -} -function identity2(out) { - out[0] = 1; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = 0; - out[5] = 1; - out[6] = 0; - out[7] = 0; - out[8] = 0; - out[9] = 0; - out[10] = 1; - out[11] = 0; - out[12] = 0; - out[13] = 0; - out[14] = 0; - out[15] = 1; - return out; -} -function transpose2(out, a4) { - if (out === a4) { - var a01 = a4[1], a02 = a4[2], a03 = a4[3]; - var a12 = a4[6], a13 = a4[7]; - var a23 = a4[11]; - out[1] = a4[4]; - out[2] = a4[8]; - out[3] = a4[12]; - out[4] = a01; - out[6] = a4[9]; - out[7] = a4[13]; - out[8] = a02; - out[9] = a12; - out[11] = a4[14]; - out[12] = a03; - out[13] = a13; - out[14] = a23; - } else { - out[0] = a4[0]; - out[1] = a4[4]; - out[2] = a4[8]; - out[3] = a4[12]; - out[4] = a4[1]; - out[5] = a4[5]; - out[6] = a4[9]; - out[7] = a4[13]; - out[8] = a4[2]; - out[9] = a4[6]; - out[10] = a4[10]; - out[11] = a4[14]; - out[12] = a4[3]; - out[13] = a4[7]; - out[14] = a4[11]; - out[15] = a4[15]; - } - return out; -} -function invert2(out, a4) { - var a00 = a4[0], a01 = a4[1], a02 = a4[2], a03 = a4[3]; - var a10 = a4[4], a11 = a4[5], a12 = a4[6], a13 = a4[7]; - var a20 = a4[8], a21 = a4[9], a22 = a4[10], a23 = a4[11]; - var a30 = a4[12], a31 = a4[13], a32 = a4[14], a33 = a4[15]; - var b00 = a00 * a11 - a01 * a10; - var b01 = a00 * a12 - a02 * a10; - var b02 = a00 * a13 - a03 * a10; - var b03 = a01 * a12 - a02 * a11; - var b04 = a01 * a13 - a03 * a11; - var b05 = a02 * a13 - a03 * a12; - var b06 = a20 * a31 - a21 * a30; - var b07 = a20 * a32 - a22 * a30; - var b08 = a20 * a33 - a23 * a30; - var b09 = a21 * a32 - a22 * a31; - var b10 = a21 * a33 - a23 * a31; - var b11 = a22 * a33 - a23 * a32; - var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; - if (!det) { - return null; - } - det = 1 / det; - out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det; - out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det; - out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det; - out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det; - out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det; - out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det; - out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det; - out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det; - out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det; - out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det; - out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det; - out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det; - out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det; - out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det; - out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det; - out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det; - return out; -} -function adjoint2(out, a4) { - var a00 = a4[0], a01 = a4[1], a02 = a4[2], a03 = a4[3]; - var a10 = a4[4], a11 = a4[5], a12 = a4[6], a13 = a4[7]; - var a20 = a4[8], a21 = a4[9], a22 = a4[10], a23 = a4[11]; - var a30 = a4[12], a31 = a4[13], a32 = a4[14], a33 = a4[15]; - out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22); - out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22)); - out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12); - out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12)); - out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22)); - out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22); - out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12)); - out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12); - out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21); - out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21)); - out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11); - out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11)); - out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21)); - out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21); - out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11)); - out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11); - return out; -} -function determinant2(a4) { - var a00 = a4[0], a01 = a4[1], a02 = a4[2], a03 = a4[3]; - var a10 = a4[4], a11 = a4[5], a12 = a4[6], a13 = a4[7]; - var a20 = a4[8], a21 = a4[9], a22 = a4[10], a23 = a4[11]; - var a30 = a4[12], a31 = a4[13], a32 = a4[14], a33 = a4[15]; - var b00 = a00 * a11 - a01 * a10; - var b01 = a00 * a12 - a02 * a10; - var b02 = a00 * a13 - a03 * a10; - var b03 = a01 * a12 - a02 * a11; - var b04 = a01 * a13 - a03 * a11; - var b05 = a02 * a13 - a03 * a12; - var b06 = a20 * a31 - a21 * a30; - var b07 = a20 * a32 - a22 * a30; - var b08 = a20 * a33 - a23 * a30; - var b09 = a21 * a32 - a22 * a31; - var b10 = a21 * a33 - a23 * a31; - var b11 = a22 * a33 - a23 * a32; - return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; -} -function multiply2(out, a4, b10) { - var a00 = a4[0], a01 = a4[1], a02 = a4[2], a03 = a4[3]; - var a10 = a4[4], a11 = a4[5], a12 = a4[6], a13 = a4[7]; - var a20 = a4[8], a21 = a4[9], a22 = a4[10], a23 = a4[11]; - var a30 = a4[12], a31 = a4[13], a32 = a4[14], a33 = a4[15]; - var b02 = b10[0], b12 = b10[1], b23 = b10[2], b32 = b10[3]; - out[0] = b02 * a00 + b12 * a10 + b23 * a20 + b32 * a30; - out[1] = b02 * a01 + b12 * a11 + b23 * a21 + b32 * a31; - out[2] = b02 * a02 + b12 * a12 + b23 * a22 + b32 * a32; - out[3] = b02 * a03 + b12 * a13 + b23 * a23 + b32 * a33; - b02 = b10[4]; - b12 = b10[5]; - b23 = b10[6]; - b32 = b10[7]; - out[4] = b02 * a00 + b12 * a10 + b23 * a20 + b32 * a30; - out[5] = b02 * a01 + b12 * a11 + b23 * a21 + b32 * a31; - out[6] = b02 * a02 + b12 * a12 + b23 * a22 + b32 * a32; - out[7] = b02 * a03 + b12 * a13 + b23 * a23 + b32 * a33; - b02 = b10[8]; - b12 = b10[9]; - b23 = b10[10]; - b32 = b10[11]; - out[8] = b02 * a00 + b12 * a10 + b23 * a20 + b32 * a30; - out[9] = b02 * a01 + b12 * a11 + b23 * a21 + b32 * a31; - out[10] = b02 * a02 + b12 * a12 + b23 * a22 + b32 * a32; - out[11] = b02 * a03 + b12 * a13 + b23 * a23 + b32 * a33; - b02 = b10[12]; - b12 = b10[13]; - b23 = b10[14]; - b32 = b10[15]; - out[12] = b02 * a00 + b12 * a10 + b23 * a20 + b32 * a30; - out[13] = b02 * a01 + b12 * a11 + b23 * a21 + b32 * a31; - out[14] = b02 * a02 + b12 * a12 + b23 * a22 + b32 * a32; - out[15] = b02 * a03 + b12 * a13 + b23 * a23 + b32 * a33; - return out; -} -function translate2(out, a4, v3) { - var x6 = v3[0], y5 = v3[1], z3 = v3[2]; - var a00, a01, a02, a03; - var a10, a11, a12, a13; - var a20, a21, a22, a23; - if (a4 === out) { - out[12] = a4[0] * x6 + a4[4] * y5 + a4[8] * z3 + a4[12]; - out[13] = a4[1] * x6 + a4[5] * y5 + a4[9] * z3 + a4[13]; - out[14] = a4[2] * x6 + a4[6] * y5 + a4[10] * z3 + a4[14]; - out[15] = a4[3] * x6 + a4[7] * y5 + a4[11] * z3 + a4[15]; - } else { - a00 = a4[0]; - a01 = a4[1]; - a02 = a4[2]; - a03 = a4[3]; - a10 = a4[4]; - a11 = a4[5]; - a12 = a4[6]; - a13 = a4[7]; - a20 = a4[8]; - a21 = a4[9]; - a22 = a4[10]; - a23 = a4[11]; - out[0] = a00; - out[1] = a01; - out[2] = a02; - out[3] = a03; - out[4] = a10; - out[5] = a11; - out[6] = a12; - out[7] = a13; - out[8] = a20; - out[9] = a21; - out[10] = a22; - out[11] = a23; - out[12] = a00 * x6 + a10 * y5 + a20 * z3 + a4[12]; - out[13] = a01 * x6 + a11 * y5 + a21 * z3 + a4[13]; - out[14] = a02 * x6 + a12 * y5 + a22 * z3 + a4[14]; - out[15] = a03 * x6 + a13 * y5 + a23 * z3 + a4[15]; - } - return out; -} -function scale2(out, a4, v3) { - var x6 = v3[0], y5 = v3[1], z3 = v3[2]; - out[0] = a4[0] * x6; - out[1] = a4[1] * x6; - out[2] = a4[2] * x6; - out[3] = a4[3] * x6; - out[4] = a4[4] * y5; - out[5] = a4[5] * y5; - out[6] = a4[6] * y5; - out[7] = a4[7] * y5; - out[8] = a4[8] * z3; - out[9] = a4[9] * z3; - out[10] = a4[10] * z3; - out[11] = a4[11] * z3; - out[12] = a4[12]; - out[13] = a4[13]; - out[14] = a4[14]; - out[15] = a4[15]; - return out; -} -function rotate2(out, a4, rad, axis22) { - var x6 = axis22[0], y5 = axis22[1], z3 = axis22[2]; - var len5 = Math.hypot(x6, y5, z3); - var s4, c5, t4; - var a00, a01, a02, a03; - var a10, a11, a12, a13; - var a20, a21, a22, a23; - var b00, b01, b02; - var b10, b11, b12; - var b20, b21, b222; - if (len5 < EPSILON) { - return null; - } - len5 = 1 / len5; - x6 *= len5; - y5 *= len5; - z3 *= len5; - s4 = Math.sin(rad); - c5 = Math.cos(rad); - t4 = 1 - c5; - a00 = a4[0]; - a01 = a4[1]; - a02 = a4[2]; - a03 = a4[3]; - a10 = a4[4]; - a11 = a4[5]; - a12 = a4[6]; - a13 = a4[7]; - a20 = a4[8]; - a21 = a4[9]; - a22 = a4[10]; - a23 = a4[11]; - b00 = x6 * x6 * t4 + c5; - b01 = y5 * x6 * t4 + z3 * s4; - b02 = z3 * x6 * t4 - y5 * s4; - b10 = x6 * y5 * t4 - z3 * s4; - b11 = y5 * y5 * t4 + c5; - b12 = z3 * y5 * t4 + x6 * s4; - b20 = x6 * z3 * t4 + y5 * s4; - b21 = y5 * z3 * t4 - x6 * s4; - b222 = z3 * z3 * t4 + c5; - out[0] = a00 * b00 + a10 * b01 + a20 * b02; - out[1] = a01 * b00 + a11 * b01 + a21 * b02; - out[2] = a02 * b00 + a12 * b01 + a22 * b02; - out[3] = a03 * b00 + a13 * b01 + a23 * b02; - out[4] = a00 * b10 + a10 * b11 + a20 * b12; - out[5] = a01 * b10 + a11 * b11 + a21 * b12; - out[6] = a02 * b10 + a12 * b11 + a22 * b12; - out[7] = a03 * b10 + a13 * b11 + a23 * b12; - out[8] = a00 * b20 + a10 * b21 + a20 * b222; - out[9] = a01 * b20 + a11 * b21 + a21 * b222; - out[10] = a02 * b20 + a12 * b21 + a22 * b222; - out[11] = a03 * b20 + a13 * b21 + a23 * b222; - if (a4 !== out) { - out[12] = a4[12]; - out[13] = a4[13]; - out[14] = a4[14]; - out[15] = a4[15]; - } - return out; -} -function rotateX(out, a4, rad) { - var s4 = Math.sin(rad); - var c5 = Math.cos(rad); - var a10 = a4[4]; - var a11 = a4[5]; - var a12 = a4[6]; - var a13 = a4[7]; - var a20 = a4[8]; - var a21 = a4[9]; - var a22 = a4[10]; - var a23 = a4[11]; - if (a4 !== out) { - out[0] = a4[0]; - out[1] = a4[1]; - out[2] = a4[2]; - out[3] = a4[3]; - out[12] = a4[12]; - out[13] = a4[13]; - out[14] = a4[14]; - out[15] = a4[15]; - } - out[4] = a10 * c5 + a20 * s4; - out[5] = a11 * c5 + a21 * s4; - out[6] = a12 * c5 + a22 * s4; - out[7] = a13 * c5 + a23 * s4; - out[8] = a20 * c5 - a10 * s4; - out[9] = a21 * c5 - a11 * s4; - out[10] = a22 * c5 - a12 * s4; - out[11] = a23 * c5 - a13 * s4; - return out; -} -function rotateY(out, a4, rad) { - var s4 = Math.sin(rad); - var c5 = Math.cos(rad); - var a00 = a4[0]; - var a01 = a4[1]; - var a02 = a4[2]; - var a03 = a4[3]; - var a20 = a4[8]; - var a21 = a4[9]; - var a22 = a4[10]; - var a23 = a4[11]; - if (a4 !== out) { - out[4] = a4[4]; - out[5] = a4[5]; - out[6] = a4[6]; - out[7] = a4[7]; - out[12] = a4[12]; - out[13] = a4[13]; - out[14] = a4[14]; - out[15] = a4[15]; - } - out[0] = a00 * c5 - a20 * s4; - out[1] = a01 * c5 - a21 * s4; - out[2] = a02 * c5 - a22 * s4; - out[3] = a03 * c5 - a23 * s4; - out[8] = a00 * s4 + a20 * c5; - out[9] = a01 * s4 + a21 * c5; - out[10] = a02 * s4 + a22 * c5; - out[11] = a03 * s4 + a23 * c5; - return out; -} -function rotateZ(out, a4, rad) { - var s4 = Math.sin(rad); - var c5 = Math.cos(rad); - var a00 = a4[0]; - var a01 = a4[1]; - var a02 = a4[2]; - var a03 = a4[3]; - var a10 = a4[4]; - var a11 = a4[5]; - var a12 = a4[6]; - var a13 = a4[7]; - if (a4 !== out) { - out[8] = a4[8]; - out[9] = a4[9]; - out[10] = a4[10]; - out[11] = a4[11]; - out[12] = a4[12]; - out[13] = a4[13]; - out[14] = a4[14]; - out[15] = a4[15]; - } - out[0] = a00 * c5 + a10 * s4; - out[1] = a01 * c5 + a11 * s4; - out[2] = a02 * c5 + a12 * s4; - out[3] = a03 * c5 + a13 * s4; - out[4] = a10 * c5 - a00 * s4; - out[5] = a11 * c5 - a01 * s4; - out[6] = a12 * c5 - a02 * s4; - out[7] = a13 * c5 - a03 * s4; - return out; -} -function fromTranslation2(out, v3) { - out[0] = 1; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = 0; - out[5] = 1; - out[6] = 0; - out[7] = 0; - out[8] = 0; - out[9] = 0; - out[10] = 1; - out[11] = 0; - out[12] = v3[0]; - out[13] = v3[1]; - out[14] = v3[2]; - out[15] = 1; - return out; -} -function fromScaling2(out, v3) { - out[0] = v3[0]; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = 0; - out[5] = v3[1]; - out[6] = 0; - out[7] = 0; - out[8] = 0; - out[9] = 0; - out[10] = v3[2]; - out[11] = 0; - out[12] = 0; - out[13] = 0; - out[14] = 0; - out[15] = 1; - return out; -} -function fromRotation2(out, rad, axis22) { - var x6 = axis22[0], y5 = axis22[1], z3 = axis22[2]; - var len5 = Math.hypot(x6, y5, z3); - var s4, c5, t4; - if (len5 < EPSILON) { - return null; - } - len5 = 1 / len5; - x6 *= len5; - y5 *= len5; - z3 *= len5; - s4 = Math.sin(rad); - c5 = Math.cos(rad); - t4 = 1 - c5; - out[0] = x6 * x6 * t4 + c5; - out[1] = y5 * x6 * t4 + z3 * s4; - out[2] = z3 * x6 * t4 - y5 * s4; - out[3] = 0; - out[4] = x6 * y5 * t4 - z3 * s4; - out[5] = y5 * y5 * t4 + c5; - out[6] = z3 * y5 * t4 + x6 * s4; - out[7] = 0; - out[8] = x6 * z3 * t4 + y5 * s4; - out[9] = y5 * z3 * t4 - x6 * s4; - out[10] = z3 * z3 * t4 + c5; - out[11] = 0; - out[12] = 0; - out[13] = 0; - out[14] = 0; - out[15] = 1; - return out; -} -function fromXRotation(out, rad) { - var s4 = Math.sin(rad); - var c5 = Math.cos(rad); - out[0] = 1; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = 0; - out[5] = c5; - out[6] = s4; - out[7] = 0; - out[8] = 0; - out[9] = -s4; - out[10] = c5; - out[11] = 0; - out[12] = 0; - out[13] = 0; - out[14] = 0; - out[15] = 1; - return out; -} -function fromYRotation(out, rad) { - var s4 = Math.sin(rad); - var c5 = Math.cos(rad); - out[0] = c5; - out[1] = 0; - out[2] = -s4; - out[3] = 0; - out[4] = 0; - out[5] = 1; - out[6] = 0; - out[7] = 0; - out[8] = s4; - out[9] = 0; - out[10] = c5; - out[11] = 0; - out[12] = 0; - out[13] = 0; - out[14] = 0; - out[15] = 1; - return out; -} -function fromZRotation(out, rad) { - var s4 = Math.sin(rad); - var c5 = Math.cos(rad); - out[0] = c5; - out[1] = s4; - out[2] = 0; - out[3] = 0; - out[4] = -s4; - out[5] = c5; - out[6] = 0; - out[7] = 0; - out[8] = 0; - out[9] = 0; - out[10] = 1; - out[11] = 0; - out[12] = 0; - out[13] = 0; - out[14] = 0; - out[15] = 1; - return out; -} -function fromRotationTranslation(out, q3, v3) { - var x6 = q3[0], y5 = q3[1], z3 = q3[2], w4 = q3[3]; - var x22 = x6 + x6; - var y22 = y5 + y5; - var z22 = z3 + z3; - var xx = x6 * x22; - var xy = x6 * y22; - var xz = x6 * z22; - var yy = y5 * y22; - var yz = y5 * z22; - var zz = z3 * z22; - var wx = w4 * x22; - var wy = w4 * y22; - var wz = w4 * z22; - out[0] = 1 - (yy + zz); - out[1] = xy + wz; - out[2] = xz - wy; - out[3] = 0; - out[4] = xy - wz; - out[5] = 1 - (xx + zz); - out[6] = yz + wx; - out[7] = 0; - out[8] = xz + wy; - out[9] = yz - wx; - out[10] = 1 - (xx + yy); - out[11] = 0; - out[12] = v3[0]; - out[13] = v3[1]; - out[14] = v3[2]; - out[15] = 1; - return out; -} -function fromQuat2(out, a4) { - var translation = new ARRAY_TYPE(3); - var bx = -a4[0], by = -a4[1], bz = -a4[2], bw = a4[3], ax = a4[4], ay = a4[5], az = a4[6], aw = a4[7]; - var magnitude = bx * bx + by * by + bz * bz + bw * bw; - if (magnitude > 0) { - translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude; - translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude; - translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude; - } else { - translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2; - translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2; - translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2; - } - fromRotationTranslation(out, a4, translation); - return out; -} -function getTranslation(out, mat) { - out[0] = mat[12]; - out[1] = mat[13]; - out[2] = mat[14]; - return out; -} -function getScaling(out, mat) { - var m11 = mat[0]; - var m12 = mat[1]; - var m13 = mat[2]; - var m21 = mat[4]; - var m22 = mat[5]; - var m23 = mat[6]; - var m31 = mat[8]; - var m32 = mat[9]; - var m33 = mat[10]; - out[0] = Math.hypot(m11, m12, m13); - out[1] = Math.hypot(m21, m22, m23); - out[2] = Math.hypot(m31, m32, m33); - return out; -} -function getRotation(out, mat) { - var scaling = new ARRAY_TYPE(3); - getScaling(scaling, mat); - var is1 = 1 / scaling[0]; - var is2 = 1 / scaling[1]; - var is3 = 1 / scaling[2]; - var sm11 = mat[0] * is1; - var sm12 = mat[1] * is2; - var sm13 = mat[2] * is3; - var sm21 = mat[4] * is1; - var sm22 = mat[5] * is2; - var sm23 = mat[6] * is3; - var sm31 = mat[8] * is1; - var sm32 = mat[9] * is2; - var sm33 = mat[10] * is3; - var trace = sm11 + sm22 + sm33; - var S3 = 0; - if (trace > 0) { - S3 = Math.sqrt(trace + 1) * 2; - out[3] = 0.25 * S3; - out[0] = (sm23 - sm32) / S3; - out[1] = (sm31 - sm13) / S3; - out[2] = (sm12 - sm21) / S3; - } else if (sm11 > sm22 && sm11 > sm33) { - S3 = Math.sqrt(1 + sm11 - sm22 - sm33) * 2; - out[3] = (sm23 - sm32) / S3; - out[0] = 0.25 * S3; - out[1] = (sm12 + sm21) / S3; - out[2] = (sm31 + sm13) / S3; - } else if (sm22 > sm33) { - S3 = Math.sqrt(1 + sm22 - sm11 - sm33) * 2; - out[3] = (sm31 - sm13) / S3; - out[0] = (sm12 + sm21) / S3; - out[1] = 0.25 * S3; - out[2] = (sm23 + sm32) / S3; - } else { - S3 = Math.sqrt(1 + sm33 - sm11 - sm22) * 2; - out[3] = (sm12 - sm21) / S3; - out[0] = (sm31 + sm13) / S3; - out[1] = (sm23 + sm32) / S3; - out[2] = 0.25 * S3; - } - return out; -} -function fromRotationTranslationScale(out, q3, v3, s4) { - var x6 = q3[0], y5 = q3[1], z3 = q3[2], w4 = q3[3]; - var x22 = x6 + x6; - var y22 = y5 + y5; - var z22 = z3 + z3; - var xx = x6 * x22; - var xy = x6 * y22; - var xz = x6 * z22; - var yy = y5 * y22; - var yz = y5 * z22; - var zz = z3 * z22; - var wx = w4 * x22; - var wy = w4 * y22; - var wz = w4 * z22; - var sx = s4[0]; - var sy = s4[1]; - var sz = s4[2]; - out[0] = (1 - (yy + zz)) * sx; - out[1] = (xy + wz) * sx; - out[2] = (xz - wy) * sx; - out[3] = 0; - out[4] = (xy - wz) * sy; - out[5] = (1 - (xx + zz)) * sy; - out[6] = (yz + wx) * sy; - out[7] = 0; - out[8] = (xz + wy) * sz; - out[9] = (yz - wx) * sz; - out[10] = (1 - (xx + yy)) * sz; - out[11] = 0; - out[12] = v3[0]; - out[13] = v3[1]; - out[14] = v3[2]; - out[15] = 1; - return out; -} -function fromRotationTranslationScaleOrigin(out, q3, v3, s4, o3) { - var x6 = q3[0], y5 = q3[1], z3 = q3[2], w4 = q3[3]; - var x22 = x6 + x6; - var y22 = y5 + y5; - var z22 = z3 + z3; - var xx = x6 * x22; - var xy = x6 * y22; - var xz = x6 * z22; - var yy = y5 * y22; - var yz = y5 * z22; - var zz = z3 * z22; - var wx = w4 * x22; - var wy = w4 * y22; - var wz = w4 * z22; - var sx = s4[0]; - var sy = s4[1]; - var sz = s4[2]; - var ox = o3[0]; - var oy = o3[1]; - var oz = o3[2]; - var out0 = (1 - (yy + zz)) * sx; - var out1 = (xy + wz) * sx; - var out2 = (xz - wy) * sx; - var out4 = (xy - wz) * sy; - var out5 = (1 - (xx + zz)) * sy; - var out6 = (yz + wx) * sy; - var out8 = (xz + wy) * sz; - var out9 = (yz - wx) * sz; - var out10 = (1 - (xx + yy)) * sz; - out[0] = out0; - out[1] = out1; - out[2] = out2; - out[3] = 0; - out[4] = out4; - out[5] = out5; - out[6] = out6; - out[7] = 0; - out[8] = out8; - out[9] = out9; - out[10] = out10; - out[11] = 0; - out[12] = v3[0] + ox - (out0 * ox + out4 * oy + out8 * oz); - out[13] = v3[1] + oy - (out1 * ox + out5 * oy + out9 * oz); - out[14] = v3[2] + oz - (out2 * ox + out6 * oy + out10 * oz); - out[15] = 1; - return out; -} -function fromQuat3(out, q3) { - var x6 = q3[0], y5 = q3[1], z3 = q3[2], w4 = q3[3]; - var x22 = x6 + x6; - var y22 = y5 + y5; - var z22 = z3 + z3; - var xx = x6 * x22; - var yx = y5 * x22; - var yy = y5 * y22; - var zx = z3 * x22; - var zy = z3 * y22; - var zz = z3 * z22; - var wx = w4 * x22; - var wy = w4 * y22; - var wz = w4 * z22; - out[0] = 1 - yy - zz; - out[1] = yx + wz; - out[2] = zx - wy; - out[3] = 0; - out[4] = yx - wz; - out[5] = 1 - xx - zz; - out[6] = zy + wx; - out[7] = 0; - out[8] = zx + wy; - out[9] = zy - wx; - out[10] = 1 - xx - yy; - out[11] = 0; - out[12] = 0; - out[13] = 0; - out[14] = 0; - out[15] = 1; - return out; -} -function frustum(out, left2, right2, bottom, top, near2, far) { - var rl = 1 / (right2 - left2); - var tb = 1 / (top - bottom); - var nf = 1 / (near2 - far); - out[0] = near2 * 2 * rl; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = 0; - out[5] = near2 * 2 * tb; - out[6] = 0; - out[7] = 0; - out[8] = (right2 + left2) * rl; - out[9] = (top + bottom) * tb; - out[10] = (far + near2) * nf; - out[11] = -1; - out[12] = 0; - out[13] = 0; - out[14] = far * near2 * 2 * nf; - out[15] = 0; - return out; -} -function perspectiveNO(out, fovy, aspect, near2, far) { - var f3 = 1 / Math.tan(fovy / 2), nf; - out[0] = f3 / aspect; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = 0; - out[5] = f3; - out[6] = 0; - out[7] = 0; - out[8] = 0; - out[9] = 0; - out[11] = -1; - out[12] = 0; - out[13] = 0; - out[15] = 0; - if (far != null && far !== Infinity) { - nf = 1 / (near2 - far); - out[10] = (far + near2) * nf; - out[14] = 2 * far * near2 * nf; - } else { - out[10] = -1; - out[14] = -2 * near2; - } - return out; -} -var perspective = perspectiveNO; -function perspectiveZO(out, fovy, aspect, near2, far) { - var f3 = 1 / Math.tan(fovy / 2), nf; - out[0] = f3 / aspect; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = 0; - out[5] = f3; - out[6] = 0; - out[7] = 0; - out[8] = 0; - out[9] = 0; - out[11] = -1; - out[12] = 0; - out[13] = 0; - out[15] = 0; - if (far != null && far !== Infinity) { - nf = 1 / (near2 - far); - out[10] = far * nf; - out[14] = far * near2 * nf; - } else { - out[10] = -1; - out[14] = -near2; - } - return out; -} -function perspectiveFromFieldOfView(out, fov, near2, far) { - var upTan = Math.tan(fov.upDegrees * Math.PI / 180); - var downTan = Math.tan(fov.downDegrees * Math.PI / 180); - var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180); - var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180); - var xScale = 2 / (leftTan + rightTan); - var yScale = 2 / (upTan + downTan); - out[0] = xScale; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = 0; - out[5] = yScale; - out[6] = 0; - out[7] = 0; - out[8] = -((leftTan - rightTan) * xScale * 0.5); - out[9] = (upTan - downTan) * yScale * 0.5; - out[10] = far / (near2 - far); - out[11] = -1; - out[12] = 0; - out[13] = 0; - out[14] = far * near2 / (near2 - far); - out[15] = 0; - return out; -} -function orthoNO(out, left2, right2, bottom, top, near2, far) { - var lr = 1 / (left2 - right2); - var bt = 1 / (bottom - top); - var nf = 1 / (near2 - far); - out[0] = -2 * lr; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = 0; - out[5] = -2 * bt; - out[6] = 0; - out[7] = 0; - out[8] = 0; - out[9] = 0; - out[10] = 2 * nf; - out[11] = 0; - out[12] = (left2 + right2) * lr; - out[13] = (top + bottom) * bt; - out[14] = (far + near2) * nf; - out[15] = 1; - return out; -} -var ortho = orthoNO; -function orthoZO(out, left2, right2, bottom, top, near2, far) { - var lr = 1 / (left2 - right2); - var bt = 1 / (bottom - top); - var nf = 1 / (near2 - far); - out[0] = -2 * lr; - out[1] = 0; - out[2] = 0; - out[3] = 0; - out[4] = 0; - out[5] = -2 * bt; - out[6] = 0; - out[7] = 0; - out[8] = 0; - out[9] = 0; - out[10] = nf; - out[11] = 0; - out[12] = (left2 + right2) * lr; - out[13] = (top + bottom) * bt; - out[14] = near2 * nf; - out[15] = 1; - return out; -} -function lookAt(out, eye, center2, up) { - var x0, x1, x22, y0, y1, y22, z0, z1, z22, len5; - var eyex = eye[0]; - var eyey = eye[1]; - var eyez = eye[2]; - var upx = up[0]; - var upy = up[1]; - var upz = up[2]; - var centerx = center2[0]; - var centery = center2[1]; - var centerz = center2[2]; - if (Math.abs(eyex - centerx) < EPSILON && Math.abs(eyey - centery) < EPSILON && Math.abs(eyez - centerz) < EPSILON) { - return identity2(out); - } - z0 = eyex - centerx; - z1 = eyey - centery; - z22 = eyez - centerz; - len5 = 1 / Math.hypot(z0, z1, z22); - z0 *= len5; - z1 *= len5; - z22 *= len5; - x0 = upy * z22 - upz * z1; - x1 = upz * z0 - upx * z22; - x22 = upx * z1 - upy * z0; - len5 = Math.hypot(x0, x1, x22); - if (!len5) { - x0 = 0; - x1 = 0; - x22 = 0; - } else { - len5 = 1 / len5; - x0 *= len5; - x1 *= len5; - x22 *= len5; - } - y0 = z1 * x22 - z22 * x1; - y1 = z22 * x0 - z0 * x22; - y22 = z0 * x1 - z1 * x0; - len5 = Math.hypot(y0, y1, y22); - if (!len5) { - y0 = 0; - y1 = 0; - y22 = 0; - } else { - len5 = 1 / len5; - y0 *= len5; - y1 *= len5; - y22 *= len5; - } - out[0] = x0; - out[1] = y0; - out[2] = z0; - out[3] = 0; - out[4] = x1; - out[5] = y1; - out[6] = z1; - out[7] = 0; - out[8] = x22; - out[9] = y22; - out[10] = z22; - out[11] = 0; - out[12] = -(x0 * eyex + x1 * eyey + x22 * eyez); - out[13] = -(y0 * eyex + y1 * eyey + y22 * eyez); - out[14] = -(z0 * eyex + z1 * eyey + z22 * eyez); - out[15] = 1; - return out; -} -function targetTo(out, eye, target, up) { - var eyex = eye[0], eyey = eye[1], eyez = eye[2], upx = up[0], upy = up[1], upz = up[2]; - var z0 = eyex - target[0], z1 = eyey - target[1], z22 = eyez - target[2]; - var len5 = z0 * z0 + z1 * z1 + z22 * z22; - if (len5 > 0) { - len5 = 1 / Math.sqrt(len5); - z0 *= len5; - z1 *= len5; - z22 *= len5; - } - var x0 = upy * z22 - upz * z1, x1 = upz * z0 - upx * z22, x22 = upx * z1 - upy * z0; - len5 = x0 * x0 + x1 * x1 + x22 * x22; - if (len5 > 0) { - len5 = 1 / Math.sqrt(len5); - x0 *= len5; - x1 *= len5; - x22 *= len5; - } - out[0] = x0; - out[1] = x1; - out[2] = x22; - out[3] = 0; - out[4] = z1 * x22 - z22 * x1; - out[5] = z22 * x0 - z0 * x22; - out[6] = z0 * x1 - z1 * x0; - out[7] = 0; - out[8] = z0; - out[9] = z1; - out[10] = z22; - out[11] = 0; - out[12] = eyex; - out[13] = eyey; - out[14] = eyez; - out[15] = 1; - return out; -} -function str3(a4) { - return "mat4(" + a4[0] + ", " + a4[1] + ", " + a4[2] + ", " + a4[3] + ", " + a4[4] + ", " + a4[5] + ", " + a4[6] + ", " + a4[7] + ", " + a4[8] + ", " + a4[9] + ", " + a4[10] + ", " + a4[11] + ", " + a4[12] + ", " + a4[13] + ", " + a4[14] + ", " + a4[15] + ")"; -} -function frob2(a4) { - return Math.hypot(a4[0], a4[1], a4[2], a4[3], a4[4], a4[5], a4[6], a4[7], a4[8], a4[9], a4[10], a4[11], a4[12], a4[13], a4[14], a4[15]); -} -function add2(out, a4, b10) { - out[0] = a4[0] + b10[0]; - out[1] = a4[1] + b10[1]; - out[2] = a4[2] + b10[2]; - out[3] = a4[3] + b10[3]; - out[4] = a4[4] + b10[4]; - out[5] = a4[5] + b10[5]; - out[6] = a4[6] + b10[6]; - out[7] = a4[7] + b10[7]; - out[8] = a4[8] + b10[8]; - out[9] = a4[9] + b10[9]; - out[10] = a4[10] + b10[10]; - out[11] = a4[11] + b10[11]; - out[12] = a4[12] + b10[12]; - out[13] = a4[13] + b10[13]; - out[14] = a4[14] + b10[14]; - out[15] = a4[15] + b10[15]; - return out; -} -function subtract2(out, a4, b10) { - out[0] = a4[0] - b10[0]; - out[1] = a4[1] - b10[1]; - out[2] = a4[2] - b10[2]; - out[3] = a4[3] - b10[3]; - out[4] = a4[4] - b10[4]; - out[5] = a4[5] - b10[5]; - out[6] = a4[6] - b10[6]; - out[7] = a4[7] - b10[7]; - out[8] = a4[8] - b10[8]; - out[9] = a4[9] - b10[9]; - out[10] = a4[10] - b10[10]; - out[11] = a4[11] - b10[11]; - out[12] = a4[12] - b10[12]; - out[13] = a4[13] - b10[13]; - out[14] = a4[14] - b10[14]; - out[15] = a4[15] - b10[15]; - return out; -} -function multiplyScalar2(out, a4, b10) { - out[0] = a4[0] * b10; - out[1] = a4[1] * b10; - out[2] = a4[2] * b10; - out[3] = a4[3] * b10; - out[4] = a4[4] * b10; - out[5] = a4[5] * b10; - out[6] = a4[6] * b10; - out[7] = a4[7] * b10; - out[8] = a4[8] * b10; - out[9] = a4[9] * b10; - out[10] = a4[10] * b10; - out[11] = a4[11] * b10; - out[12] = a4[12] * b10; - out[13] = a4[13] * b10; - out[14] = a4[14] * b10; - out[15] = a4[15] * b10; - return out; -} -function multiplyScalarAndAdd2(out, a4, b10, scale12) { - out[0] = a4[0] + b10[0] * scale12; - out[1] = a4[1] + b10[1] * scale12; - out[2] = a4[2] + b10[2] * scale12; - out[3] = a4[3] + b10[3] * scale12; - out[4] = a4[4] + b10[4] * scale12; - out[5] = a4[5] + b10[5] * scale12; - out[6] = a4[6] + b10[6] * scale12; - out[7] = a4[7] + b10[7] * scale12; - out[8] = a4[8] + b10[8] * scale12; - out[9] = a4[9] + b10[9] * scale12; - out[10] = a4[10] + b10[10] * scale12; - out[11] = a4[11] + b10[11] * scale12; - out[12] = a4[12] + b10[12] * scale12; - out[13] = a4[13] + b10[13] * scale12; - out[14] = a4[14] + b10[14] * scale12; - out[15] = a4[15] + b10[15] * scale12; - return out; -} -function exactEquals2(a4, b10) { - return a4[0] === b10[0] && a4[1] === b10[1] && a4[2] === b10[2] && a4[3] === b10[3] && a4[4] === b10[4] && a4[5] === b10[5] && a4[6] === b10[6] && a4[7] === b10[7] && a4[8] === b10[8] && a4[9] === b10[9] && a4[10] === b10[10] && a4[11] === b10[11] && a4[12] === b10[12] && a4[13] === b10[13] && a4[14] === b10[14] && a4[15] === b10[15]; -} -function equals2(a4, b10) { - var a0 = a4[0], a1 = a4[1], a22 = a4[2], a32 = a4[3]; - var a42 = a4[4], a5 = a4[5], a6 = a4[6], a7 = a4[7]; - var a8 = a4[8], a9 = a4[9], a10 = a4[10], a11 = a4[11]; - var a12 = a4[12], a13 = a4[13], a14 = a4[14], a15 = a4[15]; - var b02 = b10[0], b12 = b10[1], b23 = b10[2], b32 = b10[3]; - var b42 = b10[4], b52 = b10[5], b62 = b10[6], b72 = b10[7]; - var b82 = b10[8], b92 = b10[9], b102 = b10[10], b11 = b10[11]; - var b122 = b10[12], b13 = b10[13], b14 = b10[14], b15 = b10[15]; - return Math.abs(a0 - b02) <= EPSILON * Math.max(1, Math.abs(a0), Math.abs(b02)) && Math.abs(a1 - b12) <= EPSILON * Math.max(1, Math.abs(a1), Math.abs(b12)) && Math.abs(a22 - b23) <= EPSILON * Math.max(1, Math.abs(a22), Math.abs(b23)) && Math.abs(a32 - b32) <= EPSILON * Math.max(1, Math.abs(a32), Math.abs(b32)) && Math.abs(a42 - b42) <= EPSILON * Math.max(1, Math.abs(a42), Math.abs(b42)) && Math.abs(a5 - b52) <= EPSILON * Math.max(1, Math.abs(a5), Math.abs(b52)) && Math.abs(a6 - b62) <= EPSILON * Math.max(1, Math.abs(a6), Math.abs(b62)) && Math.abs(a7 - b72) <= EPSILON * Math.max(1, Math.abs(a7), Math.abs(b72)) && Math.abs(a8 - b82) <= EPSILON * Math.max(1, Math.abs(a8), Math.abs(b82)) && Math.abs(a9 - b92) <= EPSILON * Math.max(1, Math.abs(a9), Math.abs(b92)) && Math.abs(a10 - b102) <= EPSILON * Math.max(1, Math.abs(a10), Math.abs(b102)) && Math.abs(a11 - b11) <= EPSILON * Math.max(1, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b122) <= EPSILON * Math.max(1, Math.abs(a12), Math.abs(b122)) && Math.abs(a13 - b13) <= EPSILON * Math.max(1, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= EPSILON * Math.max(1, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= EPSILON * Math.max(1, Math.abs(a15), Math.abs(b15)); -} -var mul2 = multiply2; -var sub2 = subtract2; - -// node_modules/gl-matrix/esm/quat.js -var quat_exports = {}; -__export(quat_exports, { - add: () => add5, - calculateW: () => calculateW, - clone: () => clone5, - conjugate: () => conjugate, - copy: () => copy5, - create: () => create5, - dot: () => dot3, - equals: () => equals5, - exactEquals: () => exactEquals5, - exp: () => exp, - fromEuler: () => fromEuler, - fromMat3: () => fromMat3, - fromValues: () => fromValues5, - getAngle: () => getAngle, - getAxisAngle: () => getAxisAngle, - identity: () => identity3, - invert: () => invert3, - len: () => len3, - length: () => length3, - lerp: () => lerp3, - ln: () => ln2, - mul: () => mul5, - multiply: () => multiply5, - normalize: () => normalize3, - pow: () => pow, - random: () => random3, - rotateX: () => rotateX3, - rotateY: () => rotateY3, - rotateZ: () => rotateZ3, - rotationTo: () => rotationTo, - scale: () => scale5, - set: () => set6, - setAxes: () => setAxes, - setAxisAngle: () => setAxisAngle, - slerp: () => slerp, - sqlerp: () => sqlerp, - sqrLen: () => sqrLen3, - squaredLength: () => squaredLength3, - str: () => str6 -}); - -// node_modules/gl-matrix/esm/vec3.js -var vec3_exports = {}; -__export(vec3_exports, { - add: () => add3, - angle: () => angle, - bezier: () => bezier, - ceil: () => ceil, - clone: () => clone3, - copy: () => copy3, - create: () => create3, - cross: () => cross, - dist: () => dist, - distance: () => distance, - div: () => div, - divide: () => divide, - dot: () => dot, - equals: () => equals3, - exactEquals: () => exactEquals3, - floor: () => floor, - forEach: () => forEach, - fromValues: () => fromValues3, - hermite: () => hermite, - inverse: () => inverse, - len: () => len, - length: () => length, - lerp: () => lerp, - max: () => max, - min: () => min, - mul: () => mul3, - multiply: () => multiply3, - negate: () => negate, - normalize: () => normalize, - random: () => random, - rotateX: () => rotateX2, - rotateY: () => rotateY2, - rotateZ: () => rotateZ2, - round: () => round, - scale: () => scale3, - scaleAndAdd: () => scaleAndAdd, - set: () => set4, - sqrDist: () => sqrDist, - sqrLen: () => sqrLen, - squaredDistance: () => squaredDistance, - squaredLength: () => squaredLength, - str: () => str4, - sub: () => sub3, - subtract: () => subtract3, - transformMat3: () => transformMat3, - transformMat4: () => transformMat4, - transformQuat: () => transformQuat, - zero: () => zero -}); -function create3() { - var out = new ARRAY_TYPE(3); - if (ARRAY_TYPE != Float32Array) { - out[0] = 0; - out[1] = 0; - out[2] = 0; - } - return out; -} -function clone3(a4) { - var out = new ARRAY_TYPE(3); - out[0] = a4[0]; - out[1] = a4[1]; - out[2] = a4[2]; - return out; -} -function length(a4) { - var x6 = a4[0]; - var y5 = a4[1]; - var z3 = a4[2]; - return Math.hypot(x6, y5, z3); -} -function fromValues3(x6, y5, z3) { - var out = new ARRAY_TYPE(3); - out[0] = x6; - out[1] = y5; - out[2] = z3; - return out; -} -function copy3(out, a4) { - out[0] = a4[0]; - out[1] = a4[1]; - out[2] = a4[2]; - return out; -} -function set4(out, x6, y5, z3) { - out[0] = x6; - out[1] = y5; - out[2] = z3; - return out; -} -function add3(out, a4, b10) { - out[0] = a4[0] + b10[0]; - out[1] = a4[1] + b10[1]; - out[2] = a4[2] + b10[2]; - return out; -} -function subtract3(out, a4, b10) { - out[0] = a4[0] - b10[0]; - out[1] = a4[1] - b10[1]; - out[2] = a4[2] - b10[2]; - return out; -} -function multiply3(out, a4, b10) { - out[0] = a4[0] * b10[0]; - out[1] = a4[1] * b10[1]; - out[2] = a4[2] * b10[2]; - return out; -} -function divide(out, a4, b10) { - out[0] = a4[0] / b10[0]; - out[1] = a4[1] / b10[1]; - out[2] = a4[2] / b10[2]; - return out; -} -function ceil(out, a4) { - out[0] = Math.ceil(a4[0]); - out[1] = Math.ceil(a4[1]); - out[2] = Math.ceil(a4[2]); - return out; -} -function floor(out, a4) { - out[0] = Math.floor(a4[0]); - out[1] = Math.floor(a4[1]); - out[2] = Math.floor(a4[2]); - return out; -} -function min(out, a4, b10) { - out[0] = Math.min(a4[0], b10[0]); - out[1] = Math.min(a4[1], b10[1]); - out[2] = Math.min(a4[2], b10[2]); - return out; -} -function max(out, a4, b10) { - out[0] = Math.max(a4[0], b10[0]); - out[1] = Math.max(a4[1], b10[1]); - out[2] = Math.max(a4[2], b10[2]); - return out; -} -function round(out, a4) { - out[0] = Math.round(a4[0]); - out[1] = Math.round(a4[1]); - out[2] = Math.round(a4[2]); - return out; -} -function scale3(out, a4, b10) { - out[0] = a4[0] * b10; - out[1] = a4[1] * b10; - out[2] = a4[2] * b10; - return out; -} -function scaleAndAdd(out, a4, b10, scale12) { - out[0] = a4[0] + b10[0] * scale12; - out[1] = a4[1] + b10[1] * scale12; - out[2] = a4[2] + b10[2] * scale12; - return out; -} -function distance(a4, b10) { - var x6 = b10[0] - a4[0]; - var y5 = b10[1] - a4[1]; - var z3 = b10[2] - a4[2]; - return Math.hypot(x6, y5, z3); -} -function squaredDistance(a4, b10) { - var x6 = b10[0] - a4[0]; - var y5 = b10[1] - a4[1]; - var z3 = b10[2] - a4[2]; - return x6 * x6 + y5 * y5 + z3 * z3; -} -function squaredLength(a4) { - var x6 = a4[0]; - var y5 = a4[1]; - var z3 = a4[2]; - return x6 * x6 + y5 * y5 + z3 * z3; -} -function negate(out, a4) { - out[0] = -a4[0]; - out[1] = -a4[1]; - out[2] = -a4[2]; - return out; -} -function inverse(out, a4) { - out[0] = 1 / a4[0]; - out[1] = 1 / a4[1]; - out[2] = 1 / a4[2]; - return out; -} -function normalize(out, a4) { - var x6 = a4[0]; - var y5 = a4[1]; - var z3 = a4[2]; - var len5 = x6 * x6 + y5 * y5 + z3 * z3; - if (len5 > 0) { - len5 = 1 / Math.sqrt(len5); - } - out[0] = a4[0] * len5; - out[1] = a4[1] * len5; - out[2] = a4[2] * len5; - return out; -} -function dot(a4, b10) { - return a4[0] * b10[0] + a4[1] * b10[1] + a4[2] * b10[2]; -} -function cross(out, a4, b10) { - var ax = a4[0], ay = a4[1], az = a4[2]; - var bx = b10[0], by = b10[1], bz = b10[2]; - out[0] = ay * bz - az * by; - out[1] = az * bx - ax * bz; - out[2] = ax * by - ay * bx; - return out; -} -function lerp(out, a4, b10, t4) { - var ax = a4[0]; - var ay = a4[1]; - var az = a4[2]; - out[0] = ax + t4 * (b10[0] - ax); - out[1] = ay + t4 * (b10[1] - ay); - out[2] = az + t4 * (b10[2] - az); - return out; -} -function hermite(out, a4, b10, c5, d3, t4) { - var factorTimes2 = t4 * t4; - var factor1 = factorTimes2 * (2 * t4 - 3) + 1; - var factor2 = factorTimes2 * (t4 - 2) + t4; - var factor3 = factorTimes2 * (t4 - 1); - var factor4 = factorTimes2 * (3 - 2 * t4); - out[0] = a4[0] * factor1 + b10[0] * factor2 + c5[0] * factor3 + d3[0] * factor4; - out[1] = a4[1] * factor1 + b10[1] * factor2 + c5[1] * factor3 + d3[1] * factor4; - out[2] = a4[2] * factor1 + b10[2] * factor2 + c5[2] * factor3 + d3[2] * factor4; - return out; -} -function bezier(out, a4, b10, c5, d3, t4) { - var inverseFactor = 1 - t4; - var inverseFactorTimesTwo = inverseFactor * inverseFactor; - var factorTimes2 = t4 * t4; - var factor1 = inverseFactorTimesTwo * inverseFactor; - var factor2 = 3 * t4 * inverseFactorTimesTwo; - var factor3 = 3 * factorTimes2 * inverseFactor; - var factor4 = factorTimes2 * t4; - out[0] = a4[0] * factor1 + b10[0] * factor2 + c5[0] * factor3 + d3[0] * factor4; - out[1] = a4[1] * factor1 + b10[1] * factor2 + c5[1] * factor3 + d3[1] * factor4; - out[2] = a4[2] * factor1 + b10[2] * factor2 + c5[2] * factor3 + d3[2] * factor4; - return out; -} -function random(out, scale12) { - scale12 = scale12 || 1; - var r4 = RANDOM() * 2 * Math.PI; - var z3 = RANDOM() * 2 - 1; - var zScale = Math.sqrt(1 - z3 * z3) * scale12; - out[0] = Math.cos(r4) * zScale; - out[1] = Math.sin(r4) * zScale; - out[2] = z3 * scale12; - return out; -} -function transformMat4(out, a4, m4) { - var x6 = a4[0], y5 = a4[1], z3 = a4[2]; - var w4 = m4[3] * x6 + m4[7] * y5 + m4[11] * z3 + m4[15]; - w4 = w4 || 1; - out[0] = (m4[0] * x6 + m4[4] * y5 + m4[8] * z3 + m4[12]) / w4; - out[1] = (m4[1] * x6 + m4[5] * y5 + m4[9] * z3 + m4[13]) / w4; - out[2] = (m4[2] * x6 + m4[6] * y5 + m4[10] * z3 + m4[14]) / w4; - return out; -} -function transformMat3(out, a4, m4) { - var x6 = a4[0], y5 = a4[1], z3 = a4[2]; - out[0] = x6 * m4[0] + y5 * m4[3] + z3 * m4[6]; - out[1] = x6 * m4[1] + y5 * m4[4] + z3 * m4[7]; - out[2] = x6 * m4[2] + y5 * m4[5] + z3 * m4[8]; - return out; -} -function transformQuat(out, a4, q3) { - var qx = q3[0], qy = q3[1], qz = q3[2], qw = q3[3]; - var x6 = a4[0], y5 = a4[1], z3 = a4[2]; - var uvx = qy * z3 - qz * y5, uvy = qz * x6 - qx * z3, uvz = qx * y5 - qy * x6; - var uuvx = qy * uvz - qz * uvy, uuvy = qz * uvx - qx * uvz, uuvz = qx * uvy - qy * uvx; - var w22 = qw * 2; - uvx *= w22; - uvy *= w22; - uvz *= w22; - uuvx *= 2; - uuvy *= 2; - uuvz *= 2; - out[0] = x6 + uvx + uuvx; - out[1] = y5 + uvy + uuvy; - out[2] = z3 + uvz + uuvz; - return out; -} -function rotateX2(out, a4, b10, rad) { - var p4 = [], r4 = []; - p4[0] = a4[0] - b10[0]; - p4[1] = a4[1] - b10[1]; - p4[2] = a4[2] - b10[2]; - r4[0] = p4[0]; - r4[1] = p4[1] * Math.cos(rad) - p4[2] * Math.sin(rad); - r4[2] = p4[1] * Math.sin(rad) + p4[2] * Math.cos(rad); - out[0] = r4[0] + b10[0]; - out[1] = r4[1] + b10[1]; - out[2] = r4[2] + b10[2]; - return out; -} -function rotateY2(out, a4, b10, rad) { - var p4 = [], r4 = []; - p4[0] = a4[0] - b10[0]; - p4[1] = a4[1] - b10[1]; - p4[2] = a4[2] - b10[2]; - r4[0] = p4[2] * Math.sin(rad) + p4[0] * Math.cos(rad); - r4[1] = p4[1]; - r4[2] = p4[2] * Math.cos(rad) - p4[0] * Math.sin(rad); - out[0] = r4[0] + b10[0]; - out[1] = r4[1] + b10[1]; - out[2] = r4[2] + b10[2]; - return out; -} -function rotateZ2(out, a4, b10, rad) { - var p4 = [], r4 = []; - p4[0] = a4[0] - b10[0]; - p4[1] = a4[1] - b10[1]; - p4[2] = a4[2] - b10[2]; - r4[0] = p4[0] * Math.cos(rad) - p4[1] * Math.sin(rad); - r4[1] = p4[0] * Math.sin(rad) + p4[1] * Math.cos(rad); - r4[2] = p4[2]; - out[0] = r4[0] + b10[0]; - out[1] = r4[1] + b10[1]; - out[2] = r4[2] + b10[2]; - return out; -} -function angle(a4, b10) { - var ax = a4[0], ay = a4[1], az = a4[2], bx = b10[0], by = b10[1], bz = b10[2], mag1 = Math.sqrt(ax * ax + ay * ay + az * az), mag2 = Math.sqrt(bx * bx + by * by + bz * bz), mag = mag1 * mag2, cosine = mag && dot(a4, b10) / mag; - return Math.acos(Math.min(Math.max(cosine, -1), 1)); -} -function zero(out) { - out[0] = 0; - out[1] = 0; - out[2] = 0; - return out; -} -function str4(a4) { - return "vec3(" + a4[0] + ", " + a4[1] + ", " + a4[2] + ")"; -} -function exactEquals3(a4, b10) { - return a4[0] === b10[0] && a4[1] === b10[1] && a4[2] === b10[2]; -} -function equals3(a4, b10) { - var a0 = a4[0], a1 = a4[1], a22 = a4[2]; - var b02 = b10[0], b12 = b10[1], b23 = b10[2]; - return Math.abs(a0 - b02) <= EPSILON * Math.max(1, Math.abs(a0), Math.abs(b02)) && Math.abs(a1 - b12) <= EPSILON * Math.max(1, Math.abs(a1), Math.abs(b12)) && Math.abs(a22 - b23) <= EPSILON * Math.max(1, Math.abs(a22), Math.abs(b23)); -} -var sub3 = subtract3; -var mul3 = multiply3; -var div = divide; -var dist = distance; -var sqrDist = squaredDistance; -var len = length; -var sqrLen = squaredLength; -var forEach = function() { - var vec = create3(); - return function(a4, stride, offset, count2, fn, arg) { - var i4, l4; - if (!stride) { - stride = 3; - } - if (!offset) { - offset = 0; - } - if (count2) { - l4 = Math.min(count2 * stride + offset, a4.length); - } else { - l4 = a4.length; - } - for (i4 = offset; i4 < l4; i4 += stride) { - vec[0] = a4[i4]; - vec[1] = a4[i4 + 1]; - vec[2] = a4[i4 + 2]; - fn(vec, vec, arg); - a4[i4] = vec[0]; - a4[i4 + 1] = vec[1]; - a4[i4 + 2] = vec[2]; - } - return a4; - }; -}(); - -// node_modules/gl-matrix/esm/vec4.js -var vec4_exports = {}; -__export(vec4_exports, { - add: () => add4, - ceil: () => ceil2, - clone: () => clone4, - copy: () => copy4, - create: () => create4, - cross: () => cross2, - dist: () => dist2, - distance: () => distance2, - div: () => div2, - divide: () => divide2, - dot: () => dot2, - equals: () => equals4, - exactEquals: () => exactEquals4, - floor: () => floor2, - forEach: () => forEach2, - fromValues: () => fromValues4, - inverse: () => inverse2, - len: () => len2, - length: () => length2, - lerp: () => lerp2, - max: () => max2, - min: () => min2, - mul: () => mul4, - multiply: () => multiply4, - negate: () => negate2, - normalize: () => normalize2, - random: () => random2, - round: () => round2, - scale: () => scale4, - scaleAndAdd: () => scaleAndAdd2, - set: () => set5, - sqrDist: () => sqrDist2, - sqrLen: () => sqrLen2, - squaredDistance: () => squaredDistance2, - squaredLength: () => squaredLength2, - str: () => str5, - sub: () => sub4, - subtract: () => subtract4, - transformMat4: () => transformMat42, - transformQuat: () => transformQuat2, - zero: () => zero2 -}); -function create4() { - var out = new ARRAY_TYPE(4); - if (ARRAY_TYPE != Float32Array) { - out[0] = 0; - out[1] = 0; - out[2] = 0; - out[3] = 0; - } - return out; -} -function clone4(a4) { - var out = new ARRAY_TYPE(4); - out[0] = a4[0]; - out[1] = a4[1]; - out[2] = a4[2]; - out[3] = a4[3]; - return out; -} -function fromValues4(x6, y5, z3, w4) { - var out = new ARRAY_TYPE(4); - out[0] = x6; - out[1] = y5; - out[2] = z3; - out[3] = w4; - return out; -} -function copy4(out, a4) { - out[0] = a4[0]; - out[1] = a4[1]; - out[2] = a4[2]; - out[3] = a4[3]; - return out; -} -function set5(out, x6, y5, z3, w4) { - out[0] = x6; - out[1] = y5; - out[2] = z3; - out[3] = w4; - return out; -} -function add4(out, a4, b10) { - out[0] = a4[0] + b10[0]; - out[1] = a4[1] + b10[1]; - out[2] = a4[2] + b10[2]; - out[3] = a4[3] + b10[3]; - return out; -} -function subtract4(out, a4, b10) { - out[0] = a4[0] - b10[0]; - out[1] = a4[1] - b10[1]; - out[2] = a4[2] - b10[2]; - out[3] = a4[3] - b10[3]; - return out; -} -function multiply4(out, a4, b10) { - out[0] = a4[0] * b10[0]; - out[1] = a4[1] * b10[1]; - out[2] = a4[2] * b10[2]; - out[3] = a4[3] * b10[3]; - return out; -} -function divide2(out, a4, b10) { - out[0] = a4[0] / b10[0]; - out[1] = a4[1] / b10[1]; - out[2] = a4[2] / b10[2]; - out[3] = a4[3] / b10[3]; - return out; -} -function ceil2(out, a4) { - out[0] = Math.ceil(a4[0]); - out[1] = Math.ceil(a4[1]); - out[2] = Math.ceil(a4[2]); - out[3] = Math.ceil(a4[3]); - return out; -} -function floor2(out, a4) { - out[0] = Math.floor(a4[0]); - out[1] = Math.floor(a4[1]); - out[2] = Math.floor(a4[2]); - out[3] = Math.floor(a4[3]); - return out; -} -function min2(out, a4, b10) { - out[0] = Math.min(a4[0], b10[0]); - out[1] = Math.min(a4[1], b10[1]); - out[2] = Math.min(a4[2], b10[2]); - out[3] = Math.min(a4[3], b10[3]); - return out; -} -function max2(out, a4, b10) { - out[0] = Math.max(a4[0], b10[0]); - out[1] = Math.max(a4[1], b10[1]); - out[2] = Math.max(a4[2], b10[2]); - out[3] = Math.max(a4[3], b10[3]); - return out; -} -function round2(out, a4) { - out[0] = Math.round(a4[0]); - out[1] = Math.round(a4[1]); - out[2] = Math.round(a4[2]); - out[3] = Math.round(a4[3]); - return out; -} -function scale4(out, a4, b10) { - out[0] = a4[0] * b10; - out[1] = a4[1] * b10; - out[2] = a4[2] * b10; - out[3] = a4[3] * b10; - return out; -} -function scaleAndAdd2(out, a4, b10, scale12) { - out[0] = a4[0] + b10[0] * scale12; - out[1] = a4[1] + b10[1] * scale12; - out[2] = a4[2] + b10[2] * scale12; - out[3] = a4[3] + b10[3] * scale12; - return out; -} -function distance2(a4, b10) { - var x6 = b10[0] - a4[0]; - var y5 = b10[1] - a4[1]; - var z3 = b10[2] - a4[2]; - var w4 = b10[3] - a4[3]; - return Math.hypot(x6, y5, z3, w4); -} -function squaredDistance2(a4, b10) { - var x6 = b10[0] - a4[0]; - var y5 = b10[1] - a4[1]; - var z3 = b10[2] - a4[2]; - var w4 = b10[3] - a4[3]; - return x6 * x6 + y5 * y5 + z3 * z3 + w4 * w4; -} -function length2(a4) { - var x6 = a4[0]; - var y5 = a4[1]; - var z3 = a4[2]; - var w4 = a4[3]; - return Math.hypot(x6, y5, z3, w4); -} -function squaredLength2(a4) { - var x6 = a4[0]; - var y5 = a4[1]; - var z3 = a4[2]; - var w4 = a4[3]; - return x6 * x6 + y5 * y5 + z3 * z3 + w4 * w4; -} -function negate2(out, a4) { - out[0] = -a4[0]; - out[1] = -a4[1]; - out[2] = -a4[2]; - out[3] = -a4[3]; - return out; -} -function inverse2(out, a4) { - out[0] = 1 / a4[0]; - out[1] = 1 / a4[1]; - out[2] = 1 / a4[2]; - out[3] = 1 / a4[3]; - return out; -} -function normalize2(out, a4) { - var x6 = a4[0]; - var y5 = a4[1]; - var z3 = a4[2]; - var w4 = a4[3]; - var len5 = x6 * x6 + y5 * y5 + z3 * z3 + w4 * w4; - if (len5 > 0) { - len5 = 1 / Math.sqrt(len5); - } - out[0] = x6 * len5; - out[1] = y5 * len5; - out[2] = z3 * len5; - out[3] = w4 * len5; - return out; -} -function dot2(a4, b10) { - return a4[0] * b10[0] + a4[1] * b10[1] + a4[2] * b10[2] + a4[3] * b10[3]; -} -function cross2(out, u3, v3, w4) { - var A4 = v3[0] * w4[1] - v3[1] * w4[0], B3 = v3[0] * w4[2] - v3[2] * w4[0], C3 = v3[0] * w4[3] - v3[3] * w4[0], D3 = v3[1] * w4[2] - v3[2] * w4[1], E2 = v3[1] * w4[3] - v3[3] * w4[1], F3 = v3[2] * w4[3] - v3[3] * w4[2]; - var G2 = u3[0]; - var H3 = u3[1]; - var I3 = u3[2]; - var J2 = u3[3]; - out[0] = H3 * F3 - I3 * E2 + J2 * D3; - out[1] = -(G2 * F3) + I3 * C3 - J2 * B3; - out[2] = G2 * E2 - H3 * C3 + J2 * A4; - out[3] = -(G2 * D3) + H3 * B3 - I3 * A4; - return out; -} -function lerp2(out, a4, b10, t4) { - var ax = a4[0]; - var ay = a4[1]; - var az = a4[2]; - var aw = a4[3]; - out[0] = ax + t4 * (b10[0] - ax); - out[1] = ay + t4 * (b10[1] - ay); - out[2] = az + t4 * (b10[2] - az); - out[3] = aw + t4 * (b10[3] - aw); - return out; -} -function random2(out, scale12) { - scale12 = scale12 || 1; - var v1, v22, v3, v4; - var s1, s22; - do { - v1 = RANDOM() * 2 - 1; - v22 = RANDOM() * 2 - 1; - s1 = v1 * v1 + v22 * v22; - } while (s1 >= 1); - do { - v3 = RANDOM() * 2 - 1; - v4 = RANDOM() * 2 - 1; - s22 = v3 * v3 + v4 * v4; - } while (s22 >= 1); - var d3 = Math.sqrt((1 - s1) / s22); - out[0] = scale12 * v1; - out[1] = scale12 * v22; - out[2] = scale12 * v3 * d3; - out[3] = scale12 * v4 * d3; - return out; -} -function transformMat42(out, a4, m4) { - var x6 = a4[0], y5 = a4[1], z3 = a4[2], w4 = a4[3]; - out[0] = m4[0] * x6 + m4[4] * y5 + m4[8] * z3 + m4[12] * w4; - out[1] = m4[1] * x6 + m4[5] * y5 + m4[9] * z3 + m4[13] * w4; - out[2] = m4[2] * x6 + m4[6] * y5 + m4[10] * z3 + m4[14] * w4; - out[3] = m4[3] * x6 + m4[7] * y5 + m4[11] * z3 + m4[15] * w4; - return out; -} -function transformQuat2(out, a4, q3) { - var x6 = a4[0], y5 = a4[1], z3 = a4[2]; - var qx = q3[0], qy = q3[1], qz = q3[2], qw = q3[3]; - var ix = qw * x6 + qy * z3 - qz * y5; - var iy = qw * y5 + qz * x6 - qx * z3; - var iz = qw * z3 + qx * y5 - qy * x6; - var iw = -qx * x6 - qy * y5 - qz * z3; - out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy; - out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz; - out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx; - out[3] = a4[3]; - return out; -} -function zero2(out) { - out[0] = 0; - out[1] = 0; - out[2] = 0; - out[3] = 0; - return out; -} -function str5(a4) { - return "vec4(" + a4[0] + ", " + a4[1] + ", " + a4[2] + ", " + a4[3] + ")"; -} -function exactEquals4(a4, b10) { - return a4[0] === b10[0] && a4[1] === b10[1] && a4[2] === b10[2] && a4[3] === b10[3]; -} -function equals4(a4, b10) { - var a0 = a4[0], a1 = a4[1], a22 = a4[2], a32 = a4[3]; - var b02 = b10[0], b12 = b10[1], b23 = b10[2], b32 = b10[3]; - return Math.abs(a0 - b02) <= EPSILON * Math.max(1, Math.abs(a0), Math.abs(b02)) && Math.abs(a1 - b12) <= EPSILON * Math.max(1, Math.abs(a1), Math.abs(b12)) && Math.abs(a22 - b23) <= EPSILON * Math.max(1, Math.abs(a22), Math.abs(b23)) && Math.abs(a32 - b32) <= EPSILON * Math.max(1, Math.abs(a32), Math.abs(b32)); -} -var sub4 = subtract4; -var mul4 = multiply4; -var div2 = divide2; -var dist2 = distance2; -var sqrDist2 = squaredDistance2; -var len2 = length2; -var sqrLen2 = squaredLength2; -var forEach2 = function() { - var vec = create4(); - return function(a4, stride, offset, count2, fn, arg) { - var i4, l4; - if (!stride) { - stride = 4; - } - if (!offset) { - offset = 0; - } - if (count2) { - l4 = Math.min(count2 * stride + offset, a4.length); - } else { - l4 = a4.length; - } - for (i4 = offset; i4 < l4; i4 += stride) { - vec[0] = a4[i4]; - vec[1] = a4[i4 + 1]; - vec[2] = a4[i4 + 2]; - vec[3] = a4[i4 + 3]; - fn(vec, vec, arg); - a4[i4] = vec[0]; - a4[i4 + 1] = vec[1]; - a4[i4 + 2] = vec[2]; - a4[i4 + 3] = vec[3]; - } - return a4; - }; -}(); - -// node_modules/gl-matrix/esm/quat.js -function create5() { - var out = new ARRAY_TYPE(4); - if (ARRAY_TYPE != Float32Array) { - out[0] = 0; - out[1] = 0; - out[2] = 0; - } - out[3] = 1; - return out; -} -function identity3(out) { - out[0] = 0; - out[1] = 0; - out[2] = 0; - out[3] = 1; - return out; -} -function setAxisAngle(out, axis22, rad) { - rad = rad * 0.5; - var s4 = Math.sin(rad); - out[0] = s4 * axis22[0]; - out[1] = s4 * axis22[1]; - out[2] = s4 * axis22[2]; - out[3] = Math.cos(rad); - return out; -} -function getAxisAngle(out_axis, q3) { - var rad = Math.acos(q3[3]) * 2; - var s4 = Math.sin(rad / 2); - if (s4 > EPSILON) { - out_axis[0] = q3[0] / s4; - out_axis[1] = q3[1] / s4; - out_axis[2] = q3[2] / s4; - } else { - out_axis[0] = 1; - out_axis[1] = 0; - out_axis[2] = 0; - } - return rad; -} -function getAngle(a4, b10) { - var dotproduct = dot3(a4, b10); - return Math.acos(2 * dotproduct * dotproduct - 1); -} -function multiply5(out, a4, b10) { - var ax = a4[0], ay = a4[1], az = a4[2], aw = a4[3]; - var bx = b10[0], by = b10[1], bz = b10[2], bw = b10[3]; - out[0] = ax * bw + aw * bx + ay * bz - az * by; - out[1] = ay * bw + aw * by + az * bx - ax * bz; - out[2] = az * bw + aw * bz + ax * by - ay * bx; - out[3] = aw * bw - ax * bx - ay * by - az * bz; - return out; -} -function rotateX3(out, a4, rad) { - rad *= 0.5; - var ax = a4[0], ay = a4[1], az = a4[2], aw = a4[3]; - var bx = Math.sin(rad), bw = Math.cos(rad); - out[0] = ax * bw + aw * bx; - out[1] = ay * bw + az * bx; - out[2] = az * bw - ay * bx; - out[3] = aw * bw - ax * bx; - return out; -} -function rotateY3(out, a4, rad) { - rad *= 0.5; - var ax = a4[0], ay = a4[1], az = a4[2], aw = a4[3]; - var by = Math.sin(rad), bw = Math.cos(rad); - out[0] = ax * bw - az * by; - out[1] = ay * bw + aw * by; - out[2] = az * bw + ax * by; - out[3] = aw * bw - ay * by; - return out; -} -function rotateZ3(out, a4, rad) { - rad *= 0.5; - var ax = a4[0], ay = a4[1], az = a4[2], aw = a4[3]; - var bz = Math.sin(rad), bw = Math.cos(rad); - out[0] = ax * bw + ay * bz; - out[1] = ay * bw - ax * bz; - out[2] = az * bw + aw * bz; - out[3] = aw * bw - az * bz; - return out; -} -function calculateW(out, a4) { - var x6 = a4[0], y5 = a4[1], z3 = a4[2]; - out[0] = x6; - out[1] = y5; - out[2] = z3; - out[3] = Math.sqrt(Math.abs(1 - x6 * x6 - y5 * y5 - z3 * z3)); - return out; -} -function exp(out, a4) { - var x6 = a4[0], y5 = a4[1], z3 = a4[2], w4 = a4[3]; - var r4 = Math.sqrt(x6 * x6 + y5 * y5 + z3 * z3); - var et = Math.exp(w4); - var s4 = r4 > 0 ? et * Math.sin(r4) / r4 : 0; - out[0] = x6 * s4; - out[1] = y5 * s4; - out[2] = z3 * s4; - out[3] = et * Math.cos(r4); - return out; -} -function ln2(out, a4) { - var x6 = a4[0], y5 = a4[1], z3 = a4[2], w4 = a4[3]; - var r4 = Math.sqrt(x6 * x6 + y5 * y5 + z3 * z3); - var t4 = r4 > 0 ? Math.atan2(r4, w4) / r4 : 0; - out[0] = x6 * t4; - out[1] = y5 * t4; - out[2] = z3 * t4; - out[3] = 0.5 * Math.log(x6 * x6 + y5 * y5 + z3 * z3 + w4 * w4); - return out; -} -function pow(out, a4, b10) { - ln2(out, a4); - scale5(out, out, b10); - exp(out, out); - return out; -} -function slerp(out, a4, b10, t4) { - var ax = a4[0], ay = a4[1], az = a4[2], aw = a4[3]; - var bx = b10[0], by = b10[1], bz = b10[2], bw = b10[3]; - var omega, cosom, sinom, scale0, scale1; - cosom = ax * bx + ay * by + az * bz + aw * bw; - if (cosom < 0) { - cosom = -cosom; - bx = -bx; - by = -by; - bz = -bz; - bw = -bw; - } - if (1 - cosom > EPSILON) { - omega = Math.acos(cosom); - sinom = Math.sin(omega); - scale0 = Math.sin((1 - t4) * omega) / sinom; - scale1 = Math.sin(t4 * omega) / sinom; - } else { - scale0 = 1 - t4; - scale1 = t4; - } - out[0] = scale0 * ax + scale1 * bx; - out[1] = scale0 * ay + scale1 * by; - out[2] = scale0 * az + scale1 * bz; - out[3] = scale0 * aw + scale1 * bw; - return out; -} -function random3(out) { - var u1 = RANDOM(); - var u22 = RANDOM(); - var u3 = RANDOM(); - var sqrt1MinusU1 = Math.sqrt(1 - u1); - var sqrtU1 = Math.sqrt(u1); - out[0] = sqrt1MinusU1 * Math.sin(2 * Math.PI * u22); - out[1] = sqrt1MinusU1 * Math.cos(2 * Math.PI * u22); - out[2] = sqrtU1 * Math.sin(2 * Math.PI * u3); - out[3] = sqrtU1 * Math.cos(2 * Math.PI * u3); - return out; -} -function invert3(out, a4) { - var a0 = a4[0], a1 = a4[1], a22 = a4[2], a32 = a4[3]; - var dot7 = a0 * a0 + a1 * a1 + a22 * a22 + a32 * a32; - var invDot = dot7 ? 1 / dot7 : 0; - out[0] = -a0 * invDot; - out[1] = -a1 * invDot; - out[2] = -a22 * invDot; - out[3] = a32 * invDot; - return out; -} -function conjugate(out, a4) { - out[0] = -a4[0]; - out[1] = -a4[1]; - out[2] = -a4[2]; - out[3] = a4[3]; - return out; -} -function fromMat3(out, m4) { - var fTrace = m4[0] + m4[4] + m4[8]; - var fRoot; - if (fTrace > 0) { - fRoot = Math.sqrt(fTrace + 1); - out[3] = 0.5 * fRoot; - fRoot = 0.5 / fRoot; - out[0] = (m4[5] - m4[7]) * fRoot; - out[1] = (m4[6] - m4[2]) * fRoot; - out[2] = (m4[1] - m4[3]) * fRoot; - } else { - var i4 = 0; - if (m4[4] > m4[0]) - i4 = 1; - if (m4[8] > m4[i4 * 3 + i4]) - i4 = 2; - var j4 = (i4 + 1) % 3; - var k4 = (i4 + 2) % 3; - fRoot = Math.sqrt(m4[i4 * 3 + i4] - m4[j4 * 3 + j4] - m4[k4 * 3 + k4] + 1); - out[i4] = 0.5 * fRoot; - fRoot = 0.5 / fRoot; - out[3] = (m4[j4 * 3 + k4] - m4[k4 * 3 + j4]) * fRoot; - out[j4] = (m4[j4 * 3 + i4] + m4[i4 * 3 + j4]) * fRoot; - out[k4] = (m4[k4 * 3 + i4] + m4[i4 * 3 + k4]) * fRoot; - } - return out; -} -function fromEuler(out, x6, y5, z3) { - var halfToRad = 0.5 * Math.PI / 180; - x6 *= halfToRad; - y5 *= halfToRad; - z3 *= halfToRad; - var sx = Math.sin(x6); - var cx = Math.cos(x6); - var sy = Math.sin(y5); - var cy = Math.cos(y5); - var sz = Math.sin(z3); - var cz = Math.cos(z3); - out[0] = sx * cy * cz - cx * sy * sz; - out[1] = cx * sy * cz + sx * cy * sz; - out[2] = cx * cy * sz - sx * sy * cz; - out[3] = cx * cy * cz + sx * sy * sz; - return out; -} -function str6(a4) { - return "quat(" + a4[0] + ", " + a4[1] + ", " + a4[2] + ", " + a4[3] + ")"; -} -var clone5 = clone4; -var fromValues5 = fromValues4; -var copy5 = copy4; -var set6 = set5; -var add5 = add4; -var mul5 = multiply5; -var scale5 = scale4; -var dot3 = dot2; -var lerp3 = lerp2; -var length3 = length2; -var len3 = length3; -var squaredLength3 = squaredLength2; -var sqrLen3 = squaredLength3; -var normalize3 = normalize2; -var exactEquals5 = exactEquals4; -var equals5 = equals4; -var rotationTo = function() { - var tmpvec3 = create3(); - var xUnitVec3 = fromValues3(1, 0, 0); - var yUnitVec3 = fromValues3(0, 1, 0); - return function(out, a4, b10) { - var dot7 = dot(a4, b10); - if (dot7 < -0.999999) { - cross(tmpvec3, xUnitVec3, a4); - if (len(tmpvec3) < 1e-6) - cross(tmpvec3, yUnitVec3, a4); - normalize(tmpvec3, tmpvec3); - setAxisAngle(out, tmpvec3, Math.PI); - return out; - } else if (dot7 > 0.999999) { - out[0] = 0; - out[1] = 0; - out[2] = 0; - out[3] = 1; - return out; - } else { - cross(tmpvec3, a4, b10); - out[0] = tmpvec3[0]; - out[1] = tmpvec3[1]; - out[2] = tmpvec3[2]; - out[3] = 1 + dot7; - return normalize3(out, out); - } - }; -}(); -var sqlerp = function() { - var temp1 = create5(); - var temp2 = create5(); - return function(out, a4, b10, c5, d3, t4) { - slerp(temp1, a4, d3, t4); - slerp(temp2, b10, c5, t4); - slerp(out, temp1, temp2, 2 * t4 * (1 - t4)); - return out; - }; -}(); -var setAxes = function() { - var matr = create(); - return function(out, view, right2, up) { - matr[0] = right2[0]; - matr[3] = right2[1]; - matr[6] = right2[2]; - matr[1] = up[0]; - matr[4] = up[1]; - matr[7] = up[2]; - matr[2] = -view[0]; - matr[5] = -view[1]; - matr[8] = -view[2]; - return normalize3(out, fromMat3(out, matr)); - }; -}(); - -// node_modules/gl-matrix/esm/vec2.js -var vec2_exports = {}; -__export(vec2_exports, { - add: () => add6, - angle: () => angle2, - ceil: () => ceil3, - clone: () => clone6, - copy: () => copy6, - create: () => create6, - cross: () => cross3, - dist: () => dist3, - distance: () => distance3, - div: () => div3, - divide: () => divide3, - dot: () => dot4, - equals: () => equals6, - exactEquals: () => exactEquals6, - floor: () => floor3, - forEach: () => forEach3, - fromValues: () => fromValues6, - inverse: () => inverse3, - len: () => len4, - length: () => length4, - lerp: () => lerp4, - max: () => max3, - min: () => min3, - mul: () => mul6, - multiply: () => multiply6, - negate: () => negate3, - normalize: () => normalize4, - random: () => random4, - rotate: () => rotate3, - round: () => round3, - scale: () => scale6, - scaleAndAdd: () => scaleAndAdd3, - set: () => set7, - sqrDist: () => sqrDist3, - sqrLen: () => sqrLen4, - squaredDistance: () => squaredDistance3, - squaredLength: () => squaredLength4, - str: () => str7, - sub: () => sub5, - subtract: () => subtract5, - transformMat2: () => transformMat2, - transformMat2d: () => transformMat2d, - transformMat3: () => transformMat32, - transformMat4: () => transformMat43, - zero: () => zero3 -}); -function create6() { - var out = new ARRAY_TYPE(2); - if (ARRAY_TYPE != Float32Array) { - out[0] = 0; - out[1] = 0; - } - return out; -} -function clone6(a4) { - var out = new ARRAY_TYPE(2); - out[0] = a4[0]; - out[1] = a4[1]; - return out; -} -function fromValues6(x6, y5) { - var out = new ARRAY_TYPE(2); - out[0] = x6; - out[1] = y5; - return out; -} -function copy6(out, a4) { - out[0] = a4[0]; - out[1] = a4[1]; - return out; -} -function set7(out, x6, y5) { - out[0] = x6; - out[1] = y5; - return out; -} -function add6(out, a4, b10) { - out[0] = a4[0] + b10[0]; - out[1] = a4[1] + b10[1]; - return out; -} -function subtract5(out, a4, b10) { - out[0] = a4[0] - b10[0]; - out[1] = a4[1] - b10[1]; - return out; -} -function multiply6(out, a4, b10) { - out[0] = a4[0] * b10[0]; - out[1] = a4[1] * b10[1]; - return out; -} -function divide3(out, a4, b10) { - out[0] = a4[0] / b10[0]; - out[1] = a4[1] / b10[1]; - return out; -} -function ceil3(out, a4) { - out[0] = Math.ceil(a4[0]); - out[1] = Math.ceil(a4[1]); - return out; -} -function floor3(out, a4) { - out[0] = Math.floor(a4[0]); - out[1] = Math.floor(a4[1]); - return out; -} -function min3(out, a4, b10) { - out[0] = Math.min(a4[0], b10[0]); - out[1] = Math.min(a4[1], b10[1]); - return out; -} -function max3(out, a4, b10) { - out[0] = Math.max(a4[0], b10[0]); - out[1] = Math.max(a4[1], b10[1]); - return out; -} -function round3(out, a4) { - out[0] = Math.round(a4[0]); - out[1] = Math.round(a4[1]); - return out; -} -function scale6(out, a4, b10) { - out[0] = a4[0] * b10; - out[1] = a4[1] * b10; - return out; -} -function scaleAndAdd3(out, a4, b10, scale12) { - out[0] = a4[0] + b10[0] * scale12; - out[1] = a4[1] + b10[1] * scale12; - return out; -} -function distance3(a4, b10) { - var x6 = b10[0] - a4[0], y5 = b10[1] - a4[1]; - return Math.hypot(x6, y5); -} -function squaredDistance3(a4, b10) { - var x6 = b10[0] - a4[0], y5 = b10[1] - a4[1]; - return x6 * x6 + y5 * y5; -} -function length4(a4) { - var x6 = a4[0], y5 = a4[1]; - return Math.hypot(x6, y5); -} -function squaredLength4(a4) { - var x6 = a4[0], y5 = a4[1]; - return x6 * x6 + y5 * y5; -} -function negate3(out, a4) { - out[0] = -a4[0]; - out[1] = -a4[1]; - return out; -} -function inverse3(out, a4) { - out[0] = 1 / a4[0]; - out[1] = 1 / a4[1]; - return out; -} -function normalize4(out, a4) { - var x6 = a4[0], y5 = a4[1]; - var len5 = x6 * x6 + y5 * y5; - if (len5 > 0) { - len5 = 1 / Math.sqrt(len5); - } - out[0] = a4[0] * len5; - out[1] = a4[1] * len5; - return out; -} -function dot4(a4, b10) { - return a4[0] * b10[0] + a4[1] * b10[1]; -} -function cross3(out, a4, b10) { - var z3 = a4[0] * b10[1] - a4[1] * b10[0]; - out[0] = out[1] = 0; - out[2] = z3; - return out; -} -function lerp4(out, a4, b10, t4) { - var ax = a4[0], ay = a4[1]; - out[0] = ax + t4 * (b10[0] - ax); - out[1] = ay + t4 * (b10[1] - ay); - return out; -} -function random4(out, scale12) { - scale12 = scale12 || 1; - var r4 = RANDOM() * 2 * Math.PI; - out[0] = Math.cos(r4) * scale12; - out[1] = Math.sin(r4) * scale12; - return out; -} -function transformMat2(out, a4, m4) { - var x6 = a4[0], y5 = a4[1]; - out[0] = m4[0] * x6 + m4[2] * y5; - out[1] = m4[1] * x6 + m4[3] * y5; - return out; -} -function transformMat2d(out, a4, m4) { - var x6 = a4[0], y5 = a4[1]; - out[0] = m4[0] * x6 + m4[2] * y5 + m4[4]; - out[1] = m4[1] * x6 + m4[3] * y5 + m4[5]; - return out; -} -function transformMat32(out, a4, m4) { - var x6 = a4[0], y5 = a4[1]; - out[0] = m4[0] * x6 + m4[3] * y5 + m4[6]; - out[1] = m4[1] * x6 + m4[4] * y5 + m4[7]; - return out; -} -function transformMat43(out, a4, m4) { - var x6 = a4[0]; - var y5 = a4[1]; - out[0] = m4[0] * x6 + m4[4] * y5 + m4[12]; - out[1] = m4[1] * x6 + m4[5] * y5 + m4[13]; - return out; -} -function rotate3(out, a4, b10, rad) { - var p0 = a4[0] - b10[0], p1 = a4[1] - b10[1], sinC = Math.sin(rad), cosC = Math.cos(rad); - out[0] = p0 * cosC - p1 * sinC + b10[0]; - out[1] = p0 * sinC + p1 * cosC + b10[1]; - return out; -} -function angle2(a4, b10) { - var x1 = a4[0], y1 = a4[1], x22 = b10[0], y22 = b10[1], mag = Math.sqrt(x1 * x1 + y1 * y1) * Math.sqrt(x22 * x22 + y22 * y22), cosine = mag && (x1 * x22 + y1 * y22) / mag; - return Math.acos(Math.min(Math.max(cosine, -1), 1)); -} -function zero3(out) { - out[0] = 0; - out[1] = 0; - return out; -} -function str7(a4) { - return "vec2(" + a4[0] + ", " + a4[1] + ")"; -} -function exactEquals6(a4, b10) { - return a4[0] === b10[0] && a4[1] === b10[1]; -} -function equals6(a4, b10) { - var a0 = a4[0], a1 = a4[1]; - var b02 = b10[0], b12 = b10[1]; - return Math.abs(a0 - b02) <= EPSILON * Math.max(1, Math.abs(a0), Math.abs(b02)) && Math.abs(a1 - b12) <= EPSILON * Math.max(1, Math.abs(a1), Math.abs(b12)); -} -var len4 = length4; -var sub5 = subtract5; -var mul6 = multiply6; -var div3 = divide3; -var dist3 = distance3; -var sqrDist3 = squaredDistance3; -var sqrLen4 = squaredLength4; -var forEach3 = function() { - var vec = create6(); - return function(a4, stride, offset, count2, fn, arg) { - var i4, l4; - if (!stride) { - stride = 2; - } - if (!offset) { - offset = 0; - } - if (count2) { - l4 = Math.min(count2 * stride + offset, a4.length); - } else { - l4 = a4.length; - } - for (i4 = offset; i4 < l4; i4 += stride) { - vec[0] = a4[i4]; - vec[1] = a4[i4 + 1]; - fn(vec, vec, arg); - a4[i4] = vec[0]; - a4[i4 + 1] = vec[1]; - } - return a4; - }; -}(); - -// node_modules/@antv/matrix-util/esm/ext.js -var ext_exports = {}; -__export(ext_exports, { - angleTo: () => angleTo, - direction: () => direction, - leftRotate: () => leftRotate, - leftScale: () => leftScale, - leftTranslate: () => leftTranslate, - transform: () => transform, - vertical: () => vertical -}); -function leftTranslate(out, a4, v3) { - var transMat = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - mat3_exports.fromTranslation(transMat, v3); - return mat3_exports.multiply(out, transMat, a4); -} -function leftRotate(out, a4, rad) { - var rotateMat = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - mat3_exports.fromRotation(rotateMat, rad); - return mat3_exports.multiply(out, rotateMat, a4); -} -function leftScale(out, a4, v3) { - var scaleMat = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - mat3_exports.fromScaling(scaleMat, v3); - return mat3_exports.multiply(out, scaleMat, a4); -} -function leftMultiply(out, a4, a1) { - return mat3_exports.multiply(out, a1, a4); -} -function transform(m4, actions) { - var matrix = m4 ? [].concat(m4) : [1, 0, 0, 0, 1, 0, 0, 0, 1]; - for (var i4 = 0, len5 = actions.length; i4 < len5; i4++) { - var action = actions[i4]; - switch (action[0]) { - case "t": - leftTranslate(matrix, matrix, [action[1], action[2]]); - break; - case "s": - leftScale(matrix, matrix, [action[1], action[2]]); - break; - case "r": - leftRotate(matrix, matrix, action[1]); - break; - case "m": - leftMultiply(matrix, matrix, action[1]); - break; - default: - break; - } - } - return matrix; -} -function direction(v1, v22) { - return v1[0] * v22[1] - v22[0] * v1[1]; -} -function angleTo(v1, v22, direct) { - var ang = vec2_exports.angle(v1, v22); - var angleLargeThanPI = direction(v1, v22) >= 0; - if (direct) { - if (angleLargeThanPI) { - return Math.PI * 2 - ang; - } - return ang; - } - if (angleLargeThanPI) { - return ang; - } - return Math.PI * 2 - ang; -} -function vertical(out, v3, flag) { - if (flag) { - out[0] = v3[1]; - out[1] = -1 * v3[0]; - } else { - out[0] = -1 * v3[1]; - out[1] = v3[0]; - } - return out; -} - -// node_modules/@antv/g-base/esm/util/matrix.js -function multiplyMatrix(a4, b10) { - var out = []; - var a00 = a4[0]; - var a01 = a4[1]; - var a02 = a4[2]; - var a10 = a4[3]; - var a11 = a4[4]; - var a12 = a4[5]; - var a20 = a4[6]; - var a21 = a4[7]; - var a22 = a4[8]; - var b00 = b10[0]; - var b01 = b10[1]; - var b02 = b10[2]; - var b102 = b10[3]; - var b11 = b10[4]; - var b12 = b10[5]; - var b20 = b10[6]; - var b21 = b10[7]; - var b222 = b10[8]; - out[0] = b00 * a00 + b01 * a10 + b02 * a20; - out[1] = b00 * a01 + b01 * a11 + b02 * a21; - out[2] = b00 * a02 + b01 * a12 + b02 * a22; - out[3] = b102 * a00 + b11 * a10 + b12 * a20; - out[4] = b102 * a01 + b11 * a11 + b12 * a21; - out[5] = b102 * a02 + b11 * a12 + b12 * a22; - out[6] = b20 * a00 + b21 * a10 + b222 * a20; - out[7] = b20 * a01 + b21 * a11 + b222 * a21; - out[8] = b20 * a02 + b21 * a12 + b222 * a22; - return out; -} -function multiplyVec2(m4, v3) { - var out = []; - var x6 = v3[0]; - var y5 = v3[1]; - out[0] = m4[0] * x6 + m4[3] * y5 + m4[6]; - out[1] = m4[1] * x6 + m4[4] * y5 + m4[7]; - return out; -} -function invert4(a4) { - var out = []; - var a00 = a4[0]; - var a01 = a4[1]; - var a02 = a4[2]; - var a10 = a4[3]; - var a11 = a4[4]; - var a12 = a4[5]; - var a20 = a4[6]; - var a21 = a4[7]; - var a22 = a4[8]; - var b01 = a22 * a11 - a12 * a21; - var b11 = -a22 * a10 + a12 * a20; - var b21 = a21 * a10 - a11 * a20; - var det = a00 * b01 + a01 * b11 + a02 * b21; - if (!det) { - return null; - } - det = 1 / det; - out[0] = b01 * det; - out[1] = (-a22 * a01 + a02 * a21) * det; - out[2] = (a12 * a01 - a02 * a11) * det; - out[3] = b11 * det; - out[4] = (a22 * a00 - a02 * a20) * det; - out[5] = (-a12 * a00 + a02 * a10) * det; - out[6] = b21 * det; - out[7] = (-a21 * a00 + a01 * a20) * det; - out[8] = (a11 * a00 - a01 * a10) * det; - return out; -} - -// node_modules/@antv/g-base/esm/abstract/element.js -var transform2 = ext_exports.transform; -var MATRIX = "matrix"; -var CLONE_CFGS = ["zIndex", "capture", "visible", "type"]; -var RESERVED_PORPS = ["repeat"]; -var DELEGATION_SPLIT = ":"; -var WILDCARD2 = "*"; -function _cloneArrayAttr(arr) { - var result = []; - for (var i4 = 0; i4 < arr.length; i4++) { - if ((0, import_util4.isArray)(arr[i4])) { - result.push([].concat(arr[i4])); - } else { - result.push(arr[i4]); - } - } - return result; -} -function getFormatFromAttrs(toAttrs, shape) { - var fromAttrs = {}; - var attrs = shape.attrs; - for (var k4 in toAttrs) { - fromAttrs[k4] = attrs[k4]; - } - return fromAttrs; -} -function getFormatToAttrs(props, shape) { - var toAttrs = {}; - var attrs = shape.attr(); - (0, import_util4.each)(props, function(v3, k4) { - if (RESERVED_PORPS.indexOf(k4) === -1 && !(0, import_util4.isEqual)(attrs[k4], v3)) { - toAttrs[k4] = v3; - } - }); - return toAttrs; -} -function checkExistedAttrs(animations, animation7) { - if (animation7.onFrame) { - return animations; - } - var startTime = animation7.startTime, delay = animation7.delay, duration = animation7.duration; - var hasOwnProperty = Object.prototype.hasOwnProperty; - (0, import_util4.each)(animations, function(item) { - if (startTime + delay < item.startTime + item.delay + item.duration && duration > item.delay) { - (0, import_util4.each)(animation7.toAttrs, function(v3, k4) { - if (hasOwnProperty.call(item.toAttrs, k4)) { - delete item.toAttrs[k4]; - delete item.fromAttrs[k4]; - } - }); - } - }); - return animations; -} -var Element2 = function(_super) { - __extends(Element4, _super); - function Element4(cfg) { - var _this = _super.call(this, cfg) || this; - _this.attrs = {}; - var attrs = _this.getDefaultAttrs(); - (0, import_util4.mix)(attrs, cfg.attrs); - _this.attrs = attrs; - _this.initAttrs(attrs); - _this.initAnimate(); - return _this; - } - Element4.prototype.getDefaultCfg = function() { - return { - visible: true, - capture: true, - zIndex: 0 - }; - }; - Element4.prototype.getDefaultAttrs = function() { - return { - matrix: this.getDefaultMatrix(), - opacity: 1 - }; - }; - Element4.prototype.onCanvasChange = function(changeType) { - }; - Element4.prototype.initAttrs = function(attrs) { - }; - Element4.prototype.initAnimate = function() { - this.set("animable", true); - this.set("animating", false); - }; - Element4.prototype.isGroup = function() { - return false; - }; - Element4.prototype.getParent = function() { - return this.get("parent"); - }; - Element4.prototype.getCanvas = function() { - return this.get("canvas"); - }; - Element4.prototype.attr = function() { - var _a6; - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var name = args[0], value2 = args[1]; - if (!name) - return this.attrs; - if ((0, import_util4.isObject)(name)) { - for (var k4 in name) { - this.setAttr(k4, name[k4]); - } - this.afterAttrsChange(name); - return this; - } - if (args.length === 2) { - this.setAttr(name, value2); - this.afterAttrsChange((_a6 = {}, _a6[name] = value2, _a6)); - return this; - } - return this.attrs[name]; - }; - Element4.prototype.isClipped = function(refX, refY) { - var clip = this.getClip(); - return clip && !clip.isHit(refX, refY); - }; - Element4.prototype.setAttr = function(name, value2) { - var originValue = this.attrs[name]; - if (originValue !== value2) { - this.attrs[name] = value2; - this.onAttrChange(name, value2, originValue); - } - }; - Element4.prototype.onAttrChange = function(name, value2, originValue) { - if (name === "matrix") { - this.set("totalMatrix", null); - } - }; - Element4.prototype.afterAttrsChange = function(targetAttrs) { - if (this.cfg.isClipShape) { - var applyTo = this.cfg.applyTo; - if (applyTo) { - applyTo.onCanvasChange("clip"); - } - } else { - this.onCanvasChange("attr"); - } - }; - Element4.prototype.show = function() { - this.set("visible", true); - this.onCanvasChange("show"); - return this; - }; - Element4.prototype.hide = function() { - this.set("visible", false); - this.onCanvasChange("hide"); - return this; - }; - Element4.prototype.setZIndex = function(zIndex) { - this.set("zIndex", zIndex); - var parent = this.getParent(); - if (parent) { - parent.sort(); - } - return this; - }; - Element4.prototype.toFront = function() { - var parent = this.getParent(); - if (!parent) { - return; - } - var children = parent.getChildren(); - var el = this.get("el"); - var index2 = children.indexOf(this); - children.splice(index2, 1); - children.push(this); - this.onCanvasChange("zIndex"); - }; - Element4.prototype.toBack = function() { - var parent = this.getParent(); - if (!parent) { - return; - } - var children = parent.getChildren(); - var el = this.get("el"); - var index2 = children.indexOf(this); - children.splice(index2, 1); - children.unshift(this); - this.onCanvasChange("zIndex"); - }; - Element4.prototype.remove = function(destroy) { - if (destroy === void 0) { - destroy = true; - } - var parent = this.getParent(); - if (parent) { - removeFromArray(parent.getChildren(), this); - if (!parent.get("clearing")) { - this.onCanvasChange("remove"); - } - } else { - this.onCanvasChange("remove"); - } - if (destroy) { - this.destroy(); - } - }; - Element4.prototype.resetMatrix = function() { - this.attr(MATRIX, this.getDefaultMatrix()); - this.onCanvasChange("matrix"); - }; - Element4.prototype.getMatrix = function() { - return this.attr(MATRIX); - }; - Element4.prototype.setMatrix = function(m4) { - this.attr(MATRIX, m4); - this.onCanvasChange("matrix"); - }; - Element4.prototype.getTotalMatrix = function() { - var totalMatrix = this.cfg.totalMatrix; - if (!totalMatrix) { - var currentMatrix = this.attr("matrix"); - var parentMatrix = this.cfg.parentMatrix; - if (parentMatrix && currentMatrix) { - totalMatrix = multiplyMatrix(parentMatrix, currentMatrix); - } else { - totalMatrix = currentMatrix || parentMatrix; - } - this.set("totalMatrix", totalMatrix); - } - return totalMatrix; - }; - Element4.prototype.applyMatrix = function(matrix) { - var currentMatrix = this.attr("matrix"); - var totalMatrix = null; - if (matrix && currentMatrix) { - totalMatrix = multiplyMatrix(matrix, currentMatrix); - } else { - totalMatrix = currentMatrix || matrix; - } - this.set("totalMatrix", totalMatrix); - this.set("parentMatrix", matrix); - }; - Element4.prototype.getDefaultMatrix = function() { - return null; - }; - Element4.prototype.applyToMatrix = function(v3) { - var matrix = this.attr("matrix"); - if (matrix) { - return multiplyVec2(matrix, v3); - } - return v3; - }; - Element4.prototype.invertFromMatrix = function(v3) { - var matrix = this.attr("matrix"); - if (matrix) { - var invertMatrix3 = invert4(matrix); - if (invertMatrix3) { - return multiplyVec2(invertMatrix3, v3); - } - } - return v3; - }; - Element4.prototype.setClip = function(clipCfg) { - var canvas = this.getCanvas(); - var clipShape = null; - if (clipCfg) { - var ShapeBase4 = this.getShapeBase(); - var shapeType = (0, import_util4.upperFirst)(clipCfg.type); - var Cons = ShapeBase4[shapeType]; - if (Cons) { - clipShape = new Cons({ - type: clipCfg.type, - isClipShape: true, - applyTo: this, - attrs: clipCfg.attrs, - canvas - }); - } - } - this.set("clipShape", clipShape); - this.onCanvasChange("clip"); - return clipShape; - }; - Element4.prototype.getClip = function() { - var clipShape = this.cfg.clipShape; - if (!clipShape) { - return null; - } - return clipShape; - }; - Element4.prototype.clone = function() { - var _this = this; - var originAttrs = this.attrs; - var attrs = {}; - (0, import_util4.each)(originAttrs, function(i4, k4) { - if ((0, import_util4.isArray)(originAttrs[k4])) { - attrs[k4] = _cloneArrayAttr(originAttrs[k4]); - } else { - attrs[k4] = originAttrs[k4]; - } - }); - var cons = this.constructor; - var clone41 = new cons({ attrs }); - (0, import_util4.each)(CLONE_CFGS, function(cfgName) { - clone41.set(cfgName, _this.get(cfgName)); - }); - return clone41; - }; - Element4.prototype.destroy = function() { - var destroyed = this.destroyed; - if (destroyed) { - return; - } - this.attrs = {}; - _super.prototype.destroy.call(this); - }; - Element4.prototype.isAnimatePaused = function() { - return this.get("_pause").isPaused; - }; - Element4.prototype.animate = function() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - if (!this.get("timeline") && !this.get("canvas")) { - return; - } - this.set("animating", true); - var timeline = this.get("timeline"); - if (!timeline) { - timeline = this.get("canvas").get("timeline"); - this.set("timeline", timeline); - } - var animations = this.get("animations") || []; - if (!timeline.timer) { - timeline.initTimer(); - } - var toAttrs = args[0], duration = args[1], _a6 = args[2], easing = _a6 === void 0 ? "easeLinear" : _a6, _b = args[3], callback = _b === void 0 ? import_util4.noop : _b, _c = args[4], delay = _c === void 0 ? 0 : _c; - var onFrame; - var repeat2; - var pauseCallback; - var resumeCallback; - var animateCfg; - if ((0, import_util4.isFunction)(toAttrs)) { - onFrame = toAttrs; - toAttrs = {}; - } else if ((0, import_util4.isObject)(toAttrs) && toAttrs.onFrame) { - onFrame = toAttrs.onFrame; - repeat2 = toAttrs.repeat; - } - if ((0, import_util4.isObject)(duration)) { - animateCfg = duration; - duration = animateCfg.duration; - easing = animateCfg.easing || "easeLinear"; - delay = animateCfg.delay || 0; - repeat2 = animateCfg.repeat || repeat2 || false; - callback = animateCfg.callback || import_util4.noop; - pauseCallback = animateCfg.pauseCallback || import_util4.noop; - resumeCallback = animateCfg.resumeCallback || import_util4.noop; - } else { - if ((0, import_util4.isNumber)(callback)) { - delay = callback; - callback = null; - } - if ((0, import_util4.isFunction)(easing)) { - callback = easing; - easing = "easeLinear"; - } else { - easing = easing || "easeLinear"; - } - } - var formatToAttrs = getFormatToAttrs(toAttrs, this); - var animation7 = { - fromAttrs: getFormatFromAttrs(formatToAttrs, this), - toAttrs: formatToAttrs, - duration, - easing, - repeat: repeat2, - callback, - pauseCallback, - resumeCallback, - delay, - startTime: timeline.getTime(), - id: (0, import_util4.uniqueId)(), - onFrame, - pathFormatted: false - }; - if (animations.length > 0) { - animations = checkExistedAttrs(animations, animation7); - } else { - timeline.addAnimator(this); - } - animations.push(animation7); - this.set("animations", animations); - this.set("_pause", { isPaused: false }); - }; - Element4.prototype.stopAnimate = function(toEnd) { - var _this = this; - if (toEnd === void 0) { - toEnd = true; - } - var animations = this.get("animations"); - (0, import_util4.each)(animations, function(animation7) { - if (toEnd) { - if (animation7.onFrame) { - _this.attr(animation7.onFrame(1)); - } else { - _this.attr(animation7.toAttrs); - } - } - if (animation7.callback) { - animation7.callback(); - } - }); - this.set("animating", false); - this.set("animations", []); - }; - Element4.prototype.pauseAnimate = function() { - var timeline = this.get("timeline"); - var animations = this.get("animations"); - var pauseTime = timeline.getTime(); - (0, import_util4.each)(animations, function(animation7) { - animation7._paused = true; - animation7._pauseTime = pauseTime; - if (animation7.pauseCallback) { - animation7.pauseCallback(); - } - }); - this.set("_pause", { - isPaused: true, - pauseTime - }); - return this; - }; - Element4.prototype.resumeAnimate = function() { - var timeline = this.get("timeline"); - var current = timeline.getTime(); - var animations = this.get("animations"); - var pauseTime = this.get("_pause").pauseTime; - (0, import_util4.each)(animations, function(animation7) { - animation7.startTime = animation7.startTime + (current - pauseTime); - animation7._paused = false; - animation7._pauseTime = null; - if (animation7.resumeCallback) { - animation7.resumeCallback(); - } - }); - this.set("_pause", { - isPaused: false - }); - this.set("animations", animations); - return this; - }; - Element4.prototype.emitDelegation = function(type2, eventObj) { - var _this = this; - var paths = eventObj.propagationPath; - var events = this.getEvents(); - var relativeShape; - if (type2 === "mouseenter") { - relativeShape = eventObj.fromShape; - } else if (type2 === "mouseleave") { - relativeShape = eventObj.toShape; - } - var _loop_1 = function(i5) { - var element = paths[i5]; - var name_1 = element.get("name"); - if (name_1) { - if ((element.isGroup() || element.isCanvas && element.isCanvas()) && relativeShape && isParent(element, relativeShape)) { - return "break"; - } - if ((0, import_util4.isArray)(name_1)) { - (0, import_util4.each)(name_1, function(subName) { - _this.emitDelegateEvent(element, subName, eventObj); - }); - } else { - this_1.emitDelegateEvent(element, name_1, eventObj); - } - } - }; - var this_1 = this; - for (var i4 = 0; i4 < paths.length; i4++) { - var state_1 = _loop_1(i4); - if (state_1 === "break") - break; - } - }; - Element4.prototype.emitDelegateEvent = function(element, name, eventObj) { - var events = this.getEvents(); - var eventName = name + DELEGATION_SPLIT + eventObj.type; - if (events[eventName] || events[WILDCARD2]) { - eventObj.name = eventName; - eventObj.currentTarget = element; - eventObj.delegateTarget = this; - eventObj.delegateObject = element.get("delegateObject"); - this.emit(eventName, eventObj); - } - }; - Element4.prototype.translate = function(translateX, translateY) { - if (translateX === void 0) { - translateX = 0; - } - if (translateY === void 0) { - translateY = 0; - } - var matrix = this.getMatrix(); - var newMatrix = transform2(matrix, [["t", translateX, translateY]]); - this.setMatrix(newMatrix); - return this; - }; - Element4.prototype.move = function(targetX, targetY) { - var x6 = this.attr("x") || 0; - var y5 = this.attr("y") || 0; - this.translate(targetX - x6, targetY - y5); - return this; - }; - Element4.prototype.moveTo = function(targetX, targetY) { - return this.move(targetX, targetY); - }; - Element4.prototype.scale = function(ratioX, ratioY) { - var matrix = this.getMatrix(); - var newMatrix = transform2(matrix, [["s", ratioX, ratioY || ratioX]]); - this.setMatrix(newMatrix); - return this; - }; - Element4.prototype.rotate = function(radian) { - var matrix = this.getMatrix(); - var newMatrix = transform2(matrix, [["r", radian]]); - this.setMatrix(newMatrix); - return this; - }; - Element4.prototype.rotateAtStart = function(rotate8) { - var _a6 = this.attr(), x6 = _a6.x, y5 = _a6.y; - var matrix = this.getMatrix(); - var newMatrix = transform2(matrix, [ - ["t", -x6, -y5], - ["r", rotate8], - ["t", x6, y5] - ]); - this.setMatrix(newMatrix); - return this; - }; - Element4.prototype.rotateAtPoint = function(x6, y5, rotate8) { - var matrix = this.getMatrix(); - var newMatrix = transform2(matrix, [ - ["t", -x6, -y5], - ["r", rotate8], - ["t", x6, y5] - ]); - this.setMatrix(newMatrix); - return this; - }; - return Element4; -}(base_default2); -var element_default = Element2; - -// node_modules/@antv/g-base/esm/abstract/container.js -var SHAPE_MAP = {}; -var INDEX = "_INDEX"; -function setCanvas(element, canvas) { - element.set("canvas", canvas); - if (element.isGroup()) { - var children = element.get("children"); - if (children.length) { - children.forEach(function(child) { - setCanvas(child, canvas); - }); - } - } -} -function setTimeline(element, timeline) { - element.set("timeline", timeline); - if (element.isGroup()) { - var children = element.get("children"); - if (children.length) { - children.forEach(function(child) { - setTimeline(child, timeline); - }); - } - } -} -function removeChild(container2, element, destroy) { - if (destroy === void 0) { - destroy = true; - } - if (destroy) { - element.destroy(); - } else { - element.set("parent", null); - element.set("canvas", null); - } - removeFromArray(container2.getChildren(), element); -} -function getComparer(compare4) { - return function(left2, right2) { - var result = compare4(left2, right2); - return result === 0 ? left2[INDEX] - right2[INDEX] : result; - }; -} -var Container = function(_super) { - __extends(Container3, _super); - function Container3() { - return _super !== null && _super.apply(this, arguments) || this; - } - Container3.prototype.isCanvas = function() { - return false; - }; - Container3.prototype.getBBox = function() { - var minX = Infinity; - var maxX = -Infinity; - var minY = Infinity; - var maxY2 = -Infinity; - var xArr = []; - var yArr = []; - var children = this.getChildren().filter(function(child) { - return child.get("visible") && (!child.isGroup() || child.isGroup() && child.getChildren().length > 0); - }); - if (children.length > 0) { - (0, import_util2.each)(children, function(child) { - var box3 = child.getBBox(); - xArr.push(box3.minX, box3.maxX); - yArr.push(box3.minY, box3.maxY); - }); - minX = (0, import_util6.min)(xArr); - maxX = (0, import_util6.max)(xArr); - minY = (0, import_util6.min)(yArr); - maxY2 = (0, import_util6.max)(yArr); - } else { - minX = 0; - maxX = 0; - minY = 0; - maxY2 = 0; - } - var box2 = { - x: minX, - y: minY, - minX, - minY, - maxX, - maxY: maxY2, - width: maxX - minX, - height: maxY2 - minY - }; - return box2; - }; - Container3.prototype.getCanvasBBox = function() { - var minX = Infinity; - var maxX = -Infinity; - var minY = Infinity; - var maxY2 = -Infinity; - var xArr = []; - var yArr = []; - var children = this.getChildren().filter(function(child) { - return child.get("visible") && (!child.isGroup() || child.isGroup() && child.getChildren().length > 0); - }); - if (children.length > 0) { - (0, import_util2.each)(children, function(child) { - var box3 = child.getCanvasBBox(); - xArr.push(box3.minX, box3.maxX); - yArr.push(box3.minY, box3.maxY); - }); - minX = (0, import_util6.min)(xArr); - maxX = (0, import_util6.max)(xArr); - minY = (0, import_util6.min)(yArr); - maxY2 = (0, import_util6.max)(yArr); - } else { - minX = 0; - maxX = 0; - minY = 0; - maxY2 = 0; - } - var box2 = { - x: minX, - y: minY, - minX, - minY, - maxX, - maxY: maxY2, - width: maxX - minX, - height: maxY2 - minY - }; - return box2; - }; - Container3.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - cfg["children"] = []; - return cfg; - }; - Container3.prototype.onAttrChange = function(name, value2, originValue) { - _super.prototype.onAttrChange.call(this, name, value2, originValue); - if (name === "matrix") { - var totalMatrix = this.getTotalMatrix(); - this._applyChildrenMarix(totalMatrix); - } - }; - Container3.prototype.applyMatrix = function(matrix) { - var preTotalMatrix = this.getTotalMatrix(); - _super.prototype.applyMatrix.call(this, matrix); - var totalMatrix = this.getTotalMatrix(); - if (totalMatrix === preTotalMatrix) { - return; - } - this._applyChildrenMarix(totalMatrix); - }; - Container3.prototype._applyChildrenMarix = function(totalMatrix) { - var children = this.getChildren(); - (0, import_util2.each)(children, function(child) { - child.applyMatrix(totalMatrix); - }); - }; - Container3.prototype.addShape = function() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var type2 = args[0]; - var cfg = args[1]; - if ((0, import_util2.isObject)(type2)) { - cfg = type2; - } else { - cfg["type"] = type2; - } - var shapeType = SHAPE_MAP[cfg.type]; - if (!shapeType) { - shapeType = (0, import_util2.upperFirst)(cfg.type); - SHAPE_MAP[cfg.type] = shapeType; - } - var ShapeBase4 = this.getShapeBase(); - var shape = new ShapeBase4[shapeType](cfg); - this.add(shape); - return shape; - }; - Container3.prototype.addGroup = function() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var groupClass = args[0], cfg = args[1]; - var group3; - if ((0, import_util2.isFunction)(groupClass)) { - if (cfg) { - group3 = new groupClass(cfg); - } else { - group3 = new groupClass({ - parent: this - }); - } - } else { - var tmpCfg = groupClass || {}; - var TmpGroupClass = this.getGroupBase(); - group3 = new TmpGroupClass(tmpCfg); - } - this.add(group3); - return group3; - }; - Container3.prototype.getCanvas = function() { - var canvas; - if (this.isCanvas()) { - canvas = this; - } else { - canvas = this.get("canvas"); - } - return canvas; - }; - Container3.prototype.getShape = function(x6, y5, ev) { - if (!isAllowCapture(this)) { - return null; - } - var children = this.getChildren(); - var shape; - if (!this.isCanvas()) { - var v3 = [x6, y5, 1]; - v3 = this.invertFromMatrix(v3); - if (!this.isClipped(v3[0], v3[1])) { - shape = this._findShape(children, v3[0], v3[1], ev); - } - } else { - shape = this._findShape(children, x6, y5, ev); - } - return shape; - }; - Container3.prototype._findShape = function(children, x6, y5, ev) { - var shape = null; - for (var i4 = children.length - 1; i4 >= 0; i4--) { - var child = children[i4]; - if (isAllowCapture(child)) { - if (child.isGroup()) { - shape = child.getShape(x6, y5, ev); - } else if (child.isHit(x6, y5)) { - shape = child; - } - } - if (shape) { - break; - } - } - return shape; - }; - Container3.prototype.add = function(element) { - var canvas = this.getCanvas(); - var children = this.getChildren(); - var timeline = this.get("timeline"); - var preParent = element.getParent(); - if (preParent) { - removeChild(preParent, element, false); - } - element.set("parent", this); - if (canvas) { - setCanvas(element, canvas); - } - if (timeline) { - setTimeline(element, timeline); - } - children.push(element); - element.onCanvasChange("add"); - this._applyElementMatrix(element); - }; - Container3.prototype._applyElementMatrix = function(element) { - var totalMatrix = this.getTotalMatrix(); - if (totalMatrix) { - element.applyMatrix(totalMatrix); - } - }; - Container3.prototype.getChildren = function() { - return this.get("children"); - }; - Container3.prototype.sort = function() { - var children = this.getChildren(); - (0, import_util2.each)(children, function(child, index2) { - child[INDEX] = index2; - return child; - }); - children.sort(getComparer(function(obj1, obj2) { - return obj1.get("zIndex") - obj2.get("zIndex"); - })); - this.onCanvasChange("sort"); - }; - Container3.prototype.clear = function() { - this.set("clearing", true); - if (this.destroyed) { - return; - } - var children = this.getChildren(); - for (var i4 = children.length - 1; i4 >= 0; i4--) { - children[i4].destroy(); - } - this.set("children", []); - this.onCanvasChange("clear"); - this.set("clearing", false); - }; - Container3.prototype.destroy = function() { - if (this.get("destroyed")) { - return; - } - this.clear(); - _super.prototype.destroy.call(this); - }; - Container3.prototype.getFirst = function() { - return this.getChildByIndex(0); - }; - Container3.prototype.getLast = function() { - var children = this.getChildren(); - return this.getChildByIndex(children.length - 1); - }; - Container3.prototype.getChildByIndex = function(index2) { - var children = this.getChildren(); - return children[index2]; - }; - Container3.prototype.getCount = function() { - var children = this.getChildren(); - return children.length; - }; - Container3.prototype.contain = function(element) { - var children = this.getChildren(); - return children.indexOf(element) > -1; - }; - Container3.prototype.removeChild = function(element, destroy) { - if (destroy === void 0) { - destroy = true; - } - if (this.contain(element)) { - element.remove(destroy); - } - }; - Container3.prototype.findAll = function(fn) { - var rst = []; - var children = this.getChildren(); - (0, import_util2.each)(children, function(element) { - if (fn(element)) { - rst.push(element); - } - if (element.isGroup()) { - rst = rst.concat(element.findAll(fn)); - } - }); - return rst; - }; - Container3.prototype.find = function(fn) { - var rst = null; - var children = this.getChildren(); - (0, import_util2.each)(children, function(element) { - if (fn(element)) { - rst = element; - } else if (element.isGroup()) { - rst = element.find(fn); - } - if (rst) { - return false; - } - }); - return rst; - }; - Container3.prototype.findById = function(id) { - return this.find(function(element) { - return element.get("id") === id; - }); - }; - Container3.prototype.findByClassName = function(className) { - return this.find(function(element) { - return element.get("className") === className; - }); - }; - Container3.prototype.findAllByName = function(name) { - return this.findAll(function(element) { - return element.get("name") === name; - }); - }; - return Container3; -}(element_default); -var container_default = Container; - -// node_modules/@antv/g-base/esm/animate/timeline.js -var import_util8 = __toModule(require_lib()); - -// node_modules/d3-timer/src/timer.js -var frame = 0; -var timeout = 0; -var interval = 0; -var pokeDelay = 1e3; -var taskHead; -var taskTail; -var clockLast = 0; -var clockNow = 0; -var clockSkew = 0; -var clock = typeof performance === "object" && performance.now ? performance : Date; -var setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f3) { - setTimeout(f3, 17); -}; -function now() { - return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); -} -function clearNow() { - clockNow = 0; -} -function Timer() { - this._call = this._time = this._next = null; -} -Timer.prototype = timer.prototype = { - constructor: Timer, - restart: function(callback, delay, time2) { - if (typeof callback !== "function") - throw new TypeError("callback is not a function"); - time2 = (time2 == null ? now() : +time2) + (delay == null ? 0 : +delay); - if (!this._next && taskTail !== this) { - if (taskTail) - taskTail._next = this; - else - taskHead = this; - taskTail = this; - } - this._call = callback; - this._time = time2; - sleep(); - }, - stop: function() { - if (this._call) { - this._call = null; - this._time = Infinity; - sleep(); - } - } -}; -function timer(callback, delay, time2) { - var t4 = new Timer(); - t4.restart(callback, delay, time2); - return t4; -} -function timerFlush() { - now(); - ++frame; - var t4 = taskHead, e4; - while (t4) { - if ((e4 = clockNow - t4._time) >= 0) - t4._call.call(null, e4); - t4 = t4._next; - } - --frame; -} -function wake() { - clockNow = (clockLast = clock.now()) + clockSkew; - frame = timeout = 0; - try { - timerFlush(); - } finally { - frame = 0; - nap(); - clockNow = 0; - } -} -function poke() { - var now2 = clock.now(), delay = now2 - clockLast; - if (delay > pokeDelay) - clockSkew -= delay, clockLast = now2; -} -function nap() { - var t0, t1 = taskHead, t22, time2 = Infinity; - while (t1) { - if (t1._call) { - if (time2 > t1._time) - time2 = t1._time; - t0 = t1, t1 = t1._next; - } else { - t22 = t1._next, t1._next = null; - t1 = t0 ? t0._next = t22 : taskHead = t22; - } - } - taskTail = t0; - sleep(time2); -} -function sleep(time2) { - if (frame) - return; - if (timeout) - timeout = clearTimeout(timeout); - var delay = time2 - clockNow; - if (delay > 24) { - if (time2 < Infinity) - timeout = setTimeout(wake, time2 - clock.now() - clockSkew); - if (interval) - interval = clearInterval(interval); - } else { - if (!interval) - clockLast = clock.now(), interval = setInterval(poke, pokeDelay); - frame = 1, setFrame(wake); - } -} - -// node_modules/d3-ease/src/index.js -var src_exports = {}; -__export(src_exports, { - easeBack: () => backInOut, - easeBackIn: () => backIn, - easeBackInOut: () => backInOut, - easeBackOut: () => backOut, - easeBounce: () => bounceOut, - easeBounceIn: () => bounceIn, - easeBounceInOut: () => bounceInOut, - easeBounceOut: () => bounceOut, - easeCircle: () => circleInOut, - easeCircleIn: () => circleIn, - easeCircleInOut: () => circleInOut, - easeCircleOut: () => circleOut, - easeCubic: () => cubicInOut, - easeCubicIn: () => cubicIn, - easeCubicInOut: () => cubicInOut, - easeCubicOut: () => cubicOut, - easeElastic: () => elasticOut, - easeElasticIn: () => elasticIn, - easeElasticInOut: () => elasticInOut, - easeElasticOut: () => elasticOut, - easeExp: () => expInOut, - easeExpIn: () => expIn, - easeExpInOut: () => expInOut, - easeExpOut: () => expOut, - easeLinear: () => linear, - easePoly: () => polyInOut, - easePolyIn: () => polyIn, - easePolyInOut: () => polyInOut, - easePolyOut: () => polyOut, - easeQuad: () => quadInOut, - easeQuadIn: () => quadIn, - easeQuadInOut: () => quadInOut, - easeQuadOut: () => quadOut, - easeSin: () => sinInOut, - easeSinIn: () => sinIn, - easeSinInOut: () => sinInOut, - easeSinOut: () => sinOut -}); - -// node_modules/d3-ease/src/linear.js -function linear(t4) { - return +t4; -} - -// node_modules/d3-ease/src/quad.js -function quadIn(t4) { - return t4 * t4; -} -function quadOut(t4) { - return t4 * (2 - t4); -} -function quadInOut(t4) { - return ((t4 *= 2) <= 1 ? t4 * t4 : --t4 * (2 - t4) + 1) / 2; -} - -// node_modules/d3-ease/src/cubic.js -function cubicIn(t4) { - return t4 * t4 * t4; -} -function cubicOut(t4) { - return --t4 * t4 * t4 + 1; -} -function cubicInOut(t4) { - return ((t4 *= 2) <= 1 ? t4 * t4 * t4 : (t4 -= 2) * t4 * t4 + 2) / 2; -} - -// node_modules/d3-ease/src/poly.js -var exponent = 3; -var polyIn = function custom(e4) { - e4 = +e4; - function polyIn2(t4) { - return Math.pow(t4, e4); - } - polyIn2.exponent = custom; - return polyIn2; -}(exponent); -var polyOut = function custom2(e4) { - e4 = +e4; - function polyOut2(t4) { - return 1 - Math.pow(1 - t4, e4); - } - polyOut2.exponent = custom2; - return polyOut2; -}(exponent); -var polyInOut = function custom3(e4) { - e4 = +e4; - function polyInOut2(t4) { - return ((t4 *= 2) <= 1 ? Math.pow(t4, e4) : 2 - Math.pow(2 - t4, e4)) / 2; - } - polyInOut2.exponent = custom3; - return polyInOut2; -}(exponent); - -// node_modules/d3-ease/src/sin.js -var pi = Math.PI; -var halfPi = pi / 2; -function sinIn(t4) { - return +t4 === 1 ? 1 : 1 - Math.cos(t4 * halfPi); -} -function sinOut(t4) { - return Math.sin(t4 * halfPi); -} -function sinInOut(t4) { - return (1 - Math.cos(pi * t4)) / 2; -} - -// node_modules/d3-ease/src/math.js -function tpmt(x6) { - return (Math.pow(2, -10 * x6) - 9765625e-10) * 1.0009775171065494; -} - -// node_modules/d3-ease/src/exp.js -function expIn(t4) { - return tpmt(1 - +t4); -} -function expOut(t4) { - return 1 - tpmt(t4); -} -function expInOut(t4) { - return ((t4 *= 2) <= 1 ? tpmt(1 - t4) : 2 - tpmt(t4 - 1)) / 2; -} - -// node_modules/d3-ease/src/circle.js -function circleIn(t4) { - return 1 - Math.sqrt(1 - t4 * t4); -} -function circleOut(t4) { - return Math.sqrt(1 - --t4 * t4); -} -function circleInOut(t4) { - return ((t4 *= 2) <= 1 ? 1 - Math.sqrt(1 - t4 * t4) : Math.sqrt(1 - (t4 -= 2) * t4) + 1) / 2; -} - -// node_modules/d3-ease/src/bounce.js -var b1 = 4 / 11; -var b22 = 6 / 11; -var b3 = 8 / 11; -var b4 = 3 / 4; -var b5 = 9 / 11; -var b6 = 10 / 11; -var b7 = 15 / 16; -var b8 = 21 / 22; -var b9 = 63 / 64; -var b0 = 1 / b1 / b1; -function bounceIn(t4) { - return 1 - bounceOut(1 - t4); -} -function bounceOut(t4) { - return (t4 = +t4) < b1 ? b0 * t4 * t4 : t4 < b3 ? b0 * (t4 -= b22) * t4 + b4 : t4 < b6 ? b0 * (t4 -= b5) * t4 + b7 : b0 * (t4 -= b8) * t4 + b9; -} -function bounceInOut(t4) { - return ((t4 *= 2) <= 1 ? 1 - bounceOut(1 - t4) : bounceOut(t4 - 1) + 1) / 2; -} - -// node_modules/d3-ease/src/back.js -var overshoot = 1.70158; -var backIn = function custom4(s4) { - s4 = +s4; - function backIn2(t4) { - return (t4 = +t4) * t4 * (s4 * (t4 - 1) + t4); - } - backIn2.overshoot = custom4; - return backIn2; -}(overshoot); -var backOut = function custom5(s4) { - s4 = +s4; - function backOut2(t4) { - return --t4 * t4 * ((t4 + 1) * s4 + t4) + 1; - } - backOut2.overshoot = custom5; - return backOut2; -}(overshoot); -var backInOut = function custom6(s4) { - s4 = +s4; - function backInOut2(t4) { - return ((t4 *= 2) < 1 ? t4 * t4 * ((s4 + 1) * t4 - s4) : (t4 -= 2) * t4 * ((s4 + 1) * t4 + s4) + 2) / 2; - } - backInOut2.overshoot = custom6; - return backInOut2; -}(overshoot); - -// node_modules/d3-ease/src/elastic.js -var tau = 2 * Math.PI; -var amplitude = 1; -var period = 0.3; -var elasticIn = function custom7(a4, p4) { - var s4 = Math.asin(1 / (a4 = Math.max(1, a4))) * (p4 /= tau); - function elasticIn2(t4) { - return a4 * tpmt(- --t4) * Math.sin((s4 - t4) / p4); - } - elasticIn2.amplitude = function(a5) { - return custom7(a5, p4 * tau); - }; - elasticIn2.period = function(p5) { - return custom7(a4, p5); - }; - return elasticIn2; -}(amplitude, period); -var elasticOut = function custom8(a4, p4) { - var s4 = Math.asin(1 / (a4 = Math.max(1, a4))) * (p4 /= tau); - function elasticOut2(t4) { - return 1 - a4 * tpmt(t4 = +t4) * Math.sin((t4 + s4) / p4); - } - elasticOut2.amplitude = function(a5) { - return custom8(a5, p4 * tau); - }; - elasticOut2.period = function(p5) { - return custom8(a4, p5); - }; - return elasticOut2; -}(amplitude, period); -var elasticInOut = function custom9(a4, p4) { - var s4 = Math.asin(1 / (a4 = Math.max(1, a4))) * (p4 /= tau); - function elasticInOut2(t4) { - return ((t4 = t4 * 2 - 1) < 0 ? a4 * tpmt(-t4) * Math.sin((s4 - t4) / p4) : 2 - a4 * tpmt(t4) * Math.sin((s4 + t4) / p4)) / 2; - } - elasticInOut2.amplitude = function(a5) { - return custom9(a5, p4 * tau); - }; - elasticInOut2.period = function(p5) { - return custom9(a4, p5); - }; - return elasticInOut2; -}(amplitude, period); - -// node_modules/d3-color/src/define.js -function define_default(constructor, factory, prototype) { - constructor.prototype = factory.prototype = prototype; - prototype.constructor = constructor; -} -function extend3(parent, definition) { - var prototype = Object.create(parent.prototype); - for (var key in definition) - prototype[key] = definition[key]; - return prototype; -} - -// node_modules/d3-color/src/color.js -function Color() { -} -var darker = 0.7; -var brighter = 1 / darker; -var reI = "\\s*([+-]?\\d+)\\s*"; -var reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*"; -var reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*"; -var reHex = /^#([0-9a-f]{3,8})$/; -var reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"); -var reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"); -var reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"); -var reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"); -var reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"); -var reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$"); -var named = { - aliceblue: 15792383, - antiquewhite: 16444375, - aqua: 65535, - aquamarine: 8388564, - azure: 15794175, - beige: 16119260, - bisque: 16770244, - black: 0, - blanchedalmond: 16772045, - blue: 255, - blueviolet: 9055202, - brown: 10824234, - burlywood: 14596231, - cadetblue: 6266528, - chartreuse: 8388352, - chocolate: 13789470, - coral: 16744272, - cornflowerblue: 6591981, - cornsilk: 16775388, - crimson: 14423100, - cyan: 65535, - darkblue: 139, - darkcyan: 35723, - darkgoldenrod: 12092939, - darkgray: 11119017, - darkgreen: 25600, - darkgrey: 11119017, - darkkhaki: 12433259, - darkmagenta: 9109643, - darkolivegreen: 5597999, - darkorange: 16747520, - darkorchid: 10040012, - darkred: 9109504, - darksalmon: 15308410, - darkseagreen: 9419919, - darkslateblue: 4734347, - darkslategray: 3100495, - darkslategrey: 3100495, - darkturquoise: 52945, - darkviolet: 9699539, - deeppink: 16716947, - deepskyblue: 49151, - dimgray: 6908265, - dimgrey: 6908265, - dodgerblue: 2003199, - firebrick: 11674146, - floralwhite: 16775920, - forestgreen: 2263842, - fuchsia: 16711935, - gainsboro: 14474460, - ghostwhite: 16316671, - gold: 16766720, - goldenrod: 14329120, - gray: 8421504, - green: 32768, - greenyellow: 11403055, - grey: 8421504, - honeydew: 15794160, - hotpink: 16738740, - indianred: 13458524, - indigo: 4915330, - ivory: 16777200, - khaki: 15787660, - lavender: 15132410, - lavenderblush: 16773365, - lawngreen: 8190976, - lemonchiffon: 16775885, - lightblue: 11393254, - lightcoral: 15761536, - lightcyan: 14745599, - lightgoldenrodyellow: 16448210, - lightgray: 13882323, - lightgreen: 9498256, - lightgrey: 13882323, - lightpink: 16758465, - lightsalmon: 16752762, - lightseagreen: 2142890, - lightskyblue: 8900346, - lightslategray: 7833753, - lightslategrey: 7833753, - lightsteelblue: 11584734, - lightyellow: 16777184, - lime: 65280, - limegreen: 3329330, - linen: 16445670, - magenta: 16711935, - maroon: 8388608, - mediumaquamarine: 6737322, - mediumblue: 205, - mediumorchid: 12211667, - mediumpurple: 9662683, - mediumseagreen: 3978097, - mediumslateblue: 8087790, - mediumspringgreen: 64154, - mediumturquoise: 4772300, - mediumvioletred: 13047173, - midnightblue: 1644912, - mintcream: 16121850, - mistyrose: 16770273, - moccasin: 16770229, - navajowhite: 16768685, - navy: 128, - oldlace: 16643558, - olive: 8421376, - olivedrab: 7048739, - orange: 16753920, - orangered: 16729344, - orchid: 14315734, - palegoldenrod: 15657130, - palegreen: 10025880, - paleturquoise: 11529966, - palevioletred: 14381203, - papayawhip: 16773077, - peachpuff: 16767673, - peru: 13468991, - pink: 16761035, - plum: 14524637, - powderblue: 11591910, - purple: 8388736, - rebeccapurple: 6697881, - red: 16711680, - rosybrown: 12357519, - royalblue: 4286945, - saddlebrown: 9127187, - salmon: 16416882, - sandybrown: 16032864, - seagreen: 3050327, - seashell: 16774638, - sienna: 10506797, - silver: 12632256, - skyblue: 8900331, - slateblue: 6970061, - slategray: 7372944, - slategrey: 7372944, - snow: 16775930, - springgreen: 65407, - steelblue: 4620980, - tan: 13808780, - teal: 32896, - thistle: 14204888, - tomato: 16737095, - turquoise: 4251856, - violet: 15631086, - wheat: 16113331, - white: 16777215, - whitesmoke: 16119285, - yellow: 16776960, - yellowgreen: 10145074 -}; -define_default(Color, color, { - copy: function(channels) { - return Object.assign(new this.constructor(), this, channels); - }, - displayable: function() { - return this.rgb().displayable(); - }, - hex: color_formatHex, - formatHex: color_formatHex, - formatHsl: color_formatHsl, - formatRgb: color_formatRgb, - toString: color_formatRgb -}); -function color_formatHex() { - return this.rgb().formatHex(); -} -function color_formatHsl() { - return hslConvert(this).formatHsl(); -} -function color_formatRgb() { - return this.rgb().formatRgb(); -} -function color(format2) { - var m4, l4; - format2 = (format2 + "").trim().toLowerCase(); - return (m4 = reHex.exec(format2)) ? (l4 = m4[1].length, m4 = parseInt(m4[1], 16), l4 === 6 ? rgbn(m4) : l4 === 3 ? new Rgb(m4 >> 8 & 15 | m4 >> 4 & 240, m4 >> 4 & 15 | m4 & 240, (m4 & 15) << 4 | m4 & 15, 1) : l4 === 8 ? rgba(m4 >> 24 & 255, m4 >> 16 & 255, m4 >> 8 & 255, (m4 & 255) / 255) : l4 === 4 ? rgba(m4 >> 12 & 15 | m4 >> 8 & 240, m4 >> 8 & 15 | m4 >> 4 & 240, m4 >> 4 & 15 | m4 & 240, ((m4 & 15) << 4 | m4 & 15) / 255) : null) : (m4 = reRgbInteger.exec(format2)) ? new Rgb(m4[1], m4[2], m4[3], 1) : (m4 = reRgbPercent.exec(format2)) ? new Rgb(m4[1] * 255 / 100, m4[2] * 255 / 100, m4[3] * 255 / 100, 1) : (m4 = reRgbaInteger.exec(format2)) ? rgba(m4[1], m4[2], m4[3], m4[4]) : (m4 = reRgbaPercent.exec(format2)) ? rgba(m4[1] * 255 / 100, m4[2] * 255 / 100, m4[3] * 255 / 100, m4[4]) : (m4 = reHslPercent.exec(format2)) ? hsla(m4[1], m4[2] / 100, m4[3] / 100, 1) : (m4 = reHslaPercent.exec(format2)) ? hsla(m4[1], m4[2] / 100, m4[3] / 100, m4[4]) : named.hasOwnProperty(format2) ? rgbn(named[format2]) : format2 === "transparent" ? new Rgb(NaN, NaN, NaN, 0) : null; -} -function rgbn(n3) { - return new Rgb(n3 >> 16 & 255, n3 >> 8 & 255, n3 & 255, 1); -} -function rgba(r4, g4, b10, a4) { - if (a4 <= 0) - r4 = g4 = b10 = NaN; - return new Rgb(r4, g4, b10, a4); -} -function rgbConvert(o3) { - if (!(o3 instanceof Color)) - o3 = color(o3); - if (!o3) - return new Rgb(); - o3 = o3.rgb(); - return new Rgb(o3.r, o3.g, o3.b, o3.opacity); -} -function rgb(r4, g4, b10, opacity) { - return arguments.length === 1 ? rgbConvert(r4) : new Rgb(r4, g4, b10, opacity == null ? 1 : opacity); -} -function Rgb(r4, g4, b10, opacity) { - this.r = +r4; - this.g = +g4; - this.b = +b10; - this.opacity = +opacity; -} -define_default(Rgb, rgb, extend3(Color, { - brighter: function(k4) { - k4 = k4 == null ? brighter : Math.pow(brighter, k4); - return new Rgb(this.r * k4, this.g * k4, this.b * k4, this.opacity); - }, - darker: function(k4) { - k4 = k4 == null ? darker : Math.pow(darker, k4); - return new Rgb(this.r * k4, this.g * k4, this.b * k4, this.opacity); - }, - rgb: function() { - return this; - }, - displayable: function() { - return -0.5 <= this.r && this.r < 255.5 && (-0.5 <= this.g && this.g < 255.5) && (-0.5 <= this.b && this.b < 255.5) && (0 <= this.opacity && this.opacity <= 1); - }, - hex: rgb_formatHex, - formatHex: rgb_formatHex, - formatRgb: rgb_formatRgb, - toString: rgb_formatRgb -})); -function rgb_formatHex() { - return "#" + hex(this.r) + hex(this.g) + hex(this.b); -} -function rgb_formatRgb() { - var a4 = this.opacity; - a4 = isNaN(a4) ? 1 : Math.max(0, Math.min(1, a4)); - return (a4 === 1 ? "rgb(" : "rgba(") + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " + Math.max(0, Math.min(255, Math.round(this.b) || 0)) + (a4 === 1 ? ")" : ", " + a4 + ")"); -} -function hex(value2) { - value2 = Math.max(0, Math.min(255, Math.round(value2) || 0)); - return (value2 < 16 ? "0" : "") + value2.toString(16); -} -function hsla(h3, s4, l4, a4) { - if (a4 <= 0) - h3 = s4 = l4 = NaN; - else if (l4 <= 0 || l4 >= 1) - h3 = s4 = NaN; - else if (s4 <= 0) - h3 = NaN; - return new Hsl(h3, s4, l4, a4); -} -function hslConvert(o3) { - if (o3 instanceof Hsl) - return new Hsl(o3.h, o3.s, o3.l, o3.opacity); - if (!(o3 instanceof Color)) - o3 = color(o3); - if (!o3) - return new Hsl(); - if (o3 instanceof Hsl) - return o3; - o3 = o3.rgb(); - var r4 = o3.r / 255, g4 = o3.g / 255, b10 = o3.b / 255, min13 = Math.min(r4, g4, b10), max15 = Math.max(r4, g4, b10), h3 = NaN, s4 = max15 - min13, l4 = (max15 + min13) / 2; - if (s4) { - if (r4 === max15) - h3 = (g4 - b10) / s4 + (g4 < b10) * 6; - else if (g4 === max15) - h3 = (b10 - r4) / s4 + 2; - else - h3 = (r4 - g4) / s4 + 4; - s4 /= l4 < 0.5 ? max15 + min13 : 2 - max15 - min13; - h3 *= 60; - } else { - s4 = l4 > 0 && l4 < 1 ? 0 : h3; - } - return new Hsl(h3, s4, l4, o3.opacity); -} -function hsl(h3, s4, l4, opacity) { - return arguments.length === 1 ? hslConvert(h3) : new Hsl(h3, s4, l4, opacity == null ? 1 : opacity); -} -function Hsl(h3, s4, l4, opacity) { - this.h = +h3; - this.s = +s4; - this.l = +l4; - this.opacity = +opacity; -} -define_default(Hsl, hsl, extend3(Color, { - brighter: function(k4) { - k4 = k4 == null ? brighter : Math.pow(brighter, k4); - return new Hsl(this.h, this.s, this.l * k4, this.opacity); - }, - darker: function(k4) { - k4 = k4 == null ? darker : Math.pow(darker, k4); - return new Hsl(this.h, this.s, this.l * k4, this.opacity); - }, - rgb: function() { - var h3 = this.h % 360 + (this.h < 0) * 360, s4 = isNaN(h3) || isNaN(this.s) ? 0 : this.s, l4 = this.l, m22 = l4 + (l4 < 0.5 ? l4 : 1 - l4) * s4, m1 = 2 * l4 - m22; - return new Rgb(hsl2rgb(h3 >= 240 ? h3 - 240 : h3 + 120, m1, m22), hsl2rgb(h3, m1, m22), hsl2rgb(h3 < 120 ? h3 + 240 : h3 - 120, m1, m22), this.opacity); - }, - displayable: function() { - return (0 <= this.s && this.s <= 1 || isNaN(this.s)) && (0 <= this.l && this.l <= 1) && (0 <= this.opacity && this.opacity <= 1); - }, - formatHsl: function() { - var a4 = this.opacity; - a4 = isNaN(a4) ? 1 : Math.max(0, Math.min(1, a4)); - return (a4 === 1 ? "hsl(" : "hsla(") + (this.h || 0) + ", " + (this.s || 0) * 100 + "%, " + (this.l || 0) * 100 + "%" + (a4 === 1 ? ")" : ", " + a4 + ")"); - } -})); -function hsl2rgb(h3, m1, m22) { - return (h3 < 60 ? m1 + (m22 - m1) * h3 / 60 : h3 < 180 ? m22 : h3 < 240 ? m1 + (m22 - m1) * (240 - h3) / 60 : m1) * 255; -} - -// node_modules/d3-interpolate/src/basis.js -function basis(t1, v0, v1, v22, v3) { - var t22 = t1 * t1, t32 = t22 * t1; - return ((1 - 3 * t1 + 3 * t22 - t32) * v0 + (4 - 6 * t22 + 3 * t32) * v1 + (1 + 3 * t1 + 3 * t22 - 3 * t32) * v22 + t32 * v3) / 6; -} -function basis_default(values4) { - var n3 = values4.length - 1; - return function(t4) { - var i4 = t4 <= 0 ? t4 = 0 : t4 >= 1 ? (t4 = 1, n3 - 1) : Math.floor(t4 * n3), v1 = values4[i4], v22 = values4[i4 + 1], v0 = i4 > 0 ? values4[i4 - 1] : 2 * v1 - v22, v3 = i4 < n3 - 1 ? values4[i4 + 2] : 2 * v22 - v1; - return basis((t4 - i4 / n3) * n3, v0, v1, v22, v3); - }; -} - -// node_modules/d3-interpolate/src/basisClosed.js -function basisClosed_default(values4) { - var n3 = values4.length; - return function(t4) { - var i4 = Math.floor(((t4 %= 1) < 0 ? ++t4 : t4) * n3), v0 = values4[(i4 + n3 - 1) % n3], v1 = values4[i4 % n3], v22 = values4[(i4 + 1) % n3], v3 = values4[(i4 + 2) % n3]; - return basis((t4 - i4 / n3) * n3, v0, v1, v22, v3); - }; -} - -// node_modules/d3-interpolate/src/constant.js -function constant_default(x6) { - return function() { - return x6; - }; -} - -// node_modules/d3-interpolate/src/color.js -function linear2(a4, d3) { - return function(t4) { - return a4 + t4 * d3; - }; -} -function exponential(a4, b10, y5) { - return a4 = Math.pow(a4, y5), b10 = Math.pow(b10, y5) - a4, y5 = 1 / y5, function(t4) { - return Math.pow(a4 + t4 * b10, y5); - }; -} -function gamma(y5) { - return (y5 = +y5) === 1 ? nogamma : function(a4, b10) { - return b10 - a4 ? exponential(a4, b10, y5) : constant_default(isNaN(a4) ? b10 : a4); - }; -} -function nogamma(a4, b10) { - var d3 = b10 - a4; - return d3 ? linear2(a4, d3) : constant_default(isNaN(a4) ? b10 : a4); -} - -// node_modules/d3-interpolate/src/rgb.js -var rgb_default = function rgbGamma(y5) { - var color4 = gamma(y5); - function rgb2(start, end2) { - var r4 = color4((start = rgb(start)).r, (end2 = rgb(end2)).r), g4 = color4(start.g, end2.g), b10 = color4(start.b, end2.b), opacity = nogamma(start.opacity, end2.opacity); - return function(t4) { - start.r = r4(t4); - start.g = g4(t4); - start.b = b10(t4); - start.opacity = opacity(t4); - return start + ""; - }; - } - rgb2.gamma = rgbGamma; - return rgb2; -}(1); -function rgbSpline(spline) { - return function(colors) { - var n3 = colors.length, r4 = new Array(n3), g4 = new Array(n3), b10 = new Array(n3), i4, color4; - for (i4 = 0; i4 < n3; ++i4) { - color4 = rgb(colors[i4]); - r4[i4] = color4.r || 0; - g4[i4] = color4.g || 0; - b10[i4] = color4.b || 0; - } - r4 = spline(r4); - g4 = spline(g4); - b10 = spline(b10); - color4.opacity = 1; - return function(t4) { - color4.r = r4(t4); - color4.g = g4(t4); - color4.b = b10(t4); - return color4 + ""; - }; - }; -} -var rgbBasis = rgbSpline(basis_default); -var rgbBasisClosed = rgbSpline(basisClosed_default); - -// node_modules/d3-interpolate/src/numberArray.js -function numberArray_default(a4, b10) { - if (!b10) - b10 = []; - var n3 = a4 ? Math.min(b10.length, a4.length) : 0, c5 = b10.slice(), i4; - return function(t4) { - for (i4 = 0; i4 < n3; ++i4) - c5[i4] = a4[i4] * (1 - t4) + b10[i4] * t4; - return c5; - }; -} -function isNumberArray(x6) { - return ArrayBuffer.isView(x6) && !(x6 instanceof DataView); -} - -// node_modules/d3-interpolate/src/array.js -function array_default(a4, b10) { - return (isNumberArray(b10) ? numberArray_default : genericArray)(a4, b10); -} -function genericArray(a4, b10) { - var nb = b10 ? b10.length : 0, na = a4 ? Math.min(nb, a4.length) : 0, x6 = new Array(na), c5 = new Array(nb), i4; - for (i4 = 0; i4 < na; ++i4) - x6[i4] = value_default(a4[i4], b10[i4]); - for (; i4 < nb; ++i4) - c5[i4] = b10[i4]; - return function(t4) { - for (i4 = 0; i4 < na; ++i4) - c5[i4] = x6[i4](t4); - return c5; - }; -} - -// node_modules/d3-interpolate/src/date.js -function date_default(a4, b10) { - var d3 = new Date(); - return a4 = +a4, b10 = +b10, function(t4) { - return d3.setTime(a4 * (1 - t4) + b10 * t4), d3; - }; -} - -// node_modules/d3-interpolate/src/number.js -function number_default(a4, b10) { - return a4 = +a4, b10 = +b10, function(t4) { - return a4 * (1 - t4) + b10 * t4; - }; -} - -// node_modules/d3-interpolate/src/object.js -function object_default(a4, b10) { - var i4 = {}, c5 = {}, k4; - if (a4 === null || typeof a4 !== "object") - a4 = {}; - if (b10 === null || typeof b10 !== "object") - b10 = {}; - for (k4 in b10) { - if (k4 in a4) { - i4[k4] = value_default(a4[k4], b10[k4]); - } else { - c5[k4] = b10[k4]; - } - } - return function(t4) { - for (k4 in i4) - c5[k4] = i4[k4](t4); - return c5; - }; -} - -// node_modules/d3-interpolate/src/string.js -var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g; -var reB = new RegExp(reA.source, "g"); -function zero4(b10) { - return function() { - return b10; - }; -} -function one(b10) { - return function(t4) { - return b10(t4) + ""; - }; -} -function string_default(a4, b10) { - var bi = reA.lastIndex = reB.lastIndex = 0, am, bm, bs, i4 = -1, s4 = [], q3 = []; - a4 = a4 + "", b10 = b10 + ""; - while ((am = reA.exec(a4)) && (bm = reB.exec(b10))) { - if ((bs = bm.index) > bi) { - bs = b10.slice(bi, bs); - if (s4[i4]) - s4[i4] += bs; - else - s4[++i4] = bs; - } - if ((am = am[0]) === (bm = bm[0])) { - if (s4[i4]) - s4[i4] += bm; - else - s4[++i4] = bm; - } else { - s4[++i4] = null; - q3.push({ i: i4, x: number_default(am, bm) }); - } - bi = reB.lastIndex; - } - if (bi < b10.length) { - bs = b10.slice(bi); - if (s4[i4]) - s4[i4] += bs; - else - s4[++i4] = bs; - } - return s4.length < 2 ? q3[0] ? one(q3[0].x) : zero4(b10) : (b10 = q3.length, function(t4) { - for (var i5 = 0, o3; i5 < b10; ++i5) - s4[(o3 = q3[i5]).i] = o3.x(t4); - return s4.join(""); - }); -} - -// node_modules/d3-interpolate/src/value.js -function value_default(a4, b10) { - var t4 = typeof b10, c5; - return b10 == null || t4 === "boolean" ? constant_default(b10) : (t4 === "number" ? number_default : t4 === "string" ? (c5 = color(b10)) ? (b10 = c5, rgb_default) : string_default : b10 instanceof color ? rgb_default : b10 instanceof Date ? date_default : isNumberArray(b10) ? numberArray_default : Array.isArray(b10) ? genericArray : typeof b10.valueOf !== "function" && typeof b10.toString !== "function" || isNaN(b10) ? object_default : number_default)(a4, b10); -} - -// node_modules/@antv/g-base/esm/util/color.js -var isColorProp = function(prop) { - return ["fill", "stroke", "fillStyle", "strokeStyle"].includes(prop); -}; -var isGradientColor = function(val) { - return /^[r,R,L,l]{1}[\s]*\(/.test(val); -}; - -// node_modules/@antv/g-base/esm/animate/timeline.js -var IDENTITY_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1]; -function _update(shape, animation7, ratio) { - var cProps = {}; - var fromAttrs = animation7.fromAttrs, toAttrs = animation7.toAttrs; - if (shape.destroyed) { - return; - } - var interf; - for (var k4 in toAttrs) { - if (!(0, import_util8.isEqual)(fromAttrs[k4], toAttrs[k4])) { - if (k4 === "path") { - var toPath = toAttrs[k4]; - var fromPath = fromAttrs[k4]; - if (toPath.length > fromPath.length) { - toPath = parsePathString(toAttrs[k4]); - fromPath = parsePathString(fromAttrs[k4]); - fromPath = fillPathByDiff(fromPath, toPath); - fromPath = formatPath(fromPath, toPath); - animation7.fromAttrs.path = fromPath; - animation7.toAttrs.path = toPath; - } else if (!animation7.pathFormatted) { - toPath = parsePathString(toAttrs[k4]); - fromPath = parsePathString(fromAttrs[k4]); - fromPath = formatPath(fromPath, toPath); - animation7.fromAttrs.path = fromPath; - animation7.toAttrs.path = toPath; - animation7.pathFormatted = true; - } - cProps[k4] = []; - for (var i4 = 0; i4 < toPath.length; i4++) { - var toPathPoint = toPath[i4]; - var fromPathPoint = fromPath[i4]; - var cPathPoint = []; - for (var j4 = 0; j4 < toPathPoint.length; j4++) { - if ((0, import_util8.isNumber)(toPathPoint[j4]) && fromPathPoint && (0, import_util8.isNumber)(fromPathPoint[j4])) { - interf = value_default(fromPathPoint[j4], toPathPoint[j4]); - cPathPoint.push(interf(ratio)); - } else { - cPathPoint.push(toPathPoint[j4]); - } - } - cProps[k4].push(cPathPoint); - } - } else if (k4 === "matrix") { - var matrixFn = array_default(fromAttrs[k4] || IDENTITY_MATRIX, toAttrs[k4] || IDENTITY_MATRIX); - var currentMatrix = matrixFn(ratio); - cProps[k4] = currentMatrix; - } else if (isColorProp(k4) && isGradientColor(toAttrs[k4])) { - cProps[k4] = toAttrs[k4]; - } else if (!(0, import_util8.isFunction)(toAttrs[k4])) { - interf = value_default(fromAttrs[k4], toAttrs[k4]); - cProps[k4] = interf(ratio); - } - } - } - shape.attr(cProps); -} -function update(shape, animation7, elapsed) { - var startTime = animation7.startTime, delay = animation7.delay; - if (elapsed < startTime + delay || animation7._paused) { - return false; - } - var ratio; - var duration = animation7.duration; - var easing = animation7.easing; - elapsed = elapsed - startTime - animation7.delay; - if (animation7.repeat) { - ratio = elapsed % duration / duration; - ratio = src_exports[easing](ratio); - } else { - ratio = elapsed / duration; - if (ratio < 1) { - ratio = src_exports[easing](ratio); - } else { - if (animation7.onFrame) { - shape.attr(animation7.onFrame(1)); - } else { - shape.attr(animation7.toAttrs); - } - return true; - } - } - if (animation7.onFrame) { - var attrs = animation7.onFrame(ratio); - shape.attr(attrs); - } else { - _update(shape, animation7, ratio); - } - return false; -} -var Timeline = function() { - function Timeline2(canvas) { - this.animators = []; - this.current = 0; - this.timer = null; - this.canvas = canvas; - } - Timeline2.prototype.initTimer = function() { - var _this = this; - var isFinished = false; - var shape; - var animations; - var animation7; - this.timer = timer(function(elapsed) { - _this.current = elapsed; - if (_this.animators.length > 0) { - for (var i4 = _this.animators.length - 1; i4 >= 0; i4--) { - shape = _this.animators[i4]; - if (shape.destroyed) { - _this.removeAnimator(i4); - continue; - } - if (!shape.isAnimatePaused()) { - animations = shape.get("animations"); - for (var j4 = animations.length - 1; j4 >= 0; j4--) { - animation7 = animations[j4]; - isFinished = update(shape, animation7, elapsed); - if (isFinished) { - animations.splice(j4, 1); - isFinished = false; - if (animation7.callback) { - animation7.callback(); - } - } - } - } - if (animations.length === 0) { - _this.removeAnimator(i4); - } - } - var autoDraw = _this.canvas.get("autoDraw"); - if (!autoDraw) { - _this.canvas.draw(); - } - } - }); - }; - Timeline2.prototype.addAnimator = function(shape) { - this.animators.push(shape); - }; - Timeline2.prototype.removeAnimator = function(index2) { - this.animators.splice(index2, 1); - }; - Timeline2.prototype.isAnimating = function() { - return !!this.animators.length; - }; - Timeline2.prototype.stop = function() { - if (this.timer) { - this.timer.stop(); - } - }; - Timeline2.prototype.stopAllAnimations = function(toEnd) { - if (toEnd === void 0) { - toEnd = true; - } - this.animators.forEach(function(animator) { - animator.stopAnimate(toEnd); - }); - this.animators = []; - this.canvas.draw(); - }; - Timeline2.prototype.getTime = function() { - return this.current; - }; - return Timeline2; -}(); -var timeline_default = Timeline; - -// node_modules/@antv/g-base/esm/event/event-contoller.js -var CLICK_OFFSET = 40; -var LEFT_BTN_CODE = 0; -var EVENTS = [ - "mousedown", - "mouseup", - "dblclick", - "mouseout", - "mouseover", - "mousemove", - "mouseleave", - "mouseenter", - "touchstart", - "touchmove", - "touchend", - "dragenter", - "dragover", - "dragleave", - "drop", - "contextmenu", - "mousewheel" -]; -function emitTargetEvent(target, type2, eventObj) { - eventObj.name = type2; - eventObj.target = target; - eventObj.currentTarget = target; - eventObj.delegateTarget = target; - target.emit(type2, eventObj); -} -function bubbleEvent(container2, type2, eventObj) { - if (eventObj.bubbles) { - var relativeShape = void 0; - var isOverEvent = false; - if (type2 === "mouseenter") { - relativeShape = eventObj.fromShape; - isOverEvent = true; - } else if (type2 === "mouseleave") { - isOverEvent = true; - relativeShape = eventObj.toShape; - } - if (container2.isCanvas() && isOverEvent) { - return; - } - if (relativeShape && isParent(container2, relativeShape)) { - eventObj.bubbles = false; - return; - } - eventObj.name = type2; - eventObj.currentTarget = container2; - eventObj.delegateTarget = container2; - container2.emit(type2, eventObj); - } -} -var EventController = function() { - function EventController4(cfg) { - var _this = this; - this.draggingShape = null; - this.dragging = false; - this.currentShape = null; - this.mousedownShape = null; - this.mousedownPoint = null; - this._eventCallback = function(ev) { - var type2 = ev.type; - _this._triggerEvent(type2, ev); - }; - this._onDocumentMove = function(ev) { - var canvas = _this.canvas; - var el = canvas.get("el"); - if (el !== ev.target) { - if (_this.dragging || _this.currentShape) { - var pointInfo = _this._getPointInfo(ev); - if (_this.dragging) { - _this._emitEvent("drag", ev, pointInfo, _this.draggingShape); - } - } - } - }; - this._onDocumentMouseUp = function(ev) { - var canvas = _this.canvas; - var el = canvas.get("el"); - if (el !== ev.target) { - if (_this.dragging) { - var pointInfo = _this._getPointInfo(ev); - if (_this.draggingShape) { - _this._emitEvent("drop", ev, pointInfo, null); - } - _this._emitEvent("dragend", ev, pointInfo, _this.draggingShape); - _this._afterDrag(_this.draggingShape, pointInfo, ev); - } - } - }; - this.canvas = cfg.canvas; - } - EventController4.prototype.init = function() { - this._bindEvents(); - }; - EventController4.prototype._bindEvents = function() { - var _this = this; - var el = this.canvas.get("el"); - (0, import_util2.each)(EVENTS, function(eventName) { - el.addEventListener(eventName, _this._eventCallback); - }); - if (document) { - document.addEventListener("mousemove", this._onDocumentMove); - document.addEventListener("mouseup", this._onDocumentMouseUp); - } - }; - EventController4.prototype._clearEvents = function() { - var _this = this; - var el = this.canvas.get("el"); - (0, import_util2.each)(EVENTS, function(eventName) { - el.removeEventListener(eventName, _this._eventCallback); - }); - if (document) { - document.removeEventListener("mousemove", this._onDocumentMove); - document.removeEventListener("mouseup", this._onDocumentMouseUp); - } - }; - EventController4.prototype._getEventObj = function(type2, event, point2, target, fromShape, toShape) { - var eventObj = new graph_event_default(type2, event); - eventObj.fromShape = fromShape; - eventObj.toShape = toShape; - eventObj.x = point2.x; - eventObj.y = point2.y; - eventObj.clientX = point2.clientX; - eventObj.clientY = point2.clientY; - eventObj.propagationPath.push(target); - return eventObj; - }; - EventController4.prototype._getShape = function(point2, ev) { - return this.canvas.getShape(point2.x, point2.y, ev); - }; - EventController4.prototype._getPointInfo = function(ev) { - var canvas = this.canvas; - var clientPoint = canvas.getClientByEvent(ev); - var point2 = canvas.getPointByEvent(ev); - return { - x: point2.x, - y: point2.y, - clientX: clientPoint.x, - clientY: clientPoint.y - }; - }; - EventController4.prototype._triggerEvent = function(type2, ev) { - var pointInfo = this._getPointInfo(ev); - var shape = this._getShape(pointInfo, ev); - var method = this["_on" + type2]; - var leaveCanvas = false; - if (method) { - method.call(this, pointInfo, shape, ev); - } else { - var preShape = this.currentShape; - if (type2 === "mouseenter" || type2 === "dragenter" || type2 === "mouseover") { - this._emitEvent(type2, ev, pointInfo, null, null, shape); - if (shape) { - this._emitEvent(type2, ev, pointInfo, shape, null, shape); - } - if (type2 === "mouseenter" && this.draggingShape) { - this._emitEvent("dragenter", ev, pointInfo, null); - } - } else if (type2 === "mouseleave" || type2 === "dragleave" || type2 === "mouseout") { - leaveCanvas = true; - if (preShape) { - this._emitEvent(type2, ev, pointInfo, preShape, preShape, null); - } - this._emitEvent(type2, ev, pointInfo, null, preShape, null); - if (type2 === "mouseleave" && this.draggingShape) { - this._emitEvent("dragleave", ev, pointInfo, null); - } - } else { - this._emitEvent(type2, ev, pointInfo, shape, null, null); - } - } - if (!leaveCanvas) { - this.currentShape = shape; - } - if (shape && !shape.get("destroyed")) { - var canvas = this.canvas; - var el = canvas.get("el"); - el.style.cursor = shape.attr("cursor") || canvas.get("cursor"); - } - }; - EventController4.prototype._onmousedown = function(pointInfo, shape, event) { - if (event.button === LEFT_BTN_CODE) { - this.mousedownShape = shape; - this.mousedownPoint = pointInfo; - this.mousedownTimeStamp = event.timeStamp; - } - this._emitEvent("mousedown", event, pointInfo, shape, null, null); - }; - EventController4.prototype._emitMouseoverEvents = function(event, pointInfo, fromShape, toShape) { - var el = this.canvas.get("el"); - if (fromShape !== toShape) { - if (fromShape) { - this._emitEvent("mouseout", event, pointInfo, fromShape, fromShape, toShape); - this._emitEvent("mouseleave", event, pointInfo, fromShape, fromShape, toShape); - if (!toShape || toShape.get("destroyed")) { - el.style.cursor = this.canvas.get("cursor"); - } - } - if (toShape) { - this._emitEvent("mouseover", event, pointInfo, toShape, fromShape, toShape); - this._emitEvent("mouseenter", event, pointInfo, toShape, fromShape, toShape); - } - } - }; - EventController4.prototype._emitDragoverEvents = function(event, pointInfo, fromShape, toShape, isCanvasEmit) { - if (toShape) { - if (toShape !== fromShape) { - if (fromShape) { - this._emitEvent("dragleave", event, pointInfo, fromShape, fromShape, toShape); - } - this._emitEvent("dragenter", event, pointInfo, toShape, fromShape, toShape); - } - if (!isCanvasEmit) { - this._emitEvent("dragover", event, pointInfo, toShape); - } - } else if (fromShape) { - this._emitEvent("dragleave", event, pointInfo, fromShape, fromShape, toShape); - } - if (isCanvasEmit) { - this._emitEvent("dragover", event, pointInfo, toShape); - } - }; - EventController4.prototype._afterDrag = function(draggingShape, pointInfo, event) { - if (draggingShape) { - draggingShape.set("capture", true); - this.draggingShape = null; - } - this.dragging = false; - var shape = this._getShape(pointInfo, event); - if (shape !== draggingShape) { - this._emitMouseoverEvents(event, pointInfo, draggingShape, shape); - } - this.currentShape = shape; - }; - EventController4.prototype._onmouseup = function(pointInfo, shape, event) { - if (event.button === LEFT_BTN_CODE) { - var draggingShape = this.draggingShape; - if (this.dragging) { - if (draggingShape) { - this._emitEvent("drop", event, pointInfo, shape); - } - this._emitEvent("dragend", event, pointInfo, draggingShape); - this._afterDrag(draggingShape, pointInfo, event); - } else { - this._emitEvent("mouseup", event, pointInfo, shape); - if (shape === this.mousedownShape) { - this._emitEvent("click", event, pointInfo, shape); - } - this.mousedownShape = null; - this.mousedownPoint = null; - } - } - }; - EventController4.prototype._ondragover = function(pointInfo, shape, event) { - event.preventDefault(); - var preShape = this.currentShape; - this._emitDragoverEvents(event, pointInfo, preShape, shape, true); - }; - EventController4.prototype._onmousemove = function(pointInfo, shape, event) { - var canvas = this.canvas; - var preShape = this.currentShape; - var draggingShape = this.draggingShape; - if (this.dragging) { - if (draggingShape) { - this._emitDragoverEvents(event, pointInfo, preShape, shape, false); - } - this._emitEvent("drag", event, pointInfo, draggingShape); - } else { - var mousedownPoint = this.mousedownPoint; - if (mousedownPoint) { - var mousedownShape = this.mousedownShape; - var now2 = event.timeStamp; - var timeWindow = now2 - this.mousedownTimeStamp; - var dx = mousedownPoint.clientX - pointInfo.clientX; - var dy = mousedownPoint.clientY - pointInfo.clientY; - var dist4 = dx * dx + dy * dy; - if (timeWindow > 120 || dist4 > CLICK_OFFSET) { - if (mousedownShape && mousedownShape.get("draggable")) { - draggingShape = this.mousedownShape; - draggingShape.set("capture", false); - this.draggingShape = draggingShape; - this.dragging = true; - this._emitEvent("dragstart", event, pointInfo, draggingShape); - this.mousedownShape = null; - this.mousedownPoint = null; - } else if (!mousedownShape && canvas.get("draggable")) { - this.dragging = true; - this._emitEvent("dragstart", event, pointInfo, null); - this.mousedownShape = null; - this.mousedownPoint = null; - } else { - this._emitMouseoverEvents(event, pointInfo, preShape, shape); - this._emitEvent("mousemove", event, pointInfo, shape); - } - } else { - this._emitMouseoverEvents(event, pointInfo, preShape, shape); - this._emitEvent("mousemove", event, pointInfo, shape); - } - } else { - this._emitMouseoverEvents(event, pointInfo, preShape, shape); - this._emitEvent("mousemove", event, pointInfo, shape); - } - } - }; - EventController4.prototype._emitEvent = function(type2, event, pointInfo, shape, fromShape, toShape) { - var eventObj = this._getEventObj(type2, event, pointInfo, shape, fromShape, toShape); - if (shape) { - eventObj.shape = shape; - emitTargetEvent(shape, type2, eventObj); - var parent_1 = shape.getParent(); - while (parent_1) { - parent_1.emitDelegation(type2, eventObj); - if (!eventObj.propagationStopped) { - bubbleEvent(parent_1, type2, eventObj); - } - eventObj.propagationPath.push(parent_1); - parent_1 = parent_1.getParent(); - } - } else { - var canvas = this.canvas; - emitTargetEvent(canvas, type2, eventObj); - } - }; - EventController4.prototype.destroy = function() { - this._clearEvents(); - this.canvas = null; - this.currentShape = null; - this.draggingShape = null; - this.mousedownPoint = null; - this.mousedownShape = null; - this.mousedownTimeStamp = null; - }; - return EventController4; -}(); -var event_contoller_default = EventController; - -// node_modules/@antv/g-base/esm/abstract/canvas.js -var PX_SUFFIX = "px"; -var browser = detect(); -var isFirefox = browser && browser.name === "firefox"; -var Canvas = function(_super) { - __extends(Canvas4, _super); - function Canvas4(cfg) { - var _this = _super.call(this, cfg) || this; - _this.initContainer(); - _this.initDom(); - _this.initEvents(); - _this.initTimeline(); - return _this; - } - Canvas4.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - cfg["cursor"] = "default"; - cfg["supportCSSTransform"] = false; - return cfg; - }; - Canvas4.prototype.initContainer = function() { - var container2 = this.get("container"); - if ((0, import_util2.isString)(container2)) { - container2 = document.getElementById(container2); - this.set("container", container2); - } - }; - Canvas4.prototype.initDom = function() { - var el = this.createDom(); - this.set("el", el); - var container2 = this.get("container"); - container2.appendChild(el); - this.setDOMSize(this.get("width"), this.get("height")); - }; - Canvas4.prototype.initEvents = function() { - var eventController = new event_contoller_default({ - canvas: this - }); - eventController.init(); - this.set("eventController", eventController); - }; - Canvas4.prototype.initTimeline = function() { - var timeline = new timeline_default(this); - this.set("timeline", timeline); - }; - Canvas4.prototype.setDOMSize = function(width2, height) { - var el = this.get("el"); - if (isBrowser) { - el.style.width = width2 + PX_SUFFIX; - el.style.height = height + PX_SUFFIX; - } - }; - Canvas4.prototype.changeSize = function(width2, height) { - this.setDOMSize(width2, height); - this.set("width", width2); - this.set("height", height); - this.onCanvasChange("changeSize"); - }; - Canvas4.prototype.getRenderer = function() { - return this.get("renderer"); - }; - Canvas4.prototype.getCursor = function() { - return this.get("cursor"); - }; - Canvas4.prototype.setCursor = function(cursor) { - this.set("cursor", cursor); - var el = this.get("el"); - if (isBrowser && el) { - el.style.cursor = cursor; - } - }; - Canvas4.prototype.getPointByEvent = function(ev) { - var supportCSSTransform = this.get("supportCSSTransform"); - if (supportCSSTransform) { - if (isFirefox && !(0, import_util2.isNil)(ev.layerX) && ev.layerX !== ev.offsetX) { - return { - x: ev.layerX, - y: ev.layerY - }; - } - if (!(0, import_util2.isNil)(ev.offsetX)) { - return { - x: ev.offsetX, - y: ev.offsetY - }; - } - } - var _a6 = this.getClientByEvent(ev), clientX = _a6.x, clientY = _a6.y; - return this.getPointByClient(clientX, clientY); - }; - Canvas4.prototype.getClientByEvent = function(ev) { - var clientInfo = ev; - if (ev.touches) { - if (ev.type === "touchend") { - clientInfo = ev.changedTouches[0]; - } else { - clientInfo = ev.touches[0]; - } - } - return { - x: clientInfo.clientX, - y: clientInfo.clientY - }; - }; - Canvas4.prototype.getPointByClient = function(clientX, clientY) { - var el = this.get("el"); - var bbox = el.getBoundingClientRect(); - return { - x: clientX - bbox.left, - y: clientY - bbox.top - }; - }; - Canvas4.prototype.getClientByPoint = function(x6, y5) { - var el = this.get("el"); - var bbox = el.getBoundingClientRect(); - return { - x: x6 + bbox.left, - y: y5 + bbox.top - }; - }; - Canvas4.prototype.draw = function() { - }; - Canvas4.prototype.removeDom = function() { - var el = this.get("el"); - el.parentNode.removeChild(el); - }; - Canvas4.prototype.clearEvents = function() { - var eventController = this.get("eventController"); - eventController.destroy(); - }; - Canvas4.prototype.isCanvas = function() { - return true; - }; - Canvas4.prototype.getParent = function() { - return null; - }; - Canvas4.prototype.destroy = function() { - var timeline = this.get("timeline"); - if (this.get("destroyed")) { - return; - } - this.clear(); - if (timeline) { - timeline.stop(); - } - this.clearEvents(); - this.removeDom(); - _super.prototype.destroy.call(this); - }; - return Canvas4; -}(container_default); -var canvas_default = Canvas; - -// node_modules/@antv/g-base/esm/abstract/group.js -var AbstractGroup = function(_super) { - __extends(AbstractGroup2, _super); - function AbstractGroup2() { - return _super !== null && _super.apply(this, arguments) || this; - } - AbstractGroup2.prototype.isGroup = function() { - return true; - }; - AbstractGroup2.prototype.isEntityGroup = function() { - return false; - }; - AbstractGroup2.prototype.clone = function() { - var clone41 = _super.prototype.clone.call(this); - var children = this.getChildren(); - for (var i4 = 0; i4 < children.length; i4++) { - var child = children[i4]; - clone41.add(child.clone()); - } - return clone41; - }; - return AbstractGroup2; -}(container_default); -var group_default = AbstractGroup; - -// node_modules/@antv/g-base/esm/abstract/shape.js -var AbstractShape = function(_super) { - __extends(AbstractShape2, _super); - function AbstractShape2(cfg) { - return _super.call(this, cfg) || this; - } - AbstractShape2.prototype._isInBBox = function(refX, refY) { - var bbox = this.getBBox(); - return bbox.minX <= refX && bbox.maxX >= refX && bbox.minY <= refY && bbox.maxY >= refY; - }; - AbstractShape2.prototype.afterAttrsChange = function(targetAttrs) { - _super.prototype.afterAttrsChange.call(this, targetAttrs); - this.clearCacheBBox(); - }; - AbstractShape2.prototype.getBBox = function() { - var bbox = this.cfg.bbox; - if (!bbox) { - bbox = this.calculateBBox(); - this.set("bbox", bbox); - } - return bbox; - }; - AbstractShape2.prototype.getCanvasBBox = function() { - var canvasBBox = this.cfg.canvasBBox; - if (!canvasBBox) { - canvasBBox = this.calculateCanvasBBox(); - this.set("canvasBBox", canvasBBox); - } - return canvasBBox; - }; - AbstractShape2.prototype.applyMatrix = function(matrix) { - _super.prototype.applyMatrix.call(this, matrix); - this.set("canvasBBox", null); - }; - AbstractShape2.prototype.calculateCanvasBBox = function() { - var bbox = this.getBBox(); - var totalMatrix = this.getTotalMatrix(); - var minX = bbox.minX, minY = bbox.minY, maxX = bbox.maxX, maxY2 = bbox.maxY; - if (totalMatrix) { - var topLeft = multiplyVec2(totalMatrix, [bbox.minX, bbox.minY]); - var topRight = multiplyVec2(totalMatrix, [bbox.maxX, bbox.minY]); - var bottomLeft = multiplyVec2(totalMatrix, [bbox.minX, bbox.maxY]); - var bottomRight = multiplyVec2(totalMatrix, [bbox.maxX, bbox.maxY]); - minX = Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]); - maxX = Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]); - minY = Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]); - maxY2 = Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]); - } - var attrs = this.attrs; - if (attrs.shadowColor) { - var _a6 = attrs.shadowBlur, shadowBlur = _a6 === void 0 ? 0 : _a6, _b = attrs.shadowOffsetX, shadowOffsetX = _b === void 0 ? 0 : _b, _c = attrs.shadowOffsetY, shadowOffsetY = _c === void 0 ? 0 : _c; - var shadowLeft = minX - shadowBlur + shadowOffsetX; - var shadowRight = maxX + shadowBlur + shadowOffsetX; - var shadowTop = minY - shadowBlur + shadowOffsetY; - var shadowBottom = maxY2 + shadowBlur + shadowOffsetY; - minX = Math.min(minX, shadowLeft); - maxX = Math.max(maxX, shadowRight); - minY = Math.min(minY, shadowTop); - maxY2 = Math.max(maxY2, shadowBottom); - } - return { - x: minX, - y: minY, - minX, - minY, - maxX, - maxY: maxY2, - width: maxX - minX, - height: maxY2 - minY - }; - }; - AbstractShape2.prototype.clearCacheBBox = function() { - this.set("bbox", null); - this.set("canvasBBox", null); - }; - AbstractShape2.prototype.isClipShape = function() { - return this.get("isClipShape"); - }; - AbstractShape2.prototype.isInShape = function(refX, refY) { - return false; - }; - AbstractShape2.prototype.isOnlyHitBox = function() { - return false; - }; - AbstractShape2.prototype.isHit = function(x6, y5) { - var startArrowShape = this.get("startArrowShape"); - var endArrowShape = this.get("endArrowShape"); - var vec = [x6, y5, 1]; - vec = this.invertFromMatrix(vec); - var refX = vec[0], refY = vec[1]; - var inBBox = this._isInBBox(refX, refY); - if (this.isOnlyHitBox()) { - return inBBox; - } - if (inBBox && !this.isClipped(refX, refY)) { - if (this.isInShape(refX, refY)) { - return true; - } - if (startArrowShape && startArrowShape.isHit(refX, refY)) { - return true; - } - if (endArrowShape && endArrowShape.isHit(refX, refY)) { - return true; - } - } - return false; - }; - return AbstractShape2; -}(element_default); -var shape_default = AbstractShape; - -// node_modules/@antv/g-base/esm/bbox/register.js -var cache = new Map(); -function register(type2, method) { - cache.set(type2, method); -} -function getMethod(type2) { - return cache.get(type2); -} - -// node_modules/@antv/g-base/esm/bbox/rect.js -function rect_default(shape) { - var attrs = shape.attr(); - var x6 = attrs.x, y5 = attrs.y, width2 = attrs.width, height = attrs.height; - return { - x: x6, - y: y5, - width: width2, - height - }; -} - -// node_modules/@antv/g-base/esm/bbox/circle.js -function circle_default(shape) { - var _a6 = shape.attr(), x6 = _a6.x, y5 = _a6.y, r4 = _a6.r; - return { - x: x6 - r4, - y: y5 - r4, - width: r4 * 2, - height: r4 * 2 - }; -} - -// node_modules/@antv/g-math/esm/util.js -var util_exports = {}; -__export(util_exports, { - distance: () => distance4, - getBBoxByArray: () => getBBoxByArray, - getBBoxRange: () => getBBoxRange, - isNumberEqual: () => isNumberEqual, - piMod: () => piMod -}); -function minNum(array) { - return Math.min.apply(null, array); -} -function maxNum(array) { - return Math.max.apply(null, array); -} -function distance4(x1, y1, x22, y22) { - var dx = x1 - x22; - var dy = y1 - y22; - return Math.sqrt(dx * dx + dy * dy); -} -function isNumberEqual(v1, v22) { - return Math.abs(v1 - v22) < 1e-3; -} -function getBBoxByArray(xArr, yArr) { - var minX = minNum(xArr); - var minY = minNum(yArr); - var maxX = maxNum(xArr); - var maxY2 = maxNum(yArr); - return { - x: minX, - y: minY, - width: maxX - minX, - height: maxY2 - minY - }; -} -function getBBoxRange(x1, y1, x22, y22) { - return { - minX: minNum([x1, x22]), - maxX: maxNum([x1, x22]), - minY: minNum([y1, y22]), - maxY: maxNum([y1, y22]) - }; -} -function piMod(angle3) { - return (angle3 + Math.PI * 2) % (Math.PI * 2); -} - -// node_modules/@antv/g-math/esm/line.js -var line_default = { - box: function(x1, y1, x22, y22) { - return getBBoxByArray([x1, x22], [y1, y22]); - }, - length: function(x1, y1, x22, y22) { - return distance4(x1, y1, x22, y22); - }, - pointAt: function(x1, y1, x22, y22, t4) { - return { - x: (1 - t4) * x1 + t4 * x22, - y: (1 - t4) * y1 + t4 * y22 - }; - }, - pointDistance: function(x1, y1, x22, y22, x6, y5) { - var cross6 = (x22 - x1) * (x6 - x1) + (y22 - y1) * (y5 - y1); - if (cross6 < 0) { - return distance4(x1, y1, x6, y5); - } - var lengthSquare = (x22 - x1) * (x22 - x1) + (y22 - y1) * (y22 - y1); - if (cross6 > lengthSquare) { - return distance4(x22, y22, x6, y5); - } - return this.pointToLine(x1, y1, x22, y22, x6, y5); - }, - pointToLine: function(x1, y1, x22, y22, x6, y5) { - var d3 = [x22 - x1, y22 - y1]; - if (exactEquals6(d3, [0, 0])) { - return Math.sqrt((x6 - x1) * (x6 - x1) + (y5 - y1) * (y5 - y1)); - } - var u3 = [-d3[1], d3[0]]; - normalize4(u3, u3); - var a4 = [x6 - x1, y5 - y1]; - return Math.abs(dot4(a4, u3)); - }, - tangentAngle: function(x1, y1, x22, y22) { - return Math.atan2(y22 - y1, x22 - x1); - } -}; - -// node_modules/@antv/g-math/esm/bezier.js -var EPSILON2 = 1e-4; -function nearestPoint(xArr, yArr, x6, y5, tCallback, length5) { - var t4; - var d3 = Infinity; - var v0 = [x6, y5]; - var segNum = 20; - if (length5 && length5 > 200) { - segNum = length5 / 10; - } - var increaseRate = 1 / segNum; - var interval3 = increaseRate / 10; - for (var i4 = 0; i4 <= segNum; i4++) { - var _t = i4 * increaseRate; - var v1 = [tCallback.apply(null, xArr.concat([_t])), tCallback.apply(null, yArr.concat([_t]))]; - var d1 = distance4(v0[0], v0[1], v1[0], v1[1]); - if (d1 < d3) { - t4 = _t; - d3 = d1; - } - } - if (t4 === 0) { - return { - x: xArr[0], - y: yArr[0] - }; - } - if (t4 === 1) { - var count2 = xArr.length; - return { - x: xArr[count2 - 1], - y: yArr[count2 - 1] - }; - } - d3 = Infinity; - for (var i4 = 0; i4 < 32; i4++) { - if (interval3 < EPSILON2) { - break; - } - var prev = t4 - interval3; - var next = t4 + interval3; - var v1 = [tCallback.apply(null, xArr.concat([prev])), tCallback.apply(null, yArr.concat([prev]))]; - var d1 = distance4(v0[0], v0[1], v1[0], v1[1]); - if (prev >= 0 && d1 < d3) { - t4 = prev; - d3 = d1; - } else { - var v22 = [tCallback.apply(null, xArr.concat([next])), tCallback.apply(null, yArr.concat([next]))]; - var d22 = distance4(v0[0], v0[1], v22[0], v22[1]); - if (next <= 1 && d22 < d3) { - t4 = next; - d3 = d22; - } else { - interval3 *= 0.5; - } - } - } - return { - x: tCallback.apply(null, xArr.concat([t4])), - y: tCallback.apply(null, yArr.concat([t4])) - }; -} -function snapLength(xArr, yArr) { - var totalLength = 0; - var count2 = xArr.length; - for (var i4 = 0; i4 < count2; i4++) { - var x6 = xArr[i4]; - var y5 = yArr[i4]; - var nextX = xArr[(i4 + 1) % count2]; - var nextY = yArr[(i4 + 1) % count2]; - totalLength += distance4(x6, y5, nextX, nextY); - } - return totalLength / 2; -} - -// node_modules/@antv/g-math/esm/quadratic.js -function quadraticAt(p0, p1, p22, t4) { - var onet = 1 - t4; - return onet * onet * p0 + 2 * t4 * onet * p1 + t4 * t4 * p22; -} -function extrema(p0, p1, p22) { - var a4 = p0 + p22 - 2 * p1; - if (isNumberEqual(a4, 0)) { - return [0.5]; - } - var rst = (p0 - p1) / a4; - if (rst <= 1 && rst >= 0) { - return [rst]; - } - return []; -} -function derivativeAt(p0, p1, p22, t4) { - return 2 * (1 - t4) * (p1 - p0) + 2 * t4 * (p22 - p1); -} -function divideQuadratic(x1, y1, x22, y22, x32, y32, t4) { - var xt = quadraticAt(x1, x22, x32, t4); - var yt = quadraticAt(y1, y22, y32, t4); - var controlPoint1 = line_default.pointAt(x1, y1, x22, y22, t4); - var controlPoint2 = line_default.pointAt(x22, y22, x32, y32, t4); - return [ - [x1, y1, controlPoint1.x, controlPoint1.y, xt, yt], - [xt, yt, controlPoint2.x, controlPoint2.y, x32, y32] - ]; -} -function quadraticLength(x1, y1, x22, y22, x32, y32, iterationCount) { - if (iterationCount === 0) { - return (distance4(x1, y1, x22, y22) + distance4(x22, y22, x32, y32) + distance4(x1, y1, x32, y32)) / 2; - } - var quadratics = divideQuadratic(x1, y1, x22, y22, x32, y32, 0.5); - var left2 = quadratics[0]; - var right2 = quadratics[1]; - left2.push(iterationCount - 1); - right2.push(iterationCount - 1); - return quadraticLength.apply(null, left2) + quadraticLength.apply(null, right2); -} -var quadratic_default = { - box: function(x1, y1, x22, y22, x32, y32) { - var xExtrema2 = extrema(x1, x22, x32)[0]; - var yExtrema2 = extrema(y1, y22, y32)[0]; - var xArr = [x1, x32]; - var yArr = [y1, y32]; - if (xExtrema2 !== void 0) { - xArr.push(quadraticAt(x1, x22, x32, xExtrema2)); - } - if (yExtrema2 !== void 0) { - yArr.push(quadraticAt(y1, y22, y32, yExtrema2)); - } - return getBBoxByArray(xArr, yArr); - }, - length: function(x1, y1, x22, y22, x32, y32) { - return quadraticLength(x1, y1, x22, y22, x32, y32, 3); - }, - nearestPoint: function(x1, y1, x22, y22, x32, y32, x0, y0) { - return nearestPoint([x1, x22, x32], [y1, y22, y32], x0, y0, quadraticAt); - }, - pointDistance: function(x1, y1, x22, y22, x32, y32, x0, y0) { - var point2 = this.nearestPoint(x1, y1, x22, y22, x32, y32, x0, y0); - return distance4(point2.x, point2.y, x0, y0); - }, - interpolationAt: quadraticAt, - pointAt: function(x1, y1, x22, y22, x32, y32, t4) { - return { - x: quadraticAt(x1, x22, x32, t4), - y: quadraticAt(y1, y22, y32, t4) - }; - }, - divide: function(x1, y1, x22, y22, x32, y32, t4) { - return divideQuadratic(x1, y1, x22, y22, x32, y32, t4); - }, - tangentAngle: function(x1, y1, x22, y22, x32, y32, t4) { - var dx = derivativeAt(x1, x22, x32, t4); - var dy = derivativeAt(y1, y22, y32, t4); - var angle3 = Math.atan2(dy, dx); - return piMod(angle3); - } -}; - -// node_modules/@antv/g-math/esm/cubic.js -function cubicAt(p0, p1, p22, p32, t4) { - var onet = 1 - t4; - return onet * onet * onet * p0 + 3 * p1 * t4 * onet * onet + 3 * p22 * t4 * t4 * onet + p32 * t4 * t4 * t4; -} -function derivativeAt2(p0, p1, p22, p32, t4) { - var onet = 1 - t4; - return 3 * (onet * onet * (p1 - p0) + 2 * onet * t4 * (p22 - p1) + t4 * t4 * (p32 - p22)); -} -function extrema2(p0, p1, p22, p32) { - var a4 = -3 * p0 + 9 * p1 - 9 * p22 + 3 * p32; - var b10 = 6 * p0 - 12 * p1 + 6 * p22; - var c5 = 3 * p1 - 3 * p0; - var extremas = []; - var t1; - var t22; - var discSqrt; - if (isNumberEqual(a4, 0)) { - if (!isNumberEqual(b10, 0)) { - t1 = -c5 / b10; - if (t1 >= 0 && t1 <= 1) { - extremas.push(t1); - } - } - } else { - var disc = b10 * b10 - 4 * a4 * c5; - if (isNumberEqual(disc, 0)) { - extremas.push(-b10 / (2 * a4)); - } else if (disc > 0) { - discSqrt = Math.sqrt(disc); - t1 = (-b10 + discSqrt) / (2 * a4); - t22 = (-b10 - discSqrt) / (2 * a4); - if (t1 >= 0 && t1 <= 1) { - extremas.push(t1); - } - if (t22 >= 0 && t22 <= 1) { - extremas.push(t22); - } - } - } - return extremas; -} -function divideCubic(x1, y1, x22, y22, x32, y32, x42, y42, t4) { - var xt = cubicAt(x1, x22, x32, x42, t4); - var yt = cubicAt(y1, y22, y32, y42, t4); - var c1 = line_default.pointAt(x1, y1, x22, y22, t4); - var c22 = line_default.pointAt(x22, y22, x32, y32, t4); - var c32 = line_default.pointAt(x32, y32, x42, y42, t4); - var c12 = line_default.pointAt(c1.x, c1.y, c22.x, c22.y, t4); - var c23 = line_default.pointAt(c22.x, c22.y, c32.x, c32.y, t4); - return [ - [x1, y1, c1.x, c1.y, c12.x, c12.y, xt, yt], - [xt, yt, c23.x, c23.y, c32.x, c32.y, x42, y42] - ]; -} -function cubicLength(x1, y1, x22, y22, x32, y32, x42, y42, iterationCount) { - if (iterationCount === 0) { - return snapLength([x1, x22, x32, x42], [y1, y22, y32, y42]); - } - var cubics = divideCubic(x1, y1, x22, y22, x32, y32, x42, y42, 0.5); - var left2 = cubics[0]; - var right2 = cubics[1]; - left2.push(iterationCount - 1); - right2.push(iterationCount - 1); - return cubicLength.apply(null, left2) + cubicLength.apply(null, right2); -} -var cubic_default = { - extrema: extrema2, - box: function(x1, y1, x22, y22, x32, y32, x42, y42) { - var xArr = [x1, x42]; - var yArr = [y1, y42]; - var xExtrema2 = extrema2(x1, x22, x32, x42); - var yExtrema2 = extrema2(y1, y22, y32, y42); - for (var i4 = 0; i4 < xExtrema2.length; i4++) { - xArr.push(cubicAt(x1, x22, x32, x42, xExtrema2[i4])); - } - for (var i4 = 0; i4 < yExtrema2.length; i4++) { - yArr.push(cubicAt(y1, y22, y32, y42, yExtrema2[i4])); - } - return getBBoxByArray(xArr, yArr); - }, - length: function(x1, y1, x22, y22, x32, y32, x42, y42) { - return cubicLength(x1, y1, x22, y22, x32, y32, x42, y42, 3); - }, - nearestPoint: function(x1, y1, x22, y22, x32, y32, x42, y42, x0, y0, length5) { - return nearestPoint([x1, x22, x32, x42], [y1, y22, y32, y42], x0, y0, cubicAt, length5); - }, - pointDistance: function(x1, y1, x22, y22, x32, y32, x42, y42, x0, y0, length5) { - var point2 = this.nearestPoint(x1, y1, x22, y22, x32, y32, x42, y42, x0, y0, length5); - return distance4(point2.x, point2.y, x0, y0); - }, - interpolationAt: cubicAt, - pointAt: function(x1, y1, x22, y22, x32, y32, x42, y42, t4) { - return { - x: cubicAt(x1, x22, x32, x42, t4), - y: cubicAt(y1, y22, y32, y42, t4) - }; - }, - divide: function(x1, y1, x22, y22, x32, y32, x42, y42, t4) { - return divideCubic(x1, y1, x22, y22, x32, y32, x42, y42, t4); - }, - tangentAngle: function(x1, y1, x22, y22, x32, y32, x42, y42, t4) { - var dx = derivativeAt2(x1, x22, x32, x42, t4); - var dy = derivativeAt2(y1, y22, y32, y42, t4); - return piMod(Math.atan2(dy, dx)); - } -}; - -// node_modules/@antv/g-math/esm/ellipse.js -function copysign(v1, v22) { - var absv = Math.abs(v1); - return v22 > 0 ? absv : absv * -1; -} -var ellipse_default = { - box: function(x6, y5, rx, ry) { - return { - x: x6 - rx, - y: y5 - ry, - width: rx * 2, - height: ry * 2 - }; - }, - length: function(x6, y5, rx, ry) { - return Math.PI * (3 * (rx + ry) - Math.sqrt((3 * rx + ry) * (rx + 3 * ry))); - }, - nearestPoint: function(x6, y5, rx, ry, x0, y0) { - var a4 = rx; - var b10 = ry; - if (a4 === 0 || b10 === 0) { - return { - x: x6, - y: y5 - }; - } - var relativeX = x0 - x6; - var relativeY = y0 - y5; - var px = Math.abs(relativeX); - var py = Math.abs(relativeY); - var squareA = a4 * a4; - var squareB = b10 * b10; - var t4 = Math.PI / 4; - var nearestX; - var nearestY; - for (var i4 = 0; i4 < 4; i4++) { - nearestX = a4 * Math.cos(t4); - nearestY = b10 * Math.sin(t4); - var ex = (squareA - squareB) * Math.pow(Math.cos(t4), 3) / a4; - var ey = (squareB - squareA) * Math.pow(Math.sin(t4), 3) / b10; - var rx1 = nearestX - ex; - var ry1 = nearestY - ey; - var qx = px - ex; - var qy = py - ey; - var r4 = Math.hypot(ry1, rx1); - var q3 = Math.hypot(qy, qx); - var delta_c = r4 * Math.asin((rx1 * qy - ry1 * qx) / (r4 * q3)); - var delta_t = delta_c / Math.sqrt(squareA + squareB - nearestX * nearestX - nearestY * nearestY); - t4 += delta_t; - t4 = Math.min(Math.PI / 2, Math.max(0, t4)); - } - return { - x: x6 + copysign(nearestX, relativeX), - y: y5 + copysign(nearestY, relativeY) - }; - }, - pointDistance: function(x6, y5, rx, ry, x0, y0) { - var nearestPoint2 = this.nearestPoint(x6, y5, rx, ry, x0, y0); - return distance4(nearestPoint2.x, nearestPoint2.y, x0, y0); - }, - pointAt: function(x6, y5, rx, ry, t4) { - var angle3 = 2 * Math.PI * t4; - return { - x: x6 + rx * Math.cos(angle3), - y: y5 + ry * Math.sin(angle3) - }; - }, - tangentAngle: function(x6, y5, rx, ry, t4) { - var angle3 = 2 * Math.PI * t4; - var tangentAngle = Math.atan2(ry * Math.cos(angle3), -rx * Math.sin(angle3)); - return piMod(tangentAngle); - } -}; - -// node_modules/@antv/g-math/esm/arc.js -function derivativeXAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle3) { - return -1 * rx * Math.cos(xRotation) * Math.sin(angle3) - ry * Math.sin(xRotation) * Math.cos(angle3); -} -function derivativeYAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle3) { - return -1 * rx * Math.sin(xRotation) * Math.sin(angle3) + ry * Math.cos(xRotation) * Math.cos(angle3); -} -function xExtrema(rx, ry, xRotation) { - return Math.atan(-ry / rx * Math.tan(xRotation)); -} -function yExtrema(rx, ry, xRotation) { - return Math.atan(ry / (rx * Math.tan(xRotation))); -} -function xAt(cx, cy, rx, ry, xRotation, angle3) { - return rx * Math.cos(xRotation) * Math.cos(angle3) - ry * Math.sin(xRotation) * Math.sin(angle3) + cx; -} -function yAt(cx, cy, rx, ry, xRotation, angle3) { - return rx * Math.sin(xRotation) * Math.cos(angle3) + ry * Math.cos(xRotation) * Math.sin(angle3) + cy; -} -function getAngle2(rx, ry, x0, y0) { - var angle3 = Math.atan2(y0 * rx, x0 * ry); - return (angle3 + Math.PI * 2) % (Math.PI * 2); -} -function getPoint(rx, ry, angle3) { - return { - x: rx * Math.cos(angle3), - y: ry * Math.sin(angle3) - }; -} -function rotate4(x6, y5, angle3) { - var cos3 = Math.cos(angle3); - var sin3 = Math.sin(angle3); - return [x6 * cos3 - y5 * sin3, x6 * sin3 + y5 * cos3]; -} -var arc_default = { - box: function(cx, cy, rx, ry, xRotation, startAngle, endAngle) { - var xDim = xExtrema(rx, ry, xRotation); - var minX = Infinity; - var maxX = -Infinity; - var xs = [startAngle, endAngle]; - for (var i4 = -Math.PI * 2; i4 <= Math.PI * 2; i4 += Math.PI) { - var xAngle = xDim + i4; - if (startAngle < endAngle) { - if (startAngle < xAngle && xAngle < endAngle) { - xs.push(xAngle); - } - } else { - if (endAngle < xAngle && xAngle < startAngle) { - xs.push(xAngle); - } - } - } - for (var i4 = 0; i4 < xs.length; i4++) { - var x6 = xAt(cx, cy, rx, ry, xRotation, xs[i4]); - if (x6 < minX) { - minX = x6; - } - if (x6 > maxX) { - maxX = x6; - } - } - var yDim = yExtrema(rx, ry, xRotation); - var minY = Infinity; - var maxY2 = -Infinity; - var ys = [startAngle, endAngle]; - for (var i4 = -Math.PI * 2; i4 <= Math.PI * 2; i4 += Math.PI) { - var yAngle = yDim + i4; - if (startAngle < endAngle) { - if (startAngle < yAngle && yAngle < endAngle) { - ys.push(yAngle); - } - } else { - if (endAngle < yAngle && yAngle < startAngle) { - ys.push(yAngle); - } - } - } - for (var i4 = 0; i4 < ys.length; i4++) { - var y5 = yAt(cx, cy, rx, ry, xRotation, ys[i4]); - if (y5 < minY) { - minY = y5; - } - if (y5 > maxY2) { - maxY2 = y5; - } - } - return { - x: minX, - y: minY, - width: maxX - minX, - height: maxY2 - minY - }; - }, - length: function(cx, cy, rx, ry, xRotation, startAngle, endAngle) { - }, - nearestPoint: function(cx, cy, rx, ry, xRotation, startAngle, endAngle, x0, y0) { - var relativeVector = rotate4(x0 - cx, y0 - cy, -xRotation); - var x1 = relativeVector[0], y1 = relativeVector[1]; - var relativePoint = ellipse_default.nearestPoint(0, 0, rx, ry, x1, y1); - var angle3 = getAngle2(rx, ry, relativePoint.x, relativePoint.y); - if (angle3 < startAngle) { - relativePoint = getPoint(rx, ry, startAngle); - } else if (angle3 > endAngle) { - relativePoint = getPoint(rx, ry, endAngle); - } - var vector = rotate4(relativePoint.x, relativePoint.y, xRotation); - return { - x: vector[0] + cx, - y: vector[1] + cy - }; - }, - pointDistance: function(cx, cy, rx, ry, xRotation, startAngle, endAngle, x0, y0) { - var nearestPoint2 = this.nearestPoint(cx, cy, rx, ry, x0, y0); - return distance4(nearestPoint2.x, nearestPoint2.y, x0, y0); - }, - pointAt: function(cx, cy, rx, ry, xRotation, startAngle, endAngle, t4) { - var angle3 = (endAngle - startAngle) * t4 + startAngle; - return { - x: xAt(cx, cy, rx, ry, xRotation, angle3), - y: yAt(cx, cy, rx, ry, xRotation, angle3) - }; - }, - tangentAngle: function(cx, cy, rx, ry, xRotation, startAngle, endAngle, t4) { - var angle3 = (endAngle - startAngle) * t4 + startAngle; - var dx = derivativeXAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle3); - var dy = derivativeYAt(cx, cy, rx, ry, xRotation, startAngle, endAngle, angle3); - return piMod(Math.atan2(dy, dx)); - } -}; - -// node_modules/@antv/g-math/esm/segments.js -function analyzePoints(points) { - var totalLength = 0; - var segments = []; - for (var i4 = 0; i4 < points.length - 1; i4++) { - var from = points[i4]; - var to = points[i4 + 1]; - var length_1 = distance4(from[0], from[1], to[0], to[1]); - var seg = { - from, - to, - length: length_1 - }; - segments.push(seg); - totalLength += length_1; - } - return { segments, totalLength }; -} -function lengthOfSegment(points) { - if (points.length < 2) { - return 0; - } - var totalLength = 0; - for (var i4 = 0; i4 < points.length - 1; i4++) { - var from = points[i4]; - var to = points[i4 + 1]; - totalLength += distance4(from[0], from[1], to[0], to[1]); - } - return totalLength; -} -function pointAtSegments(points, t4) { - if (t4 > 1 || t4 < 0 || points.length < 2) { - return null; - } - var _a6 = analyzePoints(points), segments = _a6.segments, totalLength = _a6.totalLength; - if (totalLength === 0) { - return { - x: points[0][0], - y: points[0][1] - }; - } - var startRatio = 0; - var point2 = null; - for (var i4 = 0; i4 < segments.length; i4++) { - var seg = segments[i4]; - var from = seg.from, to = seg.to; - var currentRatio = seg.length / totalLength; - if (t4 >= startRatio && t4 <= startRatio + currentRatio) { - var localRatio = (t4 - startRatio) / currentRatio; - point2 = line_default.pointAt(from[0], from[1], to[0], to[1], localRatio); - break; - } - startRatio += currentRatio; - } - return point2; -} -function angleAtSegments(points, t4) { - if (t4 > 1 || t4 < 0 || points.length < 2) { - return 0; - } - var _a6 = analyzePoints(points), segments = _a6.segments, totalLength = _a6.totalLength; - var startRatio = 0; - var angle3 = 0; - for (var i4 = 0; i4 < segments.length; i4++) { - var seg = segments[i4]; - var from = seg.from, to = seg.to; - var currentRatio = seg.length / totalLength; - if (t4 >= startRatio && t4 <= startRatio + currentRatio) { - angle3 = Math.atan2(to[1] - from[1], to[0] - from[0]); - break; - } - startRatio += currentRatio; - } - return angle3; -} -function distanceAtSegment(points, x6, y5) { - var minDistance = Infinity; - for (var i4 = 0; i4 < points.length - 1; i4++) { - var point2 = points[i4]; - var nextPoint = points[i4 + 1]; - var distance_1 = line_default.pointDistance(point2[0], point2[1], nextPoint[0], nextPoint[1], x6, y5); - if (distance_1 < minDistance) { - minDistance = distance_1; - } - } - return minDistance; -} - -// node_modules/@antv/g-math/esm/polyline.js -var polyline_default = { - box: function(points) { - var xArr = []; - var yArr = []; - for (var i4 = 0; i4 < points.length; i4++) { - var point2 = points[i4]; - xArr.push(point2[0]); - yArr.push(point2[1]); - } - return getBBoxByArray(xArr, yArr); - }, - length: function(points) { - return lengthOfSegment(points); - }, - pointAt: function(points, t4) { - return pointAtSegments(points, t4); - }, - pointDistance: function(points, x6, y5) { - return distanceAtSegment(points, x6, y5); - }, - tangentAngle: function(points, t4) { - return angleAtSegments(points, t4); - } -}; - -// node_modules/@antv/g-base/esm/bbox/util.js -function mergeBBox(bbox1, bbox2) { - if (!bbox1 || !bbox2) { - return bbox1 || bbox2; - } - return { - minX: Math.min(bbox1.minX, bbox2.minX), - minY: Math.min(bbox1.minY, bbox2.minY), - maxX: Math.max(bbox1.maxX, bbox2.maxX), - maxY: Math.max(bbox1.maxY, bbox2.maxY) - }; -} -function mergeArrowBBox(shape, bbox) { - var startArrowShape = shape.get("startArrowShape"); - var endArrowShape = shape.get("endArrowShape"); - var startArrowBBox = null; - var endArrowBBox = null; - if (startArrowShape) { - startArrowBBox = startArrowShape.getCanvasBBox(); - bbox = mergeBBox(bbox, startArrowBBox); - } - if (endArrowShape) { - endArrowBBox = endArrowShape.getCanvasBBox(); - bbox = mergeBBox(bbox, endArrowBBox); - } - return bbox; -} - -// node_modules/@antv/g-base/esm/bbox/polyline.js -function polyline_default2(shape) { - var attrs = shape.attr(); - var points = attrs.points; - var xArr = []; - var yArr = []; - for (var i4 = 0; i4 < points.length; i4++) { - var point2 = points[i4]; - xArr.push(point2[0]); - yArr.push(point2[1]); - } - var _a6 = util_exports.getBBoxByArray(xArr, yArr), x6 = _a6.x, y5 = _a6.y, width2 = _a6.width, height = _a6.height; - var bbox = { - minX: x6, - minY: y5, - maxX: x6 + width2, - maxY: y5 + height - }; - bbox = mergeArrowBBox(shape, bbox); - return { - x: bbox.minX, - y: bbox.minY, - width: bbox.maxX - bbox.minX, - height: bbox.maxY - bbox.minY - }; -} - -// node_modules/@antv/g-base/esm/bbox/polygon.js -function polygon_default2(shape) { - var attrs = shape.attr(); - var points = attrs.points; - var xArr = []; - var yArr = []; - for (var i4 = 0; i4 < points.length; i4++) { - var point2 = points[i4]; - xArr.push(point2[0]); - yArr.push(point2[1]); - } - return util_exports.getBBoxByArray(xArr, yArr); -} - -// node_modules/@antv/g-base/esm/util/offscreen.js -var offScreenCtx = null; -function getOffScreenContext() { - if (!offScreenCtx) { - var canvas = document.createElement("canvas"); - canvas.width = 1; - canvas.height = 1; - offScreenCtx = canvas.getContext("2d"); - } - return offScreenCtx; -} - -// node_modules/@antv/g-base/esm/util/text.js -function getTextHeight(text, fontSize, lineHeight) { - var lineCount = 1; - if ((0, import_util2.isString)(text)) { - lineCount = text.split("\n").length; - } - if (lineCount > 1) { - var spaceingY = getLineSpaceing(fontSize, lineHeight); - return fontSize * lineCount + spaceingY * (lineCount - 1); - } - return fontSize; -} -function getLineSpaceing(fontSize, lineHeight) { - return lineHeight ? lineHeight - fontSize : fontSize * 0.14; -} -function getTextWidth(text, font) { - var context = getOffScreenContext(); - var width2 = 0; - if ((0, import_util2.isNil)(text) || text === "") { - return width2; - } - context.save(); - context.font = font; - if ((0, import_util2.isString)(text) && text.includes("\n")) { - var textArr = text.split("\n"); - (0, import_util2.each)(textArr, function(subText) { - var measureWidth = context.measureText(subText).width; - if (width2 < measureWidth) { - width2 = measureWidth; - } - }); - } else { - width2 = context.measureText(text).width; - } - context.restore(); - return width2; -} -function assembleFont(attrs) { - var fontSize = attrs.fontSize, fontFamily = attrs.fontFamily, fontWeight = attrs.fontWeight, fontStyle = attrs.fontStyle, fontVariant = attrs.fontVariant; - return [fontStyle, fontVariant, fontWeight, fontSize + "px", fontFamily].join(" ").trim(); -} - -// node_modules/@antv/g-base/esm/bbox/text.js -function text_default(shape) { - var attrs = shape.attr(); - var x6 = attrs.x, y5 = attrs.y, text = attrs.text, fontSize = attrs.fontSize, lineHeight = attrs.lineHeight; - var font = attrs.font; - if (!font) { - font = assembleFont(attrs); - } - var width2 = getTextWidth(text, font); - var bbox; - if (!width2) { - bbox = { - x: x6, - y: y5, - width: 0, - height: 0 - }; - } else { - var textAlign = attrs.textAlign, textBaseline = attrs.textBaseline; - var height = getTextHeight(text, fontSize, lineHeight); - var point2 = { - x: x6, - y: y5 - height - }; - if (textAlign) { - if (textAlign === "end" || textAlign === "right") { - point2.x -= width2; - } else if (textAlign === "center") { - point2.x -= width2 / 2; - } - } - if (textBaseline) { - if (textBaseline === "top") { - point2.y += height; - } else if (textBaseline === "middle") { - point2.y += height / 2; - } - } - bbox = { - x: point2.x, - y: point2.y, - width: width2, - height - }; - } - return bbox; -} - -// node_modules/@antv/path-util/esm/parse-path.js -var import_util21 = __toModule(require_lib()); -var regexTags = /[MLHVQTCSAZ]([^MLHVQTCSAZ]*)/ig; -var regexDot = /[^\s\,]+/ig; -function parsePath(p4) { - var path = p4 || []; - if ((0, import_util21.isArray)(path)) { - return path; - } - if ((0, import_util21.isString)(path)) { - path = path.match(regexTags); - (0, import_util21.each)(path, function(item, index2) { - item = item.match(regexDot); - if (item[0].length > 1) { - var tag = item[0].charAt(0); - item.splice(1, 0, item[0].substr(1)); - item[0] = tag; - } - (0, import_util21.each)(item, function(sub6, i4) { - if (!isNaN(sub6)) { - item[i4] = +sub6; - } - }); - path[index2] = item; - }); - return path; - } -} -var parse_path_default = parsePath; - -// node_modules/@antv/path-util/esm/catmull-rom-2-bezier.js -function smoothBezier(points, smooth, isLoop, constraint) { - var cps = []; - var hasConstraint = !!constraint; - var prevPoint; - var nextPoint; - var min13; - var max15; - var nextCp0; - var cp1; - var cp0; - if (hasConstraint) { - min13 = constraint[0], max15 = constraint[1]; - for (var i4 = 0, l4 = points.length; i4 < l4; i4 += 1) { - var point2 = points[i4]; - min13 = vec2_exports.min([0, 0], min13, point2); - max15 = vec2_exports.max([0, 0], max15, point2); - } - } - for (var i4 = 0, len5 = points.length; i4 < len5; i4 += 1) { - var point2 = points[i4]; - if (i4 === 0 && !isLoop) { - cp0 = point2; - } else if (i4 === len5 - 1 && !isLoop) { - cp1 = point2; - cps.push(cp0); - cps.push(cp1); - } else { - var prevIdx = [i4 ? i4 - 1 : len5 - 1, i4 - 1][isLoop ? 0 : 1]; - prevPoint = points[prevIdx]; - nextPoint = points[isLoop ? (i4 + 1) % len5 : i4 + 1]; - var v3 = [0, 0]; - v3 = vec2_exports.sub(v3, nextPoint, prevPoint); - v3 = vec2_exports.scale(v3, v3, smooth); - var d0 = vec2_exports.distance(point2, prevPoint); - var d1 = vec2_exports.distance(point2, nextPoint); - var sum = d0 + d1; - if (sum !== 0) { - d0 /= sum; - d1 /= sum; - } - var v1 = vec2_exports.scale([0, 0], v3, -d0); - var v22 = vec2_exports.scale([0, 0], v3, d1); - cp1 = vec2_exports.add([0, 0], point2, v1); - nextCp0 = vec2_exports.add([0, 0], point2, v22); - nextCp0 = vec2_exports.min([0, 0], nextCp0, vec2_exports.max([0, 0], nextPoint, point2)); - nextCp0 = vec2_exports.max([0, 0], nextCp0, vec2_exports.min([0, 0], nextPoint, point2)); - v1 = vec2_exports.sub([0, 0], nextCp0, point2); - v1 = vec2_exports.scale([0, 0], v1, -d0 / d1); - cp1 = vec2_exports.add([0, 0], point2, v1); - cp1 = vec2_exports.min([0, 0], cp1, vec2_exports.max([0, 0], prevPoint, point2)); - cp1 = vec2_exports.max([0, 0], cp1, vec2_exports.min([0, 0], prevPoint, point2)); - v22 = vec2_exports.sub([0, 0], point2, cp1); - v22 = vec2_exports.scale([0, 0], v22, d1 / d0); - nextCp0 = vec2_exports.add([0, 0], point2, v22); - if (hasConstraint) { - cp1 = vec2_exports.max([0, 0], cp1, min13); - cp1 = vec2_exports.min([0, 0], cp1, max15); - nextCp0 = vec2_exports.max([0, 0], nextCp0, min13); - nextCp0 = vec2_exports.min([0, 0], nextCp0, max15); - } - cps.push(cp0); - cps.push(cp1); - cp0 = nextCp0; - } - } - if (isLoop) { - cps.push(cps.shift()); - } - return cps; -} -function catmullRom2Bezier(crp, z3, constraint) { - if (z3 === void 0) { - z3 = false; - } - if (constraint === void 0) { - constraint = [ - [0, 0], - [1, 1] - ]; - } - var isLoop = !!z3; - var pointList = []; - for (var i4 = 0, l4 = crp.length; i4 < l4; i4 += 2) { - pointList.push([crp[i4], crp[i4 + 1]]); - } - var controlPointList = smoothBezier(pointList, 0.4, isLoop, constraint); - var len5 = pointList.length; - var d1 = []; - var cp1; - var cp2; - var p4; - for (var i4 = 0; i4 < len5 - 1; i4 += 1) { - cp1 = controlPointList[i4 * 2]; - cp2 = controlPointList[i4 * 2 + 1]; - p4 = pointList[i4 + 1]; - d1.push(["C", cp1[0], cp1[1], cp2[0], cp2[1], p4[0], p4[1]]); - } - if (isLoop) { - cp1 = controlPointList[len5]; - cp2 = controlPointList[len5 + 1]; - p4 = pointList[0]; - d1.push(["C", cp1[0], cp1[1], cp2[0], cp2[1], p4[0], p4[1]]); - } - return d1; -} -var catmull_rom_2_bezier_default = catmullRom2Bezier; - -// node_modules/@antv/path-util/esm/fill-path-by-diff.js -var import_util22 = __toModule(require_lib()); - -// node_modules/@antv/path-util/esm/path-intersection.js -var import_util24 = __toModule(require_lib()); - -// node_modules/@antv/path-util/esm/parse-path-string.js -var import_util23 = __toModule(require_lib()); -var SPACES2 = " \n\v\f\r \xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029"; -var PATH_COMMAND2 = new RegExp("([a-z])[" + SPACES2 + ",]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?[" + SPACES2 + "]*,?[" + SPACES2 + "]*)+)", "ig"); -var PATH_VALUES2 = new RegExp("(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[" + SPACES2 + "]*,?[" + SPACES2 + "]*", "ig"); -function parsePathString2(pathString) { - if (!pathString) { - return null; - } - if ((0, import_util23.isArray)(pathString)) { - return pathString; - } - var paramCounts = { - a: 7, - c: 6, - o: 2, - h: 1, - l: 2, - m: 2, - r: 4, - q: 4, - s: 4, - t: 2, - v: 1, - u: 3, - z: 0 - }; - var data3 = []; - String(pathString).replace(PATH_COMMAND2, function(a4, b10, c5) { - var params = []; - var name = b10.toLowerCase(); - c5.replace(PATH_VALUES2, function(a5, b11) { - b11 && params.push(+b11); - }); - if (name === "m" && params.length > 2) { - data3.push([b10].concat(params.splice(0, 2))); - name = "l"; - b10 = b10 === "m" ? "l" : "L"; - } - if (name === "o" && params.length === 1) { - data3.push([b10, params[0]]); - } - if (name === "r") { - data3.push([b10].concat(params)); - } else { - while (params.length >= paramCounts[name]) { - data3.push([b10].concat(params.splice(0, paramCounts[name]))); - if (!paramCounts[name]) { - break; - } - } - } - return ""; - }); - return data3; -} - -// node_modules/@antv/path-util/esm/path-2-absolute.js -var REGEX_MD = /[a-z]/; -function toSymmetry(p4, c5) { - return [ - c5[0] + (c5[0] - p4[0]), - c5[1] + (c5[1] - p4[1]) - ]; -} -function pathToAbsolute2(pathString) { - var pathArray = parsePathString2(pathString); - if (!pathArray || !pathArray.length) { - return [ - ["M", 0, 0] - ]; - } - var needProcess = false; - for (var i4 = 0; i4 < pathArray.length; i4++) { - var cmd = pathArray[i4][0]; - if (REGEX_MD.test(cmd) || ["V", "H", "T", "S"].indexOf(cmd) >= 0) { - needProcess = true; - break; - } - } - if (!needProcess) { - return pathArray; - } - var res = []; - var x6 = 0; - var y5 = 0; - var mx = 0; - var my = 0; - var start = 0; - var pa0; - var dots; - var first = pathArray[0]; - if (first[0] === "M" || first[0] === "m") { - x6 = +first[1]; - y5 = +first[2]; - mx = x6; - my = y5; - start++; - res[0] = ["M", x6, y5]; - } - for (var i4 = start, ii = pathArray.length; i4 < ii; i4++) { - var pa = pathArray[i4]; - var preParams = res[i4 - 1]; - var r4 = []; - var cmd = pa[0]; - var upCmd = cmd.toUpperCase(); - if (cmd !== upCmd) { - r4[0] = upCmd; - switch (upCmd) { - case "A": - r4[1] = pa[1]; - r4[2] = pa[2]; - r4[3] = pa[3]; - r4[4] = pa[4]; - r4[5] = pa[5]; - r4[6] = +pa[6] + x6; - r4[7] = +pa[7] + y5; - break; - case "V": - r4[1] = +pa[1] + y5; - break; - case "H": - r4[1] = +pa[1] + x6; - break; - case "M": - mx = +pa[1] + x6; - my = +pa[2] + y5; - r4[1] = mx; - r4[2] = my; - break; - default: - for (var j4 = 1, jj = pa.length; j4 < jj; j4++) { - r4[j4] = +pa[j4] + (j4 % 2 ? x6 : y5); - } - } - } else { - r4 = pathArray[i4]; - } - switch (upCmd) { - case "Z": - x6 = +mx; - y5 = +my; - break; - case "H": - x6 = r4[1]; - r4 = ["L", x6, y5]; - break; - case "V": - y5 = r4[1]; - r4 = ["L", x6, y5]; - break; - case "T": - x6 = r4[1]; - y5 = r4[2]; - var symetricT = toSymmetry([preParams[1], preParams[2]], [preParams[3], preParams[4]]); - r4 = ["Q", symetricT[0], symetricT[1], x6, y5]; - break; - case "S": - x6 = r4[r4.length - 2]; - y5 = r4[r4.length - 1]; - var length_1 = preParams.length; - var symetricS = toSymmetry([preParams[length_1 - 4], preParams[length_1 - 3]], [preParams[length_1 - 2], preParams[length_1 - 1]]); - r4 = ["C", symetricS[0], symetricS[1], r4[1], r4[2], x6, y5]; - break; - case "M": - mx = r4[r4.length - 2]; - my = r4[r4.length - 1]; - break; - default: - x6 = r4[r4.length - 2]; - y5 = r4[r4.length - 1]; - } - res.push(r4); - } - return res; -} - -// node_modules/@antv/path-util/esm/process/arc-2-cubic.js -var TAU = Math.PI * 2; - -// node_modules/@antv/path-util/esm/get-arc-params.js -var import_util25 = __toModule(require_lib()); -function vMag(v3) { - return Math.sqrt(v3[0] * v3[0] + v3[1] * v3[1]); -} -function vRatio(u3, v3) { - return vMag(u3) * vMag(v3) ? (u3[0] * v3[0] + u3[1] * v3[1]) / (vMag(u3) * vMag(v3)) : 1; -} -function vAngle(u3, v3) { - return (u3[0] * v3[1] < u3[1] * v3[0] ? -1 : 1) * Math.acos(vRatio(u3, v3)); -} -function isSamePoint(point1, point2) { - return point1[0] === point2[0] && point1[1] === point2[1]; -} -function getArcParams(startPoint, params) { - var rx = params[1]; - var ry = params[2]; - var xRotation = (0, import_util25.mod)((0, import_util25.toRadian)(params[3]), Math.PI * 2); - var arcFlag = params[4]; - var sweepFlag = params[5]; - var x1 = startPoint[0]; - var y1 = startPoint[1]; - var x22 = params[6]; - var y22 = params[7]; - var xp = Math.cos(xRotation) * (x1 - x22) / 2 + Math.sin(xRotation) * (y1 - y22) / 2; - var yp = -1 * Math.sin(xRotation) * (x1 - x22) / 2 + Math.cos(xRotation) * (y1 - y22) / 2; - var lambda = xp * xp / (rx * rx) + yp * yp / (ry * ry); - if (lambda > 1) { - rx *= Math.sqrt(lambda); - ry *= Math.sqrt(lambda); - } - var diff2 = rx * rx * (yp * yp) + ry * ry * (xp * xp); - var f3 = diff2 ? Math.sqrt((rx * rx * (ry * ry) - diff2) / diff2) : 1; - if (arcFlag === sweepFlag) { - f3 *= -1; - } - if (isNaN(f3)) { - f3 = 0; - } - var cxp = ry ? f3 * rx * yp / ry : 0; - var cyp = rx ? f3 * -ry * xp / rx : 0; - var cx = (x1 + x22) / 2 + Math.cos(xRotation) * cxp - Math.sin(xRotation) * cyp; - var cy = (y1 + y22) / 2 + Math.sin(xRotation) * cxp + Math.cos(xRotation) * cyp; - var u3 = [(xp - cxp) / rx, (yp - cyp) / ry]; - var v3 = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry]; - var theta = vAngle([1, 0], u3); - var dTheta = vAngle(u3, v3); - if (vRatio(u3, v3) <= -1) { - dTheta = Math.PI; - } - if (vRatio(u3, v3) >= 1) { - dTheta = 0; - } - if (sweepFlag === 0 && dTheta > 0) { - dTheta = dTheta - 2 * Math.PI; - } - if (sweepFlag === 1 && dTheta < 0) { - dTheta = dTheta + 2 * Math.PI; - } - return { - cx, - cy, - rx: isSamePoint(startPoint, [x22, y22]) ? 0 : rx, - ry: isSamePoint(startPoint, [x22, y22]) ? 0 : ry, - startAngle: theta, - endAngle: theta + dTheta, - xRotation, - arcFlag, - sweepFlag - }; -} - -// node_modules/@antv/path-util/esm/path-2-segments.js -function toSymmetry2(point2, center2) { - return [center2[0] + (center2[0] - point2[0]), center2[1] + (center2[1] - point2[1])]; -} -function getSegments(path) { - path = parse_path_default(path); - var segments = []; - var currentPoint = null; - var nextParams = null; - var startMovePoint = null; - var lastStartMovePointIndex = 0; - var count2 = path.length; - for (var i4 = 0; i4 < count2; i4++) { - var params = path[i4]; - nextParams = path[i4 + 1]; - var command = params[0]; - var segment = { - command, - prePoint: currentPoint, - params, - startTangent: null, - endTangent: null - }; - switch (command) { - case "M": - startMovePoint = [params[1], params[2]]; - lastStartMovePointIndex = i4; - break; - case "A": - var arcParams = getArcParams(currentPoint, params); - segment["arcParams"] = arcParams; - break; - default: - break; - } - if (command === "Z") { - currentPoint = startMovePoint; - nextParams = path[lastStartMovePointIndex + 1]; - } else { - var len5 = params.length; - currentPoint = [params[len5 - 2], params[len5 - 1]]; - } - if (nextParams && nextParams[0] === "Z") { - nextParams = path[lastStartMovePointIndex]; - if (segments[lastStartMovePointIndex]) { - segments[lastStartMovePointIndex].prePoint = currentPoint; - } - } - segment["currentPoint"] = currentPoint; - if (segments[lastStartMovePointIndex] && isSamePoint(currentPoint, segments[lastStartMovePointIndex].currentPoint)) { - segments[lastStartMovePointIndex].prePoint = segment.prePoint; - } - var nextPoint = nextParams ? [nextParams[nextParams.length - 2], nextParams[nextParams.length - 1]] : null; - segment["nextPoint"] = nextPoint; - var prePoint = segment.prePoint; - if (["L", "H", "V"].includes(command)) { - segment.startTangent = [prePoint[0] - currentPoint[0], prePoint[1] - currentPoint[1]]; - segment.endTangent = [currentPoint[0] - prePoint[0], currentPoint[1] - prePoint[1]]; - } else if (command === "Q") { - var cp = [params[1], params[2]]; - segment.startTangent = [prePoint[0] - cp[0], prePoint[1] - cp[1]]; - segment.endTangent = [currentPoint[0] - cp[0], currentPoint[1] - cp[1]]; - } else if (command === "T") { - var preSegment = segments[i4 - 1]; - var cp = toSymmetry2(preSegment.currentPoint, prePoint); - if (preSegment.command === "Q") { - segment.command = "Q"; - segment.startTangent = [prePoint[0] - cp[0], prePoint[1] - cp[1]]; - segment.endTangent = [currentPoint[0] - cp[0], currentPoint[1] - cp[1]]; - } else { - segment.command = "TL"; - segment.startTangent = [prePoint[0] - currentPoint[0], prePoint[1] - currentPoint[1]]; - segment.endTangent = [currentPoint[0] - prePoint[0], currentPoint[1] - prePoint[1]]; - } - } else if (command === "C") { - var cp1 = [params[1], params[2]]; - var cp2 = [params[3], params[4]]; - segment.startTangent = [prePoint[0] - cp1[0], prePoint[1] - cp1[1]]; - segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]]; - if (segment.startTangent[0] === 0 && segment.startTangent[1] === 0) { - segment.startTangent = [cp1[0] - cp2[0], cp1[1] - cp2[1]]; - } - if (segment.endTangent[0] === 0 && segment.endTangent[1] === 0) { - segment.endTangent = [cp2[0] - cp1[0], cp2[1] - cp1[1]]; - } - } else if (command === "S") { - var preSegment = segments[i4 - 1]; - var cp1 = toSymmetry2(preSegment.currentPoint, prePoint); - var cp2 = [params[1], params[2]]; - if (preSegment.command === "C") { - segment.command = "C"; - segment.startTangent = [prePoint[0] - cp1[0], prePoint[1] - cp1[1]]; - segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]]; - } else { - segment.command = "SQ"; - segment.startTangent = [prePoint[0] - cp2[0], prePoint[1] - cp2[1]]; - segment.endTangent = [currentPoint[0] - cp2[0], currentPoint[1] - cp2[1]]; - } - } else if (command === "A") { - var d3 = 1e-3; - var _a6 = segment["arcParams"] || {}, _b = _a6.cx, cx = _b === void 0 ? 0 : _b, _c = _a6.cy, cy = _c === void 0 ? 0 : _c, _d = _a6.rx, rx = _d === void 0 ? 0 : _d, _e = _a6.ry, ry = _e === void 0 ? 0 : _e, _f = _a6.sweepFlag, sweepFlag = _f === void 0 ? 0 : _f, _g = _a6.startAngle, startAngle = _g === void 0 ? 0 : _g, _h = _a6.endAngle, endAngle = _h === void 0 ? 0 : _h; - if (sweepFlag === 0) { - d3 *= -1; - } - var dx1 = rx * Math.cos(startAngle - d3) + cx; - var dy1 = ry * Math.sin(startAngle - d3) + cy; - segment.startTangent = [dx1 - startMovePoint[0], dy1 - startMovePoint[1]]; - var dx2 = rx * Math.cos(startAngle + endAngle + d3) + cx; - var dy2 = ry * Math.sin(startAngle + endAngle - d3) + cy; - segment.endTangent = [prePoint[0] - dx2, prePoint[1] - dy2]; - } - segments.push(segment); - } - return segments; -} - -// node_modules/@antv/path-util/esm/get-line-intersect.js -var isBetween = function(value2, min13, max15) { - return value2 >= min13 && value2 <= max15; -}; -function getLineIntersect(p0, p1, p22, p32) { - var tolerance3 = 1e-3; - var E2 = { - x: p22.x - p0.x, - y: p22.y - p0.y - }; - var D0 = { - x: p1.x - p0.x, - y: p1.y - p0.y - }; - var D1 = { - x: p32.x - p22.x, - y: p32.y - p22.y - }; - var kross = D0.x * D1.y - D0.y * D1.x; - var sqrKross = kross * kross; - var sqrLen0 = D0.x * D0.x + D0.y * D0.y; - var sqrLen1 = D1.x * D1.x + D1.y * D1.y; - var point2 = null; - if (sqrKross > tolerance3 * sqrLen0 * sqrLen1) { - var s4 = (E2.x * D1.y - E2.y * D1.x) / kross; - var t4 = (E2.x * D0.y - E2.y * D0.x) / kross; - if (isBetween(s4, 0, 1) && isBetween(t4, 0, 1)) { - point2 = { - x: p0.x + s4 * D0.x, - y: p0.y + s4 * D0.y - }; - } - } - return point2; -} - -// node_modules/@antv/path-util/esm/point-in-polygon.js -var tolerance = 1e-6; -function dcmp(x6) { - if (Math.abs(x6) < tolerance) { - return 0; - } - return x6 < 0 ? -1 : 1; -} -function onSegment(p1, p22, q3) { - if ((q3[0] - p1[0]) * (p22[1] - p1[1]) === (p22[0] - p1[0]) * (q3[1] - p1[1]) && Math.min(p1[0], p22[0]) <= q3[0] && q3[0] <= Math.max(p1[0], p22[0]) && Math.min(p1[1], p22[1]) <= q3[1] && q3[1] <= Math.max(p1[1], p22[1])) { - return true; - } - return false; -} -function isInPolygon(points, x6, y5) { - var isHit = false; - var n3 = points.length; - if (n3 <= 2) { - return false; - } - for (var i4 = 0; i4 < n3; i4++) { - var p1 = points[i4]; - var p22 = points[(i4 + 1) % n3]; - if (onSegment(p1, p22, [x6, y5])) { - return true; - } - if (dcmp(p1[1] - y5) > 0 !== dcmp(p22[1] - y5) > 0 && dcmp(x6 - (y5 - p1[1]) * (p1[0] - p22[0]) / (p1[1] - p22[1]) - p1[0]) < 0) { - isHit = !isHit; - } - } - return isHit; -} - -// node_modules/@antv/path-util/esm/is-polygons-intersect.js -var import_util26 = __toModule(require_lib()); -function parseToLines(points) { - var lines = []; - var count2 = points.length; - for (var i4 = 0; i4 < count2 - 1; i4++) { - var point2 = points[i4]; - var next = points[i4 + 1]; - lines.push({ - from: { - x: point2[0], - y: point2[1] - }, - to: { - x: next[0], - y: next[1] - } - }); - } - if (lines.length > 1) { - var first = points[0]; - var last17 = points[count2 - 1]; - lines.push({ - from: { - x: last17[0], - y: last17[1] - }, - to: { - x: first[0], - y: first[1] - } - }); - } - return lines; -} -function lineIntersectPolygon(lines, line2) { - var isIntersect2 = false; - (0, import_util26.each)(lines, function(l4) { - if (getLineIntersect(l4.from, l4.to, line2.from, line2.to)) { - isIntersect2 = true; - return false; - } - }); - return isIntersect2; -} -function getBBox(points) { - var xArr = points.map(function(p4) { - return p4[0]; - }); - var yArr = points.map(function(p4) { - return p4[1]; - }); - return { - minX: Math.min.apply(null, xArr), - maxX: Math.max.apply(null, xArr), - minY: Math.min.apply(null, yArr), - maxY: Math.max.apply(null, yArr) - }; -} -function intersectBBox(box1, box2) { - return !(box2.minX > box1.maxX || box2.maxX < box1.minX || box2.minY > box1.maxY || box2.maxY < box1.minY); -} -function isPolygonsIntersect(points1, points2) { - if (points1.length < 2 || points2.length < 2) { - return false; - } - var bbox1 = getBBox(points1); - var bbox2 = getBBox(points2); - if (!intersectBBox(bbox1, bbox2)) { - return false; - } - var isIn = false; - (0, import_util26.each)(points2, function(point2) { - if (isInPolygon(points1, point2[0], point2[1])) { - isIn = true; - return false; - } - }); - if (isIn) { - return true; - } - (0, import_util26.each)(points1, function(point2) { - if (isInPolygon(points2, point2[0], point2[1])) { - isIn = true; - return false; - } - }); - if (isIn) { - return true; - } - var lines1 = parseToLines(points1); - var lines2 = parseToLines(points2); - var isIntersect2 = false; - (0, import_util26.each)(lines2, function(line2) { - if (lineIntersectPolygon(lines1, line2)) { - isIntersect2 = true; - return false; - } - }); - return isIntersect2; -} - -// node_modules/@antv/g-base/esm/bbox/path.js -var import_util27 = __toModule(require_lib()); -function getPathBox(segments, lineWidth) { - var xArr = []; - var yArr = []; - var segmentsWithAngle = []; - for (var i4 = 0; i4 < segments.length; i4++) { - var segment = segments[i4]; - var currentPoint = segment.currentPoint, params = segment.params, prePoint = segment.prePoint; - var box2 = void 0; - switch (segment.command) { - case "Q": - box2 = quadratic_default.box(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4]); - break; - case "C": - box2 = cubic_default.box(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], params[5], params[6]); - break; - case "A": - var arcParams = segment.arcParams; - box2 = arc_default.box(arcParams.cx, arcParams.cy, arcParams.rx, arcParams.ry, arcParams.xRotation, arcParams.startAngle, arcParams.endAngle); - break; - default: - xArr.push(currentPoint[0]); - yArr.push(currentPoint[1]); - break; - } - if (box2) { - segment.box = box2; - xArr.push(box2.x, box2.x + box2.width); - yArr.push(box2.y, box2.y + box2.height); - } - if (lineWidth && (segment.command === "L" || segment.command === "M") && segment.prePoint && segment.nextPoint) { - segmentsWithAngle.push(segment); - } - } - xArr = xArr.filter(function(item) { - return !Number.isNaN(item); - }); - yArr = yArr.filter(function(item) { - return !Number.isNaN(item); - }); - var minX = (0, import_util27.min)(xArr); - var minY = (0, import_util27.min)(yArr); - var maxX = (0, import_util27.max)(xArr); - var maxY2 = (0, import_util27.max)(yArr); - if (segmentsWithAngle.length === 0) { - return { - x: minX, - y: minY, - width: maxX - minX, - height: maxY2 - minY - }; - } - for (var i4 = 0; i4 < segmentsWithAngle.length; i4++) { - var segment = segmentsWithAngle[i4]; - var currentPoint = segment.currentPoint; - var extra = void 0; - if (currentPoint[0] === minX) { - extra = getExtraFromSegmentWithAngle(segment, lineWidth); - minX = minX - extra.xExtra; - } else if (currentPoint[0] === maxX) { - extra = getExtraFromSegmentWithAngle(segment, lineWidth); - maxX = maxX + extra.xExtra; - } - if (currentPoint[1] === minY) { - extra = getExtraFromSegmentWithAngle(segment, lineWidth); - minY = minY - extra.yExtra; - } else if (currentPoint[1] === maxY2) { - extra = getExtraFromSegmentWithAngle(segment, lineWidth); - maxY2 = maxY2 + extra.yExtra; - } - } - return { - x: minX, - y: minY, - width: maxX - minX, - height: maxY2 - minY - }; -} -function getExtraFromSegmentWithAngle(segment, lineWidth) { - var prePoint = segment.prePoint, currentPoint = segment.currentPoint, nextPoint = segment.nextPoint; - var currentAndPre = Math.pow(currentPoint[0] - prePoint[0], 2) + Math.pow(currentPoint[1] - prePoint[1], 2); - var currentAndNext = Math.pow(currentPoint[0] - nextPoint[0], 2) + Math.pow(currentPoint[1] - nextPoint[1], 2); - var preAndNext = Math.pow(prePoint[0] - nextPoint[0], 2) + Math.pow(prePoint[1] - nextPoint[1], 2); - var currentAngle = Math.acos((currentAndPre + currentAndNext - preAndNext) / (2 * Math.sqrt(currentAndPre) * Math.sqrt(currentAndNext))); - if (!currentAngle || Math.sin(currentAngle) === 0 || (0, import_util27.isNumberEqual)(currentAngle, 0)) { - return { - xExtra: 0, - yExtra: 0 - }; - } - var xAngle = Math.abs(Math.atan2(nextPoint[1] - currentPoint[1], nextPoint[0] - currentPoint[0])); - var yAngle = Math.abs(Math.atan2(nextPoint[0] - currentPoint[0], nextPoint[1] - currentPoint[1])); - xAngle = xAngle > Math.PI / 2 ? Math.PI - xAngle : xAngle; - yAngle = yAngle > Math.PI / 2 ? Math.PI - yAngle : yAngle; - var extra = { - xExtra: Math.cos(currentAngle / 2 - xAngle) * (lineWidth / 2 * (1 / Math.sin(currentAngle / 2))) - lineWidth / 2 || 0, - yExtra: Math.cos(yAngle - currentAngle / 2) * (lineWidth / 2 * (1 / Math.sin(currentAngle / 2))) - lineWidth / 2 || 0 - }; - return extra; -} -function path_default(shape) { - var attrs = shape.attr(); - var path = attrs.path, stroke = attrs.stroke; - var lineWidth = stroke ? attrs.lineWidth : 0; - var segments = shape.get("segments") || getSegments(path); - var _a6 = getPathBox(segments, lineWidth), x6 = _a6.x, y5 = _a6.y, width2 = _a6.width, height = _a6.height; - var bbox = { - minX: x6, - minY: y5, - maxX: x6 + width2, - maxY: y5 + height - }; - bbox = mergeArrowBBox(shape, bbox); - return { - x: bbox.minX, - y: bbox.minY, - width: bbox.maxX - bbox.minX, - height: bbox.maxY - bbox.minY - }; -} - -// node_modules/@antv/g-base/esm/bbox/line.js -function line_default2(shape) { - var attrs = shape.attr(); - var x1 = attrs.x1, y1 = attrs.y1, x22 = attrs.x2, y22 = attrs.y2; - var minX = Math.min(x1, x22); - var maxX = Math.max(x1, x22); - var minY = Math.min(y1, y22); - var maxY2 = Math.max(y1, y22); - var bbox = { - minX, - maxX, - minY, - maxY: maxY2 - }; - bbox = mergeArrowBBox(shape, bbox); - return { - x: bbox.minX, - y: bbox.minY, - width: bbox.maxX - bbox.minX, - height: bbox.maxY - bbox.minY - }; -} - -// node_modules/@antv/g-base/esm/bbox/ellipse.js -function ellipse_default2(shape) { - var attrs = shape.attr(); - var x6 = attrs.x, y5 = attrs.y, rx = attrs.rx, ry = attrs.ry; - return { - x: x6 - rx, - y: y5 - ry, - width: rx * 2, - height: ry * 2 - }; -} - -// node_modules/@antv/g-base/esm/bbox/index.js -register("rect", rect_default); -register("image", rect_default); -register("circle", circle_default); -register("marker", circle_default); -register("polyline", polyline_default2); -register("polygon", polygon_default2); -register("text", text_default); -register("path", path_default); -register("line", line_default2); -register("ellipse", ellipse_default2); - -// node_modules/@antv/adjust/esm/adjusts/adjust.js -var _3 = __toModule(require_lib()); - -// node_modules/@antv/adjust/esm/constant.js -var DEFAULT_Y = 0; -var MARGIN_RATIO = 1 / 2; -var DODGE_RATIO = 1 / 2; -var GAP = 0.05; - -// node_modules/@antv/adjust/esm/adjusts/adjust.js -var Adjust = function() { - function Adjust2(cfg) { - var xField = cfg.xField, yField = cfg.yField, _a6 = cfg.adjustNames, adjustNames = _a6 === void 0 ? ["x", "y"] : _a6; - this.adjustNames = adjustNames; - this.xField = xField; - this.yField = yField; - } - Adjust2.prototype.isAdjust = function(dim) { - return this.adjustNames.indexOf(dim) >= 0; - }; - Adjust2.prototype.getAdjustRange = function(dim, dimValue, values4) { - var yField = this.yField; - var index2 = values4.indexOf(dimValue); - var length5 = values4.length; - var pre; - var next; - if (!yField && this.isAdjust("y")) { - pre = 0; - next = 1; - } else if (length5 > 1) { - pre = values4[index2 === 0 ? 0 : index2 - 1]; - next = values4[index2 === length5 - 1 ? length5 - 1 : index2 + 1]; - if (index2 !== 0) { - pre += (dimValue - pre) / 2; - } else { - pre -= (next - dimValue) / 2; - } - if (index2 !== length5 - 1) { - next -= (next - dimValue) / 2; - } else { - next += (dimValue - values4[length5 - 2]) / 2; - } - } else { - pre = dimValue === 0 ? 0 : dimValue - 0.5; - next = dimValue === 0 ? 1 : dimValue + 0.5; - } - return { - pre, - next - }; - }; - Adjust2.prototype.adjustData = function(groupedDataArray, mergedData) { - var _this = this; - var dimValuesMap = this.getDimValues(mergedData); - _3.each(groupedDataArray, function(dataArray, index2) { - _3.each(dimValuesMap, function(values4, dim) { - _this.adjustDim(dim, values4, dataArray, index2); - }); - }); - }; - Adjust2.prototype.groupData = function(data3, dim) { - _3.each(data3, function(record) { - if (record[dim] === void 0) { - record[dim] = DEFAULT_Y; - } - }); - return _3.groupBy(data3, dim); - }; - Adjust2.prototype.adjustDim = function(dim, values4, data3, index2) { - }; - Adjust2.prototype.getDimValues = function(mergedData) { - var _a6 = this, xField = _a6.xField, yField = _a6.yField; - var dimValuesMap = {}; - var dims = []; - if (xField && this.isAdjust("x")) { - dims.push(xField); - } - if (yField && this.isAdjust("y")) { - dims.push(yField); - } - dims.forEach(function(dim2) { - dimValuesMap[dim2] = _3.valuesOfKey(mergedData, dim2).sort(function(v1, v22) { - return v1 - v22; - }); - }); - if (!yField && this.isAdjust("y")) { - var dim = "y"; - dimValuesMap[dim] = [DEFAULT_Y, 1]; - } - return dimValuesMap; - }; - return Adjust2; -}(); -var adjust_default = Adjust; - -// node_modules/@antv/adjust/esm/factory.js -var ADJUST_MAP = {}; -var getAdjust = function(type2) { - return ADJUST_MAP[type2.toLowerCase()]; -}; -var registerAdjust = function(type2, ctor) { - if (getAdjust(type2)) { - throw new Error("Adjust type '" + type2 + "' existed."); - } - ADJUST_MAP[type2.toLowerCase()] = ctor; -}; - -// node_modules/@antv/adjust/node_modules/tslib/modules/index.js -var import_tslib9 = __toModule(require_tslib2()); -var { - __extends: __extends2, - __assign: __assign2, - __rest: __rest2, - __decorate: __decorate2, - __param: __param2, - __metadata: __metadata2, - __awaiter: __awaiter2, - __generator: __generator2, - __exportStar: __exportStar2, - __createBinding: __createBinding2, - __values: __values2, - __read: __read2, - __spread: __spread2, - __spreadArrays: __spreadArrays2, - __await: __await2, - __asyncGenerator: __asyncGenerator2, - __asyncDelegator: __asyncDelegator2, - __asyncValues: __asyncValues2, - __makeTemplateObject: __makeTemplateObject2, - __importStar: __importStar2, - __importDefault: __importDefault2, - __classPrivateFieldGet: __classPrivateFieldGet2, - __classPrivateFieldSet: __classPrivateFieldSet2 -} = import_tslib9.default; - -// node_modules/@antv/adjust/esm/adjusts/dodge.js -var _4 = __toModule(require_lib()); -var Dodge = function(_super) { - __extends2(Dodge2, _super); - function Dodge2(cfg) { - var _this = _super.call(this, cfg) || this; - _this.cacheMap = {}; - _this.adjustDataArray = []; - _this.mergeData = []; - var _a6 = cfg.marginRatio, marginRatio = _a6 === void 0 ? MARGIN_RATIO : _a6, _b = cfg.dodgeRatio, dodgeRatio = _b === void 0 ? DODGE_RATIO : _b, dodgeBy = cfg.dodgeBy, intervalPadding = cfg.intervalPadding, dodgePadding = cfg.dodgePadding, xDimensionLength = cfg.xDimensionLength, groupNum = cfg.groupNum, defaultSize = cfg.defaultSize, maxColumnWidth = cfg.maxColumnWidth, minColumnWidth = cfg.minColumnWidth, columnWidthRatio = cfg.columnWidthRatio; - _this.marginRatio = marginRatio; - _this.dodgeRatio = dodgeRatio; - _this.dodgeBy = dodgeBy; - _this.intervalPadding = intervalPadding; - _this.dodgePadding = dodgePadding; - _this.xDimensionLegenth = xDimensionLength; - _this.groupNum = groupNum; - _this.defaultSize = defaultSize; - _this.maxColumnWidth = maxColumnWidth; - _this.minColumnWidth = minColumnWidth; - _this.columnWidthRatio = columnWidthRatio; - return _this; - } - Dodge2.prototype.process = function(groupDataArray) { - var groupedDataArray = _4.clone(groupDataArray); - var mergeData = _4.flatten(groupedDataArray); - var dodgeBy = this.dodgeBy; - var adjustDataArray = dodgeBy ? _4.group(mergeData, dodgeBy) : groupedDataArray; - this.cacheMap = {}; - this.adjustDataArray = adjustDataArray; - this.mergeData = mergeData; - this.adjustData(adjustDataArray, mergeData); - this.adjustDataArray = []; - this.mergeData = []; - return groupedDataArray; - }; - Dodge2.prototype.adjustDim = function(dim, values4, data3, frameIndex) { - var _this = this; - var map23 = this.getDistribution(dim); - var groupData = this.groupData(data3, dim); - _4.each(groupData, function(group3, key) { - var range; - if (values4.length === 1) { - range = { - pre: values4[0] - 1, - next: values4[0] + 1 - }; - } else { - range = _this.getAdjustRange(dim, parseFloat(key), values4); - } - _4.each(group3, function(d3) { - var value2 = d3[dim]; - var valueArr = map23[value2]; - var valIndex = valueArr.indexOf(frameIndex); - d3[dim] = _this.getDodgeOffset(range, valIndex, valueArr.length); - }); - }); - return []; - }; - Dodge2.prototype.getDodgeOffset = function(range, idx, len5) { - var _a6 = this, dodgeRatio = _a6.dodgeRatio, marginRatio = _a6.marginRatio, intervalPadding = _a6.intervalPadding, dodgePadding = _a6.dodgePadding; - var pre = range.pre, next = range.next; - var tickLength = next - pre; - var position2; - if (!_4.isNil(intervalPadding) && _4.isNil(dodgePadding) && intervalPadding >= 0) { - var offset = this.getIntervalOnlyOffset(len5, idx); - position2 = pre + offset; - } else if (!_4.isNil(dodgePadding) && _4.isNil(intervalPadding) && dodgePadding >= 0) { - var offset = this.getDodgeOnlyOffset(len5, idx); - position2 = pre + offset; - } else if (!_4.isNil(intervalPadding) && !_4.isNil(dodgePadding) && intervalPadding >= 0 && dodgePadding >= 0) { - var offset = this.getIntervalAndDodgeOffset(len5, idx); - position2 = pre + offset; - } else { - var width2 = tickLength * dodgeRatio / len5; - var margin = marginRatio * width2; - var offset = 1 / 2 * (tickLength - len5 * width2 - (len5 - 1) * margin) + ((idx + 1) * width2 + idx * margin) - 1 / 2 * width2 - 1 / 2 * tickLength; - position2 = (pre + next) / 2 + offset; - } - return position2; - }; - Dodge2.prototype.getIntervalOnlyOffset = function(len5, idx) { - var _a6 = this, defaultSize = _a6.defaultSize, intervalPadding = _a6.intervalPadding, xDimensionLegenth = _a6.xDimensionLegenth, groupNum = _a6.groupNum, dodgeRatio = _a6.dodgeRatio, maxColumnWidth = _a6.maxColumnWidth, minColumnWidth = _a6.minColumnWidth, columnWidthRatio = _a6.columnWidthRatio; - var normalizedIntervalPadding = intervalPadding / xDimensionLegenth; - var normalizedDodgePadding = (1 - (groupNum - 1) * normalizedIntervalPadding) / groupNum * dodgeRatio / (len5 - 1); - var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len5 - 1)) / len5; - geomWidth = !_4.isNil(columnWidthRatio) ? 1 / groupNum / len5 * columnWidthRatio : geomWidth; - if (!_4.isNil(maxColumnWidth)) { - var normalizedMaxWidht = maxColumnWidth / xDimensionLegenth; - geomWidth = Math.min(geomWidth, normalizedMaxWidht); - } - if (!_4.isNil(minColumnWidth)) { - var normalizedMinWidht = minColumnWidth / xDimensionLegenth; - geomWidth = Math.max(geomWidth, normalizedMinWidht); - } - geomWidth = defaultSize ? defaultSize / xDimensionLegenth : geomWidth; - normalizedDodgePadding = ((1 - (groupNum - 1) * normalizedIntervalPadding) / groupNum - len5 * geomWidth) / (len5 - 1); - var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding + 1 / 2 * normalizedIntervalPadding) * groupNum - normalizedIntervalPadding / 2; - return offset; - }; - Dodge2.prototype.getDodgeOnlyOffset = function(len5, idx) { - var _a6 = this, defaultSize = _a6.defaultSize, dodgePadding = _a6.dodgePadding, xDimensionLegenth = _a6.xDimensionLegenth, groupNum = _a6.groupNum, marginRatio = _a6.marginRatio, maxColumnWidth = _a6.maxColumnWidth, minColumnWidth = _a6.minColumnWidth, columnWidthRatio = _a6.columnWidthRatio; - var normalizedDodgePadding = dodgePadding / xDimensionLegenth; - var normalizedIntervalPadding = 1 * marginRatio / (groupNum - 1); - var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len5 - 1)) / len5; - geomWidth = columnWidthRatio ? 1 / groupNum / len5 * columnWidthRatio : geomWidth; - if (!_4.isNil(maxColumnWidth)) { - var normalizedMaxWidht = maxColumnWidth / xDimensionLegenth; - geomWidth = Math.min(geomWidth, normalizedMaxWidht); - } - if (!_4.isNil(minColumnWidth)) { - var normalizedMinWidht = minColumnWidth / xDimensionLegenth; - geomWidth = Math.max(geomWidth, normalizedMinWidht); - } - geomWidth = defaultSize ? defaultSize / xDimensionLegenth : geomWidth; - normalizedIntervalPadding = (1 - (geomWidth * len5 + normalizedDodgePadding * (len5 - 1)) * groupNum) / (groupNum - 1); - var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding + 1 / 2 * normalizedIntervalPadding) * groupNum - normalizedIntervalPadding / 2; - return offset; - }; - Dodge2.prototype.getIntervalAndDodgeOffset = function(len5, idx) { - var _a6 = this, intervalPadding = _a6.intervalPadding, dodgePadding = _a6.dodgePadding, xDimensionLegenth = _a6.xDimensionLegenth, groupNum = _a6.groupNum; - var normalizedIntervalPadding = intervalPadding / xDimensionLegenth; - var normalizedDodgePadding = dodgePadding / xDimensionLegenth; - var geomWidth = ((1 - normalizedIntervalPadding * (groupNum - 1)) / groupNum - normalizedDodgePadding * (len5 - 1)) / len5; - var offset = ((1 / 2 + idx) * geomWidth + idx * normalizedDodgePadding + 1 / 2 * normalizedIntervalPadding) * groupNum - normalizedIntervalPadding / 2; - return offset; - }; - Dodge2.prototype.getDistribution = function(dim) { - var groupedDataArray = this.adjustDataArray; - var cacheMap = this.cacheMap; - var map23 = cacheMap[dim]; - if (!map23) { - map23 = {}; - _4.each(groupedDataArray, function(data3, index2) { - var values4 = _4.valuesOfKey(data3, dim); - if (!values4.length) { - values4.push(0); - } - _4.each(values4, function(val) { - if (!map23[val]) { - map23[val] = []; - } - map23[val].push(index2); - }); - }); - cacheMap[dim] = map23; - } - return map23; - }; - return Dodge2; -}(adjust_default); -var dodge_default = Dodge; - -// node_modules/@antv/adjust/esm/adjusts/jitter.js -var _5 = __toModule(require_lib()); -function randomNumber(min13, max15) { - return (max15 - min13) * Math.random() + min13; -} -var Jitter = function(_super) { - __extends2(Jitter2, _super); - function Jitter2() { - return _super !== null && _super.apply(this, arguments) || this; - } - Jitter2.prototype.process = function(groupDataArray) { - var groupedDataArray = _5.clone(groupDataArray); - var mergeData = _5.flatten(groupedDataArray); - this.adjustData(groupedDataArray, mergeData); - return groupedDataArray; - }; - Jitter2.prototype.adjustDim = function(dim, values4, dataArray) { - var _this = this; - var groupDataArray = this.groupData(dataArray, dim); - return _5.each(groupDataArray, function(data3, dimValue) { - return _this.adjustGroup(data3, dim, parseFloat(dimValue), values4); - }); - }; - Jitter2.prototype.getAdjustOffset = function(range) { - var pre = range.pre, next = range.next; - var margin = (next - pre) * GAP; - return randomNumber(pre + margin, next - margin); - }; - Jitter2.prototype.adjustGroup = function(group3, dim, dimValue, values4) { - var _this = this; - var range = this.getAdjustRange(dim, dimValue, values4); - _5.each(group3, function(data3) { - data3[dim] = _this.getAdjustOffset(range); - }); - return group3; - }; - return Jitter2; -}(adjust_default); -var jitter_default = Jitter; - -// node_modules/@antv/adjust/esm/adjusts/stack.js -var _6 = __toModule(require_lib()); -var Cache2 = _6.Cache; -var Stack = function(_super) { - __extends2(Stack3, _super); - function Stack3(cfg) { - var _this = _super.call(this, cfg) || this; - var _a6 = cfg.adjustNames, adjustNames = _a6 === void 0 ? ["y"] : _a6, _b = cfg.height, height = _b === void 0 ? NaN : _b, _c = cfg.size, size14 = _c === void 0 ? 10 : _c, _d = cfg.reverseOrder, reverseOrder = _d === void 0 ? false : _d; - _this.adjustNames = adjustNames; - _this.height = height; - _this.size = size14; - _this.reverseOrder = reverseOrder; - return _this; - } - Stack3.prototype.process = function(groupDataArray) { - var _a6 = this, yField = _a6.yField, reverseOrder = _a6.reverseOrder; - var d3 = yField ? this.processStack(groupDataArray) : this.processOneDimStack(groupDataArray); - return reverseOrder ? this.reverse(d3) : d3; - }; - Stack3.prototype.reverse = function(groupedDataArray) { - return groupedDataArray.slice(0).reverse(); - }; - Stack3.prototype.processStack = function(groupDataArray) { - var _a6 = this, xField = _a6.xField, yField = _a6.yField, reverseOrder = _a6.reverseOrder; - var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray; - var positive = new Cache2(); - var negative = new Cache2(); - return groupedDataArray.map(function(dataArray) { - return dataArray.map(function(data3) { - var _a7; - var x6 = _6.get(data3, xField, 0); - var y5 = _6.get(data3, [yField]); - var xKey = x6.toString(); - y5 = _6.isArray(y5) ? y5[1] : y5; - if (!_6.isNil(y5)) { - var cache3 = y5 >= 0 ? positive : negative; - if (!cache3.has(xKey)) { - cache3.set(xKey, 0); - } - var xValue = cache3.get(xKey); - var newXValue = y5 + xValue; - cache3.set(xKey, newXValue); - return __assign2(__assign2({}, data3), (_a7 = {}, _a7[yField] = [xValue, newXValue], _a7)); - } - return data3; - }); - }); - }; - Stack3.prototype.processOneDimStack = function(groupDataArray) { - var _this = this; - var _a6 = this, xField = _a6.xField, height = _a6.height, reverseOrder = _a6.reverseOrder; - var yField = "y"; - var groupedDataArray = reverseOrder ? this.reverse(groupDataArray) : groupDataArray; - var cache3 = new Cache2(); - return groupedDataArray.map(function(dataArray) { - return dataArray.map(function(data3) { - var _a7; - var size14 = _this.size; - var xValue = data3[xField]; - var stackHeight = size14 * 2 / height; - if (!cache3.has(xValue)) { - cache3.set(xValue, stackHeight / 2); - } - var stackValue = cache3.get(xValue); - cache3.set(xValue, stackValue + stackHeight); - return __assign2(__assign2({}, data3), (_a7 = {}, _a7[yField] = stackValue, _a7)); - }); - }); - }; - return Stack3; -}(adjust_default); -var stack_default = Stack; - -// node_modules/@antv/adjust/esm/adjusts/symmetric.js -var _7 = __toModule(require_lib()); -var Symmetric = function(_super) { - __extends2(Symmetric2, _super); - function Symmetric2() { - return _super !== null && _super.apply(this, arguments) || this; - } - Symmetric2.prototype.process = function(groupDataArray) { - var mergeData = _7.flatten(groupDataArray); - var _a6 = this, xField = _a6.xField, yField = _a6.yField; - var cache3 = this.getXValuesMaxMap(mergeData); - var max15 = Math.max.apply(Math, Object.keys(cache3).map(function(key) { - return cache3[key]; - })); - return _7.map(groupDataArray, function(dataArray) { - return _7.map(dataArray, function(data3) { - var _a7, _b; - var yValue = data3[yField]; - var xValue = data3[xField]; - if (_7.isArray(yValue)) { - var off_1 = (max15 - cache3[xValue]) / 2; - return __assign2(__assign2({}, data3), (_a7 = {}, _a7[yField] = _7.map(yValue, function(y5) { - return off_1 + y5; - }), _a7)); - } - var offset = (max15 - yValue) / 2; - return __assign2(__assign2({}, data3), (_b = {}, _b[yField] = [offset, yValue + offset], _b)); - }); - }); - }; - Symmetric2.prototype.getXValuesMaxMap = function(mergeData) { - var _this = this; - var _a6 = this, xField = _a6.xField, yField = _a6.yField; - var groupDataArray = _7.groupBy(mergeData, function(data3) { - return data3[xField]; - }); - return _7.mapValues(groupDataArray, function(dataArray) { - return _this.getDimMaxValue(dataArray, yField); - }); - }; - Symmetric2.prototype.getDimMaxValue = function(mergeData, dim) { - var dimValues = _7.map(mergeData, function(data3) { - return _7.get(data3, dim, []); - }); - var flattenValues = _7.flatten(dimValues); - return Math.max.apply(Math, flattenValues); - }; - return Symmetric2; -}(adjust_default); -var symmetric_default = Symmetric; - -// node_modules/@antv/adjust/esm/index.js -registerAdjust("Dodge", dodge_default); -registerAdjust("Jitter", jitter_default); -registerAdjust("Stack", stack_default); -registerAdjust("Symmetric", symmetric_default); - -// node_modules/@antv/attr/esm/attributes/base.js -var import_util31 = __toModule(require_lib()); -var toScaleString = function(scale12, value2) { - if ((0, import_util31.isString)(value2)) { - return value2; - } - return scale12.invert(scale12.scale(value2)); -}; -var Attribute = function() { - function Attribute2(cfg) { - this.names = []; - this.scales = []; - this.linear = false; - this.values = []; - this.callback = function() { - return []; - }; - this._parseCfg(cfg); - } - Attribute2.prototype.mapping = function() { - var _this = this; - var params = []; - for (var _i = 0; _i < arguments.length; _i++) { - params[_i] = arguments[_i]; - } - var values4 = params.map(function(param, idx) { - return _this._toOriginParam(param, _this.scales[idx]); - }); - return this.callback.apply(this, values4); - }; - Attribute2.prototype.getLinearValue = function(percent2) { - var steps = this.values.length - 1; - var step = Math.floor(steps * percent2); - var leftPercent = steps * percent2 - step; - var start = this.values[step]; - var end2 = step === steps ? start : this.values[step + 1]; - return start + (end2 - start) * leftPercent; - }; - Attribute2.prototype.getNames = function() { - var scales = this.scales; - var names = this.names; - var length5 = Math.min(scales.length, names.length); - var rst = []; - for (var i4 = 0; i4 < length5; i4 += 1) { - rst.push(names[i4]); - } - return rst; - }; - Attribute2.prototype.getFields = function() { - return this.scales.map(function(scale12) { - return scale12.field; - }); - }; - Attribute2.prototype.getScale = function(name) { - return this.scales[this.names.indexOf(name)]; - }; - Attribute2.prototype.defaultCallback = function() { - var _this = this; - var params = []; - for (var _i = 0; _i < arguments.length; _i++) { - params[_i] = arguments[_i]; - } - if (params.length === 0) { - return this.values; - } - return params.map(function(param, idx) { - var scale12 = _this.scales[idx]; - return scale12.type === "identity" ? scale12.values[0] : _this._getAttributeValue(scale12, param); - }); - }; - Attribute2.prototype._parseCfg = function(cfg) { - var _this = this; - var _a6 = cfg.type, type2 = _a6 === void 0 ? "base" : _a6, _b = cfg.names, names = _b === void 0 ? [] : _b, _c = cfg.scales, scales = _c === void 0 ? [] : _c, _d = cfg.values, values4 = _d === void 0 ? [] : _d, callback = cfg.callback; - this.type = type2; - this.scales = scales; - this.values = values4; - this.names = names; - this.callback = function() { - var params = []; - for (var _i = 0; _i < arguments.length; _i++) { - params[_i] = arguments[_i]; - } - if (callback) { - var ret = callback.apply(void 0, params); - if (!(0, import_util31.isNil)(ret)) { - return [ret]; - } - } - return _this.defaultCallback.apply(_this, params); - }; - }; - Attribute2.prototype._getAttributeValue = function(scale12, value2) { - if (scale12.isCategory && !this.linear) { - var idx = scale12.translate(value2); - return this.values[idx % this.values.length]; - } - var percent2 = scale12.scale(value2); - return this.getLinearValue(percent2); - }; - Attribute2.prototype._toOriginParam = function(param, scale12) { - return !scale12.isLinear ? (0, import_util31.isArray)(param) ? param.map(function(p4) { - return toScaleString(scale12, p4); - }) : toScaleString(scale12, param) : param; - }; - return Attribute2; -}(); -var base_default3 = Attribute; - -// node_modules/@antv/attr/node_modules/tslib/modules/index.js -var import_tslib14 = __toModule(require_tslib3()); -var { - __extends: __extends3, - __assign: __assign3, - __rest: __rest3, - __decorate: __decorate3, - __param: __param3, - __metadata: __metadata3, - __awaiter: __awaiter3, - __generator: __generator3, - __exportStar: __exportStar3, - __createBinding: __createBinding3, - __values: __values3, - __read: __read3, - __spread: __spread3, - __spreadArrays: __spreadArrays3, - __await: __await3, - __asyncGenerator: __asyncGenerator3, - __asyncDelegator: __asyncDelegator3, - __asyncValues: __asyncValues3, - __makeTemplateObject: __makeTemplateObject3, - __importStar: __importStar3, - __importDefault: __importDefault3, - __classPrivateFieldGet: __classPrivateFieldGet3, - __classPrivateFieldSet: __classPrivateFieldSet3 -} = import_tslib14.default; - -// node_modules/@antv/color-util/esm/index.js -var import_util32 = __toModule(require_lib()); -var RGB_REG = /rgba?\(([\s.,0-9]+)\)/; -var regexLG = /^l\s*\(\s*([\d.]+)\s*\)\s*(.*)/i; -var regexRG = /^r\s*\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*\)\s*(.*)/i; -var regexColorStop = /[\d.]+:(#[^\s]+|[^\)]+\))/gi; -var isGradientColor2 = function(val) { - return /^[r,R,L,l]{1}[\s]*\(/.test(val); -}; -var createTmp = function() { - var i4 = document.createElement("i"); - i4.title = "Web Colour Picker"; - i4.style.display = "none"; - document.body.appendChild(i4); - return i4; -}; -var getValue = function(start, end2, percent2, index2) { - return start[index2] + (end2[index2] - start[index2]) * percent2; -}; -function arr2rgb(arr) { - return "#" + toHex(arr[0]) + toHex(arr[1]) + toHex(arr[2]); -} -var rgb2arr = function(str8) { - return [ - parseInt(str8.substr(1, 2), 16), - parseInt(str8.substr(3, 2), 16), - parseInt(str8.substr(5, 2), 16) - ]; -}; -var toHex = function(value2) { - var x16Value = Math.round(value2).toString(16); - return x16Value.length === 1 ? "0" + x16Value : x16Value; -}; -var calColor = function(points, percent2) { - var fixedPercent = isNaN(Number(percent2)) || percent2 < 0 ? 0 : percent2 > 1 ? 1 : Number(percent2); - var steps = points.length - 1; - var step = Math.floor(steps * fixedPercent); - var left2 = steps * fixedPercent - step; - var start = points[step]; - var end2 = step === steps ? start : points[step + 1]; - return arr2rgb([ - getValue(start, end2, left2, 0), - getValue(start, end2, left2, 1), - getValue(start, end2, left2, 2) - ]); -}; -var iEl; -var toRGB = function(color4) { - if (color4[0] === "#" && color4.length === 7) { - return color4; - } - if (!iEl) { - iEl = createTmp(); - } - iEl.style.color = color4; - var rst = document.defaultView.getComputedStyle(iEl, "").getPropertyValue("color"); - var matches = RGB_REG.exec(rst); - var cArray = matches[1].split(/\s*,\s*/).map(function(s4) { - return Number(s4); - }); - rst = arr2rgb(cArray); - return rst; -}; -var gradient = function(colors) { - var colorArray = (0, import_util32.isString)(colors) ? colors.split("-") : colors; - var points = (0, import_util32.map)(colorArray, function(color4) { - return rgb2arr(color4.indexOf("#") === -1 ? toRGB(color4) : color4); - }); - return function(percent2) { - return calColor(points, percent2); - }; -}; -var toCSSGradient = function(gradientColor) { - if (isGradientColor2(gradientColor)) { - var cssColor_1; - var steps = void 0; - if (gradientColor[0] === "l") { - var arr = regexLG.exec(gradientColor); - var angle3 = +arr[1] + 90; - steps = arr[2]; - cssColor_1 = "linear-gradient(" + angle3 + "deg, "; - } else if (gradientColor[0] === "r") { - cssColor_1 = "radial-gradient("; - var arr = regexRG.exec(gradientColor); - steps = arr[4]; - } - var colorStops_1 = steps.match(regexColorStop); - (0, import_util32.each)(colorStops_1, function(item, index2) { - var itemArr = item.split(":"); - cssColor_1 += itemArr[1] + " " + itemArr[0] * 100 + "%"; - if (index2 !== colorStops_1.length - 1) { - cssColor_1 += ", "; - } - }); - cssColor_1 += ")"; - return cssColor_1; - } - return gradientColor; -}; -var esm_default2 = { - rgb2arr, - gradient, - toRGB: (0, import_util32.memoize)(toRGB), - toCSSGradient -}; - -// node_modules/@antv/attr/esm/attributes/color.js -var import_util33 = __toModule(require_lib()); -var Color2 = function(_super) { - __extends3(Color3, _super); - function Color3(cfg) { - var _this = _super.call(this, cfg) || this; - _this.type = "color"; - _this.names = ["color"]; - if ((0, import_util33.isString)(_this.values)) { - _this.linear = true; - } - _this.gradient = esm_default2.gradient(_this.values); - return _this; - } - Color3.prototype.getLinearValue = function(percent2) { - return this.gradient(percent2); - }; - return Color3; -}(base_default3); -var color_default = Color2; - -// node_modules/@antv/attr/esm/attributes/opacity.js -var Opacity = function(_super) { - __extends3(Opacity2, _super); - function Opacity2(cfg) { - var _this = _super.call(this, cfg) || this; - _this.type = "opacity"; - _this.names = ["opacity"]; - return _this; - } - return Opacity2; -}(base_default3); -var opacity_default = Opacity; - -// node_modules/@antv/attr/esm/attributes/position.js -var import_util34 = __toModule(require_lib()); -var Position = function(_super) { - __extends3(Position2, _super); - function Position2(cfg) { - var _this = _super.call(this, cfg) || this; - _this.names = ["x", "y"]; - _this.type = "position"; - return _this; - } - Position2.prototype.mapping = function(x6, y5) { - var _a6 = this.scales, scaleX = _a6[0], scaleY = _a6[1]; - if ((0, import_util34.isNil)(x6) || (0, import_util34.isNil)(y5)) { - return []; - } - return [ - (0, import_util34.isArray)(x6) ? x6.map(function(xi) { - return scaleX.scale(xi); - }) : scaleX.scale(x6), - (0, import_util34.isArray)(y5) ? y5.map(function(yi) { - return scaleY.scale(yi); - }) : scaleY.scale(y5) - ]; - }; - return Position2; -}(base_default3); -var position_default = Position; - -// node_modules/@antv/attr/esm/attributes/shape.js -var Shape = function(_super) { - __extends3(Shape3, _super); - function Shape3(cfg) { - var _this = _super.call(this, cfg) || this; - _this.type = "shape"; - _this.names = ["shape"]; - return _this; - } - Shape3.prototype.getLinearValue = function(percent2) { - var idx = Math.round((this.values.length - 1) * percent2); - return this.values[idx]; - }; - return Shape3; -}(base_default3); -var shape_default2 = Shape; - -// node_modules/@antv/attr/esm/attributes/size.js -var Size = function(_super) { - __extends3(Size2, _super); - function Size2(cfg) { - var _this = _super.call(this, cfg) || this; - _this.type = "size"; - _this.names = ["size"]; - return _this; - } - return Size2; -}(base_default3); -var size_default = Size; - -// node_modules/@antv/scale/esm/base.js -var import_util35 = __toModule(require_lib()); - -// node_modules/@antv/scale/esm/tick-method/register.js -var methodCache = {}; -function getTickMethod(key) { - return methodCache[key]; -} -function registerTickMethod(key, method) { - methodCache[key] = method; -} - -// node_modules/@antv/scale/esm/base.js -var Scale = function() { - function Scale2(cfg) { - this.type = "base"; - this.isCategory = false; - this.isLinear = false; - this.isContinuous = false; - this.isIdentity = false; - this.values = []; - this.range = [0, 1]; - this.ticks = []; - this.__cfg__ = cfg; - this.initCfg(); - this.init(); - } - Scale2.prototype.translate = function(v3) { - return v3; - }; - Scale2.prototype.change = function(cfg) { - (0, import_util35.assign)(this.__cfg__, cfg); - this.init(); - }; - Scale2.prototype.clone = function() { - return this.constructor(this.__cfg__); - }; - Scale2.prototype.getTicks = function() { - var _this = this; - return (0, import_util35.map)(this.ticks, function(tick, idx) { - if ((0, import_util35.isObject)(tick)) { - return tick; - } - return { - text: _this.getText(tick, idx), - tickValue: tick, - value: _this.scale(tick) - }; - }); - }; - Scale2.prototype.getText = function(value2, key) { - var formatter = this.formatter; - var res = formatter ? formatter(value2, key) : value2; - if ((0, import_util35.isNil)(res) || !(0, import_util35.isFunction)(res.toString)) { - return ""; - } - return res.toString(); - }; - Scale2.prototype.getConfig = function(key) { - return this.__cfg__[key]; - }; - Scale2.prototype.init = function() { - (0, import_util35.assign)(this, this.__cfg__); - this.setDomain(); - if ((0, import_util35.isEmpty)(this.getConfig("ticks"))) { - this.ticks = this.calculateTicks(); - } - }; - Scale2.prototype.initCfg = function() { - }; - Scale2.prototype.setDomain = function() { - }; - Scale2.prototype.calculateTicks = function() { - var tickMethod = this.tickMethod; - var ticks = []; - if ((0, import_util35.isString)(tickMethod)) { - var method = getTickMethod(tickMethod); - if (!method) { - throw new Error("There is no method to to calculate ticks!"); - } - ticks = method(this); - } else if ((0, import_util35.isFunction)(tickMethod)) { - ticks = tickMethod(this); - } - return ticks; - }; - Scale2.prototype.rangeMin = function() { - return this.range[0]; - }; - Scale2.prototype.rangeMax = function() { - return this.range[1]; - }; - Scale2.prototype.calcPercent = function(value2, min13, max15) { - if ((0, import_util35.isNumber)(value2)) { - return (value2 - min13) / (max15 - min13); - } - return NaN; - }; - Scale2.prototype.calcValue = function(percent2, min13, max15) { - return min13 + percent2 * (max15 - min13); - }; - return Scale2; -}(); -var base_default4 = Scale; - -// node_modules/@antv/scale/esm/category/base.js -var import_util36 = __toModule(require_lib()); -var Category = function(_super) { - __extends(Category3, _super); - function Category3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "cat"; - _this.isCategory = true; - return _this; - } - Category3.prototype.buildIndexMap = function() { - if (!this.translateIndexMap) { - this.translateIndexMap = new Map(); - for (var i4 = 0; i4 < this.values.length; i4++) { - this.translateIndexMap.set(this.values[i4], i4); - } - } - }; - Category3.prototype.translate = function(value2) { - this.buildIndexMap(); - var idx = this.translateIndexMap.get(value2); - if (idx === void 0) { - idx = (0, import_util36.isNumber)(value2) ? value2 : NaN; - } - return idx; - }; - Category3.prototype.scale = function(value2) { - var order2 = this.translate(value2); - var percent2 = this.calcPercent(order2, this.min, this.max); - return this.calcValue(percent2, this.rangeMin(), this.rangeMax()); - }; - Category3.prototype.invert = function(scaledValue) { - var domainRange = this.max - this.min; - var percent2 = this.calcPercent(scaledValue, this.rangeMin(), this.rangeMax()); - var idx = Math.round(domainRange * percent2) + this.min; - if (idx < this.min || idx > this.max) { - return NaN; - } - return this.values[idx]; - }; - Category3.prototype.getText = function(value2) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - var v3 = value2; - if ((0, import_util36.isNumber)(value2) && !this.values.includes(value2)) { - v3 = this.values[v3]; - } - return _super.prototype.getText.apply(this, __spreadArray([v3], args, false)); - }; - Category3.prototype.initCfg = function() { - this.tickMethod = "cat"; - }; - Category3.prototype.setDomain = function() { - if ((0, import_util36.isNil)(this.getConfig("min"))) { - this.min = 0; - } - if ((0, import_util36.isNil)(this.getConfig("max"))) { - var size14 = this.values.length; - this.max = size14 > 1 ? size14 - 1 : size14; - } - if (this.translateIndexMap) { - this.translateIndexMap = void 0; - } - }; - return Category3; -}(base_default4); -var base_default5 = Category; - -// node_modules/@antv/scale/esm/category/time.js -var import_util39 = __toModule(require_lib()); - -// node_modules/@antv/scale/esm/util/time.js -var import_util38 = __toModule(require_lib()); - -// node_modules/fecha/lib/fecha.js -var fecha_exports = {}; -__export(fecha_exports, { - assign: () => assign2, - default: () => fecha_default, - defaultI18n: () => defaultI18n, - format: () => format, - parse: () => parse, - setGlobalDateI18n: () => setGlobalDateI18n, - setGlobalDateMasks: () => setGlobalDateMasks -}); -var token = /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|Z|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g; -var twoDigitsOptional = "[1-9]\\d?"; -var twoDigits = "\\d\\d"; -var threeDigits = "\\d{3}"; -var fourDigits = "\\d{4}"; -var word = "[^\\s]+"; -var literal = /\[([^]*?)\]/gm; -function shorten(arr, sLen) { - var newArr = []; - for (var i4 = 0, len5 = arr.length; i4 < len5; i4++) { - newArr.push(arr[i4].substr(0, sLen)); - } - return newArr; -} -var monthUpdate = function(arrName) { - return function(v3, i18n) { - var lowerCaseArr = i18n[arrName].map(function(v4) { - return v4.toLowerCase(); - }); - var index2 = lowerCaseArr.indexOf(v3.toLowerCase()); - if (index2 > -1) { - return index2; - } - return null; - }; -}; -function assign2(origObj) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - for (var _a6 = 0, args_1 = args; _a6 < args_1.length; _a6++) { - var obj = args_1[_a6]; - for (var key in obj) { - origObj[key] = obj[key]; - } - } - return origObj; -} -var dayNames = [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday" -]; -var monthNames = [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" -]; -var monthNamesShort = shorten(monthNames, 3); -var dayNamesShort = shorten(dayNames, 3); -var defaultI18n = { - dayNamesShort, - dayNames, - monthNamesShort, - monthNames, - amPm: ["am", "pm"], - DoFn: function(dayOfMonth) { - return dayOfMonth + ["th", "st", "nd", "rd"][dayOfMonth % 10 > 3 ? 0 : (dayOfMonth - dayOfMonth % 10 !== 10 ? 1 : 0) * dayOfMonth % 10]; - } -}; -var globalI18n = assign2({}, defaultI18n); -var setGlobalDateI18n = function(i18n) { - return globalI18n = assign2(globalI18n, i18n); -}; -var regexEscape = function(str8) { - return str8.replace(/[|\\{()[^$+*?.-]/g, "\\$&"); -}; -var pad = function(val, len5) { - if (len5 === void 0) { - len5 = 2; - } - val = String(val); - while (val.length < len5) { - val = "0" + val; - } - return val; -}; -var formatFlags = { - D: function(dateObj) { - return String(dateObj.getDate()); - }, - DD: function(dateObj) { - return pad(dateObj.getDate()); - }, - Do: function(dateObj, i18n) { - return i18n.DoFn(dateObj.getDate()); - }, - d: function(dateObj) { - return String(dateObj.getDay()); - }, - dd: function(dateObj) { - return pad(dateObj.getDay()); - }, - ddd: function(dateObj, i18n) { - return i18n.dayNamesShort[dateObj.getDay()]; - }, - dddd: function(dateObj, i18n) { - return i18n.dayNames[dateObj.getDay()]; - }, - M: function(dateObj) { - return String(dateObj.getMonth() + 1); - }, - MM: function(dateObj) { - return pad(dateObj.getMonth() + 1); - }, - MMM: function(dateObj, i18n) { - return i18n.monthNamesShort[dateObj.getMonth()]; - }, - MMMM: function(dateObj, i18n) { - return i18n.monthNames[dateObj.getMonth()]; - }, - YY: function(dateObj) { - return pad(String(dateObj.getFullYear()), 4).substr(2); - }, - YYYY: function(dateObj) { - return pad(dateObj.getFullYear(), 4); - }, - h: function(dateObj) { - return String(dateObj.getHours() % 12 || 12); - }, - hh: function(dateObj) { - return pad(dateObj.getHours() % 12 || 12); - }, - H: function(dateObj) { - return String(dateObj.getHours()); - }, - HH: function(dateObj) { - return pad(dateObj.getHours()); - }, - m: function(dateObj) { - return String(dateObj.getMinutes()); - }, - mm: function(dateObj) { - return pad(dateObj.getMinutes()); - }, - s: function(dateObj) { - return String(dateObj.getSeconds()); - }, - ss: function(dateObj) { - return pad(dateObj.getSeconds()); - }, - S: function(dateObj) { - return String(Math.round(dateObj.getMilliseconds() / 100)); - }, - SS: function(dateObj) { - return pad(Math.round(dateObj.getMilliseconds() / 10), 2); - }, - SSS: function(dateObj) { - return pad(dateObj.getMilliseconds(), 3); - }, - a: function(dateObj, i18n) { - return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1]; - }, - A: function(dateObj, i18n) { - return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase(); - }, - ZZ: function(dateObj) { - var offset = dateObj.getTimezoneOffset(); - return (offset > 0 ? "-" : "+") + pad(Math.floor(Math.abs(offset) / 60) * 100 + Math.abs(offset) % 60, 4); - }, - Z: function(dateObj) { - var offset = dateObj.getTimezoneOffset(); - return (offset > 0 ? "-" : "+") + pad(Math.floor(Math.abs(offset) / 60), 2) + ":" + pad(Math.abs(offset) % 60, 2); - } -}; -var monthParse = function(v3) { - return +v3 - 1; -}; -var emptyDigits = [null, twoDigitsOptional]; -var emptyWord = [null, word]; -var amPm = [ - "isPm", - word, - function(v3, i18n) { - var val = v3.toLowerCase(); - if (val === i18n.amPm[0]) { - return 0; - } else if (val === i18n.amPm[1]) { - return 1; - } - return null; - } -]; -var timezoneOffset = [ - "timezoneOffset", - "[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z?", - function(v3) { - var parts = (v3 + "").match(/([+-]|\d\d)/gi); - if (parts) { - var minutes = +parts[1] * 60 + parseInt(parts[2], 10); - return parts[0] === "+" ? minutes : -minutes; - } - return 0; - } -]; -var parseFlags = { - D: ["day", twoDigitsOptional], - DD: ["day", twoDigits], - Do: ["day", twoDigitsOptional + word, function(v3) { - return parseInt(v3, 10); - }], - M: ["month", twoDigitsOptional, monthParse], - MM: ["month", twoDigits, monthParse], - YY: [ - "year", - twoDigits, - function(v3) { - var now2 = new Date(); - var cent = +("" + now2.getFullYear()).substr(0, 2); - return +("" + (+v3 > 68 ? cent - 1 : cent) + v3); - } - ], - h: ["hour", twoDigitsOptional, void 0, "isPm"], - hh: ["hour", twoDigits, void 0, "isPm"], - H: ["hour", twoDigitsOptional], - HH: ["hour", twoDigits], - m: ["minute", twoDigitsOptional], - mm: ["minute", twoDigits], - s: ["second", twoDigitsOptional], - ss: ["second", twoDigits], - YYYY: ["year", fourDigits], - S: ["millisecond", "\\d", function(v3) { - return +v3 * 100; - }], - SS: ["millisecond", twoDigits, function(v3) { - return +v3 * 10; - }], - SSS: ["millisecond", threeDigits], - d: emptyDigits, - dd: emptyDigits, - ddd: emptyWord, - dddd: emptyWord, - MMM: ["month", word, monthUpdate("monthNamesShort")], - MMMM: ["month", word, monthUpdate("monthNames")], - a: amPm, - A: amPm, - ZZ: timezoneOffset, - Z: timezoneOffset -}; -var globalMasks = { - default: "ddd MMM DD YYYY HH:mm:ss", - shortDate: "M/D/YY", - mediumDate: "MMM D, YYYY", - longDate: "MMMM D, YYYY", - fullDate: "dddd, MMMM D, YYYY", - isoDate: "YYYY-MM-DD", - isoDateTime: "YYYY-MM-DDTHH:mm:ssZ", - shortTime: "HH:mm", - mediumTime: "HH:mm:ss", - longTime: "HH:mm:ss.SSS" -}; -var setGlobalDateMasks = function(masks) { - return assign2(globalMasks, masks); -}; -var format = function(dateObj, mask, i18n) { - if (mask === void 0) { - mask = globalMasks["default"]; - } - if (i18n === void 0) { - i18n = {}; - } - if (typeof dateObj === "number") { - dateObj = new Date(dateObj); - } - if (Object.prototype.toString.call(dateObj) !== "[object Date]" || isNaN(dateObj.getTime())) { - throw new Error("Invalid Date pass to format"); - } - mask = globalMasks[mask] || mask; - var literals = []; - mask = mask.replace(literal, function($0, $1) { - literals.push($1); - return "@@@"; - }); - var combinedI18nSettings = assign2(assign2({}, globalI18n), i18n); - mask = mask.replace(token, function($0) { - return formatFlags[$0](dateObj, combinedI18nSettings); - }); - return mask.replace(/@@@/g, function() { - return literals.shift(); - }); -}; -function parse(dateStr, format2, i18n) { - if (i18n === void 0) { - i18n = {}; - } - if (typeof format2 !== "string") { - throw new Error("Invalid format in fecha parse"); - } - format2 = globalMasks[format2] || format2; - if (dateStr.length > 1e3) { - return null; - } - var today = new Date(); - var dateInfo = { - year: today.getFullYear(), - month: 0, - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0, - isPm: null, - timezoneOffset: null - }; - var parseInfo = []; - var literals = []; - var newFormat = format2.replace(literal, function($0, $1) { - literals.push(regexEscape($1)); - return "@@@"; - }); - var specifiedFields = {}; - var requiredFields = {}; - newFormat = regexEscape(newFormat).replace(token, function($0) { - var info = parseFlags[$0]; - var field7 = info[0], regex = info[1], requiredField = info[3]; - if (specifiedFields[field7]) { - throw new Error("Invalid format. " + field7 + " specified twice in format"); - } - specifiedFields[field7] = true; - if (requiredField) { - requiredFields[requiredField] = true; - } - parseInfo.push(info); - return "(" + regex + ")"; - }); - Object.keys(requiredFields).forEach(function(field7) { - if (!specifiedFields[field7]) { - throw new Error("Invalid format. " + field7 + " is required in specified format"); - } - }); - newFormat = newFormat.replace(/@@@/g, function() { - return literals.shift(); - }); - var matches = dateStr.match(new RegExp(newFormat, "i")); - if (!matches) { - return null; - } - var combinedI18nSettings = assign2(assign2({}, globalI18n), i18n); - for (var i4 = 1; i4 < matches.length; i4++) { - var _a6 = parseInfo[i4 - 1], field6 = _a6[0], parser = _a6[2]; - var value2 = parser ? parser(matches[i4], combinedI18nSettings) : +matches[i4]; - if (value2 == null) { - return null; - } - dateInfo[field6] = value2; - } - if (dateInfo.isPm === 1 && dateInfo.hour != null && +dateInfo.hour !== 12) { - dateInfo.hour = +dateInfo.hour + 12; - } else if (dateInfo.isPm === 0 && +dateInfo.hour === 12) { - dateInfo.hour = 0; - } - var dateWithoutTZ = new Date(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute, dateInfo.second, dateInfo.millisecond); - var validateFields = [ - ["month", "getMonth"], - ["day", "getDate"], - ["hour", "getHours"], - ["minute", "getMinutes"], - ["second", "getSeconds"] - ]; - for (var i4 = 0, len5 = validateFields.length; i4 < len5; i4++) { - if (specifiedFields[validateFields[i4][0]] && dateInfo[validateFields[i4][0]] !== dateWithoutTZ[validateFields[i4][1]]()) { - return null; - } - } - if (dateInfo.timezoneOffset == null) { - return dateWithoutTZ; - } - return new Date(Date.UTC(dateInfo.year, dateInfo.month, dateInfo.day, dateInfo.hour, dateInfo.minute - dateInfo.timezoneOffset, dateInfo.second, dateInfo.millisecond)); -} -var fecha = { - format, - parse, - defaultI18n, - setGlobalDateI18n, - setGlobalDateMasks -}; -var fecha_default = fecha; - -// node_modules/@antv/scale/esm/util/bisector.js -var import_util37 = __toModule(require_lib()); -function bisector_default(getter) { - return function(a4, x6, _lo, _hi) { - var lo = (0, import_util37.isNil)(_lo) ? 0 : _lo; - var hi = (0, import_util37.isNil)(_hi) ? a4.length : _hi; - while (lo < hi) { - var mid2 = lo + hi >>> 1; - if (getter(a4[mid2]) > x6) { - hi = mid2; - } else { - lo = mid2 + 1; - } - } - return lo; - }; -} - -// node_modules/@antv/scale/esm/util/time.js -var FORMAT_METHOD = "format"; -function timeFormat(time2, mask) { - var method = fecha_exports[FORMAT_METHOD] || fecha_default[FORMAT_METHOD]; - return method(time2, mask); -} -function toTimeStamp(value2) { - if ((0, import_util38.isString)(value2)) { - if (value2.indexOf("T") > 0) { - value2 = new Date(value2).getTime(); - } else { - value2 = new Date(value2.replace(/-/gi, "/")).getTime(); - } - } - if ((0, import_util38.isDate)(value2)) { - value2 = value2.getTime(); - } - return value2; -} -var SECOND = 1e3; -var MINUTE = 60 * SECOND; -var HOUR = 60 * MINUTE; -var DAY = 24 * HOUR; -var MONTH = DAY * 31; -var YEAR = DAY * 365; -var intervals = [ - ["HH:mm:ss", SECOND], - ["HH:mm:ss", SECOND * 10], - ["HH:mm:ss", SECOND * 30], - ["HH:mm", MINUTE], - ["HH:mm", MINUTE * 10], - ["HH:mm", MINUTE * 30], - ["HH", HOUR], - ["HH", HOUR * 6], - ["HH", HOUR * 12], - ["YYYY-MM-DD", DAY], - ["YYYY-MM-DD", DAY * 4], - ["YYYY-WW", DAY * 7], - ["YYYY-MM", MONTH], - ["YYYY-MM", MONTH * 4], - ["YYYY-MM", MONTH * 6], - ["YYYY", DAY * 380] -]; -function getTickInterval(min13, max15, tickCount) { - var target = (max15 - min13) / tickCount; - var idx = bisector_default(function(o3) { - return o3[1]; - })(intervals, target) - 1; - var interval3 = intervals[idx]; - if (idx < 0) { - interval3 = intervals[0]; - } else if (idx >= intervals.length) { - interval3 = (0, import_util38.last)(intervals); - } - return interval3; -} - -// node_modules/@antv/scale/esm/category/time.js -var TimeCat = function(_super) { - __extends(TimeCat2, _super); - function TimeCat2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "timeCat"; - return _this; - } - TimeCat2.prototype.translate = function(value2) { - value2 = toTimeStamp(value2); - var index2 = this.values.indexOf(value2); - if (index2 === -1) { - if ((0, import_util39.isNumber)(value2) && value2 < this.values.length) { - index2 = value2; - } else { - index2 = NaN; - } - } - return index2; - }; - TimeCat2.prototype.getText = function(value2, tickIndex) { - var index2 = this.translate(value2); - if (index2 > -1) { - var result = this.values[index2]; - var formatter = this.formatter; - result = formatter ? formatter(result, tickIndex) : timeFormat(result, this.mask); - return result; - } - return value2; - }; - TimeCat2.prototype.initCfg = function() { - this.tickMethod = "time-cat"; - this.mask = "YYYY-MM-DD"; - this.tickCount = 7; - }; - TimeCat2.prototype.setDomain = function() { - var values4 = this.values; - (0, import_util39.each)(values4, function(v3, i4) { - values4[i4] = toTimeStamp(v3); - }); - values4.sort(function(v1, v22) { - return v1 - v22; - }); - _super.prototype.setDomain.call(this); - }; - return TimeCat2; -}(base_default5); -var time_default = TimeCat; - -// node_modules/@antv/scale/esm/continuous/base.js -var import_util40 = __toModule(require_lib()); -var Continuous = function(_super) { - __extends(Continuous2, _super); - function Continuous2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.isContinuous = true; - return _this; - } - Continuous2.prototype.scale = function(value2) { - if ((0, import_util40.isNil)(value2)) { - return NaN; - } - var rangeMin = this.rangeMin(); - var rangeMax = this.rangeMax(); - var max15 = this.max; - var min13 = this.min; - if (max15 === min13) { - return rangeMin; - } - var percent2 = this.getScalePercent(value2); - return rangeMin + percent2 * (rangeMax - rangeMin); - }; - Continuous2.prototype.init = function() { - _super.prototype.init.call(this); - var ticks = this.ticks; - var firstTick = (0, import_util40.head)(ticks); - var lastTick = (0, import_util40.last)(ticks); - if (firstTick < this.min) { - this.min = firstTick; - } - if (lastTick > this.max) { - this.max = lastTick; - } - if (!(0, import_util40.isNil)(this.minLimit)) { - this.min = firstTick; - } - if (!(0, import_util40.isNil)(this.maxLimit)) { - this.max = lastTick; - } - }; - Continuous2.prototype.setDomain = function() { - var _a6 = (0, import_util40.getRange)(this.values), min13 = _a6.min, max15 = _a6.max; - if ((0, import_util40.isNil)(this.min)) { - this.min = min13; - } - if ((0, import_util40.isNil)(this.max)) { - this.max = max15; - } - if (this.min > this.max) { - this.min = min13; - this.max = max15; - } - }; - Continuous2.prototype.calculateTicks = function() { - var _this = this; - var ticks = _super.prototype.calculateTicks.call(this); - if (!this.nice) { - ticks = (0, import_util40.filter)(ticks, function(tick) { - return tick >= _this.min && tick <= _this.max; - }); - } - return ticks; - }; - Continuous2.prototype.getScalePercent = function(value2) { - var max15 = this.max; - var min13 = this.min; - return (value2 - min13) / (max15 - min13); - }; - Continuous2.prototype.getInvertPercent = function(value2) { - return (value2 - this.rangeMin()) / (this.rangeMax() - this.rangeMin()); - }; - return Continuous2; -}(base_default4); -var base_default6 = Continuous; - -// node_modules/@antv/scale/esm/continuous/linear.js -var Linear = function(_super) { - __extends(Linear2, _super); - function Linear2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "linear"; - _this.isLinear = true; - return _this; - } - Linear2.prototype.invert = function(value2) { - var percent2 = this.getInvertPercent(value2); - return this.min + percent2 * (this.max - this.min); - }; - Linear2.prototype.initCfg = function() { - this.tickMethod = "wilkinson-extended"; - this.nice = false; - }; - return Linear2; -}(base_default6); -var linear_default = Linear; - -// node_modules/@antv/scale/esm/util/math.js -var import_util41 = __toModule(require_lib()); -function calBase(a4, b10) { - var e4 = Math.E; - var value2; - if (b10 >= 0) { - value2 = Math.pow(e4, Math.log(b10) / a4); - } else { - value2 = Math.pow(e4, Math.log(-b10) / a4) * -1; - } - return value2; -} -function log(a4, b10) { - if (a4 === 1) { - return 1; - } - return Math.log(b10) / Math.log(a4); -} -function getLogPositiveMin(values4, base, max15) { - if ((0, import_util41.isNil)(max15)) { - max15 = Math.max.apply(null, values4); - } - var positiveMin = max15; - (0, import_util41.each)(values4, function(value2) { - if (value2 > 0 && value2 < positiveMin) { - positiveMin = value2; - } - }); - if (positiveMin === max15) { - positiveMin = max15 / base; - } - if (positiveMin > 1) { - positiveMin = 1; - } - return positiveMin; -} - -// node_modules/@antv/scale/esm/continuous/log.js -var Log = function(_super) { - __extends(Log3, _super); - function Log3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "log"; - return _this; - } - Log3.prototype.invert = function(value2) { - var base = this.base; - var max15 = log(base, this.max); - var rangeMin = this.rangeMin(); - var range = this.rangeMax() - rangeMin; - var min13; - var positiveMin = this.positiveMin; - if (positiveMin) { - if (value2 === 0) { - return 0; - } - min13 = log(base, positiveMin / base); - var appendPercent = 1 / (max15 - min13) * range; - if (value2 < appendPercent) { - return value2 / appendPercent * positiveMin; - } - } else { - min13 = log(base, this.min); - } - var percent2 = (value2 - rangeMin) / range; - var tmp = percent2 * (max15 - min13) + min13; - return Math.pow(base, tmp); - }; - Log3.prototype.initCfg = function() { - this.tickMethod = "log"; - this.base = 10; - this.tickCount = 6; - this.nice = true; - }; - Log3.prototype.setDomain = function() { - _super.prototype.setDomain.call(this); - var min13 = this.min; - if (min13 < 0) { - throw new Error("When you use log scale, the minimum value must be greater than zero!"); - } - if (min13 === 0) { - this.positiveMin = getLogPositiveMin(this.values, this.base, this.max); - } - }; - Log3.prototype.getScalePercent = function(value2) { - var max15 = this.max; - var min13 = this.min; - if (max15 === min13) { - return 0; - } - if (value2 <= 0) { - return 0; - } - var base = this.base; - var positiveMin = this.positiveMin; - if (positiveMin) { - min13 = positiveMin * 1 / base; - } - var percent2; - if (value2 < positiveMin) { - percent2 = value2 / positiveMin / (log(base, max15) - log(base, min13)); - } else { - percent2 = (log(base, value2) - log(base, min13)) / (log(base, max15) - log(base, min13)); - } - return percent2; - }; - return Log3; -}(base_default6); -var log_default = Log; - -// node_modules/@antv/scale/esm/continuous/pow.js -var Pow = function(_super) { - __extends(Pow2, _super); - function Pow2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "pow"; - return _this; - } - Pow2.prototype.invert = function(value2) { - var percent2 = this.getInvertPercent(value2); - var exponent2 = this.exponent; - var max15 = calBase(exponent2, this.max); - var min13 = calBase(exponent2, this.min); - var tmp = percent2 * (max15 - min13) + min13; - var factor = tmp >= 0 ? 1 : -1; - return Math.pow(tmp, exponent2) * factor; - }; - Pow2.prototype.initCfg = function() { - this.tickMethod = "pow"; - this.exponent = 2; - this.tickCount = 5; - this.nice = true; - }; - Pow2.prototype.getScalePercent = function(value2) { - var max15 = this.max; - var min13 = this.min; - if (max15 === min13) { - return 0; - } - var exponent2 = this.exponent; - var percent2 = (calBase(exponent2, value2) - calBase(exponent2, min13)) / (calBase(exponent2, max15) - calBase(exponent2, min13)); - return percent2; - }; - return Pow2; -}(base_default6); -var pow_default = Pow; - -// node_modules/@antv/scale/esm/continuous/time.js -var import_util42 = __toModule(require_lib()); -var Time = function(_super) { - __extends(Time2, _super); - function Time2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "time"; - return _this; - } - Time2.prototype.getText = function(value2, index2) { - var numberValue = this.translate(value2); - var formatter = this.formatter; - return formatter ? formatter(numberValue, index2) : timeFormat(numberValue, this.mask); - }; - Time2.prototype.scale = function(value2) { - var v3 = value2; - if ((0, import_util42.isString)(v3) || (0, import_util42.isDate)(v3)) { - v3 = this.translate(v3); - } - return _super.prototype.scale.call(this, v3); - }; - Time2.prototype.translate = function(v3) { - return toTimeStamp(v3); - }; - Time2.prototype.initCfg = function() { - this.tickMethod = "time-pretty"; - this.mask = "YYYY-MM-DD"; - this.tickCount = 7; - this.nice = false; - }; - Time2.prototype.setDomain = function() { - var values4 = this.values; - var minConfig = this.getConfig("min"); - var maxConfig = this.getConfig("max"); - if (!(0, import_util42.isNil)(minConfig) || !(0, import_util42.isNumber)(minConfig)) { - this.min = this.translate(this.min); - } - if (!(0, import_util42.isNil)(maxConfig) || !(0, import_util42.isNumber)(maxConfig)) { - this.max = this.translate(this.max); - } - if (values4 && values4.length) { - var timeStamps_1 = []; - var min_1 = Infinity; - var secondMin_1 = min_1; - var max_1 = 0; - (0, import_util42.each)(values4, function(v3) { - var timeStamp = toTimeStamp(v3); - if (isNaN(timeStamp)) { - throw new TypeError("Invalid Time: " + v3 + " in time scale!"); - } - if (min_1 > timeStamp) { - secondMin_1 = min_1; - min_1 = timeStamp; - } else if (secondMin_1 > timeStamp) { - secondMin_1 = timeStamp; - } - if (max_1 < timeStamp) { - max_1 = timeStamp; - } - timeStamps_1.push(timeStamp); - }); - if (values4.length > 1) { - this.minTickInterval = secondMin_1 - min_1; - } - if ((0, import_util42.isNil)(minConfig)) { - this.min = min_1; - } - if ((0, import_util42.isNil)(maxConfig)) { - this.max = max_1; - } - } - }; - return Time2; -}(linear_default); -var time_default2 = Time; - -// node_modules/@antv/scale/esm/continuous/quantize.js -var import_util43 = __toModule(require_lib()); -var Quantize = function(_super) { - __extends(Quantize2, _super); - function Quantize2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "quantize"; - return _this; - } - Quantize2.prototype.invert = function(value2) { - var ticks = this.ticks; - var length5 = ticks.length; - var percent2 = this.getInvertPercent(value2); - var minIndex = Math.floor(percent2 * (length5 - 1)); - if (minIndex >= length5 - 1) { - return (0, import_util43.last)(ticks); - } - if (minIndex < 0) { - return (0, import_util43.head)(ticks); - } - var minTick = ticks[minIndex]; - var nextTick = ticks[minIndex + 1]; - var minIndexPercent = minIndex / (length5 - 1); - var maxIndexPercent = (minIndex + 1) / (length5 - 1); - return minTick + (percent2 - minIndexPercent) / (maxIndexPercent - minIndexPercent) * (nextTick - minTick); - }; - Quantize2.prototype.initCfg = function() { - this.tickMethod = "r-pretty"; - this.tickCount = 5; - this.nice = true; - }; - Quantize2.prototype.calculateTicks = function() { - var ticks = _super.prototype.calculateTicks.call(this); - if (!this.nice) { - if ((0, import_util43.last)(ticks) !== this.max) { - ticks.push(this.max); - } - if ((0, import_util43.head)(ticks) !== this.min) { - ticks.unshift(this.min); - } - } - return ticks; - }; - Quantize2.prototype.getScalePercent = function(value2) { - var ticks = this.ticks; - if (value2 < (0, import_util43.head)(ticks)) { - return 0; - } - if (value2 > (0, import_util43.last)(ticks)) { - return 1; - } - var minIndex = 0; - (0, import_util43.each)(ticks, function(tick, index2) { - if (value2 >= tick) { - minIndex = index2; - } else { - return false; - } - }); - return minIndex / (ticks.length - 1); - }; - return Quantize2; -}(base_default6); -var quantize_default = Quantize; - -// node_modules/@antv/scale/esm/continuous/quantile.js -var Quantile = function(_super) { - __extends(Quantile2, _super); - function Quantile2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "quantile"; - return _this; - } - Quantile2.prototype.initCfg = function() { - this.tickMethod = "quantile"; - this.tickCount = 5; - this.nice = true; - }; - return Quantile2; -}(quantize_default); -var quantile_default = Quantile; - -// node_modules/@antv/scale/esm/factory.js -var map5 = {}; -function getClass(key) { - return map5[key]; -} -function registerClass(key, cls) { - if (getClass(key)) { - throw new Error("type '" + key + "' existed."); - } - map5[key] = cls; -} - -// node_modules/@antv/scale/esm/identity/index.js -var import_util44 = __toModule(require_lib()); -var Identity = function(_super) { - __extends(Identity2, _super); - function Identity2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "identity"; - _this.isIdentity = true; - return _this; - } - Identity2.prototype.calculateTicks = function() { - return this.values; - }; - Identity2.prototype.scale = function(value2) { - if (this.values[0] !== value2 && (0, import_util44.isNumber)(value2)) { - return value2; - } - return this.range[0]; - }; - Identity2.prototype.invert = function(value2) { - var range = this.range; - if (value2 < range[0] || value2 > range[1]) { - return NaN; - } - return this.values[0]; - }; - return Identity2; -}(base_default4); -var identity_default = Identity; - -// node_modules/@antv/scale/esm/tick-method/cat.js -var import_util46 = __toModule(require_lib()); - -// node_modules/@antv/scale/esm/util/extended.js -var import_util45 = __toModule(require_lib()); - -// node_modules/@antv/scale/esm/util/pretty-number.js -function prettyNumber(n3) { - return Math.abs(n3) < 1e-15 ? n3 : parseFloat(n3.toFixed(15)); -} - -// node_modules/@antv/scale/esm/util/extended.js -var DEFAULT_Q = [1, 5, 2, 2.5, 4, 3]; -var eps = Number.EPSILON * 100; -function mod2(n3, m4) { - return (n3 % m4 + m4) % m4; -} -function round4(n3) { - return Math.round(n3 * 1e12) / 1e12; -} -function simplicity(q3, Q2, j4, lmin, lmax, lstep) { - var n3 = (0, import_util45.size)(Q2); - var i4 = (0, import_util45.indexOf)(Q2, q3); - var v3 = 0; - var m4 = mod2(lmin, lstep); - if ((m4 < eps || lstep - m4 < eps) && lmin <= 0 && lmax >= 0) { - v3 = 1; - } - return 1 - i4 / (n3 - 1) - j4 + v3; -} -function simplicityMax(q3, Q2, j4) { - var n3 = (0, import_util45.size)(Q2); - var i4 = (0, import_util45.indexOf)(Q2, q3); - var v3 = 1; - return 1 - i4 / (n3 - 1) - j4 + v3; -} -function density(k4, m4, dMin, dMax, lMin, lMax) { - var r4 = (k4 - 1) / (lMax - lMin); - var rt = (m4 - 1) / (Math.max(lMax, dMax) - Math.min(dMin, lMin)); - return 2 - Math.max(r4 / rt, rt / r4); -} -function densityMax(k4, m4) { - if (k4 >= m4) { - return 2 - (k4 - 1) / (m4 - 1); - } - return 1; -} -function coverage(dMin, dMax, lMin, lMax) { - var range = dMax - dMin; - return 1 - 0.5 * (Math.pow(dMax - lMax, 2) + Math.pow(dMin - lMin, 2)) / Math.pow(0.1 * range, 2); -} -function coverageMax(dMin, dMax, span) { - var range = dMax - dMin; - if (span > range) { - var half = (span - range) / 2; - return 1 - Math.pow(half, 2) / Math.pow(0.1 * range, 2); - } - return 1; -} -function legibility() { - return 1; -} -function extended(dMin, dMax, n3, onlyLoose, Q2, w4) { - if (n3 === void 0) { - n3 = 5; - } - if (onlyLoose === void 0) { - onlyLoose = true; - } - if (Q2 === void 0) { - Q2 = DEFAULT_Q; - } - if (w4 === void 0) { - w4 = [0.25, 0.2, 0.5, 0.05]; - } - var m4 = n3 < 0 ? 0 : Math.round(n3); - if (Number.isNaN(dMin) || Number.isNaN(dMax) || typeof dMin !== "number" || typeof dMax !== "number" || !m4) { - return { - min: 0, - max: 0, - ticks: [] - }; - } - if (dMax - dMin < 1e-15 || m4 === 1) { - return { - min: dMin, - max: dMax, - ticks: [dMin] - }; - } - var best = { - score: -2, - lmin: 0, - lmax: 0, - lstep: 0 - }; - var j4 = 1; - while (j4 < Infinity) { - for (var i4 = 0; i4 < Q2.length; i4 += 1) { - var q3 = Q2[i4]; - var sm = simplicityMax(q3, Q2, j4); - if (w4[0] * sm + w4[1] + w4[2] + w4[3] < best.score) { - j4 = Infinity; - break; - } - var k4 = 2; - while (k4 < Infinity) { - var dm = densityMax(k4, m4); - if (w4[0] * sm + w4[1] + w4[2] * dm + w4[3] < best.score) { - break; - } - var delta = (dMax - dMin) / (k4 + 1) / j4 / q3; - var z3 = Math.ceil(Math.log10(delta)); - while (z3 < Infinity) { - var step = j4 * q3 * Math.pow(10, z3); - var cm = coverageMax(dMin, dMax, step * (k4 - 1)); - if (w4[0] * sm + w4[1] * cm + w4[2] * dm + w4[3] < best.score) { - break; - } - var minStart = Math.floor(dMax / step) * j4 - (k4 - 1) * j4; - var maxStart = Math.ceil(dMin / step) * j4; - if (minStart <= maxStart) { - var count2 = maxStart - minStart; - for (var i_1 = 0; i_1 <= count2; i_1 += 1) { - var start = minStart + i_1; - var lMin = start * (step / j4); - var lMax = lMin + step * (k4 - 1); - var lStep = step; - var s4 = simplicity(q3, Q2, j4, lMin, lMax, lStep); - var c5 = coverage(dMin, dMax, lMin, lMax); - var g4 = density(k4, m4, dMin, dMax, lMin, lMax); - var l4 = legibility(); - var score2 = w4[0] * s4 + w4[1] * c5 + w4[2] * g4 + w4[3] * l4; - if (score2 > best.score && (!onlyLoose || lMin <= dMin && lMax >= dMax)) { - best.lmin = lMin; - best.lmax = lMax; - best.lstep = lStep; - best.score = score2; - } - } - } - z3 += 1; - } - k4 += 1; - } - } - j4 += 1; - } - var lmax = prettyNumber(best.lmax); - var lmin = prettyNumber(best.lmin); - var lstep = prettyNumber(best.lstep); - var tickCount = Math.floor(round4((lmax - lmin) / lstep)) + 1; - var ticks = new Array(tickCount); - ticks[0] = prettyNumber(lmin); - for (var i4 = 1; i4 < tickCount; i4++) { - ticks[i4] = prettyNumber(ticks[i4 - 1] + lstep); - } - return { - min: Math.min(dMin, (0, import_util45.head)(ticks)), - max: Math.max(dMax, (0, import_util45.last)(ticks)), - ticks - }; -} - -// node_modules/@antv/scale/esm/tick-method/cat.js -function calculateCatTicks(cfg) { - var values4 = cfg.values, tickInterval = cfg.tickInterval, tickCount = cfg.tickCount; - var ticks = values4; - if ((0, import_util46.isNumber)(tickInterval)) { - return (0, import_util46.filter)(ticks, function(__, i4) { - return i4 % tickInterval === 0; - }); - } - var min13 = cfg.min, max15 = cfg.max; - if ((0, import_util46.isNil)(min13)) { - min13 = 0; - } - if ((0, import_util46.isNil)(max15)) { - max15 = values4.length - 1; - } - if ((0, import_util46.isNumber)(tickCount) && tickCount < max15 - min13) { - var ticks_1 = extended(min13, max15, tickCount, false, [1, 2, 5, 3, 4, 7, 6, 8, 9]).ticks; - var valid = (0, import_util46.filter)(ticks_1, function(tick) { - return tick >= min13 && tick <= max15; - }); - return valid.map(function(index2) { - return values4[index2]; - }); - } - return values4.slice(min13, max15 + 1); -} - -// node_modules/@antv/scale/esm/tick-method/d3-linear.js -var import_util49 = __toModule(require_lib()); - -// node_modules/@antv/scale/esm/util/d3-linear.js -function d3Linear(cfg) { - var min13 = cfg.min, max15 = cfg.max, nice = cfg.nice, tickCount = cfg.tickCount; - var linear4 = new D3Linear(); - linear4.domain([min13, max15]); - if (nice) { - linear4.nice(tickCount); - } - return linear4.ticks(tickCount); -} -var DEFAULT_COUNT = 5; -var e10 = Math.sqrt(50); -var e5 = Math.sqrt(10); -var e22 = Math.sqrt(2); -var D3Linear = function() { - function D3Linear2() { - this._domain = [0, 1]; - } - D3Linear2.prototype.domain = function(domain) { - if (domain) { - this._domain = Array.from(domain, Number); - return this; - } - return this._domain.slice(); - }; - D3Linear2.prototype.nice = function(count2) { - var _a6, _b; - if (count2 === void 0) { - count2 = DEFAULT_COUNT; - } - var d3 = this._domain.slice(); - var i0 = 0; - var i1 = this._domain.length - 1; - var start = this._domain[i0]; - var stop = this._domain[i1]; - var step; - if (stop < start) { - _a6 = [stop, start], start = _a6[0], stop = _a6[1]; - _b = [i1, i0], i0 = _b[0], i1 = _b[1]; - } - step = tickIncrement(start, stop, count2); - if (step > 0) { - start = Math.floor(start / step) * step; - stop = Math.ceil(stop / step) * step; - step = tickIncrement(start, stop, count2); - } else if (step < 0) { - start = Math.ceil(start * step) / step; - stop = Math.floor(stop * step) / step; - step = tickIncrement(start, stop, count2); - } - if (step > 0) { - d3[i0] = Math.floor(start / step) * step; - d3[i1] = Math.ceil(stop / step) * step; - this.domain(d3); - } else if (step < 0) { - d3[i0] = Math.ceil(start * step) / step; - d3[i1] = Math.floor(stop * step) / step; - this.domain(d3); - } - return this; - }; - D3Linear2.prototype.ticks = function(count2) { - if (count2 === void 0) { - count2 = DEFAULT_COUNT; - } - return d3ArrayTicks(this._domain[0], this._domain[this._domain.length - 1], count2 || DEFAULT_COUNT); - }; - return D3Linear2; -}(); -function d3ArrayTicks(start, stop, count2) { - var reverse; - var i4 = -1; - var n3; - var ticks; - var step; - stop = +stop, start = +start, count2 = +count2; - if (start === stop && count2 > 0) { - return [start]; - } - if (reverse = stop < start) { - n3 = start, start = stop, stop = n3; - } - if ((step = tickIncrement(start, stop, count2)) === 0 || !isFinite(step)) { - return []; - } - if (step > 0) { - start = Math.ceil(start / step); - stop = Math.floor(stop / step); - ticks = new Array(n3 = Math.ceil(stop - start + 1)); - while (++i4 < n3) { - ticks[i4] = (start + i4) * step; - } - } else { - start = Math.floor(start * step); - stop = Math.ceil(stop * step); - ticks = new Array(n3 = Math.ceil(start - stop + 1)); - while (++i4 < n3) { - ticks[i4] = (start - i4) / step; - } - } - if (reverse) { - ticks.reverse(); - } - return ticks; -} -function tickIncrement(start, stop, count2) { - var step = (stop - start) / Math.max(0, count2); - var power = Math.floor(Math.log(step) / Math.LN10); - var error = step / Math.pow(10, power); - return power >= 0 ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e22 ? 2 : 1) * Math.pow(10, power) : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e22 ? 2 : 1); -} - -// node_modules/@antv/scale/esm/util/interval.js -var import_util47 = __toModule(require_lib()); -function snapMultiple(v3, base, snapType) { - var div4; - if (snapType === "ceil") { - div4 = Math.ceil(v3 / base); - } else if (snapType === "floor") { - div4 = Math.floor(v3 / base); - } else { - div4 = Math.round(v3 / base); - } - return div4 * base; -} -function intervalTicks(min13, max15, interval3) { - var minTick = snapMultiple(min13, interval3, "floor"); - var maxTick = snapMultiple(max15, interval3, "ceil"); - minTick = (0, import_util47.fixedBase)(minTick, interval3); - maxTick = (0, import_util47.fixedBase)(maxTick, interval3); - var ticks = []; - for (var i4 = minTick; i4 <= maxTick; i4 = i4 + interval3) { - var tickValue = (0, import_util47.fixedBase)(i4, interval3); - ticks.push(tickValue); - } - return { - min: minTick, - max: maxTick, - ticks - }; -} - -// node_modules/@antv/scale/esm/util/strict-limit.js -var import_util48 = __toModule(require_lib()); -function strictLimit(cfg, defaultMin, defaultMax) { - var _a6; - var minLimit = cfg.minLimit, maxLimit = cfg.maxLimit, min13 = cfg.min, max15 = cfg.max, _b = cfg.tickCount, tickCount = _b === void 0 ? 5 : _b; - var tickMin = (0, import_util48.isNil)(minLimit) ? (0, import_util48.isNil)(defaultMin) ? min13 : defaultMin : minLimit; - var tickMax = (0, import_util48.isNil)(maxLimit) ? (0, import_util48.isNil)(defaultMax) ? max15 : defaultMax : maxLimit; - if (tickMin > tickMax) { - _a6 = [tickMin, tickMax], tickMax = _a6[0], tickMin = _a6[1]; - } - if (tickCount <= 2) { - return [tickMin, tickMax]; - } - var step = (tickMax - tickMin) / (tickCount - 1); - var ticks = []; - for (var i4 = 0; i4 < tickCount; i4++) { - ticks.push(tickMin + step * i4); - } - return ticks; -} - -// node_modules/@antv/scale/esm/tick-method/d3-linear.js -function d3LinearTickMethod(cfg) { - var min13 = cfg.min, max15 = cfg.max, tickInterval = cfg.tickInterval, minLimit = cfg.minLimit, maxLimit = cfg.maxLimit; - var ticks = d3Linear(cfg); - if (!(0, import_util49.isNil)(minLimit) || !(0, import_util49.isNil)(maxLimit)) { - return strictLimit(cfg, (0, import_util49.head)(ticks), (0, import_util49.last)(ticks)); - } - if (tickInterval) { - return intervalTicks(min13, max15, tickInterval).ticks; - } - return ticks; -} - -// node_modules/@antv/scale/esm/tick-method/linear.js -var import_util50 = __toModule(require_lib()); -function linear3(cfg) { - var min13 = cfg.min, max15 = cfg.max, tickCount = cfg.tickCount, nice = cfg.nice, tickInterval = cfg.tickInterval, minLimit = cfg.minLimit, maxLimit = cfg.maxLimit; - var ticks = extended(min13, max15, tickCount, nice).ticks; - if (!(0, import_util50.isNil)(minLimit) || !(0, import_util50.isNil)(maxLimit)) { - return strictLimit(cfg, (0, import_util50.head)(ticks), (0, import_util50.last)(ticks)); - } - if (tickInterval) { - return intervalTicks(min13, max15, tickInterval).ticks; - } - return ticks; -} - -// node_modules/@antv/scale/esm/tick-method/log.js -function calculateLogTicks(cfg) { - var base = cfg.base, tickCount = cfg.tickCount, min13 = cfg.min, max15 = cfg.max, values4 = cfg.values; - var minTick; - var maxTick = log(base, max15); - if (min13 > 0) { - minTick = Math.floor(log(base, min13)); - } else { - var positiveMin = getLogPositiveMin(values4, base, max15); - minTick = Math.floor(log(base, positiveMin)); - } - var count2 = maxTick - minTick; - var avg2 = Math.ceil(count2 / tickCount); - var ticks = []; - for (var i4 = minTick; i4 < maxTick + avg2; i4 = i4 + avg2) { - ticks.push(Math.pow(base, i4)); - } - if (min13 <= 0) { - ticks.unshift(0); - } - return ticks; -} - -// node_modules/@antv/scale/esm/util/pretty.js -function pretty(min13, max15, m4) { - if (m4 === void 0) { - m4 = 5; - } - if (min13 === max15) { - return { - max: max15, - min: min13, - ticks: [min13] - }; - } - var n3 = m4 < 0 ? 0 : Math.round(m4); - if (n3 === 0) - return { max: max15, min: min13, ticks: [] }; - var h3 = 1.5; - var h5 = 0.5 + 1.5 * h3; - var d3 = max15 - min13; - var c5 = d3 / n3; - var base = Math.pow(10, Math.floor(Math.log10(c5))); - var unit = base; - if (2 * base - c5 < h3 * (c5 - unit)) { - unit = 2 * base; - if (5 * base - c5 < h5 * (c5 - unit)) { - unit = 5 * base; - if (10 * base - c5 < h3 * (c5 - unit)) { - unit = 10 * base; - } - } - } - var nu = Math.ceil(max15 / unit); - var ns = Math.floor(min13 / unit); - var hi = Math.max(nu * unit, max15); - var lo = Math.min(ns * unit, min13); - var size14 = Math.floor((hi - lo) / unit) + 1; - var ticks = new Array(size14); - for (var i4 = 0; i4 < size14; i4++) { - ticks[i4] = prettyNumber(lo + i4 * unit); - } - return { - min: lo, - max: hi, - ticks - }; -} - -// node_modules/@antv/scale/esm/tick-method/pow.js -function calculatePowTicks(cfg) { - var exponent2 = cfg.exponent, tickCount = cfg.tickCount; - var max15 = Math.ceil(calBase(exponent2, cfg.max)); - var min13 = Math.floor(calBase(exponent2, cfg.min)); - var ticks = pretty(min13, max15, tickCount).ticks; - return ticks.map(function(tick) { - var factor = tick >= 0 ? 1 : -1; - return Math.pow(tick, exponent2) * factor; - }); -} - -// node_modules/@antv/scale/esm/tick-method/quantile.js -function quantileSorted(x6, p4) { - var idx = x6.length * p4; - if (p4 === 1) { - return x6[x6.length - 1]; - } else if (p4 === 0) { - return x6[0]; - } else if (idx % 1 !== 0) { - return x6[Math.ceil(idx) - 1]; - } else if (x6.length % 2 === 0) { - return (x6[idx - 1] + x6[idx]) / 2; - } else { - return x6[idx]; - } -} -function calculateTicks(cfg) { - var tickCount = cfg.tickCount, values4 = cfg.values; - if (!values4 || !values4.length) { - return []; - } - var sorted = values4.slice().sort(function(a4, b10) { - return a4 - b10; - }); - var ticks = []; - for (var i4 = 0; i4 < tickCount; i4++) { - var p4 = i4 / (tickCount - 1); - ticks.push(quantileSorted(sorted, p4)); - } - return ticks; -} - -// node_modules/@antv/scale/esm/tick-method/r-prettry.js -var import_util51 = __toModule(require_lib()); -function linearPretty(cfg) { - var min13 = cfg.min, max15 = cfg.max, tickCount = cfg.tickCount, tickInterval = cfg.tickInterval, minLimit = cfg.minLimit, maxLimit = cfg.maxLimit; - var ticks = pretty(min13, max15, tickCount).ticks; - if (!(0, import_util51.isNil)(minLimit) || !(0, import_util51.isNil)(maxLimit)) { - return strictLimit(cfg, (0, import_util51.head)(ticks), (0, import_util51.last)(ticks)); - } - if (tickInterval) { - return intervalTicks(min13, max15, tickInterval).ticks; - } - return ticks; -} - -// node_modules/@antv/scale/esm/tick-method/time.js -function calculateTimeTicks(cfg) { - var min13 = cfg.min, max15 = cfg.max, minTickInterval = cfg.minTickInterval; - var tickInterval = cfg.tickInterval; - var tickCount = cfg.tickCount; - if (tickInterval) { - tickCount = Math.ceil((max15 - min13) / tickInterval); - } else { - tickInterval = getTickInterval(min13, max15, tickCount)[1]; - var count2 = (max15 - min13) / tickInterval; - var ratio = count2 / tickCount; - if (ratio > 1) { - tickInterval = tickInterval * Math.ceil(ratio); - } - if (minTickInterval && tickInterval < minTickInterval) { - tickInterval = minTickInterval; - } - } - var ticks = []; - for (var i4 = min13; i4 < max15 + tickInterval; i4 += tickInterval) { - ticks.push(i4); - } - return ticks; -} - -// node_modules/@antv/scale/esm/tick-method/time-cat.js -var import_util52 = __toModule(require_lib()); -function calculateTimeCatTicks(cfg) { - var ticks = calculateCatTicks(cfg); - var lastValue = (0, import_util52.last)(cfg.values); - if (lastValue !== (0, import_util52.last)(ticks)) { - ticks.push(lastValue); - } - return ticks; -} - -// node_modules/@antv/scale/esm/tick-method/time-pretty.js -function getYear(date) { - return new Date(date).getFullYear(); -} -function createYear(year) { - return new Date(year, 0, 1).getTime(); -} -function getMonth(date) { - return new Date(date).getMonth(); -} -function diffMonth(min13, max15) { - var minYear = getYear(min13); - var maxYear = getYear(max15); - var minMonth = getMonth(min13); - var maxMonth = getMonth(max15); - return (maxYear - minYear) * 12 + (maxMonth - minMonth) % 12; -} -function creatMonth(year, month) { - return new Date(year, month, 1).getTime(); -} -function diffDay(min13, max15) { - return Math.ceil((max15 - min13) / DAY); -} -function diffHour(min13, max15) { - return Math.ceil((max15 - min13) / HOUR); -} -function diffMinus(min13, max15) { - return Math.ceil((max15 - min13) / (60 * 1e3)); -} -function timePretty(cfg) { - var min13 = cfg.min, max15 = cfg.max, minTickInterval = cfg.minTickInterval, tickCount = cfg.tickCount; - var tickInterval = cfg.tickInterval; - var ticks = []; - if (!tickInterval) { - tickInterval = (max15 - min13) / tickCount; - if (minTickInterval && tickInterval < minTickInterval) { - tickInterval = minTickInterval; - } - } - var minYear = getYear(min13); - if (tickInterval > YEAR) { - var maxYear = getYear(max15); - var yearInterval = Math.ceil(tickInterval / YEAR); - for (var i4 = minYear; i4 <= maxYear + yearInterval; i4 = i4 + yearInterval) { - ticks.push(createYear(i4)); - } - } else if (tickInterval > MONTH) { - var monthInterval = Math.ceil(tickInterval / MONTH); - var mmMoth = getMonth(min13); - var dMonths = diffMonth(min13, max15); - for (var i4 = 0; i4 <= dMonths + monthInterval; i4 = i4 + monthInterval) { - ticks.push(creatMonth(minYear, i4 + mmMoth)); - } - } else if (tickInterval > DAY) { - var date = new Date(min13); - var year = date.getFullYear(); - var month = date.getMonth(); - var mday = date.getDate(); - var day = Math.ceil(tickInterval / DAY); - var ddays = diffDay(min13, max15); - for (var i4 = 0; i4 < ddays + day; i4 = i4 + day) { - ticks.push(new Date(year, month, mday + i4).getTime()); - } - } else if (tickInterval > HOUR) { - var date = new Date(min13); - var year = date.getFullYear(); - var month = date.getMonth(); - var day = date.getDate(); - var hour = date.getHours(); - var hours = Math.ceil(tickInterval / HOUR); - var dHours = diffHour(min13, max15); - for (var i4 = 0; i4 <= dHours + hours; i4 = i4 + hours) { - ticks.push(new Date(year, month, day, hour + i4).getTime()); - } - } else if (tickInterval > MINUTE) { - var dMinus = diffMinus(min13, max15); - var minutes = Math.ceil(tickInterval / MINUTE); - for (var i4 = 0; i4 <= dMinus + minutes; i4 = i4 + minutes) { - ticks.push(min13 + i4 * MINUTE); - } - } else { - var interval3 = tickInterval; - if (interval3 < SECOND) { - interval3 = SECOND; - } - var minSecond = Math.floor(min13 / SECOND) * SECOND; - var dSeconds = Math.ceil((max15 - min13) / SECOND); - var seconds = Math.ceil(interval3 / SECOND); - for (var i4 = 0; i4 < dSeconds + seconds; i4 = i4 + seconds) { - ticks.push(minSecond + i4 * SECOND); - } - } - if (ticks.length >= 512) { - console.warn("Notice: current ticks length(" + ticks.length + ') >= 512, may cause performance issues, even out of memory. Because of the configure "tickInterval"(in milliseconds, current is ' + tickInterval + ") is too small, increase the value to solve the problem!"); - } - return ticks; -} - -// node_modules/@antv/scale/esm/tick-method/index.js -registerTickMethod("cat", calculateCatTicks); -registerTickMethod("time-cat", calculateTimeCatTicks); -registerTickMethod("wilkinson-extended", linear3); -registerTickMethod("r-pretty", linearPretty); -registerTickMethod("time", calculateTimeTicks); -registerTickMethod("time-pretty", timePretty); -registerTickMethod("log", calculateLogTicks); -registerTickMethod("pow", calculatePowTicks); -registerTickMethod("quantile", calculateTicks); -registerTickMethod("d3-linear", d3LinearTickMethod); - -// node_modules/@antv/scale/esm/index.js -registerClass("cat", base_default5); -registerClass("category", base_default5); -registerClass("identity", identity_default); -registerClass("linear", linear_default); -registerClass("log", log_default); -registerClass("pow", pow_default); -registerClass("time", time_default2); -registerClass("timeCat", time_default); -registerClass("quantize", quantize_default); -registerClass("quantile", quantile_default); - -// node_modules/@antv/attr/esm/factory.js -var ATTRIBUTE_MAP = {}; -var getAttribute = function(type2) { - return ATTRIBUTE_MAP[type2.toLowerCase()]; -}; -var registerAttribute = function(type2, ctor) { - if (getAttribute(type2)) { - throw new Error("Attribute type '" + type2 + "' existed."); - } - ATTRIBUTE_MAP[type2.toLowerCase()] = ctor; -}; - -// node_modules/@antv/attr/esm/index.js -registerAttribute("Color", color_default); -registerAttribute("Opacity", opacity_default); -registerAttribute("Position", position_default); -registerAttribute("Shape", shape_default2); -registerAttribute("Size", size_default); - -// node_modules/@antv/coord/esm/coord/base.js -var import_util53 = __toModule(require_lib()); -var Coordinate = function() { - function Coordinate2(cfg) { - this.type = "coordinate"; - this.isRect = false; - this.isHelix = false; - this.isPolar = false; - this.isReflectX = false; - this.isReflectY = false; - var start = cfg.start, end2 = cfg.end, _a6 = cfg.matrix, matrix = _a6 === void 0 ? [1, 0, 0, 0, 1, 0, 0, 0, 1] : _a6, _b = cfg.isTransposed, isTransposed = _b === void 0 ? false : _b; - this.start = start; - this.end = end2; - this.matrix = matrix; - this.originalMatrix = __spreadArray([], matrix); - this.isTransposed = isTransposed; - } - Coordinate2.prototype.initial = function() { - this.center = { - x: (this.start.x + this.end.x) / 2, - y: (this.start.y + this.end.y) / 2 - }; - this.width = Math.abs(this.end.x - this.start.x); - this.height = Math.abs(this.end.y - this.start.y); - }; - Coordinate2.prototype.update = function(cfg) { - (0, import_util53.assign)(this, cfg); - this.initial(); - }; - Coordinate2.prototype.convertDim = function(percent2, dim) { - var _a6; - var _b = this[dim], start = _b.start, end2 = _b.end; - if (this.isReflect(dim)) { - _a6 = [end2, start], start = _a6[0], end2 = _a6[1]; - } - return start + percent2 * (end2 - start); - }; - Coordinate2.prototype.invertDim = function(value2, dim) { - var _a6; - var _b = this[dim], start = _b.start, end2 = _b.end; - if (this.isReflect(dim)) { - _a6 = [end2, start], start = _a6[0], end2 = _a6[1]; - } - return (value2 - start) / (end2 - start); - }; - Coordinate2.prototype.applyMatrix = function(x6, y5, tag) { - if (tag === void 0) { - tag = 0; - } - var matrix = this.matrix; - var vector = [x6, y5, tag]; - vec3_exports.transformMat3(vector, vector, matrix); - return vector; - }; - Coordinate2.prototype.invertMatrix = function(x6, y5, tag) { - if (tag === void 0) { - tag = 0; - } - var matrix = this.matrix; - var inverted = mat3_exports.invert([0, 0, 0, 0, 0, 0, 0, 0, 0], matrix); - var vector = [x6, y5, tag]; - if (inverted) { - vec3_exports.transformMat3(vector, vector, inverted); - } - return vector; - }; - Coordinate2.prototype.convert = function(point2) { - var _a6 = this.convertPoint(point2), x6 = _a6.x, y5 = _a6.y; - var vector = this.applyMatrix(x6, y5, 1); - return { - x: vector[0], - y: vector[1] - }; - }; - Coordinate2.prototype.invert = function(point2) { - var vector = this.invertMatrix(point2.x, point2.y, 1); - return this.invertPoint({ - x: vector[0], - y: vector[1] - }); - }; - Coordinate2.prototype.rotate = function(radian) { - var matrix = this.matrix; - var center2 = this.center; - ext_exports.leftTranslate(matrix, matrix, [-center2.x, -center2.y]); - ext_exports.leftRotate(matrix, matrix, radian); - ext_exports.leftTranslate(matrix, matrix, [center2.x, center2.y]); - return this; - }; - Coordinate2.prototype.reflect = function(dim) { - if (dim === "x") { - this.isReflectX = !this.isReflectX; - } else { - this.isReflectY = !this.isReflectY; - } - return this; - }; - Coordinate2.prototype.scale = function(s1, s22) { - var matrix = this.matrix; - var center2 = this.center; - ext_exports.leftTranslate(matrix, matrix, [-center2.x, -center2.y]); - ext_exports.leftScale(matrix, matrix, [s1, s22]); - ext_exports.leftTranslate(matrix, matrix, [center2.x, center2.y]); - return this; - }; - Coordinate2.prototype.translate = function(x6, y5) { - var matrix = this.matrix; - ext_exports.leftTranslate(matrix, matrix, [x6, y5]); - return this; - }; - Coordinate2.prototype.transpose = function() { - this.isTransposed = !this.isTransposed; - return this; - }; - Coordinate2.prototype.getCenter = function() { - return this.center; - }; - Coordinate2.prototype.getWidth = function() { - return this.width; - }; - Coordinate2.prototype.getHeight = function() { - return this.height; - }; - Coordinate2.prototype.getRadius = function() { - return this.radius; - }; - Coordinate2.prototype.isReflect = function(dim) { - return dim === "x" ? this.isReflectX : this.isReflectY; - }; - Coordinate2.prototype.resetMatrix = function(matrix) { - this.matrix = matrix ? matrix : __spreadArray([], this.originalMatrix); - }; - return Coordinate2; -}(); -var base_default7 = Coordinate; - -// node_modules/@antv/coord/esm/coord/cartesian.js -var Cartesian = function(_super) { - __extends(Cartesian2, _super); - function Cartesian2(cfg) { - var _this = _super.call(this, cfg) || this; - _this.isRect = true; - _this.type = "cartesian"; - _this.initial(); - return _this; - } - Cartesian2.prototype.initial = function() { - _super.prototype.initial.call(this); - var start = this.start; - var end2 = this.end; - this.x = { - start: start.x, - end: end2.x - }; - this.y = { - start: start.y, - end: end2.y - }; - }; - Cartesian2.prototype.convertPoint = function(point2) { - var _a6; - var x6 = point2.x, y5 = point2.y; - if (this.isTransposed) { - _a6 = [y5, x6], x6 = _a6[0], y5 = _a6[1]; - } - return { - x: this.convertDim(x6, "x"), - y: this.convertDim(y5, "y") - }; - }; - Cartesian2.prototype.invertPoint = function(point2) { - var _a6; - var x6 = this.invertDim(point2.x, "x"); - var y5 = this.invertDim(point2.y, "y"); - if (this.isTransposed) { - _a6 = [y5, x6], x6 = _a6[0], y5 = _a6[1]; - } - return { x: x6, y: y5 }; - }; - return Cartesian2; -}(base_default7); -var cartesian_default = Cartesian; - -// node_modules/@antv/coord/esm/coord/helix.js -var import_util54 = __toModule(require_lib()); -var Helix = function(_super) { - __extends(Helix2, _super); - function Helix2(cfg) { - var _this = _super.call(this, cfg) || this; - _this.isHelix = true; - _this.type = "helix"; - var _a6 = cfg.startAngle, startAngle = _a6 === void 0 ? 1.25 * Math.PI : _a6, _b = cfg.endAngle, endAngle = _b === void 0 ? 7.25 * Math.PI : _b, _c = cfg.innerRadius, innerRadius = _c === void 0 ? 0 : _c, radius = cfg.radius; - _this.startAngle = startAngle; - _this.endAngle = endAngle; - _this.innerRadius = innerRadius; - _this.radius = radius; - _this.initial(); - return _this; - } - Helix2.prototype.initial = function() { - _super.prototype.initial.call(this); - var index2 = (this.endAngle - this.startAngle) / (2 * Math.PI) + 1; - var maxRadius = Math.min(this.width, this.height) / 2; - if (this.radius && this.radius >= 0 && this.radius <= 1) { - maxRadius = maxRadius * this.radius; - } - this.d = Math.floor(maxRadius * (1 - this.innerRadius) / index2); - this.a = this.d / (Math.PI * 2); - this.x = { - start: this.startAngle, - end: this.endAngle - }; - this.y = { - start: this.innerRadius * maxRadius, - end: this.innerRadius * maxRadius + this.d * 0.99 - }; - }; - Helix2.prototype.convertPoint = function(point2) { - var _a6; - var x6 = point2.x, y5 = point2.y; - if (this.isTransposed) { - _a6 = [y5, x6], x6 = _a6[0], y5 = _a6[1]; - } - var thi = this.convertDim(x6, "x"); - var r4 = this.a * thi; - var newY = this.convertDim(y5, "y"); - return { - x: this.center.x + Math.cos(thi) * (r4 + newY), - y: this.center.y + Math.sin(thi) * (r4 + newY) - }; - }; - Helix2.prototype.invertPoint = function(point2) { - var _a6; - var d3 = this.d + this.y.start; - var v3 = vec2_exports.subtract([0, 0], [point2.x, point2.y], [this.center.x, this.center.y]); - var thi = ext_exports.angleTo(v3, [1, 0], true); - var rMin = thi * this.a; - if (vec2_exports.length(v3) < rMin) { - rMin = vec2_exports.length(v3); - } - var index2 = Math.floor((vec2_exports.length(v3) - rMin) / d3); - thi = 2 * index2 * Math.PI + thi; - var r4 = this.a * thi; - var newY = vec2_exports.length(v3) - r4; - newY = (0, import_util54.isNumberEqual)(newY, 0) ? 0 : newY; - var x6 = this.invertDim(thi, "x"); - var y5 = this.invertDim(newY, "y"); - x6 = (0, import_util54.isNumberEqual)(x6, 0) ? 0 : x6; - y5 = (0, import_util54.isNumberEqual)(y5, 0) ? 0 : y5; - if (this.isTransposed) { - _a6 = [y5, x6], x6 = _a6[0], y5 = _a6[1]; - } - return { x: x6, y: y5 }; - }; - return Helix2; -}(base_default7); -var helix_default = Helix; - -// node_modules/@antv/coord/esm/coord/polar.js -var import_util55 = __toModule(require_lib()); -var Polar = function(_super) { - __extends(Polar2, _super); - function Polar2(cfg) { - var _this = _super.call(this, cfg) || this; - _this.isPolar = true; - _this.type = "polar"; - var _a6 = cfg.startAngle, startAngle = _a6 === void 0 ? -Math.PI / 2 : _a6, _b = cfg.endAngle, endAngle = _b === void 0 ? Math.PI * 3 / 2 : _b, _c = cfg.innerRadius, innerRadius = _c === void 0 ? 0 : _c, radius = cfg.radius; - _this.startAngle = startAngle; - _this.endAngle = endAngle; - _this.innerRadius = innerRadius; - _this.radius = radius; - _this.initial(); - return _this; - } - Polar2.prototype.initial = function() { - _super.prototype.initial.call(this); - while (this.endAngle < this.startAngle) { - this.endAngle += Math.PI * 2; - } - var oneBox = this.getOneBox(); - var oneWidth = oneBox.maxX - oneBox.minX; - var oneHeight = oneBox.maxY - oneBox.minY; - var left2 = Math.abs(oneBox.minX) / oneWidth; - var top = Math.abs(oneBox.minY) / oneHeight; - var maxRadius; - if (this.height / oneHeight > this.width / oneWidth) { - maxRadius = this.width / oneWidth; - this.circleCenter = { - x: this.center.x - (0.5 - left2) * this.width, - y: this.center.y - (0.5 - top) * maxRadius * oneHeight - }; - } else { - maxRadius = this.height / oneHeight; - this.circleCenter = { - x: this.center.x - (0.5 - left2) * maxRadius * oneWidth, - y: this.center.y - (0.5 - top) * this.height - }; - } - this.polarRadius = this.radius; - if (!this.radius) { - this.polarRadius = maxRadius; - } else if (this.radius > 0 && this.radius <= 1) { - this.polarRadius = maxRadius * this.radius; - } else if (this.radius <= 0 || this.radius > maxRadius) { - this.polarRadius = maxRadius; - } - this.x = { - start: this.startAngle, - end: this.endAngle - }; - this.y = { - start: this.innerRadius * this.polarRadius, - end: this.polarRadius - }; - }; - Polar2.prototype.getRadius = function() { - return this.polarRadius; - }; - Polar2.prototype.convertPoint = function(point2) { - var _a6; - var center2 = this.getCenter(); - var x6 = point2.x, y5 = point2.y; - if (this.isTransposed) { - _a6 = [y5, x6], x6 = _a6[0], y5 = _a6[1]; - } - x6 = this.convertDim(x6, "x"); - y5 = this.convertDim(y5, "y"); - return { - x: center2.x + Math.cos(x6) * y5, - y: center2.y + Math.sin(x6) * y5 - }; - }; - Polar2.prototype.invertPoint = function(point2) { - var _a6; - var center2 = this.getCenter(); - var vPoint = [point2.x - center2.x, point2.y - center2.y]; - var _b = this, startAngle = _b.startAngle, endAngle = _b.endAngle; - if (this.isReflect("x")) { - _a6 = [endAngle, startAngle], startAngle = _a6[0], endAngle = _a6[1]; - } - var m4 = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - ext_exports.leftRotate(m4, m4, startAngle); - var vStart3 = [1, 0, 0]; - vec3_exports.transformMat3(vStart3, vStart3, m4); - var vStart2 = [vStart3[0], vStart3[1]]; - var angle3 = ext_exports.angleTo(vStart2, vPoint, endAngle < startAngle); - if ((0, import_util55.isNumberEqual)(angle3, Math.PI * 2)) { - angle3 = 0; - } - var radius = vec2_exports.length(vPoint); - var xPercent = angle3 / (endAngle - startAngle); - xPercent = endAngle - startAngle > 0 ? xPercent : -xPercent; - var yPercent = this.invertDim(radius, "y"); - var rst = { x: 0, y: 0 }; - rst.x = this.isTransposed ? yPercent : xPercent; - rst.y = this.isTransposed ? xPercent : yPercent; - return rst; - }; - Polar2.prototype.getCenter = function() { - return this.circleCenter; - }; - Polar2.prototype.getOneBox = function() { - var startAngle = this.startAngle; - var endAngle = this.endAngle; - if (Math.abs(endAngle - startAngle) >= Math.PI * 2) { - return { - minX: -1, - maxX: 1, - minY: -1, - maxY: 1 - }; - } - var xs = [0, Math.cos(startAngle), Math.cos(endAngle)]; - var ys = [0, Math.sin(startAngle), Math.sin(endAngle)]; - for (var i4 = Math.min(startAngle, endAngle); i4 < Math.max(startAngle, endAngle); i4 += Math.PI / 18) { - xs.push(Math.cos(i4)); - ys.push(Math.sin(i4)); - } - return { - minX: Math.min.apply(Math, xs), - maxX: Math.max.apply(Math, xs), - minY: Math.min.apply(Math, ys), - maxY: Math.max.apply(Math, ys) - }; - }; - return Polar2; -}(base_default7); -var polar_default = Polar; - -// node_modules/@antv/coord/esm/factory.js -var COORDINATE_MAP = {}; -var getCoordinate = function(type2) { - return COORDINATE_MAP[type2.toLowerCase()]; -}; -var registerCoordinate = function(type2, ctor) { - COORDINATE_MAP[type2.toLowerCase()] = ctor; -}; - -// node_modules/@antv/coord/esm/index.js -registerCoordinate("rect", cartesian_default); -registerCoordinate("cartesian", cartesian_default); -registerCoordinate("polar", polar_default); -registerCoordinate("helix", helix_default); - -// node_modules/@antv/component/esm/annotation/index.js -var annotation_exports = {}; -__export(annotation_exports, { - Arc: () => arc_default2, - DataMarker: () => data_marker_default, - DataRegion: () => data_region_default, - Html: () => html_default, - Image: () => image_default, - Line: () => line_default3, - Region: () => region_default, - RegionFilter: () => region_filter_default, - Shape: () => shape_default3, - Text: () => text_default2 -}); - -// node_modules/@antv/component/esm/annotation/line.js -var import_util63 = __toModule(require_lib()); - -// node_modules/@antv/component/esm/abstract/group-component.js -var import_util58 = __toModule(require_lib()); - -// node_modules/@antv/component/esm/util/event.js -function propagationDelegate(group3, eventName, eventObject) { - var event = new graph_event_default(eventName, eventObject); - event.target = group3; - event.propagationPath.push(group3); - group3.emitDelegation(eventName, event); - var parent = group3.getParent(); - while (parent) { - parent.emitDelegation(eventName, event); - event.propagationPath.push(parent); - parent = parent.getParent(); - } -} - -// node_modules/@antv/component/esm/util/matrix.js -var identityMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; -function getMatrixByAngle(point2, angle3, matrix) { - if (matrix === void 0) { - matrix = identityMatrix; - } - if (!angle3) { - return null; - } - var m4 = ext_exports.transform(matrix, [ - ["t", -point2.x, -point2.y], - ["r", angle3], - ["t", point2.x, point2.y] - ]); - return m4; -} -function getMatrixByTranslate(point2, currentMatrix) { - if (!point2.x && !point2.y) { - return null; - } - return ext_exports.transform(currentMatrix || identityMatrix, [["t", point2.x, point2.y]]); -} -function getAngleByMatrix(matrix) { - var xVector = [1, 0, 0]; - var out = [0, 0, 0]; - vec3_exports.transformMat3(out, xVector, matrix); - return Math.atan2(out[1], out[0]); -} -function multiplyVec22(matrix, v3) { - var out = [0, 0]; - vec2_exports.transformMat3(out, v3, matrix); - return out; -} -function applyMatrix2BBox(matrix, bbox) { - var topLeft = multiplyVec22(matrix, [bbox.minX, bbox.minY]); - var topRight = multiplyVec22(matrix, [bbox.maxX, bbox.minY]); - var bottomLeft = multiplyVec22(matrix, [bbox.minX, bbox.maxY]); - var bottomRight = multiplyVec22(matrix, [bbox.maxX, bbox.maxY]); - var minX = Math.min(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]); - var maxX = Math.max(topLeft[0], topRight[0], bottomLeft[0], bottomRight[0]); - var minY = Math.min(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]); - var maxY2 = Math.max(topLeft[1], topRight[1], bottomLeft[1], bottomRight[1]); - return { - x: minX, - y: minY, - minX, - minY, - maxX, - maxY: maxY2, - width: maxX - minX, - height: maxY2 - minY - }; -} -function applyRotate(shape, rotate8, x6, y5) { - if (rotate8) { - var matrix = getMatrixByAngle({ x: x6, y: y5 }, rotate8, shape.getMatrix()); - shape.setMatrix(matrix); - } -} -function applyTranslate(shape, x6, y5) { - var translateMatrix = getMatrixByTranslate({ x: x6, y: y5 }); - shape.attr("matrix", translateMatrix); -} - -// node_modules/@antv/component/esm/util/util.js -var import_util56 = __toModule(require_lib()); -function formatPadding(padding3) { - var top = 0; - var left2 = 0; - var right2 = 0; - var bottom = 0; - if ((0, import_util56.isNumber)(padding3)) { - top = left2 = right2 = bottom = padding3; - } else if ((0, import_util56.isArray)(padding3)) { - top = padding3[0]; - right2 = !(0, import_util56.isNil)(padding3[1]) ? padding3[1] : padding3[0]; - bottom = !(0, import_util56.isNil)(padding3[2]) ? padding3[2] : padding3[0]; - left2 = !(0, import_util56.isNil)(padding3[3]) ? padding3[3] : right2; - } - return [top, right2, bottom, left2]; -} -function clearDom(container2) { - var children = container2.childNodes; - var length5 = children.length; - for (var i4 = length5 - 1; i4 >= 0; i4--) { - container2.removeChild(children[i4]); - } -} -function hasClass(elements, cName) { - return !!elements.className.match(new RegExp("(\\s|^)" + cName + "(\\s|$)")); -} -function regionToBBox(region) { - var start = region.start, end2 = region.end; - var minX = Math.min(start.x, end2.x); - var minY = Math.min(start.y, end2.y); - var maxX = Math.max(start.x, end2.x); - var maxY2 = Math.max(start.y, end2.y); - return { - x: minX, - y: minY, - minX, - minY, - maxX, - maxY: maxY2, - width: maxX - minX, - height: maxY2 - minY - }; -} -function pointsToBBox(points) { - var xs = points.map(function(point2) { - return point2.x; - }); - var ys = points.map(function(point2) { - return point2.y; - }); - var minX = Math.min.apply(Math, xs); - var minY = Math.min.apply(Math, ys); - var maxX = Math.max.apply(Math, xs); - var maxY2 = Math.max.apply(Math, ys); - return { - x: minX, - y: minY, - minX, - minY, - maxX, - maxY: maxY2, - width: maxX - minX, - height: maxY2 - minY - }; -} -function createBBox(x6, y5, width2, height) { - var maxX = x6 + width2; - var maxY2 = y5 + height; - return { - x: x6, - y: y5, - width: width2, - height, - minX: x6, - minY: y5, - maxX: isNaN(maxX) ? 0 : maxX, - maxY: isNaN(maxY2) ? 0 : maxY2 - }; -} -function getValueByPercent(min13, max15, percent2) { - return (1 - percent2) * min13 + max15 * percent2; -} -function getCirclePoint(center2, radius, angle3) { - return { - x: center2.x + Math.cos(angle3) * radius, - y: center2.y + Math.sin(angle3) * radius - }; -} -function distance5(p1, p22) { - var dx = p22.x - p1.x; - var dy = p22.y - p1.y; - return Math.sqrt(dx * dx + dy * dy); -} -var near = function(x6, y5, e4) { - if (e4 === void 0) { - e4 = Math.pow(Number.EPSILON, 0.5); - } - return [x6, y5].includes(Infinity) ? Math.abs(x6) === Math.abs(y5) : Math.abs(x6 - y5) < e4; -}; -function intersectBBox2(box1, box2) { - var minX = Math.max(box1.minX, box2.minX); - var minY = Math.max(box1.minY, box2.minY); - var maxX = Math.min(box1.maxX, box2.maxX); - var maxY2 = Math.min(box1.maxY, box2.maxY); - return createBBox(minX, minY, maxX - minX, maxY2 - minY); -} -function getBBoxWithClip(element) { - var clipShape = element.getClip(); - var clipBBox = clipShape && clipShape.getBBox(); - var bbox; - if (!element.isGroup()) { - bbox = element.getBBox(); - } else { - var minX_1 = Infinity; - var maxX_1 = -Infinity; - var minY_1 = Infinity; - var maxY_1 = -Infinity; - var children = element.getChildren(); - if (children.length > 0) { - (0, import_util56.each)(children, function(child) { - if (child.get("visible")) { - if (child.isGroup() && child.get("children").length === 0) { - return true; - } - var box2 = getBBoxWithClip(child); - var leftTop = child.applyToMatrix([box2.minX, box2.minY, 1]); - var leftBottom = child.applyToMatrix([box2.minX, box2.maxY, 1]); - var rightTop = child.applyToMatrix([box2.maxX, box2.minY, 1]); - var rightBottom = child.applyToMatrix([box2.maxX, box2.maxY, 1]); - var boxMinX = Math.min(leftTop[0], leftBottom[0], rightTop[0], rightBottom[0]); - var boxMaxX = Math.max(leftTop[0], leftBottom[0], rightTop[0], rightBottom[0]); - var boxMinY = Math.min(leftTop[1], leftBottom[1], rightTop[1], rightBottom[1]); - var boxMaxY = Math.max(leftTop[1], leftBottom[1], rightTop[1], rightBottom[1]); - if (boxMinX < minX_1) { - minX_1 = boxMinX; - } - if (boxMaxX > maxX_1) { - maxX_1 = boxMaxX; - } - if (boxMinY < minY_1) { - minY_1 = boxMinY; - } - if (boxMaxY > maxY_1) { - maxY_1 = boxMaxY; - } - } - }); - } else { - minX_1 = 0; - maxX_1 = 0; - minY_1 = 0; - maxY_1 = 0; - } - bbox = createBBox(minX_1, minY_1, maxX_1 - minX_1, maxY_1 - minY_1); - } - if (clipBBox) { - return intersectBBox2(bbox, clipBBox); - } else { - return bbox; - } -} -function updateClip(element, newElement) { - if (!element.getClip() && !newElement.getClip()) { - return; - } - var newClipShape = newElement.getClip(); - if (!newClipShape) { - element.setClip(null); - return; - } - var clipCfg = { - type: newClipShape.get("type"), - attrs: newClipShape.attr() - }; - element.setClip(clipCfg); -} -function toPx(number) { - return number + "px"; -} -function getTextPoint(start, end2, position2, offset) { - var lineLength = distance5(start, end2); - var offsetPercent = offset / lineLength; - var percent2 = 0; - if (position2 === "start") { - percent2 = 0 - offsetPercent; - } else if (position2 === "end") { - percent2 = 1 + offsetPercent; - } - return { - x: getValueByPercent(start.x, end2.x, percent2), - y: getValueByPercent(start.y, end2.y, percent2) - }; -} - -// node_modules/@antv/component/esm/abstract/component.js -var import_util57 = __toModule(require_lib()); -var LOCATION_FIELD_MAP = { - none: [], - point: ["x", "y"], - region: ["start", "end"], - points: ["points"], - circle: ["center", "radius", "startAngle", "endAngle"] -}; -var Component = function(_super) { - __extends(Component4, _super); - function Component4(cfg) { - var _this = _super.call(this, cfg) || this; - _this.initCfg(); - return _this; - } - Component4.prototype.getDefaultCfg = function() { - return { - id: "", - name: "", - type: "", - locationType: "none", - offsetX: 0, - offsetY: 0, - animate: false, - capture: true, - updateAutoRender: false, - animateOption: { - appear: null, - update: { - duration: 400, - easing: "easeQuadInOut" - }, - enter: { - duration: 400, - easing: "easeQuadInOut" - }, - leave: { - duration: 350, - easing: "easeQuadIn" - } - }, - events: null, - defaultCfg: {}, - visible: true - }; - }; - Component4.prototype.clear = function() { - }; - Component4.prototype.update = function(cfg) { - var _this = this; - var defaultCfg2 = this.get("defaultCfg") || {}; - (0, import_util57.each)(cfg, function(value2, name) { - var originCfg = _this.get(name); - var newCfg = value2; - if (originCfg !== value2) { - if ((0, import_util57.isObject)(value2) && defaultCfg2[name]) { - newCfg = (0, import_util57.deepMix)({}, defaultCfg2[name], value2); - } - _this.set(name, newCfg); - } - }); - this.updateInner(cfg); - this.afterUpdate(cfg); - }; - Component4.prototype.updateInner = function(cfg) { - }; - Component4.prototype.afterUpdate = function(cfg) { - if ((0, import_util57.hasKey)(cfg, "visible")) { - if (cfg.visible) { - this.show(); - } else { - this.hide(); - } - } - if ((0, import_util57.hasKey)(cfg, "capture")) { - this.setCapture(cfg.capture); - } - }; - Component4.prototype.getLayoutBBox = function() { - return this.getBBox(); - }; - Component4.prototype.getLocationType = function() { - return this.get("locationType"); - }; - Component4.prototype.getOffset = function() { - return { - offsetX: this.get("offsetX"), - offsetY: this.get("offsetY") - }; - }; - Component4.prototype.setOffset = function(offsetX, offsetY) { - this.update({ - offsetX, - offsetY - }); - }; - Component4.prototype.setLocation = function(cfg) { - var location = __assign({}, cfg); - this.update(location); - }; - Component4.prototype.getLocation = function() { - var _this = this; - var location = {}; - var locationType = this.get("locationType"); - var fields = LOCATION_FIELD_MAP[locationType]; - (0, import_util57.each)(fields, function(field6) { - location[field6] = _this.get(field6); - }); - return location; - }; - Component4.prototype.isList = function() { - return false; - }; - Component4.prototype.isSlider = function() { - return false; - }; - Component4.prototype.init = function() { - }; - Component4.prototype.initCfg = function() { - var _this = this; - var defaultCfg2 = this.get("defaultCfg"); - (0, import_util57.each)(defaultCfg2, function(value2, name) { - var cfg = _this.get(name); - if ((0, import_util57.isObject)(cfg)) { - var newCfg = (0, import_util57.deepMix)({}, value2, cfg); - _this.set(name, newCfg); - } - }); - }; - return Component4; -}(base_default2); -var component_default = Component; - -// node_modules/@antv/component/esm/abstract/group-component.js -var STATUS_UPDATE = "update_status"; -var COPY_PROPERTIES = ["visible", "tip", "delegateObject"]; -var COPY_PROPERTIES_EXCLUDES = ["container", "group", "shapesMap", "isRegister", "isUpdating", "destroyed"]; -var GroupComponent = function(_super) { - __extends(GroupComponent2, _super); - function GroupComponent2() { - return _super !== null && _super.apply(this, arguments) || this; - } - GroupComponent2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { - container: null, - shapesMap: {}, - group: null, - capture: true, - isRegister: false, - isUpdating: false, - isInit: true - }); - }; - GroupComponent2.prototype.remove = function() { - this.clear(); - var group3 = this.get("group"); - group3.remove(); - }; - GroupComponent2.prototype.clear = function() { - var group3 = this.get("group"); - group3.clear(); - this.set("shapesMap", {}); - this.clearOffScreenCache(); - this.set("isInit", true); - }; - GroupComponent2.prototype.getChildComponentById = function(id) { - var group3 = this.getElementById(id); - var inst = group3 && group3.get("component"); - return inst; - }; - GroupComponent2.prototype.getElementById = function(id) { - return this.get("shapesMap")[id]; - }; - GroupComponent2.prototype.getElementByLocalId = function(localId) { - var id = this.getElementId(localId); - return this.getElementById(id); - }; - GroupComponent2.prototype.getElementsByName = function(name) { - var rst = []; - (0, import_util58.each)(this.get("shapesMap"), function(elem) { - if (elem.get("name") === name) { - rst.push(elem); - } - }); - return rst; - }; - GroupComponent2.prototype.getContainer = function() { - return this.get("container"); - }; - GroupComponent2.prototype.updateInner = function(cfg) { - this.offScreenRender(); - if (this.get("updateAutoRender")) { - this.render(); - } - }; - GroupComponent2.prototype.render = function() { - var offScreenGroup = this.get("offScreenGroup"); - if (!offScreenGroup) { - offScreenGroup = this.offScreenRender(); - } - var group3 = this.get("group"); - this.updateElements(offScreenGroup, group3); - this.deleteElements(); - this.applyOffset(); - if (!this.get("eventInitted")) { - this.initEvent(); - this.set("eventInitted", true); - } - this.set("isInit", false); - }; - GroupComponent2.prototype.show = function() { - var group3 = this.get("group"); - group3.show(); - this.set("visible", true); - }; - GroupComponent2.prototype.hide = function() { - var group3 = this.get("group"); - group3.hide(); - this.set("visible", false); - }; - GroupComponent2.prototype.setCapture = function(capture) { - var group3 = this.get("group"); - group3.set("capture", capture); - this.set("capture", capture); - }; - GroupComponent2.prototype.destroy = function() { - this.removeEvent(); - this.remove(); - _super.prototype.destroy.call(this); - }; - GroupComponent2.prototype.getBBox = function() { - return this.get("group").getCanvasBBox(); - }; - GroupComponent2.prototype.getLayoutBBox = function() { - var group3 = this.get("group"); - var bbox = this.getInnerLayoutBBox(); - var matrix = group3.getTotalMatrix(); - if (matrix) { - bbox = applyMatrix2BBox(matrix, bbox); - } - return bbox; - }; - GroupComponent2.prototype.on = function(evt, callback, once) { - var group3 = this.get("group"); - group3.on(evt, callback, once); - return this; - }; - GroupComponent2.prototype.off = function(evt, callback) { - var group3 = this.get("group"); - group3 && group3.off(evt, callback); - return this; - }; - GroupComponent2.prototype.emit = function(eventName, eventObject) { - var group3 = this.get("group"); - group3.emit(eventName, eventObject); - }; - GroupComponent2.prototype.init = function() { - _super.prototype.init.call(this); - if (!this.get("group")) { - this.initGroup(); - } - this.offScreenRender(); - }; - GroupComponent2.prototype.getInnerLayoutBBox = function() { - return this.get("offScreenBBox") || this.get("group").getBBox(); - }; - GroupComponent2.prototype.delegateEmit = function(eventName, eventObject) { - var group3 = this.get("group"); - eventObject.target = group3; - group3.emit(eventName, eventObject); - propagationDelegate(group3, eventName, eventObject); - }; - GroupComponent2.prototype.createOffScreenGroup = function() { - var group3 = this.get("group"); - var GroupClass = group3.getGroupBase(); - var newGroup = new GroupClass({ - delegateObject: this.getDelegateObject() - }); - return newGroup; - }; - GroupComponent2.prototype.applyOffset = function() { - var offsetX = this.get("offsetX"); - var offsetY = this.get("offsetY"); - this.moveElementTo(this.get("group"), { - x: offsetX, - y: offsetY - }); - }; - GroupComponent2.prototype.initGroup = function() { - var container2 = this.get("container"); - this.set("group", container2.addGroup({ - id: this.get("id"), - name: this.get("name"), - capture: this.get("capture"), - visible: this.get("visible"), - isComponent: true, - component: this, - delegateObject: this.getDelegateObject() - })); - }; - GroupComponent2.prototype.offScreenRender = function() { - this.clearOffScreenCache(); - var offScreenGroup = this.createOffScreenGroup(); - this.renderInner(offScreenGroup); - this.set("offScreenGroup", offScreenGroup); - this.set("offScreenBBox", getBBoxWithClip(offScreenGroup)); - return offScreenGroup; - }; - GroupComponent2.prototype.addGroup = function(parent, cfg) { - this.appendDelegateObject(parent, cfg); - var group3 = parent.addGroup(cfg); - if (this.get("isRegister")) { - this.registerElement(group3); - } - return group3; - }; - GroupComponent2.prototype.addShape = function(parent, cfg) { - this.appendDelegateObject(parent, cfg); - var shape = parent.addShape(cfg); - if (this.get("isRegister")) { - this.registerElement(shape); - } - return shape; - }; - GroupComponent2.prototype.addComponent = function(parent, cfg) { - var id = cfg.id, Ctor = cfg.component, restCfg = __rest(cfg, ["id", "component"]); - var inst = new Ctor(__assign(__assign({}, restCfg), { id, container: parent, updateAutoRender: this.get("updateAutoRender") })); - inst.init(); - inst.render(); - if (this.get("isRegister")) { - this.registerElement(inst.get("group")); - } - return inst; - }; - GroupComponent2.prototype.initEvent = function() { - }; - GroupComponent2.prototype.removeEvent = function() { - var group3 = this.get("group"); - group3.off(); - }; - GroupComponent2.prototype.getElementId = function(localId) { - var id = this.get("id"); - var name = this.get("name"); - return id + "-" + name + "-" + localId; - }; - GroupComponent2.prototype.registerElement = function(element) { - var id = element.get("id"); - this.get("shapesMap")[id] = element; - }; - GroupComponent2.prototype.unregisterElement = function(element) { - var id = element.get("id"); - delete this.get("shapesMap")[id]; - }; - GroupComponent2.prototype.moveElementTo = function(element, point2) { - var matrix = getMatrixByTranslate(point2); - element.attr("matrix", matrix); - }; - GroupComponent2.prototype.addAnimation = function(elmentName, newElement, animateCfg) { - var originOpacity = newElement.attr("opacity"); - if ((0, import_util58.isNil)(originOpacity)) { - originOpacity = 1; - } - newElement.attr("opacity", 0); - newElement.animate({ opacity: originOpacity }, animateCfg); - }; - GroupComponent2.prototype.removeAnimation = function(elementName, originElement, animateCfg) { - originElement.animate({ opacity: 0 }, animateCfg); - }; - GroupComponent2.prototype.updateAnimation = function(elementName, originElement, newAttrs, animateCfg) { - originElement.animate(newAttrs, animateCfg); - }; - GroupComponent2.prototype.updateElements = function(newGroup, originGroup) { - var _this = this; - var animate = this.get("animate"); - var animateOption = this.get("animateOption"); - var children = newGroup.getChildren().slice(0); - var preElement; - (0, import_util58.each)(children, function(element) { - var elementId = element.get("id"); - var originElement = _this.getElementById(elementId); - var elementName = element.get("name"); - if (originElement) { - if (element.get("isComponent")) { - var childComponent = element.get("component"); - var origChildComponent = originElement.get("component"); - var newCfg = (0, import_util58.pick)(childComponent.cfg, (0, import_util58.difference)((0, import_util58.keys)(childComponent.cfg), COPY_PROPERTIES_EXCLUDES)); - origChildComponent.update(newCfg); - originElement.set(STATUS_UPDATE, "update"); - } else { - var replaceAttrs = _this.getReplaceAttrs(originElement, element); - if (animate && animateOption.update) { - _this.updateAnimation(elementName, originElement, replaceAttrs, animateOption.update); - } else { - originElement.attr(replaceAttrs); - } - if (element.isGroup()) { - _this.updateElements(element, originElement); - } - (0, import_util58.each)(COPY_PROPERTIES, function(name) { - originElement.set(name, element.get(name)); - }); - updateClip(originElement, element); - preElement = originElement; - originElement.set(STATUS_UPDATE, "update"); - } - } else { - originGroup.add(element); - var siblings = originGroup.getChildren(); - siblings.splice(siblings.length - 1, 1); - if (preElement) { - var index2 = siblings.indexOf(preElement); - siblings.splice(index2 + 1, 0, element); - } else { - siblings.unshift(element); - } - _this.registerElement(element); - element.set(STATUS_UPDATE, "add"); - if (element.get("isComponent")) { - var childComponent = element.get("component"); - childComponent.set("container", originGroup); - } else if (element.isGroup()) { - _this.registerNewGroup(element); - } - preElement = element; - if (animate) { - var animateCfg = _this.get("isInit") ? animateOption.appear : animateOption.enter; - if (animateCfg) { - _this.addAnimation(elementName, element, animateCfg); - } - } - } - }); - }; - GroupComponent2.prototype.clearUpdateStatus = function(group3) { - var children = group3.getChildren(); - (0, import_util58.each)(children, function(el) { - el.set(STATUS_UPDATE, null); - }); - }; - GroupComponent2.prototype.clearOffScreenCache = function() { - var offScreenGroup = this.get("offScreenGroup"); - if (offScreenGroup) { - offScreenGroup.destroy(); - } - this.set("offScreenGroup", null); - this.set("offScreenBBox", null); - }; - GroupComponent2.prototype.getDelegateObject = function() { - var _a6; - var name = this.get("name"); - var delegateObject = (_a6 = {}, _a6[name] = this, _a6.component = this, _a6); - return delegateObject; - }; - GroupComponent2.prototype.appendDelegateObject = function(parent, cfg) { - var parentObject = parent.get("delegateObject"); - if (!cfg.delegateObject) { - cfg.delegateObject = {}; - } - (0, import_util58.mix)(cfg.delegateObject, parentObject); - }; - GroupComponent2.prototype.getReplaceAttrs = function(originElement, newElement) { - var originAttrs = originElement.attr(); - var newAttrs = newElement.attr(); - (0, import_util58.each)(originAttrs, function(v3, k4) { - if (newAttrs[k4] === void 0) { - newAttrs[k4] = void 0; - } - }); - return newAttrs; - }; - GroupComponent2.prototype.registerNewGroup = function(group3) { - var _this = this; - var children = group3.getChildren(); - (0, import_util58.each)(children, function(element) { - _this.registerElement(element); - element.set(STATUS_UPDATE, "add"); - if (element.isGroup()) { - _this.registerNewGroup(element); - } - }); - }; - GroupComponent2.prototype.deleteElements = function() { - var _this = this; - var shapesMap = this.get("shapesMap"); - var deleteArray = []; - (0, import_util58.each)(shapesMap, function(element, id) { - if (!element.get(STATUS_UPDATE) || element.destroyed) { - deleteArray.push([id, element]); - } else { - element.set(STATUS_UPDATE, null); - } - }); - var animate = this.get("animate"); - var animateOption = this.get("animateOption"); - (0, import_util58.each)(deleteArray, function(item) { - var id = item[0], element = item[1]; - if (!element.destroyed) { - var elementName = element.get("name"); - if (animate && animateOption.leave) { - var callbackAnimCfg = (0, import_util58.mix)({ - callback: function() { - _this.removeElement(element); - } - }, animateOption.leave); - _this.removeAnimation(elementName, element, callbackAnimCfg); - } else { - _this.removeElement(element); - } - } - delete shapesMap[id]; - }); - }; - GroupComponent2.prototype.removeElement = function(element) { - if (element.get("isGroup")) { - var component2 = element.get("component"); - if (component2) { - component2.destroy(); - } - } - element.remove(); - }; - return GroupComponent2; -}(component_default); -var group_component_default = GroupComponent; - -// node_modules/@antv/component/esm/util/graphic.js -var import_util61 = __toModule(require_lib()); - -// node_modules/@antv/component/esm/util/label.js -var import_util60 = __toModule(require_lib()); - -// node_modules/@antv/component/esm/util/text.js -var ELLIPSIS_CODE = "\u2026"; -function strLen(str8) { - var len5 = 0; - for (var i4 = 0; i4 < str8.length; i4++) { - len5 += charAtLength(str8, i4); - } - return len5; -} -function charAtLength(str8, i4) { - if (str8.charCodeAt(i4) > 0 && str8.charCodeAt(i4) < 128) { - return 1; - } else { - return 2; - } -} -function ellipsisString(str8, reseveLength, position2) { - if (position2 === void 0) { - position2 = "tail"; - } - var count2 = str8.length; - var rst = ""; - if (position2 === "tail") { - for (var i4 = 0, index2 = 0; i4 < reseveLength; ) { - var charLength = charAtLength(str8, index2); - if (i4 + charLength <= reseveLength) { - rst += str8[index2]; - i4 += charAtLength(str8, index2); - index2++; - } else { - break; - } - } - rst += ELLIPSIS_CODE; - } else if (position2 === "head") { - for (var i4 = 0, index2 = count2 - 1; i4 < reseveLength; ) { - var charLength = charAtLength(str8, index2); - if (i4 + charLength <= reseveLength) { - rst += str8[index2]; - i4 += charAtLength(str8, index2); - index2--; - } else { - break; - } - } - rst = ELLIPSIS_CODE + rst; - } else { - var startStr = ""; - var endStr = ""; - for (var i4 = 0, startIndex = 0, endIndex = count2 - 1; i4 < reseveLength; ) { - var startCodeLen = charAtLength(str8, startIndex); - var hasAdd = false; - if (startCodeLen + i4 <= reseveLength) { - startStr += str8[startIndex]; - startIndex++; - i4 += startCodeLen; - hasAdd = true; - } - var endCodeLen = charAtLength(str8, endIndex); - if (endCodeLen + i4 <= reseveLength) { - endStr = str8[endIndex] + endStr; - i4 += endCodeLen; - endIndex--; - hasAdd = true; - } - if (!hasAdd) { - break; - } - } - rst = startStr + ELLIPSIS_CODE + endStr; - } - return rst; -} - -// node_modules/@antv/component/esm/util/label.js -var ELLIPSIS_CODE2 = "\u2026"; -var ELLIPSIS_CODE_LENGTH = 2; -var OPTIMIZE_THRESHOLD = 400; -function getMaxLabelWidthOptimized(labels) { - var texts = labels.map(function(label17) { - var text = label17.attr("text"); - return (0, import_util60.isNil)(text) ? "" : "" + text; - }); - var maxLen = 0; - var maxIdx = 0; - for (var i4 = 0; i4 < texts.length; i4 += 1) { - var len5 = 0; - for (var j4 = 0; j4 <= texts[i4].length; j4 += 1) { - var code = texts[i4].charCodeAt(j4); - if (code >= 19968 && code <= 40869) { - len5 += 2; - } else { - len5 += 1; - } - } - if (len5 > maxLen) { - maxLen = len5; - maxIdx = i4; - } - } - return labels[maxIdx].getBBox().width; -} -function getMaxLabelWidth(labels) { - if (labels.length > OPTIMIZE_THRESHOLD) { - return getMaxLabelWidthOptimized(labels); - } - var max15 = 0; - (0, import_util60.each)(labels, function(label17) { - var bbox = label17.getBBox(); - var width2 = bbox.width; - if (max15 < width2) { - max15 = width2; - } - }); - return max15; -} -function getLabelLength(isVertical2, label17) { - var bbox = label17.getCanvasBBox(); - return isVertical2 ? bbox.width : bbox.height; -} -function ellipsisLabel(isVertical2, label17, limitLength, position2) { - var _a6; - if (position2 === void 0) { - position2 = "tail"; - } - var text = (_a6 = label17.attr("text")) !== null && _a6 !== void 0 ? _a6 : ""; - if (position2 === "tail") { - var font = (0, import_util60.pick)(label17.attr(), ["fontSize", "fontFamily", "fontWeight", "fontStyle", "fontVariant"]); - var ellipsisText = (0, import_util60.getEllipsisText)(text, limitLength, font, "\u2026"); - if (text !== ellipsisText) { - label17.attr("text", ellipsisText); - label17.set("tip", text); - return true; - } - label17.set("tip", null); - return false; - } - var labelLength = getLabelLength(isVertical2, label17); - var codeLength = strLen(text); - var ellipsisFlag = false; - if (limitLength < labelLength) { - var reserveLength = Math.floor(limitLength / labelLength * codeLength) - ELLIPSIS_CODE_LENGTH; - var newText = void 0; - if (reserveLength >= 0) { - newText = ellipsisString(text, reserveLength, position2); - } else { - newText = ELLIPSIS_CODE2; - } - if (newText) { - label17.attr("text", newText); - ellipsisFlag = true; - } - } - if (ellipsisFlag) { - label17.set("tip", text); - } else { - label17.set("tip", null); - } - return ellipsisFlag; -} - -// node_modules/@antv/component/esm/util/graphic.js -function renderTag(container2, tagCfg) { - var x6 = tagCfg.x, y5 = tagCfg.y, content = tagCfg.content, style = tagCfg.style, id = tagCfg.id, name = tagCfg.name, rotate8 = tagCfg.rotate, maxLength = tagCfg.maxLength, autoEllipsis = tagCfg.autoEllipsis, isVertical2 = tagCfg.isVertical, ellipsisPosition = tagCfg.ellipsisPosition, background = tagCfg.background; - var tagGroup = container2.addGroup({ - id: id + "-group", - name: name + "-group", - attrs: { - x: x6, - y: y5 - } - }); - var text = tagGroup.addShape({ - type: "text", - id, - name, - attrs: __assign({ x: 0, y: 0, text: content }, style) - }); - var padding3 = formatPadding((0, import_util61.get)(background, "padding", 0)); - if (maxLength && autoEllipsis) { - var maxTextLength = maxLength - (padding3[1] + padding3[3]); - ellipsisLabel(!isVertical2, text, maxTextLength, ellipsisPosition); - } - if (background) { - var backgroundStyle = (0, import_util61.get)(background, "style", {}); - var _a6 = text.getCanvasBBox(), minX = _a6.minX, minY = _a6.minY, width2 = _a6.width, height = _a6.height; - var tagBg = tagGroup.addShape("rect", { - id: id + "-bg", - name: id + "-bg", - attrs: __assign({ x: minX - padding3[3], y: minY - padding3[0], width: width2 + padding3[1] + padding3[3], height: height + padding3[0] + padding3[2] }, backgroundStyle) - }); - tagBg.toBack(); - } - applyTranslate(tagGroup, x6, y5); - applyRotate(tagGroup, rotate8, x6, y5); -} - -// node_modules/@antv/component/esm/util/theme.js -var theme_default = { - fontFamily: '\n BlinkMacSystemFont, "Segoe UI", Roboto,"Helvetica Neue",\n Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei",\n SimSun, "sans-serif"', - textColor: "#2C3542", - activeTextColor: "#333333", - uncheckedColor: "#D8D8D8", - lineColor: "#416180", - regionColor: "#CCD7EB", - verticalAxisRotate: -Math.PI / 4, - horizontalAxisRotate: Math.PI / 4 -}; - -// node_modules/@antv/component/esm/annotation/line.js -var LineAnnotation = function(_super) { - __extends(LineAnnotation2, _super); - function LineAnnotation2() { - return _super !== null && _super.apply(this, arguments) || this; - } - LineAnnotation2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "annotation", type: "line", locationType: "region", start: null, end: null, style: {}, text: null, defaultCfg: { - style: { - fill: theme_default.textColor, - fontSize: 12, - textAlign: "center", - textBaseline: "bottom", - fontFamily: theme_default.fontFamily - }, - text: { - position: "center", - autoRotate: true, - content: null, - offsetX: 0, - offsetY: 0, - style: { - stroke: theme_default.lineColor, - lineWidth: 1 - } - } - } }); - }; - LineAnnotation2.prototype.renderInner = function(group3) { - this.renderLine(group3); - if (this.get("text")) { - this.renderLabel(group3); - } - }; - LineAnnotation2.prototype.renderLine = function(group3) { - var start = this.get("start"); - var end2 = this.get("end"); - var style = this.get("style"); - this.addShape(group3, { - type: "line", - id: this.getElementId("line"), - name: "annotation-line", - attrs: __assign({ x1: start.x, y1: start.y, x2: end2.x, y2: end2.y }, style) - }); - }; - LineAnnotation2.prototype.getLabelPoint = function(start, end2, position2) { - var percent2; - if (position2 === "start") { - percent2 = 0; - } else if (position2 === "center") { - percent2 = 0.5; - } else if ((0, import_util63.isString)(position2) && position2.indexOf("%") !== -1) { - percent2 = parseInt(position2, 10) / 100; - } else if ((0, import_util63.isNumber)(position2)) { - percent2 = position2; - } else { - percent2 = 1; - } - if (percent2 > 1 || percent2 < 0) { - percent2 = 1; - } - return { - x: getValueByPercent(start.x, end2.x, percent2), - y: getValueByPercent(start.y, end2.y, percent2) - }; - }; - LineAnnotation2.prototype.renderLabel = function(group3) { - var text = this.get("text"); - var start = this.get("start"); - var end2 = this.get("end"); - var position2 = text.position, content = text.content, style = text.style, offsetX = text.offsetX, offsetY = text.offsetY, autoRotate = text.autoRotate, maxLength = text.maxLength, autoEllipsis = text.autoEllipsis, ellipsisPosition = text.ellipsisPosition, background = text.background, _a6 = text.isVertical, isVertical2 = _a6 === void 0 ? false : _a6; - var point2 = this.getLabelPoint(start, end2, position2); - var x6 = point2.x + offsetX; - var y5 = point2.y + offsetY; - var cfg = { - id: this.getElementId("line-text"), - name: "annotation-line-text", - x: x6, - y: y5, - content, - style, - maxLength, - autoEllipsis, - ellipsisPosition, - background, - isVertical: isVertical2 - }; - if (autoRotate) { - var vector = [end2.x - start.x, end2.y - start.y]; - cfg.rotate = Math.atan2(vector[1], vector[0]); - } - renderTag(group3, cfg); - }; - return LineAnnotation2; -}(group_component_default); -var line_default3 = LineAnnotation; - -// node_modules/@antv/component/esm/annotation/text.js -var TextAnnotation = function(_super) { - __extends(TextAnnotation2, _super); - function TextAnnotation2() { - return _super !== null && _super.apply(this, arguments) || this; - } - TextAnnotation2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "annotation", type: "text", locationType: "point", x: 0, y: 0, content: "", rotate: null, style: {}, background: null, maxLength: null, autoEllipsis: true, isVertical: false, ellipsisPosition: "tail", defaultCfg: { - style: { - fill: theme_default.textColor, - fontSize: 12, - textAlign: "center", - textBaseline: "middle", - fontFamily: theme_default.fontFamily - } - } }); - }; - TextAnnotation2.prototype.setLocation = function(location) { - this.set("x", location.x); - this.set("y", location.y); - this.resetLocation(); - }; - TextAnnotation2.prototype.renderInner = function(group3) { - var _a6 = this.getLocation(), x6 = _a6.x, y5 = _a6.y; - var content = this.get("content"); - var style = this.get("style"); - var id = this.getElementId("text"); - var name = this.get("name") + "-text"; - var maxLength = this.get("maxLength"); - var autoEllipsis = this.get("autoEllipsis"); - var isVertical2 = this.get("isVertical"); - var ellipsisPosition = this.get("ellipsisPosition"); - var background = this.get("background"); - var rotate8 = this.get("rotate"); - var cfg = { - id, - name, - x: x6, - y: y5, - content, - style, - maxLength, - autoEllipsis, - isVertical: isVertical2, - ellipsisPosition, - background, - rotate: rotate8 - }; - renderTag(group3, cfg); - }; - TextAnnotation2.prototype.resetLocation = function() { - var textGroup = this.getElementByLocalId("text-group"); - if (textGroup) { - var _a6 = this.getLocation(), x6 = _a6.x, y5 = _a6.y; - var rotate8 = this.get("rotate"); - applyTranslate(textGroup, x6, y5); - applyRotate(textGroup, rotate8, x6, y5); - } - }; - return TextAnnotation2; -}(group_component_default); -var text_default2 = TextAnnotation; - -// node_modules/@antv/component/esm/annotation/arc.js -var ArcAnnotation = function(_super) { - __extends(ArcAnnotation2, _super); - function ArcAnnotation2() { - return _super !== null && _super.apply(this, arguments) || this; - } - ArcAnnotation2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "annotation", type: "arc", locationType: "circle", center: null, radius: 100, startAngle: -Math.PI / 2, endAngle: Math.PI * 3 / 2, style: { - stroke: "#999", - lineWidth: 1 - } }); - }; - ArcAnnotation2.prototype.renderInner = function(group3) { - this.renderArc(group3); - }; - ArcAnnotation2.prototype.getArcPath = function() { - var _a6 = this.getLocation(), center2 = _a6.center, radius = _a6.radius, startAngle = _a6.startAngle, endAngle = _a6.endAngle; - var startPoint = getCirclePoint(center2, radius, startAngle); - var endPoint = getCirclePoint(center2, radius, endAngle); - var largeFlag = endAngle - startAngle > Math.PI ? 1 : 0; - var path = [["M", startPoint.x, startPoint.y]]; - if (endAngle - startAngle === Math.PI * 2) { - var middlePoint = getCirclePoint(center2, radius, startAngle + Math.PI); - path.push(["A", radius, radius, 0, largeFlag, 1, middlePoint.x, middlePoint.y]); - path.push(["A", radius, radius, 0, largeFlag, 1, endPoint.x, endPoint.y]); - } else { - path.push(["A", radius, radius, 0, largeFlag, 1, endPoint.x, endPoint.y]); - } - return path; - }; - ArcAnnotation2.prototype.renderArc = function(group3) { - var path = this.getArcPath(); - var style = this.get("style"); - this.addShape(group3, { - type: "path", - id: this.getElementId("arc"), - name: "annotation-arc", - attrs: __assign({ path }, style) - }); - }; - return ArcAnnotation2; -}(group_component_default); -var arc_default2 = ArcAnnotation; - -// node_modules/@antv/component/esm/annotation/region.js -var RegionAnnotation = function(_super) { - __extends(RegionAnnotation2, _super); - function RegionAnnotation2() { - return _super !== null && _super.apply(this, arguments) || this; - } - RegionAnnotation2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "annotation", type: "region", locationType: "region", start: null, end: null, style: {}, defaultCfg: { - style: { - lineWidth: 0, - fill: theme_default.regionColor, - opacity: 0.4 - } - } }); - }; - RegionAnnotation2.prototype.renderInner = function(group3) { - this.renderRegion(group3); - }; - RegionAnnotation2.prototype.renderRegion = function(group3) { - var start = this.get("start"); - var end2 = this.get("end"); - var style = this.get("style"); - var bbox = regionToBBox({ start, end: end2 }); - this.addShape(group3, { - type: "rect", - id: this.getElementId("region"), - name: "annotation-region", - attrs: __assign({ x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height }, style) - }); - }; - return RegionAnnotation2; -}(group_component_default); -var region_default = RegionAnnotation; - -// node_modules/@antv/component/esm/annotation/image.js -var ImageAnnotation = function(_super) { - __extends(ImageAnnotation2, _super); - function ImageAnnotation2() { - return _super !== null && _super.apply(this, arguments) || this; - } - ImageAnnotation2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "annotation", type: "image", locationType: "region", start: null, end: null, src: null, style: {} }); - }; - ImageAnnotation2.prototype.renderInner = function(group3) { - this.renderImage(group3); - }; - ImageAnnotation2.prototype.getImageAttrs = function() { - var start = this.get("start"); - var end2 = this.get("end"); - var style = this.get("style"); - var bbox = regionToBBox({ start, end: end2 }); - var src = this.get("src"); - return __assign({ x: bbox.x, y: bbox.y, img: src, width: bbox.width, height: bbox.height }, style); - }; - ImageAnnotation2.prototype.renderImage = function(group3) { - this.addShape(group3, { - type: "image", - id: this.getElementId("image"), - name: "annotation-image", - attrs: this.getImageAttrs() - }); - }; - return ImageAnnotation2; -}(group_component_default); -var image_default = ImageAnnotation; - -// node_modules/@antv/component/esm/annotation/data-marker.js -var import_util68 = __toModule(require_lib()); -var DataMarkerAnnotation = function(_super) { - __extends(DataMarkerAnnotation2, _super); - function DataMarkerAnnotation2() { - return _super !== null && _super.apply(this, arguments) || this; - } - DataMarkerAnnotation2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "annotation", type: "dataMarker", locationType: "point", x: 0, y: 0, point: {}, line: {}, text: {}, direction: "upward", autoAdjust: true, coordinateBBox: null, defaultCfg: { - point: { - display: true, - style: { - r: 3, - fill: "#FFFFFF", - stroke: "#1890FF", - lineWidth: 2 - } - }, - line: { - display: true, - length: 20, - style: { - stroke: theme_default.lineColor, - lineWidth: 1 - } - }, - text: { - content: "", - display: true, - style: { - fill: theme_default.textColor, - opacity: 0.65, - fontSize: 12, - textAlign: "start", - fontFamily: theme_default.fontFamily - } - } - } }); - }; - DataMarkerAnnotation2.prototype.renderInner = function(group3) { - if ((0, import_util68.get)(this.get("line"), "display")) { - this.renderLine(group3); - } - if ((0, import_util68.get)(this.get("text"), "display")) { - this.renderText(group3); - } - if ((0, import_util68.get)(this.get("point"), "display")) { - this.renderPoint(group3); - } - if (this.get("autoAdjust")) { - this.autoAdjust(group3); - } - }; - DataMarkerAnnotation2.prototype.applyOffset = function() { - this.moveElementTo(this.get("group"), { - x: this.get("x") + this.get("offsetX"), - y: this.get("y") + this.get("offsetY") - }); - }; - DataMarkerAnnotation2.prototype.renderPoint = function(group3) { - var point2 = this.getShapeAttrs().point; - this.addShape(group3, { - type: "circle", - id: this.getElementId("point"), - name: "annotation-point", - attrs: point2 - }); - }; - DataMarkerAnnotation2.prototype.renderLine = function(group3) { - var line2 = this.getShapeAttrs().line; - this.addShape(group3, { - type: "path", - id: this.getElementId("line"), - name: "annotation-line", - attrs: line2 - }); - }; - DataMarkerAnnotation2.prototype.renderText = function(group3) { - var textAttrs = this.getShapeAttrs().text; - var x6 = textAttrs.x, y5 = textAttrs.y, text = textAttrs.text, style = __rest(textAttrs, ["x", "y", "text"]); - var _a6 = this.get("text"), background = _a6.background, maxLength = _a6.maxLength, autoEllipsis = _a6.autoEllipsis, isVertival = _a6.isVertival, ellipsisPosition = _a6.ellipsisPosition; - var tagCfg = { - x: x6, - y: y5, - id: this.getElementId("text"), - name: "annotation-text", - content: text, - style, - background, - maxLength, - autoEllipsis, - isVertival, - ellipsisPosition - }; - renderTag(group3, tagCfg); - }; - DataMarkerAnnotation2.prototype.autoAdjust = function(group3) { - var direction3 = this.get("direction"); - var x6 = this.get("x"); - var y5 = this.get("y"); - var lineLength = (0, import_util68.get)(this.get("line"), "length", 0); - var coordinateBBox = this.get("coordinateBBox"); - var _a6 = group3.getBBox(), minX = _a6.minX, maxX = _a6.maxX, minY = _a6.minY, maxY2 = _a6.maxY; - var textGroup = group3.findById(this.getElementId("text-group")); - var textShape = group3.findById(this.getElementId("text")); - var lineShape = group3.findById(this.getElementId("line")); - if (!coordinateBBox) { - return; - } - if (textGroup) { - if (x6 + minX <= coordinateBBox.minX) { - var overflow = coordinateBBox.minX - (x6 + minX); - applyTranslate(textGroup, textGroup.attr("x") + overflow, textGroup.attr("y")); - } - if (x6 + maxX >= coordinateBBox.maxX) { - var overflow = x6 + maxX - coordinateBBox.maxX; - applyTranslate(textGroup, textGroup.attr("x") - overflow, textGroup.attr("y")); - } - } - if (direction3 === "upward" && y5 + minY <= coordinateBBox.minY || direction3 !== "upward" && y5 + maxY2 >= coordinateBBox.maxY) { - var textBaseline = void 0; - var factor = void 0; - if (direction3 === "upward" && y5 + minY <= coordinateBBox.minY) { - textBaseline = "top"; - factor = 1; - } else { - textBaseline = "bottom"; - factor = -1; - } - textShape.attr("textBaseline", textBaseline); - if (lineShape) { - lineShape.attr("path", [ - ["M", 0, 0], - ["L", 0, lineLength * factor] - ]); - } - applyTranslate(textGroup, textGroup.attr("x"), (lineLength + 2) * factor); - } - }; - DataMarkerAnnotation2.prototype.getShapeAttrs = function() { - var lineDisplay = (0, import_util68.get)(this.get("line"), "display"); - var pointStyle = (0, import_util68.get)(this.get("point"), "style", {}); - var lineStyle = (0, import_util68.get)(this.get("line"), "style", {}); - var textStyle2 = (0, import_util68.get)(this.get("text"), "style", {}); - var direction3 = this.get("direction"); - var lineLength = lineDisplay ? (0, import_util68.get)(this.get("line"), "length", 0) : 0; - var factor = direction3 === "upward" ? -1 : 1; - return { - point: __assign({ x: 0, y: 0 }, pointStyle), - line: __assign({ path: [ - ["M", 0, 0], - ["L", 0, lineLength * factor] - ] }, lineStyle), - text: __assign({ x: 0, y: (lineLength + 2) * factor, text: (0, import_util68.get)(this.get("text"), "content", ""), textBaseline: direction3 === "upward" ? "bottom" : "top" }, textStyle2) - }; - }; - return DataMarkerAnnotation2; -}(group_component_default); -var data_marker_default = DataMarkerAnnotation; - -// node_modules/@antv/component/esm/annotation/data-region.js -var import_util69 = __toModule(require_lib()); -var DataRegionAnnotation = function(_super) { - __extends(DataRegionAnnotation2, _super); - function DataRegionAnnotation2() { - return _super !== null && _super.apply(this, arguments) || this; - } - DataRegionAnnotation2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "annotation", type: "dataRegion", locationType: "points", points: [], lineLength: 0, region: {}, text: {}, defaultCfg: { - region: { - style: { - lineWidth: 0, - fill: theme_default.regionColor, - opacity: 0.4 - } - }, - text: { - content: "", - style: { - textAlign: "center", - textBaseline: "bottom", - fontSize: 12, - fill: theme_default.textColor, - fontFamily: theme_default.fontFamily - } - } - } }); - }; - DataRegionAnnotation2.prototype.renderInner = function(group3) { - var regionStyle = (0, import_util69.get)(this.get("region"), "style", {}); - var textStyle2 = (0, import_util69.get)(this.get("text"), "style", {}); - var lineLength = this.get("lineLength") || 0; - var points = this.get("points"); - if (!points.length) { - return; - } - var bbox = pointsToBBox(points); - var path = []; - path.push(["M", points[0].x, bbox.minY - lineLength]); - points.forEach(function(point2) { - path.push(["L", point2.x, point2.y]); - }); - path.push(["L", points[points.length - 1].x, points[points.length - 1].y - lineLength]); - this.addShape(group3, { - type: "path", - id: this.getElementId("region"), - name: "annotation-region", - attrs: __assign({ path }, regionStyle) - }); - var textCfg = __assign({ id: this.getElementId("text"), name: "annotation-text", x: (bbox.minX + bbox.maxX) / 2, y: bbox.minY - lineLength }, this.get("text")); - renderTag(group3, textCfg); - }; - return DataRegionAnnotation2; -}(group_component_default); -var data_region_default = DataRegionAnnotation; - -// node_modules/@antv/component/esm/annotation/region-filter.js -var import_util71 = __toModule(require_lib()); -var RegionFilterAnnotation = function(_super) { - __extends(RegionFilterAnnotation2, _super); - function RegionFilterAnnotation2() { - return _super !== null && _super.apply(this, arguments) || this; - } - RegionFilterAnnotation2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "annotation", type: "regionFilter", locationType: "region", start: null, end: null, color: null, shape: [] }); - }; - RegionFilterAnnotation2.prototype.renderInner = function(group3) { - var _this = this; - var start = this.get("start"); - var end2 = this.get("end"); - var layer = this.addGroup(group3, { - id: this.getElementId("region-filter"), - capture: false - }); - (0, import_util71.each)(this.get("shapes"), function(shape, shapeIdx) { - var type2 = shape.get("type"); - var attrs = (0, import_util71.clone)(shape.attr()); - _this.adjustShapeAttrs(attrs); - _this.addShape(layer, { - id: _this.getElementId("shape-" + type2 + "-" + shapeIdx), - capture: false, - type: type2, - attrs - }); - }); - var clipBBox = regionToBBox({ start, end: end2 }); - layer.setClip({ - type: "rect", - attrs: { - x: clipBBox.minX, - y: clipBBox.minY, - width: clipBBox.width, - height: clipBBox.height - } - }); - }; - RegionFilterAnnotation2.prototype.adjustShapeAttrs = function(attr) { - var color4 = this.get("color"); - if (attr.fill) { - attr.fill = attr.fillStyle = color4; - } - attr.stroke = attr.strokeStyle = color4; - }; - return RegionFilterAnnotation2; -}(group_component_default); -var region_filter_default = RegionFilterAnnotation; - -// node_modules/@antv/component/esm/annotation/shape.js -var import_util73 = __toModule(require_lib()); -var ShapeAnnotation = function(_super) { - __extends(ShapeAnnotation2, _super); - function ShapeAnnotation2() { - return _super !== null && _super.apply(this, arguments) || this; - } - ShapeAnnotation2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "annotation", type: "shape", draw: import_util73.noop }); - }; - ShapeAnnotation2.prototype.renderInner = function(group3) { - var render = this.get("render"); - if ((0, import_util73.isFunction)(render)) { - render(group3); - } - }; - return ShapeAnnotation2; -}(group_component_default); -var shape_default3 = ShapeAnnotation; - -// node_modules/@antv/component/esm/annotation/html.js -var import_util76 = __toModule(require_lib()); - -// node_modules/@antv/component/esm/abstract/html-component.js -var import_util74 = __toModule(require_lib()); -var HtmlComponent = function(_super) { - __extends(HtmlComponent2, _super); - function HtmlComponent2() { - return _super !== null && _super.apply(this, arguments) || this; - } - HtmlComponent2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { container: null, containerTpl: "
", updateAutoRender: true, containerClassName: "", parent: null }); - }; - HtmlComponent2.prototype.getContainer = function() { - return this.get("container"); - }; - HtmlComponent2.prototype.show = function() { - var container2 = this.get("container"); - container2.style.display = ""; - this.set("visible", true); - }; - HtmlComponent2.prototype.hide = function() { - var container2 = this.get("container"); - container2.style.display = "none"; - this.set("visible", false); - }; - HtmlComponent2.prototype.setCapture = function(capture) { - var container2 = this.getContainer(); - var value2 = capture ? "auto" : "none"; - container2.style.pointerEvents = value2; - this.set("capture", capture); - }; - HtmlComponent2.prototype.getBBox = function() { - var container2 = this.getContainer(); - var x6 = parseFloat(container2.style.left) || 0; - var y5 = parseFloat(container2.style.top) || 0; - return createBBox(x6, y5, container2.clientWidth, container2.clientHeight); - }; - HtmlComponent2.prototype.clear = function() { - var container2 = this.get("container"); - clearDom(container2); - }; - HtmlComponent2.prototype.destroy = function() { - this.removeEvent(); - this.removeDom(); - _super.prototype.destroy.call(this); - }; - HtmlComponent2.prototype.init = function() { - _super.prototype.init.call(this); - this.initContainer(); - this.initDom(); - this.resetStyles(); - this.applyStyles(); - this.initEvent(); - this.initCapture(); - this.initVisible(); - }; - HtmlComponent2.prototype.initCapture = function() { - this.setCapture(this.get("capture")); - }; - HtmlComponent2.prototype.initVisible = function() { - if (!this.get("visible")) { - this.hide(); - } else { - this.show(); - } - }; - HtmlComponent2.prototype.initDom = function() { - }; - HtmlComponent2.prototype.initContainer = function() { - var container2 = this.get("container"); - if ((0, import_util74.isNil)(container2)) { - container2 = this.createDom(); - var parent_1 = this.get("parent"); - if ((0, import_util74.isString)(parent_1)) { - parent_1 = document.getElementById(parent_1); - this.set("parent", parent_1); - } - parent_1.appendChild(container2); - if (this.get("containerId")) { - container2.setAttribute("id", this.get("containerId")); - } - this.set("container", container2); - } else if ((0, import_util74.isString)(container2)) { - container2 = document.getElementById(container2); - this.set("container", container2); - } - if (!this.get("parent")) { - this.set("parent", container2.parentNode); - } - }; - HtmlComponent2.prototype.resetStyles = function() { - var style = this.get("domStyles"); - var defaultStyles = this.get("defaultStyles"); - if (!style) { - style = defaultStyles; - } else { - style = (0, import_util74.deepMix)({}, defaultStyles, style); - } - this.set("domStyles", style); - }; - HtmlComponent2.prototype.applyStyles = function() { - var domStyles = this.get("domStyles"); - if (!domStyles) { - return; - } - var container2 = this.getContainer(); - this.applyChildrenStyles(container2, domStyles); - var containerClassName = this.get("containerClassName"); - if (containerClassName && hasClass(container2, containerClassName)) { - var containerCss = domStyles[containerClassName]; - modifyCSS(container2, containerCss); - } - }; - HtmlComponent2.prototype.applyChildrenStyles = function(element, styles) { - (0, import_util74.each)(styles, function(style, name) { - var elements = element.getElementsByClassName(name); - (0, import_util74.each)(elements, function(el) { - modifyCSS(el, style); - }); - }); - }; - HtmlComponent2.prototype.applyStyle = function(cssName, dom) { - var domStyles = this.get("domStyles"); - modifyCSS(dom, domStyles[cssName]); - }; - HtmlComponent2.prototype.createDom = function() { - var containerTpl = this.get("containerTpl"); - return createDom(containerTpl); - }; - HtmlComponent2.prototype.initEvent = function() { - }; - HtmlComponent2.prototype.removeDom = function() { - var container2 = this.get("container"); - container2 && container2.parentNode && container2.parentNode.removeChild(container2); - }; - HtmlComponent2.prototype.removeEvent = function() { - }; - HtmlComponent2.prototype.updateInner = function(cfg) { - if ((0, import_util74.hasKey)(cfg, "domStyles")) { - this.resetStyles(); - this.applyStyles(); - } - this.resetPosition(); - }; - HtmlComponent2.prototype.resetPosition = function() { - }; - ; - return HtmlComponent2; -}(component_default); -var html_component_default = HtmlComponent; - -// node_modules/@antv/component/esm/annotation/html.js -var HtmlAnnotation = function(_super) { - __extends(HtmlAnnotation2, _super); - function HtmlAnnotation2() { - return _super !== null && _super.apply(this, arguments) || this; - } - HtmlAnnotation2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "annotation", type: "html", locationType: "point", x: 0, y: 0, containerTpl: '
', alignX: "left", alignY: "top", html: "", zIndex: 7 }); - }; - HtmlAnnotation2.prototype.render = function() { - var container2 = this.getContainer(); - var html = this.get("html"); - clearDom(container2); - var rst = (0, import_util76.isFunction)(html) ? html(container2) : html; - if ((0, import_util76.isElement)(rst)) { - container2.appendChild(rst); - } else if ((0, import_util76.isString)(rst)) { - container2.appendChild(createDom(rst)); - } - this.resetPosition(); - }; - HtmlAnnotation2.prototype.resetPosition = function() { - var container2 = this.getContainer(); - var _a6 = this.getLocation(), x6 = _a6.x, y5 = _a6.y; - var alignX = this.get("alignX"); - var alignY = this.get("alignY"); - var offsetX = this.get("offsetX"); - var offsetY = this.get("offsetY"); - var domWidth = getOuterWidth(container2); - var domHeight = getOuterHeight(container2); - var position2 = { - x: x6, - y: y5 - }; - if (alignX === "middle") { - position2.x -= Math.round(domWidth / 2); - } else if (alignX === "right") { - position2.x -= Math.round(domWidth); - } - if (alignY === "middle") { - position2.y -= Math.round(domHeight / 2); - } else if (alignY === "bottom") { - position2.y -= Math.round(domHeight); - } - if (offsetX) { - position2.x += offsetX; - } - if (offsetY) { - position2.y += offsetY; - } - modifyCSS(container2, { - position: "absolute", - left: position2.x + "px", - top: position2.y + "px", - zIndex: this.get("zIndex") - }); - }; - return HtmlAnnotation2; -}(html_component_default); -var html_default = HtmlAnnotation; - -// node_modules/@antv/component/esm/axis/index.js -var axis_exports = {}; -__export(axis_exports, { - Base: () => base_default8, - Circle: () => circle_default2, - Line: () => line_default4 -}); - -// node_modules/@antv/component/esm/axis/line.js -var import_util83 = __toModule(require_lib()); - -// node_modules/@antv/component/esm/axis/base.js -var import_util79 = __toModule(require_lib()); - -// node_modules/@antv/component/esm/util/state.js -var import_util78 = __toModule(require_lib()); -function getStatesStyle(item, elementName, stateStyles) { - var styleName = elementName + "Style"; - var styles = null; - (0, import_util78.each)(stateStyles, function(v3, state2) { - if (item[state2] && v3[styleName]) { - if (!styles) { - styles = {}; - } - (0, import_util78.mix)(styles, v3[styleName]); - } - }); - return styles; -} - -// node_modules/@antv/component/esm/axis/base.js -var AxisBase = function(_super) { - __extends(AxisBase2, _super); - function AxisBase2() { - return _super !== null && _super.apply(this, arguments) || this; - } - AxisBase2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { - name: "axis", - ticks: [], - line: {}, - tickLine: {}, - subTickLine: null, - title: null, - label: {}, - verticalFactor: 1, - verticalLimitLength: null, - overlapOrder: ["autoRotate", "autoEllipsis", "autoHide"], - tickStates: {}, - optimize: {}, - defaultCfg: { - line: { - style: { - lineWidth: 1, - stroke: theme_default.lineColor - } - }, - tickLine: { - style: { - lineWidth: 1, - stroke: theme_default.lineColor - }, - alignTick: true, - length: 5, - displayWithLabel: true - }, - subTickLine: { - style: { - lineWidth: 1, - stroke: theme_default.lineColor - }, - count: 4, - length: 2 - }, - label: { - autoRotate: true, - autoHide: false, - autoEllipsis: false, - style: { - fontSize: 12, - fill: theme_default.textColor, - fontFamily: theme_default.fontFamily, - fontWeight: "normal" - }, - offset: 10, - offsetX: 0, - offsetY: 0 - }, - title: { - autoRotate: true, - spacing: 5, - position: "center", - style: { - fontSize: 12, - fill: theme_default.textColor, - textBaseline: "middle", - fontFamily: theme_default.fontFamily, - textAlign: "center" - } - }, - tickStates: { - active: { - labelStyle: { - fontWeight: 500 - }, - tickLineStyle: { - lineWidth: 2 - } - }, - inactive: { - labelStyle: { - fill: theme_default.uncheckedColor - } - } - }, - optimize: { - enable: true, - threshold: 400 - } - }, - theme: {} - }); - }; - AxisBase2.prototype.renderInner = function(group3) { - if (this.get("line")) { - this.drawLine(group3); - } - this.drawTicks(group3); - if (this.get("title")) { - this.drawTitle(group3); - } - }; - AxisBase2.prototype.isList = function() { - return true; - }; - AxisBase2.prototype.getItems = function() { - return this.get("ticks"); - }; - AxisBase2.prototype.setItems = function(items) { - this.update({ - ticks: items - }); - }; - AxisBase2.prototype.updateItem = function(item, cfg) { - (0, import_util79.mix)(item, cfg); - this.clear(); - this.render(); - }; - AxisBase2.prototype.clearItems = function() { - var itemGroup = this.getElementByLocalId("label-group"); - itemGroup && itemGroup.clear(); - }; - AxisBase2.prototype.setItemState = function(item, state2, value2) { - item[state2] = value2; - this.updateTickStates(item); - }; - AxisBase2.prototype.hasState = function(item, state2) { - return !!item[state2]; - }; - AxisBase2.prototype.getItemStates = function(item) { - var tickStates = this.get("tickStates"); - var rst = []; - (0, import_util79.each)(tickStates, function(v3, k4) { - if (item[k4]) { - rst.push(k4); - } - }); - return rst; - }; - AxisBase2.prototype.clearItemsState = function(state2) { - var _this = this; - var items = this.getItemsByState(state2); - (0, import_util79.each)(items, function(item) { - _this.setItemState(item, state2, false); - }); - }; - AxisBase2.prototype.getItemsByState = function(state2) { - var _this = this; - var items = this.getItems(); - return (0, import_util79.filter)(items, function(item) { - return _this.hasState(item, state2); - }); - }; - AxisBase2.prototype.getSidePoint = function(point2, offset) { - var self2 = this; - var vector = self2.getSideVector(offset, point2); - return { - x: point2.x + vector[0], - y: point2.y + vector[1] - }; - }; - AxisBase2.prototype.getTextAnchor = function(vector) { - var align; - if ((0, import_util79.isNumberEqual)(vector[0], 0)) { - align = "center"; - } else if (vector[0] > 0) { - align = "start"; - } else if (vector[0] < 0) { - align = "end"; - } - return align; - }; - AxisBase2.prototype.getTextBaseline = function(vector) { - var base; - if ((0, import_util79.isNumberEqual)(vector[1], 0)) { - base = "middle"; - } else if (vector[1] > 0) { - base = "top"; - } else if (vector[1] < 0) { - base = "bottom"; - } - return base; - }; - AxisBase2.prototype.processOverlap = function(labelGroup) { - }; - AxisBase2.prototype.drawLine = function(group3) { - var path = this.getLinePath(); - var line2 = this.get("line"); - this.addShape(group3, { - type: "path", - id: this.getElementId("line"), - name: "axis-line", - attrs: (0, import_util79.mix)({ - path - }, line2.style) - }); - }; - AxisBase2.prototype.getTickLineItems = function(ticks) { - var _this = this; - var tickLineItems = []; - var tickLine = this.get("tickLine"); - var alignTick = tickLine.alignTick; - var tickLineLength = tickLine.length; - var tickSegment = 1; - var tickCount = ticks.length; - if (tickCount >= 2) { - tickSegment = ticks[1].value - ticks[0].value; - } - (0, import_util79.each)(ticks, function(tick) { - var point2 = tick.point; - if (!alignTick) { - point2 = _this.getTickPoint(tick.value - tickSegment / 2); - } - var endPoint = _this.getSidePoint(point2, tickLineLength); - tickLineItems.push({ - startPoint: point2, - tickValue: tick.value, - endPoint, - tickId: tick.id, - id: "tickline-" + tick.id - }); - }); - return tickLineItems; - }; - AxisBase2.prototype.getSubTickLineItems = function(tickLineItems) { - var subTickLineItems = []; - var subTickLine = this.get("subTickLine"); - var subCount = subTickLine.count; - var tickLineCount = tickLineItems.length; - if (tickLineCount >= 2) { - for (var i4 = 0; i4 < tickLineCount - 1; i4++) { - var pre = tickLineItems[i4]; - var next = tickLineItems[i4 + 1]; - for (var j4 = 0; j4 < subCount; j4++) { - var percent2 = (j4 + 1) / (subCount + 1); - var tickValue = (1 - percent2) * pre.tickValue + percent2 * next.tickValue; - var point2 = this.getTickPoint(tickValue); - var endPoint = this.getSidePoint(point2, subTickLine.length); - subTickLineItems.push({ - startPoint: point2, - endPoint, - tickValue, - id: "sub-" + pre.id + "-" + j4 - }); - } - } - } - return subTickLineItems; - }; - AxisBase2.prototype.getTickLineAttrs = function(tickItem, type2, index2, tickItems) { - var style = this.get(type2).style; - var item = { - points: [tickItem.startPoint, tickItem.endPoint] - }; - var defaultTickLineStyle = (0, import_util79.get)(this.get("theme"), ["tickLine", "style"], {}); - style = (0, import_util79.isFunction)(style) ? (0, import_util79.mix)({}, defaultTickLineStyle, style(item, index2, tickItems)) : style; - var startPoint = tickItem.startPoint, endPoint = tickItem.endPoint; - return __assign({ x1: startPoint.x, y1: startPoint.y, x2: endPoint.x, y2: endPoint.y }, style); - }; - AxisBase2.prototype.drawTick = function(tickItem, tickLineGroup, type2, index2, tickItems) { - this.addShape(tickLineGroup, { - type: "line", - id: this.getElementId(tickItem.id), - name: "axis-" + type2, - attrs: this.getTickLineAttrs(tickItem, type2, index2, tickItems) - }); - }; - AxisBase2.prototype.drawTickLines = function(group3) { - var _this = this; - var ticks = this.get("ticks"); - var subTickLine = this.get("subTickLine"); - var tickLineItems = this.getTickLineItems(ticks); - var tickLineGroup = this.addGroup(group3, { - name: "axis-tickline-group", - id: this.getElementId("tickline-group") - }); - var tickCfg = this.get("tickLine"); - (0, import_util79.each)(tickLineItems, function(item, index2) { - if (tickCfg.displayWithLabel) { - var labelId = _this.getElementId("label-" + item.tickId); - if (group3.findById(labelId)) { - _this.drawTick(item, tickLineGroup, "tickLine", index2, tickLineItems); - } - } else { - _this.drawTick(item, tickLineGroup, "tickLine", index2, tickLineItems); - } - }); - if (subTickLine) { - var subTickLineItems_1 = this.getSubTickLineItems(tickLineItems); - (0, import_util79.each)(subTickLineItems_1, function(item, index2) { - _this.drawTick(item, tickLineGroup, "subTickLine", index2, subTickLineItems_1); - }); - } - }; - AxisBase2.prototype.processTicks = function() { - var _this = this; - var ticks = this.get("ticks"); - (0, import_util79.each)(ticks, function(tick) { - tick.point = _this.getTickPoint(tick.value); - if ((0, import_util79.isNil)(tick.id)) { - tick.id = tick.name; - } - }); - }; - AxisBase2.prototype.drawTicks = function(group3) { - var _this = this; - this.optimizeTicks(); - this.processTicks(); - if (this.get("label")) { - this.drawLabels(group3); - } - if (this.get("tickLine")) { - this.drawTickLines(group3); - } - var ticks = this.get("ticks"); - (0, import_util79.each)(ticks, function(tick) { - _this.applyTickStates(tick, group3); - }); - }; - AxisBase2.prototype.optimizeTicks = function() { - var optimize = this.get("optimize"); - var ticks = this.get("ticks"); - if (optimize && optimize.enable && optimize.threshold > 0) { - var len5 = (0, import_util79.size)(ticks); - if (len5 > optimize.threshold) { - var page_1 = Math.ceil(len5 / optimize.threshold); - var optimizedTicks = ticks.filter(function(tick, idx) { - return idx % page_1 === 0; - }); - this.set("ticks", optimizedTicks); - this.set("originalTicks", ticks); - } - } - }; - AxisBase2.prototype.getLabelAttrs = function(tick, index2, ticks) { - var labelCfg = this.get("label"); - var offset = labelCfg.offset, offsetX = labelCfg.offsetX, offsetY = labelCfg.offsetY, rotate8 = labelCfg.rotate, formatter = labelCfg.formatter; - var point2 = this.getSidePoint(tick.point, offset); - var vector = this.getSideVector(offset, point2); - var text = formatter ? formatter(tick.name, tick, index2) : tick.name; - var style = labelCfg.style; - style = (0, import_util79.isFunction)(style) ? (0, import_util79.get)(this.get("theme"), ["label", "style"], {}) : style; - var attrs = (0, import_util79.mix)({ - x: point2.x + offsetX, - y: point2.y + offsetY, - text, - textAlign: this.getTextAnchor(vector), - textBaseline: this.getTextBaseline(vector) - }, style); - if (rotate8) { - attrs.matrix = getMatrixByAngle(point2, rotate8); - } - return attrs; - }; - AxisBase2.prototype.drawLabels = function(group3) { - var _this = this; - var ticks = this.get("ticks"); - var labelGroup = this.addGroup(group3, { - name: "axis-label-group", - id: this.getElementId("label-group") - }); - (0, import_util79.each)(ticks, function(tick, index2) { - _this.addShape(labelGroup, { - type: "text", - name: "axis-label", - id: _this.getElementId("label-" + tick.id), - attrs: _this.getLabelAttrs(tick, index2, ticks), - delegateObject: { - tick, - item: tick, - index: index2 - } - }); - }); - this.processOverlap(labelGroup); - var labels = labelGroup.getChildren(); - var defaultLabelStyle3 = (0, import_util79.get)(this.get("theme"), ["label", "style"], {}); - var _a6 = this.get("label"), style = _a6.style, formatter = _a6.formatter; - if ((0, import_util79.isFunction)(style)) { - var afterProcessTicks_1 = labels.map(function(label17) { - return (0, import_util79.get)(label17.get("delegateObject"), "tick"); - }); - (0, import_util79.each)(labels, function(label17, index2) { - var tick = label17.get("delegateObject").tick; - var text = formatter ? formatter(tick.name, tick, index2) : tick.name; - var newStyle = (0, import_util79.mix)({}, defaultLabelStyle3, style(text, index2, afterProcessTicks_1)); - label17.attr(newStyle); - }); - } - }; - AxisBase2.prototype.getTitleAttrs = function() { - var titleCfg = this.get("title"); - var style = titleCfg.style, position2 = titleCfg.position, offset = titleCfg.offset, _a6 = titleCfg.spacing, spacing = _a6 === void 0 ? 0 : _a6, autoRotate = titleCfg.autoRotate; - var titleHeight = style.fontSize; - var percent2 = 0.5; - if (position2 === "start") { - percent2 = 0; - } else if (position2 === "end") { - percent2 = 1; - } - var point2 = this.getTickPoint(percent2); - var titlePoint = this.getSidePoint(point2, offset || spacing + titleHeight / 2); - var attrs = (0, import_util79.mix)({ - x: titlePoint.x, - y: titlePoint.y, - text: titleCfg.text - }, style); - var rotate8 = titleCfg.rotate; - var angle3 = rotate8; - if ((0, import_util79.isNil)(rotate8) && autoRotate) { - var vector = this.getAxisVector(point2); - var v1 = [1, 0]; - angle3 = ext_exports.angleTo(vector, v1, true); - } - if (angle3) { - var matrix = getMatrixByAngle(titlePoint, angle3); - attrs.matrix = matrix; - } - return attrs; - }; - AxisBase2.prototype.drawTitle = function(group3) { - this.addShape(group3, { - type: "text", - id: this.getElementId("title"), - name: "axis-title", - attrs: this.getTitleAttrs() - }); - }; - AxisBase2.prototype.applyTickStates = function(tick, group3) { - var states = this.getItemStates(tick); - if (states.length) { - var tickStates = this.get("tickStates"); - var labelId = this.getElementId("label-" + tick.id); - var labelShape = group3.findById(labelId); - if (labelShape) { - var labelStateStyle = getStatesStyle(tick, "label", tickStates); - labelStateStyle && labelShape.attr(labelStateStyle); - } - var tickLineId = this.getElementId("tickline-" + tick.id); - var tickLineShape = group3.findById(tickLineId); - if (tickLineShape) { - var tickLineStateStyle = getStatesStyle(tick, "tickLine", tickStates); - tickLineStateStyle && tickLineShape.attr(tickLineStateStyle); - } - } - }; - AxisBase2.prototype.updateTickStates = function(tick) { - var states = this.getItemStates(tick); - var tickStates = this.get("tickStates"); - var labelCfg = this.get("label"); - var labelShape = this.getElementByLocalId("label-" + tick.id); - var tickLineCfg = this.get("tickLine"); - var tickLineShape = this.getElementByLocalId("tickline-" + tick.id); - if (states.length) { - if (labelShape) { - var labelStateStyle = getStatesStyle(tick, "label", tickStates); - labelStateStyle && labelShape.attr(labelStateStyle); - } - if (tickLineShape) { - var tickLineStateStyle = getStatesStyle(tick, "tickLine", tickStates); - tickLineStateStyle && tickLineShape.attr(tickLineStateStyle); - } - } else { - if (labelShape) { - labelShape.attr(labelCfg.style); - } - if (tickLineShape) { - tickLineShape.attr(tickLineCfg.style); - } - } - }; - return AxisBase2; -}(group_component_default); -var base_default8 = AxisBase; - -// node_modules/@antv/component/esm/axis/overlap/index.js -var overlap_exports = {}; -__export(overlap_exports, { - autoEllipsis: () => auto_ellipsis_exports, - autoHide: () => auto_hide_exports, - autoRotate: () => auto_rotate_exports -}); - -// node_modules/@antv/component/esm/axis/overlap/auto-ellipsis.js -var auto_ellipsis_exports = {}; -__export(auto_ellipsis_exports, { - ellipsisHead: () => ellipsisHead, - ellipsisMiddle: () => ellipsisMiddle, - ellipsisTail: () => ellipsisTail, - getDefault: () => getDefault -}); -var import_util80 = __toModule(require_lib()); -function ellipseLabels(isVertical2, labelGroup, limitLength, position2) { - var children = labelGroup.getChildren(); - var ellipsisFlag = false; - (0, import_util80.each)(children, function(label17) { - var rst = ellipsisLabel(isVertical2, label17, limitLength, position2); - ellipsisFlag = ellipsisFlag || rst; - }); - return ellipsisFlag; -} -function getDefault() { - return ellipsisTail; -} -function ellipsisHead(isVertical2, labelGroup, limitLength) { - return ellipseLabels(isVertical2, labelGroup, limitLength, "head"); -} -function ellipsisTail(isVertical2, labelGroup, limitLength) { - return ellipseLabels(isVertical2, labelGroup, limitLength, "tail"); -} -function ellipsisMiddle(isVertical2, labelGroup, limitLength) { - return ellipseLabels(isVertical2, labelGroup, limitLength, "middle"); -} - -// node_modules/@antv/component/esm/axis/overlap/auto-hide.js -var auto_hide_exports = {}; -__export(auto_hide_exports, { - equidistance: () => equidistance, - equidistanceWithReverseBoth: () => equidistanceWithReverseBoth, - getDefault: () => getDefault2, - reserveBoth: () => reserveBoth, - reserveFirst: () => reserveFirst, - reserveLast: () => reserveLast -}); -function isRotate(label17) { - var matrix = label17.attr("matrix"); - return matrix && matrix[0] !== 1; -} -function getRotateAngle(label17) { - var angle3 = isRotate(label17) ? getAngleByMatrix(label17.attr("matrix")) : 0; - return angle3 % 360; -} -function isOverlap(isVertical2, first, second, minGap) { - var overlap2 = false; - var angle3 = getRotateAngle(first); - var distance15 = isVertical2 ? Math.abs(second.attr("y") - first.attr("y")) : Math.abs(second.attr("x") - first.attr("x")); - var prevBBox = (isVertical2 ? second.attr("y") > first.attr("y") : second.attr("x") > first.attr("x")) ? first.getBBox() : second.getBBox(); - if (isVertical2) { - var ratio = Math.abs(Math.cos(angle3)); - if (near(ratio, 0, Math.PI / 180)) { - overlap2 = prevBBox.width + minGap > distance15; - } else { - overlap2 = prevBBox.height / ratio + minGap > distance15; - } - } else { - var ratio = Math.abs(Math.sin(angle3)); - if (near(ratio, 0, Math.PI / 180)) { - overlap2 = prevBBox.width + minGap > distance15; - } else { - overlap2 = prevBBox.height / ratio + minGap > distance15; - } - } - return overlap2; -} -function reserveOne(isVertical2, labelsGroup, reversed, autoHideCfg) { - var minGap = (autoHideCfg === null || autoHideCfg === void 0 ? void 0 : autoHideCfg.minGap) || 0; - var labels = labelsGroup.getChildren().slice().filter(function(item) { - return item.get("visible"); - }); - if (!labels.length) { - return false; - } - var hasHide = false; - if (reversed) { - labels.reverse(); - } - var count2 = labels.length; - var first = labels[0]; - var prev = first; - for (var i4 = 1; i4 < count2; i4++) { - var label17 = labels[i4]; - var curBBox = label17.getBBox(); - var isHide = isOverlap(isVertical2, prev, label17, minGap); - if (isHide) { - label17.hide(); - hasHide = true; - } else { - prev = label17; - } - } - return hasHide; -} -function parityHide(isVertical2, labelsGroup, autoHideCfg) { - var minGap = (autoHideCfg === null || autoHideCfg === void 0 ? void 0 : autoHideCfg.minGap) || 0; - var labels = labelsGroup.getChildren().slice(); - if (labels.length < 2) { - return false; - } - var hasHide = false; - var first = labels[0]; - var firstBBox = first.getBBox(); - var second = labels[1]; - var count2 = labels.length; - var angle3 = getRotateAngle(first); - var distance15 = isVertical2 ? Math.abs(second.attr("y") - first.attr("y")) : Math.abs(second.attr("x") - first.attr("x")); - var interval3 = 0; - if (isVertical2) { - var ratio = Math.abs(Math.cos(angle3)); - if (near(ratio, 0, Math.PI / 180)) { - var maxWidth = getMaxLabelWidth(labels); - interval3 = (maxWidth + minGap) / distance15; - } else { - interval3 = (firstBBox.height / ratio + minGap) / distance15; - } - } else { - var ratio = Math.abs(Math.sin(angle3)); - if (near(ratio, 0, Math.PI / 180)) { - var maxWidth = getMaxLabelWidth(labels); - interval3 = (maxWidth + minGap) / distance15; - } else { - interval3 = (firstBBox.height / ratio + minGap) / distance15; - } - } - if (interval3 > 1) { - interval3 = Math.ceil(interval3); - for (var i4 = 0; i4 < count2; i4++) { - if (i4 % interval3 !== 0) { - labels[i4].hide(); - hasHide = true; - } - } - } - return hasHide; -} -function getDefault2() { - return equidistance; -} -function reserveFirst(isVertical2, labelsGroup, limitLength, autoHideCfg) { - return reserveOne(isVertical2, labelsGroup, false, autoHideCfg); -} -function reserveLast(isVertical2, labelsGroup, limitLength, autoHideCfg) { - return reserveOne(isVertical2, labelsGroup, true, autoHideCfg); -} -function reserveBoth(isVertical2, labelsGroup, limitLength, autoHideCfg) { - var minGap = (autoHideCfg === null || autoHideCfg === void 0 ? void 0 : autoHideCfg.minGap) || 0; - var labels = labelsGroup.getChildren().slice(); - if (labels.length <= 2) { - return false; - } - var hasHide = false; - var count2 = labels.length; - var first = labels[0]; - var last17 = labels[count2 - 1]; - var preLabel = first; - for (var i4 = 1; i4 < count2 - 1; i4++) { - var label17 = labels[i4]; - var curBBox = label17.getBBox(); - var isHide = isOverlap(isVertical2, preLabel, label17, minGap); - if (isHide) { - label17.hide(); - hasHide = true; - } else { - preLabel = label17; - } - } - var overlap2 = isOverlap(isVertical2, preLabel, last17, minGap); - if (overlap2) { - preLabel.hide(); - hasHide = true; - } - return hasHide; -} -function equidistance(isVertical2, labelsGroup, limitLength, autoHideCfg) { - var hasHide = parityHide(isVertical2, labelsGroup, autoHideCfg); - if (reserveOne(isVertical2, labelsGroup, false)) { - hasHide = true; - } - return hasHide; -} -function equidistanceWithReverseBoth(isVertical2, labelsGroup, limitLength, autoHideCfg) { - var labels = labelsGroup.getChildren().slice(); - var hasHide = parityHide(isVertical2, labelsGroup, autoHideCfg); - if (labels.length > 2) { - var first = labels[0]; - var last17 = labels[labels.length - 1]; - if (!first.get("visible")) { - first.show(); - if (reserveOne(isVertical2, labelsGroup, false, autoHideCfg)) { - hasHide = true; - } - } - if (!last17.get("visible")) { - last17.show(); - if (reserveOne(isVertical2, labelsGroup, true, autoHideCfg)) { - hasHide = true; - } - } - } - return hasHide; -} - -// node_modules/@antv/component/esm/axis/overlap/auto-rotate.js -var auto_rotate_exports = {}; -__export(auto_rotate_exports, { - fixedAngle: () => fixedAngle, - getDefault: () => getDefault3, - unfixedAngle: () => unfixedAngle -}); -var import_util82 = __toModule(require_lib()); -function setLabelsAngle(labels, angle3) { - (0, import_util82.each)(labels, function(label17) { - var x6 = label17.attr("x"); - var y5 = label17.attr("y"); - var matrix = getMatrixByAngle({ x: x6, y: y5 }, angle3); - label17.attr("matrix", matrix); - }); -} -function labelRotate(isVertical2, labelsGroup, limitLength, getAngle6) { - var labels = labelsGroup.getChildren(); - if (!labels.length) { - return false; - } - if (!isVertical2 && labels.length < 2) { - return false; - } - var maxWidth = getMaxLabelWidth(labels); - var isOverlap2 = false; - if (isVertical2) { - isOverlap2 = !!limitLength && maxWidth > limitLength; - } else { - var tickWidth = Math.abs(labels[1].attr("x") - labels[0].attr("x")); - isOverlap2 = maxWidth > tickWidth; - } - if (isOverlap2) { - var angle3 = getAngle6(limitLength, maxWidth); - setLabelsAngle(labels, angle3); - } - return isOverlap2; -} -function getDefault3() { - return fixedAngle; -} -function fixedAngle(isVertical2, labelsGroup, limitLength, customRotate) { - return labelRotate(isVertical2, labelsGroup, limitLength, function() { - if ((0, import_util82.isNumber)(customRotate)) { - return customRotate; - } - return isVertical2 ? theme_default.verticalAxisRotate : theme_default.horizontalAxisRotate; - }); -} -function unfixedAngle(isVertical2, labelsGroup, limitLength) { - return labelRotate(isVertical2, labelsGroup, limitLength, function(length5, maxWidth) { - if (!length5) { - return isVertical2 ? theme_default.verticalAxisRotate : theme_default.horizontalAxisRotate; - } - if (isVertical2) { - return -Math.acos(length5 / maxWidth); - } else { - var angle3 = 0; - if (length5 > maxWidth) { - angle3 = Math.PI / 4; - } else { - angle3 = Math.asin(length5 / maxWidth); - if (angle3 > Math.PI / 4) { - angle3 = Math.PI / 4; - } - } - return angle3; - } - }); -} - -// node_modules/@antv/component/esm/axis/line.js -var Line = function(_super) { - __extends(Line9, _super); - function Line9() { - return _super !== null && _super.apply(this, arguments) || this; - } - Line9.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { - type: "line", - locationType: "region", - start: null, - end: null - }); - }; - Line9.prototype.getLinePath = function() { - var start = this.get("start"); - var end2 = this.get("end"); - var path = []; - path.push(["M", start.x, start.y]); - path.push(["L", end2.x, end2.y]); - return path; - }; - Line9.prototype.getInnerLayoutBBox = function() { - var start = this.get("start"); - var end2 = this.get("end"); - var bbox = _super.prototype.getInnerLayoutBBox.call(this); - var minX = Math.min(start.x, end2.x, bbox.x); - var minY = Math.min(start.y, end2.y, bbox.y); - var maxX = Math.max(start.x, end2.x, bbox.maxX); - var maxY2 = Math.max(start.y, end2.y, bbox.maxY); - return { - x: minX, - y: minY, - minX, - minY, - maxX, - maxY: maxY2, - width: maxX - minX, - height: maxY2 - minY - }; - }; - Line9.prototype.isVertical = function() { - var start = this.get("start"); - var end2 = this.get("end"); - return (0, import_util83.isNumberEqual)(start.x, end2.x); - }; - Line9.prototype.isHorizontal = function() { - var start = this.get("start"); - var end2 = this.get("end"); - return (0, import_util83.isNumberEqual)(start.y, end2.y); - }; - Line9.prototype.getTickPoint = function(tickValue) { - var self2 = this; - var start = self2.get("start"); - var end2 = self2.get("end"); - var regionX = end2.x - start.x; - var regionY = end2.y - start.y; - return { - x: start.x + regionX * tickValue, - y: start.y + regionY * tickValue - }; - }; - Line9.prototype.getSideVector = function(offset) { - var axisVector = this.getAxisVector(); - var normal2 = vec2_exports.normalize([0, 0], axisVector); - var factor = this.get("verticalFactor"); - var verticalVector = [normal2[1], normal2[0] * -1]; - return vec2_exports.scale([0, 0], verticalVector, offset * factor); - }; - Line9.prototype.getAxisVector = function() { - var start = this.get("start"); - var end2 = this.get("end"); - return [end2.x - start.x, end2.y - start.y]; - }; - Line9.prototype.processOverlap = function(labelGroup) { - var _this = this; - var isVertical2 = this.isVertical(); - var isHorizontal2 = this.isHorizontal(); - if (!isVertical2 && !isHorizontal2) { - return; - } - var labelCfg = this.get("label"); - var titleCfg = this.get("title"); - var verticalLimitLength = this.get("verticalLimitLength"); - var labelOffset = labelCfg.offset; - var limitLength = verticalLimitLength; - var titleHeight = 0; - var titleSpacing = 0; - if (titleCfg) { - titleHeight = titleCfg.style.fontSize; - titleSpacing = titleCfg.spacing; - } - if (limitLength) { - limitLength = limitLength - labelOffset - titleSpacing - titleHeight; - } - var overlapOrder = this.get("overlapOrder"); - (0, import_util83.each)(overlapOrder, function(name) { - if (labelCfg[name] && _this.canProcessOverlap(name)) { - _this.autoProcessOverlap(name, labelCfg[name], labelGroup, limitLength); - } - }); - if (titleCfg) { - if ((0, import_util83.isNil)(titleCfg.offset)) { - var bbox = labelGroup.getCanvasBBox(); - var length_1 = isVertical2 ? bbox.width : bbox.height; - titleCfg.offset = labelOffset + length_1 + titleSpacing + titleHeight / 2; - } - } - }; - Line9.prototype.canProcessOverlap = function(name) { - var labelCfg = this.get("label"); - if (name === "autoRotate") { - return (0, import_util83.isNil)(labelCfg.rotate); - } - return true; - }; - Line9.prototype.autoProcessOverlap = function(name, value2, labelGroup, limitLength) { - var _this = this; - var isVertical2 = this.isVertical(); - var hasAdjusted = false; - var util = overlap_exports[name]; - if (value2 === true) { - var labelCfg = this.get("label"); - hasAdjusted = util.getDefault()(isVertical2, labelGroup, limitLength); - } else if ((0, import_util83.isFunction)(value2)) { - hasAdjusted = value2(isVertical2, labelGroup, limitLength); - } else if ((0, import_util83.isObject)(value2)) { - var overlapCfg = value2; - if (util[overlapCfg.type]) { - hasAdjusted = util[overlapCfg.type](isVertical2, labelGroup, limitLength, overlapCfg.cfg); - } - } else if (util[value2]) { - hasAdjusted = util[value2](isVertical2, labelGroup, limitLength); - } - if (name === "autoRotate") { - if (hasAdjusted) { - var labels = labelGroup.getChildren(); - var verticalFactor_1 = this.get("verticalFactor"); - (0, import_util83.each)(labels, function(label17) { - var textAlign = label17.attr("textAlign"); - if (textAlign === "center") { - var newAlign = verticalFactor_1 > 0 ? "end" : "start"; - label17.attr("textAlign", newAlign); - } - }); - } - } else if (name === "autoHide") { - var children = labelGroup.getChildren().slice(0); - (0, import_util83.each)(children, function(label17) { - if (!label17.get("visible")) { - if (_this.get("isRegister")) { - _this.unregisterElement(label17); - } - label17.remove(); - } - }); - } - }; - return Line9; -}(base_default8); -var line_default4 = Line; - -// node_modules/@antv/component/esm/axis/circle.js -var import_util84 = __toModule(require_lib()); -var Circle = function(_super) { - __extends(Circle6, _super); - function Circle6() { - return _super !== null && _super.apply(this, arguments) || this; - } - Circle6.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { type: "circle", locationType: "circle", center: null, radius: null, startAngle: -Math.PI / 2, endAngle: Math.PI * 3 / 2 }); - }; - Circle6.prototype.getLinePath = function() { - var center2 = this.get("center"); - var x6 = center2.x; - var y5 = center2.y; - var rx = this.get("radius"); - var ry = rx; - var startAngle = this.get("startAngle"); - var endAngle = this.get("endAngle"); - var path = []; - if (Math.abs(endAngle - startAngle) === Math.PI * 2) { - path = [["M", x6, y5 - ry], ["A", rx, ry, 0, 1, 1, x6, y5 + ry], ["A", rx, ry, 0, 1, 1, x6, y5 - ry], ["Z"]]; - } else { - var startPoint = this.getCirclePoint(startAngle); - var endPoint = this.getCirclePoint(endAngle); - var large = Math.abs(endAngle - startAngle) > Math.PI ? 1 : 0; - var sweep = startAngle > endAngle ? 0 : 1; - path = [ - ["M", x6, y5], - ["L", startPoint.x, startPoint.y], - ["A", rx, ry, 0, large, sweep, endPoint.x, endPoint.y], - ["L", x6, y5] - ]; - } - return path; - }; - Circle6.prototype.getTickPoint = function(tickValue) { - var startAngle = this.get("startAngle"); - var endAngle = this.get("endAngle"); - var angle3 = startAngle + (endAngle - startAngle) * tickValue; - return this.getCirclePoint(angle3); - }; - Circle6.prototype.getSideVector = function(offset, point2) { - var center2 = this.get("center"); - var vector = [point2.x - center2.x, point2.y - center2.y]; - var factor = this.get("verticalFactor"); - var vecLen = vec2_exports.length(vector); - vec2_exports.scale(vector, vector, factor * offset / vecLen); - return vector; - }; - Circle6.prototype.getAxisVector = function(point2) { - var center2 = this.get("center"); - var vector = [point2.x - center2.x, point2.y - center2.y]; - return [vector[1], -1 * vector[0]]; - }; - Circle6.prototype.getCirclePoint = function(angle3, radius) { - var center2 = this.get("center"); - radius = radius || this.get("radius"); - return { - x: center2.x + Math.cos(angle3) * radius, - y: center2.y + Math.sin(angle3) * radius - }; - }; - Circle6.prototype.canProcessOverlap = function(name) { - var labelCfg = this.get("label"); - if (name === "autoRotate") { - return (0, import_util84.isNil)(labelCfg.rotate); - } - return true; - }; - Circle6.prototype.processOverlap = function(labelGroup) { - var _this = this; - var labelCfg = this.get("label"); - var titleCfg = this.get("title"); - var verticalLimitLength = this.get("verticalLimitLength"); - var labelOffset = labelCfg.offset; - var limitLength = verticalLimitLength; - var titleHeight = 0; - var titleSpacing = 0; - if (titleCfg) { - titleHeight = titleCfg.style.fontSize; - titleSpacing = titleCfg.spacing; - } - if (limitLength) { - limitLength = limitLength - labelOffset - titleSpacing - titleHeight; - } - var overlapOrder = this.get("overlapOrder"); - (0, import_util84.each)(overlapOrder, function(name) { - if (labelCfg[name] && _this.canProcessOverlap(name)) { - _this.autoProcessOverlap(name, labelCfg[name], labelGroup, limitLength); - } - }); - if (titleCfg) { - if ((0, import_util84.isNil)(titleCfg.offset)) { - var length_1 = labelGroup.getCanvasBBox().height; - titleCfg.offset = labelOffset + length_1 + titleSpacing + titleHeight / 2; - } - } - }; - Circle6.prototype.autoProcessOverlap = function(name, value2, labelGroup, limitLength) { - var _this = this; - var hasAdjusted = false; - var util = overlap_exports[name]; - if (limitLength > 0) { - if (value2 === true) { - hasAdjusted = util.getDefault()(false, labelGroup, limitLength); - } else if ((0, import_util84.isFunction)(value2)) { - hasAdjusted = value2(false, labelGroup, limitLength); - } else if ((0, import_util84.isObject)(value2)) { - var overlapCfg = value2; - if (util[overlapCfg.type]) { - hasAdjusted = util[overlapCfg.type](false, labelGroup, limitLength, overlapCfg.cfg); - } - } else if (util[value2]) { - hasAdjusted = util[value2](false, labelGroup, limitLength); - } - } - if (name === "autoRotate") { - if (hasAdjusted) { - var labels = labelGroup.getChildren(); - var verticalFactor_1 = this.get("verticalFactor"); - (0, import_util84.each)(labels, function(label17) { - var textAlign = label17.attr("textAlign"); - if (textAlign === "center") { - var newAlign = verticalFactor_1 > 0 ? "end" : "start"; - label17.attr("textAlign", newAlign); - } - }); - } - } else if (name === "autoHide") { - var children = labelGroup.getChildren().slice(0); - (0, import_util84.each)(children, function(label17) { - if (!label17.get("visible")) { - if (_this.get("isRegister")) { - _this.unregisterElement(label17); - } - label17.remove(); - } - }); - } - }; - return Circle6; -}(base_default8); -var circle_default2 = Circle; - -// node_modules/@antv/component/esm/crosshair/index.js -var crosshair_exports = {}; -__export(crosshair_exports, { - Base: () => base_default9, - Circle: () => circle_default3, - Html: () => html_default2, - Line: () => line_default5 -}); - -// node_modules/@antv/component/esm/crosshair/base.js -var import_util85 = __toModule(require_lib()); -var CrosshairBase = function(_super) { - __extends(CrosshairBase2, _super); - function CrosshairBase2() { - return _super !== null && _super.apply(this, arguments) || this; - } - CrosshairBase2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "crosshair", type: "base", line: {}, text: null, textBackground: {}, capture: false, defaultCfg: { - line: { - style: { - lineWidth: 1, - stroke: theme_default.lineColor - } - }, - text: { - position: "start", - offset: 10, - autoRotate: false, - content: null, - style: { - fill: theme_default.textColor, - textAlign: "center", - textBaseline: "middle", - fontFamily: theme_default.fontFamily - } - }, - textBackground: { - padding: 5, - style: { - stroke: theme_default.lineColor - } - } - } }); - }; - CrosshairBase2.prototype.renderInner = function(group3) { - if (this.get("line")) { - this.renderLine(group3); - } - if (this.get("text")) { - this.renderText(group3); - this.renderBackground(group3); - } - }; - CrosshairBase2.prototype.renderText = function(group3) { - var text = this.get("text"); - var style = text.style, autoRotate = text.autoRotate, content = text.content; - if (!(0, import_util85.isNil)(content)) { - var textPoint = this.getTextPoint(); - var matrix = null; - if (autoRotate) { - var angle3 = this.getRotateAngle(); - matrix = getMatrixByAngle(textPoint, angle3); - } - this.addShape(group3, { - type: "text", - name: "crosshair-text", - id: this.getElementId("text"), - attrs: __assign(__assign(__assign({}, textPoint), { text: content, matrix }), style) - }); - } - }; - CrosshairBase2.prototype.renderLine = function(group3) { - var path = this.getLinePath(); - var line2 = this.get("line"); - var style = line2.style; - this.addShape(group3, { - type: "path", - name: "crosshair-line", - id: this.getElementId("line"), - attrs: __assign({ path }, style) - }); - }; - CrosshairBase2.prototype.renderBackground = function(group3) { - var textId = this.getElementId("text"); - var textShape = group3.findById(textId); - var textBackground = this.get("textBackground"); - if (textBackground && textShape) { - var textBBox = textShape.getBBox(); - var padding3 = formatPadding(textBackground.padding); - var style = textBackground.style; - var backgroundShape = this.addShape(group3, { - type: "rect", - name: "crosshair-text-background", - id: this.getElementId("text-background"), - attrs: __assign({ x: textBBox.x - padding3[3], y: textBBox.y - padding3[0], width: textBBox.width + padding3[1] + padding3[3], height: textBBox.height + padding3[0] + padding3[2], matrix: textShape.attr("matrix") }, style) - }); - backgroundShape.toBack(); - } - }; - return CrosshairBase2; -}(group_component_default); -var base_default9 = CrosshairBase; - -// node_modules/@antv/component/esm/crosshair/line.js -var LineCrosshair = function(_super) { - __extends(LineCrosshair3, _super); - function LineCrosshair3() { - return _super !== null && _super.apply(this, arguments) || this; - } - LineCrosshair3.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { type: "line", locationType: "region", start: null, end: null }); - }; - LineCrosshair3.prototype.getRotateAngle = function() { - var _a6 = this.getLocation(), start = _a6.start, end2 = _a6.end; - var position2 = this.get("text").position; - var angle3 = Math.atan2(end2.y - start.y, end2.x - start.x); - var tangentAngle = position2 === "start" ? angle3 - Math.PI / 2 : angle3 + Math.PI / 2; - return tangentAngle; - }; - LineCrosshair3.prototype.getTextPoint = function() { - var _a6 = this.getLocation(), start = _a6.start, end2 = _a6.end; - var _b = this.get("text"), position2 = _b.position, offset = _b.offset; - return getTextPoint(start, end2, position2, offset); - }; - LineCrosshair3.prototype.getLinePath = function() { - var _a6 = this.getLocation(), start = _a6.start, end2 = _a6.end; - return [ - ["M", start.x, start.y], - ["L", end2.x, end2.y] - ]; - }; - return LineCrosshair3; -}(base_default9); -var line_default5 = LineCrosshair; - -// node_modules/@antv/component/esm/crosshair/circle.js -var LineCrosshair2 = function(_super) { - __extends(LineCrosshair3, _super); - function LineCrosshair3() { - return _super !== null && _super.apply(this, arguments) || this; - } - LineCrosshair3.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { type: "circle", locationType: "circle", center: null, radius: 100, startAngle: -Math.PI / 2, endAngle: Math.PI * 3 / 2 }); - }; - LineCrosshair3.prototype.getRotateAngle = function() { - var _a6 = this.getLocation(), startAngle = _a6.startAngle, endAngle = _a6.endAngle; - var position2 = this.get("text").position; - var tangentAngle = position2 === "start" ? startAngle + Math.PI / 2 : endAngle - Math.PI / 2; - return tangentAngle; - }; - LineCrosshair3.prototype.getTextPoint = function() { - var text = this.get("text"); - var position2 = text.position, offset = text.offset; - var _a6 = this.getLocation(), center2 = _a6.center, radius = _a6.radius, startAngle = _a6.startAngle, endAngle = _a6.endAngle; - var angle3 = position2 === "start" ? startAngle : endAngle; - var tangentAngle = this.getRotateAngle() - Math.PI; - var point2 = getCirclePoint(center2, radius, angle3); - var offsetX = Math.cos(tangentAngle) * offset; - var offsetY = Math.sin(tangentAngle) * offset; - return { - x: point2.x + offsetX, - y: point2.y + offsetY - }; - }; - LineCrosshair3.prototype.getLinePath = function() { - var _a6 = this.getLocation(), center2 = _a6.center, radius = _a6.radius, startAngle = _a6.startAngle, endAngle = _a6.endAngle; - var path = null; - if (endAngle - startAngle === Math.PI * 2) { - var x6 = center2.x, y5 = center2.y; - path = [ - ["M", x6, y5 - radius], - ["A", radius, radius, 0, 1, 1, x6, y5 + radius], - ["A", radius, radius, 0, 1, 1, x6, y5 - radius], - ["Z"] - ]; - } else { - var startPoint = getCirclePoint(center2, radius, startAngle); - var endPoint = getCirclePoint(center2, radius, endAngle); - var large = Math.abs(endAngle - startAngle) > Math.PI ? 1 : 0; - var sweep = startAngle > endAngle ? 0 : 1; - path = [ - ["M", startPoint.x, startPoint.y], - ["A", radius, radius, 0, large, sweep, endPoint.x, endPoint.y] - ]; - } - return path; - }; - return LineCrosshair3; -}(base_default9); -var circle_default3 = LineCrosshair2; - -// node_modules/@antv/component/esm/crosshair/html.js -var import_util89 = __toModule(require_lib()); - -// node_modules/@antv/component/esm/crosshair/css-const.js -var CONTAINER_CLASS = "g2-crosshair"; -var CROSSHAIR_LINE = CONTAINER_CLASS + "-line"; -var CROSSHAIR_TEXT = CONTAINER_CLASS + "-text"; - -// node_modules/@antv/component/esm/crosshair/html-theme.js -var _a; -var html_theme_default = (_a = {}, _a["" + CONTAINER_CLASS] = { - position: "relative" -}, _a["" + CROSSHAIR_LINE] = { - position: "absolute", - backgroundColor: "rgba(0, 0, 0, 0.25)" -}, _a["" + CROSSHAIR_TEXT] = { - position: "absolute", - color: theme_default.textColor, - fontFamily: theme_default.fontFamily -}, _a); - -// node_modules/@antv/component/esm/crosshair/html.js -var HtmlCrosshair = function(_super) { - __extends(HtmlCrosshair2, _super); - function HtmlCrosshair2() { - return _super !== null && _super.apply(this, arguments) || this; - } - HtmlCrosshair2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "crosshair", type: "html", locationType: "region", start: { x: 0, y: 0 }, end: { x: 0, y: 0 }, capture: false, text: null, containerTpl: '
', crosshairTpl: '
', textTpl: '{content}', domStyles: null, containerClassName: CONTAINER_CLASS, defaultStyles: html_theme_default, defaultCfg: { - text: { - position: "start", - content: null, - align: "center", - offset: 10 - } - } }); - }; - HtmlCrosshair2.prototype.render = function() { - this.resetText(); - this.resetPosition(); - }; - HtmlCrosshair2.prototype.initCrossHair = function() { - var container2 = this.getContainer(); - var crosshairTpl = this.get("crosshairTpl"); - var crosshairEl = createDom(crosshairTpl); - container2.appendChild(crosshairEl); - this.applyStyle(CROSSHAIR_LINE, crosshairEl); - this.set("crosshairEl", crosshairEl); - }; - HtmlCrosshair2.prototype.getTextPoint = function() { - var _a6 = this.getLocation(), start = _a6.start, end2 = _a6.end; - var _b = this.get("text"), position2 = _b.position, offset = _b.offset; - return getTextPoint(start, end2, position2, offset); - }; - HtmlCrosshair2.prototype.resetText = function() { - var text = this.get("text"); - var textEl = this.get("textEl"); - if (text) { - var content = text.content; - if (!textEl) { - var container2 = this.getContainer(); - var textTpl = (0, import_util89.substitute)(this.get("textTpl"), text); - textEl = createDom(textTpl); - container2.appendChild(textEl); - this.applyStyle(CROSSHAIR_TEXT, textEl); - this.set("textEl", textEl); - } - textEl.innerHTML = content; - } else if (textEl) { - textEl.remove(); - } - }; - HtmlCrosshair2.prototype.isVertical = function(start, end2) { - return start.x === end2.x; - }; - HtmlCrosshair2.prototype.resetPosition = function() { - var crosshairEl = this.get("crosshairEl"); - if (!crosshairEl) { - this.initCrossHair(); - crosshairEl = this.get("crosshairEl"); - } - var start = this.get("start"); - var end2 = this.get("end"); - var minX = Math.min(start.x, end2.x); - var minY = Math.min(start.y, end2.y); - if (this.isVertical(start, end2)) { - modifyCSS(crosshairEl, { - width: "1px", - height: toPx(Math.abs(end2.y - start.y)) - }); - } else { - modifyCSS(crosshairEl, { - height: "1px", - width: toPx(Math.abs(end2.x - start.x)) - }); - } - modifyCSS(crosshairEl, { - top: toPx(minY), - left: toPx(minX) - }); - this.alignText(); - }; - HtmlCrosshair2.prototype.alignText = function() { - var textEl = this.get("textEl"); - if (textEl) { - var align = this.get("text").align; - var clientWidth = textEl.clientWidth; - var point2 = this.getTextPoint(); - switch (align) { - case "center": - point2.x = point2.x - clientWidth / 2; - break; - case "right": - point2.x = point2.x - clientWidth; - case "left": - break; - } - modifyCSS(textEl, { - top: toPx(point2.y), - left: toPx(point2.x) - }); - } - }; - HtmlCrosshair2.prototype.updateInner = function(cfg) { - if ((0, import_util89.hasKey)(cfg, "text")) { - this.resetText(); - } - _super.prototype.updateInner.call(this, cfg); - }; - return HtmlCrosshair2; -}(html_component_default); -var html_default2 = HtmlCrosshair; - -// node_modules/@antv/component/esm/grid/index.js -var grid_exports = {}; -__export(grid_exports, { - Base: () => base_default10, - Circle: () => circle_default4, - Line: () => line_default6 -}); - -// node_modules/@antv/component/esm/grid/base.js -var import_util91 = __toModule(require_lib()); -var GridBase = function(_super) { - __extends(GridBase2, _super); - function GridBase2() { - return _super !== null && _super.apply(this, arguments) || this; - } - GridBase2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "grid", line: {}, alternateColor: null, capture: false, items: [], closed: false, defaultCfg: { - line: { - type: "line", - style: { - lineWidth: 1, - stroke: theme_default.lineColor - } - } - } }); - }; - GridBase2.prototype.getLineType = function() { - var line2 = this.get("line") || this.get("defaultCfg").line; - return line2.type; - }; - GridBase2.prototype.renderInner = function(group3) { - this.drawGrid(group3); - }; - GridBase2.prototype.getAlternatePath = function(prePoints, points) { - var regionPath = this.getGridPath(prePoints); - var reversePoints = points.slice(0).reverse(); - var nextPath = this.getGridPath(reversePoints, true); - var closed = this.get("closed"); - if (closed) { - regionPath = regionPath.concat(nextPath); - } else { - nextPath[0][0] = "L"; - regionPath = regionPath.concat(nextPath); - regionPath.push(["Z"]); - } - return regionPath; - }; - GridBase2.prototype.getPathStyle = function() { - return this.get("line").style; - }; - GridBase2.prototype.drawGrid = function(group3) { - var _this = this; - var line2 = this.get("line"); - var items = this.get("items"); - var alternateColor = this.get("alternateColor"); - var preItem = null; - (0, import_util91.each)(items, function(item, index2) { - var id = item.id || index2; - if (line2) { - var style = _this.getPathStyle(); - style = (0, import_util91.isFunction)(style) ? style(item, index2, items) : style; - var lineId = _this.getElementId("line-" + id); - var gridPath = _this.getGridPath(item.points); - _this.addShape(group3, { - type: "path", - name: "grid-line", - id: lineId, - attrs: (0, import_util91.mix)({ - path: gridPath - }, style) - }); - } - if (alternateColor && index2 > 0) { - var regionId = _this.getElementId("region-" + id); - var isEven = index2 % 2 === 0; - if ((0, import_util91.isString)(alternateColor)) { - if (isEven) { - _this.drawAlternateRegion(regionId, group3, preItem.points, item.points, alternateColor); - } - } else { - var color4 = isEven ? alternateColor[1] : alternateColor[0]; - _this.drawAlternateRegion(regionId, group3, preItem.points, item.points, color4); - } - } - preItem = item; - }); - }; - GridBase2.prototype.drawAlternateRegion = function(id, group3, prePoints, points, color4) { - var regionPath = this.getAlternatePath(prePoints, points); - this.addShape(group3, { - type: "path", - id, - name: "grid-region", - attrs: { - path: regionPath, - fill: color4 - } - }); - }; - return GridBase2; -}(group_component_default); -var base_default10 = GridBase; - -// node_modules/@antv/component/esm/grid/circle.js -var import_util92 = __toModule(require_lib()); -function distance6(x1, y1, x22, y22) { - var dx = x22 - x1; - var dy = y22 - y1; - return Math.sqrt(dx * dx + dy * dy); -} -var Circle2 = function(_super) { - __extends(Circle6, _super); - function Circle6() { - return _super !== null && _super.apply(this, arguments) || this; - } - Circle6.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { - type: "circle", - center: null, - closed: true - }); - }; - Circle6.prototype.getGridPath = function(points, reversed) { - var lineType = this.getLineType(); - var closed = this.get("closed"); - var path = []; - if (points.length) { - if (lineType === "circle") { - var center2 = this.get("center"); - var firstPoint = points[0]; - var radius_1 = distance6(center2.x, center2.y, firstPoint.x, firstPoint.y); - var sweepFlag_1 = reversed ? 0 : 1; - if (closed) { - path.push(["M", center2.x, center2.y - radius_1]); - path.push(["A", radius_1, radius_1, 0, 0, sweepFlag_1, center2.x, center2.y + radius_1]); - path.push(["A", radius_1, radius_1, 0, 0, sweepFlag_1, center2.x, center2.y - radius_1]); - path.push(["Z"]); - } else { - (0, import_util92.each)(points, function(point2, index2) { - if (index2 === 0) { - path.push(["M", point2.x, point2.y]); - } else { - path.push(["A", radius_1, radius_1, 0, 0, sweepFlag_1, point2.x, point2.y]); - } - }); - } - } else { - (0, import_util92.each)(points, function(point2, index2) { - if (index2 === 0) { - path.push(["M", point2.x, point2.y]); - } else { - path.push(["L", point2.x, point2.y]); - } - }); - if (closed) { - path.push(["Z"]); - } - } - } - return path; - }; - return Circle6; -}(base_default10); -var circle_default4 = Circle2; - -// node_modules/@antv/component/esm/grid/line.js -var import_util93 = __toModule(require_lib()); -var Line2 = function(_super) { - __extends(Line9, _super); - function Line9() { - return _super !== null && _super.apply(this, arguments) || this; - } - Line9.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { type: "line" }); - }; - Line9.prototype.getGridPath = function(points) { - var path = []; - (0, import_util93.each)(points, function(point2, index2) { - if (index2 === 0) { - path.push(["M", point2.x, point2.y]); - } else { - path.push(["L", point2.x, point2.y]); - } - }); - return path; - }; - return Line9; -}(base_default10); -var line_default6 = Line2; - -// node_modules/@antv/component/esm/legend/index.js -var legend_exports = {}; -__export(legend_exports, { - Base: () => base_default11, - Category: () => category_default, - Continuous: () => continuous_default -}); - -// node_modules/@antv/component/esm/legend/category.js -var import_util95 = __toModule(require_lib()); - -// node_modules/@antv/component/esm/legend/base.js -var LegendBase = function(_super) { - __extends(LegendBase2, _super); - function LegendBase2() { - return _super !== null && _super.apply(this, arguments) || this; - } - LegendBase2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { - name: "legend", - layout: "horizontal", - locationType: "point", - x: 0, - y: 0, - offsetX: 0, - offsetY: 0, - title: null, - background: null - }); - }; - LegendBase2.prototype.getLayoutBBox = function() { - var bbox = _super.prototype.getLayoutBBox.call(this); - var maxWidth = this.get("maxWidth"); - var maxHeight = this.get("maxHeight"); - var width2 = bbox.width, height = bbox.height; - if (maxWidth) { - width2 = Math.min(width2, maxWidth); - } - if (maxHeight) { - height = Math.min(height, maxHeight); - } - return createBBox(bbox.minX, bbox.minY, width2, height); - }; - LegendBase2.prototype.setLocation = function(cfg) { - this.set("x", cfg.x); - this.set("y", cfg.y); - this.resetLocation(); - }; - LegendBase2.prototype.resetLocation = function() { - var x6 = this.get("x"); - var y5 = this.get("y"); - var offsetX = this.get("offsetX"); - var offsetY = this.get("offsetY"); - this.moveElementTo(this.get("group"), { - x: x6 + offsetX, - y: y5 + offsetY - }); - }; - LegendBase2.prototype.applyOffset = function() { - this.resetLocation(); - }; - LegendBase2.prototype.getDrawPoint = function() { - return this.get("currentPoint"); - }; - LegendBase2.prototype.setDrawPoint = function(point2) { - return this.set("currentPoint", point2); - }; - LegendBase2.prototype.renderInner = function(group3) { - this.resetDraw(); - if (this.get("title")) { - this.drawTitle(group3); - } - this.drawLegendContent(group3); - if (this.get("background")) { - this.drawBackground(group3); - } - }; - LegendBase2.prototype.drawBackground = function(group3) { - var background = this.get("background"); - var bbox = group3.getBBox(); - var padding3 = formatPadding(background.padding); - var attrs = __assign({ - x: 0, - y: 0, - width: bbox.width + padding3[1] + padding3[3], - height: bbox.height + padding3[0] + padding3[2] - }, background.style); - var backgroundShape = this.addShape(group3, { - type: "rect", - id: this.getElementId("background"), - name: "legend-background", - attrs - }); - backgroundShape.toBack(); - }; - LegendBase2.prototype.drawTitle = function(group3) { - var currentPoint = this.get("currentPoint"); - var titleCfg = this.get("title"); - var spacing = titleCfg.spacing, style = titleCfg.style, text = titleCfg.text; - var shape = this.addShape(group3, { - type: "text", - id: this.getElementId("title"), - name: "legend-title", - attrs: __assign({ text, x: currentPoint.x, y: currentPoint.y }, style) - }); - var bbox = shape.getBBox(); - this.set("currentPoint", { x: currentPoint.x, y: bbox.maxY + spacing }); - }; - LegendBase2.prototype.resetDraw = function() { - var background = this.get("background"); - var currentPoint = { x: 0, y: 0 }; - if (background) { - var padding3 = formatPadding(background.padding); - currentPoint.x = padding3[3]; - currentPoint.y = padding3[0]; - } - this.set("currentPoint", currentPoint); - }; - return LegendBase2; -}(group_component_default); -var base_default11 = LegendBase; - -// node_modules/@antv/component/esm/legend/category.js -var DEFAULT_PAGE_NAVIGATOR = { - marker: { - style: { - inactiveFill: "#000", - inactiveOpacity: 0.45, - fill: "#000", - opacity: 1, - size: 12 - } - }, - text: { - style: { - fill: "#ccc", - fontSize: 12 - } - } -}; -var textStyle = { - fill: theme_default.textColor, - fontSize: 12, - textAlign: "start", - textBaseline: "middle", - fontFamily: theme_default.fontFamily, - fontWeight: "normal", - lineHeight: 12 -}; -var RIGHT_ARROW_NAME = "navigation-arrow-right"; -var LEFT_ARROW_NAME = "navigation-arrow-left"; -var ROTATE_MAP = { - right: 90 * Math.PI / 180, - left: (360 - 90) * Math.PI / 180, - up: 0, - down: 180 * Math.PI / 180 -}; -var Category2 = function(_super) { - __extends(Category3, _super); - function Category3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.currentPageIndex = 1; - _this.totalPagesCnt = 1; - _this.pageWidth = 0; - _this.pageHeight = 0; - _this.startX = 0; - _this.startY = 0; - _this.onNavigationBack = function() { - var itemGroup = _this.getElementByLocalId("item-group"); - if (_this.currentPageIndex > 1) { - _this.currentPageIndex -= 1; - _this.updateNavigation(); - var matrix = _this.getCurrentNavigationMatrix(); - if (_this.get("animate")) { - itemGroup.animate({ - matrix - }, 100); - } else { - itemGroup.attr({ matrix }); - } - } - }; - _this.onNavigationAfter = function() { - var itemGroup = _this.getElementByLocalId("item-group"); - if (_this.currentPageIndex < _this.totalPagesCnt) { - _this.currentPageIndex += 1; - _this.updateNavigation(); - var matrix = _this.getCurrentNavigationMatrix(); - if (_this.get("animate")) { - itemGroup.animate({ - matrix - }, 100); - } else { - itemGroup.attr({ matrix }); - } - } - }; - return _this; - } - Category3.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "legend", type: "category", itemSpacing: 24, itemMarginBottom: 8, maxItemWidth: null, itemWidth: null, itemHeight: null, itemName: {}, itemValue: null, maxWidth: null, maxHeight: null, marker: {}, radio: null, items: [], itemStates: {}, itemBackground: {}, pageNavigator: {}, defaultCfg: { - title: { - spacing: 5, - style: { - fill: theme_default.textColor, - fontSize: 12, - textAlign: "start", - textBaseline: "top" - } - }, - background: { - padding: 5, - style: { - stroke: theme_default.lineColor - } - }, - itemBackground: { - style: { - opacity: 0, - fill: "#fff" - } - }, - pageNavigator: DEFAULT_PAGE_NAVIGATOR, - itemName: { - spacing: 16, - style: textStyle - }, - marker: { - spacing: 8, - style: { - r: 6, - symbol: "circle" - } - }, - itemValue: { - alignRight: false, - formatter: null, - style: textStyle, - spacing: 6 - }, - itemStates: { - active: { - nameStyle: { - opacity: 0.8 - } - }, - unchecked: { - nameStyle: { - fill: theme_default.uncheckedColor - }, - markerStyle: { - fill: theme_default.uncheckedColor, - stroke: theme_default.uncheckedColor - } - }, - inactive: { - nameStyle: { - fill: theme_default.uncheckedColor - }, - markerStyle: { - opacity: 0.2 - } - } - } - } }); - }; - Category3.prototype.isList = function() { - return true; - }; - Category3.prototype.getItems = function() { - return this.get("items"); - }; - Category3.prototype.setItems = function(items) { - this.update({ - items - }); - }; - Category3.prototype.updateItem = function(item, cfg) { - (0, import_util95.mix)(item, cfg); - this.clear(); - this.render(); - }; - Category3.prototype.clearItems = function() { - var itemGroup = this.getElementByLocalId("item-group"); - itemGroup && itemGroup.clear(); - }; - Category3.prototype.setItemState = function(item, state2, value2) { - item[state2] = value2; - var itemElement = this.getElementByLocalId("item-" + item.id); - if (itemElement) { - var items = this.getItems(); - var index2 = items.indexOf(item); - var offsetGroup = this.createOffScreenGroup(); - var newElement = this.drawItem(item, index2, this.getItemHeight(), offsetGroup); - this.updateElements(newElement, itemElement); - this.clearUpdateStatus(itemElement); - } - }; - Category3.prototype.hasState = function(item, state2) { - return !!item[state2]; - }; - Category3.prototype.getItemStates = function(item) { - var itemStates = this.get("itemStates"); - var rst = []; - (0, import_util95.each)(itemStates, function(v3, k4) { - if (item[k4]) { - rst.push(k4); - } - }); - return rst; - }; - Category3.prototype.clearItemsState = function(state2) { - var _this = this; - var items = this.getItemsByState(state2); - (0, import_util95.each)(items, function(item) { - _this.setItemState(item, state2, false); - }); - }; - Category3.prototype.getItemsByState = function(state2) { - var _this = this; - var items = this.getItems(); - return (0, import_util95.filter)(items, function(item) { - return _this.hasState(item, state2); - }); - }; - Category3.prototype.drawLegendContent = function(group3) { - this.processItems(); - this.drawItems(group3); - }; - Category3.prototype.processItems = function() { - var items = this.get("items"); - (0, import_util95.each)(items, function(item) { - if (!item.id) { - item.id = item.name; - } - }); - }; - Category3.prototype.drawItems = function(group3) { - var _this = this; - var itemContainerGroup = this.addGroup(group3, { - id: this.getElementId("item-container-group"), - name: "legend-item-container-group" - }); - var itemGroup = this.addGroup(itemContainerGroup, { - id: this.getElementId("item-group"), - name: "legend-item-group" - }); - var itemHeight = this.getItemHeight(); - var itemWidth = this.get("itemWidth"); - var itemSpacing = this.get("itemSpacing"); - var itemMarginBottom = this.get("itemMarginBottom"); - var currentPoint = this.get("currentPoint"); - var startX = currentPoint.x; - var startY = currentPoint.y; - var layout6 = this.get("layout"); - var items = this.get("items"); - var wrapped = false; - var pageWidth = 0; - var maxWidth = this.get("maxWidth"); - var maxHeight = this.get("maxHeight"); - (0, import_util95.each)(items, function(item, index2) { - var subGroup = _this.drawItem(item, index2, itemHeight, itemGroup); - var bbox = subGroup.getBBox(); - var width2 = itemWidth || bbox.width; - if (width2 > pageWidth) { - pageWidth = width2; - } - if (layout6 === "horizontal") { - if (maxWidth && maxWidth < currentPoint.x + width2 - startX) { - wrapped = true; - currentPoint.x = startX; - currentPoint.y += itemHeight + itemMarginBottom; - } - _this.moveElementTo(subGroup, currentPoint); - currentPoint.x += width2 + itemSpacing; - } else { - if (maxHeight && maxHeight < currentPoint.y + itemHeight + itemMarginBottom - startY) { - wrapped = true; - currentPoint.x += pageWidth + itemSpacing; - currentPoint.y = startY; - pageWidth = 0; - } - _this.moveElementTo(subGroup, currentPoint); - currentPoint.y += itemHeight + itemMarginBottom; - } - }); - if (wrapped && this.get("flipPage")) { - this.pageHeight = 0; - this.pageWidth = 0; - this.totalPagesCnt = 1; - this.startX = startX; - this.startY = startY; - this.adjustNavigation(group3, itemGroup); - } - }; - Category3.prototype.getItemHeight = function() { - var itemHeight = this.get("itemHeight"); - if (!itemHeight) { - var style_1 = (this.get("itemName") || {}).style; - if ((0, import_util95.isFunction)(style_1)) { - var items_1 = this.getItems(); - items_1.forEach(function(item, index2) { - var fontSize = __assign(__assign({}, textStyle), style_1(item, index2, items_1)).fontSize; - if (itemHeight < fontSize) { - itemHeight = fontSize; - } - }); - } else if (style_1) { - itemHeight = style_1.fontSize; - } - } - return itemHeight; - }; - Category3.prototype.drawMarker = function(container2, markerCfg, item, itemHeight) { - var markerAttrs = __assign(__assign(__assign({ x: 0, y: itemHeight / 2 }, markerCfg.style), { symbol: (0, import_util95.get)(item.marker, "symbol", "circle") }), (0, import_util95.get)(item.marker, "style", {})); - var shape = this.addShape(container2, { - type: "marker", - id: this.getElementId("item-" + item.id + "-marker"), - name: "legend-item-marker", - attrs: markerAttrs - }); - var bbox = shape.getBBox(); - shape.attr("x", bbox.width / 2); - var _a6 = shape.attr(), stroke = _a6.stroke, fill = _a6.fill; - if (stroke) { - shape.set("isStroke", true); - } - if (fill) { - shape.set("isFill", true); - } - return shape; - }; - Category3.prototype.drawItemText = function(container2, textName, cfg, item, itemHeight, xPosition, index2) { - var formatter = cfg.formatter; - var style = cfg.style; - var attrs = __assign(__assign({ x: xPosition, y: itemHeight / 2, text: formatter ? formatter(item[textName], item, index2) : item[textName] }, textStyle), (0, import_util95.isFunction)(style) ? style(item, index2, this.getItems()) : style); - return this.addShape(container2, { - type: "text", - id: this.getElementId("item-" + item.id + "-" + textName), - name: "legend-item-" + textName, - attrs - }); - }; - Category3.prototype.drawRadio = function(container2, radioCfg, item, itemHeight, x6) { - var _a6; - var style = radioCfg.style || {}; - var r4 = (_a6 = style.r) !== null && _a6 !== void 0 ? _a6 : itemHeight / 2; - var lineWidth = r4 * 3.6 / 8; - var _b = [x6 + r4, itemHeight / 2 - r4], x0 = _b[0], y0 = _b[1]; - var _c = [x0 + r4, y0 + r4], x1 = _c[0], y1 = _c[1]; - var _d = [x0, y1 + r4], x22 = _d[0], y22 = _d[1]; - var _e = [x6, y0 + r4], x32 = _e[0], y32 = _e[1]; - var showRadio = item.showRadio; - var attrs = __assign(__assign({ path: [ - ["M", x0, y0], - ["A", r4, r4, 0, 0, 1, x1, y1], - ["L", x1 - lineWidth, y1], - ["L", x1, y1], - ["A", r4, r4, 0, 0, 1, x22, y22], - ["L", x22, y22 - lineWidth], - ["L", x22, y22], - ["A", r4, r4, 0, 0, 1, x32, y32], - ["L", x32 + lineWidth, y32], - ["L", x32, y32], - ["A", r4, r4, 0, 0, 1, x0, y0], - ["L", x0, y0 + lineWidth] - ], stroke: "#000000", fill: "#ffffff" }, style), { opacity: showRadio ? 0.45 : 0 }); - var radioShape = this.addShape(container2, { - type: "path", - id: this.getElementId("item-" + item.id + "-radio"), - name: "legend-item-radio", - attrs - }); - radioShape.set("tip", radioCfg.tip); - return radioShape; - }; - Category3.prototype.drawItem = function(item, index2, itemHeight, itemGroup) { - var groupId = "item-" + item.id; - var subContainer = this.addGroup(itemGroup, { - name: "legend-item-container", - id: this.getElementId("item-container-" + groupId), - delegateObject: { - item, - index: index2 - } - }); - var subGroup = this.addGroup(subContainer, { - name: "legend-item", - id: this.getElementId(groupId), - delegateObject: { - item, - index: index2 - } - }); - var marker = this.get("marker"); - var itemName = this.get("itemName"); - var itemValue = this.get("itemValue"); - var itemBackground = this.get("itemBackground"); - var radio = this.get("radio"); - var itemWidth = this.getLimitItemWidth(); - var curX = 0; - if (marker) { - var markerShape = this.drawMarker(subGroup, marker, item, itemHeight); - var spacing = marker.spacing; - var itemMarkerSpacing = (0, import_util95.get)(item, ["marker", "spacing"]); - if ((0, import_util95.isNumber)(itemMarkerSpacing)) { - spacing = itemMarkerSpacing; - } - curX = markerShape.getBBox().maxX + spacing; - } - if (itemName) { - var nameShape = this.drawItemText(subGroup, "name", itemName, item, itemHeight, curX, index2); - if (itemWidth) { - ellipsisLabel(true, nameShape, (0, import_util95.clamp)(itemWidth - curX, 0, itemWidth)); - } - curX = nameShape.getBBox().maxX + itemName.spacing; - } - if (itemValue) { - var valueShape = this.drawItemText(subGroup, "value", itemValue, item, itemHeight, curX, index2); - if (itemWidth) { - if (itemValue.alignRight) { - valueShape.attr({ - textAlign: "right", - x: itemWidth - }); - ellipsisLabel(true, valueShape, (0, import_util95.clamp)(itemWidth - curX, 0, itemWidth), "head"); - } else { - ellipsisLabel(true, valueShape, (0, import_util95.clamp)(itemWidth - curX, 0, itemWidth)); - } - } - curX = valueShape.getBBox().maxX + itemValue.spacing; - } - if (radio) { - this.drawRadio(subGroup, radio, item, itemHeight, curX); - } - if (itemBackground) { - var bbox = subGroup.getBBox(); - var backShape = this.addShape(subGroup, { - type: "rect", - name: "legend-item-background", - id: this.getElementId(groupId + "-background"), - attrs: __assign({ x: 0, y: 0, width: bbox.width, height: itemHeight }, itemBackground.style) - }); - backShape.toBack(); - } - this.applyItemStates(item, subGroup); - return subGroup; - }; - Category3.prototype.adjustNavigation = function(container2, itemGroup) { - var _this = this; - var startX = this.startX; - var startY = this.startY; - var layout6 = this.get("layout"); - var subGroups = itemGroup.findAll(function(item) { - return item.get("name") === "legend-item"; - }); - var maxWidth = this.get("maxWidth"); - var maxHeight = this.get("maxHeight"); - var itemWidth = this.get("itemWidth"); - var itemSpacing = this.get("itemSpacing"); - var itemHeight = this.getItemHeight(); - var pageNavigator = (0, import_util95.deepMix)({}, DEFAULT_PAGE_NAVIGATOR, this.get("pageNavigator")); - var navigation = this.drawNavigation(container2, layout6, "00/00", pageNavigator); - var navigationBBox = navigation.getBBox(); - var currentPoint = { x: startX, y: startY }; - var pages = 1; - var widthLimit = 0; - var pageWidth = 0; - var maxItemWidth = 0; - var itemMarginBottom = this.get("itemMarginBottom"); - if (layout6 === "horizontal") { - var maxRow = this.get("maxRow") || 1; - var maxRowHeight_1 = itemHeight + (maxRow === 1 ? 0 : itemMarginBottom); - this.pageHeight = maxRowHeight_1 * maxRow; - (0, import_util95.each)(subGroups, function(item) { - var bbox = item.getBBox(); - var width2 = itemWidth || bbox.width; - if (widthLimit && widthLimit < currentPoint.x + width2 + itemSpacing || maxWidth < currentPoint.x + width2 + itemSpacing + navigationBBox.width) { - if (pages === 1) { - widthLimit = currentPoint.x + itemSpacing; - _this.pageWidth = widthLimit; - _this.moveElementTo(navigation, { - x: maxWidth - itemSpacing - navigationBBox.width - navigationBBox.minX, - y: currentPoint.y + itemHeight / 2 - navigationBBox.height / 2 - navigationBBox.minY - }); - } - pages += 1; - currentPoint.x = startX; - currentPoint.y += maxRowHeight_1; - } - _this.moveElementTo(item, currentPoint); - item.getParent().setClip({ - type: "rect", - attrs: { - x: currentPoint.x, - y: currentPoint.y, - width: width2 + itemSpacing, - height: itemHeight - } - }); - currentPoint.x += width2 + itemSpacing; - }); - } else { - (0, import_util95.each)(subGroups, function(item) { - var bbox = item.getBBox(); - if (bbox.width > pageWidth) { - pageWidth = bbox.width; - } - }); - maxItemWidth = pageWidth; - pageWidth += itemSpacing; - if (maxWidth) { - pageWidth = Math.min(maxWidth, pageWidth); - maxItemWidth = Math.min(maxWidth, maxItemWidth); - } - this.pageWidth = pageWidth; - this.pageHeight = maxHeight - Math.max(navigationBBox.height, itemHeight + itemMarginBottom); - var cntPerPage_1 = Math.floor(this.pageHeight / (itemHeight + itemMarginBottom)); - (0, import_util95.each)(subGroups, function(item, index2) { - if (index2 !== 0 && index2 % cntPerPage_1 === 0) { - pages += 1; - currentPoint.x += pageWidth; - currentPoint.y = startY; - } - _this.moveElementTo(item, currentPoint); - item.getParent().setClip({ - type: "rect", - attrs: { - x: currentPoint.x, - y: currentPoint.y, - width: pageWidth, - height: itemHeight - } - }); - currentPoint.y += itemHeight + itemMarginBottom; - }); - this.totalPagesCnt = pages; - this.moveElementTo(navigation, { - x: startX + maxItemWidth / 2 - navigationBBox.width / 2 - navigationBBox.minX, - y: maxHeight - navigationBBox.height - navigationBBox.minY - }); - } - if (this.pageHeight && this.pageWidth) { - itemGroup.getParent().setClip({ - type: "rect", - attrs: { - x: this.startX, - y: this.startY, - width: this.pageWidth, - height: this.pageHeight - } - }); - } - if (layout6 === "horizontal" && this.get("maxRow")) { - this.totalPagesCnt = Math.ceil(pages / this.get("maxRow")); - } else { - this.totalPagesCnt = pages; - } - if (this.currentPageIndex > this.totalPagesCnt) { - this.currentPageIndex = 1; - } - this.updateNavigation(navigation); - itemGroup.attr("matrix", this.getCurrentNavigationMatrix()); - }; - Category3.prototype.drawNavigation = function(group3, layout6, text, styleCfg) { - var currentPoint = { x: 0, y: 0 }; - var subGroup = this.addGroup(group3, { - id: this.getElementId("navigation-group"), - name: "legend-navigation" - }); - var _a6 = (0, import_util95.get)(styleCfg.marker, "style", {}), _b = _a6.size, size14 = _b === void 0 ? 12 : _b, arrowStyle = __rest(_a6, ["size"]); - var leftArrow = this.drawArrow(subGroup, currentPoint, LEFT_ARROW_NAME, layout6 === "horizontal" ? "up" : "left", size14, arrowStyle); - leftArrow.on("click", this.onNavigationBack); - var leftArrowBBox = leftArrow.getBBox(); - currentPoint.x += leftArrowBBox.width + 2; - var textShape = this.addShape(subGroup, { - type: "text", - id: this.getElementId("navigation-text"), - name: "navigation-text", - attrs: __assign({ x: currentPoint.x, y: currentPoint.y + size14 / 2, text, textBaseline: "middle" }, (0, import_util95.get)(styleCfg.text, "style")) - }); - var textBBox = textShape.getBBox(); - currentPoint.x += textBBox.width + 2; - var rightArrow = this.drawArrow(subGroup, currentPoint, RIGHT_ARROW_NAME, layout6 === "horizontal" ? "down" : "right", size14, arrowStyle); - rightArrow.on("click", this.onNavigationAfter); - return subGroup; - }; - Category3.prototype.updateNavigation = function(navigation) { - var pageNavigator = (0, import_util95.deepMix)({}, DEFAULT_PAGE_NAVIGATOR, this.get("pageNavigator")); - var _a6 = pageNavigator.marker.style, fill = _a6.fill, opacity = _a6.opacity, inactiveFill = _a6.inactiveFill, inactiveOpacity = _a6.inactiveOpacity; - var text = this.currentPageIndex + "/" + this.totalPagesCnt; - var textShape = navigation ? navigation.getChildren()[1] : this.getElementByLocalId("navigation-text"); - var leftArrow = navigation ? navigation.findById(this.getElementId(LEFT_ARROW_NAME)) : this.getElementByLocalId(LEFT_ARROW_NAME); - var rightArrow = navigation ? navigation.findById(this.getElementId(RIGHT_ARROW_NAME)) : this.getElementByLocalId(RIGHT_ARROW_NAME); - textShape.attr("text", text); - leftArrow.attr("opacity", this.currentPageIndex === 1 ? inactiveOpacity : opacity); - leftArrow.attr("fill", this.currentPageIndex === 1 ? inactiveFill : fill); - leftArrow.attr("cursor", this.currentPageIndex === 1 ? "not-allowed" : "pointer"); - rightArrow.attr("opacity", this.currentPageIndex === this.totalPagesCnt ? inactiveOpacity : opacity); - rightArrow.attr("fill", this.currentPageIndex === this.totalPagesCnt ? inactiveFill : fill); - rightArrow.attr("cursor", this.currentPageIndex === this.totalPagesCnt ? "not-allowed" : "pointer"); - var cursorX = leftArrow.getBBox().maxX + 2; - textShape.attr("x", cursorX); - cursorX += textShape.getBBox().width + 2; - this.updateArrowPath(rightArrow, { x: cursorX, y: 0 }); - }; - Category3.prototype.drawArrow = function(group3, currentPoint, name, direction3, size14, style) { - var x6 = currentPoint.x, y5 = currentPoint.y; - var shape = this.addShape(group3, { - type: "path", - id: this.getElementId(name), - name, - attrs: __assign({ - size: size14, - direction: direction3, - path: [["M", x6 + size14 / 2, y5], ["L", x6, y5 + size14], ["L", x6 + size14, y5 + size14], ["Z"]], - cursor: "pointer" - }, style) - }); - shape.attr("matrix", getMatrixByAngle({ x: x6 + size14 / 2, y: y5 + size14 / 2 }, ROTATE_MAP[direction3])); - return shape; - }; - Category3.prototype.updateArrowPath = function(arrow, point2) { - var x6 = point2.x, y5 = point2.y; - var _a6 = arrow.attr(), size14 = _a6.size, direction3 = _a6.direction; - var matrix = getMatrixByAngle({ x: x6 + size14 / 2, y: y5 + size14 / 2 }, ROTATE_MAP[direction3]); - arrow.attr("path", [["M", x6 + size14 / 2, y5], ["L", x6, y5 + size14], ["L", x6 + size14, y5 + size14], ["Z"]]); - arrow.attr("matrix", matrix); - }; - Category3.prototype.getCurrentNavigationMatrix = function() { - var _a6 = this, currentPageIndex = _a6.currentPageIndex, pageWidth = _a6.pageWidth, pageHeight = _a6.pageHeight; - var layout6 = this.get("layout"); - var translate6 = layout6 === "horizontal" ? { - x: 0, - y: pageHeight * (1 - currentPageIndex) - } : { - x: pageWidth * (1 - currentPageIndex), - y: 0 - }; - return getMatrixByTranslate(translate6); - }; - Category3.prototype.applyItemStates = function(item, subGroup) { - var states = this.getItemStates(item); - var hasStates = states.length > 0; - if (hasStates) { - var children = subGroup.getChildren(); - var itemStates_1 = this.get("itemStates"); - (0, import_util95.each)(children, function(element) { - var name = element.get("name"); - var elName = name.split("-")[2]; - var statesStyle = getStatesStyle(item, elName, itemStates_1); - if (statesStyle) { - element.attr(statesStyle); - if (elName === "marker" && !(element.get("isStroke") && element.get("isFill"))) { - if (element.get("isStroke")) { - element.attr("fill", null); - } - if (element.get("isFill")) { - element.attr("stroke", null); - } - } - } - }); - } - }; - Category3.prototype.getLimitItemWidth = function() { - var itemWidth = this.get("itemWidth"); - var maxItemWidth = this.get("maxItemWidth"); - if (maxItemWidth) { - if (itemWidth) { - maxItemWidth = itemWidth <= maxItemWidth ? itemWidth : maxItemWidth; - } - } else if (itemWidth) { - maxItemWidth = itemWidth; - } - return maxItemWidth; - }; - return Category3; -}(base_default11); -var category_default = Category2; - -// node_modules/@antv/component/esm/legend/continuous.js -var import_util96 = __toModule(require_lib()); -var HANDLER_HEIGHT_RATIO = 1.4; -var HANDLER_TRIANGLE_RATIO = 0.4; -var ContinueLegend = function(_super) { - __extends(ContinueLegend2, _super); - function ContinueLegend2() { - return _super !== null && _super.apply(this, arguments) || this; - } - ContinueLegend2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { type: "continue", min: 0, max: 100, value: null, colors: [], track: {}, rail: {}, label: {}, handler: {}, slidable: true, tip: null, step: null, maxWidth: null, maxHeight: null, defaultCfg: { - label: { - align: "rail", - spacing: 5, - formatter: null, - style: { - fontSize: 12, - fill: theme_default.textColor, - textBaseline: "middle", - fontFamily: theme_default.fontFamily - } - }, - handler: { - size: 10, - style: { - fill: "#fff", - stroke: "#333" - } - }, - track: {}, - rail: { - type: "color", - size: 20, - defaultLength: 100, - style: { - fill: "#DCDEE2" - } - }, - title: { - spacing: 5, - style: { - fill: theme_default.textColor, - fontSize: 12, - textAlign: "start", - textBaseline: "top" - } - } - } }); - }; - ContinueLegend2.prototype.isSlider = function() { - return true; - }; - ContinueLegend2.prototype.getValue = function() { - return this.getCurrentValue(); - }; - ContinueLegend2.prototype.getRange = function() { - return { - min: this.get("min"), - max: this.get("max") - }; - }; - ContinueLegend2.prototype.setRange = function(min13, max15) { - this.update({ - min: min13, - max: max15 - }); - }; - ContinueLegend2.prototype.setValue = function(value2) { - var originValue = this.getValue(); - this.set("value", value2); - var group3 = this.get("group"); - this.resetTrackClip(); - if (this.get("slidable")) { - this.resetHandlers(group3); - } - this.delegateEmit("valuechanged", { - originValue, - value: value2 - }); - }; - ContinueLegend2.prototype.initEvent = function() { - var group3 = this.get("group"); - this.bindSliderEvent(group3); - this.bindRailEvent(group3); - this.bindTrackEvent(group3); - }; - ContinueLegend2.prototype.drawLegendContent = function(group3) { - this.drawRail(group3); - this.drawLabels(group3); - this.fixedElements(group3); - this.resetTrack(group3); - this.resetTrackClip(group3); - if (this.get("slidable")) { - this.resetHandlers(group3); - } - }; - ContinueLegend2.prototype.bindSliderEvent = function(group3) { - this.bindHandlersEvent(group3); - }; - ContinueLegend2.prototype.bindHandlersEvent = function(group3) { - var _this = this; - group3.on("legend-handler-min:drag", function(ev) { - var minValue = _this.getValueByCanvasPoint(ev.x, ev.y); - var currentValue = _this.getCurrentValue(); - var maxValue = currentValue[1]; - if (maxValue < minValue) { - maxValue = minValue; - } - _this.setValue([minValue, maxValue]); - }); - group3.on("legend-handler-max:drag", function(ev) { - var maxValue = _this.getValueByCanvasPoint(ev.x, ev.y); - var currentValue = _this.getCurrentValue(); - var minValue = currentValue[0]; - if (minValue > maxValue) { - minValue = maxValue; - } - _this.setValue([minValue, maxValue]); - }); - }; - ContinueLegend2.prototype.bindRailEvent = function(group3) { - }; - ContinueLegend2.prototype.bindTrackEvent = function(group3) { - var _this = this; - var prePoint = null; - group3.on("legend-track:dragstart", function(ev) { - prePoint = { - x: ev.x, - y: ev.y - }; - }); - group3.on("legend-track:drag", function(ev) { - if (!prePoint) { - return; - } - var preValue = _this.getValueByCanvasPoint(prePoint.x, prePoint.y); - var curValue = _this.getValueByCanvasPoint(ev.x, ev.y); - var currentValue = _this.getCurrentValue(); - var curDiff = currentValue[1] - currentValue[0]; - var range = _this.getRange(); - var dValue = curValue - preValue; - if (dValue < 0) { - if (currentValue[0] + dValue > range.min) { - _this.setValue([currentValue[0] + dValue, currentValue[1] + dValue]); - } else { - _this.setValue([range.min, range.min + curDiff]); - } - } else if (dValue > 0) { - if (dValue > 0 && currentValue[1] + dValue < range.max) { - _this.setValue([currentValue[0] + dValue, currentValue[1] + dValue]); - } else { - _this.setValue([range.max - curDiff, range.max]); - } - } - prePoint = { - x: ev.x, - y: ev.y - }; - }); - group3.on("legend-track:dragend", function(ev) { - prePoint = null; - }); - }; - ContinueLegend2.prototype.drawLabels = function(group3) { - this.drawLabel("min", group3); - this.drawLabel("max", group3); - }; - ContinueLegend2.prototype.drawLabel = function(name, group3) { - var labelCfg = this.get("label"); - var style = labelCfg.style; - var labelAlign = labelCfg.align; - var labelFormatter = labelCfg.formatter; - var value2 = this.get(name); - var alignAttrs = this.getLabelAlignAttrs(name, labelAlign); - var localId = "label-" + name; - this.addShape(group3, { - type: "text", - id: this.getElementId(localId), - name: "legend-label-" + name, - attrs: __assign(__assign({ x: 0, y: 0, text: (0, import_util96.isFunction)(labelFormatter) ? labelFormatter(value2) : value2 }, style), alignAttrs) - }); - }; - ContinueLegend2.prototype.getLabelAlignAttrs = function(name, align) { - var isVertical2 = this.isVertical(); - var textAlign = "center"; - var textBaseline = "middle"; - if (isVertical2) { - textAlign = "start"; - if (align !== "rail") { - if (name === "min") { - textBaseline = "top"; - } else { - textBaseline = "bottom"; - } - } else { - textBaseline = "top"; - } - } else { - if (align !== "rail") { - textBaseline = "top"; - if (name === "min") { - textAlign = "start"; - } else { - textAlign = "end"; - } - } else { - textAlign = "start"; - textBaseline = "middle"; - } - } - return { - textAlign, - textBaseline - }; - }; - ContinueLegend2.prototype.getRailPath = function(x6, y5, w4, h3) { - var railCfg = this.get("rail"); - var size14 = railCfg.size, defaultLength = railCfg.defaultLength, type2 = railCfg.type; - var isVertical2 = this.isVertical(); - var length5 = defaultLength; - var width2 = w4; - var height = h3; - if (!width2) { - width2 = isVertical2 ? size14 : length5; - } - if (!height) { - height = isVertical2 ? length5 : size14; - } - var path = []; - if (type2 === "color") { - path.push(["M", x6, y5]); - path.push(["L", x6 + width2, y5]); - path.push(["L", x6 + width2, y5 + height]); - path.push(["L", x6, y5 + height]); - path.push(["Z"]); - } else { - path.push(["M", x6 + width2, y5]); - path.push(["L", x6 + width2, y5 + height]); - path.push(["L", x6, y5 + height]); - path.push(["Z"]); - } - return path; - }; - ContinueLegend2.prototype.drawRail = function(group3) { - var railCfg = this.get("rail"); - var style = railCfg.style; - this.addShape(group3, { - type: "path", - id: this.getElementId("rail"), - name: "legend-rail", - attrs: __assign({ path: this.getRailPath(0, 0) }, style) - }); - }; - ContinueLegend2.prototype.getTrackColor = function(colors) { - var count2 = colors.length; - if (!count2) { - return null; - } - if (count2 === 1) { - return colors[0]; - } - var color4; - if (this.isVertical()) { - color4 = "l(90)"; - } else { - color4 = "l(0)"; - } - for (var i4 = 0; i4 < count2; i4++) { - var percent2 = i4 / (count2 - 1); - color4 += " " + percent2 + ":" + colors[i4]; - } - return color4; - }; - ContinueLegend2.prototype.getTrackPath = function(group3) { - var railShape = this.getRailShape(group3); - var path = railShape.attr("path"); - return (0, import_util96.clone)(path); - }; - ContinueLegend2.prototype.getClipTrackAttrs = function(group3) { - var value2 = this.getCurrentValue(); - var min13 = value2[0], max15 = value2[1]; - var railBBox = this.getRailBBox(group3); - var startPoint = this.getPointByValue(min13, group3); - var endPoint = this.getPointByValue(max15, group3); - var isVertical2 = this.isVertical(); - var x6; - var y5; - var width2; - var height; - if (isVertical2) { - x6 = railBBox.minX; - y5 = startPoint.y; - width2 = railBBox.width; - height = endPoint.y - startPoint.y; - } else { - x6 = startPoint.x; - y5 = railBBox.minY; - width2 = endPoint.x - startPoint.x; - height = railBBox.height; - } - return { - x: x6, - y: y5, - width: width2, - height - }; - }; - ContinueLegend2.prototype.getTrackAttrs = function(group3) { - var trackCfg = this.get("track"); - var colors = this.get("colors"); - var path = this.getTrackPath(group3); - return (0, import_util96.mix)({ - path, - fill: this.getTrackColor(colors) - }, trackCfg.style); - }; - ContinueLegend2.prototype.resetTrackClip = function(group3) { - var container2 = group3 || this.get("group"); - var trackId = this.getElementId("track"); - var trackShape = container2.findById(trackId); - var clipShape = trackShape.getClip(); - var attrs = this.getClipTrackAttrs(group3); - if (!clipShape) { - trackShape.setClip({ - type: "rect", - attrs - }); - } else { - clipShape.attr(attrs); - } - }; - ContinueLegend2.prototype.resetTrack = function(group3) { - var trackId = this.getElementId("track"); - var trackShape = group3.findById(trackId); - var trackAttrs = this.getTrackAttrs(group3); - if (trackShape) { - trackShape.attr(trackAttrs); - } else { - this.addShape(group3, { - type: "path", - id: trackId, - draggable: this.get("slidable"), - name: "legend-track", - attrs: trackAttrs - }); - } - }; - ContinueLegend2.prototype.getPointByValue = function(value2, group3) { - var _a6 = this.getRange(), min13 = _a6.min, max15 = _a6.max; - var percent2 = (value2 - min13) / (max15 - min13); - var bbox = this.getRailBBox(group3); - var isVertcal = this.isVertical(); - var point2 = { x: 0, y: 0 }; - if (isVertcal) { - point2.x = bbox.minX + bbox.width / 2; - point2.y = getValueByPercent(bbox.minY, bbox.maxY, percent2); - } else { - point2.x = getValueByPercent(bbox.minX, bbox.maxX, percent2); - point2.y = bbox.minY + bbox.height / 2; - } - return point2; - }; - ContinueLegend2.prototype.getRailShape = function(group3) { - var container2 = group3 || this.get("group"); - return container2.findById(this.getElementId("rail")); - }; - ContinueLegend2.prototype.getRailBBox = function(group3) { - var railShape = this.getRailShape(group3); - var bbox = railShape.getBBox(); - return bbox; - }; - ContinueLegend2.prototype.getRailCanvasBBox = function() { - var container2 = this.get("group"); - var railShape = container2.findById(this.getElementId("rail")); - var bbox = railShape.getCanvasBBox(); - return bbox; - }; - ContinueLegend2.prototype.isVertical = function() { - return this.get("layout") === "vertical"; - }; - ContinueLegend2.prototype.getValueByCanvasPoint = function(x6, y5) { - var _a6 = this.getRange(), min13 = _a6.min, max15 = _a6.max; - var bbox = this.getRailCanvasBBox(); - var isVertcal = this.isVertical(); - var step = this.get("step"); - var percent2; - if (isVertcal) { - percent2 = (y5 - bbox.minY) / bbox.height; - } else { - percent2 = (x6 - bbox.minX) / bbox.width; - } - var value2 = getValueByPercent(min13, max15, percent2); - if (step) { - var count2 = Math.round((value2 - min13) / step); - value2 = min13 + count2 * step; - } - if (value2 > max15) { - value2 = max15; - } - if (value2 < min13) { - value2 = min13; - } - return value2; - }; - ContinueLegend2.prototype.getCurrentValue = function() { - var value2 = this.get("value"); - if (!value2) { - var values4 = this.get("values"); - if (!values4) { - return [this.get("min"), this.get("max")]; - } - return [Math.max(Math.min.apply(Math, __spreadArrays(values4, [this.get("max")])), this.get("min")), Math.min(Math.max.apply(Math, __spreadArrays(values4, [this.get("min")])), this.get("max"))]; - } - return value2; - }; - ContinueLegend2.prototype.resetHandlers = function(group3) { - var currentValue = this.getCurrentValue(); - var min13 = currentValue[0], max15 = currentValue[1]; - this.resetHandler(group3, "min", min13); - this.resetHandler(group3, "max", max15); - }; - ContinueLegend2.prototype.getHandlerPath = function(handlerCfg, point2) { - var isVertical2 = this.isVertical(); - var path = []; - var width2 = handlerCfg.size; - var x6 = point2.x, y5 = point2.y; - var height = width2 * HANDLER_HEIGHT_RATIO; - var halfWidth = width2 / 2; - var oneSixthWidth = width2 / 6; - if (isVertical2) { - var triangleX = x6 + height * HANDLER_TRIANGLE_RATIO; - path.push(["M", x6, y5]); - path.push(["L", triangleX, y5 + halfWidth]); - path.push(["L", x6 + height, y5 + halfWidth]); - path.push(["L", x6 + height, y5 - halfWidth]); - path.push(["L", triangleX, y5 - halfWidth]); - path.push(["Z"]); - path.push(["M", triangleX, y5 + oneSixthWidth]); - path.push(["L", x6 + height - 2, y5 + oneSixthWidth]); - path.push(["M", triangleX, y5 - oneSixthWidth]); - path.push(["L", x6 + height - 2, y5 - oneSixthWidth]); - } else { - var triangleY = y5 + height * HANDLER_TRIANGLE_RATIO; - path.push(["M", x6, y5]); - path.push(["L", x6 - halfWidth, triangleY]); - path.push(["L", x6 - halfWidth, y5 + height]); - path.push(["L", x6 + halfWidth, y5 + height]); - path.push(["L", x6 + halfWidth, triangleY]); - path.push(["Z"]); - path.push(["M", x6 - oneSixthWidth, triangleY]); - path.push(["L", x6 - oneSixthWidth, y5 + height - 2]); - path.push(["M", x6 + oneSixthWidth, triangleY]); - path.push(["L", x6 + oneSixthWidth, y5 + height - 2]); - } - return path; - }; - ContinueLegend2.prototype.resetHandler = function(group3, name, value2) { - var point2 = this.getPointByValue(value2, group3); - var handlerCfg = this.get("handler"); - var path = this.getHandlerPath(handlerCfg, point2); - var id = this.getElementId("handler-" + name); - var handlerShape = group3.findById(id); - var isVertical2 = this.isVertical(); - if (handlerShape) { - handlerShape.attr("path", path); - } else { - this.addShape(group3, { - type: "path", - name: "legend-handler-" + name, - draggable: true, - id, - attrs: __assign(__assign({ path }, handlerCfg.style), { cursor: isVertical2 ? "ns-resize" : "ew-resize" }) - }); - } - }; - ContinueLegend2.prototype.fixedElements = function(group3) { - var railShape = group3.findById(this.getElementId("rail")); - var minLabel = group3.findById(this.getElementId("label-min")); - var maxLabel = group3.findById(this.getElementId("label-max")); - var startPoint = this.getDrawPoint(); - if (this.isVertical()) { - this.fixedVertail(minLabel, maxLabel, railShape, startPoint); - } else { - this.fixedHorizontal(minLabel, maxLabel, railShape, startPoint); - } - }; - ContinueLegend2.prototype.fitRailLength = function(minLabelBBox, maxLabelBBox, railBBox, railShape) { - var isVertical2 = this.isVertical(); - var lengthField = isVertical2 ? "height" : "width"; - var labelCfg = this.get("label"); - var labelAlign = labelCfg.align; - var spacing = labelCfg.spacing; - var maxLength = this.get("max" + (0, import_util96.upperFirst)(lengthField)); - if (maxLength) { - var elementsLength = labelAlign === "rail" ? railBBox[lengthField] + minLabelBBox[lengthField] + maxLabelBBox[lengthField] + spacing * 2 : railBBox[lengthField]; - var diff2 = elementsLength - maxLength; - if (diff2 > 0) { - this.changeRailLength(railShape, lengthField, railBBox[lengthField] - diff2); - } - } - }; - ContinueLegend2.prototype.changeRailLength = function(railShape, lengthField, length5) { - var bbox = railShape.getBBox(); - var path; - if (lengthField === "height") { - path = this.getRailPath(bbox.x, bbox.y, bbox.width, length5); - } else { - path = this.getRailPath(bbox.x, bbox.y, length5, bbox.height); - } - railShape.attr("path", path); - }; - ContinueLegend2.prototype.changeRailPosition = function(railShape, x6, y5) { - var bbox = railShape.getBBox(); - var path = this.getRailPath(x6, y5, bbox.width, bbox.height); - railShape.attr("path", path); - }; - ContinueLegend2.prototype.fixedHorizontal = function(minLabel, maxLabel, railShape, startPoint) { - var labelCfg = this.get("label"); - var labelAlign = labelCfg.align; - var spacing = labelCfg.spacing; - var railBBox = railShape.getBBox(); - var minLabelBBox = minLabel.getBBox(); - var maxLabelBBox = maxLabel.getBBox(); - var railHeight = railBBox.height; - this.fitRailLength(minLabelBBox, maxLabelBBox, railBBox, railShape); - railBBox = railShape.getBBox(); - if (labelAlign === "rail") { - minLabel.attr({ - x: startPoint.x, - y: startPoint.y + railHeight / 2 - }); - this.changeRailPosition(railShape, startPoint.x + minLabelBBox.width + spacing, startPoint.y); - maxLabel.attr({ - x: startPoint.x + minLabelBBox.width + railBBox.width + spacing * 2, - y: startPoint.y + railHeight / 2 - }); - } else if (labelAlign === "top") { - minLabel.attr({ - x: startPoint.x, - y: startPoint.y - }); - maxLabel.attr({ - x: startPoint.x + railBBox.width, - y: startPoint.y - }); - this.changeRailPosition(railShape, startPoint.x, startPoint.y + minLabelBBox.height + spacing); - } else { - this.changeRailPosition(railShape, startPoint.x, startPoint.y); - minLabel.attr({ - x: startPoint.x, - y: startPoint.y + railBBox.height + spacing - }); - maxLabel.attr({ - x: startPoint.x + railBBox.width, - y: startPoint.y + railBBox.height + spacing - }); - } - }; - ContinueLegend2.prototype.fixedVertail = function(minLabel, maxLabel, railShape, startPoint) { - var labelCfg = this.get("label"); - var labelAlign = labelCfg.align; - var spacing = labelCfg.spacing; - var railBBox = railShape.getBBox(); - var minLabelBBox = minLabel.getBBox(); - var maxLabelBBox = maxLabel.getBBox(); - this.fitRailLength(minLabelBBox, maxLabelBBox, railBBox, railShape); - railBBox = railShape.getBBox(); - if (labelAlign === "rail") { - minLabel.attr({ - x: startPoint.x, - y: startPoint.y - }); - this.changeRailPosition(railShape, startPoint.x, startPoint.y + minLabelBBox.height + spacing); - maxLabel.attr({ - x: startPoint.x, - y: startPoint.y + minLabelBBox.height + railBBox.height + spacing * 2 - }); - } else if (labelAlign === "right") { - minLabel.attr({ - x: startPoint.x + railBBox.width + spacing, - y: startPoint.y - }); - this.changeRailPosition(railShape, startPoint.x, startPoint.y); - maxLabel.attr({ - x: startPoint.x + railBBox.width + spacing, - y: startPoint.y + railBBox.height - }); - } else { - var maxLabelWidth = Math.max(minLabelBBox.width, maxLabelBBox.width); - minLabel.attr({ - x: startPoint.x, - y: startPoint.y - }); - this.changeRailPosition(railShape, startPoint.x + maxLabelWidth + spacing, startPoint.y); - maxLabel.attr({ - x: startPoint.x, - y: startPoint.y + railBBox.height - }); - } - }; - return ContinueLegend2; -}(base_default11); -var continuous_default = ContinueLegend; - -// node_modules/@antv/component/esm/tooltip/index.js -var tooltip_exports = {}; -__export(tooltip_exports, { - Html: () => html_default3 -}); - -// node_modules/@antv/component/esm/tooltip/html.js -var import_util98 = __toModule(require_lib()); - -// node_modules/@antv/component/esm/tooltip/css-const.js -var css_const_exports = {}; -__export(css_const_exports, { - CONTAINER_CLASS: () => CONTAINER_CLASS2, - CROSSHAIR_X: () => CROSSHAIR_X, - CROSSHAIR_Y: () => CROSSHAIR_Y, - LIST_CLASS: () => LIST_CLASS, - LIST_ITEM_CLASS: () => LIST_ITEM_CLASS, - MARKER_CLASS: () => MARKER_CLASS, - NAME_CLASS: () => NAME_CLASS, - TITLE_CLASS: () => TITLE_CLASS, - VALUE_CLASS: () => VALUE_CLASS -}); -var CONTAINER_CLASS2 = "g2-tooltip"; -var TITLE_CLASS = "g2-tooltip-title"; -var LIST_CLASS = "g2-tooltip-list"; -var LIST_ITEM_CLASS = "g2-tooltip-list-item"; -var MARKER_CLASS = "g2-tooltip-marker"; -var VALUE_CLASS = "g2-tooltip-value"; -var NAME_CLASS = "g2-tooltip-name"; -var CROSSHAIR_X = "g2-tooltip-crosshair-x"; -var CROSSHAIR_Y = "g2-tooltip-crosshair-y"; - -// node_modules/@antv/component/esm/tooltip/html-theme.js -var _a2; -var html_theme_default2 = (_a2 = {}, _a2["" + CONTAINER_CLASS2] = { - position: "absolute", - visibility: "visible", - zIndex: 8, - transition: "visibility 0.2s cubic-bezier(0.23, 1, 0.32, 1), left 0.4s cubic-bezier(0.23, 1, 0.32, 1), top 0.4s cubic-bezier(0.23, 1, 0.32, 1)", - backgroundColor: "rgba(255, 255, 255, 0.9)", - boxShadow: "0px 0px 10px #aeaeae", - borderRadius: "3px", - color: "rgb(87, 87, 87)", - fontSize: "12px", - fontFamily: theme_default.fontFamily, - lineHeight: "20px", - padding: "10px 10px 6px 10px" -}, _a2["" + TITLE_CLASS] = { - marginBottom: "4px" -}, _a2["" + LIST_CLASS] = { - margin: "0px", - listStyleType: "none", - padding: "0px" -}, _a2["" + LIST_ITEM_CLASS] = { - listStyleType: "none", - marginBottom: "4px" -}, _a2["" + MARKER_CLASS] = { - width: "8px", - height: "8px", - borderRadius: "50%", - display: "inline-block", - marginRight: "8px" -}, _a2["" + VALUE_CLASS] = { - display: "inline-block", - float: "right", - marginLeft: "30px" -}, _a2["" + CROSSHAIR_X] = { - position: "absolute", - width: "1px", - backgroundColor: "rgba(0, 0, 0, 0.25)" -}, _a2["" + CROSSHAIR_Y] = { - position: "absolute", - height: "1px", - backgroundColor: "rgba(0, 0, 0, 0.25)" -}, _a2); - -// node_modules/@antv/component/esm/util/align.js -function getOutSides(x6, y5, width2, height, limitBox) { - var hits = { - left: x6 < limitBox.x, - right: x6 + width2 > limitBox.x + limitBox.width, - top: y5 < limitBox.y, - bottom: y5 + height > limitBox.y + limitBox.height - }; - return hits; -} -function getPointByPosition(x6, y5, offset, width2, height, position2) { - var px = x6; - var py = y5; - switch (position2) { - case "left": - px = x6 - width2 - offset; - py = y5 - height / 2; - break; - case "right": - px = x6 + offset; - py = y5 - height / 2; - break; - case "top": - px = x6 - width2 / 2; - py = y5 - height - offset; - break; - case "bottom": - px = x6 - width2 / 2; - py = y5 + offset; - break; - default: - px = x6 + offset; - py = y5 - height - offset; - break; - } - return { - x: px, - y: py - }; -} -function getAlignPoint(x6, y5, offset, width2, height, position2, limitBox) { - var point2 = getPointByPosition(x6, y5, offset, width2, height, position2); - if (limitBox) { - var outSides = getOutSides(point2.x, point2.y, width2, height, limitBox); - if (position2 === "auto") { - if (outSides.right) { - point2.x = Math.max(0, x6 - width2 - offset); - } - if (outSides.top) { - point2.y = Math.max(0, y5 - height - offset); - } - } else if (position2 === "top" || position2 === "bottom") { - if (outSides.left) { - point2.x = limitBox.x; - } - if (outSides.right) { - point2.x = limitBox.x + limitBox.width - width2; - } - if (position2 === "top" && outSides.top) { - point2.y = y5 + offset; - } - if (position2 === "bottom" && outSides.bottom) { - point2.y = y5 - height - offset; - } - } else { - if (outSides.top) { - point2.y = limitBox.y; - } - if (outSides.bottom) { - point2.y = limitBox.y + limitBox.height - height; - } - if (position2 === "left" && outSides.left) { - point2.x = x6 + offset; - } - if (position2 === "right" && outSides.right) { - point2.x = x6 - width2 - offset; - } - } - } - return point2; -} - -// node_modules/@antv/component/esm/tooltip/html.js -function hasOneKey(obj, keys6) { - var result = false; - (0, import_util98.each)(keys6, function(key) { - if ((0, import_util98.hasKey)(obj, key)) { - result = true; - return false; - } - }); - return result; -} -var Tooltip = function(_super) { - __extends(Tooltip5, _super); - function Tooltip5() { - return _super !== null && _super.apply(this, arguments) || this; - } - Tooltip5.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { - name: "tooltip", - type: "html", - x: 0, - y: 0, - items: [], - customContent: null, - containerTpl: '
    ', - itemTpl: '
  • \n \n {name}:\n {value}\n
  • ', - xCrosshairTpl: '
    ', - yCrosshairTpl: '
    ', - title: null, - showTitle: true, - region: null, - crosshairsRegion: null, - containerClassName: CONTAINER_CLASS2, - crosshairs: null, - offset: 10, - position: "right", - domStyles: null, - defaultStyles: html_theme_default2 - }); - }; - Tooltip5.prototype.render = function() { - if (this.get("customContent")) { - this.renderCustomContent(); - } else { - this.resetTitle(); - this.renderItems(); - } - this.resetPosition(); - }; - Tooltip5.prototype.clear = function() { - this.clearCrosshairs(); - this.setTitle(""); - this.clearItemDoms(); - }; - Tooltip5.prototype.show = function() { - var container2 = this.getContainer(); - if (!container2 || this.destroyed) { - return; - } - this.set("visible", true); - modifyCSS(container2, { - visibility: "visible" - }); - this.setCrossHairsVisible(true); - }; - Tooltip5.prototype.hide = function() { - var container2 = this.getContainer(); - if (!container2 || this.destroyed) { - return; - } - this.set("visible", false); - modifyCSS(container2, { - visibility: "hidden" - }); - this.setCrossHairsVisible(false); - }; - Tooltip5.prototype.getLocation = function() { - return { x: this.get("x"), y: this.get("y") }; - }; - Tooltip5.prototype.setLocation = function(point2) { - this.set("x", point2.x); - this.set("y", point2.y); - this.resetPosition(); - }; - Tooltip5.prototype.setCrossHairsVisible = function(visible) { - var display = visible ? "" : "none"; - var xCrosshairDom = this.get("xCrosshairDom"); - var yCrosshairDom = this.get("yCrosshairDom"); - xCrosshairDom && modifyCSS(xCrosshairDom, { - display - }); - yCrosshairDom && modifyCSS(yCrosshairDom, { - display - }); - }; - Tooltip5.prototype.initContainer = function() { - _super.prototype.initContainer.call(this); - if (this.get("customContent")) { - if (this.get("container")) { - this.get("container").remove(); - } - var container2 = this.getHtmlContentNode(); - this.get("parent").appendChild(container2); - this.set("container", container2); - this.resetStyles(); - this.applyStyles(); - } - }; - Tooltip5.prototype.updateInner = function(cfg) { - if (this.get("customContent")) { - this.renderCustomContent(); - } else { - if (hasOneKey(cfg, ["title", "showTitle"])) { - this.resetTitle(); - } - if ((0, import_util98.hasKey)(cfg, "items")) { - this.renderItems(); - } - } - _super.prototype.updateInner.call(this, cfg); - }; - Tooltip5.prototype.initDom = function() { - this.cacheDoms(); - }; - Tooltip5.prototype.removeDom = function() { - _super.prototype.removeDom.call(this); - this.clearCrosshairs(); - }; - Tooltip5.prototype.resetPosition = function() { - var x6 = this.get("x"); - var y5 = this.get("y"); - var offset = this.get("offset"); - var _a6 = this.getOffset(), offsetX = _a6.offsetX, offsetY = _a6.offsetY; - var position2 = this.get("position"); - var region = this.get("region"); - var container2 = this.getContainer(); - var bbox = this.getBBox(); - var width2 = bbox.width, height = bbox.height; - var limitBox; - if (region) { - limitBox = regionToBBox(region); - } - var point2 = getAlignPoint(x6, y5, offset, width2, height, position2, limitBox); - modifyCSS(container2, { - left: toPx(point2.x + offsetX), - top: toPx(point2.y + offsetY) - }); - this.resetCrosshairs(); - }; - Tooltip5.prototype.renderCustomContent = function() { - var node = this.getHtmlContentNode(); - var parent = this.get("parent"); - var curContainer = this.get("container"); - if (curContainer && curContainer.parentNode === parent) { - parent.replaceChild(node, curContainer); - } else { - parent.appendChild(node); - } - this.set("container", node); - this.resetStyles(); - this.applyStyles(); - }; - Tooltip5.prototype.getHtmlContentNode = function() { - var node; - var customContent = this.get("customContent"); - if (customContent) { - var elem = customContent(this.get("title"), this.get("items")); - if ((0, import_util98.isElement)(elem)) { - node = elem; - } else { - node = createDom(elem); - } - } - return node; - }; - Tooltip5.prototype.cacheDoms = function() { - var container2 = this.getContainer(); - var titleDom = container2.getElementsByClassName(TITLE_CLASS)[0]; - var listDom = container2.getElementsByClassName(LIST_CLASS)[0]; - this.set("titleDom", titleDom); - this.set("listDom", listDom); - }; - Tooltip5.prototype.resetTitle = function() { - var title = this.get("title"); - var showTitle = this.get("showTitle"); - if (showTitle && title) { - this.setTitle(title); - } else { - this.setTitle(""); - } - }; - Tooltip5.prototype.setTitle = function(text) { - var titleDom = this.get("titleDom"); - if (titleDom) { - titleDom.innerText = text; - } - }; - Tooltip5.prototype.resetCrosshairs = function() { - var crosshairsRegion = this.get("crosshairsRegion"); - var crosshairs = this.get("crosshairs"); - if (!crosshairsRegion || !crosshairs) { - this.clearCrosshairs(); - } else { - var crosshairBox = regionToBBox(crosshairsRegion); - var xCrosshairDom = this.get("xCrosshairDom"); - var yCrosshairDom = this.get("yCrosshairDom"); - if (crosshairs === "x") { - this.resetCrosshair("x", crosshairBox); - if (yCrosshairDom) { - yCrosshairDom.remove(); - this.set("yCrosshairDom", null); - } - } else if (crosshairs === "y") { - this.resetCrosshair("y", crosshairBox); - if (xCrosshairDom) { - xCrosshairDom.remove(); - this.set("xCrosshairDom", null); - } - } else { - this.resetCrosshair("x", crosshairBox); - this.resetCrosshair("y", crosshairBox); - } - this.setCrossHairsVisible(this.get("visible")); - } - }; - Tooltip5.prototype.resetCrosshair = function(name, bbox) { - var croshairDom = this.checkCrosshair(name); - var value2 = this.get(name); - if (name === "x") { - modifyCSS(croshairDom, { - left: toPx(value2), - top: toPx(bbox.y), - height: toPx(bbox.height) - }); - } else { - modifyCSS(croshairDom, { - top: toPx(value2), - left: toPx(bbox.x), - width: toPx(bbox.width) - }); - } - }; - Tooltip5.prototype.checkCrosshair = function(name) { - var domName = name + "CrosshairDom"; - var tplName = name + "CrosshairTpl"; - var constName = "CROSSHAIR_" + name.toUpperCase(); - var styleName = css_const_exports[constName]; - var croshairDom = this.get(domName); - var parent = this.get("parent"); - if (!croshairDom) { - croshairDom = createDom(this.get(tplName)); - this.applyStyle(styleName, croshairDom); - parent.appendChild(croshairDom); - this.set(domName, croshairDom); - } - return croshairDom; - }; - Tooltip5.prototype.renderItems = function() { - this.clearItemDoms(); - var items = this.get("items"); - var itemTpl = this.get("itemTpl"); - var listDom = this.get("listDom"); - if (listDom) { - (0, import_util98.each)(items, function(item) { - var color4 = esm_default2.toCSSGradient(item.color); - var substituteObj = __assign(__assign({}, item), { color: color4 }); - var domStr = (0, import_util98.substitute)(itemTpl, substituteObj); - var itemDom = createDom(domStr); - listDom.appendChild(itemDom); - }); - this.applyChildrenStyles(listDom, this.get("domStyles")); - } - }; - Tooltip5.prototype.clearItemDoms = function() { - if (this.get("listDom")) { - clearDom(this.get("listDom")); - } - }; - Tooltip5.prototype.clearCrosshairs = function() { - var xCrosshairDom = this.get("xCrosshairDom"); - var yCrosshairDom = this.get("yCrosshairDom"); - xCrosshairDom && xCrosshairDom.remove(); - yCrosshairDom && yCrosshairDom.remove(); - this.set("xCrosshairDom", null); - this.set("yCrosshairDom", null); - }; - return Tooltip5; -}(html_component_default); -var html_default3 = Tooltip; - -// node_modules/@antv/component/esm/slider/slider.js -var import_util101 = __toModule(require_lib()); - -// node_modules/@antv/component/esm/trend/constant.js -var BACKGROUND_STYLE = { - opacity: 0 -}; -var LINE_STYLE = { - stroke: "#C5C5C5", - strokeOpacity: 0.85 -}; -var AREA_STYLE = { - fill: "#CACED4", - opacity: 0.85 -}; - -// node_modules/@antv/component/esm/trend/path.js -var import_util100 = __toModule(require_lib()); -function pointsToPath(points) { - return (0, import_util100.map)(points, function(p4, idx) { - var command = idx === 0 ? "M" : "L"; - var x6 = p4[0], y5 = p4[1]; - return [command, x6, y5]; - }); -} -function getLinePath(points) { - return pointsToPath(points); -} -function getSmoothLinePath(points) { - if (points.length <= 2) { - return getLinePath(points); - } - var data3 = []; - (0, import_util100.each)(points, function(p4) { - if (!(0, import_util100.isEqual)(p4, data3.slice(data3.length - 2))) { - data3.push(p4[0], p4[1]); - } - }); - var path = catmull_rom_2_bezier_default(data3, false); - var _a6 = (0, import_util100.head)(points), x6 = _a6[0], y5 = _a6[1]; - path.unshift(["M", x6, y5]); - return path; -} -function dataToPath(data3, width2, height, smooth) { - if (smooth === void 0) { - smooth = true; - } - var y5 = new linear_default({ - values: data3 - }); - var x6 = new base_default5({ - values: (0, import_util100.map)(data3, function(v3, idx) { - return idx; - }) - }); - var points = (0, import_util100.map)(data3, function(v3, idx) { - return [x6.scale(idx) * width2, height - y5.scale(v3) * height]; - }); - return smooth ? getSmoothLinePath(points) : getLinePath(points); -} -function getAreaLineY(data3, height) { - var y5 = new linear_default({ - values: data3 - }); - var lineY = Math.max(0, y5.min); - return height - y5.scale(lineY) * height; -} -function linePathToAreaPath(path, width2, height, data3) { - var areaPath = __spreadArrays(path); - var lineYPx = getAreaLineY(data3, height); - areaPath.push(["L", width2, lineYPx]); - areaPath.push(["L", 0, lineYPx]); - areaPath.push(["Z"]); - return areaPath; -} - -// node_modules/@antv/component/esm/trend/trend.js -var Trend = function(_super) { - __extends(Trend3, _super); - function Trend3() { - return _super !== null && _super.apply(this, arguments) || this; - } - Trend3.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "trend", x: 0, y: 0, width: 200, height: 16, smooth: true, isArea: false, data: [], backgroundStyle: BACKGROUND_STYLE, lineStyle: LINE_STYLE, areaStyle: AREA_STYLE }); - }; - Trend3.prototype.renderInner = function(group3) { - var _a6 = this.cfg, width2 = _a6.width, height = _a6.height, data3 = _a6.data, smooth = _a6.smooth, isArea = _a6.isArea, backgroundStyle = _a6.backgroundStyle, lineStyle = _a6.lineStyle, areaStyle = _a6.areaStyle; - this.addShape(group3, { - id: this.getElementId("background"), - type: "rect", - attrs: __assign({ - x: 0, - y: 0, - width: width2, - height - }, backgroundStyle) - }); - var path = dataToPath(data3, width2, height, smooth); - this.addShape(group3, { - id: this.getElementId("line"), - type: "path", - attrs: __assign({ path }, lineStyle) - }); - if (isArea) { - var areaPath = linePathToAreaPath(path, width2, height, data3); - this.addShape(group3, { - id: this.getElementId("area"), - type: "path", - attrs: __assign({ path: areaPath }, areaStyle) - }); - } - }; - Trend3.prototype.applyOffset = function() { - var _a6 = this.cfg, x6 = _a6.x, y5 = _a6.y; - this.moveElementTo(this.get("group"), { - x: x6, - y: y5 - }); - }; - return Trend3; -}(group_component_default); - -// node_modules/@antv/component/esm/slider/handler.js -var DEFAULT_HANDLER_STYLE = { - fill: "#F7F7F7", - stroke: "#BFBFBF", - radius: 2, - opacity: 1, - cursor: "ew-resize", - highLightFill: "#FFF" -}; -var Handler = function(_super) { - __extends(Handler3, _super); - function Handler3() { - return _super !== null && _super.apply(this, arguments) || this; - } - Handler3.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "handler", x: 0, y: 0, width: 10, height: 24, style: DEFAULT_HANDLER_STYLE }); - }; - Handler3.prototype.renderInner = function(group3) { - var _a6 = this.cfg, width2 = _a6.width, height = _a6.height, style = _a6.style; - var fill = style.fill, stroke = style.stroke, radius = style.radius, opacity = style.opacity, cursor = style.cursor; - this.addShape(group3, { - type: "rect", - id: this.getElementId("background"), - attrs: { - x: 0, - y: 0, - width: width2, - height, - fill, - stroke, - radius, - opacity, - cursor - } - }); - var x1 = 1 / 3 * width2; - var x22 = 2 / 3 * width2; - var y1 = 1 / 4 * height; - var y22 = 3 / 4 * height; - this.addShape(group3, { - id: this.getElementId("line-left"), - type: "line", - attrs: { - x1, - y1, - x2: x1, - y2: y22, - stroke, - cursor - } - }); - this.addShape(group3, { - id: this.getElementId("line-right"), - type: "line", - attrs: { - x1: x22, - y1, - x2: x22, - y2: y22, - stroke, - cursor - } - }); - }; - Handler3.prototype.applyOffset = function() { - this.moveElementTo(this.get("group"), { - x: this.get("x"), - y: this.get("y") - }); - }; - Handler3.prototype.initEvent = function() { - this.bindEvents(); - }; - Handler3.prototype.bindEvents = function() { - var _this = this; - this.get("group").on("mouseenter", function() { - var highLightFill = _this.get("style").highLightFill; - _this.getElementByLocalId("background").attr("fill", highLightFill); - _this.draw(); - }); - this.get("group").on("mouseleave", function() { - var fill = _this.get("style").fill; - _this.getElementByLocalId("background").attr("fill", fill); - _this.draw(); - }); - }; - Handler3.prototype.draw = function() { - var canvas = this.get("container").get("canvas"); - if (canvas) { - canvas.draw(); - } - }; - return Handler3; -}(group_component_default); - -// node_modules/@antv/component/esm/slider/constant.js -var BACKGROUND_STYLE2 = { - fill: "#416180", - opacity: 0.05 -}; -var FOREGROUND_STYLE = { - fill: "#5B8FF9", - opacity: 0.15, - cursor: "move" -}; -var DEFAULT_HANDLER_WIDTH = 10; -var HANDLER_STYLE = { - width: DEFAULT_HANDLER_WIDTH, - height: 24 -}; -var TEXT_STYLE = { - textBaseline: "middle", - fill: "#000", - opacity: 0.45 -}; -var SLIDER_CHANGE = "sliderchange"; - -// node_modules/@antv/component/esm/slider/slider.js -var Slider = function(_super) { - __extends(Slider3, _super); - function Slider3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.onMouseDown = function(target) { - return function(e4) { - _this.currentTarget = target; - var event = e4.originalEvent; - event.stopPropagation(); - event.preventDefault(); - _this.prevX = (0, import_util101.get)(event, "touches.0.pageX", event.pageX); - _this.prevY = (0, import_util101.get)(event, "touches.0.pageY", event.pageY); - var containerDOM = _this.getContainerDOM(); - containerDOM.addEventListener("mousemove", _this.onMouseMove); - containerDOM.addEventListener("mouseup", _this.onMouseUp); - containerDOM.addEventListener("mouseleave", _this.onMouseUp); - containerDOM.addEventListener("touchmove", _this.onMouseMove); - containerDOM.addEventListener("touchend", _this.onMouseUp); - containerDOM.addEventListener("touchcancel", _this.onMouseUp); - }; - }; - _this.onMouseMove = function(event) { - var width2 = _this.cfg.width; - var originValue = [_this.get("start"), _this.get("end")]; - event.stopPropagation(); - event.preventDefault(); - var x6 = (0, import_util101.get)(event, "touches.0.pageX", event.pageX); - var y5 = (0, import_util101.get)(event, "touches.0.pageY", event.pageY); - var offsetX = x6 - _this.prevX; - var offsetXRange = _this.adjustOffsetRange(offsetX / width2); - _this.updateStartEnd(offsetXRange); - _this.updateUI(_this.getElementByLocalId("foreground"), _this.getElementByLocalId("minText"), _this.getElementByLocalId("maxText")); - _this.prevX = x6; - _this.prevY = y5; - _this.draw(); - _this.emit(SLIDER_CHANGE, [_this.get("start"), _this.get("end")].sort()); - _this.delegateEmit("valuechanged", { - originValue, - value: [_this.get("start"), _this.get("end")] - }); - }; - _this.onMouseUp = function() { - if (_this.currentTarget) { - _this.currentTarget = void 0; - } - var containerDOM = _this.getContainerDOM(); - if (containerDOM) { - containerDOM.removeEventListener("mousemove", _this.onMouseMove); - containerDOM.removeEventListener("mouseup", _this.onMouseUp); - containerDOM.removeEventListener("mouseleave", _this.onMouseUp); - containerDOM.removeEventListener("touchmove", _this.onMouseMove); - containerDOM.removeEventListener("touchend", _this.onMouseUp); - containerDOM.removeEventListener("touchcancel", _this.onMouseUp); - } - }; - return _this; - } - Slider3.prototype.setRange = function(min13, max15) { - this.set("minLimit", min13); - this.set("maxLimit", max15); - var oldStart = this.get("start"); - var oldEnd = this.get("end"); - var newStart = (0, import_util101.clamp)(oldStart, min13, max15); - var newEnd = (0, import_util101.clamp)(oldEnd, min13, max15); - if (!this.get("isInit") && (oldStart !== newStart || oldEnd !== newEnd)) { - this.setValue([newStart, newEnd]); - } - }; - Slider3.prototype.getRange = function() { - return { - min: this.get("minLimit") || 0, - max: this.get("maxLimit") || 1 - }; - }; - Slider3.prototype.setValue = function(value2) { - var range = this.getRange(); - if ((0, import_util101.isArray)(value2) && value2.length === 2) { - var originValue = [this.get("start"), this.get("end")]; - this.update({ - start: (0, import_util101.clamp)(value2[0], range.min, range.max), - end: (0, import_util101.clamp)(value2[1], range.min, range.max) - }); - if (!this.get("updateAutoRender")) { - this.render(); - } - this.delegateEmit("valuechanged", { - originValue, - value: value2 - }); - } - }; - Slider3.prototype.getValue = function() { - return [this.get("start"), this.get("end")]; - }; - Slider3.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "slider", x: 0, y: 0, width: 100, height: 16, backgroundStyle: {}, foregroundStyle: {}, handlerStyle: {}, textStyle: {}, defaultCfg: { - backgroundStyle: BACKGROUND_STYLE2, - foregroundStyle: FOREGROUND_STYLE, - handlerStyle: HANDLER_STYLE, - textStyle: TEXT_STYLE - } }); - }; - Slider3.prototype.update = function(cfg) { - var start = cfg.start, end2 = cfg.end; - var validCfg = __assign({}, cfg); - if (!(0, import_util101.isNil)(start)) { - validCfg.start = (0, import_util101.clamp)(start, 0, 1); - } - if (!(0, import_util101.isNil)(end2)) { - validCfg.end = (0, import_util101.clamp)(end2, 0, 1); - } - _super.prototype.update.call(this, validCfg); - this.minHandler = this.getChildComponentById(this.getElementId("minHandler")); - this.maxHandler = this.getChildComponentById(this.getElementId("maxHandler")); - this.trend = this.getChildComponentById(this.getElementId("trend")); - }; - Slider3.prototype.init = function() { - this.set("start", (0, import_util101.clamp)(this.get("start"), 0, 1)); - this.set("end", (0, import_util101.clamp)(this.get("end"), 0, 1)); - _super.prototype.init.call(this); - }; - Slider3.prototype.render = function() { - _super.prototype.render.call(this); - this.updateUI(this.getElementByLocalId("foreground"), this.getElementByLocalId("minText"), this.getElementByLocalId("maxText")); - }; - Slider3.prototype.renderInner = function(group3) { - var _a6 = this.cfg, start = _a6.start, end2 = _a6.end, width2 = _a6.width, height = _a6.height, _b = _a6.trendCfg, trendCfg = _b === void 0 ? {} : _b, minText = _a6.minText, maxText = _a6.maxText, _c = _a6.backgroundStyle, backgroundStyle = _c === void 0 ? {} : _c, _d = _a6.foregroundStyle, foregroundStyle = _d === void 0 ? {} : _d, _e = _a6.textStyle, textStyle2 = _e === void 0 ? {} : _e; - var handlerStyle = (0, import_util101.deepMix)({}, DEFAULT_HANDLER_STYLE, this.cfg.handlerStyle); - var min13 = start * width2; - var max15 = end2 * width2; - if ((0, import_util101.size)((0, import_util101.get)(trendCfg, "data"))) { - this.trend = this.addComponent(group3, __assign({ - component: Trend, - id: this.getElementId("trend"), - x: 0, - y: 0, - width: width2, - height - }, trendCfg)); - } - this.addShape(group3, { - id: this.getElementId("background"), - type: "rect", - attrs: __assign({ - x: 0, - y: 0, - width: width2, - height - }, backgroundStyle) - }); - var minTextShape = this.addShape(group3, { - id: this.getElementId("minText"), - type: "text", - attrs: __assign({ - y: height / 2, - textAlign: "right", - text: minText, - silent: false - }, textStyle2) - }); - var maxTextShape = this.addShape(group3, { - id: this.getElementId("maxText"), - type: "text", - attrs: __assign({ - y: height / 2, - textAlign: "left", - text: maxText, - silent: false - }, textStyle2) - }); - var foregroundShape = this.addShape(group3, { - id: this.getElementId("foreground"), - name: "foreground", - type: "rect", - attrs: __assign({ - y: 0, - height - }, foregroundStyle) - }); - var handlerWidth = (0, import_util101.get)(handlerStyle, "width", DEFAULT_HANDLER_WIDTH); - var handlerHeight = (0, import_util101.get)(handlerStyle, "height", 24); - this.minHandler = this.addComponent(group3, { - component: Handler, - id: this.getElementId("minHandler"), - name: "handler-min", - x: 0, - y: (height - handlerHeight) / 2, - width: handlerWidth, - height: handlerHeight, - cursor: "ew-resize", - style: handlerStyle - }); - this.maxHandler = this.addComponent(group3, { - component: Handler, - id: this.getElementId("maxHandler"), - name: "handler-max", - x: 0, - y: (height - handlerHeight) / 2, - width: handlerWidth, - height: handlerHeight, - cursor: "ew-resize", - style: handlerStyle - }); - }; - Slider3.prototype.applyOffset = function() { - this.moveElementTo(this.get("group"), { - x: this.get("x"), - y: this.get("y") - }); - }; - Slider3.prototype.initEvent = function() { - this.bindEvents(); - }; - Slider3.prototype.updateUI = function(foregroundShape, minTextShape, maxTextShape) { - var _a6 = this.cfg, start = _a6.start, end2 = _a6.end, width2 = _a6.width, minText = _a6.minText, maxText = _a6.maxText, handlerStyle = _a6.handlerStyle, height = _a6.height; - var min13 = start * width2; - var max15 = end2 * width2; - if (this.trend) { - this.trend.update({ - width: width2, - height - }); - if (!this.get("updateAutoRender")) { - this.trend.render(); - } - } - foregroundShape.attr("x", min13); - foregroundShape.attr("width", max15 - min13); - var handlerWidth = (0, import_util101.get)(handlerStyle, "width", DEFAULT_HANDLER_WIDTH); - minTextShape.attr("text", minText); - maxTextShape.attr("text", maxText); - var _b = this._dodgeText([min13, max15], minTextShape, maxTextShape), minAttrs = _b[0], maxAttrs = _b[1]; - if (this.minHandler) { - this.minHandler.update({ - x: min13 - handlerWidth / 2 - }); - if (!this.get("updateAutoRender")) { - this.minHandler.render(); - } - } - (0, import_util101.each)(minAttrs, function(v3, k4) { - return minTextShape.attr(k4, v3); - }); - if (this.maxHandler) { - this.maxHandler.update({ - x: max15 - handlerWidth / 2 - }); - if (!this.get("updateAutoRender")) { - this.maxHandler.render(); - } - } - (0, import_util101.each)(maxAttrs, function(v3, k4) { - return maxTextShape.attr(k4, v3); - }); - }; - Slider3.prototype.bindEvents = function() { - var group3 = this.get("group"); - group3.on("handler-min:mousedown", this.onMouseDown("minHandler")); - group3.on("handler-min:touchstart", this.onMouseDown("minHandler")); - group3.on("handler-max:mousedown", this.onMouseDown("maxHandler")); - group3.on("handler-max:touchstart", this.onMouseDown("maxHandler")); - var foreground = group3.findById(this.getElementId("foreground")); - foreground.on("mousedown", this.onMouseDown("foreground")); - foreground.on("touchstart", this.onMouseDown("foreground")); - }; - Slider3.prototype.adjustOffsetRange = function(offsetRange) { - var _a6 = this.cfg, start = _a6.start, end2 = _a6.end; - switch (this.currentTarget) { - case "minHandler": { - var min13 = 0 - start; - var max15 = 1 - start; - return Math.min(max15, Math.max(min13, offsetRange)); - } - case "maxHandler": { - var min13 = 0 - end2; - var max15 = 1 - end2; - return Math.min(max15, Math.max(min13, offsetRange)); - } - case "foreground": { - var min13 = 0 - start; - var max15 = 1 - end2; - return Math.min(max15, Math.max(min13, offsetRange)); - } - } - }; - Slider3.prototype.updateStartEnd = function(offsetRange) { - var _a6 = this.cfg, start = _a6.start, end2 = _a6.end; - switch (this.currentTarget) { - case "minHandler": - start += offsetRange; - break; - case "maxHandler": - end2 += offsetRange; - break; - case "foreground": - start += offsetRange; - end2 += offsetRange; - break; - } - this.set("start", start); - this.set("end", end2); - }; - Slider3.prototype._dodgeText = function(range, minTextShape, maxTextShape) { - var _a6, _b; - var _c = this.cfg, handlerStyle = _c.handlerStyle, width2 = _c.width; - var PADDING2 = 2; - var handlerWidth = (0, import_util101.get)(handlerStyle, "width", DEFAULT_HANDLER_WIDTH); - var min13 = range[0], max15 = range[1]; - var sorted = false; - if (min13 > max15) { - _a6 = [max15, min13], min13 = _a6[0], max15 = _a6[1]; - _b = [maxTextShape, minTextShape], minTextShape = _b[0], maxTextShape = _b[1]; - sorted = true; - } - var minBBox = minTextShape.getBBox(); - var maxBBox = maxTextShape.getBBox(); - var minAttrs = minBBox.width > min13 - PADDING2 ? { x: min13 + handlerWidth / 2 + PADDING2, textAlign: "left" } : { x: min13 - handlerWidth / 2 - PADDING2, textAlign: "right" }; - var maxAttrs = maxBBox.width > width2 - max15 - PADDING2 ? { x: max15 - handlerWidth / 2 - PADDING2, textAlign: "right" } : { x: max15 + handlerWidth / 2 + PADDING2, textAlign: "left" }; - return !sorted ? [minAttrs, maxAttrs] : [maxAttrs, minAttrs]; - }; - Slider3.prototype.draw = function() { - var container2 = this.get("container"); - var canvas = container2 && container2.get("canvas"); - if (canvas) { - canvas.draw(); - } - }; - Slider3.prototype.getContainerDOM = function() { - var container2 = this.get("container"); - var canvas = container2 && container2.get("canvas"); - return canvas && canvas.get("container"); - }; - return Slider3; -}(group_component_default); - -// node_modules/@antv/component/esm/scrollbar/scrollbar.js -var import_util102 = __toModule(require_lib()); -var DEFAULT_STYLE = { - trackColor: "rgba(0,0,0,0)", - thumbColor: "rgba(0,0,0,0.15)", - size: 8, - lineCap: "round" -}; -var DEFAULT_THEME = { - default: DEFAULT_STYLE, - hover: { - thumbColor: "rgba(0,0,0,0.2)" - } -}; -var Scrollbar = function(_super) { - __extends(Scrollbar3, _super); - function Scrollbar3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.clearEvents = import_util102.noop; - _this.onStartEvent = function(isMobile) { - return function(e4) { - _this.isMobile = isMobile; - e4.originalEvent.preventDefault(); - var clientX = isMobile ? (0, import_util102.get)(e4.originalEvent, "touches.0.clientX") : e4.clientX; - var clientY = isMobile ? (0, import_util102.get)(e4.originalEvent, "touches.0.clientY") : e4.clientY; - _this.startPos = _this.cfg.isHorizontal ? clientX : clientY; - _this.bindLaterEvent(); - }; - }; - _this.bindLaterEvent = function() { - var containerDOM = _this.getContainerDOM(); - var events = []; - if (_this.isMobile) { - events = [ - addEventListener(containerDOM, "touchmove", _this.onMouseMove), - addEventListener(containerDOM, "touchend", _this.onMouseUp), - addEventListener(containerDOM, "touchcancel", _this.onMouseUp) - ]; - } else { - events = [ - addEventListener(containerDOM, "mousemove", _this.onMouseMove), - addEventListener(containerDOM, "mouseup", _this.onMouseUp), - addEventListener(containerDOM, "mouseleave", _this.onMouseUp) - ]; - } - _this.clearEvents = function() { - events.forEach(function(e4) { - e4.remove(); - }); - }; - }; - _this.onMouseMove = function(e4) { - var _a6 = _this.cfg, isHorizontal2 = _a6.isHorizontal, thumbOffset = _a6.thumbOffset; - e4.preventDefault(); - var clientX = _this.isMobile ? (0, import_util102.get)(e4, "touches.0.clientX") : e4.clientX; - var clientY = _this.isMobile ? (0, import_util102.get)(e4, "touches.0.clientY") : e4.clientY; - var endPos = isHorizontal2 ? clientX : clientY; - var diff2 = endPos - _this.startPos; - _this.startPos = endPos; - _this.updateThumbOffset(thumbOffset + diff2); - }; - _this.onMouseUp = function(e4) { - e4.preventDefault(); - _this.clearEvents(); - }; - _this.onTrackClick = function(e4) { - var _a6 = _this.cfg, isHorizontal2 = _a6.isHorizontal, x6 = _a6.x, y5 = _a6.y, thumbLen = _a6.thumbLen; - var containerDOM = _this.getContainerDOM(); - var rect3 = containerDOM.getBoundingClientRect(); - var clientX = e4.clientX, clientY = e4.clientY; - var offset = isHorizontal2 ? clientX - rect3.left - x6 - thumbLen / 2 : clientY - rect3.top - y5 - thumbLen / 2; - var newOffset = _this.validateRange(offset); - _this.updateThumbOffset(newOffset); - }; - _this.onThumbMouseOver = function() { - var thumbColor = _this.cfg.theme.hover.thumbColor; - _this.getElementByLocalId("thumb").attr("stroke", thumbColor); - _this.draw(); - }; - _this.onThumbMouseOut = function() { - var thumbColor = _this.cfg.theme.default.thumbColor; - _this.getElementByLocalId("thumb").attr("stroke", thumbColor); - _this.draw(); - }; - return _this; - } - Scrollbar3.prototype.setRange = function(min13, max15) { - this.set("minLimit", min13); - this.set("maxLimit", max15); - var curValue = this.getValue(); - var newValue = (0, import_util102.clamp)(curValue, min13, max15); - if (curValue !== newValue && !this.get("isInit")) { - this.setValue(newValue); - } - }; - Scrollbar3.prototype.getRange = function() { - var min13 = this.get("minLimit") || 0; - var max15 = this.get("maxLimit") || 1; - return { min: min13, max: max15 }; - }; - Scrollbar3.prototype.setValue = function(value2) { - var range = this.getRange(); - var originalValue = this.getValue(); - this.update({ - thumbOffset: (this.get("trackLen") - this.get("thumbLen")) * (0, import_util102.clamp)(value2, range.min, range.max) - }); - this.delegateEmit("valuechange", { - originalValue, - value: this.getValue() - }); - }; - Scrollbar3.prototype.getValue = function() { - return (0, import_util102.clamp)(this.get("thumbOffset") / (this.get("trackLen") - this.get("thumbLen")), 0, 1); - }; - Scrollbar3.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - return __assign(__assign({}, cfg), { name: "scrollbar", isHorizontal: true, minThumbLen: 20, thumbOffset: 0, theme: DEFAULT_THEME }); - }; - Scrollbar3.prototype.renderInner = function(group3) { - this.renderTrackShape(group3); - this.renderThumbShape(group3); - }; - Scrollbar3.prototype.applyOffset = function() { - this.moveElementTo(this.get("group"), { - x: this.get("x"), - y: this.get("y") - }); - }; - Scrollbar3.prototype.initEvent = function() { - this.bindEvents(); - }; - Scrollbar3.prototype.renderTrackShape = function(group3) { - var _a6 = this.cfg, trackLen = _a6.trackLen, _b = _a6.theme, theme4 = _b === void 0 ? { default: {} } : _b; - var _c = (0, import_util102.deepMix)({}, DEFAULT_THEME, theme4).default, lineCap = _c.lineCap, trackColor = _c.trackColor, themeSize = _c.size; - var size14 = (0, import_util102.get)(this.cfg, "size", themeSize); - var attrs = this.get("isHorizontal") ? { - x1: 0 + size14 / 2, - y1: size14 / 2, - x2: trackLen - size14 / 2, - y2: size14 / 2, - lineWidth: size14, - stroke: trackColor, - lineCap - } : { - x1: size14 / 2, - y1: 0 + size14 / 2, - x2: size14 / 2, - y2: trackLen - size14 / 2, - lineWidth: size14, - stroke: trackColor, - lineCap - }; - return this.addShape(group3, { - id: this.getElementId("track"), - name: "track", - type: "line", - attrs - }); - }; - Scrollbar3.prototype.renderThumbShape = function(group3) { - var _a6 = this.cfg, thumbOffset = _a6.thumbOffset, thumbLen = _a6.thumbLen, theme4 = _a6.theme; - var _b = (0, import_util102.deepMix)({}, DEFAULT_THEME, theme4).default, themeSize = _b.size, lineCap = _b.lineCap, thumbColor = _b.thumbColor; - var size14 = (0, import_util102.get)(this.cfg, "size", themeSize); - var attrs = this.get("isHorizontal") ? { - x1: thumbOffset + size14 / 2, - y1: size14 / 2, - x2: thumbOffset + thumbLen - size14 / 2, - y2: size14 / 2, - lineWidth: size14, - stroke: thumbColor, - lineCap, - cursor: "default" - } : { - x1: size14 / 2, - y1: thumbOffset + size14 / 2, - x2: size14 / 2, - y2: thumbOffset + thumbLen - size14 / 2, - lineWidth: size14, - stroke: thumbColor, - lineCap, - cursor: "default" - }; - return this.addShape(group3, { - id: this.getElementId("thumb"), - name: "thumb", - type: "line", - attrs - }); - }; - Scrollbar3.prototype.bindEvents = function() { - var group3 = this.get("group"); - group3.on("mousedown", this.onStartEvent(false)); - group3.on("mouseup", this.onMouseUp); - group3.on("touchstart", this.onStartEvent(true)); - group3.on("touchend", this.onMouseUp); - var trackShape = group3.findById(this.getElementId("track")); - trackShape.on("click", this.onTrackClick); - var thumbShape = group3.findById(this.getElementId("thumb")); - thumbShape.on("mouseover", this.onThumbMouseOver); - thumbShape.on("mouseout", this.onThumbMouseOut); - }; - Scrollbar3.prototype.getContainerDOM = function() { - var container2 = this.get("container"); - var canvas = container2 && container2.get("canvas"); - return canvas && canvas.get("container"); - }; - Scrollbar3.prototype.validateRange = function(offset) { - var _a6 = this.cfg, thumbLen = _a6.thumbLen, trackLen = _a6.trackLen; - var newOffset = offset; - if (offset + thumbLen > trackLen) { - newOffset = trackLen - thumbLen; - } else if (offset + thumbLen < thumbLen) { - newOffset = 0; - } - return newOffset; - }; - Scrollbar3.prototype.draw = function() { - var container2 = this.get("container"); - var canvas = container2 && container2.get("canvas"); - if (canvas) { - canvas.draw(); - } - }; - Scrollbar3.prototype.updateThumbOffset = function(offset) { - var _a6 = this.cfg, thumbOffset = _a6.thumbOffset, isHorizontal2 = _a6.isHorizontal, thumbLen = _a6.thumbLen, size14 = _a6.size; - var newOffset = this.validateRange(offset); - if (newOffset === thumbOffset) { - return; - } - var thumbShape = this.getElementByLocalId("thumb"); - if (isHorizontal2) { - thumbShape.attr({ - x1: newOffset + size14 / 2, - x2: newOffset + thumbLen - size14 / 2 - }); - } else { - thumbShape.attr({ - y1: newOffset + size14 / 2, - y2: newOffset + thumbLen - size14 / 2 - }); - } - this.emitOffsetChange(newOffset); - }; - Scrollbar3.prototype.emitOffsetChange = function(offset) { - var _a6 = this.cfg, originalValue = _a6.thumbOffset, trackLen = _a6.trackLen, thumbLen = _a6.thumbLen; - this.cfg.thumbOffset = offset; - this.emit("scrollchange", { - thumbOffset: offset, - ratio: (0, import_util102.clamp)(offset / (trackLen - thumbLen), 0, 1) - }); - this.delegateEmit("valuechange", { - originalValue, - value: offset - }); - }; - return Scrollbar3; -}(group_component_default); - -// node_modules/@antv/g2/esm/dependents.js -var LineAxis = axis_exports.Line; -var CircleAxis = axis_exports.Circle; -var LineGrid = grid_exports.Line; -var CircleGrid = grid_exports.Circle; -var CategoryLegend = legend_exports.Category; -var ContinuousLegend = legend_exports.Continuous; -var HtmlTooltip = tooltip_exports.Html; - -// node_modules/@antv/g2/esm/util/graphics.js -var import_util103 = __toModule(require_lib()); -function getPointsBox(points) { - if ((0, import_util103.isEmpty)(points)) { - return null; - } - var minX = points[0].x; - var maxX = points[0].x; - var minY = points[0].y; - var maxY2 = points[0].y; - (0, import_util103.each)(points, function(point2) { - minX = minX > point2.x ? point2.x : minX; - maxX = maxX < point2.x ? point2.x : maxX; - minY = minY > point2.y ? point2.y : minY; - maxY2 = maxY2 < point2.y ? point2.y : maxY2; - }); - return { - minX, - maxX, - minY, - maxY: maxY2, - centerX: (minX + maxX) / 2, - centerY: (minY + maxY2) / 2 - }; -} -function uniqueValues(array) { - return Array.from(new Set(array)).length === 1; -} -function mid(array) { - return ((0, import_util103.min)(array) + (0, import_util103.max)(array)) / 2; -} -function polarToCartesian(centerX, centerY, radius, angleInRadian) { - return { - x: centerX + radius * Math.cos(angleInRadian), - y: centerY + radius * Math.sin(angleInRadian) - }; -} -function getSectorPath(centerX, centerY, radius, startAngleInRadian, endAngleInRadian, innerRadius) { - if (innerRadius === void 0) { - innerRadius = 0; - } - var start = polarToCartesian(centerX, centerY, radius, startAngleInRadian); - var end2 = polarToCartesian(centerX, centerY, radius, endAngleInRadian); - var innerStart = polarToCartesian(centerX, centerY, innerRadius, startAngleInRadian); - var innerEnd = polarToCartesian(centerX, centerY, innerRadius, endAngleInRadian); - if (endAngleInRadian - startAngleInRadian === Math.PI * 2) { - var middlePoint = polarToCartesian(centerX, centerY, radius, startAngleInRadian + Math.PI); - var innerMiddlePoint = polarToCartesian(centerX, centerY, innerRadius, startAngleInRadian + Math.PI); - var circlePathCommands = [ - ["M", start.x, start.y], - ["A", radius, radius, 0, 1, 1, middlePoint.x, middlePoint.y], - ["A", radius, radius, 0, 1, 1, end2.x, end2.y], - ["M", innerStart.x, innerStart.y] - ]; - if (innerRadius) { - circlePathCommands.push(["A", innerRadius, innerRadius, 0, 1, 0, innerMiddlePoint.x, innerMiddlePoint.y]); - circlePathCommands.push(["A", innerRadius, innerRadius, 0, 1, 0, innerEnd.x, innerEnd.y]); - } - circlePathCommands.push(["M", start.x, start.y]); - circlePathCommands.push(["Z"]); - return circlePathCommands; - } - var arcSweep = endAngleInRadian - startAngleInRadian <= Math.PI ? 0 : 1; - var sectorPathCommands = [ - ["M", start.x, start.y], - ["A", radius, radius, 0, arcSweep, 1, end2.x, end2.y], - ["L", innerEnd.x, innerEnd.y] - ]; - if (innerRadius) { - sectorPathCommands.push(["A", innerRadius, innerRadius, 0, arcSweep, 0, innerStart.x, innerStart.y]); - } - sectorPathCommands.push(["L", start.x, start.y]); - sectorPathCommands.push(["Z"]); - return sectorPathCommands; -} -function getArcPath(centerX, centerY, radius, startAngleInRadian, endAngleInRadian) { - var start = polarToCartesian(centerX, centerY, radius, startAngleInRadian); - var end2 = polarToCartesian(centerX, centerY, radius, endAngleInRadian); - if ((0, import_util103.isNumberEqual)(endAngleInRadian - startAngleInRadian, Math.PI * 2)) { - var middlePoint = polarToCartesian(centerX, centerY, radius, startAngleInRadian + Math.PI); - return [ - ["M", start.x, start.y], - ["A", radius, radius, 0, 1, 1, middlePoint.x, middlePoint.y], - ["A", radius, radius, 0, 1, 1, start.x, start.y], - ["A", radius, radius, 0, 1, 0, middlePoint.x, middlePoint.y], - ["A", radius, radius, 0, 1, 0, start.x, start.y], - ["Z"] - ]; - } - var arcSweep = endAngleInRadian - startAngleInRadian <= Math.PI ? 0 : 1; - return [ - ["M", start.x, start.y], - ["A", radius, radius, 0, arcSweep, 1, end2.x, end2.y] - ]; -} -function getAngle3(shapeModel, coordinate11) { - var points = shapeModel.points; - var box2 = getPointsBox(points); - var endAngle; - var startAngle; - var coordStartAngle = coordinate11.startAngle, coordEndAngle = coordinate11.endAngle; - var diffAngle = coordEndAngle - coordStartAngle; - if (coordinate11.isTransposed) { - endAngle = box2.maxY * diffAngle; - startAngle = box2.minY * diffAngle; - } else { - endAngle = box2.maxX * diffAngle; - startAngle = box2.minX * diffAngle; - } - endAngle += coordStartAngle; - startAngle += coordStartAngle; - return { - startAngle, - endAngle - }; -} -function getPolygonCentroid(xs, ys) { - if ((0, import_util103.isNumber)(xs) && (0, import_util103.isNumber)(ys)) { - return [xs, ys]; - } - xs = xs; - ys = ys; - if (uniqueValues(xs) || uniqueValues(ys)) - return [mid(xs), mid(ys)]; - var i4 = -1; - var x6 = 0; - var y5 = 0; - var former; - var current = xs.length - 1; - var diff2; - var k4 = 0; - while (++i4 < xs.length) { - former = current; - current = i4; - k4 += diff2 = xs[former] * ys[current] - xs[current] * ys[former]; - x6 += (xs[former] + xs[current]) * diff2; - y5 += (ys[former] + ys[current]) * diff2; - } - k4 *= 3; - return [x6 / k4, y5 / k4]; -} -function getReplaceAttrs(sourceShape, targetShape) { - var originAttrs = sourceShape.attr(); - var newAttrs = targetShape.attr(); - (0, import_util103.each)(originAttrs, function(v3, k4) { - if (newAttrs[k4] === void 0) { - newAttrs[k4] = void 0; - } - }); - return newAttrs; -} - -// node_modules/@antv/g2/esm/util/helper.js -var import_util104 = __toModule(require_lib()); -function isBetween2(value2, start, end2) { - var min13 = Math.min(start, end2); - var max15 = Math.max(start, end2); - return value2 >= min13 && value2 <= max15; -} -function padEnd(source, targetLength, padValue) { - if ((0, import_util104.isString)(source)) { - return source.padEnd(targetLength, padValue); - } else if ((0, import_util104.isArray)(source)) { - var sourceLength = source.length; - if (sourceLength < targetLength) { - var diff2 = targetLength - sourceLength; - for (var i4 = 0; i4 < diff2; i4++) { - source.push(padValue); - } - } - } - return source; -} -function omit(obj, keys6) { - if (typeof obj === "object") { - keys6.forEach(function(key) { - delete obj[key]; - }); - } - return obj; -} -function uniq(sourceArray, targetArray, map23) { - if (targetArray === void 0) { - targetArray = []; - } - if (map23 === void 0) { - map23 = new Map(); - } - for (var _i = 0, sourceArray_1 = sourceArray; _i < sourceArray_1.length; _i++) { - var source = sourceArray_1[_i]; - if (!map23.has(source)) { - targetArray.push(source); - map23.set(source, true); - } - } - return targetArray; -} - -// node_modules/@antv/g2/esm/util/bbox.js -var import_util105 = __toModule(require_lib()); -var BBox = function() { - function BBox2(x6, y5, width2, height) { - if (x6 === void 0) { - x6 = 0; - } - if (y5 === void 0) { - y5 = 0; - } - if (width2 === void 0) { - width2 = 0; - } - if (height === void 0) { - height = 0; - } - this.x = x6; - this.y = y5; - this.height = height; - this.width = width2; - } - BBox2.fromRange = function(minX, minY, maxX, maxY2) { - return new BBox2(minX, minY, maxX - minX, maxY2 - minY); - }; - BBox2.fromObject = function(bbox) { - return new BBox2(bbox.minX, bbox.minY, bbox.width, bbox.height); - }; - Object.defineProperty(BBox2.prototype, "minX", { - get: function() { - return this.x; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(BBox2.prototype, "maxX", { - get: function() { - return this.x + this.width; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(BBox2.prototype, "minY", { - get: function() { - return this.y; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(BBox2.prototype, "maxY", { - get: function() { - return this.y + this.height; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(BBox2.prototype, "tl", { - get: function() { - return { x: this.x, y: this.y }; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(BBox2.prototype, "tr", { - get: function() { - return { x: this.maxX, y: this.y }; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(BBox2.prototype, "bl", { - get: function() { - return { x: this.x, y: this.maxY }; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(BBox2.prototype, "br", { - get: function() { - return { x: this.maxX, y: this.maxY }; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(BBox2.prototype, "top", { - get: function() { - return { - x: this.x + this.width / 2, - y: this.minY - }; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(BBox2.prototype, "right", { - get: function() { - return { - x: this.maxX, - y: this.y + this.height / 2 - }; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(BBox2.prototype, "bottom", { - get: function() { - return { - x: this.x + this.width / 2, - y: this.maxY - }; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(BBox2.prototype, "left", { - get: function() { - return { - x: this.minX, - y: this.y + this.height / 2 - }; - }, - enumerable: false, - configurable: true - }); - BBox2.prototype.isEqual = function(bbox) { - return this.x === bbox.x && this.y === bbox.y && this.width === bbox.width && this.height === bbox.height; - }; - BBox2.prototype.contains = function(child) { - return child.minX >= this.minX && child.maxX <= this.maxX && child.minY >= this.minY && child.maxY <= this.maxY; - }; - BBox2.prototype.clone = function() { - return new BBox2(this.x, this.y, this.width, this.height); - }; - BBox2.prototype.add = function() { - var subBBox = []; - for (var _i = 0; _i < arguments.length; _i++) { - subBBox[_i] = arguments[_i]; - } - var bbox = this.clone(); - (0, import_util105.each)(subBBox, function(b10) { - bbox.x = Math.min(b10.x, bbox.x); - bbox.y = Math.min(b10.y, bbox.y); - bbox.width = Math.max(b10.maxX, bbox.maxX) - bbox.x; - bbox.height = Math.max(b10.maxY, bbox.maxY) - bbox.y; - }); - return bbox; - }; - BBox2.prototype.merge = function() { - var subBBox = []; - for (var _i = 0; _i < arguments.length; _i++) { - subBBox[_i] = arguments[_i]; - } - var bbox = this.clone(); - (0, import_util105.each)(subBBox, function(b10) { - bbox.x = Math.max(b10.x, bbox.x); - bbox.y = Math.max(b10.y, bbox.y); - bbox.width = Math.min(b10.maxX, bbox.maxX) - bbox.x; - bbox.height = Math.min(b10.maxY, bbox.maxY) - bbox.y; - }); - return bbox; - }; - BBox2.prototype.cut = function(subBBox, direction3) { - var width2 = subBBox.width; - var height = subBBox.height; - switch (direction3) { - case DIRECTION.TOP: - case DIRECTION.TOP_LEFT: - case DIRECTION.TOP_RIGHT: - return BBox2.fromRange(this.minX, this.minY + height, this.maxX, this.maxY); - case DIRECTION.RIGHT: - case DIRECTION.RIGHT_TOP: - case DIRECTION.RIGHT_BOTTOM: - return BBox2.fromRange(this.minX, this.minY, this.maxX - width2, this.maxY); - case DIRECTION.BOTTOM: - case DIRECTION.BOTTOM_LEFT: - case DIRECTION.BOTTOM_RIGHT: - return BBox2.fromRange(this.minX, this.minY, this.maxX, this.maxY - height); - case DIRECTION.LEFT: - case DIRECTION.LEFT_TOP: - case DIRECTION.LEFT_BOTTOM: - return BBox2.fromRange(this.minX + width2, this.minY, this.maxX, this.maxY); - default: - return this; - } - }; - BBox2.prototype.shrink = function(gap) { - var top = gap[0], right2 = gap[1], bottom = gap[2], left2 = gap[3]; - return new BBox2(this.x + left2, this.y + top, this.width - left2 - right2, this.height - top - bottom); - }; - BBox2.prototype.expand = function(gap) { - var top = gap[0], right2 = gap[1], bottom = gap[2], left2 = gap[3]; - return new BBox2(this.x - left2, this.y - top, this.width + left2 + right2, this.height + top + bottom); - }; - BBox2.prototype.exceed = function(bbox) { - return [ - Math.max(-this.minY + bbox.minY, 0), - Math.max(this.maxX - bbox.maxX, 0), - Math.max(this.maxY - bbox.maxY, 0), - Math.max(-this.minX + bbox.minX, 0) - ]; - }; - BBox2.prototype.collide = function(bbox) { - return this.minX < bbox.maxX && this.maxX > bbox.minX && this.minY < bbox.maxY && this.maxY > bbox.minY; - }; - BBox2.prototype.size = function() { - return this.width * this.height; - }; - BBox2.prototype.isPointIn = function(p4) { - return p4.x >= this.minX && p4.x <= this.maxX && p4.y >= this.minY && p4.y <= this.maxY; - }; - return BBox2; -}(); -function toPoints(bbox) { - return [ - [bbox.minX, bbox.minY], - [bbox.maxX, bbox.minY], - [bbox.maxX, bbox.maxY], - [bbox.minX, bbox.maxY] - ]; -} - -// node_modules/@antv/g2/esm/util/coordinate.js -function getXDimensionLength(coordinate11) { - if (coordinate11.isPolar && !coordinate11.isTransposed) { - return (coordinate11.endAngle - coordinate11.startAngle) * coordinate11.getRadius(); - } - var start = coordinate11.convert({ x: 0, y: 0 }); - var end2 = coordinate11.convert({ x: 1, y: 0 }); - return Math.sqrt(Math.pow(end2.x - start.x, 2) + Math.pow(end2.y - start.y, 2)); -} -function isFullCircle(coordinate11) { - if (coordinate11.isPolar) { - var startAngle = coordinate11.startAngle, endAngle = coordinate11.endAngle; - return endAngle - startAngle === Math.PI * 2; - } - return false; -} -function getDistanceToCenter(coordinate11, point2) { - var center2 = coordinate11.getCenter(); - return Math.sqrt(Math.pow(point2.x - center2.x, 2) + Math.pow(point2.y - center2.y, 2)); -} -function isPointInCoordinate(coordinate11, point2) { - var result = false; - if (coordinate11) { - if (coordinate11.type === "theta") { - var start = coordinate11.start, end2 = coordinate11.end; - result = isBetween2(point2.x, start.x, end2.x) && isBetween2(point2.y, start.y, end2.y); - } else { - var invertPoint = coordinate11.invert(point2); - result = isBetween2(invertPoint.x, 0, 1) && isBetween2(invertPoint.y, 0, 1); - } - } - return result; -} -function getAngleByPoint(coordinate11, point2) { - var center2 = coordinate11.getCenter(); - return Math.atan2(point2.y - center2.y, point2.x - center2.x); -} -function getCoordinateClipCfg(coordinate11, margin) { - if (margin === void 0) { - margin = 0; - } - var start = coordinate11.start, end2 = coordinate11.end; - var width2 = coordinate11.getWidth(); - var height = coordinate11.getHeight(); - if (coordinate11.isPolar) { - var startAngle_1 = coordinate11.startAngle, endAngle_1 = coordinate11.endAngle; - var center_1 = coordinate11.getCenter(); - var radius_1 = coordinate11.getRadius(); - return { - type: "path", - startState: { - path: getSectorPath(center_1.x, center_1.y, radius_1 + margin, startAngle_1, startAngle_1) - }, - endState: function(ratio) { - var diff2 = (endAngle_1 - startAngle_1) * ratio + startAngle_1; - var path = getSectorPath(center_1.x, center_1.y, radius_1 + margin, startAngle_1, diff2); - return { - path - }; - }, - attrs: { - path: getSectorPath(center_1.x, center_1.y, radius_1 + margin, startAngle_1, endAngle_1) - } - }; - } - var endState; - if (coordinate11.isTransposed) { - endState = { - height: height + margin * 2 - }; - } else { - endState = { - width: width2 + margin * 2 - }; - } - return { - type: "rect", - startState: { - x: start.x - margin, - y: end2.y - margin, - width: coordinate11.isTransposed ? width2 + margin * 2 : 0, - height: coordinate11.isTransposed ? 0 : height + margin * 2 - }, - endState, - attrs: { - x: start.x - margin, - y: end2.y - margin, - width: width2 + margin * 2, - height: height + margin * 2 - } - }; -} -function getCoordinateBBox(coordinate11, margin) { - if (margin === void 0) { - margin = 0; - } - var start = coordinate11.start, end2 = coordinate11.end; - var width2 = coordinate11.getWidth(); - var height = coordinate11.getHeight(); - var minX = Math.min(start.x, end2.x); - var minY = Math.min(start.y, end2.y); - return BBox.fromRange(minX - margin, minY - margin, minX + width2 + margin, minY + height + margin); -} - -// node_modules/@antv/g2/esm/util/scale.js -var dateRegex = /^(?:(?!0000)[0-9]{4}([-/.]+)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]+)0?2\2(?:29))(\s+([01]|([01][0-9]|2[0-3])):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9]))?$/; -function getDefaultType(value2) { - var type2 = "linear"; - if (dateRegex.test(value2)) { - type2 = "timeCat"; - } else if ((0, import_util106.isString)(value2)) { - type2 = "cat"; - } - return type2; -} -function createScaleByField(field6, data3, scaleDef) { - var validData = data3 || []; - if ((0, import_util106.isNumber)(field6) || (0, import_util106.isNil)((0, import_util106.firstValue)(validData, field6)) && (0, import_util106.isEmpty)(scaleDef)) { - var Identity2 = getClass("identity"); - return new Identity2({ - field: field6.toString(), - values: [field6] - }); - } - var values4 = (0, import_util106.valuesOfKey)(validData, field6); - var type2 = (0, import_util106.get)(scaleDef, "type", getDefaultType(values4[0])); - var ScaleCtor = getClass(type2); - return new ScaleCtor(__assign({ field: field6, values: values4 }, scaleDef)); -} -function syncScale(scale12, newScale) { - if (scale12.type !== "identity" && newScale.type !== "identity") { - var obj = {}; - for (var k4 in newScale) { - if (Object.prototype.hasOwnProperty.call(newScale, k4)) { - obj[k4] = newScale[k4]; - } - } - scale12.change(obj); - } -} -function getName(scale12) { - return scale12.alias || scale12.field; -} -function getDefaultCategoryScaleRange(scale12, coordinate11, theme4) { - var values4 = scale12.values; - var count2 = values4.length; - var range; - if (count2 === 1) { - range = [0.5, 1]; - } else { - var widthRatio = 1; - var offset = 0; - if (isFullCircle(coordinate11)) { - if (!coordinate11.isTransposed) { - range = [0, 1 - 1 / count2]; - } else { - widthRatio = (0, import_util106.get)(theme4, "widthRatio.multiplePie", 1 / 1.3); - offset = 1 / count2 * widthRatio; - range = [offset / 2, 1 - offset / 2]; - } - } else { - offset = 1 / count2 / 2; - range = [offset, 1 - offset]; - } - } - return range; -} -function getMaxScale(scale12) { - var values4 = scale12.values.filter(function(item) { - return !(0, import_util106.isNil)(item) && !isNaN(item); - }); - return Math.max.apply(Math, __spreadArray(__spreadArray([], values4, false), [(0, import_util106.isNil)(scale12.max) ? -Infinity : scale12.max], false)); -} - -// node_modules/@antv/g2/esm/util/axis.js -function getLineAxisRelativeRegion(direction3) { - var start; - var end2; - switch (direction3) { - case DIRECTION.TOP: - start = { x: 0, y: 1 }; - end2 = { x: 1, y: 1 }; - break; - case DIRECTION.RIGHT: - start = { x: 1, y: 0 }; - end2 = { x: 1, y: 1 }; - break; - case DIRECTION.BOTTOM: - start = { x: 0, y: 0 }; - end2 = { x: 1, y: 0 }; - break; - case DIRECTION.LEFT: - start = { x: 0, y: 0 }; - end2 = { x: 0, y: 1 }; - break; - default: - start = end2 = { x: 0, y: 0 }; - } - return { start, end: end2 }; -} -function getCircleAxisRelativeRegion(coordinate11) { - var start; - var end2; - if (coordinate11.isTransposed) { - start = { - x: 0, - y: 0 - }; - end2 = { - x: 1, - y: 0 - }; - } else { - start = { - x: 0, - y: 0 - }; - end2 = { - x: 0, - y: 1 - }; - } - return { start, end: end2 }; -} -function getAxisRegion(coordinate11, direction3) { - var region = { start: { x: 0, y: 0 }, end: { x: 0, y: 0 } }; - if (coordinate11.isRect) { - region = getLineAxisRelativeRegion(direction3); - } else if (coordinate11.isPolar) { - region = getCircleAxisRelativeRegion(coordinate11); - } - var start = region.start, end2 = region.end; - return { - start: coordinate11.convert(start), - end: coordinate11.convert(end2) - }; -} -function isVertical(region) { - var start = region.start, end2 = region.end; - return start.x === end2.x; -} -function getAxisFactorByRegion(region, center2) { - var start = region.start, end2 = region.end; - var isAxisVertical = isVertical(region); - if (isAxisVertical) { - if ((start.y - end2.y) * (center2.x - start.x) > 0) { - return 1; - } else { - return -1; - } - } else { - if ((end2.x - start.x) * (start.y - center2.y) > 0) { - return -1; - } else { - return 1; - } - } -} -function getAxisThemeCfg(theme4, direction3) { - var axisTheme = (0, import_util107.get)(theme4, ["components", "axis"], {}); - return (0, import_util107.deepMix)({}, (0, import_util107.get)(axisTheme, ["common"], {}), (0, import_util107.deepMix)({}, (0, import_util107.get)(axisTheme, [direction3], {}))); -} -function getAxisTitleOptions(theme4, direction3, axisOptions) { - var axisTheme = (0, import_util107.get)(theme4, ["components", "axis"], {}); - return (0, import_util107.deepMix)({}, (0, import_util107.get)(axisTheme, ["common", "title"], {}), (0, import_util107.deepMix)({}, (0, import_util107.get)(axisTheme, [direction3, "title"], {})), axisOptions); -} -function getCircleAxisCenterRadius(coordinate11) { - var x6 = coordinate11.x, y5 = coordinate11.y, center2 = coordinate11.circleCenter; - var isReflectY = y5.start > y5.end; - var start = coordinate11.isTransposed ? coordinate11.convert({ - x: isReflectY ? 0 : 1, - y: 0 - }) : coordinate11.convert({ - x: 0, - y: isReflectY ? 0 : 1 - }); - var startVector = [start.x - center2.x, start.y - center2.y]; - var normalVector = [1, 0]; - var startAngle = start.y > center2.y ? vec2_exports.angle(startVector, normalVector) : vec2_exports.angle(startVector, normalVector) * -1; - var endAngle = startAngle + (x6.end - x6.start); - var radius = Math.sqrt(Math.pow(start.x - center2.x, 2) + Math.pow(start.y - center2.y, 2)); - return { - center: center2, - radius, - startAngle, - endAngle - }; -} -function getAxisOption(axes, field6) { - if ((0, import_util107.isBoolean)(axes)) { - return axes === false ? false : {}; - } - return (0, import_util107.get)(axes, [field6]); -} -function getAxisDirection(axisOption, def) { - return (0, import_util107.get)(axisOption, "position", def); -} -function getAxisTitleText(scale12, axisOption) { - return (0, import_util107.get)(axisOption, ["title", "text"], getName(scale12)); -} - -// node_modules/@antv/g2/esm/facet/facet.js -var Facet = function() { - function Facet3(view, cfg) { - this.destroyed = false; - this.facets = []; - this.view = view; - this.cfg = (0, import_util108.deepMix)({}, this.getDefaultCfg(), cfg); - } - Facet3.prototype.init = function() { - if (!this.container) { - this.container = this.createContainer(); - } - var data3 = this.view.getData(); - this.facets = this.generateFacets(data3); - }; - Facet3.prototype.render = function() { - this.renderViews(); - }; - Facet3.prototype.update = function() { - }; - Facet3.prototype.clear = function() { - this.clearFacetViews(); - }; - Facet3.prototype.destroy = function() { - this.clear(); - if (this.container) { - this.container.remove(true); - this.container = void 0; - } - this.destroyed = true; - this.view = void 0; - this.facets = []; - }; - Facet3.prototype.facetToView = function(facet) { - var region = facet.region, data3 = facet.data, _a6 = facet.padding, padding3 = _a6 === void 0 ? this.cfg.padding : _a6; - var view = this.view.createView({ - region, - padding: padding3 - }); - view.data(data3 || []); - facet.view = view; - this.beforeEachView(view, facet); - var eachView = this.cfg.eachView; - if (eachView) { - eachView(view, facet); - } - this.afterEachView(view, facet); - return view; - }; - Facet3.prototype.createContainer = function() { - var foregroundGroup = this.view.getLayer(LAYER.FORE); - return foregroundGroup.addGroup(); - }; - Facet3.prototype.renderViews = function() { - this.createFacetViews(); - }; - Facet3.prototype.createFacetViews = function() { - var _this = this; - return this.facets.map(function(facet) { - return _this.facetToView(facet); - }); - }; - Facet3.prototype.clearFacetViews = function() { - var _this = this; - (0, import_util108.each)(this.facets, function(facet) { - if (facet.view) { - _this.view.removeView(facet.view); - facet.view = void 0; - } - }); - }; - Facet3.prototype.parseSpacing = function() { - var _a6 = this.view.viewBBox, width2 = _a6.width, height = _a6.height; - var spacing = this.cfg.spacing; - return spacing.map(function(s4, idx) { - if ((0, import_util108.isNumber)(s4)) - return s4 / (idx === 0 ? width2 : height); - else - return parseFloat(s4) / 100; - }); - }; - Facet3.prototype.getFieldValues = function(data3, field6) { - var rst = []; - var cache3 = {}; - (0, import_util108.each)(data3, function(d3) { - var value2 = d3[field6]; - if (!(0, import_util108.isNil)(value2) && !cache3[value2]) { - rst.push(value2); - cache3[value2] = true; - } - }); - return rst; - }; - Facet3.prototype.getRegion = function(rows, cols, xIndex, yIndex) { - var _a6 = this.parseSpacing(), xSpacing = _a6[0], ySpacing = _a6[1]; - var xRatio = (1 + xSpacing) / (cols === 0 ? 1 : cols) - xSpacing; - var yRatio = (1 + ySpacing) / (rows === 0 ? 1 : rows) - ySpacing; - var start = { - x: (xRatio + xSpacing) * xIndex, - y: (yRatio + ySpacing) * yIndex - }; - var end2 = { - x: start.x + xRatio, - y: start.y + yRatio - }; - return { start, end: end2 }; - }; - Facet3.prototype.getDefaultCfg = function() { - return { - eachView: void 0, - showTitle: true, - spacing: [0, 0], - padding: 10, - fields: [] - }; - }; - Facet3.prototype.getDefaultTitleCfg = function() { - var fontFamily = this.view.getTheme().fontFamily; - return { - style: { - fontSize: 14, - fill: "#666", - fontFamily - } - }; - }; - Facet3.prototype.processAxis = function(view, facet) { - var options = view.getOptions(); - var coordinateOption = options.coordinate; - var geometries = view.geometries; - var coordinateType = (0, import_util108.get)(coordinateOption, "type", "rect"); - if (coordinateType === "rect" && geometries.length) { - if ((0, import_util108.isNil)(options.axes)) { - options.axes = {}; - } - var axes = options.axes; - var _a6 = geometries[0].getXYFields(), x6 = _a6[0], y5 = _a6[1]; - var xOption = getAxisOption(axes, x6); - var yOption = getAxisOption(axes, y5); - if (xOption !== false) { - options.axes[x6] = this.getXAxisOption(x6, axes, xOption, facet); - } - if (yOption !== false) { - options.axes[y5] = this.getYAxisOption(y5, axes, yOption, facet); - } - } - }; - Facet3.prototype.getFacetDataFilter = function(conditions) { - return function(datum) { - return (0, import_util108.every)(conditions, function(condition) { - var field6 = condition.field, value2 = condition.value; - if (!(0, import_util108.isNil)(value2) && field6) { - return datum[field6] === value2; - } - return true; - }); - }; - }; - return Facet3; -}(); - -// node_modules/@antv/g2/esm/facet/index.js -var Facets = {}; -var getFacet = function(type2) { - return Facets[(0, import_util109.lowerCase)(type2)]; -}; -var registerFacet = function(type2, ctor) { - Facets[(0, import_util109.lowerCase)(type2)] = ctor; -}; - -// node_modules/@antv/g2/esm/interaction/index.js -var import_util117 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/interaction/grammar-interaction.js -var import_util116 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/interaction/action/base.js -var import_util110 = __toModule(require_lib()); -var Action = function() { - function Action2(context, cfg) { - this.context = context; - this.cfg = cfg; - context.addAction(this); - } - Action2.prototype.applyCfg = function(cfg) { - (0, import_util110.assign)(this, cfg); - }; - Action2.prototype.init = function() { - this.applyCfg(this.cfg); - }; - Action2.prototype.destroy = function() { - this.context.removeAction(this); - this.context = null; - }; - return Action2; -}(); -var base_default12 = Action; - -// node_modules/@antv/g2/esm/interaction/action/callback.js -var CallbackAction = function(_super) { - __extends(CallbackAction2, _super); - function CallbackAction2() { - return _super !== null && _super.apply(this, arguments) || this; - } - CallbackAction2.prototype.execute = function() { - if (this.callback) { - this.callback(this.context); - } - }; - CallbackAction2.prototype.destroy = function() { - _super.prototype.destroy.call(this); - this.callback = null; - }; - return CallbackAction2; -}(base_default12); -var callback_default = CallbackAction; - -// node_modules/@antv/g2/esm/interaction/action/register.js -var import_util111 = __toModule(require_lib()); -var ActionCache = {}; -function createAction(actionName, context) { - var actionOption = ActionCache[actionName]; - var action = null; - if (actionOption) { - var ActionClass = actionOption.ActionClass, cfg = actionOption.cfg; - action = new ActionClass(context, cfg); - action.name = actionName; - action.init(); - } - return action; -} -function getActionClass(actionName) { - var actionOption = ActionCache[actionName]; - return (0, import_util111.get)(actionOption, "ActionClass"); -} -function registerAction(actionName, ActionClass, cfg) { - ActionCache[actionName] = { - ActionClass, - cfg - }; -} -function createCallbackAction(callback, context) { - var action = new callback_default(context); - action.callback = callback; - action.name = "callback"; - return action; -} - -// node_modules/@antv/g2/esm/interaction/context.js -var import_util114 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/interaction/action/util.js -var import_util113 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/geometry/shape/util/path.js -var import_util112 = __toModule(require_lib()); -function _points2path(points, isInCircle) { - var path = []; - if (points.length) { - path.push(["M", points[0].x, points[0].y]); - for (var i4 = 1, length_1 = points.length; i4 < length_1; i4 += 1) { - var item = points[i4]; - path.push(["L", item.x, item.y]); - } - if (isInCircle) { - path.push(["Z"]); - } - } - return path; -} -function _convertArr(arr, coord2) { - var tmp = [arr[0]]; - for (var i4 = 1, len5 = arr.length; i4 < len5; i4 = i4 + 2) { - var point2 = coord2.convert({ - x: arr[i4], - y: arr[i4 + 1] - }); - tmp.push(point2.x, point2.y); - } - return tmp; -} -function _convertArcPath(path, coord2) { - var isTransposed = coord2.isTransposed; - var r4 = path[1]; - var x6 = path[6]; - var y5 = path[7]; - var point2 = coord2.convert({ x: x6, y: y5 }); - var direction3 = isTransposed ? 0 : 1; - return ["A", r4, r4, 0, 0, direction3, point2.x, point2.y]; -} -function _convertPolarPath(pre, cur, coord2) { - var isTransposed = coord2.isTransposed, startAngle = coord2.startAngle, endAngle = coord2.endAngle; - var prePoint = pre[0].toLowerCase() === "a" ? { - x: pre[6], - y: pre[7] - } : { - x: pre[1], - y: pre[2] - }; - var curPoint = { - x: cur[1], - y: cur[2] - }; - var rst = []; - var xDim = isTransposed ? "y" : "x"; - var angleRange = Math.abs(curPoint[xDim] - prePoint[xDim]) * (endAngle - startAngle); - var direction3 = curPoint[xDim] >= prePoint[xDim] ? 1 : 0; - var flag = angleRange > Math.PI ? 1 : 0; - var convertPoint = coord2.convert(curPoint); - var r4 = getDistanceToCenter(coord2, convertPoint); - if (r4 >= 0.5) { - if (angleRange === Math.PI * 2) { - var middlePoint = { - x: (curPoint.x + prePoint.x) / 2, - y: (curPoint.y + prePoint.y) / 2 - }; - var middleConvertPoint = coord2.convert(middlePoint); - rst.push(["A", r4, r4, 0, flag, direction3, middleConvertPoint.x, middleConvertPoint.y]); - rst.push(["A", r4, r4, 0, flag, direction3, convertPoint.x, convertPoint.y]); - } else { - rst.push(["A", r4, r4, 0, flag, direction3, convertPoint.x, convertPoint.y]); - } - } - return rst; -} -function _filterFullCirleLine(path) { - (0, import_util112.each)(path, function(subPath, index2) { - var cur = subPath; - if (cur[0].toLowerCase() === "a") { - var pre = path[index2 - 1]; - var next = path[index2 + 1]; - if (next && next[0].toLowerCase() === "a") { - if (pre && pre[0].toLowerCase() === "l") { - pre[0] = "M"; - } - } else if (pre && pre[0].toLowerCase() === "a") { - if (next && next[0].toLowerCase() === "l") { - next[0] = "M"; - } - } - } - }); -} -var smoothBezier2 = function(points, smooth, isLoop, constraint) { - var cps = []; - var hasConstraint = !!constraint; - var prevPoint; - var nextPoint; - var min13; - var max15; - var nextCp0; - var cp1; - var cp0; - if (hasConstraint) { - min13 = constraint[0], max15 = constraint[1]; - for (var i4 = 0, l4 = points.length; i4 < l4; i4++) { - var point2 = points[i4]; - min13 = vec2_exports.min([0, 0], min13, point2); - max15 = vec2_exports.max([0, 0], max15, point2); - } - } - for (var i4 = 0, len5 = points.length; i4 < len5; i4++) { - var point2 = points[i4]; - if (i4 === 0 && !isLoop) { - cp0 = point2; - } else if (i4 === len5 - 1 && !isLoop) { - cp1 = point2; - cps.push(cp0); - cps.push(cp1); - } else { - prevPoint = points[isLoop ? i4 ? i4 - 1 : len5 - 1 : i4 - 1]; - nextPoint = points[isLoop ? (i4 + 1) % len5 : i4 + 1]; - var v3 = [0, 0]; - v3 = vec2_exports.sub(v3, nextPoint, prevPoint); - v3 = vec2_exports.scale(v3, v3, smooth); - var d0 = vec2_exports.distance(point2, prevPoint); - var d1 = vec2_exports.distance(point2, nextPoint); - var sum = d0 + d1; - if (sum !== 0) { - d0 /= sum; - d1 /= sum; - } - var v1 = vec2_exports.scale([0, 0], v3, -d0); - var v22 = vec2_exports.scale([0, 0], v3, d1); - cp1 = vec2_exports.add([0, 0], point2, v1); - nextCp0 = vec2_exports.add([0, 0], point2, v22); - nextCp0 = vec2_exports.min([0, 0], nextCp0, vec2_exports.max([0, 0], nextPoint, point2)); - nextCp0 = vec2_exports.max([0, 0], nextCp0, vec2_exports.min([0, 0], nextPoint, point2)); - v1 = vec2_exports.sub([0, 0], nextCp0, point2); - v1 = vec2_exports.scale([0, 0], v1, -d0 / d1); - cp1 = vec2_exports.add([0, 0], point2, v1); - cp1 = vec2_exports.min([0, 0], cp1, vec2_exports.max([0, 0], prevPoint, point2)); - cp1 = vec2_exports.max([0, 0], cp1, vec2_exports.min([0, 0], prevPoint, point2)); - v22 = vec2_exports.sub([0, 0], point2, cp1); - v22 = vec2_exports.scale([0, 0], v22, d1 / d0); - nextCp0 = vec2_exports.add([0, 0], point2, v22); - if (hasConstraint) { - cp1 = vec2_exports.max([0, 0], cp1, min13); - cp1 = vec2_exports.min([0, 0], cp1, max15); - nextCp0 = vec2_exports.max([0, 0], nextCp0, min13); - nextCp0 = vec2_exports.min([0, 0], nextCp0, max15); - } - cps.push(cp0); - cps.push(cp1); - cp0 = nextCp0; - } - } - if (isLoop) { - cps.push(cps.shift()); - } - return cps; -}; -function catmullRom2bezier(crp, z3, constraint) { - var isLoop = !!z3; - var pointList = []; - for (var i4 = 0, l4 = crp.length; i4 < l4; i4 += 2) { - pointList.push([crp[i4], crp[i4 + 1]]); - } - var controlPointList = smoothBezier2(pointList, 0.4, isLoop, constraint); - var len5 = pointList.length; - var d1 = []; - var cp1; - var cp2; - var p4; - for (var i4 = 0; i4 < len5 - 1; i4++) { - cp1 = controlPointList[i4 * 2]; - cp2 = controlPointList[i4 * 2 + 1]; - p4 = pointList[i4 + 1]; - d1.push(["C", cp1[0], cp1[1], cp2[0], cp2[1], p4[0], p4[1]]); - } - if (isLoop) { - cp1 = controlPointList[len5]; - cp2 = controlPointList[len5 + 1]; - p4 = pointList[0]; - d1.push(["C", cp1[0], cp1[1], cp2[0], cp2[1], p4[0], p4[1]]); - } - return d1; -} -function getLinePath2(points, isInCircle) { - return _points2path(points, isInCircle); -} -function getSplinePath(points, isInCircle, constaint) { - var data3 = []; - var first = points[0]; - var prePoint = null; - if (points.length <= 2) { - return getLinePath2(points, isInCircle); - } - for (var i4 = 0, len5 = points.length; i4 < len5; i4++) { - var point2 = points[i4]; - if (!prePoint || !(prePoint.x === point2.x && prePoint.y === point2.y)) { - data3.push(point2.x); - data3.push(point2.y); - prePoint = point2; - } - } - var constraint = constaint || [ - [0, 0], - [1, 1] - ]; - var splinePath2 = catmullRom2bezier(data3, isInCircle, constraint); - splinePath2.unshift(["M", first.x, first.y]); - return splinePath2; -} -function convertNormalPath(coord2, path) { - var tmp = []; - (0, import_util112.each)(path, function(subPath) { - var action = subPath[0]; - switch (action.toLowerCase()) { - case "m": - case "l": - case "c": - tmp.push(_convertArr(subPath, coord2)); - break; - case "a": - tmp.push(_convertArcPath(subPath, coord2)); - break; - case "z": - default: - tmp.push(subPath); - break; - } - }); - return tmp; -} -function convertPolarPath(coord2, path) { - var tmp = []; - var pre; - var cur; - var transposed; - var equals7; - (0, import_util112.each)(path, function(subPath, index2) { - var action = subPath[0]; - switch (action.toLowerCase()) { - case "m": - case "c": - case "q": - tmp.push(_convertArr(subPath, coord2)); - break; - case "l": - pre = path[index2 - 1]; - cur = subPath; - transposed = coord2.isTransposed; - equals7 = transposed ? pre[pre.length - 2] === cur[1] : pre[pre.length - 1] === cur[2]; - if (equals7) { - tmp = tmp.concat(_convertPolarPath(pre, cur, coord2)); - } else { - tmp.push(_convertArr(subPath, coord2)); - } - break; - case "a": - tmp.push(_convertArcPath(subPath, coord2)); - break; - case "z": - default: - tmp.push(subPath); - break; - } - }); - _filterFullCirleLine(tmp); - return tmp; -} - -// node_modules/@antv/g2/esm/interaction/action/util.js -function getMaskBBox(context, tolerance3) { - var event = context.event; - var maskShape = event.target; - var maskBBox = maskShape.getCanvasBBox(); - if (!(maskBBox.width >= tolerance3 || maskBBox.height >= tolerance3)) { - return null; - } - return maskBBox; -} -function getMaskPath(context, tolerance3) { - var event = context.event; - var maskShape = event.target; - var maskBBox = maskShape.getCanvasBBox(); - if (!(maskBBox.width >= tolerance3 || maskBBox.height >= tolerance3)) { - return null; - } - return maskShape.attr("path"); -} -function getCurrentElement(context) { - var event = context.event; - var element; - var target = event.target; - if (target) { - element = target.get("element"); - } - return element; -} -function getDelegationObject(context) { - var event = context.event; - var target = event.target; - var delegateObject; - if (target) { - delegateObject = target.get("delegateObject"); - } - return delegateObject; -} -function isElementChange(context) { - var event = context.event.gEvent; - if (event && event.fromShape && event.toShape && event.fromShape.get("element") === event.toShape.get("element")) { - return false; - } - return true; -} -function isList(delegateObject) { - return delegateObject && delegateObject.component && delegateObject.component.isList(); -} -function isSlider(delegateObject) { - return delegateObject && delegateObject.component && delegateObject.component.isSlider(); -} -function isMask(context) { - var event = context.event; - var target = event.target; - return target && target.get("name") === "mask"; -} -function getMaskedElements(context, tolerance3) { - var target = context.event.target; - if (target.get("type") === "path") { - var maskPath = getMaskPath(context, tolerance3); - if (!maskPath) { - return; - } - return getElementsByPath(context.view, maskPath); - } - var maskBBox = getMaskBBox(context, tolerance3); - if (!maskBBox) { - return null; - } - return getIntersectElements(context.view, maskBBox); -} -function getSiblingMaskElements(context, sibling, tolerance3) { - var maskBBox = getMaskBBox(context, tolerance3); - if (!maskBBox) { - return null; - } - var view = context.view; - var start = getSiblingPoint(view, sibling, { x: maskBBox.x, y: maskBBox.y }); - var end2 = getSiblingPoint(view, sibling, { x: maskBBox.maxX, y: maskBBox.maxY }); - var box2 = { - minX: start.x, - minY: start.y, - maxX: end2.x, - maxY: end2.y - }; - return getIntersectElements(sibling, box2); -} -function getElements(view) { - var geometries = view.geometries; - var rst = []; - (0, import_util113.each)(geometries, function(geom) { - var elements = geom.elements; - rst = rst.concat(elements); - }); - if (view.views && view.views.length) { - (0, import_util113.each)(view.views, function(subView) { - rst = rst.concat(getElements(subView)); - }); - } - return rst; -} -function getElementsByField(view, field6, value2) { - var elements = getElements(view); - return elements.filter(function(el) { - return getElementValue(el, field6) === value2; - }); -} -function getElementsByState(view, stateName) { - var geometries = view.geometries; - var rst = []; - (0, import_util113.each)(geometries, function(geom) { - var elements = geom.getElementsBy(function(el) { - return el.hasState(stateName); - }); - rst = rst.concat(elements); - }); - return rst; -} -function getElementValue(element, field6) { - var model = element.getModel(); - var record = model.data; - var value2; - if ((0, import_util113.isArray)(record)) { - value2 = record[0][field6]; - } else { - value2 = record[field6]; - } - return value2; -} -function intersectRect(box1, box2) { - return !(box2.minX > box1.maxX || box2.maxX < box1.minX || box2.minY > box1.maxY || box2.maxY < box1.minY); -} -function getIntersectElements(view, box2) { - var elements = getElements(view); - var rst = []; - (0, import_util113.each)(elements, function(el) { - var shape = el.shape; - var shapeBBox = shape.getCanvasBBox(); - if (intersectRect(box2, shapeBBox)) { - rst.push(el); - } - }); - return rst; -} -function pathToPoints(path) { - var points = []; - (0, import_util113.each)(path, function(seg) { - var command = seg[0]; - if (command !== "A") { - for (var i4 = 1; i4 < seg.length; i4 = i4 + 2) { - points.push([seg[i4], seg[i4 + 1]]); - } - } else { - var length_1 = seg.length; - points.push([seg[length_1 - 2], seg[length_1 - 1]]); - } - }); - return points; -} -function getElementsByPath(view, path) { - var elements = getElements(view); - var points = pathToPoints(path); - var rst = elements.filter(function(el) { - var shape = el.shape; - var shapePoints; - if (shape.get("type") === "path") { - shapePoints = pathToPoints(shape.attr("path")); - } else { - var shapeBBox = shape.getCanvasBBox(); - shapePoints = toPoints(shapeBBox); - } - return isPolygonsIntersect(points, shapePoints); - }); - return rst; -} -function getComponents(view) { - return view.getComponents().map(function(co) { - return co.component; - }); -} -function distance7(p1, p22) { - var dx = p22.x - p1.x; - var dy = p22.y - p1.y; - return Math.sqrt(dx * dx + dy * dy); -} -function getSpline(points, z3) { - if (points.length <= 2) { - return getLinePath2(points, false); - } - var first = points[0]; - var arr = []; - (0, import_util113.each)(points, function(point2) { - arr.push(point2.x); - arr.push(point2.y); - }); - var path = catmullRom2bezier(arr, z3, null); - path.unshift(["M", first.x, first.y]); - return path; -} -function isInBox(box2, point2) { - return box2.x <= point2.x && box2.maxX >= point2.x && box2.y <= point2.y && box2.maxY > point2.y; -} -function getSilbings(view) { - var parent = view.parent; - var siblings = null; - if (parent) { - siblings = parent.views.filter(function(sub6) { - return sub6 !== view; - }); - } - return siblings; -} -function point2Normalize(view, point2) { - var coord2 = view.getCoordinate(); - return coord2.invert(point2); -} -function getSiblingPoint(view, sibling, point2) { - var normalPoint = point2Normalize(view, point2); - return sibling.getCoordinate().convert(normalPoint); -} -function isInRecords(records, record, xFiled, yField) { - var isIn = false; - (0, import_util113.each)(records, function(r4) { - if (r4[xFiled] === record[xFiled] && r4[yField] === record[yField]) { - isIn = true; - return false; - } - }); - return isIn; -} -function getScaleByField(view, field6) { - var scale12 = view.getScaleByField(field6); - if (!scale12 && view.views) { - (0, import_util113.each)(view.views, function(subView) { - scale12 = getScaleByField(subView, field6); - if (scale12) { - return false; - } - }); - } - return scale12; -} - -// node_modules/@antv/g2/esm/interaction/context.js -var Context = function() { - function Context2(view) { - this.actions = []; - this.event = null; - this.cacheMap = {}; - this.view = view; - } - Context2.prototype.cache = function() { - var params = []; - for (var _i = 0; _i < arguments.length; _i++) { - params[_i] = arguments[_i]; - } - if (params.length === 1) { - return this.cacheMap[params[0]]; - } else if (params.length === 2) { - this.cacheMap[params[0]] = params[1]; - } - }; - Context2.prototype.getAction = function(name) { - return this.actions.find(function(action) { - return action.name === name; - }); - }; - Context2.prototype.addAction = function(action) { - this.actions.push(action); - }; - Context2.prototype.removeAction = function(action) { - var actions = this.actions; - var index2 = this.actions.indexOf(action); - if (index2 >= 0) { - actions.splice(index2, 1); - } - }; - Context2.prototype.getCurrentPoint = function() { - var event = this.event; - if (event) { - if (event.target instanceof HTMLElement) { - var canvas = this.view.getCanvas(); - var point2 = canvas.getPointByClient(event.clientX, event.clientY); - return point2; - } else { - return { - x: event.x, - y: event.y - }; - } - } - return null; - }; - Context2.prototype.getCurrentShape = function() { - return (0, import_util114.get)(this.event, ["gEvent", "shape"]); - }; - Context2.prototype.isInPlot = function() { - var point2 = this.getCurrentPoint(); - if (point2) { - return this.view.isPointInPlot(point2); - } - return false; - }; - Context2.prototype.isInShape = function(name) { - var shape = this.getCurrentShape(); - if (shape) { - return shape.get("name") === name; - } - return false; - }; - Context2.prototype.isInComponent = function(name) { - var components = getComponents(this.view); - var point2 = this.getCurrentPoint(); - if (point2) { - return !!components.find(function(component2) { - var bbox = component2.getBBox(); - if (name) { - return component2.get("name") === name && isInBox(bbox, point2); - } else { - return isInBox(bbox, point2); - } - }); - } - return false; - }; - Context2.prototype.destroy = function() { - (0, import_util114.each)(this.actions.slice(), function(action) { - action.destroy(); - }); - this.view = null; - this.event = null; - this.actions = null; - this.cacheMap = null; - }; - return Context2; -}(); -var context_default = Context; - -// node_modules/@antv/g2/esm/interaction/interaction.js -var Interaction = function() { - function Interaction2(view, cfg) { - this.view = view; - this.cfg = cfg; - } - Interaction2.prototype.init = function() { - this.initEvents(); - }; - Interaction2.prototype.initEvents = function() { - }; - Interaction2.prototype.clearEvents = function() { - }; - Interaction2.prototype.destroy = function() { - this.clearEvents(); - }; - return Interaction2; -}(); -var interaction_default = Interaction; - -// node_modules/@antv/g2/esm/interaction/grammar-interaction.js -function parseAction(actionStr, context, arg) { - var arr = actionStr.split(":"); - var actionName = arr[0]; - var action = context.getAction(actionName) || createAction(actionName, context); - if (!action) { - throw new Error("There is no action named ".concat(actionName)); - } - var methodName = arr[1]; - return { - action, - methodName, - arg - }; -} -function executeAction(actionObject) { - var action = actionObject.action, methodName = actionObject.methodName, arg = actionObject.arg; - if (action[methodName]) { - action[methodName](arg); - } else { - throw new Error("Action(".concat(action.name, ") doesn't have a method called ").concat(methodName)); - } -} -var STEP_NAMES = { - START: "start", - SHOW_ENABLE: "showEnable", - END: "end", - ROLLBACK: "rollback", - PROCESSING: "processing" -}; -var GrammarInteraction = function(_super) { - __extends(GrammarInteraction2, _super); - function GrammarInteraction2(view, steps) { - var _this = _super.call(this, view, steps) || this; - _this.callbackCaches = {}; - _this.emitCaches = {}; - _this.steps = steps; - return _this; - } - GrammarInteraction2.prototype.init = function() { - this.initContext(); - _super.prototype.init.call(this); - }; - GrammarInteraction2.prototype.destroy = function() { - _super.prototype.destroy.call(this); - this.steps = null; - if (this.context) { - this.context.destroy(); - this.context = null; - } - this.callbackCaches = null; - this.view = null; - }; - GrammarInteraction2.prototype.initEvents = function() { - var _this = this; - (0, import_util116.each)(this.steps, function(stepArr, stepName) { - (0, import_util116.each)(stepArr, function(step) { - var callback = _this.getActionCallback(stepName, step); - if (callback) { - _this.bindEvent(step.trigger, callback); - } - }); - }); - }; - GrammarInteraction2.prototype.clearEvents = function() { - var _this = this; - (0, import_util116.each)(this.steps, function(stepArr, stepName) { - (0, import_util116.each)(stepArr, function(step) { - var callback = _this.getActionCallback(stepName, step); - if (callback) { - _this.offEvent(step.trigger, callback); - } - }); - }); - }; - GrammarInteraction2.prototype.initContext = function() { - var view = this.view; - var context = new context_default(view); - this.context = context; - var steps = this.steps; - (0, import_util116.each)(steps, function(subSteps) { - (0, import_util116.each)(subSteps, function(step) { - if ((0, import_util116.isFunction)(step.action)) { - step.actionObject = { - action: createCallbackAction(step.action, context), - methodName: "execute" - }; - } else if ((0, import_util116.isString)(step.action)) { - step.actionObject = parseAction(step.action, context, step.arg); - } else if ((0, import_util116.isArray)(step.action)) { - var actionArr = step.action; - var argArr_1 = (0, import_util116.isArray)(step.arg) ? step.arg : [step.arg]; - step.actionObject = []; - (0, import_util116.each)(actionArr, function(actionStr, idx) { - step.actionObject.push(parseAction(actionStr, context, argArr_1[idx])); - }); - } - }); - }); - }; - GrammarInteraction2.prototype.isAllowStep = function(stepName) { - var currentStepName = this.currentStepName; - var steps = this.steps; - if (currentStepName === stepName) { - return true; - } - if (stepName === STEP_NAMES.SHOW_ENABLE) { - return true; - } - if (stepName === STEP_NAMES.PROCESSING) { - return currentStepName === STEP_NAMES.START; - } - if (stepName === STEP_NAMES.START) { - return currentStepName !== STEP_NAMES.PROCESSING; - } - if (stepName === STEP_NAMES.END) { - return currentStepName === STEP_NAMES.PROCESSING || currentStepName === STEP_NAMES.START; - } - if (stepName === STEP_NAMES.ROLLBACK) { - if (steps[STEP_NAMES.END]) { - return currentStepName === STEP_NAMES.END; - } else if (currentStepName === STEP_NAMES.START) { - return true; - } - } - return false; - }; - GrammarInteraction2.prototype.isAllowExecute = function(stepName, step) { - if (this.isAllowStep(stepName)) { - var key = this.getKey(stepName, step); - if (step.once && this.emitCaches[key]) { - return false; - } - if (step.isEnable) { - return step.isEnable(this.context); - } - return true; - } - return false; - }; - GrammarInteraction2.prototype.enterStep = function(stepName) { - this.currentStepName = stepName; - this.emitCaches = {}; - }; - GrammarInteraction2.prototype.afterExecute = function(stepName, step) { - if (stepName !== STEP_NAMES.SHOW_ENABLE && this.currentStepName !== stepName) { - this.enterStep(stepName); - } - var key = this.getKey(stepName, step); - this.emitCaches[key] = true; - }; - GrammarInteraction2.prototype.getKey = function(stepName, step) { - return stepName + step.trigger + step.action; - }; - GrammarInteraction2.prototype.getActionCallback = function(stepName, step) { - var _this = this; - var context = this.context; - var callbackCaches = this.callbackCaches; - var actionObject = step.actionObject; - if (step.action && actionObject) { - var key = this.getKey(stepName, step); - if (!callbackCaches[key]) { - var actionCallback = function(event) { - context.event = event; - if (_this.isAllowExecute(stepName, step)) { - if ((0, import_util116.isArray)(actionObject)) { - (0, import_util116.each)(actionObject, function(obj) { - context.event = event; - executeAction(obj); - }); - } else { - context.event = event; - executeAction(actionObject); - } - _this.afterExecute(stepName, step); - if (step.callback) { - context.event = event; - step.callback(context); - } - } else { - context.event = null; - } - }; - if (step.debounce) { - callbackCaches[key] = (0, import_util116.debounce)(actionCallback, step.debounce.wait, step.debounce.immediate); - } else if (step.throttle) { - callbackCaches[key] = (0, import_util116.throttle)(actionCallback, step.throttle.wait, { - leading: step.throttle.leading, - trailing: step.throttle.trailing - }); - } else { - callbackCaches[key] = actionCallback; - } - } - return callbackCaches[key]; - } - return null; - }; - GrammarInteraction2.prototype.bindEvent = function(eventName, callback) { - var nameArr = eventName.split(":"); - if (nameArr[0] === "window") { - window.addEventListener(nameArr[1], callback); - } else if (nameArr[0] === "document") { - document.addEventListener(nameArr[1], callback); - } else { - this.view.on(eventName, callback); - } - }; - GrammarInteraction2.prototype.offEvent = function(eventName, callback) { - var nameArr = eventName.split(":"); - if (nameArr[0] === "window") { - window.removeEventListener(nameArr[1], callback); - } else if (nameArr[0] === "document") { - document.removeEventListener(nameArr[1], callback); - } else { - this.view.off(eventName, callback); - } - }; - return GrammarInteraction2; -}(interaction_default); -var grammar_interaction_default = GrammarInteraction; - -// node_modules/@antv/g2/esm/interaction/index.js -var Interactions = {}; -function getInteraction(name) { - return Interactions[(0, import_util117.lowerCase)(name)]; -} -function registerInteraction(name, interaction8) { - Interactions[(0, import_util117.lowerCase)(name)] = interaction8; -} -function createInteraction(name, view, cfg) { - var interaciton = getInteraction(name); - if (!interaciton) { - return null; - } - if ((0, import_util117.isPlainObject)(interaciton)) { - var steps = (0, import_util117.mix)((0, import_util117.clone)(interaciton), cfg); - return new grammar_interaction_default(view, steps); - } else { - var cls = interaciton; - return new cls(view, cfg); - } -} - -// node_modules/@antv/g2/esm/theme/index.js -var import_util120 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/theme/util/create-theme.js -var import_util119 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/theme/util/create-by-style-sheet.js -var import_util118 = __toModule(require_lib()); -function createAxisStyles(styleSheet) { - return { - title: { - autoRotate: true, - position: "center", - spacing: styleSheet.axisTitleSpacing, - style: { - fill: styleSheet.axisTitleTextFillColor, - fontSize: styleSheet.axisTitleTextFontSize, - lineHeight: styleSheet.axisTitleTextLineHeight, - textBaseline: "middle", - fontFamily: styleSheet.fontFamily - } - }, - label: { - autoRotate: false, - autoEllipsis: false, - autoHide: { type: "equidistance", cfg: { minGap: 6 } }, - offset: styleSheet.axisLabelOffset, - style: { - fill: styleSheet.axisLabelFillColor, - fontSize: styleSheet.axisLabelFontSize, - lineHeight: styleSheet.axisLabelLineHeight, - fontFamily: styleSheet.fontFamily - } - }, - line: { - style: { - lineWidth: styleSheet.axisLineBorder, - stroke: styleSheet.axisLineBorderColor - } - }, - grid: { - line: { - type: "line", - style: { - stroke: styleSheet.axisGridBorderColor, - lineWidth: styleSheet.axisGridBorder, - lineDash: styleSheet.axisGridLineDash - } - }, - alignTick: true, - animate: true - }, - tickLine: { - style: { - lineWidth: styleSheet.axisTickLineBorder, - stroke: styleSheet.axisTickLineBorderColor - }, - alignTick: true, - length: styleSheet.axisTickLineLength - }, - subTickLine: null, - animate: true - }; -} -function createLegendStyles(styleSheet) { - return { - title: null, - marker: { - symbol: "circle", - spacing: styleSheet.legendMarkerSpacing, - style: { - r: styleSheet.legendCircleMarkerSize, - fill: styleSheet.legendMarkerColor - } - }, - itemName: { - spacing: 5, - style: { - fill: styleSheet.legendItemNameFillColor, - fontFamily: styleSheet.fontFamily, - fontSize: styleSheet.legendItemNameFontSize, - lineHeight: styleSheet.legendItemNameLineHeight, - fontWeight: styleSheet.legendItemNameFontWeight, - textAlign: "start", - textBaseline: "middle" - } - }, - itemStates: { - active: { - nameStyle: { - opacity: 0.8 - } - }, - unchecked: { - nameStyle: { - fill: "#D8D8D8" - }, - markerStyle: { - fill: "#D8D8D8", - stroke: "#D8D8D8" - } - }, - inactive: { - nameStyle: { - fill: "#D8D8D8" - }, - markerStyle: { - opacity: 0.2 - } - } - }, - flipPage: true, - pageNavigator: { - marker: { - style: { - size: styleSheet.legendPageNavigatorMarkerSize, - inactiveFill: styleSheet.legendPageNavigatorMarkerInactiveFillColor, - inactiveOpacity: styleSheet.legendPageNavigatorMarkerInactiveFillOpacity, - fill: styleSheet.legendPageNavigatorMarkerFillColor, - opacity: styleSheet.legendPageNavigatorMarkerFillOpacity - } - }, - text: { - style: { - fill: styleSheet.legendPageNavigatorTextFillColor, - fontSize: styleSheet.legendPageNavigatorTextFontSize - } - } - }, - animate: false, - maxItemWidth: 200, - itemSpacing: styleSheet.legendItemSpacing, - itemMarginBottom: styleSheet.legendItemMarginBottom, - padding: styleSheet.legendPadding - }; -} -function createThemeByStyleSheet(styleSheet) { - var _a6; - var shapeStyles = { - point: { - default: { - fill: styleSheet.pointFillColor, - r: styleSheet.pointSize, - stroke: styleSheet.pointBorderColor, - lineWidth: styleSheet.pointBorder, - fillOpacity: styleSheet.pointFillOpacity - }, - active: { - stroke: styleSheet.pointActiveBorderColor, - lineWidth: styleSheet.pointActiveBorder - }, - selected: { - stroke: styleSheet.pointSelectedBorderColor, - lineWidth: styleSheet.pointSelectedBorder - }, - inactive: { - fillOpacity: styleSheet.pointInactiveFillOpacity, - strokeOpacity: styleSheet.pointInactiveBorderOpacity - } - }, - hollowPoint: { - default: { - fill: styleSheet.hollowPointFillColor, - lineWidth: styleSheet.hollowPointBorder, - stroke: styleSheet.hollowPointBorderColor, - strokeOpacity: styleSheet.hollowPointBorderOpacity, - r: styleSheet.hollowPointSize - }, - active: { - stroke: styleSheet.hollowPointActiveBorderColor, - strokeOpacity: styleSheet.hollowPointActiveBorderOpacity - }, - selected: { - lineWidth: styleSheet.hollowPointSelectedBorder, - stroke: styleSheet.hollowPointSelectedBorderColor, - strokeOpacity: styleSheet.hollowPointSelectedBorderOpacity - }, - inactive: { - strokeOpacity: styleSheet.hollowPointInactiveBorderOpacity - } - }, - area: { - default: { - fill: styleSheet.areaFillColor, - fillOpacity: styleSheet.areaFillOpacity, - stroke: null - }, - active: { - fillOpacity: styleSheet.areaActiveFillOpacity - }, - selected: { - fillOpacity: styleSheet.areaSelectedFillOpacity - }, - inactive: { - fillOpacity: styleSheet.areaInactiveFillOpacity - } - }, - hollowArea: { - default: { - fill: null, - stroke: styleSheet.hollowAreaBorderColor, - lineWidth: styleSheet.hollowAreaBorder, - strokeOpacity: styleSheet.hollowAreaBorderOpacity - }, - active: { - fill: null, - lineWidth: styleSheet.hollowAreaActiveBorder - }, - selected: { - fill: null, - lineWidth: styleSheet.hollowAreaSelectedBorder - }, - inactive: { - strokeOpacity: styleSheet.hollowAreaInactiveBorderOpacity - } - }, - interval: { - default: { - fill: styleSheet.intervalFillColor, - fillOpacity: styleSheet.intervalFillOpacity - }, - active: { - stroke: styleSheet.intervalActiveBorderColor, - lineWidth: styleSheet.intervalActiveBorder - }, - selected: { - stroke: styleSheet.intervalSelectedBorderColor, - lineWidth: styleSheet.intervalSelectedBorder - }, - inactive: { - fillOpacity: styleSheet.intervalInactiveFillOpacity, - strokeOpacity: styleSheet.intervalInactiveBorderOpacity - } - }, - hollowInterval: { - default: { - fill: styleSheet.hollowIntervalFillColor, - stroke: styleSheet.hollowIntervalBorderColor, - lineWidth: styleSheet.hollowIntervalBorder, - strokeOpacity: styleSheet.hollowIntervalBorderOpacity - }, - active: { - stroke: styleSheet.hollowIntervalActiveBorderColor, - lineWidth: styleSheet.hollowIntervalActiveBorder, - strokeOpacity: styleSheet.hollowIntervalActiveBorderOpacity - }, - selected: { - stroke: styleSheet.hollowIntervalSelectedBorderColor, - lineWidth: styleSheet.hollowIntervalSelectedBorder, - strokeOpacity: styleSheet.hollowIntervalSelectedBorderOpacity - }, - inactive: { - stroke: styleSheet.hollowIntervalInactiveBorderColor, - lineWidth: styleSheet.hollowIntervalInactiveBorder, - strokeOpacity: styleSheet.hollowIntervalInactiveBorderOpacity - } - }, - line: { - default: { - stroke: styleSheet.lineBorderColor, - lineWidth: styleSheet.lineBorder, - strokeOpacity: styleSheet.lineBorderOpacity, - fill: null, - lineAppendWidth: 10, - lineCap: "round", - lineJoin: "round" - }, - active: { - lineWidth: styleSheet.lineActiveBorder - }, - selected: { - lineWidth: styleSheet.lineSelectedBorder - }, - inactive: { - strokeOpacity: styleSheet.lineInactiveBorderOpacity - } - } - }; - var axisStyles = createAxisStyles(styleSheet); - var legendStyles = createLegendStyles(styleSheet); - return { - background: styleSheet.backgroundColor, - defaultColor: styleSheet.brandColor, - subColor: styleSheet.subColor, - semanticRed: styleSheet.paletteSemanticRed, - semanticGreen: styleSheet.paletteSemanticGreen, - padding: "auto", - fontFamily: styleSheet.fontFamily, - columnWidthRatio: 1 / 2, - maxColumnWidth: null, - minColumnWidth: null, - roseWidthRatio: 0.9999999, - multiplePieWidthRatio: 1 / 1.3, - colors10: styleSheet.paletteQualitative10, - colors20: styleSheet.paletteQualitative20, - sequenceColors: styleSheet.paletteSequence, - shapes: { - point: [ - "hollow-circle", - "hollow-square", - "hollow-bowtie", - "hollow-diamond", - "hollow-hexagon", - "hollow-triangle", - "hollow-triangle-down", - "circle", - "square", - "bowtie", - "diamond", - "hexagon", - "triangle", - "triangle-down", - "cross", - "tick", - "plus", - "hyphen", - "line" - ], - line: ["line", "dash", "dot", "smooth"], - area: ["area", "smooth", "line", "smooth-line"], - interval: ["rect", "hollow-rect", "line", "tick"] - }, - sizes: [1, 10], - geometries: { - interval: { - rect: { - default: { - style: shapeStyles.interval.default - }, - active: { - style: shapeStyles.interval.active - }, - inactive: { - style: shapeStyles.interval.inactive - }, - selected: { - style: function(element) { - var coordinate11 = element.geometry.coordinate; - if (coordinate11.isPolar && coordinate11.isTransposed) { - var _a7 = getAngle3(element.getModel(), coordinate11), startAngle = _a7.startAngle, endAngle = _a7.endAngle; - var middleAngle = (startAngle + endAngle) / 2; - var r4 = 7.5; - var x6 = r4 * Math.cos(middleAngle); - var y5 = r4 * Math.sin(middleAngle); - return { - matrix: ext_exports.transform(null, [["t", x6, y5]]) - }; - } - return shapeStyles.interval.selected; - } - } - }, - "hollow-rect": { - default: { - style: shapeStyles.hollowInterval.default - }, - active: { - style: shapeStyles.hollowInterval.active - }, - inactive: { - style: shapeStyles.hollowInterval.inactive - }, - selected: { - style: shapeStyles.hollowInterval.selected - } - }, - line: { - default: { - style: shapeStyles.hollowInterval.default - }, - active: { - style: shapeStyles.hollowInterval.active - }, - inactive: { - style: shapeStyles.hollowInterval.inactive - }, - selected: { - style: shapeStyles.hollowInterval.selected - } - }, - tick: { - default: { - style: shapeStyles.hollowInterval.default - }, - active: { - style: shapeStyles.hollowInterval.active - }, - inactive: { - style: shapeStyles.hollowInterval.inactive - }, - selected: { - style: shapeStyles.hollowInterval.selected - } - }, - funnel: { - default: { - style: shapeStyles.interval.default - }, - active: { - style: shapeStyles.interval.active - }, - inactive: { - style: shapeStyles.interval.inactive - }, - selected: { - style: shapeStyles.interval.selected - } - }, - pyramid: { - default: { - style: shapeStyles.interval.default - }, - active: { - style: shapeStyles.interval.active - }, - inactive: { - style: shapeStyles.interval.inactive - }, - selected: { - style: shapeStyles.interval.selected - } - } - }, - line: { - line: { - default: { - style: shapeStyles.line.default - }, - active: { - style: shapeStyles.line.active - }, - inactive: { - style: shapeStyles.line.inactive - }, - selected: { - style: shapeStyles.line.selected - } - }, - dot: { - default: { - style: __assign(__assign({}, shapeStyles.line.default), { lineCap: null, lineDash: [1, 1] }) - }, - active: { - style: __assign(__assign({}, shapeStyles.line.active), { lineCap: null, lineDash: [1, 1] }) - }, - inactive: { - style: __assign(__assign({}, shapeStyles.line.inactive), { lineCap: null, lineDash: [1, 1] }) - }, - selected: { - style: __assign(__assign({}, shapeStyles.line.selected), { lineCap: null, lineDash: [1, 1] }) - } - }, - dash: { - default: { - style: __assign(__assign({}, shapeStyles.line.default), { lineCap: null, lineDash: [5.5, 1] }) - }, - active: { - style: __assign(__assign({}, shapeStyles.line.active), { lineCap: null, lineDash: [5.5, 1] }) - }, - inactive: { - style: __assign(__assign({}, shapeStyles.line.inactive), { lineCap: null, lineDash: [5.5, 1] }) - }, - selected: { - style: __assign(__assign({}, shapeStyles.line.selected), { lineCap: null, lineDash: [5.5, 1] }) - } - }, - smooth: { - default: { - style: shapeStyles.line.default - }, - active: { - style: shapeStyles.line.active - }, - inactive: { - style: shapeStyles.line.inactive - }, - selected: { - style: shapeStyles.line.selected - } - }, - hv: { - default: { - style: shapeStyles.line.default - }, - active: { - style: shapeStyles.line.active - }, - inactive: { - style: shapeStyles.line.inactive - }, - selected: { - style: shapeStyles.line.selected - } - }, - vh: { - default: { - style: shapeStyles.line.default - }, - active: { - style: shapeStyles.line.active - }, - inactive: { - style: shapeStyles.line.inactive - }, - selected: { - style: shapeStyles.line.selected - } - }, - hvh: { - default: { - style: shapeStyles.line.default - }, - active: { - style: shapeStyles.line.active - }, - inactive: { - style: shapeStyles.line.inactive - }, - selected: { - style: shapeStyles.line.selected - } - }, - vhv: { - default: { - style: shapeStyles.line.default - }, - active: { - style: shapeStyles.line.active - }, - inactive: { - style: shapeStyles.line.inactive - }, - selected: { - style: shapeStyles.line.selected - } - } - }, - polygon: { - polygon: { - default: { - style: shapeStyles.interval.default - }, - active: { - style: shapeStyles.interval.active - }, - inactive: { - style: shapeStyles.interval.inactive - }, - selected: { - style: shapeStyles.interval.selected - } - } - }, - point: { - circle: { - default: { - style: shapeStyles.point.default - }, - active: { - style: shapeStyles.point.active - }, - inactive: { - style: shapeStyles.point.inactive - }, - selected: { - style: shapeStyles.point.selected - } - }, - square: { - default: { - style: shapeStyles.point.default - }, - active: { - style: shapeStyles.point.active - }, - inactive: { - style: shapeStyles.point.inactive - }, - selected: { - style: shapeStyles.point.selected - } - }, - bowtie: { - default: { - style: shapeStyles.point.default - }, - active: { - style: shapeStyles.point.active - }, - inactive: { - style: shapeStyles.point.inactive - }, - selected: { - style: shapeStyles.point.selected - } - }, - diamond: { - default: { - style: shapeStyles.point.default - }, - active: { - style: shapeStyles.point.active - }, - inactive: { - style: shapeStyles.point.inactive - }, - selected: { - style: shapeStyles.point.selected - } - }, - hexagon: { - default: { - style: shapeStyles.point.default - }, - active: { - style: shapeStyles.point.active - }, - inactive: { - style: shapeStyles.point.inactive - }, - selected: { - style: shapeStyles.point.selected - } - }, - triangle: { - default: { - style: shapeStyles.point.default - }, - active: { - style: shapeStyles.point.active - }, - inactive: { - style: shapeStyles.point.inactive - }, - selected: { - style: shapeStyles.point.selected - } - }, - "triangle-down": { - default: { - style: shapeStyles.point.default - }, - active: { - style: shapeStyles.point.active - }, - inactive: { - style: shapeStyles.point.inactive - }, - selected: { - style: shapeStyles.point.selected - } - }, - "hollow-circle": { - default: { - style: shapeStyles.hollowPoint.default - }, - active: { - style: shapeStyles.hollowPoint.active - }, - inactive: { - style: shapeStyles.hollowPoint.inactive - }, - selected: { - style: shapeStyles.hollowPoint.selected - } - }, - "hollow-square": { - default: { - style: shapeStyles.hollowPoint.default - }, - active: { - style: shapeStyles.hollowPoint.active - }, - inactive: { - style: shapeStyles.hollowPoint.inactive - }, - selected: { - style: shapeStyles.hollowPoint.selected - } - }, - "hollow-bowtie": { - default: { - style: shapeStyles.hollowPoint.default - }, - active: { - style: shapeStyles.hollowPoint.active - }, - inactive: { - style: shapeStyles.hollowPoint.inactive - }, - selected: { - style: shapeStyles.hollowPoint.selected - } - }, - "hollow-diamond": { - default: { - style: shapeStyles.hollowPoint.default - }, - active: { - style: shapeStyles.hollowPoint.active - }, - inactive: { - style: shapeStyles.hollowPoint.inactive - }, - selected: { - style: shapeStyles.hollowPoint.selected - } - }, - "hollow-hexagon": { - default: { - style: shapeStyles.hollowPoint.default - }, - active: { - style: shapeStyles.hollowPoint.active - }, - inactive: { - style: shapeStyles.hollowPoint.inactive - }, - selected: { - style: shapeStyles.hollowPoint.selected - } - }, - "hollow-triangle": { - default: { - style: shapeStyles.hollowPoint.default - }, - active: { - style: shapeStyles.hollowPoint.active - }, - inactive: { - style: shapeStyles.hollowPoint.inactive - }, - selected: { - style: shapeStyles.hollowPoint.selected - } - }, - "hollow-triangle-down": { - default: { - style: shapeStyles.hollowPoint.default - }, - active: { - style: shapeStyles.hollowPoint.active - }, - inactive: { - style: shapeStyles.hollowPoint.inactive - }, - selected: { - style: shapeStyles.hollowPoint.selected - } - }, - cross: { - default: { - style: shapeStyles.hollowPoint.default - }, - active: { - style: shapeStyles.hollowPoint.active - }, - inactive: { - style: shapeStyles.hollowPoint.inactive - }, - selected: { - style: shapeStyles.hollowPoint.selected - } - }, - tick: { - default: { - style: shapeStyles.hollowPoint.default - }, - active: { - style: shapeStyles.hollowPoint.active - }, - inactive: { - style: shapeStyles.hollowPoint.inactive - }, - selected: { - style: shapeStyles.hollowPoint.selected - } - }, - plus: { - default: { - style: shapeStyles.hollowPoint.default - }, - active: { - style: shapeStyles.hollowPoint.active - }, - inactive: { - style: shapeStyles.hollowPoint.inactive - }, - selected: { - style: shapeStyles.hollowPoint.selected - } - }, - hyphen: { - default: { - style: shapeStyles.hollowPoint.default - }, - active: { - style: shapeStyles.hollowPoint.active - }, - inactive: { - style: shapeStyles.hollowPoint.inactive - }, - selected: { - style: shapeStyles.hollowPoint.selected - } - }, - line: { - default: { - style: shapeStyles.hollowPoint.default - }, - active: { - style: shapeStyles.hollowPoint.active - }, - inactive: { - style: shapeStyles.hollowPoint.inactive - }, - selected: { - style: shapeStyles.hollowPoint.selected - } - } - }, - area: { - area: { - default: { - style: shapeStyles.area.default - }, - active: { - style: shapeStyles.area.active - }, - inactive: { - style: shapeStyles.area.inactive - }, - selected: { - style: shapeStyles.area.selected - } - }, - smooth: { - default: { - style: shapeStyles.area.default - }, - active: { - style: shapeStyles.area.active - }, - inactive: { - style: shapeStyles.area.inactive - }, - selected: { - style: shapeStyles.area.selected - } - }, - line: { - default: { - style: shapeStyles.hollowArea.default - }, - active: { - style: shapeStyles.hollowArea.active - }, - inactive: { - style: shapeStyles.hollowArea.inactive - }, - selected: { - style: shapeStyles.hollowArea.selected - } - }, - "smooth-line": { - default: { - style: shapeStyles.hollowArea.default - }, - active: { - style: shapeStyles.hollowArea.active - }, - inactive: { - style: shapeStyles.hollowArea.inactive - }, - selected: { - style: shapeStyles.hollowArea.selected - } - } - }, - schema: { - candle: { - default: { - style: shapeStyles.hollowInterval.default - }, - active: { - style: shapeStyles.hollowInterval.active - }, - inactive: { - style: shapeStyles.hollowInterval.inactive - }, - selected: { - style: shapeStyles.hollowInterval.selected - } - }, - box: { - default: { - style: shapeStyles.hollowInterval.default - }, - active: { - style: shapeStyles.hollowInterval.active - }, - inactive: { - style: shapeStyles.hollowInterval.inactive - }, - selected: { - style: shapeStyles.hollowInterval.selected - } - } - }, - edge: { - line: { - default: { - style: shapeStyles.line.default - }, - active: { - style: shapeStyles.line.active - }, - inactive: { - style: shapeStyles.line.inactive - }, - selected: { - style: shapeStyles.line.selected - } - }, - vhv: { - default: { - style: shapeStyles.line.default - }, - active: { - style: shapeStyles.line.active - }, - inactive: { - style: shapeStyles.line.inactive - }, - selected: { - style: shapeStyles.line.selected - } - }, - smooth: { - default: { - style: shapeStyles.line.default - }, - active: { - style: shapeStyles.line.active - }, - inactive: { - style: shapeStyles.line.inactive - }, - selected: { - style: shapeStyles.line.selected - } - }, - arc: { - default: { - style: shapeStyles.line.default - }, - active: { - style: shapeStyles.line.active - }, - inactive: { - style: shapeStyles.line.inactive - }, - selected: { - style: shapeStyles.line.selected - } - } - }, - violin: { - violin: { - default: { - style: shapeStyles.line.default - }, - active: { - style: shapeStyles.line.active - }, - inactive: { - style: shapeStyles.line.inactive - }, - selected: { - style: shapeStyles.line.selected - } - }, - smooth: { - default: { - style: shapeStyles.line.default - }, - active: { - style: shapeStyles.line.active - }, - inactive: { - style: shapeStyles.line.inactive - }, - selected: { - style: shapeStyles.line.selected - } - }, - hollow: { - default: { - style: shapeStyles.hollowArea.default - }, - active: { - style: shapeStyles.hollowArea.active - }, - inactive: { - style: shapeStyles.hollowArea.inactive - }, - selected: { - style: shapeStyles.hollowArea.selected - } - }, - "hollow-smooth": { - default: { - style: shapeStyles.hollowArea.default - }, - active: { - style: shapeStyles.hollowArea.active - }, - inactive: { - style: shapeStyles.hollowArea.inactive - }, - selected: { - style: shapeStyles.hollowArea.selected - } - } - } - }, - components: { - axis: { - common: axisStyles, - top: { - position: "top", - grid: null, - title: null, - verticalLimitLength: 1 / 2 - }, - bottom: { - position: "bottom", - grid: null, - title: null, - verticalLimitLength: 1 / 2 - }, - left: { - position: "left", - title: null, - line: null, - tickLine: null, - verticalLimitLength: 1 / 3 - }, - right: { - position: "right", - title: null, - line: null, - tickLine: null, - verticalLimitLength: 1 / 3 - }, - circle: { - title: null, - grid: (0, import_util118.deepMix)({}, axisStyles.grid, { line: { type: "line" } }) - }, - radius: { - title: null, - grid: (0, import_util118.deepMix)({}, axisStyles.grid, { line: { type: "circle" } }) - } - }, - legend: { - common: legendStyles, - right: { - layout: "vertical", - padding: styleSheet.legendVerticalPadding - }, - left: { - layout: "vertical", - padding: styleSheet.legendVerticalPadding - }, - top: { - layout: "horizontal", - padding: styleSheet.legendHorizontalPadding - }, - bottom: { - layout: "horizontal", - padding: styleSheet.legendHorizontalPadding - }, - continuous: { - title: null, - background: null, - track: {}, - rail: { - type: "color", - size: styleSheet.sliderRailHeight, - defaultLength: styleSheet.sliderRailWidth, - style: { - fill: styleSheet.sliderRailFillColor, - stroke: styleSheet.sliderRailBorderColor, - lineWidth: styleSheet.sliderRailBorder - } - }, - label: { - align: "rail", - spacing: 4, - formatter: null, - style: { - fill: styleSheet.sliderLabelTextFillColor, - fontSize: styleSheet.sliderLabelTextFontSize, - lineHeight: styleSheet.sliderLabelTextLineHeight, - textBaseline: "middle", - fontFamily: styleSheet.fontFamily - } - }, - handler: { - size: styleSheet.sliderHandlerWidth, - style: { - fill: styleSheet.sliderHandlerFillColor, - stroke: styleSheet.sliderHandlerBorderColor - } - }, - slidable: true, - padding: legendStyles.padding - } - }, - tooltip: { - showContent: true, - follow: true, - showCrosshairs: false, - showMarkers: true, - shared: false, - enterable: false, - position: "auto", - marker: { - symbol: "circle", - stroke: "#fff", - shadowBlur: 10, - shadowOffsetX: 0, - shadowOffsetY: 0, - shadowColor: "rgba(0,0,0,0.09)", - lineWidth: 2, - r: 4 - }, - crosshairs: { - line: { - style: { - stroke: styleSheet.tooltipCrosshairsBorderColor, - lineWidth: styleSheet.tooltipCrosshairsBorder - } - }, - text: null, - textBackground: { - padding: 2, - style: { - fill: "rgba(0, 0, 0, 0.25)", - lineWidth: 0, - stroke: null - } - }, - follow: false - }, - domStyles: (_a6 = {}, _a6["".concat(css_const_exports.CONTAINER_CLASS)] = { - position: "absolute", - visibility: "hidden", - zIndex: 8, - transition: "left 0.4s cubic-bezier(0.23, 1, 0.32, 1) 0s, top 0.4s cubic-bezier(0.23, 1, 0.32, 1) 0s", - backgroundColor: styleSheet.tooltipContainerFillColor, - opacity: styleSheet.tooltipContainerFillOpacity, - boxShadow: styleSheet.tooltipContainerShadow, - borderRadius: "".concat(styleSheet.tooltipContainerBorderRadius, "px"), - color: styleSheet.tooltipTextFillColor, - fontSize: "".concat(styleSheet.tooltipTextFontSize, "px"), - fontFamily: styleSheet.fontFamily, - lineHeight: "".concat(styleSheet.tooltipTextLineHeight, "px"), - padding: "0 12px 0 12px" - }, _a6["".concat(css_const_exports.TITLE_CLASS)] = { - marginBottom: "12px", - marginTop: "12px" - }, _a6["".concat(css_const_exports.LIST_CLASS)] = { - margin: 0, - listStyleType: "none", - padding: 0 - }, _a6["".concat(css_const_exports.LIST_ITEM_CLASS)] = { - listStyleType: "none", - padding: 0, - marginBottom: "12px", - marginTop: "12px", - marginLeft: 0, - marginRight: 0 - }, _a6["".concat(css_const_exports.MARKER_CLASS)] = { - width: "8px", - height: "8px", - borderRadius: "50%", - display: "inline-block", - marginRight: "8px" - }, _a6["".concat(css_const_exports.VALUE_CLASS)] = { - display: "inline-block", - float: "right", - marginLeft: "30px" - }, _a6) - }, - annotation: { - arc: { - style: { - stroke: styleSheet.annotationArcBorderColor, - lineWidth: styleSheet.annotationArcBorder - }, - animate: true - }, - line: { - style: { - stroke: styleSheet.annotationLineBorderColor, - lineDash: styleSheet.annotationLineDash, - lineWidth: styleSheet.annotationLineBorder - }, - text: { - position: "start", - autoRotate: true, - style: { - fill: styleSheet.annotationTextFillColor, - stroke: styleSheet.annotationTextBorderColor, - lineWidth: styleSheet.annotationTextBorder, - fontSize: styleSheet.annotationTextFontSize, - textAlign: "start", - fontFamily: styleSheet.fontFamily, - textBaseline: "bottom" - } - }, - animate: true - }, - text: { - style: { - fill: styleSheet.annotationTextFillColor, - stroke: styleSheet.annotationTextBorderColor, - lineWidth: styleSheet.annotationTextBorder, - fontSize: styleSheet.annotationTextFontSize, - textBaseline: "middle", - textAlign: "start", - fontFamily: styleSheet.fontFamily - }, - animate: true - }, - region: { - top: false, - style: { - lineWidth: styleSheet.annotationRegionBorder, - stroke: styleSheet.annotationRegionBorderColor, - fill: styleSheet.annotationRegionFillColor, - fillOpacity: styleSheet.annotationRegionFillOpacity - }, - animate: true - }, - image: { - top: false, - animate: true - }, - dataMarker: { - top: true, - point: { - style: { - r: 3, - stroke: styleSheet.brandColor, - lineWidth: 2 - } - }, - line: { - style: { - stroke: styleSheet.annotationLineBorderColor, - lineWidth: styleSheet.annotationLineBorder - }, - length: styleSheet.annotationDataMarkerLineLength - }, - text: { - style: { - textAlign: "start", - fill: styleSheet.annotationTextFillColor, - stroke: styleSheet.annotationTextBorderColor, - lineWidth: styleSheet.annotationTextBorder, - fontSize: styleSheet.annotationTextFontSize, - fontFamily: styleSheet.fontFamily - } - }, - direction: "upward", - autoAdjust: true, - animate: true - }, - dataRegion: { - style: { - region: { - fill: styleSheet.annotationRegionFillColor, - fillOpacity: styleSheet.annotationRegionFillOpacity - }, - text: { - textAlign: "center", - textBaseline: "bottom", - fill: styleSheet.annotationTextFillColor, - stroke: styleSheet.annotationTextBorderColor, - lineWidth: styleSheet.annotationTextBorder, - fontSize: styleSheet.annotationTextFontSize, - fontFamily: styleSheet.fontFamily - } - }, - animate: true - } - }, - slider: { - common: { - padding: [8, 8, 8, 8], - backgroundStyle: { - fill: styleSheet.cSliderBackgroundFillColor, - opacity: styleSheet.cSliderBackgroundFillOpacity - }, - foregroundStyle: { - fill: styleSheet.cSliderForegroundFillColor, - opacity: styleSheet.cSliderForegroundFillOpacity - }, - handlerStyle: { - width: styleSheet.cSliderHandlerWidth, - height: styleSheet.cSliderHandlerHeight, - fill: styleSheet.cSliderHandlerFillColor, - opacity: styleSheet.cSliderHandlerFillOpacity, - stroke: styleSheet.cSliderHandlerBorderColor, - lineWidth: styleSheet.cSliderHandlerBorder, - radius: styleSheet.cSliderHandlerBorderRadius, - highLightFill: styleSheet.cSliderHandlerHighlightFillColor - }, - textStyle: { - fill: styleSheet.cSliderTextFillColor, - opacity: styleSheet.cSliderTextFillOpacity, - fontSize: styleSheet.cSliderTextFontSize, - lineHeight: styleSheet.cSliderTextLineHeight, - fontWeight: styleSheet.cSliderTextFontWeight, - stroke: styleSheet.cSliderTextBorderColor, - lineWidth: styleSheet.cSliderTextBorder - } - } - }, - scrollbar: { - common: { - padding: [8, 8, 8, 8] - }, - default: { - style: { - trackColor: styleSheet.scrollbarTrackFillColor, - thumbColor: styleSheet.scrollbarThumbFillColor - } - }, - hover: { - style: { - thumbColor: styleSheet.scrollbarThumbHighlightFillColor - } - } - } - }, - labels: { - offset: 12, - style: { - fill: styleSheet.labelFillColor, - fontSize: styleSheet.labelFontSize, - fontFamily: styleSheet.fontFamily, - stroke: styleSheet.labelBorderColor, - lineWidth: styleSheet.labelBorder - }, - fillColorDark: styleSheet.labelFillColorDark, - fillColorLight: styleSheet.labelFillColorLight, - autoRotate: true - }, - innerLabels: { - style: { - fill: styleSheet.innerLabelFillColor, - fontSize: styleSheet.innerLabelFontSize, - fontFamily: styleSheet.fontFamily, - stroke: styleSheet.innerLabelBorderColor, - lineWidth: styleSheet.innerLabelBorder - }, - autoRotate: true - }, - overflowLabels: { - style: { - fill: styleSheet.overflowLabelFillColor, - fontSize: styleSheet.overflowLabelFontSize, - fontFamily: styleSheet.fontFamily, - stroke: styleSheet.overflowLabelBorderColor, - lineWidth: styleSheet.overflowLabelBorder - } - }, - pieLabels: { - labelHeight: 14, - offset: 10, - labelLine: { - style: { - lineWidth: styleSheet.labelLineBorder - } - }, - autoRotate: true - } - }; -} - -// node_modules/@antv/g2/esm/theme/style-sheet/light.js -var BLACK_COLORS = { - 100: "#000", - 95: "#0D0D0D", - 85: "#262626", - 65: "#595959", - 45: "#8C8C8C", - 25: "#BFBFBF", - 15: "#D9D9D9", - 6: "#F0F0F0" -}; -var WHITE_COLORS = { - 100: "#FFFFFF", - 95: "#F2F2F2", - 85: "#D9D9D9", - 65: "#A6A6A6", - 45: "#737373", - 25: "#404040", - 15: "#262626", - 6: "#0F0F0F" -}; -var QUALITATIVE_10 = [ - "#5B8FF9", - "#5AD8A6", - "#5D7092", - "#F6BD16", - "#6F5EF9", - "#6DC8EC", - "#945FB9", - "#FF9845", - "#1E9493", - "#FF99C3" -]; -var QUALITATIVE_20 = [ - "#5B8FF9", - "#CDDDFD", - "#5AD8A6", - "#CDF3E4", - "#5D7092", - "#CED4DE", - "#F6BD16", - "#FCEBB9", - "#6F5EF9", - "#D3CEFD", - "#6DC8EC", - "#D3EEF9", - "#945FB9", - "#DECFEA", - "#FF9845", - "#FFE0C7", - "#1E9493", - "#BBDEDE", - "#FF99C3", - "#FFE0ED" -]; -var SINGLE_SEQUENCE = [ - "#B8E1FF", - "#9AC5FF", - "#7DAAFF", - "#5B8FF9", - "#3D76DD", - "#085EC0", - "#0047A5", - "#00318A", - "#001D70" -]; -var createLightStyleSheet = function(cfg) { - if (cfg === void 0) { - cfg = {}; - } - var _a6 = cfg.backgroundColor, backgroundColor = _a6 === void 0 ? "transparent" : _a6, _b = cfg.subColor, subColor = _b === void 0 ? "rgba(0,0,0,0.05)" : _b, _c = cfg.paletteQualitative10, paletteQualitative10 = _c === void 0 ? QUALITATIVE_10 : _c, _d = cfg.paletteQualitative20, paletteQualitative20 = _d === void 0 ? QUALITATIVE_20 : _d, _e = cfg.paletteSemanticRed, paletteSemanticRed = _e === void 0 ? "#F4664A" : _e, _f = cfg.paletteSemanticGreen, paletteSemanticGreen = _f === void 0 ? "#30BF78" : _f, _g = cfg.paletteSemanticYellow, paletteSemanticYellow = _g === void 0 ? "#FAAD14" : _g, _h = cfg.paletteSequence, paletteSequence = _h === void 0 ? SINGLE_SEQUENCE : _h, _j = cfg.fontFamily, fontFamily = _j === void 0 ? '"Segoe UI", Roboto, "Helvetica Neue", Arial,\n "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",\n "Noto Color Emoji"' : _j; - var _k = cfg.brandColor, brandColor = _k === void 0 ? paletteQualitative10[0] : _k; - return { - backgroundColor, - brandColor, - subColor, - paletteQualitative10, - paletteQualitative20, - paletteSemanticRed, - paletteSemanticGreen, - paletteSemanticYellow, - paletteSequence, - fontFamily, - axisLineBorderColor: BLACK_COLORS[25], - axisLineBorder: 1, - axisLineDash: null, - axisTitleTextFillColor: BLACK_COLORS[65], - axisTitleTextFontSize: 12, - axisTitleTextLineHeight: 12, - axisTitleTextFontWeight: "normal", - axisTitleSpacing: 12, - axisTickLineBorderColor: BLACK_COLORS[25], - axisTickLineLength: 4, - axisTickLineBorder: 1, - axisSubTickLineBorderColor: BLACK_COLORS[15], - axisSubTickLineLength: 2, - axisSubTickLineBorder: 1, - axisLabelFillColor: BLACK_COLORS[45], - axisLabelFontSize: 12, - axisLabelLineHeight: 12, - axisLabelFontWeight: "normal", - axisLabelOffset: 8, - axisGridBorderColor: BLACK_COLORS[15], - axisGridBorder: 1, - axisGridLineDash: null, - legendTitleTextFillColor: BLACK_COLORS[45], - legendTitleTextFontSize: 12, - legendTitleTextLineHeight: 21, - legendTitleTextFontWeight: "normal", - legendMarkerColor: brandColor, - legendMarkerSpacing: 8, - legendMarkerSize: 4, - legendCircleMarkerSize: 4, - legendSquareMarkerSize: 4, - legendLineMarkerSize: 5, - legendItemNameFillColor: BLACK_COLORS[65], - legendItemNameFontSize: 12, - legendItemNameLineHeight: 12, - legendItemNameFontWeight: "normal", - legendItemSpacing: 24, - legendItemMarginBottom: 12, - legendPadding: [8, 8, 8, 8], - legendHorizontalPadding: [8, 0, 8, 0], - legendVerticalPadding: [0, 8, 0, 8], - legendPageNavigatorMarkerSize: 12, - legendPageNavigatorMarkerInactiveFillColor: BLACK_COLORS[100], - legendPageNavigatorMarkerInactiveFillOpacity: 0.45, - legendPageNavigatorMarkerFillColor: BLACK_COLORS[100], - legendPageNavigatorMarkerFillOpacity: 1, - legendPageNavigatorTextFillColor: BLACK_COLORS[45], - legendPageNavigatorTextFontSize: 12, - sliderRailFillColor: BLACK_COLORS[15], - sliderRailBorder: 0, - sliderRailBorderColor: null, - sliderRailWidth: 100, - sliderRailHeight: 12, - sliderLabelTextFillColor: BLACK_COLORS[45], - sliderLabelTextFontSize: 12, - sliderLabelTextLineHeight: 12, - sliderLabelTextFontWeight: "normal", - sliderHandlerFillColor: BLACK_COLORS[6], - sliderHandlerWidth: 10, - sliderHandlerHeight: 14, - sliderHandlerBorder: 1, - sliderHandlerBorderColor: BLACK_COLORS[25], - annotationArcBorderColor: BLACK_COLORS[15], - annotationArcBorder: 1, - annotationLineBorderColor: BLACK_COLORS[25], - annotationLineBorder: 1, - annotationLineDash: null, - annotationTextFillColor: BLACK_COLORS[65], - annotationTextFontSize: 12, - annotationTextLineHeight: 12, - annotationTextFontWeight: "normal", - annotationTextBorderColor: null, - annotationTextBorder: 0, - annotationRegionFillColor: BLACK_COLORS[100], - annotationRegionFillOpacity: 0.06, - annotationRegionBorder: 0, - annotationRegionBorderColor: null, - annotationDataMarkerLineLength: 16, - tooltipCrosshairsBorderColor: BLACK_COLORS[25], - tooltipCrosshairsBorder: 1, - tooltipCrosshairsLineDash: null, - tooltipContainerFillColor: "rgb(255, 255, 255)", - tooltipContainerFillOpacity: 0.95, - tooltipContainerShadow: "0px 0px 10px #aeaeae", - tooltipContainerBorderRadius: 3, - tooltipTextFillColor: BLACK_COLORS[65], - tooltipTextFontSize: 12, - tooltipTextLineHeight: 12, - tooltipTextFontWeight: "bold", - labelFillColor: BLACK_COLORS[65], - labelFillColorDark: "#2c3542", - labelFillColorLight: "#ffffff", - labelFontSize: 12, - labelLineHeight: 12, - labelFontWeight: "normal", - labelBorderColor: null, - labelBorder: 0, - innerLabelFillColor: WHITE_COLORS[100], - innerLabelFontSize: 12, - innerLabelLineHeight: 12, - innerLabelFontWeight: "normal", - innerLabelBorderColor: null, - innerLabelBorder: 0, - overflowLabelFillColor: BLACK_COLORS[65], - overflowLabelFontSize: 12, - overflowLabelLineHeight: 12, - overflowLabelFontWeight: "normal", - overflowLabelBorderColor: WHITE_COLORS[100], - overflowLabelBorder: 1, - labelLineBorder: 1, - labelLineBorderColor: BLACK_COLORS[25], - cSliderRailHieght: 16, - cSliderBackgroundFillColor: "#416180", - cSliderBackgroundFillOpacity: 0.05, - cSliderForegroundFillColor: "#5B8FF9", - cSliderForegroundFillOpacity: 0.15, - cSliderHandlerHeight: 24, - cSliderHandlerWidth: 10, - cSliderHandlerFillColor: "#F7F7F7", - cSliderHandlerFillOpacity: 1, - cSliderHandlerHighlightFillColor: "#FFF", - cSliderHandlerBorderColor: "#BFBFBF", - cSliderHandlerBorder: 1, - cSliderHandlerBorderRadius: 2, - cSliderTextFillColor: "#000", - cSliderTextFillOpacity: 0.45, - cSliderTextFontSize: 12, - cSliderTextLineHeight: 12, - cSliderTextFontWeight: "normal", - cSliderTextBorderColor: null, - cSliderTextBorder: 0, - scrollbarTrackFillColor: "rgba(0,0,0,0)", - scrollbarThumbFillColor: "rgba(0,0,0,0.15)", - scrollbarThumbHighlightFillColor: "rgba(0,0,0,0.2)", - pointFillColor: brandColor, - pointFillOpacity: 0.95, - pointSize: 4, - pointBorder: 1, - pointBorderColor: WHITE_COLORS[100], - pointBorderOpacity: 1, - pointActiveBorderColor: BLACK_COLORS[100], - pointSelectedBorder: 2, - pointSelectedBorderColor: BLACK_COLORS[100], - pointInactiveFillOpacity: 0.3, - pointInactiveBorderOpacity: 0.3, - hollowPointSize: 4, - hollowPointBorder: 1, - hollowPointBorderColor: brandColor, - hollowPointBorderOpacity: 0.95, - hollowPointFillColor: WHITE_COLORS[100], - hollowPointActiveBorder: 1, - hollowPointActiveBorderColor: BLACK_COLORS[100], - hollowPointActiveBorderOpacity: 1, - hollowPointSelectedBorder: 2, - hollowPointSelectedBorderColor: BLACK_COLORS[100], - hollowPointSelectedBorderOpacity: 1, - hollowPointInactiveBorderOpacity: 0.3, - lineBorder: 2, - lineBorderColor: brandColor, - lineBorderOpacity: 1, - lineActiveBorder: 3, - lineSelectedBorder: 3, - lineInactiveBorderOpacity: 0.3, - areaFillColor: brandColor, - areaFillOpacity: 0.25, - areaActiveFillColor: brandColor, - areaActiveFillOpacity: 0.5, - areaSelectedFillColor: brandColor, - areaSelectedFillOpacity: 0.5, - areaInactiveFillOpacity: 0.3, - hollowAreaBorderColor: brandColor, - hollowAreaBorder: 2, - hollowAreaBorderOpacity: 1, - hollowAreaActiveBorder: 3, - hollowAreaActiveBorderColor: BLACK_COLORS[100], - hollowAreaSelectedBorder: 3, - hollowAreaSelectedBorderColor: BLACK_COLORS[100], - hollowAreaInactiveBorderOpacity: 0.3, - intervalFillColor: brandColor, - intervalFillOpacity: 0.95, - intervalActiveBorder: 1, - intervalActiveBorderColor: BLACK_COLORS[100], - intervalActiveBorderOpacity: 1, - intervalSelectedBorder: 2, - intervalSelectedBorderColor: BLACK_COLORS[100], - intervalSelectedBorderOpacity: 1, - intervalInactiveBorderOpacity: 0.3, - intervalInactiveFillOpacity: 0.3, - hollowIntervalBorder: 2, - hollowIntervalBorderColor: brandColor, - hollowIntervalBorderOpacity: 1, - hollowIntervalFillColor: WHITE_COLORS[100], - hollowIntervalActiveBorder: 2, - hollowIntervalActiveBorderColor: BLACK_COLORS[100], - hollowIntervalSelectedBorder: 3, - hollowIntervalSelectedBorderColor: BLACK_COLORS[100], - hollowIntervalSelectedBorderOpacity: 1, - hollowIntervalInactiveBorderOpacity: 0.3 - }; -}; -var antvLight = createLightStyleSheet(); - -// node_modules/@antv/g2/esm/theme/util/create-theme.js -function createTheme(themeCfg) { - var _a6 = themeCfg.styleSheet, styleSheetCfg = _a6 === void 0 ? {} : _a6, themeObject = __rest(themeCfg, ["styleSheet"]); - var styleSheet = createLightStyleSheet(styleSheetCfg); - return (0, import_util119.deepMix)({}, createThemeByStyleSheet(styleSheet), themeObject); -} - -// node_modules/@antv/g2/esm/theme/index.js -var defaultTheme = createTheme({}); -var Themes = { - default: defaultTheme -}; -function getTheme(theme4) { - return (0, import_util120.get)(Themes, (0, import_util120.lowerCase)(theme4), Themes.default); -} -function registerTheme(theme4, value2) { - Themes[(0, import_util120.lowerCase)(theme4)] = createTheme(value2); -} - -// node_modules/@antv/g2/esm/util/tooltip.js -var import_util122 = __toModule(require_lib()); -function snapEqual(v1, v22, scale12) { - var value1 = scale12.translate(v1); - var value2 = scale12.translate(v22); - return (0, import_util122.isNumberEqual)(value1, value2); -} -function getXValueByPoint(point2, geometry35) { - var coordinate11 = geometry35.coordinate; - var xScale = geometry35.getXScale(); - var range = xScale.range; - var rangeMax = range[range.length - 1]; - var rangeMin = range[0]; - var invertPoint = coordinate11.invert(point2); - var xValue = invertPoint.x; - if (coordinate11.isPolar && xValue > (1 + rangeMax) / 2) { - xValue = rangeMin; - } - return xScale.translate(xScale.invert(xValue)); -} -function filterYValue(data3, point2, geometry35) { - var coordinate11 = geometry35.coordinate; - var yScale = geometry35.getYScale(); - var yField = yScale.field; - var invertPoint = coordinate11.invert(point2); - var yValue = yScale.invert(invertPoint.y); - var result = (0, import_util122.find)(data3, function(obj) { - var originData = obj[FIELD_ORIGIN]; - return originData[yField][0] <= yValue && originData[yField][1] >= yValue; - }); - return result || data3[data3.length - 1]; -} -var getXDistance = (0, import_util122.memoize)(function(scale12) { - if (scale12.isCategory) { - return 1; - } - var scaleValues = scale12.values; - var length5 = scaleValues.length; - var min13 = scale12.translate(scaleValues[0]); - var max15 = min13; - for (var index2 = 0; index2 < length5; index2++) { - var value2 = scaleValues[index2]; - var numericValue = scale12.translate(value2); - if (numericValue < min13) { - min13 = numericValue; - } - if (numericValue > max15) { - max15 = numericValue; - } - } - return (max15 - min13) / (length5 - 1); -}); -function getTooltipTitle(originData, geometry35, title) { - var positionAttr = geometry35.getAttribute("position"); - var fields = positionAttr.getFields(); - var scales = geometry35.scales; - var titleField = (0, import_util122.isFunction)(title) || !title ? fields[0] : title; - var titleScale = scales[titleField]; - var tooltipTitle = titleScale ? titleScale.getText(originData[titleField]) : originData[titleField] || titleField; - return (0, import_util122.isFunction)(title) ? title(tooltipTitle, originData) : tooltipTitle; -} -function getAttributesForLegend(geometry35) { - var attributes = (0, import_util122.values)(geometry35.attributes); - return (0, import_util122.filter)(attributes, function(attribute) { - return (0, import_util122.contains)(GROUP_ATTRS, attribute.type); - }); -} -function getTooltipValueScale(geometry35) { - var attributes = getAttributesForLegend(geometry35); - var scale12; - for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) { - var attribute = attributes_1[_i]; - var tmpScale = attribute.getScale(attribute.type); - if (tmpScale && tmpScale.isLinear) { - scale12 = tmpScale; - break; - } - } - var xScale = geometry35.getXScale(); - var yScale = geometry35.getYScale(); - return scale12 || yScale || xScale; -} -function getTooltipValue(originData, valueScale) { - var field6 = valueScale.field; - var value2 = originData[field6]; - if ((0, import_util122.isArray)(value2)) { - var texts = value2.map(function(eachValue) { - return valueScale.getText(eachValue); - }); - return texts.join("-"); - } - return valueScale.getText(value2); -} -function getTooltipName(originData, geometry35) { - var nameScale; - var groupScales = geometry35.getGroupScales(); - if (groupScales.length) { - nameScale = groupScales[0]; - } - if (nameScale) { - var field6 = nameScale.field; - return nameScale.getText(originData[field6]); - } - var valueScale = getTooltipValueScale(geometry35); - return getName(valueScale); -} -function findDataByPoint(point2, data3, geometry35) { - if (data3.length === 0) { - return null; - } - var geometryType = geometry35.type; - var xScale = geometry35.getXScale(); - var yScale = geometry35.getYScale(); - var xField = xScale.field; - var yField = yScale.field; - var rst = null; - if (geometryType === "heatmap" || geometryType === "point") { - var coordinate11 = geometry35.coordinate; - var invertPoint = coordinate11.invert(point2); - var x6 = xScale.invert(invertPoint.x); - var y5 = yScale.invert(invertPoint.y); - var min13 = Infinity; - for (var index2 = 0; index2 < data3.length; index2++) { - var obj = data3[index2]; - var originData = obj[FIELD_ORIGIN]; - var range = Math.pow(originData[xField] - x6, 2) + Math.pow(originData[yField] - y5, 2); - if (range < min13) { - min13 = range; - rst = obj; - } - } - return rst; - } - var first = data3[0]; - var last17 = data3[data3.length - 1]; - var xValue = getXValueByPoint(point2, geometry35); - var firstXValue = first[FIELD_ORIGIN][xField]; - var firstYValue = first[FIELD_ORIGIN][yField]; - var lastXValue = last17[FIELD_ORIGIN][xField]; - var isYArray = yScale.isLinear && (0, import_util122.isArray)(firstYValue); - if ((0, import_util122.isArray)(firstXValue)) { - for (var index2 = 0; index2 < data3.length; index2++) { - var record = data3[index2]; - var originData = record[FIELD_ORIGIN]; - if (xScale.translate(originData[xField][0]) <= xValue && xScale.translate(originData[xField][1]) >= xValue) { - if (isYArray) { - if (!(0, import_util122.isArray)(rst)) { - rst = []; - } - rst.push(record); - } else { - rst = record; - break; - } - } - } - if ((0, import_util122.isArray)(rst)) { - rst = filterYValue(rst, point2, geometry35); - } - } else { - var next = void 0; - if (!xScale.isLinear && xScale.type !== "timeCat") { - for (var index2 = 0; index2 < data3.length; index2++) { - var record = data3[index2]; - var originData = record[FIELD_ORIGIN]; - if (snapEqual(originData[xField], xValue, xScale)) { - if (isYArray) { - if (!(0, import_util122.isArray)(rst)) { - rst = []; - } - rst.push(record); - } else { - rst = record; - break; - } - } else if (xScale.translate(originData[xField]) <= xValue) { - last17 = record; - next = data3[index2 + 1]; - } - } - if ((0, import_util122.isArray)(rst)) { - rst = filterYValue(rst, point2, geometry35); - } - } else { - if ((xValue > xScale.translate(lastXValue) || xValue < xScale.translate(firstXValue)) && (xValue > xScale.max || xValue < xScale.min)) { - return null; - } - var firstIdx = 0; - var lastIdx = data3.length - 1; - var middleIdx = void 0; - while (firstIdx <= lastIdx) { - middleIdx = Math.floor((firstIdx + lastIdx) / 2); - var item = data3[middleIdx][FIELD_ORIGIN][xField]; - if (snapEqual(item, xValue, xScale)) { - return data3[middleIdx]; - } - if (xScale.translate(item) <= xScale.translate(xValue)) { - firstIdx = middleIdx + 1; - last17 = data3[middleIdx]; - next = data3[middleIdx + 1]; - } else { - if (lastIdx === 0) { - last17 = data3[0]; - } - lastIdx = middleIdx - 1; - } - } - } - if (last17 && next) { - if (Math.abs(xScale.translate(last17[FIELD_ORIGIN][xField]) - xValue) > Math.abs(xScale.translate(next[FIELD_ORIGIN][xField]) - xValue)) { - last17 = next; - } - } - } - var distance15 = getXDistance(geometry35.getXScale()); - if (!rst && Math.abs(xScale.translate(last17[FIELD_ORIGIN][xField]) - xValue) <= distance15 / 2) { - rst = last17; - } - return rst; -} -function getTooltipItems(data3, geometry35, title, showNil) { - if (title === void 0) { - title = ""; - } - if (showNil === void 0) { - showNil = false; - } - var originData = data3[FIELD_ORIGIN]; - var tooltipTitle = getTooltipTitle(originData, geometry35, title); - var tooltipOption = geometry35.tooltipOption; - var defaultColor = geometry35.theme.defaultColor; - var items = []; - var name; - var value2; - function addItem(itemName, itemValue) { - if (showNil || !(0, import_util122.isNil)(itemValue) && itemValue !== "") { - var item = { - title: tooltipTitle, - data: originData, - mappingData: data3, - name: itemName, - value: itemValue, - color: data3.color || defaultColor, - marker: true - }; - items.push(item); - } - } - if ((0, import_util122.isObject)(tooltipOption)) { - var fields = tooltipOption.fields, callback = tooltipOption.callback; - if (callback) { - var callbackParams = fields.map(function(field7) { - return data3[FIELD_ORIGIN][field7]; - }); - var cfg = callback.apply(void 0, callbackParams); - var itemCfg = __assign({ data: data3[FIELD_ORIGIN], mappingData: data3, title: tooltipTitle, color: data3.color || defaultColor, marker: true }, cfg); - items.push(itemCfg); - } else { - var scales = geometry35.scales; - for (var _i = 0, fields_1 = fields; _i < fields_1.length; _i++) { - var field6 = fields_1[_i]; - if (!(0, import_util122.isNil)(originData[field6])) { - var scale12 = scales[field6]; - name = getName(scale12); - value2 = scale12.getText(originData[field6]); - addItem(name, value2); - } - } - } - } else { - var valueScale = getTooltipValueScale(geometry35); - value2 = getTooltipValue(originData, valueScale); - name = getTooltipName(originData, geometry35); - addItem(name, value2); - } - return items; -} -function getTooltipItemsByFindData(geometry35, point2, title, tooltipCfg) { - var showNil = tooltipCfg.showNil; - var result = []; - var dataArray = geometry35.dataArray; - if (!(0, import_util122.isEmpty)(dataArray)) { - geometry35.sort(dataArray); - for (var _i = 0, dataArray_1 = dataArray; _i < dataArray_1.length; _i++) { - var data3 = dataArray_1[_i]; - var record = findDataByPoint(point2, data3, geometry35); - if (record) { - var elementId = geometry35.getElementId(record); - var element = geometry35.elementsMap[elementId]; - if (geometry35.type === "heatmap" || element.visible) { - var items = getTooltipItems(record, geometry35, title, showNil); - if (items.length) { - result.push(items); - } - } - } - } - } - return result; -} -function getTooltipItemsByHitShape(geometry35, point2, title, tooltipCfg) { - var showNil = tooltipCfg.showNil; - var result = []; - var container2 = geometry35.container; - var shape = container2.getShape(point2.x, point2.y); - if (shape && shape.get("visible") && shape.get("origin")) { - var mappingData = shape.get("origin").mappingData; - var items = getTooltipItems(mappingData, geometry35, title, showNil); - if (items.length) { - result.push(items); - } - } - return result; -} -function findItemsFromView(view, point2, tooltipCfg) { - var result = []; - var geometries = view.geometries; - var shared = tooltipCfg.shared, title = tooltipCfg.title, reversed = tooltipCfg.reversed; - for (var _i = 0, geometries_1 = geometries; _i < geometries_1.length; _i++) { - var geometry35 = geometries_1[_i]; - if (geometry35.visible && geometry35.tooltipOption !== false) { - var geometryType = geometry35.type; - var tooltipItems = void 0; - if (["point", "edge", "polygon"].includes(geometryType)) { - tooltipItems = getTooltipItemsByHitShape(geometry35, point2, title, tooltipCfg); - } else if (["area", "line", "path", "heatmap"].includes(geometryType)) { - tooltipItems = getTooltipItemsByFindData(geometry35, point2, title, tooltipCfg); - } else { - if (shared !== false) { - tooltipItems = getTooltipItemsByFindData(geometry35, point2, title, tooltipCfg); - } else { - tooltipItems = getTooltipItemsByHitShape(geometry35, point2, title, tooltipCfg); - } - } - if (tooltipItems.length) { - if (reversed) { - tooltipItems.reverse(); - } - result.push(tooltipItems); - } - } - } - return result; -} -function findItemsFromViewRecurisive(view, point2, tooltipCfg) { - var result = findItemsFromView(view, point2, tooltipCfg); - for (var _i = 0, _a6 = view.views; _i < _a6.length; _i++) { - var childView = _a6[_i]; - result = result.concat(findItemsFromView(childView, point2, tooltipCfg)); - } - return result; -} - -// node_modules/@antv/g2/esm/util/padding.js -var import_util123 = __toModule(require_lib()); -function isAutoPadding(padding3) { - return !(0, import_util123.isNumber)(padding3) && !(0, import_util123.isArray)(padding3); -} -function parsePadding(padding3) { - if (padding3 === void 0) { - padding3 = 0; - } - var paddingArray = (0, import_util123.isArray)(padding3) ? padding3 : [padding3]; - switch (paddingArray.length) { - case 0: - paddingArray = [0, 0, 0, 0]; - break; - case 1: - paddingArray = new Array(4).fill(paddingArray[0]); - break; - case 2: - paddingArray = __spreadArray(__spreadArray([], paddingArray, true), paddingArray, true); - break; - case 3: - paddingArray = __spreadArray(__spreadArray([], paddingArray, true), [paddingArray[1]], false); - break; - default: - paddingArray = paddingArray.slice(0, 4); - break; - } - return paddingArray; -} - -// node_modules/@antv/g2/esm/chart/controller/index.js -var LOAD_COMPONENT_CONTROLLERS = {}; -function registerComponentController(name, plugin) { - LOAD_COMPONENT_CONTROLLERS[name] = plugin; -} -function getComponentControllerNames() { - return Object.keys(LOAD_COMPONENT_CONTROLLERS); -} -function getComponentController(name) { - return LOAD_COMPONENT_CONTROLLERS[name]; -} - -// node_modules/@antv/g2/esm/chart/controller/coordinate.js -var import_util124 = __toModule(require_lib()); -var CoordinateController = function() { - function CoordinateController2(option) { - this.option = this.wrapperOption(option); - } - CoordinateController2.prototype.update = function(option) { - this.option = this.wrapperOption(option); - return this; - }; - CoordinateController2.prototype.hasAction = function(actionName) { - var actions = this.option.actions; - return (0, import_util124.some)(actions, function(action) { - return action[0] === actionName; - }); - }; - CoordinateController2.prototype.create = function(start, end2) { - var _a6 = this.option, type2 = _a6.type, cfg = _a6.cfg; - var isTheta = type2 === "theta"; - var props = __assign({ start, end: end2 }, cfg); - var C3 = getCoordinate(isTheta ? "polar" : type2); - this.coordinate = new C3(props); - this.coordinate.type = type2; - if (isTheta) { - if (!this.hasAction("transpose")) { - this.transpose(); - } - } - this.execActions(); - return this.coordinate; - }; - CoordinateController2.prototype.adjust = function(start, end2) { - this.coordinate.update({ - start, - end: end2 - }); - this.coordinate.resetMatrix(); - this.execActions(["scale", "rotate", "translate"]); - return this.coordinate; - }; - CoordinateController2.prototype.rotate = function(angle3) { - this.option.actions.push(["rotate", angle3]); - return this; - }; - CoordinateController2.prototype.reflect = function(dim) { - this.option.actions.push(["reflect", dim]); - return this; - }; - CoordinateController2.prototype.scale = function(sx, sy) { - this.option.actions.push(["scale", sx, sy]); - return this; - }; - CoordinateController2.prototype.transpose = function() { - this.option.actions.push(["transpose"]); - return this; - }; - CoordinateController2.prototype.getOption = function() { - return this.option; - }; - CoordinateController2.prototype.getCoordinate = function() { - return this.coordinate; - }; - CoordinateController2.prototype.wrapperOption = function(option) { - return __assign({ type: "rect", actions: [], cfg: {} }, option); - }; - CoordinateController2.prototype.execActions = function(includeActions) { - var _this = this; - var actions = this.option.actions; - (0, import_util124.each)(actions, function(action) { - var _a6; - var actionName = action[0], args = action.slice(1); - var shouldExec = (0, import_util124.isNil)(includeActions) ? true : includeActions.includes(actionName); - if (shouldExec) { - (_a6 = _this.coordinate)[actionName].apply(_a6, args); - } - }); - }; - return CoordinateController2; -}(); -var coordinate_default = CoordinateController; - -// node_modules/@antv/g2/esm/chart/event.js -var Event = function() { - function Event2(view, gEvent, data3) { - this.view = view; - this.gEvent = gEvent; - this.data = data3; - this.type = gEvent.type; - } - Event2.fromData = function(view, type2, data3) { - return new Event2(view, new graph_event_default(type2, {}), data3); - }; - Object.defineProperty(Event2.prototype, "target", { - get: function() { - return this.gEvent.target; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Event2.prototype, "event", { - get: function() { - return this.gEvent.originalEvent; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Event2.prototype, "x", { - get: function() { - return this.gEvent.x; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Event2.prototype, "y", { - get: function() { - return this.gEvent.y; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Event2.prototype, "clientX", { - get: function() { - return this.gEvent.clientX; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Event2.prototype, "clientY", { - get: function() { - return this.gEvent.clientY; - }, - enumerable: false, - configurable: true - }); - Event2.prototype.toString = function() { - return "[Event (type=".concat(this.type, ")]"); - }; - Event2.prototype.clone = function() { - return new Event2(this.view, this.gEvent, this.data); - }; - return Event2; -}(); -var event_default = Event; - -// node_modules/@antv/g2/esm/chart/layout/index.js -function defaultLayout(view) { - var axis22 = view.getController("axis"); - var legend18 = view.getController("legend"); - var annotation4 = view.getController("annotation"); - var slider3 = view.getController("slider"); - var scrollbar2 = view.getController("scrollbar"); - [axis22, slider3, scrollbar2, legend18, annotation4].forEach(function(controller) { - if (controller) { - controller.layout(); - } - }); -} - -// node_modules/@antv/g2/esm/chart/util/scale-pool.js -var import_util125 = __toModule(require_lib()); -var ScalePool = function() { - function ScalePool2() { - this.scales = new Map(); - this.syncScales = new Map(); - } - ScalePool2.prototype.createScale = function(field6, data3, scaleDef, key) { - var finalScaleDef = scaleDef; - var cacheScaleMeta = this.getScaleMeta(key); - if (data3.length === 0 && cacheScaleMeta) { - var cacheScale = cacheScaleMeta.scale; - var cacheScaleDef = { - type: cacheScale.type - }; - if (cacheScale.isCategory) { - cacheScaleDef.values = cacheScale.values; - } - finalScaleDef = (0, import_util125.deepMix)(cacheScaleDef, cacheScaleMeta.scaleDef, scaleDef); - } - var scale12 = createScaleByField(field6, data3, finalScaleDef); - this.cacheScale(scale12, scaleDef, key); - return scale12; - }; - ScalePool2.prototype.sync = function(coordinate11, theme4) { - var _this = this; - this.syncScales.forEach(function(scaleKeys, syncKey) { - var min13 = Number.MAX_SAFE_INTEGER; - var max15 = Number.MIN_SAFE_INTEGER; - var values4 = []; - (0, import_util125.each)(scaleKeys, function(key) { - var scale12 = _this.getScale(key); - max15 = (0, import_util125.isNumber)(scale12.max) ? Math.max(max15, scale12.max) : max15; - min13 = (0, import_util125.isNumber)(scale12.min) ? Math.min(min13, scale12.min) : min13; - (0, import_util125.each)(scale12.values, function(v3) { - if (!values4.includes(v3)) { - values4.push(v3); - } - }); - }); - (0, import_util125.each)(scaleKeys, function(key) { - var scale12 = _this.getScale(key); - if (scale12.isContinuous) { - scale12.change({ - min: min13, - max: max15, - values: values4 - }); - } else if (scale12.isCategory) { - var range = scale12.range; - var cacheScaleMeta = _this.getScaleMeta(key); - if (values4 && !(0, import_util125.get)(cacheScaleMeta, ["scaleDef", "range"])) { - range = getDefaultCategoryScaleRange((0, import_util125.deepMix)({}, scale12, { - values: values4 - }), coordinate11, theme4); - } - scale12.change({ - values: values4, - range - }); - } - }); - }); - }; - ScalePool2.prototype.cacheScale = function(scale12, scaleDef, key) { - var sm = this.getScaleMeta(key); - if (sm && sm.scale.type === scale12.type) { - syncScale(sm.scale, scale12); - sm.scaleDef = scaleDef; - } else { - sm = { - key, - scale: scale12, - scaleDef - }; - this.scales.set(key, sm); - } - var syncKey = this.getSyncKey(sm); - sm.syncKey = syncKey; - this.removeFromSyncScales(key); - if (syncKey) { - var scaleKeys = this.syncScales.get(syncKey); - if (!scaleKeys) { - scaleKeys = []; - this.syncScales.set(syncKey, scaleKeys); - } - scaleKeys.push(key); - } - }; - ScalePool2.prototype.getScale = function(key) { - var scaleMeta = this.getScaleMeta(key); - if (!scaleMeta) { - var field6 = (0, import_util125.last)(key.split("-")); - var scaleKeys = this.syncScales.get(field6); - if (scaleKeys && scaleKeys.length) { - scaleMeta = this.getScaleMeta(scaleKeys[0]); - } - } - return scaleMeta && scaleMeta.scale; - }; - ScalePool2.prototype.deleteScale = function(key) { - var scaleMeta = this.getScaleMeta(key); - if (scaleMeta) { - var syncKey = scaleMeta.syncKey; - var scaleKeys = this.syncScales.get(syncKey); - if (scaleKeys && scaleKeys.length) { - var idx = scaleKeys.indexOf(key); - if (idx !== -1) { - scaleKeys.splice(idx, 1); - } - } - } - this.scales.delete(key); - }; - ScalePool2.prototype.clear = function() { - this.scales.clear(); - this.syncScales.clear(); - }; - ScalePool2.prototype.removeFromSyncScales = function(key) { - var _this = this; - this.syncScales.forEach(function(scaleKeys, syncKey) { - var idx = scaleKeys.indexOf(key); - if (idx !== -1) { - scaleKeys.splice(idx, 1); - if (scaleKeys.length === 0) { - _this.syncScales.delete(syncKey); - } - return false; - } - }); - }; - ScalePool2.prototype.getSyncKey = function(sm) { - var scale12 = sm.scale, scaleDef = sm.scaleDef; - var field6 = scale12.field; - var sync = (0, import_util125.get)(scaleDef, ["sync"]); - return sync === true ? field6 : sync === false ? void 0 : sync; - }; - ScalePool2.prototype.getScaleMeta = function(key) { - return this.scales.get(key); - }; - return ScalePool2; -}(); - -// node_modules/@antv/g2/esm/chart/layout/padding-cal.js -var PaddingCal = function() { - function PaddingCal2(top, right2, bottom, left2) { - if (top === void 0) { - top = 0; - } - if (right2 === void 0) { - right2 = 0; - } - if (bottom === void 0) { - bottom = 0; - } - if (left2 === void 0) { - left2 = 0; - } - this.top = top; - this.right = right2; - this.bottom = bottom; - this.left = left2; - } - PaddingCal2.instance = function(top, right2, bottom, left2) { - if (top === void 0) { - top = 0; - } - if (right2 === void 0) { - right2 = 0; - } - if (bottom === void 0) { - bottom = 0; - } - if (left2 === void 0) { - left2 = 0; - } - return new PaddingCal2(top, right2, bottom, left2); - }; - PaddingCal2.prototype.max = function(padding3) { - var top = padding3[0], right2 = padding3[1], bottom = padding3[2], left2 = padding3[3]; - this.top = Math.max(this.top, top); - this.right = Math.max(this.right, right2); - this.bottom = Math.max(this.bottom, bottom); - this.left = Math.max(this.left, left2); - return this; - }; - PaddingCal2.prototype.shrink = function(padding3) { - var top = padding3[0], right2 = padding3[1], bottom = padding3[2], left2 = padding3[3]; - this.top += top; - this.right += right2; - this.bottom += bottom; - this.left += left2; - return this; - }; - PaddingCal2.prototype.inc = function(bbox, direction3) { - var width2 = bbox.width, height = bbox.height; - switch (direction3) { - case DIRECTION.TOP: - case DIRECTION.TOP_LEFT: - case DIRECTION.TOP_RIGHT: - this.top += height; - break; - case DIRECTION.RIGHT: - case DIRECTION.RIGHT_TOP: - case DIRECTION.RIGHT_BOTTOM: - this.right += width2; - break; - case DIRECTION.BOTTOM: - case DIRECTION.BOTTOM_LEFT: - case DIRECTION.BOTTOM_RIGHT: - this.bottom += height; - break; - case DIRECTION.LEFT: - case DIRECTION.LEFT_TOP: - case DIRECTION.LEFT_BOTTOM: - this.left += width2; - break; - default: - break; - } - return this; - }; - PaddingCal2.prototype.getPadding = function() { - return [this.top, this.right, this.bottom, this.left]; - }; - PaddingCal2.prototype.clone = function() { - return new (PaddingCal2.bind.apply(PaddingCal2, __spreadArray([void 0], this.getPadding(), false)))(); - }; - return PaddingCal2; -}(); - -// node_modules/@antv/g2/esm/chart/layout/auto.js -var import_util126 = __toModule(require_lib()); -function calculatePadding(view) { - var padding3 = view.padding; - if (!isAutoPadding(padding3)) { - return new (PaddingCal.bind.apply(PaddingCal, __spreadArray([void 0], parsePadding(padding3), false)))(); - } - var viewBBox = view.viewBBox; - var paddingCal = new PaddingCal(); - var axisComponents = []; - var paddingComponents = []; - var otherComponents = []; - (0, import_util126.each)(view.getComponents(), function(co) { - var type2 = co.type; - if (type2 === COMPONENT_TYPE.AXIS) { - axisComponents.push(co); - } else if ([COMPONENT_TYPE.LEGEND, COMPONENT_TYPE.SLIDER, COMPONENT_TYPE.SCROLLBAR].includes(type2)) { - paddingComponents.push(co); - } else if (type2 !== COMPONENT_TYPE.GRID && type2 !== COMPONENT_TYPE.TOOLTIP) { - otherComponents.push(co); - } - }); - (0, import_util126.each)(axisComponents, function(co) { - var component2 = co.component; - var bboxObject = component2.getLayoutBBox(); - var componentBBox = new BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height); - var exceed = componentBBox.exceed(viewBBox); - paddingCal.max(exceed); - }); - (0, import_util126.each)(paddingComponents, function(co) { - var component2 = co.component, direction3 = co.direction; - var bboxObject = component2.getLayoutBBox(); - var componentPadding = component2.get("padding"); - var componentBBox = new BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height).expand(componentPadding); - paddingCal.inc(componentBBox, direction3); - }); - (0, import_util126.each)(otherComponents, function(co) { - var component2 = co.component, direction3 = co.direction; - var bboxObject = component2.getLayoutBBox(); - var componentBBox = new BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height); - paddingCal.inc(componentBBox, direction3); - }); - return paddingCal; -} - -// node_modules/@antv/g2/esm/chart/util/sync-view-padding.js -function defaultSyncViewPadding(chart, views, PC) { - var syncPadding = PC.instance(); - views.forEach(function(v3) { - v3.autoPadding = syncPadding.max(v3.autoPadding.getPadding()); - }); -} - -// node_modules/@antv/g2/esm/chart/view.js -var View = function(_super) { - __extends(View3, _super); - function View3(props) { - var _this = _super.call(this, { visible: props.visible }) || this; - _this.views = []; - _this.geometries = []; - _this.controllers = []; - _this.interactions = {}; - _this.limitInPlot = false; - _this.options = { - data: [], - animate: true - }; - _this.usedControllers = getComponentControllerNames(); - _this.scalePool = new ScalePool(); - _this.layoutFunc = defaultLayout; - _this.isPreMouseInPlot = false; - _this.isDataChanged = false; - _this.isCoordinateChanged = false; - _this.createdScaleKeys = new Map(); - _this.onCanvasEvent = function(evt) { - var name = evt.name; - if (!name.includes(":")) { - var e4 = _this.createViewEvent(evt); - _this.doPlotEvent(e4); - _this.emit(name, e4); - } - }; - _this.onDelegateEvents = function(evt) { - var name = evt.name; - if (!name.includes(":")) { - return; - } - var e4 = _this.createViewEvent(evt); - _this.emit(name, e4); - }; - var _a6 = props.id, id = _a6 === void 0 ? (0, import_util127.uniqueId)("view") : _a6, parent = props.parent, canvas = props.canvas, backgroundGroup = props.backgroundGroup, middleGroup = props.middleGroup, foregroundGroup = props.foregroundGroup, _b = props.region, region = _b === void 0 ? { start: { x: 0, y: 0 }, end: { x: 1, y: 1 } } : _b, padding3 = props.padding, appendPadding = props.appendPadding, theme4 = props.theme, options = props.options, limitInPlot5 = props.limitInPlot, syncViewPadding2 = props.syncViewPadding; - _this.parent = parent; - _this.canvas = canvas; - _this.backgroundGroup = backgroundGroup; - _this.middleGroup = middleGroup; - _this.foregroundGroup = foregroundGroup; - _this.region = region; - _this.padding = padding3; - _this.appendPadding = appendPadding; - _this.options = __assign(__assign({}, _this.options), options); - _this.limitInPlot = limitInPlot5; - _this.id = id; - _this.syncViewPadding = syncViewPadding2; - _this.themeObject = (0, import_util127.isObject)(theme4) ? (0, import_util127.deepMix)({}, getTheme("default"), createTheme(theme4)) : getTheme(theme4); - _this.init(); - return _this; - } - View3.prototype.setLayout = function(layout6) { - this.layoutFunc = layout6; - }; - View3.prototype.init = function() { - this.calculateViewBBox(); - this.initEvents(); - this.initComponentController(); - this.initOptions(); - }; - View3.prototype.render = function(isUpdate, payload) { - if (isUpdate === void 0) { - isUpdate = false; - } - this.emit(VIEW_LIFE_CIRCLE.BEFORE_RENDER, event_default.fromData(this, VIEW_LIFE_CIRCLE.BEFORE_RENDER, payload)); - this.paint(isUpdate); - this.emit(VIEW_LIFE_CIRCLE.AFTER_RENDER, event_default.fromData(this, VIEW_LIFE_CIRCLE.AFTER_RENDER, payload)); - if (this.visible === false) { - this.changeVisible(false); - } - }; - View3.prototype.clear = function() { - var _this = this; - this.emit(VIEW_LIFE_CIRCLE.BEFORE_CLEAR); - this.filteredData = []; - this.coordinateInstance = void 0; - this.isDataChanged = false; - this.isCoordinateChanged = false; - var geometries = this.geometries; - for (var i4 = 0; i4 < geometries.length; i4++) { - geometries[i4].clear(); - geometries[i4].container.remove(true); - geometries[i4].labelsContainer.remove(true); - } - this.geometries = []; - var controllers = this.controllers; - for (var i4 = 0; i4 < controllers.length; i4++) { - if (controllers[i4].name === "annotation") { - controllers[i4].clear(true); - } else { - controllers[i4].clear(); - } - } - this.createdScaleKeys.forEach(function(v3, k4) { - _this.getRootView().scalePool.deleteScale(k4); - }); - this.createdScaleKeys.clear(); - var views = this.views; - for (var i4 = 0; i4 < views.length; i4++) { - views[i4].clear(); - } - this.emit(VIEW_LIFE_CIRCLE.AFTER_CLEAR); - }; - View3.prototype.destroy = function() { - this.emit(VIEW_LIFE_CIRCLE.BEFORE_DESTROY); - var interactions = this.interactions; - (0, import_util127.each)(interactions, function(interaction8) { - if (interaction8) { - interaction8.destroy(); - } - }); - this.clear(); - var controllers = this.controllers; - for (var i4 = 0, len5 = controllers.length; i4 < len5; i4++) { - var controller = controllers[i4]; - controller.destroy(); - } - this.backgroundGroup.remove(true); - this.middleGroup.remove(true); - this.foregroundGroup.remove(true); - _super.prototype.destroy.call(this); - }; - View3.prototype.changeVisible = function(visible) { - _super.prototype.changeVisible.call(this, visible); - var geometries = this.geometries; - for (var i4 = 0, len5 = geometries.length; i4 < len5; i4++) { - var geometry35 = geometries[i4]; - geometry35.changeVisible(visible); - } - var controllers = this.controllers; - for (var i4 = 0, len5 = controllers.length; i4 < len5; i4++) { - var controller = controllers[i4]; - controller.changeVisible(visible); - } - this.foregroundGroup.set("visible", visible); - this.middleGroup.set("visible", visible); - this.backgroundGroup.set("visible", visible); - this.getCanvas().draw(); - return this; - }; - View3.prototype.data = function(data3) { - (0, import_util127.set)(this.options, "data", data3); - this.isDataChanged = true; - return this; - }; - View3.prototype.source = function(data3) { - console.warn("This method will be removed at G2 V4.1. Please use chart.data() instead."); - return this.data(data3); - }; - View3.prototype.filter = function(field6, condition) { - if ((0, import_util127.isFunction)(condition)) { - (0, import_util127.set)(this.options, ["filters", field6], condition); - return this; - } - if (!condition && (0, import_util127.get)(this.options, ["filters", field6])) { - delete this.options.filters[field6]; - } - return this; - }; - View3.prototype.axis = function(field6, axisOption) { - if ((0, import_util127.isBoolean)(field6)) { - (0, import_util127.set)(this.options, ["axes"], field6); - } else { - (0, import_util127.set)(this.options, ["axes", field6], axisOption); - } - return this; - }; - View3.prototype.legend = function(field6, legendOption) { - if ((0, import_util127.isBoolean)(field6)) { - (0, import_util127.set)(this.options, ["legends"], field6); - } else if ((0, import_util127.isString)(field6)) { - (0, import_util127.set)(this.options, ["legends", field6], legendOption); - if ((0, import_util127.isPlainObject)(legendOption) && (legendOption === null || legendOption === void 0 ? void 0 : legendOption.selected)) { - (0, import_util127.set)(this.options, ["filters", field6], function(name) { - var _a6; - return (_a6 = legendOption === null || legendOption === void 0 ? void 0 : legendOption.selected[name]) !== null && _a6 !== void 0 ? _a6 : true; - }); - } - } else { - (0, import_util127.set)(this.options, ["legends"], field6); - } - return this; - }; - View3.prototype.scale = function(field6, scaleOption) { - var _this = this; - if ((0, import_util127.isString)(field6)) { - (0, import_util127.set)(this.options, ["scales", field6], scaleOption); - } else if ((0, import_util127.isObject)(field6)) { - (0, import_util127.each)(field6, function(v3, k4) { - (0, import_util127.set)(_this.options, ["scales", k4], v3); - }); - } - return this; - }; - View3.prototype.tooltip = function(cfg) { - (0, import_util127.set)(this.options, "tooltip", cfg); - return this; - }; - View3.prototype.annotation = function() { - return this.getController("annotation"); - }; - View3.prototype.guide = function() { - console.warn("This method will be removed at G2 V4.1. Please use chart.annotation() instead."); - return this.annotation(); - }; - View3.prototype.coordinate = function(type2, coordinateCfg) { - if ((0, import_util127.isString)(type2)) { - (0, import_util127.set)(this.options, "coordinate", { type: type2, cfg: coordinateCfg }); - } else { - (0, import_util127.set)(this.options, "coordinate", type2); - } - this.coordinateController.update(this.options.coordinate); - return this.coordinateController; - }; - View3.prototype.coord = function(type2, coordinateCfg) { - console.warn("This method will be removed at G2 V4.1. Please use chart.coordinate() instead."); - return this.coordinate(type2, coordinateCfg); - }; - View3.prototype.facet = function(type2, cfg) { - if (this.facetInstance) { - this.facetInstance.destroy(); - } - var Ctor = getFacet(type2); - if (!Ctor) { - throw new Error("facet '".concat(type2, "' is not exist!")); - } - this.facetInstance = new Ctor(this, __assign(__assign({}, cfg), { type: type2 })); - return this; - }; - View3.prototype.animate = function(status) { - (0, import_util127.set)(this.options, "animate", status); - return this; - }; - View3.prototype.updateOptions = function(options) { - this.clear(); - (0, import_util127.mix)(this.options, options); - this.views.forEach(function(view) { - return view.destroy(); - }); - this.views = []; - this.initOptions(); - this.coordinateBBox = this.viewBBox; - return this; - }; - View3.prototype.option = function(name, opt) { - if (View3.prototype[name]) { - throw new Error(`Can't use built in variable name "`.concat(name, '", please change another one.')); - } - (0, import_util127.set)(this.options, name, opt); - return this; - }; - View3.prototype.theme = function(theme4) { - this.themeObject = (0, import_util127.isObject)(theme4) ? (0, import_util127.deepMix)({}, this.themeObject, createTheme(theme4)) : getTheme(theme4); - return this; - }; - View3.prototype.interaction = function(name, cfg) { - var existInteraction = this.interactions[name]; - if (existInteraction) { - existInteraction.destroy(); - } - var interaction8 = createInteraction(name, this, cfg); - if (interaction8) { - interaction8.init(); - this.interactions[name] = interaction8; - } - return this; - }; - View3.prototype.removeInteraction = function(name) { - var existInteraction = this.interactions[name]; - if (existInteraction) { - existInteraction.destroy(); - this.interactions[name] = void 0; - } - }; - View3.prototype.changeData = function(data3) { - this.isDataChanged = true; - this.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, event_default.fromData(this, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null)); - this.data(data3); - this.paint(true); - var views = this.views; - for (var i4 = 0, len5 = views.length; i4 < len5; i4++) { - var view = views[i4]; - view.changeData(data3); - } - this.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, event_default.fromData(this, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null)); - }; - View3.prototype.createView = function(cfg) { - if (this.parent && this.parent.parent) { - console.warn("The view nesting recursive feature will be removed at G2 V4.1. Please avoid to use it."); - } - var sharedOptions = { - data: this.options.data, - scales: (0, import_util127.clone)(this.options.scales), - axes: (0, import_util127.clone)(this.options.axes), - coordinate: (0, import_util127.clone)(this.coordinateController.getOption()), - tooltip: (0, import_util127.clone)(this.options.tooltip), - legends: (0, import_util127.clone)(this.options.legends), - animate: this.options.animate, - visible: this.visible - }; - var v3 = new View3(__assign(__assign({ - parent: this, - canvas: this.canvas, - backgroundGroup: this.backgroundGroup.addGroup({ zIndex: GROUP_Z_INDEX.BG }), - middleGroup: this.middleGroup.addGroup({ zIndex: GROUP_Z_INDEX.MID }), - foregroundGroup: this.foregroundGroup.addGroup({ zIndex: GROUP_Z_INDEX.FORE }), - theme: this.themeObject, - padding: this.padding - }, cfg), { options: __assign(__assign({}, sharedOptions), (0, import_util127.get)(cfg, "options", {})) })); - this.views.push(v3); - return v3; - }; - View3.prototype.view = function(cfg) { - console.warn("This method will be removed at G2 V4.1. Please use chart.createView() instead."); - return this.createView(cfg); - }; - View3.prototype.removeView = function(view) { - var removedView = (0, import_util127.remove)(this.views, function(v3) { - return v3 === view; - })[0]; - if (removedView) { - removedView.destroy(); - } - return removedView; - }; - View3.prototype.getCoordinate = function() { - return this.coordinateInstance; - }; - View3.prototype.getTheme = function() { - return this.themeObject; - }; - View3.prototype.getXScale = function() { - var g4 = this.geometries[0]; - return g4 ? g4.getXScale() : null; - }; - View3.prototype.getYScales = function() { - var tmpMap = {}; - var yScales = []; - this.geometries.forEach(function(g4) { - var yScale = g4.getYScale(); - var field6 = yScale.field; - if (!tmpMap[field6]) { - tmpMap[field6] = true; - yScales.push(yScale); - } - }); - return yScales; - }; - View3.prototype.getScalesByDim = function(dimType) { - var geometries = this.geometries; - var scales = {}; - for (var i4 = 0, len5 = geometries.length; i4 < len5; i4++) { - var geometry35 = geometries[i4]; - var scale12 = dimType === "x" ? geometry35.getXScale() : geometry35.getYScale(); - if (scale12 && !scales[scale12.field]) { - scales[scale12.field] = scale12; - } - } - return scales; - }; - View3.prototype.getScale = function(field6, key) { - var defaultKey = key ? key : this.getScaleKey(field6); - return this.getRootView().scalePool.getScale(defaultKey); - }; - View3.prototype.getScaleByField = function(field6, key) { - return this.getScale(field6, key); - }; - View3.prototype.getOptions = function() { - return this.options; - }; - View3.prototype.getData = function() { - return this.filteredData; - }; - View3.prototype.getOriginalData = function() { - return this.options.data; - }; - View3.prototype.getPadding = function() { - return this.autoPadding.getPadding(); - }; - View3.prototype.getGeometries = function() { - return this.geometries; - }; - View3.prototype.getElements = function() { - return (0, import_util127.reduce)(this.geometries, function(elements, geometry35) { - return elements.concat(geometry35.getElements()); - }, []); - }; - View3.prototype.getElementsBy = function(condition) { - return this.getElements().filter(function(el) { - return condition(el); - }); - }; - View3.prototype.getLayer = function(layer) { - return layer === LAYER.BG ? this.backgroundGroup : layer === LAYER.MID ? this.middleGroup : layer === LAYER.FORE ? this.foregroundGroup : this.foregroundGroup; - }; - View3.prototype.isPointInPlot = function(point2) { - return isPointInCoordinate(this.getCoordinate(), point2); - }; - View3.prototype.getLegendAttributes = function() { - return (0, import_util127.flatten)(this.geometries.map(function(g4) { - return g4.getGroupAttributes(); - })); - }; - View3.prototype.getGroupScales = function() { - var scales = this.geometries.map(function(g4) { - return g4.getGroupScales(); - }); - return uniq((0, import_util127.flatten)(scales)); - }; - View3.prototype.getCanvas = function() { - return this.getRootView().canvas; - }; - View3.prototype.getRootView = function() { - var v3 = this; - while (true) { - if (v3.parent) { - v3 = v3.parent; - continue; - } - break; - } - return v3; - }; - View3.prototype.getXY = function(data3) { - var coordinate11 = this.getCoordinate(); - var xScales = this.getScalesByDim("x"); - var yScales = this.getScalesByDim("y"); - var x6; - var y5; - (0, import_util127.each)(data3, function(value2, key) { - if (xScales[key]) { - x6 = xScales[key].scale(value2); - } - if (yScales[key]) { - y5 = yScales[key].scale(value2); - } - }); - if (!(0, import_util127.isNil)(x6) && !(0, import_util127.isNil)(y5)) { - return coordinate11.convert({ x: x6, y: y5 }); - } - }; - View3.prototype.getController = function(name) { - return (0, import_util127.find)(this.controllers, function(c5) { - return c5.name === name; - }); - }; - View3.prototype.showTooltip = function(point2) { - var tooltip10 = this.getController("tooltip"); - if (tooltip10) { - tooltip10.showTooltip(point2); - } - return this; - }; - View3.prototype.hideTooltip = function() { - var tooltip10 = this.getController("tooltip"); - if (tooltip10) { - tooltip10.hideTooltip(); - } - return this; - }; - View3.prototype.lockTooltip = function() { - var tooltip10 = this.getController("tooltip"); - if (tooltip10) { - tooltip10.lockTooltip(); - } - return this; - }; - View3.prototype.unlockTooltip = function() { - var tooltip10 = this.getController("tooltip"); - if (tooltip10) { - tooltip10.unlockTooltip(); - } - return this; - }; - View3.prototype.isTooltipLocked = function() { - var tooltip10 = this.getController("tooltip"); - return tooltip10 && tooltip10.isTooltipLocked(); - }; - View3.prototype.getTooltipItems = function(point2) { - var tooltip10 = this.getController("tooltip"); - return tooltip10 ? tooltip10.getTooltipItems(point2) : []; - }; - View3.prototype.getSnapRecords = function(point2) { - var geometries = this.geometries; - var rst = []; - for (var i4 = 0, len5 = geometries.length; i4 < len5; i4++) { - var geom = geometries[i4]; - var dataArray = geom.dataArray; - geom.sort(dataArray); - var record = void 0; - for (var j4 = 0, dataLen = dataArray.length; j4 < dataLen; j4++) { - var data3 = dataArray[j4]; - record = findDataByPoint(point2, data3, geom); - if (record) { - rst.push(record); - } - } - } - var views = this.views; - for (var i4 = 0, len5 = views.length; i4 < len5; i4++) { - var view = views[i4]; - var snapRecords = view.getSnapRecords(point2); - rst = rst.concat(snapRecords); - } - return rst; - }; - View3.prototype.getComponents = function() { - var components = []; - var controllers = this.controllers; - for (var i4 = 0, len5 = controllers.length; i4 < len5; i4++) { - var controller = controllers[i4]; - components = components.concat(controller.getComponents()); - } - return components; - }; - View3.prototype.filterData = function(data3) { - var filters = this.options.filters; - if ((0, import_util127.size)(filters) === 0) { - return data3; - } - return (0, import_util127.filter)(data3, function(datum, idx) { - var fields = Object.keys(filters); - return fields.every(function(field6) { - var condition = filters[field6]; - return condition(datum[field6], datum, idx); - }); - }); - }; - View3.prototype.filterFieldData = function(field6, data3) { - var filters = this.options.filters; - var condition = (0, import_util127.get)(filters, field6); - if ((0, import_util127.isUndefined)(condition)) { - return data3; - } - return data3.filter(function(datum, idx) { - return condition(datum[field6], datum, idx); - }); - }; - View3.prototype.adjustCoordinate = function() { - var _a6 = this.getCoordinate(), curStart = _a6.start, curEnd = _a6.end; - var start = this.coordinateBBox.bl; - var end2 = this.coordinateBBox.tr; - if ((0, import_util127.isEqual)(curStart, start) && (0, import_util127.isEqual)(curEnd, end2)) { - this.isCoordinateChanged = false; - return; - } - this.isCoordinateChanged = true; - this.coordinateInstance = this.coordinateController.adjust(start, end2); - }; - View3.prototype.paint = function(isUpdate) { - this.renderDataRecursive(isUpdate); - this.syncScale(); - this.emit(VIEW_LIFE_CIRCLE.BEFORE_PAINT); - this.renderPaddingRecursive(isUpdate); - this.renderLayoutRecursive(isUpdate); - this.renderBackgroundStyleShape(); - this.renderPaintRecursive(isUpdate); - this.emit(VIEW_LIFE_CIRCLE.AFTER_PAINT); - this.isDataChanged = false; - }; - View3.prototype.renderBackgroundStyleShape = function() { - if (this.parent) { - return; - } - var background = (0, import_util127.get)(this.themeObject, "background"); - if (background) { - if (!this.backgroundStyleRectShape) { - this.backgroundStyleRectShape = this.backgroundGroup.addShape("rect", { - attrs: {}, - zIndex: -1, - capture: false - }); - this.backgroundStyleRectShape.toBack(); - } - var _a6 = this.viewBBox, x6 = _a6.x, y5 = _a6.y, width2 = _a6.width, height = _a6.height; - this.backgroundStyleRectShape.attr({ - fill: background, - x: x6, - y: y5, - width: width2, - height - }); - } else { - if (this.backgroundStyleRectShape) { - this.backgroundStyleRectShape.remove(true); - this.backgroundStyleRectShape = void 0; - } - } - }; - View3.prototype.renderPaddingRecursive = function(isUpdate) { - this.calculateViewBBox(); - this.adjustCoordinate(); - this.initComponents(isUpdate); - this.autoPadding = calculatePadding(this).shrink(parsePadding(this.appendPadding)); - this.coordinateBBox = this.viewBBox.shrink(this.autoPadding.getPadding()); - this.adjustCoordinate(); - var views = this.views; - for (var i4 = 0, len5 = views.length; i4 < len5; i4++) { - var view = views[i4]; - view.renderPaddingRecursive(isUpdate); - } - }; - View3.prototype.renderLayoutRecursive = function(isUpdate) { - var syncViewPaddingFn = this.syncViewPadding === true ? defaultSyncViewPadding : (0, import_util127.isFunction)(this.syncViewPadding) ? this.syncViewPadding : void 0; - if (syncViewPaddingFn) { - syncViewPaddingFn(this, this.views, PaddingCal); - this.views.forEach(function(v3) { - v3.coordinateBBox = v3.viewBBox.shrink(v3.autoPadding.getPadding()); - v3.adjustCoordinate(); - }); - } - this.doLayout(); - var views = this.views; - for (var i4 = 0, len5 = views.length; i4 < len5; i4++) { - var view = views[i4]; - view.renderLayoutRecursive(isUpdate); - } - }; - View3.prototype.renderPaintRecursive = function(isUpdate) { - var middleGroup = this.middleGroup; - if (this.limitInPlot) { - var _a6 = getCoordinateClipCfg(this.coordinateInstance), type2 = _a6.type, attrs = _a6.attrs; - middleGroup.setClip({ - type: type2, - attrs - }); - } else { - middleGroup.setClip(void 0); - } - this.paintGeometries(isUpdate); - this.renderComponents(isUpdate); - var views = this.views; - for (var i4 = 0, len5 = views.length; i4 < len5; i4++) { - var view = views[i4]; - view.renderPaintRecursive(isUpdate); - } - }; - View3.prototype.createScale = function(field6, data3, scaleDef, key) { - var currentScaleDef = (0, import_util127.get)(this.options.scales, [field6]); - var mergedScaleDef = __assign(__assign({}, currentScaleDef), scaleDef); - if (this.parent) { - return this.parent.createScale(field6, data3, mergedScaleDef, key); - } - return this.scalePool.createScale(field6, data3, mergedScaleDef, key); - }; - View3.prototype.renderDataRecursive = function(isUpdate) { - this.doFilterData(); - this.createCoordinate(); - this.initGeometries(isUpdate); - this.renderFacet(isUpdate); - var views = this.views; - for (var i4 = 0, len5 = views.length; i4 < len5; i4++) { - var view = views[i4]; - view.renderDataRecursive(isUpdate); - } - }; - View3.prototype.calculateViewBBox = function() { - var x6; - var y5; - var width2; - var height; - if (this.parent) { - var bbox = this.parent.coordinateBBox; - x6 = bbox.x; - y5 = bbox.y; - width2 = bbox.width; - height = bbox.height; - } else { - x6 = 0; - y5 = 0; - width2 = this.canvas.get("width"); - height = this.canvas.get("height"); - } - var _a6 = this.region, start = _a6.start, end2 = _a6.end; - var viewBBox = new BBox(x6 + width2 * start.x, y5 + height * start.y, width2 * (end2.x - start.x), height * (end2.y - start.y)); - if (!this.viewBBox || !this.viewBBox.isEqual(viewBBox)) { - this.viewBBox = new BBox(x6 + width2 * start.x, y5 + height * start.y, width2 * (end2.x - start.x), height * (end2.y - start.y)); - } - this.coordinateBBox = this.viewBBox; - }; - View3.prototype.initEvents = function() { - this.foregroundGroup.on("*", this.onDelegateEvents); - this.middleGroup.on("*", this.onDelegateEvents); - this.backgroundGroup.on("*", this.onDelegateEvents); - this.canvas.on("*", this.onCanvasEvent); - }; - View3.prototype.initComponentController = function() { - var usedControllers = this.usedControllers; - for (var i4 = 0, len5 = usedControllers.length; i4 < len5; i4++) { - var controllerName = usedControllers[i4]; - var Ctor = getComponentController(controllerName); - if (Ctor) { - this.controllers.push(new Ctor(this)); - } - } - }; - View3.prototype.createViewEvent = function(evt) { - var shape = evt.shape, name = evt.name; - var data3 = shape ? shape.get("origin") : null; - var e4 = new event_default(this, evt, data3); - e4.type = name; - return e4; - }; - View3.prototype.doPlotEvent = function(e4) { - var type2 = e4.type, x6 = e4.x, y5 = e4.y; - var point2 = { x: x6, y: y5 }; - var ALL_EVENTS = [ - "mousedown", - "mouseup", - "mousemove", - "mouseleave", - "mousewheel", - "touchstart", - "touchmove", - "touchend", - "touchcancel", - "click", - "dblclick", - "contextmenu" - ]; - if (ALL_EVENTS.includes(type2)) { - var currentInPlot = this.isPointInPlot(point2); - var newEvent = e4.clone(); - if (currentInPlot) { - var TYPE = "plot:".concat(type2); - newEvent.type = TYPE; - this.emit(TYPE, newEvent); - if (type2 === "mouseleave" || type2 === "touchend") { - this.isPreMouseInPlot = false; - } - } - if (type2 === "mousemove" || type2 === "touchmove") { - if (this.isPreMouseInPlot && !currentInPlot) { - if (type2 === "mousemove") { - newEvent.type = PLOT_EVENTS.MOUSE_LEAVE; - this.emit(PLOT_EVENTS.MOUSE_LEAVE, newEvent); - } - newEvent.type = PLOT_EVENTS.LEAVE; - this.emit(PLOT_EVENTS.LEAVE, newEvent); - } else if (!this.isPreMouseInPlot && currentInPlot) { - if (type2 === "mousemove") { - newEvent.type = PLOT_EVENTS.MOUSE_ENTER; - this.emit(PLOT_EVENTS.MOUSE_ENTER, newEvent); - } - newEvent.type = PLOT_EVENTS.ENTER; - this.emit(PLOT_EVENTS.ENTER, newEvent); - } - this.isPreMouseInPlot = currentInPlot; - } else if (type2 === "mouseleave" || type2 === "touchend") { - if (this.isPreMouseInPlot) { - if (type2 === "mouseleave") { - newEvent.type = PLOT_EVENTS.MOUSE_LEAVE; - this.emit(PLOT_EVENTS.MOUSE_LEAVE, newEvent); - } - newEvent.type = PLOT_EVENTS.LEAVE; - this.emit(PLOT_EVENTS.LEAVE, newEvent); - this.isPreMouseInPlot = false; - } - } - } - }; - View3.prototype.doFilterData = function() { - var data3 = this.options.data; - this.filteredData = this.filterData(data3); - }; - View3.prototype.initGeometries = function(isUpdate) { - this.createOrUpdateScales(); - var coordinate11 = this.getCoordinate(); - var scaleDefs = (0, import_util127.get)(this.options, "scales", {}); - var geometries = this.geometries; - for (var i4 = 0, len5 = geometries.length; i4 < len5; i4++) { - var geometry35 = geometries[i4]; - geometry35.scales = this.getGeometryScales(); - var cfg = { - coordinate: coordinate11, - scaleDefs, - data: this.filteredData, - theme: this.themeObject, - isDataChanged: this.isDataChanged, - isCoordinateChanged: this.isCoordinateChanged - }; - if (isUpdate) { - geometry35.update(cfg); - } else { - geometry35.init(cfg); - } - } - this.adjustScales(); - }; - View3.prototype.createOrUpdateScales = function() { - var fields = this.getScaleFields(); - var groupedFields = this.getGroupedFields(); - var _a6 = this.getOptions(), data3 = _a6.data, _b = _a6.scales, scales = _b === void 0 ? {} : _b; - var filteredData = this.filteredData; - for (var i4 = 0, len5 = fields.length; i4 < len5; i4++) { - var field6 = fields[i4]; - var scaleDef = scales[field6]; - var key = this.getScaleKey(field6); - this.createScale(field6, groupedFields.includes(field6) ? data3 : filteredData, scaleDef, key); - this.createdScaleKeys.set(key, true); - } - }; - View3.prototype.syncScale = function() { - this.getRootView().scalePool.sync(this.getCoordinate(), this.theme); - }; - View3.prototype.getGeometryScales = function() { - var fields = this.getScaleFields(); - var scales = {}; - for (var i4 = 0; i4 < fields.length; i4++) { - var field6 = fields[i4]; - scales[field6] = this.getScaleByField(field6); - } - return scales; - }; - View3.prototype.getScaleFields = function() { - var fields = []; - var tmpMap = new Map(); - var geometries = this.geometries; - for (var i4 = 0; i4 < geometries.length; i4++) { - var geometry35 = geometries[i4]; - var geometryScales = geometry35.getScaleFields(); - uniq(geometryScales, fields, tmpMap); - } - return fields; - }; - View3.prototype.getGroupedFields = function() { - var fields = []; - var tmpMap = new Map(); - var geometries = this.geometries; - for (var i4 = 0; i4 < geometries.length; i4++) { - var geometry35 = geometries[i4]; - var groupFields = geometry35.getGroupFields(); - uniq(groupFields, fields, tmpMap); - } - return fields; - }; - View3.prototype.adjustScales = function() { - this.adjustCategoryScaleRange(); - }; - View3.prototype.adjustCategoryScaleRange = function() { - var _this = this; - var xyScales = __spreadArray([this.getXScale()], this.getYScales(), true).filter(function(e4) { - return !!e4; - }); - var coordinate11 = this.getCoordinate(); - var scaleOptions = this.options.scales; - (0, import_util127.each)(xyScales, function(scale12) { - var field6 = scale12.field, values4 = scale12.values, isCategory = scale12.isCategory, isIdentity = scale12.isIdentity; - if (isCategory || isIdentity) { - if (values4 && !(0, import_util127.get)(scaleOptions, [field6, "range"])) { - scale12.range = getDefaultCategoryScaleRange(scale12, coordinate11, _this.theme); - } - } - }); - }; - View3.prototype.initComponents = function(isUpdate) { - var controllers = this.controllers; - for (var i4 = 0; i4 < controllers.length; i4++) { - var controller = controllers[i4]; - if (isUpdate) { - controller.update(); - } else { - controller.clear(); - controller.render(); - } - } - }; - View3.prototype.doLayout = function() { - this.layoutFunc(this); - }; - View3.prototype.createCoordinate = function() { - var start = this.coordinateBBox.bl; - var end2 = this.coordinateBBox.tr; - this.coordinateInstance = this.coordinateController.create(start, end2); - }; - View3.prototype.paintGeometries = function(isUpdate) { - var doAnimation = this.options.animate; - var coordinate11 = this.getCoordinate(); - var canvasRegion = { - x: this.viewBBox.x, - y: this.viewBBox.y, - minX: this.viewBBox.minX, - minY: this.viewBBox.minY, - maxX: this.viewBBox.maxX, - maxY: this.viewBBox.maxY, - width: this.viewBBox.width, - height: this.viewBBox.height - }; - var geometries = this.geometries; - for (var i4 = 0; i4 < geometries.length; i4++) { - var geometry35 = geometries[i4]; - geometry35.coordinate = coordinate11; - geometry35.canvasRegion = canvasRegion; - if (!doAnimation) { - geometry35.animate(false); - } - geometry35.paint(isUpdate); - } - }; - View3.prototype.renderComponents = function(isUpdate) { - for (var i4 = 0; i4 < this.getComponents().length; i4++) { - var co = this.getComponents()[i4]; - co.component.render(); - } - }; - View3.prototype.renderFacet = function(isUpdate) { - if (this.facetInstance) { - if (isUpdate) { - this.facetInstance.update(); - } else { - this.facetInstance.clear(); - this.facetInstance.init(); - this.facetInstance.render(); - } - } - }; - View3.prototype.initOptions = function() { - var _this = this; - var _a6 = this.options, _b = _a6.geometries, geometries = _b === void 0 ? [] : _b, _c = _a6.interactions, interactions = _c === void 0 ? [] : _c, _d = _a6.views, views = _d === void 0 ? [] : _d, _e = _a6.annotations, annotations = _e === void 0 ? [] : _e, coordinate11 = _a6.coordinate, events = _a6.events, facets = _a6.facets; - if (this.coordinateController) { - coordinate11 && this.coordinateController.update(coordinate11); - } else { - this.coordinateController = new coordinate_default(coordinate11); - } - for (var i4 = 0; i4 < geometries.length; i4++) { - var geometryOption = geometries[i4]; - this.createGeometry(geometryOption); - } - for (var j4 = 0; j4 < interactions.length; j4++) { - var interactionOption = interactions[j4]; - var type2 = interactionOption.type, cfg = interactionOption.cfg; - this.interaction(type2, cfg); - } - for (var k4 = 0; k4 < views.length; k4++) { - var viewOption = views[k4]; - this.createView(viewOption); - } - var annotationComponent = this.getController("annotation"); - for (var l4 = 0; l4 < annotations.length; l4++) { - var annotationOption = annotations[l4]; - annotationComponent.annotation(annotationOption); - } - if (events) { - (0, import_util127.each)(events, function(eventCallback, eventName) { - _this.on(eventName, eventCallback); - }); - } - if (facets) { - (0, import_util127.each)(facets, function(facet) { - var type3 = facet.type, rest = __rest(facet, ["type"]); - _this.facet(type3, rest); - }); - } - }; - View3.prototype.createGeometry = function(geometryOption) { - var type2 = geometryOption.type, _a6 = geometryOption.cfg, cfg = _a6 === void 0 ? {} : _a6; - if (this[type2]) { - var geometry_1 = this[type2](cfg); - (0, import_util127.each)(geometryOption, function(v3, k4) { - if ((0, import_util127.isFunction)(geometry_1[k4])) { - geometry_1[k4](v3); - } - }); - } - }; - View3.prototype.getScaleKey = function(field6) { - return "".concat(this.id, "-").concat(field6); - }; - return View3; -}(base_default); -function registerGeometry(name, Ctor) { - View.prototype[name.toLowerCase()] = function(cfg) { - if (cfg === void 0) { - cfg = {}; - } - var props = __assign({ - container: this.middleGroup.addGroup(), - labelsContainer: this.foregroundGroup.addGroup() - }, cfg); - var geometry35 = new Ctor(props); - this.geometries.push(geometry35); - return geometry35; - }; -} -var view_default = View; - -// node_modules/@antv/g2/esm/chart/chart.js -var Chart = function(_super) { - __extends(Chart3, _super); - function Chart3(props) { - var _this = this; - var container2 = props.container, width2 = props.width, height = props.height, _a6 = props.autoFit, autoFit = _a6 === void 0 ? false : _a6, padding3 = props.padding, appendPadding = props.appendPadding, _b = props.renderer, renderer = _b === void 0 ? "canvas" : _b, pixelRatio = props.pixelRatio, _c = props.localRefresh, localRefresh = _c === void 0 ? true : _c, _d = props.visible, visible = _d === void 0 ? true : _d, _e = props.supportCSSTransform, supportCSSTransform = _e === void 0 ? false : _e, _f = props.defaultInteractions, defaultInteractions = _f === void 0 ? ["tooltip", "legend-filter", "legend-active", "continuous-filter", "ellipsis-text"] : _f, options = props.options, limitInPlot5 = props.limitInPlot, theme4 = props.theme, syncViewPadding2 = props.syncViewPadding; - var ele = (0, import_util129.isString)(container2) ? document.getElementById(container2) : container2; - var wrapperElement = createDom('
    '); - ele.appendChild(wrapperElement); - var size14 = getChartSize(ele, autoFit, width2, height); - var G2 = getEngine(renderer); - var canvas = new G2.Canvas(__assign({ container: wrapperElement, pixelRatio, localRefresh, supportCSSTransform }, size14)); - _this = _super.call(this, { - parent: null, - canvas, - backgroundGroup: canvas.addGroup({ zIndex: GROUP_Z_INDEX.BG }), - middleGroup: canvas.addGroup({ zIndex: GROUP_Z_INDEX.MID }), - foregroundGroup: canvas.addGroup({ zIndex: GROUP_Z_INDEX.FORE }), - padding: padding3, - appendPadding, - visible, - options, - limitInPlot: limitInPlot5, - theme: theme4, - syncViewPadding: syncViewPadding2 - }) || this; - _this.onResize = (0, import_util129.debounce)(function() { - _this.forceFit(); - }, 300); - _this.ele = ele; - _this.canvas = canvas; - _this.width = size14.width; - _this.height = size14.height; - _this.autoFit = autoFit; - _this.localRefresh = localRefresh; - _this.renderer = renderer; - _this.wrapperElement = wrapperElement; - _this.updateCanvasStyle(); - _this.bindAutoFit(); - _this.initDefaultInteractions(defaultInteractions); - return _this; - } - Chart3.prototype.initDefaultInteractions = function(interactions) { - var _this = this; - (0, import_util129.each)(interactions, function(interaction8) { - _this.interaction(interaction8); - }); - }; - Chart3.prototype.aria = function(ariaOption) { - var ATTR = "aria-label"; - if (ariaOption === false) { - this.ele.removeAttribute(ATTR); - } else { - this.ele.setAttribute(ATTR, ariaOption.label); - } - }; - Chart3.prototype.changeSize = function(width2, height) { - if (this.width === width2 && this.height === height) { - return this; - } - this.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_SIZE); - this.width = width2; - this.height = height; - this.canvas.changeSize(width2, height); - this.render(true); - this.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_SIZE); - return this; - }; - Chart3.prototype.clear = function() { - _super.prototype.clear.call(this); - this.aria(false); - }; - Chart3.prototype.destroy = function() { - _super.prototype.destroy.call(this); - this.unbindAutoFit(); - this.canvas.destroy(); - removeDom(this.wrapperElement); - this.wrapperElement = null; - }; - Chart3.prototype.changeVisible = function(visible) { - _super.prototype.changeVisible.call(this, visible); - this.wrapperElement.style.display = visible ? "" : "none"; - return this; - }; - Chart3.prototype.forceFit = function() { - if (!this.destroyed) { - var _a6 = getChartSize(this.ele, true, this.width, this.height), width2 = _a6.width, height = _a6.height; - this.changeSize(width2, height); - } - }; - Chart3.prototype.updateCanvasStyle = function() { - modifyCSS(this.canvas.get("el"), { - display: "inline-block", - verticalAlign: "middle" - }); - }; - Chart3.prototype.bindAutoFit = function() { - if (this.autoFit) { - window.addEventListener("resize", this.onResize); - } - }; - Chart3.prototype.unbindAutoFit = function() { - if (this.autoFit) { - window.removeEventListener("resize", this.onResize); - } - }; - return Chart3; -}(view_default); -var chart_default = Chart; - -// node_modules/@antv/g2/esm/chart/controller/base.js -var import_util130 = __toModule(require_lib()); -var Controller = function() { - function Controller2(view) { - this.visible = true; - this.components = []; - this.view = view; - } - Controller2.prototype.clear = function(includeOption) { - (0, import_util130.each)(this.components, function(co) { - co.component.destroy(); - }); - this.components = []; - }; - Controller2.prototype.destroy = function() { - this.clear(); - }; - Controller2.prototype.getComponents = function() { - return this.components; - }; - Controller2.prototype.changeVisible = function(visible) { - if (this.visible === visible) { - return; - } - this.components.forEach(function(co) { - if (visible) { - co.component.show(); - } else { - co.component.hide(); - } - }); - this.visible = visible; - }; - return Controller2; -}(); - -// node_modules/@antv/g2/esm/chart/controller/tooltip.js -var import_util131 = __toModule(require_lib()); -function uniq2(items) { - var uniqItems = []; - var _loop_1 = function(index3) { - var item = items[index3]; - var result = (0, import_util131.find)(uniqItems, function(subItem) { - return subItem.color === item.color && subItem.name === item.name && subItem.value === item.value && subItem.title === item.title; - }); - if (!result) { - uniqItems.push(item); - } - }; - for (var index2 = 0; index2 < items.length; index2++) { - _loop_1(index2); - } - return uniqItems; -} -var Tooltip2 = function(_super) { - __extends(Tooltip5, _super); - function Tooltip5() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.isLocked = false; - return _this; - } - Object.defineProperty(Tooltip5.prototype, "name", { - get: function() { - return "tooltip"; - }, - enumerable: false, - configurable: true - }); - Tooltip5.prototype.init = function() { - }; - Tooltip5.prototype.isVisible = function() { - var option = this.view.getOptions().tooltip; - return option !== false; - }; - Tooltip5.prototype.render = function() { - }; - Tooltip5.prototype.showTooltip = function(point2) { - this.point = point2; - if (!this.isVisible()) { - return; - } - var view = this.view; - var items = this.getTooltipItems(point2); - if (!items.length) { - this.hideTooltip(); - return; - } - var title = this.getTitle(items); - var dataPoint = { - x: items[0].x, - y: items[0].y - }; - view.emit("tooltip:show", event_default.fromData(view, "tooltip:show", __assign({ items, title }, point2))); - var cfg = this.getTooltipCfg(); - var follow = cfg.follow, showMarkers = cfg.showMarkers, showCrosshairs = cfg.showCrosshairs, showContent = cfg.showContent, marker = cfg.marker; - var lastItems = this.items; - var lastTitle = this.title; - if (!(0, import_util131.isEqual)(lastTitle, title) || !(0, import_util131.isEqual)(lastItems, items)) { - view.emit("tooltip:change", event_default.fromData(view, "tooltip:change", __assign({ items, title }, point2))); - if ((0, import_util131.isFunction)(showContent) ? showContent(items) : showContent) { - if (!this.tooltip) { - this.renderTooltip(); - } - this.tooltip.update((0, import_util131.mix)({}, cfg, { - items: this.getItemsAfterProcess(items), - title - }, follow ? point2 : {})); - this.tooltip.show(); - } - if (showMarkers) { - this.renderTooltipMarkers(items, marker); - } - } else { - if (this.tooltip && follow) { - this.tooltip.update(point2); - this.tooltip.show(); - } - if (this.tooltipMarkersGroup) { - this.tooltipMarkersGroup.show(); - } - } - this.items = items; - this.title = title; - if (showCrosshairs) { - var isCrosshairsFollowCursor = (0, import_util131.get)(cfg, ["crosshairs", "follow"], false); - this.renderCrosshairs(isCrosshairsFollowCursor ? point2 : dataPoint, cfg); - } - }; - Tooltip5.prototype.hideTooltip = function() { - var follow = this.getTooltipCfg().follow; - if (!follow) { - this.point = null; - return; - } - var tooltipMarkersGroup = this.tooltipMarkersGroup; - if (tooltipMarkersGroup) { - tooltipMarkersGroup.hide(); - } - var xCrosshair = this.xCrosshair; - var yCrosshair = this.yCrosshair; - if (xCrosshair) { - xCrosshair.hide(); - } - if (yCrosshair) { - yCrosshair.hide(); - } - var tooltip10 = this.tooltip; - if (tooltip10) { - tooltip10.hide(); - } - this.view.emit("tooltip:hide", event_default.fromData(this.view, "tooltip:hide", {})); - this.point = null; - }; - Tooltip5.prototype.lockTooltip = function() { - this.isLocked = true; - if (this.tooltip) { - this.tooltip.setCapture(true); - } - }; - Tooltip5.prototype.unlockTooltip = function() { - this.isLocked = false; - var cfg = this.getTooltipCfg(); - if (this.tooltip) { - this.tooltip.setCapture(cfg.capture); - } - }; - Tooltip5.prototype.isTooltipLocked = function() { - return this.isLocked; - }; - Tooltip5.prototype.clear = function() { - var _a6 = this, tooltip10 = _a6.tooltip, xCrosshair = _a6.xCrosshair, yCrosshair = _a6.yCrosshair, tooltipMarkersGroup = _a6.tooltipMarkersGroup; - if (tooltip10) { - tooltip10.hide(); - tooltip10.clear(); - } - if (xCrosshair) { - xCrosshair.clear(); - } - if (yCrosshair) { - yCrosshair.clear(); - } - if (tooltipMarkersGroup) { - tooltipMarkersGroup.clear(); - } - if (tooltip10 === null || tooltip10 === void 0 ? void 0 : tooltip10.get("customContent")) { - this.tooltip.destroy(); - this.tooltip = null; - } - this.title = null; - this.items = null; - }; - Tooltip5.prototype.destroy = function() { - if (this.tooltip) { - this.tooltip.destroy(); - } - if (this.xCrosshair) { - this.xCrosshair.destroy(); - } - if (this.yCrosshair) { - this.yCrosshair.destroy(); - } - if (this.guideGroup) { - this.guideGroup.remove(true); - } - this.reset(); - }; - Tooltip5.prototype.reset = function() { - this.items = null; - this.title = null; - this.tooltipMarkersGroup = null; - this.tooltipCrosshairsGroup = null; - this.xCrosshair = null; - this.yCrosshair = null; - this.tooltip = null; - this.guideGroup = null; - this.isLocked = false; - this.point = null; - }; - Tooltip5.prototype.changeVisible = function(visible) { - if (this.visible === visible) { - return; - } - var _a6 = this, tooltip10 = _a6.tooltip, tooltipMarkersGroup = _a6.tooltipMarkersGroup, xCrosshair = _a6.xCrosshair, yCrosshair = _a6.yCrosshair; - if (visible) { - if (tooltip10) { - tooltip10.show(); - } - if (tooltipMarkersGroup) { - tooltipMarkersGroup.show(); - } - if (xCrosshair) { - xCrosshair.show(); - } - if (yCrosshair) { - yCrosshair.show(); - } - } else { - if (tooltip10) { - tooltip10.hide(); - } - if (tooltipMarkersGroup) { - tooltipMarkersGroup.hide(); - } - if (xCrosshair) { - xCrosshair.hide(); - } - if (yCrosshair) { - yCrosshair.hide(); - } - } - this.visible = visible; - }; - Tooltip5.prototype.getTooltipItems = function(point2) { - var items = this.findItemsFromView(this.view, point2); - if (items.length) { - items = (0, import_util131.flatten)(items); - for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { - var itemArr = items_1[_i]; - for (var _a6 = 0, itemArr_1 = itemArr; _a6 < itemArr_1.length; _a6++) { - var item = itemArr_1[_a6]; - var _b = item.mappingData, x6 = _b.x, y5 = _b.y; - item.x = (0, import_util131.isArray)(x6) ? x6[x6.length - 1] : x6; - item.y = (0, import_util131.isArray)(y5) ? y5[y5.length - 1] : y5; - } - } - var shared = this.getTooltipCfg().shared; - if (shared === false && items.length > 1) { - var snapItem = items[0]; - var min13 = Math.abs(point2.y - snapItem[0].y); - for (var _c = 0, items_2 = items; _c < items_2.length; _c++) { - var aItem = items_2[_c]; - var yDistance = Math.abs(point2.y - aItem[0].y); - if (yDistance <= min13) { - snapItem = aItem; - min13 = yDistance; - } - } - items = [snapItem]; - } - return uniq2((0, import_util131.flatten)(items)); - } - return []; - }; - Tooltip5.prototype.layout = function() { - }; - Tooltip5.prototype.update = function() { - if (this.point) { - this.showTooltip(this.point); - } - if (this.tooltip) { - var canvas = this.view.getCanvas(); - this.tooltip.set("region", { - start: { x: 0, y: 0 }, - end: { x: canvas.get("width"), y: canvas.get("height") } - }); - } - }; - Tooltip5.prototype.isCursorEntered = function(point2) { - if (this.tooltip) { - var el = this.tooltip.getContainer(); - var capture = this.tooltip.get("capture"); - if (el && capture) { - var _a6 = el.getBoundingClientRect(), x6 = _a6.x, y5 = _a6.y, width2 = _a6.width, height = _a6.height; - return new BBox(x6, y5, width2, height).isPointIn(point2); - } - } - return false; - }; - Tooltip5.prototype.getTooltipCfg = function() { - var view = this.view; - var option = view.getOptions().tooltip; - var processOption = this.processCustomContent(option); - var theme4 = view.getTheme(); - var defaultCfg2 = (0, import_util131.get)(theme4, ["components", "tooltip"], {}); - var enterable = (0, import_util131.get)(processOption, "enterable", defaultCfg2.enterable); - return (0, import_util131.deepMix)({}, defaultCfg2, processOption, { - capture: enterable || this.isLocked ? true : false - }); - }; - Tooltip5.prototype.processCustomContent = function(option) { - if ((0, import_util131.isBoolean)(option) || !(0, import_util131.get)(option, "customContent")) { - return option; - } - var currentCustomContent = option.customContent; - var customContent = function(title, items) { - var content = currentCustomContent(title, items) || ""; - return (0, import_util131.isString)(content) ? '
    ' + content + "
    " : content; - }; - return __assign(__assign({}, option), { customContent }); - }; - Tooltip5.prototype.getTitle = function(items) { - var title = items[0].title || items[0].name; - this.title = title; - return title; - }; - Tooltip5.prototype.renderTooltip = function() { - var canvas = this.view.getCanvas(); - var region = { - start: { x: 0, y: 0 }, - end: { x: canvas.get("width"), y: canvas.get("height") } - }; - var cfg = this.getTooltipCfg(); - var tooltip10 = new HtmlTooltip(__assign(__assign({ parent: canvas.get("el").parentNode, region }, cfg), { visible: false, crosshairs: null })); - tooltip10.init(); - this.tooltip = tooltip10; - }; - Tooltip5.prototype.renderTooltipMarkers = function(items, marker) { - var tooltipMarkersGroup = this.getTooltipMarkersGroup(); - for (var _i = 0, items_3 = items; _i < items_3.length; _i++) { - var item = items_3[_i]; - var x6 = item.x, y5 = item.y; - var attrs = __assign(__assign({ fill: item.color, symbol: "circle", shadowColor: item.color }, marker), { x: x6, y: y5 }); - tooltipMarkersGroup.addShape("marker", { - attrs - }); - } - }; - Tooltip5.prototype.renderCrosshairs = function(point2, cfg) { - var crosshairsType = (0, import_util131.get)(cfg, ["crosshairs", "type"], "x"); - if (crosshairsType === "x") { - if (this.yCrosshair) { - this.yCrosshair.hide(); - } - this.renderXCrosshairs(point2, cfg); - } else if (crosshairsType === "y") { - if (this.xCrosshair) { - this.xCrosshair.hide(); - } - this.renderYCrosshairs(point2, cfg); - } else if (crosshairsType === "xy") { - this.renderXCrosshairs(point2, cfg); - this.renderYCrosshairs(point2, cfg); - } - }; - Tooltip5.prototype.renderXCrosshairs = function(point2, tooltipCfg) { - var coordinate11 = this.getViewWithGeometry(this.view).getCoordinate(); - if (!isPointInCoordinate(coordinate11, point2)) { - return; - } - var start; - var end2; - if (coordinate11.isRect) { - if (coordinate11.isTransposed) { - start = { - x: coordinate11.start.x, - y: point2.y - }; - end2 = { - x: coordinate11.end.x, - y: point2.y - }; - } else { - start = { - x: point2.x, - y: coordinate11.end.y - }; - end2 = { - x: point2.x, - y: coordinate11.start.y - }; - } - } else { - var angle3 = getAngleByPoint(coordinate11, point2); - var center2 = coordinate11.getCenter(); - var radius = coordinate11.getRadius(); - end2 = polarToCartesian(center2.x, center2.y, radius, angle3); - start = center2; - } - var cfg = (0, import_util131.deepMix)({ - start, - end: end2, - container: this.getTooltipCrosshairsGroup() - }, (0, import_util131.get)(tooltipCfg, "crosshairs", {}), this.getCrosshairsText("x", point2, tooltipCfg)); - delete cfg.type; - var xCrosshair = this.xCrosshair; - if (xCrosshair) { - xCrosshair.update(cfg); - } else { - xCrosshair = new crosshair_exports.Line(cfg); - xCrosshair.init(); - } - xCrosshair.render(); - xCrosshair.show(); - this.xCrosshair = xCrosshair; - }; - Tooltip5.prototype.renderYCrosshairs = function(point2, tooltipCfg) { - var coordinate11 = this.getViewWithGeometry(this.view).getCoordinate(); - if (!isPointInCoordinate(coordinate11, point2)) { - return; - } - var cfg; - var type2; - if (coordinate11.isRect) { - var start = void 0; - var end2 = void 0; - if (coordinate11.isTransposed) { - start = { - x: point2.x, - y: coordinate11.end.y - }; - end2 = { - x: point2.x, - y: coordinate11.start.y - }; - } else { - start = { - x: coordinate11.start.x, - y: point2.y - }; - end2 = { - x: coordinate11.end.x, - y: point2.y - }; - } - cfg = { - start, - end: end2 - }; - type2 = "Line"; - } else { - cfg = { - center: coordinate11.getCenter(), - radius: getDistanceToCenter(coordinate11, point2), - startAngle: coordinate11.startAngle, - endAngle: coordinate11.endAngle - }; - type2 = "Circle"; - } - cfg = (0, import_util131.deepMix)({ - container: this.getTooltipCrosshairsGroup() - }, cfg, (0, import_util131.get)(tooltipCfg, "crosshairs", {}), this.getCrosshairsText("y", point2, tooltipCfg)); - delete cfg.type; - var yCrosshair = this.yCrosshair; - if (yCrosshair) { - if (coordinate11.isRect && yCrosshair.get("type") === "circle" || !coordinate11.isRect && yCrosshair.get("type") === "line") { - yCrosshair = new crosshair_exports[type2](cfg); - yCrosshair.init(); - } else { - yCrosshair.update(cfg); - } - } else { - yCrosshair = new crosshair_exports[type2](cfg); - yCrosshair.init(); - } - yCrosshair.render(); - yCrosshair.show(); - this.yCrosshair = yCrosshair; - }; - Tooltip5.prototype.getCrosshairsText = function(type2, point2, tooltipCfg) { - var textCfg = (0, import_util131.get)(tooltipCfg, ["crosshairs", "text"]); - var follow = (0, import_util131.get)(tooltipCfg, ["crosshairs", "follow"]); - var items = this.items; - if (textCfg) { - var view = this.getViewWithGeometry(this.view); - var firstItem = items[0]; - var xScale = view.getXScale(); - var yScale = view.getYScales()[0]; - var xValue = void 0; - var yValue = void 0; - if (follow) { - var invertPoint = this.view.getCoordinate().invert(point2); - xValue = xScale.invert(invertPoint.x); - yValue = yScale.invert(invertPoint.y); - } else { - xValue = firstItem.data[xScale.field]; - yValue = firstItem.data[yScale.field]; - } - var content = type2 === "x" ? xValue : yValue; - if ((0, import_util131.isFunction)(textCfg)) { - textCfg = textCfg(type2, content, items, point2); - } else { - textCfg.content = content; - } - return { - text: textCfg - }; - } - }; - Tooltip5.prototype.getGuideGroup = function() { - if (!this.guideGroup) { - var foregroundGroup = this.view.foregroundGroup; - this.guideGroup = foregroundGroup.addGroup({ - name: "tooltipGuide", - capture: false - }); - } - return this.guideGroup; - }; - Tooltip5.prototype.getTooltipMarkersGroup = function() { - var tooltipMarkersGroup = this.tooltipMarkersGroup; - if (tooltipMarkersGroup && !tooltipMarkersGroup.destroyed) { - tooltipMarkersGroup.clear(); - tooltipMarkersGroup.show(); - } else { - tooltipMarkersGroup = this.getGuideGroup().addGroup({ - name: "tooltipMarkersGroup" - }); - tooltipMarkersGroup.toFront(); - this.tooltipMarkersGroup = tooltipMarkersGroup; - } - return tooltipMarkersGroup; - }; - Tooltip5.prototype.getTooltipCrosshairsGroup = function() { - var tooltipCrosshairsGroup = this.tooltipCrosshairsGroup; - if (!tooltipCrosshairsGroup) { - tooltipCrosshairsGroup = this.getGuideGroup().addGroup({ - name: "tooltipCrosshairsGroup", - capture: false - }); - tooltipCrosshairsGroup.toBack(); - this.tooltipCrosshairsGroup = tooltipCrosshairsGroup; - } - return tooltipCrosshairsGroup; - }; - Tooltip5.prototype.findItemsFromView = function(view, point2) { - if (view.getOptions().tooltip === false) { - return []; - } - var tooltipCfg = this.getTooltipCfg(); - var result = findItemsFromView(view, point2, tooltipCfg); - for (var _i = 0, _a6 = view.views; _i < _a6.length; _i++) { - var childView = _a6[_i]; - result = result.concat(this.findItemsFromView(childView, point2)); - } - return result; - }; - Tooltip5.prototype.getViewWithGeometry = function(view) { - var _this = this; - if (view.geometries.length) { - return view; - } - return (0, import_util131.find)(view.views, function(childView) { - return _this.getViewWithGeometry(childView); - }); - }; - Tooltip5.prototype.getItemsAfterProcess = function(originalItems) { - var customItems = this.getTooltipCfg().customItems; - var fn = customItems ? customItems : function(v3) { - return v3; - }; - return fn(originalItems); - }; - return Tooltip5; -}(Controller); -var tooltip_default = Tooltip2; - -// node_modules/@antv/g2/esm/geometry/base.js -var import_util138 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/animate/index.js -var import_util132 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/animate/animation/index.js -var ANIMATIONS_MAP = {}; -function getAnimation(type2) { - return ANIMATIONS_MAP[type2.toLowerCase()]; -} -function registerAnimation(type2, animation7) { - ANIMATIONS_MAP[type2.toLowerCase()] = animation7; -} - -// node_modules/@antv/g2/esm/animate/index.js -var DEFAULT_ANIMATE_CFG = { - appear: { - duration: 450, - easing: "easeQuadOut" - }, - update: { - duration: 400, - easing: "easeQuadInOut" - }, - enter: { - duration: 400, - easing: "easeQuadInOut" - }, - leave: { - duration: 350, - easing: "easeQuadIn" - } -}; -var GEOMETRY_ANIMATE_CFG = { - interval: function(coordinate11) { - return { - enter: { - animation: coordinate11.isRect ? coordinate11.isTransposed ? "scale-in-x" : "scale-in-y" : "fade-in" - }, - update: { - animation: coordinate11.isPolar && coordinate11.isTransposed ? "sector-path-update" : null - }, - leave: { - animation: "fade-out" - } - }; - }, - line: { - enter: { - animation: "fade-in" - }, - leave: { - animation: "fade-out" - } - }, - path: { - enter: { - animation: "fade-in" - }, - leave: { - animation: "fade-out" - } - }, - point: { - appear: { - animation: "zoom-in" - }, - enter: { - animation: "zoom-in" - }, - leave: { - animation: "zoom-out" - } - }, - area: { - enter: { - animation: "fade-in" - }, - leave: { - animation: "fade-out" - } - }, - polygon: { - enter: { - animation: "fade-in" - }, - leave: { - animation: "fade-out" - } - }, - schema: { - enter: { - animation: "fade-in" - }, - leave: { - animation: "fade-out" - } - }, - edge: { - enter: { - animation: "fade-in" - }, - leave: { - animation: "fade-out" - } - }, - label: { - appear: { - animation: "fade-in", - delay: 450 - }, - enter: { - animation: "fade-in" - }, - update: { - animation: "position-update" - }, - leave: { - animation: "fade-out" - } - } -}; -var GEOMETRY_GROUP_APPEAR_ANIMATION = { - line: function() { - return { - animation: "wave-in" - }; - }, - area: function() { - return { - animation: "wave-in" - }; - }, - path: function() { - return { - animation: "fade-in" - }; - }, - interval: function(coordinate11) { - var animation7; - if (coordinate11.isRect) { - animation7 = coordinate11.isTransposed ? "grow-in-x" : "grow-in-y"; - } else { - animation7 = "grow-in-xy"; - if (coordinate11.isPolar && coordinate11.isTransposed) { - animation7 = "wave-in"; - } - } - return { - animation: animation7 - }; - }, - schema: function(coordinate11) { - var animation7; - if (coordinate11.isRect) { - animation7 = coordinate11.isTransposed ? "grow-in-x" : "grow-in-y"; - } else { - animation7 = "grow-in-xy"; - } - return { - animation: animation7 - }; - }, - polygon: function() { - return { - animation: "fade-in", - duration: 500 - }; - }, - edge: function() { - return { - animation: "fade-in" - }; - } -}; -function parseAnimateConfig(animateCfg, data3) { - return { - delay: (0, import_util132.isFunction)(animateCfg.delay) ? animateCfg.delay(data3) : animateCfg.delay, - easing: (0, import_util132.isFunction)(animateCfg.easing) ? animateCfg.easing(data3) : animateCfg.easing, - duration: (0, import_util132.isFunction)(animateCfg.duration) ? animateCfg.duration(data3) : animateCfg.duration, - callback: animateCfg.callback, - repeat: animateCfg.repeat - }; -} -function getDefaultAnimateCfg(elementName, coordinate11, animateType) { - var animateCfg = GEOMETRY_ANIMATE_CFG[elementName]; - if (animateCfg) { - if ((0, import_util132.isFunction)(animateCfg)) { - animateCfg = animateCfg(coordinate11); - } - animateCfg = (0, import_util132.deepMix)({}, DEFAULT_ANIMATE_CFG, animateCfg); - if (animateType) { - return animateCfg[animateType]; - } - } - return animateCfg; -} -function doAnimate(shape, animateCfg, cfg) { - var data3 = (0, import_util132.get)(shape.get("origin"), "data", FIELD_ORIGIN); - var animation7 = animateCfg.animation; - var parsedAnimateCfg = parseAnimateConfig(animateCfg, data3); - if (animation7) { - var animateFunction = getAnimation(animation7); - if (animateFunction) { - animateFunction(shape, parsedAnimateCfg, cfg); - } - } else { - shape.animate(cfg.toAttrs, parsedAnimateCfg); - } -} -function doGroupAppearAnimate(container2, animateCfg, geometryType, coordinate11, minYPoint) { - if (GEOMETRY_GROUP_APPEAR_ANIMATION[geometryType]) { - var defaultCfg2 = GEOMETRY_GROUP_APPEAR_ANIMATION[geometryType](coordinate11); - var animation7 = getAnimation((0, import_util132.get)(defaultCfg2, "animation", "")); - if (animation7) { - var cfg = __assign(__assign(__assign({}, DEFAULT_ANIMATE_CFG.appear), defaultCfg2), animateCfg); - container2.stopAnimate(); - animation7(container2, cfg, { - coordinate: coordinate11, - minYPoint, - toAttrs: null - }); - } - } -} - -// node_modules/@antv/g2/esm/geometry/element/index.js -var import_util133 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/geometry/shape/constant.js -var BACKGROUND_SHAPE = "element-background"; - -// node_modules/@antv/g2/esm/geometry/element/index.js -var Element3 = function(_super) { - __extends(Element4, _super); - function Element4(cfg) { - var _this = _super.call(this, cfg) || this; - _this.states = []; - var shapeFactory = cfg.shapeFactory, container2 = cfg.container, offscreenGroup = cfg.offscreenGroup, elementIndex = cfg.elementIndex, _a6 = cfg.visible, visible = _a6 === void 0 ? true : _a6; - _this.shapeFactory = shapeFactory; - _this.container = container2; - _this.offscreenGroup = offscreenGroup; - _this.visible = visible; - _this.elementIndex = elementIndex; - return _this; - } - Element4.prototype.draw = function(model, isUpdate) { - if (isUpdate === void 0) { - isUpdate = false; - } - this.model = model; - this.data = model.data; - this.shapeType = this.getShapeType(model); - this.drawShape(model, isUpdate); - if (this.visible === false) { - this.changeVisible(false); - } - }; - Element4.prototype.update = function(model) { - var _a6 = this, shapeFactory = _a6.shapeFactory, shape = _a6.shape; - if (!shape) { - return; - } - this.model = model; - this.data = model.data; - this.shapeType = this.getShapeType(model); - this.setShapeInfo(shape, model); - var offscreenGroup = this.getOffscreenGroup(); - var newShape = shapeFactory.drawShape(this.shapeType, model, offscreenGroup); - newShape.cfg.data = this.data; - newShape.cfg.origin = model; - newShape.cfg.element = this; - this.syncShapeStyle(shape, newShape, this.getStates(), this.getAnimateCfg("update")); - }; - Element4.prototype.destroy = function() { - var _a6 = this, shapeFactory = _a6.shapeFactory, shape = _a6.shape; - if (shape) { - var animateCfg = this.getAnimateCfg("leave"); - if (animateCfg) { - doAnimate(shape, animateCfg, { - coordinate: shapeFactory.coordinate, - toAttrs: __assign({}, shape.attr()) - }); - } else { - shape.remove(true); - } - } - this.states = []; - this.shapeFactory = void 0; - this.container = void 0; - this.shape = void 0; - this.animate = void 0; - this.geometry = void 0; - this.labelShape = void 0; - this.model = void 0; - this.data = void 0; - this.offscreenGroup = void 0; - this.statesStyle = void 0; - _super.prototype.destroy.call(this); - }; - Element4.prototype.changeVisible = function(visible) { - _super.prototype.changeVisible.call(this, visible); - if (visible) { - if (this.shape) { - this.shape.show(); - } - if (this.labelShape) { - this.labelShape.forEach(function(label17) { - label17.show(); - }); - } - } else { - if (this.shape) { - this.shape.hide(); - } - if (this.labelShape) { - this.labelShape.forEach(function(label17) { - label17.hide(); - }); - } - } - }; - Element4.prototype.setState = function(stateName, stateStatus) { - var _a6 = this, states = _a6.states, shapeFactory = _a6.shapeFactory, model = _a6.model, shape = _a6.shape, shapeType = _a6.shapeType; - var index2 = states.indexOf(stateName); - if (stateStatus) { - if (index2 > -1) { - return; - } - states.push(stateName); - if (stateName === "active" || stateName === "selected") { - shape === null || shape === void 0 ? void 0 : shape.toFront(); - } - } else { - if (index2 === -1) { - return; - } - states.splice(index2, 1); - if (stateName === "active" || stateName === "selected") { - var _b = this.geometry, sortZIndex = _b.sortZIndex, zIndexReversed = _b.zIndexReversed; - var idx = zIndexReversed ? this.geometry.elements.length - this.elementIndex : this.elementIndex; - sortZIndex ? shape.setZIndex(idx) : shape.set("zIndex", idx); - } - } - var offscreenShape = shapeFactory.drawShape(shapeType, model, this.getOffscreenGroup()); - if (states.length) { - this.syncShapeStyle(shape, offscreenShape, states, null); - } else { - this.syncShapeStyle(shape, offscreenShape, ["reset"], null); - } - offscreenShape.remove(true); - var eventObject = { - state: stateName, - stateStatus, - element: this, - target: this.container - }; - this.container.emit("statechange", eventObject); - propagationDelegate(this.shape, "statechange", eventObject); - }; - Element4.prototype.clearStates = function() { - var _this = this; - var states = this.states; - (0, import_util133.each)(states, function(state2) { - _this.setState(state2, false); - }); - this.states = []; - }; - Element4.prototype.hasState = function(stateName) { - return this.states.includes(stateName); - }; - Element4.prototype.getStates = function() { - return this.states; - }; - Element4.prototype.getData = function() { - return this.data; - }; - Element4.prototype.getModel = function() { - return this.model; - }; - Element4.prototype.getBBox = function() { - var _a6 = this, shape = _a6.shape, labelShape = _a6.labelShape; - var bbox = { - x: 0, - y: 0, - minX: 0, - minY: 0, - maxX: 0, - maxY: 0, - width: 0, - height: 0 - }; - if (shape) { - bbox = shape.getCanvasBBox(); - } - if (labelShape) { - labelShape.forEach(function(label17) { - var labelBBox = label17.getCanvasBBox(); - bbox.x = Math.min(labelBBox.x, bbox.x); - bbox.y = Math.min(labelBBox.y, bbox.y); - bbox.minX = Math.min(labelBBox.minX, bbox.minX); - bbox.minY = Math.min(labelBBox.minY, bbox.minY); - bbox.maxX = Math.max(labelBBox.maxX, bbox.maxX); - bbox.maxY = Math.max(labelBBox.maxY, bbox.maxY); - }); - } - bbox.width = bbox.maxX - bbox.minX; - bbox.height = bbox.maxY - bbox.minY; - return bbox; - }; - Element4.prototype.getStatesStyle = function() { - if (!this.statesStyle) { - var _a6 = this, shapeType = _a6.shapeType, geometry35 = _a6.geometry, shapeFactory = _a6.shapeFactory; - var stateOption = geometry35.stateOption; - var defaultShapeType = shapeFactory.defaultShapeType; - var stateTheme = shapeFactory.theme[shapeType] || shapeFactory.theme[defaultShapeType]; - this.statesStyle = (0, import_util133.deepMix)({}, stateTheme, stateOption); - } - return this.statesStyle; - }; - Element4.prototype.getStateStyle = function(stateName, shapeKey) { - var statesStyle = this.getStatesStyle(); - var stateCfg = (0, import_util133.get)(statesStyle, [stateName, "style"], {}); - var shapeStyle = stateCfg[shapeKey] || stateCfg; - if ((0, import_util133.isFunction)(shapeStyle)) { - return shapeStyle(this); - } - return shapeStyle; - }; - Element4.prototype.getAnimateCfg = function(animateType) { - var _this = this; - var animate = this.animate; - if (animate) { - var cfg_1 = animate[animateType]; - if (cfg_1) { - return __assign(__assign({}, cfg_1), { callback: function() { - var _a6; - (0, import_util133.isFunction)(cfg_1.callback) && cfg_1.callback(); - (_a6 = _this.geometry) === null || _a6 === void 0 ? void 0 : _a6.emit(GEOMETRY_LIFE_CIRCLE.AFTER_DRAW_ANIMATE); - } }); - } - return cfg_1; - } - return null; - }; - Element4.prototype.drawShape = function(model, isUpdate) { - var _a6; - if (isUpdate === void 0) { - isUpdate = false; - } - var _b = this, shapeFactory = _b.shapeFactory, container2 = _b.container, shapeType = _b.shapeType; - this.shape = shapeFactory.drawShape(shapeType, model, container2); - if (this.shape) { - this.setShapeInfo(this.shape, model); - var name_1 = this.shape.cfg.name; - if (!name_1) { - this.shape.cfg.name = ["element", this.shapeFactory.geometryType]; - } else if ((0, import_util133.isString)(name_1)) { - this.shape.cfg.name = ["element", name_1]; - } - var animateType = isUpdate ? "enter" : "appear"; - var animateCfg = this.getAnimateCfg(animateType); - if (animateCfg) { - (_a6 = this.geometry) === null || _a6 === void 0 ? void 0 : _a6.emit(GEOMETRY_LIFE_CIRCLE.BEFORE_DRAW_ANIMATE); - doAnimate(this.shape, animateCfg, { - coordinate: shapeFactory.coordinate, - toAttrs: __assign({}, this.shape.attr()) - }); - } - } - }; - Element4.prototype.getOffscreenGroup = function() { - if (!this.offscreenGroup) { - var GroupCtor = this.container.getGroupBase(); - this.offscreenGroup = new GroupCtor({}); - } - return this.offscreenGroup; - }; - Element4.prototype.setShapeInfo = function(shape, data3) { - var _this = this; - shape.cfg.origin = data3; - shape.cfg.element = this; - if (shape.isGroup()) { - var children = shape.get("children"); - children.forEach(function(child) { - _this.setShapeInfo(child, data3); - }); - } - }; - Element4.prototype.syncShapeStyle = function(sourceShape, targetShape, states, animateCfg, index2) { - var _this = this; - var _a6; - if (states === void 0) { - states = []; - } - if (index2 === void 0) { - index2 = 0; - } - if (!sourceShape || !targetShape) { - return; - } - var clip = sourceShape.get("clipShape"); - var newClip = targetShape.get("clipShape"); - this.syncShapeStyle(clip, newClip, states, animateCfg); - if (sourceShape.isGroup()) { - var children = sourceShape.get("children"); - var newChildren = targetShape.get("children"); - for (var i4 = 0; i4 < children.length; i4++) { - this.syncShapeStyle(children[i4], newChildren[i4], states, animateCfg, index2 + i4); - } - } else { - if (!(0, import_util133.isEmpty)(states) && !(0, import_util133.isEqual)(states, ["reset"])) { - var name_2 = sourceShape.get("name"); - if ((0, import_util133.isArray)(name_2)) { - name_2 = name_2[1]; - } - (0, import_util133.each)(states, function(state2) { - if (targetShape.get("name") !== BACKGROUND_SHAPE) { - var style = _this.getStateStyle(state2, name_2 || index2); - targetShape.attr(style); - } - }); - } - var newAttrs = getReplaceAttrs(sourceShape, targetShape); - if (this.animate) { - if (animateCfg) { - (_a6 = this.geometry) === null || _a6 === void 0 ? void 0 : _a6.emit(GEOMETRY_LIFE_CIRCLE.BEFORE_DRAW_ANIMATE); - doAnimate(sourceShape, animateCfg, { - coordinate: this.shapeFactory.coordinate, - toAttrs: newAttrs, - shapeModel: this.model - }); - } else if (!(0, import_util133.isEmpty)(states)) { - sourceShape.stopAnimate(); - sourceShape.animate(newAttrs, { - duration: 300 - }); - } else { - sourceShape.attr(newAttrs); - } - } else { - sourceShape.attr(newAttrs); - } - } - }; - Element4.prototype.getShapeType = function(model) { - var shape = (0, import_util133.get)(model, "shape"); - return (0, import_util133.isArray)(shape) ? shape[0] : shape; - }; - return Element4; -}(base_default); -var element_default2 = Element3; - -// node_modules/@antv/g2/esm/geometry/label/index.js -var GEOMETRY_LABELS_MAP = {}; -var GEOMETRY_LABELS_LAYOUT_MAP = {}; -function getGeometryLabel(type2) { - return GEOMETRY_LABELS_MAP[type2.toLowerCase()]; -} -function registerGeometryLabel(type2, ctor) { - GEOMETRY_LABELS_MAP[type2.toLowerCase()] = ctor; -} -function getGeometryLabelLayout(type2) { - return GEOMETRY_LABELS_LAYOUT_MAP[type2.toLowerCase()]; -} -function registerGeometryLabelLayout(type2, layoutFn) { - GEOMETRY_LABELS_LAYOUT_MAP[type2.toLowerCase()] = layoutFn; -} - -// node_modules/@antv/g2/esm/geometry/shape/base.js -var import_util134 = __toModule(require_lib()); -var ShapeFactoryBase = { - coordinate: null, - defaultShapeType: null, - theme: null, - getShapePoints: function(shapeType, shapePoint) { - var shape = this.getShape(shapeType); - if (shape.getPoints) { - return shape.getPoints(shapePoint); - } - return this.getDefaultPoints(shapePoint); - }, - getShape: function(shapeType) { - var shape = this[shapeType] || this[this.defaultShapeType]; - shape.coordinate = this.coordinate; - return shape; - }, - getDefaultPoints: function() { - return []; - }, - getDefaultStyle: function(geometryTheme) { - return (0, import_util134.get)(geometryTheme, [this.defaultShapeType, "default", "style"], {}); - }, - getMarker: function(shapeType, markerCfg) { - var shape = this.getShape(shapeType); - if (!shape.getMarker) { - var defaultShapeType = this.defaultShapeType; - shape = this.getShape(defaultShapeType); - } - var theme4 = this.theme; - var shapeStyle = (0, import_util134.get)(theme4, [shapeType, "default"], {}); - var markerStyle = shape.getMarker(markerCfg); - return (0, import_util134.deepMix)({}, shapeStyle, markerStyle); - }, - drawShape: function(shapeType, cfg, container2) { - var shape = this.getShape(shapeType); - return shape.draw(cfg, container2); - } -}; -var ShapeBase = { - coordinate: null, - parsePath: function(path) { - var coordinate11 = this.coordinate; - var parsedPath = parsePathString2(path); - if (coordinate11.isPolar) { - parsedPath = convertPolarPath(coordinate11, parsedPath); - } else { - parsedPath = convertNormalPath(coordinate11, parsedPath); - } - return parsedPath; - }, - parsePoint: function(point2) { - var coordinate11 = this.coordinate; - return coordinate11.convert(point2); - }, - parsePoints: function(points) { - var coordinate11 = this.coordinate; - return points.map(function(point2) { - return coordinate11.convert(point2); - }); - }, - draw: function(cfg, container2) { - } -}; -var ShapeFactoryMap = {}; -function registerShapeFactory(factoryName, cfg) { - var className = (0, import_util134.upperFirst)(factoryName); - var geomObj = __assign(__assign(__assign({}, ShapeFactoryBase), cfg), { geometryType: factoryName }); - ShapeFactoryMap[className] = geomObj; - return geomObj; -} -function registerShape(factoryName, shapeType, cfg) { - var className = (0, import_util134.upperFirst)(factoryName); - var factory = ShapeFactoryMap[className]; - var shapeObj = __assign(__assign({}, ShapeBase), cfg); - factory[shapeType] = shapeObj; - return shapeObj; -} -function getShapeFactory(factoryName) { - var className = (0, import_util134.upperFirst)(factoryName); - return ShapeFactoryMap[className]; -} - -// node_modules/@antv/g2/esm/geometry/util/group-data.js -var import_util135 = __toModule(require_lib()); -function group2(data3, fields, appendConditions) { - if (appendConditions === void 0) { - appendConditions = {}; - } - if (!fields) { - return [data3]; - } - var groups = (0, import_util135.groupToMap)(data3, fields); - var array = []; - if (fields.length === 1 && appendConditions[fields[0]]) { - var values4 = appendConditions[fields[0]]; - for (var _i = 0, values_1 = values4; _i < values_1.length; _i++) { - var value2 = values_1[_i]; - var arr = groups["_".concat(value2)]; - if (arr) { - array.push(arr); - } - } - } else { - for (var k4 in groups) { - if (groups.hasOwnProperty(k4)) { - var eachGroup = groups[k4]; - array.push(eachGroup); - } - } - } - return array; -} - -// node_modules/@antv/g2/esm/geometry/util/is-model-change.js -var import_util136 = __toModule(require_lib()); -function isModelChange(currentModel, preModel) { - return (0, import_util136.some)(["color", "shape", "size", "x", "y", "isInCircle", "data", "style", "defaultStyle", "points", "mappingData"], function(key) { - return !(0, import_util136.isEqual)(currentModel[key], preModel[key]); - }); -} - -// node_modules/@antv/g2/esm/geometry/util/parse-fields.js -var import_util137 = __toModule(require_lib()); -function parseFields(field6) { - if ((0, import_util137.isArray)(field6)) { - return field6; - } - return field6.split("*"); -} - -// node_modules/@antv/g2/esm/geometry/util/diff.js -function diff(keyItem, keys6) { - var added = []; - var updated = []; - var removed = []; - var keyIncluded = new Map(); - for (var i4 = 0; i4 < keys6.length; i4++) { - var key = keys6[i4]; - if (keyItem[key]) - updated.push(key); - else - added.push(key); - keyIncluded.set(key, true); - } - Object.keys(keyItem).forEach(function(key2) { - if (!keyIncluded.has(key2)) - removed.push(key2); - }); - return { - added, - updated, - removed - }; -} - -// node_modules/@antv/g2/esm/geometry/base.js -function filterLabelsById(id, labelsMap) { - var labels = []; - (0, import_util138.each)(labelsMap, function(label17, labelId) { - var elementId = labelId.split(" ")[0]; - if (elementId === id) { - labels.push(label17); - } - }); - return labels; -} -var Geometry = function(_super) { - __extends(Geometry3, _super); - function Geometry3(cfg) { - var _this = _super.call(this, cfg) || this; - _this.type = "base"; - _this.attributes = {}; - _this.elements = []; - _this.elementsMap = {}; - _this.animateOption = true; - _this.attributeOption = {}; - _this.lastElementsMap = {}; - _this.generatePoints = false; - _this.beforeMappingData = null; - _this.adjusts = {}; - _this.idFields = []; - _this.hasSorted = false; - _this.isCoordinateChanged = false; - var container2 = cfg.container, labelsContainer = cfg.labelsContainer, coordinate11 = cfg.coordinate, data3 = cfg.data, _a6 = cfg.sortable, sortable = _a6 === void 0 ? false : _a6, _b = cfg.visible, visible = _b === void 0 ? true : _b, theme4 = cfg.theme, _c = cfg.scales, scales = _c === void 0 ? {} : _c, _d = cfg.scaleDefs, scaleDefs = _d === void 0 ? {} : _d, intervalPadding = cfg.intervalPadding, dodgePadding = cfg.dodgePadding, maxColumnWidth = cfg.maxColumnWidth, minColumnWidth = cfg.minColumnWidth, columnWidthRatio = cfg.columnWidthRatio, roseWidthRatio = cfg.roseWidthRatio, multiplePieWidthRatio = cfg.multiplePieWidthRatio, zIndexReversed = cfg.zIndexReversed, sortZIndex = cfg.sortZIndex; - _this.container = container2; - _this.labelsContainer = labelsContainer; - _this.coordinate = coordinate11; - _this.data = data3; - _this.sortable = sortable; - _this.visible = visible; - _this.userTheme = theme4; - _this.scales = scales; - _this.scaleDefs = scaleDefs; - _this.intervalPadding = intervalPadding; - _this.dodgePadding = dodgePadding; - _this.maxColumnWidth = maxColumnWidth; - _this.minColumnWidth = minColumnWidth; - _this.columnWidthRatio = columnWidthRatio; - _this.roseWidthRatio = roseWidthRatio; - _this.multiplePieWidthRatio = multiplePieWidthRatio; - _this.zIndexReversed = zIndexReversed; - _this.sortZIndex = sortZIndex; - return _this; - } - Geometry3.prototype.position = function(cfg) { - var positionCfg = cfg; - if (!(0, import_util138.isPlainObject)(cfg)) { - positionCfg = { - fields: parseFields(cfg) - }; - } - var fields = (0, import_util138.get)(positionCfg, "fields"); - if (fields.length === 1) { - fields.unshift("1"); - (0, import_util138.set)(positionCfg, "fields", fields); - } - (0, import_util138.set)(this.attributeOption, "position", positionCfg); - return this; - }; - Geometry3.prototype.color = function(field6, cfg) { - this.createAttrOption("color", field6, cfg); - return this; - }; - Geometry3.prototype.shape = function(field6, cfg) { - this.createAttrOption("shape", field6, cfg); - return this; - }; - Geometry3.prototype.size = function(field6, cfg) { - this.createAttrOption("size", field6, cfg); - return this; - }; - Geometry3.prototype.adjust = function(adjustCfg2) { - var adjusts = adjustCfg2; - if ((0, import_util138.isString)(adjustCfg2) || (0, import_util138.isPlainObject)(adjustCfg2)) { - adjusts = [adjustCfg2]; - } - (0, import_util138.each)(adjusts, function(adjust4, index2) { - if (!(0, import_util138.isObject)(adjust4)) { - adjusts[index2] = { type: adjust4 }; - } - }); - this.adjustOption = adjusts; - return this; - }; - Geometry3.prototype.style = function(field6, styleFunc) { - if ((0, import_util138.isString)(field6)) { - var fields = parseFields(field6); - this.styleOption = { - fields, - callback: styleFunc - }; - } else { - var _a6 = field6, fields = _a6.fields, callback = _a6.callback, cfg = _a6.cfg; - if (fields || callback || cfg) { - this.styleOption = field6; - } else { - this.styleOption = { - cfg: field6 - }; - } - } - return this; - }; - Geometry3.prototype.tooltip = function(field6, cfg) { - if ((0, import_util138.isString)(field6)) { - var fields = parseFields(field6); - this.tooltipOption = { - fields, - callback: cfg - }; - } else { - this.tooltipOption = field6; - } - return this; - }; - Geometry3.prototype.animate = function(cfg) { - this.animateOption = cfg; - return this; - }; - Geometry3.prototype.label = function(field6, secondParam, thirdParam) { - if ((0, import_util138.isString)(field6)) { - var labelOption = {}; - var fields = parseFields(field6); - labelOption.fields = fields; - if ((0, import_util138.isFunction)(secondParam)) { - labelOption.callback = secondParam; - } else if ((0, import_util138.isPlainObject)(secondParam)) { - labelOption.cfg = secondParam; - } - if (thirdParam) { - labelOption.cfg = thirdParam; - } - this.labelOption = labelOption; - } else { - this.labelOption = field6; - } - return this; - }; - Geometry3.prototype.state = function(cfg) { - this.stateOption = cfg; - return this; - }; - Geometry3.prototype.customInfo = function(cfg) { - this.customOption = cfg; - return this; - }; - Geometry3.prototype.init = function(cfg) { - if (cfg === void 0) { - cfg = {}; - } - this.setCfg(cfg); - this.initAttributes(); - this.processData(this.data); - this.adjustScale(); - }; - Geometry3.prototype.update = function(cfg) { - if (cfg === void 0) { - cfg = {}; - } - var data3 = cfg.data, isDataChanged = cfg.isDataChanged, isCoordinateChanged = cfg.isCoordinateChanged; - var _a6 = this, attributeOption = _a6.attributeOption, lastAttributeOption = _a6.lastAttributeOption; - if (!(0, import_util138.isEqual)(attributeOption, lastAttributeOption)) { - this.init(cfg); - } else if (data3 && (isDataChanged || !(0, import_util138.isEqual)(data3, this.data))) { - this.setCfg(cfg); - this.initAttributes(); - this.processData(data3); - } else { - this.setCfg(cfg); - } - this.adjustScale(); - this.isCoordinateChanged = isCoordinateChanged; - }; - Geometry3.prototype.paint = function(isUpdate) { - if (isUpdate === void 0) { - isUpdate = false; - } - if (this.animateOption) { - this.animateOption = (0, import_util138.deepMix)({}, getDefaultAnimateCfg(this.type, this.coordinate), this.animateOption); - } - this.defaultSize = void 0; - this.elementsMap = {}; - this.elements = []; - var offscreenGroup = this.getOffscreenGroup(); - offscreenGroup.clear(); - var beforeMappingData = this.beforeMappingData; - var dataArray = this.beforeMapping(beforeMappingData); - this.dataArray = new Array(dataArray.length); - for (var i4 = 0; i4 < dataArray.length; i4++) { - var data3 = dataArray[i4]; - this.dataArray[i4] = this.mapping(data3); - } - this.updateElements(this.dataArray, isUpdate); - this.lastElementsMap = this.elementsMap; - if (this.canDoGroupAnimation(isUpdate)) { - var container2 = this.container; - var type2 = this.type; - var coordinate11 = this.coordinate; - var animateCfg = (0, import_util138.get)(this.animateOption, "appear"); - var yScale = this.getYScale(); - var yMinPoint = coordinate11.convert({ - x: 0, - y: yScale.scale(this.getYMinValue()) - }); - doGroupAppearAnimate(container2, animateCfg, type2, coordinate11, yMinPoint); - } - if (this.labelOption) { - this.renderLabels((0, import_util138.flatten)(this.dataArray), isUpdate); - } - this.lastAttributeOption = __assign({}, this.attributeOption); - if (this.visible === false) { - this.changeVisible(false); - } - }; - Geometry3.prototype.clear = function() { - var _a6 = this, container2 = _a6.container, geometryLabel = _a6.geometryLabel, offscreenGroup = _a6.offscreenGroup; - if (container2) { - container2.clear(); - } - if (geometryLabel) { - geometryLabel.clear(); - } - if (offscreenGroup) { - offscreenGroup.clear(); - } - this.scaleDefs = void 0; - this.attributes = {}; - this.scales = {}; - this.elementsMap = {}; - this.lastElementsMap = {}; - this.elements = []; - this.adjusts = {}; - this.dataArray = null; - this.beforeMappingData = null; - this.lastAttributeOption = void 0; - this.defaultSize = void 0; - this.idFields = []; - this.groupScales = void 0; - this.hasSorted = false; - this.isCoordinateChanged = false; - }; - Geometry3.prototype.destroy = function() { - this.clear(); - var container2 = this.container; - container2.remove(true); - if (this.offscreenGroup) { - this.offscreenGroup.remove(true); - this.offscreenGroup = null; - } - if (this.geometryLabel) { - this.geometryLabel.destroy(); - this.geometryLabel = null; - } - this.theme = void 0; - this.shapeFactory = void 0; - _super.prototype.destroy.call(this); - }; - Geometry3.prototype.getGroupScales = function() { - return this.groupScales; - }; - Geometry3.prototype.getAttribute = function(name) { - return this.attributes[name]; - }; - Geometry3.prototype.getXScale = function() { - return this.getAttribute("position").scales[0]; - }; - Geometry3.prototype.getYScale = function() { - return this.getAttribute("position").scales[1]; - }; - Geometry3.prototype.getGroupAttributes = function() { - var rst = []; - (0, import_util138.each)(this.attributes, function(attr) { - if (GROUP_ATTRS.includes(attr.type)) { - rst.push(attr); - } - }); - return rst; - }; - Geometry3.prototype.getDefaultValue = function(attrName) { - var value2; - var attr = this.getAttribute(attrName); - if (attr && (0, import_util138.isEmpty)(attr.scales)) { - value2 = attr.values[0]; - } - return value2; - }; - Geometry3.prototype.getAttributeValues = function(attr, obj) { - var params = []; - var scales = attr.scales; - for (var index2 = 0, length_1 = scales.length; index2 < length_1; index2++) { - var scale12 = scales[index2]; - var field6 = scale12.field; - if (scale12.isIdentity) { - params.push(scale12.values); - } else { - params.push(obj[field6]); - } - } - return attr.mapping.apply(attr, params); - }; - Geometry3.prototype.getAdjust = function(adjustType) { - return this.adjusts[adjustType]; - }; - Geometry3.prototype.getCoordinate = function() { - return this.coordinate; - }; - Geometry3.prototype.getData = function() { - return this.data; - }; - Geometry3.prototype.getShapeMarker = function(shapeName, cfg) { - var shapeFactory = this.getShapeFactory(); - return shapeFactory.getMarker(shapeName, cfg); - }; - Geometry3.prototype.getElementsBy = function(condition) { - return this.elements.filter(function(element) { - return condition(element); - }); - }; - Geometry3.prototype.getElements = function() { - return this.elements; - }; - Geometry3.prototype.getElementId = function(data3) { - data3 = (0, import_util138.isArray)(data3) ? data3[0] : data3; - var originData = data3[FIELD_ORIGIN]; - if (this.idFields.length) { - var elementId = originData[this.idFields[0]]; - for (var index2 = 1; index2 < this.idFields.length; index2++) { - elementId += "-" + originData[this.idFields[index2]]; - } - return elementId; - } - var type2 = this.type; - var xScale = this.getXScale(); - var yScale = this.getYScale(); - var xField = xScale.field || "x"; - var yField = yScale.field || "y"; - var yVal = originData[yField]; - var xVal; - if (xScale.type === "identity") { - xVal = xScale.values[0]; - } else { - xVal = originData[xField]; - } - var id; - if (type2 === "interval" || type2 === "schema") { - id = "".concat(xVal); - } else if (type2 === "line" || type2 === "area" || type2 === "path") { - id = type2; - } else { - id = "".concat(xVal, "-").concat(yVal); - } - var groupScales = this.groupScales; - if ((0, import_util138.isEmpty)(groupScales)) { - groupScales = (0, import_util138.get)(this.getAttribute("color"), "scales", []); - } - for (var index2 = 0, length_2 = groupScales.length; index2 < length_2; index2++) { - var groupScale = groupScales[index2]; - var field6 = groupScale.field; - id = "".concat(id, "-").concat(originData[field6]); - } - var dodgeAdjust = this.getAdjust("dodge"); - if (dodgeAdjust) { - var dodgeBy = dodgeAdjust.dodgeBy; - if (dodgeBy) { - id = "".concat(id, "-").concat(originData[dodgeBy]); - } - } - if (this.getAdjust("jitter")) { - id = "".concat(id, "-").concat(data3.x, "-").concat(data3.y); - } - return id; - }; - Geometry3.prototype.getScaleFields = function() { - var fields = []; - var tmpMap = new Map(); - var _a6 = this, attributeOption = _a6.attributeOption, labelOption = _a6.labelOption, tooltipOption = _a6.tooltipOption; - for (var attributeType in attributeOption) { - if (attributeOption.hasOwnProperty(attributeType)) { - var eachOpt = attributeOption[attributeType]; - if (eachOpt.fields) { - uniq(eachOpt.fields, fields, tmpMap); - } else if (eachOpt.values) { - uniq(eachOpt.values, fields, tmpMap); - } - } - } - if (labelOption && labelOption.fields) { - uniq(labelOption.fields, fields, tmpMap); - } - if ((0, import_util138.isObject)(tooltipOption) && tooltipOption.fields) { - uniq(tooltipOption.fields, fields, tmpMap); - } - return fields; - }; - Geometry3.prototype.changeVisible = function(visible) { - _super.prototype.changeVisible.call(this, visible); - var elements = this.elements; - for (var index2 = 0, length_3 = elements.length; index2 < length_3; index2++) { - var element = elements[index2]; - element.changeVisible(visible); - } - if (visible) { - if (this.container) { - this.container.show(); - } - if (this.labelsContainer) { - this.labelsContainer.show(); - } - } else { - if (this.container) { - this.container.hide(); - } - if (this.labelsContainer) { - this.labelsContainer.hide(); - } - } - }; - Geometry3.prototype.getFields = function() { - var uniqMap = new Map(); - var fields = []; - Object.values(this.attributeOption).forEach(function(cfg) { - var fs = (cfg === null || cfg === void 0 ? void 0 : cfg.fields) || []; - fs.forEach(function(f3) { - if (!uniqMap.has(f3)) { - fields.push(f3); - } - uniqMap.set(f3, true); - }); - }, []); - return fields; - }; - Geometry3.prototype.getGroupFields = function() { - var groupFields = []; - var tmpMap = new Map(); - for (var index2 = 0, length_4 = GROUP_ATTRS.length; index2 < length_4; index2++) { - var attributeName = GROUP_ATTRS[index2]; - var cfg = this.attributeOption[attributeName]; - if (cfg && cfg.fields) { - uniq(cfg.fields, groupFields, tmpMap); - } - } - return groupFields; - }; - Geometry3.prototype.getXYFields = function() { - var _a6 = this.attributeOption.position.fields, x6 = _a6[0], y5 = _a6[1]; - return [x6, y5]; - }; - Geometry3.prototype.getXField = function() { - return (0, import_util138.get)(this.getXYFields(), [0]); - }; - Geometry3.prototype.getYField = function() { - return (0, import_util138.get)(this.getXYFields(), [1]); - }; - Geometry3.prototype.getShapes = function() { - return this.elements.map(function(element) { - return element.shape; - }); - }; - Geometry3.prototype.getOffscreenGroup = function() { - if (!this.offscreenGroup) { - var GroupCtor = this.container.getGroupBase(); - this.offscreenGroup = new GroupCtor({}); - } - return this.offscreenGroup; - }; - Geometry3.prototype.sort = function(mappingArray) { - if (!this.hasSorted) { - var xScale_1 = this.getXScale(); - var xField_1 = xScale_1.field; - for (var index2 = 0; index2 < mappingArray.length; index2++) { - var itemArr = mappingArray[index2]; - itemArr.sort(function(obj1, obj2) { - return xScale_1.translate(obj1[FIELD_ORIGIN][xField_1]) - xScale_1.translate(obj2[FIELD_ORIGIN][xField_1]); - }); - } - } - this.hasSorted = true; - }; - Geometry3.prototype.adjustScale = function() { - var yScale = this.getYScale(); - if (yScale && this.getAdjust("stack")) { - this.updateStackRange(yScale, this.beforeMappingData); - } - }; - Geometry3.prototype.getShapeFactory = function() { - var shapeType = this.shapeType; - if (!getShapeFactory(shapeType)) { - return; - } - if (!this.shapeFactory) { - this.shapeFactory = (0, import_util138.clone)(getShapeFactory(shapeType)); - } - this.shapeFactory.coordinate = this.coordinate; - this.shapeFactory.theme = this.theme.geometries[shapeType] || {}; - return this.shapeFactory; - }; - Geometry3.prototype.createShapePointsCfg = function(obj) { - var xScale = this.getXScale(); - var yScale = this.getYScale(); - var x6 = this.normalizeValues(obj[xScale.field], xScale); - var y5; - if (yScale) { - y5 = this.normalizeValues(obj[yScale.field], yScale); - } else { - y5 = obj.y ? obj.y : 0.1; - } - return { - x: x6, - y: y5, - y0: yScale ? yScale.scale(this.getYMinValue()) : void 0 - }; - }; - Geometry3.prototype.createElement = function(mappingDatum, index2, isUpdate) { - if (isUpdate === void 0) { - isUpdate = false; - } - var container2 = this.container; - var shapeCfg = this.getDrawCfg(mappingDatum); - var shapeFactory = this.getShapeFactory(); - var element = new element_default2({ - shapeFactory, - container: container2, - offscreenGroup: this.getOffscreenGroup(), - elementIndex: index2 - }); - element.animate = this.animateOption; - element.geometry = this; - element.draw(shapeCfg, isUpdate); - return element; - }; - Geometry3.prototype.getDrawCfg = function(mappingDatum) { - var originData = mappingDatum[FIELD_ORIGIN]; - var cfg = { - mappingData: mappingDatum, - data: originData, - x: mappingDatum.x, - y: mappingDatum.y, - color: mappingDatum.color, - size: mappingDatum.size, - isInCircle: this.coordinate.isPolar, - customInfo: this.customOption - }; - var shapeName = mappingDatum.shape; - if (!shapeName && this.getShapeFactory()) { - shapeName = this.getShapeFactory().defaultShapeType; - } - cfg.shape = shapeName; - var theme4 = this.theme.geometries[this.shapeType]; - cfg.defaultStyle = (0, import_util138.get)(theme4, [shapeName, "default"], {}).style; - if (!cfg.defaultStyle && this.getShapeFactory()) { - cfg.defaultStyle = this.getShapeFactory().getDefaultStyle(theme4); - } - var styleOption = this.styleOption; - if (styleOption) { - cfg.style = this.getStyleCfg(styleOption, originData); - } - if (this.generatePoints) { - cfg.points = mappingDatum.points; - cfg.nextPoints = mappingDatum.nextPoints; - } - return cfg; - }; - Geometry3.prototype.updateElements = function(mappingDataArray, isUpdate) { - if (isUpdate === void 0) { - isUpdate = false; - } - var keyDatum = new Map(); - var keys6 = []; - var keyIndex = new Map(); - var index2 = 0; - for (var i4 = 0; i4 < mappingDataArray.length; i4++) { - var mappingData = mappingDataArray[i4]; - for (var j4 = 0; j4 < mappingData.length; j4++) { - var mappingDatum = mappingData[j4]; - var key = this.getElementId(mappingDatum); - var finalKey = keyDatum.has(key) ? "".concat(key, "-").concat(i4, "-").concat(j4) : key; - keys6.push(finalKey); - keyDatum.set(finalKey, mappingDatum); - keyIndex.set(finalKey, index2); - index2++; - } - } - this.elements = new Array(index2); - var _a6 = diff(this.lastElementsMap, keys6), added = _a6.added, updated = _a6.updated, removed = _a6.removed; - for (var _i = 0, added_1 = added; _i < added_1.length; _i++) { - var key = added_1[_i]; - var mappingDatum = keyDatum.get(key); - var i4 = keyIndex.get(key); - var element = this.createElement(mappingDatum, i4, isUpdate); - this.elements[i4] = element; - this.elementsMap[key] = element; - if (element.shape) { - element.shape.set("zIndex", this.zIndexReversed ? this.elements.length - i4 : i4); - } - } - for (var _b = 0, updated_1 = updated; _b < updated_1.length; _b++) { - var key = updated_1[_b]; - var element = this.lastElementsMap[key]; - var mappingDatum = keyDatum.get(key); - var currentShapeCfg = this.getDrawCfg(mappingDatum); - var preShapeCfg = element.getModel(); - var i4 = keyIndex.get(key); - if (this.isCoordinateChanged || isModelChange(currentShapeCfg, preShapeCfg)) { - element.animate = this.animateOption; - element.update(currentShapeCfg); - } - this.elements[i4] = element; - this.elementsMap[key] = element; - if (element.shape) { - element.shape.set("zIndex", this.zIndexReversed ? this.elements.length - i4 : i4); - } - } - if (this.container) { - this.container.sort(); - } - for (var _c = 0, removed_1 = removed; _c < removed_1.length; _c++) { - var key = removed_1[_c]; - var element = this.lastElementsMap[key]; - element.animate = this.animateOption; - element.destroy(); - } - }; - Geometry3.prototype.getLabelType = function() { - var _a6 = this, labelOption = _a6.labelOption, coordinate11 = _a6.coordinate, type2 = _a6.type; - var coordinateType = coordinate11.type, isTransposed = coordinate11.isTransposed; - var labelType = (0, import_util138.get)(labelOption, ["cfg", "type"]); - if (!labelType) { - if (coordinateType === "polar") { - labelType = isTransposed ? "pie" : "polar"; - } else if (coordinateType === "theta") { - labelType = "pie"; - } else if (type2 === "interval" || type2 === "polygon") { - labelType = "interval"; - } else { - labelType = "base"; - } - } - return labelType; - }; - Geometry3.prototype.getYMinValue = function() { - var yScale = this.getYScale(); - var min13 = yScale.min, max15 = yScale.max; - var value2; - if (min13 >= 0) { - value2 = min13; - } else if (max15 <= 0) { - value2 = max15; - } else { - value2 = 0; - } - return value2; - }; - Geometry3.prototype.createAttrOption = function(attrName, field6, cfg) { - if ((0, import_util138.isNil)(field6) || (0, import_util138.isObject)(field6)) { - if ((0, import_util138.isObject)(field6) && (0, import_util138.isEqual)(Object.keys(field6), ["values"])) { - (0, import_util138.set)(this.attributeOption, attrName, { - fields: field6.values - }); - } else { - (0, import_util138.set)(this.attributeOption, attrName, field6); - } - } else { - var attrCfg = {}; - if ((0, import_util138.isNumber)(field6)) { - attrCfg.values = [field6]; - } else { - attrCfg.fields = parseFields(field6); - } - if (cfg) { - if ((0, import_util138.isFunction)(cfg)) { - attrCfg.callback = cfg; - } else { - attrCfg.values = cfg; - } - } - (0, import_util138.set)(this.attributeOption, attrName, attrCfg); - } - }; - Geometry3.prototype.initAttributes = function() { - var _this = this; - var _a6 = this, attributes = _a6.attributes, attributeOption = _a6.attributeOption, theme4 = _a6.theme, shapeType = _a6.shapeType; - this.groupScales = []; - var tmpMap = {}; - var _loop_1 = function(attrType2) { - if (attributeOption.hasOwnProperty(attrType2)) { - var option = attributeOption[attrType2]; - if (!option) { - return { value: void 0 }; - } - var attrCfg = __assign({}, option); - var callback = attrCfg.callback, values4 = attrCfg.values, _b = attrCfg.fields, fields = _b === void 0 ? [] : _b; - var scales = fields.map(function(field6) { - var scale12 = _this.scales[field6]; - if (scale12.isCategory && !tmpMap[field6] && GROUP_ATTRS.includes(attrType2)) { - _this.groupScales.push(scale12); - tmpMap[field6] = true; - } - return scale12; - }); - attrCfg.scales = scales; - if (attrType2 !== "position" && scales.length === 1 && scales[0].type === "identity") { - attrCfg.values = scales[0].values; - } else if (!callback && !values4) { - if (attrType2 === "size") { - attrCfg.values = theme4.sizes; - } else if (attrType2 === "shape") { - attrCfg.values = theme4.shapes[shapeType] || []; - } else if (attrType2 === "color") { - if (scales.length) { - attrCfg.values = scales[0].values.length <= 10 ? theme4.colors10 : theme4.colors20; - } else { - attrCfg.values = theme4.colors10; - } - } - } - var AttributeCtor = getAttribute(attrType2); - attributes[attrType2] = new AttributeCtor(attrCfg); - } - }; - for (var attrType in attributeOption) { - var state_1 = _loop_1(attrType); - if (typeof state_1 === "object") - return state_1.value; - } - }; - Geometry3.prototype.processData = function(data3) { - this.hasSorted = false; - var scales = this.getAttribute("position").scales; - var categoryScales = scales.filter(function(scale13) { - return scale13.isCategory; - }); - var groupedArray = this.groupData(data3); - var beforeAdjust = []; - for (var i4 = 0, len5 = groupedArray.length; i4 < len5; i4++) { - var subData = groupedArray[i4]; - var arr = []; - for (var j4 = 0, subLen = subData.length; j4 < subLen; j4++) { - var originData = subData[j4]; - var item = {}; - for (var k4 in originData) { - item[k4] = originData[k4]; - } - item[FIELD_ORIGIN] = originData; - for (var _i = 0, categoryScales_1 = categoryScales; _i < categoryScales_1.length; _i++) { - var scale12 = categoryScales_1[_i]; - var field6 = scale12.field; - item[field6] = scale12.translate(item[field6]); - } - arr.push(item); - } - beforeAdjust.push(arr); - } - var dataArray = this.adjustData(beforeAdjust); - this.beforeMappingData = dataArray; - return dataArray; - }; - Geometry3.prototype.adjustData = function(dataArray) { - var adjustOption = this.adjustOption; - var _a6 = this, intervalPadding = _a6.intervalPadding, dodgePadding = _a6.dodgePadding, theme4 = _a6.theme; - var maxColumnWidth = this.maxColumnWidth || theme4.maxColumnWidth; - var minColumnWidth = this.minColumnWidth || theme4.minColumnWidth; - var columnWidthRatio = this.columnWidthRatio || theme4.columnWidthRatio; - var result = dataArray; - if (adjustOption) { - var xScale = this.getXScale(); - var yScale = this.getYScale(); - var xField = xScale.field; - var yField = yScale ? yScale.field : null; - var xDimensionLength = getXDimensionLength(this.coordinate); - var groupNum = xScale.values.length; - var sizeAttr = this.getAttribute("size"); - var defaultSize = void 0; - if (sizeAttr) { - defaultSize = sizeAttr.values[0]; - } - for (var i4 = 0, len5 = adjustOption.length; i4 < len5; i4++) { - var adjust4 = adjustOption[i4]; - var adjustCfg2 = __assign({ xField, yField, intervalPadding, dodgePadding, xDimensionLength, groupNum, defaultSize, maxColumnWidth, minColumnWidth, columnWidthRatio }, adjust4); - var type2 = adjust4.type; - if (type2 === "dodge") { - var adjustNames = []; - if (xScale.isCategory || xScale.type === "identity") { - adjustNames.push("x"); - } else if (!yScale) { - adjustNames.push("y"); - } else { - throw new Error("dodge is not support linear attribute, please use category attribute!"); - } - adjustCfg2.adjustNames = adjustNames; - adjustCfg2.dodgeRatio = columnWidthRatio; - } else if (type2 === "stack") { - var coordinate11 = this.coordinate; - if (!yScale) { - adjustCfg2.height = coordinate11.getHeight(); - var size14 = this.getDefaultValue("size") || 3; - adjustCfg2.size = size14; - } - if (!coordinate11.isTransposed && (0, import_util138.isNil)(adjustCfg2.reverseOrder)) { - adjustCfg2.reverseOrder = true; - } - } - var adjustCtor = getAdjust(type2); - var adjustInstance = new adjustCtor(adjustCfg2); - result = adjustInstance.process(result); - this.adjusts[type2] = adjustInstance; - } - } - return result; - }; - Geometry3.prototype.groupData = function(data3) { - var groupScales = this.getGroupScales(); - var scaleDefs = this.scaleDefs; - var appendConditions = {}; - var groupFields = []; - for (var index2 = 0; index2 < groupScales.length; index2++) { - var scale12 = groupScales[index2]; - var field6 = scale12.field; - groupFields.push(field6); - if ((0, import_util138.get)(scaleDefs, [field6, "values"])) { - appendConditions[field6] = scaleDefs[field6].values; - } - } - return group2(data3, groupFields, appendConditions); - }; - Geometry3.prototype.updateStackRange = function(scale12, dataArray) { - var mergeArray = (0, import_util138.flatten)(dataArray); - var field6 = scale12.field; - var min13 = scale12.min; - var max15 = scale12.max; - for (var index2 = 0; index2 < mergeArray.length; index2++) { - var obj = mergeArray[index2]; - var tmpMin = Math.min.apply(null, obj[field6]); - var tmpMax = Math.max.apply(null, obj[field6]); - if (tmpMin < min13) { - min13 = tmpMin; - } - if (tmpMax > max15) { - max15 = tmpMax; - } - } - var scaleDefs = this.scaleDefs; - var cfg = {}; - if (min13 < scale12.min && !(0, import_util138.get)(scaleDefs, [field6, "min"])) { - cfg.min = min13; - } - if (max15 > scale12.max && !(0, import_util138.get)(scaleDefs, [field6, "max"])) { - cfg.max = max15; - } - scale12.change(cfg); - }; - Geometry3.prototype.beforeMapping = function(beforeMappingData) { - var source = beforeMappingData; - if (this.sortable) { - this.sort(source); - } - if (this.generatePoints) { - for (var index2 = 0, length_5 = source.length; index2 < length_5; index2++) { - var currentData = source[index2]; - this.generateShapePoints(currentData); - var nextData = source[index2 + 1]; - if (nextData) { - this.generateShapePoints(nextData); - currentData[0].nextPoints = nextData[0].points; - } - } - } - return source; - }; - Geometry3.prototype.generateShapePoints = function(data3) { - var shapeFactory = this.getShapeFactory(); - var shapeAttr = this.getAttribute("shape"); - for (var index2 = 0; index2 < data3.length; index2++) { - var obj = data3[index2]; - var cfg = this.createShapePointsCfg(obj); - var shape = shapeAttr ? this.getAttributeValues(shapeAttr, obj) : null; - var points = shapeFactory.getShapePoints(shape, cfg); - obj.points = points; - } - }; - Geometry3.prototype.normalizeValues = function(values4, scale12) { - var rst = []; - if ((0, import_util138.isArray)(values4)) { - for (var index2 = 0; index2 < values4.length; index2++) { - var value2 = values4[index2]; - rst.push(scale12.scale(value2)); - } - } else { - rst = scale12.scale(values4); - } - return rst; - }; - Geometry3.prototype.mapping = function(data3) { - var attributes = this.attributes; - var mappingData = []; - for (var index2 = 0; index2 < data3.length; index2++) { - var record = data3[index2]; - var newRecord = { - _origin: record[FIELD_ORIGIN], - points: record.points, - nextPoints: record.nextPoints - }; - for (var k4 in attributes) { - if (attributes.hasOwnProperty(k4)) { - var attr = attributes[k4]; - var names = attr.names; - var values4 = this.getAttributeValues(attr, record); - if (names.length > 1) { - for (var j4 = 0; j4 < values4.length; j4 += 1) { - var val = values4[j4]; - var name_1 = names[j4]; - newRecord[name_1] = (0, import_util138.isArray)(val) && val.length === 1 ? val[0] : val; - } - } else { - newRecord[names[0]] = values4.length === 1 ? values4[0] : values4; - } - } - } - this.convertPoint(newRecord); - mappingData.push(newRecord); - } - return mappingData; - }; - Geometry3.prototype.convertPoint = function(mappingRecord) { - var x6 = mappingRecord.x, y5 = mappingRecord.y; - var rstX; - var rstY; - var obj; - var coordinate11 = this.coordinate; - if ((0, import_util138.isArray)(x6) && (0, import_util138.isArray)(y5)) { - rstX = []; - rstY = []; - for (var i4 = 0, j4 = 0, xLen = x6.length, yLen = y5.length; i4 < xLen && j4 < yLen; i4 += 1, j4 += 1) { - obj = coordinate11.convert({ - x: x6[i4], - y: y5[j4] - }); - rstX.push(obj.x); - rstY.push(obj.y); - } - } else if ((0, import_util138.isArray)(y5)) { - rstY = []; - for (var index2 = 0; index2 < y5.length; index2++) { - var yVal = y5[index2]; - obj = coordinate11.convert({ - x: x6, - y: yVal - }); - if (rstX && rstX !== obj.x) { - if (!(0, import_util138.isArray)(rstX)) { - rstX = [rstX]; - } - rstX.push(obj.x); - } else { - rstX = obj.x; - } - rstY.push(obj.y); - } - } else if ((0, import_util138.isArray)(x6)) { - rstX = []; - for (var index2 = 0; index2 < x6.length; index2++) { - var xVal = x6[index2]; - obj = coordinate11.convert({ - x: xVal, - y: y5 - }); - if (rstY && rstY !== obj.y) { - if (!(0, import_util138.isArray)(rstY)) { - rstY = [rstY]; - } - rstY.push(obj.y); - } else { - rstY = obj.y; - } - rstX.push(obj.x); - } - } else { - var point2 = coordinate11.convert({ - x: x6, - y: y5 - }); - rstX = point2.x; - rstY = point2.y; - } - mappingRecord.x = rstX; - mappingRecord.y = rstY; - }; - Geometry3.prototype.getStyleCfg = function(styleOption, originData) { - var _a6 = styleOption.fields, fields = _a6 === void 0 ? [] : _a6, callback = styleOption.callback, cfg = styleOption.cfg; - if (cfg) { - return cfg; - } - var params = fields.map(function(field6) { - return originData[field6]; - }); - return callback.apply(void 0, params); - }; - Geometry3.prototype.setCfg = function(cfg) { - var _this = this; - var coordinate11 = cfg.coordinate, data3 = cfg.data, theme4 = cfg.theme, scaleDefs = cfg.scaleDefs; - if (coordinate11) { - this.coordinate = coordinate11; - } - if (data3) { - this.data = data3; - } - if (scaleDefs) { - this.scaleDefs = scaleDefs; - this.idFields = []; - (0, import_util138.each)(scaleDefs, function(scaleDef, field6) { - if (scaleDef && scaleDef.key) { - _this.idFields.push(field6); - } - }); - } - if (theme4) { - this.theme = this.userTheme ? (0, import_util138.deepMix)({}, theme4, this.userTheme) : theme4; - } - }; - Geometry3.prototype.renderLabels = function(mappingArray, isUpdate) { - if (isUpdate === void 0) { - isUpdate = false; - } - var geometryLabel = this.geometryLabel; - if (!geometryLabel) { - var labelType = this.getLabelType(); - var GeometryLabelsCtor = getGeometryLabel(labelType); - geometryLabel = new GeometryLabelsCtor(this); - this.geometryLabel = geometryLabel; - } - geometryLabel.render(mappingArray, isUpdate); - var labelsMap = geometryLabel.labelsRenderer.shapesMap; - (0, import_util138.each)(this.elementsMap, function(element, id) { - var labels = filterLabelsById(id, labelsMap); - if (labels.length) { - element.labelShape = labels; - for (var i4 = 0; i4 < labels.length; i4++) { - var label17 = labels[i4]; - var labelChildren = label17.getChildren(); - for (var j4 = 0; j4 < labelChildren.length; j4++) { - var child = labelChildren[j4]; - child.cfg.name = ["element", "label"]; - child.cfg.element = element; - } - } - } - }); - }; - Geometry3.prototype.canDoGroupAnimation = function(isUpdate) { - return !isUpdate && this.animateOption && ((0, import_util138.get)(this.animateOption, "appear") === void 0 || (0, import_util138.get)(this.animateOption, "appear") && (0, import_util138.get)(this.animateOption, ["appear", "animation"]) === void 0); - }; - return Geometry3; -}(base_default); -var base_default13 = Geometry; - -// node_modules/@antv/g2/esm/geometry/label/base.js -var import_util143 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/component/labels.js -var import_util141 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/geometry/label/util/index.js -var import_util139 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/util/transform.js -var transform3 = ext_exports.transform; -function translate3(element, x6, y5) { - var matrix = transform3(element.getMatrix(), [["t", x6, y5]]); - element.setMatrix(matrix); -} -function getRotateMatrix(element, rotateRadian) { - var _a6 = element.attr(), x6 = _a6.x, y5 = _a6.y; - var matrix = transform3(element.getMatrix(), [ - ["t", -x6, -y5], - ["r", rotateRadian], - ["t", x6, y5] - ]); - return matrix; -} -function rotate5(element, rotateRadian) { - var matrix = getRotateMatrix(element, rotateRadian); - element.setMatrix(matrix); -} -function zoom(element, ratio) { - var bbox = element.getBBox(); - var x6 = (bbox.minX + bbox.maxX) / 2; - var y5 = (bbox.minY + bbox.maxY) / 2; - element.applyToMatrix([x6, y5, 1]); - var matrix = transform3(element.getMatrix(), [ - ["t", -x6, -y5], - ["s", ratio, ratio], - ["t", x6, y5] - ]); - element.setMatrix(matrix); -} - -// node_modules/@antv/g2/esm/geometry/label/util/index.js -function findLabelTextShape(label17) { - return label17.find(function(el) { - return el.get("type") === "text"; - }); -} -function getlLabelBackgroundInfo(labelGroup, labelItem, padding3) { - if (padding3 === void 0) { - padding3 = [0, 0, 0, 0]; - } - var content = labelGroup.getChildren()[0]; - if (content) { - var labelShape = content.clone(); - if (labelItem === null || labelItem === void 0 ? void 0 : labelItem.rotate) { - rotate5(labelShape, -labelItem.rotate); - } - var _a6 = labelShape.getCanvasBBox(), x6 = _a6.x, y5 = _a6.y, width2 = _a6.width, height = _a6.height; - labelShape.destroy(); - var boxPadding = padding3; - if ((0, import_util139.isNil)(boxPadding)) { - boxPadding = [2, 2, 2, 2]; - } else if ((0, import_util139.isNumber)(boxPadding)) { - boxPadding = new Array(4).fill(boxPadding); - } - return { - x: x6 - boxPadding[3], - y: y5 - boxPadding[0], - width: width2 + boxPadding[1] + boxPadding[3], - height: height + boxPadding[0] + boxPadding[2], - rotation: (labelItem === null || labelItem === void 0 ? void 0 : labelItem.rotate) || 0 - }; - } -} -function getOverlapArea(a4, b10, margin) { - if (margin === void 0) { - margin = 0; - } - var xOverlap = Math.max(0, Math.min(a4.x + a4.width + margin, b10.x + b10.width + margin) - Math.max(a4.x - margin, b10.x - margin)); - var yOverlap = Math.max(0, Math.min(a4.y + a4.height + margin, b10.y + b10.height + margin) - Math.max(a4.y - margin, b10.y - margin)); - return xOverlap * yOverlap; -} -function checkShapeOverlap(cur, dones) { - var box2 = cur.getBBox(); - return (0, import_util139.some)(dones, function(done) { - var target = done.getBBox(); - return getOverlapArea(box2, target, 2) > 0; - }); -} - -// node_modules/@antv/g2/esm/component/update-label.js -var import_util140 = __toModule(require_lib()); -function updateLabel(fromShape, toShape, cfg) { - var data3 = cfg.data, origin = cfg.origin, animateCfg = cfg.animateCfg, coordinate11 = cfg.coordinate; - var updateAnimateCfg = (0, import_util140.get)(animateCfg, "update"); - fromShape.set("data", data3); - fromShape.set("origin", origin); - fromShape.set("animateCfg", animateCfg); - fromShape.set("coordinate", coordinate11); - fromShape.set("visible", toShape.get("visible")); - fromShape.getChildren().forEach(function(fromChild, idx) { - var toChild = toShape.getChildByIndex(idx); - if (!toChild) { - fromShape.removeChild(fromChild); - fromChild.remove(true); - } else { - fromChild.set("data", data3); - fromChild.set("origin", origin); - fromChild.set("animateCfg", animateCfg); - fromChild.set("coordinate", coordinate11); - var newAttrs = getReplaceAttrs(fromChild, toChild); - if (updateAnimateCfg) { - doAnimate(fromChild, updateAnimateCfg, { - toAttrs: newAttrs, - coordinate: coordinate11 - }); - } else { - fromChild.attr(newAttrs); - } - if (toChild.isGroup()) { - updateLabel(fromChild, toChild, cfg); - } - } - }); - (0, import_util140.each)(toShape.getChildren(), function(child, idx) { - if (idx >= fromShape.getCount()) { - if (!child.destroyed) { - fromShape.add(child); - } - } - }); -} - -// node_modules/@antv/g2/esm/component/labels.js -var Labels = function() { - function Labels2(cfg) { - this.shapesMap = {}; - this.lastShapesMap = {}; - var layout6 = cfg.layout, container2 = cfg.container; - this.layout = layout6; - this.container = container2; - } - Labels2.prototype.render = function(items, shapes, isUpdate) { - var _this = this; - if (isUpdate === void 0) { - isUpdate = false; - } - this.shapesMap = {}; - var container2 = this.container; - var offscreenGroup = this.createOffscreenGroup(); - if (items.length) { - for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { - var item = items_1[_i]; - if (item) { - this.renderLabel(item, offscreenGroup); - } - } - this.doLayout(items, shapes); - this.renderLabelLine(items); - this.renderLabelBackground(items); - this.adjustLabel(items); - } - var lastShapesMap = this.lastShapesMap; - var shapesMap = this.shapesMap; - (0, import_util141.each)(shapesMap, function(shape, id) { - if (shape.destroyed) { - delete shapesMap[id]; - } else { - if (lastShapesMap[id]) { - var data3 = shape.get("data"); - var origin_1 = shape.get("origin"); - var coordinate11 = shape.get("coordinate"); - var currentAnimateCfg = shape.get("animateCfg"); - var currentShape = lastShapesMap[id]; - updateLabel(currentShape, shapesMap[id], { - data: data3, - origin: origin_1, - animateCfg: currentAnimateCfg, - coordinate: coordinate11 - }); - _this.shapesMap[id] = currentShape; - } else { - container2.add(shape); - var animateCfg = (0, import_util141.get)(shape.get("animateCfg"), isUpdate ? "enter" : "appear"); - if (animateCfg) { - doAnimate(shape, animateCfg, { - toAttrs: __assign({}, shape.attr()), - coordinate: shape.get("coordinate") - }); - } - } - delete lastShapesMap[id]; - } - }); - (0, import_util141.each)(lastShapesMap, function(deleteShape) { - var animateCfg = (0, import_util141.get)(deleteShape.get("animateCfg"), "leave"); - if (animateCfg) { - doAnimate(deleteShape, animateCfg, { - toAttrs: null, - coordinate: deleteShape.get("coordinate") - }); - } else { - deleteShape.remove(true); - } - }); - this.lastShapesMap = shapesMap; - offscreenGroup.destroy(); - }; - Labels2.prototype.clear = function() { - this.container.clear(); - this.shapesMap = {}; - this.lastShapesMap = {}; - }; - Labels2.prototype.destroy = function() { - this.container.destroy(); - this.shapesMap = null; - this.lastShapesMap = null; - }; - Labels2.prototype.renderLabel = function(cfg, container2) { - var id = cfg.id, elementId = cfg.elementId, data3 = cfg.data, mappingData = cfg.mappingData, coordinate11 = cfg.coordinate, animate = cfg.animate, content = cfg.content; - var shapeAppendCfg = { - id, - elementId, - data: data3, - origin: __assign(__assign({}, mappingData), { data: mappingData[FIELD_ORIGIN] }), - coordinate: coordinate11 - }; - var labelGroup = container2.addGroup(__assign({ - name: "label", - animateCfg: this.animate === false || animate === null || animate === false ? false : (0, import_util141.deepMix)({}, this.animate, animate) - }, shapeAppendCfg)); - var labelShape; - if (content.isGroup && content.isGroup() || content.isShape && content.isShape()) { - var _a6 = content.getCanvasBBox(), width2 = _a6.width, height = _a6.height; - var textAlign = (0, import_util141.get)(cfg, "textAlign", "left"); - var x6 = cfg.x; - var y5 = cfg.y - height / 2; - if (textAlign === "center") { - x6 = x6 - width2 / 2; - } else if (textAlign === "right" || textAlign === "end") { - x6 = x6 - width2; - } - translate3(content, x6, y5); - labelShape = content; - labelGroup.add(content); - } else { - var fill = (0, import_util141.get)(cfg, ["style", "fill"]); - labelShape = labelGroup.addShape("text", __assign({ attrs: __assign(__assign({ x: cfg.x, y: cfg.y, textAlign: cfg.textAlign, textBaseline: (0, import_util141.get)(cfg, "textBaseline", "middle"), text: cfg.content }, cfg.style), { fill: (0, import_util141.isNull)(fill) ? cfg.color : fill }) }, shapeAppendCfg)); - } - if (cfg.rotate) { - rotate5(labelShape, cfg.rotate); - } - this.shapesMap[id] = labelGroup; - }; - Labels2.prototype.doLayout = function(items, shapes) { - var _this = this; - if (this.layout) { - var layouts = (0, import_util141.isArray)(this.layout) ? this.layout : [this.layout]; - (0, import_util141.each)(layouts, function(layout6) { - var layoutFn = getGeometryLabelLayout((0, import_util141.get)(layout6, "type", "")); - if (layoutFn) { - var labelShapes_1 = []; - var geometryShapes_1 = []; - (0, import_util141.each)(_this.shapesMap, function(labelShape, id) { - labelShapes_1.push(labelShape); - geometryShapes_1.push(shapes[labelShape.get("elementId")]); - }); - layoutFn(items, labelShapes_1, geometryShapes_1, _this.region, layout6.cfg); - } - }); - } - }; - Labels2.prototype.renderLabelLine = function(labelItems) { - var _this = this; - (0, import_util141.each)(labelItems, function(labelItem) { - var coordinate11 = (0, import_util141.get)(labelItem, "coordinate"); - if (!labelItem || !coordinate11) { - return; - } - var center2 = coordinate11.getCenter(); - var radius = coordinate11.getRadius(); - if (!labelItem.labelLine) { - return; - } - var labelLineCfg = (0, import_util141.get)(labelItem, "labelLine", {}); - var id = labelItem.id; - var path = labelLineCfg.path; - if (!path) { - var start = polarToCartesian(center2.x, center2.y, radius, labelItem.angle); - path = [ - ["M", start.x, start.y], - ["L", labelItem.x, labelItem.y] - ]; - } - var labelGroup = _this.shapesMap[id]; - if (!labelGroup.destroyed) { - labelGroup.addShape("path", { - capture: false, - attrs: __assign({ path, stroke: labelItem.color ? labelItem.color : (0, import_util141.get)(labelItem, ["style", "fill"], "#000"), fill: null }, labelLineCfg.style), - id, - origin: labelItem.mappingData, - data: labelItem.data, - coordinate: labelItem.coordinate - }); - } - }); - }; - Labels2.prototype.renderLabelBackground = function(labelItems) { - var _this = this; - (0, import_util141.each)(labelItems, function(labelItem) { - var coordinate11 = (0, import_util141.get)(labelItem, "coordinate"); - var background = (0, import_util141.get)(labelItem, "background"); - if (!background || !coordinate11) { - return; - } - var id = labelItem.id; - var labelGroup = _this.shapesMap[id]; - if (!labelGroup.destroyed) { - var labelContentShape = labelGroup.getChildren()[0]; - if (labelContentShape) { - var _a6 = getlLabelBackgroundInfo(labelGroup, labelItem, background.padding), rotation = _a6.rotation, box2 = __rest(_a6, ["rotation"]); - var backgroundShape = labelGroup.addShape("rect", { - attrs: __assign(__assign({}, box2), background.style || {}), - id, - origin: labelItem.mappingData, - data: labelItem.data, - coordinate: labelItem.coordinate - }); - backgroundShape.setZIndex(-1); - if (rotation) { - var matrix = labelContentShape.getMatrix(); - backgroundShape.setMatrix(matrix); - } - } - } - }); - }; - Labels2.prototype.createOffscreenGroup = function() { - var container2 = this.container; - var GroupClass = container2.getGroupBase(); - var newGroup = new GroupClass({}); - return newGroup; - }; - Labels2.prototype.adjustLabel = function(items) { - var _this = this; - (0, import_util141.each)(items, function(item) { - if (item) { - var id = item.id; - var labelGroup = _this.shapesMap[id]; - if (!labelGroup.destroyed) { - var labelShapes = labelGroup.findAll(function(ele) { - return ele.get("type") !== "path"; - }); - (0, import_util141.each)(labelShapes, function(labelShape) { - if (labelShape) { - if (item.offsetX) { - labelShape.attr("x", labelShape.attr("x") + item.offsetX); - } - if (item.offsetY) { - labelShape.attr("y", labelShape.attr("y") + item.offsetY); - } - } - }); - } - } - }); - }; - return Labels2; -}(); -var labels_default = Labels; - -// node_modules/@antv/g2/esm/geometry/label/base.js -function avg(arr) { - var sum = 0; - (0, import_util143.each)(arr, function(value2) { - sum += value2; - }); - return sum / arr.length; -} -var GeometryLabel = function() { - function GeometryLabel2(geometry35) { - this.geometry = geometry35; - } - GeometryLabel2.prototype.getLabelItems = function(mapppingArray) { - var _this = this; - var items = []; - var labelCfgs = this.getLabelCfgs(mapppingArray); - (0, import_util143.each)(mapppingArray, function(mappingData, index2) { - var labelCfg = labelCfgs[index2]; - if (!labelCfg || (0, import_util143.isNil)(mappingData.x) || (0, import_util143.isNil)(mappingData.y)) { - items.push(null); - return; - } - var labelContent = !(0, import_util143.isArray)(labelCfg.content) ? [labelCfg.content] : labelCfg.content; - labelCfg.content = labelContent; - var total = labelContent.length; - (0, import_util143.each)(labelContent, function(content, subIndex) { - if ((0, import_util143.isNil)(content) || content === "") { - items.push(null); - return; - } - var item = __assign(__assign({}, labelCfg), _this.getLabelPoint(labelCfg, mappingData, subIndex)); - if (!item.textAlign) { - item.textAlign = _this.getLabelAlign(item, subIndex, total); - } - if (item.offset <= 0) { - item.labelLine = null; - } - items.push(item); - }); - }); - return items; - }; - GeometryLabel2.prototype.render = function(mapppingArray, isUpdate) { - if (isUpdate === void 0) { - isUpdate = false; - } - var labelItems = this.getLabelItems(mapppingArray); - var labelsRenderer = this.getLabelsRenderer(); - var shapes = this.getGeometryShapes(); - labelsRenderer.render(labelItems, shapes, isUpdate); - }; - GeometryLabel2.prototype.clear = function() { - var labelsRenderer = this.labelsRenderer; - if (labelsRenderer) { - labelsRenderer.clear(); - } - }; - GeometryLabel2.prototype.destroy = function() { - var labelsRenderer = this.labelsRenderer; - if (labelsRenderer) { - labelsRenderer.destroy(); - } - this.labelsRenderer = null; - }; - GeometryLabel2.prototype.getCoordinate = function() { - return this.geometry.coordinate; - }; - GeometryLabel2.prototype.getDefaultLabelCfg = function(offset, position2) { - var geometry35 = this.geometry; - var type2 = geometry35.type, theme4 = geometry35.theme; - if (type2 === "polygon" || type2 === "interval" && position2 === "middle" || offset < 0 && !["line", "point", "path"].includes(type2)) { - return (0, import_util143.get)(theme4, "innerLabels", {}); - } - return (0, import_util143.get)(theme4, "labels", {}); - }; - GeometryLabel2.prototype.getThemedLabelCfg = function(labelCfg) { - var geometry35 = this.geometry; - var defaultLabelCfg3 = this.getDefaultLabelCfg(); - var type2 = geometry35.type, theme4 = geometry35.theme; - var themedLabelCfg; - if (type2 === "polygon" || labelCfg.offset < 0 && !["line", "point", "path"].includes(type2)) { - themedLabelCfg = (0, import_util143.deepMix)({}, defaultLabelCfg3, theme4.innerLabels, labelCfg); - } else { - themedLabelCfg = (0, import_util143.deepMix)({}, defaultLabelCfg3, theme4.labels, labelCfg); - } - return themedLabelCfg; - }; - GeometryLabel2.prototype.setLabelPosition = function(labelPointCfg, mappingData, index2, position2) { - }; - GeometryLabel2.prototype.getLabelOffset = function(offset) { - var coordinate11 = this.getCoordinate(); - var vector = this.getOffsetVector(offset); - return coordinate11.isTransposed ? vector[0] : vector[1]; - }; - GeometryLabel2.prototype.getLabelOffsetPoint = function(labelCfg, index2, total) { - var offset = labelCfg.offset; - var coordinate11 = this.getCoordinate(); - var transposed = coordinate11.isTransposed; - var dim = transposed ? "x" : "y"; - var factor = transposed ? 1 : -1; - var offsetPoint = { - x: 0, - y: 0 - }; - if (index2 > 0 || total === 1) { - offsetPoint[dim] = offset * factor; - } else { - offsetPoint[dim] = offset * factor * -1; - } - return offsetPoint; - }; - GeometryLabel2.prototype.getLabelPoint = function(labelCfg, mappingData, index2) { - var coordinate11 = this.getCoordinate(); - var total = labelCfg.content.length; - function getDimValue(value2, idx, isAvg) { - if (isAvg === void 0) { - isAvg = false; - } - var v3 = value2; - if ((0, import_util143.isArray)(v3)) { - if (labelCfg.content.length === 1) { - if (isAvg) { - v3 = avg(v3); - } else { - if (v3.length <= 2) { - v3 = v3[value2.length - 1]; - } else { - v3 = avg(v3); - } - } - } else { - v3 = v3[idx]; - } - } - return v3; - } - var label17 = { - content: labelCfg.content[index2], - x: 0, - y: 0, - start: { x: 0, y: 0 }, - color: "#fff" - }; - var shape = (0, import_util143.isArray)(mappingData.shape) ? mappingData.shape[0] : mappingData.shape; - var isFunnel = shape === "funnel" || shape === "pyramid"; - if (this.geometry.type === "polygon") { - var centroid = getPolygonCentroid(mappingData.x, mappingData.y); - label17.x = centroid[0]; - label17.y = centroid[1]; - } else if (this.geometry.type === "interval" && !isFunnel) { - label17.x = getDimValue(mappingData.x, index2, true); - label17.y = getDimValue(mappingData.y, index2); - } else { - label17.x = getDimValue(mappingData.x, index2); - label17.y = getDimValue(mappingData.y, index2); - } - if (isFunnel) { - var nextPoints = (0, import_util143.get)(mappingData, "nextPoints"); - var points = (0, import_util143.get)(mappingData, "points"); - if (nextPoints) { - var point1 = coordinate11.convert(points[1]); - var point2 = coordinate11.convert(nextPoints[1]); - label17.x = (point1.x + point2.x) / 2; - label17.y = (point1.y + point2.y) / 2; - } else if (shape === "pyramid") { - var point1 = coordinate11.convert(points[1]); - var point2 = coordinate11.convert(points[2]); - label17.x = (point1.x + point2.x) / 2; - label17.y = (point1.y + point2.y) / 2; - } - } - if (labelCfg.position) { - this.setLabelPosition(label17, mappingData, index2, labelCfg.position); - } - var offsetPoint = this.getLabelOffsetPoint(labelCfg, index2, total); - label17.start = { x: label17.x, y: label17.y }; - label17.x += offsetPoint.x; - label17.y += offsetPoint.y; - label17.color = mappingData.color; - return label17; - }; - GeometryLabel2.prototype.getLabelAlign = function(item, index2, total) { - var align = "center"; - var coordinate11 = this.getCoordinate(); - if (coordinate11.isTransposed) { - var offset = item.offset; - if (offset < 0) { - align = "right"; - } else if (offset === 0) { - align = "center"; - } else { - align = "left"; - } - if (total > 1 && index2 === 0) { - if (align === "right") { - align = "left"; - } else if (align === "left") { - align = "right"; - } - } - } - return align; - }; - GeometryLabel2.prototype.getLabelId = function(mappingData) { - var geometry35 = this.geometry; - var type2 = geometry35.type; - var xScale = geometry35.getXScale(); - var yScale = geometry35.getYScale(); - var origin = mappingData[FIELD_ORIGIN]; - var labelId = geometry35.getElementId(mappingData); - if (type2 === "line" || type2 === "area") { - labelId += " ".concat(origin[xScale.field]); - } else if (type2 === "path") { - labelId += " ".concat(origin[xScale.field], "-").concat(origin[yScale.field]); - } - return labelId; - }; - GeometryLabel2.prototype.getLabelsRenderer = function() { - var _a6 = this.geometry, labelsContainer = _a6.labelsContainer, labelOption = _a6.labelOption, canvasRegion = _a6.canvasRegion, animateOption = _a6.animateOption; - var coordinate11 = this.geometry.coordinate; - var labelsRenderer = this.labelsRenderer; - if (!labelsRenderer) { - labelsRenderer = new labels_default({ - container: labelsContainer, - layout: (0, import_util143.get)(labelOption, ["cfg", "layout"], { - type: this.defaultLayout - }) - }); - this.labelsRenderer = labelsRenderer; - } - labelsRenderer.region = canvasRegion; - labelsRenderer.animate = animateOption ? getDefaultAnimateCfg("label", coordinate11) : false; - return labelsRenderer; - }; - GeometryLabel2.prototype.getLabelCfgs = function(mapppingArray) { - var _this = this; - var geometry35 = this.geometry; - var labelOption = geometry35.labelOption, scales = geometry35.scales, coordinate11 = geometry35.coordinate; - var _a6 = labelOption, fields = _a6.fields, callback = _a6.callback, cfg = _a6.cfg; - var labelScales = fields.map(function(field6) { - return scales[field6]; - }); - var labelCfgs = []; - (0, import_util143.each)(mapppingArray, function(mappingData, index2) { - var origin = mappingData[FIELD_ORIGIN]; - var originText = _this.getLabelText(origin, labelScales); - var callbackCfg; - if (callback) { - var originValues = fields.map(function(field6) { - return origin[field6]; - }); - callbackCfg = callback.apply(void 0, originValues); - if ((0, import_util143.isNil)(callbackCfg)) { - labelCfgs.push(null); - return; - } - } - var labelCfg = __assign(__assign({ - id: _this.getLabelId(mappingData), - elementId: _this.geometry.getElementId(mappingData), - data: origin, - mappingData, - coordinate: coordinate11 - }, cfg), callbackCfg); - if ((0, import_util143.isFunction)(labelCfg.position)) { - labelCfg.position = labelCfg.position(origin, mappingData, index2); - } - var offset = _this.getLabelOffset(labelCfg.offset || 0); - var defaultLabelCfg3 = _this.getDefaultLabelCfg(offset, labelCfg.position); - labelCfg = (0, import_util143.deepMix)({}, defaultLabelCfg3, labelCfg); - labelCfg.offset = _this.getLabelOffset(labelCfg.offset || 0); - var content = labelCfg.content; - if ((0, import_util143.isFunction)(content)) { - labelCfg.content = content(origin, mappingData, index2); - } else if ((0, import_util143.isUndefined)(content)) { - labelCfg.content = originText[0]; - } - labelCfgs.push(labelCfg); - }); - return labelCfgs; - }; - GeometryLabel2.prototype.getLabelText = function(origin, scales) { - var labelTexts = []; - (0, import_util143.each)(scales, function(scale12) { - var value2 = origin[scale12.field]; - if ((0, import_util143.isArray)(value2)) { - value2 = value2.map(function(subVal) { - return scale12.getText(subVal); - }); - } else { - value2 = scale12.getText(value2); - } - if ((0, import_util143.isNil)(value2) || value2 === "") { - labelTexts.push(null); - } else { - labelTexts.push(value2); - } - }); - return labelTexts; - }; - GeometryLabel2.prototype.getOffsetVector = function(offset) { - if (offset === void 0) { - offset = 0; - } - var coordinate11 = this.getCoordinate(); - var actualOffset = 0; - if ((0, import_util143.isNumber)(offset)) { - actualOffset = offset; - } - return coordinate11.isTransposed ? coordinate11.applyMatrix(actualOffset, 0) : coordinate11.applyMatrix(0, actualOffset); - }; - GeometryLabel2.prototype.getGeometryShapes = function() { - var geometry35 = this.geometry; - var shapes = {}; - (0, import_util143.each)(geometry35.elementsMap, function(element, id) { - shapes[id] = element.shape; - }); - (0, import_util143.each)(geometry35.getOffscreenGroup().getChildren(), function(child) { - var id = geometry35.getElementId(child.get("origin").mappingData); - shapes[id] = child; - }); - return shapes; - }; - return GeometryLabel2; -}(); -var base_default14 = GeometryLabel; - -// node_modules/@antv/g2/esm/util/attr.js -function getMappingValue(attr, value2, def) { - if (!attr) { - return def; - } - var r4; - if (attr.callback && attr.callback.length > 1) { - var restArgs = Array(attr.callback.length - 1).fill(""); - r4 = attr.mapping.apply(attr, __spreadArray([value2], restArgs, false)).join(""); - } else { - r4 = attr.mapping(value2).join(""); - } - return r4 || def; -} - -// node_modules/@antv/g2/esm/util/legend.js -var import_util144 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/util/marker.js -var MarkerSymbols = { - hexagon: function(x6, y5, r4) { - var diffX = r4 / 2 * Math.sqrt(3); - return [ - ["M", x6, y5 - r4], - ["L", x6 + diffX, y5 - r4 / 2], - ["L", x6 + diffX, y5 + r4 / 2], - ["L", x6, y5 + r4], - ["L", x6 - diffX, y5 + r4 / 2], - ["L", x6 - diffX, y5 - r4 / 2], - ["Z"] - ]; - }, - bowtie: function(x6, y5, r4) { - var diffY = r4 - 1.5; - return [["M", x6 - r4, y5 - diffY], ["L", x6 + r4, y5 + diffY], ["L", x6 + r4, y5 - diffY], ["L", x6 - r4, y5 + diffY], ["Z"]]; - }, - cross: function(x6, y5, r4) { - return [ - ["M", x6 - r4, y5 - r4], - ["L", x6 + r4, y5 + r4], - ["M", x6 + r4, y5 - r4], - ["L", x6 - r4, y5 + r4] - ]; - }, - tick: function(x6, y5, r4) { - return [ - ["M", x6 - r4 / 2, y5 - r4], - ["L", x6 + r4 / 2, y5 - r4], - ["M", x6, y5 - r4], - ["L", x6, y5 + r4], - ["M", x6 - r4 / 2, y5 + r4], - ["L", x6 + r4 / 2, y5 + r4] - ]; - }, - plus: function(x6, y5, r4) { - return [ - ["M", x6 - r4, y5], - ["L", x6 + r4, y5], - ["M", x6, y5 - r4], - ["L", x6, y5 + r4] - ]; - }, - hyphen: function(x6, y5, r4) { - return [ - ["M", x6 - r4, y5], - ["L", x6 + r4, y5] - ]; - }, - line: function(x6, y5, r4) { - return [ - ["M", x6, y5 - r4], - ["L", x6, y5 + r4] - ]; - } -}; - -// node_modules/@antv/g2/esm/util/legend.js -var STROKES_SYMBOLS = ["line", "cross", "tick", "plus", "hyphen"]; -function handleUserMarkerStyle(markerStyle, style) { - if ((0, import_util144.isFunction)(style)) { - return style(markerStyle); - } - return (0, import_util144.deepMix)({}, markerStyle, style); -} -function adpatorMarkerStyle(marker, color4) { - var symbol = marker.symbol; - if ((0, import_util144.isString)(symbol) && STROKES_SYMBOLS.indexOf(symbol) !== -1) { - var markerStyle = (0, import_util144.get)(marker, "style", {}); - var lineWidth = (0, import_util144.get)(markerStyle, "lineWidth", 1); - var stroke = markerStyle.stroke || markerStyle.fill || color4; - marker.style = (0, import_util144.deepMix)({}, marker.style, { lineWidth, stroke, fill: null }); - } -} -function setMarkerSymbol(marker) { - var symbol = marker.symbol; - if ((0, import_util144.isString)(symbol) && MarkerSymbols[symbol]) { - marker.symbol = MarkerSymbols[symbol]; - } -} -function getLegendLayout(direction3) { - return direction3.startsWith(DIRECTION.LEFT) || direction3.startsWith(DIRECTION.RIGHT) ? "vertical" : "horizontal"; -} -function getLegendItems(view, geometry35, attr, themeMarker, userMarker) { - var scale12 = attr.getScale(attr.type); - if (scale12.isCategory) { - var field_1 = scale12.field; - var colorAttr_1 = geometry35.getAttribute("color"); - var shapeAttr_1 = geometry35.getAttribute("shape"); - var defaultColor_1 = view.getTheme().defaultColor; - var isInPolar_1 = geometry35.coordinate.isPolar; - return scale12.getTicks().map(function(tick, index2) { - var _a6; - var text = tick.text, scaleValue = tick.value; - var name = text; - var value2 = scale12.invert(scaleValue); - var unchecked = view.filterFieldData(field_1, [(_a6 = {}, _a6[field_1] = value2, _a6)]).length === 0; - (0, import_util144.each)(view.views, function(subView) { - var _a7; - if (!subView.filterFieldData(field_1, [(_a7 = {}, _a7[field_1] = value2, _a7)]).length) { - unchecked = true; - } - }); - var color4 = getMappingValue(colorAttr_1, value2, defaultColor_1); - var shape = getMappingValue(shapeAttr_1, value2, "point"); - var marker = geometry35.getShapeMarker(shape, { - color: color4, - isInPolar: isInPolar_1 - }); - var markerCfg = userMarker; - if ((0, import_util144.isFunction)(markerCfg)) { - markerCfg = markerCfg(name, index2, __assign({ name, value: value2 }, (0, import_util144.deepMix)({}, themeMarker, marker))); - } - marker = (0, import_util144.deepMix)({}, themeMarker, marker, omit(__assign({}, markerCfg), ["style"])); - adpatorMarkerStyle(marker, color4); - if (markerCfg && markerCfg.style) { - marker.style = handleUserMarkerStyle(marker.style, markerCfg.style); - } - setMarkerSymbol(marker); - return { id: value2, name, value: value2, marker, unchecked }; - }); - } - return []; -} -function getCustomLegendItems(themeMarker, userMarker, customItems) { - return customItems.map(function(item, index2) { - var markerCfg = userMarker; - if ((0, import_util144.isFunction)(markerCfg)) { - markerCfg = markerCfg(item.name, index2, (0, import_util144.deepMix)({}, themeMarker, item)); - } - var itemMarker = (0, import_util144.isFunction)(item.marker) ? item.marker(item.name, index2, (0, import_util144.deepMix)({}, themeMarker, item)) : item.marker; - var marker = (0, import_util144.deepMix)({}, themeMarker, markerCfg, itemMarker); - setMarkerSymbol(marker); - item.marker = marker; - return item; - }); -} -function getLegendThemeCfg(theme4, direction3) { - var legendTheme = (0, import_util144.get)(theme4, ["components", "legend"], {}); - return (0, import_util144.deepMix)({}, (0, import_util144.get)(legendTheme, ["common"], {}), (0, import_util144.deepMix)({}, (0, import_util144.get)(legendTheme, [direction3], {}))); -} - -// node_modules/@antv/g2/esm/geometry/shape/util/get-path-points.js -var import_util145 = __toModule(require_lib()); -function isValueEmpty(value2) { - if (value2) { - return false; - } - return value2 === null || value2 === void 0 || isNaN(value2); -} -function isYNil(point2) { - if ((0, import_util145.isArray)(point2)) { - return isValueEmpty(point2[1].y); - } - var value2 = point2.y; - return (0, import_util145.isArray)(value2) ? isValueEmpty(value2[0]) : isValueEmpty(value2); -} -function getPathPoints(points, connectNulls, showSinglePoint) { - if (connectNulls === void 0) { - connectNulls = false; - } - if (showSinglePoint === void 0) { - showSinglePoint = true; - } - if (!points.length || points.length === 1 && !showSinglePoint) { - return []; - } - if (connectNulls) { - var filtered = []; - for (var i4 = 0, len5 = points.length; i4 < len5; i4++) { - var point2 = points[i4]; - if (!isYNil(point2)) { - filtered.push(point2); - } - } - return [filtered]; - } - var result = []; - var tmp = []; - for (var i4 = 0, len5 = points.length; i4 < len5; i4++) { - var point2 = points[i4]; - if (isYNil(point2)) { - if (tmp.length) { - if (!(tmp.length === 1 && !showSinglePoint)) { - result.push(tmp); - } - tmp = []; - } - } else { - tmp.push(point2); - } - } - if (tmp.length) { - result.push(tmp); - } - return result; -} -function getViolinPath(points) { - var path = []; - for (var i4 = 0; i4 < points.length; i4++) { - var point2 = points[i4]; - if (point2) { - var action = i4 === 0 ? "M" : "L"; - path.push([action, point2.x, point2.y]); - } - } - var first = points[0]; - if (first) { - path.push(["L", first.x, first.y]); - path.push(["z"]); - } - return path; -} -function getSmoothViolinPath(points) { - var half = points.length / 2; - var leftPoints = []; - var rightPoints = []; - for (var i4 = 0; i4 < points.length; i4++) { - if (i4 < half) { - leftPoints.push(points[i4]); - } else { - rightPoints.push(points[i4]); - } - } - var leftPath = getSplinePath(leftPoints, false); - var rightPath = getSplinePath(rightPoints, false); - if (rightPoints.length) { - leftPath.push(["L", rightPoints[0].x, rightPoints[0].y]); - } - rightPath.shift(); - var path = leftPath.concat(rightPath); - if (leftPoints.length) { - path.push(["L", leftPoints[0].x, leftPoints[0].y]); - } - path.push(["z"]); - return path; -} - -// node_modules/@antv/g2/esm/geometry/shape/line/index.js -var import_util148 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/geometry/shape/util/get-style.js -var import_util146 = __toModule(require_lib()); -function getStyle2(cfg, isStroke, isFill, sizeName) { - if (sizeName === void 0) { - sizeName = ""; - } - var _a6 = cfg.style, style = _a6 === void 0 ? {} : _a6, defaultStyle = cfg.defaultStyle, color4 = cfg.color, size14 = cfg.size; - var attrs = __assign(__assign({}, defaultStyle), style); - if (color4) { - if (isStroke) { - if (!style.stroke) { - attrs.stroke = color4; - } - } - if (isFill) { - if (!style.fill) { - attrs.fill = color4; - } - } - } - if (sizeName && (0, import_util146.isNil)(style[sizeName]) && !(0, import_util146.isNil)(size14)) { - attrs[sizeName] = size14; - } - return attrs; -} -function getBackgroundRectStyle(cfg) { - return (0, import_util146.deepMix)({}, { - fill: "#CCD6EC", - fillOpacity: 0.3 - }, (0, import_util146.get)(cfg, ["background", "style"])); -} - -// node_modules/@antv/g2/esm/geometry/shape/util/split-points.js -var import_util147 = __toModule(require_lib()); -function splitPoints(obj) { - var x6 = obj.x; - var y5 = (0, import_util147.isArray)(obj.y) ? obj.y : [obj.y]; - return y5.map(function(eachY, index2) { - return { - x: (0, import_util147.isArray)(x6) ? x6[index2] : x6, - y: eachY - }; - }); -} - -// node_modules/@antv/g2/esm/geometry/shape/line/util.js -var LineSymbols = { - line: function(x6, y5, r4) { - return [ - ["M", x6 - r4, y5], - ["L", x6 + r4, y5] - ]; - }, - dot: function(x6, y5, r4) { - return [ - ["M", x6 - r4, y5], - ["L", x6 + r4, y5] - ]; - }, - dash: function(x6, y5, r4) { - return [ - ["M", x6 - r4, y5], - ["L", x6 + r4, y5] - ]; - }, - smooth: function(x6, y5, r4) { - return [ - ["M", x6 - r4, y5], - ["A", r4 / 2, r4 / 2, 0, 1, 1, x6, y5], - ["A", r4 / 2, r4 / 2, 0, 1, 0, x6 + r4, y5] - ]; - }, - hv: function(x6, y5, r4) { - return [ - ["M", x6 - r4 - 1, y5 - 2.5], - ["L", x6, y5 - 2.5], - ["L", x6, y5 + 2.5], - ["L", x6 + r4 + 1, y5 + 2.5] - ]; - }, - vh: function(x6, y5, r4) { - return [ - ["M", x6 - r4 - 1, y5 + 2.5], - ["L", x6, y5 + 2.5], - ["L", x6, y5 - 2.5], - ["L", x6 + r4 + 1, y5 - 2.5] - ]; - }, - hvh: function(x6, y5, r4) { - return [ - ["M", x6 - (r4 + 1), y5 + 2.5], - ["L", x6 - r4 / 2, y5 + 2.5], - ["L", x6 - r4 / 2, y5 - 2.5], - ["L", x6 + r4 / 2, y5 - 2.5], - ["L", x6 + r4 / 2, y5 + 2.5], - ["L", x6 + r4 + 1, y5 + 2.5] - ]; - }, - vhv: function(x6, y5) { - return [ - ["M", x6 - 5, y5 + 2.5], - ["L", x6 - 5, y5], - ["L", x6, y5], - ["L", x6, y5 - 3], - ["L", x6, y5 + 3], - ["L", x6 + 6.5, y5 + 3] - ]; - } -}; -function getLineMarker(markerCfg, shapeType) { - var color4 = markerCfg.color; - return { - symbol: LineSymbols[shapeType], - style: { - lineWidth: 2, - r: 6, - stroke: color4 - } - }; -} - -// node_modules/@antv/g2/esm/geometry/shape/line/index.js -function getShapeAttrs(cfg, smooth, constraint) { - var isStack = cfg.isStack, connectNulls = cfg.connectNulls, isInCircle = cfg.isInCircle, showSinglePoint = cfg.showSinglePoint; - var shapeAttrs = getStyle2(cfg, true, false, "lineWidth"); - var points = getPathPoints(cfg.points, connectNulls, showSinglePoint); - var path = []; - for (var i4 = 0, len5 = points.length; i4 < len5; i4++) { - var eachLinePoints = points[i4]; - path = path.concat(getPath(eachLinePoints, isInCircle, isStack, smooth, constraint, shapeAttrs)); - } - shapeAttrs.path = path; - return shapeAttrs; -} -function getSinglePath(points, isInCircle, smooth, constraint, style) { - if (points.length === 1) { - return [ - ["M", points[0].x, points[0].y - style.lineWidth / 2], - ["L", points[0].x, points[0].y], - ["L", points[0].x, points[0].y + style.lineWidth / 2] - ]; - } - var path; - if (!smooth) { - path = getLinePath2(points, false); - if (isInCircle) { - path.push(["Z"]); - } - } else { - if (isInCircle && points.length) { - points.push({ x: points[0].x, y: points[0].y }); - } - path = getSplinePath(points, false, constraint); - } - return path; -} -function getRangePath(points, isInCircle, isStack, smooth, constraint, style) { - var topPoints = []; - var bottomPoints = []; - (0, import_util148.each)(points, function(point2) { - var result = splitPoints(point2); - topPoints.push(result[1]); - bottomPoints.push(result[0]); - }); - var topPath = getSinglePath(topPoints, isInCircle, smooth, constraint, style); - var bottomPath = getSinglePath(bottomPoints, isInCircle, smooth, constraint, style); - if (isStack) { - return topPath; - } - return topPath.concat(bottomPath); -} -function getPath(points, isInCircle, isStack, smooth, constraint, style) { - if (points.length) { - var first = points[0]; - return (0, import_util148.isArray)(first.y) ? getRangePath(points, isInCircle, isStack, smooth, constraint, style) : getSinglePath(points, isInCircle, smooth, constraint, style); - } - return []; -} -var LineShapeFactory = registerShapeFactory("line", { - defaultShapeType: "line" -}); -(0, import_util148.each)(["line", "dot", "dash", "smooth"], function(shapeType) { - registerShape("line", shapeType, { - draw: function(cfg, container2) { - var smooth = shapeType === "smooth"; - var constraint; - if (smooth) { - var _a6 = this.coordinate, start = _a6.start, end2 = _a6.end; - constraint = [ - [start.x, end2.y], - [end2.x, start.y] - ]; - } - var attrs = getShapeAttrs(cfg, smooth, constraint); - var shape = container2.addShape({ - type: "path", - attrs, - name: "line", - capture: !smooth - }); - return shape; - }, - getMarker: function(markerCfg) { - return getLineMarker(markerCfg, shapeType); - } - }); -}); - -// node_modules/@antv/g2/esm/core.js -var VERSION = "4.1.40"; -var Util = { - getLegendItems, - translate: translate3, - rotate: rotate5, - zoom, - transform: transform3, - getAngle: getAngle3, - getSectorPath, - polarToCartesian, - getDelegationObject, - getTooltipItems, - getMappingValue, - getPath, - getPathPoints -}; - -// node_modules/@antv/g2/esm/theme/style-sheet/dark.js -var WHITE_COLORS2 = { - 100: "#000", - 95: "#0D0D0D", - 85: "#262626", - 65: "#595959", - 45: "#8C8C8C", - 25: "#BFBFBF", - 15: "#D9D9D9", - 6: "#F0F0F0" -}; -var BLACK_COLORS2 = { - 100: "#FFFFFF", - 95: "#F2F2F2", - 85: "#D9D9D9", - 65: "#A6A6A6", - 45: "#737373", - 25: "#404040", - 15: "#262626", - 6: "#0F0F0F" -}; -var QUALITATIVE_102 = [ - "#5B8FF9", - "#5AD8A6", - "#5D7092", - "#F6BD16", - "#E86452", - "#6DC8EC", - "#945FB9", - "#FF9845", - "#1E9493", - "#FF99C3" -]; -var QUALITATIVE_202 = [ - "#5B8FF9", - "#CDDDFD", - "#5AD8A6", - "#CDF3E4", - "#5D7092", - "#CED4DE", - "#F6BD16", - "#FCEBB9", - "#E86452", - "#F8D0CB", - "#6DC8EC", - "#D3EEF9", - "#945FB9", - "#DECFEA", - "#FF9845", - "#FFE0C7", - "#1E9493", - "#BBDEDE", - "#FF99C3", - "#FFE0ED" -]; -var SINGLE_SEQUENCE2 = [ - "#B8E1FF", - "#9AC5FF", - "#7DAAFF", - "#5B8FF9", - "#3D76DD", - "#085EC0", - "#0047A5", - "#00318A", - "#001D70" -]; -var createDarkStyleSheet = function(cfg) { - if (cfg === void 0) { - cfg = {}; - } - var _a6 = cfg.backgroundColor, backgroundColor = _a6 === void 0 ? "#141414" : _a6, _b = cfg.subColor, subColor = _b === void 0 ? "rgba(255,255,255,0.05)" : _b, _c = cfg.paletteQualitative10, paletteQualitative10 = _c === void 0 ? QUALITATIVE_102 : _c, _d = cfg.paletteQualitative20, paletteQualitative20 = _d === void 0 ? QUALITATIVE_202 : _d, _e = cfg.paletteSemanticRed, paletteSemanticRed = _e === void 0 ? "#F4664A" : _e, _f = cfg.paletteSemanticGreen, paletteSemanticGreen = _f === void 0 ? "#30BF78" : _f, _g = cfg.paletteSemanticYellow, paletteSemanticYellow = _g === void 0 ? "#FAAD14" : _g, _h = cfg.paletteSequence, paletteSequence = _h === void 0 ? SINGLE_SEQUENCE2 : _h, _j = cfg.fontFamily, fontFamily = _j === void 0 ? '"Segoe UI", Roboto, "Helvetica Neue", Arial,\n "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",\n "Noto Color Emoji"' : _j; - var _k = cfg.brandColor, brandColor = _k === void 0 ? paletteQualitative10[0] : _k; - return { - backgroundColor, - brandColor, - subColor, - paletteQualitative10, - paletteQualitative20, - paletteSemanticRed, - paletteSemanticGreen, - paletteSemanticYellow, - paletteSequence, - fontFamily, - axisLineBorderColor: BLACK_COLORS2[25], - axisLineBorder: 1, - axisLineDash: null, - axisTitleTextFillColor: BLACK_COLORS2[65], - axisTitleTextFontSize: 12, - axisTitleTextLineHeight: 12, - axisTitleTextFontWeight: "normal", - axisTitleSpacing: 12, - axisTickLineBorderColor: BLACK_COLORS2[25], - axisTickLineLength: 4, - axisTickLineBorder: 1, - axisSubTickLineBorderColor: BLACK_COLORS2[15], - axisSubTickLineLength: 2, - axisSubTickLineBorder: 1, - axisLabelFillColor: BLACK_COLORS2[45], - axisLabelFontSize: 12, - axisLabelLineHeight: 12, - axisLabelFontWeight: "normal", - axisLabelOffset: 8, - axisGridBorderColor: BLACK_COLORS2[15], - axisGridBorder: 1, - axisGridLineDash: null, - legendTitleTextFillColor: BLACK_COLORS2[45], - legendTitleTextFontSize: 12, - legendTitleTextLineHeight: 21, - legendTitleTextFontWeight: "normal", - legendMarkerColor: QUALITATIVE_102[0], - legendMarkerSpacing: 8, - legendMarkerSize: 4, - legendCircleMarkerSize: 4, - legendSquareMarkerSize: 4, - legendLineMarkerSize: 5, - legendItemNameFillColor: BLACK_COLORS2[65], - legendItemNameFontSize: 12, - legendItemNameLineHeight: 12, - legendItemNameFontWeight: "normal", - legendItemSpacing: 24, - legendItemMarginBottom: 12, - legendSpacing: 16, - legendPadding: [8, 8, 8, 8], - legendHorizontalPadding: [8, 0, 8, 0], - legendVerticalPadding: [0, 8, 0, 8], - legendPageNavigatorMarkerSize: 12, - legendPageNavigatorMarkerInactiveFillColor: BLACK_COLORS2[45], - legendPageNavigatorMarkerInactiveFillOpacity: 0.45, - legendPageNavigatorMarkerFillColor: BLACK_COLORS2[45], - legendPageNavigatorMarkerFillOpacity: 1, - legendPageNavigatorTextFillColor: BLACK_COLORS2[65], - legendPageNavigatorTextFontSize: 12, - sliderRailFillColor: BLACK_COLORS2[15], - sliderRailBorder: 0, - sliderRailBorderColor: null, - sliderRailWidth: 100, - sliderRailHeight: 12, - sliderLabelTextFillColor: BLACK_COLORS2[45], - sliderLabelTextFontSize: 12, - sliderLabelTextLineHeight: 12, - sliderLabelTextFontWeight: "normal", - sliderHandlerFillColor: WHITE_COLORS2[6], - sliderHandlerWidth: 10, - sliderHandlerHeight: 14, - sliderHandlerBorder: 1, - sliderHandlerBorderColor: WHITE_COLORS2[25], - annotationArcBorderColor: BLACK_COLORS2[15], - annotationArcBorder: 1, - annotationLineBorderColor: BLACK_COLORS2[25], - annotationLineBorder: 1, - annotationLineDash: null, - annotationTextFillColor: BLACK_COLORS2[65], - annotationTextFontSize: 12, - annotationTextLineHeight: 12, - annotationTextFontWeight: "normal", - annotationTextBorderColor: null, - annotationTextBorder: 0, - annotationRegionFillColor: BLACK_COLORS2[100], - annotationRegionFillOpacity: 0.06, - annotationRegionBorder: 0, - annotationRegionBorderColor: null, - annotationDataMarkerLineLength: 16, - tooltipCrosshairsBorderColor: BLACK_COLORS2[25], - tooltipCrosshairsBorder: 1, - tooltipCrosshairsLineDash: null, - tooltipContainerFillColor: "#1f1f1f", - tooltipContainerFillOpacity: 0.95, - tooltipContainerShadow: "0px 2px 4px rgba(0,0,0,.5)", - tooltipContainerBorderRadius: 3, - tooltipTextFillColor: BLACK_COLORS2[65], - tooltipTextFontSize: 12, - tooltipTextLineHeight: 12, - tooltipTextFontWeight: "bold", - labelFillColor: BLACK_COLORS2[65], - labelFillColorDark: "#2c3542", - labelFillColorLight: "#ffffff", - labelFontSize: 12, - labelLineHeight: 12, - labelFontWeight: "normal", - labelBorderColor: null, - labelBorder: 0, - innerLabelFillColor: WHITE_COLORS2[100], - innerLabelFontSize: 12, - innerLabelLineHeight: 12, - innerLabelFontWeight: "normal", - innerLabelBorderColor: null, - innerLabelBorder: 0, - overflowLabelFillColor: BLACK_COLORS2[65], - overflowLabelFillColorDark: "#2c3542", - overflowLabelFillColorLight: "#ffffff", - overflowLabelFontSize: 12, - overflowLabelLineHeight: 12, - overflowLabelFontWeight: "normal", - overflowLabelBorderColor: WHITE_COLORS2[100], - overflowLabelBorder: 1, - labelLineBorder: 1, - labelLineBorderColor: BLACK_COLORS2[25], - cSliderRailHieght: 16, - cSliderBackgroundFillColor: "#416180", - cSliderBackgroundFillOpacity: 0.05, - cSliderForegroundFillColor: "#5B8FF9", - cSliderForegroundFillOpacity: 0.15, - cSliderHandlerHeight: 24, - cSliderHandlerWidth: 10, - cSliderHandlerFillColor: "#F7F7F7", - cSliderHandlerFillOpacity: 1, - cSliderHandlerHighlightFillColor: "#FFF", - cSliderHandlerBorderColor: "#BFBFBF", - cSliderHandlerBorder: 1, - cSliderHandlerBorderRadius: 2, - cSliderTextFillColor: "#fff", - cSliderTextFillOpacity: 0.45, - cSliderTextFontSize: 12, - cSliderTextLineHeight: 12, - cSliderTextFontWeight: "normal", - cSliderTextBorderColor: null, - cSliderTextBorder: 0, - scrollbarTrackFillColor: "rgba(255,255,255,0.65)", - scrollbarThumbFillColor: "rgba(0,0,0,0.35)", - scrollbarThumbHighlightFillColor: "rgba(0,0,0,0.45)", - pointFillColor: QUALITATIVE_102[0], - pointFillOpacity: 0.95, - pointSize: 4, - pointBorder: 1, - pointBorderColor: WHITE_COLORS2[100], - pointBorderOpacity: 1, - pointActiveBorderColor: BLACK_COLORS2[100], - pointSelectedBorder: 2, - pointSelectedBorderColor: BLACK_COLORS2[100], - pointInactiveFillOpacity: 0.3, - pointInactiveBorderOpacity: 0.3, - hollowPointSize: 4, - hollowPointBorder: 1, - hollowPointBorderColor: QUALITATIVE_102[0], - hollowPointBorderOpacity: 0.95, - hollowPointFillColor: WHITE_COLORS2[100], - hollowPointActiveBorder: 1, - hollowPointActiveBorderColor: BLACK_COLORS2[100], - hollowPointActiveBorderOpacity: 1, - hollowPointSelectedBorder: 2, - hollowPointSelectedBorderColor: BLACK_COLORS2[100], - hollowPointSelectedBorderOpacity: 1, - hollowPointInactiveBorderOpacity: 0.3, - lineBorder: 2, - lineBorderColor: QUALITATIVE_102[0], - lineBorderOpacity: 1, - lineActiveBorder: 3, - lineSelectedBorder: 3, - lineInactiveBorderOpacity: 0.3, - areaFillColor: QUALITATIVE_102[0], - areaFillOpacity: 0.25, - areaActiveFillColor: QUALITATIVE_102[0], - areaActiveFillOpacity: 0.5, - areaSelectedFillColor: QUALITATIVE_102[0], - areaSelectedFillOpacity: 0.5, - areaInactiveFillOpacity: 0.3, - hollowAreaBorderColor: QUALITATIVE_102[0], - hollowAreaBorder: 2, - hollowAreaBorderOpacity: 1, - hollowAreaActiveBorder: 3, - hollowAreaActiveBorderColor: BLACK_COLORS2[100], - hollowAreaSelectedBorder: 3, - hollowAreaSelectedBorderColor: BLACK_COLORS2[100], - hollowAreaInactiveBorderOpacity: 0.3, - intervalFillColor: QUALITATIVE_102[0], - intervalFillOpacity: 0.95, - intervalActiveBorder: 1, - intervalActiveBorderColor: BLACK_COLORS2[100], - intervalActiveBorderOpacity: 1, - intervalSelectedBorder: 2, - intervalSelectedBorderColor: BLACK_COLORS2[100], - intervalSelectedBorderOpacity: 1, - intervalInactiveBorderOpacity: 0.3, - intervalInactiveFillOpacity: 0.3, - hollowIntervalBorder: 2, - hollowIntervalBorderColor: QUALITATIVE_102[0], - hollowIntervalBorderOpacity: 1, - hollowIntervalFillColor: WHITE_COLORS2[100], - hollowIntervalActiveBorder: 2, - hollowIntervalActiveBorderColor: BLACK_COLORS2[100], - hollowIntervalSelectedBorder: 3, - hollowIntervalSelectedBorderColor: BLACK_COLORS2[100], - hollowIntervalSelectedBorderOpacity: 1, - hollowIntervalInactiveBorderOpacity: 0.3 - }; -}; -var antvDark = createDarkStyleSheet(); - -// node_modules/@antv/g-canvas/esm/index.js -var esm_exports = {}; -__export(esm_exports, { - AbstractCanvas: () => canvas_default, - AbstractGroup: () => group_default, - AbstractShape: () => shape_default, - Base: () => base_default2, - Canvas: () => canvas_default2, - Event: () => graph_event_default, - Group: () => group_default2, - PathUtil: () => path_exports, - Shape: () => shape_exports, - assembleFont: () => assembleFont, - getArcParams: () => getArcParams2, - getBBoxMethod: () => getMethod, - getOffScreenContext: () => getOffScreenContext, - getTextHeight: () => getTextHeight, - invert: () => invert4, - isAllowCapture: () => isAllowCapture, - multiplyVec2: () => multiplyVec2, - version: () => version -}); - -// node_modules/@antv/g-canvas/esm/shape/index.js -var shape_exports = {}; -__export(shape_exports, { - Base: () => base_default15, - Circle: () => circle_default5, - Ellipse: () => ellipse_default3, - Image: () => image_default2, - Line: () => line_default7, - Marker: () => marker_default, - Path: () => path_default2, - Polygon: () => polygon_default3, - Polyline: () => polyline_default3, - Rect: () => rect_default2, - Text: () => text_default3 -}); - -// node_modules/@antv/g-canvas/esm/util/util.js -var import_util151 = __toModule(require_lib()); -function getPixelRatio() { - return window ? window.devicePixelRatio : 1; -} -function distance8(x1, y1, x22, y22) { - var dx = x1 - x22; - var dy = y1 - y22; - return Math.sqrt(dx * dx + dy * dy); -} -function inBox(minX, minY, width2, height, x6, y5) { - return x6 >= minX && x6 <= minX + width2 && y5 >= minY && y5 <= minY + height; -} -function intersectRect2(box1, box2) { - return !(box2.minX > box1.maxX || box2.maxX < box1.minX || box2.minY > box1.maxY || box2.maxY < box1.minY); -} -function mergeRegion(region1, region2) { - if (!region1 || !region2) { - return region1 || region2; - } - return { - minX: Math.min(region1.minX, region2.minX), - minY: Math.min(region1.minY, region2.minY), - maxX: Math.max(region1.maxX, region2.maxX), - maxY: Math.max(region1.maxY, region2.maxY) - }; -} -function isSamePoint2(point1, point2) { - return point1[0] === point2[0] && point1[1] === point2[1]; -} - -// node_modules/@antv/g-canvas/esm/util/draw.js -var import_util154 = __toModule(require_lib()); - -// node_modules/@antv/g-canvas/esm/util/parse.js -var regexLG2 = /^l\s*\(\s*([\d.]+)\s*\)\s*(.*)/i; -var regexRG2 = /^r\s*\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*\)\s*(.*)/i; -var regexPR = /^p\s*\(\s*([axyn])\s*\)\s*(.*)/i; -var regexColorStop2 = /[\d.]+:(#[^\s]+|[^\)]+\))/gi; -function addStop(steps, gradient2) { - var arr = steps.match(regexColorStop2); - (0, import_util151.each)(arr, function(item) { - var itemArr = item.split(":"); - gradient2.addColorStop(itemArr[0], itemArr[1]); - }); -} -function parseLineGradient(context, element, gradientStr) { - var arr = regexLG2.exec(gradientStr); - var angle3 = parseFloat(arr[1]) % 360 * (Math.PI / 180); - var steps = arr[2]; - var box2 = element.getBBox(); - var start; - var end2; - if (angle3 >= 0 && angle3 < 1 / 2 * Math.PI) { - start = { - x: box2.minX, - y: box2.minY - }; - end2 = { - x: box2.maxX, - y: box2.maxY - }; - } else if (1 / 2 * Math.PI <= angle3 && angle3 < Math.PI) { - start = { - x: box2.maxX, - y: box2.minY - }; - end2 = { - x: box2.minX, - y: box2.maxY - }; - } else if (Math.PI <= angle3 && angle3 < 3 / 2 * Math.PI) { - start = { - x: box2.maxX, - y: box2.maxY - }; - end2 = { - x: box2.minX, - y: box2.minY - }; - } else { - start = { - x: box2.minX, - y: box2.maxY - }; - end2 = { - x: box2.maxX, - y: box2.minY - }; - } - var tanTheta = Math.tan(angle3); - var tanTheta2 = tanTheta * tanTheta; - var x6 = (end2.x - start.x + tanTheta * (end2.y - start.y)) / (tanTheta2 + 1) + start.x; - var y5 = tanTheta * (end2.x - start.x + tanTheta * (end2.y - start.y)) / (tanTheta2 + 1) + start.y; - var gradient2 = context.createLinearGradient(start.x, start.y, x6, y5); - addStop(steps, gradient2); - return gradient2; -} -function parseRadialGradient(context, element, gradientStr) { - var arr = regexRG2.exec(gradientStr); - var fx = parseFloat(arr[1]); - var fy = parseFloat(arr[2]); - var fr = parseFloat(arr[3]); - var steps = arr[4]; - if (fr === 0) { - var colors = steps.match(regexColorStop2); - return colors[colors.length - 1].split(":")[1]; - } - var box2 = element.getBBox(); - var width2 = box2.maxX - box2.minX; - var height = box2.maxY - box2.minY; - var r4 = Math.sqrt(width2 * width2 + height * height) / 2; - var gradient2 = context.createRadialGradient(box2.minX + width2 * fx, box2.minY + height * fy, 0, box2.minX + width2 / 2, box2.minY + height / 2, fr * r4); - addStop(steps, gradient2); - return gradient2; -} -function parsePattern(context, element, patternStr) { - if (element.get("patternSource") && element.get("patternSource") === patternStr) { - return element.get("pattern"); - } - var pattern2; - var img; - var arr = regexPR.exec(patternStr); - var repeat2 = arr[1]; - var source = arr[2]; - function onload() { - pattern2 = context.createPattern(img, repeat2); - element.set("pattern", pattern2); - element.set("patternSource", patternStr); - } - switch (repeat2) { - case "a": - repeat2 = "repeat"; - break; - case "x": - repeat2 = "repeat-x"; - break; - case "y": - repeat2 = "repeat-y"; - break; - case "n": - repeat2 = "no-repeat"; - break; - default: - repeat2 = "no-repeat"; - } - img = new Image(); - if (!source.match(/^data:/i)) { - img.crossOrigin = "Anonymous"; - } - img.src = source; - if (img.complete) { - onload(); - } else { - img.onload = onload; - img.src = img.src; - } - return pattern2; -} -function parseStyle(context, element, color4) { - var bbox = element.getBBox(); - if (isNaN(bbox.x) || isNaN(bbox.y) || isNaN(bbox.width) || isNaN(bbox.height)) { - return color4; - } - if ((0, import_util151.isString)(color4)) { - if (color4[1] === "(" || color4[2] === "(") { - if (color4[0] === "l") { - return parseLineGradient(context, element, color4); - } - if (color4[0] === "r") { - return parseRadialGradient(context, element, color4); - } - if (color4[0] === "p") { - return parsePattern(context, element, color4); - } - } - return color4; - } - if (color4 instanceof CanvasPattern) { - return color4; - } -} -function parseRadius(radius) { - var r1 = 0; - var r22 = 0; - var r32 = 0; - var r4 = 0; - if ((0, import_util151.isArray)(radius)) { - if (radius.length === 1) { - r1 = r22 = r32 = r4 = radius[0]; - } else if (radius.length === 2) { - r1 = r32 = radius[0]; - r22 = r4 = radius[1]; - } else if (radius.length === 3) { - r1 = radius[0]; - r22 = r4 = radius[1]; - r32 = radius[2]; - } else { - r1 = radius[0]; - r22 = radius[1]; - r32 = radius[2]; - r4 = radius[3]; - } - } else { - r1 = r22 = r32 = r4 = radius; - } - return [r1, r22, r32, r4]; -} - -// node_modules/@antv/g-canvas/esm/util/arc-params.js -function vMag2(v3) { - return Math.sqrt(v3[0] * v3[0] + v3[1] * v3[1]); -} -function vRatio2(u3, v3) { - return vMag2(u3) * vMag2(v3) ? (u3[0] * v3[0] + u3[1] * v3[1]) / (vMag2(u3) * vMag2(v3)) : 1; -} -function vAngle2(u3, v3) { - return (u3[0] * v3[1] < u3[1] * v3[0] ? -1 : 1) * Math.acos(vRatio2(u3, v3)); -} -function getArcParams2(startPoint, params) { - var rx = params[1]; - var ry = params[2]; - var xRotation = (0, import_util151.mod)((0, import_util151.toRadian)(params[3]), Math.PI * 2); - var arcFlag = params[4]; - var sweepFlag = params[5]; - var x1 = startPoint[0]; - var y1 = startPoint[1]; - var x22 = params[6]; - var y22 = params[7]; - var xp = Math.cos(xRotation) * (x1 - x22) / 2 + Math.sin(xRotation) * (y1 - y22) / 2; - var yp = -1 * Math.sin(xRotation) * (x1 - x22) / 2 + Math.cos(xRotation) * (y1 - y22) / 2; - var lambda = xp * xp / (rx * rx) + yp * yp / (ry * ry); - if (lambda > 1) { - rx *= Math.sqrt(lambda); - ry *= Math.sqrt(lambda); - } - var diff2 = rx * rx * (yp * yp) + ry * ry * (xp * xp); - var f3 = diff2 ? Math.sqrt((rx * rx * (ry * ry) - diff2) / diff2) : 1; - if (arcFlag === sweepFlag) { - f3 *= -1; - } - if (isNaN(f3)) { - f3 = 0; - } - var cxp = ry ? f3 * rx * yp / ry : 0; - var cyp = rx ? f3 * -ry * xp / rx : 0; - var cx = (x1 + x22) / 2 + Math.cos(xRotation) * cxp - Math.sin(xRotation) * cyp; - var cy = (y1 + y22) / 2 + Math.sin(xRotation) * cxp + Math.cos(xRotation) * cyp; - var u3 = [(xp - cxp) / rx, (yp - cyp) / ry]; - var v3 = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry]; - var theta = vAngle2([1, 0], u3); - var dTheta = vAngle2(u3, v3); - if (vRatio2(u3, v3) <= -1) { - dTheta = Math.PI; - } - if (vRatio2(u3, v3) >= 1) { - dTheta = 0; - } - if (sweepFlag === 0 && dTheta > 0) { - dTheta = dTheta - 2 * Math.PI; - } - if (sweepFlag === 1 && dTheta < 0) { - dTheta = dTheta + 2 * Math.PI; - } - return { - cx, - cy, - rx: isSamePoint2(startPoint, [x22, y22]) ? 0 : rx, - ry: isSamePoint2(startPoint, [x22, y22]) ? 0 : ry, - startAngle: theta, - endAngle: theta + dTheta, - xRotation, - arcFlag, - sweepFlag - }; -} - -// node_modules/@antv/g-canvas/esm/util/arrow.js -var sin = Math.sin; -var cos = Math.cos; -var atan2 = Math.atan2; -var PI = Math.PI; -function _addDefaultArrow(shape, attrs, x1, y1, x22, y22, isStart) { - var stroke = attrs.stroke, lineWidth = attrs.lineWidth; - var x6 = x1 - x22; - var y5 = y1 - y22; - var rad = atan2(y5, x6); - var arrowShape = new path_default2({ - type: "path", - canvas: shape.get("canvas"), - isArrowShape: true, - attrs: { - path: "M" + 10 * cos(PI / 6) + "," + 10 * sin(PI / 6) + " L0,0 L" + 10 * cos(PI / 6) + ",-" + 10 * sin(PI / 6), - stroke, - lineWidth - } - }); - arrowShape.translate(x22, y22); - arrowShape.rotateAtPoint(x22, y22, rad); - shape.set(isStart ? "startArrowShape" : "endArrowShape", arrowShape); -} -function _addCustomizedArrow(shape, attrs, x1, y1, x22, y22, isStart) { - var startArrow = attrs.startArrow, endArrow = attrs.endArrow, stroke = attrs.stroke, lineWidth = attrs.lineWidth; - var arrowAttrs = isStart ? startArrow : endArrow; - var d3 = arrowAttrs.d, arrowFill = arrowAttrs.fill, arrowStroke = arrowAttrs.stroke, arrowLineWidth = arrowAttrs.lineWidth, restAttrs = __rest(arrowAttrs, ["d", "fill", "stroke", "lineWidth"]); - var x6 = x1 - x22; - var y5 = y1 - y22; - var rad = atan2(y5, x6); - if (d3) { - x22 = x22 - cos(rad) * d3; - y22 = y22 - sin(rad) * d3; - } - var arrowShape = new path_default2({ - type: "path", - canvas: shape.get("canvas"), - isArrowShape: true, - attrs: __assign(__assign({}, restAttrs), { - stroke: arrowStroke || stroke, - lineWidth: arrowLineWidth || lineWidth, - fill: arrowFill - }) - }); - arrowShape.translate(x22, y22); - arrowShape.rotateAtPoint(x22, y22, rad); - shape.set(isStart ? "startArrowShape" : "endArrowShape", arrowShape); -} -function getShortenOffset(x1, y1, x22, y22, d3) { - var rad = atan2(y22 - y1, x22 - x1); - return { - dx: cos(rad) * d3, - dy: sin(rad) * d3 - }; -} -function addStartArrow(shape, attrs, x1, y1, x22, y22) { - if (typeof attrs.startArrow === "object") { - _addCustomizedArrow(shape, attrs, x1, y1, x22, y22, true); - } else if (attrs.startArrow) { - _addDefaultArrow(shape, attrs, x1, y1, x22, y22, true); - } else { - shape.set("startArrowShape", null); - } -} -function addEndArrow(shape, attrs, x1, y1, x22, y22) { - if (typeof attrs.endArrow === "object") { - _addCustomizedArrow(shape, attrs, x1, y1, x22, y22, false); - } else if (attrs.endArrow) { - _addDefaultArrow(shape, attrs, x1, y1, x22, y22, false); - } else { - shape.set("startArrowShape", null); - } -} - -// node_modules/@antv/g-canvas/esm/util/draw.js -var SHAPE_ATTRS_MAP = { - fill: "fillStyle", - stroke: "strokeStyle", - opacity: "globalAlpha" -}; -function applyAttrsToContext(context, element) { - var attrs = element.attr(); - for (var k4 in attrs) { - var v3 = attrs[k4]; - var name_1 = SHAPE_ATTRS_MAP[k4] ? SHAPE_ATTRS_MAP[k4] : k4; - if (name_1 === "matrix" && v3) { - context.transform(v3[0], v3[1], v3[3], v3[4], v3[6], v3[7]); - } else if (name_1 === "lineDash" && context.setLineDash) { - (0, import_util154.isArray)(v3) && context.setLineDash(v3); - } else { - if (name_1 === "strokeStyle" || name_1 === "fillStyle") { - v3 = parseStyle(context, element, v3); - } else if (name_1 === "globalAlpha") { - v3 = v3 * context.globalAlpha; - } - context[name_1] = v3; - } - } -} -function drawChildren(context, children, region) { - for (var i4 = 0; i4 < children.length; i4++) { - var child = children[i4]; - if (child.cfg.visible) { - child.draw(context, region); - } else { - child.skipDraw(); - } - } -} -function checkRefresh(canvas, children, region) { - var refreshElements = canvas.get("refreshElements"); - (0, import_util154.each)(refreshElements, function(el) { - if (el !== canvas) { - var parent_1 = el.cfg.parent; - while (parent_1 && parent_1 !== canvas && !parent_1.cfg.refresh) { - parent_1.cfg.refresh = true; - parent_1 = parent_1.cfg.parent; - } - } - }); - if (refreshElements[0] === canvas) { - setChildrenRefresh(children, region); - } else { - checkChildrenRefresh(children, region); - } -} -function checkChildrenRefresh(children, region) { - for (var i4 = 0; i4 < children.length; i4++) { - var child = children[i4]; - if (child.cfg.visible) { - if (child.cfg.hasChanged) { - child.cfg.refresh = true; - if (child.isGroup()) { - setChildrenRefresh(child.cfg.children, region); - } - } else if (child.cfg.refresh) { - if (child.isGroup()) { - checkChildrenRefresh(child.cfg.children, region); - } - } else { - var refresh = checkElementRefresh(child, region); - child.cfg.refresh = refresh; - if (refresh && child.isGroup()) { - checkChildrenRefresh(child.cfg.children, region); - } - } - } - } -} -function clearChanged(elements) { - for (var i4 = 0; i4 < elements.length; i4++) { - var el = elements[i4]; - el.cfg.hasChanged = false; - if (el.isGroup() && !el.destroyed) { - clearChanged(el.cfg.children); - } - } -} -function setChildrenRefresh(children, region) { - for (var i4 = 0; i4 < children.length; i4++) { - var child = children[i4]; - child.cfg.refresh = true; - if (child.isGroup()) { - setChildrenRefresh(child.get("children"), region); - } - } -} -function checkElementRefresh(shape, region) { - var bbox = shape.cfg.cacheCanvasBBox; - var isAllow = shape.cfg.isInView && bbox && intersectRect2(bbox, region); - return isAllow; -} -function drawPath(shape, context, attrs, arcParamsCache) { - var path = attrs.path, startArrow = attrs.startArrow, endArrow = attrs.endArrow; - if (!path) { - return; - } - var currentPoint = [0, 0]; - var startMovePoint = [0, 0]; - var distance15 = { - dx: 0, - dy: 0 - }; - context.beginPath(); - for (var i4 = 0; i4 < path.length; i4++) { - var params = path[i4]; - var command = params[0]; - if (i4 === 0 && startArrow && startArrow.d) { - var tangent = shape.getStartTangent(); - distance15 = getShortenOffset(tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1], startArrow.d); - } else if (i4 === path.length - 2 && path[i4 + 1][0] === "Z" && endArrow && endArrow.d) { - var lastPath = path[i4 + 1]; - if (lastPath[0] === "Z") { - var tangent = shape.getEndTangent(); - distance15 = getShortenOffset(tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1], endArrow.d); - } - } else if (i4 === path.length - 1 && endArrow && endArrow.d) { - if (path[0] !== "Z") { - var tangent = shape.getEndTangent(); - distance15 = getShortenOffset(tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1], endArrow.d); - } - } - var dx = distance15.dx, dy = distance15.dy; - switch (command) { - case "M": - context.moveTo(params[1] - dx, params[2] - dy); - startMovePoint = [params[1], params[2]]; - break; - case "L": - context.lineTo(params[1] - dx, params[2] - dy); - break; - case "Q": - context.quadraticCurveTo(params[1], params[2], params[3] - dx, params[4] - dy); - break; - case "C": - context.bezierCurveTo(params[1], params[2], params[3], params[4], params[5] - dx, params[6] - dy); - break; - case "A": { - var arcParams = void 0; - if (arcParamsCache) { - arcParams = arcParamsCache[i4]; - if (!arcParams) { - arcParams = getArcParams2(currentPoint, params); - arcParamsCache[i4] = arcParams; - } - } else { - arcParams = getArcParams2(currentPoint, params); - } - var cx = arcParams.cx, cy = arcParams.cy, rx = arcParams.rx, ry = arcParams.ry, startAngle = arcParams.startAngle, endAngle = arcParams.endAngle, xRotation = arcParams.xRotation, sweepFlag = arcParams.sweepFlag; - if (context.ellipse) { - context.ellipse(cx, cy, rx, ry, xRotation, startAngle, endAngle, 1 - sweepFlag); - } else { - var r4 = rx > ry ? rx : ry; - var scaleX = rx > ry ? 1 : rx / ry; - var scaleY = rx > ry ? ry / rx : 1; - context.translate(cx, cy); - context.rotate(xRotation); - context.scale(scaleX, scaleY); - context.arc(0, 0, r4, startAngle, endAngle, 1 - sweepFlag); - context.scale(1 / scaleX, 1 / scaleY); - context.rotate(-xRotation); - context.translate(-cx, -cy); - } - break; - } - case "Z": - context.closePath(); - break; - default: - break; - } - if (command === "Z") { - currentPoint = startMovePoint; - } else { - var len5 = params.length; - currentPoint = [params[len5 - 2], params[len5 - 1]]; - } - } -} -function refreshElement(element, changeType) { - var canvas = element.get("canvas"); - if (canvas) { - if (changeType === "remove") { - element._cacheCanvasBBox = element.get("cacheCanvasBBox"); - } - if (!element.get("hasChanged")) { - element.set("hasChanged", true); - if (!(element.cfg.parent && element.cfg.parent.get("hasChanged"))) { - canvas.refreshElement(element, changeType, canvas); - if (canvas.get("autoDraw")) { - canvas.draw(); - } - } - } - } -} -function getRefreshRegion(element) { - var region; - if (!element.destroyed) { - var cacheBox = element.get("cacheCanvasBBox"); - var validCache = cacheBox && !!(cacheBox.width && cacheBox.height); - var bbox = element.getCanvasBBox(); - var validBBox = bbox && !!(bbox.width && bbox.height); - if (validCache && validBBox) { - region = mergeRegion(cacheBox, bbox); - } else if (validCache) { - region = cacheBox; - } else if (validBBox) { - region = bbox; - } - } else { - region = element["_cacheCanvasBBox"]; - } - return region; -} -function getMergedRegion(elements) { - if (!elements.length) { - return null; - } - var minXArr = []; - var minYArr = []; - var maxXArr = []; - var maxYArr = []; - (0, import_util154.each)(elements, function(el) { - var region = getRefreshRegion(el); - if (region) { - minXArr.push(region.minX); - minYArr.push(region.minY); - maxXArr.push(region.maxX); - maxYArr.push(region.maxY); - } - }); - return { - minX: (0, import_util154.min)(minXArr), - minY: (0, import_util154.min)(minYArr), - maxX: (0, import_util154.max)(maxXArr), - maxY: (0, import_util154.max)(maxYArr) - }; -} -function mergeView(region, viewRegion) { - if (!region || !viewRegion) { - return null; - } - if (!intersectRect2(region, viewRegion)) { - return null; - } - return { - minX: Math.max(region.minX, viewRegion.minX), - minY: Math.max(region.minY, viewRegion.minY), - maxX: Math.min(region.maxX, viewRegion.maxX), - maxY: Math.min(region.maxY, viewRegion.maxY) - }; -} - -// node_modules/@antv/g-canvas/esm/group.js -var import_util156 = __toModule(require_lib()); -var Group = function(_super) { - __extends(Group3, _super); - function Group3() { - return _super !== null && _super.apply(this, arguments) || this; - } - Group3.prototype.onCanvasChange = function(changeType) { - refreshElement(this, changeType); - }; - Group3.prototype.getShapeBase = function() { - return shape_exports; - }; - Group3.prototype.getGroupBase = function() { - return Group3; - }; - Group3.prototype._applyClip = function(context, clip) { - if (clip) { - context.save(); - applyAttrsToContext(context, clip); - clip.createPath(context); - context.restore(); - context.clip(); - clip._afterDraw(); - } - }; - Group3.prototype.cacheCanvasBBox = function() { - var children = this.cfg.children; - var xArr = []; - var yArr = []; - (0, import_util156.each)(children, function(child) { - var bbox2 = child.cfg.cacheCanvasBBox; - if (bbox2 && child.cfg.isInView) { - xArr.push(bbox2.minX, bbox2.maxX); - yArr.push(bbox2.minY, bbox2.maxY); - } - }); - var bbox = null; - if (xArr.length) { - var minX = (0, import_util156.min)(xArr); - var maxX = (0, import_util156.max)(xArr); - var minY = (0, import_util156.min)(yArr); - var maxY2 = (0, import_util156.max)(yArr); - bbox = { - minX, - minY, - x: minX, - y: minY, - maxX, - maxY: maxY2, - width: maxX - minX, - height: maxY2 - minY - }; - var canvas = this.cfg.canvas; - if (canvas) { - var viewRange = canvas.getViewRange(); - this.set("isInView", intersectRect2(bbox, viewRange)); - } - } else { - this.set("isInView", false); - } - this.set("cacheCanvasBBox", bbox); - }; - Group3.prototype.draw = function(context, region) { - var children = this.cfg.children; - var allowDraw = region ? this.cfg.refresh : true; - if (children.length && allowDraw) { - context.save(); - applyAttrsToContext(context, this); - this._applyClip(context, this.getClip()); - drawChildren(context, children, region); - context.restore(); - this.cacheCanvasBBox(); - } - this.cfg.refresh = null; - this.set("hasChanged", false); - }; - Group3.prototype.skipDraw = function() { - this.set("cacheCanvasBBox", null); - this.set("hasChanged", false); - }; - return Group3; -}(group_default); -var group_default2 = Group; - -// node_modules/@antv/g-canvas/esm/shape/base.js -var ShapeBase2 = function(_super) { - __extends(ShapeBase4, _super); - function ShapeBase4() { - return _super !== null && _super.apply(this, arguments) || this; - } - ShapeBase4.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { lineWidth: 1, lineAppendWidth: 0, strokeOpacity: 1, fillOpacity: 1 }); - }; - ShapeBase4.prototype.getShapeBase = function() { - return shape_exports; - }; - ShapeBase4.prototype.getGroupBase = function() { - return group_default2; - }; - ShapeBase4.prototype.onCanvasChange = function(changeType) { - refreshElement(this, changeType); - }; - ShapeBase4.prototype.calculateBBox = function() { - var type2 = this.get("type"); - var lineWidth = this.getHitLineWidth(); - var bboxMethod = getMethod(type2); - var box2 = bboxMethod(this); - var halfLineWidth = lineWidth / 2; - var minX = box2.x - halfLineWidth; - var minY = box2.y - halfLineWidth; - var maxX = box2.x + box2.width + halfLineWidth; - var maxY2 = box2.y + box2.height + halfLineWidth; - return { - x: minX, - minX, - y: minY, - minY, - width: box2.width + lineWidth, - height: box2.height + lineWidth, - maxX, - maxY: maxY2 - }; - }; - ShapeBase4.prototype.isFill = function() { - return !!this.attrs["fill"] || this.isClipShape(); - }; - ShapeBase4.prototype.isStroke = function() { - return !!this.attrs["stroke"]; - }; - ShapeBase4.prototype._applyClip = function(context, clip) { - if (clip) { - context.save(); - applyAttrsToContext(context, clip); - clip.createPath(context); - context.restore(); - context.clip(); - clip._afterDraw(); - } - }; - ShapeBase4.prototype.draw = function(context, region) { - var clip = this.cfg.clipShape; - if (region) { - if (this.cfg.refresh === false) { - this.set("hasChanged", false); - return; - } - var bbox = this.getCanvasBBox(); - if (!intersectRect2(region, bbox)) { - this.set("hasChanged", false); - if (this.cfg.isInView) { - this._afterDraw(); - } - return; - } - } - context.save(); - applyAttrsToContext(context, this); - this._applyClip(context, clip); - this.drawPath(context); - context.restore(); - this._afterDraw(); - }; - ShapeBase4.prototype.getCanvasViewBox = function() { - var canvas = this.cfg.canvas; - if (canvas) { - return canvas.getViewRange(); - } - return null; - }; - ShapeBase4.prototype.cacheCanvasBBox = function() { - var canvasBBox = this.getCanvasViewBox(); - if (canvasBBox) { - var bbox = this.getCanvasBBox(); - var isInView = intersectRect2(bbox, canvasBBox); - this.set("isInView", isInView); - if (isInView) { - this.set("cacheCanvasBBox", bbox); - } else { - this.set("cacheCanvasBBox", null); - } - } - }; - ShapeBase4.prototype._afterDraw = function() { - this.cacheCanvasBBox(); - this.set("hasChanged", false); - this.set("refresh", null); - }; - ShapeBase4.prototype.skipDraw = function() { - this.set("cacheCanvasBBox", null); - this.set("isInView", null); - this.set("hasChanged", false); - }; - ShapeBase4.prototype.drawPath = function(context) { - this.createPath(context); - this.strokeAndFill(context); - this.afterDrawPath(context); - }; - ShapeBase4.prototype.fill = function(context) { - context.fill(); - }; - ShapeBase4.prototype.stroke = function(context) { - context.stroke(); - }; - ShapeBase4.prototype.strokeAndFill = function(context) { - var _a6 = this.attrs, lineWidth = _a6.lineWidth, opacity = _a6.opacity, strokeOpacity = _a6.strokeOpacity, fillOpacity = _a6.fillOpacity; - if (this.isFill()) { - if (!(0, import_util151.isNil)(fillOpacity) && fillOpacity !== 1) { - context.globalAlpha = fillOpacity; - this.fill(context); - context.globalAlpha = opacity; - } else { - this.fill(context); - } - } - if (this.isStroke()) { - if (lineWidth > 0) { - if (!(0, import_util151.isNil)(strokeOpacity) && strokeOpacity !== 1) { - context.globalAlpha = strokeOpacity; - } - this.stroke(context); - } - } - this.afterDrawPath(context); - }; - ShapeBase4.prototype.createPath = function(context) { - }; - ShapeBase4.prototype.afterDrawPath = function(context) { - }; - ShapeBase4.prototype.isInShape = function(refX, refY) { - var isStroke = this.isStroke(); - var isFill = this.isFill(); - var lineWidth = this.getHitLineWidth(); - return this.isInStrokeOrPath(refX, refY, isStroke, isFill, lineWidth); - }; - ShapeBase4.prototype.isInStrokeOrPath = function(x6, y5, isStroke, isFill, lineWidth) { - return false; - }; - ShapeBase4.prototype.getHitLineWidth = function() { - if (!this.isStroke()) { - return 0; - } - var attrs = this.attrs; - return attrs["lineWidth"] + attrs["lineAppendWidth"]; - }; - return ShapeBase4; -}(shape_default); -var base_default15 = ShapeBase2; - -// node_modules/@antv/g-canvas/esm/shape/circle.js -var Circle3 = function(_super) { - __extends(Circle6, _super); - function Circle6() { - return _super !== null && _super.apply(this, arguments) || this; - } - Circle6.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { x: 0, y: 0, r: 0 }); - }; - Circle6.prototype.isInStrokeOrPath = function(x6, y5, isStroke, isFill, lineWidth) { - var attrs = this.attr(); - var cx = attrs.x; - var cy = attrs.y; - var r4 = attrs.r; - var halfLineWidth = lineWidth / 2; - var absDistance = distance8(cx, cy, x6, y5); - if (isFill && isStroke) { - return absDistance <= r4 + halfLineWidth; - } - if (isFill) { - return absDistance <= r4; - } - if (isStroke) { - return absDistance >= r4 - halfLineWidth && absDistance <= r4 + halfLineWidth; - } - return false; - }; - Circle6.prototype.createPath = function(context) { - var attrs = this.attr(); - var cx = attrs.x; - var cy = attrs.y; - var r4 = attrs.r; - context.beginPath(); - context.arc(cx, cy, r4, 0, Math.PI * 2, false); - context.closePath(); - }; - return Circle6; -}(base_default15); -var circle_default5 = Circle3; - -// node_modules/@antv/g-canvas/esm/shape/ellipse.js -function ellipseDistance(squareX, squareY, rx, ry) { - return squareX / (rx * rx) + squareY / (ry * ry); -} -var Ellipse = function(_super) { - __extends(Ellipse3, _super); - function Ellipse3() { - return _super !== null && _super.apply(this, arguments) || this; - } - Ellipse3.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { x: 0, y: 0, rx: 0, ry: 0 }); - }; - Ellipse3.prototype.isInStrokeOrPath = function(x6, y5, isStroke, isFill, lineWidth) { - var attrs = this.attr(); - var halfLineWith = lineWidth / 2; - var cx = attrs.x; - var cy = attrs.y; - var rx = attrs.rx, ry = attrs.ry; - var squareX = (x6 - cx) * (x6 - cx); - var squareY = (y5 - cy) * (y5 - cy); - if (isFill && isStroke) { - return ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1; - } - if (isFill) { - return ellipseDistance(squareX, squareY, rx, ry) <= 1; - } - if (isStroke) { - return ellipseDistance(squareX, squareY, rx - halfLineWith, ry - halfLineWith) >= 1 && ellipseDistance(squareX, squareY, rx + halfLineWith, ry + halfLineWith) <= 1; - } - return false; - }; - Ellipse3.prototype.createPath = function(context) { - var attrs = this.attr(); - var cx = attrs.x; - var cy = attrs.y; - var rx = attrs.rx; - var ry = attrs.ry; - context.beginPath(); - if (context.ellipse) { - context.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2, false); - } else { - var r4 = rx > ry ? rx : ry; - var scaleX = rx > ry ? 1 : rx / ry; - var scaleY = rx > ry ? ry / rx : 1; - context.save(); - context.translate(cx, cy); - context.scale(scaleX, scaleY); - context.arc(0, 0, r4, 0, Math.PI * 2); - context.restore(); - context.closePath(); - } - }; - return Ellipse3; -}(base_default15); -var ellipse_default3 = Ellipse; - -// node_modules/@antv/g-canvas/esm/shape/image.js -function isCanvas(dom) { - return dom instanceof HTMLElement && (0, import_util151.isString)(dom.nodeName) && dom.nodeName.toUpperCase() === "CANVAS"; -} -var ImageShape = function(_super) { - __extends(ImageShape2, _super); - function ImageShape2() { - return _super !== null && _super.apply(this, arguments) || this; - } - ImageShape2.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { x: 0, y: 0, width: 0, height: 0 }); - }; - ImageShape2.prototype.initAttrs = function(attrs) { - this._setImage(attrs.img); - }; - ImageShape2.prototype.isStroke = function() { - return false; - }; - ImageShape2.prototype.isOnlyHitBox = function() { - return true; - }; - ImageShape2.prototype._afterLoading = function() { - if (this.get("toDraw") === true) { - var canvas = this.get("canvas"); - if (canvas) { - canvas.draw(); - } else { - this.createPath(this.get("context")); - } - } - }; - ImageShape2.prototype._setImage = function(img) { - var _this = this; - var attrs = this.attrs; - if ((0, import_util151.isString)(img)) { - var image_1 = new Image(); - image_1.onload = function() { - if (_this.destroyed) { - return false; - } - _this.attr("img", image_1); - _this.set("loading", false); - _this._afterLoading(); - var callback = _this.get("callback"); - if (callback) { - callback.call(_this); - } - }; - image_1.crossOrigin = "Anonymous"; - image_1.src = img; - this.set("loading", true); - } else if (img instanceof Image) { - if (!attrs.width) { - attrs.width = img.width; - } - if (!attrs.height) { - attrs.height = img.height; - } - } else if (isCanvas(img)) { - if (!attrs.width) { - attrs.width = Number(img.getAttribute("width")); - } - if (!attrs.height) { - attrs.height, Number(img.getAttribute("height")); - } - } - }; - ImageShape2.prototype.onAttrChange = function(name, value2, originValue) { - _super.prototype.onAttrChange.call(this, name, value2, originValue); - if (name === "img") { - this._setImage(value2); - } - }; - ImageShape2.prototype.createPath = function(context) { - if (this.get("loading")) { - this.set("toDraw", true); - this.set("context", context); - return; - } - var attrs = this.attr(); - var x6 = attrs.x, y5 = attrs.y, width2 = attrs.width, height = attrs.height, sx = attrs.sx, sy = attrs.sy, swidth = attrs.swidth, sheight = attrs.sheight; - var img = attrs.img; - if (img instanceof Image || isCanvas(img)) { - if (!(0, import_util151.isNil)(sx) && !(0, import_util151.isNil)(sy) && !(0, import_util151.isNil)(swidth) && !(0, import_util151.isNil)(sheight)) { - context.drawImage(img, sx, sy, swidth, sheight, x6, y5, width2, height); - } else { - context.drawImage(img, x6, y5, width2, height); - } - } - }; - return ImageShape2; -}(base_default15); -var image_default2 = ImageShape; - -// node_modules/@antv/g-canvas/esm/util/in-stroke/line.js -function inLine(x1, y1, x22, y22, lineWidth, x6, y5) { - var minX = Math.min(x1, x22); - var maxX = Math.max(x1, x22); - var minY = Math.min(y1, y22); - var maxY2 = Math.max(y1, y22); - var halfWidth = lineWidth / 2; - if (!(x6 >= minX - halfWidth && x6 <= maxX + halfWidth && y5 >= minY - halfWidth && y5 <= maxY2 + halfWidth)) { - return false; - } - return line_default.pointToLine(x1, y1, x22, y22, x6, y5) <= lineWidth / 2; -} - -// node_modules/@antv/g-canvas/esm/shape/line.js -var Line3 = function(_super) { - __extends(Line9, _super); - function Line9() { - return _super !== null && _super.apply(this, arguments) || this; - } - Line9.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { x1: 0, y1: 0, x2: 0, y2: 0, startArrow: false, endArrow: false }); - }; - Line9.prototype.initAttrs = function(attrs) { - this.setArrow(); - }; - Line9.prototype.onAttrChange = function(name, value2, originValue) { - _super.prototype.onAttrChange.call(this, name, value2, originValue); - this.setArrow(); - }; - Line9.prototype.setArrow = function() { - var attrs = this.attr(); - var x1 = attrs.x1, y1 = attrs.y1, x22 = attrs.x2, y22 = attrs.y2, startArrow = attrs.startArrow, endArrow = attrs.endArrow; - if (startArrow) { - addStartArrow(this, attrs, x22, y22, x1, y1); - } - if (endArrow) { - addEndArrow(this, attrs, x1, y1, x22, y22); - } - }; - Line9.prototype.isInStrokeOrPath = function(x6, y5, isStroke, isFill, lineWidth) { - if (!isStroke || !lineWidth) { - return false; - } - var _a6 = this.attr(), x1 = _a6.x1, y1 = _a6.y1, x22 = _a6.x2, y22 = _a6.y2; - return inLine(x1, y1, x22, y22, lineWidth, x6, y5); - }; - Line9.prototype.createPath = function(context) { - var attrs = this.attr(); - var x1 = attrs.x1, y1 = attrs.y1, x22 = attrs.x2, y22 = attrs.y2, startArrow = attrs.startArrow, endArrow = attrs.endArrow; - var startArrowDistance = { - dx: 0, - dy: 0 - }; - var endArrowDistance = { - dx: 0, - dy: 0 - }; - if (startArrow && startArrow.d) { - startArrowDistance = getShortenOffset(x1, y1, x22, y22, attrs.startArrow.d); - } - if (endArrow && endArrow.d) { - endArrowDistance = getShortenOffset(x1, y1, x22, y22, attrs.endArrow.d); - } - context.beginPath(); - context.moveTo(x1 + startArrowDistance.dx, y1 + startArrowDistance.dy); - context.lineTo(x22 - endArrowDistance.dx, y22 - endArrowDistance.dy); - }; - Line9.prototype.afterDrawPath = function(context) { - var startArrowShape = this.get("startArrowShape"); - var endArrowShape = this.get("endArrowShape"); - if (startArrowShape) { - startArrowShape.draw(context); - } - if (endArrowShape) { - endArrowShape.draw(context); - } - }; - Line9.prototype.getTotalLength = function() { - var _a6 = this.attr(), x1 = _a6.x1, y1 = _a6.y1, x22 = _a6.x2, y22 = _a6.y2; - return line_default.length(x1, y1, x22, y22); - }; - Line9.prototype.getPoint = function(ratio) { - var _a6 = this.attr(), x1 = _a6.x1, y1 = _a6.y1, x22 = _a6.x2, y22 = _a6.y2; - return line_default.pointAt(x1, y1, x22, y22, ratio); - }; - return Line9; -}(base_default15); -var line_default7 = Line3; - -// node_modules/@antv/g-canvas/esm/shape/marker.js -var import_util161 = __toModule(require_lib()); -var Symbols = { - circle: function(x6, y5, r4) { - return [ - ["M", x6 - r4, y5], - ["A", r4, r4, 0, 1, 0, x6 + r4, y5], - ["A", r4, r4, 0, 1, 0, x6 - r4, y5] - ]; - }, - square: function(x6, y5, r4) { - return [["M", x6 - r4, y5 - r4], ["L", x6 + r4, y5 - r4], ["L", x6 + r4, y5 + r4], ["L", x6 - r4, y5 + r4], ["Z"]]; - }, - diamond: function(x6, y5, r4) { - return [["M", x6 - r4, y5], ["L", x6, y5 - r4], ["L", x6 + r4, y5], ["L", x6, y5 + r4], ["Z"]]; - }, - triangle: function(x6, y5, r4) { - var diffY = r4 * Math.sin(1 / 3 * Math.PI); - return [["M", x6 - r4, y5 + diffY], ["L", x6, y5 - diffY], ["L", x6 + r4, y5 + diffY], ["Z"]]; - }, - "triangle-down": function(x6, y5, r4) { - var diffY = r4 * Math.sin(1 / 3 * Math.PI); - return [["M", x6 - r4, y5 - diffY], ["L", x6 + r4, y5 - diffY], ["L", x6, y5 + diffY], ["Z"]]; - } -}; -var Marker = function(_super) { - __extends(Marker3, _super); - function Marker3() { - return _super !== null && _super.apply(this, arguments) || this; - } - Marker3.prototype.initAttrs = function(attrs) { - this._resetParamsCache(); - }; - Marker3.prototype._resetParamsCache = function() { - this.set("paramsCache", {}); - }; - Marker3.prototype.onAttrChange = function(name, value2, originValue) { - _super.prototype.onAttrChange.call(this, name, value2, originValue); - if (["symbol", "x", "y", "r", "radius"].indexOf(name) !== -1) { - this._resetParamsCache(); - } - }; - Marker3.prototype.isOnlyHitBox = function() { - return true; - }; - Marker3.prototype._getR = function(attrs) { - return (0, import_util161.isNil)(attrs.r) ? attrs.radius : attrs.r; - }; - Marker3.prototype._getPath = function() { - var attrs = this.attr(); - var x6 = attrs.x, y5 = attrs.y; - var symbol = attrs.symbol || "circle"; - var r4 = this._getR(attrs); - var method; - var path; - if ((0, import_util151.isFunction)(symbol)) { - method = symbol; - path = method(x6, y5, r4); - path = pathToAbsolute2(path); - } else { - method = Marker3.Symbols[symbol]; - if (!method) { - console.warn(symbol + " marker is not supported."); - return null; - } - path = method(x6, y5, r4); - } - return path; - }; - Marker3.prototype.createPath = function(context) { - var path = this._getPath(); - var paramsCache = this.get("paramsCache"); - drawPath(this, context, { path }, paramsCache); - }; - Marker3.Symbols = Symbols; - return Marker3; -}(base_default15); -var marker_default = Marker; - -// node_modules/@antv/g-canvas/esm/shape/path.js -var import_util165 = __toModule(require_lib()); - -// node_modules/@antv/g-canvas/esm/util/in-path/point-in-path.js -function isPointInPath(shape, x6, y5) { - var ctx3 = getOffScreenContext(); - shape.createPath(ctx3); - return ctx3.isPointInPath(x6, y5); -} - -// node_modules/@antv/g-canvas/esm/util/in-path/polygon.js -var tolerance2 = 1e-6; -function dcmp2(x6) { - if (Math.abs(x6) < tolerance2) { - return 0; - } - return x6 < 0 ? -1 : 1; -} -function onSegment2(p1, p22, q3) { - if ((q3[0] - p1[0]) * (p22[1] - p1[1]) === (p22[0] - p1[0]) * (q3[1] - p1[1]) && Math.min(p1[0], p22[0]) <= q3[0] && q3[0] <= Math.max(p1[0], p22[0]) && Math.min(p1[1], p22[1]) <= q3[1] && q3[1] <= Math.max(p1[1], p22[1])) { - return true; - } - return false; -} -function isInPolygon2(points, x6, y5) { - var isHit = false; - var n3 = points.length; - if (n3 <= 2) { - return false; - } - for (var i4 = 0; i4 < n3; i4++) { - var p1 = points[i4]; - var p22 = points[(i4 + 1) % n3]; - if (onSegment2(p1, p22, [x6, y5])) { - return true; - } - if (dcmp2(p1[1] - y5) > 0 !== dcmp2(p22[1] - y5) > 0 && dcmp2(x6 - (y5 - p1[1]) * (p1[0] - p22[0]) / (p1[1] - p22[1]) - p1[0]) < 0) { - isHit = !isHit; - } - } - return isHit; -} - -// node_modules/@antv/g-canvas/esm/util/in-stroke/arc.js -function arc(cx, cy, r4, startAngle, endAngle, lineWidth, x6, y5) { - var angle3 = (Math.atan2(y5 - cy, x6 - cx) + Math.PI * 2) % (Math.PI * 2); - if (angle3 < startAngle || angle3 > endAngle) { - return false; - } - var point2 = { - x: cx + r4 * Math.cos(angle3), - y: cy + r4 * Math.sin(angle3) - }; - return distance8(point2.x, point2.y, x6, y5) <= lineWidth / 2; -} - -// node_modules/@antv/g-canvas/esm/util/path.js -var transform4 = ext_exports.transform; -function hasArc(path) { - var hasArc2 = false; - var count2 = path.length; - for (var i4 = 0; i4 < count2; i4++) { - var params = path[i4]; - var cmd = params[0]; - if (cmd === "C" || cmd === "A" || cmd === "Q") { - hasArc2 = true; - break; - } - } - return hasArc2; -} -function isPointInStroke(segments, lineWidth, x6, y5, length5) { - var isHit = false; - var halfWidth = lineWidth / 2; - for (var i4 = 0; i4 < segments.length; i4++) { - var segment = segments[i4]; - var currentPoint = segment.currentPoint, params = segment.params, prePoint = segment.prePoint, box2 = segment.box; - if (box2 && !inBox(box2.x - halfWidth, box2.y - halfWidth, box2.width + lineWidth, box2.height + lineWidth, x6, y5)) { - continue; - } - switch (segment.command) { - case "L": - case "Z": - isHit = inLine(prePoint[0], prePoint[1], currentPoint[0], currentPoint[1], lineWidth, x6, y5); - break; - case "Q": - var qDistance = quadratic_default.pointDistance(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], x6, y5); - isHit = qDistance <= lineWidth / 2; - break; - case "C": - var cDistance = cubic_default.pointDistance(prePoint[0], prePoint[1], params[1], params[2], params[3], params[4], params[5], params[6], x6, y5, length5); - isHit = cDistance <= lineWidth / 2; - break; - case "A": - var arcParams = segment.arcParams; - var cx = arcParams.cx, cy = arcParams.cy, rx = arcParams.rx, ry = arcParams.ry, startAngle = arcParams.startAngle, endAngle = arcParams.endAngle, xRotation = arcParams.xRotation; - var p4 = [x6, y5, 1]; - var r4 = rx > ry ? rx : ry; - var scaleX = rx > ry ? 1 : rx / ry; - var scaleY = rx > ry ? ry / rx : 1; - var m4 = transform4(null, [ - ["t", -cx, -cy], - ["r", -xRotation], - ["s", 1 / scaleX, 1 / scaleY] - ]); - transformMat3(p4, p4, m4); - isHit = arc(0, 0, r4, startAngle, endAngle, lineWidth, p4[0], p4[1]); - break; - default: - break; - } - if (isHit) { - break; - } - } - return isHit; -} -function extractPolygons(path) { - var count2 = path.length; - var polygons = []; - var polylines = []; - var points = []; - for (var i4 = 0; i4 < count2; i4++) { - var params = path[i4]; - var cmd = params[0]; - if (cmd === "M") { - if (points.length) { - polylines.push(points); - points = []; - } - points.push([params[1], params[2]]); - } else if (cmd === "Z") { - if (points.length) { - polygons.push(points); - points = []; - } - } else { - points.push([params[1], params[2]]); - } - } - if (points.length > 0) { - polylines.push(points); - } - return { - polygons, - polylines - }; -} -var path_default3 = __assign({ hasArc, extractPolygons, isPointInStroke }, path_exports); - -// node_modules/@antv/g-canvas/esm/shape/path.js -function isInPolygons(polygons, x6, y5) { - var isHit = false; - for (var i4 = 0; i4 < polygons.length; i4++) { - var points = polygons[i4]; - isHit = isInPolygon2(points, x6, y5); - if (isHit) { - break; - } - } - return isHit; -} -var Path = function(_super) { - __extends(Path4, _super); - function Path4() { - return _super !== null && _super.apply(this, arguments) || this; - } - Path4.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { startArrow: false, endArrow: false }); - }; - Path4.prototype.initAttrs = function(attrs) { - this._setPathArr(attrs.path); - this.setArrow(); - }; - Path4.prototype.onAttrChange = function(name, value2, originValue) { - _super.prototype.onAttrChange.call(this, name, value2, originValue); - if (name === "path") { - this._setPathArr(value2); - } - this.setArrow(); - }; - Path4.prototype._setPathArr = function(path) { - this.attrs.path = pathToAbsolute2(path); - var hasArc2 = path_default3.hasArc(path); - this.set("hasArc", hasArc2); - this.set("paramsCache", {}); - this.set("segments", null); - this.set("curve", null); - this.set("tCache", null); - this.set("totalLength", null); - }; - Path4.prototype.getSegments = function() { - var segments = this.get("segements"); - if (!segments) { - segments = getSegments(this.attr("path")); - this.set("segments", segments); - } - return segments; - }; - Path4.prototype.setArrow = function() { - var attrs = this.attr(); - var startArrow = attrs.startArrow, endArrow = attrs.endArrow; - if (startArrow) { - var tangent = this.getStartTangent(); - addStartArrow(this, attrs, tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1]); - } - if (endArrow) { - var tangent = this.getEndTangent(); - addEndArrow(this, attrs, tangent[0][0], tangent[0][1], tangent[1][0], tangent[1][1]); - } - }; - Path4.prototype.isInStrokeOrPath = function(x6, y5, isStroke, isFill, lineWidth) { - var segments = this.getSegments(); - var hasArc2 = this.get("hasArc"); - var isHit = false; - if (isStroke) { - var length_1 = this.getTotalLength(); - isHit = path_default3.isPointInStroke(segments, lineWidth, x6, y5, length_1); - } - if (!isHit && isFill) { - if (hasArc2) { - isHit = isPointInPath(this, x6, y5); - } else { - var path = this.attr("path"); - var extractResutl = path_default3.extractPolygons(path); - isHit = isInPolygons(extractResutl.polygons, x6, y5) || isInPolygons(extractResutl.polylines, x6, y5); - } - } - return isHit; - }; - Path4.prototype.createPath = function(context) { - var attrs = this.attr(); - var paramsCache = this.get("paramsCache"); - drawPath(this, context, attrs, paramsCache); - }; - Path4.prototype.afterDrawPath = function(context) { - var startArrowShape = this.get("startArrowShape"); - var endArrowShape = this.get("endArrowShape"); - if (startArrowShape) { - startArrowShape.draw(context); - } - if (endArrowShape) { - endArrowShape.draw(context); - } - }; - Path4.prototype.getTotalLength = function() { - var totalLength = this.get("totalLength"); - if (!(0, import_util165.isNil)(totalLength)) { - return totalLength; - } - this._calculateCurve(); - this._setTcache(); - return this.get("totalLength"); - }; - Path4.prototype.getPoint = function(ratio) { - var tCache = this.get("tCache"); - if (!tCache) { - this._calculateCurve(); - this._setTcache(); - tCache = this.get("tCache"); - } - var subt; - var index2; - var curve = this.get("curve"); - if (!tCache || tCache.length === 0) { - if (curve) { - return { - x: curve[0][1], - y: curve[0][2] - }; - } - return null; - } - (0, import_util165.each)(tCache, function(v3, i4) { - if (ratio >= v3[0] && ratio <= v3[1]) { - subt = (ratio - v3[0]) / (v3[1] - v3[0]); - index2 = i4; - } - }); - var seg = curve[index2]; - if ((0, import_util165.isNil)(seg) || (0, import_util165.isNil)(index2)) { - return null; - } - var l4 = seg.length; - var nextSeg = curve[index2 + 1]; - return cubic_default.pointAt(seg[l4 - 2], seg[l4 - 1], nextSeg[1], nextSeg[2], nextSeg[3], nextSeg[4], nextSeg[5], nextSeg[6], subt); - }; - Path4.prototype._calculateCurve = function() { - var path = this.attr().path; - this.set("curve", path_default3.pathToCurve(path)); - }; - Path4.prototype._setTcache = function() { - var totalLength = 0; - var tempLength = 0; - var tCache = []; - var segmentT; - var segmentL; - var segmentN; - var l4; - var curve = this.get("curve"); - if (!curve) { - return; - } - (0, import_util165.each)(curve, function(segment, i4) { - segmentN = curve[i4 + 1]; - l4 = segment.length; - if (segmentN) { - totalLength += cubic_default.length(segment[l4 - 2], segment[l4 - 1], segmentN[1], segmentN[2], segmentN[3], segmentN[4], segmentN[5], segmentN[6]) || 0; - } - }); - this.set("totalLength", totalLength); - if (totalLength === 0) { - this.set("tCache", []); - return; - } - (0, import_util165.each)(curve, function(segment, i4) { - segmentN = curve[i4 + 1]; - l4 = segment.length; - if (segmentN) { - segmentT = []; - segmentT[0] = tempLength / totalLength; - segmentL = cubic_default.length(segment[l4 - 2], segment[l4 - 1], segmentN[1], segmentN[2], segmentN[3], segmentN[4], segmentN[5], segmentN[6]); - tempLength += segmentL || 0; - segmentT[1] = tempLength / totalLength; - tCache.push(segmentT); - } - }); - this.set("tCache", tCache); - }; - Path4.prototype.getStartTangent = function() { - var segments = this.getSegments(); - var result; - if (segments.length > 1) { - var startPoint = segments[0].currentPoint; - var endPoint = segments[1].currentPoint; - var tangent = segments[1].startTangent; - result = []; - if (tangent) { - result.push([startPoint[0] - tangent[0], startPoint[1] - tangent[1]]); - result.push([startPoint[0], startPoint[1]]); - } else { - result.push([endPoint[0], endPoint[1]]); - result.push([startPoint[0], startPoint[1]]); - } - } - return result; - }; - Path4.prototype.getEndTangent = function() { - var segments = this.getSegments(); - var length5 = segments.length; - var result; - if (length5 > 1) { - var startPoint = segments[length5 - 2].currentPoint; - var endPoint = segments[length5 - 1].currentPoint; - var tangent = segments[length5 - 1].endTangent; - result = []; - if (tangent) { - result.push([endPoint[0] - tangent[0], endPoint[1] - tangent[1]]); - result.push([endPoint[0], endPoint[1]]); - } else { - result.push([startPoint[0], startPoint[1]]); - result.push([endPoint[0], endPoint[1]]); - } - } - return result; - }; - return Path4; -}(base_default15); -var path_default2 = Path; - -// node_modules/@antv/g-canvas/esm/util/in-stroke/polyline.js -function inPolyline(points, lineWidth, x6, y5, isClose) { - var count2 = points.length; - if (count2 < 2) { - return false; - } - for (var i4 = 0; i4 < count2 - 1; i4++) { - var x1 = points[i4][0]; - var y1 = points[i4][1]; - var x22 = points[i4 + 1][0]; - var y22 = points[i4 + 1][1]; - if (inLine(x1, y1, x22, y22, lineWidth, x6, y5)) { - return true; - } - } - if (isClose) { - var first = points[0]; - var last17 = points[count2 - 1]; - if (inLine(first[0], first[1], last17[0], last17[1], lineWidth, x6, y5)) { - return true; - } - } - return false; -} - -// node_modules/@antv/g-canvas/esm/shape/polygon.js -var Polygon = function(_super) { - __extends(Polygon4, _super); - function Polygon4() { - return _super !== null && _super.apply(this, arguments) || this; - } - Polygon4.prototype.isInStrokeOrPath = function(x6, y5, isStroke, isFill, lineWidth) { - var points = this.attr().points; - var isHit = false; - if (isStroke) { - isHit = inPolyline(points, lineWidth, x6, y5, true); - } - if (!isHit && isFill) { - isHit = isInPolygon2(points, x6, y5); - } - return isHit; - }; - Polygon4.prototype.createPath = function(context) { - var attrs = this.attr(); - var points = attrs.points; - if (points.length < 2) { - return; - } - context.beginPath(); - for (var i4 = 0; i4 < points.length; i4++) { - var point2 = points[i4]; - if (i4 === 0) { - context.moveTo(point2[0], point2[1]); - } else { - context.lineTo(point2[0], point2[1]); - } - } - context.closePath(); - }; - return Polygon4; -}(base_default15); -var polygon_default3 = Polygon; - -// node_modules/@antv/g-canvas/esm/shape/polyline.js -var import_util166 = __toModule(require_lib()); -var PolyLine = function(_super) { - __extends(PolyLine2, _super); - function PolyLine2() { - return _super !== null && _super.apply(this, arguments) || this; - } - PolyLine2.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { startArrow: false, endArrow: false }); - }; - PolyLine2.prototype.initAttrs = function(attrs) { - this.setArrow(); - }; - PolyLine2.prototype.onAttrChange = function(name, value2, originValue) { - _super.prototype.onAttrChange.call(this, name, value2, originValue); - this.setArrow(); - if (["points"].indexOf(name) !== -1) { - this._resetCache(); - } - }; - PolyLine2.prototype._resetCache = function() { - this.set("totalLength", null); - this.set("tCache", null); - }; - PolyLine2.prototype.setArrow = function() { - var attrs = this.attr(); - var _a6 = this.attrs, points = _a6.points, startArrow = _a6.startArrow, endArrow = _a6.endArrow; - var length5 = points.length; - var x1 = points[0][0]; - var y1 = points[0][1]; - var x22 = points[length5 - 1][0]; - var y22 = points[length5 - 1][1]; - if (startArrow) { - addStartArrow(this, attrs, points[1][0], points[1][1], x1, y1); - } - if (endArrow) { - addEndArrow(this, attrs, points[length5 - 2][0], points[length5 - 2][1], x22, y22); - } - }; - PolyLine2.prototype.isFill = function() { - return false; - }; - PolyLine2.prototype.isInStrokeOrPath = function(x6, y5, isStroke, isFill, lineWidth) { - if (!isStroke || !lineWidth) { - return false; - } - var points = this.attr().points; - return inPolyline(points, lineWidth, x6, y5, false); - }; - PolyLine2.prototype.isStroke = function() { - return true; - }; - PolyLine2.prototype.createPath = function(context) { - var _a6 = this.attr(), points = _a6.points, startArrow = _a6.startArrow, endArrow = _a6.endArrow; - var length5 = points.length; - if (points.length < 2) { - return; - } - var x1 = points[0][0]; - var y1 = points[0][1]; - var x22 = points[length5 - 1][0]; - var y22 = points[length5 - 1][1]; - if (startArrow && startArrow.d) { - var distance15 = getShortenOffset(x1, y1, points[1][0], points[1][1], startArrow.d); - x1 += distance15.dx; - y1 += distance15.dy; - } - if (endArrow && endArrow.d) { - var distance15 = getShortenOffset(points[length5 - 2][0], points[length5 - 2][1], x22, y22, endArrow.d); - x22 -= distance15.dx; - y22 -= distance15.dy; - } - context.beginPath(); - context.moveTo(x1, y1); - for (var i4 = 0; i4 < length5 - 1; i4++) { - var point2 = points[i4]; - context.lineTo(point2[0], point2[1]); - } - context.lineTo(x22, y22); - }; - PolyLine2.prototype.afterDrawPath = function(context) { - var startArrowShape = this.get("startArrowShape"); - var endArrowShape = this.get("endArrowShape"); - if (startArrowShape) { - startArrowShape.draw(context); - } - if (endArrowShape) { - endArrowShape.draw(context); - } - }; - PolyLine2.prototype.getTotalLength = function() { - var points = this.attr().points; - var totalLength = this.get("totalLength"); - if (!(0, import_util166.isNil)(totalLength)) { - return totalLength; - } - this.set("totalLength", polyline_default.length(points)); - return this.get("totalLength"); - }; - PolyLine2.prototype.getPoint = function(ratio) { - var points = this.attr().points; - var tCache = this.get("tCache"); - if (!tCache) { - this._setTcache(); - tCache = this.get("tCache"); - } - var subt; - var index2; - (0, import_util166.each)(tCache, function(v3, i4) { - if (ratio >= v3[0] && ratio <= v3[1]) { - subt = (ratio - v3[0]) / (v3[1] - v3[0]); - index2 = i4; - } - }); - return line_default.pointAt(points[index2][0], points[index2][1], points[index2 + 1][0], points[index2 + 1][1], subt); - }; - PolyLine2.prototype._setTcache = function() { - var points = this.attr().points; - if (!points || points.length === 0) { - return; - } - var totalLength = this.getTotalLength(); - if (totalLength <= 0) { - return; - } - var tempLength = 0; - var tCache = []; - var segmentT; - var segmentL; - (0, import_util166.each)(points, function(p4, i4) { - if (points[i4 + 1]) { - segmentT = []; - segmentT[0] = tempLength / totalLength; - segmentL = line_default.length(p4[0], p4[1], points[i4 + 1][0], points[i4 + 1][1]); - tempLength += segmentL; - segmentT[1] = tempLength / totalLength; - tCache.push(segmentT); - } - }); - this.set("tCache", tCache); - }; - PolyLine2.prototype.getStartTangent = function() { - var points = this.attr().points; - var result = []; - result.push([points[1][0], points[1][1]]); - result.push([points[0][0], points[0][1]]); - return result; - }; - PolyLine2.prototype.getEndTangent = function() { - var points = this.attr().points; - var l4 = points.length - 1; - var result = []; - result.push([points[l4 - 1][0], points[l4 - 1][1]]); - result.push([points[l4][0], points[l4][1]]); - return result; - }; - return PolyLine2; -}(base_default15); -var polyline_default3 = PolyLine; - -// node_modules/@antv/g-canvas/esm/util/in-stroke/rect.js -function inRect(minX, minY, width2, height, lineWidth, x6, y5) { - var halfWidth = lineWidth / 2; - return inBox(minX - halfWidth, minY - halfWidth, width2, lineWidth, x6, y5) || inBox(minX + width2 - halfWidth, minY - halfWidth, lineWidth, height, x6, y5) || inBox(minX + halfWidth, minY + height - halfWidth, width2, lineWidth, x6, y5) || inBox(minX - halfWidth, minY + halfWidth, lineWidth, height, x6, y5); -} - -// node_modules/@antv/g-canvas/esm/util/in-stroke/rect-radius.js -function rectWithRadius(minX, minY, width2, height, radius, lineWidth, x6, y5) { - var halfWidth = lineWidth / 2; - return inLine(minX + radius, minY, minX + width2 - radius, minY, lineWidth, x6, y5) || inLine(minX + width2, minY + radius, minX + width2, minY + height - radius, lineWidth, x6, y5) || inLine(minX + width2 - radius, minY + height, minX + radius, minY + height, lineWidth, x6, y5) || inLine(minX, minY + height - radius, minX, minY + radius, lineWidth, x6, y5) || arc(minX + width2 - radius, minY + radius, radius, 1.5 * Math.PI, 2 * Math.PI, lineWidth, x6, y5) || arc(minX + width2 - radius, minY + height - radius, radius, 0, 0.5 * Math.PI, lineWidth, x6, y5) || arc(minX + radius, minY + height - radius, radius, 0.5 * Math.PI, Math.PI, lineWidth, x6, y5) || arc(minX + radius, minY + radius, radius, Math.PI, 1.5 * Math.PI, lineWidth, x6, y5); -} - -// node_modules/@antv/g-canvas/esm/shape/rect.js -var Rect = function(_super) { - __extends(Rect4, _super); - function Rect4() { - return _super !== null && _super.apply(this, arguments) || this; - } - Rect4.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { x: 0, y: 0, width: 0, height: 0, radius: 0 }); - }; - Rect4.prototype.isInStrokeOrPath = function(x6, y5, isStroke, isFill, lineWidth) { - var attrs = this.attr(); - var minX = attrs.x; - var minY = attrs.y; - var width2 = attrs.width; - var height = attrs.height; - var radius = attrs.radius; - if (!radius) { - var halfWidth = lineWidth / 2; - if (isFill && isStroke) { - return inBox(minX - halfWidth, minY - halfWidth, width2 + halfWidth, height + halfWidth, x6, y5); - } - if (isFill) { - return inBox(minX, minY, width2, height, x6, y5); - } - if (isStroke) { - return inRect(minX, minY, width2, height, lineWidth, x6, y5); - } - } else { - var isHit = false; - if (isStroke) { - isHit = rectWithRadius(minX, minY, width2, height, radius, lineWidth, x6, y5); - } - if (!isHit && isFill) { - isHit = isPointInPath(this, x6, y5); - } - return isHit; - } - }; - Rect4.prototype.createPath = function(context) { - var attrs = this.attr(); - var x6 = attrs.x; - var y5 = attrs.y; - var width2 = attrs.width; - var height = attrs.height; - var radius = attrs.radius; - context.beginPath(); - if (radius === 0) { - context.rect(x6, y5, width2, height); - } else { - var _a6 = parseRadius(radius), r1 = _a6[0], r22 = _a6[1], r32 = _a6[2], r4 = _a6[3]; - context.moveTo(x6 + r1, y5); - context.lineTo(x6 + width2 - r22, y5); - r22 !== 0 && context.arc(x6 + width2 - r22, y5 + r22, r22, -Math.PI / 2, 0); - context.lineTo(x6 + width2, y5 + height - r32); - r32 !== 0 && context.arc(x6 + width2 - r32, y5 + height - r32, r32, 0, Math.PI / 2); - context.lineTo(x6 + r4, y5 + height); - r4 !== 0 && context.arc(x6 + r4, y5 + height - r4, r4, Math.PI / 2, Math.PI); - context.lineTo(x6, y5 + r1); - r1 !== 0 && context.arc(x6 + r1, y5 + r1, r1, Math.PI, Math.PI * 1.5); - context.closePath(); - } - }; - return Rect4; -}(base_default15); -var rect_default2 = Rect; - -// node_modules/@antv/g-canvas/esm/shape/text.js -var Text = function(_super) { - __extends(Text3, _super); - function Text3() { - return _super !== null && _super.apply(this, arguments) || this; - } - Text3.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { x: 0, y: 0, text: null, fontSize: 12, fontFamily: "sans-serif", fontStyle: "normal", fontWeight: "normal", fontVariant: "normal", textAlign: "start", textBaseline: "bottom" }); - }; - Text3.prototype.isOnlyHitBox = function() { - return true; - }; - Text3.prototype.initAttrs = function(attrs) { - this._assembleFont(); - if (attrs.text) { - this._setText(attrs.text); - } - }; - Text3.prototype._assembleFont = function() { - var attrs = this.attrs; - attrs.font = assembleFont(attrs); - }; - Text3.prototype._setText = function(text) { - var textArr = null; - if ((0, import_util151.isString)(text) && text.indexOf("\n") !== -1) { - textArr = text.split("\n"); - } - this.set("textArr", textArr); - }; - Text3.prototype.onAttrChange = function(name, value2, originValue) { - _super.prototype.onAttrChange.call(this, name, value2, originValue); - if (name.startsWith("font")) { - this._assembleFont(); - } - if (name === "text") { - this._setText(value2); - } - }; - Text3.prototype._getSpaceingY = function() { - var attrs = this.attrs; - var lineHeight = attrs.lineHeight; - var fontSize = attrs.fontSize * 1; - return lineHeight ? lineHeight - fontSize : fontSize * 0.14; - }; - Text3.prototype._drawTextArr = function(context, textArr, isFill) { - var attrs = this.attrs; - var textBaseline = attrs.textBaseline; - var x6 = attrs.x; - var y5 = attrs.y; - var fontSize = attrs.fontSize * 1; - var spaceingY = this._getSpaceingY(); - var height = getTextHeight(attrs.text, attrs.fontSize, attrs.lineHeight); - var subY; - (0, import_util151.each)(textArr, function(subText, index2) { - subY = y5 + index2 * (spaceingY + fontSize) - height + fontSize; - if (textBaseline === "middle") - subY += height - fontSize - (height - fontSize) / 2; - if (textBaseline === "top") - subY += height - fontSize; - if (!(0, import_util151.isNil)(subText)) { - if (isFill) { - context.fillText(subText, x6, subY); - } else { - context.strokeText(subText, x6, subY); - } - } - }); - }; - Text3.prototype._drawText = function(context, isFill) { - var attrs = this.attr(); - var x6 = attrs.x; - var y5 = attrs.y; - var textArr = this.get("textArr"); - if (textArr) { - this._drawTextArr(context, textArr, isFill); - } else { - var text = attrs.text; - if (!(0, import_util151.isNil)(text)) { - if (isFill) { - context.fillText(text, x6, y5); - } else { - context.strokeText(text, x6, y5); - } - } - } - }; - Text3.prototype.strokeAndFill = function(context) { - var _a6 = this.attrs, lineWidth = _a6.lineWidth, opacity = _a6.opacity, strokeOpacity = _a6.strokeOpacity, fillOpacity = _a6.fillOpacity; - if (this.isStroke()) { - if (lineWidth > 0) { - if (!(0, import_util151.isNil)(strokeOpacity) && strokeOpacity !== 1) { - context.globalAlpha = opacity; - } - this.stroke(context); - } - } - if (this.isFill()) { - if (!(0, import_util151.isNil)(fillOpacity) && fillOpacity !== 1) { - context.globalAlpha = fillOpacity; - this.fill(context); - context.globalAlpha = opacity; - } else { - this.fill(context); - } - } - this.afterDrawPath(context); - }; - Text3.prototype.fill = function(context) { - this._drawText(context, true); - }; - Text3.prototype.stroke = function(context) { - this._drawText(context, false); - }; - return Text3; -}(base_default15); -var text_default3 = Text; - -// node_modules/@antv/g-canvas/esm/util/hit.js -function invertFromMatrix(v3, matrix) { - if (matrix) { - var invertMatrix3 = invert4(matrix); - return multiplyVec2(invertMatrix3, v3); - } - return v3; -} -function getRefXY(element, x6, y5) { - var totalMatrix = element.getTotalMatrix(); - if (totalMatrix) { - var _a6 = invertFromMatrix([x6, y5, 1], totalMatrix), refX = _a6[0], refY = _a6[1]; - return [refX, refY]; - } - return [x6, y5]; -} -function preTest(element, x6, y5) { - if (element.isCanvas && element.isCanvas()) { - return true; - } - if (!isAllowCapture(element) || element.cfg.isInView === false) { - return false; - } - if (element.cfg.clipShape) { - var _a6 = getRefXY(element, x6, y5), refX = _a6[0], refY = _a6[1]; - if (element.isClipped(refX, refY)) { - return false; - } - } - var bbox = element.cfg.cacheCanvasBBox || element.getCanvasBBox(); - if (!(x6 >= bbox.minX && x6 <= bbox.maxX && y5 >= bbox.minY && y5 <= bbox.maxY)) { - return false; - } - return true; -} -function getShape(container2, x6, y5) { - if (!preTest(container2, x6, y5)) { - return null; - } - var shape = null; - var children = container2.getChildren(); - var count2 = children.length; - for (var i4 = count2 - 1; i4 >= 0; i4--) { - var child = children[i4]; - if (child.isGroup()) { - shape = getShape(child, x6, y5); - } else if (preTest(child, x6, y5)) { - var curShape = child; - var _a6 = getRefXY(child, x6, y5), refX = _a6[0], refY = _a6[1]; - if (curShape.isInShape(refX, refY)) { - shape = child; - } - } - if (shape) { - break; - } - } - return shape; -} - -// node_modules/@antv/g-canvas/esm/canvas.js -var Canvas2 = function(_super) { - __extends(Canvas4, _super); - function Canvas4() { - return _super !== null && _super.apply(this, arguments) || this; - } - Canvas4.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - cfg["renderer"] = "canvas"; - cfg["autoDraw"] = true; - cfg["localRefresh"] = true; - cfg["refreshElements"] = []; - cfg["clipView"] = true; - cfg["quickHit"] = false; - return cfg; - }; - Canvas4.prototype.onCanvasChange = function(changeType) { - if (changeType === "attr" || changeType === "sort" || changeType === "changeSize") { - this.set("refreshElements", [this]); - this.draw(); - } - }; - Canvas4.prototype.getShapeBase = function() { - return shape_exports; - }; - Canvas4.prototype.getGroupBase = function() { - return group_default2; - }; - Canvas4.prototype.getPixelRatio = function() { - var pixelRatio = this.get("pixelRatio") || getPixelRatio(); - return pixelRatio >= 1 ? Math.ceil(pixelRatio) : 1; - }; - Canvas4.prototype.getViewRange = function() { - return { - minX: 0, - minY: 0, - maxX: this.cfg.width, - maxY: this.cfg.height - }; - }; - Canvas4.prototype.createDom = function() { - var element = document.createElement("canvas"); - var context = element.getContext("2d"); - this.set("context", context); - return element; - }; - Canvas4.prototype.setDOMSize = function(width2, height) { - _super.prototype.setDOMSize.call(this, width2, height); - var context = this.get("context"); - var el = this.get("el"); - var pixelRatio = this.getPixelRatio(); - el.width = pixelRatio * width2; - el.height = pixelRatio * height; - if (pixelRatio > 1) { - context.scale(pixelRatio, pixelRatio); - } - }; - Canvas4.prototype.clear = function() { - _super.prototype.clear.call(this); - this._clearFrame(); - var context = this.get("context"); - var element = this.get("el"); - context.clearRect(0, 0, element.width, element.height); - }; - Canvas4.prototype.getShape = function(x6, y5) { - var shape; - if (this.get("quickHit")) { - shape = getShape(this, x6, y5); - } else { - shape = _super.prototype.getShape.call(this, x6, y5, null); - } - return shape; - }; - Canvas4.prototype._getRefreshRegion = function() { - var elements = this.get("refreshElements"); - var viewRegion = this.getViewRange(); - var region; - if (elements.length && elements[0] === this) { - region = viewRegion; - } else { - region = getMergedRegion(elements); - if (region) { - region.minX = Math.floor(region.minX); - region.minY = Math.floor(region.minY); - region.maxX = Math.ceil(region.maxX); - region.maxY = Math.ceil(region.maxY); - region.maxY += 1; - var clipView = this.get("clipView"); - if (clipView) { - region = mergeView(region, viewRegion); - } - } - } - return region; - }; - Canvas4.prototype.refreshElement = function(element) { - var refreshElements = this.get("refreshElements"); - refreshElements.push(element); - }; - Canvas4.prototype._clearFrame = function() { - var drawFrame = this.get("drawFrame"); - if (drawFrame) { - (0, import_util151.clearAnimationFrame)(drawFrame); - this.set("drawFrame", null); - this.set("refreshElements", []); - } - }; - Canvas4.prototype.draw = function() { - var drawFrame = this.get("drawFrame"); - if (this.get("autoDraw") && drawFrame) { - return; - } - this._startDraw(); - }; - Canvas4.prototype._drawAll = function() { - var context = this.get("context"); - var element = this.get("el"); - var children = this.getChildren(); - context.clearRect(0, 0, element.width, element.height); - applyAttrsToContext(context, this); - drawChildren(context, children); - this.set("refreshElements", []); - }; - Canvas4.prototype._drawRegion = function() { - var context = this.get("context"); - var refreshElements = this.get("refreshElements"); - var children = this.getChildren(); - var region = this._getRefreshRegion(); - if (region) { - context.clearRect(region.minX, region.minY, region.maxX - region.minX, region.maxY - region.minY); - context.save(); - context.beginPath(); - context.rect(region.minX, region.minY, region.maxX - region.minX, region.maxY - region.minY); - context.clip(); - applyAttrsToContext(context, this); - checkRefresh(this, children, region); - drawChildren(context, children, region); - context.restore(); - } else if (refreshElements.length) { - clearChanged(refreshElements); - } - (0, import_util151.each)(refreshElements, function(element) { - if (element.get("hasChanged")) { - element.set("hasChanged", false); - } - }); - this.set("refreshElements", []); - }; - Canvas4.prototype._startDraw = function() { - var _this = this; - var drawFrame = this.get("drawFrame"); - if (!drawFrame) { - drawFrame = (0, import_util151.requestAnimationFrame)(function() { - if (_this.get("localRefresh")) { - _this._drawRegion(); - } else { - _this._drawAll(); - } - _this.set("drawFrame", null); - }); - this.set("drawFrame", drawFrame); - } - }; - Canvas4.prototype.skipDraw = function() { - }; - Canvas4.prototype.removeDom = function() { - var el = this.get("el"); - el.width = 0; - el.height = 0; - el.parentNode.removeChild(el); - }; - return Canvas4; -}(canvas_default); -var canvas_default2 = Canvas2; - -// node_modules/@antv/g-canvas/esm/index.js -var version = "0.5.12"; - -// node_modules/@antv/g-svg/esm/index.js -var esm_exports2 = {}; -__export(esm_exports2, { - AbstractCanvas: () => canvas_default, - AbstractGroup: () => group_default, - AbstractShape: () => shape_default, - Base: () => base_default2, - Canvas: () => canvas_default3, - Event: () => graph_event_default, - Group: () => group_default3, - PathUtil: () => path_exports, - Shape: () => shape_exports2, - assembleFont: () => assembleFont, - getBBoxMethod: () => getMethod, - getOffScreenContext: () => getOffScreenContext, - getTextHeight: () => getTextHeight, - invert: () => invert4, - isAllowCapture: () => isAllowCapture, - multiplyVec2: () => multiplyVec2, - version: () => version2 -}); - -// node_modules/@antv/g-svg/esm/shape/index.js -var shape_exports2 = {}; -__export(shape_exports2, { - Base: () => base_default16, - Circle: () => circle_default6, - Dom: () => dom_default, - Ellipse: () => ellipse_default4, - Image: () => image_default3, - Line: () => line_default8, - Marker: () => marker_default2, - Path: () => path_default4, - Polygon: () => polygon_default4, - Polyline: () => polyline_default4, - Rect: () => rect_default3, - Text: () => text_default4 -}); - -// node_modules/@antv/g-svg/esm/util/dom.js -var import_util171 = __toModule(require_lib()); - -// node_modules/@antv/g-svg/esm/constant.js -var SHAPE_TO_TAGS = { - rect: "path", - circle: "circle", - line: "line", - path: "path", - marker: "path", - text: "text", - polyline: "polyline", - polygon: "polygon", - image: "image", - ellipse: "ellipse", - dom: "foreignObject" -}; -var SVG_ATTR_MAP = { - opacity: "opacity", - fillStyle: "fill", - fill: "fill", - fillOpacity: "fill-opacity", - strokeStyle: "stroke", - strokeOpacity: "stroke-opacity", - stroke: "stroke", - x: "x", - y: "y", - r: "r", - rx: "rx", - ry: "ry", - width: "width", - height: "height", - x1: "x1", - x2: "x2", - y1: "y1", - y2: "y2", - lineCap: "stroke-linecap", - lineJoin: "stroke-linejoin", - lineWidth: "stroke-width", - lineDash: "stroke-dasharray", - lineDashOffset: "stroke-dashoffset", - miterLimit: "stroke-miterlimit", - font: "font", - fontSize: "font-size", - fontStyle: "font-style", - fontVariant: "font-variant", - fontWeight: "font-weight", - fontFamily: "font-family", - startArrow: "marker-start", - endArrow: "marker-end", - path: "d", - class: "class", - id: "id", - style: "style", - preserveAspectRatio: "preserveAspectRatio" -}; - -// node_modules/@antv/g-svg/esm/util/dom.js -function createSVGElement(type2) { - return document.createElementNS("http://www.w3.org/2000/svg", type2); -} -function createDom2(shape) { - var type2 = SHAPE_TO_TAGS[shape.type]; - var parent = shape.getParent(); - if (!type2) { - throw new Error("the type " + shape.type + " is not supported by svg"); - } - var element = createSVGElement(type2); - if (shape.get("id")) { - element.id = shape.get("id"); - } - shape.set("el", element); - shape.set("attrs", {}); - if (parent) { - var parentNode = parent.get("el"); - if (parentNode) { - parentNode.appendChild(element); - } else { - parentNode = parent.createDom(); - parent.set("el", parentNode); - parentNode.appendChild(element); - } - } - return element; -} -function sortDom(element, sorter) { - var el = element.get("el"); - var childList = (0, import_util171.toArray)(el.children).sort(sorter); - var fragment = document.createDocumentFragment(); - childList.forEach(function(child) { - fragment.appendChild(child); - }); - el.appendChild(fragment); -} -function moveTo(element, targetIndex) { - var parentNode = element.parentNode; - var siblings = Array.from(parentNode.childNodes).filter(function(node) { - return node.nodeType === 1 && node.nodeName.toLowerCase() !== "defs"; - }); - var target = siblings[targetIndex]; - var currentIndex = siblings.indexOf(element); - if (target) { - if (currentIndex > targetIndex) { - parentNode.insertBefore(element, target); - } else if (currentIndex < targetIndex) { - var targetNext = siblings[targetIndex + 1]; - if (targetNext) { - parentNode.insertBefore(element, targetNext); - } else { - parentNode.appendChild(element); - } - } - } else { - parentNode.appendChild(element); - } -} - -// node_modules/@antv/g-svg/esm/util/svg.js -function setShadow(model, context) { - var el = model.cfg.el; - var attrs = model.attr(); - var cfg = { - dx: attrs.shadowOffsetX, - dy: attrs.shadowOffsetY, - blur: attrs.shadowBlur, - color: attrs.shadowColor - }; - if (!cfg.dx && !cfg.dy && !cfg.blur && !cfg.color) { - el.removeAttribute("filter"); - } else { - var id = context.find("filter", cfg); - if (!id) { - id = context.addShadow(cfg); - } - el.setAttribute("filter", "url(#" + id + ")"); - } -} -function setTransform(model) { - var matrix = model.attr().matrix; - if (matrix) { - var el = model.cfg.el; - var transform18 = []; - for (var i4 = 0; i4 < 9; i4 += 3) { - transform18.push(matrix[i4] + "," + matrix[i4 + 1]); - } - transform18 = transform18.join(","); - if (transform18.indexOf("NaN") === -1) { - el.setAttribute("transform", "matrix(" + transform18 + ")"); - } else { - console.warn("invalid matrix:", matrix); - } - } -} -function setClip(model, context) { - var clip = model.getClip(); - var el = model.get("el"); - if (!clip) { - el.removeAttribute("clip-path"); - } else if (clip && !el.hasAttribute("clip-path")) { - createDom2(clip); - clip.createPath(context); - var id = context.addClip(clip); - el.setAttribute("clip-path", "url(#" + id + ")"); - } -} - -// node_modules/@antv/g-svg/esm/util/draw.js -function drawChildren2(context, children) { - children.forEach(function(child) { - child.draw(context); - }); -} -function refreshElement2(element, changeType) { - var canvas = element.get("canvas"); - if (canvas && canvas.get("autoDraw")) { - var context = canvas.get("context"); - var parent_1 = element.getParent(); - var parentChildren = parent_1 ? parent_1.getChildren() : [canvas]; - var el = element.get("el"); - if (changeType === "remove") { - var isClipShape = element.get("isClipShape"); - if (isClipShape) { - var clipPathEl = el && el.parentNode; - var defsEl = clipPathEl && clipPathEl.parentNode; - if (clipPathEl && defsEl) { - defsEl.removeChild(clipPathEl); - } - } else if (el && el.parentNode) { - el.parentNode.removeChild(el); - } - } else if (changeType === "show") { - el.setAttribute("visibility", "visible"); - } else if (changeType === "hide") { - el.setAttribute("visibility", "hidden"); - } else if (changeType === "zIndex") { - moveTo(el, parentChildren.indexOf(element)); - } else if (changeType === "sort") { - var children_1 = element.get("children"); - if (children_1 && children_1.length) { - sortDom(element, function(a4, b10) { - return children_1.indexOf(a4) - children_1.indexOf(b10) ? 1 : 0; - }); - } - } else if (changeType === "clear") { - if (el) { - el.innerHTML = ""; - } - } else if (changeType === "matrix") { - setTransform(element); - } else if (changeType === "clip") { - setClip(element, context); - } else if (changeType === "attr") { - } else if (changeType === "add") { - element.draw(context); - } - } -} - -// node_modules/@antv/g-svg/esm/group.js -var import_util172 = __toModule(require_lib()); -var Group2 = function(_super) { - __extends(Group3, _super); - function Group3() { - return _super !== null && _super.apply(this, arguments) || this; - } - Group3.prototype.isEntityGroup = function() { - return true; - }; - Group3.prototype.createDom = function() { - var element = createSVGElement("g"); - this.set("el", element); - var parent = this.getParent(); - if (parent) { - var parentNode = parent.get("el"); - if (parentNode) { - parentNode.appendChild(element); - } else { - parentNode = parent.createDom(); - parent.set("el", parentNode); - parentNode.appendChild(element); - } - } - return element; - }; - Group3.prototype.afterAttrsChange = function(targetAttrs) { - _super.prototype.afterAttrsChange.call(this, targetAttrs); - var canvas = this.get("canvas"); - if (canvas && canvas.get("autoDraw")) { - var context = canvas.get("context"); - this.createPath(context, targetAttrs); - } - }; - Group3.prototype.onCanvasChange = function(changeType) { - refreshElement2(this, changeType); - }; - Group3.prototype.getShapeBase = function() { - return shape_exports2; - }; - Group3.prototype.getGroupBase = function() { - return Group3; - }; - Group3.prototype.draw = function(context) { - var children = this.getChildren(); - var el = this.get("el"); - if (this.get("destroyed")) { - if (el) { - el.parentNode.removeChild(el); - } - } else { - if (!el) { - this.createDom(); - } - setClip(this, context); - this.createPath(context); - if (children.length) { - drawChildren2(context, children); - } - } - }; - Group3.prototype.createPath = function(context, targetAttrs) { - var attrs = this.attr(); - var el = this.get("el"); - (0, import_util172.each)(targetAttrs || attrs, function(value2, attr) { - if (SVG_ATTR_MAP[attr]) { - el.setAttribute(SVG_ATTR_MAP[attr], value2); - } - }); - setTransform(this); - }; - return Group3; -}(group_default); -var group_default3 = Group2; - -// node_modules/@antv/g-svg/esm/shape/base.js -var ShapeBase3 = function(_super) { - __extends(ShapeBase4, _super); - function ShapeBase4() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "svg"; - _this.canFill = false; - _this.canStroke = false; - return _this; - } - ShapeBase4.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { lineWidth: 1, lineAppendWidth: 0, strokeOpacity: 1, fillOpacity: 1 }); - }; - ShapeBase4.prototype.afterAttrsChange = function(targetAttrs) { - _super.prototype.afterAttrsChange.call(this, targetAttrs); - var canvas = this.get("canvas"); - if (canvas && canvas.get("autoDraw")) { - var context = canvas.get("context"); - this.draw(context, targetAttrs); - } - }; - ShapeBase4.prototype.getShapeBase = function() { - return shape_exports2; - }; - ShapeBase4.prototype.getGroupBase = function() { - return group_default3; - }; - ShapeBase4.prototype.onCanvasChange = function(changeType) { - refreshElement2(this, changeType); - }; - ShapeBase4.prototype.calculateBBox = function() { - var el = this.get("el"); - var bbox = null; - if (el) { - bbox = el.getBBox(); - } else { - var bboxMethod = getMethod(this.get("type")); - if (bboxMethod) { - bbox = bboxMethod(this); - } - } - if (bbox) { - var x6 = bbox.x, y5 = bbox.y, width2 = bbox.width, height = bbox.height; - var lineWidth = this.getHitLineWidth(); - var halfWidth = lineWidth / 2; - var minX = x6 - halfWidth; - var minY = y5 - halfWidth; - var maxX = x6 + width2 + halfWidth; - var maxY2 = y5 + height + halfWidth; - return { - x: minX, - y: minY, - minX, - minY, - maxX, - maxY: maxY2, - width: width2 + lineWidth, - height: height + lineWidth - }; - } - return { - x: 0, - y: 0, - minX: 0, - minY: 0, - maxX: 0, - maxY: 0, - width: 0, - height: 0 - }; - }; - ShapeBase4.prototype.isFill = function() { - var _a6 = this.attr(), fill = _a6.fill, fillStyle = _a6.fillStyle; - return (fill || fillStyle || this.isClipShape()) && this.canFill; - }; - ShapeBase4.prototype.isStroke = function() { - var _a6 = this.attr(), stroke = _a6.stroke, strokeStyle = _a6.strokeStyle; - return (stroke || strokeStyle) && this.canStroke; - }; - ShapeBase4.prototype.draw = function(context, targetAttrs) { - var el = this.get("el"); - if (this.get("destroyed")) { - if (el) { - el.parentNode.removeChild(el); - } - } else { - if (!el) { - createDom2(this); - } - setClip(this, context); - this.createPath(context, targetAttrs); - this.shadow(context, targetAttrs); - this.strokeAndFill(context, targetAttrs); - this.transform(targetAttrs); - } - }; - ShapeBase4.prototype.createPath = function(context, targetAttrs) { - }; - ShapeBase4.prototype.strokeAndFill = function(context, targetAttrs) { - var attrs = targetAttrs || this.attr(); - var fill = attrs.fill, fillStyle = attrs.fillStyle, stroke = attrs.stroke, strokeStyle = attrs.strokeStyle, fillOpacity = attrs.fillOpacity, strokeOpacity = attrs.strokeOpacity, lineWidth = attrs.lineWidth; - var el = this.get("el"); - if (this.canFill) { - if (!targetAttrs) { - this._setColor(context, "fill", fill || fillStyle); - } else if ("fill" in attrs) { - this._setColor(context, "fill", fill); - } else if ("fillStyle" in attrs) { - this._setColor(context, "fill", fillStyle); - } - if (fillOpacity) { - el.setAttribute(SVG_ATTR_MAP["fillOpacity"], fillOpacity); - } - } - if (this.canStroke && lineWidth > 0) { - if (!targetAttrs) { - this._setColor(context, "stroke", stroke || strokeStyle); - } else if ("stroke" in attrs) { - this._setColor(context, "stroke", stroke); - } else if ("strokeStyle" in attrs) { - this._setColor(context, "stroke", strokeStyle); - } - if (strokeOpacity) { - el.setAttribute(SVG_ATTR_MAP["strokeOpacity"], strokeOpacity); - } - if (lineWidth) { - el.setAttribute(SVG_ATTR_MAP["lineWidth"], lineWidth); - } - } - }; - ShapeBase4.prototype._setColor = function(context, attr, value2) { - var el = this.get("el"); - if (!value2) { - el.setAttribute(SVG_ATTR_MAP[attr], "none"); - return; - } - value2 = value2.trim(); - if (/^[r,R,L,l]{1}[\s]*\(/.test(value2)) { - var id = context.find("gradient", value2); - if (!id) { - id = context.addGradient(value2); - } - el.setAttribute(SVG_ATTR_MAP[attr], "url(#" + id + ")"); - } else if (/^[p,P]{1}[\s]*\(/.test(value2)) { - var id = context.find("pattern", value2); - if (!id) { - id = context.addPattern(value2); - } - el.setAttribute(SVG_ATTR_MAP[attr], "url(#" + id + ")"); - } else { - el.setAttribute(SVG_ATTR_MAP[attr], value2); - } - }; - ShapeBase4.prototype.shadow = function(context, targetAttrs) { - var attrs = this.attr(); - var _a6 = targetAttrs || attrs, shadowOffsetX = _a6.shadowOffsetX, shadowOffsetY = _a6.shadowOffsetY, shadowBlur = _a6.shadowBlur, shadowColor = _a6.shadowColor; - if (shadowOffsetX || shadowOffsetY || shadowBlur || shadowColor) { - setShadow(this, context); - } - }; - ShapeBase4.prototype.transform = function(targetAttrs) { - var attrs = this.attr(); - var matrix = (targetAttrs || attrs).matrix; - if (matrix) { - setTransform(this); - } - }; - ShapeBase4.prototype.isInShape = function(refX, refY) { - return this.isPointInPath(refX, refY); - }; - ShapeBase4.prototype.isPointInPath = function(refX, refY) { - var el = this.get("el"); - var canvas = this.get("canvas"); - var bbox = canvas.get("el").getBoundingClientRect(); - var clientX = refX + bbox.left; - var clientY = refY + bbox.top; - var element = document.elementFromPoint(clientX, clientY); - if (element && element.isEqualNode(el)) { - return true; - } - return false; - }; - ShapeBase4.prototype.getHitLineWidth = function() { - var _a6 = this.attrs, lineWidth = _a6.lineWidth, lineAppendWidth = _a6.lineAppendWidth; - if (this.isStroke()) { - return lineWidth + lineAppendWidth; - } - return 0; - }; - return ShapeBase4; -}(shape_default); -var base_default16 = ShapeBase3; - -// node_modules/@antv/g-svg/esm/shape/circle.js -var import_util173 = __toModule(require_lib()); -var Circle4 = function(_super) { - __extends(Circle6, _super); - function Circle6() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "circle"; - _this.canFill = true; - _this.canStroke = true; - return _this; - } - Circle6.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { x: 0, y: 0, r: 0 }); - }; - Circle6.prototype.createPath = function(context, targetAttrs) { - var attrs = this.attr(); - var el = this.get("el"); - (0, import_util173.each)(targetAttrs || attrs, function(value2, attr) { - if (attr === "x" || attr === "y") { - el.setAttribute("c" + attr, value2); - } else if (SVG_ATTR_MAP[attr]) { - el.setAttribute(SVG_ATTR_MAP[attr], value2); - } - }); - }; - return Circle6; -}(base_default16); -var circle_default6 = Circle4; - -// node_modules/@antv/g-svg/esm/shape/dom.js -var import_util174 = __toModule(require_lib()); -var Dom = function(_super) { - __extends(Dom2, _super); - function Dom2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "dom"; - _this.canFill = false; - _this.canStroke = false; - return _this; - } - Dom2.prototype.createPath = function(context, targetAttrs) { - var attrs = this.attr(); - var el = this.get("el"); - (0, import_util174.each)(targetAttrs || attrs, function(value2, attr) { - if (SVG_ATTR_MAP[attr]) { - el.setAttribute(SVG_ATTR_MAP[attr], value2); - } - }); - if (typeof attrs["html"] === "function") { - var element = attrs["html"].call(this, attrs); - if (element instanceof Element || element instanceof HTMLDocument) { - var children = el.childNodes; - for (var i4 = children.length - 1; i4 >= 0; i4--) { - el.removeChild(children[i4]); - } - el.appendChild(element); - } else { - el.innerHTML = element; - } - } else { - el.innerHTML = attrs["html"]; - } - }; - return Dom2; -}(base_default16); -var dom_default = Dom; - -// node_modules/@antv/g-svg/esm/shape/ellipse.js -var import_util175 = __toModule(require_lib()); -var Ellipse2 = function(_super) { - __extends(Ellipse3, _super); - function Ellipse3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "ellipse"; - _this.canFill = true; - _this.canStroke = true; - return _this; - } - Ellipse3.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { x: 0, y: 0, rx: 0, ry: 0 }); - }; - Ellipse3.prototype.createPath = function(context, targetAttrs) { - var attrs = this.attr(); - var el = this.get("el"); - (0, import_util175.each)(targetAttrs || attrs, function(value2, attr) { - if (attr === "x" || attr === "y") { - el.setAttribute("c" + attr, value2); - } else if (SVG_ATTR_MAP[attr]) { - el.setAttribute(SVG_ATTR_MAP[attr], value2); - } - }); - }; - return Ellipse3; -}(base_default16); -var ellipse_default4 = Ellipse2; - -// node_modules/@antv/g-svg/esm/shape/image.js -var import_util176 = __toModule(require_lib()); -var Image2 = function(_super) { - __extends(Image3, _super); - function Image3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "image"; - _this.canFill = false; - _this.canStroke = false; - return _this; - } - Image3.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { x: 0, y: 0, width: 0, height: 0 }); - }; - Image3.prototype.createPath = function(context, targetAttrs) { - var _this = this; - var attrs = this.attr(); - var el = this.get("el"); - (0, import_util176.each)(targetAttrs || attrs, function(value2, attr) { - if (attr === "img") { - _this._setImage(attrs.img); - } else if (SVG_ATTR_MAP[attr]) { - el.setAttribute(SVG_ATTR_MAP[attr], value2); - } - }); - }; - Image3.prototype.setAttr = function(name, value2) { - this.attrs[name] = value2; - if (name === "img") { - this._setImage(value2); - } - }; - Image3.prototype._setImage = function(img) { - var attrs = this.attr(); - var el = this.get("el"); - if ((0, import_util176.isString)(img)) { - el.setAttribute("href", img); - } else if (img instanceof window.Image) { - if (!attrs.width) { - el.setAttribute("width", img.width); - this.attr("width", img.width); - } - if (!attrs.height) { - el.setAttribute("height", img.height); - this.attr("height", img.height); - } - el.setAttribute("href", img.src); - } else if (img instanceof HTMLElement && (0, import_util176.isString)(img.nodeName) && img.nodeName.toUpperCase() === "CANVAS") { - el.setAttribute("href", img.toDataURL()); - } else if (img instanceof ImageData) { - var canvas = document.createElement("canvas"); - canvas.setAttribute("width", "" + img.width); - canvas.setAttribute("height", "" + img.height); - canvas.getContext("2d").putImageData(img, 0, 0); - if (!attrs.width) { - el.setAttribute("width", "" + img.width); - this.attr("width", img.width); - } - if (!attrs.height) { - el.setAttribute("height", "" + img.height); - this.attr("height", img.height); - } - el.setAttribute("href", canvas.toDataURL()); - } - }; - return Image3; -}(base_default16); -var image_default3 = Image2; - -// node_modules/@antv/g-svg/esm/shape/line.js -var import_util177 = __toModule(require_lib()); -var Line4 = function(_super) { - __extends(Line9, _super); - function Line9() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "line"; - _this.canFill = false; - _this.canStroke = true; - return _this; - } - Line9.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { x1: 0, y1: 0, x2: 0, y2: 0, startArrow: false, endArrow: false }); - }; - Line9.prototype.createPath = function(context, targetAttrs) { - var attrs = this.attr(); - var el = this.get("el"); - (0, import_util177.each)(targetAttrs || attrs, function(value2, attr) { - if (attr === "startArrow" || attr === "endArrow") { - if (value2) { - var id = (0, import_util177.isObject)(value2) ? context.addArrow(attrs, SVG_ATTR_MAP[attr]) : context.getDefaultArrow(attrs, SVG_ATTR_MAP[attr]); - el.setAttribute(SVG_ATTR_MAP[attr], "url(#" + id + ")"); - } else { - el.removeAttribute(SVG_ATTR_MAP[attr]); - } - } else if (SVG_ATTR_MAP[attr]) { - el.setAttribute(SVG_ATTR_MAP[attr], value2); - } - }); - }; - Line9.prototype.getTotalLength = function() { - var _a6 = this.attr(), x1 = _a6.x1, y1 = _a6.y1, x22 = _a6.x2, y22 = _a6.y2; - return line_default.length(x1, y1, x22, y22); - }; - Line9.prototype.getPoint = function(ratio) { - var _a6 = this.attr(), x1 = _a6.x1, y1 = _a6.y1, x22 = _a6.x2, y22 = _a6.y2; - return line_default.pointAt(x1, y1, x22, y22, ratio); - }; - return Line9; -}(base_default16); -var line_default8 = Line4; - -// node_modules/@antv/g-svg/esm/shape/marker/index.js -var import_util178 = __toModule(require_lib()); - -// node_modules/@antv/g-svg/esm/shape/marker/symbols.js -var Symbols2 = { - circle: function(x6, y5, r4) { - return [ - ["M", x6, y5], - ["m", -r4, 0], - ["a", r4, r4, 0, 1, 0, r4 * 2, 0], - ["a", r4, r4, 0, 1, 0, -r4 * 2, 0] - ]; - }, - square: function(x6, y5, r4) { - return [["M", x6 - r4, y5 - r4], ["L", x6 + r4, y5 - r4], ["L", x6 + r4, y5 + r4], ["L", x6 - r4, y5 + r4], ["Z"]]; - }, - diamond: function(x6, y5, r4) { - return [["M", x6 - r4, y5], ["L", x6, y5 - r4], ["L", x6 + r4, y5], ["L", x6, y5 + r4], ["Z"]]; - }, - triangle: function(x6, y5, r4) { - var diffY = r4 * Math.sin(1 / 3 * Math.PI); - return [["M", x6 - r4, y5 + diffY], ["L", x6, y5 - diffY], ["L", x6 + r4, y5 + diffY], ["z"]]; - }, - triangleDown: function(x6, y5, r4) { - var diffY = r4 * Math.sin(1 / 3 * Math.PI); - return [["M", x6 - r4, y5 - diffY], ["L", x6 + r4, y5 - diffY], ["L", x6, y5 + diffY], ["Z"]]; - } -}; -var symbols_default = { - get: function(type2) { - return Symbols2[type2]; - }, - register: function(type2, func) { - Symbols2[type2] = func; - }, - remove: function(type2) { - delete Symbols2[type2]; - }, - getAll: function() { - return Symbols2; - } -}; - -// node_modules/@antv/g-svg/esm/shape/marker/index.js -var Marker2 = function(_super) { - __extends(Marker3, _super); - function Marker3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "marker"; - _this.canFill = true; - _this.canStroke = true; - return _this; - } - Marker3.prototype.createPath = function(context) { - var el = this.get("el"); - el.setAttribute("d", this._assembleMarker()); - }; - Marker3.prototype._assembleMarker = function() { - var d3 = this._getPath(); - if ((0, import_util178.isArray)(d3)) { - return d3.map(function(path) { - return path.join(" "); - }).join(""); - } - return d3; - }; - Marker3.prototype._getPath = function() { - var attrs = this.attr(); - var x6 = attrs.x, y5 = attrs.y; - var r4 = attrs.r || attrs.radius; - var symbol = attrs.symbol || "circle"; - var method; - if ((0, import_util178.isFunction)(symbol)) { - method = symbol; - } else { - method = symbols_default.get(symbol); - } - if (!method) { - console.warn(method + " symbol is not exist."); - return null; - } - return method(x6, y5, r4); - }; - Marker3.symbolsFactory = symbols_default; - return Marker3; -}(base_default16); -var marker_default2 = Marker2; - -// node_modules/@antv/g-svg/esm/shape/path.js -var import_util179 = __toModule(require_lib()); -var Path2 = function(_super) { - __extends(Path4, _super); - function Path4() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "path"; - _this.canFill = true; - _this.canStroke = true; - return _this; - } - Path4.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { startArrow: false, endArrow: false }); - }; - Path4.prototype.createPath = function(context, targetAttrs) { - var _this = this; - var attrs = this.attr(); - var el = this.get("el"); - (0, import_util179.each)(targetAttrs || attrs, function(value2, attr) { - if (attr === "path" && (0, import_util179.isArray)(value2)) { - el.setAttribute("d", _this._formatPath(value2)); - } else if (attr === "startArrow" || attr === "endArrow") { - if (value2) { - var id = (0, import_util179.isObject)(value2) ? context.addArrow(attrs, SVG_ATTR_MAP[attr]) : context.getDefaultArrow(attrs, SVG_ATTR_MAP[attr]); - el.setAttribute(SVG_ATTR_MAP[attr], "url(#" + id + ")"); - } else { - el.removeAttribute(SVG_ATTR_MAP[attr]); - } - } else if (SVG_ATTR_MAP[attr]) { - el.setAttribute(SVG_ATTR_MAP[attr], value2); - } - }); - }; - Path4.prototype._formatPath = function(value2) { - var newValue = value2.map(function(path) { - return path.join(" "); - }).join(""); - if (~newValue.indexOf("NaN")) { - return ""; - } - return newValue; - }; - Path4.prototype.getTotalLength = function() { - var el = this.get("el"); - return el ? el.getTotalLength() : null; - }; - Path4.prototype.getPoint = function(ratio) { - var el = this.get("el"); - var totalLength = this.getTotalLength(); - if (totalLength === 0) { - return null; - } - var point2 = el ? el.getPointAtLength(ratio * totalLength) : null; - return point2 ? { - x: point2.x, - y: point2.y - } : null; - }; - return Path4; -}(base_default16); -var path_default4 = Path2; - -// node_modules/@antv/g-svg/esm/shape/polygon.js -var import_util180 = __toModule(require_lib()); -var Polygon2 = function(_super) { - __extends(Polygon4, _super); - function Polygon4() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "polygon"; - _this.canFill = true; - _this.canStroke = true; - return _this; - } - Polygon4.prototype.createPath = function(context, targetAttrs) { - var attrs = this.attr(); - var el = this.get("el"); - (0, import_util180.each)(targetAttrs || attrs, function(value2, attr) { - if (attr === "points" && (0, import_util180.isArray)(value2) && value2.length >= 2) { - el.setAttribute("points", value2.map(function(point2) { - return point2[0] + "," + point2[1]; - }).join(" ")); - } else if (SVG_ATTR_MAP[attr]) { - el.setAttribute(SVG_ATTR_MAP[attr], value2); - } - }); - }; - return Polygon4; -}(base_default16); -var polygon_default4 = Polygon2; - -// node_modules/@antv/g-svg/esm/shape/polyline.js -var import_util181 = __toModule(require_lib()); -var Polyline = function(_super) { - __extends(Polyline2, _super); - function Polyline2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "polyline"; - _this.canFill = true; - _this.canStroke = true; - return _this; - } - Polyline2.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { startArrow: false, endArrow: false }); - }; - Polyline2.prototype.onAttrChange = function(name, value2, originValue) { - _super.prototype.onAttrChange.call(this, name, value2, originValue); - if (["points"].indexOf(name) !== -1) { - this._resetCache(); - } - }; - Polyline2.prototype._resetCache = function() { - this.set("totalLength", null); - this.set("tCache", null); - }; - Polyline2.prototype.createPath = function(context, targetAttrs) { - var attrs = this.attr(); - var el = this.get("el"); - (0, import_util181.each)(targetAttrs || attrs, function(value2, attr) { - if (attr === "points" && (0, import_util181.isArray)(value2) && value2.length >= 2) { - el.setAttribute("points", value2.map(function(point2) { - return point2[0] + "," + point2[1]; - }).join(" ")); - } else if (SVG_ATTR_MAP[attr]) { - el.setAttribute(SVG_ATTR_MAP[attr], value2); - } - }); - }; - Polyline2.prototype.getTotalLength = function() { - var points = this.attr().points; - var totalLength = this.get("totalLength"); - if (!(0, import_util181.isNil)(totalLength)) { - return totalLength; - } - this.set("totalLength", polyline_default.length(points)); - return this.get("totalLength"); - }; - Polyline2.prototype.getPoint = function(ratio) { - var points = this.attr().points; - var tCache = this.get("tCache"); - if (!tCache) { - this._setTcache(); - tCache = this.get("tCache"); - } - var subt; - var index2; - (0, import_util181.each)(tCache, function(v3, i4) { - if (ratio >= v3[0] && ratio <= v3[1]) { - subt = (ratio - v3[0]) / (v3[1] - v3[0]); - index2 = i4; - } - }); - return line_default.pointAt(points[index2][0], points[index2][1], points[index2 + 1][0], points[index2 + 1][1], subt); - }; - Polyline2.prototype._setTcache = function() { - var points = this.attr().points; - if (!points || points.length === 0) { - return; - } - var totalLength = this.getTotalLength(); - if (totalLength <= 0) { - return; - } - var tempLength = 0; - var tCache = []; - var segmentT; - var segmentL; - (0, import_util181.each)(points, function(p4, i4) { - if (points[i4 + 1]) { - segmentT = []; - segmentT[0] = tempLength / totalLength; - segmentL = line_default.length(p4[0], p4[1], points[i4 + 1][0], points[i4 + 1][1]); - tempLength += segmentL; - segmentT[1] = tempLength / totalLength; - tCache.push(segmentT); - } - }); - this.set("tCache", tCache); - }; - Polyline2.prototype.getStartTangent = function() { - var points = this.attr().points; - var result = []; - result.push([points[1][0], points[1][1]]); - result.push([points[0][0], points[0][1]]); - return result; - }; - Polyline2.prototype.getEndTangent = function() { - var points = this.attr().points; - var l4 = points.length - 1; - var result = []; - result.push([points[l4 - 1][0], points[l4 - 1][1]]); - result.push([points[l4][0], points[l4][1]]); - return result; - }; - return Polyline2; -}(base_default16); -var polyline_default4 = Polyline; - -// node_modules/@antv/g-svg/esm/shape/rect.js -var import_util183 = __toModule(require_lib()); - -// node_modules/@antv/g-svg/esm/util/format.js -var import_util182 = __toModule(require_lib()); -function parseRadius2(radius) { - var r1 = 0; - var r22 = 0; - var r32 = 0; - var r4 = 0; - if ((0, import_util182.isArray)(radius)) { - if (radius.length === 1) { - r1 = r22 = r32 = r4 = radius[0]; - } else if (radius.length === 2) { - r1 = r32 = radius[0]; - r22 = r4 = radius[1]; - } else if (radius.length === 3) { - r1 = radius[0]; - r22 = r4 = radius[1]; - r32 = radius[2]; - } else { - r1 = radius[0]; - r22 = radius[1]; - r32 = radius[2]; - r4 = radius[3]; - } - } else { - r1 = r22 = r32 = r4 = radius; - } - return { - r1, - r2: r22, - r3: r32, - r4 - }; -} - -// node_modules/@antv/g-svg/esm/shape/rect.js -var Rect2 = function(_super) { - __extends(Rect4, _super); - function Rect4() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "rect"; - _this.canFill = true; - _this.canStroke = true; - return _this; - } - Rect4.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { x: 0, y: 0, width: 0, height: 0, radius: 0 }); - }; - Rect4.prototype.createPath = function(context, targetAttrs) { - var _this = this; - var attrs = this.attr(); - var el = this.get("el"); - var completed = false; - var pathRelatedAttrs = ["x", "y", "width", "height", "radius"]; - (0, import_util183.each)(targetAttrs || attrs, function(value2, attr) { - if (pathRelatedAttrs.indexOf(attr) !== -1 && !completed) { - el.setAttribute("d", _this._assembleRect(attrs)); - completed = true; - } else if (pathRelatedAttrs.indexOf(attr) === -1 && SVG_ATTR_MAP[attr]) { - el.setAttribute(SVG_ATTR_MAP[attr], value2); - } - }); - }; - Rect4.prototype._assembleRect = function(attrs) { - var x6 = attrs.x; - var y5 = attrs.y; - var w4 = attrs.width; - var h3 = attrs.height; - var radius = attrs.radius; - if (!radius) { - return "M " + x6 + "," + y5 + " l " + w4 + ",0 l 0," + h3 + " l" + -w4 + " 0 z"; - } - var r4 = parseRadius2(radius); - if ((0, import_util183.isArray)(radius)) { - if (radius.length === 1) { - r4.r1 = r4.r2 = r4.r3 = r4.r4 = radius[0]; - } else if (radius.length === 2) { - r4.r1 = r4.r3 = radius[0]; - r4.r2 = r4.r4 = radius[1]; - } else if (radius.length === 3) { - r4.r1 = radius[0]; - r4.r2 = r4.r4 = radius[1]; - r4.r3 = radius[2]; - } else { - r4.r1 = radius[0]; - r4.r2 = radius[1]; - r4.r3 = radius[2]; - r4.r4 = radius[3]; - } - } else { - r4.r1 = r4.r2 = r4.r3 = r4.r4 = radius; - } - var d3 = [ - ["M " + (x6 + r4.r1) + "," + y5], - ["l " + (w4 - r4.r1 - r4.r2) + ",0"], - ["a " + r4.r2 + "," + r4.r2 + ",0,0,1," + r4.r2 + "," + r4.r2], - ["l 0," + (h3 - r4.r2 - r4.r3)], - ["a " + r4.r3 + "," + r4.r3 + ",0,0,1," + -r4.r3 + "," + r4.r3], - ["l " + (r4.r3 + r4.r4 - w4) + ",0"], - ["a " + r4.r4 + "," + r4.r4 + ",0,0,1," + -r4.r4 + "," + -r4.r4], - ["l 0," + (r4.r4 + r4.r1 - h3)], - ["a " + r4.r1 + "," + r4.r1 + ",0,0,1," + r4.r1 + "," + -r4.r1], - ["z"] - ]; - return d3.join(" "); - }; - return Rect4; -}(base_default16); -var rect_default3 = Rect2; - -// node_modules/@antv/g-svg/esm/shape/text.js -var import_util184 = __toModule(require_lib()); -var LETTER_SPACING = 0.3; -var BASELINE_MAP = { - top: "before-edge", - middle: "central", - bottom: "after-edge", - alphabetic: "baseline", - hanging: "hanging" -}; -var BASELINE_MAP_FOR_FIREFOX = { - top: "text-before-edge", - middle: "central", - bottom: "text-after-edge", - alphabetic: "alphabetic", - hanging: "hanging" -}; -var ANCHOR_MAP = { - left: "left", - start: "left", - center: "middle", - right: "end", - end: "end" -}; -var Text2 = function(_super) { - __extends(Text3, _super); - function Text3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "text"; - _this.canFill = true; - _this.canStroke = true; - return _this; - } - Text3.prototype.getDefaultAttrs = function() { - var attrs = _super.prototype.getDefaultAttrs.call(this); - return __assign(__assign({}, attrs), { x: 0, y: 0, text: null, fontSize: 12, fontFamily: "sans-serif", fontStyle: "normal", fontWeight: "normal", fontVariant: "normal", textAlign: "start", textBaseline: "bottom" }); - }; - Text3.prototype.createPath = function(context, targetAttrs) { - var _this = this; - var attrs = this.attr(); - var el = this.get("el"); - this._setFont(); - (0, import_util184.each)(targetAttrs || attrs, function(value2, attr) { - if (attr === "text") { - _this._setText("" + value2); - } else if (attr === "matrix" && value2) { - setTransform(_this); - } else if (SVG_ATTR_MAP[attr]) { - el.setAttribute(SVG_ATTR_MAP[attr], value2); - } - }); - el.setAttribute("paint-order", "stroke"); - el.setAttribute("style", "stroke-linecap:butt; stroke-linejoin:miter;"); - }; - Text3.prototype._setFont = function() { - var el = this.get("el"); - var _a6 = this.attr(), textBaseline = _a6.textBaseline, textAlign = _a6.textAlign; - var browser2 = detect(); - if (browser2 && browser2.name === "firefox") { - el.setAttribute("dominant-baseline", BASELINE_MAP_FOR_FIREFOX[textBaseline] || "alphabetic"); - } else { - el.setAttribute("alignment-baseline", BASELINE_MAP[textBaseline] || "baseline"); - } - el.setAttribute("text-anchor", ANCHOR_MAP[textAlign] || "left"); - }; - Text3.prototype._setText = function(text) { - var el = this.get("el"); - var _a6 = this.attr(), x6 = _a6.x, _b = _a6.textBaseline, baseline = _b === void 0 ? "bottom" : _b; - if (!text) { - el.innerHTML = ""; - } else if (~text.indexOf("\n")) { - var textArr = text.split("\n"); - var textLen_1 = textArr.length - 1; - var arr_1 = ""; - (0, import_util184.each)(textArr, function(segment, i4) { - if (i4 === 0) { - if (baseline === "alphabetic") { - arr_1 += '' + segment + ""; - } else if (baseline === "top") { - arr_1 += '' + segment + ""; - } else if (baseline === "middle") { - arr_1 += '' + segment + ""; - } else if (baseline === "bottom") { - arr_1 += '' + segment + ""; - } else if (baseline === "hanging") { - arr_1 += '' + segment + ""; - } - } else { - arr_1 += '' + segment + ""; - } - }); - el.innerHTML = arr_1; - } else { - el.innerHTML = text; - } - }; - return Text3; -}(base_default16); -var text_default4 = Text2; - -// node_modules/@antv/g-svg/esm/defs/index.js -var import_util190 = __toModule(require_lib()); - -// node_modules/@antv/g-svg/esm/defs/gradient.js -var import_util185 = __toModule(require_lib()); -var regexLG3 = /^l\s*\(\s*([\d.]+)\s*\)\s*(.*)/i; -var regexRG3 = /^r\s*\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*\)\s*(.*)/i; -var regexColorStop3 = /[\d.]+:(#[^\s]+|[^)]+\))/gi; -function addStop2(steps) { - var arr = steps.match(regexColorStop3); - if (!arr) { - return ""; - } - var stops = ""; - arr.sort(function(a4, b10) { - a4 = a4.split(":"); - b10 = b10.split(":"); - return Number(a4[0]) - Number(b10[0]); - }); - (0, import_util185.each)(arr, function(item) { - item = item.split(":"); - stops += ''; - }); - return stops; -} -function parseLineGradient2(color4, el) { - var arr = regexLG3.exec(color4); - var angle3 = (0, import_util185.mod)((0, import_util185.toRadian)(parseFloat(arr[1])), Math.PI * 2); - var steps = arr[2]; - var start; - var end2; - if (angle3 >= 0 && angle3 < 0.5 * Math.PI) { - start = { - x: 0, - y: 0 - }; - end2 = { - x: 1, - y: 1 - }; - } else if (0.5 * Math.PI <= angle3 && angle3 < Math.PI) { - start = { - x: 1, - y: 0 - }; - end2 = { - x: 0, - y: 1 - }; - } else if (Math.PI <= angle3 && angle3 < 1.5 * Math.PI) { - start = { - x: 1, - y: 1 - }; - end2 = { - x: 0, - y: 0 - }; - } else { - start = { - x: 0, - y: 1 - }; - end2 = { - x: 1, - y: 0 - }; - } - var tanTheta = Math.tan(angle3); - var tanTheta2 = tanTheta * tanTheta; - var x6 = (end2.x - start.x + tanTheta * (end2.y - start.y)) / (tanTheta2 + 1) + start.x; - var y5 = tanTheta * (end2.x - start.x + tanTheta * (end2.y - start.y)) / (tanTheta2 + 1) + start.y; - el.setAttribute("x1", start.x); - el.setAttribute("y1", start.y); - el.setAttribute("x2", x6); - el.setAttribute("y2", y5); - el.innerHTML = addStop2(steps); -} -function parseRadialGradient2(color4, self2) { - var arr = regexRG3.exec(color4); - var cx = parseFloat(arr[1]); - var cy = parseFloat(arr[2]); - var r4 = parseFloat(arr[3]); - var steps = arr[4]; - self2.setAttribute("cx", cx); - self2.setAttribute("cy", cy); - self2.setAttribute("r", r4); - self2.innerHTML = addStop2(steps); -} -var Gradient = function() { - function Gradient2(cfg) { - this.cfg = {}; - var el = null; - var id = (0, import_util185.uniqueId)("gradient_"); - if (cfg.toLowerCase()[0] === "l") { - el = createSVGElement("linearGradient"); - parseLineGradient2(cfg, el); - } else { - el = createSVGElement("radialGradient"); - parseRadialGradient2(cfg, el); - } - el.setAttribute("id", id); - this.el = el; - this.id = id; - this.cfg = cfg; - return this; - } - Gradient2.prototype.match = function(type2, attr) { - return this.cfg === attr; - }; - return Gradient2; -}(); -var gradient_default = Gradient; - -// node_modules/@antv/g-svg/esm/defs/shadow.js -var import_util186 = __toModule(require_lib()); -var ATTR_MAP = { - shadowColor: "color", - shadowOpacity: "opacity", - shadowBlur: "blur", - shadowOffsetX: "dx", - shadowOffsetY: "dy" -}; -var SHADOW_DIMENSION = { - x: "-40%", - y: "-40%", - width: "200%", - height: "200%" -}; -var Shadow = function() { - function Shadow2(cfg) { - this.type = "filter"; - this.cfg = {}; - this.type = "filter"; - var el = createSVGElement("filter"); - (0, import_util186.each)(SHADOW_DIMENSION, function(v3, k4) { - el.setAttribute(k4, v3); - }); - this.el = el; - this.id = (0, import_util186.uniqueId)("filter_"); - this.el.id = this.id; - this.cfg = cfg; - this._parseShadow(cfg, el); - return this; - } - Shadow2.prototype.match = function(type2, cfg) { - if (this.type !== type2) { - return false; - } - var flag = true; - var config = this.cfg; - (0, import_util186.each)(Object.keys(config), function(attr) { - if (config[attr] !== cfg[attr]) { - flag = false; - return false; - } - }); - return flag; - }; - Shadow2.prototype.update = function(name, value2) { - var config = this.cfg; - config[ATTR_MAP[name]] = value2; - this._parseShadow(config, this.el); - return this; - }; - Shadow2.prototype._parseShadow = function(config, el) { - var child = ''; - el.innerHTML = child; - }; - return Shadow2; -}(); -var shadow_default = Shadow; - -// node_modules/@antv/g-svg/esm/defs/arrow.js -var import_util187 = __toModule(require_lib()); -var Arrow = function() { - function Arrow2(attrs, type2) { - this.cfg = {}; - var el = createSVGElement("marker"); - var id = (0, import_util187.uniqueId)("marker_"); - el.setAttribute("id", id); - var shape = createSVGElement("path"); - shape.setAttribute("stroke", attrs.stroke || "none"); - shape.setAttribute("fill", attrs.fill || "none"); - el.appendChild(shape); - el.setAttribute("overflow", "visible"); - el.setAttribute("orient", "auto-start-reverse"); - this.el = el; - this.child = shape; - this.id = id; - var cfg = attrs[type2 === "marker-start" ? "startArrow" : "endArrow"]; - this.stroke = attrs.stroke || "#000"; - if (cfg === true) { - this._setDefaultPath(type2, shape); - } else { - this.cfg = cfg; - this._setMarker(attrs.lineWidth, shape); - } - return this; - } - Arrow2.prototype.match = function() { - return false; - }; - Arrow2.prototype._setDefaultPath = function(type2, el) { - var parent = this.el; - el.setAttribute("d", "M0,0 L" + 10 * Math.cos(Math.PI / 6) + ",5 L0,10"); - parent.setAttribute("refX", "" + 10 * Math.cos(Math.PI / 6)); - parent.setAttribute("refY", "" + 5); - }; - Arrow2.prototype._setMarker = function(r4, el) { - var parent = this.el; - var path = this.cfg.path; - var d3 = this.cfg.d; - if ((0, import_util187.isArray)(path)) { - path = path.map(function(segment) { - return segment.join(" "); - }).join(""); - } - el.setAttribute("d", path); - parent.appendChild(el); - if (d3) { - parent.setAttribute("refX", "" + d3 / r4); - } - }; - Arrow2.prototype.update = function(fill) { - var child = this.child; - if (child.attr) { - child.attr("fill", fill); - } else { - child.setAttribute("fill", fill); - } - }; - return Arrow2; -}(); -var arrow_default = Arrow; - -// node_modules/@antv/g-svg/esm/defs/clip.js -var import_util188 = __toModule(require_lib()); -var Clip = function() { - function Clip2(cfg) { - this.type = "clip"; - this.cfg = {}; - var el = createSVGElement("clipPath"); - this.el = el; - this.id = (0, import_util188.uniqueId)("clip_"); - el.id = this.id; - var shapeEl = cfg.cfg.el; - el.appendChild(shapeEl); - this.cfg = cfg; - return this; - } - Clip2.prototype.match = function() { - return false; - }; - Clip2.prototype.remove = function() { - var el = this.el; - el.parentNode.removeChild(el); - }; - return Clip2; -}(); -var clip_default = Clip; - -// node_modules/@antv/g-svg/esm/defs/pattern.js -var import_util189 = __toModule(require_lib()); -var regexPR2 = /^p\s*\(\s*([axyn])\s*\)\s*(.*)/i; -var Pattern = function() { - function Pattern2(cfg) { - this.cfg = {}; - var el = createSVGElement("pattern"); - el.setAttribute("patternUnits", "userSpaceOnUse"); - var child = createSVGElement("image"); - el.appendChild(child); - var id = (0, import_util189.uniqueId)("pattern_"); - el.id = id; - this.el = el; - this.id = id; - this.cfg = cfg; - var arr = regexPR2.exec(cfg); - var source = arr[2]; - child.setAttribute("href", source); - var img = new Image(); - if (!source.match(/^data:/i)) { - img.crossOrigin = "Anonymous"; - } - img.src = source; - function onload() { - el.setAttribute("width", "" + img.width); - el.setAttribute("height", "" + img.height); - } - if (img.complete) { - onload(); - } else { - img.onload = onload; - img.src = img.src; - } - return this; - } - Pattern2.prototype.match = function(type2, attr) { - return this.cfg === attr; - }; - return Pattern2; -}(); -var pattern_default = Pattern; - -// node_modules/@antv/g-svg/esm/defs/index.js -var Defs = function() { - function Defs2(canvas) { - var el = createSVGElement("defs"); - var id = (0, import_util190.uniqueId)("defs_"); - el.id = id; - canvas.appendChild(el); - this.children = []; - this.defaultArrow = {}; - this.el = el; - this.canvas = canvas; - } - Defs2.prototype.find = function(type2, attr) { - var children = this.children; - var result = null; - for (var i4 = 0; i4 < children.length; i4++) { - if (children[i4].match(type2, attr)) { - result = children[i4].id; - break; - } - } - return result; - }; - Defs2.prototype.findById = function(id) { - var children = this.children; - var flag = null; - for (var i4 = 0; i4 < children.length; i4++) { - if (children[i4].id === id) { - flag = children[i4]; - break; - } - } - return flag; - }; - Defs2.prototype.add = function(item) { - this.children.push(item); - item.canvas = this.canvas; - item.parent = this; - }; - Defs2.prototype.getDefaultArrow = function(attrs, name) { - var stroke = attrs.stroke || attrs.strokeStyle; - if (this.defaultArrow[stroke]) { - return this.defaultArrow[stroke].id; - } - var arrow = new arrow_default(attrs, name); - this.defaultArrow[stroke] = arrow; - this.el.appendChild(arrow.el); - this.add(arrow); - return arrow.id; - }; - Defs2.prototype.addGradient = function(cfg) { - var gradient2 = new gradient_default(cfg); - this.el.appendChild(gradient2.el); - this.add(gradient2); - return gradient2.id; - }; - Defs2.prototype.addArrow = function(attrs, name) { - var arrow = new arrow_default(attrs, name); - this.el.appendChild(arrow.el); - this.add(arrow); - return arrow.id; - }; - Defs2.prototype.addShadow = function(cfg) { - var shadow = new shadow_default(cfg); - this.el.appendChild(shadow.el); - this.add(shadow); - return shadow.id; - }; - Defs2.prototype.addPattern = function(cfg) { - var pattern2 = new pattern_default(cfg); - this.el.appendChild(pattern2.el); - this.add(pattern2); - return pattern2.id; - }; - Defs2.prototype.addClip = function(cfg) { - var clip = new clip_default(cfg); - this.el.appendChild(clip.el); - this.add(clip); - return clip.id; - }; - return Defs2; -}(); -var defs_default = Defs; - -// node_modules/@antv/g-svg/esm/canvas.js -var Canvas3 = function(_super) { - __extends(Canvas4, _super); - function Canvas4(cfg) { - return _super.call(this, __assign(__assign({}, cfg), { - autoDraw: true, - renderer: "svg" - })) || this; - } - Canvas4.prototype.getShapeBase = function() { - return shape_exports2; - }; - Canvas4.prototype.getGroupBase = function() { - return group_default3; - }; - Canvas4.prototype.getShape = function(x6, y5, ev) { - var target = ev.target || ev.srcElement; - if (!SHAPE_TO_TAGS[target.tagName]) { - var parent_1 = target.parentNode; - while (parent_1 && !SHAPE_TO_TAGS[parent_1.tagName]) { - parent_1 = parent_1.parentNode; - } - target = parent_1; - } - return this.find(function(child) { - return child.get("el") === target; - }); - }; - Canvas4.prototype.createDom = function() { - var element = createSVGElement("svg"); - var context = new defs_default(element); - element.setAttribute("width", "" + this.get("width")); - element.setAttribute("height", "" + this.get("height")); - this.set("context", context); - return element; - }; - Canvas4.prototype.onCanvasChange = function(changeType) { - var context = this.get("context"); - var el = this.get("el"); - if (changeType === "sort") { - var children_1 = this.get("children"); - if (children_1 && children_1.length) { - sortDom(this, function(a4, b10) { - return children_1.indexOf(a4) - children_1.indexOf(b10) ? 1 : 0; - }); - } - } else if (changeType === "clear") { - if (el) { - el.innerHTML = ""; - var defsEl = context.el; - defsEl.innerHTML = ""; - el.appendChild(defsEl); - } - } else if (changeType === "matrix") { - setTransform(this); - } else if (changeType === "clip") { - setClip(this, context); - } else if (changeType === "changeSize") { - el.setAttribute("width", "" + this.get("width")); - el.setAttribute("height", "" + this.get("height")); - } - }; - Canvas4.prototype.draw = function() { - var context = this.get("context"); - var children = this.getChildren(); - setClip(this, context); - if (children.length) { - drawChildren2(context, children); - } - }; - return Canvas4; -}(canvas_default); -var canvas_default3 = Canvas3; - -// node_modules/@antv/g-svg/esm/index.js -var version2 = "0.5.6"; - -// node_modules/@antv/g2/esm/geometry/path.js -var Path3 = function(_super) { - __extends(Path4, _super); - function Path4(cfg) { - var _this = _super.call(this, cfg) || this; - _this.type = "path"; - _this.shapeType = "line"; - var _a6 = cfg.connectNulls, connectNulls = _a6 === void 0 ? false : _a6, _b = cfg.showSinglePoint, showSinglePoint = _b === void 0 ? true : _b; - _this.connectNulls = connectNulls; - _this.showSinglePoint = showSinglePoint; - return _this; - } - Path4.prototype.updateElements = function(mappingDataArray, isUpdate) { - if (isUpdate === void 0) { - isUpdate = false; - } - var keyData = new Map(); - var keyIndex = new Map(); - var keys6 = []; - var index2 = 0; - for (var i4 = 0; i4 < mappingDataArray.length; i4++) { - var mappingData = mappingDataArray[i4]; - var key = this.getElementId(mappingData); - keys6.push(key); - keyData.set(key, mappingData); - keyIndex.set(key, index2); - index2++; - } - this.elements = new Array(index2); - var _a6 = diff(this.lastElementsMap, keys6), added = _a6.added, updated = _a6.updated, removed = _a6.removed; - for (var _i = 0, added_1 = added; _i < added_1.length; _i++) { - var key = added_1[_i]; - var mappingData = keyData.get(key); - var shapeFactory = this.getShapeFactory(); - var shapeCfg = this.getShapeInfo(mappingData); - var i4 = keyIndex.get(key); - var element = new element_default2({ - shapeFactory, - container: this.container, - offscreenGroup: this.getOffscreenGroup(), - elementIndex: i4 - }); - element.geometry = this; - element.animate = this.animateOption; - element.draw(shapeCfg, isUpdate); - this.elementsMap[key] = element; - this.elements[i4] = element; - } - for (var _b = 0, updated_1 = updated; _b < updated_1.length; _b++) { - var key = updated_1[_b]; - var mappingData = keyData.get(key); - var element = this.lastElementsMap[key]; - var i4 = keyIndex.get(key); - var shapeCfg = this.getShapeInfo(mappingData); - var preShapeCfg = element.getModel(); - if (this.isCoordinateChanged || isModelChange(preShapeCfg, shapeCfg)) { - element.animate = this.animateOption; - element.update(shapeCfg); - } - this.elementsMap[key] = element; - this.elements[i4] = element; - } - for (var _c = 0, removed_1 = removed; _c < removed_1.length; _c++) { - var key = removed_1[_c]; - var element = this.lastElementsMap[key]; - element.animate = this.animateOption; - element.destroy(); - } - }; - Path4.prototype.getPointsAndData = function(mappingData) { - var points = []; - var data3 = []; - for (var i4 = 0, len5 = mappingData.length; i4 < len5; i4++) { - var obj = mappingData[i4]; - points.push({ - x: obj.x, - y: obj.y - }); - data3.push(obj[FIELD_ORIGIN]); - } - return { - points, - data: data3 - }; - }; - Path4.prototype.getShapeInfo = function(mappingData) { - var shapeCfg = this.getDrawCfg(mappingData[0]); - var _a6 = this.getPointsAndData(mappingData), points = _a6.points, data3 = _a6.data; - shapeCfg.mappingData = mappingData; - shapeCfg.data = data3; - shapeCfg.isStack = !!this.getAdjust("stack"); - shapeCfg.points = points; - shapeCfg.connectNulls = this.connectNulls; - shapeCfg.showSinglePoint = this.showSinglePoint; - return shapeCfg; - }; - return Path4; -}(base_default13); -var path_default5 = Path3; - -// node_modules/@antv/g2/esm/geometry/shape/area/index.js -var import_util192 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/geometry/shape/area/util.js -var import_util191 = __toModule(require_lib()); -function getPath2(points, isInCircle, smooth, registeredShape, constraint) { - var path = []; - if (points.length) { - var topLinePoints_1 = []; - var bottomLinePoints_1 = []; - for (var i4 = 0, len5 = points.length; i4 < len5; i4++) { - var point2 = points[i4]; - topLinePoints_1.push(point2[1]); - bottomLinePoints_1.push(point2[0]); - } - bottomLinePoints_1 = bottomLinePoints_1.reverse(); - (0, import_util191.each)([topLinePoints_1, bottomLinePoints_1], function(pointsData, index2) { - var subPath = []; - var parsedPoints = registeredShape.parsePoints(pointsData); - var p1 = parsedPoints[0]; - if (topLinePoints_1.length === 1 && bottomLinePoints_1.length === 1) { - subPath = index2 === 0 ? [ - ["M", p1.x - 0.5, p1.y], - ["L", p1.x + 0.5, p1.y] - ] : [ - ["L", p1.x + 0.5, p1.y], - ["L", p1.x - 0.5, p1.y] - ]; - } else { - if (isInCircle) { - parsedPoints.push({ x: p1.x, y: p1.y }); - } - if (smooth) { - subPath = getSplinePath(parsedPoints, false, constraint); - } else { - subPath = getLinePath2(parsedPoints, false); - } - if (index2 > 0) { - subPath[0][0] = "L"; - } - } - path = path.concat(subPath); - }); - path.push(["Z"]); - } - return path; -} -function getShapeAttrs2(cfg, isStroke, smooth, registeredShape, constraint) { - var attrs = getStyle2(cfg, isStroke, !isStroke, "lineWidth"); - var connectNulls = cfg.connectNulls, isInCircle = cfg.isInCircle, points = cfg.points, showSinglePoint = cfg.showSinglePoint; - var pathPoints = getPathPoints(points, connectNulls, showSinglePoint); - var path = []; - for (var i4 = 0, len5 = pathPoints.length; i4 < len5; i4++) { - var eachPoints = pathPoints[i4]; - path = path.concat(getPath2(eachPoints, isInCircle, smooth, registeredShape, constraint)); - } - attrs.path = path; - return attrs; -} -function getConstraint(coordinate11) { - var start = coordinate11.start, end2 = coordinate11.end; - return [ - [start.x, end2.y], - [end2.x, start.y] - ]; -} - -// node_modules/@antv/g2/esm/geometry/shape/area/index.js -var AreaShapeFactory = registerShapeFactory("area", { - defaultShapeType: "area", - getDefaultPoints: function(pointInfo) { - var x6 = pointInfo.x, y0 = pointInfo.y0; - var y5 = (0, import_util192.isArray)(pointInfo.y) ? pointInfo.y : [y0, pointInfo.y]; - return y5.map(function(yItem) { - return { - x: x6, - y: yItem - }; - }); - } -}); -registerShape("area", "area", { - draw: function(cfg, container2) { - var attrs = getShapeAttrs2(cfg, false, false, this); - var shape = container2.addShape({ - type: "path", - attrs, - name: "area" - }); - return shape; - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: function(x6, y5, r4) { - if (r4 === void 0) { - r4 = 5.5; - } - return [["M", x6 - r4, y5 - 4], ["L", x6 + r4, y5 - 4], ["L", x6 + r4, y5 + 4], ["L", x6 - r4, y5 + 4], ["Z"]]; - }, - style: { - r: 5, - fill: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/area.js -var Area = function(_super) { - __extends(Area3, _super); - function Area3(cfg) { - var _this = _super.call(this, cfg) || this; - _this.type = "area"; - _this.shapeType = "area"; - _this.generatePoints = true; - _this.startOnZero = true; - var _a6 = cfg.startOnZero, startOnZero = _a6 === void 0 ? true : _a6, _b = cfg.sortable, sortable = _b === void 0 ? false : _b, _c = cfg.showSinglePoint, showSinglePoint = _c === void 0 ? false : _c; - _this.startOnZero = startOnZero; - _this.sortable = sortable; - _this.showSinglePoint = showSinglePoint; - return _this; - } - Area3.prototype.getPointsAndData = function(mappingData) { - var points = []; - var data3 = []; - for (var i4 = 0, len5 = mappingData.length; i4 < len5; i4++) { - var obj = mappingData[i4]; - points.push(obj.points); - data3.push(obj[FIELD_ORIGIN]); - } - return { - points, - data: data3 - }; - }; - Area3.prototype.getYMinValue = function() { - if (this.startOnZero) { - return _super.prototype.getYMinValue.call(this); - } - var yScale = this.getYScale(); - return yScale.min; - }; - return Area3; -}(path_default5); -var area_default = Area; - -// node_modules/@antv/g2/esm/geometry/shape/edge/index.js -var EdgeShapeFactory = registerShapeFactory("edge", { - defaultShapeType: "line", - getDefaultPoints: function(pointInfo) { - return splitPoints(pointInfo); - } -}); -registerShape("edge", "line", { - draw: function(cfg, container2) { - var style = getStyle2(cfg, true, false, "lineWidth"); - var path = getLinePath2(this.parsePoints(cfg.points), this.coordinate.isPolar); - return container2.addShape("path", { - attrs: __assign(__assign({}, style), { path }) - }); - }, - getMarker: function(markerCfg) { - return { - symbol: "circle", - style: { - r: 4.5, - fill: markerCfg.color - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/edge.js -var Edge = function(_super) { - __extends(Edge4, _super); - function Edge4() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "edge"; - _this.shapeType = "edge"; - _this.generatePoints = true; - return _this; - } - return Edge4; -}(base_default13); -var edge_default = Edge; - -// node_modules/@antv/g2/esm/geometry/heatmap.js -var import_util194 = __toModule(require_lib()); -var Heatmap = function(_super) { - __extends(Heatmap3, _super); - function Heatmap3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "heatmap"; - _this.paletteCache = {}; - return _this; - } - Heatmap3.prototype.updateElements = function(mappingDataArray, isUpdate) { - if (isUpdate === void 0) { - isUpdate = false; - } - for (var i4 = 0; i4 < mappingDataArray.length; i4++) { - var mappingData = mappingDataArray[i4]; - var range = this.prepareRange(mappingData); - var radius = this.prepareSize(); - var blur_1 = (0, import_util194.get)(this.styleOption, ["cfg", "shadowBlur"]); - if (!(0, import_util194.isNumber)(blur_1)) { - blur_1 = radius / 2; - } - this.prepareGreyScaleBlurredCircle(radius, blur_1); - this.drawWithRange(mappingData, range, radius, blur_1); - } - }; - Heatmap3.prototype.color = function(field6, cfg) { - this.createAttrOption("color", field6, typeof cfg !== "function" ? cfg : ""); - return this; - }; - Heatmap3.prototype.clear = function() { - _super.prototype.clear.call(this); - this.clearShadowCanvasCtx(); - this.paletteCache = {}; - }; - Heatmap3.prototype.prepareRange = function(data3) { - var colorAttr = this.getAttribute("color"); - var colorField = colorAttr.getFields()[0]; - var min13 = Infinity; - var max15 = -Infinity; - data3.forEach(function(row) { - var value2 = row[FIELD_ORIGIN][colorField]; - if (value2 > max15) { - max15 = value2; - } - if (value2 < min13) { - min13 = value2; - } - }); - if (min13 === max15) { - min13 = max15 - 1; - } - return [min13, max15]; - }; - Heatmap3.prototype.prepareSize = function() { - var radius = this.getDefaultValue("size"); - if (!(0, import_util194.isNumber)(radius)) { - radius = this.getDefaultSize(); - } - return radius; - }; - Heatmap3.prototype.prepareGreyScaleBlurredCircle = function(radius, blur) { - var grayScaleBlurredCanvas = this.getGrayScaleBlurredCanvas(); - var r22 = radius + blur; - var ctx3 = grayScaleBlurredCanvas.getContext("2d"); - grayScaleBlurredCanvas.width = grayScaleBlurredCanvas.height = r22 * 2; - ctx3.clearRect(0, 0, grayScaleBlurredCanvas.width, grayScaleBlurredCanvas.height); - ctx3.shadowOffsetX = ctx3.shadowOffsetY = r22 * 2; - ctx3.shadowBlur = blur; - ctx3.shadowColor = "black"; - ctx3.beginPath(); - ctx3.arc(-r22, -r22, radius, 0, Math.PI * 2, true); - ctx3.closePath(); - ctx3.fill(); - }; - Heatmap3.prototype.drawWithRange = function(data3, range, radius, blur) { - var _a6 = this.coordinate, start = _a6.start, end2 = _a6.end; - var width2 = this.coordinate.getWidth(); - var height = this.coordinate.getHeight(); - var colorAttr = this.getAttribute("color"); - var valueField = colorAttr.getFields()[0]; - this.clearShadowCanvasCtx(); - var ctx3 = this.getShadowCanvasCtx(); - if (range) { - data3 = data3.filter(function(row) { - return row[FIELD_ORIGIN][valueField] <= range[1] && row[FIELD_ORIGIN][valueField] >= range[0]; - }); - } - var scale12 = this.scales[valueField]; - for (var _i = 0, data_1 = data3; _i < data_1.length; _i++) { - var obj = data_1[_i]; - var _b = this.getDrawCfg(obj), x6 = _b.x, y5 = _b.y; - var alpha = scale12.scale(obj[FIELD_ORIGIN][valueField]); - this.drawGrayScaleBlurredCircle(x6 - start.x, y5 - end2.y, radius + blur, alpha, ctx3); - } - var colored = ctx3.getImageData(0, 0, width2, height); - this.clearShadowCanvasCtx(); - this.colorize(colored); - ctx3.putImageData(colored, 0, 0); - var imageShape = this.getImageShape(); - imageShape.attr("x", start.x); - imageShape.attr("y", end2.y); - imageShape.attr("width", width2); - imageShape.attr("height", height); - imageShape.attr("img", ctx3.canvas); - imageShape.set("origin", this.getShapeInfo(data3)); - }; - Heatmap3.prototype.getDefaultSize = function() { - var position2 = this.getAttribute("position"); - var coordinate11 = this.coordinate; - return Math.min(coordinate11.getWidth() / (position2.scales[0].ticks.length * 4), coordinate11.getHeight() / (position2.scales[1].ticks.length * 4)); - }; - Heatmap3.prototype.clearShadowCanvasCtx = function() { - var ctx3 = this.getShadowCanvasCtx(); - ctx3.clearRect(0, 0, ctx3.canvas.width, ctx3.canvas.height); - }; - Heatmap3.prototype.getShadowCanvasCtx = function() { - var canvas = this.shadowCanvas; - if (!canvas) { - canvas = document.createElement("canvas"); - this.shadowCanvas = canvas; - } - canvas.width = this.coordinate.getWidth(); - canvas.height = this.coordinate.getHeight(); - return canvas.getContext("2d"); - }; - Heatmap3.prototype.getGrayScaleBlurredCanvas = function() { - if (!this.grayScaleBlurredCanvas) { - this.grayScaleBlurredCanvas = document.createElement("canvas"); - } - return this.grayScaleBlurredCanvas; - }; - Heatmap3.prototype.drawGrayScaleBlurredCircle = function(x6, y5, r4, alpha, ctx3) { - var grayScaleBlurredCanvas = this.getGrayScaleBlurredCanvas(); - ctx3.globalAlpha = alpha; - ctx3.drawImage(grayScaleBlurredCanvas, x6 - r4, y5 - r4); - }; - Heatmap3.prototype.colorize = function(img) { - var colorAttr = this.getAttribute("color"); - var pixels = img.data; - var paletteCache = this.paletteCache; - for (var i4 = 3; i4 < pixels.length; i4 += 4) { - var alpha = pixels[i4]; - if ((0, import_util194.isNumber)(alpha)) { - var palette = paletteCache[alpha] ? paletteCache[alpha] : esm_default2.rgb2arr(colorAttr.gradient(alpha / 256)); - pixels[i4 - 3] = palette[0]; - pixels[i4 - 2] = palette[1]; - pixels[i4 - 1] = palette[2]; - pixels[i4] = alpha; - } - } - }; - Heatmap3.prototype.getImageShape = function() { - var imageShape = this.imageShape; - if (imageShape) { - return imageShape; - } - var container2 = this.container; - imageShape = container2.addShape({ - type: "image", - attrs: {} - }); - this.imageShape = imageShape; - return imageShape; - }; - Heatmap3.prototype.getShapeInfo = function(mappingData) { - var shapeCfg = this.getDrawCfg(mappingData[0]); - var data3 = mappingData.map(function(obj) { - return obj[FIELD_ORIGIN]; - }); - return __assign(__assign({}, shapeCfg), { mappingData, data: data3 }); - }; - return Heatmap3; -}(base_default13); -var heatmap_default = Heatmap; - -// node_modules/@antv/g2/esm/geometry/interval.js -var import_util198 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/geometry/shape/interval/util.js -var import_util195 = __toModule(require_lib()); -function getRectPoints(pointInfo) { - var x6 = pointInfo.x, y5 = pointInfo.y, y0 = pointInfo.y0, size14 = pointInfo.size; - var yMin; - var yMax; - if ((0, import_util195.isArray)(y5)) { - yMin = y5[0], yMax = y5[1]; - } else { - yMin = y0; - yMax = y5; - } - var xMin; - var xMax; - if ((0, import_util195.isArray)(x6)) { - xMin = x6[0], xMax = x6[1]; - } else { - xMin = x6 - size14 / 2; - xMax = x6 + size14 / 2; - } - var points = [ - { x: xMin, y: yMin }, - { x: xMin, y: yMax } - ]; - points.push({ x: xMax, y: yMax }, { x: xMax, y: yMin }); - return points; -} -function getRectPath(points, isClosed) { - if (isClosed === void 0) { - isClosed = true; - } - var path = []; - var firstPoint = points[0]; - path.push(["M", firstPoint.x, firstPoint.y]); - for (var i4 = 1, len5 = points.length; i4 < len5; i4++) { - path.push(["L", points[i4].x, points[i4].y]); - } - if (isClosed) { - path.push(["L", firstPoint.x, firstPoint.y]); - path.push(["z"]); - } - return path; -} -function parseRadius3(radius, minLength) { - var r1 = 0; - var r22 = 0; - var r32 = 0; - var r4 = 0; - if ((0, import_util195.isArray)(radius)) { - if (radius.length === 1) { - r1 = r22 = r32 = r4 = radius[0]; - } else if (radius.length === 2) { - r1 = r32 = radius[0]; - r22 = r4 = radius[1]; - } else if (radius.length === 3) { - r1 = radius[0]; - r22 = r4 = radius[1]; - r32 = radius[2]; - } else { - r1 = radius[0]; - r22 = radius[1]; - r32 = radius[2]; - r4 = radius[3]; - } - } else { - r1 = r22 = r32 = r4 = radius; - } - if (r1 + r22 > minLength) { - r1 = r1 ? minLength / (1 + r22 / r1) : 0; - r22 = minLength - r1; - } - if (r32 + r4 > minLength) { - r32 = r32 ? minLength / (1 + r4 / r32) : 0; - r4 = minLength - r32; - } - return [r1 || 0, r22 || 0, r32 || 0, r4 || 0]; -} -function getBackgroundRectPath(cfg, points, coordinate11) { - var path = []; - if (coordinate11.isRect) { - var p0 = coordinate11.isTransposed ? { x: coordinate11.start.x, y: points[0].y } : { x: points[0].x, y: coordinate11.start.y }; - var p1 = coordinate11.isTransposed ? { x: coordinate11.end.x, y: points[2].y } : { x: points[3].x, y: coordinate11.end.y }; - var radius = (0, import_util195.get)(cfg, ["background", "style", "radius"]); - if (radius) { - var width2 = coordinate11.isTransposed ? Math.abs(points[0].y - points[2].y) : points[2].x - points[1].x; - var height = coordinate11.isTransposed ? coordinate11.getWidth() : coordinate11.getHeight(); - var _a6 = parseRadius3(radius, Math.min(width2, height)), r1 = _a6[0], r22 = _a6[1], r32 = _a6[2], r4 = _a6[3]; - path.push(["M", p0.x, p1.y + r1]); - r1 !== 0 && path.push(["A", r1, r1, 0, 0, 1, p0.x + r1, p1.y]); - path.push(["L", p1.x - r22, p1.y]); - r22 !== 0 && path.push(["A", r22, r22, 0, 0, 1, p1.x, p1.y + r22]); - path.push(["L", p1.x, p0.y - r32]); - r32 !== 0 && path.push(["A", r32, r32, 0, 0, 1, p1.x - r32, p0.y]); - path.push(["L", p0.x + r4, p0.y]); - r4 !== 0 && path.push(["A", r4, r4, 0, 0, 1, p0.x, p0.y - r4]); - } else { - path.push(["M", p0.x, p0.y]); - path.push(["L", p1.x, p0.y]); - path.push(["L", p1.x, p1.y]); - path.push(["L", p0.x, p1.y]); - path.push(["L", p0.x, p0.y]); - } - path.push(["z"]); - } - if (coordinate11.isPolar) { - var center2 = coordinate11.getCenter(); - var _b = getAngle3(cfg, coordinate11), startAngle = _b.startAngle, endAngle = _b.endAngle; - if (coordinate11.type !== "theta" && !coordinate11.isTransposed) { - path = getSectorPath(center2.x, center2.y, coordinate11.getRadius(), startAngle, endAngle); - } else { - var pow2 = function(v3) { - return Math.pow(v3, 2); - }; - var r1 = Math.sqrt(pow2(center2.x - points[0].x) + pow2(center2.y - points[0].y)); - var r22 = Math.sqrt(pow2(center2.x - points[2].x) + pow2(center2.y - points[2].y)); - path = getSectorPath(center2.x, center2.y, r1, coordinate11.startAngle, coordinate11.endAngle, r22); - } - } - return path; -} -function getIntervalRectPath(points, lineCap, coor) { - var width2 = coor.getWidth(); - var height = coor.getHeight(); - var isRect = coor.type === "rect"; - var path = []; - var r4 = (points[2].x - points[1].x) / 2; - var ry = coor.isTransposed ? r4 * height / width2 : r4 * width2 / height; - if (lineCap === "round") { - if (isRect) { - path.push(["M", points[0].x, points[0].y + ry]); - path.push(["L", points[1].x, points[1].y - ry]); - path.push(["A", r4, r4, 0, 0, 1, points[2].x, points[2].y - ry]); - path.push(["L", points[3].x, points[3].y + ry]); - path.push(["A", r4, r4, 0, 0, 1, points[0].x, points[0].y + ry]); - } else { - path.push(["M", points[0].x, points[0].y]); - path.push(["L", points[1].x, points[1].y]); - path.push(["A", r4, r4, 0, 0, 1, points[2].x, points[2].y]); - path.push(["L", points[3].x, points[3].y]); - path.push(["A", r4, r4, 0, 0, 1, points[0].x, points[0].y]); - } - path.push(["z"]); - } else { - path = getRectPath(points); - } - return path; -} -function getFunnelPath(points, nextPoints, isPyramid) { - var path = []; - if (!(0, import_util195.isNil)(nextPoints)) { - path.push(["M", points[0].x, points[0].y], ["L", points[1].x, points[1].y], ["L", nextPoints[1].x, nextPoints[1].y], ["L", nextPoints[0].x, nextPoints[0].y], ["Z"]); - } else if (isPyramid) { - path.push(["M", points[0].x, points[0].y], ["L", points[1].x, points[1].y], ["L", (points[2].x + points[3].x) / 2, (points[2].y + points[3].y) / 2], ["Z"]); - } else { - path.push(["M", points[0].x, points[0].y], ["L", points[1].x, points[1].y], ["L", points[2].x, points[2].y], ["L", points[3].x, points[3].y], ["Z"]); - } - return path; -} -function swap(p0, p1) { - return [p1, p0]; -} -function getRectWithCornerRadius(points, coordinate11, radius) { - var _a6, _b, _c, _d, _e, _f, _g; - var _h = __spreadArray([], points, true), p0 = _h[0], p1 = _h[1], p22 = _h[2], p32 = _h[3]; - var _j = typeof radius === "number" ? Array(4).fill(radius) : radius, r1 = _j[0], r22 = _j[1], r32 = _j[2], r4 = _j[3]; - if (coordinate11.isTransposed) { - _a6 = swap(p1, p32), p1 = _a6[0], p32 = _a6[1]; - _b = [r4, r1, r22, r32], r1 = _b[0], r22 = _b[1], r32 = _b[2], r4 = _b[3]; - } - if (coordinate11.isReflect("y")) { - _c = swap(p0, p1), p0 = _c[0], p1 = _c[1]; - _d = swap(p22, p32), p22 = _d[0], p32 = _d[1]; - } - if (coordinate11.isReflect("x")) { - _e = swap(p0, p32), p0 = _e[0], p32 = _e[1]; - _f = swap(p1, p22), p1 = _f[0], p22 = _f[1]; - } - var path = []; - var abs3 = function(v3) { - return Math.abs(v3); - }; - _g = parseRadius3([r1, r22, r32, r4], Math.min(abs3(p32.x - p0.x), abs3(p1.y - p0.y))).map(function(d3) { - return abs3(d3); - }), r1 = _g[0], r22 = _g[1], r32 = _g[2], r4 = _g[3]; - if (p0.y < p1.y) { - path.push(["M", p32.x, p32.y + r32]); - r32 !== 0 && path.push(["A", r32, r32, 0, 0, 0, p32.x - r32, p32.y]); - path.push(["L", p0.x + r4, p0.y]); - r4 !== 0 && path.push(["A", r4, r4, 0, 0, 0, p0.x, p0.y + r4]); - path.push(["L", p1.x, p1.y - r1]); - r1 !== 0 && path.push(["A", r1, r1, 0, 0, 0, p1.x + r1, p1.y]); - path.push(["L", p22.x - r22, p22.y]); - r22 !== 0 && path.push(["A", r22, r22, 0, 0, 0, p22.x, p22.y - r22]); - path.push(["L", p32.x, p32.y + r32]); - path.push(["z"]); - } else if (p32.x < p0.x) { - path.push(["M", p22.x + r22, p22.y]); - r22 !== 0 && path.push(["A", r22, r22, 0, 0, 0, p22.x, p22.y + r22]); - path.push(["L", p32.x, p32.y - r32]); - r32 !== 0 && path.push(["A", r32, r32, 0, 0, 0, p32.x + r32, p32.y]); - path.push(["L", p0.x - r4, p0.y]); - r4 !== 0 && path.push(["A", r4, r4, 0, 0, 0, p0.x, p0.y - r4]); - path.push(["L", p1.x, p1.y + r1]); - r1 !== 0 && path.push(["A", r1, r1, 0, 0, 0, p1.x - r1, p1.y]); - path.push(["L", p22.x + r22, p22.y]); - path.push(["z"]); - } else { - path.push(["M", p1.x, p1.y + r1]); - r1 !== 0 && path.push(["A", r1, r1, 0, 0, 1, p1.x + r1, p1.y]); - path.push(["L", p22.x - r22, p22.y]); - r22 !== 0 && path.push(["A", r22, r22, 0, 0, 1, p22.x, p22.y + r22]); - path.push(["L", p32.x, p32.y - r32]); - r32 !== 0 && path.push(["A", r32, r32, 0, 0, 1, p32.x - r32, p32.y]); - path.push(["L", p0.x + r4, p0.y]); - r4 !== 0 && path.push(["A", r4, r4, 0, 0, 1, p0.x, p0.y - r4]); - path.push(["L", p1.x, p1.y + r1]); - path.push(["z"]); - } - return path; -} - -// node_modules/@antv/g2/esm/geometry/shape/interval/index.js -var IntervalShapeFactory = registerShapeFactory("interval", { - defaultShapeType: "rect", - getDefaultPoints: function(pointInfo) { - return getRectPoints(pointInfo); - } -}); -registerShape("interval", "rect", { - draw: function(cfg, container2) { - var style = getStyle2(cfg, false, true); - var group3 = container2; - var backgroundCfg = cfg === null || cfg === void 0 ? void 0 : cfg.background; - if (backgroundCfg) { - group3 = container2.addGroup(); - var backgroundStyle = getBackgroundRectStyle(cfg); - var backgroundPath = getBackgroundRectPath(cfg, this.parsePoints(cfg.points), this.coordinate); - group3.addShape("path", { - attrs: __assign(__assign({}, backgroundStyle), { path: backgroundPath }), - zIndex: -1, - name: BACKGROUND_SHAPE - }); - } - var path; - if (style.radius && this.coordinate.isRect) { - path = getRectWithCornerRadius(this.parsePoints(cfg.points), this.coordinate, style.radius); - } else { - path = this.parsePath(getIntervalRectPath(cfg.points, style.lineCap, this.coordinate)); - } - var shape = group3.addShape("path", { - attrs: __assign(__assign({}, style), { path }), - name: "interval" - }); - return backgroundCfg ? group3 : shape; - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color, isInPolar = markerCfg.isInPolar; - if (isInPolar) { - return { - symbol: "circle", - style: { - r: 4.5, - fill: color4 - } - }; - } - return { - symbol: "square", - style: { - r: 4, - fill: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/util/shape-size.js -var import_util197 = __toModule(require_lib()); -function findMinDistance(arr, scale12) { - var count2 = arr.length; - var sourceArr = arr; - if ((0, import_util197.isString)(sourceArr[0])) { - sourceArr = arr.map(function(v3) { - return scale12.translate(v3); - }); - } - var distance15 = sourceArr[1] - sourceArr[0]; - for (var i4 = 2; i4 < count2; i4++) { - var tmp = sourceArr[i4] - sourceArr[i4 - 1]; - if (distance15 > tmp) { - distance15 = tmp; - } - } - return distance15; -} -function getDodgeCount(dataArray, dodgeBy) { - if (dodgeBy) { - var mergeData = (0, import_util197.flatten)(dataArray); - var values4 = (0, import_util197.valuesOfKey)(mergeData, dodgeBy); - return values4.length; - } - return dataArray.length; -} -function getDefaultSize(geometry35) { - var theme4 = geometry35.theme; - var coordinate11 = geometry35.coordinate; - var xScale = geometry35.getXScale(); - var xValues = xScale.values; - var dataArray = geometry35.beforeMappingData; - var count2 = xValues.length; - var xDimensionLength = getXDimensionLength(geometry35.coordinate); - var intervalPadding = geometry35.intervalPadding, dodgePadding = geometry35.dodgePadding; - var maxColumnWidth = geometry35.maxColumnWidth || theme4.maxColumnWidth; - var minColumnWidth = geometry35.minColumnWidth || theme4.minColumnWidth; - var columnWidthRatio = geometry35.columnWidthRatio || theme4.columnWidthRatio; - var multiplePieWidthRatio = geometry35.multiplePieWidthRatio || theme4.multiplePieWidthRatio; - var roseWidthRatio = geometry35.roseWidthRatio || theme4.roseWidthRatio; - if (xScale.isLinear && xValues.length > 1) { - xValues.sort(); - var interval3 = findMinDistance(xValues, xScale); - count2 = (xScale.max - xScale.min) / interval3; - if (xValues.length > count2) { - count2 = xValues.length; - } - } - var range = xScale.range; - var normalizedSize = 1 / count2; - var wr = 1; - if (coordinate11.isPolar) { - if (coordinate11.isTransposed && count2 > 1) { - wr = multiplePieWidthRatio; - } else { - wr = roseWidthRatio; - } - } else { - if (xScale.isLinear) { - normalizedSize *= range[1] - range[0]; - } - wr = columnWidthRatio; - } - if (!(0, import_util197.isNil)(intervalPadding) && intervalPadding >= 0) { - var normalizedIntervalPadding = intervalPadding / xDimensionLength; - normalizedSize = (1 - (count2 - 1) * normalizedIntervalPadding) / count2; - } else { - normalizedSize *= wr; - } - if (geometry35.getAdjust("dodge")) { - var dodgeAdjust = geometry35.getAdjust("dodge"); - var dodgeBy = dodgeAdjust.dodgeBy; - var dodgeCount = getDodgeCount(dataArray, dodgeBy); - if (!(0, import_util197.isNil)(dodgePadding) && dodgePadding >= 0) { - var normalizedDodgePadding = dodgePadding / xDimensionLength; - normalizedSize = (normalizedSize - normalizedDodgePadding * (dodgeCount - 1)) / dodgeCount; - } else if (!(0, import_util197.isNil)(intervalPadding) && intervalPadding >= 0) { - normalizedSize *= wr; - normalizedSize = normalizedSize / dodgeCount; - } else { - normalizedSize = normalizedSize / dodgeCount; - } - normalizedSize = normalizedSize >= 0 ? normalizedSize : 0; - } - if (!(0, import_util197.isNil)(maxColumnWidth) && maxColumnWidth >= 0) { - var normalizedMaxColumnWidth = maxColumnWidth / xDimensionLength; - if (normalizedSize > normalizedMaxColumnWidth) { - normalizedSize = normalizedMaxColumnWidth; - } - } - if (!(0, import_util197.isNil)(minColumnWidth) && minColumnWidth >= 0) { - var normalizedMinColumnWidth = minColumnWidth / xDimensionLength; - if (normalizedSize < normalizedMinColumnWidth) { - normalizedSize = normalizedMinColumnWidth; - } - } - return normalizedSize; -} - -// node_modules/@antv/g2/esm/geometry/interval.js -var Interval = function(_super) { - __extends(Interval2, _super); - function Interval2(cfg) { - var _this = _super.call(this, cfg) || this; - _this.type = "interval"; - _this.shapeType = "interval"; - _this.generatePoints = true; - var background = cfg.background; - _this.background = background; - return _this; - } - Interval2.prototype.createShapePointsCfg = function(obj) { - var cfg = _super.prototype.createShapePointsCfg.call(this, obj); - var size14; - var sizeAttr = this.getAttribute("size"); - if (sizeAttr) { - size14 = this.getAttributeValues(sizeAttr, obj)[0]; - var coordinate11 = this.coordinate; - var coordinateWidth = getXDimensionLength(coordinate11); - size14 = size14 / coordinateWidth; - } else { - if (!this.defaultSize) { - this.defaultSize = getDefaultSize(this); - } - size14 = this.defaultSize; - } - cfg.size = size14; - return cfg; - }; - Interval2.prototype.adjustScale = function() { - _super.prototype.adjustScale.call(this); - var yScale = this.getYScale(); - if (this.coordinate.type === "theta") { - yScale.change({ - nice: false, - min: 0, - max: getMaxScale(yScale) - }); - } else { - var scaleDefs = this.scaleDefs; - var field6 = yScale.field, min13 = yScale.min, max15 = yScale.max, type2 = yScale.type; - if (type2 !== "time") { - if (min13 > 0 && !(0, import_util198.get)(scaleDefs, [field6, "min"])) { - yScale.change({ - min: 0 - }); - } - if (max15 <= 0 && !(0, import_util198.get)(scaleDefs, [field6, "max"])) { - yScale.change({ - max: 0 - }); - } - } - } - }; - Interval2.prototype.getDrawCfg = function(mappingData) { - var shapeCfg = _super.prototype.getDrawCfg.call(this, mappingData); - shapeCfg.background = this.background; - return shapeCfg; - }; - return Interval2; -}(base_default13); -var interval_default = Interval; - -// node_modules/@antv/g2/esm/geometry/line.js -var Line5 = function(_super) { - __extends(Line9, _super); - function Line9(cfg) { - var _this = _super.call(this, cfg) || this; - _this.type = "line"; - var _a6 = cfg.sortable, sortable = _a6 === void 0 ? false : _a6; - _this.sortable = sortable; - return _this; - } - return Line9; -}(path_default5); -var line_default9 = Line5; - -// node_modules/@antv/g2/esm/geometry/shape/point/index.js -var import_util199 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/geometry/shape/point/util.js -var SHAPES = ["circle", "square", "bowtie", "diamond", "hexagon", "triangle", "triangle-down"]; -var HOLLOW_SHAPES = ["cross", "tick", "plus", "hyphen", "line"]; -function drawPoints(shape, cfg, container2, shapeName, isStroke) { - var style = getStyle2(cfg, isStroke, !isStroke, "r"); - var points = shape.parsePoints(cfg.points); - var pointPosition = points[0]; - if (cfg.isStack) { - pointPosition = points[1]; - } else if (points.length > 1) { - var group3 = container2.addGroup(); - for (var _i = 0, points_1 = points; _i < points_1.length; _i++) { - var point2 = points_1[_i]; - group3.addShape({ - type: "marker", - attrs: __assign(__assign(__assign({}, style), { symbol: MarkerSymbols[shapeName] || shapeName }), point2) - }); - } - return group3; - } - return container2.addShape({ - type: "marker", - attrs: __assign(__assign(__assign({}, style), { symbol: MarkerSymbols[shapeName] || shapeName }), pointPosition) - }); -} - -// node_modules/@antv/g2/esm/geometry/shape/point/index.js -var PointShapeFactory = registerShapeFactory("point", { - defaultShapeType: "hollow-circle", - getDefaultPoints: function(pointInfo) { - return splitPoints(pointInfo); - } -}); -(0, import_util199.each)(SHAPES, function(shapeName) { - registerShape("point", "hollow-".concat(shapeName), { - draw: function(cfg, container2) { - return drawPoints(this, cfg, container2, shapeName, true); - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: MarkerSymbols[shapeName] || shapeName, - style: { - r: 4.5, - stroke: color4, - fill: null - } - }; - } - }); -}); - -// node_modules/@antv/g2/esm/geometry/point.js -var Point = function(_super) { - __extends(Point3, _super); - function Point3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "point"; - _this.shapeType = "point"; - _this.generatePoints = true; - return _this; - } - Point3.prototype.getDrawCfg = function(mappingDatum) { - var shapeCfg = _super.prototype.getDrawCfg.call(this, mappingDatum); - return __assign(__assign({}, shapeCfg), { isStack: !!this.getAdjust("stack") }); - }; - return Point3; -}(base_default13); -var point_default = Point; - -// node_modules/@antv/g2/esm/geometry/polygon.js -var import_util202 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/geometry/shape/polygon/index.js -var import_util201 = __toModule(require_lib()); -function getPath3(points) { - var flag = points[0]; - var i4 = 1; - var path = [["M", flag.x, flag.y]]; - while (i4 < points.length) { - var c5 = points[i4]; - if (c5.x !== points[i4 - 1].x || c5.y !== points[i4 - 1].y) { - path.push(["L", c5.x, c5.y]); - if (c5.x === flag.x && c5.y === flag.y && i4 < points.length - 1) { - flag = points[i4 + 1]; - path.push(["Z"]); - path.push(["M", flag.x, flag.y]); - i4++; - } - } - i4++; - } - if (!(0, import_util201.isEqual)((0, import_util201.last)(path), flag)) { - path.push(["L", flag.x, flag.y]); - } - path.push(["Z"]); - return path; -} -var PolygonShapeFactory = registerShapeFactory("polygon", { - defaultShapeType: "polygon", - getDefaultPoints: function(pointInfo) { - var points = []; - (0, import_util201.each)(pointInfo.x, function(subX, index2) { - var subY = pointInfo.y[index2]; - points.push({ - x: subX, - y: subY - }); - }); - return points; - } -}); -registerShape("polygon", "polygon", { - draw: function(cfg, container2) { - if (!(0, import_util201.isEmpty)(cfg.points)) { - var shapeAttrs = getStyle2(cfg, true, true); - var path = this.parsePath(getPath3(cfg.points)); - return container2.addShape("path", { - attrs: __assign(__assign({}, shapeAttrs), { path }), - name: "polygon" - }); - } - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: "square", - style: { - r: 4, - fill: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/polygon.js -var Polygon3 = function(_super) { - __extends(Polygon4, _super); - function Polygon4() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "polygon"; - _this.shapeType = "polygon"; - _this.generatePoints = true; - return _this; - } - Polygon4.prototype.createShapePointsCfg = function(obj) { - var cfg = _super.prototype.createShapePointsCfg.call(this, obj); - var x6 = cfg.x; - var y5 = cfg.y; - var temp; - if (!((0, import_util202.isArray)(x6) && (0, import_util202.isArray)(y5))) { - var xScale = this.getXScale(); - var yScale = this.getYScale(); - var xCount = xScale.values.length; - var yCount = yScale.values.length; - var xOffset = 0.5 * 1 / xCount; - var yOffset = 0.5 * 1 / yCount; - if (xScale.isCategory && yScale.isCategory) { - x6 = [x6 - xOffset, x6 - xOffset, x6 + xOffset, x6 + xOffset]; - y5 = [y5 - yOffset, y5 + yOffset, y5 + yOffset, y5 - yOffset]; - } else if ((0, import_util202.isArray)(x6)) { - temp = x6; - x6 = [temp[0], temp[0], temp[1], temp[1]]; - y5 = [y5 - yOffset / 2, y5 + yOffset / 2, y5 + yOffset / 2, y5 - yOffset / 2]; - } else if ((0, import_util202.isArray)(y5)) { - temp = y5; - y5 = [temp[0], temp[1], temp[1], temp[0]]; - x6 = [x6 - xOffset / 2, x6 - xOffset / 2, x6 + xOffset / 2, x6 + xOffset / 2]; - } - cfg.x = x6; - cfg.y = y5; - } - return cfg; - }; - return Polygon4; -}(base_default13); -var polygon_default5 = Polygon3; - -// node_modules/@antv/g2/esm/geometry/shape/schema/index.js -var SchemaShapeFactory = registerShapeFactory("schema", { - defaultShapeType: "" -}); - -// node_modules/@antv/g2/esm/geometry/schema.js -var Schema2 = function(_super) { - __extends(Schema3, _super); - function Schema3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "schema"; - _this.shapeType = "schema"; - _this.generatePoints = true; - return _this; - } - Schema3.prototype.createShapePointsCfg = function(record) { - var cfg = _super.prototype.createShapePointsCfg.call(this, record); - var size14; - var sizeAttr = this.getAttribute("size"); - if (sizeAttr) { - size14 = this.getAttributeValues(sizeAttr, record)[0]; - var coordinate11 = this.coordinate; - var coordinateWidth = getXDimensionLength(coordinate11); - size14 = size14 / coordinateWidth; - } else { - if (!this.defaultSize) { - this.defaultSize = getDefaultSize(this); - } - size14 = this.defaultSize; - } - cfg.size = size14; - return cfg; - }; - return Schema3; -}(base_default13); -var schema_default = Schema2; - -// node_modules/@antv/g2/esm/geometry/violin.js -var import_util204 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/geometry/shape/violin/index.js -var import_util203 = __toModule(require_lib()); -function normalizeSize(arr) { - if (!(0, import_util203.isArray)(arr)) { - return []; - } - var maxValue = (0, import_util203.max)(arr); - return (0, import_util203.map)(arr, function(num) { - return num / maxValue; - }); -} -var ViolinShapeFactory = registerShapeFactory("violin", { - defaultShapeType: "violin", - getDefaultPoints: function(pointInfo) { - var radius = pointInfo.size / 2; - var points = []; - var sizeArr = normalizeSize(pointInfo._size); - (0, import_util203.each)(pointInfo.y, function(y5, index2) { - var offset = sizeArr[index2] * radius; - var isMin = index2 === 0; - var isMax = index2 === pointInfo.y.length - 1; - points.push({ - isMin, - isMax, - x: pointInfo.x - offset, - y: y5 - }); - points.unshift({ - isMin, - isMax, - x: pointInfo.x + offset, - y: y5 - }); - }); - return points; - } -}); -registerShape("violin", "violin", { - draw: function(cfg, container2) { - var shapeAttrs = getStyle2(cfg, true, true); - var path = this.parsePath(getViolinPath(cfg.points)); - return container2.addShape("path", { - attrs: __assign(__assign({}, shapeAttrs), { path }), - name: "violin" - }); - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: "circle", - style: { - r: 4, - fill: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/violin.js -var Violin = function(_super) { - __extends(Violin3, _super); - function Violin3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "violin"; - _this.shapeType = "violin"; - _this.generatePoints = true; - return _this; - } - Violin3.prototype.createShapePointsCfg = function(record) { - var cfg = _super.prototype.createShapePointsCfg.call(this, record); - var size14; - var sizeAttr = this.getAttribute("size"); - if (sizeAttr) { - size14 = this.getAttributeValues(sizeAttr, record)[0]; - var coordinate11 = this.coordinate; - var coordinateWidth = getXDimensionLength(coordinate11); - size14 = size14 / coordinateWidth; - } else { - if (!this.defaultSize) { - this.defaultSize = getDefaultSize(this); - } - size14 = this.defaultSize; - } - cfg.size = size14; - cfg._size = (0, import_util204.get)(record[FIELD_ORIGIN], [this._sizeField]); - return cfg; - }; - Violin3.prototype.initAttributes = function() { - var attributeOption = this.attributeOption; - var sizeField = attributeOption.size ? attributeOption.size.fields[0] : this._sizeField ? this._sizeField : "size"; - this._sizeField = sizeField; - delete attributeOption.size; - _super.prototype.initAttributes.call(this); - }; - return Violin3; -}(base_default13); -var violin_default = Violin; - -// node_modules/@antv/g2/esm/geometry/shape/area/line.js -registerShape("area", "line", { - draw: function(cfg, container2) { - var attrs = getShapeAttrs2(cfg, true, false, this); - var shape = container2.addShape({ - type: "path", - attrs, - name: "area" - }); - return shape; - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: function(x6, y5, r4) { - if (r4 === void 0) { - r4 = 5.5; - } - return [["M", x6 - r4, y5 - 4], ["L", x6 + r4, y5 - 4], ["L", x6 + r4, y5 + 4], ["L", x6 - r4, y5 + 4], ["Z"]]; - }, - style: { - r: 5, - stroke: color4, - fill: null - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/area/smooth.js -registerShape("area", "smooth", { - draw: function(cfg, container2) { - var coordinate11 = this.coordinate; - var attrs = getShapeAttrs2(cfg, false, true, this, getConstraint(coordinate11)); - var shape = container2.addShape({ - type: "path", - attrs, - name: "area" - }); - return shape; - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: function(x6, y5, r4) { - if (r4 === void 0) { - r4 = 5.5; - } - return [["M", x6 - r4, y5 - 4], ["L", x6 + r4, y5 - 4], ["L", x6 + r4, y5 + 4], ["L", x6 - r4, y5 + 4], ["Z"]]; - }, - style: { - r: 5, - fill: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/area/smooth-line.js -registerShape("area", "smooth-line", { - draw: function(cfg, container2) { - var coordinate11 = this.coordinate; - var attrs = getShapeAttrs2(cfg, true, true, this, getConstraint(coordinate11)); - var shape = container2.addShape({ - type: "path", - attrs, - name: "area" - }); - return shape; - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: function(x6, y5, r4) { - if (r4 === void 0) { - r4 = 5.5; - } - return [["M", x6 - r4, y5 - 4], ["L", x6 + r4, y5 - 4], ["L", x6 + r4, y5 + 4], ["L", x6 - r4, y5 + 4], ["Z"]]; - }, - style: { - r: 5, - stroke: color4, - fill: null - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/edge/util.js -var import_util208 = __toModule(require_lib()); -function getCPath(from, to) { - return ["C", from.x * 1 / 2 + to.x * 1 / 2, from.y, from.x * 1 / 2 + to.x * 1 / 2, to.y, to.x, to.y]; -} -function getQPath(to, center2) { - var points = []; - points.push({ - x: center2.x, - y: center2.y - }); - points.push(to); - var sub6 = ["Q"]; - (0, import_util208.each)(points, function(point2) { - sub6.push(point2.x, point2.y); - }); - return sub6; -} - -// node_modules/@antv/g2/esm/geometry/shape/edge/arc.js -function getArcShapePath(from, to, center2) { - var sub6 = getQPath(to, center2); - var path = [["M", from.x, from.y]]; - path.push(sub6); - return path; -} -function getArcShapeWeightPath(points, center2) { - var arc1 = getQPath(points[1], center2); - var arc2 = getQPath(points[3], center2); - var path = [["M", points[0].x, points[0].y]]; - path.push(arc2); - path.push(["L", points[3].x, points[3].y]); - path.push(["L", points[2].x, points[2].y]); - path.push(arc1); - path.push(["L", points[1].x, points[1].y]); - path.push(["L", points[0].x, points[0].y]); - path.push(["Z"]); - return path; -} -registerShape("edge", "arc", { - draw: function(cfg, container2) { - var style = getStyle2(cfg, true, false, "lineWidth"); - var points = cfg.points; - var type2 = points.length > 2 ? "weight" : "normal"; - var path; - if (cfg.isInCircle) { - var center2 = { x: 0, y: 1 }; - if (type2 === "normal") { - path = getArcShapePath(points[0], points[1], center2); - } else { - style.fill = style.stroke; - path = getArcShapeWeightPath(points, center2); - } - path = this.parsePath(path); - return container2.addShape("path", { - attrs: __assign(__assign({}, style), { path }) - }); - } else { - if (type2 === "normal") { - points = this.parsePoints(points); - path = getArcPath((points[1].x + points[0].x) / 2, points[0].y, Math.abs(points[1].x - points[0].x) / 2, Math.PI, Math.PI * 2); - return container2.addShape("path", { - attrs: __assign(__assign({}, style), { path }) - }); - } else { - var c1 = getCPath(points[1], points[3]); - var c22 = getCPath(points[2], points[0]); - path = [ - ["M", points[0].x, points[0].y], - ["L", points[1].x, points[1].y], - c1, - ["L", points[3].x, points[3].y], - ["L", points[2].x, points[2].y], - c22, - ["Z"] - ]; - path = this.parsePath(path); - style.fill = style.stroke; - return container2.addShape("path", { - attrs: __assign(__assign({}, style), { path }) - }); - } - } - }, - getMarker: function(markerCfg) { - return { - symbol: "circle", - style: { - r: 4.5, - fill: markerCfg.color - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/edge/smooth.js -function getSmoothPath(from, to) { - var sub6 = getCPath(from, to); - var path = [["M", from.x, from.y]]; - path.push(sub6); - return path; -} -registerShape("edge", "smooth", { - draw: function(cfg, container2) { - var style = getStyle2(cfg, true, false, "lineWidth"); - var points = cfg.points; - var path = this.parsePath(getSmoothPath(points[0], points[1])); - return container2.addShape("path", { - attrs: __assign(__assign({}, style), { path }) - }); - }, - getMarker: function(markerCfg) { - return { - symbol: "circle", - style: { - r: 4.5, - fill: markerCfg.color - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/edge/vhv.js -var import_util211 = __toModule(require_lib()); -var CORNER_PERCENT = 1 / 3; -function getVHVPath(from, to) { - var points = []; - points.push({ - x: from.x, - y: from.y * (1 - CORNER_PERCENT) + to.y * CORNER_PERCENT - }); - points.push({ - x: to.x, - y: from.y * (1 - CORNER_PERCENT) + to.y * CORNER_PERCENT - }); - points.push(to); - var path = [["M", from.x, from.y]]; - (0, import_util211.each)(points, function(point2) { - path.push(["L", point2.x, point2.y]); - }); - return path; -} -registerShape("edge", "vhv", { - draw: function(cfg, container2) { - var style = getStyle2(cfg, true, false, "lineWidth"); - var points = cfg.points; - var path = this.parsePath(getVHVPath(points[0], points[1])); - return container2.addShape("path", { - attrs: __assign(__assign({}, style), { path }) - }); - }, - getMarker: function(markerCfg) { - return { - symbol: "circle", - style: { - r: 4.5, - fill: markerCfg.color - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/interval/funnel.js -registerShape("interval", "funnel", { - getPoints: function(shapePoint) { - shapePoint.size = shapePoint.size * 2; - return getRectPoints(shapePoint); - }, - draw: function(cfg, container2) { - var style = getStyle2(cfg, false, true); - var path = this.parsePath(getFunnelPath(cfg.points, cfg.nextPoints, false)); - var shape = container2.addShape("path", { - attrs: __assign(__assign({}, style), { path }), - name: "interval" - }); - return shape; - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: "square", - style: { - r: 4, - fill: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/interval/hollow-rect.js -registerShape("interval", "hollow-rect", { - draw: function(cfg, container2) { - var style = getStyle2(cfg, true, false); - var group3 = container2; - var backgroundCfg = cfg === null || cfg === void 0 ? void 0 : cfg.background; - if (backgroundCfg) { - group3 = container2.addGroup(); - var backgroundStyle = getBackgroundRectStyle(cfg); - var backgroundPath = getBackgroundRectPath(cfg, this.parsePoints(cfg.points), this.coordinate); - group3.addShape("path", { - attrs: __assign(__assign({}, backgroundStyle), { path: backgroundPath }), - zIndex: -1, - name: BACKGROUND_SHAPE - }); - } - var path = this.parsePath(getRectPath(cfg.points)); - var shape = group3.addShape("path", { - attrs: __assign(__assign({}, style), { path }), - name: "interval" - }); - return backgroundCfg ? group3 : shape; - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color, isInPolar = markerCfg.isInPolar; - if (isInPolar) { - return { - symbol: "circle", - style: { - r: 4.5, - stroke: color4, - fill: null - } - }; - } - return { - symbol: "square", - style: { - r: 4, - stroke: color4, - fill: null - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/interval/line.js -var import_util214 = __toModule(require_lib()); -function getLinePoints(pointInfo) { - var x6 = pointInfo.x, y5 = pointInfo.y, y0 = pointInfo.y0; - if ((0, import_util214.isArray)(y5)) { - return y5.map(function(yItem, idx) { - return { - x: (0, import_util214.isArray)(x6) ? x6[idx] : x6, - y: yItem - }; - }); - } - return [ - { x: x6, y: y0 }, - { x: x6, y: y5 } - ]; -} -registerShape("interval", "line", { - getPoints: function(shapePoint) { - return getLinePoints(shapePoint); - }, - draw: function(cfg, container2) { - var style = getStyle2(cfg, true, false, "lineWidth"); - var newStyle = omit(__assign({}, style), ["fill"]); - var path = this.parsePath(getRectPath(cfg.points, false)); - var shape = container2.addShape("path", { - attrs: __assign(__assign({}, newStyle), { path }), - name: "interval" - }); - return shape; - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: function(x6, y5, r4) { - return [ - ["M", x6, y5 - r4], - ["L", x6, y5 + r4] - ]; - }, - style: { - r: 5, - stroke: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/interval/pyramid.js -registerShape("interval", "pyramid", { - getPoints: function(shapePoint) { - shapePoint.size = shapePoint.size * 2; - return getRectPoints(shapePoint); - }, - draw: function(cfg, container2) { - var style = getStyle2(cfg, false, true); - var path = this.parsePath(getFunnelPath(cfg.points, cfg.nextPoints, true)); - var shape = container2.addShape("path", { - attrs: __assign(__assign({}, style), { path }), - name: "interval" - }); - return shape; - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: "square", - style: { - r: 4, - fill: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/interval/tick.js -var import_util217 = __toModule(require_lib()); -function getTickPoints(pointInfo) { - var x6 = pointInfo.x, y5 = pointInfo.y, y0 = pointInfo.y0, size14 = pointInfo.size; - var yMin; - var yMax; - if ((0, import_util217.isArray)(y5)) { - yMin = y5[0], yMax = y5[1]; - } else { - yMin = y0; - yMax = y5; - } - var xMax = x6 + size14 / 2; - var xMin = x6 - size14 / 2; - return [ - { x: x6, y: yMin }, - { x: x6, y: yMax }, - { x: xMin, y: yMin }, - { x: xMax, y: yMin }, - { x: xMin, y: yMax }, - { x: xMax, y: yMax } - ]; -} -function getTickPath(points) { - return [ - ["M", points[0].x, points[0].y], - ["L", points[1].x, points[1].y], - ["M", points[2].x, points[2].y], - ["L", points[3].x, points[3].y], - ["M", points[4].x, points[4].y], - ["L", points[5].x, points[5].y] - ]; -} -registerShape("interval", "tick", { - getPoints: function(shapePoint) { - return getTickPoints(shapePoint); - }, - draw: function(cfg, container2) { - var style = getStyle2(cfg, true, false); - var path = this.parsePath(getTickPath(cfg.points)); - var shape = container2.addShape("path", { - attrs: __assign(__assign({}, style), { path }), - name: "interval" - }); - return shape; - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: function(x6, y5, r4) { - return [ - ["M", x6 - r4 / 2, y5 - r4], - ["L", x6 + r4 / 2, y5 - r4], - ["M", x6, y5 - r4], - ["L", x6, y5 + r4], - ["M", x6 - r4 / 2, y5 + r4], - ["L", x6 + r4 / 2, y5 + r4] - ]; - }, - style: { - r: 5, - stroke: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/line/step.js -var import_util218 = __toModule(require_lib()); -var interpolateCallback = function(point2, nextPoint, shapeType) { - var x6 = point2.x; - var y5 = point2.y; - var nextX = nextPoint.x; - var nextY = nextPoint.y; - var result; - switch (shapeType) { - case "hv": - result = [{ x: nextX, y: y5 }]; - break; - case "vh": - result = [{ x: x6, y: nextY }]; - break; - case "hvh": - var middleX = (nextX + x6) / 2; - result = [ - { x: middleX, y: y5 }, - { x: middleX, y: nextY } - ]; - break; - case "vhv": - var middleY = (y5 + nextY) / 2; - result = [ - { x: x6, y: middleY }, - { x: nextX, y: middleY } - ]; - break; - default: - break; - } - return result; -}; -function getInterpolatePoints(points, shapeType) { - var result = []; - (0, import_util218.each)(points, function(point2, index2) { - var nextPoint = points[index2 + 1]; - result.push(point2); - if (nextPoint) { - var interpolatePoint = interpolateCallback(point2, nextPoint, shapeType); - result = result.concat(interpolatePoint); - } - }); - return result; -} -function getInterpolatePath(points) { - return points.map(function(point2, index2) { - return index2 === 0 ? ["M", point2.x, point2.y] : ["L", point2.x, point2.y]; - }); -} -function getInterpolateShapeAttrs(cfg, shapeType) { - var points = getPathPoints(cfg.points, cfg.connectNulls, cfg.showSinglePoint); - var path = []; - (0, import_util218.each)(points, function(eachLinePoints) { - var interpolatePoints = getInterpolatePoints(eachLinePoints, shapeType); - path = path.concat(getInterpolatePath(interpolatePoints)); - }); - return __assign(__assign({}, getStyle2(cfg, true, false, "lineWidth")), { path }); -} -(0, import_util218.each)(["hv", "vh", "hvh", "vhv"], function(shapeType) { - registerShape("line", shapeType, { - draw: function(cfg, container2) { - var attrs = getInterpolateShapeAttrs(cfg, shapeType); - var shape = container2.addShape({ - type: "path", - attrs, - name: "line" - }); - return shape; - }, - getMarker: function(markerCfg) { - return getLineMarker(markerCfg, shapeType); - } - }); -}); - -// node_modules/@antv/g2/esm/geometry/shape/point/hollow.js -var import_util220 = __toModule(require_lib()); -(0, import_util220.each)(HOLLOW_SHAPES, function(shapeName) { - registerShape("point", shapeName, { - draw: function(cfg, container2) { - return drawPoints(this, cfg, container2, shapeName, true); - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: MarkerSymbols[shapeName], - style: { - r: 4.5, - stroke: color4, - fill: null - } - }; - } - }); -}); - -// node_modules/@antv/g2/esm/geometry/shape/point/image.js -registerShape("point", "image", { - draw: function(cfg, container2) { - var size14 = getStyle2(cfg, false, false, "r").r; - var points = this.parsePoints(cfg.points); - var pointPosition = points[0]; - if (cfg.isStack) { - pointPosition = points[1]; - } else if (points.length > 1) { - var group3 = container2.addGroup(); - for (var _i = 0, points_1 = points; _i < points_1.length; _i++) { - var point2 = points_1[_i]; - group3.addShape("image", { - attrs: { - x: point2.x - size14 / 2, - y: point2.y - size14, - width: size14, - height: size14, - img: cfg.shape[1] - } - }); - } - return group3; - } - return container2.addShape("image", { - attrs: { - x: pointPosition.x - size14 / 2, - y: pointPosition.y - size14, - width: size14, - height: size14, - img: cfg.shape[1] - } - }); - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: "circle", - style: { - r: 4.5, - fill: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/point/solid.js -var import_util222 = __toModule(require_lib()); -(0, import_util222.each)(SHAPES, function(shapeName) { - registerShape("point", shapeName, { - draw: function(cfg, container2) { - return drawPoints(this, cfg, container2, shapeName, false); - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: MarkerSymbols[shapeName] || shapeName, - style: { - r: 4.5, - fill: color4 - } - }; - } - }); -}); - -// node_modules/@antv/g2/esm/geometry/shape/schema/box.js -var import_util224 = __toModule(require_lib()); -function parseValue(value2) { - var array = !(0, import_util224.isArray)(value2) ? [value2] : value2; - var min13 = array[0]; - var max15 = array[array.length - 1]; - var min1 = array.length > 1 ? array[1] : min13; - var max1 = array.length > 3 ? array[3] : max15; - var median = array.length > 2 ? array[2] : min1; - return { - min: min13, - max: max15, - min1, - max1, - median - }; -} -function getBoxPoints(x6, y5, size14) { - var halfSize = size14 / 2; - var pointsArray; - if ((0, import_util224.isArray)(y5)) { - var _a6 = parseValue(y5), min13 = _a6.min, max15 = _a6.max, median = _a6.median, min1 = _a6.min1, max1 = _a6.max1; - var minX = x6 - halfSize; - var maxX = x6 + halfSize; - pointsArray = [ - [minX, max15], - [maxX, max15], - [x6, max15], - [x6, max1], - [minX, min1], - [minX, max1], - [maxX, max1], - [maxX, min1], - [x6, min1], - [x6, min13], - [minX, min13], - [maxX, min13], - [minX, median], - [maxX, median] - ]; - } else { - y5 = (0, import_util224.isNil)(y5) ? 0.5 : y5; - var _b = parseValue(x6), min13 = _b.min, max15 = _b.max, median = _b.median, min1 = _b.min1, max1 = _b.max1; - var minY = y5 - halfSize; - var maxY2 = y5 + halfSize; - pointsArray = [ - [min13, minY], - [min13, maxY2], - [min13, y5], - [min1, y5], - [min1, minY], - [min1, maxY2], - [max1, maxY2], - [max1, minY], - [max1, y5], - [max15, y5], - [max15, minY], - [max15, maxY2], - [median, minY], - [median, maxY2] - ]; - } - return pointsArray.map(function(arr) { - return { - x: arr[0], - y: arr[1] - }; - }); -} -function getBoxPath(points) { - return [ - ["M", points[0].x, points[0].y], - ["L", points[1].x, points[1].y], - ["M", points[2].x, points[2].y], - ["L", points[3].x, points[3].y], - ["M", points[4].x, points[4].y], - ["L", points[5].x, points[5].y], - ["L", points[6].x, points[6].y], - ["L", points[7].x, points[7].y], - ["L", points[4].x, points[4].y], - ["Z"], - ["M", points[8].x, points[8].y], - ["L", points[9].x, points[9].y], - ["M", points[10].x, points[10].y], - ["L", points[11].x, points[11].y], - ["M", points[12].x, points[12].y], - ["L", points[13].x, points[13].y] - ]; -} -registerShape("schema", "box", { - getPoints: function(shapePoint) { - var x6 = shapePoint.x, y5 = shapePoint.y, size14 = shapePoint.size; - return getBoxPoints(x6, y5, size14); - }, - draw: function(cfg, container2) { - var style = getStyle2(cfg, true, false); - var path = this.parsePath(getBoxPath(cfg.points)); - var shape = container2.addShape("path", { - attrs: __assign(__assign({}, style), { path, name: "schema" }) - }); - return shape; - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: function(x6, y5, r4) { - var yValues = [y5 - 6, y5 - 3, y5, y5 + 3, y5 + 6]; - var points = getBoxPoints(x6, yValues, r4); - return [ - ["M", points[0].x + 1, points[0].y], - ["L", points[1].x - 1, points[1].y], - ["M", points[2].x, points[2].y], - ["L", points[3].x, points[3].y], - ["M", points[4].x, points[4].y], - ["L", points[5].x, points[5].y], - ["L", points[6].x, points[6].y], - ["L", points[7].x, points[7].y], - ["L", points[4].x, points[4].y], - ["Z"], - ["M", points[8].x, points[8].y], - ["L", points[9].x, points[9].y], - ["M", points[10].x + 1, points[10].y], - ["L", points[11].x - 1, points[11].y], - ["M", points[12].x, points[12].y], - ["L", points[13].x, points[13].y] - ]; - }, - style: { - r: 6, - lineWidth: 1, - stroke: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/schema/candle.js -var import_util225 = __toModule(require_lib()); -function getCandleYValues(value2) { - var array = !(0, import_util225.isArray)(value2) ? [value2] : value2; - var sorted = array.sort(function(a4, b10) { - return b10 - a4; - }); - return padEnd(sorted, 4, sorted[sorted.length - 1]); -} -function getCandlePoints(x6, y5, size14) { - var yValues = getCandleYValues(y5); - return [ - { x: x6, y: yValues[0] }, - { x: x6, y: yValues[1] }, - { x: x6 - size14 / 2, y: yValues[2] }, - { x: x6 - size14 / 2, y: yValues[1] }, - { x: x6 + size14 / 2, y: yValues[1] }, - { x: x6 + size14 / 2, y: yValues[2] }, - { x: x6, y: yValues[2] }, - { x: x6, y: yValues[3] } - ]; -} -function getCandlePath(points) { - return [ - ["M", points[0].x, points[0].y], - ["L", points[1].x, points[1].y], - ["M", points[2].x, points[2].y], - ["L", points[3].x, points[3].y], - ["L", points[4].x, points[4].y], - ["L", points[5].x, points[5].y], - ["Z"], - ["M", points[6].x, points[6].y], - ["L", points[7].x, points[7].y] - ]; -} -registerShape("schema", "candle", { - getPoints: function(shapePoint) { - var x6 = shapePoint.x, y5 = shapePoint.y, size14 = shapePoint.size; - return getCandlePoints(x6, y5, size14); - }, - draw: function(cfg, container2) { - var style = getStyle2(cfg, true, true); - var path = this.parsePath(getCandlePath(cfg.points)); - var shape = container2.addShape("path", { - attrs: __assign(__assign({}, style), { path, name: "schema" }) - }); - return shape; - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: function(x6, y5, r4) { - var yValues = [y5 + 7.5, y5 + 3, y5 - 3, y5 - 7.5]; - var points = getCandlePoints(x6, yValues, r4); - return [ - ["M", points[0].x, points[0].y], - ["L", points[1].x, points[1].y], - ["M", points[2].x, points[2].y], - ["L", points[3].x, points[3].y], - ["L", points[4].x, points[4].y], - ["L", points[5].x, points[5].y], - ["Z"], - ["M", points[6].x, points[6].y], - ["L", points[7].x, points[7].y] - ]; - }, - style: { - lineWidth: 1, - stroke: color4, - fill: color4, - r: 6 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/polygon/square.js -var import_util226 = __toModule(require_lib()); -function getRectAttrs(points, size14) { - var width2 = Math.abs(points[0].x - points[2].x); - var height = Math.abs(points[0].y - points[2].y); - var len5 = Math.min(width2, height); - if (size14) { - len5 = (0, import_util226.clamp)(size14, 0, Math.min(width2, height)); - } - len5 = len5 / 2; - var centerX = (points[0].x + points[2].x) / 2; - var centerY = (points[0].y + points[2].y) / 2; - return { - x: centerX - len5, - y: centerY - len5, - width: len5 * 2, - height: len5 * 2 - }; -} -registerShape("polygon", "square", { - draw: function(cfg, container2) { - if (!(0, import_util226.isEmpty)(cfg.points)) { - var shapeAttrs = getStyle2(cfg, true, true); - var points = this.parsePoints(cfg.points); - return container2.addShape("rect", { - attrs: __assign(__assign({}, shapeAttrs), getRectAttrs(points, cfg.size)), - name: "polygon" - }); - } - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: "square", - style: { - r: 4, - fill: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/violin/smooth.js -registerShape("violin", "smooth", { - draw: function(cfg, container2) { - var attrs = getStyle2(cfg, true, true); - var path = this.parsePath(getSmoothViolinPath(cfg.points)); - return container2.addShape("path", { - attrs: __assign(__assign({}, attrs), { path }) - }); - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: "circle", - style: { - stroke: null, - r: 4, - fill: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/shape/violin/hollow.js -registerShape("violin", "hollow", { - draw: function(cfg, container2) { - var attrs = getStyle2(cfg, true, false); - var path = this.parsePath(getViolinPath(cfg.points)); - return container2.addShape("path", { - attrs: __assign(__assign({}, attrs), { path }) - }); - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: "circle", - style: { - r: 4, - fill: null, - stroke: color4 - } - }; - } -}); -registerShape("violin", "hollow-smooth", { - draw: function(cfg, container2) { - var attrs = getStyle2(cfg, true, false); - var path = this.parsePath(getSmoothViolinPath(cfg.points)); - return container2.addShape("path", { - attrs: __assign(__assign({}, attrs), { path }) - }); - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: "circle", - style: { - r: 4, - fill: null, - stroke: color4 - } - }; - } -}); - -// node_modules/@antv/g2/esm/geometry/label/interval.js -var import_util227 = __toModule(require_lib()); -var IntervalLabel = function(_super) { - __extends(IntervalLabel2, _super); - function IntervalLabel2() { - return _super !== null && _super.apply(this, arguments) || this; - } - IntervalLabel2.prototype.getLabelValueDir = function(mappingData) { - var dim = "y"; - var points = mappingData.points; - return points[0][dim] <= points[2][dim] ? 1 : -1; - }; - IntervalLabel2.prototype.getLabelOffsetPoint = function(labelCfg, index2, total, position2) { - var _a6; - var point2 = _super.prototype.getLabelOffsetPoint.call(this, labelCfg, index2, total); - var coordinate11 = this.getCoordinate(); - var transposed = coordinate11.isTransposed; - var dim = transposed ? "x" : "y"; - var dir = this.getLabelValueDir(labelCfg.mappingData); - point2 = __assign(__assign({}, point2), (_a6 = {}, _a6[dim] = point2[dim] * dir, _a6)); - if (coordinate11.isReflect("x")) { - point2 = __assign(__assign({}, point2), { x: point2.x * -1 }); - } - if (coordinate11.isReflect("y")) { - point2 = __assign(__assign({}, point2), { y: point2.y * -1 }); - } - return point2; - }; - IntervalLabel2.prototype.getThemedLabelCfg = function(labelCfg) { - var geometry35 = this.geometry; - var defaultLabelCfg3 = this.getDefaultLabelCfg(); - var theme4 = geometry35.theme; - return (0, import_util227.deepMix)({}, defaultLabelCfg3, theme4.labels, labelCfg.position === "middle" ? { offset: 0 } : {}, labelCfg); - }; - IntervalLabel2.prototype.setLabelPosition = function(labelPointCfg, mappingData, index2, position2) { - var coordinate11 = this.getCoordinate(); - var transposed = coordinate11.isTransposed; - var shapePoints = mappingData.points; - var point0 = coordinate11.convert(shapePoints[0]); - var point2 = coordinate11.convert(shapePoints[2]); - var dir = this.getLabelValueDir(mappingData); - var top; - var right2; - var bottom; - var left2; - var shape = (0, import_util227.isArray)(mappingData.shape) ? mappingData.shape[0] : mappingData.shape; - if (shape === "funnel" || shape === "pyramid") { - var nextPoints = (0, import_util227.get)(mappingData, "nextPoints"); - var points = (0, import_util227.get)(mappingData, "points"); - if (nextPoints) { - var p0 = coordinate11.convert(points[0]); - var p1 = coordinate11.convert(points[1]); - var nextP0 = coordinate11.convert(nextPoints[0]); - var nextP1 = coordinate11.convert(nextPoints[1]); - if (transposed) { - top = Math.min(nextP0.y, p0.y); - bottom = Math.max(nextP0.y, p0.y); - right2 = (p1.x + nextP1.x) / 2; - left2 = (p0.x + nextP0.x) / 2; - } else { - top = Math.min((p1.y + nextP1.y) / 2, (p0.y + nextP0.y) / 2); - bottom = Math.max((p1.y + nextP1.y) / 2, (p0.y + nextP0.y) / 2); - right2 = nextP1.x; - left2 = p0.x; - } - } else { - top = Math.min(point2.y, point0.y); - bottom = Math.max(point2.y, point0.y); - right2 = point2.x; - left2 = point0.x; - } - } else { - top = Math.min(point2.y, point0.y); - bottom = Math.max(point2.y, point0.y); - right2 = point2.x; - left2 = point0.x; - } - switch (position2) { - case "right": - labelPointCfg.x = right2; - labelPointCfg.y = (top + bottom) / 2; - labelPointCfg.textAlign = (0, import_util227.get)(labelPointCfg, "textAlign", dir > 0 ? "left" : "right"); - break; - case "left": - labelPointCfg.x = left2; - labelPointCfg.y = (top + bottom) / 2; - labelPointCfg.textAlign = (0, import_util227.get)(labelPointCfg, "textAlign", dir > 0 ? "left" : "right"); - break; - case "bottom": - if (transposed) { - labelPointCfg.x = (right2 + left2) / 2; - } - labelPointCfg.y = bottom; - labelPointCfg.textAlign = (0, import_util227.get)(labelPointCfg, "textAlign", "center"); - labelPointCfg.textBaseline = (0, import_util227.get)(labelPointCfg, "textBaseline", dir > 0 ? "bottom" : "top"); - break; - case "middle": - if (transposed) { - labelPointCfg.x = (right2 + left2) / 2; - } - labelPointCfg.y = (top + bottom) / 2; - labelPointCfg.textAlign = (0, import_util227.get)(labelPointCfg, "textAlign", "center"); - labelPointCfg.textBaseline = (0, import_util227.get)(labelPointCfg, "textBaseline", "middle"); - break; - case "top": - if (transposed) { - labelPointCfg.x = (right2 + left2) / 2; - } - labelPointCfg.y = top; - labelPointCfg.textAlign = (0, import_util227.get)(labelPointCfg, "textAlign", "center"); - labelPointCfg.textBaseline = (0, import_util227.get)(labelPointCfg, "textBaseline", dir > 0 ? "bottom" : "top"); - break; - default: - break; - } - }; - return IntervalLabel2; -}(base_default14); -var interval_default2 = IntervalLabel; - -// node_modules/@antv/g2/esm/geometry/label/pie.js -var import_util229 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/geometry/label/polar.js -var import_util228 = __toModule(require_lib()); -var HALF_PI = Math.PI / 2; -var PolarLabel = function(_super) { - __extends(PolarLabel2, _super); - function PolarLabel2() { - return _super !== null && _super.apply(this, arguments) || this; - } - PolarLabel2.prototype.getLabelOffset = function(offset) { - var coordinate11 = this.getCoordinate(); - var actualOffset = 0; - if ((0, import_util228.isNumber)(offset)) { - actualOffset = offset; - } else if ((0, import_util228.isString)(offset) && offset.indexOf("%") !== -1) { - var r4 = coordinate11.getRadius(); - if (coordinate11.innerRadius > 0) { - r4 = r4 * (1 - coordinate11.innerRadius); - } - actualOffset = parseFloat(offset) * 0.01 * r4; - } - return actualOffset; - }; - PolarLabel2.prototype.getLabelItems = function(mapppingArray) { - var items = _super.prototype.getLabelItems.call(this, mapppingArray); - var yScale = this.geometry.getYScale(); - return (0, import_util228.map)(items, function(item) { - if (item && yScale) { - var percent2 = yScale.scale((0, import_util228.get)(item.data, yScale.field)); - return __assign(__assign({}, item), { percent: percent2 }); - } - return item; - }); - }; - PolarLabel2.prototype.getLabelAlign = function(point2) { - var coordinate11 = this.getCoordinate(); - var align; - if (point2.labelEmit) { - align = point2.angle <= Math.PI / 2 && point2.angle >= -Math.PI / 2 ? "left" : "right"; - } else if (!coordinate11.isTransposed) { - align = "center"; - } else { - var center2 = coordinate11.getCenter(); - var offset = point2.offset; - if (Math.abs(point2.x - center2.x) < 1) { - align = "center"; - } else if (point2.angle > Math.PI || point2.angle <= 0) { - align = offset > 0 ? "left" : "right"; - } else { - align = offset > 0 ? "right" : "left"; - } - } - return align; - }; - PolarLabel2.prototype.getLabelPoint = function(labelCfg, mappingData, index2) { - var factor = 1; - var arcPoint; - var content = labelCfg.content[index2]; - if (this.isToMiddle(mappingData)) { - arcPoint = this.getMiddlePoint(mappingData.points); - } else { - if (labelCfg.content.length === 1 && index2 === 0) { - index2 = 1; - } else if (index2 === 0) { - factor = -1; - } - arcPoint = this.getArcPoint(mappingData, index2); - } - var offset = labelCfg.offset * factor; - var middleAngle = this.getPointAngle(arcPoint); - var isLabelEmit = labelCfg.labelEmit; - var labelPositionCfg = this.getCirclePoint(middleAngle, offset, arcPoint, isLabelEmit); - if (labelPositionCfg.r === 0) { - labelPositionCfg.content = ""; - } else { - labelPositionCfg.content = content; - labelPositionCfg.angle = middleAngle; - labelPositionCfg.color = mappingData.color; - } - labelPositionCfg.rotate = labelCfg.autoRotate ? this.getLabelRotate(middleAngle, offset, isLabelEmit) : labelCfg.rotate; - labelPositionCfg.start = { - x: arcPoint.x, - y: arcPoint.y - }; - return labelPositionCfg; - }; - PolarLabel2.prototype.getArcPoint = function(mappingData, index2) { - if (index2 === void 0) { - index2 = 0; - } - if (!(0, import_util228.isArray)(mappingData.x) && !(0, import_util228.isArray)(mappingData.y)) { - return { - x: mappingData.x, - y: mappingData.y - }; - } - return { - x: (0, import_util228.isArray)(mappingData.x) ? mappingData.x[index2] : mappingData.x, - y: (0, import_util228.isArray)(mappingData.y) ? mappingData.y[index2] : mappingData.y - }; - }; - PolarLabel2.prototype.getPointAngle = function(point2) { - return getAngleByPoint(this.getCoordinate(), point2); - }; - PolarLabel2.prototype.getCirclePoint = function(angle3, offset, point2, isLabelEmit) { - var coordinate11 = this.getCoordinate(); - var center2 = coordinate11.getCenter(); - var r4 = getDistanceToCenter(coordinate11, point2); - if (r4 === 0) { - return __assign(__assign({}, center2), { r: r4 }); - } - var labelAngle = angle3; - if (coordinate11.isTransposed && r4 > offset && !isLabelEmit) { - var appendAngle = Math.asin(offset / (2 * r4)); - labelAngle = angle3 + appendAngle * 2; - } else { - r4 = r4 + offset; - } - return { - x: center2.x + r4 * Math.cos(labelAngle), - y: center2.y + r4 * Math.sin(labelAngle), - r: r4 - }; - }; - PolarLabel2.prototype.getLabelRotate = function(angle3, offset, isLabelEmit) { - var rotate8 = angle3 + HALF_PI; - if (isLabelEmit) { - rotate8 -= HALF_PI; - } - if (rotate8) { - if (rotate8 > HALF_PI) { - rotate8 = rotate8 - Math.PI; - } else if (rotate8 < -HALF_PI) { - rotate8 = rotate8 + Math.PI; - } - } - return rotate8; - }; - PolarLabel2.prototype.getMiddlePoint = function(points) { - var coordinate11 = this.getCoordinate(); - var count2 = points.length; - var middlePoint = { - x: 0, - y: 0 - }; - (0, import_util228.each)(points, function(point2) { - middlePoint.x += point2.x; - middlePoint.y += point2.y; - }); - middlePoint.x /= count2; - middlePoint.y /= count2; - middlePoint = coordinate11.convert(middlePoint); - return middlePoint; - }; - PolarLabel2.prototype.isToMiddle = function(mappingData) { - return mappingData.x.length > 2; - }; - return PolarLabel2; -}(base_default14); -var polar_default2 = PolarLabel; - -// node_modules/@antv/g2/esm/geometry/label/pie.js -var PieLabel = function(_super) { - __extends(PieLabel2, _super); - function PieLabel2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.defaultLayout = "distribute"; - return _this; - } - PieLabel2.prototype.getDefaultLabelCfg = function(offset, position2) { - var cfg = _super.prototype.getDefaultLabelCfg.call(this, offset, position2); - return (0, import_util229.deepMix)({}, cfg, (0, import_util229.get)(this.geometry.theme, "pieLabels", {})); - }; - PieLabel2.prototype.getLabelOffset = function(offset) { - return _super.prototype.getLabelOffset.call(this, offset) || 0; - }; - PieLabel2.prototype.getLabelRotate = function(angle3, offset, isLabelLimit) { - var rotate8; - if (offset < 0) { - rotate8 = angle3; - if (rotate8 > Math.PI / 2) { - rotate8 = rotate8 - Math.PI; - } - if (rotate8 < -Math.PI / 2) { - rotate8 = rotate8 + Math.PI; - } - } - return rotate8; - }; - PieLabel2.prototype.getLabelAlign = function(point2) { - var coordinate11 = this.getCoordinate(); - var center2 = coordinate11.getCenter(); - var align; - if (point2.angle <= Math.PI / 2 && point2.x >= center2.x) { - align = "left"; - } else { - align = "right"; - } - if (point2.offset <= 0) { - if (align === "right") { - align = "left"; - } else { - align = "right"; - } - } - return align; - }; - PieLabel2.prototype.getArcPoint = function(point2) { - return point2; - }; - PieLabel2.prototype.getPointAngle = function(point2) { - var coordinate11 = this.getCoordinate(); - var startPoint = { - x: (0, import_util229.isArray)(point2.x) ? point2.x[0] : point2.x, - y: point2.y[0] - }; - var endPoint = { - x: (0, import_util229.isArray)(point2.x) ? point2.x[1] : point2.x, - y: point2.y[1] - }; - var angle3; - var startAngle = getAngleByPoint(coordinate11, startPoint); - if (point2.points && point2.points[0].y === point2.points[1].y) { - angle3 = startAngle; - } else { - var endAngle = getAngleByPoint(coordinate11, endPoint); - if (startAngle >= endAngle) { - endAngle = endAngle + Math.PI * 2; - } - angle3 = startAngle + (endAngle - startAngle) / 2; - } - return angle3; - }; - PieLabel2.prototype.getCirclePoint = function(angle3, offset) { - var coordinate11 = this.getCoordinate(); - var center2 = coordinate11.getCenter(); - var r4 = coordinate11.getRadius() + offset; - return __assign(__assign({}, polarToCartesian(center2.x, center2.y, r4, angle3)), { angle: angle3, r: r4 }); - }; - return PieLabel2; -}(polar_default2); -var pie_default = PieLabel; - -// node_modules/@antv/g2/esm/geometry/label/layout/pie/distribute.js -var import_util230 = __toModule(require_lib()); -var MARGIN = 4; -function antiCollision(labelShapes, labels, lineHeight, plotRange, center2, isRight) { - var overlapping = true; - var start = plotRange.start; - var end2 = plotRange.end; - var startY = Math.min(start.y, end2.y); - var totalHeight = Math.abs(start.y - end2.y); - var i4; - var maxY2 = 0; - var minY = Number.MIN_VALUE; - var boxes = labels.map(function(label17) { - if (label17.y > maxY2) { - maxY2 = label17.y; - } - if (label17.y < minY) { - minY = label17.y; - } - return { - size: lineHeight, - targets: [label17.y - startY] - }; - }); - minY -= startY; - if (maxY2 - startY > totalHeight) { - totalHeight = maxY2 - startY; - } - while (overlapping) { - boxes.forEach(function(box3) { - var target = (Math.min.apply(minY, box3.targets) + Math.max.apply(minY, box3.targets)) / 2; - box3.pos = Math.min(Math.max(minY, target - box3.size / 2), totalHeight - box3.size); - }); - overlapping = false; - i4 = boxes.length; - while (i4--) { - if (i4 > 0) { - var previousBox = boxes[i4 - 1]; - var box2 = boxes[i4]; - if (previousBox.pos + previousBox.size > box2.pos) { - previousBox.size += box2.size; - previousBox.targets = previousBox.targets.concat(box2.targets); - if (previousBox.pos + previousBox.size > totalHeight) { - previousBox.pos = totalHeight - previousBox.size; - } - boxes.splice(i4, 1); - overlapping = true; - } - } - } - } - i4 = 0; - boxes.forEach(function(b10) { - var posInCompositeBox = startY + lineHeight / 2; - b10.targets.forEach(function() { - labels[i4].y = b10.pos + posInCompositeBox; - posInCompositeBox += lineHeight; - i4++; - }); - }); - var labelsMap = {}; - for (var _i = 0, labelShapes_1 = labelShapes; _i < labelShapes_1.length; _i++) { - var labelShape = labelShapes_1[_i]; - labelsMap[labelShape.get("id")] = labelShape; - } - labels.forEach(function(label17) { - var rPow2 = label17.r * label17.r; - var dyPow2 = Math.pow(Math.abs(label17.y - center2.y), 2); - if (rPow2 < dyPow2) { - label17.x = center2.x; - } else { - var dx = Math.sqrt(rPow2 - dyPow2); - if (!isRight) { - label17.x = center2.x - dx; - } else { - label17.x = center2.x + dx; - } - } - var labelShape2 = labelsMap[label17.id]; - labelShape2.attr("x", label17.x); - labelShape2.attr("y", label17.y); - var textShape = (0, import_util230.find)(labelShape2.getChildren(), function(ele) { - return ele.get("type") === "text"; - }); - if (textShape) { - textShape.attr("y", label17.y); - textShape.attr("x", label17.x); - } - }); -} -function distribute(items, labels, shapes, region) { - if (!items.length || !labels.length) { - return; - } - var offset = items[0] ? items[0].offset : 0; - var coordinate11 = labels[0].get("coordinate"); - var radius = coordinate11.getRadius(); - var center2 = coordinate11.getCenter(); - if (offset > 0) { - var lineHeight_1 = 14; - var totalR = radius + offset; - var totalHeight_1 = totalR * 2 + lineHeight_1 * 2; - var plotRange_1 = { - start: coordinate11.start, - end: coordinate11.end - }; - var halves_1 = [ - [], - [] - ]; - items.forEach(function(labelItem) { - if (!labelItem) { - return; - } - if (labelItem.textAlign === "right") { - halves_1[0].push(labelItem); - } else { - halves_1[1].push(labelItem); - } - }); - halves_1.forEach(function(half, index2) { - var maxLabelsCountForOneSide = totalHeight_1 / lineHeight_1; - if (half.length > maxLabelsCountForOneSide) { - half.sort(function(a4, b10) { - return b10["..percent"] - a4["..percent"]; - }); - half.splice(maxLabelsCountForOneSide, half.length - maxLabelsCountForOneSide); - } - half.sort(function(a4, b10) { - return a4.y - b10.y; - }); - antiCollision(labels, half, lineHeight_1, plotRange_1, center2, index2); - }); - } - (0, import_util230.each)(items, function(item) { - if (item && item.labelLine) { - var distance15 = item.offset; - var angle3 = item.angle; - var startPoint = polarToCartesian(center2.x, center2.y, radius, angle3); - var innerPoint = polarToCartesian(center2.x, center2.y, radius + distance15 / 2, angle3); - var itemX = item.x + (0, import_util230.get)(item, "offsetX", 0); - var itemY = item.y + (0, import_util230.get)(item, "offsetY", 0); - var endPoint = { - x: itemX - Math.cos(angle3) * MARGIN, - y: itemY - Math.sin(angle3) * MARGIN - }; - if (!(0, import_util230.isObject)(item.labelLine)) { - item.labelLine = {}; - } - item.labelLine.path = [ - "M ".concat(startPoint.x), - "".concat(startPoint.y, " Q").concat(innerPoint.x), - "".concat(innerPoint.y, " ").concat(endPoint.x), - endPoint.y - ].join(","); - } - }); -} - -// node_modules/@antv/g2/esm/geometry/label/layout/pie/outer.js -var import_util231 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/geometry/label/layout/pie/util.js -function antiCollision2(items, labelHeight, plotRange) { - var labels = items.filter(function(item) { - return !item.invisible; - }); - labels.sort(function(a4, b10) { - return a4.y - b10.y; - }); - var overlapping = true; - var startY = plotRange.minY; - var endY = plotRange.maxY; - var totalHeight = Math.abs(startY - endY); - var i4; - var maxY2 = 0; - var minY = Number.MIN_VALUE; - var boxes = labels.map(function(label17) { - if (label17.y > maxY2) { - maxY2 = label17.y; - } - if (label17.y < minY) { - minY = label17.y; - } - return { - content: label17.content, - size: labelHeight, - targets: [label17.y - startY], - pos: null - }; - }); - minY -= startY; - if (maxY2 - startY > totalHeight) { - totalHeight = maxY2 - startY; - } - while (overlapping) { - boxes.forEach(function(box3) { - var target = (Math.min.apply(minY, box3.targets) + Math.max.apply(minY, box3.targets)) / 2; - box3.pos = Math.min(Math.max(minY, target - box3.size / 2), totalHeight - box3.size); - box3.pos = Math.max(0, box3.pos); - }); - overlapping = false; - i4 = boxes.length; - while (i4--) { - if (i4 > 0) { - var previousBox = boxes[i4 - 1]; - var box2 = boxes[i4]; - if (previousBox.pos + previousBox.size > box2.pos) { - previousBox.size += box2.size; - previousBox.targets = previousBox.targets.concat(box2.targets); - if (previousBox.pos + previousBox.size > totalHeight) { - previousBox.pos = totalHeight - previousBox.size; - } - boxes.splice(i4, 1); - overlapping = true; - } - } - } - } - i4 = 0; - boxes.forEach(function(b10) { - var posInCompositeBox = startY + labelHeight / 2; - b10.targets.forEach(function() { - labels[i4].y = b10.pos + posInCompositeBox; - posInCompositeBox += labelHeight; - i4++; - }); - }); -} - -// node_modules/@antv/g2/esm/geometry/label/layout/pie/outer.js -var MARGIN2 = 4; -function drawLabelline(item, coordinate11) { - var center2 = coordinate11.getCenter(); - var radius = coordinate11.getRadius(); - if (item && item.labelLine) { - var angle3 = item.angle, labelOffset = item.offset; - var startPoint = polarToCartesian(center2.x, center2.y, radius, angle3); - var itemX = item.x + (0, import_util231.get)(item, "offsetX", 0) * (Math.cos(angle3) > 0 ? 1 : -1); - var itemY = item.y + (0, import_util231.get)(item, "offsetY", 0) * (Math.sin(angle3) > 0 ? 1 : -1); - var endPoint = { - x: itemX - Math.cos(angle3) * MARGIN2, - y: itemY - Math.sin(angle3) * MARGIN2 - }; - var smoothConnector = item.labelLine.smooth; - var path = []; - var dx = endPoint.x - center2.x; - var dy = endPoint.y - center2.y; - var endAngle = Math.atan(dy / dx); - if (dx < 0) { - endAngle += Math.PI; - } - if (smoothConnector === false) { - if (!(0, import_util231.isObject)(item.labelLine)) { - item.labelLine = {}; - } - var sweepFlag = 0; - if (angle3 < 0 && angle3 > -Math.PI / 2 || angle3 > Math.PI * 1.5) { - if (endPoint.y > startPoint.y) { - sweepFlag = 1; - } - } - if (angle3 >= 0 && angle3 < Math.PI / 2) { - if (endPoint.y > startPoint.y) { - sweepFlag = 1; - } - } - if (angle3 >= Math.PI / 2 && angle3 < Math.PI) { - if (startPoint.y > endPoint.y) { - sweepFlag = 1; - } - } - if (angle3 < -Math.PI / 2 || angle3 >= Math.PI && angle3 < Math.PI * 1.5) { - if (startPoint.y > endPoint.y) { - sweepFlag = 1; - } - } - var distance15 = labelOffset / 2 > 4 ? 4 : Math.max(labelOffset / 2 - 1, 0); - var breakPoint = polarToCartesian(center2.x, center2.y, radius + distance15, angle3); - var breakPoint3 = polarToCartesian(center2.x, center2.y, radius + labelOffset / 2, endAngle); - var largeArcFlag = 0; - path.push("M ".concat(startPoint.x, " ").concat(startPoint.y)); - path.push("L ".concat(breakPoint.x, " ").concat(breakPoint.y)); - path.push("A ".concat(center2.x, " ").concat(center2.y, " 0 ").concat(largeArcFlag, " ").concat(sweepFlag, " ").concat(breakPoint3.x, " ").concat(breakPoint3.y)); - path.push("L ".concat(endPoint.x, " ").concat(endPoint.y)); - } else { - var breakPoint = polarToCartesian(center2.x, center2.y, radius + (labelOffset / 2 > 4 ? 4 : Math.max(labelOffset / 2 - 1, 0)), angle3); - var xSign = startPoint.x < center2.x ? 1 : -1; - path.push("M ".concat(endPoint.x, " ").concat(endPoint.y)); - var slope1 = (startPoint.y - center2.y) / (startPoint.x - center2.x); - var slope2 = (endPoint.y - center2.y) / (endPoint.x - center2.x); - if (Math.abs(slope1 - slope2) > Math.pow(Math.E, -16)) { - path.push.apply(path, [ - "C", - endPoint.x + xSign * 4, - endPoint.y, - 2 * breakPoint.x - startPoint.x, - 2 * breakPoint.y - startPoint.y, - startPoint.x, - startPoint.y - ]); - } - path.push("L ".concat(startPoint.x, " ").concat(startPoint.y)); - } - item.labelLine.path = path.join(" "); - } -} -function pieOuterLabelLayout(originalItems, labels, shapes, region) { - var items = (0, import_util231.filter)(originalItems, function(item) { - return !(0, import_util231.isNil)(item); - }); - var coordinate11 = labels[0] && labels[0].get("coordinate"); - if (!coordinate11) { - return; - } - var center2 = coordinate11.getCenter(); - var radius = coordinate11.getRadius(); - var labelsMap = {}; - for (var _i = 0, labels_1 = labels; _i < labels_1.length; _i++) { - var labelShape = labels_1[_i]; - labelsMap[labelShape.get("id")] = labelShape; - } - var labelHeight = (0, import_util231.get)(items[0], "labelHeight", 14); - var labelOffset = (0, import_util231.get)(items[0], "offset", 0); - if (labelOffset <= 0) { - return; - } - var LEFT_HALF_KEY = "left"; - var RIGHT_HALF_KEY = "right"; - var separateLabels = (0, import_util231.groupBy)(items, function(item) { - return item.x < center2.x ? LEFT_HALF_KEY : RIGHT_HALF_KEY; - }); - var start = coordinate11.start, end2 = coordinate11.end; - var totalHeight = Math.min((radius + labelOffset + labelHeight) * 2, coordinate11.getHeight()); - var totalR = totalHeight / 2; - var labelsContainerRange = { - minX: start.x, - maxX: end2.x, - minY: center2.y - totalR, - maxY: center2.y + totalR - }; - (0, import_util231.each)(separateLabels, function(half, key) { - var maxLabelsCountForOneSide = Math.floor(totalHeight / labelHeight); - if (half.length > maxLabelsCountForOneSide) { - half.sort(function(a4, b10) { - return b10.percent - a4.percent; - }); - (0, import_util231.each)(half, function(labelItem, idx) { - if (idx + 1 > maxLabelsCountForOneSide) { - labelsMap[labelItem.id].set("visible", false); - labelItem.invisible = true; - } - }); - } - antiCollision2(half, labelHeight, labelsContainerRange); - }); - (0, import_util231.each)(separateLabels, function(half, key) { - (0, import_util231.each)(half, function(item) { - var isRight = key === RIGHT_HALF_KEY; - var labelShape2 = labelsMap[item.id]; - var content = labelShape2.getChildByIndex(0); - if (content) { - var r4 = radius + labelOffset; - var dy = item.y - center2.y; - var rPow2 = Math.pow(r4, 2); - var dyPow2 = Math.pow(dy, 2); - var dxPow2 = rPow2 - dyPow2 > 0 ? rPow2 - dyPow2 : 0; - var dx = Math.sqrt(dxPow2); - var dx_offset = Math.abs(Math.cos(item.angle) * r4); - if (!isRight) { - item.x = center2.x - Math.max(dx, dx_offset); - } else { - item.x = center2.x + Math.max(dx, dx_offset); - } - } - if (content) { - content.attr("y", item.y); - content.attr("x", item.x); - } - drawLabelline(item, coordinate11); - }); - }); -} - -// node_modules/@antv/g2/esm/geometry/label/layout/pie/spider.js -var import_util233 = __toModule(require_lib()); -var INFLECTION_OFFSET = 4; -var LABEL_OFFSET_X = 4; -var LABEL_TEXT_LINE_OFFSET = 4; -function drawLabelline2(item, coordinate11, inRight) { - var center2 = coordinate11.getCenter(); - var radius = coordinate11.getRadius(); - var startPoint = { - x: item.x - (inRight ? LABEL_TEXT_LINE_OFFSET : -LABEL_TEXT_LINE_OFFSET), - y: item.y - }; - var inflectionPoint = polarToCartesian(center2.x, center2.y, radius + INFLECTION_OFFSET, item.angle); - var p1 = { x: startPoint.x, y: startPoint.y }; - var p22 = { x: inflectionPoint.x, y: inflectionPoint.y }; - var endPoint = polarToCartesian(center2.x, center2.y, radius, item.angle); - var path = ""; - if (startPoint.y !== inflectionPoint.y) { - var offset = inRight ? 4 : -4; - p1.y = startPoint.y; - if (item.angle < 0 && item.angle >= -Math.PI / 2) { - p1.x = Math.max(inflectionPoint.x, startPoint.x - offset); - if (startPoint.y < inflectionPoint.y) { - p22.y = p1.y; - } else { - p22.y = inflectionPoint.y; - p22.x = Math.max(p22.x, p1.x - offset); - } - } - if (item.angle > 0 && item.angle < Math.PI / 2) { - p1.x = Math.max(inflectionPoint.x, startPoint.x - offset); - if (startPoint.y > inflectionPoint.y) { - p22.y = p1.y; - } else { - p22.y = inflectionPoint.y; - p22.x = Math.max(p22.x, p1.x - offset); - } - } - if (item.angle > Math.PI / 2) { - p1.x = Math.min(inflectionPoint.x, startPoint.x - offset); - if (startPoint.y > inflectionPoint.y) { - p22.y = p1.y; - } else { - p22.y = inflectionPoint.y; - p22.x = Math.min(p22.x, p1.x - offset); - } - } - if (item.angle < -Math.PI / 2) { - p1.x = Math.min(inflectionPoint.x, startPoint.x - offset); - if (startPoint.y < inflectionPoint.y) { - p22.y = p1.y; - } else { - p22.y = inflectionPoint.y; - p22.x = Math.min(p22.x, p1.x - offset); - } - } - } - path = [ - "M ".concat(startPoint.x, ",").concat(startPoint.y), - "L ".concat(p1.x, ",").concat(p1.y), - "L ".concat(p22.x, ",").concat(p22.y), - "L ".concat(inflectionPoint.x, ",").concat(inflectionPoint.y), - "L ".concat(endPoint.x, ",").concat(endPoint.y) - ].join(" "); - item.labelLine = (0, import_util233.deepMix)({}, item.labelLine, { path }); -} -function pieSpiderLabelLayout(items, labels, shapes, region) { - var coordinate11 = labels[0] && labels[0].get("coordinate"); - if (!coordinate11) { - return; - } - var center2 = coordinate11.getCenter(); - var radius = coordinate11.getRadius(); - var labelsMap = {}; - for (var _i = 0, labels_1 = labels; _i < labels_1.length; _i++) { - var labelShape = labels_1[_i]; - labelsMap[labelShape.get("id")] = labelShape; - } - var labelHeight = (0, import_util233.get)(items[0], "labelHeight", 14); - var labelOffset = Math.max((0, import_util233.get)(items[0], "offset", 0), INFLECTION_OFFSET); - (0, import_util233.each)(items, function(item) { - var label17 = (0, import_util233.get)(labelsMap, [item.id]); - if (!label17) { - return; - } - var inRight = item.x > center2.x || item.x === center2.x && item.y > center2.y; - var offsetX = !(0, import_util233.isNil)(item.offsetX) ? item.offsetX : LABEL_OFFSET_X; - var inflectionPoint = polarToCartesian(center2.x, center2.y, radius + INFLECTION_OFFSET, item.angle); - var totalOffset = labelOffset + offsetX; - item.x = center2.x + (inRight ? 1 : -1) * (radius + totalOffset); - item.y = inflectionPoint.y; - }); - var start = coordinate11.start, end2 = coordinate11.end; - var LEFT_HALF_KEY = "left"; - var RIGHT_HALF_KEY = "right"; - var seperateLabels = (0, import_util233.groupBy)(items, function(item) { - return item.x < center2.x ? LEFT_HALF_KEY : RIGHT_HALF_KEY; - }); - var totalHeight = (radius + labelOffset) * 2 + labelHeight; - (0, import_util233.each)(seperateLabels, function(half) { - var halfHeight = half.length * labelHeight; - if (halfHeight > totalHeight) { - totalHeight = Math.min(halfHeight, Math.abs(start.y - end2.y)); - } - }); - var labelsContainerRange = { - minX: start.x, - maxX: end2.x, - minY: center2.y - totalHeight / 2, - maxY: center2.y + totalHeight / 2 - }; - (0, import_util233.each)(seperateLabels, function(half, key) { - var maxLabelsCountForOneSide = totalHeight / labelHeight; - if (half.length > maxLabelsCountForOneSide) { - half.sort(function(a4, b10) { - return b10.percent - a4.percent; - }); - (0, import_util233.each)(half, function(labelItem, idx) { - if (idx > maxLabelsCountForOneSide) { - labelsMap[labelItem.id].set("visible", false); - labelItem.invisible = true; - } - }); - } - antiCollision2(half, labelHeight, labelsContainerRange); - }); - var startY = labelsContainerRange.minY; - var endY = labelsContainerRange.maxY; - (0, import_util233.each)(seperateLabels, function(half, key) { - var inRight = key === RIGHT_HALF_KEY; - (0, import_util233.each)(half, function(item) { - var label17 = (0, import_util233.get)(labelsMap, item && [item.id]); - if (!label17) { - return; - } - if (item.y < startY || item.y > endY) { - label17.set("visible", false); - return; - } - var labelContent = label17.getChildByIndex(0); - var box2 = labelContent.getCanvasBBox(); - var originalPos = { x: inRight ? box2.x : box2.maxX, y: box2.y + box2.height / 2 }; - translate3(labelContent, item.x - originalPos.x, item.y - originalPos.y); - if (item.labelLine) { - drawLabelline2(item, coordinate11, inRight); - } - }); - }); -} - -// node_modules/@antv/g2/esm/geometry/label/layout/limit-in-canvas.js -var import_util235 = __toModule(require_lib()); -function limitInCanvas(items, labels, shapes, region) { - (0, import_util235.each)(labels, function(label17) { - var regionMinX = region.minX, regionMinY = region.minY, regionMaxX = region.maxX, regionMaxY = region.maxY; - var _a6 = label17.getCanvasBBox(), minX = _a6.minX, minY = _a6.minY, maxX = _a6.maxX, maxY2 = _a6.maxY, x6 = _a6.x, y5 = _a6.y, width2 = _a6.width, height = _a6.height; - var finalX = x6; - var finalY = y5; - if (minX < regionMinX || maxX < regionMinX) { - finalX = regionMinX; - } - if (minY < regionMinY || maxY2 < regionMinY) { - finalY = regionMinY; - } - if (minX > regionMaxX) { - finalX = regionMaxX - width2; - } else if (maxX > regionMaxX) { - finalX = finalX - (maxX - regionMaxX); - } - if (minY > regionMaxY) { - finalY = regionMaxY - height; - } else if (maxY2 > regionMaxY) { - finalY = finalY - (maxY2 - regionMaxY); - } - if (finalX !== x6 || finalY !== y5) { - translate3(label17, finalX - x6, finalY - y5); - } - }); -} - -// node_modules/@antv/g2/esm/geometry/label/layout/limit-in-shape.js -var import_util236 = __toModule(require_lib()); -function limitInShape(items, labels, shapes, region) { - (0, import_util236.each)(labels, function(label17, index2) { - var labelBBox = label17.getCanvasBBox(); - var shapeBBox = shapes[index2].getBBox(); - if (labelBBox.minX < shapeBBox.minX || labelBBox.minY < shapeBBox.minY || labelBBox.maxX > shapeBBox.maxX || labelBBox.maxY > shapeBBox.maxY) { - label17.remove(true); - } - }); -} - -// node_modules/@antv/g2/esm/geometry/label/layout/overlap.js -var import_util237 = __toModule(require_lib()); -var MAX_TIMES = 100; -var Greedy = function() { - function Greedy2(cfg) { - if (cfg === void 0) { - cfg = {}; - } - this.bitmap = {}; - var _a6 = cfg.xGap, xGap = _a6 === void 0 ? 1 : _a6, _b = cfg.yGap, yGap = _b === void 0 ? 8 : _b; - this.xGap = xGap; - this.yGap = yGap; - } - Greedy2.prototype.hasGap = function(bbox) { - var hasGap = true; - var bitmap = this.bitmap; - var minX = Math.round(bbox.minX); - var maxX = Math.round(bbox.maxX); - var minY = Math.round(bbox.minY); - var maxY2 = Math.round(bbox.maxY); - for (var i4 = minX; i4 <= maxX; i4 += 1) { - if (!bitmap[i4]) { - bitmap[i4] = {}; - continue; - } - if (i4 === minX || i4 === maxX) { - for (var j4 = minY; j4 <= maxY2; j4++) { - if (bitmap[i4][j4]) { - hasGap = false; - break; - } - } - } else { - if (bitmap[i4][minY] || bitmap[i4][maxY2]) { - hasGap = false; - break; - } - } - } - return hasGap; - }; - Greedy2.prototype.fillGap = function(bbox) { - var bitmap = this.bitmap; - var minX = Math.round(bbox.minX); - var maxX = Math.round(bbox.maxX); - var minY = Math.round(bbox.minY); - var maxY2 = Math.round(bbox.maxY); - for (var i4 = minX; i4 <= maxX; i4 += 1) { - if (!bitmap[i4]) { - bitmap[i4] = {}; - } - } - for (var i4 = minX; i4 <= maxX; i4 += this.xGap) { - for (var j4 = minY; j4 <= maxY2; j4 += this.yGap) { - bitmap[i4][j4] = true; - } - bitmap[i4][maxY2] = true; - } - if (this.yGap !== 1) { - for (var i4 = minY; i4 <= maxY2; i4 += 1) { - bitmap[minX][i4] = true; - bitmap[maxX][i4] = true; - } - } - if (this.xGap !== 1) { - for (var i4 = minX; i4 <= maxX; i4 += 1) { - bitmap[i4][minY] = true; - bitmap[i4][maxY2] = true; - } - } - }; - Greedy2.prototype.destroy = function() { - this.bitmap = {}; - }; - return Greedy2; -}(); -function spiralFill(label17, greedy, maxTimes) { - if (maxTimes === void 0) { - maxTimes = MAX_TIMES; - } - var dt = -1; - var _a6 = label17.attr(), x6 = _a6.x, y5 = _a6.y; - var bbox = label17.getCanvasBBox(); - var maxDelta = Math.sqrt(bbox.width * bbox.width + bbox.height * bbox.height); - var dxdy; - var t4 = -dt; - var dx = 0; - var dy = 0; - var f3 = function(param) { - var nt = param * 0.1; - return [nt * Math.cos(nt), nt * Math.sin(nt)]; - }; - if (greedy.hasGap(bbox)) { - greedy.fillGap(bbox); - return true; - } - var canFill = false; - var times = 0; - var accessedCache = {}; - while (Math.min(Math.abs(dx), Math.abs(dy)) < maxDelta && times < maxTimes) { - dxdy = f3(t4 += dt); - dx = ~~dxdy[0]; - dy = ~~dxdy[1]; - if (!dx && !dy || accessedCache["".concat(dx, "-").concat(dy)]) { - continue; - } - label17.attr({ x: x6 + dx, y: y5 + dy }); - if (dx + dy < 0) { - label17.attr("textAlign", "right"); - } - times++; - if (greedy.hasGap(label17.getCanvasBBox())) { - greedy.fillGap(label17.getCanvasBBox()); - canFill = true; - accessedCache["".concat(dx, "-").concat(dy)] = true; - break; - } - } - return canFill; -} -function adjustLabelPosition(label17, x6, y5, index2) { - var _a6 = label17.getCanvasBBox(), width2 = _a6.width, height = _a6.height; - var attrs = { - x: x6, - y: y5, - textAlign: "center" - }; - switch (index2) { - case 0: - attrs.y -= height + 1; - attrs.x += 1; - attrs.textAlign = "left"; - break; - case 1: - attrs.y -= height + 1; - attrs.x -= 1; - attrs.textAlign = "right"; - break; - case 2: - attrs.y += height + 1; - attrs.x -= 1; - attrs.textAlign = "right"; - break; - case 3: - attrs.y += height + 1; - attrs.x += 1; - attrs.textAlign = "left"; - break; - case 5: - attrs.y -= height * 2 + 2; - break; - case 6: - attrs.y += height * 2 + 2; - break; - case 7: - attrs.x += width2 + 1; - attrs.textAlign = "left"; - break; - case 8: - attrs.x -= width2 + 1; - attrs.textAlign = "right"; - break; - default: - break; - } - label17.attr(attrs); - return label17.getCanvasBBox(); -} -function fixedOverlap(items, labels, shapes, region) { - var greedy = new Greedy(); - (0, import_util237.each)(labels, function(label17) { - var labelShape = label17.find(function(shape) { - return shape.get("type") === "text"; - }); - if (!spiralFill(labelShape, greedy)) { - label17.remove(true); - } - }); - greedy.destroy(); -} -function overlap(items, labels, shapes, region) { - var greedy = new Greedy(); - (0, import_util237.each)(labels, function(label17) { - var labelShape = label17.find(function(shape) { - return shape.get("type") === "text"; - }); - var _a6 = labelShape.attr(), x6 = _a6.x, y5 = _a6.y; - var canFill = false; - for (var i4 = 0; i4 <= 8; i4++) { - var bbox = adjustLabelPosition(labelShape, x6, y5, i4); - if (greedy.hasGap(bbox)) { - greedy.fillGap(bbox); - canFill = true; - break; - } - } - if (!canFill) { - label17.remove(true); - } - }); - greedy.destroy(); -} - -// node_modules/@antv/g2/esm/geometry/label/layout/hide-overlap.js -var import_util239 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/util/collision-detect.js -var import_util238 = __toModule(require_lib()); -var dot5 = vec2_exports.dot; -function getAxes(points) { - if (points.length > 4) { - return []; - } - var vector = function(start, end2) { - return [end2.x - start.x, end2.y - start.y]; - }; - var AB = vector(points[0], points[1]); - var BC = vector(points[1], points[2]); - return [AB, BC]; -} -function rotateAtPoint(point2, deg, origin) { - if (deg === void 0) { - deg = 0; - } - if (origin === void 0) { - origin = { x: 0, y: 0 }; - } - var x6 = point2.x, y5 = point2.y; - return { - x: (x6 - origin.x) * Math.cos(-deg) + (y5 - origin.y) * Math.sin(-deg) + origin.x, - y: (origin.x - x6) * Math.sin(-deg) + (y5 - origin.y) * Math.cos(-deg) + origin.y - }; -} -function getRectPoints2(box2) { - var points = [ - { x: box2.x, y: box2.y }, - { x: box2.x + box2.width, y: box2.y }, - { x: box2.x + box2.width, y: box2.y + box2.height }, - { x: box2.x, y: box2.y + box2.height } - ]; - var rotation = box2.rotation; - if (rotation) { - return [ - rotateAtPoint(points[0], rotation, points[0]), - rotateAtPoint(points[1], rotation, points[0]), - rotateAtPoint(points[2], rotation, points[0]), - rotateAtPoint(points[3], rotation, points[0]) - ]; - } - return points; -} -function getProjection(points, axis22) { - if (points.length > 4) { - return { min: 0, max: 0 }; - } - var scalars = []; - points.forEach(function(point2) { - scalars.push(dot5([point2.x, point2.y], axis22)); - }); - return { min: Math.min.apply(Math, scalars), max: Math.max.apply(Math, scalars) }; -} -function isProjectionOverlap(projection1, projection2) { - return projection1.max > projection2.min && projection1.min < projection2.max; -} -function isValidNumber(d3) { - return (0, import_util238.isNumber)(d3) && !Number.isNaN(d3) && d3 !== Infinity && d3 !== -Infinity; -} -function isValidBox(box2) { - return Object.values(box2).every(isValidNumber); -} -function isIntersectRect(box1, box2, margin) { - if (margin === void 0) { - margin = 0; - } - return !(box2.x > box1.x + box1.width + margin || box2.x + box2.width < box1.x - margin || box2.y > box1.y + box1.height + margin || box2.y + box2.height < box1.y - margin); -} -function isIntersect(box1, box2) { - if (!isValidBox(box1) || !isValidBox(box2)) - return false; - if (!box1.rotation && !box2.rotation) { - return isIntersectRect(box1, box2); - } - var rect1Points = getRectPoints2(box1); - var rect2Points = getRectPoints2(box2); - var axes = __spreadArray(__spreadArray([], getAxes(rect1Points), true), getAxes(rect2Points), true); - for (var i4 = 0; i4 < axes.length; i4++) { - var axis22 = axes[i4]; - var projection1 = getProjection(rect1Points, axis22); - var projection2 = getProjection(rect2Points, axis22); - if (!isProjectionOverlap(projection1, projection2)) - return false; - } - return true; -} - -// node_modules/@antv/g2/esm/geometry/label/layout/hide-overlap.js -function hideOverlap(items, labels, shapes, region) { - for (var i4 = 0; i4 < labels.length; i4++) { - var label1 = labels[i4]; - if (labels[i4].get("visible")) { - for (var j4 = i4 + 1; j4 < labels.length; j4++) { - var label22 = labels[j4]; - if (label1 && label22 && label1 !== label22 && label22.get("visible")) { - var box1 = getlLabelBackgroundInfo(label1, items[i4], (0, import_util239.get)(items[i4], "background.padding")); - var box2 = getlLabelBackgroundInfo(label22, items[j4], (0, import_util239.get)(items[j4], "background.padding")); - if (isIntersect(box1, box2)) { - labels[j4].set("visible", false); - } - } - } - } - } -} - -// node_modules/@antv/g2/esm/util/color.js -var preset = { - "#5B8FF9": true -}; -var isContrastColorWhite = function(color4) { - var rgb2 = esm_default2.toRGB(color4).toUpperCase(); - if (preset[rgb2]) { - return preset[rgb2]; - } - var _a6 = esm_default2.rgb2arr(rgb2), r4 = _a6[0], g4 = _a6[1], b10 = _a6[2]; - var isDark = (r4 * 299 + g4 * 587 + b10 * 114) / 1e3 < 128; - return isDark; -}; - -// node_modules/@antv/g2/esm/geometry/label/layout/adjust-color.js -function adjustColor(items, labels, shapes) { - if (shapes.length === 0) { - return; - } - var element = shapes[0].get("element"); - var theme4 = element.geometry.theme; - var _a6 = theme4.labels || {}, fillColorLight = _a6.fillColorLight, fillColorDark = _a6.fillColorDark; - shapes.forEach(function(shape, index2) { - var label17 = labels[index2]; - var textShape = label17.find(function(el) { - return el.get("type") === "text"; - }); - var shapeBBox = BBox.fromObject(shape.getBBox()); - var textBBox = BBox.fromObject(textShape.getCanvasBBox()); - var overflow = !shapeBBox.contains(textBBox); - var bgColor = shape.attr("fill"); - var fillWhite = isContrastColorWhite(bgColor); - if (!overflow) { - if (fillWhite) { - if (fillColorLight) { - textShape.attr("fill", fillColorLight); - } - } else { - if (fillColorDark) { - textShape.attr("fill", fillColorDark); - } - } - } else { - textShape.attr(theme4.overflowLabels.style); - } - }); -} - -// node_modules/@antv/g2/esm/geometry/label/layout/interval/adjust-position.js -function shouldInShapeSingle(geometry35, label17, shape) { - var coordinate11 = geometry35.coordinate; - var textShape = findLabelTextShape(label17); - var textBBox = BBox.fromObject(textShape.getCanvasBBox()); - var shapeBBox = BBox.fromObject(shape.getBBox()); - return coordinate11.isTransposed ? shapeBBox.height >= textBBox.height : shapeBBox.width >= textBBox.width; -} -function shouldInShape(geometry35, labels, shapes) { - var isStack = !!geometry35.getAdjust("stack"); - return isStack || labels.every(function(label17, index2) { - var shape = shapes[index2]; - return shouldInShapeSingle(geometry35, label17, shape); - }); -} -function moveInShape(geometry35, label17, shape) { - var coordinate11 = geometry35.coordinate; - var shapeBBox = BBox.fromObject(shape.getBBox()); - var textShape = findLabelTextShape(label17); - if (coordinate11.isTransposed) { - textShape.attr({ - x: shapeBBox.minX + shapeBBox.width / 2, - textAlign: "center" - }); - } else { - textShape.attr({ - y: shapeBBox.minY + shapeBBox.height / 2, - textBaseline: "middle" - }); - } -} -function intervalAdjustPosition(items, labels, shapes) { - var _a6; - if (shapes.length === 0) { - return; - } - var element = (_a6 = shapes[0]) === null || _a6 === void 0 ? void 0 : _a6.get("element"); - var geometry35 = element === null || element === void 0 ? void 0 : element.geometry; - if (!geometry35 || geometry35.type !== "interval") { - return; - } - var inShape = shouldInShape(geometry35, labels, shapes); - if (inShape) { - shapes.forEach(function(shape, index2) { - var label17 = labels[index2]; - moveInShape(geometry35, label17, shape); - }); - } -} - -// node_modules/@antv/g2/esm/geometry/label/layout/interval/hide-overlap.js -var import_util242 = __toModule(require_lib()); -function filterLabel(labels) { - var MAX_CNT = 500; - var filteredLabels = []; - var pages = Math.max(Math.floor(labels.length / MAX_CNT), 1); - (0, import_util242.each)(labels, function(label17, idx) { - if (idx % pages === 0) { - filteredLabels.push(label17); - } else { - label17.set("visible", false); - } - }); - return filteredLabels; -} -function intervalHideOverlap(items, labels, shapes) { - var _a6; - if (shapes.length === 0) { - return; - } - var element = (_a6 = shapes[0]) === null || _a6 === void 0 ? void 0 : _a6.get("element"); - var geometry35 = element === null || element === void 0 ? void 0 : element.geometry; - if (!geometry35 || geometry35.type !== "interval") { - return; - } - var filteredLabels = filterLabel(labels); - var xField = geometry35.getXYFields()[0]; - var dones = []; - var todo = []; - var groupedLabels = (0, import_util242.groupBy)(filteredLabels, function(label17) { - return label17.get("data")[xField]; - }); - var xValues = (0, import_util242.uniq)((0, import_util242.map)(filteredLabels, function(label17) { - return label17.get("data")[xField]; - })); - var xValue; - filteredLabels.forEach(function(label17) { - label17.set("visible", true); - }); - var addCurrentGroup = function(curItems) { - if (curItems) { - if (curItems.length) { - todo.push(curItems.pop()); - } - todo.push.apply(todo, curItems); - } - }; - if ((0, import_util242.size)(xValues) > 0) { - xValue = xValues.shift(); - addCurrentGroup(groupedLabels[xValue]); - } - if ((0, import_util242.size)(xValues) > 0) { - xValue = xValues.pop(); - addCurrentGroup(groupedLabels[xValue]); - } - (0, import_util242.each)(xValues.reverse(), function(val) { - addCurrentGroup(groupedLabels[val]); - }); - while (todo.length > 0) { - var cur = todo.shift(); - if (cur.get("visible")) { - if (checkShapeOverlap(cur, dones)) { - cur.set("visible", false); - } else { - dones.push(cur); - } - } - } -} - -// node_modules/@antv/g2/esm/geometry/label/layout/point/adjust-position.js -var import_util244 = __toModule(require_lib()); -function sortLabels(geometry35, labels) { - var yField = geometry35.getXYFields()[1]; - var result = []; - var sortedLabels = labels.sort(function(left2, right2) { - return left2.get("data")[yField] - left2.get("data")[yField]; - }); - if (sortedLabels.length > 0) { - result.push(sortedLabels.shift()); - } - if (sortedLabels.length > 0) { - result.push(sortedLabels.pop()); - } - result.push.apply(result, sortedLabels); - return result; -} -function hasSome(dones, current, compare4) { - return dones.some(function(done) { - return compare4(done, current); - }); -} -function getOverlapArea2(a4, b10, margin) { - if (margin === void 0) { - margin = 0; - } - var xOverlap = Math.max(0, Math.min(a4.x + a4.width + margin, b10.x + b10.width + margin) - Math.max(a4.x - margin, b10.x - margin)); - var yOverlap = Math.max(0, Math.min(a4.y + a4.height + margin, b10.y + b10.height + margin) - Math.max(a4.y - margin, b10.y - margin)); - return xOverlap * yOverlap; -} -function checkShapeOverlap2(dones, current) { - return hasSome(dones, current, function(left2, right2) { - var leftText = findLabelTextShape(left2); - var rightText = findLabelTextShape(right2); - return getOverlapArea2(leftText.getCanvasBBox(), rightText.getCanvasBBox(), 2) > 0; - }); -} -function pointAdjustPosition(items, labels, shapes, region, cfg) { - var _a6, _b; - if (shapes.length === 0) { - return; - } - var element = (_a6 = shapes[0]) === null || _a6 === void 0 ? void 0 : _a6.get("element"); - var geometry35 = element === null || element === void 0 ? void 0 : element.geometry; - if (!geometry35 || geometry35.type !== "point") { - return; - } - var _c = geometry35.getXYFields(), xField = _c[0], yField = _c[1]; - var groupedLabels = (0, import_util244.groupBy)(labels, function(label17) { - return label17.get("data")[xField]; - }); - var dones = []; - var offset = cfg && cfg.offset || ((_b = items[0]) === null || _b === void 0 ? void 0 : _b.offset) || 12; - (0, import_util244.map)((0, import_util244.keys)(groupedLabels).reverse(), function(xValue) { - var sortedCollections = sortLabels(geometry35, groupedLabels[xValue]); - while (sortedCollections.length) { - var current = sortedCollections.shift(); - var textShape = findLabelTextShape(current); - if (hasSome(dones, current, function(left2, right2) { - return left2.get("data")[xField] === right2.get("data")[xField] && left2.get("data")[yField] === right2.get("data")[yField]; - })) { - textShape.set("visible", false); - continue; - } - var upFail = checkShapeOverlap2(dones, current); - var downFail = false; - if (upFail) { - textShape.attr("y", textShape.attr("y") + 2 * offset); - downFail = checkShapeOverlap2(dones, current); - } - if (downFail) { - textShape.set("visible", false); - continue; - } - dones.push(current); - } - }); -} - -// node_modules/@antv/g2/esm/geometry/label/layout/path/adjust-position.js -var import_util246 = __toModule(require_lib()); -function sortLabels2(geometry35, labels) { - var yField = geometry35.getXYFields()[1]; - var result = []; - var sortedLabels = labels.sort(function(left2, right2) { - return left2.get("data")[yField] - left2.get("data")[yField]; - }); - if (sortedLabels.length > 0) { - result.push(sortedLabels.shift()); - } - if (sortedLabels.length > 0) { - result.push(sortedLabels.pop()); - } - result.push.apply(result, sortedLabels); - return result; -} -function hasSome2(dones, current, compare4) { - return dones.some(function(done) { - return compare4(done, current); - }); -} -function getOverlapArea3(a4, b10, margin) { - if (margin === void 0) { - margin = 0; - } - var xOverlap = Math.max(0, Math.min(a4.x + a4.width + margin, b10.x + b10.width + margin) - Math.max(a4.x - margin, b10.x - margin)); - var yOverlap = Math.max(0, Math.min(a4.y + a4.height + margin, b10.y + b10.height + margin) - Math.max(a4.y - margin, b10.y - margin)); - return xOverlap * yOverlap; -} -function checkShapeOverlap3(dones, current) { - return hasSome2(dones, current, function(left2, right2) { - var leftText = findLabelTextShape(left2); - var rightText = findLabelTextShape(right2); - return getOverlapArea3(leftText.getCanvasBBox(), rightText.getCanvasBBox(), 2) > 0; - }); -} -function pathAdjustPosition(items, labels, shapes, region, cfg) { - var _a6, _b; - if (shapes.length === 0) { - return; - } - var element = (_a6 = shapes[0]) === null || _a6 === void 0 ? void 0 : _a6.get("element"); - var geometry35 = element === null || element === void 0 ? void 0 : element.geometry; - if (!geometry35 || ["path", "line", "area"].indexOf(geometry35.type) < 0) { - return; - } - var _c = geometry35.getXYFields(), xField = _c[0], yField = _c[1]; - var groupedLabels = (0, import_util246.groupBy)(labels, function(label17) { - return label17.get("data")[xField]; - }); - var dones = []; - var offset = cfg && cfg.offset || ((_b = items[0]) === null || _b === void 0 ? void 0 : _b.offset) || 12; - (0, import_util246.map)((0, import_util246.keys)(groupedLabels).reverse(), function(xValue) { - var sortedCollections = sortLabels2(geometry35, groupedLabels[xValue]); - while (sortedCollections.length) { - var current = sortedCollections.shift(); - var textShape = findLabelTextShape(current); - if (hasSome2(dones, current, function(left2, right2) { - return left2.get("data")[xField] === right2.get("data")[xField] && left2.get("data")[yField] === right2.get("data")[yField]; - })) { - textShape.set("visible", false); - continue; - } - var upFail = checkShapeOverlap3(dones, current); - var downFail = false; - if (upFail) { - textShape.attr("y", textShape.attr("y") + 2 * offset); - downFail = checkShapeOverlap3(dones, current); - } - if (downFail) { - textShape.set("visible", false); - continue; - } - dones.push(current); - } - }); -} - -// node_modules/@antv/g2/esm/geometry/label/layout/limit-in-plot.js -var import_util249 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/util/text.js -var import_util248 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/util/context.js -var ctx; -function getCanvasContext() { - if (!ctx) { - ctx = document.createElement("canvas").getContext("2d"); - } - return ctx; -} - -// node_modules/@antv/g2/esm/util/text.js -var measureTextWidth = (0, import_util248.memoize)(function(text, font) { - if (font === void 0) { - font = {}; - } - var fontSize = font.fontSize, fontFamily = font.fontFamily, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant; - var ctx3 = getCanvasContext(); - ctx3.font = [fontStyle, fontVariant, fontWeight, "".concat(fontSize, "px"), fontFamily].join(" "); - return ctx3.measureText((0, import_util248.isString)(text) ? text : "").width; -}, function(text, font) { - if (font === void 0) { - font = {}; - } - return __spreadArray([text], (0, import_util248.values)(font), true).join(""); -}); -var getEllipsisText2 = function(text, maxWidth, font) { - var STEP = 16; - var DOT_WIDTH = measureTextWidth("...", font); - var leftText; - if (!(0, import_util248.isString)(text)) { - leftText = (0, import_util248.toString)(text); - } else { - leftText = text; - } - var leftWidth = maxWidth; - var r4 = []; - var currentText; - var currentWidth; - if (measureTextWidth(text, font) <= maxWidth) { - return text; - } - while (true) { - currentText = leftText.substr(0, STEP); - currentWidth = measureTextWidth(currentText, font); - if (currentWidth + DOT_WIDTH > leftWidth) { - if (currentWidth > leftWidth) { - break; - } - } - r4.push(currentText); - leftWidth -= currentWidth; - leftText = leftText.substr(STEP); - if (!leftText) { - return r4.join(""); - } - } - while (true) { - currentText = leftText.substr(0, 1); - currentWidth = measureTextWidth(currentText, font); - if (currentWidth + DOT_WIDTH > leftWidth) { - break; - } - r4.push(currentText); - leftWidth -= currentWidth; - leftText = leftText.substr(1); - if (!leftText) { - return r4.join(""); - } - } - return "".concat(r4.join(""), "..."); -}; - -// node_modules/@antv/g2/esm/geometry/label/layout/limit-in-plot.js -function limitInPlot(items, labels, shapes, region, cfg) { - if (labels.length <= 0) { - return; - } - var direction3 = (cfg === null || cfg === void 0 ? void 0 : cfg.direction) || ["top", "right", "bottom", "left"]; - var action = (cfg === null || cfg === void 0 ? void 0 : cfg.action) || "translate"; - var margin = (cfg === null || cfg === void 0 ? void 0 : cfg.margin) || 0; - var coordinate11 = labels[0].get("coordinate"); - if (!coordinate11) { - return; - } - var _a6 = getCoordinateBBox(coordinate11, margin), regionMinX = _a6.minX, regionMinY = _a6.minY, regionMaxX = _a6.maxX, regionMaxY = _a6.maxY; - (0, import_util249.each)(labels, function(label17) { - var _a7 = label17.getCanvasBBox(), minX = _a7.minX, minY = _a7.minY, maxX = _a7.maxX, maxY2 = _a7.maxY, x6 = _a7.x, y5 = _a7.y, width2 = _a7.width, height = _a7.height; - var finalX = x6; - var finalY = y5; - if (direction3.indexOf("left") >= 0 && (minX < regionMinX || maxX < regionMinX)) { - finalX = regionMinX; - } - if (direction3.indexOf("top") >= 0 && (minY < regionMinY || maxY2 < regionMinY)) { - finalY = regionMinY; - } - if (direction3.indexOf("right") >= 0) { - if (minX > regionMaxX) { - finalX = regionMaxX - width2; - } else if (maxX > regionMaxX) { - finalX = finalX - (maxX - regionMaxX); - } - } - if (direction3.indexOf("bottom") >= 0) { - if (minY > regionMaxY) { - finalY = regionMaxY - height; - } else if (maxY2 > regionMaxY) { - finalY = finalY - (maxY2 - regionMaxY); - } - } - if (finalX !== x6 || finalY !== y5) { - var translateX_1 = finalX - x6; - if (action === "translate") { - translate3(label17, translateX_1, finalY - y5); - } else if (action === "ellipsis") { - var textShapes = label17.findAll(function(shape) { - return shape.get("type") === "text"; - }); - textShapes.forEach(function(textShape) { - var style = (0, import_util249.pick)(textShape.attr(), ["fontSize", "fontFamily", "fontWeight", "fontStyle", "fontVariant"]); - var textBox = textShape.getCanvasBBox(); - var text = getEllipsisText2(textShape.attr("text"), textBox.width - Math.abs(translateX_1), style); - textShape.attr("text", text); - }); - } else { - label17.hide(); - } - } - }); -} - -// node_modules/@antv/g2/esm/animate/animation/fade.js -var import_util250 = __toModule(require_lib()); -function fadeIn(shape, animateCfg, cfg) { - var endState = { - fillOpacity: (0, import_util250.isNil)(shape.attr("fillOpacity")) ? 1 : shape.attr("fillOpacity"), - strokeOpacity: (0, import_util250.isNil)(shape.attr("strokeOpacity")) ? 1 : shape.attr("strokeOpacity"), - opacity: (0, import_util250.isNil)(shape.attr("opacity")) ? 1 : shape.attr("opacity") - }; - shape.attr({ - fillOpacity: 0, - strokeOpacity: 0, - opacity: 0 - }); - shape.animate(endState, animateCfg); -} -function fadeOut(shape, animateCfg, cfg) { - var endState = { - fillOpacity: 0, - strokeOpacity: 0, - opacity: 0 - }; - var easing = animateCfg.easing, duration = animateCfg.duration, delay = animateCfg.delay; - shape.animate(endState, duration, easing, function() { - shape.remove(true); - }, delay); -} - -// node_modules/@antv/g2/esm/animate/animation/util.js -function transformShape(shape, vector, direct) { - var scaledMatrix; - var x6 = vector[0], y5 = vector[1]; - shape.applyToMatrix([x6, y5, 1]); - if (direct === "x") { - shape.setMatrix(ext_exports.transform(shape.getMatrix(), [ - ["t", -x6, -y5], - ["s", 0.01, 1], - ["t", x6, y5] - ])); - scaledMatrix = ext_exports.transform(shape.getMatrix(), [ - ["t", -x6, -y5], - ["s", 100, 1], - ["t", x6, y5] - ]); - } else if (direct === "y") { - shape.setMatrix(ext_exports.transform(shape.getMatrix(), [ - ["t", -x6, -y5], - ["s", 1, 0.01], - ["t", x6, y5] - ])); - scaledMatrix = ext_exports.transform(shape.getMatrix(), [ - ["t", -x6, -y5], - ["s", 1, 100], - ["t", x6, y5] - ]); - } else if (direct === "xy") { - shape.setMatrix(ext_exports.transform(shape.getMatrix(), [ - ["t", -x6, -y5], - ["s", 0.01, 0.01], - ["t", x6, y5] - ])); - scaledMatrix = ext_exports.transform(shape.getMatrix(), [ - ["t", -x6, -y5], - ["s", 100, 100], - ["t", x6, y5] - ]); - } - return scaledMatrix; -} -function doScaleAnimate(element, animateCfg, coordinate11, yMinPoint, type2) { - var start = coordinate11.start, end2 = coordinate11.end; - var width2 = coordinate11.getWidth(); - var height = coordinate11.getHeight(); - var x6; - var y5; - if (type2 === "y") { - x6 = start.x + width2 / 2; - y5 = yMinPoint.y < start.y ? yMinPoint.y : start.y; - } else if (type2 === "x") { - x6 = yMinPoint.x > start.x ? yMinPoint.x : start.x; - y5 = start.y + height / 2; - } else if (type2 === "xy") { - if (coordinate11.isPolar) { - x6 = coordinate11.getCenter().x; - y5 = coordinate11.getCenter().y; - } else { - x6 = (start.x + end2.x) / 2; - y5 = (start.y + end2.y) / 2; - } - } - var endMatrix = transformShape(element, [x6, y5], type2); - element.animate({ - matrix: endMatrix - }, animateCfg); -} - -// node_modules/@antv/g2/esm/animate/animation/grow-in.js -function growInX(element, animateCfg, cfg) { - var coordinate11 = cfg.coordinate, minYPoint = cfg.minYPoint; - doScaleAnimate(element, animateCfg, coordinate11, minYPoint, "x"); -} -function growInY(element, animateCfg, cfg) { - var coordinate11 = cfg.coordinate, minYPoint = cfg.minYPoint; - doScaleAnimate(element, animateCfg, coordinate11, minYPoint, "y"); -} -function growInXY(element, animateCfg, cfg) { - var coordinate11 = cfg.coordinate, minYPoint = cfg.minYPoint; - doScaleAnimate(element, animateCfg, coordinate11, minYPoint, "xy"); -} - -// node_modules/@antv/g2/esm/animate/animation/path-in.js -function pathIn(element, animateCfg, cfg) { - var length5 = element.getTotalLength(); - element.attr("lineDash", [length5]); - element.animate(function(ratio) { - return { - lineDashOffset: (1 - ratio) * length5 - }; - }, animateCfg); -} - -// node_modules/@antv/g2/esm/animate/animation/position-update.js -function positionUpdate(shape, animateCfg, cfg) { - var toAttrs = cfg.toAttrs; - var x6 = toAttrs.x; - var y5 = toAttrs.y; - delete toAttrs.x; - delete toAttrs.y; - shape.attr(toAttrs); - shape.animate({ - x: x6, - y: y5 - }, animateCfg); -} - -// node_modules/@antv/g2/esm/animate/animation/scale-in.js -function scaleInX(shape, animateCfg, cfg) { - var box2 = shape.getBBox(); - var mappingData = shape.get("origin").mappingData; - var points = mappingData.points; - var x6 = points[0].y - points[1].y > 0 ? box2.maxX : box2.minX; - var y5 = (box2.minY + box2.maxY) / 2; - shape.applyToMatrix([x6, y5, 1]); - var matrix = ext_exports.transform(shape.getMatrix(), [ - ["t", -x6, -y5], - ["s", 0.01, 1], - ["t", x6, y5] - ]); - shape.setMatrix(matrix); - shape.animate({ - matrix: ext_exports.transform(shape.getMatrix(), [ - ["t", -x6, -y5], - ["s", 100, 1], - ["t", x6, y5] - ]) - }, animateCfg); -} -function scaleInY(shape, animateCfg, cfg) { - var box2 = shape.getBBox(); - var mappingData = shape.get("origin").mappingData; - var x6 = (box2.minX + box2.maxX) / 2; - var points = mappingData.points; - var y5 = points[0].y - points[1].y <= 0 ? box2.maxY : box2.minY; - shape.applyToMatrix([x6, y5, 1]); - var matrix = ext_exports.transform(shape.getMatrix(), [ - ["t", -x6, -y5], - ["s", 1, 0.01], - ["t", x6, y5] - ]); - shape.setMatrix(matrix); - shape.animate({ - matrix: ext_exports.transform(shape.getMatrix(), [ - ["t", -x6, -y5], - ["s", 1, 100], - ["t", x6, y5] - ]) - }, animateCfg); -} - -// node_modules/@antv/g2/esm/animate/animation/sector-path-update.js -var import_util252 = __toModule(require_lib()); -function getAngle4(startPoint, arcPath) { - var _a6; - var _b = getArcParams2(startPoint, arcPath), startAngle = _b.startAngle, endAngle = _b.endAngle; - if (!(0, import_util252.isNumberEqual)(startAngle, -Math.PI * 0.5) && startAngle < -Math.PI * 0.5) { - startAngle += Math.PI * 2; - } - if (!(0, import_util252.isNumberEqual)(endAngle, -Math.PI * 0.5) && endAngle < -Math.PI * 0.5) { - endAngle += Math.PI * 2; - } - if (arcPath[5] === 0) { - _a6 = [endAngle, startAngle], startAngle = _a6[0], endAngle = _a6[1]; - } - if ((0, import_util252.isNumberEqual)(startAngle, Math.PI * 1.5)) { - startAngle = Math.PI * -0.5; - } - if ((0, import_util252.isNumberEqual)(endAngle, Math.PI * -0.5)) { - endAngle = Math.PI * 1.5; - } - return { - startAngle, - endAngle - }; -} -function getArcStartPoint(path) { - var startPoint; - if (path[0] === "M" || path[0] === "L") { - startPoint = [path[1], path[2]]; - } else if (path[0] === "a" || path[0] === "A" || path[0] === "C") { - startPoint = [path[path.length - 2], path[path.length - 1]]; - } - return startPoint; -} -function getArcInfo(path) { - var _a6; - var startAngle; - var endAngle; - var arcPaths = path.filter(function(command) { - return command[0] === "A" || command[0] === "a"; - }); - if (arcPaths.length === 0) { - return { - startAngle: 0, - endAngle: 0, - radius: 0, - innerRadius: 0 - }; - } - var firstArcPathCommand = arcPaths[0]; - var lastArcPathCommand = arcPaths.length > 1 ? arcPaths[1] : arcPaths[0]; - var firstIndex = path.indexOf(firstArcPathCommand); - var lastIndex = path.indexOf(lastArcPathCommand); - var firstStartPoint = getArcStartPoint(path[firstIndex - 1]); - var lastStartPoint = getArcStartPoint(path[lastIndex - 1]); - var _b = getAngle4(firstStartPoint, firstArcPathCommand), firstStartAngle = _b.startAngle, firstEndAngle = _b.endAngle; - var _c = getAngle4(lastStartPoint, lastArcPathCommand), lastStartAngle = _c.startAngle, lastEndAngle = _c.endAngle; - if ((0, import_util252.isNumberEqual)(firstStartAngle, lastStartAngle) && (0, import_util252.isNumberEqual)(firstEndAngle, lastEndAngle)) { - startAngle = firstStartAngle; - endAngle = firstEndAngle; - } else { - startAngle = Math.min(firstStartAngle, lastStartAngle); - endAngle = Math.max(firstEndAngle, lastEndAngle); - } - var radius = firstArcPathCommand[1]; - var innerRadius = arcPaths[arcPaths.length - 1][1]; - if (radius < innerRadius) { - _a6 = [innerRadius, radius], radius = _a6[0], innerRadius = _a6[1]; - } else if (radius === innerRadius) { - innerRadius = 0; - } - return { - startAngle, - endAngle, - radius, - innerRadius - }; -} -function sectorPathUpdate(shape, animateCfg, cfg) { - var toAttrs = cfg.toAttrs, coordinate11 = cfg.coordinate; - var path = toAttrs.path || []; - var pathCommands = path.map(function(command) { - return command[0]; - }); - if (path.length < 1) - return; - var _a6 = getArcInfo(path), curStartAngle = _a6.startAngle, curEndAngle = _a6.endAngle, radius = _a6.radius, innerRadius = _a6.innerRadius; - var _b = getArcInfo(shape.attr("path")), preStartAngle = _b.startAngle, preEndAngle = _b.endAngle; - var center2 = coordinate11.getCenter(); - var diffStartAngle = curStartAngle - preStartAngle; - var diffEndAngle = curEndAngle - preEndAngle; - if (diffStartAngle === 0 && diffEndAngle === 0) { - shape.attr("path", path); - return; - } - shape.animate(function(ratio) { - var onFrameStartAngle = preStartAngle + ratio * diffStartAngle; - var onFrameEndAngle = preEndAngle + ratio * diffEndAngle; - return __assign(__assign({}, toAttrs), { path: (0, import_util252.isEqual)(pathCommands, ["M", "A", "A", "Z"]) ? getArcPath(center2.x, center2.y, radius, onFrameStartAngle, onFrameEndAngle) : getSectorPath(center2.x, center2.y, radius, onFrameStartAngle, onFrameEndAngle, innerRadius) }); - }, __assign(__assign({}, animateCfg), { callback: function() { - shape.attr("path", path); - } })); -} - -// node_modules/@antv/g2/esm/animate/animation/wave-in.js -function waveIn(element, animateCfg, cfg) { - var _a6 = getCoordinateClipCfg(cfg.coordinate, 20), type2 = _a6.type, startState = _a6.startState, endState = _a6.endState; - var clipShape = element.setClip({ - type: type2, - attrs: startState - }); - clipShape.animate(endState, __assign(__assign({}, animateCfg), { callback: function() { - if (element && !element.get("destroyed")) { - element.set("clipShape", null); - } - clipShape.remove(true); - } })); -} - -// node_modules/@antv/g2/esm/animate/animation/zoom.js -var import_util253 = __toModule(require_lib()); -function doShapeZoom(shape, animateCfg, type2) { - if (shape.isGroup()) { - (0, import_util253.each)(shape.getChildren(), function(child) { - doShapeZoom(child, animateCfg, type2); - }); - } else { - var bbox = shape.getBBox(); - var x6 = (bbox.minX + bbox.maxX) / 2; - var y5 = (bbox.minY + bbox.maxY) / 2; - shape.applyToMatrix([x6, y5, 1]); - if (type2 === "zoomIn") { - var matrix = ext_exports.transform(shape.getMatrix(), [ - ["t", -x6, -y5], - ["s", 0.01, 0.01], - ["t", x6, y5] - ]); - shape.setMatrix(matrix); - shape.animate({ - matrix: ext_exports.transform(shape.getMatrix(), [ - ["t", -x6, -y5], - ["s", 100, 100], - ["t", x6, y5] - ]) - }, animateCfg); - } else { - shape.animate({ - matrix: ext_exports.transform(shape.getMatrix(), [ - ["t", -x6, -y5], - ["s", 0.01, 0.01], - ["t", x6, y5] - ]) - }, __assign(__assign({}, animateCfg), { callback: function() { - shape.remove(true); - } })); - } - } -} -function zoomIn(shape, animateCfg, cfg) { - doShapeZoom(shape, animateCfg, "zoomIn"); -} -function zoomOut(shape, animateCfg, cfg) { - doShapeZoom(shape, animateCfg, "zoomOut"); -} - -// node_modules/@antv/g2/esm/facet/circle.js -var import_util254 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/util/facet.js -function getFactTitleConfig(direction3) { - if ([DIRECTION.TOP, DIRECTION.BOTTOM].includes(direction3)) { - return { - offsetX: 0, - offsetY: direction3 === DIRECTION.TOP ? -8 : 8, - style: { - textAlign: "center", - textBaseline: direction3 === DIRECTION.TOP ? "bottom" : "top" - } - }; - } - if ([DIRECTION.LEFT, DIRECTION.RIGHT].includes(direction3)) { - return { - offsetX: direction3 === DIRECTION.LEFT ? -8 : 8, - offsetY: 0, - style: { - textAlign: direction3 === DIRECTION.LEFT ? "right" : "left", - textBaseline: "middle", - rotate: Math.PI / 2 - } - }; - } - return {}; -} -function getAnglePoint(center2, r4, angle3) { - return { - x: center2.x + r4 * Math.cos(angle3), - y: center2.y + r4 * Math.sin(angle3) - }; -} - -// node_modules/@antv/g2/esm/facet/circle.js -var Circle5 = function(_super) { - __extends(Circle6, _super); - function Circle6() { - return _super !== null && _super.apply(this, arguments) || this; - } - Circle6.prototype.getDefaultCfg = function() { - return (0, import_util254.deepMix)({}, _super.prototype.getDefaultCfg.call(this), { - type: "circle", - showTitle: true, - title: _super.prototype.getDefaultTitleCfg.call(this) - }); - }; - Circle6.prototype.render = function() { - _super.prototype.render.call(this); - if (this.cfg.showTitle) { - this.renderTitle(); - } - }; - Circle6.prototype.getRegion = function(count2, index2) { - var r4 = 1 / 2; - var center2 = { x: 0.5, y: 0.5 }; - var avgAngle = Math.PI * 2 / count2; - var angle3 = -1 * Math.PI / 2 + avgAngle * index2; - var facetR = r4 / (1 + 1 / Math.sin(avgAngle / 2)); - var middle = getAnglePoint(center2, r4 - facetR, angle3); - var startAngle = Math.PI * 5 / 4; - var endAngle = Math.PI * 1 / 4; - return { - start: getAnglePoint(middle, facetR, startAngle), - end: getAnglePoint(middle, facetR, endAngle) - }; - }; - Circle6.prototype.afterEachView = function(view, facet) { - this.processAxis(view, facet); - }; - Circle6.prototype.beforeEachView = function(view, facet) { - }; - Circle6.prototype.generateFacets = function(data3) { - var _this = this; - var _a6 = this.cfg, fields = _a6.fields, type2 = _a6.type; - var field6 = fields[0]; - if (!field6) { - throw new Error("No `fields` specified!"); - } - var values4 = this.getFieldValues(data3, field6); - var count2 = values4.length; - var rst = []; - values4.forEach(function(value2, index2) { - var conditions = [{ field: field6, value: value2, values: values4 }]; - var facetData = (0, import_util254.filter)(data3, _this.getFacetDataFilter(conditions)); - var facet = { - type: type2, - data: facetData, - region: _this.getRegion(count2, index2), - columnValue: value2, - columnField: field6, - columnIndex: index2, - columnValuesLength: count2, - rowValue: null, - rowField: null, - rowIndex: 0, - rowValuesLength: 1 - }; - rst.push(facet); - }); - return rst; - }; - Circle6.prototype.getXAxisOption = function(x6, axes, option, facet) { - return option; - }; - Circle6.prototype.getYAxisOption = function(y5, axes, option, facet) { - return option; - }; - Circle6.prototype.renderTitle = function() { - var _this = this; - (0, import_util254.each)(this.facets, function(facet) { - var columnValue = facet.columnValue, view = facet.view; - var formatter = (0, import_util254.get)(_this.cfg.title, "formatter"); - var config = (0, import_util254.deepMix)({ - position: ["50%", "0%"], - content: formatter ? formatter(columnValue) : columnValue - }, getFactTitleConfig(DIRECTION.TOP), _this.cfg.title); - view.annotation().text(config); - }); - }; - return Circle6; -}(Facet); -var circle_default7 = Circle5; - -// node_modules/@antv/g2/esm/facet/list.js -var import_util255 = __toModule(require_lib()); -var List = function(_super) { - __extends(List3, _super); - function List3() { - return _super !== null && _super.apply(this, arguments) || this; - } - List3.prototype.getDefaultCfg = function() { - return (0, import_util255.deepMix)({}, _super.prototype.getDefaultCfg.call(this), { - type: "list", - cols: null, - showTitle: true, - title: _super.prototype.getDefaultTitleCfg.call(this) - }); - }; - List3.prototype.render = function() { - _super.prototype.render.call(this); - if (this.cfg.showTitle) { - this.renderTitle(); - } - }; - List3.prototype.afterEachView = function(view, facet) { - this.processAxis(view, facet); - }; - List3.prototype.beforeEachView = function(view, facet) { - }; - List3.prototype.generateFacets = function(data3) { - var _this = this; - var fields = this.cfg.fields; - var cols = this.cfg.cols; - var columnField = fields[0]; - if (!columnField) { - throw new Error("No `fields` specified!"); - } - var colValues = this.getFieldValues(data3, columnField); - var count2 = colValues.length; - cols = cols || count2; - var rows = this.getPageCount(count2, cols); - var rst = []; - colValues.forEach(function(val, index2) { - var _a6 = _this.getRowCol(index2, cols), row = _a6.row, col = _a6.col; - var conditions = [{ field: columnField, value: val, values: colValues }]; - var facetData = (0, import_util255.filter)(data3, _this.getFacetDataFilter(conditions)); - var facet = { - type: _this.cfg.type, - data: facetData, - region: _this.getRegion(rows, cols, col, row), - columnValue: val, - rowValue: val, - columnField, - rowField: null, - columnIndex: col, - rowIndex: row, - columnValuesLength: cols, - rowValuesLength: rows, - total: count2 - }; - rst.push(facet); - }); - return rst; - }; - List3.prototype.getXAxisOption = function(x6, axes, option, facet) { - if (facet.rowIndex !== facet.rowValuesLength - 1 && facet.columnValuesLength * facet.rowIndex + facet.columnIndex + 1 + facet.columnValuesLength <= facet.total) { - return __assign(__assign({}, option), { label: null, title: null }); - } - return option; - }; - List3.prototype.getYAxisOption = function(y5, axes, option, facet) { - if (facet.columnIndex !== 0) { - return __assign(__assign({}, option), { title: null, label: null }); - } - return option; - }; - List3.prototype.renderTitle = function() { - var _this = this; - (0, import_util255.each)(this.facets, function(facet) { - var columnValue = facet.columnValue, view = facet.view; - var formatter = (0, import_util255.get)(_this.cfg.title, "formatter"); - var config = (0, import_util255.deepMix)({ - position: ["50%", "0%"], - content: formatter ? formatter(columnValue) : columnValue - }, getFactTitleConfig(DIRECTION.TOP), _this.cfg.title); - view.annotation().text(config); - }); - }; - List3.prototype.getPageCount = function(total, pageSize) { - return Math.floor((total + pageSize - 1) / pageSize); - }; - List3.prototype.getRowCol = function(index2, pageSize) { - var row = Math.floor(index2 / pageSize); - var col = index2 % pageSize; - return { row, col }; - }; - return List3; -}(Facet); -var list_default = List; - -// node_modules/@antv/g2/esm/facet/matrix.js -var import_util256 = __toModule(require_lib()); -var Matrix = function(_super) { - __extends(Matrix3, _super); - function Matrix3() { - return _super !== null && _super.apply(this, arguments) || this; - } - Matrix3.prototype.getDefaultCfg = function() { - return (0, import_util256.deepMix)({}, _super.prototype.getDefaultCfg.call(this), { - type: "matrix", - showTitle: false, - columnTitle: __assign({}, _super.prototype.getDefaultTitleCfg.call(this)), - rowTitle: __assign({}, _super.prototype.getDefaultTitleCfg.call(this)) - }); - }; - Matrix3.prototype.render = function() { - _super.prototype.render.call(this); - if (this.cfg.showTitle) { - this.renderTitle(); - } - }; - Matrix3.prototype.afterEachView = function(view, facet) { - this.processAxis(view, facet); - }; - Matrix3.prototype.beforeEachView = function(view, facet) { - }; - Matrix3.prototype.generateFacets = function(data3) { - var _a6 = this.cfg, fields = _a6.fields, type2 = _a6.type; - var rowValuesLength = fields.length; - var columnValuesLength = rowValuesLength; - var rst = []; - for (var i4 = 0; i4 < columnValuesLength; i4++) { - var columnField = fields[i4]; - for (var j4 = 0; j4 < rowValuesLength; j4++) { - var rowField = fields[j4]; - var facet = { - type: type2, - data: data3, - region: this.getRegion(rowValuesLength, columnValuesLength, i4, j4), - columnValue: columnField, - rowValue: rowField, - columnField, - rowField, - columnIndex: i4, - rowIndex: j4, - columnValuesLength, - rowValuesLength - }; - rst.push(facet); - } - } - return rst; - }; - Matrix3.prototype.getXAxisOption = function(x6, axes, option, facet) { - if (facet.rowIndex !== facet.rowValuesLength - 1) { - return __assign(__assign({}, option), { label: null, title: null }); - } - return option; - }; - Matrix3.prototype.getYAxisOption = function(y5, axes, option, facet) { - if (facet.columnIndex !== 0) { - return __assign(__assign({}, option), { title: null, label: null }); - } - return option; - }; - Matrix3.prototype.renderTitle = function() { - var _this = this; - (0, import_util256.each)(this.facets, function(facet, facetIndex) { - var columnIndex = facet.columnIndex, rowIndex = facet.rowIndex, columnValuesLength = facet.columnValuesLength, rowValuesLength = facet.rowValuesLength, columnValue = facet.columnValue, rowValue = facet.rowValue, view = facet.view; - if (rowIndex === 0) { - var formatter = (0, import_util256.get)(_this.cfg.columnTitle, "formatter"); - var config = (0, import_util256.deepMix)({ - position: ["50%", "0%"], - content: formatter ? formatter(columnValue) : columnValue - }, getFactTitleConfig(DIRECTION.TOP), _this.cfg.columnTitle); - view.annotation().text(config); - } - if (columnIndex === columnValuesLength - 1) { - var formatter = (0, import_util256.get)(_this.cfg.rowTitle, "formatter"); - var config = (0, import_util256.deepMix)({ - position: ["100%", "50%"], - content: formatter ? formatter(rowValue) : rowValue - }, getFactTitleConfig(DIRECTION.RIGHT), _this.cfg.rowTitle); - view.annotation().text(config); - } - }); - }; - return Matrix3; -}(Facet); -var matrix_default = Matrix; - -// node_modules/@antv/g2/esm/facet/mirror.js -var import_util257 = __toModule(require_lib()); -var Mirror = function(_super) { - __extends(Mirror2, _super); - function Mirror2() { - return _super !== null && _super.apply(this, arguments) || this; - } - Mirror2.prototype.getDefaultCfg = function() { - return (0, import_util257.deepMix)({}, _super.prototype.getDefaultCfg.call(this), { - type: "mirror", - showTitle: true, - title: _super.prototype.getDefaultTitleCfg.call(this), - transpose: false - }); - }; - Mirror2.prototype.render = function() { - _super.prototype.render.call(this); - if (this.cfg.showTitle) { - this.renderTitle(); - } - }; - Mirror2.prototype.beforeEachView = function(view, facet) { - if (this.cfg.transpose) { - if (facet.columnIndex % 2 === 0) { - view.coordinate().transpose().reflect("x"); - } else { - view.coordinate().transpose(); - } - } else { - if (facet.rowIndex % 2 !== 0) { - view.coordinate().reflect("y"); - } - } - }; - Mirror2.prototype.afterEachView = function(view, facet) { - this.processAxis(view, facet); - }; - Mirror2.prototype.generateFacets = function(data3) { - var _this = this; - var f3 = this.cfg.fields[0]; - var rst = []; - var columnValuesLength = 1; - var rowValuesLength = 1; - var columnValues = [""]; - var rowValues = [""]; - var columnField; - var rowField; - if (this.cfg.transpose) { - columnField = f3; - columnValues = this.getFieldValues(data3, columnField).slice(0, 2); - columnValuesLength = columnValues.length; - } else { - rowField = f3; - rowValues = this.getFieldValues(data3, rowField).slice(0, 2); - rowValuesLength = rowValues.length; - } - columnValues.forEach(function(xVal, xIndex) { - rowValues.forEach(function(yVal, yIndex) { - var conditions = [ - { field: columnField, value: xVal, values: columnValues }, - { field: rowField, value: yVal, values: rowValues } - ]; - var facetData = (0, import_util257.filter)(data3, _this.getFacetDataFilter(conditions)); - var facet = { - type: _this.cfg.type, - data: facetData, - region: _this.getRegion(rowValuesLength, columnValuesLength, xIndex, yIndex), - columnValue: xVal, - rowValue: yVal, - columnField, - rowField, - columnIndex: xIndex, - rowIndex: yIndex, - columnValuesLength, - rowValuesLength - }; - rst.push(facet); - }); - }); - return rst; - }; - Mirror2.prototype.getXAxisOption = function(x6, axes, option, facet) { - if (facet.columnIndex === 1 || facet.rowIndex === 1) { - return __assign(__assign({}, option), { label: null, title: null }); - } - return option; - }; - Mirror2.prototype.getYAxisOption = function(y5, axes, option, facet) { - return option; - }; - Mirror2.prototype.renderTitle = function() { - var _this = this; - (0, import_util257.each)(this.facets, function(facet, facetIndex) { - var columnValue = facet.columnValue, rowValue = facet.rowValue, view = facet.view; - var formatter = (0, import_util257.get)(_this.cfg.title, "formatter"); - if (_this.cfg.transpose) { - var config = (0, import_util257.deepMix)({ - position: ["50%", "0%"], - content: formatter ? formatter(columnValue) : columnValue - }, getFactTitleConfig(DIRECTION.TOP), _this.cfg.title); - view.annotation().text(config); - } else { - var config = (0, import_util257.deepMix)({ - position: ["100%", "50%"], - content: formatter ? formatter(rowValue) : rowValue - }, getFactTitleConfig(DIRECTION.RIGHT), _this.cfg.title); - view.annotation().text(config); - } - }); - }; - return Mirror2; -}(Facet); -var mirror_default = Mirror; - -// node_modules/@antv/g2/esm/facet/rect.js -var import_util258 = __toModule(require_lib()); -var Rect3 = function(_super) { - __extends(Rect4, _super); - function Rect4() { - return _super !== null && _super.apply(this, arguments) || this; - } - Rect4.prototype.afterEachView = function(view, facet) { - this.processAxis(view, facet); - }; - Rect4.prototype.beforeEachView = function(view, facet) { - }; - Rect4.prototype.getDefaultCfg = function() { - return (0, import_util258.deepMix)({}, _super.prototype.getDefaultCfg.call(this), { - type: "rect", - columnTitle: __assign({}, _super.prototype.getDefaultTitleCfg.call(this)), - rowTitle: __assign({}, _super.prototype.getDefaultTitleCfg.call(this)) - }); - }; - Rect4.prototype.render = function() { - _super.prototype.render.call(this); - if (this.cfg.showTitle) { - this.renderTitle(); - } - }; - Rect4.prototype.generateFacets = function(data3) { - var _this = this; - var _a6 = this.cfg.fields, columnField = _a6[0], rowField = _a6[1]; - var rst = []; - var columnValuesLength = 1; - var rowValuesLength = 1; - var columnValues = [""]; - var rowValues = [""]; - if (columnField) { - columnValues = this.getFieldValues(data3, columnField); - columnValuesLength = columnValues.length; - } - if (rowField) { - rowValues = this.getFieldValues(data3, rowField); - rowValuesLength = rowValues.length; - } - columnValues.forEach(function(xVal, xIndex) { - rowValues.forEach(function(yVal, yIndex) { - var conditions = [ - { field: columnField, value: xVal, values: columnValues }, - { field: rowField, value: yVal, values: rowValues } - ]; - var facetData = (0, import_util258.filter)(data3, _this.getFacetDataFilter(conditions)); - var facet = { - type: _this.cfg.type, - data: facetData, - region: _this.getRegion(rowValuesLength, columnValuesLength, xIndex, yIndex), - columnValue: xVal, - rowValue: yVal, - columnField, - rowField, - columnIndex: xIndex, - rowIndex: yIndex, - columnValuesLength, - rowValuesLength - }; - rst.push(facet); - }); - }); - return rst; - }; - Rect4.prototype.renderTitle = function() { - var _this = this; - (0, import_util258.each)(this.facets, function(facet, facetIndex) { - var columnIndex = facet.columnIndex, rowIndex = facet.rowIndex, columnValuesLength = facet.columnValuesLength, columnValue = facet.columnValue, rowValue = facet.rowValue, view = facet.view; - if (rowIndex === 0) { - var formatter = (0, import_util258.get)(_this.cfg.columnTitle, "formatter"); - var config = (0, import_util258.deepMix)({ - position: ["50%", "0%"], - content: formatter ? formatter(columnValue) : columnValue - }, getFactTitleConfig(DIRECTION.TOP), _this.cfg.columnTitle); - view.annotation().text(config); - } - if (columnIndex === columnValuesLength - 1) { - var formatter = (0, import_util258.get)(_this.cfg.rowTitle, "formatter"); - var config = (0, import_util258.deepMix)({ - position: ["100%", "50%"], - content: formatter ? formatter(rowValue) : rowValue - }, getFactTitleConfig(DIRECTION.RIGHT), _this.cfg.rowTitle); - view.annotation().text(config); - } - }); - }; - Rect4.prototype.getXAxisOption = function(x6, axes, option, facet) { - if (facet.rowIndex !== facet.rowValuesLength - 1) { - return __assign(__assign({}, option), { title: null, label: null }); - } else if (facet.columnIndex !== Math.floor((facet.columnValuesLength - 1) / 2)) { - return __assign(__assign({}, option), { title: null }); - } - return option; - }; - Rect4.prototype.getYAxisOption = function(y5, axes, option, facet) { - if (facet.columnIndex !== 0) { - return __assign(__assign({}, option), { title: null, label: null }); - } else if (facet.rowIndex !== Math.floor((facet.rowValuesLength - 1) / 2)) { - return __assign(__assign({}, option), { title: null }); - } - return option; - }; - return Rect4; -}(Facet); -var rect_default4 = Rect3; - -// node_modules/@antv/g2/esm/facet/tree.js -var import_util259 = __toModule(require_lib()); -var Tree = function(_super) { - __extends(Tree2, _super); - function Tree2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.afterChartRender = function() { - if (_this.facets && _this.cfg.line) { - _this.container.clear(); - _this.drawLines(_this.facets); - } - }; - return _this; - } - Tree2.prototype.afterEachView = function(view, facet) { - this.processAxis(view, facet); - }; - Tree2.prototype.beforeEachView = function(view, facet) { - }; - Tree2.prototype.init = function() { - _super.prototype.init.call(this); - this.view.on(VIEW_LIFE_CIRCLE.AFTER_RENDER, this.afterChartRender); - }; - Tree2.prototype.getDefaultCfg = function() { - return (0, import_util259.deepMix)({}, _super.prototype.getDefaultCfg.call(this), { - type: "tree", - line: { - style: { - lineWidth: 1, - stroke: "#ddd" - }, - smooth: false - }, - showTitle: true, - title: _super.prototype.getDefaultTitleCfg.call(this) - }); - }; - Tree2.prototype.generateFacets = function(data3) { - var fields = this.cfg.fields; - if (!fields.length) { - throw new Error("Please specify for the fields for rootFacet!"); - } - var rst = []; - var rootFacet = { - type: this.cfg.type, - data: data3, - region: null, - rowValuesLength: this.getRows(), - columnValuesLength: 1, - rowIndex: 0, - columnIndex: 0, - rowField: "", - columnField: "", - rowValue: "", - columnValue: "" - }; - rst.push(rootFacet); - rootFacet.children = this.getChildFacets(data3, 1, rst); - this.setRegion(rst); - return rst; - }; - Tree2.prototype.setRegion = function(facets) { - var _this = this; - this.forceColIndex(facets); - facets.forEach(function(facet) { - facet.region = _this.getRegion(facet.rowValuesLength, facet.columnValuesLength, facet.columnIndex, facet.rowIndex); - }); - }; - Tree2.prototype.getRegion = function(rows, cols, xIndex, yIndex) { - var xWidth = 1 / cols; - var yWidth = 1 / rows; - var start = { - x: xWidth * xIndex, - y: yWidth * yIndex - }; - var end2 = { - x: start.x + xWidth, - y: start.y + yWidth * 2 / 3 - }; - return { - start, - end: end2 - }; - }; - Tree2.prototype.forceColIndex = function(facets) { - var _this = this; - var leafs = []; - var index2 = 0; - facets.forEach(function(facet2) { - if (_this.isLeaf(facet2)) { - leafs.push(facet2); - facet2.columnIndex = index2; - index2++; - } - }); - leafs.forEach(function(facet2) { - facet2.columnValuesLength = leafs.length; - }); - var maxLevel = this.cfg.fields.length; - for (var i4 = maxLevel - 1; i4 >= 0; i4--) { - var levelFacets = this.getFacetsByLevel(facets, i4); - for (var _i = 0, levelFacets_1 = levelFacets; _i < levelFacets_1.length; _i++) { - var facet = levelFacets_1[_i]; - if (!this.isLeaf(facet)) { - facet.originColIndex = facet.columnIndex; - facet.columnIndex = this.getRegionIndex(facet.children); - facet.columnValuesLength = leafs.length; - } - } - } - }; - Tree2.prototype.getFacetsByLevel = function(facets, level) { - var rst = []; - facets.forEach(function(facet) { - if (facet.rowIndex === level) { - rst.push(facet); - } - }); - return rst; - }; - Tree2.prototype.getRegionIndex = function(children) { - var first = children[0]; - var last17 = children[children.length - 1]; - return (last17.columnIndex - first.columnIndex) / 2 + first.columnIndex; - }; - Tree2.prototype.isLeaf = function(facet) { - return !facet.children || !facet.children.length; - }; - Tree2.prototype.getRows = function() { - return this.cfg.fields.length + 1; - }; - Tree2.prototype.getChildFacets = function(data3, level, arr) { - var _this = this; - var fields = this.cfg.fields; - var length5 = fields.length; - if (length5 < level) { - return; - } - var rst = []; - var field6 = fields[level - 1]; - var values4 = this.getFieldValues(data3, field6); - values4.forEach(function(value2, index2) { - var conditions = [{ field: field6, value: value2, values: values4 }]; - var subData = data3.filter(_this.getFacetDataFilter(conditions)); - if (subData.length) { - var facet = { - type: _this.cfg.type, - data: subData, - region: null, - columnValue: value2, - rowValue: "", - columnField: field6, - rowField: "", - columnIndex: index2, - rowValuesLength: _this.getRows(), - columnValuesLength: 1, - rowIndex: level, - children: _this.getChildFacets(subData, level + 1, arr) - }; - rst.push(facet); - arr.push(facet); - } - }); - return rst; - }; - Tree2.prototype.render = function() { - _super.prototype.render.call(this); - if (this.cfg.showTitle) { - this.renderTitle(); - } - }; - Tree2.prototype.renderTitle = function() { - var _this = this; - (0, import_util259.each)(this.facets, function(facet) { - var columnValue = facet.columnValue, view = facet.view; - var formatter = (0, import_util259.get)(_this.cfg.title, "formatter"); - var config = (0, import_util259.deepMix)({ - position: ["50%", "0%"], - content: formatter ? formatter(columnValue) : columnValue - }, getFactTitleConfig(DIRECTION.TOP), _this.cfg.title); - view.annotation().text(config); - }); - }; - Tree2.prototype.drawLines = function(facets) { - var _this = this; - facets.forEach(function(facet) { - if (!_this.isLeaf(facet)) { - var children = facet.children; - _this.addFacetLines(facet, children); - } - }); - }; - Tree2.prototype.addFacetLines = function(facet, children) { - var _this = this; - var view = facet.view; - var region = view.coordinateBBox; - var start = { - x: region.x + region.width / 2, - y: region.y + region.height - }; - children.forEach(function(subFacet) { - var subRegion = subFacet.view.coordinateBBox; - var end2 = { - x: subRegion.bl.x + (subRegion.tr.x - subRegion.bl.x) / 2, - y: subRegion.tr.y - }; - var middle1 = { - x: start.x, - y: start.y + (end2.y - start.y) / 2 - }; - var middle2 = { - x: end2.x, - y: middle1.y - }; - _this.drawLine([start, middle1, middle2, end2]); - }); - }; - Tree2.prototype.getPath = function(points) { - var path = []; - var smooth = this.cfg.line.smooth; - if (smooth) { - path.push(["M", points[0].x, points[0].y]); - path.push(["C", points[1].x, points[1].y, points[2].x, points[2].y, points[3].x, points[3].y]); - } else { - points.forEach(function(point2, index2) { - if (index2 === 0) { - path.push(["M", point2.x, point2.y]); - } else { - path.push(["L", point2.x, point2.y]); - } - }); - } - return path; - }; - Tree2.prototype.drawLine = function(points) { - var path = this.getPath(points); - var line2 = this.cfg.line.style; - this.container.addShape("path", { - attrs: (0, import_util259.assign)({ - path - }, line2) - }); - }; - Tree2.prototype.getXAxisOption = function(x6, axes, option, facet) { - if (facet.rowIndex !== facet.rowValuesLength - 1) { - return __assign(__assign({}, option), { title: null, label: null }); - } - return option; - }; - Tree2.prototype.getYAxisOption = function(y5, axes, option, facet) { - if (facet.originColIndex !== 0 && facet.columnIndex !== 0) { - return __assign(__assign({}, option), { title: null, label: null }); - } - return option; - }; - return Tree2; -}(Facet); -var tree_default = Tree; - -// node_modules/@antv/g2/esm/chart/controller/annotation.js -var import_util261 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/util/stat.js -var import_util260 = __toModule(require_lib()); -function getMedian(array) { - var arr = __spreadArray([], array, true); - arr.sort(function(a4, b10) { - return a4 - b10; - }); - var len5 = arr.length; - if (len5 === 0) { - return 0; - } - if (len5 % 2 === 1) { - return arr[(len5 - 1) / 2]; - } - return (arr[len5 / 2] + arr[len5 / 2 - 1]) / 2; -} -function getMean(array) { - var sum = (0, import_util260.reduce)(array, function(r4, num) { - return r4 += isNaN(num) || !(0, import_util260.isNumber)(num) ? 0 : num; - }, 0); - return array.length === 0 ? 0 : sum / array.length; -} - -// node_modules/@antv/g2/esm/util/annotation.js -function getNormalizedValue(val, scale12) { - if (!scale12) { - return null; - } - var scaled; - switch (val) { - case "start": - return 0; - case "center": - return 0.5; - case "end": - return 1; - case "median": { - scaled = scale12.isCategory ? getMedian(scale12.values.map(function(_8, idx) { - return idx; - })) : getMedian(scale12.values); - break; - } - case "mean": { - scaled = scale12.isCategory ? (scale12.values.length - 1) / 2 : getMean(scale12.values); - break; - } - case "min": - scaled = scale12.isCategory ? 0 : scale12[val]; - break; - case "max": - scaled = scale12.isCategory ? scale12.values.length - 1 : scale12[val]; - break; - default: - scaled = val; - break; - } - return scale12.scale(scaled); -} - -// node_modules/@antv/g2/esm/chart/controller/annotation.js -var ANNOTATIONS_AFTER_RENDER = ["regionFilter", "shape"]; -var Annotation = function(_super) { - __extends(Annotation2, _super); - function Annotation2(view) { - var _this = _super.call(this, view) || this; - _this.cache = new Map(); - _this.foregroundContainer = _this.view.getLayer(LAYER.FORE).addGroup(); - _this.backgroundContainer = _this.view.getLayer(LAYER.BG).addGroup(); - _this.option = []; - return _this; - } - Object.defineProperty(Annotation2.prototype, "name", { - get: function() { - return "annotation"; - }, - enumerable: false, - configurable: true - }); - Annotation2.prototype.init = function() { - }; - Annotation2.prototype.layout = function() { - this.update(); - }; - Annotation2.prototype.render = function() { - }; - Annotation2.prototype.update = function() { - var _this = this; - this.onAfterRender(function() { - var updated = new Map(); - (0, import_util261.each)(_this.option, function(option) { - if ((0, import_util261.includes)(ANNOTATIONS_AFTER_RENDER, option.type)) { - var co = _this.updateOrCreate(option); - if (co) { - updated.set(_this.getCacheKey(option), co); - } - } - }); - _this.cache = _this.syncCache(updated); - }); - var updateCache = new Map(); - (0, import_util261.each)(this.option, function(option) { - if (!(0, import_util261.includes)(ANNOTATIONS_AFTER_RENDER, option.type)) { - var co = _this.updateOrCreate(option); - if (co) { - updateCache.set(_this.getCacheKey(option), co); - } - } - }); - this.cache = this.syncCache(updateCache); - }; - Annotation2.prototype.clear = function(includeOption) { - if (includeOption === void 0) { - includeOption = false; - } - _super.prototype.clear.call(this); - this.clearComponents(); - this.foregroundContainer.clear(); - this.backgroundContainer.clear(); - if (includeOption) { - this.option = []; - } - }; - Annotation2.prototype.destroy = function() { - this.clear(true); - this.foregroundContainer.remove(true); - this.backgroundContainer.remove(true); - }; - Annotation2.prototype.getComponents = function() { - var co = []; - this.cache.forEach(function(value2) { - co.push(value2); - }); - return co; - }; - Annotation2.prototype.clearComponents = function() { - this.getComponents().forEach(function(co) { - co.component.destroy(); - }); - this.cache.clear(); - }; - Annotation2.prototype.onAfterRender = function(doWhat) { - if (this.view.getOptions().animate) { - this.view.geometries.forEach(function(g4) { - if (g4.animateOption) { - g4.once(GEOMETRY_LIFE_CIRCLE.AFTER_DRAW_ANIMATE, function() { - doWhat(); - }); - } - }); - } else { - this.view.getRootView().once(VIEW_LIFE_CIRCLE.AFTER_RENDER, function() { - doWhat(); - }); - } - }; - Annotation2.prototype.createAnnotation = function(option) { - var type2 = option.type; - var Ctor = annotation_exports[(0, import_util261.upperFirst)(type2)]; - if (Ctor) { - var theme4 = this.getAnnotationTheme(type2); - var cfg = this.getAnnotationCfg(type2, option, theme4); - var annotation4 = new Ctor(cfg); - return { - component: annotation4, - layer: this.isTop(cfg) ? LAYER.FORE : LAYER.BG, - direction: DIRECTION.NONE, - type: COMPONENT_TYPE.ANNOTATION, - extra: option - }; - } - }; - Annotation2.prototype.annotation = function(option) { - this.option.push(option); - }; - Annotation2.prototype.arc = function(option) { - this.annotation(__assign({ type: "arc" }, option)); - return this; - }; - Annotation2.prototype.image = function(option) { - this.annotation(__assign({ type: "image" }, option)); - return this; - }; - Annotation2.prototype.line = function(option) { - this.annotation(__assign({ type: "line" }, option)); - return this; - }; - Annotation2.prototype.region = function(option) { - this.annotation(__assign({ type: "region" }, option)); - return this; - }; - Annotation2.prototype.text = function(option) { - this.annotation(__assign({ type: "text" }, option)); - return this; - }; - Annotation2.prototype.dataMarker = function(option) { - this.annotation(__assign({ type: "dataMarker" }, option)); - return this; - }; - Annotation2.prototype.dataRegion = function(option) { - this.annotation(__assign({ type: "dataRegion" }, option)); - }; - Annotation2.prototype.regionFilter = function(option) { - this.annotation(__assign({ type: "regionFilter" }, option)); - }; - Annotation2.prototype.shape = function(option) { - this.annotation(__assign({ type: "shape" }, option)); - }; - Annotation2.prototype.html = function(option) { - this.annotation(__assign({ type: "html" }, option)); - }; - Annotation2.prototype.parsePosition = function(p4) { - var xScale = this.view.getXScale(); - var yScales = this.view.getScalesByDim("y"); - var position2 = (0, import_util261.isFunction)(p4) ? p4.call(null, xScale, yScales) : p4; - var x6 = 0; - var y5 = 0; - if ((0, import_util261.isArray)(position2)) { - var xPos = position2[0], yPos = position2[1]; - if ((0, import_util261.isString)(xPos) && xPos.indexOf("%") !== -1 && !isNaN(xPos.slice(0, -1))) { - return this.parsePercentPosition(position2); - } - x6 = getNormalizedValue(xPos, xScale); - y5 = getNormalizedValue(yPos, Object.values(yScales)[0]); - } else if (!(0, import_util261.isNil)(position2)) { - for (var _i = 0, _a6 = (0, import_util261.keys)(position2); _i < _a6.length; _i++) { - var key = _a6[_i]; - var value2 = position2[key]; - if (key === xScale.field) { - x6 = getNormalizedValue(value2, xScale); - } - if (yScales[key]) { - y5 = getNormalizedValue(value2, yScales[key]); - } - } - } - if (isNaN(x6) || isNaN(y5)) { - return null; - } - return this.view.getCoordinate().convert({ x: x6, y: y5 }); - }; - Annotation2.prototype.getRegionPoints = function(start, end2) { - var _this = this; - var xScale = this.view.getXScale(); - var yScales = this.view.getScalesByDim("y"); - var yScale = Object.values(yScales)[0]; - var xField = xScale.field; - var viewData = this.view.getData(); - var startXValue = (0, import_util261.isArray)(start) ? start[0] : start[xField]; - var endXValue = (0, import_util261.isArray)(end2) ? end2[0] : end2[xField]; - var arr = []; - var startIndex; - (0, import_util261.each)(viewData, function(item, idx) { - if (item[xField] === startXValue) { - startIndex = idx; - } - if (idx >= startIndex) { - var point2 = _this.parsePosition([item[xField], item[yScale.field]]); - if (point2) { - arr.push(point2); - } - } - if (item[xField] === endXValue) { - return false; - } - }); - return arr; - }; - Annotation2.prototype.parsePercentPosition = function(position2) { - var xPercent = parseFloat(position2[0]) / 100; - var yPercent = parseFloat(position2[1]) / 100; - var coordinate11 = this.view.getCoordinate(); - var start = coordinate11.start, end2 = coordinate11.end; - var topLeft = { - x: Math.min(start.x, end2.x), - y: Math.min(start.y, end2.y) - }; - var x6 = coordinate11.getWidth() * xPercent + topLeft.x; - var y5 = coordinate11.getHeight() * yPercent + topLeft.y; - return { x: x6, y: y5 }; - }; - Annotation2.prototype.getCoordinateBBox = function() { - var coordinate11 = this.view.getCoordinate(); - var start = coordinate11.start, end2 = coordinate11.end; - var width2 = coordinate11.getWidth(); - var height = coordinate11.getHeight(); - var topLeft = { - x: Math.min(start.x, end2.x), - y: Math.min(start.y, end2.y) - }; - return { - x: topLeft.x, - y: topLeft.y, - minX: topLeft.x, - minY: topLeft.y, - maxX: topLeft.x + width2, - maxY: topLeft.y + height, - width: width2, - height - }; - }; - Annotation2.prototype.getAnnotationCfg = function(type2, option, theme4) { - var _this = this; - var coordinate11 = this.view.getCoordinate(); - var canvas = this.view.getCanvas(); - var o3 = {}; - if ((0, import_util261.isNil)(option)) { - return null; - } - var start = option.start, end2 = option.end, position2 = option.position; - ; - var sp = this.parsePosition(start); - var ep = this.parsePosition(end2); - var textPoint = this.parsePosition(position2); - if (["arc", "image", "line", "region", "regionFilter"].includes(type2) && (!sp || !ep)) { - return null; - } else if (["text", "dataMarker", "html"].includes(type2) && !textPoint) { - return null; - } - if (type2 === "arc") { - var _a6 = option, start_1 = _a6.start, end_1 = _a6.end, rest = __rest(_a6, ["start", "end"]); - var startAngle = getAngleByPoint(coordinate11, sp); - var endAngle = getAngleByPoint(coordinate11, ep); - if (startAngle > endAngle) { - endAngle = Math.PI * 2 + endAngle; - } - o3 = __assign(__assign({}, rest), { center: coordinate11.getCenter(), radius: getDistanceToCenter(coordinate11, sp), startAngle, endAngle }); - } else if (type2 === "image") { - var _b = option, start_2 = _b.start, end_2 = _b.end, rest = __rest(_b, ["start", "end"]); - o3 = __assign(__assign({}, rest), { start: sp, end: ep, src: option.src }); - } else if (type2 === "line") { - var _c = option, start_3 = _c.start, end_3 = _c.end, rest = __rest(_c, ["start", "end"]); - o3 = __assign(__assign({}, rest), { start: sp, end: ep, text: (0, import_util261.get)(option, "text", null) }); - } else if (type2 === "region") { - var _d = option, start_4 = _d.start, end_4 = _d.end, rest = __rest(_d, ["start", "end"]); - o3 = __assign(__assign({}, rest), { start: sp, end: ep }); - } else if (type2 === "text") { - var filteredData = this.view.getData(); - var _e = option, position_1 = _e.position, content = _e.content, rest = __rest(_e, ["position", "content"]); - var textContent = content; - if ((0, import_util261.isFunction)(content)) { - textContent = content(filteredData); - } - o3 = __assign(__assign(__assign({}, textPoint), rest), { content: textContent }); - } else if (type2 === "dataMarker") { - var _f = option, position_2 = _f.position, point2 = _f.point, line2 = _f.line, text = _f.text, autoAdjust = _f.autoAdjust, direction3 = _f.direction, rest = __rest(_f, ["position", "point", "line", "text", "autoAdjust", "direction"]); - o3 = __assign(__assign(__assign({}, rest), textPoint), { coordinateBBox: this.getCoordinateBBox(), point: point2, line: line2, text, autoAdjust, direction: direction3 }); - } else if (type2 === "dataRegion") { - var _g = option, start_5 = _g.start, end_5 = _g.end, region = _g.region, text = _g.text, lineLength = _g.lineLength, rest = __rest(_g, ["start", "end", "region", "text", "lineLength"]); - o3 = __assign(__assign({}, rest), { points: this.getRegionPoints(start_5, end_5), region, text, lineLength }); - } else if (type2 === "regionFilter") { - var _h = option, start_6 = _h.start, end_6 = _h.end, apply_1 = _h.apply, color4 = _h.color, rest = __rest(_h, ["start", "end", "apply", "color"]); - var geometries = this.view.geometries; - var shapes_1 = []; - var addShapes_1 = function(item) { - if (!item) { - return; - } - if (item.isGroup()) { - item.getChildren().forEach(function(child) { - return addShapes_1(child); - }); - } else { - shapes_1.push(item); - } - }; - (0, import_util261.each)(geometries, function(geom) { - if (apply_1) { - if ((0, import_util261.contains)(apply_1, geom.type)) { - (0, import_util261.each)(geom.elements, function(elem) { - addShapes_1(elem.shape); - }); - } - } else { - (0, import_util261.each)(geom.elements, function(elem) { - addShapes_1(elem.shape); - }); - } - }); - o3 = __assign(__assign({}, rest), { color: color4, shapes: shapes_1, start: sp, end: ep }); - } else if (type2 === "shape") { - var _j = option, render_1 = _j.render, restOptions = __rest(_j, ["render"]); - var wrappedRender = function(container2) { - if ((0, import_util261.isFunction)(option.render)) { - return render_1(container2, _this.view, { parsePosition: _this.parsePosition.bind(_this) }); - } - }; - o3 = __assign(__assign({}, restOptions), { render: wrappedRender }); - } else if (type2 === "html") { - var _k = option, html_1 = _k.html, position_3 = _k.position, restOptions = __rest(_k, ["html", "position"]); - var wrappedHtml = function(container2) { - if ((0, import_util261.isFunction)(html_1)) { - return html_1(container2, _this.view); - } - return html_1; - }; - o3 = __assign(__assign(__assign({}, restOptions), textPoint), { - parent: canvas.get("el").parentNode, - html: wrappedHtml - }); - } - var cfg = (0, import_util261.deepMix)({}, theme4, __assign(__assign({}, o3), { top: option.top, style: option.style, offsetX: option.offsetX, offsetY: option.offsetY })); - if (type2 !== "html") { - cfg.container = this.getComponentContainer(cfg); - } - cfg.animate = this.view.getOptions().animate && cfg.animate && (0, import_util261.get)(option, "animate", cfg.animate); - cfg.animateOption = (0, import_util261.deepMix)({}, DEFAULT_ANIMATE_CFG, cfg.animateOption, option.animateOption); - return cfg; - }; - Annotation2.prototype.isTop = function(option) { - return (0, import_util261.get)(option, "top", true); - }; - Annotation2.prototype.getComponentContainer = function(option) { - return this.isTop(option) ? this.foregroundContainer : this.backgroundContainer; - }; - Annotation2.prototype.getAnnotationTheme = function(type2) { - return (0, import_util261.get)(this.view.getTheme(), ["components", "annotation", type2], {}); - }; - Annotation2.prototype.updateOrCreate = function(option) { - var co = this.cache.get(this.getCacheKey(option)); - if (co) { - var type2 = option.type; - var theme4 = this.getAnnotationTheme(type2); - var cfg = this.getAnnotationCfg(type2, option, theme4); - if (cfg) { - omit(cfg, ["container"]); - } - co.component.update(__assign(__assign({}, cfg || {}), { visible: !!cfg })); - if ((0, import_util261.includes)(ANNOTATIONS_AFTER_RENDER, option.type)) { - co.component.render(); - } - } else { - co = this.createAnnotation(option); - if (co) { - co.component.init(); - if ((0, import_util261.includes)(ANNOTATIONS_AFTER_RENDER, option.type)) { - co.component.render(); - } - } - } - return co; - }; - Annotation2.prototype.syncCache = function(updated) { - var _this = this; - var newCache = new Map(this.cache); - updated.forEach(function(co, key) { - newCache.set(key, co); - }); - newCache.forEach(function(co, key) { - if (!(0, import_util261.find)(_this.option, function(option) { - return key === _this.getCacheKey(option); - })) { - co.component.destroy(); - newCache.delete(key); - } - }); - return newCache; - }; - Annotation2.prototype.getCacheKey = function(option) { - return option; - }; - return Annotation2; -}(Controller); -var annotation_default = Annotation; - -// node_modules/@antv/g2/esm/chart/controller/axis.js -var import_util263 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/util/grid.js -var import_util262 = __toModule(require_lib()); -function getGridThemeCfg(theme4, direction3) { - var axisTheme = (0, import_util262.deepMix)({}, (0, import_util262.get)(theme4, ["components", "axis", "common"]), (0, import_util262.get)(theme4, ["components", "axis", direction3])); - return (0, import_util262.get)(axisTheme, ["grid"], {}); -} -function getLineGridItems(coordinate11, scale12, dim, alignTick) { - var items = []; - var ticks = scale12.getTicks(); - if (coordinate11.isPolar) { - ticks.push({ - value: 1, - text: "", - tickValue: "" - }); - } - ticks.reduce(function(preTick, currentTick, currentIndex) { - var currentValue = currentTick.value; - if (alignTick) { - items.push({ - points: [ - coordinate11.convert(dim === "y" ? { x: 0, y: currentValue } : { x: currentValue, y: 0 }), - coordinate11.convert(dim === "y" ? { x: 1, y: currentValue } : { x: currentValue, y: 1 }) - ] - }); - } else { - if (currentIndex) { - var preValue = preTick.value; - var middleValue = (preValue + currentValue) / 2; - items.push({ - points: [ - coordinate11.convert(dim === "y" ? { x: 0, y: middleValue } : { x: middleValue, y: 0 }), - coordinate11.convert(dim === "y" ? { x: 1, y: middleValue } : { x: middleValue, y: 1 }) - ] - }); - } - } - return currentTick; - }, ticks[0]); - return items; -} -function getCircleGridItems(coordinate11, xScale, yScale, alignTick, dim) { - var count2 = xScale.values.length; - var items = []; - var ticks = yScale.getTicks(); - ticks.reduce(function(preTick, currentTick) { - var preValue = preTick ? preTick.value : currentTick.value; - var currentValue = currentTick.value; - var middleValue = (preValue + currentValue) / 2; - if (dim === "x") { - items.push({ - points: [ - coordinate11.convert({ - x: alignTick ? currentValue : middleValue, - y: 0 - }), - coordinate11.convert({ - x: alignTick ? currentValue : middleValue, - y: 1 - }) - ] - }); - } else { - items.push({ - points: (0, import_util262.map)(Array(count2 + 1), function(__, idx) { - return coordinate11.convert({ - x: idx / count2, - y: alignTick ? currentValue : middleValue - }); - }) - }); - } - return currentTick; - }, ticks[0]); - return items; -} -function showGrid(axisTheme, axisOption) { - var userGrid = (0, import_util262.get)(axisOption, "grid"); - if (userGrid === null) { - return false; - } - var themeGrid = (0, import_util262.get)(axisTheme, "grid"); - return !(userGrid === void 0 && themeGrid === null); -} - -// node_modules/@antv/g2/esm/chart/controller/axis.js -var OMIT_CFG = ["container"]; -var AXIS_DEFAULT_ANIMATE_CFG = __assign(__assign({}, DEFAULT_ANIMATE_CFG), { appear: null }); -var Axis = function(_super) { - __extends(Axis2, _super); - function Axis2(view) { - var _this = _super.call(this, view) || this; - _this.cache = new Map(); - _this.gridContainer = _this.view.getLayer(LAYER.BG).addGroup(); - _this.gridForeContainer = _this.view.getLayer(LAYER.FORE).addGroup(); - _this.axisContainer = _this.view.getLayer(LAYER.BG).addGroup(); - _this.axisForeContainer = _this.view.getLayer(LAYER.FORE).addGroup(); - return _this; - } - Object.defineProperty(Axis2.prototype, "name", { - get: function() { - return "axis"; - }, - enumerable: false, - configurable: true - }); - Axis2.prototype.init = function() { - }; - Axis2.prototype.render = function() { - this.update(); - }; - Axis2.prototype.layout = function() { - var _this = this; - var coordinate11 = this.view.getCoordinate(); - (0, import_util263.each)(this.getComponents(), function(co) { - var component2 = co.component, direction3 = co.direction, type2 = co.type, extra = co.extra; - var dim = extra.dim, scale12 = extra.scale, alignTick = extra.alignTick; - var updated; - if (type2 === COMPONENT_TYPE.AXIS) { - if (coordinate11.isPolar) { - if (dim === "x") { - updated = coordinate11.isTransposed ? getAxisRegion(coordinate11, direction3) : getCircleAxisCenterRadius(coordinate11); - } else if (dim === "y") { - updated = coordinate11.isTransposed ? getCircleAxisCenterRadius(coordinate11) : getAxisRegion(coordinate11, direction3); - } - } else { - updated = getAxisRegion(coordinate11, direction3); - } - } else if (type2 === COMPONENT_TYPE.GRID) { - if (coordinate11.isPolar) { - var items = void 0; - if (coordinate11.isTransposed) { - items = dim === "x" ? getCircleGridItems(coordinate11, _this.view.getYScales()[0], scale12, alignTick, dim) : getLineGridItems(coordinate11, scale12, dim, alignTick); - } else { - items = dim === "x" ? getLineGridItems(coordinate11, scale12, dim, alignTick) : getCircleGridItems(coordinate11, _this.view.getXScale(), scale12, alignTick, dim); - } - updated = { - items, - center: _this.view.getCoordinate().getCenter() - }; - } else { - updated = { items: getLineGridItems(coordinate11, scale12, dim, alignTick) }; - } - } - component2.update(updated); - }); - }; - Axis2.prototype.update = function() { - this.option = this.view.getOptions().axes; - var updatedCache = new Map(); - this.updateXAxes(updatedCache); - this.updateYAxes(updatedCache); - var newCache = new Map(); - this.cache.forEach(function(co, key) { - if (updatedCache.has(key)) { - newCache.set(key, co); - } else { - co.component.destroy(); - } - }); - this.cache = newCache; - }; - Axis2.prototype.clear = function() { - _super.prototype.clear.call(this); - this.cache.clear(); - this.gridContainer.clear(); - this.gridForeContainer.clear(); - this.axisContainer.clear(); - this.axisForeContainer.clear(); - }; - Axis2.prototype.destroy = function() { - _super.prototype.destroy.call(this); - this.gridContainer.remove(true); - this.gridForeContainer.remove(true); - this.axisContainer.remove(true); - this.axisForeContainer.remove(true); - }; - Axis2.prototype.getComponents = function() { - var co = []; - this.cache.forEach(function(value2) { - co.push(value2); - }); - return co; - }; - Axis2.prototype.updateXAxes = function(updatedCache) { - var scale12 = this.view.getXScale(); - if (!scale12 || scale12.isIdentity) { - return; - } - var xAxisOption = getAxisOption(this.option, scale12.field); - if (xAxisOption === false) { - return; - } - var direction3 = getAxisDirection(xAxisOption, DIRECTION.BOTTOM); - var layer = LAYER.BG; - var dim = "x"; - var coordinate11 = this.view.getCoordinate(); - var axisId = this.getId("axis", scale12.field); - var gridId = this.getId("grid", scale12.field); - if (coordinate11.isRect) { - var axis22 = this.cache.get(axisId); - if (axis22) { - var cfg = this.getLineAxisCfg(scale12, xAxisOption, direction3); - omit(cfg, OMIT_CFG); - axis22.component.update(cfg); - updatedCache.set(axisId, axis22); - } else { - axis22 = this.createLineAxis(scale12, xAxisOption, layer, direction3, dim); - this.cache.set(axisId, axis22); - updatedCache.set(axisId, axis22); - } - var grid = this.cache.get(gridId); - if (grid) { - var cfg = this.getLineGridCfg(scale12, xAxisOption, direction3, dim); - omit(cfg, OMIT_CFG); - grid.component.update(cfg); - updatedCache.set(gridId, grid); - } else { - grid = this.createLineGrid(scale12, xAxisOption, layer, direction3, dim); - if (grid) { - this.cache.set(gridId, grid); - updatedCache.set(gridId, grid); - } - } - } else if (coordinate11.isPolar) { - var axis22 = this.cache.get(axisId); - if (axis22) { - var cfg = coordinate11.isTransposed ? this.getLineAxisCfg(scale12, xAxisOption, DIRECTION.RADIUS) : this.getCircleAxisCfg(scale12, xAxisOption, direction3); - omit(cfg, OMIT_CFG); - axis22.component.update(cfg); - updatedCache.set(axisId, axis22); - } else { - if (coordinate11.isTransposed) { - if ((0, import_util263.isUndefined)(xAxisOption)) { - return; - } else { - axis22 = this.createLineAxis(scale12, xAxisOption, layer, DIRECTION.RADIUS, dim); - } - } else { - axis22 = this.createCircleAxis(scale12, xAxisOption, layer, direction3, dim); - } - this.cache.set(axisId, axis22); - updatedCache.set(axisId, axis22); - } - var grid = this.cache.get(gridId); - if (grid) { - var cfg = coordinate11.isTransposed ? this.getCircleGridCfg(scale12, xAxisOption, DIRECTION.RADIUS, dim) : this.getLineGridCfg(scale12, xAxisOption, DIRECTION.CIRCLE, dim); - omit(cfg, OMIT_CFG); - grid.component.update(cfg); - updatedCache.set(gridId, grid); - } else { - if (coordinate11.isTransposed) { - if ((0, import_util263.isUndefined)(xAxisOption)) { - return; - } else { - grid = this.createCircleGrid(scale12, xAxisOption, layer, DIRECTION.RADIUS, dim); - } - } else { - grid = this.createLineGrid(scale12, xAxisOption, layer, DIRECTION.CIRCLE, dim); - } - if (grid) { - this.cache.set(gridId, grid); - updatedCache.set(gridId, grid); - } - } - } else { - } - }; - Axis2.prototype.updateYAxes = function(updatedCache) { - var _this = this; - var yScales = this.view.getYScales(); - (0, import_util263.each)(yScales, function(scale12, idx) { - if (!scale12 || scale12.isIdentity) { - return; - } - var field6 = scale12.field; - var yAxisOption = getAxisOption(_this.option, field6); - if (yAxisOption !== false) { - var layer = LAYER.BG; - var dim = "y"; - var axisId = _this.getId("axis", field6); - var gridId = _this.getId("grid", field6); - var coordinate11 = _this.view.getCoordinate(); - if (coordinate11.isRect) { - var direction3 = getAxisDirection(yAxisOption, idx === 0 ? DIRECTION.LEFT : DIRECTION.RIGHT); - var axis22 = _this.cache.get(axisId); - if (axis22) { - var cfg = _this.getLineAxisCfg(scale12, yAxisOption, direction3); - omit(cfg, OMIT_CFG); - axis22.component.update(cfg); - updatedCache.set(axisId, axis22); - } else { - axis22 = _this.createLineAxis(scale12, yAxisOption, layer, direction3, dim); - _this.cache.set(axisId, axis22); - updatedCache.set(axisId, axis22); - } - var grid = _this.cache.get(gridId); - if (grid) { - var cfg = _this.getLineGridCfg(scale12, yAxisOption, direction3, dim); - omit(cfg, OMIT_CFG); - grid.component.update(cfg); - updatedCache.set(gridId, grid); - } else { - grid = _this.createLineGrid(scale12, yAxisOption, layer, direction3, dim); - if (grid) { - _this.cache.set(gridId, grid); - updatedCache.set(gridId, grid); - } - } - } else if (coordinate11.isPolar) { - var axis22 = _this.cache.get(axisId); - if (axis22) { - var cfg = coordinate11.isTransposed ? _this.getCircleAxisCfg(scale12, yAxisOption, DIRECTION.CIRCLE) : _this.getLineAxisCfg(scale12, yAxisOption, DIRECTION.RADIUS); - omit(cfg, OMIT_CFG); - axis22.component.update(cfg); - updatedCache.set(axisId, axis22); - } else { - if (coordinate11.isTransposed) { - if ((0, import_util263.isUndefined)(yAxisOption)) { - return; - } else { - axis22 = _this.createCircleAxis(scale12, yAxisOption, layer, DIRECTION.CIRCLE, dim); - } - } else { - axis22 = _this.createLineAxis(scale12, yAxisOption, layer, DIRECTION.RADIUS, dim); - } - _this.cache.set(axisId, axis22); - updatedCache.set(axisId, axis22); - } - var grid = _this.cache.get(gridId); - if (grid) { - var cfg = coordinate11.isTransposed ? _this.getLineGridCfg(scale12, yAxisOption, DIRECTION.CIRCLE, dim) : _this.getCircleGridCfg(scale12, yAxisOption, DIRECTION.RADIUS, dim); - omit(cfg, OMIT_CFG); - grid.component.update(cfg); - updatedCache.set(gridId, grid); - } else { - if (coordinate11.isTransposed) { - if ((0, import_util263.isUndefined)(yAxisOption)) { - return; - } else { - grid = _this.createLineGrid(scale12, yAxisOption, layer, DIRECTION.CIRCLE, dim); - } - } else { - grid = _this.createCircleGrid(scale12, yAxisOption, layer, DIRECTION.RADIUS, dim); - } - if (grid) { - _this.cache.set(gridId, grid); - updatedCache.set(gridId, grid); - } - } - } else { - } - } - }); - }; - Axis2.prototype.createLineAxis = function(scale12, option, layer, direction3, dim) { - var axis22 = { - component: new LineAxis(this.getLineAxisCfg(scale12, option, direction3)), - layer, - direction: direction3 === DIRECTION.RADIUS ? DIRECTION.NONE : direction3, - type: COMPONENT_TYPE.AXIS, - extra: { dim, scale: scale12 } - }; - axis22.component.set("field", scale12.field); - axis22.component.init(); - return axis22; - }; - Axis2.prototype.createLineGrid = function(scale12, option, layer, direction3, dim) { - var cfg = this.getLineGridCfg(scale12, option, direction3, dim); - if (cfg) { - var grid = { - component: new LineGrid(cfg), - layer, - direction: DIRECTION.NONE, - type: COMPONENT_TYPE.GRID, - extra: { - dim, - scale: scale12, - alignTick: (0, import_util263.get)(cfg, "alignTick", true) - } - }; - grid.component.init(); - return grid; - } - }; - Axis2.prototype.createCircleAxis = function(scale12, option, layer, direction3, dim) { - var axis22 = { - component: new CircleAxis(this.getCircleAxisCfg(scale12, option, direction3)), - layer, - direction: direction3, - type: COMPONENT_TYPE.AXIS, - extra: { dim, scale: scale12 } - }; - axis22.component.set("field", scale12.field); - axis22.component.init(); - return axis22; - }; - Axis2.prototype.createCircleGrid = function(scale12, option, layer, direction3, dim) { - var cfg = this.getCircleGridCfg(scale12, option, direction3, dim); - if (cfg) { - var grid = { - component: new CircleGrid(cfg), - layer, - direction: DIRECTION.NONE, - type: COMPONENT_TYPE.GRID, - extra: { - dim, - scale: scale12, - alignTick: (0, import_util263.get)(cfg, "alignTick", true) - } - }; - grid.component.init(); - return grid; - } - }; - Axis2.prototype.getLineAxisCfg = function(scale12, axisOption, direction3) { - var container2 = (0, import_util263.get)(axisOption, ["top"]) ? this.axisForeContainer : this.axisContainer; - var coordinate11 = this.view.getCoordinate(); - var region = getAxisRegion(coordinate11, direction3); - var titleText = getAxisTitleText(scale12, axisOption); - var axisThemeCfg = getAxisThemeCfg(this.view.getTheme(), direction3); - var optionWithTitle = (0, import_util263.get)(axisOption, ["title"]) ? (0, import_util263.deepMix)({ title: { style: { text: titleText } } }, { title: getAxisTitleOptions(this.view.getTheme(), direction3, axisOption.title) }, axisOption) : axisOption; - var cfg = (0, import_util263.deepMix)(__assign(__assign({ container: container2 }, region), { ticks: scale12.getTicks().map(function(tick) { - return { id: "".concat(tick.tickValue), name: tick.text, value: tick.value }; - }), verticalFactor: coordinate11.isPolar ? getAxisFactorByRegion(region, coordinate11.getCenter()) * -1 : getAxisFactorByRegion(region, coordinate11.getCenter()), theme: axisThemeCfg }), axisThemeCfg, optionWithTitle); - var _a6 = this.getAnimateCfg(cfg), animate = _a6.animate, animateOption = _a6.animateOption; - cfg.animateOption = animateOption; - cfg.animate = animate; - var isAxisVertical = isVertical(region); - var verticalLimitLength = (0, import_util263.get)(cfg, "verticalLimitLength", isAxisVertical ? 1 / 3 : 1 / 2); - if (verticalLimitLength <= 1) { - var canvasWidth = this.view.getCanvas().get("width"); - var canvasHeight = this.view.getCanvas().get("height"); - cfg.verticalLimitLength = verticalLimitLength * (isAxisVertical ? canvasWidth : canvasHeight); - } - return cfg; - }; - Axis2.prototype.getLineGridCfg = function(scale12, axisOption, direction3, dim) { - if (!showGrid(getAxisThemeCfg(this.view.getTheme(), direction3), axisOption)) { - return void 0; - } - var gridThemeCfg = getGridThemeCfg(this.view.getTheme(), direction3); - var gridCfg = (0, import_util263.deepMix)({ - container: (0, import_util263.get)(axisOption, ["top"]) ? this.gridForeContainer : this.gridContainer - }, gridThemeCfg, (0, import_util263.get)(axisOption, "grid"), this.getAnimateCfg(axisOption)); - gridCfg.items = getLineGridItems(this.view.getCoordinate(), scale12, dim, (0, import_util263.get)(gridCfg, "alignTick", true)); - return gridCfg; - }; - Axis2.prototype.getCircleAxisCfg = function(scale12, axisOption, direction3) { - var container2 = (0, import_util263.get)(axisOption, ["top"]) ? this.axisForeContainer : this.axisContainer; - var coordinate11 = this.view.getCoordinate(); - var ticks = scale12.getTicks().map(function(tick) { - return { id: "".concat(tick.tickValue), name: tick.text, value: tick.value }; - }); - if (!scale12.isCategory && Math.abs(coordinate11.endAngle - coordinate11.startAngle) === Math.PI * 2) { - ticks.pop(); - } - var titleText = getAxisTitleText(scale12, axisOption); - var axisThemeCfg = getAxisThemeCfg(this.view.getTheme(), DIRECTION.CIRCLE); - var optionWithTitle = (0, import_util263.get)(axisOption, ["title"]) ? (0, import_util263.deepMix)({ title: { style: { text: titleText } } }, { title: getAxisTitleOptions(this.view.getTheme(), direction3, axisOption.title) }, axisOption) : axisOption; - var cfg = (0, import_util263.deepMix)(__assign(__assign({ container: container2 }, getCircleAxisCenterRadius(this.view.getCoordinate())), { ticks, verticalFactor: 1, theme: axisThemeCfg }), axisThemeCfg, optionWithTitle); - var _a6 = this.getAnimateCfg(cfg), animate = _a6.animate, animateOption = _a6.animateOption; - cfg.animate = animate; - cfg.animateOption = animateOption; - return cfg; - }; - Axis2.prototype.getCircleGridCfg = function(scale12, axisOption, direction3, dim) { - if (!showGrid(getAxisThemeCfg(this.view.getTheme(), direction3), axisOption)) { - return void 0; - } - var gridThemeCfg = getGridThemeCfg(this.view.getTheme(), DIRECTION.RADIUS); - var gridCfg = (0, import_util263.deepMix)({ - container: (0, import_util263.get)(axisOption, ["top"]) ? this.gridForeContainer : this.gridContainer, - center: this.view.getCoordinate().getCenter() - }, gridThemeCfg, (0, import_util263.get)(axisOption, "grid"), this.getAnimateCfg(axisOption)); - var alignTick = (0, import_util263.get)(gridCfg, "alignTick", true); - var verticalScale = dim === "x" ? this.view.getYScales()[0] : this.view.getXScale(); - gridCfg.items = getCircleGridItems(this.view.getCoordinate(), verticalScale, scale12, alignTick, dim); - return gridCfg; - }; - Axis2.prototype.getId = function(name, key) { - var coordinate11 = this.view.getCoordinate(); - return "".concat(name, "-").concat(key, "-").concat(coordinate11.type); - }; - Axis2.prototype.getAnimateCfg = function(cfg) { - return { - animate: this.view.getOptions().animate && (0, import_util263.get)(cfg, "animate"), - animateOption: cfg && cfg.animateOption ? (0, import_util263.deepMix)({}, AXIS_DEFAULT_ANIMATE_CFG, cfg.animateOption) : AXIS_DEFAULT_ANIMATE_CFG - }; - }; - return Axis2; -}(Controller); -var axis_default = Axis; - -// node_modules/@antv/g2/esm/chart/controller/legend.js -var import_util264 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/util/direction.js -function directionToPosition(parentBBox, bbox, direction3) { - if (direction3 === DIRECTION.TOP) { - return [parentBBox.minX + parentBBox.width / 2 - bbox.width / 2, parentBBox.minY]; - } - if (direction3 === DIRECTION.BOTTOM) { - return [parentBBox.minX + parentBBox.width / 2 - bbox.width / 2, parentBBox.maxY - bbox.height]; - } - if (direction3 === DIRECTION.LEFT) { - return [parentBBox.minX, parentBBox.minY + parentBBox.height / 2 - bbox.height / 2]; - } - if (direction3 === DIRECTION.RIGHT) { - return [parentBBox.maxX - bbox.width, parentBBox.minY + parentBBox.height / 2 - bbox.height / 2]; - } - if (direction3 === DIRECTION.TOP_LEFT || direction3 === DIRECTION.LEFT_TOP) { - return [parentBBox.tl.x, parentBBox.tl.y]; - } - if (direction3 === DIRECTION.TOP_RIGHT || direction3 === DIRECTION.RIGHT_TOP) { - return [parentBBox.tr.x - bbox.width, parentBBox.tr.y]; - } - if (direction3 === DIRECTION.BOTTOM_LEFT || direction3 === DIRECTION.LEFT_BOTTOM) { - return [parentBBox.bl.x, parentBBox.bl.y - bbox.height]; - } - if (direction3 === DIRECTION.BOTTOM_RIGHT || direction3 === DIRECTION.RIGHT_BOTTOM) { - return [parentBBox.br.x - bbox.width, parentBBox.br.y - bbox.height]; - } - return [0, 0]; -} - -// node_modules/@antv/g2/esm/chart/controller/legend.js -function getLegendOption(legends, field6) { - if ((0, import_util264.isBoolean)(legends)) { - return legends === false ? false : {}; - } - return (0, import_util264.get)(legends, [field6], legends); -} -function getDirection(legendOption) { - return (0, import_util264.get)(legendOption, "position", DIRECTION.BOTTOM); -} -var Legend = function(_super) { - __extends(Legend4, _super); - function Legend4(view) { - var _this = _super.call(this, view) || this; - _this.container = _this.view.getLayer(LAYER.FORE).addGroup(); - return _this; - } - Object.defineProperty(Legend4.prototype, "name", { - get: function() { - return "legend"; - }, - enumerable: false, - configurable: true - }); - Legend4.prototype.init = function() { - }; - Legend4.prototype.render = function() { - this.update(); - }; - Legend4.prototype.layout = function() { - var _this = this; - this.layoutBBox = this.view.viewBBox; - (0, import_util264.each)(this.components, function(co) { - var component2 = co.component, direction3 = co.direction; - var layout6 = getLegendLayout(direction3); - var maxWidthRatio = component2.get("maxWidthRatio"); - var maxHeightRatio = component2.get("maxHeightRatio"); - var maxSize = _this.getCategoryLegendSizeCfg(layout6, maxWidthRatio, maxHeightRatio); - var maxWidth = component2.get("maxWidth"); - var maxHeight = component2.get("maxHeight"); - component2.update({ - maxWidth: Math.min(maxSize.maxWidth, maxWidth || 0), - maxHeight: Math.min(maxSize.maxHeight, maxHeight || 0) - }); - var padding3 = component2.get("padding"); - var bboxObject = component2.getLayoutBBox(); - var bbox = new BBox(bboxObject.x, bboxObject.y, bboxObject.width, bboxObject.height).expand(padding3); - var _a6 = directionToPosition(_this.view.viewBBox, bbox, direction3), x1 = _a6[0], y1 = _a6[1]; - var _b = directionToPosition(_this.layoutBBox, bbox, direction3), x22 = _b[0], y22 = _b[1]; - var x6 = 0; - var y5 = 0; - if (direction3.startsWith("top") || direction3.startsWith("bottom")) { - x6 = x1; - y5 = y22; - } else { - x6 = x22; - y5 = y1; - } - component2.setLocation({ x: x6 + padding3[3], y: y5 + padding3[0] }); - _this.layoutBBox = _this.layoutBBox.cut(bbox, direction3); - }); - }; - Legend4.prototype.update = function() { - var _this = this; - this.option = this.view.getOptions().legends; - var updated = {}; - var eachLegend = function(geometry35, attr, scale12) { - var id2 = _this.getId(scale12.field); - var existCo2 = _this.getComponentById(id2); - if (existCo2) { - var cfg = void 0; - var legendOption = getLegendOption(_this.option, scale12.field); - if (legendOption !== false) { - if ((0, import_util264.get)(legendOption, "custom")) { - cfg = _this.getCategoryCfg(geometry35, attr, scale12, legendOption, true); - } else { - if (scale12.isLinear) { - cfg = _this.getContinuousCfg(geometry35, attr, scale12, legendOption); - } else if (scale12.isCategory) { - cfg = _this.getCategoryCfg(geometry35, attr, scale12, legendOption); - } - } - } - if (cfg) { - omit(cfg, ["container"]); - existCo2.direction = getDirection(legendOption); - existCo2.component.update(cfg); - updated[id2] = true; - } - } else { - var legend18 = _this.createFieldLegend(geometry35, attr, scale12); - if (legend18) { - legend18.component.init(); - _this.components.push(legend18); - updated[id2] = true; - } - } - }; - if ((0, import_util264.get)(this.option, "custom")) { - var id = "global-custom"; - var existCo = this.getComponentById(id); - if (existCo) { - var customCfg = this.getCategoryCfg(void 0, void 0, void 0, this.option, true); - omit(customCfg, ["container"]); - existCo.component.update(customCfg); - updated[id] = true; - } else { - var component2 = this.createCustomLegend(void 0, void 0, void 0, this.option); - if (component2) { - component2.init(); - var layer = LAYER.FORE; - var direction3 = getDirection(this.option); - this.components.push({ - id, - component: component2, - layer, - direction: direction3, - type: COMPONENT_TYPE.LEGEND, - extra: void 0 - }); - updated[id] = true; - } - } - } else { - this.loopLegends(eachLegend); - } - var components = []; - (0, import_util264.each)(this.getComponents(), function(co) { - if (updated[co.id]) { - components.push(co); - } else { - co.component.destroy(); - } - }); - this.components = components; - }; - Legend4.prototype.clear = function() { - _super.prototype.clear.call(this); - this.container.clear(); - }; - Legend4.prototype.destroy = function() { - _super.prototype.destroy.call(this); - this.container.remove(true); - }; - Legend4.prototype.getGeometries = function(view) { - var _this = this; - var geometries = view.geometries; - (0, import_util264.each)(view.views, function(v3) { - geometries = geometries.concat(_this.getGeometries(v3)); - }); - return geometries; - }; - Legend4.prototype.loopLegends = function(doEach) { - var isRootView = this.view.getRootView() === this.view; - if (!isRootView) { - return; - } - var geometries = this.getGeometries(this.view); - var looped = {}; - (0, import_util264.each)(geometries, function(geometry35) { - var attributes = geometry35.getGroupAttributes(); - (0, import_util264.each)(attributes, function(attr) { - var scale12 = attr.getScale(attr.type); - if (!scale12 || scale12.type === "identity" || looped[scale12.field]) { - return; - } - doEach(geometry35, attr, scale12); - looped[scale12.field] = true; - }); - }); - }; - Legend4.prototype.createFieldLegend = function(geometry35, attr, scale12) { - var component2; - var legendOption = getLegendOption(this.option, scale12.field); - var layer = LAYER.FORE; - var direction3 = getDirection(legendOption); - if (legendOption !== false) { - if ((0, import_util264.get)(legendOption, "custom")) { - component2 = this.createCustomLegend(geometry35, attr, scale12, legendOption); - } else { - if (scale12.isLinear) { - component2 = this.createContinuousLegend(geometry35, attr, scale12, legendOption); - } else if (scale12.isCategory) { - component2 = this.createCategoryLegend(geometry35, attr, scale12, legendOption); - } - } - } - if (component2) { - component2.set("field", scale12.field); - return { - id: this.getId(scale12.field), - component: component2, - layer, - direction: direction3, - type: COMPONENT_TYPE.LEGEND, - extra: { scale: scale12 } - }; - } - }; - Legend4.prototype.createCustomLegend = function(geometry35, attr, scale12, legendOption) { - var cfg = this.getCategoryCfg(geometry35, attr, scale12, legendOption, true); - return new CategoryLegend(cfg); - }; - Legend4.prototype.createContinuousLegend = function(geometry35, attr, scale12, legendOption) { - var cfg = this.getContinuousCfg(geometry35, attr, scale12, omit(legendOption, ["value"])); - return new ContinuousLegend(cfg); - }; - Legend4.prototype.createCategoryLegend = function(geometry35, attr, scale12, legendOption) { - var cfg = this.getCategoryCfg(geometry35, attr, scale12, legendOption); - return new CategoryLegend(cfg); - }; - Legend4.prototype.getContinuousCfg = function(geometry35, attr, scale12, legendOption) { - var ticks = scale12.getTicks(); - var containMin = (0, import_util264.find)(ticks, function(tick) { - return tick.value === 0; - }); - var containMax = (0, import_util264.find)(ticks, function(tick) { - return tick.value === 1; - }); - var items = ticks.map(function(tick) { - var value2 = tick.value, tickValue = tick.tickValue; - var attrValue = attr.mapping(scale12.invert(value2)).join(""); - return { - value: tickValue, - attrValue, - color: attrValue, - scaleValue: value2 - }; - }); - if (!containMin) { - items.push({ - value: scale12.min, - attrValue: attr.mapping(scale12.invert(0)).join(""), - color: attr.mapping(scale12.invert(0)).join(""), - scaleValue: 0 - }); - } - if (!containMax) { - items.push({ - value: scale12.max, - attrValue: attr.mapping(scale12.invert(1)).join(""), - color: attr.mapping(scale12.invert(1)).join(""), - scaleValue: 1 - }); - } - items.sort(function(a4, b10) { - return a4.value - b10.value; - }); - var attrLegendCfg = { - min: (0, import_util264.head)(items).value, - max: (0, import_util264.last)(items).value, - colors: [], - rail: { - type: attr.type - }, - track: {} - }; - if (attr.type === "size") { - attrLegendCfg.track = { - style: { - fill: attr.type === "size" ? this.view.getTheme().defaultColor : void 0 - } - }; - } - if (attr.type === "color") { - attrLegendCfg.colors = items.map(function(item) { - return item.attrValue; - }); - } - var container2 = this.container; - var direction3 = getDirection(legendOption); - var layout6 = getLegendLayout(direction3); - var title = (0, import_util264.get)(legendOption, "title"); - if (title) { - title = (0, import_util264.deepMix)({ - text: getName(scale12) - }, title); - } - attrLegendCfg.container = container2; - attrLegendCfg.layout = layout6; - attrLegendCfg.title = title; - attrLegendCfg.animateOption = DEFAULT_ANIMATE_CFG; - return this.mergeLegendCfg(attrLegendCfg, legendOption, "continuous"); - }; - Legend4.prototype.getCategoryCfg = function(geometry35, attr, scale12, legendOption, custom12) { - var container2 = this.container; - var direction3 = (0, import_util264.get)(legendOption, "position", DIRECTION.BOTTOM); - var legendTheme = getLegendThemeCfg(this.view.getTheme(), direction3); - var themeMarker = (0, import_util264.get)(legendTheme, ["marker"]); - var userMarker = (0, import_util264.get)(legendOption, "marker"); - var layout6 = getLegendLayout(direction3); - var themePageNavigator = (0, import_util264.get)(legendTheme, ["pageNavigator"]); - var userPageNavigator = (0, import_util264.get)(legendOption, "pageNavigator"); - var items = custom12 ? getCustomLegendItems(themeMarker, userMarker, legendOption.items) : getLegendItems(this.view, geometry35, attr, themeMarker, userMarker); - var title = (0, import_util264.get)(legendOption, "title"); - if (title) { - title = (0, import_util264.deepMix)({ - text: scale12 ? getName(scale12) : "" - }, title); - } - var maxWidthRatio = (0, import_util264.get)(legendOption, "maxWidthRatio"); - var maxHeightRatio = (0, import_util264.get)(legendOption, "maxHeightRatio"); - var baseCfg = this.getCategoryLegendSizeCfg(layout6, maxWidthRatio, maxHeightRatio); - baseCfg.container = container2; - baseCfg.layout = layout6; - baseCfg.items = items; - baseCfg.title = title; - baseCfg.animateOption = DEFAULT_ANIMATE_CFG; - baseCfg.pageNavigator = (0, import_util264.deepMix)({}, themePageNavigator, userPageNavigator); - var categoryCfg = this.mergeLegendCfg(baseCfg, legendOption, direction3); - if (categoryCfg.reversed) { - categoryCfg.items.reverse(); - } - var maxItemWidth = (0, import_util264.get)(categoryCfg, "maxItemWidth"); - if (maxItemWidth && maxItemWidth <= 1) { - categoryCfg.maxItemWidth = this.view.viewBBox.width * maxItemWidth; - } - return categoryCfg; - }; - Legend4.prototype.mergeLegendCfg = function(baseCfg, legendOption, direction3) { - var position2 = direction3.split("-")[0]; - var themeObject = getLegendThemeCfg(this.view.getTheme(), position2); - return (0, import_util264.deepMix)({}, themeObject, baseCfg, legendOption); - }; - Legend4.prototype.getId = function(key) { - return "".concat(this.name, "-").concat(key); - }; - Legend4.prototype.getComponentById = function(id) { - return (0, import_util264.find)(this.components, function(co) { - return co.id === id; - }); - }; - Legend4.prototype.getCategoryLegendSizeCfg = function(layout6, maxWidthRatio, maxHeightRatio) { - if (maxWidthRatio === void 0) { - maxWidthRatio = COMPONENT_MAX_VIEW_PERCENTAGE; - } - if (maxHeightRatio === void 0) { - maxHeightRatio = COMPONENT_MAX_VIEW_PERCENTAGE; - } - var _a6 = this.view.viewBBox, vw = _a6.width, vh = _a6.height; - return layout6 === "vertical" ? { - maxWidth: vw * maxWidthRatio, - maxHeight: vh - } : { - maxWidth: vw, - maxHeight: vh * maxHeightRatio - }; - }; - return Legend4; -}(Controller); -var legend_default = Legend; - -// node_modules/@antv/g2/esm/chart/controller/slider.js -var import_util265 = __toModule(require_lib()); -var Slider2 = function(_super) { - __extends(Slider3, _super); - function Slider3(view) { - var _this = _super.call(this, view) || this; - _this.onChangeFn = import_util265.noop; - _this.resetMeasure = function() { - _this.clear(); - }; - _this.onValueChange = function(v3) { - var min13 = v3[0], max15 = v3[1]; - _this.start = min13; - _this.end = max15; - _this.changeViewData(min13, max15); - }; - _this.container = _this.view.getLayer(LAYER.FORE).addGroup(); - _this.onChangeFn = (0, import_util265.throttle)(_this.onValueChange, 20, { - leading: true - }); - _this.width = 0; - _this.view.on(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, _this.resetMeasure); - _this.view.on(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_SIZE, _this.resetMeasure); - return _this; - } - Object.defineProperty(Slider3.prototype, "name", { - get: function() { - return "slider"; - }, - enumerable: false, - configurable: true - }); - Slider3.prototype.destroy = function() { - _super.prototype.destroy.call(this); - this.view.off(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, this.resetMeasure); - this.view.off(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_SIZE, this.resetMeasure); - }; - Slider3.prototype.init = function() { - }; - Slider3.prototype.render = function() { - this.option = this.view.getOptions().slider; - var _a6 = this.getSliderCfg(), start = _a6.start, end2 = _a6.end; - if ((0, import_util265.isNil)(this.start)) { - this.start = start; - this.end = end2; - } - var viewData = this.view.getOptions().data; - if (this.option && !(0, import_util265.isEmpty)(viewData)) { - if (this.slider) { - this.slider = this.updateSlider(); - } else { - this.slider = this.createSlider(); - this.slider.component.on("sliderchange", this.onChangeFn); - } - } else { - if (this.slider) { - this.slider.component.destroy(); - this.slider = void 0; - } else { - } - } - }; - Slider3.prototype.layout = function() { - var _this = this; - if (this.option && !this.width) { - this.measureSlider(); - setTimeout(function() { - if (!_this.view.destroyed) { - _this.changeViewData(_this.start, _this.end); - } - }, 0); - } - if (this.slider) { - var width2 = this.view.coordinateBBox.width; - var padding3 = this.slider.component.get("padding"); - var paddingTop = padding3[0], paddingRight = padding3[1], paddingBottom = padding3[2], paddingLeft = padding3[3]; - var bboxObject = this.slider.component.getLayoutBBox(); - var bbox = new BBox(bboxObject.x, bboxObject.y, Math.min(bboxObject.width, width2), bboxObject.height).expand(padding3); - var _a6 = this.getMinMaxText(this.start, this.end), minText = _a6.minText, maxText = _a6.maxText; - var _b = directionToPosition(this.view.viewBBox, bbox, DIRECTION.BOTTOM), x1 = _b[0], y1 = _b[1]; - var _c = directionToPosition(this.view.coordinateBBox, bbox, DIRECTION.BOTTOM), x22 = _c[0], y22 = _c[1]; - this.slider.component.update(__assign(__assign({}, this.getSliderCfg()), { x: x22 + paddingLeft, y: y1 + paddingTop, width: this.width, start: this.start, end: this.end, minText, maxText })); - this.view.viewBBox = this.view.viewBBox.cut(bbox, DIRECTION.BOTTOM); - } - }; - Slider3.prototype.update = function() { - this.render(); - }; - Slider3.prototype.createSlider = function() { - var cfg = this.getSliderCfg(); - var component2 = new Slider(__assign({ container: this.container }, cfg)); - component2.init(); - return { - component: component2, - layer: LAYER.FORE, - direction: DIRECTION.BOTTOM, - type: COMPONENT_TYPE.SLIDER - }; - }; - Slider3.prototype.updateSlider = function() { - var cfg = this.getSliderCfg(); - if (this.width) { - var _a6 = this.getMinMaxText(this.start, this.end), minText = _a6.minText, maxText = _a6.maxText; - cfg = __assign(__assign({}, cfg), { width: this.width, start: this.start, end: this.end, minText, maxText }); - } - this.slider.component.update(cfg); - return this.slider; - }; - Slider3.prototype.measureSlider = function() { - var width2 = this.getSliderCfg().width; - this.width = width2; - }; - Slider3.prototype.getSliderCfg = function() { - var cfg = { - height: 16, - start: 0, - end: 1, - minText: "", - maxText: "", - x: 0, - y: 0, - width: this.view.coordinateBBox.width - }; - if ((0, import_util265.isObject)(this.option)) { - var trendCfg = __assign({ data: this.getData() }, (0, import_util265.get)(this.option, "trendCfg", {})); - cfg = (0, import_util265.deepMix)({}, cfg, this.getThemeOptions(), this.option); - cfg = __assign(__assign({}, cfg), { trendCfg }); - } - cfg.start = (0, import_util265.clamp)(Math.min((0, import_util265.isNil)(cfg.start) ? 0 : cfg.start, (0, import_util265.isNil)(cfg.end) ? 1 : cfg.end), 0, 1); - cfg.end = (0, import_util265.clamp)(Math.max((0, import_util265.isNil)(cfg.start) ? 0 : cfg.start, (0, import_util265.isNil)(cfg.end) ? 1 : cfg.end), 0, 1); - return cfg; - }; - Slider3.prototype.getData = function() { - var data3 = this.view.getOptions().data; - var yScale = this.view.getYScales()[0]; - var groupScales = this.view.getGroupScales(); - if (groupScales.length) { - var _a6 = groupScales[0], field_1 = _a6.field, ticks_1 = _a6.ticks; - return data3.reduce(function(pre, cur) { - if (cur[field_1] === ticks_1[0]) { - pre.push(cur[yScale.field]); - } - return pre; - }, []); - } - return data3.map(function(datum) { - return datum[yScale.field] || 0; - }); - }; - Slider3.prototype.getThemeOptions = function() { - var theme4 = this.view.getTheme(); - return (0, import_util265.get)(theme4, ["components", "slider", "common"], {}); - }; - Slider3.prototype.getMinMaxText = function(min13, max15) { - var data3 = this.view.getOptions().data; - var xScale = this.view.getXScale(); - var isHorizontal2 = true; - var values4 = (0, import_util265.valuesOfKey)(data3, xScale.field); - if (xScale.isLinear) { - values4 = values4.sort(); - } - var xValues = isHorizontal2 ? values4 : values4.reverse(); - var dataSize = (0, import_util265.size)(data3); - if (!xScale || !dataSize) { - return {}; - } - var xTickCount = (0, import_util265.size)(xValues); - var minIndex = Math.floor(min13 * (xTickCount - 1)); - var maxIndex = Math.floor(max15 * (xTickCount - 1)); - var minText = (0, import_util265.get)(xValues, [minIndex]); - var maxText = (0, import_util265.get)(xValues, [maxIndex]); - var formatter = this.getSliderCfg().formatter; - if (formatter) { - minText = formatter(minText, data3[minIndex], minIndex); - maxText = formatter(maxText, data3[maxIndex], maxIndex); - } - return { - minText, - maxText - }; - }; - Slider3.prototype.changeViewData = function(min13, max15) { - var data3 = this.view.getOptions().data; - var xScale = this.view.getXScale(); - var dataSize = (0, import_util265.size)(data3); - if (!xScale || !dataSize) { - return; - } - var isHorizontal2 = true; - var values4 = (0, import_util265.valuesOfKey)(data3, xScale.field); - var xScaleValues = this.view.getXScale().isLinear ? values4.sort(function(a4, b10) { - return Number(a4) - Number(b10); - }) : values4; - var xValues = isHorizontal2 ? xScaleValues : xScaleValues.reverse(); - var xTickCount = (0, import_util265.size)(xValues); - var minIndex = Math.floor(min13 * (xTickCount - 1)); - var maxIndex = Math.floor(max15 * (xTickCount - 1)); - this.view.filter(xScale.field, function(value2, datum) { - var idx = xValues.indexOf(value2); - return idx > -1 ? isBetween2(idx, minIndex, maxIndex) : true; - }); - this.view.render(true); - }; - Slider3.prototype.getComponents = function() { - return this.slider ? [this.slider] : []; - }; - Slider3.prototype.clear = function() { - if (this.slider) { - this.slider.component.destroy(); - this.slider = void 0; - } - this.width = 0; - this.start = void 0; - this.end = void 0; - }; - return Slider3; -}(Controller); -var slider_default = Slider2; - -// node_modules/@antv/g2/esm/chart/controller/scrollbar.js -var import_util266 = __toModule(require_lib()); -var DEFAULT_PADDING = 0; -var DEFAULT_SIZE = 8; -var DEFAULT_CATEGORY_SIZE = 32; -var MIN_THUMB_LENGTH = 20; -var Scrollbar2 = function(_super) { - __extends(Scrollbar3, _super); - function Scrollbar3(view) { - var _this = _super.call(this, view) || this; - _this.onChangeFn = import_util266.noop; - _this.resetMeasure = function() { - _this.clear(); - }; - _this.onValueChange = function(_a6) { - var ratio = _a6.ratio; - var animate = _this.getValidScrollbarCfg().animate; - _this.ratio = (0, import_util266.clamp)(ratio, 0, 1); - var originalAnimate = _this.view.getOptions().animate; - if (!animate) { - _this.view.animate(false); - } - _this.changeViewData(_this.getScrollRange(), true); - _this.view.animate(originalAnimate); - }; - _this.container = _this.view.getLayer(LAYER.FORE).addGroup(); - _this.onChangeFn = (0, import_util266.throttle)(_this.onValueChange, 20, { - leading: true - }); - _this.trackLen = 0; - _this.thumbLen = 0; - _this.ratio = 0; - _this.view.on(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, _this.resetMeasure); - _this.view.on(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_SIZE, _this.resetMeasure); - return _this; - } - Object.defineProperty(Scrollbar3.prototype, "name", { - get: function() { - return "scrollbar"; - }, - enumerable: false, - configurable: true - }); - Scrollbar3.prototype.destroy = function() { - _super.prototype.destroy.call(this); - this.view.off(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, this.resetMeasure); - this.view.off(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_SIZE, this.resetMeasure); - }; - Scrollbar3.prototype.init = function() { - }; - Scrollbar3.prototype.render = function() { - this.option = this.view.getOptions().scrollbar; - if (this.option) { - if (this.scrollbar) { - this.scrollbar = this.updateScrollbar(); - } else { - this.scrollbar = this.createScrollbar(); - this.scrollbar.component.on("scrollchange", this.onChangeFn); - } - } else { - if (this.scrollbar) { - this.scrollbar.component.destroy(); - this.scrollbar = void 0; - } - } - }; - Scrollbar3.prototype.layout = function() { - var _this = this; - if (this.option && !this.trackLen) { - this.measureScrollbar(); - setTimeout(function() { - if (!_this.view.destroyed) { - _this.changeViewData(_this.getScrollRange(), true); - } - }); - } - if (this.scrollbar) { - var width2 = this.view.coordinateBBox.width; - var padding3 = this.scrollbar.component.get("padding"); - var bboxObject = this.scrollbar.component.getLayoutBBox(); - var bbox = new BBox(bboxObject.x, bboxObject.y, Math.min(bboxObject.width, width2), bboxObject.height).expand(padding3); - var cfg = this.getScrollbarComponentCfg(); - var x6 = void 0; - var y5 = void 0; - if (cfg.isHorizontal) { - var _a6 = directionToPosition(this.view.viewBBox, bbox, DIRECTION.BOTTOM), x1 = _a6[0], y1 = _a6[1]; - var _b = directionToPosition(this.view.coordinateBBox, bbox, DIRECTION.BOTTOM), x22 = _b[0], y22 = _b[1]; - x6 = x22; - y5 = y1; - } else { - var _c = directionToPosition(this.view.viewBBox, bbox, DIRECTION.RIGHT), x1 = _c[0], y1 = _c[1]; - var _d = directionToPosition(this.view.viewBBox, bbox, DIRECTION.RIGHT), x22 = _d[0], y22 = _d[1]; - x6 = x22; - y5 = y1; - } - x6 += padding3[3]; - y5 += padding3[0]; - if (this.trackLen) { - this.scrollbar.component.update(__assign(__assign({}, cfg), { x: x6, y: y5, trackLen: this.trackLen, thumbLen: this.thumbLen, thumbOffset: (this.trackLen - this.thumbLen) * this.ratio })); - } else { - this.scrollbar.component.update(__assign(__assign({}, cfg), { x: x6, y: y5 })); - } - this.view.viewBBox = this.view.viewBBox.cut(bbox, cfg.isHorizontal ? DIRECTION.BOTTOM : DIRECTION.RIGHT); - } - }; - Scrollbar3.prototype.update = function() { - this.render(); - }; - Scrollbar3.prototype.getComponents = function() { - return this.scrollbar ? [this.scrollbar] : []; - }; - Scrollbar3.prototype.clear = function() { - if (this.scrollbar) { - this.scrollbar.component.destroy(); - this.scrollbar = void 0; - } - this.trackLen = 0; - this.thumbLen = 0; - this.ratio = 0; - this.cnt = 0; - this.step = 0; - this.data = void 0; - this.xScaleCfg = void 0; - this.yScalesCfg = []; - }; - Scrollbar3.prototype.setValue = function(ratio) { - this.onValueChange({ ratio }); - }; - Scrollbar3.prototype.getValue = function() { - return this.ratio; - }; - Scrollbar3.prototype.getThemeOptions = function() { - var theme4 = this.view.getTheme(); - return (0, import_util266.get)(theme4, ["components", "scrollbar", "common"], {}); - }; - Scrollbar3.prototype.getScrollbarTheme = function(style) { - var theme4 = (0, import_util266.get)(this.view.getTheme(), ["components", "scrollbar"]); - var _a6 = style || {}, thumbHighlightColor = _a6.thumbHighlightColor, restStyles = __rest(_a6, ["thumbHighlightColor"]); - return { - default: (0, import_util266.deepMix)({}, (0, import_util266.get)(theme4, ["default", "style"], {}), restStyles), - hover: (0, import_util266.deepMix)({}, (0, import_util266.get)(theme4, ["hover", "style"], {}), { thumbColor: thumbHighlightColor }) - }; - }; - Scrollbar3.prototype.measureScrollbar = function() { - var xScale = this.view.getXScale(); - var yScales = this.view.getYScales().slice(); - this.data = this.getScrollbarData(); - this.step = this.getStep(); - this.cnt = this.getCnt(); - var _a6 = this.getScrollbarComponentCfg(), trackLen = _a6.trackLen, thumbLen = _a6.thumbLen; - this.trackLen = trackLen; - this.thumbLen = thumbLen; - this.xScaleCfg = { - field: xScale.field, - values: xScale.values || [] - }; - this.yScalesCfg = yScales; - }; - Scrollbar3.prototype.getScrollRange = function() { - var startIdx = Math.floor((this.cnt - this.step) * (0, import_util266.clamp)(this.ratio, 0, 1)); - var endIdx = Math.min(startIdx + this.step - 1, this.cnt - 1); - return [startIdx, endIdx]; - }; - Scrollbar3.prototype.changeViewData = function(_a6, render) { - var _this = this; - var startIdx = _a6[0], endIdx = _a6[1]; - var type2 = this.getValidScrollbarCfg().type; - var isHorizontal2 = type2 !== "vertical"; - var values4 = (0, import_util266.valuesOfKey)(this.data, this.xScaleCfg.field); - var xScaleValues = this.view.getXScale().isLinear ? values4.sort(function(a4, b10) { - return Number(a4) - Number(b10); - }) : values4; - var xValues = isHorizontal2 ? xScaleValues : xScaleValues.reverse(); - this.yScalesCfg.forEach(function(cfg) { - _this.view.scale(cfg.field, { - formatter: cfg.formatter, - type: cfg.type, - min: cfg.min, - max: cfg.max, - tickMethod: cfg.tickMethod - }); - }); - this.view.filter(this.xScaleCfg.field, function(val) { - var idx = xValues.indexOf(val); - return idx > -1 ? isBetween2(idx, startIdx, endIdx) : true; - }); - this.view.render(true); - }; - Scrollbar3.prototype.createScrollbar = function() { - var type2 = this.getValidScrollbarCfg().type; - var isHorizontal2 = type2 !== "vertical"; - var component2 = new Scrollbar(__assign(__assign({ container: this.container }, this.getScrollbarComponentCfg()), { x: 0, y: 0 })); - component2.init(); - return { - component: component2, - layer: LAYER.FORE, - direction: isHorizontal2 ? DIRECTION.BOTTOM : DIRECTION.RIGHT, - type: COMPONENT_TYPE.SCROLLBAR - }; - }; - Scrollbar3.prototype.updateScrollbar = function() { - var config = this.getScrollbarComponentCfg(); - var realConfig = this.trackLen ? __assign(__assign({}, config), { trackLen: this.trackLen, thumbLen: this.thumbLen, thumbOffset: (this.trackLen - this.thumbLen) * this.ratio }) : __assign({}, config); - this.scrollbar.component.update(realConfig); - return this.scrollbar; - }; - Scrollbar3.prototype.getStep = function() { - if (this.step) { - return this.step; - } - var coordinateBBox = this.view.coordinateBBox; - var _a6 = this.getValidScrollbarCfg(), type2 = _a6.type, categorySize = _a6.categorySize; - var isHorizontal2 = type2 !== "vertical"; - return Math.floor((isHorizontal2 ? coordinateBBox.width : coordinateBBox.height) / categorySize); - }; - Scrollbar3.prototype.getCnt = function() { - if (this.cnt) { - return this.cnt; - } - var xScale = this.view.getXScale(); - var data3 = this.getScrollbarData(); - var values4 = (0, import_util266.valuesOfKey)(data3, xScale.field); - return (0, import_util266.size)(values4); - }; - Scrollbar3.prototype.getScrollbarComponentCfg = function() { - var _a6 = this.view, coordinateBBox = _a6.coordinateBBox, viewBBox = _a6.viewBBox; - var _b = this.getValidScrollbarCfg(), type2 = _b.type, padding3 = _b.padding, width2 = _b.width, height = _b.height, style = _b.style; - var isHorizontal2 = type2 !== "vertical"; - var paddingTop = padding3[0], paddingRight = padding3[1], paddingBottom = padding3[2], paddingLeft = padding3[3]; - var position2 = isHorizontal2 ? { - x: coordinateBBox.minX + paddingLeft, - y: viewBBox.maxY - height - paddingBottom - } : { - x: viewBBox.maxX - width2 - paddingRight, - y: coordinateBBox.minY + paddingTop - }; - var step = this.getStep(); - var cnt = this.getCnt(); - var trackLen = isHorizontal2 ? coordinateBBox.width - paddingLeft - paddingRight : coordinateBBox.height - paddingTop - paddingBottom; - var thumbLen = Math.max(trackLen * (0, import_util266.clamp)(step / cnt, 0, 1), MIN_THUMB_LENGTH); - return __assign(__assign({}, this.getThemeOptions()), { x: position2.x, y: position2.y, size: isHorizontal2 ? height : width2, isHorizontal: isHorizontal2, trackLen, thumbLen, thumbOffset: 0, theme: this.getScrollbarTheme(style) }); - }; - Scrollbar3.prototype.getValidScrollbarCfg = function() { - var cfg = { - type: "horizontal", - categorySize: DEFAULT_CATEGORY_SIZE, - width: DEFAULT_SIZE, - height: DEFAULT_SIZE, - padding: [0, 0, 0, 0], - animate: true, - style: {} - }; - if ((0, import_util266.isObject)(this.option)) { - cfg = __assign(__assign({}, cfg), this.option); - } - if (!(0, import_util266.isObject)(this.option) || !this.option.padding) { - cfg.padding = cfg.type === "horizontal" ? [DEFAULT_PADDING, 0, DEFAULT_PADDING, 0] : [0, DEFAULT_PADDING, 0, DEFAULT_PADDING]; - } - return cfg; - }; - Scrollbar3.prototype.getScrollbarData = function() { - var coordinate11 = this.view.getCoordinate(); - var cfg = this.getValidScrollbarCfg(); - var data3 = this.view.getOptions().data || []; - if (coordinate11.isReflect("y") && cfg.type === "vertical") { - data3 = __spreadArray([], data3, true).reverse(); - } - return data3; - }; - return Scrollbar3; -}(Controller); -var scrollbar_default = Scrollbar2; - -// node_modules/@antv/g2/esm/interaction/action/active-region.js -var import_util267 = __toModule(require_lib()); -var DEFAULT_REGION_PATH_STYLE = { - fill: "#CCD6EC", - opacity: 0.3 -}; -function getItemsOfView(view, point2, tooltipCfg) { - var items = findItemsFromViewRecurisive(view, point2, tooltipCfg); - if (items.length) { - items = (0, import_util267.flatten)(items); - for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { - var itemArr = items_1[_i]; - for (var _a6 = 0, itemArr_1 = itemArr; _a6 < itemArr_1.length; _a6++) { - var item = itemArr_1[_a6]; - var _b = item.mappingData, x6 = _b.x, y5 = _b.y; - item.x = (0, import_util267.isArray)(x6) ? x6[x6.length - 1] : x6; - item.y = (0, import_util267.isArray)(y5) ? y5[y5.length - 1] : y5; - } - } - var shared = tooltipCfg.shared; - if (shared === false && items.length > 1) { - var snapItem = items[0]; - var min13 = Math.abs(point2.y - snapItem[0].y); - for (var _c = 0, items_2 = items; _c < items_2.length; _c++) { - var aItem = items_2[_c]; - var yDistance = Math.abs(point2.y - aItem[0].y); - if (yDistance <= min13) { - snapItem = aItem; - min13 = yDistance; - } - } - items = [snapItem]; - } - return (0, import_util267.uniq)((0, import_util267.flatten)(items)); - } - return []; -} -var ActiveRegion = function(_super) { - __extends(ActiveRegion2, _super); - function ActiveRegion2() { - return _super !== null && _super.apply(this, arguments) || this; - } - ActiveRegion2.prototype.show = function(args) { - var view = this.context.view; - var ev = this.context.event; - var tooltipCfg = view.getController("tooltip").getTooltipCfg(); - var tooltipItems = getItemsOfView(view, { - x: ev.x, - y: ev.y - }, tooltipCfg); - if ((0, import_util267.isEqual)(tooltipItems, this.items)) { - return; - } - this.items = tooltipItems; - if (tooltipItems.length) { - var xField_1 = view.getXScale().field; - var xValue_1 = tooltipItems[0].data[xField_1]; - var elements_1 = []; - var geometries = view.geometries; - (0, import_util267.each)(geometries, function(geometry35) { - if (geometry35.type === "interval" || geometry35.type === "schema") { - var result = geometry35.getElementsBy(function(ele) { - var eleData = ele.getData(); - return eleData[xField_1] === xValue_1; - }); - elements_1 = elements_1.concat(result); - } - }); - if (elements_1.length) { - var coordinate_1 = view.getCoordinate(); - var firstBBox_1 = elements_1[0].shape.getCanvasBBox(); - var lastBBox_1 = elements_1[0].shape.getCanvasBBox(); - var groupBBox_1 = firstBBox_1; - (0, import_util267.each)(elements_1, function(ele) { - var bbox = ele.shape.getCanvasBBox(); - if (coordinate_1.isTransposed) { - if (bbox.minY < firstBBox_1.minY) { - firstBBox_1 = bbox; - } - if (bbox.maxY > lastBBox_1.maxY) { - lastBBox_1 = bbox; - } - } else { - if (bbox.minX < firstBBox_1.minX) { - firstBBox_1 = bbox; - } - if (bbox.maxX > lastBBox_1.maxX) { - lastBBox_1 = bbox; - } - } - groupBBox_1.x = Math.min(bbox.minX, groupBBox_1.minX); - groupBBox_1.y = Math.min(bbox.minY, groupBBox_1.minY); - groupBBox_1.width = Math.max(bbox.maxX, groupBBox_1.maxX) - groupBBox_1.x; - groupBBox_1.height = Math.max(bbox.maxY, groupBBox_1.maxY) - groupBBox_1.y; - }); - var backgroundGroup = view.backgroundGroup, coordinateBBox = view.coordinateBBox; - var path = void 0; - if (coordinate_1.isRect) { - var xScale = view.getXScale(); - var _a6 = args || {}, appendRatio = _a6.appendRatio, appendWidth = _a6.appendWidth; - if ((0, import_util267.isNil)(appendWidth)) { - appendRatio = (0, import_util267.isNil)(appendRatio) ? xScale.isLinear ? 0 : 0.25 : appendRatio; - appendWidth = coordinate_1.isTransposed ? appendRatio * lastBBox_1.height : appendRatio * firstBBox_1.width; - } - var minX = void 0; - var minY = void 0; - var width2 = void 0; - var height = void 0; - if (coordinate_1.isTransposed) { - minX = coordinateBBox.minX; - minY = Math.min(lastBBox_1.minY, firstBBox_1.minY) - appendWidth; - width2 = coordinateBBox.width; - height = groupBBox_1.height + appendWidth * 2; - } else { - minX = Math.min(firstBBox_1.minX, lastBBox_1.minX) - appendWidth; - minY = coordinateBBox.minY; - width2 = groupBBox_1.width + appendWidth * 2; - height = coordinateBBox.height; - } - path = [ - ["M", minX, minY], - ["L", minX + width2, minY], - ["L", minX + width2, minY + height], - ["L", minX, minY + height], - ["Z"] - ]; - } else { - var firstElement = (0, import_util267.head)(elements_1); - var lastElement = (0, import_util267.last)(elements_1); - var startAngle = getAngle3(firstElement.getModel(), coordinate_1).startAngle; - var endAngle = getAngle3(lastElement.getModel(), coordinate_1).endAngle; - var center2 = coordinate_1.getCenter(); - var radius = coordinate_1.getRadius(); - var innterRadius = coordinate_1.innerRadius * radius; - path = getSectorPath(center2.x, center2.y, radius, startAngle, endAngle, innterRadius); - } - if (this.regionPath) { - this.regionPath.attr("path", path); - this.regionPath.show(); - } else { - var style = (0, import_util267.get)(args, "style", DEFAULT_REGION_PATH_STYLE); - this.regionPath = backgroundGroup.addShape({ - type: "path", - name: "active-region", - capture: false, - attrs: __assign(__assign({}, style), { path }) - }); - } - } - } - }; - ActiveRegion2.prototype.hide = function() { - if (this.regionPath) { - this.regionPath.hide(); - } - this.items = null; - }; - ActiveRegion2.prototype.destroy = function() { - this.hide(); - if (this.regionPath) { - this.regionPath.remove(true); - } - _super.prototype.destroy.call(this); - }; - return ActiveRegion2; -}(base_default12); -var active_region_default = ActiveRegion; - -// node_modules/@antv/g2/esm/interaction/action/component/tooltip/sibling.js -var import_util269 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/interaction/action/component/tooltip/geometry.js -var import_util268 = __toModule(require_lib()); -var TooltipAction = function(_super) { - __extends(TooltipAction2, _super); - function TooltipAction2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.timeStamp = 0; - return _this; - } - TooltipAction2.prototype.show = function() { - var context = this.context; - var ev = context.event; - var view = context.view; - var isTooltipLocked = view.isTooltipLocked(); - if (isTooltipLocked) { - return; - } - var lastTimeStamp = this.timeStamp; - var timeStamp = +new Date(); - var showDelay = (0, import_util268.get)(context.view.getOptions(), "tooltip.showDelay", 16); - if (timeStamp - lastTimeStamp > showDelay) { - var preLoc = this.location; - var curLoc = { x: ev.x, y: ev.y }; - if (!preLoc || !(0, import_util268.isEqual)(preLoc, curLoc)) { - this.showTooltip(view, curLoc); - } - this.timeStamp = timeStamp; - this.location = curLoc; - } - }; - TooltipAction2.prototype.hide = function() { - var view = this.context.view; - var tooltip10 = view.getController("tooltip"); - var _a6 = this.context.event, clientX = _a6.clientX, clientY = _a6.clientY; - if (tooltip10.isCursorEntered({ x: clientX, y: clientY })) { - return; - } - if (view.isTooltipLocked()) { - return; - } - this.hideTooltip(view); - this.location = null; - }; - TooltipAction2.prototype.showTooltip = function(view, point2) { - view.showTooltip(point2); - }; - TooltipAction2.prototype.hideTooltip = function(view) { - view.hideTooltip(); - }; - return TooltipAction2; -}(base_default12); -var geometry_default = TooltipAction; - -// node_modules/@antv/g2/esm/interaction/action/component/tooltip/sibling.js -var SiblingTooltip = function(_super) { - __extends(SiblingTooltip2, _super); - function SiblingTooltip2() { - return _super !== null && _super.apply(this, arguments) || this; - } - SiblingTooltip2.prototype.showTooltip = function(view, point2) { - var siblings = getSilbings(view); - (0, import_util269.each)(siblings, function(sibling) { - var siblingPoint = getSiblingPoint(view, sibling, point2); - sibling.showTooltip(siblingPoint); - }); - }; - SiblingTooltip2.prototype.hideTooltip = function(view) { - var siblings = getSilbings(view); - (0, import_util269.each)(siblings, function(sibling) { - sibling.hideTooltip(); - }); - }; - return SiblingTooltip2; -}(geometry_default); -var sibling_default = SiblingTooltip; - -// node_modules/@antv/g2/esm/interaction/action/component/tooltip/ellipsis-text.js -var import_util271 = __toModule(require_lib()); -var EllipsisText = function(_super) { - __extends(EllipsisText2, _super); - function EllipsisText2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.timeStamp = 0; - return _this; - } - EllipsisText2.prototype.destroy = function() { - _super.prototype.destroy.call(this); - this.tooltip && this.tooltip.destroy(); - }; - EllipsisText2.prototype.show = function() { - var context = this.context; - var ev = context.event; - var lastTimeStamp = this.timeStamp; - var timeStamp = +new Date(); - if (timeStamp - lastTimeStamp > 16) { - var preLoc = this.location; - var curLoc = { x: ev.x, y: ev.y }; - if (!preLoc || !(0, import_util271.isEqual)(preLoc, curLoc)) { - this.showTooltip(curLoc); - } - this.timeStamp = timeStamp; - this.location = curLoc; - } - }; - EllipsisText2.prototype.hide = function() { - this.hideTooltip(); - this.location = null; - }; - EllipsisText2.prototype.showTooltip = function(curLoc) { - var context = this.context; - var ev = context.event; - var target = ev.target; - if (target && target.get("tip")) { - if (!this.tooltip) { - this.renderTooltip(); - } - var tipContent = target.get("tip"); - this.tooltip.update(__assign({ title: tipContent }, curLoc)); - this.tooltip.show(); - } - }; - EllipsisText2.prototype.hideTooltip = function() { - this.tooltip && this.tooltip.hide(); - }; - EllipsisText2.prototype.renderTooltip = function() { - var _a6; - var view = this.context.view; - var canvas = view.canvas; - var region = { - start: { x: 0, y: 0 }, - end: { x: canvas.get("width"), y: canvas.get("height") } - }; - var theme4 = view.getTheme(); - var tooltipStyles = (0, import_util271.get)(theme4, ["components", "tooltip", "domStyles"], {}); - var tooltip10 = new HtmlTooltip({ - parent: canvas.get("el").parentNode, - region, - visible: false, - crosshairs: null, - domStyles: __assign({}, (0, import_util271.deepMix)({}, tooltipStyles, (_a6 = {}, _a6[css_const_exports.CONTAINER_CLASS] = { "max-width": "50%" }, _a6[css_const_exports.TITLE_CLASS] = { "word-break": "break-all" }, _a6))) - }); - tooltip10.init(); - tooltip10.setCapture(false); - this.tooltip = tooltip10; - }; - return EllipsisText2; -}(base_default12); -var ellipsis_text_default = EllipsisText; - -// node_modules/@antv/g2/esm/interaction/action/element/state.js -var import_util274 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/interaction/action/element/state-base.js -var import_util272 = __toModule(require_lib()); -var StateBase = function(_super) { - __extends(StateBase2, _super); - function StateBase2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = ""; - return _this; - } - StateBase2.prototype.hasState = function(element) { - return element.hasState(this.stateName); - }; - StateBase2.prototype.setElementState = function(element, enable) { - element.setState(this.stateName, enable); - }; - StateBase2.prototype.setState = function() { - this.setStateEnable(true); - }; - StateBase2.prototype.clear = function() { - var view = this.context.view; - this.clearViewState(view); - }; - StateBase2.prototype.clearViewState = function(view) { - var _this = this; - var elements = getElementsByState(view, this.stateName); - (0, import_util272.each)(elements, function(el) { - _this.setElementState(el, false); - }); - }; - return StateBase2; -}(base_default12); -var state_base_default = StateBase; - -// node_modules/@antv/g2/esm/interaction/action/element/state.js -function getItem(shape) { - return (0, import_util274.get)(shape.get("delegateObject"), "item"); -} -var ElementState = function(_super) { - __extends(ElementState2, _super); - function ElementState2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.ignoreListItemStates = ["unchecked"]; - return _this; - } - ElementState2.prototype.isItemIgnore = function(item, list) { - var states = this.ignoreListItemStates; - var filtered = states.filter(function(state2) { - return list.hasState(item, state2); - }); - return !!filtered.length; - }; - ElementState2.prototype.setStateByComponent = function(component2, item, enable) { - var view = this.context.view; - var field6 = component2.get("field"); - var elements = getElements(view); - this.setElementsStateByItem(elements, field6, item, enable); - }; - ElementState2.prototype.setStateByElement = function(element, enable) { - this.setElementState(element, enable); - }; - ElementState2.prototype.isMathItem = function(element, field6, item) { - var view = this.context.view; - var scale12 = getScaleByField(view, field6); - var value2 = getElementValue(element, field6); - return !(0, import_util274.isNil)(value2) && item.name === scale12.getText(value2); - }; - ElementState2.prototype.setElementsStateByItem = function(elements, field6, item, enable) { - var _this = this; - (0, import_util274.each)(elements, function(el) { - if (_this.isMathItem(el, field6, item)) { - el.setState(_this.stateName, enable); - } - }); - }; - ElementState2.prototype.setStateEnable = function(enable) { - var element = getCurrentElement(this.context); - if (element) { - if (isElementChange(this.context)) { - this.setStateByElement(element, enable); - } - } else { - var delegateObject = getDelegationObject(this.context); - if (isList(delegateObject)) { - var item = delegateObject.item, component2 = delegateObject.component; - if (item && component2 && !this.isItemIgnore(item, component2)) { - var event_1 = this.context.event.gEvent; - if (event_1 && event_1.fromShape && event_1.toShape && getItem(event_1.fromShape) === getItem(event_1.toShape)) { - return; - } - this.setStateByComponent(component2, item, enable); - } - } - } - }; - ElementState2.prototype.toggle = function() { - var element = getCurrentElement(this.context); - if (element) { - var hasState = element.hasState(this.stateName); - this.setElementState(element, !hasState); - } - }; - ElementState2.prototype.reset = function() { - this.setStateEnable(false); - }; - return ElementState2; -}(state_base_default); -var state_default = ElementState; - -// node_modules/@antv/g2/esm/interaction/action/element/active.js -var ElementActive = function(_super) { - __extends(ElementActive2, _super); - function ElementActive2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = "active"; - return _this; - } - ElementActive2.prototype.active = function() { - this.setState(); - }; - return ElementActive2; -}(state_default); -var active_default = ElementActive; - -// node_modules/@antv/g2/esm/interaction/action/element/link-by-color.js -var import_util277 = __toModule(require_lib()); -var LinkByColor = function(_super) { - __extends(LinkByColor2, _super); - function LinkByColor2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.cache = {}; - return _this; - } - LinkByColor2.prototype.getColorScale = function(view, element) { - var colorAttr = element.geometry.getAttribute("color"); - if (!colorAttr) { - return null; - } - var scale12 = view.getScaleByField(colorAttr.getFields()[0]); - return scale12; - }; - LinkByColor2.prototype.getLinkPath = function(element, nextElement) { - var view = this.context.view; - var isTransposed = view.getCoordinate().isTransposed; - var bbox = element.shape.getCanvasBBox(); - var nextBBox = nextElement.shape.getCanvasBBox(); - var path = isTransposed ? [ - ["M", bbox.minX, bbox.minY], - ["L", nextBBox.minX, nextBBox.maxY], - ["L", nextBBox.maxX, nextBBox.maxY], - ["L", bbox.maxX, bbox.minY], - ["Z"] - ] : [ - ["M", bbox.maxX, bbox.minY], - ["L", nextBBox.minX, nextBBox.minY], - ["L", nextBBox.minX, nextBBox.maxY], - ["L", bbox.maxX, bbox.maxY], - ["Z"] - ]; - return path; - }; - LinkByColor2.prototype.addLinkShape = function(group3, element, nextElement, activeStyle) { - var style = { - opacity: 0.4, - fill: element.shape.attr("fill") - }; - group3.addShape({ - type: "path", - attrs: __assign(__assign({}, (0, import_util277.deepMix)({}, style, (0, import_util277.isFunction)(activeStyle) ? activeStyle(style, element) : activeStyle)), { path: this.getLinkPath(element, nextElement) }) - }); - }; - LinkByColor2.prototype.linkByElement = function(element, activeStyle) { - var _this = this; - var view = this.context.view; - var scale12 = this.getColorScale(view, element); - if (!scale12) { - return; - } - var value2 = getElementValue(element, scale12.field); - if (!this.cache[value2]) { - var elements_1 = getElementsByField(view, scale12.field, value2); - var linkGroup = this.linkGroup; - var group_1 = linkGroup.addGroup(); - this.cache[value2] = group_1; - var count_1 = elements_1.length; - (0, import_util277.each)(elements_1, function(el, index2) { - if (index2 < count_1 - 1) { - var nextEl = elements_1[index2 + 1]; - _this.addLinkShape(group_1, el, nextEl, activeStyle); - } - }); - } - }; - LinkByColor2.prototype.removeLink = function(element) { - var scale12 = this.getColorScale(this.context.view, element); - if (!scale12) { - return; - } - var value2 = getElementValue(element, scale12.field); - if (this.cache[value2]) { - this.cache[value2].remove(); - this.cache[value2] = null; - } - }; - LinkByColor2.prototype.link = function(args) { - var context = this.context; - if (!this.linkGroup) { - this.linkGroup = context.view.foregroundGroup.addGroup({ - id: "link-by-color-group", - capture: false - }); - } - var element = getCurrentElement(context); - if (element) { - this.linkByElement(element, args === null || args === void 0 ? void 0 : args.style); - } - }; - LinkByColor2.prototype.unlink = function() { - var element = getCurrentElement(this.context); - if (element) { - this.removeLink(element); - } - }; - LinkByColor2.prototype.clear = function() { - if (this.linkGroup) { - this.linkGroup.clear(); - } - this.cache = {}; - }; - LinkByColor2.prototype.destroy = function() { - _super.prototype.destroy.call(this); - if (this.linkGroup) { - this.linkGroup.remove(); - } - }; - return LinkByColor2; -}(base_default12); -var link_by_color_default = LinkByColor; - -// node_modules/@antv/g2/esm/interaction/action/element/range-state.js -var import_util278 = __toModule(require_lib()); -var ElementRangeState = function(_super) { - __extends(ElementRangeState2, _super); - function ElementRangeState2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.startPoint = null; - _this.endPoint = null; - _this.isStarted = false; - _this.effectSiblings = false; - _this.effectByRecord = false; - return _this; - } - ElementRangeState2.prototype.getCurrentPoint = function() { - var event = this.context.event; - return { - x: event.x, - y: event.y - }; - }; - ElementRangeState2.prototype.start = function() { - this.clear(); - this.startPoint = this.getCurrentPoint(); - this.isStarted = true; - }; - ElementRangeState2.prototype.getIntersectElements = function() { - var elements = null; - if (isMask(this.context)) { - elements = getMaskedElements(this.context, 10); - } else { - var startPoint = this.startPoint; - var endPoint = this.isStarted ? this.getCurrentPoint() : this.endPoint; - if (!startPoint || !endPoint) { - return; - } - var box2 = { - minX: Math.min(startPoint.x, endPoint.x), - minY: Math.min(startPoint.y, endPoint.y), - maxX: Math.max(startPoint.x, endPoint.x), - maxY: Math.max(startPoint.y, endPoint.y) - }; - var view = this.context.view; - elements = getIntersectElements(view, box2); - } - return elements; - }; - ElementRangeState2.prototype.setStateEnable = function(enable) { - if (this.effectSiblings && !this.effectByRecord) { - this.setSiblingsState(enable); - } else { - var allElements = getElements(this.context.view); - var elements = this.getIntersectElements(); - if (elements && elements.length) { - if (this.effectByRecord) { - this.setSiblingsStateByRecord(elements, enable); - } else { - this.setElementsState(elements, enable, allElements); - } - } else { - this.clear(); - } - } - }; - ElementRangeState2.prototype.setSiblingsStateByRecord = function(elements, enable) { - var _this = this; - var view = this.context.view; - var siblings = getSilbings(view); - var records = elements.map(function(el) { - return el.getModel().data; - }); - var xFiled = view.getXScale().field; - var yField = view.getYScales()[0].field; - (0, import_util278.each)(siblings, function(sibling) { - var allElements = getElements(sibling); - var effectElements = allElements.filter(function(el) { - var record = el.getModel().data; - return isInRecords(records, record, xFiled, yField); - }); - _this.setElementsState(effectElements, enable, allElements); - }); - }; - ElementRangeState2.prototype.setSiblingsState = function(enable) { - var _this = this; - var view = this.context.view; - var siblings = getSilbings(view); - if (isMask(this.context)) { - (0, import_util278.each)(siblings, function(sibling) { - var allElements = getElements(sibling); - var effectElements = getSiblingMaskElements(_this.context, sibling, 10); - if (effectElements && effectElements.length) { - _this.setElementsState(effectElements, enable, allElements); - } else { - _this.clearViewState(sibling); - } - }); - } - }; - ElementRangeState2.prototype.setElementsState = function(elements, enable, allElements) { - var _this = this; - (0, import_util278.each)(allElements, function(el) { - if (!elements.includes(el)) { - _this.setElementState(el, false); - } else { - _this.setElementState(el, enable); - } - }); - }; - ElementRangeState2.prototype.end = function() { - this.isStarted = false; - this.endPoint = this.getCurrentPoint(); - }; - ElementRangeState2.prototype.clear = function() { - var _this = this; - var view = this.context.view; - if (this.effectSiblings) { - var siblings = getSilbings(view); - (0, import_util278.each)(siblings, function(sibling) { - _this.clearViewState(sibling); - }); - } else { - this.clearViewState(view); - } - }; - return ElementRangeState2; -}(state_base_default); -var range_state_default = ElementRangeState; - -// node_modules/@antv/g2/esm/interaction/action/element/range-active.js -var ElementRangeActive = function(_super) { - __extends(ElementRangeActive2, _super); - function ElementRangeActive2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = "active"; - return _this; - } - ElementRangeActive2.prototype.active = function() { - this.setState(); - }; - return ElementRangeActive2; -}(range_state_default); -var range_active_default = ElementRangeActive; - -// node_modules/@antv/g2/esm/interaction/action/element/single-state.js -var ElementSingleState = function(_super) { - __extends(ElementSingleState2, _super); - function ElementSingleState2() { - return _super !== null && _super.apply(this, arguments) || this; - } - ElementSingleState2.prototype.setStateEnable = function(enable) { - var element = getCurrentElement(this.context); - if (element) { - if (!isElementChange(this.context)) { - return; - } - if (enable) { - this.clear(); - this.setElementState(element, true); - } else if (this.hasState(element)) { - this.setElementState(element, false); - } - } - }; - ElementSingleState2.prototype.toggle = function() { - var element = getCurrentElement(this.context); - if (element) { - var hasState = this.hasState(element); - if (!hasState) { - this.clear(); - } - this.setElementState(element, !hasState); - } - }; - ElementSingleState2.prototype.reset = function() { - this.setStateEnable(false); - }; - return ElementSingleState2; -}(state_base_default); -var single_state_default = ElementSingleState; - -// node_modules/@antv/g2/esm/interaction/action/element/single-active.js -var ElementSingleActive = function(_super) { - __extends(ElementSingleActive2, _super); - function ElementSingleActive2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = "active"; - return _this; - } - ElementSingleActive2.prototype.active = function() { - this.setState(); - }; - return ElementSingleActive2; -}(single_state_default); -var single_active_default = ElementSingleActive; - -// node_modules/@antv/g2/esm/interaction/action/element/highlight.js -var import_util283 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/interaction/action/element/highlight-util.js -var import_util281 = __toModule(require_lib()); -var STATUS_UNACTIVE = "inactive"; -var STATUS_ACTIVE = "active"; -function clearHighlight(view) { - var elements = getElements(view); - (0, import_util281.each)(elements, function(el) { - if (el.hasState(STATUS_ACTIVE)) { - el.setState(STATUS_ACTIVE, false); - } - if (el.hasState(STATUS_UNACTIVE)) { - el.setState(STATUS_UNACTIVE, false); - } - }); -} -function setHighlightBy(elements, callback, enable) { - (0, import_util281.each)(elements, function(el) { - if (callback(el)) { - if (el.hasState(STATUS_UNACTIVE)) { - el.setState(STATUS_UNACTIVE, false); - } - el.setState(STATUS_ACTIVE, enable); - } else { - if (el.hasState(STATUS_ACTIVE)) { - el.setState(STATUS_ACTIVE, false); - } - el.setState(STATUS_UNACTIVE, enable); - } - }); -} - -// node_modules/@antv/g2/esm/interaction/action/element/highlight.js -var STATUS_UNACTIVE2 = ELEMENT_STATE.INACTIVE; -var STATUS_ACTIVE2 = ELEMENT_STATE.ACTIVE; -var ElementHighlight = function(_super) { - __extends(ElementHighlight2, _super); - function ElementHighlight2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = STATUS_ACTIVE2; - return _this; - } - ElementHighlight2.prototype.setElementsStateByItem = function(elements, field6, item, enable) { - var _this = this; - var callback = function(el) { - return _this.isMathItem(el, field6, item); - }; - this.setHighlightBy(elements, callback, enable); - }; - ElementHighlight2.prototype.setElementHighlight = function(el, callback) { - if (callback(el)) { - if (el.hasState(STATUS_UNACTIVE2)) { - el.setState(STATUS_UNACTIVE2, false); - } - el.setState(STATUS_ACTIVE2, true); - } else if (!el.hasState(STATUS_ACTIVE2)) { - el.setState(STATUS_UNACTIVE2, true); - } - }; - ElementHighlight2.prototype.setHighlightBy = function(elements, callback, enable) { - var _this = this; - if (enable) { - (0, import_util283.each)(elements, function(el) { - _this.setElementHighlight(el, callback); - }); - } else { - var activeElements = getElementsByState(this.context.view, STATUS_ACTIVE2); - var allCancel_1 = true; - (0, import_util283.each)(activeElements, function(el) { - if (!callback(el)) { - allCancel_1 = false; - return false; - } - }); - if (allCancel_1) { - this.clear(); - } else { - (0, import_util283.each)(elements, function(el) { - if (callback(el)) { - if (el.hasState(STATUS_ACTIVE2)) { - el.setState(STATUS_ACTIVE2, false); - } - el.setState(STATUS_UNACTIVE2, true); - } - }); - } - } - }; - ElementHighlight2.prototype.setElementState = function(element, enable) { - var view = this.context.view; - var elements = getElements(view); - this.setHighlightBy(elements, function(el) { - return element === el; - }, enable); - }; - ElementHighlight2.prototype.highlight = function() { - this.setState(); - }; - ElementHighlight2.prototype.clear = function() { - var view = this.context.view; - clearHighlight(view); - }; - return ElementHighlight2; -}(state_default); -var highlight_default = ElementHighlight; - -// node_modules/@antv/g2/esm/interaction/action/element/highlight-by-color.js -var HighlightColor = function(_super) { - __extends(HighlightColor2, _super); - function HighlightColor2() { - return _super !== null && _super.apply(this, arguments) || this; - } - HighlightColor2.prototype.setStateByElement = function(element, enable) { - var view = this.context.view; - var colorAttr = element.geometry.getAttribute("color"); - if (!colorAttr) { - return; - } - var scale12 = view.getScaleByField(colorAttr.getFields()[0]); - var value2 = getElementValue(element, scale12.field); - var elements = getElements(view); - var highlightElements = elements.filter(function(el) { - return getElementValue(el, scale12.field) === value2; - }); - this.setHighlightBy(elements, function(el) { - return highlightElements.includes(el); - }, enable); - }; - return HighlightColor2; -}(highlight_default); -var highlight_by_color_default = HighlightColor; - -// node_modules/@antv/g2/esm/interaction/action/element/highlight-by-x.js -var HighlightX = function(_super) { - __extends(HighlightX2, _super); - function HighlightX2() { - return _super !== null && _super.apply(this, arguments) || this; - } - HighlightX2.prototype.setElementHighlight = function(el, callback) { - if (callback(el)) { - if (el.hasState(STATUS_UNACTIVE2)) { - el.setState(STATUS_UNACTIVE2, false); - } - el.setState(STATUS_ACTIVE2, true); - } else { - el.setState(STATUS_UNACTIVE2, true); - if (el.hasState(STATUS_ACTIVE2)) { - el.setState(STATUS_ACTIVE2, false); - } - } - }; - HighlightX2.prototype.setStateByElement = function(element, enable) { - var view = this.context.view; - var scale12 = view.getXScale(); - var value2 = getElementValue(element, scale12.field); - var elements = getElements(view); - var highlightElements = elements.filter(function(el) { - return getElementValue(el, scale12.field) === value2; - }); - this.setHighlightBy(elements, function(el) { - return highlightElements.includes(el); - }, enable); - }; - HighlightX2.prototype.toggle = function() { - var element = getCurrentElement(this.context); - if (element) { - var hasState = element.hasState(this.stateName); - this.setStateByElement(element, !hasState); - } - }; - return HighlightX2; -}(highlight_default); -var highlight_by_x_default = HighlightX; - -// node_modules/@antv/g2/esm/interaction/action/element/range-highlight.js -var EVENTS2; -(function(EVENTS4) { - EVENTS4["BEFORE_HIGHLIGHT"] = "element-range-highlight:beforehighlight"; - EVENTS4["AFTER_HIGHLIGHT"] = "element-range-highlight:afterhighlight"; - EVENTS4["BEFORE_CLEAR"] = "element-range-highlight:beforeclear"; - EVENTS4["AFTER_CLEAR"] = "element-range-highlight:afterclear"; -})(EVENTS2 || (EVENTS2 = {})); -var ElementRangeHighlight = function(_super) { - __extends(ElementRangeHighlight2, _super); - function ElementRangeHighlight2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = "active"; - return _this; - } - ElementRangeHighlight2.prototype.clearViewState = function(view) { - clearHighlight(view); - }; - ElementRangeHighlight2.prototype.highlight = function() { - var _a6 = this.context, view = _a6.view, event = _a6.event; - var elements = this.getIntersectElements(); - var payload = { view, event, highlightElements: elements }; - view.emit(EVENTS2.BEFORE_HIGHLIGHT, event_default.fromData(view, EVENTS2.BEFORE_HIGHLIGHT, payload)); - this.setState(); - view.emit(EVENTS2.AFTER_HIGHLIGHT, event_default.fromData(view, EVENTS2.AFTER_HIGHLIGHT, payload)); - }; - ElementRangeHighlight2.prototype.clear = function() { - var view = this.context.view; - view.emit(EVENTS2.BEFORE_CLEAR, event_default.fromData(view, EVENTS2.BEFORE_CLEAR, {})); - _super.prototype.clear.call(this); - view.emit(EVENTS2.AFTER_CLEAR, event_default.fromData(view, EVENTS2.AFTER_CLEAR, {})); - }; - ElementRangeHighlight2.prototype.setElementsState = function(elements, enable, allElements) { - setHighlightBy(allElements, function(el) { - return elements.indexOf(el) >= 0; - }, enable); - }; - return ElementRangeHighlight2; -}(range_state_default); -var range_highlight_default = ElementRangeHighlight; - -// node_modules/@antv/g2/esm/interaction/action/element/single-highlight.js -var ElementSingleHighlight = function(_super) { - __extends(ElementSingleHighlight2, _super); - function ElementSingleHighlight2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = "active"; - return _this; - } - ElementSingleHighlight2.prototype.highlight = function() { - this.setState(); - }; - ElementSingleHighlight2.prototype.setElementState = function(element, enable) { - var view = this.context.view; - var elements = getElements(view); - setHighlightBy(elements, function(el) { - return element === el; - }, enable); - }; - ElementSingleHighlight2.prototype.clear = function() { - var view = this.context.view; - clearHighlight(view); - }; - return ElementSingleHighlight2; -}(single_state_default); -var single_highlight_default = ElementSingleHighlight; - -// node_modules/@antv/g2/esm/interaction/action/element/range-selected.js -var ElementRangeSelected = function(_super) { - __extends(ElementRangeSelected2, _super); - function ElementRangeSelected2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = "selected"; - return _this; - } - ElementRangeSelected2.prototype.selected = function() { - this.setState(); - }; - return ElementRangeSelected2; -}(range_state_default); -var range_selected_default = ElementRangeSelected; - -// node_modules/@antv/g2/esm/interaction/action/element/selected.js -var ElementMultipleSelected = function(_super) { - __extends(ElementMultipleSelected2, _super); - function ElementMultipleSelected2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = "selected"; - return _this; - } - ElementMultipleSelected2.prototype.selected = function() { - this.setState(); - }; - return ElementMultipleSelected2; -}(state_default); -var selected_default = ElementMultipleSelected; - -// node_modules/@antv/g2/esm/interaction/action/element/single-selected.js -var ElementSingleSelected = function(_super) { - __extends(ElementSingleSelected2, _super); - function ElementSingleSelected2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = "selected"; - return _this; - } - ElementSingleSelected2.prototype.selected = function() { - this.setState(); - }; - return ElementSingleSelected2; -}(single_state_default); -var single_selected_default = ElementSingleSelected; - -// node_modules/@antv/g2/esm/interaction/action/component/list-state.js -var import_util288 = __toModule(require_lib()); -var ListState = function(_super) { - __extends(ListState2, _super); - function ListState2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = ""; - _this.ignoreItemStates = []; - return _this; - } - ListState2.prototype.getTriggerListInfo = function() { - var delegateObject = getDelegationObject(this.context); - var info = null; - if (isList(delegateObject)) { - info = { - item: delegateObject.item, - list: delegateObject.component - }; - } - return info; - }; - ListState2.prototype.getAllowComponents = function() { - var _this = this; - var view = this.context.view; - var components = getComponents(view); - var rst = []; - (0, import_util288.each)(components, function(component2) { - if (component2.isList() && _this.allowSetStateByElement(component2)) { - rst.push(component2); - } - }); - return rst; - }; - ListState2.prototype.hasState = function(list, item) { - return list.hasState(item, this.stateName); - }; - ListState2.prototype.clearAllComponentsState = function() { - var _this = this; - var components = this.getAllowComponents(); - (0, import_util288.each)(components, function(component2) { - component2.clearItemsState(_this.stateName); - }); - }; - ListState2.prototype.allowSetStateByElement = function(component2) { - var field6 = component2.get("field"); - if (!field6) { - return false; - } - if (this.cfg && this.cfg.componentNames) { - var name_1 = component2.get("name"); - if (this.cfg.componentNames.indexOf(name_1) === -1) { - return false; - } - } - var view = this.context.view; - var scale12 = getScaleByField(view, field6); - return scale12 && scale12.isCategory; - }; - ListState2.prototype.allowSetStateByItem = function(item, list) { - var ignoreStates = this.ignoreItemStates; - if (ignoreStates.length) { - var filterStates = ignoreStates.filter(function(state2) { - return list.hasState(item, state2); - }); - return filterStates.length === 0; - } - return true; - }; - ListState2.prototype.setStateByElement = function(component2, element, enable) { - var field6 = component2.get("field"); - var view = this.context.view; - var scale12 = getScaleByField(view, field6); - var value2 = getElementValue(element, field6); - var text = scale12.getText(value2); - this.setItemsState(component2, text, enable); - }; - ListState2.prototype.setStateEnable = function(enable) { - var _this = this; - var element = getCurrentElement(this.context); - if (element) { - var components = this.getAllowComponents(); - (0, import_util288.each)(components, function(component3) { - _this.setStateByElement(component3, element, enable); - }); - } else { - var delegateObject = getDelegationObject(this.context); - if (isList(delegateObject)) { - var item = delegateObject.item, component2 = delegateObject.component; - if (this.allowSetStateByElement(component2) && this.allowSetStateByItem(item, component2)) { - this.setItemState(component2, item, enable); - } - } - } - }; - ListState2.prototype.setItemsState = function(list, name, enable) { - var _this = this; - var items = list.getItems(); - (0, import_util288.each)(items, function(item) { - if (item.name === name) { - _this.setItemState(list, item, enable); - } - }); - }; - ListState2.prototype.setItemState = function(list, item, enable) { - list.setItemState(item, this.stateName, enable); - }; - ListState2.prototype.setState = function() { - this.setStateEnable(true); - }; - ListState2.prototype.reset = function() { - this.setStateEnable(false); - }; - ListState2.prototype.toggle = function() { - var triggerInfo = this.getTriggerListInfo(); - if (triggerInfo && triggerInfo.item) { - var list = triggerInfo.list, item = triggerInfo.item; - var enable = this.hasState(list, item); - this.setItemState(list, item, !enable); - } - }; - ListState2.prototype.clear = function() { - var triggerInfo = this.getTriggerListInfo(); - if (triggerInfo) { - triggerInfo.list.clearItemsState(this.stateName); - } else { - this.clearAllComponentsState(); - } - }; - return ListState2; -}(base_default12); -var list_state_default = ListState; - -// node_modules/@antv/g2/esm/interaction/action/component/list-active.js -var ListActive = function(_super) { - __extends(ListActive2, _super); - function ListActive2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = "active"; - return _this; - } - ListActive2.prototype.active = function() { - this.setState(); - }; - return ListActive2; -}(list_state_default); -var list_active_default = ListActive; - -// node_modules/@antv/g2/esm/interaction/action/component/list-highlight.js -var import_util292 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/interaction/action/component/list-highlight-util.js -var import_util291 = __toModule(require_lib()); -var STATUS_UNACTIVE3 = "inactive"; -var STATUS_ACTIVE3 = "active"; -function clearList(list) { - var items = list.getItems(); - (0, import_util291.each)(items, function(item) { - if (list.hasState(item, STATUS_ACTIVE3)) { - list.setItemState(item, STATUS_ACTIVE3, false); - } - if (list.hasState(item, STATUS_UNACTIVE3)) { - list.setItemState(item, STATUS_UNACTIVE3, false); - } - }); -} - -// node_modules/@antv/g2/esm/interaction/action/component/list-highlight.js -var STATUS_UNACTIVE4 = "inactive"; -var STATUS_ACTIVE4 = "active"; -var ListHighlight = function(_super) { - __extends(ListHighlight2, _super); - function ListHighlight2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = STATUS_ACTIVE4; - _this.ignoreItemStates = ["unchecked"]; - return _this; - } - ListHighlight2.prototype.setItemsState = function(list, name, enable) { - this.setHighlightBy(list, function(item) { - return item.name === name; - }, enable); - }; - ListHighlight2.prototype.setItemState = function(list, item, enable) { - var items = list.getItems(); - this.setHighlightBy(list, function(el) { - return el === item; - }, enable); - }; - ListHighlight2.prototype.setHighlightBy = function(list, callback, enable) { - var items = list.getItems(); - if (enable) { - (0, import_util292.each)(items, function(item) { - if (callback(item)) { - if (list.hasState(item, STATUS_UNACTIVE4)) { - list.setItemState(item, STATUS_UNACTIVE4, false); - } - list.setItemState(item, STATUS_ACTIVE4, true); - } else if (!list.hasState(item, STATUS_ACTIVE4)) { - list.setItemState(item, STATUS_UNACTIVE4, true); - } - }); - } else { - var activeItems = list.getItemsByState(STATUS_ACTIVE4); - var allCancel_1 = true; - (0, import_util292.each)(activeItems, function(item) { - if (!callback(item)) { - allCancel_1 = false; - return false; - } - }); - if (allCancel_1) { - this.clear(); - } else { - (0, import_util292.each)(items, function(item) { - if (callback(item)) { - if (list.hasState(item, STATUS_ACTIVE4)) { - list.setItemState(item, STATUS_ACTIVE4, false); - } - list.setItemState(item, STATUS_UNACTIVE4, true); - } - }); - } - } - }; - ListHighlight2.prototype.highlight = function() { - this.setState(); - }; - ListHighlight2.prototype.clear = function() { - var triggerInfo = this.getTriggerListInfo(); - if (triggerInfo) { - clearList(triggerInfo.list); - } else { - var components = this.getAllowComponents(); - (0, import_util292.each)(components, function(component2) { - component2.clearItemsState(STATUS_ACTIVE4); - component2.clearItemsState(STATUS_UNACTIVE4); - }); - } - }; - return ListHighlight2; -}(list_state_default); -var list_highlight_default = ListHighlight; - -// node_modules/@antv/g2/esm/interaction/action/component/list-selected.js -var ListSelected = function(_super) { - __extends(ListSelected2, _super); - function ListSelected2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = "selected"; - return _this; - } - ListSelected2.prototype.selected = function() { - this.setState(); - }; - return ListSelected2; -}(list_state_default); -var list_selected_default = ListSelected; - -// node_modules/@antv/g2/esm/interaction/action/component/list-unchecked.js -var ListUnchecked = function(_super) { - __extends(ListUnchecked2, _super); - function ListUnchecked2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = "unchecked"; - return _this; - } - ListUnchecked2.prototype.unchecked = function() { - this.setState(); - }; - return ListUnchecked2; -}(list_state_default); -var list_unchecked_default = ListUnchecked; - -// node_modules/@antv/g2/esm/interaction/action/component/list-checked.js -var import_util293 = __toModule(require_lib()); -var STATUS_UNCHECKED = "unchecked"; -var STATUS_CHECKED = "checked"; -var ListChecked = function(_super) { - __extends(ListChecked2, _super); - function ListChecked2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.stateName = STATUS_CHECKED; - return _this; - } - ListChecked2.prototype.setItemState = function(list, item, enable) { - this.setCheckedBy(list, function(el) { - return el === item; - }, enable); - }; - ListChecked2.prototype.setCheckedBy = function(list, callback, enable) { - var items = list.getItems(); - if (enable) { - (0, import_util293.each)(items, function(item) { - if (callback(item)) { - if (list.hasState(item, STATUS_UNCHECKED)) { - list.setItemState(item, STATUS_UNCHECKED, false); - } - list.setItemState(item, STATUS_CHECKED, true); - } else if (!list.hasState(item, STATUS_CHECKED)) { - list.setItemState(item, STATUS_UNCHECKED, true); - } - }); - } - }; - ListChecked2.prototype.toggle = function() { - var triggerInfo = this.getTriggerListInfo(); - if (triggerInfo && triggerInfo.item) { - var list_1 = triggerInfo.list, item = triggerInfo.item; - var allChecked = !(0, import_util293.some)(list_1.getItems(), function(t4) { - return list_1.hasState(t4, STATUS_UNCHECKED); - }); - if (allChecked || list_1.hasState(item, STATUS_UNCHECKED)) { - this.setItemState(list_1, item, true); - } else { - this.reset(); - } - } - }; - ListChecked2.prototype.checked = function() { - this.setState(); - }; - ListChecked2.prototype.reset = function() { - var components = this.getAllowComponents(); - (0, import_util293.each)(components, function(component2) { - component2.clearItemsState(STATUS_CHECKED); - component2.clearItemsState(STATUS_UNCHECKED); - }); - }; - return ListChecked2; -}(list_state_default); -var list_checked_default = ListChecked; - -// node_modules/@antv/g2/esm/interaction/action/component/list-focus.js -var STATUS_UNCHECKED2 = "unchecked"; -var ListFocus = function(_super) { - __extends(ListFocus2, _super); - function ListFocus2() { - return _super !== null && _super.apply(this, arguments) || this; - } - ListFocus2.prototype.toggle = function() { - var triggerInfo = this.getTriggerListInfo(); - if (triggerInfo === null || triggerInfo === void 0 ? void 0 : triggerInfo.item) { - var list_1 = triggerInfo.list, clickedItem = triggerInfo.item; - var items = list_1.getItems(); - var checkedItems = items.filter(function(t4) { - return !list_1.hasState(t4, STATUS_UNCHECKED2); - }); - var uncheckedItems = items.filter(function(t4) { - return list_1.hasState(t4, STATUS_UNCHECKED2); - }); - var checkedItem = checkedItems[0]; - if (items.length === checkedItems.length) { - for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { - var item = items_1[_i]; - list_1.setItemState(item, STATUS_UNCHECKED2, item.id !== clickedItem.id); - } - } else if (items.length - uncheckedItems.length === 1) { - if (checkedItem.id === clickedItem.id) { - for (var _a6 = 0, items_2 = items; _a6 < items_2.length; _a6++) { - var item = items_2[_a6]; - list_1.setItemState(item, STATUS_UNCHECKED2, false); - } - } else { - for (var _b = 0, items_3 = items; _b < items_3.length; _b++) { - var item = items_3[_b]; - list_1.setItemState(item, STATUS_UNCHECKED2, item.id !== clickedItem.id); - } - } - } else { - for (var _c = 0, items_4 = items; _c < items_4.length; _c++) { - var item = items_4[_c]; - list_1.setItemState(item, STATUS_UNCHECKED2, item.id !== clickedItem.id); - } - } - } - }; - return ListFocus2; -}(list_state_default); -var list_focus_default = ListFocus; - -// node_modules/@antv/g2/esm/interaction/action/component/list-radio.js -var import_util294 = __toModule(require_lib()); -var STATUS_SHOW = "showRadio"; -var TIP_ID = "legend-radio-tip"; -var ListRadio = function(_super) { - __extends(ListRadio2, _super); - function ListRadio2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.timeStamp = 0; - return _this; - } - ListRadio2.prototype.show = function() { - var triggerInfo = this.getTriggerListInfo(); - if (triggerInfo === null || triggerInfo === void 0 ? void 0 : triggerInfo.item) { - var list = triggerInfo.list, item = triggerInfo.item; - list.setItemState(item, STATUS_SHOW, true); - } - }; - ListRadio2.prototype.hide = function() { - var triggerInfo = this.getTriggerListInfo(); - if (triggerInfo === null || triggerInfo === void 0 ? void 0 : triggerInfo.item) { - var list = triggerInfo.list, item = triggerInfo.item; - list.setItemState(item, STATUS_SHOW, false); - } - }; - ListRadio2.prototype.destroy = function() { - _super.prototype.destroy.call(this); - this.tooltip && this.tooltip.destroy(); - }; - ListRadio2.prototype.showTip = function() { - var context = this.context; - var ev = context.event; - var lastTimeStamp = this.timeStamp; - var timeStamp = +new Date(); - var target = this.context.event.target; - if (timeStamp - lastTimeStamp > 16 && target.get("name") === "legend-item-radio") { - var preLoc = this.location; - var curLoc = { x: ev.x, y: ev.y }; - this.timeStamp = timeStamp; - this.location = curLoc; - if (!preLoc || !(0, import_util294.isEqual)(preLoc, curLoc)) { - this.showTooltip(curLoc); - } - } - }; - ListRadio2.prototype.hideTip = function() { - this.hideTooltip(); - this.location = null; - }; - ListRadio2.prototype.showTooltip = function(curLoc) { - var context = this.context; - var ev = context.event; - var target = ev.target; - if (target && target.get("tip")) { - if (!this.tooltip) { - this.renderTooltip(); - } - var _a6 = context.view.getCanvas().get("el").getBoundingClientRect(), offsetX = _a6.x, offsetY = _a6.y; - this.tooltip.update(__assign(__assign({ title: target.get("tip") }, curLoc), { x: curLoc.x + offsetX, y: curLoc.y + offsetY })); - this.tooltip.show(); - } - }; - ListRadio2.prototype.hideTooltip = function() { - this.tooltip && this.tooltip.hide(); - }; - ListRadio2.prototype.renderTooltip = function() { - var _a6; - var tooltipStyles = (_a6 = {}, _a6[css_const_exports.CONTAINER_CLASS] = { - padding: "6px 8px", - transform: "translate(-50%, -80%)", - background: "rgba(0,0,0,0.75)", - color: "#fff", - "border-radius": "2px", - "z-index": 100 - }, _a6[css_const_exports.TITLE_CLASS] = { - "font-size": "12px", - "line-height": "14px", - "margin-bottom": 0, - "word-break": "break-all" - }, _a6); - if (document.getElementById(TIP_ID)) { - document.body.removeChild(document.getElementById(TIP_ID)); - } - var tooltip10 = new HtmlTooltip({ - parent: document.body, - region: null, - visible: false, - crosshairs: null, - domStyles: tooltipStyles, - containerId: TIP_ID - }); - tooltip10.init(); - tooltip10.setCapture(false); - this.tooltip = tooltip10; - }; - return ListRadio2; -}(list_state_default); -var list_radio_default = ListRadio; - -// node_modules/@antv/g2/esm/interaction/action/mask/circle.js -var import_util296 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/interaction/action/mask/base.js -var import_util295 = __toModule(require_lib()); -var MaskBase = function(_super) { - __extends(MaskBase2, _super); - function MaskBase2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.maskShape = null; - _this.points = []; - _this.starting = false; - _this.moving = false; - _this.preMovePoint = null; - _this.shapeType = "path"; - return _this; - } - MaskBase2.prototype.getCurrentPoint = function() { - var event = this.context.event; - return { - x: event.x, - y: event.y - }; - }; - MaskBase2.prototype.emitEvent = function(type2) { - var eventName = "mask:".concat(type2); - var view = this.context.view; - var event = this.context.event; - view.emit(eventName, { - target: this.maskShape, - shape: this.maskShape, - points: this.points, - x: event.x, - y: event.y - }); - }; - MaskBase2.prototype.createMask = function() { - var view = this.context.view; - var maskAttrs = this.getMaskAttrs(); - var maskShape = view.foregroundGroup.addShape({ - type: this.shapeType, - name: "mask", - draggable: true, - attrs: __assign({ fill: "#C5D4EB", opacity: 0.3 }, maskAttrs) - }); - return maskShape; - }; - MaskBase2.prototype.getMaskPath = function() { - return []; - }; - MaskBase2.prototype.show = function() { - if (this.maskShape) { - this.maskShape.show(); - this.emitEvent("show"); - } - }; - MaskBase2.prototype.start = function(arg) { - this.starting = true; - this.moving = false; - this.points = [this.getCurrentPoint()]; - if (!this.maskShape) { - this.maskShape = this.createMask(); - this.maskShape.set("capture", false); - } - this.updateMask(arg === null || arg === void 0 ? void 0 : arg.maskStyle); - this.emitEvent("start"); - }; - MaskBase2.prototype.moveStart = function() { - this.moving = true; - this.preMovePoint = this.getCurrentPoint(); - }; - MaskBase2.prototype.move = function() { - if (!this.moving || !this.maskShape) { - return; - } - var currentPoint = this.getCurrentPoint(); - var preMovePoint = this.preMovePoint; - var dx = currentPoint.x - preMovePoint.x; - var dy = currentPoint.y - preMovePoint.y; - var points = this.points; - (0, import_util295.each)(points, function(point2) { - point2.x += dx; - point2.y += dy; - }); - this.updateMask(); - this.emitEvent("change"); - this.preMovePoint = currentPoint; - }; - MaskBase2.prototype.updateMask = function(maskStyle) { - var attrs = (0, import_util295.deepMix)({}, this.getMaskAttrs(), maskStyle); - this.maskShape.attr(attrs); - }; - MaskBase2.prototype.moveEnd = function() { - this.moving = false; - this.preMovePoint = null; - }; - MaskBase2.prototype.end = function() { - this.starting = false; - this.emitEvent("end"); - if (this.maskShape) { - this.maskShape.set("capture", true); - } - }; - MaskBase2.prototype.hide = function() { - if (this.maskShape) { - this.maskShape.hide(); - this.emitEvent("hide"); - } - }; - MaskBase2.prototype.resize = function() { - if (this.starting && this.maskShape) { - this.points.push(this.getCurrentPoint()); - this.updateMask(); - this.emitEvent("change"); - } - }; - MaskBase2.prototype.destroy = function() { - this.points = []; - if (this.maskShape) { - this.maskShape.remove(); - } - this.maskShape = null; - this.preMovePoint = null; - _super.prototype.destroy.call(this); - }; - return MaskBase2; -}(base_default12); -var base_default17 = MaskBase; - -// node_modules/@antv/g2/esm/interaction/action/mask/circle.js -var CircleMask = function(_super) { - __extends(CircleMask2, _super); - function CircleMask2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.shapeType = "circle"; - return _this; - } - CircleMask2.prototype.getMaskAttrs = function() { - var points = this.points; - var currentPoint = (0, import_util296.last)(this.points); - var r4 = 0; - var x6 = 0; - var y5 = 0; - if (points.length) { - var first = points[0]; - r4 = distance7(first, currentPoint) / 2; - x6 = (currentPoint.x + first.x) / 2; - y5 = (currentPoint.y + first.y) / 2; - } - return { - x: x6, - y: y5, - r: r4 - }; - }; - return CircleMask2; -}(base_default17); -var circle_default8 = CircleMask; - -// node_modules/@antv/g2/esm/interaction/action/mask/dim-rect.js -var import_util299 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/interaction/action/mask/rect.js -var import_util298 = __toModule(require_lib()); -var RectMask = function(_super) { - __extends(RectMask2, _super); - function RectMask2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.shapeType = "rect"; - return _this; - } - RectMask2.prototype.getRegion = function() { - var points = this.points; - return { - start: (0, import_util298.head)(points), - end: (0, import_util298.last)(points) - }; - }; - RectMask2.prototype.getMaskAttrs = function() { - var _a6 = this.getRegion(), start = _a6.start, end2 = _a6.end; - var x6 = Math.min(start.x, end2.x); - var y5 = Math.min(start.y, end2.y); - var width2 = Math.abs(end2.x - start.x); - var height = Math.abs(end2.y - start.y); - return { - x: x6, - y: y5, - width: width2, - height - }; - }; - return RectMask2; -}(base_default17); -var rect_default5 = RectMask; - -// node_modules/@antv/g2/esm/interaction/action/mask/dim-rect.js -function clampPoint(point2) { - point2.x = (0, import_util299.clamp)(point2.x, 0, 1); - point2.y = (0, import_util299.clamp)(point2.y, 0, 1); -} -var DimRect = function(_super) { - __extends(DimRect2, _super); - function DimRect2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.dim = "x"; - _this.inPlot = true; - return _this; - } - DimRect2.prototype.getRegion = function() { - var start = null; - var end2 = null; - var points = this.points; - var dim = this.dim; - var coord2 = this.context.view.getCoordinate(); - var normalStart = coord2.invert((0, import_util299.head)(points)); - var normalEnd = coord2.invert((0, import_util299.last)(points)); - if (this.inPlot) { - clampPoint(normalStart); - clampPoint(normalEnd); - } - if (dim === "x") { - start = coord2.convert({ - x: normalStart.x, - y: 0 - }); - end2 = coord2.convert({ - x: normalEnd.x, - y: 1 - }); - } else { - start = coord2.convert({ - x: 0, - y: normalStart.y - }); - end2 = coord2.convert({ - x: 1, - y: normalEnd.y - }); - } - return { - start, - end: end2 - }; - }; - return DimRect2; -}(rect_default5); -var dim_rect_default = DimRect; - -// node_modules/@antv/g2/esm/interaction/action/mask/path.js -var import_util300 = __toModule(require_lib()); -var PathMask = function(_super) { - __extends(PathMask2, _super); - function PathMask2() { - return _super !== null && _super.apply(this, arguments) || this; - } - PathMask2.prototype.getMaskPath = function() { - var points = this.points; - var path = []; - if (points.length) { - (0, import_util300.each)(points, function(point2, index2) { - if (index2 === 0) { - path.push(["M", point2.x, point2.y]); - } else { - path.push(["L", point2.x, point2.y]); - } - }); - path.push(["L", points[0].x, points[0].y]); - } - return path; - }; - PathMask2.prototype.getMaskAttrs = function() { - return { - path: this.getMaskPath() - }; - }; - PathMask2.prototype.addPoint = function() { - this.resize(); - }; - return PathMask2; -}(base_default17); -var path_default6 = PathMask; - -// node_modules/@antv/g2/esm/interaction/action/mask/smooth-path.js -var SmoothPathMask = function(_super) { - __extends(SmoothPathMask2, _super); - function SmoothPathMask2() { - return _super !== null && _super.apply(this, arguments) || this; - } - SmoothPathMask2.prototype.getMaskPath = function() { - var points = this.points; - return getSpline(points, true); - }; - return SmoothPathMask2; -}(path_default6); -var smooth_path_default = SmoothPathMask; - -// node_modules/@antv/g2/esm/interaction/action/cursor.js -var CursorAction = function(_super) { - __extends(CursorAction2, _super); - function CursorAction2() { - return _super !== null && _super.apply(this, arguments) || this; - } - CursorAction2.prototype.setCursor = function(cursor) { - var view = this.context.view; - view.getCanvas().setCursor(cursor); - }; - CursorAction2.prototype.default = function() { - this.setCursor("default"); - }; - CursorAction2.prototype.pointer = function() { - this.setCursor("pointer"); - }; - CursorAction2.prototype.move = function() { - this.setCursor("move"); - }; - CursorAction2.prototype.crosshair = function() { - this.setCursor("crosshair"); - }; - CursorAction2.prototype.wait = function() { - this.setCursor("wait"); - }; - CursorAction2.prototype.help = function() { - this.setCursor("help"); - }; - CursorAction2.prototype.text = function() { - this.setCursor("text"); - }; - CursorAction2.prototype.eResize = function() { - this.setCursor("e-resize"); - }; - CursorAction2.prototype.wResize = function() { - this.setCursor("w-resize"); - }; - CursorAction2.prototype.nResize = function() { - this.setCursor("n-resize"); - }; - CursorAction2.prototype.sResize = function() { - this.setCursor("s-resize"); - }; - CursorAction2.prototype.neResize = function() { - this.setCursor("ne-resize"); - }; - CursorAction2.prototype.nwResize = function() { - this.setCursor("nw-resize"); - }; - CursorAction2.prototype.seResize = function() { - this.setCursor("se-resize"); - }; - CursorAction2.prototype.swResize = function() { - this.setCursor("sw-resize"); - }; - CursorAction2.prototype.nsResize = function() { - this.setCursor("ns-resize"); - }; - CursorAction2.prototype.ewResize = function() { - this.setCursor("ew-resize"); - }; - return CursorAction2; -}(base_default12); -var cursor_default = CursorAction; - -// node_modules/@antv/g2/esm/interaction/action/data/filter.js -var import_util302 = __toModule(require_lib()); -var DataFilter = function(_super) { - __extends(DataFilter2, _super); - function DataFilter2() { - return _super !== null && _super.apply(this, arguments) || this; - } - DataFilter2.prototype.filterView = function(view, field6, filter17) { - var _this = this; - if (view.getScaleByField(field6)) { - view.filter(field6, filter17); - } - if (view.views && view.views.length) { - (0, import_util302.each)(view.views, function(subView) { - _this.filterView(subView, field6, filter17); - }); - } - }; - DataFilter2.prototype.filter = function() { - var delegateObject = getDelegationObject(this.context); - if (delegateObject) { - var view = this.context.view; - var component2 = delegateObject.component; - var field6 = component2.get("field"); - if (isList(delegateObject)) { - if (field6) { - var unCheckedItems = component2.getItemsByState("unchecked"); - var scale_1 = getScaleByField(view, field6); - var names_1 = unCheckedItems.map(function(item) { - return item.name; - }); - if (names_1.length) { - this.filterView(view, field6, function(value2) { - var text = scale_1.getText(value2); - return !names_1.includes(text); - }); - } else { - this.filterView(view, field6, null); - } - view.render(true); - } - } else if (isSlider(delegateObject)) { - var range = component2.getValue(); - var min_1 = range[0], max_1 = range[1]; - this.filterView(view, field6, function(value2) { - return value2 >= min_1 && value2 <= max_1; - }); - view.render(true); - } - } - }; - return DataFilter2; -}(base_default12); -var filter_default = DataFilter; - -// node_modules/@antv/g2/esm/interaction/action/data/range-filter.js -function getFilter(scale12, dim, point1, point2) { - var min13 = Math.min(point1[dim], point2[dim]); - var max15 = Math.max(point1[dim], point2[dim]); - var _a6 = scale12.range, rangeMin = _a6[0], rangeMax = _a6[1]; - if (min13 < rangeMin) { - min13 = rangeMin; - } - if (max15 > rangeMax) { - max15 = rangeMax; - } - if (min13 === rangeMax && max15 === rangeMax) { - return null; - } - var minValue = scale12.invert(min13); - var maxValue = scale12.invert(max15); - if (scale12.isCategory) { - var minIndex = scale12.values.indexOf(minValue); - var maxIndex = scale12.values.indexOf(maxValue); - var arr_1 = scale12.values.slice(minIndex, maxIndex + 1); - return function(value2) { - return arr_1.includes(value2); - }; - } else { - return function(value2) { - return value2 >= minValue && value2 <= maxValue; - }; - } -} -var EVENTS3; -(function(EVENTS4) { - EVENTS4["FILTER"] = "brush-filter-processing"; - EVENTS4["RESET"] = "brush-filter-reset"; - EVENTS4["BEFORE_FILTER"] = "brush-filter:beforefilter"; - EVENTS4["AFTER_FILTER"] = "brush-filter:afterfilter"; - EVENTS4["BEFORE_RESET"] = "brush-filter:beforereset"; - EVENTS4["AFTER_RESET"] = "brush-filter:afterreset"; -})(EVENTS3 || (EVENTS3 = {})); -var RangeFilter = function(_super) { - __extends(RangeFilter2, _super); - function RangeFilter2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.dims = ["x", "y"]; - _this.startPoint = null; - _this.isStarted = false; - return _this; - } - RangeFilter2.prototype.hasDim = function(dim) { - return this.dims.includes(dim); - }; - RangeFilter2.prototype.start = function() { - var context = this.context; - this.isStarted = true; - this.startPoint = context.getCurrentPoint(); - }; - RangeFilter2.prototype.filter = function() { - var startPoint; - var currentPoint; - if (isMask(this.context)) { - var maskShape = this.context.event.target; - var bbox = maskShape.getCanvasBBox(); - startPoint = { x: bbox.x, y: bbox.y }; - currentPoint = { x: bbox.maxX, y: bbox.maxY }; - } else { - if (!this.isStarted) { - return; - } - startPoint = this.startPoint; - currentPoint = this.context.getCurrentPoint(); - } - if (Math.abs(startPoint.x - currentPoint.x) < 5 || Math.abs(startPoint.x - currentPoint.y) < 5) { - return; - } - var _a6 = this.context, view = _a6.view, event = _a6.event; - var payload = { view, event, dims: this.dims }; - view.emit(EVENTS3.BEFORE_FILTER, event_default.fromData(view, EVENTS3.BEFORE_FILTER, payload)); - var coord2 = view.getCoordinate(); - var normalCurrent = coord2.invert(currentPoint); - var normalStart = coord2.invert(startPoint); - if (this.hasDim("x")) { - var xScale = view.getXScale(); - var filter17 = getFilter(xScale, "x", normalCurrent, normalStart); - this.filterView(view, xScale.field, filter17); - } - if (this.hasDim("y")) { - var yScale = view.getYScales()[0]; - var filter17 = getFilter(yScale, "y", normalCurrent, normalStart); - this.filterView(view, yScale.field, filter17); - } - this.reRender(view, { source: EVENTS3.FILTER }); - view.emit(EVENTS3.AFTER_FILTER, event_default.fromData(view, EVENTS3.AFTER_FILTER, payload)); - }; - RangeFilter2.prototype.end = function() { - this.isStarted = false; - }; - RangeFilter2.prototype.reset = function() { - var view = this.context.view; - view.emit(EVENTS3.BEFORE_RESET, event_default.fromData(view, EVENTS3.BEFORE_RESET, {})); - this.isStarted = false; - if (this.hasDim("x")) { - var xScale = view.getXScale(); - this.filterView(view, xScale.field, null); - } - if (this.hasDim("y")) { - var yScale = view.getYScales()[0]; - this.filterView(view, yScale.field, null); - } - this.reRender(view, { source: EVENTS3.RESET }); - view.emit(EVENTS3.AFTER_RESET, event_default.fromData(view, EVENTS3.AFTER_RESET, {})); - }; - RangeFilter2.prototype.filterView = function(view, field6, filter17) { - view.filter(field6, filter17); - }; - RangeFilter2.prototype.reRender = function(view, payload) { - view.render(true, payload); - }; - return RangeFilter2; -}(base_default12); -var range_filter_default = RangeFilter; - -// node_modules/@antv/g2/esm/interaction/action/data/sibling-filter.js -var import_util305 = __toModule(require_lib()); -var SiblingFilter = function(_super) { - __extends(SiblingFilter3, _super); - function SiblingFilter3() { - return _super !== null && _super.apply(this, arguments) || this; - } - SiblingFilter3.prototype.filterView = function(view, field6, filter17) { - var siblings = getSilbings(view); - (0, import_util305.each)(siblings, function(sibling) { - sibling.filter(field6, filter17); - }); - }; - SiblingFilter3.prototype.reRender = function(view) { - var siblings = getSilbings(view); - (0, import_util305.each)(siblings, function(sibling) { - sibling.render(true); - }); - }; - return SiblingFilter3; -}(range_filter_default); -var sibling_filter_default = SiblingFilter; - -// node_modules/@antv/g2/esm/interaction/action/element/filter.js -var import_util307 = __toModule(require_lib()); -var ElementFilter = function(_super) { - __extends(ElementFilter2, _super); - function ElementFilter2() { - return _super !== null && _super.apply(this, arguments) || this; - } - ElementFilter2.prototype.filter = function() { - var delegateObject = getDelegationObject(this.context); - var view = this.context.view; - var elements = getElements(view); - if (isMask(this.context)) { - var maskElements_1 = getMaskedElements(this.context, 10); - if (maskElements_1) { - (0, import_util307.each)(elements, function(el) { - if (maskElements_1.includes(el)) { - el.show(); - } else { - el.hide(); - } - }); - } - } else if (delegateObject) { - var component2 = delegateObject.component; - var field_1 = component2.get("field"); - if (isList(delegateObject)) { - if (field_1) { - var unCheckedItems = component2.getItemsByState("unchecked"); - var scale_1 = getScaleByField(view, field_1); - var names_1 = unCheckedItems.map(function(item) { - return item.name; - }); - (0, import_util307.each)(elements, function(el) { - var value2 = getElementValue(el, field_1); - var text = scale_1.getText(value2); - if (names_1.indexOf(text) >= 0) { - el.hide(); - } else { - el.show(); - } - }); - } - } else if (isSlider(delegateObject)) { - var range = component2.getValue(); - var min_1 = range[0], max_1 = range[1]; - (0, import_util307.each)(elements, function(el) { - var value2 = getElementValue(el, field_1); - if (value2 >= min_1 && value2 <= max_1) { - el.show(); - } else { - el.hide(); - } - }); - } - } - }; - ElementFilter2.prototype.clear = function() { - var elements = getElements(this.context.view); - (0, import_util307.each)(elements, function(el) { - el.show(); - }); - }; - ElementFilter2.prototype.reset = function() { - this.clear(); - }; - return ElementFilter2; -}(base_default12); -var filter_default2 = ElementFilter; - -// node_modules/@antv/g2/esm/interaction/action/element/sibling-filter.js -var import_util309 = __toModule(require_lib()); -var SiblingFilter2 = function(_super) { - __extends(SiblingFilter3, _super); - function SiblingFilter3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.byRecord = false; - return _this; - } - SiblingFilter3.prototype.filter = function() { - if (isMask(this.context)) { - if (this.byRecord) { - this.filterByRecord(); - } else { - this.filterByBBox(); - } - } - }; - SiblingFilter3.prototype.filterByRecord = function() { - var view = this.context.view; - var maskElements = getMaskedElements(this.context, 10); - if (!maskElements) { - return; - } - var xFiled = view.getXScale().field; - var yField = view.getYScales()[0].field; - var records = maskElements.map(function(el) { - return el.getModel().data; - }); - var siblings = getSilbings(view); - (0, import_util309.each)(siblings, function(sibling) { - var elements = getElements(sibling); - (0, import_util309.each)(elements, function(el) { - var record = el.getModel().data; - if (isInRecords(records, record, xFiled, yField)) { - el.show(); - } else { - el.hide(); - } - }); - }); - }; - SiblingFilter3.prototype.filterByBBox = function() { - var _this = this; - var view = this.context.view; - var siblings = getSilbings(view); - (0, import_util309.each)(siblings, function(sibling) { - var maskElements = getSiblingMaskElements(_this.context, sibling, 10); - var elements = getElements(sibling); - if (maskElements) { - (0, import_util309.each)(elements, function(el) { - if (maskElements.includes(el)) { - el.show(); - } else { - el.hide(); - } - }); - } - }); - }; - SiblingFilter3.prototype.reset = function() { - var siblings = getSilbings(this.context.view); - (0, import_util309.each)(siblings, function(sibling) { - var elements = getElements(sibling); - (0, import_util309.each)(elements, function(el) { - el.show(); - }); - }); - }; - return SiblingFilter3; -}(base_default12); -var sibling_filter_default2 = SiblingFilter2; - -// node_modules/@antv/g2/esm/interaction/action/view/button.js -var import_util311 = __toModule(require_lib()); -var PADDING_RIGHT = 10; -var PADDING_TOP = 5; -var ButtonAction = function(_super) { - __extends(ButtonAction3, _super); - function ButtonAction3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.buttonGroup = null; - _this.buttonCfg = { - name: "button", - text: "button", - textStyle: { - x: 0, - y: 0, - fontSize: 12, - fill: "#333333", - cursor: "pointer" - }, - padding: [8, 10], - style: { - fill: "#f7f7f7", - stroke: "#cccccc", - cursor: "pointer" - }, - activeStyle: { - fill: "#e6e6e6" - } - }; - return _this; - } - ButtonAction3.prototype.getButtonCfg = function() { - return (0, import_util311.deepMix)(this.buttonCfg, this.cfg); - }; - ButtonAction3.prototype.drawButton = function() { - var config = this.getButtonCfg(); - var group3 = this.context.view.foregroundGroup.addGroup({ - name: config.name - }); - var textShape = group3.addShape({ - type: "text", - name: "button-text", - attrs: __assign({ text: config.text }, config.textStyle) - }); - var textBBox = textShape.getBBox(); - var padding3 = parsePadding(config.padding); - var buttonShape = group3.addShape({ - type: "rect", - name: "button-rect", - attrs: __assign({ x: textBBox.x - padding3[3], y: textBBox.y - padding3[0], width: textBBox.width + padding3[1] + padding3[3], height: textBBox.height + padding3[0] + padding3[2] }, config.style) - }); - buttonShape.toBack(); - group3.on("mouseenter", function() { - buttonShape.attr(config.activeStyle); - }); - group3.on("mouseleave", function() { - buttonShape.attr(config.style); - }); - this.buttonGroup = group3; - }; - ButtonAction3.prototype.resetPosition = function() { - var view = this.context.view; - var coord2 = view.getCoordinate(); - var point2 = coord2.convert({ x: 1, y: 1 }); - var buttonGroup = this.buttonGroup; - var bbox = buttonGroup.getBBox(); - var matrix = ext_exports.transform(null, [ - ["t", point2.x - bbox.width - PADDING_RIGHT, point2.y + bbox.height + PADDING_TOP] - ]); - buttonGroup.setMatrix(matrix); - }; - ButtonAction3.prototype.show = function() { - if (!this.buttonGroup) { - this.drawButton(); - } - this.resetPosition(); - this.buttonGroup.show(); - }; - ButtonAction3.prototype.hide = function() { - if (this.buttonGroup) { - this.buttonGroup.hide(); - } - }; - ButtonAction3.prototype.destroy = function() { - var buttonGroup = this.buttonGroup; - if (buttonGroup) { - buttonGroup.remove(); - } - _super.prototype.destroy.call(this); - }; - return ButtonAction3; -}(base_default12); -var button_default = ButtonAction; - -// node_modules/@antv/g2/esm/interaction/action/view/drag.js -var DISTANCE = 4; -var Drag = function(_super) { - __extends(Drag2, _super); - function Drag2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.starting = false; - _this.dragStart = false; - return _this; - } - Drag2.prototype.start = function() { - this.starting = true; - this.startPoint = this.context.getCurrentPoint(); - }; - Drag2.prototype.drag = function() { - if (!this.startPoint) { - return; - } - var current = this.context.getCurrentPoint(); - var view = this.context.view; - var event = this.context.event; - if (!this.dragStart) { - if (distance7(current, this.startPoint) > DISTANCE) { - view.emit("dragstart", { - target: event.target, - x: event.x, - y: event.y - }); - this.dragStart = true; - } - } else { - view.emit("drag", { - target: event.target, - x: event.x, - y: event.y - }); - } - }; - Drag2.prototype.end = function() { - if (this.dragStart) { - var view = this.context.view; - var event_1 = this.context.event; - view.emit("dragend", { - target: event_1.target, - x: event_1.x, - y: event_1.y - }); - } - this.starting = false; - this.dragStart = false; - }; - return Drag2; -}(base_default12); -var drag_default = Drag; - -// node_modules/@antv/g2/esm/interaction/action/view/move.js -var MIN_DISTANCE = 5; -var Move = function(_super) { - __extends(Move2, _super); - function Move2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.starting = false; - _this.isMoving = false; - _this.startPoint = null; - _this.startMatrix = null; - return _this; - } - Move2.prototype.start = function() { - this.starting = true; - this.startPoint = this.context.getCurrentPoint(); - this.startMatrix = this.context.view.middleGroup.getMatrix(); - }; - Move2.prototype.move = function() { - if (!this.starting) { - return; - } - var startPoint = this.startPoint; - var currentPoint = this.context.getCurrentPoint(); - var d3 = distance7(startPoint, currentPoint); - if (d3 > MIN_DISTANCE && !this.isMoving) { - this.isMoving = true; - } - if (this.isMoving) { - var view = this.context.view; - var matrix = ext_exports.transform(this.startMatrix, [ - ["t", currentPoint.x - startPoint.x, currentPoint.y - startPoint.y] - ]); - view.backgroundGroup.setMatrix(matrix); - view.foregroundGroup.setMatrix(matrix); - view.middleGroup.setMatrix(matrix); - } - }; - Move2.prototype.end = function() { - if (this.isMoving) { - this.isMoving = false; - } - this.startMatrix = null; - this.starting = false; - this.startPoint = null; - }; - Move2.prototype.reset = function() { - this.starting = false; - this.startPoint = null; - this.isMoving = false; - var view = this.context.view; - view.backgroundGroup.resetMatrix(); - view.foregroundGroup.resetMatrix(); - view.middleGroup.resetMatrix(); - this.isMoving = false; - }; - return Move2; -}(base_default12); -var move_default = Move; - -// node_modules/@antv/g2/esm/interaction/action/view/scale-translate.js -var import_util314 = __toModule(require_lib()); - -// node_modules/@antv/g2/esm/interaction/action/view/scale-transform.js -var DIM_X = "x"; -var DIM_Y = "y"; -var ScaleTranslate = function(_super) { - __extends(ScaleTranslate4, _super); - function ScaleTranslate4() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.dims = [DIM_X, DIM_Y]; - _this.cfgFields = ["dims"]; - _this.cacheScaleDefs = {}; - return _this; - } - ScaleTranslate4.prototype.hasDim = function(dim) { - return this.dims.includes(dim); - }; - ScaleTranslate4.prototype.getScale = function(dim) { - var view = this.context.view; - if (dim === "x") { - return view.getXScale(); - } else { - return view.getYScales()[0]; - } - }; - ScaleTranslate4.prototype.resetDim = function(dim) { - var view = this.context.view; - if (this.hasDim(dim) && this.cacheScaleDefs[dim]) { - var scale12 = this.getScale(dim); - view.scale(scale12.field, this.cacheScaleDefs[dim]); - this.cacheScaleDefs[dim] = null; - } - }; - ScaleTranslate4.prototype.reset = function() { - this.resetDim(DIM_X); - this.resetDim(DIM_Y); - var view = this.context.view; - view.render(true); - }; - return ScaleTranslate4; -}(base_default12); -var scale_transform_default = ScaleTranslate; - -// node_modules/@antv/g2/esm/interaction/action/view/scale-translate.js -var ScaleTranslate2 = function(_super) { - __extends(ScaleTranslate4, _super); - function ScaleTranslate4() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.startPoint = null; - _this.starting = false; - _this.startCache = {}; - return _this; - } - ScaleTranslate4.prototype.start = function() { - var _this = this; - this.startPoint = this.context.getCurrentPoint(); - this.starting = true; - var dims = this.dims; - (0, import_util314.each)(dims, function(dim) { - var scale12 = _this.getScale(dim); - var min13 = scale12.min, max15 = scale12.max, values4 = scale12.values; - _this.startCache[dim] = { min: min13, max: max15, values: values4 }; - }); - }; - ScaleTranslate4.prototype.end = function() { - this.startPoint = null; - this.starting = false; - this.startCache = {}; - }; - ScaleTranslate4.prototype.translate = function() { - var _this = this; - if (!this.starting) { - return; - } - var startPoint = this.startPoint; - var coord2 = this.context.view.getCoordinate(); - var currentPoint = this.context.getCurrentPoint(); - var normalStart = coord2.invert(startPoint); - var noramlCurrent = coord2.invert(currentPoint); - var dx = noramlCurrent.x - normalStart.x; - var dy = noramlCurrent.y - normalStart.y; - var view = this.context.view; - var dims = this.dims; - (0, import_util314.each)(dims, function(dim) { - _this.translateDim(dim, { x: dx * -1, y: dy * -1 }); - }); - view.render(true); - }; - ScaleTranslate4.prototype.translateDim = function(dim, normalPoint) { - if (this.hasDim(dim)) { - var scale12 = this.getScale(dim); - if (scale12.isLinear) { - this.translateLinear(dim, scale12, normalPoint); - } - } - }; - ScaleTranslate4.prototype.translateLinear = function(dim, scale12, normalPoint) { - var view = this.context.view; - var _a6 = this.startCache[dim], min13 = _a6.min, max15 = _a6.max; - var range = max15 - min13; - var d3 = normalPoint[dim] * range; - if (!this.cacheScaleDefs[dim]) { - this.cacheScaleDefs[dim] = { - nice: scale12.nice, - min: min13, - max: max15 - }; - } - view.scale(scale12.field, { - nice: false, - min: min13 + d3, - max: max15 + d3 - }); - }; - ScaleTranslate4.prototype.reset = function() { - _super.prototype.reset.call(this); - this.startPoint = null; - this.starting = false; - }; - return ScaleTranslate4; -}(scale_transform_default); -var scale_translate_default = ScaleTranslate2; - -// node_modules/@antv/g2/esm/interaction/action/view/scale-zoom.js -var import_util315 = __toModule(require_lib()); -var ScaleTranslate3 = function(_super) { - __extends(ScaleTranslate4, _super); - function ScaleTranslate4() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.zoomRatio = 0.05; - return _this; - } - ScaleTranslate4.prototype.zoomIn = function() { - this.zoom(this.zoomRatio); - }; - ScaleTranslate4.prototype.zoom = function(scale12) { - var _this = this; - var dims = this.dims; - (0, import_util315.each)(dims, function(dim) { - _this.zoomDim(dim, scale12); - }); - this.context.view.render(true); - }; - ScaleTranslate4.prototype.zoomOut = function() { - this.zoom(-1 * this.zoomRatio); - }; - ScaleTranslate4.prototype.zoomDim = function(dim, dRatio) { - if (this.hasDim(dim)) { - var scale12 = this.getScale(dim); - if (scale12.isLinear) { - this.zoomLinear(dim, scale12, dRatio); - } - } - }; - ScaleTranslate4.prototype.zoomLinear = function(dim, scale12, dRatio) { - var view = this.context.view; - if (!this.cacheScaleDefs[dim]) { - this.cacheScaleDefs[dim] = { - nice: scale12.nice, - min: scale12.min, - max: scale12.max - }; - } - var scaleDef = this.cacheScaleDefs[dim]; - var range = scaleDef.max - scaleDef.min; - var min13 = scale12.min, max15 = scale12.max; - var d3 = dRatio * range; - var toMin = min13 - d3; - var toMax = max15 + d3; - var curRange = toMax - toMin; - var scaled = curRange / range; - if (toMax > toMin && scaled < 100 && scaled > 0.01) { - view.scale(scale12.field, { - nice: false, - min: min13 - d3, - max: max15 + d3 - }); - } - }; - return ScaleTranslate4; -}(scale_transform_default); -var scale_zoom_default = ScaleTranslate3; - -// node_modules/@antv/g2/esm/interaction/action/view/mousewheel-scroll.js -var import_util316 = __toModule(require_lib()); -function isWheelDown(event) { - var wheelEvent = event.gEvent.originalEvent; - return wheelEvent.deltaY > 0; -} -var DEFAULT_WHEELDELTA = 1; -var MousewheelScroll = function(_super) { - __extends(MousewheelScroll2, _super); - function MousewheelScroll2() { - return _super !== null && _super.apply(this, arguments) || this; - } - MousewheelScroll2.prototype.scroll = function(arg) { - var _a6 = this.context, view = _a6.view, event = _a6.event; - if (!view.getOptions().scrollbar) { - return; - } - var wheelDelta = (arg === null || arg === void 0 ? void 0 : arg.wheelDelta) || DEFAULT_WHEELDELTA; - var scrollbarController = view.getController("scrollbar"); - var xScale = view.getXScale(); - var data3 = view.getOptions().data; - var dataSize = (0, import_util316.size)((0, import_util316.valuesOfKey)(data3, xScale.field)); - var step = (0, import_util316.size)(xScale.values); - var currentRatio = scrollbarController.getValue(); - var currentStart = Math.floor((dataSize - step) * currentRatio); - var nextStart = currentStart + (isWheelDown(event) ? wheelDelta : -wheelDelta); - var correction = wheelDelta / (dataSize - step) / 1e4; - var nextRatio = (0, import_util316.clamp)(nextStart / (dataSize - step) + correction, 0, 1); - scrollbarController.setValue(nextRatio); - }; - return MousewheelScroll2; -}(base_default12); -var mousewheel_scroll_default = MousewheelScroll; - -// node_modules/@antv/g2/esm/index.js -registerTheme("dark", createThemeByStyleSheet(antvDark)); -registerEngine("canvas", esm_exports); -registerEngine("svg", esm_exports2); -registerGeometry("Polygon", polygon_default5); -registerGeometry("Interval", interval_default); -registerGeometry("Schema", schema_default); -registerGeometry("Path", path_default5); -registerGeometry("Point", point_default); -registerGeometry("Line", line_default9); -registerGeometry("Area", area_default); -registerGeometry("Edge", edge_default); -registerGeometry("Heatmap", heatmap_default); -registerGeometry("Violin", violin_default); -registerGeometryLabel("base", base_default14); -registerGeometryLabel("interval", interval_default2); -registerGeometryLabel("pie", pie_default); -registerGeometryLabel("polar", polar_default2); -registerGeometryLabelLayout("overlap", overlap); -registerGeometryLabelLayout("distribute", distribute); -registerGeometryLabelLayout("fixed-overlap", fixedOverlap); -registerGeometryLabelLayout("hide-overlap", hideOverlap); -registerGeometryLabelLayout("limit-in-shape", limitInShape); -registerGeometryLabelLayout("limit-in-canvas", limitInCanvas); -registerGeometryLabelLayout("limit-in-plot", limitInPlot); -registerGeometryLabelLayout("pie-outer", pieOuterLabelLayout); -registerGeometryLabelLayout("adjust-color", adjustColor); -registerGeometryLabelLayout("interval-adjust-position", intervalAdjustPosition); -registerGeometryLabelLayout("interval-hide-overlap", intervalHideOverlap); -registerGeometryLabelLayout("point-adjust-position", pointAdjustPosition); -registerGeometryLabelLayout("pie-spider", pieSpiderLabelLayout); -registerGeometryLabelLayout("path-adjust-position", pathAdjustPosition); -registerAnimation("fade-in", fadeIn); -registerAnimation("fade-out", fadeOut); -registerAnimation("grow-in-x", growInX); -registerAnimation("grow-in-xy", growInXY); -registerAnimation("grow-in-y", growInY); -registerAnimation("scale-in-x", scaleInX); -registerAnimation("scale-in-y", scaleInY); -registerAnimation("wave-in", waveIn); -registerAnimation("zoom-in", zoomIn); -registerAnimation("zoom-out", zoomOut); -registerAnimation("position-update", positionUpdate); -registerAnimation("sector-path-update", sectorPathUpdate); -registerAnimation("path-in", pathIn); -registerFacet("rect", rect_default4); -registerFacet("mirror", mirror_default); -registerFacet("list", list_default); -registerFacet("matrix", matrix_default); -registerFacet("circle", circle_default7); -registerFacet("tree", tree_default); -registerComponentController("axis", axis_default); -registerComponentController("legend", legend_default); -registerComponentController("tooltip", tooltip_default); -registerComponentController("annotation", annotation_default); -registerComponentController("slider", slider_default); -registerComponentController("scrollbar", scrollbar_default); -registerAction("tooltip", geometry_default); -registerAction("sibling-tooltip", sibling_default); -registerAction("ellipsis-text", ellipsis_text_default); -registerAction("element-active", active_default); -registerAction("element-single-active", single_active_default); -registerAction("element-range-active", range_active_default); -registerAction("element-highlight", highlight_default); -registerAction("element-highlight-by-x", highlight_by_x_default); -registerAction("element-highlight-by-color", highlight_by_color_default); -registerAction("element-single-highlight", single_highlight_default); -registerAction("element-range-highlight", range_highlight_default); -registerAction("element-sibling-highlight", range_highlight_default, { - effectSiblings: true, - effectByRecord: true -}); -registerAction("element-selected", selected_default); -registerAction("element-single-selected", single_selected_default); -registerAction("element-range-selected", range_selected_default); -registerAction("element-link-by-color", link_by_color_default); -registerAction("active-region", active_region_default); -registerAction("list-active", list_active_default); -registerAction("list-selected", list_selected_default); -registerAction("list-highlight", list_highlight_default); -registerAction("list-unchecked", list_unchecked_default); -registerAction("list-checked", list_checked_default); -registerAction("list-focus", list_focus_default); -registerAction("list-radio", list_radio_default); -registerAction("legend-item-highlight", list_highlight_default, { - componentNames: ["legend"] -}); -registerAction("axis-label-highlight", list_highlight_default, { - componentNames: ["axis"] -}); -registerAction("rect-mask", rect_default5); -registerAction("x-rect-mask", dim_rect_default, { dim: "x" }); -registerAction("y-rect-mask", dim_rect_default, { dim: "y" }); -registerAction("circle-mask", circle_default8); -registerAction("path-mask", path_default6); -registerAction("smooth-path-mask", smooth_path_default); -registerAction("cursor", cursor_default); -registerAction("data-filter", filter_default); -registerAction("brush", range_filter_default); -registerAction("brush-x", range_filter_default, { dims: ["x"] }); -registerAction("brush-y", range_filter_default, { dims: ["y"] }); -registerAction("sibling-filter", sibling_filter_default); -registerAction("sibling-x-filter", sibling_filter_default); -registerAction("sibling-y-filter", sibling_filter_default); -registerAction("element-filter", filter_default2); -registerAction("element-sibling-filter", sibling_filter_default2); -registerAction("element-sibling-filter-record", sibling_filter_default2, { byRecord: true }); -registerAction("view-drag", drag_default); -registerAction("view-move", move_default); -registerAction("scale-translate", scale_translate_default); -registerAction("scale-zoom", scale_zoom_default); -registerAction("reset-button", button_default, { - name: "reset-button", - text: "reset" -}); -registerAction("mousewheel-scroll", mousewheel_scroll_default); -function isPointInView(context) { - return context.isInPlot(); -} -registerInteraction("tooltip", { - start: [ - { trigger: "plot:mousemove", action: "tooltip:show", throttle: { wait: 50, leading: true, trailing: false } }, - { trigger: "plot:touchmove", action: "tooltip:show", throttle: { wait: 50, leading: true, trailing: false } } - ], - end: [ - { trigger: "plot:mouseleave", action: "tooltip:hide" }, - { trigger: "plot:leave", action: "tooltip:hide" }, - { trigger: "plot:touchend", action: "tooltip:hide" } - ] -}); -registerInteraction("ellipsis-text", { - start: [ - { - trigger: "legend-item-name:mousemove", - action: "ellipsis-text:show", - throttle: { wait: 50, leading: true, trailing: false } - }, - { - trigger: "legend-item-name:touchstart", - action: "ellipsis-text:show", - throttle: { wait: 50, leading: true, trailing: false } - }, - { - trigger: "axis-label:mousemove", - action: "ellipsis-text:show", - throttle: { wait: 50, leading: true, trailing: false } - }, - { - trigger: "axis-label:touchstart", - action: "ellipsis-text:show", - throttle: { wait: 50, leading: true, trailing: false } - } - ], - end: [ - { trigger: "legend-item-name:mouseleave", action: "ellipsis-text:hide" }, - { trigger: "legend-item-name:touchend", action: "ellipsis-text:hide" }, - { trigger: "axis-label:mouseleave", action: "ellipsis-text:hide" }, - { trigger: "axis-label:touchend", action: "ellipsis-text:hide" } - ] -}); -registerInteraction("element-active", { - start: [{ trigger: "element:mouseenter", action: "element-active:active" }], - end: [{ trigger: "element:mouseleave", action: "element-active:reset" }] -}); -registerInteraction("element-selected", { - start: [{ trigger: "element:click", action: "element-selected:toggle" }] -}); -registerInteraction("element-highlight", { - start: [{ trigger: "element:mouseenter", action: "element-highlight:highlight" }], - end: [{ trigger: "element:mouseleave", action: "element-highlight:reset" }] -}); -registerInteraction("element-highlight-by-x", { - start: [{ trigger: "element:mouseenter", action: "element-highlight-by-x:highlight" }], - end: [{ trigger: "element:mouseleave", action: "element-highlight-by-x:reset" }] -}); -registerInteraction("element-highlight-by-color", { - start: [{ trigger: "element:mouseenter", action: "element-highlight-by-color:highlight" }], - end: [{ trigger: "element:mouseleave", action: "element-highlight-by-color:reset" }] -}); -registerInteraction("legend-active", { - start: [{ trigger: "legend-item:mouseenter", action: ["list-active:active", "element-active:active"] }], - end: [{ trigger: "legend-item:mouseleave", action: ["list-active:reset", "element-active:reset"] }] -}); -registerInteraction("legend-highlight", { - start: [ - { trigger: "legend-item:mouseenter", action: ["legend-item-highlight:highlight", "element-highlight:highlight"] } - ], - end: [{ trigger: "legend-item:mouseleave", action: ["legend-item-highlight:reset", "element-highlight:reset"] }] -}); -registerInteraction("axis-label-highlight", { - start: [ - { trigger: "axis-label:mouseenter", action: ["axis-label-highlight:highlight", "element-highlight:highlight"] } - ], - end: [{ trigger: "axis-label:mouseleave", action: ["axis-label-highlight:reset", "element-highlight:reset"] }] -}); -registerInteraction("element-list-highlight", { - start: [{ trigger: "element:mouseenter", action: ["list-highlight:highlight", "element-highlight:highlight"] }], - end: [{ trigger: "element:mouseleave", action: ["list-highlight:reset", "element-highlight:reset"] }] -}); -registerInteraction("element-range-highlight", { - showEnable: [ - { trigger: "plot:mouseenter", action: "cursor:crosshair" }, - { trigger: "mask:mouseenter", action: "cursor:move" }, - { trigger: "plot:mouseleave", action: "cursor:default" }, - { trigger: "mask:mouseleave", action: "cursor:crosshair" } - ], - start: [ - { - trigger: "plot:mousedown", - isEnable: function(context) { - return !context.isInShape("mask"); - }, - action: ["rect-mask:start", "rect-mask:show"] - }, - { - trigger: "mask:dragstart", - action: ["rect-mask:moveStart"] - } - ], - processing: [ - { - trigger: "plot:mousemove", - action: ["rect-mask:resize"] - }, - { - trigger: "mask:drag", - action: ["rect-mask:move"] - }, - { - trigger: "mask:change", - action: ["element-range-highlight:highlight"] - } - ], - end: [ - { trigger: "plot:mouseup", action: ["rect-mask:end"] }, - { trigger: "mask:dragend", action: ["rect-mask:moveEnd"] }, - { - trigger: "document:mouseup", - isEnable: function(context) { - return !context.isInPlot(); - }, - action: ["element-range-highlight:clear", "rect-mask:end", "rect-mask:hide"] - } - ], - rollback: [{ trigger: "dblclick", action: ["element-range-highlight:clear", "rect-mask:hide"] }] -}); -registerInteraction("brush", { - showEnable: [ - { trigger: "plot:mouseenter", action: "cursor:crosshair" }, - { trigger: "plot:mouseleave", action: "cursor:default" } - ], - start: [ - { - trigger: "mousedown", - isEnable: isPointInView, - action: ["brush:start", "rect-mask:start", "rect-mask:show"] - } - ], - processing: [ - { - trigger: "mousemove", - isEnable: isPointInView, - action: ["rect-mask:resize"] - } - ], - end: [ - { - trigger: "mouseup", - isEnable: isPointInView, - action: ["brush:filter", "brush:end", "rect-mask:end", "rect-mask:hide", "reset-button:show"] - } - ], - rollback: [{ trigger: "reset-button:click", action: ["brush:reset", "reset-button:hide", "cursor:crosshair"] }] -}); -registerInteraction("brush-visible", { - showEnable: [ - { trigger: "plot:mouseenter", action: "cursor:crosshair" }, - { trigger: "plot:mouseleave", action: "cursor:default" } - ], - start: [ - { - trigger: "plot:mousedown", - action: ["rect-mask:start", "rect-mask:show"] - } - ], - processing: [ - { - trigger: "plot:mousemove", - action: ["rect-mask:resize"] - }, - { trigger: "mask:change", action: ["element-range-highlight:highlight"] } - ], - end: [ - { - trigger: "plot:mouseup", - action: ["rect-mask:end", "rect-mask:hide", "element-filter:filter", "element-range-highlight:clear"] - } - ], - rollback: [ - { - trigger: "dblclick", - action: ["element-filter:clear"] - } - ] -}); -registerInteraction("brush-x", { - showEnable: [ - { trigger: "plot:mouseenter", action: "cursor:crosshair" }, - { trigger: "plot:mouseleave", action: "cursor:default" } - ], - start: [ - { - trigger: "mousedown", - isEnable: isPointInView, - action: ["brush-x:start", "x-rect-mask:start", "x-rect-mask:show"] - } - ], - processing: [ - { - trigger: "mousemove", - isEnable: isPointInView, - action: ["x-rect-mask:resize"] - } - ], - end: [ - { - trigger: "mouseup", - isEnable: isPointInView, - action: ["brush-x:filter", "brush-x:end", "x-rect-mask:end", "x-rect-mask:hide"] - } - ], - rollback: [{ trigger: "dblclick", action: ["brush-x:reset"] }] -}); -registerInteraction("element-path-highlight", { - showEnable: [ - { trigger: "plot:mouseenter", action: "cursor:crosshair" }, - { trigger: "plot:mouseleave", action: "cursor:default" } - ], - start: [ - { trigger: "mousedown", isEnable: isPointInView, action: "path-mask:start" }, - { trigger: "mousedown", isEnable: isPointInView, action: "path-mask:show" } - ], - processing: [{ trigger: "mousemove", action: "path-mask:addPoint" }], - end: [{ trigger: "mouseup", action: "path-mask:end" }], - rollback: [{ trigger: "dblclick", action: "path-mask:hide" }] -}); -registerInteraction("element-single-selected", { - start: [{ trigger: "element:click", action: "element-single-selected:toggle" }] -}); -registerInteraction("legend-filter", { - showEnable: [ - { trigger: "legend-item:mouseenter", action: ["cursor:pointer", "list-radio:show"] }, - { trigger: "legend-item:mouseleave", action: ["cursor:default", "list-radio:hide"] } - ], - start: [ - { - trigger: "legend-item:click", - isEnable: function(context) { - return !context.isInShape("legend-item-radio"); - }, - action: ["list-unchecked:toggle", "data-filter:filter", "list-radio:show"] - }, - { - trigger: "legend-item-radio:mouseenter", - action: ["list-radio:showTip"] - }, - { - trigger: "legend-item-radio:mouseleave", - action: ["list-radio:hideTip"] - }, - { - trigger: "legend-item-radio:click", - action: ["list-focus:toggle", "data-filter:filter", "list-radio:show"] - } - ] -}); -registerInteraction("continuous-filter", { - start: [{ trigger: "legend:valuechanged", action: "data-filter:filter" }] -}); -registerInteraction("continuous-visible-filter", { - start: [{ trigger: "legend:valuechanged", action: "element-filter:filter" }] -}); -registerInteraction("legend-visible-filter", { - showEnable: [ - { trigger: "legend-item:mouseenter", action: "cursor:pointer" }, - { trigger: "legend-item:mouseleave", action: "cursor:default" } - ], - start: [{ trigger: "legend-item:click", action: ["list-unchecked:toggle", "element-filter:filter"] }] -}); -registerInteraction("active-region", { - start: [{ trigger: "plot:mousemove", action: "active-region:show" }], - end: [{ trigger: "plot:mouseleave", action: "active-region:hide" }] -}); -function isWheelDown2(event) { - event.gEvent.preventDefault(); - return event.gEvent.originalEvent.deltaY > 0; -} -registerInteraction("view-zoom", { - start: [ - { - trigger: "plot:mousewheel", - isEnable: function(context) { - return isWheelDown2(context.event); - }, - action: "scale-zoom:zoomOut", - throttle: { wait: 100, leading: true, trailing: false } - }, - { - trigger: "plot:mousewheel", - isEnable: function(context) { - return !isWheelDown2(context.event); - }, - action: "scale-zoom:zoomIn", - throttle: { wait: 100, leading: true, trailing: false } - } - ] -}); -registerInteraction("sibling-tooltip", { - start: [{ trigger: "plot:mousemove", action: "sibling-tooltip:show" }], - end: [{ trigger: "plot:mouseleave", action: "sibling-tooltip:hide" }] -}); -registerInteraction("plot-mousewheel-scroll", { - start: [{ trigger: "plot:mousewheel", action: "mousewheel-scroll:scroll" }] -}); - -// node_modules/@antv/g2plot/esm/core/locale.js -var import_util325 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/utils/flow.js -function flow() { - var flows = []; - for (var _i = 0; _i < arguments.length; _i++) { - flows[_i] = arguments[_i]; - } - return function(param) { - return flows.reduce(function(result, f3) { - return f3(result); - }, param); - }; -} - -// node_modules/@antv/g2plot/esm/utils/pick.js -function pick4(obj, keys6) { - var r4 = {}; - if (obj !== null && typeof obj === "object") { - keys6.forEach(function(key) { - var v3 = obj[key]; - if (v3 !== void 0) { - r4[key] = v3; - } - }); - } - return r4; -} - -// node_modules/@antv/g2plot/esm/utils/template.js -var import_util317 = __toModule(require_lib()); -function template(source, data3) { - if (!data3) { - return source; - } - return (0, import_util317.reduce)(data3, function(r4, v3, k4) { - return r4.replace(new RegExp("{\\s*" + k4 + "\\s*}", "g"), v3); - }, source); -} - -// node_modules/@antv/g2plot/esm/utils/invariant.js -var LEVEL; -(function(LEVEL2) { - LEVEL2["ERROR"] = "error"; - LEVEL2["WARN"] = "warn"; - LEVEL2["INFO"] = "log"; -})(LEVEL || (LEVEL = {})); -var BRAND = "AntV/G2Plot"; -function getMessage(format2) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - var argIndex = 0; - return BRAND + ": " + format2.replace(/%s/g, function() { - return "" + args[argIndex++]; - }); -} -function log2(level, condition, format2) { - var args = []; - for (var _i = 3; _i < arguments.length; _i++) { - args[_i - 3] = arguments[_i]; - } - if (!condition) { - console[level](getMessage.apply(void 0, __spreadArrays([format2], args))); - } -} - -// node_modules/@antv/g2plot/esm/utils/dom.js -function getContainerSize(ele) { - if (!ele) { - return { width: 0, height: 0 }; - } - var style = getComputedStyle(ele); - return { - width: (ele.clientWidth || parseInt(style.width, 10)) - parseInt(style.paddingLeft, 10) - parseInt(style.paddingRight, 10), - height: (ele.clientHeight || parseInt(style.height, 10)) - parseInt(style.paddingTop, 10) - parseInt(style.paddingBottom, 10) - }; -} - -// node_modules/@antv/g2plot/esm/utils/geometry.js -var import_util318 = __toModule(require_lib()); -function findGeometry(view, type2) { - return view.geometries.find(function(g4) { - return g4.type === type2; - }); -} -function getAllElements(view) { - return (0, import_util318.reduce)(view.geometries, function(r4, geometry35) { - return r4.concat(geometry35.elements); - }, []); -} -function getAllElementsRecursively(view) { - if ((0, import_util318.get)(view, ["views", "length"], 0) <= 0) { - return getAllElements(view); - } - return (0, import_util318.reduce)(view.views, function(ele, subView) { - return ele.concat(getAllElementsRecursively(subView)); - }, getAllElements(view)); -} -function getAllGeometriesRecursively(view) { - if ((0, import_util318.get)(view, ["views", "length"], 0) <= 0) { - return view.geometries; - } - return (0, import_util318.reduce)(view.views, function(ele, subView) { - return ele.concat(subView.geometries); - }, view.geometries); -} - -// node_modules/@antv/g2plot/esm/utils/view.js -function findViewById(chart, id) { - return chart.views.find(function(view) { - return view.id === id; - }); -} -function getViews(view) { - var parent = view.parent; - return parent ? parent.views : []; -} -function getSiblingViews(view) { - return getViews(view).filter(function(sub6) { - return sub6 !== view; - }); -} - -// node_modules/@antv/g2plot/esm/utils/label.js -var import_util319 = __toModule(require_lib()); -function transformLabel(labelOptions) { - if (!(0, import_util319.isType)(labelOptions, "Object")) { - return labelOptions; - } - var label17 = __assign({}, labelOptions); - if (label17.formatter && !label17.content) { - label17.content = label17.formatter; - } - return label17; -} - -// node_modules/@antv/g2plot/esm/utils/path.js -function points2Path(points, isInCircle) { - var path = []; - if (points.length) { - path.push(["M", points[0].x, points[0].y]); - for (var i4 = 1, length_1 = points.length; i4 < length_1; i4 += 1) { - var item = points[i4]; - path.push(["L", item.x, item.y]); - } - if (isInCircle) { - path.push(["Z"]); - } - } - return path; -} -var smoothBezier3 = function(points, smooth, isLoop, constraint) { - var cps = []; - var prevPoint; - var nextPoint; - var hasConstraint = !!constraint; - var min13; - var max15; - if (hasConstraint) { - min13 = [Infinity, Infinity]; - max15 = [-Infinity, -Infinity]; - for (var i4 = 0, l4 = points.length; i4 < l4; i4++) { - var point2 = points[i4]; - min13 = vec2_exports.min([0, 0], min13, point2); - max15 = vec2_exports.max([0, 0], max15, point2); - } - min13 = vec2_exports.min([0, 0], min13, constraint[0]); - max15 = vec2_exports.max([0, 0], max15, constraint[1]); - } - for (var i4 = 0, len5 = points.length; i4 < len5; i4++) { - var point2 = points[i4]; - if (isLoop) { - prevPoint = points[i4 ? i4 - 1 : len5 - 1]; - nextPoint = points[(i4 + 1) % len5]; - } else { - if (i4 === 0 || i4 === len5 - 1) { - cps.push(point2); - continue; - } else { - prevPoint = points[i4 - 1]; - nextPoint = points[i4 + 1]; - } - } - var v3 = [0, 0]; - v3 = vec2_exports.sub(v3, nextPoint, prevPoint); - v3 = vec2_exports.scale(v3, v3, smooth); - var d0 = vec2_exports.distance(point2, prevPoint); - var d1 = vec2_exports.distance(point2, nextPoint); - var sum = d0 + d1; - if (sum !== 0) { - d0 /= sum; - d1 /= sum; - } - var v1 = vec2_exports.scale([0, 0], v3, -d0); - var v22 = vec2_exports.scale([0, 0], v3, d1); - var cp0 = vec2_exports.add([0, 0], point2, v1); - var cp1 = vec2_exports.add([0, 0], point2, v22); - if (hasConstraint) { - cp0 = vec2_exports.max([0, 0], cp0, min13); - cp0 = vec2_exports.min([0, 0], cp0, max15); - cp1 = vec2_exports.max([0, 0], cp1, min13); - cp1 = vec2_exports.min([0, 0], cp1, max15); - } - cps.push(cp0); - cps.push(cp1); - } - if (isLoop) { - cps.push(cps.shift()); - } - return cps; -}; -function catmullRom2bezier2(crp, z3, constraint) { - var isLoop = !!z3; - var pointList = []; - for (var i4 = 0, l4 = crp.length; i4 < l4; i4 += 2) { - pointList.push([crp[i4], crp[i4 + 1]]); - } - var controlPointList = smoothBezier3(pointList, 0.4, isLoop, constraint); - var len5 = pointList.length; - var d1 = []; - var cp1; - var cp2; - var p4; - for (var i4 = 0; i4 < len5 - 1; i4++) { - cp1 = controlPointList[i4 * 2]; - cp2 = controlPointList[i4 * 2 + 1]; - p4 = pointList[i4 + 1]; - d1.push(["C", cp1[0], cp1[1], cp2[0], cp2[1], p4[0], p4[1]]); - } - if (isLoop) { - cp1 = controlPointList[len5]; - cp2 = controlPointList[len5 + 1]; - p4 = pointList[0]; - d1.push(["C", cp1[0], cp1[1], cp2[0], cp2[1], p4[0], p4[1]]); - } - return d1; -} -function getSplinePath2(points, isInCircle, constaint) { - var data3 = []; - var first = points[0]; - var prePoint = null; - if (points.length <= 2) { - return points2Path(points, isInCircle); - } - for (var i4 = 0, len5 = points.length; i4 < len5; i4++) { - var point2 = points[i4]; - if (!prePoint || !(prePoint.x === point2.x && prePoint.y === point2.y)) { - data3.push(point2.x); - data3.push(point2.y); - prePoint = point2; - } - } - var constraint = constaint || [ - [0, 0], - [1, 1] - ]; - var splinePath2 = catmullRom2bezier2(data3, isInCircle, constraint); - splinePath2.unshift(["M", first.x, first.y]); - return splinePath2; -} - -// node_modules/@antv/g2plot/esm/utils/deep-assign.js -var MAX_MIX_LEVEL = 5; -var toString3 = {}.toString; -var isType2 = function(value2, type2) { - return toString3.call(value2) === "[object " + type2 + "]"; -}; -var isArray49 = function(value2) { - return isType2(value2, "Array"); -}; -var isObjectLike = function(value2) { - return typeof value2 === "object" && value2 !== null; -}; -var isPlainObject4 = function(value2) { - if (!isObjectLike(value2) || !isType2(value2, "Object")) { - return false; - } - var proto = value2; - while (Object.getPrototypeOf(proto) !== null) { - proto = Object.getPrototypeOf(proto); - } - return Object.getPrototypeOf(value2) === proto; -}; -var deep = function(dist4, src, level, maxLevel) { - level = level || 0; - maxLevel = maxLevel || MAX_MIX_LEVEL; - for (var key in src) { - if (Object.prototype.hasOwnProperty.call(src, key)) { - var value2 = src[key]; - if (!value2) { - dist4[key] = value2; - } else { - if (isPlainObject4(value2)) { - if (!isPlainObject4(dist4[key])) { - dist4[key] = {}; - } - if (level < maxLevel) { - deep(dist4[key], value2, level + 1, maxLevel); - } else { - dist4[key] = src[key]; - } - } else if (isArray49(value2)) { - dist4[key] = []; - dist4[key] = dist4[key].concat(value2); - } else { - dist4[key] = value2; - } - } - } - } -}; -var deepAssign = function(rst) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - for (var i4 = 0; i4 < args.length; i4 += 1) { - deep(rst, args[i4]); - } - return rst; -}; - -// node_modules/@antv/g2plot/esm/utils/kebab-case.js -function kebabCase(word2) { - if (!word2) { - return word2; - } - var result = word2.match(/(([A-Z]{0,1}[a-z]*[^A-Z])|([A-Z]{1}))/g); - return result.map(function(s4) { - return s4.toLowerCase(); - }).join("-"); -} - -// node_modules/@antv/g2plot/esm/utils/statistic.js -var import_util320 = __toModule(require_lib()); -function adapteStyle(style) { - var styleObject = { - overflow: "hidden", - "white-space": "nowrap", - "text-overflow": "ellipsis", - display: "flex", - justifyContent: "center", - alignItems: "center" - }; - var shapeStyleKeys = [ - "stroke", - "lineWidth", - "shadowColor", - "strokeOpacity", - "shadowBlur", - "shadowOffsetX", - "shadowOffsetY", - "fill" - ]; - if ((0, import_util320.get)(style, "fill")) { - styleObject["color"] = style["fill"]; - } - var _a6 = pick4(style, shapeStyleKeys), shadowColor = _a6.shadowColor, _b = _a6.shadowBlur, shadowBlur = _b === void 0 ? 0 : _b, _c = _a6.shadowOffsetX, shadowOffsetX = _c === void 0 ? 0 : _c, _d = _a6.shadowOffsetY, shadowOffsetY = _d === void 0 ? 0 : _d; - styleObject["text-shadow"] = "" + [shadowColor, shadowOffsetX + "px", shadowOffsetY + "px", shadowBlur + "px"].join(" "); - var _e = pick4(style, shapeStyleKeys), stroke = _e.stroke, _f = _e.lineWidth, lineWidth = _f === void 0 ? 0 : _f; - styleObject["-webkit-text-stroke"] = "" + [lineWidth + "px", stroke].join(" "); - (0, import_util320.each)(style, function(v3, k4) { - if (["fontSize"].includes(k4) && (0, import_util320.isNumber)(v3)) { - styleObject[kebabCase(k4)] = v3 + "px"; - } else if (k4 && !shapeStyleKeys.includes(k4)) { - styleObject[kebabCase(k4)] = "" + v3; - } - }); - return styleObject; -} -function setStatisticContainerStyle(container2, style) { - container2.style["pointer-events"] = "none"; - (0, import_util320.each)(style, function(v3, k4) { - if (k4 && v3) { - container2.style[k4] = v3; - } - }); -} -var renderStatistic = function(chart, options, datum) { - var statistic4 = options.statistic, plotType = options.plotType; - var titleOpt = statistic4.title, contentOpt = statistic4.content; - [titleOpt, contentOpt].forEach(function(option, idx) { - if (!option) { - return; - } - var transform18 = ""; - if (idx === 0) { - transform18 = contentOpt ? "translate(-50%, -100%)" : "translate(-50%, -50%)"; - } else { - transform18 = titleOpt ? "translate(-50%, 0)" : "translate(-50%, -50%)"; - } - var style = (0, import_util320.isFunction)(option.style) ? option.style(datum) : option.style; - chart.annotation().html(__assign({ - position: ["50%", "50%"], - html: function(container2, view) { - var coordinate11 = view.getCoordinate(); - var containerW = 0; - if (plotType === "pie" || plotType === "ring-progress") { - containerW = coordinate11.getRadius() * coordinate11.innerRadius * 2; - } else if (plotType === "liquid") { - var liquidShape = (0, import_util320.get)(view.geometries, [0, "elements", 0, "shape"]); - if (liquidShape) { - var path = liquidShape.find(function(t4) { - return t4.get("name") === "wrap"; - }); - var width2 = path.getCanvasBBox().width; - containerW = width2; - } - } else if (!containerW) { - containerW = coordinate11.getWidth(); - } - setStatisticContainerStyle(container2, __assign({ width: containerW + "px", transform: transform18 }, adapteStyle(style))); - var filteredData = view.getData(); - if (option.customHtml) { - return option.customHtml(container2, view, datum, filteredData); - } - var text = option.content; - if (option.formatter) { - text = option.formatter(datum, filteredData); - } - return text ? (0, import_util320.isString)(text) ? text : "" + text : "
    "; - }, - key: (idx === 0 ? "top" : "bottom") + "-statistic" - }, pick4(option, ["offsetX", "offsetY", "rotate", "style", "formatter"]))); - }); -}; -var renderGaugeStatistic = function(chart, options, datum) { - var statistic4 = options.statistic; - var titleOpt = statistic4.title, contentOpt = statistic4.content; - [titleOpt, contentOpt].forEach(function(option) { - if (!option) { - return; - } - var style = (0, import_util320.isFunction)(option.style) ? option.style(datum) : option.style; - chart.annotation().html(__assign({ position: ["50%", "100%"], html: function(container2, view) { - var coordinate11 = view.getCoordinate(); - var polarCoord = view.views[0].getCoordinate(); - var polarCenter = polarCoord.getCenter(); - var polarRadius = polarCoord.getRadius(); - var polarMaxY = Math.max(Math.sin(polarCoord.startAngle), Math.sin(polarCoord.endAngle)) * polarRadius; - var offsetY = polarCenter.y + polarMaxY - coordinate11.y.start - parseFloat((0, import_util320.get)(style, "fontSize", 0)); - var containerWidth = coordinate11.getRadius() * coordinate11.innerRadius * 2; - setStatisticContainerStyle(container2, __assign({ width: containerWidth + "px", transform: "translate(-50%, " + offsetY + "px)" }, adapteStyle(style))); - var filteredData = view.getData(); - if (option.customHtml) { - return option.customHtml(container2, view, datum, filteredData); - } - var text = option.content; - if (option.formatter) { - text = option.formatter(datum, filteredData); - } - return text ? (0, import_util320.isString)(text) ? text : "" + text : "
    "; - } }, pick4(option, ["offsetX", "offsetY", "rotate", "style", "formatter"]))); - }); -}; - -// node_modules/@antv/g2plot/esm/utils/measure-text.js -var import_util321 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/utils/context.js -var ctx2; -function getCanvasContext2() { - if (!ctx2) { - ctx2 = document.createElement("canvas").getContext("2d"); - } - return ctx2; -} - -// node_modules/@antv/g2plot/esm/utils/measure-text.js -var measureTextWidth2 = (0, import_util321.memoize)(function(text, font) { - if (font === void 0) { - font = {}; - } - var fontSize = font.fontSize, _a6 = font.fontFamily, fontFamily = _a6 === void 0 ? "sans-serif" : _a6, fontWeight = font.fontWeight, fontStyle = font.fontStyle, fontVariant = font.fontVariant; - var ctx3 = getCanvasContext2(); - ctx3.font = [fontStyle, fontWeight, fontVariant, fontSize + "px", fontFamily].join(" "); - var metrics = ctx3.measureText((0, import_util321.isString)(text) ? text : ""); - return metrics.width; -}, function(text, font) { - if (font === void 0) { - font = {}; - } - return __spreadArrays([text], (0, import_util321.values)(font)).join(""); -}); - -// node_modules/@antv/g2plot/esm/utils/number.js -function isRealNumber(v3) { - return typeof v3 === "number" && !isNaN(v3); -} -function isBetween3(value2, start, end2) { - var min13 = Math.min(start, end2); - var max15 = Math.max(start, end2); - return value2 >= min13 && value2 <= max15; -} - -// node_modules/@antv/g2plot/esm/utils/data.js -var import_util322 = __toModule(require_lib()); -function adjustYMetaByZero(data3, field6) { - if (!data3) - return {}; - var numberData = data3.filter(function(datum) { - var v3 = (0, import_util322.get)(datum, [field6]); - return (0, import_util322.isNumber)(v3) && !isNaN(v3); - }); - var gtZero = numberData.every(function(datum) { - return (0, import_util322.get)(datum, [field6]) >= 0; - }); - var ltZero = numberData.every(function(datum) { - return (0, import_util322.get)(datum, [field6]) <= 0; - }); - if (gtZero) { - return { min: 0 }; - } - if (ltZero) { - return { max: 0 }; - } - return {}; -} -function transformDataToNodeLinkData(data3, sourceField, targetField, weightField, rawFields) { - if (rawFields === void 0) { - rawFields = []; - } - if (!Array.isArray(data3)) { - return { - nodes: [], - links: [] - }; - } - var links = []; - var nodesMap = {}; - var nodesIndex = -1; - data3.forEach(function(datum) { - var source = datum[sourceField]; - var target = datum[targetField]; - var weight = datum[weightField]; - var rawData = pick4(datum, rawFields); - if (!nodesMap[source]) { - nodesMap[source] = __assign({ id: ++nodesIndex, name: source }, rawData); - } - if (!nodesMap[target]) { - nodesMap[target] = __assign({ id: ++nodesIndex, name: target }, rawData); - } - links.push(__assign({ - source: nodesMap[source].id, - target: nodesMap[target].id, - value: weight - }, rawData)); - }); - return { - nodes: Object.values(nodesMap).sort(function(a4, b10) { - return a4.id - b10.id; - }), - links - }; -} -function processIllegalData(data3, field6) { - var processData2 = (0, import_util322.filter)(data3, function(d3) { - var v3 = d3[field6]; - return v3 === null || typeof v3 === "number" && !isNaN(v3); - }); - log2(LEVEL.WARN, processData2.length === data3.length, "illegal data existed in chart data."); - return processData2; -} - -// node_modules/@antv/g2plot/esm/utils/padding.js -var import_util323 = __toModule(require_lib()); -function normalPadding(padding3) { - if ((0, import_util323.isNumber)(padding3)) { - return [padding3, padding3, padding3, padding3]; - } - if ((0, import_util323.isArray)(padding3)) { - var length_1 = padding3.length; - if (length_1 === 1) { - return [padding3[0], padding3[0], padding3[0], padding3[0]]; - } - if (length_1 === 2) { - return [padding3[0], padding3[1], padding3[0], padding3[1]]; - } - if (length_1 === 3) { - return [padding3[0], padding3[1], padding3[2], padding3[1]]; - } - if (length_1 === 4) { - return padding3; - } - } - return [0, 0, 0, 0]; -} -function getAdjustAppendPadding(padding3, position2, append) { - if (position2 === void 0) { - position2 = "bottom"; - } - if (append === void 0) { - append = 25; - } - var currentAppendPadding = normalPadding(padding3); - var PADDING2 = [ - position2.startsWith("top") ? append : 0, - position2.startsWith("right") ? append : 0, - position2.startsWith("bottom") ? append : 0, - position2.startsWith("left") ? append : 0 - ]; - return [ - currentAppendPadding[0] + PADDING2[0], - currentAppendPadding[1] + PADDING2[1], - currentAppendPadding[2] + PADDING2[2], - currentAppendPadding[3] + PADDING2[3] - ]; -} -function resolveAllPadding(paddings) { - var normalPaddings = paddings.map(function(item) { - return normalPadding(item); - }); - var finalPadding = [0, 0, 0, 0]; - if (normalPaddings.length > 0) { - finalPadding = finalPadding.map(function(item, index2) { - normalPaddings.forEach(function(d3, i4) { - item += normalPaddings[i4][index2]; - }); - return item; - }); - } - return finalPadding; -} - -// node_modules/@antv/g2plot/esm/core/global.js -var import_util324 = __toModule(require_lib()); -var GLOBAL = { - locale: "en-US" -}; - -// node_modules/@antv/g2plot/esm/core/locale.js -var LocaleMap = {}; -function registerLocale(locale, localeObj) { - LocaleMap[locale] = localeObj; -} -function getLocale(locale) { - return { - get: function(key, obj) { - return template((0, import_util325.get)(LocaleMap[locale], key) || (0, import_util325.get)(LocaleMap[GLOBAL.locale], key) || (0, import_util325.get)(LocaleMap["en-US"], key) || key, obj); - } - }; -} - -// node_modules/@antv/g2plot/esm/locales/en_US.js -var EN_US_LOCALE = { - locale: "en-US", - general: { - increase: "Increase", - decrease: "Decrease", - root: "Root" - }, - statistic: { - total: "Total" - }, - conversionTag: { - label: "Rate" - }, - legend: {}, - tooltip: {}, - slider: {}, - scrollbar: {}, - waterfall: { - total: "Total" - } -}; - -// node_modules/@antv/g2plot/esm/locales/zh_CN.js -var ZH_CN_LOCALE = { - locale: "zh-CN", - general: { - increase: "\u589E\u52A0", - decrease: "\u51CF\u5C11", - root: "\u521D\u59CB" - }, - statistic: { - total: "\u603B\u8BA1" - }, - conversionTag: { - label: "\u8F6C\u5316\u7387" - }, - legend: {}, - tooltip: {}, - slider: {}, - scrollbar: {}, - waterfall: { - total: "\u603B\u8BA1" - } -}; - -// node_modules/@antv/g2plot/esm/core/plot.js -var import_util326 = __toModule(require_lib()); -var import_size_sensor = __toModule(require_lib2()); -var SOURCE_ATTRIBUTE_NAME = "data-chart-source-type"; -var PLOT_CONTAINER_OPTIONS = [ - "padding", - "appendPadding", - "renderer", - "pixelRatio", - "syncViewPadding", - "supportCSSTransform", - "limitInPlot" -]; -var Plot = function(_super) { - __extends(Plot2, _super); - function Plot2(container2, options) { - var _this = _super.call(this) || this; - _this.container = typeof container2 === "string" ? document.getElementById(container2) : container2; - _this.options = deepAssign({}, _this.getDefaultOptions(), options); - _this.createG2(); - _this.bindEvents(); - return _this; - } - Plot2.getDefaultOptions = function() { - return { - renderer: "canvas", - xAxis: { - nice: true, - label: { - autoRotate: false, - autoHide: { type: "equidistance", cfg: { minGap: 6 } } - } - }, - yAxis: { - nice: true, - label: { - autoHide: true, - autoRotate: false - } - }, - animation: true - }; - }; - Plot2.prototype.createG2 = function() { - var _a6 = this.options, width2 = _a6.width, height = _a6.height, defaultInteractions = _a6.defaultInteractions; - this.chart = new chart_default(__assign(__assign(__assign(__assign({ container: this.container, autoFit: false }, this.getChartSize(width2, height)), { localRefresh: false }), pick4(this.options, PLOT_CONTAINER_OPTIONS)), { defaultInteractions })); - this.container.setAttribute(SOURCE_ATTRIBUTE_NAME, "G2Plot"); - }; - Plot2.prototype.getChartSize = function(width2, height) { - var chartSize = getContainerSize(this.container); - return { width: width2 || chartSize.width || 400, height: height || chartSize.height || 400 }; - }; - Plot2.prototype.bindEvents = function() { - var _this = this; - if (this.chart) { - this.chart.on("*", function(e4) { - if (e4 === null || e4 === void 0 ? void 0 : e4.type) { - _this.emit(e4.type, e4); - } - }); - } - }; - Plot2.prototype.getDefaultOptions = function() { - return Plot2.getDefaultOptions(); - }; - Plot2.prototype.render = function() { - this.chart.clear(); - this.chart.options = { - data: [], - animate: true - }; - this.chart.views = []; - this.execAdaptor(); - this.chart.render(); - this.bindSizeSensor(); - }; - Plot2.prototype.update = function(options) { - this.updateOption(options); - this.render(); - }; - Plot2.prototype.updateOption = function(options) { - this.options = deepAssign({}, this.options, options); - }; - Plot2.prototype.setState = function(type2, condition, status) { - if (status === void 0) { - status = true; - } - var elements = getAllElementsRecursively(this.chart); - (0, import_util326.each)(elements, function(ele) { - if (condition(ele.getData())) { - ele.setState(type2, status); - } - }); - }; - Plot2.prototype.getStates = function() { - var elements = getAllElementsRecursively(this.chart); - var stateObjects = []; - (0, import_util326.each)(elements, function(element) { - var data3 = element.getData(); - var states = element.getStates(); - (0, import_util326.each)(states, function(state2) { - stateObjects.push({ data: data3, state: state2, geometry: element.geometry, element }); - }); - }); - return stateObjects; - }; - Plot2.prototype.changeData = function(data3) { - this.update({ data: data3 }); - }; - Plot2.prototype.changeSize = function(width2, height) { - this.chart.changeSize(width2, height); - }; - Plot2.prototype.addAnnotations = function(annotations) { - var incoming = __spreadArrays(annotations); - var controller = this.chart.getController("annotation"); - var current = controller.getComponents().map(function(co) { - return co.extra; - }); - controller.clear(true); - var _loop_1 = function(i5) { - var annotation4 = current[i5]; - var findIndex3 = incoming.findIndex(function(item) { - return item.id && item.id === annotation4.id; - }); - if (findIndex3 !== -1) { - annotation4 = deepAssign({}, annotation4, incoming[findIndex3]); - incoming.splice(findIndex3, 1); - } - controller.annotation(annotation4); - }; - for (var i4 = 0; i4 < current.length; i4++) { - _loop_1(i4); - } - incoming.forEach(function(annotation4) { - return controller.annotation(annotation4); - }); - this.chart.render(true); - }; - Plot2.prototype.removeAnnotations = function(annotations) { - var controller = this.chart.getController("annotation"); - var current = controller.getComponents().map(function(co) { - return co.extra; - }); - controller.clear(true); - var _loop_2 = function(i5) { - var annotation4 = current[i5]; - if (!annotations.find(function(item) { - return item.id && item.id === annotation4.id; - })) { - controller.annotation(annotation4); - } - }; - for (var i4 = 0; i4 < current.length; i4++) { - _loop_2(i4); - } - this.chart.render(true); - }; - Plot2.prototype.destroy = function() { - this.unbindSizeSensor(); - this.chart.destroy(); - this.off(); - this.container.removeAttribute(SOURCE_ATTRIBUTE_NAME); - }; - Plot2.prototype.execAdaptor = function() { - var adaptor36 = this.getSchemaAdaptor(); - var _a6 = this.options, padding3 = _a6.padding, appendPadding = _a6.appendPadding; - this.chart.padding = padding3; - this.chart.appendPadding = appendPadding; - adaptor36({ - chart: this.chart, - options: this.options - }); - }; - Plot2.prototype.triggerResize = function() { - this.chart.forceFit(); - }; - Plot2.prototype.bindSizeSensor = function() { - var _this = this; - if (this.unbind) { - return; - } - var _a6 = this.options.autoFit, autoFit = _a6 === void 0 ? true : _a6; - if (autoFit) { - this.unbind = (0, import_size_sensor.bind)(this.container, function() { - var _a7 = getContainerSize(_this.container), width2 = _a7.width, height = _a7.height; - if (width2 !== _this.chart.width || height !== _this.chart.height) { - _this.triggerResize(); - } - }); - } - }; - Plot2.prototype.unbindSizeSensor = function() { - if (this.unbind) { - this.unbind(); - this.unbind = void 0; - } - }; - return Plot2; -}(esm_default); - -// node_modules/@antv/g2plot/esm/plots/line/adaptor.js -var import_util336 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/adaptor/common.js -var import_util331 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/constant.js -var AXIS_META_CONFIG_KEYS = [ - "type", - "alias", - "tickCount", - "tickInterval", - "min", - "max", - "nice", - "minLimit", - "maxLimit", - "range", - "tickMethod", - "base", - "exponent", - "mask", - "sync" -]; - -// node_modules/@antv/g2plot/esm/adaptor/pattern.js -var import_util330 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/utils/pattern/util.js -function getPixelRatio2() { - return typeof window === "object" ? window === null || window === void 0 ? void 0 : window.devicePixelRatio : 2; -} -function initCanvas(width2, height) { - if (height === void 0) { - height = width2; - } - var canvas = document.createElement("canvas"); - var pixelRatio = getPixelRatio2(); - canvas.width = width2 * pixelRatio; - canvas.height = height * pixelRatio; - canvas.style.width = width2 + "px"; - canvas.style.height = height + "px"; - var ctx3 = canvas.getContext("2d"); - ctx3.scale(pixelRatio, pixelRatio); - return canvas; -} -function drawBackground(context, cfg, width2, height) { - if (height === void 0) { - height = width2; - } - var backgroundColor = cfg.backgroundColor, opacity = cfg.opacity; - context.globalAlpha = opacity; - context.fillStyle = backgroundColor; - context.beginPath(); - context.fillRect(0, 0, width2, height); - context.closePath(); -} -function getUnitPatternSize(size14, padding3, isStagger) { - var unitSize = size14 + padding3; - return isStagger ? unitSize * 2 : unitSize; -} -function getSymbolsPosition(unitSize, isStagger) { - var symbolsPos = isStagger ? [ - [unitSize * (1 / 4), unitSize * (1 / 4)], - [unitSize * (3 / 4), unitSize * (3 / 4)] - ] : [[unitSize * (1 / 2), unitSize * (1 / 2)]]; - return symbolsPos; -} -function transformMatrix(dpr, rotation) { - var radian = rotation * Math.PI / 180; - var matrix = { - a: Math.cos(radian) * (1 / dpr), - b: Math.sin(radian) * (1 / dpr), - c: -Math.sin(radian) * (1 / dpr), - d: Math.cos(radian) * (1 / dpr), - e: 0, - f: 0 - }; - return matrix; -} - -// node_modules/@antv/g2plot/esm/utils/pattern/dot.js -var defaultDotPatternCfg = { - size: 6, - padding: 2, - backgroundColor: "transparent", - opacity: 1, - rotation: 0, - fill: "#fff", - fillOpacity: 0.5, - stroke: "transparent", - lineWidth: 0, - isStagger: true -}; -function drawDot(context, cfg, x6, y5) { - var size14 = cfg.size, fill = cfg.fill, lineWidth = cfg.lineWidth, stroke = cfg.stroke, fillOpacity = cfg.fillOpacity; - context.beginPath(); - context.globalAlpha = fillOpacity; - context.fillStyle = fill; - context.strokeStyle = stroke; - context.lineWidth = lineWidth; - context.arc(x6, y5, size14 / 2, 0, 2 * Math.PI, false); - context.fill(); - if (lineWidth) { - context.stroke(); - } - context.closePath(); -} -function createDotPattern(cfg) { - var dotCfg = deepAssign({}, defaultDotPatternCfg, cfg); - var size14 = dotCfg.size, padding3 = dotCfg.padding, isStagger = dotCfg.isStagger, rotation = dotCfg.rotation; - var unitSize = getUnitPatternSize(size14, padding3, isStagger); - var dots = getSymbolsPosition(unitSize, isStagger); - var canvas = initCanvas(unitSize, unitSize); - var ctx3 = canvas.getContext("2d"); - drawBackground(ctx3, dotCfg, unitSize); - for (var _i = 0, dots_1 = dots; _i < dots_1.length; _i++) { - var _a6 = dots_1[_i], x6 = _a6[0], y5 = _a6[1]; - drawDot(ctx3, dotCfg, x6, y5); - } - var pattern2 = ctx3.createPattern(canvas, "repeat"); - if (pattern2) { - var dpr = getPixelRatio2(); - var matrix = transformMatrix(dpr, rotation); - pattern2.setTransform(matrix); - } - return pattern2; -} - -// node_modules/@antv/g2plot/esm/utils/pattern/line.js -var defaultLinePatternCfg = { - rotation: 45, - spacing: 5, - opacity: 1, - backgroundColor: "transparent", - strokeOpacity: 0.5, - stroke: "#fff", - lineWidth: 2 -}; -function drawLine(context, cfg, d3) { - var stroke = cfg.stroke, lineWidth = cfg.lineWidth, strokeOpacity = cfg.strokeOpacity; - var path = new Path2D(d3); - context.globalAlpha = strokeOpacity; - context.lineCap = "square"; - context.strokeStyle = lineWidth ? stroke : "transparent"; - context.lineWidth = lineWidth; - context.stroke(path); -} -function createLinePattern(cfg) { - var lineCfg = deepAssign({}, defaultLinePatternCfg, cfg); - var spacing = lineCfg.spacing, rotation = lineCfg.rotation, lineWidth = lineCfg.lineWidth; - var width2 = spacing + lineWidth || 1; - var height = spacing + lineWidth || 1; - var d3 = "\n M 0 0 L " + width2 + " 0\n M 0 " + height + " L " + width2 + " " + height + "\n "; - var canvas = initCanvas(width2, height); - var ctx3 = canvas.getContext("2d"); - drawBackground(ctx3, lineCfg, width2, height); - drawLine(ctx3, lineCfg, d3); - var pattern2 = ctx3.createPattern(canvas, "repeat"); - if (pattern2) { - var dpr = getPixelRatio2(); - var matrix = transformMatrix(dpr, rotation); - pattern2.setTransform(matrix); - } - return pattern2; -} - -// node_modules/@antv/g2plot/esm/utils/pattern/square.js -var defaultSquarePatternCfg = { - size: 6, - padding: 1, - isStagger: true, - backgroundColor: "transparent", - opacity: 1, - rotation: 0, - fill: "#fff", - fillOpacity: 0.5, - stroke: "transparent", - lineWidth: 0 -}; -function drawSquare(context, cfg, x6, y5) { - var stroke = cfg.stroke, size14 = cfg.size, fill = cfg.fill, lineWidth = cfg.lineWidth, fillOpacity = cfg.fillOpacity; - context.globalAlpha = fillOpacity; - context.strokeStyle = stroke; - context.lineWidth = lineWidth; - context.fillStyle = fill; - context.strokeRect(x6 - size14 / 2, y5 - size14 / 2, size14, size14); - context.fillRect(x6 - size14 / 2, y5 - size14 / 2, size14, size14); -} -function createSquarePattern(cfg) { - var squareCfg = deepAssign({}, defaultSquarePatternCfg, cfg); - var size14 = squareCfg.size, padding3 = squareCfg.padding, isStagger = squareCfg.isStagger, rotation = squareCfg.rotation; - var unitSize = getUnitPatternSize(size14, padding3, isStagger); - var squares = getSymbolsPosition(unitSize, isStagger); - var canvas = initCanvas(unitSize, unitSize); - var ctx3 = canvas.getContext("2d"); - drawBackground(ctx3, squareCfg, unitSize); - for (var _i = 0, squares_1 = squares; _i < squares_1.length; _i++) { - var _a6 = squares_1[_i], x6 = _a6[0], y5 = _a6[1]; - drawSquare(ctx3, squareCfg, x6, y5); - } - var pattern2 = ctx3.createPattern(canvas, "repeat"); - if (pattern2) { - var dpr = getPixelRatio2(); - var matrix = transformMatrix(dpr, rotation); - pattern2.setTransform(matrix); - } - return pattern2; -} - -// node_modules/@antv/g2plot/esm/utils/pattern/index.js -function getCanvasPattern(options) { - var type2 = options.type, cfg = options.cfg; - var pattern2; - switch (type2) { - case "dot": - pattern2 = createDotPattern(cfg); - break; - case "line": - pattern2 = createLinePattern(cfg); - break; - case "square": - pattern2 = createSquarePattern(cfg); - break; - default: - break; - } - return pattern2; -} - -// node_modules/@antv/g2plot/esm/adaptor/pattern.js -function pattern(key) { - var _this = this; - return function(params) { - var _a6; - var options = params.options, chart = params.chart; - var patternOption = options.pattern; - if (!patternOption) { - return params; - } - var style = function(datum) { - var _a7, _b, _c; - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - var defaultColor = chart.getTheme().defaultColor; - var color4 = defaultColor; - var colorAttribute = (_b = (_a7 = chart.geometries) === null || _a7 === void 0 ? void 0 : _a7[0]) === null || _b === void 0 ? void 0 : _b.getAttribute("color"); - if (colorAttribute) { - var colorField = colorAttribute.getFields()[0]; - var seriesValue = (0, import_util330.get)(datum, colorField); - color4 = Util.getMappingValue(colorAttribute, seriesValue, ((_c = colorAttribute.values) === null || _c === void 0 ? void 0 : _c[0]) || defaultColor); - } - var pattern2 = patternOption; - if (typeof patternOption === "function") { - pattern2 = patternOption.call(_this, datum, color4); - } - if (pattern2 instanceof CanvasPattern === false) { - pattern2 = getCanvasPattern(deepAssign({}, { cfg: { backgroundColor: color4 } }, pattern2)); - } - var styleOption = options[key]; - return __assign(__assign({}, typeof styleOption === "function" ? styleOption.call.apply(styleOption, __spreadArrays([_this, datum], args)) : styleOption || {}), { fill: pattern2 || color4 }); - }; - return deepAssign({}, params, { options: (_a6 = {}, _a6[key] = style, _a6) }); - }; -} - -// node_modules/@antv/g2plot/esm/adaptor/common.js -function legend(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend, colorField = options.colorField, seriesField = options.seriesField; - if (legend18 === false) { - chart.legend(false); - } else if (colorField || seriesField) { - chart.legend(colorField || seriesField, legend18); - } - return params; -} -function tooltip(params) { - var chart = params.chart, options = params.options; - var tooltip10 = options.tooltip; - if (tooltip10 !== void 0) { - chart.tooltip(tooltip10); - } - return params; -} -function interaction(params) { - var chart = params.chart, options = params.options; - var interactions = options.interactions; - (0, import_util331.each)(interactions, function(i4) { - if (i4.enable === false) { - chart.removeInteraction(i4.type); - } else { - chart.interaction(i4.type, i4.cfg || {}); - } - }); - return params; -} -function animation(params) { - var chart = params.chart, options = params.options; - var animation7 = options.animation; - if (typeof animation7 === "boolean") { - chart.animate(animation7); - } else { - chart.animate(true); - } - (0, import_util331.each)(chart.geometries, function(g4) { - g4.animate(animation7); - }); - return params; -} -function theme(params) { - var chart = params.chart, options = params.options; - var theme4 = options.theme; - if (theme4) { - chart.theme(theme4); - } - return params; -} -function state(params) { - var chart = params.chart, options = params.options; - var state2 = options.state; - if (state2) { - (0, import_util331.each)(chart.geometries, function(geometry35) { - geometry35.state(state2); - }); - } - return params; -} -function slider(params) { - var chart = params.chart, options = params.options; - var slider3 = options.slider; - chart.option("slider", slider3); - return params; -} -function scrollbar(params) { - var chart = params.chart, options = params.options; - var scrollbar2 = options.scrollbar; - chart.option("scrollbar", scrollbar2); - return params; -} -function scale7(axes, meta23) { - return function(params) { - var chart = params.chart, options = params.options; - var scales = {}; - (0, import_util331.each)(axes, function(axis22, field6) { - scales[field6] = pick4(axis22, AXIS_META_CONFIG_KEYS); - }); - scales = deepAssign({}, meta23, options.meta, scales); - chart.scale(scales); - return params; - }; -} -function annotation(annotationOptions) { - return function(params) { - var chart = params.chart, options = params.options; - var annotationController = chart.getController("annotation"); - (0, import_util331.each)(__spreadArrays(options.annotations || [], annotationOptions || []), function(annotationOption) { - annotationController.annotation(annotationOption); - }); - return params; - }; -} -function limitInPlot2(params) { - var chart = params.chart, options = params.options; - var yAxis = options.yAxis, limitInPlot5 = options.limitInPlot; - var value2 = limitInPlot5; - if ((0, import_util331.isObject)(yAxis) && (0, import_util331.isNil)(limitInPlot5)) { - if (Object.values(pick4(yAxis, ["min", "max", "minLimit", "maxLimit"])).some(function(value3) { - return !(0, import_util331.isNil)(value3); - })) { - value2 = true; - } else { - value2 = false; - } - } - chart.limitInPlot = value2; - return params; -} - -// node_modules/@antv/g2plot/esm/utils/tooltip.js -var import_util332 = __toModule(require_lib()); -function getTooltipMapping(tooltip10, defaultFields) { - if (tooltip10 === false) { - return { - fields: false - }; - } - var fields = (0, import_util332.get)(tooltip10, "fields"); - var formatter = (0, import_util332.get)(tooltip10, "formatter"); - if (formatter && !fields) { - fields = defaultFields; - } - return { - fields, - formatter - }; -} - -// node_modules/@antv/g2plot/esm/adaptor/geometries/base.js -var import_util333 = __toModule(require_lib()); -function getMappingField(o3, field6) { - var type2 = o3.type, xField = o3.xField, yField = o3.yField, colorField = o3.colorField, shapeField = o3.shapeField, sizeField = o3.sizeField, styleField = o3.styleField, _a6 = o3.rawFields, rawFields = _a6 === void 0 ? [] : _a6; - var fields = []; - if (field6 === "color") { - fields = __spreadArrays([colorField || xField], rawFields); - } else if (field6 === "shape") { - fields = __spreadArrays([shapeField || xField], rawFields); - } else if (field6 === "size") { - fields = __spreadArrays([sizeField || xField], rawFields); - } else { - fields = __spreadArrays([xField, yField, colorField, shapeField, sizeField, styleField], rawFields); - var idx = ["x", "y", "color", "shape", "size", "style"].indexOf(field6); - var f3 = fields[idx]; - fields.splice(idx, 1); - fields.unshift(f3); - } - var mappingFields = (0, import_util333.uniq)(fields.filter(function(f4) { - return !!f4; - })); - var tileMappingField = type2 === "line" && [xField, yField].includes(mappingFields.join("*")) ? "" : mappingFields.join("*"); - return { - mappingFields, - tileMappingField - }; -} -function getMappingFunction(mappingFields, func) { - if (!func) - return void 0; - return function() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var params = {}; - mappingFields.forEach(function(f3, idx) { - params[f3] = args[idx]; - }); - delete params["undefined"]; - return func(params); - }; -} -function geometry(params) { - var chart = params.chart, options = params.options; - var type2 = options.type, args = options.args, mapping = options.mapping, xField = options.xField, yField = options.yField, colorField = options.colorField, shapeField = options.shapeField, sizeField = options.sizeField, tooltipFields = options.tooltipFields, label17 = options.label, state2 = options.state, customInfo = options.customInfo; - if (!mapping) { - return params; - } - var color4 = mapping.color, shape = mapping.shape, size14 = mapping.size, style = mapping.style, tooltip10 = mapping.tooltip; - var geometry35 = chart[type2](args).position(xField + "*" + yField); - if ((0, import_util333.isString)(color4)) { - colorField ? geometry35.color(colorField, color4) : geometry35.color(color4); - } else if ((0, import_util333.isFunction)(color4)) { - var _a6 = getMappingField(options, "color"), mappingFields = _a6.mappingFields, tileMappingField = _a6.tileMappingField; - geometry35.color(tileMappingField, getMappingFunction(mappingFields, color4)); - } else { - colorField && geometry35.color(colorField, color4); - } - if ((0, import_util333.isString)(shape)) { - shapeField ? geometry35.shape(shapeField, [shape]) : geometry35.shape(shape); - } else if ((0, import_util333.isFunction)(shape)) { - var _b = getMappingField(options, "shape"), mappingFields = _b.mappingFields, tileMappingField = _b.tileMappingField; - geometry35.shape(tileMappingField, getMappingFunction(mappingFields, shape)); - } else { - shapeField && geometry35.shape(shapeField, shape); - } - if ((0, import_util333.isNumber)(size14)) { - sizeField ? geometry35.size(sizeField, size14) : geometry35.size(size14); - } else if ((0, import_util333.isFunction)(size14)) { - var _c = getMappingField(options, "size"), mappingFields = _c.mappingFields, tileMappingField = _c.tileMappingField; - geometry35.size(tileMappingField, getMappingFunction(mappingFields, size14)); - } else { - sizeField && geometry35.size(sizeField, size14); - } - if ((0, import_util333.isFunction)(style)) { - var _d = getMappingField(options, "style"), mappingFields = _d.mappingFields, tileMappingField = _d.tileMappingField; - geometry35.style(tileMappingField, getMappingFunction(mappingFields, style)); - } else if ((0, import_util333.isObject)(style)) { - geometry35.style(style); - } - if (tooltipFields === false) { - geometry35.tooltip(false); - } else if (!(0, import_util333.isEmpty)(tooltipFields)) { - geometry35.tooltip(tooltipFields.join("*"), getMappingFunction(tooltipFields, tooltip10)); - } - if (label17 === false) { - geometry35.label(false); - } else if (label17) { - var callback = label17.callback, fields = label17.fields, cfg = __rest(label17, ["callback", "fields"]); - geometry35.label({ - fields: fields || [yField], - callback, - cfg: transformLabel(cfg) - }); - } - if (state2) { - geometry35.state(state2); - } - if (customInfo) { - geometry35.customInfo(customInfo); - } - [xField, yField].filter(function(f3) { - return f3 !== colorField; - }).forEach(function(f3) { - chart.legend(f3, false); - }); - return __assign(__assign({}, params), { - ext: { geometry: geometry35 } - }); -} - -// node_modules/@antv/g2plot/esm/adaptor/geometries/area.js -function area(params) { - var options = params.options; - var area2 = options.area, xField = options.xField, yField = options.yField, seriesField = options.seriesField, smooth = options.smooth, tooltip10 = options.tooltip; - var _a6 = getTooltipMapping(tooltip10, [xField, yField, seriesField]), fields = _a6.fields, formatter = _a6.formatter; - return area2 ? geometry(deepAssign({}, params, { - options: { - type: "area", - colorField: seriesField, - tooltipFields: fields, - mapping: __assign({ shape: smooth ? "smooth" : "area", tooltip: formatter }, area2) - } - })) : params; -} - -// node_modules/@antv/g2plot/esm/adaptor/geometries/line.js -var import_util334 = __toModule(require_lib()); -function line(params) { - var options = params.options; - var line2 = options.line, stepType = options.stepType, xField = options.xField, yField = options.yField, seriesField = options.seriesField, smooth = options.smooth, connectNulls = options.connectNulls, tooltip10 = options.tooltip; - var _a6 = getTooltipMapping(tooltip10, [xField, yField, seriesField]), fields = _a6.fields, formatter = _a6.formatter; - return line2 ? geometry(deepAssign({}, params, { - options: { - type: "line", - colorField: seriesField, - tooltipFields: fields, - mapping: (0, import_util334.deepMix)({ - shape: stepType || (smooth ? "smooth" : "line"), - tooltip: formatter - }, line2), - args: { connectNulls } - } - })) : params; -} - -// node_modules/@antv/g2plot/esm/adaptor/geometries/point.js -function point(params) { - var options = params.options; - var point2 = options.point, xField = options.xField, yField = options.yField, seriesField = options.seriesField, sizeField = options.sizeField, shapeField = options.shapeField, tooltip10 = options.tooltip; - var _a6 = getTooltipMapping(tooltip10, [xField, yField, seriesField, sizeField, shapeField]), fields = _a6.fields, formatter = _a6.formatter; - return point2 ? geometry(deepAssign({}, params, { - options: { - type: "point", - colorField: seriesField, - shapeField, - tooltipFields: fields, - mapping: __assign({ tooltip: formatter }, point2) - } - })) : params; -} - -// node_modules/@antv/g2plot/esm/adaptor/geometries/interval.js -var import_util335 = __toModule(require_lib()); -function otherAdaptor(params) { - var chart = params.chart, options = params.options, ext = params.ext; - var seriesField = options.seriesField, isGroup = options.isGroup, isStack = options.isStack, marginRatio = options.marginRatio, widthRatio = options.widthRatio, groupField = options.groupField, theme4 = options.theme; - var adjust4 = []; - if (seriesField) { - if (isGroup) { - adjust4.push({ - type: "dodge", - dodgeBy: groupField || seriesField, - marginRatio - }); - } - if (isStack) { - adjust4.push({ - type: "stack", - marginRatio - }); - } - } - if (adjust4.length && (ext === null || ext === void 0 ? void 0 : ext.geometry)) { - var g4 = ext === null || ext === void 0 ? void 0 : ext.geometry; - g4.adjust(adjust4); - } - if (!(0, import_util335.isNil)(widthRatio)) { - chart.theme(deepAssign({}, (0, import_util335.isObject)(theme4) ? theme4 : getTheme(theme4), { - columnWidthRatio: widthRatio - })); - } - return params; -} -function interval2(params) { - var options = params.options; - var xField = options.xField, yField = options.yField, interval3 = options.interval, seriesField = options.seriesField, tooltip10 = options.tooltip, minColumnWidth = options.minColumnWidth, maxColumnWidth = options.maxColumnWidth, columnBackground = options.columnBackground, dodgePadding = options.dodgePadding, intervalPadding = options.intervalPadding; - var _a6 = getTooltipMapping(tooltip10, [xField, yField, seriesField]), fields = _a6.fields, formatter = _a6.formatter; - var ext = (interval3 ? geometry(deepAssign({}, params, { - options: { - type: "interval", - colorField: seriesField, - tooltipFields: fields, - mapping: __assign({ tooltip: formatter }, interval3), - args: { dodgePadding, intervalPadding, minColumnWidth, maxColumnWidth, background: columnBackground } - } - })) : params).ext; - return otherAdaptor(__assign(__assign({}, params), { ext })); -} - -// node_modules/@antv/g2plot/esm/adaptor/geometries/polygon.js -function polygon(params) { - var options = params.options; - var polygon2 = options.polygon, xField = options.xField, yField = options.yField, seriesField = options.seriesField, tooltip10 = options.tooltip; - var _a6 = getTooltipMapping(tooltip10, [xField, yField, seriesField]), fields = _a6.fields, formatter = _a6.formatter; - return polygon2 ? geometry(deepAssign({}, params, { - options: { - type: "polygon", - colorField: seriesField, - tooltipFields: fields, - mapping: __assign({ tooltip: formatter }, polygon2) - } - })) : params; -} - -// node_modules/@antv/g2plot/esm/adaptor/geometries/edge.js -function edge(params) { - var options = params.options; - var edge2 = options.edge, xField = options.xField, yField = options.yField, seriesField = options.seriesField, tooltip10 = options.tooltip; - var _a6 = getTooltipMapping(tooltip10, [xField, yField, seriesField]), fields = _a6.fields, formatter = _a6.formatter; - return edge2 ? geometry(deepAssign({}, params, { - options: { - type: "edge", - colorField: seriesField, - tooltipFields: fields, - mapping: __assign({ tooltip: formatter }, edge2) - } - })) : params; -} - -// node_modules/@antv/g2plot/esm/adaptor/geometries/schema.js -function schema2(params) { - var options = params.options; - var schema3 = options.schema, xField = options.xField, yField = options.yField, seriesField = options.seriesField, tooltip10 = options.tooltip; - var _a6 = getTooltipMapping(tooltip10, [xField, yField, seriesField]), fields = _a6.fields, formatter = _a6.formatter; - return schema3 ? geometry(deepAssign({}, params, { - options: { - type: "schema", - colorField: seriesField, - tooltipFields: fields, - mapping: __assign({ tooltip: formatter }, schema3) - } - })) : params; -} - -// node_modules/@antv/g2plot/esm/adaptor/geometries/violin.js -function violin(params) { - var options = params.options; - var violin2 = options.violin, xField = options.xField, yField = options.yField, seriesField = options.seriesField, sizeField = options.sizeField, tooltip10 = options.tooltip; - var _a6 = getTooltipMapping(tooltip10, [xField, yField, seriesField, sizeField]), fields = _a6.fields, formatter = _a6.formatter; - return violin2 ? geometry(deepAssign({}, params, { - options: { - type: "violin", - colorField: seriesField, - tooltipFields: fields, - mapping: __assign({ tooltip: formatter }, violin2) - } - })) : params; -} - -// node_modules/@antv/g2plot/esm/plots/line/adaptor.js -function geometry2(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, color4 = options.color, lineStyle = options.lineStyle, lineShape = options.lineShape, pointMapping = options.point, areaMapping = options.area, seriesField = options.seriesField; - var pointState = pointMapping === null || pointMapping === void 0 ? void 0 : pointMapping.state; - var areaState = areaMapping === null || areaMapping === void 0 ? void 0 : areaMapping.state; - chart.data(data3); - var primary = deepAssign({}, params, { - options: { - shapeField: seriesField, - line: { - color: color4, - style: lineStyle, - shape: lineShape - }, - point: pointMapping && __assign({ color: color4, shape: "circle" }, pointMapping), - area: areaMapping && __assign({ color: color4 }, areaMapping), - label: void 0 - } - }); - var second = deepAssign({}, primary, { options: { tooltip: false, state: pointState } }); - var areaParams = deepAssign({}, primary, { options: { tooltip: false, state: areaState } }); - line(primary); - point(second); - area(areaParams); - return params; -} -function meta(params) { - var _a6, _b; - var options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, data3 = options.data; - return flow(scale7((_a6 = {}, _a6[xField] = xAxis, _a6[yField] = yAxis, _a6), (_b = {}, _b[xField] = { - type: "cat" - }, _b[yField] = adjustYMetaByZero(data3, yField), _b)))(params); -} -function coordinate(params) { - var chart = params.chart, options = params.options; - var reflect = options.reflect; - if (reflect) { - var p4 = reflect; - if (!(0, import_util336.isArray)(p4)) { - p4 = [p4]; - } - var actions = p4.map(function(d3) { - return ["reflect", d3]; - }); - chart.coordinate({ type: "rect", actions }); - } - return params; -} -function axis(params) { - var chart = params.chart, options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - if (xAxis === false) { - chart.axis(xField, false); - } else { - chart.axis(xField, xAxis); - } - if (yAxis === false) { - chart.axis(yField, false); - } else { - chart.axis(yField, yAxis); - } - return params; -} -function legend2(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend, seriesField = options.seriesField; - if (legend18 && seriesField) { - chart.legend(seriesField, legend18); - } else if (legend18 === false) { - chart.legend(false); - } - return params; -} -function label(params) { - var chart = params.chart, options = params.options; - var label17 = options.label, yField = options.yField; - var lineGeometry = findGeometry(chart, "line"); - if (!label17) { - lineGeometry.label(false); - } else { - var callback = label17.callback, cfg = __rest(label17, ["callback"]); - lineGeometry.label({ - fields: [yField], - callback, - cfg: __assign({ layout: [ - { type: "limit-in-plot" }, - { type: "path-adjust-position" }, - { type: "point-adjust-position" }, - { type: "limit-in-plot", cfg: { action: "hide" } } - ] }, transformLabel(cfg)) - }); - } - return params; -} -function adjust(params) { - var chart = params.chart, options = params.options; - var isStack = options.isStack; - if (isStack) { - (0, import_util336.each)(chart.geometries, function(g4) { - g4.adjust("stack"); - }); - } - return params; -} -function adaptor(params) { - return flow(geometry2, meta, adjust, theme, coordinate, axis, legend2, tooltip, label, slider, scrollbar, interaction, animation, annotation(), limitInPlot2)(params); -} - -// node_modules/@antv/g2plot/esm/plots/line/constants.js -var DEFAULT_OPTIONS = deepAssign({}, Plot.getDefaultOptions(), { - tooltip: { - shared: true, - showMarkers: true, - showCrosshairs: true, - crosshairs: { - type: "x" - } - }, - legend: { - position: "top-left", - radio: {} - }, - isStack: false -}); - -// node_modules/@antv/g2plot/esm/plots/line/interactions/marker-active.js -var import_util337 = __toModule(require_lib()); -var MarkerActiveAction = function(_super) { - __extends(MarkerActiveAction2, _super); - function MarkerActiveAction2() { - return _super !== null && _super.apply(this, arguments) || this; - } - MarkerActiveAction2.prototype.active = function() { - var view = this.getView(); - var evt = this.context.event; - if (evt.data) { - var items_1 = evt.data.items; - var points = view.geometries.filter(function(geom) { - return geom.type === "point"; - }); - (0, import_util337.each)(points, function(point2) { - (0, import_util337.each)(point2.elements, function(element) { - var active = (0, import_util337.findIndex)(items_1, function(item) { - return item.data === element.data; - }) !== -1; - element.setState("active", active); - }); - }); - } - }; - MarkerActiveAction2.prototype.reset = function() { - var view = this.getView(); - var points = view.geometries.filter(function(geom) { - return geom.type === "point"; - }); - (0, import_util337.each)(points, function(point2) { - (0, import_util337.each)(point2.elements, function(element) { - element.setState("active", false); - }); - }); - }; - MarkerActiveAction2.prototype.getView = function() { - return this.context.view; - }; - return MarkerActiveAction2; -}(base_default12); - -// node_modules/@antv/g2plot/esm/plots/line/interactions/index.js -registerAction("marker-active", MarkerActiveAction); -registerInteraction("marker-active", { - start: [ - { - trigger: "tooltip:show", - action: "marker-active:active" - } - ], - end: [ - { - trigger: "tooltip:hide", - action: "marker-active:reset" - } - ] -}); - -// node_modules/@antv/g2plot/esm/plots/line/index.js -var Line6 = function(_super) { - __extends(Line9, _super); - function Line9() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "line"; - return _this; - } - Line9.getDefaultOptions = function() { - return DEFAULT_OPTIONS; - }; - Line9.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - var _a6 = this, chart = _a6.chart, options = _a6.options; - meta({ chart, options }); - this.chart.changeData(data3); - }; - Line9.prototype.getDefaultOptions = function() { - return Line9.getDefaultOptions(); - }; - Line9.prototype.getSchemaAdaptor = function() { - return adaptor; - }; - return Line9; -}(Plot); - -// node_modules/@antv/g2plot/esm/utils/transform/percent.js -var import_util338 = __toModule(require_lib()); -function percent(data3, measure, groupField, as) { - var sumMap = (0, import_util338.reduce)(data3, function(map23, datum) { - var groupValue = datum[groupField]; - var sum = map23.has(groupValue) ? map23.get(groupValue) : 0; - var v3 = datum[measure]; - sum = isRealNumber(v3) ? sum + v3 : sum; - map23.set(groupValue, sum); - return map23; - }, new Map()); - return (0, import_util338.map)(data3, function(datum) { - var _a6; - var v3 = datum[measure]; - var groupValue = datum[groupField]; - var percentage = isRealNumber(v3) ? v3 / sumMap.get(groupValue) : 0; - return __assign(__assign({}, datum), (_a6 = {}, _a6[as] = percentage, _a6)); - }); -} -function getDeepPercent(data3, measure, fields, percent2) { - var sumMap = (0, import_util338.reduce)(data3, function(map23, datum) { - var groupValue = (0, import_util338.reduce)(fields, function(value2, field6) { - return "" + value2 + datum[field6]; - }, ""); - var sum = map23.has(groupValue) ? map23.get(groupValue) : 0; - var v3 = datum[measure]; - sum = isRealNumber(v3) ? sum + v3 : sum; - map23.set(groupValue, sum); - return map23; - }, new Map()); - return (0, import_util338.map)(data3, function(datum) { - var _a6; - var v3 = datum[measure]; - var groupValue = (0, import_util338.reduce)(fields, function(value2, field6) { - return "" + value2 + datum[field6]; - }, ""); - var percentage = isRealNumber(v3) ? v3 / sumMap.get(groupValue) : 0; - return __assign(__assign({}, datum), (_a6 = {}, _a6[percent2] = percentage, _a6)); - }); -} -function getDataWhetherPecentage(data3, yField, groupField, asField, isPercent) { - return !isPercent ? data3 : percent(data3, yField, groupField, asField); -} - -// node_modules/@antv/g2plot/esm/plots/area/adaptor.js -var import_util339 = __toModule(require_lib()); -function geometry3(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, areaStyle = options.areaStyle, color4 = options.color, pointMapping = options.point, lineMapping = options.line, isPercent = options.isPercent, xField = options.xField, yField = options.yField, tooltip10 = options.tooltip, seriesField = options.seriesField, startOnZero = options.startOnZero; - var pointState = pointMapping === null || pointMapping === void 0 ? void 0 : pointMapping.state; - var chartData = getDataWhetherPecentage(data3, yField, xField, yField, isPercent); - chart.data(chartData); - var tooltipOptions = isPercent ? __assign({ formatter: function(datum) { - return { - name: datum[seriesField] || datum[xField], - value: (Number(datum[yField]) * 100).toFixed(2) + "%" - }; - } }, tooltip10) : tooltip10; - var primary = deepAssign({}, params, { - options: { - area: { color: color4, style: areaStyle }, - point: pointMapping && __assign({ color: color4 }, pointMapping), - tooltip: tooltipOptions, - label: void 0, - args: { - startOnZero - } - } - }); - var lineParams = { - chart, - options: deepAssign({ line: { size: 2 } }, (0, import_util339.omit)(options, ["state"]), { - line: lineMapping && __assign({ color: color4 }, lineMapping), - sizeField: seriesField, - state: lineMapping === null || lineMapping === void 0 ? void 0 : lineMapping.state, - tooltip: false, - label: void 0, - args: { - startOnZero - } - }) - }; - var pointParams = deepAssign({}, primary, { options: { tooltip: false, state: pointState } }); - area(primary); - line(lineParams); - point(pointParams); - return params; -} -function label2(params) { - var chart = params.chart, options = params.options; - var label17 = options.label, yField = options.yField; - var areaGeometry = findGeometry(chart, "area"); - if (!label17) { - areaGeometry.label(false); - } else { - var callback = label17.callback, cfg = __rest(label17, ["callback"]); - areaGeometry.label({ - fields: [yField], - callback, - cfg: __assign({ layout: [ - { type: "limit-in-plot" }, - { type: "path-adjust-position" }, - { type: "point-adjust-position" }, - { type: "limit-in-plot", cfg: { action: "hide" } } - ] }, transformLabel(cfg)) - }); - } - return params; -} -function adjust2(params) { - var chart = params.chart, options = params.options; - var isStack = options.isStack, isPercent = options.isPercent, seriesField = options.seriesField; - if ((isPercent || isStack) && seriesField) { - (0, import_util339.each)(chart.geometries, function(g4) { - g4.adjust("stack"); - }); - } - return params; -} -function adaptor2(params) { - return flow(theme, pattern("areaStyle"), geometry3, meta, adjust2, axis, legend2, tooltip, label2, slider, annotation(), interaction, animation, limitInPlot2)(params); -} - -// node_modules/@antv/g2plot/esm/plots/area/constants.js -var DEFAULT_OPTIONS2 = deepAssign({}, Plot.getDefaultOptions(), { - tooltip: { - shared: true, - showMarkers: true, - showCrosshairs: true, - crosshairs: { - type: "x" - } - }, - isStack: true, - line: {}, - legend: { - position: "top-left", - radio: {} - } -}); - -// node_modules/@antv/g2plot/esm/plots/area/index.js -var Area2 = function(_super) { - __extends(Area3, _super); - function Area3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "area"; - return _this; - } - Area3.getDefaultOptions = function() { - return DEFAULT_OPTIONS2; - }; - Area3.prototype.getDefaultOptions = function() { - return Area3.getDefaultOptions(); - }; - Area3.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - var _a6 = this.options, isPercent = _a6.isPercent, xField = _a6.xField, yField = _a6.yField; - var _b = this, chart = _b.chart, options = _b.options; - meta({ chart, options }); - this.chart.changeData(getDataWhetherPecentage(data3, yField, xField, yField, isPercent)); - }; - Area3.prototype.getSchemaAdaptor = function() { - return adaptor2; - }; - return Area3; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/column/adaptor.js -var import_util344 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/adaptor/conversion-tag.js -var import_util341 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/utils/conversion.js -var import_util340 = __toModule(require_lib()); -function conversionTagFormatter(prev, next) { - if (!(0, import_util340.isNumber)(prev) || !(0, import_util340.isNumber)(next)) { - return "-"; - } - if (prev === next) { - return "100%"; - } - if (prev === 0) { - return "\u221E"; - } - if (next === 0) { - return "-\u221E"; - } - return (100 * next / prev).toFixed(2) + "%"; -} - -// node_modules/@antv/g2plot/esm/adaptor/conversion-tag.js -function getConversionTagOptionsWithDefaults(options, horizontal) { - return deepAssign({ - size: horizontal ? 32 : 80, - spacing: horizontal ? 8 : 12, - offset: horizontal ? 32 : 0, - arrow: options.arrow !== false && { - headSize: 12, - style: { - fill: "rgba(0, 0, 0, 0.05)" - } - }, - text: options.text !== false && { - style: { - fontSize: 12, - fill: "rgba(0, 0, 0, 0.85)", - textAlign: "center", - textBaseline: "middle" - }, - formatter: conversionTagFormatter - } - }, options); -} -function parsePoints(coordinate11, element) { - return (0, import_util341.map)(element.getModel().points, function(point2) { - return coordinate11.convertPoint(point2); - }); -} -function renderArrowTag(config, elemPrev, elemNext) { - var view = config.view, geometry35 = config.geometry, group3 = config.group, options = config.options, horizontal = config.horizontal; - var offset = options.offset, size14 = options.size, arrow = options.arrow; - var coordinate11 = view.getCoordinate(); - var pointPrev = parsePoints(coordinate11, elemPrev)[3]; - var pointNext = parsePoints(coordinate11, elemNext)[0]; - var totalHeight = pointNext.y - pointPrev.y; - var totalWidth = pointNext.x - pointPrev.x; - if (typeof arrow === "boolean") { - return; - } - var headSize = arrow.headSize; - var spacing = options.spacing; - var points; - if (horizontal) { - if ((totalWidth - headSize) / 2 < spacing) { - spacing = Math.max(1, (totalWidth - headSize) / 2); - points = [ - [pointPrev.x + spacing, pointPrev.y - offset], - [pointPrev.x + spacing, pointPrev.y - offset - size14], - [pointNext.x - spacing, pointNext.y - offset - size14 / 2] - ]; - } else { - points = [ - [pointPrev.x + spacing, pointPrev.y - offset], - [pointPrev.x + spacing, pointPrev.y - offset - size14], - [pointNext.x - spacing - headSize, pointNext.y - offset - size14], - [pointNext.x - spacing, pointNext.y - offset - size14 / 2], - [pointNext.x - spacing - headSize, pointNext.y - offset] - ]; - } - } else { - if ((totalHeight - headSize) / 2 < spacing) { - spacing = Math.max(1, (totalHeight - headSize) / 2); - points = [ - [pointPrev.x + offset, pointPrev.y + spacing], - [pointPrev.x + offset + size14, pointPrev.y + spacing], - [pointNext.x + offset + size14 / 2, pointNext.y - spacing] - ]; - } else { - points = [ - [pointPrev.x + offset, pointPrev.y + spacing], - [pointPrev.x + offset + size14, pointPrev.y + spacing], - [pointNext.x + offset + size14, pointNext.y - spacing - headSize], - [pointNext.x + offset + size14 / 2, pointNext.y - spacing], - [pointNext.x + offset, pointNext.y - spacing - headSize] - ]; - } - } - group3.addShape("polygon", { - id: view.id + "-conversion-tag-arrow-" + geometry35.getElementId(elemPrev.getModel().mappingData), - name: "conversion-tag-arrow", - origin: { - element: elemPrev, - nextElement: elemNext - }, - attrs: __assign(__assign({}, arrow.style || {}), { points }) - }); -} -function renderTextTag(config, elemPrev, elemNext) { - var _a6, _b, _c; - var view = config.view, geometry35 = config.geometry, group3 = config.group, options = config.options, field6 = config.field, horizontal = config.horizontal; - var offset = options.offset, size14 = options.size; - if (typeof options.text === "boolean") { - return; - } - var coordinate11 = view.getCoordinate(); - var text = ((_a6 = options.text) === null || _a6 === void 0 ? void 0 : _a6.formatter) && ((_b = options.text) === null || _b === void 0 ? void 0 : _b.formatter(elemPrev.getData()[field6], elemNext.getData()[field6])); - var pointPrev = parsePoints(coordinate11, elemPrev)[horizontal ? 3 : 0]; - var pointNext = parsePoints(coordinate11, elemNext)[horizontal ? 0 : 3]; - var textShape = group3.addShape("text", { - id: view.id + "-conversion-tag-text-" + geometry35.getElementId(elemPrev.getModel().mappingData), - name: "conversion-tag-text", - origin: { - element: elemPrev, - nextElement: elemNext - }, - attrs: __assign(__assign({}, ((_c = options.text) === null || _c === void 0 ? void 0 : _c.style) || {}), { text, x: horizontal ? (pointPrev.x + pointNext.x) / 2 : pointPrev.x + offset + size14 / 2, y: horizontal ? pointPrev.y - offset - size14 / 2 : (pointPrev.y + pointNext.y) / 2 }) - }); - if (horizontal) { - var totalWidth = pointNext.x - pointPrev.x; - var textWidth = textShape.getBBox().width; - if (textWidth > totalWidth) { - var cWidth = textWidth / text.length; - var cEnd = Math.max(1, Math.ceil(totalWidth / cWidth) - 1); - var textAdjusted = text.slice(0, cEnd) + "..."; - textShape.attr("text", textAdjusted); - } - } -} -function renderTag2(options, elemPrev, elemNext) { - renderArrowTag(options, elemPrev, elemNext); - renderTextTag(options, elemPrev, elemNext); -} -function conversionTag(field6, horizontal, disabled) { - if (horizontal === void 0) { - horizontal = true; - } - if (disabled === void 0) { - disabled = false; - } - return function(params) { - var options = params.options, chart = params.chart; - var conversionTag5 = options.conversionTag, theme4 = options.theme; - if (conversionTag5 && !disabled) { - chart.theme(deepAssign({}, (0, import_util341.isObject)(theme4) ? theme4 : getTheme(theme4), { - columnWidthRatio: 1 / 3 - })); - chart.annotation().shape({ - render: function(container2, view) { - var group3 = container2.addGroup({ - id: chart.id + "-conversion-tag-group", - name: "conversion-tag-group" - }); - var interval3 = (0, import_util341.find)(chart.geometries, function(geom) { - return geom.type === "interval"; - }); - var config = { - view, - geometry: interval3, - group: group3, - field: field6, - horizontal, - options: getConversionTagOptionsWithDefaults(conversionTag5, horizontal) - }; - var elements = interval3.elements; - (0, import_util341.each)(elements, function(elem, idx) { - if (idx > 0) { - renderTag2(config, elements[idx - 1], elem); - } - }); - } - }); - } - return params; - }; -} - -// node_modules/@antv/g2plot/esm/adaptor/connected-area.js -var INTERACTION_MAP = { - hover: "__interval-connected-area-hover__", - click: "__interval-connected-area-click__" -}; -var getStartStages = function(trigger, style) { - if (trigger === "hover") { - return [ - { - trigger: "interval:mouseenter", - action: ["element-highlight-by-color:highlight", "element-link-by-color:link"], - arg: [null, { style }] - } - ]; - } - return [ - { - trigger: "interval:click", - action: [ - "element-highlight-by-color:clear", - "element-highlight-by-color:highlight", - "element-link-by-color:clear", - "element-link-by-color:unlink", - "element-link-by-color:link" - ], - arg: [null, null, null, null, { style }] - } - ]; -}; -registerInteraction(INTERACTION_MAP.hover, { - start: getStartStages(INTERACTION_MAP.hover), - end: [ - { - trigger: "interval:mouseleave", - action: ["element-highlight-by-color:reset", "element-link-by-color:unlink"] - } - ] -}); -registerInteraction(INTERACTION_MAP.click, { - start: getStartStages(INTERACTION_MAP.click), - end: [ - { - trigger: "document:mousedown", - action: ["element-highlight-by-color:clear", "element-link-by-color:clear"] - } - ] -}); -function connectedArea(disable) { - if (disable === void 0) { - disable = false; - } - return function(params) { - var chart = params.chart, options = params.options; - var connectedArea2 = options.connectedArea; - var clear = function() { - chart.removeInteraction(INTERACTION_MAP.hover); - chart.removeInteraction(INTERACTION_MAP.click); - }; - if (!disable && connectedArea2) { - var trigger = connectedArea2.trigger || "hover"; - clear(); - chart.interaction(INTERACTION_MAP[trigger], { - start: getStartStages(trigger, connectedArea2.style) - }); - } else { - clear(); - } - return params; - }; -} - -// node_modules/@antv/g2plot/esm/adaptor/brush.js -var import_util343 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/interactions/actions/reset-button.js -var import_util342 = __toModule(require_lib()); -var PADDING_RIGHT2 = 10; -var PADDING_TOP2 = 5; -var BUTTON_ACTION_CONFIG = { - padding: [8, 10], - text: "reset", - textStyle: { - default: { - x: 0, - y: 0, - fontSize: 12, - fill: "#333333", - cursor: "pointer" - } - }, - buttonStyle: { - default: { - fill: "#f7f7f7", - stroke: "#cccccc", - cursor: "pointer" - }, - active: { - fill: "#e6e6e6" - } - } -}; -var ButtonAction2 = function(_super) { - __extends(ButtonAction3, _super); - function ButtonAction3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.buttonGroup = null; - _this.buttonCfg = __assign({ name: "button" }, BUTTON_ACTION_CONFIG); - return _this; - } - ButtonAction3.prototype.getButtonCfg = function() { - var view = this.context.view; - var buttonCfg = (0, import_util342.get)(view, ["interactions", "filter-action", "cfg", "buttonConfig"]); - return deepAssign(this.buttonCfg, buttonCfg, this.cfg); - }; - ButtonAction3.prototype.drawButton = function() { - var config = this.getButtonCfg(); - var group3 = this.context.view.foregroundGroup.addGroup({ - name: config.name - }); - var textShape = this.drawText(group3); - this.drawBackground(group3, textShape.getBBox()); - this.buttonGroup = group3; - }; - ButtonAction3.prototype.drawText = function(group3) { - var _a6; - var config = this.getButtonCfg(); - return group3.addShape({ - type: "text", - name: "button-text", - attrs: __assign({ text: config.text }, (_a6 = config.textStyle) === null || _a6 === void 0 ? void 0 : _a6.default) - }); - }; - ButtonAction3.prototype.drawBackground = function(group3, bbox) { - var _a6; - var config = this.getButtonCfg(); - var padding3 = normalPadding(config.padding); - var buttonShape = group3.addShape({ - type: "rect", - name: "button-rect", - attrs: __assign({ x: bbox.x - padding3[3], y: bbox.y - padding3[0], width: bbox.width + padding3[1] + padding3[3], height: bbox.height + padding3[0] + padding3[2] }, (_a6 = config.buttonStyle) === null || _a6 === void 0 ? void 0 : _a6.default) - }); - buttonShape.toBack(); - group3.on("mouseenter", function() { - var _a7; - buttonShape.attr((_a7 = config.buttonStyle) === null || _a7 === void 0 ? void 0 : _a7.active); - }); - group3.on("mouseleave", function() { - var _a7; - buttonShape.attr((_a7 = config.buttonStyle) === null || _a7 === void 0 ? void 0 : _a7.default); - }); - return buttonShape; - }; - ButtonAction3.prototype.resetPosition = function() { - var view = this.context.view; - var coord2 = view.getCoordinate(); - var point2 = coord2.convert({ x: 1, y: 1 }); - var buttonGroup = this.buttonGroup; - var bbox = buttonGroup.getBBox(); - var matrix = Util.transform(null, [ - ["t", point2.x - bbox.width - PADDING_RIGHT2, point2.y + bbox.height + PADDING_TOP2] - ]); - buttonGroup.setMatrix(matrix); - }; - ButtonAction3.prototype.show = function() { - if (!this.buttonGroup) { - this.drawButton(); - } - this.resetPosition(); - this.buttonGroup.show(); - }; - ButtonAction3.prototype.hide = function() { - if (this.buttonGroup) { - this.buttonGroup.hide(); - } - }; - ButtonAction3.prototype.destroy = function() { - var buttonGroup = this.buttonGroup; - if (buttonGroup) { - buttonGroup.remove(); - } - _super.prototype.destroy.call(this); - }; - return ButtonAction3; -}(base_default12); - -// node_modules/@antv/g2plot/esm/interactions/brush.js -registerAction("brush-reset-button", ButtonAction2, { - name: "brush-reset-button" -}); -registerInteraction("filter-action", {}); -function isPointInView2(context) { - return context.isInPlot(); -} -function getInteractionCfg(interactionType, brushType, mask) { - var maskType = brushType || "rect"; - switch (interactionType) { - case "brush": - return { - showEnable: [ - { trigger: "plot:mouseenter", action: "cursor:crosshair" }, - { trigger: "plot:mouseleave", action: "cursor:default" } - ], - start: [ - { - trigger: "mousedown", - isEnable: isPointInView2, - action: ["brush:start", maskType + "-mask:start", maskType + "-mask:show"], - arg: [null, { maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }] - } - ], - processing: [ - { - trigger: "mousemove", - isEnable: isPointInView2, - action: [maskType + "-mask:resize"] - } - ], - end: [ - { - trigger: "mouseup", - isEnable: isPointInView2, - action: [ - "brush:filter", - "brush:end", - maskType + "-mask:end", - maskType + "-mask:hide", - "brush-reset-button:show" - ] - } - ], - rollback: [ - { - trigger: "brush-reset-button:click", - action: ["brush:reset", "brush-reset-button:hide", "cursor:crosshair"] - } - ] - }; - case "brush-highlight": - return { - showEnable: [ - { trigger: "plot:mouseenter", action: "cursor:crosshair" }, - { trigger: "mask:mouseenter", action: "cursor:move" }, - { trigger: "plot:mouseleave", action: "cursor:default" }, - { trigger: "mask:mouseleave", action: "cursor:crosshair" } - ], - start: [ - { - trigger: "plot:mousedown", - isEnable: function(context) { - return !context.isInShape("mask"); - }, - action: [maskType + "-mask:start", maskType + "-mask:show"], - arg: [{ maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }] - }, - { - trigger: "mask:dragstart", - action: [maskType + "-mask:moveStart"] - } - ], - processing: [ - { - trigger: "plot:mousemove", - action: [maskType + "-mask:resize"] - }, - { - trigger: "mask:drag", - action: [maskType + "-mask:move"] - }, - { - trigger: "mask:change", - action: ["element-range-highlight:highlight"] - } - ], - end: [ - { trigger: "plot:mouseup", action: [maskType + "-mask:end"] }, - { trigger: "mask:dragend", action: [maskType + "-mask:moveEnd"] }, - { - trigger: "document:mouseup", - isEnable: function(context) { - return !context.isInPlot(); - }, - action: ["element-range-highlight:clear", maskType + "-mask:end", maskType + "-mask:hide"] - } - ], - rollback: [{ trigger: "dblclick", action: ["element-range-highlight:clear", maskType + "-mask:hide"] }] - }; - case "brush-x": - return { - showEnable: [ - { trigger: "plot:mouseenter", action: "cursor:crosshair" }, - { trigger: "plot:mouseleave", action: "cursor:default" } - ], - start: [ - { - trigger: "mousedown", - isEnable: isPointInView2, - action: ["brush-x:start", maskType + "-mask:start", maskType + "-mask:show"], - arg: [null, { maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }] - } - ], - processing: [ - { - trigger: "mousemove", - isEnable: isPointInView2, - action: [maskType + "-mask:resize"] - } - ], - end: [ - { - trigger: "mouseup", - isEnable: isPointInView2, - action: ["brush-x:filter", "brush-x:end", maskType + "-mask:end", maskType + "-mask:hide"] - } - ], - rollback: [{ trigger: "dblclick", action: ["brush-x:reset"] }] - }; - case "brush-x-highlight": - return { - showEnable: [ - { trigger: "plot:mouseenter", action: "cursor:crosshair" }, - { trigger: "mask:mouseenter", action: "cursor:move" }, - { trigger: "plot:mouseleave", action: "cursor:default" }, - { trigger: "mask:mouseleave", action: "cursor:crosshair" } - ], - start: [ - { - trigger: "plot:mousedown", - isEnable: function(context) { - return !context.isInShape("mask"); - }, - action: [maskType + "-mask:start", maskType + "-mask:show"], - arg: [{ maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }] - }, - { - trigger: "mask:dragstart", - action: [maskType + "-mask:moveStart"] - } - ], - processing: [ - { - trigger: "plot:mousemove", - action: [maskType + "-mask:resize"] - }, - { - trigger: "mask:drag", - action: [maskType + "-mask:move"] - }, - { - trigger: "mask:change", - action: ["element-range-highlight:highlight"] - } - ], - end: [ - { trigger: "plot:mouseup", action: [maskType + "-mask:end"] }, - { trigger: "mask:dragend", action: [maskType + "-mask:moveEnd"] }, - { - trigger: "document:mouseup", - isEnable: function(context) { - return !context.isInPlot(); - }, - action: ["element-range-highlight:clear", maskType + "-mask:end", maskType + "-mask:hide"] - } - ], - rollback: [{ trigger: "dblclick", action: ["element-range-highlight:clear", maskType + "-mask:hide"] }] - }; - case "brush-y": - return { - showEnable: [ - { trigger: "plot:mouseenter", action: "cursor:crosshair" }, - { trigger: "plot:mouseleave", action: "cursor:default" } - ], - start: [ - { - trigger: "mousedown", - isEnable: isPointInView2, - action: ["brush-y:start", maskType + "-mask:start", maskType + "-mask:show"], - arg: [null, { maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }] - } - ], - processing: [ - { - trigger: "mousemove", - isEnable: isPointInView2, - action: [maskType + "-mask:resize"] - } - ], - end: [ - { - trigger: "mouseup", - isEnable: isPointInView2, - action: ["brush-y:filter", "brush-y:end", maskType + "-mask:end", maskType + "-mask:hide"] - } - ], - rollback: [{ trigger: "dblclick", action: ["brush-y:reset"] }] - }; - case "brush-y-highlight": - return { - showEnable: [ - { trigger: "plot:mouseenter", action: "cursor:crosshair" }, - { trigger: "mask:mouseenter", action: "cursor:move" }, - { trigger: "plot:mouseleave", action: "cursor:default" }, - { trigger: "mask:mouseleave", action: "cursor:crosshair" } - ], - start: [ - { - trigger: "plot:mousedown", - isEnable: function(context) { - return !context.isInShape("mask"); - }, - action: [maskType + "-mask:start", maskType + "-mask:show"], - arg: [{ maskStyle: mask === null || mask === void 0 ? void 0 : mask.style }] - }, - { - trigger: "mask:dragstart", - action: [maskType + "-mask:moveStart"] - } - ], - processing: [ - { - trigger: "plot:mousemove", - action: [maskType + "-mask:resize"] - }, - { - trigger: "mask:drag", - action: [maskType + "-mask:move"] - }, - { - trigger: "mask:change", - action: ["element-range-highlight:highlight"] - } - ], - end: [ - { trigger: "plot:mouseup", action: [maskType + "-mask:end"] }, - { trigger: "mask:dragend", action: [maskType + "-mask:moveEnd"] }, - { - trigger: "document:mouseup", - isEnable: function(context) { - return !context.isInPlot(); - }, - action: ["element-range-highlight:clear", maskType + "-mask:end", maskType + "-mask:hide"] - } - ], - rollback: [{ trigger: "dblclick", action: ["element-range-highlight:clear", maskType + "-mask:hide"] }] - }; - default: - return {}; - } -} -registerInteraction("brush", getInteractionCfg("brush")); -registerInteraction("brush-highlight", getInteractionCfg("brush-highlight")); -registerInteraction("brush-x", getInteractionCfg("brush-x", "x-rect")); -registerInteraction("brush-y", getInteractionCfg("brush-y", "y-rect")); -registerInteraction("brush-x-highlight", getInteractionCfg("brush-x-highlight", "x-rect")); -registerInteraction("brush-y-highlight", getInteractionCfg("brush-y-highlight", "y-rect")); - -// node_modules/@antv/g2plot/esm/adaptor/brush.js -var BRUSH_TYPES = ["brush", "brush-x", "brush-y", "brush-highlight", "brush-x-highlight", "brush-y-highlight"]; -function brushInteraction(params) { - var options = params.options; - var brush = options.brush; - var interactions = (0, import_util343.filter)(options.interactions || [], function(i4) { - return BRUSH_TYPES.indexOf(i4.type) === -1; - }); - if (brush === null || brush === void 0 ? void 0 : brush.enabled) { - BRUSH_TYPES.forEach(function(type2) { - var _a6; - var enable = false; - switch (brush.type) { - case "x-rect": - enable = type2 === (brush.action === "highlight" ? "brush-x-highlight" : "brush-x"); - break; - case "y-rect": - enable = type2 === (brush.action === "highlight" ? "brush-y-highlight" : "brush-y"); - break; - default: - enable = type2 === (brush.action === "highlight" ? "brush-highlight" : "brush"); - break; - } - var obj = { type: type2, enable }; - if (((_a6 = brush.mask) === null || _a6 === void 0 ? void 0 : _a6.style) || brush.type) { - obj.cfg = getInteractionCfg(type2, brush.type, brush.mask); - } - interactions.push(obj); - }); - if ((brush === null || brush === void 0 ? void 0 : brush.action) !== "highlight") { - interactions.push({ - type: "filter-action", - cfg: { - buttonConfig: brush.button - } - }); - } - } - return deepAssign({}, params, { options: { interactions } }); -} - -// node_modules/@antv/g2plot/esm/plots/column/adaptor.js -function defaultOptions(params) { - var options = params.options; - var legend18 = options.legend; - var seriesField = options.seriesField, isStack = options.isStack; - if (seriesField) { - if (legend18 !== false) { - legend18 = __assign({ position: isStack ? "right-top" : "top-left" }, legend18); - } - } else { - legend18 = false; - } - params.options.legend = legend18; - return params; -} -function geometry4(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, columnStyle = options.columnStyle, color4 = options.color, columnWidthRatio = options.columnWidthRatio, isPercent = options.isPercent, isGroup = options.isGroup, isStack = options.isStack, xField = options.xField, yField = options.yField, seriesField = options.seriesField, groupField = options.groupField, tooltip10 = options.tooltip, shape = options.shape; - var percentData = isPercent && isGroup && isStack ? getDeepPercent(data3, yField, [xField, groupField], yField) : getDataWhetherPecentage(data3, yField, xField, yField, isPercent); - var chartData = []; - if (isStack && seriesField && !isGroup) { - percentData.forEach(function(item) { - var stackedItem = chartData.find(function(v3) { - return v3[xField] === item[xField] && v3[seriesField] === item[seriesField]; - }); - if (stackedItem) { - stackedItem[yField] += item[yField] || 0; - } else { - chartData.push(__assign({}, item)); - } - }); - } else { - chartData = percentData; - } - chart.data(chartData); - var tooltipOptions = isPercent ? __assign({ formatter: function(datum) { - return { - name: isGroup && isStack ? datum[seriesField] + " - " + datum[groupField] : datum[seriesField] || datum[xField], - value: (Number(datum[yField]) * 100).toFixed(2) + "%" - }; - } }, tooltip10) : tooltip10; - var p4 = deepAssign({}, params, { - options: { - data: chartData, - widthRatio: columnWidthRatio, - tooltip: tooltipOptions, - interval: { - shape, - style: columnStyle, - color: color4 - } - } - }); - interval2(p4); - return p4; -} -function meta2(params) { - var _a6, _b; - var options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, data3 = options.data, isPercent = options.isPercent; - var percentYMeta = isPercent ? { max: 1, min: 0, minLimit: 0, maxLimit: 1 } : {}; - return flow(scale7((_a6 = {}, _a6[xField] = xAxis, _a6[yField] = yAxis, _a6), (_b = {}, _b[xField] = { - type: "cat" - }, _b[yField] = __assign(__assign({}, adjustYMetaByZero(data3, yField)), percentYMeta), _b)))(params); -} -function axis2(params) { - var chart = params.chart, options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - if (xAxis === false) { - chart.axis(xField, false); - } else { - chart.axis(xField, xAxis); - } - if (yAxis === false) { - chart.axis(yField, false); - } else { - chart.axis(yField, yAxis); - } - return params; -} -function legend3(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend, seriesField = options.seriesField; - if (legend18 && seriesField) { - chart.legend(seriesField, legend18); - } else if (legend18 === false) { - chart.legend(false); - } - return params; -} -function label3(params) { - var chart = params.chart, options = params.options; - var label17 = options.label, yField = options.yField, isRange = options.isRange; - var geometry35 = findGeometry(chart, "interval"); - if (!label17) { - geometry35.label(false); - } else { - var callback = label17.callback, cfg = __rest(label17, ["callback"]); - geometry35.label({ - fields: [yField], - callback, - cfg: __assign({ - layout: (cfg === null || cfg === void 0 ? void 0 : cfg.position) ? void 0 : [ - { type: "interval-adjust-position" }, - { type: "interval-hide-overlap" }, - { type: "adjust-color" }, - { type: "limit-in-plot", cfg: { action: "hide" } } - ] - }, transformLabel(isRange ? __assign({ content: function(item) { - var _a6; - return (_a6 = item[yField]) === null || _a6 === void 0 ? void 0 : _a6.join("-"); - } }, cfg) : cfg)) - }); - } - return params; -} -function columnTooltip(params) { - var chart = params.chart, options = params.options; - var tooltip10 = options.tooltip, isGroup = options.isGroup, isStack = options.isStack, groupField = options.groupField, data3 = options.data, xField = options.xField, yField = options.yField, seriesField = options.seriesField; - if (tooltip10 === false) { - chart.tooltip(false); - } else { - var tooltipOptions = tooltip10; - if (isGroup && isStack) { - var tooltipFormatter_1 = (tooltipOptions === null || tooltipOptions === void 0 ? void 0 : tooltipOptions.formatter) || function(datum) { - return { name: datum[seriesField] + " - " + datum[groupField], value: datum[yField] }; - }; - tooltipOptions = __assign(__assign({}, tooltipOptions), { customItems: function(originalItems) { - var items = []; - (0, import_util344.each)(originalItems, function(item) { - var datas = (0, import_util344.filter)(data3, function(d3) { - return (0, import_util344.isMatch)(d3, pick4(item.data, [xField, seriesField])); - }); - datas.forEach(function(datum) { - items.push(__assign(__assign(__assign({}, item), { value: datum[yField], data: datum, mappingData: { _origin: datum } }), tooltipFormatter_1(datum))); - }); - }); - return items; - } }); - } - chart.tooltip(tooltipOptions); - } - return params; -} -function adaptor3(params, isBar) { - if (isBar === void 0) { - isBar = false; - } - var options = params.options; - var seriesField = options.seriesField; - return flow(defaultOptions, theme, pattern("columnStyle"), state, geometry4, meta2, axis2, legend3, columnTooltip, slider, scrollbar, label3, brushInteraction, interaction, animation, annotation(), conversionTag(options.yField, !isBar, !!seriesField), connectedArea(!options.isStack), limitInPlot2)(params); -} - -// node_modules/@antv/g2plot/esm/plots/column/constants.js -var DEFAULT_OPTIONS3 = deepAssign({}, Plot.getDefaultOptions(), { - columnWidthRatio: 0.6, - marginRatio: 1 / 32, - tooltip: { - shared: true, - showMarkers: false, - offset: 20 - }, - legend: { - radio: {} - }, - interactions: [{ type: "active-region" }] -}); - -// node_modules/@antv/g2plot/esm/plots/column/index.js -var Column = function(_super) { - __extends(Column2, _super); - function Column2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "column"; - return _this; - } - Column2.getDefaultOptions = function() { - return DEFAULT_OPTIONS3; - }; - Column2.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - var _a6 = this.options, yField = _a6.yField, xField = _a6.xField, isPercent = _a6.isPercent; - var _b = this, chart = _b.chart, options = _b.options; - meta2({ chart, options }); - this.chart.changeData(getDataWhetherPecentage(data3, yField, xField, yField, isPercent)); - }; - Column2.prototype.getDefaultOptions = function() { - return Column2.getDefaultOptions(); - }; - Column2.prototype.getSchemaAdaptor = function() { - return adaptor3; - }; - return Column2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/bar/adaptor.js -function defaultOptions2(params) { - var options = params.options; - var xField = options.xField, yField = options.yField, xAxis = options.xAxis, yAxis = options.yAxis; - var position2 = { - left: "bottom", - right: "top", - top: "left", - bottom: "right" - }; - var verticalAxis = yAxis !== false ? __assign({ position: position2[(yAxis === null || yAxis === void 0 ? void 0 : yAxis.position) || "left"] }, yAxis) : false; - var horizontalAxis = xAxis !== false ? __assign({ position: position2[(xAxis === null || xAxis === void 0 ? void 0 : xAxis.position) || "bottom"] }, xAxis) : false; - return __assign(__assign({}, params), { options: __assign(__assign({}, options), { - xField: yField, - yField: xField, - xAxis: verticalAxis, - yAxis: horizontalAxis - }) }); -} -function label4(params) { - var options = params.options; - var label17 = options.label; - if (label17 && !label17.position) { - label17.position = "left"; - if (!label17.layout) { - label17.layout = [ - { type: "interval-adjust-position" }, - { type: "interval-hide-overlap" }, - { type: "adjust-color" }, - { type: "limit-in-plot", cfg: { action: "hide" } } - ]; - } - } - return deepAssign({}, params, { options: { label: label17 } }); -} -function legend4(params) { - var options = params.options; - var seriesField = options.seriesField, isStack = options.isStack; - var legend18 = options.legend; - if (seriesField) { - if (legend18 !== false) { - legend18 = __assign({ position: isStack ? "top-left" : "right-top" }, legend18 || {}); - } - } else { - legend18 = false; - } - return deepAssign({}, params, { options: { legend: legend18 } }); -} -function coordinate2(params) { - var chart = params.chart; - chart.coordinate({ actions: [["transpose"], ["reflect", "y"]] }); - return params; -} -function geometry5(params) { - var chart = params.chart, options = params.options; - var barStyle = options.barStyle, barWidthRatio = options.barWidthRatio, minBarWidth = options.minBarWidth, maxBarWidth = options.maxBarWidth, barBackground = options.barBackground; - return adaptor3({ - chart, - options: __assign(__assign({}, options), { - columnStyle: barStyle, - columnWidthRatio: barWidthRatio, - minColumnWidth: minBarWidth, - maxColumnWidth: maxBarWidth, - columnBackground: barBackground - }) - }, true); -} -function adaptor4(params) { - return flow(defaultOptions2, label4, legend4, tooltip, coordinate2, geometry5)(params); -} - -// node_modules/@antv/g2plot/esm/plots/bar/constants.js -var DEFAULT_OPTIONS4 = deepAssign({}, Plot.getDefaultOptions(), { - barWidthRatio: 0.6, - marginRatio: 1 / 32, - tooltip: { - shared: true, - showMarkers: false, - offset: 20 - }, - legend: { - radio: {} - }, - interactions: [{ type: "active-region" }] -}); - -// node_modules/@antv/g2plot/esm/plots/bar/index.js -var Bar = function(_super) { - __extends(Bar2, _super); - function Bar2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "bar"; - return _this; - } - Bar2.getDefaultOptions = function() { - return DEFAULT_OPTIONS4; - }; - Bar2.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - var _a6 = this, chart = _a6.chart, options = _a6.options; - var xField = options.xField, yField = options.yField, isPercent = options.isPercent; - var switchedFieldOptions = __assign(__assign({}, options), { xField: yField, yField: xField }); - meta2({ chart, options: switchedFieldOptions }); - chart.changeData(getDataWhetherPecentage(data3, xField, yField, xField, isPercent)); - }; - Bar2.prototype.getDefaultOptions = function() { - return Bar2.getDefaultOptions(); - }; - Bar2.prototype.getSchemaAdaptor = function() { - return adaptor4; - }; - return Bar2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/pie/adaptor.js -var import_util349 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/pie/contants.js -var DEFAULT_OPTIONS5 = deepAssign({}, Plot.getDefaultOptions(), { - legend: { - position: "right", - radio: {} - }, - tooltip: { - shared: false, - showTitle: false, - showMarkers: false - }, - label: { - layout: { type: "limit-in-plot", cfg: { action: "ellipsis" } } - }, - pieStyle: { - stroke: "white", - lineWidth: 1 - }, - statistic: { - title: { - style: { fontWeight: 300, color: "#4B535E", textAlign: "center", fontSize: "20px", lineHeight: 1 } - }, - content: { - style: { - fontWeight: "bold", - color: "rgba(44,53,66,0.85)", - textAlign: "center", - fontSize: "32px", - lineHeight: 1 - } - } - }, - theme: { - components: { - annotation: { - text: { - animate: false - } - } - } - } -}); - -// node_modules/@antv/g2plot/esm/plots/pie/utils.js -var import_util345 = __toModule(require_lib()); -function getTotalValue(data3, field6) { - var total = null; - (0, import_util345.each)(data3, function(item) { - if (typeof item[field6] === "number") { - total += item[field6]; - } - }); - return total; -} -function adaptOffset(type2, offset) { - var defaultOffset; - switch (type2) { - case "inner": - defaultOffset = "-30%"; - if ((0, import_util345.isString)(offset) && offset.endsWith("%")) { - return parseFloat(offset) * 0.01 > 0 ? defaultOffset : offset; - } - return offset < 0 ? offset : defaultOffset; - case "outer": - defaultOffset = 12; - if ((0, import_util345.isString)(offset) && offset.endsWith("%")) { - return parseFloat(offset) * 0.01 < 0 ? defaultOffset : offset; - } - return offset > 0 ? offset : defaultOffset; - default: - return offset; - } -} -function isAllZero(data3, angleField) { - return (0, import_util345.every)(processIllegalData(data3, angleField), function(d3) { - return d3[angleField] === 0; - }); -} - -// node_modules/@antv/g2plot/esm/plots/pie/interactions/actions/legend-active.js -var import_util346 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/utils/matrix.js -var ORIGIN_MATRIX = [1, 0, 0, 0, 1, 0, 0, 0, 1]; -function transform5(actions, matrix) { - var ulMatrix = matrix ? __spreadArrays(matrix) : __spreadArrays(ORIGIN_MATRIX); - return Util.transform(ulMatrix, actions); -} - -// node_modules/@antv/g2plot/esm/plots/pie/interactions/actions/legend-active.js -var PieLegendAction = function(_super) { - __extends(PieLegendAction2, _super); - function PieLegendAction2() { - return _super !== null && _super.apply(this, arguments) || this; - } - PieLegendAction2.prototype.getActiveElements = function() { - var delegateObject = Util.getDelegationObject(this.context); - if (delegateObject) { - var view = this.context.view; - var component2 = delegateObject.component, item_1 = delegateObject.item; - var field_1 = component2.get("field"); - if (field_1) { - var elements = view.geometries[0].elements; - return elements.filter(function(ele) { - return ele.getModel().data[field_1] === item_1.value; - }); - } - } - return []; - }; - PieLegendAction2.prototype.getActiveElementLabels = function() { - var view = this.context.view; - var elements = this.getActiveElements(); - var labels = view.geometries[0].labelsContainer.getChildren(); - return labels.filter(function(label17) { - return elements.find(function(ele) { - return (0, import_util346.isEqual)(ele.getData(), label17.get("data")); - }); - }); - }; - PieLegendAction2.prototype.transfrom = function(offset) { - if (offset === void 0) { - offset = 7.5; - } - var elements = this.getActiveElements(); - var elementLabels = this.getActiveElementLabels(); - elements.forEach(function(element, idx) { - var labelShape = elementLabels[idx]; - var coordinate11 = element.geometry.coordinate; - if (coordinate11.isPolar && coordinate11.isTransposed) { - var _a6 = Util.getAngle(element.getModel(), coordinate11), startAngle = _a6.startAngle, endAngle = _a6.endAngle; - var middleAngle = (startAngle + endAngle) / 2; - var r4 = offset; - var x6 = r4 * Math.cos(middleAngle); - var y5 = r4 * Math.sin(middleAngle); - element.shape.setMatrix(transform5([["t", x6, y5]])); - labelShape.setMatrix(transform5([["t", x6, y5]])); - } - }); - }; - PieLegendAction2.prototype.active = function() { - this.transfrom(); - }; - PieLegendAction2.prototype.reset = function() { - this.transfrom(0); - }; - return PieLegendAction2; -}(base_default12); - -// node_modules/@antv/g2plot/esm/plots/pie/interactions/actions/statistic-active.js -var import_util347 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/pie/interactions/util.js -function getCurrentElement2(context) { - var event = context.event; - var element; - var target = event.target; - if (target) { - element = target.get("element"); - } - return element; -} - -// node_modules/@antv/g2plot/esm/plots/pie/interactions/actions/statistic-active.js -var StatisticAction = function(_super) { - __extends(StatisticAction2, _super); - function StatisticAction2() { - return _super !== null && _super.apply(this, arguments) || this; - } - StatisticAction2.prototype.getAnnotations = function(_view) { - var view = _view || this.context.view; - return view.getController("annotation").option; - }; - StatisticAction2.prototype.getInitialAnnotation = function() { - return this.initialAnnotation; - }; - StatisticAction2.prototype.init = function() { - var _this = this; - var view = this.context.view; - view.removeInteraction("tooltip"); - view.on("afterchangesize", function() { - var annotations = _this.getAnnotations(view); - _this.initialAnnotation = annotations; - }); - }; - StatisticAction2.prototype.change = function(arg) { - var _a6 = this.context, view = _a6.view, event = _a6.event; - if (!this.initialAnnotation) { - this.initialAnnotation = this.getAnnotations(); - } - var data3 = (0, import_util347.get)(event, ["data", "data"]); - if (event.type.match("legend-item")) { - var delegateObject = Util.getDelegationObject(this.context); - var colorField_1 = view.getGroupedFields()[0]; - if (delegateObject && colorField_1) { - var item_1 = delegateObject.item; - data3 = view.getData().find(function(d3) { - return d3[colorField_1] === item_1.value; - }); - } - } - if (data3) { - var annotations = (0, import_util347.get)(arg, "annotations", []); - var statistic4 = (0, import_util347.get)(arg, "statistic", {}); - view.getController("annotation").clear(true); - (0, import_util347.each)(annotations, function(annotation4) { - if (typeof annotation4 === "object") { - view.annotation()[annotation4.type](annotation4); - } - }); - renderStatistic(view, { statistic: statistic4, plotType: "pie" }, data3); - view.render(true); - } - var ele = getCurrentElement2(this.context); - if (ele) { - ele.shape.toFront(); - } - }; - StatisticAction2.prototype.reset = function() { - var view = this.context.view; - var annotationController = view.getController("annotation"); - annotationController.clear(true); - var initialStatistic = this.getInitialAnnotation(); - (0, import_util347.each)(initialStatistic, function(a4) { - view.annotation()[a4.type](a4); - }); - view.render(true); - }; - return StatisticAction2; -}(base_default12); - -// node_modules/@antv/g2plot/esm/plots/pie/interactions/index.js -var PIE_STATISTIC = "pie-statistic"; -registerAction(PIE_STATISTIC, StatisticAction); -registerInteraction("pie-statistic-active", { - start: [{ trigger: "element:mouseenter", action: "pie-statistic:change" }], - end: [{ trigger: "element:mouseleave", action: "pie-statistic:reset" }] -}); -registerAction("pie-legend", PieLegendAction); -registerInteraction("pie-legend-active", { - start: [{ trigger: "legend-item:mouseenter", action: "pie-legend:active" }], - end: [{ trigger: "legend-item:mouseleave", action: "pie-legend:reset" }] -}); - -// node_modules/@antv/g2plot/esm/plots/pie/adaptor.js -function geometry6(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, angleField = options.angleField, colorField = options.colorField, color4 = options.color, pieStyle = options.pieStyle; - var processData2 = processIllegalData(data3, angleField); - if (isAllZero(processData2, angleField)) { - var percentageField_1 = "$$percentage$$"; - processData2 = processData2.map(function(d3) { - var _a6; - return __assign(__assign({}, d3), (_a6 = {}, _a6[percentageField_1] = 1 / processData2.length, _a6)); - }); - chart.data(processData2); - var p4 = deepAssign({}, params, { - options: { - xField: "1", - yField: percentageField_1, - seriesField: colorField, - isStack: true, - interval: { - color: color4, - style: pieStyle - }, - args: { - zIndexReversed: true, - sortZIndex: true - } - } - }); - interval2(p4); - } else { - chart.data(processData2); - var p4 = deepAssign({}, params, { - options: { - xField: "1", - yField: angleField, - seriesField: colorField, - isStack: true, - interval: { - color: color4, - style: pieStyle - }, - args: { - zIndexReversed: true, - sortZIndex: true - } - } - }); - interval2(p4); - } - return params; -} -function meta3(params) { - var _a6; - var chart = params.chart, options = params.options; - var meta23 = options.meta, colorField = options.colorField; - var scales = deepAssign({}, meta23); - chart.scale(scales, (_a6 = {}, _a6[colorField] = { type: "cat" }, _a6)); - return params; -} -function coordinate3(params) { - var chart = params.chart, options = params.options; - var radius = options.radius, innerRadius = options.innerRadius, startAngle = options.startAngle, endAngle = options.endAngle; - chart.coordinate({ - type: "theta", - cfg: { - radius, - innerRadius, - startAngle, - endAngle - } - }); - return params; -} -function label5(params) { - var chart = params.chart, options = params.options; - var label17 = options.label, colorField = options.colorField, angleField = options.angleField; - var geometry35 = chart.geometries[0]; - if (!label17) { - geometry35.label(false); - } else { - var callback = label17.callback, cfg = __rest(label17, ["callback"]); - var labelCfg = transformLabel(cfg); - if (labelCfg.content) { - var content_1 = labelCfg.content; - labelCfg.content = function(data3, dataum, index2) { - var name = data3[colorField]; - var value2 = data3[angleField]; - var angleScale = chart.getScaleByField(angleField); - var percent2 = angleScale === null || angleScale === void 0 ? void 0 : angleScale.scale(value2); - return (0, import_util349.isFunction)(content_1) ? content_1(__assign(__assign({}, data3), { percent: percent2 }), dataum, index2) : (0, import_util349.isString)(content_1) ? template(content_1, { - value: value2, - name, - percentage: (0, import_util349.isNumber)(percent2) && !(0, import_util349.isNil)(value2) ? (percent2 * 100).toFixed(2) + "%" : null - }) : content_1; - }; - } - var LABEL_LAYOUT_TYPE_MAP = { - inner: "", - outer: "pie-outer", - spider: "pie-spider" - }; - var labelLayoutType = labelCfg.type ? LABEL_LAYOUT_TYPE_MAP[labelCfg.type] : "pie-outer"; - var labelLayoutCfg = labelCfg.layout ? !(0, import_util349.isArray)(labelCfg.layout) ? [labelCfg.layout] : labelCfg.layout : []; - labelCfg.layout = (labelLayoutType ? [{ type: labelLayoutType }] : []).concat(labelLayoutCfg); - geometry35.label({ - fields: colorField ? [angleField, colorField] : [angleField], - callback, - cfg: __assign(__assign({}, labelCfg), { offset: adaptOffset(labelCfg.type, labelCfg.offset), type: "pie" }) - }); - } - return params; -} -function transformStatisticOptions(options) { - var innerRadius = options.innerRadius, statistic4 = options.statistic, angleField = options.angleField, colorField = options.colorField, meta23 = options.meta, locale = options.locale; - var i18n = getLocale(locale); - if (innerRadius && statistic4) { - var _a6 = deepAssign({}, DEFAULT_OPTIONS5.statistic, statistic4), titleOpt_1 = _a6.title, contentOpt_1 = _a6.content; - if (titleOpt_1 !== false) { - titleOpt_1 = deepAssign({}, { - formatter: function(datum) { - if (datum) { - return datum[colorField]; - } - return !(0, import_util349.isNil)(titleOpt_1.content) ? titleOpt_1.content : i18n.get(["statistic", "total"]); - } - }, titleOpt_1); - } - if (contentOpt_1 !== false) { - contentOpt_1 = deepAssign({}, { - formatter: function(datum, data3) { - var dataValue = datum ? datum[angleField] : getTotalValue(data3, angleField); - var metaFormatter = (0, import_util349.get)(meta23, [angleField, "formatter"]) || function(v3) { - return v3; - }; - if (datum) { - return metaFormatter(dataValue); - } - return !(0, import_util349.isNil)(contentOpt_1.content) ? contentOpt_1.content : metaFormatter(dataValue); - } - }, contentOpt_1); - } - return deepAssign({}, { statistic: { title: titleOpt_1, content: contentOpt_1 } }, options); - } - return options; -} -function pieAnnotation(params) { - var chart = params.chart, options = params.options; - var _a6 = transformStatisticOptions(options), innerRadius = _a6.innerRadius, statistic4 = _a6.statistic; - chart.getController("annotation").clear(true); - flow(annotation())(params); - if (innerRadius && statistic4) { - renderStatistic(chart, { statistic: statistic4, plotType: "pie" }); - } - return params; -} -function tooltip2(params) { - var chart = params.chart, options = params.options; - var tooltip10 = options.tooltip, colorField = options.colorField, angleField = options.angleField, data3 = options.data; - if (tooltip10 === false) { - chart.tooltip(tooltip10); - } else { - chart.tooltip(deepAssign({}, tooltip10, { shared: false })); - if (isAllZero(data3, angleField)) { - var fields = (0, import_util349.get)(tooltip10, "fields"); - var formatter = (0, import_util349.get)(tooltip10, "formatter"); - if ((0, import_util349.isEmpty)((0, import_util349.get)(tooltip10, "fields"))) { - fields = [colorField, angleField]; - formatter = formatter || function(datum) { - return { name: datum[colorField], value: (0, import_util349.toString)(datum[angleField]) }; - }; - } - chart.geometries[0].tooltip(fields.join("*"), getMappingFunction(fields, formatter)); - } - } - return params; -} -function interaction2(params) { - var chart = params.chart, options = params.options; - var _a6 = transformStatisticOptions(options), interactions = _a6.interactions, statistic4 = _a6.statistic, annotations = _a6.annotations; - (0, import_util349.each)(interactions, function(i4) { - var _a7, _b; - if (i4.enable === false) { - chart.removeInteraction(i4.type); - } else if (i4.type === "pie-statistic-active") { - var startStages_1 = []; - if (!((_a7 = i4.cfg) === null || _a7 === void 0 ? void 0 : _a7.start)) { - startStages_1 = [ - { - trigger: "element:mouseenter", - action: PIE_STATISTIC + ":change", - arg: { statistic: statistic4, annotations } - } - ]; - } - (0, import_util349.each)((_b = i4.cfg) === null || _b === void 0 ? void 0 : _b.start, function(stage) { - startStages_1.push(__assign(__assign({}, stage), { arg: { statistic: statistic4, annotations } })); - }); - chart.interaction(i4.type, deepAssign({}, i4.cfg, { start: startStages_1 })); - } else { - chart.interaction(i4.type, i4.cfg || {}); - } - }); - return params; -} -function adaptor5(params) { - return flow(pattern("pieStyle"), geometry6, meta3, theme, coordinate3, legend, tooltip2, label5, state, pieAnnotation, interaction2, animation)(params); -} - -// node_modules/@antv/g2plot/esm/plots/pie/index.js -var Pie = function(_super) { - __extends(Pie2, _super); - function Pie2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "pie"; - return _this; - } - Pie2.getDefaultOptions = function() { - return DEFAULT_OPTIONS5; - }; - Pie2.prototype.changeData = function(data3) { - this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, event_default.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null)); - var prevOptions = this.options; - var angleField = this.options.angleField; - var prevData = processIllegalData(prevOptions.data, angleField); - var curData = processIllegalData(data3, angleField); - if (isAllZero(prevData, angleField) || isAllZero(curData, angleField)) { - this.update({ data: data3 }); - } else { - this.updateOption({ data: data3 }); - this.chart.data(curData); - pieAnnotation({ chart: this.chart, options: this.options }); - this.chart.render(true); - } - this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, event_default.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null)); - }; - Pie2.prototype.getDefaultOptions = function() { - return Pie2.getDefaultOptions(); - }; - Pie2.prototype.getSchemaAdaptor = function() { - return adaptor5; - }; - return Pie2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/rose/adaptor.js -var import_util350 = __toModule(require_lib()); -function geometry7(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, sectorStyle = options.sectorStyle, color4 = options.color; - chart.data(data3); - flow(interval2)(deepAssign({}, params, { - options: { - marginRatio: 1, - interval: { - style: sectorStyle, - color: color4 - } - } - })); - return params; -} -function label6(params) { - var chart = params.chart, options = params.options; - var label17 = options.label, xField = options.xField; - var geometry35 = findGeometry(chart, "interval"); - if (label17 === false) { - geometry35.label(false); - } else if ((0, import_util350.isObject)(label17)) { - var callback = label17.callback, fields = label17.fields, cfg = __rest(label17, ["callback", "fields"]); - var offset = cfg.offset; - var layout6 = cfg.layout; - if (offset === void 0 || offset >= 0) { - layout6 = layout6 ? (0, import_util350.isArray)(layout6) ? layout6 : [layout6] : []; - cfg.layout = (0, import_util350.filter)(layout6, function(v3) { - return v3.type !== "limit-in-shape"; - }); - cfg.layout.length || delete cfg.layout; - } - geometry35.label({ - fields: fields || [xField], - callback, - cfg: transformLabel(cfg) - }); - } else { - log2(LEVEL.WARN, label17 === null, "the label option must be an Object."); - geometry35.label({ fields: [xField] }); - } - return params; -} -function legend5(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend, seriesField = options.seriesField; - if (legend18 === false) { - chart.legend(false); - } else if (seriesField) { - chart.legend(seriesField, legend18); - } - return params; -} -function coordinate4(params) { - var chart = params.chart, options = params.options; - var radius = options.radius, innerRadius = options.innerRadius, startAngle = options.startAngle, endAngle = options.endAngle; - chart.coordinate({ - type: "polar", - cfg: { - radius, - innerRadius, - startAngle, - endAngle - } - }); - return params; -} -function meta4(params) { - var _a6; - var options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - return flow(scale7((_a6 = {}, _a6[xField] = xAxis, _a6[yField] = yAxis, _a6)))(params); -} -function axis3(params) { - var chart = params.chart, options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - if (!xAxis) { - chart.axis(xField, false); - } else { - chart.axis(xField, xAxis); - } - if (!yAxis) { - chart.axis(yField, false); - } else { - chart.axis(yField, yAxis); - } - return params; -} -function adaptor6(params) { - flow(pattern("sectorStyle"), geometry7, meta4, label6, coordinate4, axis3, legend5, tooltip, interaction, animation, theme, annotation(), state)(params); -} - -// node_modules/@antv/g2plot/esm/plots/rose/constant.js -var DEFAULT_OPTIONS6 = deepAssign({}, Plot.getDefaultOptions(), { - xAxis: false, - yAxis: false, - legend: { - position: "right", - radio: {} - }, - sectorStyle: { - stroke: "#fff", - lineWidth: 1 - }, - label: { - layout: { - type: "limit-in-shape" - } - }, - tooltip: { - shared: true, - showMarkers: false - }, - interactions: [{ type: "active-region" }] -}); - -// node_modules/@antv/g2plot/esm/plots/rose/index.js -var Rose = function(_super) { - __extends(Rose2, _super); - function Rose2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "rose"; - return _this; - } - Rose2.getDefaultOptions = function() { - return DEFAULT_OPTIONS6; - }; - Rose2.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - this.chart.changeData(data3); - }; - Rose2.prototype.getDefaultOptions = function() { - return Rose2.getDefaultOptions(); - }; - Rose2.prototype.getSchemaAdaptor = function() { - return adaptor6; - }; - return Rose2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/word-cloud/adaptor.js -var import_util353 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/word-cloud/utils.js -var import_util352 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/utils/transform/word-cloud.js -var import_util351 = __toModule(require_lib()); -var DEFAULT_OPTIONS7 = { - font: function() { - return "serif"; - }, - padding: 1, - size: [500, 500], - spiral: "archimedean", - timeInterval: 3e3 -}; -function wordCloud(words, options) { - options = (0, import_util351.assign)({}, DEFAULT_OPTIONS7, options); - return transform6(words, options); -} -function transform6(words, options) { - var layout6 = tagCloud(); - ["font", "fontSize", "fontWeight", "padding", "rotate", "size", "spiral", "timeInterval", "random"].forEach(function(key) { - if (!(0, import_util351.isNil)(options[key])) { - layout6[key](options[key]); - } - }); - layout6.words(words); - if (options.imageMask) { - layout6.createMask(options.imageMask); - } - var result = layout6.start(); - var tags = result._tags; - tags.forEach(function(tag) { - tag.x += options.size[0] / 2; - tag.y += options.size[1] / 2; - }); - var _a6 = options.size, w4 = _a6[0], h3 = _a6[1]; - tags.push({ - text: "", - value: 0, - x: 0, - y: 0, - opacity: 0 - }); - tags.push({ - text: "", - value: 0, - x: w4, - y: h3, - opacity: 0 - }); - return tags; -} -var cloudRadians = Math.PI / 180; -var cw = 1 << 11 >> 5; -var ch = 1 << 11; -function cloudText(d3) { - return d3.text; -} -function cloudFont() { - return "serif"; -} -function cloudFontNormal() { - return "normal"; -} -function cloudFontSize(d3) { - return d3.value; -} -function cloudRotate() { - return ~~(Math.random() * 2) * 90; -} -function cloudPadding() { - return 1; -} -function cloudSprite(contextAndRatio, d3, data3, di) { - if (d3.sprite) - return; - var c5 = contextAndRatio.context, ratio = contextAndRatio.ratio; - c5.clearRect(0, 0, (cw << 5) / ratio, ch / ratio); - var x6 = 0, y5 = 0, maxh = 0; - var n3 = data3.length; - --di; - while (++di < n3) { - d3 = data3[di]; - c5.save(); - c5.font = d3.style + " " + d3.weight + " " + ~~((d3.size + 1) / ratio) + "px " + d3.font; - var w4 = c5.measureText(d3.text + "m").width * ratio, h3 = d3.size << 1; - if (d3.rotate) { - var sr = Math.sin(d3.rotate * cloudRadians), cr = Math.cos(d3.rotate * cloudRadians), wcr = w4 * cr, wsr = w4 * sr, hcr = h3 * cr, hsr = h3 * sr; - w4 = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 31 >> 5 << 5; - h3 = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr)); - } else { - w4 = w4 + 31 >> 5 << 5; - } - if (h3 > maxh) - maxh = h3; - if (x6 + w4 >= cw << 5) { - x6 = 0; - y5 += maxh; - maxh = 0; - } - if (y5 + h3 >= ch) - break; - c5.translate((x6 + (w4 >> 1)) / ratio, (y5 + (h3 >> 1)) / ratio); - if (d3.rotate) - c5.rotate(d3.rotate * cloudRadians); - c5.fillText(d3.text, 0, 0); - if (d3.padding) { - c5.lineWidth = 2 * d3.padding; - c5.strokeText(d3.text, 0, 0); - } - c5.restore(); - d3.width = w4; - d3.height = h3; - d3.xoff = x6; - d3.yoff = y5; - d3.x1 = w4 >> 1; - d3.y1 = h3 >> 1; - d3.x0 = -d3.x1; - d3.y0 = -d3.y1; - d3.hasText = true; - x6 += w4; - } - var pixels = c5.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data, sprite = []; - while (--di >= 0) { - d3 = data3[di]; - if (!d3.hasText) - continue; - var w4 = d3.width, w32 = w4 >> 5; - var h3 = d3.y1 - d3.y0; - for (var i4 = 0; i4 < h3 * w32; i4++) - sprite[i4] = 0; - x6 = d3.xoff; - if (x6 == null) - return; - y5 = d3.yoff; - var seen = 0, seenRow = -1; - for (var j4 = 0; j4 < h3; j4++) { - for (var i4 = 0; i4 < w4; i4++) { - var k4 = w32 * j4 + (i4 >> 5), m4 = pixels[(y5 + j4) * (cw << 5) + (x6 + i4) << 2] ? 1 << 31 - i4 % 32 : 0; - sprite[k4] |= m4; - seen |= m4; - } - if (seen) - seenRow = j4; - else { - d3.y0++; - h3--; - j4--; - y5++; - } - } - d3.y1 = d3.y0 + seenRow; - d3.sprite = sprite.slice(0, (d3.y1 - d3.y0) * w32); - } -} -function cloudCollide(tag, board, sw) { - sw >>= 5; - var sprite = tag.sprite, w4 = tag.width >> 5, lx = tag.x - (w4 << 4), sx = lx & 127, msx = 32 - sx, h3 = tag.y1 - tag.y0; - var x6 = (tag.y + tag.y0) * sw + (lx >> 5), last17; - for (var j4 = 0; j4 < h3; j4++) { - last17 = 0; - for (var i4 = 0; i4 <= w4; i4++) { - if ((last17 << msx | (i4 < w4 ? (last17 = sprite[j4 * w4 + i4]) >>> sx : 0)) & board[x6 + i4]) - return true; - } - x6 += sw; - } - return false; -} -function cloudBounds(bounds, d3) { - var b02 = bounds[0], b12 = bounds[1]; - if (d3.x + d3.x0 < b02.x) - b02.x = d3.x + d3.x0; - if (d3.y + d3.y0 < b02.y) - b02.y = d3.y + d3.y0; - if (d3.x + d3.x1 > b12.x) - b12.x = d3.x + d3.x1; - if (d3.y + d3.y1 > b12.y) - b12.y = d3.y + d3.y1; -} -function collideRects(a4, b10) { - return a4.x + a4.x1 > b10[0].x && a4.x + a4.x0 < b10[1].x && a4.y + a4.y1 > b10[0].y && a4.y + a4.y0 < b10[1].y; -} -function archimedeanSpiral(size14) { - var e4 = size14[0] / size14[1]; - return function(t4) { - return [e4 * (t4 *= 0.1) * Math.cos(t4), t4 * Math.sin(t4)]; - }; -} -function rectangularSpiral(size14) { - var dy = 4, dx = dy * size14[0] / size14[1]; - var x6 = 0, y5 = 0; - return function(t4) { - var sign = t4 < 0 ? -1 : 1; - switch (Math.sqrt(1 + 4 * sign * t4) - sign & 3) { - case 0: - x6 += dx; - break; - case 1: - y5 += dy; - break; - case 2: - x6 -= dx; - break; - default: - y5 -= dy; - break; - } - return [x6, y5]; - }; -} -function zeroArray(n3) { - var a4 = []; - var i4 = -1; - while (++i4 < n3) - a4[i4] = 0; - return a4; -} -function cloudCanvas() { - return document.createElement("canvas"); -} -function functor(d3) { - return (0, import_util351.isFunction)(d3) ? d3 : function() { - return d3; - }; -} -var spirals = { - archimedean: archimedeanSpiral, - rectangular: rectangularSpiral -}; -function tagCloud() { - var size14 = [256, 256], font = cloudFont, fontSize = cloudFontSize, fontWeight = cloudFontNormal, rotate8 = cloudRotate, padding3 = cloudPadding, spiral = archimedeanSpiral, random5 = Math.random, words = [], timeInterval = Infinity; - var text = cloudText; - var fontStyle = cloudFontNormal; - var canvas = cloudCanvas; - var cloud = {}; - cloud.start = function() { - var width2 = size14[0], height = size14[1]; - var contextAndRatio = getContext(canvas()), board = cloud.board ? cloud.board : zeroArray((size14[0] >> 5) * size14[1]), n3 = words.length, tags = [], data3 = words.map(function(d3, i5, data4) { - d3.text = text.call(this, d3, i5, data4); - d3.font = font.call(this, d3, i5, data4); - d3.style = fontStyle.call(this, d3, i5, data4); - d3.weight = fontWeight.call(this, d3, i5, data4); - d3.rotate = rotate8.call(this, d3, i5, data4); - d3.size = ~~fontSize.call(this, d3, i5, data4); - d3.padding = padding3.call(this, d3, i5, data4); - return d3; - }).sort(function(a4, b10) { - return b10.size - a4.size; - }); - var i4 = -1, bounds = !cloud.board ? null : [ - { - x: 0, - y: 0 - }, - { - x: width2, - y: height - } - ]; - step(); - function step() { - var start = Date.now(); - while (Date.now() - start < timeInterval && ++i4 < n3) { - var d3 = data3[i4]; - d3.x = width2 * (random5() + 0.5) >> 1; - d3.y = height * (random5() + 0.5) >> 1; - cloudSprite(contextAndRatio, d3, data3, i4); - if (d3.hasText && place2(board, d3, bounds)) { - tags.push(d3); - if (bounds) { - if (!cloud.hasImage) { - cloudBounds(bounds, d3); - } - } else { - bounds = [ - { x: d3.x + d3.x0, y: d3.y + d3.y0 }, - { x: d3.x + d3.x1, y: d3.y + d3.y1 } - ]; - } - d3.x -= size14[0] >> 1; - d3.y -= size14[1] >> 1; - } - } - cloud._tags = tags; - cloud._bounds = bounds; - } - return cloud; - }; - function getContext(canvas2) { - canvas2.width = canvas2.height = 1; - var ratio = Math.sqrt(canvas2.getContext("2d").getImageData(0, 0, 1, 1).data.length >> 2); - canvas2.width = (cw << 5) / ratio; - canvas2.height = ch / ratio; - var context = canvas2.getContext("2d"); - context.fillStyle = context.strokeStyle = "red"; - context.textAlign = "center"; - return { context, ratio }; - } - function place2(board, tag, bounds) { - var startX = tag.x, startY = tag.y, maxDelta = Math.sqrt(size14[0] * size14[0] + size14[1] * size14[1]), s4 = spiral(size14), dt = random5() < 0.5 ? 1 : -1; - var dxdy, t4 = -dt, dx, dy; - while (dxdy = s4(t4 += dt)) { - dx = ~~dxdy[0]; - dy = ~~dxdy[1]; - if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) - break; - tag.x = startX + dx; - tag.y = startY + dy; - if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size14[0] || tag.y + tag.y1 > size14[1]) - continue; - if (!bounds || !cloudCollide(tag, board, size14[0])) { - if (!bounds || collideRects(tag, bounds)) { - var sprite = tag.sprite, w4 = tag.width >> 5, sw = size14[0] >> 5, lx = tag.x - (w4 << 4), sx = lx & 127, msx = 32 - sx, h3 = tag.y1 - tag.y0; - var last17 = void 0, x6 = (tag.y + tag.y0) * sw + (lx >> 5); - for (var j4 = 0; j4 < h3; j4++) { - last17 = 0; - for (var i4 = 0; i4 <= w4; i4++) { - board[x6 + i4] |= last17 << msx | (i4 < w4 ? (last17 = sprite[j4 * w4 + i4]) >>> sx : 0); - } - x6 += sw; - } - delete tag.sprite; - return true; - } - } - } - return false; - } - cloud.createMask = function(img) { - var can = document.createElement("canvas"); - var width2 = size14[0], height = size14[1]; - if (!width2 || !height) { - return; - } - var w32 = width2 >> 5; - var board = zeroArray((width2 >> 5) * height); - can.width = width2; - can.height = height; - var cxt = can.getContext("2d"); - cxt.drawImage(img, 0, 0, img.width, img.height, 0, 0, width2, height); - var imageData = cxt.getImageData(0, 0, width2, height).data; - for (var j4 = 0; j4 < height; j4++) { - for (var i4 = 0; i4 < width2; i4++) { - var k4 = w32 * j4 + (i4 >> 5); - var tmp = j4 * width2 + i4 << 2; - var flag = imageData[tmp] >= 250 && imageData[tmp + 1] >= 250 && imageData[tmp + 2] >= 250; - var m4 = flag ? 1 << 31 - i4 % 32 : 0; - board[k4] |= m4; - } - } - cloud.board = board; - cloud.hasImage = true; - }; - cloud.timeInterval = function(_8) { - timeInterval = _8 == null ? Infinity : _8; - }; - cloud.words = function(_8) { - words = _8; - }; - cloud.size = function(_8) { - size14 = [+_8[0], +_8[1]]; - }; - cloud.font = function(_8) { - font = functor(_8); - }; - cloud.fontWeight = function(_8) { - fontWeight = functor(_8); - }; - cloud.rotate = function(_8) { - rotate8 = functor(_8); - }; - cloud.spiral = function(_8) { - spiral = spirals[_8] || _8; - }; - cloud.fontSize = function(_8) { - fontSize = functor(_8); - }; - cloud.padding = function(_8) { - padding3 = functor(_8); - }; - cloud.random = function(_8) { - random5 = functor(_8); - }; - return cloud; -} - -// node_modules/@antv/g2plot/esm/plots/word-cloud/utils.js -function transform7(params) { - var rawOptions = params.options, chart = params.chart; - var _a6 = chart, width2 = _a6.width, height = _a6.height, chartPadding = _a6.padding, appendPadding = _a6.appendPadding, ele = _a6.ele; - var data3 = rawOptions.data, imageMask = rawOptions.imageMask, wordField = rawOptions.wordField, weightField = rawOptions.weightField, colorField = rawOptions.colorField, wordStyle = rawOptions.wordStyle, timeInterval = rawOptions.timeInterval, random5 = rawOptions.random, spiral = rawOptions.spiral, _b = rawOptions.autoFit, autoFit = _b === void 0 ? true : _b, placementStrategy = rawOptions.placementStrategy; - if (!data3 || !data3.length) { - return []; - } - var fontFamily = wordStyle.fontFamily, fontWeight = wordStyle.fontWeight, padding3 = wordStyle.padding, fontSize = wordStyle.fontSize; - var arr = getSingleKeyValues(data3, weightField); - var range = [min9(arr), max10(arr)]; - var words = data3.map(function(datum) { - return { - text: datum[wordField], - value: datum[weightField], - color: datum[colorField], - datum - }; - }); - var options = { - imageMask, - font: fontFamily, - fontSize: getFontSizeMapping(fontSize, range), - fontWeight, - size: getSize({ - width: width2, - height, - padding: chartPadding, - appendPadding, - autoFit, - container: ele - }), - padding: padding3, - timeInterval, - random: random5, - spiral, - rotate: getRotate(rawOptions) - }; - if ((0, import_util352.isFunction)(placementStrategy)) { - var result = words.map(function(word2, index2, words2) { - return __assign(__assign(__assign({}, word2), { hasText: !!word2.text, font: functor(options.font)(word2, index2, words2), weight: functor(options.fontWeight)(word2, index2, words2), rotate: functor(options.rotate)(word2, index2, words2), size: functor(options.fontSize)(word2, index2, words2), style: "normal" }), placementStrategy.call(chart, word2, index2, words2)); - }); - result.push({ - text: "", - value: 0, - x: 0, - y: 0, - opacity: 0 - }); - result.push({ - text: "", - value: 0, - x: options.size[0], - y: options.size[1], - opacity: 0 - }); - return result; - } - return wordCloud(words, options); -} -function getSize(options) { - var width2 = options.width, height = options.height; - var container2 = options.container, autoFit = options.autoFit, padding3 = options.padding, appendPadding = options.appendPadding; - if (autoFit) { - var containerSize = getContainerSize(container2); - width2 = containerSize.width; - height = containerSize.height; - } - width2 = width2 || 400; - height = height || 400; - var _a6 = resolvePadding({ padding: padding3, appendPadding }), top = _a6[0], right2 = _a6[1], bottom = _a6[2], left2 = _a6[3]; - var result = [width2 - (left2 + right2), height - (top + bottom)]; - return result; -} -function resolvePadding(options) { - var padding3 = normalPadding(options.padding); - var appendPadding = normalPadding(options.appendPadding); - var top = padding3[0] + appendPadding[0]; - var right2 = padding3[1] + appendPadding[1]; - var bottom = padding3[2] + appendPadding[2]; - var left2 = padding3[3] + appendPadding[3]; - return [top, right2, bottom, left2]; -} -function processImageMask(img) { - return new Promise(function(res, rej) { - if (img instanceof HTMLImageElement) { - res(img); - return; - } - if ((0, import_util352.isString)(img)) { - var image_1 = new Image(); - image_1.crossOrigin = "anonymous"; - image_1.src = img; - image_1.onload = function() { - res(image_1); - }; - image_1.onerror = function() { - log2(LEVEL.ERROR, false, "image %s load failed !!!", img); - rej(); - }; - return; - } - log2(LEVEL.WARN, img === void 0, "The type of imageMask option must be String or HTMLImageElement."); - rej(); - }); -} -function getFontSizeMapping(fontSize, range) { - if ((0, import_util352.isFunction)(fontSize)) { - return fontSize; - } - if ((0, import_util352.isArray)(fontSize)) { - var fMin_1 = fontSize[0], fMax_1 = fontSize[1]; - if (!range) { - return function() { - return (fMax_1 + fMin_1) / 2; - }; - } - var min_1 = range[0], max_1 = range[1]; - if (max_1 === min_1) { - return function() { - return (fMax_1 + fMin_1) / 2; - }; - } - return function fontSize2(_a6) { - var value2 = _a6.value; - return (fMax_1 - fMin_1) / (max_1 - min_1) * (value2 - min_1) + fMin_1; - }; - } - return function() { - return fontSize; - }; -} -function getSingleKeyValues(data3, key) { - return data3.map(function(v3) { - return v3[key]; - }).filter(function(v3) { - if (typeof v3 === "number" && !isNaN(v3)) - return true; - return false; - }); -} -function getRotate(options) { - var _a6 = resolveRotate(options), rotation = _a6.rotation, rotationSteps = _a6.rotationSteps; - if (!(0, import_util352.isArray)(rotation)) - return rotation; - var min13 = rotation[0]; - var max15 = rotation[1]; - var perSize = rotationSteps === 1 ? 0 : (max15 - min13) / (rotationSteps - 1); - return function rotate8() { - if (max15 === min13) - return max15; - return Math.floor(Math.random() * rotationSteps) * perSize; - }; -} -function resolveRotate(options) { - var rotationSteps = options.wordStyle.rotationSteps; - if (rotationSteps < 1) { - log2(LEVEL.WARN, false, "The rotationSteps option must be greater than or equal to 1."); - rotationSteps = 1; - } - return { - rotation: options.wordStyle.rotation, - rotationSteps - }; -} -function min9(numbers) { - return Math.min.apply(Math, numbers); -} -function max10(numbers) { - return Math.max.apply(Math, numbers); -} - -// node_modules/@antv/g2plot/esm/plots/word-cloud/constant.js -var WORD_CLOUD_COLOR_FIELD = "color"; -var DEFAULT_OPTIONS8 = deepAssign({}, Plot.getDefaultOptions(), { - timeInterval: 2e3, - legend: false, - tooltip: { - showTitle: false, - showMarkers: false, - showCrosshairs: false, - fields: ["text", "value", WORD_CLOUD_COLOR_FIELD], - formatter: function(datum) { - return { name: datum.text, value: datum.value }; - } - }, - wordStyle: { - fontFamily: "Verdana", - fontWeight: "normal", - padding: 1, - fontSize: [12, 60], - rotation: [0, 90], - rotationSteps: 2, - rotateRatio: 0.5 - } -}); - -// node_modules/@antv/g2plot/esm/plots/word-cloud/adaptor.js -function geometry8(params) { - var chart = params.chart, options = params.options; - var colorField = options.colorField, color4 = options.color; - var data3 = transform7(params); - chart.data(data3); - var p4 = deepAssign({}, params, { - options: { - xField: "x", - yField: "y", - seriesField: colorField && WORD_CLOUD_COLOR_FIELD, - rawFields: (0, import_util353.isFunction)(color4) && __spreadArrays((0, import_util353.get)(options, "rawFields", []), ["datum"]), - point: { - color: color4, - shape: "word-cloud" - } - } - }); - var ext = point(p4).ext; - ext.geometry.label(false); - chart.coordinate().reflect("y"); - chart.axis(false); - return params; -} -function meta5(params) { - return flow(scale7({ - x: { nice: false }, - y: { nice: false } - }))(params); -} -function legend6(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend, colorField = options.colorField; - if (legend18 === false) { - chart.legend(false); - } else if (colorField) { - chart.legend(WORD_CLOUD_COLOR_FIELD, legend18); - } - return params; -} -function adaptor7(params) { - flow(geometry8, meta5, tooltip, legend6, interaction, animation, theme, state)(params); -} - -// node_modules/@antv/g2plot/esm/plots/word-cloud/shapes/word-cloud.js -registerShape("point", "word-cloud", { - draw: function(cfg, group3) { - var cx = cfg.x; - var cy = cfg.y; - var shape = group3.addShape("text", { - attrs: __assign(__assign({}, getTextAttrs(cfg)), { x: cx, y: cy }) - }); - var rotate8 = cfg.data.rotate; - if (typeof rotate8 === "number") { - Util.rotate(shape, rotate8 * Math.PI / 180); - } - return shape; - } -}); -function getTextAttrs(cfg) { - return { - fontSize: cfg.data.size, - text: cfg.data.text, - textAlign: "center", - fontFamily: cfg.data.font, - fontWeight: cfg.data.weight, - fill: cfg.color || cfg.defaultStyle.stroke, - textBaseline: "alphabetic" - }; -} - -// node_modules/@antv/g2plot/esm/plots/word-cloud/index.js -var WordCloud = function(_super) { - __extends(WordCloud2, _super); - function WordCloud2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "word-cloud"; - return _this; - } - WordCloud2.getDefaultOptions = function() { - return DEFAULT_OPTIONS8; - }; - WordCloud2.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - if (this.options.imageMask) { - this.render(); - } else { - this.chart.changeData(transform7({ chart: this.chart, options: this.options })); - } - }; - WordCloud2.prototype.getDefaultOptions = function() { - return WordCloud2.getDefaultOptions(); - }; - WordCloud2.prototype.render = function() { - var _this = this; - return new Promise(function(res) { - var imageMask = _this.options.imageMask; - if (!imageMask) { - _super.prototype.render.call(_this); - res(); - return; - } - var handler = function(img) { - _this.options = __assign(__assign({}, _this.options), { imageMask: img || null }); - _super.prototype.render.call(_this); - res(); - }; - processImageMask(imageMask).then(handler).catch(handler); - }); - }; - WordCloud2.prototype.getSchemaAdaptor = function() { - return adaptor7; - }; - WordCloud2.prototype.triggerResize = function() { - var _this = this; - if (!this.chart.destroyed) { - this.execAdaptor(); - window.setTimeout(function() { - _super.prototype.triggerResize.call(_this); - }); - } - }; - return WordCloud2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/scatter/adaptor.js -var import_util355 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/scatter/util.js -var import_d3_regression = __toModule(require_d3_regression()); -var import_util354 = __toModule(require_lib()); -var REGRESSION_MAP = { - exp: import_d3_regression.regressionExp, - linear: import_d3_regression.regressionLinear, - loess: import_d3_regression.regressionLoess, - log: import_d3_regression.regressionLog, - poly: import_d3_regression.regressionPoly, - pow: import_d3_regression.regressionPow, - quad: import_d3_regression.regressionQuad -}; -function getQuadrantDefaultConfig(xBaseline, yBaseline) { - var textOffset = 10; - var defaultConfig = { - regionStyle: [ - { - position: { - start: [xBaseline, "max"], - end: ["max", yBaseline] - }, - style: { - fill: "#d8d0c0", - opacity: 0.4 - } - }, - { - position: { - start: ["min", "max"], - end: [xBaseline, yBaseline] - }, - style: { - fill: "#a3dda1", - opacity: 0.4 - } - }, - { - position: { - start: ["min", yBaseline], - end: [xBaseline, "min"] - }, - style: { - fill: "#d8d0c0", - opacity: 0.4 - } - }, - { - position: { - start: [xBaseline, yBaseline], - end: ["max", "min"] - }, - style: { - fill: "#a3dda1", - opacity: 0.4 - } - } - ], - lineStyle: { - stroke: "#9ba29a", - lineWidth: 1 - }, - labelStyle: [ - { - position: ["max", yBaseline], - offsetX: -textOffset, - offsetY: -textOffset, - style: { - textAlign: "right", - textBaseline: "bottom", - fontSize: 14, - fill: "#ccc" - } - }, - { - position: ["min", yBaseline], - offsetX: textOffset, - offsetY: -textOffset, - style: { - textAlign: "left", - textBaseline: "bottom", - fontSize: 14, - fill: "#ccc" - } - }, - { - position: ["min", yBaseline], - offsetX: textOffset, - offsetY: textOffset, - style: { - textAlign: "left", - textBaseline: "top", - fontSize: 14, - fill: "#ccc" - } - }, - { - position: ["max", yBaseline], - offsetX: -textOffset, - offsetY: textOffset, - style: { - textAlign: "right", - textBaseline: "top", - fontSize: 14, - fill: "#ccc" - } - } - ] - }; - return defaultConfig; -} -var splinePath = function(data3, config) { - var view = config.view, _a6 = config.options, xField = _a6.xField, yField = _a6.yField; - var xScaleView = view.getScaleByField(xField); - var yScaleView = view.getScaleByField(yField); - var pathData = data3.map(function(d3) { - return view.getCoordinate().convert({ x: xScaleView.scale(d3[0]), y: yScaleView.scale(d3[1]) }); - }); - return getSplinePath2(pathData, false); -}; -var getPath4 = function(config) { - var options = config.options; - var xField = options.xField, yField = options.yField, data3 = options.data, regressionLine2 = options.regressionLine; - var _a6 = regressionLine2.type, type2 = _a6 === void 0 ? "linear" : _a6, algorithm = regressionLine2.algorithm; - var pathData; - if (algorithm) { - pathData = (0, import_util354.isArray)(algorithm) ? algorithm : algorithm(data3); - } else { - var reg = REGRESSION_MAP[type2]().x(function(d3) { - return d3[xField]; - }).y(function(d3) { - return d3[yField]; - }); - pathData = reg(data3); - } - return splinePath(pathData, config); -}; -var getMeta = function(options) { - var _a6; - var _b = options.meta, meta23 = _b === void 0 ? {} : _b, xField = options.xField, yField = options.yField, data3 = options.data; - var xFieldValue = data3[0][xField]; - var yFieldValue = data3[0][yField]; - var xIsPositiveNumber = xFieldValue > 0; - var yIsPositiveNumber = yFieldValue > 0; - function getMetaMinMax(field6, axis22) { - var fieldMeta = (0, import_util354.get)(meta23, [field6]); - function getCustomValue(type2) { - return (0, import_util354.get)(fieldMeta, type2); - } - var range = {}; - if (axis22 === "x") { - if ((0, import_util354.isNumber)(xFieldValue)) { - if (!(0, import_util354.isNumber)(getCustomValue("min"))) { - range["min"] = xIsPositiveNumber ? 0 : xFieldValue * 2; - } - if (!(0, import_util354.isNumber)(getCustomValue("max"))) { - range["max"] = xIsPositiveNumber ? xFieldValue * 2 : 0; - } - } - return range; - } - if ((0, import_util354.isNumber)(yFieldValue)) { - if (!(0, import_util354.isNumber)(getCustomValue("min"))) { - range["min"] = yIsPositiveNumber ? 0 : yFieldValue * 2; - } - if (!(0, import_util354.isNumber)(getCustomValue("max"))) { - range["max"] = yIsPositiveNumber ? yFieldValue * 2 : 0; - } - } - return range; - } - return __assign(__assign({}, meta23), (_a6 = {}, _a6[xField] = __assign(__assign({}, meta23[xField]), getMetaMinMax(xField, "x")), _a6[yField] = __assign(__assign({}, meta23[yField]), getMetaMinMax(yField, "y")), _a6)); -}; - -// node_modules/@antv/g2plot/esm/plots/scatter/adaptor.js -function transformOptions(options) { - var _a6 = options.data, data3 = _a6 === void 0 ? [] : _a6, xField = options.xField, yField = options.yField; - if (data3.length) { - var isOneX = true; - var isOneY = true; - var prev = data3[0]; - var curr = void 0; - for (var i4 = 1; i4 < data3.length; i4++) { - curr = data3[i4]; - if (prev[xField] !== curr[xField]) { - isOneX = false; - } - if (prev[yField] !== curr[yField]) { - isOneY = false; - } - if (!isOneX && !isOneY) { - break; - } - prev = curr; - } - var keys6 = []; - isOneX && keys6.push(xField); - isOneY && keys6.push(yField); - var meta_1 = pick4(getMeta(options), keys6); - return deepAssign({}, options, { meta: meta_1 }); - } - return options; -} -function geometry9(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, type2 = options.type, color4 = options.color, shape = options.shape, pointStyle = options.pointStyle, shapeField = options.shapeField, colorField = options.colorField, xField = options.xField, yField = options.yField, sizeField = options.sizeField; - var size14 = options.size; - var tooltip10 = options.tooltip; - if (sizeField) { - if (!size14) { - size14 = [2, 8]; - } - if ((0, import_util355.isNumber)(size14)) { - size14 = [size14, size14]; - } - } - if (tooltip10 && !tooltip10.fields) { - tooltip10 = __assign(__assign({}, tooltip10), { fields: [xField, yField, colorField, sizeField, shapeField] }); - } - chart.data(data3); - point(deepAssign({}, params, { - options: { - seriesField: colorField, - point: { - color: color4, - shape, - size: size14, - style: pointStyle - }, - tooltip: tooltip10 - } - })); - var geometry35 = findGeometry(chart, "point"); - if (type2) { - geometry35.adjust(type2); - } - return params; -} -function meta6(params) { - var _a6; - var options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - var newOptions = transformOptions(options); - return flow(scale7((_a6 = {}, _a6[xField] = xAxis, _a6[yField] = yAxis, _a6)))(deepAssign({}, params, { options: newOptions })); -} -function axis4(params) { - var chart = params.chart, options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - chart.axis(xField, xAxis); - chart.axis(yField, yAxis); - return params; -} -function legend7(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend, colorField = options.colorField, shapeField = options.shapeField, sizeField = options.sizeField, shapeLegend = options.shapeLegend, sizeLegend = options.sizeLegend; - var showLegend = legend18 !== false; - if (colorField) { - chart.legend(colorField, showLegend ? legend18 : false); - } - if (shapeField) { - if (shapeLegend) { - chart.legend(shapeField, shapeLegend); - } else { - chart.legend(shapeField, shapeLegend === false ? false : legend18); - } - } - if (sizeField) { - chart.legend(sizeField, sizeLegend ? sizeLegend : false); - } - if (!showLegend && !shapeLegend && !sizeLegend) { - chart.legend(false); - } - return params; -} -function label7(params) { - var chart = params.chart, options = params.options; - var label17 = options.label, yField = options.yField; - var scatterGeometry = findGeometry(chart, "point"); - if (!label17) { - scatterGeometry.label(false); - } else { - var callback = label17.callback, cfg = __rest(label17, ["callback"]); - scatterGeometry.label({ - fields: [yField], - callback, - cfg: transformLabel(cfg) - }); - } - return params; -} -function scatterAnnotation(params) { - var options = params.options; - var quadrant = options.quadrant; - var annotationOptions = []; - if (quadrant) { - var _a6 = quadrant.xBaseline, xBaseline = _a6 === void 0 ? 0 : _a6, _b = quadrant.yBaseline, yBaseline = _b === void 0 ? 0 : _b, labels_1 = quadrant.labels, regionStyle_1 = quadrant.regionStyle, lineStyle = quadrant.lineStyle; - var defaultConfig_1 = getQuadrantDefaultConfig(xBaseline, yBaseline); - var quadrants = new Array(4).join(",").split(","); - quadrants.forEach(function(_8, index2) { - annotationOptions.push(__assign(__assign({ type: "region", top: false }, defaultConfig_1.regionStyle[index2].position), { style: deepAssign({}, defaultConfig_1.regionStyle[index2].style, regionStyle_1 === null || regionStyle_1 === void 0 ? void 0 : regionStyle_1[index2]) }), __assign({ type: "text", top: true }, deepAssign({}, defaultConfig_1.labelStyle[index2], labels_1 === null || labels_1 === void 0 ? void 0 : labels_1[index2]))); - }); - annotationOptions.push({ - type: "line", - top: false, - start: ["min", yBaseline], - end: ["max", yBaseline], - style: deepAssign({}, defaultConfig_1.lineStyle, lineStyle) - }, { - type: "line", - top: false, - start: [xBaseline, "min"], - end: [xBaseline, "max"], - style: deepAssign({}, defaultConfig_1.lineStyle, lineStyle) - }); - } - return flow(annotation(annotationOptions))(params); -} -function regressionLine(params) { - var options = params.options, chart = params.chart; - var regressionLine2 = options.regressionLine; - if (regressionLine2) { - var style_1 = regressionLine2.style, _a6 = regressionLine2.top, top_1 = _a6 === void 0 ? false : _a6; - var defaultStyle_1 = { - stroke: "#9ba29a", - lineWidth: 2, - opacity: 0.5 - }; - chart.annotation().shape({ - top: top_1, - render: function(container2, view) { - var group3 = container2.addGroup({ - id: chart.id + "-regression-line", - name: "regression-line-group" - }); - var path = getPath4({ - view, - options - }); - group3.addShape("path", { - name: "regression-line", - attrs: __assign(__assign({ path }, defaultStyle_1), style_1) - }); - } - }); - } - return params; -} -function tooltip3(params) { - var chart = params.chart, options = params.options; - var tooltip10 = options.tooltip; - if (tooltip10) { - chart.tooltip(tooltip10); - } else if (tooltip10 === false) { - chart.tooltip(false); - } - return params; -} -function adaptor8(params) { - return flow(geometry9, meta6, axis4, legend7, tooltip3, label7, brushInteraction, slider, scrollbar, interaction, scatterAnnotation, animation, theme, regressionLine)(params); -} - -// node_modules/@antv/g2plot/esm/plots/scatter/constant.js -var DEFAULT_OPTIONS9 = deepAssign({}, Plot.getDefaultOptions(), { - size: 4, - tooltip: { - showTitle: false, - showMarkers: false, - showCrosshairs: true, - crosshairs: { - type: "xy" - } - } -}); - -// node_modules/@antv/g2plot/esm/interactions/drag-move.js -registerInteraction("drag-move", { - start: [{ trigger: "plot:mousedown", action: "scale-translate:start" }], - processing: [ - { - trigger: "plot:mousemove", - action: "scale-translate:translate", - throttle: { wait: 100, leading: true, trailing: false } - } - ], - end: [{ trigger: "plot:mouseup", action: "scale-translate:end" }] -}); - -// node_modules/@antv/g2plot/esm/plots/scatter/index.js -var Scatter = function(_super) { - __extends(Scatter2, _super); - function Scatter2(container2, options) { - var _this = _super.call(this, container2, options) || this; - _this.type = "scatter"; - _this.on(VIEW_LIFE_CIRCLE.BEFORE_RENDER, function(evt) { - var _a6, _b; - var _c = _this, options2 = _c.options, chart = _c.chart; - if (((_a6 = evt.data) === null || _a6 === void 0 ? void 0 : _a6.source) === EVENTS3.FILTER) { - var filteredData = _this.chart.filterData(_this.chart.getData()); - meta6({ chart, options: __assign(__assign({}, options2), { data: filteredData }) }); - } - if (((_b = evt.data) === null || _b === void 0 ? void 0 : _b.source) === EVENTS3.RESET) { - meta6({ chart, options: options2 }); - } - }); - return _this; - } - Scatter2.getDefaultOptions = function() { - return DEFAULT_OPTIONS9; - }; - Scatter2.prototype.changeData = function(data3) { - this.updateOption(transformOptions(deepAssign({}, this.options, { data: data3 }))); - var _a6 = this, options = _a6.options, chart = _a6.chart; - meta6({ chart, options }); - this.chart.changeData(data3); - }; - Scatter2.prototype.getSchemaAdaptor = function() { - return adaptor8; - }; - Scatter2.prototype.getDefaultOptions = function() { - return Scatter2.getDefaultOptions(); - }; - return Scatter2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/radar/adaptor.js -function geometry10(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, lineStyle = options.lineStyle, color4 = options.color, pointOptions = options.point, areaOptions = options.area; - chart.data(data3); - var primary = deepAssign({}, params, { - options: { - line: { - style: lineStyle, - color: color4 - }, - point: pointOptions ? __assign({ color: color4 }, pointOptions) : pointOptions, - area: areaOptions ? __assign({ color: color4 }, areaOptions) : areaOptions, - label: void 0 - } - }); - var second = deepAssign({}, primary, { - options: { - tooltip: false - } - }); - var pointState = (pointOptions === null || pointOptions === void 0 ? void 0 : pointOptions.state) || options.state; - var pointParams = deepAssign({}, primary, { options: { tooltip: false, state: pointState } }); - line(primary); - point(pointParams); - area(second); - return params; -} -function meta7(params) { - var _a6; - var options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - return flow(scale7((_a6 = {}, _a6[xField] = xAxis, _a6[yField] = yAxis, _a6)))(params); -} -function coord(params) { - var chart = params.chart, options = params.options; - var radius = options.radius, startAngle = options.startAngle, endAngle = options.endAngle; - chart.coordinate("polar", { - radius, - startAngle, - endAngle - }); - return params; -} -function axis5(params) { - var chart = params.chart, options = params.options; - var xField = options.xField, xAxis = options.xAxis, yField = options.yField, yAxis = options.yAxis; - chart.axis(xField, xAxis); - chart.axis(yField, yAxis); - return params; -} -function label8(params) { - var chart = params.chart, options = params.options; - var label17 = options.label, yField = options.yField; - var geometry35 = findGeometry(chart, "line"); - if (!label17) { - geometry35.label(false); - } else { - var callback = label17.callback, cfg = __rest(label17, ["callback"]); - geometry35.label({ - fields: [yField], - callback, - cfg: transformLabel(cfg) - }); - } - return params; -} -function adaptor9(params) { - return flow(geometry10, meta7, theme, coord, axis5, legend, tooltip, label8, interaction, animation, annotation())(params); -} - -// node_modules/@antv/g2plot/esm/plots/radar/interactions/radar-tooltip-action.js -var import_util357 = __toModule(require_lib()); -var RadarTooltipController = function(_super) { - __extends(RadarTooltipController2, _super); - function RadarTooltipController2() { - return _super !== null && _super.apply(this, arguments) || this; - } - Object.defineProperty(RadarTooltipController2.prototype, "name", { - get: function() { - return "radar-tooltip"; - }, - enumerable: false, - configurable: true - }); - RadarTooltipController2.prototype.getTooltipItems = function(point2) { - var _a6 = this.getTooltipCfg(), shared = _a6.shared, cfgTitle = _a6.title; - var hintItems = _super.prototype.getTooltipItems.call(this, point2); - if (hintItems.length > 0) { - var geometry_1 = this.view.geometries[0]; - var dataArray = geometry_1.dataArray; - var title_1 = hintItems[0].name; - var result_1 = []; - dataArray.forEach(function(mappingData) { - mappingData.forEach(function(d3) { - var items = Util.getTooltipItems(d3, geometry_1); - var item = items[0]; - if (!shared && item && item.name === title_1) { - var displayTitle = (0, import_util357.isNil)(cfgTitle) ? title_1 : cfgTitle; - result_1.push(__assign(__assign({}, item), { name: item.title, title: displayTitle })); - } else if (shared && item) { - var displayTitle = (0, import_util357.isNil)(cfgTitle) ? item.name || title_1 : cfgTitle; - result_1.push(__assign(__assign({}, item), { name: item.title, title: displayTitle })); - } - }); - }); - return result_1; - } - return []; - }; - return RadarTooltipController2; -}(tooltip_default); -registerComponentController("radar-tooltip", RadarTooltipController); -var RadarTooltipAction = function(_super) { - __extends(RadarTooltipAction2, _super); - function RadarTooltipAction2() { - return _super !== null && _super.apply(this, arguments) || this; - } - RadarTooltipAction2.prototype.init = function() { - var view = this.context.view; - view.removeInteraction("tooltip"); - }; - RadarTooltipAction2.prototype.show = function() { - var event = this.context.event; - var controller = this.getTooltipController(); - controller.showTooltip({ x: event.x, y: event.y }); - }; - RadarTooltipAction2.prototype.hide = function() { - var controller = this.getTooltipController(); - controller.hideTooltip(); - }; - RadarTooltipAction2.prototype.getTooltipController = function() { - var view = this.context.view; - return view.getController("radar-tooltip"); - }; - return RadarTooltipAction2; -}(base_default12); - -// node_modules/@antv/g2plot/esm/plots/radar/interactions/index.js -registerAction("radar-tooltip", RadarTooltipAction); -registerInteraction("radar-tooltip", { - start: [{ trigger: "plot:mousemove", action: "radar-tooltip:show" }], - end: [{ trigger: "plot:mouseleave", action: "radar-tooltip:hide" }] -}); - -// node_modules/@antv/g2plot/esm/plots/radar/index.js -var Radar = function(_super) { - __extends(Radar2, _super); - function Radar2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "radar"; - return _this; - } - Radar2.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - this.chart.changeData(data3); - }; - Radar2.prototype.getDefaultOptions = function() { - return deepAssign({}, _super.prototype.getDefaultOptions.call(this), { - xAxis: { - label: { - offset: 15 - }, - grid: { - line: { - type: "line" - } - } - }, - yAxis: { - grid: { - line: { - type: "circle" - } - } - }, - legend: { - position: "top" - }, - tooltip: { - shared: true, - showCrosshairs: true, - showMarkers: true, - crosshairs: { - type: "xy", - line: { - style: { - stroke: "#565656", - lineDash: [4] - } - }, - follow: true - } - } - }); - }; - Radar2.prototype.getSchemaAdaptor = function() { - return adaptor9; - }; - return Radar2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/dual-axes/adaptor.js -var import_util362 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/dual-axes/util/option.js -var import_util358 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/dual-axes/types.js -var AxisType; -(function(AxisType2) { - AxisType2["Left"] = "Left"; - AxisType2["Right"] = "Right"; -})(AxisType || (AxisType = {})); -var DualAxesGeometry; -(function(DualAxesGeometry2) { - DualAxesGeometry2["Line"] = "line"; - DualAxesGeometry2["Column"] = "column"; -})(DualAxesGeometry || (DualAxesGeometry = {})); - -// node_modules/@antv/g2plot/esm/plots/dual-axes/constant.js -var LEFT_AXES_VIEW = "left-axes-view"; -var RIGHT_AXES_VIEW = "right-axes-view"; -var DEFAULT_YAXIS_CONFIG = { - nice: true, - label: { - autoHide: true, - autoRotate: false - } -}; -var DEFAULT_LEFT_YAXIS_CONFIG = __assign(__assign({}, DEFAULT_YAXIS_CONFIG), { position: "left" }); -var DEFAULT_RIGHT_YAXIS_CONFIG = __assign(__assign({}, DEFAULT_YAXIS_CONFIG), { position: "right", grid: null }); - -// node_modules/@antv/g2plot/esm/plots/dual-axes/util/option.js -function isLine(geometryOption) { - return (0, import_util358.get)(geometryOption, "geometry") === DualAxesGeometry.Line; -} -function isColumn(geometryOption) { - return (0, import_util358.get)(geometryOption, "geometry") === DualAxesGeometry.Column; -} -function getGeometryOption(xField, yField, geometryOption) { - return isColumn(geometryOption) ? deepAssign({}, { - geometry: DualAxesGeometry.Column, - label: geometryOption.label && geometryOption.isRange ? { - content: function(item) { - var _a6; - return (_a6 = item[yField]) === null || _a6 === void 0 ? void 0 : _a6.join("-"); - } - } : void 0 - }, geometryOption) : __assign({ geometry: DualAxesGeometry.Line }, geometryOption); -} -function transformObjectToArray(yField, transformAttribute) { - var y1 = yField[0], y22 = yField[1]; - if ((0, import_util358.isArray)(transformAttribute)) { - var a1_1 = transformAttribute[0], a2_1 = transformAttribute[1]; - return [a1_1, a2_1]; - } - var a1 = (0, import_util358.get)(transformAttribute, y1); - var a22 = (0, import_util358.get)(transformAttribute, y22); - return [a1, a22]; -} -function getYAxisWithDefault(yAxis, axisType) { - if (axisType === AxisType.Left) { - return yAxis === false ? false : deepAssign({}, DEFAULT_LEFT_YAXIS_CONFIG, yAxis); - } else if (axisType === AxisType.Right) { - return yAxis === false ? false : deepAssign({}, DEFAULT_RIGHT_YAXIS_CONFIG, yAxis); - } - return yAxis; -} - -// node_modules/@antv/g2plot/esm/plots/dual-axes/util/legend.js -var import_util359 = __toModule(require_lib()); -function getViewLegendItems(params) { - var view = params.view, geometryOption = params.geometryOption, yField = params.yField, legend18 = params.legend; - var userMarker = (0, import_util359.get)(legend18, "marker"); - var geometry35 = findGeometry(view, isLine(geometryOption) ? "line" : "interval"); - if (!geometryOption.seriesField) { - var legendItemName = (0, import_util359.get)(view, "options.scales." + yField + ".alias") || yField; - var colorAttribute = geometry35.getAttribute("color"); - var color4 = view.getTheme().defaultColor; - if (colorAttribute) { - color4 = Util.getMappingValue(colorAttribute, legendItemName, (0, import_util359.get)(colorAttribute, ["values", 0], color4)); - } - var marker = ((0, import_util359.isFunction)(userMarker) ? userMarker : !(0, import_util359.isEmpty)(userMarker) && deepAssign({}, { - style: { - stroke: color4, - fill: color4 - } - }, userMarker)) || (isLine(geometryOption) ? { - symbol: function(x6, y5, r4) { - return [ - ["M", x6 - r4, y5], - ["L", x6 + r4, y5] - ]; - }, - style: { - lineWidth: 2, - r: 6, - stroke: color4 - } - } : { - symbol: "square", - style: { - fill: color4 - } - }); - return [ - { - value: yField, - name: legendItemName, - marker, - isGeometry: true, - viewId: view.id - } - ]; - } - var attributes = geometry35.getGroupAttributes(); - return (0, import_util359.reduce)(attributes, function(items, attr) { - var attrItems = Util.getLegendItems(view, geometry35, attr, view.getTheme(), userMarker); - return items.concat(attrItems); - }, []); -} - -// node_modules/@antv/g2plot/esm/plots/dual-axes/util/geometry.js -var import_util360 = __toModule(require_lib()); -function drawSingleGeometry(params) { - var options = params.options, chart = params.chart; - var geometryOption = options.geometryOption; - var isStack = geometryOption.isStack, color4 = geometryOption.color, seriesField = geometryOption.seriesField, groupField = geometryOption.groupField, isGroup = geometryOption.isGroup; - var FIELD_KEY = ["xField", "yField"]; - if (isLine(geometryOption)) { - line(deepAssign({}, params, { - options: __assign(__assign(__assign({}, pick4(options, FIELD_KEY)), geometryOption), { line: { - color: geometryOption.color, - style: geometryOption.lineStyle - } }) - })); - point(deepAssign({}, params, { - options: __assign(__assign(__assign({}, pick4(options, FIELD_KEY)), geometryOption), { point: geometryOption.point && __assign({ color: color4, shape: "circle" }, geometryOption.point) }) - })); - var adjust_1 = []; - if (isGroup) { - adjust_1.push({ - type: "dodge", - dodgeBy: groupField || seriesField, - customOffset: 0 - }); - } - if (isStack) { - adjust_1.push({ - type: "stack" - }); - } - if (adjust_1.length) { - (0, import_util360.each)(chart.geometries, function(g4) { - g4.adjust(adjust_1); - }); - } - } - if (isColumn(geometryOption)) { - adaptor3(deepAssign({}, params, { - options: __assign(__assign(__assign({}, pick4(options, FIELD_KEY)), geometryOption), { widthRatio: geometryOption.columnWidthRatio, interval: __assign(__assign({}, pick4(geometryOption, ["color"])), { style: geometryOption.columnStyle }) }) - })); - } - return params; -} - -// node_modules/@antv/g2plot/esm/plots/dual-axes/util/render-sider.js -var import_util361 = __toModule(require_lib()); -var doSliderFilter = function(view, sliderValue) { - var min13 = sliderValue[0], max15 = sliderValue[1]; - var data3 = view.getOptions().data; - var xScale = view.getXScale(); - var dataSize = (0, import_util361.size)(data3); - if (!xScale || !dataSize) { - return; - } - var isHorizontal2 = true; - var values4 = (0, import_util361.valuesOfKey)(data3, xScale.field); - var xValues = isHorizontal2 ? values4 : values4.reverse(); - var xTickCount = (0, import_util361.size)(xValues); - var minIndex = Math.floor(min13 * (xTickCount - 1)); - var maxIndex = Math.floor(max15 * (xTickCount - 1)); - view.filter(xScale.field, function(value2) { - var idx = xValues.indexOf(value2); - return idx > -1 ? isBetween3(idx, minIndex, maxIndex) : true; - }); - view.render(true); -}; - -// node_modules/@antv/g2plot/esm/plots/dual-axes/adaptor.js -function transformOptions2(params) { - var _a6; - var options = params.options; - var _b = options.geometryOptions, geometryOptions = _b === void 0 ? [] : _b, xField = options.xField, yField = options.yField; - var allLine = (0, import_util362.every)(geometryOptions, function(_a7) { - var geometry35 = _a7.geometry; - return geometry35 === DualAxesGeometry.Line || geometry35 === void 0; - }); - return deepAssign({}, { - options: { - geometryOptions: [], - meta: (_a6 = {}, _a6[xField] = { - type: "cat", - sync: true, - range: allLine ? [0, 1] : void 0 - }, _a6), - tooltip: { - showMarkers: allLine, - showCrosshairs: allLine, - shared: true, - crosshairs: { - type: "x" - } - }, - interactions: !allLine ? [{ type: "legend-visible-filter" }, { type: "active-region" }] : [{ type: "legend-visible-filter" }], - legend: { - position: "top-left" - } - } - }, params, { - options: { - yAxis: transformObjectToArray(yField, options.yAxis), - geometryOptions: [ - getGeometryOption(xField, yField[0], geometryOptions[0]), - getGeometryOption(xField, yField[1], geometryOptions[1]) - ], - annotations: transformObjectToArray(yField, options.annotations) - } - }); -} -function createViews(params) { - var _a6, _b; - var chart = params.chart, options = params.options; - var geometryOptions = options.geometryOptions; - var SORT_MAP = { line: 0, column: 1 }; - var geometries = [ - { type: (_a6 = geometryOptions[0]) === null || _a6 === void 0 ? void 0 : _a6.geometry, id: LEFT_AXES_VIEW }, - { type: (_b = geometryOptions[1]) === null || _b === void 0 ? void 0 : _b.geometry, id: RIGHT_AXES_VIEW } - ]; - geometries.sort(function(a4, b10) { - return -SORT_MAP[a4.type] + SORT_MAP[b10.type]; - }).forEach(function(g4) { - return chart.createView({ id: g4.id }); - }); - return params; -} -function geometry11(params) { - var chart = params.chart, options = params.options; - var xField = options.xField, yField = options.yField, geometryOptions = options.geometryOptions, data3 = options.data, tooltip10 = options.tooltip; - var geometries = [ - __assign(__assign({}, geometryOptions[0]), { id: LEFT_AXES_VIEW, data: data3[0], yField: yField[0] }), - __assign(__assign({}, geometryOptions[1]), { id: RIGHT_AXES_VIEW, data: data3[1], yField: yField[1] }) - ]; - geometries.forEach(function(geometry35) { - var id = geometry35.id, data4 = geometry35.data, yField2 = geometry35.yField; - var isPercent = isColumn(geometry35) && geometry35.isPercent; - var formatData = isPercent ? percent(data4, yField2, xField, yField2) : data4; - var view = findViewById(chart, id).data(formatData); - var tooltipOptions = isPercent ? __assign({ formatter: function(datum) { - return { - name: datum[geometry35.seriesField] || yField2, - value: (Number(datum[yField2]) * 100).toFixed(2) + "%" - }; - } }, tooltip10) : tooltip10; - drawSingleGeometry({ - chart: view, - options: { - xField, - yField: yField2, - tooltip: tooltipOptions, - geometryOption: geometry35 - } - }); - }); - return params; -} -function color2(params) { - var _a6; - var chart = params.chart, options = params.options; - var geometryOptions = options.geometryOptions; - var themeColor = ((_a6 = chart.getTheme()) === null || _a6 === void 0 ? void 0 : _a6.colors10) || []; - var start = 0; - chart.once("beforepaint", function() { - (0, import_util362.each)(geometryOptions, function(geometryOption, index2) { - var view = findViewById(chart, index2 === 0 ? LEFT_AXES_VIEW : RIGHT_AXES_VIEW); - if (geometryOption.color) - return; - var groupScale = view.getGroupScales(); - var count2 = (0, import_util362.get)(groupScale, [0, "values", "length"], 1); - var color4 = themeColor.slice(start, start + count2).concat(index2 === 0 ? [] : themeColor); - view.geometries.forEach(function(geometry35) { - if (geometryOption.seriesField) { - geometry35.color(geometryOption.seriesField, color4); - } else { - geometry35.color(color4[0]); - } - }); - start += count2; - }); - chart.render(true); - }); - return params; -} -function meta8(params) { - var _a6, _b; - var chart = params.chart, options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - scale7((_a6 = {}, _a6[xField] = xAxis, _a6[yField[0]] = yAxis[0], _a6))(deepAssign({}, params, { chart: findViewById(chart, LEFT_AXES_VIEW) })); - scale7((_b = {}, _b[xField] = xAxis, _b[yField[1]] = yAxis[1], _b))(deepAssign({}, params, { chart: findViewById(chart, RIGHT_AXES_VIEW) })); - return params; -} -function axis6(params) { - var chart = params.chart, options = params.options; - var leftView = findViewById(chart, LEFT_AXES_VIEW); - var rightView = findViewById(chart, RIGHT_AXES_VIEW); - var xField = options.xField, yField = options.yField, xAxis = options.xAxis, yAxis = options.yAxis; - chart.axis(xField, false); - chart.axis(yField[0], false); - chart.axis(yField[1], false); - leftView.axis(xField, xAxis); - leftView.axis(yField[0], getYAxisWithDefault(yAxis[0], AxisType.Left)); - rightView.axis(xField, false); - rightView.axis(yField[1], getYAxisWithDefault(yAxis[1], AxisType.Right)); - return params; -} -function tooltip4(params) { - var chart = params.chart, options = params.options; - var tooltip10 = options.tooltip; - var leftView = findViewById(chart, LEFT_AXES_VIEW); - var rightView = findViewById(chart, RIGHT_AXES_VIEW); - chart.tooltip(tooltip10); - leftView.tooltip({ - shared: true - }); - rightView.tooltip({ - shared: true - }); - return params; -} -function interaction3(params) { - var chart = params.chart; - interaction(deepAssign({}, params, { chart: findViewById(chart, LEFT_AXES_VIEW) })); - interaction(deepAssign({}, params, { chart: findViewById(chart, RIGHT_AXES_VIEW) })); - return params; -} -function annotation2(params) { - var chart = params.chart, options = params.options; - var annotations = options.annotations; - var a1 = (0, import_util362.get)(annotations, [0]); - var a22 = (0, import_util362.get)(annotations, [1]); - annotation(a1)(deepAssign({}, params, { - chart: findViewById(chart, LEFT_AXES_VIEW), - options: { - annotations: a1 - } - })); - annotation(a22)(deepAssign({}, params, { - chart: findViewById(chart, RIGHT_AXES_VIEW), - options: { - annotations: a22 - } - })); - return params; -} -function theme2(params) { - var chart = params.chart; - theme(deepAssign({}, params, { chart: findViewById(chart, LEFT_AXES_VIEW) })); - theme(deepAssign({}, params, { chart: findViewById(chart, RIGHT_AXES_VIEW) })); - theme(params); - return params; -} -function animation2(params) { - var chart = params.chart; - animation(deepAssign({}, params, { chart: findViewById(chart, LEFT_AXES_VIEW) })); - animation(deepAssign({}, params, { chart: findViewById(chart, RIGHT_AXES_VIEW) })); - return params; -} -function limitInPlot3(params) { - var chart = params.chart, options = params.options; - var yAxis = options.yAxis; - limitInPlot2(deepAssign({}, params, { - chart: findViewById(chart, LEFT_AXES_VIEW), - options: { - yAxis: yAxis[0] - } - })); - limitInPlot2(deepAssign({}, params, { - chart: findViewById(chart, RIGHT_AXES_VIEW), - options: { - yAxis: yAxis[1] - } - })); - return params; -} -function legend8(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend, geometryOptions = options.geometryOptions, yField = options.yField, data3 = options.data; - var leftView = findViewById(chart, LEFT_AXES_VIEW); - var rightView = findViewById(chart, RIGHT_AXES_VIEW); - if (legend18 === false) { - chart.legend(false); - } else if ((0, import_util362.isObject)(legend18) && legend18.custom === true) { - chart.legend(legend18); - } else { - var leftLegend_1 = (0, import_util362.get)(geometryOptions, [0, "legend"], legend18); - var rightLegend_1 = (0, import_util362.get)(geometryOptions, [1, "legend"], legend18); - chart.once("beforepaint", function() { - var leftItems = data3[0].length ? getViewLegendItems({ - view: leftView, - geometryOption: geometryOptions[0], - yField: yField[0], - legend: leftLegend_1 - }) : []; - var rightItems = data3[1].length ? getViewLegendItems({ - view: rightView, - geometryOption: geometryOptions[1], - yField: yField[1], - legend: rightLegend_1 - }) : []; - chart.legend(deepAssign({}, legend18, { - custom: true, - items: leftItems.concat(rightItems) - })); - }); - if (geometryOptions[0].seriesField) { - leftView.legend(geometryOptions[0].seriesField, leftLegend_1); - } - if (geometryOptions[1].seriesField) { - rightView.legend(geometryOptions[1].seriesField, rightLegend_1); - } - chart.on("legend-item:click", function(evt) { - var delegateObject = (0, import_util362.get)(evt, "gEvent.delegateObject", {}); - if (delegateObject && delegateObject.item) { - var _a6 = delegateObject.item, field_1 = _a6.value, isGeometry = _a6.isGeometry, viewId = _a6.viewId; - if (isGeometry) { - var idx = (0, import_util362.findIndex)(yField, function(yF) { - return yF === field_1; - }); - if (idx > -1) { - var geometries = (0, import_util362.get)(findViewById(chart, viewId), "geometries"); - (0, import_util362.each)(geometries, function(g4) { - g4.changeVisible(!delegateObject.item.unchecked); - }); - } - } else { - var legendItem_1 = (0, import_util362.get)(chart.getController("legend"), "option.items", []); - (0, import_util362.each)(chart.views, function(view) { - var groupScale = view.getGroupScales(); - (0, import_util362.each)(groupScale, function(scale12) { - if (scale12.values && scale12.values.indexOf(field_1) > -1) { - view.filter(scale12.field, function(value2) { - var curLegendItem = (0, import_util362.find)(legendItem_1, function(item) { - return item.value === value2; - }); - return !curLegendItem.unchecked; - }); - } - }); - chart.render(true); - }); - } - } - }); - } - return params; -} -function slider2(params) { - var chart = params.chart, options = params.options; - var slider3 = options.slider; - var leftView = findViewById(chart, LEFT_AXES_VIEW); - var rightView = findViewById(chart, RIGHT_AXES_VIEW); - if (slider3) { - leftView.option("slider", slider3); - leftView.on("slider:valuechanged", function(evt) { - var _a6 = evt.event, value2 = _a6.value, originValue = _a6.originValue; - if ((0, import_util362.isEqual)(value2, originValue)) { - return; - } - doSliderFilter(rightView, value2); - }); - chart.once("afterpaint", function() { - if (!(0, import_util362.isBoolean)(slider3)) { - var start = slider3.start, end2 = slider3.end; - if (start || end2) { - doSliderFilter(rightView, [start, end2]); - } - } - }); - } - return params; -} -function adaptor10(params) { - return flow(transformOptions2, createViews, theme2, geometry11, meta8, axis6, limitInPlot3, tooltip4, interaction3, annotation2, animation2, color2, legend8, slider2)(params); -} - -// node_modules/@antv/g2plot/esm/plots/dual-axes/index.js -var DualAxes = function(_super) { - __extends(DualAxes2, _super); - function DualAxes2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "dual-axes"; - return _this; - } - DualAxes2.prototype.getDefaultOptions = function() { - return deepAssign({}, _super.prototype.getDefaultOptions.call(this), { - yAxis: [], - syncViewPadding: true - }); - }; - DualAxes2.prototype.getSchemaAdaptor = function() { - return adaptor10; - }; - return DualAxes2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/tiny-line/constants.js -var import_util363 = __toModule(require_lib()); -var X_FIELD = "x"; -var Y_FIELD = "y"; -var DEFAULT_TOOLTIP_OPTIONS = { - showTitle: false, - shared: true, - showMarkers: false, - customContent: function(x6, data3) { - return "" + (0, import_util363.get)(data3, [0, "data", "y"], 0); - }, - containerTpl: '
    ', - itemTpl: "{value}", - domStyles: { - "g2-tooltip": { - padding: "2px 4px", - fontSize: "10px" - } - }, - showCrosshairs: true, - crosshairs: { - type: "x" - } -}; -var DEFAULT_OPTIONS10 = { - appendPadding: 2, - tooltip: __assign({}, DEFAULT_TOOLTIP_OPTIONS), - animation: {} -}; - -// node_modules/@antv/g2plot/esm/plots/tiny-line/utils.js -var import_util364 = __toModule(require_lib()); -function getTinyData(data3) { - return (0, import_util364.map)(data3 || [], function(y5, x6) { - return { x: "" + x6, y: y5 }; - }); -} - -// node_modules/@antv/g2plot/esm/plots/tiny-area/adaptor.js -function geometry12(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, color4 = options.color, areaStyle = options.areaStyle, pointOptions = options.point, lineOptions = options.line; - var pointState = pointOptions === null || pointOptions === void 0 ? void 0 : pointOptions.state; - var seriesData = getTinyData(data3); - chart.data(seriesData); - var primary = deepAssign({}, params, { - options: { - xField: X_FIELD, - yField: Y_FIELD, - area: { color: color4, style: areaStyle }, - line: lineOptions, - point: pointOptions - } - }); - var second = deepAssign({}, primary, { options: { tooltip: false } }); - var pointParams = deepAssign({}, primary, { options: { tooltip: false, state: pointState } }); - area(primary); - line(second); - point(pointParams); - chart.axis(false); - chart.legend(false); - return params; -} -function meta9(params) { - var _a6, _b; - var options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, data3 = options.data; - var seriesData = getTinyData(data3); - return flow(scale7((_a6 = {}, _a6[X_FIELD] = xAxis, _a6[Y_FIELD] = yAxis, _a6), (_b = {}, _b[X_FIELD] = { - type: "cat" - }, _b[Y_FIELD] = adjustYMetaByZero(seriesData, Y_FIELD), _b)))(params); -} -function adaptor11(params) { - return flow(pattern("areaStyle"), geometry12, meta9, tooltip, theme, animation, annotation())(params); -} - -// node_modules/@antv/g2plot/esm/plots/tiny-line/adaptor.js -function geometry13(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, color4 = options.color, lineStyle = options.lineStyle, pointMapping = options.point; - var pointState = pointMapping === null || pointMapping === void 0 ? void 0 : pointMapping.state; - var seriesData = getTinyData(data3); - chart.data(seriesData); - var primary = deepAssign({}, params, { - options: { - xField: X_FIELD, - yField: Y_FIELD, - line: { - color: color4, - style: lineStyle - }, - point: pointMapping - } - }); - var pointParams = deepAssign({}, primary, { options: { tooltip: false, state: pointState } }); - line(primary); - point(pointParams); - chart.axis(false); - chart.legend(false); - return params; -} -function adaptor12(params) { - return flow(geometry13, meta9, theme, tooltip, animation, annotation())(params); -} - -// node_modules/@antv/g2plot/esm/plots/tiny-line/index.js -var TinyLine = function(_super) { - __extends(TinyLine2, _super); - function TinyLine2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "tiny-line"; - return _this; - } - TinyLine2.getDefaultOptions = function() { - return DEFAULT_OPTIONS10; - }; - TinyLine2.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - var _a6 = this, chart = _a6.chart, options = _a6.options; - meta9({ chart, options }); - chart.changeData(getTinyData(data3)); - }; - TinyLine2.prototype.getDefaultOptions = function() { - return TinyLine2.getDefaultOptions(); - }; - TinyLine2.prototype.getSchemaAdaptor = function() { - return adaptor12; - }; - return TinyLine2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/tiny-column/adaptor.js -function geometry14(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, color4 = options.color, columnStyle = options.columnStyle, columnWidthRatio = options.columnWidthRatio; - var seriesData = getTinyData(data3); - chart.data(seriesData); - var p4 = deepAssign({}, params, { - options: { - xField: X_FIELD, - yField: Y_FIELD, - widthRatio: columnWidthRatio, - interval: { - style: columnStyle, - color: color4 - } - } - }); - interval2(p4); - chart.axis(false); - chart.legend(false); - chart.interaction("element-active"); - return params; -} -function adaptor13(params) { - return flow(theme, pattern("columnStyle"), geometry14, meta9, tooltip, animation, annotation())(params); -} - -// node_modules/@antv/g2plot/esm/plots/tiny-column/constants.js -var import_util365 = __toModule(require_lib()); -var DEFAULT_TOOLTIP_OPTIONS2 = { - showTitle: false, - shared: true, - showMarkers: false, - customContent: function(x6, data3) { - return "" + (0, import_util365.get)(data3, [0, "data", "y"], 0); - }, - containerTpl: '
    ', - itemTpl: "{value}", - domStyles: { - "g2-tooltip": { - padding: "2px 4px", - fontSize: "10px" - } - } -}; -var DEFAULT_OPTIONS11 = { - appendPadding: 2, - tooltip: __assign({}, DEFAULT_TOOLTIP_OPTIONS2), - animation: {} -}; - -// node_modules/@antv/g2plot/esm/plots/tiny-column/index.js -var TinyColumn = function(_super) { - __extends(TinyColumn2, _super); - function TinyColumn2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "tiny-column"; - return _this; - } - TinyColumn2.getDefaultOptions = function() { - return DEFAULT_OPTIONS11; - }; - TinyColumn2.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - var _a6 = this, chart = _a6.chart, options = _a6.options; - meta9({ chart, options }); - chart.changeData(getTinyData(data3)); - }; - TinyColumn2.prototype.getDefaultOptions = function() { - return TinyColumn2.getDefaultOptions(); - }; - TinyColumn2.prototype.getSchemaAdaptor = function() { - return adaptor13; - }; - return TinyColumn2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/tiny-area/constants.js -var DEFAULT_OPTIONS12 = { - appendPadding: 2, - tooltip: __assign({}, DEFAULT_TOOLTIP_OPTIONS), - color: "l(90) 0:#E5EDFE 1:#ffffff", - areaStyle: { - fillOpacity: 0.6 - }, - line: { - size: 1, - color: "#5B8FF9" - }, - animation: {} -}; - -// node_modules/@antv/g2plot/esm/plots/tiny-area/index.js -var TinyArea = function(_super) { - __extends(TinyArea2, _super); - function TinyArea2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "tiny-area"; - return _this; - } - TinyArea2.getDefaultOptions = function() { - return DEFAULT_OPTIONS12; - }; - TinyArea2.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - var _a6 = this, chart = _a6.chart, options = _a6.options; - meta9({ chart, options }); - chart.changeData(getTinyData(data3)); - }; - TinyArea2.prototype.getDefaultOptions = function() { - return TinyArea2.getDefaultOptions(); - }; - TinyArea2.prototype.getSchemaAdaptor = function() { - return adaptor11; - }; - return TinyArea2; -}(Plot); - -// node_modules/@antv/g2plot/esm/utils/transform/histogram.js -var import_util366 = __toModule(require_lib()); -function getBinKey(value2, binWidth, binNumber) { - if (binNumber === 1) { - return [0, binWidth]; - } - var index2 = Math.floor(value2 / binWidth); - return [binWidth * index2, binWidth * (index2 + 1)]; -} -function sturges(values4) { - return Math.ceil(Math.log(values4.length) / Math.LN2) + 1; -} -function binHistogram(data3, binField, binWidth, binNumber, stackField) { - var originData_copy = (0, import_util366.clone)(data3); - (0, import_util366.sortBy)(originData_copy, binField); - var values4 = (0, import_util366.valuesOfKey)(originData_copy, binField); - var range = (0, import_util366.getRange)(values4); - var rangeWidth = range.max - range.min; - var _binWidth = binWidth; - if (!binWidth && binNumber) { - _binWidth = binNumber > 1 ? rangeWidth / (binNumber - 1) : range.max; - } - if (!binWidth && !binNumber) { - var _defaultBinNumber = sturges(values4); - _binWidth = rangeWidth / _defaultBinNumber; - } - var bins = {}; - var groups = (0, import_util366.groupBy)(originData_copy, stackField); - if ((0, import_util366.isEmpty)(groups)) { - (0, import_util366.each)(originData_copy, function(data4) { - var value2 = data4[binField]; - var bin = getBinKey(value2, _binWidth, binNumber); - var binKey = bin[0] + "-" + bin[1]; - if (!(0, import_util366.hasKey)(bins, binKey)) { - bins[binKey] = { range: bin, count: 0 }; - } - bins[binKey].count += 1; - }); - } else { - Object.keys(groups).forEach(function(groupKey) { - (0, import_util366.each)(groups[groupKey], function(data4) { - var value2 = data4[binField]; - var bin = getBinKey(value2, _binWidth, binNumber); - var binKey = bin[0] + "-" + bin[1]; - var groupKeyBinKey = binKey + "-" + groupKey; - if (!(0, import_util366.hasKey)(bins, groupKeyBinKey)) { - bins[groupKeyBinKey] = { range: bin, count: 0 }; - bins[groupKeyBinKey][stackField] = groupKey; - } - bins[groupKeyBinKey].count += 1; - }); - }); - } - var plotData = []; - (0, import_util366.each)(bins, function(bin) { - plotData.push(bin); - }); - return plotData; -} - -// node_modules/@antv/g2plot/esm/plots/histogram/constant.js -var HISTOGRAM_X_FIELD = "range"; -var HISTOGRAM_Y_FIELD = "count"; -var DEFAULT_OPTIONS13 = deepAssign({}, Plot.getDefaultOptions(), { - columnStyle: { - stroke: "#FFFFFF" - }, - tooltip: { - shared: true, - showMarkers: false - }, - interactions: [{ type: "active-region" }] -}); - -// node_modules/@antv/g2plot/esm/plots/histogram/adaptor.js -function geometry15(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, binField = options.binField, binNumber = options.binNumber, binWidth = options.binWidth, color4 = options.color, stackField = options.stackField, legend18 = options.legend, columnStyle = options.columnStyle; - var plotData = binHistogram(data3, binField, binWidth, binNumber, stackField); - chart.data(plotData); - var p4 = deepAssign({}, params, { - options: { - xField: HISTOGRAM_X_FIELD, - yField: HISTOGRAM_Y_FIELD, - seriesField: stackField, - isStack: true, - interval: { - color: color4, - style: columnStyle - } - } - }); - interval2(p4); - if (legend18 && stackField) { - chart.legend(stackField, legend18); - } - return params; -} -function meta10(params) { - var _a6; - var options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis; - return flow(scale7((_a6 = {}, _a6[HISTOGRAM_X_FIELD] = xAxis, _a6[HISTOGRAM_Y_FIELD] = yAxis, _a6)))(params); -} -function axis7(params) { - var chart = params.chart, options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis; - if (xAxis === false) { - chart.axis(HISTOGRAM_X_FIELD, false); - } else { - chart.axis(HISTOGRAM_X_FIELD, xAxis); - } - if (yAxis === false) { - chart.axis(HISTOGRAM_Y_FIELD, false); - } else { - chart.axis(HISTOGRAM_Y_FIELD, yAxis); - } - return params; -} -function label9(params) { - var chart = params.chart, options = params.options; - var label17 = options.label; - var geometry35 = findGeometry(chart, "interval"); - if (!label17) { - geometry35.label(false); - } else { - var callback = label17.callback, cfg = __rest(label17, ["callback"]); - geometry35.label({ - fields: [HISTOGRAM_Y_FIELD], - callback, - cfg: transformLabel(cfg) - }); - } - return params; -} -function adaptor14(params) { - return flow(theme, pattern("columnStyle"), geometry15, meta10, axis7, state, label9, tooltip, interaction, animation)(params); -} - -// node_modules/@antv/g2plot/esm/plots/histogram/index.js -var Histogram = function(_super) { - __extends(Histogram2, _super); - function Histogram2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "histogram"; - return _this; - } - Histogram2.getDefaultOptions = function() { - return DEFAULT_OPTIONS13; - }; - Histogram2.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - var _a6 = this.options, binField = _a6.binField, binNumber = _a6.binNumber, binWidth = _a6.binWidth, stackField = _a6.stackField; - this.chart.changeData(binHistogram(data3, binField, binWidth, binNumber, stackField)); - }; - Histogram2.prototype.getDefaultOptions = function() { - return Histogram2.getDefaultOptions(); - }; - Histogram2.prototype.getSchemaAdaptor = function() { - return adaptor14; - }; - return Histogram2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/progress/adaptor.js -var import_util368 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/progress/constants.js -var DEFAULT_COLOR = ["#FAAD14", "#E8EDF3"]; -var DEFAULT_OPTIONS14 = { - percent: 0.2, - color: DEFAULT_COLOR, - animation: {} -}; - -// node_modules/@antv/g2plot/esm/plots/progress/utils.js -var import_util367 = __toModule(require_lib()); -function getProgressData(percent2) { - var clampPercent = (0, import_util367.clamp)(isRealNumber(percent2) ? percent2 : 0, 0, 1); - return [ - { - type: "current", - percent: clampPercent - }, - { - type: "target", - percent: 1 - clampPercent - } - ]; -} - -// node_modules/@antv/g2plot/esm/plots/progress/adaptor.js -function geometry16(params) { - var chart = params.chart, options = params.options; - var percent2 = options.percent, progressStyle = options.progressStyle, color4 = options.color, barWidthRatio = options.barWidthRatio; - chart.data(getProgressData(percent2)); - var p4 = deepAssign({}, params, { - options: { - xField: "1", - yField: "percent", - seriesField: "type", - isStack: true, - widthRatio: barWidthRatio, - interval: { - style: progressStyle, - color: (0, import_util368.isString)(color4) ? [color4, DEFAULT_COLOR[1]] : color4 - }, - args: { - zIndexReversed: true, - sortZIndex: true - } - } - }); - interval2(p4); - chart.tooltip(false); - chart.axis(false); - chart.legend(false); - return params; -} -function coordinate5(params) { - var chart = params.chart; - chart.coordinate("rect").transpose(); - return params; -} -function adaptor15(params) { - return flow(geometry16, scale7({}), coordinate5, animation, theme, annotation())(params); -} - -// node_modules/@antv/g2plot/esm/plots/progress/index.js -var Progress = function(_super) { - __extends(Progress2, _super); - function Progress2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "process"; - return _this; - } - Progress2.getDefaultOptions = function() { - return DEFAULT_OPTIONS14; - }; - Progress2.prototype.changeData = function(percent2) { - this.updateOption({ percent: percent2 }); - this.chart.changeData(getProgressData(percent2)); - }; - Progress2.prototype.getDefaultOptions = function() { - return Progress2.getDefaultOptions(); - }; - Progress2.prototype.getSchemaAdaptor = function() { - return adaptor15; - }; - return Progress2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/ring-progress/adaptor.js -var import_util369 = __toModule(require_lib()); -function coordinate6(params) { - var chart = params.chart, options = params.options; - var innerRadius = options.innerRadius, radius = options.radius; - chart.coordinate("theta", { - innerRadius, - radius - }); - return params; -} -function statistic(params, updated) { - var chart = params.chart, options = params.options; - var innerRadius = options.innerRadius, statistic4 = options.statistic, percent2 = options.percent, meta23 = options.meta; - chart.getController("annotation").clear(true); - if (innerRadius && statistic4) { - var metaFormatter = (0, import_util369.get)(meta23, ["percent", "formatter"]) || function(v3) { - return (v3 * 100).toFixed(2) + "%"; - }; - var contentOpt = statistic4.content; - if (contentOpt) { - contentOpt = deepAssign({}, contentOpt, { - content: !(0, import_util369.isNil)(contentOpt.content) ? contentOpt.content : metaFormatter(percent2) - }); - } - renderStatistic(chart, { statistic: __assign(__assign({}, statistic4), { content: contentOpt }), plotType: "ring-progress" }, { percent: percent2 }); - } - if (updated) { - chart.render(true); - } - return params; -} -function adaptor16(params) { - return flow(geometry16, scale7({}), coordinate6, statistic, animation, theme, annotation())(params); -} - -// node_modules/@antv/g2plot/esm/plots/ring-progress/constants.js -var DEFAULT_OPTIONS15 = { - percent: 0.2, - innerRadius: 0.8, - radius: 0.98, - color: ["#FAAD14", "#E8EDF3"], - statistic: { - title: false, - content: { - style: { - fontSize: "14px", - fontWeight: 300, - fill: "#4D4D4D", - textAlign: "center", - textBaseline: "middle" - } - } - }, - animation: {} -}; - -// node_modules/@antv/g2plot/esm/plots/ring-progress/index.js -var RingProgress = function(_super) { - __extends(RingProgress2, _super); - function RingProgress2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "ring-process"; - return _this; - } - RingProgress2.getDefaultOptions = function() { - return DEFAULT_OPTIONS15; - }; - RingProgress2.prototype.changeData = function(percent2) { - this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, event_default.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null)); - this.updateOption({ percent: percent2 }); - this.chart.data(getProgressData(percent2)); - statistic({ chart: this.chart, options: this.options }, true); - this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, event_default.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null)); - }; - RingProgress2.prototype.getDefaultOptions = function() { - return RingProgress2.getDefaultOptions(); - }; - RingProgress2.prototype.getSchemaAdaptor = function() { - return adaptor16; - }; - return RingProgress2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/heatmap/adaptor.js -var import_util370 = __toModule(require_lib()); -function geometry17(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, type2 = options.type, xField = options.xField, yField = options.yField, colorField = options.colorField, sizeField = options.sizeField, sizeRatio = options.sizeRatio, shape = options.shape, color4 = options.color, tooltip10 = options.tooltip, heatmapStyle = options.heatmapStyle; - chart.data(data3); - var geometryType = "polygon"; - if (type2 === "density") { - geometryType = "heatmap"; - } - var _a6 = getTooltipMapping(tooltip10, [xField, yField, colorField]), fields = _a6.fields, formatter = _a6.formatter; - var checkedSizeRatio = 1; - if (sizeRatio || sizeRatio === 0) { - if (!shape && !sizeField) { - console.warn("sizeRatio is not in effect: Must define shape or sizeField first"); - } else if (sizeRatio < 0 || sizeRatio > 1) { - console.warn("sizeRatio is not in effect: It must be a number in [0,1]"); - } else { - checkedSizeRatio = sizeRatio; - } - } - geometry(deepAssign({}, params, { - options: { - type: geometryType, - colorField, - tooltipFields: fields, - shapeField: sizeField || "", - label: void 0, - mapping: { - tooltip: formatter, - shape: shape && (sizeField ? function(dautm) { - var field6 = data3.map(function(row) { - return row[sizeField]; - }); - var min13 = Math.min.apply(Math, field6); - var max15 = Math.max.apply(Math, field6); - return [shape, ((0, import_util370.get)(dautm, sizeField) - min13) / (max15 - min13), checkedSizeRatio]; - } : function() { - return [shape, 1, checkedSizeRatio]; - }), - color: color4 || colorField && chart.getTheme().sequenceColors.join("-"), - style: heatmapStyle - } - } - })); - return params; -} -function meta11(params) { - var _a6; - var options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - return flow(scale7((_a6 = {}, _a6[xField] = xAxis, _a6[yField] = yAxis, _a6)))(params); -} -function axis8(params) { - var chart = params.chart, options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - if (xAxis === false) { - chart.axis(xField, false); - } else { - chart.axis(xField, xAxis); - } - if (yAxis === false) { - chart.axis(yField, false); - } else { - chart.axis(yField, yAxis); - } - return params; -} -function legend9(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend, colorField = options.colorField, sizeField = options.sizeField, sizeLegend = options.sizeLegend; - var showLegend = legend18 !== false; - if (colorField) { - chart.legend(colorField, showLegend ? legend18 : false); - } - if (sizeField) { - chart.legend(sizeField, sizeLegend === void 0 ? legend18 : sizeLegend); - } - if (!showLegend && !sizeLegend) { - chart.legend(false); - } - return params; -} -function label10(params) { - var chart = params.chart, options = params.options; - var label17 = options.label, colorField = options.colorField, type2 = options.type; - var geometry35 = findGeometry(chart, type2 === "density" ? "heatmap" : "polygon"); - if (!label17) { - geometry35.label(false); - } else if (colorField) { - var callback = label17.callback, cfg = __rest(label17, ["callback"]); - geometry35.label({ - fields: [colorField], - callback, - cfg: transformLabel(cfg) - }); - } - return params; -} -function coordinate7(params) { - var chart = params.chart, options = params.options; - var coordinate11 = options.coordinate, reflect = options.reflect; - if (coordinate11) { - chart.coordinate({ - type: coordinate11.type || "rect", - cfg: coordinate11.cfg - }); - } - if (reflect) { - chart.coordinate().reflect(reflect); - } - return params; -} -function adaptor17(params) { - return flow(theme, pattern("heatmapStyle"), meta11, coordinate7, geometry17, axis8, legend9, tooltip, label10, annotation(), interaction, animation, state)(params); -} - -// node_modules/@antv/g2plot/esm/plots/heatmap/constant.js -var DEFAULT_OPTIONS16 = deepAssign({}, Plot.getDefaultOptions(), { - type: "polygon", - legend: false, - coordinate: { - type: "rect" - }, - xAxis: { - tickLine: null, - line: null, - grid: { - alignTick: false, - line: { - style: { - lineWidth: 1, - lineDash: null, - stroke: "#f0f0f0" - } - } - } - }, - yAxis: { - grid: { - alignTick: false, - line: { - style: { - lineWidth: 1, - lineDash: null, - stroke: "#f0f0f0" - } - } - } - } -}); - -// node_modules/@antv/g2plot/esm/plots/heatmap/shapes/circle.js -registerShape("polygon", "circle", { - draw: function(cfg, group3) { - var _a6, _b; - var cx = cfg.x; - var cy = cfg.y; - var points = this.parsePoints(cfg.points); - var width2 = Math.abs(points[2].x - points[1].x); - var height = Math.abs(points[1].y - points[0].y); - var maxRadius = Math.min(width2, height) / 2; - var value2 = Number(cfg.shape[1]); - var sizeRatio = Number(cfg.shape[2]); - var radiusRatio = Math.sqrt(sizeRatio); - var radius = maxRadius * radiusRatio * Math.sqrt(value2); - var fill = ((_a6 = cfg.style) === null || _a6 === void 0 ? void 0 : _a6.fill) || cfg.color || ((_b = cfg.defaultStyle) === null || _b === void 0 ? void 0 : _b.fill); - var polygon2 = group3.addShape("circle", { - attrs: __assign(__assign(__assign({ x: cx, y: cy, r: radius }, cfg.defaultStyle), cfg.style), { fill }) - }); - return polygon2; - } -}); - -// node_modules/@antv/g2plot/esm/plots/heatmap/shapes/square.js -registerShape("polygon", "square", { - draw: function(cfg, group3) { - var _a6, _b; - var cx = cfg.x; - var cy = cfg.y; - var points = this.parsePoints(cfg.points); - var width2 = Math.abs(points[2].x - points[1].x); - var height = Math.abs(points[1].y - points[0].y); - var maxSideLength = Math.min(width2, height); - var value2 = Number(cfg.shape[1]); - var sizeRatio = Number(cfg.shape[2]); - var lenRatio = Math.sqrt(sizeRatio); - var sideLength = maxSideLength * lenRatio * Math.sqrt(value2); - var fill = ((_a6 = cfg.style) === null || _a6 === void 0 ? void 0 : _a6.fill) || cfg.color || ((_b = cfg.defaultStyle) === null || _b === void 0 ? void 0 : _b.fill); - var polygon2 = group3.addShape("rect", { - attrs: __assign(__assign(__assign({ x: cx - sideLength / 2, y: cy - sideLength / 2, width: sideLength, height: sideLength }, cfg.defaultStyle), cfg.style), { fill }) - }); - return polygon2; - } -}); - -// node_modules/@antv/g2plot/esm/plots/heatmap/index.js -var Heatmap2 = function(_super) { - __extends(Heatmap3, _super); - function Heatmap3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "heatmap"; - return _this; - } - Heatmap3.getDefaultOptions = function() { - return DEFAULT_OPTIONS16; - }; - Heatmap3.prototype.getSchemaAdaptor = function() { - return adaptor17; - }; - Heatmap3.prototype.getDefaultOptions = function() { - return Heatmap3.getDefaultOptions(); - }; - return Heatmap3; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/box/adaptor.js -var import_util372 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/box/constant.js -var _a3; -var BOX_RANGE = "$$range$$"; -var BOX_RANGE_ALIAS = "low-q1-median-q3-high"; -var BOX_SYNC_NAME = "$$y_outliers$$"; -var OUTLIERS_VIEW_ID = "outliers_view"; -var DEFAULT_OPTIONS17 = deepAssign({}, Plot.getDefaultOptions(), { - meta: (_a3 = {}, _a3[BOX_RANGE] = { min: 0, alias: BOX_RANGE_ALIAS }, _a3), - interactions: [{ type: "active-region" }], - tooltip: { - showMarkers: false, - shared: true - }, - boxStyle: { - lineWidth: 1 - } -}); - -// node_modules/@antv/g2plot/esm/plots/box/utils.js -var import_util371 = __toModule(require_lib()); -var transformData = function(data3, yField) { - var newData = data3; - if (Array.isArray(yField)) { - var low_1 = yField[0], q1_1 = yField[1], median_1 = yField[2], q3_1 = yField[3], high_1 = yField[4]; - newData = (0, import_util371.map)(data3, function(obj) { - obj[BOX_RANGE] = [obj[low_1], obj[q1_1], obj[median_1], obj[q3_1], obj[high_1]]; - return obj; - }); - } - return newData; -}; - -// node_modules/@antv/g2plot/esm/plots/box/adaptor.js -function field(params) { - var chart = params.chart, options = params.options; - var xField = options.xField, yField = options.yField, groupField = options.groupField, color4 = options.color, tooltip10 = options.tooltip, boxStyle = options.boxStyle; - chart.data(transformData(options.data, yField)); - var yFieldName = (0, import_util372.isArray)(yField) ? BOX_RANGE : yField; - var rawFields = yField ? (0, import_util372.isArray)(yField) ? yField : [yField] : []; - var tooltipOptions = tooltip10; - if (tooltipOptions !== false) { - tooltipOptions = deepAssign({}, { fields: (0, import_util372.isArray)(yField) ? yField : [] }, tooltipOptions); - } - var ext = schema2(deepAssign({}, params, { - options: { - xField, - yField: yFieldName, - seriesField: groupField, - tooltip: tooltipOptions, - rawFields, - label: false, - schema: { - shape: "box", - color: color4, - style: boxStyle - } - } - })).ext; - if (groupField) { - ext.geometry.adjust("dodge"); - } - return params; -} -function outliersPoint(params) { - var chart = params.chart, options = params.options; - var xField = options.xField, data3 = options.data, outliersField = options.outliersField, outliersStyle = options.outliersStyle, padding3 = options.padding, label17 = options.label; - if (!outliersField) - return params; - var outliersView = chart.createView({ padding: padding3, id: OUTLIERS_VIEW_ID }); - var outliersViewData = data3.reduce(function(ret, datum) { - var outliersData = datum[outliersField]; - outliersData.forEach(function(d3) { - var _a6; - return ret.push(__assign(__assign({}, datum), (_a6 = {}, _a6[outliersField] = d3, _a6))); - }); - return ret; - }, []); - outliersView.data(outliersViewData); - point({ - chart: outliersView, - options: { - xField, - yField: outliersField, - point: { shape: "circle", style: outliersStyle }, - label: label17 - } - }); - outliersView.axis(false); - return params; -} -function meta12(params) { - var _a6, _b; - var chart = params.chart, options = params.options; - var meta23 = options.meta, xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, outliersField = options.outliersField; - var yFieldName = Array.isArray(yField) ? BOX_RANGE : yField; - var baseMeta = {}; - if (outliersField) { - var syncName = BOX_SYNC_NAME; - baseMeta = (_a6 = {}, _a6[outliersField] = { sync: syncName, nice: true }, _a6[yFieldName] = { sync: syncName, nice: true }, _a6); - } - var scales = deepAssign(baseMeta, meta23, (_b = {}, _b[xField] = pick4(xAxis, AXIS_META_CONFIG_KEYS), _b[yFieldName] = pick4(yAxis, AXIS_META_CONFIG_KEYS), _b)); - chart.scale(scales); - return params; -} -function axis9(params) { - var chart = params.chart, options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - var yFieldName = Array.isArray(yField) ? BOX_RANGE : yField; - if (xAxis === false) { - chart.axis(xField, false); - } else { - chart.axis(xField, xAxis); - } - if (yAxis === false) { - chart.axis(BOX_RANGE, false); - } else { - chart.axis(yFieldName, yAxis); - } - return params; -} -function legend10(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend, groupField = options.groupField; - if (groupField) { - if (legend18) { - chart.legend(groupField, legend18); - } else { - chart.legend(groupField, { position: "bottom" }); - } - } else { - chart.legend(false); - } - return params; -} -function adaptor18(params) { - return flow(field, outliersPoint, meta12, axis9, legend10, tooltip, interaction, animation, theme)(params); -} - -// node_modules/@antv/g2plot/esm/plots/box/index.js -var Box = function(_super) { - __extends(Box3, _super); - function Box3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "box"; - return _this; - } - Box3.getDefaultOptions = function() { - return DEFAULT_OPTIONS17; - }; - Box3.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - var yField = this.options.yField; - var outliersView = this.chart.views.find(function(v3) { - return v3.id === OUTLIERS_VIEW_ID; - }); - if (outliersView) { - outliersView.data(data3); - } - this.chart.changeData(transformData(data3, yField)); - }; - Box3.prototype.getDefaultOptions = function() { - return Box3.getDefaultOptions(); - }; - Box3.prototype.getSchemaAdaptor = function() { - return adaptor18; - }; - return Box3; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/violin/adaptor.js -var import_util374 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/violin/utils.js -var import_util373 = __toModule(require_lib()); -var import_pdfast = __toModule(require_src()); - -// node_modules/@antv/g2plot/esm/utils/transform/quantile.js -function quantileSorted2(x6, p4) { - var idx = x6.length * p4; - if (x6.length === 0) { - throw new Error("quantile requires at least one data point."); - } else if (p4 < 0 || p4 > 1) { - throw new Error("quantiles must be between 0 and 1"); - } else if (p4 === 1) { - return x6[x6.length - 1]; - } else if (p4 === 0) { - return x6[0]; - } else if (idx % 1 !== 0) { - return x6[Math.ceil(idx) - 1]; - } else if (x6.length % 2 === 0) { - return (x6[idx - 1] + x6[idx]) / 2; - } else { - return x6[idx]; - } -} -function swap2(arr, i4, j4) { - var tmp = arr[i4]; - arr[i4] = arr[j4]; - arr[j4] = tmp; -} -function quickselect(arr, k4, left2, right2) { - left2 = left2 || 0; - right2 = right2 || arr.length - 1; - while (right2 > left2) { - if (right2 - left2 > 600) { - var n3 = right2 - left2 + 1; - var m4 = k4 - left2 + 1; - var z3 = Math.log(n3); - var s4 = 0.5 * Math.exp(2 * z3 / 3); - var sd = 0.5 * Math.sqrt(z3 * s4 * (n3 - s4) / n3); - if (m4 - n3 / 2 < 0) - sd *= -1; - var newLeft = Math.max(left2, Math.floor(k4 - m4 * s4 / n3 + sd)); - var newRight = Math.min(right2, Math.floor(k4 + (n3 - m4) * s4 / n3 + sd)); - quickselect(arr, k4, newLeft, newRight); - } - var t4 = arr[k4]; - var i4 = left2; - var j4 = right2; - swap2(arr, left2, k4); - if (arr[right2] > t4) - swap2(arr, left2, right2); - while (i4 < j4) { - swap2(arr, i4, j4); - i4++; - j4--; - while (arr[i4] < t4) - i4++; - while (arr[j4] > t4) - j4--; - } - if (arr[left2] === t4) - swap2(arr, left2, j4); - else { - j4++; - swap2(arr, j4, right2); - } - if (j4 <= k4) - left2 = j4 + 1; - if (k4 <= j4) - right2 = j4 - 1; - } -} -function quantile(x6, p4) { - var copy8 = x6.slice(); - if (Array.isArray(p4)) { - multiQuantileSelect(copy8, p4); - var results = []; - for (var i4 = 0; i4 < p4.length; i4++) { - results[i4] = quantileSorted2(copy8, p4[i4]); - } - return results; - } else { - var idx = quantileIndex(copy8.length, p4); - quantileSelect(copy8, idx, 0, copy8.length - 1); - return quantileSorted2(copy8, p4); - } -} -function quantileSelect(arr, k4, left2, right2) { - if (k4 % 1 === 0) { - quickselect(arr, k4, left2, right2); - } else { - k4 = Math.floor(k4); - quickselect(arr, k4, left2, right2); - quickselect(arr, k4 + 1, k4 + 1, right2); - } -} -function multiQuantileSelect(arr, p4) { - var indices = [0]; - for (var i4 = 0; i4 < p4.length; i4++) { - indices.push(quantileIndex(arr.length, p4[i4])); - } - indices.push(arr.length - 1); - indices.sort(compare); - var stack = [0, indices.length - 1]; - while (stack.length) { - var r4 = Math.ceil(stack.pop()); - var l4 = Math.floor(stack.pop()); - if (r4 - l4 <= 1) - continue; - var m4 = Math.floor((l4 + r4) / 2); - quantileSelect(arr, indices[m4], Math.floor(indices[l4]), Math.ceil(indices[r4])); - stack.push(l4, m4, m4, r4); - } -} -function compare(a4, b10) { - return a4 - b10; -} -function quantileIndex(len5, p4) { - var idx = len5 * p4; - if (p4 === 1) { - return len5 - 1; - } else if (p4 === 0) { - return 0; - } else if (idx % 1 !== 0) { - return Math.ceil(idx) - 1; - } else if (len5 % 2 === 0) { - return idx - 0.5; - } else { - return idx; - } -} - -// node_modules/@antv/g2plot/esm/plots/violin/utils.js -var toBoxValue = function(values4) { - return { - low: (0, import_util373.min)(values4), - high: (0, import_util373.max)(values4), - q1: quantile(values4, 0.25), - q3: quantile(values4, 0.75), - median: quantile(values4, [0.5]), - minMax: [(0, import_util373.min)(values4), (0, import_util373.max)(values4)], - quantile: [quantile(values4, 0.25), quantile(values4, 0.75)] - }; -}; -var toViolinValue = function(values4, pdfOptions) { - var pdfResults = import_pdfast.default.create(values4, pdfOptions); - return { - violinSize: pdfResults.map(function(result) { - return result.y; - }), - violinY: pdfResults.map(function(result) { - return result.x; - }) - }; -}; -var transformViolinData = function(options) { - var xField = options.xField, yField = options.yField, seriesField = options.seriesField, data3 = options.data, kde = options.kde; - var pdfOptions = { - min: kde.min, - max: kde.max, - size: kde.sampleSize, - width: kde.width - }; - if (!seriesField) { - var group_1 = (0, import_util373.groupBy)(data3, xField); - return Object.keys(group_1).map(function(x6) { - var records = group_1[x6]; - var values4 = records.map(function(record) { - return record[yField]; - }); - return __assign(__assign({ x: x6 }, toViolinValue(values4, pdfOptions)), toBoxValue(values4)); - }); - } - var resultList = []; - var seriesGroup = (0, import_util373.groupBy)(data3, seriesField); - Object.keys(seriesGroup).forEach(function(series) { - var group3 = (0, import_util373.groupBy)(seriesGroup[series], xField); - return Object.keys(group3).forEach(function(key) { - var _a6; - var records = group3[key]; - var values4 = records.map(function(record) { - return record[yField]; - }); - resultList.push(__assign(__assign((_a6 = { x: key }, _a6[seriesField] = series, _a6), toViolinValue(values4, pdfOptions)), toBoxValue(values4))); - }); - }); - return resultList; -}; - -// node_modules/@antv/g2plot/esm/plots/violin/constant.js -var X_FIELD2 = "x"; -var VIOLIN_Y_FIELD = "violinY"; -var VIOLIN_SIZE_FIELD = "violinSize"; -var MIN_MAX_FIELD = "minMax"; -var QUANTILE_FIELD = "quantile"; -var MEDIAN_FIELD = "median"; -var VIOLIN_VIEW_ID = "violin_view"; -var MIN_MAX_VIEW_ID = "min_max_view"; -var QUANTILE_VIEW_ID = "quantile_view"; -var MEDIAN_VIEW_ID = "median_view"; -var DEFAULT_OPTIONS18 = deepAssign({}, Plot.getDefaultOptions(), { - syncViewPadding: true, - kde: { - type: "triangular", - sampleSize: 32, - width: 3 - }, - violinStyle: { - lineWidth: 1, - fillOpacity: 0.3, - strokeOpacity: 0.75 - }, - xAxis: { - grid: { - line: null - }, - tickLine: { - alignTick: false - } - }, - yAxis: { - grid: { - line: { - style: { - lineWidth: 0.5, - lineDash: [4, 4] - } - } - } - }, - legend: { - position: "top-left" - }, - tooltip: { - showMarkers: false - } -}); - -// node_modules/@antv/g2plot/esm/plots/violin/adaptor.js -var TOOLTIP_FIELDS = ["low", "high", "q1", "q3", "median"]; -var adjustCfg = [ - { - type: "dodge", - marginRatio: 1 / 32 - } -]; -function data(params) { - var chart = params.chart, options = params.options; - chart.data(transformViolinData(options)); - return params; -} -function violinView(params) { - var chart = params.chart, options = params.options; - var seriesField = options.seriesField, color4 = options.color, _a6 = options.shape, shape = _a6 === void 0 ? "violin" : _a6, violinStyle = options.violinStyle, tooltip10 = options.tooltip, state2 = options.state; - var view = chart.createView({ id: VIOLIN_VIEW_ID }); - violin({ - chart: view, - options: { - xField: X_FIELD2, - yField: VIOLIN_Y_FIELD, - seriesField: seriesField ? seriesField : X_FIELD2, - sizeField: VIOLIN_SIZE_FIELD, - tooltip: __assign({ fields: TOOLTIP_FIELDS }, tooltip10), - violin: { - style: violinStyle, - color: color4, - shape - }, - state: state2 - } - }); - view.geometries[0].adjust(adjustCfg); - return params; -} -function boxView(params) { - var chart = params.chart, options = params.options; - var seriesField = options.seriesField, color4 = options.color, tooltip10 = options.tooltip, box2 = options.box; - if (box2 === false) - return params; - var minMaxView = chart.createView({ id: MIN_MAX_VIEW_ID }); - interval2({ - chart: minMaxView, - options: { - xField: X_FIELD2, - yField: MIN_MAX_FIELD, - seriesField: seriesField ? seriesField : X_FIELD2, - tooltip: __assign({ fields: TOOLTIP_FIELDS }, tooltip10), - state: typeof box2 === "object" ? box2.state : {}, - interval: { - color: color4, - size: 1, - style: { - lineWidth: 0 - } - } - } - }); - minMaxView.geometries[0].adjust(adjustCfg); - var quantileView = chart.createView({ id: QUANTILE_VIEW_ID }); - interval2({ - chart: quantileView, - options: { - xField: X_FIELD2, - yField: QUANTILE_FIELD, - seriesField: seriesField ? seriesField : X_FIELD2, - tooltip: __assign({ fields: TOOLTIP_FIELDS }, tooltip10), - state: typeof box2 === "object" ? box2.state : {}, - interval: { - color: color4, - size: 8, - style: { - fillOpacity: 1 - } - } - } - }); - quantileView.geometries[0].adjust(adjustCfg); - var medianView = chart.createView({ id: MEDIAN_VIEW_ID }); - point({ - chart: medianView, - options: { - xField: X_FIELD2, - yField: MEDIAN_FIELD, - seriesField: seriesField ? seriesField : X_FIELD2, - tooltip: __assign({ fields: TOOLTIP_FIELDS }, tooltip10), - state: typeof box2 === "object" ? box2.state : {}, - point: { - color: color4, - size: 1, - style: { - fill: "white", - lineWidth: 0 - } - } - } - }); - medianView.geometries[0].adjust(adjustCfg); - quantileView.axis(false); - minMaxView.axis(false); - medianView.axis(false); - medianView.legend(false); - minMaxView.legend(false); - quantileView.legend(false); - return params; -} -function meta13(params) { - var _a6; - var chart = params.chart, options = params.options; - var meta23 = options.meta, xAxis = options.xAxis, yAxis = options.yAxis; - var baseMeta = {}; - var scales = deepAssign(baseMeta, meta23, (_a6 = {}, _a6[X_FIELD2] = __assign(__assign({ sync: true }, pick4(xAxis, AXIS_META_CONFIG_KEYS)), { - type: "cat" - }), _a6[VIOLIN_Y_FIELD] = __assign({ sync: true }, pick4(yAxis, AXIS_META_CONFIG_KEYS)), _a6[MIN_MAX_FIELD] = __assign({ sync: VIOLIN_Y_FIELD }, pick4(yAxis, AXIS_META_CONFIG_KEYS)), _a6[QUANTILE_FIELD] = __assign({ sync: VIOLIN_Y_FIELD }, pick4(yAxis, AXIS_META_CONFIG_KEYS)), _a6[MEDIAN_FIELD] = __assign({ sync: VIOLIN_Y_FIELD }, pick4(yAxis, AXIS_META_CONFIG_KEYS)), _a6)); - chart.scale(scales); - return params; -} -function axis10(params) { - var chart = params.chart, options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis; - var view = findViewById(chart, VIOLIN_VIEW_ID); - if (xAxis === false) { - view.axis(X_FIELD2, false); - } else { - view.axis(X_FIELD2, xAxis); - } - if (yAxis === false) { - view.axis(VIOLIN_Y_FIELD, false); - } else { - view.axis(VIOLIN_Y_FIELD, yAxis); - } - chart.axis(false); - return params; -} -function legend11(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend, seriesField = options.seriesField, shape = options.shape; - if (legend18 === false) { - chart.legend(false); - } else { - var legendField_1 = seriesField ? seriesField : X_FIELD2; - var legendOptions = (0, import_util374.omit)(legend18, ["selected"]); - if (!shape || !shape.startsWith("hollow")) { - if (!(0, import_util374.get)(legendOptions, ["marker", "style", "lineWidth"])) { - (0, import_util374.set)(legendOptions, ["marker", "style", "lineWidth"], 0); - } - } - chart.legend(legendField_1, legendOptions); - if ((0, import_util374.get)(legend18, "selected")) { - (0, import_util374.each)(chart.views, function(view) { - return view.legend(legendField_1, legend18); - }); - } - } - return params; -} -function annotation3(params) { - var chart = params.chart; - var violinView2 = findViewById(chart, VIOLIN_VIEW_ID); - annotation()(__assign(__assign({}, params), { chart: violinView2 })); - return params; -} -function animation3(params) { - var chart = params.chart, options = params.options; - var animation7 = options.animation; - (0, import_util374.each)(chart.views, function(view) { - if (typeof animation7 === "boolean") { - view.animate(animation7); - } else { - view.animate(true); - } - (0, import_util374.each)(view.geometries, function(g4) { - g4.animate(animation7); - }); - }); - return params; -} -function adaptor19(params) { - return flow(theme, data, violinView, boxView, meta13, tooltip, axis10, legend11, interaction, annotation3, animation3)(params); -} - -// node_modules/@antv/g2plot/esm/plots/violin/index.js -var Violin2 = function(_super) { - __extends(Violin3, _super); - function Violin3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "violin"; - return _this; - } - Violin3.getDefaultOptions = function() { - return DEFAULT_OPTIONS18; - }; - Violin3.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - this.chart.changeData(transformViolinData(this.options)); - }; - Violin3.prototype.getDefaultOptions = function() { - return Violin3.getDefaultOptions(); - }; - Violin3.prototype.getSchemaAdaptor = function() { - return adaptor19; - }; - return Violin3; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/venn/adaptor.js -var import_util379 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/venn/utils.js -var import_util375 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/utils/color/blend.js -var each136 = function(f3) { - return function(c0, c1) { - var out = []; - out[0] = f3(c0[0], c1[0]); - out[1] = f3(c0[1], c1[1]); - out[2] = f3(c0[2], c1[2]); - return out; - }; -}; -var blendObject = { - normal: function(a4) { - return a4; - }, - multiply: function(a4, b10) { - return a4 * b10 / 255; - }, - screen: function(a4, b10) { - return 255 * (1 - (1 - a4 / 255) * (1 - b10 / 255)); - }, - overlay: function(a4, b10) { - return b10 < 128 ? 2 * a4 * b10 / 255 : 255 * (1 - 2 * (1 - a4 / 255) * (1 - b10 / 255)); - }, - darken: function(a4, b10) { - return a4 > b10 ? b10 : a4; - }, - lighten: function(a4, b10) { - return a4 > b10 ? a4 : b10; - }, - dodge: function(a4, b10) { - if (a4 === 255) - return 255; - a4 = 255 * (b10 / 255) / (1 - a4 / 255); - return a4 > 255 ? 255 : a4; - }, - burn: function(a4, b10) { - if (b10 === 255) - return 255; - else if (a4 === 0) - return 0; - else - return 255 * (1 - Math.min(1, (1 - b10 / 255) / (a4 / 255))); - } -}; -var innerBlend = function(mode) { - if (!blendObject[mode]) { - throw new Error("unknown blend mode " + mode); - } - return blendObject[mode]; -}; -function blend(c0, c1, mode) { - if (mode === void 0) { - mode = "normal"; - } - var blendRgbArr = each136(innerBlend(mode))(colorToArr(c0), colorToArr(c1)); - var _a6 = colorToArr(c0), r0 = _a6[0], g0 = _a6[1], b02 = _a6[2], a0 = _a6[3]; - var _b = colorToArr(c1), r1 = _b[0], g1 = _b[1], b12 = _b[2], a1 = _b[3]; - var a4 = Number((a0 + a1 * (1 - a0)).toFixed(2)); - var r4 = Math.round((a0 * (1 - a1) * (r0 / 255) + a0 * a1 * (blendRgbArr[0] / 255) + (1 - a0) * a1 * (r1 / 255)) / a4 * 255); - var g4 = Math.round((a0 * (1 - a1) * (g0 / 255) + a0 * a1 * (blendRgbArr[1] / 255) + (1 - a0) * a1 * (g1 / 255)) / a4 * 255); - var b10 = Math.round((a0 * (1 - a1) * (b02 / 255) + a0 * a1 * (blendRgbArr[2] / 255) + (1 - a0) * a1 * (b12 / 255)) / a4 * 255); - return "rgba(" + r4 + ", " + g4 + ", " + b10 + ", " + a4 + ")"; -} -function colorToArr(c5) { - var color4 = c5.replace("/s+/g", ""); - var rgbaArr; - if (typeof color4 === "string" && !color4.startsWith("rgba") && !color4.startsWith("#")) { - return rgbaArr = esm_default2.rgb2arr(esm_default2.toRGB(color4)).concat([1]); - } - if (color4.startsWith("rgba")) - rgbaArr = color4.replace("rgba(", "").replace(")", "").split(","); - if (color4.startsWith("#")) - rgbaArr = esm_default2.rgb2arr(color4).concat([1]); - return rgbaArr.map(function(item, index2) { - return index2 === 3 ? Number(item) : item | 0; - }); -} - -// node_modules/@antv/g2plot/esm/plots/venn/layout/layout.js -var import_fmin = __toModule(require_fmin()); - -// node_modules/@antv/g2plot/esm/plots/venn/layout/circleintersection.js -var SMALL = 1e-10; -function intersectionArea(circles, stats) { - var intersectionPoints = getIntersectionPoints(circles); - var innerPoints = intersectionPoints.filter(function(p5) { - return containedInCircles(p5, circles); - }); - var arcArea = 0, polygonArea = 0, i4; - var arcs = []; - if (innerPoints.length > 1) { - var center2 = getCenter(innerPoints); - for (i4 = 0; i4 < innerPoints.length; ++i4) { - var p4 = innerPoints[i4]; - p4.angle = Math.atan2(p4.x - center2.x, p4.y - center2.y); - } - innerPoints.sort(function(a5, b10) { - return b10.angle - a5.angle; - }); - var p22 = innerPoints[innerPoints.length - 1]; - for (i4 = 0; i4 < innerPoints.length; ++i4) { - var p1 = innerPoints[i4]; - polygonArea += (p22.x + p1.x) * (p1.y - p22.y); - var midPoint = { x: (p1.x + p22.x) / 2, y: (p1.y + p22.y) / 2 }; - var arc2 = null; - for (var j4 = 0; j4 < p1.parentIndex.length; ++j4) { - if (p22.parentIndex.indexOf(p1.parentIndex[j4]) > -1) { - var circle3 = circles[p1.parentIndex[j4]], a1 = Math.atan2(p1.x - circle3.x, p1.y - circle3.y), a22 = Math.atan2(p22.x - circle3.x, p22.y - circle3.y); - var angleDiff = a22 - a1; - if (angleDiff < 0) { - angleDiff += 2 * Math.PI; - } - var a4 = a22 - angleDiff / 2; - var width2 = distance9(midPoint, { - x: circle3.x + circle3.radius * Math.sin(a4), - y: circle3.y + circle3.radius * Math.cos(a4) - }); - if (width2 > circle3.radius * 2) { - width2 = circle3.radius * 2; - } - if (arc2 === null || arc2.width > width2) { - arc2 = { circle: circle3, width: width2, p1, p2: p22 }; - } - } - } - if (arc2 !== null) { - arcs.push(arc2); - arcArea += circleArea(arc2.circle.radius, arc2.width); - p22 = p1; - } - } - } else { - var smallest = circles[0]; - for (i4 = 1; i4 < circles.length; ++i4) { - if (circles[i4].radius < smallest.radius) { - smallest = circles[i4]; - } - } - var disjoint = false; - for (i4 = 0; i4 < circles.length; ++i4) { - if (distance9(circles[i4], smallest) > Math.abs(smallest.radius - circles[i4].radius)) { - disjoint = true; - break; - } - } - if (disjoint) { - arcArea = polygonArea = 0; - } else { - arcArea = smallest.radius * smallest.radius * Math.PI; - arcs.push({ - circle: smallest, - p1: { x: smallest.x, y: smallest.y + smallest.radius }, - p2: { x: smallest.x - SMALL, y: smallest.y + smallest.radius }, - width: smallest.radius * 2 - }); - } - } - polygonArea /= 2; - if (stats) { - stats.area = arcArea + polygonArea; - stats.arcArea = arcArea; - stats.polygonArea = polygonArea; - stats.arcs = arcs; - stats.innerPoints = innerPoints; - stats.intersectionPoints = intersectionPoints; - } - return arcArea + polygonArea; -} -function containedInCircles(point2, circles) { - for (var i4 = 0; i4 < circles.length; ++i4) { - if (distance9(point2, circles[i4]) > circles[i4].radius + SMALL) { - return false; - } - } - return true; -} -function getIntersectionPoints(circles) { - var ret = []; - for (var i4 = 0; i4 < circles.length; ++i4) { - for (var j4 = i4 + 1; j4 < circles.length; ++j4) { - var intersect2 = circleCircleIntersection(circles[i4], circles[j4]); - for (var k4 = 0; k4 < intersect2.length; ++k4) { - var p4 = intersect2[k4]; - p4.parentIndex = [i4, j4]; - ret.push(p4); - } - } - } - return ret; -} -function circleArea(r4, width2) { - return r4 * r4 * Math.acos(1 - width2 / r4) - (r4 - width2) * Math.sqrt(width2 * (2 * r4 - width2)); -} -function distance9(p1, p22) { - return Math.sqrt((p1.x - p22.x) * (p1.x - p22.x) + (p1.y - p22.y) * (p1.y - p22.y)); -} -function circleOverlap(r1, r22, d3) { - if (d3 >= r1 + r22) { - return 0; - } - if (d3 <= Math.abs(r1 - r22)) { - return Math.PI * Math.min(r1, r22) * Math.min(r1, r22); - } - var w1 = r1 - (d3 * d3 - r22 * r22 + r1 * r1) / (2 * d3), w22 = r22 - (d3 * d3 - r1 * r1 + r22 * r22) / (2 * d3); - return circleArea(r1, w1) + circleArea(r22, w22); -} -function circleCircleIntersection(p1, p22) { - var d3 = distance9(p1, p22), r1 = p1.radius, r22 = p22.radius; - if (d3 >= r1 + r22 || d3 <= Math.abs(r1 - r22)) { - return []; - } - var a4 = (r1 * r1 - r22 * r22 + d3 * d3) / (2 * d3), h3 = Math.sqrt(r1 * r1 - a4 * a4), x0 = p1.x + a4 * (p22.x - p1.x) / d3, y0 = p1.y + a4 * (p22.y - p1.y) / d3, rx = -(p22.y - p1.y) * (h3 / d3), ry = -(p22.x - p1.x) * (h3 / d3); - return [ - { x: x0 + rx, y: y0 - ry }, - { x: x0 - rx, y: y0 + ry } - ]; -} -function getCenter(points) { - var center2 = { x: 0, y: 0 }; - for (var i4 = 0; i4 < points.length; ++i4) { - center2.x += points[i4].x; - center2.y += points[i4].y; - } - center2.x /= points.length; - center2.y /= points.length; - return center2; -} - -// node_modules/@antv/g2plot/esm/plots/venn/layout/layout.js -function venn(areas, parameters) { - parameters = parameters || {}; - parameters.maxIterations = parameters.maxIterations || 500; - var initialLayout = parameters.initialLayout || bestInitialLayout; - var loss = parameters.lossFunction || lossFunction; - areas = addMissingAreas(areas); - var circles = initialLayout(areas, parameters); - var initial = [], setids = []; - var setid; - for (setid in circles) { - if (circles.hasOwnProperty(setid)) { - initial.push(circles[setid].x); - initial.push(circles[setid].y); - setids.push(setid); - } - } - var solution = (0, import_fmin.nelderMead)(function(values4) { - var current = {}; - for (var i5 = 0; i5 < setids.length; ++i5) { - var setid_1 = setids[i5]; - current[setid_1] = { - x: values4[2 * i5], - y: values4[2 * i5 + 1], - radius: circles[setid_1].radius - }; - } - return loss(current, areas); - }, initial, parameters); - var positions = solution.x; - for (var i4 = 0; i4 < setids.length; ++i4) { - setid = setids[i4]; - circles[setid].x = positions[2 * i4]; - circles[setid].y = positions[2 * i4 + 1]; - } - return circles; -} -var SMALL2 = 1e-10; -function distanceFromIntersectArea(r1, r22, overlap2) { - if (Math.min(r1, r22) * Math.min(r1, r22) * Math.PI <= overlap2 + SMALL2) { - return Math.abs(r1 - r22); - } - return (0, import_fmin.bisect)(function(distance15) { - return circleOverlap(r1, r22, distance15) - overlap2; - }, 0, r1 + r22); -} -function addMissingAreas(areas) { - areas = areas.slice(); - var ids = [], pairs2 = {}; - var i4, j4, a4, b10; - for (i4 = 0; i4 < areas.length; ++i4) { - var area2 = areas[i4]; - if (area2.sets.length == 1) { - ids.push(area2.sets[0]); - } else if (area2.sets.length == 2) { - a4 = area2.sets[0]; - b10 = area2.sets[1]; - pairs2[[a4, b10]] = true; - pairs2[[b10, a4]] = true; - } - } - ids.sort(function(a5, b11) { - return a5 > b11 ? 1 : -1; - }); - for (i4 = 0; i4 < ids.length; ++i4) { - a4 = ids[i4]; - for (j4 = i4 + 1; j4 < ids.length; ++j4) { - b10 = ids[j4]; - if (!([a4, b10] in pairs2)) { - areas.push({ sets: [a4, b10], size: 0 }); - } - } - } - return areas; -} -function getDistanceMatrices(areas, sets, setids) { - var distances = (0, import_fmin.zerosM)(sets.length, sets.length), constraints = (0, import_fmin.zerosM)(sets.length, sets.length); - areas.filter(function(x6) { - return x6.sets.length == 2; - }).map(function(current) { - var left2 = setids[current.sets[0]], right2 = setids[current.sets[1]], r1 = Math.sqrt(sets[left2].size / Math.PI), r22 = Math.sqrt(sets[right2].size / Math.PI), distance15 = distanceFromIntersectArea(r1, r22, current.size); - distances[left2][right2] = distances[right2][left2] = distance15; - var c5 = 0; - if (current.size + 1e-10 >= Math.min(sets[left2].size, sets[right2].size)) { - c5 = 1; - } else if (current.size <= 1e-10) { - c5 = -1; - } - constraints[left2][right2] = constraints[right2][left2] = c5; - }); - return { distances, constraints }; -} -function constrainedMDSGradient(x6, fxprime, distances, constraints) { - var loss = 0, i4; - for (i4 = 0; i4 < fxprime.length; ++i4) { - fxprime[i4] = 0; - } - for (i4 = 0; i4 < distances.length; ++i4) { - var xi = x6[2 * i4], yi = x6[2 * i4 + 1]; - for (var j4 = i4 + 1; j4 < distances.length; ++j4) { - var xj = x6[2 * j4], yj = x6[2 * j4 + 1], dij = distances[i4][j4], constraint = constraints[i4][j4]; - var squaredDistance4 = (xj - xi) * (xj - xi) + (yj - yi) * (yj - yi), distance_1 = Math.sqrt(squaredDistance4), delta = squaredDistance4 - dij * dij; - if (constraint > 0 && distance_1 <= dij || constraint < 0 && distance_1 >= dij) { - continue; - } - loss += 2 * delta * delta; - fxprime[2 * i4] += 4 * delta * (xi - xj); - fxprime[2 * i4 + 1] += 4 * delta * (yi - yj); - fxprime[2 * j4] += 4 * delta * (xj - xi); - fxprime[2 * j4 + 1] += 4 * delta * (yj - yi); - } - } - return loss; -} -function bestInitialLayout(areas, params) { - var initial = greedyLayout(areas, params); - var loss = params.lossFunction || lossFunction; - if (areas.length >= 8) { - var constrained = constrainedMDSLayout(areas, params), constrainedLoss = loss(constrained, areas), greedyLoss = loss(initial, areas); - if (constrainedLoss + 1e-8 < greedyLoss) { - initial = constrained; - } - } - return initial; -} -function constrainedMDSLayout(areas, params) { - params = params || {}; - var restarts = params.restarts || 10; - var sets = [], setids = {}; - var i4; - for (i4 = 0; i4 < areas.length; ++i4) { - var area2 = areas[i4]; - if (area2.sets.length == 1) { - setids[area2.sets[0]] = sets.length; - sets.push(area2); - } - } - var matrices = getDistanceMatrices(areas, sets, setids); - var distances = matrices.distances; - var constraints = matrices.constraints; - var norm = (0, import_fmin.norm2)(distances.map(import_fmin.norm2)) / distances.length; - distances = distances.map(function(row) { - return row.map(function(value2) { - return value2 / norm; - }); - }); - var obj = function(x6, fxprime) { - return constrainedMDSGradient(x6, fxprime, distances, constraints); - }; - var best, current; - for (i4 = 0; i4 < restarts; ++i4) { - var initial = (0, import_fmin.zeros)(distances.length * 2).map(Math.random); - current = (0, import_fmin.conjugateGradient)(obj, initial, params); - if (!best || current.fx < best.fx) { - best = current; - } - } - var positions = best.x; - var circles = {}; - for (i4 = 0; i4 < sets.length; ++i4) { - var set13 = sets[i4]; - circles[set13.sets[0]] = { - x: positions[2 * i4] * norm, - y: positions[2 * i4 + 1] * norm, - radius: Math.sqrt(set13.size / Math.PI) - }; - } - if (params.history) { - for (i4 = 0; i4 < params.history.length; ++i4) { - (0, import_fmin.scale)(params.history[i4].x, norm); - } - } - return circles; -} -function greedyLayout(areas, params) { - var loss = params && params.lossFunction ? params.lossFunction : lossFunction; - var circles = {}, setOverlaps = {}; - var set13; - for (var i4 = 0; i4 < areas.length; ++i4) { - var area2 = areas[i4]; - if (area2.sets.length == 1) { - set13 = area2.sets[0]; - circles[set13] = { - x: 1e10, - y: 1e10, - rowid: Object.keys(circles).length, - size: area2.size, - radius: Math.sqrt(area2.size / Math.PI) - }; - setOverlaps[set13] = []; - } - } - areas = areas.filter(function(a4) { - return a4.sets.length == 2; - }); - for (var i4 = 0; i4 < areas.length; ++i4) { - var current = areas[i4]; - var weight = current.hasOwnProperty("weight") ? current.weight : 1; - var left2 = current.sets[0], right2 = current.sets[1]; - if (current.size + SMALL2 >= Math.min(circles[left2].size, circles[right2].size)) { - weight = 0; - } - setOverlaps[left2].push({ set: right2, size: current.size, weight }); - setOverlaps[right2].push({ set: left2, size: current.size, weight }); - } - var mostOverlapped = []; - for (set13 in setOverlaps) { - if (setOverlaps.hasOwnProperty(set13)) { - var size14 = 0; - for (var i4 = 0; i4 < setOverlaps[set13].length; ++i4) { - size14 += setOverlaps[set13][i4].size * setOverlaps[set13][i4].weight; - } - mostOverlapped.push({ set: set13, size: size14 }); - } - } - function sortOrder(a4, b10) { - return b10.size - a4.size; - } - mostOverlapped.sort(sortOrder); - var positioned = {}; - function isPositioned(element) { - return element.set in positioned; - } - function positionSet(point2, index2) { - circles[index2].x = point2.x; - circles[index2].y = point2.y; - positioned[index2] = true; - } - positionSet({ x: 0, y: 0 }, mostOverlapped[0].set); - for (var i4 = 1; i4 < mostOverlapped.length; ++i4) { - var setIndex = mostOverlapped[i4].set, overlap2 = setOverlaps[setIndex].filter(isPositioned); - set13 = circles[setIndex]; - overlap2.sort(sortOrder); - if (overlap2.length === 0) { - throw "ERROR: missing pairwise overlap information"; - } - var points = []; - for (var j4 = 0; j4 < overlap2.length; ++j4) { - var p1 = circles[overlap2[j4].set], d1 = distanceFromIntersectArea(set13.radius, p1.radius, overlap2[j4].size); - points.push({ x: p1.x + d1, y: p1.y }); - points.push({ x: p1.x - d1, y: p1.y }); - points.push({ y: p1.y + d1, x: p1.x }); - points.push({ y: p1.y - d1, x: p1.x }); - for (var k4 = j4 + 1; k4 < overlap2.length; ++k4) { - var p22 = circles[overlap2[k4].set], d22 = distanceFromIntersectArea(set13.radius, p22.radius, overlap2[k4].size); - var extraPoints = circleCircleIntersection({ x: p1.x, y: p1.y, radius: d1 }, { x: p22.x, y: p22.y, radius: d22 }); - for (var l4 = 0; l4 < extraPoints.length; ++l4) { - points.push(extraPoints[l4]); - } - } - } - var bestLoss = 1e50, bestPoint = points[0]; - for (var j4 = 0; j4 < points.length; ++j4) { - circles[setIndex].x = points[j4].x; - circles[setIndex].y = points[j4].y; - var localLoss = loss(circles, areas); - if (localLoss < bestLoss) { - bestLoss = localLoss; - bestPoint = points[j4]; - } - } - positionSet(bestPoint, setIndex); - } - return circles; -} -function lossFunction(sets, overlaps) { - var output = 0; - function getCircles(indices) { - return indices.map(function(i5) { - return sets[i5]; - }); - } - for (var i4 = 0; i4 < overlaps.length; ++i4) { - var area2 = overlaps[i4]; - var overlap2 = void 0; - if (area2.sets.length == 1) { - continue; - } else if (area2.sets.length == 2) { - var left2 = sets[area2.sets[0]], right2 = sets[area2.sets[1]]; - overlap2 = circleOverlap(left2.radius, right2.radius, distance9(left2, right2)); - } else { - overlap2 = intersectionArea(getCircles(area2.sets)); - } - var weight = area2.hasOwnProperty("weight") ? area2.weight : 1; - output += weight * (overlap2 - area2.size) * (overlap2 - area2.size); - } - return output; -} -function getBoundingBox(circles) { - var minMax = function(d3) { - var hi = Math.max.apply(null, circles.map(function(c5) { - return c5[d3] + c5.radius; - })), lo = Math.min.apply(null, circles.map(function(c5) { - return c5[d3] - c5.radius; - })); - return { max: hi, min: lo }; - }; - return { xRange: minMax("x"), yRange: minMax("y") }; -} -function scaleSolution(solution, width2, height, padding3) { - var circles = [], setids = []; - for (var setid in solution) { - if (solution.hasOwnProperty(setid)) { - setids.push(setid); - circles.push(solution[setid]); - } - } - width2 -= 2 * padding3; - height -= 2 * padding3; - var bounds = getBoundingBox(circles), xRange = bounds.xRange, yRange = bounds.yRange; - if (xRange.max == xRange.min || yRange.max == yRange.min) { - console.log("not scaling solution: zero size detected"); - return solution; - } - var xScaling = width2 / (xRange.max - xRange.min), yScaling = height / (yRange.max - yRange.min), scaling = Math.min(yScaling, xScaling), xOffset = (width2 - (xRange.max - xRange.min) * scaling) / 2, yOffset = (height - (yRange.max - yRange.min) * scaling) / 2; - var scaled = {}; - for (var i4 = 0; i4 < circles.length; ++i4) { - var circle3 = circles[i4]; - scaled[setids[i4]] = { - radius: scaling * circle3.radius, - x: padding3 + xOffset + (circle3.x - xRange.min) * scaling, - y: padding3 + yOffset + (circle3.y - yRange.min) * scaling - }; - } - return scaled; -} - -// node_modules/@antv/g2plot/esm/plots/venn/layout/diagram.js -var import_fmin2 = __toModule(require_fmin()); -function circleMargin(current, interior, exterior) { - var margin = interior[0].radius - distance9(interior[0], current), i4, m4; - for (i4 = 1; i4 < interior.length; ++i4) { - m4 = interior[i4].radius - distance9(interior[i4], current); - if (m4 <= margin) { - margin = m4; - } - } - for (i4 = 0; i4 < exterior.length; ++i4) { - m4 = distance9(exterior[i4], current) - exterior[i4].radius; - if (m4 <= margin) { - margin = m4; - } - } - return margin; -} -function computeTextCentre(interior, exterior) { - var points = []; - var i4; - for (i4 = 0; i4 < interior.length; ++i4) { - var c5 = interior[i4]; - points.push({ x: c5.x, y: c5.y }); - points.push({ x: c5.x + c5.radius / 2, y: c5.y }); - points.push({ x: c5.x - c5.radius / 2, y: c5.y }); - points.push({ x: c5.x, y: c5.y + c5.radius / 2 }); - points.push({ x: c5.x, y: c5.y - c5.radius / 2 }); - } - var initial = points[0], margin = circleMargin(points[0], interior, exterior); - for (i4 = 1; i4 < points.length; ++i4) { - var m4 = circleMargin(points[i4], interior, exterior); - if (m4 >= margin) { - initial = points[i4]; - margin = m4; - } - } - var solution = (0, import_fmin2.nelderMead)(function(p4) { - return -1 * circleMargin({ x: p4[0], y: p4[1] }, interior, exterior); - }, [initial.x, initial.y], { maxIterations: 500, minErrorDelta: 1e-10 }).x; - var ret = { x: solution[0], y: solution[1] }; - var valid = true; - for (i4 = 0; i4 < interior.length; ++i4) { - if (distance9(ret, interior[i4]) > interior[i4].radius) { - valid = false; - break; - } - } - for (i4 = 0; i4 < exterior.length; ++i4) { - if (distance9(ret, exterior[i4]) < exterior[i4].radius) { - valid = false; - break; - } - } - if (!valid) { - if (interior.length == 1) { - ret = { x: interior[0].x, y: interior[0].y }; - } else { - var areaStats = {}; - intersectionArea(interior, areaStats); - if (areaStats.arcs.length === 0) { - ret = { x: 0, y: -1e3, disjoint: true }; - } else if (areaStats.arcs.length == 1) { - ret = { x: areaStats.arcs[0].circle.x, y: areaStats.arcs[0].circle.y }; - } else if (exterior.length) { - ret = computeTextCentre(interior, []); - } else { - ret = getCenter(areaStats.arcs.map(function(a4) { - return a4.p1; - })); - } - } - } - return ret; -} -function getOverlappingCircles(circles) { - var ret = {}, circleids = []; - for (var circleid in circles) { - circleids.push(circleid); - ret[circleid] = []; - } - for (var i4 = 0; i4 < circleids.length; i4++) { - var a4 = circles[circleids[i4]]; - for (var j4 = i4 + 1; j4 < circleids.length; ++j4) { - var b10 = circles[circleids[j4]], d3 = distance9(a4, b10); - if (d3 + b10.radius <= a4.radius + 1e-10) { - ret[circleids[j4]].push(circleids[i4]); - } else if (d3 + a4.radius <= b10.radius + 1e-10) { - ret[circleids[i4]].push(circleids[j4]); - } - } - } - return ret; -} -function computeTextCentres(circles, areas) { - var ret = {}, overlapped = getOverlappingCircles(circles); - for (var i4 = 0; i4 < areas.length; ++i4) { - var area2 = areas[i4].sets, areaids = {}, exclude = {}; - for (var j4 = 0; j4 < area2.length; ++j4) { - areaids[area2[j4]] = true; - var overlaps = overlapped[area2[j4]]; - for (var k4 = 0; k4 < overlaps.length; ++k4) { - exclude[overlaps[k4]] = true; - } - } - var interior = [], exterior = []; - for (var setid in circles) { - if (setid in areaids) { - interior.push(circles[setid]); - } else if (!(setid in exclude)) { - exterior.push(circles[setid]); - } - } - var centre = computeTextCentre(interior, exterior); - ret[area2] = centre; - if (centre.disjoint && areas[i4].size > 0) { - console.log("WARNING: area " + area2 + " not represented on screen"); - } - } - return ret; -} -function circlePath(x6, y5, r4) { - var ret = []; - var x0 = x6 - r4; - var y0 = y5; - ret.push("M", x0, y0); - ret.push("A", r4, r4, 0, 1, 0, x0 + 2 * r4, y0); - ret.push("A", r4, r4, 0, 1, 0, x0, y0); - return ret.join(" "); -} -function intersectionAreaPath(circles) { - var stats = {}; - intersectionArea(circles, stats); - var arcs = stats.arcs; - if (arcs.length === 0) { - return "M 0 0"; - } else if (arcs.length == 1) { - var circle3 = arcs[0].circle; - return circlePath(circle3.x, circle3.y, circle3.radius); - } else { - var ret = ["\nM", arcs[0].p2.x, arcs[0].p2.y]; - for (var i4 = 0; i4 < arcs.length; ++i4) { - var arc2 = arcs[i4], r4 = arc2.circle.radius, wide = arc2.width > r4; - ret.push("\nA", r4, r4, 0, wide ? 1 : 0, 1, arc2.p1.x, arc2.p1.y); - } - return ret.join(" "); - } -} - -// node_modules/@antv/g2plot/esm/plots/venn/constant.js -var ID_FIELD = "id"; -var PATH_FIELD = "path"; -var DEFAULT_OPTIONS19 = { - appendPadding: [10, 0, 20, 0], - blendMode: "multiply", - tooltip: { - showTitle: false, - showMarkers: false, - fields: ["id", "size"], - formatter: function(datum) { - return { name: datum.id, value: datum.size }; - } - }, - legend: { position: "top-left" }, - label: { - style: { - textAlign: "center", - fill: "#fff" - } - }, - interactions: [{ type: "legend-filter", enable: false }], - state: { - active: { - style: { - stroke: "#000" - } - }, - selected: { - style: { - stroke: "#000", - lineWidth: 2 - } - }, - inactive: { - style: { - fillOpacity: 0.3, - strokeOpacity: 0.3 - } - } - }, - defaultInteractions: ["tooltip", "venn-legend-active"] -}; - -// node_modules/@antv/g2plot/esm/plots/venn/utils.js -var getColorMap = (0, import_util375.memoize)(function(colorPalette, data3, blendMode, setsField) { - var colorMap2 = new Map(); - var colorPaletteLen = colorPalette.length; - data3.forEach(function(d3, idx) { - if (d3[setsField].length === 1) { - colorMap2.set(d3[ID_FIELD], colorPalette[(idx + colorPaletteLen) % colorPaletteLen]); - } else { - var colorArr = d3[setsField].map(function(id) { - return colorMap2.get(id); - }); - colorMap2.set(d3[ID_FIELD], colorArr.slice(1).reduce(function(a4, b10) { - return blend(a4, b10, blendMode); - }, colorArr[0])); - } - }); - return colorMap2; -}, function() { - var params = []; - for (var _i = 0; _i < arguments.length; _i++) { - params[_i] = arguments[_i]; - } - return JSON.stringify(params); -}); -function layoutVennData(options, width2, height, padding3) { - if (padding3 === void 0) { - padding3 = 0; - } - var data3 = options.data, setsField = options.setsField, sizeField = options.sizeField; - if (data3.length === 0) { - log2(LEVEL.WARN, false, "warn: %s", "\u6570\u636E\u4E0D\u80FD\u4E3A\u7A7A"); - return []; - } - var vennData = data3.map(function(d3) { - var _a6; - return __assign(__assign({}, d3), (_a6 = { sets: d3[setsField] || [], size: d3[sizeField] }, _a6[PATH_FIELD] = "", _a6[ID_FIELD] = "", _a6)); - }); - vennData.sort(function(a4, b10) { - return a4.sets.length - b10.sets.length; - }); - var solution = venn(vennData); - var circles = scaleSolution(solution, width2, height, padding3); - var textCenters = computeTextCentres(circles, vennData); - vennData.forEach(function(row) { - var sets = row.sets; - var id = sets.join(","); - row[ID_FIELD] = id; - var setCircles = sets.map(function(set13) { - return circles[set13]; - }); - var path = intersectionAreaPath(setCircles); - if (!/[zZ]$/.test(path)) { - path += " Z"; - } - row[PATH_FIELD] = path; - var center2 = textCenters[id] || { x: 0, y: 0 }; - (0, import_util375.assign)(row, center2); - }); - return vennData; -} -function islegalSets(legalArr, testArr) { - for (var i4 = 0; i4 < testArr.length; i4++) { - if (!legalArr.includes(testArr[i4])) { - return false; - } - } - return true; -} - -// node_modules/@antv/g2plot/esm/plots/venn/shape.js -function getFillAttrs(cfg) { - return deepAssign({}, cfg.defaultStyle, { fill: cfg.color }, cfg.style); -} -registerShape("schema", "venn", { - draw: function(cfg, container2) { - var data3 = cfg.data; - var segments = parsePathString2(data3[PATH_FIELD]); - var fillAttrs = getFillAttrs(cfg); - var group3 = container2.addGroup({ name: "venn-shape" }); - group3.addShape("path", { - attrs: __assign(__assign({}, fillAttrs), { path: segments }), - name: "venn-path" - }); - var _a6 = cfg.customInfo, offsetX = _a6.offsetX, offsetY = _a6.offsetY; - var matrix = Util.transform(null, [["t", offsetX, offsetY]]); - group3.setMatrix(matrix); - return group3; - }, - getMarker: function(markerCfg) { - var color4 = markerCfg.color; - return { - symbol: "circle", - style: { - lineWidth: 0, - stroke: color4, - fill: color4, - r: 4 - } - }; - } -}); - -// node_modules/@antv/g2plot/esm/plots/venn/label.js -var VennLabel = function(_super) { - __extends(VennLabel2, _super); - function VennLabel2() { - return _super !== null && _super.apply(this, arguments) || this; - } - VennLabel2.prototype.getLabelPoint = function(labelCfg, mappingData, index2) { - var _a6 = labelCfg.data, x6 = _a6.x, y5 = _a6.y; - var _b = labelCfg.customLabelInfo, offsetX = _b.offsetX, offsetY = _b.offsetY; - return { - content: labelCfg.content[index2], - x: x6 + offsetX, - y: y5 + offsetY - }; - }; - return VennLabel2; -}(base_default14); -registerGeometryLabel("venn", VennLabel); - -// node_modules/@antv/g2plot/esm/plots/venn/interactions/util.js -function placeElementsOrdered(view) { - if (!view) { - return; - } - var elements = view.geometries[0].elements; - elements.forEach(function(elem) { - elem.shape.toFront(); - }); -} - -// node_modules/@antv/g2plot/esm/plots/venn/interactions/actions/active.js -var ElementActiveAction = getActionClass("element-active"); -var VennElementActive = function(_super) { - __extends(VennElementActive2, _super); - function VennElementActive2() { - return _super !== null && _super.apply(this, arguments) || this; - } - VennElementActive2.prototype.syncElementsPos = function() { - placeElementsOrdered(this.context.view); - }; - VennElementActive2.prototype.active = function() { - _super.prototype.active.call(this); - this.syncElementsPos(); - }; - VennElementActive2.prototype.toggle = function() { - _super.prototype.toggle.call(this); - this.syncElementsPos(); - }; - VennElementActive2.prototype.reset = function() { - _super.prototype.reset.call(this); - this.syncElementsPos(); - }; - return VennElementActive2; -}(ElementActiveAction); - -// node_modules/@antv/g2plot/esm/plots/venn/interactions/actions/highlight.js -var ElementHighlightAction = getActionClass("element-highlight"); -var VennElementHighlight = function(_super) { - __extends(VennElementHighlight2, _super); - function VennElementHighlight2() { - return _super !== null && _super.apply(this, arguments) || this; - } - VennElementHighlight2.prototype.syncElementsPos = function() { - placeElementsOrdered(this.context.view); - }; - VennElementHighlight2.prototype.highlight = function() { - _super.prototype.highlight.call(this); - this.syncElementsPos(); - }; - VennElementHighlight2.prototype.toggle = function() { - _super.prototype.toggle.call(this); - this.syncElementsPos(); - }; - VennElementHighlight2.prototype.clear = function() { - _super.prototype.clear.call(this); - this.syncElementsPos(); - }; - VennElementHighlight2.prototype.reset = function() { - _super.prototype.reset.call(this); - this.syncElementsPos(); - }; - return VennElementHighlight2; -}(ElementHighlightAction); - -// node_modules/@antv/g2plot/esm/plots/venn/interactions/actions/selected.js -var ElementSelectedAction = getActionClass("element-selected"); -var ElementSingleSelectedAction = getActionClass("element-single-selected"); -var VennElementSelected = function(_super) { - __extends(VennElementSelected2, _super); - function VennElementSelected2() { - return _super !== null && _super.apply(this, arguments) || this; - } - VennElementSelected2.prototype.syncElementsPos = function() { - placeElementsOrdered(this.context.view); - }; - VennElementSelected2.prototype.selected = function() { - _super.prototype.selected.call(this); - this.syncElementsPos(); - }; - VennElementSelected2.prototype.toggle = function() { - _super.prototype.toggle.call(this); - this.syncElementsPos(); - }; - VennElementSelected2.prototype.reset = function() { - _super.prototype.reset.call(this); - this.syncElementsPos(); - }; - return VennElementSelected2; -}(ElementSelectedAction); -var VennElementSingleSelected = function(_super) { - __extends(VennElementSingleSelected2, _super); - function VennElementSingleSelected2() { - return _super !== null && _super.apply(this, arguments) || this; - } - VennElementSingleSelected2.prototype.syncElementsPos = function() { - placeElementsOrdered(this.context.view); - }; - VennElementSingleSelected2.prototype.selected = function() { - _super.prototype.selected.call(this); - this.syncElementsPos(); - }; - VennElementSingleSelected2.prototype.toggle = function() { - _super.prototype.toggle.call(this); - this.syncElementsPos(); - }; - VennElementSingleSelected2.prototype.reset = function() { - _super.prototype.reset.call(this); - this.syncElementsPos(); - }; - return VennElementSingleSelected2; -}(ElementSingleSelectedAction); - -// node_modules/@antv/g2plot/esm/plots/venn/interactions/index.js -registerAction("venn-element-active", VennElementActive); -registerAction("venn-element-highlight", VennElementHighlight); -registerAction("venn-element-selected", VennElementSelected); -registerAction("venn-element-single-selected", VennElementSingleSelected); -registerInteraction("venn-element-active", { - start: [{ trigger: "element:mouseenter", action: "venn-element-active:active" }], - end: [{ trigger: "element:mouseleave", action: "venn-element-active:reset" }] -}); -registerInteraction("venn-element-highlight", { - start: [{ trigger: "element:mouseenter", action: "venn-element-highlight:highlight" }], - end: [{ trigger: "element:mouseleave", action: "venn-element-highlight:reset" }] -}); -registerInteraction("venn-element-selected", { - start: [{ trigger: "element:click", action: "venn-element-selected:toggle" }], - rollback: [{ trigger: "dblclick", action: ["venn-element-selected:reset"] }] -}); -registerInteraction("venn-element-single-selected", { - start: [{ trigger: "element:click", action: "venn-element-single-selected:toggle" }], - rollback: [{ trigger: "dblclick", action: ["venn-element-single-selected:reset"] }] -}); -registerInteraction("venn-legend-active", { - start: [{ trigger: "legend-item:mouseenter", action: ["list-active:active", "venn-element-active:active"] }], - end: [{ trigger: "legend-item:mouseleave", action: ["list-active:reset", "venn-element-active:reset"] }] -}); -registerInteraction("venn-legend-highlight", { - start: [ - { - trigger: "legend-item:mouseenter", - action: ["legend-item-highlight:highlight", "venn-element-highlight:highlight"] - } - ], - end: [{ trigger: "legend-item:mouseleave", action: ["legend-item-highlight:reset", "venn-element-highlight:reset"] }] -}); - -// node_modules/@antv/g2plot/esm/plots/venn/adaptor.js -var LEGEND_SPACE = 40; -function colorMap(params, data3, colorPalette) { - var chart = params.chart, options = params.options; - var blendMode = options.blendMode, setsField = options.setsField; - var _a6 = chart.getTheme(), colors10 = _a6.colors10, colors20 = _a6.colors20; - var palette = colorPalette; - if (!(0, import_util379.isArray)(palette)) { - palette = data3.filter(function(d3) { - return d3[setsField].length === 1; - }).length <= 10 ? colors10 : colors20; - } - var map23 = getColorMap(palette, data3, blendMode, setsField); - return function(id) { - return map23.get(id) || palette[0]; - }; -} -function transformColor(params, data3) { - var options = params.options; - var color4 = options.color; - if (typeof color4 !== "function") { - var colorPalette = typeof color4 === "string" ? [color4] : color4; - var map_1 = colorMap(params, data3, colorPalette); - return function(datum) { - return map_1(datum[ID_FIELD]); - }; - } - return color4; -} -function padding(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend, appendPadding = options.appendPadding, padding3 = options.padding; - var tempPadding = normalPadding(appendPadding); - if (legend18 !== false) { - tempPadding = getAdjustAppendPadding(appendPadding, (0, import_util379.get)(legend18, "position"), LEGEND_SPACE); - } - chart.appendPadding = resolveAllPadding([tempPadding, padding3]); - return params; -} -function data2(params) { - var options = params.options; - var data3 = options["data"]; - if (!data3) { - log2(LEVEL.WARN, false, "warn: %s", "\u6570\u636E\u4E0D\u80FD\u4E3A\u7A7A"); - data3 = []; - } - var currSets = data3.filter(function(datum) { - return datum.sets.length === 1; - }).map(function(datum) { - return datum.sets[0]; - }); - var filterSets = data3.filter(function(datum) { - var sets = datum.sets; - return islegalSets(currSets, sets); - }); - if (!(0, import_util379.isEqual)(filterSets, data3)) - log2(LEVEL.WARN, false, "warn: %s", "\u4EA4\u96C6\u4E2D\u4E0D\u80FD\u51FA\u73B0\u4E0D\u5B58\u5728\u7684\u96C6\u5408, \u8BF7\u8F93\u5165\u5408\u6CD5\u6570\u636E"); - return (0, import_util379.deepMix)({}, params, { - options: { - data: filterSets - } - }); -} -function geometry18(params) { - var chart = params.chart, options = params.options; - var pointStyle = options.pointStyle, setsField = options.setsField, sizeField = options.sizeField; - var _a6 = normalPadding(chart.appendPadding), t4 = _a6[0], r4 = _a6[1], b10 = _a6[2], l4 = _a6[3]; - var customInfo = { offsetX: l4, offsetY: t4 }; - var _b = chart.viewBBox, width2 = _b.width, height = _b.height; - var vennData = layoutVennData(options, Math.max(width2 - (r4 + l4), 0), Math.max(height - (t4 + b10), 0), 0); - chart.data(vennData); - var ext = schema2(deepAssign({}, params, { - options: { - xField: "x", - yField: "y", - sizeField, - seriesField: ID_FIELD, - rawFields: [setsField, sizeField], - schema: { - shape: "venn", - style: pointStyle - } - } - })).ext; - var geometry35 = ext.geometry; - geometry35.customInfo(customInfo); - var colorOptions = transformColor(params, vennData); - if (typeof colorOptions === "function") { - geometry35.color(ID_FIELD, function(id) { - var datum = vennData.find(function(d3) { - return d3[ID_FIELD] === id; - }); - var defaultColor = colorMap(params, vennData)(id); - return colorOptions(datum, defaultColor); - }); - } - return params; -} -function label11(params) { - var chart = params.chart, options = params.options; - var label17 = options.label; - var _a6 = normalPadding(chart.appendPadding), t4 = _a6[0], l4 = _a6[3]; - var customLabelInfo = { offsetX: l4, offsetY: t4 }; - var geometry35 = findGeometry(chart, "schema"); - if (!label17) { - geometry35.label(false); - } else { - var callback = label17.callback, cfg = __rest(label17, ["callback"]); - geometry35.label({ - fields: ["id"], - callback, - cfg: (0, import_util379.deepMix)({}, transformLabel(cfg), { - type: "venn", - customLabelInfo - }) - }); - } - return params; -} -function legend12(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend, sizeField = options.sizeField; - chart.legend(ID_FIELD, legend18); - chart.legend(sizeField, false); - return params; -} -function axis11(params) { - var chart = params.chart; - chart.axis(false); - return params; -} -function vennInteraction(params) { - var options = params.options, chart = params.chart; - var interactions = options.interactions; - if (interactions) { - var MAP_1 = { - "legend-active": "venn-legend-active", - "legend-highlight": "venn-legend-highlight" - }; - interaction(deepAssign({}, params, { - options: { - interactions: interactions.map(function(i4) { - return __assign(__assign({}, i4), { type: MAP_1[i4.type] || i4.type }); - }) - } - })); - } - chart.removeInteraction("legend-active"); - chart.removeInteraction("legend-highlight"); - return params; -} -function adaptor20(params) { - return flow(padding, theme, data2, geometry18, label11, scale7({}), legend12, axis11, tooltip, vennInteraction, animation)(params); -} - -// node_modules/@antv/g2plot/esm/plots/venn/index.js -var Venn = function(_super) { - __extends(Venn2, _super); - function Venn2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "venn"; - return _this; - } - Venn2.getDefaultOptions = function() { - return DEFAULT_OPTIONS19; - }; - Venn2.prototype.getDefaultOptions = function() { - return Venn2.getDefaultOptions(); - }; - Venn2.prototype.getSchemaAdaptor = function() { - return adaptor20; - }; - Venn2.prototype.triggerResize = function() { - if (!this.chart.destroyed) { - this.chart.forceFit(); - this.chart.clear(); - this.execAdaptor(); - this.chart.render(true); - } - }; - return Venn2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/stock/constant.js -var Y_FIELD2 = "$$stock-range$$"; -var TREND_FIELD = "trend"; -var TREND_UP = "up"; -var TREND_DOWN = "down"; -var DEFAULT_TOOLTIP_OPTIONS3 = { - showMarkers: false, - showCrosshairs: true, - shared: true, - crosshairs: { - type: "xy", - follow: true, - text: function(type2, defaultContent, items) { - var textContent; - if (type2 === "x") { - var item = items[0]; - textContent = item ? item.title : defaultContent; - } else { - textContent = defaultContent; - } - return { - position: type2 === "y" ? "start" : "end", - content: textContent, - style: { - fill: "#dfdfdf" - } - }; - }, - textBackground: { - padding: [2, 4], - style: { - fill: "#666" - } - } - } -}; -var DEFAULT_OPTIONS20 = deepAssign({}, Plot.getDefaultOptions(), { - tooltip: DEFAULT_TOOLTIP_OPTIONS3, - interactions: [{ type: "tooltip" }], - legend: { - position: "top-left" - }, - risingFill: "#ef5350", - fallingFill: "#26a69a" -}); - -// node_modules/@antv/g2plot/esm/plots/stock/utils.js -var import_util380 = __toModule(require_lib()); -function getStockData(data3, yField) { - return (0, import_util380.map)(data3, function(obj) { - if ((0, import_util380.isArray)(yField)) { - var open_1 = yField[0], close_1 = yField[1], high = yField[2], low = yField[3]; - obj[TREND_FIELD] = obj[open_1] <= obj[close_1] ? TREND_UP : TREND_DOWN; - obj[Y_FIELD2] = [obj[open_1], obj[close_1], obj[high], obj[low]]; - } - return obj; - }); -} - -// node_modules/@antv/g2plot/esm/plots/stock/adaptor.js -function geometry19(params) { - var chart = params.chart, options = params.options; - var yField = options.yField; - var data3 = options.data, risingFill = options.risingFill, fallingFill = options.fallingFill, tooltip10 = options.tooltip, stockStyle = options.stockStyle; - chart.data(getStockData(data3, yField)); - var tooltipOptions = tooltip10; - if (tooltipOptions !== false) { - tooltipOptions = deepAssign({}, { fields: yField }, tooltipOptions); - } - schema2(deepAssign({}, params, { - options: { - schema: { - shape: "candle", - color: [risingFill, fallingFill], - style: stockStyle - }, - yField: Y_FIELD2, - seriesField: TREND_FIELD, - rawFields: yField, - tooltip: tooltipOptions - } - })); - return params; -} -function meta14(params) { - var _a6, _b; - var chart = params.chart, options = params.options; - var meta23 = options.meta, xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField; - var baseMeta = (_a6 = {}, _a6[xField] = { - type: "timeCat", - tickCount: 6 - }, _a6[TREND_FIELD] = { - values: [TREND_UP, TREND_DOWN] - }, _a6); - var scales = deepAssign(baseMeta, meta23, (_b = {}, _b[xField] = pick4(xAxis, AXIS_META_CONFIG_KEYS), _b[Y_FIELD2] = pick4(yAxis, AXIS_META_CONFIG_KEYS), _b)); - chart.scale(scales); - return params; -} -function axis12(params) { - var chart = params.chart, options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField; - if (xAxis === false) { - chart.axis(xField, false); - } else { - chart.axis(xField, xAxis); - } - if (yAxis === false) { - chart.axis(Y_FIELD2, false); - } else { - chart.axis(Y_FIELD2, yAxis); - } - return params; -} -function tooltip5(params) { - var chart = params.chart, options = params.options; - var tooltip10 = options.tooltip; - if (tooltip10 !== false) { - chart.tooltip(tooltip10); - } else { - chart.tooltip(false); - } - return params; -} -function legend13(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend; - if (legend18) { - chart.legend(TREND_FIELD, legend18); - } else if (legend18 === false) { - chart.legend(false); - } - return params; -} -function adaptor21(params) { - flow(theme, geometry19, meta14, axis12, tooltip5, legend13, interaction, animation, annotation(), slider)(params); -} - -// node_modules/@antv/g2plot/esm/plots/stock/index.js -var Stock = function(_super) { - __extends(Stock2, _super); - function Stock2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "stock"; - return _this; - } - Stock2.getDefaultOptions = function() { - return DEFAULT_OPTIONS20; - }; - Stock2.prototype.getDefaultOptions = function() { - return Stock2.getDefaultOptions(); - }; - Stock2.prototype.getSchemaAdaptor = function() { - return adaptor21; - }; - Stock2.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - var yField = this.options.yField; - this.chart.changeData(getStockData(data3, yField)); - }; - return Stock2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/funnel/index.js -var import_util386 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/funnel/adaptor.js -var import_util385 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/funnel/geometries/basic.js -var import_util382 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/funnel/constant.js -var _a4; -var FUNNEL_PERCENT = "$$percentage$$"; -var FUNNEL_MAPPING_VALUE = "$$mappingValue$$"; -var FUNNEL_CONVERSATION = "$$conversion$$"; -var FUNNEL_TOTAL_PERCENT = "$$totalPercentage$$"; -var PLOYGON_X = "$$x$$"; -var PLOYGON_Y = "$$y$$"; -var DEFAULT_OPTIONS21 = { - appendPadding: [0, 80], - minSize: 0, - maxSize: 1, - meta: (_a4 = {}, _a4[FUNNEL_MAPPING_VALUE] = { - min: 0, - max: 1, - nice: false - }, _a4), - label: { - style: { - fill: "#fff", - fontSize: 12 - } - }, - tooltip: { - showTitle: false, - showMarkers: false, - shared: false - }, - conversionTag: { - offsetX: 10, - offsetY: 0, - style: { - fontSize: 12, - fill: "rgba(0,0,0,0.45)" - } - } -}; - -// node_modules/@antv/g2plot/esm/plots/funnel/geometries/common.js -var import_util381 = __toModule(require_lib()); -function transformData2(data3, originData, options) { - var formatData = []; - var yField = options.yField, maxSize = options.maxSize, minSize = options.minSize; - var maxYFieldValue = (0, import_util381.get)((0, import_util381.maxBy)(originData, yField), [yField]); - var max15 = (0, import_util381.isNumber)(maxSize) ? maxSize : 1; - var min13 = (0, import_util381.isNumber)(minSize) ? minSize : 0; - formatData = (0, import_util381.map)(data3, function(row, index2) { - var percent2 = (row[yField] || 0) / maxYFieldValue; - row[FUNNEL_PERCENT] = percent2; - row[FUNNEL_MAPPING_VALUE] = (max15 - min13) * percent2 + min13; - row[FUNNEL_CONVERSATION] = [(0, import_util381.get)(data3, [index2 - 1, yField]), row[yField]]; - return row; - }); - return formatData; -} -function conversionTagComponent(getLineCoordinate) { - return function(params) { - var chart = params.chart, options = params.options; - var conversionTag5 = options.conversionTag; - var data3 = chart.getOptions().data; - if (conversionTag5) { - var formatter_1 = conversionTag5.formatter; - data3.forEach(function(obj, index2) { - if (index2 <= 0 || Number.isNaN(obj[FUNNEL_MAPPING_VALUE])) - return; - var lineOption = getLineCoordinate(obj, index2, data3, { - top: true, - text: { - content: (0, import_util381.isFunction)(formatter_1) ? formatter_1(obj, data3) : formatter_1, - offsetX: conversionTag5.offsetX, - offsetY: conversionTag5.offsetY, - position: "end", - autoRotate: false, - style: __assign({ textAlign: "start", textBaseline: "middle" }, conversionTag5.style) - } - }); - chart.annotation().line(lineOption); - }); - } - return params; - }; -} - -// node_modules/@antv/g2plot/esm/plots/funnel/geometries/basic.js -function field2(params) { - var chart = params.chart, options = params.options; - var _a6 = options.data, data3 = _a6 === void 0 ? [] : _a6, yField = options.yField, maxSize = options.maxSize, minSize = options.minSize; - var formatData = transformData2(data3, data3, { - yField, - maxSize, - minSize - }); - chart.data(formatData); - return params; -} -function geometry20(params) { - var chart = params.chart, options = params.options; - var xField = options.xField, yField = options.yField, color4 = options.color, tooltip10 = options.tooltip, label17 = options.label, _a6 = options.shape, shape = _a6 === void 0 ? "funnel" : _a6, funnelStyle = options.funnelStyle, state2 = options.state; - var _b = getTooltipMapping(tooltip10, [xField, yField]), fields = _b.fields, formatter = _b.formatter; - geometry({ - chart, - options: { - type: "interval", - xField, - yField: FUNNEL_MAPPING_VALUE, - colorField: xField, - tooltipFields: (0, import_util382.isArray)(fields) && fields.concat([FUNNEL_PERCENT, FUNNEL_CONVERSATION]), - mapping: { - shape, - tooltip: formatter, - color: color4, - style: funnelStyle - }, - label: label17, - state: state2 - } - }); - var geo = findGeometry(params.chart, "interval"); - geo.adjust("symmetric"); - return params; -} -function transpose3(params) { - var chart = params.chart, options = params.options; - var isTransposed = options.isTransposed; - chart.coordinate({ - type: "rect", - actions: !isTransposed ? [["transpose"], ["scale", 1, -1]] : [] - }); - return params; -} -function conversionTag2(params) { - var options = params.options; - var maxSize = options.maxSize; - var getLineCoordinate = function(datum, datumIndex, data3, initLineOption) { - var percent2 = maxSize - (maxSize - datum[FUNNEL_MAPPING_VALUE]) / 2; - return __assign(__assign({}, initLineOption), { start: [datumIndex - 0.5, percent2], end: [datumIndex - 0.5, percent2 + 0.05] }); - }; - conversionTagComponent(getLineCoordinate)(params); - return params; -} -function basicFunnel(params) { - return flow(field2, geometry20, transpose3, conversionTag2)(params); -} - -// node_modules/@antv/g2plot/esm/plots/funnel/geometries/compare.js -var import_util383 = __toModule(require_lib()); -function field3(params) { - var _a6; - var chart = params.chart, options = params.options; - var _b = options.data, data3 = _b === void 0 ? [] : _b, yField = options.yField; - chart.data(data3); - chart.scale((_a6 = {}, _a6[yField] = { - sync: true - }, _a6)); - return params; -} -function geometry21(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, xField = options.xField, yField = options.yField, color4 = options.color, compareField = options.compareField, isTransposed = options.isTransposed, tooltip10 = options.tooltip, maxSize = options.maxSize, minSize = options.minSize, label17 = options.label, funnelStyle = options.funnelStyle, state2 = options.state; - chart.facet("mirror", { - fields: [compareField], - transpose: !isTransposed, - padding: isTransposed ? 0 : [32, 0, 0, 0], - eachView: function(view, facet) { - var index2 = isTransposed ? facet.rowIndex : facet.columnIndex; - if (!isTransposed) { - view.coordinate({ - type: "rect", - actions: [["transpose"], ["scale", index2 === 0 ? -1 : 1, -1]] - }); - } - var formatterData = transformData2(facet.data, data3, { - yField, - maxSize, - minSize - }); - view.data(formatterData); - var _a6 = getTooltipMapping(tooltip10, [xField, yField, compareField]), fields = _a6.fields, formatter = _a6.formatter; - var defaultFacetLabel = isTransposed ? { - offset: index2 === 0 ? 10 : -23, - position: index2 === 0 ? "bottom" : "top" - } : { - offset: 10, - position: "left", - style: { - textAlign: index2 === 0 ? "end" : "start" - } - }; - geometry({ - chart: view, - options: { - type: "interval", - xField, - yField: FUNNEL_MAPPING_VALUE, - colorField: xField, - tooltipFields: (0, import_util383.isArray)(fields) && fields.concat([FUNNEL_PERCENT, FUNNEL_CONVERSATION]), - mapping: { - shape: "funnel", - tooltip: formatter, - color: color4, - style: funnelStyle - }, - label: label17 === false ? false : deepAssign({}, defaultFacetLabel, label17), - state: state2 - } - }); - } - }); - return params; -} -function conversionTag3(params) { - var chart = params.chart, options = params.options; - var conversionTag5 = options.conversionTag, isTransposed = options.isTransposed; - chart.once("beforepaint", function() { - chart.views.forEach(function(view, viewIndex) { - var getLineCoordinate = function(datum, datumIndex, data3, initLineOption) { - var ratio = viewIndex === 0 ? -1 : 1; - return deepAssign({}, initLineOption, { - start: [datumIndex - 0.5, datum[FUNNEL_MAPPING_VALUE]], - end: [datumIndex - 0.5, datum[FUNNEL_MAPPING_VALUE] + 0.05], - text: isTransposed ? { - style: { - textAlign: "start" - } - } : { - offsetX: conversionTag5 !== false ? ratio * conversionTag5.offsetX : 0, - style: { - textAlign: viewIndex === 0 ? "end" : "start" - } - } - }); - }; - conversionTagComponent(getLineCoordinate)(deepAssign({}, { - chart: view, - options - })); - }); - }); - return params; -} -function compareFunnel(params) { - return flow(field3, geometry21, conversionTag3)(params); -} - -// node_modules/@antv/g2plot/esm/plots/funnel/geometries/facet.js -function field4(params) { - var _a6; - var chart = params.chart, options = params.options; - var _b = options.data, data3 = _b === void 0 ? [] : _b, yField = options.yField; - chart.data(data3); - chart.scale((_a6 = {}, _a6[yField] = { - sync: true - }, _a6)); - return params; -} -function geometry22(params) { - var chart = params.chart, options = params.options; - var seriesField = options.seriesField, isTransposed = options.isTransposed; - chart.facet("rect", { - fields: [seriesField], - padding: [isTransposed ? 0 : 32, 10, 0, 10], - eachView: function(view, facet) { - basicFunnel(deepAssign({}, params, { - chart: view, - options: { - data: facet.data - } - })); - } - }); - return params; -} -function facetFunnel(params) { - return flow(field4, geometry22)(params); -} - -// node_modules/@antv/g2plot/esm/plots/funnel/geometries/dynamic-height.js -var import_util384 = __toModule(require_lib()); -function field5(params) { - var chart = params.chart, options = params.options; - var _a6 = options.data, data3 = _a6 === void 0 ? [] : _a6, yField = options.yField; - var sum = (0, import_util384.reduce)(data3, function(total, item) { - return total + (item[yField] || 0); - }, 0); - var max15 = (0, import_util384.maxBy)(data3, yField)[yField]; - var formatData = (0, import_util384.map)(data3, function(row, index2) { - var x6 = []; - var y5 = []; - row[FUNNEL_TOTAL_PERCENT] = (row[yField] || 0) / sum; - if (index2) { - var preItemX = data3[index2 - 1][PLOYGON_X]; - var preItemY = data3[index2 - 1][PLOYGON_Y]; - x6[0] = preItemX[3]; - y5[0] = preItemY[3]; - x6[1] = preItemX[2]; - y5[1] = preItemY[2]; - } else { - x6[0] = -0.5; - y5[0] = 1; - x6[1] = 0.5; - y5[1] = 1; - } - y5[2] = y5[1] - row[FUNNEL_TOTAL_PERCENT]; - x6[2] = (y5[2] + 1) / 4; - y5[3] = y5[2]; - x6[3] = -x6[2]; - row[PLOYGON_X] = x6; - row[PLOYGON_Y] = y5; - row[FUNNEL_PERCENT] = (row[yField] || 0) / max15; - row[FUNNEL_CONVERSATION] = [(0, import_util384.get)(data3, [index2 - 1, yField]), row[yField]]; - return row; - }); - chart.data(formatData); - return params; -} -function geometry23(params) { - var chart = params.chart, options = params.options; - var xField = options.xField, yField = options.yField, color4 = options.color, tooltip10 = options.tooltip, label17 = options.label, funnelStyle = options.funnelStyle, state2 = options.state; - var _a6 = getTooltipMapping(tooltip10, [xField, yField]), fields = _a6.fields, formatter = _a6.formatter; - geometry({ - chart, - options: { - type: "polygon", - xField: PLOYGON_X, - yField: PLOYGON_Y, - colorField: xField, - tooltipFields: (0, import_util384.isArray)(fields) && fields.concat([FUNNEL_PERCENT, FUNNEL_CONVERSATION]), - label: label17, - state: state2, - mapping: { - tooltip: formatter, - color: color4, - style: funnelStyle - } - } - }); - return params; -} -function transpose4(params) { - var chart = params.chart, options = params.options; - var isTransposed = options.isTransposed; - chart.coordinate({ - type: "rect", - actions: isTransposed ? [["transpose"], ["reflect", "x"]] : [] - }); - return params; -} -function conversionTag4(params) { - var getLineCoordinate = function(datum, datumIndex, data3, initLineOption) { - return __assign(__assign({}, initLineOption), { start: [datum[PLOYGON_X][1], datum[PLOYGON_Y][1]], end: [datum[PLOYGON_X][1] + 0.05, datum[PLOYGON_Y][1]] }); - }; - conversionTagComponent(getLineCoordinate)(params); - return params; -} -function dynamicHeightFunnel(params) { - return flow(field5, geometry23, transpose4, conversionTag4)(params); -} - -// node_modules/@antv/g2plot/esm/plots/funnel/adaptor.js -function defaultOptions3(params) { - var options = params.options; - var compareField = options.compareField, xField = options.xField, yField = options.yField, locale = options.locale, funnelStyle = options.funnelStyle, data3 = options.data; - var i18n = getLocale(locale); - var defaultOption = { - label: compareField ? { - fields: [xField, yField, compareField, FUNNEL_PERCENT, FUNNEL_CONVERSATION], - formatter: function(datum) { - return "" + datum[yField]; - } - } : { - fields: [xField, yField, FUNNEL_PERCENT, FUNNEL_CONVERSATION], - offset: 0, - position: "middle", - formatter: function(datum) { - return datum[xField] + " " + datum[yField]; - } - }, - tooltip: { - title: xField, - formatter: function(datum) { - return { name: datum[xField], value: datum[yField] }; - } - }, - conversionTag: { - formatter: function(datum) { - return i18n.get(["conversionTag", "label"]) + ": " + conversionTagFormatter.apply(void 0, datum[FUNNEL_CONVERSATION]); - } - } - }; - var style; - if (compareField || funnelStyle) { - style = function(datum) { - return deepAssign({}, compareField && { lineWidth: 1, stroke: "#fff" }, (0, import_util385.isFunction)(funnelStyle) ? funnelStyle(datum) : funnelStyle); - }; - } - return deepAssign({ options: defaultOption }, params, { options: { funnelStyle: style, data: (0, import_util385.clone)(data3) } }); -} -function geometry24(params) { - var options = params.options; - var compareField = options.compareField, dynamicHeight = options.dynamicHeight, seriesField = options.seriesField; - if (seriesField) { - return facetFunnel(params); - } - if (compareField) { - return compareFunnel(params); - } - if (dynamicHeight) { - return dynamicHeightFunnel(params); - } - return basicFunnel(params); -} -function meta15(params) { - var _a6; - var options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - return flow(scale7((_a6 = {}, _a6[xField] = xAxis, _a6[yField] = yAxis, _a6)))(params); -} -function axis13(params) { - var chart = params.chart; - chart.axis(false); - return params; -} -function legend14(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend; - if (legend18 === false) { - chart.legend(false); - } else { - chart.legend(legend18); - } - return params; -} -function adaptor22(params) { - return flow(defaultOptions3, geometry24, meta15, axis13, tooltip, interaction, legend14, animation, theme, annotation())(params); -} - -// node_modules/@antv/g2plot/esm/plots/funnel/index.js -var Funnel = function(_super) { - __extends(Funnel2, _super); - function Funnel2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "funnel"; - return _this; - } - Funnel2.getDefaultOptions = function() { - return DEFAULT_OPTIONS21; - }; - Funnel2.prototype.getDefaultOptions = function() { - return Funnel2.getDefaultOptions(); - }; - Funnel2.prototype.getSchemaAdaptor = function() { - return adaptor22; - }; - Funnel2.prototype.setState = function(type2, condition, status) { - if (status === void 0) { - status = true; - } - var elements = getAllElementsRecursively(this.chart); - (0, import_util386.each)(elements, function(ele) { - if (condition(ele.getData())) { - ele.setState(type2, status); - } - }); - }; - Funnel2.prototype.getStates = function() { - var elements = getAllElementsRecursively(this.chart); - var stateObjects = []; - (0, import_util386.each)(elements, function(element) { - var data3 = element.getData(); - var states = element.getStates(); - (0, import_util386.each)(states, function(state2) { - stateObjects.push({ data: data3, state: state2, geometry: element.geometry, element }); - }); - }); - return stateObjects; - }; - Funnel2.CONVERSATION_FIELD = FUNNEL_CONVERSATION; - Funnel2.PERCENT_FIELD = FUNNEL_PERCENT; - Funnel2.TOTAL_PERCENT_FIELD = FUNNEL_TOTAL_PERCENT; - return Funnel2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/liquid/adaptor.js -var import_util387 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/liquid/utils.js -var CAT_VALUE = "liquid"; -function getLiquidData(percent2) { - return [{ percent: percent2, type: CAT_VALUE }]; -} - -// node_modules/@antv/g2plot/esm/plots/liquid/adaptor.js -function geometry25(params) { - var chart = params.chart, options = params.options; - var percent2 = options.percent, liquidStyle = options.liquidStyle, radius = options.radius, outline = options.outline, wave = options.wave, shape = options.shape, animation7 = options.animation; - chart.scale({ - percent: { - min: 0, - max: 1 - } - }); - chart.data(getLiquidData(percent2)); - var color4 = options.color || chart.getTheme().defaultColor; - var p4 = deepAssign({}, params, { - options: { - xField: "type", - yField: "percent", - widthRatio: radius, - interval: { - color: color4, - style: liquidStyle, - shape: "liquid-fill-gauge" - } - } - }); - var ext = interval2(p4).ext; - var geometry35 = ext.geometry; - var background = chart.getTheme().background; - var customInfo = { - radius, - outline, - wave, - shape, - background, - animation: animation7 - }; - geometry35.customInfo(customInfo); - chart.legend(false); - chart.axis(false); - chart.tooltip(false); - return params; -} -function statistic2(params, updated) { - var chart = params.chart, options = params.options; - var statistic4 = options.statistic, percent2 = options.percent, meta23 = options.meta; - chart.getController("annotation").clear(true); - var metaFormatter = (0, import_util387.get)(meta23, ["percent", "formatter"]) || function(v3) { - return (v3 * 100).toFixed(2) + "%"; - }; - var contentOpt = statistic4.content; - if (contentOpt) { - contentOpt = deepAssign({}, contentOpt, { - content: !(0, import_util387.isNil)(contentOpt.content) ? contentOpt.content : metaFormatter(percent2) - }); - } - renderStatistic(chart, { statistic: __assign(__assign({}, statistic4), { content: contentOpt }), plotType: "liquid" }, { percent: percent2 }); - if (updated) { - chart.render(true); - } - return params; -} -function adaptor23(params) { - return flow(theme, pattern("liquidStyle"), geometry25, statistic2, scale7({}), animation, interaction)(params); -} - -// node_modules/@antv/g2plot/esm/plots/liquid/constants.js -var DEFAULT_OPTIONS22 = { - radius: 0.9, - statistic: { - title: false, - content: { - style: { - opacity: 0.75, - fontSize: "30px", - lineHeight: "30px", - textAlign: "center" - } - } - }, - outline: { - border: 2, - distance: 0 - }, - wave: { - count: 3, - length: 192 - }, - shape: "circle" -}; - -// node_modules/@antv/g2plot/esm/plots/liquid/shapes/liquid.js -var import_util388 = __toModule(require_lib()); -var DURATION = 5e3; -function lerp5(min13, max15, factor) { - return min13 + (max15 - min13) * factor; -} -function getFillAttrs2(cfg) { - var attrs = __assign({ opacity: 1 }, cfg.style); - if (cfg.color && !attrs.fill) { - attrs.fill = cfg.color; - } - return attrs; -} -function getLineAttrs(cfg) { - var defaultAttrs = { - fill: "#fff", - fillOpacity: 0, - lineWidth: 4 - }; - var attrs = (0, import_util388.mix)({}, defaultAttrs, cfg.style); - if (cfg.color && !attrs.stroke) { - attrs.stroke = cfg.color; - } - if ((0, import_util388.isNumber)(cfg.opacity)) { - attrs.opacity = attrs.strokeOpacity = cfg.opacity; - } - return attrs; -} -function getWaterWavePositions(x6, stage, waveLength, amplitude2) { - if (stage === 0) { - return [ - [x6 + 1 / 2 * waveLength / Math.PI / 2, amplitude2 / 2], - [x6 + 1 / 2 * waveLength / Math.PI, amplitude2], - [x6 + waveLength / 4, amplitude2] - ]; - } - if (stage === 1) { - return [ - [x6 + 1 / 2 * waveLength / Math.PI / 2 * (Math.PI - 2), amplitude2], - [x6 + 1 / 2 * waveLength / Math.PI / 2 * (Math.PI - 1), amplitude2 / 2], - [x6 + waveLength / 4, 0] - ]; - } - if (stage === 2) { - return [ - [x6 + 1 / 2 * waveLength / Math.PI / 2, -amplitude2 / 2], - [x6 + 1 / 2 * waveLength / Math.PI, -amplitude2], - [x6 + waveLength / 4, -amplitude2] - ]; - } - return [ - [x6 + 1 / 2 * waveLength / Math.PI / 2 * (Math.PI - 2), -amplitude2], - [x6 + 1 / 2 * waveLength / Math.PI / 2 * (Math.PI - 1), -amplitude2 / 2], - [x6 + waveLength / 4, 0] - ]; -} -function getWaterWavePath(radius, waterLevel, waveLength, phase, amplitude2, cx, cy) { - var curves = Math.ceil(2 * radius / waveLength * 4) * 4; - var path = []; - var _phase = phase; - while (_phase < -Math.PI * 2) { - _phase += Math.PI * 2; - } - while (_phase > 0) { - _phase -= Math.PI * 2; - } - _phase = _phase / Math.PI / 2 * waveLength; - var left2 = cx - radius + _phase - radius * 2; - path.push(["M", left2, waterLevel]); - var waveRight = 0; - for (var c5 = 0; c5 < curves; ++c5) { - var stage = c5 % 4; - var pos = getWaterWavePositions(c5 * waveLength / 4, stage, waveLength, amplitude2); - path.push([ - "C", - pos[0][0] + left2, - -pos[0][1] + waterLevel, - pos[1][0] + left2, - -pos[1][1] + waterLevel, - pos[2][0] + left2, - -pos[2][1] + waterLevel - ]); - if (c5 === curves - 1) { - waveRight = pos[2][0]; - } - } - path.push(["L", waveRight + left2, cy + radius]); - path.push(["L", left2, cy + radius]); - path.push(["Z"]); - return path; -} -function addWaterWave(x6, y5, level, waveCount, waveAttrs, group3, clip, radius, waveLength, animation7) { - var fill = waveAttrs.fill, opacity = waveAttrs.opacity; - var bbox = clip.getBBox(); - var width2 = bbox.maxX - bbox.minX; - var height = bbox.maxY - bbox.minY; - for (var idx = 0; idx < waveCount; idx++) { - var factor = waveCount <= 1 ? 0 : idx / (waveCount - 1); - var wave = group3.addShape("path", { - name: "waterwave-path", - attrs: { - path: getWaterWavePath(radius, bbox.minY + height * level, waveLength, 0, width2 / 32, x6, y5), - fill, - opacity: lerp5(0.2, 0.9, factor) * opacity - } - }); - try { - if (animation7 === false) - return; - var matrix = transform5([["t", waveLength, 0]]); - wave.stopAnimate(); - wave.animate({ matrix }, { - duration: lerp5(0.5 * DURATION, DURATION, factor), - repeat: true - }); - } catch (e4) { - console.warn("off-screen group animate error!"); - } - } -} -function pin(x6, y5, width2, height) { - var w4 = width2 * 2 / 3; - var h3 = Math.max(w4, height); - var r4 = w4 / 2; - var cx = x6; - var cy = r4 + y5 - h3 / 2; - var theta = Math.asin(r4 / ((h3 - r4) * 0.85)); - var dy = Math.sin(theta) * r4; - var dx = Math.cos(theta) * r4; - var x0 = cx - dx; - var y0 = cy + dy; - var cpX = x6; - var cpY = cy + r4 / Math.sin(theta); - return "\n M " + x0 + " " + y0 + "\n A " + r4 + " " + r4 + " 0 1 1 " + (x0 + dx * 2) + " " + y0 + "\n Q " + cpX + " " + cpY + " " + x6 + " " + (y5 + h3 / 2) + "\n Q " + cpX + " " + cpY + " " + x0 + " " + y0 + "\n Z \n "; -} -function circle(x6, y5, width2, height) { - var rx = width2 / 2; - var ry = height / 2; - return "\n M " + x6 + " " + (y5 - ry) + " \n a " + rx + " " + ry + " 0 1 0 0 " + ry * 2 + "\n a " + rx + " " + ry + " 0 1 0 0 " + -ry * 2 + "\n Z\n "; -} -function diamond(x6, y5, width2, height) { - var h3 = height / 2; - var w4 = width2 / 2; - return "\n M " + x6 + " " + (y5 - h3) + "\n L " + (x6 + w4) + " " + y5 + "\n L " + x6 + " " + (y5 + h3) + "\n L " + (x6 - w4) + " " + y5 + "\n Z\n "; -} -function triangle(x6, y5, width2, height) { - var h3 = height / 2; - var w4 = width2 / 2; - return "\n M " + x6 + " " + (y5 - h3) + "\n L " + (x6 + w4) + " " + (y5 + h3) + "\n L " + (x6 - w4) + " " + (y5 + h3) + "\n Z\n "; -} -function rect(x6, y5, width2, height) { - var GOLDEN_SECTION_RATIO = 0.618; - var h3 = height / 2; - var w4 = width2 / 2 * GOLDEN_SECTION_RATIO; - return "\n M " + (x6 - w4) + " " + (y5 - h3) + "\n L " + (x6 + w4) + " " + (y5 - h3) + "\n L " + (x6 + w4) + " " + (y5 + h3) + "\n L " + (x6 - w4) + " " + (y5 + h3) + "\n Z\n "; -} -registerShape("interval", "liquid-fill-gauge", { - draw: function(cfg, container2) { - var cx = 0.5; - var cy = 0.5; - var customInfo = cfg.customInfo; - var _a6 = customInfo, radio = _a6.radius, shape = _a6.shape, background = _a6.background, animation7 = _a6.animation; - var outline = customInfo.outline; - var wave = customInfo.wave; - var border = outline.border, distance15 = outline.distance; - var waveCount = wave.count, waveLength = wave.length; - var minX = (0, import_util388.reduce)(cfg.points, function(r4, p4) { - return Math.min(r4, p4.x); - }, Infinity); - var center2 = this.parsePoint({ x: cx, y: cy }); - var minXPoint = this.parsePoint({ x: minX, y: cy }); - var halfWidth = center2.x - minXPoint.x; - var radius = Math.min(halfWidth, minXPoint.y * radio); - var waveAttrs = getFillAttrs2(cfg); - var outlineAttrs = getLineAttrs((0, import_util388.mix)({}, cfg, outline)); - var innerRadius = radius - border / 2; - var builtInShapeByName = { - pin, - circle, - diamond, - triangle, - rect - }; - var buildPath = typeof shape === "function" ? shape : builtInShapeByName[shape] || builtInShapeByName["circle"]; - var shapePath = buildPath(center2.x, center2.y, innerRadius * 2, innerRadius * 2); - var waves = container2.addGroup({ - name: "waves" - }); - var clipPath = waves.setClip({ - type: "path", - attrs: { - path: shapePath - } - }); - addWaterWave(center2.x, center2.y, 1 - cfg.points[1].y, waveCount, waveAttrs, waves, clipPath, radius * 2, waveLength, animation7); - container2.addShape("path", { - name: "distance", - attrs: { - path: shapePath, - fill: "transparent", - lineWidth: border + distance15 * 2, - stroke: background === "transparent" ? "#fff" : background - } - }); - container2.addShape("path", { - name: "wrap", - attrs: (0, import_util388.mix)(outlineAttrs, { - path: shapePath, - fill: "transparent", - lineWidth: border - }) - }); - return container2; - } -}); - -// node_modules/@antv/g2plot/esm/plots/liquid/index.js -var Liquid = function(_super) { - __extends(Liquid2, _super); - function Liquid2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "liquid"; - return _this; - } - Liquid2.getDefaultOptions = function() { - return DEFAULT_OPTIONS22; - }; - Liquid2.prototype.getDefaultOptions = function() { - return Liquid2.getDefaultOptions(); - }; - Liquid2.prototype.changeData = function(percent2) { - this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, event_default.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null)); - this.updateOption({ percent: percent2 }); - this.chart.data(getLiquidData(percent2)); - statistic2({ chart: this.chart, options: this.options }, true); - this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, event_default.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null)); - }; - Liquid2.prototype.getSchemaAdaptor = function() { - return adaptor23; - }; - return Liquid2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/bullet/adaptor.js -var import_util389 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/bullet/utils.js -function transformData3(options) { - var data3 = options.data, xField = options.xField, measureField = options.measureField, rangeField = options.rangeField, targetField = options.targetField, layout6 = options.layout; - var ds = []; - var scales = []; - data3.forEach(function(item, index2) { - var _a6; - item[rangeField].sort(function(a4, b10) { - return a4 - b10; - }); - item[rangeField].forEach(function(d3, i4) { - var _a7; - var range = i4 === 0 ? d3 : item[rangeField][i4] - item[rangeField][i4 - 1]; - ds.push((_a7 = { - rKey: rangeField + "_" + i4 - }, _a7[xField] = xField ? item[xField] : String(index2), _a7[rangeField] = range, _a7)); - }); - item[measureField].forEach(function(d3, i4) { - var _a7; - ds.push((_a7 = { - mKey: item[measureField].length > 1 ? measureField + "_" + i4 : "" + measureField - }, _a7[xField] = xField ? item[xField] : String(index2), _a7[measureField] = d3, _a7)); - }); - ds.push((_a6 = { - tKey: "" + targetField - }, _a6[xField] = xField ? item[xField] : String(index2), _a6[targetField] = item[targetField], _a6)); - scales.push(item[rangeField], item[measureField], item[targetField]); - }); - var min13 = Math.min.apply(Math, scales.flat(Infinity)); - var max15 = Math.max.apply(Math, scales.flat(Infinity)); - min13 = min13 > 0 ? 0 : min13; - if (layout6 === "vertical") { - ds.reverse(); - } - return { min: min13, max: max15, ds }; -} - -// node_modules/@antv/g2plot/esm/plots/bullet/adaptor.js -function geometry26(params) { - var chart = params.chart, options = params.options; - var bulletStyle = options.bulletStyle, targetField = options.targetField, rangeField = options.rangeField, measureField = options.measureField, xField = options.xField, color4 = options.color, layout6 = options.layout, size14 = options.size, label17 = options.label; - var _a6 = transformData3(options), min13 = _a6.min, max15 = _a6.max, ds = _a6.ds; - chart.data(ds); - var r4 = deepAssign({}, params, { - options: { - xField, - yField: rangeField, - seriesField: "rKey", - isStack: true, - label: (0, import_util389.get)(label17, "range"), - interval: { - color: (0, import_util389.get)(color4, "range"), - style: (0, import_util389.get)(bulletStyle, "range"), - size: (0, import_util389.get)(size14, "range") - } - } - }); - interval2(r4); - chart.geometries[0].tooltip(false); - var m4 = deepAssign({}, params, { - options: { - xField, - yField: measureField, - seriesField: "mKey", - isStack: true, - label: (0, import_util389.get)(label17, "measure"), - interval: { - color: (0, import_util389.get)(color4, "measure"), - style: (0, import_util389.get)(bulletStyle, "measure"), - size: (0, import_util389.get)(size14, "measure") - } - } - }); - interval2(m4); - var t4 = deepAssign({}, params, { - options: { - xField, - yField: targetField, - seriesField: "tKey", - label: (0, import_util389.get)(label17, "target"), - point: { - color: (0, import_util389.get)(color4, "target"), - style: (0, import_util389.get)(bulletStyle, "target"), - size: (0, import_util389.isFunction)((0, import_util389.get)(size14, "target")) ? function(data3) { - return (0, import_util389.get)(size14, "target")(data3) / 2; - } : (0, import_util389.get)(size14, "target") / 2, - shape: layout6 === "horizontal" ? "line" : "hyphen" - } - } - }); - point(t4); - if (layout6 === "horizontal") { - chart.coordinate().transpose(); - } - return __assign(__assign({}, params), { ext: { data: { min: min13, max: max15 } } }); -} -function meta16(params) { - var _a6, _b; - var options = params.options, ext = params.ext; - var xAxis = options.xAxis, yAxis = options.yAxis, targetField = options.targetField, rangeField = options.rangeField, measureField = options.measureField, xField = options.xField; - var extData = ext.data; - return flow(scale7((_a6 = {}, _a6[xField] = xAxis, _a6[measureField] = yAxis, _a6), (_b = {}, _b[measureField] = { min: extData === null || extData === void 0 ? void 0 : extData.min, max: extData === null || extData === void 0 ? void 0 : extData.max, sync: true }, _b[targetField] = { - sync: "" + measureField - }, _b[rangeField] = { - sync: "" + measureField - }, _b)))(params); -} -function axis14(params) { - var chart = params.chart, options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, measureField = options.measureField, rangeField = options.rangeField, targetField = options.targetField; - chart.axis("" + rangeField, false); - chart.axis("" + targetField, false); - if (xAxis === false) { - chart.axis("" + xField, false); - } else { - chart.axis("" + xField, xAxis); - } - if (yAxis === false) { - chart.axis("" + measureField, false); - } else { - chart.axis("" + measureField, yAxis); - } - return params; -} -function legend15(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend; - chart.removeInteraction("legend-filter"); - chart.legend(legend18); - chart.legend("rKey", false); - chart.legend("mKey", false); - chart.legend("tKey", false); - return params; -} -function label12(params) { - var chart = params.chart, options = params.options; - var label17 = options.label, measureField = options.measureField, targetField = options.targetField, rangeField = options.rangeField; - var _a6 = chart.geometries, rangeGeometry = _a6[0], measureGeometry = _a6[1], targetGeometry = _a6[2]; - if ((0, import_util389.get)(label17, "range")) { - rangeGeometry.label("" + rangeField, __assign({ layout: [{ type: "limit-in-plot" }] }, transformLabel(label17.range))); - } else { - rangeGeometry.label(false); - } - if ((0, import_util389.get)(label17, "measure")) { - measureGeometry.label("" + measureField, __assign({ layout: [{ type: "limit-in-plot" }] }, transformLabel(label17.measure))); - } else { - measureGeometry.label(false); - } - if ((0, import_util389.get)(label17, "target")) { - targetGeometry.label("" + targetField, __assign({ layout: [{ type: "limit-in-plot" }] }, transformLabel(label17.target))); - } else { - targetGeometry.label(false); - } - return params; -} -function adaptor24(params) { - flow(geometry26, meta16, axis14, legend15, theme, label12, tooltip, interaction, animation)(params); -} - -// node_modules/@antv/g2plot/esm/plots/bullet/constant.js -var DEFAULT_OPTIONS23 = deepAssign({}, Plot.getDefaultOptions(), { - layout: "horizontal", - size: { - range: 30, - measure: 20, - target: 20 - }, - xAxis: { - tickLine: false, - line: null - }, - bulletStyle: { - range: { - fillOpacity: 0.5 - } - }, - label: { - measure: { - position: "right" - } - }, - tooltip: { - showMarkers: false - } -}); - -// node_modules/@antv/g2plot/esm/plots/bullet/index.js -var Bullet = function(_super) { - __extends(Bullet2, _super); - function Bullet2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "bullet"; - return _this; - } - Bullet2.getDefaultOptions = function() { - return DEFAULT_OPTIONS23; - }; - Bullet2.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - var _a6 = transformData3(this.options), min13 = _a6.min, max15 = _a6.max, ds = _a6.ds; - meta16({ options: this.options, ext: { data: { min: min13, max: max15 } }, chart: this.chart }); - this.chart.changeData(ds); - }; - Bullet2.prototype.getSchemaAdaptor = function() { - return adaptor24; - }; - Bullet2.prototype.getDefaultOptions = function() { - return Bullet2.getDefaultOptions(); - }; - return Bullet2; -}(Plot); - -// node_modules/@antv/g2plot/esm/utils/hierarchy/util.js -var import_util390 = __toModule(require_lib()); -var NODE_INDEX_FIELD = "nodeIndex"; -var CHILD_NODE_COUNT = "childNodeCount"; -var NODE_ANCESTORS_FIELD = "nodeAncestor"; -var INVALID_FIELD_ERR_MSG = "Invalid field: it must be a string!"; -function getField(options, defaultField) { - var field6 = options.field, fields = options.fields; - if ((0, import_util390.isString)(field6)) { - return field6; - } - if ((0, import_util390.isArray)(field6)) { - console.warn(INVALID_FIELD_ERR_MSG); - return field6[0]; - } - console.warn(INVALID_FIELD_ERR_MSG + " will try to get fields instead."); - if ((0, import_util390.isString)(fields)) { - return fields; - } - if ((0, import_util390.isArray)(fields) && fields.length) { - return fields[0]; - } - if (defaultField) { - return defaultField; - } - throw new TypeError(INVALID_FIELD_ERR_MSG); -} -function getAllNodes(root) { - var nodes = []; - if (root && root.each) { - var parent_1; - var index_1; - root.each(function(node) { - var _a6, _b; - if (node.parent !== parent_1) { - parent_1 = node.parent; - index_1 = 0; - } else { - index_1 += 1; - } - var ancestors = (0, import_util390.filter)((((_a6 = node.ancestors) === null || _a6 === void 0 ? void 0 : _a6.call(node)) || []).map(function(d3) { - return nodes.find(function(n3) { - return n3.name === d3.name; - }) || d3; - }), function(_a7) { - var depth = _a7.depth; - return depth > 0 && depth < node.depth; - }); - node[NODE_ANCESTORS_FIELD] = ancestors; - node[CHILD_NODE_COUNT] = ((_b = node.children) === null || _b === void 0 ? void 0 : _b.length) || 0; - node[NODE_INDEX_FIELD] = index_1; - nodes.push(node); - }); - } else if (root && root.eachNode) { - root.eachNode(function(node) { - nodes.push(node); - }); - } - return nodes; -} - -// node_modules/@antv/g2plot/esm/plots/sunburst/adaptor.js -var import_util398 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/sunburst/constant.js -var SUNBURST_ANCESTOR_FIELD = "ancestor-node"; -var SUNBURST_Y_FIELD = "value"; -var SUNBURST_PATH_FIELD = "path"; -var RAW_FIELDS = [ - SUNBURST_PATH_FIELD, - NODE_INDEX_FIELD, - NODE_ANCESTORS_FIELD, - CHILD_NODE_COUNT, - "name", - "depth", - "height" -]; -var DEFAULT_OPTIONS24 = deepAssign({}, Plot.getDefaultOptions(), { - innerRadius: 0, - radius: 0.85, - hierarchyConfig: { - field: "value" - }, - tooltip: { - shared: true, - showMarkers: false, - offset: 20, - showTitle: false - }, - legend: false, - sunburstStyle: { - lineWidth: 0.5, - stroke: "#FFF" - }, - drilldown: { enabled: true } -}); - -// node_modules/@antv/g2plot/esm/plots/sunburst/utils.js -var import_util397 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/interactions/actions/drill-down.js -var import_util392 = __toModule(require_lib()); -var PADDING = 4; -var PADDING_LEFT = 0; -var PADDING_TOP3 = 5; -var BREAD_CRUMB_NAME = "drilldown-bread-crumb"; -var DEFAULT_BREAD_CRUMB_CONFIG = { - position: "top-left", - dividerText: "/", - textStyle: { - fontSize: 12, - fill: "rgba(0, 0, 0, 0.65)", - cursor: "pointer" - }, - activeTextStyle: { - fill: "#87B5FF" - } -}; -var HIERARCHY_DATA_TRANSFORM_PARAMS = "hierarchy-data-transform-params"; -var DrillDownAction = function(_super) { - __extends(DrillDownAction2, _super); - function DrillDownAction2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.name = "drill-down"; - _this.historyCache = []; - _this.breadCrumbGroup = null; - _this.breadCrumbCfg = DEFAULT_BREAD_CRUMB_CONFIG; - return _this; - } - DrillDownAction2.prototype.click = function() { - var data3 = (0, import_util392.get)(this.context, ["event", "data", "data"]); - if (!data3) - return false; - this.drill(data3); - this.drawBreadCrumb(); - }; - DrillDownAction2.prototype.resetPosition = function() { - if (!this.breadCrumbGroup) - return; - var coordinate11 = this.context.view.getCoordinate(); - var breadCrumbGroup = this.breadCrumbGroup; - var bbox = breadCrumbGroup.getBBox(); - var position2 = this.getButtonCfg().position; - var point2 = { x: coordinate11.start.x, y: coordinate11.end.y - (bbox.height + PADDING_TOP3 * 2) }; - if (coordinate11.isPolar) { - point2 = { x: 0, y: 0 }; - } - if (position2 === "bottom-left") { - point2 = { x: coordinate11.start.x, y: coordinate11.start.y }; - } - var matrix = Util.transform(null, [["t", point2.x + PADDING_LEFT, point2.y + bbox.height + PADDING_TOP3]]); - breadCrumbGroup.setMatrix(matrix); - }; - DrillDownAction2.prototype.back = function() { - if ((0, import_util392.size)(this.historyCache)) { - this.backTo(this.historyCache.slice(0, -1)); - } - }; - DrillDownAction2.prototype.reset = function() { - if (this.historyCache[0]) { - this.backTo(this.historyCache.slice(0, 1)); - } - this.historyCache = []; - this.hideCrumbGroup(); - }; - DrillDownAction2.prototype.drill = function(nodeInfo) { - var view = this.context.view; - var transformData10 = (0, import_util392.get)(view, ["interactions", "drill-down", "cfg", "transformData"], function(v3) { - return v3; - }); - var drillData = transformData10(__assign({ data: nodeInfo.data }, nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS])); - view.changeData(drillData); - var historyCache = []; - var node = nodeInfo; - while (node) { - var nodeData = node.data; - historyCache.unshift({ - id: nodeData.name + "_" + node.height + "_" + node.depth, - name: nodeData.name, - children: transformData10(__assign({ data: nodeData }, nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS])) - }); - node = node.parent; - } - this.historyCache = (this.historyCache || []).slice(0, -1).concat(historyCache); - }; - DrillDownAction2.prototype.backTo = function(historyCache) { - if (!historyCache || historyCache.length <= 0) { - return; - } - var view = this.context.view; - var data3 = (0, import_util392.last)(historyCache).children; - view.changeData(data3); - if (historyCache.length > 1) { - this.historyCache = historyCache; - this.drawBreadCrumb(); - } else { - this.historyCache = []; - this.hideCrumbGroup(); - } - }; - DrillDownAction2.prototype.getButtonCfg = function() { - var view = this.context.view; - var drillDownConfig = (0, import_util392.get)(view, ["interactions", "drill-down", "cfg", "drillDownConfig"]); - return deepAssign(this.breadCrumbCfg, drillDownConfig === null || drillDownConfig === void 0 ? void 0 : drillDownConfig.breadCrumb, this.cfg); - }; - DrillDownAction2.prototype.drawBreadCrumb = function() { - this.drawBreadCrumbGroup(); - this.resetPosition(); - this.breadCrumbGroup.show(); - }; - DrillDownAction2.prototype.drawBreadCrumbGroup = function() { - var _this = this; - var config = this.getButtonCfg(); - var cache3 = this.historyCache; - if (!this.breadCrumbGroup) { - this.breadCrumbGroup = this.context.view.foregroundGroup.addGroup({ - name: BREAD_CRUMB_NAME - }); - } else { - this.breadCrumbGroup.clear(); - } - var left2 = 0; - cache3.forEach(function(record, index2) { - var textShape = _this.breadCrumbGroup.addShape({ - type: "text", - id: record.id, - name: BREAD_CRUMB_NAME + "_" + record.name + "_text", - attrs: __assign(__assign({ text: index2 === 0 && !(0, import_util392.isNil)(config.rootText) ? config.rootText : record.name }, config.textStyle), { x: left2, y: 0 }) - }); - var textShapeBox = textShape.getBBox(); - left2 += textShapeBox.width + PADDING; - textShape.on("click", function(event) { - var _a6; - var targetId = event.target.get("id"); - if (targetId !== ((_a6 = (0, import_util392.last)(cache3)) === null || _a6 === void 0 ? void 0 : _a6.id)) { - var newHistoryCache = cache3.slice(0, cache3.findIndex(function(d3) { - return d3.id === targetId; - }) + 1); - _this.backTo(newHistoryCache); - } - }); - textShape.on("mouseenter", function(event) { - var _a6; - var targetId = event.target.get("id"); - if (targetId !== ((_a6 = (0, import_util392.last)(cache3)) === null || _a6 === void 0 ? void 0 : _a6.id)) { - textShape.attr(config.activeTextStyle); - } else { - textShape.attr({ cursor: "default" }); - } - }); - textShape.on("mouseleave", function() { - textShape.attr(config.textStyle); - }); - if (index2 < cache3.length - 1) { - var dividerShape = _this.breadCrumbGroup.addShape({ - type: "text", - name: config.name + "_" + record.name + "_divider", - attrs: __assign(__assign({ text: config.dividerText }, config.textStyle), { x: left2, y: 0 }) - }); - var dividerBox = dividerShape.getBBox(); - left2 += dividerBox.width + PADDING; - } - }); - }; - DrillDownAction2.prototype.hideCrumbGroup = function() { - if (this.breadCrumbGroup) { - this.breadCrumbGroup.hide(); - } - }; - DrillDownAction2.prototype.destroy = function() { - if (this.breadCrumbGroup) { - this.breadCrumbGroup.remove(); - } - _super.prototype.destroy.call(this); - }; - return DrillDownAction2; -}(base_default12); - -// node_modules/d3-hierarchy/src/index.js -var src_exports2 = {}; -__export(src_exports2, { - cluster: () => cluster_default, - hierarchy: () => hierarchy, - pack: () => pack_default, - packEnclose: () => enclose_default, - packSiblings: () => siblings_default, - partition: () => partition_default, - stratify: () => stratify_default, - tree: () => tree_default2, - treemap: () => treemap_default, - treemapBinary: () => binary_default, - treemapDice: () => dice_default, - treemapResquarify: () => resquarify_default, - treemapSlice: () => slice_default, - treemapSliceDice: () => sliceDice_default, - treemapSquarify: () => squarify_default -}); - -// node_modules/d3-hierarchy/src/cluster.js -function defaultSeparation(a4, b10) { - return a4.parent === b10.parent ? 1 : 2; -} -function meanX(children) { - return children.reduce(meanXReduce, 0) / children.length; -} -function meanXReduce(x6, c5) { - return x6 + c5.x; -} -function maxY(children) { - return 1 + children.reduce(maxYReduce, 0); -} -function maxYReduce(y5, c5) { - return Math.max(y5, c5.y); -} -function leafLeft(node) { - var children; - while (children = node.children) - node = children[0]; - return node; -} -function leafRight(node) { - var children; - while (children = node.children) - node = children[children.length - 1]; - return node; -} -function cluster_default() { - var separation = defaultSeparation, dx = 1, dy = 1, nodeSize = false; - function cluster(root) { - var previousNode, x6 = 0; - root.eachAfter(function(node) { - var children = node.children; - if (children) { - node.x = meanX(children); - node.y = maxY(children); - } else { - node.x = previousNode ? x6 += separation(node, previousNode) : 0; - node.y = 0; - previousNode = node; - } - }); - var left2 = leafLeft(root), right2 = leafRight(root), x0 = left2.x - separation(left2, right2) / 2, x1 = right2.x + separation(right2, left2) / 2; - return root.eachAfter(nodeSize ? function(node) { - node.x = (node.x - root.x) * dx; - node.y = (root.y - node.y) * dy; - } : function(node) { - node.x = (node.x - x0) / (x1 - x0) * dx; - node.y = (1 - (root.y ? node.y / root.y : 1)) * dy; - }); - } - cluster.separation = function(x6) { - return arguments.length ? (separation = x6, cluster) : separation; - }; - cluster.size = function(x6) { - return arguments.length ? (nodeSize = false, dx = +x6[0], dy = +x6[1], cluster) : nodeSize ? null : [dx, dy]; - }; - cluster.nodeSize = function(x6) { - return arguments.length ? (nodeSize = true, dx = +x6[0], dy = +x6[1], cluster) : nodeSize ? [dx, dy] : null; - }; - return cluster; -} - -// node_modules/d3-hierarchy/src/hierarchy/count.js -function count(node) { - var sum = 0, children = node.children, i4 = children && children.length; - if (!i4) - sum = 1; - else - while (--i4 >= 0) - sum += children[i4].value; - node.value = sum; -} -function count_default() { - return this.eachAfter(count); -} - -// node_modules/d3-hierarchy/src/hierarchy/each.js -function each_default(callback, that) { - let index2 = -1; - for (const node of this) { - callback.call(that, node, ++index2, this); - } - return this; -} - -// node_modules/d3-hierarchy/src/hierarchy/eachBefore.js -function eachBefore_default(callback, that) { - var node = this, nodes = [node], children, i4, index2 = -1; - while (node = nodes.pop()) { - callback.call(that, node, ++index2, this); - if (children = node.children) { - for (i4 = children.length - 1; i4 >= 0; --i4) { - nodes.push(children[i4]); - } - } - } - return this; -} - -// node_modules/d3-hierarchy/src/hierarchy/eachAfter.js -function eachAfter_default(callback, that) { - var node = this, nodes = [node], next = [], children, i4, n3, index2 = -1; - while (node = nodes.pop()) { - next.push(node); - if (children = node.children) { - for (i4 = 0, n3 = children.length; i4 < n3; ++i4) { - nodes.push(children[i4]); - } - } - } - while (node = next.pop()) { - callback.call(that, node, ++index2, this); - } - return this; -} - -// node_modules/d3-hierarchy/src/hierarchy/find.js -function find_default(callback, that) { - let index2 = -1; - for (const node of this) { - if (callback.call(that, node, ++index2, this)) { - return node; - } - } -} - -// node_modules/d3-hierarchy/src/hierarchy/sum.js -function sum_default(value2) { - return this.eachAfter(function(node) { - var sum = +value2(node.data) || 0, children = node.children, i4 = children && children.length; - while (--i4 >= 0) - sum += children[i4].value; - node.value = sum; - }); -} - -// node_modules/d3-hierarchy/src/hierarchy/sort.js -function sort_default(compare4) { - return this.eachBefore(function(node) { - if (node.children) { - node.children.sort(compare4); - } - }); -} - -// node_modules/d3-hierarchy/src/hierarchy/path.js -function path_default7(end2) { - var start = this, ancestor = leastCommonAncestor(start, end2), nodes = [start]; - while (start !== ancestor) { - start = start.parent; - nodes.push(start); - } - var k4 = nodes.length; - while (end2 !== ancestor) { - nodes.splice(k4, 0, end2); - end2 = end2.parent; - } - return nodes; -} -function leastCommonAncestor(a4, b10) { - if (a4 === b10) - return a4; - var aNodes = a4.ancestors(), bNodes = b10.ancestors(), c5 = null; - a4 = aNodes.pop(); - b10 = bNodes.pop(); - while (a4 === b10) { - c5 = a4; - a4 = aNodes.pop(); - b10 = bNodes.pop(); - } - return c5; -} - -// node_modules/d3-hierarchy/src/hierarchy/ancestors.js -function ancestors_default() { - var node = this, nodes = [node]; - while (node = node.parent) { - nodes.push(node); - } - return nodes; -} - -// node_modules/d3-hierarchy/src/hierarchy/descendants.js -function descendants_default() { - return Array.from(this); -} - -// node_modules/d3-hierarchy/src/hierarchy/leaves.js -function leaves_default() { - var leaves = []; - this.eachBefore(function(node) { - if (!node.children) { - leaves.push(node); - } - }); - return leaves; -} - -// node_modules/d3-hierarchy/src/hierarchy/links.js -function links_default() { - var root = this, links = []; - root.each(function(node) { - if (node !== root) { - links.push({ source: node.parent, target: node }); - } - }); - return links; -} - -// node_modules/d3-hierarchy/src/hierarchy/iterator.js -function* iterator_default() { - var node = this, current, next = [node], children, i4, n3; - do { - current = next.reverse(), next = []; - while (node = current.pop()) { - yield node; - if (children = node.children) { - for (i4 = 0, n3 = children.length; i4 < n3; ++i4) { - next.push(children[i4]); - } - } - } - } while (next.length); -} - -// node_modules/d3-hierarchy/src/hierarchy/index.js -function hierarchy(data3, children) { - if (data3 instanceof Map) { - data3 = [void 0, data3]; - if (children === void 0) - children = mapChildren; - } else if (children === void 0) { - children = objectChildren; - } - var root = new Node(data3), node, nodes = [root], child, childs, i4, n3; - while (node = nodes.pop()) { - if ((childs = children(node.data)) && (n3 = (childs = Array.from(childs)).length)) { - node.children = childs; - for (i4 = n3 - 1; i4 >= 0; --i4) { - nodes.push(child = childs[i4] = new Node(childs[i4])); - child.parent = node; - child.depth = node.depth + 1; - } - } - } - return root.eachBefore(computeHeight); -} -function node_copy() { - return hierarchy(this).eachBefore(copyData); -} -function objectChildren(d3) { - return d3.children; -} -function mapChildren(d3) { - return Array.isArray(d3) ? d3[1] : null; -} -function copyData(node) { - if (node.data.value !== void 0) - node.value = node.data.value; - node.data = node.data.data; -} -function computeHeight(node) { - var height = 0; - do - node.height = height; - while ((node = node.parent) && node.height < ++height); -} -function Node(data3) { - this.data = data3; - this.depth = this.height = 0; - this.parent = null; -} -Node.prototype = hierarchy.prototype = { - constructor: Node, - count: count_default, - each: each_default, - eachAfter: eachAfter_default, - eachBefore: eachBefore_default, - find: find_default, - sum: sum_default, - sort: sort_default, - path: path_default7, - ancestors: ancestors_default, - descendants: descendants_default, - leaves: leaves_default, - links: links_default, - copy: node_copy, - [Symbol.iterator]: iterator_default -}; - -// node_modules/d3-hierarchy/src/array.js -function array_default2(x6) { - return typeof x6 === "object" && "length" in x6 ? x6 : Array.from(x6); -} -function shuffle(array) { - var m4 = array.length, t4, i4; - while (m4) { - i4 = Math.random() * m4-- | 0; - t4 = array[m4]; - array[m4] = array[i4]; - array[i4] = t4; - } - return array; -} - -// node_modules/d3-hierarchy/src/pack/enclose.js -function enclose_default(circles) { - var i4 = 0, n3 = (circles = shuffle(Array.from(circles))).length, B3 = [], p4, e4; - while (i4 < n3) { - p4 = circles[i4]; - if (e4 && enclosesWeak(e4, p4)) - ++i4; - else - e4 = encloseBasis(B3 = extendBasis(B3, p4)), i4 = 0; - } - return e4; -} -function extendBasis(B3, p4) { - var i4, j4; - if (enclosesWeakAll(p4, B3)) - return [p4]; - for (i4 = 0; i4 < B3.length; ++i4) { - if (enclosesNot(p4, B3[i4]) && enclosesWeakAll(encloseBasis2(B3[i4], p4), B3)) { - return [B3[i4], p4]; - } - } - for (i4 = 0; i4 < B3.length - 1; ++i4) { - for (j4 = i4 + 1; j4 < B3.length; ++j4) { - if (enclosesNot(encloseBasis2(B3[i4], B3[j4]), p4) && enclosesNot(encloseBasis2(B3[i4], p4), B3[j4]) && enclosesNot(encloseBasis2(B3[j4], p4), B3[i4]) && enclosesWeakAll(encloseBasis3(B3[i4], B3[j4], p4), B3)) { - return [B3[i4], B3[j4], p4]; - } - } - } - throw new Error(); -} -function enclosesNot(a4, b10) { - var dr = a4.r - b10.r, dx = b10.x - a4.x, dy = b10.y - a4.y; - return dr < 0 || dr * dr < dx * dx + dy * dy; -} -function enclosesWeak(a4, b10) { - var dr = a4.r - b10.r + Math.max(a4.r, b10.r, 1) * 1e-9, dx = b10.x - a4.x, dy = b10.y - a4.y; - return dr > 0 && dr * dr > dx * dx + dy * dy; -} -function enclosesWeakAll(a4, B3) { - for (var i4 = 0; i4 < B3.length; ++i4) { - if (!enclosesWeak(a4, B3[i4])) { - return false; - } - } - return true; -} -function encloseBasis(B3) { - switch (B3.length) { - case 1: - return encloseBasis1(B3[0]); - case 2: - return encloseBasis2(B3[0], B3[1]); - case 3: - return encloseBasis3(B3[0], B3[1], B3[2]); - } -} -function encloseBasis1(a4) { - return { - x: a4.x, - y: a4.y, - r: a4.r - }; -} -function encloseBasis2(a4, b10) { - var x1 = a4.x, y1 = a4.y, r1 = a4.r, x22 = b10.x, y22 = b10.y, r22 = b10.r, x21 = x22 - x1, y21 = y22 - y1, r21 = r22 - r1, l4 = Math.sqrt(x21 * x21 + y21 * y21); - return { - x: (x1 + x22 + x21 / l4 * r21) / 2, - y: (y1 + y22 + y21 / l4 * r21) / 2, - r: (l4 + r1 + r22) / 2 - }; -} -function encloseBasis3(a4, b10, c5) { - var x1 = a4.x, y1 = a4.y, r1 = a4.r, x22 = b10.x, y22 = b10.y, r22 = b10.r, x32 = c5.x, y32 = c5.y, r32 = c5.r, a22 = x1 - x22, a32 = x1 - x32, b23 = y1 - y22, b32 = y1 - y32, c22 = r22 - r1, c32 = r32 - r1, d1 = x1 * x1 + y1 * y1 - r1 * r1, d22 = d1 - x22 * x22 - y22 * y22 + r22 * r22, d3 = d1 - x32 * x32 - y32 * y32 + r32 * r32, ab = a32 * b23 - a22 * b32, xa = (b23 * d3 - b32 * d22) / (ab * 2) - x1, xb = (b32 * c22 - b23 * c32) / ab, ya = (a32 * d22 - a22 * d3) / (ab * 2) - y1, yb = (a22 * c32 - a32 * c22) / ab, A4 = xb * xb + yb * yb - 1, B3 = 2 * (r1 + xa * xb + ya * yb), C3 = xa * xa + ya * ya - r1 * r1, r4 = -(A4 ? (B3 + Math.sqrt(B3 * B3 - 4 * A4 * C3)) / (2 * A4) : C3 / B3); - return { - x: x1 + xa + xb * r4, - y: y1 + ya + yb * r4, - r: r4 - }; -} - -// node_modules/d3-hierarchy/src/pack/siblings.js -function place(b10, a4, c5) { - var dx = b10.x - a4.x, x6, a22, dy = b10.y - a4.y, y5, b23, d22 = dx * dx + dy * dy; - if (d22) { - a22 = a4.r + c5.r, a22 *= a22; - b23 = b10.r + c5.r, b23 *= b23; - if (a22 > b23) { - x6 = (d22 + b23 - a22) / (2 * d22); - y5 = Math.sqrt(Math.max(0, b23 / d22 - x6 * x6)); - c5.x = b10.x - x6 * dx - y5 * dy; - c5.y = b10.y - x6 * dy + y5 * dx; - } else { - x6 = (d22 + a22 - b23) / (2 * d22); - y5 = Math.sqrt(Math.max(0, a22 / d22 - x6 * x6)); - c5.x = a4.x + x6 * dx - y5 * dy; - c5.y = a4.y + x6 * dy + y5 * dx; - } - } else { - c5.x = a4.x + c5.r; - c5.y = a4.y; - } -} -function intersects(a4, b10) { - var dr = a4.r + b10.r - 1e-6, dx = b10.x - a4.x, dy = b10.y - a4.y; - return dr > 0 && dr * dr > dx * dx + dy * dy; -} -function score(node) { - var a4 = node._, b10 = node.next._, ab = a4.r + b10.r, dx = (a4.x * b10.r + b10.x * a4.r) / ab, dy = (a4.y * b10.r + b10.y * a4.r) / ab; - return dx * dx + dy * dy; -} -function Node2(circle3) { - this._ = circle3; - this.next = null; - this.previous = null; -} -function packEnclose(circles) { - if (!(n3 = (circles = array_default2(circles)).length)) - return 0; - var a4, b10, c5, n3, aa, ca, i4, j4, k4, sj, sk; - a4 = circles[0], a4.x = 0, a4.y = 0; - if (!(n3 > 1)) - return a4.r; - b10 = circles[1], a4.x = -b10.r, b10.x = a4.r, b10.y = 0; - if (!(n3 > 2)) - return a4.r + b10.r; - place(b10, a4, c5 = circles[2]); - a4 = new Node2(a4), b10 = new Node2(b10), c5 = new Node2(c5); - a4.next = c5.previous = b10; - b10.next = a4.previous = c5; - c5.next = b10.previous = a4; - pack: - for (i4 = 3; i4 < n3; ++i4) { - place(a4._, b10._, c5 = circles[i4]), c5 = new Node2(c5); - j4 = b10.next, k4 = a4.previous, sj = b10._.r, sk = a4._.r; - do { - if (sj <= sk) { - if (intersects(j4._, c5._)) { - b10 = j4, a4.next = b10, b10.previous = a4, --i4; - continue pack; - } - sj += j4._.r, j4 = j4.next; - } else { - if (intersects(k4._, c5._)) { - a4 = k4, a4.next = b10, b10.previous = a4, --i4; - continue pack; - } - sk += k4._.r, k4 = k4.previous; - } - } while (j4 !== k4.next); - c5.previous = a4, c5.next = b10, a4.next = b10.previous = b10 = c5; - aa = score(a4); - while ((c5 = c5.next) !== b10) { - if ((ca = score(c5)) < aa) { - a4 = c5, aa = ca; - } - } - b10 = a4.next; - } - a4 = [b10._], c5 = b10; - while ((c5 = c5.next) !== b10) - a4.push(c5._); - c5 = enclose_default(a4); - for (i4 = 0; i4 < n3; ++i4) - a4 = circles[i4], a4.x -= c5.x, a4.y -= c5.y; - return c5.r; -} -function siblings_default(circles) { - packEnclose(circles); - return circles; -} - -// node_modules/d3-hierarchy/src/accessors.js -function optional(f3) { - return f3 == null ? null : required(f3); -} -function required(f3) { - if (typeof f3 !== "function") - throw new Error(); - return f3; -} - -// node_modules/d3-hierarchy/src/constant.js -function constantZero() { - return 0; -} -function constant_default2(x6) { - return function() { - return x6; - }; -} - -// node_modules/d3-hierarchy/src/pack/index.js -function defaultRadius(d3) { - return Math.sqrt(d3.value); -} -function pack_default() { - var radius = null, dx = 1, dy = 1, padding3 = constantZero; - function pack2(root) { - root.x = dx / 2, root.y = dy / 2; - if (radius) { - root.eachBefore(radiusLeaf(radius)).eachAfter(packChildren(padding3, 0.5)).eachBefore(translateChild(1)); - } else { - root.eachBefore(radiusLeaf(defaultRadius)).eachAfter(packChildren(constantZero, 1)).eachAfter(packChildren(padding3, root.r / Math.min(dx, dy))).eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r))); - } - return root; - } - pack2.radius = function(x6) { - return arguments.length ? (radius = optional(x6), pack2) : radius; - }; - pack2.size = function(x6) { - return arguments.length ? (dx = +x6[0], dy = +x6[1], pack2) : [dx, dy]; - }; - pack2.padding = function(x6) { - return arguments.length ? (padding3 = typeof x6 === "function" ? x6 : constant_default2(+x6), pack2) : padding3; - }; - return pack2; -} -function radiusLeaf(radius) { - return function(node) { - if (!node.children) { - node.r = Math.max(0, +radius(node) || 0); - } - }; -} -function packChildren(padding3, k4) { - return function(node) { - if (children = node.children) { - var children, i4, n3 = children.length, r4 = padding3(node) * k4 || 0, e4; - if (r4) - for (i4 = 0; i4 < n3; ++i4) - children[i4].r += r4; - e4 = packEnclose(children); - if (r4) - for (i4 = 0; i4 < n3; ++i4) - children[i4].r -= r4; - node.r = e4 + r4; - } - }; -} -function translateChild(k4) { - return function(node) { - var parent = node.parent; - node.r *= k4; - if (parent) { - node.x = parent.x + k4 * node.x; - node.y = parent.y + k4 * node.y; - } - }; -} - -// node_modules/d3-hierarchy/src/treemap/round.js -function round_default(node) { - node.x0 = Math.round(node.x0); - node.y0 = Math.round(node.y0); - node.x1 = Math.round(node.x1); - node.y1 = Math.round(node.y1); -} - -// node_modules/d3-hierarchy/src/treemap/dice.js -function dice_default(parent, x0, y0, x1, y1) { - var nodes = parent.children, node, i4 = -1, n3 = nodes.length, k4 = parent.value && (x1 - x0) / parent.value; - while (++i4 < n3) { - node = nodes[i4], node.y0 = y0, node.y1 = y1; - node.x0 = x0, node.x1 = x0 += node.value * k4; - } -} - -// node_modules/d3-hierarchy/src/partition.js -function partition_default() { - var dx = 1, dy = 1, padding3 = 0, round5 = false; - function partition3(root) { - var n3 = root.height + 1; - root.x0 = root.y0 = padding3; - root.x1 = dx; - root.y1 = dy / n3; - root.eachBefore(positionNode(dy, n3)); - if (round5) - root.eachBefore(round_default); - return root; - } - function positionNode(dy2, n3) { - return function(node) { - if (node.children) { - dice_default(node, node.x0, dy2 * (node.depth + 1) / n3, node.x1, dy2 * (node.depth + 2) / n3); - } - var x0 = node.x0, y0 = node.y0, x1 = node.x1 - padding3, y1 = node.y1 - padding3; - if (x1 < x0) - x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) - y0 = y1 = (y0 + y1) / 2; - node.x0 = x0; - node.y0 = y0; - node.x1 = x1; - node.y1 = y1; - }; - } - partition3.round = function(x6) { - return arguments.length ? (round5 = !!x6, partition3) : round5; - }; - partition3.size = function(x6) { - return arguments.length ? (dx = +x6[0], dy = +x6[1], partition3) : [dx, dy]; - }; - partition3.padding = function(x6) { - return arguments.length ? (padding3 = +x6, partition3) : padding3; - }; - return partition3; -} - -// node_modules/d3-hierarchy/src/stratify.js -var preroot = { depth: -1 }; -var ambiguous = {}; -function defaultId(d3) { - return d3.id; -} -function defaultParentId(d3) { - return d3.parentId; -} -function stratify_default() { - var id = defaultId, parentId = defaultParentId; - function stratify(data3) { - var nodes = Array.from(data3), n3 = nodes.length, d3, i4, root, parent, node, nodeId, nodeKey, nodeByKey = new Map(); - for (i4 = 0; i4 < n3; ++i4) { - d3 = nodes[i4], node = nodes[i4] = new Node(d3); - if ((nodeId = id(d3, i4, data3)) != null && (nodeId += "")) { - nodeKey = node.id = nodeId; - nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node); - } - if ((nodeId = parentId(d3, i4, data3)) != null && (nodeId += "")) { - node.parent = nodeId; - } - } - for (i4 = 0; i4 < n3; ++i4) { - node = nodes[i4]; - if (nodeId = node.parent) { - parent = nodeByKey.get(nodeId); - if (!parent) - throw new Error("missing: " + nodeId); - if (parent === ambiguous) - throw new Error("ambiguous: " + nodeId); - if (parent.children) - parent.children.push(node); - else - parent.children = [node]; - node.parent = parent; - } else { - if (root) - throw new Error("multiple roots"); - root = node; - } - } - if (!root) - throw new Error("no root"); - root.parent = preroot; - root.eachBefore(function(node2) { - node2.depth = node2.parent.depth + 1; - --n3; - }).eachBefore(computeHeight); - root.parent = null; - if (n3 > 0) - throw new Error("cycle"); - return root; - } - stratify.id = function(x6) { - return arguments.length ? (id = required(x6), stratify) : id; - }; - stratify.parentId = function(x6) { - return arguments.length ? (parentId = required(x6), stratify) : parentId; - }; - return stratify; -} - -// node_modules/d3-hierarchy/src/tree.js -function defaultSeparation2(a4, b10) { - return a4.parent === b10.parent ? 1 : 2; -} -function nextLeft(v3) { - var children = v3.children; - return children ? children[0] : v3.t; -} -function nextRight(v3) { - var children = v3.children; - return children ? children[children.length - 1] : v3.t; -} -function moveSubtree(wm, wp, shift) { - var change = shift / (wp.i - wm.i); - wp.c -= change; - wp.s += shift; - wm.c += change; - wp.z += shift; - wp.m += shift; -} -function executeShifts(v3) { - var shift = 0, change = 0, children = v3.children, i4 = children.length, w4; - while (--i4 >= 0) { - w4 = children[i4]; - w4.z += shift; - w4.m += shift; - shift += w4.s + (change += w4.c); - } -} -function nextAncestor(vim, v3, ancestor) { - return vim.a.parent === v3.parent ? vim.a : ancestor; -} -function TreeNode(node, i4) { - this._ = node; - this.parent = null; - this.children = null; - this.A = null; - this.a = this; - this.z = 0; - this.m = 0; - this.c = 0; - this.s = 0; - this.t = null; - this.i = i4; -} -TreeNode.prototype = Object.create(Node.prototype); -function treeRoot(root) { - var tree = new TreeNode(root, 0), node, nodes = [tree], child, children, i4, n3; - while (node = nodes.pop()) { - if (children = node._.children) { - node.children = new Array(n3 = children.length); - for (i4 = n3 - 1; i4 >= 0; --i4) { - nodes.push(child = node.children[i4] = new TreeNode(children[i4], i4)); - child.parent = node; - } - } - } - (tree.parent = new TreeNode(null, 0)).children = [tree]; - return tree; -} -function tree_default2() { - var separation = defaultSeparation2, dx = 1, dy = 1, nodeSize = null; - function tree(root) { - var t4 = treeRoot(root); - t4.eachAfter(firstWalk), t4.parent.m = -t4.z; - t4.eachBefore(secondWalk); - if (nodeSize) - root.eachBefore(sizeNode); - else { - var left2 = root, right2 = root, bottom = root; - root.eachBefore(function(node) { - if (node.x < left2.x) - left2 = node; - if (node.x > right2.x) - right2 = node; - if (node.depth > bottom.depth) - bottom = node; - }); - var s4 = left2 === right2 ? 1 : separation(left2, right2) / 2, tx = s4 - left2.x, kx = dx / (right2.x + s4 + tx), ky = dy / (bottom.depth || 1); - root.eachBefore(function(node) { - node.x = (node.x + tx) * kx; - node.y = node.depth * ky; - }); - } - return root; - } - function firstWalk(v3) { - var children = v3.children, siblings = v3.parent.children, w4 = v3.i ? siblings[v3.i - 1] : null; - if (children) { - executeShifts(v3); - var midpoint = (children[0].z + children[children.length - 1].z) / 2; - if (w4) { - v3.z = w4.z + separation(v3._, w4._); - v3.m = v3.z - midpoint; - } else { - v3.z = midpoint; - } - } else if (w4) { - v3.z = w4.z + separation(v3._, w4._); - } - v3.parent.A = apportion(v3, w4, v3.parent.A || siblings[0]); - } - function secondWalk(v3) { - v3._.x = v3.z + v3.parent.m; - v3.m += v3.parent.m; - } - function apportion(v3, w4, ancestor) { - if (w4) { - var vip = v3, vop = v3, vim = w4, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift; - while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) { - vom = nextLeft(vom); - vop = nextRight(vop); - vop.a = v3; - shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); - if (shift > 0) { - moveSubtree(nextAncestor(vim, v3, ancestor), v3, shift); - sip += shift; - sop += shift; - } - sim += vim.m; - sip += vip.m; - som += vom.m; - sop += vop.m; - } - if (vim && !nextRight(vop)) { - vop.t = vim; - vop.m += sim - sop; - } - if (vip && !nextLeft(vom)) { - vom.t = vip; - vom.m += sip - som; - ancestor = v3; - } - } - return ancestor; - } - function sizeNode(node) { - node.x *= dx; - node.y = node.depth * dy; - } - tree.separation = function(x6) { - return arguments.length ? (separation = x6, tree) : separation; - }; - tree.size = function(x6) { - return arguments.length ? (nodeSize = false, dx = +x6[0], dy = +x6[1], tree) : nodeSize ? null : [dx, dy]; - }; - tree.nodeSize = function(x6) { - return arguments.length ? (nodeSize = true, dx = +x6[0], dy = +x6[1], tree) : nodeSize ? [dx, dy] : null; - }; - return tree; -} - -// node_modules/d3-hierarchy/src/treemap/slice.js -function slice_default(parent, x0, y0, x1, y1) { - var nodes = parent.children, node, i4 = -1, n3 = nodes.length, k4 = parent.value && (y1 - y0) / parent.value; - while (++i4 < n3) { - node = nodes[i4], node.x0 = x0, node.x1 = x1; - node.y0 = y0, node.y1 = y0 += node.value * k4; - } -} - -// node_modules/d3-hierarchy/src/treemap/squarify.js -var phi = (1 + Math.sqrt(5)) / 2; -function squarifyRatio(ratio, parent, x0, y0, x1, y1) { - var rows = [], nodes = parent.children, row, nodeValue, i0 = 0, i1 = 0, n3 = nodes.length, dx, dy, value2 = parent.value, sumValue, minValue, maxValue, newRatio, minRatio, alpha, beta; - while (i0 < n3) { - dx = x1 - x0, dy = y1 - y0; - do - sumValue = nodes[i1++].value; - while (!sumValue && i1 < n3); - minValue = maxValue = sumValue; - alpha = Math.max(dy / dx, dx / dy) / (value2 * ratio); - beta = sumValue * sumValue * alpha; - minRatio = Math.max(maxValue / beta, beta / minValue); - for (; i1 < n3; ++i1) { - sumValue += nodeValue = nodes[i1].value; - if (nodeValue < minValue) - minValue = nodeValue; - if (nodeValue > maxValue) - maxValue = nodeValue; - beta = sumValue * sumValue * alpha; - newRatio = Math.max(maxValue / beta, beta / minValue); - if (newRatio > minRatio) { - sumValue -= nodeValue; - break; - } - minRatio = newRatio; - } - rows.push(row = { value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1) }); - if (row.dice) - dice_default(row, x0, y0, x1, value2 ? y0 += dy * sumValue / value2 : y1); - else - slice_default(row, x0, y0, value2 ? x0 += dx * sumValue / value2 : x1, y1); - value2 -= sumValue, i0 = i1; - } - return rows; -} -var squarify_default = function custom10(ratio) { - function squarify(parent, x0, y0, x1, y1) { - squarifyRatio(ratio, parent, x0, y0, x1, y1); - } - squarify.ratio = function(x6) { - return custom10((x6 = +x6) > 1 ? x6 : 1); - }; - return squarify; -}(phi); - -// node_modules/d3-hierarchy/src/treemap/index.js -function treemap_default() { - var tile = squarify_default, round5 = false, dx = 1, dy = 1, paddingStack = [0], paddingInner = constantZero, paddingTop = constantZero, paddingRight = constantZero, paddingBottom = constantZero, paddingLeft = constantZero; - function treemap2(root) { - root.x0 = root.y0 = 0; - root.x1 = dx; - root.y1 = dy; - root.eachBefore(positionNode); - paddingStack = [0]; - if (round5) - root.eachBefore(round_default); - return root; - } - function positionNode(node) { - var p4 = paddingStack[node.depth], x0 = node.x0 + p4, y0 = node.y0 + p4, x1 = node.x1 - p4, y1 = node.y1 - p4; - if (x1 < x0) - x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) - y0 = y1 = (y0 + y1) / 2; - node.x0 = x0; - node.y0 = y0; - node.x1 = x1; - node.y1 = y1; - if (node.children) { - p4 = paddingStack[node.depth + 1] = paddingInner(node) / 2; - x0 += paddingLeft(node) - p4; - y0 += paddingTop(node) - p4; - x1 -= paddingRight(node) - p4; - y1 -= paddingBottom(node) - p4; - if (x1 < x0) - x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) - y0 = y1 = (y0 + y1) / 2; - tile(node, x0, y0, x1, y1); - } - } - treemap2.round = function(x6) { - return arguments.length ? (round5 = !!x6, treemap2) : round5; - }; - treemap2.size = function(x6) { - return arguments.length ? (dx = +x6[0], dy = +x6[1], treemap2) : [dx, dy]; - }; - treemap2.tile = function(x6) { - return arguments.length ? (tile = required(x6), treemap2) : tile; - }; - treemap2.padding = function(x6) { - return arguments.length ? treemap2.paddingInner(x6).paddingOuter(x6) : treemap2.paddingInner(); - }; - treemap2.paddingInner = function(x6) { - return arguments.length ? (paddingInner = typeof x6 === "function" ? x6 : constant_default2(+x6), treemap2) : paddingInner; - }; - treemap2.paddingOuter = function(x6) { - return arguments.length ? treemap2.paddingTop(x6).paddingRight(x6).paddingBottom(x6).paddingLeft(x6) : treemap2.paddingTop(); - }; - treemap2.paddingTop = function(x6) { - return arguments.length ? (paddingTop = typeof x6 === "function" ? x6 : constant_default2(+x6), treemap2) : paddingTop; - }; - treemap2.paddingRight = function(x6) { - return arguments.length ? (paddingRight = typeof x6 === "function" ? x6 : constant_default2(+x6), treemap2) : paddingRight; - }; - treemap2.paddingBottom = function(x6) { - return arguments.length ? (paddingBottom = typeof x6 === "function" ? x6 : constant_default2(+x6), treemap2) : paddingBottom; - }; - treemap2.paddingLeft = function(x6) { - return arguments.length ? (paddingLeft = typeof x6 === "function" ? x6 : constant_default2(+x6), treemap2) : paddingLeft; - }; - return treemap2; -} - -// node_modules/d3-hierarchy/src/treemap/binary.js -function binary_default(parent, x0, y0, x1, y1) { - var nodes = parent.children, i4, n3 = nodes.length, sum, sums = new Array(n3 + 1); - for (sums[0] = sum = i4 = 0; i4 < n3; ++i4) { - sums[i4 + 1] = sum += nodes[i4].value; - } - partition3(0, n3, parent.value, x0, y0, x1, y1); - function partition3(i5, j4, value2, x02, y02, x12, y12) { - if (i5 >= j4 - 1) { - var node = nodes[i5]; - node.x0 = x02, node.y0 = y02; - node.x1 = x12, node.y1 = y12; - return; - } - var valueOffset = sums[i5], valueTarget = value2 / 2 + valueOffset, k4 = i5 + 1, hi = j4 - 1; - while (k4 < hi) { - var mid2 = k4 + hi >>> 1; - if (sums[mid2] < valueTarget) - k4 = mid2 + 1; - else - hi = mid2; - } - if (valueTarget - sums[k4 - 1] < sums[k4] - valueTarget && i5 + 1 < k4) - --k4; - var valueLeft = sums[k4] - valueOffset, valueRight = value2 - valueLeft; - if (x12 - x02 > y12 - y02) { - var xk = value2 ? (x02 * valueRight + x12 * valueLeft) / value2 : x12; - partition3(i5, k4, valueLeft, x02, y02, xk, y12); - partition3(k4, j4, valueRight, xk, y02, x12, y12); - } else { - var yk = value2 ? (y02 * valueRight + y12 * valueLeft) / value2 : y12; - partition3(i5, k4, valueLeft, x02, y02, x12, yk); - partition3(k4, j4, valueRight, x02, yk, x12, y12); - } - } -} - -// node_modules/d3-hierarchy/src/treemap/sliceDice.js -function sliceDice_default(parent, x0, y0, x1, y1) { - (parent.depth & 1 ? slice_default : dice_default)(parent, x0, y0, x1, y1); -} - -// node_modules/d3-hierarchy/src/treemap/resquarify.js -var resquarify_default = function custom11(ratio) { - function resquarify(parent, x0, y0, x1, y1) { - if ((rows = parent._squarify) && rows.ratio === ratio) { - var rows, row, nodes, i4, j4 = -1, n3, m4 = rows.length, value2 = parent.value; - while (++j4 < m4) { - row = rows[j4], nodes = row.children; - for (i4 = row.value = 0, n3 = nodes.length; i4 < n3; ++i4) - row.value += nodes[i4].value; - if (row.dice) - dice_default(row, x0, y0, x1, value2 ? y0 += (y1 - y0) * row.value / value2 : y1); - else - slice_default(row, x0, y0, value2 ? x0 += (x1 - x0) * row.value / value2 : x1, y1); - value2 -= row.value; - } - } else { - parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1); - rows.ratio = ratio; - } - } - resquarify.ratio = function(x6) { - return custom11((x6 = +x6) > 1 ? x6 : 1); - }; - return resquarify; -}(phi); - -// node_modules/@antv/g2plot/esm/utils/hierarchy/partition.js -var import_util393 = __toModule(require_lib()); -var DEFAULT_OPTIONS25 = { - field: "value", - size: [1, 1], - round: false, - padding: 0, - sort: function(a4, b10) { - return b10.value - a4.value; - }, - as: ["x", "y"], - ignoreParentValue: true -}; -function partition(data3, options) { - options = (0, import_util393.assign)({}, DEFAULT_OPTIONS25, options); - var as = options.as; - if (!(0, import_util393.isArray)(as) || as.length !== 2) { - throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ "x", "y" ])!'); - } - var field6; - try { - field6 = getField(options); - } catch (e4) { - console.warn(e4); - } - var partition3 = function(data4) { - return partition_default().size(options.size).round(options.round).padding(options.padding)(hierarchy(data4).sum(function(d3) { - return (0, import_util393.size)(d3.children) ? options.ignoreParentValue ? 0 : d3[field6] - (0, import_util393.reduce)(d3.children, function(a4, b10) { - return a4 + b10[field6]; - }, 0) : d3[field6]; - }).sort(options.sort)); - }; - var root = partition3(data3); - var x6 = as[0]; - var y5 = as[1]; - root.each(function(node) { - var _a6, _b; - node[x6] = [node.x0, node.x1, node.x1, node.x0]; - node[y5] = [node.y1, node.y1, node.y0, node.y0]; - node.name = node.name || ((_a6 = node.data) === null || _a6 === void 0 ? void 0 : _a6.name) || ((_b = node.data) === null || _b === void 0 ? void 0 : _b.label); - node.data.name = node.name; - ["x0", "x1", "y0", "y1"].forEach(function(prop) { - if (as.indexOf(prop) === -1) { - delete node[prop]; - } - }); - }); - return getAllNodes(root); -} - -// node_modules/@antv/g2plot/esm/utils/hierarchy/treemap.js -var import_util395 = __toModule(require_lib()); -var DEFAULT_OPTIONS26 = { - field: "value", - tile: "treemapSquarify", - size: [1, 1], - round: false, - ignoreParentValue: true, - padding: 0, - paddingInner: 0, - paddingOuter: 0, - paddingTop: 0, - paddingRight: 0, - paddingBottom: 0, - paddingLeft: 0, - as: ["x", "y"], - sort: function(a4, b10) { - return b10.value - a4.value; - }, - ratio: 0.5 * (1 + Math.sqrt(5)) -}; -function getTileMethod(tile, ratio) { - return tile === "treemapSquarify" ? src_exports2[tile].ratio(ratio) : src_exports2[tile]; -} -function treemap(data3, options) { - options = (0, import_util395.assign)({}, DEFAULT_OPTIONS26, options); - var as = options.as; - if (!(0, import_util395.isArray)(as) || as.length !== 2) { - throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ "x", "y" ])!'); - } - var field6; - try { - field6 = getField(options); - } catch (e4) { - console.warn(e4); - } - var tileMethod = getTileMethod(options.tile, options.ratio); - var partition3 = function(data4) { - return treemap_default().tile(tileMethod).size(options.size).round(options.round).padding(options.padding).paddingInner(options.paddingInner).paddingOuter(options.paddingOuter).paddingTop(options.paddingTop).paddingRight(options.paddingRight).paddingBottom(options.paddingBottom).paddingLeft(options.paddingLeft)(hierarchy(data4).sum(function(d3) { - return options.ignoreParentValue && d3.children ? 0 : d3[field6]; - }).sort(options.sort)); - }; - var root = partition3(data3); - var x6 = as[0]; - var y5 = as[1]; - root.each(function(node) { - node[x6] = [node.x0, node.x1, node.x1, node.x0]; - node[y5] = [node.y1, node.y1, node.y0, node.y0]; - ["x0", "x1", "y0", "y1"].forEach(function(prop) { - if (as.indexOf(prop) === -1) { - delete node[prop]; - } - }); - }); - return getAllNodes(root); -} - -// node_modules/@antv/g2plot/esm/plots/sunburst/utils.js -function transformData4(options) { - var data3 = options.data, colorField = options.colorField, rawFields = options.rawFields, _a6 = options.hierarchyConfig, hierarchyConfig = _a6 === void 0 ? {} : _a6; - var activeDepth = hierarchyConfig.activeDepth; - var transform18 = { - partition, - treemap - }; - var seriesField = options.seriesField; - var type2 = options.type || "partition"; - var nodes = transform18[type2](data3, __assign(__assign({ field: seriesField || "value" }, (0, import_util397.omit)(hierarchyConfig, ["activeDepth"])), { - type: "hierarchy." + type2, - as: ["x", "y"] - })); - var result = []; - nodes.forEach(function(node) { - var _a7; - var _b, _c, _d, _e, _f; - if (node.depth === 0) { - return null; - } - if (activeDepth > 0 && node.depth > activeDepth) { - return null; - } - var path = node.data.name; - var ancestorNode = __assign({}, node); - while (ancestorNode.depth > 1) { - path = ((_b = ancestorNode.parent.data) === null || _b === void 0 ? void 0 : _b.name) + " / " + path; - ancestorNode = ancestorNode.parent; - } - var nodeInfo = __assign(__assign(__assign({}, pick4(node.data, __spreadArrays(rawFields || [], [hierarchyConfig.field]))), (_a7 = {}, _a7[SUNBURST_PATH_FIELD] = path, _a7[SUNBURST_ANCESTOR_FIELD] = ancestorNode.data.name, _a7)), node); - if (seriesField) { - nodeInfo[seriesField] = node.data[seriesField] || ((_d = (_c = node.parent) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d[seriesField]); - } - if (colorField) { - nodeInfo[colorField] = node.data[colorField] || ((_f = (_e = node.parent) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f[colorField]); - } - nodeInfo.ext = hierarchyConfig; - nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS] = { hierarchyConfig, colorField, rawFields }; - result.push(nodeInfo); - }); - return result; -} - -// node_modules/@antv/g2plot/esm/plots/sunburst/adaptor.js -function geometry27(params) { - var chart = params.chart, options = params.options; - var color4 = options.color, _a6 = options.colorField, colorField = _a6 === void 0 ? SUNBURST_ANCESTOR_FIELD : _a6, sunburstStyle = options.sunburstStyle, _b = options.rawFields, rawFields = _b === void 0 ? [] : _b; - var data3 = transformData4(options); - chart.data(data3); - var style; - if (sunburstStyle) { - style = function(datum) { - return deepAssign({}, { - fillOpacity: Math.pow(0.85, datum.depth) - }, (0, import_util398.isFunction)(sunburstStyle) ? sunburstStyle(datum) : sunburstStyle); - }; - } - polygon(deepAssign({}, params, { - options: { - xField: "x", - yField: "y", - seriesField: colorField, - rawFields: (0, import_util398.uniq)(__spreadArrays(RAW_FIELDS, rawFields)), - polygon: { - color: color4, - style - } - } - })); - return params; -} -function axis15(params) { - var chart = params.chart; - chart.axis(false); - return params; -} -function label13(params) { - var chart = params.chart, options = params.options; - var label17 = options.label; - var geometry35 = findGeometry(chart, "polygon"); - if (!label17) { - geometry35.label(false); - } else { - var _a6 = label17.fields, fields = _a6 === void 0 ? ["name"] : _a6, callback = label17.callback, cfg = __rest(label17, ["fields", "callback"]); - geometry35.label({ - fields, - callback, - cfg: transformLabel(cfg) - }); - } - return params; -} -function coordinate8(params) { - var chart = params.chart, options = params.options; - var innerRadius = options.innerRadius, radius = options.radius, reflect = options.reflect; - var coord2 = chart.coordinate({ - type: "polar", - cfg: { - innerRadius, - radius - } - }); - if (reflect) { - coord2.reflect(reflect); - } - return params; -} -function meta17(params) { - var _a6; - var options = params.options; - var hierarchyConfig = options.hierarchyConfig, meta23 = options.meta; - return flow(scale7({}, (_a6 = {}, _a6[SUNBURST_Y_FIELD] = (0, import_util398.get)(meta23, (0, import_util398.get)(hierarchyConfig, ["field"], "value")), _a6)))(params); -} -function tooltip6(params) { - var chart = params.chart, options = params.options; - var tooltip10 = options.tooltip; - if (tooltip10 === false) { - chart.tooltip(false); - } else { - var tooltipOptions = tooltip10; - if (!(0, import_util398.get)(tooltip10, "fields")) { - tooltipOptions = deepAssign({}, { - customItems: function(items) { - return items.map(function(item) { - var scales = (0, import_util398.get)(chart.getOptions(), "scales"); - var pathFormatter = (0, import_util398.get)(scales, [SUNBURST_PATH_FIELD, "formatter"], function(v3) { - return v3; - }); - var valueFormatter = (0, import_util398.get)(scales, [SUNBURST_Y_FIELD, "formatter"], function(v3) { - return v3; - }); - return __assign(__assign({}, item), { name: pathFormatter(item.data[SUNBURST_PATH_FIELD]), value: valueFormatter(item.data.value) }); - }); - } - }, tooltipOptions); - } - chart.tooltip(tooltipOptions); - } - return params; -} -function adaptorInteraction(options) { - var drilldown = options.drilldown, _a6 = options.interactions, interactions = _a6 === void 0 ? [] : _a6; - if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) { - return deepAssign({}, options, { - interactions: __spreadArrays(interactions, [ - { - type: "drill-down", - cfg: { drillDownConfig: drilldown, transformData: transformData4 } - } - ]) - }); - } - return options; -} -function interaction4(params) { - var chart = params.chart, options = params.options; - var drilldown = options.drilldown; - interaction({ - chart, - options: adaptorInteraction(options) - }); - if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) { - chart.appendPadding = getAdjustAppendPadding(chart.appendPadding, (0, import_util398.get)(drilldown, ["breadCrumb", "position"])); - } - return params; -} -function adaptor25(params) { - return flow(theme, pattern("sunburstStyle"), geometry27, axis15, meta17, legend, coordinate8, tooltip6, label13, interaction4, animation, annotation())(params); -} - -// node_modules/@antv/g2plot/esm/interactions/drill-down.js -var import_util399 = __toModule(require_lib()); -function isParentNode(context) { - var data3 = (0, import_util399.get)(context, ["event", "data", "data"], {}); - return (0, import_util399.isArray)(data3.children) && data3.children.length > 0; -} -function inCenter(context) { - var coordinate11 = context.view.getCoordinate(); - var innerRadius = coordinate11.innerRadius; - if (innerRadius) { - var _a6 = context.event, x6 = _a6.x, y5 = _a6.y; - var _b = coordinate11.center, centerX = _b.x, centerY = _b.y; - var r4 = coordinate11.getRadius() * innerRadius; - var distance15 = Math.sqrt(Math.pow(centerX - x6, 2) + Math.pow(centerY - y5, 2)); - return distance15 < r4; - } - return false; -} -registerAction("drill-down-action", DrillDownAction); -registerInteraction("drill-down", { - showEnable: [ - { trigger: "element:mouseenter", action: "cursor:pointer", isEnable: isParentNode }, - { trigger: "element:mouseleave", action: "cursor:default" }, - { trigger: "element:mouseleave", action: "cursor:pointer", isEnable: inCenter } - ], - start: [ - { - trigger: "element:click", - isEnable: isParentNode, - action: ["drill-down-action:click"] - }, - { - trigger: "afterchangesize", - action: ["drill-down-action:resetPosition"] - }, - { - trigger: "click", - isEnable: inCenter, - action: ["drill-down-action:back"] - } - ] -}); - -// node_modules/@antv/g2plot/esm/plots/sunburst/index.js -var Sunburst = function(_super) { - __extends(Sunburst2, _super); - function Sunburst2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "sunburst"; - return _this; - } - Sunburst2.getDefaultOptions = function() { - return DEFAULT_OPTIONS24; - }; - Sunburst2.prototype.getDefaultOptions = function() { - return Sunburst2.getDefaultOptions(); - }; - Sunburst2.prototype.getSchemaAdaptor = function() { - return adaptor25; - }; - Sunburst2.SUNBURST_ANCESTOR_FIELD = SUNBURST_ANCESTOR_FIELD; - Sunburst2.SUNBURST_PATH_FIELD = SUNBURST_PATH_FIELD; - Sunburst2.NODE_ANCESTORS_FIELD = NODE_ANCESTORS_FIELD; - return Sunburst2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/gauge/adaptor.js -var import_util402 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/gauge/constants.js -var _a5; -var RANGE_VALUE = "range"; -var RANGE_TYPE = "type"; -var PERCENT = "percent"; -var DEFAULT_COLOR2 = "#f0f0f0"; -var INDICATEOR_VIEW_ID = "indicator-view"; -var RANGE_VIEW_ID = "range-view"; -var DEFAULT_OPTIONS27 = { - percent: 0, - range: { - ticks: [] - }, - innerRadius: 0.9, - radius: 0.95, - startAngle: -7 / 6 * Math.PI, - endAngle: 1 / 6 * Math.PI, - syncViewPadding: true, - axis: { - line: null, - label: { - offset: -24, - style: { - textAlign: "center", - textBaseline: "middle" - } - }, - subTickLine: { - length: -8 - }, - tickLine: { - length: -12 - }, - grid: null - }, - indicator: { - pointer: { - style: { - lineWidth: 5, - lineCap: "round" - } - }, - pin: { - style: { - r: 9.75, - lineWidth: 4.5, - fill: "#fff" - } - } - }, - statistic: { - title: false - }, - meta: (_a5 = {}, _a5[RANGE_VALUE] = { - sync: "v" - }, _a5[PERCENT] = { - sync: "v", - tickCount: 5, - tickInterval: 0.2 - }, _a5), - animation: false -}; - -// node_modules/@antv/g2plot/esm/plots/gauge/utils.js -var import_util401 = __toModule(require_lib()); -function processRangeData(range, percent2) { - return range.map(function(r4, idx) { - var _a6; - return _a6 = {}, _a6[RANGE_VALUE] = r4 - (range[idx - 1] || 0), _a6[RANGE_TYPE] = "" + idx, _a6[PERCENT] = percent2, _a6; - }).filter(function(d3) { - return !!d3[RANGE_VALUE]; - }); -} -function getIndicatorData(percent2) { - var _a6; - return [(_a6 = {}, _a6[PERCENT] = (0, import_util401.clamp)(percent2, 0, 1), _a6)]; -} -function getRangeData(percent2, range) { - var ticks = (0, import_util401.get)(range, ["ticks"], []); - var clampTicks = (0, import_util401.size)(ticks) ? ticks : [0, (0, import_util401.clamp)(percent2, 0, 1), 1]; - return processRangeData(clampTicks, percent2); -} - -// node_modules/@antv/g2plot/esm/plots/gauge/adaptor.js -function geometry28(params) { - var chart = params.chart, options = params.options; - var percent2 = options.percent, range = options.range, radius = options.radius, innerRadius = options.innerRadius, startAngle = options.startAngle, endAngle = options.endAngle, axis22 = options.axis, indicator = options.indicator, gaugeStyle = options.gaugeStyle, type2 = options.type, meter = options.meter; - var color4 = range.color, rangeWidth = range.width; - if (indicator) { - var indicatorData = getIndicatorData(percent2); - var v1 = chart.createView({ id: INDICATEOR_VIEW_ID }); - v1.data(indicatorData); - v1.point().position(PERCENT + "*1").shape(indicator.shape || "gauge-indicator").customInfo({ - defaultColor: chart.getTheme().defaultColor, - indicator - }); - v1.coordinate("polar", { - startAngle, - endAngle, - radius: innerRadius * radius - }); - v1.axis(PERCENT, axis22); - v1.scale(PERCENT, pick4(axis22, AXIS_META_CONFIG_KEYS)); - } - var rangeData = getRangeData(percent2, options.range); - var v22 = chart.createView({ id: RANGE_VIEW_ID }); - v22.data(rangeData); - var rangeColor = (0, import_util402.isString)(color4) ? [color4, DEFAULT_COLOR2] : color4; - var ext = interval2({ - chart: v22, - options: { - xField: "1", - yField: RANGE_VALUE, - seriesField: RANGE_TYPE, - rawFields: [PERCENT], - isStack: true, - interval: { - color: rangeColor, - style: gaugeStyle, - shape: type2 === "meter" ? "meter-gauge" : null - }, - args: { - zIndexReversed: true, - sortZIndex: true - }, - minColumnWidth: rangeWidth, - maxColumnWidth: rangeWidth - } - }).ext; - var geometry35 = ext.geometry; - geometry35.customInfo({ meter }); - v22.coordinate("polar", { - innerRadius, - radius, - startAngle, - endAngle - }).transpose(); - return params; -} -function meta18(params) { - var _a6; - return flow(scale7((_a6 = { - range: { - min: 0, - max: 1, - maxLimit: 1, - minLimit: 0 - } - }, _a6[PERCENT] = {}, _a6)))(params); -} -function statistic3(params, updated) { - var chart = params.chart, options = params.options; - var statistic4 = options.statistic, percent2 = options.percent; - chart.getController("annotation").clear(true); - if (statistic4) { - var contentOption = statistic4.content; - var transformContent = void 0; - if (contentOption) { - transformContent = deepAssign({}, { - content: (percent2 * 100).toFixed(2) + "%", - style: { - opacity: 0.75, - fontSize: "30px", - lineHeight: 1, - textAlign: "center", - color: "rgba(44,53,66,0.85)" - } - }, contentOption); - } - renderGaugeStatistic(chart, { statistic: __assign(__assign({}, statistic4), { content: transformContent }) }, { percent: percent2 }); - } - if (updated) { - chart.render(true); - } - return params; -} -function other(params) { - var chart = params.chart; - chart.legend(false); - chart.tooltip(false); - return params; -} -function adaptor26(params) { - return flow(theme, animation, geometry28, meta18, statistic3, interaction, annotation(), other)(params); -} - -// node_modules/@antv/g2plot/esm/plots/gauge/shapes/indicator.js -registerShape("point", "gauge-indicator", { - draw: function(cfg, container2) { - var _a6 = cfg.customInfo, indicator = _a6.indicator, defaultColor = _a6.defaultColor; - var _b = indicator, pointer = _b.pointer, pin2 = _b.pin; - var group3 = container2.addGroup(); - var center2 = this.parsePoint({ x: 0, y: 0 }); - if (pointer) { - group3.addShape("line", { - name: "pointer", - attrs: __assign({ x1: center2.x, y1: center2.y, x2: cfg.x, y2: cfg.y, stroke: defaultColor }, pointer.style) - }); - } - if (pin2) { - group3.addShape("circle", { - name: "pin", - attrs: __assign({ x: center2.x, y: center2.y, stroke: defaultColor }, pin2.style) - }); - } - return group3; - } -}); - -// node_modules/@antv/g2plot/esm/plots/gauge/shapes/meter-gauge.js -var import_util403 = __toModule(require_lib()); -registerShape("interval", "meter-gauge", { - draw: function(cfg, container2) { - var _a6 = cfg.customInfo.meter, meter = _a6 === void 0 ? {} : _a6; - var _b = meter.steps, STEP = _b === void 0 ? 50 : _b, _c = meter.stepRatio, STEP_RATIO = _c === void 0 ? 0.5 : _c; - STEP = STEP < 1 ? 1 : STEP; - STEP_RATIO = (0, import_util403.clamp)(STEP_RATIO, 0, 1); - var _d = this.coordinate, COORD_START_ANGLE = _d.startAngle, COORD_END_ANGLE = _d.endAngle; - var GAP2 = 0; - if (STEP_RATIO > 0 && STEP_RATIO < 1) { - var TOTAL = COORD_END_ANGLE - COORD_START_ANGLE; - GAP2 = TOTAL / STEP / (STEP_RATIO / (1 - STEP_RATIO) + 1 - 1 / STEP); - } - var INTERVAL = GAP2 / (1 - STEP_RATIO) * STEP_RATIO; - var group3 = container2.addGroup(); - var center2 = this.coordinate.getCenter(); - var radius = this.coordinate.getRadius(); - var _e = Util.getAngle(cfg, this.coordinate), START_ANGLE = _e.startAngle, END_ANGLE = _e.endAngle; - for (var startAngle = START_ANGLE; startAngle < END_ANGLE; ) { - var endAngle = void 0; - var r4 = (startAngle - COORD_START_ANGLE) % (INTERVAL + GAP2); - if (r4 < INTERVAL) { - endAngle = startAngle + (INTERVAL - r4); - } else { - startAngle += INTERVAL + GAP2 - r4; - endAngle = startAngle + INTERVAL; - } - var path = Util.getSectorPath(center2.x, center2.y, radius, startAngle, Math.min(endAngle, END_ANGLE), radius * this.coordinate.innerRadius); - group3.addShape("path", { - name: "meter-gauge", - attrs: { - path, - fill: cfg.color, - stroke: cfg.color, - lineWidth: 0.5 - } - }); - startAngle = endAngle + GAP2; - } - return group3; - } -}); - -// node_modules/@antv/g2plot/esm/plots/gauge/index.js -var Gauge = function(_super) { - __extends(Gauge2, _super); - function Gauge2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "gauge"; - return _this; - } - Gauge2.getDefaultOptions = function() { - return DEFAULT_OPTIONS27; - }; - Gauge2.prototype.changeData = function(percent2) { - this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, event_default.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null)); - this.updateOption({ percent: percent2 }); - var indicatorView = this.chart.views.find(function(v3) { - return v3.id === INDICATEOR_VIEW_ID; - }); - if (indicatorView) { - indicatorView.data(getIndicatorData(percent2)); - } - var rangeView = this.chart.views.find(function(v3) { - return v3.id === RANGE_VIEW_ID; - }); - if (rangeView) { - rangeView.data(getRangeData(percent2, this.options.range)); - } - statistic3({ chart: this.chart, options: this.options }, true); - this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, event_default.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null)); - }; - Gauge2.prototype.getDefaultOptions = function() { - return Gauge2.getDefaultOptions(); - }; - Gauge2.prototype.getSchemaAdaptor = function() { - return adaptor26; - }; - return Gauge2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/waterfall/adaptor.js -var import_util406 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/waterfall/constant.js -var Y_FIELD3 = "$$yField$$"; -var DIFF_FIELD = "$$diffField$$"; -var ABSOLUTE_FIELD = "$$absoluteField$$"; -var IS_TOTAL = "$$isTotal$$"; -var DEFAULT_OPTIONS28 = { - label: {}, - leaderLine: { - style: { - lineWidth: 1, - stroke: "#8c8c8c", - lineDash: [4, 2] - } - }, - total: { - style: { - fill: "rgba(0, 0, 0, 0.25)" - } - }, - interactions: [{ type: "element-active" }], - risingFill: "#f4664a", - fallingFill: "#30bf78", - waterfallStyle: { - fill: "rgba(0, 0, 0, 0.25)" - }, - yAxis: { - grid: { - line: { - style: { - lineDash: [4, 2] - } - } - } - } -}; - -// node_modules/@antv/g2plot/esm/plots/waterfall/utils.js -var import_util404 = __toModule(require_lib()); -function processData(data3, xField, yField, newYField, total) { - var _a6; - var newData = []; - (0, import_util404.reduce)(data3, function(r4, d3) { - var _a7; - log2(LEVEL.WARN, (0, import_util404.isNumber)(d3[yField]), d3[yField] + " is not a valid number"); - var value2 = (0, import_util404.isUndefined)(d3[yField]) ? null : d3[yField]; - newData.push(__assign(__assign({}, d3), (_a7 = {}, _a7[newYField] = [r4, r4 + value2], _a7))); - return r4 + value2; - }, 0); - if (newData.length && total) { - var sum = (0, import_util404.get)(newData, [[data3.length - 1], newYField, [1]]); - newData.push((_a6 = {}, _a6[xField] = total.label, _a6[yField] = sum, _a6[newYField] = [0, sum], _a6)); - } - return newData; -} -function transformData5(data3, xField, yField, total) { - var processed = processData(data3, xField, yField, Y_FIELD3, total); - return processed.map(function(d3, dIdx) { - var _a6; - if (!(0, import_util404.isObject)(d3)) { - return d3; - } - return __assign(__assign({}, d3), (_a6 = {}, _a6[ABSOLUTE_FIELD] = d3[Y_FIELD3][1], _a6[DIFF_FIELD] = d3[Y_FIELD3][1] - d3[Y_FIELD3][0], _a6[IS_TOTAL] = dIdx === data3.length, _a6)); - }); -} - -// node_modules/@antv/g2plot/esm/plots/waterfall/shape.js -var import_util405 = __toModule(require_lib()); -function getRectPath2(points) { - var path = []; - for (var i4 = 0; i4 < points.length; i4++) { - var point2 = points[i4]; - if (point2) { - var action = i4 === 0 ? "M" : "L"; - path.push([action, point2.x, point2.y]); - } - } - var first = points[0]; - path.push(["L", first.x, first.y]); - path.push(["z"]); - return path; -} -function getFillAttrs3(cfg) { - return deepAssign({}, cfg.defaultStyle, cfg.style, { fill: cfg.color }); -} -registerShape("interval", "waterfall", { - draw: function(cfg, container2) { - var customInfo = cfg.customInfo, points = cfg.points, nextPoints = cfg.nextPoints; - var group3 = container2.addGroup(); - var rectPath3 = this.parsePath(getRectPath2(points)); - var fillAttrs = getFillAttrs3(cfg); - group3.addShape("path", { - attrs: __assign(__assign({}, fillAttrs), { path: rectPath3 }) - }); - var leaderLineCfg = (0, import_util405.get)(customInfo, "leaderLine"); - if (leaderLineCfg && nextPoints) { - var linkPath = [ - ["M", points[2].x, points[2].y], - ["L", nextPoints[0].x, nextPoints[0].y] - ]; - if (points[2].y === nextPoints[1].y) { - linkPath[1] = ["L", nextPoints[1].x, nextPoints[1].y]; - } - linkPath = this.parsePath(linkPath); - group3.addShape("path", { - attrs: __assign({ path: linkPath }, leaderLineCfg.style || {}) - }); - } - return group3; - } -}); - -// node_modules/@antv/g2plot/esm/plots/waterfall/adaptor.js -function defaultOptions4(params) { - var _a6 = params.options, locale = _a6.locale, total = _a6.total; - var localeTotalLabel = getLocale(locale).get(["waterfall", "total"]); - if (total && typeof total.label !== "string" && localeTotalLabel) { - params.options.total.label = localeTotalLabel; - } - return params; -} -function geometry29(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, xField = options.xField, yField = options.yField, total = options.total, leaderLine = options.leaderLine, columnWidthRatio = options.columnWidthRatio, waterfallStyle = options.waterfallStyle, risingFill = options.risingFill, fallingFill = options.fallingFill, color4 = options.color; - chart.data(transformData5(data3, xField, yField, total)); - var colorMapping = color4 || function(datum) { - if ((0, import_util406.get)(datum, [IS_TOTAL])) { - return (0, import_util406.get)(total, ["style", "fill"], ""); - } - return (0, import_util406.get)(datum, [Y_FIELD3, 1]) - (0, import_util406.get)(datum, [Y_FIELD3, 0]) > 0 ? risingFill : fallingFill; - }; - var p4 = deepAssign({}, params, { - options: { - xField, - yField: Y_FIELD3, - seriesField: xField, - rawFields: [yField, DIFF_FIELD, IS_TOTAL, Y_FIELD3], - widthRatio: columnWidthRatio, - interval: { - style: waterfallStyle, - shape: "waterfall", - color: colorMapping - } - } - }); - var ext = interval2(p4).ext; - var geometry35 = ext.geometry; - geometry35.customInfo({ leaderLine }); - return params; -} -function meta19(params) { - var _a6, _b; - var options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, meta23 = options.meta; - var Y_FIELD_META = deepAssign({}, { alias: yField }, (0, import_util406.get)(meta23, yField)); - return flow(scale7((_a6 = {}, _a6[xField] = xAxis, _a6[yField] = yAxis, _a6[Y_FIELD3] = yAxis, _a6), deepAssign({}, meta23, (_b = {}, _b[Y_FIELD3] = Y_FIELD_META, _b[DIFF_FIELD] = Y_FIELD_META, _b[ABSOLUTE_FIELD] = Y_FIELD_META, _b))))(params); -} -function axis16(params) { - var chart = params.chart, options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - if (xAxis === false) { - chart.axis(xField, false); - } else { - chart.axis(xField, xAxis); - } - if (yAxis === false) { - chart.axis(yField, false); - chart.axis(Y_FIELD3, false); - } else { - chart.axis(yField, yAxis); - chart.axis(Y_FIELD3, yAxis); - } - return params; -} -function legend16(params) { - var chart = params.chart, options = params.options; - var legend18 = options.legend, total = options.total, risingFill = options.risingFill, fallingFill = options.fallingFill, locale = options.locale; - var i18n = getLocale(locale); - if (legend18 === false) { - chart.legend(false); - } else { - var items = [ - { - name: i18n.get(["general", "increase"]), - value: "increase", - marker: { symbol: "square", style: { r: 5, fill: risingFill } } - }, - { - name: i18n.get(["general", "decrease"]), - value: "decrease", - marker: { symbol: "square", style: { r: 5, fill: fallingFill } } - } - ]; - if (total) { - items.push({ - name: total.label || "", - value: "total", - marker: { - symbol: "square", - style: deepAssign({}, { r: 5 }, (0, import_util406.get)(total, "style")) - } - }); - } - chart.legend(deepAssign({}, { - custom: true, - position: "top", - items - }, legend18)); - chart.removeInteraction("legend-filter"); - } - return params; -} -function label14(params) { - var chart = params.chart, options = params.options; - var label17 = options.label, labelMode = options.labelMode, xField = options.xField; - var geometry35 = findGeometry(chart, "interval"); - if (!label17) { - geometry35.label(false); - } else { - var callback = label17.callback, cfg = __rest(label17, ["callback"]); - geometry35.label({ - fields: labelMode === "absolute" ? [ABSOLUTE_FIELD, xField] : [DIFF_FIELD, xField], - callback, - cfg: transformLabel(cfg) - }); - } - return params; -} -function tooltip7(params) { - var chart = params.chart, options = params.options; - var tooltip10 = options.tooltip, xField = options.xField, yField = options.yField; - if (tooltip10 !== false) { - chart.tooltip(__assign({ - showCrosshairs: false, - showMarkers: false, - shared: true, - fields: [yField] - }, tooltip10)); - var geometry_1 = chart.geometries[0]; - (tooltip10 === null || tooltip10 === void 0 ? void 0 : tooltip10.formatter) ? geometry_1.tooltip(xField + "*" + yField, tooltip10.formatter) : geometry_1.tooltip(yField); - } else { - chart.tooltip(false); - } - return params; -} -function adaptor27(params) { - return flow(defaultOptions4, theme, geometry29, meta19, axis16, legend16, tooltip7, label14, state, interaction, animation, annotation())(params); -} - -// node_modules/@antv/g2plot/esm/plots/waterfall/index.js -var Waterfall = function(_super) { - __extends(Waterfall2, _super); - function Waterfall2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "waterfall"; - return _this; - } - Waterfall2.getDefaultOptions = function() { - return DEFAULT_OPTIONS28; - }; - Waterfall2.prototype.changeData = function(data3) { - var _a6 = this.options, xField = _a6.xField, yField = _a6.yField, total = _a6.total; - this.updateOption({ data: data3 }); - this.chart.changeData(transformData5(data3, xField, yField, total)); - }; - Waterfall2.prototype.getSchemaAdaptor = function() { - return adaptor27; - }; - Waterfall2.prototype.getDefaultOptions = function() { - return Waterfall2.getDefaultOptions(); - }; - return Waterfall2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/radial-bar/utils.js -function getScaleMax(maxAngle, yField, data3) { - var yData = data3.map(function(item) { - return item[yField]; - }).filter(function(v3) { - return v3 !== void 0; - }); - var maxValue = yData.length > 0 ? Math.max.apply(Math, yData) : 0; - var formatRadian = Math.abs(maxAngle) % 360; - if (!formatRadian) { - return maxValue; - } - return maxValue * 360 / formatRadian; -} -function getStackedData(data3, xField, yField) { - var stackedData = []; - data3.forEach(function(item) { - var valueItem = stackedData.find(function(v3) { - return v3[xField] === item[xField]; - }); - if (valueItem) { - valueItem[yField] += item[yField] || null; - } else { - stackedData.push(__assign({}, item)); - } - }); - return stackedData; -} - -// node_modules/@antv/g2plot/esm/plots/radial-bar/adaptor.js -function geometry30(params) { - var chart = params.chart, options = params.options; - var style = options.barStyle, color4 = options.color, tooltip10 = options.tooltip, colorField = options.colorField, type2 = options.type, xField = options.xField, yField = options.yField, data3 = options.data; - var processData2 = processIllegalData(data3, yField); - chart.data(processData2); - var p4 = deepAssign({}, params, { - options: { - tooltip: tooltip10, - seriesField: colorField, - interval: { - style, - color: color4, - shape: type2 === "line" ? "line" : "intervel" - }, - minColumnWidth: options.minBarWidth, - maxColumnWidth: options.maxBarWidth, - columnBackground: options.barBackground - } - }); - interval2(p4); - if (type2 === "line") { - point({ - chart, - options: { xField, yField, seriesField: colorField, point: { shape: "circle", color: color4 } } - }); - } - return params; -} -function meta20(params) { - var _a6; - var options = params.options; - var yField = options.yField, xField = options.xField, data3 = options.data, isStack = options.isStack, isGroup = options.isGroup, colorField = options.colorField, maxAngle = options.maxAngle; - var actualData = isStack && !isGroup && colorField ? getStackedData(data3, xField, yField) : data3; - var processData2 = processIllegalData(actualData, yField); - return flow(scale7((_a6 = {}, _a6[yField] = { - min: 0, - max: getScaleMax(maxAngle, yField, processData2) - }, _a6)))(params); -} -function coordinate9(params) { - var chart = params.chart, options = params.options; - var radius = options.radius, innerRadius = options.innerRadius, startAngle = options.startAngle, endAngle = options.endAngle; - chart.coordinate({ - type: "polar", - cfg: { - radius, - innerRadius, - startAngle, - endAngle - } - }).transpose(); - return params; -} -function axis17(params) { - var chart = params.chart, options = params.options; - var xField = options.xField, xAxis = options.xAxis; - chart.axis(xField, xAxis); - return params; -} -function label15(params) { - var chart = params.chart, options = params.options; - var label17 = options.label, yField = options.yField; - var intervalGeometry = findGeometry(chart, "interval"); - if (!label17) { - intervalGeometry.label(false); - } else { - var callback = label17.callback, cfg = __rest(label17, ["callback"]); - intervalGeometry.label({ - fields: [yField], - callback, - cfg: __assign(__assign({}, transformLabel(cfg)), { type: "polar" }) - }); - } - return params; -} -function adaptor28(params) { - return flow(pattern("barStyle"), geometry30, meta20, axis17, coordinate9, interaction, animation, theme, tooltip, legend, annotation(), label15)(params); -} - -// node_modules/@antv/g2plot/esm/plots/radial-bar/constant.js -var DEFAULT_OPTIONS29 = deepAssign({}, Plot.getDefaultOptions(), { - interactions: [{ type: "element-active" }], - legend: false, - tooltip: { - showMarkers: false - }, - xAxis: { - grid: null, - tickLine: null, - line: null - }, - maxAngle: 240 -}); - -// node_modules/@antv/g2plot/esm/plots/radial-bar/index.js -var RadialBar = function(_super) { - __extends(RadialBar2, _super); - function RadialBar2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "radial-bar"; - return _this; - } - RadialBar2.getDefaultOptions = function() { - return DEFAULT_OPTIONS29; - }; - RadialBar2.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - meta20({ chart: this.chart, options: this.options }); - this.chart.changeData(data3); - }; - RadialBar2.prototype.getDefaultOptions = function() { - return RadialBar2.getDefaultOptions(); - }; - RadialBar2.prototype.getSchemaAdaptor = function() { - return adaptor28; - }; - return RadialBar2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/bidirectional-bar/adaptor.js -var import_util408 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/bidirectional-bar/constant.js -var FIRST_AXES_VIEW = "first-axes-view"; -var SECOND_AXES_VIEW = "second-axes-view"; -var SERIES_FIELD_KEY = "series-field-key"; - -// node_modules/@antv/g2plot/esm/plots/bidirectional-bar/utils.js -var import_util407 = __toModule(require_lib()); -function transformData6(xField, yField, seriesField, data3, reverse) { - var hopeData = []; - yField.forEach(function(d3) { - data3.forEach(function(k4) { - var _a7; - var obj = (_a7 = {}, _a7[xField] = k4[xField], _a7[seriesField] = d3, _a7[d3] = k4[d3], _a7); - hopeData.push(obj); - }); - }); - var groupData = Object.values((0, import_util407.groupBy)(hopeData, seriesField)); - var _a6 = groupData[0], data1 = _a6 === void 0 ? [] : _a6, _b = groupData[1], data22 = _b === void 0 ? [] : _b; - return reverse ? [data1.reverse(), data22.reverse()] : [data1, data22]; -} -function isHorizontal(layout6) { - return layout6 !== "vertical"; -} -function syncViewPadding(chart, views, p4) { - var v1 = views[0], v22 = views[1]; - var p1 = v1.autoPadding; - var p22 = v22.autoPadding; - var _a6 = chart.__axisPosition, layout6 = _a6.layout, position2 = _a6.position; - if (isHorizontal(layout6) && position2 === "top") { - v1.autoPadding = p4.instance(p1.top, 0, p1.bottom, p1.left); - v22.autoPadding = p4.instance(p22.top, p1.left, p22.bottom, 0); - } - if (isHorizontal(layout6) && position2 === "bottom") { - v1.autoPadding = p4.instance(p1.top, p1.right / 2 + 5, p1.bottom, p1.left); - v22.autoPadding = p4.instance(p22.top, p22.right, p22.bottom, p1.right / 2 + 5); - } - if (!isHorizontal(layout6) && position2 === "bottom") { - var left2 = p1.left >= p22.left ? p1.left : p22.left; - v1.autoPadding = p4.instance(p1.top, p1.right, p1.bottom / 2 + 5, left2); - v22.autoPadding = p4.instance(p1.bottom / 2 + 5, p22.right, p22.bottom, left2); - } - if (!isHorizontal(layout6) && position2 === "top") { - var left2 = p1.left >= p22.left ? p1.left : p22.left; - v1.autoPadding = p4.instance(p1.top, p1.right, 0, left2); - v22.autoPadding = p4.instance(0, p22.right, p1.top, left2); - } -} - -// node_modules/@antv/g2plot/esm/plots/bidirectional-bar/adaptor.js -function geometry31(params) { - var chart = params.chart, options = params.options; - var data3 = options.data, xField = options.xField, yField = options.yField, color4 = options.color, barStyle = options.barStyle, widthRatio = options.widthRatio, legend18 = options.legend, layout6 = options.layout; - var groupData = transformData6(xField, yField, SERIES_FIELD_KEY, data3, isHorizontal(layout6)); - if (legend18) { - chart.legend(SERIES_FIELD_KEY, legend18); - } else if (legend18 === false) { - chart.legend(false); - } - var firstView; - var secondView; - var firstViewData = groupData[0], secondViewData = groupData[1]; - if (isHorizontal(layout6)) { - firstView = chart.createView({ - region: { - start: { x: 0, y: 0 }, - end: { x: 0.5, y: 1 } - }, - id: FIRST_AXES_VIEW - }); - firstView.coordinate().transpose().reflect("x"); - secondView = chart.createView({ - region: { - start: { x: 0.5, y: 0 }, - end: { x: 1, y: 1 } - }, - id: SECOND_AXES_VIEW - }); - secondView.coordinate().transpose(); - firstView.data(firstViewData); - secondView.data(secondViewData); - } else { - firstView = chart.createView({ - region: { - start: { x: 0, y: 0 }, - end: { x: 1, y: 0.5 } - }, - id: FIRST_AXES_VIEW - }); - secondView = chart.createView({ - region: { - start: { x: 0, y: 0.5 }, - end: { x: 1, y: 1 } - }, - id: SECOND_AXES_VIEW - }); - secondView.coordinate().reflect("y"); - firstView.data(firstViewData); - secondView.data(secondViewData); - } - var left2 = deepAssign({}, params, { - chart: firstView, - options: { - widthRatio, - xField, - yField: yField[0], - seriesField: SERIES_FIELD_KEY, - interval: { - color: color4, - style: barStyle - } - } - }); - interval2(left2); - var right2 = deepAssign({}, params, { - chart: secondView, - options: { - xField, - yField: yField[1], - seriesField: SERIES_FIELD_KEY, - widthRatio, - interval: { - color: color4, - style: barStyle - } - } - }); - interval2(right2); - return params; -} -function meta21(params) { - var _a6, _b, _c; - var options = params.options, chart = params.chart; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField; - var firstView = findViewById(chart, FIRST_AXES_VIEW); - var secondView = findViewById(chart, SECOND_AXES_VIEW); - var aliasMap = {}; - (0, import_util408.keys)((options === null || options === void 0 ? void 0 : options.meta) || {}).map(function(metaKey) { - if ((0, import_util408.get)(options === null || options === void 0 ? void 0 : options.meta, [metaKey, "alias"])) { - aliasMap[metaKey] = options.meta[metaKey].alias; - } - }); - chart.scale((_a6 = {}, _a6[SERIES_FIELD_KEY] = { - sync: true, - formatter: function(v3) { - return (0, import_util408.get)(aliasMap, v3, v3); - } - }, _a6)); - scale7((_b = {}, _b[xField] = xAxis, _b[yField[0]] = yAxis[yField[0]], _b))(deepAssign({}, params, { chart: firstView })); - scale7((_c = {}, _c[xField] = xAxis, _c[yField[1]] = yAxis[yField[1]], _c))(deepAssign({}, params, { chart: secondView })); - return params; -} -function axis18(params) { - var chart = params.chart, options = params.options; - var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, layout6 = options.layout; - var firstView = findViewById(chart, FIRST_AXES_VIEW); - var secondView = findViewById(chart, SECOND_AXES_VIEW); - if ((xAxis === null || xAxis === void 0 ? void 0 : xAxis.position) === "bottom") { - secondView.axis(xField, __assign(__assign({}, xAxis), { label: { formatter: function() { - return ""; - } } })); - } else { - secondView.axis(xField, false); - } - if (xAxis === false) { - firstView.axis(xField, false); - } else { - firstView.axis(xField, __assign({ - position: isHorizontal(layout6) ? "top" : "bottom" - }, xAxis)); - } - if (yAxis === false) { - firstView.axis(yField[0], false); - secondView.axis(yField[1], false); - } else { - firstView.axis(yField[0], yAxis[yField[0]]); - secondView.axis(yField[1], yAxis[yField[1]]); - } - chart.__axisPosition = { - position: firstView.getOptions().axes[xField].position, - layout: layout6 - }; - return params; -} -function interaction5(params) { - var chart = params.chart; - interaction(deepAssign({}, params, { chart: findViewById(chart, FIRST_AXES_VIEW) })); - interaction(deepAssign({}, params, { chart: findViewById(chart, SECOND_AXES_VIEW) })); - return params; -} -function limitInPlot4(params) { - var chart = params.chart, options = params.options; - var yField = options.yField, yAxis = options.yAxis; - limitInPlot2(deepAssign({}, params, { - chart: findViewById(chart, FIRST_AXES_VIEW), - options: { - yAxis: yAxis[yField[0]] - } - })); - limitInPlot2(deepAssign({}, params, { - chart: findViewById(chart, SECOND_AXES_VIEW), - options: { - yAxis: yAxis[yField[1]] - } - })); - return params; -} -function theme3(params) { - var chart = params.chart; - theme(deepAssign({}, params, { chart: findViewById(chart, FIRST_AXES_VIEW) })); - theme(deepAssign({}, params, { chart: findViewById(chart, SECOND_AXES_VIEW) })); - return params; -} -function animation4(params) { - var chart = params.chart; - animation(deepAssign({}, params, { chart: findViewById(chart, FIRST_AXES_VIEW) })); - animation(deepAssign({}, params, { chart: findViewById(chart, SECOND_AXES_VIEW) })); - return params; -} -function label16(params) { - var _this = this; - var _a6, _b; - var chart = params.chart, options = params.options; - var label17 = options.label, yField = options.yField, layout6 = options.layout; - var firstView = findViewById(chart, FIRST_AXES_VIEW); - var secondView = findViewById(chart, SECOND_AXES_VIEW); - var leftGeometry = findGeometry(firstView, "interval"); - var rightGeometry = findGeometry(secondView, "interval"); - if (!label17) { - leftGeometry.label(false); - rightGeometry.label(false); - } else { - var callback = label17.callback, cfg_1 = __rest(label17, ["callback"]); - if (!cfg_1.position) { - cfg_1.position = "middle"; - } - if (cfg_1.offset === void 0) { - cfg_1.offset = 2; - } - var leftLabelCfg = __assign({}, cfg_1); - if (isHorizontal(layout6)) { - var textAlign = ((_a6 = leftLabelCfg.style) === null || _a6 === void 0 ? void 0 : _a6.textAlign) || (cfg_1.position === "middle" ? "center" : "left"); - cfg_1.style = deepAssign({}, cfg_1.style, { textAlign }); - var textAlignMap = { left: "right", right: "left", center: "center" }; - leftLabelCfg.style = deepAssign({}, leftLabelCfg.style, { textAlign: textAlignMap[textAlign] }); - } else { - var positionMap_1 = { top: "bottom", bottom: "top", middle: "middle" }; - if (typeof cfg_1.position === "string") { - cfg_1.position = positionMap_1[cfg_1.position]; - } else if (typeof cfg_1.position === "function") { - cfg_1.position = function() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return positionMap_1[cfg_1.position.apply(_this, args)]; - }; - } - var textBaseline = ((_b = leftLabelCfg.style) === null || _b === void 0 ? void 0 : _b.textBaseline) || "bottom"; - leftLabelCfg.style = deepAssign({}, leftLabelCfg.style, { textBaseline }); - var textBaselineMap = { top: "bottom", bottom: "top", middle: "middle" }; - cfg_1.style = deepAssign({}, cfg_1.style, { textBaseline: textBaselineMap[textBaseline] }); - } - leftGeometry.label({ - fields: [yField[0]], - callback, - cfg: transformLabel(leftLabelCfg) - }); - rightGeometry.label({ - fields: [yField[1]], - callback, - cfg: transformLabel(cfg_1) - }); - } - return params; -} -function adaptor29(params) { - return flow(geometry31, meta21, axis18, limitInPlot4, theme3, label16, tooltip, interaction5, animation4)(params); -} - -// node_modules/@antv/g2plot/esm/plots/bidirectional-bar/index.js -var BidirectionalBar = function(_super) { - __extends(BidirectionalBar2, _super); - function BidirectionalBar2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "bidirectional-bar"; - return _this; - } - BidirectionalBar2.getDefaultOptions = function() { - return deepAssign({}, _super.getDefaultOptions.call(this), { - syncViewPadding - }); - }; - BidirectionalBar2.prototype.changeData = function(data3) { - if (data3 === void 0) { - data3 = []; - } - this.chart.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, event_default.fromData(this.chart, VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA, null)); - this.updateOption({ data: data3 }); - var _a6 = this.options, xField = _a6.xField, yField = _a6.yField, layout6 = _a6.layout; - var groupData = transformData6(xField, yField, SERIES_FIELD_KEY, data3, isHorizontal(layout6)); - var firstViewData = groupData[0], secondViewData = groupData[1]; - var firstView = findViewById(this.chart, FIRST_AXES_VIEW); - var secondView = findViewById(this.chart, SECOND_AXES_VIEW); - firstView.data(firstViewData); - secondView.data(secondViewData); - this.chart.render(true); - this.chart.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, event_default.fromData(this.chart, VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA, null)); - }; - BidirectionalBar2.prototype.getDefaultOptions = function() { - return BidirectionalBar2.getDefaultOptions(); - }; - BidirectionalBar2.prototype.getSchemaAdaptor = function() { - return adaptor29; - }; - BidirectionalBar2.SERIES_FIELD_KEY = SERIES_FIELD_KEY; - return BidirectionalBar2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/treemap/adaptor.js -var import_util410 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/treemap/utils.js -var import_util409 = __toModule(require_lib()); -function findInteraction(interactions, interactionType) { - if (!(0, import_util409.isArray)(interactions)) - return void 0; - return interactions.find(function(i4) { - return i4.type === interactionType; - }); -} -function enableInteraction(interactions, interactionType) { - var interaction8 = findInteraction(interactions, interactionType); - return interaction8 && interaction8.enable !== false; -} -function enableDrillInteraction(options) { - var interactions = options.interactions, drilldown = options.drilldown; - return (0, import_util409.get)(drilldown, "enabled") || enableInteraction(interactions, "treemap-drill-down"); -} -function resetDrillDown(chart) { - var drillDownInteraction = chart.interactions["drill-down"]; - if (!drillDownInteraction) - return; - var drillDownAction = drillDownInteraction.context.actions.find(function(i4) { - return i4.name === "drill-down-action"; - }); - drillDownAction.reset(); -} -function transformData7(options) { - var data3 = options.data, colorField = options.colorField, enableDrillDown = options.enableDrillDown, hierarchyConfig = options.hierarchyConfig; - var nodes = treemap(data3, __assign(__assign({}, hierarchyConfig), { - type: "hierarchy.treemap", - field: "value", - as: ["x", "y"] - })); - var result = []; - nodes.forEach(function(node) { - if (node.depth === 0) { - return null; - } - if (enableDrillDown && node.depth !== 1) { - return null; - } - if (!enableDrillDown && node.children) { - return null; - } - var curPath = node.ancestors().map(function(n3) { - return { - data: n3.data, - height: n3.height, - value: n3.value - }; - }); - var path = enableDrillDown && (0, import_util409.isArray)(data3.path) ? curPath.concat(data3.path.slice(1)) : curPath; - var nodeInfo = Object.assign({}, node.data, __assign({ x: node.x, y: node.y, depth: node.depth, value: node.value, path }, node)); - if (!node.data[colorField] && node.parent) { - var ancestorNode = node.ancestors().find(function(n3) { - return n3.data[colorField]; - }); - nodeInfo[colorField] = ancestorNode === null || ancestorNode === void 0 ? void 0 : ancestorNode.data[colorField]; - } else { - nodeInfo[colorField] = node.data[colorField]; - } - nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS] = { hierarchyConfig, colorField, enableDrillDown }; - result.push(nodeInfo); - }); - return result; -} - -// node_modules/@antv/g2plot/esm/plots/treemap/adaptor.js -function defaultOptions5(params) { - var options = params.options; - var colorField = options.colorField; - return deepAssign({ - options: { - rawFields: ["value"], - tooltip: { - fields: ["name", "value", colorField, "path"], - formatter: function(data3) { - return { - name: data3.name, - value: data3.value - }; - } - } - } - }, params); -} -function geometry32(params) { - var chart = params.chart, options = params.options; - var color4 = options.color, colorField = options.colorField, rectStyle = options.rectStyle, hierarchyConfig = options.hierarchyConfig, rawFields = options.rawFields; - var data3 = transformData7({ - data: options.data, - colorField: options.colorField, - enableDrillDown: enableDrillInteraction(options), - hierarchyConfig - }); - chart.data(data3); - polygon(deepAssign({}, params, { - options: { - xField: "x", - yField: "y", - seriesField: colorField, - rawFields, - polygon: { - color: color4, - style: rectStyle - } - } - })); - chart.coordinate().reflect("y"); - return params; -} -function axis19(params) { - var chart = params.chart; - chart.axis(false); - return params; -} -function adaptorInteraction2(options) { - var drilldown = options.drilldown, _a6 = options.interactions, interactions = _a6 === void 0 ? [] : _a6; - var enableDrillDown = enableDrillInteraction(options); - if (enableDrillDown) { - return deepAssign({}, options, { - interactions: __spreadArrays(interactions, [ - { - type: "drill-down", - cfg: { drillDownConfig: drilldown, transformData: transformData7 } - } - ]) - }); - } - return options; -} -function interaction6(params) { - var chart = params.chart, options = params.options; - var interactions = options.interactions, drilldown = options.drilldown; - interaction({ - chart, - options: adaptorInteraction2(options) - }); - var viewZoomInteraction = findInteraction(interactions, "view-zoom"); - if (viewZoomInteraction) { - if (viewZoomInteraction.enable !== false) { - chart.getCanvas().on("mousewheel", function(ev) { - ev.preventDefault(); - }); - } else { - chart.getCanvas().off("mousewheel"); - } - } - var enableDrillDown = enableDrillInteraction(options); - if (enableDrillDown) { - chart.appendPadding = getAdjustAppendPadding(chart.appendPadding, (0, import_util410.get)(drilldown, ["breadCrumb", "position"])); - } - return params; -} -function adaptor30(params) { - return flow(defaultOptions5, theme, pattern("rectStyle"), geometry32, axis19, legend, tooltip, interaction6, animation, annotation())(params); -} - -// node_modules/@antv/g2plot/esm/plots/treemap/constant.js -var DEFAULT_OPTIONS30 = { - colorField: "name", - rectStyle: { - lineWidth: 1, - stroke: "#fff" - }, - hierarchyConfig: { - tile: "treemapSquarify" - }, - label: { - fields: ["name"], - layout: { - type: "limit-in-shape" - } - }, - tooltip: { - showMarkers: false, - showTitle: false - }, - drilldown: { - enabled: false, - breadCrumb: { - position: "bottom-left", - rootText: "\u521D\u59CB", - dividerText: "/", - textStyle: { - fontSize: 12, - fill: "rgba(0, 0, 0, 0.65)", - cursor: "pointer" - }, - activeTextStyle: { - fill: "#87B5FF" - } - } - } -}; - -// node_modules/@antv/g2plot/esm/plots/treemap/index.js -var Treemap = function(_super) { - __extends(Treemap2, _super); - function Treemap2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "treemap"; - return _this; - } - Treemap2.getDefaultOptions = function() { - return DEFAULT_OPTIONS30; - }; - Treemap2.prototype.changeData = function(data3) { - var _a6 = this.options, colorField = _a6.colorField, interactions = _a6.interactions, hierarchyConfig = _a6.hierarchyConfig; - this.updateOption({ data: data3 }); - var transData = transformData7({ - data: data3, - colorField, - enableDrillDown: enableInteraction(interactions, "treemap-drill-down"), - hierarchyConfig - }); - this.chart.changeData(transData); - resetDrillDown(this.chart); - }; - Treemap2.prototype.getDefaultOptions = function() { - return Treemap2.getDefaultOptions(); - }; - Treemap2.prototype.getSchemaAdaptor = function() { - return adaptor30; - }; - return Treemap2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/sankey/index.js -var import_util416 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/sankey/adaptor.js -var import_util414 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/sankey/layout.js -var import_util412 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/sankey/sankey/align.js -var import_util411 = __toModule(require_lib()); -function targetDepth(d3) { - return d3.target.depth; -} -function left(node) { - return node.depth; -} -function right(node, n3) { - return n3 - 1 - node.height; -} -function justify(node, n3) { - return node.sourceLinks.length ? node.depth : n3 - 1; -} -function center(node) { - return node.targetLinks.length ? node.depth : node.sourceLinks.length ? (0, import_util411.minBy)(node.sourceLinks, targetDepth) - 1 : 0; -} - -// node_modules/@antv/g2plot/esm/plots/sankey/sankey/helper.js -function constant(x6) { - return function() { - return x6; - }; -} -function sumBy(arr, func) { - var r4 = 0; - for (var i4 = 0; i4 < arr.length; i4++) { - r4 += func(arr[i4]); - } - return r4; -} -function maxValueBy(arr, func) { - var r4 = -Infinity; - for (var i4 = 0; i4 < arr.length; i4++) { - r4 = Math.max(func(arr[i4]), r4); - } - return r4; -} -function minValueBy(arr, func) { - var r4 = Infinity; - for (var i4 = 0; i4 < arr.length; i4++) { - r4 = Math.min(func(arr[i4]), r4); - } - return r4; -} - -// node_modules/@antv/g2plot/esm/plots/sankey/sankey/sankey.js -function ascendingSourceBreadth(a4, b10) { - return ascendingBreadth(a4.source, b10.source) || a4.index - b10.index; -} -function ascendingTargetBreadth(a4, b10) { - return ascendingBreadth(a4.target, b10.target) || a4.index - b10.index; -} -function ascendingBreadth(a4, b10) { - return a4.y0 - b10.y0; -} -function value(d3) { - return d3.value; -} -function defaultId2(d3) { - return d3.index; -} -function defaultNodes(graph) { - return graph.nodes; -} -function defaultLinks(graph) { - return graph.links; -} -function find9(nodeById, id) { - var node = nodeById.get(id); - if (!node) - throw new Error("missing: " + id); - return node; -} -function computeLinkBreadths(_a6) { - var nodes = _a6.nodes; - for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { - var node = nodes_1[_i]; - var y0 = node.y0; - var y1 = y0; - for (var _b = 0, _c = node.sourceLinks; _b < _c.length; _b++) { - var link = _c[_b]; - link.y0 = y0 + link.width / 2; - y0 += link.width; - } - for (var _d = 0, _e = node.targetLinks; _d < _e.length; _d++) { - var link = _e[_d]; - link.y1 = y1 + link.width / 2; - y1 += link.width; - } - } -} -function Sankey() { - var x0 = 0, y0 = 0, x1 = 1, y1 = 1; - var dx = 24; - var dy = 8, py; - var id = defaultId2; - var align = justify; - var depth; - var sort2; - var linkSort; - var nodes = defaultNodes; - var links = defaultLinks; - var iterations = 6; - function sankey(arg) { - var graph = { - nodes: nodes(arg), - links: links(arg) - }; - computeNodeLinks(graph); - computeNodeValues(graph); - computeNodeDepths(graph); - computeNodeHeights(graph); - computeNodeBreadths(graph); - computeLinkBreadths(graph); - return graph; - } - sankey.update = function(graph) { - computeLinkBreadths(graph); - return graph; - }; - sankey.nodeId = function(_8) { - return arguments.length ? (id = typeof _8 === "function" ? _8 : constant(_8), sankey) : id; - }; - sankey.nodeAlign = function(_8) { - return arguments.length ? (align = typeof _8 === "function" ? _8 : constant(_8), sankey) : align; - }; - sankey.nodeDepth = function(_8) { - return arguments.length ? (depth = typeof _8 === "function" ? _8 : _8, sankey) : depth; - }; - sankey.nodeSort = function(_8) { - return arguments.length ? (sort2 = _8, sankey) : sort2; - }; - sankey.nodeWidth = function(_8) { - return arguments.length ? (dx = +_8, sankey) : dx; - }; - sankey.nodePadding = function(_8) { - return arguments.length ? (dy = py = +_8, sankey) : dy; - }; - sankey.nodes = function(_8) { - return arguments.length ? (nodes = typeof _8 === "function" ? _8 : constant(_8), sankey) : nodes; - }; - sankey.links = function(_8) { - return arguments.length ? (links = typeof _8 === "function" ? _8 : constant(_8), sankey) : links; - }; - sankey.linkSort = function(_8) { - return arguments.length ? (linkSort = _8, sankey) : linkSort; - }; - sankey.size = function(_8) { - return arguments.length ? (x0 = y0 = 0, x1 = +_8[0], y1 = +_8[1], sankey) : [x1 - x0, y1 - y0]; - }; - sankey.extent = function(_8) { - return arguments.length ? (x0 = +_8[0][0], x1 = +_8[1][0], y0 = +_8[0][1], y1 = +_8[1][1], sankey) : [ - [x0, y0], - [x1, y1] - ]; - }; - sankey.iterations = function(_8) { - return arguments.length ? (iterations = +_8, sankey) : iterations; - }; - function computeNodeLinks(_a6) { - var nodes2 = _a6.nodes, links2 = _a6.links; - nodes2.forEach(function(node, idx) { - node.index = idx; - node.sourceLinks = []; - node.targetLinks = []; - }); - var nodeById = new Map(nodes2.map(function(d3) { - return [id(d3), d3]; - })); - links2.forEach(function(link, idx) { - link.index = idx; - var source = link.source, target = link.target; - if (typeof source !== "object") - source = link.source = find9(nodeById, source); - if (typeof target !== "object") - target = link.target = find9(nodeById, target); - source.sourceLinks.push(link); - target.targetLinks.push(link); - }); - if (linkSort != null) { - for (var _i = 0, nodes_2 = nodes2; _i < nodes_2.length; _i++) { - var _b = nodes_2[_i], sourceLinks = _b.sourceLinks, targetLinks = _b.targetLinks; - sourceLinks.sort(linkSort); - targetLinks.sort(linkSort); - } - } - } - function computeNodeValues(_a6) { - var nodes2 = _a6.nodes; - for (var _i = 0, nodes_3 = nodes2; _i < nodes_3.length; _i++) { - var node = nodes_3[_i]; - node.value = node.fixedValue === void 0 ? Math.max(sumBy(node.sourceLinks, value), sumBy(node.targetLinks, value)) : node.fixedValue; - } - } - function computeNodeDepths(_a6) { - var nodes2 = _a6.nodes; - var n3 = nodes2.length; - var current = new Set(nodes2); - var next = new Set(); - var x6 = 0; - while (current.size) { - current.forEach(function(node2) { - node2.depth = x6; - for (var _i = 0, _a7 = node2.sourceLinks; _i < _a7.length; _i++) { - var target = _a7[_i].target; - next.add(target); - } - }); - if (++x6 > n3) - throw new Error("circular link"); - current = next; - next = new Set(); - } - if (depth) { - var maxDepth = Math.max(maxValueBy(nodes2, function(d3) { - return d3.depth; - }) + 1, 0); - var node = void 0; - for (var i4 = 0; i4 < nodes2.length; i4++) { - node = nodes2[i4]; - node.depth = depth.call(null, node, maxDepth); - } - } - } - function computeNodeHeights(_a6) { - var nodes2 = _a6.nodes; - var n3 = nodes2.length; - var current = new Set(nodes2); - var next = new Set(); - var x6 = 0; - while (current.size) { - current.forEach(function(node) { - node.height = x6; - for (var _i = 0, _a7 = node.targetLinks; _i < _a7.length; _i++) { - var source = _a7[_i].source; - next.add(source); - } - }); - if (++x6 > n3) - throw new Error("circular link"); - current = next; - next = new Set(); - } - } - function computeNodeLayers(_a6) { - var nodes2 = _a6.nodes; - var x6 = Math.max(maxValueBy(nodes2, function(d3) { - return d3.depth; - }) + 1, 0); - var kx = (x1 - x0 - dx) / (x6 - 1); - var columns = new Array(x6).fill(0).map(function() { - return []; - }); - for (var _i = 0, nodes_4 = nodes2; _i < nodes_4.length; _i++) { - var node = nodes_4[_i]; - var i4 = Math.max(0, Math.min(x6 - 1, Math.floor(align.call(null, node, x6)))); - node.layer = i4; - node.x0 = x0 + i4 * kx; - node.x1 = node.x0 + dx; - if (columns[i4]) - columns[i4].push(node); - else - columns[i4] = [node]; - } - if (sort2) - for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) { - var column = columns_1[_b]; - column.sort(sort2); - } - return columns; - } - function initializeNodeBreadths(columns) { - var ky = minValueBy(columns, function(c5) { - return (y1 - y0 - (c5.length - 1) * py) / sumBy(c5, value); - }); - for (var _i = 0, columns_2 = columns; _i < columns_2.length; _i++) { - var nodes_6 = columns_2[_i]; - var y5 = y0; - for (var _a6 = 0, nodes_5 = nodes_6; _a6 < nodes_5.length; _a6++) { - var node = nodes_5[_a6]; - node.y0 = y5; - node.y1 = y5 + node.value * ky; - y5 = node.y1 + py; - for (var _b = 0, _c = node.sourceLinks; _b < _c.length; _b++) { - var link = _c[_b]; - link.width = link.value * ky; - } - } - y5 = (y1 - y5 + py) / (nodes_6.length + 1); - for (var i4 = 0; i4 < nodes_6.length; ++i4) { - var node = nodes_6[i4]; - node.y0 += y5 * (i4 + 1); - node.y1 += y5 * (i4 + 1); - } - reorderLinks(nodes_6); - } - } - function computeNodeBreadths(graph) { - var columns = computeNodeLayers(graph); - py = Math.min(dy, (y1 - y0) / (maxValueBy(columns, function(c5) { - return c5.length; - }) - 1)); - initializeNodeBreadths(columns); - for (var i4 = 0; i4 < iterations; ++i4) { - var alpha = Math.pow(0.99, i4); - var beta = Math.max(1 - alpha, (i4 + 1) / iterations); - relaxRightToLeft(columns, alpha, beta); - relaxLeftToRight(columns, alpha, beta); - } - } - function relaxLeftToRight(columns, alpha, beta) { - for (var i4 = 1, n3 = columns.length; i4 < n3; ++i4) { - var column = columns[i4]; - for (var _i = 0, column_1 = column; _i < column_1.length; _i++) { - var target = column_1[_i]; - var y5 = 0; - var w4 = 0; - for (var _a6 = 0, _b = target.targetLinks; _a6 < _b.length; _a6++) { - var _c = _b[_a6], source = _c.source, value_1 = _c.value; - var v3 = value_1 * (target.layer - source.layer); - y5 += targetTop(source, target) * v3; - w4 += v3; - } - if (!(w4 > 0)) - continue; - var dy_1 = (y5 / w4 - target.y0) * alpha; - target.y0 += dy_1; - target.y1 += dy_1; - reorderNodeLinks(target); - } - if (sort2 === void 0) - column.sort(ascendingBreadth); - if (column.length) - resolveCollisions(column, beta); - } - } - function relaxRightToLeft(columns, alpha, beta) { - for (var n3 = columns.length, i4 = n3 - 2; i4 >= 0; --i4) { - var column = columns[i4]; - for (var _i = 0, column_2 = column; _i < column_2.length; _i++) { - var source = column_2[_i]; - var y5 = 0; - var w4 = 0; - for (var _a6 = 0, _b = source.sourceLinks; _a6 < _b.length; _a6++) { - var _c = _b[_a6], target = _c.target, value_2 = _c.value; - var v3 = value_2 * (target.layer - source.layer); - y5 += sourceTop(source, target) * v3; - w4 += v3; - } - if (!(w4 > 0)) - continue; - var dy_2 = (y5 / w4 - source.y0) * alpha; - source.y0 += dy_2; - source.y1 += dy_2; - reorderNodeLinks(source); - } - if (sort2 === void 0) - column.sort(ascendingBreadth); - if (column.length) - resolveCollisions(column, beta); - } - } - function resolveCollisions(nodes2, alpha) { - var i4 = nodes2.length >> 1; - var subject = nodes2[i4]; - resolveCollisionsBottomToTop(nodes2, subject.y0 - py, i4 - 1, alpha); - resolveCollisionsTopToBottom(nodes2, subject.y1 + py, i4 + 1, alpha); - resolveCollisionsBottomToTop(nodes2, y1, nodes2.length - 1, alpha); - resolveCollisionsTopToBottom(nodes2, y0, 0, alpha); - } - function resolveCollisionsTopToBottom(nodes2, y5, i4, alpha) { - for (; i4 < nodes2.length; ++i4) { - var node = nodes2[i4]; - var dy_3 = (y5 - node.y0) * alpha; - if (dy_3 > 1e-6) - node.y0 += dy_3, node.y1 += dy_3; - y5 = node.y1 + py; - } - } - function resolveCollisionsBottomToTop(nodes2, y5, i4, alpha) { - for (; i4 >= 0; --i4) { - var node = nodes2[i4]; - var dy_4 = (node.y1 - y5) * alpha; - if (dy_4 > 1e-6) - node.y0 -= dy_4, node.y1 -= dy_4; - y5 = node.y0 - py; - } - } - function reorderNodeLinks(_a6) { - var sourceLinks = _a6.sourceLinks, targetLinks = _a6.targetLinks; - if (linkSort === void 0) { - for (var _i = 0, targetLinks_1 = targetLinks; _i < targetLinks_1.length; _i++) { - var sourceLinks_2 = targetLinks_1[_i].source.sourceLinks; - sourceLinks_2.sort(ascendingTargetBreadth); - } - for (var _b = 0, sourceLinks_1 = sourceLinks; _b < sourceLinks_1.length; _b++) { - var targetLinks_2 = sourceLinks_1[_b].target.targetLinks; - targetLinks_2.sort(ascendingSourceBreadth); - } - } - } - function reorderLinks(nodes2) { - if (linkSort === void 0) { - for (var _i = 0, nodes_7 = nodes2; _i < nodes_7.length; _i++) { - var _a6 = nodes_7[_i], sourceLinks = _a6.sourceLinks, targetLinks = _a6.targetLinks; - sourceLinks.sort(ascendingTargetBreadth); - targetLinks.sort(ascendingSourceBreadth); - } - } - } - function targetTop(source, target) { - var y5 = source.y0 - (source.sourceLinks.length - 1) * py / 2; - for (var _i = 0, _a6 = source.sourceLinks; _i < _a6.length; _i++) { - var _b = _a6[_i], node = _b.target, width2 = _b.width; - if (node === target) - break; - y5 += width2 + py; - } - for (var _c = 0, _d = target.targetLinks; _c < _d.length; _c++) { - var _e = _d[_c], node = _e.source, width2 = _e.width; - if (node === source) - break; - y5 -= width2; - } - return y5; - } - function sourceTop(source, target) { - var y5 = target.y0 - (target.targetLinks.length - 1) * py / 2; - for (var _i = 0, _a6 = target.targetLinks; _i < _a6.length; _i++) { - var _b = _a6[_i], node = _b.source, width2 = _b.width; - if (node === source) - break; - y5 += width2 + py; - } - for (var _c = 0, _d = source.sourceLinks; _c < _d.length; _c++) { - var _e = _d[_c], node = _e.target, width2 = _e.width; - if (node === target) - break; - y5 -= width2; - } - return y5; - } - return sankey; -} - -// node_modules/@antv/g2plot/esm/plots/sankey/layout.js -var ALIGN_METHOD = { - left, - right, - center, - justify -}; -var DEFAULT_OPTIONS31 = { - nodeId: function(node) { - return node.index; - }, - nodeAlign: "justify", - nodeWidth: 8e-3, - nodePadding: 0.03, - nodeSort: void 0 -}; -function getNodeAlignFunction(nodeAlign) { - var func = (0, import_util412.isString)(nodeAlign) ? ALIGN_METHOD[nodeAlign] : (0, import_util412.isFunction)(nodeAlign) ? nodeAlign : null; - return func || justify; -} -function getDefaultOptions(sankeyLayoutOptions) { - return (0, import_util412.assign)({}, DEFAULT_OPTIONS31, sankeyLayoutOptions); -} -function sankeyLayout(sankeyLayoutOptions, data3) { - var options = getDefaultOptions(sankeyLayoutOptions); - var nodeId = options.nodeId, nodeSort = options.nodeSort, nodeAlign = options.nodeAlign, nodeWidth = options.nodeWidth, nodePadding = options.nodePadding, nodeDepth = options.nodeDepth; - var sankeyProcessor = Sankey().nodeSort(nodeSort).nodeWidth(nodeWidth).nodePadding(nodePadding).nodeDepth(nodeDepth).nodeAlign(getNodeAlignFunction(nodeAlign)).extent([ - [0, 0], - [1, 1] - ]).nodeId(nodeId); - var layoutData = sankeyProcessor(data3); - layoutData.nodes.forEach(function(node) { - var x0 = node.x0, x1 = node.x1, y0 = node.y0, y1 = node.y1; - node.x = [x0, x1, x1, x0]; - node.y = [y0, y0, y1, y1]; - }); - layoutData.links.forEach(function(edge2) { - var source = edge2.source, target = edge2.target; - var sx = source.x1; - var tx = target.x0; - edge2.x = [sx, sx, tx, tx]; - var offset = edge2.width / 2; - edge2.y = [edge2.y0 + offset, edge2.y0 - offset, edge2.y1 + offset, edge2.y1 - offset]; - }); - return layoutData; -} - -// node_modules/@antv/g2plot/esm/plots/sankey/circle.js -var import_util413 = __toModule(require_lib()); -function getNodes(edges, sourceField, targetField) { - var nodes = []; - edges.forEach(function(e4) { - var source = e4[sourceField]; - var target = e4[targetField]; - if (!nodes.includes(source)) { - nodes.push(source); - } - if (!nodes.includes(target)) { - nodes.push(target); - } - }); - return nodes; -} -function getMatrix(edges, nodes, sourceField, targetField) { - var graphMatrix = {}; - nodes.forEach(function(pre) { - graphMatrix[pre] = {}; - nodes.forEach(function(next) { - graphMatrix[pre][next] = 0; - }); - }); - edges.forEach(function(edge2) { - graphMatrix[edge2[sourceField]][edge2[targetField]] = 1; - }); - return graphMatrix; -} -function cutoffCircle(edges, sourceField, targetField) { - if (!(0, import_util413.isArray)(edges)) - return []; - var removedData = []; - var nodes = getNodes(edges, sourceField, targetField); - var graphMatrix = getMatrix(edges, nodes, sourceField, targetField); - var visited = {}; - nodes.forEach(function(node) { - visited[node] = 0; - }); - function DFS(dfsNode) { - visited[dfsNode] = 1; - nodes.forEach(function(node) { - if (graphMatrix[dfsNode][node] != 0) { - if (visited[node] == 1) { - removedData.push(dfsNode + "_" + node); - } else if (visited[node] == -1) { - return; - } else { - DFS(node); - } - } - }); - visited[dfsNode] = -1; - } - nodes.forEach(function(node) { - if (visited[node] == -1) { - return; - } - DFS(node); - }); - if (removedData.length !== 0) { - console.warn("sankey data contains circle, " + removedData.length + " records removed.", removedData); - } - return edges.filter(function(edge2) { - return removedData.findIndex(function(i4) { - return i4 === edge2[sourceField] + "_" + edge2[targetField]; - }) < 0; - }); -} - -// node_modules/@antv/g2plot/esm/plots/sankey/helper.js -function isNodeLink(dataType) { - return dataType === "node-link"; -} -function getNodeWidthRatio(nodeWidth, nodeWidthRatio, width2) { - return isRealNumber(nodeWidth) ? nodeWidth / width2 : nodeWidthRatio; -} -function getNodePaddingRatio(nodePadding, nodePaddingRatio, height) { - return isRealNumber(nodePadding) ? nodePadding / height : nodePaddingRatio; -} -function transformToViewsData(options, width2, height) { - var dataType = options.dataType, data3 = options.data, sourceField = options.sourceField, targetField = options.targetField, weightField = options.weightField, nodeAlign = options.nodeAlign, nodeSort = options.nodeSort, nodePadding = options.nodePadding, nodePaddingRatio = options.nodePaddingRatio, nodeWidth = options.nodeWidth, nodeWidthRatio = options.nodeWidthRatio, nodeDepth = options.nodeDepth, _a6 = options.rawFields, rawFields = _a6 === void 0 ? [] : _a6; - var sankeyLayoutInputData; - if (!isNodeLink(dataType)) { - sankeyLayoutInputData = transformDataToNodeLinkData(cutoffCircle(data3, sourceField, targetField), sourceField, targetField, weightField, rawFields); - } else { - sankeyLayoutInputData = data3; - } - var _b = sankeyLayout({ - nodeAlign, - nodePadding: getNodePaddingRatio(nodePadding, nodePaddingRatio, height), - nodeWidth: getNodeWidthRatio(nodeWidth, nodeWidthRatio, width2), - nodeSort, - nodeDepth - }, sankeyLayoutInputData), nodes = _b.nodes, links = _b.links; - return { - nodes: nodes.map(function(node) { - return __assign(__assign({}, pick4(node, __spreadArrays(["x", "y", "name"], rawFields))), { isNode: true }); - }), - edges: links.map(function(link) { - return __assign(__assign({ source: link.source.name, target: link.target.name, name: link.source.name || link.target.name }, pick4(link, __spreadArrays(["x", "y", "value"], rawFields))), { isNode: false }); - }) - }; -} - -// node_modules/@antv/g2plot/esm/plots/sankey/constant.js -var X_FIELD3 = "x"; -var Y_FIELD4 = "y"; -var COLOR_FIELD = "name"; -var NODES_VIEW_ID = "nodes"; -var EDGES_VIEW_ID = "edges"; - -// node_modules/@antv/g2plot/esm/plots/sankey/adaptor.js -function defaultOptions6(params) { - var options = params.options; - var _a6 = options.rawFields, rawFields = _a6 === void 0 ? [] : _a6; - return deepAssign({}, { - options: { - tooltip: { - fields: (0, import_util414.uniq)(__spreadArrays(["name", "source", "target", "value", "isNode"], rawFields)) - }, - label: { - fields: (0, import_util414.uniq)(__spreadArrays(["x", "name"], rawFields)) - } - } - }, params); -} -function geometry33(params) { - var chart = params.chart, options = params.options; - var color4 = options.color, nodeStyle = options.nodeStyle, edgeStyle = options.edgeStyle, label17 = options.label, tooltip10 = options.tooltip, nodeState = options.nodeState, edgeState = options.edgeState; - chart.legend(false); - chart.tooltip(tooltip10); - chart.axis(false); - chart.coordinate().reflect("y"); - var _a6 = transformToViewsData(options, chart.width, chart.height), nodes = _a6.nodes, edges = _a6.edges; - var edgeView = chart.createView({ id: EDGES_VIEW_ID }); - edgeView.data(edges); - edge({ - chart: edgeView, - options: { - xField: X_FIELD3, - yField: Y_FIELD4, - seriesField: COLOR_FIELD, - edge: { - color: color4, - style: edgeStyle, - shape: "arc" - }, - tooltip: tooltip10, - state: edgeState - } - }); - var nodeView = chart.createView({ id: NODES_VIEW_ID }); - nodeView.data(nodes); - polygon({ - chart: nodeView, - options: { - xField: X_FIELD3, - yField: Y_FIELD4, - seriesField: COLOR_FIELD, - polygon: { - color: color4, - style: nodeStyle - }, - label: label17, - tooltip: tooltip10, - state: nodeState - } - }); - chart.interaction("element-active"); - chart.scale({ - x: { sync: true, nice: true, min: 0, max: 1, minLimit: 0, maxLimit: 1 }, - y: { sync: true, nice: true, min: 0, max: 1, minLimit: 0, maxLimit: 1 }, - name: { sync: "color", type: "cat" } - }); - return params; -} -function animation5(params) { - var chart = params.chart, options = params.options; - var animation7 = options.animation; - if (typeof animation7 === "boolean") { - chart.animate(animation7); - } else { - chart.animate(true); - } - var geometries = __spreadArrays(chart.views[0].geometries, chart.views[1].geometries); - geometries.forEach(function(g4) { - g4.animate(animation7); - }); - return params; -} -function nodeDraggable(params) { - var chart = params.chart, options = params.options; - var nodeDraggable2 = options.nodeDraggable; - var DRAG_INTERACTION = "sankey-node-draggable"; - if (nodeDraggable2) { - chart.interaction(DRAG_INTERACTION); - } else { - chart.removeInteraction(DRAG_INTERACTION); - } - return params; -} -function adaptor31(params) { - return flow(defaultOptions6, geometry33, interaction, nodeDraggable, animation5, theme)(params); -} - -// node_modules/@antv/g2plot/esm/plots/sankey/interactions/actions/node-drag.js -var import_util415 = __toModule(require_lib()); -var SankeyNodeDragAction = function(_super) { - __extends(SankeyNodeDragAction2, _super); - function SankeyNodeDragAction2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.isDragging = false; - return _this; - } - SankeyNodeDragAction2.prototype.isNodeElement = function() { - var shape = (0, import_util415.get)(this.context, "event.target"); - if (shape) { - var element = shape.get("element"); - return element && element.getModel().data.isNode; - } - return false; - }; - SankeyNodeDragAction2.prototype.getNodeView = function() { - return findViewById(this.context.view, NODES_VIEW_ID); - }; - SankeyNodeDragAction2.prototype.getEdgeView = function() { - return findViewById(this.context.view, EDGES_VIEW_ID); - }; - SankeyNodeDragAction2.prototype.getCurrentDatumIdx = function(element) { - return this.getNodeView().geometries[0].elements.indexOf(element); - }; - SankeyNodeDragAction2.prototype.start = function() { - if (this.isNodeElement()) { - this.prevPoint = { - x: (0, import_util415.get)(this.context, "event.x"), - y: (0, import_util415.get)(this.context, "event.y") - }; - var element = this.context.event.target.get("element"); - var idx = this.getCurrentDatumIdx(element); - if (idx === -1) { - return; - } - this.currentElementIdx = idx; - this.context.isDragging = true; - this.isDragging = true; - this.prevNodeAnimateCfg = this.getNodeView().getOptions().animate; - this.prevEdgeAnimateCfg = this.getEdgeView().getOptions().animate; - this.getNodeView().animate(false); - this.getEdgeView().animate(false); - } - }; - SankeyNodeDragAction2.prototype.translate = function() { - if (this.isDragging) { - var chart = this.context.view; - var currentPoint = { - x: (0, import_util415.get)(this.context, "event.x"), - y: (0, import_util415.get)(this.context, "event.y") - }; - var x6 = currentPoint.x - this.prevPoint.x; - var y5 = currentPoint.y - this.prevPoint.y; - var nodeView = this.getNodeView(); - var element = nodeView.geometries[0].elements[this.currentElementIdx]; - if (element && element.getModel()) { - var prevDatum = element.getModel().data; - var data3 = nodeView.getOptions().data; - var coordinate11 = nodeView.getCoordinate(); - var datumGap_1 = { - x: x6 / coordinate11.getWidth(), - y: y5 / coordinate11.getHeight() - }; - var nextDatum = __assign(__assign({}, prevDatum), { x: prevDatum.x.map(function(x7) { - return x7 += datumGap_1.x; - }), y: prevDatum.y.map(function(y6) { - return y6 += datumGap_1.y; - }) }); - var newData = __spreadArrays(data3); - newData[this.currentElementIdx] = nextDatum; - nodeView.data(newData); - var name_1 = prevDatum.name; - var edgeView = this.getEdgeView(); - var edgeData = edgeView.getOptions().data; - edgeData.forEach(function(datum) { - if (datum.source === name_1) { - datum.x[0] += datumGap_1.x; - datum.x[1] += datumGap_1.x; - datum.y[0] += datumGap_1.y; - datum.y[1] += datumGap_1.y; - } - if (datum.target === name_1) { - datum.x[2] += datumGap_1.x; - datum.x[3] += datumGap_1.x; - datum.y[2] += datumGap_1.y; - datum.y[3] += datumGap_1.y; - } - }); - edgeView.data(edgeData); - this.prevPoint = currentPoint; - chart.render(true); - } - } - }; - SankeyNodeDragAction2.prototype.end = function() { - this.isDragging = false; - this.context.isDragging = false; - this.prevPoint = null; - this.currentElementIdx = null; - this.getNodeView().animate(this.prevNodeAnimateCfg); - this.getEdgeView().animate(this.prevEdgeAnimateCfg); - }; - return SankeyNodeDragAction2; -}(base_default12); - -// node_modules/@antv/g2plot/esm/plots/sankey/interactions/node-draggable.js -registerAction("sankey-node-drag", SankeyNodeDragAction); -registerInteraction("sankey-node-draggable", { - showEnable: [ - { trigger: "polygon:mouseenter", action: "cursor:pointer" }, - { trigger: "polygon:mouseleave", action: "cursor:default" } - ], - start: [{ trigger: "polygon:mousedown", action: "sankey-node-drag:start" }], - processing: [ - { trigger: "plot:mousemove", action: "sankey-node-drag:translate" }, - { isEnable: function(context) { - return context.isDragging; - }, trigger: "plot:mousemove", action: "cursor:move" } - ], - end: [{ trigger: "plot:mouseup", action: "sankey-node-drag:end" }] -}); - -// node_modules/@antv/g2plot/esm/plots/sankey/index.js -var Sankey2 = function(_super) { - __extends(Sankey3, _super); - function Sankey3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "sankey"; - return _this; - } - Sankey3.getDefaultOptions = function() { - return { - appendPadding: 8, - syncViewPadding: true, - nodeStyle: { - opacity: 1, - fillOpacity: 1, - lineWidth: 1 - }, - edgeStyle: { - opacity: 0.3, - lineWidth: 0 - }, - edgeState: { - active: { - style: { - opacity: 0.8, - lineWidth: 0 - } - } - }, - label: { - formatter: function(_a6) { - var name = _a6.name; - return name; - }, - callback: function(x6) { - var isLast = x6[1] === 1; - return { - style: { - fill: "#545454", - textAlign: isLast ? "end" : "start" - }, - offsetX: isLast ? -8 : 8 - }; - }, - layout: [ - { - type: "hide-overlap" - } - ] - }, - tooltip: { - showTitle: false, - showMarkers: false, - shared: false, - showContent: function(items) { - return !(0, import_util416.get)(items, [0, "data", "isNode"]); - }, - formatter: function(datum) { - var source = datum.source, target = datum.target, value2 = datum.value; - return { - name: source + " -> " + target, - value: value2 - }; - } - }, - nodeWidthRatio: 8e-3, - nodePaddingRatio: 0.01, - animation: { - appear: { - animation: "wave-in" - }, - enter: { - animation: "wave-in" - } - } - }; - }; - Sankey3.prototype.changeData = function(data3) { - this.updateOption({ data: data3 }); - var _a6 = transformToViewsData(this.options, this.chart.width, this.chart.height), nodes = _a6.nodes, edges = _a6.edges; - var nodesView = findViewById(this.chart, NODES_VIEW_ID); - var edgesView = findViewById(this.chart, EDGES_VIEW_ID); - nodesView.changeData(nodes); - edgesView.changeData(edges); - }; - Sankey3.prototype.getSchemaAdaptor = function() { - return adaptor31; - }; - Sankey3.prototype.getDefaultOptions = function() { - return Sankey3.getDefaultOptions(); - }; - return Sankey3; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/chord/adaptor.js -var import_util419 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/utils/transform/chord.js -var import_util417 = __toModule(require_lib()); -var DEFAULT_OPTIONS32 = { - y: 0, - nodeWidthRatio: 0.05, - weight: false, - nodePaddingRatio: 0.1, - id: function(node) { - return node.id; - }, - source: function(edge2) { - return edge2.source; - }, - target: function(edge2) { - return edge2.target; - }, - sourceWeight: function(edge2) { - return edge2.value || 1; - }, - targetWeight: function(edge2) { - return edge2.value || 1; - }, - sortBy: null -}; -function processGraph(nodeById, edges, options) { - (0, import_util417.forIn)(nodeById, function(node, id) { - node.inEdges = edges.filter(function(edge2) { - return "" + options.target(edge2) === "" + id; - }); - node.outEdges = edges.filter(function(edge2) { - return "" + options.source(edge2) === "" + id; - }); - node.edges = node.outEdges.concat(node.inEdges); - node.frequency = node.edges.length; - node.value = 0; - node.inEdges.forEach(function(edge2) { - node.value += options.targetWeight(edge2); - }); - node.outEdges.forEach(function(edge2) { - node.value += options.sourceWeight(edge2); - }); - }); -} -function sortNodes(nodes, options) { - var sortMethods = { - weight: function(a4, b10) { - return b10.value - a4.value; - }, - frequency: function(a4, b10) { - return b10.frequency - a4.frequency; - }, - id: function(a4, b10) { - return ("" + options.id(a4)).localeCompare("" + options.id(b10)); - } - }; - var method = sortMethods[options.sortBy]; - if (!method && (0, import_util417.isFunction)(options.sortBy)) { - method = options.sortBy; - } - if (method) { - nodes.sort(method); - } -} -function layoutNodes(nodes, options) { - var len5 = nodes.length; - if (!len5) { - throw new TypeError("Invalid nodes: it's empty!"); - } - if (options.weight) { - var nodePaddingRatio_1 = options.nodePaddingRatio; - if (nodePaddingRatio_1 < 0 || nodePaddingRatio_1 >= 1) { - throw new TypeError("Invalid nodePaddingRatio: it must be in range [0, 1)!"); - } - var margin_1 = nodePaddingRatio_1 / (2 * len5); - var nodeWidthRatio_1 = options.nodeWidthRatio; - if (nodeWidthRatio_1 <= 0 || nodeWidthRatio_1 >= 1) { - throw new TypeError("Invalid nodeWidthRatio: it must be in range (0, 1)!"); - } - var totalValue_1 = 0; - nodes.forEach(function(node) { - totalValue_1 += node.value; - }); - nodes.forEach(function(node) { - node.weight = node.value / totalValue_1; - node.width = node.weight * (1 - nodePaddingRatio_1); - node.height = nodeWidthRatio_1; - }); - nodes.forEach(function(node, index2) { - var deltaX = 0; - for (var i4 = index2 - 1; i4 >= 0; i4--) { - deltaX += nodes[i4].width + 2 * margin_1; - } - var minX = node.minX = margin_1 + deltaX; - var maxX = node.maxX = node.minX + node.width; - var minY = node.minY = options.y - nodeWidthRatio_1 / 2; - var maxY2 = node.maxY = minY + nodeWidthRatio_1; - node.x = [minX, maxX, maxX, minX]; - node.y = [minY, minY, maxY2, maxY2]; - }); - } else { - var deltaX_1 = 1 / len5; - nodes.forEach(function(node, index2) { - node.x = (index2 + 0.5) * deltaX_1; - node.y = options.y; - }); - } - return nodes; -} -function locatingEdges(nodeById, edges, options) { - if (options.weight) { - var valueById_1 = {}; - (0, import_util417.forIn)(nodeById, function(node, id) { - valueById_1[id] = node.value; - }); - edges.forEach(function(edge2) { - var sId = options.source(edge2); - var tId = options.target(edge2); - var sNode = nodeById[sId]; - var tNode = nodeById[tId]; - if (sNode && tNode) { - var sValue = valueById_1[sId]; - var currentSValue = options.sourceWeight(edge2); - var sStart = sNode.minX + (sNode.value - sValue) / sNode.value * sNode.width; - var sEnd = sStart + currentSValue / sNode.value * sNode.width; - valueById_1[sId] -= currentSValue; - var tValue = valueById_1[tId]; - var currentTValue = options.targetWeight(edge2); - var tStart = tNode.minX + (tNode.value - tValue) / tNode.value * tNode.width; - var tEnd = tStart + currentTValue / tNode.value * tNode.width; - valueById_1[tId] -= currentTValue; - var y5 = options.y; - edge2.x = [sStart, sEnd, tStart, tEnd]; - edge2.y = [y5, y5, y5, y5]; - edge2.source = sNode; - edge2.target = tNode; - } - }); - } else { - edges.forEach(function(edge2) { - var sNode = nodeById[options.source(edge2)]; - var tNode = nodeById[options.target(edge2)]; - if (sNode && tNode) { - edge2.x = [sNode.x, tNode.x]; - edge2.y = [sNode.y, tNode.y]; - edge2.source = sNode; - edge2.target = tNode; - } - }); - } - return edges; -} -function getDefaultOptions2(options) { - return (0, import_util417.assign)({}, DEFAULT_OPTIONS32, options); -} -function chordLayout(chordLayoutOptions, chordLayoutInputData) { - var options = getDefaultOptions2(chordLayoutOptions); - var nodeById = {}; - var nodes = chordLayoutInputData.nodes; - var links = chordLayoutInputData.links; - nodes.forEach(function(node) { - var id = options.id(node); - nodeById[id] = node; - }); - processGraph(nodeById, links, options); - sortNodes(nodes, options); - var outputNodes = layoutNodes(nodes, options); - var outputLinks = locatingEdges(nodeById, links, options); - return { - nodes: outputNodes, - links: outputLinks - }; -} - -// node_modules/@antv/g2plot/esm/plots/chord/constant.js -var import_util418 = __toModule(require_lib()); -var X_FIELD4 = "x"; -var Y_FIELD5 = "y"; -var NODE_COLOR_FIELD = "name"; -var EDGE_COLOR_FIELD = "source"; -var DEFAULT_OPTIONS33 = { - nodeStyle: { - opacity: 1, - fillOpacity: 1, - lineWidth: 1 - }, - edgeStyle: { - opacity: 0.5, - lineWidth: 2 - }, - label: { - fields: ["x", "name"], - callback: function(x6, name) { - var centerX = (x6[0] + x6[1]) / 2; - var offsetX = centerX > 0.5 ? -4 : 4; - return { - labelEmit: true, - style: { - fill: "#8c8c8c" - }, - offsetX, - content: name - }; - } - }, - tooltip: { - showTitle: false, - showMarkers: false, - fields: ["source", "target", "value", "isNode"], - showContent: function(items) { - return !(0, import_util418.get)(items, [0, "data", "isNode"]); - }, - formatter: function(datum) { - var source = datum.source, target = datum.target, value2 = datum.value; - return { - name: source + " -> " + target, - value: value2 - }; - } - }, - interactions: [ - { - type: "element-active" - } - ], - weight: true, - nodePaddingRatio: 0.1, - nodeWidthRatio: 0.05 -}; - -// node_modules/@antv/g2plot/esm/plots/chord/adaptor.js -function transformData8(params) { - var options = params.options; - var data3 = options.data, sourceField = options.sourceField, targetField = options.targetField, weightField = options.weightField, nodePaddingRatio = options.nodePaddingRatio, nodeWidthRatio = options.nodeWidthRatio, _a6 = options.rawFields, rawFields = _a6 === void 0 ? [] : _a6; - var chordLayoutInputData = transformDataToNodeLinkData(data3, sourceField, targetField, weightField); - var _b = chordLayout({ weight: true, nodePaddingRatio, nodeWidthRatio }, chordLayoutInputData), nodes = _b.nodes, links = _b.links; - var nodesData = nodes.map(function(node) { - return __assign(__assign({}, pick4(node, __spreadArrays(["id", "x", "y", "name"], rawFields))), { isNode: true }); - }); - var edgesData = links.map(function(link) { - return __assign(__assign({ source: link.source.name, target: link.target.name, name: link.source.name || link.target.name }, pick4(link, __spreadArrays(["x", "y", "value"], rawFields))), { isNode: false }); - }); - return __assign(__assign({}, params), { ext: __assign(__assign({}, params.ext), { - chordData: { nodesData, edgesData } - }) }); -} -function scale9(params) { - var _a6; - var chart = params.chart; - chart.scale((_a6 = { - x: { sync: true, nice: true }, - y: { sync: true, nice: true, max: 1 } - }, _a6[NODE_COLOR_FIELD] = { sync: "color" }, _a6[EDGE_COLOR_FIELD] = { sync: "color" }, _a6)); - return params; -} -function axis20(params) { - var chart = params.chart; - chart.axis(false); - return params; -} -function legend17(params) { - var chart = params.chart; - chart.legend(false); - return params; -} -function tooltip8(params) { - var chart = params.chart, options = params.options; - var tooltip10 = options.tooltip; - chart.tooltip(tooltip10); - return params; -} -function coordinate10(params) { - var chart = params.chart; - chart.coordinate("polar").reflect("y"); - return params; -} -function nodeGeometry(params) { - var chart = params.chart, options = params.options; - var nodesData = params.ext.chordData.nodesData; - var nodeStyle = options.nodeStyle, label17 = options.label, tooltip10 = options.tooltip; - var nodeView = chart.createView(); - nodeView.data(nodesData); - polygon({ - chart: nodeView, - options: { - xField: X_FIELD4, - yField: Y_FIELD5, - seriesField: NODE_COLOR_FIELD, - polygon: { - style: nodeStyle - }, - label: label17, - tooltip: tooltip10 - } - }); - return params; -} -function edgeGeometry(params) { - var chart = params.chart, options = params.options; - var edgesData = params.ext.chordData.edgesData; - var edgeStyle = options.edgeStyle, tooltip10 = options.tooltip; - var edgeView = chart.createView(); - edgeView.data(edgesData); - var edgeOptions = { - xField: X_FIELD4, - yField: Y_FIELD5, - seriesField: EDGE_COLOR_FIELD, - edge: { - style: edgeStyle, - shape: "arc" - }, - tooltip: tooltip10 - }; - edge({ - chart: edgeView, - options: edgeOptions - }); - return params; -} -function animation6(params) { - var chart = params.chart, options = params.options; - var animation7 = options.animation; - if (typeof animation7 === "boolean") { - chart.animate(animation7); - } else { - chart.animate(true); - } - (0, import_util419.each)(getAllGeometriesRecursively(chart), function(g4) { - g4.animate(animation7); - }); - return params; -} -function adaptor32(params) { - return flow(theme, transformData8, coordinate10, scale9, axis20, legend17, tooltip8, edgeGeometry, nodeGeometry, interaction, state, animation6)(params); -} - -// node_modules/@antv/g2plot/esm/plots/chord/index.js -var Chord = function(_super) { - __extends(Chord2, _super); - function Chord2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "chord"; - return _this; - } - Chord2.getDefaultOptions = function() { - return DEFAULT_OPTIONS33; - }; - Chord2.prototype.getDefaultOptions = function() { - return Chord2.getDefaultOptions(); - }; - Chord2.prototype.getSchemaAdaptor = function() { - return adaptor32; - }; - return Chord2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/circle-packing/adaptor.js -var import_util422 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/utils/hierarchy/pack.js -var import_util420 = __toModule(require_lib()); -var DEFAULT_OPTIONS34 = { - field: "value", - as: ["x", "y", "r"], - sort: function(a4, b10) { - return b10.value - a4.value; - } -}; -function pack(data3, options) { - options = (0, import_util420.assign)({}, DEFAULT_OPTIONS34, options); - var as = options.as; - if (!(0, import_util420.isArray)(as) || as.length !== 3) { - throw new TypeError('Invalid as: it must be an array with 3 strings (e.g. [ "x", "y", "r" ])!'); - } - var field6; - try { - field6 = getField(options); - } catch (e4) { - console.warn(e4); - } - var packLayout = function(data4) { - return pack_default().size(options.size).padding(options.padding)(hierarchy(data4).sum(function(d3) { - return d3[field6]; - }).sort(options.sort)); - }; - var root = packLayout(data3); - var x6 = as[0]; - var y5 = as[1]; - var r4 = as[2]; - root.each(function(node) { - node[x6] = node.x; - node[y5] = node.y; - node[r4] = node.r; - }); - return getAllNodes(root); -} - -// node_modules/@antv/g2plot/esm/plots/circle-packing/utils.js -function transformData9(options) { - var data3 = options.data, hierarchyConfig = options.hierarchyConfig, _a6 = options.rawFields, rawFields = _a6 === void 0 ? [] : _a6, enableDrillDown = options.enableDrillDown; - var nodes = pack(data3, __assign(__assign({}, hierarchyConfig), { field: "value", as: ["x", "y", "r"] })); - var result = []; - nodes.forEach(function(node) { - var _a7; - var path = node.data.name; - var ancestorNode = __assign({}, node); - while (ancestorNode.depth > 1) { - path = ((_a7 = ancestorNode.parent.data) === null || _a7 === void 0 ? void 0 : _a7.name) + " / " + path; - ancestorNode = ancestorNode.parent; - } - if (enableDrillDown && node.depth > 2) { - return null; - } - var nodeInfo = deepAssign({}, node.data, __assign(__assign(__assign({}, pick4(node.data, rawFields)), { path }), node)); - nodeInfo.ext = hierarchyConfig; - nodeInfo[HIERARCHY_DATA_TRANSFORM_PARAMS] = { hierarchyConfig, rawFields, enableDrillDown }; - result.push(nodeInfo); - }); - return result; -} -function resolvePaddingForCircle(padding3, appendPadding, containerSize) { - var tempPadding = resolveAllPadding([padding3, appendPadding]); - var top = tempPadding[0], right2 = tempPadding[1], bottom = tempPadding[2], left2 = tempPadding[3]; - var width2 = containerSize.width, height = containerSize.height; - var wSize = width2 - (left2 + right2); - var hSize = height - (top + bottom); - var minSize = Math.min(wSize, hSize); - var restWidthPadding = (wSize - minSize) / 2; - var restHeightPadding = (hSize - minSize) / 2; - var finalTop = top + restHeightPadding; - var finalRight = right2 + restWidthPadding; - var finalBottom = bottom + restHeightPadding; - var finalLeft = left2 + restWidthPadding; - var finalPadding = [finalTop, finalRight, finalBottom, finalLeft]; - var finalSize = minSize < 0 ? 0 : minSize; - return { finalPadding, finalSize }; -} - -// node_modules/@antv/g2plot/esm/plots/circle-packing/constant.js -var RAW_FIELDS2 = ["x", "y", "r", "name", "value", "path", "depth"]; -var DEFAULT_OPTIONS35 = { - colorField: "name", - autoFit: true, - pointStyle: { - lineWidth: 0, - stroke: "#fff" - }, - legend: false, - hierarchyConfig: { - size: [1, 1], - padding: 0 - }, - label: { - fields: ["name"], - layout: { - type: "limit-in-shape" - } - }, - tooltip: { - showMarkers: false, - showTitle: false - }, - drilldown: { enabled: false } -}; - -// node_modules/@antv/g2plot/esm/plots/circle-packing/adaptor.js -function defaultOptions7(params) { - var chart = params.chart; - var diameter = Math.min(chart.viewBBox.width, chart.viewBBox.height); - return deepAssign({ - options: { - size: function(_a6) { - var r4 = _a6.r; - return r4 * diameter; - } - } - }, params); -} -function padding2(params) { - var options = params.options, chart = params.chart; - var containerSize = chart.viewBBox; - var padding3 = options.padding, appendPadding = options.appendPadding, drilldown = options.drilldown; - var tempAppendPadding = appendPadding; - if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) { - var appendPaddingByDrilldown = getAdjustAppendPadding(chart.appendPadding, (0, import_util422.get)(drilldown, ["breadCrumb", "position"])); - tempAppendPadding = resolveAllPadding([appendPaddingByDrilldown, appendPadding]); - } - var finalPadding = resolvePaddingForCircle(padding3, tempAppendPadding, containerSize).finalPadding; - chart.padding = finalPadding; - chart.appendPadding = 0; - return params; -} -function geometry34(params) { - var chart = params.chart, options = params.options; - var padding3 = chart.padding, appendPadding = chart.appendPadding; - var color4 = options.color, colorField = options.colorField, pointStyle = options.pointStyle, hierarchyConfig = options.hierarchyConfig, sizeField = options.sizeField, _a6 = options.rawFields, rawFields = _a6 === void 0 ? [] : _a6, drilldown = options.drilldown; - var data3 = transformData9({ - data: options.data, - hierarchyConfig, - enableDrillDown: drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled, - rawFields - }); - chart.data(data3); - var containerSize = chart.viewBBox; - var finalSize = resolvePaddingForCircle(padding3, appendPadding, containerSize).finalSize; - var circleSize = function(_a7) { - var r4 = _a7.r; - return r4 * finalSize; - }; - if (sizeField) { - circleSize = function(d3) { - return d3[sizeField] * finalSize; - }; - } - point(deepAssign({}, params, { - options: { - xField: "x", - yField: "y", - seriesField: colorField, - sizeField, - rawFields: __spreadArrays(RAW_FIELDS2, rawFields), - point: { - color: color4, - style: pointStyle, - shape: "circle", - size: circleSize - } - } - })); - return params; -} -function meta22(params) { - return flow(scale7({}, { - x: { min: 0, max: 1, minLimit: 0, maxLimit: 1, nice: true }, - y: { min: 0, max: 1, minLimit: 0, maxLimit: 1, nice: true } - }))(params); -} -function tooltip9(params) { - var chart = params.chart, options = params.options; - var tooltip10 = options.tooltip; - if (tooltip10 === false) { - chart.tooltip(false); - } else { - var tooltipOptions = tooltip10; - if (!(0, import_util422.get)(tooltip10, "fields")) { - tooltipOptions = deepAssign({}, { - customItems: function(items) { - return items.map(function(item) { - var scales = (0, import_util422.get)(chart.getOptions(), "scales"); - var nameFormatter = (0, import_util422.get)(scales, ["name", "formatter"], function(v3) { - return v3; - }); - var valueFormatter = (0, import_util422.get)(scales, ["value", "formatter"], function(v3) { - return v3; - }); - return __assign(__assign({}, item), { name: nameFormatter(item.data.name), value: valueFormatter(item.data.value) }); - }); - } - }, tooltipOptions); - } - chart.tooltip(tooltipOptions); - } - return params; -} -function axis21(params) { - var chart = params.chart; - chart.axis(false); - return params; -} -function adaptorInteraction3(options) { - var drilldown = options.drilldown, _a6 = options.interactions, interactions = _a6 === void 0 ? [] : _a6; - if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) { - return deepAssign({}, options, { - interactions: __spreadArrays(interactions, [ - { - type: "drill-down", - cfg: { drillDownConfig: drilldown, transformData: transformData9, enableDrillDown: true } - } - ]) - }); - } - return options; -} -function interaction7(params) { - var chart = params.chart, options = params.options; - interaction({ - chart, - options: adaptorInteraction3(options) - }); - return params; -} -function adaptor33(params) { - return flow(pattern("pointStyle"), defaultOptions7, padding2, theme, meta22, geometry34, axis21, legend, tooltip9, interaction7, animation, annotation())(params); -} - -// node_modules/@antv/g2plot/esm/plots/circle-packing/index.js -var CirclePacking = function(_super) { - __extends(CirclePacking2, _super); - function CirclePacking2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "circle-packing"; - return _this; - } - CirclePacking2.getDefaultOptions = function() { - return DEFAULT_OPTIONS35; - }; - CirclePacking2.prototype.getDefaultOptions = function() { - return CirclePacking2.getDefaultOptions(); - }; - CirclePacking2.prototype.getSchemaAdaptor = function() { - return adaptor33; - }; - CirclePacking2.prototype.triggerResize = function() { - if (!this.chart.destroyed) { - this.chart.forceFit(); - this.chart.clear(); - this.execAdaptor(); - this.chart.render(true); - } - }; - return CirclePacking2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plugin/index.js -var P3 = function(_super) { - __extends(P4, _super); - function P4(container2, options, adaptor36, defaultOptions8) { - var _this = _super.call(this, container2, deepAssign({}, defaultOptions8, options)) || this; - _this.type = "g2-plot"; - _this.defaultOptions = defaultOptions8; - _this.adaptor = adaptor36; - return _this; - } - P4.prototype.getDefaultOptions = function() { - return this.defaultOptions; - }; - P4.prototype.getSchemaAdaptor = function() { - return this.adaptor; - }; - return P4; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/mix/adaptor.js -var import_util424 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/mix/utils.js -var import_util423 = __toModule(require_lib()); -var PLOT_ADAPTORS = { - line: adaptor, - pie: adaptor5, - column: adaptor3, - bar: adaptor4, - area: adaptor2, - gauge: adaptor26, - "tiny-line": adaptor12, - "tiny-column": adaptor13, - "tiny-area": adaptor11, - "ring-progress": adaptor16, - progress: adaptor15, - scatter: adaptor8, - histogram: adaptor14, - funnel: adaptor22 -}; -var PLOT_CONSTRUCTOR = { - line: Line6, - pie: Pie, - column: Column, - bar: Bar, - area: Area2, - gauge: Gauge, - "tiny-line": TinyLine, - "tiny-column": TinyColumn, - "tiny-area": TinyArea, - "ring-progress": RingProgress, - progress: Progress, - scatter: Scatter, - histogram: Histogram, - funnel: Funnel -}; -var DEFAULT_OPTIONS_MAP = { - pie: { label: false }, - column: { tooltip: { showMarkers: false } }, - bar: { tooltip: { showMarkers: false } } -}; -function execPlotAdaptor(plot, view, options) { - var cls = PLOT_CONSTRUCTOR[plot]; - if (!cls) { - console.error("could not find " + plot + " plot"); - return; - } - var module2 = PLOT_ADAPTORS[plot]; - module2({ - chart: view, - options: deepAssign({}, cls.getDefaultOptions(), (0, import_util423.get)(DEFAULT_OPTIONS_MAP, plot, {}), options) - }); -} - -// node_modules/@antv/g2plot/esm/plots/mix/adaptor.js -function multiView(params) { - var chart = params.chart, options = params.options; - var views = options.views, legend18 = options.legend; - (0, import_util424.each)(views, function(v3) { - var region = v3.region, data3 = v3.data, meta23 = v3.meta, axes = v3.axes, coordinate11 = v3.coordinate, interactions = v3.interactions, annotations = v3.annotations, tooltip10 = v3.tooltip, geometries = v3.geometries; - var viewOfG2 = chart.createView({ - region - }); - viewOfG2.data(data3); - var scales = {}; - if (axes) { - (0, import_util424.each)(axes, function(axis22, field6) { - scales[field6] = pick4(axis22, AXIS_META_CONFIG_KEYS); - }); - } - scales = deepAssign({}, meta23, scales); - viewOfG2.scale(scales); - if (!axes) { - viewOfG2.axis(false); - } else { - (0, import_util424.each)(axes, function(axis22, field6) { - viewOfG2.axis(field6, axis22); - }); - } - viewOfG2.coordinate(coordinate11); - (0, import_util424.each)(geometries, function(geometry35) { - var ext = geometry({ - chart: viewOfG2, - options: geometry35 - }).ext; - var adjust4 = geometry35.adjust; - if (adjust4) { - ext.geometry.adjust(adjust4); - } - }); - (0, import_util424.each)(interactions, function(interaction8) { - if (interaction8.enable === false) { - viewOfG2.removeInteraction(interaction8.type); - } else { - viewOfG2.interaction(interaction8.type, interaction8.cfg); - } - }); - (0, import_util424.each)(annotations, function(annotation4) { - viewOfG2.annotation()[annotation4.type](__assign({}, annotation4)); - }); - if (typeof v3.animation === "boolean") { - viewOfG2.animate(false); - } else { - viewOfG2.animate(true); - (0, import_util424.each)(viewOfG2.geometries, function(g4) { - g4.animate(v3.animation); - }); - } - if (tooltip10) { - viewOfG2.interaction("tooltip"); - viewOfG2.tooltip(tooltip10); - } - }); - if (!legend18) { - chart.legend(false); - } else { - (0, import_util424.each)(legend18, function(l4, field6) { - chart.legend(field6, l4); - }); - } - chart.tooltip(options.tooltip); - return params; -} -function multiPlot(params) { - var chart = params.chart, options = params.options; - var plots = options.plots; - (0, import_util424.each)(plots, function(plot) { - var type2 = plot.type, region = plot.region, _a6 = plot.options, options2 = _a6 === void 0 ? {} : _a6; - var tooltip10 = options2.tooltip; - var viewOfG2 = chart.createView(__assign({ region }, pick4(options2, PLOT_CONTAINER_OPTIONS))); - if (tooltip10) { - viewOfG2.interaction("tooltip"); - } - execPlotAdaptor(type2, viewOfG2, options2); - }); - return params; -} -function adaptor34(params) { - return flow(animation, multiView, multiPlot, interaction, animation, theme, tooltip)(params); -} - -// node_modules/@antv/g2plot/esm/plots/mix/interactions/association.js -var import_util426 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/mix/interactions/utils.js -var import_util425 = __toModule(require_lib()); -function getElementValue2(element, field6) { - var model = element.getModel(); - var record = model.data; - var value2; - if ((0, import_util425.isArray)(record)) { - value2 = record[0][field6]; - } else { - value2 = record[field6]; - } - return value2; -} -function clearHighlight2(view) { - var elements = getAllElements(view); - (0, import_util425.each)(elements, function(el) { - if (el.hasState("active")) { - el.setState("active", false); - } - if (el.hasState("selected")) { - el.setState("selected", false); - } - if (el.hasState("inactive")) { - el.setState("inactive", false); - } - }); -} - -// node_modules/@antv/g2plot/esm/plots/mix/interactions/association.js -var Association = function(_super) { - __extends(Association2, _super); - function Association2() { - return _super !== null && _super.apply(this, arguments) || this; - } - Association2.prototype.getAssociationItems = function(views, params) { - var _a6; - var event = this.context.event; - var _b = params || {}, linkField = _b.linkField, dim = _b.dim; - var items = []; - if ((_a6 = event.data) === null || _a6 === void 0 ? void 0 : _a6.data) { - var data_1 = event.data.data; - (0, import_util426.each)(views, function(v3) { - var _a7, _b2; - var field6 = linkField; - if (dim === "x") { - field6 = v3.getXScale().field; - } else if (dim === "y") { - field6 = (_a7 = v3.getYScales().find(function(s4) { - return s4.field === field6; - })) === null || _a7 === void 0 ? void 0 : _a7.field; - } else if (!field6) { - field6 = (_b2 = v3.getGroupScales()[0]) === null || _b2 === void 0 ? void 0 : _b2.field; - } - if (!field6) { - return; - } - var elements = (0, import_util426.map)(getAllElements(v3), function(ele) { - var active = false; - var inactive = false; - var dataValue = (0, import_util426.isArray)(data_1) ? (0, import_util426.get)(data_1[0], field6) : (0, import_util426.get)(data_1, field6); - if (getElementValue2(ele, field6) === dataValue) { - active = true; - } else { - inactive = true; - } - return { element: ele, view: v3, active, inactive }; - }); - items.push.apply(items, elements); - }); - } - return items; - }; - Association2.prototype.showTooltip = function(params) { - var siblings = getSiblingViews(this.context.view); - var elements = this.getAssociationItems(siblings, params); - (0, import_util426.each)(elements, function(ele) { - if (ele.active) { - var box2 = ele.element.shape.getCanvasBBox(); - ele.view.showTooltip({ x: box2.minX + box2.width / 2, y: box2.minY + box2.height / 2 }); - } - }); - }; - Association2.prototype.hideTooltip = function() { - var siblings = getSiblingViews(this.context.view); - (0, import_util426.each)(siblings, function(sibling) { - sibling.hideTooltip(); - }); - }; - Association2.prototype.active = function(params) { - var views = getViews(this.context.view); - var items = this.getAssociationItems(views, params); - (0, import_util426.each)(items, function(item) { - var active = item.active, element = item.element; - if (active) { - element.setState("active", true); - } - }); - }; - Association2.prototype.selected = function(params) { - var views = getViews(this.context.view); - var items = this.getAssociationItems(views, params); - (0, import_util426.each)(items, function(item) { - var active = item.active, element = item.element; - if (active) { - element.setState("selected", true); - } - }); - }; - Association2.prototype.highlight = function(params) { - var views = getViews(this.context.view); - var items = this.getAssociationItems(views, params); - (0, import_util426.each)(items, function(item) { - var inactive = item.inactive, element = item.element; - if (inactive) { - element.setState("inactive", true); - } - }); - }; - Association2.prototype.reset = function() { - var views = getViews(this.context.view); - (0, import_util426.each)(views, function(v3) { - clearHighlight2(v3); - }); - }; - return Association2; -}(base_default12); -registerAction("association", Association); -registerInteraction("association-active", { - start: [{ trigger: "element:mouseenter", action: "association:active" }], - end: [{ trigger: "element:mouseleave", action: "association:reset" }] -}); -registerInteraction("association-selected", { - start: [{ trigger: "element:mouseenter", action: "association:selected" }], - end: [{ trigger: "element:mouseleave", action: "association:reset" }] -}); -registerInteraction("association-highlight", { - start: [{ trigger: "element:mouseenter", action: "association:highlight" }], - end: [{ trigger: "element:mouseleave", action: "association:reset" }] -}); -registerInteraction("association-tooltip", { - start: [{ trigger: "element:mousemove", action: "association:showTooltip" }], - end: [{ trigger: "element:mouseleave", action: "association:hideTooltip" }] -}); - -// node_modules/@antv/g2plot/esm/plots/mix/index.js -var Mix = function(_super) { - __extends(Mix2, _super); - function Mix2() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "mix"; - return _this; - } - Mix2.prototype.getSchemaAdaptor = function() { - return adaptor34; - }; - return Mix2; -}(Plot); - -// node_modules/@antv/g2plot/esm/plots/facet/adaptor.js -var import_util428 = __toModule(require_lib()); - -// node_modules/@antv/g2plot/esm/plots/facet/utils.js -var import_util427 = __toModule(require_lib()); -function execViewAdaptor(viewOfG2, options) { - var data3 = options.data, coordinate11 = options.coordinate, interactions = options.interactions, annotations = options.annotations, animation7 = options.animation, tooltip10 = options.tooltip, axes = options.axes, meta23 = options.meta, geometries = options.geometries; - if (data3) { - viewOfG2.data(data3); - } - var scales = {}; - if (axes) { - (0, import_util427.each)(axes, function(axis22, field6) { - scales[field6] = pick4(axis22, AXIS_META_CONFIG_KEYS); - }); - } - scales = deepAssign({}, meta23, scales); - viewOfG2.scale(scales); - if (coordinate11) { - viewOfG2.coordinate(coordinate11); - } - if (axes === false) { - viewOfG2.axis(false); - } else { - (0, import_util427.each)(axes, function(axis22, field6) { - viewOfG2.axis(field6, axis22); - }); - } - (0, import_util427.each)(geometries, function(geometry35) { - var ext = geometry({ - chart: viewOfG2, - options: geometry35 - }).ext; - var adjust4 = geometry35.adjust; - if (adjust4) { - ext.geometry.adjust(adjust4); - } - }); - (0, import_util427.each)(interactions, function(interaction8) { - if (interaction8.enable === false) { - viewOfG2.removeInteraction(interaction8.type); - } else { - viewOfG2.interaction(interaction8.type, interaction8.cfg); - } - }); - (0, import_util427.each)(annotations, function(annotation4) { - viewOfG2.annotation()[annotation4.type](__assign({}, annotation4)); - }); - if (typeof animation7 === "boolean") { - viewOfG2.animate(false); - } else { - viewOfG2.animate(true); - (0, import_util427.each)(viewOfG2.geometries, function(g4) { - g4.animate(animation7); - }); - } - if (tooltip10) { - viewOfG2.interaction("tooltip"); - viewOfG2.tooltip(tooltip10); - } else if (tooltip10 === false) { - viewOfG2.removeInteraction("tooltip"); - } -} - -// node_modules/@antv/g2plot/esm/plots/facet/adaptor.js -function facetAdaptor(params) { - var chart = params.chart, options = params.options; - var facetType = options.type, data3 = options.data, fields = options.fields, eachView = options.eachView; - var restFacetCfg = (0, import_util428.omit)(options, [ - "type", - "data", - "fields", - "eachView", - "axes", - "meta", - "tooltip", - "coordinate", - "theme", - "legend", - "interactions", - "annotations" - ]); - chart.data(data3); - chart.facet(facetType, __assign(__assign({}, restFacetCfg), { fields, eachView: function(viewOfG2, facet) { - var viewOptions = eachView(viewOfG2, facet); - if (viewOptions.geometries) { - execViewAdaptor(viewOfG2, viewOptions); - } else { - var plot = viewOptions; - var plotOptions = plot.options; - if (plotOptions.tooltip) { - viewOfG2.interaction("tooltip"); - } - execPlotAdaptor(plot.type, viewOfG2, plotOptions); - } - } })); - return params; -} -function component(params) { - var chart = params.chart, options = params.options; - var axes = options.axes, meta23 = options.meta, tooltip10 = options.tooltip, coordinate11 = options.coordinate, theme4 = options.theme, legend18 = options.legend, interactions = options.interactions, annotations = options.annotations; - var scales = {}; - if (axes) { - (0, import_util428.each)(axes, function(axis22, field6) { - scales[field6] = pick4(axis22, AXIS_META_CONFIG_KEYS); - }); - } - scales = deepAssign({}, meta23, scales); - chart.scale(scales); - chart.coordinate(coordinate11); - if (!axes) { - chart.axis(false); - } else { - (0, import_util428.each)(axes, function(axis22, field6) { - chart.axis(field6, axis22); - }); - } - if (tooltip10) { - chart.interaction("tooltip"); - chart.tooltip(tooltip10); - } else if (tooltip10 === false) { - chart.removeInteraction("tooltip"); - } - chart.legend(legend18); - if (theme4) { - chart.theme(theme4); - } - (0, import_util428.each)(interactions, function(interaction8) { - if (interaction8.enable === false) { - chart.removeInteraction(interaction8.type); - } else { - chart.interaction(interaction8.type, interaction8.cfg); - } - }); - (0, import_util428.each)(annotations, function(annotation4) { - chart.annotation()[annotation4.type](__assign({}, annotation4)); - }); - return params; -} -function adaptor35(params) { - return flow(theme, facetAdaptor, component)(params); -} - -// node_modules/@antv/g2plot/esm/plots/facet/constant.js -var DEFAULT_OPTIONS36 = { - title: { - style: { - fontSize: 12, - fill: "rgba(0,0,0,0.65)" - } - }, - rowTitle: { - style: { - fontSize: 12, - fill: "rgba(0,0,0,0.65)" - } - }, - columnTitle: { - style: { - fontSize: 12, - fill: "rgba(0,0,0,0.65)" - } - } -}; - -// node_modules/@antv/g2plot/esm/plots/facet/index.js -var Facet2 = function(_super) { - __extends(Facet3, _super); - function Facet3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.type = "area"; - return _this; - } - Facet3.getDefaultOptions = function() { - return DEFAULT_OPTIONS36; - }; - Facet3.prototype.getDefaultOptions = function() { - return Facet3.getDefaultOptions(); - }; - Facet3.prototype.getSchemaAdaptor = function() { - return adaptor35; - }; - return Facet3; -}(Plot); - -// node_modules/@antv/g2plot/esm/lab.js -var Stage; -(function(Stage2) { - Stage2["DEV"] = "DEV"; - Stage2["BETA"] = "BETA"; - Stage2["STABLE"] = "STABLE"; -})(Stage || (Stage = {})); -function notice(stage, plotType) { - console.warn(stage === Stage.DEV ? "Plot '" + plotType + "' is in DEV stage, just give us issues." : stage === Stage.BETA ? "Plot '" + plotType + "' is in BETA stage, DO NOT use it in production env." : stage === Stage.STABLE ? "Plot '" + plotType + `' is in STABLE stage, import it by "import { ` + plotType + ` } from '@antv/g2plot'".` : "invalid Stage type."); -} -var Lab = function() { - function Lab2() { - } - Object.defineProperty(Lab2, "MultiView", { - get: function() { - notice(Stage.STABLE, "MultiView"); - return Mix; - }, - enumerable: false, - configurable: true - }); - return Lab2; -}(); - -// node_modules/@antv/g2plot/esm/index.js -registerLocale("en-US", EN_US_LOCALE); -registerLocale("zh-CN", ZH_CN_LOCALE); -var adaptors = { scale: scale7, legend, tooltip, annotation, interaction, theme, animation }; - -// node_modules/@ant-design/plots/es/hooks/useChart.js -var import_util430 = __toModule(require_lib()); - -// node_modules/@ant-design/plots/es/util/createNode.js -var createNode = function(children, type2) { - var mountPoint = document.createElement("div"); - if (type2 === "tooltip") { - mountPoint.className = "g2-tooltip"; - } - compat_module_default.render(children, mountPoint); - return mountPoint; -}; -var createNode_default = createNode; - -// node_modules/@ant-design/plots/es/util/utils.js -var isType3 = function(value2, type2) { - var toString7 = {}.toString; - return toString7.call(value2) === "[object ".concat(type2, "]"); -}; -var clone16 = function(source) { - if (!source) { - return source; - } - var target = {}; - for (var k4 in source) { - target[k4] = source[k4]; - } - return target; -}; -var deepClone = function(source) { - if (!source || typeof source !== "object") { - return source; - } - var target; - if (Array.isArray(source)) { - target = source.map(function(item) { - return deepClone(item); - }); - } else { - target = {}; - Object.keys(source).forEach(function(key) { - return target[key] = deepClone(source[key]); - }); - } - return target; -}; -var hasPath = function(source, path) { - var current = source; - for (var i4 = 0; i4 < path.length; i4 += 1) { - if (current === null || current === void 0 ? void 0 : current[path[i4]]) { - current = current[path[i4]]; - } else { - current = void 0; - break; - } - } - return current; -}; -var setPath = function(source, path, value2) { - if (!source) { - return source; - } - var o3 = source; - path.forEach(function(key, idx) { - if (idx < path.length - 1) { - o3 = o3[key]; - } else { - o3[key] = value2; - } - }); - return source; -}; - -// node_modules/@ant-design/plots/es/util/getChart.js -var import_util429 = __toModule(require_lib()); -var getChart = function(chartRef, chart) { - if (!chartRef) { - return; - } - if ((0, import_util429.isFunction)(chartRef)) { - chartRef(chart); - } else { - chartRef.current = chart; - } -}; - -// node_modules/@ant-design/plots/es/hooks/useChart.js -var __assign4 = function() { - __assign4 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign4.apply(this, arguments); -}; -var __rest4 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -function useInit(ChartClass, config) { - var chart = s3(); - var chartOptions = s3(); - var container2 = s3(null); - var onReady = config.onReady, onEvent = config.onEvent; - var toDataURL = function(type2, encoderOptions) { - var _a6; - if (type2 === void 0) { - type2 = "image/png"; - } - return (_a6 = chart.current) === null || _a6 === void 0 ? void 0 : _a6.chart.canvas.cfg.el.toDataURL(type2, encoderOptions); - }; - var downloadImage = function(name, type2, encoderOptions) { - var _a6; - if (name === void 0) { - name = "download"; - } - if (type2 === void 0) { - type2 = "image/png"; - } - var imageName = name; - if (name.indexOf(".") === -1) { - imageName = "".concat(name, ".").concat(type2.split("/")[1]); - } - var base64 = (_a6 = chart.current) === null || _a6 === void 0 ? void 0 : _a6.chart.canvas.cfg.el.toDataURL(type2, encoderOptions); - var a4 = document.createElement("a"); - a4.href = base64; - a4.download = imageName; - document.body.appendChild(a4); - a4.click(); - document.body.removeChild(a4); - a4 = null; - return imageName; - }; - var reactDomToString = function(source, path, type2) { - var statisticCustomHtml = hasPath(source, path); - setPath(source, path, function() { - var arg = []; - for (var _i = 0; _i < arguments.length; _i++) { - arg[_i] = arguments[_i]; - } - var statisticDom = isType3(statisticCustomHtml, "Function") ? statisticCustomHtml.apply(void 0, arg) : statisticCustomHtml; - if (isType3(statisticDom, "String") || isType3(statisticDom, "Number") || isType3(statisticDom, "HTMLDivElement")) { - return statisticDom; - } - return createNode_default(statisticDom, type2); - }); - }; - var processConfig = function() { - if (hasPath(config, ["statistic", "content", "customHtml"])) { - reactDomToString(config, ["statistic", "content", "customHtml"]); - } - if (hasPath(config, ["statistic", "title", "customHtml"])) { - reactDomToString(config, ["statistic", "title", "customHtml"]); - } - if (typeof config.tooltip === "object") { - if (hasPath(config, ["tooltip", "container"])) { - reactDomToString(config, ["tooltip", "container"], "tooltip"); - } - if (hasPath(config, ["tooltip", "customContent"])) { - reactDomToString(config, ["tooltip", "customContent"], "tooltip"); - } - } - }; - y2(function() { - if (chart.current && !(0, import_util430.isEqual)(chartOptions.current, config)) { - var changeData = false; - if (chartOptions.current) { - var _a6 = chartOptions.current, currentData = _a6.data, currentValue = _a6.value, currentPercent = _a6.percent, currentConfig = __rest4(_a6, ["data", "value", "percent"]); - var inputData = config.data, inputValue = config.value, inputPercent = config.percent, inputConfig = __rest4(config, ["data", "value", "percent"]); - changeData = (0, import_util430.isEqual)(currentConfig, inputConfig); - } - chartOptions.current = deepClone(config); - if (changeData && (0, import_util430.get)(config, "chartType") !== "Mix") { - var changeType_1 = "data"; - var typeMaps = ["percent"]; - var currentKeys_1 = Object.keys(config); - typeMaps.forEach(function(type2) { - if (currentKeys_1.includes(type2)) { - changeType_1 = type2; - } - }); - chart.current.changeData((config === null || config === void 0 ? void 0 : config[changeType_1]) || []); - } else { - processConfig(); - chart.current.update(config); - } - } - }, [config]); - y2(function() { - if (!container2.current) { - return function() { - return null; - }; - } - if (!chartOptions.current) { - chartOptions.current = deepClone(config); - } - processConfig(); - var chartInstance = new ChartClass(container2.current, __assign4({}, config)); - chartInstance.toDataURL = function(type2, encoderOptions) { - return toDataURL(type2, encoderOptions); - }; - chartInstance.downloadImage = function(name, type2, encoderOptions) { - return downloadImage(name, type2, encoderOptions); - }; - chartInstance.render(); - chart.current = clone16(chartInstance); - if (onReady) { - onReady(chartInstance); - } - var handler = function(event) { - if (onEvent) { - onEvent(chartInstance, event); - } - }; - chartInstance.on("*", handler); - return function() { - if (chart.current) { - chart.current.destroy(); - chart.current.off("*", handler); - chart.current = void 0; - } - }; - }, []); - return { - chart, - container: container2 - }; -} - -// node_modules/@ant-design/plots/es/errorBoundary/index.js -var __extends4 = function() { - var extendStatics = function(d3, b10) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - }; - return extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -var ErrorBoundary = function(_super) { - __extends4(ErrorBoundary3, _super); - function ErrorBoundary3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.state = { - hasError: false - }; - _this.renderError = function(e4) { - var errorTemplate = _this.props.errorTemplate; - switch (e4) { - default: - return errorTemplate && typeof errorTemplate === "function" ? errorTemplate(e4) : compat_module_default.createElement("h5", null, "\u7EC4\u4EF6\u51FA\u9519\u4E86\uFF0C\u8BF7\u6838\u67E5\u540E\u91CD\u8BD5\uFF1A ", e4.message); - } - }; - return _this; - } - ErrorBoundary3.getDerivedStateFromError = function(error) { - return { hasError: true, error }; - }; - ErrorBoundary3.getDerivedStateFromProps = function(nextProps, state2) { - if (state2.children !== nextProps.children) { - return { - children: nextProps.children, - hasError: false, - error: void 0 - }; - } - return null; - }; - ErrorBoundary3.prototype.render = function() { - if (this.state.hasError) { - return this.renderError(this.state.error); - } - return compat_module_default.createElement(d, null, this.props.children); - }; - return ErrorBoundary3; -}(compat_module_default.Component); -var errorBoundary_default = ErrorBoundary; - -// node_modules/react-content-loader/dist/react-content-loader.es.js -var __assign5 = function() { - __assign5 = Object.assign || function __assign32(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign5.apply(this, arguments); -}; -function __rest5(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -} -var uid = function() { - return Math.random().toString(36).substring(6); -}; -var SVG = function(_a6) { - var animate = _a6.animate, backgroundColor = _a6.backgroundColor, backgroundOpacity = _a6.backgroundOpacity, baseUrl = _a6.baseUrl, children = _a6.children, foregroundColor = _a6.foregroundColor, foregroundOpacity = _a6.foregroundOpacity, gradientRatio = _a6.gradientRatio, uniqueKey = _a6.uniqueKey, interval3 = _a6.interval, rtl = _a6.rtl, speed = _a6.speed, style = _a6.style, title = _a6.title, props = __rest5(_a6, ["animate", "backgroundColor", "backgroundOpacity", "baseUrl", "children", "foregroundColor", "foregroundOpacity", "gradientRatio", "uniqueKey", "interval", "rtl", "speed", "style", "title"]); - var fixedId = uniqueKey || uid(); - var idClip = fixedId + "-diff"; - var idGradient = fixedId + "-animated-diff"; - var idAria = fixedId + "-aria"; - var rtlStyle = rtl ? { transform: "scaleX(-1)" } : null; - var keyTimes = "0; " + interval3 + "; 1"; - var dur = speed + "s"; - return v("svg", __assign5({ "aria-labelledby": idAria, role: "img", style: __assign5(__assign5({}, style), rtlStyle) }, props), title ? v("title", { id: idAria }, title) : null, v("rect", { role: "presentation", x: "0", y: "0", width: "100%", height: "100%", clipPath: "url(" + baseUrl + "#" + idClip + ")", style: { fill: "url(" + baseUrl + "#" + idGradient + ")" } }), v("defs", { role: "presentation" }, v("clipPath", { id: idClip }, children), v("linearGradient", { id: idGradient }, v("stop", { offset: "0%", stopColor: backgroundColor, stopOpacity: backgroundOpacity }, animate && v("animate", { attributeName: "offset", values: -gradientRatio + "; " + -gradientRatio + "; 1", keyTimes, dur, repeatCount: "indefinite" })), v("stop", { offset: "50%", stopColor: foregroundColor, stopOpacity: foregroundOpacity }, animate && v("animate", { attributeName: "offset", values: -gradientRatio / 2 + "; " + -gradientRatio / 2 + "; " + (1 + gradientRatio / 2), keyTimes, dur, repeatCount: "indefinite" })), v("stop", { offset: "100%", stopColor: backgroundColor, stopOpacity: backgroundOpacity }, animate && v("animate", { attributeName: "offset", values: "0; 0; " + (1 + gradientRatio), keyTimes, dur, repeatCount: "indefinite" }))))); -}; -SVG.defaultProps = { - animate: true, - backgroundColor: "#f5f6f7", - backgroundOpacity: 1, - baseUrl: "", - foregroundColor: "#eee", - foregroundOpacity: 1, - gradientRatio: 2, - id: null, - interval: 0.25, - rtl: false, - speed: 1.2, - style: {}, - title: "Loading..." -}; -var ContentLoader = function(props) { - return props.children ? v(SVG, __assign5({}, props)) : v(ReactContentLoaderFacebook, __assign5({}, props)); -}; -var ReactContentLoaderFacebook = function(props) { - return v(ContentLoader, __assign5({ viewBox: "0 0 476 124" }, props), v("rect", { x: "48", y: "8", width: "88", height: "6", rx: "3" }), v("rect", { x: "48", y: "26", width: "52", height: "6", rx: "3" }), v("rect", { x: "0", y: "56", width: "410", height: "6", rx: "3" }), v("rect", { x: "0", y: "72", width: "380", height: "6", rx: "3" }), v("rect", { x: "0", y: "88", width: "178", height: "6", rx: "3" }), v("circle", { cx: "20", cy: "20", r: "20" })); -}; -var react_content_loader_es_default = ContentLoader; - -// node_modules/@ant-design/plots/es/util/createLoading.js -var ChartLoading = function(_a6) { - var loadingTemplate = _a6.loadingTemplate, _b = _a6.theme, theme4 = _b === void 0 ? "light" : _b; - var renderLoading = function() { - if (loadingTemplate) { - return loadingTemplate; - } - return compat_module_default.createElement(react_content_loader_es_default, { viewBox: "0 0 400 180", width: 200, height: 90, speed: 1, backgroundColor: theme4 === "dark" ? "#262626" : "#D9D9D9" }, compat_module_default.createElement("rect", { x: "20", y: "5", rx: "0", ry: "0", width: "1", height: "170" }), compat_module_default.createElement("rect", { x: "20", y: "175", rx: "0", ry: "0", width: "360", height: "1" }), compat_module_default.createElement("rect", { x: "40", y: "75", rx: "0", ry: "0", width: "35", height: "100" }), compat_module_default.createElement("rect", { x: "80", y: "125", rx: "0", ry: "0", width: "35", height: "50" }), compat_module_default.createElement("rect", { x: "120", y: "105", rx: "0", ry: "0", width: "35", height: "70" }), compat_module_default.createElement("rect", { x: "160", y: "35", rx: "0", ry: "0", width: "35", height: "140" }), compat_module_default.createElement("rect", { x: "200", y: "55", rx: "0", ry: "0", width: "35", height: "120" }), compat_module_default.createElement("rect", { x: "240", y: "15", rx: "0", ry: "0", width: "35", height: "160" }), compat_module_default.createElement("rect", { x: "280", y: "135", rx: "0", ry: "0", width: "35", height: "40" }), compat_module_default.createElement("rect", { x: "320", y: "85", rx: "0", ry: "0", width: "35", height: "90" })); - }; - return compat_module_default.createElement("div", { className: "charts-loading-container", style: { - position: "absolute", - width: "100%", - height: "100%", - display: "flex", - alignItems: "center", - justifyContent: "center", - left: 0, - top: 0, - zIndex: 99, - backgroundColor: theme4 === "dark" ? "rgb(20, 20, 20)" : "rgb(255, 255, 255)" - } }, renderLoading()); -}; -var createLoading_default = ChartLoading; - -// node_modules/@ant-design/plots/es/components/area/index.js -var __rest6 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var AreaChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest6(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Area2, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var area_default2 = AreaChart; - -// node_modules/@ant-design/plots/es/components/bar/index.js -var __rest7 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var BarChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest7(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Bar, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var bar_default = BarChart; - -// node_modules/@ant-design/plots/es/components/bullet/index.js -var __rest8 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var BulletChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest8(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Bullet, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var bullet_default = BulletChart; - -// node_modules/@ant-design/plots/es/components/column/index.js -var __rest9 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var ColumnChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest9(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Column, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var column_default = ColumnChart; - -// node_modules/@ant-design/plots/es/components/funnel/index.js -var __rest10 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var FunnelChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest10(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Funnel, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var funnel_default = FunnelChart; - -// node_modules/@ant-design/plots/es/components/histogram/index.js -var __rest11 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var HistogramChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest11(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Histogram, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var histogram_default = HistogramChart; - -// node_modules/@ant-design/plots/es/components/line/index.js -var __rest12 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var LineChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest12(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Line6, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var line_default10 = LineChart; - -// node_modules/@ant-design/plots/es/components/box/index.js -var __rest13 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var BoxChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest13(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Box, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var box_default = BoxChart; - -// node_modules/@ant-design/plots/es/components/liquid/index.js -var __rest14 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var LiquidChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest14(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Liquid, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var liquid_default = LiquidChart; - -// node_modules/@ant-design/plots/es/components/heatmap/index.js -var __rest15 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var HeatmapChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest15(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Heatmap2, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var heatmap_default2 = HeatmapChart; - -// node_modules/@ant-design/plots/es/components/pie/index.js -var __rest16 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var PieChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest16(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Pie, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var pie_default2 = PieChart; - -// node_modules/@ant-design/plots/es/components/gauge/index.js -var __rest17 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var GaugeChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest17(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Gauge, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var gauge_default = GaugeChart; - -// node_modules/@ant-design/plots/es/components/progress/index.js -var __rest18 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var ProgressChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest18(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Progress, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var progress_default = ProgressChart; - -// node_modules/@ant-design/plots/es/components/radar/index.js -var __rest19 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var RadarChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest19(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Radar, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var radar_default = RadarChart; - -// node_modules/@ant-design/plots/es/components/ringProgress/index.js -var __rest20 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var RingProgressChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest20(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(RingProgress, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var ringProgress_default = RingProgressChart; - -// node_modules/@ant-design/plots/es/components/rose/index.js -var __rest21 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var RoseChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest21(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Rose, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var rose_default = RoseChart; - -// node_modules/@ant-design/plots/es/components/chord/index.js -var __rest22 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var ChordChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest22(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Chord, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var chord_default = ChordChart; - -// node_modules/@ant-design/plots/es/components/scatter/index.js -var __rest23 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var ScatterChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest23(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Scatter, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var scatter_default = ScatterChart; - -// node_modules/@ant-design/plots/es/components/tinyArea/index.js -var __rest24 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var TinyAreaChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest24(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(TinyArea, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var tinyArea_default = TinyAreaChart; - -// node_modules/@ant-design/plots/es/components/tinyColumn/index.js -var __rest25 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var TinyColumnChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest25(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(TinyColumn, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var tinyColumn_default = TinyColumnChart; - -// node_modules/@ant-design/plots/es/components/dualAxes/index.js -var __rest26 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var DualAxesChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest26(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(DualAxes, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var dualAxes_default = DualAxesChart; - -// node_modules/@ant-design/plots/es/components/tinyLine/index.js -var __rest27 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var TinyLineChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest27(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(TinyLine, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var tinyLine_default = TinyLineChart; - -// node_modules/@ant-design/plots/es/components/waterfall/index.js -var __rest28 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var WaterfallChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest28(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Waterfall, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var waterfall_default = WaterfallChart; - -// node_modules/@ant-design/plots/es/components/wordCloud/index.js -var __rest29 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var WordCloudChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest29(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(WordCloud, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var wordCloud_default = WordCloudChart; - -// node_modules/@ant-design/plots/es/components/sunburst/index.js -var __rest30 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var SunburstChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest30(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Sunburst, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var sunburst_default = SunburstChart; - -// node_modules/@ant-design/plots/es/components/stock/index.js -var __rest31 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var StockChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest31(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Stock, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var stock_default = StockChart; - -// node_modules/@ant-design/plots/es/components/radialBar/index.js -var __rest32 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var RadialBarChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest32(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(RadialBar, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var radialBar_default = RadialBarChart; - -// node_modules/@ant-design/plots/es/components/sankey/index.js -var __rest33 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var SankeyChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest33(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Sankey2, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var sankey_default = SankeyChart; - -// node_modules/@ant-design/plots/es/components/treemap/index.js -var __rest34 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var TreemapChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest34(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Treemap, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var treemap_default2 = TreemapChart; - -// node_modules/@ant-design/plots/es/components/violin/index.js -var __rest35 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var ViolinChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest35(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Violin2, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var violin_default2 = ViolinChart; - -// node_modules/@ant-design/plots/es/components/venn/index.js -var __rest36 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var VennChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest36(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Venn, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var venn_default = VennChart; - -// node_modules/@ant-design/plots/es/components/circlePacking/index.js -var __rest37 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var CirclePackingChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest37(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(CirclePacking, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var circlePacking_default = CirclePackingChart; - -// node_modules/@ant-design/plots/es/components/facet/index.js -var __rest38 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var FacetChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest38(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Facet2, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var facet_default = FacetChart; - -// node_modules/@ant-design/plots/es/components/mix/index.js -var __assign6 = function() { - __assign6 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign6.apply(this, arguments); -}; -var __rest39 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var MultiViewChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest39(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(Mix, __assign6(__assign6({}, rest), { chartType: "Mix" })), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var mix_default = MultiViewChart; - -// node_modules/@ant-design/plots/es/components/bidirectionalBar/index.js -var __rest40 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var BidirectionalBarChart = x3(function(props, ref) { - var chartRef = props.chartRef, _a6 = props.style, style = _a6 === void 0 ? { - height: "inherit" - } : _a6, className = props.className, loading = props.loading, loadingTemplate = props.loadingTemplate, errorTemplate = props.errorTemplate, rest = __rest40(props, ["chartRef", "style", "className", "loading", "loadingTemplate", "errorTemplate"]); - var _b = useInit(BidirectionalBar, rest), chart = _b.chart, container2 = _b.container; - y2(function() { - getChart(chartRef, chart.current); - }, [chart.current]); - _2(ref, function() { - return { - getChart: function() { - return chart.current; - } - }; - }); - return compat_module_default.createElement(errorBoundary_default, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default, { loadingTemplate, theme: props.theme }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}); -var bidirectionalBar_default = BidirectionalBarChart; - -// node_modules/@ant-design/plots/es/index.js -var es_default = { - Area: area_default2, - Bar: bar_default, - Box: box_default, - Bullet: bullet_default, - Column: column_default, - Funnel: funnel_default, - Histogram: histogram_default, - Line: line_default10, - Liquid: liquid_default, - Heatmap: heatmap_default2, - Pie: pie_default2, - Progress: progress_default, - Radar: radar_default, - Facet: facet_default, - RingProgress: ringProgress_default, - Rose: rose_default, - Chord: chord_default, - Scatter: scatter_default, - TinyArea: tinyArea_default, - TinyColumn: tinyColumn_default, - TinyLine: tinyLine_default, - Waterfall: waterfall_default, - WordCloud: wordCloud_default, - Sunburst: sunburst_default, - DualAxes: dualAxes_default, - Stock: stock_default, - RadialBar: radialBar_default, - Gauge: gauge_default, - CirclePacking: circlePacking_default, - Sankey: sankey_default, - Treemap: treemap_default2, - Violin: violin_default2, - Venn: venn_default, - MultiView: mix_default, - Mix: mix_default, - BidirectionalBar: bidirectionalBar_default, - getCanvasPattern, - FUNNEL_CONVERSATION_FIELD: FUNNEL_CONVERSATION, - G2: esm_exports3, - flow, - measureTextWidth: measureTextWidth2, - adaptors -}; - -// node_modules/@ant-design/graphs/es/index.js -var es_exports3 = {}; -__export(es_exports3, { - DagreFundFlowGraph: () => dagreFundFlow_default, - DagreGraph: () => dagre_default2, - DecompositionTreeGraph: () => decompositionTreeGraph_default, - Edge: () => edge_default2, - FlowAnalysisGraph: () => flowAnalysisGraph_default, - FundFlowGraph: () => fundFlowGraph_default, - G6: () => es_default6, - Graph: () => graph_default2, - IndentedTree: () => indented_default, - IndentedTreeGraph: () => indentedTreeGraph_default, - Node: () => node_default, - OrganizationGraph: () => organizationGraph_default, - OrganizationTreeGraph: () => organizationTreeGraph_default, - OrganizationalGraph: () => organizationalGraph_default, - RadialGraph: () => radialGraph_default, - RadialTreeGraph: () => radialTreeGraph_default -}); - -// node_modules/@antv/g6-core/es/behavior/behavior.js -var import_util468 = __toModule(require_lib()); - -// node_modules/@antv/g6-core/es/behavior/behaviorOption.js -var import_util467 = __toModule(require_lib()); -var behaviorOption_default = { - getDefaultCfg: function getDefaultCfg() { - return {}; - }, - getEvents: function getEvents() { - return {}; - }, - updateCfg: function updateCfg(cfg) { - Object.assign(this, cfg); - return true; - }, - shouldBegin: function shouldBegin() { - return true; - }, - shouldUpdate: function shouldUpdate() { - return true; - }, - shouldEnd: function shouldEnd() { - return true; - }, - bind: function bind2(graph) { - var _this = this; - var events = this.events; - this.graph = graph; - if (this.type === "drag-canvas" || this.type === "brush-select" || this.type === "lasso-select") { - graph.get("canvas").set("draggable", true); - } - (0, import_util467.each)(events, function(handler, event) { - graph.on(event, handler); - }); - document.addEventListener("visibilitychange", function() { - _this.keydown = false; - }); - }, - unbind: function unbind(graph) { - var events = this.events; - var draggable = graph.get("canvas").get("draggable"); - if (this.type === "drag-canvas" || this.type === "brush-select" || this.type === "lasso-select") { - graph.get("canvas").set("draggable", false); - } - (0, import_util467.each)(events, function(handler, event) { - graph.off(event, handler); - }); - graph.get("canvas").set("draggable", draggable); - }, - get: function get96(val) { - return this[val]; - }, - set: function set11(key, val) { - this[key] = val; - return this; - } -}; - -// node_modules/@antv/g6-core/es/behavior/behavior.js -var Behavior = function() { - function Behavior2() { - } - Behavior2.registerBehavior = function(type2, behavior) { - if (!behavior) { - throw new Error("please specify handler for this behavior: ".concat(type2)); - } - var prototype = (0, import_util468.clone)(behaviorOption_default); - Object.assign(prototype, behavior); - var base = function base2(cfg) { - var _this = this; - Object.assign(this, this.getDefaultCfg(), cfg); - var events = this.getEvents(); - this.events = null; - var eventsToBind = {}; - if (events) { - (0, import_util468.each)(events, function(handle, event) { - eventsToBind[event] = (0, import_util468.wrapBehavior)(_this, handle); - }); - this.events = eventsToBind; - } - }; - base.prototype = prototype; - Behavior2.types[type2] = base; - }; - Behavior2.hasBehavior = function(type2) { - return !!Behavior2.types[type2]; - }; - Behavior2.getBehavior = function(type2) { - return Behavior2.types[type2]; - }; - Behavior2.types = {}; - return Behavior2; -}(); -var behavior_default = Behavior; - -// node_modules/@antv/g6-core/es/behavior/index.js -var behavior_default2 = behavior_default; - -// node_modules/@antv/g6-core/es/graph/graph.js -var import_util502 = __toModule(require_lib()); - -// node_modules/@antv/algorithm/es/index.js -var es_exports2 = {}; -__export(es_exports2, { - GADDI: () => gaddi_default, - Stack: () => stack_default2, - breadthFirstSearch: () => bfs_default, - connectedComponent: () => getConnectedComponents, - cosineSimilarity: () => cosine_similarity_default, - default: () => es_default2, - depthFirstSearch: () => depthFirstSearch, - detectAllCycles: () => detectAllCycles, - detectAllDirectedCycle: () => detectAllDirectedCycle, - detectAllUndirectedCycle: () => detectAllUndirectedCycle, - detectCycle: () => detect_cycle_default, - detectDirectedCycle: () => detectDirectedCycle3, - dijkstra: () => dijkstra_default, - findAllPath: () => findAllPath, - findShortestPath: () => findShortestPath, - floydWarshall: () => floydWarshall_default, - getAdjMatrix: () => adjacent_matrix_default, - getDegree: () => degree_default, - getInDegree: () => getInDegree, - getNeighbors: () => getNeighbors, - getOutDegree: () => getOutDegree, - iLouvain: () => i_louvain_default, - kCore: () => k_core_default, - kMeans: () => k_means_default, - labelPropagation: () => label_propagation_default, - louvain: () => louvain_default, - minimumSpanningTree: () => mts_default, - nodesCosineSimilarity: () => nodes_cosine_similarity_default, - pageRank: () => pageRank_default -}); - -// node_modules/@antv/algorithm/es/adjacent-matrix.js -var adjMatrix = function adjMatrix2(graphData, directed) { - var nodes = graphData.nodes, edges = graphData.edges; - var matrix = []; - var nodeMap = {}; - if (!nodes) { - throw new Error("invalid nodes data!"); - } - if (nodes) { - nodes.forEach(function(node, i4) { - nodeMap[node.id] = i4; - var row = []; - matrix.push(row); - }); - } - if (edges) { - edges.forEach(function(edge2) { - var source = edge2.source, target = edge2.target; - var sIndex = nodeMap[source]; - var tIndex = nodeMap[target]; - if (!sIndex && sIndex !== 0 || !tIndex && tIndex !== 0) - return; - matrix[sIndex][tIndex] = 1; - if (!directed) { - matrix[tIndex][sIndex] = 1; - } - }); - } - return matrix; -}; -var adjacent_matrix_default = adjMatrix; - -// node_modules/@antv/algorithm/es/structs/linked-list.js -var defaultComparator = function defaultComparator2(a4, b10) { - if (a4 === b10) { - return true; - } - return false; -}; -var LinkedListNode = function() { - function LinkedListNode2(value2, next) { - if (next === void 0) { - next = null; - } - this.value = value2; - this.next = next; - } - LinkedListNode2.prototype.toString = function(callback) { - return callback ? callback(this.value) : "".concat(this.value); - }; - return LinkedListNode2; -}(); -var LinkedList = function() { - function LinkedList2(comparator) { - if (comparator === void 0) { - comparator = defaultComparator; - } - this.head = null; - this.tail = null; - this.compare = comparator; - } - LinkedList2.prototype.prepend = function(value2) { - var newNode = new LinkedListNode(value2, this.head); - this.head = newNode; - if (!this.tail) { - this.tail = newNode; - } - return this; - }; - LinkedList2.prototype.append = function(value2) { - var newNode = new LinkedListNode(value2); - if (!this.head) { - this.head = newNode; - this.tail = newNode; - return this; - } - this.tail.next = newNode; - this.tail = newNode; - return this; - }; - LinkedList2.prototype.delete = function(value2) { - if (!this.head) { - return null; - } - var deleteNode = null; - while (this.head && this.compare(this.head.value, value2)) { - deleteNode = this.head; - this.head = this.head.next; - } - var currentNode = this.head; - if (currentNode !== null) { - while (currentNode.next) { - if (this.compare(currentNode.next.value, value2)) { - deleteNode = currentNode.next; - currentNode.next = currentNode.next.next; - } else { - currentNode = currentNode.next; - } - } - } - if (this.compare(this.tail.value, value2)) { - this.tail = currentNode; - } - return deleteNode; - }; - LinkedList2.prototype.find = function(_a6) { - var _b = _a6.value, value2 = _b === void 0 ? void 0 : _b, _c = _a6.callback, callback = _c === void 0 ? void 0 : _c; - if (!this.head) { - return null; - } - var currentNode = this.head; - while (currentNode) { - if (callback && callback(currentNode.value)) { - return currentNode; - } - if (value2 !== void 0 && this.compare(currentNode.value, value2)) { - return currentNode; - } - currentNode = currentNode.next; - } - return null; - }; - LinkedList2.prototype.deleteTail = function() { - var deletedTail = this.tail; - if (this.head === this.tail) { - this.head = null; - this.tail = null; - return deletedTail; - } - var currentNode = this.head; - while (currentNode.next) { - if (!currentNode.next.next) { - currentNode.next = null; - } else { - currentNode = currentNode.next; - } - } - this.tail = currentNode; - return deletedTail; - }; - LinkedList2.prototype.deleteHead = function() { - if (!this.head) { - return null; - } - var deletedHead = this.head; - if (this.head.next) { - this.head = this.head.next; - } else { - this.head = null; - this.tail = null; - } - return deletedHead; - }; - LinkedList2.prototype.fromArray = function(values4) { - var _this = this; - values4.forEach(function(value2) { - return _this.append(value2); - }); - return this; - }; - LinkedList2.prototype.toArray = function() { - var nodes = []; - var currentNode = this.head; - while (currentNode) { - nodes.push(currentNode); - currentNode = currentNode.next; - } - return nodes; - }; - LinkedList2.prototype.reverse = function() { - var currentNode = this.head; - var prevNode = null; - var nextNode = null; - while (currentNode) { - nextNode = currentNode.next; - currentNode.next = prevNode; - prevNode = currentNode; - currentNode = nextNode; - } - this.tail = this.head; - this.head = prevNode; - }; - LinkedList2.prototype.toString = function(callback) { - if (callback === void 0) { - callback = void 0; - } - return this.toArray().map(function(node) { - return node.toString(callback); - }).toString(); - }; - return LinkedList2; -}(); -var linked_list_default = LinkedList; - -// node_modules/@antv/algorithm/es/structs/queue.js -var Queue = function() { - function Queue2() { - this.linkedList = new linked_list_default(); - } - Queue2.prototype.isEmpty = function() { - return !this.linkedList.head; - }; - Queue2.prototype.peek = function() { - if (!this.linkedList.head) { - return null; - } - return this.linkedList.head.value; - }; - Queue2.prototype.enqueue = function(value2) { - this.linkedList.append(value2); - }; - Queue2.prototype.dequeue = function() { - var removeHead = this.linkedList.deleteHead(); - return removeHead ? removeHead.value : null; - }; - Queue2.prototype.toString = function(callback) { - return this.linkedList.toString(callback); - }; - return Queue2; -}(); -var queue_default = Queue; - -// node_modules/@antv/algorithm/es/util.js -var getNeighbors = function getNeighbors2(nodeId, edges, type2) { - if (edges === void 0) { - edges = []; - } - var currentEdges = edges.filter(function(edge2) { - return edge2.source === nodeId || edge2.target === nodeId; - }); - if (type2 === "target") { - var neighhborsConverter_1 = function neighhborsConverter_12(edge2) { - return edge2.source === nodeId; - }; - return currentEdges.filter(neighhborsConverter_1).map(function(edge2) { - return edge2.target; - }); - } - if (type2 === "source") { - var neighhborsConverter_2 = function neighhborsConverter_22(edge2) { - return edge2.target === nodeId; - }; - return currentEdges.filter(neighhborsConverter_2).map(function(edge2) { - return edge2.source; - }); - } - var neighhborsConverter = function neighhborsConverter2(edge2) { - return edge2.source === nodeId ? edge2.target : edge2.source; - }; - return currentEdges.map(neighhborsConverter); -}; -var getOutEdgesNodeId = function getOutEdgesNodeId2(nodeId, edges) { - return edges.filter(function(edge2) { - return edge2.source === nodeId; - }); -}; -var getEdgesByNodeId = function getEdgesByNodeId2(nodeId, edges) { - return edges.filter(function(edge2) { - return edge2.source === nodeId || edge2.target === nodeId; - }); -}; -var uniqueId9 = function uniqueId10(index2) { - if (index2 === void 0) { - index2 = 0; - } - var random1 = "".concat(Math.random()).split(".")[1].substr(0, 5); - var random22 = "".concat(Math.random()).split(".")[1].substr(0, 5); - return "".concat(index2, "-").concat(random1).concat(random22); -}; - -// node_modules/@antv/algorithm/es/bfs.js -function initCallbacks(callbacks) { - if (callbacks === void 0) { - callbacks = {}; - } - var initiatedCallback = callbacks; - var stubCallback = function stubCallback2() { - }; - var allowTraversalCallback = function() { - var seen = {}; - return function(_a6) { - var next = _a6.next; - var id = next; - if (!seen[id]) { - seen[id] = true; - return true; - } - return false; - }; - }(); - initiatedCallback.allowTraversal = callbacks.allowTraversal || allowTraversalCallback; - initiatedCallback.enter = callbacks.enter || stubCallback; - initiatedCallback.leave = callbacks.leave || stubCallback; - return initiatedCallback; -} -var breadthFirstSearch = function breadthFirstSearch2(graphData, startNodeId, originalCallbacks, directed) { - if (directed === void 0) { - directed = true; - } - var callbacks = initCallbacks(originalCallbacks); - var nodeQueue = new queue_default(); - var _a6 = graphData.edges, edges = _a6 === void 0 ? [] : _a6; - nodeQueue.enqueue(startNodeId); - var previousNode = ""; - var _loop_1 = function _loop_12() { - var currentNode = nodeQueue.dequeue(); - callbacks.enter({ - current: currentNode, - previous: previousNode - }); - getNeighbors(currentNode, edges, directed ? "target" : void 0).forEach(function(nextNode) { - if (callbacks.allowTraversal({ - previous: previousNode, - current: currentNode, - next: nextNode - })) { - nodeQueue.enqueue(nextNode); - } - }); - callbacks.leave({ - current: currentNode, - previous: previousNode - }); - previousNode = currentNode; - }; - while (!nodeQueue.isEmpty()) { - _loop_1(); - } -}; -var bfs_default = breadthFirstSearch; - -// node_modules/@antv/algorithm/es/connected-component.js -var detectConnectedComponents = function detectConnectedComponents2(graphData) { - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var allComponents = []; - var visited = {}; - var nodeStack = []; - var getComponent = function getComponent2(node2) { - nodeStack.push(node2); - visited[node2.id] = true; - var neighbors = getNeighbors(node2.id, edges); - var _loop_1 = function _loop_12(i6) { - var neighbor = neighbors[i6]; - if (!visited[neighbor]) { - var targetNode = nodes.filter(function(node3) { - return node3.id === neighbor; - }); - if (targetNode.length > 0) { - getComponent2(targetNode[0]); - } - } - }; - for (var i5 = 0; i5 < neighbors.length; ++i5) { - _loop_1(i5); - } - }; - for (var i4 = 0; i4 < nodes.length; i4++) { - var node = nodes[i4]; - if (!visited[node.id]) { - getComponent(node); - var component2 = []; - while (nodeStack.length > 0) { - component2.push(nodeStack.pop()); - } - allComponents.push(component2); - } - } - return allComponents; -}; -var detectStrongConnectComponents = function detectStrongConnectComponents2(graphData) { - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var nodeStack = []; - var inStack = {}; - var indices = {}; - var lowLink = {}; - var allComponents = []; - var index2 = 0; - var getComponent = function getComponent2(node2) { - indices[node2.id] = index2; - lowLink[node2.id] = index2; - index2 += 1; - nodeStack.push(node2); - inStack[node2.id] = true; - var neighbors = getNeighbors(node2.id, edges, "target").filter(function(n3) { - return nodes.map(function(node3) { - return node3.id; - }).indexOf(n3) > -1; - }); - var _loop_2 = function _loop_22(i5) { - var targetNodeID = neighbors[i5]; - if (!indices[targetNodeID] && indices[targetNodeID] !== 0) { - var targetNode = nodes.filter(function(node3) { - return node3.id === targetNodeID; - }); - if (targetNode.length > 0) { - getComponent2(targetNode[0]); - } - lowLink[node2.id] = Math.min(lowLink[node2.id], lowLink[targetNodeID]); - } else if (inStack[targetNodeID]) { - lowLink[node2.id] = Math.min(lowLink[node2.id], indices[targetNodeID]); - } - }; - for (var i4 = 0; i4 < neighbors.length; i4++) { - _loop_2(i4); - } - if (lowLink[node2.id] === indices[node2.id]) { - var component2 = []; - while (nodeStack.length > 0) { - var tmpNode = nodeStack.pop(); - inStack[tmpNode.id] = false; - component2.push(tmpNode); - if (tmpNode === node2) - break; - } - if (component2.length > 0) { - allComponents.push(component2); - } - } - }; - for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { - var node = nodes_1[_i]; - if (!indices[node.id] && indices[node.id] !== 0) { - getComponent(node); - } - } - return allComponents; -}; -function getConnectedComponents(graphData, directed) { - if (directed) - return detectStrongConnectComponents(graphData); - return detectConnectedComponents(graphData); -} - -// node_modules/@antv/algorithm/es/degree.js -var degree2 = function degree3(graphData) { - var degrees = {}; - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - nodes.forEach(function(node) { - degrees[node.id] = { - degree: 0, - inDegree: 0, - outDegree: 0 - }; - }); - edges.forEach(function(edge2) { - degrees[edge2.source].degree++; - degrees[edge2.source].outDegree++; - degrees[edge2.target].degree++; - degrees[edge2.target].inDegree++; - }); - return degrees; -}; -var degree_default = degree2; -var getInDegree = function getInDegree2(graphData, nodeId) { - var nodeDegree = degree2(graphData); - if (nodeDegree[nodeId]) { - return degree2(graphData)[nodeId].inDegree; - } - return 0; -}; -var getOutDegree = function getOutDegree2(graphData, nodeId) { - var nodeDegree = degree2(graphData); - if (nodeDegree[nodeId]) { - return degree2(graphData)[nodeId].outDegree; - } - return 0; -}; - -// node_modules/@antv/algorithm/es/dfs.js -function initCallbacks2(callbacks) { - if (callbacks === void 0) { - callbacks = {}; - } - var initiatedCallback = callbacks; - var stubCallback = function stubCallback2() { - }; - var allowTraversalCallback = function() { - var seen = {}; - return function(_a6) { - var next = _a6.next; - if (!seen[next]) { - seen[next] = true; - return true; - } - return false; - }; - }(); - initiatedCallback.allowTraversal = callbacks.allowTraversal || allowTraversalCallback; - initiatedCallback.enter = callbacks.enter || stubCallback; - initiatedCallback.leave = callbacks.leave || stubCallback; - return initiatedCallback; -} -function depthFirstSearchRecursive(graphData, currentNode, previousNode, callbacks) { - callbacks.enter({ - current: currentNode, - previous: previousNode - }); - var _a6 = graphData.edges, edges = _a6 === void 0 ? [] : _a6; - getNeighbors(currentNode, edges, "target").forEach(function(nextNode) { - if (callbacks.allowTraversal({ - previous: previousNode, - current: currentNode, - next: nextNode - })) { - depthFirstSearchRecursive(graphData, nextNode, currentNode, callbacks); - } - }); - callbacks.leave({ - current: currentNode, - previous: previousNode - }); -} -function depthFirstSearch(graphData, startNodeId, callbacks) { - depthFirstSearchRecursive(graphData, startNodeId, "", initCallbacks2(callbacks)); -} - -// node_modules/@antv/algorithm/es/detect-cycle.js -var detectDirectedCycle = function detectDirectedCycle2(graphData) { - var cycle = null; - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6; - var dfsParentMap = {}; - var unvisitedSet = {}; - var visitingSet = {}; - var visitedSet = {}; - nodes.forEach(function(node) { - unvisitedSet[node.id] = node; - }); - var callbacks = { - enter: function enter(_a7) { - var currentNode = _a7.current, previousNode = _a7.previous; - if (visitingSet[currentNode]) { - cycle = {}; - var currentCycleNode = currentNode; - var previousCycleNode = previousNode; - while (previousCycleNode !== currentNode) { - cycle[currentCycleNode] = previousCycleNode; - currentCycleNode = previousCycleNode; - previousCycleNode = dfsParentMap[previousCycleNode]; - } - cycle[currentCycleNode] = previousCycleNode; - } else { - visitingSet[currentNode] = currentNode; - delete unvisitedSet[currentNode]; - dfsParentMap[currentNode] = previousNode; - } - }, - leave: function leave(_a7) { - var currentNode = _a7.current; - visitedSet[currentNode] = currentNode; - delete visitingSet[currentNode]; - }, - allowTraversal: function allowTraversal(_a7) { - var nextNode = _a7.next; - if (cycle) { - return false; - } - return !visitedSet[nextNode]; - } - }; - while (Object.keys(unvisitedSet).length) { - var firsetUnVisitedKey = Object.keys(unvisitedSet)[0]; - depthFirstSearch(graphData, firsetUnVisitedKey, callbacks); - } - return cycle; -}; -var detectAllUndirectedCycle = function detectAllUndirectedCycle2(graphData, nodeIds, include) { - var _a6, _b; - if (include === void 0) { - include = true; - } - var allCycles = []; - var components = getConnectedComponents(graphData, false); - for (var _i = 0, components_1 = components; _i < components_1.length; _i++) { - var component2 = components_1[_i]; - if (!component2.length) - continue; - var root = component2[0]; - var rootId = root.id; - var stack = [root]; - var parent_1 = (_a6 = {}, _a6[rootId] = root, _a6); - var used = (_b = {}, _b[rootId] = new Set(), _b); - while (stack.length > 0) { - var curNode = stack.pop(); - var curNodeId = curNode.id; - var neighbors = getNeighbors(curNodeId, graphData.edges); - var _loop_1 = function _loop_12(i5) { - var _c; - var neighborId = neighbors[i5]; - var neighbor = graphData.nodes.find(function(node) { - return node.id === neighborId; - }); - if (neighborId === curNodeId) { - allCycles.push((_c = {}, _c[neighborId] = curNode, _c)); - } else if (!(neighborId in used)) { - parent_1[neighborId] = curNode; - stack.push(neighbor); - used[neighborId] = new Set([curNode]); - } else if (!used[curNodeId].has(neighbor)) { - var cycleValid = true; - var cyclePath = [neighbor, curNode]; - var p4 = parent_1[curNodeId]; - while (used[neighborId].size && !used[neighborId].has(p4)) { - cyclePath.push(p4); - if (p4 === parent_1[p4.id]) - break; - else - p4 = parent_1[p4.id]; - } - cyclePath.push(p4); - if (nodeIds && include) { - cycleValid = false; - if (cyclePath.findIndex(function(node) { - return nodeIds.indexOf(node.id) > -1; - }) > -1) { - cycleValid = true; - } - } else if (nodeIds && !include) { - if (cyclePath.findIndex(function(node) { - return nodeIds.indexOf(node.id) > -1; - }) > -1) { - cycleValid = false; - } - } - if (cycleValid) { - var cycle = {}; - for (var index2 = 1; index2 < cyclePath.length; index2 += 1) { - cycle[cyclePath[index2 - 1].id] = cyclePath[index2]; - } - if (cyclePath.length) { - cycle[cyclePath[cyclePath.length - 1].id] = cyclePath[0]; - } - allCycles.push(cycle); - } - used[neighborId].add(curNode); - } - }; - for (var i4 = 0; i4 < neighbors.length; i4 += 1) { - _loop_1(i4); - } - } - } - return allCycles; -}; -var detectAllDirectedCycle = function detectAllDirectedCycle2(graphData, nodeIds, include) { - if (include === void 0) { - include = true; - } - var path = []; - var blocked = new Set(); - var B3 = []; - var allCycles = []; - var idx2Node = {}; - var node2Idx = {}; - var unblock = function unblock2(thisNode) { - var stack = [thisNode]; - while (stack.length > 0) { - var node2 = stack.pop(); - if (blocked.has(node2)) { - blocked.delete(node2); - B3[node2.id].forEach(function(n3) { - stack.push(n3); - }); - B3[node2.id].clear(); - } - } - }; - var circuit = function circuit2(node2, start, adjList2) { - var closed = false; - if (nodeIds && include === false && nodeIds.indexOf(node2.id) > -1) - return closed; - path.push(node2); - blocked.add(node2); - var neighbors = adjList2[node2.id]; - for (var i5 = 0; i5 < neighbors.length; i5 += 1) { - var neighbor = idx2Node[neighbors[i5]]; - if (neighbor === start) { - var cycle = {}; - for (var index2 = 1; index2 < path.length; index2 += 1) { - cycle[path[index2 - 1].id] = path[index2]; - } - if (path.length) { - cycle[path[path.length - 1].id] = path[0]; - } - allCycles.push(cycle); - closed = true; - } else if (!blocked.has(neighbor)) { - if (circuit2(neighbor, start, adjList2)) { - closed = true; - } - } - } - if (closed) { - unblock(node2); - } else { - for (var i5 = 0; i5 < neighbors.length; i5 += 1) { - var neighbor = idx2Node[neighbors[i5]]; - if (!B3[neighbor.id].has(node2)) { - B3[neighbor.id].add(node2); - } - } - } - path.pop(); - return closed; - }; - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6; - for (var i4 = 0; i4 < nodes.length; i4 += 1) { - var node = nodes[i4]; - var nodeId = node.id; - node2Idx[nodeId] = i4; - idx2Node[i4] = node; - } - if (nodeIds && include) { - var _loop_2 = function _loop_22(i5) { - var nodeId2 = nodeIds[i5]; - node2Idx[nodes[i5].id] = node2Idx[nodeId2]; - node2Idx[nodeId2] = 0; - idx2Node[0] = nodes.find(function(node2) { - return node2.id === nodeId2; - }); - idx2Node[node2Idx[nodes[i5].id]] = nodes[i5]; - }; - for (var i4 = 0; i4 < nodeIds.length; i4++) { - _loop_2(i4); - } - } - var getMinComponentAdj = function getMinComponentAdj2(components) { - var _a7; - var minCompIdx; - var minIdx2 = Infinity; - for (var i5 = 0; i5 < components.length; i5 += 1) { - var comp = components[i5]; - for (var j4 = 0; j4 < comp.length; j4++) { - var nodeIdx_1 = node2Idx[comp[j4].id]; - if (nodeIdx_1 < minIdx2) { - minIdx2 = nodeIdx_1; - minCompIdx = i5; - } - } - } - var component3 = components[minCompIdx]; - var adjList2 = []; - for (var i5 = 0; i5 < component3.length; i5 += 1) { - var node2 = component3[i5]; - adjList2[node2.id] = []; - for (var _i = 0, _b = getNeighbors(node2.id, graphData.edges, "target").filter(function(n3) { - return component3.map(function(c5) { - return c5.id; - }).indexOf(n3) > -1; - }); _i < _b.length; _i++) { - var neighbor = _b[_i]; - if (neighbor === node2.id && !(include === false && nodeIds.indexOf(node2.id) > -1)) { - allCycles.push((_a7 = {}, _a7[node2.id] = node2, _a7)); - } else { - adjList2[node2.id].push(node2Idx[neighbor]); - } - } - } - return { - component: component3, - adjList: adjList2, - minIdx: minIdx2 - }; - }; - var nodeIdx = 0; - while (nodeIdx < nodes.length) { - var subgraphNodes = nodes.filter(function(n3) { - return node2Idx[n3.id] >= nodeIdx; - }); - var sccs = detectStrongConnectComponents({ - nodes: subgraphNodes, - edges: graphData.edges - }).filter(function(component3) { - return component3.length > 1; - }); - if (sccs.length === 0) - break; - var scc = getMinComponentAdj(sccs); - var minIdx = scc.minIdx, adjList = scc.adjList, component2 = scc.component; - if (component2.length > 1) { - component2.forEach(function(node2) { - B3[node2.id] = new Set(); - }); - var startNode = idx2Node[minIdx]; - if (nodeIds && include && nodeIds.indexOf(startNode.id) === -1) - return allCycles; - circuit(startNode, startNode, adjList); - nodeIdx = minIdx + 1; - } else { - break; - } - } - return allCycles; -}; -var detectAllCycles = function detectAllCycles2(graphData, directed, nodeIds, include) { - if (include === void 0) { - include = true; - } - if (directed) - return detectAllDirectedCycle(graphData, nodeIds, include); - return detectAllUndirectedCycle(graphData, nodeIds, include); -}; -var detect_cycle_default = detectDirectedCycle; - -// node_modules/@antv/algorithm/es/dijkstra.js -var import_util473 = __toModule(require_lib()); -var minVertex = function minVertex2(D3, nodes, marks) { - var minDis = Infinity; - var minNode; - for (var i4 = 0; i4 < nodes.length; i4++) { - var nodeId = nodes[i4].id; - if (!marks[nodeId] && D3[nodeId] <= minDis) { - minDis = D3[nodeId]; - minNode = nodes[i4]; - } - } - return minNode; -}; -var dijkstra = function dijkstra2(graphData, source, directed, weightPropertyName) { - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var nodeIds = []; - var marks = {}; - var D3 = {}; - var prevs = {}; - nodes.forEach(function(node, i5) { - var id = node.id; - nodeIds.push(id); - D3[id] = Infinity; - if (id === source) - D3[id] = 0; - }); - var nodeNum = nodes.length; - var _loop_1 = function _loop_12(i5) { - var minNode = minVertex(D3, nodes, marks); - var minNodeId = minNode.id; - marks[minNodeId] = true; - if (D3[minNodeId] === Infinity) - return "continue"; - var relatedEdges = []; - if (directed) - relatedEdges = getOutEdgesNodeId(minNodeId, edges); - else - relatedEdges = getEdgesByNodeId(minNodeId, edges); - relatedEdges.forEach(function(edge2) { - var edgeTarget = edge2.target; - var edgeSource = edge2.source; - var w4 = edgeTarget === minNodeId ? edgeSource : edgeTarget; - var weight = weightPropertyName && edge2[weightPropertyName] ? edge2[weightPropertyName] : 1; - if (D3[w4] > D3[minNode.id] + weight) { - D3[w4] = D3[minNode.id] + weight; - prevs[w4] = [minNode.id]; - } else if (D3[w4] === D3[minNode.id] + weight) { - prevs[w4].push(minNode.id); - } - }); - }; - for (var i4 = 0; i4 < nodeNum; i4++) { - _loop_1(i4); - } - prevs[source] = [source]; - var paths = {}; - for (var target in D3) { - if (D3[target] !== Infinity) { - findAllPaths(source, target, prevs, paths); - } - } - var path = {}; - for (var target in paths) { - path[target] = paths[target][0]; - } - return { - length: D3, - path, - allPath: paths - }; -}; -var dijkstra_default = dijkstra; -function findAllPaths(source, target, prevs, foundPaths) { - if (source === target) { - return [source]; - } - if (foundPaths[target]) { - return foundPaths[target]; - } - var paths = []; - for (var _i = 0, _a6 = prevs[target]; _i < _a6.length; _i++) { - var prev = _a6[_i]; - var prevPaths = findAllPaths(source, prev, prevs, foundPaths); - if (!prevPaths) - return; - for (var _b = 0, prevPaths_1 = prevPaths; _b < prevPaths_1.length; _b++) { - var prePath = prevPaths_1[_b]; - if ((0, import_util473.isArray)(prePath)) - paths.push(__spreadArray(__spreadArray([], prePath, true), [target], false)); - else - paths.push([prePath, target]); - } - } - foundPaths[target] = paths; - return foundPaths[target]; -} - -// node_modules/@antv/algorithm/es/find-path.js -var findShortestPath = function findShortestPath2(graphData, start, end2, directed, weightPropertyName) { - var _a6 = dijkstra_default(graphData, start, directed, weightPropertyName), length5 = _a6.length, path = _a6.path, allPath = _a6.allPath; - return { - length: length5[end2], - path: path[end2], - allPath: allPath[end2] - }; -}; -var findAllPath = function findAllPath2(graphData, start, end2, directed) { - var _a6; - if (start === end2) - return [[start]]; - var _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var visited = [start]; - var isVisited = (_a6 = {}, _a6[start] = true, _a6); - var stack = []; - var allPath = []; - var neighbors = directed ? getNeighbors(start, edges, "target") : getNeighbors(start, edges); - stack.push(neighbors); - while (visited.length > 0 && stack.length > 0) { - var children = stack[stack.length - 1]; - if (children.length) { - var child = children.shift(); - if (child) { - visited.push(child); - isVisited[child] = true; - neighbors = directed ? getNeighbors(child, edges, "target") : getNeighbors(child, edges); - stack.push(neighbors.filter(function(neighbor) { - return !isVisited[neighbor]; - })); - } - } else { - var node = visited.pop(); - isVisited[node] = false; - stack.pop(); - continue; - } - if (visited[visited.length - 1] === end2) { - var path = visited.map(function(node2) { - return node2; - }); - allPath.push(path); - var node = visited.pop(); - isVisited[node] = false; - stack.pop(); - } - } - return allPath; -}; - -// node_modules/@antv/algorithm/es/floydWarshall.js -var floydWarshall = function floydWarshall2(graphData, directed) { - var adjacentMatrix = adjacent_matrix_default(graphData, directed); - var dist4 = []; - var size14 = adjacentMatrix.length; - for (var i4 = 0; i4 < size14; i4 += 1) { - dist4[i4] = []; - for (var j4 = 0; j4 < size14; j4 += 1) { - if (i4 === j4) { - dist4[i4][j4] = 0; - } else if (adjacentMatrix[i4][j4] === 0 || !adjacentMatrix[i4][j4]) { - dist4[i4][j4] = Infinity; - } else { - dist4[i4][j4] = adjacentMatrix[i4][j4]; - } - } - } - for (var k4 = 0; k4 < size14; k4 += 1) { - for (var i4 = 0; i4 < size14; i4 += 1) { - for (var j4 = 0; j4 < size14; j4 += 1) { - if (dist4[i4][j4] > dist4[i4][k4] + dist4[k4][j4]) { - dist4[i4][j4] = dist4[i4][k4] + dist4[k4][j4]; - } - } - } - } - return dist4; -}; -var floydWarshall_default = floydWarshall; - -// node_modules/@antv/algorithm/es/label-propagation.js -var labelPropagation = function labelPropagation2(graphData, directed, weightPropertyName, maxIteration) { - if (directed === void 0) { - directed = false; - } - if (weightPropertyName === void 0) { - weightPropertyName = "weight"; - } - if (maxIteration === void 0) { - maxIteration = 1e3; - } - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var clusters = {}; - var nodeMap = {}; - nodes.forEach(function(node, i4) { - var cid = uniqueId9(); - node.clusterId = cid; - clusters[cid] = { - id: cid, - nodes: [node] - }; - nodeMap[node.id] = { - node, - idx: i4 - }; - }); - var adjMatrix3 = adjacent_matrix_default(graphData, directed); - var ks = []; - var neighbors = {}; - adjMatrix3.forEach(function(row, i4) { - var k4 = 0; - var iid = nodes[i4].id; - neighbors[iid] = {}; - row.forEach(function(entry, j4) { - if (!entry) - return; - k4 += entry; - var jid = nodes[j4].id; - neighbors[iid][jid] = entry; - }); - ks.push(k4); - }); - var iter = 0; - var _loop_1 = function _loop_12() { - var changed = false; - nodes.forEach(function(node) { - var neighborClusters = {}; - Object.keys(neighbors[node.id]).forEach(function(neighborId) { - var neighborWeight = neighbors[node.id][neighborId]; - var neighborNode = nodeMap[neighborId].node; - var neighborClusterId = neighborNode.clusterId; - if (!neighborClusters[neighborClusterId]) - neighborClusters[neighborClusterId] = 0; - neighborClusters[neighborClusterId] += neighborWeight; - }); - var maxWeight = -Infinity; - var bestClusterIds = []; - Object.keys(neighborClusters).forEach(function(clusterId) { - if (maxWeight < neighborClusters[clusterId]) { - maxWeight = neighborClusters[clusterId]; - bestClusterIds = [clusterId]; - } else if (maxWeight === neighborClusters[clusterId]) { - bestClusterIds.push(clusterId); - } - }); - if (bestClusterIds.length === 1 && bestClusterIds[0] === node.clusterId) - return; - var selfClusterIdx = bestClusterIds.indexOf(node.clusterId); - if (selfClusterIdx >= 0) - bestClusterIds.splice(selfClusterIdx, 1); - if (bestClusterIds && bestClusterIds.length) { - changed = true; - var selfCluster = clusters[node.clusterId]; - var nodeInSelfClusterIdx = selfCluster.nodes.indexOf(node); - selfCluster.nodes.splice(nodeInSelfClusterIdx, 1); - var randomIdx = Math.floor(Math.random() * bestClusterIds.length); - var bestCluster = clusters[bestClusterIds[randomIdx]]; - bestCluster.nodes.push(node); - node.clusterId = bestCluster.id; - } - }); - if (!changed) - return "break"; - iter++; - }; - while (iter < maxIteration) { - var state_1 = _loop_1(); - if (state_1 === "break") - break; - } - Object.keys(clusters).forEach(function(clusterId) { - var cluster = clusters[clusterId]; - if (!cluster.nodes || !cluster.nodes.length) { - delete clusters[clusterId]; - } - }); - var clusterEdges = []; - var clusterEdgeMap = {}; - edges.forEach(function(edge2) { - var source = edge2.source, target = edge2.target; - var weight = edge2[weightPropertyName] || 1; - var sourceClusterId = nodeMap[source].node.clusterId; - var targetClusterId = nodeMap[target].node.clusterId; - var newEdgeId = "".concat(sourceClusterId, "---").concat(targetClusterId); - if (clusterEdgeMap[newEdgeId]) { - clusterEdgeMap[newEdgeId].weight += weight; - clusterEdgeMap[newEdgeId].count++; - } else { - var newEdge = { - source: sourceClusterId, - target: targetClusterId, - weight, - count: 1 - }; - clusterEdgeMap[newEdgeId] = newEdge; - clusterEdges.push(newEdge); - } - }); - var clustersArray = []; - Object.keys(clusters).forEach(function(clusterId) { - clustersArray.push(clusters[clusterId]); - }); - return { - clusters: clustersArray, - clusterEdges - }; -}; -var label_propagation_default = labelPropagation; - -// node_modules/@antv/algorithm/es/louvain.js -var import_util479 = __toModule(require_lib()); - -// node_modules/@antv/algorithm/es/utils/vector.js -var import_util477 = __toModule(require_lib()); -var Vector = function() { - function Vector2(arr) { - this.arr = arr; - } - Vector2.prototype.getArr = function() { - return this.arr || []; - }; - Vector2.prototype.add = function(otherVector) { - var _a6; - var otherArr = otherVector.arr; - if (!((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length)) { - return new Vector2(otherArr); - } - if (!(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) { - return new Vector2(this.arr); - } - if (this.arr.length === otherArr.length) { - var res = []; - for (var index2 in this.arr) { - res[index2] = this.arr[index2] + otherArr[index2]; - } - return new Vector2(res); - } - }; - Vector2.prototype.subtract = function(otherVector) { - var _a6; - var otherArr = otherVector.arr; - if (!((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length)) { - return new Vector2(otherArr); - } - if (!(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) { - return new Vector2(this.arr); - } - if (this.arr.length === otherArr.length) { - var res = []; - for (var index2 in this.arr) { - res[index2] = this.arr[index2] - otherArr[index2]; - } - return new Vector2(res); - } - }; - Vector2.prototype.avg = function(length5) { - var res = []; - if (length5 !== 0) { - for (var index2 in this.arr) { - res[index2] = this.arr[index2] / length5; - } - } - return new Vector2(res); - }; - Vector2.prototype.negate = function() { - var res = []; - for (var index2 in this.arr) { - res[index2] = -this.arr[index2]; - } - return new Vector2(res); - }; - Vector2.prototype.squareEuclideanDistance = function(otherVector) { - var _a6; - var otherArr = otherVector.arr; - if (!((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length) || !(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) { - return 0; - } - if (this.arr.length === otherArr.length) { - var res = 0; - for (var index2 in this.arr) { - res += Math.pow(this.arr[index2] - otherVector.arr[index2], 2); - } - return res; - } - }; - Vector2.prototype.euclideanDistance = function(otherVector) { - var _a6; - var otherArr = otherVector.arr; - if (!((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length) || !(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) { - return 0; - } - if (this.arr.length === otherArr.length) { - var res = 0; - for (var index2 in this.arr) { - res += Math.pow(this.arr[index2] - otherVector.arr[index2], 2); - } - return Math.sqrt(res); - } else { - console.error("The two vectors are unequal in length."); - } - }; - Vector2.prototype.normalize = function() { - var res = []; - var cloneArr = (0, import_util477.clone)(this.arr); - cloneArr.sort(function(a4, b10) { - return a4 - b10; - }); - var max15 = cloneArr[cloneArr.length - 1]; - var min13 = cloneArr[0]; - for (var index2 in this.arr) { - res[index2] = (this.arr[index2] - min13) / (max15 - min13); - } - return new Vector2(res); - }; - Vector2.prototype.norm2 = function() { - var _a6; - if (!((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length)) { - return 0; - } - var res = 0; - for (var index2 in this.arr) { - res += Math.pow(this.arr[index2], 2); - } - return Math.sqrt(res); - }; - Vector2.prototype.dot = function(otherVector) { - var _a6; - var otherArr = otherVector.arr; - if (!((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length) || !(otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) { - return 0; - } - if (this.arr.length === otherArr.length) { - var res = 0; - for (var index2 in this.arr) { - res += this.arr[index2] * otherVector.arr[index2]; - } - return res; - } else { - console.error("The two vectors are unequal in length."); - } - }; - Vector2.prototype.equal = function(otherVector) { - var _a6; - var otherArr = otherVector.arr; - if (((_a6 = this.arr) === null || _a6 === void 0 ? void 0 : _a6.length) !== (otherArr === null || otherArr === void 0 ? void 0 : otherArr.length)) { - return false; - } - for (var index2 in this.arr) { - if (this.arr[index2] !== otherArr[index2]) { - return false; - } - } - return true; - }; - return Vector2; -}(); -var vector_default = Vector; - -// node_modules/@antv/algorithm/es/utils/node-properties.js -var getAllProperties = function getAllProperties2(nodes, key) { - if (key === void 0) { - key = "properties"; - } - var allProperties = []; - nodes.forEach(function(node) { - if (!node.properties) { - return; - } - allProperties.push(node[key]); - }); - return allProperties; -}; - -// node_modules/@antv/algorithm/es/utils/data-preprocessing.js -var import_util478 = __toModule(require_lib()); - -// node_modules/@antv/algorithm/es/types.js -var DistanceType; -(function(DistanceType2) { - DistanceType2["EuclideanDistance"] = "euclideanDistance"; -})(DistanceType || (DistanceType = {})); - -// node_modules/@antv/algorithm/es/utils/data-preprocessing.js -var getAllKeyValueMap = function getAllKeyValueMap2(dataList, involvedKeys, uninvolvedKeys) { - var keys6 = []; - if (involvedKeys === null || involvedKeys === void 0 ? void 0 : involvedKeys.length) { - keys6 = involvedKeys; - } else { - dataList.forEach(function(data3) { - keys6 = keys6.concat(Object.keys(data3)); - }); - keys6 = (0, import_util478.uniq)(keys6); - } - var allKeyValueMap = {}; - keys6.forEach(function(key) { - var value2 = []; - dataList.forEach(function(data3) { - if (data3[key] !== void 0 && data3[key] !== "") { - value2.push(data3[key]); - } - }); - if (value2.length && !(uninvolvedKeys === null || uninvolvedKeys === void 0 ? void 0 : uninvolvedKeys.includes(key))) { - allKeyValueMap[key] = (0, import_util478.uniq)(value2); - } - }); - return allKeyValueMap; -}; -var oneHot = function oneHot2(dataList, involvedKeys, uninvolvedKeys) { - var allKeyValueMap = getAllKeyValueMap(dataList, involvedKeys, uninvolvedKeys); - var oneHotCode = []; - dataList.forEach(function(data3, index2) { - var code = []; - Object.keys(allKeyValueMap).forEach(function(key) { - var keyValue = data3[key]; - var allKeyValue = allKeyValueMap[key]; - var valueIndex = allKeyValue.findIndex(function(value2) { - return keyValue === value2; - }); - var subCode = []; - for (var i4 = 0; i4 < allKeyValue.length; i4++) { - if (i4 === valueIndex) { - subCode.push(1); - } else { - subCode.push(0); - } - } - code = code.concat(subCode); - }); - oneHotCode[index2] = code; - }); - return oneHotCode; -}; -var getDistance = function getDistance2(item, otherItem, distanceType, graphData) { - if (distanceType === void 0) { - distanceType = DistanceType.EuclideanDistance; - } - var distance15 = 0; - switch (distanceType) { - case DistanceType.EuclideanDistance: - distance15 = new vector_default(item).euclideanDistance(new vector_default(otherItem)); - break; - default: - break; - } - return distance15; -}; - -// node_modules/@antv/algorithm/es/louvain.js -var getModularity = function getModularity2(nodes, adjMatrix3, ks, m4) { - var length5 = adjMatrix3.length; - var param = 2 * m4; - var modularity = 0; - for (var i4 = 0; i4 < length5; i4++) { - var clusteri = nodes[i4].clusterId; - for (var j4 = 0; j4 < length5; j4++) { - var clusterj = nodes[j4].clusterId; - if (clusteri !== clusterj) - continue; - var entry = adjMatrix3[i4][j4] || 0; - var ki = ks[i4] || 0; - var kj = ks[j4] || 0; - modularity += entry - ki * kj / param; - } - } - modularity *= 1 / param; - return modularity; -}; -var getInertialModularity = function getInertialModularity2(nodes, allPropertiesWeight) { - if (nodes === void 0) { - nodes = []; - } - var length5 = nodes.length; - var totalProperties = new vector_default([]); - for (var i4 = 0; i4 < length5; i4++) { - totalProperties = totalProperties.add(new vector_default(allPropertiesWeight[i4])); - } - var avgProperties = totalProperties.avg(length5); - avgProperties.normalize(); - var variance = 0; - for (var i4 = 0; i4 < length5; i4++) { - var propertiesi = new vector_default(allPropertiesWeight[i4]); - var squareEuclideanDistance = propertiesi.squareEuclideanDistance(avgProperties); - variance += squareEuclideanDistance; - } - var squareEuclideanDistanceInfo = []; - nodes.forEach(function() { - squareEuclideanDistanceInfo.push([]); - }); - for (var i4 = 0; i4 < length5; i4++) { - var propertiesi = new vector_default(allPropertiesWeight[i4]); - nodes[i4]["clusterInertial"] = 0; - for (var j4 = 0; j4 < length5; j4++) { - if (i4 === j4) { - squareEuclideanDistanceInfo[i4][j4] = 0; - continue; - } - var propertiesj = new vector_default(allPropertiesWeight[j4]); - squareEuclideanDistanceInfo[i4][j4] = propertiesi.squareEuclideanDistance(propertiesj); - nodes[i4]["clusterInertial"] += squareEuclideanDistanceInfo[i4][j4]; - } - } - var inertialModularity = 0; - var param = 2 * length5 * variance; - for (var i4 = 0; i4 < length5; i4++) { - var clusteri = nodes[i4].clusterId; - for (var j4 = 0; j4 < length5; j4++) { - var clusterj = nodes[j4].clusterId; - if (i4 === j4 || clusteri !== clusterj) - continue; - var inertial = nodes[i4].clusterInertial * nodes[j4].clusterInertial / Math.pow(param, 2) - squareEuclideanDistanceInfo[i4][j4] / param; - inertialModularity += inertial; - } - } - return Number(inertialModularity.toFixed(4)); -}; -var louvain = function louvain2(graphData, directed, weightPropertyName, threshold, inertialModularity, inertialWeight) { - if (directed === void 0) { - directed = false; - } - if (weightPropertyName === void 0) { - weightPropertyName = "weight"; - } - if (threshold === void 0) { - threshold = 1e-4; - } - if (inertialModularity === void 0) { - inertialModularity = false; - } - if (inertialWeight === void 0) { - inertialWeight = 1; - } - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var allPropertiesWeight = []; - if (inertialModularity) { - nodes.forEach(function(node, index2) { - node.properties = node.properties || {}; - node.originIndex = index2; - }); - var nodeTypeInfo_1 = []; - if (nodes.every(function(node) { - return node.hasOwnProperty("nodeType"); - })) { - nodeTypeInfo_1 = Array.from(new Set(nodes.map(function(node) { - return node.nodeType; - }))); - nodes.forEach(function(node) { - node.properties.nodeType = nodeTypeInfo_1.findIndex(function(nodeType) { - return nodeType === node.nodeType; - }); - }); - } - var properties = getAllProperties(nodes); - allPropertiesWeight = oneHot(properties); - } - var uniqueId14 = 1; - var clusters = {}; - var nodeMap = {}; - nodes.forEach(function(node, i4) { - var cid = String(uniqueId14++); - node.clusterId = cid; - clusters[cid] = { - id: cid, - nodes: [node] - }; - nodeMap[node.id] = { - node, - idx: i4 - }; - }); - var adjMatrix3 = adjacent_matrix_default(graphData, directed); - var ks = []; - var neighbors = {}; - var m4 = 0; - adjMatrix3.forEach(function(row, i4) { - var k4 = 0; - var iid = nodes[i4].id; - neighbors[iid] = {}; - row.forEach(function(entry, j4) { - if (!entry) - return; - k4 += entry; - var jid = nodes[j4].id; - neighbors[iid][jid] = entry; - m4 += entry; - }); - ks.push(k4); - }); - m4 /= 2; - var totalModularity = Infinity; - var previousModularity = Infinity; - var iter = 0; - var finalNodes = []; - var finalClusters = {}; - while (true) { - if (inertialModularity && nodes.every(function(node) { - return node.hasOwnProperty("properties"); - })) { - totalModularity = getModularity(nodes, adjMatrix3, ks, m4) + getInertialModularity(nodes, allPropertiesWeight) * inertialWeight; - } else { - totalModularity = getModularity(nodes, adjMatrix3, ks, m4); - } - if (iter === 0) { - previousModularity = totalModularity; - finalNodes = nodes; - finalClusters = clusters; - } - var increaseWithinThreshold = totalModularity > 0 && totalModularity > previousModularity && totalModularity - previousModularity < threshold; - if (totalModularity > previousModularity) { - finalNodes = nodes.map(function(node) { - return { - node, - clusterId: node.clusterId - }; - }); - finalClusters = (0, import_util479.clone)(clusters); - previousModularity = totalModularity; - } - if (increaseWithinThreshold || iter > 100) { - break; - } - ; - iter++; - Object.keys(clusters).forEach(function(clusterId) { - var sumTot = 0; - edges.forEach(function(edge2) { - var source = edge2.source, target = edge2.target; - var sourceClusterId = nodeMap[source].node.clusterId; - var targetClusterId = nodeMap[target].node.clusterId; - if (sourceClusterId === clusterId && targetClusterId !== clusterId || targetClusterId === clusterId && sourceClusterId !== clusterId) { - sumTot = sumTot + (edge2[weightPropertyName] || 1); - } - }); - clusters[clusterId].sumTot = sumTot; - }); - nodes.forEach(function(node, i4) { - var selfCluster = clusters[node.clusterId]; - var bestIncrease = 0; - var bestCluster; - var commonParam = ks[i4] / (2 * m4); - var kiin = 0; - var selfClusterNodes = selfCluster.nodes; - selfClusterNodes.forEach(function(scNode) { - var scNodeIdx = nodeMap[scNode.id].idx; - kiin += adjMatrix3[i4][scNodeIdx] || 0; - }); - var removeModurarity = kiin - selfCluster.sumTot * commonParam; - var selfClusterNodesAfterRemove = selfClusterNodes.filter(function(scNode) { - return scNode.id !== node.id; - }); - var propertiesWeightRemove = []; - selfClusterNodesAfterRemove.forEach(function(nodeRemove, index2) { - propertiesWeightRemove[index2] = allPropertiesWeight[nodeRemove.originIndex]; - }); - var removeInertialModularity = getInertialModularity(selfClusterNodesAfterRemove, allPropertiesWeight) * inertialWeight; - var nodeNeighborIds = neighbors[node.id]; - Object.keys(nodeNeighborIds).forEach(function(neighborNodeId) { - var neighborNode = nodeMap[neighborNodeId].node; - var neighborClusterId = neighborNode.clusterId; - if (neighborClusterId === node.clusterId) - return; - var neighborCluster = clusters[neighborClusterId]; - var clusterNodes = neighborCluster.nodes; - if (!clusterNodes || !clusterNodes.length) - return; - var neighborClusterKiin = 0; - clusterNodes.forEach(function(cNode) { - var cNodeIdx = nodeMap[cNode.id].idx; - neighborClusterKiin += adjMatrix3[i4][cNodeIdx] || 0; - }); - var addModurarity = neighborClusterKiin - neighborCluster.sumTot * commonParam; - var clusterNodesAfterAdd = clusterNodes.concat([node]); - var propertiesWeightAdd = []; - clusterNodesAfterAdd.forEach(function(nodeAdd, index2) { - propertiesWeightAdd[index2] = allPropertiesWeight[nodeAdd.originIndex]; - }); - var addInertialModularity = getInertialModularity(clusterNodesAfterAdd, allPropertiesWeight) * inertialWeight; - var increase = addModurarity - removeModurarity; - if (inertialModularity) { - increase = addModurarity + addInertialModularity - (removeModurarity + removeInertialModularity); - } - if (increase > bestIncrease) { - bestIncrease = increase; - bestCluster = neighborCluster; - } - }); - if (bestIncrease > 0) { - bestCluster.nodes.push(node); - var previousClusterId_1 = node.clusterId; - node.clusterId = bestCluster.id; - var nodeInSelfClusterIdx = selfCluster.nodes.indexOf(node); - selfCluster.nodes.splice(nodeInSelfClusterIdx, 1); - var neighborClusterSumTot_1 = 0; - var selfClusterSumTot_1 = 0; - edges.forEach(function(edge2) { - var source = edge2.source, target = edge2.target; - var sourceClusterId = nodeMap[source].node.clusterId; - var targetClusterId = nodeMap[target].node.clusterId; - if (sourceClusterId === bestCluster.id && targetClusterId !== bestCluster.id || targetClusterId === bestCluster.id && sourceClusterId !== bestCluster.id) { - neighborClusterSumTot_1 = neighborClusterSumTot_1 + (edge2[weightPropertyName] || 1); - } - if (sourceClusterId === previousClusterId_1 && targetClusterId !== previousClusterId_1 || targetClusterId === previousClusterId_1 && sourceClusterId !== previousClusterId_1) { - selfClusterSumTot_1 = selfClusterSumTot_1 + (edge2[weightPropertyName] || 1); - } - }); - bestCluster.sumTot = neighborClusterSumTot_1; - selfCluster.sumTot = selfClusterSumTot_1; - } - }); - } - var newClusterIdMap = {}; - var clusterIdx = 0; - Object.keys(finalClusters).forEach(function(clusterId) { - var cluster = finalClusters[clusterId]; - if (!cluster.nodes || !cluster.nodes.length) { - delete finalClusters[clusterId]; - return; - } - var newId = String(clusterIdx + 1); - if (newId === clusterId) { - return; - } - cluster.id = newId; - cluster.nodes = cluster.nodes.map(function(item) { - return { - id: item.id, - clusterId: newId - }; - }); - finalClusters[newId] = cluster; - newClusterIdMap[clusterId] = newId; - delete finalClusters[clusterId]; - clusterIdx++; - }); - finalNodes.forEach(function(nodeInfo) { - var node = nodeInfo.node, clusterId = nodeInfo.clusterId; - node.clusterId = clusterId; - if (node.clusterId && newClusterIdMap[node.clusterId]) - node.clusterId = newClusterIdMap[node.clusterId]; - }); - var clusterEdges = []; - var clusterEdgeMap = {}; - edges.forEach(function(edge2) { - var source = edge2.source, target = edge2.target; - var weight = edge2[weightPropertyName] || 1; - var sourceClusterId = nodeMap[source].node.clusterId; - var targetClusterId = nodeMap[target].node.clusterId; - var newEdgeId = "".concat(sourceClusterId, "---").concat(targetClusterId); - if (clusterEdgeMap[newEdgeId]) { - clusterEdgeMap[newEdgeId].weight += weight; - clusterEdgeMap[newEdgeId].count++; - } else { - var newEdge = { - source: sourceClusterId, - target: targetClusterId, - weight, - count: 1 - }; - clusterEdgeMap[newEdgeId] = newEdge; - clusterEdges.push(newEdge); - } - }); - var clustersArray = []; - Object.keys(finalClusters).forEach(function(clusterId) { - clustersArray.push(finalClusters[clusterId]); - }); - return { - clusters: clustersArray, - clusterEdges - }; -}; -var louvain_default = louvain; - -// node_modules/@antv/algorithm/es/i-louvain.js -var iLouvain = function iLouvain2(graphData, directed, weightPropertyName, threshold, inertialWeight) { - if (directed === void 0) { - directed = false; - } - if (weightPropertyName === void 0) { - weightPropertyName = "weight"; - } - if (threshold === void 0) { - threshold = 1e-4; - } - if (inertialWeight === void 0) { - inertialWeight = 1; - } - return louvain_default(graphData, directed, weightPropertyName, threshold, true, inertialWeight); -}; -var i_louvain_default = iLouvain; - -// node_modules/@antv/algorithm/es/k-core.js -var import_util480 = __toModule(require_lib()); -var kCore = function kCore2(graphData, k4) { - var _a6; - if (k4 === void 0) { - k4 = 1; - } - var data3 = (0, import_util480.clone)(graphData); - var _b = data3.nodes, nodes = _b === void 0 ? [] : _b; - var _c = data3.edges, edges = _c === void 0 ? [] : _c; - var _loop_1 = function _loop_12() { - var degrees = degree_default({ - nodes, - edges - }); - var nodeIds = Object.keys(degrees); - nodeIds.sort(function(a4, b10) { - var _a7, _b2; - return ((_a7 = degrees[a4]) === null || _a7 === void 0 ? void 0 : _a7.degree) - ((_b2 = degrees[b10]) === null || _b2 === void 0 ? void 0 : _b2.degree); - }); - var minIndexId = nodeIds[0]; - if (!nodes.length || ((_a6 = degrees[minIndexId]) === null || _a6 === void 0 ? void 0 : _a6.degree) >= k4) { - return "break"; - } - var originIndex = nodes.findIndex(function(node) { - return node.id === minIndexId; - }); - nodes.splice(originIndex, 1); - edges = edges.filter(function(edge2) { - return !(edge2.source === minIndexId || edge2.target === minIndexId); - }); - }; - while (true) { - var state_1 = _loop_1(); - if (state_1 === "break") - break; - } - return { - nodes, - edges - }; -}; -var k_core_default = kCore; - -// node_modules/@antv/algorithm/es/k-means.js -var kMeans = function kMeans2(data3, k4, involvedKeys, uninvolvedKeys, propertyKey, distanceType) { - if (k4 === void 0) { - k4 = 3; - } - if (involvedKeys === void 0) { - involvedKeys = []; - } - if (uninvolvedKeys === void 0) { - uninvolvedKeys = []; - } - if (propertyKey === void 0) { - propertyKey = "properties"; - } - if (distanceType === void 0) { - distanceType = DistanceType.EuclideanDistance; - } - var nodes = data3.nodes, edges = data3.edges; - var properties = getAllProperties(nodes, propertyKey); - var allPropertiesWeight = oneHot(properties, involvedKeys, uninvolvedKeys); - for (var i4 = 0; i4 < nodes.length; i4++) { - nodes[i4].originIndex = i4; - } - var centroids = []; - var centroidIndexList = []; - var clusters = []; - for (var i4 = 0; i4 < k4; i4++) { - if (i4 === 0) { - var randomIndex = Math.floor(Math.random() * nodes.length); - centroids[i4] = allPropertiesWeight[randomIndex]; - centroidIndexList.push(randomIndex); - clusters[i4] = [nodes[randomIndex]]; - nodes[randomIndex].clusterId = String(i4); - } else { - var maxDistance = -Infinity; - var maxDistanceIndex = 0; - for (var m4 = 0; m4 < nodes.length; m4++) { - if (!centroidIndexList.includes(m4)) { - var totalDistance = 0; - for (var j4 = 0; j4 < centroids.length; j4++) { - var distance15 = getDistance(allPropertiesWeight[nodes[m4].originIndex], centroids[j4], distanceType); - totalDistance += distance15; - } - var avgDistance = totalDistance / centroids.length; - if (avgDistance > maxDistance) { - maxDistance = avgDistance; - maxDistanceIndex = m4; - } - } - } - centroids[i4] = allPropertiesWeight[maxDistanceIndex]; - centroidIndexList.push(maxDistanceIndex); - clusters[i4] = [nodes[maxDistanceIndex]]; - nodes[maxDistanceIndex].clusterId = String(i4); - } - } - var iterations = 0; - while (true) { - for (var i4 = 0; i4 < nodes.length; i4++) { - var minDistanceIndex = 0; - var minDistance = Infinity; - if (!(iterations === 0 && centroidIndexList.includes(i4))) { - for (var j4 = 0; j4 < centroids.length; j4++) { - var distance15 = getDistance(allPropertiesWeight[i4], centroids[j4], distanceType); - if (distance15 < minDistance) { - minDistance = distance15; - minDistanceIndex = j4; - } - } - if (nodes[i4].clusterId !== String(minDistanceIndex)) { - for (var n3 = 0; n3 < clusters[minDistanceIndex].length; n3++) { - if (clusters[minDistanceIndex][n3].id === nodes[i4].id) { - clusters[minDistanceIndex].splice(n3, 1); - } - } - clusters[minDistanceIndex].push(nodes[i4]); - nodes[i4].clusterId = String(minDistanceIndex); - } - } - } - var centroidsEqualAvg = false; - for (var i4 = 0; i4 < clusters.length; i4++) { - var clusterNodes = clusters[i4]; - var totalVector = new vector_default([]); - for (var j4 = 0; j4 < clusterNodes.length; j4++) { - totalVector = totalVector.add(new vector_default(allPropertiesWeight[clusterNodes[j4].originIndex])); - } - var avgVector = totalVector.avg(clusterNodes.length); - if (!avgVector.equal(new vector_default(centroids[i4]))) { - centroidsEqualAvg = true; - centroids[i4] = avgVector.getArr(); - } - } - iterations++; - if (centroidsEqualAvg || iterations >= 1e3) { - break; - } - } - var clusterEdges = []; - var clusterEdgeMap = {}; - edges.forEach(function(edge2) { - var _a6, _b; - var source = edge2.source, target = edge2.target; - var sourceClusterId = (_a6 = nodes.find(function(node) { - return node.id === source; - })) === null || _a6 === void 0 ? void 0 : _a6.clusterId; - var targetClusterId = (_b = nodes.find(function(node) { - return node.id === target; - })) === null || _b === void 0 ? void 0 : _b.clusterId; - var newEdgeId = "".concat(sourceClusterId, "---").concat(targetClusterId); - if (clusterEdgeMap[newEdgeId]) { - clusterEdgeMap[newEdgeId].count++; - } else { - var newEdge = { - source: sourceClusterId, - target: targetClusterId, - count: 1 - }; - clusterEdgeMap[newEdgeId] = newEdge; - clusterEdges.push(newEdge); - } - }); - return { - clusters, - clusterEdges - }; -}; -var k_means_default = kMeans; - -// node_modules/@antv/algorithm/es/cosine-similarity.js -var cosineSimilarity = function cosineSimilarity2(item, targetItem) { - var targetItemVector = new vector_default(targetItem); - var targetNodeNorm2 = targetItemVector.norm2(); - var itemVector = new vector_default(item); - var itemNorm2 = itemVector.norm2(); - var dot7 = targetItemVector.dot(itemVector); - var norm2Product = targetNodeNorm2 * itemNorm2; - var cosineSimilarity3 = norm2Product ? dot7 / norm2Product : 0; - return cosineSimilarity3; -}; -var cosine_similarity_default = cosineSimilarity; - -// node_modules/@antv/algorithm/es/nodes-cosine-similarity.js -var import_util481 = __toModule(require_lib()); -var nodesCosineSimilarity = function nodesCosineSimilarity2(nodes, seedNode, involvedKeys, uninvolvedKeys, propertyKey) { - if (nodes === void 0) { - nodes = []; - } - if (involvedKeys === void 0) { - involvedKeys = []; - } - if (uninvolvedKeys === void 0) { - uninvolvedKeys = []; - } - if (propertyKey === void 0) { - propertyKey = "properties"; - } - var similarNodes = (0, import_util481.clone)(nodes.filter(function(node) { - return node.id !== seedNode.id; - })); - var seedNodeIndex = nodes.findIndex(function(node) { - return node.id === seedNode.id; - }); - var properties = getAllProperties(nodes, propertyKey); - var allPropertiesWeight = oneHot(properties, involvedKeys, uninvolvedKeys); - var seedNodeProperties = allPropertiesWeight[seedNodeIndex]; - var allCosineSimilarity = []; - similarNodes.forEach(function(node, index2) { - if (node.id !== seedNode.id) { - var nodeProperties = allPropertiesWeight[index2]; - var cosineSimilarityValue = cosine_similarity_default(nodeProperties, seedNodeProperties); - allCosineSimilarity.push(cosineSimilarityValue); - node.cosineSimilarity = cosineSimilarityValue; - } - }); - similarNodes.sort(function(a4, b10) { - return b10.cosineSimilarity - a4.cosineSimilarity; - }); - return { - allCosineSimilarity, - similarNodes - }; -}; -var nodes_cosine_similarity_default = nodesCosineSimilarity; - -// node_modules/@antv/algorithm/es/structs/union-find.js -var UnionFind = function() { - function UnionFind2(items) { - this.count = items.length; - this.parent = {}; - for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { - var i4 = items_1[_i]; - this.parent[i4] = i4; - } - } - UnionFind2.prototype.find = function(item) { - while (this.parent[item] !== item) { - item = this.parent[item]; - } - return item; - }; - UnionFind2.prototype.union = function(a4, b10) { - var rootA = this.find(a4); - var rootB = this.find(b10); - if (rootA === rootB) - return; - if (rootA < rootB) { - if (this.parent[b10] !== b10) - this.union(this.parent[b10], a4); - this.parent[b10] = this.parent[a4]; - } else { - if (this.parent[a4] !== a4) - this.union(this.parent[a4], b10); - this.parent[a4] = this.parent[b10]; - } - }; - UnionFind2.prototype.connected = function(a4, b10) { - return this.find(a4) === this.find(b10); - }; - return UnionFind2; -}(); -var union_find_default = UnionFind; - -// node_modules/@antv/algorithm/es/structs/binary-heap.js -var defaultCompare = function defaultCompare2(a4, b10) { - return a4 - b10; -}; -var MinBinaryHeap = function() { - function MinBinaryHeap2(compareFn) { - if (compareFn === void 0) { - compareFn = defaultCompare; - } - this.compareFn = compareFn; - this.list = []; - } - MinBinaryHeap2.prototype.getLeft = function(index2) { - return 2 * index2 + 1; - }; - MinBinaryHeap2.prototype.getRight = function(index2) { - return 2 * index2 + 2; - }; - MinBinaryHeap2.prototype.getParent = function(index2) { - if (index2 === 0) { - return null; - } - return Math.floor((index2 - 1) / 2); - }; - MinBinaryHeap2.prototype.isEmpty = function() { - return this.list.length <= 0; - }; - MinBinaryHeap2.prototype.top = function() { - return this.isEmpty() ? void 0 : this.list[0]; - }; - MinBinaryHeap2.prototype.delMin = function() { - var top = this.top(); - var bottom = this.list.pop(); - if (this.list.length > 0) { - this.list[0] = bottom; - this.moveDown(0); - } - return top; - }; - MinBinaryHeap2.prototype.insert = function(value2) { - if (value2 !== null) { - this.list.push(value2); - var index2 = this.list.length - 1; - this.moveUp(index2); - return true; - } - return false; - }; - MinBinaryHeap2.prototype.moveUp = function(index2) { - var parent = this.getParent(index2); - while (index2 && index2 > 0 && this.compareFn(this.list[parent], this.list[index2]) > 0) { - var tmp = this.list[parent]; - this.list[parent] = this.list[index2]; - this.list[index2] = tmp; - index2 = parent; - parent = this.getParent(index2); - } - }; - MinBinaryHeap2.prototype.moveDown = function(index2) { - var _a6; - var element = index2; - var left2 = this.getLeft(index2); - var right2 = this.getRight(index2); - var size14 = this.list.length; - if (left2 !== null && left2 < size14 && this.compareFn(this.list[element], this.list[left2]) > 0) { - element = left2; - } else if (right2 !== null && right2 < size14 && this.compareFn(this.list[element], this.list[right2]) > 0) { - element = right2; - } - if (index2 !== element) { - _a6 = [this.list[element], this.list[index2]], this.list[index2] = _a6[0], this.list[element] = _a6[1]; - this.moveDown(element); - } - }; - return MinBinaryHeap2; -}(); -var binary_heap_default = MinBinaryHeap; - -// node_modules/@antv/algorithm/es/mts.js -var primMST = function primMST2(graphData, weight) { - var selectedEdges = []; - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - if (nodes.length === 0) { - return selectedEdges; - } - var currNode = nodes[0]; - var visited = new Set(); - visited.add(currNode); - var compareWeight = function compareWeight2(a4, b10) { - if (weight) { - return a4.weight - b10.weight; - } - return 0; - }; - var edgeQueue = new binary_heap_default(compareWeight); - getEdgesByNodeId(currNode.id, edges).forEach(function(edge2) { - edgeQueue.insert(edge2); - }); - while (!edgeQueue.isEmpty()) { - var currEdge = edgeQueue.delMin(); - var source = currEdge.source; - var target = currEdge.target; - if (visited.has(source) && visited.has(target)) - continue; - selectedEdges.push(currEdge); - if (!visited.has(source)) { - visited.add(source); - getEdgesByNodeId(source, edges).forEach(function(edge2) { - edgeQueue.insert(edge2); - }); - } - if (!visited.has(target)) { - visited.add(target); - getEdgesByNodeId(target, edges).forEach(function(edge2) { - edgeQueue.insert(edge2); - }); - } - } - return selectedEdges; -}; -var kruskalMST = function kruskalMST2(graphData, weight) { - var selectedEdges = []; - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - if (nodes.length === 0) { - return selectedEdges; - } - var weightEdges = edges.map(function(edge2) { - return edge2; - }); - if (weight) { - weightEdges.sort(function(a4, b10) { - return a4.weight - b10.weight; - }); - } - var disjointSet = new union_find_default(nodes.map(function(n3) { - return n3.id; - })); - while (weightEdges.length > 0) { - var curEdge = weightEdges.shift(); - var source = curEdge.source; - var target = curEdge.target; - if (!disjointSet.connected(source, target)) { - selectedEdges.push(curEdge); - disjointSet.union(source, target); - } - } - return selectedEdges; -}; -var minimumSpanningTree = function minimumSpanningTree2(graphData, weight, algo) { - var algos = { - prim: primMST, - kruskal: kruskalMST - }; - if (!algo) - return kruskalMST(graphData, weight); - return algos[algo](graphData, weight); -}; -var mts_default = minimumSpanningTree; - -// node_modules/@antv/algorithm/es/pageRank.js -var pageRank = function pageRank2(graphData, epsilon, linkProb) { - if (typeof epsilon !== "number") - epsilon = 1e-6; - if (typeof linkProb !== "number") - linkProb = 0.85; - var distance15 = 1; - var leakedRank = 0; - var maxIterations = 1e3; - var _a6 = graphData.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = graphData.edges, edges = _b === void 0 ? [] : _b; - var nodesCount = nodes.length; - var currentRank; - var curRanks = {}; - var prevRanks = {}; - for (var j4 = 0; j4 < nodesCount; ++j4) { - var node = nodes[j4]; - var nodeId = node.id; - curRanks[nodeId] = 1 / nodesCount; - prevRanks[nodeId] = 1 / nodesCount; - } - var nodeDegree = degree_default(graphData); - while (maxIterations > 0 && distance15 > epsilon) { - leakedRank = 0; - for (var j4 = 0; j4 < nodesCount; ++j4) { - var node = nodes[j4]; - var nodeId = node.id; - currentRank = 0; - if (nodeDegree[node.id].inDegree === 0) { - curRanks[nodeId] = 0; - } else { - var neighbors = getNeighbors(nodeId, edges, "source"); - for (var i4 = 0; i4 < neighbors.length; ++i4) { - var neighbor = neighbors[i4]; - var outDegree = nodeDegree[neighbor].outDegree; - if (outDegree > 0) - currentRank += prevRanks[neighbor] / outDegree; - } - curRanks[nodeId] = linkProb * currentRank; - leakedRank += curRanks[nodeId]; - } - } - leakedRank = (1 - leakedRank) / nodesCount; - distance15 = 0; - for (var j4 = 0; j4 < nodesCount; ++j4) { - var node = nodes[j4]; - var nodeId = node.id; - currentRank = curRanks[nodeId] + leakedRank; - distance15 += Math.abs(currentRank - prevRanks[nodeId]); - prevRanks[nodeId] = currentRank; - } - maxIterations -= 1; - } - return prevRanks; -}; -var pageRank_default = pageRank; - -// node_modules/@antv/algorithm/es/gSpan/gSpan.js -var import_util484 = __toModule(require_lib()); - -// node_modules/@antv/algorithm/es/gSpan/struct.js -var VACANT_EDGE_ID = -1; -var VACANT_NODE_ID = -1; -var VACANT_EDGE_LABEL = "-1"; -var VACANT_NODE_LABEL = "-1"; -var VACANT_GRAPH_ID = -1; -var Edge2 = function() { - function Edge4(id, from, to, label17) { - if (id === void 0) { - id = VACANT_EDGE_ID; - } - if (from === void 0) { - from = VACANT_NODE_ID; - } - if (to === void 0) { - to = VACANT_NODE_ID; - } - if (label17 === void 0) { - label17 = VACANT_EDGE_LABEL; - } - this.id = id; - this.from = from; - this.to = to; - this.label = label17; - } - return Edge4; -}(); -var Node3 = function() { - function Node5(id, label17) { - if (id === void 0) { - id = VACANT_NODE_ID; - } - if (label17 === void 0) { - label17 = VACANT_NODE_LABEL; - } - this.id = id; - this.label = label17; - this.edges = []; - this.edgeMap = {}; - } - Node5.prototype.addEdge = function(edge2) { - this.edges.push(edge2); - this.edgeMap[edge2.id] = edge2; - }; - return Node5; -}(); -var Graph = function() { - function Graph10(id, edgeIdAutoIncrease, directed) { - if (id === void 0) { - id = VACANT_NODE_ID; - } - if (edgeIdAutoIncrease === void 0) { - edgeIdAutoIncrease = true; - } - if (directed === void 0) { - directed = false; - } - this.id = id; - this.edgeIdAutoIncrease = edgeIdAutoIncrease; - this.edges = []; - this.nodes = []; - this.nodeMap = {}; - this.edgeMap = {}; - this.nodeLabelMap = {}; - this.edgeLabelMap = {}; - this.counter = 0; - this.directed = directed; - } - Graph10.prototype.getNodeNum = function() { - return this.nodes.length; - }; - Graph10.prototype.addNode = function(id, label17) { - if (this.nodeMap[id]) - return; - var node = new Node3(id, label17); - this.nodes.push(node); - this.nodeMap[id] = node; - if (!this.nodeLabelMap[label17]) - this.nodeLabelMap[label17] = []; - this.nodeLabelMap[label17].push(id); - }; - Graph10.prototype.addEdge = function(id, from, to, label17) { - if (this.edgeIdAutoIncrease || id === void 0) - id = this.counter++; - if (this.nodeMap[from] && this.nodeMap[to] && this.nodeMap[to].edgeMap[id]) - return; - var edge2 = new Edge2(id, from, to, label17); - this.edges.push(edge2); - this.edgeMap[id] = edge2; - this.nodeMap[from].addEdge(edge2); - if (!this.edgeLabelMap[label17]) - this.edgeLabelMap[label17] = []; - this.edgeLabelMap[label17].push(edge2); - if (!this.directed) { - var rEdge = new Edge2(id, to, from, label17); - this.nodeMap[to].addEdge(rEdge); - this.edgeLabelMap[label17].push(rEdge); - } - }; - return Graph10; -}(); - -// node_modules/@antv/algorithm/es/gSpan/gSpan.js -var DFSedge = function() { - function DFSedge2(fromNode, toNode, fromNodeLabel, edgeLabel, toNodeLabel) { - this.fromNode = fromNode; - this.toNode = toNode; - this.nodeEdgeNodeLabel = { - nodeLabel1: fromNodeLabel || VACANT_NODE_LABEL, - edgeLabel: edgeLabel || VACANT_EDGE_LABEL, - nodeLabel2: toNodeLabel || VACANT_NODE_LABEL - }; - } - DFSedge2.prototype.equalTo = function(other2) { - return this.fromNode === other2.formNode && this.toNode === other2.toNode && this.nodeEdgeNodeLabel === other2.nodeEdgeNodeLabel; - }; - DFSedge2.prototype.notEqualTo = function(other2) { - return !this.equalTo(other2); - }; - return DFSedge2; -}(); -var DFScode = function() { - function DFScode2() { - this.rmpath = []; - this.dfsEdgeList = []; - } - DFScode2.prototype.equalTo = function(other2) { - var aLength = this.dfsEdgeList.length; - var bLength = other2.length; - if (aLength !== bLength) - return false; - for (var i4 = 0; i4 < aLength; i4++) { - if (this.dfsEdgeList[i4] !== other2[i4]) - return false; - } - return true; - }; - DFScode2.prototype.notEqualTo = function(other2) { - return !this.equalTo(other2); - }; - DFScode2.prototype.pushBack = function(fromNode, toNode, fromNodeLabel, edgeLabel, toNodeLabel) { - this.dfsEdgeList.push(new DFSedge(fromNode, toNode, fromNodeLabel, edgeLabel, toNodeLabel)); - return this.dfsEdgeList; - }; - DFScode2.prototype.toGraph = function(graphId, directed) { - if (graphId === void 0) { - graphId = VACANT_GRAPH_ID; - } - if (directed === void 0) { - directed = false; - } - var graph = new Graph(graphId, true, directed); - this.dfsEdgeList.forEach(function(dfsEdge) { - var fromNodeId = dfsEdge.fromNode; - var toNodeId = dfsEdge.toNode; - var _a6 = dfsEdge.nodeEdgeNodeLabel, nodeLabel1 = _a6.nodeLabel1, edgeLabel = _a6.edgeLabel, nodeLabel2 = _a6.nodeLabel2; - if (nodeLabel1 !== VACANT_NODE_LABEL) - graph.addNode(fromNodeId, nodeLabel1); - if (nodeLabel2 !== VACANT_NODE_LABEL) - graph.addNode(toNodeId, nodeLabel2); - if (nodeLabel1 !== VACANT_NODE_LABEL && nodeLabel2 !== nodeLabel1) - graph.addEdge(void 0, fromNodeId, toNodeId, edgeLabel); - }); - return graph; - }; - DFScode2.prototype.buildRmpath = function() { - this.rmpath = []; - var oldFrom = void 0; - var selfLength = this.dfsEdgeList.length; - for (var i4 = selfLength - 1; i4 >= 0; i4--) { - var dfsEdge = this.dfsEdgeList[i4]; - var fromNodeIdx = dfsEdge.fromNode; - var toNodeIdx = dfsEdge.toNode; - if (fromNodeIdx < toNodeIdx && (oldFrom === void 0 || toNodeIdx === oldFrom)) { - this.rmpath.push(i4); - oldFrom = fromNodeIdx; - } - } - return this.rmpath; - }; - DFScode2.prototype.getNodeNum = function() { - var nodeMap = {}; - this.dfsEdgeList.forEach(function(dfsEdge) { - if (!nodeMap[dfsEdge.fromNode]) - nodeMap[dfsEdge.fromNode] = true; - if (!nodeMap[dfsEdge.toNode]) - nodeMap[dfsEdge.toNode] = true; - }); - return Object.keys(nodeMap).length; - }; - return DFScode2; -}(); -var History = function() { - function History2(pdfs) { - this.his = {}; - this.nodesUsed = {}; - this.edgesUsed = {}; - this.edges = []; - if (!pdfs) - return; - while (pdfs) { - var e4 = pdfs.edge; - this.edges.push(e4); - this.nodesUsed[e4.from] = 1; - this.nodesUsed[e4.to] = 1; - this.edgesUsed[e4.id] = 1; - pdfs = pdfs.preNode; - } - this.edges = this.edges.reverse(); - } - History2.prototype.hasNode = function(node) { - return this.nodesUsed[node.id] === 1; - }; - History2.prototype.hasEdge = function(edge2) { - return this.edgesUsed[edge2.id] === 1; - }; - return History2; -}(); -var GSpan = function() { - function GSpan2(_a6) { - var graphs8 = _a6.graphs, _b = _a6.minSupport, minSupport = _b === void 0 ? 2 : _b, _c = _a6.minNodeNum, minNodeNum = _c === void 0 ? 1 : _c, _d = _a6.maxNodeNum, maxNodeNum = _d === void 0 ? 4 : _d, _e = _a6.top, top = _e === void 0 ? 10 : _e, _f = _a6.directed, directed = _f === void 0 ? false : _f, _g = _a6.verbose, verbose = _g === void 0 ? false : _g; - this.graphs = graphs8; - this.dfsCode = new DFScode(); - this.support = 0; - this.frequentSize1Subgraphs = []; - this.frequentSubgraphs = []; - this.minSupport = minSupport; - this.top = top; - this.directed = directed; - this.counter = 0; - this.maxNodeNum = maxNodeNum; - this.minNodeNum = minNodeNum; - this.verbose = verbose; - if (this.maxNodeNum < this.minNodeNum) - this.maxNodeNum = this.minNodeNum; - this.reportDF = []; - } - GSpan2.prototype.findForwardRootEdges = function(graph, fromNode) { - var _this = this; - var result = []; - var nodeMap = graph.nodeMap; - fromNode.edges.forEach(function(edge2) { - if (_this.directed || fromNode.label <= nodeMap[edge2.to].label) - result.push(edge2); - }); - return result; - }; - GSpan2.prototype.findBackwardEdge = function(graph, edge1, edge2, history) { - if (!this.directed && edge1 === edge2) - return null; - var nodeMap = graph.nodeMap; - var edge2To = nodeMap[edge2.to]; - var edge2ToEdges = edge2To.edges; - var edgeLength = edge2ToEdges.length; - for (var i4 = 0; i4 < edgeLength; i4++) { - var edge3 = edge2ToEdges[i4]; - if (history.hasEdge(edge3) || edge3.to !== edge1.from) - continue; - if (!this.directed) { - if (edge1.label < edge3.label || edge1.label === edge3.label && nodeMap[edge1.to].label <= nodeMap[edge2.to].label) { - return edge3; - } - } else { - if (nodeMap[edge1.from].label < nodeMap[edge2.to].label || nodeMap[edge1.from].label === nodeMap[edge2.to].label && edge1.label <= edge3.label) { - return edge3; - } - } - } - return null; - }; - GSpan2.prototype.findForwardPureEdges = function(graph, rightmostEdge, minNodeLabel, history) { - var result = []; - var rightmostEdgeToId = rightmostEdge.to; - var edges = graph.nodeMap[rightmostEdgeToId].edges; - var edgeLength = edges.length; - for (var i4 = 0; i4 < edgeLength; i4++) { - var edge2 = edges[i4]; - var toNode = graph.nodeMap[edge2.to]; - if (minNodeLabel <= toNode.label && !history.hasNode(toNode)) { - result.push(edge2); - } - } - return result; - }; - GSpan2.prototype.findForwardRmpathEdges = function(graph, rightmostEdge, minNodeLabel, history) { - var result = []; - var nodeMap = graph.nodeMap; - var toNodeLabel = nodeMap[rightmostEdge.to].label; - var fromNode = nodeMap[rightmostEdge.from]; - var edges = fromNode.edges; - var edgeLength = edges.length; - for (var i4 = 0; i4 < edgeLength; i4++) { - var edge2 = edges[i4]; - var newToNodeLabel = nodeMap[edge2.to].label; - if (rightmostEdge.to === edge2.to || minNodeLabel > newToNodeLabel || history.hasNode(nodeMap[edge2.to])) { - continue; - } - if (rightmostEdge.label < edge2.label || rightmostEdge.label === edge2.label && toNodeLabel <= newToNodeLabel) { - result.push(edge2); - } - } - return result; - }; - GSpan2.prototype.getSupport = function(projected) { - var graphMap = {}; - projected.forEach(function(pro) { - if (!graphMap[pro.graphId]) - graphMap[pro.graphId] = true; - }); - return Object.keys(graphMap).length; - }; - GSpan2.prototype.findMinLabel = function(obj) { - var minLabel = void 0; - Object.keys(obj).forEach(function(nodeEdgeNodeLabel) { - var _a6 = obj[nodeEdgeNodeLabel], nodeLabel1 = _a6.nodeLabel1, edgeLabel = _a6.edgeLabel, nodeLabel2 = _a6.nodeLabel2; - if (!minLabel) { - minLabel = { - nodeLabel1, - edgeLabel, - nodeLabel2 - }; - return; - } - if (nodeLabel1 < minLabel.nodeLabel1 || nodeLabel1 === minLabel.nodeLabel1 && edgeLabel < minLabel.edgeLabel || nodeLabel1 === minLabel.nodeLabel1 && edgeLabel === minLabel.edgeLabel && nodeLabel2 < minLabel.nodeLabel2) { - minLabel = { - nodeLabel1, - edgeLabel, - nodeLabel2 - }; - } - }); - return minLabel; - }; - GSpan2.prototype.isMin = function() { - var _this = this; - var dfsCode = this.dfsCode; - if (this.verbose) - console.log("isMin checking", dfsCode); - if (dfsCode.dfsEdgeList.length === 1) - return true; - var directed = this.directed; - var graph = dfsCode.toGraph(VACANT_GRAPH_ID, directed); - var nodeMap = graph.nodeMap; - var dfsCodeMin = new DFScode(); - var root = {}; - graph.nodes.forEach(function(node) { - var forwardEdges = _this.findForwardRootEdges(graph, node); - forwardEdges.forEach(function(edge2) { - var otherNode = nodeMap[edge2.to]; - var nodeEdgeNodeLabel = "".concat(node.label, "-").concat(edge2.label, "-").concat(otherNode.label); - if (!root[nodeEdgeNodeLabel]) - root[nodeEdgeNodeLabel] = { - projected: [], - nodeLabel1: node.label, - edgeLabel: edge2.label, - nodeLabel2: otherNode.label - }; - var pdfs = { - graphId: graph.id, - edge: edge2, - preNode: null - }; - root[nodeEdgeNodeLabel].projected.push(pdfs); - }); - }); - var minLabel = this.findMinLabel(root); - if (!minLabel) - return; - dfsCodeMin.dfsEdgeList.push(new DFSedge(0, 1, minLabel.nodeLabel1, minLabel.edgeLabel, minLabel.nodeLabel2)); - var projectIsMin = function projectIsMin2(projected) { - var rmpath = dfsCodeMin.buildRmpath(); - var minNodeLabel = dfsCodeMin.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1; - var maxToC = dfsCodeMin.dfsEdgeList[rmpath[0]].toNode; - var backwardRoot = {}; - var flag = false, newTo = 0; - var end2 = directed ? -1 : 0; - var _loop_1 = function _loop_12(i5) { - if (flag) - return "break"; - projected.forEach(function(p4) { - var history = new History(p4); - var backwardEdge = _this.findBackwardEdge(graph, history.edges[rmpath[i5]], history.edges[rmpath[0]], history); - if (backwardEdge) { - if (!backwardRoot[backwardEdge.label]) { - backwardRoot[backwardEdge.label] = { - projected: [], - edgeLabel: backwardEdge.label - }; - } - backwardRoot[backwardEdge.label].projected.push({ - graphId: graph.id, - edge: backwardRoot, - preNode: p4 - }); - newTo = dfsCodeMin.dfsEdgeList[rmpath[i5]].fromNode; - flag = true; - } - }); - }; - for (var i4 = rmpath.length - 1; i4 > end2; i4--) { - var state_1 = _loop_1(i4); - if (state_1 === "break") - break; - } - if (flag) { - var minBackwardEdgeLabel = _this.findMinLabel(backwardRoot); - dfsCodeMin.dfsEdgeList.push(new DFSedge(maxToC, newTo, VACANT_NODE_LABEL, minBackwardEdgeLabel.edgeLabel, VACANT_NODE_LABEL)); - var idx_1 = dfsCodeMin.dfsEdgeList.length - 1; - if (_this.dfsCode.dfsEdgeList[idx_1] !== dfsCodeMin.dfsEdgeList[idx_1]) - return false; - return projectIsMin2(backwardRoot[minBackwardEdgeLabel.edgeLabel].projected); - } - var forwardRoot = {}; - flag = false; - var newFrom = 0; - projected.forEach(function(p4) { - var history = new History(p4); - var forwardPureEdges = _this.findForwardPureEdges(graph, history.edges[rmpath[0]], minNodeLabel, history); - if (forwardPureEdges.length > 0) { - flag = true; - newFrom = maxToC; - forwardPureEdges.forEach(function(edge2) { - var key2 = "".concat(edge2.label, "-").concat(nodeMap[edge2.to].label); - if (!forwardRoot[key2]) - forwardRoot[key2] = { - projected: [], - edgeLabel: edge2.label, - nodeLabel2: nodeMap[edge2.to].label - }; - forwardRoot[key2].projected.push({ - graphId: graph.id, - edge: edge2, - preNode: p4 - }); - }); - } - }); - var pathLength = rmpath.length; - var _loop_2 = function _loop_22(i5) { - if (flag) - return "break"; - var value2 = rmpath[i5]; - projected.forEach(function(p4) { - var history = new History(p4); - var forwardRmpathEdges = _this.findForwardRmpathEdges(graph, history.edges[value2], minNodeLabel, history); - if (forwardRmpathEdges.length > 0) { - flag = true; - newFrom = dfsCodeMin.dfsEdgeList[value2].fromNode; - forwardRmpathEdges.forEach(function(edge2) { - var key2 = "".concat(edge2.label, "-").concat(nodeMap[edge2.to].label); - if (!forwardRoot[key2]) - forwardRoot[key2] = { - projected: [], - edgeLabel: edge2.label, - nodeLabel2: nodeMap[edge2.to].label - }; - forwardRoot[key2].projected.push({ - graphId: graph.id, - edge: edge2, - preNode: p4 - }); - }); - } - }); - }; - for (var i4 = 0; i4 < pathLength; i4++) { - var state_2 = _loop_2(i4); - if (state_2 === "break") - break; - } - if (!flag) - return true; - var forwardMinEdgeNodeLabel = _this.findMinLabel(forwardRoot); - dfsCodeMin.dfsEdgeList.push(new DFSedge(newFrom, maxToC + 1, VACANT_NODE_LABEL, forwardMinEdgeNodeLabel.edgeLabel, forwardMinEdgeNodeLabel.nodeLabel2)); - var idx = dfsCodeMin.dfsEdgeList.length - 1; - if (dfsCode.dfsEdgeList[idx] !== dfsCodeMin.dfsEdgeList[idx]) - return false; - return projectIsMin2(forwardRoot["".concat(forwardMinEdgeNodeLabel.edgeLabel, "-").concat(forwardMinEdgeNodeLabel.nodeLabel2)].projected); - }; - var key = "".concat(minLabel.nodeLabel1, "-").concat(minLabel.edgeLabel, "-").concat(minLabel.nodeLabel2); - return projectIsMin(root[key].projected); - }; - GSpan2.prototype.report = function() { - if (this.dfsCode.getNodeNum() < this.minNodeNum) - return; - this.counter++; - var graph = this.dfsCode.toGraph(this.counter, this.directed); - this.frequentSubgraphs.push((0, import_util484.clone)(graph)); - }; - GSpan2.prototype.subGraphMining = function(projected) { - var _this = this; - var support = this.getSupport(projected); - if (support < this.minSupport) - return; - if (!this.isMin()) - return; - this.report(); - var nodeNum = this.dfsCode.getNodeNum(); - var rmpath = this.dfsCode.buildRmpath(); - var maxToC = this.dfsCode.dfsEdgeList[rmpath[0]].toNode; - var minNodeLabel = this.dfsCode.dfsEdgeList[0].nodeEdgeNodeLabel.nodeLabel1; - var forwardRoot = {}; - var backwardRoot = {}; - projected.forEach(function(p4) { - var graph = _this.graphs[p4.graphId]; - var nodeMap = graph.nodeMap; - var history = new History(p4); - for (var i4 = rmpath.length - 1; i4 >= 0; i4--) { - var backwardEdge = _this.findBackwardEdge(graph, history.edges[rmpath[i4]], history.edges[rmpath[0]], history); - if (backwardEdge) { - var key = "".concat(_this.dfsCode.dfsEdgeList[rmpath[i4]].fromNode, "-").concat(backwardEdge.label); - if (!backwardRoot[key]) - backwardRoot[key] = { - projected: [], - toNodeId: _this.dfsCode.dfsEdgeList[rmpath[i4]].fromNode, - edgeLabel: backwardEdge.label - }; - backwardRoot[key].projected.push({ - graphId: p4.graphId, - edge: backwardEdge, - preNode: p4 - }); - } - } - if (nodeNum >= _this.maxNodeNum) - return; - var forwardPureEdges = _this.findForwardPureEdges(graph, history.edges[rmpath[0]], minNodeLabel, history); - forwardPureEdges.forEach(function(edge2) { - var key2 = "".concat(maxToC, "-").concat(edge2.label, "-").concat(nodeMap[edge2.to].label); - if (!forwardRoot[key2]) - forwardRoot[key2] = { - projected: [], - fromNodeId: maxToC, - edgeLabel: edge2.label, - nodeLabel2: nodeMap[edge2.to].label - }; - forwardRoot[key2].projected.push({ - graphId: p4.graphId, - edge: edge2, - preNode: p4 - }); - }); - var _loop_3 = function _loop_32(i5) { - var forwardRmpathEdges = _this.findForwardRmpathEdges(graph, history.edges[rmpath[i5]], minNodeLabel, history); - forwardRmpathEdges.forEach(function(edge2) { - var key2 = "".concat(_this.dfsCode.dfsEdgeList[rmpath[i5]].fromNode, "-").concat(edge2.label, "-").concat(nodeMap[edge2.to].label); - if (!forwardRoot[key2]) - forwardRoot[key2] = { - projected: [], - fromNodeId: _this.dfsCode.dfsEdgeList[rmpath[i5]].fromNode, - edgeLabel: edge2.label, - nodeLabel2: nodeMap[edge2.to].label - }; - forwardRoot[key2].projected.push({ - graphId: p4.graphId, - edge: edge2, - preNode: p4 - }); - }); - }; - for (var i4 = 0; i4 < rmpath.length; i4++) { - _loop_3(i4); - } - }); - Object.keys(backwardRoot).forEach(function(key) { - var _a6 = backwardRoot[key], toNodeId = _a6.toNodeId, edgeLabel = _a6.edgeLabel; - _this.dfsCode.dfsEdgeList.push(new DFSedge(maxToC, toNodeId, "-1", edgeLabel, "-1")); - _this.subGraphMining(backwardRoot[key].projected); - _this.dfsCode.dfsEdgeList.pop(); - }); - Object.keys(forwardRoot).forEach(function(key) { - var _a6 = forwardRoot[key], fromNodeId = _a6.fromNodeId, edgeLabel = _a6.edgeLabel, nodeLabel2 = _a6.nodeLabel2; - _this.dfsCode.dfsEdgeList.push(new DFSedge(fromNodeId, maxToC + 1, VACANT_NODE_LABEL, edgeLabel, nodeLabel2)); - _this.subGraphMining(forwardRoot[key].projected); - _this.dfsCode.dfsEdgeList.pop(); - }); - }; - GSpan2.prototype.generate1EdgeFrequentSubGraphs = function() { - var graphs8 = this.graphs; - var directed = this.directed; - var minSupport = this.minSupport; - var frequentSize1Subgraphs = this.frequentSize1Subgraphs; - var nodeLabelCounter = {}, nodeEdgeNodeCounter = {}; - var nodeLableCounted = {}; - var nodeEdgeNodeLabelCounted = {}; - Object.keys(graphs8).forEach(function(key) { - var graph = graphs8[key]; - var nodeMap = graph.nodeMap; - graph.nodes.forEach(function(node, i4) { - var nodeLabel = node.label; - var graphNodeKey = "".concat(key, "-").concat(nodeLabel); - if (!nodeLableCounted[graphNodeKey]) { - var counter = nodeLabelCounter[nodeLabel] || 0; - counter++; - nodeLabelCounter[nodeLabel] = counter; - } - nodeLableCounted[graphNodeKey] = { - graphKey: key, - label: nodeLabel - }; - node.edges.forEach(function(edge2) { - var nodeLabel1 = nodeLabel; - var nodeLabel2 = nodeMap[edge2.to].label; - if (!directed && nodeLabel1 > nodeLabel2) { - var tmp = nodeLabel2; - nodeLabel2 = nodeLabel1; - nodeLabel1 = tmp; - } - var edgeLabel = edge2.label; - var graphNodeEdgeNodeKey = "".concat(key, "-").concat(nodeLabel1, "-").concat(edgeLabel, "-").concat(nodeLabel2); - var nodeEdgeNodeKey = "".concat(nodeLabel1, "-").concat(edgeLabel, "-").concat(nodeLabel2); - if (!nodeEdgeNodeCounter[nodeEdgeNodeKey]) { - var counter2 = nodeEdgeNodeCounter[nodeEdgeNodeKey] || 0; - counter2++; - nodeEdgeNodeCounter[nodeEdgeNodeKey] = counter2; - } - nodeEdgeNodeLabelCounted[graphNodeEdgeNodeKey] = { - graphId: key, - nodeLabel1, - edgeLabel, - nodeLabel2 - }; - }); - }); - }); - Object.keys(nodeLabelCounter).forEach(function(label17) { - var count2 = nodeLabelCounter[label17]; - if (count2 < minSupport) - return; - var g4 = { - nodes: [], - edges: [] - }; - g4.nodes.push({ - id: "0", - label: label17 - }); - frequentSize1Subgraphs.push(g4); - }); - return frequentSize1Subgraphs; - }; - GSpan2.prototype.run = function() { - var _this = this; - this.frequentSize1Subgraphs = this.generate1EdgeFrequentSubGraphs(); - if (this.maxNodeNum < 2) - return; - var graphs8 = this.graphs; - var directed = this.directed; - var root = {}; - Object.keys(graphs8).forEach(function(graphId) { - var graph = graphs8[graphId]; - var nodeMap = graph.nodeMap; - graph.nodes.forEach(function(node) { - var forwardRootEdges = _this.findForwardRootEdges(graph, node); - forwardRootEdges.forEach(function(edge2) { - var toNode = nodeMap[edge2.to]; - var nodeEdgeNodeLabel = "".concat(node.label, "-").concat(edge2.label, "-").concat(toNode.label); - if (!root[nodeEdgeNodeLabel]) - root[nodeEdgeNodeLabel] = { - projected: [], - nodeLabel1: node.label, - edgeLabel: edge2.label, - nodeLabel2: toNode.label - }; - var pdfs = { - graphId, - edge: edge2, - preNode: null - }; - root[nodeEdgeNodeLabel].projected.push(pdfs); - }); - }); - }); - Object.keys(root).forEach(function(nodeEdgeNodeLabel) { - var _a6 = root[nodeEdgeNodeLabel], projected = _a6.projected, nodeLabel1 = _a6.nodeLabel1, edgeLabel = _a6.edgeLabel, nodeLabel2 = _a6.nodeLabel2; - _this.dfsCode.dfsEdgeList.push(new DFSedge(0, 1, nodeLabel1, edgeLabel, nodeLabel2)); - _this.subGraphMining(projected); - _this.dfsCode.dfsEdgeList.pop(); - }); - }; - return GSpan2; -}(); -var formatGraphs = function formatGraphs2(graphs8, directed, nodeLabelProp, edgeLabelProp) { - var result = {}; - Object.keys(graphs8).forEach(function(key, i4) { - var graph = graphs8[key]; - var fGraph = new Graph(i4, true, directed); - var nodeIdxMap = {}; - graph.nodes.forEach(function(node, j4) { - fGraph.addNode(j4, node[nodeLabelProp]); - nodeIdxMap[node.id] = j4; - }); - graph.edges.forEach(function(edge2, k4) { - var sourceIdx = nodeIdxMap[edge2.source]; - var targetIdx = nodeIdxMap[edge2.target]; - fGraph.addEdge(-1, sourceIdx, targetIdx, edge2[edgeLabelProp]); - }); - if (fGraph && fGraph.getNodeNum()) - result[fGraph.id] = fGraph; - }); - return result; -}; -var toGraphDatas = function toGraphDatas2(graphs8, nodeLabelProp, edgeLabelProp) { - var result = []; - graphs8.forEach(function(graph) { - var graphData = { - nodes: [], - edges: [] - }; - graph.nodes.forEach(function(node) { - var _a6; - graphData.nodes.push((_a6 = { - id: "".concat(node.id) - }, _a6[nodeLabelProp] = node.label, _a6)); - }); - graph.edges.forEach(function(edge2) { - var _a6; - graphData.edges.push((_a6 = { - source: "".concat(edge2.from), - target: "".concat(edge2.to) - }, _a6[edgeLabelProp] = edge2.label, _a6)); - }); - result.push(graphData); - }); - return result; -}; -var DEFAULT_LABEL_NAME = "cluster"; -var gSpan = function gSpan2(params) { - var graphs8 = params.graphs, _a6 = params.directed, directed = _a6 === void 0 ? false : _a6, _b = params.nodeLabelProp, nodeLabelProp = _b === void 0 ? DEFAULT_LABEL_NAME : _b, _c = params.edgeLabelProp, edgeLabelProp = _c === void 0 ? DEFAULT_LABEL_NAME : _c; - var formattedGraphs = formatGraphs(graphs8, directed, nodeLabelProp, edgeLabelProp); - var minSupport = params.minSupport, maxNodeNum = params.maxNodeNum, minNodeNum = params.minNodeNum, verbose = params.verbose, top = params.top; - var algoParams = { - graphs: formattedGraphs, - minSupport, - maxNodeNum, - minNodeNum, - top, - verbose, - directed - }; - var calculator = new GSpan(algoParams); - calculator.run(); - var result = toGraphDatas(calculator.frequentSubgraphs, nodeLabelProp, edgeLabelProp); - return result; -}; -var gSpan_default = gSpan; - -// node_modules/@antv/algorithm/es/gaddi.js -var findKNeighborUnits = function findKNeighborUnits2(graphData, spm, nodeLabelProp, k4) { - if (nodeLabelProp === void 0) { - nodeLabelProp = "cluster"; - } - if (k4 === void 0) { - k4 = 2; - } - var units = []; - var nodes = graphData.nodes; - spm.forEach(function(row, i4) { - units.push(findKNeighborUnit(nodes, row, i4, nodeLabelProp, k4)); - }); - return units; -}; -var findKNeighborUnit = function findKNeighborUnit2(nodes, row, i4, nodeLabelProp, k4) { - var unitNodeIdxs = [i4]; - var neighbors = []; - var labelCountMap = {}; - row.forEach(function(v3, j4) { - if (v3 <= k4 && i4 !== j4) { - unitNodeIdxs.push(j4); - neighbors.push(nodes[j4]); - var label17 = nodes[j4][nodeLabelProp]; - if (!labelCountMap[label17]) - labelCountMap[label17] = { - count: 1, - dists: [v3] - }; - else { - labelCountMap[label17].count++; - labelCountMap[label17].dists.push(v3); - } - } - }); - Object.keys(labelCountMap).forEach(function(label17) { - labelCountMap[label17].dists = labelCountMap[label17].dists.sort(function(a4, b10) { - return a4 - b10; - }); - }); - return { - nodeIdx: i4, - nodeId: nodes[i4].id, - nodeIdxs: unitNodeIdxs, - neighbors, - neighborNum: unitNodeIdxs.length - 1, - nodeLabelCountMap: labelCountMap - }; -}; -var findNodePairsRandomly = function findNodePairsRandomly2(k4, nodeNum, maxNodePairNum, kNeighborUnits, spm) { - var nodePairNumEachNode = Math.ceil(maxNodePairNum / nodeNum); - var nodePairMap = {}; - var foundNodePairCount = 0; - kNeighborUnits.forEach(function(unit, i4) { - var nodePairForICount = 0; - var outerLoopCount = 0; - var neighbors = unit.nodeIdxs; - var neighborNum = unit.neighborNum - 1; - while (nodePairForICount < nodePairNumEachNode) { - var oidx = neighbors[1 + Math.floor(Math.random() * neighborNum)]; - var innerLoopCount = 0; - while (nodePairMap["".concat(i4, "-").concat(oidx)] || nodePairMap["".concat(oidx, "-").concat(i4)]) { - oidx = Math.floor(Math.random() * nodeNum); - innerLoopCount++; - if (innerLoopCount > 2 * nodeNum) - break; - } - if (innerLoopCount < 2 * nodeNum) { - nodePairMap["".concat(i4, "-").concat(oidx)] = { - start: i4, - end: oidx, - distance: spm[i4][oidx] - }; - nodePairForICount++; - foundNodePairCount++; - if (foundNodePairCount >= maxNodePairNum) - return nodePairMap; - } - outerLoopCount++; - if (outerLoopCount > 2 * nodeNum) - break; - } - if (nodePairForICount < nodePairNumEachNode) { - var gap = nodePairNumEachNode - nodePairForICount; - nodePairNumEachNode = (nodePairNumEachNode + gap) / (nodeNum - i4 - 1); - } - }); - return nodePairMap; -}; -var getIntersectNeighborInducedGraph = function getIntersectNeighborInducedGraph2(nodePairMap, neighborUnits, graphData, cachedInducedGraphMap) { - var nodes = graphData.nodes; - if (!cachedInducedGraphMap) - cachedInducedGraphMap = {}; - Object.keys(nodePairMap).forEach(function(key) { - var _a6, _b; - if (cachedInducedGraphMap && cachedInducedGraphMap[key]) - return; - cachedInducedGraphMap[key] = { - nodes: [], - edges: [] - }; - var pair = nodePairMap[key]; - var startUnitNodeIds = (_a6 = neighborUnits[pair.start]) === null || _a6 === void 0 ? void 0 : _a6.nodeIdxs; - var endUnitNodeIds = (_b = neighborUnits[pair.end]) === null || _b === void 0 ? void 0 : _b.nodeIdxs; - if (!startUnitNodeIds || !endUnitNodeIds) - return; - var endSet = new Set(endUnitNodeIds); - var intersect2 = startUnitNodeIds.filter(function(x6) { - return endSet.has(x6); - }); - if (!intersect2 || !intersect2.length) - return; - var intersectIdMap = {}; - var intersectLength = intersect2.length; - for (var i4 = 0; i4 < intersectLength; i4++) { - var node = nodes[intersect2[i4]]; - cachedInducedGraphMap[key].nodes.push(node); - intersectIdMap[node.id] = true; - } - graphData.edges.forEach(function(edge2) { - if (intersectIdMap[edge2.source] && intersectIdMap[edge2.target]) - cachedInducedGraphMap[key].edges.push(edge2); - }); - }); - return cachedInducedGraphMap; -}; -var getMatchedCount = function getMatchedCount2(graph, structure, nodeLabelProp, edgeLabelProp) { - var _a6, _b; - var nodeMap = {}; - graph.nodes.forEach(function(node) { - nodeMap[node.id] = node; - }); - var count2 = 0; - if (!((_a6 = structure === null || structure === void 0 ? void 0 : structure.edges) === null || _a6 === void 0 ? void 0 : _a6.length) || ((_b = structure === null || structure === void 0 ? void 0 : structure.nodes) === null || _b === void 0 ? void 0 : _b.length) < 2) - return 0; - graph.edges.forEach(function(e4) { - var sourceLabel = nodeMap[e4.source][nodeLabelProp]; - var targetLabel = nodeMap[e4.target][nodeLabelProp]; - var strNodeLabel1 = structure === null || structure === void 0 ? void 0 : structure.nodes[0][nodeLabelProp]; - var strNodeLabel2 = structure === null || structure === void 0 ? void 0 : structure.nodes[1][nodeLabelProp]; - var strEdgeLabel = structure === null || structure === void 0 ? void 0 : structure.edges[0][edgeLabelProp]; - if (e4[edgeLabelProp] !== strEdgeLabel) - return; - if (sourceLabel === strNodeLabel1 && targetLabel === strNodeLabel2 || sourceLabel === strNodeLabel2 && targetLabel === strNodeLabel1) { - count2++; - } - }); - return count2; -}; -var findRepresentStructure = function findRepresentStructure2(matchedCountMap, structureNum, structures) { - var maxOffset = Infinity, representClusterType = 0; - var _loop_1 = function _loop_12(i5) { - var countMapI = matchedCountMap[i5]; - var sortedGraphKeys = Object.keys(countMapI).sort(function(a4, b10) { - return countMapI[a4] - countMapI[b10]; - }); - var groupNum = 10; - var clusters = []; - sortedGraphKeys.forEach(function(key, j4) { - if (!clusters[j4 % groupNum]) - clusters[j4 % groupNum] = { - graphs: [], - totalCount: 0, - aveCount: 0 - }; - clusters[j4 % groupNum].graphs.push(key); - clusters[j4 % groupNum].totalCount += countMapI[key]; - }); - var aveIntraDist = 0; - var aveCounts = []; - clusters.forEach(function(graphsInCluster) { - var aveCount = graphsInCluster.totalCount / graphsInCluster.graphs.length; - graphsInCluster.aveCount = aveCount; - aveCounts.push(aveCount); - var aveIntraPerCluster = 0; - var graphsNum = graphsInCluster.length; - graphsInCluster.graphs.forEach(function(graphKey1, j4) { - var graph1Count = countMapI[graphKey1]; - graphsInCluster.graphs.forEach(function(graphKey2, k4) { - if (j4 === k4) - return; - aveIntraPerCluster += Math.abs(graph1Count - countMapI[graphKey2]); - }); - }); - aveIntraPerCluster /= graphsNum * (graphsNum - 1) / 2; - aveIntraDist += aveIntraPerCluster; - }); - aveIntraDist /= clusters.length; - var aveInterDist = 0; - aveCounts.forEach(function(aveCount1, j4) { - aveCounts.forEach(function(aveCount2, k4) { - if (j4 === k4) - return; - aveInterDist += Math.abs(aveCount1 - aveCount2); - }); - aveInterDist /= aveCounts.length * (aveCounts.length - 1) / 2; - }); - var offset = aveInterDist - aveIntraDist; - if (maxOffset < offset) { - maxOffset = offset; - representClusterType = i5; - } - }; - for (var i4 = 0; i4 < structureNum; i4++) { - _loop_1(i4); - } - return { - structure: structures[representClusterType], - structureCountMap: matchedCountMap[representClusterType] - }; -}; -var getNodeMaps = function getNodeMaps2(nodes, nodeLabelProp) { - var nodeMap = {}, nodeLabelMap = {}; - nodes.forEach(function(node, i4) { - nodeMap[node.id] = { - idx: i4, - node, - degree: 0, - inDegree: 0, - outDegree: 0 - }; - var label17 = node[nodeLabelProp]; - if (!nodeLabelMap[label17]) - nodeLabelMap[label17] = []; - nodeLabelMap[label17].push(node); - }); - return { - nodeMap, - nodeLabelMap - }; -}; -var getEdgeMaps = function getEdgeMaps2(edges, edgeLabelProp, nodeMap) { - var edgeMap = {}, edgeLabelMap = {}; - edges.forEach(function(edge2, i4) { - edgeMap["".concat(uniqueId9)] = { - idx: i4, - edge: edge2 - }; - var label17 = edge2[edgeLabelProp]; - if (!edgeLabelMap[label17]) - edgeLabelMap[label17] = []; - edgeLabelMap[label17].push(edge2); - var sourceNode = nodeMap[edge2.source]; - if (sourceNode) { - sourceNode.degree++; - sourceNode.outDegree++; - } - var targetNode = nodeMap[edge2.target]; - if (targetNode) { - targetNode.degree++; - targetNode.inDegree++; - } - }); - return { - edgeMap, - edgeLabelMap - }; -}; -var getSpmMap = function getSpmMap2(nodes, spm, directed) { - var length5 = spm.length; - var map23 = {}; - spm.forEach(function(row, i4) { - var start = directed ? 0 : i4 + 1; - var iId = nodes[i4].id; - for (var j4 = start; j4 < length5; j4++) { - if (i4 === j4) - continue; - var jId = nodes[j4].id; - var dist4 = row[j4]; - map23["".concat(iId, "-").concat(jId)] = dist4; - if (!directed) - map23["".concat(jId, "-").concat(iId)] = dist4; - } - }); - return map23; -}; -var getNDSDist = function getNDSDist2(graph, node1, node2, nodeMap, spDist, kNeighborUnits, structure, nodeLabelProp, edgeLabelProp, cachedNDSMap, cachedInterInducedGraph) { - var _a6; - var key = "".concat(node1.id, "-").concat(node2.id); - if (cachedNDSMap && cachedNDSMap[key]) - return cachedNDSMap[key]; - var interInducedGraph = cachedInterInducedGraph ? cachedInterInducedGraph[key] : void 0; - if (!interInducedGraph) { - var pairMap = (_a6 = {}, _a6[key] = { - start: nodeMap[node1.id].idx, - end: nodeMap[node2.id].idx, - distance: spDist - }, _a6); - cachedInterInducedGraph = getIntersectNeighborInducedGraph(pairMap, kNeighborUnits, graph, cachedInterInducedGraph); - interInducedGraph = cachedInterInducedGraph[key]; - } - return getMatchedCount(interInducedGraph, structure, nodeLabelProp, edgeLabelProp); -}; -var stashPatternNodeLabelDegreeMap = function stashPatternNodeLabelDegreeMap2(minPatternNodeLabelDegreeMap, neighborLabel, patternNodeMap, patternNodeLabelMap) { - var _a6, _b, _c; - var minPatternNodeLabelDegree = (_a6 = minPatternNodeLabelDegreeMap[neighborLabel]) === null || _a6 === void 0 ? void 0 : _a6.degree; - var minPatternNodeLabelInDegree = (_b = minPatternNodeLabelDegreeMap[neighborLabel]) === null || _b === void 0 ? void 0 : _b.inDegree; - var minPatternNodeLabelOutDegree = (_c = minPatternNodeLabelDegreeMap[neighborLabel]) === null || _c === void 0 ? void 0 : _c.outDegree; - if (minPatternNodeLabelDegreeMap[neighborLabel] === void 0) { - minPatternNodeLabelDegree = Infinity; - minPatternNodeLabelInDegree = Infinity; - minPatternNodeLabelOutDegree = Infinity; - patternNodeLabelMap[neighborLabel].forEach(function(patternNodeWithLabel) { - var patternNodeDegree = patternNodeMap[patternNodeWithLabel.id].degree; - if (minPatternNodeLabelDegree > patternNodeDegree) - minPatternNodeLabelDegree = patternNodeDegree; - var patternNodeInDegree = patternNodeMap[patternNodeWithLabel.id].inDegree; - if (minPatternNodeLabelInDegree > patternNodeInDegree) - minPatternNodeLabelInDegree = patternNodeInDegree; - var patternNodeOutDegree = patternNodeMap[patternNodeWithLabel.id].outDegree; - if (minPatternNodeLabelOutDegree > patternNodeOutDegree) - minPatternNodeLabelOutDegree = patternNodeOutDegree; - }); - minPatternNodeLabelDegreeMap[neighborLabel] = { - degree: minPatternNodeLabelDegree, - inDegree: minPatternNodeLabelInDegree, - outDegree: minPatternNodeLabelOutDegree - }; - } - return { - minPatternNodeLabelDegree, - minPatternNodeLabelInDegree, - minPatternNodeLabelOutDegree - }; -}; -var GADDI = function GADDI2(graphData, pattern2, directed, k4, length5, nodeLabelProp, edgeLabelProp) { - var _a6; - if (directed === void 0) { - directed = false; - } - if (nodeLabelProp === void 0) { - nodeLabelProp = "cluster"; - } - if (edgeLabelProp === void 0) { - edgeLabelProp = "cluster"; - } - if (!graphData || !graphData.nodes) - return; - var nodeNum = graphData.nodes.length; - if (!nodeNum) - return; - var spm = floydWarshall_default(graphData, directed); - var patternSpm = floydWarshall_default(pattern2, directed); - var spmMap = getSpmMap(graphData.nodes, spm, directed); - var patternSpmMap = getSpmMap(pattern2.nodes, patternSpm, directed); - var _b = getNodeMaps(graphData.nodes, nodeLabelProp), nodeMap = _b.nodeMap, nodeLabelMap = _b.nodeLabelMap; - var _c = getNodeMaps(pattern2.nodes, nodeLabelProp), patternNodeMap = _c.nodeMap, patternNodeLabelMap = _c.nodeLabelMap; - getEdgeMaps(graphData.edges, edgeLabelProp, nodeMap); - var patternEdgeLabelMap = getEdgeMaps(pattern2.edges, edgeLabelProp, patternNodeMap).edgeLabelMap; - var patternSpmSpread = []; - patternSpm === null || patternSpm === void 0 ? void 0 : patternSpm.forEach(function(row) { - patternSpmSpread = patternSpmSpread.concat(row); - }); - if (!length5) - length5 = Math.max.apply(Math, __spreadArray(__spreadArray([], patternSpmSpread, false), [2], false)); - if (!k4) - k4 = length5; - var kNeighborUnits = findKNeighborUnits(graphData, spm, nodeLabelProp, k4); - var patternKNeighborUnits = findKNeighborUnits(pattern2, patternSpm, nodeLabelProp, k4); - var maxNodePairNum = Math.min(100, nodeNum * (nodeNum - 1) / 2); - var nodePairsMap = findNodePairsRandomly(k4, nodeNum, maxNodePairNum, kNeighborUnits, spm); - var intGMap = getIntersectNeighborInducedGraph(nodePairsMap, kNeighborUnits, graphData); - var top = 10, minSupport = 1, minNodeNum = 1, maxNodeNum = 4; - var params = { - graphs: intGMap, - nodeLabelProp, - edgeLabelProp, - minSupport, - minNodeNum, - maxNodeNum, - directed - }; - var freStructures = gSpan_default(params).slice(0, top); - var structureNum = freStructures.length; - var matchedCountMap = []; - freStructures.forEach(function(structure, i5) { - matchedCountMap[i5] = {}; - Object.keys(intGMap).forEach(function(key) { - var graph = intGMap[key]; - var subStructureCount = getMatchedCount(graph, structure, nodeLabelProp, edgeLabelProp); - matchedCountMap[i5][key] = subStructureCount; - }); - }); - var _d = findRepresentStructure(matchedCountMap, structureNum, freStructures), dsG = _d.structure, ndsDist = _d.structureCountMap; - var beginPNode = pattern2.nodes[0], candidates = [], label17 = (_a6 = pattern2.nodes[0]) === null || _a6 === void 0 ? void 0 : _a6[nodeLabelProp], maxNodeNumWithSameLabel = -Infinity; - pattern2.nodes.forEach(function(node) { - var pLabel = node[nodeLabelProp]; - var nodesWithSameLabel = nodeLabelMap[pLabel]; - if ((nodesWithSameLabel === null || nodesWithSameLabel === void 0 ? void 0 : nodesWithSameLabel.length) > maxNodeNumWithSameLabel) { - maxNodeNumWithSameLabel = nodesWithSameLabel.length; - candidates = nodesWithSameLabel; - label17 = pLabel; - beginPNode = node; - } - }); - var minPatternNodeLabelDegreeMap = {}; - var patternIntGraphMap = {}, patternNDSDist = {}, patternNDSDistMap = {}; - var patternSpDist = {}; - var patternSpDistBack = {}; - Object.keys(patternNodeLabelMap).forEach(function(label22, j4) { - patternSpDist[label22] = []; - if (directed) { - patternSpDistBack[label22] = []; - } - var maxDist = -Infinity; - var patternNodesWithLabel2 = patternNodeLabelMap[label22]; - var patternNodePairMap = {}; - patternNodesWithLabel2.forEach(function(nodeWithLabel2) { - var dist4 = patternSpmMap["".concat(beginPNode.id, "-").concat(nodeWithLabel2.id)]; - dist4 && patternSpDist[label22].push(dist4); - if (maxDist < dist4) - maxDist = dist4; - patternNodePairMap["".concat(beginPNode.id, "-").concat(nodeWithLabel2.id)] = { - start: 0, - end: patternNodeMap[nodeWithLabel2.id].idx, - distance: dist4 - }; - if (directed) { - var distBack = patternSpmMap["".concat(nodeWithLabel2.id, "-").concat(beginPNode.id)]; - distBack && patternSpDistBack[label22].push(distBack); - } - }); - patternSpDist[label22] = patternSpDist[label22].sort(function(a4, b10) { - return a4 - b10; - }); - if (directed) - patternSpDistBack[label22] = patternSpDistBack[label22].sort(function(a4, b10) { - return a4 - b10; - }); - patternIntGraphMap = getIntersectNeighborInducedGraph(patternNodePairMap, patternKNeighborUnits, pattern2, patternIntGraphMap); - var currentPatternNDSDistArray = []; - Object.keys(patternNodePairMap).forEach(function(key) { - if (patternNDSDist[key]) { - currentPatternNDSDistArray.push(patternNDSDist[key]); - return; - } - var patternIntGraph = patternIntGraphMap[key]; - patternNDSDist[key] = getMatchedCount(patternIntGraph, dsG, nodeLabelProp, edgeLabelProp); - currentPatternNDSDistArray.push(patternNDSDist[key]); - }); - currentPatternNDSDistArray = currentPatternNDSDistArray.sort(function(a4, b10) { - return b10 - a4; - }); - patternNDSDistMap["".concat(beginPNode.id, "-").concat(label22)] = currentPatternNDSDistArray; - if (label22 === label17) - return; - var candidatesNum = (candidates === null || candidates === void 0 ? void 0 : candidates.length) || 0; - var _loop_4 = function _loop_42(m5) { - var cNode = candidates[m5]; - var graphNeighborUnit = kNeighborUnits[nodeMap[cNode.id].idx]; - var graphNeighborUnitCountMap = graphNeighborUnit.nodeLabelCountMap[label22]; - var patternLabel2Num = patternNodeLabelMap[label22].length; - if (!graphNeighborUnitCountMap || graphNeighborUnitCountMap.count < patternLabel2Num) { - candidates.splice(m5, 1); - return "continue"; - } - var prune2Invalid = false; - for (var n3 = 0; n3 < patternLabel2Num; n3++) { - if (graphNeighborUnitCountMap.dists[n3] > patternSpDist[label22][n3]) { - prune2Invalid = true; - break; - } - } - if (prune2Invalid) { - candidates.splice(m5, 1); - return "continue"; - } - var cNodePairMap = {}; - graphNeighborUnit.neighbors.forEach(function(neighborNode) { - var dist4 = spmMap["".concat(cNode.id, "-").concat(neighborNode.id)]; - cNodePairMap["".concat(cNode.id, "-").concat(neighborNode.id)] = { - start: nodeMap[cNode.id].idx, - end: nodeMap[neighborNode.id].idx, - distance: dist4 - }; - }); - intGMap = getIntersectNeighborInducedGraph(cNodePairMap, kNeighborUnits, graphData, intGMap); - var currentNDSDistArray = []; - Object.keys(cNodePairMap).forEach(function(key) { - if (ndsDist[key]) { - currentNDSDistArray.push(ndsDist[key]); - return; - } - var intGraph = intGMap[key]; - ndsDist[key] = getMatchedCount(intGraph, dsG, nodeLabelProp, edgeLabelProp); - currentNDSDistArray.push(ndsDist[key]); - }); - currentNDSDistArray = currentNDSDistArray.sort(function(a4, b10) { - return b10 - a4; - }); - var prune3Invalid = false; - for (var n3 = 0; n3 < patternLabel2Num; n3++) { - if (currentNDSDistArray[n3] < currentPatternNDSDistArray[n3]) { - prune3Invalid = true; - break; - } - } - if (prune3Invalid) { - candidates.splice(m5, 1); - return "continue"; - } - }; - for (var m4 = candidatesNum - 1; m4 >= 0; m4--) { - _loop_4(m4); - } - }); - var candidateGraphs = []; - candidates === null || candidates === void 0 ? void 0 : candidates.forEach(function(candidate) { - var nodeIdx = nodeMap[candidate.id].idx; - var lengthNeighborUnit = findKNeighborUnit(graphData.nodes, spm[nodeIdx], nodeIdx, nodeLabelProp, length5); - var neighborNodes = lengthNeighborUnit.neighbors; - var neighborNum = neighborNodes.length; - var unmatched = false; - for (var i5 = neighborNum - 1; i5 >= 0; i5--) { - if (neighborNodes.length + 1 < pattern2.nodes.length) { - unmatched = true; - return; - } - var neighborNode = neighborNodes[i5]; - var neighborLabel = neighborNode[nodeLabelProp]; - if (!patternNodeLabelMap[neighborLabel] || !patternNodeLabelMap[neighborLabel].length) { - neighborNodes.splice(i5, 1); - continue; - } - if (!patternSpDist[neighborLabel] || !patternSpDist[neighborLabel].length) { - neighborNodes.splice(i5, 1); - continue; - } - var key = "".concat(candidate.id, "-").concat(neighborNode.id); - var distToCandidate = spmMap[key]; - var idx = patternSpDist[neighborLabel].length - 1; - var maxDistWithLabelInPattern = patternSpDist[neighborLabel][idx]; - if (distToCandidate > maxDistWithLabelInPattern) { - neighborNodes.splice(i5, 1); - continue; - } - if (directed) { - var keyBack = "".concat(neighborNode.id, "-").concat(candidate.id); - var distFromCandidate = spmMap[keyBack]; - idx = patternSpDistBack[neighborLabel].length - 1; - var maxBackDistWithLabelInPattern = patternSpDistBack[neighborLabel][idx]; - if (distFromCandidate > maxBackDistWithLabelInPattern) { - neighborNodes.splice(i5, 1); - continue; - } - } - var ndsToCandidate = ndsDist[key] ? ndsDist[key] : getNDSDist(graphData, candidate, neighborNode, nodeMap, distToCandidate, kNeighborUnits, dsG, nodeLabelProp, edgeLabelProp, ndsDist, intGMap); - var patternKey = "".concat(beginPNode.id, "-").concat(neighborLabel); - var minNdsWithLabelInPattern = patternNDSDistMap[patternKey][patternNDSDistMap[patternKey].length - 1]; - if (ndsToCandidate < minNdsWithLabelInPattern) { - neighborNodes.splice(i5, 1); - continue; - } - var _a7 = stashPatternNodeLabelDegreeMap(minPatternNodeLabelDegreeMap, neighborLabel, patternNodeMap, patternNodeLabelMap), minPatternNodeLabelDegree = _a7.minPatternNodeLabelDegree, minPatternNodeLabelInDegree = _a7.minPatternNodeLabelInDegree, minPatternNodeLabelOutDegree = _a7.minPatternNodeLabelOutDegree; - if (nodeMap[neighborNode.id].degree < minPatternNodeLabelDegree) { - neighborNodes.splice(i5, 1); - continue; - } - } - if (!unmatched) { - candidateGraphs.push({ - nodes: [candidate].concat(neighborNodes) - }); - } - }); - var undirectedLengthsToBeginPNode = dijkstra_default(pattern2, beginPNode.id, false).length; - var undirectedLengthsToBeginPNodeLabelMap = {}; - if (directed) { - Object.keys(undirectedLengthsToBeginPNode).forEach(function(nodeId) { - var nodeLabel = patternNodeMap[nodeId].node[nodeLabelProp]; - if (!undirectedLengthsToBeginPNodeLabelMap[nodeLabel]) - undirectedLengthsToBeginPNodeLabelMap[nodeLabel] = [undirectedLengthsToBeginPNode[nodeId]]; - else - undirectedLengthsToBeginPNodeLabelMap[nodeLabel].push(undirectedLengthsToBeginPNode[nodeId]); - }); - Object.keys(undirectedLengthsToBeginPNodeLabelMap).forEach(function(pLabel) { - undirectedLengthsToBeginPNodeLabelMap[pLabel].sort(function(a4, b10) { - return a4 - b10; - }); - }); - } else { - undirectedLengthsToBeginPNodeLabelMap = patternSpDist; - } - var candidateGraphNum = candidateGraphs.length; - var _loop_2 = function _loop_22(i5) { - var candidateGraph = candidateGraphs[i5]; - var candidate = candidateGraph.nodes[0]; - var candidateNodeLabelCountMap = {}; - var candidateNodeMap = {}; - candidateGraph.nodes.forEach(function(node, q3) { - candidateNodeMap[node.id] = { - idx: q3, - node, - degree: 0, - inDegree: 0, - outDegree: 0 - }; - var cNodeLabel2 = node[nodeLabelProp]; - if (!candidateNodeLabelCountMap[cNodeLabel2]) - candidateNodeLabelCountMap[cNodeLabel2] = 1; - else - candidateNodeLabelCountMap[cNodeLabel2]++; - }); - var candidateEdges = []; - var edgeLabelCountMap = {}; - graphData.edges.forEach(function(edge2) { - if (candidateNodeMap[edge2.source] && candidateNodeMap[edge2.target]) { - candidateEdges.push(edge2); - if (!edgeLabelCountMap[edge2[edgeLabelProp]]) - edgeLabelCountMap[edge2[edgeLabelProp]] = 1; - else - edgeLabelCountMap[edge2[edgeLabelProp]]++; - candidateNodeMap[edge2.source].degree++; - candidateNodeMap[edge2.target].degree++; - candidateNodeMap[edge2.source].outDegree++; - candidateNodeMap[edge2.target].inDegree++; - } - }); - var pattenrEdgeLabelNum = Object.keys(patternEdgeLabelMap).length; - var prunedByEdgeLabel = false; - for (var e4 = 0; e4 < pattenrEdgeLabelNum; e4++) { - var label_1 = Object.keys(patternEdgeLabelMap)[e4]; - if (!edgeLabelCountMap[label_1] || edgeLabelCountMap[label_1] < patternEdgeLabelMap[label_1].length) { - prunedByEdgeLabel = true; - break; - } - } - if (prunedByEdgeLabel) { - candidateGraphs.splice(i5, 1); - return "continue"; - } - var candidateEdgeNum = candidateEdges.length; - if (candidateEdgeNum < pattern2.edges.length) { - candidateGraphs.splice(i5, 1); - return "break"; - } - var candidateGraphInvalid = false; - var _loop_5 = function _loop_52(e6) { - var edge2 = candidateEdges[e6]; - var edgeLabel2 = edge2[edgeLabelProp]; - var patternEdgesWithLabel = patternEdgeLabelMap[edgeLabel2]; - if (!patternEdgesWithLabel || !patternEdgesWithLabel.length) { - edgeLabelCountMap[edgeLabel2]--; - if (patternEdgesWithLabel && edgeLabelCountMap[edgeLabel2] < patternEdgesWithLabel.length) { - candidateGraphInvalid = true; - return "break"; - } - candidateEdges.splice(e6, 1); - candidateNodeMap[edge2.source].degree--; - candidateNodeMap[edge2.target].degree--; - candidateNodeMap[edge2.source].outDegree--; - candidateNodeMap[edge2.target].inDegree--; - return "continue"; - } - var sourceLabel = candidateNodeMap[edge2.source].node[nodeLabelProp]; - var targetLabel = candidateNodeMap[edge2.target].node[nodeLabelProp]; - var edgeMatched = false; - patternEdgesWithLabel.forEach(function(patternEdge) { - var patternSource = patternNodeMap[patternEdge.source].node; - var patternTarget = patternNodeMap[patternEdge.target].node; - if (patternSource[nodeLabelProp] === sourceLabel && patternTarget[nodeLabelProp] === targetLabel) - edgeMatched = true; - if (!directed && patternSource[nodeLabelProp] === targetLabel && patternTarget[nodeLabelProp] === sourceLabel) - edgeMatched = true; - }); - if (!edgeMatched) { - edgeLabelCountMap[edgeLabel2]--; - if (patternEdgesWithLabel && edgeLabelCountMap[edgeLabel2] < patternEdgesWithLabel.length) { - candidateGraphInvalid = true; - return "break"; - } - candidateEdges.splice(e6, 1); - candidateNodeMap[edge2.source].degree--; - candidateNodeMap[edge2.target].degree--; - candidateNodeMap[edge2.source].outDegree--; - candidateNodeMap[edge2.target].inDegree--; - return "continue"; - } - }; - for (var e4 = candidateEdgeNum - 1; e4 >= 0; e4--) { - var state_2 = _loop_5(e4); - if (state_2 === "break") - break; - } - if (candidateGraphInvalid) { - candidateGraphs.splice(i5, 1); - return "continue"; - } - candidateGraph.edges = candidateEdges; - var lengthsToCandidate = dijkstra_default(candidateGraph, candidateGraph.nodes[0].id, false).length; - Object.keys(lengthsToCandidate).reverse().forEach(function(targetId) { - if (targetId === candidateGraph.nodes[0].id || candidateGraphInvalid) - return; - if (lengthsToCandidate[targetId] === Infinity) { - var targetNodeLabel = candidateNodeMap[targetId].node[nodeLabelProp]; - candidateNodeLabelCountMap[targetNodeLabel]--; - if (candidateNodeLabelCountMap[targetNodeLabel] < patternNodeLabelMap[targetNodeLabel].length) { - candidateGraphInvalid = true; - return; - } - var idx = candidateGraph.nodes.indexOf(candidateNodeMap[targetId].node); - candidateGraph.nodes.splice(idx, 1); - candidateNodeMap[targetId] = void 0; - return; - } - var nLabel = nodeMap[targetId].node[nodeLabelProp]; - if (!undirectedLengthsToBeginPNodeLabelMap[nLabel] || !undirectedLengthsToBeginPNodeLabelMap[nLabel].length || lengthsToCandidate[targetId] > undirectedLengthsToBeginPNodeLabelMap[nLabel][undirectedLengthsToBeginPNodeLabelMap[nLabel].length - 1]) { - var targetNodeLabel = candidateNodeMap[targetId].node[nodeLabelProp]; - candidateNodeLabelCountMap[targetNodeLabel]--; - if (candidateNodeLabelCountMap[targetNodeLabel] < patternNodeLabelMap[targetNodeLabel].length) { - candidateGraphInvalid = true; - return; - } - var idx = candidateGraph.nodes.indexOf(candidateNodeMap[targetId].node); - candidateGraph.nodes.splice(idx, 1); - candidateNodeMap[targetId] = void 0; - } - }); - if (candidateGraphInvalid) { - candidateGraphs.splice(i5, 1); - return "continue"; - } - var degreeChanged = true; - var loopCount = 0; - while (degreeChanged && !candidateGraphInvalid) { - degreeChanged = false; - var condition = directed ? candidateNodeMap[candidate.id].degree < patternNodeMap[beginPNode.id].degree || candidateNodeMap[candidate.id].inDegree < patternNodeMap[beginPNode.id].inDegree || candidateNodeMap[candidate.id].outDegree < patternNodeMap[beginPNode.id].outDegree : candidateNodeMap[candidate.id].degree < patternNodeMap[beginPNode.id].degree; - if (condition) { - candidateGraphInvalid = true; - break; - } - if (candidateNodeLabelCountMap[candidate[nodeLabelProp]] < patternNodeLabelMap[candidate[nodeLabelProp]].length) { - candidateGraphInvalid = true; - break; - } - var currentCandidateNodeNum = candidateGraph.nodes.length; - for (var o3 = currentCandidateNodeNum - 1; o3 >= 0; o3--) { - var cgNode = candidateGraph.nodes[o3]; - var nodeDegree = candidateNodeMap[cgNode.id].degree; - var nodeInDegree = candidateNodeMap[cgNode.id].inDegree; - var nodeOutDegree = candidateNodeMap[cgNode.id].outDegree; - var cNodeLabel = cgNode[nodeLabelProp]; - var _e = stashPatternNodeLabelDegreeMap(minPatternNodeLabelDegreeMap, cNodeLabel, patternNodeMap, patternNodeLabelMap), minPatternNodeLabelDegree = _e.minPatternNodeLabelDegree, minPatternNodeLabelInDegree = _e.minPatternNodeLabelInDegree, minPatternNodeLabelOutDegree = _e.minPatternNodeLabelOutDegree; - var deleteCondition = directed ? nodeDegree < minPatternNodeLabelDegree || nodeInDegree < minPatternNodeLabelInDegree || nodeOutDegree < minPatternNodeLabelOutDegree : nodeDegree < minPatternNodeLabelDegree; - if (deleteCondition) { - candidateNodeLabelCountMap[cgNode[nodeLabelProp]]--; - if (candidateNodeLabelCountMap[cgNode[nodeLabelProp]] < patternNodeLabelMap[cgNode[nodeLabelProp]].length) { - candidateGraphInvalid = true; - break; - } - candidateGraph.nodes.splice(o3, 1); - candidateNodeMap[cgNode.id] = void 0; - degreeChanged = true; - } - } - if (candidateGraphInvalid || !degreeChanged && loopCount !== 0) - break; - candidateEdgeNum = candidateEdges.length; - for (var y5 = candidateEdgeNum - 1; y5 >= 0; y5--) { - var cedge = candidateEdges[y5]; - if (!candidateNodeMap[cedge.source] || !candidateNodeMap[cedge.target]) { - candidateEdges.splice(y5, 1); - var edgeLabel = cedge[edgeLabelProp]; - edgeLabelCountMap[edgeLabel]--; - if (candidateNodeMap[cedge.source]) { - candidateNodeMap[cedge.source].degree--; - candidateNodeMap[cedge.source].outDegree--; - } - if (candidateNodeMap[cedge.target]) { - candidateNodeMap[cedge.target].degree--; - candidateNodeMap[cedge.target].inDegree--; - } - if (patternEdgeLabelMap[edgeLabel] && edgeLabelCountMap[edgeLabel] < patternEdgeLabelMap[edgeLabel].length) { - candidateGraphInvalid = true; - break; - } - degreeChanged = true; - } - } - loopCount++; - } - if (candidateGraphInvalid) { - candidateGraphs.splice(i5, 1); - return "continue"; - } - if (candidateGraphInvalid || candidateGraph.nodes.length < pattern2.nodes.length || candidateEdges.length < pattern2.edges.length) { - candidateGraphs.splice(i5, 1); - return "continue"; - } - }; - for (var i4 = candidateGraphNum - 1; i4 >= 0; i4--) { - var state_1 = _loop_2(i4); - if (state_1 === "break") - break; - } - var currentLength = candidateGraphs.length; - var _loop_3 = function _loop_32(i5) { - var cg1 = candidateGraphs[i5]; - var cg1EdgeMap = {}; - cg1.edges.forEach(function(edge2) { - var key = "".concat(edge2.source, "-").concat(edge2.target, "-").concat(edge2.label); - if (!cg1EdgeMap[key]) - cg1EdgeMap[key] = 1; - else - cg1EdgeMap[key]++; - }); - var _loop_6 = function _loop_62(j5) { - var cg2 = candidateGraphs[j5]; - var cg2EdgeMap = {}; - cg2.edges.forEach(function(edge2) { - var key = "".concat(edge2.source, "-").concat(edge2.target, "-").concat(edge2.label); - if (!cg2EdgeMap[key]) - cg2EdgeMap[key] = 1; - else - cg2EdgeMap[key]++; - }); - var same = true; - if (Object.keys(cg2EdgeMap).length !== Object.keys(cg1EdgeMap).length) { - same = false; - } else { - Object.keys(cg1EdgeMap).forEach(function(key) { - if (cg2EdgeMap[key] !== cg1EdgeMap[key]) - same = false; - }); - } - if (same) { - candidateGraphs.splice(j5, 1); - } - }; - for (var j4 = currentLength - 1; j4 > i5; j4--) { - _loop_6(j4); - } - currentLength = candidateGraphs.length; - }; - for (var i4 = 0; i4 <= currentLength - 1; i4++) { - _loop_3(i4); - } - return candidateGraphs; -}; -var gaddi_default = GADDI; - -// node_modules/@antv/algorithm/es/structs/stack.js -var Stack2 = function() { - function Stack3(maxStep) { - if (maxStep === void 0) { - maxStep = 10; - } - this.linkedList = new linked_list_default(); - this.maxStep = maxStep; - } - Object.defineProperty(Stack3.prototype, "length", { - get: function get100() { - return this.linkedList.toArray().length; - }, - enumerable: false, - configurable: true - }); - Stack3.prototype.isEmpty = function() { - return !this.linkedList.head; - }; - Stack3.prototype.isMaxStack = function() { - return this.toArray().length >= this.maxStep; - }; - Stack3.prototype.peek = function() { - if (this.isEmpty()) { - return null; - } - return this.linkedList.head.value; - }; - Stack3.prototype.push = function(value2) { - this.linkedList.prepend(value2); - if (this.length > this.maxStep) { - this.linkedList.deleteTail(); - } - }; - Stack3.prototype.pop = function() { - var removeHead = this.linkedList.deleteHead(); - return removeHead ? removeHead.value : null; - }; - Stack3.prototype.toArray = function() { - return this.linkedList.toArray().map(function(node) { - return node.value; - }); - }; - Stack3.prototype.clear = function() { - while (!this.isEmpty()) { - this.pop(); - } - }; - return Stack3; -}(); -var stack_default2 = Stack2; - -// node_modules/@antv/algorithm/es/index.js -var detectDirectedCycle3 = detect_cycle_default; -var es_default2 = { - getAdjMatrix: adjacent_matrix_default, - breadthFirstSearch: bfs_default, - connectedComponent: getConnectedComponents, - getDegree: degree_default, - getInDegree, - getOutDegree, - detectCycle: detect_cycle_default, - detectDirectedCycle: detectDirectedCycle3, - detectAllCycles, - detectAllDirectedCycle, - detectAllUndirectedCycle, - depthFirstSearch, - dijkstra: dijkstra_default, - findAllPath, - findShortestPath, - floydWarshall: floydWarshall_default, - labelPropagation: label_propagation_default, - louvain: louvain_default, - iLouvain: i_louvain_default, - kCore: k_core_default, - kMeans: k_means_default, - cosineSimilarity: cosine_similarity_default, - nodesCosineSimilarity: nodes_cosine_similarity_default, - minimumSpanningTree: mts_default, - pageRank: pageRank_default, - getNeighbors, - Stack: stack_default2, - GADDI: gaddi_default -}; - -// node_modules/@antv/g6-core/es/util/math.js -var math_exports = {}; -__export(math_exports, { - Line: () => Line7, - applyMatrix: () => applyMatrix, - compare: () => compare2, - distance: () => distance10, - floydWarshall: () => floydWarshall3, - fractionToLine: () => fractionToLine, - getAdjMatrix: () => getAdjMatrix, - getBBoxBoundLine: () => getBBoxBoundLine, - getCircleCenterByPoints: () => getCircleCenterByPoints, - getCircleIntersectByPoint: () => getCircleIntersectByPoint, - getDegree: () => getDegree, - getEllipseIntersectByPoint: () => getEllipseIntersectByPoint, - getLineIntersect: () => getLineIntersect2, - getPointsCenter: () => getPointsCenter, - getRectIntersectByPoint: () => getRectIntersectByPoint, - intersectBBox: () => intersectBBox3, - invertMatrix: () => invertMatrix, - isPointInPolygon: () => isPointInPolygon, - isPointsOverlap: () => isPointsOverlap, - isPolygonsIntersect: () => isPolygonsIntersect2, - itemIntersectByLine: () => itemIntersectByLine, - lerp: () => lerp6, - move: () => move, - pointLineDistance: () => pointLineDistance, - pointLineSquareDist: () => pointLineSquareDist, - pointRectSquareDist: () => pointRectSquareDist, - rotate: () => rotate6, - scale: () => scale10, - scaleMatrix: () => scaleMatrix, - squareDist: () => squareDist, - translate: () => translate4 -}); -var import_util487 = __toModule(require_lib()); -var transform8 = ext_exports.transform; -var compare2 = function compare3(attributeName) { - return function(m4, n3) { - return m4[attributeName] - n3[attributeName]; - }; -}; -var isBetween4 = function isBetween5(value2, min13, max15) { - return value2 >= min13 && value2 <= max15; -}; -var getLineIntersect2 = function getLineIntersect3(p0, p1, p22, p32) { - var tolerance3 = 1e-4; - var E2 = { - x: p22.x - p0.x, - y: p22.y - p0.y - }; - var D0 = { - x: p1.x - p0.x, - y: p1.y - p0.y - }; - var D1 = { - x: p32.x - p22.x, - y: p32.y - p22.y - }; - var kross = D0.x * D1.y - D0.y * D1.x; - var sqrKross = kross * kross; - var invertKross = 1 / kross; - var sqrLen0 = D0.x * D0.x + D0.y * D0.y; - var sqrLen1 = D1.x * D1.x + D1.y * D1.y; - if (sqrKross > tolerance3 * sqrLen0 * sqrLen1) { - var s4 = (E2.x * D1.y - E2.y * D1.x) * invertKross; - var t4 = (E2.x * D0.y - E2.y * D0.x) * invertKross; - if (!isBetween4(s4, 0, 1) || !isBetween4(t4, 0, 1)) - return null; - return { - x: p0.x + s4 * D0.x, - y: p0.y + s4 * D0.y - }; - } - return null; -}; -var getRectIntersectByPoint = function getRectIntersectByPoint2(rect3, point2) { - var x6 = rect3.x, y5 = rect3.y, width2 = rect3.width, height = rect3.height; - var cx = x6 + width2 / 2; - var cy = y5 + height / 2; - var points = []; - var center2 = { - x: cx, - y: cy - }; - points.push({ - x: x6, - y: y5 - }); - points.push({ - x: x6 + width2, - y: y5 - }); - points.push({ - x: x6 + width2, - y: y5 + height - }); - points.push({ - x: x6, - y: y5 + height - }); - points.push({ - x: x6, - y: y5 - }); - var rst = null; - for (var i4 = 1; i4 < points.length; i4++) { - rst = getLineIntersect2(points[i4 - 1], points[i4], center2, point2); - if (rst) { - break; - } - } - return rst; -}; -var getCircleIntersectByPoint = function getCircleIntersectByPoint2(circle3, point2) { - var cx = circle3.x, cy = circle3.y, r4 = circle3.r; - var x6 = point2.x, y5 = point2.y; - var dx = x6 - cx; - var dy = y5 - cy; - if (dx * dx + dy * dy < r4 * r4) { - return null; - } - var angle3 = Math.atan(dy / dx); - return { - x: cx + Math.abs(r4 * Math.cos(angle3)) * Math.sign(dx), - y: cy + Math.abs(r4 * Math.sin(angle3)) * Math.sign(dy) - }; -}; -var getEllipseIntersectByPoint = function getEllipseIntersectByPoint2(ellipse, point2) { - var a4 = ellipse.rx; - var b10 = ellipse.ry; - var cx = ellipse.x; - var cy = ellipse.y; - var dx = point2.x - cx; - var dy = point2.y - cy; - var angle3 = Math.atan2(dy / b10, dx / a4); - if (angle3 < 0) { - angle3 += 2 * Math.PI; - } - return { - x: cx + a4 * Math.cos(angle3), - y: cy + b10 * Math.sin(angle3) - }; -}; -var applyMatrix = function applyMatrix2(point2, matrix, tag) { - if (tag === void 0) { - tag = 1; - } - var vector = [point2.x, point2.y, tag]; - if (!matrix || isNaN(matrix[0])) { - matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - vec3_exports.transformMat3(vector, vector, matrix); - return { - x: vector[0], - y: vector[1] - }; -}; -var invertMatrix = function invertMatrix2(point2, matrix, tag) { - if (tag === void 0) { - tag = 1; - } - if (!matrix || isNaN(matrix[0])) { - matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - var inversedMatrix = mat3_exports.invert([1, 0, 0, 0, 1, 0, 0, 0, 1], matrix); - if (!inversedMatrix) { - inversedMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - var vector = [point2.x, point2.y, tag]; - vec3_exports.transformMat3(vector, vector, inversedMatrix); - return { - x: vector[0], - y: vector[1] - }; -}; -var getCircleCenterByPoints = function getCircleCenterByPoints2(p1, p22, p32) { - var a4 = p1.x - p22.x; - var b10 = p1.y - p22.y; - var c5 = p1.x - p32.x; - var d3 = p1.y - p32.y; - var e4 = (p1.x * p1.x - p22.x * p22.x - p22.y * p22.y + p1.y * p1.y) / 2; - var f3 = (p1.x * p1.x - p32.x * p32.x - p32.y * p32.y + p1.y * p1.y) / 2; - var denominator = b10 * c5 - a4 * d3; - return { - x: -(d3 * e4 - b10 * f3) / denominator, - y: -(a4 * f3 - c5 * e4) / denominator - }; -}; -var distance10 = function distance11(p1, p22) { - var vx = p1.x - p22.x; - var vy = p1.y - p22.y; - return Math.sqrt(vx * vx + vy * vy); -}; -var scaleMatrix = function scaleMatrix2(matrix, ratio) { - var result = []; - matrix.forEach(function(row) { - var newRow = []; - row.forEach(function(v3) { - newRow.push(v3 * ratio); - }); - result.push(newRow); - }); - return result; -}; -var floydWarshall3 = function floydWarshall4(adjMatrix3) { - var dist4 = []; - var size14 = adjMatrix3.length; - for (var i4 = 0; i4 < size14; i4 += 1) { - dist4[i4] = []; - for (var j4 = 0; j4 < size14; j4 += 1) { - if (i4 === j4) { - dist4[i4][j4] = 0; - } else if (adjMatrix3[i4][j4] === 0 || !adjMatrix3[i4][j4]) { - dist4[i4][j4] = Infinity; - } else { - dist4[i4][j4] = adjMatrix3[i4][j4]; - } - } - } - for (var k4 = 0; k4 < size14; k4 += 1) { - for (var i4 = 0; i4 < size14; i4 += 1) { - for (var j4 = 0; j4 < size14; j4 += 1) { - if (dist4[i4][j4] > dist4[i4][k4] + dist4[k4][j4]) { - dist4[i4][j4] = dist4[i4][k4] + dist4[k4][j4]; - } - } - } - } - return dist4; -}; -var getAdjMatrix = function getAdjMatrix2(data3, directed) { - var nodes = data3.nodes, edges = data3.edges; - var matrix = []; - var nodeMap = {}; - if (!nodes) { - throw new Error("invalid nodes data!"); - } - if (nodes) { - nodes.forEach(function(node, i4) { - nodeMap[node.id] = i4; - var row = []; - matrix.push(row); - }); - } - if (edges) { - edges.forEach(function(e4) { - var source = e4.source, target = e4.target; - var sIndex = nodeMap[source]; - var tIndex = nodeMap[target]; - matrix[sIndex][tIndex] = 1; - if (!directed) { - matrix[tIndex][sIndex] = 1; - } - }); - } - return matrix; -}; -var translate4 = function translate5(group3, vec) { - group3.translate(vec.x, vec.y); -}; -var move = function move2(group3, point2, animate, animateCfg) { - if (animateCfg === void 0) { - animateCfg = { - duration: 500 - }; - } - var matrix = group3.getMatrix(); - if (!matrix) { - matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - var bbox = group3.getCanvasBBox(); - var vx = point2.x - bbox.minX; - var vy = point2.y - bbox.minY; - if (animate) { - var dx_1 = vx * matrix[0]; - var dy_1 = vy * matrix[4]; - var lastX_1 = 0; - var lastY_1 = 0; - var newX_1 = 0; - var newY_1 = 0; - group3.animate(function(ratio) { - newX_1 = dx_1 * ratio; - newY_1 = dy_1 * ratio; - matrix = transform8(matrix, [["t", newX_1 - lastX_1, newY_1 - lastY_1]]); - lastX_1 = newX_1; - lastY_1 = newY_1; - return { - matrix - }; - }, animateCfg); - } else { - var movedMatrix = transform8(matrix, [["t", vx, vy]]); - group3.setMatrix(movedMatrix); - } -}; -var scale10 = function scale11(group3, ratio) { - var matrix = group3.getMatrix(); - if (!matrix) { - matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - var scaleXY = ratio; - if (!(0, import_util487.isArray)(ratio)) { - scaleXY = [ratio, ratio]; - } - if ((0, import_util487.isArray)(ratio) && ratio.length === 1) { - scaleXY = [ratio[0], ratio[0]]; - } - matrix = transform8(matrix, [["s", scaleXY[0], scaleXY[1]]]); - group3.setMatrix(matrix); -}; -var rotate6 = function rotate7(group3, angle3) { - var matrix = group3.getMatrix(); - if (!matrix) { - matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - matrix = transform8(matrix, [["r", angle3]]); - group3.setMatrix(matrix); -}; -var getDegree = function getDegree2(n3, nodeIdxMap, edges) { - var degrees = []; - for (var i4 = 0; i4 < n3; i4++) { - degrees[i4] = 0; - } - edges.forEach(function(e4) { - if (e4.source) { - degrees[nodeIdxMap[e4.source]] += 1; - } - if (e4.target) { - degrees[nodeIdxMap[e4.target]] += 1; - } - }); - return degrees; -}; -function onSegment3(p1, p22, q3) { - if ((q3[0] - p1[0]) * (p22[1] - p1[1]) === (p22[0] - p1[0]) * (q3[1] - p1[1]) && Math.min(p1[0], p22[0]) <= q3[0] && q3[0] <= Math.max(p1[0], p22[0]) && Math.min(p1[1], p22[1]) <= q3[1] && q3[1] <= Math.max(p1[1], p22[1])) { - return true; - } - return false; -} -var isPointInPolygon = function isPointInPolygon2(points, x6, y5) { - var isHit = false; - var n3 = points.length; - var tolerance3 = 1e-6; - function dcmp3(xValue) { - if (Math.abs(xValue) < tolerance3) { - return 0; - } - return xValue < 0 ? -1 : 1; - } - if (n3 <= 2) { - return false; - } - for (var i4 = 0; i4 < n3; i4++) { - var p1 = points[i4]; - var p22 = points[(i4 + 1) % n3]; - if (onSegment3(p1, p22, [x6, y5])) { - return true; - } - if (dcmp3(p1[1] - y5) > 0 !== dcmp3(p22[1] - y5) > 0 && dcmp3(x6 - (y5 - p1[1]) * (p1[0] - p22[0]) / (p1[1] - p22[1]) - p1[0]) < 0) { - isHit = !isHit; - } - } - return isHit; -}; -var intersectBBox3 = function intersectBBox4(box1, box2) { - return !(box2.minX > box1.maxX || box2.maxX < box1.minX || box2.minY > box1.maxY || box2.maxY < box1.minY); -}; -var lineIntersectPolygon2 = function lineIntersectPolygon3(lines, line2) { - var isIntersect2 = false; - (0, import_util487.each)(lines, function(l4) { - if (getLineIntersect2(l4.from, l4.to, line2.from, line2.to)) { - isIntersect2 = true; - return false; - } - }); - return isIntersect2; -}; -var isPolygonsIntersect2 = function isPolygonsIntersect3(points1, points2) { - var getBBox5 = function getBBox6(points) { - var xArr = points.map(function(p4) { - return p4[0]; - }); - var yArr = points.map(function(p4) { - return p4[1]; - }); - return { - minX: Math.min.apply(null, xArr), - maxX: Math.max.apply(null, xArr), - minY: Math.min.apply(null, yArr), - maxY: Math.max.apply(null, yArr) - }; - }; - var parseToLines2 = function parseToLines3(points) { - var lines = []; - var count2 = points.length; - for (var i4 = 0; i4 < count2 - 1; i4++) { - var point2 = points[i4]; - var next = points[i4 + 1]; - lines.push({ - from: { - x: point2[0], - y: point2[1] - }, - to: { - x: next[0], - y: next[1] - } - }); - } - if (lines.length > 1) { - var first = points[0]; - var last17 = points[count2 - 1]; - lines.push({ - from: { - x: last17[0], - y: last17[1] - }, - to: { - x: first[0], - y: first[1] - } - }); - } - return lines; - }; - if (points1.length < 2 || points2.length < 2) { - return false; - } - var bbox1 = getBBox5(points1); - var bbox2 = getBBox5(points2); - if (!intersectBBox3(bbox1, bbox2)) { - return false; - } - var isIn = false; - (0, import_util487.each)(points2, function(point2) { - if (isPointInPolygon(points1, point2[0], point2[1])) { - isIn = true; - return false; - } - }); - if (isIn) { - return true; - } - (0, import_util487.each)(points1, function(point2) { - if (isPointInPolygon(points2, point2[0], point2[1])) { - isIn = true; - return false; - } - }); - if (isIn) { - return true; - } - var lines1 = parseToLines2(points1); - var lines2 = parseToLines2(points2); - var isIntersect2 = false; - (0, import_util487.each)(lines2, function(line2) { - if (lineIntersectPolygon2(lines1, line2)) { - isIntersect2 = true; - return false; - } - }); - return isIntersect2; -}; -var Line7 = function() { - function Line9(x1, y1, x22, y22) { - this.x1 = x1; - this.y1 = y1; - this.x2 = x22; - this.y2 = y22; - } - Line9.prototype.getBBox = function() { - var minX = Math.min(this.x1, this.x2); - var minY = Math.min(this.y1, this.y2); - var maxX = Math.max(this.x1, this.x2); - var maxY2 = Math.max(this.y1, this.y2); - var res = { - x: minX, - y: minY, - minX, - minY, - maxX, - maxY: maxY2, - width: maxX - minX, - height: maxY2 - minY - }; - return res; - }; - return Line9; -}(); -var getBBoxBoundLine = function getBBoxBoundLine2(bbox, direction3) { - var bounds = { - top: [bbox.minX, bbox.minY, bbox.maxX, bbox.minY], - left: [bbox.minX, bbox.minY, bbox.minX, bbox.maxY], - bottom: [bbox.minX, bbox.maxY, bbox.maxX, bbox.maxY], - right: [bbox.maxX, bbox.minY, bbox.maxX, bbox.maxY] - }; - return bounds[direction3]; -}; -var fractionAlongLineA = function fractionAlongLineA2(la, lb) { - var uaT = (lb.x2 - lb.x1) * (la.y1 - lb.y1) - (lb.y2 - lb.y1) * (la.x1 - lb.x1); - var ubT = (la.x2 - la.x1) * (la.y1 - lb.y1) - (la.y2 - la.y1) * (la.x1 - lb.x1); - var uB = (lb.y2 - lb.y1) * (la.x2 - la.x1) - (lb.x2 - lb.x1) * (la.y2 - la.y1); - if (uB) { - var ua = uaT / uB; - var ub = ubT / uB; - if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) { - return ua; - } - } - return Number.POSITIVE_INFINITY; -}; -var itemIntersectByLine = function itemIntersectByLine2(item, line2) { - var directions = ["top", "left", "bottom", "right"]; - var bbox = item.getBBox(); - var countIntersections = 0; - var intersections = []; - for (var i4 = 0; i4 < 4; i4++) { - var _a6 = getBBoxBoundLine(bbox, directions[i4]), x1 = _a6[0], y1 = _a6[1], x22 = _a6[2], y22 = _a6[3]; - intersections[i4] = getLineIntersect2({ - x: line2.x1, - y: line2.y1 - }, { - x: line2.x2, - y: line2.y2 - }, { - x: x1, - y: y1 - }, { - x: x22, - y: y22 - }); - if (intersections[i4]) { - countIntersections += 1; - } - } - return [intersections, countIntersections]; -}; -var fractionToLine = function fractionToLine2(item, line2) { - var directions = ["top", "left", "bottom", "right"]; - var bbox = item.getBBox(); - var minDistance = Number.POSITIVE_INFINITY; - var countIntersections = 0; - for (var i4 = 0; i4 < 4; i4++) { - var _a6 = getBBoxBoundLine(bbox, directions[i4]), x1 = _a6[0], y1 = _a6[1], x22 = _a6[2], y22 = _a6[3]; - var testDistance = fractionAlongLineA(line2, new Line7(x1, y1, x22, y22)); - testDistance = Math.abs(testDistance - 0.5); - if (testDistance >= 0 && testDistance <= 1) { - countIntersections += 1; - minDistance = testDistance < minDistance ? testDistance : minDistance; - } - } - if (countIntersections === 0) - return -1; - return minDistance; -}; -var getPointsCenter = function getPointsCenter2(points) { - var centerX = 0; - var centerY = 0; - if (points.length > 0) { - for (var _i = 0, points_1 = points; _i < points_1.length; _i++) { - var point2 = points_1[_i]; - centerX += point2.x; - centerY += point2.y; - } - centerX /= points.length; - centerY /= points.length; - } - return { - x: centerX, - y: centerY - }; -}; -var squareDist = function squareDist2(a4, b10) { - return Math.pow(a4.x - b10.x, 2) + Math.pow(a4.y - b10.y, 2); -}; -var pointLineSquareDist = function pointLineSquareDist2(point2, line2) { - var x1 = line2.x1; - var y1 = line2.y1; - var x22 = line2.x2 - x1; - var y22 = line2.y2 - y1; - var px = point2.x - x1; - var py = point2.y - y1; - var dotprod = px * x22 + py * y22; - var projlenSq; - if (dotprod <= 0) { - projlenSq = 0; - } else { - px = x22 - px; - py = y22 - py; - dotprod = px * x22 + py * y22; - if (dotprod <= 0) { - projlenSq = 0; - } else { - projlenSq = dotprod * dotprod / (x22 * x22 + y22 * y22); - } - } - var lenSq = px * px + py * py - projlenSq; - if (lenSq < 0) { - lenSq = 0; - } - return lenSq; -}; -var isPointsOverlap = function isPointsOverlap2(p1, p22, e4) { - if (e4 === void 0) { - e4 = 1e-3; - } - return Math.pow(p1.x - p22.x, 2) + Math.pow(p1.y - p22.y, 2) < Math.pow(e4, 2); -}; -var pointRectSquareDist = function pointRectSquareDist2(point2, rect3) { - var isLeft = point2.x < rect3.x; - var isRight = point2.x > rect3.x + rect3.width; - var isTop = point2.y > rect3.y + rect3.height; - var isBottom = point2.y < rect3.y; - var isPointOutside = isLeft || isRight || isTop || isBottom; - if (!isPointOutside) { - return 0; - } - if (isTop && !isLeft && !isRight) { - return Math.pow(rect3.y + rect3.height - point2.y, 2); - } - if (isBottom && !isLeft && !isRight) { - return Math.pow(point2.y - rect3.y, 2); - } - if (isLeft && !isTop && !isBottom) { - return Math.pow(rect3.x - point2.x, 2); - } - if (isRight && !isTop && !isBottom) { - return Math.pow(rect3.x + rect3.width - point2.x, 2); - } - var dx = Math.min(Math.abs(rect3.x - point2.x), Math.abs(rect3.x + rect3.width - point2.x)); - var dy = Math.min(Math.abs(rect3.y - point2.y), Math.abs(rect3.y + rect3.height - point2.y)); - return dx * dx + dy * dy; -}; -var pointLineDistance = function pointLineDistance2(line2, point2) { - var x1 = line2[0], y1 = line2[1], x22 = line2[2], y22 = line2[3]; - var x6 = point2.x, y5 = point2.y; - var d3 = [x22 - x1, y22 - y1]; - if (vec2_exports.exactEquals(d3, [0, 0])) { - return NaN; - } - var u3 = [-d3[1], d3[0]]; - vec2_exports.normalize(u3, u3); - var a4 = [x6 - x1, y5 - y1]; - return Math.abs(vec2_exports.dot(a4, u3)); -}; -var lerp6 = function lerp7(start, end2, alpha) { - return start + (end2 - start) * alpha; -}; - -// node_modules/@antv/g6-core/es/util/validation.js -var import_util489 = __toModule(require_lib()); - -// node_modules/@antv/g6-core/es/util/graphic.js -var graphic_exports = {}; -__export(graphic_exports, { - cloneBesidesImg: () => cloneBesidesImg, - getBBox: () => getBBox2, - getComboBBox: () => getComboBBox, - getLabelPosition: () => getLabelPosition, - getLetterWidth: () => getLetterWidth, - getLoopCfgs: () => getLoopCfgs, - getTextSize: () => getTextSize, - plainCombosToTrees: () => plainCombosToTrees, - reconstructTree: () => reconstructTree, - shouldRefreshEdge: () => shouldRefreshEdge, - traverseTree: () => traverseTree, - traverseTreeUp: () => traverseTreeUp -}); - -// node_modules/@antv/g6-core/es/global.js -var subjectColor = "rgb(95, 149, 255)"; -var backColor = "rgb(255, 255, 255)"; -var textColor = "rgb(0, 0, 0)"; -var activeFill = "rgb(247, 250, 255)"; -var nodeMainFill = "rgb(239, 244, 255)"; -var comboFill = "rgb(253, 253, 253)"; -var disabledFill = "rgb(250, 250, 250)"; -var edgeMainStroke = "rgb(224, 224, 224)"; -var edgeInactiveStroke = "rgb(234, 234, 234)"; -var edgeDisablesStroke = "rgb(245, 245, 245)"; -var inactiveStroke = "rgb(191, 213, 255)"; -var highlightStroke = "#4572d9"; -var highlightFill = "rgb(223, 234, 255)"; -var colorSet = { - mainStroke: subjectColor, - mainFill: nodeMainFill, - activeStroke: subjectColor, - activeFill, - inactiveStroke, - inactiveFill: activeFill, - selectedStroke: subjectColor, - selectedFill: backColor, - highlightStroke, - highlightFill, - disableStroke: edgeMainStroke, - disableFill: disabledFill, - edgeMainStroke, - edgeActiveStroke: subjectColor, - edgeInactiveStroke, - edgeSelectedStroke: subjectColor, - edgeHighlightStroke: subjectColor, - edgeDisableStroke: edgeDisablesStroke, - comboMainStroke: edgeMainStroke, - comboMainFill: comboFill, - comboActiveStroke: subjectColor, - comboActiveFill: activeFill, - comboInactiveStroke: edgeMainStroke, - comboInactiveFill: comboFill, - comboSelectedStroke: subjectColor, - comboSelectedFill: comboFill, - comboHighlightStroke: highlightStroke, - comboHighlightFill: comboFill, - comboDisableStroke: edgeInactiveStroke, - comboDisableFill: disabledFill -}; -var global_default = { - version: "0.5.3", - rootContainerClassName: "root-container", - nodeContainerClassName: "node-container", - edgeContainerClassName: "edge-container", - comboContainerClassName: "combo-container", - delegateContainerClassName: "delegate-container", - defaultLoopPosition: "top", - nodeLabel: { - style: { - fill: "#000", - fontSize: 12, - textAlign: "center", - textBaseline: "middle" - }, - offset: 4 - }, - defaultNode: { - type: "circle", - style: { - lineWidth: 1, - stroke: colorSet.mainStroke, - fill: nodeMainFill - }, - size: 20, - color: colorSet.mainStroke, - linkPoints: { - size: 8, - lineWidth: 1, - fill: colorSet.activeFill, - stroke: colorSet.activeStroke - } - }, - nodeStateStyles: { - active: { - fill: colorSet.activeFill, - stroke: colorSet.activeStroke, - lineWidth: 2, - shadowColor: colorSet.mainStroke, - shadowBlur: 10 - }, - selected: { - fill: colorSet.selectedFill, - stroke: colorSet.selectedStroke, - lineWidth: 4, - shadowColor: colorSet.selectedStroke, - shadowBlur: 10, - "text-shape": { - fontWeight: 500 - } - }, - highlight: { - fill: colorSet.highlightFill, - stroke: colorSet.highlightStroke, - lineWidth: 2, - "text-shape": { - fontWeight: 500 - } - }, - inactive: { - fill: colorSet.inactiveFill, - stroke: colorSet.inactiveStroke, - lineWidth: 1 - }, - disable: { - fill: colorSet.disableFill, - stroke: colorSet.disableStroke, - lineWidth: 1 - } - }, - edgeLabel: { - style: { - fill: textColor, - textAlign: "center", - textBaseline: "middle", - fontSize: 12 - } - }, - defaultEdge: { - type: "line", - size: 1, - style: { - stroke: colorSet.edgeMainStroke, - lineAppendWidth: 2 - }, - color: colorSet.edgeMainStroke - }, - edgeStateStyles: { - active: { - stroke: colorSet.edgeActiveStroke, - lineWidth: 1 - }, - selected: { - stroke: colorSet.edgeSelectedStroke, - lineWidth: 2, - shadowColor: colorSet.edgeSelectedStroke, - shadowBlur: 10, - "text-shape": { - fontWeight: 500 - } - }, - highlight: { - stroke: colorSet.edgeHighlightStroke, - lineWidth: 2, - "text-shape": { - fontWeight: 500 - } - }, - inactive: { - stroke: colorSet.edgeInactiveStroke, - lineWidth: 1 - }, - disable: { - stroke: colorSet.edgeDisableStroke, - lineWidth: 1 - } - }, - comboLabel: { - style: { - fill: textColor, - textBaseline: "middle", - fontSize: 12 - }, - refY: 10, - refX: 10 - }, - defaultCombo: { - type: "circle", - style: { - fill: colorSet.comboMainFill, - lineWidth: 1, - stroke: colorSet.comboMainStroke, - r: 5, - width: 20, - height: 10 - }, - size: [20, 5], - color: colorSet.comboMainStroke, - padding: [25, 20, 15, 20] - }, - comboStateStyles: { - active: { - stroke: colorSet.comboActiveStroke, - lineWidth: 1, - fill: colorSet.comboActiveFill - }, - selected: { - stroke: colorSet.comboSelectedStroke, - lineWidth: 2, - fill: colorSet.comboSelectedFill, - shadowColor: colorSet.comboSelectedStroke, - shadowBlur: 10, - "text-shape": { - fontWeight: 500 - } - }, - highlight: { - stroke: colorSet.comboHighlightStroke, - lineWidth: 2, - fill: colorSet.comboHighlightFill, - "text-shape": { - fontWeight: 500 - } - }, - inactive: { - stroke: colorSet.comboInactiveStroke, - fill: colorSet.comboInactiveFill, - lineWidth: 1 - }, - disable: { - stroke: colorSet.comboDisableStroke, - fill: colorSet.comboDisableFill, - lineWidth: 1 - } - }, - delegateStyle: { - fill: "#F3F9FF", - fillOpacity: 0.5, - stroke: "#1890FF", - strokeOpacity: 0.9, - lineDash: [5, 5] - }, - windowFontFamily: typeof window !== "undefined" && window.getComputedStyle && document.body ? window.getComputedStyle(document.body, null).getPropertyValue("font-family") || "Arial, sans-serif" : "Arial, sans-serif" -}; - -// node_modules/@antv/g6-core/es/util/letterAspectRatio.js -var letterAspectRatio_default = { - " ": 0.3329986572265625, - a: 0.5589996337890625, - A: 0.6569992065429687, - b: 0.58599853515625, - B: 0.6769989013671875, - c: 0.5469985961914062, - C: 0.7279998779296875, - d: 0.58599853515625, - D: 0.705999755859375, - e: 0.554998779296875, - E: 0.63699951171875, - f: 0.37299957275390627, - F: 0.5769989013671875, - g: 0.5909988403320312, - G: 0.7479995727539063, - h: 0.555999755859375, - H: 0.7199996948242188, - i: 0.255999755859375, - I: 0.23699951171875, - j: 0.26699981689453123, - J: 0.5169998168945312, - k: 0.5289993286132812, - K: 0.6899993896484375, - l: 0.23499908447265624, - L: 0.5879989624023437, - m: 0.854998779296875, - M: 0.8819992065429687, - n: 0.5589996337890625, - N: 0.7189987182617188, - o: 0.58599853515625, - O: 0.7669998168945312, - p: 0.58599853515625, - P: 0.6419998168945312, - q: 0.58599853515625, - Q: 0.7669998168945312, - r: 0.3649993896484375, - R: 0.6759994506835938, - s: 0.504998779296875, - S: 0.6319992065429687, - t: 0.354998779296875, - T: 0.6189987182617187, - u: 0.5599990844726562, - U: 0.7139999389648437, - v: 0.48199920654296874, - V: 0.6389999389648438, - w: 0.754998779296875, - W: 0.929998779296875, - x: 0.5089996337890625, - X: 0.63699951171875, - y: 0.4959991455078125, - Y: 0.66199951171875, - z: 0.48699951171875, - Z: 0.6239990234375, - "0": 0.6, - "1": 0.40099945068359377, - "2": 0.6, - "3": 0.6, - "4": 0.6, - "5": 0.6, - "6": 0.6, - "7": 0.5469985961914062, - "8": 0.6, - "9": 0.6, - "[": 0.3329986572265625, - "]": 0.3329986572265625, - ",": 0.26399993896484375, - ".": 0.26399993896484375, - ";": 0.26399993896484375, - ":": 0.26399993896484375, - "{": 0.3329986572265625, - "}": 0.3329986572265625, - "\\": 0.5, - "|": 0.19499969482421875, - "=": 0.604998779296875, - "+": 0.604998779296875, - "-": 0.604998779296875, - _: 0.5, - "`": 0.3329986572265625, - " ~": 0.8329986572265625, - "!": 0.3329986572265625, - "@": 0.8579986572265625, - "#": 0.6, - $: 0.6, - "%": 0.9699996948242188, - "^": 0.517999267578125, - "&": 0.7259994506835937, - "*": 0.505999755859375, - "(": 0.3329986572265625, - ")": 0.3329986572265625, - "<": 0.604998779296875, - ">": 0.604998779296875, - "/": 0.5, - "?": 0.53699951171875 -}; - -// node_modules/@antv/g6-core/es/util/graphic.js -var import_util488 = __toModule(require_lib()); -var PI2 = Math.PI; -var sin2 = Math.sin; -var cos2 = Math.cos; -var SELF_LINK_SIN = sin2(PI2 / 8); -var SELF_LINK_COS = cos2(PI2 / 8); -var getBBox2 = function getBBox3(element, group3) { - var bbox = element.getBBox(); - var leftTop = { - x: bbox.minX, - y: bbox.minY - }; - var rightBottom = { - x: bbox.maxX, - y: bbox.maxY - }; - if (group3) { - var matrix = group3.getMatrix(); - if (!matrix) { - matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - leftTop = applyMatrix(leftTop, matrix); - rightBottom = applyMatrix(rightBottom, matrix); - } - var lx = leftTop.x, ly = leftTop.y; - var rx = rightBottom.x, ry = rightBottom.y; - return { - x: lx, - y: ly, - minX: lx, - minY: ly, - maxX: rx, - maxY: ry, - width: rx - lx, - height: ry - ly - }; -}; -var getLoopCfgs = function getLoopCfgs2(cfg) { - var item = cfg.sourceNode || cfg.targetNode; - var container2 = item.get("group"); - var containerMatrix = container2.getMatrix(); - if (!containerMatrix) - containerMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - var keyShape = item.getKeyShape(); - var bbox = keyShape.getBBox(); - var loopCfg = cfg.loopCfg || {}; - var dist4 = loopCfg.dist || Math.max(bbox.width, bbox.height) * 2; - var position2 = loopCfg.position || global_default.defaultLoopPosition; - var center2 = [containerMatrix[6], containerMatrix[7]]; - var startPoint = [cfg.startPoint.x, cfg.startPoint.y]; - var endPoint = [cfg.endPoint.x, cfg.endPoint.y]; - var rstart = bbox.height / 2; - var rend = bbox.height / 2; - var sinDeltaStart = rstart * SELF_LINK_SIN; - var cosDeltaStart = rstart * SELF_LINK_COS; - var sinDeltaEnd = rend * SELF_LINK_SIN; - var cosDeltaEnd = rend * SELF_LINK_COS; - if (startPoint[0] === endPoint[0] && startPoint[1] === endPoint[1]) { - switch (position2) { - case "top": - startPoint = [center2[0] - sinDeltaStart, center2[1] - cosDeltaStart]; - endPoint = [center2[0] + sinDeltaEnd, center2[1] - cosDeltaEnd]; - break; - case "top-right": - rstart = bbox.height / 2; - rend = bbox.width / 2; - sinDeltaStart = rstart * SELF_LINK_SIN; - cosDeltaStart = rstart * SELF_LINK_COS; - sinDeltaEnd = rend * SELF_LINK_SIN; - cosDeltaEnd = rend * SELF_LINK_COS; - startPoint = [center2[0] + sinDeltaStart, center2[1] - cosDeltaStart]; - endPoint = [center2[0] + cosDeltaEnd, center2[1] - sinDeltaEnd]; - break; - case "right": - rstart = bbox.width / 2; - rend = bbox.width / 2; - sinDeltaStart = rstart * SELF_LINK_SIN; - cosDeltaStart = rstart * SELF_LINK_COS; - sinDeltaEnd = rend * SELF_LINK_SIN; - cosDeltaEnd = rend * SELF_LINK_COS; - startPoint = [center2[0] + cosDeltaStart, center2[1] - sinDeltaStart]; - endPoint = [center2[0] + cosDeltaEnd, center2[1] + sinDeltaEnd]; - break; - case "bottom-right": - rstart = bbox.width / 2; - rend = bbox.height / 2; - sinDeltaStart = rstart * SELF_LINK_SIN; - cosDeltaStart = rstart * SELF_LINK_COS; - sinDeltaEnd = rend * SELF_LINK_SIN; - cosDeltaEnd = rend * SELF_LINK_COS; - startPoint = [center2[0] + cosDeltaStart, center2[1] + sinDeltaStart]; - endPoint = [center2[0] + sinDeltaEnd, center2[1] + cosDeltaEnd]; - break; - case "bottom": - rstart = bbox.height / 2; - rend = bbox.height / 2; - sinDeltaStart = rstart * SELF_LINK_SIN; - cosDeltaStart = rstart * SELF_LINK_COS; - sinDeltaEnd = rend * SELF_LINK_SIN; - cosDeltaEnd = rend * SELF_LINK_COS; - startPoint = [center2[0] + sinDeltaStart, center2[1] + cosDeltaStart]; - endPoint = [center2[0] - sinDeltaEnd, center2[1] + cosDeltaEnd]; - break; - case "bottom-left": - rstart = bbox.height / 2; - rend = bbox.width / 2; - sinDeltaStart = rstart * SELF_LINK_SIN; - cosDeltaStart = rstart * SELF_LINK_COS; - sinDeltaEnd = rend * SELF_LINK_SIN; - cosDeltaEnd = rend * SELF_LINK_COS; - startPoint = [center2[0] - sinDeltaStart, center2[1] + cosDeltaStart]; - endPoint = [center2[0] - cosDeltaEnd, center2[1] + sinDeltaEnd]; - break; - case "left": - rstart = bbox.width / 2; - rend = bbox.width / 2; - sinDeltaStart = rstart * SELF_LINK_SIN; - cosDeltaStart = rstart * SELF_LINK_COS; - sinDeltaEnd = rend * SELF_LINK_SIN; - cosDeltaEnd = rend * SELF_LINK_COS; - startPoint = [center2[0] - cosDeltaStart, center2[1] + sinDeltaStart]; - endPoint = [center2[0] - cosDeltaEnd, center2[1] - sinDeltaEnd]; - break; - case "top-left": - rstart = bbox.width / 2; - rend = bbox.height / 2; - sinDeltaStart = rstart * SELF_LINK_SIN; - cosDeltaStart = rstart * SELF_LINK_COS; - sinDeltaEnd = rend * SELF_LINK_SIN; - cosDeltaEnd = rend * SELF_LINK_COS; - startPoint = [center2[0] - cosDeltaStart, center2[1] - sinDeltaStart]; - endPoint = [center2[0] - sinDeltaEnd, center2[1] - cosDeltaEnd]; - break; - default: - rstart = bbox.width / 2; - rend = bbox.width / 2; - sinDeltaStart = rstart * SELF_LINK_SIN; - cosDeltaStart = rstart * SELF_LINK_COS; - sinDeltaEnd = rend * SELF_LINK_SIN; - cosDeltaEnd = rend * SELF_LINK_COS; - startPoint = [center2[0] - sinDeltaStart, center2[1] - cosDeltaStart]; - endPoint = [center2[0] + sinDeltaEnd, center2[1] - cosDeltaEnd]; - } - if (loopCfg.clockwise === false) { - var swap3 = [startPoint[0], startPoint[1]]; - startPoint = [endPoint[0], endPoint[1]]; - endPoint = [swap3[0], swap3[1]]; - } - } - var startVec = [startPoint[0] - center2[0], startPoint[1] - center2[1]]; - var scaleRateStart = (rstart + dist4) / rstart; - var scaleRateEnd = (rend + dist4) / rend; - if (loopCfg.clockwise === false) { - scaleRateStart = (rend + dist4) / rend; - scaleRateEnd = (rstart + dist4) / rstart; - } - var startExtendVec = vec2_exports.scale([0, 0], startVec, scaleRateStart); - var controlPoint1 = [center2[0] + startExtendVec[0], center2[1] + startExtendVec[1]]; - var endVec = [endPoint[0] - center2[0], endPoint[1] - center2[1]]; - var endExtendVec = vec2_exports.scale([0, 0], endVec, scaleRateEnd); - var controlPoint2 = [center2[0] + endExtendVec[0], center2[1] + endExtendVec[1]]; - cfg.startPoint = { - x: startPoint[0], - y: startPoint[1] - }; - cfg.endPoint = { - x: endPoint[0], - y: endPoint[1] - }; - cfg.controlPoints = [{ - x: controlPoint1[0], - y: controlPoint1[1] - }, { - x: controlPoint2[0], - y: controlPoint2[1] - }]; - return cfg; -}; -var getLabelPosition = function getLabelPosition2(pathShape, percent2, refX, refY, rotate8) { - var TAN_OFFSET = 1e-4; - var vector = []; - var point2 = pathShape === null || pathShape === void 0 ? void 0 : pathShape.getPoint(percent2); - if (!point2) { - return { - x: 0, - y: 0, - angle: 0 - }; - } - if (percent2 < TAN_OFFSET) { - vector = pathShape.getStartTangent().reverse(); - } else if (percent2 > 1 - TAN_OFFSET) { - vector = pathShape.getEndTangent(); - } else { - var offsetPoint = pathShape === null || pathShape === void 0 ? void 0 : pathShape.getPoint(percent2 + TAN_OFFSET); - vector.push([point2.x, point2.y]); - vector.push([offsetPoint.x, offsetPoint.y]); - } - var rad = Math.atan2(vector[1][1] - vector[0][1], vector[1][0] - vector[0][0]); - if (rad < 0) { - rad += PI2 * 2; - } - if (refX) { - point2.x += cos2(rad) * refX; - point2.y += sin2(rad) * refX; - } - if (refY) { - var normal2 = rad - PI2 / 2; - if (rad > 1 / 2 * PI2 && rad < 3 * 1 / 2 * PI2) { - normal2 -= PI2; - } - point2.x += cos2(normal2) * refY; - point2.y += sin2(normal2) * refY; - } - var result = { - x: point2.x, - y: point2.y, - angle: rad - }; - if (rotate8) { - if (rad > 0.5 * PI2 && rad < 1.5 * PI2) { - rad -= PI2; - } - return __assign({ - rotate: rad - }, result); - } - return result; -}; -var traverse = function traverse2(data3, fn) { - if (fn(data3) === false) { - return false; - } - if (data3 && data3.children) { - for (var i4 = data3.children.length - 1; i4 >= 0; i4--) { - if (!traverse2(data3.children[i4], fn)) - return false; - } - } - return true; -}; -var traverseUp = function traverseUp2(data3, fn) { - if (data3 && data3.children) { - for (var i4 = data3.children.length - 1; i4 >= 0; i4--) { - if (!traverseUp2(data3.children[i4], fn)) - return; - } - } - if (fn(data3) === false) { - return false; - } - return true; -}; -var traverseTree = function traverseTree2(data3, fn) { - if (typeof fn !== "function") { - return; - } - traverse(data3, fn); -}; -var traverseTreeUp = function traverseTreeUp2(data3, fn) { - if (typeof fn !== "function") { - return; - } - traverseUp(data3, fn); -}; -var getLetterWidth = function getLetterWidth2(letter, fontSize) { - return fontSize * (letterAspectRatio_default[letter] || 1); -}; -var getTextSize = function getTextSize2(text, fontSize) { - var width2 = 0; - var pattern2 = new RegExp("[\u4E00-\u9FA5]+"); - text.split("").forEach(function(letter) { - if (pattern2.test(letter)) { - width2 += fontSize; - } else { - width2 += getLetterWidth(letter, fontSize); - } - }); - return [width2, fontSize]; -}; -var plainCombosToTrees = function plainCombosToTrees2(array, nodes) { - var result = []; - var addedMap = {}; - var modelMap = {}; - array.forEach(function(d3) { - modelMap[d3.id] = d3; - }); - array.forEach(function(d3, i4) { - var cd = (0, import_util488.clone)(d3); - cd.itemType = "combo"; - cd.children = void 0; - if (cd.parentId === cd.id) { - console.warn("The parentId for combo ".concat(cd.id, " can not be the same as the combo's id")); - delete cd.parentId; - } else if (cd.parentId && !modelMap[cd.parentId]) { - console.warn("The parent combo for combo ".concat(cd.id, " does not exist!")); - delete cd.parentId; - } - var mappedObj = addedMap[cd.id]; - if (mappedObj) { - cd.children = mappedObj.children; - addedMap[cd.id] = cd; - mappedObj = cd; - if (!mappedObj.parentId) { - result.push(mappedObj); - return; - } - var mappedParent = addedMap[mappedObj.parentId]; - if (mappedParent) { - if (mappedParent.children) - mappedParent.children.push(cd); - else - mappedParent.children = [cd]; - } else { - var parent_1 = { - id: mappedObj.parentId, - children: [mappedObj] - }; - addedMap[mappedObj.parentId] = parent_1; - addedMap[cd.id] = cd; - } - return; - } - if ((0, import_util488.isString)(d3.parentId)) { - var parent_2 = addedMap[d3.parentId]; - if (parent_2) { - if (parent_2.children) - parent_2.children.push(cd); - else - parent_2.children = [cd]; - addedMap[cd.id] = cd; - } else { - var pa = { - id: d3.parentId, - children: [cd] - }; - addedMap[pa.id] = pa; - addedMap[cd.id] = cd; - } - } else { - result.push(cd); - addedMap[cd.id] = cd; - } - }); - var nodeMap = {}; - (nodes || []).forEach(function(node) { - nodeMap[node.id] = node; - var combo = addedMap[node.comboId]; - if (combo) { - var cnode = { - id: node.id, - comboId: node.comboId - }; - if (combo.children) - combo.children.push(cnode); - else - combo.children = [cnode]; - cnode.itemType = "node"; - addedMap[node.id] = cnode; - } - }); - var maxDepth = 0; - result.forEach(function(tree) { - tree.depth = maxDepth + 10; - traverse(tree, function(child) { - var parent; - var itemType = addedMap[child.id].itemType; - if (itemType === "node") { - parent = addedMap[child.comboId]; - } else { - parent = addedMap[child.parentId]; - } - if (parent) { - if (itemType === "node") - child.depth = maxDepth + 1; - else - child.depth = maxDepth + 10; - } else { - child.depth = maxDepth + 10; - } - if (maxDepth < child.depth) - maxDepth = child.depth; - var oriNodeModel = nodeMap[child.id]; - if (oriNodeModel) { - oriNodeModel.depth = child.depth; - } - return true; - }); - }); - return result; -}; -var reconstructTree = function reconstructTree2(trees, subtreeId, newParentId) { - var brothers = trees; - var subtree; - var comboChildsMap = { - root: { - children: trees - } - }; - var foundSubTree = false; - var oldParentId = "root"; - (trees || []).forEach(function(tree) { - if (foundSubTree) - return; - if (tree.id === subtreeId) { - subtree = tree; - if (tree.itemType === "combo") { - subtree.parentId = newParentId; - } else { - subtree.comboId = newParentId; - } - foundSubTree = true; - return; - } - traverseTree(tree, function(child) { - comboChildsMap[child.id] = { - children: child.children - }; - brothers = comboChildsMap[child.parentId || child.comboId || "root"].children; - if (child && (child.removed || subtreeId === child.id) && brothers) { - oldParentId = child.parentId || child.comboId || "root"; - subtree = child; - if (child.itemType === "combo") { - subtree.parentId = newParentId; - } else { - subtree.comboId = newParentId; - } - foundSubTree = true; - return false; - } - return true; - }); - }); - brothers = comboChildsMap[oldParentId].children; - var index2 = brothers ? brothers.indexOf(subtree) : -1; - if (index2 > -1) - brothers.splice(index2, 1); - if (!foundSubTree) { - subtree = { - id: subtreeId, - itemType: "node", - comboId: newParentId - }; - comboChildsMap[subtreeId] = { - children: void 0 - }; - } - if (subtreeId) { - var found_1 = false; - if (newParentId) { - var newParentDepth_1 = 0; - (trees || []).forEach(function(tree) { - if (found_1) - return; - traverseTree(tree, function(child) { - if (newParentId === child.id) { - found_1 = true; - if (child.children) - child.children.push(subtree); - else - child.children = [subtree]; - newParentDepth_1 = child.depth; - if (subtree.itemType === "node") - subtree.depth = newParentDepth_1 + 2; - else - subtree.depth = newParentDepth_1 + 1; - return false; - } - return true; - }); - }); - } else if ((!newParentId || !found_1) && subtree.itemType !== "node") { - trees.push(subtree); - } - var currentDepth_1 = subtree.depth; - traverseTree(subtree, function(child) { - if (child.itemType === "node") - currentDepth_1 += 2; - else - currentDepth_1 += 1; - child.depth = currentDepth_1; - return true; - }); - } - return trees; -}; -var getComboBBox = function getComboBBox2(children, graph, combo) { - var comboBBox = { - minX: Infinity, - minY: Infinity, - maxX: -Infinity, - maxY: -Infinity, - x: void 0, - y: void 0, - width: void 0, - height: void 0, - centerX: void 0, - centerY: void 0 - }; - if (!children || children.length === 0) { - var comboModel = combo === null || combo === void 0 ? void 0 : combo.getModel(); - var _a6 = comboModel || {}, x6 = _a6.x, y5 = _a6.y; - return { - minX: x6, - minY: y5, - maxX: x6, - maxY: y5, - x: x6, - y: y5, - width: void 0, - height: void 0 - }; - } - children.forEach(function(child) { - var childItem = graph.findById(child.id); - if (!childItem || !childItem.isVisible()) - return; - childItem.set("bboxCanvasCache", void 0); - var childBBox = childItem.getCanvasBBox(); - if (childBBox.x && comboBBox.minX > childBBox.minX) - comboBBox.minX = childBBox.minX; - if (childBBox.y && comboBBox.minY > childBBox.minY) - comboBBox.minY = childBBox.minY; - if (childBBox.x && comboBBox.maxX < childBBox.maxX) - comboBBox.maxX = childBBox.maxX; - if (childBBox.y && comboBBox.maxY < childBBox.maxY) - comboBBox.maxY = childBBox.maxY; - }); - comboBBox.x = (comboBBox.minX + comboBBox.maxX) / 2; - comboBBox.y = (comboBBox.minY + comboBBox.maxY) / 2; - comboBBox.width = comboBBox.maxX - comboBBox.minX; - comboBBox.height = comboBBox.maxY - comboBBox.minY; - comboBBox.centerX = (comboBBox.minX + comboBBox.maxX) / 2; - comboBBox.centerY = (comboBBox.minY + comboBBox.maxY) / 2; - Object.keys(comboBBox).forEach(function(key) { - if (comboBBox[key] === Infinity || comboBBox[key] === -Infinity) { - comboBBox[key] = void 0; - } - }); - return comboBBox; -}; -var shouldRefreshEdge = function shouldRefreshEdge2(cfg) { - var refreshEdge = (0, import_util488.isNumber)(cfg.x) || (0, import_util488.isNumber)(cfg.y) || cfg.type || cfg.anchorPoints || cfg.size; - if (cfg.style) - refreshEdge = refreshEdge || (0, import_util488.isNumber)(cfg.style.r) || (0, import_util488.isNumber)(cfg.style.width) || (0, import_util488.isNumber)(cfg.style.height) || (0, import_util488.isNumber)(cfg.style.rx) || (0, import_util488.isNumber)(cfg.style.ry); - return refreshEdge; -}; -var cloneBesidesImg = function cloneBesidesImg2(obj) { - var clonedObj = {}; - Object.keys(obj).forEach(function(key1) { - var obj2 = obj[key1]; - if ((0, import_util488.isObject)(obj2) && !(0, import_util488.isArray)(obj2)) { - var clonedObj2_1 = {}; - Object.keys(obj2).forEach(function(key2) { - var v3 = obj2[key2]; - if (key2 === "img" && !(0, import_util488.isString)(v3)) - return; - clonedObj2_1[key2] = (0, import_util488.clone)(v3); - }); - clonedObj[key1] = clonedObj2_1; - } else { - clonedObj[key1] = (0, import_util488.clone)(obj2); - } - }); - return clonedObj; -}; - -// node_modules/@antv/g6-core/es/util/validation.js -var dataValidation = function dataValidation2(data3) { - var _a6; - if (!data3) { - console.error("G6 Error Tips: the data must be defined"); - return false; - } - var nodes = data3.nodes, edges = data3.edges, _b = data3.combos, combos = _b === void 0 ? [] : _b; - if (!nodes && !edges) { - var validated_1 = true; - traverseTree(data3, function(param) { - if (!(0, import_util489.isString)(param.id)) { - validated_1 = false; - return false; - } - return true; - }); - return validated_1; - } - var nonNode = (nodes || []).find(function(node) { - return !(0, import_util489.isString)(node.id); - }); - if (nonNode) { - console.warn("G6 Warning Tips: missing 'id' property, or %c".concat(nonNode.id, "%c is not a string."), "font-size: 20px; color: red;", ""); - return false; - } - var nodeIds = (nodes || []).map(function(node) { - return node.id; - }); - var comboIds = (_a6 = combos) === null || _a6 === void 0 ? void 0 : _a6.map(function(combo) { - return combo.id; - }); - var ids = __spreadArray(__spreadArray([], nodeIds, true), comboIds, true); - var nonEdges = (edges || []).find(function(edge2) { - return !ids.includes(edge2.source) || !ids.includes(edge2.target); - }); - if (nonEdges) { - console.warn("G6 Warning Tips: The source %c".concat(nonEdges.source, "%c or the target %c").concat(nonEdges.target, "%c of the edge do not exist in the nodes or combos."), "font-size: 20px; color: red;", "", "font-size: 20px; color: red;", ""); - return false; - } - return true; -}; -var singleDataValidation = function singleDataValidation2(type2, data3) { - if (type2 === "node" || type2 === "combo") { - if (data3.id && !(0, import_util489.isString)(data3.id)) { - console.warn("G6 Warning Tips: missing 'id' property, or the 'id' %c".concat(data3.id, "%c is not a string."), "font-size: 20px; color: red;", ""); - return false; - } - } else if (type2 === "edge") { - if (!data3.source || !data3.target) { - console.warn("G6 Warning Tips: missing 'source' or 'target' for the edge."); - return false; - } - } - return true; -}; - -// node_modules/@antv/g6-core/es/graph/controller/mode.js -var import_util490 = __toModule(require_lib()); -var ModeController = function() { - function ModeController2(graph) { - this.graph = graph; - this.destroyed = false; - this.modes = graph.get("modes") || { - default: [] - }; - this.formatModes(); - this.mode = graph.get("defaultMode") || "default"; - this.currentBehaves = []; - this.setMode(this.mode); - } - ModeController2.prototype.formatModes = function() { - var modes = this.modes; - (0, import_util490.each)(modes, function(mode) { - (0, import_util490.each)(mode, function(behavior, i4) { - if ((0, import_util490.isString)(behavior)) { - mode[i4] = { - type: behavior - }; - } - }); - }); - }; - ModeController2.prototype.setBehaviors = function(mode) { - var graph = this.graph; - var behaviors2 = this.modes[mode]; - var behaves = []; - var behave; - (0, import_util490.each)(behaviors2 || [], function(behavior) { - var BehaviorInstance = behavior_default.getBehavior(behavior.type || behavior); - if (!BehaviorInstance) { - return; - } - behave = new BehaviorInstance(behavior); - if (behave) { - behave.bind(graph); - behaves.push(behave); - } - }); - this.currentBehaves = behaves; - }; - ModeController2.mergeBehaviors = function(modeBehaviors, behaviors2) { - (0, import_util490.each)(behaviors2, function(behavior) { - if (modeBehaviors.indexOf(behavior) < 0) { - if ((0, import_util490.isString)(behavior)) { - behavior = { - type: behavior - }; - } - modeBehaviors.push(behavior); - } - }); - return modeBehaviors; - }; - ModeController2.filterBehaviors = function(modeBehaviors, behaviors2) { - var result = []; - modeBehaviors.forEach(function(behavior) { - var type2 = ""; - if ((0, import_util490.isString)(behavior)) { - type2 = behavior; - } else { - type2 = behavior.type; - } - if (behaviors2.indexOf(type2) < 0) { - result.push(behavior); - } - }); - return result; - }; - ModeController2.prototype.setMode = function(mode) { - var _a6 = this, modes = _a6.modes, graph = _a6.graph; - var current = mode; - var behaviors2 = modes[current]; - if (!behaviors2) { - return; - } - graph.emit("beforemodechange", { - mode - }); - (0, import_util490.each)(this.currentBehaves, function(behave) { - if (behave.delegate) - behave.delegate.remove(); - behave.unbind(graph); - }); - this.setBehaviors(current); - graph.emit("aftermodechange", { - mode - }); - this.mode = mode; - }; - ModeController2.prototype.getMode = function() { - return this.mode; - }; - ModeController2.prototype.manipulateBehaviors = function(behaviors2, modes, isAdd) { - var _this = this; - var behaves; - if (!(0, import_util490.isArray)(behaviors2)) { - behaves = [behaviors2]; - } else { - behaves = behaviors2; - } - if ((0, import_util490.isArray)(modes)) { - (0, import_util490.each)(modes, function(mode) { - if (!_this.modes[mode]) { - if (isAdd) { - _this.modes[mode] = behaves; - } - } else if (isAdd) { - _this.modes[mode] = ModeController2.mergeBehaviors(_this.modes[mode] || [], behaves); - } else { - _this.modes[mode] = ModeController2.filterBehaviors(_this.modes[mode] || [], behaves); - } - }); - return this; - } - var currentMode = modes; - if (!modes) { - currentMode = this.mode; - } - if (!this.modes[currentMode]) { - if (isAdd) { - this.modes[currentMode] = behaves; - } - } - if (isAdd) { - this.modes[currentMode] = ModeController2.mergeBehaviors(this.modes[currentMode] || [], behaves); - } else { - this.modes[currentMode] = ModeController2.filterBehaviors(this.modes[currentMode] || [], behaves); - } - this.formatModes(); - this.setMode(this.mode); - return this; - }; - ModeController2.prototype.updateBehavior = function(behavior, newCfg, mode) { - if ((0, import_util490.isString)(behavior)) { - behavior = { - type: behavior - }; - } - var behaviorSet = []; - if (!mode || mode === this.mode || mode === "default") { - behaviorSet = this.currentBehaves; - if (!behaviorSet || !behaviorSet.length) { - console.warn("Update behavior failed! There is no behaviors in this mode on the graph."); - return this; - } - var length_1 = behaviorSet.length; - for (var i4 = 0; i4 < length_1; i4++) { - var behave = behaviorSet[i4]; - if (behave.type === behavior.type) { - behave.updateCfg(newCfg); - return this; - } - if (i4 === length_1 - 1) - console.warn("Update behavior failed! There is no such behavior in the mode"); - } - } else { - behaviorSet = this.modes[mode]; - if (!behaviorSet || !behaviorSet.length) { - console.warn("Update behavior failed! There is no behaviors in this mode on the graph."); - return this; - } - var length_2 = behaviorSet.length; - for (var i4 = 0; i4 < length_2; i4++) { - var behave = behaviorSet[i4]; - if (behave.type === behavior.type || behave === behavior.type) { - if (behave === behavior.type) - behave = { - type: behave - }; - Object.assign(behave, newCfg); - behaviorSet[i4] = behave; - return this; - } - if (i4 === length_2 - 1) - console.warn("Update behavior failed! There is no such behavior in the mode"); - } - } - return this; - }; - ModeController2.prototype.destroy = function() { - this.graph = null; - this.modes = null; - this.currentBehaves = null; - this.destroyed = true; - }; - return ModeController2; -}(); -var mode_default = ModeController; - -// node_modules/@antv/g6-core/es/graph/controller/view.js -var import_util492 = __toModule(require_lib()); - -// node_modules/@antv/g6-core/es/util/base.js -var base_exports = {}; -__export(base_exports, { - calculationItemsBBox: () => calculationItemsBBox, - cloneEvent: () => cloneEvent, - formatPadding: () => formatPadding2, - isNaN: () => isNaN2, - isViewportChanged: () => isViewportChanged, - processParallelEdges: () => processParallelEdges, - uniqueId: () => uniqueId11 -}); -var import_util491 = __toModule(require_lib()); - -// node_modules/@antv/g6-core/es/interface/behavior.js -var G6GraphEvent = function(_super) { - __extends(G6GraphEvent2, _super); - function G6GraphEvent2(type2, event) { - var _this = _super.call(this, type2, event) || this; - _this.item = event.item; - _this.canvasX = event.canvasX; - _this.canvasY = event.canvasY; - _this.wheelDelta = event.wheelDelta; - _this.detail = event.detail; - return _this; - } - return G6GraphEvent2; -}(graph_event_default); - -// node_modules/@antv/g6-core/es/util/base.js -var uniqueId11 = function uniqueId12(type2) { - return "".concat(type2, "-").concat(Math.random()).concat(Date.now()); -}; -var formatPadding2 = function formatPadding3(padding3) { - if ((0, import_util491.isArray)(padding3)) { - switch (padding3.length) { - case 4: - return padding3; - case 3: - padding3.push(padding3[1]); - return padding3; - case 2: - return padding3.concat(padding3); - case 1: - return [padding3[0], padding3[0], padding3[0], padding3[0]]; - default: - return [0, 0, 0, 0]; - } - } - if ((0, import_util491.isNumber)(padding3)) { - return [padding3, padding3, padding3, padding3]; - } else if ((0, import_util491.isString)(padding3)) { - var intPadding = parseInt(padding3, 10); - return [intPadding, intPadding, intPadding, intPadding]; - } - return [0, 0, 0, 0]; -}; -var cloneEvent = function cloneEvent2(e4) { - var event = new G6GraphEvent(e4.type, e4); - event.clientX = e4.clientX; - event.clientY = e4.clientY; - event.x = e4.x; - event.y = e4.y; - event.target = e4.target; - event.currentTarget = e4.currentTarget; - event.bubbles = true; - event.item = e4.item; - return event; -}; -var isViewportChanged = function isViewportChanged2(matrix) { - if (!matrix) { - return false; - } - var MATRIX_LEN = 9; - var ORIGIN_MATRIX2 = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - for (var i4 = 0; i4 < MATRIX_LEN; i4++) { - if (matrix[i4] !== ORIGIN_MATRIX2[i4]) { - return true; - } - } - return false; -}; -var isNaN2 = function isNaN3(input) { - return Number.isNaN(Number(input)); -}; -var calculationItemsBBox = function calculationItemsBBox2(items) { - var minx = Infinity; - var maxx = -Infinity; - var miny = Infinity; - var maxy = -Infinity; - for (var i4 = 0; i4 < items.length; i4++) { - var element = items[i4]; - var bbox = element.getBBox(); - var minX = bbox.minX, minY = bbox.minY, maxX = bbox.maxX, maxY2 = bbox.maxY; - if (minX < minx) { - minx = minX; - } - if (minY < miny) { - miny = minY; - } - if (maxX > maxx) { - maxx = maxX; - } - if (maxY2 > maxy) { - maxy = maxY2; - } - } - var x6 = Math.floor(minx); - var y5 = Math.floor(miny); - var width2 = Math.ceil(maxx) - Math.floor(minx); - var height = Math.ceil(maxy) - Math.floor(miny); - return { - x: x6, - y: y5, - width: width2, - height, - minX: minx, - minY: miny, - maxX: maxx, - maxY: maxy - }; -}; -var processParallelEdges = function processParallelEdges2(edges, offsetDiff, multiEdgeType, singleEdgeType, loopEdgeType) { - if (offsetDiff === void 0) { - offsetDiff = 15; - } - if (multiEdgeType === void 0) { - multiEdgeType = "quadratic"; - } - if (singleEdgeType === void 0) { - singleEdgeType = void 0; - } - if (loopEdgeType === void 0) { - loopEdgeType = void 0; - } - var len5 = edges.length; - var cod = offsetDiff * 2; - var loopPosition = ["top", "top-right", "right", "bottom-right", "bottom", "bottom-left", "left", "top-left"]; - var edgeMap = {}; - var tags = []; - var reverses = {}; - for (var i4 = 0; i4 < len5; i4++) { - var edge2 = edges[i4]; - var source = edge2.source, target = edge2.target; - var sourceTarget = "".concat(source, "-").concat(target); - if (tags[i4]) - continue; - if (!edgeMap[sourceTarget]) { - edgeMap[sourceTarget] = []; - } - tags[i4] = true; - edgeMap[sourceTarget].push(edge2); - for (var j4 = 0; j4 < len5; j4++) { - if (i4 === j4) - continue; - var sedge = edges[j4]; - var src = sedge.source; - var dst = sedge.target; - if (!tags[j4]) { - if (source === dst && target === src) { - edgeMap[sourceTarget].push(sedge); - tags[j4] = true; - reverses["".concat(src, "|").concat(dst, "|").concat(edgeMap[sourceTarget].length - 1)] = true; - } else if (source === src && target === dst) { - edgeMap[sourceTarget].push(sedge); - tags[j4] = true; - } - } - } - } - for (var key in edgeMap) { - var arcEdges = edgeMap[key]; - var length_1 = arcEdges.length; - for (var k4 = 0; k4 < length_1; k4++) { - var current = arcEdges[k4]; - if (current.source === current.target) { - if (loopEdgeType) - current.type = loopEdgeType; - current.loopCfg = { - position: loopPosition[k4 % 8], - dist: Math.floor(k4 / 8) * 20 + 50 - }; - continue; - } - if (length_1 === 1 && singleEdgeType && current.source !== current.target) { - current.type = singleEdgeType; - continue; - } - current.type = multiEdgeType; - var sign = (k4 % 2 === 0 ? 1 : -1) * (reverses["".concat(current.source, "|").concat(current.target, "|").concat(k4)] ? -1 : 1); - if (length_1 % 2 === 1) { - current.curveOffset = sign * Math.ceil(k4 / 2) * cod; - } else { - current.curveOffset = sign * (Math.floor(k4 / 2) * cod + offsetDiff); - } - } - } - return edges; -}; - -// node_modules/@antv/g6-core/es/graph/controller/view.js -var ViewController = function() { - function ViewController2(graph) { - this.destroyed = false; - this.graph = graph; - this.destroyed = false; - } - ViewController2.prototype.getViewCenter = function() { - var padding3 = this.getFormatPadding(); - var graph = this.graph; - var width2 = this.graph.get("width"); - var height = graph.get("height"); - return { - x: (width2 - padding3[1] - padding3[3]) / 2 + padding3[3], - y: (height - padding3[0] - padding3[2]) / 2 + padding3[0] - }; - }; - ViewController2.prototype.fitCenter = function() { - var graph = this.graph; - var group3 = graph.get("group"); - group3.resetMatrix(); - var bbox = group3.getCanvasBBox(); - if (bbox.width === 0 || bbox.height === 0) - return; - var viewCenter = this.getViewCenter(); - var groupCenter = { - x: bbox.x + bbox.width / 2, - y: bbox.y + bbox.height / 2 - }; - graph.translate(viewCenter.x - groupCenter.x, viewCenter.y - groupCenter.y); - }; - ViewController2.prototype.fitView = function() { - var graph = this.graph; - var padding3 = this.getFormatPadding(); - var width2 = graph.get("width"); - var height = graph.get("height"); - var group3 = graph.get("group"); - group3.resetMatrix(); - var bbox = group3.getCanvasBBox(); - if (bbox.width === 0 || bbox.height === 0) - return; - var viewCenter = this.getViewCenter(); - var groupCenter = { - x: bbox.x + bbox.width / 2, - y: bbox.y + bbox.height / 2 - }; - graph.translate(viewCenter.x - groupCenter.x, viewCenter.y - groupCenter.y); - var w4 = (width2 - padding3[1] - padding3[3]) / bbox.width; - var h3 = (height - padding3[0] - padding3[2]) / bbox.height; - var ratio = w4; - if (w4 > h3) { - ratio = h3; - } - if (!graph.zoom(ratio, viewCenter)) { - console.warn("zoom failed, ratio out of range, ratio: %f", ratio); - } - }; - ViewController2.prototype.fitViewByRules = function(rules) { - var _a6 = rules.onlyOutOfViewPort, onlyOutOfViewPort = _a6 === void 0 ? false : _a6, _b = rules.direction, direction3 = _b === void 0 ? "both" : _b, _c = rules.ratioRule, ratioRule = _c === void 0 ? "min" : _c; - var graph = this.graph; - var padding3 = this.getFormatPadding(); - var width2 = graph.get("width"); - var height = graph.get("height"); - var group3 = graph.get("group"); - group3.resetMatrix(); - var bbox = group3.getCanvasBBox(); - if (bbox.width === 0 || bbox.height === 0) - return; - var viewCenter = this.getViewCenter(); - var groupCenter = { - x: bbox.x + bbox.width / 2, - y: bbox.y + bbox.height / 2 - }; - graph.translate(viewCenter.x - groupCenter.x, viewCenter.y - groupCenter.y); - var wRatio = (width2 - padding3[1] - padding3[3]) / bbox.width; - var hRatio = (height - padding3[0] - padding3[2]) / bbox.height; - var ratio; - if (direction3 === "x") { - ratio = wRatio; - } else if (direction3 === "y") { - ratio = hRatio; - } else { - ratio = ratioRule === "max" ? Math.max(wRatio, hRatio) : Math.min(wRatio, hRatio); - } - if (onlyOutOfViewPort) { - ratio = ratio < 1 ? ratio : 1; - } - var initZoomRatio = graph.getZoom(); - var endZoom = initZoomRatio * ratio; - var minZoom = graph.get("minZoom"); - if (endZoom < minZoom) { - endZoom = minZoom; - console.warn("fitview failed, ratio out of range, ratio: %f", ratio, "graph minzoom has been used instead"); - } - graph.zoomTo(endZoom, viewCenter); - }; - ViewController2.prototype.getFormatPadding = function() { - var padding3 = this.graph.get("fitViewPadding"); - return formatPadding2(padding3); - }; - ViewController2.prototype.focusPoint = function(point2, animate, animateCfg) { - var _this = this; - var viewCenter = this.getViewCenter(); - var modelCenter = this.getPointByCanvas(viewCenter.x, viewCenter.y); - var viewportMatrix = this.graph.get("group").getMatrix(); - if (!viewportMatrix) - viewportMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - if (animate) { - var dx_1 = (modelCenter.x - point2.x) * viewportMatrix[0]; - var dy_1 = (modelCenter.y - point2.y) * viewportMatrix[4]; - var lastX_1 = 0; - var lastY_1 = 0; - var newX_1 = 0; - var newY_1 = 0; - this.graph.get("canvas").animate(function(ratio) { - newX_1 = dx_1 * ratio; - newY_1 = dy_1 * ratio; - _this.graph.translate(newX_1 - lastX_1, newY_1 - lastY_1); - lastX_1 = newX_1; - lastY_1 = newY_1; - }, __assign({}, animateCfg)); - } else { - this.graph.translate((modelCenter.x - point2.x) * viewportMatrix[0], (modelCenter.y - point2.y) * viewportMatrix[4]); - } - }; - ViewController2.prototype.getPointByCanvas = function(canvasX, canvasY) { - var viewportMatrix = this.graph.get("group").getMatrix(); - if (!viewportMatrix) { - viewportMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - var point2 = invertMatrix({ - x: canvasX, - y: canvasY - }, viewportMatrix); - return point2; - }; - ViewController2.prototype.getPointByClient = function(clientX, clientY) { - var canvas = this.graph.get("canvas"); - var canvasPoint = canvas.getPointByClient(clientX, clientY); - return this.getPointByCanvas(canvasPoint.x, canvasPoint.y); - }; - ViewController2.prototype.getClientByPoint = function(x6, y5) { - var canvas = this.graph.get("canvas"); - var canvasPoint = this.getCanvasByPoint(x6, y5); - var point2 = canvas.getClientByPoint(canvasPoint.x, canvasPoint.y); - return { - x: point2.x, - y: point2.y - }; - }; - ViewController2.prototype.getCanvasByPoint = function(x6, y5) { - var viewportMatrix = this.graph.get("group").getMatrix(); - if (!viewportMatrix) { - viewportMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - return applyMatrix({ - x: x6, - y: y5 - }, viewportMatrix); - }; - ViewController2.prototype.focus = function(item, animate, animateCfg) { - if ((0, import_util492.isString)(item)) { - item = this.graph.findById(item); - } - if (item) { - var x6 = 0, y5 = 0; - if (item.getType && item.getType() === "edge") { - var sourceMatrix = item.getSource().get("group").getMatrix(); - var targetMatrix = item.getTarget().get("group").getMatrix(); - if (sourceMatrix && targetMatrix) { - x6 = (sourceMatrix[6] + targetMatrix[6]) / 2; - y5 = (sourceMatrix[7] + targetMatrix[7]) / 2; - } else if (sourceMatrix || targetMatrix) { - x6 = sourceMatrix ? sourceMatrix[6] : targetMatrix[6]; - y5 = sourceMatrix ? sourceMatrix[7] : targetMatrix[7]; - } - } else { - var group3 = item.get("group"); - var matrix = group3.getMatrix(); - if (!matrix) - matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - x6 = matrix[6]; - y5 = matrix[7]; - } - this.focusPoint({ - x: x6, - y: y5 - }, animate, animateCfg); - } - }; - ViewController2.prototype.changeSize = function(width2, height) { - var graph = this.graph; - if (!(0, import_util492.isNumber)(width2) || !(0, import_util492.isNumber)(height)) { - throw Error("invalid canvas width & height, please make sure width & height type is number"); - } - graph.set({ - width: width2, - height - }); - var canvas = graph.get("canvas"); - canvas.changeSize(width2, height); - var plugins = graph.get("plugins"); - plugins.forEach(function(plugin) { - if (plugin.get("gridContainer")) { - plugin.positionInit(); - } - }); - }; - ViewController2.prototype.destroy = function() { - this.graph = null; - this.destroyed = false; - }; - return ViewController2; -}(); -var view_default2 = ViewController; - -// node_modules/@antv/g6-core/es/graph/controller/item.js -var import_util499 = __toModule(require_lib()); - -// node_modules/@antv/g6-core/es/item/edge.js -var import_util496 = __toModule(require_lib()); - -// node_modules/@antv/g6-core/es/item/item.js -var import_util495 = __toModule(require_lib()); - -// node_modules/@antv/g6-core/es/element/shape.js -var import_util494 = __toModule(require_lib()); - -// node_modules/@antv/g6-core/es/element/xml.js -var import_util493 = __toModule(require_lib()); -function _typeof(obj) { - "@babel/helpers - typeof"; - return _typeof = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(obj2) { - return typeof obj2; - } : function(obj2) { - return obj2 && typeof Symbol == "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }, _typeof(obj); -} -function looseJSONParse(text) { - if (typeof text !== "string") { - return text; - } - var safeParse = function safeParse2(str9) { - if (typeof str9 !== "string") { - return str9; - } - try { - return JSON.parse(str9.trim()); - } catch (e4) { - return str9.trim(); - } - }; - var firstAttempt = safeParse(text); - if (typeof firstAttempt !== "string") { - return firstAttempt; - } - var tail = function tail2(arr) { - return arr[arr.length - 1]; - }; - var str8 = text.trim(); - var objectStack = []; - var syntaxStack = []; - var isLastPair = function isLastPair2() { - var syntaxes = []; - for (var _i = 0; _i < arguments.length; _i++) { - syntaxes[_i] = arguments[_i]; - } - return syntaxes.some(function(syntax) { - return tail(syntaxStack) === syntax; - }); - }; - var getValueStore = function getValueStore2() { - return tail(objectStack); - }; - var rst = null; - var i4 = 0; - var temp = ""; - while (i4 < str8.length) { - var nowChar = str8[i4]; - var isInString = isLastPair('"', "'"); - if (!isInString && !nowChar.trim()) { - i4 += 1; - continue; - } - var isLastTranslate = str8[i4 - 1] === "\\"; - var isInObject = isLastPair("}"); - var isInArray = isLastPair("]"); - var isWaitingValue = isLastPair(","); - var tempArr = getValueStore(); - if (isInString) { - if (tail(syntaxStack) === nowChar && !isLastTranslate) { - syntaxStack.pop(); - var value2 = safeParse(temp); - tempArr.push(value2); - rst = value2; - temp = ""; - } else { - temp += nowChar; - } - } else if (isInArray && nowChar === ",") { - if (temp) { - tempArr.push(safeParse(temp)); - temp = ""; - } - } else if (isInObject && nowChar === ":") { - syntaxStack.push(","); - if (temp) { - tempArr.push(temp); - temp = ""; - } - } else if (isWaitingValue && nowChar === ",") { - if (temp) { - tempArr.push(safeParse(temp)); - temp = ""; - } - syntaxStack.pop(); - } else if (nowChar === "}" && (isInObject || isWaitingValue)) { - if (temp) { - tempArr.push(safeParse(temp)); - temp = ""; - } - if (isWaitingValue) { - syntaxStack.pop(); - } - var obj = {}; - for (var c5 = 1; c5 < tempArr.length; c5 += 2) { - obj[tempArr[c5 - 1]] = tempArr[c5]; - } - objectStack.pop(); - if (objectStack.length) { - tail(objectStack).push(obj); - } - syntaxStack.pop(); - rst = obj; - } else if (nowChar === "]" && isInArray) { - if (temp) { - tempArr.push(safeParse(temp)); - temp = ""; - } - objectStack.pop(); - if (objectStack.length) { - tail(objectStack).push(tempArr); - } - syntaxStack.pop(); - rst = tempArr; - } else if (nowChar === "{") { - objectStack.push([]); - syntaxStack.push("}"); - } else if (nowChar === "[") { - objectStack.push([]); - syntaxStack.push("]"); - } else if (nowChar === '"') { - syntaxStack.push('"'); - } else if (nowChar === "'") { - syntaxStack.push("'"); - } else { - temp += nowChar; - } - i4 += 1; - } - return rst || temp; -} -var keyConvert = function keyConvert2(str8) { - return str8.split("-").reduce(function(a4, b10) { - return a4 + b10.charAt(0).toUpperCase() + b10.slice(1); - }); -}; -var xmlDataRenderer = function xmlDataRenderer2(xml) { - return function(data3) { - var len5 = xml.length; - var arr = []; - var i4 = 0; - var tmp = ""; - while (i4 < len5) { - if (xml[i4] === "{" && xml[i4 + 1] === "{") { - arr.push(tmp); - tmp = ""; - i4 += 2; - } else if (xml[i4] === "}" && xml[i4 + 1] === "}") { - if (arr.length) { - var last17 = arr.pop(); - tmp = (0, import_util493.get)(data3, tmp, last17.endsWith("=") ? '"{'.concat(tmp, '}"') : tmp); - arr.push(last17 + tmp); - } - i4 += 2; - tmp = ""; - } else { - tmp += xml[i4]; - i4 += 1; - } - } - arr.push(tmp); - return arr.map(function(e4, index2) { - return arr[index2 - 1] && arr[index2 - 1].endsWith("=") ? '"{'.concat(e4, '}"') : e4; - }).join(""); - }; -}; -function parseXML(xml, cfg) { - var attrs = {}; - var keys6 = xml.getAttributeNames && xml.getAttributeNames() || []; - var children = xml.children && Array.from(xml.children).map(function(e4) { - return parseXML(e4, cfg); - }); - var rst = {}; - var tagName = xml.tagName ? xml.tagName.toLowerCase() : "group"; - if (tagName === "text") { - attrs.text = xml.innerText; - } - rst.type = tagName; - if (tagName === "img") { - rst.type = "image"; - } - Array.from(keys6).forEach(function(k4) { - var key = keyConvert(k4); - var val = xml.getAttribute(k4); - try { - if (key === "style" || key === "attrs") { - var style = looseJSONParse(val); - attrs = __assign(__assign({}, attrs), style); - } else { - rst[key] = looseJSONParse(val); - } - } catch (e4) { - if (key === "style") { - throw e4; - } - rst[key] = val; - } - }); - rst.attrs = attrs; - if (cfg && cfg.style && rst.name && _typeof(cfg.style[rst.name]) === "object") { - rst.attrs = __assign(__assign({}, rst.attrs), cfg.style[rst.name]); - } - if (cfg && cfg.style && rst.keyshape) { - rst.attrs = __assign(__assign({}, rst.attrs), cfg.style); - } - if (children.length) { - rst.children = children; - } - return rst; -} -function getBBox4(node, offset, chilrenBBox) { - var _a6 = node.attrs, attrs = _a6 === void 0 ? {} : _a6; - var bbox = { - x: offset.x || 0, - y: offset.y || 0, - width: chilrenBBox.width || 0, - height: chilrenBBox.height || 0 - }; - var shapeHeight, shapeWidth; - switch (node.type) { - case "maker": - case "circle": - if (attrs.r) { - shapeWidth = 2 * attrs.r; - shapeHeight = 2 * attrs.r; - } - break; - case "text": - if (attrs.text) { - shapeWidth = getTextSize(attrs.text, attrs.fontSize || 12)[0]; - shapeHeight = 16; - bbox.y += shapeHeight; - bbox.height = shapeHeight; - bbox.width = shapeWidth; - node.attrs = __assign({ - fontSize: 12, - fill: "#000" - }, attrs); - } - break; - default: - if (attrs.width) { - shapeWidth = attrs.width; - } - if (attrs.height) { - shapeHeight = attrs.height; - } - } - if (shapeHeight >= 0) { - bbox.height = shapeHeight; - } - if (shapeWidth >= 0) { - bbox.width = shapeWidth; - } - if (attrs.marginTop) { - bbox.y += attrs.marginTop; - } - if (attrs.marginLeft) { - bbox.x += attrs.marginLeft; - } - return bbox; -} -function generateTarget(target, lastOffset) { - var _a6; - if (lastOffset === void 0) { - lastOffset = { - x: 0, - y: 0 - }; - } - var defaultBbox = __assign({ - x: 0, - y: 0, - width: 0, - height: 0 - }, lastOffset); - if ((_a6 = target.children) === null || _a6 === void 0 ? void 0 : _a6.length) { - var _b = target.attrs, attrs = _b === void 0 ? {} : _b; - var marginTop = attrs.marginTop; - var offset = __assign({}, lastOffset); - if (marginTop) { - offset.y += marginTop; - } - for (var index2 = 0; index2 < target.children.length; index2++) { - target.children[index2].attrs.key = "".concat(attrs.key || "root", " -").concat(index2, " "); - var node = generateTarget(target.children[index2], offset); - if (node.bbox) { - var bbox = node.bbox; - if (node.attrs.next === "inline") { - offset.x += node.bbox.width; - } else { - offset.y += node.bbox.height; - } - if (bbox.width + bbox.x > defaultBbox.width) { - defaultBbox.width = bbox.width + bbox.x; - } - if (bbox.height + bbox.y > defaultBbox.height) { - defaultBbox.height = bbox.height + bbox.y; - } - } - } - } - target.bbox = getBBox4(target, lastOffset, defaultBbox); - target.attrs = __assign(__assign({}, target.attrs), target.bbox); - return target; -} -function compareTwoTarget(nowTarget, formerTarget) { - var _a6, _b, _c, _d; - var type2 = (nowTarget || {}).type; - var key = ((formerTarget === null || formerTarget === void 0 ? void 0 : formerTarget.attrs) || {}).key; - if (key && nowTarget) { - nowTarget.attrs.key = key; - } - if (!nowTarget && formerTarget) { - return { - action: "delete", - val: formerTarget, - type: type2, - key - }; - } - if (nowTarget && !formerTarget) { - return { - action: "add", - val: nowTarget, - type: type2 - }; - } - if (!nowTarget && !formerTarget) { - return { - action: "same", - type: type2 - }; - } - var children = []; - if (((_a6 = nowTarget.children) === null || _a6 === void 0 ? void 0 : _a6.length) > 0 || ((_b = formerTarget.children) === null || _b === void 0 ? void 0 : _b.length) > 0) { - var length_1 = Math.max((_c = nowTarget.children) === null || _c === void 0 ? void 0 : _c.length, (_d = formerTarget.children) === null || _d === void 0 ? void 0 : _d.length); - var formerChilren = formerTarget.children || []; - var nowChilren = nowTarget.children || []; - for (var index2 = 0; index2 < length_1; index2 += 1) { - children.push(compareTwoTarget(nowChilren[index2], formerChilren[index2])); - } - } - var formerKeys = Object.keys(formerTarget.attrs); - var nowKeys = Object.keys(nowTarget.attrs); - if (formerTarget.type !== nowTarget.type) { - return { - action: "restructure", - nowTarget, - formerTarget, - key, - children - }; - } - if (formerKeys.filter(function(e4) { - return e4 !== "children"; - }).some(function(e4) { - return nowTarget.attrs[e4] !== formerTarget.attrs[e4] || !nowKeys.includes(e4); - })) { - return { - action: "change", - val: nowTarget, - children, - type: type2, - key - }; - } - return { - action: "same", - children, - type: type2, - key - }; -} -function createNodeFromXML(gen) { - var structures = {}; - var compileXML = function compileXML2(cfg) { - var rawStr = typeof gen === "function" ? gen(cfg) : gen; - var target = xmlDataRenderer(rawStr)(cfg); - var xmlParser = document.createElement("div"); - xmlParser.innerHTML = target; - var xml = xmlParser.children[0]; - var result = generateTarget(parseXML(xml, cfg)); - xmlParser.remove(); - return result; - }; - return { - draw: function draw4(cfg, group3) { - var resultTarget = compileXML(cfg); - var keyshape = group3; - var renderTarget = function renderTarget2(target) { - var _a6 = target.attrs, attrs = _a6 === void 0 ? {} : _a6, bbox = target.bbox, type2 = target.type, children = target.children, rest = __rest(target, ["attrs", "bbox", "type", "children"]); - if (target.type !== "group") { - var shape = group3.addShape(target.type, __assign({ - attrs, - origin: { - bbox, - type: type2, - children - } - }, rest)); - if (target.keyshape) { - keyshape = shape; - } - } - if (target.children) { - target.children.forEach(function(n3) { - return renderTarget2(n3); - }); - } - }; - renderTarget(resultTarget); - structures[cfg.id] = [resultTarget]; - return keyshape; - }, - update: function update15(cfg, node) { - if (!structures[cfg.id]) { - structures[cfg.id] = []; - } - var container2 = node.getContainer(); - var children = container2.get("children"); - var newTarget = compileXML(cfg); - var lastTarget = structures[cfg.id].pop(); - var diffResult = compareTwoTarget(newTarget, lastTarget); - var addShape = function addShape2(shape) { - var _a6; - if (shape.type !== "group") { - container2.addShape(shape.type, { - attrs: shape.attrs - }); - } - if ((_a6 = shape.children) === null || _a6 === void 0 ? void 0 : _a6.length) { - shape.children.map(function(e4) { - return addShape2(e4); - }); - } - }; - var delShape = function delShape2(shape) { - var _a6; - var targetShape = children.find(function(e4) { - return e4.attrs.key === shape.attrs.key; - }); - if (targetShape) { - container2.removeChild(targetShape); - } - if ((_a6 = shape.children) === null || _a6 === void 0 ? void 0 : _a6.length) { - shape.children.map(function(e4) { - return delShape2(e4); - }); - } - }; - var updateTarget = function updateTarget2(target) { - var key = target.key; - if (target.type !== "group") { - var targetShape = children.find(function(e4) { - return e4.attrs.key === key; - }); - switch (target.action) { - case "change": - if (targetShape) { - var originAttr = target.val.keyshape ? node.getOriginStyle() : {}; - targetShape.attr(__assign(__assign({}, originAttr), target.val.attrs)); - } - break; - case "add": - addShape(target.val); - break; - case "delete": - delShape(target.val); - break; - case "restructure": - delShape(target.formerTarget); - addShape(target.nowTarget); - break; - default: - break; - } - } - if (target.children) { - target.children.forEach(function(n3) { - return updateTarget2(n3); - }); - } - }; - updateTarget(diffResult); - structures[cfg.id].push(newTarget); - }, - getAnchorPoints: function getAnchorPoints4() { - return [[0, 0.5], [1, 0.5], [0.5, 1], [0.5, 0]]; - } - }; -} - -// node_modules/@antv/g6-core/es/element/shape.js -var cache2 = {}; -function ucfirst(str8) { - if (!cache2[str8]) { - cache2[str8] = (0, import_util494.upperFirst)(str8); - } - return cache2[str8]; -} -var ShapeFactoryBase2 = { - defaultShapeType: "defaultType", - className: null, - getShape: function getShape2(type2) { - var self2 = this; - var shape = self2[type2] || self2[self2.defaultShapeType] || self2["simple-circle"]; - return shape; - }, - draw: function draw(type2, cfg, group3) { - var shape = this.getShape(type2); - group3["shapeMap"] = {}; - var rst = shape.draw(cfg, group3); - if (shape.afterDraw) { - shape.afterDraw(cfg, group3, rst); - } - return rst; - }, - baseUpdate: function baseUpdate(type2, cfg, item, updateType) { - var _a6, _b; - var shape = this.getShape(type2); - if (shape.update) { - shape.mergeStyle = (_a6 = shape.getOptions) === null || _a6 === void 0 ? void 0 : _a6.call(shape, cfg, updateType); - (_b = shape.update) === null || _b === void 0 ? void 0 : _b.call(shape, cfg, item, updateType); - } - if (shape.afterUpdate) { - shape.afterUpdate(cfg, item); - } - }, - setState: function setState(type2, name, value2, item) { - var shape = this.getShape(type2); - shape.setState(name, value2, item); - }, - shouldUpdate: function shouldUpdate2(type2) { - var shape = this.getShape(type2); - return !!shape.update; - }, - getControlPoints: function getControlPoints(type2, cfg) { - var shape = this.getShape(type2); - return shape.getControlPoints(cfg); - }, - getAnchorPoints: function getAnchorPoints(type2, cfg) { - var shape = this.getShape(type2); - return shape.getAnchorPoints(cfg); - } -}; -var ShapeFramework = { - options: {}, - draw: function draw2(cfg, group3) { - return this.drawShape(cfg, group3); - }, - drawShape: function drawShape() { - }, - afterDraw: function afterDraw() { - }, - afterUpdate: function afterUpdate() { - }, - setState: function setState2() { - }, - getControlPoints: function getControlPoints2(cfg) { - return cfg.controlPoints; - }, - getAnchorPoints: function getAnchorPoints2(cfg) { - var defaultAnchorPoints = this.options.anchorPoints; - var anchorPoints = cfg.anchorPoints || defaultAnchorPoints; - return anchorPoints; - } -}; -var Shape2 = function() { - function Shape3() { - } - Shape3.registerFactory = function(factoryType, cfg) { - var className = ucfirst(factoryType); - var factoryBase = ShapeFactoryBase2; - var shapeFactory = __assign(__assign({}, factoryBase), cfg); - Shape3[className] = shapeFactory; - shapeFactory.className = className; - return shapeFactory; - }; - Shape3.getFactory = function(factoryType) { - var className = ucfirst(factoryType); - return Shape3[className]; - }; - Shape3.registerNode = function(shapeType, nodeDefinition, extendShapeType) { - var shapeFactory = Shape3.Node; - var shapeObj; - if (typeof nodeDefinition === "string" || typeof nodeDefinition === "function") { - var autoNodeDefinition = createNodeFromXML(nodeDefinition); - shapeObj = __assign(__assign({}, shapeFactory.getShape("single-node")), autoNodeDefinition); - } else if (nodeDefinition.jsx) { - var jsx = nodeDefinition.jsx; - var autoNodeDefinition = createNodeFromXML(jsx); - shapeObj = __assign(__assign(__assign({}, shapeFactory.getShape("single-node")), autoNodeDefinition), nodeDefinition); - } else { - shapeFactory.getShape(extendShapeType); - var extendShape = extendShapeType ? shapeFactory.getShape(extendShapeType) : ShapeFramework; - shapeObj = __assign(__assign({}, extendShape), nodeDefinition); - } - shapeObj.type = shapeType; - shapeObj.itemType = "node"; - shapeFactory[shapeType] = shapeObj; - return shapeObj; - }; - Shape3.registerEdge = function(shapeType, edgeDefinition, extendShapeType) { - var shapeFactory = Shape3.Edge; - var extendShape = extendShapeType ? shapeFactory.getShape(extendShapeType) : ShapeFramework; - var shapeObj = __assign(__assign({}, extendShape), edgeDefinition); - shapeObj.type = shapeType; - shapeObj.itemType = "edge"; - shapeFactory[shapeType] = shapeObj; - return shapeObj; - }; - Shape3.registerCombo = function(shapeType, comboDefinition, extendShapeType) { - var shapeFactory = Shape3.Combo; - var extendShape = extendShapeType ? shapeFactory.getShape(extendShapeType) : ShapeFramework; - var shapeObj = __assign(__assign({}, extendShape), comboDefinition); - shapeObj.type = shapeType; - shapeObj.itemType = "combo"; - shapeFactory[shapeType] = shapeObj; - return shapeObj; - }; - return Shape3; -}(); -var shape_default4 = Shape2; -Shape2.registerFactory("node", { - defaultShapeType: "circle" -}); -Shape2.registerFactory("edge", { - defaultShapeType: "line" -}); -Shape2.registerFactory("combo", { - defaultShapeType: "circle" -}); - -// node_modules/@antv/g6-core/es/item/item.js -var CACHE_BBOX = "bboxCache"; -var CACHE_CANVAS_BBOX = "bboxCanvasCache"; -var ItemBase = function() { - function ItemBase2(cfg) { - this._cfg = {}; - this.destroyed = false; - var defaultCfg2 = { - id: void 0, - type: "item", - model: {}, - group: void 0, - animate: false, - visible: true, - locked: false, - event: true, - keyShape: void 0, - states: [] - }; - this._cfg = Object.assign(defaultCfg2, this.getDefaultCfg(), cfg); - var model = this.get("model"); - var id = model.id; - var itemType = this.get("type"); - if (!id) { - id = uniqueId11(itemType); - this.get("model").id = id; - } - this.set("id", id); - var group3 = cfg.group; - if (group3) { - group3.set("item", this); - group3.set("id", id); - } - this.init(); - this.draw(); - var shapeType = model.shape || model.type || (itemType === "edge" ? "line" : "circle"); - var shapeFactory = this.get("shapeFactory"); - if (shapeFactory && shapeFactory[shapeType]) { - var options = shapeFactory[shapeType].options; - if (options && options.stateStyles) { - var styles = this.get("styles") || model.stateStyles; - styles = (0, import_util495.deepMix)({}, options.stateStyles, styles); - this.set("styles", styles); - } - } - } - ItemBase2.prototype.calculateBBox = function() { - var keyShape = this.get("keyShape"); - var group3 = this.get("group"); - var bbox = getBBox2(keyShape, group3); - bbox.x = bbox.minX; - bbox.y = bbox.minY; - bbox.width = bbox.maxX - bbox.minX; - bbox.height = bbox.maxY - bbox.minY; - bbox.centerX = (bbox.minX + bbox.maxX) / 2; - bbox.centerY = (bbox.minY + bbox.maxY) / 2; - return bbox; - }; - ItemBase2.prototype.calculateCanvasBBox = function() { - var keyShape = this.get("keyShape"); - var group3 = this.get("group"); - var bbox = getBBox2(keyShape, group3); - bbox.x = bbox.minX; - bbox.y = bbox.minY; - bbox.width = bbox.maxX - bbox.minX; - bbox.height = bbox.maxY - bbox.minY; - bbox.centerX = (bbox.minX + bbox.maxX) / 2; - bbox.centerY = (bbox.minY + bbox.maxY) / 2; - return bbox; - }; - ItemBase2.prototype.drawInner = function() { - var self2 = this; - var shapeFactory = self2.get("shapeFactory"); - var group3 = self2.get("group"); - var model = self2.get("model"); - group3.clear(); - var visible = model.visible; - if (visible !== void 0 && !visible) - self2.changeVisibility(visible); - if (!shapeFactory) { - return; - } - self2.updatePosition(model); - var cfg = self2.getShapeCfg(model); - var shapeType = cfg.type; - var keyShape = shapeFactory.draw(shapeType, cfg, group3); - if (keyShape) { - self2.set("keyShape", keyShape); - keyShape.set("isKeyShape", true); - keyShape.set("draggable", true); - } - this.setOriginStyle(); - this.set("currentShape", shapeType); - this.restoreStates(shapeFactory, shapeType); - }; - ItemBase2.prototype.setOriginStyle = function() { - var group3 = this.get("group"); - var children = group3.get("children"); - var keyShape = this.getKeyShape(); - var self2 = this; - var keyShapeName = keyShape.get("name"); - if (!this.get("originStyle")) { - var originStyles = {}; - for (var i4 = 0; i4 < children.length; i4++) { - var child = children[i4]; - var shapeType = child.get("type"); - var name_1 = child.get("name"); - if (name_1 && name_1 !== keyShapeName) { - originStyles[name_1] = shapeType !== "image" ? (0, import_util495.clone)(child.attr()) : self2.getShapeStyleByName(name_1); - if (shapeType === "text" && originStyles[name_1]) { - delete originStyles[name_1].x; - delete originStyles[name_1].y; - delete originStyles[name_1].matrix; - } - } else { - var keyShapeStyle = self2.getShapeStyleByName(); - delete keyShapeStyle.path; - delete keyShapeStyle.matrix; - if (!keyShapeName) { - Object.assign(originStyles, keyShapeStyle); - } else { - if (!name_1) { - var shapeName = uniqueId11("shape"); - child.set("name", shapeName); - group3["shapeMap"][shapeName] = child; - originStyles[shapeName] = shapeType !== "image" ? (0, import_util495.clone)(child.attr()) : self2.getShapeStyleByName(name_1); - } else { - originStyles[keyShapeName] = keyShapeStyle; - } - } - } - } - self2.set("originStyle", originStyles); - } else { - var styles_1 = this.get("originStyle"); - if (keyShapeName && !styles_1[keyShapeName]) - styles_1[keyShapeName] = {}; - var currentStatesStyle_1 = this.getCurrentStatesStyle(); - var _loop_1 = function _loop_12(i5) { - var child2 = children[i5]; - var name_2 = child2.get("name"); - var shapeAttrs = child2.attr(); - if (name_2 && name_2 !== keyShapeName) { - var shapeStateStyle_1 = currentStatesStyle_1[name_2]; - if (!styles_1[name_2]) - styles_1[name_2] = {}; - if (shapeStateStyle_1) { - Object.keys(shapeAttrs).forEach(function(key) { - var value2 = shapeAttrs[key]; - if (value2 !== shapeStateStyle_1[key]) - styles_1[name_2][key] = value2; - }); - } else { - styles_1[name_2] = child2.get("type") !== "image" ? (0, import_util495.clone)(shapeAttrs) : self2.getShapeStyleByName(name_2); - } - } else { - var shapeAttrs_1 = child2.attr(); - var keyShapeStateStyles_1 = {}; - Object.keys(currentStatesStyle_1).forEach(function(styleKey) { - var subStyle = currentStatesStyle_1[styleKey]; - if (styleKey === keyShapeName || !(0, import_util495.isPlainObject)(subStyle)) { - keyShapeStateStyles_1[styleKey] = subStyle; - } - }); - Object.keys(shapeAttrs_1).forEach(function(key) { - var value2 = shapeAttrs_1[key]; - if (keyShapeStateStyles_1[key] !== value2) { - if (keyShapeName) - styles_1[keyShapeName][key] = value2; - else - styles_1[key] = value2; - } - }); - } - }; - for (var i4 = 0; i4 < children.length; i4++) { - _loop_1(i4); - } - delete styles_1.path; - delete styles_1.matrix; - delete styles_1.x; - delete styles_1.y; - if (styles_1[keyShapeName]) { - delete styles_1[keyShapeName].x; - delete styles_1[keyShapeName].y; - delete styles_1[keyShapeName].matrix; - delete styles_1[keyShapeName].path; - } - self2.set("originStyle", styles_1); - } - }; - ItemBase2.prototype.restoreStates = function(shapeFactory, shapeType) { - var self2 = this; - var states = self2.get("states"); - (0, import_util495.each)(states, function(state2) { - shapeFactory.setState(shapeType, state2, true, self2); - }); - }; - ItemBase2.prototype.init = function() { - var shapeFactory = shape_default4.getFactory(this.get("type")); - this.set("shapeFactory", shapeFactory); - }; - ItemBase2.prototype.get = function(key) { - return this._cfg[key]; - }; - ItemBase2.prototype.set = function(key, val) { - if ((0, import_util495.isPlainObject)(key)) { - this._cfg = __assign(__assign({}, this._cfg), key); - } else { - this._cfg[key] = val; - } - }; - ItemBase2.prototype.getDefaultCfg = function() { - return {}; - }; - ItemBase2.prototype.clearCache = function() { - this.set(CACHE_BBOX, null); - this.set(CACHE_CANVAS_BBOX, null); - }; - ItemBase2.prototype.beforeDraw = function() { - }; - ItemBase2.prototype.afterDraw = function() { - }; - ItemBase2.prototype.afterUpdate = function() { - }; - ItemBase2.prototype.draw = function() { - this.beforeDraw(); - this.drawInner(); - this.afterDraw(); - }; - ItemBase2.prototype.getShapeStyleByName = function(name) { - var group3 = this.get("group"); - var currentShape; - if (name) { - currentShape = group3["shapeMap"][name]; - } else { - currentShape = this.getKeyShape(); - } - if (currentShape) { - var styles_2 = {}; - (0, import_util495.each)(currentShape.attr(), function(val, key) { - if (key !== "img" || (0, import_util495.isString)(val)) { - styles_2[key] = val; - } - }); - return styles_2; - } - return {}; - }; - ItemBase2.prototype.getShapeCfg = function(model, updateType) { - var styles = this.get("styles"); - if (styles) { - var newModel = model; - newModel.style = __assign(__assign({}, styles), model.style); - return newModel; - } - return model; - }; - ItemBase2.prototype.getStateStyle = function(state2) { - var styles = this.get("styles"); - var stateStyle = styles && styles[state2]; - return stateStyle; - }; - ItemBase2.prototype.getOriginStyle = function() { - return this.get("originStyle"); - }; - ItemBase2.prototype.getCurrentStatesStyle = function() { - var self2 = this; - var styles = {}; - var states = self2.getStates(); - if (!states || !states.length) { - return this.get("originStyle"); - } - (0, import_util495.each)(self2.getStates(), function(state2) { - styles = Object.assign(styles, self2.getStateStyle(state2)); - }); - return styles; - }; - ItemBase2.prototype.setState = function(state2, value2) { - var states = this.get("states"); - var shapeFactory = this.get("shapeFactory"); - var stateName = state2; - var filterStateName = state2; - if ((0, import_util495.isString)(value2)) { - stateName = "".concat(state2, ":").concat(value2); - filterStateName = "".concat(state2, ":"); - } - var newStates = states; - if ((0, import_util495.isBoolean)(value2)) { - var index2 = states.indexOf(filterStateName); - if (value2) { - if (index2 > -1) { - return; - } - states.push(stateName); - } else if (index2 > -1) { - states.splice(index2, 1); - } - } else if ((0, import_util495.isString)(value2)) { - var filterStates = states.filter(function(name) { - return name.includes(filterStateName); - }); - if (filterStates.length > 0) { - this.clearStates(filterStates); - } - newStates = newStates.filter(function(name) { - return !name.includes(filterStateName); - }); - newStates.push(stateName); - this.set("states", newStates); - } - if (shapeFactory) { - var model = this.get("model"); - var type2 = model.type; - shapeFactory.setState(type2, state2, value2, this); - } - }; - ItemBase2.prototype.clearStates = function(states) { - var self2 = this; - var originStates = self2.getStates(); - var shapeFactory = self2.get("shapeFactory"); - var model = self2.get("model"); - var shape = model.type; - if (!states) { - states = originStates; - } - if ((0, import_util495.isString)(states)) { - states = [states]; - } - var newStates = originStates.filter(function(state2) { - return states.indexOf(state2) === -1; - }); - self2.set("states", newStates); - states.forEach(function(state2) { - shapeFactory.setState(shape, state2, false, self2); - }); - }; - ItemBase2.prototype.getContainer = function() { - return this.get("group"); - }; - ItemBase2.prototype.getKeyShape = function() { - return this.get("keyShape"); - }; - ItemBase2.prototype.getModel = function() { - return this.get("model"); - }; - ItemBase2.prototype.getType = function() { - return this.get("type"); - }; - ItemBase2.prototype.getID = function() { - return this.get("id"); - }; - ItemBase2.prototype.isItem = function() { - return true; - }; - ItemBase2.prototype.getStates = function() { - return this.get("states"); - }; - ItemBase2.prototype.hasState = function(state2) { - var states = this.getStates(); - return states.indexOf(state2) >= 0; - }; - ItemBase2.prototype.refresh = function(updateType) { - var model = this.get("model"); - this.updatePosition(model); - this.updateShape(updateType); - this.afterUpdate(); - this.clearCache(); - }; - ItemBase2.prototype.getUpdateType = function(cfg) { - return void 0; - }; - ItemBase2.prototype.update = function(cfg, updateType) { - if (updateType === void 0) { - updateType = void 0; - } - var model = this.get("model"); - if (updateType === "move") { - this.updatePosition(cfg); - } else { - var oriVisible = model.visible; - var cfgVisible = cfg.visible; - if (oriVisible !== cfgVisible && cfgVisible !== void 0) - this.changeVisibility(cfgVisible); - var originPosition = { - x: model.x, - y: model.y - }; - cfg.x = isNaN(+cfg.x) ? model.x : +cfg.x; - cfg.y = isNaN(+cfg.y) ? model.y : +cfg.y; - var styles = this.get("styles"); - if (cfg.stateStyles) { - var stateStyles = cfg.stateStyles; - (0, import_util495.mix)(styles, stateStyles); - delete cfg.stateStyles; - } - Object.assign(model, cfg); - if (originPosition.x !== cfg.x || originPosition.y !== cfg.y) { - this.updatePosition(cfg); - } - this.updateShape(updateType); - } - this.afterUpdate(); - this.clearCache(); - }; - ItemBase2.prototype.updateShape = function(updateType) { - var shapeFactory = this.get("shapeFactory"); - var model = this.get("model"); - var shape = model.type; - if (shapeFactory.shouldUpdate(shape) && shape === this.get("currentShape")) { - var updateCfg2 = this.getShapeCfg(model, updateType); - shapeFactory.baseUpdate(shape, updateCfg2, this, updateType); - if (updateType !== "move") - this.setOriginStyle(); - } else { - this.draw(); - } - this.restoreStates(shapeFactory, shape); - }; - ItemBase2.prototype.updatePosition = function(cfg) { - var model = this.get("model"); - var x6 = isNaN(+cfg.x) ? +model.x : +cfg.x; - var y5 = isNaN(+cfg.y) ? +model.y : +cfg.y; - var group3 = this.get("group"); - if (isNaN(x6) || isNaN(y5)) { - return false; - } - model.x = x6; - model.y = y5; - var matrix = group3.getMatrix(); - if (matrix && matrix[6] === x6 && matrix[7] === y5) - return false; - group3.resetMatrix(); - translate4(group3, { - x: x6, - y: y5 - }); - this.clearCache(); - return true; - }; - ItemBase2.prototype.getBBox = function() { - var bbox = this.get(CACHE_BBOX); - if (!bbox) { - bbox = this.calculateBBox(); - this.set(CACHE_BBOX, bbox); - } - return bbox; - }; - ItemBase2.prototype.getCanvasBBox = function() { - var bbox = this.get(CACHE_CANVAS_BBOX); - if (!bbox) { - bbox = this.calculateCanvasBBox(); - this.set(CACHE_CANVAS_BBOX, bbox); - } - return bbox; - }; - ItemBase2.prototype.toFront = function() { - var group3 = this.get("group"); - group3.toFront(); - }; - ItemBase2.prototype.toBack = function() { - var group3 = this.get("group"); - group3.toBack(); - }; - ItemBase2.prototype.show = function() { - this.changeVisibility(true); - }; - ItemBase2.prototype.hide = function() { - this.changeVisibility(false); - }; - ItemBase2.prototype.changeVisibility = function(visible) { - var group3 = this.get("group"); - if (visible) { - group3.show(); - } else { - group3.hide(); - } - this.set("visible", visible); - }; - ItemBase2.prototype.isVisible = function() { - return this.get("visible"); - }; - ItemBase2.prototype.enableCapture = function(enable) { - var group3 = this.get("group"); - if (group3) { - group3.set("capture", enable); - } - }; - ItemBase2.prototype.destroy = function() { - if (!this.destroyed) { - var animate = this.get("animate"); - var group3 = this.get("group"); - if (animate) { - group3.stopAnimate(); - } - group3["shapeMap"] = {}; - this.clearCache(); - group3.remove(); - this._cfg = null; - this.destroyed = true; - } - }; - return ItemBase2; -}(); -var item_default = ItemBase; - -// node_modules/@antv/g6-core/es/item/edge.js -var END_MAP = { - source: "start", - target: "end" -}; -var ITEM_NAME_SUFFIX = "Node"; -var POINT_NAME_SUFFIX = "Point"; -var ANCHOR_NAME_SUFFIX = "Anchor"; -var Edge3 = function(_super) { - __extends(Edge4, _super); - function Edge4() { - return _super !== null && _super.apply(this, arguments) || this; - } - Edge4.prototype.getDefaultCfg = function() { - return { - type: "edge", - sourceNode: null, - targetNode: null, - startPoint: null, - endPoint: null, - linkCenter: false - }; - }; - Edge4.prototype.setEnd = function(name, value2) { - var pointName = END_MAP[name] + POINT_NAME_SUFFIX; - var itemName = name + ITEM_NAME_SUFFIX; - var preItem = this.get(itemName); - if (preItem && !preItem.destroyed) { - preItem.removeEdge(this); - } - if ((0, import_util496.isPlainObject)(value2)) { - this.set(pointName, value2); - this.set(itemName, null); - } else if (value2) { - value2.addEdge(this); - this.set(itemName, value2); - this.set(pointName, null); - } - }; - Edge4.prototype.getLinkPoint = function(name, model, controlPoints) { - var pointName = END_MAP[name] + POINT_NAME_SUFFIX; - var itemName = name + ITEM_NAME_SUFFIX; - var point2 = this.get(pointName); - if (!point2) { - var item = this.get(itemName); - var anchorName = name + ANCHOR_NAME_SUFFIX; - var prePoint = this.getPrePoint(name, controlPoints); - var anchorIndex = model[anchorName]; - if (!(0, import_util496.isNil)(anchorIndex)) { - point2 = item.getLinkPointByAnchor(anchorIndex); - } - point2 = point2 || item.getLinkPoint(prePoint); - if (!(0, import_util496.isNil)(point2.index)) { - this.set("".concat(name, "AnchorIndex"), point2.index); - } - } - return point2; - }; - Edge4.prototype.getPrePoint = function(name, controlPoints) { - if (controlPoints && controlPoints.length) { - var index2 = name === "source" ? 0 : controlPoints.length - 1; - return controlPoints[index2]; - } - var oppositeName = name === "source" ? "target" : "source"; - return this.getEndPoint(oppositeName); - }; - Edge4.prototype.getEndPoint = function(name) { - var itemName = name + ITEM_NAME_SUFFIX; - var pointName = END_MAP[name] + POINT_NAME_SUFFIX; - var item = this.get(itemName); - if (item) { - return item.get("model"); - } - return this.get(pointName); - }; - Edge4.prototype.getControlPointsByCenter = function(model) { - var sourcePoint = this.getEndPoint("source"); - var targetPoint = this.getEndPoint("target"); - var shapeFactory = this.get("shapeFactory"); - var type2 = model.type; - return shapeFactory.getControlPoints(type2, { - startPoint: sourcePoint, - endPoint: targetPoint - }); - }; - Edge4.prototype.getEndCenter = function(name) { - var itemName = name + ITEM_NAME_SUFFIX; - var pointName = END_MAP[name] + POINT_NAME_SUFFIX; - var item = this.get(itemName); - if (item) { - var bbox = item.getBBox(); - return { - x: bbox.centerX, - y: bbox.centerY - }; - } - return this.get(pointName); - }; - Edge4.prototype.init = function() { - _super.prototype.init.call(this); - this.setSource(this.get("source")); - this.setTarget(this.get("target")); - }; - Edge4.prototype.getShapeCfg = function(model, updateType) { - var self2 = this; - var linkCenter = self2.get("linkCenter"); - var cfg = (updateType === null || updateType === void 0 ? void 0 : updateType.includes("move")) ? model : _super.prototype.getShapeCfg.call(this, model); - if (linkCenter) { - cfg.startPoint = self2.getEndCenter("source"); - cfg.endPoint = self2.getEndCenter("target"); - } else { - var controlPoints = cfg.controlPoints || self2.getControlPointsByCenter(cfg); - cfg.startPoint = self2.getLinkPoint("source", model, controlPoints); - cfg.endPoint = self2.getLinkPoint("target", model, controlPoints); - } - cfg.sourceNode = self2.get("sourceNode"); - cfg.targetNode = self2.get("targetNode"); - return cfg; - }; - Edge4.prototype.getModel = function() { - var out = this.get("model"); - var sourceItem = this.get("source".concat(ITEM_NAME_SUFFIX)); - var targetItem = this.get("target".concat(ITEM_NAME_SUFFIX)); - if (sourceItem) { - delete out["source".concat(ITEM_NAME_SUFFIX)]; - } else { - out.source = this.get("start".concat(POINT_NAME_SUFFIX)); - } - if (targetItem) { - delete out["target".concat(ITEM_NAME_SUFFIX)]; - } else { - out.target = this.get("end".concat(POINT_NAME_SUFFIX)); - } - if (!(0, import_util496.isString)(out.source) && !(0, import_util496.isPlainObject)(out.source)) { - out.source = out.source.getID(); - } - if (!(0, import_util496.isString)(out.target) && !(0, import_util496.isPlainObject)(out.target)) { - out.target = out.target.getID(); - } - return out; - }; - Edge4.prototype.setSource = function(source) { - this.setEnd("source", source); - this.set("source", source); - }; - Edge4.prototype.setTarget = function(target) { - this.setEnd("target", target); - this.set("target", target); - }; - Edge4.prototype.getSource = function() { - return this.get("source"); - }; - Edge4.prototype.getTarget = function() { - return this.get("target"); - }; - Edge4.prototype.updatePosition = function() { - return false; - }; - Edge4.prototype.update = function(cfg, updateType) { - if (updateType === void 0) { - updateType = void 0; - } - var model = this.get("model"); - var oriVisible = model.visible; - var cfgVisible = cfg.visible; - if (oriVisible !== cfgVisible && cfgVisible !== void 0) - this.changeVisibility(cfgVisible); - var styles = this.get("styles"); - if (cfg.stateStyles) { - var stateStyles = cfg.stateStyles; - (0, import_util496.mix)(styles, stateStyles); - delete cfg.stateStyles; - } - Object.assign(model, cfg); - this.updateShape(updateType); - this.afterUpdate(); - this.clearCache(); - }; - Edge4.prototype.destroy = function() { - var sourceItem = this.get("source".concat(ITEM_NAME_SUFFIX)); - var targetItem = this.get("target".concat(ITEM_NAME_SUFFIX)); - if (sourceItem && !sourceItem.destroyed) { - sourceItem.removeEdge(this); - } - if (targetItem && !targetItem.destroyed) { - targetItem.removeEdge(this); - } - _super.prototype.destroy.call(this); - }; - return Edge4; -}(item_default); -var edge_default2 = Edge3; - -// node_modules/@antv/g6-core/es/item/node.js -var import_util497 = __toModule(require_lib()); -var CACHE_ANCHOR_POINTS = "anchorPointsCache"; -var CACHE_BBOX2 = "bboxCache"; -var Node4 = function(_super) { - __extends(Node5, _super); - function Node5() { - return _super !== null && _super.apply(this, arguments) || this; - } - Node5.prototype.getNearestPoint = function(points, curPoint) { - var index2 = 0; - var nearestPoint2 = points[0]; - var minDistance = distance10(points[0], curPoint); - for (var i4 = 0; i4 < points.length; i4++) { - var point2 = points[i4]; - var dis = distance10(point2, curPoint); - if (dis < minDistance) { - nearestPoint2 = point2; - minDistance = dis; - index2 = i4; - } - } - nearestPoint2.anchorIndex = index2; - return nearestPoint2; - }; - Node5.prototype.getDefaultCfg = function() { - return { - type: "node", - edges: [] - }; - }; - Node5.prototype.getEdges = function() { - return this.get("edges"); - }; - Node5.prototype.getInEdges = function() { - var self2 = this; - return this.get("edges").filter(function(edge2) { - return edge2.get("target") === self2; - }); - }; - Node5.prototype.getOutEdges = function() { - var self2 = this; - return this.get("edges").filter(function(edge2) { - return edge2.get("source") === self2; - }); - }; - Node5.prototype.getNeighbors = function(type2) { - var _this = this; - var edges = this.get("edges"); - if (type2 === "target") { - var neighhborsConverter_1 = function neighhborsConverter_12(edge2) { - return edge2.getSource() === _this; - }; - return edges.filter(neighhborsConverter_1).map(function(edge2) { - return edge2.getTarget(); - }); - } - if (type2 === "source") { - var neighhborsConverter_2 = function neighhborsConverter_22(edge2) { - return edge2.getTarget() === _this; - }; - return edges.filter(neighhborsConverter_2).map(function(edge2) { - return edge2.getSource(); - }); - } - var neighhborsConverter = function neighhborsConverter2(edge2) { - return edge2.getSource() === _this ? edge2.getTarget() : edge2.getSource(); - }; - return edges.map(neighhborsConverter); - }; - Node5.prototype.getLinkPointByAnchor = function(index2) { - var anchorPoints = this.getAnchorPoints(); - return anchorPoints[index2]; - }; - Node5.prototype.getLinkPoint = function(point2) { - var keyShape = this.get("keyShape"); - var type2 = keyShape.get("type"); - var itemType = this.get("type"); - var centerX; - var centerY; - var bbox = this.getBBox(); - if (itemType === "combo") { - centerX = bbox.centerX || (bbox.maxX + bbox.minX) / 2; - centerY = bbox.centerY || (bbox.maxY + bbox.minY) / 2; - } else { - centerX = bbox.centerX; - centerY = bbox.centerY; - } - var anchorPoints = this.getAnchorPoints(); - var intersectPoint; - switch (type2) { - case "circle": - intersectPoint = getCircleIntersectByPoint({ - x: centerX, - y: centerY, - r: bbox.width / 2 - }, point2); - break; - case "ellipse": - intersectPoint = getEllipseIntersectByPoint({ - x: centerX, - y: centerY, - rx: bbox.width / 2, - ry: bbox.height / 2 - }, point2); - break; - default: - intersectPoint = getRectIntersectByPoint(bbox, point2); - } - var linkPoint = intersectPoint; - if (anchorPoints.length) { - if (!linkPoint) { - linkPoint = point2; - } - linkPoint = this.getNearestPoint(anchorPoints, linkPoint); - } - if (!linkPoint) { - linkPoint = { - x: centerX, - y: centerY - }; - } - return linkPoint; - }; - Node5.prototype.getAnchorPoints = function() { - var anchorPoints = this.get(CACHE_ANCHOR_POINTS); - if (!anchorPoints) { - anchorPoints = []; - var shapeFactory = this.get("shapeFactory"); - var bbox_1 = this.getBBox(); - var model = this.get("model"); - var shapeCfg = this.getShapeCfg(model); - var type2 = model.type; - var points = shapeFactory.getAnchorPoints(type2, shapeCfg) || []; - (0, import_util497.each)(points, function(pointArr, index2) { - var point2 = { - x: bbox_1.minX + pointArr[0] * bbox_1.width, - y: bbox_1.minY + pointArr[1] * bbox_1.height, - anchorIndex: index2 - }; - anchorPoints.push(point2); - }); - this.set(CACHE_ANCHOR_POINTS, anchorPoints); - } - return anchorPoints; - }; - Node5.prototype.addEdge = function(edge2) { - this.get("edges").push(edge2); - }; - Node5.prototype.lock = function() { - this.set("locked", true); - }; - Node5.prototype.unlock = function() { - this.set("locked", false); - }; - Node5.prototype.hasLocked = function() { - return this.get("locked"); - }; - Node5.prototype.removeEdge = function(edge2) { - var edges = this.getEdges(); - var index2 = edges.indexOf(edge2); - if (index2 > -1) - edges.splice(index2, 1); - }; - Node5.prototype.clearCache = function() { - this.set(CACHE_BBOX2, null); - this.set(CACHE_ANCHOR_POINTS, null); - }; - Node5.prototype.getUpdateType = function(cfg) { - var _a6, _b, _c, _d, _e; - if (!cfg) - return void 0; - var existX = !(0, import_util497.isNil)(cfg.x); - var existY = !(0, import_util497.isNil)(cfg.y); - var keys6 = Object.keys(cfg); - if (keys6.length === 1 && (existX || existY) || keys6.length === 2 && existX && existY) - return "move"; - if ((0, import_util497.isNumber)(cfg.x) || (0, import_util497.isNumber)(cfg.y) || cfg.type || cfg.anchorPoints || cfg.size || (cfg === null || cfg === void 0 ? void 0 : cfg.style) && (((_a6 = cfg === null || cfg === void 0 ? void 0 : cfg.style) === null || _a6 === void 0 ? void 0 : _a6.r) || ((_b = cfg === null || cfg === void 0 ? void 0 : cfg.style) === null || _b === void 0 ? void 0 : _b.width) || ((_c = cfg === null || cfg === void 0 ? void 0 : cfg.style) === null || _c === void 0 ? void 0 : _c.height) || ((_d = cfg === null || cfg === void 0 ? void 0 : cfg.style) === null || _d === void 0 ? void 0 : _d.rx) || ((_e = cfg === null || cfg === void 0 ? void 0 : cfg.style) === null || _e === void 0 ? void 0 : _e.ry))) - return "bbox|label"; - var updateLabel3 = keys6.includes("label") || keys6.includes("labelCfg"); - return updateLabel3 ? "style|label" : "style"; - }; - return Node5; -}(item_default); -var node_default = Node4; - -// node_modules/@antv/g6-core/es/item/combo.js -var import_util498 = __toModule(require_lib()); -var CACHE_BBOX3 = "bboxCache"; -var CACHE_CANVAS_BBOX2 = "bboxCanvasCache"; -var CACHE_SIZE = "sizeCache"; -var CACHE_ANCHOR_POINTS2 = "anchorPointsCache"; -var Combo = function(_super) { - __extends(Combo2, _super); - function Combo2() { - return _super !== null && _super.apply(this, arguments) || this; - } - Combo2.prototype.getDefaultCfg = function() { - return { - type: "combo", - nodes: [], - edges: [], - combos: [] - }; - }; - Combo2.prototype.getShapeCfg = function(model) { - var styles = this.get("styles"); - var bbox = this.get("bbox"); - if (styles && bbox) { - var newModel = model; - var size14 = { - r: Math.hypot(bbox.height, bbox.width) / 2 || global_default.defaultCombo.size[0] / 2, - width: bbox.width || global_default.defaultCombo.size[0], - height: bbox.height || global_default.defaultCombo.size[1] - }; - newModel.style = __assign(__assign(__assign({}, styles), model.style), size14); - var padding3 = model.padding || global_default.defaultCombo.padding; - if ((0, import_util498.isNumber)(padding3)) { - size14.r += padding3; - size14.width += padding3 * 2; - size14.height += padding3 * 2; - } else { - size14.r += padding3[0]; - size14.width += padding3[1] + padding3[3] || padding3[1] * 2; - size14.height += padding3[0] + padding3[2] || padding3[0] * 2; - } - this.set(CACHE_SIZE, size14); - return newModel; - } - return model; - }; - Combo2.prototype.calculateCanvasBBox = function() { - if (this.destroyed) - return; - var keyShape = this.get("keyShape"); - var group3 = this.get("group"); - var bbox = getBBox2(keyShape, group3); - bbox.centerX = (bbox.minX + bbox.maxX) / 2; - bbox.centerY = (bbox.minY + bbox.maxY) / 2; - var cacheSize = this.get(CACHE_SIZE); - var cacheBBox = this.get(CACHE_BBOX3) || {}; - var oriX = cacheBBox.x; - var oriY = cacheBBox.x; - if (cacheSize) { - cacheSize.width = Math.max(cacheSize.width, bbox.width); - cacheSize.height = Math.max(cacheSize.height, bbox.height); - var type2 = keyShape.get("type"); - if (type2 === "circle") { - bbox.width = cacheSize.r * 2; - bbox.height = cacheSize.r * 2; - } else { - bbox.width = cacheSize.width; - bbox.height = cacheSize.height; - } - bbox.minX = bbox.centerX - bbox.width / 2; - bbox.minY = bbox.centerY - bbox.height / 2; - bbox.maxX = bbox.centerX + bbox.width / 2; - bbox.maxY = bbox.centerY + bbox.height / 2; - } else { - bbox.width = bbox.maxX - bbox.minX; - bbox.height = bbox.maxY - bbox.minY; - bbox.centerX = (bbox.minX + bbox.maxX) / 2; - bbox.centerY = (bbox.minY + bbox.maxY) / 2; - } - bbox.x = bbox.minX; - bbox.y = bbox.minY; - if (bbox.x !== oriX || bbox.y !== oriY) - this.set(CACHE_ANCHOR_POINTS2, null); - return bbox; - }; - Combo2.prototype.getChildren = function() { - var self2 = this; - return { - nodes: self2.getNodes(), - combos: self2.getCombos() - }; - }; - Combo2.prototype.getNodes = function() { - var self2 = this; - return self2.get("nodes"); - }; - Combo2.prototype.getCombos = function() { - var self2 = this; - return self2.get("combos"); - }; - Combo2.prototype.addChild = function(item) { - var self2 = this; - var itemType = item.getType(); - switch (itemType) { - case "node": - self2.addNode(item); - break; - case "combo": - self2.addCombo(item); - break; - default: - console.warn("Only node or combo items are allowed to be added into a combo"); - return false; - } - return true; - }; - Combo2.prototype.addCombo = function(combo) { - var self2 = this; - self2.get("combos").push(combo); - return true; - }; - Combo2.prototype.addNode = function(node) { - var self2 = this; - self2.get("nodes").push(node); - return true; - }; - Combo2.prototype.removeChild = function(item) { - var self2 = this; - var itemType = item.getType(); - switch (itemType) { - case "node": - self2.removeNode(item); - break; - case "combo": - self2.removeCombo(item); - break; - default: - console.warn("Only node or combo items are allowed to be added into a combo"); - return false; - } - return true; - }; - Combo2.prototype.removeCombo = function(combo) { - if (!combo) - return; - var combos = this.getCombos(); - var index2 = combos.indexOf(combo); - if (index2 > -1) { - combos.splice(index2, 1); - return true; - } - return false; - }; - Combo2.prototype.removeNode = function(node) { - if (!node) - return; - var nodes = this.getNodes(); - var index2 = nodes.indexOf(node); - if (index2 > -1) { - nodes.splice(index2, 1); - return true; - } - return false; - }; - Combo2.prototype.getUpdateType = function(cfg) { - return void 0; - }; - Combo2.prototype.getBBox = function() { - this.set(CACHE_CANVAS_BBOX2, null); - var bbox = this.calculateCanvasBBox(); - return bbox; - }; - Combo2.prototype.clearCache = function() { - this.set(CACHE_BBOX3, null); - this.set(CACHE_CANVAS_BBOX2, null); - this.set(CACHE_ANCHOR_POINTS2, null); - }; - Combo2.prototype.destroy = function() { - if (!this.destroyed) { - var animate = this.get("animate"); - var group3 = this.get("group"); - if (animate) { - group3.stopAnimate(); - } - group3["shapeMap"] = {}; - this.clearCache(); - this.set(CACHE_SIZE, null); - this.set("bbox", null); - group3.remove(); - this._cfg = null; - this.destroyed = true; - } - }; - return Combo2; -}(node_default); -var combo_default = Combo; - -// node_modules/@antv/g6-core/es/graph/controller/item.js -var NODE = "node"; -var EDGE = "edge"; -var VEDGE = "vedge"; -var COMBO = "combo"; -var CFG_PREFIX = "default"; -var MAPPER_SUFFIX = "Mapper"; -var STATE_SUFFIX = "stateStyles"; -var ItemController = function() { - function ItemController2(graph) { - var _this = this; - this.edgeToBeUpdateMap = {}; - this.throttleRefresh = (0, import_util499.throttle)(function(_8) { - var _a6; - var graph2 = _this.graph; - if (!graph2 || graph2.get("destroyed")) - return; - var edgeToBeUpdateMap = _this.edgeToBeUpdateMap; - if (!edgeToBeUpdateMap || !((_a6 = Object.keys(edgeToBeUpdateMap)) === null || _a6 === void 0 ? void 0 : _a6.length)) - return; - Object.keys(edgeToBeUpdateMap).forEach(function(eid) { - var edge2 = edgeToBeUpdateMap[eid].edge; - if (!edge2 || edge2.destroyed) - return; - edge2.refresh(edgeToBeUpdateMap[eid].updateType); - }); - _this.edgeToBeUpdateMap = {}; - }, 16, { - trailing: true, - leading: true - }); - this.graph = graph; - this.destroyed = false; - } - ItemController2.prototype.addItem = function(type2, model) { - var graph = this.graph; - var vType = type2 === VEDGE ? EDGE : type2; - var parent = graph.get("".concat(vType, "Group")) || graph.get("group"); - var upperType = (0, import_util499.upperFirst)(vType); - var item = null; - var styles = graph.get(vType + (0, import_util499.upperFirst)(STATE_SUFFIX)) || {}; - var defaultModel = graph.get(CFG_PREFIX + upperType); - if (model[STATE_SUFFIX]) { - styles = model[STATE_SUFFIX]; - } - if (defaultModel) { - (0, import_util499.each)(defaultModel, function(val, cfg) { - if ((0, import_util499.isObject)(val) && !(0, import_util499.isArray)(val)) { - model[cfg] = (0, import_util499.deepMix)({}, val, model[cfg]); - } else if ((0, import_util499.isArray)(val)) { - model[cfg] = model[cfg] || (0, import_util499.clone)(defaultModel[cfg]); - } else { - model[cfg] = model[cfg] || defaultModel[cfg]; - } - }); - } - var mapper = graph.get(vType + MAPPER_SUFFIX); - if (mapper) { - var mappedModel_1 = mapper(model); - if (mappedModel_1[STATE_SUFFIX]) { - styles = mappedModel_1[STATE_SUFFIX]; - delete mappedModel_1[STATE_SUFFIX]; - } - (0, import_util499.each)(mappedModel_1, function(val, cfg) { - if ((0, import_util499.isObject)(val) && !(0, import_util499.isArray)(val)) { - model[cfg] = (0, import_util499.deepMix)({}, model[cfg], val); - } else { - model[cfg] = mappedModel_1[cfg] || model[cfg]; - } - }); - } - graph.emit("beforeadditem", { - type: type2, - model - }); - if (type2 === EDGE || type2 === VEDGE) { - var source = void 0; - var target = void 0; - source = model.source; - target = model.target; - if (source && (0, import_util499.isString)(source)) { - source = graph.findById(source); - } - if (target && (0, import_util499.isString)(target)) { - target = graph.findById(target); - } - if (!source || !target) { - console.warn("The source or target node of edge ".concat(model.id, " does not exist!")); - return; - } - if (source.getType && source.getType() === "combo") { - model.isComboEdge = true; - } - if (target.getType && target.getType() === "combo") { - model.isComboEdge = true; - } - item = new edge_default2({ - model, - source, - target, - styles, - linkCenter: graph.get("linkCenter"), - group: parent.addGroup() - }); - } else if (type2 === NODE) { - item = new node_default({ - model, - styles, - group: parent.addGroup() - }); - } else if (type2 === COMBO) { - var children = model.children; - var comboBBox = getComboBBox(children, graph); - if (!isNaN(comboBBox.x)) - model.x = comboBBox.x; - else if (isNaN(model.x)) - model.x = Math.random() * 100; - if (!isNaN(comboBBox.y)) - model.y = comboBBox.y; - else if (isNaN(model.y)) - model.y = Math.random() * 100; - var comboGroup = parent.addGroup(); - comboGroup.setZIndex(model.depth); - item = new combo_default({ - model, - styles, - bbox: model.collapsed ? getComboBBox([], graph) : comboBBox, - group: comboGroup - }); - var comboModel_1 = item.getModel(); - (children || []).forEach(function(child) { - var childItem = graph.findById(child.id); - item.addChild(childItem); - child.depth = comboModel_1.depth + 2; - }); - if (model.collapsed) { - setTimeout(function() { - if (!item.destroyed) { - graph.collapseCombo(item); - } - }, 0); - } - } - if (item) { - graph.get("".concat(type2, "s")).push(item); - graph.get("itemMap")[item.get("id")] = item; - graph.emit("afteradditem", { - item, - model - }); - return item; - } - }; - ItemController2.prototype.updateItem = function(item, cfg) { - var _this = this; - var _a6, _b; - var graph = this.graph; - if ((0, import_util499.isString)(item)) { - item = graph.findById(item); - } - if (!item || item.destroyed) { - return; - } - var type2 = ""; - if (item.getType) - type2 = item.getType(); - var mapper = graph.get(type2 + MAPPER_SUFFIX); - var model = item.getModel(); - var updateType = item.getUpdateType(cfg); - if (mapper) { - var result = (0, import_util499.deepMix)({}, model, cfg); - var mappedModel = mapper(result); - var newModel = (0, import_util499.deepMix)({}, model, mappedModel, cfg); - if (mappedModel[STATE_SUFFIX]) { - item.set("styles", newModel[STATE_SUFFIX]); - delete newModel[STATE_SUFFIX]; - } - (0, import_util499.each)(newModel, function(val, key) { - cfg[key] = val; - }); - } else { - (0, import_util499.each)(cfg, function(val, key) { - if (model[key]) { - if ((0, import_util499.isObject)(val) && !(0, import_util499.isArray)(val)) { - cfg[key] = __assign(__assign({}, model[key]), cfg[key]); - } - } - }); - } - graph.emit("beforeupdateitem", { - item, - cfg - }); - if (type2 === EDGE) { - if (cfg.source) { - var source = cfg.source; - if ((0, import_util499.isString)(source)) { - source = graph.findById(source); - } - item.setSource(source); - } - if (cfg.target) { - var target = cfg.target; - if ((0, import_util499.isString)(target)) { - target = graph.findById(target); - } - item.setTarget(target); - } - item.update(cfg); - } - if (type2 === NODE || type2 === COMBO) { - item.update(cfg, updateType); - var edges_1 = item.getEdges(); - var refreshEdge = (updateType === null || updateType === void 0 ? void 0 : updateType.includes("bbox")) || updateType === "move"; - if (type2 === NODE) { - if (updateType === "move") { - (0, import_util499.each)(edges_1, function(edge2) { - _this.edgeToBeUpdateMap[edge2.getID()] = { - edge: edge2, - updateType - }; - _this.throttleRefresh(); - }); - } else if (refreshEdge) { - (0, import_util499.each)(edges_1, function(edge2) { - edge2.refresh(updateType); - }); - } - } else if (refreshEdge && type2 === COMBO) { - var shapeFactory = item.get("shapeFactory"); - var shapeType = model.type || "circle"; - var comboAnimate = model.animate === void 0 || cfg.animate === void 0 ? (_b = (_a6 = shapeFactory[shapeType]) === null || _a6 === void 0 ? void 0 : _a6.options) === null || _b === void 0 ? void 0 : _b.animate : model.animate || cfg.animate; - if (comboAnimate) { - setTimeout(function() { - if (!item || item.destroyed) - return; - var keyShape = item.getKeyShape(); - if (!keyShape || keyShape.destroyed) - return; - (0, import_util499.each)(edges_1, function(edge2) { - if (edge2 && !edge2.destroyed) - edge2.refresh(); - }); - }, 201); - } else { - (0, import_util499.each)(edges_1, function(edge2) { - edge2.refresh(); - }); - } - } - } - graph.emit("afterupdateitem", { - item, - cfg - }); - }; - ItemController2.prototype.updateCombo = function(combo, children) { - var _this = this; - var _a6, _b; - var graph = this.graph; - if ((0, import_util499.isString)(combo)) { - combo = graph.findById(combo); - } - if (!combo || combo.destroyed) { - return; - } - var model = combo.getModel(); - var comboBBox = getComboBBox(children, graph, combo); - var comboX = comboBBox.x, comboY = comboBBox.y; - combo.set("bbox", comboBBox); - combo.update({ - x: comboX || model.x, - y: comboY || model.y - }); - var shapeFactory = combo.get("shapeFactory"); - var shapeType = model.type || "circle"; - var comboAnimate = model.animate === void 0 ? (_b = (_a6 = shapeFactory[shapeType]) === null || _a6 === void 0 ? void 0 : _a6.options) === null || _b === void 0 ? void 0 : _b.animate : model.animate; - if (comboAnimate) { - setTimeout(function() { - if (!combo || combo.destroyed) - return; - var keyShape = combo.getKeyShape(); - if (!keyShape || keyShape.destroyed) - return; - combo.getShapeCfg(model); - _this.updateComboEdges(combo); - }, 201); - } else { - this.updateComboEdges(combo); - } - }; - ItemController2.prototype.updateComboEdges = function(combo) { - var combEdges = combo.getEdges() || []; - for (var i4 = 0; i4 < combEdges.length; i4++) { - var edge2 = combEdges[i4]; - if (edge2 && !edge2.destroyed) { - var edgeSF = edge2.get("shapeFactory"); - var edgeCfg = edge2.getShapeCfg(edge2.getModel()); - var edgeGroup = edge2.getContainer(); - edgeGroup.clear(); - var keyShape = edgeSF.draw(edgeCfg.type, edgeCfg, edgeGroup); - edge2.set("keyShape", keyShape); - keyShape.set("isKeyShape", true); - keyShape.set("draggable", true); - edge2.setOriginStyle(); - } - } - }; - ItemController2.prototype.collapseCombo = function(combo) { - var graph = this.graph; - if ((0, import_util499.isString)(combo)) { - combo = graph.findById(combo); - } - var children = combo.getChildren(); - children.nodes.forEach(function(node) { - graph.hideItem(node); - }); - children.combos.forEach(function(c5) { - graph.hideItem(c5); - }); - }; - ItemController2.prototype.expandCombo = function(combo) { - var graph = this.graph; - if ((0, import_util499.isString)(combo)) { - combo = graph.findById(combo); - } - var children = combo.getChildren(); - children.nodes.forEach(function(node) { - graph.showItem(node); - }); - children.combos.forEach(function(c5) { - if (c5.getModel().collapsed) { - c5.show(); - } else { - graph.showItem(c5); - } - }); - }; - ItemController2.prototype.removeItem = function(item) { - var _this = this; - var graph = this.graph; - if ((0, import_util499.isString)(item)) { - item = graph.findById(item); - } - if (!item || item.destroyed) { - return; - } - var itemModel = (0, import_util499.clone)(item.getModel()); - graph.emit("beforeremoveitem", { - item: itemModel - }); - var type2 = ""; - if (item.getType) - type2 = item.getType(); - var items = graph.get("".concat(type2, "s")); - var index2 = items.indexOf(item); - if (index2 > -1) - items.splice(index2, 1); - if (type2 === EDGE) { - var vitems = graph.get("v".concat(type2, "s")); - var vindex = vitems.indexOf(item); - if (vindex > -1) - vitems.splice(vindex, 1); - } - var itemId = item.get("id"); - var itemMap = graph.get("itemMap"); - delete itemMap[itemId]; - var comboTrees = graph.get("comboTrees"); - var id = item.get("id"); - if (type2 === NODE) { - var comboId = item.getModel().comboId; - if (comboTrees && comboId) { - var brothers_1 = comboTrees; - var found_1 = false; - comboTrees.forEach(function(ctree) { - if (found_1) - return; - traverseTree(ctree, function(combo) { - if (combo.id === id && brothers_1) { - var bidx = brothers_1.indexOf(combo); - brothers_1.splice(bidx, 1); - found_1 = true; - return false; - } - brothers_1 = combo.children; - return true; - }); - }); - } - var edges = item.getEdges(); - for (var i4 = edges.length - 1; i4 >= 0; i4--) { - graph.removeItem(edges[i4], false); - } - if (comboId) - graph.updateCombo(comboId); - } else if (type2 === COMBO) { - var parentId = item.getModel().parentId; - var comboInTree_1; - var found_2 = false; - (comboTrees || []).forEach(function(ctree) { - if (found_2) - return; - traverseTree(ctree, function(combo) { - if (combo.id === id) { - comboInTree_1 = combo; - found_2 = true; - return false; - } - return true; - }); - }); - comboInTree_1.removed = true; - if (comboInTree_1 && comboInTree_1.children) { - comboInTree_1.children.forEach(function(child) { - _this.removeItem(child.id); - }); - } - var edges = item.getEdges(); - for (var i4 = edges.length; i4 >= 0; i4--) { - graph.removeItem(edges[i4], false); - } - if (parentId) - graph.updateCombo(parentId); - } - item.destroy(); - graph.emit("afterremoveitem", { - item: itemModel, - type: type2 - }); - }; - ItemController2.prototype.setItemState = function(item, state2, value2) { - var graph = this.graph; - var stateName = state2; - if ((0, import_util499.isString)(value2)) { - stateName = "".concat(state2, ":").concat(value2); - } - if (item.hasState(stateName) === value2 && value2 || (0, import_util499.isString)(value2) && item.hasState(stateName)) { - return; - } - graph.emit("beforeitemstatechange", { - item, - state: stateName, - enabled: value2 - }); - item.setState(state2, value2); - graph.autoPaint(); - graph.emit("afteritemstatechange", { - item, - state: stateName, - enabled: value2 - }); - }; - ItemController2.prototype.priorityState = function(item, state2) { - var graph = this.graph; - var currentItem = item; - if ((0, import_util499.isString)(item)) { - currentItem = graph.findById(item); - } - this.setItemState(currentItem, state2, false); - this.setItemState(currentItem, state2, true); - }; - ItemController2.prototype.clearItemStates = function(item, states) { - var graph = this.graph; - if ((0, import_util499.isString)(item)) { - item = graph.findById(item); - } - graph.emit("beforeitemstatesclear", { - item, - states - }); - item.clearStates(states); - graph.emit("afteritemstatesclear", { - item, - states - }); - }; - ItemController2.prototype.refreshItem = function(item) { - var graph = this.graph; - if ((0, import_util499.isString)(item)) { - item = graph.findById(item); - } - graph.emit("beforeitemrefresh", { - item - }); - item.refresh(); - graph.emit("afteritemrefresh", { - item - }); - }; - ItemController2.prototype.addCombos = function(comboTrees, comboModels) { - var _this = this; - var graph = this.graph; - (comboTrees || []).forEach(function(ctree) { - traverseTreeUp(ctree, function(child) { - var comboModel; - comboModels.forEach(function(model) { - if (model.id === child.id) { - model.children = child.children; - model.depth = child.depth; - comboModel = model; - } - }); - if (comboModel) { - _this.addItem("combo", comboModel); - } - return true; - }); - }); - var comboGroup = graph.get("comboGroup"); - if (comboGroup) - comboGroup.sort(); - }; - ItemController2.prototype.changeItemVisibility = function(item, visible) { - var _this = this; - var graph = this.graph; - if ((0, import_util499.isString)(item)) { - item = graph.findById(item); - } - if (!item) { - console.warn("The item to be shown or hidden does not exist!"); - return; - } - graph.emit("beforeitemvisibilitychange", { - item, - visible - }); - item.changeVisibility(visible); - if (item.getType && item.getType() === NODE) { - var edges = item.getEdges(); - (0, import_util499.each)(edges, function(edge2) { - if (visible && !(edge2.get("source").isVisible() && edge2.get("target").isVisible())) { - return; - } - _this.changeItemVisibility(edge2, visible); - }); - } else if (item.getType && item.getType() === COMBO) { - var comboTrees = graph.get("comboTrees"); - var id_1 = item.get("id"); - var children_1 = []; - var found_3 = false; - (comboTrees || []).forEach(function(ctree) { - if (found_3) - return; - if (!ctree.children || ctree.children.length === 0) - return; - traverseTree(ctree, function(combo) { - if (combo.id === id_1) { - children_1 = combo.children; - found_3 = true; - return false; - } - return true; - }); - }); - if (children_1 && (!visible || visible && !item.getModel().collapsed)) { - children_1.forEach(function(child) { - var childItem = graph.findById(child.id); - _this.changeItemVisibility(childItem, visible); - }); - } - var edges = item.getEdges(); - (0, import_util499.each)(edges, function(edge2) { - if (visible && !(edge2.get("source").isVisible() && edge2.get("target").isVisible())) { - return; - } - _this.changeItemVisibility(edge2, visible); - }); - } - graph.emit("afteritemvisibilitychange", { - item, - visible - }); - return item; - }; - ItemController2.prototype.destroy = function() { - this.graph = null; - this.destroyed = true; - }; - return ItemController2; -}(); -var item_default2 = ItemController; - -// node_modules/@antv/g6-core/es/graph/controller/state.js -var import_util500 = __toModule(require_lib()); -var timer2 = null; -var StateController = function() { - function StateController2(graph) { - this.graph = graph; - this.cachedStates = { - enabled: {}, - disabled: {} - }; - this.destroyed = false; - } - StateController2.checkCache = function(item, state2, cache3) { - if (!cache3[state2]) { - return; - } - var index2 = cache3[state2].indexOf(item); - if (index2 >= 0) { - cache3[state2].splice(index2, 1); - } - }; - StateController2.cacheState = function(item, state2, states) { - if (!states[state2]) { - states[state2] = []; - } - states[state2].push(item); - }; - StateController2.prototype.updateState = function(item, state2, enabled) { - var _this = this; - var checkCache = StateController2.checkCache, cacheState = StateController2.cacheState; - if (item.destroyed) { - return; - } - var cachedStates = this.cachedStates; - var enabledStates = cachedStates.enabled; - var disabledStates = cachedStates.disabled; - if (enabled) { - checkCache(item, state2, disabledStates); - cacheState(item, state2, enabledStates); - } else { - checkCache(item, state2, enabledStates); - cacheState(item, state2, disabledStates); - } - if (timer2) { - clearTimeout(timer2); - } - timer2 = setTimeout(function() { - timer2 = null; - _this.updateGraphStates(); - }, 16); - }; - StateController2.prototype.updateStates = function(item, states, enabled) { - var _this = this; - if ((0, import_util500.isString)(states)) { - this.updateState(item, states, enabled); - } else { - states.forEach(function(state2) { - _this.updateState(item, state2, enabled); - }); - } - }; - StateController2.prototype.updateGraphStates = function() { - var states = this.graph.get("states"); - var cachedStates = this.cachedStates; - (0, import_util500.each)(cachedStates.disabled, function(val, key) { - if (states[key]) { - states[key] = states[key].filter(function(item) { - return val.indexOf(item) < 0 && !val.destroyed; - }); - } - }); - (0, import_util500.each)(cachedStates.enabled, function(val, key) { - if (!states[key]) { - states[key] = val; - } else { - var map_1 = {}; - states[key].forEach(function(item) { - if (!item.destroyed) { - map_1[item.get("id")] = true; - } - }); - val.forEach(function(item) { - if (!item.destroyed) { - var id = item.get("id"); - if (!map_1[id]) { - map_1[id] = true; - states[key].push(item); - } - } - }); - } - }); - this.graph.emit("graphstatechange", { - states - }); - this.cachedStates = { - enabled: {}, - disabled: {} - }; - }; - StateController2.prototype.destroy = function() { - this.graph = null; - this.cachedStates = null; - if (timer2) { - clearTimeout(timer2); - } - timer2 = null; - this.destroyed = true; - }; - return StateController2; -}(); -var state_default2 = StateController; - -// node_modules/@antv/g6-core/es/item/hull.js -var import_util501 = __toModule(require_lib()); - -// node_modules/@antv/g6-core/es/util/path.js -var path_exports2 = {}; -__export(path_exports2, { - getClosedSpline: () => getClosedSpline, - getControlPoint: () => getControlPoint, - getSpline: () => getSpline2, - paddedHull: () => paddedHull, - pathToPoints: () => pathToPoints2, - pointsToPolygon: () => pointsToPolygon, - roundedHull: () => roundedHull -}); -var substitute3 = function substitute4(str8, o3) { - if (!str8 || !o3) { - return str8; - } - return str8.replace(/\\?\{([^{}]+)\}/g, function(match, name) { - if (match.charAt(0) === "\\") { - return match.slice(1); - } - var res = o3[name]; - if (res === 0) - res = "0"; - return res || ""; - }); -}; -var getSpline2 = function getSpline3(points) { - var data3 = []; - if (points.length < 2) { - throw new Error("point length must largn than 2, now it's ".concat(points.length)); - } - for (var _i = 0, points_1 = points; _i < points_1.length; _i++) { - var point2 = points_1[_i]; - var x6 = point2.x, y5 = point2.y; - data3.push(x6); - data3.push(y5); - } - var spliePath = catmull_rom_2_bezier_default(data3); - spliePath.unshift(["M", points[0].x, points[0].y]); - return spliePath; -}; -var getControlPoint = function getControlPoint2(startPoint, endPoint, percent2, offset) { - if (percent2 === void 0) { - percent2 = 0; - } - if (offset === void 0) { - offset = 0; - } - var point2 = { - x: (1 - percent2) * startPoint.x + percent2 * endPoint.x, - y: (1 - percent2) * startPoint.y + percent2 * endPoint.y - }; - var tangent = [0, 0]; - vec2_exports.normalize(tangent, [endPoint.x - startPoint.x, endPoint.y - startPoint.y]); - if (!tangent || !tangent[0] && !tangent[1]) { - tangent = [0, 0]; - } - var perpendicular = [-tangent[1] * offset, tangent[0] * offset]; - point2.x += perpendicular[0]; - point2.y += perpendicular[1]; - return point2; -}; -var pointsToPolygon = function pointsToPolygon2(points, z3) { - var length5 = points.length; - if (!length5) { - return ""; - } - var path = ""; - var str8 = ""; - for (var i4 = 0; i4 < length5; i4++) { - var item = points[i4]; - if (i4 === 0) { - str8 = "M{x} {y}"; - } else { - str8 = "L{x} {y}"; - } - path += substitute3(str8, item); - } - if (z3) { - path += "Z"; - } - return path; -}; -var pathToPoints2 = function pathToPoints3(path) { - var points = []; - path.forEach(function(seg) { - var command = seg[0]; - if (command !== "A") { - for (var i4 = 1; i4 < seg.length; i4 = i4 + 2) { - points.push([seg[i4], seg[i4 + 1]]); - } - } else { - var length_1 = seg.length; - points.push([seg[length_1 - 2], seg[length_1 - 1]]); - } - }); - return points; -}; -var getClosedSpline = function getClosedSpline2(points) { - if (points.length < 2) { - throw new Error("point length must largn than 2, now it's ".concat(points.length)); - } - var first = points[0]; - var second = points[1]; - var last17 = points[points.length - 1]; - var lastSecond = points[points.length - 2]; - points.unshift(last17); - points.unshift(lastSecond); - points.push(first); - points.push(second); - var closedPath = []; - for (var i4 = 1; i4 < points.length - 2; i4 += 1) { - var x0 = points[i4 - 1].x; - var y0 = points[i4 - 1].y; - var x1 = points[i4].x; - var y1 = points[i4].y; - var x22 = points[i4 + 1].x; - var y22 = points[i4 + 1].y; - var x32 = i4 !== points.length - 2 ? points[i4 + 2].x : x22; - var y32 = i4 !== points.length - 2 ? points[i4 + 2].y : y22; - var cp1x = x1 + (x22 - x0) / 6; - var cp1y = y1 + (y22 - y0) / 6; - var cp2x = x22 - (x32 - x1) / 6; - var cp2y = y22 - (y32 - y1) / 6; - closedPath.push(["C", cp1x, cp1y, cp2x, cp2y, x22, y22]); - } - closedPath.unshift(["M", last17.x, last17.y]); - return closedPath; -}; -var vecScaleTo = function vecScaleTo2(v3, length5) { - return vec2_exports.scale([0, 0], vec2_exports.normalize([0, 0], v3), length5); -}; -var unitNormal = function unitNormal2(p0, p1) { - var n3 = [p0[1] - p1[1], p1[0] - p0[0]]; - var nLength = Math.sqrt(n3[0] * n3[0] + n3[1] * n3[1]); - if (nLength === 0) { - throw new Error("p0 should not be equal to p1"); - } - return [n3[0] / nLength, n3[1] / nLength]; -}; -var vecFrom = function vecFrom2(p0, p1) { - return [p1[0] - p0[0], p1[1] - p0[1]]; -}; -function roundedHull(polyPoints, padding3) { - var roundedHull1 = function roundedHull12(points) { - var p12 = [points[0][0], points[0][1] - padding3]; - var p22 = [points[0][0], points[0][1] + padding3]; - return "M ".concat(p12, " A ").concat(padding3, ",").concat(padding3, ",0,0,0,").concat(p22, " A ").concat(padding3, ",").concat(padding3, ",0,0,0,").concat(p12); - }; - var roundedHull2 = function roundedHull22(points) { - var offsetVector = vec2_exports.scale([0, 0], unitNormal(points[0], points[1]), padding3); - var invOffsetVector = vec2_exports.scale([0, 0], offsetVector, -1); - var p02 = vec2_exports.add([0, 0], points[0], offsetVector); - var p12 = vec2_exports.add([0, 0], points[1], offsetVector); - var p22 = vec2_exports.add([0, 0], points[1], invOffsetVector); - var p32 = vec2_exports.add([0, 0], points[0], invOffsetVector); - return "M ".concat(p02, " L ").concat(p12, " A ").concat([padding3, padding3, "0,0,0", p22].join(","), " L ").concat(p32, " A ").concat([padding3, padding3, "0,0,0", p02].join(",")); - }; - if (!polyPoints || polyPoints.length < 1) - return ""; - if (polyPoints.length === 1) - return roundedHull1(polyPoints); - if (polyPoints.length === 2) - return roundedHull2(polyPoints); - var segments = new Array(polyPoints.length); - for (var segmentIndex = 0; segmentIndex < segments.length; ++segmentIndex) { - var p0 = segmentIndex === 0 ? polyPoints[polyPoints.length - 1] : polyPoints[segmentIndex - 1]; - var p1 = polyPoints[segmentIndex]; - var offset = vec2_exports.scale([0, 0], unitNormal(p0, p1), padding3); - segments[segmentIndex] = [vec2_exports.add([0, 0], p0, offset), vec2_exports.add([0, 0], p1, offset)]; - } - var arcData = "A ".concat([padding3, padding3, "0,0,0,"].join(",")); - segments = segments.map(function(segment, index2) { - var pathFragment = ""; - if (index2 === 0) { - pathFragment = "M ".concat(segments[segments.length - 1][1], " "); - } - pathFragment += "".concat(arcData + segment[0], " L ").concat(segment[1]); - return pathFragment; - }); - return segments.join(" "); -} -function paddedHull(polyPoints, padding3) { - var pointCount = polyPoints.length; - var smoothHull1 = function smoothHull12(points) { - var p1 = [points[0][0], points[0][1] - padding3]; - var p22 = [points[0][0], points[0][1] + padding3]; - return "M ".concat(p1, " A ").concat([padding3, padding3, "0,0,0", p22].join(","), " A ").concat([padding3, padding3, "0,0,0", p1].join(",")); - }; - var smoothHull2 = function smoothHull22(points) { - var v3 = vecFrom(points[0], points[1]); - var extensionVec2 = vecScaleTo(v3, padding3); - var extension0 = vec2_exports.add([0, 0], points[0], vec2_exports.scale([0, 0], extensionVec2, -1)); - var extension1 = vec2_exports.add([0, 0], points[1], extensionVec2); - var tangentHalfLength = 1.2 * padding3; - var controlDelta = vecScaleTo(vec2_exports.normalize([0, 0], v3), tangentHalfLength); - var invControlDelta = vec2_exports.scale([0, 0], controlDelta, -1); - var control0 = vec2_exports.add([0, 0], extension0, invControlDelta); - var control1 = vec2_exports.add([0, 0], extension1, invControlDelta); - var control3 = vec2_exports.add([0, 0], extension0, controlDelta); - return "M ".concat(extension0, " C ").concat([control0, control1, extension1].join(","), " S ").concat([control3, extension0].join(","), " Z"); - }; - if (!polyPoints || pointCount < 1) - return ""; - if (pointCount === 1) - return smoothHull1(polyPoints); - if (pointCount === 2) - return smoothHull2(polyPoints); - var hullPoints = polyPoints.map(function(point2, index2) { - var pNext = polyPoints[(index2 + 1) % pointCount]; - return { - p: point2, - v: vec2_exports.normalize([0, 0], vecFrom(point2, pNext)) - }; - }); - for (var i4 = 0; i4 < hullPoints.length; ++i4) { - var priorIndex = i4 > 0 ? i4 - 1 : pointCount - 1; - var extensionVec = vec2_exports.normalize([0, 0], vec2_exports.add([0, 0], hullPoints[priorIndex].v, vec2_exports.scale([0, 0], hullPoints[i4].v, -1))); - hullPoints[i4].p = vec2_exports.add([0, 0], hullPoints[i4].p, vec2_exports.scale([0, 0], extensionVec, padding3)); - } - return hullPoints.map(function(obj) { - var point2 = obj.p; - return { - x: point2[0], - y: point2[1] - }; - }); -} - -// node_modules/@antv/g6-core/es/element/hull/convexHull.js -var cross4 = function cross5(a4, b10, o3) { - return (a4.y - o3.y) * (b10.x - o3.x) - (a4.x - o3.x) * (b10.y - o3.y); -}; -var genConvexHull = function genConvexHull2(items) { - var points = items.map(function(item) { - return { - x: item.getModel().x, - y: item.getModel().y - }; - }); - points.sort(function(a4, b10) { - return a4.x === b10.x ? a4.y - b10.y : a4.x - b10.x; - }); - if (points.length === 1) { - return points; - } - var lower = []; - for (var i4 = 0; i4 < points.length; i4++) { - while (lower.length >= 2 && cross4(lower[lower.length - 2], lower[lower.length - 1], points[i4]) <= 0) { - lower.pop(); - } - lower.push(points[i4]); - } - var upper = []; - for (var i4 = points.length - 1; i4 >= 0; i4--) { - while (upper.length >= 2 && cross4(upper[upper.length - 2], upper[upper.length - 1], points[i4]) <= 0) { - upper.pop(); - } - upper.push(points[i4]); - } - upper.pop(); - lower.pop(); - var strictHull = lower.concat(upper); - return strictHull; -}; - -// node_modules/@antv/g6-core/es/element/hull/bubbleset.js -var defaultOps = { - maxRoutingIterations: 100, - maxMarchingIterations: 100, - pixelGroupSize: 2, - edgeR0: 10, - edgeR1: 10, - nodeR0: 5, - nodeR1: 10, - morphBuffer: 5, - threshold: 1e-3, - skip: 16, - nodeInfluenceFactor: 1, - edgeInfluenceFactor: 1, - negativeNodeInfluenceFactor: -0.5 -}; -function MarchingSquares(contour, potentialArea, threshold) { - var marched = false; - var getVal = function getVal2(x6, y5) { - return potentialArea.cells[x6 + y5 * potentialArea.width]; - }; - var getState = function getState2(x6, y5) { - var squareVal = 0; - if (getVal(x6 - 1, y5 - 1) >= threshold) { - squareVal += 1; - } - if (getVal(x6, y5 - 1) > threshold) { - squareVal += 2; - } - if (getVal(x6 - 1, y5) > threshold) { - squareVal += 4; - } - if (getVal(x6, y5) > threshold) { - squareVal += 8; - } - return squareVal; - }; - var doMarch = function doMarch2(xPos, yPos) { - var x6 = xPos; - var y5 = yPos; - var prevX; - var prevY; - for (var i4 = 0; i4 < potentialArea.width * potentialArea.height; i4++) { - prevX = x6; - prevY = y5; - if (contour.findIndex(function(item) { - return item.x === x6 && item.y === y5; - }) > -1) { - if (contour[0].x !== x6 || contour[0].y !== y5) { - } else { - return true; - } - } else { - contour.push({ - x: x6, - y: y5 - }); - } - var state2 = getState(x6, y5); - switch (state2) { - case -1: - console.warn("Marched out of bounds"); - return true; - case 0: - case 3: - case 2: - case 7: - x6++; - break; - case 12: - case 14: - case 4: - x6--; - break; - case 6: - if (prevX === 0) { - if (prevY === -1) { - x6 -= 1; - } else { - x6 += 1; - } - } - break; - case 1: - case 13: - case 5: - y5--; - break; - case 9: - if (prevX === 1) { - if (prevY === 0) { - y5 -= 1; - } else { - y5 += 1; - } - } - break; - case 10: - case 8: - case 11: - y5++; - break; - default: - console.warn("Marching squares invalid state: ".concat(state2)); - return true; - } - } - }; - this.march = function() { - for (var x6 = 0; x6 < potentialArea.width && !marched; x6 += 1) { - for (var y5 = 0; y5 < potentialArea.height && !marched; y5 += 1) { - if (getVal(x6, y5) > threshold && getState(x6, y5) !== 15) { - marched = doMarch(x6, y5); - } - } - } - return marched; - }; -} -var initGridCells = function initGridCells2(width2, height, pixelGroupSize) { - var scaleWidth = Math.ceil(width2 / pixelGroupSize); - var scaleHeight = Math.ceil(height / pixelGroupSize); - var gridCells = new Float32Array(Math.max(0, scaleWidth * scaleHeight)).fill(0); - return { - cells: gridCells, - width: scaleWidth, - height: scaleHeight - }; -}; -var pickBestNeighbor = function pickBestNeighbor2(item, visited, nonMembers) { - var closestNeighbour = null; - var minCost = Number.POSITIVE_INFINITY; - visited.forEach(function(neighbourItem) { - var itemP = { - x: item.getModel().x, - y: item.getModel().y - }; - var neighbourItemP = { - x: neighbourItem.getModel().x, - y: neighbourItem.getModel().y - }; - var dist4 = squareDist(itemP, neighbourItemP); - var directLine = new Line7(itemP.x, itemP.y, neighbourItemP.x, neighbourItemP.y); - var numberObstacles = nonMembers.reduce(function(count2, _item) { - if (fractionToLine(_item, directLine) > 0) { - return count2 + 1; - } - return count2; - }, 0); - if (dist4 * Math.pow(numberObstacles + 1, 2) < minCost) { - closestNeighbour = neighbourItem; - minCost = dist4 * Math.pow(numberObstacles + 1, 2); - } - }); - return closestNeighbour; -}; -var getIntersectItem = function getIntersectItem2(items, line2) { - var minDistance = Number.POSITIVE_INFINITY; - var closestItem = null; - items.forEach(function(item) { - var distance15 = fractionToLine(item, line2); - if (distance15 >= 0 && distance15 < minDistance) { - closestItem = item; - minDistance = distance15; - } - }); - return closestItem; -}; -var computeRoute = function computeRoute2(directLine, nonMembers, maxRoutingIterations, morphBuffer) { - var checkedLines = []; - var linesToCheck = []; - linesToCheck.push(directLine); - var hasIntersection = true; - var iterations = 0; - var pointExists = function pointExists2(point2, lines) { - var flag = false; - lines.forEach(function(line2) { - if (flag) - return; - if (isPointsOverlap(point2, { - x: line2.x1, - y: line2.y1 - }) || isPointsOverlap(point2, { - x: line2.x2, - y: line2.y2 - })) { - flag = true; - } - }); - return flag; - }; - var isPointInNonMembers = function isPointInNonMembers2(point2, _nonMembers) { - for (var _i = 0, _nonMembers_1 = _nonMembers; _i < _nonMembers_1.length; _i++) { - var item = _nonMembers_1[_i]; - var bbox = item.getBBox(); - var itemContour = [[bbox.x, bbox.y], [bbox.x + bbox.width, bbox.y], [bbox.x, bbox.y + bbox.height], [bbox.x + bbox.width, bbox.y + bbox.height]]; - if (isPointInPolygon(itemContour, point2.x, point2.y)) { - return true; - } - } - return false; - }; - while (hasIntersection && iterations < maxRoutingIterations) { - hasIntersection = false; - var _loop_1 = function _loop_12() { - var line2 = linesToCheck.pop(); - var closestItem = getIntersectItem(nonMembers, line2); - if (closestItem) { - var _a6 = itemIntersectByLine(closestItem, line2), intersections_1 = _a6[0], countIntersections = _a6[1]; - if (countIntersections === 2) { - var testReroute = function testReroute2(isFirst) { - var tempMorphBuffer = morphBuffer; - var virtualNode = rerouteLine(closestItem, tempMorphBuffer, intersections_1, isFirst); - var exist = pointExists(virtualNode, linesToCheck) || pointExists(virtualNode, checkedLines); - var pointInside = isPointInNonMembers(virtualNode, nonMembers); - while (!exist && pointInside && tempMorphBuffer >= 1) { - tempMorphBuffer /= 1.5; - virtualNode = rerouteLine(closestItem, tempMorphBuffer, intersections_1, isFirst); - exist = pointExists(virtualNode, linesToCheck) || pointExists(virtualNode, checkedLines); - pointInside = isPointInNonMembers(virtualNode, nonMembers); - } - if (virtualNode && !exist && (!isFirst || !pointInside)) { - linesToCheck.push(new Line7(line2.x1, line2.y1, virtualNode.x, virtualNode.y)); - linesToCheck.push(new Line7(virtualNode.x, virtualNode.y, line2.x2, line2.y2)); - hasIntersection = true; - } - }; - testReroute(true); - if (!hasIntersection) { - testReroute(false); - } - } - } - if (!hasIntersection) { - checkedLines.push(line2); - } - iterations += 1; - }; - while (!hasIntersection && linesToCheck.length) { - _loop_1(); - } - } - while (linesToCheck.length) { - checkedLines.push(linesToCheck.pop()); - } - return checkedLines; -}; -function getRoute(item, nonMembers, visited, maxRoutingIterations, morphBuffer) { - var optimalNeighbor = pickBestNeighbor(item, visited, nonMembers); - if (optimalNeighbor === null) { - return []; - } - var mergeLines = function mergeLines2(checkedLines2) { - var finalRoute2 = []; - while (checkedLines2.length > 0) { - var line1 = checkedLines2.pop(); - if (checkedLines2.length === 0) { - finalRoute2.push(line1); - break; - } - var line2 = checkedLines2.pop(); - var mergeLine = new Line7(line1.x1, line1.y1, line2.x2, line2.y2); - var closestItem = getIntersectItem(nonMembers, mergeLine); - if (!closestItem) { - checkedLines2.push(mergeLine); - } else { - finalRoute2.push(line1); - checkedLines2.push(line2); - } - } - return finalRoute2; - }; - var directLine = new Line7(item.getModel().x, item.getModel().y, optimalNeighbor.getModel().x, optimalNeighbor.getModel().y); - var checkedLines = computeRoute(directLine, nonMembers, maxRoutingIterations, morphBuffer); - var finalRoute = mergeLines(checkedLines); - return finalRoute; -} -var genBubbleSet = function genBubbleSet2(members, nonMembers, ops) { - var options = Object.assign(defaultOps, ops); - var centroid = getPointsCenter(members.map(function(item) { - return { - x: item.getModel().x, - y: item.getModel().y - }; - })); - members = members.sort(function(a4, b10) { - return squareDist({ - x: a4.getModel().x, - y: a4.getModel().y - }, centroid) - squareDist({ - x: b10.getModel().x, - y: b10.getModel().y - }, centroid); - }); - var visited = []; - var virtualEdges = []; - members.forEach(function(item) { - var lines = getRoute(item, nonMembers, visited, options.maxRoutingIterations, options.morphBuffer); - lines.forEach(function(l4) { - virtualEdges.push(l4); - }); - visited.push(item); - }); - var activeRegion = getActiveRregion(members, virtualEdges, options.nodeR0); - var potentialArea = initGridCells(activeRegion.width, activeRegion.height, options.pixelGroupSize); - var contour = []; - var hull = []; - for (var iterations = 0; iterations < options.maxMarchingIterations; iterations++) { - fillPotentialArea(members, nonMembers, virtualEdges, activeRegion, potentialArea, options); - contour = []; - hull = []; - if (!new MarchingSquares(contour, potentialArea, options.threshold).march()) - continue; - var marchedPath = contour.map(function(point2) { - return { - x: Math.round(point2.x * options.pixelGroupSize + activeRegion.minX), - y: Math.round(point2.y * options.pixelGroupSize + activeRegion.minY) - }; - }); - if (marchedPath) { - var size14 = marchedPath.length; - if (options.skip > 1) { - size14 = Math.floor(marchedPath.length / options.skip); - while (size14 < 3 && options.skip > 1) { - options.skip -= 1; - size14 = Math.floor(marchedPath.length / options.skip); - } - } - for (var i4 = 0, j4 = 0; j4 < size14; j4 += 1, i4 += options.skip) { - hull.push({ - x: marchedPath[i4].x, - y: marchedPath[i4].y - }); - } - } - var isContourValid = function isContourValid2() { - for (var _i = 0, members_1 = members; _i < members_1.length; _i++) { - var item = members_1[_i]; - var hullPoints = hull.map(function(point2) { - return [point2.x, point2.y]; - }); - if (!isPointInPolygon(hullPoints, item.getBBox().centerX, item.getBBox().centerY)) - return false; - } - return true; - }; - if (hull && isContourValid()) { - return hull; - } - options.threshold *= 0.9; - if (iterations <= options.maxMarchingIterations * 0.5) { - options.memberInfluenceFactor *= 1.2; - options.edgeInfluenceFactor *= 1.2; - } else if (options.nonMemberInfluenceFactor !== 0 && nonMembers.length > 0) { - options.nonMemberInfluenceFactor *= 0.8; - } else { - break; - } - } - return hull; -}; -function getActiveRregion(members, edges, offset) { - var activeRegion = { - minX: Number.POSITIVE_INFINITY, - minY: Number.POSITIVE_INFINITY, - maxX: Number.NEGATIVE_INFINITY, - maxY: Number.NEGATIVE_INFINITY, - width: 0, - height: 0, - x: 0, - y: 0 - }; - var bboxes = []; - members.forEach(function(item) { - bboxes.push(item.getBBox()); - }); - edges.forEach(function(l4) { - bboxes.push(l4.getBBox()); - }); - for (var _i = 0, bboxes_1 = bboxes; _i < bboxes_1.length; _i++) { - var bbox = bboxes_1[_i]; - activeRegion.minX = (bbox.minX < activeRegion.minX ? bbox.minX : activeRegion.minX) - offset; - activeRegion.minY = (bbox.minY < activeRegion.minY ? bbox.minY : activeRegion.minY) - offset; - activeRegion.maxX = (bbox.maxX > activeRegion.maxX ? bbox.maxX : activeRegion.maxX) + offset; - activeRegion.maxY = (bbox.maxY > activeRegion.maxY ? bbox.maxY : activeRegion.maxY) + offset; - } - activeRegion.width = activeRegion.maxX - activeRegion.minX; - activeRegion.height = activeRegion.maxY - activeRegion.minY; - activeRegion.x = activeRegion.minX; - activeRegion.y = activeRegion.minY; - return activeRegion; -} -function fillPotentialArea(members, nonMembers, edges, activeRegion, potentialArea, options) { - function pos2GridIx3(x6, offset) { - var gridIx = Math.floor((x6 - offset) / options.pixelGroupSize); - return gridIx < 0 ? 0 : gridIx; - } - function gridIx2Pos(x6, offset) { - return x6 * options.pixelGroupSize + offset; - } - var nodeInfA = (options.nodeR0 - options.nodeR1) * (options.nodeR0 - options.nodeR1); - var edgeInfA = (options.edgeR0 - options.edgeR1) * (options.edgeR0 - options.edgeR1); - var getAffectedRegion = function getAffectedRegion2(bbox, thresholdR) { - var startX = Math.min(pos2GridIx3(bbox.minX, thresholdR + activeRegion.minX), potentialArea.width); - var startY = Math.min(pos2GridIx3(bbox.minY, thresholdR + activeRegion.minY), potentialArea.height); - var endX = Math.min(pos2GridIx3(bbox.maxX, -thresholdR + activeRegion.minX), potentialArea.width); - var endY = Math.min(pos2GridIx3(bbox.maxY, -thresholdR + activeRegion.minY), potentialArea.height); - return [startX, startY, endX, endY]; - }; - var addItemInfluence = function addItemInfluence2(item, influenceFactor) { - var bbox = item.getBBox(); - var _a6 = getAffectedRegion(bbox, options.nodeR1), startX = _a6[0], startY = _a6[1], endX = _a6[2], endY = _a6[3]; - for (var y5 = startY; y5 < endY; y5 += 1) { - for (var x6 = startX; x6 < endX; x6 += 1) { - if (influenceFactor < 0 && potentialArea[x6 + y5 * potentialArea.width] <= 0) { - continue; - } - var tempX = gridIx2Pos(x6, activeRegion.minX); - var tempY = gridIx2Pos(y5, activeRegion.minY); - var distanceSq = pointRectSquareDist({ - x: tempX, - y: tempY - }, { - x: bbox.minX, - y: bbox.minY, - width: bbox.width, - height: bbox.height - }); - if (distanceSq < Math.pow(options.nodeR1, 2)) { - var dr = Math.sqrt(distanceSq) - options.nodeR1; - potentialArea.cells[x6 + y5 * potentialArea.width] += influenceFactor * dr * dr; - } - } - } - }; - var addEdgeInfluence = function addEdgeInfluence2(line2, influenceFactor) { - var bbox = line2.getBBox(); - var _a6 = getAffectedRegion(bbox, options.edgeR1), startX = _a6[0], startY = _a6[1], endX = _a6[2], endY = _a6[3]; - for (var y5 = startY; y5 < endY; y5 += 1) { - for (var x6 = startX; x6 < endX; x6 += 1) { - if (influenceFactor < 0 && potentialArea.cells[x6 + y5 * potentialArea.width] <= 0) { - continue; - } - var tempX = gridIx2Pos(x6, activeRegion.minX); - var tempY = gridIx2Pos(y5, activeRegion.minY); - var minDistanceSq = pointLineSquareDist({ - x: tempX, - y: tempY - }, line2); - if (minDistanceSq < Math.pow(options.edgeR1, 2)) { - var mdr = Math.sqrt(minDistanceSq) - options.edgeR1; - potentialArea.cells[x6 + y5 * potentialArea.width] += influenceFactor * mdr * mdr; - } - } - } - }; - if (options.nodeInfluenceFactor) { - members.forEach(function(item) { - addItemInfluence(item, options.nodeInfluenceFactor / nodeInfA); - }); - } - if (options.edgeInfluenceFactor) { - edges.forEach(function(edge2) { - addEdgeInfluence(edge2, options.edgeInfluenceFactor / edgeInfA); - }); - } - if (options.negativeNodeInfluenceFactor) { - nonMembers.forEach(function(item) { - addItemInfluence(item, options.negativeNodeInfluenceFactor / nodeInfA); - }); - } -} -function rerouteLine(item, buffer, intersections, wrapNormal) { - var bbox = item.getBBox(); - var topIntersect = intersections[0], leftIntersect = intersections[1], bottomIntersect = intersections[2], rightIntersect = intersections[3]; - var cornerPos = { - topLeft: { - x: bbox.minX - buffer, - y: bbox.minY - buffer - }, - topRight: { - x: bbox.maxX + buffer, - y: bbox.minY - buffer - }, - bottomLeft: { - x: bbox.minX - buffer, - y: bbox.maxY + buffer - }, - bottomRight: { - x: bbox.maxX + buffer, - y: bbox.maxY + buffer - } - }; - var totalArea = bbox.height * bbox.width; - function calcHalfArea(intersect1, intersect2) { - return bbox.width * ((intersect1.y - bbox.minY + (intersect2.y - bbox.minY)) * 0.5); - } - if (leftIntersect) { - if (topIntersect) - return wrapNormal ? cornerPos.topLeft : cornerPos.bottomRight; - if (bottomIntersect) - return wrapNormal ? cornerPos.bottomLeft : cornerPos.topRight; - var topArea = calcHalfArea(leftIntersect, rightIntersect); - if (topArea < totalArea * 0.5) { - if (leftIntersect.y > rightIntersect.y) - return wrapNormal ? cornerPos.topLeft : cornerPos.bottomRight; - return wrapNormal ? cornerPos.topRight : cornerPos.bottomLeft; - } - if (leftIntersect.y < rightIntersect.y) - return wrapNormal ? cornerPos.bottomLeft : cornerPos.topRight; - return wrapNormal ? cornerPos.bottomRight : cornerPos.topLeft; - } - if (rightIntersect) { - if (topIntersect) - return wrapNormal ? cornerPos.topRight : cornerPos.bottomLeft; - if (bottomIntersect) - return wrapNormal ? cornerPos.bottomRight : cornerPos.topLeft; - } - var leftArea = calcHalfArea(topIntersect, bottomIntersect); - if (leftArea < totalArea * 0.5) { - if (topIntersect.x > bottomIntersect.x) - return wrapNormal ? cornerPos.topLeft : cornerPos.bottomRight; - return wrapNormal ? cornerPos.bottomLeft : cornerPos.topRight; - } - if (topIntersect.x < bottomIntersect.x) - return wrapNormal ? cornerPos.topRight : cornerPos.bottomLeft; - return wrapNormal ? cornerPos.bottomRight : cornerPos.topLeft; -} - -// node_modules/@antv/g6-core/es/item/hull.js -var Hull = function() { - function Hull2(graph, cfg) { - this.cfg = (0, import_util501.deepMix)(this.getDefaultCfg(), cfg); - this.graph = graph; - this.id = this.cfg.id; - this.group = this.cfg.group; - this.members = this.cfg.members.map(function(item) { - return (0, import_util501.isString)(item) ? graph.findById(item) : item; - }); - this.nonMembers = this.cfg.nonMembers.map(function(item) { - return (0, import_util501.isString)(item) ? graph.findById(item) : item; - }); - this.setPadding(); - this.setType(); - this.path = this.calcPath(this.members, this.nonMembers); - this.render(); - } - Hull2.prototype.getDefaultCfg = function() { - return { - id: "g6-hull", - type: "round-convex", - members: [], - nonMembers: [], - style: { - fill: "lightblue", - stroke: "blue", - opacity: 0.2 - }, - padding: 10 - }; - }; - Hull2.prototype.setPadding = function() { - var nodeSize = this.members.length && this.members[0].getKeyShape().getCanvasBBox().width / 2; - this.padding = this.cfg.padding > 0 ? this.cfg.padding + nodeSize : 10 + nodeSize; - this.cfg.bubbleCfg = { - nodeR0: this.padding - nodeSize, - nodeR1: this.padding - nodeSize, - morphBuffer: this.padding - nodeSize - }; - }; - Hull2.prototype.setType = function() { - this.type = this.cfg.type; - if (this.members.length < 3) { - this.type = "round-convex"; - } - if (this.type !== "round-convex" && this.type !== "smooth-convex" && this.type !== "bubble") { - console.warn("The hull type should be either round-convex, smooth-convex or bubble, round-convex is used by default."); - this.type = "round-convex"; - } - }; - Hull2.prototype.calcPath = function(members, nonMembers) { - var contour, path, hull; - switch (this.type) { - case "round-convex": - contour = genConvexHull(members); - hull = roundedHull(contour.map(function(p4) { - return [p4.x, p4.y]; - }), this.padding); - path = parsePathString2(hull); - break; - case "smooth-convex": - contour = genConvexHull(members); - if (contour.length === 2) { - hull = roundedHull(contour.map(function(p4) { - return [p4.x, p4.y]; - }), this.padding); - path = parsePathString2(hull); - } else if (contour.length > 2) { - hull = paddedHull(contour.map(function(p4) { - return [p4.x, p4.y]; - }), this.padding); - path = getClosedSpline(hull); - } - break; - case "bubble": - contour = genBubbleSet(members, nonMembers, this.cfg.bubbleCfg); - path = contour.length >= 2 && getClosedSpline(contour); - break; - default: - } - return path; - }; - Hull2.prototype.render = function() { - this.group.addShape("path", { - attrs: __assign({ - path: this.path - }, this.cfg.style), - id: this.id, - name: this.cfg.id, - capture: false - }); - this.group.toBack(); - }; - Hull2.prototype.addMember = function(item) { - if (!item) - return; - if ((0, import_util501.isString)(item)) - item = this.graph.findById(item); - this.members.push(item); - var index2 = this.nonMembers.indexOf(item); - if (index2 > -1) { - this.nonMembers.splice(index2, 1); - } - this.updateData(this.members, this.nonMembers); - return true; - }; - Hull2.prototype.addNonMember = function(item) { - if (!item) - return; - if ((0, import_util501.isString)(item)) - item = this.graph.findById(item); - this.nonMembers.push(item); - var index2 = this.members.indexOf(item); - if (index2 > -1) { - this.members.splice(index2, 1); - } - this.updateData(this.members, this.nonMembers); - return true; - }; - Hull2.prototype.removeMember = function(item) { - if (!item) - return; - if ((0, import_util501.isString)(item)) - item = this.graph.findById(item); - var index2 = this.members.indexOf(item); - if (index2 > -1) { - this.members.splice(index2, 1); - this.updateData(this.members, this.nonMembers); - return true; - } - return false; - }; - Hull2.prototype.removeNonMember = function(item) { - if (!item) - return; - if ((0, import_util501.isString)(item)) - item = this.graph.findById(item); - var index2 = this.nonMembers.indexOf(item); - if (index2 > -1) { - this.nonMembers.splice(index2, 1); - this.updateData(this.members, this.nonMembers); - return true; - } - return false; - }; - Hull2.prototype.updateData = function(members, nonMembers) { - var _this = this; - this.group.findById(this.id).remove(); - if (members) - this.members = members.map(function(item) { - return (0, import_util501.isString)(item) ? _this.graph.findById(item) : item; - }); - if (nonMembers) - this.nonMembers = nonMembers.map(function(item) { - return (0, import_util501.isString)(item) ? _this.graph.findById(item) : item; - }); - this.path = this.calcPath(this.members, this.nonMembers); - this.render(); - }; - Hull2.prototype.updateStyle = function(cfg) { - var path = this.group.findById(this.id); - path.attr(__assign({}, cfg)); - }; - Hull2.prototype.updateCfg = function(cfg) { - var _this = this; - this.cfg = (0, import_util501.deepMix)(this.cfg, cfg); - this.id = this.cfg.id; - this.group = this.cfg.group; - if (cfg.members) { - this.members = this.cfg.members.map(function(item) { - return (0, import_util501.isString)(item) ? _this.graph.findById(item) : item; - }); - } - if (cfg.nonMembers) { - this.nonMembers = this.cfg.nonMembers.map(function(item) { - return (0, import_util501.isString)(item) ? _this.graph.findById(item) : item; - }); - } - this.setPadding(); - this.setType(); - this.path = this.calcPath(this.members, this.nonMembers); - this.render(); - }; - Hull2.prototype.contain = function(item) { - var _this = this; - var nodeItem; - if ((0, import_util501.isString)(item)) { - nodeItem = this.graph.findById(item); - } else { - nodeItem = item; - } - var shapePoints; - var shape = nodeItem.getKeyShape(); - if (nodeItem.get("type") === "path") { - shapePoints = pathToPoints2(shape.attr("path")); - } else { - var shapeBBox = shape.getCanvasBBox(); - shapePoints = [[shapeBBox.minX, shapeBBox.minY], [shapeBBox.maxX, shapeBBox.minY], [shapeBBox.maxX, shapeBBox.maxY], [shapeBBox.minX, shapeBBox.maxY]]; - } - shapePoints = shapePoints.map(function(canvasPoint) { - var point2 = _this.graph.getPointByCanvas(canvasPoint[0], canvasPoint[1]); - return [point2.x, point2.y]; - }); - return isPolygonsIntersect2(shapePoints, pathToPoints2(this.path)); - }; - Hull2.prototype.destroy = function() { - this.group.remove(); - this.cfg = null; - }; - return Hull2; -}(); -var hull_default = Hull; - -// node_modules/@antv/g6-core/es/graph/graph.js -var transform9 = ext_exports.transform; -var NODE2 = "node"; -var AbstractGraph = function(_super) { - __extends(AbstractGraph2, _super); - function AbstractGraph2(cfg) { - var _this = _super.call(this) || this; - _this.cfg = (0, import_util502.deepMix)(_this.getDefaultCfg(), cfg); - _this.init(); - _this.animating = false; - _this.destroyed = false; - if (_this.cfg.enabledStack) { - _this.undoStack = new stack_default2(_this.cfg.maxStep); - _this.redoStack = new stack_default2(_this.cfg.maxStep); - } - return _this; - } - AbstractGraph2.prototype.init = function() { - this.initCanvas(); - var viewController = new view_default2(this); - var modeController = new mode_default(this); - var itemController = new item_default2(this); - var stateController = new state_default2(this); - this.set({ - viewController, - modeController, - itemController, - stateController - }); - this.initLayoutController(); - this.initEventController(); - this.initGroups(); - this.initPlugins(); - }; - AbstractGraph2.prototype.initGroups = function() { - var canvas = this.get("canvas"); - if (!canvas) - return; - var el = canvas.get("el"); - var _a6 = (el || {}).id, id = _a6 === void 0 ? "g6" : _a6; - var group3 = canvas.addGroup({ - id: "".concat(id, "-root"), - className: global_default.rootContainerClassName - }); - if (this.get("groupByTypes")) { - var edgeGroup = group3.addGroup({ - id: "".concat(id, "-edge"), - className: global_default.edgeContainerClassName - }); - var nodeGroup = group3.addGroup({ - id: "".concat(id, "-node"), - className: global_default.nodeContainerClassName - }); - var comboGroup = group3.addGroup({ - id: "".concat(id, "-combo"), - className: global_default.comboContainerClassName - }); - comboGroup.toBack(); - this.set({ - nodeGroup, - edgeGroup, - comboGroup - }); - } - var delegateGroup = group3.addGroup({ - id: "".concat(id, "-delegate"), - className: global_default.delegateContainerClassName - }); - this.set({ - delegateGroup - }); - this.set("group", group3); - }; - AbstractGraph2.prototype.getDefaultCfg = function() { - return { - container: void 0, - width: void 0, - height: void 0, - renderer: "canvas", - modes: {}, - plugins: [], - data: {}, - fitViewPadding: 10, - minZoom: 0.2, - maxZoom: 10, - event: true, - groupByTypes: true, - directed: false, - autoPaint: true, - nodes: [], - edges: [], - combos: [], - vedges: [], - itemMap: {}, - linkCenter: false, - defaultNode: {}, - defaultEdge: {}, - nodeStateStyles: {}, - edgeStateStyles: {}, - states: {}, - animate: false, - animateCfg: { - onFrame: void 0, - duration: 500, - easing: "easeLinear" - }, - callback: void 0, - enabledStack: false, - maxStep: 10, - tooltips: [] - }; - }; - AbstractGraph2.prototype.set = function(key, val) { - if ((0, import_util502.isPlainObject)(key)) { - this.cfg = __assign(__assign({}, this.cfg), key); - } else { - this.cfg[key] = val; - } - return this; - }; - AbstractGraph2.prototype.get = function(key) { - var _a6; - return (_a6 = this.cfg) === null || _a6 === void 0 ? void 0 : _a6[key]; - }; - AbstractGraph2.prototype.getGroup = function() { - return this.get("group"); - }; - AbstractGraph2.prototype.getContainer = function() { - return this.get("container"); - }; - AbstractGraph2.prototype.getMinZoom = function() { - return this.get("minZoom"); - }; - AbstractGraph2.prototype.setMinZoom = function(ratio) { - return this.set("minZoom", ratio); - }; - AbstractGraph2.prototype.getMaxZoom = function() { - return this.get("maxZoom"); - }; - AbstractGraph2.prototype.setMaxZoom = function(ratio) { - return this.set("maxZoom", ratio); - }; - AbstractGraph2.prototype.getWidth = function() { - return this.get("width"); - }; - AbstractGraph2.prototype.getHeight = function() { - return this.get("height"); - }; - AbstractGraph2.prototype.clearItemStates = function(item, states) { - if ((0, import_util502.isString)(item)) { - item = this.findById(item); - } - var itemController = this.get("itemController"); - if (!states) { - states = item.get("states"); - } - itemController.clearItemStates(item, states); - var stateController = this.get("stateController"); - stateController.updateStates(item, states, false); - }; - AbstractGraph2.prototype.node = function(nodeFn) { - if (typeof nodeFn === "function") { - this.set("nodeMapper", nodeFn); - } - }; - AbstractGraph2.prototype.edge = function(edgeFn) { - if (typeof edgeFn === "function") { - this.set("edgeMapper", edgeFn); - } - }; - AbstractGraph2.prototype.combo = function(comboFn) { - if (typeof comboFn === "function") { - this.set("comboMapper", comboFn); - } - }; - AbstractGraph2.prototype.findById = function(id) { - return this.get("itemMap")[id]; - }; - AbstractGraph2.prototype.find = function(type2, fn) { - var result; - var items = this.get("".concat(type2, "s")); - (0, import_util502.each)(items, function(item, i4) { - if (fn(item, i4)) { - result = item; - return result; - } - }); - return result; - }; - AbstractGraph2.prototype.findAll = function(type2, fn) { - var result = []; - (0, import_util502.each)(this.get("".concat(type2, "s")), function(item, i4) { - if (fn(item, i4)) { - result.push(item); - } - }); - return result; - }; - AbstractGraph2.prototype.findAllByState = function(type2, state2) { - return this.findAll(type2, function(item) { - return item.hasState(state2); - }); - }; - AbstractGraph2.prototype.getAnimateCfgWithCallback = function(_a6) { - var animateCfg = _a6.animateCfg, callback = _a6.callback; - var animateConfig; - if (!animateCfg) { - animateConfig = { - duration: 500, - callback - }; - } else { - animateConfig = (0, import_util502.clone)(animateCfg); - if (animateCfg.callback) { - var animateCfgCallback_1 = animateCfg.callback; - animateConfig.callback = function() { - callback(); - animateCfgCallback_1(); - }; - } else { - animateConfig.callback = callback; - } - } - return animateConfig; - }; - AbstractGraph2.prototype.translate = function(dx, dy, animate, animateCfg) { - var _this = this; - var group3 = this.get("group"); - var matrix = (0, import_util502.clone)(group3.getMatrix()); - if (!matrix) { - matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - if (animate) { - var animateConfig = this.getAnimateCfgWithCallback({ - animateCfg, - callback: function callback() { - return _this.emit("viewportchange", { - action: "translate", - matrix: group3.getMatrix() - }); - } - }); - move(group3, { - x: group3.getCanvasBBox().x + dx, - y: group3.getCanvasBBox().y + dy - }, animate, animateConfig || { - duration: 500, - easing: "easeCubic" - }); - } else { - matrix = transform9(matrix, [["t", dx, dy]]); - group3.setMatrix(matrix); - this.emit("viewportchange", { - action: "translate", - matrix - }); - this.autoPaint(); - } - }; - AbstractGraph2.prototype.moveTo = function(x6, y5, animate, animateCfg) { - var group3 = this.get("group"); - move(group3, { - x: x6, - y: y5 - }, animate, animateCfg || { - duration: 500, - easing: "easeCubic" - }); - this.emit("viewportchange", { - action: "move", - matrix: group3.getMatrix() - }); - }; - AbstractGraph2.prototype.fitView = function(padding3, rules) { - if (padding3) { - this.set("fitViewPadding", padding3); - } - var viewController = this.get("viewController"); - if (rules) { - viewController.fitViewByRules(rules); - } else { - viewController.fitView(); - } - this.autoPaint(); - }; - AbstractGraph2.prototype.fitCenter = function() { - var viewController = this.get("viewController"); - viewController.fitCenter(); - this.autoPaint(); - }; - AbstractGraph2.prototype.addBehaviors = function(behaviors2, modes) { - var modeController = this.get("modeController"); - modeController.manipulateBehaviors(behaviors2, modes, true); - return this; - }; - AbstractGraph2.prototype.removeBehaviors = function(behaviors2, modes) { - var modeController = this.get("modeController"); - modeController.manipulateBehaviors(behaviors2, modes, false); - return this; - }; - AbstractGraph2.prototype.updateBehavior = function(behavior, newCfg, mode) { - var modeController = this.get("modeController"); - modeController.updateBehavior(behavior, newCfg, mode); - return this; - }; - AbstractGraph2.prototype.zoom = function(ratio, center2, animate, animateCfg) { - var _this = this; - var group3 = this.get("group"); - var matrix = (0, import_util502.clone)(group3.getMatrix()); - var minZoom = this.get("minZoom"); - var maxZoom = this.get("maxZoom"); - if (!matrix) { - matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - if (center2) { - matrix = transform9(matrix, [["t", -center2.x, -center2.y], ["s", ratio, ratio], ["t", center2.x, center2.y]]); - } else { - matrix = transform9(matrix, [["s", ratio, ratio]]); - } - if (minZoom && matrix[0] < minZoom || maxZoom && matrix[0] > maxZoom) { - return false; - } - if (animate) { - var aniMatrix_1 = (0, import_util502.clone)(group3.getMatrix()); - if (!aniMatrix_1) { - aniMatrix_1 = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - var initialRatio_1 = aniMatrix_1[0]; - var targetRatio_1 = initialRatio_1 * ratio; - var animateConfig = this.getAnimateCfgWithCallback({ - animateCfg, - callback: function callback() { - return _this.emit("viewportchange", { - action: "zoom", - matrix: group3.getMatrix() - }); - } - }); - group3.animate(function(ratio2) { - if (ratio2 === 1) { - aniMatrix_1 = matrix; - } else { - var scale12 = lerp6(initialRatio_1, targetRatio_1, ratio2) / aniMatrix_1[0]; - if (center2) { - aniMatrix_1 = transform9(aniMatrix_1, [["t", -center2.x, -center2.y], ["s", scale12, scale12], ["t", center2.x, center2.y]]); - } else { - aniMatrix_1 = transform9(aniMatrix_1, [["s", scale12, scale12]]); - } - } - return { - matrix: aniMatrix_1 - }; - }, animateConfig); - } else { - group3.setMatrix(matrix); - this.emit("viewportchange", { - action: "zoom", - matrix - }); - this.autoPaint(); - } - return true; - }; - AbstractGraph2.prototype.zoomTo = function(toRatio, center2, animate, animateCfg) { - var ratio = toRatio / this.getZoom(); - return this.zoom(ratio, center2, animate, animateCfg); - }; - AbstractGraph2.prototype.focusItem = function(item, animate, animateCfg) { - var viewController = this.get("viewController"); - var isAnimate = false; - if (animate) - isAnimate = true; - else if (animate === void 0) - isAnimate = this.get("animate"); - var curAniamteCfg = {}; - if (animateCfg) - curAniamteCfg = animateCfg; - else if (animateCfg === void 0) - curAniamteCfg = this.get("animateCfg"); - viewController.focus(item, isAnimate, curAniamteCfg); - this.autoPaint(); - }; - AbstractGraph2.prototype.autoPaint = function() { - if (this.get("autoPaint")) { - this.paint(); - } - }; - AbstractGraph2.prototype.paint = function() { - this.emit("beforepaint"); - this.get("canvas").draw(); - this.emit("afterpaint"); - }; - AbstractGraph2.prototype.getPointByClient = function(clientX, clientY) { - var viewController = this.get("viewController"); - return viewController.getPointByClient(clientX, clientY); - }; - AbstractGraph2.prototype.getClientByPoint = function(x6, y5) { - var viewController = this.get("viewController"); - return viewController.getClientByPoint(x6, y5); - }; - AbstractGraph2.prototype.getPointByCanvas = function(canvasX, canvasY) { - var viewController = this.get("viewController"); - return viewController.getPointByCanvas(canvasX, canvasY); - }; - AbstractGraph2.prototype.getCanvasByPoint = function(x6, y5) { - var viewController = this.get("viewController"); - return viewController.getCanvasByPoint(x6, y5); - }; - AbstractGraph2.prototype.getGraphCenterPoint = function() { - var bbox = this.get("group").getCanvasBBox(); - return { - x: (bbox.minX + bbox.maxX) / 2, - y: (bbox.minY + bbox.maxY) / 2 - }; - }; - AbstractGraph2.prototype.getViewPortCenterPoint = function() { - return this.getPointByCanvas(this.get("width") / 2, this.get("height") / 2); - }; - AbstractGraph2.prototype.showItem = function(item, stack) { - if (stack === void 0) { - stack = true; - } - var itemController = this.get("itemController"); - var object = itemController.changeItemVisibility(item, true); - if (stack && this.get("enabledStack")) { - var id = object.getID(); - var type2 = object.getType(); - var before = {}; - var after = {}; - switch (type2) { - case "node": - before.nodes = [{ - id, - visible: false - }]; - after.nodes = [{ - id, - visible: true - }]; - break; - case "edge": - before.nodes = [{ - id, - visible: false - }]; - after.edges = [{ - id, - visible: true - }]; - break; - case "combo": - before.nodes = [{ - id, - visible: false - }]; - after.combos = [{ - id, - visible: true - }]; - break; - default: - break; - } - this.pushStack("visible", { - before, - after - }); - } - }; - AbstractGraph2.prototype.hideItem = function(item, stack) { - if (stack === void 0) { - stack = true; - } - var itemController = this.get("itemController"); - var object = itemController.changeItemVisibility(item, false); - if (stack && this.get("enabledStack")) { - var id = object.getID(); - var type2 = object.getType(); - var before = {}; - var after = {}; - switch (type2) { - case "node": - before.nodes = [{ - id, - visible: true - }]; - after.nodes = [{ - id, - visible: false - }]; - break; - case "edge": - before.nodes = [{ - id, - visible: true - }]; - after.edges = [{ - id, - visible: false - }]; - break; - case "combo": - before.nodes = [{ - id, - visible: true - }]; - after.combos = [{ - id, - visible: false - }]; - break; - default: - break; - } - this.pushStack("visible", { - before, - after - }); - } - }; - AbstractGraph2.prototype.refreshItem = function(item) { - var itemController = this.get("itemController"); - itemController.refreshItem(item); - }; - AbstractGraph2.prototype.setAutoPaint = function(auto) { - var self2 = this; - self2.set("autoPaint", auto); - var canvas = self2.get("canvas"); - canvas.set("autoDraw", auto); - }; - AbstractGraph2.prototype.remove = function(item, stack) { - if (stack === void 0) { - stack = true; - } - this.removeItem(item, stack); - }; - AbstractGraph2.prototype.removeItem = function(item, stack) { - if (stack === void 0) { - stack = true; - } - var nodeItem = item; - if ((0, import_util502.isString)(item)) - nodeItem = this.findById(item); - if (!nodeItem && (0, import_util502.isString)(item)) { - console.warn("The item to be removed does not exist!"); - } else if (nodeItem) { - var type2 = ""; - if (nodeItem.getType) - type2 = nodeItem.getType(); - if (stack && this.get("enabledStack")) { - var deletedModel = __assign(__assign({}, nodeItem.getModel()), { - itemType: type2 - }); - var before = {}; - switch (type2) { - case "node": { - before.nodes = [deletedModel]; - before.edges = []; - var edges = nodeItem.getEdges(); - for (var i4 = edges.length - 1; i4 >= 0; i4--) { - before.edges.push(__assign(__assign({}, edges[i4].getModel()), { - itemType: "edge" - })); - } - break; - } - case "edge": - before.edges = [deletedModel]; - break; - case "combo": - before.combos = [deletedModel]; - break; - default: - break; - } - this.pushStack("delete", { - before, - after: {} - }); - } - if (type2 === "node") { - var model = nodeItem.getModel(); - if (model.comboId) { - this.updateComboTree(nodeItem, void 0, false); - } - } - var itemController = this.get("itemController"); - itemController.removeItem(nodeItem); - if (type2 === "combo") { - var newComboTrees = reconstructTree(this.get("comboTrees")); - this.set("comboTrees", newComboTrees); - } - } - }; - AbstractGraph2.prototype.addItem = function(type2, model, stack, sortCombo) { - if (stack === void 0) { - stack = true; - } - if (sortCombo === void 0) { - sortCombo = true; - } - var currentComboSorted = this.get("comboSorted"); - this.set("comboSorted", currentComboSorted && !sortCombo); - var itemController = this.get("itemController"); - if (!singleDataValidation(type2, model)) { - return false; - } - if (model.id && this.findById(model.id)) { - console.warn("This item exists already. Be sure the id %c".concat(model.id, "%c is unique."), "font-size: 20px; color: red;", ""); - return; - } - var item; - var comboTrees = this.get("comboTrees"); - if (!comboTrees) - comboTrees = []; - if (type2 === "combo") { - var itemMap_1 = this.get("itemMap"); - var foundParent_1 = false; - comboTrees.forEach(function(ctree) { - if (foundParent_1) - return; - traverseTreeUp(ctree, function(child) { - if (model.parentId === child.id) { - foundParent_1 = true; - var newCombo2 = __assign({ - id: model.id, - depth: child.depth + 2 - }, model); - if (child.children) - child.children.push(newCombo2); - else - child.children = [newCombo2]; - model.depth = newCombo2.depth; - item = itemController.addItem(type2, model); - } - var childItem = itemMap_1[child.id]; - if (foundParent_1 && childItem && childItem.getType && childItem.getType() === "combo") { - itemController.updateCombo(childItem, child.children); - } - return true; - }); - }); - if (!foundParent_1) { - var newCombo = __assign({ - id: model.id, - depth: 0 - }, model); - model.depth = newCombo.depth; - comboTrees.push(newCombo); - item = itemController.addItem(type2, model); - } - this.set("comboTrees", comboTrees); - } else if (type2 === "node" && (0, import_util502.isString)(model.comboId) && comboTrees) { - var parentCombo = this.findById(model.comboId); - if (parentCombo && parentCombo.getType && parentCombo.getType() !== "combo") { - console.warn("'".concat(model.comboId, "' is not a id of a combo in the graph, the node will be added without combo.")); - } - item = itemController.addItem(type2, model); - var itemMap_2 = this.get("itemMap"); - var foundParent_2 = false, foundNode_1 = false; - (comboTrees || []).forEach(function(ctree) { - if (foundNode_1 || foundParent_2) - return; - traverseTreeUp(ctree, function(child) { - if (child.id === model.id) { - foundNode_1 = true; - return false; - } - if (model.comboId === child.id && !foundNode_1) { - foundParent_2 = true; - var cloneNode = (0, import_util502.clone)(model); - cloneNode.itemType = "node"; - if (child.children) - child.children.push(cloneNode); - else - child.children = [cloneNode]; - cloneNode.depth = child.depth + 1; - } - if (foundParent_2 && itemMap_2[child.id].getType && itemMap_2[child.id].getType() === "combo") { - itemController.updateCombo(itemMap_2[child.id], child.children); - } - return true; - }); - }); - } else { - item = itemController.addItem(type2, model); - } - if (type2 === "node" && model.comboId || type2 === "combo" && model.parentId) { - var parentCombo = this.findById(model.comboId || model.parentId); - if (parentCombo && parentCombo.getType && parentCombo.getType() === "combo") - parentCombo.addChild(item); - } - var combos = this.get("combos"); - if (combos && combos.length > 0) { - this.sortCombos(); - } - this.autoPaint(); - if (stack && this.get("enabledStack")) { - var addedModel = __assign(__assign({}, item.getModel()), { - itemType: type2 - }); - var after = {}; - switch (type2) { - case "node": - after.nodes = [addedModel]; - break; - case "edge": - after.edges = [addedModel]; - break; - case "combo": - after.combos = [addedModel]; - break; - default: - break; - } - this.pushStack("add", { - before: {}, - after - }); - } - return item; - }; - AbstractGraph2.prototype.add = function(type2, model, stack, sortCombo) { - if (stack === void 0) { - stack = true; - } - if (sortCombo === void 0) { - sortCombo = true; - } - return this.addItem(type2, model, stack, sortCombo); - }; - AbstractGraph2.prototype.updateItem = function(item, cfg, stack) { - var _this = this; - if (stack === void 0) { - stack = true; - } - var itemController = this.get("itemController"); - var currentItem; - if ((0, import_util502.isString)(item)) { - currentItem = this.findById(item); - } else { - currentItem = item; - } - var UnupdateModel = (0, import_util502.clone)(currentItem.getModel()); - var type2 = ""; - if (currentItem.getType) - type2 = currentItem.getType(); - var states = __spreadArray([], currentItem.getStates(), true); - if (type2 === "combo") { - (0, import_util502.each)(states, function(state2) { - return _this.setItemState(currentItem, state2, false); - }); - } - itemController.updateItem(currentItem, cfg); - if (type2 === "combo") { - (0, import_util502.each)(states, function(state2) { - return _this.setItemState(currentItem, state2, true); - }); - } - if (stack && this.get("enabledStack")) { - var before = { - nodes: [], - edges: [], - combos: [] - }; - var after = { - nodes: [], - edges: [], - combos: [] - }; - var afterModel = __assign({ - id: UnupdateModel.id - }, cfg); - switch (type2) { - case "node": - before.nodes.push(UnupdateModel); - after.nodes.push(afterModel); - break; - case "edge": - before.edges.push(UnupdateModel); - after.edges.push(afterModel); - break; - case "combo": - before.combos.push(UnupdateModel); - after.combos.push(afterModel); - break; - default: - break; - } - if (type2 === "node") { - before.nodes.push(UnupdateModel); - } - this.pushStack("update", { - before, - after - }); - } - }; - AbstractGraph2.prototype.update = function(item, cfg, stack) { - if (stack === void 0) { - stack = true; - } - this.updateItem(item, cfg, stack); - }; - AbstractGraph2.prototype.setItemState = function(item, state2, value2) { - if ((0, import_util502.isString)(item)) { - item = this.findById(item); - } - var itemController = this.get("itemController"); - itemController.setItemState(item, state2, value2); - var stateController = this.get("stateController"); - if ((0, import_util502.isString)(value2)) { - stateController.updateState(item, "".concat(state2, ":").concat(value2), true); - } else { - stateController.updateState(item, state2, value2); - } - }; - AbstractGraph2.prototype.priorityState = function(item, state2) { - var itemController = this.get("itemController"); - itemController.priorityState(item, state2); - }; - AbstractGraph2.prototype.data = function(data3) { - dataValidation(data3); - this.set("data", data3); - }; - AbstractGraph2.prototype.render = function() { - var self2 = this; - this.set("comboSorted", false); - var data3 = this.get("data"); - if (this.get("enabledStack")) { - this.clearStack(); - } - if (!data3) { - throw new Error("data must be defined first"); - } - var _a6 = data3.nodes, nodes = _a6 === void 0 ? [] : _a6, _b = data3.edges, edges = _b === void 0 ? [] : _b, _c = data3.combos, combos = _c === void 0 ? [] : _c; - this.clear(true); - this.emit("beforerender"); - (0, import_util502.each)(nodes, function(node) { - self2.add("node", node, false, false); - }); - if (combos && combos.length !== 0) { - var comboTrees = plainCombosToTrees(combos, nodes); - this.set("comboTrees", comboTrees); - self2.addCombos(combos); - } - (0, import_util502.each)(edges, function(edge2) { - self2.add("edge", edge2, false, false); - }); - var animate = self2.get("animate"); - if (self2.get("fitView") || self2.get("fitCenter")) { - self2.set("animate", false); - } - var layoutController = self2.get("layoutController"); - if (layoutController) { - layoutController.layout(success); - if (this.destroyed) - return; - } else { - if (self2.get("fitView")) { - self2.fitView(); - } - if (self2.get("fitCenter")) { - self2.fitCenter(); - } - self2.emit("afterrender"); - self2.set("animate", animate); - } - function success() { - if (self2.get("fitView")) { - self2.fitView(); - } else if (self2.get("fitCenter")) { - self2.fitCenter(); - } - self2.autoPaint(); - self2.emit("afterrender"); - if (self2.get("fitView") || self2.get("fitCenter")) { - self2.set("animate", animate); - } - } - if (!this.get("groupByTypes")) { - if (combos && combos.length !== 0) { - this.sortCombos(); - } else { - if (data3.nodes && data3.edges && data3.nodes.length < data3.edges.length) { - var nodesArr = this.getNodes(); - nodesArr.forEach(function(node) { - node.toFront(); - }); - } else { - var edgesArr = this.getEdges(); - edgesArr.forEach(function(edge2) { - edge2.toBack(); - }); - } - } - } - if (this.get("enabledStack")) { - this.pushStack("render"); - } - }; - AbstractGraph2.prototype.read = function(data3) { - this.data(data3); - this.render(); - }; - AbstractGraph2.prototype.diffItems = function(type2, items, models) { - var self2 = this; - var item; - var itemMap = this.get("itemMap"); - (0, import_util502.each)(models, function(model) { - item = itemMap[model.id]; - if (item) { - if (self2.get("animate") && type2 === NODE2) { - var containerMatrix = item.getContainer().getMatrix(); - if (!containerMatrix) - containerMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - item.set("originAttrs", { - x: containerMatrix[6], - y: containerMatrix[7] - }); - } - self2.updateItem(item, model, false); - } else { - item = self2.addItem(type2, model, false); - } - if (item) - items["".concat(type2, "s")].push(item); - }); - }; - AbstractGraph2.prototype.changeData = function(data3, stack) { - if (stack === void 0) { - stack = true; - } - var self2 = this; - if (!dataValidation(data3)) { - return this; - } - if (stack && this.get("enabledStack")) { - this.pushStack("changedata", { - before: self2.save(), - after: data3 - }); - } - this.set("comboSorted", false); - this.removeHulls(); - this.getNodes().map(function(node) { - return self2.clearItemStates(node); - }); - this.getEdges().map(function(edge2) { - return self2.clearItemStates(edge2); - }); - var canvas = this.get("canvas"); - var localRefresh = canvas.get("localRefresh"); - canvas.set("localRefresh", false); - if (!self2.get("data")) { - self2.data(data3); - self2.render(); - } - var itemMap = this.get("itemMap"); - var items = { - nodes: [], - edges: [] - }; - var combosData = data3.combos; - if (combosData) { - var comboTrees = plainCombosToTrees(combosData, data3.nodes); - this.set("comboTrees", comboTrees); - } else { - this.set("comboTrees", []); - } - this.diffItems("node", items, data3.nodes); - (0, import_util502.each)(itemMap, function(item, id) { - itemMap[id].getModel().depth = 0; - if (item.getType && item.getType() === "edge") - return; - if (item.getType && item.getType() === "combo") { - delete itemMap[id]; - item.destroy(); - } else if (items.nodes.indexOf(item) < 0) { - delete itemMap[id]; - self2.remove(item, false); - } - }); - var comboItems = this.getCombos(); - var combosLength = comboItems.length; - for (var i4 = combosLength - 1; i4 >= 0; i4--) { - if (comboItems[i4].destroyed) { - comboItems.splice(i4, 1); - } - } - if (combosData) { - self2.addCombos(combosData); - if (!this.get("groupByTypes")) { - this.sortCombos(); - } - } - this.diffItems("edge", items, data3.edges); - (0, import_util502.each)(itemMap, function(item, id) { - if (item.getType && (item.getType() === "node" || item.getType() === "combo")) - return; - if (items.edges.indexOf(item) < 0) { - delete itemMap[id]; - self2.remove(item, false); - } - }); - this.set({ - nodes: items.nodes, - edges: items.edges - }); - var layoutController = this.get("layoutController"); - if (layoutController) { - layoutController.changeData(); - if (self2.get("animate") && !layoutController.getLayoutType()) { - self2.positionsAnimate(); - } else { - self2.autoPaint(); - } - } - setTimeout(function() { - canvas.set("localRefresh", localRefresh); - }, 16); - return this; - }; - AbstractGraph2.prototype.addCombos = function(combos) { - var self2 = this; - var comboTrees = self2.get("comboTrees"); - var itemController = this.get("itemController"); - itemController.addCombos(comboTrees, combos); - }; - AbstractGraph2.prototype.createCombo = function(combo, children) { - var _this = this; - this.set("comboSorted", false); - var comboId = ""; - var comboConfig; - if (!combo) - return; - if ((0, import_util502.isString)(combo)) { - comboId = combo; - comboConfig = { - id: combo - }; - } else { - comboId = combo.id; - if (!comboId) { - console.warn("Create combo failed. Please assign a unique string id for the adding combo."); - return; - } - comboConfig = combo; - } - var trees = children.map(function(elementId) { - var item = _this.findById(elementId); - var model = item.getModel(); - var type2 = ""; - if (item.getType) - type2 = item.getType(); - var cItem = { - id: item.getID(), - itemType: type2 - }; - if (type2 === "combo") { - cItem.parentId = comboId; - model.parentId = comboId; - } else if (type2 === "node") { - cItem.comboId = comboId; - model.comboId = comboId; - } - return cItem; - }); - comboConfig.children = trees; - this.addItem("combo", comboConfig, false); - this.set("comboSorted", false); - var comboTrees = this.get("comboTrees"); - (comboTrees || []).forEach(function(ctree) { - traverseTreeUp(ctree, function(child) { - if (child.id === comboId) { - child.itemType = "combo"; - child.children = trees; - return false; - } - return true; - }); - }); - if (comboTrees) { - this.sortCombos(); - } - }; - AbstractGraph2.prototype.uncombo = function(combo) { - var _this = this; - var _a6; - var self2 = this; - var comboItem = combo; - if ((0, import_util502.isString)(combo)) { - comboItem = this.findById(combo); - } - if (!comboItem || comboItem.getType && comboItem.getType() !== "combo") { - console.warn("The item is not a combo!"); - return; - } - var parentId = comboItem.getModel().parentId; - var comboTrees = self2.get("comboTrees"); - if (!comboTrees) - comboTrees = []; - var itemMap = this.get("itemMap"); - var comboId = comboItem.get("id"); - var treeToBeUncombo; - var brothers = []; - var comboItems = this.get("combos"); - var parentItem = this.findById(parentId); - comboTrees.forEach(function(ctree) { - if (treeToBeUncombo) - return; - traverseTreeUp(ctree, function(subtree) { - var _a7; - if (subtree.id === comboId) { - treeToBeUncombo = subtree; - var edges = comboItem.getEdges(); - edges.forEach(function(edge2) { - _this.removeItem(edge2, false); - }); - var index3 = comboItems.indexOf(comboItem); - comboItems.splice(index3, 1); - delete itemMap[comboId]; - comboItem.destroy(); - _this.emit("afterremoveitem", { - item: comboItem, - type: "combo" - }); - } - if (parentId && treeToBeUncombo && subtree.id === parentId) { - parentItem.removeCombo(comboItem); - brothers = subtree.children; - var index3 = brothers.indexOf(treeToBeUncombo); - if (index3 !== -1) { - brothers.splice(index3, 1); - } - (_a7 = treeToBeUncombo.children) === null || _a7 === void 0 ? void 0 : _a7.forEach(function(child) { - var item = _this.findById(child.id); - var childModel = item.getModel(); - if (item.getType && item.getType() === "combo") { - child.parentId = parentId; - delete child.comboId; - childModel.parentId = parentId; - delete childModel.comboId; - } else if (item.getType && item.getType() === "node") { - child.comboId = parentId; - childModel.comboId = parentId; - } - parentItem.addChild(item); - brothers.push(child); - }); - return false; - } - return true; - }); - }); - if (!parentId && treeToBeUncombo) { - var index2 = comboTrees.indexOf(treeToBeUncombo); - comboTrees.splice(index2, 1); - (_a6 = treeToBeUncombo.children) === null || _a6 === void 0 ? void 0 : _a6.forEach(function(child) { - child.parentId = void 0; - var childModel = _this.findById(child.id).getModel(); - delete childModel.parentId; - delete childModel.comboId; - if (child.itemType !== "node") - comboTrees.push(child); - }); - } - }; - AbstractGraph2.prototype.updateCombos = function() { - var _this = this; - var self2 = this; - var comboTrees = this.get("comboTrees"); - var itemController = self2.get("itemController"); - var itemMap = self2.get("itemMap"); - (comboTrees || []).forEach(function(ctree) { - traverseTreeUp(ctree, function(child) { - if (!child) { - return true; - } - var childItem = itemMap[child.id]; - if (childItem && childItem.getType && childItem.getType() === "combo") { - var states = __spreadArray([], childItem.getStates(), true); - (0, import_util502.each)(states, function(state2) { - return _this.setItemState(childItem, state2, false); - }); - itemController.updateCombo(childItem, child.children); - (0, import_util502.each)(states, function(state2) { - return _this.setItemState(childItem, state2, true); - }); - } - return true; - }); - }); - self2.sortCombos(); - }; - AbstractGraph2.prototype.updateCombo = function(combo) { - var _this = this; - var self2 = this; - var comboItem = combo; - var comboId; - if ((0, import_util502.isString)(combo)) { - comboItem = this.findById(combo); - } - if (!comboItem || comboItem.getType && comboItem.getType() !== "combo") { - console.warn("The item to be updated is not a combo!"); - return; - } - comboId = comboItem.get("id"); - var comboTrees = this.get("comboTrees"); - var itemController = self2.get("itemController"); - var itemMap = self2.get("itemMap"); - (comboTrees || []).forEach(function(ctree) { - traverseTreeUp(ctree, function(child) { - if (!child) { - return true; - } - var childItem = itemMap[child.id]; - if (comboId === child.id && childItem && childItem.getType && childItem.getType() === "combo") { - var states = __spreadArray([], childItem.getStates(), true); - (0, import_util502.each)(states, function(state2) { - if (childItem.getStateStyle(state2)) { - _this.setItemState(childItem, state2, false); - } - }); - itemController.updateCombo(childItem, child.children); - (0, import_util502.each)(states, function(state2) { - if (childItem.getStateStyle(state2)) { - _this.setItemState(childItem, state2, true); - } - }); - if (comboId) - comboId = child.parentId; - } - return true; - }); - }); - }; - AbstractGraph2.prototype.updateComboTree = function(item, parentId, stack) { - if (stack === void 0) { - stack = true; - } - var self2 = this; - this.set("comboSorted", false); - var uItem; - if ((0, import_util502.isString)(item)) { - uItem = self2.findById(item); - } else { - uItem = item; - } - var model = uItem.getModel(); - var oldParentId = model.comboId || model.parentId; - var type2 = ""; - if (uItem.getType) - type2 = uItem.getType(); - if (parentId && type2 === "combo") { - var comboTrees = this.get("comboTrees"); - var valid_1 = true; - var itemSubTree_1; - (comboTrees || []).forEach(function(ctree) { - if (itemSubTree_1) - return; - traverseTree(ctree, function(subTree) { - if (itemSubTree_1) - return; - if (subTree.id === uItem.getID()) { - itemSubTree_1 = subTree; - } - return true; - }); - }); - traverseTree(itemSubTree_1, function(subTree) { - if (subTree.id === parentId) { - valid_1 = false; - return false; - } - return true; - }); - if (!valid_1) { - console.warn("Failed to update the combo tree! The parentId points to a descendant of the combo!"); - return; - } - } - if (stack && this.get("enabledStack")) { - var beforeData = {}, afterData = {}; - if (type2 === "combo") { - beforeData.combos = [{ - id: model.id, - parentId: model.parentId - }]; - afterData.combos = [{ - id: model.id, - parentId - }]; - } else if (type2 === "node") { - beforeData.nodes = [{ - id: model.id, - parentId: model.comboId - }]; - afterData.nodes = [{ - id: model.id, - parentId - }]; - } - this.pushStack("updateComboTree", { - before: beforeData, - after: afterData - }); - } - if (model.parentId || model.comboId) { - var combo = this.findById(model.parentId || model.comboId); - if (combo) { - combo.removeChild(uItem); - } - } - if (type2 === "combo") { - model.parentId = parentId; - } else if (type2 === "node") { - model.comboId = parentId; - } - if (parentId) { - var parentCombo = this.findById(parentId); - if (parentCombo) { - parentCombo.addChild(uItem); - } - } - if (oldParentId) { - var parentCombo = this.findById(oldParentId); - if (parentCombo) { - parentCombo.removeChild(uItem); - } - } - var newComboTrees = reconstructTree(this.get("comboTrees"), model.id, parentId); - this.set("comboTrees", newComboTrees); - this.updateCombos(); - }; - AbstractGraph2.prototype.save = function() { - var nodes = []; - var edges = []; - var combos = []; - (0, import_util502.each)(this.get("nodes"), function(node) { - nodes.push(node.getModel()); - }); - (0, import_util502.each)(this.get("edges"), function(edge2) { - edges.push(edge2.getModel()); - }); - (0, import_util502.each)(this.get("combos"), function(combo) { - combos.push(combo.getModel()); - }); - return { - nodes, - edges, - combos - }; - }; - AbstractGraph2.prototype.changeSize = function(width2, height) { - var viewController = this.get("viewController"); - viewController.changeSize(width2, height); - return this; - }; - AbstractGraph2.prototype.refresh = function() { - var self2 = this; - self2.emit("beforegraphrefresh"); - if (self2.get("animate")) { - self2.positionsAnimate(); - } else { - var nodes = self2.get("nodes"); - var edges = self2.get("edges"); - var vedges = self2.get("edges"); - (0, import_util502.each)(nodes, function(node) { - node.refresh(); - }); - (0, import_util502.each)(edges, function(edge2) { - edge2.refresh(); - }); - (0, import_util502.each)(vedges, function(vedge) { - vedge.refresh(); - }); - } - self2.emit("aftergraphrefresh"); - self2.autoPaint(); - }; - AbstractGraph2.prototype.getNodes = function() { - return this.get("nodes"); - }; - AbstractGraph2.prototype.getEdges = function() { - return this.get("edges"); - }; - AbstractGraph2.prototype.getCombos = function() { - return this.get("combos"); - }; - AbstractGraph2.prototype.getComboChildren = function(combo) { - if ((0, import_util502.isString)(combo)) { - combo = this.findById(combo); - } - if (!combo || combo.getType && combo.getType() !== "combo") { - console.warn("The combo does not exist!"); - return; - } - return combo.getChildren(); - }; - AbstractGraph2.prototype.positionsAnimate = function() { - var self2 = this; - self2.emit("beforeanimate"); - var animateCfg = self2.get("animateCfg"); - var onFrame = animateCfg.onFrame; - var nodes = self2.getNodes(); - var toNodes = nodes.map(function(node) { - var model = node.getModel(); - return { - id: model.id, - x: model.x, - y: model.y - }; - }); - if (self2.isAnimating()) { - self2.stopAnimate(); - } - var canvas = self2.get("canvas"); - canvas.animate(function(ratio) { - (0, import_util502.each)(toNodes, function(data3) { - var node = self2.findById(data3.id); - if (!node || node.destroyed) { - return; - } - var originAttrs = node.get("originAttrs"); - var model = node.get("model"); - if (!originAttrs) { - var containerMatrix = node.getContainer().getMatrix(); - if (!containerMatrix) - containerMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - originAttrs = { - x: containerMatrix[6], - y: containerMatrix[7] - }; - node.set("originAttrs", originAttrs); - } - if (onFrame) { - var attrs = onFrame(node, ratio, data3, originAttrs); - node.set("model", Object.assign(model, attrs)); - } else { - model.x = originAttrs.x + (data3.x - originAttrs.x) * ratio; - model.y = originAttrs.y + (data3.y - originAttrs.y) * ratio; - } - }); - self2.refreshPositions(); - }, { - duration: animateCfg.duration, - easing: animateCfg.easing, - callback: function callback() { - (0, import_util502.each)(nodes, function(node) { - node.set("originAttrs", null); - }); - if (animateCfg.callback) { - animateCfg.callback(); - } - self2.emit("afteranimate"); - self2.animating = false; - } - }); - }; - AbstractGraph2.prototype.refreshPositions = function() { - var self2 = this; - self2.emit("beforegraphrefreshposition"); - var nodes = self2.get("nodes"); - var edges = self2.get("edges"); - var vedges = self2.get("vedges"); - var combos = self2.get("combos"); - var model; - var updatedNodes = {}; - (0, import_util502.each)(nodes, function(node) { - model = node.getModel(); - var originAttrs = node.get("originAttrs"); - if (originAttrs && model.x === originAttrs.x && model.y === originAttrs.y) { - return; - } - var changed = node.updatePosition({ - x: model.x, - y: model.y - }); - updatedNodes[model.id] = changed; - if (model.comboId) - updatedNodes[model.comboId] = updatedNodes[model.comboId] || changed; - }); - if (combos && combos.length !== 0) { - self2.updateCombos(); - } - (0, import_util502.each)(edges, function(edge2) { - var sourceModel = edge2.getSource().getModel(); - var target = edge2.getTarget(); - if (!(0, import_util502.isPlainObject)(target)) { - var targetModel = target.getModel(); - if (updatedNodes[sourceModel.id] || updatedNodes[targetModel.id] || edge2.getModel().isComboEdge) { - edge2.refresh(); - } - } - }); - (0, import_util502.each)(vedges, function(vedge) { - vedge.refresh(); - }); - self2.emit("aftergraphrefreshposition"); - self2.autoPaint(); - }; - AbstractGraph2.prototype.stopAnimate = function() { - this.get("canvas").stopAnimate(); - }; - AbstractGraph2.prototype.isAnimating = function() { - return this.animating; - }; - AbstractGraph2.prototype.getZoom = function() { - var matrix = this.get("group").getMatrix(); - return matrix ? matrix[0] : 1; - }; - AbstractGraph2.prototype.getCurrentMode = function() { - var modeController = this.get("modeController"); - return modeController.getMode(); - }; - AbstractGraph2.prototype.setMode = function(mode) { - var modeController = this.get("modeController"); - modeController.setMode(mode); - return this; - }; - AbstractGraph2.prototype.clear = function(avoidEmit) { - var _a6; - if (avoidEmit === void 0) { - avoidEmit = false; - } - (_a6 = this.get("canvas")) === null || _a6 === void 0 ? void 0 : _a6.clear(); - this.initGroups(); - this.set({ - itemMap: {}, - nodes: [], - edges: [], - groups: [], - combos: [], - comboTrees: [] - }); - if (!avoidEmit) - this.emit("afterrender"); - return this; - }; - AbstractGraph2.prototype.updateLayout = function(cfg, align, alignPoint) { - var _this = this; - var layoutController = this.get("layoutController"); - if ((0, import_util502.isString)(cfg)) { - cfg = { - type: cfg - }; - } - if (align) { - var toPoint_1 = alignPoint; - if (!toPoint_1) { - if (align === "begin") - toPoint_1 = { - x: 0, - y: 0 - }; - else - toPoint_1 = { - x: this.getWidth() / 2, - y: this.getHeight() / 2 - }; - } - toPoint_1 = this.getPointByCanvas(toPoint_1.x, toPoint_1.y); - var forceTypes = ["force", "gForce", "fruchterman"]; - if (forceTypes.includes(cfg.type) || !cfg.type && forceTypes.includes(layoutController === null || layoutController === void 0 ? void 0 : layoutController.layoutType)) { - cfg.center = [toPoint_1.x, toPoint_1.y]; - } else { - this.once("afterlayout", function(e4) { - var matrix = _this.getGroup().getMatrix() || [1, 0, 0, 0, 1, 0, 0, 0, 1]; - toPoint_1.x = toPoint_1.x * matrix[0] + matrix[6]; - toPoint_1.y = toPoint_1.y * matrix[0] + matrix[7]; - var _a6 = _this.getGroup().getCanvasBBox(), minX = _a6.minX, maxX = _a6.maxX, minY = _a6.minY, maxY2 = _a6.maxY; - var bboxPoint = { - x: (minX + maxX) / 2, - y: (minY + maxY2) / 2 - }; - if (align === "begin") { - bboxPoint.x = minX; - bboxPoint.y = minY; - } - _this.translate(toPoint_1.x - bboxPoint.x, toPoint_1.y - bboxPoint.y); - }); - } - } - var oriLayoutCfg = this.get("layout"); - var layoutCfg = {}; - Object.assign(layoutCfg, oriLayoutCfg, cfg); - this.set("layout", layoutCfg); - if (layoutController.isLayoutTypeSame(layoutCfg) && layoutCfg.gpuEnabled === oriLayoutCfg.gpuEnabled) { - layoutController.updateLayoutCfg(layoutCfg); - } else { - layoutController.changeLayout(layoutCfg); - } - }; - AbstractGraph2.prototype.destroyLayout = function() { - var layoutController = this.get("layoutController"); - layoutController.destroyLayout(); - }; - AbstractGraph2.prototype.layout = function() { - var layoutController = this.get("layoutController"); - var layoutCfg = this.get("layout"); - if (!layoutCfg || !layoutController) - return; - if (layoutCfg.workerEnabled) { - layoutController.layout(); - return; - } - if (layoutController.layoutMethod) { - layoutController.relayout(true); - } else { - layoutController.layout(); - } - }; - AbstractGraph2.prototype.collapseCombo = function(combo) { - var _this = this; - if ((0, import_util502.isString)(combo)) { - combo = this.findById(combo); - } - if (!combo) { - console.warn("The combo to be collapsed does not exist!"); - return; - } - this.emit("beforecollapseexpandcombo", { - action: "expand", - item: combo - }); - var comboModel = combo.getModel(); - var itemController = this.get("itemController"); - itemController.collapseCombo(combo); - comboModel.collapsed = true; - var edges = this.getEdges().concat(this.get("vedges")); - var cnodes = []; - var ccombos = []; - var comboTrees = this.get("comboTrees"); - var found = false; - (comboTrees || []).forEach(function(ctree) { - if (found) - return; - traverseTree(ctree, function(subTree) { - if (found && subTree.depth <= comboModel.depth) - return false; - if (comboModel.id === subTree.id) - found = true; - if (found) { - var item = _this.findById(subTree.id); - if (item && item.getType && item.getType() === "combo") { - cnodes = cnodes.concat(item.getNodes()); - ccombos = ccombos.concat(item.getCombos()); - } - } - return true; - }); - }); - var edgeWeightMap = {}; - var addedVEdges = []; - edges.forEach(function(edge2) { - if (edge2.isVisible() && !edge2.getModel().isVEdge) - return; - var source = edge2.getSource(); - var target = edge2.getTarget(); - if ((cnodes.includes(source) || ccombos.includes(source)) && !cnodes.includes(target) && !ccombos.includes(target) || source.getModel().id === comboModel.id) { - var edgeModel = edge2.getModel(); - if (edgeModel.isVEdge) { - _this.removeItem(edge2, false); - return; - } - var targetModel = target.getModel(); - while (!target.isVisible()) { - target = _this.findById(targetModel.parentId || targetModel.comboId); - if (!target || !targetModel.parentId && !targetModel.comboId) - return; - targetModel = target.getModel(); - } - var targetId = targetModel.id; - if (edgeWeightMap["".concat(comboModel.id, "-").concat(targetId)]) { - edgeWeightMap["".concat(comboModel.id, "-").concat(targetId)] += edgeModel.size || 1; - return; - } - var vedge = _this.addItem("vedge", { - source: comboModel.id, - target: targetId, - isVEdge: true - }, false); - edgeWeightMap["".concat(comboModel.id, "-").concat(targetId)] = edgeModel.size || 1; - addedVEdges.push(vedge); - } else if (!cnodes.includes(source) && !ccombos.includes(source) && (cnodes.includes(target) || ccombos.includes(target)) || target.getModel().id === comboModel.id) { - var edgeModel = edge2.getModel(); - if (edgeModel.isVEdge) { - _this.removeItem(edge2, false); - return; - } - var sourceModel = source.getModel(); - while (!source.isVisible()) { - source = _this.findById(sourceModel.parentId || sourceModel.comboId); - if (!source || !sourceModel.parentId && !sourceModel.comboId) - return; - sourceModel = source.getModel(); - } - var sourceId = sourceModel.id; - if (edgeWeightMap["".concat(sourceId, "-").concat(comboModel.id)]) { - edgeWeightMap["".concat(sourceId, "-").concat(comboModel.id)] += edgeModel.size || 1; - return; - } - var vedge = _this.addItem("vedge", { - target: comboModel.id, - source: sourceId, - isVEdge: true - }, false); - edgeWeightMap["".concat(sourceId, "-").concat(comboModel.id)] = edgeModel.size || 1; - addedVEdges.push(vedge); - } - }); - addedVEdges.forEach(function(vedge) { - var vedgeModel = vedge.getModel(); - _this.updateItem(vedge, { - size: edgeWeightMap["".concat(vedgeModel.source, "-").concat(vedgeModel.target)] - }, false); - }); - this.emit("aftercollapseexpandcombo", { - action: "collapse", - item: combo - }); - }; - AbstractGraph2.prototype.expandCombo = function(combo) { - var _this = this; - if ((0, import_util502.isString)(combo)) { - combo = this.findById(combo); - } - if (!combo || combo.getType && combo.getType() !== "combo") { - console.warn("The combo to be collapsed does not exist!"); - return; - } - this.emit("beforecollapseexpandcombo", { - action: "expand", - item: combo - }); - var comboModel = combo.getModel(); - var itemController = this.get("itemController"); - itemController.expandCombo(combo); - comboModel.collapsed = false; - var edges = this.getEdges().concat(this.get("vedges")); - var cnodes = []; - var ccombos = []; - var comboTrees = this.get("comboTrees"); - var found = false; - (comboTrees || []).forEach(function(ctree) { - if (found) - return; - traverseTree(ctree, function(subTree) { - if (found && subTree.depth <= comboModel.depth) - return false; - if (comboModel.id === subTree.id) - found = true; - if (found) { - var item = _this.findById(subTree.id); - if (item && item.getType && item.getType() === "combo") { - cnodes = cnodes.concat(item.getNodes()); - ccombos = ccombos.concat(item.getCombos()); - } - } - return true; - }); - }); - var edgeWeightMap = {}; - var addedVEdges = {}; - edges.forEach(function(edge2) { - if (edge2.isVisible() && !edge2.getModel().isVEdge) - return; - var source = edge2.getSource(); - var target = edge2.getTarget(); - var sourceId = source.get("id"); - var targetId = target.get("id"); - if ((cnodes.includes(source) || ccombos.includes(source)) && !cnodes.includes(target) && !ccombos.includes(target) || sourceId === comboModel.id) { - if (edge2.getModel().isVEdge) { - _this.removeItem(edge2, false); - return; - } - var targetModel = target.getModel(); - while (!target.isVisible()) { - target = _this.findById(targetModel.comboId || targetModel.parentId); - if (!target || !targetModel.parentId && !targetModel.comboId) { - return; - } - targetModel = target.getModel(); - } - targetId = targetModel.id; - var sourceModel = source.getModel(); - while (!source.isVisible()) { - source = _this.findById(sourceModel.comboId || sourceModel.parentId); - if (!source || !sourceModel.parentId && !sourceModel.comboId) { - return; - } - if (sourceModel.comboId === comboModel.id || sourceModel.parentId === comboModel.id) { - break; - } - sourceModel = source.getModel(); - } - sourceId = sourceModel.id; - if (targetId) { - var vedgeId = "".concat(sourceId, "-").concat(targetId); - if (edgeWeightMap[vedgeId]) { - edgeWeightMap[vedgeId] += edge2.getModel().size || 1; - _this.updateItem(addedVEdges[vedgeId], { - size: edgeWeightMap[vedgeId] - }, false); - return; - } - var vedge = _this.addItem("vedge", { - source: sourceId, - target: targetId, - isVEdge: true - }, false); - edgeWeightMap[vedgeId] = edge2.getModel().size || 1; - addedVEdges[vedgeId] = vedge; - } - } else if (!cnodes.includes(source) && !ccombos.includes(source) && (cnodes.includes(target) || ccombos.includes(target)) || targetId === comboModel.id) { - if (edge2.getModel().isVEdge) { - _this.removeItem(edge2, false); - return; - } - var sourceModel = source.getModel(); - while (!source.isVisible()) { - source = _this.findById(sourceModel.comboId || sourceModel.parentId); - if (!source || !sourceModel.parentId && !sourceModel.comboId) { - return; - } - sourceModel = source.getModel(); - } - sourceId = sourceModel.id; - var targetModel = target.getModel(); - while (!target.isVisible()) { - target = _this.findById(targetModel.comboId || targetModel.parentId); - if (!target || !targetModel.parentId && !targetModel.comboId) { - return; - } - if (targetModel.comboId === comboModel.id || targetModel.parentId === comboModel.id) { - break; - } - targetModel = target.getModel(); - } - targetId = targetModel.id; - if (sourceId) { - var vedgeId = "".concat(sourceId, "-").concat(targetId); - if (edgeWeightMap[vedgeId]) { - edgeWeightMap[vedgeId] += edge2.getModel().size || 1; - _this.updateItem(addedVEdges[vedgeId], { - size: edgeWeightMap[vedgeId] - }, false); - return; - } - var vedge = _this.addItem("vedge", { - target: targetId, - source: sourceId, - isVEdge: true - }, false); - edgeWeightMap[vedgeId] = edge2.getModel().size || 1; - addedVEdges[vedgeId] = vedge; - } - } else if ((cnodes.includes(source) || ccombos.includes(source)) && (cnodes.includes(target) || ccombos.includes(target))) { - if (source.isVisible() && target.isVisible()) { - edge2.show(); - } - } - }); - this.emit("aftercollapseexpandcombo", { - action: "expand", - item: combo - }); - }; - AbstractGraph2.prototype.collapseExpandCombo = function(combo) { - if ((0, import_util502.isString)(combo)) { - combo = this.findById(combo); - } - if (!combo || combo.getType && combo.getType() !== "combo") - return; - var comboModel = combo.getModel(); - var parentItem = this.findById(comboModel.parentId); - while (parentItem) { - var parentModel = parentItem.getModel(); - if (parentModel.collapsed) { - console.warn("Fail to expand the combo since it's ancestor combo is collapsed."); - parentItem = void 0; - return; - } - parentItem = this.findById(parentModel.parentId); - } - var collapsed = comboModel.collapsed; - if (collapsed) { - this.expandCombo(combo); - } else { - this.collapseCombo(combo); - } - this.updateCombo(combo); - }; - AbstractGraph2.prototype.sortCombos = function() { - var _this = this; - var comboSorted = this.get("comboSorted"); - if (comboSorted) - return; - this.set("comboSorted", true); - var depthMap = []; - var dataDepthMap = {}; - var comboTrees = this.get("comboTrees"); - (comboTrees || []).forEach(function(cTree) { - traverseTree(cTree, function(child) { - if (depthMap[child.depth]) - depthMap[child.depth].push(child.id); - else - depthMap[child.depth] = [child.id]; - dataDepthMap[child.id] = child.depth; - return true; - }); - }); - var edges = this.getEdges().concat(this.get("vedges")); - (edges || []).forEach(function(edgeItem) { - var edge2 = edgeItem.getModel(); - var sourceDepth = dataDepthMap[edge2.source] || 0; - var targetDepth2 = dataDepthMap[edge2.target] || 0; - var depth = Math.max(sourceDepth, targetDepth2); - if (depthMap[depth]) - depthMap[depth].push(edge2.id); - else - depthMap[depth] = [edge2.id]; - }); - depthMap.forEach(function(array) { - if (!array || !array.length) - return; - for (var i4 = array.length - 1; i4 >= 0; i4--) { - var item = _this.findById(array[i4]); - if (item) - item.toFront(); - } - }); - }; - AbstractGraph2.prototype.getNeighbors = function(node, type2) { - var item = node; - if ((0, import_util502.isString)(node)) { - item = this.findById(node); - } - return item.getNeighbors(type2); - }; - AbstractGraph2.prototype.getNodeDegree = function(node, type2, refresh) { - if (type2 === void 0) { - type2 = void 0; - } - if (refresh === void 0) { - refresh = false; - } - var item = node; - if ((0, import_util502.isString)(node)) { - item = this.findById(node); - } - var degrees = this.get("degrees"); - if (!degrees || refresh) { - degrees = degree_default(this.save()); - this.set("degrees", degrees); - } - var nodeDegrees = degrees[item.getID()]; - var res = 0; - if (!nodeDegrees) { - return 0; - } - switch (type2) { - case "in": - res = nodeDegrees.inDegree; - break; - case "out": - res = nodeDegrees.outDegree; - break; - case "all": - res = nodeDegrees; - break; - default: - res = nodeDegrees.degree; - break; - } - return res; - }; - AbstractGraph2.prototype.getUndoStack = function() { - return this.undoStack; - }; - AbstractGraph2.prototype.getRedoStack = function() { - return this.redoStack; - }; - AbstractGraph2.prototype.getStackData = function() { - if (!this.get("enabledStack")) { - return null; - } - return { - undoStack: this.undoStack.toArray(), - redoStack: this.redoStack.toArray() - }; - }; - AbstractGraph2.prototype.clearStack = function() { - if (this.get("enabledStack")) { - this.undoStack.clear(); - this.redoStack.clear(); - } - }; - AbstractGraph2.prototype.pushStack = function(action, data3, stackType) { - if (action === void 0) { - action = "update"; - } - if (stackType === void 0) { - stackType = "undo"; - } - if (!this.get("enabledStack")) { - console.warn("\u8BF7\u5148\u542F\u7528 undo & redo \u529F\u80FD\uFF0C\u5728\u5B9E\u4F8B\u5316 Graph \u65F6\u5019\u914D\u7F6E enabledStack: true !"); - return; - } - var stackData = data3 ? (0, import_util502.clone)(data3) : { - before: {}, - after: (0, import_util502.clone)(this.save()) - }; - if (stackType === "redo") { - this.redoStack.push({ - action, - data: stackData - }); - } else { - this.undoStack.push({ - action, - data: stackData - }); - } - this.emit("stackchange", { - undoStack: this.undoStack, - redoStack: this.redoStack - }); - }; - AbstractGraph2.prototype.getAdjMatrix = function(cache3, directed) { - if (cache3 === void 0) { - cache3 = true; - } - if (directed === void 0) - directed = this.get("directed"); - var currentAdjMatrix = this.get("adjMatrix"); - if (!currentAdjMatrix || !cache3) { - currentAdjMatrix = adjacent_matrix_default(this.save(), directed); - this.set("adjMatrix", currentAdjMatrix); - } - return currentAdjMatrix; - }; - AbstractGraph2.prototype.getShortestPathMatrix = function(cache3, directed) { - if (cache3 === void 0) { - cache3 = true; - } - if (directed === void 0) - directed = this.get("directed"); - var currentAdjMatrix = this.get("adjMatrix"); - var currentShourtestPathMatrix = this.get("shortestPathMatrix"); - if (!currentAdjMatrix || !cache3) { - currentAdjMatrix = adjacent_matrix_default(this.save(), directed); - this.set("adjMatrix", currentAdjMatrix); - } - if (!currentShourtestPathMatrix || !cache3) { - currentShourtestPathMatrix = floydWarshall_default(this.save(), directed); - this.set("shortestPathMatrix", currentShourtestPathMatrix); - } - return currentShourtestPathMatrix; - }; - AbstractGraph2.prototype.on = function(eventName, callback, once) { - return _super.prototype.on.call(this, eventName, callback, once); - }; - AbstractGraph2.prototype.destroy = function() { - var _a6, _b, _c, _d, _e; - this.clear(); - this.clearStack(); - (_a6 = this.get("itemController")) === null || _a6 === void 0 ? void 0 : _a6.destroy(); - (_b = this.get("modeController")) === null || _b === void 0 ? void 0 : _b.destroy(); - (_c = this.get("viewController")) === null || _c === void 0 ? void 0 : _c.destroy(); - (_d = this.get("stateController")) === null || _d === void 0 ? void 0 : _d.destroy(); - (_e = this.get("canvas")) === null || _e === void 0 ? void 0 : _e.destroy(); - this.cfg = null; - this.destroyed = true; - this.redoStack = null; - this.undoStack = null; - }; - AbstractGraph2.prototype.createHull = function(cfg) { - if (!cfg.members || cfg.members.length < 1) { - console.warn("Create hull failed! The members is empty."); - return; - } - var parent = this.get("hullGroup"); - var hullMap = this.get("hullMap"); - if (!hullMap) { - hullMap = {}; - this.set("hullMap", hullMap); - } - if (!parent || parent.get("destroyed")) { - parent = this.get("group").addGroup({ - id: "hullGroup" - }); - parent.toBack(); - this.set("hullGroup", parent); - } - if (hullMap[cfg.id]) { - console.warn("Existed hull id."); - return hullMap[cfg.id]; - } - var group3 = parent.addGroup({ - id: "".concat(cfg.id, "-container") - }); - var hull = new hull_default(this, __assign(__assign({}, cfg), { - group: group3 - })); - var hullId = hull.id; - hullMap[hullId] = hull; - return hull; - }; - AbstractGraph2.prototype.getHulls = function() { - return this.get("hullMap"); - }; - AbstractGraph2.prototype.getHullById = function(hullId) { - return this.get("hullMap")[hullId]; - }; - AbstractGraph2.prototype.removeHull = function(hull) { - var _a6; - var hullInstance; - if ((0, import_util502.isString)(hull)) { - hullInstance = this.getHullById(hull); - } else { - hullInstance = hull; - } - (_a6 = this.get("hullMap")) === null || _a6 === void 0 ? true : delete _a6[hullInstance.id]; - hullInstance.destroy(); - }; - AbstractGraph2.prototype.removeHulls = function() { - var hulls = this.getHulls(); - if (!hulls || !Object.keys(hulls).length) - return; - Object.keys(hulls).forEach(function(key) { - var hull = hulls[key]; - hull.destroy(); - }); - this.set("hullMap", {}); - }; - return AbstractGraph2; -}(esm_default); -var graph_default = AbstractGraph; - -// node_modules/@antv/g6-core/es/element/node.js -var import_util504 = __toModule(require_lib()); - -// node_modules/@antv/g6-core/es/element/shapeBase.js -var import_util503 = __toModule(require_lib()); -function _typeof2(obj) { - "@babel/helpers - typeof"; - return _typeof2 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(obj2) { - return typeof obj2; - } : function(obj2) { - return obj2 && typeof Symbol == "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }, _typeof2(obj); -} -var transform10 = ext_exports.transform; -var CLS_SHAPE_SUFFIX = "-shape"; -var CLS_LABEL_SUFFIX = "-label"; -var ARROWS = ["startArrow", "endArrow"]; -var SHAPE_DEFAULT_ATTRS = { - lineWidth: 1, - stroke: void 0, - fill: void 0, - lineAppendWidth: 1, - opacity: void 0, - strokeOpacity: void 0, - fillOpacity: void 0, - x: 0, - y: 0, - r: 10, - width: 20, - height: 20, - shadowColor: void 0, - shadowBlur: 0, - shadowOffsetX: 0, - shadowOffsetY: 0 -}; -var PATH_SHAPE_DEFAULT_ATTRS = { - lineWidth: 1, - stroke: "#000", - lineDash: void 0, - startArrow: false, - endArrow: false, - opacity: void 0, - strokeOpacity: void 0, - fillOpacity: void 0, - shadowColor: void 0, - shadowBlur: 0, - shadowOffsetX: 0, - shadowOffsetY: 0 -}; -var SHAPES_DEFAULT_ATTRS = { - edge: PATH_SHAPE_DEFAULT_ATTRS, - node: SHAPE_DEFAULT_ATTRS, - combo: SHAPE_DEFAULT_ATTRS -}; -var CLS_LABEL_BG_SUFFIX = "-label-bg"; -var shapeBase = { - options: { - labelCfg: { - style: { - fontFamily: global_default.windowFontFamily - } - }, - descriptionCfg: { - style: { - fontFamily: global_default.windowFontFamily - } - } - }, - itemType: "", - type: "", - getCustomConfig: function getCustomConfig(cfg) { - return {}; - }, - getOptions: function getOptions(cfg, updateType) { - if (updateType === "move" || (updateType === null || updateType === void 0 ? void 0 : updateType.includes("bbox"))) { - return {}; - } - return (0, import_util503.deepMix)({}, this.options, this.getCustomConfig(cfg) || {}, cfg); - }, - draw: function draw3(cfg, group3) { - group3["shapeMap"] = {}; - this.mergeStyle = this.getOptions(cfg); - var shape = this.drawShape(cfg, group3); - shape.set("className", this.itemType + CLS_SHAPE_SUFFIX); - group3["shapeMap"][this.itemType + CLS_SHAPE_SUFFIX] = shape; - if (cfg.label) { - var label17 = this.drawLabel(cfg, group3); - label17.set("className", this.itemType + CLS_LABEL_SUFFIX); - group3["shapeMap"][this.itemType + CLS_LABEL_SUFFIX] = label17; - } - return shape; - }, - afterDraw: function afterDraw2(cfg, group3, keyShape) { - }, - drawShape: function drawShape2(cfg, group3) { - return null; - }, - drawLabel: function drawLabel(cfg, group3) { - var defaultLabelCfg3 = (this.mergeStyle || this.getOptions(cfg) || {}).labelCfg; - var labelCfg = defaultLabelCfg3 || {}; - var labelStyle = this.getLabelStyle(cfg, labelCfg, group3); - var rotate8 = labelStyle.rotate; - delete labelStyle.rotate; - var label17 = group3.addShape("text", { - attrs: labelStyle, - draggable: true, - className: "text-shape", - name: "text-shape", - labelRelated: true - }); - group3["shapeMap"]["text-shape"] = label17; - if (!isNaN(rotate8) && rotate8 !== "") { - var labelBBox = label17.getBBox(); - var labelMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - if (labelStyle.rotateCenter) { - switch (labelStyle.rotateCenter) { - case "center": - labelMatrix = transform10(labelMatrix, [["t", -labelBBox.width / 2, -labelBBox.height / 2], ["r", rotate8], ["t", labelBBox.width / 2, labelBBox.height / 2]]); - break; - case "lefttop": - labelMatrix = transform10(labelMatrix, [["t", -labelStyle.x, -labelStyle.y], ["r", rotate8], ["t", labelStyle.x, labelStyle.y]]); - break; - case "leftcenter": - labelMatrix = transform10(labelMatrix, [["t", -labelStyle.x, -labelStyle.y - labelBBox.height / 2], ["r", rotate8], ["t", labelStyle.x, labelStyle.y + labelBBox.height / 2]]); - break; - default: - labelMatrix = transform10(labelMatrix, [["t", -labelBBox.width / 2, -labelBBox.height / 2], ["r", rotate8], ["t", labelBBox.width / 2, labelBBox.height / 2]]); - break; - } - } else { - labelMatrix = transform10(labelMatrix, [["t", -labelStyle.x, -labelStyle.y - labelBBox.height / 2], ["r", rotate8], ["t", labelStyle.x, labelStyle.y + labelBBox.height / 2]]); - } - label17.setMatrix(labelMatrix); - } - if (labelStyle.background) { - var rect3 = this.drawLabelBg(cfg, group3, label17); - var labelBgClassname = this.itemType + CLS_LABEL_BG_SUFFIX; - rect3.set("classname", labelBgClassname); - group3["shapeMap"][labelBgClassname] = rect3; - label17.toFront(); - } - return label17; - }, - drawLabelBg: function drawLabelBg(cfg, group3, label17) { - var defaultLabelCfg3 = this.options.labelCfg; - var labelCfg = (0, import_util503.mix)({}, defaultLabelCfg3, cfg.labelCfg); - var style = this.getLabelBgStyleByPosition(label17, labelCfg); - var rect3 = group3.addShape("rect", { - name: "text-bg-shape", - attrs: style, - labelRelated: true - }); - group3["shapeMap"]["text-bg-shape"] = rect3; - return rect3; - }, - getLabelStyleByPosition: function getLabelStyleByPosition(cfg, labelCfg, group3) { - return { - text: cfg.label - }; - }, - getLabelBgStyleByPosition: function getLabelBgStyleByPosition(label17, labelCfg) { - return {}; - }, - getLabelStyle: function getLabelStyle(cfg, labelCfg, group3) { - var calculateStyle = this.getLabelStyleByPosition(cfg, labelCfg, group3); - var attrName = "".concat(this.itemType, "Label"); - var defaultStyle = global_default[attrName] ? global_default[attrName].style : null; - return __assign(__assign(__assign({}, defaultStyle), calculateStyle), labelCfg.style); - }, - getShapeStyle: function getShapeStyle(cfg) { - return cfg.style; - }, - update: function update2(cfg, item, updateType) { - this.updateShapeStyle(cfg, item, updateType); - this.updateLabel(cfg, item, updateType); - }, - updateShapeStyle: function updateShapeStyle(cfg, item, updateType) { - var _a6; - var group3 = item.getContainer(); - var shape = item.getKeyShape(); - var shapeStyle = (0, import_util503.mix)({}, shape.attr(), cfg.style); - var _loop_1 = function _loop_12(key2) { - var _b; - var style = shapeStyle[key2]; - if ((0, import_util503.isPlainObject)(style)) { - var subShape = ((_a6 = group3["shapeMap"]) === null || _a6 === void 0 ? void 0 : _a6[key2]) || group3.find(function(element) { - return element.get("name") === key2; - }); - subShape === null || subShape === void 0 ? void 0 : subShape.attr(style); - } else { - shape.attr((_b = {}, _b[key2] = style, _b)); - } - }; - for (var key in shapeStyle) { - _loop_1(key); - } - }, - updateLabel: function updateLabel2(cfg, item, updateType) { - var _a6, _b; - if (cfg.label || cfg.label === "") { - var group3 = item.getContainer(); - var _c = (this.mergeStyle || this.getOptions({}, updateType) || {}).labelCfg, labelCfg = _c === void 0 ? {} : _c; - var labelClassName_1 = this.itemType + CLS_LABEL_SUFFIX; - var label17 = group3["shapeMap"][labelClassName_1] || group3.find(function(ele) { - return ele.get("className") === labelClassName_1; - }); - var labelBgClassname_1 = this.itemType + CLS_LABEL_BG_SUFFIX; - var labelBg = group3["shapeMap"][labelBgClassname_1] || group3.find(function(ele) { - return ele.get("className") === labelBgClassname_1; - }); - if (!label17) { - var newLabel = this.drawLabel(cfg, group3); - newLabel.set("className", labelClassName_1); - group3["shapeMap"][labelClassName_1] = newLabel; - } else { - if (!updateType || updateType === "bbox|label" || this.itemType === "edge" && updateType !== "style") { - labelCfg = (0, import_util503.deepMix)(labelCfg, cfg.labelCfg); - } - var calculateStyle = this.getLabelStyleByPosition(cfg, labelCfg, group3); - var cfgStyle = (_a6 = cfg.labelCfg) === null || _a6 === void 0 ? void 0 : _a6.style; - var labelStyle = __assign(__assign({}, calculateStyle), cfgStyle); - var rotate8 = labelStyle.rotate; - delete labelStyle.rotate; - if (!isNaN(rotate8) && rotate8 !== "") { - var rotateMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - rotateMatrix = transform10(rotateMatrix, [["t", -labelStyle.x, -labelStyle.y], ["r", rotate8], ["t", labelStyle.x, labelStyle.y]]); - labelStyle.matrix = rotateMatrix; - label17.attr(labelStyle); - } else { - if (((_b = label17.getMatrix()) === null || _b === void 0 ? void 0 : _b[4]) !== 1) { - label17.resetMatrix(); - } - label17.attr(labelStyle); - } - if (!labelBg) { - if (labelStyle.background) { - labelBg = this.drawLabelBg(cfg, group3, label17); - labelBg.set("classname", labelBgClassname_1); - group3["shapeMap"][labelBgClassname_1] = labelBg; - label17.toFront(); - } - } else if (labelStyle.background) { - var calculateBgStyle = this.getLabelBgStyleByPosition(label17, labelCfg); - labelBg.attr(calculateBgStyle); - } else { - group3.removeChild(labelBg); - } - } - } - }, - afterUpdate: function afterUpdate2(cfg, item) { - }, - setState: function setState3(name, value2, item) { - var _a6, _b; - var _c; - var shape = item.get("keyShape"); - if (!shape || shape.destroyed) - return; - var type2 = item.getType(); - var stateName = (0, import_util503.isBoolean)(value2) ? name : "".concat(name, ":").concat(value2); - var shapeStateStyle = this.getStateStyle(stateName, item); - var itemStateStyle = item.getStateStyle(stateName); - if (!itemStateStyle && !shapeStateStyle) { - return; - } - var styles = (0, import_util503.mix)({}, itemStateStyle || shapeStateStyle); - var group3 = item.getContainer(); - var keptAttrs = { - x: 1, - y: 1, - cx: 1, - cy: 1, - matrix: 1 - }; - if (type2 === "combo") { - keptAttrs.r = 1; - keptAttrs.width = 1; - keptAttrs.height = 1; - } - if (value2) { - var _loop_2 = function _loop_22(key2) { - var _d; - var style = styles[key2]; - if ((0, import_util503.isPlainObject)(style) && !ARROWS.includes(key2)) { - var subShape = ((_c = group3["shapeMap"]) === null || _c === void 0 ? void 0 : _c[key2]) || group3.find(function(element) { - return element.get("name") === key2; - }); - subShape === null || subShape === void 0 ? void 0 : subShape.attr(style); - } else { - shape.attr((_d = {}, _d[key2] = style, _d)); - } - }; - for (var key in styles) { - _loop_2(key); - } - } else { - var enableStatesStyle = cloneBesidesImg(item.getCurrentStatesStyle()); - var model = item.getModel(); - var originStyle_1 = (0, import_util503.mix)({}, model.style, cloneBesidesImg(item.getOriginStyle())); - var keyShapeName_1 = shape.get("name"); - var shapeAttrs_1 = shape.attr(); - var keyShapeStyles_1 = {}; - Object.keys(shapeAttrs_1).forEach(function(key2) { - if (key2 === "img") - return; - var attr = shapeAttrs_1[key2]; - if (attr && _typeof2(attr) === "object") { - keyShapeStyles_1[key2] = (0, import_util503.clone)(attr); - } else { - keyShapeStyles_1[key2] = attr; - } - }); - var filtetDisableStatesStyle = {}; - var _loop_3 = function _loop_32(p5) { - var style = styles[p5]; - if ((0, import_util503.isPlainObject)(style) && !ARROWS.includes(p5)) { - var subShape_1 = group3["shapeMap"][p5] || group3.find(function(ele) { - return ele.get("name") === p5; - }); - if (subShape_1) { - var subShapeStyles_1 = cloneBesidesImg(subShape_1.attr()); - (0, import_util503.each)(style, function(v3, key2) { - if (p5 === keyShapeName_1 && keyShapeStyles_1[key2] && !keptAttrs[key2]) { - delete keyShapeStyles_1[key2]; - var value_1 = originStyle_1[p5][key2] || SHAPES_DEFAULT_ATTRS[type2][key2]; - shape.attr(key2, value_1); - } else if (subShapeStyles_1[key2] || subShapeStyles_1[key2] === 0) { - delete subShapeStyles_1[key2]; - var value_2 = originStyle_1[p5][key2] || SHAPES_DEFAULT_ATTRS[type2][key2]; - subShape_1.attr(key2, value_2); - } - }); - filtetDisableStatesStyle[p5] = subShapeStyles_1; - } - } else { - if (keyShapeStyles_1[p5] && !keptAttrs[p5]) { - delete keyShapeStyles_1[p5]; - var value_3 = originStyle_1[p5] || (originStyle_1[keyShapeName_1] ? originStyle_1[keyShapeName_1][p5] : void 0) || SHAPES_DEFAULT_ATTRS[type2][p5]; - shape.attr(p5, value_3); - } - } - }; - for (var p4 in styles) { - _loop_3(p4); - } - if (!keyShapeName_1) { - (0, import_util503.mix)(filtetDisableStatesStyle, keyShapeStyles_1); - } else { - filtetDisableStatesStyle[keyShapeName_1] = keyShapeStyles_1; - } - for (var key in enableStatesStyle) { - if (keptAttrs[key]) - continue; - var enableStyle = enableStatesStyle[key]; - if (!(0, import_util503.isPlainObject)(enableStyle) || ARROWS.includes(key)) { - if (!keyShapeName_1) { - (0, import_util503.mix)(originStyle_1, (_a6 = {}, _a6[key] = enableStyle, _a6)); - } else { - (0, import_util503.mix)(originStyle_1[keyShapeName_1], (_b = {}, _b[key] = enableStyle, _b)); - delete originStyle_1[key]; - } - delete enableStatesStyle[key]; - } - } - var originstyles = {}; - (0, import_util503.deepMix)(originstyles, originStyle_1, filtetDisableStatesStyle, enableStatesStyle); - var keyShapeSetted = false; - var _loop_4 = function _loop_42(originKey2) { - var _e, _f; - var style = originstyles[originKey2]; - if ((0, import_util503.isPlainObject)(style) && !ARROWS.includes(originKey2)) { - var subShape = group3["shapeMap"][originKey2] || group3.find(function(ele) { - return ele.get("name") === originKey2; - }); - if (subShape) { - if (subShape.get("type") === "text" || subShape.get("labelRelated")) { - delete style.x; - delete style.y; - delete style.matrix; - } - if (originKey2 === keyShapeName_1) { - if (type2 === "combo") { - delete style.r; - delete style.width; - delete style.height; - } - keyShapeSetted = true; - } - subShape.attr(style); - } - } else if (!keyShapeSetted) { - var value_4 = style || SHAPES_DEFAULT_ATTRS[type2][originKey2]; - if (type2 === "combo") { - if (!keyShapeName_1) { - shape.attr((_e = {}, _e[originKey2] = value_4, _e)); - } - } else { - shape.attr((_f = {}, _f[originKey2] = value_4, _f)); - } - } - }; - for (var originKey in originstyles) { - _loop_4(originKey); - } - } - }, - getStateStyle: function getStateStyle(name, item) { - var model = item.getModel(); - var type2 = item.getType(); - var _a6 = this.getOptions(model), stateStyles = _a6.stateStyles, _b = _a6.style, style = _b === void 0 ? {} : _b; - var modelStateStyle = model.stateStyles ? model.stateStyles[name] : stateStyles && stateStyles[name]; - if (type2 === "combo") { - return (0, import_util503.clone)(modelStateStyle); - } - return (0, import_util503.mix)({}, style, modelStateStyle); - }, - getControlPoints: function getControlPoints3(cfg) { - return cfg.controlPoints; - }, - getAnchorPoints: function getAnchorPoints3(cfg) { - var _a6, _b; - var anchorPoints = (cfg === null || cfg === void 0 ? void 0 : cfg.anchorPoints) || ((_a6 = this.getCustomConfig(cfg)) === null || _a6 === void 0 ? void 0 : _a6.anchorPoints) || ((_b = this.options) === null || _b === void 0 ? void 0 : _b.anchorPoints); - return anchorPoints; - } -}; - -// node_modules/@antv/g6-core/es/element/node.js -var singleNode = { - itemType: "node", - shapeType: "single-node", - labelPosition: "center", - offset: global_default.nodeLabel.offset, - getSize: function getSize2(cfg) { - var _a6; - var size14 = ((_a6 = this.mergeStyle) === null || _a6 === void 0 ? void 0 : _a6.size) || cfg.size || this.getOptions({}).size || global_default.defaultNode.size; - if ((0, import_util504.isArray)(size14) && size14.length === 1) { - size14 = [size14[0], size14[0]]; - } - if (!(0, import_util504.isArray)(size14)) { - size14 = [size14, size14]; - } - return size14; - }, - getLabelStyleByPosition: function getLabelStyleByPosition2(cfg, labelCfg) { - var labelPosition = labelCfg.position || this.labelPosition; - if (labelPosition === "center") { - return { - x: 0, - y: 0, - text: cfg.label - }; - } - var offset = labelCfg.offset; - if ((0, import_util504.isNil)(offset)) { - offset = this.offset; - } - var size14 = this.getSize(cfg); - var style; - switch (labelPosition) { - case "top": - style = { - x: 0, - y: -size14[1] / 2 - offset, - textBaseline: "bottom" - }; - break; - case "bottom": - style = { - x: 0, - y: size14[1] / 2 + offset, - textBaseline: "top" - }; - break; - case "left": - style = { - x: -size14[0] / 2 - offset, - y: 0, - textAlign: "right" - }; - break; - default: - style = { - x: size14[0] / 2 + offset, - y: 0, - textAlign: "left" - }; - break; - } - style.text = cfg.label; - return style; - }, - getLabelBgStyleByPosition: function getLabelBgStyleByPosition2(label17, labelCfg) { - var _a6; - if (!label17) - return {}; - var backgroundStyle = (_a6 = labelCfg.style) === null || _a6 === void 0 ? void 0 : _a6.background; - if (!backgroundStyle) - return {}; - var bbox = label17.getBBox(); - var padding3 = formatPadding2(backgroundStyle.padding); - var backgroundWidth = bbox.width + padding3[1] + padding3[3]; - var backgroundHeight = bbox.height + padding3[0] + padding3[2]; - return __assign(__assign({ - x: bbox.minX - padding3[3], - y: bbox.minY - padding3[0] - }, backgroundStyle), { - width: backgroundWidth, - height: backgroundHeight - }); - }, - drawShape: function drawShape3(cfg, group3) { - var shapeType = this.shapeType; - var style = this.getShapeStyle(cfg); - var shape = group3.addShape(shapeType, { - attrs: style, - draggable: true, - name: "node-shape" - }); - group3["shapeMap"]["node-shape"] = shape; - return shape; - }, - updateLinkPoints: function updateLinkPoints(cfg, group3) { - var defaultLinkPoints = (this.mergeStyle || this.getOptions(cfg)).linkPoints; - var markLeft = group3["shapeMap"]["link-point-left"] || group3.find(function(element) { - return element.get("className") === "link-point-left"; - }); - var markRight = group3["shapeMap"]["link-point-right"] || group3.find(function(element) { - return element.get("className") === "link-point-right"; - }); - var markTop = group3["shapeMap"]["link-point-top"] || group3.find(function(element) { - return element.get("className") === "link-point-top"; - }); - var markBottom = group3["shapeMap"]["link-point-bottom"] || group3.find(function(element) { - return element.get("className") === "link-point-bottom"; - }); - var currentLinkPoints; - if (markLeft) { - currentLinkPoints = markLeft.attr(); - } - if (markRight && !currentLinkPoints) { - currentLinkPoints = markRight.attr(); - } - if (markTop && !currentLinkPoints) { - currentLinkPoints = markTop.attr(); - } - if (markBottom && !currentLinkPoints) { - currentLinkPoints = markBottom.attr(); - } - if (!currentLinkPoints) - currentLinkPoints = defaultLinkPoints; - var linkPoints = (0, import_util504.mix)({}, currentLinkPoints, cfg.linkPoints); - var markFill = linkPoints.fill, markStroke = linkPoints.stroke, borderWidth = linkPoints.lineWidth; - var markSize = linkPoints.size / 2; - if (!markSize) - markSize = linkPoints.r; - var _a6 = cfg.linkPoints ? cfg.linkPoints : { - left: void 0, - right: void 0, - top: void 0, - bottom: void 0 - }, left2 = _a6.left, right2 = _a6.right, top = _a6.top, bottom = _a6.bottom; - var size14 = this.getSize(cfg); - var width2 = size14[0]; - var height = size14[1]; - var styles = { - r: markSize, - fill: markFill, - stroke: markStroke, - lineWidth: borderWidth - }; - if (markLeft) { - if (!left2 && left2 !== void 0) { - markLeft.remove(); - delete group3["shapeMap"]["link-point-left"]; - } else { - markLeft.attr(__assign(__assign({}, styles), { - x: -width2 / 2, - y: 0 - })); - } - } else if (left2) { - var name_1 = "link-point-left"; - group3["shapeMap"][name_1] = group3.addShape("circle", { - attrs: __assign(__assign({}, styles), { - x: -width2 / 2, - y: 0 - }), - className: name_1, - name: name_1, - isAnchorPoint: true - }); - } - if (markRight) { - if (!right2 && right2 !== void 0) { - markRight.remove(); - delete group3["shapeMap"]["link-point-right"]; - } - markRight.attr(__assign(__assign({}, styles), { - x: width2 / 2, - y: 0 - })); - } else if (right2) { - var name_2 = "link-point-right"; - group3["shapeMap"][name_2] = group3.addShape("circle", { - attrs: __assign(__assign({}, styles), { - x: width2 / 2, - y: 0 - }), - className: name_2, - name: name_2, - isAnchorPoint: true - }); - } - if (markTop) { - if (!top && top !== void 0) { - markTop.remove(); - delete group3["shapeMap"]["link-point-top"]; - } - markTop.attr(__assign(__assign({}, styles), { - x: 0, - y: -height / 2 - })); - } else if (top) { - var name_3 = "link-point-top"; - group3["shapeMap"][name_3] = group3.addShape("circle", { - attrs: __assign(__assign({}, styles), { - x: 0, - y: -height / 2 - }), - className: name_3, - name: name_3, - isAnchorPoint: true - }); - } - if (markBottom) { - if (!bottom && bottom !== void 0) { - markBottom.remove(); - delete group3["shapeMap"]["link-point-bottom"]; - } else { - markBottom.attr(__assign(__assign({}, styles), { - x: 0, - y: height / 2 - })); - } - } else if (bottom) { - var name_4 = "link-point-bottom"; - group3["shapeMap"][name_4] = group3.addShape("circle", { - attrs: __assign(__assign({}, styles), { - x: 0, - y: height / 2 - }), - className: name_4, - name: name_4, - isAnchorPoint: true - }); - } - }, - updateShape: function updateShape(cfg, item, keyShapeStyle, hasIcon, updateType) { - var keyShape = item.get("keyShape"); - keyShape.attr(__assign({}, keyShapeStyle)); - if (true) { - this.updateLabel(cfg, item, updateType); - } - if (hasIcon) { - this.updateIcon(cfg, item); - } - }, - updateIcon: function updateIcon(cfg, item) { - var _this = this; - var group3 = item.getContainer(); - var icon = (this.mergeStyle || this.getOptions(cfg)).icon; - var _a6 = cfg.icon ? cfg.icon : { - show: void 0, - text: void 0 - }, show = _a6.show, text = _a6.text; - var iconShape = group3["shapeMap"]["".concat(this.type, "-icon")] || group3.find(function(ele) { - return ele.get("name") === "".concat(_this.type, "-icon"); - }); - if (iconShape) { - if (show || show === void 0) { - var iconConfig = (0, import_util504.mix)({}, iconShape.attr(), icon); - var _b = iconConfig.width, w4 = _b === void 0 ? 20 : _b, _c = iconConfig.height, h3 = _c === void 0 ? 20 : _c; - if (iconConfig.fontFamily === "iconfont" || iconConfig.hasOwnProperty("text")) { - w4 = 0; - h3 = 0; - } - iconShape.attr(__assign(__assign({}, iconConfig), { - x: -w4 / 2, - y: -h3 / 2 - })); - } else { - iconShape.remove(); - } - } else if (show) { - var name_5 = "".concat(this.type, "-icon"); - if (text) { - group3["shapeMap"][name_5] = group3.addShape("text", { - attrs: __assign({ - x: 0, - y: 0, - fontSize: 12, - fill: "#000", - stroke: "#000", - textBaseline: "middle", - textAlign: "center" - }, icon), - className: name_5, - name: name_5 - }); - } else { - var w4 = icon.width, h3 = icon.height; - group3["shapeMap"][name_5] = group3.addShape("image", { - attrs: __assign(__assign({}, icon), { - x: -w4 / 2, - y: -h3 / 2 - }), - className: name_5, - name: name_5 - }); - } - var labelShape = group3["shapeMap"]["node-label"] || group3.find(function(ele) { - return ele.get("name") === "node-label"; - }); - if (labelShape) { - labelShape.toFront(); - } - } - } -}; -var singleNodeDef = __assign(__assign({}, shapeBase), singleNode); -shape_default4.registerNode("single-node", singleNodeDef); - -// node_modules/@antv/g6-core/es/element/edge.js -var import_util505 = __toModule(require_lib()); -var CLS_SHAPE = "edge-shape"; -function revertAlign(labelPosition) { - var textAlign = labelPosition; - if (labelPosition === "start") { - textAlign = "end"; - } else if (labelPosition === "end") { - textAlign = "start"; - } - return textAlign; -} -var singleEdge = { - itemType: "edge", - labelPosition: "center", - refX: 0, - refY: 0, - labelAutoRotate: false, - options: { - size: global_default.defaultEdge.size, - style: { - x: 0, - y: 0, - stroke: global_default.defaultEdge.style.stroke, - lineAppendWidth: global_default.defaultEdge.style.lineAppendWidth - }, - labelCfg: { - style: { - fill: global_default.edgeLabel.style.fill, - fontSize: global_default.edgeLabel.style.fontSize, - fontFamily: global_default.windowFontFamily - } - }, - stateStyles: __assign({}, global_default.edgeStateStyles) - }, - getPath: function getPath5(points) { - var path = []; - (0, import_util505.each)(points, function(point2, index2) { - if (index2 === 0) { - path.push(["M", point2.x, point2.y]); - } else { - path.push(["L", point2.x, point2.y]); - } - }); - return path; - }, - getShapeStyle: function getShapeStyle2(cfg) { - var defaultStyle = this.options.style; - var strokeStyle = { - stroke: cfg.color - }; - var style = (0, import_util505.mix)({}, defaultStyle, strokeStyle, cfg.style); - var size14 = cfg.size || global_default.defaultEdge.size; - cfg = this.getPathPoints(cfg); - var startPoint = cfg.startPoint, endPoint = cfg.endPoint; - var controlPoints = this.getControlPoints(cfg); - var points = [startPoint]; - if (controlPoints) { - points = points.concat(controlPoints); - } - points.push(endPoint); - var path = this.getPath(points); - var styles = (0, import_util505.mix)({}, global_default.defaultEdge.style, { - stroke: global_default.defaultEdge.color, - lineWidth: size14, - path - }, style); - return styles; - }, - updateShapeStyle: function updateShapeStyle2(cfg, item, updateType) { - var _a6; - var group3 = item.getContainer(); - var shape = ((_a6 = item.getKeyShape) === null || _a6 === void 0 ? void 0 : _a6.call(item)) || group3["shapeMap"]["edge-shape"]; - var size14 = cfg.size; - cfg = this.getPathPoints(cfg); - var startPoint = cfg.startPoint, endPoint = cfg.endPoint; - var controlPoints = this.getControlPoints(cfg); - var points = [startPoint]; - if (controlPoints) { - points = points.concat(controlPoints); - } - points.push(endPoint); - var currentAttr = shape.attr(); - var previousStyle = cfg.style || {}; - if (previousStyle.stroke === void 0) { - previousStyle.stroke = cfg.color; - } - var source = cfg.sourceNode; - var target = cfg.targetNode; - var routeCfg = { - radius: previousStyle.radius - }; - if (!controlPoints) { - routeCfg = { - source, - target, - offset: previousStyle.offset, - radius: previousStyle.radius - }; - } - var path = this.getPath(points, routeCfg); - var style = {}; - if (updateType === "move") { - style = { - path - }; - } else { - if (currentAttr.endArrow && previousStyle.endArrow === false) { - cfg.style.endArrow = { - path: "" - }; - } - if (currentAttr.startArrow && previousStyle.startArrow === false) { - cfg.style.startArrow = { - path: "" - }; - } - style = __assign({}, cfg.style); - if (style.lineWidth === void 0) - style.lineWdith = ((0, import_util505.isNumber)(size14) ? size14 : size14 === null || size14 === void 0 ? void 0 : size14[0]) || currentAttr.lineWidth; - if (style.path === void 0) - style.path = path; - if (style.stroke === void 0) - style.stroke = currentAttr.stroke || cfg.color; - } - if (shape) { - shape.attr(style); - } - }, - getLabelStyleByPosition: function getLabelStyleByPosition3(cfg, labelCfg, group3) { - var labelPosition = labelCfg.position || this.labelPosition; - var style = {}; - var pathShape = group3 === null || group3 === void 0 ? void 0 : group3["shapeMap"][CLS_SHAPE]; - var pointPercent; - if (labelPosition === "start") { - pointPercent = 0; - } else if (labelPosition === "end") { - pointPercent = 1; - } else { - pointPercent = 0.5; - } - var offsetX = labelCfg.refX || this.refX; - var offsetY = labelCfg.refY || this.refY; - if (cfg.startPoint.x === cfg.endPoint.x && cfg.startPoint.y === cfg.endPoint.y) { - style.x = cfg.startPoint.x + offsetX; - style.y = cfg.startPoint.y + offsetY; - style.text = cfg.label; - return style; - } - var autoRotate; - if ((0, import_util505.isNil)(labelCfg.autoRotate)) - autoRotate = this.labelAutoRotate; - else - autoRotate = labelCfg.autoRotate; - var offsetStyle = getLabelPosition(pathShape, pointPercent, offsetX, offsetY, autoRotate); - style.x = offsetStyle.x; - style.y = offsetStyle.y; - style.rotate = offsetStyle.rotate; - style.textAlign = this._getTextAlign(labelPosition, offsetStyle.angle); - style.text = cfg.label; - return style; - }, - getLabelBgStyleByPosition: function getLabelBgStyleByPosition3(label17, labelCfg) { - if (!label17) { - return {}; - } - var bbox = label17.getBBox(); - var backgroundStyle = labelCfg.style && labelCfg.style.background; - if (!backgroundStyle) { - return {}; - } - var padding3 = backgroundStyle.padding; - var backgroundWidth = bbox.width + padding3[1] + padding3[3]; - var backgroundHeight = bbox.height + padding3[0] + padding3[2]; - var style = __assign(__assign({}, backgroundStyle), { - width: backgroundWidth, - height: backgroundHeight, - x: bbox.minX - padding3[3], - y: bbox.minY - padding3[0], - matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1] - }); - var autoRotate; - if ((0, import_util505.isNil)(labelCfg.autoRotate)) - autoRotate = this.labelAutoRotate; - else - autoRotate = labelCfg.autoRotate; - if (autoRotate) { - style.matrix = label17.attr("matrix") || [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - return style; - }, - _getTextAlign: function _getTextAlign(labelPosition, angle3) { - var textAlign = "center"; - if (!angle3) { - return labelPosition; - } - angle3 = angle3 % (Math.PI * 2); - if (labelPosition !== "center") { - if (angle3 >= 0 && angle3 <= Math.PI / 2 || angle3 >= 3 / 2 * Math.PI && angle3 < 2 * Math.PI) { - textAlign = labelPosition; - } else { - textAlign = revertAlign(labelPosition); - } - } - return textAlign; - }, - getControlPoints: function getControlPoints4(cfg) { - return cfg.controlPoints; - }, - getPathPoints: function getPathPoints2(cfg) { - return cfg; - }, - drawShape: function drawShape4(cfg, group3) { - var shapeStyle = this.getShapeStyle(cfg); - var shape = group3.addShape("path", { - className: CLS_SHAPE, - name: CLS_SHAPE, - attrs: shapeStyle - }); - group3["shapeMap"][CLS_SHAPE] = shape; - return shape; - }, - drawLabel: function drawLabel2(cfg, group3) { - var defaultLabelCfg3 = this.options.labelCfg; - var labelCfg = (0, import_util505.deepMix)({}, defaultLabelCfg3, cfg.labelCfg); - var labelStyle = this.getLabelStyle(cfg, labelCfg, group3); - var rotate8 = labelStyle.rotate; - delete labelStyle.rotate; - var label17 = group3.addShape("text", { - attrs: labelStyle, - name: "text-shape", - labelRelated: true - }); - group3["shapeMap"]["text-shape"] = label17; - if (!isNaN(rotate8) && rotate8 !== "") { - label17.rotateAtStart(rotate8); - } - if (labelStyle.background) { - var rect3 = this.drawLabelBg(cfg, group3, label17, labelStyle, rotate8); - var labelBgClassname = this.itemType + CLS_LABEL_BG_SUFFIX; - rect3.set("classname", labelBgClassname); - group3["shapeMap"][labelBgClassname] = rect3; - label17.toFront(); - } - return label17; - }, - drawLabelBg: function drawLabelBg2(cfg, group3, label17, labelStyle, rotate8) { - var defaultLabelCfg3 = this.options.labelCfg; - var labelCfg = (0, import_util505.deepMix)({}, defaultLabelCfg3, cfg.labelCfg); - var style = this.getLabelBgStyleByPosition(label17, labelCfg); - var rect3 = group3.addShape("rect", { - name: "text-bg-shape", - attrs: style, - labelRelated: true - }); - group3["shapeMap"]["text-bg-shape"] = rect3; - return rect3; - } -}; -var singleEdgeDef = __assign(__assign({}, shapeBase), singleEdge); -shape_default4.registerEdge("single-edge", singleEdgeDef); -shape_default4.registerEdge("line", { - getControlPoints: function getControlPoints5() { - return void 0; - } -}, "single-edge"); -shape_default4.registerEdge("spline", { - getPath: function getPath6(points) { - var path = getSpline2(points); - return path; - } -}, "single-edge"); -shape_default4.registerEdge("arc", { - curveOffset: 20, - clockwise: 1, - getControlPoints: function getControlPoints6(cfg) { - var startPoint = cfg.startPoint, endPoint = cfg.endPoint; - var midPoint = { - x: (startPoint.x + endPoint.x) / 2, - y: (startPoint.y + endPoint.y) / 2 - }; - var center2; - var arcPoint; - if (cfg.controlPoints !== void 0) { - arcPoint = cfg.controlPoints[0]; - center2 = getCircleCenterByPoints(startPoint, arcPoint, endPoint); - if (startPoint.x <= endPoint.x && startPoint.y > endPoint.y) { - this.clockwise = center2.x > arcPoint.x ? 0 : 1; - } else if (startPoint.x <= endPoint.x && startPoint.y < endPoint.y) { - this.clockwise = center2.x > arcPoint.x ? 1 : 0; - } else if (startPoint.x > endPoint.x && startPoint.y <= endPoint.y) { - this.clockwise = center2.y < arcPoint.y ? 0 : 1; - } else { - this.clockwise = center2.y < arcPoint.y ? 1 : 0; - } - if ((arcPoint.x - startPoint.x) / (arcPoint.y - startPoint.y) === (endPoint.x - startPoint.x) / (endPoint.y - startPoint.y)) { - return []; - } - } else { - if (cfg.curveOffset === void 0) { - cfg.curveOffset = this.curveOffset; - } - if ((0, import_util505.isArray)(cfg.curveOffset)) { - cfg.curveOffset = cfg.curveOffset[0]; - } - if (cfg.curveOffset < 0) { - this.clockwise = 0; - } else { - this.clockwise = 1; - } - var vec = { - x: endPoint.x - startPoint.x, - y: endPoint.y - startPoint.y - }; - var edgeAngle = Math.atan2(vec.y, vec.x); - arcPoint = { - x: cfg.curveOffset * Math.cos(-Math.PI / 2 + edgeAngle) + midPoint.x, - y: cfg.curveOffset * Math.sin(-Math.PI / 2 + edgeAngle) + midPoint.y - }; - center2 = getCircleCenterByPoints(startPoint, arcPoint, endPoint); - } - var radius = distance10(startPoint, center2); - var controlPoints = [{ - x: radius, - y: radius - }]; - return controlPoints; - }, - getPath: function getPath7(points) { - var path = []; - path.push(["M", points[0].x, points[0].y]); - if (points.length === 2) { - path.push(["L", points[1].x, points[1].y]); - } else { - path.push(["A", points[1].x, points[1].y, 0, 0, this.clockwise, points[2].x, points[2].y]); - } - return path; - } -}, "single-edge"); -shape_default4.registerEdge("quadratic", { - curvePosition: 0.5, - curveOffset: -20, - getControlPoints: function getControlPoints7(cfg) { - var controlPoints = cfg.controlPoints; - if (!controlPoints || !controlPoints.length) { - var startPoint = cfg.startPoint, endPoint = cfg.endPoint; - if (cfg.curveOffset === void 0) - cfg.curveOffset = this.curveOffset; - if (cfg.curvePosition === void 0) - cfg.curvePosition = this.curvePosition; - if ((0, import_util505.isArray)(this.curveOffset)) - cfg.curveOffset = cfg.curveOffset[0]; - if ((0, import_util505.isArray)(this.curvePosition)) - cfg.curvePosition = cfg.curveOffset[0]; - var innerPoint = getControlPoint(startPoint, endPoint, cfg.curvePosition, cfg.curveOffset); - controlPoints = [innerPoint]; - } - return controlPoints; - }, - getPath: function getPath8(points) { - var path = []; - path.push(["M", points[0].x, points[0].y]); - path.push(["Q", points[1].x, points[1].y, points[2].x, points[2].y]); - return path; - } -}, "single-edge"); -shape_default4.registerEdge("cubic", { - curvePosition: [1 / 2, 1 / 2], - curveOffset: [-20, 20], - getControlPoints: function getControlPoints8(cfg) { - var controlPoints = cfg.controlPoints; - if (cfg.curveOffset === void 0) - cfg.curveOffset = this.curveOffset; - if (cfg.curvePosition === void 0) - cfg.curvePosition = this.curvePosition; - if ((0, import_util505.isNumber)(cfg.curveOffset)) - cfg.curveOffset = [cfg.curveOffset, -cfg.curveOffset]; - if ((0, import_util505.isNumber)(cfg.curvePosition)) - cfg.curvePosition = [cfg.curvePosition, 1 - cfg.curvePosition]; - if (!controlPoints || !controlPoints.length || controlPoints.length < 2) { - var startPoint = cfg.startPoint, endPoint = cfg.endPoint; - var innerPoint1 = getControlPoint(startPoint, endPoint, cfg.curvePosition[0], cfg.curveOffset[0]); - var innerPoint2 = getControlPoint(startPoint, endPoint, cfg.curvePosition[1], cfg.curveOffset[1]); - controlPoints = [innerPoint1, innerPoint2]; - } - return controlPoints; - }, - getPath: function getPath9(points) { - var path = []; - path.push(["M", points[0].x, points[0].y]); - path.push(["C", points[1].x, points[1].y, points[2].x, points[2].y, points[3].x, points[3].y]); - return path; - } -}, "single-edge"); -shape_default4.registerEdge("cubic-vertical", { - curvePosition: [1 / 2, 1 / 2], - minCurveOffset: [0, 0], - curveOffset: void 0, - getControlPoints: function getControlPoints9(cfg) { - var startPoint = cfg.startPoint, endPoint = cfg.endPoint; - if (cfg.curvePosition === void 0) - cfg.curvePosition = this.curvePosition; - if (cfg.curveOffset === void 0) - cfg.curveOffset = this.curveOffset; - if (cfg.minCurveOffset === void 0) - cfg.minCurveOffset = this.minCurveOffset; - if ((0, import_util505.isNumber)(cfg.curveOffset)) - cfg.curveOffset = [cfg.curveOffset, -cfg.curveOffset]; - if ((0, import_util505.isNumber)(cfg.minCurveOffset)) - cfg.minCurveOffset = [cfg.minCurveOffset, -cfg.minCurveOffset]; - if ((0, import_util505.isNumber)(cfg.curvePosition)) - cfg.curvePosition = [cfg.curvePosition, 1 - cfg.curvePosition]; - var yDist = endPoint.y - startPoint.y; - var curveOffset = [0, 0]; - if (cfg.curveOffset) { - curveOffset = cfg.curveOffset; - } else if (Math.abs(yDist) < Math.abs(cfg.minCurveOffset[0])) { - curveOffset = cfg.minCurveOffset; - } - var innerPoint1 = { - x: startPoint.x, - y: startPoint.y + yDist * this.curvePosition[0] + curveOffset[0] - }; - var innerPoint2 = { - x: endPoint.x, - y: endPoint.y - yDist * this.curvePosition[1] + curveOffset[1] - }; - return [innerPoint1, innerPoint2]; - } -}, "cubic"); -shape_default4.registerEdge("cubic-horizontal", { - curvePosition: [1 / 2, 1 / 2], - minCurveOffset: [0, 0], - curveOffset: void 0, - getControlPoints: function getControlPoints10(cfg) { - var startPoint = cfg.startPoint, endPoint = cfg.endPoint; - if (cfg.curvePosition === void 0) - cfg.curvePosition = this.curvePosition; - if (cfg.curveOffset === void 0) - cfg.curveOffset = this.curveOffset; - if (cfg.minCurveOffset === void 0) - cfg.minCurveOffset = this.minCurveOffset; - if ((0, import_util505.isNumber)(cfg.curveOffset)) - cfg.curveOffset = [cfg.curveOffset, -cfg.curveOffset]; - if ((0, import_util505.isNumber)(cfg.minCurveOffset)) - cfg.minCurveOffset = [cfg.minCurveOffset, -cfg.minCurveOffset]; - if ((0, import_util505.isNumber)(cfg.curvePosition)) - cfg.curvePosition = [cfg.curvePosition, 1 - cfg.curvePosition]; - var xDist = endPoint.x - startPoint.x; - var curveOffset = [0, 0]; - if (cfg.curveOffset) { - curveOffset = cfg.curveOffset; - } else if (Math.abs(xDist) < Math.abs(cfg.minCurveOffset[0])) { - curveOffset = cfg.minCurveOffset; - } - var innerPoint1 = { - x: startPoint.x + xDist * this.curvePosition[0] + curveOffset[0], - y: startPoint.y - }; - var innerPoint2 = { - x: endPoint.x - xDist * this.curvePosition[1] + curveOffset[1], - y: endPoint.y - }; - var controlPoints = [innerPoint1, innerPoint2]; - return controlPoints; - } -}, "cubic"); -shape_default4.registerEdge("loop", { - getPathPoints: function getPathPoints3(cfg) { - return getLoopCfgs(cfg); - }, - getControlPoints: function getControlPoints11(cfg) { - return cfg.controlPoints; - }, - afterDraw: function afterDraw3(cfg) { - cfg.controlPoints = void 0; - }, - afterUpdate: function afterUpdate3(cfg) { - cfg.controlPoints = void 0; - } -}, "cubic"); - -// node_modules/@antv/g6-core/es/element/combo.js -var import_util506 = __toModule(require_lib()); -var singleCombo = { - itemType: "combo", - shapeType: "single-combo", - labelPosition: "top", - refX: global_default.comboLabel.refX, - refY: global_default.comboLabel.refY, - options: { - style: { - stroke: global_default.defaultCombo.style.stroke, - fill: global_default.defaultCombo.style.fill, - lineWidth: global_default.defaultCombo.style.lineWidth - }, - labelCfg: { - style: { - fill: global_default.comboLabel.style.fill, - fontSize: global_default.comboLabel.style.fontSize, - fontFamily: global_default.windowFontFamily - } - }, - stateStyles: __assign({}, global_default.comboStateStyles) - }, - getSize: function getSize3(cfg) { - var size14 = (0, import_util506.clone)(cfg.size || this.options.size || global_default.defaultCombo.size); - if ((0, import_util506.isArray)(size14) && size14.length === 1) { - size14 = [size14[0], size14[0]]; - } - if (!(0, import_util506.isArray)(size14)) { - size14 = [size14, size14]; - } - return size14; - }, - getLabelStyleByPosition: function getLabelStyleByPosition4(cfg, labelCfg) { - var labelPosition = labelCfg.position || this.labelPosition; - var cfgStyle = cfg.style; - var padding3 = cfg.padding || this.options.padding; - if ((0, import_util506.isArray)(padding3)) - padding3 = padding3[0]; - var refX = labelCfg.refX, refY = labelCfg.refY; - if ((0, import_util506.isNil)(refX)) { - refX = this.refX; - } - if ((0, import_util506.isNil)(refY)) { - refY = this.refY; - } - var size14 = this.getSize(cfg); - var r4 = Math.max(cfgStyle.r, size14[0] / 2) || size14[0] / 2; - var dis = r4 + padding3; - var style; - switch (labelPosition) { - case "top": - style = { - x: 0, - y: -dis - refY, - textBaseline: "bottom", - textAlign: "center" - }; - break; - case "bottom": - style = { - x: 0, - y: dis + refY, - textBaseline: "bottom", - textAlign: "center" - }; - break; - case "left": - style = { - x: -dis + refX, - y: 0, - textAlign: "left" - }; - break; - case "center": - style = { - x: 0, - y: 0, - text: cfg.label, - textAlign: "center" - }; - break; - default: - style = { - x: dis + refX, - y: 0, - textAlign: "right" - }; - break; - } - style.text = cfg.label; - return style; - }, - drawShape: function drawShape5(cfg, group3) { - var shapeType = this.shapeType; - var style = this.getShapeStyle(cfg); - var shape = group3.addShape(shapeType, { - attrs: style, - draggable: true, - name: "combo-shape" - }); - return shape; - }, - updateShape: function updateShape2(cfg, item, keyShapeStyle) { - var keyShape = item.get("keyShape"); - var animate = cfg.animate === void 0 ? this.options.animate : cfg.animate; - if (animate && keyShape.animate) { - keyShape.animate(keyShapeStyle, { - duration: 200, - easing: "easeLinear" - }); - } else { - keyShape.attr(__assign({}, keyShapeStyle)); - } - this.updateLabel(cfg, item); - } -}; -var singleComboDef = __assign(__assign({}, shapeBase), singleCombo); -shape_default4.registerCombo("single-combo", singleComboDef); - -// node_modules/@antv/g6-core/es/element/combos/circle.js -var import_util507 = __toModule(require_lib()); -shape_default4.registerCombo("circle", { - options: { - size: [global_default.defaultCombo.size[0], global_default.defaultCombo.size[0]], - padding: global_default.defaultCombo.padding[0], - animate: true, - style: { - stroke: global_default.defaultCombo.style.stroke, - fill: global_default.defaultCombo.style.fill, - lineWidth: global_default.defaultCombo.style.lineWidth - }, - labelCfg: { - style: { - fill: global_default.comboLabel.style.fill, - fontSize: global_default.comboLabel.style.fontSize - }, - refX: 0, - refY: 0 - }, - stateStyles: __assign({}, global_default.comboStateStyles) - }, - shapeType: "circle", - labelPosition: "top", - drawShape: function drawShape6(cfg, group3) { - var style = this.getShapeStyle(cfg); - delete style.height; - delete style.width; - var keyShape = group3.addShape("circle", { - attrs: style, - className: "circle-combo", - name: "circle-combo", - draggable: true - }); - return keyShape; - }, - getShapeStyle: function getShapeStyle3(cfg) { - var defaultStyle = this.options.style; - var padding3 = cfg.padding || this.options.padding; - if ((0, import_util507.isArray)(padding3)) - padding3 = padding3[0]; - var strokeStyle = { - stroke: cfg.color - }; - var style = (0, import_util507.mix)({}, defaultStyle, strokeStyle, cfg.style); - var r4; - if (cfg.fixSize) { - r4 = (0, import_util507.isNumber)(cfg.fixSize) ? cfg.fixSize : cfg.fixSize[0]; - } else { - var size14 = this.getSize(cfg); - if (!(0, import_util507.isNumber)(style.r) || isNaN(style.r)) - r4 = size14[0] / 2 || global_default.defaultCombo.style.r; - else - r4 = Math.max(style.r, size14[0] / 2) || size14[0] / 2; - } - style.r = r4 + padding3; - var styles = __assign({ - x: 0, - y: 0 - }, style); - if (cfg.style) - cfg.style.r = r4; - else { - cfg.style = { - r: r4 - }; - } - return styles; - }, - update: function update3(cfg, item) { - var size14 = this.getSize(cfg); - var padding3 = cfg.padding || this.options.padding; - if ((0, import_util507.isArray)(padding3)) - padding3 = padding3[0]; - var cfgStyle = (0, import_util507.clone)(cfg.style); - var r4; - if (cfg.fixSize) { - r4 = (0, import_util507.isNumber)(cfg.fixSize) ? cfg.fixSize : cfg.fixSize[0]; - } else { - r4 = Math.max(cfgStyle.r, size14[0] / 2) || size14[0] / 2; - } - cfgStyle.r = r4 + padding3; - var itemCacheSize = item.get("sizeCache"); - if (itemCacheSize) { - itemCacheSize.r = cfgStyle.r; - } - var strokeStyle = { - stroke: cfg.color - }; - var keyShape = item.get("keyShape"); - var style = (0, import_util507.mix)({}, keyShape.attr(), strokeStyle, cfgStyle); - if (cfg.style) - cfg.style.r = r4; - else { - cfg.style = { - r: r4 - }; - } - this.updateShape(cfg, item, style, true); - } -}, "single-combo"); - -// node_modules/@antv/g6-core/es/element/combos/rect.js -var import_util508 = __toModule(require_lib()); -shape_default4.registerCombo("rect", { - options: { - size: [40, 5], - padding: [25, 20, 15, 20], - animate: true, - style: { - radius: 0, - stroke: global_default.defaultCombo.style.stroke, - fill: global_default.defaultCombo.style.fill, - lineWidth: global_default.defaultCombo.style.lineWidth - }, - labelCfg: { - style: { - fill: global_default.comboLabel.style.fill, - fontSize: global_default.comboLabel.style.fontSize, - fontFamily: global_default.windowFontFamily - } - }, - anchorPoints: [[0, 0.5], [1, 0.5]], - stateStyles: __assign({}, global_default.comboStateStyles) - }, - shapeType: "rect", - labelPosition: "top", - drawShape: function drawShape7(cfg, group3) { - var style = this.getShapeStyle(cfg); - var keyShape = group3.addShape("rect", { - attrs: style, - className: "rect-combo", - name: "rect-combo", - draggable: true - }); - return keyShape; - }, - getLabelStyleByPosition: function getLabelStyleByPosition5(cfg, labelCfg) { - var labelPosition = labelCfg.position || this.labelPosition; - var cfgStyle = cfg.style; - var padding3 = cfg.padding || this.options.padding; - if ((0, import_util508.isNumber)(padding3)) - padding3 = [padding3, padding3, padding3, padding3]; - var refX = labelCfg.refX, refY = labelCfg.refY; - if ((0, import_util508.isNil)(refX)) { - refX = this.refX; - } - if ((0, import_util508.isNil)(refY)) { - refY = this.refY; - } - var leftDis = cfgStyle.width / 2 + padding3[3]; - var topDis = cfgStyle.height / 2 + padding3[0]; - var style; - switch (labelPosition) { - case "top": - style = { - x: 0 - leftDis + refX, - y: 0 - topDis + refY, - textBaseline: "top", - textAlign: "left" - }; - break; - case "bottom": - style = { - x: 0, - y: topDis + refY, - textBaseline: "bottom", - textAlign: "center" - }; - break; - case "left": - style = { - x: 0 - leftDis + refY, - y: 0, - textAlign: "left" - }; - break; - case "center": - style = { - x: 0, - y: 0, - text: cfg.label, - textAlign: "center" - }; - break; - default: - style = { - x: leftDis + refX, - y: 0, - textAlign: "right" - }; - break; - } - style.text = cfg.label; - return style; - }, - getShapeStyle: function getShapeStyle4(cfg) { - var defaultStyle = this.options.style; - var padding3 = cfg.padding || this.options.padding; - if ((0, import_util508.isNumber)(padding3)) - padding3 = [padding3, padding3, padding3, padding3]; - var strokeStyle = { - stroke: cfg.color - }; - var style = (0, import_util508.mix)({}, defaultStyle, strokeStyle, cfg.style); - var size14 = this.getSize(cfg); - var width2; - var height; - var fixSize = cfg.collapsed && cfg.fixCollapseSize ? cfg.fixCollapseSize : cfg.fixSize; - if (fixSize) { - if ((0, import_util508.isNumber)(fixSize)) { - width2 = fixSize; - height = fixSize; - } else { - width2 = fixSize[0]; - height = fixSize[1]; - } - } else { - if (!(0, import_util508.isNumber)(style.width) || isNaN(style.width)) - width2 = size14[0] || global_default.defaultCombo.style.width; - else - width2 = Math.max(style.width, size14[0]) || size14[0]; - if (!(0, import_util508.isNumber)(style.height) || isNaN(style.height)) - height = size14[1] || global_default.defaultCombo.style.height; - else - height = Math.max(style.height, size14[1]) || size14[1]; - } - var x6 = -width2 / 2 - padding3[3]; - var y5 = -height / 2 - padding3[0]; - style.width = width2 + padding3[1] + padding3[3]; - style.height = height + padding3[0] + padding3[2]; - var styles = __assign({ - x: x6, - y: y5 - }, style); - if (!cfg.style) { - cfg.style = { - width: width2, - height - }; - } else { - cfg.style.width = width2; - cfg.style.height = height; - } - return styles; - }, - update: function update4(cfg, item) { - var size14 = this.getSize(cfg); - var padding3 = cfg.padding || this.options.padding; - if ((0, import_util508.isNumber)(padding3)) - padding3 = [padding3, padding3, padding3, padding3]; - var cfgStyle = (0, import_util508.clone)(cfg.style); - var width2, height; - var fixSize = cfg.collapsed && cfg.fixCollapseSize ? cfg.fixCollapseSize : cfg.fixSize; - if (fixSize) { - if ((0, import_util508.isNumber)(fixSize)) { - width2 = fixSize; - height = fixSize; - } else { - width2 = fixSize[0]; - height = fixSize[1]; - } - } else { - width2 = Math.max(cfgStyle.width, size14[0]) || size14[0]; - height = Math.max(cfgStyle.height, size14[1]) || size14[1]; - } - cfgStyle.width = width2 + padding3[1] + padding3[3]; - cfgStyle.height = height + padding3[0] + padding3[2]; - var itemCacheSize = item.get("sizeCache"); - if (itemCacheSize) { - itemCacheSize.width = cfgStyle.width; - itemCacheSize.height = cfgStyle.height; - } - cfgStyle.x = -width2 / 2 - padding3[3]; - cfgStyle.y = -height / 2 - padding3[0]; - var strokeStyle = { - stroke: cfg.color - }; - var keyShape = item.get("keyShape"); - var style = (0, import_util508.mix)({}, keyShape.attr(), strokeStyle, cfgStyle); - if (cfg.style) { - cfg.style.width = width2; - cfg.style.height = height; - } else { - cfg.style = { - width: width2, - height - }; - } - this.updateShape(cfg, item, style, false); - }, - updateShape: function updateShape3(cfg, item, keyShapeStyle) { - var keyShape = item.get("keyShape"); - var animate = cfg.animate === void 0 ? this.options.animate : cfg.animate; - if (animate && keyShape.animate) { - keyShape.animate(keyShapeStyle, { - duration: 200, - easing: "easeLinear" - }); - } else { - keyShape.attr(__assign({}, keyShapeStyle)); - } - this.updateLabel(cfg, item); - } -}, "single-combo"); - -// node_modules/@antv/g6-core/es/element/nodes/simple-circle.js -var import_util509 = __toModule(require_lib()); -shape_default4.registerNode("simple-circle", { - options: { - size: global_default.defaultNode.size, - style: { - x: 0, - y: 0, - stroke: global_default.defaultNode.style.stroke, - fill: global_default.defaultNode.style.fill, - lineWidth: global_default.defaultNode.style.lineWidth - }, - labelCfg: { - style: { - fill: global_default.nodeLabel.style.fill, - fontSize: global_default.nodeLabel.style.fontSize, - fontFamily: global_default.windowFontFamily - } - }, - stateStyles: __assign({}, global_default.nodeStateStyles) - }, - shapeType: "simple-circle", - labelPosition: "center", - shapeMap: {}, - drawShape: function drawShape8(cfg, group3) { - var style = this.getShapeStyle(cfg); - var name = "".concat(this.type, "-keyShape"); - var keyShape = group3.addShape("circle", { - attrs: style, - className: "".concat(this.type, "-keyShape"), - name, - draggable: true - }); - group3["shapeMap"][name] = keyShape; - return keyShape; - }, - getShapeStyle: function getShapeStyle5(cfg) { - var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style; - var strokeStyle = { - stroke: cfg.color - }; - var style = (0, import_util509.deepMix)({}, defaultStyle, strokeStyle); - var size14 = this.getSize(cfg); - var r4 = size14[0] / 2; - var styles = __assign({ - x: 0, - y: 0, - r: r4 - }, style); - return styles; - }, - update: function update5(cfg, item, updateType) { - var size14 = this.getSize(cfg); - var strokeStyle = { - stroke: cfg.color, - r: size14[0] / 2 - }; - var keyShape = item.get("keyShape"); - var style = (0, import_util509.deepMix)({}, keyShape.attr(), strokeStyle, cfg.style); - this.updateShape(cfg, item, style, true, updateType); - } -}, "single-node"); - -// node_modules/@antv/g6-core/es/element/nodes/simple-rect.js -var import_util510 = __toModule(require_lib()); -shape_default4.registerNode("simple-rect", { - options: { - size: [100, 30], - style: { - radius: 0, - stroke: global_default.defaultNode.style.stroke, - fill: global_default.defaultNode.style.fill, - lineWidth: global_default.defaultNode.style.lineWidth - }, - labelCfg: { - style: { - fill: global_default.nodeLabel.style.fill, - fontSize: global_default.nodeLabel.style.fontSize, - fontFamily: global_default.windowFontFamily - } - }, - anchorPoints: [[0, 0.5], [1, 0.5]], - stateStyles: __assign({}, global_default.nodeStateStyles) - }, - shapeType: "simple-rect", - labelPosition: "center", - drawShape: function drawShape9(cfg, group3) { - var style = this.getShapeStyle(cfg); - var keyShape = group3.addShape("rect", { - attrs: style, - className: "".concat(this.type, "-keyShape"), - name: "".concat(this.type, "-keyShape"), - draggable: true - }); - return keyShape; - }, - getShapeStyle: function getShapeStyle6(cfg) { - var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style; - var strokeStyle = { - stroke: cfg.color - }; - var style = (0, import_util510.mix)({}, defaultStyle, strokeStyle); - var size14 = this.getSize(cfg); - var width2 = style.width || size14[0]; - var height = style.height || size14[1]; - var styles = __assign({ - x: -width2 / 2, - y: -height / 2, - width: width2, - height - }, style); - return styles; - }, - update: function update6(cfg, item, updateType) { - var group3 = item.getContainer(); - var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style; - var size14 = this.getSize(cfg); - var keyShape = item.get("keyShape"); - if (!cfg.size) { - size14[0] = keyShape.attr("width") || defaultStyle.width; - size14[1] = keyShape.attr("height") || defaultStyle.height; - } - var strokeStyle = { - stroke: cfg.color, - x: -size14[0] / 2, - y: -size14[1] / 2, - width: size14[0], - height: size14[1] - }; - var style = (0, import_util510.mix)({}, defaultStyle, keyShape.attr(), strokeStyle); - style = (0, import_util510.mix)(style, cfg.style); - this.updateShape(cfg, item, style, false, updateType); - } -}, "single-node"); - -// node_modules/@antv/g6-core/es/element/nodes/image.js -shape_default4.registerNode("image", { - options: { - img: "https://gw.alipayobjects.com/mdn/rms_f8c6a0/afts/img/A*eD7nT6tmYgAAAAAAAAAAAABkARQnAQ", - size: 200, - labelCfg: { - style: { - fontFamily: global_default.windowFontFamily - } - }, - clipCfg: { - show: false, - type: "circle", - r: 50, - rx: 50, - ry: 35, - width: 50, - height: 35, - points: [[30, 12], [12, 30], [30, 48], [48, 30]], - path: [["M", 25, 25], ["L", 50, 25], ["A", 12.5, 12.5, 0, 1, 1, 50, 50], ["A", 12.5, 12.5, 0, 1, 0, 50, 50], ["L", 25, 75], ["Z"]], - x: 0, - y: 0 - } - }, - shapeType: "image", - labelPosition: "bottom", - drawShape: function drawShape10(cfg, group3) { - var shapeType = this.shapeType; - var style = this.getShapeStyle(cfg); - delete style.fill; - var shape = group3.addShape(shapeType, { - attrs: style, - className: "".concat(this.type, "-keyShape"), - name: "".concat(this.type, "-keyShape"), - draggable: true - }); - this.drawClip(cfg, shape); - return shape; - }, - drawClip: function drawClip(cfg, shape) { - var clip = (this.mergeStyle || this.getOptions(cfg)).clipCfg; - if (!clip.show) { - return; - } - var type2 = clip.type, x6 = clip.x, y5 = clip.y, style = clip.style; - if (type2 === "circle") { - var r4 = clip.r; - shape.setClip({ - type: "circle", - attrs: __assign({ - r: r4, - x: x6, - y: y5 - }, style) - }); - } else if (type2 === "rect") { - var width2 = clip.width, height = clip.height; - var rectX = x6 - width2 / 2; - var rectY = y5 - height / 2; - shape.setClip({ - type: "rect", - attrs: __assign({ - x: rectX, - y: rectY, - width: width2, - height - }, style) - }); - } else if (type2 === "ellipse") { - var rx = clip.rx, ry = clip.ry; - shape.setClip({ - type: "ellipse", - attrs: __assign({ - x: x6, - y: y5, - rx, - ry - }, style) - }); - } else if (type2 === "polygon") { - var points = clip.points; - shape.setClip({ - type: "polygon", - attrs: __assign({ - points - }, style) - }); - } else if (type2 === "path") { - var path = clip.path; - shape.setClip({ - type: "path", - attrs: __assign({ - path - }, style) - }); - } - }, - getShapeStyle: function getShapeStyle7(cfg) { - var _a6 = this.mergeStyle || this.getOptions(cfg), defaultStyle = _a6.style, img = _a6.img; - var size14 = this.getSize(cfg); - var width2 = size14[0]; - var height = size14[1]; - if (defaultStyle) { - width2 = defaultStyle.width || size14[0]; - height = defaultStyle.height || size14[1]; - } - var style = __assign({ - x: -width2 / 2, - y: -height / 2, - width: width2, - height, - img - }, defaultStyle); - return style; - }, - updateShapeStyle: function updateShapeStyle3(cfg, item) { - var group3 = item.getContainer(); - var shapeClassName = "".concat(this.itemType, "-shape"); - var shape = group3["shapeMap"][shapeClassName] || group3.find(function(element) { - return element.get("className") === shapeClassName; - }) || item.getKeyShape(); - var shapeStyle = this.getShapeStyle(cfg); - if (shape && !shape.destroyed) { - shape.attr(shapeStyle); - } - } -}, "single-node"); - -// node_modules/@antv/g6-core/es/element/arrow.js -var arrow_default2 = { - triangle: function triangle2(width2, length5, d3) { - if (width2 === void 0) { - width2 = 10; - } - if (length5 === void 0) { - length5 = 15; - } - if (d3 === void 0) { - d3 = 0; - } - var begin = d3 * 2; - var path = "M ".concat(begin, ",0 L ").concat(begin + length5, ",-").concat(width2 / 2, " L ").concat(begin + length5, ",").concat(width2 / 2, " Z"); - return path; - }, - vee: function vee(width2, length5, d3) { - if (width2 === void 0) { - width2 = 15; - } - if (length5 === void 0) { - length5 = 20; - } - if (d3 === void 0) { - d3 = 0; - } - var begin = d3 * 2; - var path = "M ".concat(begin, ",0 L ").concat(begin + length5, ",-").concat(width2 / 2, "\n L ").concat(begin + 2 * length5 / 3, ",0 L ").concat(begin + length5, ",").concat(width2 / 2, " Z"); - return path; - }, - circle: function circle2(r4, d3) { - if (r4 === void 0) { - r4 = 5; - } - if (d3 === void 0) { - d3 = 0; - } - var begin = d3 * 2; - var path = "M ".concat(begin, ", 0\n a ").concat(r4, ",").concat(r4, " 0 1,0 ").concat(r4 * 2, ",0\n a ").concat(r4, ",").concat(r4, " 0 1,0 ").concat(-r4 * 2, ",0"); - return path; - }, - rect: function rect2(width2, length5, d3) { - if (width2 === void 0) { - width2 = 10; - } - if (length5 === void 0) { - length5 = 10; - } - if (d3 === void 0) { - d3 = 0; - } - var begin = d3 * 2; - var path = "M ".concat(begin, ",").concat(-width2 / 2, " \n L ").concat(begin + length5, ",").concat(-width2 / 2, " \n L ").concat(begin + length5, ",").concat(width2 / 2, " \n L ").concat(begin, ",").concat(width2 / 2, " Z"); - return path; - }, - diamond: function diamond2(width2, length5, d3) { - if (width2 === void 0) { - width2 = 15; - } - if (length5 === void 0) { - length5 = 15; - } - if (d3 === void 0) { - d3 = 0; - } - var begin = d3 * 2; - var path = "M ".concat(begin, ",0 \n L ").concat(begin + length5 / 2, ",").concat(-width2 / 2, " \n L ").concat(begin + length5, ",0 \n L ").concat(begin + length5 / 2, ",").concat(width2 / 2, " Z"); - return path; - }, - triangleRect: function triangleRect(tWidth, tLength, rWidth, rLength, gap, d3) { - if (tWidth === void 0) { - tWidth = 15; - } - if (tLength === void 0) { - tLength = 15; - } - if (rWidth === void 0) { - rWidth = 15; - } - if (rLength === void 0) { - rLength = 3; - } - if (gap === void 0) { - gap = 5; - } - if (d3 === void 0) { - d3 = 0; - } - var begin = d3 * 2; - var rectBegin = begin + tLength + gap; - var path = "M ".concat(begin, ",0 L ").concat(begin + tLength, ",-").concat(tWidth / 2, " L ").concat(begin + tLength, ",").concat(tWidth / 2, " Z\n M ").concat(rectBegin, ", -").concat(rWidth / 2, "\n L ").concat(rectBegin + rLength, " -").concat(rWidth / 2, "\n L ").concat(rectBegin + rLength, " ").concat(rWidth / 2, "\n L ").concat(rectBegin, " ").concat(rWidth / 2, "\n Z"); - return path; - } -}; - -// node_modules/@antv/g6-core/es/element/marker.js -var marker_default3 = { - collapse: function collapse(x6, y5, r4) { - return [["M", x6 - r4, y5], ["a", r4, r4, 0, 1, 0, r4 * 2, 0], ["a", r4, r4, 0, 1, 0, -r4 * 2, 0], ["M", x6 - r4 + 4, y5], ["L", x6 + r4 - 4, y5]]; - }, - expand: function expand(x6, y5, r4) { - return [["M", x6 - r4, y5], ["a", r4, r4, 0, 1, 0, r4 * 2, 0], ["a", r4, r4, 0, 1, 0, -r4 * 2, 0], ["M", x6 - r4 + 4, y5], ["L", x6 - r4 + 2 * r4 - 4, y5], ["M", x6 - r4 + r4, y5 - r4 + 4], ["L", x6, y5 + r4 - 4]]; - }, - upTriangle: function upTriangle(x6, y5, r4) { - var l1 = r4 * Math.cos(Math.PI / 6); - var l22 = r4 * Math.sin(Math.PI / 6); - return [["M", x6 - l1, y5 + l22], ["L", x6 + l1, y5 + l22], ["L", x6, y5 - r4], ["Z"]]; - }, - downTriangle: function downTriangle(x6, y5, r4) { - var l1 = r4 * Math.cos(Math.PI / 6); - var l22 = r4 * Math.sin(Math.PI / 6); - return [["M", x6 - l1, y5 - l22], ["L", x6 + l1, y5 - l22], ["L", x6, y5 + r4], ["Z"]]; - } -}; - -// node_modules/@antv/g6-core/es/element/index.js -var element_default3 = shape_default4; - -// node_modules/@antv/g6-core/es/util/color.js -var color_exports = {}; -__export(color_exports, { - defaultSubjectColors: () => defaultSubjectColors -}); -var defaultSubjectColors = ["#5F95FF", "#61DDAA", "#65789B", "#F6BD16", "#7262FD", "#78D3F8", "#9661BC", "#F6903D", "#008685", "#F08BB4"]; - -// node_modules/@antv/g6-core/es/util/index.js -var transform11 = ext_exports.transform; -var Util2 = __assign(__assign(__assign(__assign(__assign(__assign({}, base_exports), graphic_exports), path_exports2), math_exports), color_exports), { - transform: transform11, - mat3: mat3_exports -}); -var util_default = Util2; - -// node_modules/@antv/g6-core/es/graph/controller/layout.js -var import_util511 = __toModule(require_lib()); -var LayoutController = function() { - function LayoutController3(graph) { - this.graph = graph; - this.layoutCfg = graph.get("layout") || {}; - this.layoutType = this.getLayoutType(); - this.layoutMethods = []; - this.initLayout(); - } - LayoutController3.prototype.initLayout = function() { - }; - LayoutController3.prototype.getLayoutType = function() { - return this.getLayoutCfgType(this.layoutCfg); - }; - LayoutController3.prototype.getLayoutCfgType = function(layoutCfg) { - var type2 = layoutCfg.type; - if (type2) { - return type2; - } - var pipes = layoutCfg.pipes; - if (Array.isArray(pipes)) { - return pipes.map(function(pipe) { - return (pipe === null || pipe === void 0 ? void 0 : pipe.type) || ""; - }); - } - return null; - }; - LayoutController3.prototype.isLayoutTypeSame = function(cfg) { - var current = this.getLayoutCfgType(cfg); - if (Array.isArray(this.layoutType)) { - return this.layoutType.every(function(type2, index2) { - return type2 === current[index2]; - }); - } - return (cfg === null || cfg === void 0 ? void 0 : cfg.type) === this.layoutType; - }; - LayoutController3.prototype.refreshLayout = function() { - var graph = this.graph; - if (!graph) - return; - if (graph.get("animate")) { - graph.positionsAnimate(); - } else { - graph.refreshPositions(); - } - }; - LayoutController3.prototype.changeLayout = function(cfg) { - this.layoutCfg = cfg; - this.destoryLayoutMethods(); - this.layout(); - }; - LayoutController3.prototype.changeData = function() { - this.destoryLayoutMethods(); - this.layout(); - }; - LayoutController3.prototype.destoryLayoutMethods = function() { - var layoutMethods = this.layoutMethods; - layoutMethods === null || layoutMethods === void 0 ? void 0 : layoutMethods.forEach(function(layoutMethod) { - layoutMethod.destroy(); - }); - this.layoutMethods = []; - }; - LayoutController3.prototype.destroyLayout = function() { - var graph = this.graph; - this.destoryLayoutMethods(); - graph.set("layout", void 0); - this.layoutCfg = void 0; - this.layoutType = void 0; - this.layoutMethods = void 0; - }; - LayoutController3.prototype.setDataFromGraph = function() { - var nodes = []; - var hiddenNodes = []; - var edges = []; - var hiddenEdges = []; - var comboEdges = []; - var combos = []; - var hiddenCombos = []; - var nodeItems = this.graph.getNodes(); - var edgeItems = this.graph.getEdges(); - var comboItems = this.graph.getCombos(); - var nodeLength = nodeItems.length; - for (var i4 = 0; i4 < nodeLength; i4++) { - var nodeItem = nodeItems[i4]; - if (!nodeItem || nodeItem.destroyed) - continue; - var model = nodeItem.getModel(); - if (!nodeItem.isVisible()) { - hiddenNodes.push(model); - continue; - } - nodes.push(model); - } - var edgeLength = edgeItems.length; - for (var i4 = 0; i4 < edgeLength; i4++) { - var edgeItem = edgeItems[i4]; - if (!edgeItem || edgeItem.destroyed) - continue; - var model = edgeItem.getModel(); - if (!edgeItem.isVisible()) { - hiddenEdges.push(model); - continue; - } - if (!model.isComboEdge) - edges.push(model); - else - comboEdges.push(model); - } - var comboLength = comboItems.length; - for (var i4 = 0; i4 < comboLength; i4++) { - var comboItem = comboItems[i4]; - if (comboItem.destroyed) - continue; - var model = comboItem.getModel(); - if (!comboItem.isVisible()) { - hiddenEdges.push(model); - continue; - } - combos.push(model); - } - return { - nodes, - hiddenNodes, - edges, - hiddenEdges, - combos, - hiddenCombos, - comboEdges - }; - }; - LayoutController3.prototype.reLayoutMethod = function(layoutMethod, layoutCfg) { - var _this = this; - return new Promise(function(reslove, reject) { - var graph = _this.graph; - var layoutType = layoutCfg === null || layoutCfg === void 0 ? void 0 : layoutCfg.type; - layoutCfg.onLayoutEnd = function() { - graph.emit("aftersublayout", { - type: layoutType - }); - reslove(); - }; - layoutMethod.init(_this.data); - if (layoutType === "force") { - layoutMethod.ticking = false; - layoutMethod.forceSimulation.stop(); - } - graph.emit("beforesublayout", { - type: layoutType - }); - layoutMethod.execute(); - if (layoutMethod.isCustomLayout && layoutCfg.onLayoutEnd) - layoutCfg.onLayoutEnd(); - }); - }; - LayoutController3.prototype.relayout = function(reloadData) { - var _this = this; - var _a6 = this, graph = _a6.graph, layoutMethods = _a6.layoutMethods, layoutCfg = _a6.layoutCfg; - if (reloadData) { - this.data = this.setDataFromGraph(); - var nodes = this.data.nodes; - if (!nodes) { - return false; - } - this.initPositions(layoutCfg.center, nodes); - } - graph.emit("beforelayout"); - var start = Promise.resolve(); - layoutMethods === null || layoutMethods === void 0 ? void 0 : layoutMethods.forEach(function(layoutMethod, index2) { - var currentCfg = layoutCfg[index2]; - start = start.then(function() { - return _this.reLayoutMethod(layoutMethod, currentCfg); - }); - }); - start.then(function() { - if (layoutCfg.onAllLayoutEnd) - layoutCfg.onAllLayoutEnd(); - }).catch(function(error) { - console.warn("relayout failed", error); - }); - }; - LayoutController3.prototype.filterLayoutData = function(data3, cfg) { - var nodes = data3.nodes, edges = data3.edges, rest = __rest(data3, ["nodes", "edges"]); - if (!nodes) { - return data3; - } - var nodesFilter; - var edegsFilter; - if ((0, import_util511.isFunction)(cfg === null || cfg === void 0 ? void 0 : cfg.nodesFilter)) { - nodesFilter = cfg.nodesFilter; - } else { - nodesFilter = function nodesFilter2() { - return true; - }; - } - var fNodes = nodes.filter(nodesFilter); - if ((0, import_util511.isFunction)(cfg === null || cfg === void 0 ? void 0 : cfg.edgesFilter)) { - edegsFilter = cfg.edgesFilter; - } else { - var nodesMap_1 = fNodes.reduce(function(acc, cur) { - acc[cur.id] = true; - return acc; - }, {}); - edegsFilter = function edegsFilter2(edge2) { - return nodesMap_1[edge2.source] && nodesMap_1[edge2.target]; - }; - } - return __assign({ - nodes: fNodes, - edges: edges.filter(edegsFilter) - }, rest); - }; - LayoutController3.prototype.getLayoutBBox = function(nodes) { - var graph = this.graph; - var graphGroupNodes = (0, import_util511.groupBy)(graph.getNodes(), function(n3) { - return n3.getModel().layoutOrder; - }); - var layoutNodes2 = Object.values(graphGroupNodes).map(function(value2) { - var bbox = calculationItemsBBox(value2); - bbox.size = [bbox.width, bbox.height]; - return bbox; - }); - var groupNodes = Object.values((0, import_util511.groupBy)(nodes, "layoutOrder")); - return { - groupNodes, - layoutNodes: layoutNodes2 - }; - }; - LayoutController3.prototype.layoutAnimate = function() { - }; - LayoutController3.prototype.moveToZero = function() { - var graph = this.graph; - var data3 = graph.get("data"); - var nodes = data3.nodes; - if (nodes[0].x === void 0 || nodes[0].x === null || isNaN2(nodes[0].x)) { - return; - } - var meanCenter = [0, 0]; - var nodeLength = nodes.length; - for (var i4 = 0; i4 < nodeLength; i4++) { - var node = nodes[i4]; - meanCenter[0] += node.x; - meanCenter[1] += node.y; - } - meanCenter[0] /= nodes.length; - meanCenter[1] /= nodes.length; - for (var i4 = 0; i4 < nodeLength; i4++) { - var node = nodes[i4]; - node.x -= meanCenter[0]; - node.y -= meanCenter[1]; - } - }; - LayoutController3.prototype.initPositions = function(center2, nodes) { - var graph = this.graph; - if (!nodes) { - return false; - } - var nodeLength = nodes ? nodes.length : 0; - if (!nodeLength) - return; - var width2 = graph.get("width") * 0.85; - var height = graph.get("height") * 0.85; - var horiNum = Math.ceil(Math.sqrt(nodeLength) * (width2 / height)); - var vertiNum = Math.ceil(nodeLength / horiNum); - var horiGap = width2 / (horiNum - 1); - var vertiGap = height / (vertiNum - 1); - if (!isFinite(horiGap) || !horiGap) - horiGap = 0; - if (!isFinite(vertiGap) || !horiGap) - vertiGap = 0; - var beginX = center2[0] - width2 / 2; - var beginY = center2[1] - height / 2; - var allHavePos = true; - for (var i4 = 0; i4 < nodeLength; i4++) { - var node = nodes[i4]; - if (isNaN2(+node.x)) { - allHavePos = false; - node.x = i4 % horiNum * horiGap + beginX; - } - if (isNaN2(+node.y)) { - allHavePos = false; - node.y = Math.floor(i4 / horiNum) * vertiGap + beginY; - } - } - return allHavePos; - }; - LayoutController3.prototype.destroy = function() { - this.graph = null; - this.destoryLayoutMethods(); - this.destroyed = true; - }; - return LayoutController3; -}(); -var layout_default = LayoutController; - -// node_modules/@antv/g6-core/es/graph/controller/event.js -var EventController2 = function() { - function EventController4(graph) { - this.graph = graph; - this.destroyed = false; - this.initEvents(); - } - return EventController4; -}(); -var event_default2 = EventController2; - -// node_modules/@antv/g6-core/es/types/index.js -var G6Event; -(function(G6Event2) { - G6Event2["CLICK"] = "click"; - G6Event2["DBLCLICK"] = "dblclick"; - G6Event2["MOUSEDOWN"] = "mousedown"; - G6Event2["MOUDEUP"] = "mouseup"; - G6Event2["CONTEXTMENU"] = "contextmenu"; - G6Event2["MOUSEENTER"] = "mouseenter"; - G6Event2["MOUSEOUT"] = "mouseout"; - G6Event2["MOUSEOVER"] = "mouseover"; - G6Event2["MOUSEMOVE"] = "mousemove"; - G6Event2["MOUSELEAVE"] = "mouseleave"; - G6Event2["DRAGSTART"] = "dragstart"; - G6Event2["DRAGEND"] = "dragend"; - G6Event2["DRAG"] = "drag"; - G6Event2["DRAGENTER"] = "dragenter"; - G6Event2["DRAGLEAVE"] = "dragleave"; - G6Event2["DRAGOVER"] = "dragover"; - G6Event2["DRAGOUT"] = "dragout"; - G6Event2["DDROP"] = "drop"; - G6Event2["KEYUP"] = "keyup"; - G6Event2["KEYDOWN"] = "keydown"; - G6Event2["WHEEL"] = "wheel"; - G6Event2["FOCUS"] = "focus"; - G6Event2["BLUR"] = "blur"; - G6Event2["TOUCHSTART"] = "touchstart"; - G6Event2["TOUCHMOVE"] = "touchmove"; - G6Event2["TOUCHEND"] = "touchend"; - G6Event2["CANVAS_TOUCHSTART"] = "canvas:touchstart"; - G6Event2["CANVAS_TOUCHMOVE"] = "canvas:touchmove"; - G6Event2["CANVAS_TOUCHEND"] = "canvas:touchend"; - G6Event2["NODE_TOUCHSTART"] = "node:touchstart"; - G6Event2["NODE_TOUCHMOVE"] = "node:touchmove"; - G6Event2["NODE_TOUCHEND"] = "node:touchend"; - G6Event2["COMBO_TOUCHSTART"] = "combo:touchstart"; - G6Event2["COMBO_TOUCHMOVE"] = "combo:touchmove"; - G6Event2["COMBO_TOUCHEND"] = "combo:touchend"; - G6Event2["EDGE_TOUCHSTART"] = "edge:touchstart"; - G6Event2["EDGE_TOUCHMOVE"] = "edge:touchmove"; - G6Event2["EDGE_TOUCHEND"] = "edge:touchend"; - G6Event2["NODE_CONTEXTMENU"] = "node:contextmenu"; - G6Event2["NODE_CLICK"] = "node:click"; - G6Event2["NODE_DBLCLICK"] = "node:dblclick"; - G6Event2["NODE_MOUSEDOWN"] = "node:mousedown"; - G6Event2["NODE_MOUSEUP"] = "node:mouseup"; - G6Event2["NODE_MOUSEENTER"] = "node:mouseenter"; - G6Event2["NODE_MOUSELEAVE"] = "node:mouseleave"; - G6Event2["NODE_MOUSEMOVE"] = "node:mousemove"; - G6Event2["NODE_MOUSEOUT"] = "node:mouseout"; - G6Event2["NODE_MOUSEOVER"] = "node:mouseover"; - G6Event2["NODE_DROP"] = "node:drop"; - G6Event2["NODE_DRAGOVER"] = "node:dragover"; - G6Event2["NODE_DRAGENTER"] = "node:dragenter"; - G6Event2["NODE_DRAGLEAVE"] = "node:dragleave"; - G6Event2["NODE_DRAGSTART"] = "node:dragstart"; - G6Event2["NODE_DRAG"] = "node:drag"; - G6Event2["NODE_DRAGEND"] = "node:dragend"; - G6Event2["NODE_TAP"] = "node:tap"; - G6Event2["NODE_PANSTART"] = "node:panstart"; - G6Event2["NODE_PANMOVE"] = "node:panmove"; - G6Event2["NODE_PANEND"] = "node:panend"; - G6Event2["COMBO_CONTEXTMENU"] = "combo:contextmenu"; - G6Event2["COMBO_CLICK"] = "combo:click"; - G6Event2["COMBO_DBLCLICK"] = "combo:dblclick"; - G6Event2["COMBO_MOUSEDOWN"] = "combo:mousedown"; - G6Event2["COMBO_MOUSEUP"] = "combo:mouseup"; - G6Event2["COMBO_MOUSEENTER"] = "combo:mouseenter"; - G6Event2["COMBO_MOUSELEAVE"] = "combo:mouseleave"; - G6Event2["COMBO_MOUSEMOVE"] = "combo:mousemove"; - G6Event2["COMBO_MOUSEOUT"] = "combo:mouseout"; - G6Event2["COMBO_MOUSEOVER"] = "combo:mouseover"; - G6Event2["COMBO_DROP"] = "combo:drop"; - G6Event2["COMBO_DRAGOVER"] = "combo:dragover"; - G6Event2["COMBO_DRAGENTER"] = "combo:dragenter"; - G6Event2["COMBO_DRAGLEAVE"] = "combo:dragleave"; - G6Event2["COMBO_DRAGSTART"] = "combo:dragstart"; - G6Event2["COMBO_DRAG"] = "combo:drag"; - G6Event2["COMBO_DRAGEND"] = "combo:dragend"; - G6Event2["COMBO_TAP"] = "combo:tap"; - G6Event2["COMBO_PANSTART"] = "combo:panstart"; - G6Event2["COMBO_PANMOVE"] = "combo:panmove"; - G6Event2["COMBO_PANEND"] = "combo:panend"; - G6Event2["EDGE_CONTEXTMENU"] = "edge:contextmenu"; - G6Event2["EDGE_CLICK"] = "edge:click"; - G6Event2["EDGE_DBLCLICK"] = "edge:dblclick"; - G6Event2["EDGE_MOUSEDOWN"] = "edge:mousedown"; - G6Event2["EDGE_MOUSEUP"] = "edge:mouseup"; - G6Event2["EDGE_MOUSEENTER"] = "edge:mouseenter"; - G6Event2["EDGE_MOUSELEAVE"] = "edge:mouseleave"; - G6Event2["EDGE_MOUSEMOVE"] = "edge:mousemove"; - G6Event2["EDGE_MOUSEOUT"] = "edge:mouseout"; - G6Event2["EDGE_MOUSEOVER"] = "edge:mouseover"; - G6Event2["EDGE_DROP"] = "edge:drop"; - G6Event2["EDGE_DRAGOVER"] = "edge:dragover"; - G6Event2["EDGE_DRAGENTER"] = "edge:dragenter"; - G6Event2["EDGE_DRAGLEAVE"] = "edge:dragleave"; - G6Event2["CANVAS_CONTEXTMENU"] = "canvas:contextmenu"; - G6Event2["CANVAS_CLICK"] = "canvas:click"; - G6Event2["CANVAS_DBLCLICK"] = "canvas:dblclick"; - G6Event2["CANVAS_MOUSEDOWN"] = "canvas:mousedown"; - G6Event2["CANVAS_MOUSEUP"] = "canvas:mouseup"; - G6Event2["CANVAS_MOUSEENTER"] = "canvas:mouseenter"; - G6Event2["CANVAS_MOUSELEAVE"] = "canvas:mouseleave"; - G6Event2["CANVAS_MOUSEMOVE"] = "canvas:mousemove"; - G6Event2["CANVAS_MOUSEOUT"] = "canvas:mouseout"; - G6Event2["CANVAS_MOUSEOVER"] = "canvas:mouseover"; - G6Event2["CANVAS_DROP"] = "canvas:drop"; - G6Event2["CANVAS_DRAGENTER"] = "canvas:dragenter"; - G6Event2["CANVAS_DRAGLEAVE"] = "canvas:dragleave"; - G6Event2["CANVAS_DRAGSTART"] = "canvas:dragstart"; - G6Event2["CANVAS_DRAG"] = "canvas:drag"; - G6Event2["CANVAS_DRAGEND"] = "canvas:dragend"; - G6Event2["CANVAS_TAP"] = "canvas:tap"; - G6Event2["CANVAS_PANSTART"] = "canvas:panstart"; - G6Event2["CANVAS_PANMOVE"] = "canvas:panmove"; - G6Event2["CANVAS_PANEND"] = "canvas:panend"; - G6Event2["BEFORERENDER"] = "beforerender"; - G6Event2["AFTERRENDER"] = "afterrender"; - G6Event2["BEFOREADDITEM"] = "beforeadditem"; - G6Event2["AFTERADDITEM"] = "afteradditem"; - G6Event2["BEFOREREMOVEITEM"] = "beforeremoveitem"; - G6Event2["AFTERREMOVEITEM"] = "afterremoveitem"; - G6Event2["BEFOREUPDATEITEM"] = "beforeupdateitem"; - G6Event2["AFTERUPDATEITEM"] = "afterupdateitem"; - G6Event2["BEFOREITEMVISIBILITYCHANGE"] = "beforeitemvisibilitychange"; - G6Event2["AFTERITEMVISIBILITYCHANGE"] = "afteritemvisibilitychange"; - G6Event2["BEFOREITEMSTATECHANGE"] = "beforeitemstatechange"; - G6Event2["AFTERITEMSTATECHANGE"] = "afteritemstatechange"; - G6Event2["BEFOREITEMREFRESH"] = "beforeitemrefresh"; - G6Event2["AFTERITEMREFRESH"] = "afteritemrefresh"; - G6Event2["BEFOREITEMSTATESCLEAR"] = "beforeitemstatesclear"; - G6Event2["AFTERITEMSTATESCLEAR"] = "afteritemstatesclear"; - G6Event2["BEFOREMODECHANGE"] = "beforemodechange"; - G6Event2["AFTERMODECHANGE"] = "aftermodechange"; - G6Event2["BEFORELAYOUT"] = "beforelayout"; - G6Event2["AFTERLAYOUT"] = "afterlayout"; - G6Event2["BEFORECREATEEDGE"] = "beforecreateedge"; - G6Event2["AFTERCREATEEDGE"] = "aftercreateedge"; - G6Event2["BEFOREGRAPHREFRESHPOSITION"] = "beforegraphrefreshposition"; - G6Event2["AFTERGRAPHREFRESHPOSITION"] = "aftergraphrefreshposition"; - G6Event2["BEFOREGRAPHREFRESH"] = "beforegraphrefresh"; - G6Event2["AFTERGRAPHREFRESH"] = "aftergraphrefresh"; - G6Event2["BEFOREANIMATE"] = "beforeanimate"; - G6Event2["AFTERANIMATE"] = "afteranimate"; - G6Event2["BEFOREPAINT"] = "beforepaint"; - G6Event2["AFTERPAINT"] = "afterpaint"; - G6Event2["BEFORECOLLAPSEEXPANDCOMBO"] = "beforecollapseexpandcombo"; - G6Event2["AFTERCOLLAPSEEXPANDCOMBO"] = "aftercollapseexpandcombo"; - G6Event2["GRAPHSTATECHANGE"] = "graphstatechange"; - G6Event2["AFTERACTIVATERELATIONS"] = "afteractivaterelations"; - G6Event2["NODESELECTCHANGE"] = "nodeselectchange"; - G6Event2["TOOLTIPCHANGE"] = "tooltipchange"; - G6Event2["WHEELZOOM"] = "wheelzoom"; - G6Event2["VIEWPORTCHANGE"] = "viewportchange"; - G6Event2["DRAGNODEEND"] = "dragnodeend"; - G6Event2["STACKCHANGE"] = "stackchange"; - G6Event2["TAP"] = "tap"; - G6Event2["PINCHSTART"] = "pinchstart"; - G6Event2["PINCHMOVE"] = "pinchmove"; - G6Event2["PANSTART"] = "panstart"; - G6Event2["PANMOVE"] = "panmove"; - G6Event2["PANEND"] = "panend"; -})(G6Event || (G6Event = {})); - -// node_modules/@antv/g6-core/es/index.js -var registerNode = element_default3.registerNode; -var registerEdge = element_default3.registerEdge; -var registerCombo = element_default3.registerCombo; -var registerBehavior = behavior_default2.registerBehavior; -var BaseGlobal = global_default; -var es_default3 = { - version: global_default.version, - AbstractGraph: graph_default, - BaseGlobal, - Util: util_default, - Shape: element_default3, - Node: node_default, - Edge: edge_default2, - Combo: combo_default, - Hull: hull_default, - registerNode: element_default3.registerNode, - registerEdge: element_default3.registerEdge, - registerCombo: element_default3.registerCombo, - registerBehavior: behavior_default2.registerBehavior, - Arrow: arrow_default2, - Marker: marker_default3, - AbstractLayout: layout_default, - AbstractEvent: event_default2 -}; - -// node_modules/@antv/g6-pc/es/index.js -var AlgorithmAsync = __toModule(require_asyncIndex()); - -// node_modules/@antv/g6-pc/es/graph/graph.js -var import_util552 = __toModule(require_lib()); - -// node_modules/@antv/g6-pc/es/util/color.js -var color_exports2 = {}; -__export(color_exports2, { - getColorSetsBySubjectColors: () => getColorSetsBySubjectColors, - getColorsWithSubjectColor: () => getColorsWithSubjectColor, - mixColor: () => mixColor -}); -var import_color6 = __toModule(require_color()); - -// node_modules/@antv/g6-pc/node_modules/@ant-design/colors/dist/index.esm.js -var import_tinycolor2 = __toModule(require_tinycolor()); -var hueStep = 2; -var saturationStep = 0.16; -var saturationStep2 = 0.05; -var brightnessStep1 = 0.05; -var brightnessStep2 = 0.15; -var lightColorCount = 5; -var darkColorCount = 4; -var darkColorMap = [{ - index: 7, - opacity: 0.15 -}, { - index: 6, - opacity: 0.25 -}, { - index: 5, - opacity: 0.3 -}, { - index: 5, - opacity: 0.45 -}, { - index: 5, - opacity: 0.65 -}, { - index: 5, - opacity: 0.85 -}, { - index: 4, - opacity: 0.9 -}, { - index: 3, - opacity: 0.95 -}, { - index: 2, - opacity: 0.97 -}, { - index: 1, - opacity: 0.98 -}]; -function getHue(hsv, i4, light) { - var hue; - if (Math.round(hsv.h) >= 60 && Math.round(hsv.h) <= 240) { - hue = light ? Math.round(hsv.h) - hueStep * i4 : Math.round(hsv.h) + hueStep * i4; - } else { - hue = light ? Math.round(hsv.h) + hueStep * i4 : Math.round(hsv.h) - hueStep * i4; - } - if (hue < 0) { - hue += 360; - } else if (hue >= 360) { - hue -= 360; - } - return hue; -} -function getSaturation(hsv, i4, light) { - if (hsv.h === 0 && hsv.s === 0) { - return hsv.s; - } - var saturation; - if (light) { - saturation = hsv.s - saturationStep * i4; - } else if (i4 === darkColorCount) { - saturation = hsv.s + saturationStep; - } else { - saturation = hsv.s + saturationStep2 * i4; - } - if (saturation > 1) { - saturation = 1; - } - if (light && i4 === lightColorCount && saturation > 0.1) { - saturation = 0.1; - } - if (saturation < 0.06) { - saturation = 0.06; - } - return Number(saturation.toFixed(2)); -} -function getValue2(hsv, i4, light) { - var value2; - if (light) { - value2 = hsv.v + brightnessStep1 * i4; - } else { - value2 = hsv.v - brightnessStep2 * i4; - } - if (value2 > 1) { - value2 = 1; - } - return Number(value2.toFixed(2)); -} -function generate(color4) { - var opts = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - var patterns = []; - var pColor = (0, import_tinycolor2.default)(color4); - for (var i4 = lightColorCount; i4 > 0; i4 -= 1) { - var hsv = pColor.toHsv(); - var colorString = (0, import_tinycolor2.default)({ - h: getHue(hsv, i4, true), - s: getSaturation(hsv, i4, true), - v: getValue2(hsv, i4, true) - }).toHexString(); - patterns.push(colorString); - } - patterns.push(pColor.toHexString()); - for (var _i = 1; _i <= darkColorCount; _i += 1) { - var _hsv = pColor.toHsv(); - var _colorString = (0, import_tinycolor2.default)({ - h: getHue(_hsv, _i), - s: getSaturation(_hsv, _i), - v: getValue2(_hsv, _i) - }).toHexString(); - patterns.push(_colorString); - } - if (opts.theme === "dark") { - return darkColorMap.map(function(_ref2) { - var index2 = _ref2.index, opacity = _ref2.opacity; - var darkColorString = import_tinycolor2.default.mix(opts.backgroundColor || "#141414", patterns[index2], opacity * 100).toHexString(); - return darkColorString; - }); - } - return patterns; -} -var presetPrimaryColors = { - red: "#F5222D", - volcano: "#FA541C", - orange: "#FA8C16", - gold: "#FAAD14", - yellow: "#FADB14", - lime: "#A0D911", - green: "#52C41A", - cyan: "#13C2C2", - blue: "#1890FF", - geekblue: "#2F54EB", - purple: "#722ED1", - magenta: "#EB2F96", - grey: "#666666" -}; -var presetPalettes = {}; -var presetDarkPalettes = {}; -Object.keys(presetPrimaryColors).forEach(function(key) { - presetPalettes[key] = generate(presetPrimaryColors[key]); - presetPalettes[key].primary = presetPalettes[key][5]; - presetDarkPalettes[key] = generate(presetPrimaryColors[key], { - theme: "dark", - backgroundColor: "#141414" - }); - presetDarkPalettes[key].primary = presetDarkPalettes[key][5]; -}); -var red = presetPalettes.red; -var volcano = presetPalettes.volcano; -var gold = presetPalettes.gold; -var orange = presetPalettes.orange; -var yellow = presetPalettes.yellow; -var lime = presetPalettes.lime; -var green = presetPalettes.green; -var cyan = presetPalettes.cyan; -var blue = presetPalettes.blue; -var geekblue = presetPalettes.geekblue; -var purple = presetPalettes.purple; -var magenta = presetPalettes.magenta; -var grey = presetPalettes.grey; - -// node_modules/@antv/g6-pc/es/util/color.js -var mixColor = function mixColor2(backColor3, frontColor, frontAlpha) { - var bc = (0, import_color6.default)(backColor3); - var fc = (0, import_color6.default)(frontColor); - return (0, import_color6.default)([(1 - frontAlpha) * bc.red() + frontAlpha * fc.red(), (1 - frontAlpha) * bc.green() + frontAlpha * fc.green(), (1 - frontAlpha) * bc.blue() + frontAlpha * fc.blue()]).rgb(); -}; -var getColorsWithDefaultTheme = function getColorsWithDefaultTheme2(subjectColor3, backColor3, disableColor) { - if (backColor3 === void 0) { - backColor3 = "#fff"; - } - if (disableColor === void 0) { - disableColor = "rgb(150, 150, 150)"; - } - var subjectColor005 = mixColor(backColor3, subjectColor3, 0.05).rgb().toString(); - var subjectColor01 = mixColor(backColor3, subjectColor3, 0.1).rgb().toString(); - var subjectColor02 = mixColor(backColor3, subjectColor3, 0.2).rgb().toString(); - var subjectColor04 = mixColor(backColor3, subjectColor3, 0.4).rgb().toString(); - var disableColor002 = mixColor(backColor3, disableColor, 0.02).rgb().toString(); - var disableColor005 = mixColor(backColor3, disableColor, 0.05).rgb().toString(); - var disableColor01 = mixColor(backColor3, disableColor, 0.1).rgb().toString(); - var disableColor02 = mixColor(backColor3, disableColor, 0.2).rgb().toString(); - var disableColor03 = mixColor(backColor3, disableColor, 0.3).rgb().toString(); - var paletteFromSubject = generate(subjectColor3, { - theme: "default", - backgroundColor: backColor3 - }); - var subjectHex = (0, import_color6.default)(subjectColor3).hex().toLowerCase(); - var subjectIdx = paletteFromSubject.indexOf(subjectHex); - var deeperSubject = subjectColor3; - if (subjectIdx !== -1) { - deeperSubject = paletteFromSubject[subjectIdx + 1]; - } - return { - mainStroke: subjectColor3, - mainFill: subjectColor01, - activeStroke: subjectColor3, - activeFill: subjectColor005, - inactiveStroke: subjectColor04, - inactiveFill: subjectColor005, - selectedStroke: subjectColor3, - selectedFill: backColor3, - highlightStroke: deeperSubject, - highlightFill: subjectColor02, - disableStroke: disableColor03, - disableFill: disableColor005, - edgeMainStroke: disableColor03, - edgeActiveStroke: subjectColor3, - edgeInactiveStroke: disableColor02, - edgeSelectedStroke: subjectColor3, - edgeHighlightStroke: subjectColor3, - edgeDisableStroke: disableColor01, - comboMainStroke: disableColor03, - comboMainFill: disableColor002, - comboActiveStroke: subjectColor3, - comboActiveFill: subjectColor005, - comboInactiveStroke: disableColor03, - comboInactiveFill: disableColor002, - comboSelectedStroke: subjectColor3, - comboSelectedFill: disableColor002, - comboHighlightStroke: deeperSubject, - comboHighlightFill: disableColor002, - comboDisableStroke: disableColor02, - comboDisableFill: disableColor005 - }; -}; -var getColorsWithDarkTheme = function getColorsWithDarkTheme2(subjectColor3, backColor3, disableColor) { - if (backColor3 === void 0) { - backColor3 = "#fff"; - } - if (disableColor === void 0) { - disableColor = "#777"; - } - var subjectColor02 = mixColor(backColor3, subjectColor3, 0.2).rgb().toString(); - var subjectColor03 = mixColor(backColor3, subjectColor3, 0.3).rgb().toString(); - var subjectColor06 = mixColor(backColor3, subjectColor3, 0.6).rgb().toString(); - var subjectColor08 = mixColor(backColor3, subjectColor3, 0.8).rgb().toString(); - var disableColor02 = mixColor(backColor3, disableColor, 0.2).rgb().toString(); - var disableColor025 = mixColor(backColor3, disableColor, 0.25).rgb().toString(); - var disableColor03 = mixColor(backColor3, disableColor, 0.3).rgb().toString(); - var disableColor04 = mixColor(backColor3, disableColor, 0.4).rgb().toString(); - var disableColor05 = mixColor(backColor3, disableColor, 0.5).rgb().toString(); - var paletteFromSubject = generate(subjectColor3, { - theme: "dark", - backgroundColor: backColor3 - }); - var subjectHex = (0, import_color6.default)(subjectColor3).hex().toLowerCase(); - var subjectIdx = paletteFromSubject.indexOf(subjectHex); - var deeperSubject = subjectColor3; - if (subjectIdx !== -1) { - deeperSubject = paletteFromSubject[subjectIdx + 1]; - } - return { - mainStroke: subjectColor08, - mainFill: subjectColor02, - activeStroke: subjectColor3, - activeFill: subjectColor03, - inactiveStroke: subjectColor08, - inactiveFill: subjectColor02, - selectedStroke: subjectColor3, - selectedFill: subjectColor02, - highlightStroke: subjectColor3, - highlightFill: subjectColor06, - disableStroke: disableColor05, - disableFill: disableColor025, - edgeMainStroke: disableColor, - edgeActiveStroke: subjectColor3, - edgeInactiveStroke: disableColor, - edgeSelectedStroke: subjectColor3, - edgeHighlightStroke: subjectColor3, - edgeDisableStroke: disableColor03, - comboMainStroke: disableColor04, - comboMainFill: disableColor025, - comboActiveStroke: subjectColor3, - comboActiveFill: disableColor02, - comboInactiveStroke: disableColor04, - comboInactiveFill: disableColor025, - comboSelectedStroke: subjectColor3, - comboSelectedFill: disableColor02, - comboHighlightStroke: deeperSubject, - comboHighlightFill: disableColor025, - comboDisableStroke: disableColor04, - comboDisableFill: disableColor02 - }; -}; -var getColorsWithSubjectColor = function getColorsWithSubjectColor2(subjectColor3, backColor3, theme4, disableColor) { - if (backColor3 === void 0) { - backColor3 = "#fff"; - } - if (theme4 === void 0) { - theme4 = "default"; - } - if (disableColor === void 0) { - disableColor = "rgb(150, 150, 150)"; - } - if (theme4 === "default") - return getColorsWithDefaultTheme(subjectColor3, backColor3, "rgb(150, 150, 150)"); - return getColorsWithDarkTheme(subjectColor3, backColor3, "#777"); -}; -var getColorSetsBySubjectColors = function getColorSetsBySubjectColors2(subjectColors, backColor3, theme4, disableColor) { - if (backColor3 === void 0) { - backColor3 = "#fff"; - } - if (theme4 === void 0) { - theme4 = "default"; - } - if (disableColor === void 0) { - disableColor = "rgb(150, 150, 150)"; - } - var sets = []; - subjectColors.forEach(function(sColor) { - sets.push(getColorsWithSubjectColor(sColor, backColor3, theme4, disableColor)); - }); - return sets; -}; - -// node_modules/@antv/g6-pc/es/global.js -var subjectColor2 = "rgb(95, 149, 255)"; -var backColor2 = "rgb(255, 255, 255)"; -var textColor2 = "rgb(0, 0, 0)"; -var colorSet2 = getColorsWithSubjectColor(subjectColor2, backColor2); -var global_default2 = { - version: "0.5.3", - rootContainerClassName: "root-container", - nodeContainerClassName: "node-container", - edgeContainerClassName: "edge-container", - comboContainerClassName: "combo-container", - delegateContainerClassName: "delegate-container", - defaultLoopPosition: "top", - nodeLabel: { - style: { - fill: "#000", - fontSize: 12, - textAlign: "center", - textBaseline: "middle" - }, - offset: 4 - }, - defaultNode: { - type: "circle", - style: { - lineWidth: 1, - stroke: colorSet2.mainStroke, - fill: colorSet2.mainFill - }, - size: 20, - color: colorSet2.mainStroke, - linkPoints: { - size: 8, - lineWidth: 1, - fill: colorSet2.activeFill, - stroke: colorSet2.activeStroke - } - }, - nodeStateStyles: { - active: { - fill: colorSet2.activeFill, - stroke: colorSet2.activeStroke, - lineWidth: 2, - shadowColor: colorSet2.mainStroke, - shadowBlur: 10 - }, - selected: { - fill: colorSet2.selectedFill, - stroke: colorSet2.selectedStroke, - lineWidth: 4, - shadowColor: colorSet2.selectedStroke, - shadowBlur: 10, - "text-shape": { - fontWeight: 500 - } - }, - highlight: { - fill: colorSet2.highlightFill, - stroke: colorSet2.highlightStroke, - lineWidth: 2, - "text-shape": { - fontWeight: 500 - } - }, - inactive: { - fill: colorSet2.inactiveFill, - stroke: colorSet2.inactiveStroke, - lineWidth: 1 - }, - disable: { - fill: colorSet2.disableFill, - stroke: colorSet2.disableStroke, - lineWidth: 1 - } - }, - edgeLabel: { - style: { - fill: textColor2, - textAlign: "center", - textBaseline: "middle", - fontSize: 12 - } - }, - defaultEdge: { - type: "line", - size: 1, - style: { - stroke: colorSet2.edgeMainStroke, - lineAppendWidth: 2 - }, - color: colorSet2.edgeMainStroke - }, - edgeStateStyles: { - active: { - stroke: colorSet2.edgeActiveStroke, - lineWidth: 1 - }, - selected: { - stroke: colorSet2.edgeSelectedStroke, - lineWidth: 2, - shadowColor: colorSet2.edgeSelectedStroke, - shadowBlur: 10, - "text-shape": { - fontWeight: 500 - } - }, - highlight: { - stroke: colorSet2.edgeHighlightStroke, - lineWidth: 2, - "text-shape": { - fontWeight: 500 - } - }, - inactive: { - stroke: colorSet2.edgeInactiveStroke, - lineWidth: 1 - }, - disable: { - stroke: colorSet2.edgeDisableStroke, - lineWidth: 1 - } - }, - comboLabel: { - style: { - fill: textColor2, - textBaseline: "middle", - fontSize: 12 - }, - refY: 10, - refX: 10 - }, - defaultCombo: { - type: "circle", - style: { - fill: colorSet2.comboMainFill, - lineWidth: 1, - stroke: colorSet2.comboMainStroke, - r: 5, - width: 20, - height: 10 - }, - size: [20, 5], - color: colorSet2.comboMainStroke, - padding: [25, 20, 15, 20] - }, - comboStateStyles: { - active: { - stroke: colorSet2.comboActiveStroke, - lineWidth: 1, - fill: colorSet2.comboActiveFill - }, - selected: { - stroke: colorSet2.comboSelectedStroke, - lineWidth: 2, - fill: colorSet2.comboSelectedFill, - shadowColor: colorSet2.comboSelectedStroke, - shadowBlur: 10, - "text-shape": { - fontWeight: 500 - } - }, - highlight: { - stroke: colorSet2.comboHighlightStroke, - lineWidth: 2, - fill: colorSet2.comboHighlightFill, - "text-shape": { - fontWeight: 500 - } - }, - inactive: { - stroke: colorSet2.comboInactiveStroke, - fill: colorSet2.comboInactiveFill, - lineWidth: 1 - }, - disable: { - stroke: colorSet2.comboDisableStroke, - fill: colorSet2.comboDisableFill, - lineWidth: 1 - } - }, - delegateStyle: { - fill: "#F3F9FF", - fillOpacity: 0.5, - stroke: "#1890FF", - strokeOpacity: 0.9, - lineDash: [5, 5] - }, - textWaterMarkerConfig: { - width: 150, - height: 100, - compatible: false, - text: { - x: 0, - y: 60, - lineHeight: 20, - rotate: 20, - fontSize: 14, - fontFamily: "Microsoft YaHei", - fill: "rgba(0, 0, 0, 0.1)", - baseline: "Middle" - } - }, - imageWaterMarkerConfig: { - width: 150, - height: 130, - compatible: false, - image: { - x: 0, - y: 0, - width: 30, - height: 20, - rotate: 0 - } - }, - waterMarkerImage: "https://gw.alipayobjects.com/os/s/prod/antv/assets/image/logo-with-text-73b8a.svg" -}; - -// node_modules/@antv/g6-pc/es/graph/controller/event.js -var import_util513 = __toModule(require_lib()); -var cloneEvent3 = util_default.cloneEvent; -var isViewportChanged3 = util_default.isViewportChanged; -var EventController3 = function(_super) { - __extends(EventController4, _super); - function EventController4(graph) { - var _this = _super.call(this, graph) || this; - _this.extendEvents = []; - _this.dragging = false; - _this.preItem = null; - _this.graph = graph; - _this.destroyed = false; - _this.initEvents(); - return _this; - } - EventController4.prototype.initEvents = function() { - var _a6 = this, graph = _a6.graph, _b = _a6.extendEvents, extendEvents = _b === void 0 ? [] : _b; - var canvas = graph.get("canvas"); - var el = canvas.get("el"); - var canvasHandler = (0, import_util513.wrapBehavior)(this, "onCanvasEvents"); - var originHandler = (0, import_util513.wrapBehavior)(this, "onExtendEvents"); - var wheelHandler = (0, import_util513.wrapBehavior)(this, "onWheelEvent"); - canvas.off("*").on("*", canvasHandler); - this.canvasHandler = canvasHandler; - extendEvents.push(addEventListener(el, "DOMMouseScroll", wheelHandler)); - extendEvents.push(addEventListener(el, "mousewheel", wheelHandler)); - if (typeof window !== "undefined") { - extendEvents.push(addEventListener(window, "keydown", originHandler)); - extendEvents.push(addEventListener(window, "keyup", originHandler)); - extendEvents.push(addEventListener(window, "focus", originHandler)); - } - }; - EventController4.getItemRoot = function(shape) { - while (shape && !shape.get("item")) { - shape = shape.get("parent"); - } - return shape; - }; - EventController4.prototype.onCanvasEvents = function(evt) { - var graph = this.graph; - var canvas = graph.get("canvas"); - var target = evt.target; - var eventType = evt.type; - evt.canvasX = evt.x; - evt.canvasY = evt.y; - var point2 = { - x: evt.canvasX, - y: evt.canvasY - }; - var group3 = graph.get("group"); - var matrix = group3.getMatrix(); - if (!matrix) { - matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - } - if (isViewportChanged3(matrix)) { - point2 = graph.getPointByClient(evt.clientX, evt.clientY); - } - evt.x = point2.x; - evt.y = point2.y; - evt.currentTarget = graph; - if (target === canvas) { - if (eventType === "mousemove" || eventType === "mouseleave") { - this.handleMouseMove(evt, "canvas"); - } - evt.target = canvas; - evt.item = null; - graph.emit(eventType, evt); - graph.emit("canvas:".concat(eventType), evt); - return; - } - var itemShape = EventController4.getItemRoot(target); - if (!itemShape) { - graph.emit(eventType, evt); - return; - } - var item = itemShape.get("item"); - if (item.destroyed) { - return; - } - var type2 = item.getType(); - evt.target = target; - evt.item = item; - if (evt.canvasX === evt.x && evt.canvasY === evt.y) { - var canvasPoint = graph.getCanvasByPoint(evt.x, evt.y); - evt.canvasX = canvasPoint.x; - evt.canvasY = canvasPoint.y; - } - graph.emit(eventType, evt); - if (evt.name && !evt.name.includes(":")) - graph.emit("".concat(type2, ":").concat(eventType), evt); - else - graph.emit(evt.name, evt); - if (eventType === "dragstart") { - this.dragging = true; - } - if (eventType === "dragend") { - this.dragging = false; - } - if (eventType === "mousemove") { - this.handleMouseMove(evt, type2); - } - }; - EventController4.prototype.onExtendEvents = function(evt) { - this.graph.emit(evt.type, evt); - }; - EventController4.prototype.onWheelEvent = function(evt) { - if ((0, import_util513.isNil)(evt.wheelDelta)) { - evt.wheelDelta = -evt.detail; - } - this.graph.emit("wheel", evt); - }; - EventController4.prototype.handleMouseMove = function(evt, type2) { - var _a6 = this, graph = _a6.graph, preItem = _a6.preItem; - var canvas = graph.get("canvas"); - var item = evt.target === canvas ? null : evt.item; - evt = cloneEvent3(evt); - if (preItem && preItem !== item && !preItem.destroyed) { - evt.item = preItem; - this.emitCustomEvent(preItem.getType(), "mouseleave", evt); - if (this.dragging) { - this.emitCustomEvent(preItem.getType(), "dragleave", evt); - } - } - if (item && preItem !== item) { - evt.item = item; - this.emitCustomEvent(type2, "mouseenter", evt); - if (this.dragging) { - this.emitCustomEvent(type2, "dragenter", evt); - } - } - this.preItem = item; - }; - EventController4.prototype.emitCustomEvent = function(itemType, eventType, evt) { - evt.type = eventType; - this.graph.emit("".concat(itemType, ":").concat(eventType), evt); - }; - EventController4.prototype.destroy = function() { - var _a6 = this, graph = _a6.graph, canvasHandler = _a6.canvasHandler, extendEvents = _a6.extendEvents; - var canvas = graph.get("canvas"); - canvas.off("*", canvasHandler); - (0, import_util513.each)(extendEvents, function(event) { - event.remove(); - }); - this.dragging = false; - this.preItem = null; - this.extendEvents.length = 0; - this.canvasHandler = null; - this.destroyed = true; - }; - return EventController4; -}(event_default2); -var event_default3 = EventController3; - -// node_modules/@antv/layout/es/layout/base.js -var Base3 = class { - constructor() { - this.nodes = []; - this.edges = []; - this.combos = []; - this.positions = []; - this.destroyed = false; - this.onLayoutEnd = () => { - }; - } - layout(data3) { - this.init(data3); - return this.execute(true); - } - init(data3) { - this.nodes = data3.nodes || []; - this.edges = data3.edges || []; - this.combos = data3.combos || []; - } - execute(reloadData) { - } - executeWithWorker() { - } - getDefaultCfg() { - return {}; - } - updateCfg(cfg) { - if (cfg) { - Object.assign(this, cfg); - } - } - getType() { - return "base"; - } - destroy() { - this.nodes = null; - this.edges = null; - this.combos = null; - this.positions = null; - this.destroyed = true; - } -}; - -// node_modules/@antv/layout/es/util/string.js -var isString50 = (val) => typeof val === "string"; -var cacheStringFunction = (fn) => { - const cache3 = Object.create(null); - return (str8) => { - const hit = cache3[str8]; - return hit || (cache3[str8] = fn(str8)); - }; -}; -var camelizeRE = /-(\w)/g; -var camelize = cacheStringFunction((str8) => { - return str8.replace(camelizeRE, (_8, c5) => c5 ? c5.toUpperCase() : ""); -}); - -// node_modules/@antv/layout/es/util/array.js -var isArray82 = Array.isArray; - -// node_modules/@antv/layout/es/util/number.js -var isNumber45 = (val) => typeof val === "number"; -var isNaN4 = (num) => Number.isNaN(Number(num)); - -// node_modules/@antv/layout/es/util/object.js -var isObject26 = (val) => val !== null && typeof val === "object"; -var clone31 = (target) => { - if (target === null) { - return target; - } - if (target instanceof Date) { - return new Date(target.getTime()); - } - if (target instanceof Array) { - const cp = []; - target.forEach((v3) => { - cp.push(v3); - }); - return cp.map((n3) => clone31(n3)); - } - if (typeof target === "object" && target !== {}) { - const cp = Object.assign({}, target); - Object.keys(cp).forEach((k4) => { - cp[k4] = clone31(cp[k4]); - }); - return cp; - } - return target; -}; - -// node_modules/@antv/layout/es/util/math.js -var getEdgeTerminal = (edge2, type2) => { - const terminal = edge2[type2]; - if (isObject26(terminal)) { - return terminal.cell; - } - return terminal; -}; -var getDegree3 = (n3, nodeIdxMap, edges) => { - const degrees = []; - for (let i4 = 0; i4 < n3; i4++) { - degrees[i4] = 0; - } - if (!edges) - return degrees; - edges.forEach((e4) => { - const source = getEdgeTerminal(e4, "source"); - const target = getEdgeTerminal(e4, "target"); - if (source) { - degrees[nodeIdxMap[source]] += 1; - } - if (target) { - degrees[nodeIdxMap[target]] += 1; - } - }); - return degrees; -}; -var floydWarshall5 = (adjMatrix3) => { - const dist4 = []; - const size14 = adjMatrix3.length; - for (let i4 = 0; i4 < size14; i4 += 1) { - dist4[i4] = []; - for (let j4 = 0; j4 < size14; j4 += 1) { - if (i4 === j4) { - dist4[i4][j4] = 0; - } else if (adjMatrix3[i4][j4] === 0 || !adjMatrix3[i4][j4]) { - dist4[i4][j4] = Infinity; - } else { - dist4[i4][j4] = adjMatrix3[i4][j4]; - } - } - } - for (let k4 = 0; k4 < size14; k4 += 1) { - for (let i4 = 0; i4 < size14; i4 += 1) { - for (let j4 = 0; j4 < size14; j4 += 1) { - if (dist4[i4][j4] > dist4[i4][k4] + dist4[k4][j4]) { - dist4[i4][j4] = dist4[i4][k4] + dist4[k4][j4]; - } - } - } - } - return dist4; -}; -var getAdjMatrix3 = (data3, directed) => { - const { nodes, edges } = data3; - const matrix = []; - const nodeMap = {}; - if (!nodes) { - throw new Error("invalid nodes data!"); - } - if (nodes) { - nodes.forEach((node, i4) => { - nodeMap[node.id] = i4; - const row = []; - matrix.push(row); - }); - } - if (edges) { - edges.forEach((e4) => { - const source = getEdgeTerminal(e4, "source"); - const target = getEdgeTerminal(e4, "target"); - const sIndex = nodeMap[source]; - const tIndex = nodeMap[target]; - matrix[sIndex][tIndex] = 1; - if (!directed) { - matrix[tIndex][sIndex] = 1; - } - }); - } - return matrix; -}; -var scaleMatrix3 = (matrix, ratio) => { - const result = []; - matrix.forEach((row) => { - const newRow = []; - row.forEach((v3) => { - newRow.push(v3 * ratio); - }); - result.push(newRow); - }); - return result; -}; -var traverseUp3 = (data3, fn) => { - if (data3 && data3.children) { - for (let i4 = data3.children.length - 1; i4 >= 0; i4--) { - if (!traverseUp3(data3.children[i4], fn)) - return; - } - } - if (!fn(data3)) { - return false; - } - return true; -}; -var traverseTreeUp3 = (data3, fn) => { - if (typeof fn !== "function") { - return; - } - traverseUp3(data3, fn); -}; - -// node_modules/@antv/layout/es/util/function.js -var isFunction41 = (val) => typeof val === "function"; - -// node_modules/@antv/layout/es/registy/index.js -var map21 = new Map(); -var registerLayout = (name, layoutOverride) => { - if (map21.get(name)) { - console.warn(`The layout with the name ${name} exists already, it will be overridden`); - } - if (isObject26(layoutOverride)) { - class GLayout extends Base3 { - constructor(cfg) { - super(); - const self2 = this; - const props = {}; - const defaultCfg2 = self2.getDefaultCfg(); - Object.assign(props, defaultCfg2, layoutOverride, cfg); - Object.keys(props).forEach((key) => { - const value2 = props[key]; - self2[key] = value2; - }); - } - } - map21.set(name, GLayout); - } else { - map21.set(name, layoutOverride); - } - return map21.get(name); -}; - -// node_modules/@antv/layout/es/layout/grid.js -var GridLayout = class extends Base3 { - constructor(options) { - super(); - this.begin = [0, 0]; - this.preventOverlap = true; - this.preventOverlapPadding = 10; - this.condense = false; - this.sortBy = "degree"; - this.nodeSize = 30; - this.nodes = []; - this.edges = []; - this.width = 300; - this.height = 300; - this.row = 0; - this.col = 0; - this.cellWidth = 0; - this.cellHeight = 0; - this.cellUsed = {}; - this.id2manPos = {}; - this.onLayoutEnd = () => { - }; - this.updateCfg(options); - } - getDefaultCfg() { - return { - begin: [0, 0], - preventOverlap: true, - preventOverlapPadding: 10, - condense: false, - rows: void 0, - cols: void 0, - position: void 0, - sortBy: "degree", - nodeSize: 30 - }; - } - execute() { - const self2 = this; - const nodes = self2.nodes; - const edges = self2.edges; - const n3 = nodes.length; - const begin = self2.begin; - if (n3 === 0) { - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return { - nodes, - edges - }; - } - if (n3 === 1) { - nodes[0].x = begin[0]; - nodes[0].y = begin[1]; - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return { - nodes, - edges - }; - } - const layoutNodes2 = []; - nodes.forEach((node) => { - layoutNodes2.push(node); - }); - const nodeIdxMap = {}; - layoutNodes2.forEach((node, i4) => { - nodeIdxMap[node.id] = i4; - }); - if (self2.sortBy === "degree" || !isString50(self2.sortBy) || layoutNodes2[0][self2.sortBy] === void 0) { - self2.sortBy = "degree"; - if (isNaN4(nodes[0].degree)) { - const values4 = getDegree3(layoutNodes2.length, nodeIdxMap, edges); - layoutNodes2.forEach((node, i4) => { - node.degree = values4[i4]; - }); - } - } - layoutNodes2.sort((n1, n22) => n22[self2.sortBy] - n1[self2.sortBy]); - if (!self2.width && typeof window !== "undefined") { - self2.width = window.innerWidth; - } - if (!self2.height && typeof window !== "undefined") { - self2.height = window.innerHeight; - } - const oRows = self2.rows; - const oCols = self2.cols != null ? self2.cols : self2.columns; - self2.cells = n3; - if (oRows != null && oCols != null) { - self2.rows = oRows; - self2.cols = oCols; - } else if (oRows != null && oCols == null) { - self2.rows = oRows; - self2.cols = Math.ceil(self2.cells / self2.rows); - } else if (oRows == null && oCols != null) { - self2.cols = oCols; - self2.rows = Math.ceil(self2.cells / self2.cols); - } else { - self2.splits = Math.sqrt(self2.cells * self2.height / self2.width); - self2.rows = Math.round(self2.splits); - self2.cols = Math.round(self2.width / self2.height * self2.splits); - } - if (self2.cols * self2.rows > self2.cells) { - const sm = self2.small(); - const lg = self2.large(); - if ((sm - 1) * lg >= self2.cells) { - self2.small(sm - 1); - } else if ((lg - 1) * sm >= self2.cells) { - self2.large(lg - 1); - } - } else { - while (self2.cols * self2.rows < self2.cells) { - const sm = self2.small(); - const lg = self2.large(); - if ((lg + 1) * sm >= self2.cells) { - self2.large(lg + 1); - } else { - self2.small(sm + 1); - } - } - } - self2.cellWidth = self2.width / self2.cols; - self2.cellHeight = self2.height / self2.rows; - if (self2.condense) { - self2.cellWidth = 0; - self2.cellHeight = 0; - } - if (self2.preventOverlap) { - layoutNodes2.forEach((node) => { - if (!node.x || !node.y) { - node.x = 0; - node.y = 0; - } - let nodew; - let nodeh; - if (isArray82(node.size)) { - nodew = node.size[0]; - nodeh = node.size[1]; - } else if (isNumber45(node.size)) { - nodew = node.size; - nodeh = node.size; - } else if (isObject26(node.size)) { - nodew = node.size.width; - nodeh = node.size.height; - } - if (nodew === void 0 || nodeh === void 0) { - if (isArray82(self2.nodeSize)) { - nodew = self2.nodeSize[0]; - nodeh = self2.nodeSize[1]; - } else if (isNumber45(self2.nodeSize)) { - nodew = self2.nodeSize; - nodeh = self2.nodeSize; - } else { - nodew = 30; - nodeh = 30; - } - } - const p4 = self2.preventOverlapPadding; - const w4 = nodew + p4; - const h3 = nodeh + p4; - self2.cellWidth = Math.max(self2.cellWidth, w4); - self2.cellHeight = Math.max(self2.cellHeight, h3); - }); - } - self2.cellUsed = {}; - self2.row = 0; - self2.col = 0; - self2.id2manPos = {}; - for (let i4 = 0; i4 < layoutNodes2.length; i4++) { - const node = layoutNodes2[i4]; - let rcPos; - if (self2.position) { - rcPos = self2.position(node); - } - if (rcPos && (rcPos.row !== void 0 || rcPos.col !== void 0)) { - const pos = { - row: rcPos.row, - col: rcPos.col - }; - if (pos.col === void 0) { - pos.col = 0; - while (self2.used(pos.row, pos.col)) { - pos.col++; - } - } else if (pos.row === void 0) { - pos.row = 0; - while (self2.used(pos.row, pos.col)) { - pos.row++; - } - } - self2.id2manPos[node.id] = pos; - self2.use(pos.row, pos.col); - } - self2.getPos(node); - } - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return { - edges, - nodes: layoutNodes2 - }; - } - small(val) { - const self2 = this; - let res; - const rows = self2.rows || 5; - const cols = self2.cols || 5; - if (val == null) { - res = Math.min(rows, cols); - } else { - const min13 = Math.min(rows, cols); - if (min13 === self2.rows) { - self2.rows = val; - } else { - self2.cols = val; - } - } - return res; - } - large(val) { - const self2 = this; - let res; - const rows = self2.rows || 5; - const cols = self2.cols || 5; - if (val == null) { - res = Math.max(rows, cols); - } else { - const max15 = Math.max(rows, cols); - if (max15 === self2.rows) { - self2.rows = val; - } else { - self2.cols = val; - } - } - return res; - } - used(row, col) { - const self2 = this; - return self2.cellUsed[`c-${row}-${col}`] || false; - } - use(row, col) { - const self2 = this; - self2.cellUsed[`c-${row}-${col}`] = true; - } - moveToNextCell() { - const self2 = this; - const cols = self2.cols || 5; - self2.col++; - if (self2.col >= cols) { - self2.col = 0; - self2.row++; - } - } - getPos(node) { - const self2 = this; - const begin = self2.begin; - const cellWidth = self2.cellWidth; - const cellHeight = self2.cellHeight; - let x6; - let y5; - const rcPos = self2.id2manPos[node.id]; - if (rcPos) { - x6 = rcPos.col * cellWidth + cellWidth / 2 + begin[0]; - y5 = rcPos.row * cellHeight + cellHeight / 2 + begin[1]; - } else { - while (self2.used(self2.row, self2.col)) { - self2.moveToNextCell(); - } - x6 = self2.col * cellWidth + cellWidth / 2 + begin[0]; - y5 = self2.row * cellHeight + cellHeight / 2 + begin[1]; - self2.use(self2.row, self2.col); - self2.moveToNextCell(); - } - node.x = x6; - node.y = y5; - } - getType() { - return "grid"; - } -}; - -// node_modules/@antv/layout/es/layout/random.js -var RandomLayout = class extends Base3 { - constructor(options) { - super(); - this.center = [0, 0]; - this.width = 300; - this.height = 300; - this.nodes = []; - this.edges = []; - this.onLayoutEnd = () => { - }; - this.updateCfg(options); - } - getDefaultCfg() { - return { - center: [0, 0], - width: 300, - height: 300 - }; - } - execute() { - const self2 = this; - const nodes = self2.nodes; - const layoutScale = 0.9; - const center2 = self2.center; - if (!self2.width && typeof window !== "undefined") { - self2.width = window.innerWidth; - } - if (!self2.height && typeof window !== "undefined") { - self2.height = window.innerHeight; - } - if (nodes) { - nodes.forEach((node) => { - node.x = (Math.random() - 0.5) * layoutScale * self2.width + center2[0]; - node.y = (Math.random() - 0.5) * layoutScale * self2.height + center2[1]; - }); - } - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return { - nodes, - edges: this.edges - }; - } - getType() { - return "random"; - } -}; - -// node_modules/@antv/layout/es/layout/gForce.js -var proccessToFunc = (value2, defaultV) => { - let func; - if (!value2) { - func = (d3) => { - return defaultV || 1; - }; - } else if (isNumber45(value2)) { - func = (d3) => { - return value2; - }; - } else { - func = value2; - } - return func; -}; -var GForceLayout = class extends Base3 { - constructor(options) { - super(); - this.maxIteration = 1e3; - this.workerEnabled = false; - this.edgeStrength = 200; - this.nodeStrength = 1e3; - this.coulombDisScale = 5e-3; - this.damping = 0.9; - this.maxSpeed = 1e3; - this.minMovement = 0.5; - this.interval = 0.02; - this.factor = 1; - this.linkDistance = 1; - this.gravity = 10; - this.preventOverlap = true; - this.tick = () => { - }; - this.nodes = []; - this.edges = []; - this.width = 300; - this.height = 300; - this.nodeMap = {}; - this.nodeIdxMap = {}; - this.updateCfg(options); - } - getDefaultCfg() { - return { - maxIteration: 500, - gravity: 10, - enableTick: true - }; - } - execute() { - var _a6, _b; - const self2 = this; - const nodes = self2.nodes; - if (self2.timeInterval !== void 0 && typeof window !== "undefined") { - window.clearInterval(self2.timeInterval); - } - if (!nodes || nodes.length === 0) { - (_a6 = self2.onLayoutEnd) === null || _a6 === void 0 ? void 0 : _a6.call(self2); - return; - } - if (!self2.width && typeof window !== "undefined") { - self2.width = window.innerWidth; - } - if (!self2.height && typeof window !== "undefined") { - self2.height = window.innerHeight; - } - if (!self2.center) { - self2.center = [self2.width / 2, self2.height / 2]; - } - const center2 = self2.center; - if (nodes.length === 1) { - nodes[0].x = center2[0]; - nodes[0].y = center2[1]; - (_b = self2.onLayoutEnd) === null || _b === void 0 ? void 0 : _b.call(self2); - return; - } - const nodeMap = {}; - const nodeIdxMap = {}; - nodes.forEach((node, i4) => { - if (!isNumber45(node.x)) - node.x = Math.random() * self2.width; - if (!isNumber45(node.y)) - node.y = Math.random() * self2.height; - nodeMap[node.id] = node; - nodeIdxMap[node.id] = i4; - }); - self2.nodeMap = nodeMap; - self2.nodeIdxMap = nodeIdxMap; - self2.linkDistance = proccessToFunc(self2.linkDistance, 1); - self2.nodeStrength = proccessToFunc(self2.nodeStrength, 1); - self2.edgeStrength = proccessToFunc(self2.edgeStrength, 1); - const nodeSize = self2.nodeSize; - let nodeSizeFunc; - if (self2.preventOverlap) { - const nodeSpacing = self2.nodeSpacing; - let nodeSpacingFunc; - if (isNumber45(nodeSpacing)) { - nodeSpacingFunc = () => nodeSpacing; - } else if (isFunction41(nodeSpacing)) { - nodeSpacingFunc = nodeSpacing; - } else { - nodeSpacingFunc = () => 0; - } - if (!nodeSize) { - nodeSizeFunc = (d3) => { - if (d3.size) { - if (isArray82(d3.size)) { - const res = d3.size[0] > d3.size[1] ? d3.size[0] : d3.size[1]; - return res + nodeSpacingFunc(d3); - } - if (isObject26(d3.size)) { - const res = d3.size.width > d3.size.height ? d3.size.width : d3.size.height; - return res + nodeSpacingFunc(d3); - } - return d3.size + nodeSpacingFunc(d3); - } - return 10 + nodeSpacingFunc(d3); - }; - } else if (isArray82(nodeSize)) { - nodeSizeFunc = (d3) => { - const res = nodeSize[0] > nodeSize[1] ? nodeSize[0] : nodeSize[1]; - return res + nodeSpacingFunc(d3); - }; - } else { - nodeSizeFunc = (d3) => nodeSize + nodeSpacingFunc(d3); - } - } - self2.nodeSize = nodeSizeFunc; - const edges = self2.edges; - self2.degrees = getDegree3(nodes.length, self2.nodeIdxMap, edges); - if (!self2.getMass) { - self2.getMass = (d3) => { - const mass = self2.degrees[self2.nodeIdxMap[d3.id]] || 1; - return mass; - }; - } - self2.run(); - } - run() { - var _a6; - const self2 = this; - const { maxIteration, nodes, workerEnabled, minMovement } = self2; - if (!nodes) - return; - if (workerEnabled) { - for (let i4 = 0; i4 < maxIteration; i4++) { - const previousPos = self2.runOneStep(i4); - if (self2.reachMoveThreshold(nodes, previousPos, minMovement)) { - break; - } - } - (_a6 = self2.onLayoutEnd) === null || _a6 === void 0 ? void 0 : _a6.call(self2); - } else { - if (typeof window === "undefined") - return; - let iter = 0; - this.timeInterval = window.setInterval(() => { - var _a7, _b; - if (!nodes) - return; - const previousPos = self2.runOneStep(iter) || []; - if (self2.reachMoveThreshold(nodes, previousPos, minMovement)) { - (_a7 = self2.onLayoutEnd) === null || _a7 === void 0 ? void 0 : _a7.call(self2); - window.clearInterval(self2.timeInterval); - } - iter++; - if (iter >= maxIteration) { - (_b = self2.onLayoutEnd) === null || _b === void 0 ? void 0 : _b.call(self2); - window.clearInterval(self2.timeInterval); - } - }, 0); - } - } - reachMoveThreshold(nodes, previousPos, minMovement) { - let movement = 0; - nodes.forEach((node, j4) => { - const vx = node.x - previousPos[j4].x; - const vy = node.y - previousPos[j4].y; - movement += Math.sqrt(vx * vx + vy * vy); - }); - movement /= nodes.length; - return movement < minMovement; - } - runOneStep(iter) { - var _a6; - const self2 = this; - const { nodes, edges } = self2; - const accArray = []; - const velArray = []; - if (!nodes) - return; - nodes.forEach((_8, i4) => { - accArray[2 * i4] = 0; - accArray[2 * i4 + 1] = 0; - velArray[2 * i4] = 0; - velArray[2 * i4 + 1] = 0; - }); - self2.calRepulsive(accArray, nodes); - if (edges) - self2.calAttractive(accArray, edges); - self2.calGravity(accArray, nodes); - const stepInterval = Math.max(0.02, self2.interval - iter * 2e-3); - self2.updateVelocity(accArray, velArray, stepInterval, nodes); - const previousPos = []; - nodes.forEach((node) => { - previousPos.push({ - x: node.x, - y: node.y - }); - }); - self2.updatePosition(velArray, stepInterval, nodes); - (_a6 = self2.tick) === null || _a6 === void 0 ? void 0 : _a6.call(self2); - return previousPos; - } - calRepulsive(accArray, nodes) { - const self2 = this; - const getMass = self2.getMass; - const nodeStrength = self2.nodeStrength; - const factor = self2.factor; - const coulombDisScale = self2.coulombDisScale; - const preventOverlap = self2.preventOverlap; - const nodeSize = self2.nodeSize; - nodes.forEach((ni, i4) => { - const massi = getMass ? getMass(ni) : 1; - nodes.forEach((nj, j4) => { - if (i4 >= j4) - return; - const vecX = ni.x - nj.x; - const vecY = ni.y - nj.y; - const vecLength = Math.sqrt(vecX * vecX + vecY * vecY) + 0.01; - const nVecLength = (vecLength + 0.1) * coulombDisScale; - const direX = vecX / vecLength; - const direY = vecY / vecLength; - const param = (nodeStrength(ni) + nodeStrength(nj)) / 2 * factor / (nVecLength * nVecLength); - const massj = getMass ? getMass(nj) : 1; - accArray[2 * i4] += direX * param; - accArray[2 * i4 + 1] += direY * param; - accArray[2 * j4] -= direX * param; - accArray[2 * j4 + 1] -= direY * param; - if (preventOverlap && vecLength < (nodeSize(ni) + nodeSize(nj)) / 2) { - const paramOverlap = (nodeStrength(ni) + nodeStrength(nj)) / 2 / (vecLength * vecLength); - accArray[2 * i4] += direX * paramOverlap / massi; - accArray[2 * i4 + 1] += direY * paramOverlap / massi; - accArray[2 * j4] -= direX * paramOverlap / massj; - accArray[2 * j4 + 1] -= direY * paramOverlap / massj; - } - }); - }); - } - calAttractive(accArray, edges) { - const self2 = this; - const nodeMap = self2.nodeMap; - const nodeIdxMap = self2.nodeIdxMap; - const linkDistance = self2.linkDistance; - const edgeStrength = self2.edgeStrength; - const getMass = self2.getMass; - edges.forEach((edge2, i4) => { - const source = getEdgeTerminal(edge2, "source"); - const target = getEdgeTerminal(edge2, "target"); - const sourceNode = nodeMap[source]; - const targetNode = nodeMap[target]; - const vecX = targetNode.x - sourceNode.x; - const vecY = targetNode.y - sourceNode.y; - const vecLength = Math.sqrt(vecX * vecX + vecY * vecY) + 0.01; - const direX = vecX / vecLength; - const direY = vecY / vecLength; - const length5 = linkDistance(edge2) || 1; - const diff2 = length5 - vecLength; - const param = diff2 * edgeStrength(edge2); - const sourceIdx = nodeIdxMap[source]; - const targetIdx = nodeIdxMap[target]; - const massSource = getMass ? getMass(sourceNode) : 1; - const massTarget = getMass ? getMass(targetNode) : 1; - accArray[2 * sourceIdx] -= direX * param / massSource; - accArray[2 * sourceIdx + 1] -= direY * param / massSource; - accArray[2 * targetIdx] += direX * param / massTarget; - accArray[2 * targetIdx + 1] += direY * param / massTarget; - }); - } - calGravity(accArray, nodes) { - const self2 = this; - const center2 = self2.center; - const defaultGravity = self2.gravity; - const degrees = self2.degrees; - const nodeLength = nodes.length; - for (let i4 = 0; i4 < nodeLength; i4++) { - const node = nodes[i4]; - let vecX = node.x - center2[0]; - let vecY = node.y - center2[1]; - let gravity = defaultGravity; - if (self2.getCenter) { - const customCenterOpt = self2.getCenter(node, degrees[i4]); - if (customCenterOpt && isNumber45(customCenterOpt[0]) && isNumber45(customCenterOpt[1]) && isNumber45(customCenterOpt[2])) { - vecX = node.x - customCenterOpt[0]; - vecY = node.y - customCenterOpt[1]; - gravity = customCenterOpt[2]; - } - } - if (!gravity) - continue; - accArray[2 * i4] -= gravity * vecX; - accArray[2 * i4 + 1] -= gravity * vecY; - } - } - updateVelocity(accArray, velArray, stepInterval, nodes) { - const self2 = this; - const param = stepInterval * self2.damping; - nodes.forEach((node, i4) => { - let vx = accArray[2 * i4] * param || 0.01; - let vy = accArray[2 * i4 + 1] * param || 0.01; - const vLength = Math.sqrt(vx * vx + vy * vy); - if (vLength > self2.maxSpeed) { - const param2 = self2.maxSpeed / vLength; - vx = param2 * vx; - vy = param2 * vy; - } - velArray[2 * i4] = vx; - velArray[2 * i4 + 1] = vy; - }); - } - updatePosition(velArray, stepInterval, nodes) { - nodes.forEach((node, i4) => { - if (isNumber45(node.fx) && isNumber45(node.fy)) { - node.x = node.fx; - node.y = node.fy; - return; - } - const distX = velArray[2 * i4] * stepInterval; - const distY = velArray[2 * i4 + 1] * stepInterval; - node.x += distX; - node.y += distY; - }); - } - stop() { - if (this.timeInterval && typeof window !== "undefined") { - window.clearInterval(this.timeInterval); - } - } - destroy() { - const self2 = this; - self2.stop(); - self2.tick = null; - self2.nodes = null; - self2.edges = null; - self2.destroyed = true; - } - getType() { - return "gForce"; - } -}; - -// node_modules/d3-force/src/center.js -function center_default(x6, y5) { - var nodes, strength = 1; - if (x6 == null) - x6 = 0; - if (y5 == null) - y5 = 0; - function force() { - var i4, n3 = nodes.length, node, sx = 0, sy = 0; - for (i4 = 0; i4 < n3; ++i4) { - node = nodes[i4], sx += node.x, sy += node.y; - } - for (sx = (sx / n3 - x6) * strength, sy = (sy / n3 - y5) * strength, i4 = 0; i4 < n3; ++i4) { - node = nodes[i4], node.x -= sx, node.y -= sy; - } - } - force.initialize = function(_8) { - nodes = _8; - }; - force.x = function(_8) { - return arguments.length ? (x6 = +_8, force) : x6; - }; - force.y = function(_8) { - return arguments.length ? (y5 = +_8, force) : y5; - }; - force.strength = function(_8) { - return arguments.length ? (strength = +_8, force) : strength; - }; - return force; -} - -// node_modules/d3-quadtree/src/add.js -function add_default(d3) { - const x6 = +this._x.call(null, d3), y5 = +this._y.call(null, d3); - return add7(this.cover(x6, y5), x6, y5, d3); -} -function add7(tree, x6, y5, d3) { - if (isNaN(x6) || isNaN(y5)) - return tree; - var parent, node = tree._root, leaf = { data: d3 }, x0 = tree._x0, y0 = tree._y0, x1 = tree._x1, y1 = tree._y1, xm, ym, xp, yp, right2, bottom, i4, j4; - if (!node) - return tree._root = leaf, tree; - while (node.length) { - if (right2 = x6 >= (xm = (x0 + x1) / 2)) - x0 = xm; - else - x1 = xm; - if (bottom = y5 >= (ym = (y0 + y1) / 2)) - y0 = ym; - else - y1 = ym; - if (parent = node, !(node = node[i4 = bottom << 1 | right2])) - return parent[i4] = leaf, tree; - } - xp = +tree._x.call(null, node.data); - yp = +tree._y.call(null, node.data); - if (x6 === xp && y5 === yp) - return leaf.next = node, parent ? parent[i4] = leaf : tree._root = leaf, tree; - do { - parent = parent ? parent[i4] = new Array(4) : tree._root = new Array(4); - if (right2 = x6 >= (xm = (x0 + x1) / 2)) - x0 = xm; - else - x1 = xm; - if (bottom = y5 >= (ym = (y0 + y1) / 2)) - y0 = ym; - else - y1 = ym; - } while ((i4 = bottom << 1 | right2) === (j4 = (yp >= ym) << 1 | xp >= xm)); - return parent[j4] = node, parent[i4] = leaf, tree; -} -function addAll(data3) { - var d3, i4, n3 = data3.length, x6, y5, xz = new Array(n3), yz = new Array(n3), x0 = Infinity, y0 = Infinity, x1 = -Infinity, y1 = -Infinity; - for (i4 = 0; i4 < n3; ++i4) { - if (isNaN(x6 = +this._x.call(null, d3 = data3[i4])) || isNaN(y5 = +this._y.call(null, d3))) - continue; - xz[i4] = x6; - yz[i4] = y5; - if (x6 < x0) - x0 = x6; - if (x6 > x1) - x1 = x6; - if (y5 < y0) - y0 = y5; - if (y5 > y1) - y1 = y5; - } - if (x0 > x1 || y0 > y1) - return this; - this.cover(x0, y0).cover(x1, y1); - for (i4 = 0; i4 < n3; ++i4) { - add7(this, xz[i4], yz[i4], data3[i4]); - } - return this; -} - -// node_modules/d3-quadtree/src/cover.js -function cover_default(x6, y5) { - if (isNaN(x6 = +x6) || isNaN(y5 = +y5)) - return this; - var x0 = this._x0, y0 = this._y0, x1 = this._x1, y1 = this._y1; - if (isNaN(x0)) { - x1 = (x0 = Math.floor(x6)) + 1; - y1 = (y0 = Math.floor(y5)) + 1; - } else { - var z3 = x1 - x0 || 1, node = this._root, parent, i4; - while (x0 > x6 || x6 >= x1 || y0 > y5 || y5 >= y1) { - i4 = (y5 < y0) << 1 | x6 < x0; - parent = new Array(4), parent[i4] = node, node = parent, z3 *= 2; - switch (i4) { - case 0: - x1 = x0 + z3, y1 = y0 + z3; - break; - case 1: - x0 = x1 - z3, y1 = y0 + z3; - break; - case 2: - x1 = x0 + z3, y0 = y1 - z3; - break; - case 3: - x0 = x1 - z3, y0 = y1 - z3; - break; - } - } - if (this._root && this._root.length) - this._root = node; - } - this._x0 = x0; - this._y0 = y0; - this._x1 = x1; - this._y1 = y1; - return this; -} - -// node_modules/d3-quadtree/src/data.js -function data_default() { - var data3 = []; - this.visit(function(node) { - if (!node.length) - do - data3.push(node.data); - while (node = node.next); - }); - return data3; -} - -// node_modules/d3-quadtree/src/extent.js -function extent_default(_8) { - return arguments.length ? this.cover(+_8[0][0], +_8[0][1]).cover(+_8[1][0], +_8[1][1]) : isNaN(this._x0) ? void 0 : [[this._x0, this._y0], [this._x1, this._y1]]; -} - -// node_modules/d3-quadtree/src/quad.js -function quad_default(node, x0, y0, x1, y1) { - this.node = node; - this.x0 = x0; - this.y0 = y0; - this.x1 = x1; - this.y1 = y1; -} - -// node_modules/d3-quadtree/src/find.js -function find_default2(x6, y5, radius) { - var data3, x0 = this._x0, y0 = this._y0, x1, y1, x22, y22, x32 = this._x1, y32 = this._y1, quads = [], node = this._root, q3, i4; - if (node) - quads.push(new quad_default(node, x0, y0, x32, y32)); - if (radius == null) - radius = Infinity; - else { - x0 = x6 - radius, y0 = y5 - radius; - x32 = x6 + radius, y32 = y5 + radius; - radius *= radius; - } - while (q3 = quads.pop()) { - if (!(node = q3.node) || (x1 = q3.x0) > x32 || (y1 = q3.y0) > y32 || (x22 = q3.x1) < x0 || (y22 = q3.y1) < y0) - continue; - if (node.length) { - var xm = (x1 + x22) / 2, ym = (y1 + y22) / 2; - quads.push(new quad_default(node[3], xm, ym, x22, y22), new quad_default(node[2], x1, ym, xm, y22), new quad_default(node[1], xm, y1, x22, ym), new quad_default(node[0], x1, y1, xm, ym)); - if (i4 = (y5 >= ym) << 1 | x6 >= xm) { - q3 = quads[quads.length - 1]; - quads[quads.length - 1] = quads[quads.length - 1 - i4]; - quads[quads.length - 1 - i4] = q3; - } - } else { - var dx = x6 - +this._x.call(null, node.data), dy = y5 - +this._y.call(null, node.data), d22 = dx * dx + dy * dy; - if (d22 < radius) { - var d3 = Math.sqrt(radius = d22); - x0 = x6 - d3, y0 = y5 - d3; - x32 = x6 + d3, y32 = y5 + d3; - data3 = node.data; - } - } - } - return data3; -} - -// node_modules/d3-quadtree/src/remove.js -function remove_default(d3) { - if (isNaN(x6 = +this._x.call(null, d3)) || isNaN(y5 = +this._y.call(null, d3))) - return this; - var parent, node = this._root, retainer, previous, next, x0 = this._x0, y0 = this._y0, x1 = this._x1, y1 = this._y1, x6, y5, xm, ym, right2, bottom, i4, j4; - if (!node) - return this; - if (node.length) - while (true) { - if (right2 = x6 >= (xm = (x0 + x1) / 2)) - x0 = xm; - else - x1 = xm; - if (bottom = y5 >= (ym = (y0 + y1) / 2)) - y0 = ym; - else - y1 = ym; - if (!(parent = node, node = node[i4 = bottom << 1 | right2])) - return this; - if (!node.length) - break; - if (parent[i4 + 1 & 3] || parent[i4 + 2 & 3] || parent[i4 + 3 & 3]) - retainer = parent, j4 = i4; - } - while (node.data !== d3) - if (!(previous = node, node = node.next)) - return this; - if (next = node.next) - delete node.next; - if (previous) - return next ? previous.next = next : delete previous.next, this; - if (!parent) - return this._root = next, this; - next ? parent[i4] = next : delete parent[i4]; - if ((node = parent[0] || parent[1] || parent[2] || parent[3]) && node === (parent[3] || parent[2] || parent[1] || parent[0]) && !node.length) { - if (retainer) - retainer[j4] = node; - else - this._root = node; - } - return this; -} -function removeAll(data3) { - for (var i4 = 0, n3 = data3.length; i4 < n3; ++i4) - this.remove(data3[i4]); - return this; -} - -// node_modules/d3-quadtree/src/root.js -function root_default() { - return this._root; -} - -// node_modules/d3-quadtree/src/size.js -function size_default2() { - var size14 = 0; - this.visit(function(node) { - if (!node.length) - do - ++size14; - while (node = node.next); - }); - return size14; -} - -// node_modules/d3-quadtree/src/visit.js -function visit_default(callback) { - var quads = [], q3, node = this._root, child, x0, y0, x1, y1; - if (node) - quads.push(new quad_default(node, this._x0, this._y0, this._x1, this._y1)); - while (q3 = quads.pop()) { - if (!callback(node = q3.node, x0 = q3.x0, y0 = q3.y0, x1 = q3.x1, y1 = q3.y1) && node.length) { - var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; - if (child = node[3]) - quads.push(new quad_default(child, xm, ym, x1, y1)); - if (child = node[2]) - quads.push(new quad_default(child, x0, ym, xm, y1)); - if (child = node[1]) - quads.push(new quad_default(child, xm, y0, x1, ym)); - if (child = node[0]) - quads.push(new quad_default(child, x0, y0, xm, ym)); - } - } - return this; -} - -// node_modules/d3-quadtree/src/visitAfter.js -function visitAfter_default(callback) { - var quads = [], next = [], q3; - if (this._root) - quads.push(new quad_default(this._root, this._x0, this._y0, this._x1, this._y1)); - while (q3 = quads.pop()) { - var node = q3.node; - if (node.length) { - var child, x0 = q3.x0, y0 = q3.y0, x1 = q3.x1, y1 = q3.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; - if (child = node[0]) - quads.push(new quad_default(child, x0, y0, xm, ym)); - if (child = node[1]) - quads.push(new quad_default(child, xm, y0, x1, ym)); - if (child = node[2]) - quads.push(new quad_default(child, x0, ym, xm, y1)); - if (child = node[3]) - quads.push(new quad_default(child, xm, ym, x1, y1)); - } - next.push(q3); - } - while (q3 = next.pop()) { - callback(q3.node, q3.x0, q3.y0, q3.x1, q3.y1); - } - return this; -} - -// node_modules/d3-quadtree/src/x.js -function defaultX(d3) { - return d3[0]; -} -function x_default(_8) { - return arguments.length ? (this._x = _8, this) : this._x; -} - -// node_modules/d3-quadtree/src/y.js -function defaultY(d3) { - return d3[1]; -} -function y_default(_8) { - return arguments.length ? (this._y = _8, this) : this._y; -} - -// node_modules/d3-quadtree/src/quadtree.js -function quadtree(nodes, x6, y5) { - var tree = new Quadtree(x6 == null ? defaultX : x6, y5 == null ? defaultY : y5, NaN, NaN, NaN, NaN); - return nodes == null ? tree : tree.addAll(nodes); -} -function Quadtree(x6, y5, x0, y0, x1, y1) { - this._x = x6; - this._y = y5; - this._x0 = x0; - this._y0 = y0; - this._x1 = x1; - this._y1 = y1; - this._root = void 0; -} -function leaf_copy(leaf) { - var copy8 = { data: leaf.data }, next = copy8; - while (leaf = leaf.next) - next = next.next = { data: leaf.data }; - return copy8; -} -var treeProto = quadtree.prototype = Quadtree.prototype; -treeProto.copy = function() { - var copy8 = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), node = this._root, nodes, child; - if (!node) - return copy8; - if (!node.length) - return copy8._root = leaf_copy(node), copy8; - nodes = [{ source: node, target: copy8._root = new Array(4) }]; - while (node = nodes.pop()) { - for (var i4 = 0; i4 < 4; ++i4) { - if (child = node.source[i4]) { - if (child.length) - nodes.push({ source: child, target: node.target[i4] = new Array(4) }); - else - node.target[i4] = leaf_copy(child); - } - } - } - return copy8; -}; -treeProto.add = add_default; -treeProto.addAll = addAll; -treeProto.cover = cover_default; -treeProto.data = data_default; -treeProto.extent = extent_default; -treeProto.find = find_default2; -treeProto.remove = remove_default; -treeProto.removeAll = removeAll; -treeProto.root = root_default; -treeProto.size = size_default2; -treeProto.visit = visit_default; -treeProto.visitAfter = visitAfter_default; -treeProto.x = x_default; -treeProto.y = y_default; - -// node_modules/d3-force/src/constant.js -function constant_default3(x6) { - return function() { - return x6; - }; -} - -// node_modules/d3-force/src/jiggle.js -function jiggle_default(random5) { - return (random5() - 0.5) * 1e-6; -} - -// node_modules/d3-force/src/collide.js -function x4(d3) { - return d3.x + d3.vx; -} -function y3(d3) { - return d3.y + d3.vy; -} -function collide_default(radius) { - var nodes, radii, random5, strength = 1, iterations = 1; - if (typeof radius !== "function") - radius = constant_default3(radius == null ? 1 : +radius); - function force() { - var i4, n3 = nodes.length, tree, node, xi, yi, ri, ri2; - for (var k4 = 0; k4 < iterations; ++k4) { - tree = quadtree(nodes, x4, y3).visitAfter(prepare); - for (i4 = 0; i4 < n3; ++i4) { - node = nodes[i4]; - ri = radii[node.index], ri2 = ri * ri; - xi = node.x + node.vx; - yi = node.y + node.vy; - tree.visit(apply); - } - } - function apply(quad, x0, y0, x1, y1) { - var data3 = quad.data, rj = quad.r, r4 = ri + rj; - if (data3) { - if (data3.index > node.index) { - var x6 = xi - data3.x - data3.vx, y5 = yi - data3.y - data3.vy, l4 = x6 * x6 + y5 * y5; - if (l4 < r4 * r4) { - if (x6 === 0) - x6 = jiggle_default(random5), l4 += x6 * x6; - if (y5 === 0) - y5 = jiggle_default(random5), l4 += y5 * y5; - l4 = (r4 - (l4 = Math.sqrt(l4))) / l4 * strength; - node.vx += (x6 *= l4) * (r4 = (rj *= rj) / (ri2 + rj)); - node.vy += (y5 *= l4) * r4; - data3.vx -= x6 * (r4 = 1 - r4); - data3.vy -= y5 * r4; - } - } - return; - } - return x0 > xi + r4 || x1 < xi - r4 || y0 > yi + r4 || y1 < yi - r4; - } - } - function prepare(quad) { - if (quad.data) - return quad.r = radii[quad.data.index]; - for (var i4 = quad.r = 0; i4 < 4; ++i4) { - if (quad[i4] && quad[i4].r > quad.r) { - quad.r = quad[i4].r; - } - } - } - function initialize() { - if (!nodes) - return; - var i4, n3 = nodes.length, node; - radii = new Array(n3); - for (i4 = 0; i4 < n3; ++i4) - node = nodes[i4], radii[node.index] = +radius(node, i4, nodes); - } - force.initialize = function(_nodes, _random) { - nodes = _nodes; - random5 = _random; - initialize(); - }; - force.iterations = function(_8) { - return arguments.length ? (iterations = +_8, force) : iterations; - }; - force.strength = function(_8) { - return arguments.length ? (strength = +_8, force) : strength; - }; - force.radius = function(_8) { - return arguments.length ? (radius = typeof _8 === "function" ? _8 : constant_default3(+_8), initialize(), force) : radius; - }; - return force; -} - -// node_modules/d3-force/src/link.js -function index(d3) { - return d3.index; -} -function find10(nodeById, nodeId) { - var node = nodeById.get(nodeId); - if (!node) - throw new Error("node not found: " + nodeId); - return node; -} -function link_default(links) { - var id = index, strength = defaultStrength, strengths, distance15 = constant_default3(30), distances, nodes, count2, bias, random5, iterations = 1; - if (links == null) - links = []; - function defaultStrength(link) { - return 1 / Math.min(count2[link.source.index], count2[link.target.index]); - } - function force(alpha) { - for (var k4 = 0, n3 = links.length; k4 < iterations; ++k4) { - for (var i4 = 0, link, source, target, x6, y5, l4, b10; i4 < n3; ++i4) { - link = links[i4], source = link.source, target = link.target; - x6 = target.x + target.vx - source.x - source.vx || jiggle_default(random5); - y5 = target.y + target.vy - source.y - source.vy || jiggle_default(random5); - l4 = Math.sqrt(x6 * x6 + y5 * y5); - l4 = (l4 - distances[i4]) / l4 * alpha * strengths[i4]; - x6 *= l4, y5 *= l4; - target.vx -= x6 * (b10 = bias[i4]); - target.vy -= y5 * b10; - source.vx += x6 * (b10 = 1 - b10); - source.vy += y5 * b10; - } - } - } - function initialize() { - if (!nodes) - return; - var i4, n3 = nodes.length, m4 = links.length, nodeById = new Map(nodes.map((d3, i5) => [id(d3, i5, nodes), d3])), link; - for (i4 = 0, count2 = new Array(n3); i4 < m4; ++i4) { - link = links[i4], link.index = i4; - if (typeof link.source !== "object") - link.source = find10(nodeById, link.source); - if (typeof link.target !== "object") - link.target = find10(nodeById, link.target); - count2[link.source.index] = (count2[link.source.index] || 0) + 1; - count2[link.target.index] = (count2[link.target.index] || 0) + 1; - } - for (i4 = 0, bias = new Array(m4); i4 < m4; ++i4) { - link = links[i4], bias[i4] = count2[link.source.index] / (count2[link.source.index] + count2[link.target.index]); - } - strengths = new Array(m4), initializeStrength(); - distances = new Array(m4), initializeDistance(); - } - function initializeStrength() { - if (!nodes) - return; - for (var i4 = 0, n3 = links.length; i4 < n3; ++i4) { - strengths[i4] = +strength(links[i4], i4, links); - } - } - function initializeDistance() { - if (!nodes) - return; - for (var i4 = 0, n3 = links.length; i4 < n3; ++i4) { - distances[i4] = +distance15(links[i4], i4, links); - } - } - force.initialize = function(_nodes, _random) { - nodes = _nodes; - random5 = _random; - initialize(); - }; - force.links = function(_8) { - return arguments.length ? (links = _8, initialize(), force) : links; - }; - force.id = function(_8) { - return arguments.length ? (id = _8, force) : id; - }; - force.iterations = function(_8) { - return arguments.length ? (iterations = +_8, force) : iterations; - }; - force.strength = function(_8) { - return arguments.length ? (strength = typeof _8 === "function" ? _8 : constant_default3(+_8), initializeStrength(), force) : strength; - }; - force.distance = function(_8) { - return arguments.length ? (distance15 = typeof _8 === "function" ? _8 : constant_default3(+_8), initializeDistance(), force) : distance15; - }; - return force; -} - -// node_modules/d3-dispatch/src/dispatch.js -var noop6 = { value: () => { -} }; -function dispatch() { - for (var i4 = 0, n3 = arguments.length, _8 = {}, t4; i4 < n3; ++i4) { - if (!(t4 = arguments[i4] + "") || t4 in _8 || /[\s.]/.test(t4)) - throw new Error("illegal type: " + t4); - _8[t4] = []; - } - return new Dispatch(_8); -} -function Dispatch(_8) { - this._ = _8; -} -function parseTypenames(typenames, types2) { - return typenames.trim().split(/^|\s+/).map(function(t4) { - var name = "", i4 = t4.indexOf("."); - if (i4 >= 0) - name = t4.slice(i4 + 1), t4 = t4.slice(0, i4); - if (t4 && !types2.hasOwnProperty(t4)) - throw new Error("unknown type: " + t4); - return { type: t4, name }; - }); -} -Dispatch.prototype = dispatch.prototype = { - constructor: Dispatch, - on: function(typename, callback) { - var _8 = this._, T5 = parseTypenames(typename + "", _8), t4, i4 = -1, n3 = T5.length; - if (arguments.length < 2) { - while (++i4 < n3) - if ((t4 = (typename = T5[i4]).type) && (t4 = get98(_8[t4], typename.name))) - return t4; - return; - } - if (callback != null && typeof callback !== "function") - throw new Error("invalid callback: " + callback); - while (++i4 < n3) { - if (t4 = (typename = T5[i4]).type) - _8[t4] = set12(_8[t4], typename.name, callback); - else if (callback == null) - for (t4 in _8) - _8[t4] = set12(_8[t4], typename.name, null); - } - return this; - }, - copy: function() { - var copy8 = {}, _8 = this._; - for (var t4 in _8) - copy8[t4] = _8[t4].slice(); - return new Dispatch(copy8); - }, - call: function(type2, that) { - if ((n3 = arguments.length - 2) > 0) - for (var args = new Array(n3), i4 = 0, n3, t4; i4 < n3; ++i4) - args[i4] = arguments[i4 + 2]; - if (!this._.hasOwnProperty(type2)) - throw new Error("unknown type: " + type2); - for (t4 = this._[type2], i4 = 0, n3 = t4.length; i4 < n3; ++i4) - t4[i4].value.apply(that, args); - }, - apply: function(type2, that, args) { - if (!this._.hasOwnProperty(type2)) - throw new Error("unknown type: " + type2); - for (var t4 = this._[type2], i4 = 0, n3 = t4.length; i4 < n3; ++i4) - t4[i4].value.apply(that, args); - } -}; -function get98(type2, name) { - for (var i4 = 0, n3 = type2.length, c5; i4 < n3; ++i4) { - if ((c5 = type2[i4]).name === name) { - return c5.value; - } - } -} -function set12(type2, name, callback) { - for (var i4 = 0, n3 = type2.length; i4 < n3; ++i4) { - if (type2[i4].name === name) { - type2[i4] = noop6, type2 = type2.slice(0, i4).concat(type2.slice(i4 + 1)); - break; - } - } - if (callback != null) - type2.push({ name, value: callback }); - return type2; -} -var dispatch_default = dispatch; - -// node_modules/d3-force/src/lcg.js -var a3 = 1664525; -var c4 = 1013904223; -var m3 = 4294967296; -function lcg_default() { - let s4 = 1; - return () => (s4 = (a3 * s4 + c4) % m3) / m3; -} - -// node_modules/d3-force/src/simulation.js -function x5(d3) { - return d3.x; -} -function y4(d3) { - return d3.y; -} -var initialRadius = 10; -var initialAngle = Math.PI * (3 - Math.sqrt(5)); -function simulation_default(nodes) { - var simulation, alpha = 1, alphaMin = 1e-3, alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), alphaTarget = 0, velocityDecay = 0.6, forces = new Map(), stepper = timer(step), event = dispatch_default("tick", "end"), random5 = lcg_default(); - if (nodes == null) - nodes = []; - function step() { - tick(); - event.call("tick", simulation); - if (alpha < alphaMin) { - stepper.stop(); - event.call("end", simulation); - } - } - function tick(iterations) { - var i4, n3 = nodes.length, node; - if (iterations === void 0) - iterations = 1; - for (var k4 = 0; k4 < iterations; ++k4) { - alpha += (alphaTarget - alpha) * alphaDecay; - forces.forEach(function(force) { - force(alpha); - }); - for (i4 = 0; i4 < n3; ++i4) { - node = nodes[i4]; - if (node.fx == null) - node.x += node.vx *= velocityDecay; - else - node.x = node.fx, node.vx = 0; - if (node.fy == null) - node.y += node.vy *= velocityDecay; - else - node.y = node.fy, node.vy = 0; - } - } - return simulation; - } - function initializeNodes() { - for (var i4 = 0, n3 = nodes.length, node; i4 < n3; ++i4) { - node = nodes[i4], node.index = i4; - if (node.fx != null) - node.x = node.fx; - if (node.fy != null) - node.y = node.fy; - if (isNaN(node.x) || isNaN(node.y)) { - var radius = initialRadius * Math.sqrt(0.5 + i4), angle3 = i4 * initialAngle; - node.x = radius * Math.cos(angle3); - node.y = radius * Math.sin(angle3); - } - if (isNaN(node.vx) || isNaN(node.vy)) { - node.vx = node.vy = 0; - } - } - } - function initializeForce(force) { - if (force.initialize) - force.initialize(nodes, random5); - return force; - } - initializeNodes(); - return simulation = { - tick, - restart: function() { - return stepper.restart(step), simulation; - }, - stop: function() { - return stepper.stop(), simulation; - }, - nodes: function(_8) { - return arguments.length ? (nodes = _8, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes; - }, - alpha: function(_8) { - return arguments.length ? (alpha = +_8, simulation) : alpha; - }, - alphaMin: function(_8) { - return arguments.length ? (alphaMin = +_8, simulation) : alphaMin; - }, - alphaDecay: function(_8) { - return arguments.length ? (alphaDecay = +_8, simulation) : +alphaDecay; - }, - alphaTarget: function(_8) { - return arguments.length ? (alphaTarget = +_8, simulation) : alphaTarget; - }, - velocityDecay: function(_8) { - return arguments.length ? (velocityDecay = 1 - _8, simulation) : 1 - velocityDecay; - }, - randomSource: function(_8) { - return arguments.length ? (random5 = _8, forces.forEach(initializeForce), simulation) : random5; - }, - force: function(name, _8) { - return arguments.length > 1 ? (_8 == null ? forces.delete(name) : forces.set(name, initializeForce(_8)), simulation) : forces.get(name); - }, - find: function(x6, y5, radius) { - var i4 = 0, n3 = nodes.length, dx, dy, d22, node, closest; - if (radius == null) - radius = Infinity; - else - radius *= radius; - for (i4 = 0; i4 < n3; ++i4) { - node = nodes[i4]; - dx = x6 - node.x; - dy = y5 - node.y; - d22 = dx * dx + dy * dy; - if (d22 < radius) - closest = node, radius = d22; - } - return closest; - }, - on: function(name, _8) { - return arguments.length > 1 ? (event.on(name, _8), simulation) : event.on(name); - } - }; -} - -// node_modules/d3-force/src/manyBody.js -function manyBody_default() { - var nodes, node, random5, alpha, strength = constant_default3(-30), strengths, distanceMin2 = 1, distanceMax2 = Infinity, theta2 = 0.81; - function force(_8) { - var i4, n3 = nodes.length, tree = quadtree(nodes, x5, y4).visitAfter(accumulate); - for (alpha = _8, i4 = 0; i4 < n3; ++i4) - node = nodes[i4], tree.visit(apply); - } - function initialize() { - if (!nodes) - return; - var i4, n3 = nodes.length, node2; - strengths = new Array(n3); - for (i4 = 0; i4 < n3; ++i4) - node2 = nodes[i4], strengths[node2.index] = +strength(node2, i4, nodes); - } - function accumulate(quad) { - var strength2 = 0, q3, c5, weight = 0, x6, y5, i4; - if (quad.length) { - for (x6 = y5 = i4 = 0; i4 < 4; ++i4) { - if ((q3 = quad[i4]) && (c5 = Math.abs(q3.value))) { - strength2 += q3.value, weight += c5, x6 += c5 * q3.x, y5 += c5 * q3.y; - } - } - quad.x = x6 / weight; - quad.y = y5 / weight; - } else { - q3 = quad; - q3.x = q3.data.x; - q3.y = q3.data.y; - do - strength2 += strengths[q3.data.index]; - while (q3 = q3.next); - } - quad.value = strength2; - } - function apply(quad, x1, _8, x22) { - if (!quad.value) - return true; - var x6 = quad.x - node.x, y5 = quad.y - node.y, w4 = x22 - x1, l4 = x6 * x6 + y5 * y5; - if (w4 * w4 / theta2 < l4) { - if (l4 < distanceMax2) { - if (x6 === 0) - x6 = jiggle_default(random5), l4 += x6 * x6; - if (y5 === 0) - y5 = jiggle_default(random5), l4 += y5 * y5; - if (l4 < distanceMin2) - l4 = Math.sqrt(distanceMin2 * l4); - node.vx += x6 * quad.value * alpha / l4; - node.vy += y5 * quad.value * alpha / l4; - } - return true; - } else if (quad.length || l4 >= distanceMax2) - return; - if (quad.data !== node || quad.next) { - if (x6 === 0) - x6 = jiggle_default(random5), l4 += x6 * x6; - if (y5 === 0) - y5 = jiggle_default(random5), l4 += y5 * y5; - if (l4 < distanceMin2) - l4 = Math.sqrt(distanceMin2 * l4); - } - do - if (quad.data !== node) { - w4 = strengths[quad.data.index] * alpha / l4; - node.vx += x6 * w4; - node.vy += y5 * w4; - } - while (quad = quad.next); - } - force.initialize = function(_nodes, _random) { - nodes = _nodes; - random5 = _random; - initialize(); - }; - force.strength = function(_8) { - return arguments.length ? (strength = typeof _8 === "function" ? _8 : constant_default3(+_8), initialize(), force) : strength; - }; - force.distanceMin = function(_8) { - return arguments.length ? (distanceMin2 = _8 * _8, force) : Math.sqrt(distanceMin2); - }; - force.distanceMax = function(_8) { - return arguments.length ? (distanceMax2 = _8 * _8, force) : Math.sqrt(distanceMax2); - }; - force.theta = function(_8) { - return arguments.length ? (theta2 = _8 * _8, force) : Math.sqrt(theta2); - }; - return force; -} - -// node_modules/d3-force/src/x.js -function x_default2(x6) { - var strength = constant_default3(0.1), nodes, strengths, xz; - if (typeof x6 !== "function") - x6 = constant_default3(x6 == null ? 0 : +x6); - function force(alpha) { - for (var i4 = 0, n3 = nodes.length, node; i4 < n3; ++i4) { - node = nodes[i4], node.vx += (xz[i4] - node.x) * strengths[i4] * alpha; - } - } - function initialize() { - if (!nodes) - return; - var i4, n3 = nodes.length; - strengths = new Array(n3); - xz = new Array(n3); - for (i4 = 0; i4 < n3; ++i4) { - strengths[i4] = isNaN(xz[i4] = +x6(nodes[i4], i4, nodes)) ? 0 : +strength(nodes[i4], i4, nodes); - } - } - force.initialize = function(_8) { - nodes = _8; - initialize(); - }; - force.strength = function(_8) { - return arguments.length ? (strength = typeof _8 === "function" ? _8 : constant_default3(+_8), initialize(), force) : strength; - }; - force.x = function(_8) { - return arguments.length ? (x6 = typeof _8 === "function" ? _8 : constant_default3(+_8), initialize(), force) : x6; - }; - return force; -} - -// node_modules/d3-force/src/y.js -function y_default2(y5) { - var strength = constant_default3(0.1), nodes, strengths, yz; - if (typeof y5 !== "function") - y5 = constant_default3(y5 == null ? 0 : +y5); - function force(alpha) { - for (var i4 = 0, n3 = nodes.length, node; i4 < n3; ++i4) { - node = nodes[i4], node.vy += (yz[i4] - node.y) * strengths[i4] * alpha; - } - } - function initialize() { - if (!nodes) - return; - var i4, n3 = nodes.length; - strengths = new Array(n3); - yz = new Array(n3); - for (i4 = 0; i4 < n3; ++i4) { - strengths[i4] = isNaN(yz[i4] = +y5(nodes[i4], i4, nodes)) ? 0 : +strength(nodes[i4], i4, nodes); - } - } - force.initialize = function(_8) { - nodes = _8; - initialize(); - }; - force.strength = function(_8) { - return arguments.length ? (strength = typeof _8 === "function" ? _8 : constant_default3(+_8), initialize(), force) : strength; - }; - force.y = function(_8) { - return arguments.length ? (y5 = typeof _8 === "function" ? _8 : constant_default3(+_8), initialize(), force) : y5; - }; - return force; -} - -// node_modules/@antv/layout/es/layout/force/force-in-a-box.js -function forceInABox() { - function constant2(_8) { - return () => _8; - } - let groupBy12 = (d3) => { - return d3.cluster; - }; - let forceNodeSize = constant2(1); - let forceCharge = constant2(-1); - let forceLinkDistance = constant2(100); - let forceLinkStrength = constant2(0.1); - let offset = [0, 0]; - let nodes = []; - let nodesMap = {}; - let links = []; - let centerX = 100; - let centerY = 100; - let foci = { - none: { - x: 0, - y: 0 - } - }; - let templateNodes = []; - let templateForce; - let template2 = "force"; - let enableGrouping = true; - let strength = 0.1; - function force(alpha) { - if (!enableGrouping) { - return force; - } - templateForce.tick(); - getFocisFromTemplate(); - for (let i4 = 0, n3 = nodes.length, node, k4 = alpha * strength; i4 < n3; ++i4) { - node = nodes[i4]; - node.vx += (foci[groupBy12(node)].x - node.x) * k4; - node.vy += (foci[groupBy12(node)].y - node.y) * k4; - } - } - function initialize() { - if (!nodes) - return; - initializeWithForce(); - } - function initializeWithForce() { - if (!nodes || !nodes.length) { - return; - } - if (groupBy12(nodes[0]) === void 0) { - throw Error("Couldnt find the grouping attribute for the nodes. Make sure to set it up with forceInABox.groupBy('clusterAttr') before calling .links()"); - } - const net = getGroupsGraph(); - templateForce = simulation_default(net.nodes).force("x", x_default2(centerX).strength(0.1)).force("y", y_default2(centerY).strength(0.1)).force("collide", collide_default((d3) => d3.r).iterations(4)).force("charge", manyBody_default().strength(forceCharge)).force("links", link_default(net.nodes.length ? net.links : []).distance(forceLinkDistance).strength(forceLinkStrength)); - templateNodes = templateForce.nodes(); - getFocisFromTemplate(); - } - function getGroupsGraph() { - const gnodes = []; - const glinks = []; - const dNodes = {}; - let clustersList = []; - let clustersCounts = {}; - let clustersLinks = []; - clustersCounts = computeClustersNodeCounts(nodes); - clustersLinks = computeClustersLinkCounts(links); - clustersList = Object.keys(clustersCounts); - clustersList.forEach((key, index2) => { - const val = clustersCounts[key]; - gnodes.push({ - id: key, - size: val.count, - r: Math.sqrt(val.sumforceNodeSize / Math.PI) - }); - dNodes[key] = index2; - }); - clustersLinks.forEach((l4) => { - const sourceTerminal = getEdgeTerminal(l4, "source"); - const targetTerminal = getEdgeTerminal(l4, "target"); - const source = dNodes[sourceTerminal]; - const target = dNodes[targetTerminal]; - if (source !== void 0 && target !== void 0) { - glinks.push({ - source, - target, - count: l4.count - }); - } - }); - return { - nodes: gnodes, - links: glinks - }; - } - function computeClustersNodeCounts(nodes2) { - const clustersCounts = {}; - nodes2.forEach((d3) => { - const key = groupBy12(d3); - if (!clustersCounts[key]) { - clustersCounts[key] = { - count: 0, - sumforceNodeSize: 0 - }; - } - }); - nodes2.forEach((d3) => { - const key = groupBy12(d3); - const nodeSize = forceNodeSize(d3); - const tmpCount = clustersCounts[key]; - tmpCount.count = tmpCount.count + 1; - tmpCount.sumforceNodeSize = tmpCount.sumforceNodeSize + Math.PI * (nodeSize * nodeSize) * 1.3; - clustersCounts[key] = tmpCount; - }); - return clustersCounts; - } - function computeClustersLinkCounts(links2) { - const dClusterLinks = {}; - const clusterLinks = []; - links2.forEach((l4) => { - const key = getLinkKey(l4); - let count2 = 0; - if (dClusterLinks[key] !== void 0) { - count2 = dClusterLinks[key]; - } - count2 += 1; - dClusterLinks[key] = count2; - }); - const entries = Object.entries(dClusterLinks); - entries.forEach(([key, count2]) => { - const source = key.split("~")[0]; - const target = key.split("~")[1]; - if (source !== void 0 && target !== void 0) { - clusterLinks.push({ - source, - target, - count: count2 - }); - } - }); - return clusterLinks; - } - function getFocisFromTemplate() { - foci = { - none: { - x: 0, - y: 0 - } - }; - templateNodes.forEach((d3) => { - foci[d3.id] = { - x: d3.x - offset[0], - y: d3.y - offset[1] - }; - }); - return foci; - } - function getLinkKey(l4) { - const source = getEdgeTerminal(l4, "source"); - const target = getEdgeTerminal(l4, "target"); - const sourceID = groupBy12(nodesMap[source]); - const targetID = groupBy12(nodesMap[target]); - return sourceID <= targetID ? `${sourceID}~${targetID}` : `${targetID}~${sourceID}`; - } - function genNodesMap(nodes2) { - nodesMap = {}; - nodes2.forEach((node) => { - nodesMap[node.id] = node; - }); - } - function setTemplate(x6) { - if (!arguments.length) - return template2; - template2 = x6; - initialize(); - return force; - } - function setGroupBy(x6) { - if (!arguments.length) - return groupBy12; - if (typeof x6 === "string") { - groupBy12 = (d3) => { - return d3[x6]; - }; - return force; - } - groupBy12 = x6; - return force; - } - function setEnableGrouping(x6) { - if (!arguments.length) - return enableGrouping; - enableGrouping = x6; - return force; - } - function setStrength(x6) { - if (!arguments.length) - return strength; - strength = x6; - return force; - } - function setCenterX(_8) { - if (arguments.length) { - centerX = _8; - return force; - } - return centerX; - } - function setCenterY(_8) { - if (arguments.length) { - centerY = _8; - return force; - } - return centerY; - } - function setNodes(_8) { - if (arguments.length) { - genNodesMap(_8 || []); - nodes = _8 || []; - return force; - } - return nodes; - } - function setLinks(_8) { - if (arguments.length) { - links = _8 || []; - initialize(); - return force; - } - return links; - } - function setForceNodeSize(_8) { - if (arguments.length) { - if (typeof _8 === "function") { - forceNodeSize = _8; - } else { - forceNodeSize = constant2(+_8); - } - initialize(); - return force; - } - return forceNodeSize; - } - function setForceCharge(_8) { - if (arguments.length) { - if (typeof _8 === "function") { - forceCharge = _8; - } else { - forceCharge = constant2(+_8); - } - initialize(); - return force; - } - return forceCharge; - } - function setForceLinkDistance(_8) { - if (arguments.length) { - if (typeof _8 === "function") { - forceLinkDistance = _8; - } else { - forceLinkDistance = constant2(+_8); - } - initialize(); - return force; - } - return forceLinkDistance; - } - function setForceLinkStrength(_8) { - if (arguments.length) { - if (typeof _8 === "function") { - forceLinkStrength = _8; - } else { - forceLinkStrength = constant2(+_8); - } - initialize(); - return force; - } - return forceLinkStrength; - } - function setOffset(_8) { - if (arguments.length) { - offset = _8; - return force; - } - return offset; - } - force.initialize = (_8) => { - nodes = _8; - initialize(); - }; - force.template = setTemplate; - force.groupBy = setGroupBy; - force.enableGrouping = setEnableGrouping; - force.strength = setStrength; - force.centerX = setCenterX; - force.centerY = setCenterY; - force.nodes = setNodes; - force.links = setLinks; - force.forceNodeSize = setForceNodeSize; - force.nodeSize = force.forceNodeSize; - force.forceCharge = setForceCharge; - force.forceLinkDistance = setForceLinkDistance; - force.forceLinkStrength = setForceLinkStrength; - force.offset = setOffset; - force.getFocis = getFocisFromTemplate; - return force; -} - -// node_modules/@antv/layout/es/layout/constants.js -var LAYOUT_MESSAGE = { - RUN: "LAYOUT_RUN", - END: "LAYOUT_END", - ERROR: "LAYOUT_ERROR", - TICK: "LAYOUT_TICK", - GPURUN: "GPU_LAYOUT_RUN", - GPUEND: "GPU_LAYOUT_END" -}; - -// node_modules/@antv/layout/es/layout/force/force.js -var ForceLayout = class extends Base3 { - constructor(options) { - super(); - this.center = [0, 0]; - this.nodeStrength = null; - this.edgeStrength = null; - this.preventOverlap = false; - this.clusterNodeStrength = null; - this.clusterEdgeStrength = null; - this.clusterEdgeDistance = null; - this.clusterNodeSize = null; - this.clusterFociStrength = null; - this.linkDistance = 50; - this.alphaDecay = 0.028; - this.alphaMin = 1e-3; - this.alpha = 0.3; - this.collideStrength = 1; - this.workerEnabled = false; - this.tick = () => { - }; - this.onLayoutEnd = () => { - }; - this.ticking = void 0; - if (options) { - this.updateCfg(options); - } - } - getDefaultCfg() { - return { - center: [0, 0], - nodeStrength: null, - edgeStrength: null, - preventOverlap: false, - nodeSize: void 0, - nodeSpacing: void 0, - linkDistance: 50, - forceSimulation: null, - alphaDecay: 0.028, - alphaMin: 1e-3, - alpha: 0.3, - collideStrength: 1, - clustering: false, - clusterNodeStrength: -1, - clusterEdgeStrength: 0.1, - clusterEdgeDistance: 100, - clusterFociStrength: 0.8, - clusterNodeSize: 10, - tick() { - }, - onLayoutEnd() { - }, - workerEnabled: false - }; - } - init(data3) { - const self2 = this; - self2.nodes = data3.nodes || []; - const edges = data3.edges || []; - self2.edges = edges.map((edge2) => { - const res = {}; - const expectKeys = ["targetNode", "sourceNode", "startPoint", "endPoint"]; - Object.keys(edge2).forEach((key) => { - if (!(expectKeys.indexOf(key) > -1)) { - res[key] = edge2[key]; - } - }); - return res; - }); - self2.ticking = false; - } - execute(reloadData) { - const self2 = this; - const nodes = self2.nodes; - const edges = self2.edges; - if (self2.ticking) { - return; - } - let simulation = self2.forceSimulation; - const alphaMin = self2.alphaMin; - const alphaDecay = self2.alphaDecay; - const alpha = self2.alpha; - if (!simulation) { - try { - const nodeForce = manyBody_default(); - if (self2.nodeStrength) { - nodeForce.strength(self2.nodeStrength); - } - simulation = simulation_default().nodes(nodes); - if (self2.clustering) { - const clusterForce = forceInABox(); - clusterForce.centerX(self2.center[0]).centerY(self2.center[1]).template("force").strength(self2.clusterFociStrength); - if (edges) { - clusterForce.links(edges); - } - if (nodes) { - clusterForce.nodes(nodes); - } - clusterForce.forceLinkDistance(self2.clusterEdgeDistance).forceLinkStrength(self2.clusterEdgeStrength).forceCharge(self2.clusterNodeStrength).forceNodeSize(self2.clusterNodeSize); - self2.clusterForce = clusterForce; - simulation.force("group", clusterForce); - } - simulation.force("center", center_default(self2.center[0], self2.center[1])).force("charge", nodeForce).alpha(alpha).alphaDecay(alphaDecay).alphaMin(alphaMin); - if (self2.preventOverlap) { - self2.overlapProcess(simulation); - } - if (edges) { - const edgeForce = link_default().id((d3) => d3.id).links(edges); - if (self2.edgeStrength) { - edgeForce.strength(self2.edgeStrength); - } - if (self2.linkDistance) { - edgeForce.distance(self2.linkDistance); - } - self2.edgeForce = edgeForce; - simulation.force("link", edgeForce); - } - if (self2.workerEnabled && !isInWorker()) { - self2.workerEnabled = false; - console.warn("workerEnabled option is only supported when running in web worker."); - } - if (!self2.workerEnabled) { - simulation.on("tick", () => { - self2.tick(); - }).on("end", () => { - self2.ticking = false; - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - }); - self2.ticking = true; - } else { - simulation.stop(); - const totalTicks = getSimulationTicks(simulation); - for (let currentTick = 1; currentTick <= totalTicks; currentTick++) { - simulation.tick(); - postMessage({ - nodes, - currentTick, - totalTicks, - type: LAYOUT_MESSAGE.TICK - }, void 0); - } - self2.ticking = false; - } - self2.forceSimulation = simulation; - self2.ticking = true; - } catch (e4) { - self2.ticking = false; - console.warn(e4); - } - } else { - if (reloadData) { - if (self2.clustering && self2.clusterForce) { - self2.clusterForce.nodes(nodes); - self2.clusterForce.links(edges); - } - simulation.nodes(nodes); - if (edges && self2.edgeForce) - self2.edgeForce.links(edges); - else if (edges && !self2.edgeForce) { - const edgeForce = link_default().id((d3) => d3.id).links(edges); - if (self2.edgeStrength) { - edgeForce.strength(self2.edgeStrength); - } - if (self2.linkDistance) { - edgeForce.distance(self2.linkDistance); - } - self2.edgeForce = edgeForce; - simulation.force("link", edgeForce); - } - } - if (self2.preventOverlap) { - self2.overlapProcess(simulation); - } - simulation.alpha(alpha).restart(); - this.ticking = true; - } - } - overlapProcess(simulation) { - const self2 = this; - const nodeSize = self2.nodeSize; - const nodeSpacing = self2.nodeSpacing; - let nodeSizeFunc; - let nodeSpacingFunc; - const collideStrength = self2.collideStrength; - if (isNumber45(nodeSpacing)) { - nodeSpacingFunc = () => nodeSpacing; - } else if (isFunction41(nodeSpacing)) { - nodeSpacingFunc = nodeSpacing; - } else { - nodeSpacingFunc = () => 0; - } - if (!nodeSize) { - nodeSizeFunc = (d3) => { - if (d3.size) { - if (isArray82(d3.size)) { - const res = d3.size[0] > d3.size[1] ? d3.size[0] : d3.size[1]; - return res / 2 + nodeSpacingFunc(d3); - } - if (isObject26(d3.size)) { - const res = d3.size.width > d3.size.height ? d3.size.width : d3.size.height; - return res / 2 + nodeSpacingFunc(d3); - } - return d3.size / 2 + nodeSpacingFunc(d3); - } - return 10 + nodeSpacingFunc(d3); - }; - } else if (isFunction41(nodeSize)) { - nodeSizeFunc = (d3) => { - const size14 = nodeSize(d3); - return size14 + nodeSpacingFunc(d3); - }; - } else if (isArray82(nodeSize)) { - const larger = nodeSize[0] > nodeSize[1] ? nodeSize[0] : nodeSize[1]; - const radius = larger / 2; - nodeSizeFunc = (d3) => radius + nodeSpacingFunc(d3); - } else if (isNumber45(nodeSize)) { - const radius = nodeSize / 2; - nodeSizeFunc = (d3) => radius + nodeSpacingFunc(d3); - } else { - nodeSizeFunc = () => 10; - } - simulation.force("collisionForce", collide_default(nodeSizeFunc).strength(collideStrength)); - } - updateCfg(cfg) { - const self2 = this; - if (self2.ticking) { - self2.forceSimulation.stop(); - self2.ticking = false; - } - self2.forceSimulation = null; - Object.assign(self2, cfg); - } - destroy() { - const self2 = this; - if (self2.ticking) { - self2.forceSimulation.stop(); - self2.ticking = false; - } - self2.nodes = null; - self2.edges = null; - self2.destroyed = true; - } -}; -function getSimulationTicks(simulation) { - const alphaMin = simulation.alphaMin(); - const alphaTarget = simulation.alphaTarget(); - const alpha = simulation.alpha(); - const totalTicksFloat = Math.log((alphaMin - alphaTarget) / (alpha - alphaTarget)) / Math.log(1 - simulation.alphaDecay()); - const totalTicks = Math.ceil(totalTicksFloat); - return totalTicks; -} -function isInWorker() { - return typeof WorkerGlobalScope !== "undefined" && self instanceof WorkerGlobalScope; -} - -// node_modules/@antv/layout/es/layout/circular.js -function initHierarchy(nodes, edges, nodeMap, directed) { - nodes.forEach((_8, i4) => { - nodes[i4].children = []; - nodes[i4].parent = []; - }); - if (directed) { - edges.forEach((e4) => { - const source = getEdgeTerminal(e4, "source"); - const target = getEdgeTerminal(e4, "target"); - let sourceIdx = 0; - if (source) { - sourceIdx = nodeMap[source]; - } - let targetIdx = 0; - if (target) { - targetIdx = nodeMap[target]; - } - const child = nodes[sourceIdx].children; - const parent = nodes[targetIdx].parent; - child.push(nodes[targetIdx].id); - parent.push(nodes[sourceIdx].id); - }); - } else { - edges.forEach((e4) => { - const source = getEdgeTerminal(e4, "source"); - const target = getEdgeTerminal(e4, "target"); - let sourceIdx = 0; - if (source) { - sourceIdx = nodeMap[source]; - } - let targetIdx = 0; - if (target) { - targetIdx = nodeMap[target]; - } - const sourceChildren = nodes[sourceIdx].children; - const targetChildren = nodes[targetIdx].children; - sourceChildren.push(nodes[targetIdx].id); - targetChildren.push(nodes[sourceIdx].id); - }); - } -} -function connect(a4, b10, edges) { - const m4 = edges.length; - for (let i4 = 0; i4 < m4; i4++) { - const source = getEdgeTerminal(edges[i4], "source"); - const target = getEdgeTerminal(edges[i4], "target"); - if (a4.id === source && b10.id === target || b10.id === source && a4.id === target) { - return true; - } - } - return false; -} -function compareDegree(a4, b10) { - const aDegree = a4.degree; - const bDegree = b10.degree; - if (aDegree < bDegree) { - return -1; - } - if (aDegree > bDegree) { - return 1; - } - return 0; -} -var CircularLayout = class extends Base3 { - constructor(options) { - super(); - this.radius = null; - this.startRadius = null; - this.endRadius = null; - this.startAngle = 0; - this.endAngle = 2 * Math.PI; - this.clockwise = true; - this.divisions = 1; - this.ordering = null; - this.angleRatio = 1; - this.nodes = []; - this.edges = []; - this.nodeMap = {}; - this.degrees = []; - this.width = 300; - this.height = 300; - this.updateCfg(options); - } - getDefaultCfg() { - return { - radius: null, - startRadius: null, - endRadius: null, - startAngle: 0, - endAngle: 2 * Math.PI, - clockwise: true, - divisions: 1, - ordering: null, - angleRatio: 1 - }; - } - execute() { - const self2 = this; - const nodes = self2.nodes; - const edges = self2.edges; - const n3 = nodes.length; - if (n3 === 0) { - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - if (!self2.width && typeof window !== "undefined") { - self2.width = window.innerWidth; - } - if (!self2.height && typeof window !== "undefined") { - self2.height = window.innerHeight; - } - if (!self2.center) { - self2.center = [self2.width / 2, self2.height / 2]; - } - const center2 = self2.center; - if (n3 === 1) { - nodes[0].x = center2[0]; - nodes[0].y = center2[1]; - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - let radius = self2.radius; - let startRadius = self2.startRadius; - let endRadius = self2.endRadius; - const divisions = self2.divisions; - const startAngle = self2.startAngle; - const endAngle = self2.endAngle; - const angleStep = (endAngle - startAngle) / n3; - const nodeMap = {}; - nodes.forEach((node, i4) => { - nodeMap[node.id] = i4; - }); - self2.nodeMap = nodeMap; - const degrees = getDegree3(nodes.length, nodeMap, edges); - self2.degrees = degrees; - if (!radius && !startRadius && !endRadius) { - radius = self2.height > self2.width ? self2.width / 2 : self2.height / 2; - } else if (!startRadius && endRadius) { - startRadius = endRadius; - } else if (startRadius && !endRadius) { - endRadius = startRadius; - } - const angleRatio = self2.angleRatio; - const astep = angleStep * angleRatio; - const ordering = self2.ordering; - let layoutNodes2 = []; - if (ordering === "topology") { - layoutNodes2 = self2.topologyOrdering(); - } else if (ordering === "topology-directed") { - layoutNodes2 = self2.topologyOrdering(true); - } else if (ordering === "degree") { - layoutNodes2 = self2.degreeOrdering(); - } else { - layoutNodes2 = nodes; - } - const clockwise = self2.clockwise; - const divN = Math.ceil(n3 / divisions); - for (let i4 = 0; i4 < n3; ++i4) { - let r4 = radius; - if (!r4 && startRadius !== null && endRadius !== null) { - r4 = startRadius + i4 * (endRadius - startRadius) / (n3 - 1); - } - if (!r4) { - r4 = 10 + i4 * 100 / (n3 - 1); - } - let angle3 = startAngle + i4 % divN * astep + 2 * Math.PI / divisions * Math.floor(i4 / divN); - if (!clockwise) { - angle3 = endAngle - i4 % divN * astep - 2 * Math.PI / divisions * Math.floor(i4 / divN); - } - layoutNodes2[i4].x = center2[0] + Math.cos(angle3) * r4; - layoutNodes2[i4].y = center2[1] + Math.sin(angle3) * r4; - layoutNodes2[i4].weight = degrees[i4]; - } - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return { - nodes: layoutNodes2, - edges: this.edges - }; - } - topologyOrdering(directed = false) { - const self2 = this; - const degrees = self2.degrees; - const edges = self2.edges; - const nodes = self2.nodes; - const cnodes = clone31(nodes); - const nodeMap = self2.nodeMap; - const orderedCNodes = [cnodes[0]]; - const resNodes = [nodes[0]]; - const pickFlags = []; - const n3 = nodes.length; - pickFlags[0] = true; - initHierarchy(cnodes, edges, nodeMap, directed); - let k4 = 0; - cnodes.forEach((cnode, i4) => { - if (i4 !== 0) { - if ((i4 === n3 - 1 || degrees[i4] !== degrees[i4 + 1] || connect(orderedCNodes[k4], cnode, edges)) && !pickFlags[i4]) { - orderedCNodes.push(cnode); - resNodes.push(nodes[nodeMap[cnode.id]]); - pickFlags[i4] = true; - k4++; - } else { - const children = orderedCNodes[k4].children; - let foundChild = false; - for (let j4 = 0; j4 < children.length; j4++) { - const childIdx = nodeMap[children[j4]]; - if (degrees[childIdx] === degrees[i4] && !pickFlags[childIdx]) { - orderedCNodes.push(cnodes[childIdx]); - resNodes.push(nodes[nodeMap[cnodes[childIdx].id]]); - pickFlags[childIdx] = true; - foundChild = true; - break; - } - } - let ii = 0; - while (!foundChild) { - if (!pickFlags[ii]) { - orderedCNodes.push(cnodes[ii]); - resNodes.push(nodes[nodeMap[cnodes[ii].id]]); - pickFlags[ii] = true; - foundChild = true; - } - ii++; - if (ii === n3) { - break; - } - } - } - } - }); - return resNodes; - } - degreeOrdering() { - const self2 = this; - const nodes = self2.nodes; - const orderedNodes = []; - const degrees = self2.degrees; - nodes.forEach((node, i4) => { - node.degree = degrees[i4]; - orderedNodes.push(node); - }); - orderedNodes.sort(compareDegree); - return orderedNodes; - } - getType() { - return "circular"; - } -}; - -// node_modules/@antv/layout/es/layout/dagre/src/graphlib.js -var import_graphlib = __toModule(require_graphlib()); -var graphlib = import_graphlib.default; -if (!graphlib && typeof window !== "undefined") { - graphlib = window.graphlib; -} -if (!Array.prototype.flat) { - Array.prototype.flat = function(count2) { - let c5 = count2 || 1; - if (!isFinite(c5)) - return; - const len5 = this.length; - let ret = []; - if (this.length === 0) - return this; - while (c5--) { - const arr = []; - let flag = false; - if (ret.length === 0) { - flag = true; - for (let i4 = 0; i4 < len5; i4++) { - if (this[i4] instanceof Array) { - ret.push(...this[i4]); - } else { - ret.push(this[i4]); - } - } - } else { - for (let i4 = 0; i4 < ret.length; i4++) { - if (ret[i4] instanceof Array) { - flag = true; - arr.push(...ret[i4]); - } else { - arr.push(ret[i4]); - } - } - ret = arr; - } - if (!flag && c5 === Infinity) { - break; - } - } - return ret; - }; -} -var graphlib_default = graphlib; - -// node_modules/@antv/layout/es/layout/dagre/src/data/list.js -var unlink = (entry) => { - entry._prev._next = entry._next; - entry._next._prev = entry._prev; - delete entry._next; - delete entry._prev; -}; -var filterOutLinks = (k4, v3) => { - if (k4 !== "_next" && k4 !== "_prev") { - return v3; - } -}; -var List2 = class { - constructor() { - const sentinel = {}; - sentinel._next = sentinel._prev = sentinel; - this.isentinel = sentinel; - } - dequeue() { - const sentinel = this.isentinel; - const entry = sentinel._prev; - if (entry !== sentinel) { - unlink(entry); - return entry; - } - } - enqueue() { - const sentinel = this.isentinel; - const entry = sentinel._prev; - if (entry !== sentinel) { - unlink(entry); - return entry; - } - } - toString() { - const strs = []; - const sentinel = this.isentinel; - let curr = sentinel._prev; - while (curr !== sentinel) { - strs.push(JSON.stringify(curr, filterOutLinks)); - curr = curr._prev; - } - return `[${strs.join(", ")}]`; - } -}; -var list_default2 = List2; - -// node_modules/@antv/layout/es/layout/dagre/src/greedy-fas.js -var Graph2 = graphlib_default.Graph; -var DEFAULT_WEIGHT_FN = () => 1; -var greedyFAS = (g4, weightFn) => { - var _a6; - if (g4.nodeCount() <= 1) - return []; - const state2 = buildState(g4, weightFn || DEFAULT_WEIGHT_FN); - const results = doGreedyFAS(state2.graph, state2.buckets, state2.zeroIdx); - return (_a6 = results.map((e4) => g4.outEdges(e4.v, e4.w))) === null || _a6 === void 0 ? void 0 : _a6.flat(); -}; -var doGreedyFAS = (g4, buckets, zeroIdx) => { - let results = []; - const sources = buckets[buckets.length - 1]; - const sinks = buckets[0]; - let entry; - while (g4.nodeCount()) { - while (entry = sinks.dequeue()) { - removeNode(g4, buckets, zeroIdx, entry); - } - while (entry = sources.dequeue()) { - removeNode(g4, buckets, zeroIdx, entry); - } - if (g4.nodeCount()) { - for (let i4 = buckets.length - 2; i4 > 0; --i4) { - entry = buckets[i4].dequeue(); - if (entry) { - results = results.concat(removeNode(g4, buckets, zeroIdx, entry, true)); - break; - } - } - } - } - return results; -}; -var removeNode = (g4, buckets, zeroIdx, entry, collectPredecessors) => { - var _a6, _b; - const results = collectPredecessors ? [] : void 0; - (_a6 = g4.inEdges(entry.v)) === null || _a6 === void 0 ? void 0 : _a6.forEach((edge2) => { - const weight = g4.edge(edge2); - const uEntry = g4.node(edge2.v); - if (collectPredecessors) { - results.push({ v: edge2.v, w: edge2.w }); - } - if (uEntry.out === void 0) - uEntry.out = 0; - uEntry.out -= weight; - assignBucket(buckets, zeroIdx, uEntry); - }); - (_b = g4.outEdges(entry.v)) === null || _b === void 0 ? void 0 : _b.forEach((edge2) => { - const weight = g4.edge(edge2); - const w4 = edge2.w; - const wEntry = g4.node(w4); - if (wEntry.in === void 0) - wEntry.in = 0; - wEntry.in -= weight; - assignBucket(buckets, zeroIdx, wEntry); - }); - g4.removeNode(entry.v); - return results; -}; -var buildState = (g4, weightFn) => { - const fasGraph = new Graph2(); - let maxIn = 0; - let maxOut = 0; - g4.nodes().forEach((v3) => { - fasGraph.setNode(v3, { v: v3, "in": 0, out: 0 }); - }); - g4.edges().forEach((e4) => { - const prevWeight = fasGraph.edge(e4.v, e4.w) || 0; - const weight = weightFn === null || weightFn === void 0 ? void 0 : weightFn(e4); - const edgeWeight = prevWeight + weight; - fasGraph.setEdge(e4.v, e4.w, edgeWeight); - maxOut = Math.max(maxOut, fasGraph.node(e4.v).out += weight); - maxIn = Math.max(maxIn, fasGraph.node(e4.w)["in"] += weight); - }); - const buckets = []; - const rangeMax = maxOut + maxIn + 3; - for (let i4 = 0; i4 < rangeMax; i4++) { - buckets.push(new list_default2()); - } - const zeroIdx = maxIn + 1; - fasGraph.nodes().forEach((v3) => { - assignBucket(buckets, zeroIdx, fasGraph.node(v3)); - }); - return { buckets, zeroIdx, graph: fasGraph }; -}; -var assignBucket = (buckets, zeroIdx, entry) => { - if (!entry.out) { - buckets[0].enqueue(entry); - } else if (!entry["in"]) { - buckets[buckets.length - 1].enqueue(entry); - } else { - buckets[entry.out - entry["in"] + zeroIdx].enqueue(entry); - } -}; -var greedy_fas_default = greedyFAS; - -// node_modules/@antv/layout/es/layout/dagre/src/acyclic.js -var run = (g4) => { - const weightFn = (g5) => { - return (e4) => g5.edge(e4).weight; - }; - const fas = g4.graph().acyclicer === "greedy" ? greedy_fas_default(g4, weightFn(g4)) : dfsFAS(g4); - fas === null || fas === void 0 ? void 0 : fas.forEach((e4) => { - const label17 = g4.edge(e4); - g4.removeEdge(e4); - label17.forwardName = e4.name; - label17.reversed = true; - g4.setEdge(e4.w, e4.v, label17, `rev-${Math.random()}`); - }); -}; -var dfsFAS = (g4) => { - const fas = []; - const stack = {}; - const visited = {}; - const dfs2 = (v3) => { - var _a6; - if (visited.hasOwnProperty(v3)) { - return; - } - visited[v3] = true; - stack[v3] = true; - (_a6 = g4.outEdges(v3)) === null || _a6 === void 0 ? void 0 : _a6.forEach((e4) => { - if (stack.hasOwnProperty(e4.w)) { - fas.push(e4); - } else { - dfs2(e4.w); - } - }); - delete stack[v3]; - }; - g4.nodes().forEach(dfs2); - return fas; -}; -var undo = (g4) => { - g4.edges().forEach((e4) => { - const label17 = g4.edge(e4); - if (label17.reversed) { - g4.removeEdge(e4); - const forwardName = label17.forwardName; - delete label17.reversed; - delete label17.forwardName; - g4.setEdge(e4.w, e4.v, label17, forwardName); - } - }); -}; -var acyclic_default = { run, undo }; - -// node_modules/@antv/layout/es/layout/dagre/src/util.js -var Graph3 = graphlib_default.Graph; -var addDummyNode = (g4, type2, attrs, name) => { - let v3; - do { - v3 = `${name}${Math.random()}`; - } while (g4.hasNode(v3)); - attrs.dummy = type2; - g4.setNode(v3, attrs); - return v3; -}; -var simplify = (g4) => { - const simplified = new Graph3().setGraph(g4.graph()); - g4.nodes().forEach((v3) => { - simplified.setNode(v3, g4.node(v3)); - }); - g4.edges().forEach((e4) => { - const simpleLabel = simplified.edge(e4.v, e4.w) || { weight: 0, minlen: 1 }; - const label17 = g4.edge(e4); - simplified.setEdge(e4.v, e4.w, { - weight: simpleLabel.weight + label17.weight, - minlen: Math.max(simpleLabel.minlen, label17.minlen) - }); - }); - return simplified; -}; -var asNonCompoundGraph = (g4) => { - const simplified = new Graph3({ multigraph: g4.isMultigraph() }).setGraph(g4.graph()); - g4.nodes().forEach((v3) => { - var _a6; - if (!((_a6 = g4.children(v3)) === null || _a6 === void 0 ? void 0 : _a6.length)) { - simplified.setNode(v3, g4.node(v3)); - } - }); - g4.edges().forEach((e4) => simplified.setEdge(e4, g4.edge(e4))); - return simplified; -}; -var zipObject = (keys6, values4) => { - const result = {}; - keys6 === null || keys6 === void 0 ? void 0 : keys6.forEach((key, i4) => { - result[key] = values4[i4]; - }); - return result; -}; -var successorWeights = (g4) => { - const weightMap = g4.nodes().map((v3) => { - var _a6; - const sucs = {}; - (_a6 = g4.outEdges(v3)) === null || _a6 === void 0 ? void 0 : _a6.forEach((e4) => { - sucs[e4.w] = (sucs[e4.w] || 0) + g4.edge(e4).weight; - }); - return sucs; - }); - return zipObject(g4.nodes(), weightMap); -}; -var predecessorWeights = (g4) => { - const weightMap = g4.nodes().map((v3) => { - var _a6; - const preds = {}; - (_a6 = g4.inEdges(v3)) === null || _a6 === void 0 ? void 0 : _a6.forEach((e4) => { - preds[e4.v] = (preds[e4.v] || 0) + g4.edge(e4).weight; - }); - return preds; - }); - return zipObject(g4.nodes(), weightMap); -}; -var intersectRect3 = (rect3, point2) => { - const x6 = rect3.x; - const y5 = rect3.y; - const dx = point2.x - x6; - const dy = point2.y - y5; - let w4 = rect3.width / 2; - let h3 = rect3.height / 2; - if (!dx && !dy) { - return { x: 0, y: 0 }; - } - let sx; - let sy; - if (Math.abs(dy) * w4 > Math.abs(dx) * h3) { - if (dy < 0) { - h3 = -h3; - } - sx = h3 * dx / dy; - sy = h3; - } else { - if (dx < 0) { - w4 = -w4; - } - sx = w4; - sy = w4 * dy / dx; - } - return { x: x6 + sx, y: y5 + sy }; -}; -var buildLayerMatrix = (g4) => { - const layering = []; - const layeringNodes = []; - const rankMax = maxRank(g4) + 1; - for (let i4 = 0; i4 < rankMax; i4++) { - layering.push([]); - layeringNodes.push([]); - } - g4.nodes().forEach((v3) => { - const node = g4.node(v3); - const rank2 = node.rank; - if (rank2 !== void 0 && layering[rank2]) { - layeringNodes[rank2].push(v3); - } - }); - layeringNodes === null || layeringNodes === void 0 ? void 0 : layeringNodes.forEach((layer, rank2) => { - layer === null || layer === void 0 ? void 0 : layer.sort((va, vb) => { - var _a6, _b; - return ((_a6 = g4.node(va)) === null || _a6 === void 0 ? void 0 : _a6.order) - ((_b = g4.node(vb)) === null || _b === void 0 ? void 0 : _b.order); - }); - layer.forEach((v3) => { - layering[rank2].push(v3); - }); - }); - return layering; -}; -var normalizeRanks = (g4) => { - const nodeRanks = g4.nodes().filter((v3) => g4.node(v3).rank !== void 0).map((v3) => g4.node(v3).rank); - const min13 = Math.min(...nodeRanks); - g4.nodes().forEach((v3) => { - const node = g4.node(v3); - if (node.hasOwnProperty("rank")) { - if (!node.rank) - node.rank = 0; - node.rank -= min13; - } - }); -}; -var removeEmptyRanks = (g4) => { - const nodeRanks = g4.nodes().filter((v3) => g4.node(v3).rank !== void 0).map((v3) => g4.node(v3).rank); - const offset = Math.min(...nodeRanks); - const layers = []; - g4.nodes().forEach((v3) => { - var _a6; - const rank2 = (((_a6 = g4.node(v3)) === null || _a6 === void 0 ? void 0 : _a6.rank) || 0) - offset; - if (!layers[rank2]) { - layers[rank2] = []; - } - layers[rank2].push(v3); - }); - let delta = 0; - const nodeRankFactor = g4.graph().nodeRankFactor || 0; - for (let i4 = 0; i4 < layers.length; i4++) { - const vs = layers[i4]; - if (vs === void 0 && i4 % nodeRankFactor !== 0) { - --delta; - } else if (delta) { - vs === null || vs === void 0 ? void 0 : vs.forEach((v3) => { - if (!g4.node(v3).rank) - g4.node(v3).rank = 0; - g4.node(v3).rank += delta; - }); - } - } -}; -var addBorderNode = (g4, prefix2, rank2, order2) => { - const node = { - width: 0, - height: 0 - }; - if (isNumber45(rank2) && isNumber45(order2)) { - node.rank = rank2; - node.order = order2; - } - return addDummyNode(g4, "border", node, prefix2); -}; -var maxRank = (g4) => { - const nodeRanks = g4.nodes().map((v3) => { - const rank2 = g4.node(v3).rank; - if (rank2 !== void 0) { - return rank2; - } - return -Infinity; - }); - return Math.max(...nodeRanks); -}; -var partition2 = (collection, fn) => { - const result = { lhs: [], rhs: [] }; - collection === null || collection === void 0 ? void 0 : collection.forEach((value2) => { - if (fn(value2)) { - result.lhs.push(value2); - } else { - result.rhs.push(value2); - } - }); - return result; -}; -var time = (name, fn) => { - const start = Date.now(); - try { - return fn(); - } finally { - console.log(`${name} time: ${Date.now() - start}ms`); - } -}; -var notime = (name, fn) => { - return fn(); -}; -var minBy2 = (array, func) => { - let min13 = Infinity; - let minObject; - array === null || array === void 0 ? void 0 : array.forEach((item) => { - const value2 = func(item); - if (min13 > value2) { - min13 = value2; - minObject = item; - } - }); - return minObject; -}; -var util_default2 = { - addDummyNode, - simplify, - asNonCompoundGraph, - successorWeights, - predecessorWeights, - intersectRect: intersectRect3, - buildLayerMatrix, - normalizeRanks, - removeEmptyRanks, - addBorderNode, - maxRank, - partition: partition2, - time, - notime, - zipObject, - minBy: minBy2 -}; - -// node_modules/@antv/layout/es/layout/dagre/src/normalize.js -var run2 = (g4) => { - g4.graph().dummyChains = []; - g4.edges().forEach((edge2) => normalizeEdge(g4, edge2)); -}; -var normalizeEdge = (g4, e4) => { - var _a6, _b; - let v3 = e4.v; - let vRank = g4.node(v3).rank; - const w4 = e4.w; - const wRank = g4.node(w4).rank; - const name = e4.name; - const edgeLabel = g4.edge(e4); - const labelRank = edgeLabel.labelRank; - if (wRank === vRank + 1) - return; - g4.removeEdge(e4); - let dummy; - let attrs; - let i4; - for (i4 = 0, ++vRank; vRank < wRank; ++i4, ++vRank) { - edgeLabel.points = []; - attrs = { - edgeLabel, - width: 0, - height: 0, - edgeObj: e4, - rank: vRank - }; - dummy = util_default2.addDummyNode(g4, "edge", attrs, "_d"); - if (vRank === labelRank) { - attrs.width = edgeLabel.width; - attrs.height = edgeLabel.height; - attrs.dummy = "edge-label"; - attrs.labelpos = edgeLabel.labelpos; - } - g4.setEdge(v3, dummy, { weight: edgeLabel.weight }, name); - if (i4 === 0) { - if (!g4.graph().dummyChains) - g4.graph().dummyChains = []; - (_b = (_a6 = g4.graph()) === null || _a6 === void 0 ? void 0 : _a6.dummyChains) === null || _b === void 0 ? void 0 : _b.push(dummy); - } - v3 = dummy; - } - g4.setEdge(v3, w4, { weight: edgeLabel.weight }, name); -}; -var undo2 = (g4) => { - var _a6; - (_a6 = g4.graph().dummyChains) === null || _a6 === void 0 ? void 0 : _a6.forEach((v3) => { - var _a7; - let node = g4.node(v3); - const origLabel = node.edgeLabel; - let w4; - node.edgeObj && g4.setEdge(node.edgeObj, origLabel); - let currentV = v3; - while (node.dummy) { - w4 = (_a7 = g4.successors(currentV)) === null || _a7 === void 0 ? void 0 : _a7[0]; - g4.removeNode(currentV); - origLabel.points.push({ x: node.x, y: node.y }); - if (node.dummy === "edge-label") { - origLabel.x = node.x; - origLabel.y = node.y; - origLabel.width = node.width; - origLabel.height = node.height; - } - currentV = w4; - node = g4.node(currentV); - } - }); -}; -var normalize_default = { run: run2, undo: undo2 }; - -// node_modules/@antv/layout/es/layout/dagre/src/rank/util.js -var longestPath = (g4) => { - var _a6; - const visited = {}; - const dfs2 = (v3) => { - var _a7; - const label17 = g4.node(v3); - if (visited.hasOwnProperty(v3)) { - return label17.rank; - } - visited[v3] = true; - const lengths = (_a7 = g4.outEdges(v3)) === null || _a7 === void 0 ? void 0 : _a7.map((e4) => { - return dfs2(e4.w) - g4.edge(e4).minlen || Infinity; - }); - let rank2 = Math.min(...lengths); - if (rank2 === Number.POSITIVE_INFINITY || rank2 === void 0 || rank2 === null) { - rank2 = 0; - } - label17.rank = rank2; - return rank2; - }; - (_a6 = g4.sources()) === null || _a6 === void 0 ? void 0 : _a6.forEach((source) => dfs2(source)); -}; -var longestPathWithLayer = (g4) => { - var _a6; - const visited = {}; - let minRank = 0; - const dfs2 = (v3) => { - var _a7; - const label17 = g4.node(v3); - if (visited.hasOwnProperty(v3)) { - return label17.rank; - } - visited[v3] = true; - const lengths = (_a7 = g4.outEdges(v3)) === null || _a7 === void 0 ? void 0 : _a7.map((e4) => { - return dfs2(e4.w) - g4.edge(e4).minlen || Infinity; - }); - let rank2 = Math.min(...lengths); - if (rank2 === Number.POSITIVE_INFINITY || rank2 === void 0 || rank2 === null) { - rank2 = 0; - } - label17.rank = rank2; - minRank = Math.min(label17.rank, minRank); - return label17.rank; - }; - (_a6 = g4.sources()) === null || _a6 === void 0 ? void 0 : _a6.forEach((source) => dfs2(source)); - minRank += 1; - const dfsForward = (v3, nextRank) => { - var _a7; - const label17 = g4.node(v3); - const currRank = !isNaN(label17.layer) ? label17.layer : nextRank; - if (label17.rank === void 0 || label17.rank < currRank) { - label17.rank = currRank; - } - (_a7 = g4.outEdges(v3)) === null || _a7 === void 0 ? void 0 : _a7.map((e4) => { - dfsForward(e4.w, currRank + g4.edge(e4).minlen); - }); - }; - g4.nodes().forEach((n3) => { - const label17 = g4.node(n3); - if (!isNaN(label17.layer)) { - dfsForward(n3, label17.layer); - } else { - label17.rank -= minRank; - } - }); -}; -var slack = (g4, e4) => { - return g4.node(e4.w).rank - g4.node(e4.v).rank - g4.edge(e4).minlen; -}; - -// node_modules/@antv/layout/es/layout/dagre/src/rank/feasible-tree.js -var Graph4 = graphlib_default.Graph; -var feasibleTree = (g4) => { - const t4 = new Graph4({ directed: false }); - const start = g4.nodes()[0]; - const size14 = g4.nodeCount(); - t4.setNode(start, {}); - let edge2; - let delta; - while (tightTree(t4, g4) < size14) { - edge2 = findMinSlackEdge(t4, g4); - delta = t4.hasNode(edge2.v) ? slack(g4, edge2) : -slack(g4, edge2); - shiftRanks(t4, g4, delta); - } - return t4; -}; -var tightTree = (t4, g4) => { - const dfs2 = (v3) => { - g4.nodeEdges(v3).forEach((e4) => { - const edgeV = e4.v; - const w4 = v3 === edgeV ? e4.w : edgeV; - if (!t4.hasNode(w4) && !slack(g4, e4)) { - t4.setNode(w4, {}); - t4.setEdge(v3, w4, {}); - dfs2(w4); - } - }); - }; - t4.nodes().forEach(dfs2); - return t4.nodeCount(); -}; -var feasibleTreeWithLayer = (g4) => { - const t4 = new Graph4({ directed: false }); - const start = g4.nodes()[0]; - const size14 = g4.nodeCount(); - t4.setNode(start, {}); - let edge2; - let delta; - while (tightTreeWithLayer(t4, g4) < size14) { - edge2 = findMinSlackEdge(t4, g4); - delta = t4.hasNode(edge2.v) ? slack(g4, edge2) : -slack(g4, edge2); - shiftRanks(t4, g4, delta); - } - return t4; -}; -var tightTreeWithLayer = (t4, g4) => { - const dfs2 = (v3) => { - var _a6; - (_a6 = g4.nodeEdges(v3)) === null || _a6 === void 0 ? void 0 : _a6.forEach((e4) => { - const edgeV = e4.v; - const w4 = v3 === edgeV ? e4.w : edgeV; - if (!t4.hasNode(w4) && (g4.node(w4).layer !== void 0 || !slack(g4, e4))) { - t4.setNode(w4, {}); - t4.setEdge(v3, w4, {}); - dfs2(w4); - } - }); - }; - t4.nodes().forEach(dfs2); - return t4.nodeCount(); -}; -var findMinSlackEdge = (t4, g4) => { - return minBy2(g4.edges(), (e4) => { - if (t4.hasNode(e4.v) !== t4.hasNode(e4.w)) { - return slack(g4, e4); - } - return Infinity; - }); -}; -var shiftRanks = (t4, g4, delta) => { - t4.nodes().forEach((v3) => { - if (!g4.node(v3).rank) - g4.node(v3).rank = 0; - g4.node(v3).rank += delta; - }); -}; - -// node_modules/@antv/layout/es/layout/dagre/src/rank/network-simplex.js -var alg = graphlib_default.alg; -var { preorder, postorder } = alg; -var networkSimplex = (g4) => { - g4 = simplify(g4); - longestPath(g4); - const t4 = feasibleTree(g4); - initLowLimValues(t4); - initCutValues(t4, g4); - let e4; - let f3; - while (e4 = leaveEdge(t4)) { - f3 = enterEdge(t4, g4, e4); - exchangeEdges(t4, g4, e4, f3); - } -}; -var initCutValues = (t4, g4) => { - let vs = postorder(t4, t4.nodes()); - vs = vs === null || vs === void 0 ? void 0 : vs.slice(0, (vs === null || vs === void 0 ? void 0 : vs.length) - 1); - vs === null || vs === void 0 ? void 0 : vs.forEach((v3) => { - assignCutValue(t4, g4, v3); - }); -}; -var assignCutValue = (t4, g4, child) => { - const childLab = t4.node(child); - const parent = childLab.parent; - t4.edge(child, parent).cutvalue = calcCutValue(t4, g4, child); -}; -var calcCutValue = (t4, g4, child) => { - var _a6; - const childLab = t4.node(child); - const parent = childLab.parent; - let childIsTail = true; - let graphEdge = g4.edge(child, parent); - let cutValue = 0; - if (!graphEdge) { - childIsTail = false; - graphEdge = g4.edge(parent, child); - } - cutValue = graphEdge.weight; - (_a6 = g4.nodeEdges(child)) === null || _a6 === void 0 ? void 0 : _a6.forEach((e4) => { - const isOutEdge = e4.v === child; - const other2 = isOutEdge ? e4.w : e4.v; - if (other2 !== parent) { - const pointsToHead = isOutEdge === childIsTail; - const otherWeight = g4.edge(e4).weight; - cutValue += pointsToHead ? otherWeight : -otherWeight; - if (isTreeEdge(t4, child, other2)) { - const otherCutValue = t4.edge(child, other2).cutvalue; - cutValue += pointsToHead ? -otherCutValue : otherCutValue; - } - } - }); - return cutValue; -}; -var initLowLimValues = (tree, root) => { - if (root !== void 0) { - root = tree.nodes()[0]; - } - dfsAssignLowLim(tree, {}, 1, root); -}; -var dfsAssignLowLim = (tree, visited, nextLim, v3, parent) => { - var _a6; - const low = nextLim; - let useNextLim = nextLim; - const label17 = tree.node(v3); - visited[v3] = true; - (_a6 = tree.neighbors(v3)) === null || _a6 === void 0 ? void 0 : _a6.forEach((w4) => { - if (!visited.hasOwnProperty(w4)) { - useNextLim = dfsAssignLowLim(tree, visited, useNextLim, w4, v3); - } - }); - label17.low = low; - label17.lim = useNextLim++; - if (parent) { - label17.parent = parent; - } else { - delete label17.parent; - } - return useNextLim; -}; -var leaveEdge = (tree) => { - return tree.edges().find((e4) => { - return tree.edge(e4).cutvalue < 0; - }); -}; -var enterEdge = (t4, g4, edge2) => { - let v3 = edge2.v; - let w4 = edge2.w; - if (!g4.hasEdge(v3, w4)) { - v3 = edge2.w; - w4 = edge2.v; - } - const vLabel = t4.node(v3); - const wLabel = t4.node(w4); - let tailLabel = vLabel; - let flip = false; - if (vLabel.lim > wLabel.lim) { - tailLabel = wLabel; - flip = true; - } - const candidates = g4.edges().filter((edge3) => { - return flip === isDescendant(t4, t4.node(edge3.v), tailLabel) && flip !== isDescendant(t4, t4.node(edge3.w), tailLabel); - }); - return minBy2(candidates, (edge3) => { - return slack(g4, edge3); - }); -}; -var exchangeEdges = (t4, g4, e4, f3) => { - const v3 = e4.v; - const w4 = e4.w; - t4.removeEdge(v3, w4); - t4.setEdge(f3.v, f3.w, {}); - initLowLimValues(t4); - initCutValues(t4, g4); - updateRanks(t4, g4); -}; -var updateRanks = (t4, g4) => { - const root = t4.nodes().find((v3) => { - return !g4.node(v3).parent; - }); - let vs = preorder(t4, root); - vs = vs === null || vs === void 0 ? void 0 : vs.slice(1); - vs === null || vs === void 0 ? void 0 : vs.forEach((v3) => { - const parent = t4.node(v3).parent; - let edge2 = g4.edge(v3, parent); - let flipped = false; - if (!edge2) { - edge2 = g4.edge(parent, v3); - flipped = true; - } - g4.node(v3).rank = g4.node(parent).rank + (flipped ? edge2.minlen : -edge2.minlen); - }); -}; -var isTreeEdge = (tree, u3, v3) => { - return tree.hasEdge(u3, v3); -}; -var isDescendant = (tree, vLabel, rootLabel) => { - return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim; -}; -networkSimplex.initLowLimValues = initLowLimValues; -networkSimplex.initCutValues = initCutValues; -networkSimplex.calcCutValue = calcCutValue; -networkSimplex.leaveEdge = leaveEdge; -networkSimplex.enterEdge = enterEdge; -networkSimplex.exchangeEdges = exchangeEdges; -var network_simplex_default = networkSimplex; - -// node_modules/@antv/layout/es/layout/dagre/src/rank/index.js -var rank = (g4) => { - switch (g4.graph().ranker) { - case "network-simplex": - networkSimplexRanker(g4); - break; - case "tight-tree": - tightTreeRanker(g4); - break; - case "longest-path": - longestPathRanker(g4); - break; - default: - tightTreeRanker(g4); - } -}; -var longestPathRanker = longestPath; -var tightTreeRanker = (g4) => { - longestPathWithLayer(g4); - feasibleTreeWithLayer(g4); -}; -var networkSimplexRanker = (g4) => { - network_simplex_default(g4); -}; -var rank_default = rank; - -// node_modules/@antv/layout/es/layout/dagre/src/parent-dummy-chains.js -var parentDummyChains = (g4) => { - var _a6; - const postorderNums = postorder2(g4); - (_a6 = g4.graph().dummyChains) === null || _a6 === void 0 ? void 0 : _a6.forEach((v3) => { - var _a7, _b; - let node = g4.node(v3); - const edgeObj = node.edgeObj; - if (!edgeObj) - return; - const pathData = findPath(g4, postorderNums, edgeObj.v, edgeObj.w); - const path = pathData.path; - const lca = pathData.lca; - let pathIdx = 0; - let pathV = path[pathIdx]; - let ascending = true; - while (v3 !== edgeObj.w) { - node = g4.node(v3); - if (ascending) { - while ((pathV = path[pathIdx]) !== lca && g4.node(pathV).maxRank < node.rank) { - pathIdx++; - } - if (pathV === lca) { - ascending = false; - } - } - if (!ascending) { - while (pathIdx < path.length - 1 && ((_a7 = g4.node(pathV = path[pathIdx + 1])) === null || _a7 === void 0 ? void 0 : _a7.minRank) <= node.rank) { - pathIdx++; - } - pathV = path[pathIdx]; - } - g4.setParent(v3, pathV); - v3 = (_b = g4.successors(v3)) === null || _b === void 0 ? void 0 : _b[0]; - } - }); -}; -var findPath = (g4, postorderNums, v3, w4) => { - const vPath = []; - const wPath = []; - const low = Math.min(postorderNums[v3].low, postorderNums[w4].low); - const lim = Math.max(postorderNums[v3].lim, postorderNums[w4].lim); - let parent; - let lca; - parent = v3; - do { - parent = g4.parent(parent); - vPath.push(parent); - } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim)); - lca = parent; - parent = w4; - while ((parent = g4.parent(parent)) !== lca) { - wPath.push(parent); - } - return { lca, path: vPath.concat(wPath.reverse()) }; -}; -var postorder2 = (g4) => { - var _a6; - const result = {}; - let lim = 0; - const dfs2 = (v3) => { - var _a7; - const low = lim; - (_a7 = g4.children(v3)) === null || _a7 === void 0 ? void 0 : _a7.forEach(dfs2); - result[v3] = { low, lim: lim++ }; - }; - (_a6 = g4.children()) === null || _a6 === void 0 ? void 0 : _a6.forEach(dfs2); - return result; -}; -var parent_dummy_chains_default = parentDummyChains; - -// node_modules/@antv/layout/es/layout/dagre/src/nesting-graph.js -var run3 = (g4) => { - var _a6; - const root = util_default2.addDummyNode(g4, "root", {}, "_root"); - const depths = treeDepths(g4); - const height = Math.max(...Object.values(depths)) - 1; - const nodeSep = 2 * height + 1; - g4.graph().nestingRoot = root; - g4.edges().forEach((e4) => { - g4.edge(e4).minlen *= nodeSep; - }); - const weight = sumWeights(g4) + 1; - (_a6 = g4.children()) === null || _a6 === void 0 ? void 0 : _a6.forEach((child) => { - dfs(g4, root, nodeSep, weight, height, depths, child); - }); - g4.graph().nodeRankFactor = nodeSep; -}; -var dfs = (g4, root, nodeSep, weight, height, depths, v3) => { - const children = g4.children(v3); - if (!(children === null || children === void 0 ? void 0 : children.length)) { - if (v3 !== root) { - g4.setEdge(root, v3, { weight: 0, minlen: nodeSep }); - } - return; - } - const top = util_default2.addBorderNode(g4, "_bt"); - const bottom = util_default2.addBorderNode(g4, "_bb"); - const label17 = g4.node(v3); - g4.setParent(top, v3); - label17.borderTop = top; - g4.setParent(bottom, v3); - label17.borderBottom = bottom; - children === null || children === void 0 ? void 0 : children.forEach((child) => { - dfs(g4, root, nodeSep, weight, height, depths, child); - const childNode = g4.node(child); - const childTop = childNode.borderTop ? childNode.borderTop : child; - const childBottom = childNode.borderBottom ? childNode.borderBottom : child; - const thisWeight = childNode.borderTop ? weight : 2 * weight; - const minlen = childTop !== childBottom ? 1 : height - depths[v3] + 1; - g4.setEdge(top, childTop, { - minlen, - weight: thisWeight, - nestingEdge: true - }); - g4.setEdge(childBottom, bottom, { - minlen, - weight: thisWeight, - nestingEdge: true - }); - }); - if (!g4.parent(v3)) { - g4.setEdge(root, top, { weight: 0, minlen: height + depths[v3] }); - } -}; -var treeDepths = (g4) => { - var _a6; - const depths = {}; - const dfs2 = (v3, depth) => { - const children = g4.children(v3); - children === null || children === void 0 ? void 0 : children.forEach((child) => dfs2(child, depth + 1)); - depths[v3] = depth; - }; - (_a6 = g4.children()) === null || _a6 === void 0 ? void 0 : _a6.forEach((v3) => dfs2(v3, 1)); - return depths; -}; -var sumWeights = (g4) => { - let result = 0; - g4.edges().forEach((e4) => { - result += g4.edge(e4).weight; - }); - return result; -}; -var cleanup = (g4) => { - const graphLabel = g4.graph(); - graphLabel.nestingRoot && g4.removeNode(graphLabel.nestingRoot); - delete graphLabel.nestingRoot; - g4.edges().forEach((e4) => { - const edge2 = g4.edge(e4); - if (edge2.nestingEdge) { - g4.removeEdge(e4); - } - }); -}; -var nesting_graph_default = { run: run3, cleanup }; - -// node_modules/@antv/layout/es/layout/dagre/src/add-border-segments.js -var addBorderSegments = (g4) => { - var _a6; - const dfs2 = (v3) => { - const children = g4.children(v3); - const node = g4.node(v3); - if (children === null || children === void 0 ? void 0 : children.length) { - children.forEach((child) => dfs2(child)); - } - if (node.hasOwnProperty("minRank")) { - node.borderLeft = []; - node.borderRight = []; - for (let rank2 = node.minRank, maxRank2 = node.maxRank + 1; rank2 < maxRank2; ++rank2) { - addBorderNode2(g4, "borderLeft", "_bl", v3, node, rank2); - addBorderNode2(g4, "borderRight", "_br", v3, node, rank2); - } - } - }; - (_a6 = g4.children()) === null || _a6 === void 0 ? void 0 : _a6.forEach((child) => dfs2(child)); -}; -var addBorderNode2 = (g4, prop, prefix2, sg, sgNode, rank2) => { - const label17 = { rank: rank2, width: 0, height: 0, borderType: prop }; - const prev = sgNode[prop][rank2 - 1]; - const curr = util_default2.addDummyNode(g4, "border", label17, prefix2); - sgNode[prop][rank2] = curr; - g4.setParent(curr, sg); - if (prev) { - g4.setEdge(prev, curr, { weight: 1 }); - } -}; -var add_border_segments_default = addBorderSegments; - -// node_modules/@antv/layout/es/layout/dagre/src/coordinate-system.js -var adjust3 = (g4) => { - var _a6; - const rankDir = (_a6 = g4.graph().rankdir) === null || _a6 === void 0 ? void 0 : _a6.toLowerCase(); - if (rankDir === "lr" || rankDir === "rl") { - swapWidthHeight(g4); - } -}; -var undo3 = (g4) => { - var _a6; - const rankDir = (_a6 = g4.graph().rankdir) === null || _a6 === void 0 ? void 0 : _a6.toLowerCase(); - if (rankDir === "bt" || rankDir === "rl") { - reverseY(g4); - } - if (rankDir === "lr" || rankDir === "rl") { - swapXY(g4); - swapWidthHeight(g4); - } -}; -var swapWidthHeight = (g4) => { - g4.nodes().forEach((v3) => { - swapWidthHeightOne(g4.node(v3)); - }); - g4.edges().forEach((e4) => { - swapWidthHeightOne(g4.edge(e4)); - }); -}; -var swapWidthHeightOne = (attrs) => { - const w4 = attrs.width; - attrs.width = attrs.height; - attrs.height = w4; -}; -var reverseY = (g4) => { - g4.nodes().forEach((v3) => { - reverseYOne(g4.node(v3)); - }); - g4.edges().forEach((e4) => { - var _a6; - const edge2 = g4.edge(e4); - (_a6 = edge2.points) === null || _a6 === void 0 ? void 0 : _a6.forEach((point2) => reverseYOne(point2)); - if (edge2.hasOwnProperty("y")) { - reverseYOne(edge2); - } - }); -}; -var reverseYOne = (attrs) => { - attrs.y = -attrs.y; -}; -var swapXY = (g4) => { - g4.nodes().forEach((v3) => { - swapXYOne(g4.node(v3)); - }); - g4.edges().forEach((e4) => { - var _a6; - const edge2 = g4.edge(e4); - (_a6 = edge2.points) === null || _a6 === void 0 ? void 0 : _a6.forEach((point2) => swapXYOne(point2)); - if (edge2.hasOwnProperty("x")) { - swapXYOne(edge2); - } - }); -}; -var swapXYOne = (attrs) => { - const x6 = attrs.x; - attrs.x = attrs.y; - attrs.y = x6; -}; -var coordinate_system_default = { adjust: adjust3, undo: undo3 }; - -// node_modules/@antv/layout/es/layout/dagre/src/order/init-order.js -var initOrder = (g4) => { - const visited = {}; - const simpleNodes = g4.nodes().filter((v3) => { - var _a6; - return !((_a6 = g4.children(v3)) === null || _a6 === void 0 ? void 0 : _a6.length); - }); - const nodeRanks = simpleNodes.map((v3) => g4.node(v3).rank); - const maxRank2 = Math.max(...nodeRanks); - const layers = []; - for (let i4 = 0; i4 < maxRank2 + 1; i4++) { - layers.push([]); - } - const dfs2 = (v3) => { - var _a6; - if (visited.hasOwnProperty(v3)) - return; - visited[v3] = true; - const node = g4.node(v3); - if (!isNaN(node.rank)) { - layers[node.rank].push(v3); - } - (_a6 = g4.successors(v3)) === null || _a6 === void 0 ? void 0 : _a6.forEach((child) => dfs2(child)); - }; - const orderedVs = simpleNodes.sort((a4, b10) => g4.node(a4).rank - g4.node(b10).rank); - const beforeSort = orderedVs.filter((n3) => { - return g4.node(n3).fixorder !== void 0; - }); - const fixOrderNodes = beforeSort.sort((a4, b10) => g4.node(a4).fixorder - g4.node(b10).fixorder); - fixOrderNodes === null || fixOrderNodes === void 0 ? void 0 : fixOrderNodes.forEach((n3) => { - if (!isNaN(g4.node(n3).rank)) { - layers[g4.node(n3).rank].push(n3); - } - visited[n3] = true; - }); - orderedVs === null || orderedVs === void 0 ? void 0 : orderedVs.forEach(dfs2); - return layers; -}; -var init_order_default = initOrder; - -// node_modules/@antv/layout/es/layout/dagre/src/order/cross-count.js -var twoLayerCrossCount = (g4, northLayer, southLayer) => { - const southPos = zipObject(southLayer, southLayer.map((v3, i4) => i4)); - const unflat = northLayer.map((v3) => { - var _a6; - const unsort = (_a6 = g4.outEdges(v3)) === null || _a6 === void 0 ? void 0 : _a6.map((e4) => { - return { pos: southPos[e4.w] || 0, weight: g4.edge(e4).weight }; - }); - return unsort === null || unsort === void 0 ? void 0 : unsort.sort((a4, b10) => a4.pos - b10.pos); - }); - const southEntries = unflat.flat().filter((entry) => entry !== void 0); - let firstIndex = 1; - while (firstIndex < southLayer.length) - firstIndex <<= 1; - const treeSize = 2 * firstIndex - 1; - firstIndex -= 1; - const tree = Array(treeSize).fill(0, 0, treeSize); - let cc = 0; - southEntries === null || southEntries === void 0 ? void 0 : southEntries.forEach((entry) => { - let index2 = entry.pos + firstIndex; - tree[index2] += entry.weight; - let weightSum = 0; - while (index2 > 0) { - if (index2 % 2) { - weightSum += tree[index2 + 1]; - } - index2 = index2 - 1 >> 1; - tree[index2] += entry.weight; - } - cc += entry.weight * weightSum; - }); - return cc; -}; -var crossCount = (g4, layering) => { - let cc = 0; - for (let i4 = 1; i4 < (layering === null || layering === void 0 ? void 0 : layering.length); ++i4) { - cc += twoLayerCrossCount(g4, layering[i4 - 1], layering[i4]); - } - return cc; -}; -var cross_count_default = crossCount; - -// node_modules/@antv/layout/es/layout/dagre/src/order/build-layer-graph.js -var Graph5 = graphlib_default.Graph; -var buildLayerGraph = (g4, rank2, relationship) => { - const root = createRootNode(g4); - const result = new Graph5({ compound: true }).setGraph({ root }).setDefaultNodeLabel((v3) => { - return g4.node(v3); - }); - g4.nodes().forEach((v3) => { - const node = g4.node(v3); - const parent = g4.parent(v3); - if (node.rank === rank2 || node.minRank <= rank2 && rank2 <= node.maxRank) { - result.setNode(v3); - result.setParent(v3, parent || root); - g4[relationship](v3).forEach((e4) => { - const u3 = e4.v === v3 ? e4.w : e4.v; - const edge2 = result.edge(u3, v3); - const weight = edge2 !== void 0 ? edge2.weight : 0; - result.setEdge(u3, v3, { weight: g4.edge(e4).weight + weight }); - }); - if (node.hasOwnProperty("minRank")) { - result.setNode(v3, { - borderLeft: node.borderLeft[rank2], - borderRight: node.borderRight[rank2] - }); - } - } - }); - return result; -}; -var createRootNode = (g4) => { - let v3; - while (g4.hasNode(v3 = `_root${Math.random()}`)) - ; - return v3; -}; -var build_layer_graph_default = buildLayerGraph; - -// node_modules/@antv/layout/es/layout/dagre/src/order/add-subgraph-constraints.js -var addSubgraphConstraints = (g4, cg, vs) => { - const prev = {}; - let rootPrev; - vs === null || vs === void 0 ? void 0 : vs.forEach((v3) => { - let child = g4.parent(v3); - let parent; - let prevChild; - while (child) { - parent = g4.parent(child); - if (parent) { - prevChild = prev[parent]; - prev[parent] = child; - } else { - prevChild = rootPrev; - rootPrev = child; - } - if (prevChild && prevChild !== child) { - cg.setEdge(prevChild, child); - return; - } - child = parent; - } - }); -}; -var add_subgraph_constraints_default = addSubgraphConstraints; - -// node_modules/@antv/layout/es/layout/dagre/src/order/barycenter.js -var barycenter = (g4, movable) => { - return movable.map((v3) => { - const inV = g4.inEdges(v3); - if (!(inV === null || inV === void 0 ? void 0 : inV.length)) { - return { v: v3 }; - } - { - const result = { sum: 0, weight: 0 }; - inV === null || inV === void 0 ? void 0 : inV.forEach((e4) => { - const edge2 = g4.edge(e4); - const nodeU = g4.node(e4.v); - result.sum += edge2.weight * nodeU.order; - result.weight += edge2.weight; - }); - return { - v: v3, - barycenter: result.sum / result.weight, - weight: result.weight - }; - } - }); -}; -var barycenter_default = barycenter; - -// node_modules/@antv/layout/es/layout/dagre/src/order/resolve-conflicts.js -var resolveConflicts = (entries, cg) => { - var _a6, _b, _c; - const mappedEntries = {}; - entries === null || entries === void 0 ? void 0 : entries.forEach((entry, i4) => { - const tmp = mappedEntries[entry.v] = { - i: i4, - indegree: 0, - "in": [], - out: [], - vs: [entry.v] - }; - if (entry.barycenter !== void 0) { - tmp.barycenter = entry.barycenter; - tmp.weight = entry.weight; - } - }); - (_a6 = cg.edges()) === null || _a6 === void 0 ? void 0 : _a6.forEach((e4) => { - const entryV = mappedEntries[e4.v]; - const entryW = mappedEntries[e4.w]; - if (entryV !== void 0 && entryW !== void 0) { - entryW.indegree++; - entryV.out.push(mappedEntries[e4.w]); - } - }); - const sourceSet = (_c = (_b = Object.values(mappedEntries)).filter) === null || _c === void 0 ? void 0 : _c.call(_b, (entry) => !entry.indegree); - return doResolveConflicts(sourceSet); -}; -var doResolveConflicts = (sourceSet) => { - var _a6, _b; - const entries = []; - const handleIn = (vEntry) => { - return (uEntry) => { - if (uEntry.merged) - return; - if (uEntry.barycenter === void 0 || vEntry.barycenter === void 0 || uEntry.barycenter >= vEntry.barycenter) { - mergeEntries(vEntry, uEntry); - } - }; - }; - const handleOut = (vEntry) => { - return (wEntry) => { - wEntry["in"].push(vEntry); - if (--wEntry.indegree === 0) { - sourceSet.push(wEntry); - } - }; - }; - while (sourceSet === null || sourceSet === void 0 ? void 0 : sourceSet.length) { - const entry = sourceSet.pop(); - entries.push(entry); - (_a6 = entry["in"].reverse()) === null || _a6 === void 0 ? void 0 : _a6.forEach((e4) => handleIn(entry)(e4)); - (_b = entry.out) === null || _b === void 0 ? void 0 : _b.forEach((e4) => handleOut(entry)(e4)); - } - const filtered = entries.filter((entry) => !entry.merged); - const keys6 = ["vs", "i", "barycenter", "weight"]; - return filtered.map((entry) => { - const picked = {}; - keys6 === null || keys6 === void 0 ? void 0 : keys6.forEach((key) => { - if (entry[key] === void 0) - return; - picked[key] = entry[key]; - }); - return picked; - }); -}; -var mergeEntries = (target, source) => { - var _a6; - let sum = 0; - let weight = 0; - if (target.weight) { - sum += target.barycenter * target.weight; - weight += target.weight; - } - if (source.weight) { - sum += source.barycenter * source.weight; - weight += source.weight; - } - target.vs = (_a6 = source.vs) === null || _a6 === void 0 ? void 0 : _a6.concat(target.vs); - target.barycenter = sum / weight; - target.weight = weight; - target.i = Math.min(source.i, target.i); - source.merged = true; -}; -var resolve_conflicts_default = resolveConflicts; - -// node_modules/@antv/layout/es/layout/dagre/src/order/sort.js -var sort = (entries, biasRight, usePrev) => { - const parts = util_default2.partition(entries, (entry) => { - return entry.hasOwnProperty("fixorder") && !isNaN(entry.fixorder) || entry.hasOwnProperty("barycenter"); - }); - const sortable = parts.lhs; - const unsortable = parts.rhs.sort((a4, b10) => -a4.i - -b10.i); - const vs = []; - let sum = 0; - let weight = 0; - let vsIndex = 0; - sortable === null || sortable === void 0 ? void 0 : sortable.sort(compareWithBias(!!biasRight, !!usePrev)); - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - sortable === null || sortable === void 0 ? void 0 : sortable.forEach((entry) => { - var _a6; - vsIndex += (_a6 = entry.vs) === null || _a6 === void 0 ? void 0 : _a6.length; - vs.push(entry.vs); - sum += entry.barycenter * entry.weight; - weight += entry.weight; - vsIndex = consumeUnsortable(vs, unsortable, vsIndex); - }); - const result = { vs: vs.flat() }; - if (weight) { - result.barycenter = sum / weight; - result.weight = weight; - } - return result; -}; -var consumeUnsortable = (vs, unsortable, index2) => { - let iindex = index2; - let last17; - while (unsortable.length && (last17 = unsortable[unsortable.length - 1]).i <= iindex) { - unsortable.pop(); - vs === null || vs === void 0 ? void 0 : vs.push(last17.vs); - iindex++; - } - return iindex; -}; -var compareWithBias = (bias, usePrev) => { - return (entryV, entryW) => { - if (entryV.fixorder !== void 0 && entryW.fixorder !== void 0) { - return entryV.fixorder - entryW.fixorder; - } - if (entryV.barycenter < entryW.barycenter) { - return -1; - } - if (entryV.barycenter > entryW.barycenter) { - return 1; - } - if (usePrev && entryV.order !== void 0 && entryW.order !== void 0) { - if (entryV.order < entryW.order) { - return -1; - } - if (entryV.order > entryW.order) { - return 1; - } - } - return !bias ? entryV.i - entryW.i : entryW.i - entryV.i; - }; -}; -var sort_default2 = sort; - -// node_modules/@antv/layout/es/layout/dagre/src/order/sort-subgraph.js -var sortSubgraph = (g4, v3, cg, biasRight, usePrev) => { - var _a6, _b, _c, _d; - let movable = g4.children(v3); - const node = g4.node(v3); - const bl = node ? node.borderLeft : void 0; - const br = node ? node.borderRight : void 0; - const subgraphs = {}; - if (bl) { - movable = movable === null || movable === void 0 ? void 0 : movable.filter((w4) => { - return w4 !== bl && w4 !== br; - }); - } - const barycenters = barycenter_default(g4, movable || []); - barycenters === null || barycenters === void 0 ? void 0 : barycenters.forEach((entry) => { - var _a7; - if ((_a7 = g4.children(entry.v)) === null || _a7 === void 0 ? void 0 : _a7.length) { - const subgraphResult = sortSubgraph(g4, entry.v, cg, biasRight); - subgraphs[entry.v] = subgraphResult; - if (subgraphResult.hasOwnProperty("barycenter")) { - mergeBarycenters(entry, subgraphResult); - } - } - }); - const entries = resolve_conflicts_default(barycenters, cg); - expandSubgraphs(entries, subgraphs); - (_a6 = entries.filter((e4) => { - var _a7; - return !!e4.vs || ((_a7 = e4.vs) === null || _a7 === void 0 ? void 0 : _a7.length) > 0; - })) === null || _a6 === void 0 ? void 0 : _a6.forEach((e4) => { - const node2 = g4.node(e4.vs[0]); - e4.fixorder = node2.fixorder; - e4.order = node2.order; - }); - const result = sort_default2(entries, biasRight, usePrev); - if (bl) { - result.vs = [bl, result.vs, br].flat(); - if ((_b = g4.predecessors(bl)) === null || _b === void 0 ? void 0 : _b.length) { - const blPred = g4.node(((_c = g4.predecessors(bl)) === null || _c === void 0 ? void 0 : _c[0]) || {}); - const brPred = g4.node(((_d = g4.predecessors(br)) === null || _d === void 0 ? void 0 : _d[0]) || {}); - if (!result.hasOwnProperty("barycenter")) { - result.barycenter = 0; - result.weight = 0; - } - result.barycenter = (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2); - result.weight += 2; - } - } - return result; -}; -var expandSubgraphs = (entries, subgraphs) => { - entries === null || entries === void 0 ? void 0 : entries.forEach((entry) => { - var _a6; - const vss = (_a6 = entry.vs) === null || _a6 === void 0 ? void 0 : _a6.map((v3) => { - if (subgraphs[v3]) { - return subgraphs[v3].vs; - } - return v3; - }); - entry.vs = vss.flat(); - }); -}; -var mergeBarycenters = (target, other2) => { - if (target.barycenter !== void 0) { - target.barycenter = (target.barycenter * target.weight + other2.barycenter * other2.weight) / (target.weight + other2.weight); - target.weight += other2.weight; - } else { - target.barycenter = other2.barycenter; - target.weight = other2.weight; - } -}; -var sort_subgraph_default = sortSubgraph; - -// node_modules/@antv/layout/es/layout/dagre/src/order/index.js -var Graph6 = graphlib_default.Graph; -var order = (g4) => { - const maxRank2 = util_default2.maxRank(g4); - const range1 = []; - const range2 = []; - for (let i4 = 1; i4 < maxRank2 + 1; i4++) - range1.push(i4); - for (let i4 = maxRank2 - 1; i4 > -1; i4--) - range2.push(i4); - const downLayerGraphs = buildLayerGraphs(g4, range1, "inEdges"); - const upLayerGraphs = buildLayerGraphs(g4, range2, "outEdges"); - let layering = init_order_default(g4); - assignOrder(g4, layering); - let bestCC = Number.POSITIVE_INFINITY; - let best; - for (let i4 = 0, lastBest = 0; lastBest < 4; ++i4, ++lastBest) { - sweepLayerGraphs(i4 % 2 ? downLayerGraphs : upLayerGraphs, i4 % 4 >= 2); - layering = util_default2.buildLayerMatrix(g4); - const cc = cross_count_default(g4, layering); - if (cc < bestCC) { - lastBest = 0; - best = clone31(layering); - bestCC = cc; - } - } - layering = init_order_default(g4); - assignOrder(g4, layering); - for (let i4 = 0, lastBest = 0; lastBest < 4; ++i4, ++lastBest) { - sweepLayerGraphs(i4 % 2 ? downLayerGraphs : upLayerGraphs, i4 % 4 >= 2, true); - layering = util_default2.buildLayerMatrix(g4); - const cc = cross_count_default(g4, layering); - if (cc < bestCC) { - lastBest = 0; - best = clone31(layering); - bestCC = cc; - } - } - assignOrder(g4, best); -}; -var buildLayerGraphs = (g4, ranks, relationship) => { - return ranks.map((rank2) => { - return build_layer_graph_default(g4, rank2, relationship); - }); -}; -var sweepLayerGraphs = (layerGraphs, biasRight, usePrev) => { - const cg = new Graph6(); - layerGraphs === null || layerGraphs === void 0 ? void 0 : layerGraphs.forEach((lg) => { - var _a6; - const root = lg.graph().root; - const sorted = sort_subgraph_default(lg, root, cg, biasRight, usePrev); - for (let i4 = 0; i4 < ((_a6 = sorted.vs) === null || _a6 === void 0 ? void 0 : _a6.length) || 0; i4++) { - lg.node(sorted.vs[i4]).order = i4; - } - add_subgraph_constraints_default(lg, cg, sorted.vs); - }); -}; -var assignOrder = (g4, layering) => { - layering === null || layering === void 0 ? void 0 : layering.forEach((layer) => { - layer === null || layer === void 0 ? void 0 : layer.forEach((v3, i4) => { - g4.node(v3).order = i4; - }); - }); -}; -var order_default = order; - -// node_modules/@antv/layout/es/layout/dagre/src/position/bk.js -var Graph7 = graphlib_default.Graph; -var findType1Conflicts = (g4, layering) => { - const conflicts = {}; - const visitLayer = (prevLayer, layer) => { - let k0 = 0; - let scanPos = 0; - const prevLayerLength = prevLayer.length; - const lastNode = layer === null || layer === void 0 ? void 0 : layer[(layer === null || layer === void 0 ? void 0 : layer.length) - 1]; - layer === null || layer === void 0 ? void 0 : layer.forEach((v3, i4) => { - var _a6; - const w4 = findOtherInnerSegmentNode(g4, v3); - const k1 = w4 ? g4.node(w4).order : prevLayerLength; - if (w4 || v3 === lastNode) { - (_a6 = layer.slice(scanPos, i4 + 1)) === null || _a6 === void 0 ? void 0 : _a6.forEach((scanNode) => { - var _a7; - (_a7 = g4.predecessors(scanNode)) === null || _a7 === void 0 ? void 0 : _a7.forEach((u3) => { - const uLabel = g4.node(u3); - const uPos = uLabel.order; - if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g4.node(scanNode).dummy)) { - addConflict(conflicts, u3, scanNode); - } - }); - }); - scanPos = i4 + 1; - k0 = k1; - } - }); - return layer; - }; - if (layering === null || layering === void 0 ? void 0 : layering.length) { - layering.reduce(visitLayer); - } - return conflicts; -}; -var findType2Conflicts = (g4, layering) => { - const conflicts = {}; - const scan = (south, southPos, southEnd, prevNorthBorder, nextNorthBorder) => { - let v3; - const range = []; - for (let i4 = southPos; i4 < southEnd; i4++) { - range.push(i4); - } - range.forEach((i4) => { - var _a6; - v3 = south[i4]; - if (g4.node(v3).dummy) { - (_a6 = g4.predecessors(v3)) === null || _a6 === void 0 ? void 0 : _a6.forEach((u3) => { - const uNode = g4.node(u3); - if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) { - addConflict(conflicts, u3, v3); - } - }); - } - }); - }; - const visitLayer = (north, south) => { - let prevNorthPos = -1; - let nextNorthPos; - let southPos = 0; - south === null || south === void 0 ? void 0 : south.forEach((v3, southLookahead) => { - if (g4.node(v3).dummy === "border") { - const predecessors = g4.predecessors(v3) || []; - if (predecessors.length) { - nextNorthPos = g4.node(predecessors[0]).order; - scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos); - southPos = southLookahead; - prevNorthPos = nextNorthPos; - } - } - scan(south, southPos, south.length, nextNorthPos, north.length); - }); - return south; - }; - if (layering === null || layering === void 0 ? void 0 : layering.length) { - layering.reduce(visitLayer); - } - return conflicts; -}; -var findOtherInnerSegmentNode = (g4, v3) => { - var _a6; - if (g4.node(v3).dummy) { - return (_a6 = g4.predecessors(v3)) === null || _a6 === void 0 ? void 0 : _a6.find((u3) => g4.node(u3).dummy); - } -}; -var addConflict = (conflicts, v3, w4) => { - let vv = v3; - let ww = w4; - if (vv > ww) { - const tmp = vv; - vv = ww; - ww = tmp; - } - let conflictsV = conflicts[vv]; - if (!conflictsV) { - conflicts[vv] = conflictsV = {}; - } - conflictsV[ww] = true; -}; -var hasConflict = (conflicts, v3, w4) => { - let vv = v3; - let ww = w4; - if (vv > ww) { - const tmp = v3; - vv = ww; - ww = tmp; - } - return conflicts[vv] && conflicts[vv].hasOwnProperty(ww); -}; -var verticalAlignment = (g4, layering, conflicts, neighborFn) => { - const root = {}; - const align = {}; - const pos = {}; - layering === null || layering === void 0 ? void 0 : layering.forEach((layer) => { - layer === null || layer === void 0 ? void 0 : layer.forEach((v3, order2) => { - root[v3] = v3; - align[v3] = v3; - pos[v3] = order2; - }); - }); - layering === null || layering === void 0 ? void 0 : layering.forEach((layer) => { - let prevIdx = -1; - layer === null || layer === void 0 ? void 0 : layer.forEach((v3) => { - let ws = neighborFn(v3); - if (ws.length) { - ws = ws.sort((a4, b10) => pos[a4] - pos[b10]); - const mp = (ws.length - 1) / 2; - for (let i4 = Math.floor(mp), il = Math.ceil(mp); i4 <= il; ++i4) { - const w4 = ws[i4]; - if (align[v3] === v3 && prevIdx < pos[w4] && !hasConflict(conflicts, v3, w4)) { - align[w4] = v3; - align[v3] = root[v3] = root[w4]; - prevIdx = pos[w4]; - } - } - } - }); - }); - return { root, align }; -}; -var horizontalCompaction = (g4, layering, root, align, reverseSep) => { - var _a6; - const xs = {}; - const blockG = buildBlockGraph(g4, layering, root, reverseSep); - const borderType = reverseSep ? "borderLeft" : "borderRight"; - const iterate = (setXsFunc, nextNodesFunc) => { - let stack = blockG.nodes(); - let elem = stack.pop(); - const visited = {}; - while (elem) { - if (visited[elem]) { - setXsFunc(elem); - } else { - visited[elem] = true; - stack.push(elem); - stack = stack.concat(nextNodesFunc(elem)); - } - elem = stack.pop(); - } - }; - const pass1 = (elem) => { - xs[elem] = (blockG.inEdges(elem) || []).reduce((acc, e4) => { - return Math.max(acc, (xs[e4.v] || 0) + blockG.edge(e4)); - }, 0); - }; - const pass2 = (elem) => { - const min13 = (blockG.outEdges(elem) || []).reduce((acc, e4) => { - return Math.min(acc, (xs[e4.w] || 0) - blockG.edge(e4)); - }, Number.POSITIVE_INFINITY); - const node = g4.node(elem); - if (min13 !== Number.POSITIVE_INFINITY && node.borderType !== borderType) { - xs[elem] = Math.max(xs[elem], min13); - } - }; - iterate(pass1, blockG.predecessors.bind(blockG)); - iterate(pass2, blockG.successors.bind(blockG)); - (_a6 = Object.values(align)) === null || _a6 === void 0 ? void 0 : _a6.forEach((v3) => { - xs[v3] = xs[root[v3]]; - }); - return xs; -}; -var buildBlockGraph = (g4, layering, root, reverseSep) => { - const blockGraph = new Graph7(); - const graphLabel = g4.graph(); - const sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep); - layering === null || layering === void 0 ? void 0 : layering.forEach((layer) => { - let u3; - layer === null || layer === void 0 ? void 0 : layer.forEach((v3) => { - const vRoot = root[v3]; - blockGraph.setNode(vRoot); - if (u3) { - const uRoot = root[u3]; - const prevMax = blockGraph.edge(uRoot, vRoot); - blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g4, v3, u3), prevMax || 0)); - } - u3 = v3; - }); - }); - return blockGraph; -}; -var findSmallestWidthAlignment = (g4, xss) => { - return util_default2.minBy(Object.values(xss), (xs) => { - var _a6; - let max15 = Number.NEGATIVE_INFINITY; - let min13 = Number.POSITIVE_INFINITY; - (_a6 = Object.keys(xs)) === null || _a6 === void 0 ? void 0 : _a6.forEach((v3) => { - const x6 = xs[v3]; - const halfWidth = width(g4, v3) / 2; - max15 = Math.max(x6 + halfWidth, max15); - min13 = Math.min(x6 - halfWidth, min13); - }); - return max15 - min13; - }); -}; -function alignCoordinates(xss, alignTo) { - const alignToVals = Object.values(alignTo); - const alignToMin = Math.min(...alignToVals); - const alignToMax = Math.max(...alignToVals); - ["u", "d"].forEach((vert) => { - ["l", "r"].forEach((horiz) => { - const alignment = vert + horiz; - const xs = xss[alignment]; - let delta; - if (xs === alignTo) - return; - const xsVals = Object.values(xs); - delta = horiz === "l" ? alignToMin - Math.min(...xsVals) : alignToMax - Math.max(...xsVals); - if (delta) { - xss[alignment] = {}; - Object.keys(xs).forEach((key) => { - xss[alignment][key] = xs[key] + delta; - }); - } - }); - }); -} -var balance = (xss, align) => { - const result = {}; - Object.keys(xss.ul).forEach((key) => { - if (align) { - result[key] = xss[align.toLowerCase()][key]; - } else { - const values4 = Object.values(xss).map((x6) => x6[key]); - const xs = values4.sort((a4, b10) => a4 - b10); - result[key] = (xs[1] + xs[2]) / 2; - } - }); - return result; -}; -var sep = (nodeSep, edgeSep, reverseSep) => { - return (g4, v3, w4) => { - const vLabel = g4.node(v3); - const wLabel = g4.node(w4); - let sum = 0; - let delta; - sum += vLabel.width / 2; - if (vLabel.hasOwnProperty("labelpos")) { - switch ((vLabel.labelpos || "").toLowerCase()) { - case "l": - delta = -vLabel.width / 2; - break; - case "r": - delta = vLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - sum += (vLabel.dummy ? edgeSep : nodeSep) / 2; - sum += (wLabel.dummy ? edgeSep : nodeSep) / 2; - sum += wLabel.width / 2; - if (wLabel.hasOwnProperty("labelpos")) { - switch ((wLabel.labelpos || "").toLowerCase()) { - case "l": - delta = wLabel.width / 2; - break; - case "r": - delta = -wLabel.width / 2; - break; - } - } - if (delta) { - sum += reverseSep ? delta : -delta; - } - delta = 0; - return sum; - }; -}; -var width = (g4, v3) => { - var _a6; - return ((_a6 = g4.node(v3)) === null || _a6 === void 0 ? void 0 : _a6.width) || 0; -}; - -// node_modules/@antv/layout/es/layout/dagre/src/position/index.js -var positionY = (g4) => { - const layering = util_default2.buildLayerMatrix(g4); - const rankSep = g4.graph().ranksep; - let prevY = 0; - layering === null || layering === void 0 ? void 0 : layering.forEach((layer) => { - const heights = layer.map((v3) => g4.node(v3).height); - const maxHeight = Math.max(...heights); - layer === null || layer === void 0 ? void 0 : layer.forEach((v3) => { - g4.node(v3).y = prevY + maxHeight / 2; - }); - prevY += maxHeight + rankSep; - }); -}; -var positionX = (g4) => { - const layering = util_default2.buildLayerMatrix(g4); - const conflicts = Object.assign(findType1Conflicts(g4, layering), findType2Conflicts(g4, layering)); - const xss = {}; - let adjustedLayering; - ["u", "d"].forEach((vert) => { - adjustedLayering = vert === "u" ? layering : Object.values(layering).reverse(); - ["l", "r"].forEach((horiz) => { - if (horiz === "r") { - adjustedLayering = adjustedLayering.map((inner) => Object.values(inner).reverse()); - } - const neighborFn = (vert === "u" ? g4.predecessors : g4.successors).bind(g4); - const align = verticalAlignment(g4, adjustedLayering, conflicts, neighborFn); - const xs = horizontalCompaction(g4, adjustedLayering, align.root, align.align, horiz === "r"); - if (horiz === "r") { - Object.keys(xs).forEach((xsKey) => xs[xsKey] = -xs[xsKey]); - } - xss[vert + horiz] = xs; - }); - }); - const smallestWidth = findSmallestWidthAlignment(g4, xss); - smallestWidth && alignCoordinates(xss, smallestWidth); - return balance(xss, g4.graph().align); -}; -var position = (g4) => { - var _a6; - g4 = util_default2.asNonCompoundGraph(g4); - positionY(g4); - const xs = positionX(g4); - (_a6 = Object.keys(xs)) === null || _a6 === void 0 ? void 0 : _a6.forEach((key) => { - g4.node(key).x = xs[key]; - }); -}; -var position_default2 = position; - -// node_modules/@antv/layout/es/layout/dagre/src/order/init-data-order.js -var initDataOrder = (g4, nodeOrder) => { - const simpleNodes = g4.nodes().filter((v3) => { - var _a6; - return !((_a6 = g4.children(v3)) === null || _a6 === void 0 ? void 0 : _a6.length); - }); - const ranks = simpleNodes.map((v3) => g4.node(v3).rank); - const maxRank2 = Math.max(...ranks); - const layers = []; - for (let i4 = 0; i4 < maxRank2 + 1; i4++) { - layers.push([]); - } - nodeOrder === null || nodeOrder === void 0 ? void 0 : nodeOrder.forEach((n3) => { - const node = g4.node(n3); - if (!node || node.dummy) - return; - if (!isNaN(node.rank)) { - node.fixorder = layers[node.rank].length; - layers[node.rank].push(n3); - } - }); -}; -var init_data_order_default = initDataOrder; - -// node_modules/@antv/layout/es/layout/dagre/src/layout.js -var Graph8 = graphlib_default.Graph; -var layout2 = (g4, opts) => { - const time2 = opts && opts.debugTiming ? util_default2.time : util_default2.notime; - time2("layout", () => { - if (opts && !opts.keepNodeOrder && opts.prevGraph) { - time2(" inheritOrder", () => { - inheritOrder(g4, opts.prevGraph); - }); - } - const layoutGraph = time2(" buildLayoutGraph", () => { - return buildLayoutGraph(g4); - }); - if (!(opts && opts.edgeLabelSpace === false)) { - time2(" makeSpaceForEdgeLabels", () => { - makeSpaceForEdgeLabels(layoutGraph); - }); - } - try { - time2(" runLayout", () => { - runLayout(layoutGraph, time2, opts); - }); - } catch (e4) { - if (e4.message === "Not possible to find intersection inside of the rectangle") { - console.error("The following error may be caused by improper layer setting, please make sure your manual layer setting does not violate the graph's structure:\n", e4); - return; - } - throw e4; - } - time2(" updateInputGraph", () => { - updateInputGraph(g4, layoutGraph); - }); - }); -}; -var runLayout = (g4, time2, opts) => { - time2(" removeSelfEdges", () => { - removeSelfEdges(g4); - }); - time2(" acyclic", () => { - acyclic_default.run(g4); - }); - time2(" nestingGraph.run", () => { - nesting_graph_default.run(g4); - }); - time2(" rank", () => { - rank_default(util_default2.asNonCompoundGraph(g4)); - }); - time2(" injectEdgeLabelProxies", () => { - injectEdgeLabelProxies(g4); - }); - time2(" removeEmptyRanks", () => { - removeEmptyRanks(g4); - }); - time2(" nestingGraph.cleanup", () => { - nesting_graph_default.cleanup(g4); - }); - time2(" normalizeRanks", () => { - normalizeRanks(g4); - }); - time2(" assignRankMinMax", () => { - assignRankMinMax(g4); - }); - time2(" removeEdgeLabelProxies", () => { - removeEdgeLabelProxies(g4); - }); - time2(" normalize.run", () => { - normalize_default.run(g4); - }); - time2(" parentDummyChains", () => { - parent_dummy_chains_default(g4); - }); - time2(" addBorderSegments", () => { - add_border_segments_default(g4); - }); - if (opts && opts.keepNodeOrder) { - time2(" initDataOrder", () => { - init_data_order_default(g4, opts.nodeOrder); - }); - } - time2(" order", () => { - order_default(g4); - }); - time2(" insertSelfEdges", () => { - insertSelfEdges(g4); - }); - time2(" adjustCoordinateSystem", () => { - coordinate_system_default.adjust(g4); - }); - time2(" position", () => { - position_default2(g4); - }); - time2(" positionSelfEdges", () => { - positionSelfEdges(g4); - }); - time2(" removeBorderNodes", () => { - removeBorderNodes(g4); - }); - time2(" normalize.undo", () => { - normalize_default.undo(g4); - }); - time2(" fixupEdgeLabelCoords", () => { - fixupEdgeLabelCoords(g4); - }); - time2(" undoCoordinateSystem", () => { - coordinate_system_default.undo(g4); - }); - time2(" translateGraph", () => { - translateGraph(g4); - }); - time2(" assignNodeIntersects", () => { - assignNodeIntersects(g4); - }); - time2(" reversePoints", () => { - reversePointsForReversedEdges(g4); - }); - time2(" acyclic.undo", () => { - acyclic_default.undo(g4); - }); -}; -var inheritOrder = (currG, prevG) => { - const prevNodeMap = prevG._nodes || {}; - currG.nodes().forEach((n3) => { - const node = currG.node(n3); - if (prevNodeMap[n3] !== void 0) { - node.fixorder = prevNodeMap[n3]._order; - delete prevNodeMap[n3]._order; - } else { - delete node.fixorder; - } - }); -}; -var updateInputGraph = (inputGraph, layoutGraph) => { - inputGraph.nodes().forEach((v3) => { - var _a6; - const inputLabel = inputGraph.node(v3); - const layoutLabel = layoutGraph.node(v3); - if (inputLabel) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - inputLabel._order = layoutLabel.order; - inputLabel._rank = layoutLabel.rank; - if ((_a6 = layoutGraph.children(v3)) === null || _a6 === void 0 ? void 0 : _a6.length) { - inputLabel.width = layoutLabel.width; - inputLabel.height = layoutLabel.height; - } - } - }); - inputGraph.edges().forEach((e4) => { - const inputLabel = inputGraph.edge(e4); - const layoutLabel = layoutGraph.edge(e4); - inputLabel.points = layoutLabel.points; - if (layoutLabel.hasOwnProperty("x")) { - inputLabel.x = layoutLabel.x; - inputLabel.y = layoutLabel.y; - } - }); - inputGraph.graph().width = layoutGraph.graph().width; - inputGraph.graph().height = layoutGraph.graph().height; -}; -var graphNumAttrs = ["nodesep", "edgesep", "ranksep", "marginx", "marginy"]; -var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: "tb" }; -var graphAttrs = ["acyclicer", "ranker", "rankdir", "align"]; -var nodeNumAttrs = ["width", "height", "layer", "fixorder"]; -var nodeDefaults = { width: 0, height: 0 }; -var edgeNumAttrs = ["minlen", "weight", "width", "height", "labeloffset"]; -var edgeDefaults = { - minlen: 1, - weight: 1, - width: 0, - height: 0, - labeloffset: 10, - labelpos: "r" -}; -var edgeAttrs = ["labelpos"]; -var buildLayoutGraph = (inputGraph) => { - const g4 = new Graph8({ multigraph: true, compound: true }); - const graph = canonicalize(inputGraph.graph()); - const pickedProperties = {}; - graphAttrs === null || graphAttrs === void 0 ? void 0 : graphAttrs.forEach((key) => { - if (graph[key] !== void 0) - pickedProperties[key] = graph[key]; - }); - g4.setGraph(Object.assign({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pickedProperties)); - inputGraph.nodes().forEach((v3) => { - const node = canonicalize(inputGraph.node(v3)); - const defaultAttrs = selectNumberAttrs(node, nodeNumAttrs); - Object.keys(nodeDefaults).forEach((key) => { - if (defaultAttrs[key] === void 0) { - defaultAttrs[key] = nodeDefaults[key]; - } - }); - g4.setNode(v3, defaultAttrs); - g4.setParent(v3, inputGraph.parent(v3)); - }); - inputGraph.edges().forEach((e4) => { - const edge2 = canonicalize(inputGraph.edge(e4)); - const pickedProperties2 = {}; - edgeAttrs === null || edgeAttrs === void 0 ? void 0 : edgeAttrs.forEach((key) => { - if (edge2[key] !== void 0) - pickedProperties2[key] = edge2[key]; - }); - g4.setEdge(e4, Object.assign({}, edgeDefaults, selectNumberAttrs(edge2, edgeNumAttrs), pickedProperties2)); - }); - return g4; -}; -var makeSpaceForEdgeLabels = (g4) => { - const graph = g4.graph(); - if (!graph.ranksep) - graph.ranksep = 0; - graph.ranksep /= 2; - g4.nodes().forEach((n3) => { - const node = g4.node(n3); - if (!isNaN(node.layer)) { - if (!node.layer) - node.layer = 0; - else - node.layer *= 2; - } - }); - g4.edges().forEach((e4) => { - var _a6; - const edge2 = g4.edge(e4); - edge2.minlen *= 2; - if (((_a6 = edge2.labelpos) === null || _a6 === void 0 ? void 0 : _a6.toLowerCase()) !== "c") { - if (graph.rankdir === "TB" || graph.rankdir === "BT") { - edge2.width += edge2.labeloffset; - } else { - edge2.height += edge2.labeloffset; - } - } - }); -}; -var injectEdgeLabelProxies = (g4) => { - g4.edges().forEach((e4) => { - const edge2 = g4.edge(e4); - if (edge2.width && edge2.height) { - const v3 = g4.node(e4.v); - const w4 = g4.node(e4.w); - const label17 = { e: e4, rank: (w4.rank - v3.rank) / 2 + v3.rank }; - util_default2.addDummyNode(g4, "edge-proxy", label17, "_ep"); - } - }); -}; -var assignRankMinMax = (g4) => { - let maxRank2 = 0; - g4.nodes().forEach((v3) => { - const node = g4.node(v3); - if (node.borderTop) { - node.minRank = g4.node(node.borderTop).rank; - node.maxRank = g4.node(node.borderBottom).rank; - maxRank2 = Math.max(maxRank2, node.maxRank || -Infinity); - } - }); - g4.graph().maxRank = maxRank2; -}; -var removeEdgeLabelProxies = (g4) => { - g4.nodes().forEach((v3) => { - const node = g4.node(v3); - if (node.dummy === "edge-proxy") { - g4.edge(node.e).labelRank = node.rank; - g4.removeNode(v3); - } - }); -}; -var translateGraph = (g4) => { - let minX = Number.POSITIVE_INFINITY; - let maxX = 0; - let minY = Number.POSITIVE_INFINITY; - let maxY2 = 0; - const graphLabel = g4.graph(); - const marginX = graphLabel.marginx || 0; - const marginY = graphLabel.marginy || 0; - const getExtremes = (attrs) => { - if (!attrs) - return; - const x6 = attrs.x; - const y5 = attrs.y; - const w4 = attrs.width; - const h3 = attrs.height; - if (!isNaN(x6) && !isNaN(w4)) { - minX = Math.min(minX, x6 - w4 / 2); - maxX = Math.max(maxX, x6 + w4 / 2); - } - if (!isNaN(y5) && !isNaN(h3)) { - minY = Math.min(minY, y5 - h3 / 2); - maxY2 = Math.max(maxY2, y5 + h3 / 2); - } - }; - g4.nodes().forEach((v3) => { - getExtremes(g4.node(v3)); - }); - g4.edges().forEach((e4) => { - const edge2 = g4.edge(e4); - if (edge2.hasOwnProperty("x")) { - getExtremes(edge2); - } - }); - minX -= marginX; - minY -= marginY; - g4.nodes().forEach((v3) => { - const node = g4.node(v3); - node.x -= minX; - node.y -= minY; - }); - g4.edges().forEach((e4) => { - var _a6; - const edge2 = g4.edge(e4); - (_a6 = edge2.points) === null || _a6 === void 0 ? void 0 : _a6.forEach((p4) => { - p4.x -= minX; - p4.y -= minY; - }); - if (edge2.hasOwnProperty("x")) { - edge2.x -= minX; - } - if (edge2.hasOwnProperty("y")) { - edge2.y -= minY; - } - }); - graphLabel.width = maxX - minX + marginX; - graphLabel.height = maxY2 - minY + marginY; -}; -var assignNodeIntersects = (g4) => { - g4.edges().forEach((e4) => { - const edge2 = g4.edge(e4); - const nodeV = g4.node(e4.v); - const nodeW = g4.node(e4.w); - let p1; - let p22; - if (!edge2.points) { - edge2.points = []; - p1 = nodeW; - p22 = nodeV; - } else { - p1 = edge2.points[0]; - p22 = edge2.points[edge2.points.length - 1]; - } - edge2.points.unshift(util_default2.intersectRect(nodeV, p1)); - edge2.points.push(util_default2.intersectRect(nodeW, p22)); - }); -}; -var fixupEdgeLabelCoords = (g4) => { - g4.edges().forEach((e4) => { - const edge2 = g4.edge(e4); - if (edge2.hasOwnProperty("x")) { - if (edge2.labelpos === "l" || edge2.labelpos === "r") { - edge2.width -= edge2.labeloffset; - } - switch (edge2.labelpos) { - case "l": - edge2.x -= edge2.width / 2 + edge2.labeloffset; - break; - case "r": - edge2.x += edge2.width / 2 + edge2.labeloffset; - break; - } - } - }); -}; -var reversePointsForReversedEdges = (g4) => { - g4.edges().forEach((e4) => { - const edge2 = g4.edge(e4); - if (edge2.reversed) { - edge2.points.reverse(); - } - }); -}; -var removeBorderNodes = (g4) => { - g4.nodes().forEach((v3) => { - var _a6, _b, _c; - if ((_a6 = g4.children(v3)) === null || _a6 === void 0 ? void 0 : _a6.length) { - const node = g4.node(v3); - const t4 = g4.node(node.borderTop); - const b10 = g4.node(node.borderBottom); - const l4 = g4.node(node.borderLeft[((_b = node.borderLeft) === null || _b === void 0 ? void 0 : _b.length) - 1]); - const r4 = g4.node(node.borderRight[((_c = node.borderRight) === null || _c === void 0 ? void 0 : _c.length) - 1]); - node.width = Math.abs((r4 === null || r4 === void 0 ? void 0 : r4.x) - (l4 === null || l4 === void 0 ? void 0 : l4.x)) || 10; - node.height = Math.abs((b10 === null || b10 === void 0 ? void 0 : b10.y) - (t4 === null || t4 === void 0 ? void 0 : t4.y)) || 10; - node.x = ((l4 === null || l4 === void 0 ? void 0 : l4.x) || 0) + node.width / 2; - node.y = ((t4 === null || t4 === void 0 ? void 0 : t4.y) || 0) + node.height / 2; - } - }); - g4.nodes().forEach((v3) => { - if (g4.node(v3).dummy === "border") { - g4.removeNode(v3); - } - }); -}; -var removeSelfEdges = (g4) => { - g4.edges().forEach((e4) => { - if (e4.v === e4.w) { - const node = g4.node(e4.v); - if (!node.selfEdges) { - node.selfEdges = []; - } - node.selfEdges.push({ e: e4, label: g4.edge(e4) }); - g4.removeEdge(e4); - } - }); -}; -var insertSelfEdges = (g4) => { - const layers = util_default2.buildLayerMatrix(g4); - layers === null || layers === void 0 ? void 0 : layers.forEach((layer) => { - let orderShift = 0; - layer === null || layer === void 0 ? void 0 : layer.forEach((v3, i4) => { - var _a6; - const node = g4.node(v3); - node.order = i4 + orderShift; - (_a6 = node.selfEdges) === null || _a6 === void 0 ? void 0 : _a6.forEach((selfEdge) => { - util_default2.addDummyNode(g4, "selfedge", { - width: selfEdge.label.width, - height: selfEdge.label.height, - rank: node.rank, - order: i4 + ++orderShift, - e: selfEdge.e, - label: selfEdge.label - }, "_se"); - }); - delete node.selfEdges; - }); - }); -}; -var positionSelfEdges = (g4) => { - g4.nodes().forEach((v3) => { - const node = g4.node(v3); - if (node.dummy === "selfedge") { - const selfNode = g4.node(node.e.v); - const x6 = selfNode.x + selfNode.width / 2; - const y5 = selfNode.y; - const dx = node.x - x6; - const dy = selfNode.height / 2; - g4.setEdge(node.e, node.label); - g4.removeNode(v3); - node.label.points = [ - { x: x6 + 2 * dx / 3, y: y5 - dy }, - { x: x6 + 5 * dx / 6, y: y5 - dy }, - { y: y5, x: x6 + dx }, - { x: x6 + 5 * dx / 6, y: y5 + dy }, - { x: x6 + 2 * dx / 3, y: y5 + dy } - ]; - node.label.x = node.x; - node.label.y = node.y; - } - }); -}; -var selectNumberAttrs = (obj, attrs) => { - const pickedProperties = {}; - attrs === null || attrs === void 0 ? void 0 : attrs.forEach((key) => { - if (obj[key] === void 0) - return; - pickedProperties[key] = +obj[key]; - }); - return pickedProperties; -}; -var canonicalize = (attrs) => { - const newAttrs = {}; - Object.keys(attrs).forEach((k4) => { - const v3 = attrs[k4]; - newAttrs[k4.toLowerCase()] = v3; - }); - return newAttrs; -}; -var layout_default2 = layout2; - -// node_modules/@antv/layout/es/layout/dagre/index.js -var dagre_default = { - graphlib: graphlib_default, - layout: layout_default2, - util: { - time, - notime - } -}; - -// node_modules/@antv/layout/es/layout/dagre.js -var DagreLayout = class extends Base3 { - constructor(options) { - super(); - this.rankdir = "TB"; - this.nodesep = 50; - this.ranksep = 50; - this.controlPoints = false; - this.sortByCombo = false; - this.edgeLabelSpace = true; - this.nodes = []; - this.edges = []; - this.onLayoutEnd = () => { - }; - this.layoutNode = (nodeId) => { - const self2 = this; - const { nodes } = self2; - const node = nodes.find((node2) => node2.id === nodeId); - if (node) { - const layout6 = node.layout !== false; - return layout6; - } - return true; - }; - this.updateCfg(options); - } - getDefaultCfg() { - return { - rankdir: "TB", - align: void 0, - nodeSize: void 0, - nodesepFunc: void 0, - ranksepFunc: void 0, - nodesep: 50, - ranksep: 50, - controlPoints: false - }; - } - execute() { - const self2 = this; - const { nodes, nodeSize, rankdir, combos, begin } = self2; - if (!nodes) - return; - const edges = self2.edges || []; - const g4 = new dagre_default.graphlib.Graph({ - multigraph: true, - compound: true - }); - let nodeSizeFunc; - if (!nodeSize) { - nodeSizeFunc = (d3) => { - if (d3.size) { - if (isArray82(d3.size)) { - return d3.size; - } - if (isObject26(d3.size)) { - return [d3.size.width || 40, d3.size.height || 40]; - } - return [d3.size, d3.size]; - } - return [40, 40]; - }; - } else if (isArray82(nodeSize)) { - nodeSizeFunc = () => nodeSize; - } else { - nodeSizeFunc = () => [nodeSize, nodeSize]; - } - let horisep = getFunc(self2.nodesepFunc, self2.nodesep, 50); - let vertisep = getFunc(self2.ranksepFunc, self2.ranksep, 50); - if (rankdir === "LR" || rankdir === "RL") { - horisep = getFunc(self2.ranksepFunc, self2.ranksep, 50); - vertisep = getFunc(self2.nodesepFunc, self2.nodesep, 50); - } - g4.setDefaultEdgeLabel(() => ({})); - g4.setGraph(self2); - const comboMap = {}; - nodes.filter((node) => node.layout !== false).forEach((node) => { - const size14 = nodeSizeFunc(node); - const verti = vertisep(node); - const hori = horisep(node); - const width2 = size14[0] + 2 * hori; - const height = size14[1] + 2 * verti; - const layer = node.layer; - if (isNumber45(layer)) { - g4.setNode(node.id, { width: width2, height, layer }); - } else { - g4.setNode(node.id, { width: width2, height }); - } - if (this.sortByCombo && node.comboId) { - if (!comboMap[node.comboId]) { - comboMap[node.comboId] = true; - g4.setNode(node.comboId, {}); - } - g4.setParent(node.id, node.comboId); - } - }); - if (this.sortByCombo && combos) { - combos.forEach((combo) => { - if (!combo.parentId) - return; - if (!comboMap[combo.parentId]) { - comboMap[combo.parentId] = true; - g4.setNode(combo.parentId, {}); - } - g4.setParent(combo.id, combo.parentId); - }); - } - edges.forEach((edge2) => { - const source = getEdgeTerminal(edge2, "source"); - const target = getEdgeTerminal(edge2, "target"); - if (this.layoutNode(source) && this.layoutNode(target)) { - g4.setEdge(source, target, { - weight: edge2.weight || 1 - }); - } - }); - let prevGraph = void 0; - if (self2.preset) { - prevGraph = new dagre_default.graphlib.Graph({ - multigraph: true, - compound: true - }); - self2.preset.nodes.forEach((node) => { - prevGraph === null || prevGraph === void 0 ? void 0 : prevGraph.setNode(node.id, node); - }); - } - dagre_default.layout(g4, { - prevGraph, - edgeLabelSpace: self2.edgeLabelSpace, - keepNodeOrder: Boolean(!!self2.nodeOrder), - nodeOrder: self2.nodeOrder - }); - const dBegin = [0, 0]; - if (begin) { - let minX = Infinity; - let minY = Infinity; - g4.nodes().forEach((node) => { - const coord2 = g4.node(node); - if (minX > coord2.x) - minX = coord2.x; - if (minY > coord2.y) - minY = coord2.y; - }); - g4.edges().forEach((edge2) => { - const coord2 = g4.edge(edge2); - coord2.points.forEach((point2) => { - if (minX > point2.x) - minX = point2.x; - if (minY > point2.y) - minY = point2.y; - }); - }); - dBegin[0] = begin[0] - minX; - dBegin[1] = begin[1] - minY; - } - g4.nodes().forEach((node) => { - const coord2 = g4.node(node); - const i4 = nodes.findIndex((it) => it.id === node); - if (!nodes[i4]) - return; - nodes[i4].x = coord2.x + dBegin[0]; - nodes[i4].y = coord2.y + dBegin[1]; - nodes[i4]._order = coord2._order; - }); - g4.edges().forEach((edge2) => { - const coord2 = g4.edge(edge2); - const i4 = edges.findIndex((it) => { - const source = getEdgeTerminal(it, "source"); - const target = getEdgeTerminal(it, "target"); - return source === edge2.v && target === edge2.w; - }); - if (self2.edgeLabelSpace && self2.controlPoints && edges[i4].type !== "loop") { - edges[i4].controlPoints = coord2.points.slice(1, coord2.points.length - 1); - edges[i4].controlPoints.forEach((point2) => { - point2.x += dBegin[0]; - point2.y += dBegin[1]; - }); - } - }); - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return { - nodes, - edges - }; - } - getType() { - return "dagre"; - } -}; -function getFunc(func, value2, defaultValue) { - let resultFunc; - if (func) { - resultFunc = func; - } else if (isNumber45(value2)) { - resultFunc = () => value2; - } else { - resultFunc = () => defaultValue; - } - return resultFunc; -} - -// node_modules/is-any-array/src/index.js -var toString5 = Object.prototype.toString; -function isAnyArray(object) { - return toString5.call(object).endsWith("Array]"); -} - -// node_modules/ml-array-max/lib-es6/index.js -function max12(input) { - var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - if (!isAnyArray(input)) { - throw new TypeError("input must be an array"); - } - if (input.length === 0) { - throw new TypeError("input must not be empty"); - } - var _options$fromIndex = options.fromIndex, fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex, _options$toIndex = options.toIndex, toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex; - if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) { - throw new Error("fromIndex must be a positive integer smaller than length"); - } - if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) { - throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length"); - } - var maxValue = input[fromIndex]; - for (var i4 = fromIndex + 1; i4 < toIndex; i4++) { - if (input[i4] > maxValue) - maxValue = input[i4]; - } - return maxValue; -} -var lib_es6_default = max12; - -// node_modules/ml-array-min/lib-es6/index.js -function min11(input) { - var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - if (!isAnyArray(input)) { - throw new TypeError("input must be an array"); - } - if (input.length === 0) { - throw new TypeError("input must not be empty"); - } - var _options$fromIndex = options.fromIndex, fromIndex = _options$fromIndex === void 0 ? 0 : _options$fromIndex, _options$toIndex = options.toIndex, toIndex = _options$toIndex === void 0 ? input.length : _options$toIndex; - if (fromIndex < 0 || fromIndex >= input.length || !Number.isInteger(fromIndex)) { - throw new Error("fromIndex must be a positive integer smaller than length"); - } - if (toIndex <= fromIndex || toIndex > input.length || !Number.isInteger(toIndex)) { - throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length"); - } - var minValue = input[fromIndex]; - for (var i4 = fromIndex + 1; i4 < toIndex; i4++) { - if (input[i4] < minValue) - minValue = input[i4]; - } - return minValue; -} -var lib_es6_default2 = min11; - -// node_modules/ml-array-rescale/lib-es6/index.js -function rescale(input) { - var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; - if (!isAnyArray(input)) { - throw new TypeError("input must be an array"); - } else if (input.length === 0) { - throw new TypeError("input must not be empty"); - } - var output; - if (options.output !== void 0) { - if (!isAnyArray(options.output)) { - throw new TypeError("output option must be an array if specified"); - } - output = options.output; - } else { - output = new Array(input.length); - } - var currentMin = lib_es6_default2(input); - var currentMax = lib_es6_default(input); - if (currentMin === currentMax) { - throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array"); - } - var _options$min = options.min, minValue = _options$min === void 0 ? options.autoMinMax ? currentMin : 0 : _options$min, _options$max = options.max, maxValue = _options$max === void 0 ? options.autoMinMax ? currentMax : 1 : _options$max; - if (minValue >= maxValue) { - throw new RangeError("min option must be smaller than max option"); - } - var factor = (maxValue - minValue) / (currentMax - currentMin); - for (var i4 = 0; i4 < input.length; i4++) { - output[i4] = (input[i4] - currentMin) * factor + minValue; - } - return output; -} - -// node_modules/ml-matrix/src/inspect.js -var indent = " ".repeat(2); -var indentData = " ".repeat(4); -function inspectMatrix() { - return inspectMatrixWithOptions(this); -} -function inspectMatrixWithOptions(matrix, options = {}) { - const { maxRows = 15, maxColumns = 10, maxNumSize = 8 } = options; - return `${matrix.constructor.name} { -${indent}[ -${indentData}${inspectData(matrix, maxRows, maxColumns, maxNumSize)} -${indent}] -${indent}rows: ${matrix.rows} -${indent}columns: ${matrix.columns} -}`; -} -function inspectData(matrix, maxRows, maxColumns, maxNumSize) { - const { rows, columns } = matrix; - const maxI = Math.min(rows, maxRows); - const maxJ = Math.min(columns, maxColumns); - const result = []; - for (let i4 = 0; i4 < maxI; i4++) { - let line2 = []; - for (let j4 = 0; j4 < maxJ; j4++) { - line2.push(formatNumber(matrix.get(i4, j4), maxNumSize)); - } - result.push(`${line2.join(" ")}`); - } - if (maxJ !== columns) { - result[result.length - 1] += ` ... ${columns - maxColumns} more columns`; - } - if (maxI !== rows) { - result.push(`... ${rows - maxRows} more rows`); - } - return result.join(` -${indentData}`); -} -function formatNumber(num, maxNumSize) { - const numStr = String(num); - if (numStr.length <= maxNumSize) { - return numStr.padEnd(maxNumSize, " "); - } - const precise = num.toPrecision(maxNumSize - 2); - if (precise.length <= maxNumSize) { - return precise; - } - const exponential2 = num.toExponential(maxNumSize - 2); - const eIndex = exponential2.indexOf("e"); - const e4 = exponential2.slice(eIndex); - return exponential2.slice(0, maxNumSize - e4.length) + e4; -} - -// node_modules/ml-matrix/src/mathOperations.js -function installMathOperations(AbstractMatrix2, Matrix3) { - AbstractMatrix2.prototype.add = function add8(value2) { - if (typeof value2 === "number") - return this.addS(value2); - return this.addM(value2); - }; - AbstractMatrix2.prototype.addS = function addS(value2) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) + value2); - } - } - return this; - }; - AbstractMatrix2.prototype.addM = function addM(matrix) { - matrix = Matrix3.checkMatrix(matrix); - if (this.rows !== matrix.rows || this.columns !== matrix.columns) { - throw new RangeError("Matrices dimensions must be equal"); - } - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) + matrix.get(i4, j4)); - } - } - return this; - }; - AbstractMatrix2.add = function add8(matrix, value2) { - const newMatrix = new Matrix3(matrix); - return newMatrix.add(value2); - }; - AbstractMatrix2.prototype.sub = function sub6(value2) { - if (typeof value2 === "number") - return this.subS(value2); - return this.subM(value2); - }; - AbstractMatrix2.prototype.subS = function subS(value2) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) - value2); - } - } - return this; - }; - AbstractMatrix2.prototype.subM = function subM(matrix) { - matrix = Matrix3.checkMatrix(matrix); - if (this.rows !== matrix.rows || this.columns !== matrix.columns) { - throw new RangeError("Matrices dimensions must be equal"); - } - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) - matrix.get(i4, j4)); - } - } - return this; - }; - AbstractMatrix2.sub = function sub6(matrix, value2) { - const newMatrix = new Matrix3(matrix); - return newMatrix.sub(value2); - }; - AbstractMatrix2.prototype.subtract = AbstractMatrix2.prototype.sub; - AbstractMatrix2.prototype.subtractS = AbstractMatrix2.prototype.subS; - AbstractMatrix2.prototype.subtractM = AbstractMatrix2.prototype.subM; - AbstractMatrix2.subtract = AbstractMatrix2.sub; - AbstractMatrix2.prototype.mul = function mul7(value2) { - if (typeof value2 === "number") - return this.mulS(value2); - return this.mulM(value2); - }; - AbstractMatrix2.prototype.mulS = function mulS(value2) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) * value2); - } - } - return this; - }; - AbstractMatrix2.prototype.mulM = function mulM(matrix) { - matrix = Matrix3.checkMatrix(matrix); - if (this.rows !== matrix.rows || this.columns !== matrix.columns) { - throw new RangeError("Matrices dimensions must be equal"); - } - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) * matrix.get(i4, j4)); - } - } - return this; - }; - AbstractMatrix2.mul = function mul7(matrix, value2) { - const newMatrix = new Matrix3(matrix); - return newMatrix.mul(value2); - }; - AbstractMatrix2.prototype.multiply = AbstractMatrix2.prototype.mul; - AbstractMatrix2.prototype.multiplyS = AbstractMatrix2.prototype.mulS; - AbstractMatrix2.prototype.multiplyM = AbstractMatrix2.prototype.mulM; - AbstractMatrix2.multiply = AbstractMatrix2.mul; - AbstractMatrix2.prototype.div = function div4(value2) { - if (typeof value2 === "number") - return this.divS(value2); - return this.divM(value2); - }; - AbstractMatrix2.prototype.divS = function divS(value2) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) / value2); - } - } - return this; - }; - AbstractMatrix2.prototype.divM = function divM(matrix) { - matrix = Matrix3.checkMatrix(matrix); - if (this.rows !== matrix.rows || this.columns !== matrix.columns) { - throw new RangeError("Matrices dimensions must be equal"); - } - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) / matrix.get(i4, j4)); - } - } - return this; - }; - AbstractMatrix2.div = function div4(matrix, value2) { - const newMatrix = new Matrix3(matrix); - return newMatrix.div(value2); - }; - AbstractMatrix2.prototype.divide = AbstractMatrix2.prototype.div; - AbstractMatrix2.prototype.divideS = AbstractMatrix2.prototype.divS; - AbstractMatrix2.prototype.divideM = AbstractMatrix2.prototype.divM; - AbstractMatrix2.divide = AbstractMatrix2.div; - AbstractMatrix2.prototype.mod = function mod5(value2) { - if (typeof value2 === "number") - return this.modS(value2); - return this.modM(value2); - }; - AbstractMatrix2.prototype.modS = function modS(value2) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) % value2); - } - } - return this; - }; - AbstractMatrix2.prototype.modM = function modM(matrix) { - matrix = Matrix3.checkMatrix(matrix); - if (this.rows !== matrix.rows || this.columns !== matrix.columns) { - throw new RangeError("Matrices dimensions must be equal"); - } - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) % matrix.get(i4, j4)); - } - } - return this; - }; - AbstractMatrix2.mod = function mod5(matrix, value2) { - const newMatrix = new Matrix3(matrix); - return newMatrix.mod(value2); - }; - AbstractMatrix2.prototype.modulus = AbstractMatrix2.prototype.mod; - AbstractMatrix2.prototype.modulusS = AbstractMatrix2.prototype.modS; - AbstractMatrix2.prototype.modulusM = AbstractMatrix2.prototype.modM; - AbstractMatrix2.modulus = AbstractMatrix2.mod; - AbstractMatrix2.prototype.and = function and(value2) { - if (typeof value2 === "number") - return this.andS(value2); - return this.andM(value2); - }; - AbstractMatrix2.prototype.andS = function andS(value2) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) & value2); - } - } - return this; - }; - AbstractMatrix2.prototype.andM = function andM(matrix) { - matrix = Matrix3.checkMatrix(matrix); - if (this.rows !== matrix.rows || this.columns !== matrix.columns) { - throw new RangeError("Matrices dimensions must be equal"); - } - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) & matrix.get(i4, j4)); - } - } - return this; - }; - AbstractMatrix2.and = function and(matrix, value2) { - const newMatrix = new Matrix3(matrix); - return newMatrix.and(value2); - }; - AbstractMatrix2.prototype.or = function or(value2) { - if (typeof value2 === "number") - return this.orS(value2); - return this.orM(value2); - }; - AbstractMatrix2.prototype.orS = function orS(value2) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) | value2); - } - } - return this; - }; - AbstractMatrix2.prototype.orM = function orM(matrix) { - matrix = Matrix3.checkMatrix(matrix); - if (this.rows !== matrix.rows || this.columns !== matrix.columns) { - throw new RangeError("Matrices dimensions must be equal"); - } - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) | matrix.get(i4, j4)); - } - } - return this; - }; - AbstractMatrix2.or = function or(matrix, value2) { - const newMatrix = new Matrix3(matrix); - return newMatrix.or(value2); - }; - AbstractMatrix2.prototype.xor = function xor(value2) { - if (typeof value2 === "number") - return this.xorS(value2); - return this.xorM(value2); - }; - AbstractMatrix2.prototype.xorS = function xorS(value2) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) ^ value2); - } - } - return this; - }; - AbstractMatrix2.prototype.xorM = function xorM(matrix) { - matrix = Matrix3.checkMatrix(matrix); - if (this.rows !== matrix.rows || this.columns !== matrix.columns) { - throw new RangeError("Matrices dimensions must be equal"); - } - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) ^ matrix.get(i4, j4)); - } - } - return this; - }; - AbstractMatrix2.xor = function xor(matrix, value2) { - const newMatrix = new Matrix3(matrix); - return newMatrix.xor(value2); - }; - AbstractMatrix2.prototype.leftShift = function leftShift(value2) { - if (typeof value2 === "number") - return this.leftShiftS(value2); - return this.leftShiftM(value2); - }; - AbstractMatrix2.prototype.leftShiftS = function leftShiftS(value2) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) << value2); - } - } - return this; - }; - AbstractMatrix2.prototype.leftShiftM = function leftShiftM(matrix) { - matrix = Matrix3.checkMatrix(matrix); - if (this.rows !== matrix.rows || this.columns !== matrix.columns) { - throw new RangeError("Matrices dimensions must be equal"); - } - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) << matrix.get(i4, j4)); - } - } - return this; - }; - AbstractMatrix2.leftShift = function leftShift(matrix, value2) { - const newMatrix = new Matrix3(matrix); - return newMatrix.leftShift(value2); - }; - AbstractMatrix2.prototype.signPropagatingRightShift = function signPropagatingRightShift(value2) { - if (typeof value2 === "number") - return this.signPropagatingRightShiftS(value2); - return this.signPropagatingRightShiftM(value2); - }; - AbstractMatrix2.prototype.signPropagatingRightShiftS = function signPropagatingRightShiftS(value2) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) >> value2); - } - } - return this; - }; - AbstractMatrix2.prototype.signPropagatingRightShiftM = function signPropagatingRightShiftM(matrix) { - matrix = Matrix3.checkMatrix(matrix); - if (this.rows !== matrix.rows || this.columns !== matrix.columns) { - throw new RangeError("Matrices dimensions must be equal"); - } - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) >> matrix.get(i4, j4)); - } - } - return this; - }; - AbstractMatrix2.signPropagatingRightShift = function signPropagatingRightShift(matrix, value2) { - const newMatrix = new Matrix3(matrix); - return newMatrix.signPropagatingRightShift(value2); - }; - AbstractMatrix2.prototype.rightShift = function rightShift(value2) { - if (typeof value2 === "number") - return this.rightShiftS(value2); - return this.rightShiftM(value2); - }; - AbstractMatrix2.prototype.rightShiftS = function rightShiftS(value2) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) >>> value2); - } - } - return this; - }; - AbstractMatrix2.prototype.rightShiftM = function rightShiftM(matrix) { - matrix = Matrix3.checkMatrix(matrix); - if (this.rows !== matrix.rows || this.columns !== matrix.columns) { - throw new RangeError("Matrices dimensions must be equal"); - } - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) >>> matrix.get(i4, j4)); - } - } - return this; - }; - AbstractMatrix2.rightShift = function rightShift(matrix, value2) { - const newMatrix = new Matrix3(matrix); - return newMatrix.rightShift(value2); - }; - AbstractMatrix2.prototype.zeroFillRightShift = AbstractMatrix2.prototype.rightShift; - AbstractMatrix2.prototype.zeroFillRightShiftS = AbstractMatrix2.prototype.rightShiftS; - AbstractMatrix2.prototype.zeroFillRightShiftM = AbstractMatrix2.prototype.rightShiftM; - AbstractMatrix2.zeroFillRightShift = AbstractMatrix2.rightShift; - AbstractMatrix2.prototype.not = function not() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, ~this.get(i4, j4)); - } - } - return this; - }; - AbstractMatrix2.not = function not(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.not(); - }; - AbstractMatrix2.prototype.abs = function abs3() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.abs(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.abs = function abs3(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.abs(); - }; - AbstractMatrix2.prototype.acos = function acos() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.acos(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.acos = function acos(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.acos(); - }; - AbstractMatrix2.prototype.acosh = function acosh() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.acosh(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.acosh = function acosh(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.acosh(); - }; - AbstractMatrix2.prototype.asin = function asin() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.asin(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.asin = function asin(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.asin(); - }; - AbstractMatrix2.prototype.asinh = function asinh() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.asinh(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.asinh = function asinh(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.asinh(); - }; - AbstractMatrix2.prototype.atan = function atan() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.atan(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.atan = function atan(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.atan(); - }; - AbstractMatrix2.prototype.atanh = function atanh() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.atanh(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.atanh = function atanh(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.atanh(); - }; - AbstractMatrix2.prototype.cbrt = function cbrt() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.cbrt(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.cbrt = function cbrt(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.cbrt(); - }; - AbstractMatrix2.prototype.ceil = function ceil4() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.ceil(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.ceil = function ceil4(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.ceil(); - }; - AbstractMatrix2.prototype.clz32 = function clz32() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.clz32(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.clz32 = function clz32(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.clz32(); - }; - AbstractMatrix2.prototype.cos = function cos3() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.cos(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.cos = function cos3(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.cos(); - }; - AbstractMatrix2.prototype.cosh = function cosh() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.cosh(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.cosh = function cosh(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.cosh(); - }; - AbstractMatrix2.prototype.exp = function exp2() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.exp(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.exp = function exp2(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.exp(); - }; - AbstractMatrix2.prototype.expm1 = function expm1() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.expm1(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.expm1 = function expm1(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.expm1(); - }; - AbstractMatrix2.prototype.floor = function floor4() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.floor(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.floor = function floor4(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.floor(); - }; - AbstractMatrix2.prototype.fround = function fround() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.fround(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.fround = function fround(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.fround(); - }; - AbstractMatrix2.prototype.log = function log3() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.log(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.log = function log3(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.log(); - }; - AbstractMatrix2.prototype.log1p = function log1p() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.log1p(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.log1p = function log1p(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.log1p(); - }; - AbstractMatrix2.prototype.log10 = function log10() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.log10(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.log10 = function log10(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.log10(); - }; - AbstractMatrix2.prototype.log2 = function log22() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.log2(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.log2 = function log22(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.log2(); - }; - AbstractMatrix2.prototype.round = function round5() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.round(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.round = function round5(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.round(); - }; - AbstractMatrix2.prototype.sign = function sign() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.sign(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.sign = function sign(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.sign(); - }; - AbstractMatrix2.prototype.sin = function sin3() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.sin(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.sin = function sin3(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.sin(); - }; - AbstractMatrix2.prototype.sinh = function sinh() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.sinh(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.sinh = function sinh(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.sinh(); - }; - AbstractMatrix2.prototype.sqrt = function sqrt() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.sqrt(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.sqrt = function sqrt(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.sqrt(); - }; - AbstractMatrix2.prototype.tan = function tan() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.tan(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.tan = function tan(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.tan(); - }; - AbstractMatrix2.prototype.tanh = function tanh() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.tanh(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.tanh = function tanh(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.tanh(); - }; - AbstractMatrix2.prototype.trunc = function trunc() { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.trunc(this.get(i4, j4))); - } - } - return this; - }; - AbstractMatrix2.trunc = function trunc(matrix) { - const newMatrix = new Matrix3(matrix); - return newMatrix.trunc(); - }; - AbstractMatrix2.pow = function pow2(matrix, arg0) { - const newMatrix = new Matrix3(matrix); - return newMatrix.pow(arg0); - }; - AbstractMatrix2.prototype.pow = function pow2(value2) { - if (typeof value2 === "number") - return this.powS(value2); - return this.powM(value2); - }; - AbstractMatrix2.prototype.powS = function powS(value2) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.pow(this.get(i4, j4), value2)); - } - } - return this; - }; - AbstractMatrix2.prototype.powM = function powM(matrix) { - matrix = Matrix3.checkMatrix(matrix); - if (this.rows !== matrix.rows || this.columns !== matrix.columns) { - throw new RangeError("Matrices dimensions must be equal"); - } - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, Math.pow(this.get(i4, j4), matrix.get(i4, j4))); - } - } - return this; - }; -} - -// node_modules/ml-matrix/src/util.js -function checkRowIndex(matrix, index2, outer) { - let max15 = outer ? matrix.rows : matrix.rows - 1; - if (index2 < 0 || index2 > max15) { - throw new RangeError("Row index out of range"); - } -} -function checkColumnIndex(matrix, index2, outer) { - let max15 = outer ? matrix.columns : matrix.columns - 1; - if (index2 < 0 || index2 > max15) { - throw new RangeError("Column index out of range"); - } -} -function checkRowVector(matrix, vector) { - if (vector.to1DArray) { - vector = vector.to1DArray(); - } - if (vector.length !== matrix.columns) { - throw new RangeError("vector size must be the same as the number of columns"); - } - return vector; -} -function checkColumnVector(matrix, vector) { - if (vector.to1DArray) { - vector = vector.to1DArray(); - } - if (vector.length !== matrix.rows) { - throw new RangeError("vector size must be the same as the number of rows"); - } - return vector; -} -function checkIndices(matrix, rowIndices, columnIndices) { - return { - row: checkRowIndices(matrix, rowIndices), - column: checkColumnIndices(matrix, columnIndices) - }; -} -function checkRowIndices(matrix, rowIndices) { - if (typeof rowIndices !== "object") { - throw new TypeError("unexpected type for row indices"); - } - let rowOut = rowIndices.some((r4) => { - return r4 < 0 || r4 >= matrix.rows; - }); - if (rowOut) { - throw new RangeError("row indices are out of range"); - } - if (!Array.isArray(rowIndices)) - rowIndices = Array.from(rowIndices); - return rowIndices; -} -function checkColumnIndices(matrix, columnIndices) { - if (typeof columnIndices !== "object") { - throw new TypeError("unexpected type for column indices"); - } - let columnOut = columnIndices.some((c5) => { - return c5 < 0 || c5 >= matrix.columns; - }); - if (columnOut) { - throw new RangeError("column indices are out of range"); - } - if (!Array.isArray(columnIndices)) - columnIndices = Array.from(columnIndices); - return columnIndices; -} -function checkRange(matrix, startRow, endRow, startColumn, endColumn) { - if (arguments.length !== 5) { - throw new RangeError("expected 4 arguments"); - } - checkNumber("startRow", startRow); - checkNumber("endRow", endRow); - checkNumber("startColumn", startColumn); - checkNumber("endColumn", endColumn); - if (startRow > endRow || startColumn > endColumn || startRow < 0 || startRow >= matrix.rows || endRow < 0 || endRow >= matrix.rows || startColumn < 0 || startColumn >= matrix.columns || endColumn < 0 || endColumn >= matrix.columns) { - throw new RangeError("Submatrix indices are out of range"); - } -} -function newArray(length5, value2 = 0) { - let array = []; - for (let i4 = 0; i4 < length5; i4++) { - array.push(value2); - } - return array; -} -function checkNumber(name, value2) { - if (typeof value2 !== "number") { - throw new TypeError(`${name} must be a number`); - } -} -function checkNonEmpty(matrix) { - if (matrix.isEmpty()) { - throw new Error("Empty matrix has no elements to index"); - } -} - -// node_modules/ml-matrix/src/stat.js -function sumByRow(matrix) { - let sum = newArray(matrix.rows); - for (let i4 = 0; i4 < matrix.rows; ++i4) { - for (let j4 = 0; j4 < matrix.columns; ++j4) { - sum[i4] += matrix.get(i4, j4); - } - } - return sum; -} -function sumByColumn(matrix) { - let sum = newArray(matrix.columns); - for (let i4 = 0; i4 < matrix.rows; ++i4) { - for (let j4 = 0; j4 < matrix.columns; ++j4) { - sum[j4] += matrix.get(i4, j4); - } - } - return sum; -} -function sumAll(matrix) { - let v3 = 0; - for (let i4 = 0; i4 < matrix.rows; i4++) { - for (let j4 = 0; j4 < matrix.columns; j4++) { - v3 += matrix.get(i4, j4); - } - } - return v3; -} -function productByRow(matrix) { - let sum = newArray(matrix.rows, 1); - for (let i4 = 0; i4 < matrix.rows; ++i4) { - for (let j4 = 0; j4 < matrix.columns; ++j4) { - sum[i4] *= matrix.get(i4, j4); - } - } - return sum; -} -function productByColumn(matrix) { - let sum = newArray(matrix.columns, 1); - for (let i4 = 0; i4 < matrix.rows; ++i4) { - for (let j4 = 0; j4 < matrix.columns; ++j4) { - sum[j4] *= matrix.get(i4, j4); - } - } - return sum; -} -function productAll(matrix) { - let v3 = 1; - for (let i4 = 0; i4 < matrix.rows; i4++) { - for (let j4 = 0; j4 < matrix.columns; j4++) { - v3 *= matrix.get(i4, j4); - } - } - return v3; -} -function varianceByRow(matrix, unbiased, mean) { - const rows = matrix.rows; - const cols = matrix.columns; - const variance = []; - for (let i4 = 0; i4 < rows; i4++) { - let sum1 = 0; - let sum2 = 0; - let x6 = 0; - for (let j4 = 0; j4 < cols; j4++) { - x6 = matrix.get(i4, j4) - mean[i4]; - sum1 += x6; - sum2 += x6 * x6; - } - if (unbiased) { - variance.push((sum2 - sum1 * sum1 / cols) / (cols - 1)); - } else { - variance.push((sum2 - sum1 * sum1 / cols) / cols); - } - } - return variance; -} -function varianceByColumn(matrix, unbiased, mean) { - const rows = matrix.rows; - const cols = matrix.columns; - const variance = []; - for (let j4 = 0; j4 < cols; j4++) { - let sum1 = 0; - let sum2 = 0; - let x6 = 0; - for (let i4 = 0; i4 < rows; i4++) { - x6 = matrix.get(i4, j4) - mean[j4]; - sum1 += x6; - sum2 += x6 * x6; - } - if (unbiased) { - variance.push((sum2 - sum1 * sum1 / rows) / (rows - 1)); - } else { - variance.push((sum2 - sum1 * sum1 / rows) / rows); - } - } - return variance; -} -function varianceAll(matrix, unbiased, mean) { - const rows = matrix.rows; - const cols = matrix.columns; - const size14 = rows * cols; - let sum1 = 0; - let sum2 = 0; - let x6 = 0; - for (let i4 = 0; i4 < rows; i4++) { - for (let j4 = 0; j4 < cols; j4++) { - x6 = matrix.get(i4, j4) - mean; - sum1 += x6; - sum2 += x6 * x6; - } - } - if (unbiased) { - return (sum2 - sum1 * sum1 / size14) / (size14 - 1); - } else { - return (sum2 - sum1 * sum1 / size14) / size14; - } -} -function centerByRow(matrix, mean) { - for (let i4 = 0; i4 < matrix.rows; i4++) { - for (let j4 = 0; j4 < matrix.columns; j4++) { - matrix.set(i4, j4, matrix.get(i4, j4) - mean[i4]); - } - } -} -function centerByColumn(matrix, mean) { - for (let i4 = 0; i4 < matrix.rows; i4++) { - for (let j4 = 0; j4 < matrix.columns; j4++) { - matrix.set(i4, j4, matrix.get(i4, j4) - mean[j4]); - } - } -} -function centerAll(matrix, mean) { - for (let i4 = 0; i4 < matrix.rows; i4++) { - for (let j4 = 0; j4 < matrix.columns; j4++) { - matrix.set(i4, j4, matrix.get(i4, j4) - mean); - } - } -} -function getScaleByRow(matrix) { - const scale12 = []; - for (let i4 = 0; i4 < matrix.rows; i4++) { - let sum = 0; - for (let j4 = 0; j4 < matrix.columns; j4++) { - sum += Math.pow(matrix.get(i4, j4), 2) / (matrix.columns - 1); - } - scale12.push(Math.sqrt(sum)); - } - return scale12; -} -function scaleByRow(matrix, scale12) { - for (let i4 = 0; i4 < matrix.rows; i4++) { - for (let j4 = 0; j4 < matrix.columns; j4++) { - matrix.set(i4, j4, matrix.get(i4, j4) / scale12[i4]); - } - } -} -function getScaleByColumn(matrix) { - const scale12 = []; - for (let j4 = 0; j4 < matrix.columns; j4++) { - let sum = 0; - for (let i4 = 0; i4 < matrix.rows; i4++) { - sum += Math.pow(matrix.get(i4, j4), 2) / (matrix.rows - 1); - } - scale12.push(Math.sqrt(sum)); - } - return scale12; -} -function scaleByColumn(matrix, scale12) { - for (let i4 = 0; i4 < matrix.rows; i4++) { - for (let j4 = 0; j4 < matrix.columns; j4++) { - matrix.set(i4, j4, matrix.get(i4, j4) / scale12[j4]); - } - } -} -function getScaleAll(matrix) { - const divider = matrix.size - 1; - let sum = 0; - for (let j4 = 0; j4 < matrix.columns; j4++) { - for (let i4 = 0; i4 < matrix.rows; i4++) { - sum += Math.pow(matrix.get(i4, j4), 2) / divider; - } - } - return Math.sqrt(sum); -} -function scaleAll(matrix, scale12) { - for (let i4 = 0; i4 < matrix.rows; i4++) { - for (let j4 = 0; j4 < matrix.columns; j4++) { - matrix.set(i4, j4, matrix.get(i4, j4) / scale12); - } - } -} - -// node_modules/ml-matrix/src/matrix.js -var AbstractMatrix = class { - static from1DArray(newRows, newColumns, newData) { - let length5 = newRows * newColumns; - if (length5 !== newData.length) { - throw new RangeError("data length does not match given dimensions"); - } - let newMatrix = new Matrix2(newRows, newColumns); - for (let row = 0; row < newRows; row++) { - for (let column = 0; column < newColumns; column++) { - newMatrix.set(row, column, newData[row * newColumns + column]); - } - } - return newMatrix; - } - static rowVector(newData) { - let vector = new Matrix2(1, newData.length); - for (let i4 = 0; i4 < newData.length; i4++) { - vector.set(0, i4, newData[i4]); - } - return vector; - } - static columnVector(newData) { - let vector = new Matrix2(newData.length, 1); - for (let i4 = 0; i4 < newData.length; i4++) { - vector.set(i4, 0, newData[i4]); - } - return vector; - } - static zeros(rows, columns) { - return new Matrix2(rows, columns); - } - static ones(rows, columns) { - return new Matrix2(rows, columns).fill(1); - } - static rand(rows, columns, options = {}) { - if (typeof options !== "object") { - throw new TypeError("options must be an object"); - } - const { random: random5 = Math.random } = options; - let matrix = new Matrix2(rows, columns); - for (let i4 = 0; i4 < rows; i4++) { - for (let j4 = 0; j4 < columns; j4++) { - matrix.set(i4, j4, random5()); - } - } - return matrix; - } - static randInt(rows, columns, options = {}) { - if (typeof options !== "object") { - throw new TypeError("options must be an object"); - } - const { min: min13 = 0, max: max15 = 1e3, random: random5 = Math.random } = options; - if (!Number.isInteger(min13)) - throw new TypeError("min must be an integer"); - if (!Number.isInteger(max15)) - throw new TypeError("max must be an integer"); - if (min13 >= max15) - throw new RangeError("min must be smaller than max"); - let interval3 = max15 - min13; - let matrix = new Matrix2(rows, columns); - for (let i4 = 0; i4 < rows; i4++) { - for (let j4 = 0; j4 < columns; j4++) { - let value2 = min13 + Math.round(random5() * interval3); - matrix.set(i4, j4, value2); - } - } - return matrix; - } - static eye(rows, columns, value2) { - if (columns === void 0) - columns = rows; - if (value2 === void 0) - value2 = 1; - let min13 = Math.min(rows, columns); - let matrix = this.zeros(rows, columns); - for (let i4 = 0; i4 < min13; i4++) { - matrix.set(i4, i4, value2); - } - return matrix; - } - static diag(data3, rows, columns) { - let l4 = data3.length; - if (rows === void 0) - rows = l4; - if (columns === void 0) - columns = rows; - let min13 = Math.min(l4, rows, columns); - let matrix = this.zeros(rows, columns); - for (let i4 = 0; i4 < min13; i4++) { - matrix.set(i4, i4, data3[i4]); - } - return matrix; - } - static min(matrix1, matrix2) { - matrix1 = this.checkMatrix(matrix1); - matrix2 = this.checkMatrix(matrix2); - let rows = matrix1.rows; - let columns = matrix1.columns; - let result = new Matrix2(rows, columns); - for (let i4 = 0; i4 < rows; i4++) { - for (let j4 = 0; j4 < columns; j4++) { - result.set(i4, j4, Math.min(matrix1.get(i4, j4), matrix2.get(i4, j4))); - } - } - return result; - } - static max(matrix1, matrix2) { - matrix1 = this.checkMatrix(matrix1); - matrix2 = this.checkMatrix(matrix2); - let rows = matrix1.rows; - let columns = matrix1.columns; - let result = new this(rows, columns); - for (let i4 = 0; i4 < rows; i4++) { - for (let j4 = 0; j4 < columns; j4++) { - result.set(i4, j4, Math.max(matrix1.get(i4, j4), matrix2.get(i4, j4))); - } - } - return result; - } - static checkMatrix(value2) { - return AbstractMatrix.isMatrix(value2) ? value2 : new Matrix2(value2); - } - static isMatrix(value2) { - return value2 != null && value2.klass === "Matrix"; - } - get size() { - return this.rows * this.columns; - } - apply(callback) { - if (typeof callback !== "function") { - throw new TypeError("callback must be a function"); - } - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - callback.call(this, i4, j4); - } - } - return this; - } - to1DArray() { - let array = []; - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - array.push(this.get(i4, j4)); - } - } - return array; - } - to2DArray() { - let copy8 = []; - for (let i4 = 0; i4 < this.rows; i4++) { - copy8.push([]); - for (let j4 = 0; j4 < this.columns; j4++) { - copy8[i4].push(this.get(i4, j4)); - } - } - return copy8; - } - toJSON() { - return this.to2DArray(); - } - isRowVector() { - return this.rows === 1; - } - isColumnVector() { - return this.columns === 1; - } - isVector() { - return this.rows === 1 || this.columns === 1; - } - isSquare() { - return this.rows === this.columns; - } - isEmpty() { - return this.rows === 0 || this.columns === 0; - } - isSymmetric() { - if (this.isSquare()) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 <= i4; j4++) { - if (this.get(i4, j4) !== this.get(j4, i4)) { - return false; - } - } - } - return true; - } - return false; - } - isEchelonForm() { - let i4 = 0; - let j4 = 0; - let previousColumn = -1; - let isEchelonForm = true; - let checked = false; - while (i4 < this.rows && isEchelonForm) { - j4 = 0; - checked = false; - while (j4 < this.columns && checked === false) { - if (this.get(i4, j4) === 0) { - j4++; - } else if (this.get(i4, j4) === 1 && j4 > previousColumn) { - checked = true; - previousColumn = j4; - } else { - isEchelonForm = false; - checked = true; - } - } - i4++; - } - return isEchelonForm; - } - isReducedEchelonForm() { - let i4 = 0; - let j4 = 0; - let previousColumn = -1; - let isReducedEchelonForm = true; - let checked = false; - while (i4 < this.rows && isReducedEchelonForm) { - j4 = 0; - checked = false; - while (j4 < this.columns && checked === false) { - if (this.get(i4, j4) === 0) { - j4++; - } else if (this.get(i4, j4) === 1 && j4 > previousColumn) { - checked = true; - previousColumn = j4; - } else { - isReducedEchelonForm = false; - checked = true; - } - } - for (let k4 = j4 + 1; k4 < this.rows; k4++) { - if (this.get(i4, k4) !== 0) { - isReducedEchelonForm = false; - } - } - i4++; - } - return isReducedEchelonForm; - } - echelonForm() { - let result = this.clone(); - let h3 = 0; - let k4 = 0; - while (h3 < result.rows && k4 < result.columns) { - let iMax = h3; - for (let i4 = h3; i4 < result.rows; i4++) { - if (result.get(i4, k4) > result.get(iMax, k4)) { - iMax = i4; - } - } - if (result.get(iMax, k4) === 0) { - k4++; - } else { - result.swapRows(h3, iMax); - let tmp = result.get(h3, k4); - for (let j4 = k4; j4 < result.columns; j4++) { - result.set(h3, j4, result.get(h3, j4) / tmp); - } - for (let i4 = h3 + 1; i4 < result.rows; i4++) { - let factor = result.get(i4, k4) / result.get(h3, k4); - result.set(i4, k4, 0); - for (let j4 = k4 + 1; j4 < result.columns; j4++) { - result.set(i4, j4, result.get(i4, j4) - result.get(h3, j4) * factor); - } - } - h3++; - k4++; - } - } - return result; - } - reducedEchelonForm() { - let result = this.echelonForm(); - let m4 = result.columns; - let n3 = result.rows; - let h3 = n3 - 1; - while (h3 >= 0) { - if (result.maxRow(h3) === 0) { - h3--; - } else { - let p4 = 0; - let pivot = false; - while (p4 < n3 && pivot === false) { - if (result.get(h3, p4) === 1) { - pivot = true; - } else { - p4++; - } - } - for (let i4 = 0; i4 < h3; i4++) { - let factor = result.get(i4, p4); - for (let j4 = p4; j4 < m4; j4++) { - let tmp = result.get(i4, j4) - factor * result.get(h3, j4); - result.set(i4, j4, tmp); - } - } - h3--; - } - } - return result; - } - set() { - throw new Error("set method is unimplemented"); - } - get() { - throw new Error("get method is unimplemented"); - } - repeat(options = {}) { - if (typeof options !== "object") { - throw new TypeError("options must be an object"); - } - const { rows = 1, columns = 1 } = options; - if (!Number.isInteger(rows) || rows <= 0) { - throw new TypeError("rows must be a positive integer"); - } - if (!Number.isInteger(columns) || columns <= 0) { - throw new TypeError("columns must be a positive integer"); - } - let matrix = new Matrix2(this.rows * rows, this.columns * columns); - for (let i4 = 0; i4 < rows; i4++) { - for (let j4 = 0; j4 < columns; j4++) { - matrix.setSubMatrix(this, this.rows * i4, this.columns * j4); - } - } - return matrix; - } - fill(value2) { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, value2); - } - } - return this; - } - neg() { - return this.mulS(-1); - } - getRow(index2) { - checkRowIndex(this, index2); - let row = []; - for (let i4 = 0; i4 < this.columns; i4++) { - row.push(this.get(index2, i4)); - } - return row; - } - getRowVector(index2) { - return Matrix2.rowVector(this.getRow(index2)); - } - setRow(index2, array) { - checkRowIndex(this, index2); - array = checkRowVector(this, array); - for (let i4 = 0; i4 < this.columns; i4++) { - this.set(index2, i4, array[i4]); - } - return this; - } - swapRows(row1, row2) { - checkRowIndex(this, row1); - checkRowIndex(this, row2); - for (let i4 = 0; i4 < this.columns; i4++) { - let temp = this.get(row1, i4); - this.set(row1, i4, this.get(row2, i4)); - this.set(row2, i4, temp); - } - return this; - } - getColumn(index2) { - checkColumnIndex(this, index2); - let column = []; - for (let i4 = 0; i4 < this.rows; i4++) { - column.push(this.get(i4, index2)); - } - return column; - } - getColumnVector(index2) { - return Matrix2.columnVector(this.getColumn(index2)); - } - setColumn(index2, array) { - checkColumnIndex(this, index2); - array = checkColumnVector(this, array); - for (let i4 = 0; i4 < this.rows; i4++) { - this.set(i4, index2, array[i4]); - } - return this; - } - swapColumns(column1, column2) { - checkColumnIndex(this, column1); - checkColumnIndex(this, column2); - for (let i4 = 0; i4 < this.rows; i4++) { - let temp = this.get(i4, column1); - this.set(i4, column1, this.get(i4, column2)); - this.set(i4, column2, temp); - } - return this; - } - addRowVector(vector) { - vector = checkRowVector(this, vector); - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) + vector[j4]); - } - } - return this; - } - subRowVector(vector) { - vector = checkRowVector(this, vector); - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) - vector[j4]); - } - } - return this; - } - mulRowVector(vector) { - vector = checkRowVector(this, vector); - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) * vector[j4]); - } - } - return this; - } - divRowVector(vector) { - vector = checkRowVector(this, vector); - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) / vector[j4]); - } - } - return this; - } - addColumnVector(vector) { - vector = checkColumnVector(this, vector); - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) + vector[i4]); - } - } - return this; - } - subColumnVector(vector) { - vector = checkColumnVector(this, vector); - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) - vector[i4]); - } - } - return this; - } - mulColumnVector(vector) { - vector = checkColumnVector(this, vector); - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) * vector[i4]); - } - } - return this; - } - divColumnVector(vector) { - vector = checkColumnVector(this, vector); - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - this.set(i4, j4, this.get(i4, j4) / vector[i4]); - } - } - return this; - } - mulRow(index2, value2) { - checkRowIndex(this, index2); - for (let i4 = 0; i4 < this.columns; i4++) { - this.set(index2, i4, this.get(index2, i4) * value2); - } - return this; - } - mulColumn(index2, value2) { - checkColumnIndex(this, index2); - for (let i4 = 0; i4 < this.rows; i4++) { - this.set(i4, index2, this.get(i4, index2) * value2); - } - return this; - } - max() { - if (this.isEmpty()) { - return NaN; - } - let v3 = this.get(0, 0); - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - if (this.get(i4, j4) > v3) { - v3 = this.get(i4, j4); - } - } - } - return v3; - } - maxIndex() { - checkNonEmpty(this); - let v3 = this.get(0, 0); - let idx = [0, 0]; - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - if (this.get(i4, j4) > v3) { - v3 = this.get(i4, j4); - idx[0] = i4; - idx[1] = j4; - } - } - } - return idx; - } - min() { - if (this.isEmpty()) { - return NaN; - } - let v3 = this.get(0, 0); - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - if (this.get(i4, j4) < v3) { - v3 = this.get(i4, j4); - } - } - } - return v3; - } - minIndex() { - checkNonEmpty(this); - let v3 = this.get(0, 0); - let idx = [0, 0]; - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - if (this.get(i4, j4) < v3) { - v3 = this.get(i4, j4); - idx[0] = i4; - idx[1] = j4; - } - } - } - return idx; - } - maxRow(row) { - checkRowIndex(this, row); - if (this.isEmpty()) { - return NaN; - } - let v3 = this.get(row, 0); - for (let i4 = 1; i4 < this.columns; i4++) { - if (this.get(row, i4) > v3) { - v3 = this.get(row, i4); - } - } - return v3; - } - maxRowIndex(row) { - checkRowIndex(this, row); - checkNonEmpty(this); - let v3 = this.get(row, 0); - let idx = [row, 0]; - for (let i4 = 1; i4 < this.columns; i4++) { - if (this.get(row, i4) > v3) { - v3 = this.get(row, i4); - idx[1] = i4; - } - } - return idx; - } - minRow(row) { - checkRowIndex(this, row); - if (this.isEmpty()) { - return NaN; - } - let v3 = this.get(row, 0); - for (let i4 = 1; i4 < this.columns; i4++) { - if (this.get(row, i4) < v3) { - v3 = this.get(row, i4); - } - } - return v3; - } - minRowIndex(row) { - checkRowIndex(this, row); - checkNonEmpty(this); - let v3 = this.get(row, 0); - let idx = [row, 0]; - for (let i4 = 1; i4 < this.columns; i4++) { - if (this.get(row, i4) < v3) { - v3 = this.get(row, i4); - idx[1] = i4; - } - } - return idx; - } - maxColumn(column) { - checkColumnIndex(this, column); - if (this.isEmpty()) { - return NaN; - } - let v3 = this.get(0, column); - for (let i4 = 1; i4 < this.rows; i4++) { - if (this.get(i4, column) > v3) { - v3 = this.get(i4, column); - } - } - return v3; - } - maxColumnIndex(column) { - checkColumnIndex(this, column); - checkNonEmpty(this); - let v3 = this.get(0, column); - let idx = [0, column]; - for (let i4 = 1; i4 < this.rows; i4++) { - if (this.get(i4, column) > v3) { - v3 = this.get(i4, column); - idx[0] = i4; - } - } - return idx; - } - minColumn(column) { - checkColumnIndex(this, column); - if (this.isEmpty()) { - return NaN; - } - let v3 = this.get(0, column); - for (let i4 = 1; i4 < this.rows; i4++) { - if (this.get(i4, column) < v3) { - v3 = this.get(i4, column); - } - } - return v3; - } - minColumnIndex(column) { - checkColumnIndex(this, column); - checkNonEmpty(this); - let v3 = this.get(0, column); - let idx = [0, column]; - for (let i4 = 1; i4 < this.rows; i4++) { - if (this.get(i4, column) < v3) { - v3 = this.get(i4, column); - idx[0] = i4; - } - } - return idx; - } - diag() { - let min13 = Math.min(this.rows, this.columns); - let diag = []; - for (let i4 = 0; i4 < min13; i4++) { - diag.push(this.get(i4, i4)); - } - return diag; - } - norm(type2 = "frobenius") { - let result = 0; - if (type2 === "max") { - return this.max(); - } else if (type2 === "frobenius") { - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - result = result + this.get(i4, j4) * this.get(i4, j4); - } - } - return Math.sqrt(result); - } else { - throw new RangeError(`unknown norm type: ${type2}`); - } - } - cumulativeSum() { - let sum = 0; - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - sum += this.get(i4, j4); - this.set(i4, j4, sum); - } - } - return this; - } - dot(vector2) { - if (AbstractMatrix.isMatrix(vector2)) - vector2 = vector2.to1DArray(); - let vector1 = this.to1DArray(); - if (vector1.length !== vector2.length) { - throw new RangeError("vectors do not have the same size"); - } - let dot7 = 0; - for (let i4 = 0; i4 < vector1.length; i4++) { - dot7 += vector1[i4] * vector2[i4]; - } - return dot7; - } - mmul(other2) { - other2 = Matrix2.checkMatrix(other2); - let m4 = this.rows; - let n3 = this.columns; - let p4 = other2.columns; - let result = new Matrix2(m4, p4); - let Bcolj = new Float64Array(n3); - for (let j4 = 0; j4 < p4; j4++) { - for (let k4 = 0; k4 < n3; k4++) { - Bcolj[k4] = other2.get(k4, j4); - } - for (let i4 = 0; i4 < m4; i4++) { - let s4 = 0; - for (let k4 = 0; k4 < n3; k4++) { - s4 += this.get(i4, k4) * Bcolj[k4]; - } - result.set(i4, j4, s4); - } - } - return result; - } - strassen2x2(other2) { - other2 = Matrix2.checkMatrix(other2); - let result = new Matrix2(2, 2); - const a11 = this.get(0, 0); - const b11 = other2.get(0, 0); - const a12 = this.get(0, 1); - const b12 = other2.get(0, 1); - const a21 = this.get(1, 0); - const b21 = other2.get(1, 0); - const a22 = this.get(1, 1); - const b222 = other2.get(1, 1); - const m1 = (a11 + a22) * (b11 + b222); - const m22 = (a21 + a22) * b11; - const m32 = a11 * (b12 - b222); - const m4 = a22 * (b21 - b11); - const m5 = (a11 + a12) * b222; - const m6 = (a21 - a11) * (b11 + b12); - const m7 = (a12 - a22) * (b21 + b222); - const c00 = m1 + m4 - m5 + m7; - const c01 = m32 + m5; - const c10 = m22 + m4; - const c11 = m1 - m22 + m32 + m6; - result.set(0, 0, c00); - result.set(0, 1, c01); - result.set(1, 0, c10); - result.set(1, 1, c11); - return result; - } - strassen3x3(other2) { - other2 = Matrix2.checkMatrix(other2); - let result = new Matrix2(3, 3); - const a00 = this.get(0, 0); - const a01 = this.get(0, 1); - const a02 = this.get(0, 2); - const a10 = this.get(1, 0); - const a11 = this.get(1, 1); - const a12 = this.get(1, 2); - const a20 = this.get(2, 0); - const a21 = this.get(2, 1); - const a22 = this.get(2, 2); - const b00 = other2.get(0, 0); - const b01 = other2.get(0, 1); - const b02 = other2.get(0, 2); - const b10 = other2.get(1, 0); - const b11 = other2.get(1, 1); - const b12 = other2.get(1, 2); - const b20 = other2.get(2, 0); - const b21 = other2.get(2, 1); - const b222 = other2.get(2, 2); - const m1 = (a00 + a01 + a02 - a10 - a11 - a21 - a22) * b11; - const m22 = (a00 - a10) * (-b01 + b11); - const m32 = a11 * (-b00 + b01 + b10 - b11 - b12 - b20 + b222); - const m4 = (-a00 + a10 + a11) * (b00 - b01 + b11); - const m5 = (a10 + a11) * (-b00 + b01); - const m6 = a00 * b00; - const m7 = (-a00 + a20 + a21) * (b00 - b02 + b12); - const m8 = (-a00 + a20) * (b02 - b12); - const m9 = (a20 + a21) * (-b00 + b02); - const m10 = (a00 + a01 + a02 - a11 - a12 - a20 - a21) * b12; - const m11 = a21 * (-b00 + b02 + b10 - b11 - b12 - b20 + b21); - const m12 = (-a02 + a21 + a22) * (b11 + b20 - b21); - const m13 = (a02 - a22) * (b11 - b21); - const m14 = a02 * b20; - const m15 = (a21 + a22) * (-b20 + b21); - const m16 = (-a02 + a11 + a12) * (b12 + b20 - b222); - const m17 = (a02 - a12) * (b12 - b222); - const m18 = (a11 + a12) * (-b20 + b222); - const m19 = a01 * b10; - const m20 = a12 * b21; - const m21 = a10 * b02; - const m222 = a20 * b01; - const m23 = a22 * b222; - const c00 = m6 + m14 + m19; - const c01 = m1 + m4 + m5 + m6 + m12 + m14 + m15; - const c02 = m6 + m7 + m9 + m10 + m14 + m16 + m18; - const c10 = m22 + m32 + m4 + m6 + m14 + m16 + m17; - const c11 = m22 + m4 + m5 + m6 + m20; - const c12 = m14 + m16 + m17 + m18 + m21; - const c20 = m6 + m7 + m8 + m11 + m12 + m13 + m14; - const c21 = m12 + m13 + m14 + m15 + m222; - const c22 = m6 + m7 + m8 + m9 + m23; - result.set(0, 0, c00); - result.set(0, 1, c01); - result.set(0, 2, c02); - result.set(1, 0, c10); - result.set(1, 1, c11); - result.set(1, 2, c12); - result.set(2, 0, c20); - result.set(2, 1, c21); - result.set(2, 2, c22); - return result; - } - mmulStrassen(y5) { - y5 = Matrix2.checkMatrix(y5); - let x6 = this.clone(); - let r1 = x6.rows; - let c1 = x6.columns; - let r22 = y5.rows; - let c22 = y5.columns; - if (c1 !== r22) { - console.warn(`Multiplying ${r1} x ${c1} and ${r22} x ${c22} matrix: dimensions do not match.`); - } - function embed(mat, rows, cols) { - let r5 = mat.rows; - let c6 = mat.columns; - if (r5 === rows && c6 === cols) { - return mat; - } else { - let resultat = AbstractMatrix.zeros(rows, cols); - resultat = resultat.setSubMatrix(mat, 0, 0); - return resultat; - } - } - let r4 = Math.max(r1, r22); - let c5 = Math.max(c1, c22); - x6 = embed(x6, r4, c5); - y5 = embed(y5, r4, c5); - function blockMult(a4, b10, rows, cols) { - if (rows <= 512 || cols <= 512) { - return a4.mmul(b10); - } - if (rows % 2 === 1 && cols % 2 === 1) { - a4 = embed(a4, rows + 1, cols + 1); - b10 = embed(b10, rows + 1, cols + 1); - } else if (rows % 2 === 1) { - a4 = embed(a4, rows + 1, cols); - b10 = embed(b10, rows + 1, cols); - } else if (cols % 2 === 1) { - a4 = embed(a4, rows, cols + 1); - b10 = embed(b10, rows, cols + 1); - } - let halfRows = parseInt(a4.rows / 2, 10); - let halfCols = parseInt(a4.columns / 2, 10); - let a11 = a4.subMatrix(0, halfRows - 1, 0, halfCols - 1); - let b11 = b10.subMatrix(0, halfRows - 1, 0, halfCols - 1); - let a12 = a4.subMatrix(0, halfRows - 1, halfCols, a4.columns - 1); - let b12 = b10.subMatrix(0, halfRows - 1, halfCols, b10.columns - 1); - let a21 = a4.subMatrix(halfRows, a4.rows - 1, 0, halfCols - 1); - let b21 = b10.subMatrix(halfRows, b10.rows - 1, 0, halfCols - 1); - let a22 = a4.subMatrix(halfRows, a4.rows - 1, halfCols, a4.columns - 1); - let b222 = b10.subMatrix(halfRows, b10.rows - 1, halfCols, b10.columns - 1); - let m1 = blockMult(AbstractMatrix.add(a11, a22), AbstractMatrix.add(b11, b222), halfRows, halfCols); - let m22 = blockMult(AbstractMatrix.add(a21, a22), b11, halfRows, halfCols); - let m32 = blockMult(a11, AbstractMatrix.sub(b12, b222), halfRows, halfCols); - let m4 = blockMult(a22, AbstractMatrix.sub(b21, b11), halfRows, halfCols); - let m5 = blockMult(AbstractMatrix.add(a11, a12), b222, halfRows, halfCols); - let m6 = blockMult(AbstractMatrix.sub(a21, a11), AbstractMatrix.add(b11, b12), halfRows, halfCols); - let m7 = blockMult(AbstractMatrix.sub(a12, a22), AbstractMatrix.add(b21, b222), halfRows, halfCols); - let c11 = AbstractMatrix.add(m1, m4); - c11.sub(m5); - c11.add(m7); - let c12 = AbstractMatrix.add(m32, m5); - let c21 = AbstractMatrix.add(m22, m4); - let c222 = AbstractMatrix.sub(m1, m22); - c222.add(m32); - c222.add(m6); - let resultat = AbstractMatrix.zeros(2 * c11.rows, 2 * c11.columns); - resultat = resultat.setSubMatrix(c11, 0, 0); - resultat = resultat.setSubMatrix(c12, c11.rows, 0); - resultat = resultat.setSubMatrix(c21, 0, c11.columns); - resultat = resultat.setSubMatrix(c222, c11.rows, c11.columns); - return resultat.subMatrix(0, rows - 1, 0, cols - 1); - } - return blockMult(x6, y5, r4, c5); - } - scaleRows(options = {}) { - if (typeof options !== "object") { - throw new TypeError("options must be an object"); - } - const { min: min13 = 0, max: max15 = 1 } = options; - if (!Number.isFinite(min13)) - throw new TypeError("min must be a number"); - if (!Number.isFinite(max15)) - throw new TypeError("max must be a number"); - if (min13 >= max15) - throw new RangeError("min must be smaller than max"); - let newMatrix = new Matrix2(this.rows, this.columns); - for (let i4 = 0; i4 < this.rows; i4++) { - const row = this.getRow(i4); - if (row.length > 0) { - rescale(row, { min: min13, max: max15, output: row }); - } - newMatrix.setRow(i4, row); - } - return newMatrix; - } - scaleColumns(options = {}) { - if (typeof options !== "object") { - throw new TypeError("options must be an object"); - } - const { min: min13 = 0, max: max15 = 1 } = options; - if (!Number.isFinite(min13)) - throw new TypeError("min must be a number"); - if (!Number.isFinite(max15)) - throw new TypeError("max must be a number"); - if (min13 >= max15) - throw new RangeError("min must be smaller than max"); - let newMatrix = new Matrix2(this.rows, this.columns); - for (let i4 = 0; i4 < this.columns; i4++) { - const column = this.getColumn(i4); - if (column.length) { - rescale(column, { - min: min13, - max: max15, - output: column - }); - } - newMatrix.setColumn(i4, column); - } - return newMatrix; - } - flipRows() { - const middle = Math.ceil(this.columns / 2); - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < middle; j4++) { - let first = this.get(i4, j4); - let last17 = this.get(i4, this.columns - 1 - j4); - this.set(i4, j4, last17); - this.set(i4, this.columns - 1 - j4, first); - } - } - return this; - } - flipColumns() { - const middle = Math.ceil(this.rows / 2); - for (let j4 = 0; j4 < this.columns; j4++) { - for (let i4 = 0; i4 < middle; i4++) { - let first = this.get(i4, j4); - let last17 = this.get(this.rows - 1 - i4, j4); - this.set(i4, j4, last17); - this.set(this.rows - 1 - i4, j4, first); - } - } - return this; - } - kroneckerProduct(other2) { - other2 = Matrix2.checkMatrix(other2); - let m4 = this.rows; - let n3 = this.columns; - let p4 = other2.rows; - let q3 = other2.columns; - let result = new Matrix2(m4 * p4, n3 * q3); - for (let i4 = 0; i4 < m4; i4++) { - for (let j4 = 0; j4 < n3; j4++) { - for (let k4 = 0; k4 < p4; k4++) { - for (let l4 = 0; l4 < q3; l4++) { - result.set(p4 * i4 + k4, q3 * j4 + l4, this.get(i4, j4) * other2.get(k4, l4)); - } - } - } - } - return result; - } - kroneckerSum(other2) { - other2 = Matrix2.checkMatrix(other2); - if (!this.isSquare() || !other2.isSquare()) { - throw new Error("Kronecker Sum needs two Square Matrices"); - } - let m4 = this.rows; - let n3 = other2.rows; - let AxI = this.kroneckerProduct(Matrix2.eye(n3, n3)); - let IxB = Matrix2.eye(m4, m4).kroneckerProduct(other2); - return AxI.add(IxB); - } - transpose() { - let result = new Matrix2(this.columns, this.rows); - for (let i4 = 0; i4 < this.rows; i4++) { - for (let j4 = 0; j4 < this.columns; j4++) { - result.set(j4, i4, this.get(i4, j4)); - } - } - return result; - } - sortRows(compareFunction = compareNumbers) { - for (let i4 = 0; i4 < this.rows; i4++) { - this.setRow(i4, this.getRow(i4).sort(compareFunction)); - } - return this; - } - sortColumns(compareFunction = compareNumbers) { - for (let i4 = 0; i4 < this.columns; i4++) { - this.setColumn(i4, this.getColumn(i4).sort(compareFunction)); - } - return this; - } - subMatrix(startRow, endRow, startColumn, endColumn) { - checkRange(this, startRow, endRow, startColumn, endColumn); - let newMatrix = new Matrix2(endRow - startRow + 1, endColumn - startColumn + 1); - for (let i4 = startRow; i4 <= endRow; i4++) { - for (let j4 = startColumn; j4 <= endColumn; j4++) { - newMatrix.set(i4 - startRow, j4 - startColumn, this.get(i4, j4)); - } - } - return newMatrix; - } - subMatrixRow(indices, startColumn, endColumn) { - if (startColumn === void 0) - startColumn = 0; - if (endColumn === void 0) - endColumn = this.columns - 1; - if (startColumn > endColumn || startColumn < 0 || startColumn >= this.columns || endColumn < 0 || endColumn >= this.columns) { - throw new RangeError("Argument out of range"); - } - let newMatrix = new Matrix2(indices.length, endColumn - startColumn + 1); - for (let i4 = 0; i4 < indices.length; i4++) { - for (let j4 = startColumn; j4 <= endColumn; j4++) { - if (indices[i4] < 0 || indices[i4] >= this.rows) { - throw new RangeError(`Row index out of range: ${indices[i4]}`); - } - newMatrix.set(i4, j4 - startColumn, this.get(indices[i4], j4)); - } - } - return newMatrix; - } - subMatrixColumn(indices, startRow, endRow) { - if (startRow === void 0) - startRow = 0; - if (endRow === void 0) - endRow = this.rows - 1; - if (startRow > endRow || startRow < 0 || startRow >= this.rows || endRow < 0 || endRow >= this.rows) { - throw new RangeError("Argument out of range"); - } - let newMatrix = new Matrix2(endRow - startRow + 1, indices.length); - for (let i4 = 0; i4 < indices.length; i4++) { - for (let j4 = startRow; j4 <= endRow; j4++) { - if (indices[i4] < 0 || indices[i4] >= this.columns) { - throw new RangeError(`Column index out of range: ${indices[i4]}`); - } - newMatrix.set(j4 - startRow, i4, this.get(j4, indices[i4])); - } - } - return newMatrix; - } - setSubMatrix(matrix, startRow, startColumn) { - matrix = Matrix2.checkMatrix(matrix); - if (matrix.isEmpty()) { - return this; - } - let endRow = startRow + matrix.rows - 1; - let endColumn = startColumn + matrix.columns - 1; - checkRange(this, startRow, endRow, startColumn, endColumn); - for (let i4 = 0; i4 < matrix.rows; i4++) { - for (let j4 = 0; j4 < matrix.columns; j4++) { - this.set(startRow + i4, startColumn + j4, matrix.get(i4, j4)); - } - } - return this; - } - selection(rowIndices, columnIndices) { - let indices = checkIndices(this, rowIndices, columnIndices); - let newMatrix = new Matrix2(rowIndices.length, columnIndices.length); - for (let i4 = 0; i4 < indices.row.length; i4++) { - let rowIndex = indices.row[i4]; - for (let j4 = 0; j4 < indices.column.length; j4++) { - let columnIndex = indices.column[j4]; - newMatrix.set(i4, j4, this.get(rowIndex, columnIndex)); - } - } - return newMatrix; - } - trace() { - let min13 = Math.min(this.rows, this.columns); - let trace = 0; - for (let i4 = 0; i4 < min13; i4++) { - trace += this.get(i4, i4); - } - return trace; - } - clone() { - let newMatrix = new Matrix2(this.rows, this.columns); - for (let row = 0; row < this.rows; row++) { - for (let column = 0; column < this.columns; column++) { - newMatrix.set(row, column, this.get(row, column)); - } - } - return newMatrix; - } - sum(by) { - switch (by) { - case "row": - return sumByRow(this); - case "column": - return sumByColumn(this); - case void 0: - return sumAll(this); - default: - throw new Error(`invalid option: ${by}`); - } - } - product(by) { - switch (by) { - case "row": - return productByRow(this); - case "column": - return productByColumn(this); - case void 0: - return productAll(this); - default: - throw new Error(`invalid option: ${by}`); - } - } - mean(by) { - const sum = this.sum(by); - switch (by) { - case "row": { - for (let i4 = 0; i4 < this.rows; i4++) { - sum[i4] /= this.columns; - } - return sum; - } - case "column": { - for (let i4 = 0; i4 < this.columns; i4++) { - sum[i4] /= this.rows; - } - return sum; - } - case void 0: - return sum / this.size; - default: - throw new Error(`invalid option: ${by}`); - } - } - variance(by, options = {}) { - if (typeof by === "object") { - options = by; - by = void 0; - } - if (typeof options !== "object") { - throw new TypeError("options must be an object"); - } - const { unbiased = true, mean = this.mean(by) } = options; - if (typeof unbiased !== "boolean") { - throw new TypeError("unbiased must be a boolean"); - } - switch (by) { - case "row": { - if (!Array.isArray(mean)) { - throw new TypeError("mean must be an array"); - } - return varianceByRow(this, unbiased, mean); - } - case "column": { - if (!Array.isArray(mean)) { - throw new TypeError("mean must be an array"); - } - return varianceByColumn(this, unbiased, mean); - } - case void 0: { - if (typeof mean !== "number") { - throw new TypeError("mean must be a number"); - } - return varianceAll(this, unbiased, mean); - } - default: - throw new Error(`invalid option: ${by}`); - } - } - standardDeviation(by, options) { - if (typeof by === "object") { - options = by; - by = void 0; - } - const variance = this.variance(by, options); - if (by === void 0) { - return Math.sqrt(variance); - } else { - for (let i4 = 0; i4 < variance.length; i4++) { - variance[i4] = Math.sqrt(variance[i4]); - } - return variance; - } - } - center(by, options = {}) { - if (typeof by === "object") { - options = by; - by = void 0; - } - if (typeof options !== "object") { - throw new TypeError("options must be an object"); - } - const { center: center2 = this.mean(by) } = options; - switch (by) { - case "row": { - if (!Array.isArray(center2)) { - throw new TypeError("center must be an array"); - } - centerByRow(this, center2); - return this; - } - case "column": { - if (!Array.isArray(center2)) { - throw new TypeError("center must be an array"); - } - centerByColumn(this, center2); - return this; - } - case void 0: { - if (typeof center2 !== "number") { - throw new TypeError("center must be a number"); - } - centerAll(this, center2); - return this; - } - default: - throw new Error(`invalid option: ${by}`); - } - } - scale(by, options = {}) { - if (typeof by === "object") { - options = by; - by = void 0; - } - if (typeof options !== "object") { - throw new TypeError("options must be an object"); - } - let scale12 = options.scale; - switch (by) { - case "row": { - if (scale12 === void 0) { - scale12 = getScaleByRow(this); - } else if (!Array.isArray(scale12)) { - throw new TypeError("scale must be an array"); - } - scaleByRow(this, scale12); - return this; - } - case "column": { - if (scale12 === void 0) { - scale12 = getScaleByColumn(this); - } else if (!Array.isArray(scale12)) { - throw new TypeError("scale must be an array"); - } - scaleByColumn(this, scale12); - return this; - } - case void 0: { - if (scale12 === void 0) { - scale12 = getScaleAll(this); - } else if (typeof scale12 !== "number") { - throw new TypeError("scale must be a number"); - } - scaleAll(this, scale12); - return this; - } - default: - throw new Error(`invalid option: ${by}`); - } - } - toString(options) { - return inspectMatrixWithOptions(this, options); - } -}; -AbstractMatrix.prototype.klass = "Matrix"; -if (typeof Symbol !== "undefined") { - AbstractMatrix.prototype[Symbol.for("nodejs.util.inspect.custom")] = inspectMatrix; -} -function compareNumbers(a4, b10) { - return a4 - b10; -} -AbstractMatrix.random = AbstractMatrix.rand; -AbstractMatrix.randomInt = AbstractMatrix.randInt; -AbstractMatrix.diagonal = AbstractMatrix.diag; -AbstractMatrix.prototype.diagonal = AbstractMatrix.prototype.diag; -AbstractMatrix.identity = AbstractMatrix.eye; -AbstractMatrix.prototype.negate = AbstractMatrix.prototype.neg; -AbstractMatrix.prototype.tensorProduct = AbstractMatrix.prototype.kroneckerProduct; -var Matrix2 = class extends AbstractMatrix { - constructor(nRows, nColumns) { - super(); - if (Matrix2.isMatrix(nRows)) { - return nRows.clone(); - } else if (Number.isInteger(nRows) && nRows >= 0) { - this.data = []; - if (Number.isInteger(nColumns) && nColumns >= 0) { - for (let i4 = 0; i4 < nRows; i4++) { - this.data.push(new Float64Array(nColumns)); - } - } else { - throw new TypeError("nColumns must be a positive integer"); - } - } else if (Array.isArray(nRows)) { - const arrayData = nRows; - nRows = arrayData.length; - nColumns = nRows ? arrayData[0].length : 0; - if (typeof nColumns !== "number") { - throw new TypeError("Data must be a 2D array with at least one element"); - } - this.data = []; - for (let i4 = 0; i4 < nRows; i4++) { - if (arrayData[i4].length !== nColumns) { - throw new RangeError("Inconsistent array dimensions"); - } - this.data.push(Float64Array.from(arrayData[i4])); - } - } else { - throw new TypeError("First argument must be a positive number or an array"); - } - this.rows = nRows; - this.columns = nColumns; - } - set(rowIndex, columnIndex, value2) { - this.data[rowIndex][columnIndex] = value2; - return this; - } - get(rowIndex, columnIndex) { - return this.data[rowIndex][columnIndex]; - } - removeRow(index2) { - checkRowIndex(this, index2); - this.data.splice(index2, 1); - this.rows -= 1; - return this; - } - addRow(index2, array) { - if (array === void 0) { - array = index2; - index2 = this.rows; - } - checkRowIndex(this, index2, true); - array = Float64Array.from(checkRowVector(this, array)); - this.data.splice(index2, 0, array); - this.rows += 1; - return this; - } - removeColumn(index2) { - checkColumnIndex(this, index2); - for (let i4 = 0; i4 < this.rows; i4++) { - const newRow = new Float64Array(this.columns - 1); - for (let j4 = 0; j4 < index2; j4++) { - newRow[j4] = this.data[i4][j4]; - } - for (let j4 = index2 + 1; j4 < this.columns; j4++) { - newRow[j4 - 1] = this.data[i4][j4]; - } - this.data[i4] = newRow; - } - this.columns -= 1; - return this; - } - addColumn(index2, array) { - if (typeof array === "undefined") { - array = index2; - index2 = this.columns; - } - checkColumnIndex(this, index2, true); - array = checkColumnVector(this, array); - for (let i4 = 0; i4 < this.rows; i4++) { - const newRow = new Float64Array(this.columns + 1); - let j4 = 0; - for (; j4 < index2; j4++) { - newRow[j4] = this.data[i4][j4]; - } - newRow[j4++] = array[i4]; - for (; j4 < this.columns + 1; j4++) { - newRow[j4] = this.data[i4][j4 - 1]; - } - this.data[i4] = newRow; - } - this.columns += 1; - return this; - } -}; -installMathOperations(AbstractMatrix, Matrix2); - -// node_modules/ml-matrix/src/wrap/WrapperMatrix2D.js -var WrapperMatrix2D = class extends AbstractMatrix { - constructor(data3) { - super(); - this.data = data3; - this.rows = data3.length; - this.columns = data3[0].length; - } - set(rowIndex, columnIndex, value2) { - this.data[rowIndex][columnIndex] = value2; - return this; - } - get(rowIndex, columnIndex) { - return this.data[rowIndex][columnIndex]; - } -}; - -// node_modules/ml-matrix/src/dc/util.js -function hypotenuse(a4, b10) { - let r4 = 0; - if (Math.abs(a4) > Math.abs(b10)) { - r4 = b10 / a4; - return Math.abs(a4) * Math.sqrt(1 + r4 * r4); - } - if (b10 !== 0) { - r4 = a4 / b10; - return Math.abs(b10) * Math.sqrt(1 + r4 * r4); - } - return 0; -} - -// node_modules/ml-matrix/src/dc/svd.js -var SingularValueDecomposition = class { - constructor(value2, options = {}) { - value2 = WrapperMatrix2D.checkMatrix(value2); - if (value2.isEmpty()) { - throw new Error("Matrix must be non-empty"); - } - let m4 = value2.rows; - let n3 = value2.columns; - const { - computeLeftSingularVectors = true, - computeRightSingularVectors = true, - autoTranspose = false - } = options; - let wantu = Boolean(computeLeftSingularVectors); - let wantv = Boolean(computeRightSingularVectors); - let swapped = false; - let a4; - if (m4 < n3) { - if (!autoTranspose) { - a4 = value2.clone(); - console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose"); - } else { - a4 = value2.transpose(); - m4 = a4.rows; - n3 = a4.columns; - swapped = true; - let aux = wantu; - wantu = wantv; - wantv = aux; - } - } else { - a4 = value2.clone(); - } - let nu = Math.min(m4, n3); - let ni = Math.min(m4 + 1, n3); - let s4 = new Float64Array(ni); - let U2 = new Matrix2(m4, nu); - let V2 = new Matrix2(n3, n3); - let e4 = new Float64Array(n3); - let work = new Float64Array(m4); - let si = new Float64Array(ni); - for (let i4 = 0; i4 < ni; i4++) - si[i4] = i4; - let nct = Math.min(m4 - 1, n3); - let nrt = Math.max(0, Math.min(n3 - 2, m4)); - let mrc = Math.max(nct, nrt); - for (let k4 = 0; k4 < mrc; k4++) { - if (k4 < nct) { - s4[k4] = 0; - for (let i4 = k4; i4 < m4; i4++) { - s4[k4] = hypotenuse(s4[k4], a4.get(i4, k4)); - } - if (s4[k4] !== 0) { - if (a4.get(k4, k4) < 0) { - s4[k4] = -s4[k4]; - } - for (let i4 = k4; i4 < m4; i4++) { - a4.set(i4, k4, a4.get(i4, k4) / s4[k4]); - } - a4.set(k4, k4, a4.get(k4, k4) + 1); - } - s4[k4] = -s4[k4]; - } - for (let j4 = k4 + 1; j4 < n3; j4++) { - if (k4 < nct && s4[k4] !== 0) { - let t4 = 0; - for (let i4 = k4; i4 < m4; i4++) { - t4 += a4.get(i4, k4) * a4.get(i4, j4); - } - t4 = -t4 / a4.get(k4, k4); - for (let i4 = k4; i4 < m4; i4++) { - a4.set(i4, j4, a4.get(i4, j4) + t4 * a4.get(i4, k4)); - } - } - e4[j4] = a4.get(k4, j4); - } - if (wantu && k4 < nct) { - for (let i4 = k4; i4 < m4; i4++) { - U2.set(i4, k4, a4.get(i4, k4)); - } - } - if (k4 < nrt) { - e4[k4] = 0; - for (let i4 = k4 + 1; i4 < n3; i4++) { - e4[k4] = hypotenuse(e4[k4], e4[i4]); - } - if (e4[k4] !== 0) { - if (e4[k4 + 1] < 0) { - e4[k4] = 0 - e4[k4]; - } - for (let i4 = k4 + 1; i4 < n3; i4++) { - e4[i4] /= e4[k4]; - } - e4[k4 + 1] += 1; - } - e4[k4] = -e4[k4]; - if (k4 + 1 < m4 && e4[k4] !== 0) { - for (let i4 = k4 + 1; i4 < m4; i4++) { - work[i4] = 0; - } - for (let i4 = k4 + 1; i4 < m4; i4++) { - for (let j4 = k4 + 1; j4 < n3; j4++) { - work[i4] += e4[j4] * a4.get(i4, j4); - } - } - for (let j4 = k4 + 1; j4 < n3; j4++) { - let t4 = -e4[j4] / e4[k4 + 1]; - for (let i4 = k4 + 1; i4 < m4; i4++) { - a4.set(i4, j4, a4.get(i4, j4) + t4 * work[i4]); - } - } - } - if (wantv) { - for (let i4 = k4 + 1; i4 < n3; i4++) { - V2.set(i4, k4, e4[i4]); - } - } - } - } - let p4 = Math.min(n3, m4 + 1); - if (nct < n3) { - s4[nct] = a4.get(nct, nct); - } - if (m4 < p4) { - s4[p4 - 1] = 0; - } - if (nrt + 1 < p4) { - e4[nrt] = a4.get(nrt, p4 - 1); - } - e4[p4 - 1] = 0; - if (wantu) { - for (let j4 = nct; j4 < nu; j4++) { - for (let i4 = 0; i4 < m4; i4++) { - U2.set(i4, j4, 0); - } - U2.set(j4, j4, 1); - } - for (let k4 = nct - 1; k4 >= 0; k4--) { - if (s4[k4] !== 0) { - for (let j4 = k4 + 1; j4 < nu; j4++) { - let t4 = 0; - for (let i4 = k4; i4 < m4; i4++) { - t4 += U2.get(i4, k4) * U2.get(i4, j4); - } - t4 = -t4 / U2.get(k4, k4); - for (let i4 = k4; i4 < m4; i4++) { - U2.set(i4, j4, U2.get(i4, j4) + t4 * U2.get(i4, k4)); - } - } - for (let i4 = k4; i4 < m4; i4++) { - U2.set(i4, k4, -U2.get(i4, k4)); - } - U2.set(k4, k4, 1 + U2.get(k4, k4)); - for (let i4 = 0; i4 < k4 - 1; i4++) { - U2.set(i4, k4, 0); - } - } else { - for (let i4 = 0; i4 < m4; i4++) { - U2.set(i4, k4, 0); - } - U2.set(k4, k4, 1); - } - } - } - if (wantv) { - for (let k4 = n3 - 1; k4 >= 0; k4--) { - if (k4 < nrt && e4[k4] !== 0) { - for (let j4 = k4 + 1; j4 < n3; j4++) { - let t4 = 0; - for (let i4 = k4 + 1; i4 < n3; i4++) { - t4 += V2.get(i4, k4) * V2.get(i4, j4); - } - t4 = -t4 / V2.get(k4 + 1, k4); - for (let i4 = k4 + 1; i4 < n3; i4++) { - V2.set(i4, j4, V2.get(i4, j4) + t4 * V2.get(i4, k4)); - } - } - } - for (let i4 = 0; i4 < n3; i4++) { - V2.set(i4, k4, 0); - } - V2.set(k4, k4, 1); - } - } - let pp = p4 - 1; - let iter = 0; - let eps2 = Number.EPSILON; - while (p4 > 0) { - let k4, kase; - for (k4 = p4 - 2; k4 >= -1; k4--) { - if (k4 === -1) { - break; - } - const alpha = Number.MIN_VALUE + eps2 * Math.abs(s4[k4] + Math.abs(s4[k4 + 1])); - if (Math.abs(e4[k4]) <= alpha || Number.isNaN(e4[k4])) { - e4[k4] = 0; - break; - } - } - if (k4 === p4 - 2) { - kase = 4; - } else { - let ks; - for (ks = p4 - 1; ks >= k4; ks--) { - if (ks === k4) { - break; - } - let t4 = (ks !== p4 ? Math.abs(e4[ks]) : 0) + (ks !== k4 + 1 ? Math.abs(e4[ks - 1]) : 0); - if (Math.abs(s4[ks]) <= eps2 * t4) { - s4[ks] = 0; - break; - } - } - if (ks === k4) { - kase = 3; - } else if (ks === p4 - 1) { - kase = 1; - } else { - kase = 2; - k4 = ks; - } - } - k4++; - switch (kase) { - case 1: { - let f3 = e4[p4 - 2]; - e4[p4 - 2] = 0; - for (let j4 = p4 - 2; j4 >= k4; j4--) { - let t4 = hypotenuse(s4[j4], f3); - let cs = s4[j4] / t4; - let sn = f3 / t4; - s4[j4] = t4; - if (j4 !== k4) { - f3 = -sn * e4[j4 - 1]; - e4[j4 - 1] = cs * e4[j4 - 1]; - } - if (wantv) { - for (let i4 = 0; i4 < n3; i4++) { - t4 = cs * V2.get(i4, j4) + sn * V2.get(i4, p4 - 1); - V2.set(i4, p4 - 1, -sn * V2.get(i4, j4) + cs * V2.get(i4, p4 - 1)); - V2.set(i4, j4, t4); - } - } - } - break; - } - case 2: { - let f3 = e4[k4 - 1]; - e4[k4 - 1] = 0; - for (let j4 = k4; j4 < p4; j4++) { - let t4 = hypotenuse(s4[j4], f3); - let cs = s4[j4] / t4; - let sn = f3 / t4; - s4[j4] = t4; - f3 = -sn * e4[j4]; - e4[j4] = cs * e4[j4]; - if (wantu) { - for (let i4 = 0; i4 < m4; i4++) { - t4 = cs * U2.get(i4, j4) + sn * U2.get(i4, k4 - 1); - U2.set(i4, k4 - 1, -sn * U2.get(i4, j4) + cs * U2.get(i4, k4 - 1)); - U2.set(i4, j4, t4); - } - } - } - break; - } - case 3: { - const scale12 = Math.max(Math.abs(s4[p4 - 1]), Math.abs(s4[p4 - 2]), Math.abs(e4[p4 - 2]), Math.abs(s4[k4]), Math.abs(e4[k4])); - const sp = s4[p4 - 1] / scale12; - const spm1 = s4[p4 - 2] / scale12; - const epm1 = e4[p4 - 2] / scale12; - const sk = s4[k4] / scale12; - const ek = e4[k4] / scale12; - const b10 = ((spm1 + sp) * (spm1 - sp) + epm1 * epm1) / 2; - const c5 = sp * epm1 * (sp * epm1); - let shift = 0; - if (b10 !== 0 || c5 !== 0) { - if (b10 < 0) { - shift = 0 - Math.sqrt(b10 * b10 + c5); - } else { - shift = Math.sqrt(b10 * b10 + c5); - } - shift = c5 / (b10 + shift); - } - let f3 = (sk + sp) * (sk - sp) + shift; - let g4 = sk * ek; - for (let j4 = k4; j4 < p4 - 1; j4++) { - let t4 = hypotenuse(f3, g4); - if (t4 === 0) - t4 = Number.MIN_VALUE; - let cs = f3 / t4; - let sn = g4 / t4; - if (j4 !== k4) { - e4[j4 - 1] = t4; - } - f3 = cs * s4[j4] + sn * e4[j4]; - e4[j4] = cs * e4[j4] - sn * s4[j4]; - g4 = sn * s4[j4 + 1]; - s4[j4 + 1] = cs * s4[j4 + 1]; - if (wantv) { - for (let i4 = 0; i4 < n3; i4++) { - t4 = cs * V2.get(i4, j4) + sn * V2.get(i4, j4 + 1); - V2.set(i4, j4 + 1, -sn * V2.get(i4, j4) + cs * V2.get(i4, j4 + 1)); - V2.set(i4, j4, t4); - } - } - t4 = hypotenuse(f3, g4); - if (t4 === 0) - t4 = Number.MIN_VALUE; - cs = f3 / t4; - sn = g4 / t4; - s4[j4] = t4; - f3 = cs * e4[j4] + sn * s4[j4 + 1]; - s4[j4 + 1] = -sn * e4[j4] + cs * s4[j4 + 1]; - g4 = sn * e4[j4 + 1]; - e4[j4 + 1] = cs * e4[j4 + 1]; - if (wantu && j4 < m4 - 1) { - for (let i4 = 0; i4 < m4; i4++) { - t4 = cs * U2.get(i4, j4) + sn * U2.get(i4, j4 + 1); - U2.set(i4, j4 + 1, -sn * U2.get(i4, j4) + cs * U2.get(i4, j4 + 1)); - U2.set(i4, j4, t4); - } - } - } - e4[p4 - 2] = f3; - iter = iter + 1; - break; - } - case 4: { - if (s4[k4] <= 0) { - s4[k4] = s4[k4] < 0 ? -s4[k4] : 0; - if (wantv) { - for (let i4 = 0; i4 <= pp; i4++) { - V2.set(i4, k4, -V2.get(i4, k4)); - } - } - } - while (k4 < pp) { - if (s4[k4] >= s4[k4 + 1]) { - break; - } - let t4 = s4[k4]; - s4[k4] = s4[k4 + 1]; - s4[k4 + 1] = t4; - if (wantv && k4 < n3 - 1) { - for (let i4 = 0; i4 < n3; i4++) { - t4 = V2.get(i4, k4 + 1); - V2.set(i4, k4 + 1, V2.get(i4, k4)); - V2.set(i4, k4, t4); - } - } - if (wantu && k4 < m4 - 1) { - for (let i4 = 0; i4 < m4; i4++) { - t4 = U2.get(i4, k4 + 1); - U2.set(i4, k4 + 1, U2.get(i4, k4)); - U2.set(i4, k4, t4); - } - } - k4++; - } - iter = 0; - p4--; - break; - } - } - } - if (swapped) { - let tmp = V2; - V2 = U2; - U2 = tmp; - } - this.m = m4; - this.n = n3; - this.s = s4; - this.U = U2; - this.V = V2; - } - solve(value2) { - let Y2 = value2; - let e4 = this.threshold; - let scols = this.s.length; - let Ls = Matrix2.zeros(scols, scols); - for (let i4 = 0; i4 < scols; i4++) { - if (Math.abs(this.s[i4]) <= e4) { - Ls.set(i4, i4, 0); - } else { - Ls.set(i4, i4, 1 / this.s[i4]); - } - } - let U2 = this.U; - let V2 = this.rightSingularVectors; - let VL = V2.mmul(Ls); - let vrows = V2.rows; - let urows = U2.rows; - let VLU = Matrix2.zeros(vrows, urows); - for (let i4 = 0; i4 < vrows; i4++) { - for (let j4 = 0; j4 < urows; j4++) { - let sum = 0; - for (let k4 = 0; k4 < scols; k4++) { - sum += VL.get(i4, k4) * U2.get(j4, k4); - } - VLU.set(i4, j4, sum); - } - } - return VLU.mmul(Y2); - } - solveForDiagonal(value2) { - return this.solve(Matrix2.diag(value2)); - } - inverse() { - let V2 = this.V; - let e4 = this.threshold; - let vrows = V2.rows; - let vcols = V2.columns; - let X2 = new Matrix2(vrows, this.s.length); - for (let i4 = 0; i4 < vrows; i4++) { - for (let j4 = 0; j4 < vcols; j4++) { - if (Math.abs(this.s[j4]) > e4) { - X2.set(i4, j4, V2.get(i4, j4) / this.s[j4]); - } - } - } - let U2 = this.U; - let urows = U2.rows; - let ucols = U2.columns; - let Y2 = new Matrix2(vrows, urows); - for (let i4 = 0; i4 < vrows; i4++) { - for (let j4 = 0; j4 < urows; j4++) { - let sum = 0; - for (let k4 = 0; k4 < ucols; k4++) { - sum += X2.get(i4, k4) * U2.get(j4, k4); - } - Y2.set(i4, j4, sum); - } - } - return Y2; - } - get condition() { - return this.s[0] / this.s[Math.min(this.m, this.n) - 1]; - } - get norm2() { - return this.s[0]; - } - get rank() { - let tol = Math.max(this.m, this.n) * this.s[0] * Number.EPSILON; - let r4 = 0; - let s4 = this.s; - for (let i4 = 0, ii = s4.length; i4 < ii; i4++) { - if (s4[i4] > tol) { - r4++; - } - } - return r4; - } - get diagonal() { - return Array.from(this.s); - } - get threshold() { - return Number.EPSILON / 2 * Math.max(this.m, this.n) * this.s[0]; - } - get leftSingularVectors() { - return this.U; - } - get rightSingularVectors() { - return this.V; - } - get diagonalMatrix() { - return Matrix2.diag(this.s); - } -}; - -// node_modules/@antv/layout/es/layout/radial/mds.js -var MDS = class { - constructor(params) { - this.distances = params.distances; - this.dimension = params.dimension || 2; - this.linkDistance = params.linkDistance; - } - layout() { - const self2 = this; - const { dimension, distances, linkDistance } = self2; - try { - const M3 = Matrix2.mul(Matrix2.pow(distances, 2), -0.5); - const rowMeans = M3.mean("row"); - const colMeans = M3.mean("column"); - const totalMean = M3.mean(); - M3.add(totalMean).subRowVector(rowMeans).subColumnVector(colMeans); - const ret = new SingularValueDecomposition(M3); - const eigenValues = Matrix2.sqrt(ret.diagonalMatrix).diagonal(); - return ret.leftSingularVectors.toJSON().map((row) => { - return Matrix2.mul([row], [eigenValues]).toJSON()[0].splice(0, dimension); - }); - } catch (_a6) { - const res = []; - for (let i4 = 0; i4 < distances.length; i4++) { - const x6 = Math.random() * linkDistance; - const y5 = Math.random() * linkDistance; - res.push([x6, y5]); - } - return res; - } - } -}; - -// node_modules/@antv/layout/es/layout/radial/radialNonoverlapForce.js -var SPEED_DIVISOR = 800; -var RadialNonoverlapForce = class { - constructor(params) { - this.disp = []; - this.positions = params.positions; - this.adjMatrix = params.adjMatrix; - this.focusID = params.focusID; - this.radii = params.radii; - this.iterations = params.iterations || 10; - this.height = params.height || 10; - this.width = params.width || 10; - this.speed = params.speed || 100; - this.gravity = params.gravity || 10; - this.nodeSizeFunc = params.nodeSizeFunc; - this.k = params.k || 5; - this.strictRadial = params.strictRadial; - this.nodes = params.nodes; - } - layout() { - const self2 = this; - const positions = self2.positions; - const disp = []; - const iterations = self2.iterations; - const maxDisplace = self2.width / 10; - self2.maxDisplace = maxDisplace; - self2.disp = disp; - for (let i4 = 0; i4 < iterations; i4++) { - positions.forEach((_8, k4) => { - disp[k4] = { x: 0, y: 0 }; - }); - self2.getRepulsion(); - self2.updatePositions(); - } - return positions; - } - getRepulsion() { - const self2 = this; - const positions = self2.positions; - const nodes = self2.nodes; - const disp = self2.disp; - const k4 = self2.k; - const radii = self2.radii || []; - positions.forEach((v3, i4) => { - disp[i4] = { x: 0, y: 0 }; - positions.forEach((u3, j4) => { - if (i4 === j4) { - return; - } - if (radii[i4] !== radii[j4]) { - return; - } - let vecx = v3[0] - u3[0]; - let vecy = v3[1] - u3[1]; - let vecLength = Math.sqrt(vecx * vecx + vecy * vecy); - if (vecLength === 0) { - vecLength = 1; - const sign = i4 > j4 ? 1 : -1; - vecx = 0.01 * sign; - vecy = 0.01 * sign; - } - if (vecLength < self2.nodeSizeFunc(nodes[i4]) / 2 + self2.nodeSizeFunc(nodes[j4]) / 2) { - const common2 = k4 * k4 / vecLength; - disp[i4].x += vecx / vecLength * common2; - disp[i4].y += vecy / vecLength * common2; - } - }); - }); - } - updatePositions() { - const self2 = this; - const positions = self2.positions; - const disp = self2.disp; - const speed = self2.speed; - const strictRadial = self2.strictRadial; - const f3 = self2.focusID; - const maxDisplace = self2.maxDisplace || self2.width / 10; - if (strictRadial) { - disp.forEach((di, i4) => { - const vx = positions[i4][0] - positions[f3][0]; - const vy = positions[i4][1] - positions[f3][1]; - const vLength = Math.sqrt(vx * vx + vy * vy); - let vpx = vy / vLength; - let vpy = -vx / vLength; - const diLength = Math.sqrt(di.x * di.x + di.y * di.y); - let alpha = Math.acos((vpx * di.x + vpy * di.y) / diLength); - if (alpha > Math.PI / 2) { - alpha -= Math.PI / 2; - vpx *= -1; - vpy *= -1; - } - const tdispLength = Math.cos(alpha) * diLength; - di.x = vpx * tdispLength; - di.y = vpy * tdispLength; - }); - } - const radii = self2.radii; - positions.forEach((n3, i4) => { - if (i4 === f3) { - return; - } - const distLength = Math.sqrt(disp[i4].x * disp[i4].x + disp[i4].y * disp[i4].y); - if (distLength > 0 && i4 !== f3) { - const limitedDist = Math.min(maxDisplace * (speed / SPEED_DIVISOR), distLength); - n3[0] += disp[i4].x / distLength * limitedDist; - n3[1] += disp[i4].y / distLength * limitedDist; - if (strictRadial) { - let vx = n3[0] - positions[f3][0]; - let vy = n3[1] - positions[f3][1]; - const nfDis = Math.sqrt(vx * vx + vy * vy); - vx = vx / nfDis * radii[i4]; - vy = vy / nfDis * radii[i4]; - n3[0] = positions[f3][0] + vx; - n3[1] = positions[f3][1] + vy; - } - } - }); - } -}; - -// node_modules/@antv/layout/es/layout/radial/radial.js -function getWeightMatrix(M3) { - const rows = M3.length; - const cols = M3[0].length; - const result = []; - for (let i4 = 0; i4 < rows; i4++) { - const row = []; - for (let j4 = 0; j4 < cols; j4++) { - if (M3[i4][j4] !== 0) { - row.push(1 / (M3[i4][j4] * M3[i4][j4])); - } else { - row.push(0); - } - } - result.push(row); - } - return result; -} -function getIndexById(array, id) { - let index2 = -1; - array.forEach((a4, i4) => { - if (a4.id === id) { - index2 = i4; - } - }); - return index2; -} -function getEDistance(p1, p22) { - return Math.sqrt((p1[0] - p22[0]) * (p1[0] - p22[0]) + (p1[1] - p22[1]) * (p1[1] - p22[1])); -} -var RadialLayout = class extends Base3 { - constructor(options) { - super(); - this.maxIteration = 1e3; - this.focusNode = null; - this.unitRadius = null; - this.linkDistance = 50; - this.preventOverlap = false; - this.strictRadial = true; - this.maxPreventOverlapIteration = 200; - this.sortStrength = 10; - this.nodes = []; - this.edges = []; - this.updateCfg(options); - } - getDefaultCfg() { - return { - maxIteration: 1e3, - focusNode: null, - unitRadius: null, - linkDistance: 50, - preventOverlap: false, - nodeSize: void 0, - nodeSpacing: void 0, - strictRadial: true, - maxPreventOverlapIteration: 200, - sortBy: void 0, - sortStrength: 10 - }; - } - execute() { - const self2 = this; - const nodes = self2.nodes; - const edges = self2.edges || []; - if (!nodes || nodes.length === 0) { - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - if (!self2.width && typeof window !== "undefined") { - self2.width = window.innerWidth; - } - if (!self2.height && typeof window !== "undefined") { - self2.height = window.innerHeight; - } - if (!self2.center) { - self2.center = [self2.width / 2, self2.height / 2]; - } - const center2 = self2.center; - if (nodes.length === 1) { - nodes[0].x = center2[0]; - nodes[0].y = center2[1]; - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - const linkDistance = self2.linkDistance; - let focusNode = null; - if (isString50(self2.focusNode)) { - let found = false; - for (let i4 = 0; i4 < nodes.length; i4++) { - if (nodes[i4].id === self2.focusNode) { - focusNode = nodes[i4]; - self2.focusNode = focusNode; - found = true; - i4 = nodes.length; - } - } - if (!found) { - focusNode = null; - } - } else { - focusNode = self2.focusNode; - } - if (!focusNode) { - focusNode = nodes[0]; - self2.focusNode = focusNode; - } - const focusIndex = getIndexById(nodes, focusNode.id); - self2.focusIndex = focusIndex; - const adjMatrix3 = getAdjMatrix3({ nodes, edges }, false); - const D3 = floydWarshall5(adjMatrix3); - const maxDistance = self2.maxToFocus(D3, focusIndex); - self2.handleInfinity(D3, focusIndex, maxDistance + 1); - self2.distances = D3; - const focusNodeD = D3[focusIndex]; - const width2 = self2.width || 500; - const height = self2.height || 500; - let semiWidth = width2 - center2[0] > center2[0] ? center2[0] : width2 - center2[0]; - let semiHeight = height - center2[1] > center2[1] ? center2[1] : height - center2[1]; - if (semiWidth === 0) { - semiWidth = width2 / 2; - } - if (semiHeight === 0) { - semiHeight = height / 2; - } - const maxRadius = semiHeight > semiWidth ? semiWidth : semiHeight; - const maxD = Math.max(...focusNodeD); - const radii = []; - focusNodeD.forEach((value2, i4) => { - if (!self2.unitRadius) { - self2.unitRadius = maxRadius / maxD; - } - radii[i4] = value2 * self2.unitRadius; - }); - self2.radii = radii; - const eIdealD = self2.eIdealDisMatrix(); - self2.eIdealDistances = eIdealD; - const W2 = getWeightMatrix(eIdealD); - self2.weights = W2; - const mds = new MDS({ linkDistance, distances: eIdealD }); - let positions = mds.layout(); - positions.forEach((p4) => { - if (isNaN4(p4[0])) { - p4[0] = Math.random() * linkDistance; - } - if (isNaN4(p4[1])) { - p4[1] = Math.random() * linkDistance; - } - }); - self2.positions = positions; - positions.forEach((p4, i4) => { - nodes[i4].x = p4[0] + center2[0]; - nodes[i4].y = p4[1] + center2[1]; - }); - positions.forEach((p4) => { - p4[0] -= positions[focusIndex][0]; - p4[1] -= positions[focusIndex][1]; - }); - self2.run(); - const preventOverlap = self2.preventOverlap; - const nodeSize = self2.nodeSize; - let nodeSizeFunc; - const strictRadial = self2.strictRadial; - if (preventOverlap) { - const nodeSpacing = self2.nodeSpacing; - let nodeSpacingFunc; - if (isNumber45(nodeSpacing)) { - nodeSpacingFunc = () => nodeSpacing; - } else if (isFunction41(nodeSpacing)) { - nodeSpacingFunc = nodeSpacing; - } else { - nodeSpacingFunc = () => 0; - } - if (!nodeSize) { - nodeSizeFunc = (d3) => { - if (d3.size) { - if (isArray82(d3.size)) { - const res = d3.size[0] > d3.size[1] ? d3.size[0] : d3.size[1]; - return res + nodeSpacingFunc(d3); - } - if (isObject26(d3.size)) { - const res = d3.size.width > d3.size.height ? d3.size.width : d3.size.height; - return res + nodeSpacingFunc(d3); - } - return d3.size + nodeSpacingFunc(d3); - } - return 10 + nodeSpacingFunc(d3); - }; - } else if (isArray82(nodeSize)) { - nodeSizeFunc = (d3) => { - const res = nodeSize[0] > nodeSize[1] ? nodeSize[0] : nodeSize[1]; - return res + nodeSpacingFunc(d3); - }; - } else { - nodeSizeFunc = (d3) => nodeSize + nodeSpacingFunc(d3); - } - const nonoverlapForceParams = { - nodes, - nodeSizeFunc, - adjMatrix: adjMatrix3, - positions, - radii, - height, - width: width2, - strictRadial, - focusID: focusIndex, - iterations: self2.maxPreventOverlapIteration || 200, - k: positions.length / 4.5 - }; - const nonoverlapForce = new RadialNonoverlapForce(nonoverlapForceParams); - positions = nonoverlapForce.layout(); - } - positions.forEach((p4, i4) => { - nodes[i4].x = p4[0] + center2[0]; - nodes[i4].y = p4[1] + center2[1]; - }); - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return { - nodes, - edges - }; - } - run() { - const self2 = this; - const maxIteration = self2.maxIteration; - const positions = self2.positions || []; - const W2 = self2.weights || []; - const eIdealDis = self2.eIdealDistances || []; - const radii = self2.radii || []; - for (let i4 = 0; i4 <= maxIteration; i4++) { - const param = i4 / maxIteration; - self2.oneIteration(param, positions, radii, eIdealDis, W2); - } - } - oneIteration(param, positions, radii, D3, W2) { - const self2 = this; - const vparam = 1 - param; - const focusIndex = self2.focusIndex; - positions.forEach((v3, i4) => { - const originDis = getEDistance(v3, [0, 0]); - const reciODis = originDis === 0 ? 0 : 1 / originDis; - if (i4 === focusIndex) { - return; - } - let xMolecule = 0; - let yMolecule = 0; - let denominator = 0; - positions.forEach((u3, j4) => { - if (i4 === j4) { - return; - } - const edis = getEDistance(v3, u3); - const reciEdis = edis === 0 ? 0 : 1 / edis; - const idealDis = D3[j4][i4]; - denominator += W2[i4][j4]; - xMolecule += W2[i4][j4] * (u3[0] + idealDis * (v3[0] - u3[0]) * reciEdis); - yMolecule += W2[i4][j4] * (u3[1] + idealDis * (v3[1] - u3[1]) * reciEdis); - }); - const reciR = radii[i4] === 0 ? 0 : 1 / radii[i4]; - denominator *= vparam; - denominator += param * reciR * reciR; - xMolecule *= vparam; - xMolecule += param * reciR * v3[0] * reciODis; - v3[0] = xMolecule / denominator; - yMolecule *= vparam; - yMolecule += param * reciR * v3[1] * reciODis; - v3[1] = yMolecule / denominator; - }); - } - eIdealDisMatrix() { - const self2 = this; - const nodes = self2.nodes; - if (!nodes) - return []; - const D3 = self2.distances; - const linkDis = self2.linkDistance; - const radii = self2.radii || []; - const unitRadius = self2.unitRadius || 50; - const result = []; - if (D3) { - D3.forEach((row, i4) => { - const newRow = []; - row.forEach((v3, j4) => { - if (i4 === j4) { - newRow.push(0); - } else if (radii[i4] === radii[j4]) { - if (self2.sortBy === "data") { - newRow.push(v3 * (Math.abs(i4 - j4) * self2.sortStrength) / (radii[i4] / unitRadius)); - } else if (self2.sortBy) { - let iValue = nodes[i4][self2.sortBy] || 0; - let jValue = nodes[j4][self2.sortBy] || 0; - if (isString50(iValue)) { - iValue = iValue.charCodeAt(0); - } - if (isString50(jValue)) { - jValue = jValue.charCodeAt(0); - } - newRow.push(v3 * (Math.abs(iValue - jValue) * self2.sortStrength) / (radii[i4] / unitRadius)); - } else { - newRow.push(v3 * linkDis / (radii[i4] / unitRadius)); - } - } else { - const link = (linkDis + unitRadius) / 2; - newRow.push(v3 * link); - } - }); - result.push(newRow); - }); - } - return result; - } - handleInfinity(matrix, focusIndex, step) { - const length5 = matrix.length; - for (let i4 = 0; i4 < length5; i4++) { - if (matrix[focusIndex][i4] === Infinity) { - matrix[focusIndex][i4] = step; - matrix[i4][focusIndex] = step; - for (let j4 = 0; j4 < length5; j4++) { - if (matrix[i4][j4] !== Infinity && matrix[focusIndex][j4] === Infinity) { - matrix[focusIndex][j4] = step + matrix[i4][j4]; - matrix[j4][focusIndex] = step + matrix[i4][j4]; - } - } - } - } - for (let i4 = 0; i4 < length5; i4++) { - if (i4 === focusIndex) { - continue; - } - for (let j4 = 0; j4 < length5; j4++) { - if (matrix[i4][j4] === Infinity) { - let minus = Math.abs(matrix[focusIndex][i4] - matrix[focusIndex][j4]); - minus = minus === 0 ? 1 : minus; - matrix[i4][j4] = minus; - } - } - } - } - maxToFocus(matrix, focusIndex) { - let max15 = 0; - for (let i4 = 0; i4 < matrix[focusIndex].length; i4++) { - if (matrix[focusIndex][i4] === Infinity) { - continue; - } - max15 = matrix[focusIndex][i4] > max15 ? matrix[focusIndex][i4] : max15; - } - return max15; - } - getType() { - return "radial"; - } -}; - -// node_modules/@antv/layout/es/layout/concentric.js -var ConcentricLayout = class extends Base3 { - constructor(options) { - super(); - this.nodeSize = 30; - this.minNodeSpacing = 10; - this.preventOverlap = false; - this.equidistant = false; - this.startAngle = 3 / 2 * Math.PI; - this.clockwise = true; - this.sortBy = "degree"; - this.nodes = []; - this.edges = []; - this.width = 300; - this.height = 300; - this.onLayoutEnd = () => { - }; - this.updateCfg(options); - } - getDefaultCfg() { - return { - nodeSize: 30, - minNodeSpacing: 10, - preventOverlap: false, - sweep: void 0, - equidistant: false, - startAngle: 3 / 2 * Math.PI, - clockwise: true, - maxLevelDiff: void 0, - sortBy: "degree" - }; - } - execute() { - const self2 = this; - const nodes = self2.nodes; - const edges = self2.edges; - const n3 = nodes.length; - if (n3 === 0) { - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - if (!self2.width && typeof window !== "undefined") { - self2.width = window.innerWidth; - } - if (!self2.height && typeof window !== "undefined") { - self2.height = window.innerHeight; - } - if (!self2.center) { - self2.center = [self2.width / 2, self2.height / 2]; - } - const center2 = self2.center; - if (n3 === 1) { - nodes[0].x = center2[0]; - nodes[0].y = center2[1]; - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - const layoutNodes2 = []; - let maxNodeSize; - if (isArray82(self2.nodeSize)) { - maxNodeSize = Math.max(self2.nodeSize[0], self2.nodeSize[1]); - } else { - maxNodeSize = self2.nodeSize; - } - nodes.forEach((node) => { - layoutNodes2.push(node); - let nodeSize = maxNodeSize; - if (isArray82(node.size)) { - nodeSize = Math.max(node.size[0], node.size[1]); - } else if (isNumber45(node.size)) { - nodeSize = node.size; - } else if (isObject26(node.size)) { - nodeSize = Math.max(node.size.width, node.size.height); - } - maxNodeSize = Math.max(maxNodeSize, nodeSize); - }); - self2.clockwise = self2.counterclockwise !== void 0 ? !self2.counterclockwise : self2.clockwise; - const nodeMap = {}; - const indexMap = {}; - layoutNodes2.forEach((node, i4) => { - nodeMap[node.id] = node; - indexMap[node.id] = i4; - }); - if (self2.sortBy === "degree" || !isString50(self2.sortBy) || layoutNodes2[0][self2.sortBy] === void 0) { - self2.sortBy = "degree"; - if (!isNumber45(nodes[0].degree)) { - const values4 = getDegree3(nodes.length, indexMap, edges); - layoutNodes2.forEach((node, i4) => { - node.degree = values4[i4]; - }); - } - } - layoutNodes2.sort((n1, n22) => n22[self2.sortBy] - n1[self2.sortBy]); - self2.maxValueNode = layoutNodes2[0]; - self2.maxLevelDiff = self2.maxLevelDiff || self2.maxValueNode[self2.sortBy] / 4; - const levels = [[]]; - let currentLevel = levels[0]; - layoutNodes2.forEach((node) => { - if (currentLevel.length > 0) { - const diff2 = Math.abs(currentLevel[0][self2.sortBy] - node[self2.sortBy]); - if (self2.maxLevelDiff && diff2 >= self2.maxLevelDiff) { - currentLevel = []; - levels.push(currentLevel); - } - } - currentLevel.push(node); - }); - let minDist = maxNodeSize + self2.minNodeSpacing; - if (!self2.preventOverlap) { - const firstLvlHasMulti = levels.length > 0 && levels[0].length > 1; - const maxR = Math.min(self2.width, self2.height) / 2 - minDist; - const rStep = maxR / (levels.length + (firstLvlHasMulti ? 1 : 0)); - minDist = Math.min(minDist, rStep); - } - let r4 = 0; - levels.forEach((level) => { - let sweep = self2.sweep; - if (sweep === void 0) { - sweep = 2 * Math.PI - 2 * Math.PI / level.length; - } - const dTheta = level.dTheta = sweep / Math.max(1, level.length - 1); - if (level.length > 1 && self2.preventOverlap) { - const dcos = Math.cos(dTheta) - Math.cos(0); - const dsin = Math.sin(dTheta) - Math.sin(0); - const rMin = Math.sqrt(minDist * minDist / (dcos * dcos + dsin * dsin)); - r4 = Math.max(rMin, r4); - } - level.r = r4; - r4 += minDist; - }); - if (self2.equidistant) { - let rDeltaMax = 0; - let rr = 0; - for (let i4 = 0; i4 < levels.length; i4++) { - const level = levels[i4]; - const rDelta = level.r - rr; - rDeltaMax = Math.max(rDeltaMax, rDelta); - } - rr = 0; - levels.forEach((level, i4) => { - if (i4 === 0) { - rr = level.r; - } - level.r = rr; - rr += rDeltaMax; - }); - } - levels.forEach((level) => { - const dTheta = level.dTheta; - const rr = level.r; - level.forEach((node, j4) => { - const theta = self2.startAngle + (self2.clockwise ? 1 : -1) * dTheta * j4; - node.x = center2[0] + rr * Math.cos(theta); - node.y = center2[1] + rr * Math.sin(theta); - }); - }); - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return { - nodes, - edges - }; - } - getType() { - return "concentric"; - } -}; - -// node_modules/@antv/layout/es/layout/mds.js -var MDSLayout = class extends Base3 { - constructor(options) { - super(); - this.center = [0, 0]; - this.linkDistance = 50; - this.nodes = []; - this.edges = []; - this.onLayoutEnd = () => { - }; - this.updateCfg(options); - } - getDefaultCfg() { - return { - center: [0, 0], - linkDistance: 50 - }; - } - execute() { - const self2 = this; - const { nodes, edges = [] } = self2; - const center2 = self2.center; - if (!nodes || nodes.length === 0) { - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - if (nodes.length === 1) { - nodes[0].x = center2[0]; - nodes[0].y = center2[1]; - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - const linkDistance = self2.linkDistance; - const adjMatrix3 = getAdjMatrix3({ nodes, edges }, false); - const distances = floydWarshall5(adjMatrix3); - self2.handleInfinity(distances); - const scaledD = scaleMatrix3(distances, linkDistance); - self2.scaledDistances = scaledD; - const positions = self2.runMDS(); - self2.positions = positions; - positions.forEach((p4, i4) => { - nodes[i4].x = p4[0] + center2[0]; - nodes[i4].y = p4[1] + center2[1]; - }); - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return { - nodes, - edges - }; - } - runMDS() { - const self2 = this; - const dimension = 2; - const distances = self2.scaledDistances; - const M3 = Matrix2.mul(Matrix2.pow(distances, 2), -0.5); - const rowMeans = M3.mean("row"); - const colMeans = M3.mean("column"); - const totalMean = M3.mean(); - M3.add(totalMean).subRowVector(rowMeans).subColumnVector(colMeans); - const ret = new SingularValueDecomposition(M3); - const eigenValues = Matrix2.sqrt(ret.diagonalMatrix).diagonal(); - return ret.leftSingularVectors.toJSON().map((row) => { - return Matrix2.mul([row], [eigenValues]).toJSON()[0].splice(0, dimension); - }); - } - handleInfinity(distances) { - let maxDistance = -999999; - distances.forEach((row) => { - row.forEach((value2) => { - if (value2 === Infinity) { - return; - } - if (maxDistance < value2) { - maxDistance = value2; - } - }); - }); - distances.forEach((row, i4) => { - row.forEach((value2, j4) => { - if (value2 === Infinity) { - distances[i4][j4] = maxDistance; - } - }); - }); - } - getType() { - return "mds"; - } -}; - -// node_modules/@antv/layout/es/layout/fruchterman.js -var SPEED_DIVISOR2 = 800; -var FruchtermanLayout = class extends Base3 { - constructor(options) { - super(); - this.maxIteration = 1e3; - this.workerEnabled = false; - this.gravity = 10; - this.speed = 5; - this.clustering = false; - this.clusterGravity = 10; - this.nodes = []; - this.edges = []; - this.width = 300; - this.height = 300; - this.nodeMap = {}; - this.nodeIdxMap = {}; - this.onLayoutEnd = () => { - }; - this.tick = () => { - }; - this.updateCfg(options); - } - getDefaultCfg() { - return { - maxIteration: 1e3, - gravity: 10, - speed: 1, - clustering: false, - clusterGravity: 10 - }; - } - execute() { - var _a6, _b; - const self2 = this; - const nodes = self2.nodes; - if (self2.timeInterval !== void 0 && typeof window !== "undefined") { - window.clearInterval(self2.timeInterval); - } - if (!nodes || nodes.length === 0) { - (_a6 = self2.onLayoutEnd) === null || _a6 === void 0 ? void 0 : _a6.call(self2); - return; - } - if (!self2.width && typeof window !== "undefined") { - self2.width = window.innerWidth; - } - if (!self2.height && typeof window !== "undefined") { - self2.height = window.innerHeight; - } - if (!self2.center) { - self2.center = [self2.width / 2, self2.height / 2]; - } - const center2 = self2.center; - if (nodes.length === 1) { - nodes[0].x = center2[0]; - nodes[0].y = center2[1]; - (_b = self2.onLayoutEnd) === null || _b === void 0 ? void 0 : _b.call(self2); - return; - } - const nodeMap = {}; - const nodeIdxMap = {}; - nodes.forEach((node, i4) => { - if (!isNumber45(node.x)) - node.x = Math.random() * this.width; - if (!isNumber45(node.y)) - node.y = Math.random() * this.height; - nodeMap[node.id] = node; - nodeIdxMap[node.id] = i4; - }); - self2.nodeMap = nodeMap; - self2.nodeIdxMap = nodeIdxMap; - return self2.run(); - } - run() { - var _a6; - const self2 = this; - const nodes = self2.nodes; - if (!nodes) - return; - const { edges, maxIteration, workerEnabled, clustering } = self2; - const clusterMap = {}; - if (clustering) { - nodes.forEach((n3) => { - if (clusterMap[n3.cluster] === void 0) { - clusterMap[n3.cluster] = { - name: n3.cluster, - cx: 0, - cy: 0, - count: 0 - }; - } - }); - } - if (workerEnabled) { - for (let i4 = 0; i4 < maxIteration; i4++) { - self2.runOneStep(clusterMap); - } - (_a6 = self2.onLayoutEnd) === null || _a6 === void 0 ? void 0 : _a6.call(self2); - } else { - if (typeof window === "undefined") - return; - let iter = 0; - this.timeInterval = window.setInterval(() => { - var _a7; - self2.runOneStep(clusterMap); - iter++; - if (iter >= maxIteration) { - (_a7 = self2.onLayoutEnd) === null || _a7 === void 0 ? void 0 : _a7.call(self2); - window.clearInterval(self2.timeInterval); - } - }, 0); - } - return { - nodes, - edges - }; - } - runOneStep(clusterMap) { - var _a6; - const self2 = this; - const nodes = self2.nodes; - if (!nodes) - return; - const { edges, center: center2, gravity, speed, clustering } = self2; - const area2 = self2.height * self2.width; - const maxDisplace = Math.sqrt(area2) / 10; - const k22 = area2 / (nodes.length + 1); - const k4 = Math.sqrt(k22); - const displacements = []; - nodes.forEach((_8, j4) => { - displacements[j4] = { x: 0, y: 0 }; - }); - self2.applyCalculate(nodes, edges, displacements, k4, k22); - if (clustering) { - for (const key in clusterMap) { - clusterMap[key].cx = 0; - clusterMap[key].cy = 0; - clusterMap[key].count = 0; - } - nodes.forEach((n3) => { - const c5 = clusterMap[n3.cluster]; - if (isNumber45(n3.x)) { - c5.cx += n3.x; - } - if (isNumber45(n3.y)) { - c5.cy += n3.y; - } - c5.count++; - }); - for (const key in clusterMap) { - clusterMap[key].cx /= clusterMap[key].count; - clusterMap[key].cy /= clusterMap[key].count; - } - const clusterGravity = self2.clusterGravity || gravity; - nodes.forEach((n3, j4) => { - if (!isNumber45(n3.x) || !isNumber45(n3.y)) - return; - const c5 = clusterMap[n3.cluster]; - const distLength = Math.sqrt((n3.x - c5.cx) * (n3.x - c5.cx) + (n3.y - c5.cy) * (n3.y - c5.cy)); - const gravityForce = k4 * clusterGravity; - displacements[j4].x -= gravityForce * (n3.x - c5.cx) / distLength; - displacements[j4].y -= gravityForce * (n3.y - c5.cy) / distLength; - }); - } - nodes.forEach((n3, j4) => { - if (!isNumber45(n3.x) || !isNumber45(n3.y)) - return; - const gravityForce = 0.01 * k4 * gravity; - displacements[j4].x -= gravityForce * (n3.x - center2[0]); - displacements[j4].y -= gravityForce * (n3.y - center2[1]); - }); - nodes.forEach((n3, j4) => { - if (isNumber45(n3.fx) && isNumber45(n3.fy)) { - n3.x = n3.fx; - n3.y = n3.fy; - return; - } - if (!isNumber45(n3.x) || !isNumber45(n3.y)) - return; - const distLength = Math.sqrt(displacements[j4].x * displacements[j4].x + displacements[j4].y * displacements[j4].y); - if (distLength > 0) { - const limitedDist = Math.min(maxDisplace * (speed / SPEED_DIVISOR2), distLength); - n3.x += displacements[j4].x / distLength * limitedDist; - n3.y += displacements[j4].y / distLength * limitedDist; - } - }); - (_a6 = self2.tick) === null || _a6 === void 0 ? void 0 : _a6.call(self2); - } - applyCalculate(nodes, edges, displacements, k4, k22) { - const self2 = this; - self2.calRepulsive(nodes, displacements, k22); - if (edges) - self2.calAttractive(edges, displacements, k4); - } - calRepulsive(nodes, displacements, k22) { - nodes.forEach((v3, i4) => { - displacements[i4] = { x: 0, y: 0 }; - nodes.forEach((u3, j4) => { - if (i4 === j4) { - return; - } - if (!isNumber45(v3.x) || !isNumber45(u3.x) || !isNumber45(v3.y) || !isNumber45(u3.y)) { - return; - } - let vecX = v3.x - u3.x; - let vecY = v3.y - u3.y; - let vecLengthSqr = vecX * vecX + vecY * vecY; - if (vecLengthSqr === 0) { - vecLengthSqr = 1; - const sign = i4 > j4 ? 1 : -1; - vecX = 0.01 * sign; - vecY = 0.01 * sign; - } - const common2 = k22 / vecLengthSqr; - displacements[i4].x += vecX * common2; - displacements[i4].y += vecY * common2; - }); - }); - } - calAttractive(edges, displacements, k4) { - edges.forEach((e4) => { - const source = getEdgeTerminal(e4, "source"); - const target = getEdgeTerminal(e4, "target"); - if (!source || !target) - return; - const uIndex = this.nodeIdxMap[source]; - const vIndex = this.nodeIdxMap[target]; - if (uIndex === vIndex) { - return; - } - const u3 = this.nodeMap[source]; - const v3 = this.nodeMap[target]; - if (!isNumber45(v3.x) || !isNumber45(u3.x) || !isNumber45(v3.y) || !isNumber45(u3.y)) { - return; - } - const vecX = v3.x - u3.x; - const vecY = v3.y - u3.y; - const vecLength = Math.sqrt(vecX * vecX + vecY * vecY); - const common2 = vecLength * vecLength / k4; - displacements[vIndex].x -= vecX / vecLength * common2; - displacements[vIndex].y -= vecY / vecLength * common2; - displacements[uIndex].x += vecX / vecLength * common2; - displacements[uIndex].y += vecY / vecLength * common2; - }); - } - stop() { - if (this.timeInterval && typeof window !== "undefined") { - window.clearInterval(this.timeInterval); - } - } - destroy() { - const self2 = this; - self2.stop(); - self2.tick = null; - self2.nodes = null; - self2.edges = null; - self2.destroyed = true; - } - getType() { - return "fruchterman"; - } -}; - -// node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js -function _initializerDefineProperty(target, property, descriptor, context) { - if (!descriptor) - return; - Object.defineProperty(target, property, { - enumerable: descriptor.enumerable, - configurable: descriptor.configurable, - writable: descriptor.writable, - value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 - }); -} - -// node_modules/@babel/runtime/helpers/esm/classCallCheck.js -function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -} - -// node_modules/@babel/runtime/helpers/esm/createClass.js -function _defineProperties(target, props) { - for (var i4 = 0; i4 < props.length; i4++) { - var descriptor = props[i4]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) - descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } -} -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) - _defineProperties(Constructor.prototype, protoProps); - if (staticProps) - _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; -} - -// node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js -function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { - var desc = {}; - Object.keys(descriptor).forEach(function(key) { - desc[key] = descriptor[key]; - }); - desc.enumerable = !!desc.enumerable; - desc.configurable = !!desc.configurable; - if ("value" in desc || desc.initializer) { - desc.writable = true; - } - desc = decorators.slice().reverse().reduce(function(desc2, decorator) { - return decorator(target, property, desc2) || desc2; - }, desc); - if (context && desc.initializer !== void 0) { - desc.value = desc.initializer ? desc.initializer.call(context) : void 0; - desc.initializer = void 0; - } - if (desc.initializer === void 0) { - Object.defineProperty(target, property, desc); - desc = null; - } - return desc; -} - -// node_modules/reflect-metadata/Reflect.js -var Reflect2; -(function(Reflect3) { - (function(factory) { - var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : Function("return this;")(); - var exporter = makeExporter(Reflect3); - if (typeof root.Reflect === "undefined") { - root.Reflect = Reflect3; - } else { - exporter = makeExporter(root.Reflect, exporter); - } - factory(exporter); - function makeExporter(target, previous) { - return function(key, value2) { - if (typeof target[key] !== "function") { - Object.defineProperty(target, key, { configurable: true, writable: true, value: value2 }); - } - if (previous) - previous(key, value2); - }; - } - })(function(exporter) { - var hasOwn = Object.prototype.hasOwnProperty; - var supportsSymbol = typeof Symbol === "function"; - var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== "undefined" ? Symbol.toPrimitive : "@@toPrimitive"; - var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== "undefined" ? Symbol.iterator : "@@iterator"; - var supportsCreate = typeof Object.create === "function"; - var supportsProto = { __proto__: [] } instanceof Array; - var downLevel = !supportsCreate && !supportsProto; - var HashMap = { - create: supportsCreate ? function() { - return MakeDictionary(Object.create(null)); - } : supportsProto ? function() { - return MakeDictionary({ __proto__: null }); - } : function() { - return MakeDictionary({}); - }, - has: downLevel ? function(map23, key) { - return hasOwn.call(map23, key); - } : function(map23, key) { - return key in map23; - }, - get: downLevel ? function(map23, key) { - return hasOwn.call(map23, key) ? map23[key] : void 0; - } : function(map23, key) { - return map23[key]; - } - }; - var functionPrototype = Object.getPrototypeOf(Function); - var usePolyfill = typeof process === "object" && process.env && process.env["REFLECT_METADATA_USE_MAP_POLYFILL"] === "true"; - var _Map = !usePolyfill && typeof Map === "function" && typeof Map.prototype.entries === "function" ? Map : CreateMapPolyfill(); - var _Set = !usePolyfill && typeof Set === "function" && typeof Set.prototype.entries === "function" ? Set : CreateSetPolyfill(); - var _WeakMap = !usePolyfill && typeof WeakMap === "function" ? WeakMap : CreateWeakMapPolyfill(); - var Metadata = new _WeakMap(); - function decorate(decorators, target, propertyKey, attributes) { - if (!IsUndefined(propertyKey)) { - if (!IsArray(decorators)) - throw new TypeError(); - if (!IsObject(target)) - throw new TypeError(); - if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes)) - throw new TypeError(); - if (IsNull(attributes)) - attributes = void 0; - propertyKey = ToPropertyKey(propertyKey); - return DecorateProperty(decorators, target, propertyKey, attributes); - } else { - if (!IsArray(decorators)) - throw new TypeError(); - if (!IsConstructor(target)) - throw new TypeError(); - return DecorateConstructor(decorators, target); - } - } - exporter("decorate", decorate); - function metadata(metadataKey, metadataValue) { - function decorator(target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey)) - throw new TypeError(); - OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey); - } - return decorator; - } - exporter("metadata", metadata); - function defineMetadata(metadataKey, metadataValue, target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey); - } - exporter("defineMetadata", defineMetadata); - function hasMetadata(metadataKey, target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryHasMetadata(metadataKey, target, propertyKey); - } - exporter("hasMetadata", hasMetadata); - function hasOwnMetadata(metadataKey, target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey); - } - exporter("hasOwnMetadata", hasOwnMetadata); - function getMetadata(metadataKey, target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryGetMetadata(metadataKey, target, propertyKey); - } - exporter("getMetadata", getMetadata); - function getOwnMetadata(metadataKey, target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey); - } - exporter("getOwnMetadata", getOwnMetadata); - function getMetadataKeys(target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryMetadataKeys(target, propertyKey); - } - exporter("getMetadataKeys", getMetadataKeys); - function getOwnMetadataKeys(target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - return OrdinaryOwnMetadataKeys(target, propertyKey); - } - exporter("getOwnMetadataKeys", getOwnMetadataKeys); - function deleteMetadata(metadataKey, target, propertyKey) { - if (!IsObject(target)) - throw new TypeError(); - if (!IsUndefined(propertyKey)) - propertyKey = ToPropertyKey(propertyKey); - var metadataMap = GetOrCreateMetadataMap(target, propertyKey, false); - if (IsUndefined(metadataMap)) - return false; - if (!metadataMap.delete(metadataKey)) - return false; - if (metadataMap.size > 0) - return true; - var targetMetadata = Metadata.get(target); - targetMetadata.delete(propertyKey); - if (targetMetadata.size > 0) - return true; - Metadata.delete(target); - return true; - } - exporter("deleteMetadata", deleteMetadata); - function DecorateConstructor(decorators, target) { - for (var i4 = decorators.length - 1; i4 >= 0; --i4) { - var decorator = decorators[i4]; - var decorated = decorator(target); - if (!IsUndefined(decorated) && !IsNull(decorated)) { - if (!IsConstructor(decorated)) - throw new TypeError(); - target = decorated; - } - } - return target; - } - function DecorateProperty(decorators, target, propertyKey, descriptor) { - for (var i4 = decorators.length - 1; i4 >= 0; --i4) { - var decorator = decorators[i4]; - var decorated = decorator(target, propertyKey, descriptor); - if (!IsUndefined(decorated) && !IsNull(decorated)) { - if (!IsObject(decorated)) - throw new TypeError(); - descriptor = decorated; - } - } - return descriptor; - } - function GetOrCreateMetadataMap(O3, P4, Create) { - var targetMetadata = Metadata.get(O3); - if (IsUndefined(targetMetadata)) { - if (!Create) - return void 0; - targetMetadata = new _Map(); - Metadata.set(O3, targetMetadata); - } - var metadataMap = targetMetadata.get(P4); - if (IsUndefined(metadataMap)) { - if (!Create) - return void 0; - metadataMap = new _Map(); - targetMetadata.set(P4, metadataMap); - } - return metadataMap; - } - function OrdinaryHasMetadata(MetadataKey, O3, P4) { - var hasOwn2 = OrdinaryHasOwnMetadata(MetadataKey, O3, P4); - if (hasOwn2) - return true; - var parent = OrdinaryGetPrototypeOf(O3); - if (!IsNull(parent)) - return OrdinaryHasMetadata(MetadataKey, parent, P4); - return false; - } - function OrdinaryHasOwnMetadata(MetadataKey, O3, P4) { - var metadataMap = GetOrCreateMetadataMap(O3, P4, false); - if (IsUndefined(metadataMap)) - return false; - return ToBoolean(metadataMap.has(MetadataKey)); - } - function OrdinaryGetMetadata(MetadataKey, O3, P4) { - var hasOwn2 = OrdinaryHasOwnMetadata(MetadataKey, O3, P4); - if (hasOwn2) - return OrdinaryGetOwnMetadata(MetadataKey, O3, P4); - var parent = OrdinaryGetPrototypeOf(O3); - if (!IsNull(parent)) - return OrdinaryGetMetadata(MetadataKey, parent, P4); - return void 0; - } - function OrdinaryGetOwnMetadata(MetadataKey, O3, P4) { - var metadataMap = GetOrCreateMetadataMap(O3, P4, false); - if (IsUndefined(metadataMap)) - return void 0; - return metadataMap.get(MetadataKey); - } - function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O3, P4) { - var metadataMap = GetOrCreateMetadataMap(O3, P4, true); - metadataMap.set(MetadataKey, MetadataValue); - } - function OrdinaryMetadataKeys(O3, P4) { - var ownKeys12 = OrdinaryOwnMetadataKeys(O3, P4); - var parent = OrdinaryGetPrototypeOf(O3); - if (parent === null) - return ownKeys12; - var parentKeys = OrdinaryMetadataKeys(parent, P4); - if (parentKeys.length <= 0) - return ownKeys12; - if (ownKeys12.length <= 0) - return parentKeys; - var set13 = new _Set(); - var keys6 = []; - for (var _i = 0, ownKeys_1 = ownKeys12; _i < ownKeys_1.length; _i++) { - var key = ownKeys_1[_i]; - var hasKey6 = set13.has(key); - if (!hasKey6) { - set13.add(key); - keys6.push(key); - } - } - for (var _a6 = 0, parentKeys_1 = parentKeys; _a6 < parentKeys_1.length; _a6++) { - var key = parentKeys_1[_a6]; - var hasKey6 = set13.has(key); - if (!hasKey6) { - set13.add(key); - keys6.push(key); - } - } - return keys6; - } - function OrdinaryOwnMetadataKeys(O3, P4) { - var keys6 = []; - var metadataMap = GetOrCreateMetadataMap(O3, P4, false); - if (IsUndefined(metadataMap)) - return keys6; - var keysObj = metadataMap.keys(); - var iterator = GetIterator(keysObj); - var k4 = 0; - while (true) { - var next = IteratorStep(iterator); - if (!next) { - keys6.length = k4; - return keys6; - } - var nextValue = IteratorValue(next); - try { - keys6[k4] = nextValue; - } catch (e4) { - try { - IteratorClose(iterator); - } finally { - throw e4; - } - } - k4++; - } - } - function Type2(x6) { - if (x6 === null) - return 1; - switch (typeof x6) { - case "undefined": - return 0; - case "boolean": - return 2; - case "string": - return 3; - case "symbol": - return 4; - case "number": - return 5; - case "object": - return x6 === null ? 1 : 6; - default: - return 6; - } - } - function IsUndefined(x6) { - return x6 === void 0; - } - function IsNull(x6) { - return x6 === null; - } - function IsSymbol(x6) { - return typeof x6 === "symbol"; - } - function IsObject(x6) { - return typeof x6 === "object" ? x6 !== null : typeof x6 === "function"; - } - function ToPrimitive(input, PreferredType) { - switch (Type2(input)) { - case 0: - return input; - case 1: - return input; - case 2: - return input; - case 3: - return input; - case 4: - return input; - case 5: - return input; - } - var hint = PreferredType === 3 ? "string" : PreferredType === 5 ? "number" : "default"; - var exoticToPrim = GetMethod(input, toPrimitiveSymbol); - if (exoticToPrim !== void 0) { - var result = exoticToPrim.call(input, hint); - if (IsObject(result)) - throw new TypeError(); - return result; - } - return OrdinaryToPrimitive(input, hint === "default" ? "number" : hint); - } - function OrdinaryToPrimitive(O3, hint) { - if (hint === "string") { - var toString_1 = O3.toString; - if (IsCallable(toString_1)) { - var result = toString_1.call(O3); - if (!IsObject(result)) - return result; - } - var valueOf = O3.valueOf; - if (IsCallable(valueOf)) { - var result = valueOf.call(O3); - if (!IsObject(result)) - return result; - } - } else { - var valueOf = O3.valueOf; - if (IsCallable(valueOf)) { - var result = valueOf.call(O3); - if (!IsObject(result)) - return result; - } - var toString_2 = O3.toString; - if (IsCallable(toString_2)) { - var result = toString_2.call(O3); - if (!IsObject(result)) - return result; - } - } - throw new TypeError(); - } - function ToBoolean(argument) { - return !!argument; - } - function ToString(argument) { - return "" + argument; - } - function ToPropertyKey(argument) { - var key = ToPrimitive(argument, 3); - if (IsSymbol(key)) - return key; - return ToString(key); - } - function IsArray(argument) { - return Array.isArray ? Array.isArray(argument) : argument instanceof Object ? argument instanceof Array : Object.prototype.toString.call(argument) === "[object Array]"; - } - function IsCallable(argument) { - return typeof argument === "function"; - } - function IsConstructor(argument) { - return typeof argument === "function"; - } - function IsPropertyKey(argument) { - switch (Type2(argument)) { - case 3: - return true; - case 4: - return true; - default: - return false; - } - } - function GetMethod(V2, P4) { - var func = V2[P4]; - if (func === void 0 || func === null) - return void 0; - if (!IsCallable(func)) - throw new TypeError(); - return func; - } - function GetIterator(obj) { - var method = GetMethod(obj, iteratorSymbol); - if (!IsCallable(method)) - throw new TypeError(); - var iterator = method.call(obj); - if (!IsObject(iterator)) - throw new TypeError(); - return iterator; - } - function IteratorValue(iterResult) { - return iterResult.value; - } - function IteratorStep(iterator) { - var result = iterator.next(); - return result.done ? false : result; - } - function IteratorClose(iterator) { - var f3 = iterator["return"]; - if (f3) - f3.call(iterator); - } - function OrdinaryGetPrototypeOf(O3) { - var proto = Object.getPrototypeOf(O3); - if (typeof O3 !== "function" || O3 === functionPrototype) - return proto; - if (proto !== functionPrototype) - return proto; - var prototype = O3.prototype; - var prototypeProto = prototype && Object.getPrototypeOf(prototype); - if (prototypeProto == null || prototypeProto === Object.prototype) - return proto; - var constructor = prototypeProto.constructor; - if (typeof constructor !== "function") - return proto; - if (constructor === O3) - return proto; - return constructor; - } - function CreateMapPolyfill() { - var cacheSentinel = {}; - var arraySentinel = []; - var MapIterator = function() { - function MapIterator2(keys6, values4, selector) { - this._index = 0; - this._keys = keys6; - this._values = values4; - this._selector = selector; - } - MapIterator2.prototype["@@iterator"] = function() { - return this; - }; - MapIterator2.prototype[iteratorSymbol] = function() { - return this; - }; - MapIterator2.prototype.next = function() { - var index2 = this._index; - if (index2 >= 0 && index2 < this._keys.length) { - var result = this._selector(this._keys[index2], this._values[index2]); - if (index2 + 1 >= this._keys.length) { - this._index = -1; - this._keys = arraySentinel; - this._values = arraySentinel; - } else { - this._index++; - } - return { value: result, done: false }; - } - return { value: void 0, done: true }; - }; - MapIterator2.prototype.throw = function(error) { - if (this._index >= 0) { - this._index = -1; - this._keys = arraySentinel; - this._values = arraySentinel; - } - throw error; - }; - MapIterator2.prototype.return = function(value2) { - if (this._index >= 0) { - this._index = -1; - this._keys = arraySentinel; - this._values = arraySentinel; - } - return { value: value2, done: true }; - }; - return MapIterator2; - }(); - return function() { - function Map2() { - this._keys = []; - this._values = []; - this._cacheKey = cacheSentinel; - this._cacheIndex = -2; - } - Object.defineProperty(Map2.prototype, "size", { - get: function() { - return this._keys.length; - }, - enumerable: true, - configurable: true - }); - Map2.prototype.has = function(key) { - return this._find(key, false) >= 0; - }; - Map2.prototype.get = function(key) { - var index2 = this._find(key, false); - return index2 >= 0 ? this._values[index2] : void 0; - }; - Map2.prototype.set = function(key, value2) { - var index2 = this._find(key, true); - this._values[index2] = value2; - return this; - }; - Map2.prototype.delete = function(key) { - var index2 = this._find(key, false); - if (index2 >= 0) { - var size14 = this._keys.length; - for (var i4 = index2 + 1; i4 < size14; i4++) { - this._keys[i4 - 1] = this._keys[i4]; - this._values[i4 - 1] = this._values[i4]; - } - this._keys.length--; - this._values.length--; - if (key === this._cacheKey) { - this._cacheKey = cacheSentinel; - this._cacheIndex = -2; - } - return true; - } - return false; - }; - Map2.prototype.clear = function() { - this._keys.length = 0; - this._values.length = 0; - this._cacheKey = cacheSentinel; - this._cacheIndex = -2; - }; - Map2.prototype.keys = function() { - return new MapIterator(this._keys, this._values, getKey); - }; - Map2.prototype.values = function() { - return new MapIterator(this._keys, this._values, getValue3); - }; - Map2.prototype.entries = function() { - return new MapIterator(this._keys, this._values, getEntry); - }; - Map2.prototype["@@iterator"] = function() { - return this.entries(); - }; - Map2.prototype[iteratorSymbol] = function() { - return this.entries(); - }; - Map2.prototype._find = function(key, insert) { - if (this._cacheKey !== key) { - this._cacheIndex = this._keys.indexOf(this._cacheKey = key); - } - if (this._cacheIndex < 0 && insert) { - this._cacheIndex = this._keys.length; - this._keys.push(key); - this._values.push(void 0); - } - return this._cacheIndex; - }; - return Map2; - }(); - function getKey(key, _8) { - return key; - } - function getValue3(_8, value2) { - return value2; - } - function getEntry(key, value2) { - return [key, value2]; - } - } - function CreateSetPolyfill() { - return function() { - function Set2() { - this._map = new _Map(); - } - Object.defineProperty(Set2.prototype, "size", { - get: function() { - return this._map.size; - }, - enumerable: true, - configurable: true - }); - Set2.prototype.has = function(value2) { - return this._map.has(value2); - }; - Set2.prototype.add = function(value2) { - return this._map.set(value2, value2), this; - }; - Set2.prototype.delete = function(value2) { - return this._map.delete(value2); - }; - Set2.prototype.clear = function() { - this._map.clear(); - }; - Set2.prototype.keys = function() { - return this._map.keys(); - }; - Set2.prototype.values = function() { - return this._map.values(); - }; - Set2.prototype.entries = function() { - return this._map.entries(); - }; - Set2.prototype["@@iterator"] = function() { - return this.keys(); - }; - Set2.prototype[iteratorSymbol] = function() { - return this.keys(); - }; - return Set2; - }(); - } - function CreateWeakMapPolyfill() { - var UUID_SIZE = 16; - var keys6 = HashMap.create(); - var rootKey = CreateUniqueKey(); - return function() { - function WeakMap2() { - this._key = CreateUniqueKey(); - } - WeakMap2.prototype.has = function(target) { - var table = GetOrCreateWeakMapTable(target, false); - return table !== void 0 ? HashMap.has(table, this._key) : false; - }; - WeakMap2.prototype.get = function(target) { - var table = GetOrCreateWeakMapTable(target, false); - return table !== void 0 ? HashMap.get(table, this._key) : void 0; - }; - WeakMap2.prototype.set = function(target, value2) { - var table = GetOrCreateWeakMapTable(target, true); - table[this._key] = value2; - return this; - }; - WeakMap2.prototype.delete = function(target) { - var table = GetOrCreateWeakMapTable(target, false); - return table !== void 0 ? delete table[this._key] : false; - }; - WeakMap2.prototype.clear = function() { - this._key = CreateUniqueKey(); - }; - return WeakMap2; - }(); - function CreateUniqueKey() { - var key; - do - key = "@@WeakMap@@" + CreateUUID(); - while (HashMap.has(keys6, key)); - keys6[key] = true; - return key; - } - function GetOrCreateWeakMapTable(target, create8) { - if (!hasOwn.call(target, rootKey)) { - if (!create8) - return void 0; - Object.defineProperty(target, rootKey, { value: HashMap.create() }); - } - return target[rootKey]; - } - function FillRandomBytes(buffer, size14) { - for (var i4 = 0; i4 < size14; ++i4) - buffer[i4] = Math.random() * 255 | 0; - return buffer; - } - function GenRandomBytes(size14) { - if (typeof Uint8Array === "function") { - if (typeof crypto !== "undefined") - return crypto.getRandomValues(new Uint8Array(size14)); - if (typeof msCrypto !== "undefined") - return msCrypto.getRandomValues(new Uint8Array(size14)); - return FillRandomBytes(new Uint8Array(size14), size14); - } - return FillRandomBytes(new Array(size14), size14); - } - function CreateUUID() { - var data3 = GenRandomBytes(UUID_SIZE); - data3[6] = data3[6] & 79 | 64; - data3[8] = data3[8] & 191 | 128; - var result = ""; - for (var offset = 0; offset < UUID_SIZE; ++offset) { - var byte = data3[offset]; - if (offset === 4 || offset === 6 || offset === 8) - result += "-"; - if (byte < 16) - result += "0"; - result += byte.toString(16).toLowerCase(); - } - return result; - } - } - function MakeDictionary(obj) { - obj.__ = void 0; - delete obj.__; - return obj; - } - }); -})(Reflect2 || (Reflect2 = {})); - -// node_modules/@antv/g-webgpu-core/es/ComponentManager.js -var import_regenerator = __toModule(require_regenerator()); - -// node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { - try { - var info = gen[key](arg); - var value2 = info.value; - } catch (error) { - reject(error); - return; - } - if (info.done) { - resolve(value2); - } else { - Promise.resolve(value2).then(_next, _throw); - } -} -function _asyncToGenerator(fn) { - return function() { - var self2 = this, args = arguments; - return new Promise(function(resolve, reject) { - var gen = fn.apply(self2, args); - function _next(value2) { - asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value2); - } - function _throw(err) { - asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); - } - _next(void 0); - }); - }; -} - -// node_modules/@antv/g-webgpu-core/es/Entity.js -var EMPTY = -1; -var entitySequence = 1; -function createEntity() { - return entitySequence++; -} - -// node_modules/@antv/g-webgpu-core/es/ComponentManager.js -var Component2 = function Component3(data3) { - _classCallCheck(this, Component3); -}; -var ComponentManager = /* @__PURE__ */ function() { - function ComponentManager2(clazz) { - _classCallCheck(this, ComponentManager2); - this.clazz = void 0; - this.components = []; - this.entities = []; - this.lookup = {}; - this.clazz = clazz; - } - _createClass(ComponentManager2, [{ - key: "clear", - value: function clear() { - this.components = []; - this.entities = []; - this.lookup = {}; - } - }, { - key: "contains", - value: function contains3(entity) { - return this.lookup[entity] > -1; - } - }, { - key: "create", - value: function create8(entity, data3) { - this.lookup[entity] = this.components.length; - var component2 = new this.clazz(data3 || {}); - this.components.push(component2); - this.entities.push(entity); - return component2; - } - }, { - key: "remove", - value: function remove2(entity) { - var componentIndex = this.lookup[entity]; - if (componentIndex > -1) { - if (componentIndex < this.components.length - 1) { - this.components[componentIndex] = this.components[this.components.length - 1]; - this.entities[componentIndex] = this.entities[this.entities.length - 1]; - this.lookup[this.entities[componentIndex]] = componentIndex; - } - } - this.components.pop(); - this.entities.pop(); - delete this.lookup[entity]; - } - }, { - key: "removeKeepSorted", - value: function removeKeepSorted(entity) { - var componentIndex = this.lookup[entity]; - if (componentIndex > -1) { - var entity2 = this.entities[componentIndex]; - if (componentIndex < this.components.length - 1) { - for (var _i = componentIndex + 1; _i < this.components.length; ++_i) { - this.components[_i - 1] = this.components[_i]; - } - for (var _i2 = componentIndex + 1; _i2 < this.entities.length; ++_i2) { - this.entities[_i2 - 1] = this.entities[_i2]; - this.lookup[this.entities[_i2 - 1]] = _i2 - 1; - } - } - this.components.pop(); - this.entities.pop(); - delete this.lookup[entity2]; - } - } - }, { - key: "moveItem", - value: function moveItem(srcIndex, destIndex) { - if (srcIndex === destIndex) { - return; - } - var srcComponent = this.components[srcIndex]; - var srcEntity = this.entities[srcIndex]; - var direction3 = srcIndex < destIndex ? 1 : -1; - for (var _i3 = srcIndex; _i3 !== destIndex; _i3 += direction3) { - var next = _i3 + direction3; - this.components[_i3] = this.components[next]; - this.entities[_i3] = this.entities[next]; - this.lookup[this.entities[_i3]] = _i3; - } - this.components[destIndex] = srcComponent; - this.entities[destIndex] = srcEntity; - this.lookup[srcEntity] = destIndex; - } - }, { - key: "getEntity", - value: function getEntity(index2) { - return this.entities[index2]; - } - }, { - key: "getComponent", - value: function getComponent(index2) { - return this.components[index2]; - } - }, { - key: "getComponentByEntity", - value: function getComponentByEntity(entity) { - var componentIndex = this.lookup[entity]; - if (componentIndex > -1) { - return this.components[componentIndex]; - } - return null; - } - }, { - key: "getCount", - value: function getCount() { - return this.components.length; - } - }, { - key: "getEntityByComponentIndex", - value: function getEntityByComponentIndex(componentIdx) { - for (var _i4 = 0, _Object$keys = Object.keys(this.lookup); _i4 < _Object$keys.length; _i4++) { - var _entity = _Object$keys[_i4]; - var entityInNum = Number(_entity); - if (this.lookup[entityInNum] === componentIdx) { - return entityInNum; - } - } - return EMPTY; - } - }, { - key: "find", - value: function find11(callback) { - for (var _i5 = 0; _i5 < this.getCount(); _i5++) { - var _component = this.getComponent(_i5); - if (callback(_component, _i5)) { - return _component; - } - } - return null; - } - }, { - key: "findIndex", - value: function findIndex3(callback) { - for (var _i6 = 0; _i6 < this.getCount(); _i6++) { - var _component2 = this.getComponent(_i6); - if (callback(_component2, _i6)) { - return _i6; - } - } - return -1; - } - }, { - key: "forEach", - value: function forEach4(callback) { - for (var _i7 = 0, _Object$keys2 = Object.keys(this.lookup); _i7 < _Object$keys2.length; _i7++) { - var _entity2 = _Object$keys2[_i7]; - var entityInNum = Number(_entity2); - var componentIndex = this.lookup[entityInNum]; - callback(entityInNum, this.getComponent(componentIndex)); - } - } - }, { - key: "forEachAsync", - value: function() { - var _forEachAsync = _asyncToGenerator(/* @__PURE__ */ import_regenerator.default.mark(function _callee(callback) { - var _i8, _Object$keys3, _entity3, entityInNum, componentIndex; - return import_regenerator.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _i8 = 0, _Object$keys3 = Object.keys(this.lookup); - case 1: - if (!(_i8 < _Object$keys3.length)) { - _context.next = 10; - break; - } - _entity3 = _Object$keys3[_i8]; - entityInNum = Number(_entity3); - componentIndex = this.lookup[entityInNum]; - _context.next = 7; - return callback(entityInNum, this.getComponent(componentIndex)); - case 7: - _i8++; - _context.next = 1; - break; - case 10: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - function forEachAsync(_x) { - return _forEachAsync.apply(this, arguments); - } - return forEachAsync; - }() - }, { - key: "map", - value: function map23(callback) { - var result = []; - for (var _i9 = 0, _Object$keys4 = Object.keys(this.lookup); _i9 < _Object$keys4.length; _i9++) { - var _entity4 = _Object$keys4[_i9]; - var entityInNum = Number(_entity4); - var componentIndex = this.lookup[entityInNum]; - result.push(callback(entityInNum, this.getComponent(componentIndex))); - } - return result; - } - }]); - return ComponentManager2; -}(); - -// node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js -function _arrayWithHoles(arr) { - if (Array.isArray(arr)) - return arr; -} - -// node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js -function _iterableToArrayLimit(arr, i4) { - var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; - if (_i == null) - return; - var _arr = []; - var _n = true; - var _d = false; - var _s, _e; - try { - for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - if (i4 && _arr.length === i4) - break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"] != null) - _i["return"](); - } finally { - if (_d) - throw _e; - } - } - return _arr; -} - -// node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js -function _arrayLikeToArray(arr, len5) { - if (len5 == null || len5 > arr.length) - len5 = arr.length; - for (var i4 = 0, arr2 = new Array(len5); i4 < len5; i4++) { - arr2[i4] = arr[i4]; - } - return arr2; -} - -// node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js -function _unsupportedIterableToArray(o3, minLen) { - if (!o3) - return; - if (typeof o3 === "string") - return _arrayLikeToArray(o3, minLen); - var n3 = Object.prototype.toString.call(o3).slice(8, -1); - if (n3 === "Object" && o3.constructor) - n3 = o3.constructor.name; - if (n3 === "Map" || n3 === "Set") - return Array.from(o3); - if (n3 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n3)) - return _arrayLikeToArray(o3, minLen); -} - -// node_modules/@babel/runtime/helpers/esm/nonIterableRest.js -function _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -// node_modules/@babel/runtime/helpers/esm/slicedToArray.js -function _slicedToArray(arr, i4) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i4) || _unsupportedIterableToArray(arr, i4) || _nonIterableRest(); -} - -// node_modules/@antv/g-webgpu-core/es/components/framegraph/System.js -var import_regenerator2 = __toModule(require_regenerator()); -var import_inversify = __toModule(require_inversify()); - -// node_modules/@antv/g-webgpu-core/es/identifier.js -var IDENTIFIER = { - HierarchyComponentManager: Symbol("HierarchyComponentManager"), - TransformComponentManager: Symbol("TransformComponentManager"), - NameComponentManager: Symbol("NameComponentManager"), - SceneGraphSystem: Symbol("SceneGraphSystem"), - FrameGraphSystem: Symbol("FrameGraphSystem"), - ResourcePool: Symbol("ResourcePool"), - ResourceHandleComponentManager: Symbol("ResourceHandleComponentManager"), - PassNodeComponentManager: Symbol("PassNodeComponentManager"), - RendererSystem: Symbol("RendererSystem"), - RenderPass: Symbol("RenderPass"), - RenderPassFactory: Symbol("Factory"), - Renderable: Symbol("Factory"), - MeshSystem: Symbol("MeshSystem"), - MeshComponentManager: Symbol("MeshComponentManager"), - CullableComponentManager: Symbol("CullableComponentManager"), - Geometry: Symbol("Geometry"), - GeometrySystem: Symbol("GeometrySystem"), - GeometryComponentManager: Symbol("GeometryComponentManager"), - Material: Symbol("Material"), - MaterialSystem: Symbol("MaterialSystem"), - MaterialComponentManager: Symbol("MaterialComponentManager"), - ForwardRenderPath: Symbol("ForwardRenderPath"), - ComputeSystem: Symbol("ComputeSystem"), - ComputeComponentManager: Symbol("ComputeComponentManager"), - ComputeStrategy: Symbol("ComputeStrategy"), - Systems: Symbol("Systems"), - World: Symbol("World"), - RenderEngine: Symbol("RenderEngine"), - WebGPUEngine: Symbol("WebGPUEngine"), - WebGLEngine: Symbol("WebGLEngine"), - ShaderModuleService: Symbol("ShaderModuleService"), - ConfigService: Symbol("ConfigService"), - InteractorService: Symbol("InteractorService"), - IEventEmitter: Symbol("IEventEmitter"), - Light: Symbol("Light") -}; - -// node_modules/@antv/g-webgpu-core/es/components/framegraph/FrameGraphHandle.js -var FrameGraphHandle = function FrameGraphHandle2() { - _classCallCheck(this, FrameGraphHandle2); - this.index = void 0; -}; - -// node_modules/@antv/g-webgpu-core/es/components/framegraph/FrameGraphPass.js -var FrameGraphPass = function FrameGraphPass2() { - _classCallCheck(this, FrameGraphPass2); - this.name = void 0; - this.data = void 0; - this.execute = void 0; - this.tearDown = void 0; -}; - -// node_modules/@antv/g-webgpu-core/es/components/framegraph/PassNode.js -var PassNode = /* @__PURE__ */ function() { - function PassNode2() { - _classCallCheck(this, PassNode2); - this.name = void 0; - this.refCount = 0; - this.hasSideEffect = false; - this.devirtualize = []; - this.destroy = []; - this.reads = []; - this.writes = []; - } - _createClass(PassNode2, [{ - key: "read", - value: function read(handle) { - if (!this.reads.find(function(h3) { - return h3.index === handle.index; - })) { - this.reads.push(handle); - } - return handle; - } - }, { - key: "sample", - value: function sample(handle) { - this.read(handle); - return handle; - } - }, { - key: "write", - value: function write(fg, handle) { - var existed = this.writes.find(function(h3) { - return h3.index === handle.index; - }); - if (existed) { - return handle; - } - var node = fg.getResourceNode(handle); - node.resource.version++; - if (node.resource.imported) { - this.hasSideEffect = true; - } - var r4 = fg.createResourceNode(node.resource); - var newNode = fg.getResourceNode(r4); - newNode.writer = this; - this.writes.push(r4); - return r4; - } - }]); - return PassNode2; -}(); - -// node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js -function _setPrototypeOf(o3, p4) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf2(o4, p5) { - o4.__proto__ = p5; - return o4; - }; - return _setPrototypeOf(o3, p4); -} - -// node_modules/@babel/runtime/helpers/esm/inherits.js -function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); - } - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - writable: true, - configurable: true - } - }); - Object.defineProperty(subClass, "prototype", { - writable: false - }); - if (superClass) - _setPrototypeOf(subClass, superClass); -} - -// node_modules/@babel/runtime/helpers/esm/typeof.js -function _typeof3(obj) { - "@babel/helpers - typeof"; - return _typeof3 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(obj2) { - return typeof obj2; - } : function(obj2) { - return obj2 && typeof Symbol == "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }, _typeof3(obj); -} - -// node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js -function _assertThisInitialized(self2) { - if (self2 === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - return self2; -} - -// node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js -function _possibleConstructorReturn(self2, call) { - if (call && (_typeof3(call) === "object" || typeof call === "function")) { - return call; - } else if (call !== void 0) { - throw new TypeError("Derived constructors may only return object or undefined"); - } - return _assertThisInitialized(self2); -} - -// node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js -function _getPrototypeOf(o3) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf2(o4) { - return o4.__proto__ || Object.getPrototypeOf(o4); - }; - return _getPrototypeOf(o3); -} - -// node_modules/@antv/g-webgpu-core/es/components/framegraph/VirtualResource.js -var VirtualResource = function VirtualResource2() { - _classCallCheck(this, VirtualResource2); - this.first = void 0; - this.last = void 0; -}; - -// node_modules/@antv/g-webgpu-core/es/components/framegraph/ResourceEntry.js -function _createSuper(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var ResourceEntry = /* @__PURE__ */ function(_VirtualResource) { - _inherits(ResourceEntry2, _VirtualResource); - var _super = _createSuper(ResourceEntry2); - function ResourceEntry2() { - var _this; - _classCallCheck(this, ResourceEntry2); - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - _this = _super.call.apply(_super, [this].concat(args)); - _this.version = 0; - _this.refs = 0; - _this.name = void 0; - _this.imported = void 0; - _this.priority = void 0; - _this.discardStart = true; - _this.discardEnd = false; - _this.descriptor = void 0; - _this.resource = void 0; - return _this; - } - _createClass(ResourceEntry2, [{ - key: "preExecuteDestroy", - value: function preExecuteDestroy() { - this.discardEnd = true; - } - }, { - key: "postExecuteDestroy", - value: function postExecuteDestroy() { - if (!this.imported) { - } - } - }, { - key: "postExecuteDevirtualize", - value: function postExecuteDevirtualize() { - this.discardStart = false; - } - }, { - key: "preExecuteDevirtualize", - value: function preExecuteDevirtualize() { - if (!this.imported) { - } - } - }]); - return ResourceEntry2; -}(VirtualResource); - -// node_modules/@antv/g-webgpu-core/es/components/framegraph/ResourceNode.js -var ResourceNode = function ResourceNode2() { - _classCallCheck(this, ResourceNode2); - this.resource = void 0; - this.writer = void 0; - this.readerCount = 0; - this.version = void 0; -}; - -// node_modules/@antv/g-webgpu-core/es/components/framegraph/System.js -var _dec; -var _dec2; -var _class2; -var _class22; -var _descriptor; -var _temp; -function _createForOfIteratorHelper(o3, allowArrayLike) { - var it; - if (typeof Symbol === "undefined" || o3[Symbol.iterator] == null) { - if (Array.isArray(o3) || (it = _unsupportedIterableToArray2(o3)) || allowArrayLike && o3 && typeof o3.length === "number") { - if (it) - o3 = it; - var i4 = 0; - var F3 = function F4() { - }; - return { s: F3, n: function n3() { - if (i4 >= o3.length) - return { done: true }; - return { done: false, value: o3[i4++] }; - }, e: function e4(_e) { - throw _e; - }, f: F3 }; - } - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - var normalCompletion = true, didErr = false, err; - return { s: function s4() { - it = o3[Symbol.iterator](); - }, n: function n3() { - var step = it.next(); - normalCompletion = step.done; - return step; - }, e: function e4(_e2) { - didErr = true; - err = _e2; - }, f: function f3() { - try { - if (!normalCompletion && it.return != null) - it.return(); - } finally { - if (didErr) - throw err; - } - } }; -} -function _unsupportedIterableToArray2(o3, minLen) { - if (!o3) - return; - if (typeof o3 === "string") - return _arrayLikeToArray2(o3, minLen); - var n3 = Object.prototype.toString.call(o3).slice(8, -1); - if (n3 === "Object" && o3.constructor) - n3 = o3.constructor.name; - if (n3 === "Map" || n3 === "Set") - return Array.from(o3); - if (n3 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n3)) - return _arrayLikeToArray2(o3, minLen); -} -function _arrayLikeToArray2(arr, len5) { - if (len5 == null || len5 > arr.length) - len5 = arr.length; - for (var i4 = 0, arr2 = new Array(len5); i4 < len5; i4++) { - arr2[i4] = arr[i4]; - } - return arr2; -} -var FrameGraphSystem = (_dec = (0, import_inversify.injectable)(), _dec2 = (0, import_inversify.inject)(IDENTIFIER.RenderEngine), _dec(_class2 = (_class22 = (_temp = /* @__PURE__ */ function() { - function FrameGraphSystem2() { - _classCallCheck(this, FrameGraphSystem2); - this.passNodes = []; - this.resourceNodes = []; - this.frameGraphPasses = []; - _initializerDefineProperty(this, "engine", _descriptor, this); - } - _createClass(FrameGraphSystem2, [{ - key: "execute", - value: function() { - var _execute = _asyncToGenerator(/* @__PURE__ */ import_regenerator2.default.mark(function _callee(views) { - return import_regenerator2.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - this.compile(); - _context.next = 3; - return this.executePassNodes(views); - case 3: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - function execute(_x) { - return _execute.apply(this, arguments); - } - return execute; - }() - }, { - key: "tearDown", - value: function tearDown() { - this.frameGraphPasses.forEach(function(pass) { - if (pass.tearDown) { - pass.tearDown(); - } - }); - this.reset(); - } - }, { - key: "addPass", - value: function addPass(name, setup, execute, tearDown) { - var frameGraphPass = new FrameGraphPass(); - frameGraphPass.execute = execute; - if (tearDown) { - frameGraphPass.tearDown = tearDown; - } - frameGraphPass.name = name; - var passNode = new PassNode(); - passNode.name = name; - this.passNodes.push(passNode); - this.frameGraphPasses.push(frameGraphPass); - setup(this, passNode, frameGraphPass); - return frameGraphPass; - } - }, { - key: "getPass", - value: function getPass(name) { - return this.frameGraphPasses.find(function(p4) { - return p4.name === name; - }); - } - }, { - key: "compile", - value: function compile() { - var _this = this; - var _iterator = _createForOfIteratorHelper(this.passNodes), _step; - try { - for (_iterator.s(); !(_step = _iterator.n()).done; ) { - var _pass = _step.value; - _pass.refCount = _pass.writes.length + (_pass.hasSideEffect ? 1 : 0); - _pass.reads.forEach(function(handle) { - _this.resourceNodes[handle.index].readerCount++; - }); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - var stack = []; - var _iterator2 = _createForOfIteratorHelper(this.resourceNodes), _step2; - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { - var node = _step2.value; - if (node.readerCount === 0) { - stack.push(node); - } - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - while (stack.length) { - var pNode = stack.pop(); - var writer = pNode && pNode.writer; - if (writer) { - if (--writer.refCount === 0) { - var _iterator3 = _createForOfIteratorHelper(writer.reads), _step3; - try { - for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { - var resource = _step3.value; - var r4 = this.resourceNodes[resource.index]; - if (--r4.readerCount === 0) { - stack.push(r4); - } - } - } catch (err) { - _iterator3.e(err); - } finally { - _iterator3.f(); - } - } - } - } - this.resourceNodes.forEach(function(node2) { - node2.resource.refs += node2.readerCount; - }); - var _iterator4 = _createForOfIteratorHelper(this.passNodes), _step4; - try { - for (_iterator4.s(); !(_step4 = _iterator4.n()).done; ) { - var _pass2 = _step4.value; - if (!_pass2.refCount) { - continue; - } - var _iterator6 = _createForOfIteratorHelper(_pass2.reads), _step6; - try { - for (_iterator6.s(); !(_step6 = _iterator6.n()).done; ) { - var _resource2 = _step6.value; - var pResource = this.resourceNodes[_resource2.index].resource; - pResource.first = pResource.first ? pResource.first : _pass2; - pResource.last = _pass2; - } - } catch (err) { - _iterator6.e(err); - } finally { - _iterator6.f(); - } - var _iterator7 = _createForOfIteratorHelper(_pass2.writes), _step7; - try { - for (_iterator7.s(); !(_step7 = _iterator7.n()).done; ) { - var _resource3 = _step7.value; - var _pResource = this.resourceNodes[_resource3.index].resource; - _pResource.first = _pResource.first ? _pResource.first : _pass2; - _pResource.last = _pass2; - } - } catch (err) { - _iterator7.e(err); - } finally { - _iterator7.f(); - } - } - } catch (err) { - _iterator4.e(err); - } finally { - _iterator4.f(); - } - for (var priority = 0; priority < 2; priority++) { - var _iterator5 = _createForOfIteratorHelper(this.resourceNodes), _step5; - try { - for (_iterator5.s(); !(_step5 = _iterator5.n()).done; ) { - var resoureNode = _step5.value; - var _resource = resoureNode.resource; - if (_resource.priority === priority && _resource.refs) { - var pFirst = _resource.first; - var pLast = _resource.last; - if (pFirst && pLast) { - pFirst.devirtualize.push(_resource); - pLast.destroy.push(_resource); - } - } - } - } catch (err) { - _iterator5.e(err); - } finally { - _iterator5.f(); - } - } - } - }, { - key: "executePassNodes", - value: function() { - var _executePassNodes = _asyncToGenerator(/* @__PURE__ */ import_regenerator2.default.mark(function _callee2(views) { - var _iterator8, _step8, _step8$value, index2, node, _iterator9, _step9, resource, _iterator10, _step10, _resource4, _iterator11, _step11, _resource5, _iterator12, _step12, _resource6; - return import_regenerator2.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - _iterator8 = _createForOfIteratorHelper(this.passNodes.entries()); - _context2.prev = 1; - _iterator8.s(); - case 3: - if ((_step8 = _iterator8.n()).done) { - _context2.next = 18; - break; - } - _step8$value = _slicedToArray(_step8.value, 2), index2 = _step8$value[0], node = _step8$value[1]; - if (!node.refCount) { - _context2.next = 16; - break; - } - _iterator9 = _createForOfIteratorHelper(node.devirtualize); - try { - for (_iterator9.s(); !(_step9 = _iterator9.n()).done; ) { - resource = _step9.value; - resource.preExecuteDevirtualize(this.engine); - } - } catch (err) { - _iterator9.e(err); - } finally { - _iterator9.f(); - } - _iterator10 = _createForOfIteratorHelper(node.destroy); - try { - for (_iterator10.s(); !(_step10 = _iterator10.n()).done; ) { - _resource4 = _step10.value; - _resource4.preExecuteDestroy(this.engine); - } - } catch (err) { - _iterator10.e(err); - } finally { - _iterator10.f(); - } - _context2.next = 12; - return this.frameGraphPasses[index2].execute(this, this.frameGraphPasses[index2], views); - case 12: - _iterator11 = _createForOfIteratorHelper(node.devirtualize); - try { - for (_iterator11.s(); !(_step11 = _iterator11.n()).done; ) { - _resource5 = _step11.value; - _resource5.postExecuteDevirtualize(this.engine); - } - } catch (err) { - _iterator11.e(err); - } finally { - _iterator11.f(); - } - _iterator12 = _createForOfIteratorHelper(node.destroy); - try { - for (_iterator12.s(); !(_step12 = _iterator12.n()).done; ) { - _resource6 = _step12.value; - _resource6.postExecuteDestroy(this.engine); - } - } catch (err) { - _iterator12.e(err); - } finally { - _iterator12.f(); - } - case 16: - _context2.next = 3; - break; - case 18: - _context2.next = 23; - break; - case 20: - _context2.prev = 20; - _context2.t0 = _context2["catch"](1); - _iterator8.e(_context2.t0); - case 23: - _context2.prev = 23; - _iterator8.f(); - return _context2.finish(23); - case 26: - this.reset(); - case 27: - case "end": - return _context2.stop(); - } - } - }, _callee2, this, [[1, 20, 23, 26]]); - })); - function executePassNodes(_x2) { - return _executePassNodes.apply(this, arguments); - } - return executePassNodes; - }() - }, { - key: "reset", - value: function reset() { - this.passNodes = []; - this.resourceNodes = []; - this.frameGraphPasses = []; - } - }, { - key: "getResourceNode", - value: function getResourceNode(r4) { - return this.resourceNodes[r4.index]; - } - }, { - key: "createResourceNode", - value: function createResourceNode(resourceEntry) { - var resourceNode = new ResourceNode(); - resourceNode.resource = resourceEntry; - resourceNode.version = resourceEntry.version; - this.resourceNodes.push(resourceNode); - var fgh = new FrameGraphHandle(); - fgh.index = this.resourceNodes.length - 1; - return fgh; - } - }, { - key: "createTexture", - value: function createTexture(passNode, name, descriptor) { - var resource = new ResourceEntry(); - resource.name = name; - resource.descriptor = descriptor; - return this.createResourceNode(resource); - } - }, { - key: "createRenderTarget", - value: function createRenderTarget(passNode, name, descriptor) { - var resource = new ResourceEntry(); - resource.name = name; - resource.descriptor = descriptor; - return this.createResourceNode(resource); - } - }, { - key: "present", - value: function present(input) { - this.addPass("Present", function(fg, passNode) { - passNode.read(input); - passNode.hasSideEffect = true; - }, /* @__PURE__ */ _asyncToGenerator(/* @__PURE__ */ import_regenerator2.default.mark(function _callee3() { - return import_regenerator2.default.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - case "end": - return _context3.stop(); - } - } - }, _callee3); - }))); - } - }]); - return FrameGraphSystem2; -}(), _temp), _descriptor = _applyDecoratedDescriptor(_class22.prototype, "engine", [_dec2], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class22)) || _class2); - -// node_modules/@babel/runtime/helpers/esm/defineProperty.js -function _defineProperty(obj, key, value2) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value2, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value2; - } - return obj; -} - -// node_modules/@antv/g-webgpu-core/es/utils/is-typedarray.js -var MAX_SAFE_INTEGER = 9007199254740991; -var argsTag = "[object Arguments]"; -var arrayTag = "[object Array]"; -var boolTag = "[object Boolean]"; -var dateTag = "[object Date]"; -var errorTag = "[object Error]"; -var funcTag = "[object Function]"; -var mapTag = "[object Map]"; -var numberTag = "[object Number]"; -var objectTag = "[object Object]"; -var regexpTag = "[object RegExp]"; -var setTag = "[object Set]"; -var stringTag = "[object String]"; -var weakMapTag = "[object WeakMap]"; -var arrayBufferTag = "[object ArrayBuffer]"; -var dataViewTag = "[object DataView]"; -var float32Tag = "[object Float32Array]"; -var float64Tag = "[object Float64Array]"; -var int8Tag = "[object Int8Array]"; -var int16Tag = "[object Int16Array]"; -var int32Tag = "[object Int32Array]"; -var uint8Tag = "[object Uint8Array]"; -var uint8ClampedTag = "[object Uint8ClampedArray]"; -var uint16Tag = "[object Uint16Array]"; -var uint32Tag = "[object Uint32Array]"; -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; -var objectProto = Object.prototype; -var objectToString = objectProto.toString; -function baseIsTypedArray(value2) { - return isObjectLike2(value2) && isLength(value2.length) && !!typedArrayTags[objectToString.call(value2)]; -} -function isLength(value2) { - return typeof value2 === "number" && value2 > -1 && value2 % 1 === 0 && value2 <= MAX_SAFE_INTEGER; -} -function isObjectLike2(value2) { - return !!value2 && _typeof3(value2) === "object"; -} -var isTypedArray = baseIsTypedArray; - -// node_modules/@antv/g-webgpu-core/es/components/geometry/GeometryComponent.js -function ownKeys(object, enumerableOnly) { - var keys6 = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) - symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys6.push.apply(keys6, symbols); - } - return keys6; -} -function _objectSpread(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = arguments[i4] != null ? arguments[i4] : {}; - if (i4 % 2) { - ownKeys(Object(source), true).forEach(function(key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - return target; -} -function _createSuper2(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct2(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct2() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var GeometryComponent = /* @__PURE__ */ function(_Component) { - _inherits(GeometryComponent2, _Component); - var _super = _createSuper2(GeometryComponent2); - function GeometryComponent2(data3) { - var _this; - _classCallCheck(this, GeometryComponent2); - _this = _super.call(this, data3); - _this.dirty = true; - _this.attributes = []; - _this.indices = void 0; - _this.indicesBuffer = void 0; - _this.vertexCount = 0; - _this.maxInstancedCount = void 0; - _this.aabb = void 0; - _this.entity = void 0; - Object.assign(_assertThisInitialized(_this), data3); - return _this; - } - _createClass(GeometryComponent2, [{ - key: "setAttribute", - value: function setAttribute(name, data3, descriptor, bufferGetter) { - var existed = this.attributes.find(function(a4) { - return a4.name === name; - }); - if (!existed) { - this.attributes.push(_objectSpread(_objectSpread({ - dirty: true, - name, - data: data3 - }, descriptor), {}, { - bufferGetter - })); - } else { - existed.data = data3; - existed.dirty = true; - } - this.dirty = true; - return this; - } - }, { - key: "setIndex", - value: function setIndex(data3) { - this.indices = new Uint32Array(data3.buffer ? data3.buffer : data3); - this.dirty = true; - return this; - } - }, { - key: "applyMatrix", - value: function applyMatrix4(matrix) { - var positionAttribute = this.attributes.find(function(_ref2) { - var name = _ref2.name; - return name === "position"; - }); - var normalAttribute = this.attributes.find(function(_ref2) { - var name = _ref2.name; - return name === "normal"; - }); - if (positionAttribute) { - positionAttribute.dirty = true; - if (positionAttribute.data && positionAttribute.data.length) { - for (var i4 = 0; i4 < positionAttribute.data.length; i4 += 3) { - var position2 = vec4_exports.fromValues(positionAttribute.data[i4], positionAttribute.data[i4 + 1], positionAttribute.data[i4 + 2], 1); - vec4_exports.transformMat4(position2, position2, matrix); - if (isTypedArray(positionAttribute.data)) { - positionAttribute.data.set([position2[0], position2[1], position2[2]], i4); - } else { - positionAttribute.data[i4] = position2[0]; - positionAttribute.data[i4 + 1] = position2[1]; - positionAttribute.data[i4 + 2] = position2[2]; - } - } - } - } - if (normalAttribute) { - var normalMatrix = mat3_exports.normalFromMat4(mat3_exports.create(), matrix); - if (normalAttribute.data && normalAttribute.data.length) { - for (var _i = 0; _i < normalAttribute.data.length; _i += 3) { - var normal2 = vec3_exports.fromValues(normalAttribute.data[_i], normalAttribute.data[_i + 1], normalAttribute.data[_i + 2]); - vec3_exports.transformMat3(normal2, normal2, normalMatrix); - vec3_exports.normalize(normal2, normal2); - if (isTypedArray(normalAttribute.data)) { - normalAttribute.data.set([normal2[0], normal2[1], normal2[2]], _i); - } else { - normalAttribute.data[_i] = normal2[0]; - normalAttribute.data[_i + 1] = normal2[1]; - normalAttribute.data[_i + 2] = normal2[2]; - } - } - } - } - } - }]); - return GeometryComponent2; -}(Component2); - -// node_modules/@antv/g-webgpu-core/es/components/geometry/System.js -var import_regenerator3 = __toModule(require_regenerator()); -var import_inversify2 = __toModule(require_inversify()); - -// node_modules/@antv/g-webgpu-core/es/components/renderer/gl.js -var gl; -(function(gl2) { - gl2[gl2["DEPTH_BUFFER_BIT"] = 256] = "DEPTH_BUFFER_BIT"; - gl2[gl2["STENCIL_BUFFER_BIT"] = 1024] = "STENCIL_BUFFER_BIT"; - gl2[gl2["COLOR_BUFFER_BIT"] = 16384] = "COLOR_BUFFER_BIT"; - gl2[gl2["POINTS"] = 0] = "POINTS"; - gl2[gl2["LINES"] = 1] = "LINES"; - gl2[gl2["LINE_LOOP"] = 2] = "LINE_LOOP"; - gl2[gl2["LINE_STRIP"] = 3] = "LINE_STRIP"; - gl2[gl2["TRIANGLES"] = 4] = "TRIANGLES"; - gl2[gl2["TRIANGLE_STRIP"] = 5] = "TRIANGLE_STRIP"; - gl2[gl2["TRIANGLE_FAN"] = 6] = "TRIANGLE_FAN"; - gl2[gl2["ZERO"] = 0] = "ZERO"; - gl2[gl2["ONE"] = 1] = "ONE"; - gl2[gl2["SRC_COLOR"] = 768] = "SRC_COLOR"; - gl2[gl2["ONE_MINUS_SRC_COLOR"] = 769] = "ONE_MINUS_SRC_COLOR"; - gl2[gl2["SRC_ALPHA"] = 770] = "SRC_ALPHA"; - gl2[gl2["ONE_MINUS_SRC_ALPHA"] = 771] = "ONE_MINUS_SRC_ALPHA"; - gl2[gl2["DST_ALPHA"] = 772] = "DST_ALPHA"; - gl2[gl2["ONE_MINUS_DST_ALPHA"] = 773] = "ONE_MINUS_DST_ALPHA"; - gl2[gl2["DST_COLOR"] = 774] = "DST_COLOR"; - gl2[gl2["ONE_MINUS_DST_COLOR"] = 775] = "ONE_MINUS_DST_COLOR"; - gl2[gl2["SRC_ALPHA_SATURATE"] = 776] = "SRC_ALPHA_SATURATE"; - gl2[gl2["FUNC_ADD"] = 32774] = "FUNC_ADD"; - gl2[gl2["BLEND_EQUATION"] = 32777] = "BLEND_EQUATION"; - gl2[gl2["BLEND_EQUATION_RGB"] = 32777] = "BLEND_EQUATION_RGB"; - gl2[gl2["BLEND_EQUATION_ALPHA"] = 34877] = "BLEND_EQUATION_ALPHA"; - gl2[gl2["FUNC_SUBTRACT"] = 32778] = "FUNC_SUBTRACT"; - gl2[gl2["FUNC_REVERSE_SUBTRACT"] = 32779] = "FUNC_REVERSE_SUBTRACT"; - gl2[gl2["MAX_EXT"] = 32776] = "MAX_EXT"; - gl2[gl2["MIN_EXT"] = 32775] = "MIN_EXT"; - gl2[gl2["BLEND_DST_RGB"] = 32968] = "BLEND_DST_RGB"; - gl2[gl2["BLEND_SRC_RGB"] = 32969] = "BLEND_SRC_RGB"; - gl2[gl2["BLEND_DST_ALPHA"] = 32970] = "BLEND_DST_ALPHA"; - gl2[gl2["BLEND_SRC_ALPHA"] = 32971] = "BLEND_SRC_ALPHA"; - gl2[gl2["CONSTANT_COLOR"] = 32769] = "CONSTANT_COLOR"; - gl2[gl2["ONE_MINUS_CONSTANT_COLOR"] = 32770] = "ONE_MINUS_CONSTANT_COLOR"; - gl2[gl2["CONSTANT_ALPHA"] = 32771] = "CONSTANT_ALPHA"; - gl2[gl2["ONE_MINUS_CONSTANT_ALPHA"] = 32772] = "ONE_MINUS_CONSTANT_ALPHA"; - gl2[gl2["BLEND_COLOR"] = 32773] = "BLEND_COLOR"; - gl2[gl2["ARRAY_BUFFER"] = 34962] = "ARRAY_BUFFER"; - gl2[gl2["ELEMENT_ARRAY_BUFFER"] = 34963] = "ELEMENT_ARRAY_BUFFER"; - gl2[gl2["ARRAY_BUFFER_BINDING"] = 34964] = "ARRAY_BUFFER_BINDING"; - gl2[gl2["ELEMENT_ARRAY_BUFFER_BINDING"] = 34965] = "ELEMENT_ARRAY_BUFFER_BINDING"; - gl2[gl2["STREAM_DRAW"] = 35040] = "STREAM_DRAW"; - gl2[gl2["STATIC_DRAW"] = 35044] = "STATIC_DRAW"; - gl2[gl2["DYNAMIC_DRAW"] = 35048] = "DYNAMIC_DRAW"; - gl2[gl2["BUFFER_SIZE"] = 34660] = "BUFFER_SIZE"; - gl2[gl2["BUFFER_USAGE"] = 34661] = "BUFFER_USAGE"; - gl2[gl2["CURRENT_VERTEX_ATTRIB"] = 34342] = "CURRENT_VERTEX_ATTRIB"; - gl2[gl2["FRONT"] = 1028] = "FRONT"; - gl2[gl2["BACK"] = 1029] = "BACK"; - gl2[gl2["FRONT_AND_BACK"] = 1032] = "FRONT_AND_BACK"; - gl2[gl2["CULL_FACE"] = 2884] = "CULL_FACE"; - gl2[gl2["BLEND"] = 3042] = "BLEND"; - gl2[gl2["DITHER"] = 3024] = "DITHER"; - gl2[gl2["STENCIL_TEST"] = 2960] = "STENCIL_TEST"; - gl2[gl2["DEPTH_TEST"] = 2929] = "DEPTH_TEST"; - gl2[gl2["SCISSOR_TEST"] = 3089] = "SCISSOR_TEST"; - gl2[gl2["POLYGON_OFFSET_FILL"] = 32823] = "POLYGON_OFFSET_FILL"; - gl2[gl2["SAMPLE_ALPHA_TO_COVERAGE"] = 32926] = "SAMPLE_ALPHA_TO_COVERAGE"; - gl2[gl2["SAMPLE_COVERAGE"] = 32928] = "SAMPLE_COVERAGE"; - gl2[gl2["NO_ERROR"] = 0] = "NO_ERROR"; - gl2[gl2["INVALID_ENUM"] = 1280] = "INVALID_ENUM"; - gl2[gl2["INVALID_VALUE"] = 1281] = "INVALID_VALUE"; - gl2[gl2["INVALID_OPERATION"] = 1282] = "INVALID_OPERATION"; - gl2[gl2["OUT_OF_MEMORY"] = 1285] = "OUT_OF_MEMORY"; - gl2[gl2["CW"] = 2304] = "CW"; - gl2[gl2["CCW"] = 2305] = "CCW"; - gl2[gl2["LINE_WIDTH"] = 2849] = "LINE_WIDTH"; - gl2[gl2["ALIASED_POINT_SIZE_RANGE"] = 33901] = "ALIASED_POINT_SIZE_RANGE"; - gl2[gl2["ALIASED_LINE_WIDTH_RANGE"] = 33902] = "ALIASED_LINE_WIDTH_RANGE"; - gl2[gl2["CULL_FACE_MODE"] = 2885] = "CULL_FACE_MODE"; - gl2[gl2["FRONT_FACE"] = 2886] = "FRONT_FACE"; - gl2[gl2["DEPTH_RANGE"] = 2928] = "DEPTH_RANGE"; - gl2[gl2["DEPTH_WRITEMASK"] = 2930] = "DEPTH_WRITEMASK"; - gl2[gl2["DEPTH_CLEAR_VALUE"] = 2931] = "DEPTH_CLEAR_VALUE"; - gl2[gl2["DEPTH_FUNC"] = 2932] = "DEPTH_FUNC"; - gl2[gl2["STENCIL_CLEAR_VALUE"] = 2961] = "STENCIL_CLEAR_VALUE"; - gl2[gl2["STENCIL_FUNC"] = 2962] = "STENCIL_FUNC"; - gl2[gl2["STENCIL_FAIL"] = 2964] = "STENCIL_FAIL"; - gl2[gl2["STENCIL_PASS_DEPTH_FAIL"] = 2965] = "STENCIL_PASS_DEPTH_FAIL"; - gl2[gl2["STENCIL_PASS_DEPTH_PASS"] = 2966] = "STENCIL_PASS_DEPTH_PASS"; - gl2[gl2["STENCIL_REF"] = 2967] = "STENCIL_REF"; - gl2[gl2["STENCIL_VALUE_MASK"] = 2963] = "STENCIL_VALUE_MASK"; - gl2[gl2["STENCIL_WRITEMASK"] = 2968] = "STENCIL_WRITEMASK"; - gl2[gl2["STENCIL_BACK_FUNC"] = 34816] = "STENCIL_BACK_FUNC"; - gl2[gl2["STENCIL_BACK_FAIL"] = 34817] = "STENCIL_BACK_FAIL"; - gl2[gl2["STENCIL_BACK_PASS_DEPTH_FAIL"] = 34818] = "STENCIL_BACK_PASS_DEPTH_FAIL"; - gl2[gl2["STENCIL_BACK_PASS_DEPTH_PASS"] = 34819] = "STENCIL_BACK_PASS_DEPTH_PASS"; - gl2[gl2["STENCIL_BACK_REF"] = 36003] = "STENCIL_BACK_REF"; - gl2[gl2["STENCIL_BACK_VALUE_MASK"] = 36004] = "STENCIL_BACK_VALUE_MASK"; - gl2[gl2["STENCIL_BACK_WRITEMASK"] = 36005] = "STENCIL_BACK_WRITEMASK"; - gl2[gl2["VIEWPORT"] = 2978] = "VIEWPORT"; - gl2[gl2["SCISSOR_BOX"] = 3088] = "SCISSOR_BOX"; - gl2[gl2["COLOR_CLEAR_VALUE"] = 3106] = "COLOR_CLEAR_VALUE"; - gl2[gl2["COLOR_WRITEMASK"] = 3107] = "COLOR_WRITEMASK"; - gl2[gl2["UNPACK_ALIGNMENT"] = 3317] = "UNPACK_ALIGNMENT"; - gl2[gl2["PACK_ALIGNMENT"] = 3333] = "PACK_ALIGNMENT"; - gl2[gl2["MAX_TEXTURE_SIZE"] = 3379] = "MAX_TEXTURE_SIZE"; - gl2[gl2["MAX_VIEWPORT_DIMS"] = 3386] = "MAX_VIEWPORT_DIMS"; - gl2[gl2["SUBPIXEL_BITS"] = 3408] = "SUBPIXEL_BITS"; - gl2[gl2["RED_BITS"] = 3410] = "RED_BITS"; - gl2[gl2["GREEN_BITS"] = 3411] = "GREEN_BITS"; - gl2[gl2["BLUE_BITS"] = 3412] = "BLUE_BITS"; - gl2[gl2["ALPHA_BITS"] = 3413] = "ALPHA_BITS"; - gl2[gl2["DEPTH_BITS"] = 3414] = "DEPTH_BITS"; - gl2[gl2["STENCIL_BITS"] = 3415] = "STENCIL_BITS"; - gl2[gl2["POLYGON_OFFSET_UNITS"] = 10752] = "POLYGON_OFFSET_UNITS"; - gl2[gl2["POLYGON_OFFSET_FACTOR"] = 32824] = "POLYGON_OFFSET_FACTOR"; - gl2[gl2["TEXTURE_BINDING_2D"] = 32873] = "TEXTURE_BINDING_2D"; - gl2[gl2["SAMPLE_BUFFERS"] = 32936] = "SAMPLE_BUFFERS"; - gl2[gl2["SAMPLES"] = 32937] = "SAMPLES"; - gl2[gl2["SAMPLE_COVERAGE_VALUE"] = 32938] = "SAMPLE_COVERAGE_VALUE"; - gl2[gl2["SAMPLE_COVERAGE_INVERT"] = 32939] = "SAMPLE_COVERAGE_INVERT"; - gl2[gl2["COMPRESSED_TEXTURE_FORMATS"] = 34467] = "COMPRESSED_TEXTURE_FORMATS"; - gl2[gl2["DONT_CARE"] = 4352] = "DONT_CARE"; - gl2[gl2["FASTEST"] = 4353] = "FASTEST"; - gl2[gl2["NICEST"] = 4354] = "NICEST"; - gl2[gl2["GENERATE_MIPMAP_HINT"] = 33170] = "GENERATE_MIPMAP_HINT"; - gl2[gl2["BYTE"] = 5120] = "BYTE"; - gl2[gl2["UNSIGNED_BYTE"] = 5121] = "UNSIGNED_BYTE"; - gl2[gl2["SHORT"] = 5122] = "SHORT"; - gl2[gl2["UNSIGNED_SHORT"] = 5123] = "UNSIGNED_SHORT"; - gl2[gl2["INT"] = 5124] = "INT"; - gl2[gl2["UNSIGNED_INT"] = 5125] = "UNSIGNED_INT"; - gl2[gl2["FLOAT"] = 5126] = "FLOAT"; - gl2[gl2["DEPTH_COMPONENT"] = 6402] = "DEPTH_COMPONENT"; - gl2[gl2["ALPHA"] = 6406] = "ALPHA"; - gl2[gl2["RGB"] = 6407] = "RGB"; - gl2[gl2["RGBA"] = 6408] = "RGBA"; - gl2[gl2["LUMINANCE"] = 6409] = "LUMINANCE"; - gl2[gl2["LUMINANCE_ALPHA"] = 6410] = "LUMINANCE_ALPHA"; - gl2[gl2["UNSIGNED_SHORT_4_4_4_4"] = 32819] = "UNSIGNED_SHORT_4_4_4_4"; - gl2[gl2["UNSIGNED_SHORT_5_5_5_1"] = 32820] = "UNSIGNED_SHORT_5_5_5_1"; - gl2[gl2["UNSIGNED_SHORT_5_6_5"] = 33635] = "UNSIGNED_SHORT_5_6_5"; - gl2[gl2["FRAGMENT_SHADER"] = 35632] = "FRAGMENT_SHADER"; - gl2[gl2["VERTEX_SHADER"] = 35633] = "VERTEX_SHADER"; - gl2[gl2["MAX_VERTEX_ATTRIBS"] = 34921] = "MAX_VERTEX_ATTRIBS"; - gl2[gl2["MAX_VERTEX_UNIFORM_VECTORS"] = 36347] = "MAX_VERTEX_UNIFORM_VECTORS"; - gl2[gl2["MAX_VARYING_VECTORS"] = 36348] = "MAX_VARYING_VECTORS"; - gl2[gl2["MAX_COMBINED_TEXTURE_IMAGE_UNITS"] = 35661] = "MAX_COMBINED_TEXTURE_IMAGE_UNITS"; - gl2[gl2["MAX_VERTEX_TEXTURE_IMAGE_UNITS"] = 35660] = "MAX_VERTEX_TEXTURE_IMAGE_UNITS"; - gl2[gl2["MAX_TEXTURE_IMAGE_UNITS"] = 34930] = "MAX_TEXTURE_IMAGE_UNITS"; - gl2[gl2["MAX_FRAGMENT_UNIFORM_VECTORS"] = 36349] = "MAX_FRAGMENT_UNIFORM_VECTORS"; - gl2[gl2["SHADER_TYPE"] = 35663] = "SHADER_TYPE"; - gl2[gl2["DELETE_STATUS"] = 35712] = "DELETE_STATUS"; - gl2[gl2["LINK_STATUS"] = 35714] = "LINK_STATUS"; - gl2[gl2["VALIDATE_STATUS"] = 35715] = "VALIDATE_STATUS"; - gl2[gl2["ATTACHED_SHADERS"] = 35717] = "ATTACHED_SHADERS"; - gl2[gl2["ACTIVE_UNIFORMS"] = 35718] = "ACTIVE_UNIFORMS"; - gl2[gl2["ACTIVE_ATTRIBUTES"] = 35721] = "ACTIVE_ATTRIBUTES"; - gl2[gl2["SHADING_LANGUAGE_VERSION"] = 35724] = "SHADING_LANGUAGE_VERSION"; - gl2[gl2["CURRENT_PROGRAM"] = 35725] = "CURRENT_PROGRAM"; - gl2[gl2["NEVER"] = 512] = "NEVER"; - gl2[gl2["LESS"] = 513] = "LESS"; - gl2[gl2["EQUAL"] = 514] = "EQUAL"; - gl2[gl2["LEQUAL"] = 515] = "LEQUAL"; - gl2[gl2["GREATER"] = 516] = "GREATER"; - gl2[gl2["NOTEQUAL"] = 517] = "NOTEQUAL"; - gl2[gl2["GEQUAL"] = 518] = "GEQUAL"; - gl2[gl2["ALWAYS"] = 519] = "ALWAYS"; - gl2[gl2["KEEP"] = 7680] = "KEEP"; - gl2[gl2["REPLACE"] = 7681] = "REPLACE"; - gl2[gl2["INCR"] = 7682] = "INCR"; - gl2[gl2["DECR"] = 7683] = "DECR"; - gl2[gl2["INVERT"] = 5386] = "INVERT"; - gl2[gl2["INCR_WRAP"] = 34055] = "INCR_WRAP"; - gl2[gl2["DECR_WRAP"] = 34056] = "DECR_WRAP"; - gl2[gl2["VENDOR"] = 7936] = "VENDOR"; - gl2[gl2["RENDERER"] = 7937] = "RENDERER"; - gl2[gl2["VERSION"] = 7938] = "VERSION"; - gl2[gl2["NEAREST"] = 9728] = "NEAREST"; - gl2[gl2["LINEAR"] = 9729] = "LINEAR"; - gl2[gl2["NEAREST_MIPMAP_NEAREST"] = 9984] = "NEAREST_MIPMAP_NEAREST"; - gl2[gl2["LINEAR_MIPMAP_NEAREST"] = 9985] = "LINEAR_MIPMAP_NEAREST"; - gl2[gl2["NEAREST_MIPMAP_LINEAR"] = 9986] = "NEAREST_MIPMAP_LINEAR"; - gl2[gl2["LINEAR_MIPMAP_LINEAR"] = 9987] = "LINEAR_MIPMAP_LINEAR"; - gl2[gl2["TEXTURE_MAG_FILTER"] = 10240] = "TEXTURE_MAG_FILTER"; - gl2[gl2["TEXTURE_MIN_FILTER"] = 10241] = "TEXTURE_MIN_FILTER"; - gl2[gl2["TEXTURE_WRAP_S"] = 10242] = "TEXTURE_WRAP_S"; - gl2[gl2["TEXTURE_WRAP_T"] = 10243] = "TEXTURE_WRAP_T"; - gl2[gl2["TEXTURE_2D"] = 3553] = "TEXTURE_2D"; - gl2[gl2["TEXTURE"] = 5890] = "TEXTURE"; - gl2[gl2["TEXTURE_CUBE_MAP"] = 34067] = "TEXTURE_CUBE_MAP"; - gl2[gl2["TEXTURE_BINDING_CUBE_MAP"] = 34068] = "TEXTURE_BINDING_CUBE_MAP"; - gl2[gl2["TEXTURE_CUBE_MAP_POSITIVE_X"] = 34069] = "TEXTURE_CUBE_MAP_POSITIVE_X"; - gl2[gl2["TEXTURE_CUBE_MAP_NEGATIVE_X"] = 34070] = "TEXTURE_CUBE_MAP_NEGATIVE_X"; - gl2[gl2["TEXTURE_CUBE_MAP_POSITIVE_Y"] = 34071] = "TEXTURE_CUBE_MAP_POSITIVE_Y"; - gl2[gl2["TEXTURE_CUBE_MAP_NEGATIVE_Y"] = 34072] = "TEXTURE_CUBE_MAP_NEGATIVE_Y"; - gl2[gl2["TEXTURE_CUBE_MAP_POSITIVE_Z"] = 34073] = "TEXTURE_CUBE_MAP_POSITIVE_Z"; - gl2[gl2["TEXTURE_CUBE_MAP_NEGATIVE_Z"] = 34074] = "TEXTURE_CUBE_MAP_NEGATIVE_Z"; - gl2[gl2["MAX_CUBE_MAP_TEXTURE_SIZE"] = 34076] = "MAX_CUBE_MAP_TEXTURE_SIZE"; - gl2[gl2["TEXTURE0"] = 33984] = "TEXTURE0"; - gl2[gl2["TEXTURE1"] = 33985] = "TEXTURE1"; - gl2[gl2["TEXTURE2"] = 33986] = "TEXTURE2"; - gl2[gl2["TEXTURE3"] = 33987] = "TEXTURE3"; - gl2[gl2["TEXTURE4"] = 33988] = "TEXTURE4"; - gl2[gl2["TEXTURE5"] = 33989] = "TEXTURE5"; - gl2[gl2["TEXTURE6"] = 33990] = "TEXTURE6"; - gl2[gl2["TEXTURE7"] = 33991] = "TEXTURE7"; - gl2[gl2["TEXTURE8"] = 33992] = "TEXTURE8"; - gl2[gl2["TEXTURE9"] = 33993] = "TEXTURE9"; - gl2[gl2["TEXTURE10"] = 33994] = "TEXTURE10"; - gl2[gl2["TEXTURE11"] = 33995] = "TEXTURE11"; - gl2[gl2["TEXTURE12"] = 33996] = "TEXTURE12"; - gl2[gl2["TEXTURE13"] = 33997] = "TEXTURE13"; - gl2[gl2["TEXTURE14"] = 33998] = "TEXTURE14"; - gl2[gl2["TEXTURE15"] = 33999] = "TEXTURE15"; - gl2[gl2["TEXTURE16"] = 34e3] = "TEXTURE16"; - gl2[gl2["TEXTURE17"] = 34001] = "TEXTURE17"; - gl2[gl2["TEXTURE18"] = 34002] = "TEXTURE18"; - gl2[gl2["TEXTURE19"] = 34003] = "TEXTURE19"; - gl2[gl2["TEXTURE20"] = 34004] = "TEXTURE20"; - gl2[gl2["TEXTURE21"] = 34005] = "TEXTURE21"; - gl2[gl2["TEXTURE22"] = 34006] = "TEXTURE22"; - gl2[gl2["TEXTURE23"] = 34007] = "TEXTURE23"; - gl2[gl2["TEXTURE24"] = 34008] = "TEXTURE24"; - gl2[gl2["TEXTURE25"] = 34009] = "TEXTURE25"; - gl2[gl2["TEXTURE26"] = 34010] = "TEXTURE26"; - gl2[gl2["TEXTURE27"] = 34011] = "TEXTURE27"; - gl2[gl2["TEXTURE28"] = 34012] = "TEXTURE28"; - gl2[gl2["TEXTURE29"] = 34013] = "TEXTURE29"; - gl2[gl2["TEXTURE30"] = 34014] = "TEXTURE30"; - gl2[gl2["TEXTURE31"] = 34015] = "TEXTURE31"; - gl2[gl2["ACTIVE_TEXTURE"] = 34016] = "ACTIVE_TEXTURE"; - gl2[gl2["REPEAT"] = 10497] = "REPEAT"; - gl2[gl2["CLAMP_TO_EDGE"] = 33071] = "CLAMP_TO_EDGE"; - gl2[gl2["MIRRORED_REPEAT"] = 33648] = "MIRRORED_REPEAT"; - gl2[gl2["FLOAT_VEC2"] = 35664] = "FLOAT_VEC2"; - gl2[gl2["FLOAT_VEC3"] = 35665] = "FLOAT_VEC3"; - gl2[gl2["FLOAT_VEC4"] = 35666] = "FLOAT_VEC4"; - gl2[gl2["INT_VEC2"] = 35667] = "INT_VEC2"; - gl2[gl2["INT_VEC3"] = 35668] = "INT_VEC3"; - gl2[gl2["INT_VEC4"] = 35669] = "INT_VEC4"; - gl2[gl2["BOOL"] = 35670] = "BOOL"; - gl2[gl2["BOOL_VEC2"] = 35671] = "BOOL_VEC2"; - gl2[gl2["BOOL_VEC3"] = 35672] = "BOOL_VEC3"; - gl2[gl2["BOOL_VEC4"] = 35673] = "BOOL_VEC4"; - gl2[gl2["FLOAT_MAT2"] = 35674] = "FLOAT_MAT2"; - gl2[gl2["FLOAT_MAT3"] = 35675] = "FLOAT_MAT3"; - gl2[gl2["FLOAT_MAT4"] = 35676] = "FLOAT_MAT4"; - gl2[gl2["SAMPLER_2D"] = 35678] = "SAMPLER_2D"; - gl2[gl2["SAMPLER_CUBE"] = 35680] = "SAMPLER_CUBE"; - gl2[gl2["VERTEX_ATTRIB_ARRAY_ENABLED"] = 34338] = "VERTEX_ATTRIB_ARRAY_ENABLED"; - gl2[gl2["VERTEX_ATTRIB_ARRAY_SIZE"] = 34339] = "VERTEX_ATTRIB_ARRAY_SIZE"; - gl2[gl2["VERTEX_ATTRIB_ARRAY_STRIDE"] = 34340] = "VERTEX_ATTRIB_ARRAY_STRIDE"; - gl2[gl2["VERTEX_ATTRIB_ARRAY_TYPE"] = 34341] = "VERTEX_ATTRIB_ARRAY_TYPE"; - gl2[gl2["VERTEX_ATTRIB_ARRAY_NORMALIZED"] = 34922] = "VERTEX_ATTRIB_ARRAY_NORMALIZED"; - gl2[gl2["VERTEX_ATTRIB_ARRAY_POINTER"] = 34373] = "VERTEX_ATTRIB_ARRAY_POINTER"; - gl2[gl2["VERTEX_ATTRIB_ARRAY_BUFFER_BINDING"] = 34975] = "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING"; - gl2[gl2["COMPILE_STATUS"] = 35713] = "COMPILE_STATUS"; - gl2[gl2["LOW_FLOAT"] = 36336] = "LOW_FLOAT"; - gl2[gl2["MEDIUM_FLOAT"] = 36337] = "MEDIUM_FLOAT"; - gl2[gl2["HIGH_FLOAT"] = 36338] = "HIGH_FLOAT"; - gl2[gl2["LOW_INT"] = 36339] = "LOW_INT"; - gl2[gl2["MEDIUM_INT"] = 36340] = "MEDIUM_INT"; - gl2[gl2["HIGH_INT"] = 36341] = "HIGH_INT"; - gl2[gl2["FRAMEBUFFER"] = 36160] = "FRAMEBUFFER"; - gl2[gl2["RENDERBUFFER"] = 36161] = "RENDERBUFFER"; - gl2[gl2["RGBA4"] = 32854] = "RGBA4"; - gl2[gl2["RGB5_A1"] = 32855] = "RGB5_A1"; - gl2[gl2["RGB565"] = 36194] = "RGB565"; - gl2[gl2["DEPTH_COMPONENT16"] = 33189] = "DEPTH_COMPONENT16"; - gl2[gl2["STENCIL_INDEX"] = 6401] = "STENCIL_INDEX"; - gl2[gl2["STENCIL_INDEX8"] = 36168] = "STENCIL_INDEX8"; - gl2[gl2["DEPTH_STENCIL"] = 34041] = "DEPTH_STENCIL"; - gl2[gl2["RENDERBUFFER_WIDTH"] = 36162] = "RENDERBUFFER_WIDTH"; - gl2[gl2["RENDERBUFFER_HEIGHT"] = 36163] = "RENDERBUFFER_HEIGHT"; - gl2[gl2["RENDERBUFFER_INTERNAL_FORMAT"] = 36164] = "RENDERBUFFER_INTERNAL_FORMAT"; - gl2[gl2["RENDERBUFFER_RED_SIZE"] = 36176] = "RENDERBUFFER_RED_SIZE"; - gl2[gl2["RENDERBUFFER_GREEN_SIZE"] = 36177] = "RENDERBUFFER_GREEN_SIZE"; - gl2[gl2["RENDERBUFFER_BLUE_SIZE"] = 36178] = "RENDERBUFFER_BLUE_SIZE"; - gl2[gl2["RENDERBUFFER_ALPHA_SIZE"] = 36179] = "RENDERBUFFER_ALPHA_SIZE"; - gl2[gl2["RENDERBUFFER_DEPTH_SIZE"] = 36180] = "RENDERBUFFER_DEPTH_SIZE"; - gl2[gl2["RENDERBUFFER_STENCIL_SIZE"] = 36181] = "RENDERBUFFER_STENCIL_SIZE"; - gl2[gl2["FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE"] = 36048] = "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE"; - gl2[gl2["FRAMEBUFFER_ATTACHMENT_OBJECT_NAME"] = 36049] = "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME"; - gl2[gl2["FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL"] = 36050] = "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL"; - gl2[gl2["FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE"] = 36051] = "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE"; - gl2[gl2["COLOR_ATTACHMENT0"] = 36064] = "COLOR_ATTACHMENT0"; - gl2[gl2["DEPTH_ATTACHMENT"] = 36096] = "DEPTH_ATTACHMENT"; - gl2[gl2["STENCIL_ATTACHMENT"] = 36128] = "STENCIL_ATTACHMENT"; - gl2[gl2["DEPTH_STENCIL_ATTACHMENT"] = 33306] = "DEPTH_STENCIL_ATTACHMENT"; - gl2[gl2["NONE"] = 0] = "NONE"; - gl2[gl2["FRAMEBUFFER_COMPLETE"] = 36053] = "FRAMEBUFFER_COMPLETE"; - gl2[gl2["FRAMEBUFFER_INCOMPLETE_ATTACHMENT"] = 36054] = "FRAMEBUFFER_INCOMPLETE_ATTACHMENT"; - gl2[gl2["FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"] = 36055] = "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"; - gl2[gl2["FRAMEBUFFER_INCOMPLETE_DIMENSIONS"] = 36057] = "FRAMEBUFFER_INCOMPLETE_DIMENSIONS"; - gl2[gl2["FRAMEBUFFER_UNSUPPORTED"] = 36061] = "FRAMEBUFFER_UNSUPPORTED"; - gl2[gl2["FRAMEBUFFER_BINDING"] = 36006] = "FRAMEBUFFER_BINDING"; - gl2[gl2["RENDERBUFFER_BINDING"] = 36007] = "RENDERBUFFER_BINDING"; - gl2[gl2["MAX_RENDERBUFFER_SIZE"] = 34024] = "MAX_RENDERBUFFER_SIZE"; - gl2[gl2["INVALID_FRAMEBUFFER_OPERATION"] = 1286] = "INVALID_FRAMEBUFFER_OPERATION"; - gl2[gl2["UNPACK_FLIP_Y_WEBGL"] = 37440] = "UNPACK_FLIP_Y_WEBGL"; - gl2[gl2["UNPACK_PREMULTIPLY_ALPHA_WEBGL"] = 37441] = "UNPACK_PREMULTIPLY_ALPHA_WEBGL"; - gl2[gl2["CONTEXT_LOST_WEBGL"] = 37442] = "CONTEXT_LOST_WEBGL"; - gl2[gl2["UNPACK_COLORSPACE_CONVERSION_WEBGL"] = 37443] = "UNPACK_COLORSPACE_CONVERSION_WEBGL"; - gl2[gl2["BROWSER_DEFAULT_WEBGL"] = 37444] = "BROWSER_DEFAULT_WEBGL"; - gl2[gl2["COPY_SRC"] = 1] = "COPY_SRC"; - gl2[gl2["COPY_DST"] = 2] = "COPY_DST"; - gl2[gl2["SAMPLED"] = 4] = "SAMPLED"; - gl2[gl2["STORAGE"] = 8] = "STORAGE"; - gl2[gl2["RENDER_ATTACHMENT"] = 16] = "RENDER_ATTACHMENT"; -})(gl || (gl = {})); - -// node_modules/@antv/g-webgpu-core/es/components/geometry/System.js -var _dec3; -var _dec22; -var _dec32; -var _class3; -var _class23; -var _descriptor2; -var _descriptor22; -var _temp2; -var GeometrySystem = (_dec3 = (0, import_inversify2.injectable)(), _dec22 = (0, import_inversify2.inject)(IDENTIFIER.GeometryComponentManager), _dec32 = (0, import_inversify2.inject)(IDENTIFIER.RenderEngine), _dec3(_class3 = (_class23 = (_temp2 = /* @__PURE__ */ function() { - function GeometrySystem2() { - _classCallCheck(this, GeometrySystem2); - _initializerDefineProperty(this, "geometry", _descriptor2, this); - _initializerDefineProperty(this, "engine", _descriptor22, this); - } - _createClass(GeometrySystem2, [{ - key: "execute", - value: function() { - var _execute = _asyncToGenerator(/* @__PURE__ */ import_regenerator3.default.mark(function _callee() { - var _this = this; - return import_regenerator3.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - this.geometry.forEach(function(entity, component2) { - if (component2.dirty) { - component2.attributes.forEach(function(attribute) { - if (attribute.dirty && attribute.data) { - if (!attribute.buffer) { - attribute.buffer = _this.engine.createBuffer({ - data: attribute.data, - type: gl.FLOAT - }); - } else { - var _attribute$buffer; - (_attribute$buffer = attribute.buffer) === null || _attribute$buffer === void 0 ? void 0 : _attribute$buffer.subData({ - data: attribute.data, - offset: 0 - }); - } - attribute.dirty = false; - } - }); - if (component2.indices) { - if (!component2.indicesBuffer) { - component2.indicesBuffer = _this.engine.createElements({ - data: component2.indices, - count: component2.indices.length, - type: gl.UNSIGNED_INT, - usage: gl.STATIC_DRAW - }); - } else { - component2.indicesBuffer.subData({ - data: component2.indices, - offset: 0 - }); - } - } - component2.dirty = false; - } - }); - case 1: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - function execute() { - return _execute.apply(this, arguments); - } - return execute; - }() - }, { - key: "tearDown", - value: function tearDown() { - this.geometry.forEach(function(_8, geometry35) { - if (geometry35.indicesBuffer) { - geometry35.indicesBuffer.destroy(); - } - geometry35.attributes.forEach(function(attribute) { - if (attribute.buffer) { - attribute.buffer.destroy(); - } - }); - }); - this.geometry.clear(); - } - }, { - key: "createBufferGeometry", - value: function createBufferGeometry() { - var _ref2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : { - vertexCount: 3 - }, vertexCount = _ref2.vertexCount; - var entity = createEntity(); - return this.geometry.create(entity, { - vertexCount - }); - } - }, { - key: "createInstancedBufferGeometry", - value: function createInstancedBufferGeometry(_ref2) { - var maxInstancedCount = _ref2.maxInstancedCount, vertexCount = _ref2.vertexCount; - var entity = createEntity(); - return this.geometry.create(entity, { - maxInstancedCount, - vertexCount - }); - } - }]); - return GeometrySystem2; -}(), _temp2), _descriptor2 = _applyDecoratedDescriptor(_class23.prototype, "geometry", [_dec22], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor22 = _applyDecoratedDescriptor(_class23.prototype, "engine", [_dec32], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class23)) || _class3); - -// node_modules/@antv/g-webgpu-core/es/components/material/MaterialComponent.js -function ownKeys2(object, enumerableOnly) { - var keys6 = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) - symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys6.push.apply(keys6, symbols); - } - return keys6; -} -function _objectSpread2(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = arguments[i4] != null ? arguments[i4] : {}; - if (i4 % 2) { - ownKeys2(Object(source), true).forEach(function(key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys2(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - return target; -} -function _createSuper3(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct3(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct3() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var MaterialComponent = /* @__PURE__ */ function(_Component) { - _inherits(MaterialComponent2, _Component); - var _super = _createSuper3(MaterialComponent2); - function MaterialComponent2(data3) { - var _this; - _classCallCheck(this, MaterialComponent2); - _this = _super.call(this, data3); - _this.vertexShaderGLSL = void 0; - _this.fragmentShaderGLSL = void 0; - _this.defines = {}; - _this.dirty = true; - _this.uniforms = []; - _this.cull = { - enable: true, - face: gl.BACK - }; - _this.depth = { - enable: true - }; - _this.blend = void 0; - _this.entity = void 0; - _this.type = void 0; - Object.assign(_assertThisInitialized(_this), data3); - return _this; - } - _createClass(MaterialComponent2, [{ - key: "setDefines", - value: function setDefines(defines) { - this.defines = _objectSpread2(_objectSpread2({}, this.defines), defines); - return this; - } - }, { - key: "setCull", - value: function setCull(cull) { - this.cull = cull; - return this; - } - }, { - key: "setDepth", - value: function setDepth(depth) { - this.depth = depth; - return this; - } - }, { - key: "setBlend", - value: function setBlend(blend2) { - this.blend = blend2; - return this; - } - }, { - key: "setUniform", - value: function setUniform(name, data3) { - var _this2 = this; - if (typeof name !== "string") { - Object.keys(name).forEach(function(key) { - return _this2.setUniform(key, name[key]); - }); - return this; - } - var existedUniform = this.uniforms.find(function(u3) { - return u3.name === name; - }); - if (!existedUniform) { - this.uniforms.push({ - name, - dirty: true, - data: data3 - }); - } else { - existedUniform.dirty = true; - existedUniform.data = data3; - } - this.dirty = true; - return this; - } - }]); - return MaterialComponent2; -}(Component2); - -// node_modules/@antv/g-webgpu-core/es/components/material/System.js -var import_regenerator4 = __toModule(require_regenerator()); -var import_inversify3 = __toModule(require_inversify()); -var _dec4; -var _dec23; -var _dec33; -var _dec42; -var _class4; -var _class24; -var _descriptor3; -var _descriptor23; -var _descriptor32; -var _temp3; -function ownKeys3(object, enumerableOnly) { - var keys6 = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) - symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys6.push.apply(keys6, symbols); - } - return keys6; -} -function _objectSpread3(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = arguments[i4] != null ? arguments[i4] : {}; - if (i4 % 2) { - ownKeys3(Object(source), true).forEach(function(key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys3(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - return target; -} -var MaterialSystem = (_dec4 = (0, import_inversify3.injectable)(), _dec23 = (0, import_inversify3.inject)(IDENTIFIER.MaterialComponentManager), _dec33 = (0, import_inversify3.inject)(IDENTIFIER.RenderEngine), _dec42 = (0, import_inversify3.inject)(IDENTIFIER.ShaderModuleService), _dec4(_class4 = (_class24 = (_temp3 = /* @__PURE__ */ function() { - function MaterialSystem2() { - _classCallCheck(this, MaterialSystem2); - _initializerDefineProperty(this, "material", _descriptor3, this); - _initializerDefineProperty(this, "engine", _descriptor23, this); - _initializerDefineProperty(this, "shaderModule", _descriptor32, this); - } - _createClass(MaterialSystem2, [{ - key: "execute", - value: function() { - var _execute = _asyncToGenerator(/* @__PURE__ */ import_regenerator4.default.mark(function _callee() { - return import_regenerator4.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - case "end": - return _context.stop(); - } - } - }, _callee); - })); - function execute() { - return _execute.apply(this, arguments); - } - return execute; - }() - }, { - key: "tearDown", - value: function tearDown() { - this.material.clear(); - } - }, { - key: "createShaderMaterial", - value: function createShaderMaterial(params) { - var entity = createEntity(); - var vertexShaderGLSL = params.vertexShader; - var fragmentShaderGLSL = params.fragmentShader; - var uniforms = []; - if (!this.engine.supportWebGPU) { - var moduleName = "material-".concat(entity); - this.shaderModule.registerModule(moduleName, { - vs: params.vertexShader, - fs: params.fragmentShader - }); - var materialModule = this.shaderModule.getModule(moduleName); - vertexShaderGLSL = materialModule.vs; - fragmentShaderGLSL = materialModule.fs; - if (materialModule.uniforms) { - uniforms = Object.keys(materialModule.uniforms).map(function(uniformName) { - return { - dirty: true, - name: uniformName, - data: materialModule.uniforms[uniformName] - }; - }); - } - } - return this.material.create(entity, _objectSpread3(_objectSpread3({ - vertexShaderGLSL, - fragmentShaderGLSL - }, params), {}, { - uniforms - })); - } - }]); - return MaterialSystem2; -}(), _temp3), _descriptor3 = _applyDecoratedDescriptor(_class24.prototype, "material", [_dec23], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor23 = _applyDecoratedDescriptor(_class24.prototype, "engine", [_dec33], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor32 = _applyDecoratedDescriptor(_class24.prototype, "shaderModule", [_dec42], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class24)) || _class4); - -// node_modules/@antv/g-webgpu-core/es/components/mesh/CullableComponent.js -function _createSuper4(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct4(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct4() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var Strategy; -(function(Strategy2) { - Strategy2[Strategy2["Standard"] = 0] = "Standard"; -})(Strategy || (Strategy = {})); -var CullableComponent = /* @__PURE__ */ function(_Component) { - _inherits(CullableComponent2, _Component); - var _super = _createSuper4(CullableComponent2); - function CullableComponent2(data3) { - var _this; - _classCallCheck(this, CullableComponent2); - _this = _super.call(this, data3); - _this.strategy = Strategy.Standard; - _this.visibilityPlaneMask = 0; - _this.visible = false; - Object.assign(_assertThisInitialized(_this), data3); - return _this; - } - return CullableComponent2; -}(Component2); - -// node_modules/@antv/g-webgpu-core/es/shape/AABB.js -var AABB = /* @__PURE__ */ function() { - function AABB2(center2, halfExtents) { - _classCallCheck(this, AABB2); - this.center = void 0; - this.halfExtents = void 0; - this.min = vec3_exports.create(); - this.max = vec3_exports.create(); - this.update(center2, halfExtents); - } - _createClass(AABB2, [{ - key: "update", - value: function update15(center2, halfExtents) { - this.center = center2 || vec3_exports.create(); - this.halfExtents = halfExtents || vec3_exports.fromValues(0.5, 0.5, 0.5); - this.min = vec3_exports.sub(this.min, this.center, this.halfExtents); - this.max = vec3_exports.add(this.max, this.center, this.halfExtents); - } - }, { - key: "setMinMax", - value: function setMinMax(min13, max15) { - vec3_exports.add(this.center, max15, min13); - vec3_exports.scale(this.center, this.center, 0.5); - vec3_exports.sub(this.halfExtents, max15, min13); - vec3_exports.scale(this.halfExtents, this.halfExtents, 0.5); - vec3_exports.copy(this.min, min13); - vec3_exports.copy(this.max, max15); - } - }, { - key: "getMin", - value: function getMin() { - return this.min; - } - }, { - key: "getMax", - value: function getMax() { - return this.max; - } - }, { - key: "add", - value: function add8(aabb) { - var tc = this.center; - var tcx = tc[0]; - var tcy = tc[1]; - var tcz = tc[2]; - var th = this.halfExtents; - var thx = th[0]; - var thy = th[1]; - var thz = th[2]; - var tminx = tcx - thx; - var tmaxx = tcx + thx; - var tminy = tcy - thy; - var tmaxy = tcy + thy; - var tminz = tcz - thz; - var tmaxz = tcz + thz; - var oc = aabb.center; - var ocx = oc[0]; - var ocy = oc[1]; - var ocz = oc[2]; - var oh = aabb.halfExtents; - var ohx = oh[0]; - var ohy = oh[1]; - var ohz = oh[2]; - var ominx = ocx - ohx; - var omaxx = ocx + ohx; - var ominy = ocy - ohy; - var omaxy = ocy + ohy; - var ominz = ocz - ohz; - var omaxz = ocz + ohz; - if (ominx < tminx) { - tminx = ominx; - } - if (omaxx > tmaxx) { - tmaxx = omaxx; - } - if (ominy < tminy) { - tminy = ominy; - } - if (omaxy > tmaxy) { - tmaxy = omaxy; - } - if (ominz < tminz) { - tminz = ominz; - } - if (omaxz > tmaxz) { - tmaxz = omaxz; - } - tc[0] = (tminx + tmaxx) * 0.5; - tc[1] = (tminy + tmaxy) * 0.5; - tc[2] = (tminz + tmaxz) * 0.5; - th[0] = (tmaxx - tminx) * 0.5; - th[1] = (tmaxy - tminy) * 0.5; - th[2] = (tmaxz - tminz) * 0.5; - this.min[0] = tminx; - this.min[1] = tminy; - this.min[2] = tminz; - this.max[0] = tmaxx; - this.max[1] = tmaxy; - this.max[2] = tmaxz; - } - }, { - key: "intersects", - value: function intersects2(aabb) { - var aMax = this.getMax(); - var aMin = this.getMin(); - var bMax = aabb.getMax(); - var bMin = aabb.getMin(); - return aMin[0] <= bMax[0] && aMax[0] >= bMin[0] && aMin[1] <= bMax[1] && aMax[1] >= bMin[1] && aMin[2] <= bMax[2] && aMax[2] >= bMin[2]; - } - }, { - key: "containsPoint", - value: function containsPoint(point2) { - var min13 = this.getMin(); - var max15 = this.getMax(); - return !(point2[0] < min13[0] || point2[0] > max15[0] || point2[1] < min13[1] || point2[1] > max15[1] || point2[2] < min13[2] || point2[2] > max15[2]); - } - }, { - key: "getNegativeFarPoint", - value: function getNegativeFarPoint(plane) { - if (plane.pnVertexFlag === 273) { - return vec3_exports.copy(vec3_exports.create(), this.min); - } else if (plane.pnVertexFlag === 272) { - return vec3_exports.fromValues(this.min[0], this.min[1], this.max[2]); - } else if (plane.pnVertexFlag === 257) { - return vec3_exports.fromValues(this.min[0], this.max[1], this.min[2]); - } else if (plane.pnVertexFlag === 256) { - return vec3_exports.fromValues(this.min[0], this.max[1], this.max[2]); - } else if (plane.pnVertexFlag === 17) { - return vec3_exports.fromValues(this.max[0], this.min[1], this.min[2]); - } else if (plane.pnVertexFlag === 16) { - return vec3_exports.fromValues(this.max[0], this.min[1], this.max[2]); - } else if (plane.pnVertexFlag === 1) { - return vec3_exports.fromValues(this.max[0], this.max[1], this.min[2]); - } else { - return vec3_exports.fromValues(this.max[0], this.max[1], this.max[2]); - } - } - }, { - key: "getPositiveFarPoint", - value: function getPositiveFarPoint(plane) { - if (plane.pnVertexFlag === 273) { - return vec3_exports.copy(vec3_exports.create(), this.max); - } else if (plane.pnVertexFlag === 272) { - return vec3_exports.fromValues(this.max[0], this.max[1], this.min[2]); - } else if (plane.pnVertexFlag === 257) { - return vec3_exports.fromValues(this.max[0], this.min[1], this.max[2]); - } else if (plane.pnVertexFlag === 256) { - return vec3_exports.fromValues(this.max[0], this.min[1], this.min[2]); - } else if (plane.pnVertexFlag === 17) { - return vec3_exports.fromValues(this.min[0], this.max[1], this.max[2]); - } else if (plane.pnVertexFlag === 16) { - return vec3_exports.fromValues(this.min[0], this.max[1], this.min[2]); - } else if (plane.pnVertexFlag === 1) { - return vec3_exports.fromValues(this.min[0], this.min[1], this.max[2]); - } else { - return vec3_exports.fromValues(this.min[0], this.min[1], this.min[2]); - } - } - }]); - return AABB2; -}(); - -// node_modules/@antv/g-webgpu-core/es/components/mesh/MeshComponent.js -function _createSuper5(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct5(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct5() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var MeshComponent = /* @__PURE__ */ function(_Component) { - _inherits(MeshComponent2, _Component); - var _super = _createSuper5(MeshComponent2); - function MeshComponent2(data3) { - var _this; - _classCallCheck(this, MeshComponent2); - _this = _super.call(this, data3); - _this.material = void 0; - _this.geometry = void 0; - _this.aabb = new AABB(); - _this.aabbDirty = true; - _this.model = void 0; - _this.visible = true; - _this.children = []; - Object.assign(_assertThisInitialized(_this), data3); - return _this; - } - return MeshComponent2; -}(Component2); - -// node_modules/@antv/g-webgpu-core/es/components/mesh/System.js -var import_regenerator5 = __toModule(require_regenerator()); -var import_inversify4 = __toModule(require_inversify()); - -// node_modules/@antv/g-webgpu-core/es/shape/Plane.js -var Plane = /* @__PURE__ */ function() { - function Plane3(distance15, normal2) { - _classCallCheck(this, Plane3); - this.distance = void 0; - this.normal = void 0; - this.pnVertexFlag = void 0; - this.distance = distance15 || 0; - this.normal = normal2 || vec3_exports.fromValues(0, 1, 0); - this.updatePNVertexFlag(); - } - _createClass(Plane3, [{ - key: "updatePNVertexFlag", - value: function updatePNVertexFlag() { - this.pnVertexFlag = (Number(this.normal[0] >= 0) << 8) + (Number(this.normal[1] >= 0) << 4) + Number(this.normal[2] >= 0); - } - }, { - key: "distanceToPoint", - value: function distanceToPoint(point2) { - return vec3_exports.dot(point2, this.normal) - this.distance; - } - }, { - key: "normalize", - value: function normalize5() { - var invLen = 1 / vec3_exports.len(this.normal); - vec3_exports.scale(this.normal, this.normal, invLen); - this.distance *= invLen; - } - }, { - key: "intersectsLine", - value: function intersectsLine(start, end2, point2) { - var d0 = this.distanceToPoint(start); - var d1 = this.distanceToPoint(end2); - var t4 = d0 / (d0 - d1); - var intersects2 = t4 >= 0 && t4 <= 1; - if (intersects2 && point2) { - vec3_exports.lerp(point2, start, end2, t4); - } - return intersects2; - } - }]); - return Plane3; -}(); - -// node_modules/@antv/g-webgpu-core/es/shape/Frustum.js -var Mask; -(function(Mask2) { - Mask2[Mask2["OUTSIDE"] = 4294967295] = "OUTSIDE"; - Mask2[Mask2["INSIDE"] = 0] = "INSIDE"; - Mask2[Mask2["INDETERMINATE"] = 2147483647] = "INDETERMINATE"; -})(Mask || (Mask = {})); -var Frustum = /* @__PURE__ */ function() { - function Frustum2(planes) { - _classCallCheck(this, Frustum2); - this.planes = []; - if (planes) { - this.planes = planes; - } else { - for (var i4 = 0; i4 < 6; i4++) { - this.planes.push(new Plane()); - } - } - } - _createClass(Frustum2, [{ - key: "extractFromVPMatrix", - value: function extractFromVPMatrix(vpMatrix) { - var _vpMatrix = _slicedToArray(vpMatrix, 16), m0 = _vpMatrix[0], m1 = _vpMatrix[1], m22 = _vpMatrix[2], m32 = _vpMatrix[3], m4 = _vpMatrix[4], m5 = _vpMatrix[5], m6 = _vpMatrix[6], m7 = _vpMatrix[7], m8 = _vpMatrix[8], m9 = _vpMatrix[9], m10 = _vpMatrix[10], m11 = _vpMatrix[11], m12 = _vpMatrix[12], m13 = _vpMatrix[13], m14 = _vpMatrix[14], m15 = _vpMatrix[15]; - vec3_exports.set(this.planes[0].normal, m32 - m0, m7 - m4, m11 - m8); - this.planes[0].distance = -(m15 - m12); - vec3_exports.set(this.planes[1].normal, m32 + m0, m7 + m4, m11 + m8); - this.planes[1].distance = -(m15 + m12); - vec3_exports.set(this.planes[2].normal, m32 + m1, m7 + m5, m11 + m9); - this.planes[2].distance = -(m15 + m13); - vec3_exports.set(this.planes[3].normal, m32 - m1, m7 - m5, m11 - m9); - this.planes[3].distance = -(m15 - m13); - vec3_exports.set(this.planes[4].normal, m32 - m22, m7 - m6, m11 - m10); - this.planes[4].distance = -(m15 - m14); - vec3_exports.set(this.planes[5].normal, m32 + m22, m7 + m6, m11 + m10); - this.planes[5].distance = -(m15 + m14); - this.planes.forEach(function(plane) { - plane.normalize(); - plane.updatePNVertexFlag(); - }); - } - }]); - return Frustum2; -}(); - -// node_modules/@antv/g-webgpu-core/es/utils/math.js -function getRotationScale(matrix, result) { - result[0] = matrix[0]; - result[1] = matrix[1]; - result[2] = matrix[2]; - result[3] = matrix[4]; - result[4] = matrix[5]; - result[5] = matrix[6]; - result[6] = matrix[8]; - result[7] = matrix[9]; - result[8] = matrix[10]; - return result; -} -function decodePickingColor(color4) { - var _color = _slicedToArray(color4, 3), i1 = _color[0], i22 = _color[1], i32 = _color[2]; - var index2 = i1 + i22 * 256 + i32 * 65536 - 1; - return index2; -} - -// node_modules/@antv/g-webgpu-core/es/components/mesh/System.js -var _dec5; -var _dec24; -var _dec34; -var _dec43; -var _dec52; -var _dec6; -var _class5; -var _class25; -var _descriptor4; -var _descriptor24; -var _descriptor33; -var _descriptor42; -var _descriptor5; -var _temp4; -function _createForOfIteratorHelper2(o3, allowArrayLike) { - var it; - if (typeof Symbol === "undefined" || o3[Symbol.iterator] == null) { - if (Array.isArray(o3) || (it = _unsupportedIterableToArray3(o3)) || allowArrayLike && o3 && typeof o3.length === "number") { - if (it) - o3 = it; - var i4 = 0; - var F3 = function F4() { - }; - return { s: F3, n: function n3() { - if (i4 >= o3.length) - return { done: true }; - return { done: false, value: o3[i4++] }; - }, e: function e4(_e) { - throw _e; - }, f: F3 }; - } - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - var normalCompletion = true, didErr = false, err; - return { s: function s4() { - it = o3[Symbol.iterator](); - }, n: function n3() { - var step = it.next(); - normalCompletion = step.done; - return step; - }, e: function e4(_e2) { - didErr = true; - err = _e2; - }, f: function f3() { - try { - if (!normalCompletion && it.return != null) - it.return(); - } finally { - if (didErr) - throw err; - } - } }; -} -function _unsupportedIterableToArray3(o3, minLen) { - if (!o3) - return; - if (typeof o3 === "string") - return _arrayLikeToArray3(o3, minLen); - var n3 = Object.prototype.toString.call(o3).slice(8, -1); - if (n3 === "Object" && o3.constructor) - n3 = o3.constructor.name; - if (n3 === "Map" || n3 === "Set") - return Array.from(o3); - if (n3 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n3)) - return _arrayLikeToArray3(o3, minLen); -} -function _arrayLikeToArray3(arr, len5) { - if (len5 == null || len5 > arr.length) - len5 = arr.length; - for (var i4 = 0, arr2 = new Array(len5); i4 < len5; i4++) { - arr2[i4] = arr[i4]; - } - return arr2; -} -var MeshSystem = (_dec5 = (0, import_inversify4.injectable)(), _dec24 = (0, import_inversify4.inject)(IDENTIFIER.MeshComponentManager), _dec34 = (0, import_inversify4.inject)(IDENTIFIER.CullableComponentManager), _dec43 = (0, import_inversify4.inject)(IDENTIFIER.GeometryComponentManager), _dec52 = (0, import_inversify4.inject)(IDENTIFIER.HierarchyComponentManager), _dec6 = (0, import_inversify4.inject)(IDENTIFIER.TransformComponentManager), _dec5(_class5 = (_class25 = (_temp4 = /* @__PURE__ */ function() { - function MeshSystem2() { - _classCallCheck(this, MeshSystem2); - _initializerDefineProperty(this, "mesh", _descriptor4, this); - _initializerDefineProperty(this, "cullable", _descriptor24, this); - _initializerDefineProperty(this, "geometry", _descriptor33, this); - _initializerDefineProperty(this, "hierarchy", _descriptor42, this); - _initializerDefineProperty(this, "transform", _descriptor5, this); - this.planes = void 0; - } - _createClass(MeshSystem2, [{ - key: "setFrustumPlanes", - value: function setFrustumPlanes(planes) { - this.planes = planes; - } - }, { - key: "execute", - value: function() { - var _execute = _asyncToGenerator(/* @__PURE__ */ import_regenerator5.default.mark(function _callee(views) { - var _iterator, _step, view, scene, camera, _iterator2, _step2, entity, component2, hierarchyComponent, cullableComponent, geometryComponent, meshTransform, worldTransform, _geometryComponent$aa, center2, halfExtents, transformedCenter, rotationScale, transformedHalfExtents, parentCullableComponent; - return import_regenerator5.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _iterator = _createForOfIteratorHelper2(views); - try { - for (_iterator.s(); !(_step = _iterator.n()).done; ) { - view = _step.value; - scene = view.getScene(); - camera = view.getCamera(); - _iterator2 = _createForOfIteratorHelper2(scene.getEntities()); - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { - entity = _step2.value; - component2 = this.mesh.getComponentByEntity(entity); - if (component2) { - hierarchyComponent = this.hierarchy.getComponentByEntity(entity); - cullableComponent = this.cullable.getComponentByEntity(entity); - geometryComponent = component2.geometry; - meshTransform = this.transform.getComponentByEntity(entity); - if (geometryComponent && geometryComponent.aabb && meshTransform && component2.aabbDirty) { - worldTransform = meshTransform.worldTransform; - _geometryComponent$aa = geometryComponent.aabb, center2 = _geometryComponent$aa.center, halfExtents = _geometryComponent$aa.halfExtents; - transformedCenter = vec3_exports.transformMat4(vec3_exports.create(), center2, worldTransform); - rotationScale = getRotationScale(worldTransform, mat3_exports.create()); - transformedHalfExtents = vec3_exports.transformMat3(vec3_exports.create(), halfExtents, rotationScale); - component2.aabb.update(transformedCenter, transformedHalfExtents); - component2.aabbDirty = false; - } - if (cullableComponent && geometryComponent) { - parentCullableComponent = this.cullable.getComponentByEntity((hierarchyComponent === null || hierarchyComponent === void 0 ? void 0 : hierarchyComponent.parentID) || -1); - cullableComponent.visibilityPlaneMask = this.computeVisibilityWithPlaneMask(component2.aabb, (parentCullableComponent === null || parentCullableComponent === void 0 ? void 0 : parentCullableComponent.visibilityPlaneMask) || Mask.INDETERMINATE, this.planes || camera.getFrustum().planes); - cullableComponent.visible = cullableComponent.visibilityPlaneMask !== Mask.OUTSIDE; - } - } - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - case 2: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - function execute(_x) { - return _execute.apply(this, arguments); - } - return execute; - }() - }, { - key: "tearDown", - value: function tearDown() { - this.cullable.clear(); - this.mesh.clear(); - } - }, { - key: "computeVisibilityWithPlaneMask", - value: function computeVisibilityWithPlaneMask(aabb, parentPlaneMask, planes) { - if (parentPlaneMask === Mask.OUTSIDE || parentPlaneMask === Mask.INSIDE) { - return parentPlaneMask; - } - var mask = Mask.INSIDE; - for (var k4 = 0, len5 = planes.length; k4 < len5; ++k4) { - var flag = k4 < 31 ? 1 << k4 : 0; - if (k4 < 31 && (parentPlaneMask & flag) === 0) { - continue; - } - var _planes$k = planes[k4], normal2 = _planes$k.normal, distance15 = _planes$k.distance; - if (vec3_exports.dot(normal2, aabb.getNegativeFarPoint(planes[k4])) + distance15 > 0) { - return Mask.OUTSIDE; - } - if (vec3_exports.dot(normal2, aabb.getPositiveFarPoint(planes[k4])) + distance15 > 0) { - mask |= flag; - } - } - return mask; - } - }]); - return MeshSystem2; -}(), _temp4), _descriptor4 = _applyDecoratedDescriptor(_class25.prototype, "mesh", [_dec24], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor24 = _applyDecoratedDescriptor(_class25.prototype, "cullable", [_dec34], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor33 = _applyDecoratedDescriptor(_class25.prototype, "geometry", [_dec43], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor42 = _applyDecoratedDescriptor(_class25.prototype, "hierarchy", [_dec52], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor5 = _applyDecoratedDescriptor(_class25.prototype, "transform", [_dec6], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class25)) || _class5); - -// node_modules/@antv/g-webgpu-core/es/components/renderer/passes/PixelPickingPass.js -var import_regenerator7 = __toModule(require_regenerator()); -var import_inversify6 = __toModule(require_inversify()); - -// node_modules/@antv/g-webgpu-core/es/components/renderer/passes/RenderPass.js -var import_regenerator6 = __toModule(require_regenerator()); -var import_inversify5 = __toModule(require_inversify()); -var _dec7; -var _dec25; -var _dec35; -var _dec44; -var _dec53; -var _dec62; -var _dec72; -var _dec8; -var _dec9; -var _dec10; -var _dec11; -var _class6; -var _class26; -var _descriptor6; -var _descriptor25; -var _descriptor34; -var _descriptor43; -var _descriptor52; -var _descriptor62; -var _descriptor7; -var _descriptor8; -var _descriptor9; -var _class32; -var _temp5; -function _createForOfIteratorHelper3(o3, allowArrayLike) { - var it; - if (typeof Symbol === "undefined" || o3[Symbol.iterator] == null) { - if (Array.isArray(o3) || (it = _unsupportedIterableToArray4(o3)) || allowArrayLike && o3 && typeof o3.length === "number") { - if (it) - o3 = it; - var i4 = 0; - var F3 = function F4() { - }; - return { s: F3, n: function n3() { - if (i4 >= o3.length) - return { done: true }; - return { done: false, value: o3[i4++] }; - }, e: function e4(_e) { - throw _e; - }, f: F3 }; - } - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - var normalCompletion = true, didErr = false, err; - return { s: function s4() { - it = o3[Symbol.iterator](); - }, n: function n3() { - var step = it.next(); - normalCompletion = step.done; - return step; - }, e: function e4(_e2) { - didErr = true; - err = _e2; - }, f: function f3() { - try { - if (!normalCompletion && it.return != null) - it.return(); - } finally { - if (didErr) - throw err; - } - } }; -} -function _unsupportedIterableToArray4(o3, minLen) { - if (!o3) - return; - if (typeof o3 === "string") - return _arrayLikeToArray4(o3, minLen); - var n3 = Object.prototype.toString.call(o3).slice(8, -1); - if (n3 === "Object" && o3.constructor) - n3 = o3.constructor.name; - if (n3 === "Map" || n3 === "Set") - return Array.from(o3); - if (n3 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n3)) - return _arrayLikeToArray4(o3, minLen); -} -function _arrayLikeToArray4(arr, len5) { - if (len5 == null || len5 > arr.length) - len5 = arr.length; - for (var i4 = 0, arr2 = new Array(len5); i4 < len5; i4++) { - arr2[i4] = arr[i4]; - } - return arr2; -} -var RenderPass = (_dec7 = (0, import_inversify5.injectable)(), _dec25 = (0, import_inversify5.inject)(IDENTIFIER.MeshComponentManager), _dec35 = (0, import_inversify5.inject)(IDENTIFIER.GeometryComponentManager), _dec44 = (0, import_inversify5.inject)(IDENTIFIER.MaterialComponentManager), _dec53 = (0, import_inversify5.inject)(IDENTIFIER.CullableComponentManager), _dec62 = (0, import_inversify5.inject)(IDENTIFIER.TransformComponentManager), _dec72 = (0, import_inversify5.inject)(IDENTIFIER.HierarchyComponentManager), _dec8 = (0, import_inversify5.inject)(IDENTIFIER.Systems), _dec9 = (0, import_inversify5.named)(IDENTIFIER.FrameGraphSystem), _dec10 = (0, import_inversify5.inject)(IDENTIFIER.RenderEngine), _dec11 = (0, import_inversify5.inject)(IDENTIFIER.ResourcePool), _dec7(_class6 = (_class26 = (_temp5 = _class32 = /* @__PURE__ */ function() { - function RenderPass2() { - var _this = this; - _classCallCheck(this, RenderPass2); - _initializerDefineProperty(this, "mesh", _descriptor6, this); - _initializerDefineProperty(this, "geometry", _descriptor25, this); - _initializerDefineProperty(this, "material", _descriptor34, this); - _initializerDefineProperty(this, "cullable", _descriptor43, this); - _initializerDefineProperty(this, "transform", _descriptor52, this); - _initializerDefineProperty(this, "hierarchy", _descriptor62, this); - _initializerDefineProperty(this, "frameGraphSystem", _descriptor7, this); - _initializerDefineProperty(this, "engine", _descriptor8, this); - _initializerDefineProperty(this, "resourcePool", _descriptor9, this); - this.modelCache = {}; - this.setup = function(fg, passNode, pass) { - var output = fg.createRenderTarget(passNode, "color buffer", { - width: 1, - height: 1, - usage: gl.RENDER_ATTACHMENT | gl.SAMPLED | gl.COPY_SRC - }); - pass.data = { - output: passNode.write(fg, output) - }; - }; - this.execute = /* @__PURE__ */ function() { - var _ref2 = _asyncToGenerator(/* @__PURE__ */ import_regenerator6.default.mark(function _callee(fg, pass, views) { - var resourceNode, framebuffer, _iterator, _step, view, canvas; - return import_regenerator6.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - resourceNode = fg.getResourceNode(pass.data.output); - framebuffer = _this.resourcePool.getOrCreateResource(resourceNode.resource); - _iterator = _createForOfIteratorHelper3(views); - _context.prev = 3; - _iterator.s(); - case 5: - if ((_step = _iterator.n()).done) { - _context.next = 11; - break; - } - view = _step.value; - _context.next = 9; - return _this.initView(view); - case 9: - _context.next = 5; - break; - case 11: - _context.next = 16; - break; - case 13: - _context.prev = 13; - _context.t0 = _context["catch"](3); - _iterator.e(_context.t0); - case 16: - _context.prev = 16; - _iterator.f(); - return _context.finish(16); - case 19: - canvas = _this.engine.getCanvas(); - framebuffer.resize({ - width: canvas.width, - height: canvas.height - }); - _this.engine.setScissor({ - enable: false - }); - _this.engine.clear({ - framebuffer, - color: views[0].getClearColor(), - depth: 1 - }); - _this.engine.useFramebuffer(framebuffer, function() { - var _iterator2 = _createForOfIteratorHelper3(views), _step2; - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { - var view2 = _step2.value; - _this.renderView(view2); - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - }); - case 24: - case "end": - return _context.stop(); - } - } - }, _callee, null, [[3, 13, 16, 19]]); - })); - return function(_x, _x2, _x3) { - return _ref2.apply(this, arguments); - }; - }(); - } - _createClass(RenderPass2, [{ - key: "renderView", - value: function renderView(view) { - var scene = view.getScene(); - var camera = view.getCamera(); - var viewMatrix = camera.getViewTransform(); - var viewProjectionMatrix = mat4_exports.multiply(mat4_exports.create(), camera.getPerspective(), viewMatrix); - camera.getFrustum().extractFromVPMatrix(viewProjectionMatrix); - var _view$getViewport = view.getViewport(), x6 = _view$getViewport.x, y5 = _view$getViewport.y, width2 = _view$getViewport.width, height = _view$getViewport.height; - this.engine.viewport({ - x: x6, - y: y5, - width: width2, - height - }); - var _iterator3 = _createForOfIteratorHelper3(scene.getEntities()), _step3; - try { - for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { - var meshEntity = _step3.value; - this.renderMesh(meshEntity, { - camera, - view, - viewMatrix - }); - } - } catch (err) { - _iterator3.e(err); - } finally { - _iterator3.f(); - } - } - }, { - key: "renderMesh", - value: function renderMesh(meshEntity, _ref2) { - var camera = _ref2.camera, view = _ref2.view, viewMatrix = _ref2.viewMatrix; - var mesh = this.mesh.getComponentByEntity(meshEntity); - if (!mesh || !mesh.visible) { - return; - } - var material = mesh.material; - var geometry35 = mesh.geometry; - if (!geometry35 || geometry35.dirty || !material) { - return; - } - var transform18 = this.transform.getComponentByEntity(meshEntity); - var modelViewMatrix = mat4_exports.multiply(mat4_exports.create(), viewMatrix, transform18.worldTransform); - var _view$getViewport2 = view.getViewport(), width2 = _view$getViewport2.width, height = _view$getViewport2.height; - material.setUniform({ - projectionMatrix: camera.getPerspective(), - modelViewMatrix, - modelMatrix: transform18.worldTransform, - viewMatrix, - cameraPosition: camera.getPosition(), - u_viewport: [width2, height] - }); - if (mesh.model) { - mesh.model.draw({ - uniforms: material.uniforms.reduce(function(cur, prev) { - cur[prev.name] = prev.data; - return cur; - }, {}) - }); - material.uniforms.forEach(function(u3) { - u3.dirty = false; - }); - material.dirty = false; - } - } - }, { - key: "initMesh", - value: function() { - var _initMesh = _asyncToGenerator(/* @__PURE__ */ import_regenerator6.default.mark(function _callee2(meshEntity, view) { - var mesh, material, geometry35, modelCacheKey, _this$engine, createModel, createAttribute, modelInitializationOptions; - return import_regenerator6.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - mesh = this.mesh.getComponentByEntity(meshEntity); - if (mesh) { - _context2.next = 3; - break; - } - return _context2.abrupt("return"); - case 3: - material = mesh.material; - geometry35 = mesh.geometry; - if (!(!geometry35 || geometry35.dirty || !material)) { - _context2.next = 7; - break; - } - return _context2.abrupt("return"); - case 7: - if (mesh.model) { - _context2.next = 24; - break; - } - modelCacheKey = "m-".concat(material.entity, "-g-").concat(geometry35.entity); - if (!this.modelCache[modelCacheKey]) { - _context2.next = 12; - break; - } - mesh.model = this.modelCache[modelCacheKey]; - return _context2.abrupt("return"); - case 12: - material.setUniform({ - projectionMatrix: 1, - modelViewMatrix: 1, - modelMatrix: 1, - viewMatrix: 1, - cameraPosition: 1, - u_viewport: 1 - }); - _this$engine = this.engine, createModel = _this$engine.createModel, createAttribute = _this$engine.createAttribute; - modelInitializationOptions = { - vs: material.vertexShaderGLSL, - fs: material.fragmentShaderGLSL, - defines: material.defines, - attributes: geometry35.attributes.reduce(function(cur, prev) { - if (prev.data && prev.buffer) { - cur[prev.name] = createAttribute({ - buffer: prev.buffer, - attributes: prev.attributes, - arrayStride: prev.arrayStride, - stepMode: prev.stepMode, - divisor: prev.stepMode === "vertex" ? 0 : 1 - }); - } - return cur; - }, {}), - uniforms: material.uniforms.reduce(function(cur, prev) { - cur[prev.name] = prev.data; - return cur; - }, {}), - scissor: { - enable: true, - box: function box2() { - return view.getViewport(); - } - } - }; - if (material.cull) { - modelInitializationOptions.cull = material.cull; - } - if (material.depth) { - modelInitializationOptions.depth = material.depth; - } - if (material.blend) { - modelInitializationOptions.blend = material.blend; - } - if (geometry35.indicesBuffer) { - modelInitializationOptions.elements = geometry35.indicesBuffer; - } - if (geometry35.maxInstancedCount) { - modelInitializationOptions.instances = geometry35.maxInstancedCount; - modelInitializationOptions.count = geometry35.vertexCount || 3; - } - _context2.next = 22; - return createModel(modelInitializationOptions); - case 22: - mesh.model = _context2.sent; - this.modelCache[modelCacheKey] = mesh.model; - case 24: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - })); - function initMesh(_x4, _x5) { - return _initMesh.apply(this, arguments); - } - return initMesh; - }() - }, { - key: "initView", - value: function() { - var _initView = _asyncToGenerator(/* @__PURE__ */ import_regenerator6.default.mark(function _callee3(view) { - var scene, _iterator4, _step4, meshEntity; - return import_regenerator6.default.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - scene = view.getScene(); - _iterator4 = _createForOfIteratorHelper3(scene.getEntities()); - _context3.prev = 2; - _iterator4.s(); - case 4: - if ((_step4 = _iterator4.n()).done) { - _context3.next = 10; - break; - } - meshEntity = _step4.value; - _context3.next = 8; - return this.initMesh(meshEntity, view); - case 8: - _context3.next = 4; - break; - case 10: - _context3.next = 15; - break; - case 12: - _context3.prev = 12; - _context3.t0 = _context3["catch"](2); - _iterator4.e(_context3.t0); - case 15: - _context3.prev = 15; - _iterator4.f(); - return _context3.finish(15); - case 18: - case "end": - return _context3.stop(); - } - } - }, _callee3, this, [[2, 12, 15, 18]]); - })); - function initView(_x6) { - return _initView.apply(this, arguments); - } - return initView; - }() - }]); - return RenderPass2; -}(), _class32.IDENTIFIER = "Render Pass", _temp5), _descriptor6 = _applyDecoratedDescriptor(_class26.prototype, "mesh", [_dec25], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor25 = _applyDecoratedDescriptor(_class26.prototype, "geometry", [_dec35], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor34 = _applyDecoratedDescriptor(_class26.prototype, "material", [_dec44], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor43 = _applyDecoratedDescriptor(_class26.prototype, "cullable", [_dec53], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor52 = _applyDecoratedDescriptor(_class26.prototype, "transform", [_dec62], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor62 = _applyDecoratedDescriptor(_class26.prototype, "hierarchy", [_dec72], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor7 = _applyDecoratedDescriptor(_class26.prototype, "frameGraphSystem", [_dec8, _dec9], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor8 = _applyDecoratedDescriptor(_class26.prototype, "engine", [_dec10], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor9 = _applyDecoratedDescriptor(_class26.prototype, "resourcePool", [_dec11], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class26)) || _class6); - -// node_modules/@antv/g-webgpu-core/es/components/renderer/passes/PixelPickingPass.js -var _dec12; -var _dec26; -var _dec36; -var _dec45; -var _dec54; -var _class7; -var _class27; -var _descriptor10; -var _descriptor26; -var _descriptor35; -var _descriptor44; -var _class33; -var _temp6; -function _createForOfIteratorHelper4(o3, allowArrayLike) { - var it; - if (typeof Symbol === "undefined" || o3[Symbol.iterator] == null) { - if (Array.isArray(o3) || (it = _unsupportedIterableToArray5(o3)) || allowArrayLike && o3 && typeof o3.length === "number") { - if (it) - o3 = it; - var i4 = 0; - var F3 = function F4() { - }; - return { s: F3, n: function n3() { - if (i4 >= o3.length) - return { done: true }; - return { done: false, value: o3[i4++] }; - }, e: function e4(_e) { - throw _e; - }, f: F3 }; - } - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - var normalCompletion = true, didErr = false, err; - return { s: function s4() { - it = o3[Symbol.iterator](); - }, n: function n3() { - var step = it.next(); - normalCompletion = step.done; - return step; - }, e: function e4(_e2) { - didErr = true; - err = _e2; - }, f: function f3() { - try { - if (!normalCompletion && it.return != null) - it.return(); - } finally { - if (didErr) - throw err; - } - } }; -} -function _unsupportedIterableToArray5(o3, minLen) { - if (!o3) - return; - if (typeof o3 === "string") - return _arrayLikeToArray5(o3, minLen); - var n3 = Object.prototype.toString.call(o3).slice(8, -1); - if (n3 === "Object" && o3.constructor) - n3 = o3.constructor.name; - if (n3 === "Map" || n3 === "Set") - return Array.from(o3); - if (n3 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n3)) - return _arrayLikeToArray5(o3, minLen); -} -function _arrayLikeToArray5(arr, len5) { - if (len5 == null || len5 > arr.length) - len5 = arr.length; - for (var i4 = 0, arr2 = new Array(len5); i4 < len5; i4++) { - arr2[i4] = arr[i4]; - } - return arr2; -} -var PickingStage = { - NONE: 0, - ENCODE: 1, - HIGHLIGHT: 2 -}; -var PixelPickingPass = (_dec12 = (0, import_inversify6.injectable)(), _dec26 = (0, import_inversify6.inject)(IDENTIFIER.RenderEngine), _dec36 = (0, import_inversify6.inject)(IDENTIFIER.ResourcePool), _dec45 = (0, import_inversify6.inject)(IDENTIFIER.RenderPassFactory), _dec54 = (0, import_inversify6.inject)(IDENTIFIER.MeshComponentManager), _dec12(_class7 = (_class27 = (_temp6 = _class33 = /* @__PURE__ */ function() { - function PixelPickingPass2() { - var _this = this; - _classCallCheck(this, PixelPickingPass2); - _initializerDefineProperty(this, "engine", _descriptor10, this); - _initializerDefineProperty(this, "resourcePool", _descriptor26, this); - _initializerDefineProperty(this, "renderPassFactory", _descriptor35, this); - _initializerDefineProperty(this, "mesh", _descriptor44, this); - this.pickingFBO = void 0; - this.views = void 0; - this.highlightEnabled = true; - this.highlightColor = [255, 0, 0, 255]; - this.alreadyInRendering = false; - this.setup = function(fg, passNode, pass) { - var output = fg.createRenderTarget(passNode, "picking fbo", { - width: 1, - height: 1 - }); - pass.data = { - output: passNode.write(fg, output) - }; - passNode.hasSideEffect = true; - }; - this.execute = /* @__PURE__ */ function() { - var _ref2 = _asyncToGenerator(/* @__PURE__ */ import_regenerator7.default.mark(function _callee(fg, pass, views) { - var _iterator, _step, _loop; - return import_regenerator7.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _this.views = views; - if (!_this.alreadyInRendering) { - _context.next = 3; - break; - } - return _context.abrupt("return"); - case 3: - _iterator = _createForOfIteratorHelper4(views); - try { - _loop = function _loop2() { - var view = _step.value; - var _view$getViewport = view.getViewport(), width2 = _view$getViewport.width, height = _view$getViewport.height; - _this.alreadyInRendering = true; - var resourceNode = fg.getResourceNode(pass.data.output); - _this.pickingFBO = _this.resourcePool.getOrCreateResource(resourceNode.resource); - _this.pickingFBO.resize({ - width: width2, - height - }); - _this.engine.useFramebuffer(_this.pickingFBO, function() { - _this.engine.clear({ - framebuffer: _this.pickingFBO, - color: [0, 0, 0, 0], - stencil: 0, - depth: 1 - }); - var renderPass = _this.renderPassFactory(RenderPass.IDENTIFIER); - var meshes = []; - var scene = view.getScene(); - var _iterator2 = _createForOfIteratorHelper4(scene.getEntities()), _step2; - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { - var meshEntity = _step2.value; - var mesh = _this.mesh.getComponentByEntity(meshEntity); - var material = mesh.material; - material.setUniform("u_PickingStage", PickingStage.ENCODE); - meshes.push(mesh); - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - renderPass.renderView(view); - meshes.forEach(function(mesh2) { - var material2 = mesh2.material; - material2.setUniform("u_PickingStage", PickingStage.HIGHLIGHT); - }); - _this.alreadyInRendering = false; - }); - }; - for (_iterator.s(); !(_step = _iterator.n()).done; ) { - _loop(); - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - case 5: - case "end": - return _context.stop(); - } - } - }, _callee); - })); - return function(_x, _x2, _x3) { - return _ref2.apply(this, arguments); - }; - }(); - this.pick = function(_ref2, view) { - var x6 = _ref2.x, y5 = _ref2.y; - var _this$engine = _this.engine, readPixels = _this$engine.readPixels, useFramebuffer = _this$engine.useFramebuffer; - var _view$getViewport2 = view.getViewport(), width2 = _view$getViewport2.width, height = _view$getViewport2.height; - var xInDevicePixel = x6 * window.devicePixelRatio; - var yInDevicePixel = y5 * window.devicePixelRatio; - if (xInDevicePixel > width2 || xInDevicePixel < 0 || yInDevicePixel > height || yInDevicePixel < 0) { - return; - } - var pickedColors; - var pickedFeatureIdx; - useFramebuffer(_this.pickingFBO, function() { - pickedColors = readPixels({ - x: Math.round(xInDevicePixel), - y: Math.round(height - (y5 + 1) * window.devicePixelRatio), - width: 1, - height: 1, - data: new Uint8Array(1 * 1 * 4), - framebuffer: _this.pickingFBO - }); - if (pickedColors[0] !== 0 || pickedColors[1] !== 0 || pickedColors[2] !== 0) { - pickedFeatureIdx = decodePickingColor(pickedColors); - if (_this.highlightEnabled) { - _this.highlightPickedFeature(pickedColors, view); - } - } - }); - return pickedFeatureIdx; - }; - } - _createClass(PixelPickingPass2, [{ - key: "enableHighlight", - value: function enableHighlight(enabled) { - this.highlightEnabled = enabled; - } - }, { - key: "setHighlightColor", - value: function setHighlightColor(color4) { - this.highlightColor = color4; - } - }, { - key: "highlightPickedFeature", - value: function highlightPickedFeature(pickedColors, view) { - if (pickedColors) { - var _iterator3 = _createForOfIteratorHelper4(view.getScene().getEntities()), _step3; - try { - for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { - var meshEntity = _step3.value; - var mesh = this.mesh.getComponentByEntity(meshEntity); - var material = mesh.material; - material.setUniform("u_PickingStage", PickingStage.HIGHLIGHT); - material.setUniform("u_PickingColor", [pickedColors[0], pickedColors[1], pickedColors[2]]); - material.setUniform("u_HighlightColor", this.highlightColor); - } - } catch (err) { - _iterator3.e(err); - } finally { - _iterator3.f(); - } - } - } - }]); - return PixelPickingPass2; -}(), _class33.IDENTIFIER = "PixelPicking Pass", _temp6), _descriptor10 = _applyDecoratedDescriptor(_class27.prototype, "engine", [_dec26], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor26 = _applyDecoratedDescriptor(_class27.prototype, "resourcePool", [_dec36], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor35 = _applyDecoratedDescriptor(_class27.prototype, "renderPassFactory", [_dec45], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor44 = _applyDecoratedDescriptor(_class27.prototype, "mesh", [_dec54], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class27)) || _class7); - -// node_modules/@antv/g-webgpu-core/es/components/renderer/System.js -var import_regenerator9 = __toModule(require_regenerator()); -var import_inversify8 = __toModule(require_inversify()); - -// node_modules/@antv/g-webgpu-core/es/components/renderer/passes/CopyPass.js -var import_regenerator8 = __toModule(require_regenerator()); -var import_inversify7 = __toModule(require_inversify()); -var _dec13; -var _dec27; -var _dec37; -var _class8; -var _class28; -var _descriptor11; -var _descriptor27; -var _class34; -var _temp7; -var copyFrag = "varying vec2 v_UV;\n\nuniform sampler2D u_Texture;\n\nvoid main() {\n gl_FragColor = vec4(texture2D(u_Texture, v_UV));\n}"; -var copyVert = "attribute vec2 a_Position;\n\nvarying vec2 v_UV;\n\nvoid main() {\n v_UV = 0.5 * (a_Position + 1.0);\n gl_Position = vec4(a_Position, 0., 1.);\n}"; -var copyFragWebGPU = "layout(set = 0, binding = 0) uniform sampler u_TextureSampler;\nlayout(set = 0, binding = 1) uniform texture2D u_Texture;\n\nlayout(location = 0) in vec2 v_UV;\nlayout(location = 0) out vec4 outColor;\n\nvoid main() {\n outColor = texture(sampler2D(u_Texture, u_TextureSampler), v_UV);\n}"; -var copyVertWebGPU = "layout(location = 0) in vec2 a_Position;\nlayout(location = 0) out vec2 v_UV;\n\nvoid main() {\n v_UV = 0.5 * (a_Position + 1.0);\n gl_Position = vec4(a_Position, 0., 1.);\n}"; -var CopyPass = (_dec13 = (0, import_inversify7.injectable)(), _dec27 = (0, import_inversify7.inject)(IDENTIFIER.RenderEngine), _dec37 = (0, import_inversify7.inject)(IDENTIFIER.ResourcePool), _dec13(_class8 = (_class28 = (_temp7 = _class34 = function CopyPass2() { - var _this = this; - _classCallCheck(this, CopyPass2); - _initializerDefineProperty(this, "engine", _descriptor11, this); - _initializerDefineProperty(this, "resourcePool", _descriptor27, this); - this.model = void 0; - this.setup = function(fg, passNode, pass) { - var renderPass = fg.getPass(RenderPass.IDENTIFIER); - if (renderPass) { - var output = fg.createRenderTarget(passNode, "render to screen", { - width: 1, - height: 1 - }); - pass.data = { - input: passNode.read(renderPass.data.output), - output: passNode.write(fg, output) - }; - } - }; - this.execute = /* @__PURE__ */ function() { - var _ref2 = _asyncToGenerator(/* @__PURE__ */ import_regenerator8.default.mark(function _callee(fg, pass) { - var _this$engine, createModel, createAttribute, createBuffer, model, resourceNode, framebuffer; - return import_regenerator8.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _this$engine = _this.engine, createModel = _this$engine.createModel, createAttribute = _this$engine.createAttribute, createBuffer = _this$engine.createBuffer; - if (_this.model) { - _context.next = 6; - break; - } - _context.next = 4; - return createModel({ - vs: _this.engine.supportWebGPU ? copyVertWebGPU : copyVert, - fs: _this.engine.supportWebGPU ? copyFragWebGPU : copyFrag, - attributes: { - a_Position: createAttribute({ - buffer: createBuffer({ - data: [-4, -4, 4, -4, 0, 4], - type: gl.FLOAT - }), - size: 2, - arrayStride: 2 * 4, - stepMode: "vertex", - attributes: [{ - shaderLocation: 0, - offset: 0, - format: "float2" - }] - }) - }, - uniforms: { - u_Texture: null - }, - depth: { - enable: false - }, - count: 3, - blend: { - enable: true - } - }); - case 4: - model = _context.sent; - _this.model = model; - case 6: - resourceNode = fg.getResourceNode(pass.data.input); - framebuffer = _this.resourcePool.getOrCreateResource(resourceNode.resource); - _this.engine.useFramebuffer(null, function() { - _this.engine.clear({ - framebuffer: null, - color: [0, 0, 0, 0], - depth: 1, - stencil: 0 - }); - _this.model.draw({ - uniforms: { - u_Texture: framebuffer - } - }); - }); - case 9: - case "end": - return _context.stop(); - } - } - }, _callee); - })); - return function(_x, _x2) { - return _ref2.apply(this, arguments); - }; - }(); - this.tearDown = function() { - _this.model = void 0; - }; -}, _class34.IDENTIFIER = "Copy Pass", _temp7), _descriptor11 = _applyDecoratedDescriptor(_class28.prototype, "engine", [_dec27], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor27 = _applyDecoratedDescriptor(_class28.prototype, "resourcePool", [_dec37], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class28)) || _class8); - -// node_modules/@antv/g-webgpu-core/es/components/renderer/System.js -var _dec14; -var _dec28; -var _dec38; -var _dec46; -var _dec55; -var _dec63; -var _class9; -var _class29; -var _descriptor12; -var _descriptor28; -var _descriptor36; -var _descriptor45; -var _temp8; -var RendererSystem = (_dec14 = (0, import_inversify8.injectable)(), _dec28 = (0, import_inversify8.inject)(IDENTIFIER.Systems), _dec38 = (0, import_inversify8.named)(IDENTIFIER.FrameGraphSystem), _dec46 = (0, import_inversify8.inject)(IDENTIFIER.RenderPassFactory), _dec55 = (0, import_inversify8.inject)(IDENTIFIER.ConfigService), _dec63 = (0, import_inversify8.inject)(IDENTIFIER.ResourcePool), _dec14(_class9 = (_class29 = (_temp8 = /* @__PURE__ */ function() { - function RendererSystem2() { - _classCallCheck(this, RendererSystem2); - _initializerDefineProperty(this, "frameGraphSystem", _descriptor12, this); - _initializerDefineProperty(this, "renderPassFactory", _descriptor28, this); - _initializerDefineProperty(this, "configService", _descriptor36, this); - _initializerDefineProperty(this, "resourcePool", _descriptor45, this); - } - _createClass(RendererSystem2, [{ - key: "execute", - value: function() { - var _execute = _asyncToGenerator(/* @__PURE__ */ import_regenerator9.default.mark(function _callee(views) { - var _this$renderPassFacto, setupRenderPass, executeRenderPass, renderPass, _this$renderPassFacto2, setupCopyPass, executeCopyPass, tearDownCopyPass, copyPass; - return import_regenerator9.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _this$renderPassFacto = this.renderPassFactory(RenderPass.IDENTIFIER), setupRenderPass = _this$renderPassFacto.setup, executeRenderPass = _this$renderPassFacto.execute; - renderPass = this.frameGraphSystem.addPass(RenderPass.IDENTIFIER, setupRenderPass, executeRenderPass); - _this$renderPassFacto2 = this.renderPassFactory(CopyPass.IDENTIFIER), setupCopyPass = _this$renderPassFacto2.setup, executeCopyPass = _this$renderPassFacto2.execute, tearDownCopyPass = _this$renderPassFacto2.tearDown; - copyPass = this.frameGraphSystem.addPass(CopyPass.IDENTIFIER, setupCopyPass, executeCopyPass, tearDownCopyPass); - this.frameGraphSystem.present(copyPass.data.output); - case 5: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - function execute(_x) { - return _execute.apply(this, arguments); - } - return execute; - }() - }, { - key: "tearDown", - value: function tearDown() { - this.resourcePool.clean(); - } - }, { - key: "pick", - value: function pick5(position2, view) { - var pickingPass = this.renderPassFactory(PixelPickingPass.IDENTIFIER); - return pickingPass.pick(position2, view); - } - }]); - return RendererSystem2; -}(), _temp8), _descriptor12 = _applyDecoratedDescriptor(_class29.prototype, "frameGraphSystem", [_dec28, _dec38], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor28 = _applyDecoratedDescriptor(_class29.prototype, "renderPassFactory", [_dec46], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor36 = _applyDecoratedDescriptor(_class29.prototype, "configService", [_dec55], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor45 = _applyDecoratedDescriptor(_class29.prototype, "resourcePool", [_dec63], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class29)) || _class9); - -// node_modules/@antv/g-webgpu-core/es/components/scenegraph/HierarchyComponent.js -function _createSuper6(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct6(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct6() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var HierarchyComponent = /* @__PURE__ */ function(_Component) { - _inherits(HierarchyComponent2, _Component); - var _super = _createSuper6(HierarchyComponent2); - function HierarchyComponent2(data3) { - var _this; - _classCallCheck(this, HierarchyComponent2); - _this = _super.call(this, data3); - _this.parentID = void 0; - Object.assign(_assertThisInitialized(_this), data3); - return _this; - } - return HierarchyComponent2; -}(Component2); - -// node_modules/@antv/g-webgpu-core/es/components/scenegraph/System.js -var import_regenerator10 = __toModule(require_regenerator()); -var import_inversify9 = __toModule(require_inversify()); -var _dec15; -var _dec29; -var _dec39; -var _dec47; -var _class10; -var _class210; -var _descriptor13; -var _descriptor29; -var _descriptor37; -var _temp9; -var SceneGraphSystem = (_dec15 = (0, import_inversify9.injectable)(), _dec29 = (0, import_inversify9.inject)(IDENTIFIER.HierarchyComponentManager), _dec39 = (0, import_inversify9.inject)(IDENTIFIER.TransformComponentManager), _dec47 = (0, import_inversify9.inject)(IDENTIFIER.MeshComponentManager), _dec15(_class10 = (_class210 = (_temp9 = /* @__PURE__ */ function() { - function SceneGraphSystem2() { - _classCallCheck(this, SceneGraphSystem2); - _initializerDefineProperty(this, "hierarchy", _descriptor13, this); - _initializerDefineProperty(this, "transform", _descriptor29, this); - _initializerDefineProperty(this, "mesh", _descriptor37, this); - } - _createClass(SceneGraphSystem2, [{ - key: "execute", - value: function() { - var _execute = _asyncToGenerator(/* @__PURE__ */ import_regenerator10.default.mark(function _callee() { - return import_regenerator10.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - this.runTransformUpdateSystem(); - this.runHierarchyUpdateSystem(); - case 2: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - function execute() { - return _execute.apply(this, arguments); - } - return execute; - }() - }, { - key: "tearDown", - value: function tearDown() { - this.hierarchy.clear(); - this.transform.clear(); - } - }, { - key: "getHierarchyComponentManager", - value: function getHierarchyComponentManager() { - return this.hierarchy; - } - }, { - key: "getTransformComponentManager", - value: function getTransformComponentManager() { - return this.transform; - } - }, { - key: "runTransformUpdateSystem", - value: function runTransformUpdateSystem() { - var _this = this; - this.transform.forEach(function(entity, transform18) { - if (transform18.isDirty() || transform18.isLocalDirty()) { - _this.setMeshAABBDirty(_this.mesh.getComponentByEntity(entity)); - transform18.updateTransform(); - } - }); - } - }, { - key: "runHierarchyUpdateSystem", - value: function runHierarchyUpdateSystem() { - var _this2 = this; - this.hierarchy.forEach(function(entity, parentComponent) { - var transformChild = _this2.transform.getComponentByEntity(entity); - var transformParent = _this2.transform.getComponentByEntity(parentComponent.parentID); - if (transformChild !== null && transformParent !== null) { - transformChild.updateTransformWithParent(transformParent); - } - }); - } - }, { - key: "attach", - value: function attach(entity, parent, isChildAlreadyInLocalSpace) { - if (this.hierarchy.contains(entity)) { - this.detach(entity); - } - this.hierarchy.create(entity, { - parentID: parent - }); - var mesh = this.mesh.getComponentByEntity(parent); - this.setMeshAABBDirty(mesh); - if (mesh && mesh.children.indexOf(entity) === -1) { - mesh.children.push(entity); - } - if (this.hierarchy.getCount() > 1) { - for (var i4 = this.hierarchy.getCount() - 1; i4 > 0; --i4) { - var parentCandidateEntity = this.hierarchy.getEntity(i4); - for (var j4 = 0; j4 < i4; ++j4) { - var childCandidateEntity = this.hierarchy.getComponent(j4); - if (childCandidateEntity.parentID === parentCandidateEntity) { - this.hierarchy.moveItem(i4, j4); - ++i4; - break; - } - } - } - } - var parentcomponent = this.hierarchy.getComponentByEntity(entity); - var transformParent = this.transform.getComponentByEntity(parent); - if (transformParent === null) { - transformParent = this.transform.create(parent); - } - var transformChild = this.transform.getComponentByEntity(entity); - if (transformChild === null) { - transformChild = this.transform.create(entity); - transformParent = this.transform.getComponentByEntity(parent); - } - transformChild.parent = transformParent; - if (!isChildAlreadyInLocalSpace && transformParent) { - transformChild.matrixTransform(mat4_exports.invert(mat4_exports.create(), transformParent.worldTransform)); - transformChild.updateTransform(); - } - if (transformParent) { - transformChild.updateTransformWithParent(transformParent); - } - } - }, { - key: "detach", - value: function detach(entity) { - var self2 = this.hierarchy.getComponentByEntity(entity); - if (self2 !== null) { - var transform18 = this.transform.getComponentByEntity(entity); - if (transform18 !== null) { - transform18.parent = null; - transform18.applyTransform(); - } - this.hierarchy.removeKeepSorted(entity); - var mesh = this.mesh.getComponentByEntity(self2.parentID); - if (mesh) { - var index2 = mesh.children.indexOf(entity); - mesh.children.splice(index2, 1); - } - this.setMeshAABBDirty(mesh); - } - } - }, { - key: "detachChildren", - value: function detachChildren(parent) { - var mesh = this.mesh.getComponentByEntity(parent); - if (mesh) { - mesh.children = []; - } - for (var i4 = 0; i4 < this.hierarchy.getCount(); ) { - var _this$hierarchy$getCo; - if (((_this$hierarchy$getCo = this.hierarchy.getComponent(i4)) === null || _this$hierarchy$getCo === void 0 ? void 0 : _this$hierarchy$getCo.parentID) === parent) { - var entity = this.hierarchy.getEntity(i4); - this.detach(entity); - } else { - ++i4; - } - } - } - }, { - key: "setMeshAABBDirty", - value: function setMeshAABBDirty(mesh) { - if (mesh) { - mesh.aabbDirty = true; - } - } - }]); - return SceneGraphSystem2; -}(), _temp9), _descriptor13 = _applyDecoratedDescriptor(_class210.prototype, "hierarchy", [_dec29], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor29 = _applyDecoratedDescriptor(_class210.prototype, "transform", [_dec39], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor37 = _applyDecoratedDescriptor(_class210.prototype, "mesh", [_dec47], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class210)) || _class10); - -// node_modules/@antv/g-webgpu-core/es/components/scenegraph/TransformComponent.js -function _createSuper7(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct7(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct7() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var TransformComponent = /* @__PURE__ */ function(_Component) { - _inherits(TransformComponent2, _Component); - var _super = _createSuper7(TransformComponent2); - function TransformComponent2(data3) { - var _this; - _classCallCheck(this, TransformComponent2); - _this = _super.call(this, data3); - _this.dirtyFlag = void 0; - _this.localDirtyFlag = void 0; - _this.parent = null; - _this.localPosition = vec3_exports.fromValues(0, 0, 0); - _this.localRotation = quat_exports.fromValues(0, 0, 0, 1); - _this.localScale = vec3_exports.fromValues(1, 1, 1); - _this.localTransform = mat4_exports.create(); - _this.position = vec3_exports.fromValues(0, 0, 0); - _this.rotation = quat_exports.fromValues(0, 0, 0, 1); - _this.scaling = vec3_exports.fromValues(1, 1, 1); - _this.worldTransform = mat4_exports.create(); - _this.matrixTransform = function() { - var transformed = mat4_exports.create(); - return function(mat) { - mat4_exports.multiply(transformed, _this.getLocalTransform(), mat); - mat4_exports.getScaling(_this.localScale, transformed); - mat4_exports.getTranslation(_this.localPosition, transformed); - mat4_exports.getRotation(_this.localRotation, transformed); - }; - }(); - _this.rotateRollPitchYaw = function() { - var quatX = quat_exports.create(); - var quatY = quat_exports.create(); - var quatZ = quat_exports.create(); - return function(x6, y5, z3) { - _this.setDirty(); - quat_exports.fromEuler(quatX, x6, 0, 0); - quat_exports.fromEuler(quatY, 0, y5, 0); - quat_exports.fromEuler(quatZ, 0, 0, z3); - quat_exports.multiply(_this.localRotation, quatX, _this.localRotation); - quat_exports.multiply(_this.localRotation, _this.localRotation, quatY); - quat_exports.multiply(_this.localRotation, quatZ, _this.localRotation); - quat_exports.normalize(_this.localRotation, _this.localRotation); - }; - }(); - _this.lerp = function() { - var aS = vec3_exports.create(); - var aR = quat_exports.create(); - var aT = vec3_exports.create(); - var bS = vec3_exports.create(); - var bR = quat_exports.create(); - var bT = vec3_exports.create(); - return function(a4, b10, t4) { - _this.setDirty(); - mat4_exports.getScaling(aS, a4.worldTransform); - mat4_exports.getTranslation(aT, a4.worldTransform); - mat4_exports.getRotation(aR, a4.worldTransform); - mat4_exports.getScaling(bS, b10.worldTransform); - mat4_exports.getTranslation(bT, b10.worldTransform); - mat4_exports.getRotation(bR, b10.worldTransform); - vec3_exports.lerp(_this.localScale, aS, bS, t4); - quat_exports.slerp(_this.localRotation, aR, bR, t4); - vec3_exports.lerp(_this.localPosition, aT, bT, t4); - }; - }(); - _this.translate = function() { - var tr = vec3_exports.create(); - return function(translation) { - vec3_exports.add(tr, _this.getPosition(), translation); - _this.setPosition(tr); - _this.setDirty(true); - return _assertThisInitialized(_this); - }; - }(); - _this.translateLocal = function() { - return function(translation) { - vec3_exports.transformQuat(translation, translation, _this.localRotation); - vec3_exports.add(_this.localPosition, _this.localPosition, translation); - _this.setLocalDirty(true); - return _assertThisInitialized(_this); - }; - }(); - _this.setPosition = function() { - var parentInvertMatrix = mat4_exports.create(); - return function(position2) { - _this.position = position2; - _this.setLocalDirty(true); - if (_this.parent === null) { - vec3_exports.copy(_this.localPosition, position2); - } else { - mat4_exports.copy(parentInvertMatrix, _this.parent.worldTransform); - mat4_exports.invert(parentInvertMatrix, parentInvertMatrix); - vec3_exports.transformMat4(_this.localPosition, position2, parentInvertMatrix); - } - return _assertThisInitialized(_this); - }; - }(); - _this.rotate = function() { - var parentInvertRotation = quat_exports.create(); - return function(quaternion) { - if (_this.parent === null) { - quat_exports.multiply(_this.localRotation, _this.localRotation, quaternion); - quat_exports.normalize(_this.localRotation, _this.localRotation); - } else { - var rot = _this.getRotation(); - var parentRot = _this.parent.getRotation(); - quat_exports.copy(parentInvertRotation, parentRot); - quat_exports.invert(parentInvertRotation, parentInvertRotation); - quat_exports.multiply(parentInvertRotation, parentInvertRotation, quaternion); - quat_exports.multiply(_this.localRotation, quaternion, rot); - quat_exports.normalize(_this.localRotation, _this.localRotation); - } - _this.setLocalDirty(); - return _assertThisInitialized(_this); - }; - }(); - _this.rotateLocal = function() { - return function(quaternion) { - quat_exports.multiply(_this.localRotation, _this.localRotation, quaternion); - quat_exports.normalize(_this.localRotation, _this.localRotation); - _this.setLocalDirty(true); - return _assertThisInitialized(_this); - }; - }(); - _this.setRotation = function() { - var invParentRot = quat_exports.create(); - return function(rotation) { - if (_this.parent === null) { - quat_exports.copy(_this.localRotation, rotation); - } else { - quat_exports.copy(invParentRot, _this.parent.getRotation()); - quat_exports.invert(invParentRot, invParentRot); - quat_exports.copy(_this.localRotation, invParentRot); - quat_exports.mul(_this.localRotation, _this.localRotation, rotation); - } - _this.setLocalDirty(true); - return _assertThisInitialized(_this); - }; - }(); - return _this; - } - _createClass(TransformComponent2, [{ - key: "setLocalPosition", - value: function setLocalPosition(position2) { - vec3_exports.copy(this.localPosition, position2); - this.setLocalDirty(true); - } - }, { - key: "setLocalScale", - value: function setLocalScale(scale12) { - vec3_exports.copy(this.localScale, scale12); - this.setLocalDirty(true); - } - }, { - key: "setLocalRotation", - value: function setLocalRotation(rotation) { - quat_exports.copy(this.localRotation, rotation); - this.setLocalDirty(true); - return this; - } - }, { - key: "isDirty", - value: function isDirty() { - return this.dirtyFlag; - } - }, { - key: "setDirty", - value: function setDirty() { - var value2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true; - if (value2) { - this.dirtyFlag |= TransformComponent2.DIRTY; - } else { - this.dirtyFlag &= ~TransformComponent2.DIRTY; - } - } - }, { - key: "isLocalDirty", - value: function isLocalDirty() { - return this.localDirtyFlag; - } - }, { - key: "setLocalDirty", - value: function setLocalDirty() { - var value2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true; - if (value2) { - this.localDirtyFlag |= TransformComponent2.DIRTY; - this.setDirty(true); - } else { - this.localDirtyFlag &= ~TransformComponent2.DIRTY; - } - } - }, { - key: "updateTransform", - value: function updateTransform() { - if (this.isLocalDirty()) { - this.getLocalTransform(); - } - if (this.isDirty()) { - if (this.parent === null) { - mat4_exports.copy(this.worldTransform, this.getLocalTransform()); - this.setDirty(false); - } - } - } - }, { - key: "updateTransformWithParent", - value: function updateTransformWithParent(parent) { - mat4_exports.multiply(this.worldTransform, parent.worldTransform, this.getLocalTransform()); - } - }, { - key: "applyTransform", - value: function applyTransform() { - this.setDirty(); - mat4_exports.getScaling(this.localScale, this.worldTransform); - mat4_exports.getTranslation(this.localPosition, this.worldTransform); - mat4_exports.getRotation(this.localRotation, this.worldTransform); - } - }, { - key: "clearTransform", - value: function clearTransform() { - this.setDirty(); - this.localPosition = vec3_exports.fromValues(0, 0, 0); - this.localRotation = quat_exports.fromValues(0, 0, 0, 1); - this.localScale = vec3_exports.fromValues(1, 1, 1); - } - }, { - key: "scaleLocal", - value: function scaleLocal(scaling) { - this.setLocalDirty(); - vec3_exports.multiply(this.localScale, this.localScale, scaling); - return this; - } - }, { - key: "getLocalPosition", - value: function getLocalPosition() { - return this.localPosition; - } - }, { - key: "getLocalRotation", - value: function getLocalRotation() { - return this.localRotation; - } - }, { - key: "getLocalScale", - value: function getLocalScale() { - return this.localScale; - } - }, { - key: "getLocalTransform", - value: function getLocalTransform() { - if (this.localDirtyFlag) { - mat4_exports.fromRotationTranslationScale(this.localTransform, this.localRotation, this.localPosition, this.localScale); - this.setLocalDirty(false); - } - return this.localTransform; - } - }, { - key: "getWorldTransform", - value: function getWorldTransform() { - if (!this.isLocalDirty() && !this.isDirty()) { - return this.worldTransform; - } - if (this.parent) { - this.parent.getWorldTransform(); - } - this.updateTransform(); - return this.worldTransform; - } - }, { - key: "getPosition", - value: function getPosition() { - mat4_exports.getTranslation(this.position, this.worldTransform); - return this.position; - } - }, { - key: "getRotation", - value: function getRotation2() { - mat4_exports.getRotation(this.rotation, this.worldTransform); - return this.rotation; - } - }, { - key: "getScale", - value: function getScale() { - mat4_exports.getScaling(this.scaling, this.worldTransform); - return this.scaling; - } - }]); - return TransformComponent2; -}(Component2); -TransformComponent.DIRTY = 1 << 0; - -// node_modules/@antv/g-webgpu-core/es/inversify.config.js -var import_inversify14 = __toModule(require_inversify()); -var import_inversify_inject_decorators = __toModule(require_lib4()); - -// node_modules/@antv/g-webgpu-core/es/components/framegraph/ResourcePool.js -var import_inversify10 = __toModule(require_inversify()); -var _dec16; -var _dec210; -var _class11; -var _class211; -var _descriptor14; -var _temp10; -var ResourcePool = (_dec16 = (0, import_inversify10.injectable)(), _dec210 = (0, import_inversify10.inject)(IDENTIFIER.RenderEngine), _dec16(_class11 = (_class211 = (_temp10 = /* @__PURE__ */ function() { - function ResourcePool2() { - _classCallCheck(this, ResourcePool2); - _initializerDefineProperty(this, "engine", _descriptor14, this); - this.resourcePool = {}; - } - _createClass(ResourcePool2, [{ - key: "getOrCreateResource", - value: function getOrCreateResource(resource) { - if (!this.resourcePool[resource.name]) { - var _resource$descriptor = resource.descriptor, width2 = _resource$descriptor.width, height = _resource$descriptor.height, usage = _resource$descriptor.usage; - this.resourcePool[resource.name] = this.engine.createFramebuffer({ - color: this.engine.createTexture2D({ - width: width2, - height, - wrapS: gl.CLAMP_TO_EDGE, - wrapT: gl.CLAMP_TO_EDGE, - usage - }) - }); - } - return this.resourcePool[resource.name]; - } - }, { - key: "clean", - value: function clean() { - this.resourcePool = {}; - } - }]); - return ResourcePool2; -}(), _temp10), _descriptor14 = _applyDecoratedDescriptor(_class211.prototype, "engine", [_dec210], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class211)) || _class11); - -// node_modules/@antv/g-webgpu-core/es/components/scenegraph/NameComponent.js -function _createSuper8(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct8(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct8() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var NameComponent = /* @__PURE__ */ function(_Component) { - _inherits(NameComponent2, _Component); - var _super = _createSuper8(NameComponent2); - function NameComponent2(data3) { - var _this; - _classCallCheck(this, NameComponent2); - _this = _super.call(this, data3); - _this.name = void 0; - _this.name = data3.name || ""; - return _this; - } - return NameComponent2; -}(Component2); - -// node_modules/@antv/g-webgpu-core/es/services/config/ConfigService.js -var import_inversify11 = __toModule(require_inversify()); -var _dec17; -var _class12; -var _temp11; -var ConfigService = (_dec17 = (0, import_inversify11.injectable)(), _dec17(_class12 = (_temp11 = /* @__PURE__ */ function() { - function ConfigService2() { - _classCallCheck(this, ConfigService2); - this.config = void 0; - } - _createClass(ConfigService2, [{ - key: "get", - value: function get100() { - return this.config; - } - }, { - key: "set", - value: function set13(config) { - this.config = config; - } - }]); - return ConfigService2; -}(), _temp11)) || _class12); - -// node_modules/@antv/g-webgpu-core/es/services/interactor/IteractorService.js -var import_inversify12 = __toModule(require_inversify()); -var _dec18; -var _class13; -var IInteractorEvent; -(function(IInteractorEvent2) { - IInteractorEvent2["PANSTART"] = "PANSTART"; - IInteractorEvent2["PANEND"] = "PANEND"; - IInteractorEvent2["PANMOVE"] = "PANMOVE"; - IInteractorEvent2["PINCH"] = "PINCH"; - IInteractorEvent2["KEYDOWN"] = "KEYDOWN"; - IInteractorEvent2["KEYUP"] = "KEYUP"; - IInteractorEvent2["HOVER"] = "HOVER"; -})(IInteractorEvent || (IInteractorEvent = {})); -var InteractorService = (_dec18 = (0, import_inversify12.injectable)(), _dec18(_class13 = /* @__PURE__ */ function() { - function InteractorService2() { - _classCallCheck(this, InteractorService2); - } - _createClass(InteractorService2, [{ - key: "listen", - value: function listen(canvas) { - } - }, { - key: "on", - value: function on2(event, args) { - } - }, { - key: "connect", - value: function connect2() { - } - }, { - key: "disconnect", - value: function disconnect() { - } - }, { - key: "destroy", - value: function destroy() { - } - }]); - return InteractorService2; -}()) || _class13); - -// node_modules/@antv/g-webgpu-core/es/services/shader-module/ShaderModuleService.js -var import_inversify13 = __toModule(require_inversify()); - -// node_modules/@antv/g-webgpu-core/es/utils/shader-module.js -function getUniformLengthByType(type2) { - var arrayLength = 0; - switch (type2) { - case "vec2": - case "ivec2": - arrayLength = 2; - break; - case "vec3": - case "ivec3": - arrayLength = 3; - break; - case "vec4": - case "ivec4": - case "mat2": - arrayLength = 4; - break; - case "mat3": - arrayLength = 9; - break; - case "mat4": - arrayLength = 16; - break; - default: - } - return arrayLength; -} -var uniformRegExp = /uniform\s+(bool|float|int|vec2|vec3|vec4|ivec2|ivec3|ivec4|mat2|mat3|mat4|sampler2D|samplerCube)\s+([\s\S]*?);/g; -function extractUniforms(content) { - var uniforms = {}; - content = content.replace(uniformRegExp, function(_8, type2, c5) { - var defaultValues = c5.split(":"); - var uniformName = defaultValues[0].trim(); - var defaultValue = ""; - if (defaultValues.length > 1) { - defaultValue = defaultValues[1].trim(); - } - switch (type2) { - case "bool": - defaultValue = defaultValue === "true"; - break; - case "float": - case "int": - defaultValue = Number(defaultValue); - break; - case "vec2": - case "vec3": - case "vec4": - case "ivec2": - case "ivec3": - case "ivec4": - case "mat2": - case "mat3": - case "mat4": - if (defaultValue) { - defaultValue = defaultValue.replace("[", "").replace("]", "").split(",").reduce(function(prev, cur) { - prev.push(Number(cur.trim())); - return prev; - }, []); - } else { - defaultValue = new Array(getUniformLengthByType(type2)).fill(0); - } - break; - default: - } - uniforms[uniformName] = defaultValue; - return "uniform ".concat(type2, " ").concat(uniformName, ";\n"); - }); - return { - content, - uniforms - }; -} - -// node_modules/@antv/g-webgpu-core/es/utils/uniq.js -function uniq9(array) { - return array.filter(function(v3, i4, a4) { - return a4.indexOf(v3) === i4; - }); -} - -// node_modules/@antv/g-webgpu-core/es/services/shader-module/ShaderModuleService.js -var _dec19; -var _class14; -var _temp12; -function ownKeys4(object, enumerableOnly) { - var keys6 = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) - symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys6.push.apply(keys6, symbols); - } - return keys6; -} -function _objectSpread4(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = arguments[i4] != null ? arguments[i4] : {}; - if (i4 % 2) { - ownKeys4(Object(source), true).forEach(function(key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys4(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - return target; -} -var pickingFrag = "varying vec4 v_PickingResult;\nuniform vec4 u_HighlightColor : [0, 0, 0, 0];\nuniform float u_PickingStage : 0.0;\n\n#define PICKING_ENCODE 1.0\n#define PICKING_HIGHLIGHT 2.0\n#define COLOR_SCALE 1. / 255.\n\n/*\n * Returns highlight color if this item is selected.\n */\nvec4 filterHighlightColor(vec4 color) {\n bool selected = bool(v_PickingResult.a);\n\n if (selected) {\n vec4 highLightColor = u_HighlightColor * COLOR_SCALE;\n\n float highLightAlpha = highLightColor.a;\n float highLightRatio = highLightAlpha / (highLightAlpha + color.a * (1.0 - highLightAlpha));\n\n vec3 resultRGB = mix(color.rgb, highLightColor.rgb, highLightRatio);\n return vec4(resultRGB, color.a);\n } else {\n return color;\n }\n}\n\n/*\n * Returns picking color if picking enabled else unmodified argument.\n */\nvec4 filterPickingColor(vec4 color) {\n vec3 pickingColor = v_PickingResult.rgb;\n if (u_PickingStage == PICKING_ENCODE && length(pickingColor) < 0.001) {\n discard;\n }\n return u_PickingStage == PICKING_ENCODE ? vec4(pickingColor, step(0.001,color.a)): color;\n}\n\n/*\n * Returns picking color if picking is enabled if not\n * highlight color if this item is selected, otherwise unmodified argument.\n */\nvec4 filterColor(vec4 color) {\n return filterPickingColor(filterHighlightColor(color));\n}\n"; -var pickingVert = "attribute vec3 a_PickingColor;\nvarying vec4 v_PickingResult;\n\nuniform vec3 u_PickingColor : [0, 0, 0];\nuniform vec4 u_HighlightColor : [0, 0, 0, 0];\nuniform float u_PickingStage : 0.0;\nuniform float u_PickingThreshold : 1.0;\nuniform float u_PickingBuffer: 0.0;\n\n#define PICKING_ENCODE 1.0\n#define PICKING_HIGHLIGHT 2.0\n#define COLOR_SCALE 1. / 255.\n\nbool isVertexPicked(vec3 vertexColor) {\n return\n abs(vertexColor.r - u_PickingColor.r) < u_PickingThreshold &&\n abs(vertexColor.g - u_PickingColor.g) < u_PickingThreshold &&\n abs(vertexColor.b - u_PickingColor.b) < u_PickingThreshold;\n}\n\nvoid setPickingColor(vec3 pickingColor) {\n // compares only in highlight stage\n v_PickingResult.a = float((u_PickingStage == PICKING_HIGHLIGHT) && isVertexPicked(pickingColor));\n\n // Stores the picking color so that the fragment shader can render it during picking\n v_PickingResult.rgb = pickingColor * COLOR_SCALE;\n}\n\nfloat setPickingSize(float x) {\n return u_PickingStage == PICKING_ENCODE ? x + u_PickingBuffer : x;\n}"; -var sdf2dFrag = "/**\n * 2D signed distance field functions\n * @see http://www.iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm\n */\n\nfloat ndot(vec2 a, vec2 b ) { return a.x*b.x - a.y*b.y; }\n\nfloat sdCircle(vec2 p, float r) {\n return length(p) - r;\n}\n\nfloat sdEquilateralTriangle(vec2 p) {\n float k = sqrt(3.0);\n p.x = abs(p.x) - 1.0;\n p.y = p.y + 1.0/k;\n if( p.x + k*p.y > 0.0 ) p = vec2(p.x-k*p.y,-k*p.x-p.y)/2.0;\n p.x -= clamp( p.x, -2.0, 0.0 );\n return -length(p)*sign(p.y);\n}\n\nfloat sdBox(vec2 p, vec2 b) {\n vec2 d = abs(p)-b;\n return length(max(d,vec2(0))) + min(max(d.x,d.y),0.0);\n}\n\nfloat sdPentagon(vec2 p, float r) {\n vec3 k = vec3(0.809016994,0.587785252,0.726542528);\n p.x = abs(p.x);\n p -= 2.0*min(dot(vec2(-k.x,k.y),p),0.0)*vec2(-k.x,k.y);\n p -= 2.0*min(dot(vec2( k.x,k.y),p),0.0)*vec2( k.x,k.y);\n p -= vec2(clamp(p.x,-r*k.z,r*k.z),r);\n return length(p)*sign(p.y);\n}\n\nfloat sdHexagon(vec2 p, float r) {\n vec3 k = vec3(-0.866025404,0.5,0.577350269);\n p = abs(p);\n p -= 2.0*min(dot(k.xy,p),0.0)*k.xy;\n p -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\n return length(p)*sign(p.y);\n}\n\nfloat sdOctogon(vec2 p, float r) {\n vec3 k = vec3(-0.9238795325, 0.3826834323, 0.4142135623 );\n p = abs(p);\n p -= 2.0*min(dot(vec2( k.x,k.y),p),0.0)*vec2( k.x,k.y);\n p -= 2.0*min(dot(vec2(-k.x,k.y),p),0.0)*vec2(-k.x,k.y);\n p -= vec2(clamp(p.x, -k.z*r, k.z*r), r);\n return length(p)*sign(p.y);\n}\n\nfloat sdHexagram(vec2 p, float r) {\n vec4 k=vec4(-0.5,0.8660254038,0.5773502692,1.7320508076);\n p = abs(p);\n p -= 2.0*min(dot(k.xy,p),0.0)*k.xy;\n p -= 2.0*min(dot(k.yx,p),0.0)*k.yx;\n p -= vec2(clamp(p.x,r*k.z,r*k.w),r);\n return length(p)*sign(p.y);\n}\n\nfloat sdRhombus(vec2 p, vec2 b) {\n vec2 q = abs(p);\n float h = clamp((-2.0*ndot(q,b)+ndot(b,b))/dot(b,b),-1.0,1.0);\n float d = length( q - 0.5*b*vec2(1.0-h,1.0+h) );\n return d * sign( q.x*b.y + q.y*b.x - b.x*b.y );\n}\n\nfloat sdVesica(vec2 p, float r, float d) {\n p = abs(p);\n float b = sqrt(r*r-d*d); // can delay this sqrt\n return ((p.y-b)*d>p.x*b)\n ? length(p-vec2(0.0,b))\n : length(p-vec2(-d,0.0))-r;\n}"; -var precisionRegExp = /precision\s+(high|low|medium)p\s+float/; -var globalDefaultprecision = "#ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n #else\n precision mediump float;\n#endif\n"; -var includeRegExp = /#pragma include (["^+"]?["\ "[a-zA-Z_0-9](.*)"]*?)/g; -var ShaderModuleService = (_dec19 = (0, import_inversify13.injectable)(), _dec19(_class14 = (_temp12 = /* @__PURE__ */ function() { - function ShaderModuleService2() { - _classCallCheck(this, ShaderModuleService2); - this.moduleCache = {}; - this.rawContentCache = {}; - } - _createClass(ShaderModuleService2, [{ - key: "registerBuiltinModules", - value: function registerBuiltinModules() { - this.destroy(); - this.registerModule("picking", { - vs: pickingVert, - fs: pickingFrag - }); - this.registerModule("sdf2d", { - vs: "", - fs: sdf2dFrag - }); - } - }, { - key: "registerModule", - value: function registerModule(moduleName, moduleParams) { - if (this.rawContentCache[moduleName]) { - return; - } - var _moduleParams$vs = moduleParams.vs, vs = _moduleParams$vs === void 0 ? "" : _moduleParams$vs, _moduleParams$fs = moduleParams.fs, fs = _moduleParams$fs === void 0 ? "" : _moduleParams$fs, declaredUniforms = moduleParams.uniforms; - var _extractUniforms = extractUniforms(vs), extractedVS = _extractUniforms.content, vsUniforms = _extractUniforms.uniforms; - var _extractUniforms2 = extractUniforms(fs), extractedFS = _extractUniforms2.content, fsUniforms = _extractUniforms2.uniforms; - this.rawContentCache[moduleName] = { - fs: extractedFS, - uniforms: _objectSpread4(_objectSpread4(_objectSpread4({}, vsUniforms), fsUniforms), declaredUniforms), - vs: extractedVS - }; - } - }, { - key: "destroy", - value: function destroy() { - this.moduleCache = {}; - this.rawContentCache = {}; - } - }, { - key: "getModule", - value: function getModule(moduleName) { - var _this = this; - if (this.moduleCache[moduleName]) { - return this.moduleCache[moduleName]; - } - var rawVS = this.rawContentCache[moduleName].vs || ""; - var rawFS = this.rawContentCache[moduleName].fs || ""; - var _this$processModule = this.processModule(rawVS, [], "vs"), vs = _this$processModule.content, vsIncludeList = _this$processModule.includeList; - var _this$processModule2 = this.processModule(rawFS, [], "fs"), fs = _this$processModule2.content, fsIncludeList = _this$processModule2.includeList; - var compiledFs = fs; - var uniforms = uniq9(vsIncludeList.concat(fsIncludeList).concat(moduleName)).reduce(function(prev, cur) { - return _objectSpread4(_objectSpread4({}, prev), _this.rawContentCache[cur].uniforms); - }, {}); - if (!precisionRegExp.test(fs)) { - compiledFs = globalDefaultprecision + fs; - } - this.moduleCache[moduleName] = { - fs: compiledFs.trim(), - uniforms, - vs: vs.trim() - }; - return this.moduleCache[moduleName]; - } - }, { - key: "processModule", - value: function processModule(rawContent, includeList, type2) { - var _this2 = this; - var compiled = rawContent.replace(includeRegExp, function(_8, strMatch) { - var includeOpt = strMatch.split(" "); - var includeName = includeOpt[0].replace(/"/g, ""); - if (includeList.indexOf(includeName) > -1) { - return ""; - } - var txt = _this2.rawContentCache[includeName][type2]; - includeList.push(includeName); - var _this2$processModule = _this2.processModule(txt || "", includeList, type2), content = _this2$processModule.content; - return content; - }); - return { - content: compiled, - includeList - }; - } - }]); - return ShaderModuleService2; -}(), _temp12)) || _class14); - -// node_modules/@antv/g-webgpu-core/es/inversify.config.js -var container = new import_inversify14.Container(); -var DECORATORS = (0, import_inversify_inject_decorators.default)(container, false); -container.bind(IDENTIFIER.ShaderModuleService).to(ShaderModuleService).inSingletonScope(); -container.bind(IDENTIFIER.NameComponentManager).toConstantValue(new ComponentManager(NameComponent)); -container.bind(IDENTIFIER.HierarchyComponentManager).toConstantValue(new ComponentManager(HierarchyComponent)); -container.bind(IDENTIFIER.TransformComponentManager).toConstantValue(new ComponentManager(TransformComponent)); -container.bind(IDENTIFIER.MeshComponentManager).toConstantValue(new ComponentManager(MeshComponent)); -container.bind(IDENTIFIER.CullableComponentManager).toConstantValue(new ComponentManager(CullableComponent)); -container.bind(IDENTIFIER.GeometryComponentManager).toConstantValue(new ComponentManager(GeometryComponent)); -container.bind(IDENTIFIER.MaterialComponentManager).toConstantValue(new ComponentManager(MaterialComponent)); -function createWorldContainer() { - var worldContainer = new import_inversify14.Container(); - worldContainer.parent = container; - worldContainer.bind(IDENTIFIER.Systems).to(SceneGraphSystem).inSingletonScope().whenTargetNamed(IDENTIFIER.SceneGraphSystem); - worldContainer.bind(IDENTIFIER.Systems).to(FrameGraphSystem).inSingletonScope().whenTargetNamed(IDENTIFIER.FrameGraphSystem); - worldContainer.bind(IDENTIFIER.Systems).to(MeshSystem).inSingletonScope().whenTargetNamed(IDENTIFIER.MeshSystem); - worldContainer.bind(IDENTIFIER.Systems).to(GeometrySystem).inSingletonScope().whenTargetNamed(IDENTIFIER.GeometrySystem); - worldContainer.bind(IDENTIFIER.Systems).to(MaterialSystem).inSingletonScope().whenTargetNamed(IDENTIFIER.MaterialSystem); - worldContainer.bind(IDENTIFIER.Systems).to(RendererSystem).inSingletonScope().whenTargetNamed(IDENTIFIER.RendererSystem); - worldContainer.bind(IDENTIFIER.ResourcePool).to(ResourcePool).inSingletonScope(); - worldContainer.bind(IDENTIFIER.ConfigService).to(ConfigService).inSingletonScope(); - worldContainer.bind(IDENTIFIER.InteractorService).to(InteractorService).inSingletonScope(); - worldContainer.bind(IDENTIFIER.RenderPass).to(RenderPass).inSingletonScope().whenTargetNamed(RenderPass.IDENTIFIER); - worldContainer.bind(IDENTIFIER.RenderPass).to(CopyPass).inSingletonScope().whenTargetNamed(CopyPass.IDENTIFIER); - worldContainer.bind(IDENTIFIER.RenderPass).to(PixelPickingPass).inSingletonScope().whenTargetNamed(PixelPickingPass.IDENTIFIER); - worldContainer.bind(IDENTIFIER.RenderPassFactory).toFactory(function(context) { - return function(name) { - return context.container.getNamed(IDENTIFIER.RenderPass, name); - }; - }); - return worldContainer; -} - -// node_modules/@antv/g-webgpu-core/es/utils/aabb.js -function generateAABBFromVertices(positions) { - var aabb = new AABB(); - var min13 = vec3_exports.fromValues(positions[0], positions[1], positions[2]); - var max15 = vec3_exports.fromValues(positions[0], positions[1], positions[2]); - for (var i4 = 3; i4 < positions.length; ) { - var x6 = positions[i4++]; - var y5 = positions[i4++]; - var z3 = positions[i4++]; - if (x6 < min13[0]) { - min13[0] = x6; - } - if (y5 < min13[1]) { - min13[1] = y5; - } - if (z3 < min13[2]) { - min13[2] = z3; - } - if (x6 > max15[0]) { - max15[0] = x6; - } - if (y5 > max15[1]) { - max15[1] = y5; - } - if (z3 > max15[2]) { - max15[2] = z3; - } - } - aabb.setMinMax(min13, max15); - return aabb; -} - -// node_modules/@antv/g-webgpu-core/es/utils/isSafari.js -var isSafari = typeof navigator !== "undefined" && /Version\/[\d\.]+.*Safari/.test(navigator.userAgent); - -// node_modules/@antv/g-webgpu-core/es/shape/BoundingSphere.js -var tmpVecA = vec3_exports.create(); - -// node_modules/@antv/g-webgpu-core/es/shape/Ray.js -var tmpVecA2 = vec3_exports.create(); -var tmpVecB = vec3_exports.create(); -var tmpVecC = vec3_exports.create(); -var tmpVecD = vec3_exports.create(); -var tmpVecE = vec3_exports.create(); - -// node_modules/@antv/g-webgpu-core/es/components/renderer/IMultiPassRenderer.js -var PassType; -(function(PassType2) { - PassType2["Normal"] = "normal"; - PassType2["PostProcessing"] = "post-processing"; -})(PassType || (PassType = {})); - -// node_modules/@antv/g-webgpu-core/es/index.js -var AST_TOKEN_TYPES; -(function(AST_TOKEN_TYPES2) { - AST_TOKEN_TYPES2["Void"] = "Void"; - AST_TOKEN_TYPES2["Boolean"] = "Boolean"; - AST_TOKEN_TYPES2["Float"] = "Float"; - AST_TOKEN_TYPES2["Uint32"] = "Uint32"; - AST_TOKEN_TYPES2["Int32"] = "Int32"; - AST_TOKEN_TYPES2["Vector"] = "Vector"; - AST_TOKEN_TYPES2["Vector2Float"] = "vec2"; - AST_TOKEN_TYPES2["Vector3Float"] = "vec3"; - AST_TOKEN_TYPES2["Vector4Float"] = "vec4"; - AST_TOKEN_TYPES2["Vector2Boolean"] = "vec2"; - AST_TOKEN_TYPES2["Vector3Boolean"] = "vec3"; - AST_TOKEN_TYPES2["Vector4Boolean"] = "vec4"; - AST_TOKEN_TYPES2["Vector2Uint"] = "vec2"; - AST_TOKEN_TYPES2["Vector3Uint"] = "vec3"; - AST_TOKEN_TYPES2["Vector4Uint"] = "vec4"; - AST_TOKEN_TYPES2["Vector2Int"] = "vec2"; - AST_TOKEN_TYPES2["Vector3Int"] = "vec3"; - AST_TOKEN_TYPES2["Vector4Int"] = "vec4"; - AST_TOKEN_TYPES2["Matrix"] = "Matrix"; - AST_TOKEN_TYPES2["Matrix3x3Float"] = "mat3x3"; - AST_TOKEN_TYPES2["Matrix4x4Float"] = "mat4x4"; - AST_TOKEN_TYPES2["Struct"] = "Struct"; - AST_TOKEN_TYPES2["FloatArray"] = "Float[]"; - AST_TOKEN_TYPES2["Vector4FloatArray"] = "vec4[]"; -})(AST_TOKEN_TYPES || (AST_TOKEN_TYPES = {})); -var AST_NODE_TYPES; -(function(AST_NODE_TYPES2) { - AST_NODE_TYPES2["Program"] = "Program"; - AST_NODE_TYPES2["Identifier"] = "Identifier"; - AST_NODE_TYPES2["VariableDeclaration"] = "VariableDeclaration"; - AST_NODE_TYPES2["BlockStatement"] = "BlockStatement"; - AST_NODE_TYPES2["ReturnStatement"] = "ReturnStatement"; - AST_NODE_TYPES2["FunctionDeclaration"] = "FunctionDeclaration"; - AST_NODE_TYPES2["VariableDeclarator"] = "VariableDeclarator"; - AST_NODE_TYPES2["AssignmentExpression"] = "AssignmentExpression"; - AST_NODE_TYPES2["LogicalExpression"] = "LogicalExpression"; - AST_NODE_TYPES2["BinaryExpression"] = "BinaryExpression"; - AST_NODE_TYPES2["ArrayExpression"] = "ArrayExpression"; - AST_NODE_TYPES2["UnaryExpression"] = "UnaryExpression"; - AST_NODE_TYPES2["UpdateExpression"] = "UpdateExpression"; - AST_NODE_TYPES2["FunctionExpression"] = "FunctionExpression"; - AST_NODE_TYPES2["MemberExpression"] = "MemberExpression"; - AST_NODE_TYPES2["ConditionalExpression"] = "ConditionalExpression"; - AST_NODE_TYPES2["ExpressionStatement"] = "ExpressionStatement"; - AST_NODE_TYPES2["CallExpression"] = "CallExpression"; - AST_NODE_TYPES2["NumThreadStatement"] = "NumThreadStatement"; - AST_NODE_TYPES2["StorageStatement"] = "StorageStatement"; - AST_NODE_TYPES2["DoWhileStatement"] = "DoWhileStatement"; - AST_NODE_TYPES2["WhileStatement"] = "WhileStatement"; - AST_NODE_TYPES2["ForStatement"] = "ForStatement"; - AST_NODE_TYPES2["BreakStatement"] = "BreakStatement"; - AST_NODE_TYPES2["ContinueStatement"] = "ContinueStatement"; - AST_NODE_TYPES2["IfStatement"] = "IfStatement"; - AST_NODE_TYPES2["ImportedFunctionStatement"] = "ImportedFunctionStatement"; -})(AST_NODE_TYPES || (AST_NODE_TYPES = {})); -var STORAGE_CLASS; -(function(STORAGE_CLASS2) { - STORAGE_CLASS2["Input"] = "Input"; - STORAGE_CLASS2["Output"] = "Output"; - STORAGE_CLASS2["Uniform"] = "Uniform"; - STORAGE_CLASS2["Workgroup"] = "Workgroup"; - STORAGE_CLASS2["UniformConstant"] = "UniformConstant"; - STORAGE_CLASS2["Image"] = "Image"; - STORAGE_CLASS2["StorageBuffer"] = "StorageBuffer"; - STORAGE_CLASS2["Private"] = "Private"; - STORAGE_CLASS2["Function"] = "Function"; -})(STORAGE_CLASS || (STORAGE_CLASS = {})); -var Target; -(function(Target2) { - Target2["GLSL100"] = "GLSL100"; - Target2["GLSL450"] = "GLSL450"; - Target2["WGSL"] = "WGSL"; -})(Target || (Target = {})); -var DefineValuePlaceholder = "__DefineValuePlaceholder__"; - -// node_modules/@antv/g-webgpu/es/camera/Camera.js -var import_inversify16 = __toModule(require_inversify()); - -// node_modules/@antv/g-webgpu/es/utils/is-number.js -function isNumber47(value2) { - return typeof value2 === "number"; -} - -// node_modules/@antv/g-webgpu/es/utils/math.js -function getAngle5(angle3) { - if (angle3 === void 0) { - return 0; - } else if (angle3 > 360 || angle3 < -360) { - return angle3 % 360; - } - return angle3; -} -function createVec3(x6, y5, z3) { - if (isNumber47(x6)) { - return vec3_exports.fromValues(x6, y5, z3); - } - if (x6.length === 3) { - return vec3_exports.clone(x6); - } - return vec3_exports.fromValues(x6[0], x6[1], x6[2]); -} - -// node_modules/@antv/g-webgpu/es/camera/Landmark.js -var Landmark = /* @__PURE__ */ function() { - function Landmark2(name, c5) { - _classCallCheck(this, Landmark2); - this.name = void 0; - this.matrix = void 0; - this.right = void 0; - this.up = void 0; - this.forward = void 0; - this.position = void 0; - this.focalPoint = void 0; - this.distanceVector = void 0; - this.distance = void 0; - this.dollyingStep = void 0; - this.azimuth = 0; - this.elevation = 0; - this.roll = 0; - this.relAzimuth = 0; - this.relElevation = 0; - this.relRoll = 0; - this.name = name; - this.matrix = mat4_exports.clone(c5.matrix); - this.right = vec3_exports.clone(c5.right); - this.up = vec3_exports.clone(c5.up); - this.forward = vec3_exports.clone(c5.forward); - this.position = vec3_exports.clone(c5.position); - this.focalPoint = vec3_exports.clone(c5.focalPoint); - this.distanceVector = vec3_exports.clone(c5.distanceVector); - this.azimuth = c5.azimuth; - this.elevation = c5.elevation; - this.roll = c5.roll; - this.relAzimuth = c5.relAzimuth; - this.relElevation = c5.relElevation; - this.relRoll = c5.relRoll; - this.dollyingStep = c5.dollyingStep; - this.distance = c5.distance; - } - _createClass(Landmark2, [{ - key: "getPosition", - value: function getPosition() { - return this.position; - } - }, { - key: "getFocalPoint", - value: function getFocalPoint() { - return this.focalPoint; - } - }, { - key: "getRoll", - value: function getRoll() { - return this.roll; - } - }, { - key: "retrieve", - value: function retrieve(c5) { - c5.matrix = mat4_exports.copy(c5.matrix, this.matrix); - c5.right = vec3_exports.copy(c5.right, this.right); - c5.up = vec3_exports.copy(c5.up, this.up); - c5.forward = vec3_exports.copy(c5.forward, this.forward); - c5.position = vec3_exports.copy(c5.position, this.position); - c5.focalPoint = vec3_exports.copy(c5.focalPoint, this.focalPoint); - c5.distanceVector = vec3_exports.copy(c5.distanceVector, this.distanceVector); - c5.azimuth = this.azimuth; - c5.elevation = this.elevation; - c5.roll = this.roll; - c5.relAzimuth = this.relAzimuth; - c5.relElevation = this.relElevation; - c5.relRoll = this.relRoll; - c5.dollyingStep = this.dollyingStep; - c5.distance = this.distance; - } - }]); - return Landmark2; -}(); - -// node_modules/@antv/g-webgpu/es/camera/Camera.js -var _dec20; -var _dec211; -var _class15; -var _class212; -var _descriptor15; -var _class35; -var _temp13; -var CAMERA_TYPE; -(function(CAMERA_TYPE2) { - CAMERA_TYPE2["ORBITING"] = "ORBITING"; - CAMERA_TYPE2["EXPLORING"] = "EXPLORING"; - CAMERA_TYPE2["TRACKING"] = "TRACKING"; -})(CAMERA_TYPE || (CAMERA_TYPE = {})); -var CAMERA_TRACKING_MODE; -(function(CAMERA_TRACKING_MODE2) { - CAMERA_TRACKING_MODE2["DEFAULT"] = "DEFAULT"; - CAMERA_TRACKING_MODE2["ROTATIONAL"] = "ROTATIONAL"; - CAMERA_TRACKING_MODE2["TRANSLATIONAL"] = "TRANSLATIONAL"; - CAMERA_TRACKING_MODE2["CINEMATIC"] = "CINEMATIC"; -})(CAMERA_TRACKING_MODE || (CAMERA_TRACKING_MODE = {})); -var CAMERA_PROJECTION_MODE; -(function(CAMERA_PROJECTION_MODE2) { - CAMERA_PROJECTION_MODE2["ORTHOGRAPHIC"] = "ORTHOGRAPHIC"; - CAMERA_PROJECTION_MODE2["PERSPECTIVE"] = "PERSPECTIVE"; -})(CAMERA_PROJECTION_MODE || (CAMERA_PROJECTION_MODE = {})); -var DEG_2_RAD = Math.PI / 180; -var RAD_2_DEG = 180 / Math.PI; -var Camera = (_dec20 = (0, import_inversify16.injectable)(), _dec211 = (0, import_inversify16.inject)(IDENTIFIER.InteractorService), _dec20(_class15 = (_class212 = (_temp13 = _class35 = /* @__PURE__ */ function() { - function Camera2() { - _classCallCheck(this, Camera2); - this.matrix = mat4_exports.create(); - this.right = vec3_exports.fromValues(1, 0, 0); - this.up = vec3_exports.fromValues(0, 1, 0); - this.forward = vec3_exports.fromValues(0, 0, 1); - this.position = vec3_exports.fromValues(0, 0, 1); - this.focalPoint = vec3_exports.fromValues(0, 0, 0); - this.distanceVector = vec3_exports.fromValues(0, 0, 0); - this.distance = 1; - this.azimuth = 0; - this.elevation = 0; - this.roll = 0; - this.relAzimuth = 0; - this.relElevation = 0; - this.relRoll = 0; - this.dollyingStep = 0; - this.maxDistance = Infinity; - this.minDistance = -Infinity; - this.rotateWorld = false; - _initializerDefineProperty(this, "interactor", _descriptor15, this); - this.fov = 30; - this.near = 0.1; - this.far = 1e4; - this.aspect = 1; - this.left = void 0; - this.rright = void 0; - this.top = void 0; - this.bottom = void 0; - this.zoom = 1; - this.perspective = mat4_exports.create(); - this.view = void 0; - this.following = void 0; - this.type = CAMERA_TYPE.EXPLORING; - this.trackingMode = CAMERA_TRACKING_MODE.DEFAULT; - this.projectionMode = CAMERA_PROJECTION_MODE.PERSPECTIVE; - this.frustum = new Frustum(); - this.landmarks = []; - this.landmarkAnimationID = void 0; - } - _createClass(Camera2, [{ - key: "clone", - value: function clone41() { - var camera = new Camera2(); - camera.setType(this.type, void 0); - camera.interactor = this.interactor; - return camera; - } - }, { - key: "getProjectionMode", - value: function getProjectionMode() { - return this.projectionMode; - } - }, { - key: "getPerspective", - value: function getPerspective() { - return this.perspective; - } - }, { - key: "getFrustum", - value: function getFrustum() { - return this.frustum; - } - }, { - key: "getPosition", - value: function getPosition() { - return this.position; - } - }, { - key: "setType", - value: function setType(type2, trackingMode) { - this.type = type2; - if (this.type === CAMERA_TYPE.EXPLORING) { - this.setWorldRotation(true); - } else { - this.setWorldRotation(false); - } - this._getAngles(); - if (this.type === CAMERA_TYPE.TRACKING && trackingMode !== void 0) { - this.setTrackingMode(trackingMode); - } - return this; - } - }, { - key: "setProjectionMode", - value: function setProjectionMode(projectionMode) { - this.projectionMode = projectionMode; - return this; - } - }, { - key: "setTrackingMode", - value: function setTrackingMode(trackingMode) { - if (this.type !== CAMERA_TYPE.TRACKING) { - throw new Error("Impossible to set a tracking mode if the camera is not of tracking type"); - } - this.trackingMode = trackingMode; - return this; - } - }, { - key: "setWorldRotation", - value: function setWorldRotation(flag) { - this.rotateWorld = flag; - this._getAngles(); - } - }, { - key: "getViewTransform", - value: function getViewTransform() { - return mat4_exports.invert(mat4_exports.create(), this.matrix); - } - }, { - key: "getWorldTransform", - value: function getWorldTransform() { - return this.matrix; - } - }, { - key: "setMatrix", - value: function setMatrix(matrix) { - this.matrix = matrix; - this._update(); - return this; - } - }, { - key: "setAspect", - value: function setAspect(aspect) { - this.setPerspective(this.near, this.far, this.fov, aspect); - return this; - } - }, { - key: "setViewOffset", - value: function setViewOffset(fullWidth, fullHeight, x6, y5, width2, height) { - this.aspect = fullWidth / fullHeight; - if (this.view === void 0) { - this.view = { - enabled: true, - fullWidth: 1, - fullHeight: 1, - offsetX: 0, - offsetY: 0, - width: 1, - height: 1 - }; - } - this.view.enabled = true; - this.view.fullWidth = fullWidth; - this.view.fullHeight = fullHeight; - this.view.offsetX = x6; - this.view.offsetY = y5; - this.view.width = width2; - this.view.height = height; - if (this.projectionMode === CAMERA_PROJECTION_MODE.PERSPECTIVE) { - this.setPerspective(this.near, this.far, this.fov, this.aspect); - } else { - this.setOrthographic(this.left, this.rright, this.top, this.bottom, this.near, this.far); - } - return this; - } - }, { - key: "clearViewOffset", - value: function clearViewOffset() { - if (this.view !== void 0) { - this.view.enabled = false; - } - if (this.projectionMode === CAMERA_PROJECTION_MODE.PERSPECTIVE) { - this.setPerspective(this.near, this.far, this.fov, this.aspect); - } else { - this.setOrthographic(this.left, this.rright, this.top, this.bottom, this.near, this.far); - } - return this; - } - }, { - key: "setPerspective", - value: function setPerspective(near2, far, fov, aspect) { - this.projectionMode = CAMERA_PROJECTION_MODE.PERSPECTIVE; - this.fov = fov; - this.near = near2; - this.far = far; - this.aspect = aspect; - mat4_exports.perspective(this.perspective, this.fov * DEG_2_RAD, this.aspect, this.near, this.far); - return this; - } - }, { - key: "setOrthographic", - value: function setOrthographic(l4, r4, t4, b10, near2, far) { - this.projectionMode = CAMERA_PROJECTION_MODE.ORTHOGRAPHIC; - this.rright = r4; - this.left = l4; - this.top = t4; - this.bottom = b10; - this.near = near2; - this.far = far; - var dx = (this.rright - this.left) / (2 * this.zoom); - var dy = (this.top - this.bottom) / (2 * this.zoom); - var cx = (this.rright + this.left) / 2; - var cy = (this.top + this.bottom) / 2; - var left2 = cx - dx; - var right2 = cx + dx; - var top = cy + dy; - var bottom = cy - dy; - if (this.view !== void 0 && this.view.enabled) { - var scaleW = (this.rright - this.left) / this.view.fullWidth / this.zoom; - var scaleH = (this.top - this.bottom) / this.view.fullHeight / this.zoom; - left2 += scaleW * this.view.offsetX; - right2 = left2 + scaleW * this.view.width; - top -= scaleH * this.view.offsetY; - bottom = top - scaleH * this.view.height; - } - mat4_exports.ortho(this.perspective, left2, right2, top, bottom, near2, far); - return this; - } - }, { - key: "setPosition", - value: function setPosition(x6, y5, z3) { - this._setPosition(x6, y5, z3); - this.setFocalPoint(this.focalPoint); - return this; - } - }, { - key: "setFocalPoint", - value: function setFocalPoint(x6, y5, z3) { - var up = vec3_exports.fromValues(0, 1, 0); - this.focalPoint = createVec3(x6, y5, z3); - if (this.trackingMode === CAMERA_TRACKING_MODE.CINEMATIC) { - var d3 = vec3_exports.subtract(vec3_exports.create(), this.focalPoint, this.position); - x6 = d3[0]; - y5 = d3[1]; - z3 = d3[2]; - var r4 = vec3_exports.length(d3); - var el = Math.asin(y5 / r4) * RAD_2_DEG; - var az = 90 + Math.atan2(z3, x6) * RAD_2_DEG; - var m4 = mat4_exports.create(); - mat4_exports.rotateY(m4, m4, az * DEG_2_RAD); - mat4_exports.rotateX(m4, m4, el * DEG_2_RAD); - up = vec3_exports.transformMat4(vec3_exports.create(), [0, 1, 0], m4); - } - mat4_exports.invert(this.matrix, mat4_exports.lookAt(mat4_exports.create(), this.position, this.focalPoint, up)); - this._getAxes(); - this._getDistance(); - this._getAngles(); - return this; - } - }, { - key: "setDistance", - value: function setDistance(d3) { - if (this.distance === d3 || d3 < 0) { - return; - } - this.distance = d3; - if (this.distance < 2e-4) { - this.distance = 2e-4; - } - this.dollyingStep = this.distance / 100; - var pos = vec3_exports.create(); - d3 = this.distance; - var n3 = this.forward; - var f3 = this.focalPoint; - pos[0] = d3 * n3[0] + f3[0]; - pos[1] = d3 * n3[1] + f3[1]; - pos[2] = d3 * n3[2] + f3[2]; - this._setPosition(pos); - return this; - } - }, { - key: "setMaxDistance", - value: function setMaxDistance(d3) { - this.maxDistance = d3; - return this; - } - }, { - key: "setMinDistance", - value: function setMinDistance(d3) { - this.minDistance = d3; - return this; - } - }, { - key: "changeAzimuth", - value: function changeAzimuth(az) { - this.setAzimuth(this.azimuth + az); - return this; - } - }, { - key: "changeElevation", - value: function changeElevation(el) { - this.setElevation(this.elevation + el); - return this; - } - }, { - key: "changeRoll", - value: function changeRoll(rl) { - this.setRoll(this.roll + rl); - return this; - } - }, { - key: "setAzimuth", - value: function setAzimuth(az) { - this.azimuth = getAngle5(az); - this.computeMatrix(); - this._getAxes(); - if (this.type === CAMERA_TYPE.ORBITING || this.type === CAMERA_TYPE.EXPLORING) { - this._getPosition(); - } else if (this.type === CAMERA_TYPE.TRACKING) { - this._getFocalPoint(); - } - return this; - } - }, { - key: "getAzimuth", - value: function getAzimuth() { - return this.azimuth; - } - }, { - key: "setElevation", - value: function setElevation(el) { - this.elevation = getAngle5(el); - this.computeMatrix(); - this._getAxes(); - if (this.type === CAMERA_TYPE.ORBITING || this.type === CAMERA_TYPE.EXPLORING) { - this._getPosition(); - } else if (this.type === CAMERA_TYPE.TRACKING) { - this._getFocalPoint(); - } - return this; - } - }, { - key: "setRoll", - value: function setRoll(angle3) { - this.roll = getAngle5(angle3); - this.computeMatrix(); - this._getAxes(); - if (this.type === CAMERA_TYPE.ORBITING || this.type === CAMERA_TYPE.EXPLORING) { - this._getPosition(); - } else if (this.type === CAMERA_TYPE.TRACKING) { - this._getFocalPoint(); - } - return this; - } - }, { - key: "rotate", - value: function rotate8(azimuth, elevation, roll) { - if (this.type === CAMERA_TYPE.EXPLORING) { - azimuth = getAngle5(azimuth); - elevation = getAngle5(elevation); - roll = getAngle5(roll); - var rotX = quat_exports.setAxisAngle(quat_exports.create(), [1, 0, 0], (this.rotateWorld ? 1 : -1) * elevation * DEG_2_RAD); - var rotY = quat_exports.setAxisAngle(quat_exports.create(), [0, 1, 0], (this.rotateWorld ? 1 : -1) * azimuth * DEG_2_RAD); - var rotZ = quat_exports.setAxisAngle(quat_exports.create(), [0, 0, 1], roll * DEG_2_RAD); - var rotQ = quat_exports.multiply(quat_exports.create(), rotY, rotX); - rotQ = quat_exports.multiply(quat_exports.create(), rotQ, rotZ); - var rotMatrix = mat4_exports.fromQuat(mat4_exports.create(), rotQ); - mat4_exports.translate(this.matrix, this.matrix, [0, 0, -this.distance]); - mat4_exports.multiply(this.matrix, this.matrix, rotMatrix); - mat4_exports.translate(this.matrix, this.matrix, [0, 0, this.distance]); - } else { - if (Math.abs(this.elevation + elevation) > 90) { - return; - } - this.relElevation = getAngle5(elevation); - this.relAzimuth = getAngle5(azimuth); - this.relRoll = getAngle5(roll); - this.elevation += this.relElevation; - this.azimuth += this.relAzimuth; - this.roll += this.relRoll; - this.computeMatrix(); - } - this._getAxes(); - if (this.type === CAMERA_TYPE.ORBITING || this.type === CAMERA_TYPE.EXPLORING) { - this._getPosition(); - } else if (this.type === CAMERA_TYPE.TRACKING) { - this._getFocalPoint(); - } - this._update(); - return this; - } - }, { - key: "pan", - value: function pan(tx, ty) { - var coords = createVec3(tx, ty, 0); - var pos = vec3_exports.clone(this.position); - vec3_exports.add(pos, pos, vec3_exports.scale(vec3_exports.create(), this.right, coords[0])); - vec3_exports.add(pos, pos, vec3_exports.scale(vec3_exports.create(), this.up, coords[1])); - this._setPosition(pos); - return this; - } - }, { - key: "dolly", - value: function dolly(value2) { - var n3 = this.forward; - var pos = vec3_exports.clone(this.position); - var step = value2 * this.dollyingStep; - var updatedDistance = this.distance + value2 * this.dollyingStep; - step = Math.max(Math.min(updatedDistance, this.maxDistance), this.minDistance) - this.distance; - pos[0] += step * n3[0]; - pos[1] += step * n3[1]; - pos[2] += step * n3[2]; - this._setPosition(pos); - if (this.type === CAMERA_TYPE.ORBITING || this.type === CAMERA_TYPE.EXPLORING) { - this._getDistance(); - } else if (this.type === CAMERA_TYPE.TRACKING) { - vec3_exports.add(this.focalPoint, pos, this.distanceVector); - } - return this; - } - }, { - key: "createLandmark", - value: function createLandmark(name, params) { - var camera = this.clone(); - camera.setPosition(params.position); - camera.setFocalPoint(params.focalPoint); - if (params.roll !== void 0) { - camera.setRoll(params.roll); - } - var landmark = new Landmark(name, camera); - this.landmarks.push(landmark); - return landmark; - } - }, { - key: "setLandmark", - value: function setLandmark(name) { - var landmark = new Landmark(name, this); - this.landmarks.push(landmark); - return this; - } - }, { - key: "gotoLandmark", - value: function gotoLandmark(name) { - var _this = this; - var duration = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 1e3; - var landmark = this.landmarks.find(function(l4) { - return l4.name === name; - }); - if (landmark) { - if (duration === 0) { - landmark.retrieve(this); - return; - } - if (this.landmarkAnimationID !== void 0) { - window.cancelAnimationFrame(this.landmarkAnimationID); - } - this.interactor.disconnect(); - var destPosition = landmark.getPosition(); - var destFocalPoint = landmark.getFocalPoint(); - var destRoll = landmark.getRoll(); - var timeStart; - var animate = function animate2(timestamp2) { - if (timeStart === void 0) { - timeStart = timestamp2; - } - var elapsed = timestamp2 - timeStart; - var t4 = (1 - Math.cos(elapsed / duration * Math.PI)) / 2; - var interFocalPoint = vec3_exports.create(); - var interPosition = vec3_exports.create(); - var interRoll = 0; - vec3_exports.lerp(interFocalPoint, _this.focalPoint, destFocalPoint, t4); - vec3_exports.lerp(interPosition, _this.position, destPosition, t4); - interRoll = _this.roll * (1 - t4) + destRoll * t4; - _this.setFocalPoint(interFocalPoint); - _this.setPosition(interPosition); - _this.setRoll(interRoll); - _this.computeMatrix(); - var dist4 = vec3_exports.dist(interFocalPoint, destFocalPoint) + vec3_exports.dist(interPosition, destPosition); - if (dist4 > 0.01) { - } else { - _this.setFocalPoint(interFocalPoint); - _this.setPosition(interPosition); - _this.setRoll(interRoll); - _this.computeMatrix(); - _this.interactor.connect(); - return; - } - if (elapsed < duration) { - _this.landmarkAnimationID = window.requestAnimationFrame(animate2); - } - }; - window.requestAnimationFrame(animate); - } - } - }, { - key: "_update", - value: function _update2() { - this._getAxes(); - this._getPosition(); - this._getDistance(); - this._getAngles(); - } - }, { - key: "computeMatrix", - value: function computeMatrix() { - var rotX; - var rotY; - var rotZ = quat_exports.setAxisAngle(quat_exports.create(), [0, 0, 1], this.roll * DEG_2_RAD); - mat4_exports.identity(this.matrix); - rotX = quat_exports.setAxisAngle(quat_exports.create(), [1, 0, 0], (this.rotateWorld && this.type !== CAMERA_TYPE.TRACKING || this.type === CAMERA_TYPE.TRACKING ? 1 : -1) * this.elevation * DEG_2_RAD); - rotY = quat_exports.setAxisAngle(quat_exports.create(), [0, 1, 0], (this.rotateWorld && this.type !== CAMERA_TYPE.TRACKING || this.type === CAMERA_TYPE.TRACKING ? 1 : -1) * this.azimuth * DEG_2_RAD); - var rotQ = quat_exports.multiply(quat_exports.create(), rotY, rotX); - rotQ = quat_exports.multiply(quat_exports.create(), rotQ, rotZ); - var rotMatrix = mat4_exports.fromQuat(mat4_exports.create(), rotQ); - if (this.type === CAMERA_TYPE.ORBITING || this.type === CAMERA_TYPE.EXPLORING) { - mat4_exports.translate(this.matrix, this.matrix, this.focalPoint); - mat4_exports.multiply(this.matrix, this.matrix, rotMatrix); - mat4_exports.translate(this.matrix, this.matrix, [0, 0, this.distance]); - } else if (this.type === CAMERA_TYPE.TRACKING) { - mat4_exports.translate(this.matrix, this.matrix, this.position); - mat4_exports.multiply(this.matrix, this.matrix, rotMatrix); - } - } - }, { - key: "_setPosition", - value: function _setPosition(x6, y5, z3) { - this.position = createVec3(x6, y5, z3); - var m4 = this.matrix; - m4[12] = this.position[0]; - m4[13] = this.position[1]; - m4[14] = this.position[2]; - m4[15] = 1; - } - }, { - key: "_getAxes", - value: function _getAxes() { - vec3_exports.copy(this.right, createVec3(vec4_exports.transformMat4(vec4_exports.create(), [1, 0, 0, 0], this.matrix))); - vec3_exports.copy(this.up, createVec3(vec4_exports.transformMat4(vec4_exports.create(), [0, 1, 0, 0], this.matrix))); - vec3_exports.copy(this.forward, createVec3(vec4_exports.transformMat4(vec4_exports.create(), [0, 0, 1, 0], this.matrix))); - vec3_exports.normalize(this.right, this.right); - vec3_exports.normalize(this.up, this.up); - vec3_exports.normalize(this.forward, this.forward); - } - }, { - key: "_getAngles", - value: function _getAngles() { - var x6 = this.distanceVector[0]; - var y5 = this.distanceVector[1]; - var z3 = this.distanceVector[2]; - var r4 = vec3_exports.length(this.distanceVector); - if (r4 === 0) { - this.elevation = 0; - this.azimuth = 0; - return; - } - if (this.type === CAMERA_TYPE.TRACKING) { - this.elevation = Math.asin(y5 / r4) * RAD_2_DEG; - this.azimuth = Math.atan2(-x6, -z3) * RAD_2_DEG; - } else { - if (this.rotateWorld) { - this.elevation = Math.asin(y5 / r4) * RAD_2_DEG; - this.azimuth = Math.atan2(-x6, -z3) * RAD_2_DEG; - } else { - this.elevation = -Math.asin(y5 / r4) * RAD_2_DEG; - this.azimuth = -Math.atan2(-x6, -z3) * RAD_2_DEG; - } - } - } - }, { - key: "_getPosition", - value: function _getPosition() { - vec3_exports.copy(this.position, createVec3(vec4_exports.transformMat4(vec4_exports.create(), [0, 0, 0, 1], this.matrix))); - this._getDistance(); - } - }, { - key: "_getFocalPoint", - value: function _getFocalPoint() { - vec3_exports.transformMat3(this.distanceVector, [0, 0, -this.distance], mat3_exports.fromMat4(mat3_exports.create(), this.matrix)); - vec3_exports.add(this.focalPoint, this.position, this.distanceVector); - this._getDistance(); - } - }, { - key: "_getDistance", - value: function _getDistance() { - this.distanceVector = vec3_exports.subtract(vec3_exports.create(), this.focalPoint, this.position); - this.distance = vec3_exports.length(this.distanceVector); - this.dollyingStep = this.distance / 100; - } - }]); - return Camera2; -}(), _class35.ProjectionMode = { - ORTHOGRAPHIC: "ORTHOGRAPHIC", - PERSPECTIVE: "PERSPECTIVE" -}, _temp13), _descriptor15 = _applyDecoratedDescriptor(_class212.prototype, "interactor", [_dec211], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class212)) || _class15); - -// node_modules/@antv/g-webgpu/es/geometry/index.js -var import_inversify17 = __toModule(require_inversify()); -var _dec21; -var _dec212; -var _class16; -var _class213; -var _descriptor16; -var _class36; -var _temp14; -var Geometry2 = (_dec21 = (0, import_inversify17.injectable)(), _dec212 = (0, import_inversify17.inject)(IDENTIFIER.GeometryComponentManager), _dec21(_class16 = (_class213 = (_temp14 = _class36 = /* @__PURE__ */ function() { - function Geometry3() { - _classCallCheck(this, Geometry3); - this.config = void 0; - _initializerDefineProperty(this, "geometry", _descriptor16, this); - this.entity = void 0; - this.component = void 0; - } - _createClass(Geometry3, [{ - key: "getEntity", - value: function getEntity() { - return this.entity; - } - }, { - key: "getComponent", - value: function getComponent() { - return this.component; - } - }, { - key: "setConfig", - value: function setConfig(config) { - this.config = config; - } - }, { - key: "setEntity", - value: function setEntity(entity) { - this.entity = entity; - this.component = this.geometry.create(entity); - this.component.entity = entity; - this.onEntityCreated(); - } - }, { - key: "onEntityCreated", - value: function onEntityCreated() { - } - }]); - return Geometry3; -}(), _class36.BOX = "box", _class36.SPHERE = "sphere", _class36.PLANE = "plane", _class36.MERGED = "merged", _temp14), _descriptor16 = _applyDecoratedDescriptor(_class213.prototype, "geometry", [_dec212], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class213)) || _class16); - -// node_modules/@antv/g-webgpu/es/Kernel.js -var import_regenerator11 = __toModule(require_regenerator()); -var WebGPUConstants = __toModule(require_constants()); -var import_inversify18 = __toModule(require_inversify()); - -// node_modules/@antv/g-webgpu/es/utils/canvas.js -function createCanvas() { - if (typeof document !== "undefined") { - return document.createElement("canvas"); - } else { - throw new Error("Cannot create a canvas in this context"); - } -} - -// node_modules/@antv/g-webgpu/es/utils/is-type.js -var toString6 = {}.toString; -var isType4 = function isType5(value2, type2) { - return toString6.call(value2) === "[object " + type2 + "]"; -}; -var is_type_default = isType4; - -// node_modules/@antv/g-webgpu/es/utils/is-array.js -var is_array_default = function(value2) { - return Array.isArray ? Array.isArray(value2) : is_type_default(value2, "Array"); -}; - -// node_modules/@antv/g-webgpu/es/utils/is-typedarray.js -var MAX_SAFE_INTEGER2 = 9007199254740991; -var argsTag2 = "[object Arguments]"; -var arrayTag2 = "[object Array]"; -var boolTag2 = "[object Boolean]"; -var dateTag2 = "[object Date]"; -var errorTag2 = "[object Error]"; -var funcTag2 = "[object Function]"; -var mapTag2 = "[object Map]"; -var numberTag2 = "[object Number]"; -var objectTag2 = "[object Object]"; -var regexpTag2 = "[object RegExp]"; -var setTag2 = "[object Set]"; -var stringTag2 = "[object String]"; -var weakMapTag2 = "[object WeakMap]"; -var arrayBufferTag2 = "[object ArrayBuffer]"; -var dataViewTag2 = "[object DataView]"; -var float32Tag2 = "[object Float32Array]"; -var float64Tag2 = "[object Float64Array]"; -var int8Tag2 = "[object Int8Array]"; -var int16Tag2 = "[object Int16Array]"; -var int32Tag2 = "[object Int32Array]"; -var uint8Tag2 = "[object Uint8Array]"; -var uint8ClampedTag2 = "[object Uint8ClampedArray]"; -var uint16Tag2 = "[object Uint16Array]"; -var uint32Tag2 = "[object Uint32Array]"; -var typedArrayTags2 = {}; -typedArrayTags2[float32Tag2] = typedArrayTags2[float64Tag2] = typedArrayTags2[int8Tag2] = typedArrayTags2[int16Tag2] = typedArrayTags2[int32Tag2] = typedArrayTags2[uint8Tag2] = typedArrayTags2[uint8ClampedTag2] = typedArrayTags2[uint16Tag2] = typedArrayTags2[uint32Tag2] = true; -typedArrayTags2[argsTag2] = typedArrayTags2[arrayTag2] = typedArrayTags2[arrayBufferTag2] = typedArrayTags2[boolTag2] = typedArrayTags2[dataViewTag2] = typedArrayTags2[dateTag2] = typedArrayTags2[errorTag2] = typedArrayTags2[funcTag2] = typedArrayTags2[mapTag2] = typedArrayTags2[numberTag2] = typedArrayTags2[objectTag2] = typedArrayTags2[regexpTag2] = typedArrayTags2[setTag2] = typedArrayTags2[stringTag2] = typedArrayTags2[weakMapTag2] = false; -var objectProto2 = Object.prototype; -var objectToString2 = objectProto2.toString; -function baseIsTypedArray2(value2) { - return isObjectLike3(value2) && isLength2(value2.length) && !!typedArrayTags2[objectToString2.call(value2)]; -} -function isLength2(value2) { - return typeof value2 === "number" && value2 > -1 && value2 % 1 === 0 && value2 <= MAX_SAFE_INTEGER2; -} -function isObjectLike3(value2) { - return !!value2 && _typeof3(value2) === "object"; -} -var isTypedArray2 = baseIsTypedArray2; - -// node_modules/@antv/g-webgpu/es/Kernel.js -var _dec30; -var _dec213; -var _dec310; -var _class17; -var _class214; -var _descriptor17; -var _descriptor210; -var _temp15; -function ownKeys5(object, enumerableOnly) { - var keys6 = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) - symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys6.push.apply(keys6, symbols); - } - return keys6; -} -function _objectSpread5(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = arguments[i4] != null ? arguments[i4] : {}; - if (i4 % 2) { - ownKeys5(Object(source), true).forEach(function(key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys5(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - return target; -} -var Kernel = (_dec30 = (0, import_inversify18.injectable)(), _dec213 = (0, import_inversify18.inject)(IDENTIFIER.RenderEngine), _dec310 = (0, import_inversify18.inject)(IDENTIFIER.ConfigService), _dec30(_class17 = (_class214 = (_temp15 = /* @__PURE__ */ function() { - function Kernel2() { - _classCallCheck(this, Kernel2); - _initializerDefineProperty(this, "engine", _descriptor17, this); - _initializerDefineProperty(this, "configService", _descriptor210, this); - this.entity = createEntity(); - this.model = void 0; - this.dirty = true; - this.compiledBundle = void 0; - this.initPromise = void 0; - } - _createClass(Kernel2, [{ - key: "init", - value: function init() { - var _this$configService$g = this.configService.get(), canvas = _this$configService$g.canvas, engineOptions = _this$configService$g.engineOptions; - this.initPromise = this.engine.init(_objectSpread5({ - canvas: canvas || createCanvas(), - swapChainFormat: WebGPUConstants.TextureFormat.BGRA8Unorm, - antialiasing: false - }, engineOptions)); - } - }, { - key: "setBundle", - value: function setBundle(bundle) { - this.compiledBundle = JSON.parse(JSON.stringify(bundle)); - } - }, { - key: "setDispatch", - value: function setDispatch(dispatch2) { - if (this.compiledBundle.context) { - this.compiledBundle.context.dispatch = dispatch2; - } - return this; - } - }, { - key: "setMaxIteration", - value: function setMaxIteration(maxIteration) { - if (this.compiledBundle.context) { - this.compiledBundle.context.maxIteration = maxIteration; - } - return this; - } - }, { - key: "setBinding", - value: function setBinding(name, data3) { - var _this = this; - if (typeof name === "string") { - var isNumberLikeData = isNumber47(data3) || isTypedArray2(data3) || is_array_default(data3); - if (this.compiledBundle && this.compiledBundle.context) { - var existedDefine = this.compiledBundle.context.defines.find(function(b10) { - return b10.name === name; - }); - if (existedDefine) { - existedDefine.value = data3; - return this; - } - var existedBinding = this.compiledBundle.context.uniforms.find(function(b10) { - return b10.name === name; - }); - if (existedBinding) { - if (isNumberLikeData) { - existedBinding.data = data3; - existedBinding.isReferer = false; - if (existedBinding.storageClass === STORAGE_CLASS.Uniform) { - if (this.model) { - this.model.updateUniform(name, data3); - } - } else { - if (this.model) { - this.model.updateBuffer(name, data3); - } - } - } else { - existedBinding.isReferer = true; - existedBinding.data = data3; - } - } - } - } else { - Object.keys(name).forEach(function(key) { - _this.setBinding(key, name[key]); - }); - } - return this; - } - }, { - key: "execute", - value: function() { - var _execute = _asyncToGenerator(/* @__PURE__ */ import_regenerator11.default.mark(function _callee() { - var _this2 = this; - var iteration, i4, _args = arguments; - return import_regenerator11.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - iteration = _args.length > 0 && _args[0] !== void 0 ? _args[0] : 1; - if (!this.dirty) { - _context.next = 6; - break; - } - if (this.compiledBundle.context) { - if (iteration > 1) { - this.compiledBundle.context.maxIteration = iteration; - } else { - this.compiledBundle.context.maxIteration++; - } - } - _context.next = 5; - return this.compile(); - case 5: - this.dirty = false; - case 6: - this.engine.beginFrame(); - this.engine.clear({}); - if (this.compiledBundle.context) { - this.compiledBundle.context.uniforms.filter(function(_ref2) { - var isReferer = _ref2.isReferer; - return isReferer; - }).forEach(function(_ref2) { - var data3 = _ref2.data, name = _ref2.name; - _this2.model.confirmInput(data3.model, name); - }); - } - for (i4 = 0; i4 < iteration; i4++) { - this.model.run(); - } - this.engine.endFrame(); - return _context.abrupt("return", this); - case 12: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - function execute() { - return _execute.apply(this, arguments); - } - return execute; - }() - }, { - key: "getOutput", - value: function() { - var _getOutput = _asyncToGenerator(/* @__PURE__ */ import_regenerator11.default.mark(function _callee2() { - return import_regenerator11.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - return _context2.abrupt("return", this.model.readData()); - case 1: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - })); - function getOutput() { - return _getOutput.apply(this, arguments); - } - return getOutput; - }() - }, { - key: "compile", - value: function() { - var _compile = _asyncToGenerator(/* @__PURE__ */ import_regenerator11.default.mark(function _callee3() { - var context, target, shader; - return import_regenerator11.default.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - _context3.next = 2; - return this.initPromise; - case 2: - context = _objectSpread5({}, this.compiledBundle.context); - target = this.engine.supportWebGPU ? this.engine.useWGSL ? Target.WGSL : Target.GLSL450 : Target.GLSL100; - shader = this.compiledBundle.shaders[target]; - context.defines.filter(function(define2) { - return define2.runtime; - }).forEach(function(define2) { - var valuePlaceHolder = "".concat(DefineValuePlaceholder).concat(define2.name); - shader = shader.replace(valuePlaceHolder, "".concat(define2.value)); - }); - context.shader = shader; - context.uniforms.forEach(function(uniform) { - if (!uniform.data) { - if (uniform.storageClass === STORAGE_CLASS.StorageBuffer) { - var sizePerElement = 1; - if (uniform.type === AST_TOKEN_TYPES.FloatArray) { - sizePerElement = 1; - } else if (uniform.type === AST_TOKEN_TYPES.Vector4FloatArray) { - sizePerElement = 4; - } - uniform.data = new Float32Array(context.output.length * sizePerElement).fill(0); - } - } - }); - this.compiledBundle.context = context; - _context3.next = 11; - return this.engine.createComputeModel(this.compiledBundle.context); - case 11: - this.model = _context3.sent; - case 12: - case "end": - return _context3.stop(); - } - } - }, _callee3, this); - })); - function compile() { - return _compile.apply(this, arguments); - } - return compile; - }() - }]); - return Kernel2; -}(), _temp15), _descriptor17 = _applyDecoratedDescriptor(_class214.prototype, "engine", [_dec213], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor210 = _applyDecoratedDescriptor(_class214.prototype, "configService", [_dec310], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class214)) || _class17); - -// node_modules/@antv/g-webgpu/es/material/index.js -var import_inversify19 = __toModule(require_inversify()); -var _dec31; -var _dec214; -var _class18; -var _class215; -var _descriptor18; -var _class37; -var _temp16; -var Material = (_dec31 = (0, import_inversify19.injectable)(), _dec214 = (0, import_inversify19.inject)(IDENTIFIER.MaterialComponentManager), _dec31(_class18 = (_class215 = (_temp16 = _class37 = /* @__PURE__ */ function() { - function Material2() { - _classCallCheck(this, Material2); - this.config = void 0; - _initializerDefineProperty(this, "material", _descriptor18, this); - this.entity = void 0; - this.component = void 0; - } - _createClass(Material2, [{ - key: "getEntity", - value: function getEntity() { - return this.entity; - } - }, { - key: "getComponent", - value: function getComponent() { - return this.component; - } - }, { - key: "setConfig", - value: function setConfig(config) { - this.config = config; - } - }, { - key: "setEntity", - value: function setEntity(entity, type2) { - this.entity = entity; - this.component = this.material.create(entity); - this.component.entity = entity; - this.component.type = type2; - this.onEntityCreated(); - } - }, { - key: "onEntityCreated", - value: function onEntityCreated() { - } - }]); - return Material2; -}(), _class37.BASIC = "basic", _temp16), _descriptor18 = _applyDecoratedDescriptor(_class215.prototype, "material", [_dec214], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class215)) || _class18); - -// node_modules/@antv/g-webgpu/es/renderable/Renderable.js -var import_inversify20 = __toModule(require_inversify()); -var _dec40; -var _dec215; -var _dec311; -var _dec48; -var _dec56; -var _dec64; -var _class19; -var _class216; -var _descriptor19; -var _descriptor211; -var _descriptor38; -var _descriptor46; -var _class38; -var _temp17; -var Renderable = (_dec40 = (0, import_inversify20.injectable)(), _dec215 = (0, import_inversify20.inject)(IDENTIFIER.MeshComponentManager), _dec311 = (0, import_inversify20.inject)(IDENTIFIER.CullableComponentManager), _dec48 = (0, import_inversify20.inject)(IDENTIFIER.TransformComponentManager), _dec56 = (0, import_inversify20.inject)(IDENTIFIER.Systems), _dec64 = (0, import_inversify20.named)(IDENTIFIER.SceneGraphSystem), _dec40(_class19 = (_class216 = (_temp17 = _class38 = /* @__PURE__ */ function() { - function Renderable2() { - _classCallCheck(this, Renderable2); - this.attributes = {}; - this.config = void 0; - _initializerDefineProperty(this, "mesh", _descriptor19, this); - _initializerDefineProperty(this, "cullable", _descriptor211, this); - _initializerDefineProperty(this, "transform", _descriptor38, this); - _initializerDefineProperty(this, "sceneGraphSystem", _descriptor46, this); - this.meshComponent = void 0; - this.transformComponent = void 0; - this.entity = void 0; - } - _createClass(Renderable2, [{ - key: "getEntity", - value: function getEntity() { - return this.entity; - } - }, { - key: "getTransformComponent", - value: function getTransformComponent() { - return this.transformComponent; - } - }, { - key: "getMeshComponent", - value: function getMeshComponent() { - return this.meshComponent; - } - }, { - key: "setConfig", - value: function setConfig(config) { - this.config = config; - } - }, { - key: "setEntity", - value: function setEntity(entity) { - this.entity = entity; - this.cullable.create(entity); - this.meshComponent = this.mesh.create(entity); - this.transformComponent = this.transform.create(entity); - this.onEntityCreated(); - } - }, { - key: "setMaterial", - value: function setMaterial(material) { - this.meshComponent.material = material; - return this; - } - }, { - key: "setGeometry", - value: function setGeometry(geometry35) { - this.meshComponent.geometry = geometry35; - return this; - } - }, { - key: "setAttributes", - value: function setAttributes(attributes) { - var _this = this; - Object.keys(attributes).forEach(function(name) { - if (attributes[name] !== void 0 && attributes[name] !== _this.attributes[name]) { - _this.onAttributeChanged({ - name, - data: attributes[name] - }); - _this.attributes[name] = attributes[name]; - } - }); - } - }, { - key: "setVisible", - value: function setVisible(visible) { - var _this2 = this; - this.meshComponent.visible = visible; - this.meshComponent.children.forEach(function(childEntity) { - var child = _this2.mesh.getComponentByEntity(childEntity); - if (child) { - child.visible = visible; - } - }); - return this; - } - }, { - key: "isVisible", - value: function isVisible() { - return this.meshComponent.visible; - } - }, { - key: "attach", - value: function attach(parentRenderable) { - this.sceneGraphSystem.attach(this.entity, parentRenderable.entity); - return this; - } - }, { - key: "detach", - value: function detach() { - this.sceneGraphSystem.detach(this.entity); - return this; - } - }, { - key: "detachChildren", - value: function detachChildren() { - this.sceneGraphSystem.detachChildren(this.entity); - return this; - } - }, { - key: "onEntityCreated", - value: function onEntityCreated() { - } - }, { - key: "onAttributeChanged", - value: function onAttributeChanged(_ref2) { - var name = _ref2.name, data3 = _ref2.data; - if (this.meshComponent && this.meshComponent.material) { - this.meshComponent.material.setUniform(this.convertAttributeName2UniformName(name), data3); - } - } - }, { - key: "convertAttributeName2UniformName", - value: function convertAttributeName2UniformName(attributeName) { - return attributeName; - } - }]); - return Renderable2; -}(), _class38.POINT = "point", _class38.LINE = "line", _class38.GRID = "grid", _temp17), _descriptor19 = _applyDecoratedDescriptor(_class216.prototype, "mesh", [_dec215], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor211 = _applyDecoratedDescriptor(_class216.prototype, "cullable", [_dec311], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor38 = _applyDecoratedDescriptor(_class216.prototype, "transform", [_dec48], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor46 = _applyDecoratedDescriptor(_class216.prototype, "sceneGraphSystem", [_dec56, _dec64], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class216)) || _class19); - -// node_modules/@antv/g-webgpu/es/World.js -var import_regenerator20 = __toModule(require_regenerator()); - -// node_modules/@antv/g-webgpu-engine/es/webgl/index.js -var import_regenerator13 = __toModule(require_regenerator()); -var import_inversify21 = __toModule(require_inversify()); -var import_regl = __toModule(require_regl()); - -// node_modules/@antv/g-webgpu-engine/es/webgl/ReglAttribute.js -var ReglAttribute = /* @__PURE__ */ function() { - function ReglAttribute2(gl2, options) { - _classCallCheck(this, ReglAttribute2); - this.attribute = void 0; - this.buffer = void 0; - var buffer = options.buffer, offset = options.offset, stride = options.stride, normalized = options.normalized, size14 = options.size, divisor = options.divisor; - this.buffer = buffer; - this.attribute = { - buffer: buffer.get(), - offset: offset || 0, - stride: stride || 0, - normalized: normalized || false, - divisor: divisor || 0 - }; - if (size14) { - this.attribute.size = size14; - } - } - _createClass(ReglAttribute2, [{ - key: "get", - value: function get100() { - return this.attribute; - } - }, { - key: "updateBuffer", - value: function updateBuffer(options) { - this.buffer.subData(options); - } - }, { - key: "destroy", - value: function destroy() { - this.buffer.destroy(); - } - }]); - return ReglAttribute2; -}(); - -// node_modules/@antv/g-webgpu-engine/es/webgl/constants.js -var _primitiveMap; -var _usageMap; -var _dataTypeMap; -var _formatMap; -var _mipmapMap; -var _filterMap; -var _wrapModeMap; -var _colorSpaceMap; -var _depthFuncMap; -var _blendEquationMap; -var _blendFuncMap; -var _stencilFuncMap; -var _stencilOpMap; -var _cullFaceMap; -var primitiveMap = (_primitiveMap = {}, _defineProperty(_primitiveMap, gl.POINTS, "points"), _defineProperty(_primitiveMap, gl.LINES, "lines"), _defineProperty(_primitiveMap, gl.LINE_LOOP, "line loop"), _defineProperty(_primitiveMap, gl.LINE_STRIP, "line strip"), _defineProperty(_primitiveMap, gl.TRIANGLES, "triangles"), _defineProperty(_primitiveMap, gl.TRIANGLE_FAN, "triangle fan"), _defineProperty(_primitiveMap, gl.TRIANGLE_STRIP, "triangle strip"), _primitiveMap); -var usageMap = (_usageMap = {}, _defineProperty(_usageMap, gl.STATIC_DRAW, "static"), _defineProperty(_usageMap, gl.DYNAMIC_DRAW, "dynamic"), _defineProperty(_usageMap, gl.STREAM_DRAW, "stream"), _usageMap); -var dataTypeMap = (_dataTypeMap = {}, _defineProperty(_dataTypeMap, gl.BYTE, "int8"), _defineProperty(_dataTypeMap, gl.UNSIGNED_INT, "int16"), _defineProperty(_dataTypeMap, gl.INT, "int32"), _defineProperty(_dataTypeMap, gl.UNSIGNED_BYTE, "uint8"), _defineProperty(_dataTypeMap, gl.UNSIGNED_SHORT, "uint16"), _defineProperty(_dataTypeMap, gl.UNSIGNED_INT, "uint32"), _defineProperty(_dataTypeMap, gl.FLOAT, "float"), _dataTypeMap); -var formatMap = (_formatMap = {}, _defineProperty(_formatMap, gl.ALPHA, "alpha"), _defineProperty(_formatMap, gl.LUMINANCE, "luminance"), _defineProperty(_formatMap, gl.LUMINANCE_ALPHA, "luminance alpha"), _defineProperty(_formatMap, gl.RGB, "rgb"), _defineProperty(_formatMap, gl.RGBA, "rgba"), _defineProperty(_formatMap, gl.RGBA4, "rgba4"), _defineProperty(_formatMap, gl.RGB5_A1, "rgb5 a1"), _defineProperty(_formatMap, gl.RGB565, "rgb565"), _defineProperty(_formatMap, gl.DEPTH_COMPONENT, "depth"), _defineProperty(_formatMap, gl.DEPTH_STENCIL, "depth stencil"), _formatMap); -var mipmapMap = (_mipmapMap = {}, _defineProperty(_mipmapMap, gl.DONT_CARE, "dont care"), _defineProperty(_mipmapMap, gl.NICEST, "nice"), _defineProperty(_mipmapMap, gl.FASTEST, "fast"), _mipmapMap); -var filterMap = (_filterMap = {}, _defineProperty(_filterMap, gl.NEAREST, "nearest"), _defineProperty(_filterMap, gl.LINEAR, "linear"), _defineProperty(_filterMap, gl.LINEAR_MIPMAP_LINEAR, "mipmap"), _defineProperty(_filterMap, gl.NEAREST_MIPMAP_LINEAR, "nearest mipmap linear"), _defineProperty(_filterMap, gl.LINEAR_MIPMAP_NEAREST, "linear mipmap nearest"), _defineProperty(_filterMap, gl.NEAREST_MIPMAP_NEAREST, "nearest mipmap nearest"), _filterMap); -var wrapModeMap = (_wrapModeMap = {}, _defineProperty(_wrapModeMap, gl.REPEAT, "repeat"), _defineProperty(_wrapModeMap, gl.CLAMP_TO_EDGE, "clamp"), _defineProperty(_wrapModeMap, gl.MIRRORED_REPEAT, "mirror"), _wrapModeMap); -var colorSpaceMap = (_colorSpaceMap = {}, _defineProperty(_colorSpaceMap, gl.NONE, "none"), _defineProperty(_colorSpaceMap, gl.BROWSER_DEFAULT_WEBGL, "browser"), _colorSpaceMap); -var depthFuncMap = (_depthFuncMap = {}, _defineProperty(_depthFuncMap, gl.NEVER, "never"), _defineProperty(_depthFuncMap, gl.ALWAYS, "always"), _defineProperty(_depthFuncMap, gl.LESS, "less"), _defineProperty(_depthFuncMap, gl.LEQUAL, "lequal"), _defineProperty(_depthFuncMap, gl.GREATER, "greater"), _defineProperty(_depthFuncMap, gl.GEQUAL, "gequal"), _defineProperty(_depthFuncMap, gl.EQUAL, "equal"), _defineProperty(_depthFuncMap, gl.NOTEQUAL, "notequal"), _depthFuncMap); -var blendEquationMap = (_blendEquationMap = {}, _defineProperty(_blendEquationMap, gl.FUNC_ADD, "add"), _defineProperty(_blendEquationMap, gl.MIN_EXT, "min"), _defineProperty(_blendEquationMap, gl.MAX_EXT, "max"), _defineProperty(_blendEquationMap, gl.FUNC_SUBTRACT, "subtract"), _defineProperty(_blendEquationMap, gl.FUNC_REVERSE_SUBTRACT, "reverse subtract"), _blendEquationMap); -var blendFuncMap = (_blendFuncMap = {}, _defineProperty(_blendFuncMap, gl.ZERO, "zero"), _defineProperty(_blendFuncMap, gl.ONE, "one"), _defineProperty(_blendFuncMap, gl.SRC_COLOR, "src color"), _defineProperty(_blendFuncMap, gl.ONE_MINUS_SRC_COLOR, "one minus src color"), _defineProperty(_blendFuncMap, gl.SRC_ALPHA, "src alpha"), _defineProperty(_blendFuncMap, gl.ONE_MINUS_SRC_ALPHA, "one minus src alpha"), _defineProperty(_blendFuncMap, gl.DST_COLOR, "dst color"), _defineProperty(_blendFuncMap, gl.ONE_MINUS_DST_COLOR, "one minus dst color"), _defineProperty(_blendFuncMap, gl.DST_ALPHA, "dst alpha"), _defineProperty(_blendFuncMap, gl.ONE_MINUS_DST_ALPHA, "one minus dst alpha"), _defineProperty(_blendFuncMap, gl.CONSTANT_COLOR, "constant color"), _defineProperty(_blendFuncMap, gl.ONE_MINUS_CONSTANT_COLOR, "one minus constant color"), _defineProperty(_blendFuncMap, gl.CONSTANT_ALPHA, "constant alpha"), _defineProperty(_blendFuncMap, gl.ONE_MINUS_CONSTANT_ALPHA, "one minus constant alpha"), _defineProperty(_blendFuncMap, gl.SRC_ALPHA_SATURATE, "src alpha saturate"), _blendFuncMap); -var stencilFuncMap = (_stencilFuncMap = {}, _defineProperty(_stencilFuncMap, gl.NEVER, "never"), _defineProperty(_stencilFuncMap, gl.ALWAYS, "always"), _defineProperty(_stencilFuncMap, gl.LESS, "less"), _defineProperty(_stencilFuncMap, gl.LEQUAL, "lequal"), _defineProperty(_stencilFuncMap, gl.GREATER, "greater"), _defineProperty(_stencilFuncMap, gl.GEQUAL, "gequal"), _defineProperty(_stencilFuncMap, gl.EQUAL, "equal"), _defineProperty(_stencilFuncMap, gl.NOTEQUAL, "notequal"), _stencilFuncMap); -var stencilOpMap = (_stencilOpMap = {}, _defineProperty(_stencilOpMap, gl.ZERO, "zero"), _defineProperty(_stencilOpMap, gl.KEEP, "keep"), _defineProperty(_stencilOpMap, gl.REPLACE, "replace"), _defineProperty(_stencilOpMap, gl.INVERT, "invert"), _defineProperty(_stencilOpMap, gl.INCR, "increment"), _defineProperty(_stencilOpMap, gl.DECR, "decrement"), _defineProperty(_stencilOpMap, gl.INCR_WRAP, "increment wrap"), _defineProperty(_stencilOpMap, gl.DECR_WRAP, "decrement wrap"), _stencilOpMap); -var cullFaceMap = (_cullFaceMap = {}, _defineProperty(_cullFaceMap, gl.FRONT, "front"), _defineProperty(_cullFaceMap, gl.BACK, "back"), _cullFaceMap); - -// node_modules/@antv/g-webgpu-engine/es/webgl/ReglBuffer.js -var ReglBuffer = /* @__PURE__ */ function() { - function ReglBuffer2(reGl, options) { - _classCallCheck(this, ReglBuffer2); - this.buffer = void 0; - var data3 = options.data, usage = options.usage, type2 = options.type; - this.buffer = reGl.buffer({ - data: data3, - usage: usageMap[usage || gl.STATIC_DRAW], - type: dataTypeMap[type2 || gl.UNSIGNED_BYTE] - }); - } - _createClass(ReglBuffer2, [{ - key: "get", - value: function get100() { - return this.buffer; - } - }, { - key: "destroy", - value: function destroy() { - } - }, { - key: "subData", - value: function subData(_ref2) { - var data3 = _ref2.data, offset = _ref2.offset; - this.buffer.subdata(data3, offset); - } - }]); - return ReglBuffer2; -}(); - -// node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js -function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) - return _arrayLikeToArray(arr); -} - -// node_modules/@babel/runtime/helpers/esm/iterableToArray.js -function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) - return Array.from(iter); +var _2t=Object.create;var nw=Object.defineProperty,S2t=Object.defineProperties,C2t=Object.getOwnPropertyDescriptor,w2t=Object.getOwnPropertyDescriptors,E2t=Object.getOwnPropertyNames,y9=Object.getOwnPropertySymbols,A2t=Object.getPrototypeOf,x9=Object.prototype.hasOwnProperty,M2t=Object.prototype.propertyIsEnumerable;var b9=(r,e,t)=>e in r?nw(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,Hf=(r,e)=>{for(var t in e||(e={}))x9.call(e,t)&&b9(r,t,e[t]);if(y9)for(var t of y9(e))M2t.call(e,t)&&b9(r,t,e[t]);return r},_9=(r,e)=>S2t(r,w2t(e)),S9=r=>nw(r,"__esModule",{value:!0});var ft=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),Dn=(r,e)=>{S9(r);for(var t in e)nw(r,t,{get:e[t],enumerable:!0})},T2t=(r,e,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of E2t(e))!x9.call(r,n)&&n!=="default"&&nw(r,n,{get:()=>e[n],enumerable:!(t=C2t(e,n))||t.enumerable});return r},U=r=>T2t(S9(nw(r!=null?_2t(A2t(r)):{},"default",r&&r.__esModule&&"default"in r?{get:()=>r.default,enumerable:!0}:{value:r,enumerable:!0})),r);var Da=(r,e,t)=>new Promise((n,i)=>{var a=l=>{try{s(t.next(l))}catch(u){i(u)}},o=l=>{try{s(t.throw(l))}catch(u){i(u)}},s=l=>l.done?n(l.value):Promise.resolve(l.value).then(a,o);s((t=t.apply(r,e)).next())});var pw=ft((Bme,HI)=>{var vq,mq,gq,yq,xq,bq,_q,Sq,Cq,WI,_3,wq,Eq,Aq,fb,Mq,Tq,Iq,Lq,Oq,Dq,Pq,kq,VI;(function(r){var e=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){r(t(e,t(n)))}):typeof HI=="object"&&typeof HI.exports=="object"?r(t(e,t(HI.exports))):r(t(e));function t(n,i){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(a,o){return n[a]=i?i(a,o):o}}})(function(r){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(n[a]=i[a])};vq=function(n,i){if(typeof i!="function"&&i!==null)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");e(n,i);function a(){this.constructor=n}n.prototype=i===null?Object.create(i):(a.prototype=i.prototype,new a)},mq=Object.assign||function(n){for(var i,a=1,o=arguments.length;a=0;f--)(u=n[f])&&(l=(s<3?u(l):s>3?u(i,a,l):u(i,a))||l);return s>3&&l&&Object.defineProperty(i,a,l),l},xq=function(n,i){return function(a,o){i(a,o,n)}},bq=function(n,i){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(n,i)},_q=function(n,i,a,o){function s(l){return l instanceof a?l:new a(function(u){u(l)})}return new(a||(a=Promise))(function(l,u){function f(d){try{h(o.next(d))}catch(p){u(p)}}function c(d){try{h(o.throw(d))}catch(p){u(p)}}function h(d){d.done?l(d.value):s(d.value).then(f,c)}h((o=o.apply(n,i||[])).next())})},Sq=function(n,i){var a={label:0,sent:function(){if(l[0]&1)throw l[1];return l[1]},trys:[],ops:[]},o,s,l,u;return u={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function f(h){return function(d){return c([h,d])}}function c(h){if(o)throw new TypeError("Generator is already executing.");for(;a;)try{if(o=1,s&&(l=h[0]&2?s.return:h[0]?s.throw||((l=s.return)&&l.call(s),0):s.next)&&!(l=l.call(s,h[1])).done)return l;switch(s=0,l&&(h=[h[0]&2,l.value]),h[0]){case 0:case 1:l=h;break;case 4:return a.label++,{value:h[1],done:!1};case 5:a.label++,s=h[1],h=[0];continue;case 7:h=a.ops.pop(),a.trys.pop();continue;default:if(l=a.trys,!(l=l.length>0&&l[l.length-1])&&(h[0]===6||h[0]===2)){a=0;continue}if(h[0]===3&&(!l||h[1]>l[0]&&h[1]=n.length&&(n=void 0),{value:n&&n[o++],done:!n}}};throw new TypeError(i?"Object is not iterable.":"Symbol.iterator is not defined.")},_3=function(n,i){var a=typeof Symbol=="function"&&n[Symbol.iterator];if(!a)return n;var o=a.call(n),s,l=[],u;try{for(;(i===void 0||i-- >0)&&!(s=o.next()).done;)l.push(s.value)}catch(f){u={error:f}}finally{try{s&&!s.done&&(a=o.return)&&a.call(o)}finally{if(u)throw u.error}}return l},wq=function(){for(var n=[],i=0;i1||f(v,m)})})}function f(v,m){try{c(o[v](m))}catch(g){p(l[0][3],g)}}function c(v){v.value instanceof fb?Promise.resolve(v.value.v).then(h,d):p(l[0][2],v)}function h(v){f("next",v)}function d(v){f("throw",v)}function p(v,m){v(m),l.shift(),l.length&&f(l[0][0],l[0][1])}},Tq=function(n){var i,a;return i={},o("next"),o("throw",function(s){throw s}),o("return"),i[Symbol.iterator]=function(){return this},i;function o(s,l){i[s]=n[s]?function(u){return(a=!a)?{value:fb(n[s](u)),done:s==="return"}:l?l(u):u}:l}},Iq=function(n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i=n[Symbol.asyncIterator],a;return i?i.call(n):(n=typeof WI=="function"?WI(n):n[Symbol.iterator](),a={},o("next"),o("throw"),o("return"),a[Symbol.asyncIterator]=function(){return this},a);function o(l){a[l]=n[l]&&function(u){return new Promise(function(f,c){u=n[l](u),s(f,c,u.done,u.value)})}}function s(l,u,f,c){Promise.resolve(c).then(function(h){l({value:h,done:f})},u)}},Lq=function(n,i){return Object.defineProperty?Object.defineProperty(n,"raw",{value:i}):n.raw=i,n};var t=Object.create?function(n,i){Object.defineProperty(n,"default",{enumerable:!0,value:i})}:function(n,i){n.default=i};Oq=function(n){if(n&&n.__esModule)return n;var i={};if(n!=null)for(var a in n)a!=="default"&&Object.prototype.hasOwnProperty.call(n,a)&&VI(i,n,a);return t(i,n),i},Dq=function(n){return n&&n.__esModule?n:{default:n}},Pq=function(n,i,a,o){if(a==="a"&&!o)throw new TypeError("Private accessor was defined without a getter");if(typeof i=="function"?n!==i||!o:!i.has(n))throw new TypeError("Cannot read private member from an object whose class did not declare it");return a==="m"?o:a==="a"?o.call(n):o?o.value:i.get(n)},kq=function(n,i,a,o,s){if(o==="m")throw new TypeError("Private method is not writable");if(o==="a"&&!s)throw new TypeError("Private accessor was defined without a setter");if(typeof i=="function"?n!==i||!s:!i.has(n))throw new TypeError("Cannot write private member to an object whose class did not declare it");return o==="a"?s.call(n,a):s?s.value=a:i.set(n,a),a},r("__extends",vq),r("__assign",mq),r("__rest",gq),r("__decorate",yq),r("__param",xq),r("__metadata",bq),r("__awaiter",_q),r("__generator",Sq),r("__exportStar",Cq),r("__createBinding",VI),r("__values",WI),r("__read",_3),r("__spread",wq),r("__spreadArrays",Eq),r("__spreadArray",Aq),r("__await",fb),r("__asyncGenerator",Mq),r("__asyncDelegator",Tq),r("__asyncValues",Iq),r("__makeTemplateObject",Lq),r("__importStar",Oq),r("__importDefault",Dq),r("__classPrivateFieldGet",Pq),r("__classPrivateFieldSet",kq)})});var El=ft(S3=>{"use strict";Object.defineProperty(S3,"__esModule",{value:!0});var IDt=function(r){return r!==null&&typeof r!="function"&&isFinite(r.length)};S3.default=IDt});var YI=ft(C3=>{"use strict";Object.defineProperty(C3,"__esModule",{value:!0});var LDt=El(),ODt=function(r,e){return LDt.default(r)?r.indexOf(e)>-1:!1};C3.default=ODt});var E3=ft(w3=>{"use strict";Object.defineProperty(w3,"__esModule",{value:!0});var DDt=El(),PDt=function(r,e){if(!DDt.default(r))return r;for(var t=[],n=0;n{"use strict";Object.defineProperty(A3,"__esModule",{value:!0});var kDt=E3(),RDt=YI(),NDt=function(r,e){return e===void 0&&(e=[]),kDt.default(r,function(t){return!RDt.default(e,t)})};A3.default=NDt});var Vu=ft(M3=>{"use strict";Object.defineProperty(M3,"__esModule",{value:!0});var FDt={}.toString,BDt=function(r,e){return FDt.call(r)==="[object "+e+"]"};M3.default=BDt});var Al=ft(T3=>{"use strict";Object.defineProperty(T3,"__esModule",{value:!0});var GDt=Vu();T3.default=function(r){return GDt.default(r,"Function")}});var Jd=ft(I3=>{"use strict";Object.defineProperty(I3,"__esModule",{value:!0});var zDt=function(r){return r==null};I3.default=zDt});var Fa=ft(L3=>{"use strict";Object.defineProperty(L3,"__esModule",{value:!0});var UDt=Vu();L3.default=function(r){return Array.isArray?Array.isArray(r):UDt.default(r,"Array")}});var vw=ft(O3=>{"use strict";Object.defineProperty(O3,"__esModule",{value:!0});O3.default=function(r){var e=typeof r;return r!==null&&e==="object"||e==="function"}});var Ay=ft(D3=>{"use strict";Object.defineProperty(D3,"__esModule",{value:!0});var jDt=Fa(),WDt=vw();function VDt(r,e){if(!!r){var t;if(jDt.default(r))for(var n=0,i=r.length;n{"use strict";Object.defineProperty(P3,"__esModule",{value:!0});var HDt=Ay(),YDt=Al(),XDt=Object.keys?function(r){return Object.keys(r)}:function(r){var e=[];return HDt.default(r,function(t,n){YDt.default(r)&&n==="prototype"||e.push(n)}),e};P3.default=XDt});var N3=ft(R3=>{"use strict";Object.defineProperty(R3,"__esModule",{value:!0});var qDt=Jd(),KDt=k3();function ZDt(r,e){var t=KDt.default(e),n=t.length;if(qDt.default(r))return!n;for(var i=0;i{"use strict";Object.defineProperty(F3,"__esModule",{value:!0});var $Dt=function(r){return typeof r=="object"&&r!==null};F3.default=$Dt});var cb=ft(B3=>{"use strict";Object.defineProperty(B3,"__esModule",{value:!0});var QDt=XI(),JDt=Vu(),tPt=function(r){if(!QDt.default(r)||!JDt.default(r,"Object"))return!1;if(Object.getPrototypeOf(r)===null)return!0;for(var e=r;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(r)===e};B3.default=tPt});var Fq=ft(G3=>{"use strict";Object.defineProperty(G3,"__esModule",{value:!0});var ePt=Al(),rPt=N3(),nPt=Fa(),iPt=cb();function aPt(r,e){if(!nPt.default(r))return null;var t;if(ePt.default(e)&&(t=e),iPt.default(e)&&(t=function(i){return rPt.default(i,e)}),t){for(var n=0;n{"use strict";Object.defineProperty(z3,"__esModule",{value:!0});function oPt(r,e,t){t===void 0&&(t=0);for(var n=t;n{"use strict";Object.defineProperty(U3,"__esModule",{value:!0});var sPt=Jd(),lPt=Fa(),uPt=function(r,e){for(var t=null,n=0;n{"use strict";Object.defineProperty(j3,"__esModule",{value:!0});var fPt=Fa(),cPt=function(r){if(!fPt.default(r))return[];for(var e=[],t=0;t{"use strict";Object.defineProperty(W3,"__esModule",{value:!0});var hPt=Fa(),Uq=function(r,e){if(e===void 0&&(e=[]),!hPt.default(r))e.push(r);else for(var t=0;t{"use strict";Object.defineProperty(V3,"__esModule",{value:!0});var dPt=Fa();V3.default=function(r){if(!!dPt.default(r))return r.reduce(function(e,t){return Math.max(e,t)},r[0])}});var X3=ft(Y3=>{"use strict";Object.defineProperty(Y3,"__esModule",{value:!0});var pPt=Fa();Y3.default=function(r){if(!!pPt.default(r))return r.reduce(function(e,t){return Math.min(e,t)},r[0])}});var Wq=ft(q3=>{"use strict";Object.defineProperty(q3,"__esModule",{value:!0});var vPt=Fa(),mPt=H3(),gPt=X3(),yPt=function(r){var e=r.filter(function(o){return!isNaN(o)});if(!e.length)return{min:0,max:0};if(vPt.default(r[0])){for(var t=[],n=0;n{"use strict";Object.defineProperty(K3,"__esModule",{value:!0});var Vq=Array.prototype,xPt=Vq.splice,bPt=Vq.indexOf,_Pt=function(r){for(var e=[],t=1;t-1;)xPt.call(r,a,1);return r};K3.default=_Pt});var $3=ft(Z3=>{"use strict";Object.defineProperty(Z3,"__esModule",{value:!0});var SPt=El(),CPt=Array.prototype.splice,wPt=function(e,t){if(!SPt.default(e))return[];for(var n=e?t.length:0,i=n-1;n--;){var a=void 0,o=t[n];(n===i||o!==a)&&(a=o,CPt.call(e,o,1))}return e};Z3.default=wPt});var J3=ft(Q3=>{"use strict";Object.defineProperty(Q3,"__esModule",{value:!0});var EPt=Ay(),APt=Fa(),MPt=cb(),TPt=function(r,e,t){if(!APt.default(r)&&!MPt.default(r))return r;var n=t;return EPt.default(r,function(i,a){n=e(n,i,a)}),n};Q3.default=TPt});var Yq=ft(tG=>{"use strict";Object.defineProperty(tG,"__esModule",{value:!0});var IPt=El(),LPt=$3(),OPt=function(r,e){var t=[];if(!IPt.default(r))return t;for(var n=-1,i=[],a=r.length;++n{"use strict";Object.defineProperty(eG,"__esModule",{value:!0});var DPt=Vu();eG.default=function(r){return DPt.default(r,"String")}});var Xq=ft(rG=>{"use strict";Object.defineProperty(rG,"__esModule",{value:!0});var PPt=Fa(),kPt=Qc(),RPt=Al();function NPt(r,e){var t;if(RPt.default(e))t=function(i,a){return e(i)-e(a)};else{var n=[];kPt.default(e)?n.push(e):PPt.default(e)&&(n=e),t=function(i,a){for(var o=0;oa[s])return 1;if(i[s]{"use strict";Object.defineProperty(nG,"__esModule",{value:!0});function FPt(r,e){e===void 0&&(e=new Map);var t=[];if(Array.isArray(r))for(var n=0,i=r.length;n{"use strict";Object.defineProperty(aG,"__esModule",{value:!0});var BPt=iG(),GPt=function(){for(var r=[],e=0;e{"use strict";Object.defineProperty(oG,"__esModule",{value:!0});var zPt=Fa(),UPt=Jd();oG.default=function(r,e){for(var t=[],n={},i=0;i{"use strict";Object.defineProperty(sG,"__esModule",{value:!0});var jPt=El();function WPt(r){if(jPt.default(r))return r[0]}sG.default=WPt});var $q=ft(lG=>{"use strict";Object.defineProperty(lG,"__esModule",{value:!0});var VPt=El();function HPt(r){if(VPt.default(r)){var e=r;return e[e.length-1]}}lG.default=HPt});var Qq=ft(uG=>{"use strict";Object.defineProperty(uG,"__esModule",{value:!0});var YPt=Fa(),XPt=Qc();function qPt(r,e){return YPt.default(r)||XPt.default(r)?r[0]===e:!1}uG.default=qPt});var Jq=ft(fG=>{"use strict";Object.defineProperty(fG,"__esModule",{value:!0});var KPt=Fa(),ZPt=Qc();function $Pt(r,e){return KPt.default(r)||ZPt.default(r)?r[r.length-1]===e:!1}fG.default=$Pt});var tK=ft(cG=>{"use strict";Object.defineProperty(cG,"__esModule",{value:!0});var QPt=function(r,e){for(var t=0;t{"use strict";Object.defineProperty(hG,"__esModule",{value:!0});var JPt=function(r,e){for(var t=0;t{"use strict";Object.defineProperty(dG,"__esModule",{value:!0});var tkt=Fa(),ekt=Al(),rkt=Object.prototype.hasOwnProperty;function nkt(r,e){if(!e||!tkt.default(r))return{};for(var t={},n=ekt.default(e)?e:function(s){return s[e]},i,a=0;a{"use strict";Object.defineProperty(vG,"__esModule",{value:!0});var ikt=Fa(),akt=Al(),okt=pG();function skt(r,e){if(!e)return{0:r};if(!akt.default(e)){var t=ikt.default(e)?e:e.replace(/\s+/g,"").split("*");e=function(n){for(var i="_",a=0,o=t.length;a{"use strict";Object.defineProperty(gG,"__esModule",{value:!0});var lkt=mG();gG.default=function(r,e){if(!e)return[r];var t=lkt.default(r,e),n=[];for(var i in t)n.push(t[i]);return n}});var nK=ft(yG=>{"use strict";Object.defineProperty(yG,"__esModule",{value:!0});function ukt(r,e){return r["_wrap_"+e]}yG.default=ukt});var iK=ft(xG=>{"use strict";Object.defineProperty(xG,"__esModule",{value:!0});function fkt(r,e){if(r["_wrap_"+e])return r["_wrap_"+e];var t=function(n){r[e](n)};return r["_wrap_"+e]=t,t}xG.default=fkt});var oK=ft(bG=>{"use strict";Object.defineProperty(bG,"__esModule",{value:!0});var aK={};function ckt(r){var e=aK[r];if(!e){for(var t=r.toString(16),n=t.length;n<6;n++)t="0"+t;e="#"+t,aK[r]=e}return e}bG.default=ckt});var sK=ft(_G=>{"use strict";Object.defineProperty(_G,"__esModule",{value:!0});var hkt=Fa();function dkt(r){var e=0,t=0,n=0,i=0;return hkt.default(r)?r.length===1?e=t=n=i=r[0]:r.length===2?(e=n=r[0],t=i=r[1]):r.length===3?(e=r[0],t=i=r[1],n=r[2]):(e=r[0],t=r[1],n=r[2],i=r[3]):e=t=n=i=r,{r1:e,r2:t,r3:n,r4:i}}_G.default=dkt});var lK=ft(SG=>{"use strict";Object.defineProperty(SG,"__esModule",{value:!0});var pkt=function(r,e,t){return rt?t:r};SG.default=pkt});var uK=ft(CG=>{"use strict";Object.defineProperty(CG,"__esModule",{value:!0});var vkt=function(r,e){var t=e.toString(),n=t.indexOf(".");if(n===-1)return Math.round(r);var i=t.substr(n+1).length;return i>20&&(i=20),parseFloat(r.toFixed(i))};CG.default=vkt});var Jc=ft(wG=>{"use strict";Object.defineProperty(wG,"__esModule",{value:!0});var mkt=Vu(),gkt=function(r){return mkt.default(r,"Number")};wG.default=gkt});var fK=ft(EG=>{"use strict";Object.defineProperty(EG,"__esModule",{value:!0});var ykt=Jc(),xkt=function(r){return ykt.default(r)&&r%1!=0};EG.default=xkt});var cK=ft(AG=>{"use strict";Object.defineProperty(AG,"__esModule",{value:!0});var bkt=Jc(),_kt=function(r){return bkt.default(r)&&r%2==0};AG.default=_kt});var hK=ft(MG=>{"use strict";Object.defineProperty(MG,"__esModule",{value:!0});var Skt=Jc(),Ckt=Number.isInteger?Number.isInteger:function(r){return Skt.default(r)&&r%1==0};MG.default=Ckt});var dK=ft(TG=>{"use strict";Object.defineProperty(TG,"__esModule",{value:!0});var wkt=Jc(),Ekt=function(r){return wkt.default(r)&&r<0};TG.default=Ekt});var pK=ft(IG=>{"use strict";Object.defineProperty(IG,"__esModule",{value:!0});var Akt=1e-5;function Mkt(r,e,t){return t===void 0&&(t=Akt),Math.abs(r-e){"use strict";Object.defineProperty(LG,"__esModule",{value:!0});var Tkt=Jc(),Ikt=function(r){return Tkt.default(r)&&r%2!=0};LG.default=Ikt});var mK=ft(OG=>{"use strict";Object.defineProperty(OG,"__esModule",{value:!0});var Lkt=Jc(),Okt=function(r){return Lkt.default(r)&&r>0};OG.default=Okt});var gK=ft(DG=>{"use strict";Object.defineProperty(DG,"__esModule",{value:!0});var Dkt=Fa(),Pkt=Al();DG.default=function(r,e){if(!!Dkt.default(r)){for(var t,n=-1/0,i=0;in&&(t=a,n=o)}return t}}});var yK=ft(PG=>{"use strict";Object.defineProperty(PG,"__esModule",{value:!0});var kkt=Fa(),Rkt=Al();PG.default=function(r,e){if(!!kkt.default(r)){for(var t,n=1/0,i=0;i{"use strict";Object.defineProperty(kG,"__esModule",{value:!0});var Nkt=function(r,e){return(r%e+e)%e};kG.default=Nkt});var bK=ft(RG=>{"use strict";Object.defineProperty(RG,"__esModule",{value:!0});var Fkt=180/Math.PI,Bkt=function(r){return Fkt*r};RG.default=Bkt});var _K=ft(NG=>{"use strict";Object.defineProperty(NG,"__esModule",{value:!0});NG.default=parseInt});var SK=ft(FG=>{"use strict";Object.defineProperty(FG,"__esModule",{value:!0});var Gkt=Math.PI/180,zkt=function(r){return Gkt*r};FG.default=zkt});var CK=ft(BG=>{"use strict";Object.defineProperty(BG,"__esModule",{value:!0});var Ukt=Ay();BG.default=Ukt.default});var zG=ft(GG=>{"use strict";Object.defineProperty(GG,"__esModule",{value:!0});GG.default=function(r,e){return r.hasOwnProperty(e)}});var wK=ft(UG=>{"use strict";Object.defineProperty(UG,"__esModule",{value:!0});var jkt=zG();UG.default=jkt.default});var qI=ft(jG=>{"use strict";Object.defineProperty(jG,"__esModule",{value:!0});var Wkt=Ay(),Vkt=Al(),Hkt=Object.values?function(r){return Object.values(r)}:function(r){var e=[];return Wkt.default(r,function(t,n){Vkt.default(r)&&n==="prototype"||e.push(t)}),e};jG.default=Hkt});var EK=ft(WG=>{"use strict";Object.defineProperty(WG,"__esModule",{value:!0});var Ykt=YI(),Xkt=qI();WG.default=function(r,e){return Ykt.default(Xkt.default(r),e)}});var My=ft(VG=>{"use strict";Object.defineProperty(VG,"__esModule",{value:!0});var qkt=Jd();VG.default=function(r){return qkt.default(r)?"":r.toString()}});var AK=ft(HG=>{"use strict";Object.defineProperty(HG,"__esModule",{value:!0});var Kkt=My(),Zkt=function(r){return Kkt.default(r).toLowerCase()};HG.default=Zkt});var MK=ft(YG=>{"use strict";Object.defineProperty(YG,"__esModule",{value:!0});var $kt=My(),Qkt=function(r){var e=$kt.default(r);return e.charAt(0).toLowerCase()+e.substring(1)};YG.default=Qkt});var TK=ft(XG=>{"use strict";Object.defineProperty(XG,"__esModule",{value:!0});function Jkt(r,e){return!r||!e?r:r.replace(/\\?\{([^{}]+)\}/g,function(t,n){return t.charAt(0)==="\\"?t.slice(1):e[n]===void 0?"":e[n]})}XG.default=Jkt});var IK=ft(qG=>{"use strict";Object.defineProperty(qG,"__esModule",{value:!0});var tRt=My(),eRt=function(r){return tRt.default(r).toUpperCase()};qG.default=eRt});var LK=ft(KG=>{"use strict";Object.defineProperty(KG,"__esModule",{value:!0});var rRt=My(),nRt=function(r){var e=rRt.default(r);return e.charAt(0).toUpperCase()+e.substring(1)};KG.default=nRt});var $G=ft(ZG=>{"use strict";Object.defineProperty(ZG,"__esModule",{value:!0});var iRt={}.toString,aRt=function(r){return iRt.call(r).replace(/^\[object /,"").replace(/]$/,"")};ZG.default=aRt});var OK=ft(QG=>{"use strict";Object.defineProperty(QG,"__esModule",{value:!0});var oRt=Vu(),sRt=function(r){return oRt.default(r,"Arguments")};QG.default=sRt});var DK=ft(JG=>{"use strict";Object.defineProperty(JG,"__esModule",{value:!0});var lRt=Vu(),uRt=function(r){return lRt.default(r,"Boolean")};JG.default=uRt});var PK=ft(t5=>{"use strict";Object.defineProperty(t5,"__esModule",{value:!0});var fRt=Vu(),cRt=function(r){return fRt.default(r,"Date")};t5.default=cRt});var kK=ft(e5=>{"use strict";Object.defineProperty(e5,"__esModule",{value:!0});var hRt=Vu(),dRt=function(r){return hRt.default(r,"Error")};e5.default=dRt});var RK=ft(r5=>{"use strict";Object.defineProperty(r5,"__esModule",{value:!0});var pRt=Jc();function vRt(r){return pRt.default(r)&&isFinite(r)}r5.default=vRt});var NK=ft(n5=>{"use strict";Object.defineProperty(n5,"__esModule",{value:!0});var mRt=function(r){return r===null};n5.default=mRt});var a5=ft(i5=>{"use strict";Object.defineProperty(i5,"__esModule",{value:!0});var gRt=Object.prototype,yRt=function(r){var e=r&&r.constructor,t=typeof e=="function"&&e.prototype||gRt;return r===t};i5.default=yRt});var FK=ft(o5=>{"use strict";Object.defineProperty(o5,"__esModule",{value:!0});var xRt=Vu(),bRt=function(r){return xRt.default(r,"RegExp")};o5.default=bRt});var BK=ft(s5=>{"use strict";Object.defineProperty(s5,"__esModule",{value:!0});var _Rt=function(r){return r===void 0};s5.default=_Rt});var GK=ft(l5=>{"use strict";Object.defineProperty(l5,"__esModule",{value:!0});var SRt=function(r){return r instanceof Element||r instanceof HTMLDocument};l5.default=SRt});var zK=ft(u5=>{"use strict";Object.defineProperty(u5,"__esModule",{value:!0});function CRt(r){var e=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return setTimeout(t,16)};return e(r)}u5.default=CRt});var UK=ft(f5=>{"use strict";Object.defineProperty(f5,"__esModule",{value:!0});function wRt(r){var e=window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||window.msCancelAnimationFrame||clearTimeout;e(r)}f5.default=wRt});var KI=ft(h5=>{"use strict";Object.defineProperty(h5,"__esModule",{value:!0});function c5(r,e){for(var t in e)e.hasOwnProperty(t)&&t!=="constructor"&&e[t]!==void 0&&(r[t]=e[t])}function ERt(r,e,t,n){return e&&c5(r,e),t&&c5(r,t),n&&c5(r,n),r}h5.default=ERt});var jK=ft(d5=>{"use strict";Object.defineProperty(d5,"__esModule",{value:!0});var ARt=KI(),MRt=Al(),TRt=function(){for(var r=[],e=0;e{"use strict";Object.defineProperty(v5,"__esModule",{value:!0});var IRt=Fa(),p5=function(r){if(typeof r!="object"||r===null)return r;var e;if(IRt.default(r)){e=[];for(var t=0,n=r.length;t{"use strict";Object.defineProperty(m5,"__esModule",{value:!0});function LRt(r,e,t){var n;return function(){var i=this,a=arguments,o=function(){n=null,t||r.apply(i,a)},s=t&&!n;clearTimeout(n),n=setTimeout(o,e),s&&r.apply(i,a)}}m5.default=LRt});var y5=ft(g5=>{"use strict";Object.defineProperty(g5,"__esModule",{value:!0});var ORt=Al();g5.default=function(r,e){if(!ORt.default(r))throw new TypeError("Expected a function");var t=function(){for(var n=[],i=0;i{"use strict";Object.defineProperty(x5,"__esModule",{value:!0});var DRt=Fa(),HK=cb(),PRt=5;function YK(r,e,t,n){t=t||0,n=n||PRt;for(var i in e)if(e.hasOwnProperty(i)){var a=e[i];a!==null&&HK.default(a)?(HK.default(r[i])||(r[i]={}),t{"use strict";Object.defineProperty(_5,"__esModule",{value:!0});var b5=KI(),RRt=Al(),NRt=function(r,e,t,n){RRt.default(e)||(t=e,e=r,r=function(){});var i=Object.create?function(o,s){return Object.create(o,{constructor:{value:s}})}:function(o,s){function l(){}l.prototype=o;var u=new l;return u.constructor=s,u},a=i(e.prototype,r);return r.prototype=b5.default(a,r.prototype),r.superclass=i(e.prototype,e),b5.default(a,t),b5.default(r,n),r};_5.default=NRt});var KK=ft(S5=>{"use strict";Object.defineProperty(S5,"__esModule",{value:!0});var FRt=El(),BRt=function(r,e){if(!FRt.default(r))return-1;var t=Array.prototype.indexOf;if(t)return t.call(r,e);for(var n=-1,i=0;i{"use strict";Object.defineProperty(C5,"__esModule",{value:!0});var GRt=Jd(),zRt=El(),URt=$G(),jRt=a5(),WRt=Object.prototype.hasOwnProperty;function VRt(r){if(GRt.default(r))return!0;if(zRt.default(r))return!r.length;var e=URt.default(r);if(e==="Map"||e==="Set")return!r.size;if(jRt.default(r))return!Object.keys(r).length;for(var t in r)if(WRt.call(r,t))return!1;return!0}C5.default=VRt});var A5=ft(E5=>{"use strict";Object.defineProperty(E5,"__esModule",{value:!0});var $K=XI(),QK=El(),JK=Qc(),w5=function(r,e){if(r===e)return!0;if(!r||!e||JK.default(r)||JK.default(e))return!1;if(QK.default(r)||QK.default(e)){if(r.length!==e.length)return!1;for(var t=!0,n=0;n{"use strict";Object.defineProperty(M5,"__esModule",{value:!0});var HRt=Al(),YRt=A5();M5.default=function(r,e,t){return HRt.default(t)?!!t(r,e):YRt.default(r,e)}});var eZ=ft(T5=>{"use strict";Object.defineProperty(T5,"__esModule",{value:!0});var XRt=El(),qRt=function(r,e){if(!XRt.default(r))return r;for(var t=[],n=0;n{"use strict";Object.defineProperty(I5,"__esModule",{value:!0});var KRt=Jd(),ZRt=vw(),$Rt=function(r){return r};I5.default=function(r,e){e===void 0&&(e=$Rt);var t={};return ZRt.default(r)&&!KRt.default(r)&&Object.keys(r).forEach(function(n){t[n]=e(r[n],n)}),t}});var nZ=ft(L5=>{"use strict";Object.defineProperty(L5,"__esModule",{value:!0});var QRt=Qc();L5.default=function(r,e,t){for(var n=0,i=QRt.default(e)?e.split("."):e;r&&n{"use strict";Object.defineProperty(O5,"__esModule",{value:!0});var JRt=vw(),tNt=Qc(),eNt=Jc();O5.default=function(r,e,t){var n=r,i=tNt.default(e)?e.split("."):e;return i.forEach(function(a,o){o{"use strict";Object.defineProperty(D5,"__esModule",{value:!0});var rNt=Ay(),nNt=cb(),iNt=Object.prototype.hasOwnProperty;D5.default=function(r,e){if(r===null||!nNt.default(r))return{};var t={};return rNt.default(e,function(n){iNt.call(r,n)&&(t[n]=r[n])}),t}});var oZ=ft(P5=>{"use strict";Object.defineProperty(P5,"__esModule",{value:!0});var aNt=J3();P5.default=function(r,e){return aNt.default(r,function(t,n,i){return e.includes(i)||(t[i]=n),t},{})}});var sZ=ft(k5=>{"use strict";Object.defineProperty(k5,"__esModule",{value:!0});k5.default=function(r,e,t){var n,i,a,o,s=0;t||(t={});var l=function(){s=t.leading===!1?0:Date.now(),n=null,o=r.apply(i,a),n||(i=a=null)},u=function(){var f=Date.now();!s&&t.leading===!1&&(s=f);var c=e-(f-s);return i=this,a=arguments,c<=0||c>e?(n&&(clearTimeout(n),n=null),s=f,o=r.apply(i,a),n||(i=a=null)):!n&&t.trailing!==!1&&(n=setTimeout(l,c)),o};return u.cancel=function(){clearTimeout(n),s=0,n=i=a=null},u}});var lZ=ft(R5=>{"use strict";Object.defineProperty(R5,"__esModule",{value:!0});var oNt=El();R5.default=function(r){return oNt.default(r)?Array.prototype.slice.call(r):[]}});var uZ=ft(N5=>{"use strict";Object.defineProperty(N5,"__esModule",{value:!0});var ZI={};N5.default=function(r){return r=r||"g",ZI[r]?ZI[r]+=1:ZI[r]=1,r+ZI[r]}});var fZ=ft(F5=>{"use strict";Object.defineProperty(F5,"__esModule",{value:!0});F5.default=function(){}});var cZ=ft(B5=>{"use strict";Object.defineProperty(B5,"__esModule",{value:!0});B5.default=function(r){return r}});var hZ=ft(G5=>{"use strict";Object.defineProperty(G5,"__esModule",{value:!0});var sNt=Jd(),lNt=El();function uNt(r){return sNt.default(r)?0:lNt.default(r)?r.length:Object.keys(r).length}G5.default=uNt});var U5=ft(z5=>{"use strict";Object.defineProperty(z5,"__esModule",{value:!0});var fNt=pw(),cNt=qI(),hNt=y5(),dNt=Qc(),$I;z5.default=hNt.default(function(r,e){e===void 0&&(e={});var t=e.fontSize,n=e.fontFamily,i=e.fontWeight,a=e.fontStyle,o=e.fontVariant;return $I||($I=document.createElement("canvas").getContext("2d")),$I.font=[a,o,i,t+"px",n].join(" "),$I.measureText(dNt.default(r)?r:"").width},function(r,e){return e===void 0&&(e={}),fNt.__spreadArrays([r],cNt.default(e)).join("")})});var dZ=ft(j5=>{"use strict";Object.defineProperty(j5,"__esModule",{value:!0});var pNt=Qc(),vNt=My(),QI=U5();j5.default=function(r,e,t,n){n===void 0&&(n="...");var i=16,a=QI.default(n,t),o=pNt.default(r)?r:vNt.default(r),s=e,l=[],u,f;if(QI.default(r,t)<=e)return r;for(;u=o.substr(0,i),f=QI.default(u,t),!(f+a>s&&f>s);)if(l.push(u),s-=f,o=o.substr(i),!o)return l.join("");for(;u=o.substr(0,1),f=QI.default(u,t),!(f+a>s);)if(l.push(u),s-=f,o=o.substr(1),!o)return l.join("");return""+l.join("")+n}});var pZ=ft(W5=>{"use strict";Object.defineProperty(W5,"__esModule",{value:!0});var mNt=function(){function r(){this.map={}}return r.prototype.has=function(e){return this.map[e]!==void 0},r.prototype.get=function(e,t){var n=this.map[e];return n===void 0?t:n},r.prototype.set=function(e,t){this.map[e]=t},r.prototype.clear=function(){this.map={}},r.prototype.delete=function(e){delete this.map[e]},r.prototype.size=function(){return Object.keys(this.map).length},r}();W5.default=mNt});var q=ft(Ee=>{"use strict";Object.defineProperty(Ee,"__esModule",{value:!0});var vZ=YI();Object.defineProperty(Ee,"contains",{enumerable:!0,get:function(){return vZ.default}});Object.defineProperty(Ee,"includes",{enumerable:!0,get:function(){return vZ.default}});var gNt=Nq();Object.defineProperty(Ee,"difference",{enumerable:!0,get:function(){return gNt.default}});var yNt=Fq();Object.defineProperty(Ee,"find",{enumerable:!0,get:function(){return yNt.default}});var xNt=Bq();Object.defineProperty(Ee,"findIndex",{enumerable:!0,get:function(){return xNt.default}});var bNt=Gq();Object.defineProperty(Ee,"firstValue",{enumerable:!0,get:function(){return bNt.default}});var _Nt=zq();Object.defineProperty(Ee,"flatten",{enumerable:!0,get:function(){return _Nt.default}});var SNt=jq();Object.defineProperty(Ee,"flattenDeep",{enumerable:!0,get:function(){return SNt.default}});var CNt=Wq();Object.defineProperty(Ee,"getRange",{enumerable:!0,get:function(){return CNt.default}});var wNt=Hq();Object.defineProperty(Ee,"pull",{enumerable:!0,get:function(){return wNt.default}});var ENt=$3();Object.defineProperty(Ee,"pullAt",{enumerable:!0,get:function(){return ENt.default}});var ANt=J3();Object.defineProperty(Ee,"reduce",{enumerable:!0,get:function(){return ANt.default}});var MNt=Yq();Object.defineProperty(Ee,"remove",{enumerable:!0,get:function(){return MNt.default}});var TNt=Xq();Object.defineProperty(Ee,"sortBy",{enumerable:!0,get:function(){return TNt.default}});var INt=qq();Object.defineProperty(Ee,"union",{enumerable:!0,get:function(){return INt.default}});var LNt=iG();Object.defineProperty(Ee,"uniq",{enumerable:!0,get:function(){return LNt.default}});var ONt=Kq();Object.defineProperty(Ee,"valuesOfKey",{enumerable:!0,get:function(){return ONt.default}});var DNt=Zq();Object.defineProperty(Ee,"head",{enumerable:!0,get:function(){return DNt.default}});var PNt=$q();Object.defineProperty(Ee,"last",{enumerable:!0,get:function(){return PNt.default}});var kNt=Qq();Object.defineProperty(Ee,"startsWith",{enumerable:!0,get:function(){return kNt.default}});var RNt=Jq();Object.defineProperty(Ee,"endsWith",{enumerable:!0,get:function(){return RNt.default}});var NNt=E3();Object.defineProperty(Ee,"filter",{enumerable:!0,get:function(){return NNt.default}});var FNt=tK();Object.defineProperty(Ee,"every",{enumerable:!0,get:function(){return FNt.default}});var BNt=eK();Object.defineProperty(Ee,"some",{enumerable:!0,get:function(){return BNt.default}});var GNt=rK();Object.defineProperty(Ee,"group",{enumerable:!0,get:function(){return GNt.default}});var zNt=pG();Object.defineProperty(Ee,"groupBy",{enumerable:!0,get:function(){return zNt.default}});var UNt=mG();Object.defineProperty(Ee,"groupToMap",{enumerable:!0,get:function(){return UNt.default}});var jNt=nK();Object.defineProperty(Ee,"getWrapBehavior",{enumerable:!0,get:function(){return jNt.default}});var WNt=iK();Object.defineProperty(Ee,"wrapBehavior",{enumerable:!0,get:function(){return WNt.default}});var VNt=oK();Object.defineProperty(Ee,"number2color",{enumerable:!0,get:function(){return VNt.default}});var HNt=sK();Object.defineProperty(Ee,"parseRadius",{enumerable:!0,get:function(){return HNt.default}});var YNt=lK();Object.defineProperty(Ee,"clamp",{enumerable:!0,get:function(){return YNt.default}});var XNt=uK();Object.defineProperty(Ee,"fixedBase",{enumerable:!0,get:function(){return XNt.default}});var qNt=fK();Object.defineProperty(Ee,"isDecimal",{enumerable:!0,get:function(){return qNt.default}});var KNt=cK();Object.defineProperty(Ee,"isEven",{enumerable:!0,get:function(){return KNt.default}});var ZNt=hK();Object.defineProperty(Ee,"isInteger",{enumerable:!0,get:function(){return ZNt.default}});var $Nt=dK();Object.defineProperty(Ee,"isNegative",{enumerable:!0,get:function(){return $Nt.default}});var QNt=pK();Object.defineProperty(Ee,"isNumberEqual",{enumerable:!0,get:function(){return QNt.default}});var JNt=vK();Object.defineProperty(Ee,"isOdd",{enumerable:!0,get:function(){return JNt.default}});var tFt=mK();Object.defineProperty(Ee,"isPositive",{enumerable:!0,get:function(){return tFt.default}});var eFt=H3();Object.defineProperty(Ee,"max",{enumerable:!0,get:function(){return eFt.default}});var rFt=gK();Object.defineProperty(Ee,"maxBy",{enumerable:!0,get:function(){return rFt.default}});var nFt=X3();Object.defineProperty(Ee,"min",{enumerable:!0,get:function(){return nFt.default}});var iFt=yK();Object.defineProperty(Ee,"minBy",{enumerable:!0,get:function(){return iFt.default}});var aFt=xK();Object.defineProperty(Ee,"mod",{enumerable:!0,get:function(){return aFt.default}});var oFt=bK();Object.defineProperty(Ee,"toDegree",{enumerable:!0,get:function(){return oFt.default}});var sFt=_K();Object.defineProperty(Ee,"toInteger",{enumerable:!0,get:function(){return sFt.default}});var lFt=SK();Object.defineProperty(Ee,"toRadian",{enumerable:!0,get:function(){return lFt.default}});var uFt=CK();Object.defineProperty(Ee,"forIn",{enumerable:!0,get:function(){return uFt.default}});var fFt=zG();Object.defineProperty(Ee,"has",{enumerable:!0,get:function(){return fFt.default}});var cFt=wK();Object.defineProperty(Ee,"hasKey",{enumerable:!0,get:function(){return cFt.default}});var hFt=EK();Object.defineProperty(Ee,"hasValue",{enumerable:!0,get:function(){return hFt.default}});var dFt=k3();Object.defineProperty(Ee,"keys",{enumerable:!0,get:function(){return dFt.default}});var pFt=N3();Object.defineProperty(Ee,"isMatch",{enumerable:!0,get:function(){return pFt.default}});var vFt=qI();Object.defineProperty(Ee,"values",{enumerable:!0,get:function(){return vFt.default}});var mFt=AK();Object.defineProperty(Ee,"lowerCase",{enumerable:!0,get:function(){return mFt.default}});var gFt=MK();Object.defineProperty(Ee,"lowerFirst",{enumerable:!0,get:function(){return gFt.default}});var yFt=TK();Object.defineProperty(Ee,"substitute",{enumerable:!0,get:function(){return yFt.default}});var xFt=IK();Object.defineProperty(Ee,"upperCase",{enumerable:!0,get:function(){return xFt.default}});var bFt=LK();Object.defineProperty(Ee,"upperFirst",{enumerable:!0,get:function(){return bFt.default}});var _Ft=$G();Object.defineProperty(Ee,"getType",{enumerable:!0,get:function(){return _Ft.default}});var SFt=OK();Object.defineProperty(Ee,"isArguments",{enumerable:!0,get:function(){return SFt.default}});var CFt=Fa();Object.defineProperty(Ee,"isArray",{enumerable:!0,get:function(){return CFt.default}});var wFt=El();Object.defineProperty(Ee,"isArrayLike",{enumerable:!0,get:function(){return wFt.default}});var EFt=DK();Object.defineProperty(Ee,"isBoolean",{enumerable:!0,get:function(){return EFt.default}});var AFt=PK();Object.defineProperty(Ee,"isDate",{enumerable:!0,get:function(){return AFt.default}});var MFt=kK();Object.defineProperty(Ee,"isError",{enumerable:!0,get:function(){return MFt.default}});var TFt=Al();Object.defineProperty(Ee,"isFunction",{enumerable:!0,get:function(){return TFt.default}});var IFt=RK();Object.defineProperty(Ee,"isFinite",{enumerable:!0,get:function(){return IFt.default}});var LFt=Jd();Object.defineProperty(Ee,"isNil",{enumerable:!0,get:function(){return LFt.default}});var OFt=NK();Object.defineProperty(Ee,"isNull",{enumerable:!0,get:function(){return OFt.default}});var DFt=Jc();Object.defineProperty(Ee,"isNumber",{enumerable:!0,get:function(){return DFt.default}});var PFt=vw();Object.defineProperty(Ee,"isObject",{enumerable:!0,get:function(){return PFt.default}});var kFt=XI();Object.defineProperty(Ee,"isObjectLike",{enumerable:!0,get:function(){return kFt.default}});var RFt=cb();Object.defineProperty(Ee,"isPlainObject",{enumerable:!0,get:function(){return RFt.default}});var NFt=a5();Object.defineProperty(Ee,"isPrototype",{enumerable:!0,get:function(){return NFt.default}});var FFt=FK();Object.defineProperty(Ee,"isRegExp",{enumerable:!0,get:function(){return FFt.default}});var BFt=Qc();Object.defineProperty(Ee,"isString",{enumerable:!0,get:function(){return BFt.default}});var GFt=Vu();Object.defineProperty(Ee,"isType",{enumerable:!0,get:function(){return GFt.default}});var zFt=BK();Object.defineProperty(Ee,"isUndefined",{enumerable:!0,get:function(){return zFt.default}});var UFt=GK();Object.defineProperty(Ee,"isElement",{enumerable:!0,get:function(){return UFt.default}});var jFt=zK();Object.defineProperty(Ee,"requestAnimationFrame",{enumerable:!0,get:function(){return jFt.default}});var WFt=UK();Object.defineProperty(Ee,"clearAnimationFrame",{enumerable:!0,get:function(){return WFt.default}});var VFt=jK();Object.defineProperty(Ee,"augment",{enumerable:!0,get:function(){return VFt.default}});var HFt=WK();Object.defineProperty(Ee,"clone",{enumerable:!0,get:function(){return HFt.default}});var YFt=VK();Object.defineProperty(Ee,"debounce",{enumerable:!0,get:function(){return YFt.default}});var XFt=y5();Object.defineProperty(Ee,"memoize",{enumerable:!0,get:function(){return XFt.default}});var qFt=XK();Object.defineProperty(Ee,"deepMix",{enumerable:!0,get:function(){return qFt.default}});var KFt=Ay();Object.defineProperty(Ee,"each",{enumerable:!0,get:function(){return KFt.default}});var ZFt=qK();Object.defineProperty(Ee,"extend",{enumerable:!0,get:function(){return ZFt.default}});var $Ft=KK();Object.defineProperty(Ee,"indexOf",{enumerable:!0,get:function(){return $Ft.default}});var QFt=ZK();Object.defineProperty(Ee,"isEmpty",{enumerable:!0,get:function(){return QFt.default}});var JFt=A5();Object.defineProperty(Ee,"isEqual",{enumerable:!0,get:function(){return JFt.default}});var tBt=tZ();Object.defineProperty(Ee,"isEqualWith",{enumerable:!0,get:function(){return tBt.default}});var eBt=eZ();Object.defineProperty(Ee,"map",{enumerable:!0,get:function(){return eBt.default}});var rBt=rZ();Object.defineProperty(Ee,"mapValues",{enumerable:!0,get:function(){return rBt.default}});var mZ=KI();Object.defineProperty(Ee,"mix",{enumerable:!0,get:function(){return mZ.default}});Object.defineProperty(Ee,"assign",{enumerable:!0,get:function(){return mZ.default}});var nBt=nZ();Object.defineProperty(Ee,"get",{enumerable:!0,get:function(){return nBt.default}});var iBt=iZ();Object.defineProperty(Ee,"set",{enumerable:!0,get:function(){return iBt.default}});var aBt=aZ();Object.defineProperty(Ee,"pick",{enumerable:!0,get:function(){return aBt.default}});var oBt=oZ();Object.defineProperty(Ee,"omit",{enumerable:!0,get:function(){return oBt.default}});var sBt=sZ();Object.defineProperty(Ee,"throttle",{enumerable:!0,get:function(){return sBt.default}});var lBt=lZ();Object.defineProperty(Ee,"toArray",{enumerable:!0,get:function(){return lBt.default}});var uBt=My();Object.defineProperty(Ee,"toString",{enumerable:!0,get:function(){return uBt.default}});var fBt=uZ();Object.defineProperty(Ee,"uniqueId",{enumerable:!0,get:function(){return fBt.default}});var cBt=fZ();Object.defineProperty(Ee,"noop",{enumerable:!0,get:function(){return cBt.default}});var hBt=cZ();Object.defineProperty(Ee,"identity",{enumerable:!0,get:function(){return hBt.default}});var dBt=hZ();Object.defineProperty(Ee,"size",{enumerable:!0,get:function(){return dBt.default}});var pBt=U5();Object.defineProperty(Ee,"measureTextWidth",{enumerable:!0,get:function(){return pBt.default}});var vBt=dZ();Object.defineProperty(Ee,"getEllipsisText",{enumerable:!0,get:function(){return vBt.default}});var mBt=pZ();Object.defineProperty(Ee,"Cache",{enumerable:!0,get:function(){return mBt.default}})});var SJ=ft((YSe,z2)=>{var rJ,nJ,iJ,aJ,oJ,sJ,lJ,uJ,fJ,G2,hz,cJ,hJ,Eb,dJ,pJ,vJ,mJ,gJ,yJ,xJ,bJ,_J;(function(r){var e=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){r(t(e,t(n)))}):typeof z2=="object"&&typeof z2.exports=="object"?r(t(e,t(z2.exports))):r(t(e));function t(n,i){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(a,o){return n[a]=i?i(a,o):o}}})(function(r){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var i in n)n.hasOwnProperty(i)&&(t[i]=n[i])};rJ=function(t,n){e(t,n);function i(){this.constructor=t}t.prototype=n===null?Object.create(n):(i.prototype=n.prototype,new i)},nJ=Object.assign||function(t){for(var n,i=1,a=arguments.length;i=0;u--)(l=t[u])&&(s=(o<3?l(s):o>3?l(n,i,s):l(n,i))||s);return o>3&&s&&Object.defineProperty(n,i,s),s},oJ=function(t,n){return function(i,a){n(i,a,t)}},sJ=function(t,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,n)},lJ=function(t,n,i,a){function o(s){return s instanceof i?s:new i(function(l){l(s)})}return new(i||(i=Promise))(function(s,l){function u(h){try{c(a.next(h))}catch(d){l(d)}}function f(h){try{c(a.throw(h))}catch(d){l(d)}}function c(h){h.done?s(h.value):o(h.value).then(u,f)}c((a=a.apply(t,n||[])).next())})},uJ=function(t,n){var i={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},a,o,s,l;return l={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function u(c){return function(h){return f([c,h])}}function f(c){if(a)throw new TypeError("Generator is already executing.");for(;i;)try{if(a=1,o&&(s=c[0]&2?o.return:c[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,c[1])).done)return s;switch(o=0,s&&(c=[c[0]&2,s.value]),c[0]){case 0:case 1:s=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,o=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(s=i.trys,!(s=s.length>0&&s[s.length-1])&&(c[0]===6||c[0]===2)){i=0;continue}if(c[0]===3&&(!s||c[1]>s[0]&&c[1]=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")},hz=function(t,n){var i=typeof Symbol=="function"&&t[Symbol.iterator];if(!i)return t;var a=i.call(t),o,s=[],l;try{for(;(n===void 0||n-- >0)&&!(o=a.next()).done;)s.push(o.value)}catch(u){l={error:u}}finally{try{o&&!o.done&&(i=a.return)&&i.call(a)}finally{if(l)throw l.error}}return s},cJ=function(){for(var t=[],n=0;n1||u(p,v)})})}function u(p,v){try{f(a[p](v))}catch(m){d(s[0][3],m)}}function f(p){p.value instanceof Eb?Promise.resolve(p.value.v).then(c,h):d(s[0][2],p)}function c(p){u("next",p)}function h(p){u("throw",p)}function d(p,v){p(v),s.shift(),s.length&&u(s[0][0],s[0][1])}},pJ=function(t){var n,i;return n={},a("next"),a("throw",function(o){throw o}),a("return"),n[Symbol.iterator]=function(){return this},n;function a(o,s){n[o]=t[o]?function(l){return(i=!i)?{value:Eb(t[o](l)),done:o==="return"}:s?s(l):l}:s}},vJ=function(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=t[Symbol.asyncIterator],i;return n?n.call(t):(t=typeof G2=="function"?G2(t):t[Symbol.iterator](),i={},a("next"),a("throw"),a("return"),i[Symbol.asyncIterator]=function(){return this},i);function a(s){i[s]=t[s]&&function(l){return new Promise(function(u,f){l=t[s](l),o(u,f,l.done,l.value)})}}function o(s,l,u,f){Promise.resolve(f).then(function(c){s({value:c,done:u})},l)}},mJ=function(t,n){return Object.defineProperty?Object.defineProperty(t,"raw",{value:n}):t.raw=n,t},gJ=function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var i in t)Object.hasOwnProperty.call(t,i)&&(n[i]=t[i]);return n.default=t,n},yJ=function(t){return t&&t.__esModule?t:{default:t}},xJ=function(t,n){if(!n.has(t))throw new TypeError("attempted to get private field on non-instance");return n.get(t)},bJ=function(t,n,i){if(!n.has(t))throw new TypeError("attempted to set private field on non-instance");return n.set(t,i),i},r("__extends",rJ),r("__assign",nJ),r("__rest",iJ),r("__decorate",aJ),r("__param",oJ),r("__metadata",sJ),r("__awaiter",lJ),r("__generator",uJ),r("__exportStar",fJ),r("__createBinding",_J),r("__values",G2),r("__read",hz),r("__spread",cJ),r("__spreadArrays",hJ),r("__await",Eb),r("__asyncGenerator",dJ),r("__asyncDelegator",pJ),r("__asyncValues",vJ),r("__makeTemplateObject",mJ),r("__importStar",gJ),r("__importDefault",yJ),r("__classPrivateFieldGet",xJ),r("__classPrivateFieldSet",bJ)})});var KJ=ft((BCe,j2)=>{var IJ,LJ,OJ,DJ,PJ,kJ,RJ,NJ,FJ,U2,pz,BJ,GJ,Mb,zJ,UJ,jJ,WJ,VJ,HJ,YJ,XJ,qJ;(function(r){var e=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){r(t(e,t(n)))}):typeof j2=="object"&&typeof j2.exports=="object"?r(t(e,t(j2.exports))):r(t(e));function t(n,i){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(a,o){return n[a]=i?i(a,o):o}}})(function(r){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var i in n)n.hasOwnProperty(i)&&(t[i]=n[i])};IJ=function(t,n){e(t,n);function i(){this.constructor=t}t.prototype=n===null?Object.create(n):(i.prototype=n.prototype,new i)},LJ=Object.assign||function(t){for(var n,i=1,a=arguments.length;i=0;u--)(l=t[u])&&(s=(o<3?l(s):o>3?l(n,i,s):l(n,i))||s);return o>3&&s&&Object.defineProperty(n,i,s),s},PJ=function(t,n){return function(i,a){n(i,a,t)}},kJ=function(t,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,n)},RJ=function(t,n,i,a){function o(s){return s instanceof i?s:new i(function(l){l(s)})}return new(i||(i=Promise))(function(s,l){function u(h){try{c(a.next(h))}catch(d){l(d)}}function f(h){try{c(a.throw(h))}catch(d){l(d)}}function c(h){h.done?s(h.value):o(h.value).then(u,f)}c((a=a.apply(t,n||[])).next())})},NJ=function(t,n){var i={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},a,o,s,l;return l={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function u(c){return function(h){return f([c,h])}}function f(c){if(a)throw new TypeError("Generator is already executing.");for(;i;)try{if(a=1,o&&(s=c[0]&2?o.return:c[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,c[1])).done)return s;switch(o=0,s&&(c=[c[0]&2,s.value]),c[0]){case 0:case 1:s=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,o=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(s=i.trys,!(s=s.length>0&&s[s.length-1])&&(c[0]===6||c[0]===2)){i=0;continue}if(c[0]===3&&(!s||c[1]>s[0]&&c[1]=t.length&&(t=void 0),{value:t&&t[a++],done:!t}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")},pz=function(t,n){var i=typeof Symbol=="function"&&t[Symbol.iterator];if(!i)return t;var a=i.call(t),o,s=[],l;try{for(;(n===void 0||n-- >0)&&!(o=a.next()).done;)s.push(o.value)}catch(u){l={error:u}}finally{try{o&&!o.done&&(i=a.return)&&i.call(a)}finally{if(l)throw l.error}}return s},BJ=function(){for(var t=[],n=0;n1||u(p,v)})})}function u(p,v){try{f(a[p](v))}catch(m){d(s[0][3],m)}}function f(p){p.value instanceof Mb?Promise.resolve(p.value.v).then(c,h):d(s[0][2],p)}function c(p){u("next",p)}function h(p){u("throw",p)}function d(p,v){p(v),s.shift(),s.length&&u(s[0][0],s[0][1])}},UJ=function(t){var n,i;return n={},a("next"),a("throw",function(o){throw o}),a("return"),n[Symbol.iterator]=function(){return this},n;function a(o,s){n[o]=t[o]?function(l){return(i=!i)?{value:Mb(t[o](l)),done:o==="return"}:s?s(l):l}:s}},jJ=function(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=t[Symbol.asyncIterator],i;return n?n.call(t):(t=typeof U2=="function"?U2(t):t[Symbol.iterator](),i={},a("next"),a("throw"),a("return"),i[Symbol.asyncIterator]=function(){return this},i);function a(s){i[s]=t[s]&&function(l){return new Promise(function(u,f){l=t[s](l),o(u,f,l.done,l.value)})}}function o(s,l,u,f){Promise.resolve(f).then(function(c){s({value:c,done:u})},l)}},WJ=function(t,n){return Object.defineProperty?Object.defineProperty(t,"raw",{value:n}):t.raw=n,t},VJ=function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var i in t)Object.hasOwnProperty.call(t,i)&&(n[i]=t[i]);return n.default=t,n},HJ=function(t){return t&&t.__esModule?t:{default:t}},YJ=function(t,n){if(!n.has(t))throw new TypeError("attempted to get private field on non-instance");return n.get(t)},XJ=function(t,n,i){if(!n.has(t))throw new TypeError("attempted to set private field on non-instance");return n.set(t,i),i},r("__extends",IJ),r("__assign",LJ),r("__rest",OJ),r("__decorate",DJ),r("__param",PJ),r("__metadata",kJ),r("__awaiter",RJ),r("__generator",NJ),r("__exportStar",FJ),r("__createBinding",qJ),r("__values",U2),r("__read",pz),r("__spread",BJ),r("__spreadArrays",GJ),r("__await",Mb),r("__asyncGenerator",zJ),r("__asyncDelegator",UJ),r("__asyncValues",jJ),r("__makeTemplateObject",WJ),r("__importStar",VJ),r("__importDefault",HJ),r("__classPrivateFieldGet",YJ),r("__classPrivateFieldSet",XJ)})});var Qot=ft(iD=>{"use strict";Object.defineProperty(iD,"__esModule",{value:!0});iD.default=void 0;var GHt=1,zHt=function(){return"".concat(GHt++)};iD.default=zHt});var cj=ft(aD=>{"use strict";Object.defineProperty(aD,"__esModule",{value:!0});aD.default=void 0;var UHt=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:60,n=null;return function(){for(var i=this,a=arguments.length,o=new Array(a),s=0;s{"use strict";Object.defineProperty(Nm,"__esModule",{value:!0});Nm.SensorTabIndex=Nm.SensorClassName=Nm.SizeSensorId=void 0;var jHt="size-sensor-id";Nm.SizeSensorId=jHt;var WHt="size-sensor-object";Nm.SensorClassName=WHt;var VHt="-1";Nm.SensorTabIndex=VHt});var tst=ft(oD=>{"use strict";Object.defineProperty(oD,"__esModule",{value:!0});oD.createSensor=void 0;var HHt=YHt(cj()),Jot=hj();function YHt(r){return r&&r.__esModule?r:{default:r}}var XHt=function(e){var t=void 0,n=[],i=function(){getComputedStyle(e).position==="static"&&(e.style.position="relative");var f=document.createElement("object");return f.onload=function(){f.contentDocument.defaultView.addEventListener("resize",a),a()},f.style.display="block",f.style.position="absolute",f.style.top="0",f.style.left="0",f.style.height="100%",f.style.width="100%",f.style.overflow="hidden",f.style.pointerEvents="none",f.style.zIndex="-1",f.style.opacity="0",f.setAttribute("class",Jot.SensorClassName),f.setAttribute("tabindex",Jot.SensorTabIndex),f.type="text/html",e.appendChild(f),f.data="about:blank",f},a=(0,HHt.default)(function(){n.forEach(function(u){u(e)})}),o=function(f){t||(t=i()),n.indexOf(f)===-1&&n.push(f)},s=function(){t&&t.parentNode&&(t.contentDocument&&t.contentDocument.defaultView.removeEventListener("resize",a),t.parentNode.removeChild(t),t=void 0,n=[])},l=function(f){var c=n.indexOf(f);c!==-1&&n.splice(c,1),n.length===0&&t&&s()};return{element:e,bind:o,destroy:s,unbind:l}};oD.createSensor=XHt});var est=ft(sD=>{"use strict";Object.defineProperty(sD,"__esModule",{value:!0});sD.createSensor=void 0;var qHt=KHt(cj());function KHt(r){return r&&r.__esModule?r:{default:r}}var ZHt=function(e){var t=void 0,n=[],i=(0,qHt.default)(function(){n.forEach(function(u){u(e)})}),a=function(){var f=new ResizeObserver(i);return f.observe(e),i(),f},o=function(f){t||(t=a()),n.indexOf(f)===-1&&n.push(f)},s=function(){t.disconnect(),n=[],t=void 0},l=function(f){var c=n.indexOf(f);c!==-1&&n.splice(c,1),n.length===0&&t&&s()};return{element:e,bind:o,destroy:s,unbind:l}};sD.createSensor=ZHt});var rst=ft(lD=>{"use strict";Object.defineProperty(lD,"__esModule",{value:!0});lD.createSensor=void 0;var $Ht=tst(),QHt=est(),JHt=typeof ResizeObserver!="undefined"?QHt.createSensor:$Ht.createSensor;lD.createSensor=JHt});var nst=ft(R1=>{"use strict";Object.defineProperty(R1,"__esModule",{value:!0});R1.removeSensor=R1.getSensor=void 0;var tYt=rYt(Qot()),eYt=rst(),uD=hj();function rYt(r){return r&&r.__esModule?r:{default:r}}var QE={},nYt=function(e){var t=e.getAttribute(uD.SizeSensorId);if(t&&QE[t])return QE[t];var n=(0,tYt.default)();e.setAttribute(uD.SizeSensorId,n);var i=(0,eYt.createSensor)(e);return QE[n]=i,i};R1.getSensor=nYt;var iYt=function(e){var t=e.element.getAttribute(uD.SizeSensorId);e.element.removeAttribute(uD.SizeSensorId),e.destroy(),t&&QE[t]&&delete QE[t]};R1.removeSensor=iYt});var ist=ft(Fm=>{"use strict";Object.defineProperty(Fm,"__esModule",{value:!0});Fm.ver=Fm.clear=Fm.bind=void 0;var dj=nst(),aYt=function(e,t){var n=(0,dj.getSensor)(e);return n.bind(t),function(){n.unbind(t)}};Fm.bind=aYt;var oYt=function(e){var t=(0,dj.getSensor)(e);(0,dj.removeSensor)(t)};Fm.clear=oYt;var sYt="1.0.1";Fm.ver=sYt});var Ust=ft((ID,zst)=>{(function(r,e){typeof ID=="object"&&typeof zst!="undefined"?e(ID):typeof define=="function"&&define.amd?define(["exports"],e):(r=r||self,e(r.d3={}))})(ID,function(r){"use strict";function e(M,O){return t(M)||n(M,O)||i()}function t(M){if(Array.isArray(M))return M}function n(M,O){var F=[],k=!0,G=!1,D=void 0;try{for(var N=M[Symbol.iterator](),z;!(k=(z=N.next()).done)&&(F.push(z.value),!(O&&F.length===O));k=!0);}catch(j){G=!0,D=j}finally{try{!k&&N.return!=null&&N.return()}finally{if(G)throw D}}return F}function i(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function a(M,O,F,k){M=M.filter(function(st,_t){var dt=O(st,_t),vt=F(st,_t);return dt!=null&&isFinite(dt)&&vt!=null&&isFinite(vt)}),k&&M.sort(function(st,_t){return O(st)-O(_t)});for(var G=M.length,D=new Float64Array(G),N=new Float64Array(G),z=0,j=0,W,J,et,lt=0;ltG&&(J.splice($+1,0,vt),lt=!0)}return lt}}function c(M,O,F,k){var G=k-M*M,D=Math.abs(G)<1e-24?0:(F-M*O)/G,N=O-D*M;return[N,D]}function h(){var M=function(D){return D[0]},O=function(D){return D[1]},F;function k(G){var D=0,N=0,z=0,j=0,W=0,J=0,et=F?+F[0]:1/0,lt=F?+F[1]:-1/0;o(G,M,O,function(Ut,$t){var Y=Math.log($t),it=Ut*$t;++D,N+=($t-N)/D,j+=(it-j)/D,J+=(Ut*it-J)/D,z+=($t*Y-z)/D,W+=(it*Y-W)/D,F||(Utlt&&(lt=Ut))});var $=c(j/N,z/N,W/N,J/N),st=e($,2),_t=st[0],dt=st[1];_t=Math.exp(_t);var vt=function($t){return _t*Math.exp(dt*$t)},Tt=f(et,lt,vt);return Tt.a=_t,Tt.b=dt,Tt.predict=vt,Tt.rSquared=s(G,M,O,N,vt),Tt}return k.domain=function(G){return arguments.length?(F=G,k):F},k.x=function(G){return arguments.length?(M=G,k):M},k.y=function(G){return arguments.length?(O=G,k):O},k}function d(){var M=function(D){return D[0]},O=function(D){return D[1]},F;function k(G){var D=0,N=0,z=0,j=0,W=0,J=F?+F[0]:1/0,et=F?+F[1]:-1/0;o(G,M,O,function(Tt,Ut){++D,N+=(Tt-N)/D,z+=(Ut-z)/D,j+=(Tt*Ut-j)/D,W+=(Tt*Tt-W)/D,F||(Ttet&&(et=Tt))});var lt=c(N,z,j,W),$=e(lt,2),st=$[0],_t=$[1],dt=function(Ut){return _t*Ut+st},vt=[[J,dt(J)],[et,dt(et)]];return vt.a=_t,vt.b=st,vt.predict=dt,vt.rSquared=s(G,M,O,z,dt),vt}return k.domain=function(G){return arguments.length?(F=G,k):F},k.x=function(G){return arguments.length?(M=G,k):M},k.y=function(G){return arguments.length?(O=G,k):O},k}function p(M){M.sort(function(F,k){return F-k});var O=M.length/2;return O%1==0?(M[O-1]+M[O])/2:M[Math.floor(O)]}var v=2,m=1e-12;function g(){var M=function(D){return D[0]},O=function(D){return D[1]},F=.3;function k(G){for(var D=a(G,M,O,!0),N=e(D,4),z=N[0],j=N[1],W=N[2],J=N[3],et=z.length,lt=Math.max(2,~~(F*et)),$=new Float64Array(et),st=new Float64Array(et),_t=new Float64Array(et).fill(1),dt=-1;++dt<=v;){for(var vt=[0,lt-1],Tt=0;Ttz[Y]-Ut?$t:Y,K=0,Rt=0,Xt=0,Zt=0,Ae=0,We=1/Math.abs(z[it]-Ut||1),$e=$t;$e<=Y;++$e){var V=z[$e],Te=j[$e],ne=x(Math.abs(Ut-V)*We)*_t[$e],pt=V*ne;K+=ne,Rt+=pt,Xt+=Te*ne,Zt+=Te*pt,Ae+=V*pt}var Et=c(Rt/K,Xt/K,Zt/K,Ae/K),St=e(Et,2),Wt=St[0],ee=St[1];$[Tt]=Wt+ee*Ut,st[Tt]=Math.abs(j[Tt]-$[Tt]),b(z,Tt+1,vt)}if(dt===v)break;var Ue=p(st);if(Math.abs(Ue)=1?m:(ge=1-ae*ae)*ge}return S(z,$,W,J)}return k.bandwidth=function(G){return arguments.length?(F=G,k):F},k.x=function(G){return arguments.length?(M=G,k):M},k.y=function(G){return arguments.length?(O=G,k):O},k}function x(M){return(M=1-M*M*M)*M*M}function b(M,O,F){var k=M[O],G=F[0],D=F[1]+1;if(!(D>=M.length))for(;O>G&&M[D]-k<=k-M[G];)F[0]=++G,F[1]=D,++D}function S(M,O,F,k){for(var G=M.length,D=[],N=0,z=0,j=[],W;Nlt&&(lt=$t))});var st=c(z,j,W,J),_t=e(st,2),dt=_t[0],vt=_t[1],Tt=function(Y){return vt*Math.log(Y)/$+dt},Ut=f(et,lt,Tt);return Ut.a=vt,Ut.b=dt,Ut.predict=Tt,Ut.rSquared=s(D,M,O,j,Tt),Ut}return G.domain=function(D){return arguments.length?(k=D,G):k},G.x=function(D){return arguments.length?(M=D,G):M},G.y=function(D){return arguments.length?(O=D,G):O},G.base=function(D){return arguments.length?(F=D,G):F},G}function w(){var M=function(D){return D[0]},O=function(D){return D[1]},F;function k(G){var D=a(G,M,O),N=e(D,4),z=N[0],j=N[1],W=N[2],J=N[3],et=z.length,lt=0,$=0,st=0,_t=0,dt=0,vt,Tt,Ut,$t;for(vt=0;vtRt&&(Rt=ne))});var Xt=st-lt*lt,Zt=lt*Xt-$*$,Ae=(dt*lt-_t*$)/Zt,We=(_t*Xt-dt*$)/Zt,$e=-Ae*lt,V=function(pt){return pt=pt-W,Ae*pt*pt+We*pt+$e+J},Te=f(K,Rt,V);return Te.a=Ae,Te.b=We-2*Ae*W,Te.c=$e-We*W+Ae*W*W+J,Te.predict=V,Te.rSquared=s(G,M,O,Y,V),Te}return k.domain=function(G){return arguments.length?(F=G,k):F},k.x=function(G){return arguments.length?(M=G,k):M},k.y=function(G){return arguments.length?(O=G,k):O},k}function A(){var M=function(N){return N[0]},O=function(N){return N[1]},F=3,k;function G(D){if(F===1){var N=d().x(M).y(O).domain(k)(D);return N.coefficients=[N.b,N.a],delete N.a,delete N.b,N}if(F===2){var z=w().x(M).y(O).domain(k)(D);return z.coefficients=[z.c,z.b,z.a],delete z.a,delete z.b,delete z.c,z}var j=a(D,M,O),W=e(j,4),J=W[0],et=W[1],lt=W[2],$=W[3],st=J.length,_t=[],dt=[],vt=F+1,Tt=0,Ut=0,$t=k?+k[0]:1/0,Y=k?+k[1]:-1/0;o(D,M,O,function(V,Te){++Ut,Tt+=(Te-Tt)/Ut,k||(V<$t&&($t=V),V>Y&&(Y=V))});var it,K,Rt,Xt,Zt;for(it=0;it=0;--D)for(z=O[D],j=1,G[D]+=z,N=1;N<=D;++N)j*=(D+1-N)/N,G[D-N]+=z*Math.pow(F,N)*j;return G[0]+=k,G}function P(M){var O=M.length-1,F=[],k,G,D,N,z;for(k=0;kMath.abs(M[k][N])&&(N=G);for(D=k;D=k;D--)M[D][G]-=M[D][k]*M[k][G]/M[k][k]}for(G=O-1;G>=0;--G){for(z=0,D=G+1;Dlt&&(lt=Ut))});var $=c(N,z,j,W),st=e($,2),_t=st[0],dt=st[1];_t=Math.exp(_t);var vt=function($t){return _t*Math.pow($t,dt)},Tt=f(et,lt,vt);return Tt.a=_t,Tt.b=dt,Tt.predict=vt,Tt.rSquared=s(G,M,O,J,vt),Tt}return k.domain=function(G){return arguments.length?(F=G,k):F},k.x=function(G){return arguments.length?(M=G,k):M},k.y=function(G){return arguments.length?(O=G,k):O},k}r.regressionExp=h,r.regressionLinear=d,r.regressionLoess=g,r.regressionLog=C,r.regressionPoly=A,r.regressionPow=L,r.regressionQuad=w,Object.defineProperty(r,"__esModule",{value:!0})})});var blt=ft((ner,Xm)=>{"use strict";var jD=Xm.exports;Xm.exports.isNumber=function(r){return typeof r=="number"};Xm.exports.findMin=function(r){if(r.length===0)return 1/0;for(var e=r[0],t=1;t{"use strict";var _lt=50,Slt=2,w9t=Math.log(2),Clt=qm.exports,pc=blt();function E9t(r){return 1-Math.abs(r)}qm.exports.getUnifiedMinMax=function(r,e){return Clt.getUnifiedMinMaxMulti([r],e)};qm.exports.getUnifiedMinMaxMulti=function(r,e){e=e||{};var t=!1,n=!1,i=pc.isNumber(e.width)?e.width:Slt,a=pc.isNumber(e.size)?e.size:_lt,o=pc.isNumber(e.min)?e.min:(t=!0,pc.findMinMulti(r)),s=pc.isNumber(e.max)?e.max:(n=!0,pc.findMaxMulti(r)),l=s-o,u=l/(a-1);return t&&(o=o-2*i*u),n&&(s=s+2*i*u),{min:o,max:s}};qm.exports.create=function(r,e){if(e=e||{},!r||r.length===0)return[];var t=pc.isNumber(e.size)?e.size:_lt,n=pc.isNumber(e.width)?e.width:Slt,i=Clt.getUnifiedMinMax(r,{size:t,width:n,min:e.min,max:e.max}),a=i.min,o=i.max,s=o-a,l=s/(t-1);if(s===0)return[{x:a,y:1}];for(var u=[],f=0;f=u.length)){var C=Math.max(S-n,0),w=S,A=Math.min(S+n,u.length-1),I=C-(S-n),P=S+n-A,L=h[-n-1+I]||0,M=h[-n-1+P]||0,O=d/(d-L-M);I>0&&(v+=O*(I-1)*p);var F=Math.max(0,S-n+1);pc.inside(0,u.length-1,F)&&(u[F].y+=O*1*p),pc.inside(0,u.length-1,w+1)&&(u[w+1].y-=O*2*p),pc.inside(0,u.length-1,A+1)&&(u[A+1].y+=O*1*p)}});var m=v,g=0,x=0;return u.forEach(function(b){g+=b.y,m+=g,b.y=m,x+=m}),x>0&&u.forEach(function(b){b.y/=x}),u};function A9t(r,e){for(var t={},n=0,i=-e;i<=e;i++)n+=r(i/e),t[i]=n;return t}qm.exports.getExpectedValueFromPdf=function(r){if(!(!r||r.length===0)){var e=0;return r.forEach(function(t){e+=t.x*t.y}),e}};qm.exports.getXWithLeftTailArea=function(r,e){if(!(!r||r.length===0)){for(var t=0,n=0,i=0;i=e));i++);return r[n].x}};qm.exports.getPerplexity=function(r){if(!(!r||r.length===0)){var e=0;return r.forEach(function(t){var n=Math.log(t.y);isFinite(n)&&(e+=t.y*n)}),e=-e/w9t,Math.pow(2,e)}}});var Xj=ft((KD,Glt)=>{(function(r,e){typeof KD=="object"&&typeof Glt!="undefined"?e(KD):typeof define=="function"&&define.amd?define(["exports"],e):e(r.fmin=r.fmin||{})})(KD,function(r){"use strict";function e(d,p,v,m){m=m||{};var g=m.maxIterations||100,x=m.tolerance||1e-10,b=d(p),S=d(v),C=v-p;if(b*S>0)throw"Initial bisect points must have opposite signs";if(b===0)return p;if(S===0)return v;for(var w=0;w=0&&(p=A),Math.abs(C)=M[L-1].fx){var $=!1;if(N.fx>lt.fx?(s(z,1+A,D,-A,lt),z.fx=d(z),z.fx=1)break;for(O=1;OS+x*g*C||w>=k)F=g;else{if(Math.abs(I)<=-b*C)return g;I*(F-O)>=0&&(F=O),O=g,k=w}return 0}for(var M=0;M<10;++M){if(s(m.x,1,v.x,g,p),w=m.fx=d(m.x,m.fxprime),I=i(m.fxprime,p),w>S+x*g*C||M&&w>=A)return L(P,g,A);if(Math.abs(I)<=-b*C)return g;if(I>=0)return L(g,P,w);A=w,P=g,g*=2}return g}function f(d,p,v){var m={x:p.slice(),fx:0,fxprime:p.slice()},g={x:p.slice(),fx:0,fxprime:p.slice()},x=p.slice(),b,S,C=1,w;v=v||{},w=v.maxIterations||p.length*20,m.fx=d(m.x,m.fxprime),b=m.fxprime.slice(),o(b,m.fxprime,-1);for(var A=0;A{"use strict";Object.defineProperty(D_,"__esModule",{value:!0});D_.MESSAGE=D_.ALGORITHM=void 0;var MJt={pageRank:"pageRank",breadthFirstSearch:"breadthFirstSearch",connectedComponent:"connectedComponent",depthFirstSearch:"depthFirstSearch",detectCycle:"detectCycle",detectDirectedCycle:"detectDirectedCycle",detectAllCycles:"detectAllCycles",detectAllDirectedCycle:"detectAllDirectedCycle",detectAllUndirectedCycle:"detectAllUndirectedCycle",dijkstra:"dijkstra",findAllPath:"findAllPath",findShortestPath:"findShortestPath",floydWarshall:"floydWarshall",getAdjMatrix:"getAdjMatrix",getDegree:"getDegree",getInDegree:"getInDegree",getNeighbors:"getNeighbors",getOutDegree:"getOutDegree",labelPropagation:"labelPropagation",louvain:"louvain",GADDI:"GADDI",minimumSpanningTree:"minimumSpanningTree",SUCCESS:"SUCCESS",FAILURE:"FAILURE"};D_.ALGORITHM=MJt;var TJt={SUCCESS:"SUCCESS",FAILURE:"FAILURE"};D_.MESSAGE=TJt});var JA=ft(Tk=>{"use strict";Object.defineProperty(Tk,"__esModule",{value:!0});Tk.default=void 0;var IJt=function(e,t){var n=e.nodes,i=e.edges,a=[],o={};if(!n)throw new Error("invalid nodes data!");return n&&n.forEach(function(s,l){o[s.id]=l;var u=[];a.push(u)}),i&&i.forEach(function(s){var l=s.source,u=s.target,f=o[l],c=o[u];!f&&f!==0||!c&&c!==0||(a[f][c]=1,t||(a[c][f]=1))}),a},LJt=IJt;Tk.default=LJt});var cht=ft(P_=>{"use strict";Object.defineProperty(P_,"__esModule",{value:!0});P_.default=P_.LinkedListNode=void 0;var OJt=function(e,t){return e===t},XV=function(){function r(e,t){t===void 0&&(t=null),this.value=e,this.next=t}return r.prototype.toString=function(e){return e?e(this.value):"".concat(this.value)},r}();P_.LinkedListNode=XV;var DJt=function(){function r(e){e===void 0&&(e=OJt),this.head=null,this.tail=null,this.compare=e}return r.prototype.prepend=function(e){var t=new XV(e,this.head);return this.head=t,this.tail||(this.tail=t),this},r.prototype.append=function(e){var t=new XV(e);return this.head?(this.tail.next=t,this.tail=t,this):(this.head=t,this.tail=t,this)},r.prototype.delete=function(e){if(!this.head)return null;for(var t=null;this.head&&this.compare(this.head.value,e);)t=this.head,this.head=this.head.next;var n=this.head;if(n!==null)for(;n.next;)this.compare(n.next.value,e)?(t=n.next,n.next=n.next.next):n=n.next;return this.compare(this.tail.value,e)&&(this.tail=n),t},r.prototype.find=function(e){var t=e.value,n=t===void 0?void 0:t,i=e.callback,a=i===void 0?void 0:i;if(!this.head)return null;for(var o=this.head;o;){if(a&&a(o.value)||n!==void 0&&this.compare(o.value,n))return o;o=o.next}return null},r.prototype.deleteTail=function(){var e=this.tail;if(this.head===this.tail)return this.head=null,this.tail=null,e;for(var t=this.head;t.next;)t.next.next?t=t.next:t.next=null;return this.tail=t,e},r.prototype.deleteHead=function(){if(!this.head)return null;var e=this.head;return this.head.next?this.head=this.head.next:(this.head=null,this.tail=null),e},r.prototype.fromArray=function(e){var t=this;return e.forEach(function(n){return t.append(n)}),this},r.prototype.toArray=function(){for(var e=[],t=this.head;t;)e.push(t),t=t.next;return e},r.prototype.reverse=function(){for(var e=this.head,t=null,n=null;e;)n=e.next,e.next=t,t=e,e=n;this.tail=this.head,this.head=t},r.prototype.toString=function(e){return e===void 0&&(e=void 0),this.toArray().map(function(t){return t.toString(e)}).toString()},r}(),PJt=DJt;P_.default=PJt});var hht=ft(Ik=>{"use strict";Object.defineProperty(Ik,"__esModule",{value:!0});Ik.default=void 0;var kJt=RJt(cht());function RJt(r){return r&&r.__esModule?r:{default:r}}var NJt=function(){function r(){this.linkedList=new kJt.default}return r.prototype.isEmpty=function(){return!this.linkedList.head},r.prototype.peek=function(){return this.linkedList.head?this.linkedList.head.value:null},r.prototype.enqueue=function(e){this.linkedList.append(e)},r.prototype.dequeue=function(){var e=this.linkedList.deleteHead();return e?e.value:null},r.prototype.toString=function(e){return this.linkedList.toString(e)},r}(),FJt=NJt;Ik.default=FJt});var pf=ft(Xh=>{"use strict";Object.defineProperty(Xh,"__esModule",{value:!0});Xh.uniqueId=Xh.getOutEdgesNodeId=Xh.getNeighbors=Xh.getEdgesByNodeId=void 0;var BJt=function(e,t,n){t===void 0&&(t=[]);var i=t.filter(function(l){return l.source===e||l.target===e});if(n==="target"){var a=function(u){return u.source===e};return i.filter(a).map(function(l){return l.target})}if(n==="source"){var o=function(u){return u.target===e};return i.filter(o).map(function(l){return l.source})}var s=function(u){return u.source===e?u.target:u.source};return i.map(s)};Xh.getNeighbors=BJt;var GJt=function(e,t){return t.filter(function(n){return n.source===e})};Xh.getOutEdgesNodeId=GJt;var zJt=function(e,t){return t.filter(function(n){return n.source===e||n.target===e})};Xh.getEdgesByNodeId=zJt;var UJt=function(e){e===void 0&&(e=0);var t="".concat(Math.random()).split(".")[1].substr(0,5),n="".concat(Math.random()).split(".")[1].substr(0,5);return"".concat(e,"-").concat(t).concat(n)};Xh.uniqueId=UJt});var dht=ft(Lk=>{"use strict";Object.defineProperty(Lk,"__esModule",{value:!0});Lk.default=void 0;var jJt=VJt(hht()),WJt=pf();function VJt(r){return r&&r.__esModule?r:{default:r}}function HJt(r){r===void 0&&(r={});var e=r,t=function(){},n=function(){var i={};return function(a){var o=a.next,s=o;return i[s]?!1:(i[s]=!0,!0)}}();return e.allowTraversal=r.allowTraversal||n,e.enter=r.enter||t,e.leave=r.leave||t,e}var YJt=function(e,t,n,i){i===void 0&&(i=!0);var a=HJt(n),o=new jJt.default,s=e.edges,l=s===void 0?[]:s;o.enqueue(t);for(var u="",f=function(){var h=o.dequeue();a.enter({current:h,previous:u}),(0,WJt.getNeighbors)(h,l,i?"target":void 0).forEach(function(d){a.allowTraversal({previous:u,current:h,next:d})&&o.enqueue(d)}),a.leave({current:h,previous:u}),u=h};!o.isEmpty();)f()},XJt=YJt;Lk.default=XJt});var qV=ft(P0=>{"use strict";Object.defineProperty(P0,"__esModule",{value:!0});P0.default=qJt;P0.detectStrongConnectComponents=P0.detectConnectedComponents=void 0;var pht=pf(),vht=function(e){for(var t=e.nodes,n=t===void 0?[]:t,i=e.edges,a=i===void 0?[]:i,o=[],s={},l=[],u=function d(p){l.push(p),s[p.id]=!0;for(var v=(0,pht.getNeighbors)(p.id,a),m=function(b){var S=v[b];if(!s[S]){var C=n.filter(function(w){return w.id===S});C.length>0&&d(C[0])}},g=0;g0;)h.push(l.pop());o.push(h)}}return o};P0.detectConnectedComponents=vht;var mht=function(e){for(var t=e.nodes,n=t===void 0?[]:t,i=e.edges,a=i===void 0?[]:i,o=[],s={},l={},u={},f=[],c=0,h=function m(g){l[g.id]=c,u[g.id]=c,c+=1,o.push(g),s[g.id]=!0;for(var x=(0,pht.getNeighbors)(g.id,a,"target").filter(function(A){return n.map(function(I){return I.id}).indexOf(A)>-1}),b=function(I){var P=x[I];if(!l[P]&&l[P]!==0){var L=n.filter(function(M){return M.id===P});L.length>0&&m(L[0]),u[g.id]=Math.min(u[g.id],u[P])}else s[P]&&(u[g.id]=Math.min(u[g.id],l[P]))},S=0;S0;){var w=o.pop();if(s[w.id]=!1,C.push(w),w===g)break}C.length>0&&f.push(C)}},d=0,p=n;d{"use strict";Object.defineProperty(dg,"__esModule",{value:!0});dg.getOutDegree=dg.getInDegree=dg.default=void 0;var tM=function(e){var t={},n=e.nodes,i=n===void 0?[]:n,a=e.edges,o=a===void 0?[]:a;return i.forEach(function(s){t[s.id]={degree:0,inDegree:0,outDegree:0}}),o.forEach(function(s){t[s.source].degree++,t[s.source].outDegree++,t[s.target].degree++,t[s.target].inDegree++}),t},KJt=tM;dg.default=KJt;var ZJt=function(e,t){var n=tM(e);return n[t]?tM(e)[t].inDegree:0};dg.getInDegree=ZJt;var $Jt=function(e,t){var n=tM(e);return n[t]?tM(e)[t].outDegree:0};dg.getOutDegree=$Jt});var $V=ft(ZV=>{"use strict";Object.defineProperty(ZV,"__esModule",{value:!0});ZV.default=tte;var QJt=pf();function JJt(r){r===void 0&&(r={});var e=r,t=function(){},n=function(){var i={};return function(a){var o=a.next;return i[o]?!1:(i[o]=!0,!0)}}();return e.allowTraversal=r.allowTraversal||n,e.enter=r.enter||t,e.leave=r.leave||t,e}function ght(r,e,t,n){n.enter({current:e,previous:t});var i=r.edges,a=i===void 0?[]:i;(0,QJt.getNeighbors)(e,a,"target").forEach(function(o){n.allowTraversal({previous:t,current:e,next:o})&&ght(r,o,e,n)}),n.leave({current:e,previous:t})}function tte(r,e,t){ght(r,e,"",JJt(t))}});var Cht=ft(qh=>{"use strict";function Ok(r){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Ok=function(t){return typeof t}:Ok=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ok(r)}Object.defineProperty(qh,"__esModule",{value:!0});qh.detectAllUndirectedCycle=qh.detectAllDirectedCycle=qh.detectAllCycles=qh.default=void 0;var ete=nte($V()),yht=rte(qV()),xht=pf();function bht(r){if(typeof WeakMap!="function")return null;var e=new WeakMap,t=new WeakMap;return(bht=function(i){return i?t:e})(r)}function rte(r,e){if(!e&&r&&r.__esModule)return r;if(r===null||Ok(r)!=="object"&&typeof r!="function")return{default:r};var t=bht(e);if(t&&t.has(r))return t.get(r);var n={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in r)if(a!=="default"&&Object.prototype.hasOwnProperty.call(r,a)){var o=i?Object.getOwnPropertyDescriptor(r,a):null;o&&(o.get||o.set)?Object.defineProperty(n,a,o):n[a]=r[a]}return n.default=r,t&&t.set(r,n),n}function nte(r){return r&&r.__esModule?r:{default:r}}var ite=function(e){var t=null,n=e.nodes,i=n===void 0?[]:n,a={},o={},s={},l={};i.forEach(function(c){o[c.id]=c});for(var u={enter:function(h){var d=h.current,p=h.previous;if(s[d]){t={};for(var v=d,m=p;m!==d;)t[v]=m,v=m,m=a[m];t[v]=m}else s[d]=d,delete o[d],a[d]=p},leave:function(h){var d=h.current;l[d]=d,delete s[d]},allowTraversal:function(h){var d=h.next;return t?!1:!l[d]}};Object.keys(o).length;){var f=Object.keys(o)[0];(0,ete.default)(e,f,u)}return t},_ht=function(e,t,n){var i,a;n===void 0&&(n=!0);for(var o=[],s=(0,yht.default)(e,!1),l=0,u=s;l0;)for(var m=d.pop(),g=m.id,x=(0,xht.getNeighbors)(g,e.edges),b=function(w){var A,I=x[w],P=e.nodes.find(function(G){return G.id===I});if(I===g)o.push((A={},A[I]=m,A));else if(!(I in v))p[I]=m,d.push(P),v[I]=new Set([m]);else if(!v[g].has(P)){for(var L=!0,M=[P,m],O=p[g];v[I].size&&!v[I].has(O)&&(M.push(O),O!==p[O.id]);)O=p[O.id];if(M.push(O),t&&n?(L=!1,M.findIndex(function(G){return t.indexOf(G.id)>-1})>-1&&(L=!0)):t&&!n&&M.findIndex(function(G){return t.indexOf(G.id)>-1})>-1&&(L=!1),L){for(var F={},k=1;k0;){var k=F.pop();a.has(k)&&(a.delete(k),o[k.id].forEach(function(G){F.push(G)}),o[k.id].clear())}},c=function M(O,F,k){var G=!1;if(t&&n===!1&&t.indexOf(O.id)>-1)return G;i.push(O),a.add(O);for(var D=k[O.id],N=0;N-1});lt<$.length;lt++){var st=$[lt];st===et.id&&!(n===!1&&t.indexOf(et.id)>-1)?s.push((F={},F[et.id]=et,F)):J[et.id].push(u[st])}}return{component:W,adjList:J,minIdx:G}},b=0;b=b}),C=(0,yht.detectStrongConnectComponents)({nodes:S,edges:e.edges}).filter(function(M){return M.length>1});if(C.length===0)break;var w=x(C),A=w.minIdx,I=w.adjList,P=w.component;if(P.length>1){P.forEach(function(M){o[M.id]=new Set});var L=l[A];if(t&&n&&t.indexOf(L.id)===-1)return s;c(L,L,I),b=A+1}else break}return s};qh.detectAllDirectedCycle=Sht;var ate=function(e,t,n,i){return i===void 0&&(i=!0),t?Sht(e,n,i):_ht(e,n,i)};qh.detectAllCycles=ate;var ote=ite;qh.default=ote});var Pk=ft(Dk=>{"use strict";Object.defineProperty(Dk,"__esModule",{value:!0});Dk.default=void 0;var wht=pw(),ste=q(),Eht=pf(),lte=function(e,t,n){for(var i=1/0,a,o=0;oc[C.id]+O?(c[M]=c[C.id]+O,h[M]=[C.id]):c[M]===c[C.id]+O&&h[M].push(C.id)})},v=0;v{"use strict";Object.defineProperty(k_,"__esModule",{value:!0});k_.findShortestPath=k_.findAllPath=void 0;var cte=hte(Pk()),kk=pf();function hte(r){return r&&r.__esModule?r:{default:r}}var dte=function(e,t,n,i,a){var o=(0,cte.default)(e,t,i,a),s=o.length,l=o.path,u=o.allPath;return{length:s[n],path:l[n],allPath:u[n]}};k_.findShortestPath=dte;var pte=function(e,t,n,i){var a;if(t===n)return[[t]];var o=e.edges,s=o===void 0?[]:o,l=[t],u=(a={},a[t]=!0,a),f=[],c=[],h=i?(0,kk.getNeighbors)(t,s,"target"):(0,kk.getNeighbors)(t,s);for(f.push(h);l.length>0&&f.length>0;){var d=f[f.length-1];if(d.length){var p=d.shift();p&&(l.push(p),u[p]=!0,h=i?(0,kk.getNeighbors)(p,s,"target"):(0,kk.getNeighbors)(p,s),f.push(h.filter(function(g){return!u[g]})))}else{var v=l.pop();u[v]=!1,f.pop();continue}if(l[l.length-1]===n){var m=l.map(function(x){return x});c.push(m);var v=l.pop();u[v]=!1,f.pop()}}return c};k_.findAllPath=pte});var QV=ft(Rk=>{"use strict";Object.defineProperty(Rk,"__esModule",{value:!0});Rk.default=void 0;var vte=mte(JA());function mte(r){return r&&r.__esModule?r:{default:r}}var gte=function(e,t){for(var n=(0,vte.default)(e,t),i=[],a=n.length,o=0;oi[o][l]+i[l][s]&&(i[o][s]=i[o][l]+i[l][s]);return i},yte=gte;Rk.default=yte});var Tht=ft(Nk=>{"use strict";Object.defineProperty(Nk,"__esModule",{value:!0});Nk.default=void 0;var xte=_te(JA()),bte=pf();function _te(r){return r&&r.__esModule?r:{default:r}}var Ste=function(e,t,n,i){t===void 0&&(t=!1),n===void 0&&(n="weight"),i===void 0&&(i=1e3);var a=e.nodes,o=a===void 0?[]:a,s=e.edges,l=s===void 0?[]:s,u={},f={};o.forEach(function(S,C){var w=(0,bte.uniqueId)();S.clusterId=w,u[w]={id:w,nodes:[S]},f[S.id]={node:S,idx:C}});var c=(0,xte.default)(e,t),h=[],d={};c.forEach(function(S,C){var w=0,A=o[C].id;d[A]={},S.forEach(function(I,P){if(!!I){w+=I;var L=o[P].id;d[A][L]=I}}),h.push(w)});for(var p=0,v=function(){var C=!1;if(o.forEach(function(w){var A={};Object.keys(d[w.id]).forEach(function(G){var D=d[w.id][G],N=f[G].node,z=N.clusterId;A[z]||(A[z]=0),A[z]+=D});var I=-1/0,P=[];if(Object.keys(A).forEach(function(G){I=0&&P.splice(L,1),P&&P.length){C=!0;var M=u[w.clusterId],O=M.nodes.indexOf(w);M.nodes.splice(O,1);var F=Math.floor(Math.random()*P.length),k=u[P[F]];k.nodes.push(w),w.clusterId=k.id}}}),!C)return"break";p++};p{"use strict";Object.defineProperty(Fk,"__esModule",{value:!0});Fk.default=void 0;var wte=q(),Ete=function(){function r(e){this.arr=e}return r.prototype.getArr=function(){return this.arr||[]},r.prototype.add=function(e){var t,n=e.arr;if(!((t=this.arr)===null||t===void 0?void 0:t.length))return new r(n);if(!(n==null?void 0:n.length))return new r(this.arr);if(this.arr.length===n.length){var i=[];for(var a in this.arr)i[a]=this.arr[a]+n[a];return new r(i)}},r.prototype.subtract=function(e){var t,n=e.arr;if(!((t=this.arr)===null||t===void 0?void 0:t.length))return new r(n);if(!(n==null?void 0:n.length))return new r(this.arr);if(this.arr.length===n.length){var i=[];for(var a in this.arr)i[a]=this.arr[a]-n[a];return new r(i)}},r.prototype.avg=function(e){var t=[];if(e!==0)for(var n in this.arr)t[n]=this.arr[n]/e;return new r(t)},r.prototype.negate=function(){var e=[];for(var t in this.arr)e[t]=-this.arr[t];return new r(e)},r.prototype.squareEuclideanDistance=function(e){var t,n=e.arr;if(!((t=this.arr)===null||t===void 0?void 0:t.length)||!(n==null?void 0:n.length))return 0;if(this.arr.length===n.length){var i=0;for(var a in this.arr)i+=Math.pow(this.arr[a]-e.arr[a],2);return i}},r.prototype.euclideanDistance=function(e){var t,n=e.arr;if(!((t=this.arr)===null||t===void 0?void 0:t.length)||!(n==null?void 0:n.length))return 0;if(this.arr.length===n.length){var i=0;for(var a in this.arr)i+=Math.pow(this.arr[a]-e.arr[a],2);return Math.sqrt(i)}else console.error("The two vectors are unequal in length.")},r.prototype.normalize=function(){var e=[],t=(0,wte.clone)(this.arr);t.sort(function(o,s){return o-s});var n=t[t.length-1],i=t[0];for(var a in this.arr)e[a]=(this.arr[a]-i)/(n-i);return new r(e)},r.prototype.norm2=function(){var e;if(!((e=this.arr)===null||e===void 0?void 0:e.length))return 0;var t=0;for(var n in this.arr)t+=Math.pow(this.arr[n],2);return Math.sqrt(t)},r.prototype.dot=function(e){var t,n=e.arr;if(!((t=this.arr)===null||t===void 0?void 0:t.length)||!(n==null?void 0:n.length))return 0;if(this.arr.length===n.length){var i=0;for(var a in this.arr)i+=this.arr[a]*e.arr[a];return i}else console.error("The two vectors are unequal in length.")},r.prototype.equal=function(e){var t,n=e.arr;if(((t=this.arr)===null||t===void 0?void 0:t.length)!==(n==null?void 0:n.length))return!1;for(var i in this.arr)if(this.arr[i]!==n[i])return!1;return!0},r}(),Ate=Ete;Fk.default=Ate});var Iht=ft(R_=>{"use strict";Object.defineProperty(R_,"__esModule",{value:!0});R_.secondReg=R_.dateReg=void 0;var Mte=/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;R_.secondReg=Mte;var Tte=/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;R_.dateReg=Tte});var Dht=ft(Kh=>{"use strict";Object.defineProperty(Kh,"__esModule",{value:!0});Kh.getPropertyWeight=Kh.getAllSortProperties=Kh.getAllProperties=Kh.default=void 0;var Bk=Iht(),t8=function(e,t){e===void 0&&(e=[]),t===void 0&&(t=100);var n={};e.forEach(function(a){!a.properties||Object.keys(a.properties).forEach(function(o){if(o==="id"||!"".concat(a.properties[o]).match(Bk.secondReg)&&!"".concat(a.properties[o]).match(Bk.dateReg)&&isNaN(Number(a.properties[o]))){n.hasOwnProperty(o)&&delete n[o];return}n.hasOwnProperty(o)?n[o]+=1:n[o]=1})});var i=Object.keys(n).sort(function(a,o){return n[o]-n[a]});return i.length{"use strict";Object.defineProperty(eM,"__esModule",{value:!0});eM.DistanceType=void 0;var e8;eM.DistanceType=e8;(function(r){r.EuclideanDistance="euclideanDistance"})(e8||(eM.DistanceType=e8={}))});var Ght=ft(Zh=>{"use strict";Object.defineProperty(Zh,"__esModule",{value:!0});Zh.oneHot=Zh.getDistance=Zh.getAllKeyValueMap=Zh.default=void 0;var kht=q(),Rht=Pht(),Nht=Ote(JV());function Ote(r){return r&&r.__esModule?r:{default:r}}var r8=function(e,t,n){var i=[];(t==null?void 0:t.length)?i=t:(e.forEach(function(o){i=i.concat(Object.keys(o))}),i=(0,kht.uniq)(i));var a={};return i.forEach(function(o){var s=[];e.forEach(function(l){l[o]!==void 0&&l[o]!==""&&s.push(l[o])}),s.length&&!(n==null?void 0:n.includes(o))&&(a[o]=(0,kht.uniq)(s))}),a};Zh.getAllKeyValueMap=r8;var Fht=function(e,t,n){var i=r8(e,t,n),a=[];return e.forEach(function(o,s){var l=[];Object.keys(i).forEach(function(u){for(var f=o[u],c=i[u],h=c.findIndex(function(v){return f===v}),d=[],p=0;p{"use strict";Object.defineProperty(Gk,"__esModule",{value:!0});Gk.default=void 0;var Pte=q(),kte=zht(JA()),rM=zht(JV()),Rte=Dht(),Nte=Ght();function zht(r){return r&&r.__esModule?r:{default:r}}var Uht=function(e,t,n,i){for(var a=t.length,o=2*i,s=0,l=0;l0&&C>w&&C-ww&&(I=l.map(function(D){return{node:D,clusterId:D.clusterId}}),P=(0,Pte.clone)(v),w=C),L||A>100)break;A++,Object.keys(v).forEach(function(D){var N=0;f.forEach(function(z){var j=z.source,W=z.target,J=m[j].node.clusterId,et=m[W].node.clusterId;(J===D&&et!==D||et===D&&J!==D)&&(N=N+(z[n]||1))}),v[D].sumTot=N}),l.forEach(function(D,N){var z=v[D.clusterId],j=0,W,J=x[N]/(2*S),et=0,lt=z.nodes;lt.forEach(function(it){var K=m[it.id].idx;et+=g[N][K]||0});var $=et-z.sumTot*J,st=lt.filter(function(it){return it.id!==D.id}),_t=[];st.forEach(function(it,K){_t[K]=c[it.originIndex]});var dt=n8(st,c)*o,vt=b[D.id];if(Object.keys(vt).forEach(function(it){var K=m[it].node,Rt=K.clusterId;if(Rt!==D.clusterId){var Xt=v[Rt],Zt=Xt.nodes;if(!(!Zt||!Zt.length)){var Ae=0;Zt.forEach(function(pt){var Et=m[pt.id].idx;Ae+=g[N][Et]||0});var We=Ae-Xt.sumTot*J,$e=Zt.concat([D]),V=[];$e.forEach(function(pt,Et){V[Et]=c[pt.originIndex]});var Te=n8($e,c)*o,ne=We-$;a&&(ne=We+Te-($+dt)),ne>j&&(j=ne,W=Xt)}}}),j>0){W.nodes.push(D);var Tt=D.clusterId;D.clusterId=W.id;var Ut=z.nodes.indexOf(D);z.nodes.splice(Ut,1);var $t=0,Y=0;f.forEach(function(it){var K=it.source,Rt=it.target,Xt=m[K].node.clusterId,Zt=m[Rt].node.clusterId;(Xt===W.id&&Zt!==W.id||Zt===W.id&&Xt!==W.id)&&($t=$t+(it[n]||1)),(Xt===Tt&&Zt!==Tt||Zt===Tt&&Xt!==Tt)&&(Y=Y+(it[n]||1))}),W.sumTot=$t,z.sumTot=Y}})}var M={},O=0;Object.keys(P).forEach(function(D){var N=P[D];if(!N.nodes||!N.nodes.length){delete P[D];return}var z=String(O+1);z!==D&&(N.id=z,N.nodes=N.nodes.map(function(j){return{id:j.id,clusterId:z}}),P[z]=N,M[D]=z,delete P[D],O++)}),I.forEach(function(D){var N=D.node,z=D.clusterId;N.clusterId=z,N.clusterId&&M[N.clusterId]&&(N.clusterId=M[N.clusterId])});var F=[],k={};f.forEach(function(D){var N=D.source,z=D.target,j=D[n]||1,W=m[N].node.clusterId,J=m[z].node.clusterId,et="".concat(W,"---").concat(J);if(k[et])k[et].weight+=j,k[et].count++;else{var lt={source:W,target:J,weight:j,count:1};k[et]=lt,F.push(lt)}});var G=[];return Object.keys(P).forEach(function(D){G.push(P[D])}),{clusters:G,clusterEdges:F}},Bte=Fte;Gk.default=Bte});var Wht=ft(zk=>{"use strict";Object.defineProperty(zk,"__esModule",{value:!0});zk.default=void 0;var Gte=function(){function r(e){this.count=e.length,this.parent={};for(var t=0,n=e;t{"use strict";Object.defineProperty(Uk,"__esModule",{value:!0});Uk.default=void 0;var Ute=function(e,t){return e-t},jte=function(){function r(e){e===void 0&&(e=Ute),this.compareFn=e,this.list=[]}return r.prototype.getLeft=function(e){return 2*e+1},r.prototype.getRight=function(e){return 2*e+2},r.prototype.getParent=function(e){return e===0?null:Math.floor((e-1)/2)},r.prototype.isEmpty=function(){return this.list.length<=0},r.prototype.top=function(){return this.isEmpty()?void 0:this.list[0]},r.prototype.delMin=function(){var e=this.top(),t=this.list.pop();return this.list.length>0&&(this.list[0]=t,this.moveDown(0)),e},r.prototype.insert=function(e){if(e!==null){this.list.push(e);var t=this.list.length-1;return this.moveUp(t),!0}return!1},r.prototype.moveUp=function(e){for(var t=this.getParent(e);e&&e>0&&this.compareFn(this.list[t],this.list[e])>0;){var n=this.list[t];this.list[t]=this.list[e],this.list[e]=n,e=t,t=this.getParent(e)}},r.prototype.moveDown=function(e){var t,n=e,i=this.getLeft(e),a=this.getRight(e),o=this.list.length;i!==null&&i0?n=i:a!==null&&a0&&(n=a),e!==n&&(t=[this.list[n],this.list[e]],this.list[e]=t[0],this.list[n]=t[1],this.moveDown(n))},r}(),Wte=jte;Uk.default=Wte});var Xht=ft(jk=>{"use strict";Object.defineProperty(jk,"__esModule",{value:!0});jk.default=void 0;var Vte=Hht(Wht()),Hte=Hht(Vht()),i8=pf();function Hht(r){return r&&r.__esModule?r:{default:r}}var Yte=function(e,t){var n=[],i=e.nodes,a=i===void 0?[]:i,o=e.edges,s=o===void 0?[]:o;if(a.length===0)return n;var l=a[0],u=new Set;u.add(l);var f=function(m,g){return t?m.weight-g.weight:0},c=new Hte.default(f);for((0,i8.getEdgesByNodeId)(l.id,s).forEach(function(v){c.insert(v)});!c.isEmpty();){var h=c.delMin(),d=h.source,p=h.target;u.has(d)&&u.has(p)||(n.push(h),u.has(d)||(u.add(d),(0,i8.getEdgesByNodeId)(d,s).forEach(function(v){c.insert(v)})),u.has(p)||(u.add(p),(0,i8.getEdgesByNodeId)(p,s).forEach(function(v){c.insert(v)})))}return n},Yht=function(e,t){var n=[],i=e.nodes,a=i===void 0?[]:i,o=e.edges,s=o===void 0?[]:o;if(a.length===0)return n;var l=s.map(function(d){return d});t&&l.sort(function(d,p){return d.weight-p.weight});for(var u=new Vte.default(a.map(function(d){return d.id}));l.length>0;){var f=l.shift(),c=f.source,h=f.target;u.connected(c,h)||(n.push(f),u.union(c,h))}return n},Xte=function(e,t,n){var i={prim:Yte,kruskal:Yht};return n?i[n](e,t):Yht(e,t)},qte=Xte;jk.default=qte});var qht=ft(Wk=>{"use strict";Object.defineProperty(Wk,"__esModule",{value:!0});Wk.default=void 0;var Kte=$te(KV()),Zte=pf();function $te(r){return r&&r.__esModule?r:{default:r}}var Qte=function(e,t,n){typeof t!="number"&&(t=1e-6),typeof n!="number"&&(n=.85);for(var i=1,a=0,o=1e3,s=e.nodes,l=s===void 0?[]:s,u=e.edges,f=u===void 0?[]:u,c=l.length,h,d={},p={},v=0;v0&&i>t;){a=0;for(var v=0;v0&&(h+=p[C]/w)}d[g]=n*h,a+=d[g]}}a=(1-a)/c,i=0;for(var v=0;v{"use strict";Object.defineProperty(uo,"__esModule",{value:!0});uo.VACANT_NODE_LABEL=uo.VACANT_NODE_ID=uo.VACANT_GRAPH_ID=uo.VACANT_EDGE_LABEL=uo.VACANT_EDGE_ID=uo.Node=uo.Graph=uo.Edge=uo.AUTO_EDGE_ID=void 0;var Kht=-1;uo.VACANT_EDGE_ID=Kht;var nM=-1;uo.VACANT_NODE_ID=nM;var Zht="-1";uo.VACANT_EDGE_LABEL=Zht;var $ht="-1";uo.VACANT_NODE_LABEL=$ht;var tee=-1;uo.VACANT_GRAPH_ID=tee;var eee="-1";uo.AUTO_EDGE_ID=eee;var a8=function(){function r(e,t,n,i){e===void 0&&(e=Kht),t===void 0&&(t=nM),n===void 0&&(n=nM),i===void 0&&(i=Zht),this.id=e,this.from=t,this.to=n,this.label=i}return r}();uo.Edge=a8;var Qht=function(){function r(e,t){e===void 0&&(e=nM),t===void 0&&(t=$ht),this.id=e,this.label=t,this.edges=[],this.edgeMap={}}return r.prototype.addEdge=function(e){this.edges.push(e),this.edgeMap[e.id]=e},r}();uo.Node=Qht;var ree=function(){function r(e,t,n){e===void 0&&(e=nM),t===void 0&&(t=!0),n===void 0&&(n=!1),this.id=e,this.edgeIdAutoIncrease=t,this.edges=[],this.nodes=[],this.nodeMap={},this.edgeMap={},this.nodeLabelMap={},this.edgeLabelMap={},this.counter=0,this.directed=n}return r.prototype.getNodeNum=function(){return this.nodes.length},r.prototype.addNode=function(e,t){if(!this.nodeMap[e]){var n=new Qht(e,t);this.nodes.push(n),this.nodeMap[e]=n,this.nodeLabelMap[t]||(this.nodeLabelMap[t]=[]),this.nodeLabelMap[t].push(e)}},r.prototype.addEdge=function(e,t,n,i){if((this.edgeIdAutoIncrease||e===void 0)&&(e=this.counter++),!(this.nodeMap[t]&&this.nodeMap[n]&&this.nodeMap[n].edgeMap[e])){var a=new a8(e,t,n,i);if(this.edges.push(a),this.edgeMap[e]=a,this.nodeMap[t].addEdge(a),this.edgeLabelMap[i]||(this.edgeLabelMap[i]=[]),this.edgeLabelMap[i].push(a),!this.directed){var o=new a8(e,n,t,i);this.nodeMap[n].addEdge(o),this.edgeLabelMap[i].push(o)}}},r}();uo.Graph=ree});var rdt=ft(Hk=>{"use strict";Object.defineProperty(Hk,"__esModule",{value:!0});Hk.default=void 0;var nee=q(),Xl=Jht(),k0=function(){function r(e,t,n,i,a){this.fromNode=e,this.toNode=t,this.nodeEdgeNodeLabel={nodeLabel1:n||Xl.VACANT_NODE_LABEL,edgeLabel:i||Xl.VACANT_EDGE_LABEL,nodeLabel2:a||Xl.VACANT_NODE_LABEL}}return r.prototype.equalTo=function(e){return this.fromNode===e.formNode&&this.toNode===e.toNode&&this.nodeEdgeNodeLabel===e.nodeEdgeNodeLabel},r.prototype.notEqualTo=function(e){return!this.equalTo(e)},r}(),tdt=function(){function r(){this.rmpath=[],this.dfsEdgeList=[]}return r.prototype.equalTo=function(e){var t=this.dfsEdgeList.length,n=e.length;if(t!==n)return!1;for(var i=0;i=0;n--){var i=this.dfsEdgeList[n],a=i.fromNode,o=i.toNode;ad||i.hasNode(o[h.to])||(t.labelb;C--){var w=S(C);if(w==="break")break}if(g){var A=e.findMinLabel(m);o.dfsEdgeList.push(new k0(v,x,Xl.VACANT_NODE_LABEL,A.edgeLabel,Xl.VACANT_NODE_LABEL));var I=o.dfsEdgeList.length-1;return e.dfsCode.dfsEdgeList[I]!==o.dfsEdgeList[I]?!1:c(m[A.edgeLabel].projected)}var P={};g=!1;var L=0;h.forEach(function(D){var N=new Vk(D),z=e.findForwardPureEdges(i,N.edges[d[0]],p,N);z.length>0&&(g=!0,L=v,z.forEach(function(j){var W="".concat(j.label,"-").concat(a[j.to].label);P[W]||(P[W]={projected:[],edgeLabel:j.label,nodeLabel2:a[j.to].label}),P[W].projected.push({graphId:i.id,edge:j,preNode:D})}))});for(var M=d.length,O=function(N){if(g)return"break";var z=d[N];h.forEach(function(j){var W=new Vk(j),J=e.findForwardRmpathEdges(i,W.edges[z],p,W);J.length>0&&(g=!0,L=o.dfsEdgeList[z].fromNode,J.forEach(function(et){var lt="".concat(et.label,"-").concat(a[et.to].label);P[lt]||(P[lt]={projected:[],edgeLabel:et.label,nodeLabel2:a[et.to].label}),P[lt].projected.push({graphId:i.id,edge:et,preNode:j})}))})},C=0;C=0;p--){var v=t.findBackwardEdge(c,d.edges[a[p]],d.edges[a[0]],d);if(v){var m="".concat(t.dfsCode.dfsEdgeList[a[p]].fromNode,"-").concat(v.label);u[m]||(u[m]={projected:[],toNodeId:t.dfsCode.dfsEdgeList[a[p]].fromNode,edgeLabel:v.label}),u[m].projected.push({graphId:f.graphId,edge:v,preNode:f})}}if(!(i>=t.maxNodeNum)){var g=t.findForwardPureEdges(c,d.edges[a[0]],s,d);g.forEach(function(b){var S="".concat(o,"-").concat(b.label,"-").concat(h[b.to].label);l[S]||(l[S]={projected:[],fromNodeId:o,edgeLabel:b.label,nodeLabel2:h[b.to].label}),l[S].projected.push({graphId:f.graphId,edge:b,preNode:f})});for(var x=function(S){var C=t.findForwardRmpathEdges(c,d.edges[a[S]],s,d);C.forEach(function(w){var A="".concat(t.dfsCode.dfsEdgeList[a[S]].fromNode,"-").concat(w.label,"-").concat(h[w.to].label);l[A]||(l[A]={projected:[],fromNodeId:t.dfsCode.dfsEdgeList[a[S]].fromNode,edgeLabel:w.label,nodeLabel2:h[w.to].label}),l[A].projected.push({graphId:f.graphId,edge:w,preNode:f})})},p=0;pb){var S=b;b=x,x=S}var C=g.label,w="".concat(u,"-").concat(x,"-").concat(C,"-").concat(b),A="".concat(x,"-").concat(C,"-").concat(b);if(!o[A]){var I=o[A]||0;I++,o[A]=I}l[w]={graphId:u,nodeLabel1:x,edgeLabel:C,nodeLabel2:b}})})}),Object.keys(a).forEach(function(u){var f=a[u];if(!(f{"use strict";Object.defineProperty(qk,"__esModule",{value:!0});qk.default=void 0;var ndt=pw(),idt=o8(QV()),uee=o8(rdt()),adt=o8(Pk()),fee=pf();function o8(r){return r&&r.__esModule?r:{default:r}}var odt=function(e,t,n,i){n===void 0&&(n="cluster"),i===void 0&&(i=2);var a=[],o=e.nodes;return t.forEach(function(s,l){a.push(sdt(o,s,l,n,i))}),a},sdt=function(e,t,n,i,a){var o=[n],s=[],l={};return t.forEach(function(u,f){if(u<=a&&n!==f){o.push(f),s.push(e[f]);var c=e[f][i];l[c]?(l[c].count++,l[c].dists.push(u)):l[c]={count:1,dists:[u]}}}),Object.keys(l).forEach(function(u){l[u].dists=l[u].dists.sort(function(f,c){return f-c})}),{nodeIdx:n,nodeId:e[n].id,nodeIdxs:o,neighbors:s,neighborNum:o.length-1,nodeLabelCountMap:l}},cee=function(e,t,n,i,a){var o=Math.ceil(n/t),s={},l=0;return i.forEach(function(u,f){for(var c=0,h=0,d=u.nodeIdxs,p=u.neighborNum-1;c2*t)););if(m<2*t&&(s["".concat(f,"-").concat(v)]={start:f,end:v,distance:a[f][v]},c++,l++,l>=n))return s;if(h++,h>2*t)break}if(ch&&(l=h);var d=n[c.id].inDegree;u>d&&(u=d);var p=n[c.id].outDegree;f>p&&(f=p)}),e[t]={degree:l,inDegree:u,outDegree:f}),{minPatternNodeLabelDegree:l,minPatternNodeLabelInDegree:u,minPatternNodeLabelOutDegree:f}},pee=function(e,t,n,i,a,o,s){var l;if(n===void 0&&(n=!1),o===void 0&&(o="cluster"),s===void 0&&(s="cluster"),!(!e||!e.nodes)){var u=e.nodes.length;if(!!u){var f=(0,idt.default)(e,n),c=(0,idt.default)(t,n),h=fdt(e.nodes,f,n),d=fdt(t.nodes,c,n),p=ldt(e.nodes,o),v=p.nodeMap,m=p.nodeLabelMap,g=ldt(t.nodes,o),x=g.nodeMap,b=g.nodeLabelMap;udt(e.edges,s,v);var S=udt(t.edges,s,x).edgeLabelMap,C=[];c==null||c.forEach(function(V){C=C.concat(V)}),a||(a=Math.max.apply(Math,(0,ndt.__spreadArray)((0,ndt.__spreadArray)([],C,!1),[2],!1))),i||(i=a);var w=odt(e,f,o,i),A=odt(t,c,o,i),I=Math.min(100,u*(u-1)/2),P=cee(i,u,I,w,f),L=Yk(P,w,e),M=10,O=1,F=1,k=4,G={graphs:L,nodeLabelProp:o,edgeLabelProp:s,minSupport:O,minNodeNum:F,maxNodeNum:k,directed:n},D=(0,uee.default)(G).slice(0,M),N=D.length,z=[];D.forEach(function(V,Te){z[Te]={},Object.keys(L).forEach(function(ne){var pt=L[ne],Et=Xk(pt,V,o,s);z[Te][ne]=Et})});var j=hee(z,N,D),W=j.structure,J=j.structureCountMap,et=t.nodes[0],lt=[],$=(l=t.nodes[0])===null||l===void 0?void 0:l[o],st=-1/0;t.nodes.forEach(function(V){var Te=V[o],ne=m[Te];(ne==null?void 0:ne.length)>st&&(st=ne.length,lt=ne,$=Te,et=V)});var _t={},dt={},vt={},Tt={},Ut={},$t={};Object.keys(b).forEach(function(V,Te){Ut[V]=[],n&&($t[V]=[]);var ne=-1/0,pt=b[V],Et={};pt.forEach(function(Ht){var ae=d["".concat(et.id,"-").concat(Ht.id)];if(ae&&Ut[V].push(ae),neUt[V][_n]){ma=!0;break}if(ma)return lt.splice(ae,1),"continue";var ii={};Ye.neighbors.forEach(function(En){var ci=h["".concat(ge.id,"-").concat(En.id)];ii["".concat(ge.id,"-").concat(En.id)]={start:v[ge.id].idx,end:v[En.id].idx,distance:ci}}),L=Yk(ii,w,e,L);var xi=[];Object.keys(ii).forEach(function(En){if(J[En]){xi.push(J[En]);return}var ci=L[En];J[En]=Xk(ci,W,o,s),xi.push(J[En])}),xi=xi.sort(function(En,ci){return ci-En});for(var Ki=!1,_n=0;_n<$n;_n++)if(xi[_n]=0;Ue--)ee(Ue)});var Y=[];lt==null||lt.forEach(function(V){for(var Te=v[V.id].idx,ne=sdt(e.nodes,f[Te],Te,o,a),pt=ne.neighbors,Et=pt.length,St=!1,Wt=Et-1;Wt>=0;Wt--){if(pt.length+1Ye){pt.splice(Wt,1);continue}if(n){var Ve="".concat(ee.id,"-").concat(V.id),$n=h[Ve];ge=$t[Ue].length-1;var ma=$t[Ue][ge];if($n>ma){pt.splice(Wt,1);continue}}var _n=J[Ht]?J[Ht]:dee(e,V,ee,v,ae,w,W,o,s,J,L),ii="".concat(et.id,"-").concat(Ue),xi=Tt[ii][Tt[ii].length-1];if(_n=0;ae--){var ma=$n(ae);if(ma==="break")break}if(Ve)return Y.splice(Te,1),"continue";ne.edges=Wt;var _n=(0,adt.default)(ne,ne.nodes[0].id,!1).length;if(Object.keys(_n).reverse().forEach(function(er){if(!(er===ne.nodes[0].id||Ve)){if(_n[er]===1/0){var ai=St[er].node[o];if(Et[ai]--,Et[ai]K[ji][K[ji].length-1]){var ai=St[er].node[o];if(Et[ai]--,Et[ai]=0;ci--){var Nn=ne.nodes[ci],Ma=St[Nn.id].degree,Li=St[Nn.id].inDegree,Do=St[Nn.id].outDegree,Pu=Nn[o],Po=cdt(_t,Pu,x,b),ms=Po.minPatternNodeLabelDegree,$o=Po.minPatternNodeLabelInDegree,vl=Po.minPatternNodeLabelOutDegree,Ns=n?Ma=0;mo--){var Oi=Wt[mo];if(!St[Oi.source]||!St[Oi.target]){Wt.splice(mo,1);var gs=Oi[s];if(ee[gs]--,St[Oi.source]&&(St[Oi.source].degree--,St[Oi.source].outDegree--),St[Oi.target]&&(St[Oi.target].degree--,St[Oi.target].inDegree--),S[gs]&&ee[gs]=0;Zt--){var Ae=Xt(Zt);if(Ae==="break")break}for(var We=Y.length,$e=function(Te){var ne=Y[Te],pt={};ne.edges.forEach(function(Wt){var ee="".concat(Wt.source,"-").concat(Wt.target,"-").concat(Wt.label);pt[ee]?pt[ee]++:pt[ee]=1});for(var Et=function(ee){var Ue=Y[ee],Ht={};Ue.edges.forEach(function(ge){var Ye="".concat(ge.source,"-").concat(ge.target,"-").concat(ge.label);Ht[Ye]?Ht[Ye]++:Ht[Ye]=1});var ae=!0;Object.keys(Ht).length!==Object.keys(pt).length?ae=!1:Object.keys(pt).forEach(function(ge){Ht[ge]!==pt[ge]&&(ae=!1)}),ae&&Y.splice(ee,1)},St=We-1;St>Te;St--)Et(St);We=Y.length},Zt=0;Zt<=We-1;Zt++)$e(Zt);return Y}}},vee=pee;qk.default=vee});var vdt=ft(fo=>{"use strict";function Kk(r){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Kk=function(t){return typeof t}:Kk=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Kk(r)}Object.defineProperty(fo,"__esModule",{value:!0});Object.defineProperty(fo,"GADDI",{enumerable:!0,get:function(){return Mee.default}});Object.defineProperty(fo,"breadthFirstSearch",{enumerable:!0,get:function(){return gee.default}});Object.defineProperty(fo,"connectedComponent",{enumerable:!0,get:function(){return yee.default}});Object.defineProperty(fo,"depthFirstSearch",{enumerable:!0,get:function(){return bee.default}});Object.defineProperty(fo,"detectCycle",{enumerable:!0,get:function(){return xee.default}});Object.defineProperty(fo,"dijkstra",{enumerable:!0,get:function(){return _ee.default}});Object.defineProperty(fo,"findAllPath",{enumerable:!0,get:function(){return ddt.findAllPath}});Object.defineProperty(fo,"findShortestPath",{enumerable:!0,get:function(){return ddt.findShortestPath}});Object.defineProperty(fo,"floydWarshall",{enumerable:!0,get:function(){return See.default}});Object.defineProperty(fo,"getAdjMatrix",{enumerable:!0,get:function(){return mee.default}});Object.defineProperty(fo,"getDegree",{enumerable:!0,get:function(){return s8.default}});Object.defineProperty(fo,"getInDegree",{enumerable:!0,get:function(){return s8.getInDegree}});Object.defineProperty(fo,"getNeighbors",{enumerable:!0,get:function(){return Tee.getNeighbors}});Object.defineProperty(fo,"getOutDegree",{enumerable:!0,get:function(){return s8.getOutDegree}});Object.defineProperty(fo,"labelPropagation",{enumerable:!0,get:function(){return Cee.default}});Object.defineProperty(fo,"louvain",{enumerable:!0,get:function(){return wee.default}});Object.defineProperty(fo,"minimumSpanningTree",{enumerable:!0,get:function(){return Eee.default}});Object.defineProperty(fo,"pageRank",{enumerable:!0,get:function(){return Aee.default}});var mee=vf(JA()),gee=vf(dht()),yee=vf(qV()),s8=Iee(KV()),xee=vf(Cht()),bee=vf($V()),_ee=vf(Pk()),ddt=Mht(),See=vf(QV()),Cee=vf(Tht()),wee=vf(jht()),Eee=vf(Xht()),Aee=vf(qht()),Mee=vf(hdt()),Tee=pf();function pdt(r){if(typeof WeakMap!="function")return null;var e=new WeakMap,t=new WeakMap;return(pdt=function(i){return i?t:e})(r)}function Iee(r,e){if(!e&&r&&r.__esModule)return r;if(r===null||Kk(r)!=="object"&&typeof r!="function")return{default:r};var t=pdt(e);if(t&&t.has(r))return t.get(r);var n={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in r)if(a!=="default"&&Object.prototype.hasOwnProperty.call(r,a)){var o=i?Object.getOwnPropertyDescriptor(r,a):null;o&&(o.get||o.set)?Object.defineProperty(n,a,o):n[a]=r[a]}return n.default=r,t&&t.set(r,n),n}function vf(r){return r&&r.__esModule?r:{default:r}}});var ydt=ft($k=>{"use strict";function Zk(r){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Zk=function(t){return typeof t}:Zk=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zk(r)}Object.defineProperty($k,"__esModule",{value:!0});$k.default=void 0;var l8=Lee(vdt()),mdt=Mk();function gdt(r){if(typeof WeakMap!="function")return null;var e=new WeakMap,t=new WeakMap;return(gdt=function(i){return i?t:e})(r)}function Lee(r,e){if(!e&&r&&r.__esModule)return r;if(r===null||Zk(r)!=="object"&&typeof r!="function")return{default:r};var t=gdt(e);if(t&&t.has(r))return t.get(r);var n={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in r)if(a!=="default"&&Object.prototype.hasOwnProperty.call(r,a)){var o=i?Object.getOwnPropertyDescriptor(r,a):null;o&&(o.get||o.set)?Object.defineProperty(n,a,o):n[a]=r[a]}return n.default=r,t&&t.set(r,n),n}var u8=typeof self!="undefined"?self:{};u8.onmessage=function(r){var e=r.data,t=e._algorithmType,n=e.data;if(!!t){if(typeof l8[t]=="function"){var i=l8[t].apply(l8,n);u8.postMessage({_algorithmType:mdt.MESSAGE.SUCCESS,data:i});return}u8.postMessage({_algorithmType:mdt.MESSAGE.FAILURE})}};var Oee=null;$k.default=Oee});var xdt=ft(Qk=>{"use strict";Object.defineProperty(Qk,"__esModule",{value:!0});Qk.default=void 0;var Dee=Mk(),Pee=kee(ydt());function kee(r){return r&&r.__esModule?r:{default:r}}var Ree=function(e){return function(){for(var t=[],n=0;n{"use strict";Object.defineProperty(Pn,"__esModule",{value:!0});Pn.pageRankAsync=Pn.minimumSpanningTreeAsync=Pn.louvainAsync=Pn.labelPropagationAsync=Pn.getOutDegreeAsync=Pn.getNeighborsAsync=Pn.getInDegreeAsync=Pn.getDegreeAsync=Pn.getAdjMatrixAsync=Pn.floydWarshallAsync=Pn.findShortestPathAsync=Pn.findAllPathAsync=Pn.dijkstraAsync=Pn.detectCycleAsync=Pn.detectAllUndirectedCycleAsync=Pn.detectAllDirectedCycleAsync=Pn.detectAllCyclesAsync=Pn.connectedComponentAsync=Pn.GADDIAsync=void 0;var wo=Fee(xdt()),Eo=Mk();function Fee(r){return r&&r.__esModule?r:{default:r}}var Bee=function(e,t){return(0,wo.default)(Eo.ALGORITHM.getAdjMatrix).apply(void 0,[e,t])};Pn.getAdjMatrixAsync=Bee;var Gee=function(e,t){return(0,wo.default)(Eo.ALGORITHM.connectedComponent).apply(void 0,[e,t])};Pn.connectedComponentAsync=Gee;var zee=function(e){return(0,wo.default)(Eo.ALGORITHM.getDegree)(e)};Pn.getDegreeAsync=zee;var Uee=function(e,t){return(0,wo.default)(Eo.ALGORITHM.getInDegree)(e,t)};Pn.getInDegreeAsync=Uee;var jee=function(e,t){return(0,wo.default)(Eo.ALGORITHM.getOutDegree)(e,t)};Pn.getOutDegreeAsync=jee;var Wee=function(e){return(0,wo.default)(Eo.ALGORITHM.detectCycle)(e)};Pn.detectCycleAsync=Wee;var Vee=function(e){return(0,wo.default)(Eo.ALGORITHM.detectAllCycles)(e)};Pn.detectAllCyclesAsync=Vee;var Hee=function(e){return(0,wo.default)(Eo.ALGORITHM.detectAllDirectedCycle)(e)};Pn.detectAllDirectedCycleAsync=Hee;var Yee=function(e){return(0,wo.default)(Eo.ALGORITHM.detectAllUndirectedCycle)(e)};Pn.detectAllUndirectedCycleAsync=Yee;var Xee=function(e,t,n,i){return(0,wo.default)(Eo.ALGORITHM.dijkstra).apply(void 0,[e,t,n,i])};Pn.dijkstraAsync=Xee;var qee=function(e,t,n,i){return(0,wo.default)(Eo.ALGORITHM.findAllPath).apply(void 0,[e,t,n,i])};Pn.findAllPathAsync=qee;var Kee=function(e,t,n,i,a){return(0,wo.default)(Eo.ALGORITHM.findShortestPath).apply(void 0,[e,t,n,i,a])};Pn.findShortestPathAsync=Kee;var Zee=function(e,t){return(0,wo.default)(Eo.ALGORITHM.floydWarshall).apply(void 0,[e,t])};Pn.floydWarshallAsync=Zee;var $ee=function(e,t,n,i){return i===void 0&&(i=1e3),(0,wo.default)(Eo.ALGORITHM.labelPropagation)(e,t,n,i)};Pn.labelPropagationAsync=$ee;var Qee=function(e,t,n,i){return(0,wo.default)(Eo.ALGORITHM.louvain)(e,t,n,i)};Pn.louvainAsync=Qee;var Jee=function(e,t,n){return(0,wo.default)(Eo.ALGORITHM.minimumSpanningTree).apply(void 0,[e,t,n])};Pn.minimumSpanningTreeAsync=Jee;var tre=function(e,t,n){return(0,wo.default)(Eo.ALGORITHM.pageRank).apply(void 0,[e,t,n])};Pn.pageRankAsync=tre;var ere=function(e,t,n){return(0,wo.default)(Eo.ALGORITHM.getNeighbors).apply(void 0,[e,t,n])};Pn.getNeighborsAsync=ere;var rre=function(e,t,n,i,a,o,s){return n===void 0&&(n=!1),o===void 0&&(o="cluster"),s===void 0&&(s="cluster"),(0,wo.default)(Eo.ALGORITHM.GADDI).apply(void 0,[e,t,n,i,a,o,s])};Pn.GADDIAsync=rre});var Sdt=ft(ca=>{"use strict";Object.defineProperty(ca,"__esModule",{value:!0});Object.defineProperty(ca,"GADDIAsync",{enumerable:!0,get:function(){return kn.GADDIAsync}});Object.defineProperty(ca,"connectedComponentAsync",{enumerable:!0,get:function(){return kn.connectedComponentAsync}});ca.default=void 0;Object.defineProperty(ca,"detectAllCyclesAsync",{enumerable:!0,get:function(){return kn.detectAllCyclesAsync}});Object.defineProperty(ca,"detectAllDirectedCycleAsync",{enumerable:!0,get:function(){return kn.detectAllDirectedCycleAsync}});Object.defineProperty(ca,"detectAllUndirectedCycleAsync",{enumerable:!0,get:function(){return kn.detectAllUndirectedCycleAsync}});Object.defineProperty(ca,"detectCycleAsync",{enumerable:!0,get:function(){return kn.detectCycleAsync}});ca.detectDirectedCycleAsync=void 0;Object.defineProperty(ca,"dijkstraAsync",{enumerable:!0,get:function(){return kn.dijkstraAsync}});Object.defineProperty(ca,"findAllPathAsync",{enumerable:!0,get:function(){return kn.findAllPathAsync}});Object.defineProperty(ca,"findShortestPathAsync",{enumerable:!0,get:function(){return kn.findShortestPathAsync}});Object.defineProperty(ca,"floydWarshallAsync",{enumerable:!0,get:function(){return kn.floydWarshallAsync}});Object.defineProperty(ca,"getAdjMatrixAsync",{enumerable:!0,get:function(){return kn.getAdjMatrixAsync}});Object.defineProperty(ca,"getDegreeAsync",{enumerable:!0,get:function(){return kn.getDegreeAsync}});Object.defineProperty(ca,"getInDegreeAsync",{enumerable:!0,get:function(){return kn.getInDegreeAsync}});Object.defineProperty(ca,"getNeighborsAsync",{enumerable:!0,get:function(){return kn.getNeighborsAsync}});Object.defineProperty(ca,"getOutDegreeAsync",{enumerable:!0,get:function(){return kn.getOutDegreeAsync}});Object.defineProperty(ca,"labelPropagationAsync",{enumerable:!0,get:function(){return kn.labelPropagationAsync}});Object.defineProperty(ca,"louvainAsync",{enumerable:!0,get:function(){return kn.louvainAsync}});Object.defineProperty(ca,"minimumSpanningTreeAsync",{enumerable:!0,get:function(){return kn.minimumSpanningTreeAsync}});Object.defineProperty(ca,"pageRankAsync",{enumerable:!0,get:function(){return kn.pageRankAsync}});var kn=bdt(),_dt=kn.detectCycleAsync;ca.detectDirectedCycleAsync=_dt;var nre={getAdjMatrixAsync:kn.getAdjMatrixAsync,connectedComponentAsync:kn.connectedComponentAsync,getDegreeAsync:kn.getDegreeAsync,getInDegreeAsync:kn.getInDegreeAsync,getOutDegreeAsync:kn.getOutDegreeAsync,detectCycleAsync:kn.detectCycleAsync,detectDirectedCycleAsync:_dt,detectAllCyclesAsync:kn.detectAllCyclesAsync,detectAllDirectedCycleAsync:kn.detectAllDirectedCycleAsync,detectAllUndirectedCycleAsync:kn.detectAllUndirectedCycleAsync,dijkstraAsync:kn.dijkstraAsync,findAllPathAsync:kn.findAllPathAsync,findShortestPathAsync:kn.findShortestPathAsync,floydWarshallAsync:kn.floydWarshallAsync,labelPropagationAsync:kn.labelPropagationAsync,louvainAsync:kn.louvainAsync,minimumSpanningTreeAsync:kn.minimumSpanningTreeAsync,pageRankAsync:kn.pageRankAsync,getNeighborsAsync:kn.getNeighborsAsync,GADDIAsync:kn.GADDIAsync};ca.default=nre});var f8=ft((q_r,Cdt)=>{"use strict";Cdt.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var Edt=ft((K_r,wdt)=>{wdt.exports=function(e){return!e||typeof e=="string"?!1:e instanceof Array||Array.isArray(e)||e.length>=0&&(e.splice instanceof Function||Object.getOwnPropertyDescriptor(e,e.length-1)&&e.constructor.name!=="String")}});var Tdt=ft((Z_r,Mdt)=>{"use strict";var ire=Edt(),are=Array.prototype.concat,ore=Array.prototype.slice,Adt=Mdt.exports=function(e){for(var t=[],n=0,i=e.length;n{var iM=f8(),aM=Tdt(),Idt=Object.hasOwnProperty,Ldt={};for(Jk in iM)Idt.call(iM,Jk)&&(Ldt[iM[Jk]]=Jk);var Jk,Eu=Odt.exports={to:{},get:{}};Eu.get=function(r){var e=r.substring(0,3).toLowerCase(),t,n;switch(e){case"hsl":t=Eu.get.hsl(r),n="hsl";break;case"hwb":t=Eu.get.hwb(r),n="hwb";break;default:t=Eu.get.rgb(r),n="rgb";break}return t?{model:n,value:t}:null};Eu.get.rgb=function(r){if(!r)return null;var e=/^#([a-f0-9]{3,4})$/i,t=/^#([a-f0-9]{6})([a-f0-9]{2})?$/i,n=/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/,i=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/,a=/^(\w+)$/,o=[0,0,0,1],s,l,u;if(s=r.match(t)){for(u=s[2],s=s[1],l=0;l<3;l++){var f=l*2;o[l]=parseInt(s.slice(f,f+2),16)}u&&(o[3]=parseInt(u,16)/255)}else if(s=r.match(e)){for(s=s[1],u=s[3],l=0;l<3;l++)o[l]=parseInt(s[l]+s[l],16);u&&(o[3]=parseInt(u+u,16)/255)}else if(s=r.match(n)){for(l=0;l<3;l++)o[l]=parseInt(s[l+1],0);s[4]&&(s[5]?o[3]=parseFloat(s[4])*.01:o[3]=parseFloat(s[4]))}else if(s=r.match(i)){for(l=0;l<3;l++)o[l]=Math.round(parseFloat(s[l+1])*2.55);s[4]&&(s[5]?o[3]=parseFloat(s[4])*.01:o[3]=parseFloat(s[4]))}else return(s=r.match(a))?s[1]==="transparent"?[0,0,0,0]:Idt.call(iM,s[1])?(o=iM[s[1]],o[3]=1,o):null:null;for(l=0;l<3;l++)o[l]=pg(o[l],0,255);return o[3]=pg(o[3],0,1),o};Eu.get.hsl=function(r){if(!r)return null;var e=/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/,t=r.match(e);if(t){var n=parseFloat(t[4]),i=(parseFloat(t[1])%360+360)%360,a=pg(parseFloat(t[2]),0,100),o=pg(parseFloat(t[3]),0,100),s=pg(isNaN(n)?1:n,0,1);return[i,a,o,s]}return null};Eu.get.hwb=function(r){if(!r)return null;var e=/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/,t=r.match(e);if(t){var n=parseFloat(t[4]),i=(parseFloat(t[1])%360+360)%360,a=pg(parseFloat(t[2]),0,100),o=pg(parseFloat(t[3]),0,100),s=pg(isNaN(n)?1:n,0,1);return[i,a,o,s]}return null};Eu.to.hex=function(){var r=aM(arguments);return"#"+tR(r[0])+tR(r[1])+tR(r[2])+(r[3]<1?tR(Math.round(r[3]*255)):"")};Eu.to.rgb=function(){var r=aM(arguments);return r.length<4||r[3]===1?"rgb("+Math.round(r[0])+", "+Math.round(r[1])+", "+Math.round(r[2])+")":"rgba("+Math.round(r[0])+", "+Math.round(r[1])+", "+Math.round(r[2])+", "+r[3]+")"};Eu.to.rgb.percent=function(){var r=aM(arguments),e=Math.round(r[0]/255*100),t=Math.round(r[1]/255*100),n=Math.round(r[2]/255*100);return r.length<4||r[3]===1?"rgb("+e+"%, "+t+"%, "+n+"%)":"rgba("+e+"%, "+t+"%, "+n+"%, "+r[3]+")"};Eu.to.hsl=function(){var r=aM(arguments);return r.length<4||r[3]===1?"hsl("+r[0]+", "+r[1]+"%, "+r[2]+"%)":"hsla("+r[0]+", "+r[1]+"%, "+r[2]+"%, "+r[3]+")"};Eu.to.hwb=function(){var r=aM(arguments),e="";return r.length>=4&&r[3]!==1&&(e=", "+r[3]),"hwb("+r[0]+", "+r[1]+"%, "+r[2]+"%"+e+")"};Eu.to.keyword=function(r){return Ldt[r.slice(0,3)]};function pg(r,e,t){return Math.min(Math.max(e,r),t)}function tR(r){var e=Math.round(r).toString(16).toUpperCase();return e.length<2?"0"+e:e}});var c8=ft((Q_r,Ndt)=>{var R0=f8(),Pdt={};for(eR in R0)R0.hasOwnProperty(eR)&&(Pdt[R0[eR]]=eR);var eR,Ar=Ndt.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(tl in Ar)if(Ar.hasOwnProperty(tl)){if(!("channels"in Ar[tl]))throw new Error("missing channels property: "+tl);if(!("labels"in Ar[tl]))throw new Error("missing channel labels property: "+tl);if(Ar[tl].labels.length!==Ar[tl].channels)throw new Error("channel and label counts mismatch: "+tl);kdt=Ar[tl].channels,Rdt=Ar[tl].labels,delete Ar[tl].channels,delete Ar[tl].labels,Object.defineProperty(Ar[tl],"channels",{value:kdt}),Object.defineProperty(Ar[tl],"labels",{value:Rdt})}var kdt,Rdt,tl;Ar.rgb.hsl=function(r){var e=r[0]/255,t=r[1]/255,n=r[2]/255,i=Math.min(e,t,n),a=Math.max(e,t,n),o=a-i,s,l,u;return a===i?s=0:e===a?s=(t-n)/o:t===a?s=2+(n-e)/o:n===a&&(s=4+(e-t)/o),s=Math.min(s*60,360),s<0&&(s+=360),u=(i+a)/2,a===i?l=0:u<=.5?l=o/(a+i):l=o/(2-a-i),[s,l*100,u*100]};Ar.rgb.hsv=function(r){var e,t,n,i,a,o=r[0]/255,s=r[1]/255,l=r[2]/255,u=Math.max(o,s,l),f=u-Math.min(o,s,l),c=function(h){return(u-h)/6/f+1/2};return f===0?i=a=0:(a=f/u,e=c(o),t=c(s),n=c(l),o===u?i=n-t:s===u?i=1/3+e-n:l===u&&(i=2/3+t-e),i<0?i+=1:i>1&&(i-=1)),[i*360,a*100,u*100]};Ar.rgb.hwb=function(r){var e=r[0],t=r[1],n=r[2],i=Ar.rgb.hsl(r)[0],a=1/255*Math.min(e,Math.min(t,n));return n=1-1/255*Math.max(e,Math.max(t,n)),[i,a*100,n*100]};Ar.rgb.cmyk=function(r){var e=r[0]/255,t=r[1]/255,n=r[2]/255,i,a,o,s;return s=Math.min(1-e,1-t,1-n),i=(1-e-s)/(1-s)||0,a=(1-t-s)/(1-s)||0,o=(1-n-s)/(1-s)||0,[i*100,a*100,o*100,s*100]};function sre(r,e){return Math.pow(r[0]-e[0],2)+Math.pow(r[1]-e[1],2)+Math.pow(r[2]-e[2],2)}Ar.rgb.keyword=function(r){var e=Pdt[r];if(e)return e;var t=1/0,n;for(var i in R0)if(R0.hasOwnProperty(i)){var a=R0[i],o=sre(r,a);o.04045?Math.pow((e+.055)/1.055,2.4):e/12.92,t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92,n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92;var i=e*.4124+t*.3576+n*.1805,a=e*.2126+t*.7152+n*.0722,o=e*.0193+t*.1192+n*.9505;return[i*100,a*100,o*100]};Ar.rgb.lab=function(r){var e=Ar.rgb.xyz(r),t=e[0],n=e[1],i=e[2],a,o,s;return t/=95.047,n/=100,i/=108.883,t=t>.008856?Math.pow(t,1/3):7.787*t+16/116,n=n>.008856?Math.pow(n,1/3):7.787*n+16/116,i=i>.008856?Math.pow(i,1/3):7.787*i+16/116,a=116*n-16,o=500*(t-n),s=200*(n-i),[a,o,s]};Ar.hsl.rgb=function(r){var e=r[0]/360,t=r[1]/100,n=r[2]/100,i,a,o,s,l;if(t===0)return l=n*255,[l,l,l];n<.5?a=n*(1+t):a=n+t-n*t,i=2*n-a,s=[0,0,0];for(var u=0;u<3;u++)o=e+1/3*-(u-1),o<0&&o++,o>1&&o--,6*o<1?l=i+(a-i)*6*o:2*o<1?l=a:3*o<2?l=i+(a-i)*(2/3-o)*6:l=i,s[u]=l*255;return s};Ar.hsl.hsv=function(r){var e=r[0],t=r[1]/100,n=r[2]/100,i=t,a=Math.max(n,.01),o,s;return n*=2,t*=n<=1?n:2-n,i*=a<=1?a:2-a,s=(n+t)/2,o=n===0?2*i/(a+i):2*t/(n+t),[e,o*100,s*100]};Ar.hsv.rgb=function(r){var e=r[0]/60,t=r[1]/100,n=r[2]/100,i=Math.floor(e)%6,a=e-Math.floor(e),o=255*n*(1-t),s=255*n*(1-t*a),l=255*n*(1-t*(1-a));switch(n*=255,i){case 0:return[n,l,o];case 1:return[s,n,o];case 2:return[o,n,l];case 3:return[o,s,n];case 4:return[l,o,n];case 5:return[n,o,s]}};Ar.hsv.hsl=function(r){var e=r[0],t=r[1]/100,n=r[2]/100,i=Math.max(n,.01),a,o,s;return s=(2-t)*n,a=(2-t)*i,o=t*i,o/=a<=1?a:2-a,o=o||0,s/=2,[e,o*100,s*100]};Ar.hwb.rgb=function(r){var e=r[0]/360,t=r[1]/100,n=r[2]/100,i=t+n,a,o,s,l;i>1&&(t/=i,n/=i),a=Math.floor(6*e),o=1-n,s=6*e-a,(a&1)!=0&&(s=1-s),l=t+s*(o-t);var u,f,c;switch(a){default:case 6:case 0:u=o,f=l,c=t;break;case 1:u=l,f=o,c=t;break;case 2:u=t,f=o,c=l;break;case 3:u=t,f=l,c=o;break;case 4:u=l,f=t,c=o;break;case 5:u=o,f=t,c=l;break}return[u*255,f*255,c*255]};Ar.cmyk.rgb=function(r){var e=r[0]/100,t=r[1]/100,n=r[2]/100,i=r[3]/100,a,o,s;return a=1-Math.min(1,e*(1-i)+i),o=1-Math.min(1,t*(1-i)+i),s=1-Math.min(1,n*(1-i)+i),[a*255,o*255,s*255]};Ar.xyz.rgb=function(r){var e=r[0]/100,t=r[1]/100,n=r[2]/100,i,a,o;return i=e*3.2406+t*-1.5372+n*-.4986,a=e*-.9689+t*1.8758+n*.0415,o=e*.0557+t*-.204+n*1.057,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*12.92,a=a>.0031308?1.055*Math.pow(a,1/2.4)-.055:a*12.92,o=o>.0031308?1.055*Math.pow(o,1/2.4)-.055:o*12.92,i=Math.min(Math.max(0,i),1),a=Math.min(Math.max(0,a),1),o=Math.min(Math.max(0,o),1),[i*255,a*255,o*255]};Ar.xyz.lab=function(r){var e=r[0],t=r[1],n=r[2],i,a,o;return e/=95.047,t/=100,n/=108.883,e=e>.008856?Math.pow(e,1/3):7.787*e+16/116,t=t>.008856?Math.pow(t,1/3):7.787*t+16/116,n=n>.008856?Math.pow(n,1/3):7.787*n+16/116,i=116*t-16,a=500*(e-t),o=200*(t-n),[i,a,o]};Ar.lab.xyz=function(r){var e=r[0],t=r[1],n=r[2],i,a,o;a=(e+16)/116,i=t/500+a,o=a-n/200;var s=Math.pow(a,3),l=Math.pow(i,3),u=Math.pow(o,3);return a=s>.008856?s:(a-16/116)/7.787,i=l>.008856?l:(i-16/116)/7.787,o=u>.008856?u:(o-16/116)/7.787,i*=95.047,a*=100,o*=108.883,[i,a,o]};Ar.lab.lch=function(r){var e=r[0],t=r[1],n=r[2],i,a,o;return i=Math.atan2(n,t),a=i*360/2/Math.PI,a<0&&(a+=360),o=Math.sqrt(t*t+n*n),[e,o,a]};Ar.lch.lab=function(r){var e=r[0],t=r[1],n=r[2],i,a,o;return o=n/360*2*Math.PI,i=t*Math.cos(o),a=t*Math.sin(o),[e,i,a]};Ar.rgb.ansi16=function(r){var e=r[0],t=r[1],n=r[2],i=1 in arguments?arguments[1]:Ar.rgb.hsv(r)[2];if(i=Math.round(i/50),i===0)return 30;var a=30+(Math.round(n/255)<<2|Math.round(t/255)<<1|Math.round(e/255));return i===2&&(a+=60),a};Ar.hsv.ansi16=function(r){return Ar.rgb.ansi16(Ar.hsv.rgb(r),r[2])};Ar.rgb.ansi256=function(r){var e=r[0],t=r[1],n=r[2];if(e===t&&t===n)return e<8?16:e>248?231:Math.round((e-8)/247*24)+232;var i=16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(n/255*5);return i};Ar.ansi16.rgb=function(r){var e=r%10;if(e===0||e===7)return r>50&&(e+=3.5),e=e/10.5*255,[e,e,e];var t=(~~(r>50)+1)*.5,n=(e&1)*t*255,i=(e>>1&1)*t*255,a=(e>>2&1)*t*255;return[n,i,a]};Ar.ansi256.rgb=function(r){if(r>=232){var e=(r-232)*10+8;return[e,e,e]}r-=16;var t,n=Math.floor(r/36)/5*255,i=Math.floor((t=r%36)/6)/5*255,a=t%6/5*255;return[n,i,a]};Ar.rgb.hex=function(r){var e=((Math.round(r[0])&255)<<16)+((Math.round(r[1])&255)<<8)+(Math.round(r[2])&255),t=e.toString(16).toUpperCase();return"000000".substring(t.length)+t};Ar.hex.rgb=function(r){var e=r.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var t=e[0];e[0].length===3&&(t=t.split("").map(function(s){return s+s}).join(""));var n=parseInt(t,16),i=n>>16&255,a=n>>8&255,o=n&255;return[i,a,o]};Ar.rgb.hcg=function(r){var e=r[0]/255,t=r[1]/255,n=r[2]/255,i=Math.max(Math.max(e,t),n),a=Math.min(Math.min(e,t),n),o=i-a,s,l;return o<1?s=a/(1-o):s=0,o<=0?l=0:i===e?l=(t-n)/o%6:i===t?l=2+(n-e)/o:l=4+(e-t)/o+4,l/=6,l%=1,[l*360,o*100,s*100]};Ar.hsl.hcg=function(r){var e=r[1]/100,t=r[2]/100,n=1,i=0;return t<.5?n=2*e*t:n=2*e*(1-t),n<1&&(i=(t-.5*n)/(1-n)),[r[0],n*100,i*100]};Ar.hsv.hcg=function(r){var e=r[1]/100,t=r[2]/100,n=e*t,i=0;return n<1&&(i=(t-n)/(1-n)),[r[0],n*100,i*100]};Ar.hcg.rgb=function(r){var e=r[0]/360,t=r[1]/100,n=r[2]/100;if(t===0)return[n*255,n*255,n*255];var i=[0,0,0],a=e%1*6,o=a%1,s=1-o,l=0;switch(Math.floor(a)){case 0:i[0]=1,i[1]=o,i[2]=0;break;case 1:i[0]=s,i[1]=1,i[2]=0;break;case 2:i[0]=0,i[1]=1,i[2]=o;break;case 3:i[0]=0,i[1]=s,i[2]=1;break;case 4:i[0]=o,i[1]=0,i[2]=1;break;default:i[0]=1,i[1]=0,i[2]=s}return l=(1-t)*n,[(t*i[0]+l)*255,(t*i[1]+l)*255,(t*i[2]+l)*255]};Ar.hcg.hsv=function(r){var e=r[1]/100,t=r[2]/100,n=e+t*(1-e),i=0;return n>0&&(i=e/n),[r[0],i*100,n*100]};Ar.hcg.hsl=function(r){var e=r[1]/100,t=r[2]/100,n=t*(1-e)+.5*e,i=0;return n>0&&n<.5?i=e/(2*n):n>=.5&&n<1&&(i=e/(2*(1-n))),[r[0],i*100,n*100]};Ar.hcg.hwb=function(r){var e=r[1]/100,t=r[2]/100,n=e+t*(1-e);return[r[0],(n-e)*100,(1-n)*100]};Ar.hwb.hcg=function(r){var e=r[1]/100,t=r[2]/100,n=1-t,i=n-e,a=0;return i<1&&(a=(n-i)/(1-i)),[r[0],i*100,a*100]};Ar.apple.rgb=function(r){return[r[0]/65535*255,r[1]/65535*255,r[2]/65535*255]};Ar.rgb.apple=function(r){return[r[0]/255*65535,r[1]/255*65535,r[2]/255*65535]};Ar.gray.rgb=function(r){return[r[0]/100*255,r[0]/100*255,r[0]/100*255]};Ar.gray.hsl=Ar.gray.hsv=function(r){return[0,0,r[0]]};Ar.gray.hwb=function(r){return[0,100,r[0]]};Ar.gray.cmyk=function(r){return[0,0,0,r[0]]};Ar.gray.lab=function(r){return[r[0],0,0]};Ar.gray.hex=function(r){var e=Math.round(r[0]/100*255)&255,t=(e<<16)+(e<<8)+e,n=t.toString(16).toUpperCase();return"000000".substring(n.length)+n};Ar.rgb.gray=function(r){var e=(r[0]+r[1]+r[2])/3;return[e/255*100]}});var Bdt=ft((J_r,Fdt)=>{var rR=c8();function lre(){for(var r={},e=Object.keys(rR),t=e.length,n=0;n{var h8=c8(),hre=Bdt(),N_={},dre=Object.keys(h8);function pre(r){var e=function(t){return t==null?t:(arguments.length>1&&(t=Array.prototype.slice.call(arguments)),r(t))};return"conversion"in r&&(e.conversion=r.conversion),e}function vre(r){var e=function(t){if(t==null)return t;arguments.length>1&&(t=Array.prototype.slice.call(arguments));var n=r(t);if(typeof n=="object")for(var i=n.length,a=0;a{"use strict";var oM=Ddt(),Au=zdt(),d8=[].slice,Udt=["keyword","gray","hex"],p8={};Object.keys(Au).forEach(function(r){p8[d8.call(Au[r].labels).sort().join("")]=r});var nR={};function us(r,e){if(!(this instanceof us))return new us(r,e);if(e&&e in Udt&&(e=null),e&&!(e in Au))throw new Error("Unknown model: "+e);var t,n;if(r==null)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(r instanceof us)this.model=r.model,this.color=r.color.slice(),this.valpha=r.valpha;else if(typeof r=="string"){var i=oM.get(r);if(i===null)throw new Error("Unable to parse color from string: "+r);this.model=i.model,n=Au[this.model].channels,this.color=i.value.slice(0,n),this.valpha=typeof i.value[n]=="number"?i.value[n]:1}else if(r.length){this.model=e||"rgb",n=Au[this.model].channels;var a=d8.call(r,0,n);this.color=v8(a,n),this.valpha=typeof r[n]=="number"?r[n]:1}else if(typeof r=="number")r&=16777215,this.model="rgb",this.color=[r>>16&255,r>>8&255,r&255],this.valpha=1;else{this.valpha=1;var o=Object.keys(r);"alpha"in r&&(o.splice(o.indexOf("alpha"),1),this.valpha=typeof r.alpha=="number"?r.alpha:0);var s=o.sort().join("");if(!(s in p8))throw new Error("Unable to parse color from object: "+JSON.stringify(r));this.model=p8[s];var l=Au[this.model].labels,u=[];for(t=0;tt?(e+.05)/(t+.05):(t+.05)/(e+.05)},level:function(r){var e=this.contrast(r);return e>=7.1?"AAA":e>=4.5?"AA":""},isDark:function(){var r=this.rgb().color,e=(r[0]*299+r[1]*587+r[2]*114)/1e3;return e<128},isLight:function(){return!this.isDark()},negate:function(){for(var r=this.rgb(),e=0;e<3;e++)r.color[e]=255-r.color[e];return r},lighten:function(r){var e=this.hsl();return e.color[2]+=e.color[2]*r,e},darken:function(r){var e=this.hsl();return e.color[2]-=e.color[2]*r,e},saturate:function(r){var e=this.hsl();return e.color[1]+=e.color[1]*r,e},desaturate:function(r){var e=this.hsl();return e.color[1]-=e.color[1]*r,e},whiten:function(r){var e=this.hwb();return e.color[1]+=e.color[1]*r,e},blacken:function(r){var e=this.hwb();return e.color[2]+=e.color[2]*r,e},grayscale:function(){var r=this.rgb().color,e=r[0]*.3+r[1]*.59+r[2]*.11;return us.rgb(e,e,e)},fade:function(r){return this.alpha(this.valpha-this.valpha*r)},opaquer:function(r){return this.alpha(this.valpha+this.valpha*r)},rotate:function(r){var e=this.hsl(),t=e.color[0];return t=(t+r)%360,t=t<0?360+t:t,e.color[0]=t,e},mix:function(r,e){if(!r||!r.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof r);var t=r.rgb(),n=this.rgb(),i=e===void 0?.5:e,a=2*i-1,o=t.alpha()-n.alpha(),s=((a*o==-1?a:(a+o)/(1+a*o))+1)/2,l=1-s;return us.rgb(s*t.red()+l*n.red(),s*t.green()+l*n.green(),s*t.blue()+l*n.blue(),t.alpha()*i+n.alpha()*(1-i))}};Object.keys(Au).forEach(function(r){if(Udt.indexOf(r)===-1){var e=Au[r].channels;us.prototype[r]=function(){if(this.model===r)return new us(this);if(arguments.length)return new us(arguments,r);var t=typeof arguments[e]=="number"?e:this.valpha;return new us(yre(Au[this.model][r].raw(this.color)).concat(t),r)},us[r]=function(t){return typeof t=="number"&&(t=v8(d8.call(arguments),e)),new us(t,r)}}});function mre(r,e){return Number(r.toFixed(e))}function gre(r){return function(e){return mre(e,r)}}function ja(r,e,t){return r=Array.isArray(r)?r:[r],r.forEach(function(n){(nR[n]||(nR[n]=[]))[e]=t}),r=r[0],function(n){var i;return arguments.length?(t&&(n=t(n)),i=this[r](),i.color[e]=n,i):(i=this[r]().color[e],t&&(i=t(i)),i)}}function Ao(r){return function(e){return Math.max(0,Math.min(r,e))}}function yre(r){return Array.isArray(r)?r:[r]}function v8(r,e){for(var t=0;t{(function(r){var e=/^\s+/,t=/\s+$/,n=0,i=r.round,a=r.min,o=r.max,s=r.random;function l(Y,it){if(Y=Y||"",it=it||{},Y instanceof l)return Y;if(!(this instanceof l))return new l(Y,it);var K=u(Y);this._originalInput=Y,this._r=K.r,this._g=K.g,this._b=K.b,this._a=K.a,this._roundA=i(100*this._a)/100,this._format=it.format||K.format,this._gradientType=it.gradientType,this._r<1&&(this._r=i(this._r)),this._g<1&&(this._g=i(this._g)),this._b<1&&(this._b=i(this._b)),this._ok=K.ok,this._tc_id=n++}l.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var Y=this.toRgb();return(Y.r*299+Y.g*587+Y.b*114)/1e3},getLuminance:function(){var Y=this.toRgb(),it,K,Rt,Xt,Zt,Ae;return it=Y.r/255,K=Y.g/255,Rt=Y.b/255,it<=.03928?Xt=it/12.92:Xt=r.pow((it+.055)/1.055,2.4),K<=.03928?Zt=K/12.92:Zt=r.pow((K+.055)/1.055,2.4),Rt<=.03928?Ae=Rt/12.92:Ae=r.pow((Rt+.055)/1.055,2.4),.2126*Xt+.7152*Zt+.0722*Ae},setAlpha:function(Y){return this._a=z(Y),this._roundA=i(100*this._a)/100,this},toHsv:function(){var Y=d(this._r,this._g,this._b);return{h:Y.h*360,s:Y.s,v:Y.v,a:this._a}},toHsvString:function(){var Y=d(this._r,this._g,this._b),it=i(Y.h*360),K=i(Y.s*100),Rt=i(Y.v*100);return this._a==1?"hsv("+it+", "+K+"%, "+Rt+"%)":"hsva("+it+", "+K+"%, "+Rt+"%, "+this._roundA+")"},toHsl:function(){var Y=c(this._r,this._g,this._b);return{h:Y.h*360,s:Y.s,l:Y.l,a:this._a}},toHslString:function(){var Y=c(this._r,this._g,this._b),it=i(Y.h*360),K=i(Y.s*100),Rt=i(Y.l*100);return this._a==1?"hsl("+it+", "+K+"%, "+Rt+"%)":"hsla("+it+", "+K+"%, "+Rt+"%, "+this._roundA+")"},toHex:function(Y){return v(this._r,this._g,this._b,Y)},toHexString:function(Y){return"#"+this.toHex(Y)},toHex8:function(Y){return m(this._r,this._g,this._b,this._a,Y)},toHex8String:function(Y){return"#"+this.toHex8(Y)},toRgb:function(){return{r:i(this._r),g:i(this._g),b:i(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+i(this._r)+", "+i(this._g)+", "+i(this._b)+")":"rgba("+i(this._r)+", "+i(this._g)+", "+i(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:i(j(this._r,255)*100)+"%",g:i(j(this._g,255)*100)+"%",b:i(j(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+i(j(this._r,255)*100)+"%, "+i(j(this._g,255)*100)+"%, "+i(j(this._b,255)*100)+"%)":"rgba("+i(j(this._r,255)*100)+"%, "+i(j(this._g,255)*100)+"%, "+i(j(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:D[v(this._r,this._g,this._b,!0)]||!1},toFilter:function(Y){var it="#"+g(this._r,this._g,this._b,this._a),K=it,Rt=this._gradientType?"GradientType = 1, ":"";if(Y){var Xt=l(Y);K="#"+g(Xt._r,Xt._g,Xt._b,Xt._a)}return"progid:DXImageTransform.Microsoft.gradient("+Rt+"startColorstr="+it+",endColorstr="+K+")"},toString:function(Y){var it=!!Y;Y=Y||this._format;var K=!1,Rt=this._a<1&&this._a>=0,Xt=!it&&Rt&&(Y==="hex"||Y==="hex6"||Y==="hex3"||Y==="hex4"||Y==="hex8"||Y==="name");return Xt?Y==="name"&&this._a===0?this.toName():this.toRgbString():(Y==="rgb"&&(K=this.toRgbString()),Y==="prgb"&&(K=this.toPercentageRgbString()),(Y==="hex"||Y==="hex6")&&(K=this.toHexString()),Y==="hex3"&&(K=this.toHexString(!0)),Y==="hex4"&&(K=this.toHex8String(!0)),Y==="hex8"&&(K=this.toHex8String()),Y==="name"&&(K=this.toName()),Y==="hsl"&&(K=this.toHslString()),Y==="hsv"&&(K=this.toHsvString()),K||this.toHexString())},clone:function(){return l(this.toString())},_applyModification:function(Y,it){var K=Y.apply(null,[this].concat([].slice.call(it)));return this._r=K._r,this._g=K._g,this._b=K._b,this.setAlpha(K._a),this},lighten:function(){return this._applyModification(C,arguments)},brighten:function(){return this._applyModification(w,arguments)},darken:function(){return this._applyModification(A,arguments)},desaturate:function(){return this._applyModification(x,arguments)},saturate:function(){return this._applyModification(b,arguments)},greyscale:function(){return this._applyModification(S,arguments)},spin:function(){return this._applyModification(I,arguments)},_applyCombination:function(Y,it){return Y.apply(null,[this].concat([].slice.call(it)))},analogous:function(){return this._applyCombination(F,arguments)},complement:function(){return this._applyCombination(P,arguments)},monochromatic:function(){return this._applyCombination(k,arguments)},splitcomplement:function(){return this._applyCombination(O,arguments)},triad:function(){return this._applyCombination(L,arguments)},tetrad:function(){return this._applyCombination(M,arguments)}},l.fromRatio=function(Y,it){if(typeof Y=="object"){var K={};for(var Rt in Y)Y.hasOwnProperty(Rt)&&(Rt==="a"?K[Rt]=Y[Rt]:K[Rt]=st(Y[Rt]));Y=K}return l(Y,it)};function u(Y){var it={r:0,g:0,b:0},K=1,Rt=null,Xt=null,Zt=null,Ae=!1,We=!1;return typeof Y=="string"&&(Y=Ut(Y)),typeof Y=="object"&&(Tt(Y.r)&&Tt(Y.g)&&Tt(Y.b)?(it=f(Y.r,Y.g,Y.b),Ae=!0,We=String(Y.r).substr(-1)==="%"?"prgb":"rgb"):Tt(Y.h)&&Tt(Y.s)&&Tt(Y.v)?(Rt=st(Y.s),Xt=st(Y.v),it=p(Y.h,Rt,Xt),Ae=!0,We="hsv"):Tt(Y.h)&&Tt(Y.s)&&Tt(Y.l)&&(Rt=st(Y.s),Zt=st(Y.l),it=h(Y.h,Rt,Zt),Ae=!0,We="hsl"),Y.hasOwnProperty("a")&&(K=Y.a)),K=z(K),{ok:Ae,format:Y.format||We,r:a(255,o(it.r,0)),g:a(255,o(it.g,0)),b:a(255,o(it.b,0)),a:K}}function f(Y,it,K){return{r:j(Y,255)*255,g:j(it,255)*255,b:j(K,255)*255}}function c(Y,it,K){Y=j(Y,255),it=j(it,255),K=j(K,255);var Rt=o(Y,it,K),Xt=a(Y,it,K),Zt,Ae,We=(Rt+Xt)/2;if(Rt==Xt)Zt=Ae=0;else{var $e=Rt-Xt;switch(Ae=We>.5?$e/(2-Rt-Xt):$e/(Rt+Xt),Rt){case Y:Zt=(it-K)/$e+(it1&&(ne-=1),ne<1/6?V+(Te-V)*6*ne:ne<1/2?Te:ne<2/3?V+(Te-V)*(2/3-ne)*6:V}if(it===0)Rt=Xt=Zt=K;else{var We=K<.5?K*(1+it):K+it-K*it,$e=2*K-We;Rt=Ae($e,We,Y+1/3),Xt=Ae($e,We,Y),Zt=Ae($e,We,Y-1/3)}return{r:Rt*255,g:Xt*255,b:Zt*255}}function d(Y,it,K){Y=j(Y,255),it=j(it,255),K=j(K,255);var Rt=o(Y,it,K),Xt=a(Y,it,K),Zt,Ae,We=Rt,$e=Rt-Xt;if(Ae=Rt===0?0:$e/Rt,Rt==Xt)Zt=0;else{switch(Rt){case Y:Zt=(it-K)/$e+(it>1)+720)%360;--it;)Rt.h=(Rt.h+Xt)%360,Zt.push(l(Rt));return Zt}function k(Y,it){it=it||6;for(var K=l(Y).toHsv(),Rt=K.h,Xt=K.s,Zt=K.v,Ae=[],We=1/it;it--;)Ae.push(l({h:Rt,s:Xt,v:Zt})),Zt=(Zt+We)%1;return Ae}l.mix=function(Y,it,K){K=K===0?0:K||50;var Rt=l(Y).toRgb(),Xt=l(it).toRgb(),Zt=K/100,Ae={r:(Xt.r-Rt.r)*Zt+Rt.r,g:(Xt.g-Rt.g)*Zt+Rt.g,b:(Xt.b-Rt.b)*Zt+Rt.b,a:(Xt.a-Rt.a)*Zt+Rt.a};return l(Ae)},l.readability=function(Y,it){var K=l(Y),Rt=l(it);return(r.max(K.getLuminance(),Rt.getLuminance())+.05)/(r.min(K.getLuminance(),Rt.getLuminance())+.05)},l.isReadable=function(Y,it,K){var Rt=l.readability(Y,it),Xt,Zt;switch(Zt=!1,Xt=$t(K),Xt.level+Xt.size){case"AAsmall":case"AAAlarge":Zt=Rt>=4.5;break;case"AAlarge":Zt=Rt>=3;break;case"AAAsmall":Zt=Rt>=7;break}return Zt},l.mostReadable=function(Y,it,K){var Rt=null,Xt=0,Zt,Ae,We,$e;K=K||{},Ae=K.includeFallbackColors,We=K.level,$e=K.size;for(var V=0;VXt&&(Xt=Zt,Rt=l(it[V]));return l.isReadable(Y,Rt,{level:We,size:$e})||!Ae?Rt:(K.includeFallbackColors=!1,l.mostReadable(Y,["#fff","#000"],K))};var G=l.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},D=l.hexNames=N(G);function N(Y){var it={};for(var K in Y)Y.hasOwnProperty(K)&&(it[Y[K]]=K);return it}function z(Y){return Y=parseFloat(Y),(isNaN(Y)||Y<0||Y>1)&&(Y=1),Y}function j(Y,it){et(Y)&&(Y="100%");var K=lt(Y);return Y=a(it,o(0,parseFloat(Y))),K&&(Y=parseInt(Y*it,10)/100),r.abs(Y-it)<1e-6?1:Y%it/parseFloat(it)}function W(Y){return a(1,o(0,Y))}function J(Y){return parseInt(Y,16)}function et(Y){return typeof Y=="string"&&Y.indexOf(".")!=-1&&parseFloat(Y)===1}function lt(Y){return typeof Y=="string"&&Y.indexOf("%")!=-1}function $(Y){return Y.length==1?"0"+Y:""+Y}function st(Y){return Y<=1&&(Y=Y*100+"%"),Y}function _t(Y){return r.round(parseFloat(Y)*255).toString(16)}function dt(Y){return J(Y)/255}var vt=function(){var Y="[-\\+]?\\d+%?",it="[-\\+]?\\d*\\.\\d+%?",K="(?:"+it+")|(?:"+Y+")",Rt="[\\s|\\(]+("+K+")[,|\\s]+("+K+")[,|\\s]+("+K+")\\s*\\)?",Xt="[\\s|\\(]+("+K+")[,|\\s]+("+K+")[,|\\s]+("+K+")[,|\\s]+("+K+")\\s*\\)?";return{CSS_UNIT:new RegExp(K),rgb:new RegExp("rgb"+Rt),rgba:new RegExp("rgba"+Xt),hsl:new RegExp("hsl"+Rt),hsla:new RegExp("hsla"+Xt),hsv:new RegExp("hsv"+Rt),hsva:new RegExp("hsva"+Xt),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function Tt(Y){return!!vt.CSS_UNIT.exec(Y)}function Ut(Y){Y=Y.replace(e,"").replace(t,"").toLowerCase();var it=!1;if(G[Y])Y=G[Y],it=!0;else if(Y=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var K;return(K=vt.rgb.exec(Y))?{r:K[1],g:K[2],b:K[3]}:(K=vt.rgba.exec(Y))?{r:K[1],g:K[2],b:K[3],a:K[4]}:(K=vt.hsl.exec(Y))?{h:K[1],s:K[2],l:K[3]}:(K=vt.hsla.exec(Y))?{h:K[1],s:K[2],l:K[3],a:K[4]}:(K=vt.hsv.exec(Y))?{h:K[1],s:K[2],v:K[3]}:(K=vt.hsva.exec(Y))?{h:K[1],s:K[2],v:K[3],a:K[4]}:(K=vt.hex8.exec(Y))?{r:J(K[1]),g:J(K[2]),b:J(K[3]),a:dt(K[4]),format:it?"name":"hex8"}:(K=vt.hex6.exec(Y))?{r:J(K[1]),g:J(K[2]),b:J(K[3]),format:it?"name":"hex"}:(K=vt.hex4.exec(Y))?{r:J(K[1]+""+K[1]),g:J(K[2]+""+K[2]),b:J(K[3]+""+K[3]),a:dt(K[4]+""+K[4]),format:it?"name":"hex8"}:(K=vt.hex3.exec(Y))?{r:J(K[1]+""+K[1]),g:J(K[2]+""+K[2]),b:J(K[3]+""+K[3]),format:it?"name":"hex"}:!1}function $t(Y){var it,K;return Y=Y||{level:"AA",size:"small"},it=(Y.level||"AA").toUpperCase(),K=(Y.size||"small").toLowerCase(),it!=="AA"&&it!=="AAA"&&(it="AA"),K!=="small"&&K!=="large"&&(K="small"),{level:it,size:K}}typeof iR!="undefined"&&iR.exports?iR.exports=l:typeof define=="function"&&define.amd?define(function(){return l}):window.tinycolor=l})(Math)});var Ept=ft((V_,vM)=>{(function(){var r,e="4.17.21",t=200,n="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",i="Expected a function",a="Invalid `variable` option passed into `_.template`",o="__lodash_hash_undefined__",s=500,l="__lodash_placeholder__",u=1,f=2,c=4,h=1,d=2,p=1,v=2,m=4,g=8,x=16,b=32,S=64,C=128,w=256,A=512,I=30,P="...",L=800,M=16,O=1,F=2,k=3,G=1/0,D=9007199254740991,N=17976931348623157e292,z=0/0,j=4294967295,W=j-1,J=j>>>1,et=[["ary",C],["bind",p],["bindKey",v],["curry",g],["curryRight",x],["flip",A],["partial",b],["partialRight",S],["rearg",w]],lt="[object Arguments]",$="[object Array]",st="[object AsyncFunction]",_t="[object Boolean]",dt="[object Date]",vt="[object DOMException]",Tt="[object Error]",Ut="[object Function]",$t="[object GeneratorFunction]",Y="[object Map]",it="[object Number]",K="[object Null]",Rt="[object Object]",Xt="[object Promise]",Zt="[object Proxy]",Ae="[object RegExp]",We="[object Set]",$e="[object String]",V="[object Symbol]",Te="[object Undefined]",ne="[object WeakMap]",pt="[object WeakSet]",Et="[object ArrayBuffer]",St="[object DataView]",Wt="[object Float32Array]",ee="[object Float64Array]",Ue="[object Int8Array]",Ht="[object Int16Array]",ae="[object Int32Array]",ge="[object Uint8Array]",Ye="[object Uint8ClampedArray]",Ve="[object Uint16Array]",$n="[object Uint32Array]",ma=/\b__p \+= '';/g,_n=/\b(__p \+=) '' \+/g,ii=/(__e\(.*?\)|\b__t\)) \+\n'';/g,xi=/&(?:amp|lt|gt|quot|#39);/g,Ki=/[&<>"']/g,En=RegExp(xi.source),ci=RegExp(Ki.source),Nn=/<%-([\s\S]+?)%>/g,Ma=/<%([\s\S]+?)%>/g,Li=/<%=([\s\S]+?)%>/g,Do=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Pu=/^\w*$/,Po=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ms=/[\\^$.*+?()[\]{}|]/g,$o=RegExp(ms.source),vl=/^\s+/,Ns=/\s/,mo=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Oi=/\{\n\/\* \[wrapped with (.+)\] \*/,gs=/,? & /,er=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,ai=/[()=,{}\[\]\/\s]/,vn=/\\(\\)?/g,ji=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Ta=/\w*$/,Tf=/^[-+]0x[0-9a-f]+$/i,If=/^0b[01]+$/i,tu=/^\[object .+?Constructor\]$/,Lf=/^0o[0-7]+$/i,Of=/^(?:0|[1-9]\d*)$/,Df=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,cv=/($^)/,rC=/['\n\r\u2028\u2029\\]/g,hv="\\ud800-\\udfff",nC="\\u0300-\\u036f",iC="\\ufe20-\\ufe2f",EF="\\u20d0-\\u20ff",pT=nC+iC+EF,vT="\\u2700-\\u27bf",mT="a-z\\xdf-\\xf6\\xf8-\\xff",AF="\\xac\\xb1\\xd7\\xf7",MF="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",TF="\\u2000-\\u206f",IF=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",gT="A-Z\\xc0-\\xd6\\xd8-\\xde",yT="\\ufe0e\\ufe0f",xT=AF+MF+TF+IF,aC="['\u2019]",px="["+hv+"]",oC="["+xT+"]",vx="["+pT+"]",bT="\\d+",Yg="["+vT+"]",mx="["+mT+"]",sC="[^"+hv+xT+bT+vT+mT+gT+"]",Xg="\\ud83c[\\udffb-\\udfff]",LF="(?:"+vx+"|"+Xg+")",_T="[^"+hv+"]",lC="(?:\\ud83c[\\udde6-\\uddff]){2}",uC="[\\ud800-\\udbff][\\udc00-\\udfff]",ko="["+gT+"]",ys="\\u200d",qg="(?:"+mx+"|"+sC+")",OF="(?:"+ko+"|"+sC+")",ST="(?:"+aC+"(?:d|ll|m|re|s|t|ve))?",fC="(?:"+aC+"(?:D|LL|M|RE|S|T|VE))?",cC=LF+"?",CT="["+yT+"]?",DF="(?:"+ys+"(?:"+[_T,lC,uC].join("|")+")"+CT+cC+")*",hC="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",PF="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",wT=CT+cC+DF,kF="(?:"+[Yg,lC,uC].join("|")+")"+wT,RF="(?:"+[_T+vx+"?",vx,lC,uC,px].join("|")+")",NF=RegExp(aC,"g"),FF=RegExp(vx,"g"),dC=RegExp(Xg+"(?="+Xg+")|"+RF+wT,"g"),BF=RegExp([ko+"?"+mx+"+"+ST+"(?="+[oC,ko,"$"].join("|")+")",OF+"+"+fC+"(?="+[oC,ko+qg,"$"].join("|")+")",ko+"?"+qg+"+"+ST,ko+"+"+fC,PF,hC,bT,kF].join("|"),"g"),bd=RegExp("["+ys+hv+pT+yT+"]"),GF=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,zF=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],gx=-1,Di={};Di[Wt]=Di[ee]=Di[Ue]=Di[Ht]=Di[ae]=Di[ge]=Di[Ye]=Di[Ve]=Di[$n]=!0,Di[lt]=Di[$]=Di[Et]=Di[_t]=Di[St]=Di[dt]=Di[Tt]=Di[Ut]=Di[Y]=Di[it]=Di[Rt]=Di[Ae]=Di[We]=Di[$e]=Di[ne]=!1;var Pi={};Pi[lt]=Pi[$]=Pi[Et]=Pi[St]=Pi[_t]=Pi[dt]=Pi[Wt]=Pi[ee]=Pi[Ue]=Pi[Ht]=Pi[ae]=Pi[Y]=Pi[it]=Pi[Rt]=Pi[Ae]=Pi[We]=Pi[$e]=Pi[V]=Pi[ge]=Pi[Ye]=Pi[Ve]=Pi[$n]=!0,Pi[Tt]=Pi[Ut]=Pi[ne]=!1;var ET={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},UF={"&":"&","<":"<",">":">",'"':""","'":"'"},pC={"&":"&","<":"<",">":">",""":'"',"'":"'"},vC={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},kc=parseFloat,yx=parseInt,mC=typeof global=="object"&&global&&global.Object===Object&&global,AT=typeof self=="object"&&self&&self.Object===Object&&self,$a=mC||AT||Function("return this")(),gC=typeof V_=="object"&&V_&&!V_.nodeType&&V_,_d=gC&&typeof vM=="object"&&vM&&!vM.nodeType&&vM,MT=_d&&_d.exports===gC,yC=MT&&mC.process,ml=function(){try{var kt=_d&&_d.require&&_d.require("util").types;return kt||yC&&yC.binding&&yC.binding("util")}catch(de){}}(),TT=ml&&ml.isArrayBuffer,Sd=ml&&ml.isDate,IT=ml&&ml.isMap,LT=ml&&ml.isRegExp,dv=ml&&ml.isSet,OT=ml&&ml.isTypedArray;function Qa(kt,de,te){switch(te.length){case 0:return kt.call(de);case 1:return kt.call(de,te[0]);case 2:return kt.call(de,te[0],te[1]);case 3:return kt.call(de,te[0],te[1],te[2])}return kt.apply(de,te)}function DT(kt,de,te,pr){for(var fn=-1,Qn=kt==null?0:kt.length;++fn-1}function xC(kt,de,te){for(var pr=-1,fn=kt==null?0:kt.length;++pr-1;);return te}function wx(kt,de){for(var te=kt.length;te--&&kf(de,kt[te],0)>-1;);return te}function mv(kt,de){for(var te=kt.length,pr=0;te--;)kt[te]===de&&++pr;return pr}var wC=vv(ET),EC=vv(UF);function AC(kt){return"\\"+vC[kt]}function MC(kt,de){return kt==null?r:kt[de]}function Ed(kt){return bd.test(kt)}function NT(kt){return GF.test(kt)}function FT(kt){for(var de,te=[];!(de=kt.next()).done;)te.push(de.value);return te}function Ex(kt){var de=-1,te=Array(kt.size);return kt.forEach(function(pr,fn){te[++de]=[fn,pr]}),te}function TC(kt,de){return function(te){return kt(de(te))}}function Rf(kt,de){for(var te=-1,pr=kt.length,fn=0,Qn=[];++te-1}function dB(y,_){var T=this.__data__,R=kd(T,y);return R<0?(++this.size,T.push([y,_])):T[R][1]=_,this}nu.prototype.clear=kx,nu.prototype.delete=fB,nu.prototype.get=cB,nu.prototype.has=hB,nu.prototype.set=dB;function Bf(y){var _=-1,T=y==null?0:y.length;for(this.clear();++_=_?y:_)),y}function yo(y,_,T,R,X,at){var bt,At=_&u,Bt=_&f,Se=_&c;if(T&&(bt=X?T(y,R,X,at):T(y)),bt!==r)return bt;if(!Oa(y))return y;var we=bn(y);if(we){if(bt=Be(y),!At)return xs(y,bt)}else{var Ne=le(y),ar=Ne==Ut||Ne==$t;if(Fv(y))return Rv(y,At);if(Ne==Rt||Ne==lt||ar&&!X){if(bt=Bt||ar?{}:me(y),!At)return Bt?cI(y,Av(bt,y)):qc(y,Rd(bt,y))}else{if(!Pi[Ne])return X?y:{};bt=Pe(y,Ne,At)}}at||(at=new iu);var Mr=at.get(y);if(Mr)return Mr;at.set(y,bt),n9(y)?y.forEach(function(Qr){bt.add(yo(Qr,_,T,Qr,y,at))}):e9(y)&&y.forEach(function(Qr,Wn){bt.set(Wn,yo(Qr,_,T,Wn,y,at))});var $r=Se?Bt?tw:JC:Bt?Sl:Bo,On=we?r:$r(y);return go(On||y,function(Qr,Wn){On&&(Wn=Qr,Qr=y[Wn]),oy(bt,Wn,yo(Qr,_,T,Wn,y,at))}),bt}function GC(y){var _=Bo(y);return function(T){return Rx(T,y,_)}}function Rx(y,_,T){var R=T.length;if(y==null)return!R;for(y=hi(y);R--;){var X=T[R],at=_[X],bt=y[X];if(bt===r&&!(X in y)||!at(bt))return!1}return!0}function Nx(y,_,T){if(typeof y!="function")throw new gl(i);return yn(function(){y.apply(r,T)},_)}function Nd(y,_,T,R){var X=-1,at=xx,bt=!0,At=y.length,Bt=[],Se=_.length;if(!At)return Bt;T&&(_=Zi(_,Fs(T))),R?(at=xC,bt=!1):_.length>=t&&(at=Nc,bt=!1,_=new Dd(_));t:for(;++XX?0:X+T),R=R===r||R>X?X:Mn(R),R<0&&(R+=X),R=T>R?0:a9(R);T0&&T(At)?_>1?Ja(At,_-1,T,R,X):Pf(X,At):R||(X[X.length]=At)}return X}var uy=XC(),Fx=XC(!0);function au(y,_){return y&&uy(y,_,Bo)}function Bx(y,_){return y&&Fx(y,_,Bo)}function fy(y,_){return ku(_,function(T){return qd(y[T])})}function Wc(y,_){_=ou(_,y);for(var T=0,R=_.length;y!=null&&T_}function UC(y,_){return y!=null&&Jn.call(y,_)}function jC(y,_){return y!=null&&_ in hi(y)}function tI(y,_,T){return y>=Ro(_,T)&&y=120&&we.length>=120)?new Dd(bt&&we):r}we=y[0];var Ne=-1,ar=At[0];t:for(;++Ne-1;)At!==y&&ry.call(At,Bt,1),ry.call(y,Bt,1);return y}function HC(y,_){for(var T=y?_.length:0,R=T-1;T--;){var X=_[T];if(T==R||X!==at){var at=X;pe(X)?ry.call(y,X,1):Ov(y,X)}}return y}function Hx(y,_){return y+bv(RC()*(_-y+1))}function EB(y,_,T,R){for(var X=-1,at=ga(Ix((_-y)/(T||1)),0),bt=te(at);at--;)bt[R?at:++X]=y,y+=T;return bt}function Yc(y,_){var T="";if(!y||_<1||_>D)return T;do _%2&&(T+=y),_=bv(_/2),_&&(y+=y);while(_);return T}function An(y,_){return $i(Vr(y,_,Cl),y+"")}function AB(y){return $T(eb(y))}function MB(y,_){var T=eb(y);return Qi(T,jc(_,0,T.length))}function Lv(y,_,T,R){if(!Oa(y))return y;_=ou(_,y);for(var X=-1,at=_.length,bt=at-1,At=y;At!=null&&++XX?0:X+_),T=T>X?X:T,T<0&&(T+=X),X=_>T?0:T-_>>>0,_>>>=0;for(var at=te(X);++R>>1,bt=y[at];bt!==null&&!fu(bt)&&(T?bt<=_:bt<_)?R=at+1:X=at}return X}return YC(y,_,Cl,T)}function YC(y,_,T,R){var X=0,at=y==null?0:y.length;if(at===0)return 0;_=T(_);for(var bt=_!==_,At=_===null,Bt=fu(_),Se=_===r;X=t){var Se=_?null:DB(y);if(Se)return $g(Se);bt=!1,X=Nc,Bt=new Dd}else Bt=_?[]:At;t:for(;++R=R?y:xl(y,_,T)}var kv=QF||function(y){return $a.clearTimeout(y)};function Rv(y,_){if(_)return y.slice();var T=y.length,R=DC?DC(T):new y.constructor(T);return y.copy(R),R}function Wd(y){var _=new y.constructor(y.byteLength);return new ey(_).set(new ey(y)),_}function by(y,_){var T=_?Wd(y.buffer):y.buffer;return new y.constructor(T,y.byteOffset,y.byteLength)}function _y(y){var _=new y.constructor(y.source,Ta.exec(y));return _.lastIndex=y.lastIndex,_}function lI(y){return wv?hi(wv.call(y)):{}}function Nv(y,_){var T=_?Wd(y.buffer):y.buffer;return new y.constructor(T,y.byteOffset,y.length)}function Xc(y,_){if(y!==_){var T=y!==r,R=y===null,X=y===y,at=fu(y),bt=_!==r,At=_===null,Bt=_===_,Se=fu(_);if(!At&&!Se&&!at&&y>_||at&&bt&&Bt&&!At&&!Se||R&&bt&&Bt||!T&&Bt||!X)return 1;if(!R&&!at&&!Se&&y<_||Se&&T&&X&&!R&&!at||At&&T&&X||!bt&&X||!Bt)return-1}return 0}function uI(y,_,T){for(var R=-1,X=y.criteria,at=_.criteria,bt=X.length,At=T.length;++R=At)return Bt;var Se=T[R];return Bt*(Se=="desc"?-1:1)}}return y.index-_.index}function Kx(y,_,T,R){for(var X=-1,at=y.length,bt=T.length,At=-1,Bt=_.length,Se=ga(at-bt,0),we=te(Bt+Se),Ne=!R;++At1?T[X-1]:r,bt=X>2?T[2]:r;for(at=y.length>3&&typeof at=="function"?(X--,at):r,bt&&Le(T[0],T[1],bt)&&(at=X<3?r:at,X=1),_=hi(_);++R-1?X[at?_[bt]:bt]:r}}function Zx(y){return zu(function(_){var T=_.length,R=T,X=yl.prototype.thru;for(y&&_.reverse();R--;){var at=_[R];if(typeof at!="function")throw new gl(i);if(X&&!bt&&Jx(at)=="wrapper")var bt=new yl([],!0)}for(R=bt?R:T;++R1&&ti.reverse(),we&&BtAt))return!1;var Se=at.get(y),we=at.get(_);if(Se&&we)return Se==_&&we==y;var Ne=-1,ar=!0,Mr=T&d?new Dd:r;for(at.set(y,_),at.set(_,y);++Ne1?"& ":"")+_[R],_=_.join(T>2?", ":" "),y.replace(mo,`{ +/* [wrapped with `+_+`] */ +`)}function Yt(y){return bn(y)||Cy(y)||!!(PC&&y&&y[PC])}function pe(y,_){var T=typeof y;return _=_==null?D:_,!!_&&(T=="number"||T!="symbol"&&Of.test(y))&&y>-1&&y%1==0&&y<_}function Le(y,_,T){if(!Oa(T))return!1;var R=typeof _;return(R=="number"?_l(T)&&pe(_,T.length):R=="string"&&_ in T)?Wf(T[_],y):!1}function ue(y,_){if(bn(y))return!1;var T=typeof y;return T=="number"||T=="symbol"||T=="boolean"||y==null||fu(y)?!0:Pu.test(y)||!Do.test(y)||_!=null&&y in hi(_)}function He(y){var _=typeof y;return _=="string"||_=="number"||_=="symbol"||_=="boolean"?y!=="__proto__":y===null}function ce(y){var _=Jx(y),T=tt[_];if(typeof T!="function"||!(_ in Fn.prototype))return!1;if(y===T)return!0;var R=Qx(T);return!!R&&y===R[0]}function Re(y){return!!Jg&&Jg in y}var he=Mx?qd:XB;function Oe(y){var _=y&&y.constructor,T=typeof _=="function"&&_.prototype||yv;return y===T}function vr(y){return y===y&&!Oa(y)}function Or(y,_){return function(T){return T==null?!1:T[y]===_&&(_!==r||y in hi(T))}}function Ge(y){var _=wI(y,function(R){return T.size===s&&T.clear(),R}),T=_.cache;return _}function Me(y,_){var T=y[1],R=_[1],X=T|R,at=X<(p|v|C),bt=R==C&&T==g||R==C&&T==w&&y[7].length<=_[8]||R==(C|w)&&_[7].length<=_[8]&&T==g;if(!(at||bt))return y;R&p&&(y[2]=_[2],X|=T&p?0:m);var At=_[3];if(At){var Bt=y[3];y[3]=Bt?Kx(Bt,At,_[4]):At,y[4]=Bt?Rf(y[3],l):_[4]}return At=_[5],At&&(Bt=y[5],y[5]=Bt?fI(Bt,At,_[6]):At,y[6]=Bt?Rf(y[5],l):_[6]),At=_[7],At&&(y[7]=At),R&C&&(y[8]=y[8]==null?_[8]:Ro(y[8],_[8])),y[9]==null&&(y[9]=_[9]),y[0]=_[0],y[1]=X,y}function fe(y){var _=[];if(y!=null)for(var T in hi(y))_.push(T);return _}function Er(y){return Jo.call(y)}function Vr(y,_,T){return _=ga(_===r?y.length-1:_,0),function(){for(var R=arguments,X=-1,at=ga(R.length-_,0),bt=te(at);++X0){if(++_>=L)return arguments[0]}else _=0;return y.apply(r,arguments)}}function Qi(y,_){var T=-1,R=y.length,X=R-1;for(_=_===r?R:_;++T<_;){var at=Hx(T,X),bt=y[at];y[at]=y[T],y[T]=bt}return y.length=_,y}var bi=Ge(function(y){var _=[];return y.charCodeAt(0)===46&&_.push(""),y.replace(Po,function(T,R,X,at){_.push(X?at.replace(vn,"$1"):R||T)}),_});function oi(y){if(typeof y=="string"||fu(y))return y;var _=y+"";return _=="0"&&1/y==-G?"-0":_}function ki(y){if(y!=null){try{return Qg.call(y)}catch(_){}try{return y+""}catch(_){}}return""}function La(y,_){return go(et,function(T){var R="_."+T[0];_&T[1]&&!xx(y,R)&&y.push(R)}),y.sort()}function ka(y){if(y instanceof Fn)return y.clone();var _=new yl(y.__wrapped__,y.__chain__);return _.__actions__=xs(y.__actions__),_.__index__=y.__index__,_.__values__=y.__values__,_}function eo(y,_,T){(T?Le(y,_,T):_===r)?_=1:_=ga(Mn(_),0);var R=y==null?0:y.length;if(!R||_<1)return[];for(var X=0,at=0,bt=te(Ix(R/_));X1?y[_-1]:r;return T=typeof T=="function"?(y.pop(),T):r,WX(y,T)});function VX(y){var _=tt(y);return _.__chain__=!0,_}function fMt(y,_){return _(y),y}function _I(y,_){return _(y)}var cMt=zu(function(y){var _=y.length,T=_?y[0]:0,R=this.__wrapped__,X=function(at){return Uc(at,y)};return _>1||this.__actions__.length||!(R instanceof Fn)||!pe(T)?this.thru(X):(R=R.slice(T,+T+(_?1:0)),R.__actions__.push({func:_I,args:[X],thisArg:r}),new yl(R,this.__chain__).thru(function(at){return _&&!at.length&&at.push(r),at}))});function hMt(){return VX(this)}function dMt(){return new yl(this.value(),this.__chain__)}function pMt(){this.__values__===r&&(this.__values__=i9(this.value()));var y=this.__index__>=this.__values__.length,_=y?r:this.__values__[this.__index__++];return{done:y,value:_}}function vMt(){return this}function mMt(y){for(var _,T=this;T instanceof ay;){var R=ka(T);R.__index__=0,R.__values__=r,_?X.__wrapped__=R:_=R;var X=R;T=T.__wrapped__}return X.__wrapped__=y,_}function gMt(){var y=this.__wrapped__;if(y instanceof Fn){var _=y;return this.__actions__.length&&(_=new Fn(this)),_=_.reverse(),_.__actions__.push({func:_I,args:[ir],thisArg:r}),new yl(_,this.__chain__)}return this.thru(ir)}function yMt(){return Xx(this.__wrapped__,this.__actions__)}var xMt=Sy(function(y,_,T){Jn.call(y,T)?++y[T]:Gf(y,T,1)});function bMt(y,_,T){var R=bn(y)?Rc:QT;return T&&Le(y,_,T)&&(_=r),R(y,Z(_,3))}function _Mt(y,_){var T=bn(y)?ku:zC;return T(y,Z(_,3))}var SMt=qC(ut),CMt=qC(jt);function wMt(y,_){return Ja(SI(y,_),1)}function EMt(y,_){return Ja(SI(y,_),G)}function AMt(y,_,T){return T=T===r?1:Mn(T),Ja(SI(y,_),T)}function HX(y,_){var T=bn(y)?go:Ru;return T(y,Z(_,3))}function YX(y,_){var T=bn(y)?PT:sy;return T(y,Z(_,3))}var MMt=Sy(function(y,_,T){Jn.call(y,T)?y[T].push(_):Gf(y,T,[_])});function TMt(y,_,T,R){y=_l(y)?y:eb(y),T=T&&!R?Mn(T):0;var X=y.length;return T<0&&(T=ga(X+T,0)),MI(y)?T<=X&&y.indexOf(_,T)>-1:!!X&&kf(y,_,T)>-1}var IMt=An(function(y,_,T){var R=-1,X=typeof _=="function",at=_l(y)?te(y.length):[];return Ru(y,function(bt){at[++R]=X?Qa(_,bt,T):Mv(bt,_,T)}),at}),LMt=Sy(function(y,_,T){Gf(y,T,_)});function SI(y,_){var T=bn(y)?Zi:Vc;return T(y,Z(_,3))}function OMt(y,_,T,R){return y==null?[]:(bn(_)||(_=_==null?[]:[_]),T=R?r:T,bn(T)||(T=T==null?[]:[T]),Ud(y,_,T))}var DMt=Sy(function(y,_,T){y[T?0:1].push(_)},function(){return[[],[]]});function PMt(y,_,T){var R=bn(y)?bC:_C,X=arguments.length<3;return R(y,Z(_,4),T,X,Ru)}function kMt(y,_,T){var R=bn(y)?jF:_C,X=arguments.length<3;return R(y,Z(_,4),T,X,sy)}function RMt(y,_){var T=bn(y)?ku:zC;return T(y,EI(Z(_,3)))}function NMt(y){var _=bn(y)?$T:AB;return _(y)}function FMt(y,_,T){(T?Le(y,_,T):_===r)?_=1:_=Mn(_);var R=bn(y)?_B:MB;return R(y,_)}function BMt(y){var _=bn(y)?SB:IB;return _(y)}function GMt(y){if(y==null)return 0;if(_l(y))return MI(y)?Fc(y):y.length;var _=le(y);return _==Y||_==We?y.size:Gd(y).length}function zMt(y,_,T){var R=bn(y)?bx:LB;return T&&Le(y,_,T)&&(_=r),R(y,Z(_,3))}var UMt=An(function(y,_){if(y==null)return[];var T=_.length;return T>1&&Le(y,_[0],_[1])?_=[]:T>2&&Le(_[0],_[1],_[2])&&(_=[_[0]]),Ud(y,Ja(_,1),[])}),CI=JF||function(){return $a.Date.now()};function jMt(y,_){if(typeof _!="function")throw new gl(i);return y=Mn(y),function(){if(--y<1)return _.apply(this,arguments)}}function XX(y,_,T){return _=T?r:_,_=y&&_==null?y.length:_,jf(y,C,r,r,r,r,_)}function qX(y,_){var T;if(typeof _!="function")throw new gl(i);return y=Mn(y),function(){return--y>0&&(T=_.apply(this,arguments)),y<=1&&(_=r),T}}var RB=An(function(y,_,T){var R=p;if(T.length){var X=Rf(T,B(RB));R|=b}return jf(y,R,_,T,X)}),KX=An(function(y,_,T){var R=p|v;if(T.length){var X=Rf(T,B(KX));R|=b}return jf(_,R,y,T,X)});function ZX(y,_,T){_=T?r:_;var R=jf(y,g,r,r,r,r,r,_);return R.placeholder=ZX.placeholder,R}function $X(y,_,T){_=T?r:_;var R=jf(y,x,r,r,r,r,r,_);return R.placeholder=$X.placeholder,R}function QX(y,_,T){var R,X,at,bt,At,Bt,Se=0,we=!1,Ne=!1,ar=!0;if(typeof y!="function")throw new gl(i);_=ju(_)||0,Oa(T)&&(we=!!T.leading,Ne="maxWait"in T,at=Ne?ga(ju(T.maxWait)||0,_):at,ar="trailing"in T?!!T.trailing:ar);function Mr(Ya){var Vf=R,Zd=X;return R=X=r,Se=Ya,bt=y.apply(Zd,Vf),bt}function $r(Ya){return Se=Ya,At=yn(Wn,_),we?Mr(Ya):bt}function On(Ya){var Vf=Ya-Bt,Zd=Ya-Se,g9=_-Vf;return Ne?Ro(g9,at-Zd):g9}function Qr(Ya){var Vf=Ya-Bt,Zd=Ya-Se;return Bt===r||Vf>=_||Vf<0||Ne&&Zd>=at}function Wn(){var Ya=CI();if(Qr(Ya))return ti(Ya);At=yn(Wn,On(Ya))}function ti(Ya){return At=r,ar&&R?Mr(Ya):(R=X=r,bt)}function cu(){At!==r&&kv(At),Se=0,R=Bt=X=At=r}function Gs(){return At===r?bt:ti(CI())}function hu(){var Ya=CI(),Vf=Qr(Ya);if(R=arguments,X=this,Bt=Ya,Vf){if(At===r)return $r(Bt);if(Ne)return kv(At),At=yn(Wn,_),Mr(Bt)}return At===r&&(At=yn(Wn,_)),bt}return hu.cancel=cu,hu.flush=Gs,hu}var WMt=An(function(y,_){return Nx(y,1,_)}),VMt=An(function(y,_,T){return Nx(y,ju(_)||0,T)});function HMt(y){return jf(y,A)}function wI(y,_){if(typeof y!="function"||_!=null&&typeof _!="function")throw new gl(i);var T=function(){var R=arguments,X=_?_.apply(this,R):R[0],at=T.cache;if(at.has(X))return at.get(X);var bt=y.apply(this,R);return T.cache=at.set(X,bt)||at,bt};return T.cache=new(wI.Cache||Bf),T}wI.Cache=Bf;function EI(y){if(typeof y!="function")throw new gl(i);return function(){var _=arguments;switch(_.length){case 0:return!y.call(this);case 1:return!y.call(this,_[0]);case 2:return!y.call(this,_[0],_[1]);case 3:return!y.call(this,_[0],_[1],_[2])}return!y.apply(this,_)}}function YMt(y){return qX(2,y)}var XMt=qx(function(y,_){_=_.length==1&&bn(_[0])?Zi(_[0],Fs(Z())):Zi(Ja(_,1),Fs(Z()));var T=_.length;return An(function(R){for(var X=-1,at=Ro(R.length,T);++X=_}),Cy=Ux(function(){return arguments}())?Ux:function(y){return Ra(y)&&Jn.call(y,"callee")&&!Va.call(y,"callee")},bn=te.isArray,lTt=TT?Fs(TT):rI;function _l(y){return y!=null&&AI(y.length)&&!qd(y)}function Ha(y){return Ra(y)&&_l(y)}function uTt(y){return y===!0||y===!1||Ra(y)&&Fo(y)==_t}var Fv=eB||XB,fTt=Sd?Fs(Sd):nI;function cTt(y){return Ra(y)&&y.nodeType===1&&!rw(y)}function hTt(y){if(y==null)return!0;if(_l(y)&&(bn(y)||typeof y=="string"||typeof y.splice=="function"||Fv(y)||tb(y)||Cy(y)))return!y.length;var _=le(y);if(_==Y||_==We)return!y.size;if(Oe(y))return!Gd(y).length;for(var T in y)if(Jn.call(y,T))return!1;return!0}function dTt(y,_){return Fd(y,_)}function pTt(y,_,T){T=typeof T=="function"?T:r;var R=T?T(y,_):r;return R===r?Fd(y,_,r,T):!!R}function FB(y){if(!Ra(y))return!1;var _=Fo(y);return _==Tt||_==vt||typeof y.message=="string"&&typeof y.name=="string"&&!rw(y)}function vTt(y){return typeof y=="number"&&kC(y)}function qd(y){if(!Oa(y))return!1;var _=Fo(y);return _==Ut||_==$t||_==st||_==Zt}function t9(y){return typeof y=="number"&&y==Mn(y)}function AI(y){return typeof y=="number"&&y>-1&&y%1==0&&y<=D}function Oa(y){var _=typeof y;return y!=null&&(_=="object"||_=="function")}function Ra(y){return y!=null&&typeof y=="object"}var e9=IT?Fs(IT):hy;function mTt(y,_){return y===_||jx(y,_,Gt(_))}function gTt(y,_,T){return T=typeof T=="function"?T:r,jx(y,_,Gt(_),T)}function yTt(y){return r9(y)&&y!=+y}function xTt(y){if(he(y))throw new fn(n);return dy(y)}function bTt(y){return y===null}function _Tt(y){return y==null}function r9(y){return typeof y=="number"||Ra(y)&&Fo(y)==it}function rw(y){if(!Ra(y)||Fo(y)!=Rt)return!1;var _=Tx(y);if(_===null)return!0;var T=Jn.call(_,"constructor")&&_.constructor;return typeof T=="function"&&T instanceof T&&Qg.call(T)==xv}var BB=LT?Fs(LT):zf;function STt(y){return t9(y)&&y>=-D&&y<=D}var n9=dv?Fs(dv):py;function MI(y){return typeof y=="string"||!bn(y)&&Ra(y)&&Fo(y)==$e}function fu(y){return typeof y=="symbol"||Ra(y)&&Fo(y)==V}var tb=OT?Fs(OT):Bd;function CTt(y){return y===r}function wTt(y){return Ra(y)&&le(y)==ne}function ETt(y){return Ra(y)&&Fo(y)==pt}var ATt=$x(Uf),MTt=$x(function(y,_){return y<=_});function i9(y){if(!y)return[];if(_l(y))return MI(y)?Qo(y):xs(y);if(ru&&y[ru])return FT(y[ru]());var _=le(y),T=_==Y?Ex:_==We?$g:eb;return T(y)}function Kd(y){if(!y)return y===0?y:0;if(y=ju(y),y===G||y===-G){var _=y<0?-1:1;return _*N}return y===y?y:0}function Mn(y){var _=Kd(y),T=_%1;return _===_?T?_-T:_:0}function a9(y){return y?jc(Mn(y),0,j):0}function ju(y){if(typeof y=="number")return y;if(fu(y))return z;if(Oa(y)){var _=typeof y.valueOf=="function"?y.valueOf():y;y=Oa(_)?_+"":_}if(typeof y!="string")return y===0?y:+y;y=RT(y);var T=If.test(y);return T||Lf.test(y)?yx(y.slice(2),T?2:8):Tf.test(y)?z:+y}function o9(y){return Fu(y,Sl(y))}function TTt(y){return y?jc(Mn(y),-D,D):y===0?y:0}function wi(y){return y==null?"":Bs(y)}var ITt=Vd(function(y,_){if(Oe(_)||_l(_)){Fu(_,Bo(_),y);return}for(var T in _)Jn.call(_,T)&&oy(y,T,_[T])}),s9=Vd(function(y,_){Fu(_,Sl(_),y)}),TI=Vd(function(y,_,T,R){Fu(_,Sl(_),y,R)}),LTt=Vd(function(y,_,T,R){Fu(_,Bo(_),y,R)}),OTt=zu(Uc);function DTt(y,_){var T=Ld(y);return _==null?T:Rd(T,_)}var PTt=An(function(y,_){y=hi(y);var T=-1,R=_.length,X=R>2?_[2]:r;for(X&&Le(_[0],_[1],X)&&(R=1);++T1),at}),Fu(y,tw(y),T),R&&(T=yo(T,u|f|c,PB));for(var X=_.length;X--;)Ov(T,_[X]);return T});function $Tt(y,_){return u9(y,EI(Z(_)))}var QTt=zu(function(y,_){return y==null?{}:Iv(y,_)});function u9(y,_){if(y==null)return{};var T=Zi(tw(y),function(R){return[R]});return _=Z(_),iI(y,T,function(R,X){return _(R,X[0])})}function JTt(y,_,T){_=ou(_,y);var R=-1,X=_.length;for(X||(X=1,y=r);++R_){var R=y;y=_,_=R}if(T||y%1||_%1){var X=RC();return Ro(y+X*(_-y+kc("1e-"+((X+"").length-1))),_)}return Hx(y,_)}var fIt=Hd(function(y,_,T){return _=_.toLowerCase(),y+(T?h9(_):_)});function h9(y){return UB(wi(y).toLowerCase())}function d9(y){return y=wi(y),y&&y.replace(Df,wC).replace(FF,"")}function cIt(y,_,T){y=wi(y),_=Bs(_);var R=y.length;T=T===r?R:jc(Mn(T),0,R);var X=T;return T-=_.length,T>=0&&y.slice(T,X)==_}function hIt(y){return y=wi(y),y&&ci.test(y)?y.replace(Ki,EC):y}function dIt(y){return y=wi(y),y&&$o.test(y)?y.replace(ms,"\\$&"):y}var pIt=Hd(function(y,_,T){return y+(T?"-":"")+_.toLowerCase()}),vIt=Hd(function(y,_,T){return y+(T?" ":"")+_.toLowerCase()}),mIt=lu("toLowerCase");function gIt(y,_,T){y=wi(y),_=Mn(_);var R=_?Fc(y):0;if(!_||R>=_)return y;var X=(_-R)/2;return Wi(bv(X),T)+y+Wi(Ix(X),T)}function yIt(y,_,T){y=wi(y),_=Mn(_);var R=_?Fc(y):0;return _&&R<_?y+Wi(_-R,T):y}function xIt(y,_,T){y=wi(y),_=Mn(_);var R=_?Fc(y):0;return _&&R<_?Wi(_-R,T)+y:y}function bIt(y,_,T){return T||_==null?_=0:_&&(_=+_),Ox(wi(y).replace(vl,""),_||0)}function _It(y,_,T){return(T?Le(y,_,T):_===r)?_=1:_=Mn(_),Yc(wi(y),_)}function SIt(){var y=arguments,_=wi(y[0]);return y.length<3?_:_.replace(y[1],y[2])}var CIt=Hd(function(y,_,T){return y+(T?"_":"")+_.toLowerCase()});function wIt(y,_,T){return T&&typeof T!="number"&&Le(y,_,T)&&(_=T=r),T=T===r?j:T>>>0,T?(y=wi(y),y&&(typeof _=="string"||_!=null&&!BB(_))&&(_=Bs(_),!_&&Ed(y))?su(Qo(y),0,T):y.split(_,T)):[]}var EIt=Hd(function(y,_,T){return y+(T?" ":"")+UB(_)});function AIt(y,_,T){return y=wi(y),T=T==null?0:jc(Mn(T),0,y.length),_=Bs(_),y.slice(T,T+_.length)==_}function MIt(y,_,T){var R=tt.templateSettings;T&&Le(y,_,T)&&(_=r),y=wi(y),_=TI({},_,R,pI);var X=TI({},_.imports,R.imports,pI),at=Bo(X),bt=Zg(X,at),At,Bt,Se=0,we=_.interpolate||cv,Ne="__p += '",ar=OC((_.escape||cv).source+"|"+we.source+"|"+(we===Li?ji:cv).source+"|"+(_.evaluate||cv).source+"|$","g"),Mr="//# sourceURL="+(Jn.call(_,"sourceURL")?(_.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++gx+"]")+` +`;y.replace(ar,function(Qr,Wn,ti,cu,Gs,hu){return ti||(ti=cu),Ne+=y.slice(Se,hu).replace(rC,AC),Wn&&(At=!0,Ne+=`' + +__e(`+Wn+`) + +'`),Gs&&(Bt=!0,Ne+=`'; +`+Gs+`; +__p += '`),ti&&(Ne+=`' + +((__t = (`+ti+`)) == null ? '' : __t) + +'`),Se=hu+Qr.length,Qr}),Ne+=`'; +`;var $r=Jn.call(_,"variable")&&_.variable;if(!$r)Ne=`with (obj) { +`+Ne+` +} +`;else if(ai.test($r))throw new fn(a);Ne=(Bt?Ne.replace(ma,""):Ne).replace(_n,"$1").replace(ii,"$1;"),Ne="function("+($r||"obj")+`) { +`+($r?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(At?", __e = _.escape":"")+(Bt?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+Ne+`return __p +}`;var On=v9(function(){return Qn(at,Mr+"return "+Ne).apply(r,bt)});if(On.source=Ne,FB(On))throw On;return On}function TIt(y){return wi(y).toLowerCase()}function IIt(y){return wi(y).toUpperCase()}function LIt(y,_,T){if(y=wi(y),y&&(T||_===r))return RT(y);if(!y||!(_=Bs(_)))return y;var R=Qo(y),X=Qo(_),at=Cx(R,X),bt=wx(R,X)+1;return su(R,at,bt).join("")}function OIt(y,_,T){if(y=wi(y),y&&(T||_===r))return y.slice(0,GT(y)+1);if(!y||!(_=Bs(_)))return y;var R=Qo(y),X=wx(R,Qo(_))+1;return su(R,0,X).join("")}function DIt(y,_,T){if(y=wi(y),y&&(T||_===r))return y.replace(vl,"");if(!y||!(_=Bs(_)))return y;var R=Qo(y),X=Cx(R,Qo(_));return su(R,X).join("")}function PIt(y,_){var T=I,R=P;if(Oa(_)){var X="separator"in _?_.separator:X;T="length"in _?Mn(_.length):T,R="omission"in _?Bs(_.omission):R}y=wi(y);var at=y.length;if(Ed(y)){var bt=Qo(y);at=bt.length}if(T>=at)return y;var At=T-Fc(R);if(At<1)return R;var Bt=bt?su(bt,0,At).join(""):y.slice(0,At);if(X===r)return Bt+R;if(bt&&(At+=Bt.length-At),BB(X)){if(y.slice(At).search(X)){var Se,we=Bt;for(X.global||(X=OC(X.source,wi(Ta.exec(X))+"g")),X.lastIndex=0;Se=X.exec(we);)var Ne=Se.index;Bt=Bt.slice(0,Ne===r?At:Ne)}}else if(y.indexOf(Bs(X),At)!=At){var ar=Bt.lastIndexOf(X);ar>-1&&(Bt=Bt.slice(0,ar))}return Bt+R}function kIt(y){return y=wi(y),y&&En.test(y)?y.replace(xi,HF):y}var RIt=Hd(function(y,_,T){return y+(T?" ":"")+_.toUpperCase()}),UB=lu("toUpperCase");function p9(y,_,T){return y=wi(y),_=T?r:_,_===r?NT(y)?XF(y):WF(y):y.match(_)||[]}var v9=An(function(y,_){try{return Qa(y,r,_)}catch(T){return FB(T)?T:new fn(T)}}),NIt=zu(function(y,_){return go(_,function(T){T=oi(T),Gf(y,T,RB(y[T],y))}),y});function FIt(y){var _=y==null?0:y.length,T=Z();return y=_?Zi(y,function(R){if(typeof R[1]!="function")throw new gl(i);return[T(R[0]),R[1]]}):[],An(function(R){for(var X=-1;++X<_;){var at=y[X];if(Qa(at[0],this,R))return Qa(at[1],this,R)}})}function BIt(y){return GC(yo(y,u))}function jB(y){return function(){return y}}function GIt(y,_){return y==null||y!==y?_:y}var zIt=Zx(),UIt=Zx(!0);function Cl(y){return y}function WB(y){return Tv(typeof y=="function"?y:yo(y,u))}function jIt(y){return vy(yo(y,u))}function WIt(y,_){return my(y,yo(_,u))}var VIt=An(function(y,_){return function(T){return Mv(T,y,_)}}),HIt=An(function(y,_){return function(T){return Mv(y,T,_)}});function VB(y,_,T){var R=Bo(_),X=fy(_,R);T==null&&!(Oa(_)&&(X.length||!R.length))&&(T=_,_=y,y=this,X=fy(_,Bo(_)));var at=!(Oa(T)&&"chain"in T)||!!T.chain,bt=qd(y);return go(X,function(At){var Bt=_[At];y[At]=Bt,bt&&(y.prototype[At]=function(){var Se=this.__chain__;if(at||Se){var we=y(this.__wrapped__),Ne=we.__actions__=xs(this.__actions__);return Ne.push({func:Bt,args:arguments,thisArg:y}),we.__chain__=Se,we}return Bt.apply(y,Pf([this.value()],arguments))})}),y}function YIt(){return $a._===this&&($a._=zT),this}function HB(){}function XIt(y){return y=Mn(y),An(function(_){return Wx(_,y)})}var qIt=Gu(Zi),KIt=Gu(Rc),ZIt=Gu(bx);function m9(y){return ue(y)?wd(oi(y)):wB(y)}function $It(y){return function(_){return y==null?r:Wc(y,_)}}var QIt=ZC(),JIt=ZC(!0);function YB(){return[]}function XB(){return!1}function t2t(){return{}}function e2t(){return""}function r2t(){return!0}function n2t(y,_){if(y=Mn(y),y<1||y>D)return[];var T=j,R=Ro(y,j);_=Z(_),y-=j;for(var X=CC(R,_);++T0||_<0)?new Fn(T):(y<0?T=T.takeRight(-y):y&&(T=T.drop(y)),_!==r&&(_=Mn(_),T=_<0?T.dropRight(-_):T.take(_-y)),T)},Fn.prototype.takeRightWhile=function(y){return this.reverse().takeWhile(y).reverse()},Fn.prototype.toArray=function(){return this.take(j)},au(Fn.prototype,function(y,_){var T=/^(?:filter|find|map|reject)|While$/.test(_),R=/^(?:head|last)$/.test(_),X=tt[R?"take"+(_=="last"?"Right":""):_],at=R||/^find/.test(_);!X||(tt.prototype[_]=function(){var bt=this.__wrapped__,At=R?[1]:arguments,Bt=bt instanceof Fn,Se=At[0],we=Bt||bn(bt),Ne=function(Wn){var ti=X.apply(tt,Pf([Wn],At));return R&&ar?ti[0]:ti};we&&T&&typeof Se=="function"&&Se.length!=1&&(Bt=we=!1);var ar=this.__chain__,Mr=!!this.__actions__.length,$r=at&&!ar,On=Bt&&!Mr;if(!at&&we){bt=On?bt:new Fn(this);var Qr=y.apply(bt,At);return Qr.__actions__.push({func:_I,args:[Ne],thisArg:r}),new yl(Qr,ar)}return $r&&On?y.apply(this,At):(Qr=this.thru(Ne),$r?R?Qr.value()[0]:Qr.value():Qr)})}),go(["pop","push","shift","sort","splice","unshift"],function(y){var _=Ax[y],T=/^(?:push|sort|unshift)$/.test(y)?"tap":"thru",R=/^(?:pop|shift)$/.test(y);tt.prototype[y]=function(){var X=arguments;if(R&&!this.__chain__){var at=this.value();return _.apply(bn(at)?at:[],X)}return this[T](function(bt){return _.apply(bn(bt)?bt:[],X)})}}),au(Fn.prototype,function(y,_){var T=tt[_];if(T){var R=T.name+"";Jn.call(No,R)||(No[R]=[]),No[R].push({name:_,func:T})}}),No[Yd(r,v).name]=[{name:"wrapper",func:r}],Fn.prototype.clone=iB,Fn.prototype.reverse=aB,Fn.prototype.value=oB,tt.prototype.at=cMt,tt.prototype.chain=hMt,tt.prototype.commit=dMt,tt.prototype.next=pMt,tt.prototype.plant=mMt,tt.prototype.reverse=gMt,tt.prototype.toJSON=tt.prototype.valueOf=tt.prototype.value=yMt,tt.prototype.first=tt.prototype.head,ru&&(tt.prototype[ru]=vMt),tt},Bc=qF();typeof define=="function"&&typeof define.amd=="object"&&define.amd?($a._=Bc,define(function(){return Bc})):_d?((_d.exports=Bc)._=Bc,gC._=Bc):$a._=Bc}).call(V_)});var Mu=ft((wwr,Apt)=>{var cR;if(typeof require=="function")try{cR=Ept()}catch(r){}cR||(cR=window._);Apt.exports=cR});var hR=ft((Ewr,Lpt)=>{"use strict";var Jr=Mu();Lpt.exports=jn;var qre="\0",z0="\0",Mpt="";function jn(r){this._isDirected=Jr.has(r,"directed")?r.directed:!0,this._isMultigraph=Jr.has(r,"multigraph")?r.multigraph:!1,this._isCompound=Jr.has(r,"compound")?r.compound:!1,this._label=void 0,this._defaultNodeLabelFn=Jr.constant(void 0),this._defaultEdgeLabelFn=Jr.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[z0]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}jn.prototype._nodeCount=0;jn.prototype._edgeCount=0;jn.prototype.isDirected=function(){return this._isDirected};jn.prototype.isMultigraph=function(){return this._isMultigraph};jn.prototype.isCompound=function(){return this._isCompound};jn.prototype.setGraph=function(r){return this._label=r,this};jn.prototype.graph=function(){return this._label};jn.prototype.setDefaultNodeLabel=function(r){return Jr.isFunction(r)||(r=Jr.constant(r)),this._defaultNodeLabelFn=r,this};jn.prototype.nodeCount=function(){return this._nodeCount};jn.prototype.nodes=function(){return Jr.keys(this._nodes)};jn.prototype.sources=function(){return Jr.filter(this.nodes(),Jr.bind(function(r){return Jr.isEmpty(this._in[r])},this))};jn.prototype.sinks=function(){return Jr.filter(this.nodes(),Jr.bind(function(r){return Jr.isEmpty(this._out[r])},this))};jn.prototype.setNodes=function(r,e){var t=arguments;return Jr.each(r,Jr.bind(function(n){t.length>1?this.setNode(n,e):this.setNode(n)},this)),this};jn.prototype.setNode=function(r,e){return Jr.has(this._nodes,r)?(arguments.length>1&&(this._nodes[r]=e),this):(this._nodes[r]=arguments.length>1?e:this._defaultNodeLabelFn(r),this._isCompound&&(this._parent[r]=z0,this._children[r]={},this._children[z0][r]=!0),this._in[r]={},this._preds[r]={},this._out[r]={},this._sucs[r]={},++this._nodeCount,this)};jn.prototype.node=function(r){return this._nodes[r]};jn.prototype.hasNode=function(r){return Jr.has(this._nodes,r)};jn.prototype.removeNode=function(r){var e=this;if(Jr.has(this._nodes,r)){var t=function(n){e.removeEdge(e._edgeObjs[n])};delete this._nodes[r],this._isCompound&&(this._removeFromParentsChildList(r),delete this._parent[r],Jr.each(this.children(r),Jr.bind(function(n){this.setParent(n)},this)),delete this._children[r]),Jr.each(Jr.keys(this._in[r]),t),delete this._in[r],delete this._preds[r],Jr.each(Jr.keys(this._out[r]),t),delete this._out[r],delete this._sucs[r],--this._nodeCount}return this};jn.prototype.setParent=function(r,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(Jr.isUndefined(e))e=z0;else{e+="";for(var t=e;!Jr.isUndefined(t);t=this.parent(t))if(t===r)throw new Error("Setting "+e+" as parent of "+r+" would create create a cycle");this.setNode(e)}return this.setNode(r),this._removeFromParentsChildList(r),this._parent[r]=e,this._children[e][r]=!0,this};jn.prototype._removeFromParentsChildList=function(r){delete this._children[this._parent[r]][r]};jn.prototype.parent=function(r){if(this._isCompound){var e=this._parent[r];if(e!==z0)return e}};jn.prototype.children=function(r){if(Jr.isUndefined(r)&&(r=z0),this._isCompound){var e=this._children[r];if(e)return Jr.keys(e)}else{if(r===z0)return this.nodes();if(this.hasNode(r))return[]}};jn.prototype.predecessors=function(r){var e=this._preds[r];if(e)return Jr.keys(e)};jn.prototype.successors=function(r){var e=this._sucs[r];if(e)return Jr.keys(e)};jn.prototype.neighbors=function(r){var e=this.predecessors(r);if(e)return Jr.union(e,this.successors(r))};jn.prototype.isLeaf=function(r){var e;return this.isDirected()?e=this.successors(r):e=this.neighbors(r),e.length===0};jn.prototype.filterNodes=function(r){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph()),Jr.each(this._nodes,Jr.bind(function(a,o){r(o)&&e.setNode(o,a)},this)),Jr.each(this._edgeObjs,Jr.bind(function(a){e.hasNode(a.v)&&e.hasNode(a.w)&&e.setEdge(a,this.edge(a))},this));var t=this,n={};function i(a){var o=t.parent(a);return o===void 0||e.hasNode(o)?(n[a]=o,o):o in n?n[o]:i(o)}return this._isCompound&&Jr.each(e.nodes(),function(a){e.setParent(a,i(a))}),e};jn.prototype.setDefaultEdgeLabel=function(r){return Jr.isFunction(r)||(r=Jr.constant(r)),this._defaultEdgeLabelFn=r,this};jn.prototype.edgeCount=function(){return this._edgeCount};jn.prototype.edges=function(){return Jr.values(this._edgeObjs)};jn.prototype.setPath=function(r,e){var t=this,n=arguments;return Jr.reduce(r,function(i,a){return n.length>1?t.setEdge(i,a,e):t.setEdge(i,a),a}),this};jn.prototype.setEdge=function(){var r,e,t,n,i=!1,a=arguments[0];typeof a=="object"&&a!==null&&"v"in a?(r=a.v,e=a.w,t=a.name,arguments.length===2&&(n=arguments[1],i=!0)):(r=a,e=arguments[1],t=arguments[3],arguments.length>2&&(n=arguments[2],i=!0)),r=""+r,e=""+e,Jr.isUndefined(t)||(t=""+t);var o=mM(this._isDirected,r,e,t);if(Jr.has(this._edgeLabels,o))return i&&(this._edgeLabels[o]=n),this;if(!Jr.isUndefined(t)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(r),this.setNode(e),this._edgeLabels[o]=i?n:this._defaultEdgeLabelFn(r,e,t);var s=Kre(this._isDirected,r,e,t);return r=s.v,e=s.w,Object.freeze(s),this._edgeObjs[o]=s,Tpt(this._preds[e],r),Tpt(this._sucs[r],e),this._in[e][o]=s,this._out[r][o]=s,this._edgeCount++,this};jn.prototype.edge=function(r,e,t){var n=arguments.length===1?w8(this._isDirected,arguments[0]):mM(this._isDirected,r,e,t);return this._edgeLabels[n]};jn.prototype.hasEdge=function(r,e,t){var n=arguments.length===1?w8(this._isDirected,arguments[0]):mM(this._isDirected,r,e,t);return Jr.has(this._edgeLabels,n)};jn.prototype.removeEdge=function(r,e,t){var n=arguments.length===1?w8(this._isDirected,arguments[0]):mM(this._isDirected,r,e,t),i=this._edgeObjs[n];return i&&(r=i.v,e=i.w,delete this._edgeLabels[n],delete this._edgeObjs[n],Ipt(this._preds[e],r),Ipt(this._sucs[r],e),delete this._in[e][n],delete this._out[r][n],this._edgeCount--),this};jn.prototype.inEdges=function(r,e){var t=this._in[r];if(t){var n=Jr.values(t);return e?Jr.filter(n,function(i){return i.v===e}):n}};jn.prototype.outEdges=function(r,e){var t=this._out[r];if(t){var n=Jr.values(t);return e?Jr.filter(n,function(i){return i.w===e}):n}};jn.prototype.nodeEdges=function(r,e){var t=this.inEdges(r,e);if(t)return t.concat(this.outEdges(r,e))};function Tpt(r,e){r[e]?r[e]++:r[e]=1}function Ipt(r,e){--r[e]||delete r[e]}function mM(r,e,t,n){var i=""+e,a=""+t;if(!r&&i>a){var o=i;i=a,a=o}return i+Mpt+a+Mpt+(Jr.isUndefined(n)?qre:n)}function Kre(r,e,t,n){var i=""+e,a=""+t;if(!r&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return n&&(s.name=n),s}function w8(r,e){return mM(r,e.v,e.w,e.name)}});var Dpt=ft((Awr,Opt)=>{Opt.exports="2.1.4"});var kpt=ft((Mwr,Ppt)=>{Ppt.exports={Graph:hR(),version:Dpt()}});var Npt=ft((Twr,Rpt)=>{var Qh=Mu(),Zre=hR();Rpt.exports={write:$re,read:tne};function $re(r){var e={options:{directed:r.isDirected(),multigraph:r.isMultigraph(),compound:r.isCompound()},nodes:Qre(r),edges:Jre(r)};return Qh.isUndefined(r.graph())||(e.value=Qh.clone(r.graph())),e}function Qre(r){return Qh.map(r.nodes(),function(e){var t=r.node(e),n=r.parent(e),i={v:e};return Qh.isUndefined(t)||(i.value=t),Qh.isUndefined(n)||(i.parent=n),i})}function Jre(r){return Qh.map(r.edges(),function(e){var t=r.edge(e),n={v:e.v,w:e.w};return Qh.isUndefined(e.name)||(n.name=e.name),Qh.isUndefined(t)||(n.value=t),n})}function tne(r){var e=new Zre(r.options).setGraph(r.value);return Qh.each(r.nodes,function(t){e.setNode(t.v,t.value),t.parent&&e.setParent(t.v,t.parent)}),Qh.each(r.edges,function(t){e.setEdge({v:t.v,w:t.w,name:t.name},t.value)}),e}});var Bpt=ft((Iwr,Fpt)=>{var dR=Mu();Fpt.exports=ene;function ene(r){var e={},t=[],n;function i(a){dR.has(e,a)||(e[a]=!0,n.push(a),dR.each(r.successors(a),i),dR.each(r.predecessors(a),i))}return dR.each(r.nodes(),function(a){n=[],i(a),n.length&&t.push(n)}),t}});var E8=ft((Lwr,zpt)=>{var Gpt=Mu();zpt.exports=gf;function gf(){this._arr=[],this._keyIndices={}}gf.prototype.size=function(){return this._arr.length};gf.prototype.keys=function(){return this._arr.map(function(r){return r.key})};gf.prototype.has=function(r){return Gpt.has(this._keyIndices,r)};gf.prototype.priority=function(r){var e=this._keyIndices[r];if(e!==void 0)return this._arr[e].priority};gf.prototype.min=function(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key};gf.prototype.add=function(r,e){var t=this._keyIndices;if(r=String(r),!Gpt.has(t,r)){var n=this._arr,i=n.length;return t[r]=i,n.push({key:r,priority:e}),this._decrease(i),!0}return!1};gf.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var r=this._arr.pop();return delete this._keyIndices[r.key],this._heapify(0),r.key};gf.prototype.decrease=function(r,e){var t=this._keyIndices[r];if(e>this._arr[t].priority)throw new Error("New priority is greater than current priority. Key: "+r+" Old: "+this._arr[t].priority+" New: "+e);this._arr[t].priority=e,this._decrease(t)};gf.prototype._heapify=function(r){var e=this._arr,t=2*r,n=t+1,i=r;t>1,!(e[n].priority{var rne=Mu(),nne=E8();Upt.exports=ane;var ine=rne.constant(1);function ane(r,e,t,n){return one(r,String(e),t||ine,n||function(i){return r.outEdges(i)})}function one(r,e,t,n){var i={},a=new nne,o,s,l=function(u){var f=u.v!==o?u.v:u.w,c=i[f],h=t(u),d=s.distance+h;if(h<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+u+" Weight: "+h);d0&&(o=a.removeMin(),s=i[o],s.distance!==Number.POSITIVE_INFINITY);)n(o).forEach(l);return i}});var Wpt=ft((Dwr,jpt)=>{var sne=A8(),lne=Mu();jpt.exports=une;function une(r,e,t){return lne.transform(r.nodes(),function(n,i){n[i]=sne(r,i,e,t)},{})}});var M8=ft((Pwr,Hpt)=>{var Vpt=Mu();Hpt.exports=fne;function fne(r){var e=0,t=[],n={},i=[];function a(o){var s=n[o]={onStack:!0,lowlink:e,index:e++};if(t.push(o),r.successors(o).forEach(function(f){Vpt.has(n,f)?n[f].onStack&&(s.lowlink=Math.min(s.lowlink,n[f].index)):(a(f),s.lowlink=Math.min(s.lowlink,n[f].lowlink))}),s.lowlink===s.index){var l=[],u;do u=t.pop(),n[u].onStack=!1,l.push(u);while(o!==u);i.push(l)}}return r.nodes().forEach(function(o){Vpt.has(n,o)||a(o)}),i}});var Xpt=ft((kwr,Ypt)=>{var cne=Mu(),hne=M8();Ypt.exports=dne;function dne(r){return cne.filter(hne(r),function(e){return e.length>1||e.length===1&&r.hasEdge(e[0],e[0])})}});var Kpt=ft((Rwr,qpt)=>{var pne=Mu();qpt.exports=mne;var vne=pne.constant(1);function mne(r,e,t){return gne(r,e||vne,t||function(n){return r.outEdges(n)})}function gne(r,e,t){var n={},i=r.nodes();return i.forEach(function(a){n[a]={},n[a][a]={distance:0},i.forEach(function(o){a!==o&&(n[a][o]={distance:Number.POSITIVE_INFINITY})}),t(a).forEach(function(o){var s=o.v===a?o.w:o.v,l=e(o);n[a][s]={distance:l,predecessor:a}})}),i.forEach(function(a){var o=n[a];i.forEach(function(s){var l=n[s];i.forEach(function(u){var f=l[a],c=o[u],h=l[u],d=f.distance+c.distance;d{var gM=Mu();$pt.exports=Zpt;Zpt.CycleException=T8;function Zpt(r){var e={},t={},n=[];function i(a){if(gM.has(t,a))throw new T8;gM.has(e,a)||(t[a]=!0,e[a]=!0,gM.each(r.predecessors(a),i),delete t[a],n.push(a))}if(gM.each(r.sinks(),i),gM.size(e)!==r.nodeCount())throw new T8;return n}function T8(){}});var tvt=ft((Fwr,Jpt)=>{var Qpt=I8();Jpt.exports=yne;function yne(r){try{Qpt(r)}catch(e){if(e instanceof Qpt.CycleException)return!1;throw e}return!0}});var L8=ft((Bwr,rvt)=>{var pR=Mu();rvt.exports=xne;function xne(r,e,t){pR.isArray(e)||(e=[e]);var n=(r.isDirected()?r.successors:r.neighbors).bind(r),i=[],a={};return pR.each(e,function(o){if(!r.hasNode(o))throw new Error("Graph does not have node: "+o);evt(r,o,t==="post",a,n,i)}),i}function evt(r,e,t,n,i,a){pR.has(n,e)||(n[e]=!0,t||a.push(e),pR.each(i(e),function(o){evt(r,o,t,n,i,a)}),t&&a.push(e))}});var ivt=ft((Gwr,nvt)=>{var bne=L8();nvt.exports=_ne;function _ne(r,e){return bne(r,e,"post")}});var ovt=ft((zwr,avt)=>{var Sne=L8();avt.exports=Cne;function Cne(r,e){return Sne(r,e,"pre")}});var uvt=ft((Uwr,lvt)=>{var svt=Mu(),wne=hR(),Ene=E8();lvt.exports=Ane;function Ane(r,e){var t=new wne,n={},i=new Ene,a;function o(l){var u=l.v===a?l.w:l.v,f=i.priority(u);if(f!==void 0){var c=e(l);c0;){if(a=i.removeMin(),svt.has(n,a))t.setEdge(a,n[a]);else{if(s)throw new Error("Input graph is not connected: "+r);s=!0}r.nodeEdges(a).forEach(o)}return t}});var cvt=ft((jwr,fvt)=>{fvt.exports={components:Bpt(),dijkstra:A8(),dijkstraAll:Wpt(),findCycles:Xpt(),floydWarshall:Kpt(),isAcyclic:tvt(),postorder:ivt(),preorder:ovt(),prim:uvt(),tarjan:M8(),topsort:I8()}});var pvt=ft((Wwr,dvt)=>{var hvt=kpt();dvt.exports={Graph:hvt.Graph,json:Npt(),alg:cvt(),version:hvt.version}});var Umt=ft((SMr,iH)=>{var nH=function(r){"use strict";var e=Object.prototype,t=e.hasOwnProperty,n,i=typeof Symbol=="function"?Symbol:{},a=i.iterator||"@@iterator",o=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function l(D,N,z){return Object.defineProperty(D,N,{value:z,enumerable:!0,configurable:!0,writable:!0}),D[N]}try{l({},"")}catch(D){l=function(N,z,j){return N[z]=j}}function u(D,N,z,j){var W=N&&N.prototype instanceof m?N:m,J=Object.create(W.prototype),et=new F(j||[]);return J._invoke=P(D,z,et),J}r.wrap=u;function f(D,N,z){try{return{type:"normal",arg:D.call(N,z)}}catch(j){return{type:"throw",arg:j}}}var c="suspendedStart",h="suspendedYield",d="executing",p="completed",v={};function m(){}function g(){}function x(){}var b={};l(b,a,function(){return this});var S=Object.getPrototypeOf,C=S&&S(S(k([])));C&&C!==e&&t.call(C,a)&&(b=C);var w=x.prototype=m.prototype=Object.create(b);g.prototype=x,l(w,"constructor",x),l(x,"constructor",g),g.displayName=l(x,s,"GeneratorFunction");function A(D){["next","throw","return"].forEach(function(N){l(D,N,function(z){return this._invoke(N,z)})})}r.isGeneratorFunction=function(D){var N=typeof D=="function"&&D.constructor;return N?N===g||(N.displayName||N.name)==="GeneratorFunction":!1},r.mark=function(D){return Object.setPrototypeOf?Object.setPrototypeOf(D,x):(D.__proto__=x,l(D,s,"GeneratorFunction")),D.prototype=Object.create(w),D},r.awrap=function(D){return{__await:D}};function I(D,N){function z(J,et,lt,$){var st=f(D[J],D,et);if(st.type==="throw")$(st.arg);else{var _t=st.arg,dt=_t.value;return dt&&typeof dt=="object"&&t.call(dt,"__await")?N.resolve(dt.__await).then(function(vt){z("next",vt,lt,$)},function(vt){z("throw",vt,lt,$)}):N.resolve(dt).then(function(vt){_t.value=vt,lt(_t)},function(vt){return z("throw",vt,lt,$)})}}var j;function W(J,et){function lt(){return new N(function($,st){z(J,et,$,st)})}return j=j?j.then(lt,lt):lt()}this._invoke=W}A(I.prototype),l(I.prototype,o,function(){return this}),r.AsyncIterator=I,r.async=function(D,N,z,j,W){W===void 0&&(W=Promise);var J=new I(u(D,N,z,j),W);return r.isGeneratorFunction(N)?J:J.next().then(function(et){return et.done?et.value:J.next()})};function P(D,N,z){var j=c;return function(J,et){if(j===d)throw new Error("Generator is already running");if(j===p){if(J==="throw")throw et;return G()}for(z.method=J,z.arg=et;;){var lt=z.delegate;if(lt){var $=L(lt,z);if($){if($===v)continue;return $}}if(z.method==="next")z.sent=z._sent=z.arg;else if(z.method==="throw"){if(j===c)throw j=p,z.arg;z.dispatchException(z.arg)}else z.method==="return"&&z.abrupt("return",z.arg);j=d;var st=f(D,N,z);if(st.type==="normal"){if(j=z.done?p:h,st.arg===v)continue;return{value:st.arg,done:z.done}}else st.type==="throw"&&(j=p,z.method="throw",z.arg=st.arg)}}}function L(D,N){var z=D.iterator[N.method];if(z===n){if(N.delegate=null,N.method==="throw"){if(D.iterator.return&&(N.method="return",N.arg=n,L(D,N),N.method==="throw"))return v;N.method="throw",N.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var j=f(z,D.iterator,N.arg);if(j.type==="throw")return N.method="throw",N.arg=j.arg,N.delegate=null,v;var W=j.arg;if(!W)return N.method="throw",N.arg=new TypeError("iterator result is not an object"),N.delegate=null,v;if(W.done)N[D.resultName]=W.value,N.next=D.nextLoc,N.method!=="return"&&(N.method="next",N.arg=n);else return W;return N.delegate=null,v}A(w),l(w,s,"Generator"),l(w,a,function(){return this}),l(w,"toString",function(){return"[object Generator]"});function M(D){var N={tryLoc:D[0]};1 in D&&(N.catchLoc=D[1]),2 in D&&(N.finallyLoc=D[2],N.afterLoc=D[3]),this.tryEntries.push(N)}function O(D){var N=D.completion||{};N.type="normal",delete N.arg,D.completion=N}function F(D){this.tryEntries=[{tryLoc:"root"}],D.forEach(M,this),this.reset(!0)}r.keys=function(D){var N=[];for(var z in D)N.push(z);return N.reverse(),function j(){for(;N.length;){var W=N.pop();if(W in D)return j.value=W,j.done=!1,j}return j.done=!0,j}};function k(D){if(D){var N=D[a];if(N)return N.call(D);if(typeof D.next=="function")return D;if(!isNaN(D.length)){var z=-1,j=function W(){for(;++z=0;--j){var W=this.tryEntries[j],J=W.completion;if(W.tryLoc==="root")return z("end");if(W.tryLoc<=this.prev){var et=t.call(W,"catchLoc"),lt=t.call(W,"finallyLoc");if(et&<){if(this.prev=0;--z){var j=this.tryEntries[z];if(j.tryLoc<=this.prev&&t.call(j,"finallyLoc")&&this.prev=0;--N){var z=this.tryEntries[N];if(z.finallyLoc===D)return this.complete(z.completion,z.afterLoc),O(z),v}},catch:function(D){for(var N=this.tryEntries.length-1;N>=0;--N){var z=this.tryEntries[N];if(z.tryLoc===D){var j=z.completion;if(j.type==="throw"){var W=j.arg;O(z)}return W}}throw new Error("illegal catch attempt")},delegateYield:function(D,N,z){return this.delegate={iterator:k(D),resultName:N,nextLoc:z},this.method==="next"&&(this.arg=n),v}},r}(typeof iH=="object"?iH.exports:{});try{regeneratorRuntime=nH}catch(r){typeof globalThis=="object"?globalThis.regeneratorRuntime=nH:Function("r","regeneratorRuntime = r")(nH)}});var Ka=ft((CMr,jmt)=>{jmt.exports=Umt()});var To=ft(yi=>{"use strict";Object.defineProperty(yi,"__esModule",{value:!0});yi.NON_CUSTOM_TAG_KEYS=yi.POST_CONSTRUCT=yi.DESIGN_PARAM_TYPES=yi.PARAM_TYPES=yi.TAGGED_PROP=yi.TAGGED=yi.MULTI_INJECT_TAG=yi.INJECT_TAG=yi.OPTIONAL_TAG=yi.UNMANAGED_TAG=yi.NAME_TAG=yi.NAMED_TAG=void 0;yi.NAMED_TAG="named";yi.NAME_TAG="name";yi.UNMANAGED_TAG="unmanaged";yi.OPTIONAL_TAG="optional";yi.INJECT_TAG="inject";yi.MULTI_INJECT_TAG="multi_inject";yi.TAGGED="inversify:tagged";yi.TAGGED_PROP="inversify:tagged_props";yi.PARAM_TYPES="inversify:paramtypes";yi.DESIGN_PARAM_TYPES="design:paramtypes";yi.POST_CONSTRUCT="post_construct";function Cae(){return[yi.INJECT_TAG,yi.MULTI_INJECT_TAG,yi.NAME_TAG,yi.UNMANAGED_TAG,yi.NAMED_TAG,yi.OPTIONAL_TAG]}yi.NON_CUSTOM_TAG_KEYS=Cae()});var td=ft(_g=>{"use strict";Object.defineProperty(_g,"__esModule",{value:!0});_g.TargetTypeEnum=_g.BindingTypeEnum=_g.BindingScopeEnum=void 0;var wae={Request:"Request",Singleton:"Singleton",Transient:"Transient"};_g.BindingScopeEnum=wae;var Eae={ConstantValue:"ConstantValue",Constructor:"Constructor",DynamicValue:"DynamicValue",Factory:"Factory",Function:"Function",Instance:"Instance",Invalid:"Invalid",Provider:"Provider"};_g.BindingTypeEnum=Eae;var Aae={ClassProperty:"ClassProperty",ConstructorArgument:"ConstructorArgument",Variable:"Variable"};_g.TargetTypeEnum=Aae});var Sg=ft(CR=>{"use strict";Object.defineProperty(CR,"__esModule",{value:!0});CR.id=void 0;var Mae=0;function Tae(){return Mae++}CR.id=Tae});var Ymt=ft(wR=>{"use strict";Object.defineProperty(wR,"__esModule",{value:!0});wR.Binding=void 0;var Hmt=td(),Iae=Sg(),Lae=function(){function r(e,t){this.id=Iae.id(),this.activated=!1,this.serviceIdentifier=e,this.scope=t,this.type=Hmt.BindingTypeEnum.Invalid,this.constraint=function(n){return!0},this.implementationType=null,this.cache=null,this.factory=null,this.provider=null,this.onActivation=null,this.dynamicValue=null}return r.prototype.clone=function(){var e=new r(this.serviceIdentifier,this.scope);return e.activated=e.scope===Hmt.BindingScopeEnum.Singleton?this.activated:!1,e.implementationType=this.implementationType,e.dynamicValue=this.dynamicValue,e.scope=this.scope,e.type=this.type,e.factory=this.factory,e.provider=this.provider,e.constraint=this.constraint,e.onActivation=this.onActivation,e.cache=this.cache,e},r}();wR.Binding=Lae});var ql=ft(zr=>{"use strict";Object.defineProperty(zr,"__esModule",{value:!0});zr.STACK_OVERFLOW=zr.CIRCULAR_DEPENDENCY_IN_FACTORY=zr.POST_CONSTRUCT_ERROR=zr.MULTIPLE_POST_CONSTRUCT_METHODS=zr.CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK=zr.CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE=zr.CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE=zr.CONTAINER_OPTIONS_MUST_BE_AN_OBJECT=zr.ARGUMENTS_LENGTH_MISMATCH=zr.INVALID_DECORATOR_OPERATION=zr.INVALID_TO_SELF_VALUE=zr.INVALID_FUNCTION_BINDING=zr.INVALID_MIDDLEWARE_RETURN=zr.NO_MORE_SNAPSHOTS_AVAILABLE=zr.INVALID_BINDING_TYPE=zr.NOT_IMPLEMENTED=zr.CIRCULAR_DEPENDENCY=zr.UNDEFINED_INJECT_ANNOTATION=zr.MISSING_INJECT_ANNOTATION=zr.MISSING_INJECTABLE_ANNOTATION=zr.NOT_REGISTERED=zr.CANNOT_UNBIND=zr.AMBIGUOUS_MATCH=zr.KEY_NOT_FOUND=zr.NULL_ARGUMENT=zr.DUPLICATED_METADATA=zr.DUPLICATED_INJECTABLE_DECORATOR=void 0;zr.DUPLICATED_INJECTABLE_DECORATOR="Cannot apply @injectable decorator multiple times.";zr.DUPLICATED_METADATA="Metadata key was used more than once in a parameter:";zr.NULL_ARGUMENT="NULL argument";zr.KEY_NOT_FOUND="Key Not Found";zr.AMBIGUOUS_MATCH="Ambiguous match found for serviceIdentifier:";zr.CANNOT_UNBIND="Could not unbind serviceIdentifier:";zr.NOT_REGISTERED="No matching bindings found for serviceIdentifier:";zr.MISSING_INJECTABLE_ANNOTATION="Missing required @injectable annotation in:";zr.MISSING_INJECT_ANNOTATION="Missing required @inject or @multiInject annotation in:";var Oae=function(r){return"@inject called with undefined this could mean that the class "+r+" has a circular dependency problem. You can use a LazyServiceIdentifer to overcome this limitation."};zr.UNDEFINED_INJECT_ANNOTATION=Oae;zr.CIRCULAR_DEPENDENCY="Circular dependency found:";zr.NOT_IMPLEMENTED="Sorry, this feature is not fully implemented yet.";zr.INVALID_BINDING_TYPE="Invalid binding type:";zr.NO_MORE_SNAPSHOTS_AVAILABLE="No snapshot available to restore.";zr.INVALID_MIDDLEWARE_RETURN="Invalid return type in middleware. Middleware must return!";zr.INVALID_FUNCTION_BINDING="Value provided to function binding must be a function!";zr.INVALID_TO_SELF_VALUE="The toSelf function can only be applied when a constructor is used as service identifier";zr.INVALID_DECORATOR_OPERATION="The @inject @multiInject @tagged and @named decorators must be applied to the parameters of a class constructor or a class property.";var Dae=function(){for(var r=[],e=0;e= than the number of constructor arguments of its base class.")};zr.ARGUMENTS_LENGTH_MISMATCH=Dae;zr.CONTAINER_OPTIONS_MUST_BE_AN_OBJECT="Invalid Container constructor argument. Container options must be an object.";zr.CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE="Invalid Container option. Default scope must be a string ('singleton' or 'transient').";zr.CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE="Invalid Container option. Auto bind injectable must be a boolean";zr.CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK="Invalid Container option. Skip base check must be a boolean";zr.MULTIPLE_POST_CONSTRUCT_METHODS="Cannot apply @postConstruct decorator multiple times in the same class";var Pae=function(){for(var r=[],e=0;e{"use strict";Object.defineProperty(ER,"__esModule",{value:!0});ER.MetadataReader=void 0;var uH=To(),Rae=function(){function r(){}return r.prototype.getConstructorMetadata=function(e){var t=Reflect.getMetadata(uH.PARAM_TYPES,e),n=Reflect.getMetadata(uH.TAGGED,e);return{compilerGeneratedMetadata:t,userGeneratedMetadata:n||{}}},r.prototype.getPropertiesMetadata=function(e){var t=Reflect.getMetadata(uH.TAGGED_PROP,e)||[];return t},r}();ER.MetadataReader=Rae});var Xmt=ft(AR=>{"use strict";Object.defineProperty(AR,"__esModule",{value:!0});AR.BindingCount=void 0;var Nae={MultipleBindingsAvailable:2,NoBindingsAvailable:0,OnlyOneBindingAvailable:1};AR.BindingCount=Nae});var cH=ft(MR=>{"use strict";Object.defineProperty(MR,"__esModule",{value:!0});MR.isStackOverflowExeption=void 0;var Fae=ql();function Bae(r){return r instanceof RangeError||r.message===Fae.STACK_OVERFLOW}MR.isStackOverflowExeption=Bae});var Z_=ft(bf=>{"use strict";Object.defineProperty(bf,"__esModule",{value:!0});bf.circularDependencyToException=bf.listMetadataForTarget=bf.listRegisteredBindingsForServiceIdentifier=bf.getServiceIdentifierAsString=bf.getFunctionName=void 0;var Gae=ql();function qmt(r){if(typeof r=="function"){var e=r;return e.name}else{if(typeof r=="symbol")return r.toString();var e=r;return e}}bf.getServiceIdentifierAsString=qmt;function zae(r,e,t){var n="",i=t(r,e);return i.length!==0&&(n=` +Registered bindings:`,i.forEach(function(a){var o="Object";a.implementationType!==null&&(o=$mt(a.implementationType)),n=n+` + `+o,a.constraint.metaData&&(n=n+" - "+a.constraint.metaData)})),n}bf.listRegisteredBindingsForServiceIdentifier=zae;function Kmt(r,e){return r.parentRequest===null?!1:r.parentRequest.serviceIdentifier===e?!0:Kmt(r.parentRequest,e)}function Uae(r){function e(n,i){i===void 0&&(i=[]);var a=qmt(n.serviceIdentifier);return i.push(a),n.parentRequest!==null?e(n.parentRequest,i):i}var t=e(r);return t.reverse().join(" --> ")}function Zmt(r){r.childRequests.forEach(function(e){if(Kmt(e,e.serviceIdentifier)){var t=Uae(e);throw new Error(Gae.CIRCULAR_DEPENDENCY+" "+t)}else Zmt(e)})}bf.circularDependencyToException=Zmt;function jae(r,e){if(e.isTagged()||e.isNamed()){var t="",n=e.getNamedTag(),i=e.getCustomTags();return n!==null&&(t+=n.toString()+` +`),i!==null&&i.forEach(function(a){t+=a.toString()+` +`})," "+r+` + `+r+" - "+t}else return" "+r}bf.listMetadataForTarget=jae;function $mt(r){if(r.name)return r.name;var e=r.toString(),t=e.match(/^function\s*([^\s(]+)/);return t?t[1]:"Anonymous function: "+e}bf.getFunctionName=$mt});var Qmt=ft(TR=>{"use strict";Object.defineProperty(TR,"__esModule",{value:!0});TR.Context=void 0;var Wae=Sg(),Vae=function(){function r(e){this.id=Wae.id(),this.container=e}return r.prototype.addPlan=function(e){this.plan=e},r.prototype.setCurrentRequest=function(e){this.currentRequest=e},r}();TR.Context=Vae});var _f=ft(IR=>{"use strict";Object.defineProperty(IR,"__esModule",{value:!0});IR.Metadata=void 0;var Hae=To(),Yae=function(){function r(e,t){this.key=e,this.value=t}return r.prototype.toString=function(){return this.key===Hae.NAMED_TAG?"named: "+this.value.toString()+" ":"tagged: { key:"+this.key.toString()+", value: "+this.value+" }"},r}();IR.Metadata=Yae});var Jmt=ft(LR=>{"use strict";Object.defineProperty(LR,"__esModule",{value:!0});LR.Plan=void 0;var Xae=function(){function r(e,t){this.parentContext=e,this.rootRequest=t}return r}();LR.Plan=Xae});var Up=ft(Cg=>{"use strict";Object.defineProperty(Cg,"__esModule",{value:!0});Cg.tagProperty=Cg.tagParameter=Cg.decorate=void 0;var tgt=ql(),egt=To();function qae(r,e,t,n){var i=egt.TAGGED;rgt(i,r,e,n,t)}Cg.tagParameter=qae;function Kae(r,e,t){var n=egt.TAGGED_PROP;rgt(n,r.constructor,e,t)}Cg.tagProperty=Kae;function rgt(r,e,t,n,i){var a={},o=typeof i=="number",s=i!==void 0&&o?i.toString():t;if(o&&t!==void 0)throw new Error(tgt.INVALID_DECORATOR_OPERATION);Reflect.hasOwnMetadata(r,e)&&(a=Reflect.getMetadata(r,e));var l=a[s];if(!Array.isArray(l))l=[];else for(var u=0,f=l;u{"use strict";Object.defineProperty($_,"__esModule",{value:!0});$_.inject=$_.LazyServiceIdentifer=void 0;var Qae=ql(),Jae=To(),toe=_f(),igt=Up(),eoe=function(){function r(e){this._cb=e}return r.prototype.unwrap=function(){return this._cb()},r}();$_.LazyServiceIdentifer=eoe;function roe(r){return function(e,t,n){if(r===void 0)throw new Error(Qae.UNDEFINED_INJECT_ANNOTATION(e.name));var i=new toe.Metadata(Jae.INJECT_TAG,r);typeof n=="number"?igt.tagParameter(e,t,n,i):igt.tagProperty(e,t,i)}}$_.inject=roe});var agt=ft(OR=>{"use strict";Object.defineProperty(OR,"__esModule",{value:!0});OR.QueryableString=void 0;var noe=function(){function r(e){this.str=e}return r.prototype.startsWith=function(e){return this.str.indexOf(e)===0},r.prototype.endsWith=function(e){var t="",n=e.split("").reverse().join("");return t=this.str.split("").reverse().join(""),this.startsWith.call({str:t},n)},r.prototype.contains=function(e){return this.str.indexOf(e)!==-1},r.prototype.equals=function(e){return this.str===e},r.prototype.value=function(){return this.str},r}();OR.QueryableString=noe});var dH=ft(DR=>{"use strict";Object.defineProperty(DR,"__esModule",{value:!0});DR.Target=void 0;var jp=To(),ioe=Sg(),ogt=_f(),aoe=agt(),ooe=function(){function r(e,t,n,i){this.id=ioe.id(),this.type=e,this.serviceIdentifier=n,this.name=new aoe.QueryableString(t||""),this.metadata=new Array;var a=null;typeof i=="string"?a=new ogt.Metadata(jp.NAMED_TAG,i):i instanceof ogt.Metadata&&(a=i),a!==null&&this.metadata.push(a)}return r.prototype.hasTag=function(e){for(var t=0,n=this.metadata;t{"use strict";var PR=ed&&ed.__spreadArray||function(r,e){for(var t=0,n=e.length,i=r.length;t0,f=l.length>t.length,c=u||f?l.length:t.length,h=foe(n,e,a,s,c),d=cgt(r,t),p=PR(PR([],h),d);return p}function uoe(r,e,t,n,i){var a=i[r.toString()]||[],o=dgt(a),s=o.unmanaged!==!0,l=n[r],u=o.inject||o.multiInject;if(l=u||l,l instanceof soe.LazyServiceIdentifer&&(l=l.unwrap()),s){var f=l===Object,c=l===Function,h=l===void 0,d=f||c||h;if(!e&&d){var p=sgt.MISSING_INJECT_ANNOTATION+" argument "+r+" in class "+t+".";throw new Error(p)}var v=new ugt.Target(lgt.TargetTypeEnum.ConstructorArgument,o.targetName,l);return v.metadata=a,v}return null}function foe(r,e,t,n,i){for(var a=[],o=0;o0?s:hgt(r,t)}else return 0}ed.getBaseClassDependencyCount=hgt;function dgt(r){var e={};return r.forEach(function(t){e[t.key.toString()]=t.value}),{inject:e[SM.INJECT_TAG],multiInject:e[SM.MULTI_INJECT_TAG],targetName:e[SM.NAME_TAG],unmanaged:e[SM.UNMANAGED_TAG]}}});var vgt=ft(kR=>{"use strict";Object.defineProperty(kR,"__esModule",{value:!0});kR.Request=void 0;var coe=Sg(),hoe=function(){function r(e,t,n,i,a){this.id=coe.id(),this.serviceIdentifier=e,this.parentContext=t,this.parentRequest=n,this.target=a,this.childRequests=[],this.bindings=Array.isArray(i)?i:[i],this.requestScope=n===null?new Map:null}return r.prototype.addChildRequest=function(e,t,n){var i=new r(e,this.parentContext,this,t,n);return this.childRequests.push(i),i},r}();kR.Request=hoe});var Cgt=ft(wg=>{"use strict";Object.defineProperty(wg,"__esModule",{value:!0});wg.getBindingDictionary=wg.createMockRequest=wg.plan=void 0;var RR=Xmt(),vH=ql(),mgt=td(),ggt=To(),doe=cH(),Q_=Z_(),ygt=Qmt(),mH=_f(),poe=Jmt(),gH=pgt(),yH=vgt(),xgt=dH();function bgt(r){return r._bindingDictionary}wg.getBindingDictionary=bgt;function voe(r,e,t,n,i,a){var o=r?ggt.MULTI_INJECT_TAG:ggt.INJECT_TAG,s=new mH.Metadata(o,t),l=new xgt.Target(e,n,t,s);if(i!==void 0){var u=new mH.Metadata(i,a);l.metadata.push(u)}return l}function _gt(r,e,t,n,i){var a=CM(t.container,i.serviceIdentifier),o=[];return a.length===RR.BindingCount.NoBindingsAvailable&&t.container.options.autoBindInjectable&&typeof i.serviceIdentifier=="function"&&r.getConstructorMetadata(i.serviceIdentifier).compilerGeneratedMetadata&&(t.container.bind(i.serviceIdentifier).toSelf(),a=CM(t.container,i.serviceIdentifier)),e?o=a:o=a.filter(function(s){var l=new yH.Request(s.serviceIdentifier,t,n,s,i);return s.constraint(l)}),moe(i.serviceIdentifier,o,i,t.container),o}function moe(r,e,t,n){switch(e.length){case RR.BindingCount.NoBindingsAvailable:if(t.isOptional())return e;var i=Q_.getServiceIdentifierAsString(r),a=vH.NOT_REGISTERED;throw a+=Q_.listMetadataForTarget(i,t),a+=Q_.listRegisteredBindingsForServiceIdentifier(n,i,CM),new Error(a);case RR.BindingCount.OnlyOneBindingAvailable:if(!t.isArray())return e;case RR.BindingCount.MultipleBindingsAvailable:default:if(t.isArray())return e;var i=Q_.getServiceIdentifierAsString(r),a=vH.AMBIGUOUS_MATCH+" "+i;throw a+=Q_.listRegisteredBindingsForServiceIdentifier(n,i,CM),new Error(a)}}function Sgt(r,e,t,n,i,a){var o,s;if(i===null){o=_gt(r,e,n,null,a),s=new yH.Request(t,n,null,o,a);var l=new poe.Plan(n,s);n.addPlan(l)}else o=_gt(r,e,n,i,a),s=i.addChildRequest(a.serviceIdentifier,o,a);o.forEach(function(u){var f=null;if(a.isArray())f=s.addChildRequest(u.serviceIdentifier,u,a);else{if(u.cache)return;f=s}if(u.type===mgt.BindingTypeEnum.Instance&&u.implementationType!==null){var c=gH.getDependencies(r,u.implementationType);if(!n.container.options.skipBaseClassChecks){var h=gH.getBaseClassDependencyCount(r,u.implementationType);if(c.length{"use strict";var xoe=J_&&J_.__spreadArray||function(r,e){for(var t=0,n=e.length,i=r.length;t0){var i=e.filter(function(o){return o.target!==null&&o.target.type===wgt.TargetTypeEnum.ConstructorArgument}),a=i.map(t);n=Soe(r,a),n=_oe(n,e,t)}else n=new r;return Coe(r,n),n}J_.resolveInstance=woe});var Tgt=ft(NR=>{"use strict";Object.defineProperty(NR,"__esModule",{value:!0});NR.resolve=void 0;var Mgt=ql(),Wp=td(),Eoe=cH(),Aoe=Z_(),Moe=Agt(),xH=function(r,e,t){try{return t()}catch(n){throw Eoe.isStackOverflowExeption(n)?new Error(Mgt.CIRCULAR_DEPENDENCY_IN_FACTORY(r,e.toString())):n}},bH=function(r){return function(e){e.parentContext.setCurrentRequest(e);var t=e.bindings,n=e.childRequests,i=e.target&&e.target.isArray(),a=!e.parentRequest||!e.parentRequest.target||!e.target||!e.parentRequest.target.matchesArray(e.target.serviceIdentifier);if(i&&a)return n.map(function(c){var h=bH(r);return h(c)});var o=null;if(e.target.isOptional()&&t.length===0)return;var s=t[0],l=s.scope===Wp.BindingScopeEnum.Singleton,u=s.scope===Wp.BindingScopeEnum.Request;if(l&&s.activated)return s.cache;if(u&&r!==null&&r.has(s.id))return r.get(s.id);if(s.type===Wp.BindingTypeEnum.ConstantValue)o=s.cache,s.activated=!0;else if(s.type===Wp.BindingTypeEnum.Function)o=s.cache,s.activated=!0;else if(s.type===Wp.BindingTypeEnum.Constructor)o=s.implementationType;else if(s.type===Wp.BindingTypeEnum.DynamicValue&&s.dynamicValue!==null)o=xH("toDynamicValue",s.serviceIdentifier,function(){return s.dynamicValue(e.parentContext)});else if(s.type===Wp.BindingTypeEnum.Factory&&s.factory!==null)o=xH("toFactory",s.serviceIdentifier,function(){return s.factory(e.parentContext)});else if(s.type===Wp.BindingTypeEnum.Provider&&s.provider!==null)o=xH("toProvider",s.serviceIdentifier,function(){return s.provider(e.parentContext)});else if(s.type===Wp.BindingTypeEnum.Instance&&s.implementationType!==null)o=Moe.resolveInstance(s.implementationType,n,bH(r));else{var f=Aoe.getServiceIdentifierAsString(e.serviceIdentifier);throw new Error(Mgt.INVALID_BINDING_TYPE+" "+f)}return typeof s.onActivation=="function"&&(o=s.onActivation(e.parentContext,o)),l&&(s.cache=o,s.activated=!0),u&&r!==null&&!r.has(s.id)&&r.set(s.id,o),o}};function Toe(r){var e=bH(r.plan.rootRequest.requestScope);return e(r.plan.rootRequest)}NR.resolve=Toe});var _H=ft(rd=>{"use strict";Object.defineProperty(rd,"__esModule",{value:!0});rd.typeConstraint=rd.namedConstraint=rd.taggedConstraint=rd.traverseAncerstors=void 0;var Ioe=To(),Loe=_f(),Igt=function(r,e){var t=r.parentRequest;return t!==null?e(t)?!0:Igt(t,e):!1};rd.traverseAncerstors=Igt;var Lgt=function(r){return function(e){var t=function(n){return n!==null&&n.target!==null&&n.target.matchesTag(r)(e)};return t.metaData=new Loe.Metadata(r,e),t}};rd.taggedConstraint=Lgt;var Ooe=Lgt(Ioe.NAMED_TAG);rd.namedConstraint=Ooe;var Doe=function(r){return function(e){var t=null;if(e!==null)if(t=e.bindings[0],typeof r=="string"){var n=t.serviceIdentifier;return n===r}else{var i=e.bindings[0].implementationType;return r===i}return!1}};rd.typeConstraint=Doe});var BR=ft(FR=>{"use strict";Object.defineProperty(FR,"__esModule",{value:!0});FR.BindingWhenSyntax=void 0;var nl=GR(),Io=_H(),Poe=function(){function r(e){this._binding=e}return r.prototype.when=function(e){return this._binding.constraint=e,new nl.BindingOnSyntax(this._binding)},r.prototype.whenTargetNamed=function(e){return this._binding.constraint=Io.namedConstraint(e),new nl.BindingOnSyntax(this._binding)},r.prototype.whenTargetIsDefault=function(){return this._binding.constraint=function(e){var t=e.target!==null&&!e.target.isNamed()&&!e.target.isTagged();return t},new nl.BindingOnSyntax(this._binding)},r.prototype.whenTargetTagged=function(e,t){return this._binding.constraint=Io.taggedConstraint(e)(t),new nl.BindingOnSyntax(this._binding)},r.prototype.whenInjectedInto=function(e){return this._binding.constraint=function(t){return Io.typeConstraint(e)(t.parentRequest)},new nl.BindingOnSyntax(this._binding)},r.prototype.whenParentNamed=function(e){return this._binding.constraint=function(t){return Io.namedConstraint(e)(t.parentRequest)},new nl.BindingOnSyntax(this._binding)},r.prototype.whenParentTagged=function(e,t){return this._binding.constraint=function(n){return Io.taggedConstraint(e)(t)(n.parentRequest)},new nl.BindingOnSyntax(this._binding)},r.prototype.whenAnyAncestorIs=function(e){return this._binding.constraint=function(t){return Io.traverseAncerstors(t,Io.typeConstraint(e))},new nl.BindingOnSyntax(this._binding)},r.prototype.whenNoAncestorIs=function(e){return this._binding.constraint=function(t){return!Io.traverseAncerstors(t,Io.typeConstraint(e))},new nl.BindingOnSyntax(this._binding)},r.prototype.whenAnyAncestorNamed=function(e){return this._binding.constraint=function(t){return Io.traverseAncerstors(t,Io.namedConstraint(e))},new nl.BindingOnSyntax(this._binding)},r.prototype.whenNoAncestorNamed=function(e){return this._binding.constraint=function(t){return!Io.traverseAncerstors(t,Io.namedConstraint(e))},new nl.BindingOnSyntax(this._binding)},r.prototype.whenAnyAncestorTagged=function(e,t){return this._binding.constraint=function(n){return Io.traverseAncerstors(n,Io.taggedConstraint(e)(t))},new nl.BindingOnSyntax(this._binding)},r.prototype.whenNoAncestorTagged=function(e,t){return this._binding.constraint=function(n){return!Io.traverseAncerstors(n,Io.taggedConstraint(e)(t))},new nl.BindingOnSyntax(this._binding)},r.prototype.whenAnyAncestorMatches=function(e){return this._binding.constraint=function(t){return Io.traverseAncerstors(t,e)},new nl.BindingOnSyntax(this._binding)},r.prototype.whenNoAncestorMatches=function(e){return this._binding.constraint=function(t){return!Io.traverseAncerstors(t,e)},new nl.BindingOnSyntax(this._binding)},r}();FR.BindingWhenSyntax=Poe});var GR=ft(zR=>{"use strict";Object.defineProperty(zR,"__esModule",{value:!0});zR.BindingOnSyntax=void 0;var koe=BR(),Roe=function(){function r(e){this._binding=e}return r.prototype.onActivation=function(e){return this._binding.onActivation=e,new koe.BindingWhenSyntax(this._binding)},r}();zR.BindingOnSyntax=Roe});var SH=ft(UR=>{"use strict";Object.defineProperty(UR,"__esModule",{value:!0});UR.BindingWhenOnSyntax=void 0;var Noe=GR(),Foe=BR(),Boe=function(){function r(e){this._binding=e,this._bindingWhenSyntax=new Foe.BindingWhenSyntax(this._binding),this._bindingOnSyntax=new Noe.BindingOnSyntax(this._binding)}return r.prototype.when=function(e){return this._bindingWhenSyntax.when(e)},r.prototype.whenTargetNamed=function(e){return this._bindingWhenSyntax.whenTargetNamed(e)},r.prototype.whenTargetIsDefault=function(){return this._bindingWhenSyntax.whenTargetIsDefault()},r.prototype.whenTargetTagged=function(e,t){return this._bindingWhenSyntax.whenTargetTagged(e,t)},r.prototype.whenInjectedInto=function(e){return this._bindingWhenSyntax.whenInjectedInto(e)},r.prototype.whenParentNamed=function(e){return this._bindingWhenSyntax.whenParentNamed(e)},r.prototype.whenParentTagged=function(e,t){return this._bindingWhenSyntax.whenParentTagged(e,t)},r.prototype.whenAnyAncestorIs=function(e){return this._bindingWhenSyntax.whenAnyAncestorIs(e)},r.prototype.whenNoAncestorIs=function(e){return this._bindingWhenSyntax.whenNoAncestorIs(e)},r.prototype.whenAnyAncestorNamed=function(e){return this._bindingWhenSyntax.whenAnyAncestorNamed(e)},r.prototype.whenAnyAncestorTagged=function(e,t){return this._bindingWhenSyntax.whenAnyAncestorTagged(e,t)},r.prototype.whenNoAncestorNamed=function(e){return this._bindingWhenSyntax.whenNoAncestorNamed(e)},r.prototype.whenNoAncestorTagged=function(e,t){return this._bindingWhenSyntax.whenNoAncestorTagged(e,t)},r.prototype.whenAnyAncestorMatches=function(e){return this._bindingWhenSyntax.whenAnyAncestorMatches(e)},r.prototype.whenNoAncestorMatches=function(e){return this._bindingWhenSyntax.whenNoAncestorMatches(e)},r.prototype.onActivation=function(e){return this._bindingOnSyntax.onActivation(e)},r}();UR.BindingWhenOnSyntax=Boe});var Ogt=ft(jR=>{"use strict";Object.defineProperty(jR,"__esModule",{value:!0});jR.BindingInSyntax=void 0;var CH=td(),wH=SH(),Goe=function(){function r(e){this._binding=e}return r.prototype.inRequestScope=function(){return this._binding.scope=CH.BindingScopeEnum.Request,new wH.BindingWhenOnSyntax(this._binding)},r.prototype.inSingletonScope=function(){return this._binding.scope=CH.BindingScopeEnum.Singleton,new wH.BindingWhenOnSyntax(this._binding)},r.prototype.inTransientScope=function(){return this._binding.scope=CH.BindingScopeEnum.Transient,new wH.BindingWhenOnSyntax(this._binding)},r}();jR.BindingInSyntax=Goe});var Dgt=ft(WR=>{"use strict";Object.defineProperty(WR,"__esModule",{value:!0});WR.BindingInWhenOnSyntax=void 0;var zoe=Ogt(),Uoe=GR(),joe=BR(),Woe=function(){function r(e){this._binding=e,this._bindingWhenSyntax=new joe.BindingWhenSyntax(this._binding),this._bindingOnSyntax=new Uoe.BindingOnSyntax(this._binding),this._bindingInSyntax=new zoe.BindingInSyntax(e)}return r.prototype.inRequestScope=function(){return this._bindingInSyntax.inRequestScope()},r.prototype.inSingletonScope=function(){return this._bindingInSyntax.inSingletonScope()},r.prototype.inTransientScope=function(){return this._bindingInSyntax.inTransientScope()},r.prototype.when=function(e){return this._bindingWhenSyntax.when(e)},r.prototype.whenTargetNamed=function(e){return this._bindingWhenSyntax.whenTargetNamed(e)},r.prototype.whenTargetIsDefault=function(){return this._bindingWhenSyntax.whenTargetIsDefault()},r.prototype.whenTargetTagged=function(e,t){return this._bindingWhenSyntax.whenTargetTagged(e,t)},r.prototype.whenInjectedInto=function(e){return this._bindingWhenSyntax.whenInjectedInto(e)},r.prototype.whenParentNamed=function(e){return this._bindingWhenSyntax.whenParentNamed(e)},r.prototype.whenParentTagged=function(e,t){return this._bindingWhenSyntax.whenParentTagged(e,t)},r.prototype.whenAnyAncestorIs=function(e){return this._bindingWhenSyntax.whenAnyAncestorIs(e)},r.prototype.whenNoAncestorIs=function(e){return this._bindingWhenSyntax.whenNoAncestorIs(e)},r.prototype.whenAnyAncestorNamed=function(e){return this._bindingWhenSyntax.whenAnyAncestorNamed(e)},r.prototype.whenAnyAncestorTagged=function(e,t){return this._bindingWhenSyntax.whenAnyAncestorTagged(e,t)},r.prototype.whenNoAncestorNamed=function(e){return this._bindingWhenSyntax.whenNoAncestorNamed(e)},r.prototype.whenNoAncestorTagged=function(e,t){return this._bindingWhenSyntax.whenNoAncestorTagged(e,t)},r.prototype.whenAnyAncestorMatches=function(e){return this._bindingWhenSyntax.whenAnyAncestorMatches(e)},r.prototype.whenNoAncestorMatches=function(e){return this._bindingWhenSyntax.whenNoAncestorMatches(e)},r.prototype.onActivation=function(e){return this._bindingOnSyntax.onActivation(e)},r}();WR.BindingInWhenOnSyntax=Woe});var Rgt=ft(VR=>{"use strict";Object.defineProperty(VR,"__esModule",{value:!0});VR.BindingToSyntax=void 0;var Pgt=ql(),Kl=td(),kgt=Dgt(),wM=SH(),Voe=function(){function r(e){this._binding=e}return r.prototype.to=function(e){return this._binding.type=Kl.BindingTypeEnum.Instance,this._binding.implementationType=e,new kgt.BindingInWhenOnSyntax(this._binding)},r.prototype.toSelf=function(){if(typeof this._binding.serviceIdentifier!="function")throw new Error(""+Pgt.INVALID_TO_SELF_VALUE);var e=this._binding.serviceIdentifier;return this.to(e)},r.prototype.toConstantValue=function(e){return this._binding.type=Kl.BindingTypeEnum.ConstantValue,this._binding.cache=e,this._binding.dynamicValue=null,this._binding.implementationType=null,this._binding.scope=Kl.BindingScopeEnum.Singleton,new wM.BindingWhenOnSyntax(this._binding)},r.prototype.toDynamicValue=function(e){return this._binding.type=Kl.BindingTypeEnum.DynamicValue,this._binding.cache=null,this._binding.dynamicValue=e,this._binding.implementationType=null,new kgt.BindingInWhenOnSyntax(this._binding)},r.prototype.toConstructor=function(e){return this._binding.type=Kl.BindingTypeEnum.Constructor,this._binding.implementationType=e,this._binding.scope=Kl.BindingScopeEnum.Singleton,new wM.BindingWhenOnSyntax(this._binding)},r.prototype.toFactory=function(e){return this._binding.type=Kl.BindingTypeEnum.Factory,this._binding.factory=e,this._binding.scope=Kl.BindingScopeEnum.Singleton,new wM.BindingWhenOnSyntax(this._binding)},r.prototype.toFunction=function(e){if(typeof e!="function")throw new Error(Pgt.INVALID_FUNCTION_BINDING);var t=this.toConstantValue(e);return this._binding.type=Kl.BindingTypeEnum.Function,this._binding.scope=Kl.BindingScopeEnum.Singleton,t},r.prototype.toAutoFactory=function(e){return this._binding.type=Kl.BindingTypeEnum.Factory,this._binding.factory=function(t){var n=function(){return t.container.get(e)};return n},this._binding.scope=Kl.BindingScopeEnum.Singleton,new wM.BindingWhenOnSyntax(this._binding)},r.prototype.toProvider=function(e){return this._binding.type=Kl.BindingTypeEnum.Provider,this._binding.provider=e,this._binding.scope=Kl.BindingScopeEnum.Singleton,new wM.BindingWhenOnSyntax(this._binding)},r.prototype.toService=function(e){this.toDynamicValue(function(t){return t.container.get(e)})},r}();VR.BindingToSyntax=Voe});var Ngt=ft(HR=>{"use strict";Object.defineProperty(HR,"__esModule",{value:!0});HR.ContainerSnapshot=void 0;var Hoe=function(){function r(){}return r.of=function(e,t){var n=new r;return n.bindings=e,n.middleware=t,n},r}();HR.ContainerSnapshot=Hoe});var Fgt=ft(YR=>{"use strict";Object.defineProperty(YR,"__esModule",{value:!0});YR.Lookup=void 0;var Y0=ql(),Yoe=function(){function r(){this._map=new Map}return r.prototype.getMap=function(){return this._map},r.prototype.add=function(e,t){if(e==null)throw new Error(Y0.NULL_ARGUMENT);if(t==null)throw new Error(Y0.NULL_ARGUMENT);var n=this._map.get(e);n!==void 0?(n.push(t),this._map.set(e,n)):this._map.set(e,[t])},r.prototype.get=function(e){if(e==null)throw new Error(Y0.NULL_ARGUMENT);var t=this._map.get(e);if(t!==void 0)return t;throw new Error(Y0.KEY_NOT_FOUND)},r.prototype.remove=function(e){if(e==null)throw new Error(Y0.NULL_ARGUMENT);if(!this._map.delete(e))throw new Error(Y0.KEY_NOT_FOUND)},r.prototype.removeByCondition=function(e){var t=this;this._map.forEach(function(n,i){var a=n.filter(function(o){return!e(o)});a.length>0?t._map.set(i,a):t._map.delete(i)})},r.prototype.hasKey=function(e){if(e==null)throw new Error(Y0.NULL_ARGUMENT);return this._map.has(e)},r.prototype.clone=function(){var e=new r;return this._map.forEach(function(t,n){t.forEach(function(i){return e.add(n,i.clone())})}),e},r.prototype.traverse=function(e){this._map.forEach(function(t,n){e(n,t)})},r}();YR.Lookup=Yoe});var Ggt=ft(nd=>{"use strict";var Xoe=nd&&nd.__awaiter||function(r,e,t,n){function i(a){return a instanceof t?a:new t(function(o){o(a)})}return new(t||(t=Promise))(function(a,o){function s(f){try{u(n.next(f))}catch(c){o(c)}}function l(f){try{u(n.throw(f))}catch(c){o(c)}}function u(f){f.done?a(f.value):i(f.value).then(s,l)}u((n=n.apply(r,e||[])).next())})},qoe=nd&&nd.__generator||function(r,e){var t={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},n,i,a,o;return o={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(o[Symbol.iterator]=function(){return this}),o;function s(u){return function(f){return l([u,f])}}function l(u){if(n)throw new TypeError("Generator is already executing.");for(;t;)try{if(n=1,i&&(a=u[0]&2?i.return:u[0]?i.throw||((a=i.return)&&a.call(i),0):i.next)&&!(a=a.call(i,u[1])).done)return a;switch(i=0,a&&(u=[u[0]&2,a.value]),u[0]){case 0:case 1:a=u;break;case 4:return t.label++,{value:u[1],done:!1};case 5:t.label++,i=u[1],u=[0];continue;case 7:u=t.ops.pop(),t.trys.pop();continue;default:if(a=t.trys,!(a=a.length>0&&a[a.length-1])&&(u[0]===6||u[0]===2)){t=0;continue}if(u[0]===3&&(!a||u[1]>a[0]&&u[1]{"use strict";Object.defineProperty(tS,"__esModule",{value:!0});tS.AsyncContainerModule=tS.ContainerModule=void 0;var zgt=Sg(),ise=function(){function r(e){this.id=zgt.id(),this.registry=e}return r}();tS.ContainerModule=ise;var ase=function(){function r(e){this.id=zgt.id(),this.registry=e}return r}();tS.AsyncContainerModule=ase});var jgt=ft(qR=>{"use strict";Object.defineProperty(qR,"__esModule",{value:!0});qR.injectable=void 0;var ose=ql(),AH=To();function sse(){return function(r){if(Reflect.hasOwnMetadata(AH.PARAM_TYPES,r))throw new Error(ose.DUPLICATED_INJECTABLE_DECORATOR);var e=Reflect.getMetadata(AH.DESIGN_PARAM_TYPES,r)||[];return Reflect.defineMetadata(AH.PARAM_TYPES,e,r),r}}qR.injectable=sse});var Vgt=ft(KR=>{"use strict";Object.defineProperty(KR,"__esModule",{value:!0});KR.tagged=void 0;var lse=_f(),Wgt=Up();function use(r,e){return function(t,n,i){var a=new lse.Metadata(r,e);typeof i=="number"?Wgt.tagParameter(t,n,i,a):Wgt.tagProperty(t,n,a)}}KR.tagged=use});var Ygt=ft(ZR=>{"use strict";Object.defineProperty(ZR,"__esModule",{value:!0});ZR.named=void 0;var fse=To(),cse=_f(),Hgt=Up();function hse(r){return function(e,t,n){var i=new cse.Metadata(fse.NAMED_TAG,r);typeof n=="number"?Hgt.tagParameter(e,t,n,i):Hgt.tagProperty(e,t,i)}}ZR.named=hse});var qgt=ft($R=>{"use strict";Object.defineProperty($R,"__esModule",{value:!0});$R.optional=void 0;var dse=To(),pse=_f(),Xgt=Up();function vse(){return function(r,e,t){var n=new pse.Metadata(dse.OPTIONAL_TAG,!0);typeof t=="number"?Xgt.tagParameter(r,e,t,n):Xgt.tagProperty(r,e,n)}}$R.optional=vse});var Kgt=ft(QR=>{"use strict";Object.defineProperty(QR,"__esModule",{value:!0});QR.unmanaged=void 0;var mse=To(),gse=_f(),yse=Up();function xse(){return function(r,e,t){var n=new gse.Metadata(mse.UNMANAGED_TAG,!0);yse.tagParameter(r,e,t,n)}}QR.unmanaged=xse});var $gt=ft(JR=>{"use strict";Object.defineProperty(JR,"__esModule",{value:!0});JR.multiInject=void 0;var bse=To(),_se=_f(),Zgt=Up();function Sse(r){return function(e,t,n){var i=new _se.Metadata(bse.MULTI_INJECT_TAG,r);typeof n=="number"?Zgt.tagParameter(e,t,n,i):Zgt.tagProperty(e,t,i)}}JR.multiInject=Sse});var Qgt=ft(tN=>{"use strict";Object.defineProperty(tN,"__esModule",{value:!0});tN.targetName=void 0;var Cse=To(),wse=_f(),Ese=Up();function Ase(r){return function(e,t,n){var i=new wse.Metadata(Cse.NAME_TAG,r);Ese.tagParameter(e,t,n,i)}}tN.targetName=Ase});var Jgt=ft(eN=>{"use strict";Object.defineProperty(eN,"__esModule",{value:!0});eN.postConstruct=void 0;var Mse=ql(),MH=To(),Tse=_f();function Ise(){return function(r,e,t){var n=new Tse.Metadata(MH.POST_CONSTRUCT,e);if(Reflect.hasOwnMetadata(MH.POST_CONSTRUCT,r.constructor))throw new Error(Mse.MULTIPLE_POST_CONSTRUCT_METHODS);Reflect.defineMetadata(MH.POST_CONSTRUCT,n,r.constructor)}}eN.postConstruct=Ise});var tyt=ft(rN=>{"use strict";Object.defineProperty(rN,"__esModule",{value:!0});rN.multiBindToService=void 0;var Lse=function(r){return function(e){return function(){for(var t=[],n=0;n{"use strict";Object.defineProperty(Wr,"__esModule",{value:!0});Wr.multiBindToService=Wr.getServiceIdentifierAsString=Wr.typeConstraint=Wr.namedConstraint=Wr.taggedConstraint=Wr.traverseAncerstors=Wr.decorate=Wr.id=Wr.MetadataReader=Wr.postConstruct=Wr.targetName=Wr.multiInject=Wr.unmanaged=Wr.optional=Wr.LazyServiceIdentifer=Wr.inject=Wr.named=Wr.tagged=Wr.injectable=Wr.ContainerModule=Wr.AsyncContainerModule=Wr.TargetTypeEnum=Wr.BindingTypeEnum=Wr.BindingScopeEnum=Wr.Container=Wr.METADATA_KEY=void 0;var Ose=To();Wr.METADATA_KEY=Ose;var Dse=Ggt();Object.defineProperty(Wr,"Container",{enumerable:!0,get:function(){return Dse.Container}});var TH=td();Object.defineProperty(Wr,"BindingScopeEnum",{enumerable:!0,get:function(){return TH.BindingScopeEnum}});Object.defineProperty(Wr,"BindingTypeEnum",{enumerable:!0,get:function(){return TH.BindingTypeEnum}});Object.defineProperty(Wr,"TargetTypeEnum",{enumerable:!0,get:function(){return TH.TargetTypeEnum}});var eyt=Ugt();Object.defineProperty(Wr,"AsyncContainerModule",{enumerable:!0,get:function(){return eyt.AsyncContainerModule}});Object.defineProperty(Wr,"ContainerModule",{enumerable:!0,get:function(){return eyt.ContainerModule}});var Pse=jgt();Object.defineProperty(Wr,"injectable",{enumerable:!0,get:function(){return Pse.injectable}});var kse=Vgt();Object.defineProperty(Wr,"tagged",{enumerable:!0,get:function(){return kse.tagged}});var Rse=Ygt();Object.defineProperty(Wr,"named",{enumerable:!0,get:function(){return Rse.named}});var ryt=hH();Object.defineProperty(Wr,"inject",{enumerable:!0,get:function(){return ryt.inject}});Object.defineProperty(Wr,"LazyServiceIdentifer",{enumerable:!0,get:function(){return ryt.LazyServiceIdentifer}});var Nse=qgt();Object.defineProperty(Wr,"optional",{enumerable:!0,get:function(){return Nse.optional}});var Fse=Kgt();Object.defineProperty(Wr,"unmanaged",{enumerable:!0,get:function(){return Fse.unmanaged}});var Bse=$gt();Object.defineProperty(Wr,"multiInject",{enumerable:!0,get:function(){return Bse.multiInject}});var Gse=Qgt();Object.defineProperty(Wr,"targetName",{enumerable:!0,get:function(){return Gse.targetName}});var zse=Jgt();Object.defineProperty(Wr,"postConstruct",{enumerable:!0,get:function(){return zse.postConstruct}});var Use=fH();Object.defineProperty(Wr,"MetadataReader",{enumerable:!0,get:function(){return Use.MetadataReader}});var jse=Sg();Object.defineProperty(Wr,"id",{enumerable:!0,get:function(){return jse.id}});var Wse=Up();Object.defineProperty(Wr,"decorate",{enumerable:!0,get:function(){return Wse.decorate}});var nN=_H();Object.defineProperty(Wr,"traverseAncerstors",{enumerable:!0,get:function(){return nN.traverseAncerstors}});Object.defineProperty(Wr,"taggedConstraint",{enumerable:!0,get:function(){return nN.taggedConstraint}});Object.defineProperty(Wr,"namedConstraint",{enumerable:!0,get:function(){return nN.namedConstraint}});Object.defineProperty(Wr,"typeConstraint",{enumerable:!0,get:function(){return nN.typeConstraint}});var Vse=Z_();Object.defineProperty(Wr,"getServiceIdentifierAsString",{enumerable:!0,get:function(){return Vse.getServiceIdentifierAsString}});var Hse=tyt();Object.defineProperty(Wr,"multiBindToService",{enumerable:!0,get:function(){return Hse.multiBindToService}})});var dxt=ft(lS=>{"use strict";Object.defineProperty(lS,"__esModule",{value:!0});var LM=Symbol.for("INJECTION");function uN(r,e,t,n){function i(){return n&&!Reflect.hasMetadata(LM,this,e)&&Reflect.defineMetadata(LM,t(),this,e),Reflect.hasMetadata(LM,this,e)?Reflect.getMetadata(LM,this,e):t()}function a(o){Reflect.defineMetadata(LM,o,this,e)}Object.defineProperty(r,e,{configurable:!0,enumerable:!0,get:i,set:a})}function Vle(r,e){return function(t){return function(n,i){var a=function(){return r.get(t)};uN(n,i,a,e)}}}lS.makePropertyInjectDecorator=Vle;function Hle(r,e){return function(t,n){return function(i,a){var o=function(){return r.getNamed(t,n)};uN(i,a,o,e)}}}lS.makePropertyInjectNamedDecorator=Hle;function Yle(r,e){return function(t,n,i){return function(a,o){var s=function(){return r.getTagged(t,n,i)};uN(a,o,s,e)}}}lS.makePropertyInjectTaggedDecorator=Yle;function Xle(r,e){return function(t){return function(n,i){var a=function(){return r.getAll(t)};uN(n,i,a,e)}}}lS.makePropertyMultiInjectDecorator=Xle});var pxt=ft(JH=>{"use strict";Object.defineProperty(JH,"__esModule",{value:!0});var fN=dxt();function qle(r,e){e===void 0&&(e=!0);var t=fN.makePropertyInjectDecorator(r,e),n=fN.makePropertyInjectNamedDecorator(r,e),i=fN.makePropertyInjectTaggedDecorator(r,e),a=fN.makePropertyMultiInjectDecorator(r,e);return{lazyInject:t,lazyInjectNamed:n,lazyInjectTagged:i,lazyMultiInject:a}}JH.default=qle});var Ec=ft(kr=>{"use strict";Object.defineProperty(kr,"__esModule",{value:!0});var aue;(function(r){r.TextureCompressionBC="texture-compression-bc"})(aue=kr.ExtensionName||(kr.ExtensionName={}));var oue;(function(r){r.ClampToEdge="clamp-to-edge",r.Repeat="repeat",r.MirrorRepeat="mirror-repeat"})(oue=kr.AddressMode||(kr.AddressMode={}));var sue;(function(r){r.UniformBuffer="uniform-buffer",r.StorageBuffer="storage-buffer",r.ReadonlyStorageBuffer="readonly-storage-buffer",r.Sampler="sampler",r.ComparisonSampler="comparison-sampler",r.SampledTexture="sampled-texture",r.ReadonlyStorageTexture="readonly-storage-texture",r.WriteonlyStorageTexture="writeonly-storage-texture"})(sue=kr.BindingType||(kr.BindingType={}));var lue;(function(r){r.Zero="zero",r.One="one",r.SrcColor="src-color",r.OneMinusSrcColor="one-minus-src-color",r.SrcAlpha="src-alpha",r.OneMinusSrcAlpha="one-minus-src-alpha",r.DstColor="dst-color",r.OneMinusDstColor="one-minus-dst-color",r.DstAlpha="dst-alpha",r.OneMinusDstAlpha="one-minus-dst-alpha",r.SrcAlphaSaturated="src-alpha-saturated",r.BlendColor="blend-color",r.OneMinusBlendColor="one-minus-blend-color"})(lue=kr.BlendFactor||(kr.BlendFactor={}));var uue;(function(r){r.Add="add",r.Subtract="subtract",r.ReverseSubtract="reverse-subtract",r.Min="min",r.Max="max"})(uue=kr.BlendOperation||(kr.BlendOperation={}));var fue;(function(r){r.Never="never",r.Less="less",r.Equal="equal",r.LessEqual="less-equal",r.Greater="greater",r.NotEqual="not-equal",r.GreaterEqual="greater-equal",r.Always="always"})(fue=kr.CompareFunction||(kr.CompareFunction={}));var cue;(function(r){r.None="none",r.Front="front",r.Back="back"})(cue=kr.CullMode||(kr.CullMode={}));var hue;(function(r){r.Nearest="nearest",r.Linear="linear"})(hue=kr.FilterMode||(kr.FilterMode={}));var due;(function(r){r.CCW="ccw",r.CW="cw"})(due=kr.FrontFace||(kr.FrontFace={}));var pue;(function(r){r.Uint16="uint16",r.Uint32="uint32"})(pue=kr.IndexFormat||(kr.IndexFormat={}));var vue;(function(r){r.Vertex="vertex",r.Instance="instance"})(vue=kr.InputStepMode||(kr.InputStepMode={}));var mue;(function(r){r.Load="load"})(mue=kr.LoadOp||(kr.LoadOp={}));var gue;(function(r){r.PointList="point-list",r.LineList="line-list",r.LineStrip="line-strip",r.TriangleList="triangle-list",r.TriangleStrip="triangle-strip"})(gue=kr.PrimitiveTopology||(kr.PrimitiveTopology={}));var yue;(function(r){r.Keep="keep",r.Zero="zero",r.Replace="replace",r.Invert="invert",r.IncrementClamp="increment-clamp",r.DecrementClamp="decrement-clamp",r.IncrementWrap="increment-wrap",r.DecrementWrap="decrement-wrap"})(yue=kr.StencilOperation||(kr.StencilOperation={}));var xue;(function(r){r.Store="store",r.Clear="clear"})(xue=kr.StoreOp||(kr.StoreOp={}));var bue;(function(r){r.E1d="1d",r.E2d="2d",r.E3d="3d"})(bue=kr.TextureDimension||(kr.TextureDimension={}));var _ue;(function(r){r.R8Unorm="r8unorm",r.R8Snorm="r8snorm",r.R8Uint="r8uint",r.R8Sint="r8sint",r.R16Uint="r16uint",r.R16Sint="r16sint",r.R16Float="r16float",r.RG8Unorm="rg8unorm",r.RG8Snorm="rg8snorm",r.RG8Uint="rg8uint",r.RG8Sint="rg8sint",r.R32Uint="r32uint",r.R32Sint="r32sint",r.R32Float="r32float",r.RG16Uint="rg16uint",r.RG16Sint="rg16sint",r.RG16Float="rg16float",r.RGBA8Unorm="rgba8unorm",r.RGBA8UnormSRGB="rgba8unorm-srgb",r.RGBA8Snorm="rgba8snorm",r.RGBA8Uint="rgba8uint",r.RGBA8Sint="rgba8sint",r.BGRA8Unorm="bgra8unorm",r.BGRA8UnormSRGB="bgra8unorm-srgb",r.RGB10A2Unorm="rgb10a2unorm",r.RG11B10Float="rg11b10float",r.RG32Uint="rg32uint",r.RG32Sint="rg32sint",r.RG32Float="rg32float",r.RGBA16Uint="rgba16uint",r.RGBA16Sint="rgba16sint",r.RGBA16Float="rgba16float",r.RGBA32Uint="rgba32uint",r.RGBA32Sint="rgba32sint",r.RGBA32Float="rgba32float",r.Depth32Float="depth32float",r.Depth24Plus="depth24plus",r.Depth24PlusStencil8="depth24plus-stencil8"})(_ue=kr.TextureFormat||(kr.TextureFormat={}));var Sue;(function(r){r.Float="float",r.Sint="sint",r.Uint="uint"})(Sue=kr.TextureComponentType||(kr.TextureComponentType={}));var Cue;(function(r){r.E1d="1d",r.E2d="2d",r.E2dArray="2d-array",r.Cube="cube",r.CubeArray="cube-array",r.E3d="3d"})(Cue=kr.TextureViewDimension||(kr.TextureViewDimension={}));var wue;(function(r){r.Uchar2="uchar2",r.Uchar4="uchar4",r.Char2="char2",r.Char4="char4",r.Uchar2Norm="uchar2norm",r.Uchar4Norm="uchar4norm",r.Char2Norm="char2norm",r.Char4Norm="char4norm",r.Ushort2="ushort2",r.Ushort4="ushort4",r.Short2="short2",r.Short4="short4",r.Ushort2Norm="ushort2norm",r.Ushort4Norm="ushort4norm",r.Short2Norm="short2norm",r.Short4Norm="short4norm",r.Half2="half2",r.Half4="half4",r.Float="float",r.Float2="float2",r.Float3="float3",r.Float4="float4",r.Uint="uint",r.Uint2="uint2",r.Uint3="uint3",r.Uint4="uint4",r.Int="int",r.Int2="int2",r.Int3="int3",r.Int4="int4"})(wue=kr.VertexFormat||(kr.VertexFormat={}));var Eue;(function(r){r.All="all",r.StencilOnly="stencil-only",r.DepthOnly="depth-only"})(Eue=kr.TextureAspect||(kr.TextureAspect={}));var Aue;(function(r){r.Error="error",r.Warning="warning",r.Info="info"})(Aue=kr.CompilationMessageType||(kr.CompilationMessageType={}));var Mue;(function(r){r.Occlusion="occlusion"})(Mue=kr.QueryType||(kr.QueryType={}));var Tue;(function(r){r[r.MapRead=1]="MapRead",r[r.MapWrite=2]="MapWrite",r[r.CopySrc=4]="CopySrc",r[r.CopyDst=8]="CopyDst",r[r.Index=16]="Index",r[r.Vertex=32]="Vertex",r[r.Uniform=64]="Uniform",r[r.Storage=128]="Storage",r[r.Indirect=256]="Indirect",r[r.QueryResolve=512]="QueryResolve"})(Tue=kr.BufferUsage||(kr.BufferUsage={}));var Iue;(function(r){r[r.Red=1]="Red",r[r.Green=2]="Green",r[r.Blue=4]="Blue",r[r.Alpha=8]="Alpha",r[r.All=15]="All"})(Iue=kr.ColorWrite||(kr.ColorWrite={}));var Lue;(function(r){r[r.Vertex=1]="Vertex",r[r.Fragment=2]="Fragment",r[r.Compute=4]="Compute"})(Lue=kr.ShaderStage||(kr.ShaderStage={}));var Oue;(function(r){r[r.CopySrc=1]="CopySrc",r[r.CopyDst=2]="CopyDst",r[r.Sampled=4]="Sampled",r[r.Storage=8]="Storage",r[r.OutputAttachment=16]="OutputAttachment"})(Oue=kr.TextureUsage||(kr.TextureUsage={}));var Due;(function(r){r[r.Read=1]="Read",r[r.Write=2]="Write"})(Due=kr.MapMode||(kr.MapMode={}))});var Lbt=ft((lY,uY)=>{(function(r,e){typeof lY=="object"&&typeof uY!="undefined"?uY.exports=e():typeof define=="function"&&define.amd?define(e):r.createREGL=e()})(lY,function(){"use strict";var r=function(B){return B instanceof Uint8Array||B instanceof Uint16Array||B instanceof Uint32Array||B instanceof Int8Array||B instanceof Int16Array||B instanceof Int32Array||B instanceof Float32Array||B instanceof Float64Array||B instanceof Uint8ClampedArray},e=function(B,Z){for(var ct=Object.keys(Z),Gt=0;Gt=0&&(B|0)===B||i("invalid parameter type, ("+B+")"+o(Z)+". must be a nonnegative integer")}function h(B,Z,ct){Z.indexOf(B)<0&&i("invalid value"+o(ct)+". must be one of: "+Z)}var d=["gl","canvas","container","attributes","pixelRatio","extensions","optionalExtensions","profile","onDone"];function p(B){Object.keys(B).forEach(function(Z){d.indexOf(Z)<0&&i('invalid regl constructor argument "'+Z+'". must be one of '+d)})}function v(B,Z){for(B=B+"";B.length0&&Z.push(new x("unknown",0,ct))}}),Z}function A(B,Z){Z.forEach(function(ct){var Gt=B[ct.file];if(Gt){var Jt=Gt.index[ct.line];if(Jt){Jt.errors.push(ct),Gt.hasErrors=!0;return}}B.unknown.hasErrors=!0,B.unknown.lines[0].errors.push(ct)})}function I(B,Z,ct,Gt,Jt){if(!B.getShaderParameter(Z,B.COMPILE_STATUS)){var zt=B.getShaderInfoLog(Z),Vt=Gt===B.FRAGMENT_SHADER?"fragment":"vertex";G(ct,"string",Vt+" shader source must be a string",Jt);var ve=C(ct,Jt),le=w(zt);A(ve,le),Object.keys(ve).forEach(function(Ce){var ye=ve[Ce];if(!ye.hasErrors)return;var Ie=[""],Be=[""];function me(Pe,Ot){Ie.push(Pe),Be.push(Ot||"")}me("file number "+Ce+": "+ye.name+` +`,"color:red;text-decoration:underline;font-weight:bold"),ye.lines.forEach(function(Pe){if(Pe.errors.length>0){me(v(Pe.number,4)+"| ","background-color:yellow; font-weight:bold"),me(Pe.line+t,"color:red; background-color:yellow; font-weight:bold");var Ot=0;Pe.errors.forEach(function(Yt){var pe=Yt.message,Le=/^\s*'(.*)'\s*:\s*(.*)$/.exec(pe);if(Le){var ue=Le[1];switch(pe=Le[2],ue){case"assign":ue="=";break}Ot=Math.max(Pe.line.indexOf(ue,Ot),0)}else Ot=0;me(v("| ",6)),me(v("^^^",Ot+3)+t,"font-weight:bold"),me(v("| ",6)),me(pe+t,"font-weight:bold")}),me(v("| ",6)+t)}else me(v(Pe.number,4)+"| "),me(Pe.line+t,"color:red")}),typeof document!="undefined"&&!window.chrome?(Be[0]=Ie.join("%c"),console.log.apply(console,Be)):console.log(Ie.join(""))}),a.raise("Error compiling "+Vt+" shader, "+ve[0].name)}}function P(B,Z,ct,Gt,Jt){if(!B.getProgramParameter(Z,B.LINK_STATUS)){var zt=B.getProgramInfoLog(Z),Vt=C(ct,Jt),ve=C(Gt,Jt),le='Error linking program with vertex shader, "'+ve[0].name+'", and fragment shader "'+Vt[0].name+'"';typeof document!="undefined"?console.log("%c"+le+t+"%c"+zt,"color:red;text-decoration:underline;font-weight:bold","color:red"):console.log(le+t+zt),a.raise(le)}}function L(B){B._commandRef=b()}function M(B,Z,ct,Gt){L(B);function Jt(le){return le?Gt.id(le):0}B._fragId=Jt(B.static.frag),B._vertId=Jt(B.static.vert);function zt(le,Ce){Object.keys(Ce).forEach(function(ye){le[Gt.id(ye)]=!0})}var Vt=B._uniformSet={};zt(Vt,Z.static),zt(Vt,Z.dynamic);var ve=B._attributeSet={};zt(ve,ct.static),zt(ve,ct.dynamic),B._hasCount="count"in B.static||"count"in B.dynamic||"elements"in B.static||"elements"in B.dynamic}function O(B,Z){var ct=S();i(B+" in command "+(Z||b())+(ct==="unknown"?"":" called from "+ct))}function F(B,Z,ct){B||O(Z,ct||b())}function k(B,Z,ct,Gt){B in Z||O("unknown parameter ("+B+")"+o(ct)+". possible values: "+Object.keys(Z).join(),Gt||b())}function G(B,Z,ct,Gt){u(B,Z)||O("invalid parameter type"+o(ct)+". expected "+Z+", got "+typeof B,Gt||b())}function D(B){B()}function N(B,Z,ct){B.texture?h(B.texture._texture.internalformat,Z,"unsupported texture format for attachment"):h(B.renderbuffer._renderbuffer.format,ct,"unsupported renderbuffer format for attachment")}var z=33071,j=9728,W=9984,J=9985,et=9986,lt=9987,$=5120,st=5121,_t=5122,dt=5123,vt=5124,Tt=5125,Ut=5126,$t=32819,Y=32820,it=33635,K=34042,Rt=36193,Xt={};Xt[$]=Xt[st]=1,Xt[_t]=Xt[dt]=Xt[Rt]=Xt[it]=Xt[$t]=Xt[Y]=2,Xt[vt]=Xt[Tt]=Xt[Ut]=Xt[K]=4;function Zt(B,Z){return B===Y||B===$t||B===it?2:B===K?4:Xt[B]*Z}function Ae(B){return!(B&B-1)&&!!B}function We(B,Z,ct){var Gt,Jt=Z.width,zt=Z.height,Vt=Z.channels;a(Jt>0&&Jt<=ct.maxTextureSize&&zt>0&&zt<=ct.maxTextureSize,"invalid texture shape"),(B.wrapS!==z||B.wrapT!==z)&&a(Ae(Jt)&&Ae(zt),"incompatible wrap mode for texture, both width and height must be power of 2"),Z.mipmask===1?Jt!==1&&zt!==1&&a(B.minFilter!==W&&B.minFilter!==et&&B.minFilter!==J&&B.minFilter!==lt,"min filter requires mipmap"):(a(Ae(Jt)&&Ae(zt),"texture must be a square power of 2 to support mipmapping"),a(Z.mipmask===(Jt<<1)-1,"missing or incomplete mipmap data")),Z.type===Ut&&(ct.extensions.indexOf("oes_texture_float_linear")<0&&a(B.minFilter===j&&B.magFilter===j,"filter not supported, must enable oes_texture_float_linear"),a(!B.genMipmaps,"mipmap generation not supported with float textures"));var ve=Z.images;for(Gt=0;Gt<16;++Gt)if(ve[Gt]){var le=Jt>>Gt,Ce=zt>>Gt;a(Z.mipmask&1<0&&Jt<=Gt.maxTextureSize&&zt>0&&zt<=Gt.maxTextureSize,"invalid texture shape"),a(Jt===zt,"cube map must be square"),a(Z.wrapS===z&&Z.wrapT===z,"wrap mode not supported by cube map");for(var ve=0;ve>ye,me=zt>>ye;a(le.mipmask&1<1&&Z===ct&&(Z==='"'||Z==="'"))return['"'+Wt(B.substr(1,B.length-2))+'"'];var Gt=/\[(false|true|null|\d+|'[^']*'|"[^"]*")\]/.exec(B);if(Gt)return ee(B.substr(0,Gt.index)).concat(ee(Gt[1])).concat(ee(B.substr(Gt.index+Gt[0].length)));var Jt=B.split(".");if(Jt.length===1)return['"'+Wt(B)+'"'];for(var zt=[],Vt=0;Vtge(ct,Z+"["+Gt+"]")));if(B instanceof St)return B;V(!1,"invalid option type in uniform "+Z)}var Ye={DynamicVariable:St,define:Ht,isDynamic:ae,unbox:ge,accessor:Ue},Ve={next:typeof requestAnimationFrame=="function"?function(B){return requestAnimationFrame(B)}:function(B){return setTimeout(B,16)},cancel:typeof cancelAnimationFrame=="function"?function(B){return cancelAnimationFrame(B)}:clearTimeout},$n=typeof performance!="undefined"&&performance.now?function(){return performance.now()}:function(){return+new Date};function ma(){var B={"":0},Z=[""];return{id:function(ct){var Gt=B[ct];return Gt||(Gt=B[ct]=Z.length,Z.push(ct),Gt)},str:function(ct){return Z[ct]}}}function _n(B,Z,ct){var Gt=document.createElement("canvas");e(Gt.style,{border:0,margin:0,padding:0,top:0,left:0}),B.appendChild(Gt),B===document.body&&(Gt.style.position="absolute",e(B.style,{margin:0,padding:0}));function Jt(){var ve=window.innerWidth,le=window.innerHeight;if(B!==document.body){var Ce=B.getBoundingClientRect();ve=Ce.right-Ce.left,le=Ce.bottom-Ce.top}Gt.width=ct*ve,Gt.height=ct*le,e(Gt.style,{width:ve+"px",height:le+"px"})}var zt;B!==document.body&&typeof ResizeObserver=="function"?(zt=new ResizeObserver(function(){setTimeout(Jt)}),zt.observe(B)):window.addEventListener("resize",Jt,!1);function Vt(){zt?zt.disconnect():window.removeEventListener("resize",Jt),B.removeChild(Gt)}return Jt(),{canvas:Gt,onDestroy:Vt}}function ii(B,Z){function ct(Gt){try{return B.getContext(Gt,Z)}catch(Jt){return null}}return ct("webgl")||ct("experimental-webgl")||ct("webgl-experimental")}function xi(B){return typeof B.nodeName=="string"&&typeof B.appendChild=="function"&&typeof B.getBoundingClientRect=="function"}function Ki(B){return typeof B.drawArrays=="function"||typeof B.drawElements=="function"}function En(B){return typeof B=="string"?B.split():(V(Array.isArray(B),"invalid extension array"),B)}function ci(B){return typeof B=="string"?(V(typeof document!="undefined","not supported outside of DOM"),document.querySelector(B)):B}function Nn(B){var Z=B||{},ct,Gt,Jt,zt,Vt={},ve=[],le=[],Ce=typeof window=="undefined"?1:window.devicePixelRatio,ye=!1,Ie=function(Pe){Pe&&V.raise(Pe)},Be=function(){};if(typeof Z=="string"?(V(typeof document!="undefined","selector queries only supported in DOM enviroments"),ct=document.querySelector(Z),V(ct,"invalid query string for element")):typeof Z=="object"?xi(Z)?ct=Z:Ki(Z)?(zt=Z,Jt=zt.canvas):(V.constructor(Z),"gl"in Z?zt=Z.gl:"canvas"in Z?Jt=ci(Z.canvas):"container"in Z&&(Gt=ci(Z.container)),"attributes"in Z&&(Vt=Z.attributes,V.type(Vt,"object","invalid context attributes")),"extensions"in Z&&(ve=En(Z.extensions)),"optionalExtensions"in Z&&(le=En(Z.optionalExtensions)),"onDone"in Z&&(V.type(Z.onDone,"function","invalid or missing onDone callback"),Ie=Z.onDone),"profile"in Z&&(ye=!!Z.profile),"pixelRatio"in Z&&(Ce=+Z.pixelRatio,V(Ce>0,"invalid pixel ratio"))):V.raise("invalid arguments to regl"),ct&&(ct.nodeName.toLowerCase()==="canvas"?Jt=ct:Gt=ct),!zt){if(!Jt){V(typeof document!="undefined","must manually specify webgl context outside of DOM environments");var me=_n(Gt||document.body,Ie,Ce);if(!me)return null;Jt=me.canvas,Be=me.onDestroy}Vt.premultipliedAlpha===void 0&&(Vt.premultipliedAlpha=!0),zt=ii(Jt,Vt)}return zt?{gl:zt,canvas:Jt,container:Gt,extensions:ve,optionalExtensions:le,pixelRatio:Ce,profile:ye,onDone:Ie,onDestroy:Be}:(Be(),Ie("webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org"),null)}function Ma(B,Z){var ct={};function Gt(Vt){V.type(Vt,"string","extension name must be string");var ve=Vt.toLowerCase(),le;try{le=ct[ve]=B.getExtension(ve)}catch(Ce){}return!!le}for(var Jt=0;Jt65535)<<4,B>>>=Z,ct=(B>255)<<3,B>>>=ct,Z|=ct,ct=(B>15)<<2,B>>>=ct,Z|=ct,ct=(B>3)<<1,B>>>=ct,Z|=ct,Z|B>>1}function gs(){var B=Li(8,function(){return[]});function Z(zt){var Vt=mo(zt),ve=B[Oi(Vt)>>2];return ve.length>0?ve.pop():new ArrayBuffer(Vt)}function ct(zt){B[Oi(zt.byteLength)>>2].push(zt)}function Gt(zt,Vt){var ve=null;switch(zt){case Do:ve=new Int8Array(Z(Vt),0,Vt);break;case Pu:ve=new Uint8Array(Z(Vt),0,Vt);break;case Po:ve=new Int16Array(Z(2*Vt),0,Vt);break;case ms:ve=new Uint16Array(Z(2*Vt),0,Vt);break;case $o:ve=new Int32Array(Z(4*Vt),0,Vt);break;case vl:ve=new Uint32Array(Z(4*Vt),0,Vt);break;case Ns:ve=new Float32Array(Z(4*Vt),0,Vt);break;default:return null}return ve.length!==Vt?ve.subarray(0,Vt):ve}function Jt(zt){ct(zt.buffer)}return{alloc:Z,free:ct,allocType:Gt,freeType:Jt}}var er=gs();er.zero=gs();var ai=3408,vn=3410,ji=3411,Ta=3412,Tf=3413,If=3414,tu=3415,Lf=33901,Of=33902,Df=3379,cv=3386,rC=34921,hv=36347,nC=36348,iC=35661,EF=35660,pT=34930,vT=36349,mT=34076,AF=34024,MF=7936,TF=7937,IF=7938,gT=35724,yT=34047,xT=36063,aC=34852,px=3553,oC=34067,vx=34069,bT=33984,Yg=6408,mx=5126,sC=5121,Xg=36160,LF=36053,_T=36064,lC=16384,uC=function(B,Z){var ct=1;Z.ext_texture_filter_anisotropic&&(ct=B.getParameter(yT));var Gt=1,Jt=1;Z.webgl_draw_buffers&&(Gt=B.getParameter(aC),Jt=B.getParameter(xT));var zt=!!Z.oes_texture_float;if(zt){var Vt=B.createTexture();B.bindTexture(px,Vt),B.texImage2D(px,0,Yg,1,1,0,Yg,mx,null);var ve=B.createFramebuffer();if(B.bindFramebuffer(Xg,ve),B.framebufferTexture2D(Xg,_T,px,Vt,0),B.bindTexture(px,null),B.checkFramebufferStatus(Xg)!==LF)zt=!1;else{B.viewport(0,0,1,1),B.clearColor(1,0,0,1),B.clear(lC);var le=er.allocType(mx,4);B.readPixels(0,0,1,1,Yg,mx,le),B.getError()?zt=!1:(B.deleteFramebuffer(ve),B.deleteTexture(Vt),zt=le[0]===1),er.freeType(le)}}var Ce=typeof navigator!="undefined"&&(/MSIE/.test(navigator.userAgent)||/Trident\//.test(navigator.appVersion)||/Edge/.test(navigator.userAgent)),ye=!0;if(!Ce){var Ie=B.createTexture(),Be=er.allocType(sC,36);B.activeTexture(bT),B.bindTexture(oC,Ie),B.texImage2D(vx,0,Yg,3,3,0,Yg,sC,Be),er.freeType(Be),B.bindTexture(oC,null),B.deleteTexture(Ie),ye=!B.getError()}return{colorBits:[B.getParameter(vn),B.getParameter(ji),B.getParameter(Ta),B.getParameter(Tf)],depthBits:B.getParameter(If),stencilBits:B.getParameter(tu),subpixelBits:B.getParameter(ai),extensions:Object.keys(Z).filter(function(me){return!!Z[me]}),maxAnisotropic:ct,maxDrawbuffers:Gt,maxColorAttachments:Jt,pointSizeDims:B.getParameter(Lf),lineWidthDims:B.getParameter(Of),maxViewportDims:B.getParameter(cv),maxCombinedTextureUnits:B.getParameter(iC),maxCubeMapSize:B.getParameter(mT),maxRenderbufferSize:B.getParameter(AF),maxTextureUnits:B.getParameter(pT),maxTextureSize:B.getParameter(Df),maxAttributes:B.getParameter(rC),maxVertexUniforms:B.getParameter(hv),maxVertexTextureUnits:B.getParameter(EF),maxVaryingVectors:B.getParameter(nC),maxFragmentUniforms:B.getParameter(vT),glsl:B.getParameter(gT),renderer:B.getParameter(TF),vendor:B.getParameter(MF),version:B.getParameter(IF),readFloat:zt,npotTextureCube:ye}};function ko(B){return!!B&&typeof B=="object"&&Array.isArray(B.shape)&&Array.isArray(B.stride)&&typeof B.offset=="number"&&B.shape.length===B.stride.length&&(Array.isArray(B.data)||r(B.data))}var ys=function(B){return Object.keys(B).map(function(Z){return B[Z]})},qg={shape:DF,flatten:CT};function OF(B,Z,ct){for(var Gt=0;Gt0){var Re;if(Array.isArray(Yt[0])){ce=Pi(Yt);for(var he=1,Oe=1;Oe0)if(typeof he[0]=="number"){var Ge=er.allocType(ue.dtype,he.length);mC(Ge,he),ce(Ge,vr),er.freeType(Ge)}else if(Array.isArray(he[0])||r(he[0])){Or=Pi(he);var Me=Di(he,Or,ue.dtype);ce(Me,vr),er.freeType(Me)}else V.raise("invalid buffer data")}else if(ko(he)){Or=he.shape;var fe=he.stride,Er=0,Vr=0,Je=0,on=0;Or.length===1?(Er=Or[0],Vr=1,Je=fe[0],on=0):Or.length===2?(Er=Or[0],Vr=Or[1],Je=fe[0],on=fe[1]):V.raise("invalid shape");var Dr=Array.isArray(he.data)?ue.dtype:yx(he.data),Kr=er.allocType(Dr,Er*Vr);AT(Kr,he.data,Er,Vr,Je,on,he.offset),ce(Kr,vr),er.freeType(Kr)}else V.raise("invalid data for buffer subdata");return He}return pe||He(Ot),He._reglType="buffer",He._buffer=ue,He.subdata=Re,ct.profile&&(He.stats=ue.stats),He.destroy=function(){Be(ue)},He}function Pe(){ys(zt).forEach(function(Ot){Ot.buffer=B.createBuffer(),B.bindBuffer(Ot.type,Ot.buffer),B.bufferData(Ot.type,Ot.persistentData||Ot.byteLength,Ot.usage)})}return ct.profile&&(Z.getTotalBufferSize=function(){var Ot=0;return Object.keys(zt).forEach(function(Yt){Ot+=zt[Yt].stats.size}),Ot}),{create:me,createStream:le,destroyStream:Ce,clear:function(){ys(zt).forEach(Be),ve.forEach(Be)},getBuffer:function(Ot){return Ot&&Ot._buffer instanceof Vt?Ot._buffer:null},restore:Pe,_initBuffer:Ie}}var gC=0,_d=0,MT=1,yC=1,ml=4,TT=4,Sd={points:gC,point:_d,lines:MT,line:yC,triangles:ml,triangle:TT,"line loop":2,"line strip":3,"triangle strip":5,"triangle fan":6},IT=0,LT=1,dv=4,OT=5120,Qa=5121,DT=5122,go=5123,PT=5124,Rc=5125,ku=34963,xx=35040,xC=35044;function Zi(B,Z,ct,Gt){var Jt={},zt=0,Vt={uint8:Qa,uint16:go};Z.oes_element_index_uint&&(Vt.uint32=Rc);function ve(Pe){this.id=zt++,Jt[this.id]=this,this.buffer=Pe,this.primType=dv,this.vertCount=0,this.type=0}ve.prototype.bind=function(){this.buffer.bind()};var le=[];function Ce(Pe){var Ot=le.pop();return Ot||(Ot=new ve(ct.create(null,ku,!0,!1)._buffer)),Ie(Ot,Pe,xx,-1,-1,0,0),Ot}function ye(Pe){le.push(Pe)}function Ie(Pe,Ot,Yt,pe,Le,ue,He){Pe.buffer.bind();var ce;if(Ot){var Re=He;!He&&(!r(Ot)||ko(Ot)&&!r(Ot.data))&&(Re=Z.oes_element_index_uint?Rc:go),ct._initBuffer(Pe.buffer,Ot,Yt,Re,3)}else B.bufferData(ku,ue,Yt),Pe.buffer.dtype=ce||Qa,Pe.buffer.usage=Yt,Pe.buffer.dimension=3,Pe.buffer.byteLength=ue;if(ce=He,!He){switch(Pe.buffer.dtype){case Qa:case OT:ce=Qa;break;case go:case DT:ce=go;break;case Rc:case PT:ce=Rc;break;default:V.raise("unsupported type for element array")}Pe.buffer.dtype=ce}Pe.type=ce,V(ce!==Rc||!!Z.oes_element_index_uint,"32 bit element buffers not supported, enable oes_element_index_uint first");var he=Le;he<0&&(he=Pe.buffer.byteLength,ce===go?he>>=1:ce===Rc&&(he>>=2)),Pe.vertCount=he;var Oe=pe;if(pe<0){Oe=dv;var vr=Pe.buffer.dimension;vr===1&&(Oe=IT),vr===2&&(Oe=LT),vr===3&&(Oe=dv)}Pe.primType=Oe}function Be(Pe){Gt.elementsCount--,V(Pe.buffer!==null,"must not double destroy elements"),delete Jt[Pe.id],Pe.buffer.destroy(),Pe.buffer=null}function me(Pe,Ot){var Yt=ct.create(null,ku,!0),pe=new ve(Yt._buffer);Gt.elementsCount++;function Le(ue){if(!ue)Yt(),pe.primType=dv,pe.vertCount=0,pe.type=Qa;else if(typeof ue=="number")Yt(ue),pe.primType=dv,pe.vertCount=ue|0,pe.type=Qa;else{var He=null,ce=xC,Re=-1,he=-1,Oe=0,vr=0;Array.isArray(ue)||r(ue)||ko(ue)?He=ue:(V.type(ue,"object","invalid arguments for elements"),"data"in ue&&(He=ue.data,V(Array.isArray(He)||r(He)||ko(He),"invalid data for element buffer")),"usage"in ue&&(V.parameter(ue.usage,gx,"invalid element buffer usage"),ce=gx[ue.usage]),"primitive"in ue&&(V.parameter(ue.primitive,Sd,"invalid element buffer primitive"),Re=Sd[ue.primitive]),"count"in ue&&(V(typeof ue.count=="number"&&ue.count>=0,"invalid vertex count for elements"),he=ue.count|0),"type"in ue&&(V.parameter(ue.type,Vt,"invalid buffer type"),vr=Vt[ue.type]),"length"in ue?Oe=ue.length|0:(Oe=he,vr===go||vr===DT?Oe*=2:(vr===Rc||vr===PT)&&(Oe*=4))),Ie(pe,He,ce,Re,he,Oe,vr)}return Le}return Le(Pe),Le._reglType="elements",Le._elements=pe,Le.subdata=function(ue,He){return Yt.subdata(ue,He),Le},Le.destroy=function(){Be(pe)},Le}return{create:me,createStream:Ce,destroyStream:ye,getElements:function(Pe){return typeof Pe=="function"&&Pe._elements instanceof ve?Pe._elements:null},clear:function(){ys(Jt).forEach(Be)}}}var Pf=new Float32Array(1),bC=new Uint32Array(Pf.buffer),jF=5123;function bx(B){for(var Z=er.allocType(jF,B.length),ct=0;ct>>31<<15,zt=(Gt<<1>>>24)-127,Vt=Gt>>13&(1<<10)-1;if(zt<-24)Z[ct]=Jt;else if(zt<-14){var ve=-14-zt;Z[ct]=Jt+(Vt+(1<<10)>>ve)}else zt>15?Z[ct]=Jt+31744:Z[ct]=Jt+(zt+15<<10)+Vt}return Z}function aa(B){return Array.isArray(B)||r(B)}var kT=function(B){return!(B&B-1)&&!!B},WF=34467,eu=3553,pv=34067,kf=34069,Cd=6408,_x=6406,Kg=6407,wd=6409,vv=6410,_C=32854,SC=32855,Sx=36194,CC=32819,VF=32820,RT=33635,Fs=34042,Zg=6402,Nc=34041,Cx=35904,wx=35906,mv=36193,wC=33776,EC=33777,AC=33778,MC=33779,Ed=35986,NT=35987,FT=34798,Ex=35840,TC=35841,Rf=35842,$g=35843,BT=36196,gv=5121,IC=5123,Fc=5125,Qo=5126,GT=10242,HF=10243,YF=10497,LC=33071,XF=33648,qF=10240,Bc=10241,kt=9728,de=9729,te=9984,pr=9985,fn=9986,Qn=9987,Wa=33170,hi=4352,OC=4353,KF=4354,gl=34046,Ax=3317,ZF=37440,yv=37441,Mx=37443,Qg=37444,Jn=33984,$F=[te,fn,pr,Qn],Jg=[0,wd,vv,Kg,Cd],Jo={};Jo[wd]=Jo[_x]=Jo[Zg]=1,Jo[Nc]=Jo[vv]=2,Jo[Kg]=Jo[Cx]=3,Jo[Cd]=Jo[wx]=4;function xv(B){return"[object "+B+"]"}var zT=xv("HTMLCanvasElement"),UT=xv("OffscreenCanvas"),ty=xv("CanvasRenderingContext2D"),Nf=xv("ImageBitmap"),ey=xv("HTMLImageElement"),DC=xv("HTMLVideoElement"),Tx=Object.keys(hC).concat([zT,UT,ty,Nf,ey,DC]),Ad=[];Ad[gv]=1,Ad[Qo]=4,Ad[mv]=2,Ad[IC]=2,Ad[Fc]=4;var Va=[];Va[_C]=2,Va[SC]=2,Va[Sx]=2,Va[Nc]=4,Va[wC]=.5,Va[EC]=.5,Va[AC]=1,Va[MC]=1,Va[Ed]=.5,Va[NT]=1,Va[FT]=1,Va[Ex]=.5,Va[TC]=.25,Va[Rf]=.5,Va[$g]=.25,Va[BT]=.5;function ry(B){return Array.isArray(B)&&(B.length===0||typeof B[0]=="number")}function PC(B){if(!Array.isArray(B))return!1;var Z=B.length;return!(Z===0||!aa(B[0]))}function ru(B){return Object.prototype.toString.call(B)}function Gc(B){return ru(B)===zT}function ny(B){return ru(B)===UT}function QF(B){return ru(B)===ty}function JF(B){return ru(B)===Nf}function tB(B){return ru(B)===ey}function Ix(B){return ru(B)===DC}function bv(B){if(!B)return!1;var Z=ru(B);return Tx.indexOf(Z)>=0?!0:ry(B)||PC(B)||ko(B)}function Lx(B){return hC[Object.prototype.toString.call(B)]|0}function eB(B,Z){var ct=Z.length;switch(B.type){case gv:case IC:case Fc:case Qo:var Gt=er.allocType(B.type,ct);Gt.set(Z),B.data=Gt;break;case mv:B.data=bx(Z);break;default:V.raise("unsupported texture type, must specify a typed array")}}function kC(B,Z){return er.allocType(B.type===mv?Qo:B.type,Z)}function jT(B,Z){B.type===mv?(B.data=bx(Z),er.freeType(Z)):B.data=Z}function rB(B,Z,ct,Gt,Jt,zt){for(var Vt=B.width,ve=B.height,le=B.channels,Ce=Vt*ve*le,ye=kC(B,Ce),Ie=0,Be=0;Be=1;)ve+=Vt*le*le,le/=2;return ve}else return Vt*ct*Gt}function Ro(B,Z,ct,Gt,Jt,zt,Vt){var ve={"don't care":hi,"dont care":hi,nice:KF,fast:OC},le={repeat:YF,clamp:LC,mirror:XF},Ce={nearest:kt,linear:de},ye=e({mipmap:Qn,"nearest mipmap nearest":te,"linear mipmap nearest":pr,"nearest mipmap linear":fn,"linear mipmap linear":Qn},Ce),Ie={none:0,browser:Qg},Be={uint8:gv,rgba4:CC,rgb565:RT,"rgb5 a1":VF},me={alpha:_x,luminance:wd,"luminance alpha":vv,rgb:Kg,rgba:Cd,rgba4:_C,"rgb5 a1":SC,rgb565:Sx},Pe={};Z.ext_srgb&&(me.srgb=Cx,me.srgba=wx),Z.oes_texture_float&&(Be.float32=Be.float=Qo),Z.oes_texture_half_float&&(Be.float16=Be["half float"]=mv),Z.webgl_depth_texture&&(e(me,{depth:Zg,"depth stencil":Nc}),e(Be,{uint16:IC,uint32:Fc,"depth stencil":Fs})),Z.webgl_compressed_texture_s3tc&&e(Pe,{"rgb s3tc dxt1":wC,"rgba s3tc dxt1":EC,"rgba s3tc dxt3":AC,"rgba s3tc dxt5":MC}),Z.webgl_compressed_texture_atc&&e(Pe,{"rgb atc":Ed,"rgba atc explicit alpha":NT,"rgba atc interpolated alpha":FT}),Z.webgl_compressed_texture_pvrtc&&e(Pe,{"rgb pvrtc 4bppv1":Ex,"rgb pvrtc 2bppv1":TC,"rgba pvrtc 4bppv1":Rf,"rgba pvrtc 2bppv1":$g}),Z.webgl_compressed_texture_etc1&&(Pe["rgb etc1"]=BT);var Ot=Array.prototype.slice.call(B.getParameter(WF));Object.keys(Pe).forEach(function(ut){var jt=Pe[ut];Ot.indexOf(jt)>=0&&(me[ut]=jt)});var Yt=Object.keys(me);ct.textureFormats=Yt;var pe=[];Object.keys(me).forEach(function(ut){var jt=me[ut];pe[jt]=ut});var Le=[];Object.keys(Be).forEach(function(ut){var jt=Be[ut];Le[jt]=ut});var ue=[];Object.keys(Ce).forEach(function(ut){var jt=Ce[ut];ue[jt]=ut});var He=[];Object.keys(ye).forEach(function(ut){var jt=ye[ut];He[jt]=ut});var ce=[];Object.keys(le).forEach(function(ut){var jt=le[ut];ce[jt]=ut});var Re=Yt.reduce(function(ut,jt){var Nt=me[jt];return Nt===wd||Nt===_x||Nt===wd||Nt===vv||Nt===Zg||Nt===Nc||Z.ext_srgb&&(Nt===Cx||Nt===wx)?ut[Nt]=Nt:Nt===SC||jt.indexOf("rgba")>=0?ut[Nt]=Cd:ut[Nt]=Kg,ut},{});function he(){this.internalformat=Cd,this.format=Cd,this.type=gv,this.compressed=!1,this.premultiplyAlpha=!1,this.flipY=!1,this.unpackAlignment=1,this.colorSpace=Qg,this.width=0,this.height=0,this.channels=0}function Oe(ut,jt){ut.internalformat=jt.internalformat,ut.format=jt.format,ut.type=jt.type,ut.compressed=jt.compressed,ut.premultiplyAlpha=jt.premultiplyAlpha,ut.flipY=jt.flipY,ut.unpackAlignment=jt.unpackAlignment,ut.colorSpace=jt.colorSpace,ut.width=jt.width,ut.height=jt.height,ut.channels=jt.channels}function vr(ut,jt){if(!(typeof jt!="object"||!jt)){if("premultiplyAlpha"in jt&&(V.type(jt.premultiplyAlpha,"boolean","invalid premultiplyAlpha"),ut.premultiplyAlpha=jt.premultiplyAlpha),"flipY"in jt&&(V.type(jt.flipY,"boolean","invalid texture flip"),ut.flipY=jt.flipY),"alignment"in jt&&(V.oneOf(jt.alignment,[1,2,4,8],"invalid texture unpack alignment"),ut.unpackAlignment=jt.alignment),"colorSpace"in jt&&(V.parameter(jt.colorSpace,Ie,"invalid colorSpace"),ut.colorSpace=Ie[jt.colorSpace]),"type"in jt){var Nt=jt.type;V(Z.oes_texture_float||!(Nt==="float"||Nt==="float32"),"you must enable the OES_texture_float extension in order to use floating point textures."),V(Z.oes_texture_half_float||!(Nt==="half float"||Nt==="float16"),"you must enable the OES_texture_half_float extension in order to use 16-bit floating point textures."),V(Z.webgl_depth_texture||!(Nt==="uint16"||Nt==="uint32"||Nt==="depth stencil"),"you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures."),V.parameter(Nt,Be,"invalid texture type"),ut.type=Be[Nt]}var Xe=ut.width,sn=ut.height,ot=ut.channels,Q=!1;"shape"in jt?(V(Array.isArray(jt.shape)&&jt.shape.length>=2,"shape must be an array"),Xe=jt.shape[0],sn=jt.shape[1],jt.shape.length===3&&(ot=jt.shape[2],V(ot>0&&ot<=4,"invalid number of channels"),Q=!0),V(Xe>=0&&Xe<=ct.maxTextureSize,"invalid width"),V(sn>=0&&sn<=ct.maxTextureSize,"invalid height")):("radius"in jt&&(Xe=sn=jt.radius,V(Xe>=0&&Xe<=ct.maxTextureSize,"invalid radius")),"width"in jt&&(Xe=jt.width,V(Xe>=0&&Xe<=ct.maxTextureSize,"invalid width")),"height"in jt&&(sn=jt.height,V(sn>=0&&sn<=ct.maxTextureSize,"invalid height")),"channels"in jt&&(ot=jt.channels,V(ot>0&&ot<=4,"invalid number of channels"),Q=!0)),ut.width=Xe|0,ut.height=sn|0,ut.channels=ot|0;var yt=!1;if("format"in jt){var Lt=jt.format;V(Z.webgl_depth_texture||!(Lt==="depth"||Lt==="depth stencil"),"you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures."),V.parameter(Lt,me,"invalid texture format");var Dt=ut.internalformat=me[Lt];ut.format=Re[Dt],Lt in Be&&("type"in jt||(ut.type=Be[Lt])),Lt in Pe&&(ut.compressed=!0),yt=!0}!Q&&yt?ut.channels=Jo[ut.format]:Q&&!yt?ut.channels!==Jg[ut.format]&&(ut.format=ut.internalformat=Jg[ut.channels]):yt&&Q&&V(ut.channels===Jo[ut.format],"number of channels inconsistent with specified format")}}function Or(ut){B.pixelStorei(ZF,ut.flipY),B.pixelStorei(yv,ut.premultiplyAlpha),B.pixelStorei(Mx,ut.colorSpace),B.pixelStorei(Ax,ut.unpackAlignment)}function Ge(){he.call(this),this.xOffset=0,this.yOffset=0,this.data=null,this.needsFree=!1,this.element=null,this.needsCopy=!1}function Me(ut,jt){var Nt=null;if(bv(jt)?Nt=jt:jt&&(V.type(jt,"object","invalid pixel data type"),vr(ut,jt),"x"in jt&&(ut.xOffset=jt.x|0),"y"in jt&&(ut.yOffset=jt.y|0),bv(jt.data)&&(Nt=jt.data)),V(!ut.compressed||Nt instanceof Uint8Array,"compressed texture data must be stored in a uint8array"),jt.copy){V(!Nt,"can not specify copy and data field for the same texture");var Xe=Jt.viewportWidth,sn=Jt.viewportHeight;ut.width=ut.width||Xe-ut.xOffset,ut.height=ut.height||sn-ut.yOffset,ut.needsCopy=!0,V(ut.xOffset>=0&&ut.xOffset=0&&ut.yOffset0&&ut.width<=Xe&&ut.height>0&&ut.height<=sn,"copy texture read out of bounds")}else if(!Nt)ut.width=ut.width||1,ut.height=ut.height||1,ut.channels=ut.channels||4;else if(r(Nt))ut.channels=ut.channels||4,ut.data=Nt,!("type"in jt)&&ut.type===gv&&(ut.type=Lx(Nt));else if(ry(Nt))ut.channels=ut.channels||4,eB(ut,Nt),ut.alignment=1,ut.needsFree=!0;else if(ko(Nt)){var ot=Nt.data;!Array.isArray(ot)&&ut.type===gv&&(ut.type=Lx(ot));var Q=Nt.shape,yt=Nt.stride,Lt,Dt,Ct,xt,wt,rt;Q.length===3?(Ct=Q[2],rt=yt[2]):(V(Q.length===2,"invalid ndarray pixel data, must be 2 or 3D"),Ct=1,rt=1),Lt=Q[0],Dt=Q[1],xt=yt[0],wt=yt[1],ut.alignment=1,ut.width=Lt,ut.height=Dt,ut.channels=Ct,ut.format=ut.internalformat=Jg[Ct],ut.needsFree=!0,rB(ut,ot,xt,wt,rt,Nt.offset)}else if(Gc(Nt)||ny(Nt)||QF(Nt))Gc(Nt)||ny(Nt)?ut.element=Nt:ut.element=Nt.canvas,ut.width=ut.element.width,ut.height=ut.element.height,ut.channels=4;else if(JF(Nt))ut.element=Nt,ut.width=Nt.width,ut.height=Nt.height,ut.channels=4;else if(tB(Nt))ut.element=Nt,ut.width=Nt.naturalWidth,ut.height=Nt.naturalHeight,ut.channels=4;else if(Ix(Nt))ut.element=Nt,ut.width=Nt.videoWidth,ut.height=Nt.videoHeight,ut.channels=4;else if(PC(Nt)){var mt=ut.width||Nt[0].length,nt=ut.height||Nt.length,It=ut.channels;aa(Nt[0][0])?It=It||Nt[0][0].length:It=It||1;for(var Pt=qg.shape(Nt),re=1,ie=0;ie=0,"oes_texture_float extension not enabled"):ut.type===mv&&V(ct.extensions.indexOf("oes_texture_half_float")>=0,"oes_texture_half_float extension not enabled")}function fe(ut,jt,Nt){var Xe=ut.element,sn=ut.data,ot=ut.internalformat,Q=ut.format,yt=ut.type,Lt=ut.width,Dt=ut.height;Or(ut),Xe?B.texImage2D(jt,Nt,Q,Q,yt,Xe):ut.compressed?B.compressedTexImage2D(jt,Nt,ot,Lt,Dt,0,sn):ut.needsCopy?(Gt(),B.copyTexImage2D(jt,Nt,Q,ut.xOffset,ut.yOffset,Lt,Dt,0)):B.texImage2D(jt,Nt,Q,Lt,Dt,0,Q,yt,sn||null)}function Er(ut,jt,Nt,Xe,sn){var ot=ut.element,Q=ut.data,yt=ut.internalformat,Lt=ut.format,Dt=ut.type,Ct=ut.width,xt=ut.height;Or(ut),ot?B.texSubImage2D(jt,sn,Nt,Xe,Lt,Dt,ot):ut.compressed?B.compressedTexSubImage2D(jt,sn,Nt,Xe,yt,Ct,xt,Q):ut.needsCopy?(Gt(),B.copyTexSubImage2D(jt,sn,Nt,Xe,ut.xOffset,ut.yOffset,Ct,xt)):B.texSubImage2D(jt,sn,Nt,Xe,Ct,xt,Lt,Dt,Q)}var Vr=[];function Je(){return Vr.pop()||new Ge}function on(ut){ut.needsFree&&er.freeType(ut.data),Ge.call(ut),Vr.push(ut)}function Dr(){he.call(this),this.genMipmaps=!1,this.mipmapHint=hi,this.mipmask=0,this.images=Array(16)}function Kr(ut,jt,Nt){var Xe=ut.images[0]=Je();ut.mipmask=1,Xe.width=ut.width=jt,Xe.height=ut.height=Nt,Xe.channels=ut.channels=4}function yn(ut,jt){var Nt=null;if(bv(jt))Nt=ut.images[0]=Je(),Oe(Nt,ut),Me(Nt,jt),ut.mipmask=1;else if(vr(ut,jt),Array.isArray(jt.mipmap))for(var Xe=jt.mipmap,sn=0;sn>=sn,Nt.height>>=sn,Me(Nt,Xe[sn]),ut.mipmask|=1<=0&&!("faces"in jt)&&(ut.genMipmaps=!0)}if("mag"in jt){var Xe=jt.mag;V.parameter(Xe,Ce),ut.magFilter=Ce[Xe]}var sn=ut.wrapS,ot=ut.wrapT;if("wrap"in jt){var Q=jt.wrap;typeof Q=="string"?(V.parameter(Q,le),sn=ot=le[Q]):Array.isArray(Q)&&(V.parameter(Q[0],le),V.parameter(Q[1],le),sn=le[Q[0]],ot=le[Q[1]])}else{if("wrapS"in jt){var yt=jt.wrapS;V.parameter(yt,le),sn=le[yt]}if("wrapT"in jt){var Lt=jt.wrapT;V.parameter(Lt,le),ot=le[Lt]}}if(ut.wrapS=sn,ut.wrapT=ot,"anisotropic"in jt){var Dt=jt.anisotropic;V(typeof Dt=="number"&&Dt>=1&&Dt<=ct.maxAnisotropic,"aniso samples must be between 1 and "),ut.anisotropic=jt.anisotropic}if("mipmap"in jt){var Ct=!1;switch(typeof jt.mipmap){case"string":V.parameter(jt.mipmap,ve,"invalid mipmap hint"),ut.mipmapHint=ve[jt.mipmap],ut.genMipmaps=!0,Ct=!0;break;case"boolean":Ct=ut.genMipmaps=jt.mipmap;break;case"object":V(Array.isArray(jt.mipmap),"invalid mipmap type"),ut.genMipmaps=!1,Ct=!0;break;default:V.raise("invalid mipmap type")}Ct&&!("min"in jt)&&(ut.minFilter=te)}}function ki(ut,jt){B.texParameteri(jt,Bc,ut.minFilter),B.texParameteri(jt,qF,ut.magFilter),B.texParameteri(jt,GT,ut.wrapS),B.texParameteri(jt,HF,ut.wrapT),Z.ext_texture_filter_anisotropic&&B.texParameteri(jt,gl,ut.anisotropic),ut.genMipmaps&&(B.hint(Wa,ut.mipmapHint),B.generateMipmap(jt))}var La=0,ka={},eo=ct.maxTextureUnits,oa=Array(eo).map(function(){return null});function Yr(ut){he.call(this),this.mipmask=0,this.internalformat=Cd,this.id=La++,this.refCount=1,this.target=ut,this.texture=B.createTexture(),this.unit=-1,this.bindCount=0,this.texInfo=new bi,Vt.profile&&(this.stats={size:0})}function ro(ut){B.activeTexture(Jn),B.bindTexture(ut.target,ut.texture)}function Bn(){var ut=oa[0];ut?B.bindTexture(ut.target,ut.texture):B.bindTexture(eu,null)}function br(ut){var jt=ut.texture;V(jt,"must not double destroy texture");var Nt=ut.unit,Xe=ut.target;Nt>=0&&(B.activeTexture(Jn+Nt),B.bindTexture(Xe,null),oa[Nt]=null),B.deleteTexture(jt),ut.texture=null,ut.params=null,ut.pixels=null,ut.refCount=0,delete ka[ut.id],zt.textureCount--}e(Yr.prototype,{bind:function(){var ut=this;ut.bindCount+=1;var jt=ut.unit;if(jt<0){for(var Nt=0;Nt0)continue;Xe.unit=-1}oa[Nt]=ut,jt=Nt;break}jt>=eo&&V.raise("insufficient number of texture units"),Vt.profile&&zt.maxTextureUnits>wt)-Ct,rt.height=rt.height||(Nt.height>>wt)-xt,V(Nt.type===rt.type&&Nt.format===rt.format&&Nt.internalformat===rt.internalformat,"incompatible format for texture.subimage"),V(Ct>=0&&xt>=0&&Ct+rt.width<=Nt.width&&xt+rt.height<=Nt.height,"texture.subimage write out of bounds"),V(Nt.mipmask&1<>Ct;++Ct){var xt=Lt>>Ct,wt=Dt>>Ct;if(!xt||!wt)break;B.texImage2D(eu,Ct,Nt.format,xt,wt,0,Nt.format,Nt.type,null)}return Bn(),Vt.profile&&(Nt.stats.size=ga(Nt.internalformat,Nt.type,Lt,Dt,!1,!1)),Xe}return Xe(ut,jt),Xe.subimage=sn,Xe.resize=ot,Xe._reglType="texture2d",Xe._texture=Nt,Vt.profile&&(Xe.stats=Nt.stats),Xe.destroy=function(){Nt.decRef()},Xe}function Sn(ut,jt,Nt,Xe,sn,ot){var Q=new Yr(pv);ka[Q.id]=Q,zt.cubeCount++;var yt=new Array(6);function Lt(xt,wt,rt,mt,nt,It){var Pt,re=Q.texInfo;for(bi.call(re),Pt=0;Pt<6;++Pt)yt[Pt]=cn();if(typeof xt=="number"||!xt){var ie=xt|0||1;for(Pt=0;Pt<6;++Pt)Kr(yt[Pt],ie,ie)}else if(typeof xt=="object")if(wt)yn(yt[0],xt),yn(yt[1],wt),yn(yt[2],rt),yn(yt[3],mt),yn(yt[4],nt),yn(yt[5],It);else if(oi(re,xt),vr(Q,xt),"faces"in xt){var Kt=xt.faces;for(V(Array.isArray(Kt)&&Kt.length===6,"cube faces must be a length 6 array"),Pt=0;Pt<6;++Pt)V(typeof Kt[Pt]=="object"&&!!Kt[Pt],"invalid input for cube map face"),Oe(yt[Pt],Q),yn(yt[Pt],Kt[Pt])}else for(Pt=0;Pt<6;++Pt)yn(yt[Pt],xt);else V.raise("invalid arguments to cube map");for(Oe(Q,yt[0]),ct.npotTextureCube||V(kT(Q.width)&&kT(Q.height),"your browser does not support non power or two texture dimensions"),re.genMipmaps?Q.mipmask=(yt[0].width<<1)-1:Q.mipmask=yt[0].mipmask,V.textureCube(Q,re,yt,ct),Q.internalformat=yt[0].internalformat,Lt.width=yt[0].width,Lt.height=yt[0].height,ro(Q),Pt=0;Pt<6;++Pt)$i(yt[Pt],kf+Pt);for(ki(re,pv),Bn(),Vt.profile&&(Q.stats.size=ga(Q.internalformat,Q.type,Lt.width,Lt.height,re.genMipmaps,!0)),Lt.format=pe[Q.internalformat],Lt.type=Le[Q.type],Lt.mag=ue[re.magFilter],Lt.min=He[re.minFilter],Lt.wrapS=ce[re.wrapS],Lt.wrapT=ce[re.wrapT],Pt=0;Pt<6;++Pt)Qi(yt[Pt]);return Lt}function Dt(xt,wt,rt,mt,nt){V(!!wt,"must specify image data"),V(typeof xt=="number"&&xt===(xt|0)&&xt>=0&&xt<6,"invalid face");var It=rt|0,Pt=mt|0,re=nt|0,ie=Je();return Oe(ie,Q),ie.width=0,ie.height=0,Me(ie,wt),ie.width=ie.width||(Q.width>>re)-It,ie.height=ie.height||(Q.height>>re)-Pt,V(Q.type===ie.type&&Q.format===ie.format&&Q.internalformat===ie.internalformat,"incompatible format for texture.subimage"),V(It>=0&&Pt>=0&&It+ie.width<=Q.width&&Pt+ie.height<=Q.height,"texture.subimage write out of bounds"),V(Q.mipmask&1<>mt;++mt)B.texImage2D(kf+rt,mt,Q.format,wt>>mt,wt>>mt,0,Q.format,Q.type,null);return Bn(),Vt.profile&&(Q.stats.size=ga(Q.internalformat,Q.type,Lt.width,Lt.height,!1,!0)),Lt}}return Lt(ut,jt,Nt,Xe,sn,ot),Lt.subimage=Dt,Lt.resize=Ct,Lt._reglType="textureCube",Lt._texture=Q,Vt.profile&&(Lt.stats=Q.stats),Lt.destroy=function(){Q.decRef()},Lt}function sa(){for(var ut=0;ut>Xe,Nt.height>>Xe,0,Nt.internalformat,Nt.type,null);else for(var sn=0;sn<6;++sn)B.texImage2D(kf+sn,Xe,Nt.internalformat,Nt.width>>Xe,Nt.height>>Xe,0,Nt.internalformat,Nt.type,null);ki(Nt.texInfo,Nt.target)})}function Xd(){for(var ut=0;ut=2,"invalid renderbuffer shape"),He=Oe[0]|0,ce=Oe[1]|0}else"radius"in he&&(He=ce=he.radius|0),"width"in he&&(He=he.width|0),"height"in he&&(ce=he.height|0);"format"in he&&(V.parameter(he.format,zt,"invalid renderbuffer format"),Re=zt[he.format])}else typeof Le=="number"?(He=Le|0,typeof ue=="number"?ce=ue|0:ce=He):Le?V.raise("invalid arguments to renderbuffer constructor"):He=ce=1;if(V(He>0&&ce>0&&He<=ct.maxRenderbufferSize&&ce<=ct.maxRenderbufferSize,"invalid renderbuffer size"),!(He===Ot.width&&ce===Ot.height&&Re===Ot.format))return Yt.width=Ot.width=He,Yt.height=Ot.height=ce,Ot.format=Re,B.bindRenderbuffer(zc,Ot.renderbuffer),B.renderbufferStorage(zc,Re,He,ce),V(B.getError()===0,"invalid render buffer format"),Jt.profile&&(Ot.stats.size=VT(Ot.format,Ot.width,Ot.height)),Yt.format=Vt[Ot.format],Yt}function pe(Le,ue){var He=Le|0,ce=ue|0||He;return He===Ot.width&&ce===Ot.height||(V(He>0&&ce>0&&He<=ct.maxRenderbufferSize&&ce<=ct.maxRenderbufferSize,"invalid renderbuffer size"),Yt.width=Ot.width=He,Yt.height=Ot.height=ce,B.bindRenderbuffer(zc,Ot.renderbuffer),B.renderbufferStorage(zc,Ot.format,He,ce),V(B.getError()===0,"invalid render buffer format"),Jt.profile&&(Ot.stats.size=VT(Ot.format,Ot.width,Ot.height))),Yt}return Yt(me,Pe),Yt.resize=pe,Yt._reglType="renderbuffer",Yt._renderbuffer=Ot,Jt.profile&&(Yt.stats=Ot.stats),Yt.destroy=function(){Ot.decRef()},Yt}Jt.profile&&(Gt.getTotalRenderbufferSize=function(){var me=0;return Object.keys(le).forEach(function(Pe){me+=le[Pe].stats.size}),me});function Be(){ys(le).forEach(function(me){me.renderbuffer=B.createRenderbuffer(),B.bindRenderbuffer(zc,me.renderbuffer),B.renderbufferStorage(zc,me.format,me.width,me.height)}),B.bindRenderbuffer(zc,null)}return{create:Ie,clear:function(){ys(le).forEach(ye)},restore:Be}},Ff=36160,NC=36161,Td=3553,Id=34069,wv=36064,FC=36096,tt=36128,Ld=33306,ay=36053,yl=36054,Fn=36055,iB=36057,aB=36061,oB=36193,Od=5121,sB=5126,HT=6407,YT=6408,lB=6402,uB=[HT,YT],nu=[];nu[YT]=4,nu[HT]=3;var kx=[];kx[Od]=1,kx[sB]=4,kx[oB]=2;var fB=32854,cB=32855,hB=36194,dB=33189,Bf=36168,XT=34041,pB=35907,vB=34836,mB=34842,gB=34843,Dd=[fB,cB,hB,pB,mB,gB,vB],Ev={};Ev[ay]="complete",Ev[yl]="incomplete attachment",Ev[iB]="incomplete dimensions",Ev[Fn]="incomplete, missing attachment",Ev[aB]="unsupported";function yB(B,Z,ct,Gt,Jt,zt){var Vt={cur:null,next:null,dirty:!1,setFBO:null},ve=["rgba"],le=["rgba4","rgb565","rgb5 a1"];Z.ext_srgb&&le.push("srgba"),Z.ext_color_buffer_half_float&&le.push("rgba16f","rgb16f"),Z.webgl_color_buffer_float&&le.push("rgba32f");var Ce=["uint8"];Z.oes_texture_half_float&&Ce.push("half float","float16"),Z.oes_texture_float&&Ce.push("float","float32");function ye(Ge,Me,fe){this.target=Ge,this.texture=Me,this.renderbuffer=fe;var Er=0,Vr=0;Me?(Er=Me.width,Vr=Me.height):fe&&(Er=fe.width,Vr=fe.height),this.width=Er,this.height=Vr}function Ie(Ge){Ge&&(Ge.texture&&Ge.texture._texture.decRef(),Ge.renderbuffer&&Ge.renderbuffer._renderbuffer.decRef())}function Be(Ge,Me,fe){if(!!Ge)if(Ge.texture){var Er=Ge.texture._texture,Vr=Math.max(1,Er.width),Je=Math.max(1,Er.height);V(Vr===Me&&Je===fe,"inconsistent width/height for supplied texture"),Er.refCount+=1}else{var on=Ge.renderbuffer._renderbuffer;V(on.width===Me&&on.height===fe,"inconsistent width/height for renderbuffer"),on.refCount+=1}}function me(Ge,Me){Me&&(Me.texture?B.framebufferTexture2D(Ff,Ge,Me.target,Me.texture._texture.texture,0):B.framebufferRenderbuffer(Ff,Ge,NC,Me.renderbuffer._renderbuffer.renderbuffer))}function Pe(Ge){var Me=Td,fe=null,Er=null,Vr=Ge;typeof Ge=="object"&&(Vr=Ge.data,"target"in Ge&&(Me=Ge.target|0)),V.type(Vr,"function","invalid attachment data");var Je=Vr._reglType;return Je==="texture2d"?(fe=Vr,V(Me===Td)):Je==="textureCube"?(fe=Vr,V(Me>=Id&&Me=2,"invalid shape for framebuffer"),Kr=ro[0],yn=ro[1]}else"radius"in Yr&&(Kr=yn=Yr.radius),"width"in Yr&&(Kr=Yr.width),"height"in Yr&&(yn=Yr.height);("color"in Yr||"colors"in Yr)&&(cn=Yr.color||Yr.colors,Array.isArray(cn)&&V(cn.length===1||Z.webgl_draw_buffers,"multiple render targets not supported")),cn||("colorCount"in Yr&&(ki=Yr.colorCount|0,V(ki>0,"invalid color buffer count")),"colorTexture"in Yr&&(Qi=!!Yr.colorTexture,bi="rgba4"),"colorType"in Yr&&(oi=Yr.colorType,Qi?(V(Z.oes_texture_float||!(oi==="float"||oi==="float32"),"you must enable OES_texture_float in order to use floating point framebuffer objects"),V(Z.oes_texture_half_float||!(oi==="half float"||oi==="float16"),"you must enable OES_texture_half_float in order to use 16-bit floating point framebuffer objects")):oi==="half float"||oi==="float16"?(V(Z.ext_color_buffer_half_float,"you must enable EXT_color_buffer_half_float to use 16-bit render buffers"),bi="rgba16f"):(oi==="float"||oi==="float32")&&(V(Z.webgl_color_buffer_float,"you must enable WEBGL_color_buffer_float in order to use 32-bit floating point renderbuffers"),bi="rgba32f"),V.oneOf(oi,Ce,"invalid color type")),"colorFormat"in Yr&&(bi=Yr.colorFormat,ve.indexOf(bi)>=0?Qi=!0:le.indexOf(bi)>=0?Qi=!1:Qi?V.oneOf(Yr.colorFormat,ve,"invalid color format for texture"):V.oneOf(Yr.colorFormat,le,"invalid color format for renderbuffer"))),("depthTexture"in Yr||"depthStencilTexture"in Yr)&&(oa=!!(Yr.depthTexture||Yr.depthStencilTexture),V(!oa||Z.webgl_depth_texture,"webgl_depth_texture extension not supported")),"depth"in Yr&&(typeof Yr.depth=="boolean"?$i=Yr.depth:(La=Yr.depth,Ia=!1)),"stencil"in Yr&&(typeof Yr.stencil=="boolean"?Ia=Yr.stencil:(ka=Yr.stencil,$i=!1)),"depthStencil"in Yr&&(typeof Yr.depthStencil=="boolean"?$i=Ia=Yr.depthStencil:(eo=Yr.depthStencil,$i=!1,Ia=!1))}var Bn=null,br=null,hn=null,Sn=null;if(Array.isArray(cn))Bn=cn.map(Pe);else if(cn)Bn=[Pe(cn)];else for(Bn=new Array(ki),Dr=0;Dr=0||Bn[Dr].renderbuffer&&Dd.indexOf(Bn[Dr].renderbuffer._renderbuffer.format)>=0,"framebuffer color attachment "+Dr+" is invalid"),Bn[Dr]&&Bn[Dr].texture){var Uu=nu[Bn[Dr].texture._texture.format]*kx[Bn[Dr].texture._texture.type];sa===null?sa=Uu:V(sa===Uu,"all color attachments much have the same number of bits per pixel.")}return Be(br,Kr,yn),V(!br||br.texture&&br.texture._texture.format===lB||br.renderbuffer&&br.renderbuffer._renderbuffer.format===dB,"invalid depth attachment for framebuffer object"),Be(hn,Kr,yn),V(!hn||hn.renderbuffer&&hn.renderbuffer._renderbuffer.format===Bf,"invalid stencil attachment for framebuffer object"),Be(Sn,Kr,yn),V(!Sn||Sn.texture&&Sn.texture._texture.format===XT||Sn.renderbuffer&&Sn.renderbuffer._renderbuffer.format===XT,"invalid depth-stencil attachment for framebuffer object"),ce(fe),fe.width=Kr,fe.height=yn,fe.colorAttachments=Bn,fe.depthAttachment=br,fe.stencilAttachment=hn,fe.depthStencilAttachment=Sn,Er.color=Bn.map(Yt),Er.depth=Yt(br),Er.stencil=Yt(hn),Er.depthStencil=Yt(Sn),Er.width=fe.width,Er.height=fe.height,he(fe),Er}function Vr(Je,on){V(Vt.next!==fe,"can not resize a framebuffer which is currently in use");var Dr=Math.max(Je|0,1),Kr=Math.max(on|0||Dr,1);if(Dr===fe.width&&Kr===fe.height)return Er;for(var yn=fe.colorAttachments,$i=0;$i=2,"invalid shape for framebuffer"),V(Qi[0]===Qi[1],"cube framebuffer must be square"),Dr=Qi[0]}else"radius"in cn&&(Dr=cn.radius|0),"width"in cn?(Dr=cn.width|0,"height"in cn&&V(cn.height===Dr,"must be square")):"height"in cn&&(Dr=cn.height|0);("color"in cn||"colors"in cn)&&(Kr=cn.color||cn.colors,Array.isArray(Kr)&&V(Kr.length===1||Z.webgl_draw_buffers,"multiple render targets not supported")),Kr||("colorCount"in cn&&(Ia=cn.colorCount|0,V(Ia>0,"invalid color buffer count")),"colorType"in cn&&(V.oneOf(cn.colorType,Ce,"invalid color type"),$i=cn.colorType),"colorFormat"in cn&&(yn=cn.colorFormat,V.oneOf(cn.colorFormat,ve,"invalid color format for texture"))),"depth"in cn&&(on.depth=cn.depth),"stencil"in cn&&(on.stencil=cn.stencil),"depthStencil"in cn&&(on.depthStencil=cn.depthStencil)}var bi;if(Kr)if(Array.isArray(Kr))for(bi=[],Je=0;Je0&&(on.depth=Me[0].depth,on.stencil=Me[0].stencil,on.depthStencil=Me[0].depthStencil),Me[Je]?Me[Je](on):Me[Je]=Oe(on)}return e(fe,{width:Dr,height:Dr,color:bi})}function Er(Vr){var Je,on=Vr|0;if(V(on>0&&on<=ct.maxCubeMapSize,"invalid radius for cube fbo"),on===fe.width)return fe;var Dr=fe.color;for(Je=0;Je0,"must specify at least one attribute");var vr={},Or=Re.attributes;Or.length=Oe.length;for(var Ge=0;Ge=Er.byteLength?Vr.subdata(Er):(Vr.destroy(),Re.buffers[Ge]=null)),Re.buffers[Ge]||(Vr=Re.buffers[Ge]=Jt.create(Me,qT,!1,!0)),fe.buffer=Jt.getBuffer(Vr),fe.size=fe.buffer.dimension|0,fe.normalized=!1,fe.type=fe.buffer.dtype,fe.offset=0,fe.stride=0,fe.divisor=0,fe.state=1,vr[Ge]=1}else Jt.getBuffer(Me)?(fe.buffer=Jt.getBuffer(Me),fe.size=fe.buffer.dimension|0,fe.normalized=!1,fe.type=fe.buffer.dtype,fe.offset=0,fe.stride=0,fe.divisor=0,fe.state=1):Jt.getBuffer(Me.buffer)?(fe.buffer=Jt.getBuffer(Me.buffer),fe.size=(+Me.size||fe.buffer.dimension)|0,fe.normalized=!!Me.normalized||!1,"type"in Me?(V.parameter(Me.type,bd,"invalid buffer type"),fe.type=bd[Me.type]):fe.type=fe.buffer.dtype,fe.offset=(Me.offset||0)|0,fe.stride=(Me.stride||0)|0,fe.divisor=(Me.divisor||0)|0,fe.state=1,V(fe.size>=1&&fe.size<=4,"size must be between 1 and 4"),V(fe.offset>=0,"invalid offset"),V(fe.stride>=0&&fe.stride<=255,"stride must be between 0 and 255"),V(fe.divisor>=0,"divisor must be positive"),V(!fe.divisor||!!Z.angle_instanced_arrays,"ANGLE_instanced_arrays must be enabled to use divisor")):"x"in Me?(V(Ge>0,"first attribute must not be a constant"),fe.x=+Me.x||0,fe.y=+Me.y||0,fe.z=+Me.z||0,fe.w=+Me.w||0,fe.state=2):V(!1,"invalid attribute spec for location "+Ge)}for(var Je=0;Je1)for(var Or=0;OrOt&&(Ot=Yt.stats.uniformsCount)}),Ot},ct.getMaxAttributesCount=function(){var Ot=0;return ye.forEach(function(Yt){Yt.stats.attributesCount>Ot&&(Ot=Yt.stats.attributesCount)}),Ot});function Pe(){Jt={},zt={};for(var Ot=0;Ot=0,"missing vertex shader",pe),V.command(Yt>=0,"missing fragment shader",pe);var ue=Ce[Yt];ue||(ue=Ce[Yt]={});var He=ue[Ot];if(He&&(He.refCount++,!Le))return He;var ce=new Be(Yt,Ot);return ct.shaderCount++,me(ce,pe,Le),He||(ue[Ot]=ce),ye.push(ce),e(ce,{destroy:function(){if(ce.refCount--,ce.refCount<=0){B.deleteProgram(ce.program);var Re=ye.indexOf(ce);ye.splice(Re,1),ct.shaderCount--}ue[ce.vertId].refCount<=0&&(B.deleteShader(zt[ce.vertId]),delete zt[ce.vertId],delete Ce[ce.fragId][ce.vertId]),Object.keys(Ce[ce.fragId]).length||(B.deleteShader(Jt[ce.fragId]),delete Jt[ce.fragId],delete Ce[ce.fragId])}})},restore:Pe,shader:le,frag:-1,vert:-1}}var SB=6408,Pd=5121,oy=3333,kd=5126;function CB(B,Z,ct,Gt,Jt,zt,Vt){function ve(ye){var Ie;Z.next===null?(V(Jt.preserveDrawingBuffer,'you must create a webgl context with "preserveDrawingBuffer":true in order to read pixels from the drawing buffer'),Ie=Pd):(V(Z.next.colorAttachments[0].texture!==null,"You cannot read from a renderbuffer"),Ie=Z.next.colorAttachments[0].texture._texture.type,zt.oes_texture_float?(V(Ie===Pd||Ie===kd,"Reading from a framebuffer is only allowed for the types 'uint8' and 'float'"),Ie===kd&&V(Vt.readFloat,"Reading 'float' values is not permitted in your browser. For a fallback, please see: https://www.npmjs.com/package/glsl-read-float")):V(Ie===Pd,"Reading from a framebuffer is only allowed for the type 'uint8'"));var Be=0,me=0,Pe=Gt.framebufferWidth,Ot=Gt.framebufferHeight,Yt=null;r(ye)?Yt=ye:ye&&(V.type(ye,"object","invalid arguments to regl.read()"),Be=ye.x|0,me=ye.y|0,V(Be>=0&&Be=0&&me0&&Pe+Be<=Gt.framebufferWidth,"invalid width for read pixels"),V(Ot>0&&Ot+me<=Gt.framebufferHeight,"invalid height for read pixels"),ct();var pe=Pe*Ot*4;return Yt||(Ie===Pd?Yt=new Uint8Array(pe):Ie===kd&&(Yt=Yt||new Float32Array(pe))),V.isTypedArray(Yt,"data buffer for regl.read() must be a typedarray"),V(Yt.byteLength>=pe,"data buffer for regl.read() too small"),B.pixelStorei(oy,4),B.readPixels(Be,me,Pe,Ot,SB,Ie,Yt),Yt}function le(ye){var Ie;return Z.setFBO({framebuffer:ye.framebuffer},function(){Ie=ve(ye)}),Ie}function Ce(ye){return!ye||!("framebuffer"in ye)?ve(ye):le(ye)}return Ce}function Rd(B){return Array.prototype.slice.call(B)}function Av(B){return Rd(B).join("")}function Gf(){var B=0,Z=[],ct=[];function Gt(Ie){for(var Be=0;Be0&&(Ie.push(Ot,"="),Ie.push.apply(Ie,Rd(arguments)),Ie.push(";")),Ot}return e(Be,{def:Pe,toString:function(){return Av([me.length>0?"var "+me.join(",")+";":"",Av(Ie)])}})}function zt(){var Ie=Jt(),Be=Jt(),me=Ie.toString,Pe=Be.toString;function Ot(Yt,pe){Be(Yt,pe,"=",Ie.def(Yt,pe),";")}return e(function(){Ie.apply(Ie,Rd(arguments))},{def:Ie.def,entry:Ie,exit:Be,save:Ot,set:function(Yt,pe,Le){Ot(Yt,pe),Ie(Yt,pe,"=",Le,";")},toString:function(){return me()+Pe()}})}function Vt(){var Ie=Av(arguments),Be=zt(),me=zt(),Pe=Be.toString,Ot=me.toString;return e(Be,{then:function(){return Be.apply(Be,Rd(arguments)),this},else:function(){return me.apply(me,Rd(arguments)),this},toString:function(){var Yt=Ot();return Yt&&(Yt="else{"+Yt+"}"),Av(["if(",Ie,"){",Pe(),"}",Yt])}})}var ve=Jt(),le={};function Ce(Ie,Be){var me=[];function Pe(){var ue="a"+me.length;return me.push(ue),ue}Be=Be||0;for(var Ot=0;Ot":516,notequal:517,"!=":517,"!==":517,gequal:518,">=":518,always:519},Kc={"0":0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,"increment wrap":34055,"decrement wrap":34056,invert:5386},qC={frag:AB,vert:MB},Zx={cw:uI,ccw:Kx};function Yd(B){return Array.isArray(B)||r(B)||ko(B)}function KC(B){return B.sort(function(Z,ct){return Z===zf?-1:ct===zf?1:Z=1,Gt>=2,Z)}else if(ct===sy){var Jt=B.data;return new to(Jt.thisDep,Jt.contextDep,Jt.propDep,Z)}else{if(ct===QT)return new to(!1,!1,!1,Z);if(ct===ly){for(var zt=!1,Vt=!1,ve=!1,le=0;le=1&&(Vt=!0),ye>=2&&(ve=!0)}else Ce.type===sy&&(zt=zt||Ce.data.thisDep,Vt=Vt||Ce.data.contextDep,ve=ve||Ce.data.propDep)}return new to(zt,Vt,ve,Z)}else return new to(ct===Ru,ct===Nd,ct===Nx,Z)}}var ZC=new to(!1,!1,!1,function(){});function $x(B,Z,ct,Gt,Jt,zt,Vt,ve,le,Ce,ye,Ie,Be,me,Pe){var Ot=Ce.Record,Yt={add:32774,subtract:32778,"reverse subtract":32779};ct.ext_blend_minmax&&(Yt.min=fI,Yt.max=xs);var pe=ct.angle_instanced_arrays,Le=ct.webgl_draw_buffers,ue={dirty:!0,profile:Pe.profile},He={},ce=[],Re={},he={};function Oe(ot){return ot.replace(".","_")}function vr(ot,Q,yt){var Lt=Oe(ot);ce.push(ot),He[Lt]=ue[Lt]=!!yt,Re[Lt]=Q}function Or(ot,Q,yt){var Lt=Oe(ot);ce.push(ot),Array.isArray(yt)?(ue[Lt]=yt.slice(),He[Lt]=yt.slice()):ue[Lt]=He[Lt]=yt,he[Lt]=Q}vr(JT,xl),vr(zC,IB),Or(Ja,"blendColor",[0,0,0,0]),Or(uy,"blendEquationSeparate",[Vd,Vd]),Or(Fx,"blendFuncSeparate",[Sy,cI,Sy,cI]),vr(au,Yx,!0),Or(Bx,"depthFunc",hI),Or(fy,"depthRange",[0,1]),Or(Wc,"depthMask",!0),Or(Gx,Gx,[!0,!0,!0,!0]),vr(Fo,TB),Or(zx,"cullFace",Xc),Or(UC,UC,Kx),Or(jC,jC,1),vr(tI,oI),Or(cy,"polygonOffset",[0,0]),vr(eI,sI),vr(Mv,Bs),Or(Ux,"sampleCoverage",[1,!1]),vr(rI,LB),Or(nI,"stencilMask",-1),Or(Fd,"stencilFunc",[Fu,0,-1]),Or(WC,"stencilOpSeparate",[Nv,qc,qc,qc]),Or(hy,"stencilOpSeparate",[Xc,qc,qc,qc]),vr(jx,YC),Or(dy,"scissor",[0,0,B.drawingBufferWidth,B.drawingBufferHeight]),Or(zf,zf,[0,0,B.drawingBufferWidth,B.drawingBufferHeight]);var Ge={gl:B,context:Be,strings:Z,next:He,current:ue,draw:Ie,elements:zt,buffer:Jt,shader:ye,attributes:Ce.state,vao:Ce,uniforms:le,framebuffer:ve,extensions:ct,timer:me,isBufferArgs:Yd},Me={primTypes:Sd,compareFuncs:Bu,blendFuncs:lu,blendEquations:Yt,stencilOps:Kc,glTypes:bd,orientationType:Zx};V.optional(function(){Ge.isArrayLike=aa}),Le&&(Me.backBuffer=[Xc],Me.drawBuffer=Li(Gt.maxDrawbuffers,function(ot){return ot===0?[0]:Li(ot,function(Q){return OB+Q})}));var fe=0;function Er(){var ot=Gf(),Q=ot.link,yt=ot.global;ot.id=fe++,ot.batchId="0";var Lt=Q(Ge),Dt=ot.shared={props:"a0"};Object.keys(Ge).forEach(function(mt){Dt[mt]=yt.def(Lt,".",mt)}),V.optional(function(){ot.CHECK=Q(V),ot.commandStr=V.guessCommand(),ot.command=Q(ot.commandStr),ot.assert=function(mt,nt,It){mt("if(!(",nt,"))",this.CHECK,".commandRaise(",Q(It),",",this.command,");")},Me.invalidBlendCombinations=Hd});var Ct=ot.next={},xt=ot.current={};Object.keys(he).forEach(function(mt){Array.isArray(ue[mt])&&(Ct[mt]=yt.def(Dt.next,".",mt),xt[mt]=yt.def(Dt.current,".",mt))});var wt=ot.constants={};Object.keys(Me).forEach(function(mt){wt[mt]=yt.def(JSON.stringify(Me[mt]))}),ot.invoke=function(mt,nt){switch(nt.type){case Rx:var It=["this",Dt.context,Dt.props,ot.batchId];return mt.def(Q(nt.data),".call(",It.slice(0,Math.max(nt.data.length+1,4)),")");case Nx:return mt.def(Dt.props,nt.data);case Nd:return mt.def(Dt.context,nt.data);case Ru:return mt.def("this",nt.data);case sy:return nt.data.append(ot,mt),nt.data.ref;case QT:return nt.data.toString();case ly:return nt.data.map(function(Pt){return ot.invoke(mt,Pt)})}},ot.attribCache={};var rt={};return ot.scopeAttrib=function(mt){var nt=Z.id(mt);if(nt in rt)return rt[nt];var It=Ce.scope[nt];It||(It=Ce.scope[nt]=new Ot);var Pt=rt[nt]=Q(It);return Pt},ot}function Vr(ot){var Q=ot.static,yt=ot.dynamic,Lt;if(py in Q){var Dt=!!Q[py];Lt=Wi(function(xt,wt){return Dt}),Lt.enable=Dt}else if(py in yt){var Ct=yt[py];Lt=bs(Ct,function(xt,wt){return xt.invoke(wt,Ct)})}return Lt}function Je(ot,Q){var yt=ot.static,Lt=ot.dynamic;if(Bd in yt){var Dt=yt[Bd];return Dt?(Dt=ve.getFramebuffer(Dt),V.command(Dt,"invalid framebuffer object"),Wi(function(xt,wt){var rt=xt.link(Dt),mt=xt.shared;wt.set(mt.framebuffer,".next",rt);var nt=mt.context;return wt.set(nt,"."+Ud,rt+".width"),wt.set(nt,"."+Iv,rt+".height"),rt})):Wi(function(xt,wt){var rt=xt.shared;wt.set(rt.framebuffer,".next","null");var mt=rt.context;return wt.set(mt,"."+Ud,mt+"."+HC),wt.set(mt,"."+Iv,mt+"."+Hx),"null"})}else if(Bd in Lt){var Ct=Lt[Bd];return bs(Ct,function(xt,wt){var rt=xt.invoke(wt,Ct),mt=xt.shared,nt=mt.framebuffer,It=wt.def(nt,".getFramebuffer(",rt,")");V.optional(function(){xt.assert(wt,"!"+rt+"||"+It,"invalid framebuffer object")}),wt.set(nt,".next",It);var Pt=mt.context;return wt.set(Pt,"."+Ud,It+"?"+It+".width:"+Pt+"."+HC),wt.set(Pt,"."+Iv,It+"?"+It+".height:"+Pt+"."+Hx),It})}else return null}function on(ot,Q,yt){var Lt=ot.static,Dt=ot.dynamic;function Ct(rt){if(rt in Lt){var mt=Lt[rt];V.commandType(mt,"object","invalid "+rt,yt.commandStr);var nt=!0,It=mt.x|0,Pt=mt.y|0,re,ie;return"width"in mt?(re=mt.width|0,V.command(re>=0,"invalid "+rt,yt.commandStr)):nt=!1,"height"in mt?(ie=mt.height|0,V.command(ie>=0,"invalid "+rt,yt.commandStr)):nt=!1,new to(!nt&&Q&&Q.thisDep,!nt&&Q&&Q.contextDep,!nt&&Q&&Q.propDep,function(ir,Xr){var tr=ir.shared.context,Cr=re;"width"in mt||(Cr=Xr.def(tr,".",Ud,"-",It));var jr=ie;return"height"in mt||(jr=Xr.def(tr,".",Iv,"-",Pt)),[It,Pt,Cr,jr]})}else if(rt in Dt){var Kt=Dt[rt],_e=bs(Kt,function(ir,Xr){var tr=ir.invoke(Xr,Kt);V.optional(function(){ir.assert(Xr,tr+"&&typeof "+tr+'==="object"',"invalid "+rt)});var Cr=ir.shared.context,jr=Xr.def(tr,".x|0"),Ln=Xr.def(tr,".y|0"),Ji=Xr.def('"width" in ',tr,"?",tr,".width|0:","(",Cr,".",Ud,"-",jr,")"),ts=Xr.def('"height" in ',tr,"?",tr,".height|0:","(",Cr,".",Iv,"-",Ln,")");return V.optional(function(){ir.assert(Xr,Ji+">=0&&"+ts+">=0","invalid "+rt)}),[jr,Ln,Ji,ts]});return Q&&(_e.thisDep=_e.thisDep||Q.thisDep,_e.contextDep=_e.contextDep||Q.contextDep,_e.propDep=_e.propDep||Q.propDep),_e}else return Q?new to(Q.thisDep,Q.contextDep,Q.propDep,function(ir,Xr){var tr=ir.shared.context;return[0,0,Xr.def(tr,".",Ud),Xr.def(tr,".",Iv)]}):null}var xt=Ct(zf);if(xt){var wt=xt;xt=new to(xt.thisDep,xt.contextDep,xt.propDep,function(rt,mt){var nt=wt.append(rt,mt),It=rt.shared.context;return mt.set(It,"."+iI,nt[2]),mt.set(It,"."+wB,nt[3]),nt})}return{viewport:xt,scissor_box:Ct(dy)}}function Dr(ot,Q){var yt=ot.static,Lt=typeof yt[Gd]=="string"&&typeof yt[Tv]=="string";if(Lt){if(Object.keys(Q.dynamic).length>0)return null;var Dt=Q.static,Ct=Object.keys(Dt);if(Ct.length>0&&typeof Dt[Ct[0]]=="number"){for(var xt=[],wt=0;wt=0,"invalid "+nt,Q.commandStr),Wi(function(ie,Kt){return It&&(ie.OFFSET=Pt),Pt})}else if(nt in Lt){var re=Lt[nt];return bs(re,function(ie,Kt){var _e=ie.invoke(Kt,re);return It&&(ie.OFFSET=_e,V.optional(function(){ie.assert(Kt,_e+">=0","invalid "+nt)})),_e})}else if(It&&Ct)return Wi(function(ie,Kt){return ie.OFFSET="0",0});return null}var rt=wt(vy,!0);function mt(){if(Vc in yt){var nt=yt[Vc]|0;return V.command(typeof nt=="number"&&nt>=0,"invalid vertex count",Q.commandStr),Wi(function(){return nt})}else if(Vc in Lt){var It=Lt[Vc];return bs(It,function(ie,Kt){var _e=ie.invoke(Kt,It);return V.optional(function(){ie.assert(Kt,"typeof "+_e+'==="number"&&'+_e+">=0&&"+_e+"===("+_e+"|0)","invalid vertex count")}),_e})}else if(Ct)if(Gu(Ct)){if(Ct)return rt?new to(rt.thisDep,rt.contextDep,rt.propDep,function(ie,Kt){var _e=Kt.def(ie.ELEMENTS,".vertCount-",ie.OFFSET);return V.optional(function(){ie.assert(Kt,_e+">=0","invalid vertex offset/element buffer too small")}),_e}):Wi(function(ie,Kt){return Kt.def(ie.ELEMENTS,".vertCount")});var Pt=Wi(function(){return-1});return V.optional(function(){Pt.MISSING=!0}),Pt}else{var re=new to(Ct.thisDep||rt.thisDep,Ct.contextDep||rt.contextDep,Ct.propDep||rt.propDep,function(ie,Kt){var _e=ie.ELEMENTS;return ie.OFFSET?Kt.def(_e,"?",_e,".vertCount-",ie.OFFSET,":-1"):Kt.def(_e,"?",_e,".vertCount:-1")});return V.optional(function(){re.DYNAMIC=!0}),re}return null}return{elements:Ct,primitive:xt(),count:mt(),instances:wt(my,!1),offset:rt}}function $i(ot,Q){var yt=ot.static,Lt=ot.dynamic,Dt={};return ce.forEach(function(Ct){var xt=Oe(Ct);function wt(rt,mt){if(Ct in yt){var nt=rt(yt[Ct]);Dt[xt]=Wi(function(){return nt})}else if(Ct in Lt){var It=Lt[Ct];Dt[xt]=bs(It,function(Pt,re){return mt(Pt,re,Pt.invoke(re,It))})}}switch(Ct){case Fo:case zC:case JT:case rI:case au:case jx:case tI:case eI:case Mv:case Wc:return wt(function(rt){return V.commandType(rt,"boolean",Ct,Q.commandStr),rt},function(rt,mt,nt){return V.optional(function(){rt.assert(mt,"typeof "+nt+'==="boolean"',"invalid flag "+Ct,rt.commandStr)}),nt});case Bx:return wt(function(rt){return V.commandParameter(rt,Bu,"invalid "+Ct,Q.commandStr),Bu[rt]},function(rt,mt,nt){var It=rt.constants.compareFuncs;return V.optional(function(){rt.assert(mt,nt+" in "+It,"invalid "+Ct+", must be one of "+Object.keys(Bu))}),mt.def(It,"[",nt,"]")});case fy:return wt(function(rt){return V.command(aa(rt)&&rt.length===2&&typeof rt[0]=="number"&&typeof rt[1]=="number"&&rt[0]<=rt[1],"depth range is 2d array",Q.commandStr),rt},function(rt,mt,nt){V.optional(function(){rt.assert(mt,rt.shared.isArrayLike+"("+nt+")&&"+nt+".length===2&&typeof "+nt+'[0]==="number"&&typeof '+nt+'[1]==="number"&&'+nt+"[0]<="+nt+"[1]","depth range must be a 2d array")});var It=mt.def("+",nt,"[0]"),Pt=mt.def("+",nt,"[1]");return[It,Pt]});case Fx:return wt(function(rt){V.commandType(rt,"object","blend.func",Q.commandStr);var mt="srcRGB"in rt?rt.srcRGB:rt.src,nt="srcAlpha"in rt?rt.srcAlpha:rt.src,It="dstRGB"in rt?rt.dstRGB:rt.dst,Pt="dstAlpha"in rt?rt.dstAlpha:rt.dst;return V.commandParameter(mt,lu,xt+".srcRGB",Q.commandStr),V.commandParameter(nt,lu,xt+".srcAlpha",Q.commandStr),V.commandParameter(It,lu,xt+".dstRGB",Q.commandStr),V.commandParameter(Pt,lu,xt+".dstAlpha",Q.commandStr),V.command(Hd.indexOf(mt+", "+It)===-1,"unallowed blending combination (srcRGB, dstRGB) = ("+mt+", "+It+")",Q.commandStr),[lu[mt],lu[It],lu[nt],lu[Pt]]},function(rt,mt,nt){var It=rt.constants.blendFuncs;V.optional(function(){rt.assert(mt,nt+"&&typeof "+nt+'==="object"',"invalid blend func, must be an object")});function Pt(tr,Cr){var jr=mt.def('"',tr,Cr,'" in ',nt,"?",nt,".",tr,Cr,":",nt,".",tr);return V.optional(function(){rt.assert(mt,jr+" in "+It,"invalid "+Ct+"."+tr+Cr+", must be one of "+Object.keys(lu))}),jr}var re=Pt("src","RGB"),ie=Pt("dst","RGB");V.optional(function(){var tr=rt.constants.invalidBlendCombinations;rt.assert(mt,tr+".indexOf("+re+'+", "+'+ie+") === -1 ","unallowed blending combination for (srcRGB, dstRGB)")});var Kt=mt.def(It,"[",re,"]"),_e=mt.def(It,"[",Pt("src","Alpha"),"]"),ir=mt.def(It,"[",ie,"]"),Xr=mt.def(It,"[",Pt("dst","Alpha"),"]");return[Kt,ir,_e,Xr]});case uy:return wt(function(rt){if(typeof rt=="string")return V.commandParameter(rt,Yt,"invalid "+Ct,Q.commandStr),[Yt[rt],Yt[rt]];if(typeof rt=="object")return V.commandParameter(rt.rgb,Yt,Ct+".rgb",Q.commandStr),V.commandParameter(rt.alpha,Yt,Ct+".alpha",Q.commandStr),[Yt[rt.rgb],Yt[rt.alpha]];V.commandRaise("invalid blend.equation",Q.commandStr)},function(rt,mt,nt){var It=rt.constants.blendEquations,Pt=mt.def(),re=mt.def(),ie=rt.cond("typeof ",nt,'==="string"');return V.optional(function(){function Kt(_e,ir,Xr){rt.assert(_e,Xr+" in "+It,"invalid "+ir+", must be one of "+Object.keys(Yt))}Kt(ie.then,Ct,nt),rt.assert(ie.else,nt+"&&typeof "+nt+'==="object"',"invalid "+Ct),Kt(ie.else,Ct+".rgb",nt+".rgb"),Kt(ie.else,Ct+".alpha",nt+".alpha")}),ie.then(Pt,"=",re,"=",It,"[",nt,"];"),ie.else(Pt,"=",It,"[",nt,".rgb];",re,"=",It,"[",nt,".alpha];"),mt(ie),[Pt,re]});case Ja:return wt(function(rt){return V.command(aa(rt)&&rt.length===4,"blend.color must be a 4d array",Q.commandStr),Li(4,function(mt){return+rt[mt]})},function(rt,mt,nt){return V.optional(function(){rt.assert(mt,rt.shared.isArrayLike+"("+nt+")&&"+nt+".length===4","blend.color must be a 4d array")}),Li(4,function(It){return mt.def("+",nt,"[",It,"]")})});case nI:return wt(function(rt){return V.commandType(rt,"number",xt,Q.commandStr),rt|0},function(rt,mt,nt){return V.optional(function(){rt.assert(mt,"typeof "+nt+'==="number"',"invalid stencil.mask")}),mt.def(nt,"|0")});case Fd:return wt(function(rt){V.commandType(rt,"object",xt,Q.commandStr);var mt=rt.cmp||"keep",nt=rt.ref||0,It="mask"in rt?rt.mask:-1;return V.commandParameter(mt,Bu,Ct+".cmp",Q.commandStr),V.commandType(nt,"number",Ct+".ref",Q.commandStr),V.commandType(It,"number",Ct+".mask",Q.commandStr),[Bu[mt],nt,It]},function(rt,mt,nt){var It=rt.constants.compareFuncs;V.optional(function(){function Kt(){rt.assert(mt,Array.prototype.join.call(arguments,""),"invalid stencil.func")}Kt(nt+"&&typeof ",nt,'==="object"'),Kt('!("cmp" in ',nt,")||(",nt,".cmp in ",It,")")});var Pt=mt.def('"cmp" in ',nt,"?",It,"[",nt,".cmp]",":",qc),re=mt.def(nt,".ref|0"),ie=mt.def('"mask" in ',nt,"?",nt,".mask|0:-1");return[Pt,re,ie]});case WC:case hy:return wt(function(rt){V.commandType(rt,"object",xt,Q.commandStr);var mt=rt.fail||"keep",nt=rt.zfail||"keep",It=rt.zpass||"keep";return V.commandParameter(mt,Kc,Ct+".fail",Q.commandStr),V.commandParameter(nt,Kc,Ct+".zfail",Q.commandStr),V.commandParameter(It,Kc,Ct+".zpass",Q.commandStr),[Ct===hy?Xc:Nv,Kc[mt],Kc[nt],Kc[It]]},function(rt,mt,nt){var It=rt.constants.stencilOps;V.optional(function(){rt.assert(mt,nt+"&&typeof "+nt+'==="object"',"invalid "+Ct)});function Pt(re){return V.optional(function(){rt.assert(mt,'!("'+re+'" in '+nt+")||("+nt+"."+re+" in "+It+")","invalid "+Ct+"."+re+", must be one of "+Object.keys(Kc))}),mt.def('"',re,'" in ',nt,"?",It,"[",nt,".",re,"]:",qc)}return[Ct===hy?Xc:Nv,Pt("fail"),Pt("zfail"),Pt("zpass")]});case cy:return wt(function(rt){V.commandType(rt,"object",xt,Q.commandStr);var mt=rt.factor|0,nt=rt.units|0;return V.commandType(mt,"number",xt+".factor",Q.commandStr),V.commandType(nt,"number",xt+".units",Q.commandStr),[mt,nt]},function(rt,mt,nt){V.optional(function(){rt.assert(mt,nt+"&&typeof "+nt+'==="object"',"invalid "+Ct)});var It=mt.def(nt,".factor|0"),Pt=mt.def(nt,".units|0");return[It,Pt]});case zx:return wt(function(rt){var mt=0;return rt==="front"?mt=Nv:rt==="back"&&(mt=Xc),V.command(!!mt,xt,Q.commandStr),mt},function(rt,mt,nt){return V.optional(function(){rt.assert(mt,nt+'==="front"||'+nt+'==="back"',"invalid cull.face")}),mt.def(nt,'==="front"?',Nv,":",Xc)});case jC:return wt(function(rt){return V.command(typeof rt=="number"&&rt>=Gt.lineWidthDims[0]&&rt<=Gt.lineWidthDims[1],"invalid line width, must be a positive number between "+Gt.lineWidthDims[0]+" and "+Gt.lineWidthDims[1],Q.commandStr),rt},function(rt,mt,nt){return V.optional(function(){rt.assert(mt,"typeof "+nt+'==="number"&&'+nt+">="+Gt.lineWidthDims[0]+"&&"+nt+"<="+Gt.lineWidthDims[1],"invalid line width")}),nt});case UC:return wt(function(rt){return V.commandParameter(rt,Zx,xt,Q.commandStr),Zx[rt]},function(rt,mt,nt){return V.optional(function(){rt.assert(mt,nt+'==="cw"||'+nt+'==="ccw"',"invalid frontFace, must be one of cw,ccw")}),mt.def(nt+'==="cw"?'+uI+":"+Kx)});case Gx:return wt(function(rt){return V.command(aa(rt)&&rt.length===4,"color.mask must be length 4 array",Q.commandStr),rt.map(function(mt){return!!mt})},function(rt,mt,nt){return V.optional(function(){rt.assert(mt,rt.shared.isArrayLike+"("+nt+")&&"+nt+".length===4","invalid color.mask")}),Li(4,function(It){return"!!"+nt+"["+It+"]"})});case Ux:return wt(function(rt){V.command(typeof rt=="object"&&rt,xt,Q.commandStr);var mt="value"in rt?rt.value:1,nt=!!rt.invert;return V.command(typeof mt=="number"&&mt>=0&&mt<=1,"sample.coverage.value must be a number between 0 and 1",Q.commandStr),[mt,nt]},function(rt,mt,nt){V.optional(function(){rt.assert(mt,nt+"&&typeof "+nt+'==="object"',"invalid sample.coverage")});var It=mt.def('"value" in ',nt,"?+",nt,".value:1"),Pt=mt.def("!!",nt,".invert");return[It,Pt]})}}),Dt}function Ia(ot,Q){var yt=ot.static,Lt=ot.dynamic,Dt={};return Object.keys(yt).forEach(function(Ct){var xt=yt[Ct],wt;if(typeof xt=="number"||typeof xt=="boolean")wt=Wi(function(){return xt});else if(typeof xt=="function"){var rt=xt._reglType;rt==="texture2d"||rt==="textureCube"?wt=Wi(function(mt){return mt.link(xt)}):rt==="framebuffer"||rt==="framebufferCube"?(V.command(xt.color.length>0,'missing color attachment for framebuffer sent to uniform "'+Ct+'"',Q.commandStr),wt=Wi(function(mt){return mt.link(xt.color[0])})):V.commandRaise('invalid data for uniform "'+Ct+'"',Q.commandStr)}else aa(xt)?wt=Wi(function(mt){var nt=mt.global.def("[",Li(xt.length,function(It){return V.command(typeof xt[It]=="number"||typeof xt[It]=="boolean","invalid uniform "+Ct,mt.commandStr),xt[It]}),"]");return nt}):V.commandRaise('invalid or missing data for uniform "'+Ct+'"',Q.commandStr);wt.value=xt,Dt[Ct]=wt}),Object.keys(Lt).forEach(function(Ct){var xt=Lt[Ct];Dt[Ct]=bs(xt,function(wt,rt){return wt.invoke(rt,xt)})}),Dt}function cn(ot,Q){var yt=ot.static,Lt=ot.dynamic,Dt={};return Object.keys(yt).forEach(function(Ct){var xt=yt[Ct],wt=Z.id(Ct),rt=new Ot;if(Yd(xt))rt.state=yo,rt.buffer=Jt.getBuffer(Jt.create(xt,Yc,!1,!0)),rt.type=0;else{var mt=Jt.getBuffer(xt);if(mt)rt.state=yo,rt.buffer=mt,rt.type=0;else if(V.command(typeof xt=="object"&&xt,"invalid data for attribute "+Ct,Q.commandStr),"constant"in xt){var nt=xt.constant;rt.buffer="null",rt.state=GC,typeof nt=="number"?rt.x=nt:(V.command(aa(nt)&&nt.length>0&&nt.length<=4,"invalid constant for attribute "+Ct,Q.commandStr),Uc.forEach(function(ir,Xr){Xr=0,'invalid offset for attribute "'+Ct+'"',Q.commandStr);var Pt=xt.stride|0;V.command(Pt>=0&&Pt<256,'invalid stride for attribute "'+Ct+'", must be integer betweeen [0, 255]',Q.commandStr);var re=xt.size|0;V.command(!("size"in xt)||re>0&&re<=4,'invalid size for attribute "'+Ct+'", must be 1,2,3,4',Q.commandStr);var ie=!!xt.normalized,Kt=0;"type"in xt&&(V.commandParameter(xt.type,bd,"invalid type for attribute "+Ct,Q.commandStr),Kt=bd[xt.type]);var _e=xt.divisor|0;"divisor"in xt&&(V.command(_e===0||pe,'cannot specify divisor for attribute "'+Ct+'", instancing not supported',Q.commandStr),V.command(_e>=0,'invalid divisor for attribute "'+Ct+'"',Q.commandStr)),V.optional(function(){var ir=Q.commandStr,Xr=["buffer","offset","divisor","normalized","type","size","stride"];Object.keys(xt).forEach(function(tr){V.command(Xr.indexOf(tr)>=0,'unknown parameter "'+tr+'" for attribute pointer "'+Ct+'" (valid parameters are '+Xr+")",ir)})}),rt.buffer=mt,rt.state=yo,rt.size=re,rt.normalized=ie,rt.type=Kt||mt.dtype,rt.offset=It,rt.stride=Pt,rt.divisor=_e}}Dt[Ct]=Wi(function(ir,Xr){var tr=ir.attribCache;if(wt in tr)return tr[wt];var Cr={isStream:!1};return Object.keys(rt).forEach(function(jr){Cr[jr]=rt[jr]}),rt.buffer&&(Cr.buffer=ir.link(rt.buffer),Cr.type=Cr.type||Cr.buffer+".dtype"),tr[wt]=Cr,Cr})}),Object.keys(Lt).forEach(function(Ct){var xt=Lt[Ct];function wt(rt,mt){var nt=rt.invoke(mt,xt),It=rt.shared,Pt=rt.constants,re=It.isBufferArgs,ie=It.buffer;V.optional(function(){rt.assert(mt,nt+"&&(typeof "+nt+'==="object"||typeof '+nt+'==="function")&&('+re+"("+nt+")||"+ie+".getBuffer("+nt+")||"+ie+".getBuffer("+nt+".buffer)||"+re+"("+nt+'.buffer)||("constant" in '+nt+"&&(typeof "+nt+'.constant==="number"||'+It.isArrayLike+"("+nt+".constant))))",'invalid dynamic attribute "'+Ct+'"')});var Kt={isStream:mt.def(!1)},_e=new Ot;_e.state=yo,Object.keys(_e).forEach(function(Cr){Kt[Cr]=mt.def(""+_e[Cr])});var ir=Kt.buffer,Xr=Kt.type;mt("if(",re,"(",nt,")){",Kt.isStream,"=true;",ir,"=",ie,".createStream(",Yc,",",nt,");",Xr,"=",ir,".dtype;","}else{",ir,"=",ie,".getBuffer(",nt,");","if(",ir,"){",Xr,"=",ir,".dtype;",'}else if("constant" in ',nt,"){",Kt.state,"=",GC,";","if(typeof "+nt+'.constant === "number"){',Kt[Uc[0]],"=",nt,".constant;",Uc.slice(1).map(function(Cr){return Kt[Cr]}).join("="),"=0;","}else{",Uc.map(function(Cr,jr){return Kt[Cr]+"="+nt+".constant.length>"+jr+"?"+nt+".constant["+jr+"]:0;"}).join(""),"}}else{","if(",re,"(",nt,".buffer)){",ir,"=",ie,".createStream(",Yc,",",nt,".buffer);","}else{",ir,"=",ie,".getBuffer(",nt,".buffer);","}",Xr,'="type" in ',nt,"?",Pt.glTypes,"[",nt,".type]:",ir,".dtype;",Kt.normalized,"=!!",nt,".normalized;");function tr(Cr){mt(Kt[Cr],"=",nt,".",Cr,"|0;")}return tr("size"),tr("offset"),tr("stride"),tr("divisor"),mt("}}"),mt.exit("if(",Kt.isStream,"){",ie,".destroyStream(",ir,");","}"),Kt}Dt[Ct]=bs(xt,wt)}),Dt}function Qi(ot,Q){var yt=ot.static,Lt=ot.dynamic;if(Hc in yt){var Dt=yt[Hc];return Dt!==null&&Ce.getVAO(Dt)===null&&(Dt=Ce.createVAO(Dt)),Wi(function(xt){return xt.link(Ce.getVAO(Dt))})}else if(Hc in Lt){var Ct=Lt[Hc];return bs(Ct,function(xt,wt){var rt=xt.invoke(wt,Ct);return wt.def(xt.shared.vao+".getVAO("+rt+")")})}return null}function bi(ot){var Q=ot.static,yt=ot.dynamic,Lt={};return Object.keys(Q).forEach(function(Dt){var Ct=Q[Dt];Lt[Dt]=Wi(function(xt,wt){return typeof Ct=="number"||typeof Ct=="boolean"?""+Ct:xt.link(Ct)})}),Object.keys(yt).forEach(function(Dt){var Ct=yt[Dt];Lt[Dt]=bs(Ct,function(xt,wt){return xt.invoke(wt,Ct)})}),Lt}function oi(ot,Q,yt,Lt,Dt){var Ct=ot.static,xt=ot.dynamic;V.optional(function(){var tr=[Bd,Tv,Gd,zd,Uf,vy,Vc,my,py,Hc].concat(ce);function Cr(jr){Object.keys(jr).forEach(function(Ln){V.command(tr.indexOf(Ln)>=0,'unknown parameter "'+Ln+'"',Dt.commandStr)})}Cr(Ct),Cr(xt)});var wt=Dr(ot,Q),rt=Je(ot,Dt),mt=on(ot,rt,Dt),nt=yn(ot,Dt),It=$i(ot,Dt),Pt=Kr(ot,Dt,wt);function re(tr){var Cr=mt[tr];Cr&&(It[tr]=Cr)}re(zf),re(Oe(dy));var ie=Object.keys(It).length>0,Kt={framebuffer:rt,draw:nt,shader:Pt,state:It,dirty:ie,scopeVAO:null,drawVAO:null,useVAO:!1,attributes:{}};if(Kt.profile=Vr(ot,Dt),Kt.uniforms=Ia(yt,Dt),Kt.drawVAO=Kt.scopeVAO=Qi(ot,Dt),!Kt.drawVAO&&Pt.program&&!wt&&ct.angle_instanced_arrays){var _e=!0,ir=Pt.program.attributes.map(function(tr){var Cr=Q.static[tr];return _e=_e&&!!Cr,Cr});if(_e&&ir.length>0){var Xr=Ce.getVAO(Ce.createVAO(ir));Kt.drawVAO=new to(null,null,null,function(tr,Cr){return tr.link(Xr)}),Kt.useVAO=!0}}return wt?Kt.useVAO=!0:Kt.attributes=cn(Q,Dt),Kt.context=bi(Lt,Dt),Kt}function ki(ot,Q,yt){var Lt=ot.shared,Dt=Lt.context,Ct=ot.scope();Object.keys(yt).forEach(function(xt){Q.save(Dt,"."+xt);var wt=yt[xt],rt=wt.append(ot,Q);Array.isArray(rt)?Ct(Dt,".",xt,"=[",rt.join(),"];"):Ct(Dt,".",xt,"=",rt,";")}),Q(Ct)}function La(ot,Q,yt,Lt){var Dt=ot.shared,Ct=Dt.gl,xt=Dt.framebuffer,wt;Le&&(wt=Q.def(Dt.extensions,".webgl_draw_buffers"));var rt=ot.constants,mt=rt.drawBuffer,nt=rt.backBuffer,It;yt?It=yt.append(ot,Q):It=Q.def(xt,".next"),Lt||Q("if(",It,"!==",xt,".cur){"),Q("if(",It,"){",Ct,".bindFramebuffer(",XC,",",It,".framebuffer);"),Le&&Q(wt,".drawBuffersWEBGL(",mt,"[",It,".colorAttachments.length]);"),Q("}else{",Ct,".bindFramebuffer(",XC,",null);"),Le&&Q(wt,".drawBuffersWEBGL(",nt,");"),Q("}",xt,".cur=",It,";"),Lt||Q("}")}function ka(ot,Q,yt){var Lt=ot.shared,Dt=Lt.gl,Ct=ot.current,xt=ot.next,wt=Lt.current,rt=Lt.next,mt=ot.cond(wt,".dirty");ce.forEach(function(nt){var It=Oe(nt);if(!(It in yt.state)){var Pt,re;if(It in xt){Pt=xt[It],re=Ct[It];var ie=Li(ue[It].length,function(_e){return mt.def(Pt,"[",_e,"]")});mt(ot.cond(ie.map(function(_e,ir){return _e+"!=="+re+"["+ir+"]"}).join("||")).then(Dt,".",he[It],"(",ie,");",ie.map(function(_e,ir){return re+"["+ir+"]="+_e}).join(";"),";"))}else{Pt=mt.def(rt,".",It);var Kt=ot.cond(Pt,"!==",wt,".",It);mt(Kt),It in Re?Kt(ot.cond(Pt).then(Dt,".enable(",Re[It],");").else(Dt,".disable(",Re[It],");"),wt,".",It,"=",Pt,";"):Kt(Dt,".",he[It],"(",Pt,");",wt,".",It,"=",Pt,";")}}}),Object.keys(yt.state).length===0&&mt(wt,".dirty=false;"),Q(mt)}function eo(ot,Q,yt,Lt){var Dt=ot.shared,Ct=ot.current,xt=Dt.current,wt=Dt.gl;KC(Object.keys(yt)).forEach(function(rt){var mt=yt[rt];if(!(Lt&&!Lt(mt))){var nt=mt.append(ot,Q);if(Re[rt]){var It=Re[rt];Gu(mt)?nt?Q(wt,".enable(",It,");"):Q(wt,".disable(",It,");"):Q(ot.cond(nt).then(wt,".enable(",It,");").else(wt,".disable(",It,");")),Q(xt,".",rt,"=",nt,";")}else if(aa(nt)){var Pt=Ct[rt];Q(wt,".",he[rt],"(",nt,");",nt.map(function(re,ie){return Pt+"["+ie+"]="+re}).join(";"),";")}else Q(wt,".",he[rt],"(",nt,");",xt,".",rt,"=",nt,";")}})}function oa(ot,Q){pe&&(ot.instancing=Q.def(ot.shared.extensions,".angle_instanced_arrays"))}function Yr(ot,Q,yt,Lt,Dt){var Ct=ot.shared,xt=ot.stats,wt=Ct.current,rt=Ct.timer,mt=yt.profile;function nt(){return typeof performance=="undefined"?"Date.now()":"performance.now()"}var It,Pt;function re(tr){It=Q.def(),tr(It,"=",nt(),";"),typeof Dt=="string"?tr(xt,".count+=",Dt,";"):tr(xt,".count++;"),me&&(Lt?(Pt=Q.def(),tr(Pt,"=",rt,".getNumPendingQueries();")):tr(rt,".beginQuery(",xt,");"))}function ie(tr){tr(xt,".cpuTime+=",nt(),"-",It,";"),me&&(Lt?tr(rt,".pushScopeStats(",Pt,",",rt,".getNumPendingQueries(),",xt,");"):tr(rt,".endQuery();"))}function Kt(tr){var Cr=Q.def(wt,".profile");Q(wt,".profile=",tr,";"),Q.exit(wt,".profile=",Cr,";")}var _e;if(mt){if(Gu(mt)){mt.enable?(re(Q),ie(Q.exit),Kt("true")):Kt("false");return}_e=mt.append(ot,Q),Kt(_e)}else _e=Q.def(wt,".profile");var ir=ot.block();re(ir),Q("if(",_e,"){",ir,"}");var Xr=ot.block();ie(Xr),Q.exit("if(",_e,"){",Xr,"}")}function ro(ot,Q,yt,Lt,Dt){var Ct=ot.shared;function xt(rt){switch(rt){case Ov:case Dv:case ou:return 2;case gy:case yy:case qx:return 3;case jd:case Pv:case su:return 4;default:return 1}}function wt(rt,mt,nt){var It=Ct.gl,Pt=Q.def(rt,".location"),re=Q.def(Ct.attributes,"[",Pt,"]"),ie=nt.state,Kt=nt.buffer,_e=[nt.x,nt.y,nt.z,nt.w],ir=["buffer","normalized","offset","stride"];function Xr(){Q("if(!",re,".buffer){",It,".enableVertexAttribArray(",Pt,");}");var Cr=nt.type,jr;if(nt.size?jr=Q.def(nt.size,"||",mt):jr=mt,Q("if(",re,".type!==",Cr,"||",re,".size!==",jr,"||",ir.map(function(Ji){return re+"."+Ji+"!=="+nt[Ji]}).join("||"),"){",It,".bindBuffer(",Yc,",",Kt,".buffer);",It,".vertexAttribPointer(",[Pt,jr,Cr,nt.normalized,nt.stride,nt.offset],");",re,".type=",Cr,";",re,".size=",jr,";",ir.map(function(Ji){return re+"."+Ji+"="+nt[Ji]+";"}).join(""),"}"),pe){var Ln=nt.divisor;Q("if(",re,".divisor!==",Ln,"){",ot.instancing,".vertexAttribDivisorANGLE(",[Pt,Ln],");",re,".divisor=",Ln,";}")}}function tr(){Q("if(",re,".buffer){",It,".disableVertexAttribArray(",Pt,");",re,".buffer=null;","}if(",Uc.map(function(Cr,jr){return re+"."+Cr+"!=="+_e[jr]}).join("||"),"){",It,".vertexAttrib4f(",Pt,",",_e,");",Uc.map(function(Cr,jr){return re+"."+Cr+"="+_e[jr]+";"}).join(""),"}")}ie===yo?Xr():ie===GC?tr():(Q("if(",ie,"===",yo,"){"),Xr(),Q("}else{"),tr(),Q("}"))}Lt.forEach(function(rt){var mt=rt.name,nt=yt.attributes[mt],It;if(nt){if(!Dt(nt))return;It=nt.append(ot,Q)}else{if(!Dt(ZC))return;var Pt=ot.scopeAttrib(mt);V.optional(function(){ot.assert(Q,Pt+".state","missing attribute "+mt)}),It={},Object.keys(new Ot).forEach(function(re){It[re]=Q.def(Pt,".",re)})}wt(ot.link(rt),xt(rt.info.type),It)})}function Bn(ot,Q,yt,Lt,Dt){for(var Ct=ot.shared,xt=Ct.gl,wt,rt=0;rt1?Q(Li(Cr,function(ts){return Array.isArray(Kt)?Kt[ts]:Kt+"["+ts+"]"})):(V(!Array.isArray(Kt),"uniform value must not be an array"),Q(Kt));Q(");")}}function br(ot,Q,yt,Lt){var Dt=ot.shared,Ct=Dt.gl,xt=Dt.draw,wt=Lt.draw;function rt(){var jr=wt.elements,Ln,Ji=Q;return jr?((jr.contextDep&&Lt.contextDynamic||jr.propDep)&&(Ji=yt),Ln=jr.append(ot,Ji)):Ln=Ji.def(xt,".",zd),Ln&&Ji("if("+Ln+")"+Ct+".bindBuffer("+An+","+Ln+".buffer.buffer);"),Ln}function mt(){var jr=wt.count,Ln,Ji=Q;return jr?((jr.contextDep&&Lt.contextDynamic||jr.propDep)&&(Ji=yt),Ln=jr.append(ot,Ji),V.optional(function(){jr.MISSING&&ot.assert(Q,"false","missing vertex count"),jr.DYNAMIC&&ot.assert(Ji,Ln+">=0","missing vertex count")})):(Ln=Ji.def(xt,".",Vc),V.optional(function(){ot.assert(Ji,Ln+">=0","missing vertex count")})),Ln}var nt=rt();function It(jr){var Ln=wt[jr];return Ln?Ln.contextDep&&Lt.contextDynamic||Ln.propDep?Ln.append(ot,yt):Ln.append(ot,Q):Q.def(xt,".",jr)}var Pt=It(Uf),re=It(vy),ie=mt();if(typeof ie=="number"){if(ie===0)return}else yt("if(",ie,"){"),yt.exit("}");var Kt,_e;pe&&(Kt=It(my),_e=ot.instancing);var ir=nt+".type",Xr=wt.elements&&Gu(wt.elements);function tr(){function jr(){yt(_e,".drawElementsInstancedANGLE(",[Pt,ie,ir,re+"<<(("+ir+"-"+jc+")>>1)",Kt],");")}function Ln(){yt(_e,".drawArraysInstancedANGLE(",[Pt,re,ie,Kt],");")}nt?Xr?jr():(yt("if(",nt,"){"),jr(),yt("}else{"),Ln(),yt("}")):Ln()}function Cr(){function jr(){yt(Ct+".drawElements("+[Pt,ie,ir,re+"<<(("+ir+"-"+jc+")>>1)"]+");")}function Ln(){yt(Ct+".drawArrays("+[Pt,re,ie]+");")}nt?Xr?jr():(yt("if(",nt,"){"),jr(),yt("}else{"),Ln(),yt("}")):Ln()}pe&&(typeof Kt!="number"||Kt>=0)?typeof Kt=="string"?(yt("if(",Kt,">0){"),tr(),yt("}else if(",Kt,"<0){"),Cr(),yt("}")):tr():Cr()}function hn(ot,Q,yt,Lt,Dt){var Ct=Er(),xt=Ct.proc("body",Dt);return V.optional(function(){Ct.commandStr=Q.commandStr,Ct.command=Ct.link(Q.commandStr)}),pe&&(Ct.instancing=xt.def(Ct.shared.extensions,".angle_instanced_arrays")),ot(Ct,xt,yt,Lt),Ct.compile().body}function Sn(ot,Q,yt,Lt){oa(ot,Q),yt.useVAO?yt.drawVAO?Q(ot.shared.vao,".setVAO(",yt.drawVAO.append(ot,Q),");"):Q(ot.shared.vao,".setVAO(",ot.shared.vao,".targetVAO);"):(Q(ot.shared.vao,".setVAO(null);"),ro(ot,Q,yt,Lt.attributes,function(){return!0})),Bn(ot,Q,yt,Lt.uniforms,function(){return!0}),br(ot,Q,Q,yt)}function sa(ot,Q){var yt=ot.proc("draw",1);oa(ot,yt),ki(ot,yt,Q.context),La(ot,yt,Q.framebuffer),ka(ot,yt,Q),eo(ot,yt,Q.state),Yr(ot,yt,Q,!1,!0);var Lt=Q.shader.progVar.append(ot,yt);if(yt(ot.shared.gl,".useProgram(",Lt,".program);"),Q.shader.program)Sn(ot,yt,Q,Q.shader.program);else{yt(ot.shared.vao,".setVAO(null);");var Dt=ot.global.def("{}"),Ct=yt.def(Lt,".id"),xt=yt.def(Dt,"[",Ct,"]");yt(ot.cond(xt).then(xt,".call(this,a0);").else(xt,"=",Dt,"[",Ct,"]=",ot.link(function(wt){return hn(Sn,ot,Q,wt,1)}),"(",Lt,");",xt,".call(this,a0);"))}Object.keys(Q.state).length>0&&yt(ot.shared.current,".dirty=true;")}function Uu(ot,Q,yt,Lt){ot.batchId="a1",oa(ot,Q);function Dt(){return!0}ro(ot,Q,yt,Lt.attributes,Dt),Bn(ot,Q,yt,Lt.uniforms,Dt),br(ot,Q,Q,yt)}function Xd(ot,Q,yt,Lt){oa(ot,Q);var Dt=yt.contextDep,Ct=Q.def(),xt="a0",wt="a1",rt=Q.def();ot.shared.props=rt,ot.batchId=Ct;var mt=ot.scope(),nt=ot.scope();Q(mt.entry,"for(",Ct,"=0;",Ct,"<",wt,";++",Ct,"){",rt,"=",xt,"[",Ct,"];",nt,"}",mt.exit);function It(ir){return ir.contextDep&&Dt||ir.propDep}function Pt(ir){return!It(ir)}if(yt.needsContext&&ki(ot,nt,yt.context),yt.needsFramebuffer&&La(ot,nt,yt.framebuffer),eo(ot,nt,yt.state,It),yt.profile&&It(yt.profile)&&Yr(ot,nt,yt,!1,!0),Lt)yt.useVAO?yt.drawVAO?It(yt.drawVAO)?nt(ot.shared.vao,".setVAO(",yt.drawVAO.append(ot,nt),");"):mt(ot.shared.vao,".setVAO(",yt.drawVAO.append(ot,mt),");"):mt(ot.shared.vao,".setVAO(",ot.shared.vao,".targetVAO);"):(mt(ot.shared.vao,".setVAO(null);"),ro(ot,mt,yt,Lt.attributes,Pt),ro(ot,nt,yt,Lt.attributes,It)),Bn(ot,mt,yt,Lt.uniforms,Pt),Bn(ot,nt,yt,Lt.uniforms,It),br(ot,mt,nt,yt);else{var re=ot.global.def("{}"),ie=yt.shader.progVar.append(ot,nt),Kt=nt.def(ie,".id"),_e=nt.def(re,"[",Kt,"]");nt(ot.shared.gl,".useProgram(",ie,".program);","if(!",_e,"){",_e,"=",re,"[",Kt,"]=",ot.link(function(ir){return hn(Uu,ot,yt,ir,2)}),"(",ie,");}",_e,".call(this,a0[",Ct,"],",Ct,");")}}function ut(ot,Q){var yt=ot.proc("batch",2);ot.batchId="0",oa(ot,yt);var Lt=!1,Dt=!0;Object.keys(Q.context).forEach(function(re){Lt=Lt||Q.context[re].propDep}),Lt||(ki(ot,yt,Q.context),Dt=!1);var Ct=Q.framebuffer,xt=!1;Ct?(Ct.propDep?Lt=xt=!0:Ct.contextDep&&Lt&&(xt=!0),xt||La(ot,yt,Ct)):La(ot,yt,null),Q.state.viewport&&Q.state.viewport.propDep&&(Lt=!0);function wt(re){return re.contextDep&&Lt||re.propDep}ka(ot,yt,Q),eo(ot,yt,Q.state,function(re){return!wt(re)}),(!Q.profile||!wt(Q.profile))&&Yr(ot,yt,Q,!1,"a1"),Q.contextDep=Lt,Q.needsContext=Dt,Q.needsFramebuffer=xt;var rt=Q.shader.progVar;if(rt.contextDep&&Lt||rt.propDep)Xd(ot,yt,Q,null);else{var mt=rt.append(ot,yt);if(yt(ot.shared.gl,".useProgram(",mt,".program);"),Q.shader.program)Xd(ot,yt,Q,Q.shader.program);else{yt(ot.shared.vao,".setVAO(null);");var nt=ot.global.def("{}"),It=yt.def(mt,".id"),Pt=yt.def(nt,"[",It,"]");yt(ot.cond(Pt).then(Pt,".call(this,a0,a1);").else(Pt,"=",nt,"[",It,"]=",ot.link(function(re){return hn(Xd,ot,Q,re,2)}),"(",mt,");",Pt,".call(this,a0,a1);"))}}Object.keys(Q.state).length>0&&yt(ot.shared.current,".dirty=true;")}function jt(ot,Q){var yt=ot.proc("scope",3);ot.batchId="a2";var Lt=ot.shared,Dt=Lt.current;ki(ot,yt,Q.context),Q.framebuffer&&Q.framebuffer.append(ot,yt),KC(Object.keys(Q.state)).forEach(function(xt){var wt=Q.state[xt],rt=wt.append(ot,yt);aa(rt)?rt.forEach(function(mt,nt){yt.set(ot.next[xt],"["+nt+"]",mt)}):yt.set(Lt.next,"."+xt,rt)}),Yr(ot,yt,Q,!0,!0),[zd,vy,Vc,my,Uf].forEach(function(xt){var wt=Q.draw[xt];!wt||yt.set(Lt.draw,"."+xt,""+wt.append(ot,yt))}),Object.keys(Q.uniforms).forEach(function(xt){var wt=Q.uniforms[xt].append(ot,yt);Array.isArray(wt)&&(wt="["+wt.join()+"]"),yt.set(Lt.uniforms,"["+Z.id(xt)+"]",wt)}),Object.keys(Q.attributes).forEach(function(xt){var wt=Q.attributes[xt].append(ot,yt),rt=ot.scopeAttrib(xt);Object.keys(new Ot).forEach(function(mt){yt.set(rt,"."+mt,wt[mt])})}),Q.scopeVAO&&yt.set(Lt.vao,".targetVAO",Q.scopeVAO.append(ot,yt));function Ct(xt){var wt=Q.shader[xt];wt&&yt.set(Lt.shader,"."+xt,wt.append(ot,yt))}Ct(Tv),Ct(Gd),Object.keys(Q.state).length>0&&(yt(Dt,".dirty=true;"),yt.exit(Dt,".dirty=true;")),yt("a1(",ot.shared.context,",a0,",ot.batchId,");")}function Nt(ot){if(!(typeof ot!="object"||aa(ot))){for(var Q=Object.keys(ot),yt=0;yt=0;--br){var hn=fe[br];hn&&hn(me,null,0)}ct.flush(),Ce&&Ce.update()}function Kr(){!on&&fe.length>0&&(on=Ve.next(Dr))}function yn(){on&&(Ve.cancel(Dr),on=null)}function $i(br){br.preventDefault(),Jt=!0,yn(),Er.forEach(function(hn){hn()})}function Ia(br){ct.getError(),Jt=!1,zt.restore(),ce.restore(),pe.restore(),Re.restore(),he.restore(),Oe.restore(),Le.restore(),Ce&&Ce.restore(),vr.procs.refresh(),Kr(),Vr.forEach(function(hn){hn()})}Me&&(Me.addEventListener(gI,$i,!1),Me.addEventListener(yI,Ia,!1));function cn(){fe.length=0,yn(),Me&&(Me.removeEventListener(gI,$i),Me.removeEventListener(yI,Ia)),ce.clear(),Oe.clear(),he.clear(),Re.clear(),He.clear(),pe.clear(),Le.clear(),Ce&&Ce.clear(),Je.forEach(function(br){br()})}function Qi(br){V(!!br,"invalid args to regl({...})"),V.type(br,"object","invalid args to regl({...})");function hn(Dt){var Ct=e({},Dt);delete Ct.uniforms,delete Ct.attributes,delete Ct.context,delete Ct.vao,"stencil"in Ct&&Ct.stencil.op&&(Ct.stencil.opBack=Ct.stencil.opFront=Ct.stencil.op,delete Ct.stencil.op);function xt(wt){if(wt in Ct){var rt=Ct[wt];delete Ct[wt],Object.keys(rt).forEach(function(mt){Ct[wt+"."+mt]=rt[mt]})}}return xt("blend"),xt("depth"),xt("cull"),xt("stencil"),xt("polygonOffset"),xt("scissor"),xt("sample"),"vao"in Dt&&(Ct.vao=Dt.vao),Ct}function Sn(Dt,Ct){var xt={},wt={};return Object.keys(Dt).forEach(function(rt){var mt=Dt[rt];if(Ye.isDynamic(mt)){wt[rt]=Ye.unbox(mt,rt);return}else if(Ct&&Array.isArray(mt)){for(var nt=0;nt0)return sn.call(this,yt(Dt|0),Dt|0)}else if(Array.isArray(Dt)){if(Dt.length)return sn.call(this,Dt,Dt.length)}else return Xe.call(this,Dt)}return e(Lt,{stats:jt,destroy:function(){Nt.destroy()}})}var bi=Oe.setFBO=Qi({framebuffer:Ye.define.call(null,zu,"framebuffer")});function oi(br,hn){var Sn=0;vr.procs.poll();var sa=hn.color;sa&&(ct.clearColor(+sa[0]||0,+sa[1]||0,+sa[2]||0,+sa[3]||0),Sn|=pI),"depth"in hn&&(ct.clearDepth(+hn.depth),Sn|=vI),"stencil"in hn&&(ct.clearStencil(hn.stencil|0),Sn|=PB),V(!!Sn,"called regl.clear with no buffer specified"),ct.clear(Sn)}function ki(br){if(V(typeof br=="object"&&br,"regl.clear() takes an object as input"),"framebuffer"in br)if(br.framebuffer&&br.framebuffer_reglType==="framebufferCube")for(var hn=0;hn<6;++hn)bi(e({framebuffer:br.framebuffer.faces[hn]},br),oi);else bi(br,oi);else oi(null,br)}function La(br){V.type(br,"function","regl.frame() callback must be a function"),fe.push(br);function hn(){var Sn=Qx(fe,br);V(Sn>=0,"cannot cancel a frame twice");function sa(){var Uu=Qx(fe,sa);fe[Uu]=fe[fe.length-1],fe.length-=1,fe.length<=0&&yn()}fe[Sn]=sa}return Kr(),{cancel:hn}}function ka(){var br=Ge.viewport,hn=Ge.scissor_box;br[0]=br[1]=hn[0]=hn[1]=0,me.viewportWidth=me.framebufferWidth=me.drawingBufferWidth=br[2]=hn[2]=ct.drawingBufferWidth,me.viewportHeight=me.framebufferHeight=me.drawingBufferHeight=br[3]=hn[3]=ct.drawingBufferHeight}function eo(){me.tick+=1,me.time=Yr(),ka(),vr.procs.poll()}function oa(){Re.refresh(),ka(),vr.procs.refresh(),Ce&&Ce.update()}function Yr(){return($n()-ye)/1e3}oa();function ro(br,hn){V.type(hn,"function","listener callback must be a function");var Sn;switch(br){case"frame":return La(hn);case"lost":Sn=Er;break;case"restore":Sn=Vr;break;case"destroy":Sn=Je;break;default:V.raise("invalid event, must be one of frame,lost,restore,destroy")}return Sn.push(hn),{cancel:function(){for(var sa=0;sa=0},read:Or,destroy:cn,_gl:ct,_refresh:oa,poll:function(){eo(),Ce&&Ce.update()},now:Yr,stats:ve});return Z.onDone(null,Bn),Bn}return Jx})});var AY=ft((qBr,a_t)=>{a_t.exports=1e-6});var MY=ft((KBr,o_t)=>{o_t.exports=fce;function fce(){var r=new Float32Array(2);return r[0]=0,r[1]=0,r}});var l_t=ft((ZBr,s_t)=>{s_t.exports=cce;function cce(r){var e=new Float32Array(2);return e[0]=r[0],e[1]=r[1],e}});var f_t=ft(($Br,u_t)=>{u_t.exports=hce;function hce(r,e){var t=new Float32Array(2);return t[0]=r,t[1]=e,t}});var h_t=ft((QBr,c_t)=>{c_t.exports=dce;function dce(r,e){return r[0]=e[0],r[1]=e[1],r}});var TY=ft((JBr,d_t)=>{d_t.exports=pce;function pce(r,e,t){return r[0]=e,r[1]=t,r}});var m_t=ft((t3r,v_t)=>{v_t.exports=vce;var p_t=AY();function vce(r,e){var t=r[0],n=r[1],i=e[0],a=e[1];return Math.abs(t-i)<=p_t*Math.max(1,Math.abs(t),Math.abs(i))&&Math.abs(n-a)<=p_t*Math.max(1,Math.abs(n),Math.abs(a))}});var y_t=ft((e3r,g_t)=>{g_t.exports=mce;function mce(r,e){return r[0]===e[0]&&r[1]===e[1]}});var IY=ft((r3r,x_t)=>{x_t.exports=gce;function gce(r,e,t){return r[0]=e[0]+t[0],r[1]=e[1]+t[1],r}});var ON=ft((n3r,b_t)=>{b_t.exports=yce;function yce(r,e,t){return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r}});var S_t=ft((i3r,__t)=>{__t.exports=ON()});var LY=ft((a3r,C_t)=>{C_t.exports=xce;function xce(r,e,t){return r[0]=e[0]*t[0],r[1]=e[1]*t[1],r}});var E_t=ft((o3r,w_t)=>{w_t.exports=LY()});var OY=ft((s3r,A_t)=>{A_t.exports=bce;function bce(r,e,t){return r[0]=e[0]/t[0],r[1]=e[1]/t[1],r}});var T_t=ft((l3r,M_t)=>{M_t.exports=OY()});var L_t=ft((u3r,I_t)=>{I_t.exports=_ce;function _ce(r,e){return r[0]=1/e[0],r[1]=1/e[1],r}});var D_t=ft((f3r,O_t)=>{O_t.exports=Sce;function Sce(r,e,t){return r[0]=Math.min(e[0],t[0]),r[1]=Math.min(e[1],t[1]),r}});var k_t=ft((c3r,P_t)=>{P_t.exports=Cce;function Cce(r,e,t){return r[0]=Math.max(e[0],t[0]),r[1]=Math.max(e[1],t[1]),r}});var N_t=ft((h3r,R_t)=>{R_t.exports=wce;function wce(r,e,t){var n=Math.cos(t),i=Math.sin(t),a=e[0],o=e[1];return r[0]=a*n-o*i,r[1]=a*i+o*n,r}});var B_t=ft((d3r,F_t)=>{F_t.exports=Ece;function Ece(r,e){return r[0]=Math.floor(e[0]),r[1]=Math.floor(e[1]),r}});var z_t=ft((p3r,G_t)=>{G_t.exports=Ace;function Ace(r,e){return r[0]=Math.ceil(e[0]),r[1]=Math.ceil(e[1]),r}});var j_t=ft((v3r,U_t)=>{U_t.exports=Mce;function Mce(r,e){return r[0]=Math.round(e[0]),r[1]=Math.round(e[1]),r}});var V_t=ft((m3r,W_t)=>{W_t.exports=Tce;function Tce(r,e,t){return r[0]=e[0]*t,r[1]=e[1]*t,r}});var Y_t=ft((g3r,H_t)=>{H_t.exports=Ice;function Ice(r,e,t,n){return r[0]=e[0]+t[0]*n,r[1]=e[1]+t[1]*n,r}});var DY=ft((y3r,X_t)=>{X_t.exports=Lce;function Lce(r,e){var t=e[0]-r[0],n=e[1]-r[1];return Math.sqrt(t*t+n*n)}});var K_t=ft((x3r,q_t)=>{q_t.exports=DY()});var PY=ft((b3r,Z_t)=>{Z_t.exports=Oce;function Oce(r,e){var t=e[0]-r[0],n=e[1]-r[1];return t*t+n*n}});var Q_t=ft((_3r,$_t)=>{$_t.exports=PY()});var kY=ft((S3r,J_t)=>{J_t.exports=Dce;function Dce(r){var e=r[0],t=r[1];return Math.sqrt(e*e+t*t)}});var eSt=ft((C3r,tSt)=>{tSt.exports=kY()});var RY=ft((w3r,rSt)=>{rSt.exports=Pce;function Pce(r){var e=r[0],t=r[1];return e*e+t*t}});var iSt=ft((E3r,nSt)=>{nSt.exports=RY()});var oSt=ft((A3r,aSt)=>{aSt.exports=kce;function kce(r,e){return r[0]=-e[0],r[1]=-e[1],r}});var NY=ft((M3r,sSt)=>{sSt.exports=Rce;function Rce(r,e){var t=e[0],n=e[1],i=t*t+n*n;return i>0&&(i=1/Math.sqrt(i),r[0]=e[0]*i,r[1]=e[1]*i),r}});var FY=ft((T3r,lSt)=>{lSt.exports=Nce;function Nce(r,e){return r[0]*e[0]+r[1]*e[1]}});var fSt=ft((I3r,uSt)=>{uSt.exports=Fce;function Fce(r,e,t){var n=e[0]*t[1]-e[1]*t[0];return r[0]=r[1]=0,r[2]=n,r}});var hSt=ft((L3r,cSt)=>{cSt.exports=Bce;function Bce(r,e,t,n){var i=e[0],a=e[1];return r[0]=i+n*(t[0]-i),r[1]=a+n*(t[1]-a),r}});var pSt=ft((O3r,dSt)=>{dSt.exports=Gce;function Gce(r,e){e=e||1;var t=Math.random()*2*Math.PI;return r[0]=Math.cos(t)*e,r[1]=Math.sin(t)*e,r}});var mSt=ft((D3r,vSt)=>{vSt.exports=zce;function zce(r,e,t){var n=e[0],i=e[1];return r[0]=t[0]*n+t[2]*i,r[1]=t[1]*n+t[3]*i,r}});var ySt=ft((P3r,gSt)=>{gSt.exports=Uce;function Uce(r,e,t){var n=e[0],i=e[1];return r[0]=t[0]*n+t[2]*i+t[4],r[1]=t[1]*n+t[3]*i+t[5],r}});var bSt=ft((k3r,xSt)=>{xSt.exports=jce;function jce(r,e,t){var n=e[0],i=e[1];return r[0]=t[0]*n+t[3]*i+t[6],r[1]=t[1]*n+t[4]*i+t[7],r}});var SSt=ft((R3r,_St)=>{_St.exports=Wce;function Wce(r,e,t){var n=e[0],i=e[1];return r[0]=t[0]*n+t[4]*i+t[12],r[1]=t[1]*n+t[5]*i+t[13],r}});var wSt=ft((N3r,CSt)=>{CSt.exports=Vce;var gS=MY()();function Vce(r,e,t,n,i,a){var o,s;for(e||(e=2),t||(t=0),n?s=Math.min(n*e+t,r.length):s=r.length,o=t;o{ESt.exports=Hce;function Hce(r,e,t){var n=e[0]*e[0]+e[1]*e[1];if(n>t*t){var i=Math.sqrt(n);r[0]=e[0]/i*t,r[1]=e[1]/i*t}else r[0]=e[0],r[1]=e[1];return r}});var TSt=ft((B3r,MSt)=>{MSt.exports={EPSILON:AY(),create:MY(),clone:l_t(),fromValues:f_t(),copy:h_t(),set:TY(),equals:m_t(),exactEquals:y_t(),add:IY(),subtract:ON(),sub:S_t(),multiply:LY(),mul:E_t(),divide:OY(),div:T_t(),inverse:L_t(),min:D_t(),max:k_t(),rotate:N_t(),floor:B_t(),ceil:z_t(),round:j_t(),scale:V_t(),scaleAndAdd:Y_t(),distance:DY(),dist:K_t(),squaredDistance:PY(),sqrDist:Q_t(),length:kY(),len:eSt(),squaredLength:RY(),sqrLen:iSt(),negate:oSt(),normalize:NY(),dot:FY(),cross:fSt(),lerp:hSt(),random:pSt(),transformMat2:mSt(),transformMat2d:ySt(),transformMat3:bSt(),transformMat4:SSt(),forEach:wSt(),limit:ASt()}});var OSt=ft((G3r,DN)=>{var Yce=IY(),BY=TY(),ISt=NY(),Xce=ON(),qce=FY(),LSt=[0,0];DN.exports.computeMiter=function(e,t,n,i,a){return Yce(e,n,i),ISt(e,e),BY(t,-e[1],e[0]),BY(LSt,-n[1],n[0]),a/qce(t,LSt)};DN.exports.normal=function(e,t){return BY(e,-t[1],t[0]),e};DN.exports.direction=function(e,t,n){return Xce(e,t,n),ISt(e,e),e}});var tX=ft(($M,JY)=>{(function(e,t){typeof $M=="object"&&typeof JY=="object"?JY.exports=t():typeof define=="function"&&define.amd?define([],t):typeof $M=="object"?$M.Hierarchy=t():e.Hierarchy=t()})(typeof self!="undefined"?self:$M,function(){return function(r){var e={};function t(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return r[n].call(i.exports,i,i.exports,t),i.l=!0,i.exports}return t.m=r,t.c=e,t.d=function(n,i,a){t.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:a})},t.n=function(n){var i=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(i,"a",i),i},t.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)},t.p="",t(t.s=31)}([function(r,e,t){"use strict";var n=t(4);e.a=function(i){return Array.isArray?Array.isArray(i):Object(n.a)(i,"Array")}},function(r,e,t){"use strict";var n=function(i){return i!==null&&typeof i!="function"&&isFinite(i.length)};e.a=n},function(r,e,t){"use strict";var n=t(0),i=t(13);function a(o,s){if(!!o){var l;if(Object(n.a)(o))for(var u=0,f=o.length;u-1:!1};e.a=i},function(r,e,t){"use strict";e.a=function(n){var i=typeof n;return n!==null&&i==="object"||i==="function"}},function(r,e,t){"use strict";var n=t(2),i=t(1),a=function(o,s){if(!Object(i.a)(o))return o;var l=[];return Object(n.a)(o,function(u,f){s(u,f)&&l.push(u)}),l};e.a=a},function(r,e,t){"use strict";var n=function(i){return typeof i=="object"&&i!==null};e.a=n},function(r,e,t){"use strict";e.a=i;function n(a,o){for(var s in o)o.hasOwnProperty(s)&&s!=="constructor"&&o[s]!==void 0&&(a[s]=o[s])}function i(a,o,s,l){return o&&n(a,o),s&&n(a,s),l&&n(a,l),a}},function(r,e,t){var n=t(30),i=["LR","RL","TB","BT","H","V"],a=["LR","RL","H"],o=function(u){return a.indexOf(u)>-1},s=i[0];r.exports=function(l,u,f){var c=u.direction||s;if(u.isHorizontal=o(c),c&&i.indexOf(c)===-1)throw new TypeError("Invalid direction: "+c);if(c===i[0])f(l,u);else if(c===i[1])f(l,u),l.right2left();else if(c===i[2])f(l,u);else if(c===i[3])f(l,u),l.bottom2top();else if(c===i[4]||c===i[5]){var h=n(l,u),d=h.left,p=h.right;f(d,u),f(p,u),u.isHorizontal?d.right2left():d.bottom2top(),p.translate(d.x-p.x,d.y-p.y),l.x=d.x,l.y=p.y;var v=l.getBoundingBox();u.isHorizontal?v.top<0&&l.translate(0,-v.top):v.left<0&&l.translate(-v.left,0)}var m=u.fixedRoot;return m===void 0&&(m=!0),m&&l.translate(-(l.x+l.width/2+l.hgap),-(l.y+l.height/2+l.vgap)),l}},function(r,e,t){var n=t(7),i=18,a=i*2,o=i,s={getId:function(c){return c.id||c.name},getPreH:function(c){return c.preH||0},getPreV:function(c){return c.preV||0},getHGap:function(c){return c.hgap||o},getVGap:function(c){return c.vgap||o},getChildren:function(c){return c.children},getHeight:function(c){return c.height||a},getWidth:function(c){var h=c.label||" ";return c.width||h.split("").length*i}};function l(f,c){var h=this;if(h.vgap=h.hgap=0,f instanceof l)return f;h.data=f;var d=c.getHGap(f),p=c.getVGap(f);return h.preH=c.getPreH(f),h.preV=c.getPreV(f),h.width=c.getWidth(f),h.height=c.getHeight(f),h.width+=h.preH,h.height+=h.preV,h.id=c.getId(f),h.x=h.y=0,h.depth=0,h.children||(h.children=[]),h.addGap(d,p),h}n.assign(l.prototype,{isRoot:function(){return this.depth===0},isLeaf:function(){return this.children.length===0},addGap:function(c,h){var d=this;d.hgap+=c,d.vgap+=h,d.width+=2*c,d.height+=2*h},eachNode:function(c){for(var h=this,d=[h],p;p=d.shift();)c(p),d=p.children.concat(d)},DFTraverse:function(c){this.eachNode(c)},BFTraverse:function(c){for(var h=this,d=[h],p;p=d.shift();)c(p),d=d.concat(p.children)},getBoundingBox:function(){var c={left:Number.MAX_VALUE,top:Number.MAX_VALUE,width:0,height:0};return this.eachNode(function(h){c.left=Math.min(c.left,h.x),c.top=Math.min(c.top,h.y),c.width=Math.max(c.width,h.x+h.width),c.height=Math.max(c.height,h.y+h.height)}),c},translate:function(c,h){c===void 0&&(c=0),h===void 0&&(h=0),this.eachNode(function(d){d.x+=c,d.y+=h,d.x+=d.preH,d.y+=d.preV})},right2left:function(){var c=this,h=c.getBoundingBox();c.eachNode(function(d){d.x=d.x-(d.x-h.left)*2-d.width}),c.translate(h.width,0)},bottom2top:function(){var c=this,h=c.getBoundingBox();c.eachNode(function(d){d.y=d.y-(d.y-h.top)*2-d.height}),c.translate(0,h.height)}});function u(f,c,h){c===void 0&&(c={}),c=n.assign({},s,c);var d=new l(f,c),p=[d],v;if(!h&&!f.collapsed){for(;v=p.shift();)if(!v.data.collapsed){var m=c.getChildren(v.data),g=m?m.length:0;if(v.children=new Array(g),m&&g)for(var x=0;x-1;)i.call(s,h,1);return s};e.a=o},function(r,e,t){"use strict";var n=t(2),i=t(0),a=t(9),o=function(s,l,u){if(!Object(i.a)(s)&&!Object(a.a)(s))return s;var f=u;return Object(n.a)(s,function(c,h){f=l(f,c,h)}),f};e.a=o},function(r,e,t){"use strict";var n=t(1),i=t(21),a=function(o,s){var l=[];if(!Object(n.a)(o))return l;for(var u=-1,f=[],c=o.length;++uh[p])return 1;if(c[p]o?o:i};e.a=n},function(r,e,t){"use strict";var n=function(i,a){var o=a.toString(),s=o.indexOf(".");if(s===-1)return Math.round(i);var l=o.substr(s+1).length;return l>20&&(l=20),parseFloat(i.toFixed(l))};e.a=n},function(r,e,t){"use strict";var n=t(5),i=function(a){return Object(n.a)(a)&&a%1!=0};e.a=i},function(r,e,t){"use strict";var n=t(5),i=function(a){return Object(n.a)(a)&&a%2==0};e.a=i},function(r,e,t){"use strict";var n=t(5),i=Number.isInteger?Number.isInteger:function(a){return Object(n.a)(a)&&a%1==0};e.a=i},function(r,e,t){"use strict";var n=t(5),i=function(a){return Object(n.a)(a)&&a<0};e.a=i},function(r,e,t){"use strict";e.a=i;var n=1e-5;function i(a,o,s){return s===void 0&&(s=n),Math.abs(a-o)0};e.a=i},function(r,e,t){"use strict";var n=t(2),i=t(0),a=t(3);e.a=function(o,s){if(!!Object(i.a)(o)){var l=o[0],u;Object(a.a)(s)?u=s(o[0]):u=o[0][s];var f;return Object(n.a)(o,function(c){Object(a.a)(s)?f=s(c):f=c[s],f>u&&(l=c,u=f)}),l}}},function(r,e,t){"use strict";var n=t(2),i=t(0),a=t(3);e.a=function(o,s){if(!!Object(i.a)(o)){var l=o[0],u;Object(a.a)(s)?u=s(o[0]):u=o[0][s];var f;return Object(n.a)(o,function(c){Object(a.a)(s)?f=s(c):f=c[s],fi?(o&&(clearTimeout(o),o=null),f=d,u=n.apply(s,l),o||(s=l=null)):!o&&a.trailing!==!1&&(o=setTimeout(c,p)),u};return h.cancel=function(){clearTimeout(o),f=0,o=s=l=null},h}},function(r,e,t){"use strict";var n=t(1);e.a=function(i){return Object(n.a)(i)?Array.prototype.slice.call(i):[]}},function(r,e,t){"use strict";var n={};e.a=function(i){return i=i||"g",n[i]?n[i]+=1:n[i]=1,i+n[i]}},function(r,e,t){"use strict";e.a=function(){}},function(r,e,t){"use strict";e.a=function(n){return n}},function(r,e,t){"use strict";e.a=a;var n=t(6),i=t(1);function a(o){return Object(n.a)(o)?0:Object(i.a)(o)?o.length:Object.keys(o).length}},function(r,e,t){"use strict";var n=function(){function i(){this.map={}}return i.prototype.has=function(a){return this.map[a]!==void 0},i.prototype.get=function(a,o){var s=this.map[a];return s===void 0?o:s},i.prototype.set=function(a,o){this.map[a]=o},i.prototype.clear=function(){this.map={}},i.prototype.delete=function(a){delete this.map[a]},i.prototype.size=function(){return Object.keys(this.map).length},i}();e.a=n},function(r,e){function t(l,u,f,c){c===void 0&&(c=[]);var h=this;h.w=l||0,h.h=u||0,h.y=f||0,h.x=0,h.c=c||[],h.cs=c.length,h.prelim=0,h.mod=0,h.shift=0,h.change=0,h.tl=null,h.tr=null,h.el=null,h.er=null,h.msel=0,h.mser=0}t.fromNode=function(l,u){if(!l)return null;var f=[];return l.children.forEach(function(c){f.push(t.fromNode(c,u))}),u?new t(l.height,l.width,l.x,f):new t(l.width,l.height,l.y,f)};function n(l,u,f){f?l.y+=u:l.x+=u,l.children.forEach(function(c){n(c,u,f)})}function i(l,u){var f=u?l.y:l.x;return l.children.forEach(function(c){f=Math.min(i(c,u),f)}),f}function a(l,u){var f=i(l,u);n(l,-f,u)}function o(l,u,f){f?u.y=l.x:u.x=l.x,l.c.forEach(function(c,h){o(c,u.children[h],f)})}function s(l,u,f){f===void 0&&(f=0),u?(l.x=f,f+=l.width):(l.y=f,f+=l.height),l.children.forEach(function(c){s(c,u,f)})}r.exports=function(l,u){u===void 0&&(u={});var f=u.isHorizontal;function c(L){if(L.cs===0){h(L);return}c(L.c[0]);for(var M=I(g(L.c[0].el),0,null),O=1;OO.low&&(O=O.nxt);var N=k+F.prelim+F.w-(D+G.prelim);N>0&&(D+=N,p(L,M,O.index,N));var z=g(F),j=g(G);z<=j&&(F=m(F),F!==null&&(k+=F.mod)),z>=j&&(G=v(G),G!==null&&(D+=G.mod))}!F&&!!G?x(L,M,G,D):!!F&&!G&&b(L,M,F,k)}function p(L,M,O,F){L.c[M].mod+=F,L.c[M].msel+=F,L.c[M].mser+=F,w(L,M,O,F)}function v(L){return L.cs===0?L.tl:L.c[0]}function m(L){return L.cs===0?L.tr:L.c[L.cs-1]}function g(L){return L.y+L.h}function x(L,M,O,F){var k=L.c[0].el;k.tl=O;var G=F-O.mod-L.c[0].msel;k.mod+=G,k.prelim-=G,L.c[0].el=L.c[M].el,L.c[0].msel=L.c[M].msel}function b(L,M,O,F){var k=L.c[M].er;k.tr=O;var G=F-O.mod-L.c[M].mser;k.mod+=G,k.prelim-=G,L.c[M].er=L.c[M-1].er,L.c[M].mser=L.c[M-1].mser}function S(L){L.prelim=(L.c[0].prelim+L.c[0].mod+L.c[L.cs-1].mod+L.c[L.cs-1].prelim+L.c[L.cs-1].w)/2-L.w/2}function C(L,M){M+=L.mod,L.x=L.prelim+M,A(L);for(var O=0;O=O.low;)O=O.nxt;return{low:L,index:M,nxt:O}}s(l,f);var P=t.fromNode(l,f);return c(P),C(P,0),o(P,l,f),a(l,f),l}},function(r,e,t){function n(c,h){c.prototype=Object.create(h.prototype),c.prototype.constructor=c,c.__proto__=h}var i=t(11),a=t(115),o=t(17),s=t(7),l=function(c){n(h,c);function h(){return c.apply(this,arguments)||this}var d=h.prototype;return d.execute=function(){var v=this;return v.rootNode.width=0,o(v.rootNode,v.options,a)},h}(i),u={};function f(c,h){return h=s.assign({},u,h),new l(c,h).execute()}r.exports=f},function(r,e,t){var n=t(7);function i(s,l){s===void 0&&(s=0),l===void 0&&(l=[]);var u=this;u.x=u.y=0,u.leftChild=u.rightChild=null,u.height=0,u.children=l}var a={isHorizontal:!0,nodeSep:20,nodeSize:20,rankSep:200,subTreeSep:10};function o(s,l,u){u?(l.x=s.x,l.y=s.y):(l.x=s.y,l.y=s.x),s.children.forEach(function(f,c){o(f,l.children[c],u)})}r.exports=function(s,l){l===void 0&&(l={}),l=n.assign({},a,l);var u=0;function f(v){if(!v)return null;v.width=0,v.depth&&v.depth>u&&(u=v.depth);var m=v.children,g=m.length,x=new i(v.height,[]);return m.forEach(function(b,S){var C=f(b);x.children.push(C),S===0&&(x.leftChild=C),S===g-1&&(x.rightChild=C)}),x.originNode=v,x.isLeaf=v.isLeaf(),x}function c(v){if(v.isLeaf||v.children.length===0)v.drawingDepth=u;else{var m=v.children.map(function(x){return c(x)}),g=Math.min.apply(null,m);v.drawingDepth=g-1}return v.drawingDepth}var h;function d(v){v.x=v.drawingDepth*l.rankSep,v.isLeaf?(v.y=0,h&&(v.y=h.y+h.height+l.nodeSep,v.originNode.parent!==h.originNode.parent&&(v.y+=l.subTreeSep)),h=v):(v.children.forEach(function(m){d(m)}),v.y=(v.leftChild.y+v.rightChild.y)/2)}var p=f(s);return c(p),d(p),o(p,s,l.isHorizontal),s}},function(r,e,t){function n(d,p){d.prototype=Object.create(p.prototype),d.prototype.constructor=d,d.__proto__=p}var i=t(11),a=t(117),o=t(30),s=t(7),l=["LR","RL","H"],u=l[0],f=function(d){n(p,d);function p(){return d.apply(this,arguments)||this}var v=p.prototype;return v.execute=function(){var g=this,x=g.options,b=g.rootNode;x.isHorizontal=!0;var S=x.indent,C=S===void 0?20:S,w=x.dropCap,A=w===void 0?!0:w,I=x.direction||u;if(I&&l.indexOf(I)===-1)throw new TypeError("Invalid direction: "+I);if(I===l[0])a(b,C,A);else if(I===l[1])a(b,C,A),b.right2left();else if(I===l[2]){var P=o(b,x),L=P.left,M=P.right;a(L,C,A),L.right2left(),a(M,C,A);var O=L.getBoundingBox();M.translate(O.width,0),b.x=M.x-b.width/2}return b},p}(i),c={};function h(d,p){return p=s.assign({},c,p),new f(d,p).execute()}r.exports=h},function(r,e){function t(n,i,a,o){var s=typeof a=="function"?a(n):a*n.depth;if(!o)try{if(n.id===n.parent.children[0].id){n.x+=s,n.y=i?i.y:0;return}}catch(l){}n.x+=s,n.y=i?i.y+i.height:0}r.exports=function(n,i,a){var o=null;n.eachNode(function(s){t(s,o,i,a),o=s})}},function(r,e,t){function n(c,h){c.prototype=Object.create(h.prototype),c.prototype.constructor=c,c.__proto__=h}var i=t(11),a=t(119),o=t(17),s=t(7),l=function(c){n(h,c);function h(){return c.apply(this,arguments)||this}var d=h.prototype;return d.execute=function(){var v=this;return o(v.rootNode,v.options,a)},h}(i),u={};function f(c,h){return h=s.assign({},u,h),new l(c,h).execute()}r.exports=f},function(r,e,t){var n=t(7);function i(s,l){var u=0;return s.children.length?s.children.forEach(function(f){u+=i(f,l)}):u=s.height,s._subTreeSep=l.getSubTreeSep(s.data),s.totalHeight=Math.max(s.height,u)+2*s._subTreeSep,s.totalHeight}function a(s){var l=s.children,u=l.length;if(u){l.forEach(function(v){a(v)});var f=l[0],c=l[u-1],h=c.y-f.y+c.height,d=0;if(l.forEach(function(v){d+=v.totalHeight}),h>s.height)s.y=f.y+h/2-s.height/2;else if(l.length!==1||s.height>d){var p=s.y+(s.height-h)/2-f.y;l.forEach(function(v){v.translate(0,p)})}else s.y=(f.y+f.height/2+c.y+c.height/2)/2-s.height/2}}var o={getSubTreeSep:function(){return 0}};r.exports=function(s,l){l===void 0&&(l={}),l=n.assign({},o,l),s.parent={x:0,width:0,height:0,y:0},s.BFTraverse(function(u){u.x=u.parent.x+u.parent.width}),s.parent=null,i(s,l),s.startY=0,s.y=s.totalHeight/2-s.height/2,s.eachNode(function(u){var f=u.children,c=f.length;if(c){var h=f[0];if(h.startY=u.startY+u._subTreeSep,c===1)h.y=u.y+u.height/2-h.height/2;else{h.y=h.startY+h.totalHeight/2-h.height/2;for(var d=1;d{var xwt=[],QM=[],Xhe="insert-css: You need to provide a CSS string. Usage: insertCss(cssString[, options]).";function bwt(r,e){if(e=e||{},r===void 0)throw new Error(Xhe);var t=e.prepend===!0?"prepend":"append",n=e.container!==void 0?e.container:document.querySelector("head"),i=xwt.indexOf(n);i===-1&&(i=xwt.push(n)-1,QM[i]={});var a;return QM[i]!==void 0&&QM[i][t]!==void 0?a=QM[i][t]:(a=QM[i][t]=qhe(),t==="prepend"?n.insertBefore(a,n.childNodes[0]):n.appendChild(a)),r.charCodeAt(0)===65279&&(r=r.substr(1,r.length)),a.styleSheet?a.styleSheet.cssText+=r:a.textContent+=r,a}function qhe(){var r=document.createElement("style");return r.setAttribute("type","text/css"),r}fX.exports=bwt;fX.exports.insertCss=bwt});var PAt=ft((BX,GX)=>{(function(r,e){typeof define=="function"&&define.amd?define([],e):typeof GX=="object"&&typeof BX!="undefined"?GX.exports=e():r.Papa=e()})(BX,function r(){"use strict";var e=typeof self!="undefined"?self:typeof window!="undefined"?window:e!==void 0?e:{},t=!e.document&&!!e.postMessage,n=t&&/blob:/i.test((e.location||{}).protocol),i={},a=0,o={parse:function(w,A){var I=(A=A||{}).dynamicTyping||!1;if(C(I)&&(A.dynamicTypingFunction=I,I={}),A.dynamicTyping=I,A.transform=!!C(A.transform)&&A.transform,A.worker&&o.WORKERS_SUPPORTED){var P=function(){if(!o.WORKERS_SUPPORTED)return!1;var M=(F=e.URL||e.webkitURL||null,k=r.toString(),o.BLOB_URL||(o.BLOB_URL=F.createObjectURL(new Blob(["(",k,")();"],{type:"text/javascript"})))),O=new e.Worker(M),F,k;return O.onmessage=m,O.id=a++,i[O.id]=O}();return P.userStep=A.step,P.userChunk=A.chunk,P.userComplete=A.complete,P.userError=A.error,A.step=C(A.step),A.chunk=C(A.chunk),A.complete=C(A.complete),A.error=C(A.error),delete A.worker,void P.postMessage({input:w,config:A,workerId:P.id})}var L=null;return o.NODE_STREAM_INPUT,typeof w=="string"?L=A.download?new u(A):new c(A):w.readable===!0&&C(w.read)&&C(w.on)?L=new h(A):(e.File&&w instanceof File||w instanceof Object)&&(L=new f(A)),L.stream(w)},unparse:function(w,A){var I=!1,P=!0,L=",",M=`\r +`,O='"',F=O+O,k=!1,G=null,D=!1;(function(){if(typeof A=="object"){if(typeof A.delimiter!="string"||o.BAD_DELIMITERS.filter(function(W){return A.delimiter.indexOf(W)!==-1}).length||(L=A.delimiter),(typeof A.quotes=="boolean"||typeof A.quotes=="function"||Array.isArray(A.quotes))&&(I=A.quotes),typeof A.skipEmptyLines!="boolean"&&typeof A.skipEmptyLines!="string"||(k=A.skipEmptyLines),typeof A.newline=="string"&&(M=A.newline),typeof A.quoteChar=="string"&&(O=A.quoteChar),typeof A.header=="boolean"&&(P=A.header),Array.isArray(A.columns)){if(A.columns.length===0)throw new Error("Option columns is empty");G=A.columns}A.escapeChar!==void 0&&(F=A.escapeChar+O),typeof A.escapeFormulae=="boolean"&&(D=A.escapeFormulae)}})();var N=new RegExp(p(O),"g");if(typeof w=="string"&&(w=JSON.parse(w)),Array.isArray(w)){if(!w.length||Array.isArray(w[0]))return z(null,w,k);if(typeof w[0]=="object")return z(G||Object.keys(w[0]),w,k)}else if(typeof w=="object")return typeof w.data=="string"&&(w.data=JSON.parse(w.data)),Array.isArray(w.data)&&(w.fields||(w.fields=w.meta&&w.meta.fields),w.fields||(w.fields=Array.isArray(w.data[0])?w.fields:typeof w.data[0]=="object"?Object.keys(w.data[0]):[]),Array.isArray(w.data[0])||typeof w.data[0]=="object"||(w.data=[w.data])),z(w.fields||[],w.data||[],k);throw new Error("Unable to serialize unrecognized input");function z(W,J,et){var lt="";typeof W=="string"&&(W=JSON.parse(W)),typeof J=="string"&&(J=JSON.parse(J));var $=Array.isArray(W)&&0=this._config.preview;if(n)e.postMessage({results:M,workerId:o.WORKER_ID,finished:F});else if(C(this._config.chunk)&&!I){if(this._config.chunk(M,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);M=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(M.data),this._completeResults.errors=this._completeResults.errors.concat(M.errors),this._completeResults.meta=M.meta),this._completed||!F||!C(this._config.complete)||M&&M.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),F||M&&M.meta.paused||this._nextChunk(),M}this._halted=!0},this._sendError=function(A){C(this._config.error)?this._config.error(A):n&&this._config.error&&e.postMessage({workerId:o.WORKER_ID,error:A,finished:!1})}}function u(w){var A;(w=w||{}).chunkSize||(w.chunkSize=o.RemoteChunkSize),l.call(this,w),this._nextChunk=t?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(I){this._input=I,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(A=new XMLHttpRequest,this._config.withCredentials&&(A.withCredentials=this._config.withCredentials),t||(A.onload=S(this._chunkLoaded,this),A.onerror=S(this._chunkError,this)),A.open(this._config.downloadRequestBody?"POST":"GET",this._input,!t),this._config.downloadRequestHeaders){var I=this._config.downloadRequestHeaders;for(var P in I)A.setRequestHeader(P,I[P])}if(this._config.chunkSize){var L=this._start+this._config.chunkSize-1;A.setRequestHeader("Range","bytes="+this._start+"-"+L)}try{A.send(this._config.downloadRequestBody)}catch(M){this._chunkError(M.message)}t&&A.status===0&&this._chunkError()}},this._chunkLoaded=function(){A.readyState===4&&(A.status<200||400<=A.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:A.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(I){var P=I.getResponseHeader("Content-Range");return P===null?-1:parseInt(P.substring(P.lastIndexOf("/")+1))}(A),this.parseChunk(A.responseText)))},this._chunkError=function(I){var P=A.statusText||I;this._sendError(new Error(P))}}function f(w){var A,I;(w=w||{}).chunkSize||(w.chunkSize=o.LocalChunkSize),l.call(this,w);var P=typeof FileReader!="undefined";this.stream=function(L){this._input=L,I=L.slice||L.webkitSlice||L.mozSlice,P?((A=new FileReader).onload=S(this._chunkLoaded,this),A.onerror=S(this._chunkError,this)):A=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(L.target.result)},this._chunkError=function(){this._sendError(A.error)}}function c(w){var A;l.call(this,w=w||{}),this.stream=function(I){return A=I,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var I,P=this._config.chunkSize;return P?(I=A.substring(0,P),A=A.substring(P)):(I=A,A=""),this._finished=!A,this.parseChunk(I)}}}function h(w){l.call(this,w=w||{});var A=[],I=!0,P=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(L){this._input=L,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){P&&A.length===1&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),A.length?this.parseChunk(A.shift()):I=!0},this._streamData=S(function(L){try{A.push(typeof L=="string"?L:L.toString(this._config.encoding)),I&&(I=!1,this._checkIsFinished(),this.parseChunk(A.shift()))}catch(M){this._streamError(M)}},this),this._streamError=S(function(L){this._streamCleanUp(),this._sendError(L)},this),this._streamEnd=S(function(){this._streamCleanUp(),P=!0,this._streamData("")},this),this._streamCleanUp=S(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function d(w){var A,I,P,L=Math.pow(2,53),M=-L,O=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,F=/^(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))$/,k=this,G=0,D=0,N=!1,z=!1,j=[],W={data:[],errors:[],meta:{}};if(C(w.step)){var J=w.step;w.step=function(dt){if(W=dt,$())lt();else{if(lt(),W.data.length===0)return;G+=dt.data.length,w.preview&&G>w.preview?I.abort():(W.data=W.data[0],J(W,k))}}}function et(dt){return w.skipEmptyLines==="greedy"?dt.join("").trim()==="":dt.length===1&&dt[0].length===0}function lt(){if(W&&P&&(_t("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+o.DefaultDelimiter+"'"),P=!1),w.skipEmptyLines)for(var dt=0;dt=j.length?"__parsed_extra":j[Y]),w.transform&&(Rt=w.transform(Rt,K)),Rt=st(K,Rt),K==="__parsed_extra"?(it[K]=it[K]||[],it[K].push(Rt)):it[K]=Rt}return w.header&&(Y>j.length?_t("FieldMismatch","TooManyFields","Too many fields: expected "+j.length+" fields but parsed "+Y,D+$t):Y=Xt.length/2?`\r +`:"\r"}(dt,Ut)),P=!1,w.delimiter)C(w.delimiter)&&(w.delimiter=w.delimiter(dt),W.meta.delimiter=w.delimiter);else{var $t=function(it,K,Rt,Xt,Zt){var Ae,We,$e,V;Zt=Zt||[","," ","|",";",o.RECORD_SEP,o.UNIT_SEP];for(var Te=0;Te=O)return V(!0)}else for(K=G,G++;;){if((K=N.indexOf(A,K+1))===-1)return j||_t.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:st.length,index:G}),We();if(K===W-1)return We(N.substring(G,K).replace(it,A));if(A!==k||N[K+1]!==k){if(A===k||K===0||N[K-1]!==k){$t!==-1&&$t=O)return V(!0);break}_t.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:st.length,index:G}),K++}}else K++}return We();function Zt(ne){st.push(ne),vt=G}function Ae(ne){var pt=0;if(ne!==-1){var Et=N.substring(K+1,ne);Et&&Et.trim()===""&&(pt=Et.length)}return pt}function We(ne){return j||(ne===void 0&&(ne=N.substring(G)),dt.push(ne),G=W,Zt(dt),$&&Te()),V()}function $e(ne){G=ne,Zt(dt),dt=[],Y=N.indexOf(P,G)}function V(ne){return{data:st,errors:_t,meta:{delimiter:I,linebreak:P,aborted:D,truncated:!!ne,cursor:vt+(z||0)}}}function Te(){M(V()),st=[],_t=[]}},this.abort=function(){D=!0},this.getCharIndex=function(){return G}}function m(w){var A=w.data,I=i[A.workerId],P=!1;if(A.error)I.userError(A.error,A.file);else if(A.results&&A.results.data){var L={abort:function(){P=!0,g(A.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:x,resume:x};if(C(I.userStep)){for(var M=0;M{"use strict";Object.defineProperty(_F,"__esModule",{value:!0});require("obsidian");var hme=r=>{var e;return r?(e=r.plugins.plugins.dataview)===null||e===void 0?void 0:e.api:window.DataviewAPI},dme=r=>r.plugins.enabledPlugins.has("dataview");_F.getAPI=hme;_F.isPluginEnabled=dme});Dn(exports,{default:()=>jX});var qB=class extends Error{},C9=class extends qB{},w9=class extends qB{},I2t=(r,e=",")=>r.join(e),L2t={accept:"*",multiple:!1,strict:!1},E9=r=>{let{accept:e,multiple:t,strict:n}=Hf(Hf({},L2t),r),i=P2t({multiple:t,accept:Array.isArray(e)?I2t(e):e});return new Promise(a=>{i.onchange=()=>{a(O2t(i.files,t,n)),i.remove()},i.click()})},O2t=(r,e,t)=>new Promise((n,i)=>{if(!r)return i(new C9);let a=D2t(r,e,t);if(!a)return i(new w9);n(a)}),D2t=(r,e,t)=>!e&&t?r.length===1?r[0]:null:r.length?r:null,P2t=({accept:r,multiple:e})=>{let t=document.createElement("input");return t.type="file",t.multiple=e,t.accept=r,t};function A9(r){return typeof r=="undefined"||r===null}function k2t(r){return typeof r=="object"&&r!==null}function R2t(r){return Array.isArray(r)?r:A9(r)?[]:[r]}function N2t(r,e){var t,n,i,a;if(e)for(a=Object.keys(e),t=0,n=a.length;ts&&(a=" ... ",e=n-s+a.length),t-n>s&&(o=" ...",t=n+s-o.length),{str:a+r.slice(e,t).replace(/\t/g,"\u2192")+o,pos:n-e+a.length}}function ZB(r,e){return xo.repeat(" ",e-r.length)+r}function H2t(r,e){if(e=Object.create(e||null),!r.buffer)return null;e.maxLength||(e.maxLength=79),typeof e.indent!="number"&&(e.indent=1),typeof e.linesBefore!="number"&&(e.linesBefore=3),typeof e.linesAfter!="number"&&(e.linesAfter=2);for(var t=/\r?\n|\r|\0/g,n=[0],i=[],a,o=-1;a=t.exec(r.buffer);)i.push(a.index),n.push(a.index+a[0].length),r.position<=a.index&&o<0&&(o=n.length-2);o<0&&(o=n.length-1);var s="",l,u,f=Math.min(r.line+e.linesAfter,i.length).toString().length,c=e.maxLength-(e.indent+f+3);for(l=1;l<=e.linesBefore&&!(o-l<0);l++)u=KB(r.buffer,n[o-l],i[o-l],r.position-(n[o]-n[o-l]),c),s=xo.repeat(" ",e.indent)+ZB((r.line-l+1).toString(),f)+" | "+u.str+` +`+s;for(u=KB(r.buffer,n[o],i[o],r.position,c),s+=xo.repeat(" ",e.indent)+ZB((r.line+1).toString(),f)+" | "+u.str+` +`,s+=xo.repeat("-",e.indent+f+3+u.pos)+`^ +`,l=1;l<=e.linesAfter&&!(o+l>=i.length);l++)u=KB(r.buffer,n[o+l],i[o+l],r.position-(n[o]-n[o+l]),c),s+=xo.repeat(" ",e.indent)+ZB((r.line+l+1).toString(),f)+" | "+u.str+` +`;return s.replace(/\n$/,"")}var Y2t=H2t,X2t=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],q2t=["scalar","sequence","mapping"];function K2t(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(n){e[String(n)]=t})}),e}function Z2t(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(X2t.indexOf(t)===-1)throw new zs('Unknown option "'+t+'" is met in definition of "'+r+'" YAML type.')}),this.options=e,this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=K2t(e.styleAliases||null),q2t.indexOf(this.kind)===-1)throw new zs('Unknown kind "'+this.kind+'" is specified for "'+r+'" YAML type.')}var es=Z2t;function T9(r,e){var t=[];return r[e].forEach(function(n){var i=t.length;t.forEach(function(a,o){a.tag===n.tag&&a.kind===n.kind&&a.multi===n.multi&&(i=o)}),t[i]=n}),t}function $2t(){var r={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},e,t;function n(i){i.multi?(r.multi[i.kind].push(i),r.multi.fallback.push(i)):r[i.kind][i.tag]=r.fallback[i.tag]=i}for(e=0,t=arguments.length;e=0?"0b"+r.toString(2):"-0b"+r.toString(2).slice(1)},octal:function(r){return r>=0?"0o"+r.toString(8):"-0o"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?"0x"+r.toString(16).toUpperCase():"-0x"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),fLt=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function cLt(r){return!(r===null||!fLt.test(r)||r[r.length-1]==="_")}function hLt(r){var e,t;return e=r.replace(/_/g,"").toLowerCase(),t=e[0]==="-"?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:t*parseFloat(e,10)}var dLt=/^[-+]?[0-9]+e/;function pLt(r,e){var t;if(isNaN(r))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===r)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(xo.isNegativeZero(r))return"-0.0";return t=r.toString(10),dLt.test(t)?t.replace("e",".e"):t}function vLt(r){return Object.prototype.toString.call(r)==="[object Number]"&&(r%1!=0||xo.isNegativeZero(r))}var F9=new es("tag:yaml.org,2002:float",{kind:"scalar",resolve:cLt,construct:hLt,predicate:vLt,represent:pLt,defaultStyle:"lowercase"}),B9=P9.extend({implicit:[k9,R9,N9,F9]}),G9=B9,z9=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),U9=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function mLt(r){return r===null?!1:z9.exec(r)!==null||U9.exec(r)!==null}function gLt(r){var e,t,n,i,a,o,s,l=0,u=null,f,c,h;if(e=z9.exec(r),e===null&&(e=U9.exec(r)),e===null)throw new Error("Date resolve error");if(t=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(t,n,i));if(a=+e[4],o=+e[5],s=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(f=+e[10],c=+(e[11]||0),u=(f*60+c)*6e4,e[9]==="-"&&(u=-u)),h=new Date(Date.UTC(t,n,i,a,o,s,l)),u&&h.setTime(h.getTime()-u),h}function yLt(r){return r.toISOString()}var j9=new es("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:mLt,construct:gLt,instanceOf:Date,represent:yLt});function xLt(r){return r==="<<"||r===null}var W9=new es("tag:yaml.org,2002:merge",{kind:"scalar",resolve:xLt}),QB=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= +\r`;function bLt(r){if(r===null)return!1;var e,t,n=0,i=r.length,a=QB;for(t=0;t64)){if(e<0)return!1;n+=6}return n%8==0}function _Lt(r){var e,t,n=r.replace(/[\r\n=]/g,""),i=n.length,a=QB,o=0,s=[];for(e=0;e>16&255),s.push(o>>8&255),s.push(o&255)),o=o<<6|a.indexOf(n.charAt(e));return t=i%4*6,t===0?(s.push(o>>16&255),s.push(o>>8&255),s.push(o&255)):t===18?(s.push(o>>10&255),s.push(o>>2&255)):t===12&&s.push(o>>4&255),new Uint8Array(s)}function SLt(r){var e="",t=0,n,i,a=r.length,o=QB;for(n=0;n>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[n];return i=a%3,i===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):i===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):i===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function CLt(r){return Object.prototype.toString.call(r)==="[object Uint8Array]"}var V9=new es("tag:yaml.org,2002:binary",{kind:"scalar",resolve:bLt,construct:_Lt,predicate:CLt,represent:SLt}),wLt=Object.prototype.hasOwnProperty,ELt=Object.prototype.toString;function ALt(r){if(r===null)return!0;var e=[],t,n,i,a,o,s=r;for(t=0,n=s.length;t>10)+55296,(r-65536&1023)+56320)}var e7=new Array(256),r7=new Array(256);for(Ey=0;Ey<256;Ey++)e7[Ey]=t7(Ey)?1:0,r7[Ey]=t7(Ey);var Ey;function jLt(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||JB,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function n7(r,e){var t={name:r.filename,buffer:r.input.slice(0,-1),position:r.position,line:r.line,column:r.position-r.lineStart};return t.snippet=Y2t(t),new zs(e,t)}function Br(r,e){throw n7(r,e)}function OI(r,e){r.onWarning&&r.onWarning.call(null,n7(r,e))}var i7={YAML:function(e,t,n){var i,a,o;e.version!==null&&Br(e,"duplication of %YAML directive"),n.length!==1&&Br(e,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]),i===null&&Br(e,"ill-formed argument of the YAML directive"),a=parseInt(i[1],10),o=parseInt(i[2],10),a!==1&&Br(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&OI(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,a;n.length!==2&&Br(e,"TAG directive accepts exactly two arguments"),i=n[0],a=n[1],$9.test(i)||Br(e,"ill-formed tag handle (first argument) of the TAG directive"),Bv.call(e.tagMap,i)&&Br(e,'there is a previously declared suffix for "'+i+'" tag handle'),Q9.test(a)||Br(e,"ill-formed tag prefix (second argument) of the TAG directive");try{a=decodeURIComponent(a)}catch(o){Br(e,"tag prefix is malformed: "+a)}e.tagMap[i]=a}};function Gv(r,e,t,n){var i,a,o,s;if(e1&&(r.result+=xo.repeat(` +`,e-1))}function WLt(r,e,t){var n,i,a,o,s,l,u,f,c=r.kind,h=r.result,d;if(d=r.input.charCodeAt(r.position),wl(d)||rb(d)||d===35||d===38||d===42||d===33||d===124||d===62||d===39||d===34||d===37||d===64||d===96||(d===63||d===45)&&(i=r.input.charCodeAt(r.position+1),wl(i)||t&&rb(i)))return!1;for(r.kind="scalar",r.result="",a=o=r.position,s=!1;d!==0;){if(d===58){if(i=r.input.charCodeAt(r.position+1),wl(i)||t&&rb(i))break}else if(d===35){if(n=r.input.charCodeAt(r.position-1),wl(n))break}else{if(r.position===r.lineStart&&DI(r)||t&&rb(d))break;if(Zc(d))if(l=r.line,u=r.lineStart,f=r.lineIndent,no(r,!1,-1),r.lineIndent>=e){s=!0,d=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=u,r.lineIndent=f;break}}s&&(Gv(r,a,o,!1),r3(r,r.line-l),a=o=r.position,s=!1),wy(d)||(o=r.position+1),d=r.input.charCodeAt(++r.position)}return Gv(r,a,o,!1),r.result?!0:(r.kind=c,r.result=h,!1)}function VLt(r,e){var t,n,i;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind="scalar",r.result="",r.position++,n=i=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(Gv(r,n,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)n=r.position,r.position++,i=r.position;else return!0;else Zc(t)?(Gv(r,n,i,!0),r3(r,no(r,!1,e)),n=i=r.position):r.position===r.lineStart&&DI(r)?Br(r,"unexpected end of the document within a single quoted scalar"):(r.position++,i=r.position);Br(r,"unexpected end of the stream within a single quoted scalar")}function HLt(r,e){var t,n,i,a,o,s;if(s=r.input.charCodeAt(r.position),s!==34)return!1;for(r.kind="scalar",r.result="",r.position++,t=n=r.position;(s=r.input.charCodeAt(r.position))!==0;){if(s===34)return Gv(r,t,r.position,!0),r.position++,!0;if(s===92){if(Gv(r,t,r.position,!0),s=r.input.charCodeAt(++r.position),Zc(s))no(r,!1,e);else if(s<256&&e7[s])r.result+=r7[s],r.position++;else if((o=GLt(s))>0){for(i=o,a=0;i>0;i--)s=r.input.charCodeAt(++r.position),(o=BLt(s))>=0?a=(a<<4)+o:Br(r,"expected hexadecimal character");r.result+=ULt(a),r.position++}else Br(r,"unknown escape sequence");t=n=r.position}else Zc(s)?(Gv(r,t,n,!0),r3(r,no(r,!1,e)),t=n=r.position):r.position===r.lineStart&&DI(r)?Br(r,"unexpected end of the document within a double quoted scalar"):(r.position++,n=r.position)}Br(r,"unexpected end of the stream within a double quoted scalar")}function YLt(r,e){var t=!0,n,i,a,o=r.tag,s,l=r.anchor,u,f,c,h,d,p=Object.create(null),v,m,g,x;if(x=r.input.charCodeAt(r.position),x===91)f=93,d=!1,s=[];else if(x===123)f=125,d=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),x=r.input.charCodeAt(++r.position);x!==0;){if(no(r,!0,e),x=r.input.charCodeAt(r.position),x===f)return r.position++,r.tag=o,r.anchor=l,r.kind=d?"mapping":"sequence",r.result=s,!0;t?x===44&&Br(r,"expected the node content, but found ','"):Br(r,"missed comma between flow collection entries"),m=v=g=null,c=h=!1,x===63&&(u=r.input.charCodeAt(r.position+1),wl(u)&&(c=h=!0,r.position++,no(r,!0,e))),n=r.line,i=r.lineStart,a=r.position,ib(r,e,II,!1,!0),m=r.tag,v=r.result,no(r,!0,e),x=r.input.charCodeAt(r.position),(h||r.line===n)&&x===58&&(c=!0,x=r.input.charCodeAt(++r.position),no(r,!0,e),ib(r,e,II,!1,!0),g=r.result),d?nb(r,s,p,m,v,g,n,i,a):c?s.push(nb(r,null,p,m,v,g,n,i,a)):s.push(v),no(r,!0,e),x=r.input.charCodeAt(r.position),x===44?(t=!0,x=r.input.charCodeAt(++r.position)):t=!1}Br(r,"unexpected end of the stream within a flow collection")}function XLt(r,e){var t,n,i=t3,a=!1,o=!1,s=e,l=0,u=!1,f,c;if(c=r.input.charCodeAt(r.position),c===124)n=!1;else if(c===62)n=!0;else return!1;for(r.kind="scalar",r.result="";c!==0;)if(c=r.input.charCodeAt(++r.position),c===43||c===45)t3===i?i=c===43?Z9:kLt:Br(r,"repeat of a chomping mode identifier");else if((f=zLt(c))>=0)f===0?Br(r,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?Br(r,"repeat of an indentation width identifier"):(s=e+f-1,o=!0);else break;if(wy(c)){do c=r.input.charCodeAt(++r.position);while(wy(c));if(c===35)do c=r.input.charCodeAt(++r.position);while(!Zc(c)&&c!==0)}for(;c!==0;){for(e3(r),r.lineIndent=0,c=r.input.charCodeAt(r.position);(!o||r.lineIndents&&(s=r.lineIndent),Zc(c)){l++;continue}if(r.lineIndente)&&l!==0)Br(r,"bad indentation of a sequence entry");else if(r.lineIndente)&&(m&&(o=r.line,s=r.lineStart,l=r.position),ib(r,e,LI,!0,i)&&(m?p=r.result:v=r.result),m||(nb(r,c,h,d,p,v,o,s,l),d=p=v=null),no(r,!0,-1),x=r.input.charCodeAt(r.position)),(r.line===a||r.lineIndent>e)&&x!==0)Br(r,"bad indentation of a mapping entry");else if(r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndent tag; it should be "scalar", not "'+r.kind+'"'),c=0,h=r.implicitTypes.length;c"),r.result!==null&&p.kind!==r.kind&&Br(r,"unacceptable node kind for !<"+r.tag+'> tag; it should be "'+p.kind+'", not "'+r.kind+'"'),p.resolve(r.result,r.tag)?(r.result=p.construct(r.result,r.tag),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):Br(r,"cannot resolve a node with !<"+r.tag+"> explicit tag")}return r.listener!==null&&r.listener("close",r),r.tag!==null||r.anchor!==null||f}function QLt(r){var e=r.position,t,n,i,a=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap=Object.create(null),r.anchorMap=Object.create(null);(o=r.input.charCodeAt(r.position))!==0&&(no(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(a=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!wl(o);)o=r.input.charCodeAt(++r.position);for(n=r.input.slice(t,r.position),i=[],n.length<1&&Br(r,"directive name must not be less than one character in length");o!==0;){for(;wy(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!Zc(o));break}if(Zc(o))break;for(t=r.position;o!==0&&!wl(o);)o=r.input.charCodeAt(++r.position);i.push(r.input.slice(t,r.position))}o!==0&&e3(r),Bv.call(i7,n)?i7[n](r,n,i):OI(r,'unknown document directive "'+n+'"')}if(no(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,no(r,!0,-1)):a&&Br(r,"directives end mark is expected"),ib(r,r.lineIndent-1,LI,!1,!0),no(r,!0,-1),r.checkLineBreaks&&NLt.test(r.input.slice(e,r.position))&&OI(r,"non-ASCII line breaks are interpreted as content"),r.documents.push(r.result),r.position===r.lineStart&&DI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,no(r,!0,-1));return}if(r.position=55296&&t<=56319&&e+1=56320&&n<=57343)?(t-55296)*1024+n-56320+65536:t}function x7(r){var e=/^\n* /;return e.test(r)}var b7=1,o3=2,_7=3,S7=4,ab=5;function TOt(r,e,t,n,i,a,o,s){var l,u=0,f=null,c=!1,h=!1,d=n!==-1,p=-1,v=AOt(lw(r,0))&&MOt(lw(r,r.length-1));if(e||o)for(l=0;l=65536?l+=2:l++){if(u=lw(r,l),!sw(u))return ab;v=v&&y7(u,f,s),f=u}else{for(l=0;l=65536?l+=2:l++){if(u=lw(r,l),u===aw)c=!0,d&&(h=h||l-p-1>n&&r[p+1]!==" ",p=l);else if(!sw(u))return ab;v=v&&y7(u,f,s),f=u}h=h||d&&l-p-1>n&&r[p+1]!==" "}return!c&&!h?v&&!o&&!i(r)?b7:a===ow?ab:o3:t>9&&x7(r)?ab:o?a===ow?ab:o3:h?S7:_7}function IOt(r,e,t,n,i){r.dump=function(){if(e.length===0)return r.quotingType===ow?'""':"''";if(!r.noCompatMode&&(xOt.indexOf(e)!==-1||bOt.test(e)))return r.quotingType===ow?'"'+e+'"':"'"+e+"'";var a=r.indent*Math.max(1,t),o=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-a),s=n||r.flowLevel>-1&&t>=r.flowLevel;function l(u){return EOt(r,u)}switch(TOt(e,s,r.indent,o,l,r.quotingType,r.forceQuotes&&!n,i)){case b7:return e;case o3:return"'"+e.replace(/'/g,"''")+"'";case _7:return"|"+C7(e,r.indent)+w7(m7(e,a));case S7:return">"+C7(e,r.indent)+w7(m7(LOt(e,o),a));case ab:return'"'+OOt(e)+'"';default:throw new zs("impossible error: invalid scalar style")}}()}function C7(r,e){var t=x7(r)?String(e):"",n=r[r.length-1]===` +`,i=n&&(r[r.length-2]===` +`||r===` +`),a=i?"+":n?"":"-";return t+a+` +`}function w7(r){return r[r.length-1]===` +`?r.slice(0,-1):r}function LOt(r,e){for(var t=/(\n+)([^\n]*)/g,n=function(){var u=r.indexOf(` +`);return u=u!==-1?u:r.length,t.lastIndex=u,E7(r.slice(0,u),e)}(),i=r[0]===` +`||r[0]===" ",a,o;o=t.exec(r);){var s=o[1],l=o[2];a=l[0]===" ",n+=s+(!i&&!a&&l!==""?` +`:"")+E7(l,e),i=a}return n}function E7(r,e){if(r===""||r[0]===" ")return r;for(var t=/ [^ ]/g,n,i=0,a,o=0,s=0,l="";n=t.exec(r);)s=n.index,s-i>e&&(a=o>i?o:s,l+=` +`+r.slice(i,a),i=a+1),o=s;return l+=` +`,r.length-i>e&&o>i?l+=r.slice(i,o)+` +`+r.slice(o+1):l+=r.slice(i),l.slice(1)}function OOt(r){for(var e="",t=0,n,i=0;i=65536?i+=2:i++)t=lw(r,i),n=_s[t],!n&&sw(t)?(e+=r[i],t>=65536&&(e+=r[i+1])):e+=n||SOt(t);return e}function DOt(r,e,t){var n="",i=r.tag,a,o,s;for(a=0,o=t.length;a1024&&(f+="? "),f+=r.dump+(r.condenseFlow?'"':"")+":"+(r.condenseFlow?"":" "),!!$d(r,e,u,!1,!1)&&(f+=r.dump,n+=f));r.tag=i,r.dump="{"+n+"}"}function kOt(r,e,t,n){var i="",a=r.tag,o=Object.keys(t),s,l,u,f,c,h;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys=="function")o.sort(r.sortKeys);else if(r.sortKeys)throw new zs("sortKeys must be a boolean or a function");for(s=0,l=o.length;s1024,c&&(r.dump&&aw===r.dump.charCodeAt(0)?h+="?":h+="? "),h+=r.dump,c&&(h+=a3(r,e)),!!$d(r,e+1,f,!0,c)&&(r.dump&&aw===r.dump.charCodeAt(0)?h+=":":h+=": ",h+=r.dump,i+=h));r.tag=a,r.dump=i||"{}"}function M7(r,e,t){var n,i,a,o,s,l;for(i=t?r.explicitTypes:r.implicitTypes,a=0,o=i.length;a tag resolver accepts not "'+l+'" style');r.dump=n}return!0}return!1}function $d(r,e,t,n,i,a,o){r.tag=null,r.dump=t,M7(r,t,!1)||M7(r,t,!0);var s=u7.call(r.dump),l=n,u;n&&(n=r.flowLevel<0||r.flowLevel>e);var f=s==="[object Object]"||s==="[object Array]",c,h;if(f&&(c=r.duplicates.indexOf(t),h=c!==-1),(r.tag!==null&&r.tag!=="?"||h||r.indent!==2&&e>0)&&(i=!1),h&&r.usedDuplicates[c])r.dump="*ref_"+c;else{if(f&&h&&!r.usedDuplicates[c]&&(r.usedDuplicates[c]=!0),s==="[object Object]")n&&Object.keys(r.dump).length!==0?(kOt(r,e,r.dump,i),h&&(r.dump="&ref_"+c+r.dump)):(POt(r,e,r.dump),h&&(r.dump="&ref_"+c+" "+r.dump));else if(s==="[object Array]")n&&r.dump.length!==0?(r.noArrayIndent&&!o&&e>0?A7(r,e-1,r.dump,i):A7(r,e,r.dump,i),h&&(r.dump="&ref_"+c+r.dump)):(DOt(r,e,r.dump),h&&(r.dump="&ref_"+c+" "+r.dump));else if(s==="[object String]")r.tag!=="?"&&IOt(r,r.dump,e,a,l);else{if(s==="[object Undefined]")return!1;if(r.skipInvalid)return!1;throw new zs("unacceptable kind of an object to dump "+s)}r.tag!==null&&r.tag!=="?"&&(u=encodeURI(r.tag[0]==="!"?r.tag.slice(1):r.tag).replace(/!/g,"%21"),r.tag[0]==="!"?u="!"+u:u.slice(0,18)==="tag:yaml.org,2002:"?u="!!"+u.slice(18):u="!<"+u+">",r.dump=u+" "+r.dump)}return!0}function ROt(r,e){var t=[],n=[],i,a;for(s3(r,t,n),i=0,a=n.length;i2&&(o.children=arguments.length>3?uw.call(arguments,2):t),typeof r=="function"&&r.defaultProps!=null)for(a in r.defaultProps)o[a]===void 0&&(o[a]=r.defaultProps[a]);return cw(r,o,n,i,null)}function cw(r,e,t,n,i){var a={type:r,props:e,key:t,ref:n,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:i==null?++I7:i};return i==null&&Rr.vnode!=null&&Rr.vnode(a),a}function u3(){return{current:null}}function Ss(r){return r.children}function Wu(r,e){this.props=r,this.context=e}function ob(r,e){if(e==null)return r.__?ob(r.__,r.__.__k.indexOf(r)+1):null;for(var t;e0?cw(d.type,d.props,d.key,null,d.__v):d)!=null){if(d.__=t,d.__b=t.__b+1,(h=g[f])===null||h&&d.key==h.key&&d.type===h.type)g[f]=void 0;else for(c=0;c2&&(o.children=arguments.length>3?uw.call(arguments,2):t),cw(r.type,o,n||r.key,i||r.ref,null)}function d3(r,e){var t={__c:e="__cC"+D7++,__:r,Consumer:function(n,i){return n.children(i)},Provider:function(n){var i,a;return this.getChildContext||(i=[],(a={})[e]=this,this.getChildContext=function(){return a},this.shouldComponentUpdate=function(o){this.props.value!==o.value&&i.some(f3)},this.sub=function(o){i.push(o);var s=o.componentWillUnmount;o.componentWillUnmount=function(){i.splice(i.indexOf(o),1),s&&s.call(o)}}),n.children}};return t.Provider.__=t.Consumer.contextType=t}uw=P7.slice,Rr={__e:function(r,e){for(var t,n,i;e=e.__;)if((t=e.__c)&&!t.__)try{if((n=t.constructor)&&n.getDerivedStateFromError!=null&&(t.setState(n.getDerivedStateFromError(r)),i=t.__d),t.componentDidCatch!=null&&(t.componentDidCatch(r),i=t.__d),i)return t.__E=t}catch(a){r=a}throw r}},I7=0,tDt=function(r){return r!=null&&r.constructor===void 0},Wu.prototype.setState=function(r,e){var t;t=this.__s!=null&&this.__s!==this.state?this.__s:this.__s=Qd({},this.state),typeof r=="function"&&(r=r(Qd({},t),this.props)),r&&Qd(t,r),r!=null&&this.__v&&(e&&this.__h.push(e),f3(this))},Wu.prototype.forceUpdate=function(r){this.__v&&(this.__e=!0,r&&this.__h.push(r),f3(this))},Wu.prototype.render=Ss,fw=[],L7=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,NI.__r=0,D7=0;var lb,Us,Y7,ub=0,p3=[],X7=Rr.__b,q7=Rr.__r,K7=Rr.diffed,Z7=Rr.__c,$7=Rr.unmount;function hw(r,e){Rr.__h&&Rr.__h(Us,r,ub||e),ub=0;var t=Us.__H||(Us.__H={__:[],__h:[]});return r>=t.__.length&&t.__.push({}),t.__[r]}function BI(r){return ub=1,v3(eq,r)}function v3(r,e,t){var n=hw(lb++,2);return n.t=r,n.__c||(n.__=[t?t(e):eq(void 0,e),function(i){var a=n.t(n.__[0],i);n.__[0]!==a&&(n.__=[a,n.__[1]],n.__c.setState({}))}],n.__c=Us),n.__}function ke(r,e){var t=hw(lb++,3);!Rr.__s&&y3(t.__H,e)&&(t.__=r,t.__H=e,Us.__H.__h.push(t))}function m3(r,e){var t=hw(lb++,4);!Rr.__s&&y3(t.__H,e)&&(t.__=r,t.__H=e,Us.__h.push(t))}function Na(r){return ub=5,GI(function(){return{current:r}},[])}function ur(r,e,t){ub=6,m3(function(){typeof r=="function"?r(e()):r&&(r.current=e())},t==null?t:t.concat(r))}function GI(r,e){var t=hw(lb++,7);return y3(t.__H,e)&&(t.__=r(),t.__H=e,t.__h=r),t.__}function zI(r,e){return ub=8,GI(function(){return r},e)}function Q7(r){var e=Us.context[r.__c],t=hw(lb++,9);return t.c=r,e?(t.__==null&&(t.__=!0,e.sub(Us)),e.props.value):r.__}function J7(r,e){Rr.useDebugValue&&Rr.useDebugValue(e?e(r):r)}function aDt(){var r;for(p3.sort(function(e,t){return e.__v.__b-t.__v.__b});r=p3.pop();)if(r.__P)try{r.__H.__h.forEach(UI),r.__H.__h.forEach(g3),r.__H.__h=[]}catch(e){r.__H.__h=[],Rr.__e(e,r.__v)}}Rr.__b=function(r){Us=null,X7&&X7(r)},Rr.__r=function(r){q7&&q7(r),lb=0;var e=(Us=r.__c).__H;e&&(e.__h.forEach(UI),e.__h.forEach(g3),e.__h=[])},Rr.diffed=function(r){K7&&K7(r);var e=r.__c;e&&e.__H&&e.__H.__h.length&&(p3.push(e)!==1&&Y7===Rr.requestAnimationFrame||((Y7=Rr.requestAnimationFrame)||function(t){var n,i=function(){clearTimeout(a),tq&&cancelAnimationFrame(n),setTimeout(t)},a=setTimeout(i,100);tq&&(n=requestAnimationFrame(i))})(aDt)),Us=null},Rr.__c=function(r,e){e.some(function(t){try{t.__h.forEach(UI),t.__h=t.__h.filter(function(n){return!n.__||g3(n)})}catch(n){e.some(function(i){i.__h&&(i.__h=[])}),e=[],Rr.__e(n,t.__v)}}),Z7&&Z7(r,e)},Rr.unmount=function(r){$7&&$7(r);var e,t=r.__c;t&&t.__H&&(t.__H.__.forEach(function(n){try{UI(n)}catch(i){e=i}}),e&&Rr.__e(e,t.__v))};var tq=typeof requestAnimationFrame=="function";function UI(r){var e=Us,t=r.__c;typeof t=="function"&&(r.__c=void 0,t()),Us=e}function g3(r){var e=Us;r.__c=r.__(),Us=e}function y3(r,e){return!r||r.length!==e.length||e.some(function(t,n){return t!==r[n]})}function eq(r,e){return typeof e=="function"?e(r):e}function rq(r,e){for(var t in e)r[t]=e[t];return r}function x3(r,e){for(var t in r)if(t!=="__source"&&!(t in e))return!0;for(var n in e)if(n!=="__source"&&r[n]!==e[n])return!0;return!1}function b3(r){this.props=r}function oDt(r,e){function t(i){var a=this.props.ref,o=a==i.ref;return!o&&a&&(a.call?a(null):a.current=null),e?!e(this.props,i)||!o:x3(this.props,i)}function n(i){return this.shouldComponentUpdate=t,si(r,i)}return n.displayName="Memo("+(r.displayName||r.name)+")",n.prototype.isReactComponent=!0,n.__f=!0,n}(b3.prototype=new Wu).isPureReactComponent=!0,b3.prototype.shouldComponentUpdate=function(r,e){return x3(this.props,r)||x3(this.state,e)};var nq=Rr.__b;Rr.__b=function(r){r.type&&r.type.__f&&r.ref&&(r.props.ref=r.ref,r.ref=null),nq&&nq(r)};var sDt=typeof Symbol!="undefined"&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function cr(r){function e(t,n){var i=rq({},t);return delete i.ref,r(i,(n=t.ref||n)&&(typeof n!="object"||"current"in n)?n:null)}return e.$$typeof=sDt,e.render=e,e.prototype.isReactComponent=e.__f=!0,e.displayName="ForwardRef("+(r.displayName||r.name)+")",e}var iq=function(r,e){return r==null?null:$c($c(r).map(e))},lDt={map:iq,forEach:iq,count:function(r){return r?$c(r).length:0},only:function(r){var e=$c(r);if(e.length!==1)throw"Children.only";return e[0]},toArray:$c},uDt=Rr.__e;Rr.__e=function(r,e,t){if(r.then){for(var n,i=e;i=i.__;)if((n=i.__c)&&n.__c)return e.__e==null&&(e.__e=t.__e,e.__k=t.__k),n.__c(r,e)}uDt(r,e,t)};var aq=Rr.unmount;function jI(){this.__u=0,this.t=null,this.__b=null}function oq(r){var e=r.__.__c;return e&&e.__e&&e.__e(r)}function fDt(r){var e,t,n;function i(a){if(e||(e=r()).then(function(o){t=o.default||o},function(o){n=o}),n)throw n;if(!t)throw e;return si(t,a)}return i.displayName="Lazy",i.__f=!0,i}function dw(){this.u=null,this.o=null}Rr.unmount=function(r){var e=r.__c;e&&e.__R&&e.__R(),e&&r.__h===!0&&(r.type=null),aq&&aq(r)},(jI.prototype=new Wu).__c=function(r,e){var t=e.__c,n=this;n.t==null&&(n.t=[]),n.t.push(t);var i=oq(n.__v),a=!1,o=function(){a||(a=!0,t.__R=null,i?i(s):s())};t.__R=o;var s=function(){if(!--n.__u){if(n.state.__e){var u=n.state.__e;n.__v.__k[0]=function c(h,d,p){return h&&(h.__v=null,h.__k=h.__k&&h.__k.map(function(v){return c(v,d,p)}),h.__c&&h.__c.__P===d&&(h.__e&&p.insertBefore(h.__e,h.__d),h.__c.__e=!0,h.__c.__P=p)),h}(u,u.__c.__P,u.__c.__O)}var f;for(n.setState({__e:n.__b=null});f=n.t.pop();)f.forceUpdate()}},l=e.__h===!0;n.__u++||l||n.setState({__e:n.__b=n.__v.__k[0]}),r.then(o,o)},jI.prototype.componentWillUnmount=function(){this.t=[]},jI.prototype.render=function(r,e){if(this.__b){if(this.__v.__k){var t=document.createElement("div"),n=this.__v.__k[0].__c;this.__v.__k[0]=function a(o,s,l){return o&&(o.__c&&o.__c.__H&&(o.__c.__H.__.forEach(function(u){typeof u.__c=="function"&&u.__c()}),o.__c.__H=null),(o=rq({},o)).__c!=null&&(o.__c.__P===l&&(o.__c.__P=s),o.__c=null),o.__k=o.__k&&o.__k.map(function(u){return a(u,s,l)})),o}(this.__b,t,n.__O=n.__P)}this.__b=null}var i=e.__e&&si(Ss,null,r.fallback);return i&&(i.__h=null),[si(Ss,null,e.__e?null:r.children),i]};var sq=function(r,e,t){if(++t[1]===t[0]&&r.o.delete(e),r.props.revealOrder&&(r.props.revealOrder[0]!=="t"||!r.o.size))for(t=r.u;t;){for(;t.length>3;)t.pop()();if(t[1]>>1,1),e.i.removeChild(n)}}),sb(si(cDt,{context:e.context},r.__v),e.l)):e.l&&e.componentWillUnmount()}function dDt(r,e){return si(hDt,{__v:r,i:e})}(dw.prototype=new Wu).__e=function(r){var e=this,t=oq(e.__v),n=e.o.get(r);return n[0]++,function(i){var a=function(){e.props.revealOrder?(n.push(i),sq(e,r,n)):i()};t?t(a):a()}},dw.prototype.render=function(r){this.u=null,this.o=new Map;var e=$c(r.children);r.revealOrder&&r.revealOrder[0]==="b"&&e.reverse();for(var t=e.length;t--;)this.o.set(e[t],this.u=[1,0,this.u]);return r.children},dw.prototype.componentDidUpdate=dw.prototype.componentDidMount=function(){var r=this;this.o.forEach(function(e,t){sq(r,t,e)})};var lq=typeof Symbol!="undefined"&&Symbol.for&&Symbol.for("react.element")||60103,pDt=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,vDt=typeof document!="undefined",mDt=function(r){return(typeof Symbol!="undefined"&&typeof Symbol()=="symbol"?/fil|che|rad/i:/fil|che|ra/i).test(r)};function gDt(r,e,t){return e.__k==null&&(e.textContent=""),sb(r,e),typeof t=="function"&&t(),r?r.__c:null}function yDt(r,e,t){return h3(r,e),typeof t=="function"&&t(),r?r.__c:null}Wu.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(r){Object.defineProperty(Wu.prototype,r,{configurable:!0,get:function(){return this["UNSAFE_"+r]},set:function(e){Object.defineProperty(this,r,{configurable:!0,writable:!0,value:e})}})});var uq=Rr.event;function xDt(){}function bDt(){return this.cancelBubble}function _Dt(){return this.defaultPrevented}Rr.event=function(r){return uq&&(r=uq(r)),r.persist=xDt,r.isPropagationStopped=bDt,r.isDefaultPrevented=_Dt,r.nativeEvent=r};var fq,cq={configurable:!0,get:function(){return this.class}},hq=Rr.vnode;Rr.vnode=function(r){var e=r.type,t=r.props,n=t;if(typeof e=="string"){var i=e.indexOf("-")===-1;for(var a in n={},t){var o=t[a];vDt&&a==="children"&&e==="noscript"||a==="value"&&"defaultValue"in t&&o==null||(a==="defaultValue"&&"value"in t&&t.value==null?a="value":a==="download"&&o===!0?o="":/ondoubleclick/i.test(a)?a="ondblclick":/^onchange(textarea|input)/i.test(a+e)&&!mDt(t.type)?a="oninput":/^onfocus$/i.test(a)?a="onfocusin":/^onblur$/i.test(a)?a="onfocusout":/^on(Ani|Tra|Tou|BeforeInp)/.test(a)?a=a.toLowerCase():i&&pDt.test(a)?a=a.replace(/[A-Z0-9]/,"-$&").toLowerCase():o===null&&(o=void 0),n[a]=o)}e=="select"&&n.multiple&&Array.isArray(n.value)&&(n.value=$c(t.children).forEach(function(s){s.props.selected=n.value.indexOf(s.props.value)!=-1})),e=="select"&&n.defaultValue!=null&&(n.value=$c(t.children).forEach(function(s){s.props.selected=n.multiple?n.defaultValue.indexOf(s.props.value)!=-1:n.defaultValue==s.props.value})),r.props=n,t.class!=t.className&&(cq.enumerable="className"in t,t.className!=null&&(n.class=t.className),Object.defineProperty(n,"className",cq))}r.$$typeof=lq,hq&&hq(r)};var dq=Rr.__r;Rr.__r=function(r){dq&&dq(r),fq=r.__c};var SDt={ReactCurrentDispatcher:{current:{readContext:function(r){return fq.__n[r.__c].props.value}}}};function CDt(r){return si.bind(null,r)}function pq(r){return!!r&&r.$$typeof===lq}function wDt(r){return pq(r)?H7.apply(null,arguments):r}function EDt(r){return!!r.__k&&(sb(null,r),!0)}function ADt(r){return r&&(r.base||r.nodeType===1&&r)||null}var MDt=function(r,e){return r(e)},TDt=function(r,e){return r(e)};var ht={useState:BI,useReducer:v3,useEffect:ke,useLayoutEffect:m3,useRef:Na,useImperativeHandle:ur,useMemo:GI,useCallback:zI,useContext:Q7,useDebugValue:J7,version:"17.0.2",Children:lDt,render:gDt,hydrate:yDt,unmountComponentAtNode:EDt,createPortal:dDt,createElement:si,createContext:d3,createFactory:CDt,cloneElement:wDt,createRef:u3,Fragment:Ss,isValidElement:pq,findDOMNode:ADt,Component:Wu,PureComponent:b3,memo:oDt,forwardRef:cr,flushSync:TDt,unstable_batchedUpdates:MDt,StrictMode:Ss,Suspense:jI,SuspenseList:dw,lazy:fDt,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:SDt};var wF=U(require("obsidian"));var KE={};Dn(KE,{Action:()=>Tr,BRUSH_FILTER_EVENTS:()=>ls,Chart:()=>gE,ComponentController:()=>Fl,Coordinate:()=>ch,DIRECTION:()=>xe,ELEMENT_RANGE_HIGHLIGHT_EVENTS:()=>rf,Element:()=>t1,Event:()=>zn,Facet:()=>Hs,Geometry:()=>Uo,GeometryLabel:()=>Sh,Interaction:()=>cE,InteractionAction:()=>Tr,LAYER:()=>di,Scale:()=>Xu,TooltipController:()=>Qb,Util:()=>ea,VERSION:()=>i6t,VIEW_LIFE_CIRCLE:()=>wr,View:()=>mE,getActionClass:()=>ec,getAnimation:()=>yE,getEngine:()=>JI,getFacet:()=>AL,getGeometryLabel:()=>UL,getGeometryLabelLayout:()=>jL,getInteraction:()=>hU,getShapeFactory:()=>xE,getTheme:()=>$u,registerAction:()=>nr,registerAnimation:()=>Es,registerComponentController:()=>Qu,registerEngine:()=>gw,registerFacet:()=>up,registerGeometry:()=>Nl,registerGeometryLabel:()=>mp,registerGeometryLabelLayout:()=>ss,registerInteraction:()=>xr,registerShape:()=>or,registerShapeFactory:()=>zo,registerTheme:()=>r0});var Rq=U(pw()),{__extends:H,__assign:E,__rest:rr,__decorate:Gme,__param:zme,__metadata:Ume,__awaiter:Yf,__generator:Xf,__exportStar:jme,__createBinding:Wme,__values:Vme,__read:Hme,__spread:Yme,__spreadArrays:dn,__spreadArray:mn,__await:Xme,__asyncGenerator:qme,__asyncDelegator:Kme,__asyncValues:Zme,__makeTemplateObject:$me,__importStar:Qme,__importDefault:Jme,__classPrivateFieldGet:tge,__classPrivateFieldSet:ege}=Rq.default;var $b=U(q());var di;(function(r){r.FORE="fore",r.MID="mid",r.BG="bg"})(di||(di={}));var xe;(function(r){r.TOP="top",r.TOP_LEFT="top-left",r.TOP_RIGHT="top-right",r.RIGHT="right",r.RIGHT_TOP="right-top",r.RIGHT_BOTTOM="right-bottom",r.LEFT="left",r.LEFT_TOP="left-top",r.LEFT_BOTTOM="left-bottom",r.BOTTOM="bottom",r.BOTTOM_LEFT="bottom-left",r.BOTTOM_RIGHT="bottom-right",r.RADIUS="radius",r.CIRCLE="circle",r.NONE="none"})(xe||(xe={}));var la;(function(r){r.AXIS="axis",r.GRID="grid",r.LEGEND="legend",r.TOOLTIP="tooltip",r.ANNOTATION="annotation",r.SLIDER="slider",r.SCROLLBAR="scrollbar",r.OTHER="other"})(la||(la={}));var zv={FORE:3,MID:2,BG:1},wr;(function(r){r.BEFORE_RENDER="beforerender",r.AFTER_RENDER="afterrender",r.BEFORE_PAINT="beforepaint",r.AFTER_PAINT="afterpaint",r.BEFORE_CHANGE_DATA="beforechangedata",r.AFTER_CHANGE_DATA="afterchangedata",r.BEFORE_CLEAR="beforeclear",r.AFTER_CLEAR="afterclear",r.BEFORE_DESTROY="beforedestroy",r.BEFORE_CHANGE_SIZE="beforechangesize",r.AFTER_CHANGE_SIZE="afterchangesize"})(wr||(wr={}));var Uv;(function(r){r.BEFORE_DRAW_ANIMATE="beforeanimate",r.AFTER_DRAW_ANIMATE="afteranimate"})(Uv||(Uv={}));var js;(function(r){r.MOUSE_ENTER="plot:mouseenter",r.MOUSE_DOWN="plot:mousedown",r.MOUSE_MOVE="plot:mousemove",r.MOUSE_UP="plot:mouseup",r.MOUSE_LEAVE="plot:mouseleave",r.TOUCH_START="plot:touchstart",r.TOUCH_MOVE="plot:touchmove",r.TOUCH_END="plot:touchend",r.TOUCH_CANCEL="plot:touchcancel",r.CLICK="plot:click",r.DBLCLICK="plot:dblclick",r.CONTEXTMENU="plot:contextmenu",r.LEAVE="plot:leave",r.ENTER="plot:enter"})(js||(js={}));var mw;(function(r){r.ACTIVE="active",r.INACTIVE="inactive",r.SELECTED="selected",r.DEFAULT="default"})(mw||(mw={}));var Ty=["color","shape","size"],Tn="_origin",V5=1,H5=1,Y5=.25;var gZ={};function JI(r){var e=gZ[r];if(!e)throw new Error("G engine '".concat(r,"' is not exist, please register it at first."));return e}function gw(r,e){gZ[r]=e}function Ws(r,e,t){if(r){if(typeof r.addEventListener=="function")return r.addEventListener(e,t,!1),{remove:function(){r.removeEventListener(e,t,!1)}};if(typeof r.attachEvent=="function")return r.attachEvent("on"+e,t),{remove:function(){r.detachEvent("on"+e,t)}}}}var yw,X5,yZ,q5;function gBt(){yw=document.createElement("table"),X5=document.createElement("tr"),yZ=/^\s*<(\w+|!)[^>]*>/,q5={tr:document.createElement("tbody"),tbody:yw,thead:yw,tfoot:yw,td:X5,th:X5,"*":document.createElement("div")}}function en(r){yw||gBt();var e=yZ.test(r)&&RegExp.$1;(!e||!(e in q5))&&(e="*");var t=q5[e];r=r.replace(/(^\s*)|(\s*$)/g,""),t.innerHTML=""+r;var n=t.childNodes[0];return t.removeChild(n),n}function io(r,e,t){var n;try{n=window.getComputedStyle?window.getComputedStyle(r,null)[e]:r.style[e]}catch(i){}finally{n=n===void 0?t:n}return n}function t2(r,e){var t=io(r,"height",e);return t==="auto"&&(t=r.offsetHeight),parseFloat(t)}function e2(r,e){var t=t2(r,e),n=parseFloat(io(r,"borderTopWidth"))||0,i=parseFloat(io(r,"paddingTop"))||0,a=parseFloat(io(r,"paddingBottom"))||0,o=parseFloat(io(r,"borderBottomWidth"))||0,s=parseFloat(io(r,"marginTop"))||0,l=parseFloat(io(r,"marginBottom"))||0;return t+n+o+i+a+s+l}function r2(r,e){var t=io(r,"width",e);return t==="auto"&&(t=r.offsetWidth),parseFloat(t)}function n2(r,e){var t=r2(r,e),n=parseFloat(io(r,"borderLeftWidth"))||0,i=parseFloat(io(r,"paddingLeft"))||0,a=parseFloat(io(r,"paddingRight"))||0,o=parseFloat(io(r,"borderRightWidth"))||0,s=parseFloat(io(r,"marginRight"))||0,l=parseFloat(io(r,"marginLeft"))||0;return t+n+o+i+a+l+s}function yr(r,e){if(r)for(var t in e)e.hasOwnProperty(t)&&(r.style[t]=e[t]);return r}function yBt(r){var e=getComputedStyle(r);return{width:(r.clientWidth||parseInt(e.width,10))-parseInt(e.paddingLeft,10)-parseInt(e.paddingRight,10),height:(r.clientHeight||parseInt(e.height,10))-parseInt(e.paddingTop,10)-parseInt(e.paddingBottom,10)}}function xZ(r){return typeof r=="number"&&!isNaN(r)}function K5(r,e,t,n){var i=t,a=n;if(e){var o=yBt(r);i=o.width?o.width:i,a=o.height?o.height:a}return{width:Math.max(xZ(i)?i:V5,V5),height:Math.max(xZ(a)?a:H5,H5)}}function bZ(r){var e=r.parentNode;e&&e.removeChild(r)}var Qe=U(q());var xBt="*",bBt=function(){function r(){this._events={}}return r.prototype.on=function(e,t,n){return this._events[e]||(this._events[e]=[]),this._events[e].push({callback:t,once:!!n}),this},r.prototype.once=function(e,t){return this.on(e,t,!0),this},r.prototype.emit=function(e){for(var t=this,n=[],i=1;iZ5,fillPath:()=>kBt,fillPathByDiff:()=>t4,formatPath:()=>o2,intersection:()=>LBt,parsePathArray:()=>CZ,parsePathString:()=>Iy,pathToAbsolute:()=>$5,pathToCurve:()=>Q5,rectPath:()=>AZ});var xw=U(q()),bw=` +\v\f\r \xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029`,SBt=new RegExp("([a-z])["+bw+",]*((-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?["+bw+"]*,?["+bw+"]*)+)","ig"),CBt=new RegExp("(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)["+bw+"]*,?["+bw+"]*","ig"),Iy=function(r){if(!r)return null;if((0,xw.isArray)(r))return r;var e={a:7,c:6,o:2,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,u:3,z:0},t=[];return String(r).replace(SBt,function(n,i,a){var o=[],s=i.toLowerCase();if(a.replace(CBt,function(l,u){u&&o.push(+u)}),s==="m"&&o.length>2&&(t.push([i].concat(o.splice(0,2))),s="l",i=i==="m"?"l":"L"),s==="o"&&o.length===1&&t.push([i,o[0]]),s==="r")t.push([i].concat(o));else for(;o.length>=e[s]&&(t.push([i].concat(o.splice(0,e[s]))),!!e[s]););return r}),t},Z5=function(r,e){for(var t=[],n=0,i=r.length;i-2*!e>n;n+=2){var a=[{x:+r[n-2],y:+r[n-1]},{x:+r[n],y:+r[n+1]},{x:+r[n+2],y:+r[n+3]},{x:+r[n+4],y:+r[n+5]}];e?n?i-4===n?a[3]={x:+r[0],y:+r[1]}:i-2===n&&(a[2]={x:+r[0],y:+r[1]},a[3]={x:+r[2],y:+r[3]}):a[0]={x:+r[i-2],y:+r[i-1]}:i-4===n?a[3]=a[2]:n||(a[0]={x:+r[n],y:+r[n+1]}),t.push(["C",(-a[0].x+6*a[1].x+a[2].x)/6,(-a[0].y+6*a[1].y+a[2].y)/6,(a[1].x+6*a[2].x-a[3].x)/6,(a[1].y+6*a[2].y-a[3].y)/6,a[2].x,a[2].y])}return t},i2=function(r,e,t,n,i){var a=[];if(i===null&&n===null&&(n=t),r=+r,e=+e,t=+t,n=+n,i!==null){var o=Math.PI/180,s=r+t*Math.cos(-n*o),l=r+t*Math.cos(-i*o),u=e+t*Math.sin(-n*o),f=e+t*Math.sin(-i*o);a=[["M",s,u],["A",t,t,0,+(i-n>180),0,l,f]]}else a=[["M",r,e],["m",0,-n],["a",t,n,0,1,1,0,2*n],["a",t,n,0,1,1,0,-2*n],["z"]];return a},$5=function(r){if(r=Iy(r),!r||!r.length)return[["M",0,0]];var e=[],t=0,n=0,i=0,a=0,o=0,s,l;r[0][0]==="M"&&(t=+r[0][1],n=+r[0][2],i=t,a=n,o++,e[0]=["M",t,n]);for(var u=r.length===3&&r[0][0]==="M"&&r[1][0].toUpperCase()==="R"&&r[2][0].toUpperCase()==="Z",f=void 0,c=void 0,h=o,d=r.length;h1&&(C=Math.sqrt(C),t=C*t,n=C*n);var w=t*t,A=n*n,I=(a===o?-1:1)*Math.sqrt(Math.abs((w*A-w*S*S-A*b*b)/(w*S*S+A*b*b)));m=I*t*S/n+(r+s)/2,g=I*-n*b/t+(e+l)/2,p=Math.asin(((e-g)/n).toFixed(9)),v=Math.asin(((l-g)/n).toFixed(9)),p=rv&&(p=p-Math.PI*2),!o&&v>p&&(v=v-Math.PI*2)}var P=v-p;if(Math.abs(P)>f){var L=v,M=s,O=l;v=p+f*(o&&v>p?1:-1),s=m+t*Math.cos(v),l=g+n*Math.sin(v),h=SZ(s,l,t,n,i,0,o,M,O,[v,L,m,g])}P=v-p;var F=Math.cos(p),k=Math.sin(p),G=Math.cos(v),D=Math.sin(v),N=Math.tan(P/4),z=4/3*t*N,j=4/3*n*N,W=[r,e],J=[r+z*k,e-j*F],et=[s+z*D,l-j*G],lt=[s,l];if(J[0]=2*W[0]-J[0],J[1]=2*W[1]-J[1],u)return[J,et,lt].concat(h);h=[J,et,lt].concat(h).join().split(",");for(var $=[],st=0,_t=h.length;st<_t;st++)$[st]=st%2?x(h[st-1],h[st],c).y:x(h[st],h[st+1],c).x;return $},Q5=function(r,e){var t=$5(r),n=e&&$5(e),i={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},a={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},o=[],s=[],l="",u="",f,c=function(b,S,C){var w,A;if(!b)return["C",S.x,S.y,S.x,S.y,S.x,S.y];switch(!(b[0]in{T:1,Q:1})&&(S.qx=S.qy=null),b[0]){case"M":S.X=b[1],S.Y=b[2];break;case"A":b=["C"].concat(SZ.apply(0,[S.x,S.y].concat(b.slice(1))));break;case"S":C==="C"||C==="S"?(w=S.x*2-S.bx,A=S.y*2-S.by):(w=S.x,A=S.y),b=["C",w,A].concat(b.slice(1));break;case"T":C==="Q"||C==="T"?(S.qx=S.x*2-S.qx,S.qy=S.y*2-S.qy):(S.qx=S.x,S.qy=S.y),b=["C"].concat(_Z(S.x,S.y,S.qx,S.qy,b[1],b[2]));break;case"Q":S.qx=b[1],S.qy=b[2],b=["C"].concat(_Z(S.x,S.y,b[1],b[2],b[3],b[4]));break;case"L":b=["C"].concat(a2(S.x,S.y,b[1],b[2]));break;case"H":b=["C"].concat(a2(S.x,S.y,b[1],S.y));break;case"V":b=["C"].concat(a2(S.x,S.y,S.x,b[1]));break;case"Z":b=["C"].concat(a2(S.x,S.y,S.X,S.Y));break;default:break}return b},h=function(b,S){if(b[S].length>7){b[S].shift();for(var C=b[S];C.length;)o[S]="A",n&&(s[S]="A"),b.splice(S++,0,["C"].concat(C.splice(0,6)));b.splice(S,1),f=Math.max(t.length,n&&n.length||0)}},d=function(b,S,C,w,A){b&&S&&b[A][0]==="M"&&S[A][0]!=="M"&&(S.splice(A,0,["M",w.x,w.y]),C.bx=0,C.by=0,C.x=b[A][1],C.y=b[A][2],f=Math.max(t.length,n&&n.length||0))};f=Math.max(t.length,n&&n.length||0);for(var p=0;p1?1:l<0?0:l;for(var u=l/2,f=12,c=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],h=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],d=0,p=0;p0&&d<1&&l.push(d);continue}var v=c*c-4*h*f,m=Math.sqrt(v);if(!(v<0)){var g=(-c+m)/(2*f);g>0&&g<1&&l.push(g);var x=(-c-m)/(2*f);x>0&&x<1&&l.push(x)}}for(var b=l.length,S=b,C;b--;)d=l[b],C=1-d,u[0][b]=C*C*C*r+3*C*C*d*t+3*C*d*d*i+d*d*d*o,u[1][b]=C*C*C*e+3*C*C*d*n+3*C*d*d*a+d*d*d*s;return u[0][S]=r,u[1][S]=e,u[0][S+1]=o,u[1][S+1]=s,u[0].length=u[1].length=S+2,{min:{x:Math.min.apply(0,u[0]),y:Math.min.apply(0,u[1])},max:{x:Math.max.apply(0,u[0]),y:Math.max.apply(0,u[1])}}},ABt=function(r,e,t,n,i,a,o,s){if(!(Math.max(r,t)Math.max(i,o)||Math.max(e,n)Math.max(a,s))){var l=(r*n-e*t)*(i-o)-(r-t)*(i*s-a*o),u=(r*n-e*t)*(a-s)-(e-n)*(i*s-a*o),f=(r-t)*(a-s)-(e-n)*(i-o);if(!!f){var c=l/f,h=u/f,d=+c.toFixed(2),p=+h.toFixed(2);if(!(d<+Math.min(r,t).toFixed(2)||d>+Math.max(r,t).toFixed(2)||d<+Math.min(i,o).toFixed(2)||d>+Math.max(i,o).toFixed(2)||p<+Math.min(e,n).toFixed(2)||p>+Math.max(e,n).toFixed(2)||p<+Math.min(a,s).toFixed(2)||p>+Math.max(a,s).toFixed(2)))return{x:c,y:h}}}},Wv=function(r,e,t){return e>=r.x&&e<=r.x+r.width&&t>=r.y&&t<=r.y+r.height},AZ=function(r,e,t,n,i){if(i)return[["M",+r+ +i,e],["l",t-i*2,0],["a",i,i,0,0,1,i,i],["l",0,n-i*2],["a",i,i,0,0,1,-i,i],["l",i*2-t,0],["a",i,i,0,0,1,-i,-i],["l",0,i*2-n],["a",i,i,0,0,1,i,-i],["z"]];var a=[["M",r,e],["l",t,0],["l",0,n],["l",-t,0],["z"]];return a.parsePathArray=CZ,a},J5=function(r,e,t,n){return r===null&&(r=e=t=n=0),e===null&&(e=r.y,t=r.width,n=r.height,r=r.x),{x:r,y:e,width:t,w:t,height:n,h:n,x2:r+t,y2:e+n,cx:r+t/2,cy:e+n/2,r1:Math.min(t,n)/2,r2:Math.max(t,n)/2,r0:Math.sqrt(t*t+n*n)/2,path:AZ(r,e,t,n),vb:[r,e,t,n].join(" ")}},MBt=function(r,e){return r=J5(r),e=J5(e),Wv(e,r.x,r.y)||Wv(e,r.x2,r.y)||Wv(e,r.x,r.y2)||Wv(e,r.x2,r.y2)||Wv(r,e.x,e.y)||Wv(r,e.x2,e.y)||Wv(r,e.x,e.y2)||Wv(r,e.x2,e.y2)||(r.xe.x||e.xr.x)&&(r.ye.y||e.yr.y)},MZ=function(r,e,t,n,i,a,o,s){(0,xw.isArray)(r)||(r=[r,e,t,n,i,a,o,s]);var l=EBt.apply(null,r);return J5(l.min.x,l.min.y,l.max.x-l.min.x,l.max.y-l.min.y)},TZ=function(r,e,t,n,i,a,o,s,l){var u=1-l,f=Math.pow(u,3),c=Math.pow(u,2),h=l*l,d=h*l,p=f*r+c*3*l*t+u*3*l*l*i+d*o,v=f*e+c*3*l*n+u*3*l*l*a+d*s,m=r+2*l*(t-r)+h*(i-2*t+r),g=e+2*l*(n-e)+h*(a-2*n+e),x=t+2*l*(i-t)+h*(o-2*i+t),b=n+2*l*(a-n)+h*(s-2*a+n),S=u*r+l*t,C=u*e+l*n,w=u*i+l*o,A=u*a+l*s,I=90-Math.atan2(m-x,g-b)*180/Math.PI;return{x:p,y:v,m:{x:m,y:g},n:{x,y:b},start:{x:S,y:C},end:{x:w,y:A},alpha:I}},TBt=function(r,e,t){var n=MZ(r),i=MZ(e);if(!MBt(n,i))return t?0:[];for(var a=EZ.apply(0,r),o=EZ.apply(0,e),s=~~(a/8),l=~~(o/8),u=[],f=[],c={},h=t?0:[],d=0;d=0&&A<=1&&I>=0&&I<=1&&(t?h+=1:h.push({x:w.x,y:w.y,t1:A,t2:I}))}}return h},IBt=function(r,e,t){r=Q5(r),e=Q5(e);for(var n,i,a,o,s,l,u,f,c,h,d=t?0:[],p=0,v=r.length;p=3&&(c.length===3&&h.push("Q"),h=h.concat(c[1])),c.length===2&&h.push("L"),h=h.concat(c[c.length-1]),h});return f}var PBt=function(r,e,t){if(t===1)return[[].concat(r)];var n=[];if(e[0]==="L"||e[0]==="C"||e[0]==="Q")n=n.concat(DBt(r,e,t));else{var i=[].concat(r);i[0]==="M"&&(i[0]="L");for(var a=0;a<=t-1;a++)n.push(i)}return n},kBt=function(r,e){if(r.length===1)return r;var t=r.length-1,n=e.length-1,i=t/n,a=[];if(r.length===1&&r[0][0]==="M"){for(var o=0;o=0;l--)o=a[l].index,a[l].type==="add"?r.splice(o,0,[].concat(r[o])):r.splice(o,1)}n=r.length;var c=i-n;if(n0)t=e4(t,r[n-1],1);else{r[n]=e[n];break}r[n]=["Q"].concat(t.reduce(function(i,a){return i.concat(a)},[]));break;case"T":r[n]=["T"].concat(t[0]);break;case"C":if(t.length<3)if(n>0)t=e4(t,r[n-1],2);else{r[n]=e[n];break}r[n]=["C"].concat(t.reduce(function(i,a){return i.concat(a)},[]));break;case"S":if(t.length<2)if(n>0)t=e4(t,r[n-1],1);else{r[n]=e[n];break}r[n]=["S"].concat(t.reduce(function(i,a){return i.concat(a)},[]));break;default:r[n]=e[n]}return r};var BBt=function(){function r(e,t){this.bubbles=!0,this.target=null,this.currentTarget=null,this.delegateTarget=null,this.delegateObject=null,this.defaultPrevented=!1,this.propagationStopped=!1,this.shape=null,this.fromShape=null,this.toShape=null,this.propagationPath=[],this.type=e,this.name=e,this.originalEvent=t,this.timeStamp=t.timeStamp}return r.prototype.preventDefault=function(){this.defaultPrevented=!0,this.originalEvent.preventDefault&&this.originalEvent.preventDefault()},r.prototype.stopPropagation=function(){this.propagationStopped=!0},r.prototype.toString=function(){var e=this.type;return"[Event (type="+e+")]"},r.prototype.save=function(){},r.prototype.restore=function(){},r}(),Hu=BBt;var Gn=U(q());function s2(r,e){var t=r.indexOf(e);t!==-1&&r.splice(t,1)}var r4=typeof window!="undefined"&&typeof window.document!="undefined";function l2(r,e){if(r.isCanvas())return!0;for(var t=e.getParent(),n=!1;t;){if(t===r){n=!0;break}t=t.getParent()}return n}function Vv(r){return r.cfg.visible&&r.cfg.capture}var GBt=function(r){H(e,r);function e(t){var n=r.call(this)||this;n.destroyed=!1;var i=n.getDefaultCfg();return n.cfg=(0,Gn.mix)(i,t),n}return e.prototype.getDefaultCfg=function(){return{}},e.prototype.get=function(t){return this.cfg[t]},e.prototype.set=function(t,n){this.cfg[t]=n},e.prototype.destroy=function(){this.cfg={destroyed:!0},this.off(),this.destroyed=!0},e}(jv),Ly=GBt;var LZ=function(r,e,t){if(t||arguments.length===2)for(var n=0,i=e.length,a;nb3t,adjoint:()=>o3t,clone:()=>JBt,copy:()=>t3t,create:()=>n4,determinant:()=>s3t,equals:()=>w3t,exactEquals:()=>C3t,frob:()=>x3t,fromMat2d:()=>p3t,fromMat4:()=>QBt,fromQuat:()=>v3t,fromRotation:()=>h3t,fromScaling:()=>d3t,fromTranslation:()=>c3t,fromValues:()=>e3t,identity:()=>n3t,invert:()=>a3t,mul:()=>E3t,multiply:()=>kZ,multiplyScalar:()=>_3t,multiplyScalarAndAdd:()=>S3t,normalFromMat4:()=>m3t,projection:()=>g3t,rotate:()=>u3t,scale:()=>f3t,set:()=>r3t,str:()=>y3t,sub:()=>A3t,subtract:()=>RZ,translate:()=>l3t,transpose:()=>i3t});function n4(){var r=new Ei(9);return Ei!=Float32Array&&(r[1]=0,r[2]=0,r[3]=0,r[5]=0,r[6]=0,r[7]=0),r[0]=1,r[4]=1,r[8]=1,r}function QBt(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[4],r[4]=e[5],r[5]=e[6],r[6]=e[8],r[7]=e[9],r[8]=e[10],r}function JBt(r){var e=new Ei(9);return e[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],e[4]=r[4],e[5]=r[5],e[6]=r[6],e[7]=r[7],e[8]=r[8],e}function t3t(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4],r[5]=e[5],r[6]=e[6],r[7]=e[7],r[8]=e[8],r}function e3t(r,e,t,n,i,a,o,s,l){var u=new Ei(9);return u[0]=r,u[1]=e,u[2]=t,u[3]=n,u[4]=i,u[5]=a,u[6]=o,u[7]=s,u[8]=l,u}function r3t(r,e,t,n,i,a,o,s,l,u){return r[0]=e,r[1]=t,r[2]=n,r[3]=i,r[4]=a,r[5]=o,r[6]=s,r[7]=l,r[8]=u,r}function n3t(r){return r[0]=1,r[1]=0,r[2]=0,r[3]=0,r[4]=1,r[5]=0,r[6]=0,r[7]=0,r[8]=1,r}function i3t(r,e){if(r===e){var t=e[1],n=e[2],i=e[5];r[1]=e[3],r[2]=e[6],r[3]=t,r[5]=e[7],r[6]=n,r[7]=i}else r[0]=e[0],r[1]=e[3],r[2]=e[6],r[3]=e[1],r[4]=e[4],r[5]=e[7],r[6]=e[2],r[7]=e[5],r[8]=e[8];return r}function a3t(r,e){var t=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],f=e[8],c=f*o-s*u,h=-f*a+s*l,d=u*a-o*l,p=t*c+n*h+i*d;return p?(p=1/p,r[0]=c*p,r[1]=(-f*n+i*u)*p,r[2]=(s*n-i*o)*p,r[3]=h*p,r[4]=(f*t-i*l)*p,r[5]=(-s*t+i*a)*p,r[6]=d*p,r[7]=(-u*t+n*l)*p,r[8]=(o*t-n*a)*p,r):null}function o3t(r,e){var t=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],f=e[8];return r[0]=o*f-s*u,r[1]=i*u-n*f,r[2]=n*s-i*o,r[3]=s*l-a*f,r[4]=t*f-i*l,r[5]=i*a-t*s,r[6]=a*u-o*l,r[7]=n*l-t*u,r[8]=t*o-n*a,r}function s3t(r){var e=r[0],t=r[1],n=r[2],i=r[3],a=r[4],o=r[5],s=r[6],l=r[7],u=r[8];return e*(u*a-o*l)+t*(-u*i+o*s)+n*(l*i-a*s)}function kZ(r,e,t){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],f=e[7],c=e[8],h=t[0],d=t[1],p=t[2],v=t[3],m=t[4],g=t[5],x=t[6],b=t[7],S=t[8];return r[0]=h*n+d*o+p*u,r[1]=h*i+d*s+p*f,r[2]=h*a+d*l+p*c,r[3]=v*n+m*o+g*u,r[4]=v*i+m*s+g*f,r[5]=v*a+m*l+g*c,r[6]=x*n+b*o+S*u,r[7]=x*i+b*s+S*f,r[8]=x*a+b*l+S*c,r}function l3t(r,e,t){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],f=e[7],c=e[8],h=t[0],d=t[1];return r[0]=n,r[1]=i,r[2]=a,r[3]=o,r[4]=s,r[5]=l,r[6]=h*n+d*o+u,r[7]=h*i+d*s+f,r[8]=h*a+d*l+c,r}function u3t(r,e,t){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],f=e[7],c=e[8],h=Math.sin(t),d=Math.cos(t);return r[0]=d*n+h*o,r[1]=d*i+h*s,r[2]=d*a+h*l,r[3]=d*o-h*n,r[4]=d*s-h*i,r[5]=d*l-h*a,r[6]=u,r[7]=f,r[8]=c,r}function f3t(r,e,t){var n=t[0],i=t[1];return r[0]=n*e[0],r[1]=n*e[1],r[2]=n*e[2],r[3]=i*e[3],r[4]=i*e[4],r[5]=i*e[5],r[6]=e[6],r[7]=e[7],r[8]=e[8],r}function c3t(r,e){return r[0]=1,r[1]=0,r[2]=0,r[3]=0,r[4]=1,r[5]=0,r[6]=e[0],r[7]=e[1],r[8]=1,r}function h3t(r,e){var t=Math.sin(e),n=Math.cos(e);return r[0]=n,r[1]=t,r[2]=0,r[3]=-t,r[4]=n,r[5]=0,r[6]=0,r[7]=0,r[8]=1,r}function d3t(r,e){return r[0]=e[0],r[1]=0,r[2]=0,r[3]=0,r[4]=e[1],r[5]=0,r[6]=0,r[7]=0,r[8]=1,r}function p3t(r,e){return r[0]=e[0],r[1]=e[1],r[2]=0,r[3]=e[2],r[4]=e[3],r[5]=0,r[6]=e[4],r[7]=e[5],r[8]=1,r}function v3t(r,e){var t=e[0],n=e[1],i=e[2],a=e[3],o=t+t,s=n+n,l=i+i,u=t*o,f=n*o,c=n*s,h=i*o,d=i*s,p=i*l,v=a*o,m=a*s,g=a*l;return r[0]=1-c-p,r[3]=f-g,r[6]=h+m,r[1]=f+g,r[4]=1-u-p,r[7]=d-v,r[2]=h-m,r[5]=d+v,r[8]=1-u-c,r}function m3t(r,e){var t=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],f=e[8],c=e[9],h=e[10],d=e[11],p=e[12],v=e[13],m=e[14],g=e[15],x=t*s-n*o,b=t*l-i*o,S=t*u-a*o,C=n*l-i*s,w=n*u-a*s,A=i*u-a*l,I=f*v-c*p,P=f*m-h*p,L=f*g-d*p,M=c*m-h*v,O=c*g-d*v,F=h*g-d*m,k=x*F-b*O+S*M+C*L-w*P+A*I;return k?(k=1/k,r[0]=(s*F-l*O+u*M)*k,r[1]=(l*L-o*F-u*P)*k,r[2]=(o*O-s*L+u*I)*k,r[3]=(i*O-n*F-a*M)*k,r[4]=(t*F-i*L+a*P)*k,r[5]=(n*L-t*O-a*I)*k,r[6]=(v*A-m*w+g*C)*k,r[7]=(m*S-p*A-g*b)*k,r[8]=(p*w-v*S+g*x)*k,r):null}function g3t(r,e,t){return r[0]=2/e,r[1]=0,r[2]=0,r[3]=0,r[4]=-2/t,r[5]=0,r[6]=-1,r[7]=1,r[8]=1,r}function y3t(r){return"mat3("+r[0]+", "+r[1]+", "+r[2]+", "+r[3]+", "+r[4]+", "+r[5]+", "+r[6]+", "+r[7]+", "+r[8]+")"}function x3t(r){return Math.hypot(r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8])}function b3t(r,e,t){return r[0]=e[0]+t[0],r[1]=e[1]+t[1],r[2]=e[2]+t[2],r[3]=e[3]+t[3],r[4]=e[4]+t[4],r[5]=e[5]+t[5],r[6]=e[6]+t[6],r[7]=e[7]+t[7],r[8]=e[8]+t[8],r}function RZ(r,e,t){return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r[2]=e[2]-t[2],r[3]=e[3]-t[3],r[4]=e[4]-t[4],r[5]=e[5]-t[5],r[6]=e[6]-t[6],r[7]=e[7]-t[7],r[8]=e[8]-t[8],r}function _3t(r,e,t){return r[0]=e[0]*t,r[1]=e[1]*t,r[2]=e[2]*t,r[3]=e[3]*t,r[4]=e[4]*t,r[5]=e[5]*t,r[6]=e[6]*t,r[7]=e[7]*t,r[8]=e[8]*t,r}function S3t(r,e,t,n){return r[0]=e[0]+t[0]*n,r[1]=e[1]+t[1]*n,r[2]=e[2]+t[2]*n,r[3]=e[3]+t[3]*n,r[4]=e[4]+t[4]*n,r[5]=e[5]+t[5]*n,r[6]=e[6]+t[6]*n,r[7]=e[7]+t[7]*n,r[8]=e[8]+t[8]*n,r}function C3t(r,e){return r[0]===e[0]&&r[1]===e[1]&&r[2]===e[2]&&r[3]===e[3]&&r[4]===e[4]&&r[5]===e[5]&&r[6]===e[6]&&r[7]===e[7]&&r[8]===e[8]}function w3t(r,e){var t=r[0],n=r[1],i=r[2],a=r[3],o=r[4],s=r[5],l=r[6],u=r[7],f=r[8],c=e[0],h=e[1],d=e[2],p=e[3],v=e[4],m=e[5],g=e[6],x=e[7],b=e[8];return Math.abs(t-c)<=pn*Math.max(1,Math.abs(t),Math.abs(c))&&Math.abs(n-h)<=pn*Math.max(1,Math.abs(n),Math.abs(h))&&Math.abs(i-d)<=pn*Math.max(1,Math.abs(i),Math.abs(d))&&Math.abs(a-p)<=pn*Math.max(1,Math.abs(a),Math.abs(p))&&Math.abs(o-v)<=pn*Math.max(1,Math.abs(o),Math.abs(v))&&Math.abs(s-m)<=pn*Math.max(1,Math.abs(s),Math.abs(m))&&Math.abs(l-g)<=pn*Math.max(1,Math.abs(l),Math.abs(g))&&Math.abs(u-x)<=pn*Math.max(1,Math.abs(u),Math.abs(x))&&Math.abs(f-b)<=pn*Math.max(1,Math.abs(f),Math.abs(b))}var E3t=kZ,A3t=RZ;var _r={};Dn(_r,{add:()=>fGt,adjoint:()=>k3t,clone:()=>T3t,copy:()=>I3t,create:()=>M3t,determinant:()=>R3t,equals:()=>pGt,exactEquals:()=>dGt,frob:()=>uGt,fromQuat:()=>J3t,fromQuat2:()=>q3t,fromRotation:()=>V3t,fromRotationTranslation:()=>BZ,fromRotationTranslationScale:()=>$3t,fromRotationTranslationScaleOrigin:()=>Q3t,fromScaling:()=>W3t,fromTranslation:()=>j3t,fromValues:()=>L3t,fromXRotation:()=>H3t,fromYRotation:()=>Y3t,fromZRotation:()=>X3t,frustum:()=>tGt,getRotation:()=>Z3t,getScaling:()=>GZ,getTranslation:()=>K3t,identity:()=>NZ,invert:()=>P3t,lookAt:()=>oGt,mul:()=>vGt,multiply:()=>FZ,multiplyScalar:()=>cGt,multiplyScalarAndAdd:()=>hGt,ortho:()=>iGt,orthoNO:()=>UZ,orthoZO:()=>aGt,perspective:()=>eGt,perspectiveFromFieldOfView:()=>nGt,perspectiveNO:()=>zZ,perspectiveZO:()=>rGt,rotate:()=>B3t,rotateX:()=>G3t,rotateY:()=>z3t,rotateZ:()=>U3t,scale:()=>F3t,set:()=>O3t,str:()=>lGt,sub:()=>mGt,subtract:()=>jZ,targetTo:()=>sGt,translate:()=>N3t,transpose:()=>D3t});function M3t(){var r=new Ei(16);return Ei!=Float32Array&&(r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[6]=0,r[7]=0,r[8]=0,r[9]=0,r[11]=0,r[12]=0,r[13]=0,r[14]=0),r[0]=1,r[5]=1,r[10]=1,r[15]=1,r}function T3t(r){var e=new Ei(16);return e[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],e[4]=r[4],e[5]=r[5],e[6]=r[6],e[7]=r[7],e[8]=r[8],e[9]=r[9],e[10]=r[10],e[11]=r[11],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15],e}function I3t(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4],r[5]=e[5],r[6]=e[6],r[7]=e[7],r[8]=e[8],r[9]=e[9],r[10]=e[10],r[11]=e[11],r[12]=e[12],r[13]=e[13],r[14]=e[14],r[15]=e[15],r}function L3t(r,e,t,n,i,a,o,s,l,u,f,c,h,d,p,v){var m=new Ei(16);return m[0]=r,m[1]=e,m[2]=t,m[3]=n,m[4]=i,m[5]=a,m[6]=o,m[7]=s,m[8]=l,m[9]=u,m[10]=f,m[11]=c,m[12]=h,m[13]=d,m[14]=p,m[15]=v,m}function O3t(r,e,t,n,i,a,o,s,l,u,f,c,h,d,p,v,m){return r[0]=e,r[1]=t,r[2]=n,r[3]=i,r[4]=a,r[5]=o,r[6]=s,r[7]=l,r[8]=u,r[9]=f,r[10]=c,r[11]=h,r[12]=d,r[13]=p,r[14]=v,r[15]=m,r}function NZ(r){return r[0]=1,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=1,r[6]=0,r[7]=0,r[8]=0,r[9]=0,r[10]=1,r[11]=0,r[12]=0,r[13]=0,r[14]=0,r[15]=1,r}function D3t(r,e){if(r===e){var t=e[1],n=e[2],i=e[3],a=e[6],o=e[7],s=e[11];r[1]=e[4],r[2]=e[8],r[3]=e[12],r[4]=t,r[6]=e[9],r[7]=e[13],r[8]=n,r[9]=a,r[11]=e[14],r[12]=i,r[13]=o,r[14]=s}else r[0]=e[0],r[1]=e[4],r[2]=e[8],r[3]=e[12],r[4]=e[1],r[5]=e[5],r[6]=e[9],r[7]=e[13],r[8]=e[2],r[9]=e[6],r[10]=e[10],r[11]=e[14],r[12]=e[3],r[13]=e[7],r[14]=e[11],r[15]=e[15];return r}function P3t(r,e){var t=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],f=e[8],c=e[9],h=e[10],d=e[11],p=e[12],v=e[13],m=e[14],g=e[15],x=t*s-n*o,b=t*l-i*o,S=t*u-a*o,C=n*l-i*s,w=n*u-a*s,A=i*u-a*l,I=f*v-c*p,P=f*m-h*p,L=f*g-d*p,M=c*m-h*v,O=c*g-d*v,F=h*g-d*m,k=x*F-b*O+S*M+C*L-w*P+A*I;return k?(k=1/k,r[0]=(s*F-l*O+u*M)*k,r[1]=(i*O-n*F-a*M)*k,r[2]=(v*A-m*w+g*C)*k,r[3]=(h*w-c*A-d*C)*k,r[4]=(l*L-o*F-u*P)*k,r[5]=(t*F-i*L+a*P)*k,r[6]=(m*S-p*A-g*b)*k,r[7]=(f*A-h*S+d*b)*k,r[8]=(o*O-s*L+u*I)*k,r[9]=(n*L-t*O-a*I)*k,r[10]=(p*w-v*S+g*x)*k,r[11]=(c*S-f*w-d*x)*k,r[12]=(s*P-o*M-l*I)*k,r[13]=(t*M-n*P+i*I)*k,r[14]=(v*b-p*C-m*x)*k,r[15]=(f*C-c*b+h*x)*k,r):null}function k3t(r,e){var t=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],f=e[8],c=e[9],h=e[10],d=e[11],p=e[12],v=e[13],m=e[14],g=e[15];return r[0]=s*(h*g-d*m)-c*(l*g-u*m)+v*(l*d-u*h),r[1]=-(n*(h*g-d*m)-c*(i*g-a*m)+v*(i*d-a*h)),r[2]=n*(l*g-u*m)-s*(i*g-a*m)+v*(i*u-a*l),r[3]=-(n*(l*d-u*h)-s*(i*d-a*h)+c*(i*u-a*l)),r[4]=-(o*(h*g-d*m)-f*(l*g-u*m)+p*(l*d-u*h)),r[5]=t*(h*g-d*m)-f*(i*g-a*m)+p*(i*d-a*h),r[6]=-(t*(l*g-u*m)-o*(i*g-a*m)+p*(i*u-a*l)),r[7]=t*(l*d-u*h)-o*(i*d-a*h)+f*(i*u-a*l),r[8]=o*(c*g-d*v)-f*(s*g-u*v)+p*(s*d-u*c),r[9]=-(t*(c*g-d*v)-f*(n*g-a*v)+p*(n*d-a*c)),r[10]=t*(s*g-u*v)-o*(n*g-a*v)+p*(n*u-a*s),r[11]=-(t*(s*d-u*c)-o*(n*d-a*c)+f*(n*u-a*s)),r[12]=-(o*(c*m-h*v)-f*(s*m-l*v)+p*(s*h-l*c)),r[13]=t*(c*m-h*v)-f*(n*m-i*v)+p*(n*h-i*c),r[14]=-(t*(s*m-l*v)-o*(n*m-i*v)+p*(n*l-i*s)),r[15]=t*(s*h-l*c)-o*(n*h-i*c)+f*(n*l-i*s),r}function R3t(r){var e=r[0],t=r[1],n=r[2],i=r[3],a=r[4],o=r[5],s=r[6],l=r[7],u=r[8],f=r[9],c=r[10],h=r[11],d=r[12],p=r[13],v=r[14],m=r[15],g=e*o-t*a,x=e*s-n*a,b=e*l-i*a,S=t*s-n*o,C=t*l-i*o,w=n*l-i*s,A=u*p-f*d,I=u*v-c*d,P=u*m-h*d,L=f*v-c*p,M=f*m-h*p,O=c*m-h*v;return g*O-x*M+b*L+S*P-C*I+w*A}function FZ(r,e,t){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],f=e[7],c=e[8],h=e[9],d=e[10],p=e[11],v=e[12],m=e[13],g=e[14],x=e[15],b=t[0],S=t[1],C=t[2],w=t[3];return r[0]=b*n+S*s+C*c+w*v,r[1]=b*i+S*l+C*h+w*m,r[2]=b*a+S*u+C*d+w*g,r[3]=b*o+S*f+C*p+w*x,b=t[4],S=t[5],C=t[6],w=t[7],r[4]=b*n+S*s+C*c+w*v,r[5]=b*i+S*l+C*h+w*m,r[6]=b*a+S*u+C*d+w*g,r[7]=b*o+S*f+C*p+w*x,b=t[8],S=t[9],C=t[10],w=t[11],r[8]=b*n+S*s+C*c+w*v,r[9]=b*i+S*l+C*h+w*m,r[10]=b*a+S*u+C*d+w*g,r[11]=b*o+S*f+C*p+w*x,b=t[12],S=t[13],C=t[14],w=t[15],r[12]=b*n+S*s+C*c+w*v,r[13]=b*i+S*l+C*h+w*m,r[14]=b*a+S*u+C*d+w*g,r[15]=b*o+S*f+C*p+w*x,r}function N3t(r,e,t){var n=t[0],i=t[1],a=t[2],o,s,l,u,f,c,h,d,p,v,m,g;return e===r?(r[12]=e[0]*n+e[4]*i+e[8]*a+e[12],r[13]=e[1]*n+e[5]*i+e[9]*a+e[13],r[14]=e[2]*n+e[6]*i+e[10]*a+e[14],r[15]=e[3]*n+e[7]*i+e[11]*a+e[15]):(o=e[0],s=e[1],l=e[2],u=e[3],f=e[4],c=e[5],h=e[6],d=e[7],p=e[8],v=e[9],m=e[10],g=e[11],r[0]=o,r[1]=s,r[2]=l,r[3]=u,r[4]=f,r[5]=c,r[6]=h,r[7]=d,r[8]=p,r[9]=v,r[10]=m,r[11]=g,r[12]=o*n+f*i+p*a+e[12],r[13]=s*n+c*i+v*a+e[13],r[14]=l*n+h*i+m*a+e[14],r[15]=u*n+d*i+g*a+e[15]),r}function F3t(r,e,t){var n=t[0],i=t[1],a=t[2];return r[0]=e[0]*n,r[1]=e[1]*n,r[2]=e[2]*n,r[3]=e[3]*n,r[4]=e[4]*i,r[5]=e[5]*i,r[6]=e[6]*i,r[7]=e[7]*i,r[8]=e[8]*a,r[9]=e[9]*a,r[10]=e[10]*a,r[11]=e[11]*a,r[12]=e[12],r[13]=e[13],r[14]=e[14],r[15]=e[15],r}function B3t(r,e,t,n){var i=n[0],a=n[1],o=n[2],s=Math.hypot(i,a,o),l,u,f,c,h,d,p,v,m,g,x,b,S,C,w,A,I,P,L,M,O,F,k,G;return s0?(t[0]=(s*o+f*n+l*a-u*i)*2/c,t[1]=(l*o+f*i+u*n-s*a)*2/c,t[2]=(u*o+f*a+s*i-l*n)*2/c):(t[0]=(s*o+f*n+l*a-u*i)*2,t[1]=(l*o+f*i+u*n-s*a)*2,t[2]=(u*o+f*a+s*i-l*n)*2),BZ(r,e,t),r}function K3t(r,e){return r[0]=e[12],r[1]=e[13],r[2]=e[14],r}function GZ(r,e){var t=e[0],n=e[1],i=e[2],a=e[4],o=e[5],s=e[6],l=e[8],u=e[9],f=e[10];return r[0]=Math.hypot(t,n,i),r[1]=Math.hypot(a,o,s),r[2]=Math.hypot(l,u,f),r}function Z3t(r,e){var t=new Ei(3);GZ(t,e);var n=1/t[0],i=1/t[1],a=1/t[2],o=e[0]*n,s=e[1]*i,l=e[2]*a,u=e[4]*n,f=e[5]*i,c=e[6]*a,h=e[8]*n,d=e[9]*i,p=e[10]*a,v=o+f+p,m=0;return v>0?(m=Math.sqrt(v+1)*2,r[3]=.25*m,r[0]=(c-d)/m,r[1]=(h-l)/m,r[2]=(s-u)/m):o>f&&o>p?(m=Math.sqrt(1+o-f-p)*2,r[3]=(c-d)/m,r[0]=.25*m,r[1]=(s+u)/m,r[2]=(h+l)/m):f>p?(m=Math.sqrt(1+f-o-p)*2,r[3]=(h-l)/m,r[0]=(s+u)/m,r[1]=.25*m,r[2]=(c+d)/m):(m=Math.sqrt(1+p-o-f)*2,r[3]=(s-u)/m,r[0]=(h+l)/m,r[1]=(c+d)/m,r[2]=.25*m),r}function $3t(r,e,t,n){var i=e[0],a=e[1],o=e[2],s=e[3],l=i+i,u=a+a,f=o+o,c=i*l,h=i*u,d=i*f,p=a*u,v=a*f,m=o*f,g=s*l,x=s*u,b=s*f,S=n[0],C=n[1],w=n[2];return r[0]=(1-(p+m))*S,r[1]=(h+b)*S,r[2]=(d-x)*S,r[3]=0,r[4]=(h-b)*C,r[5]=(1-(c+m))*C,r[6]=(v+g)*C,r[7]=0,r[8]=(d+x)*w,r[9]=(v-g)*w,r[10]=(1-(c+p))*w,r[11]=0,r[12]=t[0],r[13]=t[1],r[14]=t[2],r[15]=1,r}function Q3t(r,e,t,n,i){var a=e[0],o=e[1],s=e[2],l=e[3],u=a+a,f=o+o,c=s+s,h=a*u,d=a*f,p=a*c,v=o*f,m=o*c,g=s*c,x=l*u,b=l*f,S=l*c,C=n[0],w=n[1],A=n[2],I=i[0],P=i[1],L=i[2],M=(1-(v+g))*C,O=(d+S)*C,F=(p-b)*C,k=(d-S)*w,G=(1-(h+g))*w,D=(m+x)*w,N=(p+b)*A,z=(m-x)*A,j=(1-(h+v))*A;return r[0]=M,r[1]=O,r[2]=F,r[3]=0,r[4]=k,r[5]=G,r[6]=D,r[7]=0,r[8]=N,r[9]=z,r[10]=j,r[11]=0,r[12]=t[0]+I-(M*I+k*P+N*L),r[13]=t[1]+P-(O*I+G*P+z*L),r[14]=t[2]+L-(F*I+D*P+j*L),r[15]=1,r}function J3t(r,e){var t=e[0],n=e[1],i=e[2],a=e[3],o=t+t,s=n+n,l=i+i,u=t*o,f=n*o,c=n*s,h=i*o,d=i*s,p=i*l,v=a*o,m=a*s,g=a*l;return r[0]=1-c-p,r[1]=f+g,r[2]=h-m,r[3]=0,r[4]=f-g,r[5]=1-u-p,r[6]=d+v,r[7]=0,r[8]=h+m,r[9]=d-v,r[10]=1-u-c,r[11]=0,r[12]=0,r[13]=0,r[14]=0,r[15]=1,r}function tGt(r,e,t,n,i,a,o){var s=1/(t-e),l=1/(i-n),u=1/(a-o);return r[0]=a*2*s,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=a*2*l,r[6]=0,r[7]=0,r[8]=(t+e)*s,r[9]=(i+n)*l,r[10]=(o+a)*u,r[11]=-1,r[12]=0,r[13]=0,r[14]=o*a*2*u,r[15]=0,r}function zZ(r,e,t,n,i){var a=1/Math.tan(e/2),o;return r[0]=a/t,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=a,r[6]=0,r[7]=0,r[8]=0,r[9]=0,r[11]=-1,r[12]=0,r[13]=0,r[15]=0,i!=null&&i!==1/0?(o=1/(n-i),r[10]=(i+n)*o,r[14]=2*i*n*o):(r[10]=-1,r[14]=-2*n),r}var eGt=zZ;function rGt(r,e,t,n,i){var a=1/Math.tan(e/2),o;return r[0]=a/t,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=a,r[6]=0,r[7]=0,r[8]=0,r[9]=0,r[11]=-1,r[12]=0,r[13]=0,r[15]=0,i!=null&&i!==1/0?(o=1/(n-i),r[10]=i*o,r[14]=i*n*o):(r[10]=-1,r[14]=-n),r}function nGt(r,e,t,n){var i=Math.tan(e.upDegrees*Math.PI/180),a=Math.tan(e.downDegrees*Math.PI/180),o=Math.tan(e.leftDegrees*Math.PI/180),s=Math.tan(e.rightDegrees*Math.PI/180),l=2/(o+s),u=2/(i+a);return r[0]=l,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=u,r[6]=0,r[7]=0,r[8]=-((o-s)*l*.5),r[9]=(i-a)*u*.5,r[10]=n/(t-n),r[11]=-1,r[12]=0,r[13]=0,r[14]=n*t/(t-n),r[15]=0,r}function UZ(r,e,t,n,i,a,o){var s=1/(e-t),l=1/(n-i),u=1/(a-o);return r[0]=-2*s,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=-2*l,r[6]=0,r[7]=0,r[8]=0,r[9]=0,r[10]=2*u,r[11]=0,r[12]=(e+t)*s,r[13]=(i+n)*l,r[14]=(o+a)*u,r[15]=1,r}var iGt=UZ;function aGt(r,e,t,n,i,a,o){var s=1/(e-t),l=1/(n-i),u=1/(a-o);return r[0]=-2*s,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=-2*l,r[6]=0,r[7]=0,r[8]=0,r[9]=0,r[10]=u,r[11]=0,r[12]=(e+t)*s,r[13]=(i+n)*l,r[14]=a*u,r[15]=1,r}function oGt(r,e,t,n){var i,a,o,s,l,u,f,c,h,d,p=e[0],v=e[1],m=e[2],g=n[0],x=n[1],b=n[2],S=t[0],C=t[1],w=t[2];return Math.abs(p-S)0&&(d=1/Math.sqrt(d),f*=d,c*=d,h*=d);var p=l*h-u*c,v=u*f-s*h,m=s*c-l*f;return d=p*p+v*v+m*m,d>0&&(d=1/Math.sqrt(d),p*=d,v*=d,m*=d),r[0]=p,r[1]=v,r[2]=m,r[3]=0,r[4]=c*m-h*v,r[5]=h*p-f*m,r[6]=f*v-c*p,r[7]=0,r[8]=f,r[9]=c,r[10]=h,r[11]=0,r[12]=i,r[13]=a,r[14]=o,r[15]=1,r}function lGt(r){return"mat4("+r[0]+", "+r[1]+", "+r[2]+", "+r[3]+", "+r[4]+", "+r[5]+", "+r[6]+", "+r[7]+", "+r[8]+", "+r[9]+", "+r[10]+", "+r[11]+", "+r[12]+", "+r[13]+", "+r[14]+", "+r[15]+")"}function uGt(r){return Math.hypot(r[0],r[1],r[2],r[3],r[4],r[5],r[6],r[7],r[8],r[9],r[10],r[11],r[12],r[13],r[14],r[15])}function fGt(r,e,t){return r[0]=e[0]+t[0],r[1]=e[1]+t[1],r[2]=e[2]+t[2],r[3]=e[3]+t[3],r[4]=e[4]+t[4],r[5]=e[5]+t[5],r[6]=e[6]+t[6],r[7]=e[7]+t[7],r[8]=e[8]+t[8],r[9]=e[9]+t[9],r[10]=e[10]+t[10],r[11]=e[11]+t[11],r[12]=e[12]+t[12],r[13]=e[13]+t[13],r[14]=e[14]+t[14],r[15]=e[15]+t[15],r}function jZ(r,e,t){return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r[2]=e[2]-t[2],r[3]=e[3]-t[3],r[4]=e[4]-t[4],r[5]=e[5]-t[5],r[6]=e[6]-t[6],r[7]=e[7]-t[7],r[8]=e[8]-t[8],r[9]=e[9]-t[9],r[10]=e[10]-t[10],r[11]=e[11]-t[11],r[12]=e[12]-t[12],r[13]=e[13]-t[13],r[14]=e[14]-t[14],r[15]=e[15]-t[15],r}function cGt(r,e,t){return r[0]=e[0]*t,r[1]=e[1]*t,r[2]=e[2]*t,r[3]=e[3]*t,r[4]=e[4]*t,r[5]=e[5]*t,r[6]=e[6]*t,r[7]=e[7]*t,r[8]=e[8]*t,r[9]=e[9]*t,r[10]=e[10]*t,r[11]=e[11]*t,r[12]=e[12]*t,r[13]=e[13]*t,r[14]=e[14]*t,r[15]=e[15]*t,r}function hGt(r,e,t,n){return r[0]=e[0]+t[0]*n,r[1]=e[1]+t[1]*n,r[2]=e[2]+t[2]*n,r[3]=e[3]+t[3]*n,r[4]=e[4]+t[4]*n,r[5]=e[5]+t[5]*n,r[6]=e[6]+t[6]*n,r[7]=e[7]+t[7]*n,r[8]=e[8]+t[8]*n,r[9]=e[9]+t[9]*n,r[10]=e[10]+t[10]*n,r[11]=e[11]+t[11]*n,r[12]=e[12]+t[12]*n,r[13]=e[13]+t[13]*n,r[14]=e[14]+t[14]*n,r[15]=e[15]+t[15]*n,r}function dGt(r,e){return r[0]===e[0]&&r[1]===e[1]&&r[2]===e[2]&&r[3]===e[3]&&r[4]===e[4]&&r[5]===e[5]&&r[6]===e[6]&&r[7]===e[7]&&r[8]===e[8]&&r[9]===e[9]&&r[10]===e[10]&&r[11]===e[11]&&r[12]===e[12]&&r[13]===e[13]&&r[14]===e[14]&&r[15]===e[15]}function pGt(r,e){var t=r[0],n=r[1],i=r[2],a=r[3],o=r[4],s=r[5],l=r[6],u=r[7],f=r[8],c=r[9],h=r[10],d=r[11],p=r[12],v=r[13],m=r[14],g=r[15],x=e[0],b=e[1],S=e[2],C=e[3],w=e[4],A=e[5],I=e[6],P=e[7],L=e[8],M=e[9],O=e[10],F=e[11],k=e[12],G=e[13],D=e[14],N=e[15];return Math.abs(t-x)<=pn*Math.max(1,Math.abs(t),Math.abs(x))&&Math.abs(n-b)<=pn*Math.max(1,Math.abs(n),Math.abs(b))&&Math.abs(i-S)<=pn*Math.max(1,Math.abs(i),Math.abs(S))&&Math.abs(a-C)<=pn*Math.max(1,Math.abs(a),Math.abs(C))&&Math.abs(o-w)<=pn*Math.max(1,Math.abs(o),Math.abs(w))&&Math.abs(s-A)<=pn*Math.max(1,Math.abs(s),Math.abs(A))&&Math.abs(l-I)<=pn*Math.max(1,Math.abs(l),Math.abs(I))&&Math.abs(u-P)<=pn*Math.max(1,Math.abs(u),Math.abs(P))&&Math.abs(f-L)<=pn*Math.max(1,Math.abs(f),Math.abs(L))&&Math.abs(c-M)<=pn*Math.max(1,Math.abs(c),Math.abs(M))&&Math.abs(h-O)<=pn*Math.max(1,Math.abs(h),Math.abs(O))&&Math.abs(d-F)<=pn*Math.max(1,Math.abs(d),Math.abs(F))&&Math.abs(p-k)<=pn*Math.max(1,Math.abs(p),Math.abs(k))&&Math.abs(v-G)<=pn*Math.max(1,Math.abs(v),Math.abs(G))&&Math.abs(m-D)<=pn*Math.max(1,Math.abs(m),Math.abs(D))&&Math.abs(g-N)<=pn*Math.max(1,Math.abs(g),Math.abs(N))}var vGt=FZ,mGt=jZ;var Nr={};Dn(Nr,{add:()=>N5t,calculateW:()=>E5t,clone:()=>D5t,conjugate:()=>I5t,copy:()=>k5t,create:()=>y4,dot:()=>l$,equals:()=>j5t,exactEquals:()=>U5t,exp:()=>i$,fromEuler:()=>L5t,fromMat3:()=>o$,fromValues:()=>P5t,getAngle:()=>_5t,getAxisAngle:()=>b5t,identity:()=>x5t,invert:()=>T5t,len:()=>G5t,length:()=>u$,lerp:()=>B5t,ln:()=>a$,mul:()=>F5t,multiply:()=>n$,normalize:()=>x4,pow:()=>A5t,random:()=>M5t,rotateX:()=>S5t,rotateY:()=>C5t,rotateZ:()=>w5t,rotationTo:()=>W5t,scale:()=>s$,set:()=>R5t,setAxes:()=>H5t,setAxisAngle:()=>r$,slerp:()=>v2,sqlerp:()=>V5t,sqrLen:()=>z5t,squaredLength:()=>f$,str:()=>O5t});var Ft={};Dn(Ft,{add:()=>bGt,angle:()=>GGt,bezier:()=>DGt,ceil:()=>_Gt,clone:()=>gGt,copy:()=>yGt,create:()=>f2,cross:()=>_w,dist:()=>XGt,distance:()=>XZ,div:()=>YGt,divide:()=>YZ,dot:()=>h2,equals:()=>WGt,exactEquals:()=>jGt,floor:()=>SGt,forEach:()=>ZGt,fromValues:()=>c2,hermite:()=>OGt,inverse:()=>IGt,len:()=>o4,length:()=>WZ,lerp:()=>LGt,max:()=>wGt,min:()=>CGt,mul:()=>HGt,multiply:()=>HZ,negate:()=>TGt,normalize:()=>i4,random:()=>PGt,rotateX:()=>NGt,rotateY:()=>FGt,rotateZ:()=>BGt,round:()=>EGt,scale:()=>AGt,scaleAndAdd:()=>MGt,set:()=>xGt,sqrDist:()=>qGt,sqrLen:()=>KGt,squaredDistance:()=>qZ,squaredLength:()=>KZ,str:()=>UGt,sub:()=>VGt,subtract:()=>VZ,transformMat3:()=>a4,transformMat4:()=>kGt,transformQuat:()=>RGt,zero:()=>zGt});function f2(){var r=new Ei(3);return Ei!=Float32Array&&(r[0]=0,r[1]=0,r[2]=0),r}function gGt(r){var e=new Ei(3);return e[0]=r[0],e[1]=r[1],e[2]=r[2],e}function WZ(r){var e=r[0],t=r[1],n=r[2];return Math.hypot(e,t,n)}function c2(r,e,t){var n=new Ei(3);return n[0]=r,n[1]=e,n[2]=t,n}function yGt(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r}function xGt(r,e,t,n){return r[0]=e,r[1]=t,r[2]=n,r}function bGt(r,e,t){return r[0]=e[0]+t[0],r[1]=e[1]+t[1],r[2]=e[2]+t[2],r}function VZ(r,e,t){return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r[2]=e[2]-t[2],r}function HZ(r,e,t){return r[0]=e[0]*t[0],r[1]=e[1]*t[1],r[2]=e[2]*t[2],r}function YZ(r,e,t){return r[0]=e[0]/t[0],r[1]=e[1]/t[1],r[2]=e[2]/t[2],r}function _Gt(r,e){return r[0]=Math.ceil(e[0]),r[1]=Math.ceil(e[1]),r[2]=Math.ceil(e[2]),r}function SGt(r,e){return r[0]=Math.floor(e[0]),r[1]=Math.floor(e[1]),r[2]=Math.floor(e[2]),r}function CGt(r,e,t){return r[0]=Math.min(e[0],t[0]),r[1]=Math.min(e[1],t[1]),r[2]=Math.min(e[2],t[2]),r}function wGt(r,e,t){return r[0]=Math.max(e[0],t[0]),r[1]=Math.max(e[1],t[1]),r[2]=Math.max(e[2],t[2]),r}function EGt(r,e){return r[0]=Math.round(e[0]),r[1]=Math.round(e[1]),r[2]=Math.round(e[2]),r}function AGt(r,e,t){return r[0]=e[0]*t,r[1]=e[1]*t,r[2]=e[2]*t,r}function MGt(r,e,t,n){return r[0]=e[0]+t[0]*n,r[1]=e[1]+t[1]*n,r[2]=e[2]+t[2]*n,r}function XZ(r,e){var t=e[0]-r[0],n=e[1]-r[1],i=e[2]-r[2];return Math.hypot(t,n,i)}function qZ(r,e){var t=e[0]-r[0],n=e[1]-r[1],i=e[2]-r[2];return t*t+n*n+i*i}function KZ(r){var e=r[0],t=r[1],n=r[2];return e*e+t*t+n*n}function TGt(r,e){return r[0]=-e[0],r[1]=-e[1],r[2]=-e[2],r}function IGt(r,e){return r[0]=1/e[0],r[1]=1/e[1],r[2]=1/e[2],r}function i4(r,e){var t=e[0],n=e[1],i=e[2],a=t*t+n*n+i*i;return a>0&&(a=1/Math.sqrt(a)),r[0]=e[0]*a,r[1]=e[1]*a,r[2]=e[2]*a,r}function h2(r,e){return r[0]*e[0]+r[1]*e[1]+r[2]*e[2]}function _w(r,e,t){var n=e[0],i=e[1],a=e[2],o=t[0],s=t[1],l=t[2];return r[0]=i*l-a*s,r[1]=a*o-n*l,r[2]=n*s-i*o,r}function LGt(r,e,t,n){var i=e[0],a=e[1],o=e[2];return r[0]=i+n*(t[0]-i),r[1]=a+n*(t[1]-a),r[2]=o+n*(t[2]-o),r}function OGt(r,e,t,n,i,a){var o=a*a,s=o*(2*a-3)+1,l=o*(a-2)+a,u=o*(a-1),f=o*(3-2*a);return r[0]=e[0]*s+t[0]*l+n[0]*u+i[0]*f,r[1]=e[1]*s+t[1]*l+n[1]*u+i[1]*f,r[2]=e[2]*s+t[2]*l+n[2]*u+i[2]*f,r}function DGt(r,e,t,n,i,a){var o=1-a,s=o*o,l=a*a,u=s*o,f=3*a*s,c=3*l*o,h=l*a;return r[0]=e[0]*u+t[0]*f+n[0]*c+i[0]*h,r[1]=e[1]*u+t[1]*f+n[1]*c+i[1]*h,r[2]=e[2]*u+t[2]*f+n[2]*c+i[2]*h,r}function PGt(r,e){e=e||1;var t=Ml()*2*Math.PI,n=Ml()*2-1,i=Math.sqrt(1-n*n)*e;return r[0]=Math.cos(t)*i,r[1]=Math.sin(t)*i,r[2]=n*e,r}function kGt(r,e,t){var n=e[0],i=e[1],a=e[2],o=t[3]*n+t[7]*i+t[11]*a+t[15];return o=o||1,r[0]=(t[0]*n+t[4]*i+t[8]*a+t[12])/o,r[1]=(t[1]*n+t[5]*i+t[9]*a+t[13])/o,r[2]=(t[2]*n+t[6]*i+t[10]*a+t[14])/o,r}function a4(r,e,t){var n=e[0],i=e[1],a=e[2];return r[0]=n*t[0]+i*t[3]+a*t[6],r[1]=n*t[1]+i*t[4]+a*t[7],r[2]=n*t[2]+i*t[5]+a*t[8],r}function RGt(r,e,t){var n=t[0],i=t[1],a=t[2],o=t[3],s=e[0],l=e[1],u=e[2],f=i*u-a*l,c=a*s-n*u,h=n*l-i*s,d=i*h-a*c,p=a*f-n*h,v=n*c-i*f,m=o*2;return f*=m,c*=m,h*=m,d*=2,p*=2,v*=2,r[0]=s+f+d,r[1]=l+c+p,r[2]=u+h+v,r}function NGt(r,e,t,n){var i=[],a=[];return i[0]=e[0]-t[0],i[1]=e[1]-t[1],i[2]=e[2]-t[2],a[0]=i[0],a[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),a[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),r[0]=a[0]+t[0],r[1]=a[1]+t[1],r[2]=a[2]+t[2],r}function FGt(r,e,t,n){var i=[],a=[];return i[0]=e[0]-t[0],i[1]=e[1]-t[1],i[2]=e[2]-t[2],a[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),a[1]=i[1],a[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),r[0]=a[0]+t[0],r[1]=a[1]+t[1],r[2]=a[2]+t[2],r}function BGt(r,e,t,n){var i=[],a=[];return i[0]=e[0]-t[0],i[1]=e[1]-t[1],i[2]=e[2]-t[2],a[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),a[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),a[2]=i[2],r[0]=a[0]+t[0],r[1]=a[1]+t[1],r[2]=a[2]+t[2],r}function GGt(r,e){var t=r[0],n=r[1],i=r[2],a=e[0],o=e[1],s=e[2],l=Math.sqrt(t*t+n*n+i*i),u=Math.sqrt(a*a+o*o+s*s),f=l*u,c=f&&h2(r,e)/f;return Math.acos(Math.min(Math.max(c,-1),1))}function zGt(r){return r[0]=0,r[1]=0,r[2]=0,r}function UGt(r){return"vec3("+r[0]+", "+r[1]+", "+r[2]+")"}function jGt(r,e){return r[0]===e[0]&&r[1]===e[1]&&r[2]===e[2]}function WGt(r,e){var t=r[0],n=r[1],i=r[2],a=e[0],o=e[1],s=e[2];return Math.abs(t-a)<=pn*Math.max(1,Math.abs(t),Math.abs(a))&&Math.abs(n-o)<=pn*Math.max(1,Math.abs(n),Math.abs(o))&&Math.abs(i-s)<=pn*Math.max(1,Math.abs(i),Math.abs(s))}var VGt=VZ,HGt=HZ,YGt=YZ,XGt=XZ,qGt=qZ,o4=WZ,KGt=KZ,ZGt=function(){var r=f2();return function(e,t,n,i,a,o){var s,l;for(t||(t=3),n||(n=0),i?l=Math.min(i*t+n,e.length):l=e.length,s=n;sc4,ceil:()=>$Gt,clone:()=>s4,copy:()=>u4,create:()=>ZZ,cross:()=>a5t,dist:()=>p5t,distance:()=>t$,div:()=>d5t,divide:()=>JZ,dot:()=>p4,equals:()=>g4,exactEquals:()=>m4,floor:()=>QGt,forEach:()=>y5t,fromValues:()=>l4,inverse:()=>i5t,len:()=>m5t,length:()=>d2,lerp:()=>v4,max:()=>t5t,min:()=>JGt,mul:()=>h5t,multiply:()=>QZ,negate:()=>n5t,normalize:()=>d4,random:()=>o5t,round:()=>e5t,scale:()=>h4,scaleAndAdd:()=>r5t,set:()=>f4,sqrDist:()=>v5t,sqrLen:()=>g5t,squaredDistance:()=>e$,squaredLength:()=>p2,str:()=>f5t,sub:()=>c5t,subtract:()=>$Z,transformMat4:()=>s5t,transformQuat:()=>l5t,zero:()=>u5t});function ZZ(){var r=new Ei(4);return Ei!=Float32Array&&(r[0]=0,r[1]=0,r[2]=0,r[3]=0),r}function s4(r){var e=new Ei(4);return e[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],e}function l4(r,e,t,n){var i=new Ei(4);return i[0]=r,i[1]=e,i[2]=t,i[3]=n,i}function u4(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r}function f4(r,e,t,n,i){return r[0]=e,r[1]=t,r[2]=n,r[3]=i,r}function c4(r,e,t){return r[0]=e[0]+t[0],r[1]=e[1]+t[1],r[2]=e[2]+t[2],r[3]=e[3]+t[3],r}function $Z(r,e,t){return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r[2]=e[2]-t[2],r[3]=e[3]-t[3],r}function QZ(r,e,t){return r[0]=e[0]*t[0],r[1]=e[1]*t[1],r[2]=e[2]*t[2],r[3]=e[3]*t[3],r}function JZ(r,e,t){return r[0]=e[0]/t[0],r[1]=e[1]/t[1],r[2]=e[2]/t[2],r[3]=e[3]/t[3],r}function $Gt(r,e){return r[0]=Math.ceil(e[0]),r[1]=Math.ceil(e[1]),r[2]=Math.ceil(e[2]),r[3]=Math.ceil(e[3]),r}function QGt(r,e){return r[0]=Math.floor(e[0]),r[1]=Math.floor(e[1]),r[2]=Math.floor(e[2]),r[3]=Math.floor(e[3]),r}function JGt(r,e,t){return r[0]=Math.min(e[0],t[0]),r[1]=Math.min(e[1],t[1]),r[2]=Math.min(e[2],t[2]),r[3]=Math.min(e[3],t[3]),r}function t5t(r,e,t){return r[0]=Math.max(e[0],t[0]),r[1]=Math.max(e[1],t[1]),r[2]=Math.max(e[2],t[2]),r[3]=Math.max(e[3],t[3]),r}function e5t(r,e){return r[0]=Math.round(e[0]),r[1]=Math.round(e[1]),r[2]=Math.round(e[2]),r[3]=Math.round(e[3]),r}function h4(r,e,t){return r[0]=e[0]*t,r[1]=e[1]*t,r[2]=e[2]*t,r[3]=e[3]*t,r}function r5t(r,e,t,n){return r[0]=e[0]+t[0]*n,r[1]=e[1]+t[1]*n,r[2]=e[2]+t[2]*n,r[3]=e[3]+t[3]*n,r}function t$(r,e){var t=e[0]-r[0],n=e[1]-r[1],i=e[2]-r[2],a=e[3]-r[3];return Math.hypot(t,n,i,a)}function e$(r,e){var t=e[0]-r[0],n=e[1]-r[1],i=e[2]-r[2],a=e[3]-r[3];return t*t+n*n+i*i+a*a}function d2(r){var e=r[0],t=r[1],n=r[2],i=r[3];return Math.hypot(e,t,n,i)}function p2(r){var e=r[0],t=r[1],n=r[2],i=r[3];return e*e+t*t+n*n+i*i}function n5t(r,e){return r[0]=-e[0],r[1]=-e[1],r[2]=-e[2],r[3]=-e[3],r}function i5t(r,e){return r[0]=1/e[0],r[1]=1/e[1],r[2]=1/e[2],r[3]=1/e[3],r}function d4(r,e){var t=e[0],n=e[1],i=e[2],a=e[3],o=t*t+n*n+i*i+a*a;return o>0&&(o=1/Math.sqrt(o)),r[0]=t*o,r[1]=n*o,r[2]=i*o,r[3]=a*o,r}function p4(r,e){return r[0]*e[0]+r[1]*e[1]+r[2]*e[2]+r[3]*e[3]}function a5t(r,e,t,n){var i=t[0]*n[1]-t[1]*n[0],a=t[0]*n[2]-t[2]*n[0],o=t[0]*n[3]-t[3]*n[0],s=t[1]*n[2]-t[2]*n[1],l=t[1]*n[3]-t[3]*n[1],u=t[2]*n[3]-t[3]*n[2],f=e[0],c=e[1],h=e[2],d=e[3];return r[0]=c*u-h*l+d*s,r[1]=-(f*u)+h*o-d*a,r[2]=f*l-c*o+d*i,r[3]=-(f*s)+c*a-h*i,r}function v4(r,e,t,n){var i=e[0],a=e[1],o=e[2],s=e[3];return r[0]=i+n*(t[0]-i),r[1]=a+n*(t[1]-a),r[2]=o+n*(t[2]-o),r[3]=s+n*(t[3]-s),r}function o5t(r,e){e=e||1;var t,n,i,a,o,s;do t=Ml()*2-1,n=Ml()*2-1,o=t*t+n*n;while(o>=1);do i=Ml()*2-1,a=Ml()*2-1,s=i*i+a*a;while(s>=1);var l=Math.sqrt((1-o)/s);return r[0]=e*t,r[1]=e*n,r[2]=e*i*l,r[3]=e*a*l,r}function s5t(r,e,t){var n=e[0],i=e[1],a=e[2],o=e[3];return r[0]=t[0]*n+t[4]*i+t[8]*a+t[12]*o,r[1]=t[1]*n+t[5]*i+t[9]*a+t[13]*o,r[2]=t[2]*n+t[6]*i+t[10]*a+t[14]*o,r[3]=t[3]*n+t[7]*i+t[11]*a+t[15]*o,r}function l5t(r,e,t){var n=e[0],i=e[1],a=e[2],o=t[0],s=t[1],l=t[2],u=t[3],f=u*n+s*a-l*i,c=u*i+l*n-o*a,h=u*a+o*i-s*n,d=-o*n-s*i-l*a;return r[0]=f*u+d*-o+c*-l-h*-s,r[1]=c*u+d*-s+h*-o-f*-l,r[2]=h*u+d*-l+f*-s-c*-o,r[3]=e[3],r}function u5t(r){return r[0]=0,r[1]=0,r[2]=0,r[3]=0,r}function f5t(r){return"vec4("+r[0]+", "+r[1]+", "+r[2]+", "+r[3]+")"}function m4(r,e){return r[0]===e[0]&&r[1]===e[1]&&r[2]===e[2]&&r[3]===e[3]}function g4(r,e){var t=r[0],n=r[1],i=r[2],a=r[3],o=e[0],s=e[1],l=e[2],u=e[3];return Math.abs(t-o)<=pn*Math.max(1,Math.abs(t),Math.abs(o))&&Math.abs(n-s)<=pn*Math.max(1,Math.abs(n),Math.abs(s))&&Math.abs(i-l)<=pn*Math.max(1,Math.abs(i),Math.abs(l))&&Math.abs(a-u)<=pn*Math.max(1,Math.abs(a),Math.abs(u))}var c5t=$Z,h5t=QZ,d5t=JZ,p5t=t$,v5t=e$,m5t=d2,g5t=p2,y5t=function(){var r=ZZ();return function(e,t,n,i,a,o){var s,l;for(t||(t=4),n||(n=0),i?l=Math.min(i*t+n,e.length):l=e.length,s=n;spn?(r[0]=e[0]/n,r[1]=e[1]/n,r[2]=e[2]/n):(r[0]=1,r[1]=0,r[2]=0),t}function _5t(r,e){var t=l$(r,e);return Math.acos(2*t*t-1)}function n$(r,e,t){var n=e[0],i=e[1],a=e[2],o=e[3],s=t[0],l=t[1],u=t[2],f=t[3];return r[0]=n*f+o*s+i*u-a*l,r[1]=i*f+o*l+a*s-n*u,r[2]=a*f+o*u+n*l-i*s,r[3]=o*f-n*s-i*l-a*u,r}function S5t(r,e,t){t*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(t),l=Math.cos(t);return r[0]=n*l+o*s,r[1]=i*l+a*s,r[2]=a*l-i*s,r[3]=o*l-n*s,r}function C5t(r,e,t){t*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(t),l=Math.cos(t);return r[0]=n*l-a*s,r[1]=i*l+o*s,r[2]=a*l+n*s,r[3]=o*l-i*s,r}function w5t(r,e,t){t*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(t),l=Math.cos(t);return r[0]=n*l+i*s,r[1]=i*l-n*s,r[2]=a*l+o*s,r[3]=o*l-a*s,r}function E5t(r,e){var t=e[0],n=e[1],i=e[2];return r[0]=t,r[1]=n,r[2]=i,r[3]=Math.sqrt(Math.abs(1-t*t-n*n-i*i)),r}function i$(r,e){var t=e[0],n=e[1],i=e[2],a=e[3],o=Math.sqrt(t*t+n*n+i*i),s=Math.exp(a),l=o>0?s*Math.sin(o)/o:0;return r[0]=t*l,r[1]=n*l,r[2]=i*l,r[3]=s*Math.cos(o),r}function a$(r,e){var t=e[0],n=e[1],i=e[2],a=e[3],o=Math.sqrt(t*t+n*n+i*i),s=o>0?Math.atan2(o,a)/o:0;return r[0]=t*s,r[1]=n*s,r[2]=i*s,r[3]=.5*Math.log(t*t+n*n+i*i+a*a),r}function A5t(r,e,t){return a$(r,e),s$(r,r,t),i$(r,r),r}function v2(r,e,t,n){var i=e[0],a=e[1],o=e[2],s=e[3],l=t[0],u=t[1],f=t[2],c=t[3],h,d,p,v,m;return d=i*l+a*u+o*f+s*c,d<0&&(d=-d,l=-l,u=-u,f=-f,c=-c),1-d>pn?(h=Math.acos(d),p=Math.sin(h),v=Math.sin((1-n)*h)/p,m=Math.sin(n*h)/p):(v=1-n,m=n),r[0]=v*i+m*l,r[1]=v*a+m*u,r[2]=v*o+m*f,r[3]=v*s+m*c,r}function M5t(r){var e=Ml(),t=Ml(),n=Ml(),i=Math.sqrt(1-e),a=Math.sqrt(e);return r[0]=i*Math.sin(2*Math.PI*t),r[1]=i*Math.cos(2*Math.PI*t),r[2]=a*Math.sin(2*Math.PI*n),r[3]=a*Math.cos(2*Math.PI*n),r}function T5t(r,e){var t=e[0],n=e[1],i=e[2],a=e[3],o=t*t+n*n+i*i+a*a,s=o?1/o:0;return r[0]=-t*s,r[1]=-n*s,r[2]=-i*s,r[3]=a*s,r}function I5t(r,e){return r[0]=-e[0],r[1]=-e[1],r[2]=-e[2],r[3]=e[3],r}function o$(r,e){var t=e[0]+e[4]+e[8],n;if(t>0)n=Math.sqrt(t+1),r[3]=.5*n,n=.5/n,r[0]=(e[5]-e[7])*n,r[1]=(e[6]-e[2])*n,r[2]=(e[1]-e[3])*n;else{var i=0;e[4]>e[0]&&(i=1),e[8]>e[i*3+i]&&(i=2);var a=(i+1)%3,o=(i+2)%3;n=Math.sqrt(e[i*3+i]-e[a*3+a]-e[o*3+o]+1),r[i]=.5*n,n=.5/n,r[3]=(e[a*3+o]-e[o*3+a])*n,r[a]=(e[a*3+i]+e[i*3+a])*n,r[o]=(e[o*3+i]+e[i*3+o])*n}return r}function L5t(r,e,t,n){var i=.5*Math.PI/180;e*=i,t*=i,n*=i;var a=Math.sin(e),o=Math.cos(e),s=Math.sin(t),l=Math.cos(t),u=Math.sin(n),f=Math.cos(n);return r[0]=a*l*f-o*s*u,r[1]=o*s*f+a*l*u,r[2]=o*l*u-a*s*f,r[3]=o*l*f+a*s*u,r}function O5t(r){return"quat("+r[0]+", "+r[1]+", "+r[2]+", "+r[3]+")"}var D5t=s4,P5t=l4,k5t=u4,R5t=f4,N5t=c4,F5t=n$,s$=h4,l$=p4,B5t=v4,u$=d2,G5t=u$,f$=p2,z5t=f$,x4=d4,U5t=m4,j5t=g4,W5t=function(){var r=f2(),e=c2(1,0,0),t=c2(0,1,0);return function(n,i,a){var o=h2(i,a);return o<-.999999?(_w(r,e,i),o4(r)<1e-6&&_w(r,t,i),i4(r,r),r$(n,r,Math.PI),n):o>.999999?(n[0]=0,n[1]=0,n[2]=0,n[3]=1,n):(_w(r,i,a),n[0]=r[0],n[1]=r[1],n[2]=r[2],n[3]=1+o,x4(n,n))}}(),V5t=function(){var r=y4(),e=y4();return function(t,n,i,a,o,s){return v2(r,n,o,s),v2(e,i,a,s),v2(t,r,e,2*s*(1-s)),t}}(),H5t=function(){var r=n4();return function(e,t,n,i){return r[0]=n[0],r[3]=n[1],r[6]=n[2],r[1]=i[0],r[4]=i[1],r[7]=i[2],r[2]=-t[0],r[5]=-t[1],r[8]=-t[2],x4(e,o$(e,r))}}();var oe={};Dn(oe,{add:()=>Z5t,angle:()=>p4t,ceil:()=>$5t,clone:()=>Y5t,copy:()=>q5t,create:()=>c$,cross:()=>o4t,dist:()=>S4t,distance:()=>v$,div:()=>_4t,divide:()=>p$,dot:()=>_4,equals:()=>g4t,exactEquals:()=>S4,floor:()=>Q5t,forEach:()=>E4t,fromValues:()=>X5t,inverse:()=>a4t,len:()=>y4t,length:()=>g$,lerp:()=>s4t,max:()=>t4t,min:()=>J5t,mul:()=>b4t,multiply:()=>d$,negate:()=>i4t,normalize:()=>b4,random:()=>l4t,rotate:()=>d4t,round:()=>e4t,scale:()=>r4t,scaleAndAdd:()=>n4t,set:()=>K5t,sqrDist:()=>C4t,sqrLen:()=>w4t,squaredDistance:()=>m$,squaredLength:()=>y$,str:()=>m4t,sub:()=>x4t,subtract:()=>h$,transformMat2:()=>u4t,transformMat2d:()=>f4t,transformMat3:()=>c4t,transformMat4:()=>h4t,zero:()=>v4t});function c$(){var r=new Ei(2);return Ei!=Float32Array&&(r[0]=0,r[1]=0),r}function Y5t(r){var e=new Ei(2);return e[0]=r[0],e[1]=r[1],e}function X5t(r,e){var t=new Ei(2);return t[0]=r,t[1]=e,t}function q5t(r,e){return r[0]=e[0],r[1]=e[1],r}function K5t(r,e,t){return r[0]=e,r[1]=t,r}function Z5t(r,e,t){return r[0]=e[0]+t[0],r[1]=e[1]+t[1],r}function h$(r,e,t){return r[0]=e[0]-t[0],r[1]=e[1]-t[1],r}function d$(r,e,t){return r[0]=e[0]*t[0],r[1]=e[1]*t[1],r}function p$(r,e,t){return r[0]=e[0]/t[0],r[1]=e[1]/t[1],r}function $5t(r,e){return r[0]=Math.ceil(e[0]),r[1]=Math.ceil(e[1]),r}function Q5t(r,e){return r[0]=Math.floor(e[0]),r[1]=Math.floor(e[1]),r}function J5t(r,e,t){return r[0]=Math.min(e[0],t[0]),r[1]=Math.min(e[1],t[1]),r}function t4t(r,e,t){return r[0]=Math.max(e[0],t[0]),r[1]=Math.max(e[1],t[1]),r}function e4t(r,e){return r[0]=Math.round(e[0]),r[1]=Math.round(e[1]),r}function r4t(r,e,t){return r[0]=e[0]*t,r[1]=e[1]*t,r}function n4t(r,e,t,n){return r[0]=e[0]+t[0]*n,r[1]=e[1]+t[1]*n,r}function v$(r,e){var t=e[0]-r[0],n=e[1]-r[1];return Math.hypot(t,n)}function m$(r,e){var t=e[0]-r[0],n=e[1]-r[1];return t*t+n*n}function g$(r){var e=r[0],t=r[1];return Math.hypot(e,t)}function y$(r){var e=r[0],t=r[1];return e*e+t*t}function i4t(r,e){return r[0]=-e[0],r[1]=-e[1],r}function a4t(r,e){return r[0]=1/e[0],r[1]=1/e[1],r}function b4(r,e){var t=e[0],n=e[1],i=t*t+n*n;return i>0&&(i=1/Math.sqrt(i)),r[0]=e[0]*i,r[1]=e[1]*i,r}function _4(r,e){return r[0]*e[0]+r[1]*e[1]}function o4t(r,e,t){var n=e[0]*t[1]-e[1]*t[0];return r[0]=r[1]=0,r[2]=n,r}function s4t(r,e,t,n){var i=e[0],a=e[1];return r[0]=i+n*(t[0]-i),r[1]=a+n*(t[1]-a),r}function l4t(r,e){e=e||1;var t=Ml()*2*Math.PI;return r[0]=Math.cos(t)*e,r[1]=Math.sin(t)*e,r}function u4t(r,e,t){var n=e[0],i=e[1];return r[0]=t[0]*n+t[2]*i,r[1]=t[1]*n+t[3]*i,r}function f4t(r,e,t){var n=e[0],i=e[1];return r[0]=t[0]*n+t[2]*i+t[4],r[1]=t[1]*n+t[3]*i+t[5],r}function c4t(r,e,t){var n=e[0],i=e[1];return r[0]=t[0]*n+t[3]*i+t[6],r[1]=t[1]*n+t[4]*i+t[7],r}function h4t(r,e,t){var n=e[0],i=e[1];return r[0]=t[0]*n+t[4]*i+t[12],r[1]=t[1]*n+t[5]*i+t[13],r}function d4t(r,e,t,n){var i=e[0]-t[0],a=e[1]-t[1],o=Math.sin(n),s=Math.cos(n);return r[0]=i*s-a*o+t[0],r[1]=i*o+a*s+t[1],r}function p4t(r,e){var t=r[0],n=r[1],i=e[0],a=e[1],o=Math.sqrt(t*t+n*n)*Math.sqrt(i*i+a*a),s=o&&(t*i+n*a)/o;return Math.acos(Math.min(Math.max(s,-1),1))}function v4t(r){return r[0]=0,r[1]=0,r}function m4t(r){return"vec2("+r[0]+", "+r[1]+")"}function S4(r,e){return r[0]===e[0]&&r[1]===e[1]}function g4t(r,e){var t=r[0],n=r[1],i=e[0],a=e[1];return Math.abs(t-i)<=pn*Math.max(1,Math.abs(t),Math.abs(i))&&Math.abs(n-a)<=pn*Math.max(1,Math.abs(n),Math.abs(a))}var y4t=g$,x4t=h$,b4t=d$,_4t=p$,S4t=v$,C4t=m$,w4t=y$,E4t=function(){var r=c$();return function(e,t,n,i,a,o){var s,l;for(t||(t=2),n||(n=0),i?l=Math.min(i*t+n,e.length):l=e.length,s=n;sT4t,direction:()=>S$,leftRotate:()=>b$,leftScale:()=>_$,leftTranslate:()=>x$,transform:()=>M4t,vertical:()=>I4t});function x$(r,e,t){var n=[0,0,0,0,0,0,0,0,0];return Ai.fromTranslation(n,t),Ai.multiply(r,n,e)}function b$(r,e,t){var n=[0,0,0,0,0,0,0,0,0];return Ai.fromRotation(n,t),Ai.multiply(r,n,e)}function _$(r,e,t){var n=[0,0,0,0,0,0,0,0,0];return Ai.fromScaling(n,t),Ai.multiply(r,n,e)}function A4t(r,e,t){return Ai.multiply(r,t,e)}function M4t(r,e){for(var t=r?[].concat(r):[1,0,0,0,1,0,0,0,1],n=0,i=e.length;n=0;return t?i?Math.PI*2-n:n:i?n:Math.PI*2-n}function I4t(r,e,t){return t?(r[0]=e[1],r[1]=-1*e[0]):(r[0]=-1*e[1],r[1]=e[0]),r}function C4(r,e){var t=[],n=r[0],i=r[1],a=r[2],o=r[3],s=r[4],l=r[5],u=r[6],f=r[7],c=r[8],h=e[0],d=e[1],p=e[2],v=e[3],m=e[4],g=e[5],x=e[6],b=e[7],S=e[8];return t[0]=h*n+d*o+p*u,t[1]=h*i+d*s+p*f,t[2]=h*a+d*l+p*c,t[3]=v*n+m*o+g*u,t[4]=v*i+m*s+g*f,t[5]=v*a+m*l+g*c,t[6]=x*n+b*o+S*u,t[7]=x*i+b*s+S*f,t[8]=x*a+b*l+S*c,t}function du(r,e){var t=[],n=e[0],i=e[1];return t[0]=r[0]*n+r[3]*i+r[6],t[1]=r[1]*n+r[4]*i+r[7],t}function Oy(r){var e=[],t=r[0],n=r[1],i=r[2],a=r[3],o=r[4],s=r[5],l=r[6],u=r[7],f=r[8],c=f*o-s*u,h=-f*a+s*l,d=u*a-o*l,p=t*c+n*h+i*d;return p?(p=1/p,e[0]=c*p,e[1]=(-f*n+i*u)*p,e[2]=(s*n-i*o)*p,e[3]=h*p,e[4]=(f*t-i*l)*p,e[5]=(-s*t+i*a)*p,e[6]=d*p,e[7]=(-u*t+n*l)*p,e[8]=(o*t-n*a)*p,e):null}var Sw=gr.transform,w4="matrix",L4t=["zIndex","capture","visible","type"],O4t=["repeat"],D4t=":",P4t="*";function k4t(r){for(var e=[],t=0;to.delay&&(0,Hn.each)(e.toAttrs,function(s,l){a.call(o.toAttrs,l)&&(delete o.toAttrs[l],delete o.fromAttrs[l])})}),r}var B4t=function(r){H(e,r);function e(t){var n=r.call(this,t)||this;n.attrs={};var i=n.getDefaultAttrs();return(0,Hn.mix)(i,t.attrs),n.attrs=i,n.initAttrs(i),n.initAnimate(),n}return e.prototype.getDefaultCfg=function(){return{visible:!0,capture:!0,zIndex:0}},e.prototype.getDefaultAttrs=function(){return{matrix:this.getDefaultMatrix(),opacity:1}},e.prototype.onCanvasChange=function(t){},e.prototype.initAttrs=function(t){},e.prototype.initAnimate=function(){this.set("animable",!0),this.set("animating",!1)},e.prototype.isGroup=function(){return!1},e.prototype.getParent=function(){return this.get("parent")},e.prototype.getCanvas=function(){return this.get("canvas")},e.prototype.attr=function(){for(var t,n=[],i=0;i0?a=F4t(a,S):i.addAnimator(this),a.push(S),this.set("animations",a),this.set("_pause",{isPaused:!1})}},e.prototype.stopAnimate=function(t){var n=this;t===void 0&&(t=!0);var i=this.get("animations");(0,Hn.each)(i,function(a){t&&(a.onFrame?n.attr(a.onFrame(1)):n.attr(a.toAttrs)),a.callback&&a.callback()}),this.set("animating",!1),this.set("animations",[])},e.prototype.pauseAnimate=function(){var t=this.get("timeline"),n=this.get("animations"),i=t.getTime();return(0,Hn.each)(n,function(a){a._paused=!0,a._pauseTime=i,a.pauseCallback&&a.pauseCallback()}),this.set("_pause",{isPaused:!0,pauseTime:i}),this},e.prototype.resumeAnimate=function(){var t=this.get("timeline"),n=t.getTime(),i=this.get("animations"),a=this.get("_pause").pauseTime;return(0,Hn.each)(i,function(o){o.startTime=o.startTime+(n-a),o._paused=!1,o._pauseTime=null,o.resumeCallback&&o.resumeCallback()}),this.set("_pause",{isPaused:!1}),this.set("animations",i),this},e.prototype.emitDelegation=function(t,n){var i=this,a=n.propagationPath,o=this.getEvents(),s;t==="mouseenter"?s=n.fromShape:t==="mouseleave"&&(s=n.toShape);for(var l=function(h){var d=a[h],p=d.get("name");if(p){if((d.isGroup()||d.isCanvas&&d.isCanvas())&&s&&l2(d,s))return"break";(0,Hn.isArray)(p)?(0,Hn.each)(p,function(v){i.emitDelegateEvent(d,v,n)}):u.emitDelegateEvent(d,p,n)}},u=this,f=0;f0)});l.length>0?((0,Gn.each)(l,function(f){var c=f.getBBox();o.push(c.minX,c.maxX),s.push(c.minY,c.maxY)}),t=(0,th.min)(o),n=(0,th.max)(o),i=(0,th.min)(s),a=(0,th.max)(s)):(t=0,n=0,i=0,a=0);var u={x:t,y:i,minX:t,minY:i,maxX:n,maxY:a,width:n-t,height:a-i};return u},e.prototype.getCanvasBBox=function(){var t=1/0,n=-1/0,i=1/0,a=-1/0,o=[],s=[],l=this.getChildren().filter(function(f){return f.get("visible")&&(!f.isGroup()||f.isGroup()&&f.getChildren().length>0)});l.length>0?((0,Gn.each)(l,function(f){var c=f.getCanvasBBox();o.push(c.minX,c.maxX),s.push(c.minY,c.maxY)}),t=(0,th.min)(o),n=(0,th.max)(o),i=(0,th.min)(s),a=(0,th.max)(s)):(t=0,n=0,i=0,a=0);var u={x:t,y:i,minX:t,minY:i,maxX:n,maxY:a,width:n-t,height:a-i};return u},e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return t.children=[],t},e.prototype.onAttrChange=function(t,n,i){if(r.prototype.onAttrChange.call(this,t,n,i),t==="matrix"){var a=this.getTotalMatrix();this._applyChildrenMarix(a)}},e.prototype.applyMatrix=function(t){var n=this.getTotalMatrix();r.prototype.applyMatrix.call(this,t);var i=this.getTotalMatrix();i!==n&&this._applyChildrenMarix(i)},e.prototype._applyChildrenMarix=function(t){var n=this.getChildren();(0,Gn.each)(n,function(i){i.applyMatrix(t)})},e.prototype.addShape=function(){for(var t=[],n=0;n=0;s--){var l=t[s];if(Vv(l)&&(l.isGroup()?o=l.getShape(n,i,a):l.isHit(n,i)&&(o=l)),o)break}return o},e.prototype.add=function(t){var n=this.getCanvas(),i=this.getChildren(),a=this.get("timeline"),o=t.getParent();o&&G4t(o,t,!1),t.set("parent",this),n&&w$(t,n),a&&E$(t,a),i.push(t),t.onCanvasChange("add"),this._applyElementMatrix(t)},e.prototype._applyElementMatrix=function(t){var n=this.getTotalMatrix();n&&t.applyMatrix(n)},e.prototype.getChildren=function(){return this.get("children")},e.prototype.sort=function(){var t=this.getChildren();(0,Gn.each)(t,function(n,i){return n[E4]=i,n}),t.sort(z4t(function(n,i){return n.get("zIndex")-i.get("zIndex")})),this.onCanvasChange("sort")},e.prototype.clear=function(){if(this.set("clearing",!0),!this.destroyed){for(var t=this.getChildren(),n=t.length-1;n>=0;n--)t[n].destroy();this.set("children",[]),this.onCanvasChange("clear"),this.set("clearing",!1)}},e.prototype.destroy=function(){this.get("destroyed")||(this.clear(),r.prototype.destroy.call(this))},e.prototype.getFirst=function(){return this.getChildByIndex(0)},e.prototype.getLast=function(){var t=this.getChildren();return this.getChildByIndex(t.length-1)},e.prototype.getChildByIndex=function(t){var n=this.getChildren();return n[t]},e.prototype.getCount=function(){var t=this.getChildren();return t.length},e.prototype.contain=function(t){var n=this.getChildren();return n.indexOf(t)>-1},e.prototype.removeChild=function(t,n){n===void 0&&(n=!0),this.contain(t)&&t.remove(n)},e.prototype.findAll=function(t){var n=[],i=this.getChildren();return(0,Gn.each)(i,function(a){t(a)&&n.push(a),a.isGroup()&&(n=n.concat(a.findAll(t)))}),n},e.prototype.find=function(t){var n=null,i=this.getChildren();return(0,Gn.each)(i,function(a){if(t(a)?n=a:a.isGroup()&&(n=a.find(t)),n)return!1}),n},e.prototype.findById=function(t){return this.find(function(n){return n.get("id")===t})},e.prototype.findByClassName=function(t){return this.find(function(n){return n.get("className")===t})},e.prototype.findAllByName=function(t){return this.findAll(function(n){return n.get("name")===t})},e}(m2),g2=U4t;var Py=U(q());var pb=0,Cw=0,ww=0,A$=1e3,y2,Ew,x2=0,Dy=0,b2=0,Aw=typeof performance=="object"&&performance.now?performance:Date,M$=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(r){setTimeout(r,17)};function A4(){return Dy||(M$(j4t),Dy=Aw.now()+b2)}function j4t(){Dy=0}function M4(){this._call=this._time=this._next=null}M4.prototype=vb.prototype={constructor:M4,restart:function(r,e,t){if(typeof r!="function")throw new TypeError("callback is not a function");t=(t==null?A4():+t)+(e==null?0:+e),!this._next&&Ew!==this&&(Ew?Ew._next=this:y2=this,Ew=this),this._call=r,this._time=t,T4()},stop:function(){this._call&&(this._call=null,this._time=1/0,T4())}};function vb(r,e,t){var n=new M4;return n.restart(r,e,t),n}function T$(){A4(),++pb;for(var r=y2,e;r;)(e=Dy-r._time)>=0&&r._call.call(null,e),r=r._next;--pb}function I$(){Dy=(x2=Aw.now())+b2,pb=Cw=0;try{T$()}finally{pb=0,V4t(),Dy=0}}function W4t(){var r=Aw.now(),e=r-x2;e>A$&&(b2-=e,x2=r)}function V4t(){for(var r,e=y2,t,n=1/0;e;)e._call?(n>e._time&&(n=e._time),r=e,e=e._next):(t=e._next,e._next=null,e=r?r._next=t:y2=t);Ew=r,T4(n)}function T4(r){if(!pb){Cw&&(Cw=clearTimeout(Cw));var e=r-Dy;e>24?(r<1/0&&(Cw=setTimeout(I$,r-Aw.now()-b2)),ww&&(ww=clearInterval(ww))):(ww||(x2=Aw.now(),ww=setInterval(W4t,A$)),pb=1,M$(I$))}}var S2={};Dn(S2,{easeBack:()=>B4,easeBackIn:()=>X$,easeBackInOut:()=>B4,easeBackOut:()=>q$,easeBounce:()=>mb,easeBounceIn:()=>H$,easeBounceInOut:()=>Y$,easeBounceOut:()=>mb,easeCircle:()=>R4,easeCircleIn:()=>W$,easeCircleInOut:()=>R4,easeCircleOut:()=>V$,easeCubic:()=>L4,easeCubicIn:()=>P$,easeCubicInOut:()=>L4,easeCubicOut:()=>k$,easeElastic:()=>U4,easeElasticIn:()=>K$,easeElasticInOut:()=>Z$,easeElasticOut:()=>U4,easeExp:()=>k4,easeExpIn:()=>U$,easeExpInOut:()=>k4,easeExpOut:()=>j$,easeLinear:()=>L$,easePoly:()=>D4,easePolyIn:()=>R$,easePolyInOut:()=>D4,easePolyOut:()=>N$,easeQuad:()=>I4,easeQuadIn:()=>O$,easeQuadInOut:()=>I4,easeQuadOut:()=>D$,easeSin:()=>P4,easeSinIn:()=>G$,easeSinInOut:()=>P4,easeSinOut:()=>z$});function L$(r){return+r}function O$(r){return r*r}function D$(r){return r*(2-r)}function I4(r){return((r*=2)<=1?r*r:--r*(2-r)+1)/2}function P$(r){return r*r*r}function k$(r){return--r*r*r+1}function L4(r){return((r*=2)<=1?r*r*r:(r-=2)*r*r+2)/2}var O4=3,R$=function r(e){e=+e;function t(n){return Math.pow(n,e)}return t.exponent=r,t}(O4),N$=function r(e){e=+e;function t(n){return 1-Math.pow(1-n,e)}return t.exponent=r,t}(O4),D4=function r(e){e=+e;function t(n){return((n*=2)<=1?Math.pow(n,e):2-Math.pow(2-n,e))/2}return t.exponent=r,t}(O4);var F$=Math.PI,B$=F$/2;function G$(r){return+r==1?1:1-Math.cos(r*B$)}function z$(r){return Math.sin(r*B$)}function P4(r){return(1-Math.cos(F$*r))/2}function eh(r){return(Math.pow(2,-10*r)-.0009765625)*1.0009775171065494}function U$(r){return eh(1-+r)}function j$(r){return 1-eh(r)}function k4(r){return((r*=2)<=1?eh(1-r):2-eh(r-1))/2}function W$(r){return 1-Math.sqrt(1-r*r)}function V$(r){return Math.sqrt(1- --r*r)}function R4(r){return((r*=2)<=1?1-Math.sqrt(1-r*r):Math.sqrt(1-(r-=2)*r)+1)/2}var N4=4/11,H4t=6/11,Y4t=8/11,X4t=3/4,q4t=9/11,K4t=10/11,Z4t=15/16,$4t=21/22,Q4t=63/64,_2=1/N4/N4;function H$(r){return 1-mb(1-r)}function mb(r){return(r=+r)>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):t===8?E2(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):t===4?E2(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=tzt.exec(r))?new pu(e[1],e[2],e[3],1):(e=ezt.exec(r))?new pu(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=rzt.exec(r))?E2(e[1],e[2],e[3],e[4]):(e=nzt.exec(r))?E2(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=izt.exec(r))?nQ(e[1],e[2]/100,e[3]/100,1):(e=azt.exec(r))?nQ(e[1],e[2]/100,e[3]/100,e[4]):$$.hasOwnProperty(r)?tQ($$[r]):r==="transparent"?new pu(NaN,NaN,NaN,0):null}function tQ(r){return new pu(r>>16&255,r>>8&255,r&255,1)}function E2(r,e,t,n){return n<=0&&(r=e=t=NaN),new pu(r,e,t,n)}function szt(r){return r instanceof Mw||(r=Hv(r)),r?(r=r.rgb(),new pu(r.r,r.g,r.b,r.opacity)):new pu}function xb(r,e,t,n){return arguments.length===1?szt(r):new pu(r,e,t,n==null?1:n)}function pu(r,e,t,n){this.r=+r,this.g=+e,this.b=+t,this.opacity=+n}C2(pu,xb,j4(Mw,{brighter:function(r){return r=r==null?w2:Math.pow(w2,r),new pu(this.r*r,this.g*r,this.b*r,this.opacity)},darker:function(r){return r=r==null?Tw:Math.pow(Tw,r),new pu(this.r*r,this.g*r,this.b*r,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:eQ,formatHex:eQ,formatRgb:rQ,toString:rQ}));function eQ(){return"#"+W4(this.r)+W4(this.g)+W4(this.b)}function rQ(){var r=this.opacity;return r=isNaN(r)?1:Math.max(0,Math.min(1,r)),(r===1?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(r===1?")":", "+r+")")}function W4(r){return r=Math.max(0,Math.min(255,Math.round(r)||0)),(r<16?"0":"")+r.toString(16)}function nQ(r,e,t,n){return n<=0?r=e=t=NaN:t<=0||t>=1?r=e=NaN:e<=0&&(r=NaN),new nh(r,e,t,n)}function iQ(r){if(r instanceof nh)return new nh(r.h,r.s,r.l,r.opacity);if(r instanceof Mw||(r=Hv(r)),!r)return new nh;if(r instanceof nh)return r;r=r.rgb();var e=r.r/255,t=r.g/255,n=r.b/255,i=Math.min(e,t,n),a=Math.max(e,t,n),o=NaN,s=a-i,l=(a+i)/2;return s?(e===a?o=(t-n)/s+(t0&&l<1?0:o,new nh(o,s,l,r.opacity)}function aQ(r,e,t,n){return arguments.length===1?iQ(r):new nh(r,e,t,n==null?1:n)}function nh(r,e,t,n){this.h=+r,this.s=+e,this.l=+t,this.opacity=+n}C2(nh,aQ,j4(Mw,{brighter:function(r){return r=r==null?w2:Math.pow(w2,r),new nh(this.h,this.s,this.l*r,this.opacity)},darker:function(r){return r=r==null?Tw:Math.pow(Tw,r),new nh(this.h,this.s,this.l*r,this.opacity)},rgb:function(){var r=this.h%360+(this.h<0)*360,e=isNaN(r)||isNaN(this.s)?0:this.s,t=this.l,n=t+(t<.5?t:1-t)*e,i=2*t-n;return new pu(V4(r>=240?r-240:r+120,i,n),V4(r,i,n),V4(r<120?r+240:r-120,i,n),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var r=this.opacity;return r=isNaN(r)?1:Math.max(0,Math.min(1,r)),(r===1?"hsl(":"hsla(")+(this.h||0)+", "+(this.s||0)*100+"%, "+(this.l||0)*100+"%"+(r===1?")":", "+r+")")}}));function V4(r,e,t){return(r<60?e+(t-e)*r/60:r<180?t:r<240?e+(t-e)*(240-r)/60:e)*255}function H4(r,e,t,n,i){var a=r*r,o=a*r;return((1-3*r+3*a-o)*e+(4-6*a+3*o)*t+(1+3*r+3*a-3*o)*n+o*i)/6}function oQ(r){var e=r.length-1;return function(t){var n=t<=0?t=0:t>=1?(t=1,e-1):Math.floor(t*e),i=r[n],a=r[n+1],o=n>0?r[n-1]:2*i-a,s=nt&&(a=e.slice(t,a),s[o]?s[o]+=a:s[++o]=a),(n=n[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,l.push({i:o,x:Ow(n,i)})),t=Z4.lastIndex;return tu.length?(l=Iy(a[s]),u=Iy(i[s]),u=t4(u,l),u=o2(u,l),e.fromAttrs.path=u,e.toAttrs.path=l):e.pathFormatted||(l=Iy(a[s]),u=Iy(i[s]),u=o2(u,l),e.fromAttrs.path=u,e.toAttrs.path=l,e.pathFormatted=!0),n[s]=[];for(var f=0;f0){for(var s=e.animators.length-1;s>=0;s--){if(n=e.animators[s],n.destroyed){e.removeAnimator(s);continue}if(!n.isAnimatePaused()){i=n.get("animations");for(var l=i.length-1;l>=0;l--)a=i[l],t=dzt(n,a,o),t&&(i.splice(l,1),t=!1,a.callback&&a.callback())}i.length===0&&e.removeAnimator(s)}var u=e.canvas.get("autoDraw");u||e.canvas.draw()}})},r.prototype.addAnimator=function(e){this.animators.push(e)},r.prototype.removeAnimator=function(e){this.animators.splice(e,1)},r.prototype.isAnimating=function(){return!!this.animators.length},r.prototype.stop=function(){this.timer&&this.timer.stop()},r.prototype.stopAllAnimations=function(e){e===void 0&&(e=!0),this.animators.forEach(function(t){t.stopAnimate(e)}),this.animators=[],this.canvas.draw()},r.prototype.getTime=function(){return this.current},r}(),mQ=pzt;var vzt=40,gQ=0;var yQ=["mousedown","mouseup","dblclick","mouseout","mouseover","mousemove","mouseleave","mouseenter","touchstart","touchmove","touchend","dragenter","dragover","dragleave","drop","contextmenu","mousewheel"];function xQ(r,e,t){t.name=e,t.target=r,t.currentTarget=r,t.delegateTarget=r,r.emit(e,t)}function mzt(r,e,t){if(t.bubbles){var n=void 0,i=!1;if(e==="mouseenter"?(n=t.fromShape,i=!0):e==="mouseleave"&&(i=!0,n=t.toShape),r.isCanvas()&&i)return;if(n&&l2(r,n)){t.bubbles=!1;return}t.name=e,t.currentTarget=r,t.delegateTarget=r,r.emit(e,t)}}var gzt=function(){function r(e){var t=this;this.draggingShape=null,this.dragging=!1,this.currentShape=null,this.mousedownShape=null,this.mousedownPoint=null,this._eventCallback=function(n){var i=n.type;t._triggerEvent(i,n)},this._onDocumentMove=function(n){var i=t.canvas,a=i.get("el");if(a!==n.target&&(t.dragging||t.currentShape)){var o=t._getPointInfo(n);t.dragging&&t._emitEvent("drag",n,o,t.draggingShape)}},this._onDocumentMouseUp=function(n){var i=t.canvas,a=i.get("el");if(a!==n.target&&t.dragging){var o=t._getPointInfo(n);t.draggingShape&&t._emitEvent("drop",n,o,null),t._emitEvent("dragend",n,o,t.draggingShape),t._afterDrag(t.draggingShape,o,n)}},this.canvas=e.canvas}return r.prototype.init=function(){this._bindEvents()},r.prototype._bindEvents=function(){var e=this,t=this.canvas.get("el");(0,Gn.each)(yQ,function(n){t.addEventListener(n,e._eventCallback)}),document&&(document.addEventListener("mousemove",this._onDocumentMove),document.addEventListener("mouseup",this._onDocumentMouseUp))},r.prototype._clearEvents=function(){var e=this,t=this.canvas.get("el");(0,Gn.each)(yQ,function(n){t.removeEventListener(n,e._eventCallback)}),document&&(document.removeEventListener("mousemove",this._onDocumentMove),document.removeEventListener("mouseup",this._onDocumentMouseUp))},r.prototype._getEventObj=function(e,t,n,i,a,o){var s=new Hu(e,t);return s.fromShape=a,s.toShape=o,s.x=n.x,s.y=n.y,s.clientX=n.clientX,s.clientY=n.clientY,s.propagationPath.push(i),s},r.prototype._getShape=function(e,t){return this.canvas.getShape(e.x,e.y,t)},r.prototype._getPointInfo=function(e){var t=this.canvas,n=t.getClientByEvent(e),i=t.getPointByEvent(e);return{x:i.x,y:i.y,clientX:n.x,clientY:n.y}},r.prototype._triggerEvent=function(e,t){var n=this._getPointInfo(t),i=this._getShape(n,t),a=this["_on"+e],o=!1;if(a)a.call(this,n,i,t);else{var s=this.currentShape;e==="mouseenter"||e==="dragenter"||e==="mouseover"?(this._emitEvent(e,t,n,null,null,i),i&&this._emitEvent(e,t,n,i,null,i),e==="mouseenter"&&this.draggingShape&&this._emitEvent("dragenter",t,n,null)):e==="mouseleave"||e==="dragleave"||e==="mouseout"?(o=!0,s&&this._emitEvent(e,t,n,s,s,null),this._emitEvent(e,t,n,null,s,null),e==="mouseleave"&&this.draggingShape&&this._emitEvent("dragleave",t,n,null)):this._emitEvent(e,t,n,i,null,null)}if(o||(this.currentShape=i),i&&!i.get("destroyed")){var l=this.canvas,u=l.get("el");u.style.cursor=i.attr("cursor")||l.get("cursor")}},r.prototype._onmousedown=function(e,t,n){n.button===gQ&&(this.mousedownShape=t,this.mousedownPoint=e,this.mousedownTimeStamp=n.timeStamp),this._emitEvent("mousedown",n,e,t,null,null)},r.prototype._emitMouseoverEvents=function(e,t,n,i){var a=this.canvas.get("el");n!==i&&(n&&(this._emitEvent("mouseout",e,t,n,n,i),this._emitEvent("mouseleave",e,t,n,n,i),(!i||i.get("destroyed"))&&(a.style.cursor=this.canvas.get("cursor"))),i&&(this._emitEvent("mouseover",e,t,i,n,i),this._emitEvent("mouseenter",e,t,i,n,i)))},r.prototype._emitDragoverEvents=function(e,t,n,i,a){i?(i!==n&&(n&&this._emitEvent("dragleave",e,t,n,n,i),this._emitEvent("dragenter",e,t,i,n,i)),a||this._emitEvent("dragover",e,t,i)):n&&this._emitEvent("dragleave",e,t,n,n,i),a&&this._emitEvent("dragover",e,t,i)},r.prototype._afterDrag=function(e,t,n){e&&(e.set("capture",!0),this.draggingShape=null),this.dragging=!1;var i=this._getShape(t,n);i!==e&&this._emitMouseoverEvents(n,t,e,i),this.currentShape=i},r.prototype._onmouseup=function(e,t,n){if(n.button===gQ){var i=this.draggingShape;this.dragging?(i&&this._emitEvent("drop",n,e,t),this._emitEvent("dragend",n,e,i),this._afterDrag(i,e,n)):(this._emitEvent("mouseup",n,e,t),t===this.mousedownShape&&this._emitEvent("click",n,e,t),this.mousedownShape=null,this.mousedownPoint=null)}},r.prototype._ondragover=function(e,t,n){n.preventDefault();var i=this.currentShape;this._emitDragoverEvents(n,e,i,t,!0)},r.prototype._onmousemove=function(e,t,n){var i=this.canvas,a=this.currentShape,o=this.draggingShape;if(this.dragging)o&&this._emitDragoverEvents(n,e,a,t,!1),this._emitEvent("drag",n,e,o);else{var s=this.mousedownPoint;if(s){var l=this.mousedownShape,u=n.timeStamp,f=u-this.mousedownTimeStamp,c=s.clientX-e.clientX,h=s.clientY-e.clientY,d=c*c+h*h;f>120||d>vzt?l&&l.get("draggable")?(o=this.mousedownShape,o.set("capture",!1),this.draggingShape=o,this.dragging=!0,this._emitEvent("dragstart",n,e,o),this.mousedownShape=null,this.mousedownPoint=null):!l&&i.get("draggable")?(this.dragging=!0,this._emitEvent("dragstart",n,e,null),this.mousedownShape=null,this.mousedownPoint=null):(this._emitMouseoverEvents(n,e,a,t),this._emitEvent("mousemove",n,e,t)):(this._emitMouseoverEvents(n,e,a,t),this._emitEvent("mousemove",n,e,t))}else this._emitMouseoverEvents(n,e,a,t),this._emitEvent("mousemove",n,e,t)}},r.prototype._emitEvent=function(e,t,n,i,a,o){var s=this._getEventObj(e,t,n,i,a,o);if(i){s.shape=i,xQ(i,e,s);for(var l=i.getParent();l;)l.emitDelegation(e,s),s.propagationStopped||mzt(l,e,s),s.propagationPath.push(l),l=l.getParent()}else{var u=this.canvas;xQ(u,e,s)}},r.prototype.destroy=function(){this._clearEvents(),this.canvas=null,this.currentShape=null,this.draggingShape=null,this.mousedownPoint=null,this.mousedownShape=null,this.mousedownTimeStamp=null},r}(),bQ=gzt;var _Q="px",SQ=u2(),yzt=SQ&&SQ.name==="firefox",xzt=function(r){H(e,r);function e(t){var n=r.call(this,t)||this;return n.initContainer(),n.initDom(),n.initEvents(),n.initTimeline(),n}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return t.cursor="default",t.supportCSSTransform=!1,t},e.prototype.initContainer=function(){var t=this.get("container");(0,Gn.isString)(t)&&(t=document.getElementById(t),this.set("container",t))},e.prototype.initDom=function(){var t=this.createDom();this.set("el",t);var n=this.get("container");n.appendChild(t),this.setDOMSize(this.get("width"),this.get("height"))},e.prototype.initEvents=function(){var t=new bQ({canvas:this});t.init(),this.set("eventController",t)},e.prototype.initTimeline=function(){var t=new mQ(this);this.set("timeline",t)},e.prototype.setDOMSize=function(t,n){var i=this.get("el");r4&&(i.style.width=t+_Q,i.style.height=n+_Q)},e.prototype.changeSize=function(t,n){this.setDOMSize(t,n),this.set("width",t),this.set("height",n),this.onCanvasChange("changeSize")},e.prototype.getRenderer=function(){return this.get("renderer")},e.prototype.getCursor=function(){return this.get("cursor")},e.prototype.setCursor=function(t){this.set("cursor",t);var n=this.get("el");r4&&n&&(n.style.cursor=t)},e.prototype.getPointByEvent=function(t){var n=this.get("supportCSSTransform");if(n){if(yzt&&!(0,Gn.isNil)(t.layerX)&&t.layerX!==t.offsetX)return{x:t.layerX,y:t.layerY};if(!(0,Gn.isNil)(t.offsetX))return{x:t.offsetX,y:t.offsetY}}var i=this.getClientByEvent(t),a=i.x,o=i.y;return this.getPointByClient(a,o)},e.prototype.getClientByEvent=function(t){var n=t;return t.touches&&(t.type==="touchend"?n=t.changedTouches[0]:n=t.touches[0]),{x:n.clientX,y:n.clientY}},e.prototype.getPointByClient=function(t,n){var i=this.get("el"),a=i.getBoundingClientRect();return{x:t-a.left,y:n-a.top}},e.prototype.getClientByPoint=function(t,n){var i=this.get("el"),a=i.getBoundingClientRect();return{x:t+a.left,y:n+a.top}},e.prototype.draw=function(){},e.prototype.removeDom=function(){var t=this.get("el");t.parentNode.removeChild(t)},e.prototype.clearEvents=function(){var t=this.get("eventController");t.destroy()},e.prototype.isCanvas=function(){return!0},e.prototype.getParent=function(){return null},e.prototype.destroy=function(){var t=this.get("timeline");this.get("destroyed")||(this.clear(),t&&t.stop(),this.clearEvents(),this.removeDom(),r.prototype.destroy.call(this))},e}(g2),ky=xzt;var bzt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.isGroup=function(){return!0},e.prototype.isEntityGroup=function(){return!1},e.prototype.clone=function(){for(var t=r.prototype.clone.call(this),n=this.getChildren(),i=0;i=t&&i.minY<=n&&i.maxY>=n},e.prototype.afterAttrsChange=function(t){r.prototype.afterAttrsChange.call(this,t),this.clearCacheBBox()},e.prototype.getBBox=function(){var t=this.cfg.bbox;return t||(t=this.calculateBBox(),this.set("bbox",t)),t},e.prototype.getCanvasBBox=function(){var t=this.cfg.canvasBBox;return t||(t=this.calculateCanvasBBox(),this.set("canvasBBox",t)),t},e.prototype.applyMatrix=function(t){r.prototype.applyMatrix.call(this,t),this.set("canvasBBox",null)},e.prototype.calculateCanvasBBox=function(){var t=this.getBBox(),n=this.getTotalMatrix(),i=t.minX,a=t.minY,o=t.maxX,s=t.maxY;if(n){var l=du(n,[t.minX,t.minY]),u=du(n,[t.maxX,t.minY]),f=du(n,[t.minX,t.maxY]),c=du(n,[t.maxX,t.maxY]);i=Math.min(l[0],u[0],f[0],c[0]),o=Math.max(l[0],u[0],f[0],c[0]),a=Math.min(l[1],u[1],f[1],c[1]),s=Math.max(l[1],u[1],f[1],c[1])}var h=this.attrs;if(h.shadowColor){var d=h.shadowBlur,p=d===void 0?0:d,v=h.shadowOffsetX,m=v===void 0?0:v,g=h.shadowOffsetY,x=g===void 0?0:g,b=i-p+m,S=o+p+m,C=a-p+x,w=s+p+x;i=Math.min(i,b),o=Math.max(o,S),a=Math.min(a,C),s=Math.max(s,w)}return{x:i,y:a,minX:i,minY:a,maxX:o,maxY:s,width:o-i,height:s-a}},e.prototype.clearCacheBBox=function(){this.set("bbox",null),this.set("canvasBBox",null)},e.prototype.isClipShape=function(){return this.get("isClipShape")},e.prototype.isInShape=function(t,n){return!1},e.prototype.isOnlyHitBox=function(){return!1},e.prototype.isHit=function(t,n){var i=this.get("startArrowShape"),a=this.get("endArrowShape"),o=[t,n,1];o=this.invertFromMatrix(o);var s=o[0],l=o[1],u=this._isInBBox(s,l);return this.isOnlyHitBox()?u:!!(u&&!this.isClipped(s,l)&&(this.isInShape(s,l)||i&&i.isHit(s,l)||a&&a.isHit(s,l)))},e}(m2),qv=_zt;var CQ=new Map;function qf(r,e){CQ.set(r,e)}function Kv(r){return CQ.get(r)}function $4(r){var e=r.attr(),t=e.x,n=e.y,i=e.width,a=e.height;return{x:t,y:n,width:i,height:a}}function Q4(r){var e=r.attr(),t=e.x,n=e.y,i=e.r;return{x:t-i,y:n-i,width:i*2,height:i*2}}var bb={};Dn(bb,{distance:()=>ya,getBBoxByArray:()=>tp,getBBoxRange:()=>Szt,isNumberEqual:()=>Ry,piMod:()=>ep});function I2(r){return Math.min.apply(null,r)}function L2(r){return Math.max.apply(null,r)}function ya(r,e,t,n){var i=r-t,a=e-n;return Math.sqrt(i*i+a*a)}function Ry(r,e){return Math.abs(r-e)<.001}function tp(r,e){var t=I2(r),n=I2(e),i=L2(r),a=L2(e);return{x:t,y:n,width:i-t,height:a-n}}function Szt(r,e,t,n){return{minX:I2([r,t]),maxX:L2([r,t]),minY:I2([e,n]),maxY:L2([e,n])}}function ep(r){return(r+Math.PI*2)%(Math.PI*2)}var Vi={box:function(r,e,t,n){return tp([r,t],[e,n])},length:function(r,e,t,n){return ya(r,e,t,n)},pointAt:function(r,e,t,n,i){return{x:(1-i)*r+i*t,y:(1-i)*e+i*n}},pointDistance:function(r,e,t,n,i,a){var o=(t-r)*(i-r)+(n-e)*(a-e);if(o<0)return ya(r,e,i,a);var s=(t-r)*(t-r)+(n-e)*(n-e);return o>s?ya(t,n,i,a):this.pointToLine(r,e,t,n,i,a)},pointToLine:function(r,e,t,n,i,a){var o=[t-r,n-e];if(S4(o,[0,0]))return Math.sqrt((i-r)*(i-r)+(a-e)*(a-e));var s=[-o[1],o[0]];b4(s,s);var l=[i-r,a-e];return Math.abs(_4(l,s))},tangentAngle:function(r,e,t,n){return Math.atan2(n-e,t-r)}};var Czt=1e-4;function O2(r,e,t,n,i,a){var o,s=1/0,l=[t,n],u=20;a&&a>200&&(u=a/10);for(var f=1/u,c=f/10,h=0;h<=u;h++){var d=h*f,p=[i.apply(null,r.concat([d])),i.apply(null,e.concat([d]))],v=ya(l[0],l[1],p[0],p[1]);v=0&&v=0?[i]:[]}function AQ(r,e,t,n){return 2*(1-n)*(e-r)+2*n*(t-e)}function MQ(r,e,t,n,i,a,o){var s=Zv(r,t,i,o),l=Zv(e,n,a,o),u=Vi.pointAt(r,e,t,n,o),f=Vi.pointAt(t,n,i,a,o);return[[r,e,u.x,u.y,s,l],[s,l,f.x,f.y,i,a]]}function J4(r,e,t,n,i,a,o){if(o===0)return(ya(r,e,t,n)+ya(t,n,i,a)+ya(r,e,i,a))/2;var s=MQ(r,e,t,n,i,a,.5),l=s[0],u=s[1];return l.push(o-1),u.push(o-1),J4.apply(null,l)+J4.apply(null,u)}var Dw={box:function(r,e,t,n,i,a){var o=EQ(r,t,i)[0],s=EQ(e,n,a)[0],l=[r,i],u=[e,a];return o!==void 0&&l.push(Zv(r,t,i,o)),s!==void 0&&u.push(Zv(e,n,a,s)),tp(l,u)},length:function(r,e,t,n,i,a){return J4(r,e,t,n,i,a,3)},nearestPoint:function(r,e,t,n,i,a,o,s){return O2([r,t,i],[e,n,a],o,s,Zv)},pointDistance:function(r,e,t,n,i,a,o,s){var l=this.nearestPoint(r,e,t,n,i,a,o,s);return ya(l.x,l.y,o,s)},interpolationAt:Zv,pointAt:function(r,e,t,n,i,a,o){return{x:Zv(r,t,i,o),y:Zv(e,n,a,o)}},divide:function(r,e,t,n,i,a,o){return MQ(r,e,t,n,i,a,o)},tangentAngle:function(r,e,t,n,i,a,o){var s=AQ(r,t,i,o),l=AQ(e,n,a,o),u=Math.atan2(l,s);return ep(u)}};function $v(r,e,t,n,i){var a=1-i;return a*a*a*r+3*e*i*a*a+3*t*i*i*a+n*i*i*i}function TQ(r,e,t,n,i){var a=1-i;return 3*(a*a*(e-r)+2*a*i*(t-e)+i*i*(n-t))}function tz(r,e,t,n){var i=-3*r+9*e-9*t+3*n,a=6*r-12*e+6*t,o=3*e-3*r,s=[],l,u,f;if(Ry(i,0))Ry(a,0)||(l=-o/a,l>=0&&l<=1&&s.push(l));else{var c=a*a-4*i*o;Ry(c,0)?s.push(-a/(2*i)):c>0&&(f=Math.sqrt(c),l=(-a+f)/(2*i),u=(-a-f)/(2*i),l>=0&&l<=1&&s.push(l),u>=0&&u<=1&&s.push(u))}return s}function IQ(r,e,t,n,i,a,o,s,l){var u=$v(r,t,i,o,l),f=$v(e,n,a,s,l),c=Vi.pointAt(r,e,t,n,l),h=Vi.pointAt(t,n,i,a,l),d=Vi.pointAt(i,a,o,s,l),p=Vi.pointAt(c.x,c.y,h.x,h.y,l),v=Vi.pointAt(h.x,h.y,d.x,d.y,l);return[[r,e,c.x,c.y,p.x,p.y,u,f],[u,f,v.x,v.y,d.x,d.y,o,s]]}function ez(r,e,t,n,i,a,o,s,l){if(l===0)return wQ([r,t,i,o],[e,n,a,s]);var u=IQ(r,e,t,n,i,a,o,s,.5),f=u[0],c=u[1];return f.push(l-1),c.push(l-1),ez.apply(null,f)+ez.apply(null,c)}var rp={extrema:tz,box:function(r,e,t,n,i,a,o,s){for(var l=[r,o],u=[e,s],f=tz(r,t,i,o),c=tz(e,n,a,s),h=0;h0?t:t*-1}var OQ={box:function(r,e,t,n){return{x:r-t,y:e-n,width:t*2,height:n*2}},length:function(r,e,t,n){return Math.PI*(3*(t+n)-Math.sqrt((3*t+n)*(t+3*n)))},nearestPoint:function(r,e,t,n,i,a){var o=t,s=n;if(o===0||s===0)return{x:r,y:e};for(var l=i-r,u=a-e,f=Math.abs(l),c=Math.abs(u),h=o*o,d=s*s,p=Math.PI/4,v,m,g=0;g<4;g++){v=o*Math.cos(p),m=s*Math.sin(p);var x=(h-d)*Math.pow(Math.cos(p),3)/o,b=(d-h)*Math.pow(Math.sin(p),3)/s,S=v-x,C=m-b,w=f-x,A=c-b,I=Math.hypot(C,S),P=Math.hypot(A,w),L=I*Math.asin((S*A-C*w)/(I*P)),M=L/Math.sqrt(h+d-v*v-m*m);p+=M,p=Math.min(Math.PI/2,Math.max(0,p))}return{x:r+LQ(v,l),y:e+LQ(m,u)}},pointDistance:function(r,e,t,n,i,a){var o=this.nearestPoint(r,e,t,n,i,a);return ya(o.x,o.y,i,a)},pointAt:function(r,e,t,n,i){var a=2*Math.PI*i;return{x:r+t*Math.cos(a),y:e+n*Math.sin(a)}},tangentAngle:function(r,e,t,n,i){var a=2*Math.PI*i,o=Math.atan2(n*Math.cos(a),-t*Math.sin(a));return ep(o)}};function wzt(r,e,t,n,i,a,o,s){return-1*t*Math.cos(i)*Math.sin(s)-n*Math.sin(i)*Math.cos(s)}function Ezt(r,e,t,n,i,a,o,s){return-1*t*Math.sin(i)*Math.sin(s)+n*Math.cos(i)*Math.cos(s)}function Azt(r,e,t){return Math.atan(-e/r*Math.tan(t))}function Mzt(r,e,t){return Math.atan(e/(r*Math.tan(t)))}function DQ(r,e,t,n,i,a){return t*Math.cos(i)*Math.cos(a)-n*Math.sin(i)*Math.sin(a)+r}function PQ(r,e,t,n,i,a){return t*Math.sin(i)*Math.cos(a)+n*Math.cos(i)*Math.sin(a)+e}function Tzt(r,e,t,n){var i=Math.atan2(n*r,t*e);return(i+Math.PI*2)%(Math.PI*2)}function kQ(r,e,t){return{x:r*Math.cos(t),y:e*Math.sin(t)}}function RQ(r,e,t){var n=Math.cos(t),i=Math.sin(t);return[r*n-e*i,r*i+e*n]}var rz={box:function(r,e,t,n,i,a,o){for(var s=Azt(t,n,i),l=1/0,u=-1/0,f=[a,o],c=-Math.PI*2;c<=Math.PI*2;c+=Math.PI){var h=s+c;au&&(u=d)}for(var p=Mzt(t,n,i),v=1/0,m=-1/0,g=[a,o],c=-Math.PI*2;c<=Math.PI*2;c+=Math.PI){var x=p+c;am&&(m=b)}return{x:l,y:v,width:u-l,height:m-v}},length:function(r,e,t,n,i,a,o){},nearestPoint:function(r,e,t,n,i,a,o,s,l){var u=RQ(s-r,l-e,-i),f=u[0],c=u[1],h=OQ.nearestPoint(0,0,t,n,f,c),d=Tzt(t,n,h.x,h.y);do&&(h=kQ(t,n,o));var p=RQ(h.x,h.y,i);return{x:p[0]+r,y:p[1]+e}},pointDistance:function(r,e,t,n,i,a,o,s,l){var u=this.nearestPoint(r,e,t,n,s,l);return ya(u.x,u.y,s,l)},pointAt:function(r,e,t,n,i,a,o,s){var l=(o-a)*s+a;return{x:DQ(r,e,t,n,i,l),y:PQ(r,e,t,n,i,l)}},tangentAngle:function(r,e,t,n,i,a,o,s){var l=(o-a)*s+a,u=wzt(r,e,t,n,i,a,o,l),f=Ezt(r,e,t,n,i,a,o,l);return ep(Math.atan2(f,u))}};function NQ(r){for(var e=0,t=[],n=0;n1||e<0||r.length<2)return null;var t=NQ(r),n=t.segments,i=t.totalLength;if(i===0)return{x:r[0][0],y:r[0][1]};for(var a=0,o=null,s=0;s=a&&e<=a+c){var h=(e-a)/c;o=Vi.pointAt(u[0],u[1],f[0],f[1],h);break}a+=c}return o}function az(r,e){if(e>1||e<0||r.length<2)return 0;for(var t=NQ(r),n=t.segments,i=t.totalLength,a=0,o=0,s=0;s=a&&e<=a+c){o=Math.atan2(f[1]-u[1],f[0]-u[0]);break}a+=c}return o}function oz(r,e,t){for(var n=1/0,i=0;i1){var i=Izt(e,t);return e*n+i*(n-1)}return e}function Izt(r,e){return e?e-r:r*.14}function zQ(r,e){var t=Ny(),n=0;if((0,Gn.isNil)(r)||r==="")return n;if(t.save(),t.font=e,(0,Gn.isString)(r)&&r.includes(` +`)){var i=r.split(` +`);(0,Gn.each)(i,function(a){var o=t.measureText(a).width;n1){var i=t[0].charAt(0);t.splice(1,0,t[0].substr(1)),t[0]=i}(0,Gy.each)(t,function(a,o){isNaN(a)||(t[o]=+a)}),e[n]=t}),e}var lz=Dzt;function kzt(r,e,t,n){var i=[],a=!!n,o,s,l,u,f,c,h;if(a){l=n[0],u=n[1];for(var d=0,p=r.length;d2&&(t.push([i].concat(o.splice(0,2))),s="l",i=i==="m"?"l":"L"),s==="o"&&o.length===1&&t.push([i,o[0]]),s==="r")t.push([i].concat(o));else for(;o.length>=e[s]&&(t.push([i].concat(o.splice(0,e[s]))),!!e[s]););return""}),t}var Gzt=/[a-z]/;function WQ(r,e){return[e[0]+(e[0]-r[0]),e[1]+(e[1]-r[1])]}function Uy(r){var e=Kf(r);if(!e||!e.length)return[["M",0,0]];for(var t=!1,n=0;n=0){t=!0;break}}if(!t)return e;var a=[],o=0,s=0,l=0,u=0,f=0,c,h,d=e[0];(d[0]==="M"||d[0]==="m")&&(o=+d[1],s=+d[2],l=o,u=s,f++,a[0]=["M",o,s]);for(var n=f,p=e.length;n1&&(t*=Math.sqrt(d),n*=Math.sqrt(d));var p=t*t*(h*h)+n*n*(c*c),v=p?Math.sqrt((t*t*(n*n)-p)/p):1;a===o&&(v*=-1),isNaN(v)&&(v=0);var m=n?v*t*h/n:0,g=t?v*-n*c/t:0,x=(s+u)/2+Math.cos(i)*m-Math.sin(i)*g,b=(l+f)/2+Math.sin(i)*m+Math.cos(i)*g,S=[(c-m)/t,(h-g)/n],C=[(-1*c-m)/t,(-1*h-g)/n],w=VQ([1,0],S),A=VQ(S,C);return uz(S,C)<=-1&&(A=Math.PI),uz(S,C)>=1&&(A=0),o===0&&A>0&&(A=A-2*Math.PI),o===1&&A<0&&(A=A+2*Math.PI),{cx:x,cy:b,rx:k2(r,[u,f])?0:t,ry:k2(r,[u,f])?0:n,startAngle:w,endAngle:w+A,xRotation:i,arcFlag:a,sweepFlag:o}}function HQ(r,e){return[e[0]+(e[0]-r[0]),e[1]+(e[1]-r[1])]}function Cb(r){r=lz(r);for(var e=[],t=null,n=null,i=null,a=0,o=r.length,s=0;s=e&&r<=t};function N2(r,e,t,n){var i=.001,a={x:t.x-r.x,y:t.y-r.y},o={x:e.x-r.x,y:e.y-r.y},s={x:n.x-t.x,y:n.y-t.y},l=o.x*s.y-o.y*s.x,u=l*l,f=o.x*o.x+o.y*o.y,c=s.x*s.x+s.y*s.y,h=null;if(u>i*f*c){var d=(a.x*s.y-a.y*s.x)/l,p=(a.x*o.y-a.y*o.x)/l;YQ(d,0,1)&&YQ(p,0,1)&&(h={x:r.x+d*o.x,y:r.y+d*o.y})}return h}var Wzt=1e-6;function fz(r){return Math.abs(r)0!=fz(s[1]-t)>0&&fz(e-(t-o[1])*(o[0]-s[0])/(o[1]-s[1])-o[0])<0&&(n=!n)}return n}var Rw=U(q());function XQ(r){for(var e=[],t=r.length,n=0;n1){var o=r[0],s=r[t-1];e.push({from:{x:s[0],y:s[1]},to:{x:o[0],y:o[1]}})}return e}function Hzt(r,e){var t=!1;return(0,Rw.each)(r,function(n){if(N2(n.from,n.to,e.from,e.to))return t=!0,!1}),t}function qQ(r){var e=r.map(function(n){return n[0]}),t=r.map(function(n){return n[1]});return{minX:Math.min.apply(null,e),maxX:Math.max.apply(null,e),minY:Math.min.apply(null,t),maxY:Math.max.apply(null,t)}}function Yzt(r,e){return!(e.minX>r.maxX||e.maxXr.maxY||e.maxYMath.PI/2?Math.PI-u:u,f=f>Math.PI/2?Math.PI-f:f;var c={xExtra:Math.cos(l/2-u)*(e/2*(1/Math.sin(l/2)))-e/2||0,yExtra:Math.cos(f-l/2)*(e/2*(1/Math.sin(l/2)))-e/2||0};return c}function KQ(r){var e=r.attr(),t=e.path,n=e.stroke,i=n?e.lineWidth:0,a=r.get("segments")||Cb(t),o=Xzt(a,i),s=o.x,l=o.y,u=o.width,f=o.height,c={minX:s,minY:l,maxX:s+u,maxY:l+f};return c=Sb(r,c),{x:c.minX,y:c.minY,width:c.maxX-c.minX,height:c.maxY-c.minY}}function ZQ(r){var e=r.attr(),t=e.x1,n=e.y1,i=e.x2,a=e.y2,o=Math.min(t,i),s=Math.max(t,i),l=Math.min(n,a),u=Math.max(n,a),f={minX:o,maxX:s,minY:l,maxY:u};return f=Sb(r,f),{x:f.minX,y:f.minY,width:f.maxX-f.minX,height:f.maxY-f.minY}}function $Q(r){var e=r.attr(),t=e.x,n=e.y,i=e.rx,a=e.ry;return{x:t-i,y:n-a,width:i*2,height:a*2}}qf("rect",$4);qf("image",$4);qf("circle",Q4);qf("marker",Q4);qf("polyline",BQ);qf("polygon",GQ);qf("text",UQ);qf("path",KQ);qf("line",ZQ);qf("ellipse",$Q);var Jv=U(q());var cz=0,QQ=1/2,JQ=1/2,tJ=.05;var qzt=function(){function r(e){var t=e.xField,n=e.yField,i=e.adjustNames,a=i===void 0?["x","y"]:i;this.adjustNames=a,this.xField=t,this.yField=n}return r.prototype.isAdjust=function(e){return this.adjustNames.indexOf(e)>=0},r.prototype.getAdjustRange=function(e,t,n){var i=this.yField,a=n.indexOf(t),o=n.length,s,l;return!i&&this.isAdjust("y")?(s=0,l=1):o>1?(s=n[a===0?0:a-1],l=n[a===o-1?o-1:a+1],a!==0?s+=(t-s)/2:s-=(l-t)/2,a!==o-1?l-=(l-t)/2:l+=(t-n[o-2])/2):(s=t===0?0:t-.5,l=t===0?1:t+.5),{pre:s,next:l}},r.prototype.adjustData=function(e,t){var n=this,i=this.getDimValues(t);Jv.each(e,function(a,o){Jv.each(i,function(s,l){n.adjustDim(l,s,a,o)})})},r.prototype.groupData=function(e,t){return Jv.each(e,function(n){n[t]===void 0&&(n[t]=cz)}),Jv.groupBy(e,t)},r.prototype.adjustDim=function(e,t,n,i){},r.prototype.getDimValues=function(e){var t=this,n=t.xField,i=t.yField,a={},o=[];if(n&&this.isAdjust("x")&&o.push(n),i&&this.isAdjust("y")&&o.push(i),o.forEach(function(l){a[l]=Jv.valuesOfKey(e,l).sort(function(u,f){return u-f})}),!i&&this.isAdjust("y")){var s="y";a[s]=[cz,1]}return a},r}(),Zf=qzt;var eJ={},Nw=function(r){return eJ[r.toLowerCase()]},wb=function(r,e){if(Nw(r))throw new Error("Adjust type '"+r+"' existed.");eJ[r.toLowerCase()]=e};var CJ=U(SJ()),{__extends:tm,__assign:ih,__rest:XSe,__decorate:qSe,__param:KSe,__metadata:ZSe,__awaiter:$Se,__generator:QSe,__exportStar:JSe,__createBinding:tCe,__values:eCe,__read:rCe,__spread:nCe,__spreadArrays:iCe,__await:aCe,__asyncGenerator:oCe,__asyncDelegator:sCe,__asyncValues:lCe,__makeTemplateObject:uCe,__importStar:fCe,__importDefault:cCe,__classPrivateFieldGet:hCe,__classPrivateFieldSet:dCe}=CJ.default;var ua=U(q());var Kzt=function(r){tm(e,r);function e(t){var n=r.call(this,t)||this;n.cacheMap={},n.adjustDataArray=[],n.mergeData=[];var i=t.marginRatio,a=i===void 0?QQ:i,o=t.dodgeRatio,s=o===void 0?JQ:o,l=t.dodgeBy,u=t.intervalPadding,f=t.dodgePadding,c=t.xDimensionLength,h=t.groupNum,d=t.defaultSize,p=t.maxColumnWidth,v=t.minColumnWidth,m=t.columnWidthRatio;return n.marginRatio=a,n.dodgeRatio=s,n.dodgeBy=l,n.intervalPadding=u,n.dodgePadding=f,n.xDimensionLegenth=c,n.groupNum=h,n.defaultSize=d,n.maxColumnWidth=p,n.minColumnWidth=v,n.columnWidthRatio=m,n}return e.prototype.process=function(t){var n=ua.clone(t),i=ua.flatten(n),a=this.dodgeBy,o=a?ua.group(i,a):n;return this.cacheMap={},this.adjustDataArray=o,this.mergeData=i,this.adjustData(o,i),this.adjustDataArray=[],this.mergeData=[],n},e.prototype.adjustDim=function(t,n,i,a){var o=this,s=this.getDistribution(t),l=this.groupData(i,t);return ua.each(l,function(u,f){var c;n.length===1?c={pre:n[0]-1,next:n[0]+1}:c=o.getAdjustRange(t,parseFloat(f),n),ua.each(u,function(h){var d=h[t],p=s[d],v=p.indexOf(a);h[t]=o.getDodgeOffset(c,v,p.length)})}),[]},e.prototype.getDodgeOffset=function(t,n,i){var a=this,o=a.dodgeRatio,s=a.marginRatio,l=a.intervalPadding,u=a.dodgePadding,f=t.pre,c=t.next,h=c-f,d;if(!ua.isNil(l)&&ua.isNil(u)&&l>=0){var p=this.getIntervalOnlyOffset(i,n);d=f+p}else if(!ua.isNil(u)&&ua.isNil(l)&&u>=0){var p=this.getDodgeOnlyOffset(i,n);d=f+p}else if(!ua.isNil(l)&&!ua.isNil(u)&&l>=0&&u>=0){var p=this.getIntervalAndDodgeOffset(i,n);d=f+p}else{var v=h*o/i,m=s*v,p=1/2*(h-i*v-(i-1)*m)+((n+1)*v+n*m)-1/2*v-1/2*h;d=(f+c)/2+p}return d},e.prototype.getIntervalOnlyOffset=function(t,n){var i=this,a=i.defaultSize,o=i.intervalPadding,s=i.xDimensionLegenth,l=i.groupNum,u=i.dodgeRatio,f=i.maxColumnWidth,c=i.minColumnWidth,h=i.columnWidthRatio,d=o/s,p=(1-(l-1)*d)/l*u/(t-1),v=((1-d*(l-1))/l-p*(t-1))/t;if(v=ua.isNil(h)?v:1/l/t*h,!ua.isNil(f)){var m=f/s;v=Math.min(v,m)}if(!ua.isNil(c)){var g=c/s;v=Math.max(v,g)}v=a?a/s:v,p=((1-(l-1)*d)/l-t*v)/(t-1);var x=((1/2+n)*v+n*p+1/2*d)*l-d/2;return x},e.prototype.getDodgeOnlyOffset=function(t,n){var i=this,a=i.defaultSize,o=i.dodgePadding,s=i.xDimensionLegenth,l=i.groupNum,u=i.marginRatio,f=i.maxColumnWidth,c=i.minColumnWidth,h=i.columnWidthRatio,d=o/s,p=1*u/(l-1),v=((1-p*(l-1))/l-d*(t-1))/t;if(v=h?1/l/t*h:v,!ua.isNil(f)){var m=f/s;v=Math.min(v,m)}if(!ua.isNil(c)){var g=c/s;v=Math.max(v,g)}v=a?a/s:v,p=(1-(v*t+d*(t-1))*l)/(l-1);var x=((1/2+n)*v+n*d+1/2*p)*l-p/2;return x},e.prototype.getIntervalAndDodgeOffset=function(t,n){var i=this,a=i.intervalPadding,o=i.dodgePadding,s=i.xDimensionLegenth,l=i.groupNum,u=a/s,f=o/s,c=((1-u*(l-1))/l-f*(t-1))/t,h=((1/2+n)*c+n*f+1/2*u)*l-u/2;return h},e.prototype.getDistribution=function(t){var n=this.adjustDataArray,i=this.cacheMap,a=i[t];return a||(a={},ua.each(n,function(o,s){var l=ua.valuesOfKey(o,t);l.length||l.push(0),ua.each(l,function(u){a[u]||(a[u]=[]),a[u].push(s)})}),i[t]=a),a},e}(Zf),wJ=Kzt;var jy=U(q());function Zzt(r,e){return(e-r)*Math.random()+r}var $zt=function(r){tm(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.process=function(t){var n=jy.clone(t),i=jy.flatten(n);return this.adjustData(n,i),n},e.prototype.adjustDim=function(t,n,i){var a=this,o=this.groupData(i,t);return jy.each(o,function(s,l){return a.adjustGroup(s,t,parseFloat(l),n)})},e.prototype.getAdjustOffset=function(t){var n=t.pre,i=t.next,a=(i-n)*tJ;return Zzt(n+a,i-a)},e.prototype.adjustGroup=function(t,n,i,a){var o=this,s=this.getAdjustRange(n,i,a);return jy.each(t,function(l){l[n]=o.getAdjustOffset(s)}),t},e}(Zf),EJ=$zt;var np=U(q());var dz=np.Cache,Qzt=function(r){tm(e,r);function e(t){var n=r.call(this,t)||this,i=t.adjustNames,a=i===void 0?["y"]:i,o=t.height,s=o===void 0?NaN:o,l=t.size,u=l===void 0?10:l,f=t.reverseOrder,c=f===void 0?!1:f;return n.adjustNames=a,n.height=s,n.size=u,n.reverseOrder=c,n}return e.prototype.process=function(t){var n=this,i=n.yField,a=n.reverseOrder,o=i?this.processStack(t):this.processOneDimStack(t);return a?this.reverse(o):o},e.prototype.reverse=function(t){return t.slice(0).reverse()},e.prototype.processStack=function(t){var n=this,i=n.xField,a=n.yField,o=n.reverseOrder,s=o?this.reverse(t):t,l=new dz,u=new dz;return s.map(function(f){return f.map(function(c){var h,d=np.get(c,i,0),p=np.get(c,[a]),v=d.toString();if(p=np.isArray(p)?p[1]:p,!np.isNil(p)){var m=p>=0?l:u;m.has(v)||m.set(v,0);var g=m.get(v),x=p+g;return m.set(v,x),ih(ih({},c),(h={},h[a]=[g,x],h))}return c})})},e.prototype.processOneDimStack=function(t){var n=this,i=this,a=i.xField,o=i.height,s=i.reverseOrder,l="y",u=s?this.reverse(t):t,f=new dz;return u.map(function(c){return c.map(function(h){var d,p=n.size,v=h[a],m=p*2/o;f.has(v)||f.set(v,m/2);var g=f.get(v);return f.set(v,g+m),ih(ih({},h),(d={},d[l]=g,d))})})},e}(Zf),AJ=Qzt;var Cs=U(q());var Jzt=function(r){tm(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.process=function(t){var n=Cs.flatten(t),i=this,a=i.xField,o=i.yField,s=this.getXValuesMaxMap(n),l=Math.max.apply(Math,Object.keys(s).map(function(u){return s[u]}));return Cs.map(t,function(u){return Cs.map(u,function(f){var c,h,d=f[o],p=f[a];if(Cs.isArray(d)){var v=(l-s[p])/2;return ih(ih({},f),(c={},c[o]=Cs.map(d,function(g){return v+g}),c))}var m=(l-d)/2;return ih(ih({},f),(h={},h[o]=[m,d+m],h))})})},e.prototype.getXValuesMaxMap=function(t){var n=this,i=this,a=i.xField,o=i.yField,s=Cs.groupBy(t,function(l){return l[a]});return Cs.mapValues(s,function(l){return n.getDimMaxValue(l,o)})},e.prototype.getDimMaxValue=function(t,n){var i=Cs.map(t,function(o){return Cs.get(o,n,[])}),a=Cs.flatten(i);return Math.max.apply(Math,a)},e}(Zf),MJ=Jzt;wb("Dodge",wJ);wb("Jitter",EJ);wb("Stack",AJ);wb("Symmetric",MJ);var Ab=U(q()),TJ=function(r,e){return(0,Ab.isString)(e)?e:r.invert(r.scale(e))},tUt=function(){function r(e){this.names=[],this.scales=[],this.linear=!1,this.values=[],this.callback=function(){return[]},this._parseCfg(e)}return r.prototype.mapping=function(){for(var e=this,t=[],n=0;n1?1:Number(e),n=r.length-1,i=Math.floor(n*t),a=n*t-i,o=r[i],s=i===n?o:r[i+1];return $J([vz(o,s,a,0),vz(o,s,a,1),vz(o,s,a,2)])},W2,JJ=function(r){if(r[0]==="#"&&r.length===7)return r;W2||(W2=oUt()),W2.style.color=r;var e=document.defaultView.getComputedStyle(W2,"").getPropertyValue("color"),t=eUt.exec(e),n=t[1].split(/\s*,\s*/).map(function(i){return Number(i)});return e=$J(n),e},lUt=function(r){var e=(0,em.isString)(r)?r.split("-"):r,t=(0,em.map)(e,function(n){return QJ(n.indexOf("#")===-1?JJ(n):n)});return function(n){return sUt(t,n)}},uUt=function(r){if(aUt(r)){var e,t=void 0;if(r[0]==="l"){var n=rUt.exec(r),i=+n[1]+90;t=n[2],e="linear-gradient("+i+"deg, "}else if(r[0]==="r"){e="radial-gradient(";var n=nUt.exec(r);t=n[4]}var a=t.match(iUt);return(0,em.each)(a,function(o,s){var l=o.split(":");e+=l[1]+" "+l[0]*100+"%",s!==a.length-1&&(e+=", ")}),e+=")",e}return r},mu={rgb2arr:QJ,gradient:lUt,toRGB:(0,em.memoize)(JJ),toCSSGradient:uUt};var ttt=U(q());var fUt=function(r){ah(e,r);function e(t){var n=r.call(this,t)||this;return n.type="color",n.names=["color"],(0,ttt.isString)(n.values)&&(n.linear=!0),n.gradient=mu.gradient(n.values),n}return e.prototype.getLinearValue=function(t){return this.gradient(t)},e}(vu),gz=fUt;var cUt=function(r){ah(e,r);function e(t){var n=r.call(this,t)||this;return n.type="opacity",n.names=["opacity"],n}return e}(vu),ett=cUt;var Tb=U(q());var hUt=function(r){ah(e,r);function e(t){var n=r.call(this,t)||this;return n.names=["x","y"],n.type="position",n}return e.prototype.mapping=function(t,n){var i=this.scales,a=i[0],o=i[1];return(0,Tb.isNil)(t)||(0,Tb.isNil)(n)?[]:[(0,Tb.isArray)(t)?t.map(function(s){return a.scale(s)}):a.scale(t),(0,Tb.isArray)(n)?n.map(function(s){return o.scale(s)}):o.scale(n)]},e}(vu),rtt=hUt;var dUt=function(r){ah(e,r);function e(t){var n=r.call(this,t)||this;return n.type="shape",n.names=["shape"],n}return e.prototype.getLinearValue=function(t){var n=Math.round((this.values.length-1)*t);return this.values[n]},e}(vu),ntt=dUt;var pUt=function(r){ah(e,r);function e(t){var n=r.call(this,t)||this;return n.type="size",n.names=["size"],n}return e}(vu),itt=pUt;var Go=U(q());var att={};function V2(r){return att[r]}function Yu(r,e){att[r]=e}var vUt=function(){function r(e){this.type="base",this.isCategory=!1,this.isLinear=!1,this.isContinuous=!1,this.isIdentity=!1,this.values=[],this.range=[0,1],this.ticks=[],this.__cfg__=e,this.initCfg(),this.init()}return r.prototype.translate=function(e){return e},r.prototype.change=function(e){(0,Go.assign)(this.__cfg__,e),this.init()},r.prototype.clone=function(){return this.constructor(this.__cfg__)},r.prototype.getTicks=function(){var e=this;return(0,Go.map)(this.ticks,function(t,n){return(0,Go.isObject)(t)?t:{text:e.getText(t,n),tickValue:t,value:e.scale(t)}})},r.prototype.getText=function(e,t){var n=this.formatter,i=n?n(e,t):e;return(0,Go.isNil)(i)||!(0,Go.isFunction)(i.toString)?"":i.toString()},r.prototype.getConfig=function(e){return this.__cfg__[e]},r.prototype.init=function(){(0,Go.assign)(this,this.__cfg__),this.setDomain(),(0,Go.isEmpty)(this.getConfig("ticks"))&&(this.ticks=this.calculateTicks())},r.prototype.initCfg=function(){},r.prototype.setDomain=function(){},r.prototype.calculateTicks=function(){var e=this.tickMethod,t=[];if((0,Go.isString)(e)){var n=V2(e);if(!n)throw new Error("There is no method to to calculate ticks!");t=n(this)}else(0,Go.isFunction)(e)&&(t=e(this));return t},r.prototype.rangeMin=function(){return this.range[0]},r.prototype.rangeMax=function(){return this.range[1]},r.prototype.calcPercent=function(e,t,n){return(0,Go.isNumber)(e)?(e-t)/(n-t):NaN},r.prototype.calcValue=function(e,t,n){return t+e*(n-t)},r}(),Xu=vUt;var Ib=U(q());var mUt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="cat",t.isCategory=!0,t}return e.prototype.buildIndexMap=function(){if(!this.translateIndexMap){this.translateIndexMap=new Map;for(var t=0;tthis.max?NaN:this.values[a]},e.prototype.getText=function(t){for(var n=[],i=1;i1?t-1:t}this.translateIndexMap&&(this.translateIndexMap=void 0)},e}(Xu),oh=mUt;var q2=U(q());var Lb=U(q());var bz={};Dn(bz,{assign:()=>im,default:()=>xz,defaultI18n:()=>yz,format:()=>btt,parse:()=>_tt,setGlobalDateI18n:()=>htt,setGlobalDateMasks:()=>xtt});var ott=/d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|Z|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g,rm="[1-9]\\d?",nm="\\d\\d",gUt="\\d{3}",yUt="\\d{4}",Fw="[^\\s]+",stt=/\[([^]*?)\]/gm;function ltt(r,e){for(var t=[],n=0,i=r.length;n-1?i:null}};function im(r){for(var e=[],t=1;t3?0:(r-r%10!=10?1:0)*r%10]}},H2=im({},yz),htt=function(r){return H2=im(H2,r)},dtt=function(r){return r.replace(/[|\\{()[^$+*?.-]/g,"\\$&")},Il=function(r,e){for(e===void 0&&(e=2),r=String(r);r.length0?"-":"+")+Il(Math.floor(Math.abs(e)/60)*100+Math.abs(e)%60,4)},Z:function(r){var e=r.getTimezoneOffset();return(e>0?"-":"+")+Il(Math.floor(Math.abs(e)/60),2)+":"+Il(Math.abs(e)%60,2)}},ptt=function(r){return+r-1},vtt=[null,rm],mtt=[null,Fw],gtt=["isPm",Fw,function(r,e){var t=r.toLowerCase();return t===e.amPm[0]?0:t===e.amPm[1]?1:null}],ytt=["timezoneOffset","[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z?",function(r){var e=(r+"").match(/([+-]|\d\d)/gi);if(e){var t=+e[1]*60+parseInt(e[2],10);return e[0]==="+"?t:-t}return 0}],SUt={D:["day",rm],DD:["day",nm],Do:["day",rm+Fw,function(r){return parseInt(r,10)}],M:["month",rm,ptt],MM:["month",nm,ptt],YY:["year",nm,function(r){var e=new Date,t=+(""+e.getFullYear()).substr(0,2);return+(""+(+r>68?t-1:t)+r)}],h:["hour",rm,void 0,"isPm"],hh:["hour",nm,void 0,"isPm"],H:["hour",rm],HH:["hour",nm],m:["minute",rm],mm:["minute",nm],s:["second",rm],ss:["second",nm],YYYY:["year",yUt],S:["millisecond","\\d",function(r){return+r*100}],SS:["millisecond",nm,function(r){return+r*10}],SSS:["millisecond",gUt],d:vtt,dd:vtt,ddd:mtt,dddd:mtt,MMM:["month",Fw,utt("monthNamesShort")],MMMM:["month",Fw,utt("monthNames")],a:gtt,A:gtt,ZZ:ytt,Z:ytt},Y2={default:"ddd MMM DD YYYY HH:mm:ss",shortDate:"M/D/YY",mediumDate:"MMM D, YYYY",longDate:"MMMM D, YYYY",fullDate:"dddd, MMMM D, YYYY",isoDate:"YYYY-MM-DD",isoDateTime:"YYYY-MM-DDTHH:mm:ssZ",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"},xtt=function(r){return im(Y2,r)},btt=function(r,e,t){if(e===void 0&&(e=Y2.default),t===void 0&&(t={}),typeof r=="number"&&(r=new Date(r)),Object.prototype.toString.call(r)!=="[object Date]"||isNaN(r.getTime()))throw new Error("Invalid Date pass to format");e=Y2[e]||e;var n=[];e=e.replace(stt,function(a,o){return n.push(o),"@@@"});var i=im(im({},H2),t);return e=e.replace(ott,function(a){return _Ut[a](r,i)}),e.replace(/@@@/g,function(){return n.shift()})};function _tt(r,e,t){if(t===void 0&&(t={}),typeof e!="string")throw new Error("Invalid format in fecha parse");if(e=Y2[e]||e,r.length>1e3)return null;var n=new Date,i={year:n.getFullYear(),month:0,day:1,hour:0,minute:0,second:0,millisecond:0,isPm:null,timezoneOffset:null},a=[],o=[],s=e.replace(stt,function(S,C){return o.push(dtt(C)),"@@@"}),l={},u={};s=dtt(s).replace(ott,function(S){var C=SUt[S],w=C[0],A=C[1],I=C[3];if(l[w])throw new Error("Invalid format. "+w+" specified twice in format");return l[w]=!0,I&&(u[I]=!0),a.push(C),"("+A+")"}),Object.keys(u).forEach(function(S){if(!l[S])throw new Error("Invalid format. "+S+" is required in specified format")}),s=s.replace(/@@@/g,function(){return o.shift()});var f=r.match(new RegExp(s,"i"));if(!f)return null;for(var c=im(im({},H2),t),h=1;h>>1;r(e[s])>t?o=s:a=s+1}return a}}var Ctt="format";function X2(r,e){var t=bz[Ctt]||xz[Ctt];return t(r,e)}function Ob(r){return(0,Lb.isString)(r)&&(r.indexOf("T")>0?r=new Date(r).getTime():r=new Date(r.replace(/-/gi,"/")).getTime()),(0,Lb.isDate)(r)&&(r=r.getTime()),r}var qu=1e3,am=60*qu,om=60*am,sh=24*om,Db=sh*31,Sz=sh*365;var Bw=[["HH:mm:ss",qu],["HH:mm:ss",qu*10],["HH:mm:ss",qu*30],["HH:mm",am],["HH:mm",am*10],["HH:mm",am*30],["HH",om],["HH",om*6],["HH",om*12],["YYYY-MM-DD",sh],["YYYY-MM-DD",sh*4],["YYYY-WW",sh*7],["YYYY-MM",Db],["YYYY-MM",Db*4],["YYYY-MM",Db*6],["YYYY",sh*380]];function wtt(r,e,t){var n=(e-r)/t,i=Stt(function(o){return o[1]})(Bw,n)-1,a=Bw[i];return i<0?a=Bw[0]:i>=Bw.length&&(a=(0,Lb.last)(Bw)),a}var wUt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="timeCat",t}return e.prototype.translate=function(t){t=Ob(t);var n=this.values.indexOf(t);return n===-1&&((0,q2.isNumber)(t)&&t-1){var a=this.values[i],o=this.formatter;return a=o?o(a,n):X2(a,this.mask),a}return t},e.prototype.initCfg=function(){this.tickMethod="time-cat",this.mask="YYYY-MM-DD",this.tickCount=7},e.prototype.setDomain=function(){var t=this.values;(0,q2.each)(t,function(n,i){t[i]=Ob(n)}),t.sort(function(n,i){return n-i}),r.prototype.setDomain.call(this)},e}(oh),Ett=wUt;var Ll=U(q());var EUt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.isContinuous=!0,t}return e.prototype.scale=function(t){if((0,Ll.isNil)(t))return NaN;var n=this.rangeMin(),i=this.rangeMax(),a=this.max,o=this.min;if(a===o)return n;var s=this.getScalePercent(t);return n+s*(i-n)},e.prototype.init=function(){r.prototype.init.call(this);var t=this.ticks,n=(0,Ll.head)(t),i=(0,Ll.last)(t);nthis.max&&(this.max=i),(0,Ll.isNil)(this.minLimit)||(this.min=n),(0,Ll.isNil)(this.maxLimit)||(this.max=i)},e.prototype.setDomain=function(){var t=(0,Ll.getRange)(this.values),n=t.min,i=t.max;(0,Ll.isNil)(this.min)&&(this.min=n),(0,Ll.isNil)(this.max)&&(this.max=i),this.min>this.max&&(this.min=n,this.max=i)},e.prototype.calculateTicks=function(){var t=this,n=r.prototype.calculateTicks.call(this);return this.nice||(n=(0,Ll.filter)(n,function(i){return i>=t.min&&i<=t.max})),n},e.prototype.getScalePercent=function(t){var n=this.max,i=this.min;return(t-i)/(n-i)},e.prototype.getInvertPercent=function(t){return(t-this.rangeMin())/(this.rangeMax()-this.rangeMin())},e}(Xu),sm=EUt;var AUt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="linear",t.isLinear=!0,t}return e.prototype.invert=function(t){var n=this.getInvertPercent(t);return this.min+n*(this.max-this.min)},e.prototype.initCfg=function(){this.tickMethod="wilkinson-extended",this.nice=!1},e}(sm),$f=AUt;var K2=U(q());function lh(r,e){var t=Math.E,n;return e>=0?n=Math.pow(t,Math.log(e)/r):n=Math.pow(t,Math.log(-e)/r)*-1,n}function Ol(r,e){return r===1?1:Math.log(e)/Math.log(r)}function Z2(r,e,t){(0,K2.isNil)(t)&&(t=Math.max.apply(null,r));var n=t;return(0,K2.each)(r,function(i){i>0&&i1&&(n=1),n}var MUt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="log",t}return e.prototype.invert=function(t){var n=this.base,i=Ol(n,this.max),a=this.rangeMin(),o=this.rangeMax()-a,s,l=this.positiveMin;if(l){if(t===0)return 0;s=Ol(n,l/n);var u=1/(i-s)*o;if(t=0?1:-1;return Math.pow(s,i)*l},e.prototype.initCfg=function(){this.tickMethod="pow",this.exponent=2,this.tickCount=5,this.nice=!0},e.prototype.getScalePercent=function(t){var n=this.max,i=this.min;if(n===i)return 0;var a=this.exponent,o=(lh(a,t)-lh(a,i))/(lh(a,n)-lh(a,i));return o},e}(sm),Mtt=TUt;var Dl=U(q());var IUt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="time",t}return e.prototype.getText=function(t,n){var i=this.translate(t),a=this.formatter;return a?a(i,n):X2(i,this.mask)},e.prototype.scale=function(t){var n=t;return((0,Dl.isString)(n)||(0,Dl.isDate)(n))&&(n=this.translate(n)),r.prototype.scale.call(this,n)},e.prototype.translate=function(t){return Ob(t)},e.prototype.initCfg=function(){this.tickMethod="time-pretty",this.mask="YYYY-MM-DD",this.tickCount=7,this.nice=!1},e.prototype.setDomain=function(){var t=this.values,n=this.getConfig("min"),i=this.getConfig("max");if((!(0,Dl.isNil)(n)||!(0,Dl.isNumber)(n))&&(this.min=this.translate(this.min)),(!(0,Dl.isNil)(i)||!(0,Dl.isNumber)(i))&&(this.max=this.translate(this.max)),t&&t.length){var a=[],o=1/0,s=o,l=0;(0,Dl.each)(t,function(u){var f=Ob(u);if(isNaN(f))throw new TypeError("Invalid Time: "+u+" in time scale!");o>f?(s=o,o=f):s>f&&(s=f),l1&&(this.minTickInterval=s-o),(0,Dl.isNil)(n)&&(this.min=o),(0,Dl.isNil)(i)&&(this.max=l)}},e}($f),Ttt=IUt;var uh=U(q());var LUt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="quantize",t}return e.prototype.invert=function(t){var n=this.ticks,i=n.length,a=this.getInvertPercent(t),o=Math.floor(a*(i-1));if(o>=i-1)return(0,uh.last)(n);if(o<0)return(0,uh.head)(n);var s=n[o],l=n[o+1],u=o/(i-1),f=(o+1)/(i-1);return s+(a-u)/(f-u)*(l-s)},e.prototype.initCfg=function(){this.tickMethod="r-pretty",this.tickCount=5,this.nice=!0},e.prototype.calculateTicks=function(){var t=r.prototype.calculateTicks.call(this);return this.nice||((0,uh.last)(t)!==this.max&&t.push(this.max),(0,uh.head)(t)!==this.min&&t.unshift(this.min)),t},e.prototype.getScalePercent=function(t){var n=this.ticks;if(t<(0,uh.head)(n))return 0;if(t>(0,uh.last)(n))return 1;var i=0;return(0,uh.each)(n,function(a,o){if(t>=a)i=o;else return!1}),i/(n.length-1)},e}(sm),$2=LUt;var OUt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="quantile",t}return e.prototype.initCfg=function(){this.tickMethod="quantile",this.tickCount=5,this.nice=!0},e}($2),Itt=OUt;var Ltt={};function Pb(r){return Ltt[r]}function Ku(r,e){if(Pb(r))throw new Error("type '"+r+"' existed.");Ltt[r]=e}var Ott=U(q());var DUt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="identity",t.isIdentity=!0,t}return e.prototype.calculateTicks=function(){return this.values},e.prototype.scale=function(t){return this.values[0]!==t&&(0,Ott.isNumber)(t)?t:this.range[0]},e.prototype.invert=function(t){var n=this.range;return tn[1]?NaN:this.values[0]},e}(Xu),Dtt=DUt;var ip=U(q());var fh=U(q());function lm(r){return Math.abs(r)<1e-15?r:parseFloat(r.toFixed(15))}var PUt=[1,5,2,2.5,4,3];var Ptt=Number.EPSILON*100;function kUt(r,e){return(r%e+e)%e}function RUt(r){return Math.round(r*1e12)/1e12}function NUt(r,e,t,n,i,a){var o=(0,fh.size)(e),s=(0,fh.indexOf)(e,r),l=0,u=kUt(n,a);return(u=0&&(l=1),1-s/(o-1)-t+l}function FUt(r,e,t){var n=(0,fh.size)(e),i=(0,fh.indexOf)(e,r),a=1;return 1-i/(n-1)-t+a}function BUt(r,e,t,n,i,a){var o=(r-1)/(a-i),s=(e-1)/(Math.max(a,n)-Math.min(t,i));return 2-Math.max(o/s,s/o)}function GUt(r,e){return r>=e?2-(r-1)/(e-1):1}function zUt(r,e,t,n){var i=e-r;return 1-.5*(Math.pow(e-n,2)+Math.pow(r-t,2))/Math.pow(.1*i,2)}function UUt(r,e,t){var n=e-r;if(t>n){var i=(t-n)/2;return 1-Math.pow(i,2)/Math.pow(.1*n,2)}return 1}function jUt(){return 1}function Gw(r,e,t,n,i,a){t===void 0&&(t=5),n===void 0&&(n=!0),i===void 0&&(i=PUt),a===void 0&&(a=[.25,.2,.5,.05]);var o=t<0?0:Math.round(t);if(Number.isNaN(r)||Number.isNaN(e)||typeof r!="number"||typeof e!="number"||!o)return{min:0,max:0,ticks:[]};if(e-r<1e-15||o===1)return{min:r,max:e,ticks:[r]};for(var s={score:-2,lmin:0,lmax:0,lstep:0},l=1;l<1/0;){for(var u=0;us.score&&(!n||A<=r&&I>=e)&&(s.lmin=A,s.lmax=I,s.lstep=P,s.score=k)}v+=1}h+=1}}l+=1}var G=lm(s.lmax),D=lm(s.lmin),N=lm(s.lstep),z=Math.floor(RUt((G-D)/N))+1,j=new Array(z);j[0]=lm(D);for(var u=1;u=a&&u<=o});return l.map(function(u){return e[u]})}return e.slice(a,o+1)}var Hy=U(q());function Cz(r){var e=r.min,t=r.max,n=r.nice,i=r.tickCount,a=new WUt;return a.domain([e,t]),n&&a.nice(i),a.ticks(i)}var wz=5,ktt=Math.sqrt(50),Rtt=Math.sqrt(10),Ntt=Math.sqrt(2),WUt=function(){function r(){this._domain=[0,1]}return r.prototype.domain=function(e){return e?(this._domain=Array.from(e,Number),this):this._domain.slice()},r.prototype.nice=function(e){var t,n;e===void 0&&(e=wz);var i=this._domain.slice(),a=0,o=this._domain.length-1,s=this._domain[a],l=this._domain[o],u;return l0?(s=Math.floor(s/u)*u,l=Math.ceil(l/u)*u,u=Q2(s,l,e)):u<0&&(s=Math.ceil(s*u)/u,l=Math.floor(l*u)/u,u=Q2(s,l,e)),u>0?(i[a]=Math.floor(s/u)*u,i[o]=Math.ceil(l/u)*u,this.domain(i)):u<0&&(i[a]=Math.ceil(s*u)/u,i[o]=Math.floor(l*u)/u,this.domain(i)),this},r.prototype.ticks=function(e){return e===void 0&&(e=wz),VUt(this._domain[0],this._domain[this._domain.length-1],e||wz)},r}();function VUt(r,e,t){var n,i=-1,a,o,s;if(e=+e,r=+r,t=+t,r===e&&t>0)return[r];if((n=e0)for(r=Math.ceil(r/s),e=Math.floor(e/s),o=new Array(a=Math.ceil(e-r+1));++i=0?(a>=ktt?10:a>=Rtt?5:a>=Ntt?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=ktt?10:a>=Rtt?5:a>=Ntt?2:1)}var J2=U(q());function Ftt(r,e,t){var n;return t==="ceil"?n=Math.ceil(r/e):t==="floor"?n=Math.floor(r/e):n=Math.round(r/e),n*e}function Wy(r,e,t){var n=Ftt(r,t,"floor"),i=Ftt(e,t,"ceil");n=(0,J2.fixedBase)(n,t),i=(0,J2.fixedBase)(i,t);for(var a=[],o=n;o<=i;o=o+t){var s=(0,J2.fixedBase)(o,t);a.push(s)}return{min:n,max:i,ticks:a}}var Uw=U(q());function Vy(r,e,t){var n,i=r.minLimit,a=r.maxLimit,o=r.min,s=r.max,l=r.tickCount,u=l===void 0?5:l,f=(0,Uw.isNil)(i)?(0,Uw.isNil)(e)?o:e:i,c=(0,Uw.isNil)(a)?(0,Uw.isNil)(t)?s:t:a;if(f>c&&(n=[f,c],c=n[0],f=n[1]),u<=2)return[f,c];for(var h=(c-f)/(u-1),d=[],p=0;p0)o=Math.floor(Ol(e,n));else{var l=Z2(a,e,i);o=Math.floor(Ol(e,l))}for(var u=s-o,f=Math.ceil(u/t),c=[],h=o;h=0?1:-1;return Math.pow(o,e)*s})}function HUt(r,e){var t=r.length*e;return e===1?r[r.length-1]:e===0?r[0]:t%1!=0?r[Math.ceil(t)-1]:r.length%2==0?(r[t-1]+r[t])/2:r[t]}function Iz(r){var e=r.tickCount,t=r.values;if(!t||!t.length)return[];for(var n=t.slice().sort(function(s,l){return s-l}),i=[],a=0;a1&&(i=i*Math.ceil(s)),n&&iSz)for(var l=tL(t),u=Math.ceil(a/Sz),f=s;f<=l+u;f=f+u)o.push(YUt(f));else if(a>Db)for(var c=Math.ceil(a/Db),h=kz(e),d=XUt(e,t),f=0;f<=d+c;f=f+c)o.push(qUt(s,f+h));else if(a>sh)for(var p=new Date(e),v=p.getFullYear(),m=p.getMonth(),g=p.getDate(),x=Math.ceil(a/sh),b=KUt(e,t),f=0;fom)for(var p=new Date(e),v=p.getFullYear(),m=p.getMonth(),x=p.getDate(),S=p.getHours(),C=Math.ceil(a/om),w=ZUt(e,t),f=0;f<=w+C;f=f+C)o.push(new Date(v,m,x,S+f).getTime());else if(a>am)for(var A=$Ut(e,t),I=Math.ceil(a/am),f=0;f<=A+I;f=f+I)o.push(e+f*am);else{var P=a;P=512&&console.warn("Notice: current ticks length("+o.length+') >= 512, may cause performance issues, even out of memory. Because of the configure "tickInterval"(in milliseconds, current is '+a+") is too small, increase the value to solve the problem!"),o}Yu("cat",zw);Yu("time-cat",Pz);Yu("wilkinson-extended",Az);Yu("r-pretty",Lz);Yu("time",Oz);Yu("time-pretty",Rz);Yu("log",Mz);Yu("pow",Tz);Yu("quantile",Iz);Yu("d3-linear",Ez);Ku("cat",oh);Ku("category",oh);Ku("identity",Dtt);Ku("linear",$f);Ku("log",Att);Ku("pow",Mtt);Ku("time",Ttt);Ku("timeCat",Ett);Ku("quantize",$2);Ku("quantile",Itt);var Btt={},Ww=function(r){return Btt[r.toLowerCase()]},kb=function(r,e){if(Ww(r))throw new Error("Attribute type '"+r+"' existed.");Btt[r.toLowerCase()]=e};kb("Color",gz);kb("Opacity",ett);kb("Position",rtt);kb("Shape",ntt);kb("Size",itt);var Gtt=U(q()),QUt=function(){function r(e){this.type="coordinate",this.isRect=!1,this.isHelix=!1,this.isPolar=!1,this.isReflectX=!1,this.isReflectY=!1;var t=e.start,n=e.end,i=e.matrix,a=i===void 0?[1,0,0,0,1,0,0,0,1]:i,o=e.isTransposed,s=o===void 0?!1:o;this.start=t,this.end=n,this.matrix=a,this.originalMatrix=mn([],a),this.isTransposed=s}return r.prototype.initial=function(){this.center={x:(this.start.x+this.end.x)/2,y:(this.start.y+this.end.y)/2},this.width=Math.abs(this.end.x-this.start.x),this.height=Math.abs(this.end.y-this.start.y)},r.prototype.update=function(e){(0,Gtt.assign)(this,e),this.initial()},r.prototype.convertDim=function(e,t){var n,i=this[t],a=i.start,o=i.end;return this.isReflect(t)&&(n=[o,a],a=n[0],o=n[1]),a+e*(o-a)},r.prototype.invertDim=function(e,t){var n,i=this[t],a=i.start,o=i.end;return this.isReflect(t)&&(n=[o,a],a=n[0],o=n[1]),(e-a)/(o-a)},r.prototype.applyMatrix=function(e,t,n){n===void 0&&(n=0);var i=this.matrix,a=[e,t,n];return Ft.transformMat3(a,a,i),a},r.prototype.invertMatrix=function(e,t,n){n===void 0&&(n=0);var i=this.matrix,a=Ai.invert([0,0,0,0,0,0,0,0,0],i),o=[e,t,n];return a&&Ft.transformMat3(o,o,a),o},r.prototype.convert=function(e){var t=this.convertPoint(e),n=t.x,i=t.y,a=this.applyMatrix(n,i,1);return{x:a[0],y:a[1]}},r.prototype.invert=function(e){var t=this.invertMatrix(e.x,e.y,1);return this.invertPoint({x:t[0],y:t[1]})},r.prototype.rotate=function(e){var t=this.matrix,n=this.center;return gr.leftTranslate(t,t,[-n.x,-n.y]),gr.leftRotate(t,t,e),gr.leftTranslate(t,t,[n.x,n.y]),this},r.prototype.reflect=function(e){return e==="x"?this.isReflectX=!this.isReflectX:this.isReflectY=!this.isReflectY,this},r.prototype.scale=function(e,t){var n=this.matrix,i=this.center;return gr.leftTranslate(n,n,[-i.x,-i.y]),gr.leftScale(n,n,[e,t]),gr.leftTranslate(n,n,[i.x,i.y]),this},r.prototype.translate=function(e,t){var n=this.matrix;return gr.leftTranslate(n,n,[e,t]),this},r.prototype.transpose=function(){return this.isTransposed=!this.isTransposed,this},r.prototype.getCenter=function(){return this.center},r.prototype.getWidth=function(){return this.width},r.prototype.getHeight=function(){return this.height},r.prototype.getRadius=function(){return this.radius},r.prototype.isReflect=function(e){return e==="x"?this.isReflectX:this.isReflectY},r.prototype.resetMatrix=function(e){this.matrix=e||mn([],this.originalMatrix)},r}(),ch=QUt;var JUt=function(r){H(e,r);function e(t){var n=r.call(this,t)||this;return n.isRect=!0,n.type="cartesian",n.initial(),n}return e.prototype.initial=function(){r.prototype.initial.call(this);var t=this.start,n=this.end;this.x={start:t.x,end:n.x},this.y={start:t.y,end:n.y}},e.prototype.convertPoint=function(t){var n,i=t.x,a=t.y;return this.isTransposed&&(n=[a,i],i=n[0],a=n[1]),{x:this.convertDim(i,"x"),y:this.convertDim(a,"y")}},e.prototype.invertPoint=function(t){var n,i=this.invertDim(t.x,"x"),a=this.invertDim(t.y,"y");return this.isTransposed&&(n=[a,i],i=n[0],a=n[1]),{x:i,y:a}},e}(ch),Nz=JUt;var eL=U(q());var tjt=function(r){H(e,r);function e(t){var n=r.call(this,t)||this;n.isHelix=!0,n.type="helix";var i=t.startAngle,a=i===void 0?1.25*Math.PI:i,o=t.endAngle,s=o===void 0?7.25*Math.PI:o,l=t.innerRadius,u=l===void 0?0:l,f=t.radius;return n.startAngle=a,n.endAngle=s,n.innerRadius=u,n.radius=f,n.initial(),n}return e.prototype.initial=function(){r.prototype.initial.call(this);var t=(this.endAngle-this.startAngle)/(2*Math.PI)+1,n=Math.min(this.width,this.height)/2;this.radius&&this.radius>=0&&this.radius<=1&&(n=n*this.radius),this.d=Math.floor(n*(1-this.innerRadius)/t),this.a=this.d/(Math.PI*2),this.x={start:this.startAngle,end:this.endAngle},this.y={start:this.innerRadius*n,end:this.innerRadius*n+this.d*.99}},e.prototype.convertPoint=function(t){var n,i=t.x,a=t.y;this.isTransposed&&(n=[a,i],i=n[0],a=n[1]);var o=this.convertDim(i,"x"),s=this.a*o,l=this.convertDim(a,"y");return{x:this.center.x+Math.cos(o)*(s+l),y:this.center.y+Math.sin(o)*(s+l)}},e.prototype.invertPoint=function(t){var n,i=this.d+this.y.start,a=oe.subtract([0,0],[t.x,t.y],[this.center.x,this.center.y]),o=gr.angleTo(a,[1,0],!0),s=o*this.a;oe.length(a)this.width/n?(s=this.width/n,this.circleCenter={x:this.center.x-(.5-a)*this.width,y:this.center.y-(.5-o)*s*i}):(s=this.height/i,this.circleCenter={x:this.center.x-(.5-a)*s*n,y:this.center.y-(.5-o)*this.height}),this.polarRadius=this.radius,this.radius?this.radius>0&&this.radius<=1?this.polarRadius=s*this.radius:(this.radius<=0||this.radius>s)&&(this.polarRadius=s):this.polarRadius=s,this.x={start:this.startAngle,end:this.endAngle},this.y={start:this.innerRadius*this.polarRadius,end:this.polarRadius}},e.prototype.getRadius=function(){return this.polarRadius},e.prototype.convertPoint=function(t){var n,i=this.getCenter(),a=t.x,o=t.y;return this.isTransposed&&(n=[o,a],a=n[0],o=n[1]),a=this.convertDim(a,"x"),o=this.convertDim(o,"y"),{x:i.x+Math.cos(a)*o,y:i.y+Math.sin(a)*o}},e.prototype.invertPoint=function(t){var n,i=this.getCenter(),a=[t.x-i.x,t.y-i.y],o=this,s=o.startAngle,l=o.endAngle;this.isReflect("x")&&(n=[l,s],s=n[0],l=n[1]);var u=[1,0,0,0,1,0,0,0,1];gr.leftRotate(u,u,s);var f=[1,0,0];Ft.transformMat3(f,f,u);var c=[f[0],f[1]],h=gr.angleTo(c,a,l0?p:-p;var v=this.invertDim(d,"y"),m={x:0,y:0};return m.x=this.isTransposed?v:p,m.y=this.isTransposed?p:v,m},e.prototype.getCenter=function(){return this.circleCenter},e.prototype.getOneBox=function(){var t=this.startAngle,n=this.endAngle;if(Math.abs(n-t)>=Math.PI*2)return{minX:-1,maxX:1,minY:-1,maxY:1};for(var i=[0,Math.cos(t),Math.cos(n)],a=[0,Math.sin(t),Math.sin(n)],o=Math.min(t,n);otet,DataMarker:()=>net,DataRegion:()=>iet,Html:()=>set,Image:()=>ret,Line:()=>Qtt,Region:()=>eet,RegionFilter:()=>aet,Shape:()=>oet,Text:()=>Jtt});var oL=U(q());var ao=U(q());function Vw(r,e,t){var n=new Hu(e,t);n.target=r,n.propagationPath.push(r),r.emitDelegation(e,n);for(var i=r.getParent();i;)i.emitDelegation(e,n),n.propagationPath.push(i),i=i.getParent()}var Vtt=[1,0,0,0,1,0,0,0,1];function Qf(r,e,t){if(t===void 0&&(t=Vtt),!e)return null;var n=gr.transform(t,[["t",-r.x,-r.y],["r",e],["t",r.x,r.y]]);return n}function Hw(r,e){return!r.x&&!r.y?null:gr.transform(e||Vtt,[["t",r.x,r.y]])}function Htt(r){var e=[1,0,0],t=[0,0,0];return Ft.transformMat3(t,e,r),Math.atan2(t[1],t[0])}function nL(r,e){var t=[0,0];return oe.transformMat3(t,e,r),t}function Ytt(r,e){var t=nL(r,[e.minX,e.minY]),n=nL(r,[e.maxX,e.minY]),i=nL(r,[e.minX,e.maxY]),a=nL(r,[e.maxX,e.maxY]),o=Math.min(t[0],n[0],i[0],a[0]),s=Math.max(t[0],n[0],i[0],a[0]),l=Math.min(t[1],n[1],i[1],a[1]),u=Math.max(t[1],n[1],i[1],a[1]);return{x:o,y:l,minX:o,minY:l,maxX:s,maxY:u,width:s-o,height:u-l}}function iL(r,e,t,n){if(e){var i=Qf({x:t,y:n},e,r.getMatrix());r.setMatrix(i)}}function um(r,e,t){var n=Hw({x:e,y:t});r.attr("matrix",n)}var hh=U(q());function qy(r){var e=0,t=0,n=0,i=0;return(0,hh.isNumber)(r)?e=t=n=i=r:(0,hh.isArray)(r)&&(e=r[0],n=(0,hh.isNil)(r[1])?r[0]:r[1],i=(0,hh.isNil)(r[2])?r[0]:r[2],t=(0,hh.isNil)(r[3])?n:r[3]),[e,n,i,t]}function Nb(r){for(var e=r.childNodes,t=e.length,n=t-1;n>=0;n--)r.removeChild(e[n])}function Xtt(r,e){return!!r.className.match(new RegExp("(\\s|^)"+e+"(\\s|$)"))}function ap(r){var e=r.start,t=r.end,n=Math.min(e.x,t.x),i=Math.min(e.y,t.y),a=Math.max(e.x,t.x),o=Math.max(e.y,t.y);return{x:n,y:i,minX:n,minY:i,maxX:a,maxY:o,width:a-n,height:o-i}}function qtt(r){var e=r.map(function(s){return s.x}),t=r.map(function(s){return s.y}),n=Math.min.apply(Math,e),i=Math.min.apply(Math,t),a=Math.max.apply(Math,e),o=Math.max.apply(Math,t);return{x:n,y:i,minX:n,minY:i,maxX:a,maxY:o,width:a-n,height:o-i}}function Fb(r,e,t,n){var i=r+t,a=e+n;return{x:r,y:e,width:t,height:n,minX:r,minY:e,maxX:isNaN(i)?0:i,maxY:isNaN(a)?0:a}}function op(r,e,t){return(1-t)*r+e*t}function fm(r,e,t){return{x:r.x+Math.cos(t)*e,y:r.y+Math.sin(t)*e}}function rjt(r,e){var t=e.x-r.x,n=e.y-r.y;return Math.sqrt(t*t+n*n)}var Yw=function(r,e,t){return t===void 0&&(t=Math.pow(Number.EPSILON,.5)),[r,e].includes(1/0)?Math.abs(r)===Math.abs(e):Math.abs(r-e)0?(0,hh.each)(l,function(u){if(u.get("visible")){if(u.isGroup()&&u.get("children").length===0)return!0;var f=Fz(u),c=u.applyToMatrix([f.minX,f.minY,1]),h=u.applyToMatrix([f.minX,f.maxY,1]),d=u.applyToMatrix([f.maxX,f.minY,1]),p=u.applyToMatrix([f.maxX,f.maxY,1]),v=Math.min(c[0],h[0],d[0],p[0]),m=Math.max(c[0],h[0],d[0],p[0]),g=Math.min(c[1],h[1],d[1],p[1]),x=Math.max(c[1],h[1],d[1],p[1]);va&&(a=m),gs&&(s=x)}}):(i=0,a=0,o=0,s=0),n=Fb(i,o,a-i,s-o)}return t?njt(n,t):n}function Ktt(r,e){if(!(!r.getClip()&&!e.getClip())){var t=e.getClip();if(!t){r.setClip(null);return}var n={type:t.get("type"),attrs:t.attr()};r.setClip(n)}}function ws(r){return r+"px"}function aL(r,e,t,n){var i=rjt(r,e),a=n/i,o=0;return t==="start"?o=0-a:t==="end"&&(o=1+a),{x:op(r.x,e.x,o),y:op(r.y,e.y,o)}}var gu=U(q()),ijt={none:[],point:["x","y"],region:["start","end"],points:["points"],circle:["center","radius","startAngle","endAngle"]},ajt=function(r){H(e,r);function e(t){var n=r.call(this,t)||this;return n.initCfg(),n}return e.prototype.getDefaultCfg=function(){return{id:"",name:"",type:"",locationType:"none",offsetX:0,offsetY:0,animate:!1,capture:!0,updateAutoRender:!1,animateOption:{appear:null,update:{duration:400,easing:"easeQuadInOut"},enter:{duration:400,easing:"easeQuadInOut"},leave:{duration:350,easing:"easeQuadIn"}},events:null,defaultCfg:{},visible:!0}},e.prototype.clear=function(){},e.prototype.update=function(t){var n=this,i=this.get("defaultCfg")||{};(0,gu.each)(t,function(a,o){var s=n.get(o),l=a;s!==a&&((0,gu.isObject)(a)&&i[o]&&(l=(0,gu.deepMix)({},i[o],a)),n.set(o,l))}),this.updateInner(t),this.afterUpdate(t)},e.prototype.updateInner=function(t){},e.prototype.afterUpdate=function(t){(0,gu.hasKey)(t,"visible")&&(t.visible?this.show():this.hide()),(0,gu.hasKey)(t,"capture")&&this.setCapture(t.capture)},e.prototype.getLayoutBBox=function(){return this.getBBox()},e.prototype.getLocationType=function(){return this.get("locationType")},e.prototype.getOffset=function(){return{offsetX:this.get("offsetX"),offsetY:this.get("offsetY")}},e.prototype.setOffset=function(t,n){this.update({offsetX:t,offsetY:n})},e.prototype.setLocation=function(t){var n=E({},t);this.update(n)},e.prototype.getLocation=function(){var t=this,n={},i=this.get("locationType"),a=ijt[i];return(0,gu.each)(a,function(o){n[o]=t.get(o)}),n},e.prototype.isList=function(){return!1},e.prototype.isSlider=function(){return!1},e.prototype.init=function(){},e.prototype.initCfg=function(){var t=this,n=this.get("defaultCfg");(0,gu.each)(n,function(i,a){var o=t.get(a);if((0,gu.isObject)(o)){var s=(0,gu.deepMix)({},i,o);t.set(a,s)}})},e}(Ly),Bb=ajt;var Ky="update_status",ojt=["visible","tip","delegateObject"],sjt=["container","group","shapesMap","isRegister","isUpdating","destroyed"],ljt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{container:null,shapesMap:{},group:null,capture:!0,isRegister:!1,isUpdating:!1,isInit:!0})},e.prototype.remove=function(){this.clear();var t=this.get("group");t.remove()},e.prototype.clear=function(){var t=this.get("group");t.clear(),this.set("shapesMap",{}),this.clearOffScreenCache(),this.set("isInit",!0)},e.prototype.getChildComponentById=function(t){var n=this.getElementById(t),i=n&&n.get("component");return i},e.prototype.getElementById=function(t){return this.get("shapesMap")[t]},e.prototype.getElementByLocalId=function(t){var n=this.getElementId(t);return this.getElementById(n)},e.prototype.getElementsByName=function(t){var n=[];return(0,ao.each)(this.get("shapesMap"),function(i){i.get("name")===t&&n.push(i)}),n},e.prototype.getContainer=function(){return this.get("container")},e.prototype.updateInner=function(t){this.offScreenRender(),this.get("updateAutoRender")&&this.render()},e.prototype.render=function(){var t=this.get("offScreenGroup");t||(t=this.offScreenRender());var n=this.get("group");this.updateElements(t,n),this.deleteElements(),this.applyOffset(),this.get("eventInitted")||(this.initEvent(),this.set("eventInitted",!0)),this.set("isInit",!1)},e.prototype.show=function(){var t=this.get("group");t.show(),this.set("visible",!0)},e.prototype.hide=function(){var t=this.get("group");t.hide(),this.set("visible",!1)},e.prototype.setCapture=function(t){var n=this.get("group");n.set("capture",t),this.set("capture",t)},e.prototype.destroy=function(){this.removeEvent(),this.remove(),r.prototype.destroy.call(this)},e.prototype.getBBox=function(){return this.get("group").getCanvasBBox()},e.prototype.getLayoutBBox=function(){var t=this.get("group"),n=this.getInnerLayoutBBox(),i=t.getTotalMatrix();return i&&(n=Ytt(i,n)),n},e.prototype.on=function(t,n,i){var a=this.get("group");return a.on(t,n,i),this},e.prototype.off=function(t,n){var i=this.get("group");return i&&i.off(t,n),this},e.prototype.emit=function(t,n){var i=this.get("group");i.emit(t,n)},e.prototype.init=function(){r.prototype.init.call(this),this.get("group")||this.initGroup(),this.offScreenRender()},e.prototype.getInnerLayoutBBox=function(){return this.get("offScreenBBox")||this.get("group").getBBox()},e.prototype.delegateEmit=function(t,n){var i=this.get("group");n.target=i,i.emit(t,n),Vw(i,t,n)},e.prototype.createOffScreenGroup=function(){var t=this.get("group"),n=t.getGroupBase(),i=new n({delegateObject:this.getDelegateObject()});return i},e.prototype.applyOffset=function(){var t=this.get("offsetX"),n=this.get("offsetY");this.moveElementTo(this.get("group"),{x:t,y:n})},e.prototype.initGroup=function(){var t=this.get("container");this.set("group",t.addGroup({id:this.get("id"),name:this.get("name"),capture:this.get("capture"),visible:this.get("visible"),isComponent:!0,component:this,delegateObject:this.getDelegateObject()}))},e.prototype.offScreenRender=function(){this.clearOffScreenCache();var t=this.createOffScreenGroup();return this.renderInner(t),this.set("offScreenGroup",t),this.set("offScreenBBox",Fz(t)),t},e.prototype.addGroup=function(t,n){this.appendDelegateObject(t,n);var i=t.addGroup(n);return this.get("isRegister")&&this.registerElement(i),i},e.prototype.addShape=function(t,n){this.appendDelegateObject(t,n);var i=t.addShape(n);return this.get("isRegister")&&this.registerElement(i),i},e.prototype.addComponent=function(t,n){var i=n.id,a=n.component,o=rr(n,["id","component"]),s=new a(E(E({},o),{id:i,container:t,updateAutoRender:this.get("updateAutoRender")}));return s.init(),s.render(),this.get("isRegister")&&this.registerElement(s.get("group")),s},e.prototype.initEvent=function(){},e.prototype.removeEvent=function(){var t=this.get("group");t.off()},e.prototype.getElementId=function(t){var n=this.get("id"),i=this.get("name");return n+"-"+i+"-"+t},e.prototype.registerElement=function(t){var n=t.get("id");this.get("shapesMap")[n]=t},e.prototype.unregisterElement=function(t){var n=t.get("id");delete this.get("shapesMap")[n]},e.prototype.moveElementTo=function(t,n){var i=Hw(n);t.attr("matrix",i)},e.prototype.addAnimation=function(t,n,i){var a=n.attr("opacity");(0,ao.isNil)(a)&&(a=1),n.attr("opacity",0),n.animate({opacity:a},i)},e.prototype.removeAnimation=function(t,n,i){n.animate({opacity:0},i)},e.prototype.updateAnimation=function(t,n,i,a){n.animate(i,a)},e.prototype.updateElements=function(t,n){var i=this,a=this.get("animate"),o=this.get("animateOption"),s=t.getChildren().slice(0),l;(0,ao.each)(s,function(u){var f=u.get("id"),c=i.getElementById(f),h=u.get("name");if(c)if(u.get("isComponent")){var d=u.get("component"),p=c.get("component"),v=(0,ao.pick)(d.cfg,(0,ao.difference)((0,ao.keys)(d.cfg),sjt));p.update(v),c.set(Ky,"update")}else{var m=i.getReplaceAttrs(c,u);a&&o.update?i.updateAnimation(h,c,m,o.update):c.attr(m),u.isGroup()&&i.updateElements(u,c),(0,ao.each)(ojt,function(S){c.set(S,u.get(S))}),Ktt(c,u),l=c,c.set(Ky,"update")}else{n.add(u);var g=n.getChildren();if(g.splice(g.length-1,1),l){var x=g.indexOf(l);g.splice(x+1,0,u)}else g.unshift(u);if(i.registerElement(u),u.set(Ky,"add"),u.get("isComponent")){var d=u.get("component");d.set("container",n)}else u.isGroup()&&i.registerNewGroup(u);if(l=u,a){var b=i.get("isInit")?o.appear:o.enter;b&&i.addAnimation(h,u,b)}}})},e.prototype.clearUpdateStatus=function(t){var n=t.getChildren();(0,ao.each)(n,function(i){i.set(Ky,null)})},e.prototype.clearOffScreenCache=function(){var t=this.get("offScreenGroup");t&&t.destroy(),this.set("offScreenGroup",null),this.set("offScreenBBox",null)},e.prototype.getDelegateObject=function(){var t,n=this.get("name"),i=(t={},t[n]=this,t.component=this,t);return i},e.prototype.appendDelegateObject=function(t,n){var i=t.get("delegateObject");n.delegateObject||(n.delegateObject={}),(0,ao.mix)(n.delegateObject,i)},e.prototype.getReplaceAttrs=function(t,n){var i=t.attr(),a=n.attr();return(0,ao.each)(i,function(o,s){a[s]===void 0&&(a[s]=void 0)}),a},e.prototype.registerNewGroup=function(t){var n=this,i=t.getChildren();(0,ao.each)(i,function(a){n.registerElement(a),a.set(Ky,"add"),a.isGroup()&&n.registerNewGroup(a)})},e.prototype.deleteElements=function(){var t=this,n=this.get("shapesMap"),i=[];(0,ao.each)(n,function(s,l){!s.get(Ky)||s.destroyed?i.push([l,s]):s.set(Ky,null)});var a=this.get("animate"),o=this.get("animateOption");(0,ao.each)(i,function(s){var l=s[0],u=s[1];if(!u.destroyed){var f=u.get("name");if(a&&o.leave){var c=(0,ao.mix)({callback:function(){t.removeElement(u)}},o.leave);t.removeAnimation(f,u,c)}else t.removeElement(u)}delete n[l]})},e.prototype.removeElement=function(t){if(t.get("isGroup")){var n=t.get("component");n&&n.destroy()}t.remove()},e}(Bb),Yn=ljt;var Gz=U(q());var cm=U(q());var Bz="\u2026";function Ztt(r){for(var e=0,t=0;t0&&r.charCodeAt(e)<128?1:2}function $tt(r,e,t){t===void 0&&(t="tail");var n=r.length,i="";if(t==="tail"){for(var a=0,o=0;a=19968&&s<=40869?a+=2:a+=1}a>t&&(t=a,n=i)}return r[n].getBBox().width}function Xw(r){if(r.length>cjt)return hjt(r);var e=0;return(0,cm.each)(r,function(t){var n=t.getBBox(),i=n.width;e=0?h=$tt(a,c,n):h=ujt,h&&(e.attr("text",h),f=!0)}return f?e.set("tip",a):e.set("tip",null),f}function dm(r,e){var t=e.x,n=e.y,i=e.content,a=e.style,o=e.id,s=e.name,l=e.rotate,u=e.maxLength,f=e.autoEllipsis,c=e.isVertical,h=e.ellipsisPosition,d=e.background,p=r.addGroup({id:o+"-group",name:s+"-group",attrs:{x:t,y:n}}),v=p.addShape({type:"text",id:o,name:s,attrs:E({x:0,y:0,text:i},a)}),m=qy((0,Gz.get)(d,"padding",0));if(u&&f){var g=u-(m[1]+m[3]);hm(!c,v,g,h)}if(d){var x=(0,Gz.get)(d,"style",{}),b=v.getCanvasBBox(),S=b.minX,C=b.minY,w=b.width,A=b.height,I=p.addShape("rect",{id:o+"-bg",name:o+"-bg",attrs:E({x:S-m[3],y:C-m[0],width:w+m[1]+m[3],height:A+m[0]+m[2]},x)});I.toBack()}um(p,t,n),iL(p,l,t,n)}var Gr={fontFamily:` + BlinkMacSystemFont, "Segoe UI", Roboto,"Helvetica Neue", + Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", + SimSun, "sans-serif"`,textColor:"#2C3542",activeTextColor:"#333333",uncheckedColor:"#D8D8D8",lineColor:"#416180",regionColor:"#CCD7EB",verticalAxisRotate:-Math.PI/4,horizontalAxisRotate:Math.PI/4};var pjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"annotation",type:"line",locationType:"region",start:null,end:null,style:{},text:null,defaultCfg:{style:{fill:Gr.textColor,fontSize:12,textAlign:"center",textBaseline:"bottom",fontFamily:Gr.fontFamily},text:{position:"center",autoRotate:!0,content:null,offsetX:0,offsetY:0,style:{stroke:Gr.lineColor,lineWidth:1}}}})},e.prototype.renderInner=function(t){this.renderLine(t),this.get("text")&&this.renderLabel(t)},e.prototype.renderLine=function(t){var n=this.get("start"),i=this.get("end"),a=this.get("style");this.addShape(t,{type:"line",id:this.getElementId("line"),name:"annotation-line",attrs:E({x1:n.x,y1:n.y,x2:i.x,y2:i.y},a)})},e.prototype.getLabelPoint=function(t,n,i){var a;return i==="start"?a=0:i==="center"?a=.5:(0,oL.isString)(i)&&i.indexOf("%")!==-1?a=parseInt(i,10)/100:(0,oL.isNumber)(i)?a=i:a=1,(a>1||a<0)&&(a=1),{x:op(t.x,n.x,a),y:op(t.y,n.y,a)}},e.prototype.renderLabel=function(t){var n=this.get("text"),i=this.get("start"),a=this.get("end"),o=n.position,s=n.content,l=n.style,u=n.offsetX,f=n.offsetY,c=n.autoRotate,h=n.maxLength,d=n.autoEllipsis,p=n.ellipsisPosition,v=n.background,m=n.isVertical,g=m===void 0?!1:m,x=this.getLabelPoint(i,a,o),b=x.x+u,S=x.y+f,C={id:this.getElementId("line-text"),name:"annotation-line-text",x:b,y:S,content:s,style:l,maxLength:h,autoEllipsis:d,ellipsisPosition:p,background:v,isVertical:g};if(c){var w=[a.x-i.x,a.y-i.y];C.rotate=Math.atan2(w[1],w[0])}dm(t,C)},e}(Yn),Qtt=pjt;var vjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"annotation",type:"text",locationType:"point",x:0,y:0,content:"",rotate:null,style:{},background:null,maxLength:null,autoEllipsis:!0,isVertical:!1,ellipsisPosition:"tail",defaultCfg:{style:{fill:Gr.textColor,fontSize:12,textAlign:"center",textBaseline:"middle",fontFamily:Gr.fontFamily}}})},e.prototype.setLocation=function(t){this.set("x",t.x),this.set("y",t.y),this.resetLocation()},e.prototype.renderInner=function(t){var n=this.getLocation(),i=n.x,a=n.y,o=this.get("content"),s=this.get("style"),l=this.getElementId("text"),u=this.get("name")+"-text",f=this.get("maxLength"),c=this.get("autoEllipsis"),h=this.get("isVertical"),d=this.get("ellipsisPosition"),p=this.get("background"),v=this.get("rotate"),m={id:l,name:u,x:i,y:a,content:o,style:s,maxLength:f,autoEllipsis:c,isVertical:h,ellipsisPosition:d,background:p,rotate:v};dm(t,m)},e.prototype.resetLocation=function(){var t=this.getElementByLocalId("text-group");if(t){var n=this.getLocation(),i=n.x,a=n.y,o=this.get("rotate");um(t,i,a),iL(t,o,i,a)}},e}(Yn),Jtt=vjt;var mjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"annotation",type:"arc",locationType:"circle",center:null,radius:100,startAngle:-Math.PI/2,endAngle:Math.PI*3/2,style:{stroke:"#999",lineWidth:1}})},e.prototype.renderInner=function(t){this.renderArc(t)},e.prototype.getArcPath=function(){var t=this.getLocation(),n=t.center,i=t.radius,a=t.startAngle,o=t.endAngle,s=fm(n,i,a),l=fm(n,i,o),u=o-a>Math.PI?1:0,f=[["M",s.x,s.y]];if(o-a==Math.PI*2){var c=fm(n,i,a+Math.PI);f.push(["A",i,i,0,u,1,c.x,c.y]),f.push(["A",i,i,0,u,1,l.x,l.y])}else f.push(["A",i,i,0,u,1,l.x,l.y]);return f},e.prototype.renderArc=function(t){var n=this.getArcPath(),i=this.get("style");this.addShape(t,{type:"path",id:this.getElementId("arc"),name:"annotation-arc",attrs:E({path:n},i)})},e}(Yn),tet=mjt;var gjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"annotation",type:"region",locationType:"region",start:null,end:null,style:{},defaultCfg:{style:{lineWidth:0,fill:Gr.regionColor,opacity:.4}}})},e.prototype.renderInner=function(t){this.renderRegion(t)},e.prototype.renderRegion=function(t){var n=this.get("start"),i=this.get("end"),a=this.get("style"),o=ap({start:n,end:i});this.addShape(t,{type:"rect",id:this.getElementId("region"),name:"annotation-region",attrs:E({x:o.x,y:o.y,width:o.width,height:o.height},a)})},e}(Yn),eet=gjt;var yjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"annotation",type:"image",locationType:"region",start:null,end:null,src:null,style:{}})},e.prototype.renderInner=function(t){this.renderImage(t)},e.prototype.getImageAttrs=function(){var t=this.get("start"),n=this.get("end"),i=this.get("style"),a=ap({start:t,end:n}),o=this.get("src");return E({x:a.x,y:a.y,img:o,width:a.width,height:a.height},i)},e.prototype.renderImage=function(t){this.addShape(t,{type:"image",id:this.getElementId("image"),name:"annotation-image",attrs:this.getImageAttrs()})},e}(Yn),ret=yjt;var Jf=U(q());var xjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"annotation",type:"dataMarker",locationType:"point",x:0,y:0,point:{},line:{},text:{},direction:"upward",autoAdjust:!0,coordinateBBox:null,defaultCfg:{point:{display:!0,style:{r:3,fill:"#FFFFFF",stroke:"#1890FF",lineWidth:2}},line:{display:!0,length:20,style:{stroke:Gr.lineColor,lineWidth:1}},text:{content:"",display:!0,style:{fill:Gr.textColor,opacity:.65,fontSize:12,textAlign:"start",fontFamily:Gr.fontFamily}}}})},e.prototype.renderInner=function(t){(0,Jf.get)(this.get("line"),"display")&&this.renderLine(t),(0,Jf.get)(this.get("text"),"display")&&this.renderText(t),(0,Jf.get)(this.get("point"),"display")&&this.renderPoint(t),this.get("autoAdjust")&&this.autoAdjust(t)},e.prototype.applyOffset=function(){this.moveElementTo(this.get("group"),{x:this.get("x")+this.get("offsetX"),y:this.get("y")+this.get("offsetY")})},e.prototype.renderPoint=function(t){var n=this.getShapeAttrs().point;this.addShape(t,{type:"circle",id:this.getElementId("point"),name:"annotation-point",attrs:n})},e.prototype.renderLine=function(t){var n=this.getShapeAttrs().line;this.addShape(t,{type:"path",id:this.getElementId("line"),name:"annotation-line",attrs:n})},e.prototype.renderText=function(t){var n=this.getShapeAttrs().text,i=n.x,a=n.y,o=n.text,s=rr(n,["x","y","text"]),l=this.get("text"),u=l.background,f=l.maxLength,c=l.autoEllipsis,h=l.isVertival,d=l.ellipsisPosition,p={x:i,y:a,id:this.getElementId("text"),name:"annotation-text",content:o,style:s,background:u,maxLength:f,autoEllipsis:c,isVertival:h,ellipsisPosition:d};dm(t,p)},e.prototype.autoAdjust=function(t){var n=this.get("direction"),i=this.get("x"),a=this.get("y"),o=(0,Jf.get)(this.get("line"),"length",0),s=this.get("coordinateBBox"),l=t.getBBox(),u=l.minX,f=l.maxX,c=l.minY,h=l.maxY,d=t.findById(this.getElementId("text-group")),p=t.findById(this.getElementId("text")),v=t.findById(this.getElementId("line"));if(!!s){if(d){if(i+u<=s.minX){var m=s.minX-(i+u);um(d,d.attr("x")+m,d.attr("y"))}if(i+f>=s.maxX){var m=i+f-s.maxX;um(d,d.attr("x")-m,d.attr("y"))}}if(n==="upward"&&a+c<=s.minY||n!=="upward"&&a+h>=s.maxY){var g=void 0,x=void 0;n==="upward"&&a+c<=s.minY?(g="top",x=1):(g="bottom",x=-1),p.attr("textBaseline",g),v&&v.attr("path",[["M",0,0],["L",0,o*x]]),um(d,d.attr("x"),(o+2)*x)}}},e.prototype.getShapeAttrs=function(){var t=(0,Jf.get)(this.get("line"),"display"),n=(0,Jf.get)(this.get("point"),"style",{}),i=(0,Jf.get)(this.get("line"),"style",{}),a=(0,Jf.get)(this.get("text"),"style",{}),o=this.get("direction"),s=t?(0,Jf.get)(this.get("line"),"length",0):0,l=o==="upward"?-1:1;return{point:E({x:0,y:0},n),line:E({path:[["M",0,0],["L",0,s*l]]},i),text:E({x:0,y:(s+2)*l,text:(0,Jf.get)(this.get("text"),"content",""),textBaseline:o==="upward"?"bottom":"top"},a)}},e}(Yn),net=xjt;var zz=U(q());var bjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"annotation",type:"dataRegion",locationType:"points",points:[],lineLength:0,region:{},text:{},defaultCfg:{region:{style:{lineWidth:0,fill:Gr.regionColor,opacity:.4}},text:{content:"",style:{textAlign:"center",textBaseline:"bottom",fontSize:12,fill:Gr.textColor,fontFamily:Gr.fontFamily}}}})},e.prototype.renderInner=function(t){var n=(0,zz.get)(this.get("region"),"style",{}),i=(0,zz.get)(this.get("text"),"style",{}),a=this.get("lineLength")||0,o=this.get("points");if(!!o.length){var s=qtt(o),l=[];l.push(["M",o[0].x,s.minY-a]),o.forEach(function(f){l.push(["L",f.x,f.y])}),l.push(["L",o[o.length-1].x,o[o.length-1].y-a]),this.addShape(t,{type:"path",id:this.getElementId("region"),name:"annotation-region",attrs:E({path:l},n)});var u=E({id:this.getElementId("text"),name:"annotation-text",x:(s.minX+s.maxX)/2,y:s.minY-a},this.get("text"));dm(t,u)}},e}(Yn),iet=bjt;var sL=U(q());var _jt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"annotation",type:"regionFilter",locationType:"region",start:null,end:null,color:null,shape:[]})},e.prototype.renderInner=function(t){var n=this,i=this.get("start"),a=this.get("end"),o=this.addGroup(t,{id:this.getElementId("region-filter"),capture:!1});(0,sL.each)(this.get("shapes"),function(l,u){var f=l.get("type"),c=(0,sL.clone)(l.attr());n.adjustShapeAttrs(c),n.addShape(o,{id:n.getElementId("shape-"+f+"-"+u),capture:!1,type:f,attrs:c})});var s=ap({start:i,end:a});o.setClip({type:"rect",attrs:{x:s.minX,y:s.minY,width:s.width,height:s.height}})},e.prototype.adjustShapeAttrs=function(t){var n=this.get("color");t.fill&&(t.fill=t.fillStyle=n),t.stroke=t.strokeStyle=n},e}(Yn),aet=_jt;var lL=U(q());var Sjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"annotation",type:"shape",draw:lL.noop})},e.prototype.renderInner=function(t){var n=this.get("render");(0,lL.isFunction)(n)&&n(t)},e}(Yn),oet=Sjt;var Gb=U(q());var Zu=U(q());var Cjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{container:null,containerTpl:"
    ",updateAutoRender:!0,containerClassName:"",parent:null})},e.prototype.getContainer=function(){return this.get("container")},e.prototype.show=function(){var t=this.get("container");t.style.display="",this.set("visible",!0)},e.prototype.hide=function(){var t=this.get("container");t.style.display="none",this.set("visible",!1)},e.prototype.setCapture=function(t){var n=this.getContainer(),i=t?"auto":"none";n.style.pointerEvents=i,this.set("capture",t)},e.prototype.getBBox=function(){var t=this.getContainer(),n=parseFloat(t.style.left)||0,i=parseFloat(t.style.top)||0;return Fb(n,i,t.clientWidth,t.clientHeight)},e.prototype.clear=function(){var t=this.get("container");Nb(t)},e.prototype.destroy=function(){this.removeEvent(),this.removeDom(),r.prototype.destroy.call(this)},e.prototype.init=function(){r.prototype.init.call(this),this.initContainer(),this.initDom(),this.resetStyles(),this.applyStyles(),this.initEvent(),this.initCapture(),this.initVisible()},e.prototype.initCapture=function(){this.setCapture(this.get("capture"))},e.prototype.initVisible=function(){this.get("visible")?this.show():this.hide()},e.prototype.initDom=function(){},e.prototype.initContainer=function(){var t=this.get("container");if((0,Zu.isNil)(t)){t=this.createDom();var n=this.get("parent");(0,Zu.isString)(n)&&(n=document.getElementById(n),this.set("parent",n)),n.appendChild(t),this.get("containerId")&&t.setAttribute("id",this.get("containerId")),this.set("container",t)}else(0,Zu.isString)(t)&&(t=document.getElementById(t),this.set("container",t));this.get("parent")||this.set("parent",t.parentNode)},e.prototype.resetStyles=function(){var t=this.get("domStyles"),n=this.get("defaultStyles");t?t=(0,Zu.deepMix)({},n,t):t=n,this.set("domStyles",t)},e.prototype.applyStyles=function(){var t=this.get("domStyles");if(!!t){var n=this.getContainer();this.applyChildrenStyles(n,t);var i=this.get("containerClassName");if(i&&Xtt(n,i)){var a=t[i];yr(n,a)}}},e.prototype.applyChildrenStyles=function(t,n){(0,Zu.each)(n,function(i,a){var o=t.getElementsByClassName(a);(0,Zu.each)(o,function(s){yr(s,i)})})},e.prototype.applyStyle=function(t,n){var i=this.get("domStyles");yr(n,i[t])},e.prototype.createDom=function(){var t=this.get("containerTpl");return en(t)},e.prototype.initEvent=function(){},e.prototype.removeDom=function(){var t=this.get("container");t&&t.parentNode&&t.parentNode.removeChild(t)},e.prototype.removeEvent=function(){},e.prototype.updateInner=function(t){(0,Zu.hasKey)(t,"domStyles")&&(this.resetStyles(),this.applyStyles()),this.resetPosition()},e.prototype.resetPosition=function(){},e}(Bb),pm=Cjt;var wjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"annotation",type:"html",locationType:"point",x:0,y:0,containerTpl:'
    ',alignX:"left",alignY:"top",html:"",zIndex:7})},e.prototype.render=function(){var t=this.getContainer(),n=this.get("html");Nb(t);var i=(0,Gb.isFunction)(n)?n(t):n;(0,Gb.isElement)(i)?t.appendChild(i):(0,Gb.isString)(i)&&t.appendChild(en(i)),this.resetPosition()},e.prototype.resetPosition=function(){var t=this.getContainer(),n=this.getLocation(),i=n.x,a=n.y,o=this.get("alignX"),s=this.get("alignY"),l=this.get("offsetX"),u=this.get("offsetY"),f=n2(t),c=e2(t),h={x:i,y:a};o==="middle"?h.x-=Math.round(f/2):o==="right"&&(h.x-=Math.round(f)),s==="middle"?h.y-=Math.round(c/2):s==="bottom"&&(h.y-=Math.round(c)),l&&(h.x+=l),u&&(h.y+=u),yr(t,{position:"absolute",left:h.x+"px",top:h.y+"px",zIndex:this.get("zIndex")})},e}(pm),set=wjt;var $w={};Dn($w,{Base:()=>zb,Circle:()=>get,Line:()=>met});var Pl=U(q());var Xn=U(q());var uL=U(q());function $y(r,e,t){var n=e+"Style",i=null;return(0,uL.each)(t,function(a,o){r[o]&&a[n]&&(i||(i={}),(0,uL.mix)(i,a[n]))}),i}var Ejt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"axis",ticks:[],line:{},tickLine:{},subTickLine:null,title:null,label:{},verticalFactor:1,verticalLimitLength:null,overlapOrder:["autoRotate","autoEllipsis","autoHide"],tickStates:{},optimize:{},defaultCfg:{line:{style:{lineWidth:1,stroke:Gr.lineColor}},tickLine:{style:{lineWidth:1,stroke:Gr.lineColor},alignTick:!0,length:5,displayWithLabel:!0},subTickLine:{style:{lineWidth:1,stroke:Gr.lineColor},count:4,length:2},label:{autoRotate:!0,autoHide:!1,autoEllipsis:!1,style:{fontSize:12,fill:Gr.textColor,fontFamily:Gr.fontFamily,fontWeight:"normal"},offset:10,offsetX:0,offsetY:0},title:{autoRotate:!0,spacing:5,position:"center",style:{fontSize:12,fill:Gr.textColor,textBaseline:"middle",fontFamily:Gr.fontFamily,textAlign:"center"}},tickStates:{active:{labelStyle:{fontWeight:500},tickLineStyle:{lineWidth:2}},inactive:{labelStyle:{fill:Gr.uncheckedColor}}},optimize:{enable:!0,threshold:400}},theme:{}})},e.prototype.renderInner=function(t){this.get("line")&&this.drawLine(t),this.drawTicks(t),this.get("title")&&this.drawTitle(t)},e.prototype.isList=function(){return!0},e.prototype.getItems=function(){return this.get("ticks")},e.prototype.setItems=function(t){this.update({ticks:t})},e.prototype.updateItem=function(t,n){(0,Xn.mix)(t,n),this.clear(),this.render()},e.prototype.clearItems=function(){var t=this.getElementByLocalId("label-group");t&&t.clear()},e.prototype.setItemState=function(t,n,i){t[n]=i,this.updateTickStates(t)},e.prototype.hasState=function(t,n){return!!t[n]},e.prototype.getItemStates=function(t){var n=this.get("tickStates"),i=[];return(0,Xn.each)(n,function(a,o){t[o]&&i.push(o)}),i},e.prototype.clearItemsState=function(t){var n=this,i=this.getItemsByState(t);(0,Xn.each)(i,function(a){n.setItemState(a,t,!1)})},e.prototype.getItemsByState=function(t){var n=this,i=this.getItems();return(0,Xn.filter)(i,function(a){return n.hasState(a,t)})},e.prototype.getSidePoint=function(t,n){var i=this,a=i.getSideVector(n,t);return{x:t.x+a[0],y:t.y+a[1]}},e.prototype.getTextAnchor=function(t){var n;return(0,Xn.isNumberEqual)(t[0],0)?n="center":t[0]>0?n="start":t[0]<0&&(n="end"),n},e.prototype.getTextBaseline=function(t){var n;return(0,Xn.isNumberEqual)(t[1],0)?n="middle":t[1]>0?n="top":t[1]<0&&(n="bottom"),n},e.prototype.processOverlap=function(t){},e.prototype.drawLine=function(t){var n=this.getLinePath(),i=this.get("line");this.addShape(t,{type:"path",id:this.getElementId("line"),name:"axis-line",attrs:(0,Xn.mix)({path:n},i.style)})},e.prototype.getTickLineItems=function(t){var n=this,i=[],a=this.get("tickLine"),o=a.alignTick,s=a.length,l=1,u=t.length;return u>=2&&(l=t[1].value-t[0].value),(0,Xn.each)(t,function(f){var c=f.point;o||(c=n.getTickPoint(f.value-l/2));var h=n.getSidePoint(c,s);i.push({startPoint:c,tickValue:f.value,endPoint:h,tickId:f.id,id:"tickline-"+f.id})}),i},e.prototype.getSubTickLineItems=function(t){var n=[],i=this.get("subTickLine"),a=i.count,o=t.length;if(o>=2)for(var s=0;s0){var i=(0,Xn.size)(n);if(i>t.threshold){var a=Math.ceil(i/t.threshold),o=n.filter(function(s,l){return l%a==0});this.set("ticks",o),this.set("originalTicks",n)}}},e.prototype.getLabelAttrs=function(t,n,i){var a=this.get("label"),o=a.offset,s=a.offsetX,l=a.offsetY,u=a.rotate,f=a.formatter,c=this.getSidePoint(t.point,o),h=this.getSideVector(o,c),d=f?f(t.name,t,n):t.name,p=a.style;p=(0,Xn.isFunction)(p)?(0,Xn.get)(this.get("theme"),["label","style"],{}):p;var v=(0,Xn.mix)({x:c.x+s,y:c.y+l,text:d,textAlign:this.getTextAnchor(h),textBaseline:this.getTextBaseline(h)},p);return u&&(v.matrix=Qf(c,u)),v},e.prototype.drawLabels=function(t){var n=this,i=this.get("ticks"),a=this.addGroup(t,{name:"axis-label-group",id:this.getElementId("label-group")});(0,Xn.each)(i,function(h,d){n.addShape(a,{type:"text",name:"axis-label",id:n.getElementId("label-"+h.id),attrs:n.getLabelAttrs(h,d,i),delegateObject:{tick:h,item:h,index:d}})}),this.processOverlap(a);var o=a.getChildren(),s=(0,Xn.get)(this.get("theme"),["label","style"],{}),l=this.get("label"),u=l.style,f=l.formatter;if((0,Xn.isFunction)(u)){var c=o.map(function(h){return(0,Xn.get)(h.get("delegateObject"),"tick")});(0,Xn.each)(o,function(h,d){var p=h.get("delegateObject").tick,v=f?f(p.name,p,d):p.name,m=(0,Xn.mix)({},s,u(v,d,c));h.attr(m)})}},e.prototype.getTitleAttrs=function(){var t=this.get("title"),n=t.style,i=t.position,a=t.offset,o=t.spacing,s=o===void 0?0:o,l=t.autoRotate,u=n.fontSize,f=.5;i==="start"?f=0:i==="end"&&(f=1);var c=this.getTickPoint(f),h=this.getSidePoint(c,a||s+u/2),d=(0,Xn.mix)({x:h.x,y:h.y,text:t.text},n),p=t.rotate,v=p;if((0,Xn.isNil)(p)&&l){var m=this.getAxisVector(c),g=[1,0];v=gr.angleTo(m,g,!0)}if(v){var x=Qf(h,v);d.matrix=x}return d},e.prototype.drawTitle=function(t){this.addShape(t,{type:"text",id:this.getElementId("title"),name:"axis-title",attrs:this.getTitleAttrs()})},e.prototype.applyTickStates=function(t,n){var i=this.getItemStates(t);if(i.length){var a=this.get("tickStates"),o=this.getElementId("label-"+t.id),s=n.findById(o);if(s){var l=$y(t,"label",a);l&&s.attr(l)}var u=this.getElementId("tickline-"+t.id),f=n.findById(u);if(f){var c=$y(t,"tickLine",a);c&&f.attr(c)}}},e.prototype.updateTickStates=function(t){var n=this.getItemStates(t),i=this.get("tickStates"),a=this.get("label"),o=this.getElementByLocalId("label-"+t.id),s=this.get("tickLine"),l=this.getElementByLocalId("tickline-"+t.id);if(n.length){if(o){var u=$y(t,"label",i);u&&o.attr(u)}if(l){var f=$y(t,"tickLine",i);f&&l.attr(f)}}else o&&o.attr(a.style),l&&l.attr(s.style)},e}(Yn),zb=Ejt;var Zw={};Dn(Zw,{autoEllipsis:()=>jz,autoHide:()=>Vz,autoRotate:()=>Hz});var jz={};Dn(jz,{ellipsisHead:()=>Mjt,ellipsisMiddle:()=>Tjt,ellipsisTail:()=>fet,getDefault:()=>Ajt});var uet=U(q());function Uz(r,e,t,n){var i=e.getChildren(),a=!1;return(0,uet.each)(i,function(o){var s=hm(r,o,t,n);a=a||s}),a}function Ajt(){return fet}function Mjt(r,e,t){return Uz(r,e,t,"head")}function fet(r,e,t){return Uz(r,e,t,"tail")}function Tjt(r,e,t){return Uz(r,e,t,"middle")}var Vz={};Dn(Vz,{equidistance:()=>det,equidistanceWithReverseBoth:()=>kjt,getDefault:()=>Ljt,reserveBoth:()=>Pjt,reserveFirst:()=>Ojt,reserveLast:()=>Djt});function Ijt(r){var e=r.attr("matrix");return e&&e[0]!==1}function cet(r){var e=Ijt(r)?Htt(r.attr("matrix")):0;return e%360}function Wz(r,e,t,n){var i=!1,a=cet(e),o=Math.abs(r?t.attr("y")-e.attr("y"):t.attr("x")-e.attr("x")),s=(r?t.attr("y")>e.attr("y"):t.attr("x")>e.attr("x"))?e.getBBox():t.getBBox();if(r){var l=Math.abs(Math.cos(a));Yw(l,0,Math.PI/180)?i=s.width+n>o:i=s.height/l+n>o}else{var l=Math.abs(Math.sin(a));Yw(l,0,Math.PI/180)?i=s.width+n>o:i=s.height/l+n>o}return i}function Kw(r,e,t,n){var i=(n==null?void 0:n.minGap)||0,a=e.getChildren().slice().filter(function(p){return p.get("visible")});if(!a.length)return!1;var o=!1;t&&a.reverse();for(var s=a.length,l=a[0],u=l,f=1;f1){h=Math.ceil(h);for(var v=0;v2){var o=i[0],s=i[i.length-1];o.get("visible")||(o.show(),Kw(r,e,!1,n)&&(a=!0)),s.get("visible")||(s.show(),Kw(r,e,!0,n)&&(a=!0))}return a}var Hz={};Dn(Hz,{fixedAngle:()=>vet,getDefault:()=>Njt,unfixedAngle:()=>Fjt});var fL=U(q());function Rjt(r,e){(0,fL.each)(r,function(t){var n=t.attr("x"),i=t.attr("y"),a=Qf({x:n,y:i},e);t.attr("matrix",a)})}function pet(r,e,t,n){var i=e.getChildren();if(!i.length||!r&&i.length<2)return!1;var a=Xw(i),o=!1;if(r)o=!!t&&a>t;else{var s=Math.abs(i[1].attr("x")-i[0].attr("x"));o=a>s}if(o){var l=n(t,a);Rjt(i,l)}return o}function Njt(){return vet}function vet(r,e,t,n){return pet(r,e,t,function(){return(0,fL.isNumber)(n)?n:r?Gr.verticalAxisRotate:Gr.horizontalAxisRotate})}function Fjt(r,e,t){return pet(r,e,t,function(n,i){if(!n)return r?Gr.verticalAxisRotate:Gr.horizontalAxisRotate;if(r)return-Math.acos(n/i);var a=0;return n>i?a=Math.PI/4:(a=Math.asin(n/i),a>Math.PI/4&&(a=Math.PI/4)),a})}var Bjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{type:"line",locationType:"region",start:null,end:null})},e.prototype.getLinePath=function(){var t=this.get("start"),n=this.get("end"),i=[];return i.push(["M",t.x,t.y]),i.push(["L",n.x,n.y]),i},e.prototype.getInnerLayoutBBox=function(){var t=this.get("start"),n=this.get("end"),i=r.prototype.getInnerLayoutBBox.call(this),a=Math.min(t.x,n.x,i.x),o=Math.min(t.y,n.y,i.y),s=Math.max(t.x,n.x,i.maxX),l=Math.max(t.y,n.y,i.maxY);return{x:a,y:o,minX:a,minY:o,maxX:s,maxY:l,width:s-a,height:l-o}},e.prototype.isVertical=function(){var t=this.get("start"),n=this.get("end");return(0,Pl.isNumberEqual)(t.x,n.x)},e.prototype.isHorizontal=function(){var t=this.get("start"),n=this.get("end");return(0,Pl.isNumberEqual)(t.y,n.y)},e.prototype.getTickPoint=function(t){var n=this,i=n.get("start"),a=n.get("end"),o=a.x-i.x,s=a.y-i.y;return{x:i.x+o*t,y:i.y+s*t}},e.prototype.getSideVector=function(t){var n=this.getAxisVector(),i=oe.normalize([0,0],n),a=this.get("verticalFactor"),o=[i[1],i[0]*-1];return oe.scale([0,0],o,t*a)},e.prototype.getAxisVector=function(){var t=this.get("start"),n=this.get("end");return[n.x-t.x,n.y-t.y]},e.prototype.processOverlap=function(t){var n=this,i=this.isVertical(),a=this.isHorizontal();if(!(!i&&!a)){var o=this.get("label"),s=this.get("title"),l=this.get("verticalLimitLength"),u=o.offset,f=l,c=0,h=0;s&&(c=s.style.fontSize,h=s.spacing),f&&(f=f-u-h-c);var d=this.get("overlapOrder");if((0,Pl.each)(d,function(m){o[m]&&n.canProcessOverlap(m)&&n.autoProcessOverlap(m,o[m],t,f)}),s&&(0,Pl.isNil)(s.offset)){var p=t.getCanvasBBox(),v=i?p.width:p.height;s.offset=u+v+h+c/2}}},e.prototype.canProcessOverlap=function(t){var n=this.get("label");return t==="autoRotate"?(0,Pl.isNil)(n.rotate):!0},e.prototype.autoProcessOverlap=function(t,n,i,a){var o=this,s=this.isVertical(),l=!1,u=Zw[t];if(n===!0){var f=this.get("label");l=u.getDefault()(s,i,a)}else if((0,Pl.isFunction)(n))l=n(s,i,a);else if((0,Pl.isObject)(n)){var c=n;u[c.type]&&(l=u[c.type](s,i,a,c.cfg))}else u[n]&&(l=u[n](s,i,a));if(t==="autoRotate"){if(l){var h=i.getChildren(),d=this.get("verticalFactor");(0,Pl.each)(h,function(v){var m=v.attr("textAlign");if(m==="center"){var g=d>0?"end":"start";v.attr("textAlign",g)}})}}else if(t==="autoHide"){var p=i.getChildren().slice(0);(0,Pl.each)(p,function(v){v.get("visible")||(o.get("isRegister")&&o.unregisterElement(v),v.remove())})}},e}(zb),met=Bjt;var tc=U(q());var Gjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{type:"circle",locationType:"circle",center:null,radius:null,startAngle:-Math.PI/2,endAngle:Math.PI*3/2})},e.prototype.getLinePath=function(){var t=this.get("center"),n=t.x,i=t.y,a=this.get("radius"),o=a,s=this.get("startAngle"),l=this.get("endAngle"),u=[];if(Math.abs(l-s)===Math.PI*2)u=[["M",n,i-o],["A",a,o,0,1,1,n,i+o],["A",a,o,0,1,1,n,i-o],["Z"]];else{var f=this.getCirclePoint(s),c=this.getCirclePoint(l),h=Math.abs(l-s)>Math.PI?1:0,d=s>l?0:1;u=[["M",n,i],["L",f.x,f.y],["A",a,o,0,h,d,c.x,c.y],["L",n,i]]}return u},e.prototype.getTickPoint=function(t){var n=this.get("startAngle"),i=this.get("endAngle"),a=n+(i-n)*t;return this.getCirclePoint(a)},e.prototype.getSideVector=function(t,n){var i=this.get("center"),a=[n.x-i.x,n.y-i.y],o=this.get("verticalFactor"),s=oe.length(a);return oe.scale(a,a,o*t/s),a},e.prototype.getAxisVector=function(t){var n=this.get("center"),i=[t.x-n.x,t.y-n.y];return[i[1],-1*i[0]]},e.prototype.getCirclePoint=function(t,n){var i=this.get("center");return n=n||this.get("radius"),{x:i.x+Math.cos(t)*n,y:i.y+Math.sin(t)*n}},e.prototype.canProcessOverlap=function(t){var n=this.get("label");return t==="autoRotate"?(0,tc.isNil)(n.rotate):!0},e.prototype.processOverlap=function(t){var n=this,i=this.get("label"),a=this.get("title"),o=this.get("verticalLimitLength"),s=i.offset,l=o,u=0,f=0;a&&(u=a.style.fontSize,f=a.spacing),l&&(l=l-s-f-u);var c=this.get("overlapOrder");if((0,tc.each)(c,function(d){i[d]&&n.canProcessOverlap(d)&&n.autoProcessOverlap(d,i[d],t,l)}),a&&(0,tc.isNil)(a.offset)){var h=t.getCanvasBBox().height;a.offset=s+h+f+u/2}},e.prototype.autoProcessOverlap=function(t,n,i,a){var o=this,s=!1,l=Zw[t];if(a>0)if(n===!0)s=l.getDefault()(!1,i,a);else if((0,tc.isFunction)(n))s=n(!1,i,a);else if((0,tc.isObject)(n)){var u=n;l[u.type]&&(s=l[u.type](!1,i,a,u.cfg))}else l[n]&&(s=l[n](!1,i,a));if(t==="autoRotate"){if(s){var f=i.getChildren(),c=this.get("verticalFactor");(0,tc.each)(f,function(d){var p=d.attr("textAlign");if(p==="center"){var v=c>0?"end":"start";d.attr("textAlign",v)}})}}else if(t==="autoHide"){var h=i.getChildren().slice(0);(0,tc.each)(h,function(d){d.get("visible")||(o.get("isRegister")&&o.unregisterElement(d),d.remove())})}},e}(zb),get=Gjt;var Jy={};Dn(Jy,{Base:()=>Ub,Circle:()=>bet,Html:()=>Cet,Line:()=>xet});var yet=U(q());var zjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"crosshair",type:"base",line:{},text:null,textBackground:{},capture:!1,defaultCfg:{line:{style:{lineWidth:1,stroke:Gr.lineColor}},text:{position:"start",offset:10,autoRotate:!1,content:null,style:{fill:Gr.textColor,textAlign:"center",textBaseline:"middle",fontFamily:Gr.fontFamily}},textBackground:{padding:5,style:{stroke:Gr.lineColor}}}})},e.prototype.renderInner=function(t){this.get("line")&&this.renderLine(t),this.get("text")&&(this.renderText(t),this.renderBackground(t))},e.prototype.renderText=function(t){var n=this.get("text"),i=n.style,a=n.autoRotate,o=n.content;if(!(0,yet.isNil)(o)){var s=this.getTextPoint(),l=null;if(a){var u=this.getRotateAngle();l=Qf(s,u)}this.addShape(t,{type:"text",name:"crosshair-text",id:this.getElementId("text"),attrs:E(E(E({},s),{text:o,matrix:l}),i)})}},e.prototype.renderLine=function(t){var n=this.getLinePath(),i=this.get("line"),a=i.style;this.addShape(t,{type:"path",name:"crosshair-line",id:this.getElementId("line"),attrs:E({path:n},a)})},e.prototype.renderBackground=function(t){var n=this.getElementId("text"),i=t.findById(n),a=this.get("textBackground");if(a&&i){var o=i.getBBox(),s=qy(a.padding),l=a.style,u=this.addShape(t,{type:"rect",name:"crosshair-text-background",id:this.getElementId("text-background"),attrs:E({x:o.x-s[3],y:o.y-s[0],width:o.width+s[1]+s[3],height:o.height+s[0]+s[2],matrix:i.attr("matrix")},l)});u.toBack()}},e}(Yn),Ub=zjt;var Ujt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{type:"line",locationType:"region",start:null,end:null})},e.prototype.getRotateAngle=function(){var t=this.getLocation(),n=t.start,i=t.end,a=this.get("text").position,o=Math.atan2(i.y-n.y,i.x-n.x),s=a==="start"?o-Math.PI/2:o+Math.PI/2;return s},e.prototype.getTextPoint=function(){var t=this.getLocation(),n=t.start,i=t.end,a=this.get("text"),o=a.position,s=a.offset;return aL(n,i,o,s)},e.prototype.getLinePath=function(){var t=this.getLocation(),n=t.start,i=t.end;return[["M",n.x,n.y],["L",i.x,i.y]]},e}(Ub),xet=Ujt;var jjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{type:"circle",locationType:"circle",center:null,radius:100,startAngle:-Math.PI/2,endAngle:Math.PI*3/2})},e.prototype.getRotateAngle=function(){var t=this.getLocation(),n=t.startAngle,i=t.endAngle,a=this.get("text").position,o=a==="start"?n+Math.PI/2:i-Math.PI/2;return o},e.prototype.getTextPoint=function(){var t=this.get("text"),n=t.position,i=t.offset,a=this.getLocation(),o=a.center,s=a.radius,l=a.startAngle,u=a.endAngle,f=n==="start"?l:u,c=this.getRotateAngle()-Math.PI,h=fm(o,s,f),d=Math.cos(c)*i,p=Math.sin(c)*i;return{x:h.x+d,y:h.y+p}},e.prototype.getLinePath=function(){var t=this.getLocation(),n=t.center,i=t.radius,a=t.startAngle,o=t.endAngle,s=null;if(o-a==Math.PI*2){var l=n.x,u=n.y;s=[["M",l,u-i],["A",i,i,0,1,1,l,u+i],["A",i,i,0,1,1,l,u-i],["Z"]]}else{var f=fm(n,i,a),c=fm(n,i,o),h=Math.abs(o-a)>Math.PI?1:0,d=a>o?0:1;s=[["M",f.x,f.y],["A",i,i,0,h,d,c.x,c.y]]}return s},e}(Ub),bet=jjt;var cL=U(q());var Qy="g2-crosshair",Qw=Qy+"-line",Jw=Qy+"-text";var tE,_et=(tE={},tE[""+Qy]={position:"relative"},tE[""+Qw]={position:"absolute",backgroundColor:"rgba(0, 0, 0, 0.25)"},tE[""+Jw]={position:"absolute",color:Gr.textColor,fontFamily:Gr.fontFamily},tE);var Wjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"crosshair",type:"html",locationType:"region",start:{x:0,y:0},end:{x:0,y:0},capture:!1,text:null,containerTpl:'
    ',crosshairTpl:'
    ',textTpl:'{content}',domStyles:null,containerClassName:Qy,defaultStyles:_et,defaultCfg:{text:{position:"start",content:null,align:"center",offset:10}}})},e.prototype.render=function(){this.resetText(),this.resetPosition()},e.prototype.initCrossHair=function(){var t=this.getContainer(),n=this.get("crosshairTpl"),i=en(n);t.appendChild(i),this.applyStyle(Qw,i),this.set("crosshairEl",i)},e.prototype.getTextPoint=function(){var t=this.getLocation(),n=t.start,i=t.end,a=this.get("text"),o=a.position,s=a.offset;return aL(n,i,o,s)},e.prototype.resetText=function(){var t=this.get("text"),n=this.get("textEl");if(t){var i=t.content;if(!n){var a=this.getContainer(),o=(0,cL.substitute)(this.get("textTpl"),t);n=en(o),a.appendChild(n),this.applyStyle(Jw,n),this.set("textEl",n)}n.innerHTML=i}else n&&n.remove()},e.prototype.isVertical=function(t,n){return t.x===n.x},e.prototype.resetPosition=function(){var t=this.get("crosshairEl");t||(this.initCrossHair(),t=this.get("crosshairEl"));var n=this.get("start"),i=this.get("end"),a=Math.min(n.x,i.x),o=Math.min(n.y,i.y);this.isVertical(n,i)?yr(t,{width:"1px",height:ws(Math.abs(i.y-n.y))}):yr(t,{height:"1px",width:ws(Math.abs(i.x-n.x))}),yr(t,{top:ws(o),left:ws(a)}),this.alignText()},e.prototype.alignText=function(){var t=this.get("textEl");if(t){var n=this.get("text").align,i=t.clientWidth,a=this.getTextPoint();switch(n){case"center":a.x=a.x-i/2;break;case"right":a.x=a.x-i;case"left":break}yr(t,{top:ws(a.y),left:ws(a.x)})}},e.prototype.updateInner=function(t){(0,cL.hasKey)(t,"text")&&this.resetText(),r.prototype.updateInner.call(this,t)},e}(pm),Cet=Wjt;var eE={};Dn(eE,{Base:()=>jb,Circle:()=>wet,Line:()=>Aet});var vm=U(q());var Vjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"grid",line:{},alternateColor:null,capture:!1,items:[],closed:!1,defaultCfg:{line:{type:"line",style:{lineWidth:1,stroke:Gr.lineColor}}}})},e.prototype.getLineType=function(){var t=this.get("line")||this.get("defaultCfg").line;return t.type},e.prototype.renderInner=function(t){this.drawGrid(t)},e.prototype.getAlternatePath=function(t,n){var i=this.getGridPath(t),a=n.slice(0).reverse(),o=this.getGridPath(a,!0),s=this.get("closed");return s?i=i.concat(o):(o[0][0]="L",i=i.concat(o),i.push(["Z"])),i},e.prototype.getPathStyle=function(){return this.get("line").style},e.prototype.drawGrid=function(t){var n=this,i=this.get("line"),a=this.get("items"),o=this.get("alternateColor"),s=null;(0,vm.each)(a,function(l,u){var f=l.id||u;if(i){var c=n.getPathStyle();c=(0,vm.isFunction)(c)?c(l,u,a):c;var h=n.getElementId("line-"+f),d=n.getGridPath(l.points);n.addShape(t,{type:"path",name:"grid-line",id:h,attrs:(0,vm.mix)({path:d},c)})}if(o&&u>0){var p=n.getElementId("region-"+f),v=u%2==0;if((0,vm.isString)(o))v&&n.drawAlternateRegion(p,t,s.points,l.points,o);else{var m=v?o[1]:o[0];n.drawAlternateRegion(p,t,s.points,l.points,m)}}s=l})},e.prototype.drawAlternateRegion=function(t,n,i,a,o){var s=this.getAlternatePath(i,a);this.addShape(n,{type:"path",id:t,name:"grid-region",attrs:{path:s,fill:o}})},e}(Yn),jb=Vjt;var Yz=U(q());function Hjt(r,e,t,n){var i=t-r,a=n-e;return Math.sqrt(i*i+a*a)}var Yjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{type:"circle",center:null,closed:!0})},e.prototype.getGridPath=function(t,n){var i=this.getLineType(),a=this.get("closed"),o=[];if(t.length)if(i==="circle"){var s=this.get("center"),l=t[0],u=Hjt(s.x,s.y,l.x,l.y),f=n?0:1;a?(o.push(["M",s.x,s.y-u]),o.push(["A",u,u,0,0,f,s.x,s.y+u]),o.push(["A",u,u,0,0,f,s.x,s.y-u]),o.push(["Z"])):(0,Yz.each)(t,function(c,h){h===0?o.push(["M",c.x,c.y]):o.push(["A",u,u,0,0,f,c.x,c.y])})}else(0,Yz.each)(t,function(c,h){h===0?o.push(["M",c.x,c.y]):o.push(["L",c.x,c.y])}),a&&o.push(["Z"]);return o},e}(jb),wet=Yjt;var Eet=U(q());var Xjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{type:"line"})},e.prototype.getGridPath=function(t){var n=[];return(0,Eet.each)(t,function(i,a){a===0?n.push(["M",i.x,i.y]):n.push(["L",i.x,i.y])}),n},e}(jb),Aet=Xjt;var rE={};Dn(rE,{Base:()=>Wb,Category:()=>Tet,Continuous:()=>Let});var _i=U(q());var qjt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"legend",layout:"horizontal",locationType:"point",x:0,y:0,offsetX:0,offsetY:0,title:null,background:null})},e.prototype.getLayoutBBox=function(){var t=r.prototype.getLayoutBBox.call(this),n=this.get("maxWidth"),i=this.get("maxHeight"),a=t.width,o=t.height;return n&&(a=Math.min(a,n)),i&&(o=Math.min(o,i)),Fb(t.minX,t.minY,a,o)},e.prototype.setLocation=function(t){this.set("x",t.x),this.set("y",t.y),this.resetLocation()},e.prototype.resetLocation=function(){var t=this.get("x"),n=this.get("y"),i=this.get("offsetX"),a=this.get("offsetY");this.moveElementTo(this.get("group"),{x:t+i,y:n+a})},e.prototype.applyOffset=function(){this.resetLocation()},e.prototype.getDrawPoint=function(){return this.get("currentPoint")},e.prototype.setDrawPoint=function(t){return this.set("currentPoint",t)},e.prototype.renderInner=function(t){this.resetDraw(),this.get("title")&&this.drawTitle(t),this.drawLegendContent(t),this.get("background")&&this.drawBackground(t)},e.prototype.drawBackground=function(t){var n=this.get("background"),i=t.getBBox(),a=qy(n.padding),o=E({x:0,y:0,width:i.width+a[1]+a[3],height:i.height+a[0]+a[2]},n.style),s=this.addShape(t,{type:"rect",id:this.getElementId("background"),name:"legend-background",attrs:o});s.toBack()},e.prototype.drawTitle=function(t){var n=this.get("currentPoint"),i=this.get("title"),a=i.spacing,o=i.style,s=i.text,l=this.addShape(t,{type:"text",id:this.getElementId("title"),name:"legend-title",attrs:E({text:s,x:n.x,y:n.y},o)}),u=l.getBBox();this.set("currentPoint",{x:n.x,y:u.maxY+a})},e.prototype.resetDraw=function(){var t=this.get("background"),n={x:0,y:0};if(t){var i=qy(t.padding);n.x=i[3],n.y=i[0]}this.set("currentPoint",n)},e}(Yn),Wb=qjt;var Xz={marker:{style:{inactiveFill:"#000",inactiveOpacity:.45,fill:"#000",opacity:1,size:12}},text:{style:{fill:"#ccc",fontSize:12}}},hL={fill:Gr.textColor,fontSize:12,textAlign:"start",textBaseline:"middle",fontFamily:Gr.fontFamily,fontWeight:"normal",lineHeight:12},qz="navigation-arrow-right",Kz="navigation-arrow-left",Met={right:90*Math.PI/180,left:(360-90)*Math.PI/180,up:0,down:180*Math.PI/180},Kjt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.currentPageIndex=1,t.totalPagesCnt=1,t.pageWidth=0,t.pageHeight=0,t.startX=0,t.startY=0,t.onNavigationBack=function(){var n=t.getElementByLocalId("item-group");if(t.currentPageIndex>1){t.currentPageIndex-=1,t.updateNavigation();var i=t.getCurrentNavigationMatrix();t.get("animate")?n.animate({matrix:i},100):n.attr({matrix:i})}},t.onNavigationAfter=function(){var n=t.getElementByLocalId("item-group");if(t.currentPageIndexm&&(m=A),d==="horizontal"?(g&&gS&&(S=M.width)}),C=S,S+=h,u&&(S=Math.min(u,S),C=Math.min(u,C)),this.pageWidth=S,this.pageHeight=f-Math.max(m.height,d+w);var P=Math.floor(this.pageHeight/(d+w));(0,_i.each)(l,function(L,M){M!==0&&M%P==0&&(x+=1,g.x+=S,g.y=o),i.moveElementTo(L,g),L.getParent().setClip({type:"rect",attrs:{x:g.x,y:g.y,width:S,height:d}}),g.y+=d+w}),this.totalPagesCnt=x,this.moveElementTo(v,{x:a+C/2-m.width/2-m.minX,y:f-m.height-m.minY})}this.pageHeight&&this.pageWidth&&n.getParent().setClip({type:"rect",attrs:{x:this.startX,y:this.startY,width:this.pageWidth,height:this.pageHeight}}),s==="horizontal"&&this.get("maxRow")?this.totalPagesCnt=Math.ceil(x/this.get("maxRow")):this.totalPagesCnt=x,this.currentPageIndex>this.totalPagesCnt&&(this.currentPageIndex=1),this.updateNavigation(v),n.attr("matrix",this.getCurrentNavigationMatrix())},e.prototype.drawNavigation=function(t,n,i,a){var o={x:0,y:0},s=this.addGroup(t,{id:this.getElementId("navigation-group"),name:"legend-navigation"}),l=(0,_i.get)(a.marker,"style",{}),u=l.size,f=u===void 0?12:u,c=rr(l,["size"]),h=this.drawArrow(s,o,Kz,n==="horizontal"?"up":"left",f,c);h.on("click",this.onNavigationBack);var d=h.getBBox();o.x+=d.width+2;var p=this.addShape(s,{type:"text",id:this.getElementId("navigation-text"),name:"navigation-text",attrs:E({x:o.x,y:o.y+f/2,text:i,textBaseline:"middle"},(0,_i.get)(a.text,"style"))}),v=p.getBBox();o.x+=v.width+2;var m=this.drawArrow(s,o,qz,n==="horizontal"?"down":"right",f,c);return m.on("click",this.onNavigationAfter),s},e.prototype.updateNavigation=function(t){var n=(0,_i.deepMix)({},Xz,this.get("pageNavigator")),i=n.marker.style,a=i.fill,o=i.opacity,s=i.inactiveFill,l=i.inactiveOpacity,u=this.currentPageIndex+"/"+this.totalPagesCnt,f=t?t.getChildren()[1]:this.getElementByLocalId("navigation-text"),c=t?t.findById(this.getElementId(Kz)):this.getElementByLocalId(Kz),h=t?t.findById(this.getElementId(qz)):this.getElementByLocalId(qz);f.attr("text",u),c.attr("opacity",this.currentPageIndex===1?l:o),c.attr("fill",this.currentPageIndex===1?s:a),c.attr("cursor",this.currentPageIndex===1?"not-allowed":"pointer"),h.attr("opacity",this.currentPageIndex===this.totalPagesCnt?l:o),h.attr("fill",this.currentPageIndex===this.totalPagesCnt?s:a),h.attr("cursor",this.currentPageIndex===this.totalPagesCnt?"not-allowed":"pointer");var d=c.getBBox().maxX+2;f.attr("x",d),d+=f.getBBox().width+2,this.updateArrowPath(h,{x:d,y:0})},e.prototype.drawArrow=function(t,n,i,a,o,s){var l=n.x,u=n.y,f=this.addShape(t,{type:"path",id:this.getElementId(i),name:i,attrs:E({size:o,direction:a,path:[["M",l+o/2,u],["L",l,u+o],["L",l+o,u+o],["Z"]],cursor:"pointer"},s)});return f.attr("matrix",Qf({x:l+o/2,y:u+o/2},Met[a])),f},e.prototype.updateArrowPath=function(t,n){var i=n.x,a=n.y,o=t.attr(),s=o.size,l=o.direction,u=Qf({x:i+s/2,y:a+s/2},Met[l]);t.attr("path",[["M",i+s/2,a],["L",i,a+s],["L",i+s,a+s],["Z"]]),t.attr("matrix",u)},e.prototype.getCurrentNavigationMatrix=function(){var t=this,n=t.currentPageIndex,i=t.pageWidth,a=t.pageHeight,o=this.get("layout"),s=o==="horizontal"?{x:0,y:a*(1-n)}:{x:i*(1-n),y:0};return Hw(s)},e.prototype.applyItemStates=function(t,n){var i=this.getItemStates(t),a=i.length>0;if(a){var o=n.getChildren(),s=this.get("itemStates");(0,_i.each)(o,function(l){var u=l.get("name"),f=u.split("-")[2],c=$y(t,f,s);c&&(l.attr(c),f==="marker"&&!(l.get("isStroke")&&l.get("isFill"))&&(l.get("isStroke")&&l.attr("fill",null),l.get("isFill")&&l.attr("stroke",null)))})}},e.prototype.getLimitItemWidth=function(){var t=this.get("itemWidth"),n=this.get("maxItemWidth");return n?t&&(n=t<=n?t:n):t&&(n=t),n},e}(Wb),Tet=Kjt;var mm=U(q());var Zjt=1.4,Iet=.4,$jt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{type:"continue",min:0,max:100,value:null,colors:[],track:{},rail:{},label:{},handler:{},slidable:!0,tip:null,step:null,maxWidth:null,maxHeight:null,defaultCfg:{label:{align:"rail",spacing:5,formatter:null,style:{fontSize:12,fill:Gr.textColor,textBaseline:"middle",fontFamily:Gr.fontFamily}},handler:{size:10,style:{fill:"#fff",stroke:"#333"}},track:{},rail:{type:"color",size:20,defaultLength:100,style:{fill:"#DCDEE2"}},title:{spacing:5,style:{fill:Gr.textColor,fontSize:12,textAlign:"start",textBaseline:"top"}}}})},e.prototype.isSlider=function(){return!0},e.prototype.getValue=function(){return this.getCurrentValue()},e.prototype.getRange=function(){return{min:this.get("min"),max:this.get("max")}},e.prototype.setRange=function(t,n){this.update({min:t,max:n})},e.prototype.setValue=function(t){var n=this.getValue();this.set("value",t);var i=this.get("group");this.resetTrackClip(),this.get("slidable")&&this.resetHandlers(i),this.delegateEmit("valuechanged",{originValue:n,value:t})},e.prototype.initEvent=function(){var t=this.get("group");this.bindSliderEvent(t),this.bindRailEvent(t),this.bindTrackEvent(t)},e.prototype.drawLegendContent=function(t){this.drawRail(t),this.drawLabels(t),this.fixedElements(t),this.resetTrack(t),this.resetTrackClip(t),this.get("slidable")&&this.resetHandlers(t)},e.prototype.bindSliderEvent=function(t){this.bindHandlersEvent(t)},e.prototype.bindHandlersEvent=function(t){var n=this;t.on("legend-handler-min:drag",function(i){var a=n.getValueByCanvasPoint(i.x,i.y),o=n.getCurrentValue(),s=o[1];sa&&(s=a),n.setValue([s,a])})},e.prototype.bindRailEvent=function(t){},e.prototype.bindTrackEvent=function(t){var n=this,i=null;t.on("legend-track:dragstart",function(a){i={x:a.x,y:a.y}}),t.on("legend-track:drag",function(a){if(!!i){var o=n.getValueByCanvasPoint(i.x,i.y),s=n.getValueByCanvasPoint(a.x,a.y),l=n.getCurrentValue(),u=l[1]-l[0],f=n.getRange(),c=s-o;c<0?l[0]+c>f.min?n.setValue([l[0]+c,l[1]+c]):n.setValue([f.min,f.min+u]):c>0&&(c>0&&l[1]+co&&(c=o),c0&&this.changeRailLength(a,s,i[s]-d)}},e.prototype.changeRailLength=function(t,n,i){var a=t.getBBox(),o;n==="height"?o=this.getRailPath(a.x,a.y,a.width,i):o=this.getRailPath(a.x,a.y,i,a.height),t.attr("path",o)},e.prototype.changeRailPosition=function(t,n,i){var a=t.getBBox(),o=this.getRailPath(n,i,a.width,a.height);t.attr("path",o)},e.prototype.fixedHorizontal=function(t,n,i,a){var o=this.get("label"),s=o.align,l=o.spacing,u=i.getBBox(),f=t.getBBox(),c=n.getBBox(),h=u.height;this.fitRailLength(f,c,u,i),u=i.getBBox(),s==="rail"?(t.attr({x:a.x,y:a.y+h/2}),this.changeRailPosition(i,a.x+f.width+l,a.y),n.attr({x:a.x+f.width+u.width+l*2,y:a.y+h/2})):s==="top"?(t.attr({x:a.x,y:a.y}),n.attr({x:a.x+u.width,y:a.y}),this.changeRailPosition(i,a.x,a.y+f.height+l)):(this.changeRailPosition(i,a.x,a.y),t.attr({x:a.x,y:a.y+u.height+l}),n.attr({x:a.x+u.width,y:a.y+u.height+l}))},e.prototype.fixedVertail=function(t,n,i,a){var o=this.get("label"),s=o.align,l=o.spacing,u=i.getBBox(),f=t.getBBox(),c=n.getBBox();if(this.fitRailLength(f,c,u,i),u=i.getBBox(),s==="rail")t.attr({x:a.x,y:a.y}),this.changeRailPosition(i,a.x,a.y+f.height+l),n.attr({x:a.x,y:a.y+f.height+u.height+l*2});else if(s==="right")t.attr({x:a.x+u.width+l,y:a.y}),this.changeRailPosition(i,a.x,a.y),n.attr({x:a.x+u.width+l,y:a.y+u.height});else{var h=Math.max(f.width,c.width);t.attr({x:a.x,y:a.y}),this.changeRailPosition(i,a.x+h+l,a.y),n.attr({x:a.x,y:a.y+u.height})}},e}(Wb),Let=$jt;var yL={};Dn(yL,{Html:()=>ket});var ph=U(q());var rs={};Dn(rs,{CONTAINER_CLASS:()=>nE,CROSSHAIR_X:()=>mL,CROSSHAIR_Y:()=>gL,LIST_CLASS:()=>aE,LIST_ITEM_CLASS:()=>dL,MARKER_CLASS:()=>pL,NAME_CLASS:()=>Oet,TITLE_CLASS:()=>iE,VALUE_CLASS:()=>vL});var nE="g2-tooltip",iE="g2-tooltip-title",aE="g2-tooltip-list",dL="g2-tooltip-list-item",pL="g2-tooltip-marker",vL="g2-tooltip-value",Oet="g2-tooltip-name",mL="g2-tooltip-crosshair-x",gL="g2-tooltip-crosshair-y";var dh,Det=(dh={},dh[""+nE]={position:"absolute",visibility:"visible",zIndex:8,transition:"visibility 0.2s cubic-bezier(0.23, 1, 0.32, 1), left 0.4s cubic-bezier(0.23, 1, 0.32, 1), top 0.4s cubic-bezier(0.23, 1, 0.32, 1)",backgroundColor:"rgba(255, 255, 255, 0.9)",boxShadow:"0px 0px 10px #aeaeae",borderRadius:"3px",color:"rgb(87, 87, 87)",fontSize:"12px",fontFamily:Gr.fontFamily,lineHeight:"20px",padding:"10px 10px 6px 10px"},dh[""+iE]={marginBottom:"4px"},dh[""+aE]={margin:"0px",listStyleType:"none",padding:"0px"},dh[""+dL]={listStyleType:"none",marginBottom:"4px"},dh[""+pL]={width:"8px",height:"8px",borderRadius:"50%",display:"inline-block",marginRight:"8px"},dh[""+vL]={display:"inline-block",float:"right",marginLeft:"30px"},dh[""+mL]={position:"absolute",width:"1px",backgroundColor:"rgba(0, 0, 0, 0.25)"},dh[""+gL]={position:"absolute",height:"1px",backgroundColor:"rgba(0, 0, 0, 0.25)"},dh);function Qjt(r,e,t,n,i){var a={left:ri.x+i.width,top:ei.y+i.height};return a}function Jjt(r,e,t,n,i,a){var o=r,s=e;switch(a){case"left":o=r-n-t,s=e-i/2;break;case"right":o=r+t,s=e-i/2;break;case"top":o=r-n/2,s=e-i-t;break;case"bottom":o=r-n/2,s=e+t;break;default:o=r+t,s=e-i-t;break}return{x:o,y:s}}function Pet(r,e,t,n,i,a,o){var s=Jjt(r,e,t,n,i,a);if(o){var l=Qjt(s.x,s.y,n,i,o);a==="auto"?(l.right&&(s.x=Math.max(0,r-n-t)),l.top&&(s.y=Math.max(0,e-i-t))):a==="top"||a==="bottom"?(l.left&&(s.x=o.x),l.right&&(s.x=o.x+o.width-n),a==="top"&&l.top&&(s.y=e+t),a==="bottom"&&l.bottom&&(s.y=e-i-t)):(l.top&&(s.y=o.y),l.bottom&&(s.y=o.y+o.height-i),a==="left"&&l.left&&(s.x=r+t),a==="right"&&l.right&&(s.x=r-n-t))}return s}function tWt(r,e){var t=!1;return(0,ph.each)(e,function(n){if((0,ph.hasKey)(r,n))return t=!0,!1}),t}var eWt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"tooltip",type:"html",x:0,y:0,items:[],customContent:null,containerTpl:'
      ',itemTpl:'
    • + + {name}: + {value} +
    • `,xCrosshairTpl:'
      ',yCrosshairTpl:'
      ',title:null,showTitle:!0,region:null,crosshairsRegion:null,containerClassName:nE,crosshairs:null,offset:10,position:"right",domStyles:null,defaultStyles:Det})},e.prototype.render=function(){this.get("customContent")?this.renderCustomContent():(this.resetTitle(),this.renderItems()),this.resetPosition()},e.prototype.clear=function(){this.clearCrosshairs(),this.setTitle(""),this.clearItemDoms()},e.prototype.show=function(){var t=this.getContainer();!t||this.destroyed||(this.set("visible",!0),yr(t,{visibility:"visible"}),this.setCrossHairsVisible(!0))},e.prototype.hide=function(){var t=this.getContainer();!t||this.destroyed||(this.set("visible",!1),yr(t,{visibility:"hidden"}),this.setCrossHairsVisible(!1))},e.prototype.getLocation=function(){return{x:this.get("x"),y:this.get("y")}},e.prototype.setLocation=function(t){this.set("x",t.x),this.set("y",t.y),this.resetPosition()},e.prototype.setCrossHairsVisible=function(t){var n=t?"":"none",i=this.get("xCrosshairDom"),a=this.get("yCrosshairDom");i&&yr(i,{display:n}),a&&yr(a,{display:n})},e.prototype.initContainer=function(){if(r.prototype.initContainer.call(this),this.get("customContent")){this.get("container")&&this.get("container").remove();var t=this.getHtmlContentNode();this.get("parent").appendChild(t),this.set("container",t),this.resetStyles(),this.applyStyles()}},e.prototype.updateInner=function(t){this.get("customContent")?this.renderCustomContent():(tWt(t,["title","showTitle"])&&this.resetTitle(),(0,ph.hasKey)(t,"items")&&this.renderItems()),r.prototype.updateInner.call(this,t)},e.prototype.initDom=function(){this.cacheDoms()},e.prototype.removeDom=function(){r.prototype.removeDom.call(this),this.clearCrosshairs()},e.prototype.resetPosition=function(){var t=this.get("x"),n=this.get("y"),i=this.get("offset"),a=this.getOffset(),o=a.offsetX,s=a.offsetY,l=this.get("position"),u=this.get("region"),f=this.getContainer(),c=this.getBBox(),h=c.width,d=c.height,p;u&&(p=ap(u));var v=Pet(t,n,i,h,d,l,p);yr(f,{left:ws(v.x+o),top:ws(v.y+s)}),this.resetCrosshairs()},e.prototype.renderCustomContent=function(){var t=this.getHtmlContentNode(),n=this.get("parent"),i=this.get("container");i&&i.parentNode===n?n.replaceChild(t,i):n.appendChild(t),this.set("container",t),this.resetStyles(),this.applyStyles()},e.prototype.getHtmlContentNode=function(){var t,n=this.get("customContent");if(n){var i=n(this.get("title"),this.get("items"));(0,ph.isElement)(i)?t=i:t=en(i)}return t},e.prototype.cacheDoms=function(){var t=this.getContainer(),n=t.getElementsByClassName(iE)[0],i=t.getElementsByClassName(aE)[0];this.set("titleDom",n),this.set("listDom",i)},e.prototype.resetTitle=function(){var t=this.get("title"),n=this.get("showTitle");n&&t?this.setTitle(t):this.setTitle("")},e.prototype.setTitle=function(t){var n=this.get("titleDom");n&&(n.innerText=t)},e.prototype.resetCrosshairs=function(){var t=this.get("crosshairsRegion"),n=this.get("crosshairs");if(!t||!n)this.clearCrosshairs();else{var i=ap(t),a=this.get("xCrosshairDom"),o=this.get("yCrosshairDom");n==="x"?(this.resetCrosshair("x",i),o&&(o.remove(),this.set("yCrosshairDom",null))):n==="y"?(this.resetCrosshair("y",i),a&&(a.remove(),this.set("xCrosshairDom",null))):(this.resetCrosshair("x",i),this.resetCrosshair("y",i)),this.setCrossHairsVisible(this.get("visible"))}},e.prototype.resetCrosshair=function(t,n){var i=this.checkCrosshair(t),a=this.get(t);t==="x"?yr(i,{left:ws(a),top:ws(n.y),height:ws(n.height)}):yr(i,{top:ws(a),left:ws(n.x),width:ws(n.width)})},e.prototype.checkCrosshair=function(t){var n=t+"CrosshairDom",i=t+"CrosshairTpl",a="CROSSHAIR_"+t.toUpperCase(),o=rs[a],s=this.get(n),l=this.get("parent");return s||(s=en(this.get(i)),this.applyStyle(o,s),l.appendChild(s),this.set(n,s)),s},e.prototype.renderItems=function(){this.clearItemDoms();var t=this.get("items"),n=this.get("itemTpl"),i=this.get("listDom");i&&((0,ph.each)(t,function(a){var o=mu.toCSSGradient(a.color),s=E(E({},a),{color:o}),l=(0,ph.substitute)(n,s),u=en(l);i.appendChild(u)}),this.applyChildrenStyles(i,this.get("domStyles")))},e.prototype.clearItemDoms=function(){this.get("listDom")&&Nb(this.get("listDom"))},e.prototype.clearCrosshairs=function(){var t=this.get("xCrosshairDom"),n=this.get("yCrosshairDom");t&&t.remove(),n&&n.remove(),this.set("xCrosshairDom",null),this.set("yCrosshairDom",null)},e}(pm),ket=eWt;var Si=U(q());var Ret={opacity:0},Net={stroke:"#C5C5C5",strokeOpacity:.85},Fet={fill:"#CACED4",opacity:.85};var vh=U(q());function rWt(r){return(0,vh.map)(r,function(e,t){var n=t===0?"M":"L",i=e[0],a=e[1];return[n,i,a]})}function Bet(r){return rWt(r)}function nWt(r){if(r.length<=2)return Bet(r);var e=[];(0,vh.each)(r,function(o){(0,vh.isEqual)(o,e.slice(e.length-2))||e.push(o[0],o[1])});var t=zy(e,!1),n=(0,vh.head)(r),i=n[0],a=n[1];return t.unshift(["M",i,a]),t}function Get(r,e,t,n){n===void 0&&(n=!0);var i=new $f({values:r}),a=new oh({values:(0,vh.map)(r,function(s,l){return l})}),o=(0,vh.map)(r,function(s,l){return[a.scale(l)*e,t-i.scale(s)*t]});return n?nWt(o):Bet(o)}function iWt(r,e){var t=new $f({values:r}),n=Math.max(0,t.min);return e-t.scale(n)*e}function zet(r,e,t,n){var i=dn(r),a=iWt(n,t);return i.push(["L",e,a]),i.push(["L",0,a]),i.push(["Z"]),i}var Uet=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"trend",x:0,y:0,width:200,height:16,smooth:!0,isArea:!1,data:[],backgroundStyle:Ret,lineStyle:Net,areaStyle:Fet})},e.prototype.renderInner=function(t){var n=this.cfg,i=n.width,a=n.height,o=n.data,s=n.smooth,l=n.isArea,u=n.backgroundStyle,f=n.lineStyle,c=n.areaStyle;this.addShape(t,{id:this.getElementId("background"),type:"rect",attrs:E({x:0,y:0,width:i,height:a},u)});var h=Get(o,i,a,s);if(this.addShape(t,{id:this.getElementId("line"),type:"path",attrs:E({path:h},f)}),l){var d=zet(h,i,a,o);this.addShape(t,{id:this.getElementId("area"),type:"path",attrs:E({path:d},c)})}},e.prototype.applyOffset=function(){var t=this.cfg,n=t.x,i=t.y;this.moveElementTo(this.get("group"),{x:n,y:i})},e}(Yn);var Zz={fill:"#F7F7F7",stroke:"#BFBFBF",radius:2,opacity:1,cursor:"ew-resize",highLightFill:"#FFF"},$z=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"handler",x:0,y:0,width:10,height:24,style:Zz})},e.prototype.renderInner=function(t){var n=this.cfg,i=n.width,a=n.height,o=n.style,s=o.fill,l=o.stroke,u=o.radius,f=o.opacity,c=o.cursor;this.addShape(t,{type:"rect",id:this.getElementId("background"),attrs:{x:0,y:0,width:i,height:a,fill:s,stroke:l,radius:u,opacity:f,cursor:c}});var h=1/3*i,d=2/3*i,p=1/4*a,v=3/4*a;this.addShape(t,{id:this.getElementId("line-left"),type:"line",attrs:{x1:h,y1:p,x2:h,y2:v,stroke:l,cursor:c}}),this.addShape(t,{id:this.getElementId("line-right"),type:"line",attrs:{x1:d,y1:p,x2:d,y2:v,stroke:l,cursor:c}})},e.prototype.applyOffset=function(){this.moveElementTo(this.get("group"),{x:this.get("x"),y:this.get("y")})},e.prototype.initEvent=function(){this.bindEvents()},e.prototype.bindEvents=function(){var t=this;this.get("group").on("mouseenter",function(){var n=t.get("style").highLightFill;t.getElementByLocalId("background").attr("fill",n),t.draw()}),this.get("group").on("mouseleave",function(){var n=t.get("style").fill;t.getElementByLocalId("background").attr("fill",n),t.draw()})},e.prototype.draw=function(){var t=this.get("container").get("canvas");t&&t.draw()},e}(Yn);var jet={fill:"#416180",opacity:.05},Wet={fill:"#5B8FF9",opacity:.15,cursor:"move"},oE=10,Vet={width:oE,height:24},Het={textBaseline:"middle",fill:"#000",opacity:.45},Yet="sliderchange";var sE=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.onMouseDown=function(n){return function(i){t.currentTarget=n;var a=i.originalEvent;a.stopPropagation(),a.preventDefault(),t.prevX=(0,Si.get)(a,"touches.0.pageX",a.pageX),t.prevY=(0,Si.get)(a,"touches.0.pageY",a.pageY);var o=t.getContainerDOM();o.addEventListener("mousemove",t.onMouseMove),o.addEventListener("mouseup",t.onMouseUp),o.addEventListener("mouseleave",t.onMouseUp),o.addEventListener("touchmove",t.onMouseMove),o.addEventListener("touchend",t.onMouseUp),o.addEventListener("touchcancel",t.onMouseUp)}},t.onMouseMove=function(n){var i=t.cfg.width,a=[t.get("start"),t.get("end")];n.stopPropagation(),n.preventDefault();var o=(0,Si.get)(n,"touches.0.pageX",n.pageX),s=(0,Si.get)(n,"touches.0.pageY",n.pageY),l=o-t.prevX,u=t.adjustOffsetRange(l/i);t.updateStartEnd(u),t.updateUI(t.getElementByLocalId("foreground"),t.getElementByLocalId("minText"),t.getElementByLocalId("maxText")),t.prevX=o,t.prevY=s,t.draw(),t.emit(Yet,[t.get("start"),t.get("end")].sort()),t.delegateEmit("valuechanged",{originValue:a,value:[t.get("start"),t.get("end")]})},t.onMouseUp=function(){t.currentTarget&&(t.currentTarget=void 0);var n=t.getContainerDOM();n&&(n.removeEventListener("mousemove",t.onMouseMove),n.removeEventListener("mouseup",t.onMouseUp),n.removeEventListener("mouseleave",t.onMouseUp),n.removeEventListener("touchmove",t.onMouseMove),n.removeEventListener("touchend",t.onMouseUp),n.removeEventListener("touchcancel",t.onMouseUp))},t}return e.prototype.setRange=function(t,n){this.set("minLimit",t),this.set("maxLimit",n);var i=this.get("start"),a=this.get("end"),o=(0,Si.clamp)(i,t,n),s=(0,Si.clamp)(a,t,n);!this.get("isInit")&&(i!==o||a!==s)&&this.setValue([o,s])},e.prototype.getRange=function(){return{min:this.get("minLimit")||0,max:this.get("maxLimit")||1}},e.prototype.setValue=function(t){var n=this.getRange();if((0,Si.isArray)(t)&&t.length===2){var i=[this.get("start"),this.get("end")];this.update({start:(0,Si.clamp)(t[0],n.min,n.max),end:(0,Si.clamp)(t[1],n.min,n.max)}),this.get("updateAutoRender")||this.render(),this.delegateEmit("valuechanged",{originValue:i,value:t})}},e.prototype.getValue=function(){return[this.get("start"),this.get("end")]},e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"slider",x:0,y:0,width:100,height:16,backgroundStyle:{},foregroundStyle:{},handlerStyle:{},textStyle:{},defaultCfg:{backgroundStyle:jet,foregroundStyle:Wet,handlerStyle:Vet,textStyle:Het}})},e.prototype.update=function(t){var n=t.start,i=t.end,a=E({},t);(0,Si.isNil)(n)||(a.start=(0,Si.clamp)(n,0,1)),(0,Si.isNil)(i)||(a.end=(0,Si.clamp)(i,0,1)),r.prototype.update.call(this,a),this.minHandler=this.getChildComponentById(this.getElementId("minHandler")),this.maxHandler=this.getChildComponentById(this.getElementId("maxHandler")),this.trend=this.getChildComponentById(this.getElementId("trend"))},e.prototype.init=function(){this.set("start",(0,Si.clamp)(this.get("start"),0,1)),this.set("end",(0,Si.clamp)(this.get("end"),0,1)),r.prototype.init.call(this)},e.prototype.render=function(){r.prototype.render.call(this),this.updateUI(this.getElementByLocalId("foreground"),this.getElementByLocalId("minText"),this.getElementByLocalId("maxText"))},e.prototype.renderInner=function(t){var n=this.cfg,i=n.start,a=n.end,o=n.width,s=n.height,l=n.trendCfg,u=l===void 0?{}:l,f=n.minText,c=n.maxText,h=n.backgroundStyle,d=h===void 0?{}:h,p=n.foregroundStyle,v=p===void 0?{}:p,m=n.textStyle,g=m===void 0?{}:m,x=(0,Si.deepMix)({},Zz,this.cfg.handlerStyle),b=i*o,S=a*o;(0,Si.size)((0,Si.get)(u,"data"))&&(this.trend=this.addComponent(t,E({component:Uet,id:this.getElementId("trend"),x:0,y:0,width:o,height:s},u))),this.addShape(t,{id:this.getElementId("background"),type:"rect",attrs:E({x:0,y:0,width:o,height:s},d)});var C=this.addShape(t,{id:this.getElementId("minText"),type:"text",attrs:E({y:s/2,textAlign:"right",text:f,silent:!1},g)}),w=this.addShape(t,{id:this.getElementId("maxText"),type:"text",attrs:E({y:s/2,textAlign:"left",text:c,silent:!1},g)}),A=this.addShape(t,{id:this.getElementId("foreground"),name:"foreground",type:"rect",attrs:E({y:0,height:s},v)}),I=(0,Si.get)(x,"width",oE),P=(0,Si.get)(x,"height",24);this.minHandler=this.addComponent(t,{component:$z,id:this.getElementId("minHandler"),name:"handler-min",x:0,y:(s-P)/2,width:I,height:P,cursor:"ew-resize",style:x}),this.maxHandler=this.addComponent(t,{component:$z,id:this.getElementId("maxHandler"),name:"handler-max",x:0,y:(s-P)/2,width:I,height:P,cursor:"ew-resize",style:x})},e.prototype.applyOffset=function(){this.moveElementTo(this.get("group"),{x:this.get("x"),y:this.get("y")})},e.prototype.initEvent=function(){this.bindEvents()},e.prototype.updateUI=function(t,n,i){var a=this.cfg,o=a.start,s=a.end,l=a.width,u=a.minText,f=a.maxText,c=a.handlerStyle,h=a.height,d=o*l,p=s*l;this.trend&&(this.trend.update({width:l,height:h}),this.get("updateAutoRender")||this.trend.render()),t.attr("x",d),t.attr("width",p-d);var v=(0,Si.get)(c,"width",oE);n.attr("text",u),i.attr("text",f);var m=this._dodgeText([d,p],n,i),g=m[0],x=m[1];this.minHandler&&(this.minHandler.update({x:d-v/2}),this.get("updateAutoRender")||this.minHandler.render()),(0,Si.each)(g,function(b,S){return n.attr(S,b)}),this.maxHandler&&(this.maxHandler.update({x:p-v/2}),this.get("updateAutoRender")||this.maxHandler.render()),(0,Si.each)(x,function(b,S){return i.attr(S,b)})},e.prototype.bindEvents=function(){var t=this.get("group");t.on("handler-min:mousedown",this.onMouseDown("minHandler")),t.on("handler-min:touchstart",this.onMouseDown("minHandler")),t.on("handler-max:mousedown",this.onMouseDown("maxHandler")),t.on("handler-max:touchstart",this.onMouseDown("maxHandler"));var n=t.findById(this.getElementId("foreground"));n.on("mousedown",this.onMouseDown("foreground")),n.on("touchstart",this.onMouseDown("foreground"))},e.prototype.adjustOffsetRange=function(t){var n=this.cfg,i=n.start,a=n.end;switch(this.currentTarget){case"minHandler":{var o=0-i,s=1-i;return Math.min(s,Math.max(o,t))}case"maxHandler":{var o=0-a,s=1-a;return Math.min(s,Math.max(o,t))}case"foreground":{var o=0-i,s=1-a;return Math.min(s,Math.max(o,t))}}},e.prototype.updateStartEnd=function(t){var n=this.cfg,i=n.start,a=n.end;switch(this.currentTarget){case"minHandler":i+=t;break;case"maxHandler":a+=t;break;case"foreground":i+=t,a+=t;break}this.set("start",i),this.set("end",a)},e.prototype._dodgeText=function(t,n,i){var a,o,s=this.cfg,l=s.handlerStyle,u=s.width,f=2,c=(0,Si.get)(l,"width",oE),h=t[0],d=t[1],p=!1;h>d&&(a=[d,h],h=a[0],d=a[1],o=[i,n],n=o[0],i=o[1],p=!0);var v=n.getBBox(),m=i.getBBox(),g=v.width>h-f?{x:h+c/2+f,textAlign:"left"}:{x:h-c/2-f,textAlign:"right"},x=m.width>u-d-f?{x:d-c/2-f,textAlign:"right"}:{x:d+c/2+f,textAlign:"left"};return p?[x,g]:[g,x]},e.prototype.draw=function(){var t=this.get("container"),n=t&&t.get("canvas");n&&n.draw()},e.prototype.getContainerDOM=function(){var t=this.get("container"),n=t&&t.get("canvas");return n&&n.get("container")},e}(Yn);var ns=U(q());var aWt={trackColor:"rgba(0,0,0,0)",thumbColor:"rgba(0,0,0,0.15)",size:8,lineCap:"round"},Qz={default:aWt,hover:{thumbColor:"rgba(0,0,0,0.2)"}},xL=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.clearEvents=ns.noop,t.onStartEvent=function(n){return function(i){t.isMobile=n,i.originalEvent.preventDefault();var a=n?(0,ns.get)(i.originalEvent,"touches.0.clientX"):i.clientX,o=n?(0,ns.get)(i.originalEvent,"touches.0.clientY"):i.clientY;t.startPos=t.cfg.isHorizontal?a:o,t.bindLaterEvent()}},t.bindLaterEvent=function(){var n=t.getContainerDOM(),i=[];t.isMobile?i=[Ws(n,"touchmove",t.onMouseMove),Ws(n,"touchend",t.onMouseUp),Ws(n,"touchcancel",t.onMouseUp)]:i=[Ws(n,"mousemove",t.onMouseMove),Ws(n,"mouseup",t.onMouseUp),Ws(n,"mouseleave",t.onMouseUp)],t.clearEvents=function(){i.forEach(function(a){a.remove()})}},t.onMouseMove=function(n){var i=t.cfg,a=i.isHorizontal,o=i.thumbOffset;n.preventDefault();var s=t.isMobile?(0,ns.get)(n,"touches.0.clientX"):n.clientX,l=t.isMobile?(0,ns.get)(n,"touches.0.clientY"):n.clientY,u=a?s:l,f=u-t.startPos;t.startPos=u,t.updateThumbOffset(o+f)},t.onMouseUp=function(n){n.preventDefault(),t.clearEvents()},t.onTrackClick=function(n){var i=t.cfg,a=i.isHorizontal,o=i.x,s=i.y,l=i.thumbLen,u=t.getContainerDOM(),f=u.getBoundingClientRect(),c=n.clientX,h=n.clientY,d=a?c-f.left-o-l/2:h-f.top-s-l/2,p=t.validateRange(d);t.updateThumbOffset(p)},t.onThumbMouseOver=function(){var n=t.cfg.theme.hover.thumbColor;t.getElementByLocalId("thumb").attr("stroke",n),t.draw()},t.onThumbMouseOut=function(){var n=t.cfg.theme.default.thumbColor;t.getElementByLocalId("thumb").attr("stroke",n),t.draw()},t}return e.prototype.setRange=function(t,n){this.set("minLimit",t),this.set("maxLimit",n);var i=this.getValue(),a=(0,ns.clamp)(i,t,n);i!==a&&!this.get("isInit")&&this.setValue(a)},e.prototype.getRange=function(){var t=this.get("minLimit")||0,n=this.get("maxLimit")||1;return{min:t,max:n}},e.prototype.setValue=function(t){var n=this.getRange(),i=this.getValue();this.update({thumbOffset:(this.get("trackLen")-this.get("thumbLen"))*(0,ns.clamp)(t,n.min,n.max)}),this.delegateEmit("valuechange",{originalValue:i,value:this.getValue()})},e.prototype.getValue=function(){return(0,ns.clamp)(this.get("thumbOffset")/(this.get("trackLen")-this.get("thumbLen")),0,1)},e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return E(E({},t),{name:"scrollbar",isHorizontal:!0,minThumbLen:20,thumbOffset:0,theme:Qz})},e.prototype.renderInner=function(t){this.renderTrackShape(t),this.renderThumbShape(t)},e.prototype.applyOffset=function(){this.moveElementTo(this.get("group"),{x:this.get("x"),y:this.get("y")})},e.prototype.initEvent=function(){this.bindEvents()},e.prototype.renderTrackShape=function(t){var n=this.cfg,i=n.trackLen,a=n.theme,o=a===void 0?{default:{}}:a,s=(0,ns.deepMix)({},Qz,o).default,l=s.lineCap,u=s.trackColor,f=s.size,c=(0,ns.get)(this.cfg,"size",f),h=this.get("isHorizontal")?{x1:0+c/2,y1:c/2,x2:i-c/2,y2:c/2,lineWidth:c,stroke:u,lineCap:l}:{x1:c/2,y1:0+c/2,x2:c/2,y2:i-c/2,lineWidth:c,stroke:u,lineCap:l};return this.addShape(t,{id:this.getElementId("track"),name:"track",type:"line",attrs:h})},e.prototype.renderThumbShape=function(t){var n=this.cfg,i=n.thumbOffset,a=n.thumbLen,o=n.theme,s=(0,ns.deepMix)({},Qz,o).default,l=s.size,u=s.lineCap,f=s.thumbColor,c=(0,ns.get)(this.cfg,"size",l),h=this.get("isHorizontal")?{x1:i+c/2,y1:c/2,x2:i+a-c/2,y2:c/2,lineWidth:c,stroke:f,lineCap:u,cursor:"default"}:{x1:c/2,y1:i+c/2,x2:c/2,y2:i+a-c/2,lineWidth:c,stroke:f,lineCap:u,cursor:"default"};return this.addShape(t,{id:this.getElementId("thumb"),name:"thumb",type:"line",attrs:h})},e.prototype.bindEvents=function(){var t=this.get("group");t.on("mousedown",this.onStartEvent(!1)),t.on("mouseup",this.onMouseUp),t.on("touchstart",this.onStartEvent(!0)),t.on("touchend",this.onMouseUp);var n=t.findById(this.getElementId("track"));n.on("click",this.onTrackClick);var i=t.findById(this.getElementId("thumb"));i.on("mouseover",this.onThumbMouseOver),i.on("mouseout",this.onThumbMouseOut)},e.prototype.getContainerDOM=function(){var t=this.get("container"),n=t&&t.get("canvas");return n&&n.get("container")},e.prototype.validateRange=function(t){var n=this.cfg,i=n.thumbLen,a=n.trackLen,o=t;return t+i>a?o=a-i:t+ia.x?a.x:e,t=ta.y?a.y:n,i=i=n&&r<=i}function ert(r,e,t){if((0,SL.isString)(r))return r.padEnd(e,t);if((0,SL.isArray)(r)){var n=r.length;if(n=this.minX&&e.maxX<=this.maxX&&e.minY>=this.minY&&e.maxY<=this.maxY},r.prototype.clone=function(){return new r(this.x,this.y,this.width,this.height)},r.prototype.add=function(){for(var e=[],t=0;te.minX&&this.minYe.minY},r.prototype.size=function(){return this.width*this.height},r.prototype.isPointIn=function(e){return e.x>=this.minX&&e.x<=this.maxX&&e.y>=this.minY&&e.y<=this.maxY},r}();function rrt(r){return[[r.minX,r.minY],[r.maxX,r.minY],[r.maxX,r.maxY],[r.minX,r.maxY]]}function gh(r){if(r.isPolar&&!r.isTransposed)return(r.endAngle-r.startAngle)*r.getRadius();var e=r.convert({x:0,y:0}),t=r.convert({x:1,y:0});return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}function nrt(r){if(r.isPolar){var e=r.startAngle,t=r.endAngle;return t-e==Math.PI*2}return!1}function gm(r,e){var t=r.getCenter();return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function lE(r,e){var t=!1;if(r)if(r.type==="theta"){var n=r.start,i=r.end;t=lp(e.x,n.x,i.x)&&lp(e.y,n.y,i.y)}else{var a=r.invert(e);t=lp(a.x,0,1)&&lp(a.y,0,1)}return t}function yh(r,e){var t=r.getCenter();return Math.atan2(e.y-t.y,e.x-t.x)}function CL(r,e){e===void 0&&(e=0);var t=r.start,n=r.end,i=r.getWidth(),a=r.getHeight();if(r.isPolar){var o=r.startAngle,s=r.endAngle,l=r.getCenter(),u=r.getRadius();return{type:"path",startState:{path:yu(l.x,l.y,u+e,o,o)},endState:function(c){var h=(s-o)*c+o,d=yu(l.x,l.y,u+e,o,h);return{path:d}},attrs:{path:yu(l.x,l.y,u+e,o,s)}}}var f;return r.isTransposed?f={height:a+e*2}:f={width:i+e*2},{type:"rect",startState:{x:t.x-e,y:n.y-e,width:r.isTransposed?i+e*2:0,height:r.isTransposed?0:a+e*2},endState:f,attrs:{x:t.x-e,y:n.y-e,width:i+e*2,height:a+e*2}}}function irt(r,e){e===void 0&&(e=0);var t=r.start,n=r.end,i=r.getWidth(),a=r.getHeight(),o=Math.min(t.x,n.x),s=Math.min(t.y,n.y);return xa.fromRange(o-e,s-e,o+i+e,s+a+e)}var sWt=/^(?:(?!0000)[0-9]{4}([-/.]+)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]+)0?2\2(?:29))(\s+([01]|([01][0-9]|2[0-3])):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9]))?$/;function lWt(r){var e="linear";return sWt.test(r)?e="timeCat":(0,is.isString)(r)&&(e="cat"),e}function art(r,e,t){var n=e||[];if((0,is.isNumber)(r)||(0,is.isNil)((0,is.firstValue)(n,r))&&(0,is.isEmpty)(t)){var i=Pb("identity");return new i({field:r.toString(),values:[r]})}var a=(0,is.valuesOfKey)(n,r),o=(0,is.get)(t,"type",lWt(a[0])),s=Pb(o);return new s(E({field:r,values:a},t))}function ort(r,e){if(r.type!=="identity"&&e.type!=="identity"){var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);r.change(t)}}function ym(r){return r.alias||r.field}function wL(r,e,t){var n=r.values,i=n.length,a;if(i===1)a=[.5,1];else{var o=1,s=0;nrt(e)?e.isTransposed?(o=(0,is.get)(t,"widthRatio.multiplePie",1/1.3),s=1/i*o,a=[s/2,1-s/2]):a=[0,1-1/i]:(s=1/i/2,a=[s,1-s])}return a}function srt(r){var e=r.values.filter(function(t){return!(0,is.isNil)(t)&&!isNaN(t)});return Math.max.apply(Math,mn(mn([],e,!1),[(0,is.isNil)(r.max)?-1/0:r.max],!1))}function uWt(r){var e,t;switch(r){case xe.TOP:e={x:0,y:1},t={x:1,y:1};break;case xe.RIGHT:e={x:1,y:0},t={x:1,y:1};break;case xe.BOTTOM:e={x:0,y:0},t={x:1,y:0};break;case xe.LEFT:e={x:0,y:0},t={x:0,y:1};break;default:e=t={x:0,y:0}}return{start:e,end:t}}function fWt(r){var e,t;return r.isTransposed?(e={x:0,y:0},t={x:1,y:0}):(e={x:0,y:0},t={x:0,y:1}),{start:e,end:t}}function uE(r,e){var t={start:{x:0,y:0},end:{x:0,y:0}};r.isRect?t=uWt(e):r.isPolar&&(t=fWt(r));var n=t.start,i=t.end;return{start:r.convert(n),end:r.convert(i)}}function eU(r){var e=r.start,t=r.end;return e.x===t.x}function rU(r,e){var t=r.start,n=r.end,i=eU(r);return i?(t.y-n.y)*(e.x-t.x)>0?1:-1:(n.x-t.x)*(t.y-e.y)>0?-1:1}function fE(r,e){var t=(0,as.get)(r,["components","axis"],{});return(0,as.deepMix)({},(0,as.get)(t,["common"],{}),(0,as.deepMix)({},(0,as.get)(t,[e],{})))}function nU(r,e,t){var n=(0,as.get)(r,["components","axis"],{});return(0,as.deepMix)({},(0,as.get)(n,["common","title"],{}),(0,as.deepMix)({},(0,as.get)(n,[e,"title"],{})),t)}function EL(r){var e=r.x,t=r.y,n=r.circleCenter,i=t.start>t.end,a=r.isTransposed?r.convert({x:i?0:1,y:0}):r.convert({x:0,y:i?0:1}),o=[a.x-n.x,a.y-n.y],s=[1,0],l=a.y>n.y?oe.angle(o,s):oe.angle(o,s)*-1,u=l+(e.end-e.start),f=Math.sqrt(Math.pow(a.x-n.x,2)+Math.pow(a.y-n.y,2));return{center:n,radius:f,startAngle:l,endAngle:u}}function Hb(r,e){return(0,as.isBoolean)(r)?r===!1?!1:{}:(0,as.get)(r,[e])}function iU(r,e){return(0,as.get)(r,"position",e)}function aU(r,e){return(0,as.get)(e,["title","text"],ym(r))}var Hs=function(){function r(e,t){this.destroyed=!1,this.facets=[],this.view=e,this.cfg=(0,Vs.deepMix)({},this.getDefaultCfg(),t)}return r.prototype.init=function(){this.container||(this.container=this.createContainer());var e=this.view.getData();this.facets=this.generateFacets(e)},r.prototype.render=function(){this.renderViews()},r.prototype.update=function(){},r.prototype.clear=function(){this.clearFacetViews()},r.prototype.destroy=function(){this.clear(),this.container&&(this.container.remove(!0),this.container=void 0),this.destroyed=!0,this.view=void 0,this.facets=[]},r.prototype.facetToView=function(e){var t=e.region,n=e.data,i=e.padding,a=i===void 0?this.cfg.padding:i,o=this.view.createView({region:t,padding:a});o.data(n||[]),e.view=o,this.beforeEachView(o,e);var s=this.cfg.eachView;return s&&s(o,e),this.afterEachView(o,e),o},r.prototype.createContainer=function(){var e=this.view.getLayer(di.FORE);return e.addGroup()},r.prototype.renderViews=function(){this.createFacetViews()},r.prototype.createFacetViews=function(){var e=this;return this.facets.map(function(t){return e.facetToView(t)})},r.prototype.clearFacetViews=function(){var e=this;(0,Vs.each)(this.facets,function(t){t.view&&(e.view.removeView(t.view),t.view=void 0)})},r.prototype.parseSpacing=function(){var e=this.view.viewBBox,t=e.width,n=e.height,i=this.cfg.spacing;return i.map(function(a,o){return(0,Vs.isNumber)(a)?a/(o===0?t:n):parseFloat(a)/100})},r.prototype.getFieldValues=function(e,t){var n=[],i={};return(0,Vs.each)(e,function(a){var o=a[t];!(0,Vs.isNil)(o)&&!i[o]&&(n.push(o),i[o]=!0)}),n},r.prototype.getRegion=function(e,t,n,i){var a=this.parseSpacing(),o=a[0],s=a[1],l=(1+o)/(t===0?1:t)-o,u=(1+s)/(e===0?1:e)-s,f={x:(l+o)*n,y:(u+s)*i},c={x:f.x+l,y:f.y+u};return{start:f,end:c}},r.prototype.getDefaultCfg=function(){return{eachView:void 0,showTitle:!0,spacing:[0,0],padding:10,fields:[]}},r.prototype.getDefaultTitleCfg=function(){var e=this.view.getTheme().fontFamily;return{style:{fontSize:14,fill:"#666",fontFamily:e}}},r.prototype.processAxis=function(e,t){var n=e.getOptions(),i=n.coordinate,a=e.geometries,o=(0,Vs.get)(i,"type","rect");if(o==="rect"&&a.length){(0,Vs.isNil)(n.axes)&&(n.axes={});var s=n.axes,l=a[0].getXYFields(),u=l[0],f=l[1],c=Hb(s,u),h=Hb(s,f);c!==!1&&(n.axes[u]=this.getXAxisOption(u,s,c,t)),h!==!1&&(n.axes[f]=this.getYAxisOption(f,s,h,t))}},r.prototype.getFacetDataFilter=function(e){return function(t){return(0,Vs.every)(e,function(n){var i=n.field,a=n.value;return!(0,Vs.isNil)(a)&&i?t[i]===a:!0})}},r}();var lrt={},AL=function(r){return lrt[(0,oU.lowerCase)(r)]},up=function(r,e){lrt[(0,oU.lowerCase)(r)]=e};var dp=U(q());var Xa=U(q());var urt=U(q()),cWt=function(){function r(e,t){this.context=e,this.cfg=t,e.addAction(this)}return r.prototype.applyCfg=function(e){(0,urt.assign)(this,e)},r.prototype.init=function(){this.applyCfg(this.cfg)},r.prototype.destroy=function(){this.context.removeAction(this),this.context=null},r}(),Tr=cWt;var hWt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.execute=function(){this.callback&&this.callback(this.context)},e.prototype.destroy=function(){r.prototype.destroy.call(this),this.callback=null},e}(Tr),frt=hWt;var crt=U(q()),sU={};function lU(r,e){var t=sU[r],n=null;if(t){var i=t.ActionClass,a=t.cfg;n=new i(e,a),n.name=r,n.init()}return n}function ec(r){var e=sU[r];return(0,crt.get)(e,"ActionClass")}function nr(r,e,t){sU[r]={ActionClass:e,cfg:t}}function hrt(r,e){var t=new frt(e);return t.callback=r,t.name="callback",t}var NL=U(q());var rc=U(q());var ML=U(q());function dWt(r,e){var t=[];if(r.length){t.push(["M",r[0].x,r[0].y]);for(var n=1,i=r.length;n=o[u]?1:0,h=f>Math.PI?1:0,d=t.convert(s),p=gm(t,d);if(p>=.5)if(f===Math.PI*2){var v={x:(s.x+o.x)/2,y:(s.y+o.y)/2},m=t.convert(v);l.push(["A",p,p,0,h,c,m.x,m.y]),l.push(["A",p,p,0,h,c,d.x,d.y])}else l.push(["A",p,p,0,h,c,d.x,d.y]);return l}function vWt(r){(0,ML.each)(r,function(e,t){var n=e;if(n[0].toLowerCase()==="a"){var i=r[t-1],a=r[t+1];a&&a[0].toLowerCase()==="a"?i&&i[0].toLowerCase()==="l"&&(i[0]="M"):i&&i[0].toLowerCase()==="a"&&a&&a[0].toLowerCase()==="l"&&(a[0]="M")}})}var mWt=function(r,e,t,n){var i=[],a=!!n,o,s,l,u,f,c,h;if(a){l=n[0],u=n[1];for(var d=0,p=r.length;d=e||i.height>=e?i:null}function gWt(r,e){var t=r.event,n=t.target,i=n.getCanvasBBox();return i.width>=e||i.height>=e?n.attr("path"):null}function xu(r){var e=r.event,t,n=e.target;return n&&(t=n.get("element")),t}function nc(r){var e=r.event,t=e.target,n;return t&&(n=t.get("delegateObject")),n}function TL(r){var e=r.event.gEvent;return!(e&&e.fromShape&&e.toShape&&e.fromShape.get("element")===e.toShape.get("element"))}function cp(r){return r&&r.component&&r.component.isList()}function IL(r){return r&&r.component&&r.component.isSlider()}function hp(r){var e=r.event,t=e.target;return t&&t.get("name")==="mask"}function Yb(r,e){var t=r.event.target;if(t.get("type")==="path"){var n=gWt(r,e);return n?xWt(r.view,n):void 0}var i=mrt(r,e);return i?DL(r.view,i):null}function LL(r,e,t){var n=mrt(r,t);if(!n)return null;var i=r.view,a=kL(i,e,{x:n.x,y:n.y}),o=kL(i,e,{x:n.maxX,y:n.maxY}),s={minX:a.x,minY:a.y,maxX:o.x,maxY:o.y};return DL(e,s)}function Hi(r){var e=r.geometries,t=[];return(0,rc.each)(e,function(n){var i=n.elements;t=t.concat(i)}),r.views&&r.views.length&&(0,rc.each)(r.views,function(n){t=t.concat(Hi(n))}),t}function grt(r,e,t){var n=Hi(r);return n.filter(function(i){return os(i,e)===t})}function OL(r,e){var t=r.geometries,n=[];return(0,rc.each)(t,function(i){var a=i.getElementsBy(function(o){return o.hasState(e)});n=n.concat(a)}),n}function os(r,e){var t=r.getModel(),n=t.data,i;return(0,rc.isArray)(n)?i=n[0][e]:i=n[e],i}function yWt(r,e){return!(e.minX>r.maxX||e.maxXr.maxY||e.maxY=e.x&&r.y<=e.y&&r.maxY>e.y}function Rl(r){var e=r.parent,t=null;return e&&(t=e.views.filter(function(n){return n!==r})),t}function bWt(r,e){var t=r.getCoordinate();return t.invert(e)}function kL(r,e,t){var n=bWt(r,t);return e.getCoordinate().convert(n)}function RL(r,e,t,n){var i=!1;return(0,rc.each)(r,function(a){if(a[t]===e[t]&&a[n]===e[n])return i=!0,!1}),i}function xh(r,e){var t=r.getScaleByField(e);return!t&&r.views&&(0,rc.each)(r.views,function(n){if(t=xh(n,e),t)return!1}),t}var _Wt=function(){function r(e){this.actions=[],this.event=null,this.cacheMap={},this.view=e}return r.prototype.cache=function(){for(var e=[],t=0;t=0&&t.splice(n,1)},r.prototype.getCurrentPoint=function(){var e=this.event;if(e)if(e.target instanceof HTMLElement){var t=this.view.getCanvas(),n=t.getPointByClient(e.clientX,e.clientY);return n}else return{x:e.x,y:e.y};return null},r.prototype.getCurrentShape=function(){return(0,NL.get)(this.event,["gEvent","shape"])},r.prototype.isInPlot=function(){var e=this.getCurrentPoint();return e?this.view.isPointInPlot(e):!1},r.prototype.isInShape=function(e){var t=this.getCurrentShape();return t?t.get("name")===e:!1},r.prototype.isInComponent=function(e){var t=PL(this.view),n=this.getCurrentPoint();return n?!!t.find(function(i){var a=i.getBBox();return e?i.get("name")===e&&cU(a,n):cU(a,n)}):!1},r.prototype.destroy=function(){(0,NL.each)(this.actions.slice(),function(e){e.destroy()}),this.view=null,this.event=null,this.actions=null,this.cacheMap=null},r}(),brt=_Wt;var SWt=function(){function r(e,t){this.view=e,this.cfg=t}return r.prototype.init=function(){this.initEvents()},r.prototype.initEvents=function(){},r.prototype.clearEvents=function(){},r.prototype.destroy=function(){this.clearEvents()},r}(),cE=SWt;function _rt(r,e,t){var n=r.split(":"),i=n[0],a=e.getAction(i)||lU(i,e);if(!a)throw new Error("There is no action named ".concat(i));var o=n[1];return{action:a,methodName:o,arg:t}}function Srt(r){var e=r.action,t=r.methodName,n=r.arg;if(e[t])e[t](n);else throw new Error("Action(".concat(e.name,") doesn't have a method called ").concat(t))}var bu={START:"start",SHOW_ENABLE:"showEnable",END:"end",ROLLBACK:"rollback",PROCESSING:"processing"},CWt=function(r){H(e,r);function e(t,n){var i=r.call(this,t,n)||this;return i.callbackCaches={},i.emitCaches={},i.steps=n,i}return e.prototype.init=function(){this.initContext(),r.prototype.init.call(this)},e.prototype.destroy=function(){r.prototype.destroy.call(this),this.steps=null,this.context&&(this.context.destroy(),this.context=null),this.callbackCaches=null,this.view=null},e.prototype.initEvents=function(){var t=this;(0,Xa.each)(this.steps,function(n,i){(0,Xa.each)(n,function(a){var o=t.getActionCallback(i,a);o&&t.bindEvent(a.trigger,o)})})},e.prototype.clearEvents=function(){var t=this;(0,Xa.each)(this.steps,function(n,i){(0,Xa.each)(n,function(a){var o=t.getActionCallback(i,a);o&&t.offEvent(a.trigger,o)})})},e.prototype.initContext=function(){var t=this.view,n=new brt(t);this.context=n;var i=this.steps;(0,Xa.each)(i,function(a){(0,Xa.each)(a,function(o){if((0,Xa.isFunction)(o.action))o.actionObject={action:hrt(o.action,n),methodName:"execute"};else if((0,Xa.isString)(o.action))o.actionObject=_rt(o.action,n,o.arg);else if((0,Xa.isArray)(o.action)){var s=o.action,l=(0,Xa.isArray)(o.arg)?o.arg:[o.arg];o.actionObject=[],(0,Xa.each)(s,function(u,f){o.actionObject.push(_rt(u,n,l[f]))})}})})},e.prototype.isAllowStep=function(t){var n=this.currentStepName,i=this.steps;if(n===t||t===bu.SHOW_ENABLE)return!0;if(t===bu.PROCESSING)return n===bu.START;if(t===bu.START)return n!==bu.PROCESSING;if(t===bu.END)return n===bu.PROCESSING||n===bu.START;if(t===bu.ROLLBACK){if(i[bu.END])return n===bu.END;if(n===bu.START)return!0}return!1},e.prototype.isAllowExecute=function(t,n){if(this.isAllowStep(t)){var i=this.getKey(t,n);return n.once&&this.emitCaches[i]?!1:n.isEnable?n.isEnable(this.context):!0}return!1},e.prototype.enterStep=function(t){this.currentStepName=t,this.emitCaches={}},e.prototype.afterExecute=function(t,n){t!==bu.SHOW_ENABLE&&this.currentStepName!==t&&this.enterStep(t);var i=this.getKey(t,n);this.emitCaches[i]=!0},e.prototype.getKey=function(t,n){return t+n.trigger+n.action},e.prototype.getActionCallback=function(t,n){var i=this,a=this.context,o=this.callbackCaches,s=n.actionObject;if(n.action&&s){var l=this.getKey(t,n);if(!o[l]){var u=function(f){a.event=f,i.isAllowExecute(t,n)?((0,Xa.isArray)(s)?(0,Xa.each)(s,function(c){a.event=f,Srt(c)}):(a.event=f,Srt(s)),i.afterExecute(t,n),n.callback&&(a.event=f,n.callback(a))):a.event=null};n.debounce?o[l]=(0,Xa.debounce)(u,n.debounce.wait,n.debounce.immediate):n.throttle?o[l]=(0,Xa.throttle)(u,n.throttle.wait,{leading:n.throttle.leading,trailing:n.throttle.trailing}):o[l]=u}return o[l]}return null},e.prototype.bindEvent=function(t,n){var i=t.split(":");i[0]==="window"?window.addEventListener(i[1],n):i[0]==="document"?document.addEventListener(i[1],n):this.view.on(t,n)},e.prototype.offEvent=function(t,n){var i=t.split(":");i[0]==="window"?window.removeEventListener(i[1],n):i[0]==="document"?document.removeEventListener(i[1],n):this.view.off(t,n)},e}(cE),Crt=CWt;var wrt={};function hU(r){return wrt[(0,dp.lowerCase)(r)]}function xr(r,e){wrt[(0,dp.lowerCase)(r)]=e}function Ert(r,e,t){var n=hU(r);if(!n)return null;if((0,dp.isPlainObject)(n)){var i=(0,dp.mix)((0,dp.clone)(n),t);return new Crt(e,i)}else{var a=n;return new a(e,t)}}var dE=U(q());var Art=U(q());var dU=U(q());function wWt(r){return{title:{autoRotate:!0,position:"center",spacing:r.axisTitleSpacing,style:{fill:r.axisTitleTextFillColor,fontSize:r.axisTitleTextFontSize,lineHeight:r.axisTitleTextLineHeight,textBaseline:"middle",fontFamily:r.fontFamily}},label:{autoRotate:!1,autoEllipsis:!1,autoHide:{type:"equidistance",cfg:{minGap:6}},offset:r.axisLabelOffset,style:{fill:r.axisLabelFillColor,fontSize:r.axisLabelFontSize,lineHeight:r.axisLabelLineHeight,fontFamily:r.fontFamily}},line:{style:{lineWidth:r.axisLineBorder,stroke:r.axisLineBorderColor}},grid:{line:{type:"line",style:{stroke:r.axisGridBorderColor,lineWidth:r.axisGridBorder,lineDash:r.axisGridLineDash}},alignTick:!0,animate:!0},tickLine:{style:{lineWidth:r.axisTickLineBorder,stroke:r.axisTickLineBorderColor},alignTick:!0,length:r.axisTickLineLength},subTickLine:null,animate:!0}}function EWt(r){return{title:null,marker:{symbol:"circle",spacing:r.legendMarkerSpacing,style:{r:r.legendCircleMarkerSize,fill:r.legendMarkerColor}},itemName:{spacing:5,style:{fill:r.legendItemNameFillColor,fontFamily:r.fontFamily,fontSize:r.legendItemNameFontSize,lineHeight:r.legendItemNameLineHeight,fontWeight:r.legendItemNameFontWeight,textAlign:"start",textBaseline:"middle"}},itemStates:{active:{nameStyle:{opacity:.8}},unchecked:{nameStyle:{fill:"#D8D8D8"},markerStyle:{fill:"#D8D8D8",stroke:"#D8D8D8"}},inactive:{nameStyle:{fill:"#D8D8D8"},markerStyle:{opacity:.2}}},flipPage:!0,pageNavigator:{marker:{style:{size:r.legendPageNavigatorMarkerSize,inactiveFill:r.legendPageNavigatorMarkerInactiveFillColor,inactiveOpacity:r.legendPageNavigatorMarkerInactiveFillOpacity,fill:r.legendPageNavigatorMarkerFillColor,opacity:r.legendPageNavigatorMarkerFillOpacity}},text:{style:{fill:r.legendPageNavigatorTextFillColor,fontSize:r.legendPageNavigatorTextFontSize}}},animate:!1,maxItemWidth:200,itemSpacing:r.legendItemSpacing,itemMarginBottom:r.legendItemMarginBottom,padding:r.legendPadding}}function FL(r){var e,t={point:{default:{fill:r.pointFillColor,r:r.pointSize,stroke:r.pointBorderColor,lineWidth:r.pointBorder,fillOpacity:r.pointFillOpacity},active:{stroke:r.pointActiveBorderColor,lineWidth:r.pointActiveBorder},selected:{stroke:r.pointSelectedBorderColor,lineWidth:r.pointSelectedBorder},inactive:{fillOpacity:r.pointInactiveFillOpacity,strokeOpacity:r.pointInactiveBorderOpacity}},hollowPoint:{default:{fill:r.hollowPointFillColor,lineWidth:r.hollowPointBorder,stroke:r.hollowPointBorderColor,strokeOpacity:r.hollowPointBorderOpacity,r:r.hollowPointSize},active:{stroke:r.hollowPointActiveBorderColor,strokeOpacity:r.hollowPointActiveBorderOpacity},selected:{lineWidth:r.hollowPointSelectedBorder,stroke:r.hollowPointSelectedBorderColor,strokeOpacity:r.hollowPointSelectedBorderOpacity},inactive:{strokeOpacity:r.hollowPointInactiveBorderOpacity}},area:{default:{fill:r.areaFillColor,fillOpacity:r.areaFillOpacity,stroke:null},active:{fillOpacity:r.areaActiveFillOpacity},selected:{fillOpacity:r.areaSelectedFillOpacity},inactive:{fillOpacity:r.areaInactiveFillOpacity}},hollowArea:{default:{fill:null,stroke:r.hollowAreaBorderColor,lineWidth:r.hollowAreaBorder,strokeOpacity:r.hollowAreaBorderOpacity},active:{fill:null,lineWidth:r.hollowAreaActiveBorder},selected:{fill:null,lineWidth:r.hollowAreaSelectedBorder},inactive:{strokeOpacity:r.hollowAreaInactiveBorderOpacity}},interval:{default:{fill:r.intervalFillColor,fillOpacity:r.intervalFillOpacity},active:{stroke:r.intervalActiveBorderColor,lineWidth:r.intervalActiveBorder},selected:{stroke:r.intervalSelectedBorderColor,lineWidth:r.intervalSelectedBorder},inactive:{fillOpacity:r.intervalInactiveFillOpacity,strokeOpacity:r.intervalInactiveBorderOpacity}},hollowInterval:{default:{fill:r.hollowIntervalFillColor,stroke:r.hollowIntervalBorderColor,lineWidth:r.hollowIntervalBorder,strokeOpacity:r.hollowIntervalBorderOpacity},active:{stroke:r.hollowIntervalActiveBorderColor,lineWidth:r.hollowIntervalActiveBorder,strokeOpacity:r.hollowIntervalActiveBorderOpacity},selected:{stroke:r.hollowIntervalSelectedBorderColor,lineWidth:r.hollowIntervalSelectedBorder,strokeOpacity:r.hollowIntervalSelectedBorderOpacity},inactive:{stroke:r.hollowIntervalInactiveBorderColor,lineWidth:r.hollowIntervalInactiveBorder,strokeOpacity:r.hollowIntervalInactiveBorderOpacity}},line:{default:{stroke:r.lineBorderColor,lineWidth:r.lineBorder,strokeOpacity:r.lineBorderOpacity,fill:null,lineAppendWidth:10,lineCap:"round",lineJoin:"round"},active:{lineWidth:r.lineActiveBorder},selected:{lineWidth:r.lineSelectedBorder},inactive:{strokeOpacity:r.lineInactiveBorderOpacity}}},n=wWt(r),i=EWt(r);return{background:r.backgroundColor,defaultColor:r.brandColor,subColor:r.subColor,semanticRed:r.paletteSemanticRed,semanticGreen:r.paletteSemanticGreen,padding:"auto",fontFamily:r.fontFamily,columnWidthRatio:1/2,maxColumnWidth:null,minColumnWidth:null,roseWidthRatio:.9999999,multiplePieWidthRatio:1/1.3,colors10:r.paletteQualitative10,colors20:r.paletteQualitative20,sequenceColors:r.paletteSequence,shapes:{point:["hollow-circle","hollow-square","hollow-bowtie","hollow-diamond","hollow-hexagon","hollow-triangle","hollow-triangle-down","circle","square","bowtie","diamond","hexagon","triangle","triangle-down","cross","tick","plus","hyphen","line"],line:["line","dash","dot","smooth"],area:["area","smooth","line","smooth-line"],interval:["rect","hollow-rect","line","tick"]},sizes:[1,10],geometries:{interval:{rect:{default:{style:t.interval.default},active:{style:t.interval.active},inactive:{style:t.interval.inactive},selected:{style:function(a){var o=a.geometry.coordinate;if(o.isPolar&&o.isTransposed){var s=sp(a.getModel(),o),l=s.startAngle,u=s.endAngle,f=(l+u)/2,c=7.5,h=c*Math.cos(f),d=c*Math.sin(f);return{matrix:gr.transform(null,[["t",h,d]])}}return t.interval.selected}}},"hollow-rect":{default:{style:t.hollowInterval.default},active:{style:t.hollowInterval.active},inactive:{style:t.hollowInterval.inactive},selected:{style:t.hollowInterval.selected}},line:{default:{style:t.hollowInterval.default},active:{style:t.hollowInterval.active},inactive:{style:t.hollowInterval.inactive},selected:{style:t.hollowInterval.selected}},tick:{default:{style:t.hollowInterval.default},active:{style:t.hollowInterval.active},inactive:{style:t.hollowInterval.inactive},selected:{style:t.hollowInterval.selected}},funnel:{default:{style:t.interval.default},active:{style:t.interval.active},inactive:{style:t.interval.inactive},selected:{style:t.interval.selected}},pyramid:{default:{style:t.interval.default},active:{style:t.interval.active},inactive:{style:t.interval.inactive},selected:{style:t.interval.selected}}},line:{line:{default:{style:t.line.default},active:{style:t.line.active},inactive:{style:t.line.inactive},selected:{style:t.line.selected}},dot:{default:{style:E(E({},t.line.default),{lineCap:null,lineDash:[1,1]})},active:{style:E(E({},t.line.active),{lineCap:null,lineDash:[1,1]})},inactive:{style:E(E({},t.line.inactive),{lineCap:null,lineDash:[1,1]})},selected:{style:E(E({},t.line.selected),{lineCap:null,lineDash:[1,1]})}},dash:{default:{style:E(E({},t.line.default),{lineCap:null,lineDash:[5.5,1]})},active:{style:E(E({},t.line.active),{lineCap:null,lineDash:[5.5,1]})},inactive:{style:E(E({},t.line.inactive),{lineCap:null,lineDash:[5.5,1]})},selected:{style:E(E({},t.line.selected),{lineCap:null,lineDash:[5.5,1]})}},smooth:{default:{style:t.line.default},active:{style:t.line.active},inactive:{style:t.line.inactive},selected:{style:t.line.selected}},hv:{default:{style:t.line.default},active:{style:t.line.active},inactive:{style:t.line.inactive},selected:{style:t.line.selected}},vh:{default:{style:t.line.default},active:{style:t.line.active},inactive:{style:t.line.inactive},selected:{style:t.line.selected}},hvh:{default:{style:t.line.default},active:{style:t.line.active},inactive:{style:t.line.inactive},selected:{style:t.line.selected}},vhv:{default:{style:t.line.default},active:{style:t.line.active},inactive:{style:t.line.inactive},selected:{style:t.line.selected}}},polygon:{polygon:{default:{style:t.interval.default},active:{style:t.interval.active},inactive:{style:t.interval.inactive},selected:{style:t.interval.selected}}},point:{circle:{default:{style:t.point.default},active:{style:t.point.active},inactive:{style:t.point.inactive},selected:{style:t.point.selected}},square:{default:{style:t.point.default},active:{style:t.point.active},inactive:{style:t.point.inactive},selected:{style:t.point.selected}},bowtie:{default:{style:t.point.default},active:{style:t.point.active},inactive:{style:t.point.inactive},selected:{style:t.point.selected}},diamond:{default:{style:t.point.default},active:{style:t.point.active},inactive:{style:t.point.inactive},selected:{style:t.point.selected}},hexagon:{default:{style:t.point.default},active:{style:t.point.active},inactive:{style:t.point.inactive},selected:{style:t.point.selected}},triangle:{default:{style:t.point.default},active:{style:t.point.active},inactive:{style:t.point.inactive},selected:{style:t.point.selected}},"triangle-down":{default:{style:t.point.default},active:{style:t.point.active},inactive:{style:t.point.inactive},selected:{style:t.point.selected}},"hollow-circle":{default:{style:t.hollowPoint.default},active:{style:t.hollowPoint.active},inactive:{style:t.hollowPoint.inactive},selected:{style:t.hollowPoint.selected}},"hollow-square":{default:{style:t.hollowPoint.default},active:{style:t.hollowPoint.active},inactive:{style:t.hollowPoint.inactive},selected:{style:t.hollowPoint.selected}},"hollow-bowtie":{default:{style:t.hollowPoint.default},active:{style:t.hollowPoint.active},inactive:{style:t.hollowPoint.inactive},selected:{style:t.hollowPoint.selected}},"hollow-diamond":{default:{style:t.hollowPoint.default},active:{style:t.hollowPoint.active},inactive:{style:t.hollowPoint.inactive},selected:{style:t.hollowPoint.selected}},"hollow-hexagon":{default:{style:t.hollowPoint.default},active:{style:t.hollowPoint.active},inactive:{style:t.hollowPoint.inactive},selected:{style:t.hollowPoint.selected}},"hollow-triangle":{default:{style:t.hollowPoint.default},active:{style:t.hollowPoint.active},inactive:{style:t.hollowPoint.inactive},selected:{style:t.hollowPoint.selected}},"hollow-triangle-down":{default:{style:t.hollowPoint.default},active:{style:t.hollowPoint.active},inactive:{style:t.hollowPoint.inactive},selected:{style:t.hollowPoint.selected}},cross:{default:{style:t.hollowPoint.default},active:{style:t.hollowPoint.active},inactive:{style:t.hollowPoint.inactive},selected:{style:t.hollowPoint.selected}},tick:{default:{style:t.hollowPoint.default},active:{style:t.hollowPoint.active},inactive:{style:t.hollowPoint.inactive},selected:{style:t.hollowPoint.selected}},plus:{default:{style:t.hollowPoint.default},active:{style:t.hollowPoint.active},inactive:{style:t.hollowPoint.inactive},selected:{style:t.hollowPoint.selected}},hyphen:{default:{style:t.hollowPoint.default},active:{style:t.hollowPoint.active},inactive:{style:t.hollowPoint.inactive},selected:{style:t.hollowPoint.selected}},line:{default:{style:t.hollowPoint.default},active:{style:t.hollowPoint.active},inactive:{style:t.hollowPoint.inactive},selected:{style:t.hollowPoint.selected}}},area:{area:{default:{style:t.area.default},active:{style:t.area.active},inactive:{style:t.area.inactive},selected:{style:t.area.selected}},smooth:{default:{style:t.area.default},active:{style:t.area.active},inactive:{style:t.area.inactive},selected:{style:t.area.selected}},line:{default:{style:t.hollowArea.default},active:{style:t.hollowArea.active},inactive:{style:t.hollowArea.inactive},selected:{style:t.hollowArea.selected}},"smooth-line":{default:{style:t.hollowArea.default},active:{style:t.hollowArea.active},inactive:{style:t.hollowArea.inactive},selected:{style:t.hollowArea.selected}}},schema:{candle:{default:{style:t.hollowInterval.default},active:{style:t.hollowInterval.active},inactive:{style:t.hollowInterval.inactive},selected:{style:t.hollowInterval.selected}},box:{default:{style:t.hollowInterval.default},active:{style:t.hollowInterval.active},inactive:{style:t.hollowInterval.inactive},selected:{style:t.hollowInterval.selected}}},edge:{line:{default:{style:t.line.default},active:{style:t.line.active},inactive:{style:t.line.inactive},selected:{style:t.line.selected}},vhv:{default:{style:t.line.default},active:{style:t.line.active},inactive:{style:t.line.inactive},selected:{style:t.line.selected}},smooth:{default:{style:t.line.default},active:{style:t.line.active},inactive:{style:t.line.inactive},selected:{style:t.line.selected}},arc:{default:{style:t.line.default},active:{style:t.line.active},inactive:{style:t.line.inactive},selected:{style:t.line.selected}}},violin:{violin:{default:{style:t.line.default},active:{style:t.line.active},inactive:{style:t.line.inactive},selected:{style:t.line.selected}},smooth:{default:{style:t.line.default},active:{style:t.line.active},inactive:{style:t.line.inactive},selected:{style:t.line.selected}},hollow:{default:{style:t.hollowArea.default},active:{style:t.hollowArea.active},inactive:{style:t.hollowArea.inactive},selected:{style:t.hollowArea.selected}},"hollow-smooth":{default:{style:t.hollowArea.default},active:{style:t.hollowArea.active},inactive:{style:t.hollowArea.inactive},selected:{style:t.hollowArea.selected}}}},components:{axis:{common:n,top:{position:"top",grid:null,title:null,verticalLimitLength:1/2},bottom:{position:"bottom",grid:null,title:null,verticalLimitLength:1/2},left:{position:"left",title:null,line:null,tickLine:null,verticalLimitLength:1/3},right:{position:"right",title:null,line:null,tickLine:null,verticalLimitLength:1/3},circle:{title:null,grid:(0,dU.deepMix)({},n.grid,{line:{type:"line"}})},radius:{title:null,grid:(0,dU.deepMix)({},n.grid,{line:{type:"circle"}})}},legend:{common:i,right:{layout:"vertical",padding:r.legendVerticalPadding},left:{layout:"vertical",padding:r.legendVerticalPadding},top:{layout:"horizontal",padding:r.legendHorizontalPadding},bottom:{layout:"horizontal",padding:r.legendHorizontalPadding},continuous:{title:null,background:null,track:{},rail:{type:"color",size:r.sliderRailHeight,defaultLength:r.sliderRailWidth,style:{fill:r.sliderRailFillColor,stroke:r.sliderRailBorderColor,lineWidth:r.sliderRailBorder}},label:{align:"rail",spacing:4,formatter:null,style:{fill:r.sliderLabelTextFillColor,fontSize:r.sliderLabelTextFontSize,lineHeight:r.sliderLabelTextLineHeight,textBaseline:"middle",fontFamily:r.fontFamily}},handler:{size:r.sliderHandlerWidth,style:{fill:r.sliderHandlerFillColor,stroke:r.sliderHandlerBorderColor}},slidable:!0,padding:i.padding}},tooltip:{showContent:!0,follow:!0,showCrosshairs:!1,showMarkers:!0,shared:!1,enterable:!1,position:"auto",marker:{symbol:"circle",stroke:"#fff",shadowBlur:10,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"rgba(0,0,0,0.09)",lineWidth:2,r:4},crosshairs:{line:{style:{stroke:r.tooltipCrosshairsBorderColor,lineWidth:r.tooltipCrosshairsBorder}},text:null,textBackground:{padding:2,style:{fill:"rgba(0, 0, 0, 0.25)",lineWidth:0,stroke:null}},follow:!1},domStyles:(e={},e["".concat(rs.CONTAINER_CLASS)]={position:"absolute",visibility:"hidden",zIndex:8,transition:"left 0.4s cubic-bezier(0.23, 1, 0.32, 1) 0s, top 0.4s cubic-bezier(0.23, 1, 0.32, 1) 0s",backgroundColor:r.tooltipContainerFillColor,opacity:r.tooltipContainerFillOpacity,boxShadow:r.tooltipContainerShadow,borderRadius:"".concat(r.tooltipContainerBorderRadius,"px"),color:r.tooltipTextFillColor,fontSize:"".concat(r.tooltipTextFontSize,"px"),fontFamily:r.fontFamily,lineHeight:"".concat(r.tooltipTextLineHeight,"px"),padding:"0 12px 0 12px"},e["".concat(rs.TITLE_CLASS)]={marginBottom:"12px",marginTop:"12px"},e["".concat(rs.LIST_CLASS)]={margin:0,listStyleType:"none",padding:0},e["".concat(rs.LIST_ITEM_CLASS)]={listStyleType:"none",padding:0,marginBottom:"12px",marginTop:"12px",marginLeft:0,marginRight:0},e["".concat(rs.MARKER_CLASS)]={width:"8px",height:"8px",borderRadius:"50%",display:"inline-block",marginRight:"8px"},e["".concat(rs.VALUE_CLASS)]={display:"inline-block",float:"right",marginLeft:"30px"},e)},annotation:{arc:{style:{stroke:r.annotationArcBorderColor,lineWidth:r.annotationArcBorder},animate:!0},line:{style:{stroke:r.annotationLineBorderColor,lineDash:r.annotationLineDash,lineWidth:r.annotationLineBorder},text:{position:"start",autoRotate:!0,style:{fill:r.annotationTextFillColor,stroke:r.annotationTextBorderColor,lineWidth:r.annotationTextBorder,fontSize:r.annotationTextFontSize,textAlign:"start",fontFamily:r.fontFamily,textBaseline:"bottom"}},animate:!0},text:{style:{fill:r.annotationTextFillColor,stroke:r.annotationTextBorderColor,lineWidth:r.annotationTextBorder,fontSize:r.annotationTextFontSize,textBaseline:"middle",textAlign:"start",fontFamily:r.fontFamily},animate:!0},region:{top:!1,style:{lineWidth:r.annotationRegionBorder,stroke:r.annotationRegionBorderColor,fill:r.annotationRegionFillColor,fillOpacity:r.annotationRegionFillOpacity},animate:!0},image:{top:!1,animate:!0},dataMarker:{top:!0,point:{style:{r:3,stroke:r.brandColor,lineWidth:2}},line:{style:{stroke:r.annotationLineBorderColor,lineWidth:r.annotationLineBorder},length:r.annotationDataMarkerLineLength},text:{style:{textAlign:"start",fill:r.annotationTextFillColor,stroke:r.annotationTextBorderColor,lineWidth:r.annotationTextBorder,fontSize:r.annotationTextFontSize,fontFamily:r.fontFamily}},direction:"upward",autoAdjust:!0,animate:!0},dataRegion:{style:{region:{fill:r.annotationRegionFillColor,fillOpacity:r.annotationRegionFillOpacity},text:{textAlign:"center",textBaseline:"bottom",fill:r.annotationTextFillColor,stroke:r.annotationTextBorderColor,lineWidth:r.annotationTextBorder,fontSize:r.annotationTextFontSize,fontFamily:r.fontFamily}},animate:!0}},slider:{common:{padding:[8,8,8,8],backgroundStyle:{fill:r.cSliderBackgroundFillColor,opacity:r.cSliderBackgroundFillOpacity},foregroundStyle:{fill:r.cSliderForegroundFillColor,opacity:r.cSliderForegroundFillOpacity},handlerStyle:{width:r.cSliderHandlerWidth,height:r.cSliderHandlerHeight,fill:r.cSliderHandlerFillColor,opacity:r.cSliderHandlerFillOpacity,stroke:r.cSliderHandlerBorderColor,lineWidth:r.cSliderHandlerBorder,radius:r.cSliderHandlerBorderRadius,highLightFill:r.cSliderHandlerHighlightFillColor},textStyle:{fill:r.cSliderTextFillColor,opacity:r.cSliderTextFillOpacity,fontSize:r.cSliderTextFontSize,lineHeight:r.cSliderTextLineHeight,fontWeight:r.cSliderTextFontWeight,stroke:r.cSliderTextBorderColor,lineWidth:r.cSliderTextBorder}}},scrollbar:{common:{padding:[8,8,8,8]},default:{style:{trackColor:r.scrollbarTrackFillColor,thumbColor:r.scrollbarThumbFillColor}},hover:{style:{thumbColor:r.scrollbarThumbHighlightFillColor}}}},labels:{offset:12,style:{fill:r.labelFillColor,fontSize:r.labelFontSize,fontFamily:r.fontFamily,stroke:r.labelBorderColor,lineWidth:r.labelBorder},fillColorDark:r.labelFillColorDark,fillColorLight:r.labelFillColorLight,autoRotate:!0},innerLabels:{style:{fill:r.innerLabelFillColor,fontSize:r.innerLabelFontSize,fontFamily:r.fontFamily,stroke:r.innerLabelBorderColor,lineWidth:r.innerLabelBorder},autoRotate:!0},overflowLabels:{style:{fill:r.overflowLabelFillColor,fontSize:r.overflowLabelFontSize,fontFamily:r.fontFamily,stroke:r.overflowLabelBorderColor,lineWidth:r.overflowLabelBorder}},pieLabels:{labelHeight:14,offset:10,labelLine:{style:{lineWidth:r.labelLineBorder}},autoRotate:!0}}}var ni={100:"#000",95:"#0D0D0D",85:"#262626",65:"#595959",45:"#8C8C8C",25:"#BFBFBF",15:"#D9D9D9",6:"#F0F0F0"},hE={100:"#FFFFFF",95:"#F2F2F2",85:"#D9D9D9",65:"#A6A6A6",45:"#737373",25:"#404040",15:"#262626",6:"#0F0F0F"},AWt=["#5B8FF9","#5AD8A6","#5D7092","#F6BD16","#6F5EF9","#6DC8EC","#945FB9","#FF9845","#1E9493","#FF99C3"],MWt=["#5B8FF9","#CDDDFD","#5AD8A6","#CDF3E4","#5D7092","#CED4DE","#F6BD16","#FCEBB9","#6F5EF9","#D3CEFD","#6DC8EC","#D3EEF9","#945FB9","#DECFEA","#FF9845","#FFE0C7","#1E9493","#BBDEDE","#FF99C3","#FFE0ED"],TWt=["#B8E1FF","#9AC5FF","#7DAAFF","#5B8FF9","#3D76DD","#085EC0","#0047A5","#00318A","#001D70"],pU=function(r){r===void 0&&(r={});var e=r.backgroundColor,t=e===void 0?"transparent":e,n=r.subColor,i=n===void 0?"rgba(0,0,0,0.05)":n,a=r.paletteQualitative10,o=a===void 0?AWt:a,s=r.paletteQualitative20,l=s===void 0?MWt:s,u=r.paletteSemanticRed,f=u===void 0?"#F4664A":u,c=r.paletteSemanticGreen,h=c===void 0?"#30BF78":c,d=r.paletteSemanticYellow,p=d===void 0?"#FAAD14":d,v=r.paletteSequence,m=v===void 0?TWt:v,g=r.fontFamily,x=g===void 0?`"Segoe UI", Roboto, "Helvetica Neue", Arial, + "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", + "Noto Color Emoji"`:g,b=r.brandColor,S=b===void 0?o[0]:b;return{backgroundColor:t,brandColor:S,subColor:i,paletteQualitative10:o,paletteQualitative20:l,paletteSemanticRed:f,paletteSemanticGreen:h,paletteSemanticYellow:p,paletteSequence:m,fontFamily:x,axisLineBorderColor:ni[25],axisLineBorder:1,axisLineDash:null,axisTitleTextFillColor:ni[65],axisTitleTextFontSize:12,axisTitleTextLineHeight:12,axisTitleTextFontWeight:"normal",axisTitleSpacing:12,axisTickLineBorderColor:ni[25],axisTickLineLength:4,axisTickLineBorder:1,axisSubTickLineBorderColor:ni[15],axisSubTickLineLength:2,axisSubTickLineBorder:1,axisLabelFillColor:ni[45],axisLabelFontSize:12,axisLabelLineHeight:12,axisLabelFontWeight:"normal",axisLabelOffset:8,axisGridBorderColor:ni[15],axisGridBorder:1,axisGridLineDash:null,legendTitleTextFillColor:ni[45],legendTitleTextFontSize:12,legendTitleTextLineHeight:21,legendTitleTextFontWeight:"normal",legendMarkerColor:S,legendMarkerSpacing:8,legendMarkerSize:4,legendCircleMarkerSize:4,legendSquareMarkerSize:4,legendLineMarkerSize:5,legendItemNameFillColor:ni[65],legendItemNameFontSize:12,legendItemNameLineHeight:12,legendItemNameFontWeight:"normal",legendItemSpacing:24,legendItemMarginBottom:12,legendPadding:[8,8,8,8],legendHorizontalPadding:[8,0,8,0],legendVerticalPadding:[0,8,0,8],legendPageNavigatorMarkerSize:12,legendPageNavigatorMarkerInactiveFillColor:ni[100],legendPageNavigatorMarkerInactiveFillOpacity:.45,legendPageNavigatorMarkerFillColor:ni[100],legendPageNavigatorMarkerFillOpacity:1,legendPageNavigatorTextFillColor:ni[45],legendPageNavigatorTextFontSize:12,sliderRailFillColor:ni[15],sliderRailBorder:0,sliderRailBorderColor:null,sliderRailWidth:100,sliderRailHeight:12,sliderLabelTextFillColor:ni[45],sliderLabelTextFontSize:12,sliderLabelTextLineHeight:12,sliderLabelTextFontWeight:"normal",sliderHandlerFillColor:ni[6],sliderHandlerWidth:10,sliderHandlerHeight:14,sliderHandlerBorder:1,sliderHandlerBorderColor:ni[25],annotationArcBorderColor:ni[15],annotationArcBorder:1,annotationLineBorderColor:ni[25],annotationLineBorder:1,annotationLineDash:null,annotationTextFillColor:ni[65],annotationTextFontSize:12,annotationTextLineHeight:12,annotationTextFontWeight:"normal",annotationTextBorderColor:null,annotationTextBorder:0,annotationRegionFillColor:ni[100],annotationRegionFillOpacity:.06,annotationRegionBorder:0,annotationRegionBorderColor:null,annotationDataMarkerLineLength:16,tooltipCrosshairsBorderColor:ni[25],tooltipCrosshairsBorder:1,tooltipCrosshairsLineDash:null,tooltipContainerFillColor:"rgb(255, 255, 255)",tooltipContainerFillOpacity:.95,tooltipContainerShadow:"0px 0px 10px #aeaeae",tooltipContainerBorderRadius:3,tooltipTextFillColor:ni[65],tooltipTextFontSize:12,tooltipTextLineHeight:12,tooltipTextFontWeight:"bold",labelFillColor:ni[65],labelFillColorDark:"#2c3542",labelFillColorLight:"#ffffff",labelFontSize:12,labelLineHeight:12,labelFontWeight:"normal",labelBorderColor:null,labelBorder:0,innerLabelFillColor:hE[100],innerLabelFontSize:12,innerLabelLineHeight:12,innerLabelFontWeight:"normal",innerLabelBorderColor:null,innerLabelBorder:0,overflowLabelFillColor:ni[65],overflowLabelFontSize:12,overflowLabelLineHeight:12,overflowLabelFontWeight:"normal",overflowLabelBorderColor:hE[100],overflowLabelBorder:1,labelLineBorder:1,labelLineBorderColor:ni[25],cSliderRailHieght:16,cSliderBackgroundFillColor:"#416180",cSliderBackgroundFillOpacity:.05,cSliderForegroundFillColor:"#5B8FF9",cSliderForegroundFillOpacity:.15,cSliderHandlerHeight:24,cSliderHandlerWidth:10,cSliderHandlerFillColor:"#F7F7F7",cSliderHandlerFillOpacity:1,cSliderHandlerHighlightFillColor:"#FFF",cSliderHandlerBorderColor:"#BFBFBF",cSliderHandlerBorder:1,cSliderHandlerBorderRadius:2,cSliderTextFillColor:"#000",cSliderTextFillOpacity:.45,cSliderTextFontSize:12,cSliderTextLineHeight:12,cSliderTextFontWeight:"normal",cSliderTextBorderColor:null,cSliderTextBorder:0,scrollbarTrackFillColor:"rgba(0,0,0,0)",scrollbarThumbFillColor:"rgba(0,0,0,0.15)",scrollbarThumbHighlightFillColor:"rgba(0,0,0,0.2)",pointFillColor:S,pointFillOpacity:.95,pointSize:4,pointBorder:1,pointBorderColor:hE[100],pointBorderOpacity:1,pointActiveBorderColor:ni[100],pointSelectedBorder:2,pointSelectedBorderColor:ni[100],pointInactiveFillOpacity:.3,pointInactiveBorderOpacity:.3,hollowPointSize:4,hollowPointBorder:1,hollowPointBorderColor:S,hollowPointBorderOpacity:.95,hollowPointFillColor:hE[100],hollowPointActiveBorder:1,hollowPointActiveBorderColor:ni[100],hollowPointActiveBorderOpacity:1,hollowPointSelectedBorder:2,hollowPointSelectedBorderColor:ni[100],hollowPointSelectedBorderOpacity:1,hollowPointInactiveBorderOpacity:.3,lineBorder:2,lineBorderColor:S,lineBorderOpacity:1,lineActiveBorder:3,lineSelectedBorder:3,lineInactiveBorderOpacity:.3,areaFillColor:S,areaFillOpacity:.25,areaActiveFillColor:S,areaActiveFillOpacity:.5,areaSelectedFillColor:S,areaSelectedFillOpacity:.5,areaInactiveFillOpacity:.3,hollowAreaBorderColor:S,hollowAreaBorder:2,hollowAreaBorderOpacity:1,hollowAreaActiveBorder:3,hollowAreaActiveBorderColor:ni[100],hollowAreaSelectedBorder:3,hollowAreaSelectedBorderColor:ni[100],hollowAreaInactiveBorderOpacity:.3,intervalFillColor:S,intervalFillOpacity:.95,intervalActiveBorder:1,intervalActiveBorderColor:ni[100],intervalActiveBorderOpacity:1,intervalSelectedBorder:2,intervalSelectedBorderColor:ni[100],intervalSelectedBorderOpacity:1,intervalInactiveBorderOpacity:.3,intervalInactiveFillOpacity:.3,hollowIntervalBorder:2,hollowIntervalBorderColor:S,hollowIntervalBorderOpacity:1,hollowIntervalFillColor:hE[100],hollowIntervalActiveBorder:2,hollowIntervalActiveBorderColor:ni[100],hollowIntervalSelectedBorder:3,hollowIntervalSelectedBorderColor:ni[100],hollowIntervalSelectedBorderOpacity:1,hollowIntervalInactiveBorderOpacity:.3}},_Oe=pU();function e0(r){var e=r.styleSheet,t=e===void 0?{}:e,n=rr(r,["styleSheet"]),i=pU(t);return(0,Art.deepMix)({},FL(i),n)}var IWt=e0({}),vU={default:IWt};function $u(r){return(0,dE.get)(vU,(0,dE.lowerCase)(r),vU.default)}function r0(r,e){vU[(0,dE.lowerCase)(r)]=e0(e)}var Mi=U(q());function Mrt(r,e,t){var n=t.translate(r),i=t.translate(e);return(0,Mi.isNumberEqual)(n,i)}function LWt(r,e){var t=e.coordinate,n=e.getXScale(),i=n.range,a=i[i.length-1],o=i[0],s=t.invert(r),l=s.x;return t.isPolar&&l>(1+a)/2&&(l=o),n.translate(n.invert(l))}function Trt(r,e,t){var n=t.coordinate,i=t.getYScale(),a=i.field,o=n.invert(e),s=i.invert(o.y),l=(0,Mi.find)(r,function(u){var f=u[Tn];return f[a][0]<=s&&f[a][1]>=s});return l||r[r.length-1]}var OWt=(0,Mi.memoize)(function(r){if(r.isCategory)return 1;for(var e=r.values,t=e.length,n=r.translate(e[0]),i=n,a=0;ai&&(i=s)}return(i-n)/(t-1)});function DWt(r,e,t){var n=e.getAttribute("position"),i=n.getFields(),a=e.scales,o=(0,Mi.isFunction)(t)||!t?i[0]:t,s=a[o],l=s?s.getText(r[o]):r[o]||o;return(0,Mi.isFunction)(t)?t(l,r):l}function PWt(r){var e=(0,Mi.values)(r.attributes);return(0,Mi.filter)(e,function(t){return(0,Mi.contains)(Ty,t.type)})}function Irt(r){for(var e=PWt(r),t,n=0,i=e;n=S)if(I)(0,Mi.isArray)(l)||(l=[]),l.push(P);else{l=P;break}}(0,Mi.isArray)(l)&&(l=Trt(l,r,t))}else{var L=void 0;if(!i.isLinear&&i.type!=="timeCat"){for(var p=0;pi.translate(A)||Si.max||SMath.abs(i.translate(L[Tn][o])-S)&&(b=L)}var G=OWt(t.getXScale());return!l&&Math.abs(i.translate(b[Tn][o])-S)<=G/2&&(l=b),l}function BL(r,e,t,n){t===void 0&&(t=""),n===void 0&&(n=!1);var i=r[Tn],a=DWt(i,e,t),o=e.tooltipOption,s=e.theme.defaultColor,l=[],u,f;function c(A,I){if(n||!(0,Mi.isNil)(I)&&I!==""){var P={title:a,data:i,mappingData:r,name:A,value:I,color:r.color||s,marker:!0};l.push(P)}}if((0,Mi.isObject)(o)){var h=o.fields,d=o.callback;if(d){var p=h.map(function(A){return r[Tn][A]}),v=d.apply(void 0,p),m=E({data:r[Tn],mappingData:r,title:a,color:r.color||s,marker:!0},v);l.push(m)}else for(var g=e.scales,x=0,b=h;x');L.appendChild(M);var O=K5(L,l,a,o),F=JI(h),k=new F.Canvas(E({container:M,pixelRatio:d,localRefresh:v,supportCSSTransform:b},O));return n=r.call(this,{parent:null,canvas:k,backgroundGroup:k.addGroup({zIndex:zv.BG}),middleGroup:k.addGroup({zIndex:zv.MID}),foregroundGroup:k.addGroup({zIndex:zv.FORE}),padding:u,appendPadding:f,visible:g,options:w,limitInPlot:A,theme:I,syncViewPadding:P})||this,n.onResize=(0,$b.debounce)(function(){n.forceFit()},300),n.ele=L,n.canvas=k,n.width=O.width,n.height=O.height,n.autoFit=l,n.localRefresh=v,n.renderer=h,n.wrapperElement=M,n.updateCanvasStyle(),n.bindAutoFit(),n.initDefaultInteractions(C),n}return e.prototype.initDefaultInteractions=function(t){var n=this;(0,$b.each)(t,function(i){n.interaction(i)})},e.prototype.aria=function(t){var n="aria-label";t===!1?this.ele.removeAttribute(n):this.ele.setAttribute(n,t.label)},e.prototype.changeSize=function(t,n){return this.width===t&&this.height===n?this:(this.emit(wr.BEFORE_CHANGE_SIZE),this.width=t,this.height=n,this.canvas.changeSize(t,n),this.render(!0),this.emit(wr.AFTER_CHANGE_SIZE),this)},e.prototype.clear=function(){r.prototype.clear.call(this),this.aria(!1)},e.prototype.destroy=function(){r.prototype.destroy.call(this),this.unbindAutoFit(),this.canvas.destroy(),bZ(this.wrapperElement),this.wrapperElement=null},e.prototype.changeVisible=function(t){return r.prototype.changeVisible.call(this,t),this.wrapperElement.style.display=t?"":"none",this},e.prototype.forceFit=function(){if(!this.destroyed){var t=K5(this.ele,!0,this.width,this.height),n=t.width,i=t.height;this.changeSize(n,i)}},e.prototype.updateCanvasStyle=function(){yr(this.canvas.get("el"),{display:"inline-block",verticalAlign:"middle"})},e.prototype.bindAutoFit=function(){this.autoFit&&window.addEventListener("resize",this.onResize)},e.prototype.unbindAutoFit=function(){this.autoFit&&window.removeEventListener("resize",this.onResize)},e}(mE),gE=BWt;var Urt=U(q()),Fl=function(){function r(e){this.visible=!0,this.components=[],this.view=e}return r.prototype.clear=function(e){(0,Urt.each)(this.components,function(t){t.component.destroy()}),this.components=[]},r.prototype.destroy=function(){this.clear()},r.prototype.getComponents=function(){return this.components},r.prototype.changeVisible=function(e){this.visible!==e&&(this.components.forEach(function(t){e?t.component.show():t.component.hide()}),this.visible=e)},r}();var ei=U(q());function GWt(r){for(var e=[],t=function(i){var a=r[i],o=(0,ei.find)(e,function(s){return s.color===a.color&&s.name===a.name&&s.value===a.value&&s.title===a.title});o||e.push(a)},n=0;n1){for(var p=n[0],v=Math.abs(t.y-p[0].y),m=0,g=n;m'+s+"":s};return E(E({},t),{customContent:i})},e.prototype.getTitle=function(t){var n=t[0].title||t[0].name;return this.title=n,n},e.prototype.renderTooltip=function(){var t=this.view.getCanvas(),n={start:{x:0,y:0},end:{x:t.get("width"),y:t.get("height")}},i=this.getTooltipCfg(),a=new Vb(E(E({parent:t.get("el").parentNode,region:n},i),{visible:!1,crosshairs:null}));a.init(),this.tooltip=a},e.prototype.renderTooltipMarkers=function(t,n){for(var i=this.getTooltipMarkersGroup(),a=0,o=t;a-1)return;a.push(t),(t==="active"||t==="selected")&&(l==null||l.toFront())}else{if(f===-1)return;if(a.splice(f,1),t==="active"||t==="selected"){var c=this.geometry,h=c.sortZIndex,d=c.zIndexReversed,p=d?this.geometry.elements.length-this.elementIndex:this.elementIndex;h?l.setZIndex(p):l.set("zIndex",p)}}var v=o.drawShape(u,s,this.getOffscreenGroup());a.length?this.syncShapeStyle(l,v,a,null):this.syncShapeStyle(l,v,["reset"],null),v.remove(!0);var m={state:t,stateStatus:n,element:this,target:this.container};this.container.emit("statechange",m),Vw(this.shape,"statechange",m)},e.prototype.clearStates=function(){var t=this,n=this.states;(0,qa.each)(n,function(i){t.setState(i,!1)}),this.states=[]},e.prototype.hasState=function(t){return this.states.includes(t)},e.prototype.getStates=function(){return this.states},e.prototype.getData=function(){return this.data},e.prototype.getModel=function(){return this.model},e.prototype.getBBox=function(){var t=this,n=t.shape,i=t.labelShape,a={x:0,y:0,minX:0,minY:0,maxX:0,maxY:0,width:0,height:0};return n&&(a=n.getCanvasBBox()),i&&i.forEach(function(o){var s=o.getCanvasBBox();a.x=Math.min(s.x,a.x),a.y=Math.min(s.y,a.y),a.minX=Math.min(s.minX,a.minX),a.minY=Math.min(s.minY,a.minY),a.maxX=Math.max(s.maxX,a.maxX),a.maxY=Math.max(s.maxY,a.maxY)}),a.width=a.maxX-a.minX,a.height=a.maxY-a.minY,a},e.prototype.getStatesStyle=function(){if(!this.statesStyle){var t=this,n=t.shapeType,i=t.geometry,a=t.shapeFactory,o=i.stateOption,s=a.defaultShapeType,l=a.theme[n]||a.theme[s];this.statesStyle=(0,qa.deepMix)({},l,o)}return this.statesStyle},e.prototype.getStateStyle=function(t,n){var i=this.getStatesStyle(),a=(0,qa.get)(i,[t,"style"],{}),o=a[n]||a;return(0,qa.isFunction)(o)?o(this):o},e.prototype.getAnimateCfg=function(t){var n=this,i=this.animate;if(i){var a=i[t];return a&&E(E({},a),{callback:function(){var o;(0,qa.isFunction)(a.callback)&&a.callback(),(o=n.geometry)===null||o===void 0||o.emit(Uv.AFTER_DRAW_ANIMATE)}})}return null},e.prototype.drawShape=function(t,n){var i;n===void 0&&(n=!1);var a=this,o=a.shapeFactory,s=a.container,l=a.shapeType;if(this.shape=o.drawShape(l,t,s),this.shape){this.setShapeInfo(this.shape,t);var u=this.shape.cfg.name;u?(0,qa.isString)(u)&&(this.shape.cfg.name=["element",u]):this.shape.cfg.name=["element",this.shapeFactory.geometryType];var f=n?"enter":"appear",c=this.getAnimateCfg(f);c&&((i=this.geometry)===null||i===void 0||i.emit(Uv.BEFORE_DRAW_ANIMATE),vp(this.shape,c,{coordinate:o.coordinate,toAttrs:E({},this.shape.attr())}))}},e.prototype.getOffscreenGroup=function(){if(!this.offscreenGroup){var t=this.container.getGroupBase();this.offscreenGroup=new t({})}return this.offscreenGroup},e.prototype.setShapeInfo=function(t,n){var i=this;if(t.cfg.origin=n,t.cfg.element=this,t.isGroup()){var a=t.get("children");a.forEach(function(o){i.setShapeInfo(o,n)})}},e.prototype.syncShapeStyle=function(t,n,i,a,o){var s=this,l;if(i===void 0&&(i=[]),o===void 0&&(o=0),!(!t||!n)){var u=t.get("clipShape"),f=n.get("clipShape");if(this.syncShapeStyle(u,f,i,a),t.isGroup())for(var c=t.get("children"),h=n.get("children"),d=0;d=0?a=n:i<=0?a=i:a=0,a},e.prototype.createAttrOption=function(t,n,i){if((0,sr.isNil)(n)||(0,sr.isObject)(n))(0,sr.isObject)(n)&&(0,sr.isEqual)(Object.keys(n),["values"])?(0,sr.set)(this.attributeOption,t,{fields:n.values}):(0,sr.set)(this.attributeOption,t,n);else{var a={};(0,sr.isNumber)(n)?a.values=[n]:a.fields=e1(n),i&&((0,sr.isFunction)(i)?a.callback=i:a.values=i),(0,sr.set)(this.attributeOption,t,a)}},e.prototype.initAttributes=function(){var t=this,n=this,i=n.attributes,a=n.attributeOption,o=n.theme,s=n.shapeType;this.groupScales=[];var l={},u=function(h){if(a.hasOwnProperty(h)){var d=a[h];if(!d)return{value:void 0};var p=E({},d),v=p.callback,m=p.values,g=p.fields,x=g===void 0?[]:g,b=x.map(function(C){var w=t.scales[C];return w.isCategory&&!l[C]&&Ty.includes(h)&&(t.groupScales.push(w),l[C]=!0),w});p.scales=b,h!=="position"&&b.length===1&&b[0].type==="identity"?p.values=b[0].values:!v&&!m&&(h==="size"?p.values=o.sizes:h==="shape"?p.values=o.shapes[s]||[]:h==="color"&&(b.length?p.values=b[0].values.length<=10?o.colors10:o.colors20:p.values=o.colors10));var S=Ww(h);i[h]=new S(p)}};for(var f in a){var c=u(f);if(typeof c=="object")return c.value}},e.prototype.processData=function(t){this.hasSorted=!1;for(var n=this.getAttribute("position").scales,i=n.filter(function(C){return C.isCategory}),a=this.groupData(t),o=[],s=0,l=a.length;ss&&(s=c)}var h=this.scaleDefs,d={};ot.max&&!(0,sr.get)(h,[a,"max"])&&(d.max=s),t.change(d)},e.prototype.beforeMapping=function(t){var n=t;if(this.sortable&&this.sort(n),this.generatePoints)for(var i=0,a=n.length;i1)for(var h=0;h0})}var YL=U(q());function bU(r,e,t){var n=t.data,i=t.origin,a=t.animateCfg,o=t.coordinate,s=(0,YL.get)(a,"update");r.set("data",n),r.set("origin",i),r.set("animateCfg",a),r.set("coordinate",o),r.set("visible",e.get("visible")),r.getChildren().forEach(function(l,u){var f=e.getChildByIndex(u);if(!f)r.removeChild(l),l.remove(!0);else{l.set("data",n),l.set("origin",i),l.set("animateCfg",a),l.set("coordinate",o);var c=_L(l,f);s?vp(l,s,{toAttrs:c,coordinate:o}):l.attr(c),f.isGroup()&&bU(l,f,t)}}),(0,YL.each)(e.getChildren(),function(l,u){u>=r.getCount()&&(l.destroyed||r.add(l))})}var ZWt=function(){function r(e){this.shapesMap={},this.lastShapesMap={};var t=e.layout,n=e.container;this.layout=t,this.container=n}return r.prototype.render=function(e,t,n){var i=this;n===void 0&&(n=!1),this.shapesMap={};var a=this.container,o=this.createOffscreenGroup();if(e.length){for(var s=0,l=e;s0||n===1?u[s]=i*l:u[s]=i*l*-1,u},r.prototype.getLabelPoint=function(e,t,n){var i=this.getCoordinate(),a=e.content.length;function o(m,g,x){x===void 0&&(x=!1);var b=m;return(0,qn.isArray)(b)&&(e.content.length===1?x?b=Jrt(b):b.length<=2?b=b[m.length-1]:b=Jrt(b):b=b[g]),b}var s={content:e.content[n],x:0,y:0,start:{x:0,y:0},color:"#fff"},l=(0,qn.isArray)(t.shape)?t.shape[0]:t.shape,u=l==="funnel"||l==="pyramid";if(this.geometry.type==="polygon"){var f=trt(t.x,t.y);s.x=f[0],s.y=f[1]}else this.geometry.type==="interval"&&!u?(s.x=o(t.x,n,!0),s.y=o(t.y,n)):(s.x=o(t.x,n),s.y=o(t.y,n));if(u){var c=(0,qn.get)(t,"nextPoints"),h=(0,qn.get)(t,"points");if(c){var d=i.convert(h[1]),p=i.convert(c[1]);s.x=(d.x+p.x)/2,s.y=(d.y+p.y)/2}else if(l==="pyramid"){var d=i.convert(h[1]),p=i.convert(h[2]);s.x=(d.x+p.x)/2,s.y=(d.y+p.y)/2}}e.position&&this.setLabelPosition(s,t,n,e.position);var v=this.getLabelOffsetPoint(e,n,a);return s.start={x:s.x,y:s.y},s.x+=v.x,s.y+=v.y,s.color=t.color,s},r.prototype.getLabelAlign=function(e,t,n){var i="center",a=this.getCoordinate();if(a.isTransposed){var o=e.offset;o<0?i="right":o===0?i="center":i="left",n>1&&t===0&&(i==="right"?i="left":i==="left"&&(i="right"))}return i},r.prototype.getLabelId=function(e){var t=this.geometry,n=t.type,i=t.getXScale(),a=t.getYScale(),o=e[Tn],s=t.getElementId(e);return n==="line"||n==="area"?s+=" ".concat(o[i.field]):n==="path"&&(s+=" ".concat(o[i.field],"-").concat(o[a.field])),s},r.prototype.getLabelsRenderer=function(){var e=this.geometry,t=e.labelsContainer,n=e.labelOption,i=e.canvasRegion,a=e.animateOption,o=this.geometry.coordinate,s=this.labelsRenderer;return s||(s=new Qrt({container:t,layout:(0,qn.get)(n,["cfg","layout"],{type:this.defaultLayout})}),this.labelsRenderer=s),s.region=i,s.animate=a?zL("label",o):!1,s},r.prototype.getLabelCfgs=function(e){var t=this,n=this.geometry,i=n.labelOption,a=n.scales,o=n.coordinate,s=i,l=s.fields,u=s.callback,f=s.cfg,c=l.map(function(d){return a[d]}),h=[];return(0,qn.each)(e,function(d,p){var v=d[Tn],m=t.getLabelText(v,c),g;if(u){var x=l.map(function(A){return v[A]});if(g=u.apply(void 0,x),(0,qn.isNil)(g)){h.push(null);return}}var b=E(E({id:t.getLabelId(d),elementId:t.geometry.getElementId(d),data:v,mappingData:d,coordinate:o},f),g);(0,qn.isFunction)(b.position)&&(b.position=b.position(v,d,p));var S=t.getLabelOffset(b.offset||0),C=t.getDefaultLabelCfg(S,b.position);b=(0,qn.deepMix)({},C,b),b.offset=t.getLabelOffset(b.offset||0);var w=b.content;(0,qn.isFunction)(w)?b.content=w(v,d,p):(0,qn.isUndefined)(w)&&(b.content=m[0]),h.push(b)}),h},r.prototype.getLabelText=function(e,t){var n=[];return(0,qn.each)(t,function(i){var a=e[i.field];(0,qn.isArray)(a)?a=a.map(function(o){return i.getText(o)}):a=i.getText(a),(0,qn.isNil)(a)||a===""?n.push(null):n.push(a)}),n},r.prototype.getOffsetVector=function(e){e===void 0&&(e=0);var t=this.getCoordinate(),n=0;return(0,qn.isNumber)(e)&&(n=e),t.isTransposed?t.applyMatrix(n,0):t.applyMatrix(0,n)},r.prototype.getGeometryShapes=function(){var e=this.geometry,t={};return(0,qn.each)(e.elementsMap,function(n,i){t[i]=n.shape}),(0,qn.each)(e.getOffscreenGroup().getChildren(),function(n){var i=e.getElementId(n.get("origin").mappingData);t[i]=n}),t},r}(),Sh=$Wt;function SE(r,e,t){if(!r)return t;var n;if(r.callback&&r.callback.length>1){var i=Array(r.callback.length-1).fill("");n=r.mapping.apply(r,mn([e],i,!1)).join("")}else n=r.mapping(e).join("");return n||t}var ta=U(q());var Ju={hexagon:function(r,e,t){var n=t/2*Math.sqrt(3);return[["M",r,e-t],["L",r+n,e-t/2],["L",r+n,e+t/2],["L",r,e+t],["L",r-n,e+t/2],["L",r-n,e-t/2],["Z"]]},bowtie:function(r,e,t){var n=t-1.5;return[["M",r-t,e-n],["L",r+t,e+n],["L",r+t,e-n],["L",r-t,e+n],["Z"]]},cross:function(r,e,t){return[["M",r-t,e-t],["L",r+t,e+t],["M",r+t,e-t],["L",r-t,e+t]]},tick:function(r,e,t){return[["M",r-t/2,e-t],["L",r+t/2,e-t],["M",r,e-t],["L",r,e+t],["M",r-t/2,e+t],["L",r+t/2,e+t]]},plus:function(r,e,t){return[["M",r-t,e],["L",r+t,e],["M",r,e-t],["L",r,e+t]]},hyphen:function(r,e,t){return[["M",r-t,e],["L",r+t,e]]},line:function(r,e,t){return[["M",r,e-t],["L",r,e+t]]}};var QWt=["line","cross","tick","plus","hyphen"];function JWt(r,e){return(0,ta.isFunction)(e)?e(r):(0,ta.deepMix)({},r,e)}function t6t(r,e){var t=r.symbol;if((0,ta.isString)(t)&&QWt.indexOf(t)!==-1){var n=(0,ta.get)(r,"style",{}),i=(0,ta.get)(n,"lineWidth",1),a=n.stroke||n.fill||e;r.style=(0,ta.deepMix)({},r.style,{lineWidth:i,stroke:a,fill:null})}}function tnt(r){var e=r.symbol;(0,ta.isString)(e)&&Ju[e]&&(r.symbol=Ju[e])}function XL(r){return r.startsWith(xe.LEFT)||r.startsWith(xe.RIGHT)?"vertical":"horizontal"}function qL(r,e,t,n,i){var a=t.getScale(t.type);if(a.isCategory){var o=a.field,s=e.getAttribute("color"),l=e.getAttribute("shape"),u=r.getTheme().defaultColor,f=e.coordinate.isPolar;return a.getTicks().map(function(c,h){var d,p=c.text,v=c.value,m=p,g=a.invert(v),x=r.filterFieldData(o,[(d={},d[o]=g,d)]).length===0;(0,ta.each)(r.views,function(A){var I;A.filterFieldData(o,[(I={},I[o]=g,I)]).length||(x=!0)});var b=SE(s,g,u),S=SE(l,g,"point"),C=e.getShapeMarker(S,{color:b,isInPolar:f}),w=i;return(0,ta.isFunction)(w)&&(w=w(m,h,E({name:m,value:g},(0,ta.deepMix)({},n,C)))),C=(0,ta.deepMix)({},n,C,bo(E({},w),["style"])),t6t(C,b),w&&w.style&&(C.style=JWt(C.style,w.style)),tnt(C),{id:g,name:m,value:g,marker:C,unchecked:x}})}return[]}function ent(r,e,t){return t.map(function(n,i){var a=e;(0,ta.isFunction)(a)&&(a=a(n.name,i,(0,ta.deepMix)({},r,n)));var o=(0,ta.isFunction)(n.marker)?n.marker(n.name,i,(0,ta.deepMix)({},r,n)):n.marker,s=(0,ta.deepMix)({},r,a,o);return tnt(s),n.marker=s,n})}function _U(r,e){var t=(0,ta.get)(r,["components","legend"],{});return(0,ta.deepMix)({},(0,ta.get)(t,["common"],{}),(0,ta.deepMix)({},(0,ta.get)(t,[e],{})))}var SU=U(q());function CU(r){return r?!1:r==null||isNaN(r)}function rnt(r){if((0,SU.isArray)(r))return CU(r[1].y);var e=r.y;return(0,SU.isArray)(e)?CU(e[0]):CU(e)}function xm(r,e,t){if(e===void 0&&(e=!1),t===void 0&&(t=!0),!r.length||r.length===1&&!t)return[];if(e){for(var n=[],i=0,a=r.length;iky,AbstractGroup:()=>Xv,AbstractShape:()=>qv,Base:()=>Ly,Canvas:()=>Bl,Event:()=>Hu,Group:()=>s1,PathUtil:()=>db,Shape:()=>xp,assembleFont:()=>By,getArcParams:()=>_m,getBBoxMethod:()=>Kv,getOffScreenContext:()=>Ny,getTextHeight:()=>Fy,invert:()=>Oy,isAllowCapture:()=>Vv,multiplyVec2:()=>du,version:()=>F6t});var xp={};Dn(xp,{Base:()=>Ba,Circle:()=>gnt,Ellipse:()=>ynt,Image:()=>bnt,Line:()=>_nt,Marker:()=>Cnt,Path:()=>wE,Polygon:()=>Ent,Polyline:()=>Ant,Rect:()=>Mnt,Text:()=>Tnt});var ln=U(q());function int(){return window?window.devicePixelRatio:1}function JL(r,e,t,n){var i=r-t,a=e-n;return Math.sqrt(i*i+a*a)}function Ch(r,e,t,n,i,a){return i>=r&&i<=r+t&&a>=e&&a<=e+n}function bm(r,e){return!(e.minX>r.maxX||e.maxXr.maxY||e.maxY=0&&i<1/2*Math.PI?(s={x:o.minX,y:o.minY},l={x:o.maxX,y:o.maxY}):1/2*Math.PI<=i&&i1&&(t*=Math.sqrt(d),n*=Math.sqrt(d));var p=t*t*(h*h)+n*n*(c*c),v=p?Math.sqrt((t*t*(n*n)-p)/p):1;a===o&&(v*=-1),isNaN(v)&&(v=0);var m=n?v*t*h/n:0,g=t?v*-n*c/t:0,x=(s+u)/2+Math.cos(i)*m-Math.sin(i)*g,b=(l+f)/2+Math.sin(i)*m+Math.cos(i)*g,S=[(c-m)/t,(h-g)/n],C=[(-1*c-m)/t,(-1*h-g)/n],w=fnt([1,0],S),A=fnt(S,C);return TU(S,C)<=-1&&(A=Math.PI),TU(S,C)>=1&&(A=0),o===0&&A>0&&(A=A-2*Math.PI),o===1&&A<0&&(A=A+2*Math.PI),{cx:x,cy:b,rx:MU(r,[u,f])?0:t,ry:MU(r,[u,f])?0:n,startAngle:w,endAngle:w+A,xRotation:i,arcFlag:a,sweepFlag:o}}var eO=Math.sin,rO=Math.cos,IU=Math.atan2,nO=Math.PI;function cnt(r,e,t,n,i,a,o){var s=e.stroke,l=e.lineWidth,u=t-i,f=n-a,c=IU(f,u),h=new wE({type:"path",canvas:r.get("canvas"),isArrowShape:!0,attrs:{path:"M"+10*rO(nO/6)+","+10*eO(nO/6)+" L0,0 L"+10*rO(nO/6)+",-"+10*eO(nO/6),stroke:s,lineWidth:l}});h.translate(i,a),h.rotateAtPoint(i,a,c),r.set(o?"startArrowShape":"endArrowShape",h)}function hnt(r,e,t,n,i,a,o){var s=e.startArrow,l=e.endArrow,u=e.stroke,f=e.lineWidth,c=o?s:l,h=c.d,d=c.fill,p=c.stroke,v=c.lineWidth,m=rr(c,["d","fill","stroke","lineWidth"]),g=t-i,x=n-a,b=IU(x,g);h&&(i=i-rO(b)*h,a=a-eO(b)*h);var S=new wE({type:"path",canvas:r.get("canvas"),isArrowShape:!0,attrs:E(E({},m),{stroke:p||u,lineWidth:v||f,fill:d})});S.translate(i,a),S.rotateAtPoint(i,a,b),r.set(o?"startArrowShape":"endArrowShape",S)}function wh(r,e,t,n,i){var a=IU(n-e,t-r);return{dx:rO(a)*i,dy:eO(a)*i}}function a1(r,e,t,n,i,a){typeof e.startArrow=="object"?hnt(r,e,t,n,i,a,!0):e.startArrow?cnt(r,e,t,n,i,a,!0):r.set("startArrowShape",null)}function o1(r,e,t,n,i,a){typeof e.endArrow=="object"?hnt(r,e,t,n,i,a,!1):e.endArrow?cnt(r,e,t,n,i,a,!1):r.set("startArrowShape",null)}var dnt={fill:"fillStyle",stroke:"strokeStyle",opacity:"globalAlpha"};function yp(r,e){var t=e.attr();for(var n in t){var i=t[n],a=dnt[n]?dnt[n]:n;a==="matrix"&&i?r.transform(i[0],i[1],i[3],i[4],i[6],i[7]):a==="lineDash"&&r.setLineDash?(0,oc.isArray)(i)&&r.setLineDash(i):(a==="strokeStyle"||a==="fillStyle"?i=lnt(r,e,i):a==="globalAlpha"&&(i=i*r.globalAlpha),r[a]=i)}}function EE(r,e,t){for(var n=0;nC?S:C,M=S>C?1:S/C,O=S>C?C/S:1;e.translate(x,b),e.rotate(I),e.scale(M,O),e.arc(0,0,L,w,A,1-P),e.scale(1/M,1/O),e.rotate(-I),e.translate(-x,-b)}break}case"Z":e.closePath();break;default:break}if(h==="Z")s=l;else{var F=c.length;s=[c[F-2],c[F-1]]}}}}function aO(r,e){var t=r.get("canvas");t&&(e==="remove"&&(r._cacheCanvasBBox=r.get("cacheCanvasBBox")),r.get("hasChanged")||(r.set("hasChanged",!0),r.cfg.parent&&r.cfg.parent.get("hasChanged")||(t.refreshElement(r,e,t),t.get("autoDraw")&&t.draw())))}function v6t(r){var e;if(r.destroyed)e=r._cacheCanvasBBox;else{var t=r.get("cacheCanvasBBox"),n=t&&!!(t.width&&t.height),i=r.getCanvasBBox(),a=i&&!!(i.width&&i.height);n&&a?e=ant(t,i):n?e=t:a&&(e=i)}return e}function vnt(r){if(!r.length)return null;var e=[],t=[],n=[],i=[];return(0,oc.each)(r,function(a){var o=v6t(a);o&&(e.push(o.minX),t.push(o.minY),n.push(o.maxX),i.push(o.maxY))}),{minX:(0,oc.min)(e),minY:(0,oc.min)(t),maxX:(0,oc.max)(n),maxY:(0,oc.max)(i)}}function mnt(r,e){return!r||!e||!bm(r,e)?null:{minX:Math.max(r.minX,e.minX),minY:Math.max(r.minY,e.minY),maxX:Math.min(r.maxX,e.maxX),maxY:Math.min(r.maxY,e.maxY)}}var Sm=U(q());var m6t=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.onCanvasChange=function(t){aO(this,t)},e.prototype.getShapeBase=function(){return xp},e.prototype.getGroupBase=function(){return e},e.prototype._applyClip=function(t,n){n&&(t.save(),yp(t,n),n.createPath(t),t.restore(),t.clip(),n._afterDraw())},e.prototype.cacheCanvasBBox=function(){var t=this.cfg.children,n=[],i=[];(0,Sm.each)(t,function(h){var d=h.cfg.cacheCanvasBBox;d&&h.cfg.isInView&&(n.push(d.minX,d.maxX),i.push(d.minY,d.maxY))});var a=null;if(n.length){var o=(0,Sm.min)(n),s=(0,Sm.max)(n),l=(0,Sm.min)(i),u=(0,Sm.max)(i);a={minX:o,minY:l,x:o,y:l,maxX:s,maxY:u,width:s-o,height:u-l};var f=this.cfg.canvas;if(f){var c=f.getViewRange();this.set("isInView",bm(a,c))}}else this.set("isInView",!1);this.set("cacheCanvasBBox",a)},e.prototype.draw=function(t,n){var i=this.cfg.children,a=n?this.cfg.refresh:!0;i.length&&a&&(t.save(),yp(t,this),this._applyClip(t,this.getClip()),EE(t,i,n),t.restore(),this.cacheCanvasBBox()),this.cfg.refresh=null,this.set("hasChanged",!1)},e.prototype.skipDraw=function(){this.set("cacheCanvasBBox",null),this.set("hasChanged",!1)},e}(Xv),s1=m6t;var g6t=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{lineWidth:1,lineAppendWidth:0,strokeOpacity:1,fillOpacity:1})},e.prototype.getShapeBase=function(){return xp},e.prototype.getGroupBase=function(){return s1},e.prototype.onCanvasChange=function(t){aO(this,t)},e.prototype.calculateBBox=function(){var t=this.get("type"),n=this.getHitLineWidth(),i=Kv(t),a=i(this),o=n/2,s=a.x-o,l=a.y-o,u=a.x+a.width+o,f=a.y+a.height+o;return{x:s,minX:s,y:l,minY:l,width:a.width+n,height:a.height+n,maxX:u,maxY:f}},e.prototype.isFill=function(){return!!this.attrs.fill||this.isClipShape()},e.prototype.isStroke=function(){return!!this.attrs.stroke},e.prototype._applyClip=function(t,n){n&&(t.save(),yp(t,n),n.createPath(t),t.restore(),t.clip(),n._afterDraw())},e.prototype.draw=function(t,n){var i=this.cfg.clipShape;if(n){if(this.cfg.refresh===!1){this.set("hasChanged",!1);return}var a=this.getCanvasBBox();if(!bm(n,a)){this.set("hasChanged",!1),this.cfg.isInView&&this._afterDraw();return}}t.save(),yp(t,this),this._applyClip(t,i),this.drawPath(t),t.restore(),this._afterDraw()},e.prototype.getCanvasViewBox=function(){var t=this.cfg.canvas;return t?t.getViewRange():null},e.prototype.cacheCanvasBBox=function(){var t=this.getCanvasViewBox();if(t){var n=this.getCanvasBBox(),i=bm(n,t);this.set("isInView",i),i?this.set("cacheCanvasBBox",n):this.set("cacheCanvasBBox",null)}},e.prototype._afterDraw=function(){this.cacheCanvasBBox(),this.set("hasChanged",!1),this.set("refresh",null)},e.prototype.skipDraw=function(){this.set("cacheCanvasBBox",null),this.set("isInView",null),this.set("hasChanged",!1)},e.prototype.drawPath=function(t){this.createPath(t),this.strokeAndFill(t),this.afterDrawPath(t)},e.prototype.fill=function(t){t.fill()},e.prototype.stroke=function(t){t.stroke()},e.prototype.strokeAndFill=function(t){var n=this.attrs,i=n.lineWidth,a=n.opacity,o=n.strokeOpacity,s=n.fillOpacity;this.isFill()&&(!(0,ln.isNil)(s)&&s!==1?(t.globalAlpha=s,this.fill(t),t.globalAlpha=a):this.fill(t)),this.isStroke()&&i>0&&(!(0,ln.isNil)(o)&&o!==1&&(t.globalAlpha=o),this.stroke(t)),this.afterDrawPath(t)},e.prototype.createPath=function(t){},e.prototype.afterDrawPath=function(t){},e.prototype.isInShape=function(t,n){var i=this.isStroke(),a=this.isFill(),o=this.getHitLineWidth();return this.isInStrokeOrPath(t,n,i,a,o)},e.prototype.isInStrokeOrPath=function(t,n,i,a,o){return!1},e.prototype.getHitLineWidth=function(){if(!this.isStroke())return 0;var t=this.attrs;return t.lineWidth+t.lineAppendWidth},e}(qv),Ba=g6t;var y6t=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{x:0,y:0,r:0})},e.prototype.isInStrokeOrPath=function(t,n,i,a,o){var s=this.attr(),l=s.x,u=s.y,f=s.r,c=o/2,h=JL(l,u,t,n);return a&&i?h<=f+c:a?h<=f:i?h>=f-c&&h<=f+c:!1},e.prototype.createPath=function(t){var n=this.attr(),i=n.x,a=n.y,o=n.r;t.beginPath(),t.arc(i,a,o,0,Math.PI*2,!1),t.closePath()},e}(Ba),gnt=y6t;function oO(r,e,t,n){return r/(t*t)+e/(n*n)}var x6t=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{x:0,y:0,rx:0,ry:0})},e.prototype.isInStrokeOrPath=function(t,n,i,a,o){var s=this.attr(),l=o/2,u=s.x,f=s.y,c=s.rx,h=s.ry,d=(t-u)*(t-u),p=(n-f)*(n-f);return a&&i?oO(d,p,c+l,h+l)<=1:a?oO(d,p,c,h)<=1:i?oO(d,p,c-l,h-l)>=1&&oO(d,p,c+l,h+l)<=1:!1},e.prototype.createPath=function(t){var n=this.attr(),i=n.x,a=n.y,o=n.rx,s=n.ry;if(t.beginPath(),t.ellipse)t.ellipse(i,a,o,s,0,0,Math.PI*2,!1);else{var l=o>s?o:s,u=o>s?1:o/s,f=o>s?s/o:1;t.save(),t.translate(i,a),t.scale(u,f),t.arc(0,0,l,0,Math.PI*2),t.restore(),t.closePath()}},e}(Ba),ynt=x6t;function xnt(r){return r instanceof HTMLElement&&(0,ln.isString)(r.nodeName)&&r.nodeName.toUpperCase()==="CANVAS"}var b6t=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{x:0,y:0,width:0,height:0})},e.prototype.initAttrs=function(t){this._setImage(t.img)},e.prototype.isStroke=function(){return!1},e.prototype.isOnlyHitBox=function(){return!0},e.prototype._afterLoading=function(){if(this.get("toDraw")===!0){var t=this.get("canvas");t?t.draw():this.createPath(this.get("context"))}},e.prototype._setImage=function(t){var n=this,i=this.attrs;if((0,ln.isString)(t)){var a=new Image;a.onload=function(){if(n.destroyed)return!1;n.attr("img",a),n.set("loading",!1),n._afterLoading();var o=n.get("callback");o&&o.call(n)},a.crossOrigin="Anonymous",a.src=t,this.set("loading",!0)}else t instanceof Image?(i.width||(i.width=t.width),i.height||(i.height=t.height)):xnt(t)&&(i.width||(i.width=Number(t.getAttribute("width"))),i.height||(i.height,Number(t.getAttribute("height"))))},e.prototype.onAttrChange=function(t,n,i){r.prototype.onAttrChange.call(this,t,n,i),t==="img"&&this._setImage(n)},e.prototype.createPath=function(t){if(this.get("loading")){this.set("toDraw",!0),this.set("context",t);return}var n=this.attr(),i=n.x,a=n.y,o=n.width,s=n.height,l=n.sx,u=n.sy,f=n.swidth,c=n.sheight,h=n.img;(h instanceof Image||xnt(h))&&(!(0,ln.isNil)(l)&&!(0,ln.isNil)(u)&&!(0,ln.isNil)(f)&&!(0,ln.isNil)(c)?t.drawImage(h,l,u,f,c,i,a,o,s):t.drawImage(h,i,a,o,s))},e}(Ba),bnt=b6t;function _u(r,e,t,n,i,a,o){var s=Math.min(r,t),l=Math.max(r,t),u=Math.min(e,n),f=Math.max(e,n),c=i/2;return a>=s-c&&a<=l+c&&o>=u-c&&o<=f+c?Vi.pointToLine(r,e,t,n,a,o)<=i/2:!1}var _6t=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{x1:0,y1:0,x2:0,y2:0,startArrow:!1,endArrow:!1})},e.prototype.initAttrs=function(t){this.setArrow()},e.prototype.onAttrChange=function(t,n,i){r.prototype.onAttrChange.call(this,t,n,i),this.setArrow()},e.prototype.setArrow=function(){var t=this.attr(),n=t.x1,i=t.y1,a=t.x2,o=t.y2,s=t.startArrow,l=t.endArrow;s&&a1(this,t,a,o,n,i),l&&o1(this,t,n,i,a,o)},e.prototype.isInStrokeOrPath=function(t,n,i,a,o){if(!i||!o)return!1;var s=this.attr(),l=s.x1,u=s.y1,f=s.x2,c=s.y2;return _u(l,u,f,c,o,t,n)},e.prototype.createPath=function(t){var n=this.attr(),i=n.x1,a=n.y1,o=n.x2,s=n.y2,l=n.startArrow,u=n.endArrow,f={dx:0,dy:0},c={dx:0,dy:0};l&&l.d&&(f=wh(i,a,o,s,n.startArrow.d)),u&&u.d&&(c=wh(i,a,o,s,n.endArrow.d)),t.beginPath(),t.moveTo(i+f.dx,a+f.dy),t.lineTo(o-c.dx,s-c.dy)},e.prototype.afterDrawPath=function(t){var n=this.get("startArrowShape"),i=this.get("endArrowShape");n&&n.draw(t),i&&i.draw(t)},e.prototype.getTotalLength=function(){var t=this.attr(),n=t.x1,i=t.y1,a=t.x2,o=t.y2;return Vi.length(n,i,a,o)},e.prototype.getPoint=function(t){var n=this.attr(),i=n.x1,a=n.y1,o=n.x2,s=n.y2;return Vi.pointAt(i,a,o,s,t)},e}(Ba),_nt=_6t;var Snt=U(q());var S6t={circle:function(r,e,t){return[["M",r-t,e],["A",t,t,0,1,0,r+t,e],["A",t,t,0,1,0,r-t,e]]},square:function(r,e,t){return[["M",r-t,e-t],["L",r+t,e-t],["L",r+t,e+t],["L",r-t,e+t],["Z"]]},diamond:function(r,e,t){return[["M",r-t,e],["L",r,e-t],["L",r+t,e],["L",r,e+t],["Z"]]},triangle:function(r,e,t){var n=t*Math.sin(1/3*Math.PI);return[["M",r-t,e+n],["L",r,e-n],["L",r+t,e+n],["Z"]]},"triangle-down":function(r,e,t){var n=t*Math.sin(1/3*Math.PI);return[["M",r-t,e-n],["L",r+t,e-n],["L",r,e+n],["Z"]]}},C6t=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.initAttrs=function(t){this._resetParamsCache()},e.prototype._resetParamsCache=function(){this.set("paramsCache",{})},e.prototype.onAttrChange=function(t,n,i){r.prototype.onAttrChange.call(this,t,n,i),["symbol","x","y","r","radius"].indexOf(t)!==-1&&this._resetParamsCache()},e.prototype.isOnlyHitBox=function(){return!0},e.prototype._getR=function(t){return(0,Snt.isNil)(t.r)?t.radius:t.r},e.prototype._getPath=function(){var t=this.attr(),n=t.x,i=t.y,a=t.symbol||"circle",o=this._getR(t),s,l;if((0,ln.isFunction)(a))s=a,l=s(n,i,o),l=Uy(l);else{if(s=e.Symbols[a],!s)return console.warn(a+" marker is not supported."),null;l=s(n,i,o)}return l},e.prototype.createPath=function(t){var n=this._getPath(),i=this.get("paramsCache");iO(this,t,{path:n},i)},e.Symbols=S6t,e}(Ba),Cnt=C6t;var wm=U(q());function AE(r,e,t){var n=Ny();return r.createPath(n),n.isPointInPath(e,t)}var w6t=1e-6;function PU(r){return Math.abs(r)0!=PU(s[1]-t)>0&&PU(e-(t-o[1])*(o[0]-s[0])/(o[1]-s[1])-o[0])<0&&(n=!n)}return n}function Cm(r,e,t,n,i,a,o,s){var l=(Math.atan2(s-e,o-r)+Math.PI*2)%(Math.PI*2);if(li)return!1;var u={x:r+t*Math.cos(l),y:e+t*Math.sin(l)};return JL(u.x,u.y,o,s)<=a/2}var A6t=gr.transform;function M6t(r){for(var e=!1,t=r.length,n=0;nb?x:b,P=x>b?1:x/b,L=x>b?b/x:1,M=A6t(null,[["t",-m,-g],["r",-w],["s",1/P,1/L]]);a4(A,A,M),a=Cm(0,0,I,S,C,e,A[0],A[1]);break;default:break}if(a)break}}return a}function I6t(r){for(var e=r.length,t=[],n=[],i=[],a=0;a0&&n.push(i),{polygons:t,polylines:n}}var TE=E({hasArc:M6t,extractPolygons:I6t,isPointInStroke:T6t},db);function wnt(r,e,t){for(var n=!1,i=0;i=f[0]&&t<=f[1]&&(i=(t-f[0])/(f[1]-f[0]),a=c)});var s=o[a];if((0,wm.isNil)(s)||(0,wm.isNil)(a))return null;var l=s.length,u=o[a+1];return rp.pointAt(s[l-2],s[l-1],u[1],u[2],u[3],u[4],u[5],u[6],i)},e.prototype._calculateCurve=function(){var t=this.attr().path;this.set("curve",TE.pathToCurve(t))},e.prototype._setTcache=function(){var t=0,n=0,i=[],a,o,s,l,u=this.get("curve");if(!!u){if((0,wm.each)(u,function(f,c){s=u[c+1],l=f.length,s&&(t+=rp.length(f[l-2],f[l-1],s[1],s[2],s[3],s[4],s[5],s[6])||0)}),this.set("totalLength",t),t===0){this.set("tCache",[]);return}(0,wm.each)(u,function(f,c){s=u[c+1],l=f.length,s&&(a=[],a[0]=n/t,o=rp.length(f[l-2],f[l-1],s[1],s[2],s[3],s[4],s[5],s[6]),n+=o||0,a[1]=n/t,i.push(a))}),this.set("tCache",i)}},e.prototype.getStartTangent=function(){var t=this.getSegments(),n;if(t.length>1){var i=t[0].currentPoint,a=t[1].currentPoint,o=t[1].startTangent;n=[],o?(n.push([i[0]-o[0],i[1]-o[1]]),n.push([i[0],i[1]])):(n.push([a[0],a[1]]),n.push([i[0],i[1]]))}return n},e.prototype.getEndTangent=function(){var t=this.getSegments(),n=t.length,i;if(n>1){var a=t[n-2].currentPoint,o=t[n-1].currentPoint,s=t[n-1].endTangent;i=[],s?(i.push([o[0]-s[0],o[1]-s[1]]),i.push([o[0],o[1]])):(i.push([a[0],a[1]]),i.push([o[0],o[1]]))}return i},e}(Ba),wE=L6t;function IE(r,e,t,n,i){var a=r.length;if(a<2)return!1;for(var o=0;o=s[0]&&t<=s[1]&&(a=(t-s[0])/(s[1]-s[0]),o=l)}),Vi.pointAt(n[o][0],n[o][1],n[o+1][0],n[o+1][1],a)},e.prototype._setTcache=function(){var t=this.attr().points;if(!(!t||t.length===0)){var n=this.getTotalLength();if(!(n<=0)){var i=0,a=[],o,s;(0,LE.each)(t,function(l,u){t[u+1]&&(o=[],o[0]=i/n,s=Vi.length(l[0],l[1],t[u+1][0],t[u+1][1]),i+=s,o[1]=i/n,a.push(o))}),this.set("tCache",a)}}},e.prototype.getStartTangent=function(){var t=this.attr().points,n=[];return n.push([t[1][0],t[1][1]]),n.push([t[0][0],t[0][1]]),n},e.prototype.getEndTangent=function(){var t=this.attr().points,n=t.length-1,i=[];return i.push([t[n-1][0],t[n-1][1]]),i.push([t[n][0],t[n][1]]),i},e}(Ba),Ant=D6t;function kU(r,e,t,n,i,a,o){var s=i/2;return Ch(r-s,e-s,t,i,a,o)||Ch(r+t-s,e-s,i,n,a,o)||Ch(r+s,e+n-s,t,i,a,o)||Ch(r-s,e+s,i,n,a,o)}function RU(r,e,t,n,i,a,o,s){var l=a/2;return _u(r+i,e,r+t-i,e,a,o,s)||_u(r+t,e+i,r+t,e+n-i,a,o,s)||_u(r+t-i,e+n,r+i,e+n,a,o,s)||_u(r,e+n-i,r,e+i,a,o,s)||Cm(r+t-i,e+i,i,1.5*Math.PI,2*Math.PI,a,o,s)||Cm(r+t-i,e+n-i,i,0,.5*Math.PI,a,o,s)||Cm(r+i,e+n-i,i,.5*Math.PI,Math.PI,a,o,s)||Cm(r+i,e+i,i,Math.PI,1.5*Math.PI,a,o,s)}var P6t=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{x:0,y:0,width:0,height:0,radius:0})},e.prototype.isInStrokeOrPath=function(t,n,i,a,o){var s=this.attr(),l=s.x,u=s.y,f=s.width,c=s.height,h=s.radius;if(h){var p=!1;return i&&(p=RU(l,u,f,c,h,o,t,n)),!p&&a&&(p=AE(this,t,n)),p}else{var d=o/2;if(a&&i)return Ch(l-d,u-d,f+d,c+d,t,n);if(a)return Ch(l,u,f,c,t,n);if(i)return kU(l,u,f,c,o,t,n)}},e.prototype.createPath=function(t){var n=this.attr(),i=n.x,a=n.y,o=n.width,s=n.height,l=n.radius;if(t.beginPath(),l===0)t.rect(i,a,o,s);else{var u=unt(l),f=u[0],c=u[1],h=u[2],d=u[3];t.moveTo(i+f,a),t.lineTo(i+o-c,a),c!==0&&t.arc(i+o-c,a+c,c,-Math.PI/2,0),t.lineTo(i+o,a+s-h),h!==0&&t.arc(i+o-h,a+s-h,h,0,Math.PI/2),t.lineTo(i+d,a+s),d!==0&&t.arc(i+d,a+s-d,d,Math.PI/2,Math.PI),t.lineTo(i,a+f),f!==0&&t.arc(i+f,a+f,f,Math.PI,Math.PI*1.5),t.closePath()}},e}(Ba),Mnt=P6t;var k6t=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{x:0,y:0,text:null,fontSize:12,fontFamily:"sans-serif",fontStyle:"normal",fontWeight:"normal",fontVariant:"normal",textAlign:"start",textBaseline:"bottom"})},e.prototype.isOnlyHitBox=function(){return!0},e.prototype.initAttrs=function(t){this._assembleFont(),t.text&&this._setText(t.text)},e.prototype._assembleFont=function(){var t=this.attrs;t.font=By(t)},e.prototype._setText=function(t){var n=null;(0,ln.isString)(t)&&t.indexOf(` +`)!==-1&&(n=t.split(` +`)),this.set("textArr",n)},e.prototype.onAttrChange=function(t,n,i){r.prototype.onAttrChange.call(this,t,n,i),t.startsWith("font")&&this._assembleFont(),t==="text"&&this._setText(n)},e.prototype._getSpaceingY=function(){var t=this.attrs,n=t.lineHeight,i=t.fontSize*1;return n?n-i:i*.14},e.prototype._drawTextArr=function(t,n,i){var a=this.attrs,o=a.textBaseline,s=a.x,l=a.y,u=a.fontSize*1,f=this._getSpaceingY(),c=Fy(a.text,a.fontSize,a.lineHeight),h;(0,ln.each)(n,function(d,p){h=l+p*(f+u)-c+u,o==="middle"&&(h+=c-u-(c-u)/2),o==="top"&&(h+=c-u),(0,ln.isNil)(d)||(i?t.fillText(d,s,h):t.strokeText(d,s,h))})},e.prototype._drawText=function(t,n){var i=this.attr(),a=i.x,o=i.y,s=this.get("textArr");if(s)this._drawTextArr(t,s,n);else{var l=i.text;(0,ln.isNil)(l)||(n?t.fillText(l,a,o):t.strokeText(l,a,o))}},e.prototype.strokeAndFill=function(t){var n=this.attrs,i=n.lineWidth,a=n.opacity,o=n.strokeOpacity,s=n.fillOpacity;this.isStroke()&&i>0&&(!(0,ln.isNil)(o)&&o!==1&&(t.globalAlpha=a),this.stroke(t)),this.isFill()&&(!(0,ln.isNil)(s)&&s!==1?(t.globalAlpha=s,this.fill(t),t.globalAlpha=a):this.fill(t)),this.afterDrawPath(t)},e.prototype.fill=function(t){this._drawText(t,!0)},e.prototype.stroke=function(t){this._drawText(t,!1)},e}(Ba),Tnt=k6t;function R6t(r,e){if(e){var t=Oy(e);return du(t,r)}return r}function Int(r,e,t){var n=r.getTotalMatrix();if(n){var i=R6t([e,t,1],n),a=i[0],o=i[1];return[a,o]}return[e,t]}function Lnt(r,e,t){if(r.isCanvas&&r.isCanvas())return!0;if(!Vv(r)||r.cfg.isInView===!1)return!1;if(r.cfg.clipShape){var n=Int(r,e,t),i=n[0],a=n[1];if(r.isClipped(i,a))return!1}var o=r.cfg.cacheCanvasBBox||r.getCanvasBBox();return e>=o.minX&&e<=o.maxX&&t>=o.minY&&t<=o.maxY}function NU(r,e,t){if(!Lnt(r,e,t))return null;for(var n=null,i=r.getChildren(),a=i.length,o=a-1;o>=0;o--){var s=i[o];if(s.isGroup())n=NU(s,e,t);else if(Lnt(s,e,t)){var l=s,u=Int(s,e,t),f=u[0],c=u[1];l.isInShape(f,c)&&(n=s)}if(n)break}return n}var N6t=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){var t=r.prototype.getDefaultCfg.call(this);return t.renderer="canvas",t.autoDraw=!0,t.localRefresh=!0,t.refreshElements=[],t.clipView=!0,t.quickHit=!1,t},e.prototype.onCanvasChange=function(t){(t==="attr"||t==="sort"||t==="changeSize")&&(this.set("refreshElements",[this]),this.draw())},e.prototype.getShapeBase=function(){return xp},e.prototype.getGroupBase=function(){return s1},e.prototype.getPixelRatio=function(){var t=this.get("pixelRatio")||int();return t>=1?Math.ceil(t):1},e.prototype.getViewRange=function(){return{minX:0,minY:0,maxX:this.cfg.width,maxY:this.cfg.height}},e.prototype.createDom=function(){var t=document.createElement("canvas"),n=t.getContext("2d");return this.set("context",n),t},e.prototype.setDOMSize=function(t,n){r.prototype.setDOMSize.call(this,t,n);var i=this.get("context"),a=this.get("el"),o=this.getPixelRatio();a.width=o*t,a.height=o*n,o>1&&i.scale(o,o)},e.prototype.clear=function(){r.prototype.clear.call(this),this._clearFrame();var t=this.get("context"),n=this.get("el");t.clearRect(0,0,n.width,n.height)},e.prototype.getShape=function(t,n){var i;return this.get("quickHit")?i=NU(this,t,n):i=r.prototype.getShape.call(this,t,n,null),i},e.prototype._getRefreshRegion=function(){var t=this.get("refreshElements"),n=this.getViewRange(),i;if(t.length&&t[0]===this)i=n;else if(i=vnt(t),i){i.minX=Math.floor(i.minX),i.minY=Math.floor(i.minY),i.maxX=Math.ceil(i.maxX),i.maxY=Math.ceil(i.maxY),i.maxY+=1;var a=this.get("clipView");a&&(i=mnt(i,n))}return i},e.prototype.refreshElement=function(t){var n=this.get("refreshElements");n.push(t)},e.prototype._clearFrame=function(){var t=this.get("drawFrame");t&&((0,ln.clearAnimationFrame)(t),this.set("drawFrame",null),this.set("refreshElements",[]))},e.prototype.draw=function(){var t=this.get("drawFrame");this.get("autoDraw")&&t||this._startDraw()},e.prototype._drawAll=function(){var t=this.get("context"),n=this.get("el"),i=this.getChildren();t.clearRect(0,0,n.width,n.height),yp(t,this),EE(t,i),this.set("refreshElements",[])},e.prototype._drawRegion=function(){var t=this.get("context"),n=this.get("refreshElements"),i=this.getChildren(),a=this._getRefreshRegion();a?(t.clearRect(a.minX,a.minY,a.maxX-a.minX,a.maxY-a.minY),t.save(),t.beginPath(),t.rect(a.minX,a.minY,a.maxX-a.minX,a.maxY-a.minY),t.clip(),yp(t,this),pnt(this,i,a),EE(t,i,a),t.restore()):n.length&&OU(n),(0,ln.each)(n,function(o){o.get("hasChanged")&&o.set("hasChanged",!1)}),this.set("refreshElements",[])},e.prototype._startDraw=function(){var t=this,n=this.get("drawFrame");n||(n=(0,ln.requestAnimationFrame)(function(){t.get("localRefresh")?t._drawRegion():t._drawAll(),t.set("drawFrame",null)}),this.set("drawFrame",n))},e.prototype.skipDraw=function(){},e.prototype.removeDom=function(){var t=this.get("el");t.width=0,t.height=0,t.parentNode.removeChild(t)},e}(ky),Bl=N6t;var F6t="0.5.12";var UU={};Dn(UU,{AbstractCanvas:()=>ky,AbstractGroup:()=>Xv,AbstractShape:()=>qv,Base:()=>Ly,Canvas:()=>Ah,Event:()=>Hu,Group:()=>l1,PathUtil:()=>db,Shape:()=>_p,assembleFont:()=>By,getBBoxMethod:()=>Kv,getOffScreenContext:()=>Ny,getTextHeight:()=>Fy,invert:()=>Oy,isAllowCapture:()=>Vv,multiplyVec2:()=>du,version:()=>vVt});var _p={};Dn(_p,{Base:()=>ba,Circle:()=>Nnt,Dom:()=>Bnt,Ellipse:()=>znt,Image:()=>Unt,Line:()=>jnt,Marker:()=>Wnt,Path:()=>Vnt,Polygon:()=>Hnt,Polyline:()=>Ynt,Rect:()=>qnt,Text:()=>Znt});var Ont=U(q());var OE={rect:"path",circle:"circle",line:"line",path:"path",marker:"path",text:"text",polyline:"polyline",polygon:"polygon",image:"image",ellipse:"ellipse",dom:"foreignObject"},rn={opacity:"opacity",fillStyle:"fill",fill:"fill",fillOpacity:"fill-opacity",strokeStyle:"stroke",strokeOpacity:"stroke-opacity",stroke:"stroke",x:"x",y:"y",r:"r",rx:"rx",ry:"ry",width:"width",height:"height",x1:"x1",x2:"x2",y1:"y1",y2:"y2",lineCap:"stroke-linecap",lineJoin:"stroke-linejoin",lineWidth:"stroke-width",lineDash:"stroke-dasharray",lineDashOffset:"stroke-dashoffset",miterLimit:"stroke-miterlimit",font:"font",fontSize:"font-size",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",fontFamily:"font-family",startArrow:"marker-start",endArrow:"marker-end",path:"d",class:"class",id:"id",style:"style",preserveAspectRatio:"preserveAspectRatio"};function oo(r){return document.createElementNS("http://www.w3.org/2000/svg",r)}function sO(r){var e=OE[r.type],t=r.getParent();if(!e)throw new Error("the type "+r.type+" is not supported by svg");var n=oo(e);if(r.get("id")&&(n.id=r.get("id")),r.set("el",n),r.set("attrs",{}),t){var i=t.get("el");i||(i=t.createDom(),t.set("el",i)),i.appendChild(n)}return n}function lO(r,e){var t=r.get("el"),n=(0,Ont.toArray)(t.children).sort(e),i=document.createDocumentFragment();n.forEach(function(a){i.appendChild(a)}),t.appendChild(i)}function Dnt(r,e){var t=r.parentNode,n=Array.from(t.childNodes).filter(function(s){return s.nodeType===1&&s.nodeName.toLowerCase()!=="defs"}),i=n[e],a=n.indexOf(r);if(i){if(a>e)t.insertBefore(r,i);else if(a0&&(n?"stroke"in i?this._setColor(t,"stroke",s):"strokeStyle"in i&&this._setColor(t,"stroke",l):this._setColor(t,"stroke",s||l),f&&h.setAttribute(rn.strokeOpacity,f),c&&h.setAttribute(rn.lineWidth,c))},e.prototype._setColor=function(t,n,i){var a=this.get("el");if(!i){a.setAttribute(rn[n],"none");return}if(i=i.trim(),/^[r,R,L,l]{1}[\s]*\(/.test(i)){var o=t.find("gradient",i);o||(o=t.addGradient(i)),a.setAttribute(rn[n],"url(#"+o+")")}else if(/^[p,P]{1}[\s]*\(/.test(i)){var o=t.find("pattern",i);o||(o=t.addPattern(i)),a.setAttribute(rn[n],"url(#"+o+")")}else a.setAttribute(rn[n],i)},e.prototype.shadow=function(t,n){var i=this.attr(),a=n||i,o=a.shadowOffsetX,s=a.shadowOffsetY,l=a.shadowBlur,u=a.shadowColor;(o||s||l||u)&&Pnt(this,t)},e.prototype.transform=function(t){var n=this.attr(),i=(t||n).matrix;i&&Eh(this)},e.prototype.isInShape=function(t,n){return this.isPointInPath(t,n)},e.prototype.isPointInPath=function(t,n){var i=this.get("el"),a=this.get("canvas"),o=a.get("el").getBoundingClientRect(),s=t+o.left,l=n+o.top,u=document.elementFromPoint(s,l);return!!(u&&u.isEqualNode(i))},e.prototype.getHitLineWidth=function(){var t=this.attrs,n=t.lineWidth,i=t.lineAppendWidth;return this.isStroke()?n+i:0},e}(qv),ba=G6t;var Rnt=U(q());var z6t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="circle",t.canFill=!0,t.canStroke=!0,t}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{x:0,y:0,r:0})},e.prototype.createPath=function(t,n){var i=this.attr(),a=this.get("el");(0,Rnt.each)(n||i,function(o,s){s==="x"||s==="y"?a.setAttribute("c"+s,o):rn[s]&&a.setAttribute(rn[s],o)})},e}(ba),Nnt=z6t;var Fnt=U(q());var U6t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="dom",t.canFill=!1,t.canStroke=!1,t}return e.prototype.createPath=function(t,n){var i=this.attr(),a=this.get("el");if((0,Fnt.each)(n||i,function(u,f){rn[f]&&a.setAttribute(rn[f],u)}),typeof i.html=="function"){var o=i.html.call(this,i);if(o instanceof Element||o instanceof HTMLDocument){for(var s=a.childNodes,l=s.length-1;l>=0;l--)a.removeChild(s[l]);a.appendChild(o)}else a.innerHTML=o}else a.innerHTML=i.html},e}(ba),Bnt=U6t;var Gnt=U(q());var j6t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="ellipse",t.canFill=!0,t.canStroke=!0,t}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{x:0,y:0,rx:0,ry:0})},e.prototype.createPath=function(t,n){var i=this.attr(),a=this.get("el");(0,Gnt.each)(n||i,function(o,s){s==="x"||s==="y"?a.setAttribute("c"+s,o):rn[s]&&a.setAttribute(rn[s],o)})},e}(ba),znt=j6t;var DE=U(q());var W6t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="image",t.canFill=!1,t.canStroke=!1,t}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{x:0,y:0,width:0,height:0})},e.prototype.createPath=function(t,n){var i=this,a=this.attr(),o=this.get("el");(0,DE.each)(n||a,function(s,l){l==="img"?i._setImage(a.img):rn[l]&&o.setAttribute(rn[l],s)})},e.prototype.setAttr=function(t,n){this.attrs[t]=n,t==="img"&&this._setImage(n)},e.prototype._setImage=function(t){var n=this.attr(),i=this.get("el");if((0,DE.isString)(t))i.setAttribute("href",t);else if(t instanceof window.Image)n.width||(i.setAttribute("width",t.width),this.attr("width",t.width)),n.height||(i.setAttribute("height",t.height),this.attr("height",t.height)),i.setAttribute("href",t.src);else if(t instanceof HTMLElement&&(0,DE.isString)(t.nodeName)&&t.nodeName.toUpperCase()==="CANVAS")i.setAttribute("href",t.toDataURL());else if(t instanceof ImageData){var a=document.createElement("canvas");a.setAttribute("width",""+t.width),a.setAttribute("height",""+t.height),a.getContext("2d").putImageData(t,0,0),n.width||(i.setAttribute("width",""+t.width),this.attr("width",t.width)),n.height||(i.setAttribute("height",""+t.height),this.attr("height",t.height)),i.setAttribute("href",a.toDataURL())}},e}(ba),Unt=W6t;var cO=U(q());var V6t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="line",t.canFill=!1,t.canStroke=!0,t}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{x1:0,y1:0,x2:0,y2:0,startArrow:!1,endArrow:!1})},e.prototype.createPath=function(t,n){var i=this.attr(),a=this.get("el");(0,cO.each)(n||i,function(o,s){if(s==="startArrow"||s==="endArrow")if(o){var l=(0,cO.isObject)(o)?t.addArrow(i,rn[s]):t.getDefaultArrow(i,rn[s]);a.setAttribute(rn[s],"url(#"+l+")")}else a.removeAttribute(rn[s]);else rn[s]&&a.setAttribute(rn[s],o)})},e.prototype.getTotalLength=function(){var t=this.attr(),n=t.x1,i=t.y1,a=t.x2,o=t.y2;return Vi.length(n,i,a,o)},e.prototype.getPoint=function(t){var n=this.attr(),i=n.x1,a=n.y1,o=n.x2,s=n.y2;return Vi.pointAt(i,a,o,s,t)},e}(ba),jnt=V6t;var dO=U(q());var hO={circle:function(r,e,t){return[["M",r,e],["m",-t,0],["a",t,t,0,1,0,t*2,0],["a",t,t,0,1,0,-t*2,0]]},square:function(r,e,t){return[["M",r-t,e-t],["L",r+t,e-t],["L",r+t,e+t],["L",r-t,e+t],["Z"]]},diamond:function(r,e,t){return[["M",r-t,e],["L",r,e-t],["L",r+t,e],["L",r,e+t],["Z"]]},triangle:function(r,e,t){var n=t*Math.sin(1/3*Math.PI);return[["M",r-t,e+n],["L",r,e-n],["L",r+t,e+n],["z"]]},triangleDown:function(r,e,t){var n=t*Math.sin(1/3*Math.PI);return[["M",r-t,e-n],["L",r+t,e-n],["L",r,e+n],["Z"]]}},BU={get:function(r){return hO[r]},register:function(r,e){hO[r]=e},remove:function(r){delete hO[r]},getAll:function(){return hO}};var H6t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="marker",t.canFill=!0,t.canStroke=!0,t}return e.prototype.createPath=function(t){var n=this.get("el");n.setAttribute("d",this._assembleMarker())},e.prototype._assembleMarker=function(){var t=this._getPath();return(0,dO.isArray)(t)?t.map(function(n){return n.join(" ")}).join(""):t},e.prototype._getPath=function(){var t=this.attr(),n=t.x,i=t.y,a=t.r||t.radius,o=t.symbol||"circle",s;return(0,dO.isFunction)(o)?s=o:s=BU.get(o),s?s(n,i,a):(console.warn(s+" symbol is not exist."),null)},e.symbolsFactory=BU,e}(ba),Wnt=H6t;var u1=U(q());var Y6t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="path",t.canFill=!0,t.canStroke=!0,t}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{startArrow:!1,endArrow:!1})},e.prototype.createPath=function(t,n){var i=this,a=this.attr(),o=this.get("el");(0,u1.each)(n||a,function(s,l){if(l==="path"&&(0,u1.isArray)(s))o.setAttribute("d",i._formatPath(s));else if(l==="startArrow"||l==="endArrow")if(s){var u=(0,u1.isObject)(s)?t.addArrow(a,rn[l]):t.getDefaultArrow(a,rn[l]);o.setAttribute(rn[l],"url(#"+u+")")}else o.removeAttribute(rn[l]);else rn[l]&&o.setAttribute(rn[l],s)})},e.prototype._formatPath=function(t){var n=t.map(function(i){return i.join(" ")}).join("");return~n.indexOf("NaN")?"":n},e.prototype.getTotalLength=function(){var t=this.get("el");return t?t.getTotalLength():null},e.prototype.getPoint=function(t){var n=this.get("el"),i=this.getTotalLength();if(i===0)return null;var a=n?n.getPointAtLength(t*i):null;return a?{x:a.x,y:a.y}:null},e}(ba),Vnt=Y6t;var pO=U(q());var X6t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="polygon",t.canFill=!0,t.canStroke=!0,t}return e.prototype.createPath=function(t,n){var i=this.attr(),a=this.get("el");(0,pO.each)(n||i,function(o,s){s==="points"&&(0,pO.isArray)(o)&&o.length>=2?a.setAttribute("points",o.map(function(l){return l[0]+","+l[1]}).join(" ")):rn[s]&&a.setAttribute(rn[s],o)})},e}(ba),Hnt=X6t;var Em=U(q());var q6t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="polyline",t.canFill=!0,t.canStroke=!0,t}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{startArrow:!1,endArrow:!1})},e.prototype.onAttrChange=function(t,n,i){r.prototype.onAttrChange.call(this,t,n,i),["points"].indexOf(t)!==-1&&this._resetCache()},e.prototype._resetCache=function(){this.set("totalLength",null),this.set("tCache",null)},e.prototype.createPath=function(t,n){var i=this.attr(),a=this.get("el");(0,Em.each)(n||i,function(o,s){s==="points"&&(0,Em.isArray)(o)&&o.length>=2?a.setAttribute("points",o.map(function(l){return l[0]+","+l[1]}).join(" ")):rn[s]&&a.setAttribute(rn[s],o)})},e.prototype.getTotalLength=function(){var t=this.attr().points,n=this.get("totalLength");return(0,Em.isNil)(n)?(this.set("totalLength",_b.length(t)),this.get("totalLength")):n},e.prototype.getPoint=function(t){var n=this.attr().points,i=this.get("tCache");i||(this._setTcache(),i=this.get("tCache"));var a,o;return(0,Em.each)(i,function(s,l){t>=s[0]&&t<=s[1]&&(a=(t-s[0])/(s[1]-s[0]),o=l)}),Vi.pointAt(n[o][0],n[o][1],n[o+1][0],n[o+1][1],a)},e.prototype._setTcache=function(){var t=this.attr().points;if(!(!t||t.length===0)){var n=this.getTotalLength();if(!(n<=0)){var i=0,a=[],o,s;(0,Em.each)(t,function(l,u){t[u+1]&&(o=[],o[0]=i/n,s=Vi.length(l[0],l[1],t[u+1][0],t[u+1][1]),i+=s,o[1]=i/n,a.push(o))}),this.set("tCache",a)}}},e.prototype.getStartTangent=function(){var t=this.attr().points,n=[];return n.push([t[1][0],t[1][1]]),n.push([t[0][0],t[0][1]]),n},e.prototype.getEndTangent=function(){var t=this.attr().points,n=t.length-1,i=[];return i.push([t[n-1][0],t[n-1][1]]),i.push([t[n][0],t[n][1]]),i},e}(ba),Ynt=q6t;var mO=U(q());var vO=U(q());function Xnt(r){var e=0,t=0,n=0,i=0;return(0,vO.isArray)(r)?r.length===1?e=t=n=i=r[0]:r.length===2?(e=n=r[0],t=i=r[1]):r.length===3?(e=r[0],t=i=r[1],n=r[2]):(e=r[0],t=r[1],n=r[2],i=r[3]):e=t=n=i=r,{r1:e,r2:t,r3:n,r4:i}}var K6t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="rect",t.canFill=!0,t.canStroke=!0,t}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{x:0,y:0,width:0,height:0,radius:0})},e.prototype.createPath=function(t,n){var i=this,a=this.attr(),o=this.get("el"),s=!1,l=["x","y","width","height","radius"];(0,mO.each)(n||a,function(u,f){l.indexOf(f)!==-1&&!s?(o.setAttribute("d",i._assembleRect(a)),s=!0):l.indexOf(f)===-1&&rn[f]&&o.setAttribute(rn[f],u)})},e.prototype._assembleRect=function(t){var n=t.x,i=t.y,a=t.width,o=t.height,s=t.radius;if(!s)return"M "+n+","+i+" l "+a+",0 l 0,"+o+" l"+-a+" 0 z";var l=Xnt(s);(0,mO.isArray)(s)?s.length===1?l.r1=l.r2=l.r3=l.r4=s[0]:s.length===2?(l.r1=l.r3=s[0],l.r2=l.r4=s[1]):s.length===3?(l.r1=s[0],l.r2=l.r4=s[1],l.r3=s[2]):(l.r1=s[0],l.r2=s[1],l.r3=s[2],l.r4=s[3]):l.r1=l.r2=l.r3=l.r4=s;var u=[["M "+(n+l.r1)+","+i],["l "+(a-l.r1-l.r2)+",0"],["a "+l.r2+","+l.r2+",0,0,1,"+l.r2+","+l.r2],["l 0,"+(o-l.r2-l.r3)],["a "+l.r3+","+l.r3+",0,0,1,"+-l.r3+","+l.r3],["l "+(l.r3+l.r4-a)+",0"],["a "+l.r4+","+l.r4+",0,0,1,"+-l.r4+","+-l.r4],["l 0,"+(l.r4+l.r1-o)],["a "+l.r1+","+l.r1+",0,0,1,"+l.r1+","+-l.r1],["z"]];return u.join(" ")},e}(ba),qnt=K6t;var GU=U(q());var Knt=.3,Z6t={top:"before-edge",middle:"central",bottom:"after-edge",alphabetic:"baseline",hanging:"hanging"},$6t={top:"text-before-edge",middle:"central",bottom:"text-after-edge",alphabetic:"alphabetic",hanging:"hanging"},Q6t={left:"left",start:"left",center:"middle",right:"end",end:"end"},J6t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="text",t.canFill=!0,t.canStroke=!0,t}return e.prototype.getDefaultAttrs=function(){var t=r.prototype.getDefaultAttrs.call(this);return E(E({},t),{x:0,y:0,text:null,fontSize:12,fontFamily:"sans-serif",fontStyle:"normal",fontWeight:"normal",fontVariant:"normal",textAlign:"start",textBaseline:"bottom"})},e.prototype.createPath=function(t,n){var i=this,a=this.attr(),o=this.get("el");this._setFont(),(0,GU.each)(n||a,function(s,l){l==="text"?i._setText(""+s):l==="matrix"&&s?Eh(i):rn[l]&&o.setAttribute(rn[l],s)}),o.setAttribute("paint-order","stroke"),o.setAttribute("style","stroke-linecap:butt; stroke-linejoin:miter;")},e.prototype._setFont=function(){var t=this.get("el"),n=this.attr(),i=n.textBaseline,a=n.textAlign,o=u2();o&&o.name==="firefox"?t.setAttribute("dominant-baseline",$6t[i]||"alphabetic"):t.setAttribute("alignment-baseline",Z6t[i]||"baseline"),t.setAttribute("text-anchor",Q6t[a]||"left")},e.prototype._setText=function(t){var n=this.get("el"),i=this.attr(),a=i.x,o=i.textBaseline,s=o===void 0?"bottom":o;if(!t)n.innerHTML="";else if(~t.indexOf(` +`)){var l=t.split(` +`),u=l.length-1,f="";(0,GU.each)(l,function(c,h){h===0?s==="alphabetic"?f+=''+c+"":s==="top"?f+=''+c+"":s==="middle"?f+=''+c+"":s==="bottom"?f+=''+c+"":s==="hanging"&&(f+=''+c+""):f+=''+c+""}),n.innerHTML=f}else n.innerHTML=t},e}(ba),Znt=J6t;var iit=U(q());var Am=U(q());var tVt=/^l\s*\(\s*([\d.]+)\s*\)\s*(.*)/i,eVt=/^r\s*\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*\)\s*(.*)/i,rVt=/[\d.]+:(#[^\s]+|[^)]+\))/gi;function $nt(r){var e=r.match(rVt);if(!e)return"";var t="";return e.sort(function(n,i){return n=n.split(":"),i=i.split(":"),Number(n[0])-Number(i[0])}),(0,Am.each)(e,function(n){n=n.split(":"),t+=''}),t}function nVt(r,e){var t=tVt.exec(r),n=(0,Am.mod)((0,Am.toRadian)(parseFloat(t[1])),Math.PI*2),i=t[2],a,o;n>=0&&n<.5*Math.PI?(a={x:0,y:0},o={x:1,y:1}):.5*Math.PI<=n&&n`;t.innerHTML=n},r}(),Jnt=lVt;var gO=U(q());var uVt=function(){function r(e,t){this.cfg={};var n=oo("marker"),i=(0,gO.uniqueId)("marker_");n.setAttribute("id",i);var a=oo("path");a.setAttribute("stroke",e.stroke||"none"),a.setAttribute("fill",e.fill||"none"),n.appendChild(a),n.setAttribute("overflow","visible"),n.setAttribute("orient","auto-start-reverse"),this.el=n,this.child=a,this.id=i;var o=e[t==="marker-start"?"startArrow":"endArrow"];return this.stroke=e.stroke||"#000",o===!0?this._setDefaultPath(t,a):(this.cfg=o,this._setMarker(e.lineWidth,a)),this}return r.prototype.match=function(){return!1},r.prototype._setDefaultPath=function(e,t){var n=this.el;t.setAttribute("d","M0,0 L"+10*Math.cos(Math.PI/6)+",5 L0,10"),n.setAttribute("refX",""+10*Math.cos(Math.PI/6)),n.setAttribute("refY",""+5)},r.prototype._setMarker=function(e,t){var n=this.el,i=this.cfg.path,a=this.cfg.d;(0,gO.isArray)(i)&&(i=i.map(function(o){return o.join(" ")}).join("")),t.setAttribute("d",i),n.appendChild(t),a&&n.setAttribute("refX",""+a/e)},r.prototype.update=function(e){var t=this.child;t.attr?t.attr("fill",e):t.setAttribute("fill",e)},r}(),zU=uVt;var tit=U(q());var fVt=function(){function r(e){this.type="clip",this.cfg={};var t=oo("clipPath");this.el=t,this.id=(0,tit.uniqueId)("clip_"),t.id=this.id;var n=e.cfg.el;return t.appendChild(n),this.cfg=e,this}return r.prototype.match=function(){return!1},r.prototype.remove=function(){var e=this.el;e.parentNode.removeChild(e)},r}(),eit=fVt;var rit=U(q());var cVt=/^p\s*\(\s*([axyn])\s*\)\s*(.*)/i,hVt=function(){function r(e){this.cfg={};var t=oo("pattern");t.setAttribute("patternUnits","userSpaceOnUse");var n=oo("image");t.appendChild(n);var i=(0,rit.uniqueId)("pattern_");t.id=i,this.el=t,this.id=i,this.cfg=e;var a=cVt.exec(e),o=a[2];n.setAttribute("href",o);var s=new Image;o.match(/^data:/i)||(s.crossOrigin="Anonymous"),s.src=o;function l(){t.setAttribute("width",""+s.width),t.setAttribute("height",""+s.height)}return s.complete?l():(s.onload=l,s.src=s.src),this}return r.prototype.match=function(e,t){return this.cfg===t},r}(),nit=hVt;var dVt=function(){function r(e){var t=oo("defs"),n=(0,iit.uniqueId)("defs_");t.id=n,e.appendChild(t),this.children=[],this.defaultArrow={},this.el=t,this.canvas=e}return r.prototype.find=function(e,t){for(var n=this.children,i=null,a=0;a0&&(d[0][0]="L")),a=a.concat(d)}),a.push(["Z"])}return a}function Mm(r,e,t,n,i){for(var a=gn(r,e,!e,"lineWidth"),o=r.connectNulls,s=r.isInCircle,l=r.points,u=r.showSinglePoint,f=xm(l,o,u),c=[],h=0,d=f.length;ho&&(o=l),l=n[0]}));for(var p=this.scales[h],v=0,m=t;ve&&(t=t?e/(1+n/t):0,n=e-t),i+a>e&&(i=i?e/(1+a/i):0,a=e-i),[t||0,n||0,i||0,a||0]}function xO(r,e,t){var n=[];if(t.isRect){var i=t.isTransposed?{x:t.start.x,y:e[0].y}:{x:e[0].x,y:t.start.y},a=t.isTransposed?{x:t.end.x,y:e[2].y}:{x:e[3].x,y:t.end.y},o=(0,Tm.get)(r,["background","style","radius"]);if(o){var s=t.isTransposed?Math.abs(e[0].y-e[2].y):e[2].x-e[1].x,l=t.isTransposed?t.getWidth():t.getHeight(),u=cit(o,Math.min(s,l)),f=u[0],c=u[1],h=u[2],d=u[3];n.push(["M",i.x,a.y+f]),f!==0&&n.push(["A",f,f,0,0,1,i.x+f,a.y]),n.push(["L",a.x-c,a.y]),c!==0&&n.push(["A",c,c,0,0,1,a.x,a.y+c]),n.push(["L",a.x,i.y-h]),h!==0&&n.push(["A",h,h,0,0,1,a.x-h,i.y]),n.push(["L",i.x+d,i.y]),d!==0&&n.push(["A",d,d,0,0,1,i.x,i.y-d])}else n.push(["M",i.x,i.y]),n.push(["L",a.x,i.y]),n.push(["L",a.x,a.y]),n.push(["L",i.x,a.y]),n.push(["L",i.x,i.y]);n.push(["z"])}if(t.isPolar){var p=t.getCenter(),v=sp(r,t),m=v.startAngle,g=v.endAngle;if(t.type!=="theta"&&!t.isTransposed)n=yu(p.x,p.y,t.getRadius(),m,g);else{var x=function(C){return Math.pow(C,2)},f=Math.sqrt(x(p.x-e[0].x)+x(p.y-e[0].y)),c=Math.sqrt(x(p.x-e[2].x)+x(p.y-e[2].y));n=yu(p.x,p.y,f,t.startAngle,t.endAngle,c)}}return n}function hit(r,e,t){var n=t.getWidth(),i=t.getHeight(),a=t.type==="rect",o=[],s=(r[2].x-r[1].x)/2,l=t.isTransposed?s*i/n:s*n/i;return e==="round"?(a?(o.push(["M",r[0].x,r[0].y+l]),o.push(["L",r[1].x,r[1].y-l]),o.push(["A",s,s,0,0,1,r[2].x,r[2].y-l]),o.push(["L",r[3].x,r[3].y+l]),o.push(["A",s,s,0,0,1,r[0].x,r[0].y+l])):(o.push(["M",r[0].x,r[0].y]),o.push(["L",r[1].x,r[1].y]),o.push(["A",s,s,0,0,1,r[2].x,r[2].y]),o.push(["L",r[3].x,r[3].y]),o.push(["A",s,s,0,0,1,r[0].x,r[0].y])),o.push(["z"])):o=kE(r),o}function bO(r,e,t){var n=[];return(0,Tm.isNil)(e)?t?n.push(["M",r[0].x,r[0].y],["L",r[1].x,r[1].y],["L",(r[2].x+r[3].x)/2,(r[2].y+r[3].y)/2],["Z"]):n.push(["M",r[0].x,r[0].y],["L",r[1].x,r[1].y],["L",r[2].x,r[2].y],["L",r[3].x,r[3].y],["Z"]):n.push(["M",r[0].x,r[0].y],["L",r[1].x,r[1].y],["L",e[1].x,e[1].y],["L",e[0].x,e[0].y],["Z"]),n}function RE(r,e){return[e,r]}function dit(r,e,t){var n,i,a,o,s,l,u,f=mn([],r,!0),c=f[0],h=f[1],d=f[2],p=f[3],v=typeof t=="number"?Array(4).fill(t):t,m=v[0],g=v[1],x=v[2],b=v[3];e.isTransposed&&(n=RE(h,p),h=n[0],p=n[1],i=[b,m,g,x],m=i[0],g=i[1],x=i[2],b=i[3]),e.isReflect("y")&&(a=RE(c,h),c=a[0],h=a[1],o=RE(d,p),d=o[0],p=o[1]),e.isReflect("x")&&(s=RE(c,p),c=s[0],p=s[1],l=RE(h,d),h=l[0],d=l[1]);var S=[],C=function(w){return Math.abs(w)};return u=cit([m,g,x,b],Math.min(C(p.x-c.x),C(h.y-c.y))).map(function(w){return C(w)}),m=u[0],g=u[1],x=u[2],b=u[3],c.yo&&(i=o)}return i}function SVt(r,e){if(e){var t=(0,tf.flatten)(r),n=(0,tf.valuesOfKey)(t,e);return n.length}return r.length}function d1(r){var e=r.theme,t=r.coordinate,n=r.getXScale(),i=n.values,a=r.beforeMappingData,o=i.length,s=gh(r.coordinate),l=r.intervalPadding,u=r.dodgePadding,f=r.maxColumnWidth||e.maxColumnWidth,c=r.minColumnWidth||e.minColumnWidth,h=r.columnWidthRatio||e.columnWidthRatio,d=r.multiplePieWidthRatio||e.multiplePieWidthRatio,p=r.roseWidthRatio||e.roseWidthRatio;if(n.isLinear&&i.length>1){i.sort();var v=_Vt(i,n);o=(n.max-n.min)/v,i.length>o&&(o=i.length)}var m=n.range,g=1/o,x=1;if(t.isPolar?t.isTransposed&&o>1?x=d:x=p:(n.isLinear&&(g*=m[1]-m[0]),x=h),!(0,tf.isNil)(l)&&l>=0){var b=l/s;g=(1-(o-1)*b)/o}else g*=x;if(r.getAdjust("dodge")){var S=r.getAdjust("dodge"),C=S.dodgeBy,w=SVt(a,C);if(!(0,tf.isNil)(u)&&u>=0){var A=u/s;g=(g-A*(w-1))/w}else!(0,tf.isNil)(l)&&l>=0&&(g*=x),g=g/w;g=g>=0?g:0}if(!(0,tf.isNil)(f)&&f>=0){var I=f/s;g>I&&(g=I)}if(!(0,tf.isNil)(c)&&c>=0){var P=c/s;g0&&!(0,jU.get)(n,[i,"min"])&&t.change({min:0}),o<=0&&!(0,jU.get)(n,[i,"max"])&&t.change({max:0}))}},e.prototype.getDrawCfg=function(t){var n=r.prototype.getDrawCfg.call(this,t);return n.background=this.background,n},e}(Uo),pit=CVt;var wVt=function(r){H(e,r);function e(t){var n=r.call(this,t)||this;n.type="line";var i=t.sortable,a=i===void 0?!1:i;return n.sortable=a,n}return e}(f1),vit=wVt;var git=U(q());var _O=["circle","square","bowtie","diamond","hexagon","triangle","triangle-down"],mit=["cross","tick","plus","hyphen","line"];function p1(r,e,t,n,i){var a=gn(e,i,!i,"r"),o=r.parsePoints(e.points),s=o[0];if(e.isStack)s=o[1];else if(o.length>1){for(var l=t.addGroup(),u=0,f=o;u2?"weight":"normal",a;if(r.isInCircle){var o={x:0,y:1};return i==="normal"?a=OVt(n[0],n[1],o):(t.fill=t.stroke,a=DVt(n,o)),a=this.parsePath(a),e.addShape("path",{attrs:E(E({},t),{path:a})})}else{if(i==="normal")return n=this.parsePoints(n),a=bL((n[1].x+n[0].x)/2,n[0].y,Math.abs(n[1].x-n[0].x)/2,Math.PI,Math.PI*2),e.addShape("path",{attrs:E(E({},t),{path:a})});var s=FE(n[1],n[3]),l=FE(n[2],n[0]);return a=[["M",n[0].x,n[0].y],["L",n[1].x,n[1].y],s,["L",n[3].x,n[3].y],["L",n[2].x,n[2].y],l,["Z"]],a=this.parsePath(a),t.fill=t.stroke,e.addShape("path",{attrs:E(E({},t),{path:a})})}},getMarker:function(r){return{symbol:"circle",style:{r:4.5,fill:r.color}}}});function PVt(r,e){var t=FE(r,e),n=[["M",r.x,r.y]];return n.push(t),n}or("edge","smooth",{draw:function(r,e){var t=gn(r,!0,!1,"lineWidth"),n=r.points,i=this.parsePath(PVt(n[0],n[1]));return e.addShape("path",{attrs:E(E({},t),{path:i})})},getMarker:function(r){return{symbol:"circle",style:{r:4.5,fill:r.color}}}});var wit=U(q());var CO=1/3;function kVt(r,e){var t=[];t.push({x:r.x,y:r.y*(1-CO)+e.y*CO}),t.push({x:e.x,y:r.y*(1-CO)+e.y*CO}),t.push(e);var n=[["M",r.x,r.y]];return(0,wit.each)(t,function(i){n.push(["L",i.x,i.y])}),n}or("edge","vhv",{draw:function(r,e){var t=gn(r,!0,!1,"lineWidth"),n=r.points,i=this.parsePath(kVt(n[0],n[1]));return e.addShape("path",{attrs:E(E({},t),{path:i})})},getMarker:function(r){return{symbol:"circle",style:{r:4.5,fill:r.color}}}});or("interval","funnel",{getPoints:function(r){return r.size=r.size*2,h1(r)},draw:function(r,e){var t=gn(r,!1,!0),n=this.parsePath(bO(r.points,r.nextPoints,!1)),i=e.addShape("path",{attrs:E(E({},t),{path:n}),name:"interval"});return i},getMarker:function(r){var e=r.color;return{symbol:"square",style:{r:4,fill:e}}}});or("interval","hollow-rect",{draw:function(r,e){var t=gn(r,!0,!1),n=e,i=r==null?void 0:r.background;if(i){n=e.addGroup();var a=$L(r),o=xO(r,this.parsePoints(r.points),this.coordinate);n.addShape("path",{attrs:E(E({},a),{path:o}),zIndex:-1,name:Jb})}var s=this.parsePath(kE(r.points)),l=n.addShape("path",{attrs:E(E({},t),{path:s}),name:"interval"});return i?n:l},getMarker:function(r){var e=r.color,t=r.isInPolar;return t?{symbol:"circle",style:{r:4.5,stroke:e,fill:null}}:{symbol:"square",style:{r:4,stroke:e,fill:null}}}});var WU=U(q());function RVt(r){var e=r.x,t=r.y,n=r.y0;return(0,WU.isArray)(t)?t.map(function(i,a){return{x:(0,WU.isArray)(e)?e[a]:e,y:i}}):[{x:e,y:n},{x:e,y:t}]}or("interval","line",{getPoints:function(r){return RVt(r)},draw:function(r,e){var t=gn(r,!0,!1,"lineWidth"),n=bo(E({},t),["fill"]),i=this.parsePath(kE(r.points,!1)),a=e.addShape("path",{attrs:E(E({},n),{path:i}),name:"interval"});return a},getMarker:function(r){var e=r.color;return{symbol:function(t,n,i){return[["M",t,n-i],["L",t,n+i]]},style:{r:5,stroke:e}}}});or("interval","pyramid",{getPoints:function(r){return r.size=r.size*2,h1(r)},draw:function(r,e){var t=gn(r,!1,!0),n=this.parsePath(bO(r.points,r.nextPoints,!0)),i=e.addShape("path",{attrs:E(E({},t),{path:n}),name:"interval"});return i},getMarker:function(r){var e=r.color;return{symbol:"square",style:{r:4,fill:e}}}});var Eit=U(q());function NVt(r){var e=r.x,t=r.y,n=r.y0,i=r.size,a,o;(0,Eit.isArray)(t)?(a=t[0],o=t[1]):(a=n,o=t);var s=e+i/2,l=e-i/2;return[{x:e,y:a},{x:e,y:o},{x:l,y:a},{x:s,y:a},{x:l,y:o},{x:s,y:o}]}function FVt(r){return[["M",r[0].x,r[0].y],["L",r[1].x,r[1].y],["M",r[2].x,r[2].y],["L",r[3].x,r[3].y],["M",r[4].x,r[4].y],["L",r[5].x,r[5].y]]}or("interval","tick",{getPoints:function(r){return NVt(r)},draw:function(r,e){var t=gn(r,!0,!1),n=this.parsePath(FVt(r.points)),i=e.addShape("path",{attrs:E(E({},t),{path:n}),name:"interval"});return i},getMarker:function(r){var e=r.color;return{symbol:function(t,n,i){return[["M",t-i/2,n-i],["L",t+i/2,n-i],["M",t,n-i],["L",t,n+i],["M",t-i/2,n+i],["L",t+i/2,n+i]]},style:{r:5,stroke:e}}}});var wO=U(q());var BVt=function(r,e,t){var n=r.x,i=r.y,a=e.x,o=e.y,s;switch(t){case"hv":s=[{x:a,y:i}];break;case"vh":s=[{x:n,y:o}];break;case"hvh":var l=(a+n)/2;s=[{x:l,y:i},{x:l,y:o}];break;case"vhv":var u=(i+o)/2;s=[{x:n,y:u},{x:a,y:u}];break;default:break}return s};function GVt(r,e){var t=[];return(0,wO.each)(r,function(n,i){var a=r[i+1];if(t.push(n),a){var o=BVt(n,a,e);t=t.concat(o)}}),t}function zVt(r){return r.map(function(e,t){return t===0?["M",e.x,e.y]:["L",e.x,e.y]})}function UVt(r,e){var t=xm(r.points,r.connectNulls,r.showSinglePoint),n=[];return(0,wO.each)(t,function(i){var a=GVt(i,e);n=n.concat(zVt(a))}),E(E({},gn(r,!0,!1,"lineWidth")),{path:n})}(0,wO.each)(["hv","vh","hvh","vhv"],function(r){or("line",r,{draw:function(e,t){var n=UVt(e,r),i=t.addShape({type:"path",attrs:n,name:"line"});return i},getMarker:function(e){return QL(e,r)}})});var Ait=U(q());(0,Ait.each)(mit,function(r){or("point",r,{draw:function(e,t){return p1(this,e,t,r,!0)},getMarker:function(e){var t=e.color;return{symbol:Ju[r],style:{r:4.5,stroke:t,fill:null}}}})});or("point","image",{draw:function(r,e){var t=gn(r,!1,!1,"r").r,n=this.parsePoints(r.points),i=n[0];if(r.isStack)i=n[1];else if(n.length>1){for(var a=e.addGroup(),o=0,s=n;o1?e[1]:t,a=e.length>3?e[3]:n,o=e.length>2?e[2]:i;return{min:t,max:n,min1:i,max1:a,median:o}}function Iit(r,e,t){var n=t/2,i;if((0,BE.isArray)(e)){var a=Tit(e),o=a.min,s=a.max,l=a.median,u=a.min1,f=a.max1,c=r-n,h=r+n;i=[[c,s],[h,s],[r,s],[r,f],[c,u],[c,f],[h,f],[h,u],[r,u],[r,o],[c,o],[h,o],[c,l],[h,l]]}else{e=(0,BE.isNil)(e)?.5:e;var d=Tit(r),o=d.min,s=d.max,l=d.median,u=d.min1,f=d.max1,p=e-n,v=e+n;i=[[o,p],[o,v],[o,e],[u,e],[u,p],[u,v],[f,v],[f,p],[f,e],[s,e],[s,p],[s,v],[l,p],[l,v]]}return i.map(function(m){return{x:m[0],y:m[1]}})}function jVt(r){return[["M",r[0].x,r[0].y],["L",r[1].x,r[1].y],["M",r[2].x,r[2].y],["L",r[3].x,r[3].y],["M",r[4].x,r[4].y],["L",r[5].x,r[5].y],["L",r[6].x,r[6].y],["L",r[7].x,r[7].y],["L",r[4].x,r[4].y],["Z"],["M",r[8].x,r[8].y],["L",r[9].x,r[9].y],["M",r[10].x,r[10].y],["L",r[11].x,r[11].y],["M",r[12].x,r[12].y],["L",r[13].x,r[13].y]]}or("schema","box",{getPoints:function(r){var e=r.x,t=r.y,n=r.size;return Iit(e,t,n)},draw:function(r,e){var t=gn(r,!0,!1),n=this.parsePath(jVt(r.points)),i=e.addShape("path",{attrs:E(E({},t),{path:n,name:"schema"})});return i},getMarker:function(r){var e=r.color;return{symbol:function(t,n,i){var a=[n-6,n-3,n,n+3,n+6],o=Iit(t,a,i);return[["M",o[0].x+1,o[0].y],["L",o[1].x-1,o[1].y],["M",o[2].x,o[2].y],["L",o[3].x,o[3].y],["M",o[4].x,o[4].y],["L",o[5].x,o[5].y],["L",o[6].x,o[6].y],["L",o[7].x,o[7].y],["L",o[4].x,o[4].y],["Z"],["M",o[8].x,o[8].y],["L",o[9].x,o[9].y],["M",o[10].x+1,o[10].y],["L",o[11].x-1,o[11].y],["M",o[12].x,o[12].y],["L",o[13].x,o[13].y]]},style:{r:6,lineWidth:1,stroke:e}}}});var Lit=U(q());function WVt(r){var e=(0,Lit.isArray)(r)?r:[r],t=e.sort(function(n,i){return i-n});return ert(t,4,t[t.length-1])}function Oit(r,e,t){var n=WVt(e);return[{x:r,y:n[0]},{x:r,y:n[1]},{x:r-t/2,y:n[2]},{x:r-t/2,y:n[1]},{x:r+t/2,y:n[1]},{x:r+t/2,y:n[2]},{x:r,y:n[2]},{x:r,y:n[3]}]}function VVt(r){return[["M",r[0].x,r[0].y],["L",r[1].x,r[1].y],["M",r[2].x,r[2].y],["L",r[3].x,r[3].y],["L",r[4].x,r[4].y],["L",r[5].x,r[5].y],["Z"],["M",r[6].x,r[6].y],["L",r[7].x,r[7].y]]}or("schema","candle",{getPoints:function(r){var e=r.x,t=r.y,n=r.size;return Oit(e,t,n)},draw:function(r,e){var t=gn(r,!0,!0),n=this.parsePath(VVt(r.points)),i=e.addShape("path",{attrs:E(E({},t),{path:n,name:"schema"})});return i},getMarker:function(r){var e=r.color;return{symbol:function(t,n,i){var a=[n+7.5,n+3,n-3,n-7.5],o=Oit(t,a,i);return[["M",o[0].x,o[0].y],["L",o[1].x,o[1].y],["M",o[2].x,o[2].y],["L",o[3].x,o[3].y],["L",o[4].x,o[4].y],["L",o[5].x,o[5].y],["Z"],["M",o[6].x,o[6].y],["L",o[7].x,o[7].y]]},style:{lineWidth:1,stroke:e,fill:e,r:6}}}});var EO=U(q());function HVt(r,e){var t=Math.abs(r[0].x-r[2].x),n=Math.abs(r[0].y-r[2].y),i=Math.min(t,n);e&&(i=(0,EO.clamp)(e,0,Math.min(t,n))),i=i/2;var a=(r[0].x+r[2].x)/2,o=(r[0].y+r[2].y)/2;return{x:a-i,y:o-i,width:i*2,height:i*2}}or("polygon","square",{draw:function(r,e){if(!(0,EO.isEmpty)(r.points)){var t=gn(r,!0,!0),n=this.parsePoints(r.points);return e.addShape("rect",{attrs:E(E({},t),HVt(n,r.size)),name:"polygon"})}},getMarker:function(r){var e=r.color;return{symbol:"square",style:{r:4,fill:e}}}});or("violin","smooth",{draw:function(r,e){var t=gn(r,!0,!0),n=this.parsePath(ZL(r.points));return e.addShape("path",{attrs:E(E({},t),{path:n})})},getMarker:function(r){var e=r.color;return{symbol:"circle",style:{stroke:null,r:4,fill:e}}}});or("violin","hollow",{draw:function(r,e){var t=gn(r,!0,!1),n=this.parsePath(KL(r.points));return e.addShape("path",{attrs:E(E({},t),{path:n})})},getMarker:function(r){var e=r.color;return{symbol:"circle",style:{r:4,fill:null,stroke:e}}}});or("violin","hollow-smooth",{draw:function(r,e){var t=gn(r,!0,!1),n=this.parsePath(ZL(r.points));return e.addShape("path",{attrs:E(E({},t),{path:n})})},getMarker:function(r){var e=r.color;return{symbol:"circle",style:{r:4,fill:null,stroke:e}}}});var Xs=U(q());var YVt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getLabelValueDir=function(t){var n="y",i=t.points;return i[0][n]<=i[2][n]?1:-1},e.prototype.getLabelOffsetPoint=function(t,n,i,a){var o,s=r.prototype.getLabelOffsetPoint.call(this,t,n,i),l=this.getCoordinate(),u=l.isTransposed,f=u?"x":"y",c=this.getLabelValueDir(t.mappingData);return s=E(E({},s),(o={},o[f]=s[f]*c,o)),l.isReflect("x")&&(s=E(E({},s),{x:s.x*-1})),l.isReflect("y")&&(s=E(E({},s),{y:s.y*-1})),s},e.prototype.getThemedLabelCfg=function(t){var n=this.geometry,i=this.getDefaultLabelCfg(),a=n.theme;return(0,Xs.deepMix)({},i,a.labels,t.position==="middle"?{offset:0}:{},t)},e.prototype.setLabelPosition=function(t,n,i,a){var o=this.getCoordinate(),s=o.isTransposed,l=n.points,u=o.convert(l[0]),f=o.convert(l[2]),c=this.getLabelValueDir(n),h,d,p,v,m=(0,Xs.isArray)(n.shape)?n.shape[0]:n.shape;if(m==="funnel"||m==="pyramid"){var g=(0,Xs.get)(n,"nextPoints"),x=(0,Xs.get)(n,"points");if(g){var b=o.convert(x[0]),S=o.convert(x[1]),C=o.convert(g[0]),w=o.convert(g[1]);s?(h=Math.min(C.y,b.y),p=Math.max(C.y,b.y),d=(S.x+w.x)/2,v=(b.x+C.x)/2):(h=Math.min((S.y+w.y)/2,(b.y+C.y)/2),p=Math.max((S.y+w.y)/2,(b.y+C.y)/2),d=w.x,v=b.x)}else h=Math.min(f.y,u.y),p=Math.max(f.y,u.y),d=f.x,v=u.x}else h=Math.min(f.y,u.y),p=Math.max(f.y,u.y),d=f.x,v=u.x;switch(a){case"right":t.x=d,t.y=(h+p)/2,t.textAlign=(0,Xs.get)(t,"textAlign",c>0?"left":"right");break;case"left":t.x=v,t.y=(h+p)/2,t.textAlign=(0,Xs.get)(t,"textAlign",c>0?"left":"right");break;case"bottom":s&&(t.x=(d+v)/2),t.y=p,t.textAlign=(0,Xs.get)(t,"textAlign","center"),t.textBaseline=(0,Xs.get)(t,"textBaseline",c>0?"bottom":"top");break;case"middle":s&&(t.x=(d+v)/2),t.y=(h+p)/2,t.textAlign=(0,Xs.get)(t,"textAlign","center"),t.textBaseline=(0,Xs.get)(t,"textBaseline","middle");break;case"top":s&&(t.x=(d+v)/2),t.y=h,t.textAlign=(0,Xs.get)(t,"textAlign","center"),t.textBaseline=(0,Xs.get)(t,"textBaseline",c>0?"bottom":"top");break;default:break}},e}(Sh),Dit=YVt;var a0=U(q());var qs=U(q());var AO=Math.PI/2,XVt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getLabelOffset=function(t){var n=this.getCoordinate(),i=0;if((0,qs.isNumber)(t))i=t;else if((0,qs.isString)(t)&&t.indexOf("%")!==-1){var a=n.getRadius();n.innerRadius>0&&(a=a*(1-n.innerRadius)),i=parseFloat(t)*.01*a}return i},e.prototype.getLabelItems=function(t){var n=r.prototype.getLabelItems.call(this,t),i=this.geometry.getYScale();return(0,qs.map)(n,function(a){if(a&&i){var o=i.scale((0,qs.get)(a.data,i.field));return E(E({},a),{percent:o})}return a})},e.prototype.getLabelAlign=function(t){var n=this.getCoordinate(),i;if(t.labelEmit)i=t.angle<=Math.PI/2&&t.angle>=-Math.PI/2?"left":"right";else if(!n.isTransposed)i="center";else{var a=n.getCenter(),o=t.offset;Math.abs(t.x-a.x)<1?i="center":t.angle>Math.PI||t.angle<=0?i=o>0?"left":"right":i=o>0?"right":"left"}return i},e.prototype.getLabelPoint=function(t,n,i){var a=1,o,s=t.content[i];this.isToMiddle(n)?o=this.getMiddlePoint(n.points):(t.content.length===1&&i===0?i=1:i===0&&(a=-1),o=this.getArcPoint(n,i));var l=t.offset*a,u=this.getPointAngle(o),f=t.labelEmit,c=this.getCirclePoint(u,l,o,f);return c.r===0?c.content="":(c.content=s,c.angle=u,c.color=n.color),c.rotate=t.autoRotate?this.getLabelRotate(u,l,f):t.rotate,c.start={x:o.x,y:o.y},c},e.prototype.getArcPoint=function(t,n){return n===void 0&&(n=0),!(0,qs.isArray)(t.x)&&!(0,qs.isArray)(t.y)?{x:t.x,y:t.y}:{x:(0,qs.isArray)(t.x)?t.x[n]:t.x,y:(0,qs.isArray)(t.y)?t.y[n]:t.y}},e.prototype.getPointAngle=function(t){return yh(this.getCoordinate(),t)},e.prototype.getCirclePoint=function(t,n,i,a){var o=this.getCoordinate(),s=o.getCenter(),l=gm(o,i);if(l===0)return E(E({},s),{r:l});var u=t;if(o.isTransposed&&l>n&&!a){var f=Math.asin(n/(2*l));u=t+f*2}else l=l+n;return{x:s.x+l*Math.cos(u),y:s.y+l*Math.sin(u),r:l}},e.prototype.getLabelRotate=function(t,n,i){var a=t+AO;return i&&(a-=AO),a&&(a>AO?a=a-Math.PI:a<-AO&&(a=a+Math.PI)),a},e.prototype.getMiddlePoint=function(t){var n=this.getCoordinate(),i=t.length,a={x:0,y:0};return(0,qs.each)(t,function(o){a.x+=o.x,a.y+=o.y}),a.x/=i,a.y/=i,a=n.convert(a),a},e.prototype.isToMiddle=function(t){return t.x.length>2},e}(Sh),MO=XVt;var qVt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.defaultLayout="distribute",t}return e.prototype.getDefaultLabelCfg=function(t,n){var i=r.prototype.getDefaultLabelCfg.call(this,t,n);return(0,a0.deepMix)({},i,(0,a0.get)(this.geometry.theme,"pieLabels",{}))},e.prototype.getLabelOffset=function(t){return r.prototype.getLabelOffset.call(this,t)||0},e.prototype.getLabelRotate=function(t,n,i){var a;return n<0&&(a=t,a>Math.PI/2&&(a=a-Math.PI),a<-Math.PI/2&&(a=a+Math.PI)),a},e.prototype.getLabelAlign=function(t){var n=this.getCoordinate(),i=n.getCenter(),a;return t.angle<=Math.PI/2&&t.x>=i.x?a="left":a="right",t.offset<=0&&(a==="right"?a="left":a="right"),a},e.prototype.getArcPoint=function(t){return t},e.prototype.getPointAngle=function(t){var n=this.getCoordinate(),i={x:(0,a0.isArray)(t.x)?t.x[0]:t.x,y:t.y[0]},a={x:(0,a0.isArray)(t.x)?t.x[1]:t.x,y:t.y[1]},o,s=yh(n,i);if(t.points&&t.points[0].y===t.points[1].y)o=s;else{var l=yh(n,a);s>=l&&(l=l+Math.PI*2),o=s+(l-s)/2}return o},e.prototype.getCirclePoint=function(t,n){var i=this.getCoordinate(),a=i.getCenter(),o=i.getRadius()+n;return E(E({},Ri(a.x,a.y,o,t)),{angle:t,r:o})},e}(MO),Pit=qVt;var Sp=U(q());var kit=4;function KVt(r,e,t,n,i,a){var o=!0,s=n.start,l=n.end,u=Math.min(s.y,l.y),f=Math.abs(s.y-l.y),c,h=0,d=Number.MIN_VALUE,p=e.map(function(C){return C.y>h&&(h=C.y),C.yf&&(f=h-u);o;)for(p.forEach(function(C){var w=(Math.min.apply(d,C.targets)+Math.max.apply(d,C.targets))/2;C.pos=Math.min(Math.max(d,w-C.size/2),f-C.size)}),o=!1,c=p.length;c--;)if(c>0){var v=p[c-1],m=p[c];v.pos+v.size>m.pos&&(v.size+=m.size,v.targets=v.targets.concat(m.targets),v.pos+v.size>f&&(v.pos=f-v.size),p.splice(c,1),o=!0)}c=0,p.forEach(function(C){var w=u+t/2;C.targets.forEach(function(){e[c].y=C.pos+w,w+=t,c++})});for(var g={},x=0,b=r;x0){var l=14,u=o+i,f=u*2+l*2,c={start:a.start,end:a.end},h=[[],[]];r.forEach(function(d){!d||(d.textAlign==="right"?h[0].push(d):h[1].push(d))}),h.forEach(function(d,p){var v=f/l;d.length>v&&(d.sort(function(m,g){return g["..percent"]-m["..percent"]}),d.splice(v,d.length-v)),d.sort(function(m,g){return m.y-g.y}),KVt(e,d,l,c,s,p)})}(0,Sp.each)(r,function(d){if(d&&d.labelLine){var p=d.offset,v=d.angle,m=Ri(s.x,s.y,o,v),g=Ri(s.x,s.y,o+p/2,v),x=d.x+(0,Sp.get)(d,"offsetX",0),b=d.y+(0,Sp.get)(d,"offsetY",0),S={x:x-Math.cos(v)*kit,y:b-Math.sin(v)*kit};(0,Sp.isObject)(d.labelLine)||(d.labelLine={}),d.labelLine.path=["M ".concat(m.x),"".concat(m.y," Q").concat(g.x),"".concat(g.y," ").concat(S.x),S.y].join(",")}})}}var jo=U(q());function TO(r,e,t){var n=r.filter(function(p){return!p.invisible});n.sort(function(p,v){return p.y-v.y});var i=!0,a=t.minY,o=t.maxY,s=Math.abs(a-o),l,u=0,f=Number.MIN_VALUE,c=n.map(function(p){return p.y>u&&(u=p.y),p.ys&&(s=u-a);i;)for(c.forEach(function(p){var v=(Math.min.apply(f,p.targets)+Math.max.apply(f,p.targets))/2;p.pos=Math.min(Math.max(f,v-p.size/2),s-p.size),p.pos=Math.max(0,p.pos)}),i=!1,l=c.length;l--;)if(l>0){var h=c[l-1],d=c[l];h.pos+h.size>d.pos&&(h.size+=d.size,h.targets=h.targets.concat(d.targets),h.pos+h.size>s&&(h.pos=s-h.size),c.splice(l,1),i=!0)}l=0,c.forEach(function(p){var v=a+e/2;p.targets.forEach(function(){n[l].y=p.pos+v,v+=e,l++})})}var Nit=4;function ZVt(r,e){var t=e.getCenter(),n=e.getRadius();if(r&&r.labelLine){var i=r.angle,a=r.offset,o=Ri(t.x,t.y,n,i),s=r.x+(0,jo.get)(r,"offsetX",0)*(Math.cos(i)>0?1:-1),l=r.y+(0,jo.get)(r,"offsetY",0)*(Math.sin(i)>0?1:-1),u={x:s-Math.cos(i)*Nit,y:l-Math.sin(i)*Nit},f=r.labelLine.smooth,c=[],h=u.x-t.x,d=u.y-t.y,p=Math.atan(d/h);if(h<0&&(p+=Math.PI),f===!1){(0,jo.isObject)(r.labelLine)||(r.labelLine={});var v=0;(i<0&&i>-Math.PI/2||i>Math.PI*1.5)&&u.y>o.y&&(v=1),i>=0&&io.y&&(v=1),i>=Math.PI/2&&iu.y&&(v=1),(i<-Math.PI/2||i>=Math.PI&&iu.y&&(v=1);var m=a/2>4?4:Math.max(a/2-1,0),g=Ri(t.x,t.y,n+m,i),x=Ri(t.x,t.y,n+a/2,p),b=0;c.push("M ".concat(o.x," ").concat(o.y)),c.push("L ".concat(g.x," ").concat(g.y)),c.push("A ".concat(t.x," ").concat(t.y," 0 ").concat(b," ").concat(v," ").concat(x.x," ").concat(x.y)),c.push("L ".concat(u.x," ").concat(u.y))}else{var g=Ri(t.x,t.y,n+(a/2>4?4:Math.max(a/2-1,0)),i),S=o.xMath.pow(Math.E,-16)&&c.push.apply(c,["C",u.x+S*4,u.y,2*g.x-o.x,2*g.y-o.y,o.x,o.y]),c.push("L ".concat(o.x," ").concat(o.y))}r.labelLine.path=c.join(" ")}}function Fit(r,e,t,n){var i=(0,jo.filter)(r,function(w){return!(0,jo.isNil)(w)}),a=e[0]&&e[0].get("coordinate");if(!!a){for(var o=a.getCenter(),s=a.getRadius(),l={},u=0,f=e;uI&&(w.sort(function(P,L){return L.percent-P.percent}),(0,jo.each)(w,function(P,L){L+1>I&&(l[P.id].set("visible",!1),P.invisible=!0)})),TO(w,h,C)}),(0,jo.each)(m,function(w,A){(0,jo.each)(w,function(I){var P=A===v,L=l[I.id],M=L.getChildByIndex(0);if(M){var O=s+d,F=I.y-o.y,k=Math.pow(O,2),G=Math.pow(F,2),D=k-G>0?k-G:0,N=Math.sqrt(D),z=Math.abs(Math.cos(I.angle)*O);P?I.x=o.x+Math.max(N,z):I.x=o.x-Math.max(N,z)}M&&(M.attr("y",I.y),M.attr("x",I.x)),ZVt(I,a)})})}}}var Wo=U(q());var VU=4,$Vt=4,Bit=4;function QVt(r,e,t){var n=e.getCenter(),i=e.getRadius(),a={x:r.x-(t?Bit:-Bit),y:r.y},o=Ri(n.x,n.y,i+VU,r.angle),s={x:a.x,y:a.y},l={x:o.x,y:o.y},u=Ri(n.x,n.y,i,r.angle),f="";if(a.y!==o.y){var c=t?4:-4;s.y=a.y,r.angle<0&&r.angle>=-Math.PI/2&&(s.x=Math.max(o.x,a.x-c),a.y0&&r.angleo.y?l.y=s.y:(l.y=o.y,l.x=Math.max(l.x,s.x-c))),r.angle>Math.PI/2&&(s.x=Math.min(o.x,a.x-c),a.y>o.y?l.y=s.y:(l.y=o.y,l.x=Math.min(l.x,s.x-c))),r.angle<-Math.PI/2&&(s.x=Math.min(o.x,a.x-c),a.ya.x||w.x===a.x&&w.y>a.y,P=(0,Wo.isNil)(w.offsetX)?$Vt:w.offsetX,L=Ri(a.x,a.y,o+VU,w.angle),M=h+P;w.x=a.x+(I?1:-1)*(o+M),w.y=L.y}});var d=i.start,p=i.end,v="left",m="right",g=(0,Wo.groupBy)(r,function(w){return w.xx&&(x=Math.min(A,Math.abs(d.y-p.y)))});var b={minX:d.x,maxX:p.x,minY:a.y-x/2,maxY:a.y+x/2};(0,Wo.each)(g,function(w,A){var I=x/c;w.length>I&&(w.sort(function(P,L){return L.percent-P.percent}),(0,Wo.each)(w,function(P,L){L>I&&(s[P.id].set("visible",!1),P.invisible=!0)})),TO(w,c,b)});var S=b.minY,C=b.maxY;(0,Wo.each)(g,function(w,A){var I=A===m;(0,Wo.each)(w,function(P){var L=(0,Wo.get)(s,P&&[P.id]);if(!!L){if(P.yC){L.set("visible",!1);return}var M=L.getChildByIndex(0),O=M.getCanvasBBox(),F={x:I?O.x:O.maxX,y:O.y+O.height/2};_h(M,P.x-F.x,P.y-F.y),P.labelLine&&QVt(P,i,I)}})})}}var zit=U(q());function Uit(r,e,t,n){(0,zit.each)(e,function(i){var a=n.minX,o=n.minY,s=n.maxX,l=n.maxY,u=i.getCanvasBBox(),f=u.minX,c=u.minY,h=u.maxX,d=u.maxY,p=u.x,v=u.y,m=u.width,g=u.height,x=p,b=v;(fs?x=s-m:h>s&&(x=x-(h-s)),c>l?b=l-g:d>l&&(b=b-(d-l)),(x!==p||b!==v)&&_h(i,x-p,b-v)})}var jit=U(q());function Wit(r,e,t,n){(0,jit.each)(e,function(i,a){var o=i.getCanvasBBox(),s=t[a].getBBox();(o.minXs.maxX||o.maxY>s.maxY)&&i.remove(!0)})}var HU=U(q()),JVt=100,Vit=function(){function r(e){e===void 0&&(e={}),this.bitmap={};var t=e.xGap,n=t===void 0?1:t,i=e.yGap,a=i===void 0?8:i;this.xGap=n,this.yGap=a}return r.prototype.hasGap=function(e){for(var t=!0,n=this.bitmap,i=Math.round(e.minX),a=Math.round(e.maxX),o=Math.round(e.minY),s=Math.round(e.maxY),l=i;l<=a;l+=1){if(!n[l]){n[l]={};continue}if(l===i||l===a){for(var u=o;u<=s;u++)if(n[l][u]){t=!1;break}}else if(n[l][o]||n[l][s]){t=!1;break}}return t},r.prototype.fillGap=function(e){for(var t=this.bitmap,n=Math.round(e.minX),i=Math.round(e.maxX),a=Math.round(e.minY),o=Math.round(e.maxY),s=n;s<=i;s+=1)t[s]||(t[s]={});for(var s=n;s<=i;s+=this.xGap){for(var l=a;l<=o;l+=this.yGap)t[s][l]=!0;t[s][o]=!0}if(this.yGap!==1)for(var s=a;s<=o;s+=1)t[n][s]=!0,t[i][s]=!0;if(this.xGap!==1)for(var s=n;s<=i;s+=1)t[s][a]=!0,t[s][o]=!0},r.prototype.destroy=function(){this.bitmap={}},r}();function t8t(r,e,t){t===void 0&&(t=JVt);var n=-1,i=r.attr(),a=i.x,o=i.y,s=r.getCanvasBBox(),l=Math.sqrt(s.width*s.width+s.height*s.height),u,f=-n,c=0,h=0,d=function(g){var x=g*.1;return[x*Math.cos(x),x*Math.sin(x)]};if(e.hasGap(s))return e.fillGap(s),!0;for(var p=!1,v=0,m={};Math.min(Math.abs(c),Math.abs(h))4)return[];var e=function(i,a){return[a.x-i.x,a.y-i.y]},t=e(r[0],r[1]),n=e(r[1],r[2]);return[t,n]}function IO(r,e,t){e===void 0&&(e=0),t===void 0&&(t={x:0,y:0});var n=r.x,i=r.y;return{x:(n-t.x)*Math.cos(-e)+(i-t.y)*Math.sin(-e)+t.x,y:(t.x-n)*Math.sin(-e)+(i-t.y)*Math.cos(-e)+t.y}}function Kit(r){var e=[{x:r.x,y:r.y},{x:r.x+r.width,y:r.y},{x:r.x+r.width,y:r.y+r.height},{x:r.x,y:r.y+r.height}],t=r.rotation;return t?[IO(e[0],t,e[0]),IO(e[1],t,e[0]),IO(e[2],t,e[0]),IO(e[3],t,e[0])]:e}function Zit(r,e){if(r.length>4)return{min:0,max:0};var t=[];return r.forEach(function(n){t.push(r8t([n.x,n.y],e))}),{min:Math.min.apply(Math,t),max:Math.max.apply(Math,t)}}function n8t(r,e){return r.max>e.min&&r.minr.x+r.width+t||e.x+e.widthr.y+r.height+t||e.y+e.height=a.height:o.width>=a.width}function s8t(r,e,t){var n=!!r.getAdjust("stack");return n||e.every(function(i,a){var o=t[a];return o8t(r,i,o)})}function l8t(r,e,t){var n=r.coordinate,i=xa.fromObject(t.getBBox()),a=ic(e);n.isTransposed?a.attr({x:i.minX+i.width/2,textAlign:"center"}):a.attr({y:i.minY+i.height/2,textBaseline:"middle"})}function nat(r,e,t){var n;if(t.length!==0){var i=(n=t[0])===null||n===void 0?void 0:n.get("element"),a=i==null?void 0:i.geometry;if(!(!a||a.type!=="interval")){var o=s8t(a,e,t);o&&t.forEach(function(s,l){var u=e[l];l8t(a,u,s)})}}}var ef=U(q());function u8t(r){var e=500,t=[],n=Math.max(Math.floor(r.length/e),1);return(0,ef.each)(r,function(i,a){a%n==0?t.push(i):i.set("visible",!1)}),t}function iat(r,e,t){var n;if(t.length!==0){var i=(n=t[0])===null||n===void 0?void 0:n.get("element"),a=i==null?void 0:i.geometry;if(!(!a||a.type!=="interval")){var o=u8t(e),s=a.getXYFields()[0],l=[],u=[],f=(0,ef.groupBy)(o,function(v){return v.get("data")[s]}),c=(0,ef.uniq)((0,ef.map)(o,function(v){return v.get("data")[s]})),h;o.forEach(function(v){v.set("visible",!0)});var d=function(v){v&&(v.length&&u.push(v.pop()),u.push.apply(u,v))};for((0,ef.size)(c)>0&&(h=c.shift(),d(f[h])),(0,ef.size)(c)>0&&(h=c.pop(),d(f[h])),(0,ef.each)(c.reverse(),function(v){d(f[v])});u.length>0;){var p=u.shift();p.get("visible")&&($rt(p,l)?p.set("visible",!1):l.push(p))}}}}var v1=U(q());function f8t(r,e){var t=r.getXYFields()[1],n=[],i=e.sort(function(a,o){return a.get("data")[t]-a.get("data")[t]});return i.length>0&&n.push(i.shift()),i.length>0&&n.push(i.pop()),n.push.apply(n,i),n}function aat(r,e,t){return r.some(function(n){return t(n,e)})}function c8t(r,e,t){t===void 0&&(t=0);var n=Math.max(0,Math.min(r.x+r.width+t,e.x+e.width+t)-Math.max(r.x-t,e.x-t)),i=Math.max(0,Math.min(r.y+r.height+t,e.y+e.height+t)-Math.max(r.y-t,e.y-t));return n*i}function oat(r,e){return aat(r,e,function(t,n){var i=ic(t),a=ic(n);return c8t(i.getCanvasBBox(),a.getCanvasBBox(),2)>0})}function sat(r,e,t,n,i){var a,o;if(t.length!==0){var s=(a=t[0])===null||a===void 0?void 0:a.get("element"),l=s==null?void 0:s.geometry;if(!(!l||l.type!=="point")){var u=l.getXYFields(),f=u[0],c=u[1],h=(0,v1.groupBy)(e,function(v){return v.get("data")[f]}),d=[],p=i&&i.offset||((o=r[0])===null||o===void 0?void 0:o.offset)||12;(0,v1.map)((0,v1.keys)(h).reverse(),function(v){for(var m=f8t(l,h[v]);m.length;){var g=m.shift(),x=ic(g);if(aat(d,g,function(C,w){return C.get("data")[f]===w.get("data")[f]&&C.get("data")[c]===w.get("data")[c]})){x.set("visible",!1);continue}var b=oat(d,g),S=!1;if(b&&(x.attr("y",x.attr("y")+2*p),S=oat(d,g)),S){x.set("visible",!1);continue}d.push(g)}})}}}var m1=U(q());function h8t(r,e){var t=r.getXYFields()[1],n=[],i=e.sort(function(a,o){return a.get("data")[t]-a.get("data")[t]});return i.length>0&&n.push(i.shift()),i.length>0&&n.push(i.pop()),n.push.apply(n,i),n}function lat(r,e,t){return r.some(function(n){return t(n,e)})}function d8t(r,e,t){t===void 0&&(t=0);var n=Math.max(0,Math.min(r.x+r.width+t,e.x+e.width+t)-Math.max(r.x-t,e.x-t)),i=Math.max(0,Math.min(r.y+r.height+t,e.y+e.height+t)-Math.max(r.y-t,e.y-t));return n*i}function uat(r,e){return lat(r,e,function(t,n){var i=ic(t),a=ic(n);return d8t(i.getCanvasBBox(),a.getCanvasBBox(),2)>0})}function fat(r,e,t,n,i){var a,o;if(t.length!==0){var s=(a=t[0])===null||a===void 0?void 0:a.get("element"),l=s==null?void 0:s.geometry;if(!(!l||["path","line","area"].indexOf(l.type)<0)){var u=l.getXYFields(),f=u[0],c=u[1],h=(0,m1.groupBy)(e,function(v){return v.get("data")[f]}),d=[],p=i&&i.offset||((o=r[0])===null||o===void 0?void 0:o.offset)||12;(0,m1.map)((0,m1.keys)(h).reverse(),function(v){for(var m=h8t(l,h[v]);m.length;){var g=m.shift(),x=ic(g);if(lat(d,g,function(C,w){return C.get("data")[f]===w.get("data")[f]&&C.get("data")[c]===w.get("data")[c]})){x.set("visible",!1);continue}var b=uat(d,g),S=!1;if(b&&(x.attr("y",x.attr("y")+2*p),S=uat(d,g)),S){x.set("visible",!1);continue}d.push(g)}})}}}var OO=U(q());var Cp=U(q());var XU;function cat(){return XU||(XU=document.createElement("canvas").getContext("2d")),XU}var LO=(0,Cp.memoize)(function(r,e){e===void 0&&(e={});var t=e.fontSize,n=e.fontFamily,i=e.fontWeight,a=e.fontStyle,o=e.fontVariant,s=cat();return s.font=[a,o,i,"".concat(t,"px"),n].join(" "),s.measureText((0,Cp.isString)(r)?r:"").width},function(r,e){return e===void 0&&(e={}),mn([r],(0,Cp.values)(e),!0).join("")}),hat=function(r,e,t){var n=16,i=LO("...",t),a;(0,Cp.isString)(r)?a=r:a=(0,Cp.toString)(r);var o=e,s=[],l,u;if(LO(r,t)<=e)return r;for(;l=a.substr(0,n),u=LO(l,t),!(u+i>o&&u>o);)if(s.push(l),o-=u,a=a.substr(n),!a)return s.join("");for(;l=a.substr(0,1),u=LO(l,t),!(u+i>o);)if(s.push(l),o-=u,a=a.substr(1),!a)return s.join("");return"".concat(s.join(""),"...")};function dat(r,e,t,n,i){if(!(e.length<=0)){var a=(i==null?void 0:i.direction)||["top","right","bottom","left"],o=(i==null?void 0:i.action)||"translate",s=(i==null?void 0:i.margin)||0,l=e[0].get("coordinate");if(!!l){var u=irt(l,s),f=u.minX,c=u.minY,h=u.maxX,d=u.maxY;(0,OO.each)(e,function(p){var v=p.getCanvasBBox(),m=v.minX,g=v.minY,x=v.maxX,b=v.maxY,S=v.x,C=v.y,w=v.width,A=v.height,I=S,P=C;if(a.indexOf("left")>=0&&(m=0&&(g=0&&(m>h?I=h-w:x>h&&(I=I-(x-h))),a.indexOf("bottom")>=0&&(g>d?P=d-A:b>d&&(P=P-(b-d))),I!==S||P!==C){var L=I-S;if(o==="translate")_h(p,L,P-C);else if(o==="ellipsis"){var M=p.findAll(function(O){return O.get("type")==="text"});M.forEach(function(O){var F=(0,OO.pick)(O.attr(),["fontSize","fontFamily","fontWeight","fontStyle","fontVariant"]),k=O.getCanvasBBox(),G=hat(O.attr("text"),k.width-Math.abs(L),F);O.attr("text",G)})}else p.hide()}})}}}var DO=U(q());function pat(r,e,t){var n={fillOpacity:(0,DO.isNil)(r.attr("fillOpacity"))?1:r.attr("fillOpacity"),strokeOpacity:(0,DO.isNil)(r.attr("strokeOpacity"))?1:r.attr("strokeOpacity"),opacity:(0,DO.isNil)(r.attr("opacity"))?1:r.attr("opacity")};r.attr({fillOpacity:0,strokeOpacity:0,opacity:0}),r.animate(n,e)}function vat(r,e,t){var n={fillOpacity:0,strokeOpacity:0,opacity:0},i=e.easing,a=e.duration,o=e.delay;r.animate(n,a,i,function(){r.remove(!0)},o)}function p8t(r,e,t){var n,i=e[0],a=e[1];return r.applyToMatrix([i,a,1]),t==="x"?(r.setMatrix(gr.transform(r.getMatrix(),[["t",-i,-a],["s",.01,1],["t",i,a]])),n=gr.transform(r.getMatrix(),[["t",-i,-a],["s",100,1],["t",i,a]])):t==="y"?(r.setMatrix(gr.transform(r.getMatrix(),[["t",-i,-a],["s",1,.01],["t",i,a]])),n=gr.transform(r.getMatrix(),[["t",-i,-a],["s",1,100],["t",i,a]])):t==="xy"&&(r.setMatrix(gr.transform(r.getMatrix(),[["t",-i,-a],["s",.01,.01],["t",i,a]])),n=gr.transform(r.getMatrix(),[["t",-i,-a],["s",100,100],["t",i,a]])),n}function PO(r,e,t,n,i){var a=t.start,o=t.end,s=t.getWidth(),l=t.getHeight(),u,f;i==="y"?(u=a.x+s/2,f=n.ya.x?n.x:a.x,f=a.y+l/2):i==="xy"&&(t.isPolar?(u=t.getCenter().x,f=t.getCenter().y):(u=(a.x+o.x)/2,f=(a.y+o.y)/2));var c=p8t(r,[u,f],i);r.animate({matrix:c},e)}function mat(r,e,t){var n=t.coordinate,i=t.minYPoint;PO(r,e,n,i,"x")}function gat(r,e,t){var n=t.coordinate,i=t.minYPoint;PO(r,e,n,i,"y")}function yat(r,e,t){var n=t.coordinate,i=t.minYPoint;PO(r,e,n,i,"xy")}function xat(r,e,t){var n=r.getTotalLength();r.attr("lineDash",[n]),r.animate(function(i){return{lineDashOffset:(1-i)*n}},e)}function bat(r,e,t){var n=t.toAttrs,i=n.x,a=n.y;delete n.x,delete n.y,r.attr(n),r.animate({x:i,y:a},e)}function _at(r,e,t){var n=r.getBBox(),i=r.get("origin").mappingData,a=i.points,o=a[0].y-a[1].y>0?n.maxX:n.minX,s=(n.minY+n.maxY)/2;r.applyToMatrix([o,s,1]);var l=gr.transform(r.getMatrix(),[["t",-o,-s],["s",.01,1],["t",o,s]]);r.setMatrix(l),r.animate({matrix:gr.transform(r.getMatrix(),[["t",-o,-s],["s",100,1],["t",o,s]])},e)}function Sat(r,e,t){var n=r.getBBox(),i=r.get("origin").mappingData,a=(n.minX+n.maxX)/2,o=i.points,s=o[0].y-o[1].y<=0?n.maxY:n.minY;r.applyToMatrix([a,s,1]);var l=gr.transform(r.getMatrix(),[["t",-a,-s],["s",1,.01],["t",a,s]]);r.setMatrix(l),r.animate({matrix:gr.transform(r.getMatrix(),[["t",-a,-s],["s",1,100],["t",a,s]])},e)}var wp=U(q());function Cat(r,e){var t,n=_m(r,e),i=n.startAngle,a=n.endAngle;return!(0,wp.isNumberEqual)(i,-Math.PI*.5)&&i<-Math.PI*.5&&(i+=Math.PI*2),!(0,wp.isNumberEqual)(a,-Math.PI*.5)&&a<-Math.PI*.5&&(a+=Math.PI*2),e[5]===0&&(t=[a,i],i=t[0],a=t[1]),(0,wp.isNumberEqual)(i,Math.PI*1.5)&&(i=Math.PI*-.5),(0,wp.isNumberEqual)(a,Math.PI*-.5)&&(a=Math.PI*1.5),{startAngle:i,endAngle:a}}function wat(r){var e;return r[0]==="M"||r[0]==="L"?e=[r[1],r[2]]:(r[0]==="a"||r[0]==="A"||r[0]==="C")&&(e=[r[r.length-2],r[r.length-1]]),e}function Eat(r){var e,t,n,i=r.filter(function(b){return b[0]==="A"||b[0]==="a"});if(i.length===0)return{startAngle:0,endAngle:0,radius:0,innerRadius:0};var a=i[0],o=i.length>1?i[1]:i[0],s=r.indexOf(a),l=r.indexOf(o),u=wat(r[s-1]),f=wat(r[l-1]),c=Cat(u,a),h=c.startAngle,d=c.endAngle,p=Cat(f,o),v=p.startAngle,m=p.endAngle;(0,wp.isNumberEqual)(h,v)&&(0,wp.isNumberEqual)(d,m)?(t=h,n=d):(t=Math.min(h,v),n=Math.max(d,m));var g=a[1],x=i[i.length-1][1];return g=0;s--)for(var l=this.getFacetsByLevel(t,s),u=0,f=l;u=d){var m=i.parsePosition([p[l],p[s.field]]);m&&h.push(m)}if(p[l]===c)return!1}),h},e.prototype.parsePercentPosition=function(t){var n=parseFloat(t[0])/100,i=parseFloat(t[1])/100,a=this.view.getCoordinate(),o=a.start,s=a.end,l={x:Math.min(o.x,s.x),y:Math.min(o.y,s.y)},u=a.getWidth()*n+l.x,f=a.getHeight()*i+l.y;return{x:u,y:f}},e.prototype.getCoordinateBBox=function(){var t=this.view.getCoordinate(),n=t.start,i=t.end,a=t.getWidth(),o=t.getHeight(),s={x:Math.min(n.x,i.x),y:Math.min(n.y,i.y)};return{x:s.x,y:s.y,minX:s.x,minY:s.y,maxX:s.x+a,maxY:s.y+o,width:a,height:o}},e.prototype.getAnnotationCfg=function(t,n,i){var a=this,o=this.view.getCoordinate(),s=this.view.getCanvas(),l={};if((0,Cn.isNil)(n))return null;var u=n.start,f=n.end,c=n.position,h=this.parsePosition(u),d=this.parsePosition(f),p=this.parsePosition(c);if(["arc","image","line","region","regionFilter"].includes(t)&&(!h||!d))return null;if(["text","dataMarker","html"].includes(t)&&!p)return null;if(t==="arc"){var v=n,m=v.start,g=v.end,x=rr(v,["start","end"]),b=yh(o,h),S=yh(o,d);b>S&&(S=Math.PI*2+S),l=E(E({},x),{center:o.getCenter(),radius:gm(o,h),startAngle:b,endAngle:S})}else if(t==="image"){var C=n,w=C.start,A=C.end,x=rr(C,["start","end"]);l=E(E({},x),{start:h,end:d,src:n.src})}else if(t==="line"){var I=n,P=I.start,L=I.end,x=rr(I,["start","end"]);l=E(E({},x),{start:h,end:d,text:(0,Cn.get)(n,"text",null)})}else if(t==="region"){var M=n,O=M.start,F=M.end,x=rr(M,["start","end"]);l=E(E({},x),{start:h,end:d})}else if(t==="text"){var k=this.view.getData(),G=n,D=G.position,N=G.content,x=rr(G,["position","content"]),z=N;(0,Cn.isFunction)(N)&&(z=N(k)),l=E(E(E({},p),x),{content:z})}else if(t==="dataMarker"){var j=n,W=j.position,J=j.point,et=j.line,lt=j.text,$=j.autoAdjust,st=j.direction,x=rr(j,["position","point","line","text","autoAdjust","direction"]);l=E(E(E({},x),p),{coordinateBBox:this.getCoordinateBBox(),point:J,line:et,text:lt,autoAdjust:$,direction:st})}else if(t==="dataRegion"){var _t=n,dt=_t.start,vt=_t.end,Tt=_t.region,lt=_t.text,Ut=_t.lineLength,x=rr(_t,["start","end","region","text","lineLength"]);l=E(E({},x),{points:this.getRegionPoints(dt,vt),region:Tt,text:lt,lineLength:Ut})}else if(t==="regionFilter"){var $t=n,Y=$t.start,it=$t.end,K=$t.apply,Rt=$t.color,x=rr($t,["start","end","apply","color"]),Xt=this.view.geometries,Zt=[],Ae=function(Ue){!Ue||(Ue.isGroup()?Ue.getChildren().forEach(function(Ht){return Ae(Ht)}):Zt.push(Ue))};(0,Cn.each)(Xt,function(Ue){K?(0,Cn.contains)(K,Ue.type)&&(0,Cn.each)(Ue.elements,function(Ht){Ae(Ht.shape)}):(0,Cn.each)(Ue.elements,function(Ht){Ae(Ht.shape)})}),l=E(E({},x),{color:Rt,shapes:Zt,start:h,end:d})}else if(t==="shape"){var We=n,$e=We.render,V=rr(We,["render"]),Te=function(ee){if((0,Cn.isFunction)(n.render))return $e(ee,a.view,{parsePosition:a.parsePosition.bind(a)})};l=E(E({},V),{render:Te})}else if(t==="html"){var ne=n,pt=ne.html,Et=ne.position,V=rr(ne,["html","position"]),St=function(Ue){return(0,Cn.isFunction)(pt)?pt(Ue,a.view):pt};l=E(E(E({},V),p),{parent:s.get("el").parentNode,html:St})}var Wt=(0,Cn.deepMix)({},i,E(E({},l),{top:n.top,style:n.style,offsetX:n.offsetX,offsetY:n.offsetY}));return t!=="html"&&(Wt.container=this.getComponentContainer(Wt)),Wt.animate=this.view.getOptions().animate&&Wt.animate&&(0,Cn.get)(n,"animate",Wt.animate),Wt.animateOption=(0,Cn.deepMix)({},pp,Wt.animateOption,n.animateOption),Wt},e.prototype.isTop=function(t){return(0,Cn.get)(t,"top",!0)},e.prototype.getComponentContainer=function(t){return this.isTop(t)?this.foregroundContainer:this.backgroundContainer},e.prototype.getAnnotationTheme=function(t){return(0,Cn.get)(this.view.getTheme(),["components","annotation",t],{})},e.prototype.updateOrCreate=function(t){var n=this.cache.get(this.getCacheKey(t));if(n){var i=t.type,a=this.getAnnotationTheme(i),o=this.getAnnotationCfg(i,t,a);o&&bo(o,["container"]),n.component.update(E(E({},o||{}),{visible:!!o})),(0,Cn.includes)(NO,t.type)&&n.component.render()}else n=this.createAnnotation(t),n&&(n.component.init(),(0,Cn.includes)(NO,t.type)&&n.component.render());return n},e.prototype.syncCache=function(t){var n=this,i=new Map(this.cache);return t.forEach(function(a,o){i.set(o,a)}),i.forEach(function(a,o){(0,Cn.find)(n.option,function(s){return o===n.getCacheKey(s)})||(a.component.destroy(),i.delete(o))}),i},e.prototype.getCacheKey=function(t){return t},e}(Fl),Bat=_8t;var Ci=U(q());var Th=U(q());function ZU(r,e){var t=(0,Th.deepMix)({},(0,Th.get)(r,["components","axis","common"]),(0,Th.get)(r,["components","axis",e]));return(0,Th.get)(t,["grid"],{})}function zE(r,e,t,n){var i=[],a=e.getTicks();return r.isPolar&&a.push({value:1,text:"",tickValue:""}),a.reduce(function(o,s,l){var u=s.value;if(n)i.push({points:[r.convert(t==="y"?{x:0,y:u}:{x:u,y:0}),r.convert(t==="y"?{x:1,y:u}:{x:u,y:1})]});else if(l){var f=o.value,c=(f+u)/2;i.push({points:[r.convert(t==="y"?{x:0,y:c}:{x:c,y:0}),r.convert(t==="y"?{x:1,y:c}:{x:c,y:1})]})}return s},a[0]),i}function FO(r,e,t,n,i){var a=e.values.length,o=[],s=t.getTicks();return s.reduce(function(l,u){var f=l?l.value:u.value,c=u.value,h=(f+c)/2;return i==="x"?o.push({points:[r.convert({x:n?c:h,y:0}),r.convert({x:n?c:h,y:1})]}):o.push({points:(0,Th.map)(Array(a+1),function(d,p){return r.convert({x:p/a,y:n?c:h})})}),u},s[0]),o}function $U(r,e){var t=(0,Th.get)(e,"grid");if(t===null)return!1;var n=(0,Th.get)(r,"grid");return!(t===void 0&&n===null)}var Om=["container"],Gat=E(E({},pp),{appear:null}),S8t=function(r){H(e,r);function e(t){var n=r.call(this,t)||this;return n.cache=new Map,n.gridContainer=n.view.getLayer(di.BG).addGroup(),n.gridForeContainer=n.view.getLayer(di.FORE).addGroup(),n.axisContainer=n.view.getLayer(di.BG).addGroup(),n.axisForeContainer=n.view.getLayer(di.FORE).addGroup(),n}return Object.defineProperty(e.prototype,"name",{get:function(){return"axis"},enumerable:!1,configurable:!0}),e.prototype.init=function(){},e.prototype.render=function(){this.update()},e.prototype.layout=function(){var t=this,n=this.view.getCoordinate();(0,Ci.each)(this.getComponents(),function(i){var a=i.component,o=i.direction,s=i.type,l=i.extra,u=l.dim,f=l.scale,c=l.alignTick,h;if(s===la.AXIS)n.isPolar?u==="x"?h=n.isTransposed?uE(n,o):EL(n):u==="y"&&(h=n.isTransposed?EL(n):uE(n,o)):h=uE(n,o);else if(s===la.GRID)if(n.isPolar){var d=void 0;n.isTransposed?d=u==="x"?FO(n,t.view.getYScales()[0],f,c,u):zE(n,f,u,c):d=u==="x"?zE(n,f,u,c):FO(n,t.view.getXScale(),f,c,u),h={items:d,center:t.view.getCoordinate().getCenter()}}else h={items:zE(n,f,u,c)};a.update(h)})},e.prototype.update=function(){this.option=this.view.getOptions().axes;var t=new Map;this.updateXAxes(t),this.updateYAxes(t);var n=new Map;this.cache.forEach(function(i,a){t.has(a)?n.set(a,i):i.component.destroy()}),this.cache=n},e.prototype.clear=function(){r.prototype.clear.call(this),this.cache.clear(),this.gridContainer.clear(),this.gridForeContainer.clear(),this.axisContainer.clear(),this.axisForeContainer.clear()},e.prototype.destroy=function(){r.prototype.destroy.call(this),this.gridContainer.remove(!0),this.gridForeContainer.remove(!0),this.axisContainer.remove(!0),this.axisForeContainer.remove(!0)},e.prototype.getComponents=function(){var t=[];return this.cache.forEach(function(n){t.push(n)}),t},e.prototype.updateXAxes=function(t){var n=this.view.getXScale();if(!(!n||n.isIdentity)){var i=Hb(this.option,n.field);if(i!==!1){var a=iU(i,xe.BOTTOM),o=di.BG,s="x",l=this.view.getCoordinate(),u=this.getId("axis",n.field),f=this.getId("grid",n.field);if(l.isRect){var c=this.cache.get(u);if(c){var h=this.getLineAxisCfg(n,i,a);bo(h,Om),c.component.update(h),t.set(u,c)}else c=this.createLineAxis(n,i,o,a,s),this.cache.set(u,c),t.set(u,c);var d=this.cache.get(f);if(d){var h=this.getLineGridCfg(n,i,a,s);bo(h,Om),d.component.update(h),t.set(f,d)}else d=this.createLineGrid(n,i,o,a,s),d&&(this.cache.set(f,d),t.set(f,d))}else if(l.isPolar){var c=this.cache.get(u);if(c){var h=l.isTransposed?this.getLineAxisCfg(n,i,xe.RADIUS):this.getCircleAxisCfg(n,i,a);bo(h,Om),c.component.update(h),t.set(u,c)}else{if(l.isTransposed){if((0,Ci.isUndefined)(i))return;c=this.createLineAxis(n,i,o,xe.RADIUS,s)}else c=this.createCircleAxis(n,i,o,a,s);this.cache.set(u,c),t.set(u,c)}var d=this.cache.get(f);if(d){var h=l.isTransposed?this.getCircleGridCfg(n,i,xe.RADIUS,s):this.getLineGridCfg(n,i,xe.CIRCLE,s);bo(h,Om),d.component.update(h),t.set(f,d)}else{if(l.isTransposed){if((0,Ci.isUndefined)(i))return;d=this.createCircleGrid(n,i,o,xe.RADIUS,s)}else d=this.createLineGrid(n,i,o,xe.CIRCLE,s);d&&(this.cache.set(f,d),t.set(f,d))}}}}},e.prototype.updateYAxes=function(t){var n=this,i=this.view.getYScales();(0,Ci.each)(i,function(a,o){if(!(!a||a.isIdentity)){var s=a.field,l=Hb(n.option,s);if(l!==!1){var u=di.BG,f="y",c=n.getId("axis",s),h=n.getId("grid",s),d=n.view.getCoordinate();if(d.isRect){var p=iU(l,o===0?xe.LEFT:xe.RIGHT),v=n.cache.get(c);if(v){var m=n.getLineAxisCfg(a,l,p);bo(m,Om),v.component.update(m),t.set(c,v)}else v=n.createLineAxis(a,l,u,p,f),n.cache.set(c,v),t.set(c,v);var g=n.cache.get(h);if(g){var m=n.getLineGridCfg(a,l,p,f);bo(m,Om),g.component.update(m),t.set(h,g)}else g=n.createLineGrid(a,l,u,p,f),g&&(n.cache.set(h,g),t.set(h,g))}else if(d.isPolar){var v=n.cache.get(c);if(v){var m=d.isTransposed?n.getCircleAxisCfg(a,l,xe.CIRCLE):n.getLineAxisCfg(a,l,xe.RADIUS);bo(m,Om),v.component.update(m),t.set(c,v)}else{if(d.isTransposed){if((0,Ci.isUndefined)(l))return;v=n.createCircleAxis(a,l,u,xe.CIRCLE,f)}else v=n.createLineAxis(a,l,u,xe.RADIUS,f);n.cache.set(c,v),t.set(c,v)}var g=n.cache.get(h);if(g){var m=d.isTransposed?n.getLineGridCfg(a,l,xe.CIRCLE,f):n.getCircleGridCfg(a,l,xe.RADIUS,f);bo(m,Om),g.component.update(m),t.set(h,g)}else{if(d.isTransposed){if((0,Ci.isUndefined)(l))return;g=n.createLineGrid(a,l,u,xe.CIRCLE,f)}else g=n.createCircleGrid(a,l,u,xe.RADIUS,f);g&&(n.cache.set(h,g),t.set(h,g))}}}}})},e.prototype.createLineAxis=function(t,n,i,a,o){var s={component:new Xet(this.getLineAxisCfg(t,n,a)),layer:i,direction:a===xe.RADIUS?xe.NONE:a,type:la.AXIS,extra:{dim:o,scale:t}};return s.component.set("field",t.field),s.component.init(),s},e.prototype.createLineGrid=function(t,n,i,a,o){var s=this.getLineGridCfg(t,n,a,o);if(s){var l={component:new Ket(s),layer:i,direction:xe.NONE,type:la.GRID,extra:{dim:o,scale:t,alignTick:(0,Ci.get)(s,"alignTick",!0)}};return l.component.init(),l}},e.prototype.createCircleAxis=function(t,n,i,a,o){var s={component:new qet(this.getCircleAxisCfg(t,n,a)),layer:i,direction:a,type:la.AXIS,extra:{dim:o,scale:t}};return s.component.set("field",t.field),s.component.init(),s},e.prototype.createCircleGrid=function(t,n,i,a,o){var s=this.getCircleGridCfg(t,n,a,o);if(s){var l={component:new Zet(s),layer:i,direction:xe.NONE,type:la.GRID,extra:{dim:o,scale:t,alignTick:(0,Ci.get)(s,"alignTick",!0)}};return l.component.init(),l}},e.prototype.getLineAxisCfg=function(t,n,i){var a=(0,Ci.get)(n,["top"])?this.axisForeContainer:this.axisContainer,o=this.view.getCoordinate(),s=uE(o,i),l=aU(t,n),u=fE(this.view.getTheme(),i),f=(0,Ci.get)(n,["title"])?(0,Ci.deepMix)({title:{style:{text:l}}},{title:nU(this.view.getTheme(),i,n.title)},n):n,c=(0,Ci.deepMix)(E(E({container:a},s),{ticks:t.getTicks().map(function(b){return{id:"".concat(b.tickValue),name:b.text,value:b.value}}),verticalFactor:o.isPolar?rU(s,o.getCenter())*-1:rU(s,o.getCenter()),theme:u}),u,f),h=this.getAnimateCfg(c),d=h.animate,p=h.animateOption;c.animateOption=p,c.animate=d;var v=eU(s),m=(0,Ci.get)(c,"verticalLimitLength",v?1/3:1/2);if(m<=1){var g=this.view.getCanvas().get("width"),x=this.view.getCanvas().get("height");c.verticalLimitLength=m*(v?g:x)}return c},e.prototype.getLineGridCfg=function(t,n,i,a){if(!!$U(fE(this.view.getTheme(),i),n)){var o=ZU(this.view.getTheme(),i),s=(0,Ci.deepMix)({container:(0,Ci.get)(n,["top"])?this.gridForeContainer:this.gridContainer},o,(0,Ci.get)(n,"grid"),this.getAnimateCfg(n));return s.items=zE(this.view.getCoordinate(),t,a,(0,Ci.get)(s,"alignTick",!0)),s}},e.prototype.getCircleAxisCfg=function(t,n,i){var a=(0,Ci.get)(n,["top"])?this.axisForeContainer:this.axisContainer,o=this.view.getCoordinate(),s=t.getTicks().map(function(v){return{id:"".concat(v.tickValue),name:v.text,value:v.value}});!t.isCategory&&Math.abs(o.endAngle-o.startAngle)===Math.PI*2&&s.pop();var l=aU(t,n),u=fE(this.view.getTheme(),xe.CIRCLE),f=(0,Ci.get)(n,["title"])?(0,Ci.deepMix)({title:{style:{text:l}}},{title:nU(this.view.getTheme(),i,n.title)},n):n,c=(0,Ci.deepMix)(E(E({container:a},EL(this.view.getCoordinate())),{ticks:s,verticalFactor:1,theme:u}),u,f),h=this.getAnimateCfg(c),d=h.animate,p=h.animateOption;return c.animate=d,c.animateOption=p,c},e.prototype.getCircleGridCfg=function(t,n,i,a){if(!!$U(fE(this.view.getTheme(),i),n)){var o=ZU(this.view.getTheme(),xe.RADIUS),s=(0,Ci.deepMix)({container:(0,Ci.get)(n,["top"])?this.gridForeContainer:this.gridContainer,center:this.view.getCoordinate().getCenter()},o,(0,Ci.get)(n,"grid"),this.getAnimateCfg(n)),l=(0,Ci.get)(s,"alignTick",!0),u=a==="x"?this.view.getYScales()[0]:this.view.getXScale();return s.items=FO(this.view.getCoordinate(),u,t,l,a),s}},e.prototype.getId=function(t,n){var i=this.view.getCoordinate();return"".concat(t,"-").concat(n,"-").concat(i.type)},e.prototype.getAnimateCfg=function(t){return{animate:this.view.getOptions().animate&&(0,Ci.get)(t,"animate"),animateOption:t&&t.animateOption?(0,Ci.deepMix)({},Gat,t.animateOption):Gat}},e}(Fl),zat=S8t;var Vn=U(q());function lc(r,e,t){return t===xe.TOP?[r.minX+r.width/2-e.width/2,r.minY]:t===xe.BOTTOM?[r.minX+r.width/2-e.width/2,r.maxY-e.height]:t===xe.LEFT?[r.minX,r.minY+r.height/2-e.height/2]:t===xe.RIGHT?[r.maxX-e.width,r.minY+r.height/2-e.height/2]:t===xe.TOP_LEFT||t===xe.LEFT_TOP?[r.tl.x,r.tl.y]:t===xe.TOP_RIGHT||t===xe.RIGHT_TOP?[r.tr.x-e.width,r.tr.y]:t===xe.BOTTOM_LEFT||t===xe.LEFT_BOTTOM?[r.bl.x,r.bl.y-e.height]:t===xe.BOTTOM_RIGHT||t===xe.RIGHT_BOTTOM?[r.br.x-e.width,r.br.y-e.height]:[0,0]}function Uat(r,e){return(0,Vn.isBoolean)(r)?r===!1?!1:{}:(0,Vn.get)(r,[e],r)}function BO(r){return(0,Vn.get)(r,"position",xe.BOTTOM)}var C8t=function(r){H(e,r);function e(t){var n=r.call(this,t)||this;return n.container=n.view.getLayer(di.FORE).addGroup(),n}return Object.defineProperty(e.prototype,"name",{get:function(){return"legend"},enumerable:!1,configurable:!0}),e.prototype.init=function(){},e.prototype.render=function(){this.update()},e.prototype.layout=function(){var t=this;this.layoutBBox=this.view.viewBBox,(0,Vn.each)(this.components,function(n){var i=n.component,a=n.direction,o=XL(a),s=i.get("maxWidthRatio"),l=i.get("maxHeightRatio"),u=t.getCategoryLegendSizeCfg(o,s,l),f=i.get("maxWidth"),c=i.get("maxHeight");i.update({maxWidth:Math.min(u.maxWidth,f||0),maxHeight:Math.min(u.maxHeight,c||0)});var h=i.get("padding"),d=i.getLayoutBBox(),p=new xa(d.x,d.y,d.width,d.height).expand(h),v=lc(t.view.viewBBox,p,a),m=v[0],g=v[1],x=lc(t.layoutBBox,p,a),b=x[0],S=x[1],C=0,w=0;a.startsWith("top")||a.startsWith("bottom")?(C=m,w=S):(C=b,w=g),i.setLocation({x:C+h[3],y:w+h[0]}),t.layoutBBox=t.layoutBBox.cut(p,a)})},e.prototype.update=function(){var t=this;this.option=this.view.getOptions().legends;var n={},i=function(h,d,p){var v=t.getId(p.field),m=t.getComponentById(v);if(m){var g=void 0,x=Uat(t.option,p.field);x!==!1&&((0,Vn.get)(x,"custom")?g=t.getCategoryCfg(h,d,p,x,!0):p.isLinear?g=t.getContinuousCfg(h,d,p,x):p.isCategory&&(g=t.getCategoryCfg(h,d,p,x))),g&&(bo(g,["container"]),m.direction=BO(x),m.component.update(g),n[v]=!0)}else{var b=t.createFieldLegend(h,d,p);b&&(b.component.init(),t.components.push(b),n[v]=!0)}};if((0,Vn.get)(this.option,"custom")){var a="global-custom",o=this.getComponentById(a);if(o){var s=this.getCategoryCfg(void 0,void 0,void 0,this.option,!0);bo(s,["container"]),o.component.update(s),n[a]=!0}else{var l=this.createCustomLegend(void 0,void 0,void 0,this.option);if(l){l.init();var u=di.FORE,f=BO(this.option);this.components.push({id:a,component:l,layer:u,direction:f,type:la.LEGEND,extra:void 0}),n[a]=!0}}}else this.loopLegends(i);var c=[];(0,Vn.each)(this.getComponents(),function(h){n[h.id]?c.push(h):h.component.destroy()}),this.components=c},e.prototype.clear=function(){r.prototype.clear.call(this),this.container.clear()},e.prototype.destroy=function(){r.prototype.destroy.call(this),this.container.remove(!0)},e.prototype.getGeometries=function(t){var n=this,i=t.geometries;return(0,Vn.each)(t.views,function(a){i=i.concat(n.getGeometries(a))}),i},e.prototype.loopLegends=function(t){var n=this.view.getRootView()===this.view;if(!!n){var i=this.getGeometries(this.view),a={};(0,Vn.each)(i,function(o){var s=o.getGroupAttributes();(0,Vn.each)(s,function(l){var u=l.getScale(l.type);!u||u.type==="identity"||a[u.field]||(t(o,l,u),a[u.field]=!0)})})}},e.prototype.createFieldLegend=function(t,n,i){var a,o=Uat(this.option,i.field),s=di.FORE,l=BO(o);if(o!==!1&&((0,Vn.get)(o,"custom")?a=this.createCustomLegend(t,n,i,o):i.isLinear?a=this.createContinuousLegend(t,n,i,o):i.isCategory&&(a=this.createCategoryLegend(t,n,i,o))),a)return a.set("field",i.field),{id:this.getId(i.field),component:a,layer:s,direction:l,type:la.LEGEND,extra:{scale:i}}},e.prototype.createCustomLegend=function(t,n,i,a){var o=this.getCategoryCfg(t,n,i,a,!0);return new Jz(o)},e.prototype.createContinuousLegend=function(t,n,i,a){var o=this.getContinuousCfg(t,n,i,bo(a,["value"]));return new $et(o)},e.prototype.createCategoryLegend=function(t,n,i,a){var o=this.getCategoryCfg(t,n,i,a);return new Jz(o)},e.prototype.getContinuousCfg=function(t,n,i,a){var o=i.getTicks(),s=(0,Vn.find)(o,function(v){return v.value===0}),l=(0,Vn.find)(o,function(v){return v.value===1}),u=o.map(function(v){var m=v.value,g=v.tickValue,x=n.mapping(i.invert(m)).join("");return{value:g,attrValue:x,color:x,scaleValue:m}});s||u.push({value:i.min,attrValue:n.mapping(i.invert(0)).join(""),color:n.mapping(i.invert(0)).join(""),scaleValue:0}),l||u.push({value:i.max,attrValue:n.mapping(i.invert(1)).join(""),color:n.mapping(i.invert(1)).join(""),scaleValue:1}),u.sort(function(v,m){return v.value-m.value});var f={min:(0,Vn.head)(u).value,max:(0,Vn.last)(u).value,colors:[],rail:{type:n.type},track:{}};n.type==="size"&&(f.track={style:{fill:n.type==="size"?this.view.getTheme().defaultColor:void 0}}),n.type==="color"&&(f.colors=u.map(function(v){return v.attrValue}));var c=this.container,h=BO(a),d=XL(h),p=(0,Vn.get)(a,"title");return p&&(p=(0,Vn.deepMix)({text:ym(i)},p)),f.container=c,f.layout=d,f.title=p,f.animateOption=pp,this.mergeLegendCfg(f,a,"continuous")},e.prototype.getCategoryCfg=function(t,n,i,a,o){var s=this.container,l=(0,Vn.get)(a,"position",xe.BOTTOM),u=_U(this.view.getTheme(),l),f=(0,Vn.get)(u,["marker"]),c=(0,Vn.get)(a,"marker"),h=XL(l),d=(0,Vn.get)(u,["pageNavigator"]),p=(0,Vn.get)(a,"pageNavigator"),v=o?ent(f,c,a.items):qL(this.view,t,n,f,c),m=(0,Vn.get)(a,"title");m&&(m=(0,Vn.deepMix)({text:i?ym(i):""},m));var g=(0,Vn.get)(a,"maxWidthRatio"),x=(0,Vn.get)(a,"maxHeightRatio"),b=this.getCategoryLegendSizeCfg(h,g,x);b.container=s,b.layout=h,b.items=v,b.title=m,b.animateOption=pp,b.pageNavigator=(0,Vn.deepMix)({},d,p);var S=this.mergeLegendCfg(b,a,l);S.reversed&&S.items.reverse();var C=(0,Vn.get)(S,"maxItemWidth");return C&&C<=1&&(S.maxItemWidth=this.view.viewBBox.width*C),S},e.prototype.mergeLegendCfg=function(t,n,i){var a=i.split("-")[0],o=_U(this.view.getTheme(),a);return(0,Vn.deepMix)({},o,t,n)},e.prototype.getId=function(t){return"".concat(this.name,"-").concat(t)},e.prototype.getComponentById=function(t){return(0,Vn.find)(this.components,function(n){return n.id===t})},e.prototype.getCategoryLegendSizeCfg=function(t,n,i){n===void 0&&(n=Y5),i===void 0&&(i=Y5);var a=this.view.viewBBox,o=a.width,s=a.height;return t==="vertical"?{maxWidth:o*n,maxHeight:s}:{maxWidth:o,maxHeight:s*i}},e}(Fl),jat=C8t;var vi=U(q());var w8t=function(r){H(e,r);function e(t){var n=r.call(this,t)||this;return n.onChangeFn=vi.noop,n.resetMeasure=function(){n.clear()},n.onValueChange=function(i){var a=i[0],o=i[1];n.start=a,n.end=o,n.changeViewData(a,o)},n.container=n.view.getLayer(di.FORE).addGroup(),n.onChangeFn=(0,vi.throttle)(n.onValueChange,20,{leading:!0}),n.width=0,n.view.on(wr.BEFORE_CHANGE_DATA,n.resetMeasure),n.view.on(wr.BEFORE_CHANGE_SIZE,n.resetMeasure),n}return Object.defineProperty(e.prototype,"name",{get:function(){return"slider"},enumerable:!1,configurable:!0}),e.prototype.destroy=function(){r.prototype.destroy.call(this),this.view.off(wr.BEFORE_CHANGE_DATA,this.resetMeasure),this.view.off(wr.BEFORE_CHANGE_SIZE,this.resetMeasure)},e.prototype.init=function(){},e.prototype.render=function(){this.option=this.view.getOptions().slider;var t=this.getSliderCfg(),n=t.start,i=t.end;(0,vi.isNil)(this.start)&&(this.start=n,this.end=i);var a=this.view.getOptions().data;this.option&&!(0,vi.isEmpty)(a)?this.slider?this.slider=this.updateSlider():(this.slider=this.createSlider(),this.slider.component.on("sliderchange",this.onChangeFn)):this.slider&&(this.slider.component.destroy(),this.slider=void 0)},e.prototype.layout=function(){var t=this;if(this.option&&!this.width&&(this.measureSlider(),setTimeout(function(){t.view.destroyed||t.changeViewData(t.start,t.end)},0)),this.slider){var n=this.view.coordinateBBox.width,i=this.slider.component.get("padding"),a=i[0],o=i[1],s=i[2],l=i[3],u=this.slider.component.getLayoutBBox(),f=new xa(u.x,u.y,Math.min(u.width,n),u.height).expand(i),c=this.getMinMaxText(this.start,this.end),h=c.minText,d=c.maxText,p=lc(this.view.viewBBox,f,xe.BOTTOM),v=p[0],m=p[1],g=lc(this.view.coordinateBBox,f,xe.BOTTOM),x=g[0],b=g[1];this.slider.component.update(E(E({},this.getSliderCfg()),{x:x+l,y:m+a,width:this.width,start:this.start,end:this.end,minText:h,maxText:d})),this.view.viewBBox=this.view.viewBBox.cut(f,xe.BOTTOM)}},e.prototype.update=function(){this.render()},e.prototype.createSlider=function(){var t=this.getSliderCfg(),n=new sE(E({container:this.container},t));return n.init(),{component:n,layer:di.FORE,direction:xe.BOTTOM,type:la.SLIDER}},e.prototype.updateSlider=function(){var t=this.getSliderCfg();if(this.width){var n=this.getMinMaxText(this.start,this.end),i=n.minText,a=n.maxText;t=E(E({},t),{width:this.width,start:this.start,end:this.end,minText:i,maxText:a})}return this.slider.component.update(t),this.slider},e.prototype.measureSlider=function(){var t=this.getSliderCfg().width;this.width=t},e.prototype.getSliderCfg=function(){var t={height:16,start:0,end:1,minText:"",maxText:"",x:0,y:0,width:this.view.coordinateBBox.width};if((0,vi.isObject)(this.option)){var n=E({data:this.getData()},(0,vi.get)(this.option,"trendCfg",{}));t=(0,vi.deepMix)({},t,this.getThemeOptions(),this.option),t=E(E({},t),{trendCfg:n})}return t.start=(0,vi.clamp)(Math.min((0,vi.isNil)(t.start)?0:t.start,(0,vi.isNil)(t.end)?1:t.end),0,1),t.end=(0,vi.clamp)(Math.max((0,vi.isNil)(t.start)?0:t.start,(0,vi.isNil)(t.end)?1:t.end),0,1),t},e.prototype.getData=function(){var t=this.view.getOptions().data,n=this.view.getYScales()[0],i=this.view.getGroupScales();if(i.length){var a=i[0],o=a.field,s=a.ticks;return t.reduce(function(l,u){return u[o]===s[0]&&l.push(u[n.field]),l},[])}return t.map(function(l){return l[n.field]||0})},e.prototype.getThemeOptions=function(){var t=this.view.getTheme();return(0,vi.get)(t,["components","slider","common"],{})},e.prototype.getMinMaxText=function(t,n){var i=this.view.getOptions().data,a=this.view.getXScale(),o=!0,s=(0,vi.valuesOfKey)(i,a.field);a.isLinear&&(s=s.sort());var l=o?s:s.reverse(),u=(0,vi.size)(i);if(!a||!u)return{};var f=(0,vi.size)(l),c=Math.floor(t*(f-1)),h=Math.floor(n*(f-1)),d=(0,vi.get)(l,[c]),p=(0,vi.get)(l,[h]),v=this.getSliderCfg().formatter;return v&&(d=v(d,i[c],c),p=v(p,i[h],h)),{minText:d,maxText:p}},e.prototype.changeViewData=function(t,n){var i=this.view.getOptions().data,a=this.view.getXScale(),o=(0,vi.size)(i);if(!(!a||!o)){var s=!0,l=(0,vi.valuesOfKey)(i,a.field),u=this.view.getXScale().isLinear?l.sort(function(p,v){return Number(p)-Number(v)}):l,f=s?u:u.reverse(),c=(0,vi.size)(f),h=Math.floor(t*(c-1)),d=Math.floor(n*(c-1));this.view.filter(a.field,function(p,v){var m=f.indexOf(p);return m>-1?lp(m,h,d):!0}),this.view.render(!0)}},e.prototype.getComponents=function(){return this.slider?[this.slider]:[]},e.prototype.clear=function(){this.slider&&(this.slider.component.destroy(),this.slider=void 0),this.width=0,this.start=void 0,this.end=void 0},e}(Fl),Wat=w8t;var _a=U(q());var GO=0,Vat=8,E8t=32,A8t=20,M8t=function(r){H(e,r);function e(t){var n=r.call(this,t)||this;return n.onChangeFn=_a.noop,n.resetMeasure=function(){n.clear()},n.onValueChange=function(i){var a=i.ratio,o=n.getValidScrollbarCfg().animate;n.ratio=(0,_a.clamp)(a,0,1);var s=n.view.getOptions().animate;o||n.view.animate(!1),n.changeViewData(n.getScrollRange(),!0),n.view.animate(s)},n.container=n.view.getLayer(di.FORE).addGroup(),n.onChangeFn=(0,_a.throttle)(n.onValueChange,20,{leading:!0}),n.trackLen=0,n.thumbLen=0,n.ratio=0,n.view.on(wr.BEFORE_CHANGE_DATA,n.resetMeasure),n.view.on(wr.BEFORE_CHANGE_SIZE,n.resetMeasure),n}return Object.defineProperty(e.prototype,"name",{get:function(){return"scrollbar"},enumerable:!1,configurable:!0}),e.prototype.destroy=function(){r.prototype.destroy.call(this),this.view.off(wr.BEFORE_CHANGE_DATA,this.resetMeasure),this.view.off(wr.BEFORE_CHANGE_SIZE,this.resetMeasure)},e.prototype.init=function(){},e.prototype.render=function(){this.option=this.view.getOptions().scrollbar,this.option?this.scrollbar?this.scrollbar=this.updateScrollbar():(this.scrollbar=this.createScrollbar(),this.scrollbar.component.on("scrollchange",this.onChangeFn)):this.scrollbar&&(this.scrollbar.component.destroy(),this.scrollbar=void 0)},e.prototype.layout=function(){var t=this;if(this.option&&!this.trackLen&&(this.measureScrollbar(),setTimeout(function(){t.view.destroyed||t.changeViewData(t.getScrollRange(),!0)})),this.scrollbar){var n=this.view.coordinateBBox.width,i=this.scrollbar.component.get("padding"),a=this.scrollbar.component.getLayoutBBox(),o=new xa(a.x,a.y,Math.min(a.width,n),a.height).expand(i),s=this.getScrollbarComponentCfg(),l=void 0,u=void 0;if(s.isHorizontal){var f=lc(this.view.viewBBox,o,xe.BOTTOM),c=f[0],h=f[1],d=lc(this.view.coordinateBBox,o,xe.BOTTOM),p=d[0],v=d[1];l=p,u=h}else{var m=lc(this.view.viewBBox,o,xe.RIGHT),c=m[0],h=m[1],g=lc(this.view.viewBBox,o,xe.RIGHT),p=g[0],v=g[1];l=p,u=h}l+=i[3],u+=i[0],this.trackLen?this.scrollbar.component.update(E(E({},s),{x:l,y:u,trackLen:this.trackLen,thumbLen:this.thumbLen,thumbOffset:(this.trackLen-this.thumbLen)*this.ratio})):this.scrollbar.component.update(E(E({},s),{x:l,y:u})),this.view.viewBBox=this.view.viewBBox.cut(o,s.isHorizontal?xe.BOTTOM:xe.RIGHT)}},e.prototype.update=function(){this.render()},e.prototype.getComponents=function(){return this.scrollbar?[this.scrollbar]:[]},e.prototype.clear=function(){this.scrollbar&&(this.scrollbar.component.destroy(),this.scrollbar=void 0),this.trackLen=0,this.thumbLen=0,this.ratio=0,this.cnt=0,this.step=0,this.data=void 0,this.xScaleCfg=void 0,this.yScalesCfg=[]},e.prototype.setValue=function(t){this.onValueChange({ratio:t})},e.prototype.getValue=function(){return this.ratio},e.prototype.getThemeOptions=function(){var t=this.view.getTheme();return(0,_a.get)(t,["components","scrollbar","common"],{})},e.prototype.getScrollbarTheme=function(t){var n=(0,_a.get)(this.view.getTheme(),["components","scrollbar"]),i=t||{},a=i.thumbHighlightColor,o=rr(i,["thumbHighlightColor"]);return{default:(0,_a.deepMix)({},(0,_a.get)(n,["default","style"],{}),o),hover:(0,_a.deepMix)({},(0,_a.get)(n,["hover","style"],{}),{thumbColor:a})}},e.prototype.measureScrollbar=function(){var t=this.view.getXScale(),n=this.view.getYScales().slice();this.data=this.getScrollbarData(),this.step=this.getStep(),this.cnt=this.getCnt();var i=this.getScrollbarComponentCfg(),a=i.trackLen,o=i.thumbLen;this.trackLen=a,this.thumbLen=o,this.xScaleCfg={field:t.field,values:t.values||[]},this.yScalesCfg=n},e.prototype.getScrollRange=function(){var t=Math.floor((this.cnt-this.step)*(0,_a.clamp)(this.ratio,0,1)),n=Math.min(t+this.step-1,this.cnt-1);return[t,n]},e.prototype.changeViewData=function(t,n){var i=this,a=t[0],o=t[1],s=this.getValidScrollbarCfg().type,l=s!=="vertical",u=(0,_a.valuesOfKey)(this.data,this.xScaleCfg.field),f=this.view.getXScale().isLinear?u.sort(function(h,d){return Number(h)-Number(d)}):u,c=l?f:f.reverse();this.yScalesCfg.forEach(function(h){i.view.scale(h.field,{formatter:h.formatter,type:h.type,min:h.min,max:h.max,tickMethod:h.tickMethod})}),this.view.filter(this.xScaleCfg.field,function(h){var d=c.indexOf(h);return d>-1?lp(d,a,o):!0}),this.view.render(!0)},e.prototype.createScrollbar=function(){var t=this.getValidScrollbarCfg().type,n=t!=="vertical",i=new xL(E(E({container:this.container},this.getScrollbarComponentCfg()),{x:0,y:0}));return i.init(),{component:i,layer:di.FORE,direction:n?xe.BOTTOM:xe.RIGHT,type:la.SCROLLBAR}},e.prototype.updateScrollbar=function(){var t=this.getScrollbarComponentCfg(),n=this.trackLen?E(E({},t),{trackLen:this.trackLen,thumbLen:this.thumbLen,thumbOffset:(this.trackLen-this.thumbLen)*this.ratio}):E({},t);return this.scrollbar.component.update(n),this.scrollbar},e.prototype.getStep=function(){if(this.step)return this.step;var t=this.view.coordinateBBox,n=this.getValidScrollbarCfg(),i=n.type,a=n.categorySize,o=i!=="vertical";return Math.floor((o?t.width:t.height)/a)},e.prototype.getCnt=function(){if(this.cnt)return this.cnt;var t=this.view.getXScale(),n=this.getScrollbarData(),i=(0,_a.valuesOfKey)(n,t.field);return(0,_a.size)(i)},e.prototype.getScrollbarComponentCfg=function(){var t=this.view,n=t.coordinateBBox,i=t.viewBBox,a=this.getValidScrollbarCfg(),o=a.type,s=a.padding,l=a.width,u=a.height,f=a.style,c=o!=="vertical",h=s[0],d=s[1],p=s[2],v=s[3],m=c?{x:n.minX+v,y:i.maxY-u-p}:{x:i.maxX-l-d,y:n.minY+h},g=this.getStep(),x=this.getCnt(),b=c?n.width-v-d:n.height-h-p,S=Math.max(b*(0,_a.clamp)(g/x,0,1),A8t);return E(E({},this.getThemeOptions()),{x:m.x,y:m.y,size:c?u:l,isHorizontal:c,trackLen:b,thumbLen:S,thumbOffset:0,theme:this.getScrollbarTheme(f)})},e.prototype.getValidScrollbarCfg=function(){var t={type:"horizontal",categorySize:E8t,width:Vat,height:Vat,padding:[0,0,0,0],animate:!0,style:{}};return(0,_a.isObject)(this.option)&&(t=E(E({},t),this.option)),(!(0,_a.isObject)(this.option)||!this.option.padding)&&(t.padding=t.type==="horizontal"?[GO,0,GO,0]:[0,GO,0,GO]),t},e.prototype.getScrollbarData=function(){var t=this.view.getCoordinate(),n=this.getValidScrollbarCfg(),i=this.view.getOptions().data||[];return t.isReflect("y")&&n.type==="vertical"&&(i=mn([],i,!0).reverse()),i},e}(Fl),Hat=M8t;var Ga=U(q());var T8t={fill:"#CCD6EC",opacity:.3};function I8t(r,e,t){var n=Drt(r,e,t);if(n.length){n=(0,Ga.flatten)(n);for(var i=0,a=n;i1){for(var p=n[0],v=Math.abs(e.y-p[0].y),m=0,g=n;md.maxY&&(d=j)):(j.minXd.maxX&&(d=j)),p.x=Math.min(j.minX,p.minX),p.y=Math.min(j.minY,p.minY),p.width=Math.max(j.maxX,p.maxX)-p.x,p.height=Math.max(j.maxY,p.maxY)-p.y});var v=n.backgroundGroup,m=n.coordinateBBox,g=void 0;if(c.isRect){var x=n.getXScale(),b=t||{},S=b.appendRatio,C=b.appendWidth;(0,Ga.isNil)(C)&&(S=(0,Ga.isNil)(S)?x.isLinear?0:.25:S,C=c.isTransposed?S*d.height:S*h.width);var w=void 0,A=void 0,I=void 0,P=void 0;c.isTransposed?(w=m.minX,A=Math.min(d.minY,h.minY)-C,I=m.width,P=p.height+C*2):(w=Math.min(h.minX,d.minX)-C,A=m.minY,I=p.width+C*2,P=m.height),g=[["M",w,A],["L",w+I,A],["L",w+I,A+P],["L",w,A+P],["Z"]]}else{var L=(0,Ga.head)(u),M=(0,Ga.last)(u),O=sp(L.getModel(),c).startAngle,F=sp(M.getModel(),c).endAngle,k=c.getCenter(),G=c.getRadius(),D=c.innerRadius*G;g=yu(k.x,k.y,G,O,F,D)}if(this.regionPath)this.regionPath.attr("path",g),this.regionPath.show();else{var N=(0,Ga.get)(t,"style",T8t);this.regionPath=v.addShape({type:"path",name:"active-region",capture:!1,attrs:E(E({},N),{path:g})})}}}},e.prototype.hide=function(){this.regionPath&&this.regionPath.hide(),this.items=null},e.prototype.destroy=function(){this.hide(),this.regionPath&&this.regionPath.remove(!0),r.prototype.destroy.call(this)},e}(Tr),Yat=L8t;var QU=U(q());var zO=U(q());var O8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.timeStamp=0,t}return e.prototype.show=function(){var t=this.context,n=t.event,i=t.view,a=i.isTooltipLocked();if(!a){var o=this.timeStamp,s=+new Date,l=(0,zO.get)(t.view.getOptions(),"tooltip.showDelay",16);if(s-o>l){var u=this.location,f={x:n.x,y:n.y};(!u||!(0,zO.isEqual)(u,f))&&this.showTooltip(i,f),this.timeStamp=s,this.location=f}}},e.prototype.hide=function(){var t=this.context.view,n=t.getController("tooltip"),i=this.context.event,a=i.clientX,o=i.clientY;n.isCursorEntered({x:a,y:o})||t.isTooltipLocked()||(this.hideTooltip(t),this.location=null)},e.prototype.showTooltip=function(t,n){t.showTooltip(n)},e.prototype.hideTooltip=function(t){t.hideTooltip()},e}(Tr),UO=O8t;var D8t=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.showTooltip=function(t,n){var i=Rl(t);(0,QU.each)(i,function(a){var o=kL(t,a,n);a.showTooltip(o)})},e.prototype.hideTooltip=function(t){var n=Rl(t);(0,QU.each)(n,function(i){i.hideTooltip()})},e}(UO),Xat=D8t;var g1=U(q());var P8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.timeStamp=0,t}return e.prototype.destroy=function(){r.prototype.destroy.call(this),this.tooltip&&this.tooltip.destroy()},e.prototype.show=function(){var t=this.context,n=t.event,i=this.timeStamp,a=+new Date;if(a-i>16){var o=this.location,s={x:n.x,y:n.y};(!o||!(0,g1.isEqual)(o,s))&&this.showTooltip(s),this.timeStamp=a,this.location=s}},e.prototype.hide=function(){this.hideTooltip(),this.location=null},e.prototype.showTooltip=function(t){var n=this.context,i=n.event,a=i.target;if(a&&a.get("tip")){this.tooltip||this.renderTooltip();var o=a.get("tip");this.tooltip.update(E({title:o},t)),this.tooltip.show()}},e.prototype.hideTooltip=function(){this.tooltip&&this.tooltip.hide()},e.prototype.renderTooltip=function(){var t,n=this.context.view,i=n.canvas,a={start:{x:0,y:0},end:{x:i.get("width"),y:i.get("height")}},o=n.getTheme(),s=(0,g1.get)(o,["components","tooltip","domStyles"],{}),l=new Vb({parent:i.get("el").parentNode,region:a,visible:!1,crosshairs:null,domStyles:E({},(0,g1.deepMix)({},s,(t={},t[rs.CONTAINER_CLASS]={"max-width":"50%"},t[rs.TITLE_CLASS]={"word-break":"break-all"},t)))});l.init(),l.setCapture(!1),this.tooltip=l},e}(Tr),qat=P8t;var x1=U(q());var Kat=U(q());var k8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.stateName="",t}return e.prototype.hasState=function(t){return t.hasState(this.stateName)},e.prototype.setElementState=function(t,n){t.setState(this.stateName,n)},e.prototype.setState=function(){this.setStateEnable(!0)},e.prototype.clear=function(){var t=this.context.view;this.clearViewState(t)},e.prototype.clearViewState=function(t){var n=this,i=OL(t,this.stateName);(0,Kat.each)(i,function(a){n.setElementState(a,!1)})},e}(Tr),y1=k8t;function Zat(r){return(0,x1.get)(r.get("delegateObject"),"item")}var R8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.ignoreListItemStates=["unchecked"],t}return e.prototype.isItemIgnore=function(t,n){var i=this.ignoreListItemStates,a=i.filter(function(o){return n.hasState(t,o)});return!!a.length},e.prototype.setStateByComponent=function(t,n,i){var a=this.context.view,o=t.get("field"),s=Hi(a);this.setElementsStateByItem(s,o,n,i)},e.prototype.setStateByElement=function(t,n){this.setElementState(t,n)},e.prototype.isMathItem=function(t,n,i){var a=this.context.view,o=xh(a,n),s=os(t,n);return!(0,x1.isNil)(s)&&i.name===o.getText(s)},e.prototype.setElementsStateByItem=function(t,n,i,a){var o=this;(0,x1.each)(t,function(s){o.isMathItem(s,n,i)&&s.setState(o.stateName,a)})},e.prototype.setStateEnable=function(t){var n=xu(this.context);if(n)TL(this.context)&&this.setStateByElement(n,t);else{var i=nc(this.context);if(cp(i)){var a=i.item,o=i.component;if(a&&o&&!this.isItemIgnore(a,o)){var s=this.context.event.gEvent;if(s&&s.fromShape&&s.toShape&&Zat(s.fromShape)===Zat(s.toShape))return;this.setStateByComponent(o,a,t)}}}},e.prototype.toggle=function(){var t=xu(this.context);if(t){var n=t.hasState(this.stateName);this.setElementState(t,!n)}},e.prototype.reset=function(){this.setStateEnable(!1)},e}(y1),b1=R8t;var N8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.stateName="active",t}return e.prototype.active=function(){this.setState()},e}(b1),$at=N8t;var _1=U(q()),F8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.cache={},t}return e.prototype.getColorScale=function(t,n){var i=n.geometry.getAttribute("color");if(!i)return null;var a=t.getScaleByField(i.getFields()[0]);return a},e.prototype.getLinkPath=function(t,n){var i=this.context.view,a=i.getCoordinate().isTransposed,o=t.shape.getCanvasBBox(),s=n.shape.getCanvasBBox(),l=a?[["M",o.minX,o.minY],["L",s.minX,s.maxY],["L",s.maxX,s.maxY],["L",o.maxX,o.minY],["Z"]]:[["M",o.maxX,o.minY],["L",s.minX,s.minY],["L",s.minX,s.maxY],["L",o.maxX,o.maxY],["Z"]];return l},e.prototype.addLinkShape=function(t,n,i,a){var o={opacity:.4,fill:n.shape.attr("fill")};t.addShape({type:"path",attrs:E(E({},(0,_1.deepMix)({},o,(0,_1.isFunction)(a)?a(o,n):a)),{path:this.getLinkPath(n,i)})})},e.prototype.linkByElement=function(t,n){var i=this,a=this.context.view,o=this.getColorScale(a,t);if(!!o){var s=os(t,o.field);if(!this.cache[s]){var l=grt(a,o.field,s),u=this.linkGroup,f=u.addGroup();this.cache[s]=f;var c=l.length;(0,_1.each)(l,function(h,d){if(d=0},n)},e}(S1),tj=H8t;var Y8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.stateName="active",t}return e.prototype.highlight=function(){this.setState()},e.prototype.setElementState=function(t,n){var i=this.context.view,a=Hi(i);jO(a,function(o){return t===o},n)},e.prototype.clear=function(){var t=this.context.view;w1(t)},e}(C1),not=Y8t;var X8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.stateName="selected",t}return e.prototype.selected=function(){this.setState()},e}(S1),iot=X8t;var q8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.stateName="selected",t}return e.prototype.selected=function(){this.setState()},e}(b1),aot=q8t;var K8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.stateName="selected",t}return e.prototype.selected=function(){this.setState()},e}(C1),oot=K8t;var VE=U(q());var Z8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.stateName="",t.ignoreItemStates=[],t}return e.prototype.getTriggerListInfo=function(){var t=nc(this.context),n=null;return cp(t)&&(n={item:t.item,list:t.component}),n},e.prototype.getAllowComponents=function(){var t=this,n=this.context.view,i=PL(n),a=[];return(0,VE.each)(i,function(o){o.isList()&&t.allowSetStateByElement(o)&&a.push(o)}),a},e.prototype.hasState=function(t,n){return t.hasState(n,this.stateName)},e.prototype.clearAllComponentsState=function(){var t=this,n=this.getAllowComponents();(0,VE.each)(n,function(i){i.clearItemsState(t.stateName)})},e.prototype.allowSetStateByElement=function(t){var n=t.get("field");if(!n)return!1;if(this.cfg&&this.cfg.componentNames){var i=t.get("name");if(this.cfg.componentNames.indexOf(i)===-1)return!1}var a=this.context.view,o=xh(a,n);return o&&o.isCategory},e.prototype.allowSetStateByItem=function(t,n){var i=this.ignoreItemStates;if(i.length){var a=i.filter(function(o){return n.hasState(t,o)});return a.length===0}return!0},e.prototype.setStateByElement=function(t,n,i){var a=t.get("field"),o=this.context.view,s=xh(o,a),l=os(n,a),u=s.getText(l);this.setItemsState(t,u,i)},e.prototype.setStateEnable=function(t){var n=this,i=xu(this.context);if(i){var a=this.getAllowComponents();(0,VE.each)(a,function(u){n.setStateByElement(u,i,t)})}else{var o=nc(this.context);if(cp(o)){var s=o.item,l=o.component;this.allowSetStateByElement(l)&&this.allowSetStateByItem(s,l)&&this.setItemState(l,s,t)}}},e.prototype.setItemsState=function(t,n,i){var a=this,o=t.getItems();(0,VE.each)(o,function(s){s.name===n&&a.setItemState(t,s,i)})},e.prototype.setItemState=function(t,n,i){t.setItemState(n,this.stateName,i)},e.prototype.setState=function(){this.setStateEnable(!0)},e.prototype.reset=function(){this.setStateEnable(!1)},e.prototype.toggle=function(){var t=this.getTriggerListInfo();if(t&&t.item){var n=t.list,i=t.item,a=this.hasState(n,i);this.setItemState(n,i,!a)}},e.prototype.clear=function(){var t=this.getTriggerListInfo();t?t.list.clearItemsState(this.stateName):this.clearAllComponentsState()},e}(Tr),Gl=Z8t;var $8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.stateName="active",t}return e.prototype.active=function(){this.setState()},e}(Gl),sot=$8t;var HE=U(q());var lot=U(q()),uot="inactive",fot="active";function cot(r){var e=r.getItems();(0,lot.each)(e,function(t){r.hasState(t,fot)&&r.setItemState(t,fot,!1),r.hasState(t,uot)&&r.setItemState(t,uot,!1)})}var YE="inactive",o0="active",Q8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.stateName=o0,t.ignoreItemStates=["unchecked"],t}return e.prototype.setItemsState=function(t,n,i){this.setHighlightBy(t,function(a){return a.name===n},i)},e.prototype.setItemState=function(t,n,i){var a=t.getItems();this.setHighlightBy(t,function(o){return o===n},i)},e.prototype.setHighlightBy=function(t,n,i){var a=t.getItems();if(i)(0,HE.each)(a,function(l){n(l)?(t.hasState(l,YE)&&t.setItemState(l,YE,!1),t.setItemState(l,o0,!0)):t.hasState(l,o0)||t.setItemState(l,YE,!0)});else{var o=t.getItemsByState(o0),s=!0;(0,HE.each)(o,function(l){if(!n(l))return s=!1,!1}),s?this.clear():(0,HE.each)(a,function(l){n(l)&&(t.hasState(l,o0)&&t.setItemState(l,o0,!1),t.setItemState(l,YE,!0))})}},e.prototype.highlight=function(){this.setState()},e.prototype.clear=function(){var t=this.getTriggerListInfo();if(t)cot(t.list);else{var n=this.getAllowComponents();(0,HE.each)(n,function(i){i.clearItemsState(o0),i.clearItemsState(YE)})}},e}(Gl),VO=Q8t;var J8t=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.stateName="selected",t}return e.prototype.selected=function(){this.setState()},e}(Gl),hot=J8t;var tHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.stateName="unchecked",t}return e.prototype.unchecked=function(){this.setState()},e}(Gl),dot=tHt;var XE=U(q());var A1="unchecked",HO="checked",eHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.stateName=HO,t}return e.prototype.setItemState=function(t,n,i){this.setCheckedBy(t,function(a){return a===n},i)},e.prototype.setCheckedBy=function(t,n,i){var a=t.getItems();i&&(0,XE.each)(a,function(o){n(o)?(t.hasState(o,A1)&&t.setItemState(o,A1,!1),t.setItemState(o,HO,!0)):t.hasState(o,HO)||t.setItemState(o,A1,!0)})},e.prototype.toggle=function(){var t=this.getTriggerListInfo();if(t&&t.item){var n=t.list,i=t.item,a=!(0,XE.some)(n.getItems(),function(o){return n.hasState(o,A1)});a||n.hasState(i,A1)?this.setItemState(n,i,!0):this.reset()}},e.prototype.checked=function(){this.setState()},e.prototype.reset=function(){var t=this.getAllowComponents();(0,XE.each)(t,function(n){n.clearItemsState(HO),n.clearItemsState(A1)})},e}(Gl),pot=eHt;var M1="unchecked",rHt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.toggle=function(){var t=this.getTriggerListInfo();if(t==null?void 0:t.item){var n=t.list,i=t.item,a=n.getItems(),o=a.filter(function(x){return!n.hasState(x,M1)}),s=a.filter(function(x){return n.hasState(x,M1)}),l=o[0];if(a.length===o.length)for(var u=0,f=a;u16&&o.get("name")==="legend-item-radio"){var s=this.location,l={x:n.x,y:n.y};this.timeStamp=a,this.location=l,(!s||!(0,mot.isEqual)(s,l))&&this.showTooltip(l)}},e.prototype.hideTip=function(){this.hideTooltip(),this.location=null},e.prototype.showTooltip=function(t){var n=this.context,i=n.event,a=i.target;if(a&&a.get("tip")){this.tooltip||this.renderTooltip();var o=n.view.getCanvas().get("el").getBoundingClientRect(),s=o.x,l=o.y;this.tooltip.update(E(E({title:a.get("tip")},t),{x:t.x+s,y:t.y+l})),this.tooltip.show()}},e.prototype.hideTooltip=function(){this.tooltip&&this.tooltip.hide()},e.prototype.renderTooltip=function(){var t,n=(t={},t[rs.CONTAINER_CLASS]={padding:"6px 8px",transform:"translate(-50%, -80%)",background:"rgba(0,0,0,0.75)",color:"#fff","border-radius":"2px","z-index":100},t[rs.TITLE_CLASS]={"font-size":"12px","line-height":"14px","margin-bottom":0,"word-break":"break-all"},t);document.getElementById(ej)&&document.body.removeChild(document.getElementById(ej));var i=new Vb({parent:document.body,region:null,visible:!1,crosshairs:null,domStyles:n,containerId:ej});i.init(),i.setCapture(!1),this.tooltip=i},e}(Gl),yot=nHt;var xot=U(q());var YO=U(q());var iHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.maskShape=null,t.points=[],t.starting=!1,t.moving=!1,t.preMovePoint=null,t.shapeType="path",t}return e.prototype.getCurrentPoint=function(){var t=this.context.event;return{x:t.x,y:t.y}},e.prototype.emitEvent=function(t){var n="mask:".concat(t),i=this.context.view,a=this.context.event;i.emit(n,{target:this.maskShape,shape:this.maskShape,points:this.points,x:a.x,y:a.y})},e.prototype.createMask=function(){var t=this.context.view,n=this.getMaskAttrs(),i=t.foregroundGroup.addShape({type:this.shapeType,name:"mask",draggable:!0,attrs:E({fill:"#C5D4EB",opacity:.3},n)});return i},e.prototype.getMaskPath=function(){return[]},e.prototype.show=function(){this.maskShape&&(this.maskShape.show(),this.emitEvent("show"))},e.prototype.start=function(t){this.starting=!0,this.moving=!1,this.points=[this.getCurrentPoint()],this.maskShape||(this.maskShape=this.createMask(),this.maskShape.set("capture",!1)),this.updateMask(t==null?void 0:t.maskStyle),this.emitEvent("start")},e.prototype.moveStart=function(){this.moving=!0,this.preMovePoint=this.getCurrentPoint()},e.prototype.move=function(){if(!(!this.moving||!this.maskShape)){var t=this.getCurrentPoint(),n=this.preMovePoint,i=t.x-n.x,a=t.y-n.y,o=this.points;(0,YO.each)(o,function(s){s.x+=i,s.y+=a}),this.updateMask(),this.emitEvent("change"),this.preMovePoint=t}},e.prototype.updateMask=function(t){var n=(0,YO.deepMix)({},this.getMaskAttrs(),t);this.maskShape.attr(n)},e.prototype.moveEnd=function(){this.moving=!1,this.preMovePoint=null},e.prototype.end=function(){this.starting=!1,this.emitEvent("end"),this.maskShape&&this.maskShape.set("capture",!0)},e.prototype.hide=function(){this.maskShape&&(this.maskShape.hide(),this.emitEvent("hide"))},e.prototype.resize=function(){this.starting&&this.maskShape&&(this.points.push(this.getCurrentPoint()),this.updateMask(),this.emitEvent("change"))},e.prototype.destroy=function(){this.points=[],this.maskShape&&this.maskShape.remove(),this.maskShape=null,this.preMovePoint=null,r.prototype.destroy.call(this)},e}(Tr),T1=iHt;var aHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.shapeType="circle",t}return e.prototype.getMaskAttrs=function(){var t=this.points,n=(0,xot.last)(this.points),i=0,a=0,o=0;if(t.length){var s=t[0];i=Xb(s,n)/2,a=(n.x+s.x)/2,o=(n.y+s.y)/2}return{x:a,y:o,r:i}},e}(T1),bot=aHt;var s0=U(q());var XO=U(q());var oHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.shapeType="rect",t}return e.prototype.getRegion=function(){var t=this.points;return{start:(0,XO.head)(t),end:(0,XO.last)(t)}},e.prototype.getMaskAttrs=function(){var t=this.getRegion(),n=t.start,i=t.end,a=Math.min(n.x,i.x),o=Math.min(n.y,i.y),s=Math.abs(i.x-n.x),l=Math.abs(i.y-n.y);return{x:a,y:o,width:s,height:l}},e}(T1),qO=oHt;function _ot(r){r.x=(0,s0.clamp)(r.x,0,1),r.y=(0,s0.clamp)(r.y,0,1)}var sHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.dim="x",t.inPlot=!0,t}return e.prototype.getRegion=function(){var t=null,n=null,i=this.points,a=this.dim,o=this.context.view.getCoordinate(),s=o.invert((0,s0.head)(i)),l=o.invert((0,s0.last)(i));return this.inPlot&&(_ot(s),_ot(l)),a==="x"?(t=o.convert({x:s.x,y:0}),n=o.convert({x:l.x,y:1})):(t=o.convert({x:0,y:s.y}),n=o.convert({x:1,y:l.y})),{start:t,end:n}},e}(qO),rj=sHt;var Sot=U(q());var lHt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getMaskPath=function(){var t=this.points,n=[];return t.length&&((0,Sot.each)(t,function(i,a){a===0?n.push(["M",i.x,i.y]):n.push(["L",i.x,i.y])}),n.push(["L",t[0].x,t[0].y])),n},e.prototype.getMaskAttrs=function(){return{path:this.getMaskPath()}},e.prototype.addPoint=function(){this.resize()},e}(T1),KO=lHt;var uHt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getMaskPath=function(){var t=this.points;return xrt(t,!0)},e}(KO),Cot=uHt;var fHt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.setCursor=function(t){var n=this.context.view;n.getCanvas().setCursor(t)},e.prototype.default=function(){this.setCursor("default")},e.prototype.pointer=function(){this.setCursor("pointer")},e.prototype.move=function(){this.setCursor("move")},e.prototype.crosshair=function(){this.setCursor("crosshair")},e.prototype.wait=function(){this.setCursor("wait")},e.prototype.help=function(){this.setCursor("help")},e.prototype.text=function(){this.setCursor("text")},e.prototype.eResize=function(){this.setCursor("e-resize")},e.prototype.wResize=function(){this.setCursor("w-resize")},e.prototype.nResize=function(){this.setCursor("n-resize")},e.prototype.sResize=function(){this.setCursor("s-resize")},e.prototype.neResize=function(){this.setCursor("ne-resize")},e.prototype.nwResize=function(){this.setCursor("nw-resize")},e.prototype.seResize=function(){this.setCursor("se-resize")},e.prototype.swResize=function(){this.setCursor("sw-resize")},e.prototype.nsResize=function(){this.setCursor("ns-resize")},e.prototype.ewResize=function(){this.setCursor("ew-resize")},e}(Tr),wot=fHt;var Eot=U(q());var cHt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.filterView=function(t,n,i){var a=this;t.getScaleByField(n)&&t.filter(n,i),t.views&&t.views.length&&(0,Eot.each)(t.views,function(o){a.filterView(o,n,i)})},e.prototype.filter=function(){var t=nc(this.context);if(t){var n=this.context.view,i=t.component,a=i.get("field");if(cp(t)){if(a){var o=i.getItemsByState("unchecked"),s=xh(n,a),l=o.map(function(h){return h.name});l.length?this.filterView(n,a,function(h){var d=s.getText(h);return!l.includes(d)}):this.filterView(n,a,null),n.render(!0)}}else if(IL(t)){var u=i.getValue(),f=u[0],c=u[1];this.filterView(n,a,function(h){return h>=f&&h<=c}),n.render(!0)}}},e}(Tr),Aot=cHt;function Mot(r,e,t,n){var i=Math.min(t[e],n[e]),a=Math.max(t[e],n[e]),o=r.range,s=o[0],l=o[1];if(il&&(a=l),i===l&&a===l)return null;var u=r.invert(i),f=r.invert(a);if(r.isCategory){var c=r.values.indexOf(u),h=r.values.indexOf(f),d=r.values.slice(c,h+1);return function(p){return d.includes(p)}}else return function(p){return p>=u&&p<=f}}var ls;(function(r){r.FILTER="brush-filter-processing",r.RESET="brush-filter-reset",r.BEFORE_FILTER="brush-filter:beforefilter",r.AFTER_FILTER="brush-filter:afterfilter",r.BEFORE_RESET="brush-filter:beforereset",r.AFTER_RESET="brush-filter:afterreset"})(ls||(ls={}));var hHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.dims=["x","y"],t.startPoint=null,t.isStarted=!1,t}return e.prototype.hasDim=function(t){return this.dims.includes(t)},e.prototype.start=function(){var t=this.context;this.isStarted=!0,this.startPoint=t.getCurrentPoint()},e.prototype.filter=function(){var t,n;if(hp(this.context)){var i=this.context.event.target,a=i.getCanvasBBox();t={x:a.x,y:a.y},n={x:a.maxX,y:a.maxY}}else{if(!this.isStarted)return;t=this.startPoint,n=this.context.getCurrentPoint()}if(!(Math.abs(t.x-n.x)<5||Math.abs(t.x-n.y)<5)){var o=this.context,s=o.view,l=o.event,u={view:s,event:l,dims:this.dims};s.emit(ls.BEFORE_FILTER,zn.fromData(s,ls.BEFORE_FILTER,u));var f=s.getCoordinate(),c=f.invert(n),h=f.invert(t);if(this.hasDim("x")){var d=s.getXScale(),p=Mot(d,"x",c,h);this.filterView(s,d.field,p)}if(this.hasDim("y")){var v=s.getYScales()[0],p=Mot(v,"y",c,h);this.filterView(s,v.field,p)}this.reRender(s,{source:ls.FILTER}),s.emit(ls.AFTER_FILTER,zn.fromData(s,ls.AFTER_FILTER,u))}},e.prototype.end=function(){this.isStarted=!1},e.prototype.reset=function(){var t=this.context.view;if(t.emit(ls.BEFORE_RESET,zn.fromData(t,ls.BEFORE_RESET,{})),this.isStarted=!1,this.hasDim("x")){var n=t.getXScale();this.filterView(t,n.field,null)}if(this.hasDim("y")){var i=t.getYScales()[0];this.filterView(t,i.field,null)}this.reRender(t,{source:ls.RESET}),t.emit(ls.AFTER_RESET,zn.fromData(t,ls.AFTER_RESET,{}))},e.prototype.filterView=function(t,n,i){t.filter(n,i)},e.prototype.reRender=function(t,n){t.render(!0,n)},e}(Tr),I1=hHt;var nj=U(q());var dHt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.filterView=function(t,n,i){var a=Rl(t);(0,nj.each)(a,function(o){o.filter(n,i)})},e.prototype.reRender=function(t){var n=Rl(t);(0,nj.each)(n,function(i){i.render(!0)})},e}(I1),ZO=dHt;var qE=U(q());var pHt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.filter=function(){var t=nc(this.context),n=this.context.view,i=Hi(n);if(hp(this.context)){var a=Yb(this.context,10);a&&(0,qE.each)(i,function(p){a.includes(p)?p.show():p.hide()})}else if(t){var o=t.component,s=o.get("field");if(cp(t)){if(s){var l=o.getItemsByState("unchecked"),u=xh(n,s),f=l.map(function(p){return p.name});(0,qE.each)(i,function(p){var v=os(p,s),m=u.getText(v);f.indexOf(m)>=0?p.hide():p.show()})}}else if(IL(t)){var c=o.getValue(),h=c[0],d=c[1];(0,qE.each)(i,function(p){var v=os(p,s);v>=h&&v<=d?p.show():p.hide()})}}},e.prototype.clear=function(){var t=Hi(this.context.view);(0,qE.each)(t,function(n){n.show()})},e.prototype.reset=function(){this.clear()},e}(Tr),Tot=pHt;var l0=U(q());var vHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.byRecord=!1,t}return e.prototype.filter=function(){hp(this.context)&&(this.byRecord?this.filterByRecord():this.filterByBBox())},e.prototype.filterByRecord=function(){var t=this.context.view,n=Yb(this.context,10);if(!!n){var i=t.getXScale().field,a=t.getYScales()[0].field,o=n.map(function(l){return l.getModel().data}),s=Rl(t);(0,l0.each)(s,function(l){var u=Hi(l);(0,l0.each)(u,function(f){var c=f.getModel().data;RL(o,c,i,a)?f.show():f.hide()})})}},e.prototype.filterByBBox=function(){var t=this,n=this.context.view,i=Rl(n);(0,l0.each)(i,function(a){var o=LL(t.context,a,10),s=Hi(a);o&&(0,l0.each)(s,function(l){o.includes(l)?l.show():l.hide()})})},e.prototype.reset=function(){var t=Rl(this.context.view);(0,l0.each)(t,function(n){var i=Hi(n);(0,l0.each)(i,function(a){a.show()})})},e}(Tr),ij=vHt;var Iot=U(q());var mHt=10,gHt=5,yHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.buttonGroup=null,t.buttonCfg={name:"button",text:"button",textStyle:{x:0,y:0,fontSize:12,fill:"#333333",cursor:"pointer"},padding:[8,10],style:{fill:"#f7f7f7",stroke:"#cccccc",cursor:"pointer"},activeStyle:{fill:"#e6e6e6"}},t}return e.prototype.getButtonCfg=function(){return(0,Iot.deepMix)(this.buttonCfg,this.cfg)},e.prototype.drawButton=function(){var t=this.getButtonCfg(),n=this.context.view.foregroundGroup.addGroup({name:t.name}),i=n.addShape({type:"text",name:"button-text",attrs:E({text:t.text},t.textStyle)}),a=i.getBBox(),o=qb(t.padding),s=n.addShape({type:"rect",name:"button-rect",attrs:E({x:a.x-o[3],y:a.y-o[0],width:a.width+o[1]+o[3],height:a.height+o[0]+o[2]},t.style)});s.toBack(),n.on("mouseenter",function(){s.attr(t.activeStyle)}),n.on("mouseleave",function(){s.attr(t.style)}),this.buttonGroup=n},e.prototype.resetPosition=function(){var t=this.context.view,n=t.getCoordinate(),i=n.convert({x:1,y:1}),a=this.buttonGroup,o=a.getBBox(),s=gr.transform(null,[["t",i.x-o.width-mHt,i.y+o.height+gHt]]);a.setMatrix(s)},e.prototype.show=function(){this.buttonGroup||this.drawButton(),this.resetPosition(),this.buttonGroup.show()},e.prototype.hide=function(){this.buttonGroup&&this.buttonGroup.hide()},e.prototype.destroy=function(){var t=this.buttonGroup;t&&t.remove(),r.prototype.destroy.call(this)},e}(Tr),Lot=yHt;var xHt=4,bHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.starting=!1,t.dragStart=!1,t}return e.prototype.start=function(){this.starting=!0,this.startPoint=this.context.getCurrentPoint()},e.prototype.drag=function(){if(!!this.startPoint){var t=this.context.getCurrentPoint(),n=this.context.view,i=this.context.event;this.dragStart?n.emit("drag",{target:i.target,x:i.x,y:i.y}):Xb(t,this.startPoint)>xHt&&(n.emit("dragstart",{target:i.target,x:i.x,y:i.y}),this.dragStart=!0)}},e.prototype.end=function(){if(this.dragStart){var t=this.context.view,n=this.context.event;t.emit("dragend",{target:n.target,x:n.x,y:n.y})}this.starting=!1,this.dragStart=!1},e}(Tr),Oot=bHt;var _Ht=5,SHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.starting=!1,t.isMoving=!1,t.startPoint=null,t.startMatrix=null,t}return e.prototype.start=function(){this.starting=!0,this.startPoint=this.context.getCurrentPoint(),this.startMatrix=this.context.view.middleGroup.getMatrix()},e.prototype.move=function(){if(!!this.starting){var t=this.startPoint,n=this.context.getCurrentPoint(),i=Xb(t,n);if(i>_Ht&&!this.isMoving&&(this.isMoving=!0),this.isMoving){var a=this.context.view,o=gr.transform(this.startMatrix,[["t",n.x-t.x,n.y-t.y]]);a.backgroundGroup.setMatrix(o),a.foregroundGroup.setMatrix(o),a.middleGroup.setMatrix(o)}}},e.prototype.end=function(){this.isMoving&&(this.isMoving=!1),this.startMatrix=null,this.starting=!1,this.startPoint=null},e.prototype.reset=function(){this.starting=!1,this.startPoint=null,this.isMoving=!1;var t=this.context.view;t.backgroundGroup.resetMatrix(),t.foregroundGroup.resetMatrix(),t.middleGroup.resetMatrix(),this.isMoving=!1},e}(Tr),Dot=SHt;var aj=U(q());var Pot="x",kot="y",CHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.dims=[Pot,kot],t.cfgFields=["dims"],t.cacheScaleDefs={},t}return e.prototype.hasDim=function(t){return this.dims.includes(t)},e.prototype.getScale=function(t){var n=this.context.view;return t==="x"?n.getXScale():n.getYScales()[0]},e.prototype.resetDim=function(t){var n=this.context.view;if(this.hasDim(t)&&this.cacheScaleDefs[t]){var i=this.getScale(t);n.scale(i.field,this.cacheScaleDefs[t]),this.cacheScaleDefs[t]=null}},e.prototype.reset=function(){this.resetDim(Pot),this.resetDim(kot);var t=this.context.view;t.render(!0)},e}(Tr),$O=CHt;var wHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.startPoint=null,t.starting=!1,t.startCache={},t}return e.prototype.start=function(){var t=this;this.startPoint=this.context.getCurrentPoint(),this.starting=!0;var n=this.dims;(0,aj.each)(n,function(i){var a=t.getScale(i),o=a.min,s=a.max,l=a.values;t.startCache[i]={min:o,max:s,values:l}})},e.prototype.end=function(){this.startPoint=null,this.starting=!1,this.startCache={}},e.prototype.translate=function(){var t=this;if(!!this.starting){var n=this.startPoint,i=this.context.view.getCoordinate(),a=this.context.getCurrentPoint(),o=i.invert(n),s=i.invert(a),l=s.x-o.x,u=s.y-o.y,f=this.context.view,c=this.dims;(0,aj.each)(c,function(h){t.translateDim(h,{x:l*-1,y:u*-1})}),f.render(!0)}},e.prototype.translateDim=function(t,n){if(this.hasDim(t)){var i=this.getScale(t);i.isLinear&&this.translateLinear(t,i,n)}},e.prototype.translateLinear=function(t,n,i){var a=this.context.view,o=this.startCache[t],s=o.min,l=o.max,u=l-s,f=i[t]*u;this.cacheScaleDefs[t]||(this.cacheScaleDefs[t]={nice:n.nice,min:s,max:l}),a.scale(n.field,{nice:!1,min:s+f,max:l+f})},e.prototype.reset=function(){r.prototype.reset.call(this),this.startPoint=null,this.starting=!1},e}($O),Rot=wHt;var Not=U(q());var EHt=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.zoomRatio=.05,t}return e.prototype.zoomIn=function(){this.zoom(this.zoomRatio)},e.prototype.zoom=function(t){var n=this,i=this.dims;(0,Not.each)(i,function(a){n.zoomDim(a,t)}),this.context.view.render(!0)},e.prototype.zoomOut=function(){this.zoom(-1*this.zoomRatio)},e.prototype.zoomDim=function(t,n){if(this.hasDim(t)){var i=this.getScale(t);i.isLinear&&this.zoomLinear(t,i,n)}},e.prototype.zoomLinear=function(t,n,i){var a=this.context.view;this.cacheScaleDefs[t]||(this.cacheScaleDefs[t]={nice:n.nice,min:n.min,max:n.max});var o=this.cacheScaleDefs[t],s=o.max-o.min,l=n.min,u=n.max,f=i*s,c=l-f,h=u+f,d=h-c,p=d/s;h>c&&p<100&&p>.01&&a.scale(n.field,{nice:!1,min:l-f,max:u+f})},e}($O),Fot=EHt;var u0=U(q());function AHt(r){var e=r.gEvent.originalEvent;return e.deltaY>0}var MHt=1,THt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.scroll=function(t){var n=this.context,i=n.view,a=n.event;if(!!i.getOptions().scrollbar){var o=(t==null?void 0:t.wheelDelta)||MHt,s=i.getController("scrollbar"),l=i.getXScale(),u=i.getOptions().data,f=(0,u0.size)((0,u0.valuesOfKey)(u,l.field)),c=(0,u0.size)(l.values),h=s.getValue(),d=Math.floor((f-c)*h),p=d+(AHt(a)?o:-o),v=o/(f-c)/1e4,m=(0,u0.clamp)(p/(f-c)+v,0,1);s.setValue(m)}},e}(Tr),Bot=THt;r0("dark",FL(nnt));gw("canvas",FU);gw("svg",UU);Nl("Polygon",xit);Nl("Interval",pit);Nl("Schema",bit);Nl("Path",f1);Nl("Point",yit);Nl("Line",vit);Nl("Area",lit);Nl("Edge",uit);Nl("Heatmap",fit);Nl("Violin",Sit);mp("base",Sh);mp("interval",Dit);mp("pie",Pit);mp("polar",MO);ss("overlap",Yit);ss("distribute",Rit);ss("fixed-overlap",Hit);ss("hide-overlap",Jit);ss("limit-in-shape",Wit);ss("limit-in-canvas",Uit);ss("limit-in-plot",dat);ss("pie-outer",Fit);ss("adjust-color",rat);ss("interval-adjust-position",nat);ss("interval-hide-overlap",iat);ss("point-adjust-position",sat);ss("pie-spider",Git);ss("path-adjust-position",fat);Es("fade-in",pat);Es("fade-out",vat);Es("grow-in-x",mat);Es("grow-in-xy",yat);Es("grow-in-y",gat);Es("scale-in-x",_at);Es("scale-in-y",Sat);Es("wave-in",Mat);Es("zoom-in",Iat);Es("zoom-out",Lat);Es("position-update",bat);Es("sector-path-update",Aat);Es("path-in",xat);up("rect",Rat);up("mirror",kat);up("list",Dat);up("matrix",Pat);up("circle",Oat);up("tree",Nat);Qu("axis",zat);Qu("legend",jat);Qu("tooltip",Qb);Qu("annotation",Bat);Qu("slider",Wat);Qu("scrollbar",Hat);nr("tooltip",UO);nr("sibling-tooltip",Xat);nr("ellipsis-text",qat);nr("element-active",$at);nr("element-single-active",tot);nr("element-range-active",Jat);nr("element-highlight",E1);nr("element-highlight-by-x",rot);nr("element-highlight-by-color",eot);nr("element-single-highlight",not);nr("element-range-highlight",tj);nr("element-sibling-highlight",tj,{effectSiblings:!0,effectByRecord:!0});nr("element-selected",aot);nr("element-single-selected",oot);nr("element-range-selected",iot);nr("element-link-by-color",Qat);nr("active-region",Yat);nr("list-active",sot);nr("list-selected",hot);nr("list-highlight",VO);nr("list-unchecked",dot);nr("list-checked",pot);nr("list-focus",vot);nr("list-radio",yot);nr("legend-item-highlight",VO,{componentNames:["legend"]});nr("axis-label-highlight",VO,{componentNames:["axis"]});nr("rect-mask",qO);nr("x-rect-mask",rj,{dim:"x"});nr("y-rect-mask",rj,{dim:"y"});nr("circle-mask",bot);nr("path-mask",KO);nr("smooth-path-mask",Cot);nr("cursor",wot);nr("data-filter",Aot);nr("brush",I1);nr("brush-x",I1,{dims:["x"]});nr("brush-y",I1,{dims:["y"]});nr("sibling-filter",ZO);nr("sibling-x-filter",ZO);nr("sibling-y-filter",ZO);nr("element-filter",Tot);nr("element-sibling-filter",ij);nr("element-sibling-filter-record",ij,{byRecord:!0});nr("view-drag",Oot);nr("view-move",Dot);nr("scale-translate",Rot);nr("scale-zoom",Fot);nr("reset-button",Lot,{name:"reset-button",text:"reset"});nr("mousewheel-scroll",Bot);function Pm(r){return r.isInPlot()}xr("tooltip",{start:[{trigger:"plot:mousemove",action:"tooltip:show",throttle:{wait:50,leading:!0,trailing:!1}},{trigger:"plot:touchmove",action:"tooltip:show",throttle:{wait:50,leading:!0,trailing:!1}}],end:[{trigger:"plot:mouseleave",action:"tooltip:hide"},{trigger:"plot:leave",action:"tooltip:hide"},{trigger:"plot:touchend",action:"tooltip:hide"}]});xr("ellipsis-text",{start:[{trigger:"legend-item-name:mousemove",action:"ellipsis-text:show",throttle:{wait:50,leading:!0,trailing:!1}},{trigger:"legend-item-name:touchstart",action:"ellipsis-text:show",throttle:{wait:50,leading:!0,trailing:!1}},{trigger:"axis-label:mousemove",action:"ellipsis-text:show",throttle:{wait:50,leading:!0,trailing:!1}},{trigger:"axis-label:touchstart",action:"ellipsis-text:show",throttle:{wait:50,leading:!0,trailing:!1}}],end:[{trigger:"legend-item-name:mouseleave",action:"ellipsis-text:hide"},{trigger:"legend-item-name:touchend",action:"ellipsis-text:hide"},{trigger:"axis-label:mouseleave",action:"ellipsis-text:hide"},{trigger:"axis-label:touchend",action:"ellipsis-text:hide"}]});xr("element-active",{start:[{trigger:"element:mouseenter",action:"element-active:active"}],end:[{trigger:"element:mouseleave",action:"element-active:reset"}]});xr("element-selected",{start:[{trigger:"element:click",action:"element-selected:toggle"}]});xr("element-highlight",{start:[{trigger:"element:mouseenter",action:"element-highlight:highlight"}],end:[{trigger:"element:mouseleave",action:"element-highlight:reset"}]});xr("element-highlight-by-x",{start:[{trigger:"element:mouseenter",action:"element-highlight-by-x:highlight"}],end:[{trigger:"element:mouseleave",action:"element-highlight-by-x:reset"}]});xr("element-highlight-by-color",{start:[{trigger:"element:mouseenter",action:"element-highlight-by-color:highlight"}],end:[{trigger:"element:mouseleave",action:"element-highlight-by-color:reset"}]});xr("legend-active",{start:[{trigger:"legend-item:mouseenter",action:["list-active:active","element-active:active"]}],end:[{trigger:"legend-item:mouseleave",action:["list-active:reset","element-active:reset"]}]});xr("legend-highlight",{start:[{trigger:"legend-item:mouseenter",action:["legend-item-highlight:highlight","element-highlight:highlight"]}],end:[{trigger:"legend-item:mouseleave",action:["legend-item-highlight:reset","element-highlight:reset"]}]});xr("axis-label-highlight",{start:[{trigger:"axis-label:mouseenter",action:["axis-label-highlight:highlight","element-highlight:highlight"]}],end:[{trigger:"axis-label:mouseleave",action:["axis-label-highlight:reset","element-highlight:reset"]}]});xr("element-list-highlight",{start:[{trigger:"element:mouseenter",action:["list-highlight:highlight","element-highlight:highlight"]}],end:[{trigger:"element:mouseleave",action:["list-highlight:reset","element-highlight:reset"]}]});xr("element-range-highlight",{showEnable:[{trigger:"plot:mouseenter",action:"cursor:crosshair"},{trigger:"mask:mouseenter",action:"cursor:move"},{trigger:"plot:mouseleave",action:"cursor:default"},{trigger:"mask:mouseleave",action:"cursor:crosshair"}],start:[{trigger:"plot:mousedown",isEnable:function(r){return!r.isInShape("mask")},action:["rect-mask:start","rect-mask:show"]},{trigger:"mask:dragstart",action:["rect-mask:moveStart"]}],processing:[{trigger:"plot:mousemove",action:["rect-mask:resize"]},{trigger:"mask:drag",action:["rect-mask:move"]},{trigger:"mask:change",action:["element-range-highlight:highlight"]}],end:[{trigger:"plot:mouseup",action:["rect-mask:end"]},{trigger:"mask:dragend",action:["rect-mask:moveEnd"]},{trigger:"document:mouseup",isEnable:function(r){return!r.isInPlot()},action:["element-range-highlight:clear","rect-mask:end","rect-mask:hide"]}],rollback:[{trigger:"dblclick",action:["element-range-highlight:clear","rect-mask:hide"]}]});xr("brush",{showEnable:[{trigger:"plot:mouseenter",action:"cursor:crosshair"},{trigger:"plot:mouseleave",action:"cursor:default"}],start:[{trigger:"mousedown",isEnable:Pm,action:["brush:start","rect-mask:start","rect-mask:show"]}],processing:[{trigger:"mousemove",isEnable:Pm,action:["rect-mask:resize"]}],end:[{trigger:"mouseup",isEnable:Pm,action:["brush:filter","brush:end","rect-mask:end","rect-mask:hide","reset-button:show"]}],rollback:[{trigger:"reset-button:click",action:["brush:reset","reset-button:hide","cursor:crosshair"]}]});xr("brush-visible",{showEnable:[{trigger:"plot:mouseenter",action:"cursor:crosshair"},{trigger:"plot:mouseleave",action:"cursor:default"}],start:[{trigger:"plot:mousedown",action:["rect-mask:start","rect-mask:show"]}],processing:[{trigger:"plot:mousemove",action:["rect-mask:resize"]},{trigger:"mask:change",action:["element-range-highlight:highlight"]}],end:[{trigger:"plot:mouseup",action:["rect-mask:end","rect-mask:hide","element-filter:filter","element-range-highlight:clear"]}],rollback:[{trigger:"dblclick",action:["element-filter:clear"]}]});xr("brush-x",{showEnable:[{trigger:"plot:mouseenter",action:"cursor:crosshair"},{trigger:"plot:mouseleave",action:"cursor:default"}],start:[{trigger:"mousedown",isEnable:Pm,action:["brush-x:start","x-rect-mask:start","x-rect-mask:show"]}],processing:[{trigger:"mousemove",isEnable:Pm,action:["x-rect-mask:resize"]}],end:[{trigger:"mouseup",isEnable:Pm,action:["brush-x:filter","brush-x:end","x-rect-mask:end","x-rect-mask:hide"]}],rollback:[{trigger:"dblclick",action:["brush-x:reset"]}]});xr("element-path-highlight",{showEnable:[{trigger:"plot:mouseenter",action:"cursor:crosshair"},{trigger:"plot:mouseleave",action:"cursor:default"}],start:[{trigger:"mousedown",isEnable:Pm,action:"path-mask:start"},{trigger:"mousedown",isEnable:Pm,action:"path-mask:show"}],processing:[{trigger:"mousemove",action:"path-mask:addPoint"}],end:[{trigger:"mouseup",action:"path-mask:end"}],rollback:[{trigger:"dblclick",action:"path-mask:hide"}]});xr("element-single-selected",{start:[{trigger:"element:click",action:"element-single-selected:toggle"}]});xr("legend-filter",{showEnable:[{trigger:"legend-item:mouseenter",action:["cursor:pointer","list-radio:show"]},{trigger:"legend-item:mouseleave",action:["cursor:default","list-radio:hide"]}],start:[{trigger:"legend-item:click",isEnable:function(r){return!r.isInShape("legend-item-radio")},action:["list-unchecked:toggle","data-filter:filter","list-radio:show"]},{trigger:"legend-item-radio:mouseenter",action:["list-radio:showTip"]},{trigger:"legend-item-radio:mouseleave",action:["list-radio:hideTip"]},{trigger:"legend-item-radio:click",action:["list-focus:toggle","data-filter:filter","list-radio:show"]}]});xr("continuous-filter",{start:[{trigger:"legend:valuechanged",action:"data-filter:filter"}]});xr("continuous-visible-filter",{start:[{trigger:"legend:valuechanged",action:"element-filter:filter"}]});xr("legend-visible-filter",{showEnable:[{trigger:"legend-item:mouseenter",action:"cursor:pointer"},{trigger:"legend-item:mouseleave",action:"cursor:default"}],start:[{trigger:"legend-item:click",action:["list-unchecked:toggle","element-filter:filter"]}]});xr("active-region",{start:[{trigger:"plot:mousemove",action:"active-region:show"}],end:[{trigger:"plot:mouseleave",action:"active-region:hide"}]});function Got(r){return r.gEvent.preventDefault(),r.gEvent.originalEvent.deltaY>0}xr("view-zoom",{start:[{trigger:"plot:mousewheel",isEnable:function(r){return Got(r.event)},action:"scale-zoom:zoomOut",throttle:{wait:100,leading:!0,trailing:!1}},{trigger:"plot:mousewheel",isEnable:function(r){return!Got(r.event)},action:"scale-zoom:zoomIn",throttle:{wait:100,leading:!0,trailing:!1}}]});xr("sibling-tooltip",{start:[{trigger:"plot:mousemove",action:"sibling-tooltip:show"}],end:[{trigger:"plot:mouseleave",action:"sibling-tooltip:hide"}]});xr("plot-mousewheel-scroll",{start:[{trigger:"plot:mousewheel",action:"mousewheel-scroll:scroll"}]});var RA={};Dn(RA,{Area:()=>t6,Bar:()=>e6,BidirectionalBar:()=>P6,Box:()=>s6,Bullet:()=>r6,Chord:()=>m6,CirclePacking:()=>O6,Column:()=>n6,DualAxes:()=>b6,FUNNEL_CONVERSATION_FIELD:()=>So,Facet:()=>D6,Funnel:()=>i6,G2:()=>KE,Gauge:()=>c6,Heatmap:()=>u6,Histogram:()=>a6,Line:()=>o6,Liquid:()=>l6,Mix:()=>kA,MultiView:()=>kA,Pie:()=>f6,Plot:()=>De,Progress:()=>h6,Radar:()=>d6,RadialBar:()=>A6,RingProgress:()=>p6,Rose:()=>v6,Sankey:()=>M6,Scatter:()=>g6,Stock:()=>E6,Sunburst:()=>w6,TinyArea:()=>y6,TinyColumn:()=>x6,TinyLine:()=>_6,Treemap:()=>T6,Venn:()=>L6,Violin:()=>I6,Waterfall:()=>S6,WordCloud:()=>C6,adaptors:()=>ZW,default:()=>P$t,flow:()=>Fe,getCanvasPattern:()=>G1,measureTextWidth:()=>$E});var rD=U(q());function Fe(){for(var r=[],e=0;e"},key:(l===0?"top":"bottom")+"-statistic"},Hr(s,["offsetX","offsetY","rotate","style","formatter"])))}})},sj=function(r,e,t){var n=e.statistic,i=n.title,a=n.content;[i,a].forEach(function(o){if(!!o){var s=(0,Zs.isFunction)(o.style)?o.style(t):o.style;r.annotation().html(E({position:["50%","100%"],html:function(l,u){var f=u.getCoordinate(),c=u.views[0].getCoordinate(),h=c.getCenter(),d=c.getRadius(),p=Math.max(Math.sin(c.startAngle),Math.sin(c.endAngle))*d,v=h.y+p-f.y.start-parseFloat((0,Zs.get)(s,"fontSize",0)),m=f.getRadius()*f.innerRadius*2;Xot(l,E({width:m+"px",transform:"translate(-50%, "+v+"px)"},Yot(s)));var g=u.getData();if(o.customHtml)return o.customHtml(l,u,t,g);var x=o.content;return o.formatter&&(x=o.formatter(t,g)),x?(0,Zs.isString)(x)?x:""+x:"
      "}},Hr(o,["offsetX","offsetY","rotate","style","formatter"])))}})};var D1=U(q());var lj;function qot(){return lj||(lj=document.createElement("canvas").getContext("2d")),lj}var $E=(0,D1.memoize)(function(r,e){e===void 0&&(e={});var t=e.fontSize,n=e.fontFamily,i=n===void 0?"sans-serif":n,a=e.fontWeight,o=e.fontStyle,s=e.fontVariant,l=qot();l.font=[o,a,s,t+"px",i].join(" ");var u=l.measureText((0,D1.isString)(r)?r:"");return u.width},function(r,e){return e===void 0&&(e={}),dn([r],(0,D1.values)(e)).join("")});function uc(r){return typeof r=="number"&&!isNaN(r)}function uj(r,e,t){var n=Math.min(e,t),i=Math.max(e,t);return r>=n&&r<=i}var km=U(q());function P1(r,e){if(!r)return{};var t=r.filter(function(a){var o=(0,km.get)(a,[e]);return(0,km.isNumber)(o)&&!isNaN(o)}),n=t.every(function(a){return(0,km.get)(a,[e])>=0}),i=t.every(function(a){return(0,km.get)(a,[e])<=0});return n?{min:0}:i?{max:0}:{}}function tD(r,e,t,n,i){if(i===void 0&&(i=[]),!Array.isArray(r))return{nodes:[],links:[]};var a=[],o={},s=-1;return r.forEach(function(l){var u=l[e],f=l[t],c=l[n],h=Hr(l,i);o[u]||(o[u]=E({id:++s,name:u},h)),o[f]||(o[f]=E({id:++s,name:f},h)),a.push(E({source:o[u].id,target:o[f].id,value:c},h))}),{nodes:Object.values(o).sort(function(l,u){return l.id-u.id}),links:a}}function Lh(r,e){var t=(0,km.filter)(r,function(n){var i=n[e];return i===null||typeof i=="number"&&!isNaN(i)});return As(Vo.WARN,t.length===r.length,"illegal data existed in chart data."),t}var eD=U(q());function fc(r){if((0,eD.isNumber)(r))return[r,r,r,r];if((0,eD.isArray)(r)){var e=r.length;if(e===1)return[r[0],r[0],r[0],r[0]];if(e===2)return[r[0],r[1],r[0],r[1]];if(e===3)return[r[0],r[1],r[2],r[1]];if(e===4)return r}return[0,0,0,0]}function Rm(r,e,t){e===void 0&&(e="bottom"),t===void 0&&(t=25);var n=fc(r),i=[e.startsWith("top")?t:0,e.startsWith("right")?t:0,e.startsWith("bottom")?t:0,e.startsWith("left")?t:0];return[n[0]+i[0],n[1]+i[1],n[2]+i[2],n[3]+i[3]]}function k1(r){var e=r.map(function(n){return fc(n)}),t=[0,0,0,0];return e.length>0&&(t=t.map(function(n,i){return e.forEach(function(a,o){n+=e[o][i]}),n})),t}var BHt=U(q()),Kot={locale:"en-US"};var nD={};function fj(r,e){nD[r]=e}function d0(r){return{get:function(e,t){return ZE((0,rD.get)(nD[r],e)||(0,rD.get)(nD[Kot.locale],e)||(0,rD.get)(nD["en-US"],e)||e,t)}}}var Zot={locale:"en-US",general:{increase:"Increase",decrease:"Decrease",root:"Root"},statistic:{total:"Total"},conversionTag:{label:"Rate"},legend:{},tooltip:{},slider:{},scrollbar:{},waterfall:{total:"Total"}};var $ot={locale:"zh-CN",general:{increase:"\u589E\u52A0",decrease:"\u51CF\u5C11",root:"\u521D\u59CB"},statistic:{total:"\u603B\u8BA1"},conversionTag:{label:"\u8F6C\u5316\u7387"},legend:{},tooltip:{},slider:{},scrollbar:{},waterfall:{total:"\u603B\u8BA1"}};var fD=U(q());var ast=U(ist());var ost="data-chart-source-type",pj=["padding","appendPadding","renderer","pixelRatio","syncViewPadding","supportCSSTransform","limitInPlot"],De=function(r){H(e,r);function e(t,n){var i=r.call(this)||this;return i.container=typeof t=="string"?document.getElementById(t):t,i.options=gt({},i.getDefaultOptions(),n),i.createG2(),i.bindEvents(),i}return e.getDefaultOptions=function(){return{renderer:"canvas",xAxis:{nice:!0,label:{autoRotate:!1,autoHide:{type:"equidistance",cfg:{minGap:6}}}},yAxis:{nice:!0,label:{autoHide:!0,autoRotate:!1}},animation:!0}},e.prototype.createG2=function(){var t=this.options,n=t.width,i=t.height,a=t.defaultInteractions;this.chart=new gE(E(E(E(E({container:this.container,autoFit:!1},this.getChartSize(n,i)),{localRefresh:!1}),Hr(this.options,pj)),{defaultInteractions:a})),this.container.setAttribute(ost,"G2Plot")},e.prototype.getChartSize=function(t,n){var i=L1(this.container);return{width:t||i.width||400,height:n||i.height||400}},e.prototype.bindEvents=function(){var t=this;this.chart&&this.chart.on("*",function(n){(n==null?void 0:n.type)&&t.emit(n.type,n)})},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.render=function(){this.chart.clear(),this.chart.options={data:[],animate:!0},this.chart.views=[],this.execAdaptor(),this.chart.render(),this.bindSizeSensor()},e.prototype.update=function(t){this.updateOption(t),this.render()},e.prototype.updateOption=function(t){this.options=gt({},this.options,t)},e.prototype.setState=function(t,n,i){i===void 0&&(i=!0);var a=c0(this.chart);(0,fD.each)(a,function(o){n(o.getData())&&o.setState(t,i)})},e.prototype.getStates=function(){var t=c0(this.chart),n=[];return(0,fD.each)(t,function(i){var a=i.getData(),o=i.getStates();(0,fD.each)(o,function(s){n.push({data:a,state:s,geometry:i.geometry,element:i})})}),n},e.prototype.changeData=function(t){this.update({data:t})},e.prototype.changeSize=function(t,n){this.chart.changeSize(t,n)},e.prototype.addAnnotations=function(t){var n=dn(t),i=this.chart.getController("annotation"),a=i.getComponents().map(function(l){return l.extra});i.clear(!0);for(var o=function(l){var u=a[l],f=n.findIndex(function(c){return c.id&&c.id===u.id});f!==-1&&(u=gt({},u,n[f]),n.splice(f,1)),i.annotation(u)},s=0;sb){var C=S/v.length,w=Math.max(1,Math.ceil(b/C)-1),A=v.slice(0,w)+"...";x.attr("text",A)}}}}function EYt(r,e,t){CYt(r,e,t),wYt(r,e,t)}function mst(r,e,t){return e===void 0&&(e=!0),t===void 0&&(t=!1),function(n){var i=n.options,a=n.chart,o=i.conversionTag,s=i.theme;return o&&!t&&(a.theme(gt({},(0,zm.isObject)(s)?s:$u(s),{columnWidthRatio:1/3})),a.annotation().shape({render:function(l,u){var f=l.addGroup({id:a.id+"-conversion-tag-group",name:"conversion-tag-group"}),c=(0,zm.find)(a.geometries,function(p){return p.type==="interval"}),h={view:u,geometry:c,group:f,field:r,horizontal:e,options:SYt(o,e)},d=c.elements;(0,zm.each)(d,function(p,v){v>0&&EYt(h,d[v-1],p)})}})),n}}var y0={hover:"__interval-connected-area-hover__",click:"__interval-connected-area-click__"},_j=function(r,e){return r==="hover"?[{trigger:"interval:mouseenter",action:["element-highlight-by-color:highlight","element-link-by-color:link"],arg:[null,{style:e}]}]:[{trigger:"interval:click",action:["element-highlight-by-color:clear","element-highlight-by-color:highlight","element-link-by-color:clear","element-link-by-color:unlink","element-link-by-color:link"],arg:[null,null,null,null,{style:e}]}]};xr(y0.hover,{start:_j(y0.hover),end:[{trigger:"interval:mouseleave",action:["element-highlight-by-color:reset","element-link-by-color:unlink"]}]});xr(y0.click,{start:_j(y0.click),end:[{trigger:"document:mousedown",action:["element-highlight-by-color:clear","element-link-by-color:clear"]}]});function gst(r){return r===void 0&&(r=!1),function(e){var t=e.chart,n=e.options,i=n.connectedArea,a=function(){t.removeInteraction(y0.hover),t.removeInteraction(y0.click)};if(!r&&i){var o=i.trigger||"hover";a(),t.interaction(y0[o],{start:_j(o,i.style)})}else a();return e}}var bst=U(q());var yst=U(q());var AYt=10,MYt=5,TYt={padding:[8,10],text:"reset",textStyle:{default:{x:0,y:0,fontSize:12,fill:"#333333",cursor:"pointer"}},buttonStyle:{default:{fill:"#f7f7f7",stroke:"#cccccc",cursor:"pointer"},active:{fill:"#e6e6e6"}}},xst=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.buttonGroup=null,t.buttonCfg=E({name:"button"},TYt),t}return e.prototype.getButtonCfg=function(){var t=this.context.view,n=(0,yst.get)(t,["interactions","filter-action","cfg","buttonConfig"]);return gt(this.buttonCfg,n,this.cfg)},e.prototype.drawButton=function(){var t=this.getButtonCfg(),n=this.context.view.foregroundGroup.addGroup({name:t.name}),i=this.drawText(n);this.drawBackground(n,i.getBBox()),this.buttonGroup=n},e.prototype.drawText=function(t){var n,i=this.getButtonCfg();return t.addShape({type:"text",name:"button-text",attrs:E({text:i.text},(n=i.textStyle)===null||n===void 0?void 0:n.default)})},e.prototype.drawBackground=function(t,n){var i,a=this.getButtonCfg(),o=fc(a.padding),s=t.addShape({type:"rect",name:"button-rect",attrs:E({x:n.x-o[3],y:n.y-o[0],width:n.width+o[1]+o[3],height:n.height+o[0]+o[2]},(i=a.buttonStyle)===null||i===void 0?void 0:i.default)});return s.toBack(),t.on("mouseenter",function(){var l;s.attr((l=a.buttonStyle)===null||l===void 0?void 0:l.active)}),t.on("mouseleave",function(){var l;s.attr((l=a.buttonStyle)===null||l===void 0?void 0:l.default)}),s},e.prototype.resetPosition=function(){var t=this.context.view,n=t.getCoordinate(),i=n.convert({x:1,y:1}),a=this.buttonGroup,o=a.getBBox(),s=ea.transform(null,[["t",i.x-o.width-AYt,i.y+o.height+MYt]]);a.setMatrix(s)},e.prototype.show=function(){this.buttonGroup||this.drawButton(),this.resetPosition(),this.buttonGroup.show()},e.prototype.hide=function(){this.buttonGroup&&this.buttonGroup.hide()},e.prototype.destroy=function(){var t=this.buttonGroup;t&&t.remove(),r.prototype.destroy.call(this)},e}(Tr);nr("brush-reset-button",xst,{name:"brush-reset-button"});xr("filter-action",{});function Lp(r){return r.isInPlot()}function Um(r,e,t){var n=e||"rect";switch(r){case"brush":return{showEnable:[{trigger:"plot:mouseenter",action:"cursor:crosshair"},{trigger:"plot:mouseleave",action:"cursor:default"}],start:[{trigger:"mousedown",isEnable:Lp,action:["brush:start",n+"-mask:start",n+"-mask:show"],arg:[null,{maskStyle:t==null?void 0:t.style}]}],processing:[{trigger:"mousemove",isEnable:Lp,action:[n+"-mask:resize"]}],end:[{trigger:"mouseup",isEnable:Lp,action:["brush:filter","brush:end",n+"-mask:end",n+"-mask:hide","brush-reset-button:show"]}],rollback:[{trigger:"brush-reset-button:click",action:["brush:reset","brush-reset-button:hide","cursor:crosshair"]}]};case"brush-highlight":return{showEnable:[{trigger:"plot:mouseenter",action:"cursor:crosshair"},{trigger:"mask:mouseenter",action:"cursor:move"},{trigger:"plot:mouseleave",action:"cursor:default"},{trigger:"mask:mouseleave",action:"cursor:crosshair"}],start:[{trigger:"plot:mousedown",isEnable:function(i){return!i.isInShape("mask")},action:[n+"-mask:start",n+"-mask:show"],arg:[{maskStyle:t==null?void 0:t.style}]},{trigger:"mask:dragstart",action:[n+"-mask:moveStart"]}],processing:[{trigger:"plot:mousemove",action:[n+"-mask:resize"]},{trigger:"mask:drag",action:[n+"-mask:move"]},{trigger:"mask:change",action:["element-range-highlight:highlight"]}],end:[{trigger:"plot:mouseup",action:[n+"-mask:end"]},{trigger:"mask:dragend",action:[n+"-mask:moveEnd"]},{trigger:"document:mouseup",isEnable:function(i){return!i.isInPlot()},action:["element-range-highlight:clear",n+"-mask:end",n+"-mask:hide"]}],rollback:[{trigger:"dblclick",action:["element-range-highlight:clear",n+"-mask:hide"]}]};case"brush-x":return{showEnable:[{trigger:"plot:mouseenter",action:"cursor:crosshair"},{trigger:"plot:mouseleave",action:"cursor:default"}],start:[{trigger:"mousedown",isEnable:Lp,action:["brush-x:start",n+"-mask:start",n+"-mask:show"],arg:[null,{maskStyle:t==null?void 0:t.style}]}],processing:[{trigger:"mousemove",isEnable:Lp,action:[n+"-mask:resize"]}],end:[{trigger:"mouseup",isEnable:Lp,action:["brush-x:filter","brush-x:end",n+"-mask:end",n+"-mask:hide"]}],rollback:[{trigger:"dblclick",action:["brush-x:reset"]}]};case"brush-x-highlight":return{showEnable:[{trigger:"plot:mouseenter",action:"cursor:crosshair"},{trigger:"mask:mouseenter",action:"cursor:move"},{trigger:"plot:mouseleave",action:"cursor:default"},{trigger:"mask:mouseleave",action:"cursor:crosshair"}],start:[{trigger:"plot:mousedown",isEnable:function(i){return!i.isInShape("mask")},action:[n+"-mask:start",n+"-mask:show"],arg:[{maskStyle:t==null?void 0:t.style}]},{trigger:"mask:dragstart",action:[n+"-mask:moveStart"]}],processing:[{trigger:"plot:mousemove",action:[n+"-mask:resize"]},{trigger:"mask:drag",action:[n+"-mask:move"]},{trigger:"mask:change",action:["element-range-highlight:highlight"]}],end:[{trigger:"plot:mouseup",action:[n+"-mask:end"]},{trigger:"mask:dragend",action:[n+"-mask:moveEnd"]},{trigger:"document:mouseup",isEnable:function(i){return!i.isInPlot()},action:["element-range-highlight:clear",n+"-mask:end",n+"-mask:hide"]}],rollback:[{trigger:"dblclick",action:["element-range-highlight:clear",n+"-mask:hide"]}]};case"brush-y":return{showEnable:[{trigger:"plot:mouseenter",action:"cursor:crosshair"},{trigger:"plot:mouseleave",action:"cursor:default"}],start:[{trigger:"mousedown",isEnable:Lp,action:["brush-y:start",n+"-mask:start",n+"-mask:show"],arg:[null,{maskStyle:t==null?void 0:t.style}]}],processing:[{trigger:"mousemove",isEnable:Lp,action:[n+"-mask:resize"]}],end:[{trigger:"mouseup",isEnable:Lp,action:["brush-y:filter","brush-y:end",n+"-mask:end",n+"-mask:hide"]}],rollback:[{trigger:"dblclick",action:["brush-y:reset"]}]};case"brush-y-highlight":return{showEnable:[{trigger:"plot:mouseenter",action:"cursor:crosshair"},{trigger:"mask:mouseenter",action:"cursor:move"},{trigger:"plot:mouseleave",action:"cursor:default"},{trigger:"mask:mouseleave",action:"cursor:crosshair"}],start:[{trigger:"plot:mousedown",isEnable:function(i){return!i.isInShape("mask")},action:[n+"-mask:start",n+"-mask:show"],arg:[{maskStyle:t==null?void 0:t.style}]},{trigger:"mask:dragstart",action:[n+"-mask:moveStart"]}],processing:[{trigger:"plot:mousemove",action:[n+"-mask:resize"]},{trigger:"mask:drag",action:[n+"-mask:move"]},{trigger:"mask:change",action:["element-range-highlight:highlight"]}],end:[{trigger:"plot:mouseup",action:[n+"-mask:end"]},{trigger:"mask:dragend",action:[n+"-mask:moveEnd"]},{trigger:"document:mouseup",isEnable:function(i){return!i.isInPlot()},action:["element-range-highlight:clear",n+"-mask:end",n+"-mask:hide"]}],rollback:[{trigger:"dblclick",action:["element-range-highlight:clear",n+"-mask:hide"]}]};default:return{}}}xr("brush",Um("brush"));xr("brush-highlight",Um("brush-highlight"));xr("brush-x",Um("brush-x","x-rect"));xr("brush-y",Um("brush-y","y-rect"));xr("brush-x-highlight",Um("brush-x-highlight","x-rect"));xr("brush-y-highlight",Um("brush-y-highlight","y-rect"));var _st=["brush","brush-x","brush-y","brush-highlight","brush-x-highlight","brush-y-highlight"];function _D(r){var e=r.options,t=e.brush,n=(0,bst.filter)(e.interactions||[],function(i){return _st.indexOf(i.type)===-1});return(t==null?void 0:t.enabled)&&(_st.forEach(function(i){var a,o=!1;switch(t.type){case"x-rect":o=i===(t.action==="highlight"?"brush-x-highlight":"brush-x");break;case"y-rect":o=i===(t.action==="highlight"?"brush-y-highlight":"brush-y");break;default:o=i===(t.action==="highlight"?"brush-highlight":"brush");break}var s={type:i,enable:o};(((a=t.mask)===null||a===void 0?void 0:a.style)||t.type)&&(s.cfg=Um(i,t.type,t.mask)),n.push(s)}),(t==null?void 0:t.action)!=="highlight"&&n.push({type:"filter-action",cfg:{buttonConfig:t.button}})),gt({},r,{options:{interactions:n}})}function IYt(r){var e=r.options,t=e.legend,n=e.seriesField,i=e.isStack;return n?t!==!1&&(t=E({position:i?"right-top":"top-left"},t)):t=!1,r.options.legend=t,r}function LYt(r){var e=r.chart,t=r.options,n=t.data,i=t.columnStyle,a=t.color,o=t.columnWidthRatio,s=t.isPercent,l=t.isGroup,u=t.isStack,f=t.xField,c=t.yField,h=t.seriesField,d=t.groupField,p=t.tooltip,v=t.shape,m=s&&l&&u?pst(n,c,[f,d],c):kh(n,c,f,c,s),g=[];u&&h&&!l?m.forEach(function(S){var C=g.find(function(w){return w[f]===S[f]&&w[h]===S[h]});C?C[c]+=S[c]||0:g.push(E({},S))}):g=m,e.data(g);var x=s?E({formatter:function(S){return{name:l&&u?S[h]+" - "+S[d]:S[h]||S[f],value:(Number(S[c])*100).toFixed(2)+"%"}}},p):p,b=gt({},r,{options:{data:g,widthRatio:o,tooltip:x,interval:{shape:v,style:i,color:a}}});return gi(b),b}function j1(r){var e,t,n=r.options,i=n.xAxis,a=n.yAxis,o=n.xField,s=n.yField,l=n.data,u=n.isPercent,f=u?{max:1,min:0,minLimit:0,maxLimit:1}:{};return Fe(un((e={},e[o]=i,e[s]=a,e),(t={},t[o]={type:"cat"},t[s]=E(E({},P1(l,s)),f),t)))(r)}function OYt(r){var e=r.chart,t=r.options,n=t.xAxis,i=t.yAxis,a=t.xField,o=t.yField;return n===!1?e.axis(a,!1):e.axis(a,n),i===!1?e.axis(o,!1):e.axis(o,i),r}function DYt(r){var e=r.chart,t=r.options,n=t.legend,i=t.seriesField;return n&&i?e.legend(i,n):n===!1&&e.legend(!1),r}function PYt(r){var e=r.chart,t=r.options,n=t.label,i=t.yField,a=t.isRange,o=mi(e,"interval");if(!n)o.label(!1);else{var s=n.callback,l=rr(n,["callback"]);o.label({fields:[i],callback:s,cfg:E({layout:(l==null?void 0:l.position)?void 0:[{type:"interval-adjust-position"},{type:"interval-hide-overlap"},{type:"adjust-color"},{type:"limit-in-plot",cfg:{action:"hide"}}]},Kn(a?E({content:function(u){var f;return(f=u[i])===null||f===void 0?void 0:f.join("-")}},l):l))})}return r}function kYt(r){var e=r.chart,t=r.options,n=t.tooltip,i=t.isGroup,a=t.isStack,o=t.groupField,s=t.data,l=t.xField,u=t.yField,f=t.seriesField;if(n===!1)e.tooltip(!1);else{var c=n;if(i&&a){var h=(c==null?void 0:c.formatter)||function(d){return{name:d[f]+" - "+d[o],value:d[u]}};c=E(E({},c),{customItems:function(d){var p=[];return(0,U1.each)(d,function(v){var m=(0,U1.filter)(s,function(g){return(0,U1.isMatch)(g,Hr(v.data,[l,f]))});m.forEach(function(g){p.push(E(E(E({},v),{value:g[u],data:g,mappingData:{_origin:g}}),h(g)))})}),p}})}e.tooltip(c)}return r}function jm(r,e){e===void 0&&(e=!1);var t=r.options,n=t.seriesField;return Fe(IYt,lr,Xi("columnStyle"),Ms,LYt,j1,OYt,DYt,kYt,Oh,z1,PYt,_D,Pr,Sr,nn(),mst(t.yField,!e,!!n),gst(!t.isStack),nf)(r)}var Sst=gt({},De.getDefaultOptions(),{columnWidthRatio:.6,marginRatio:1/32,tooltip:{shared:!0,showMarkers:!1,offset:20},legend:{radio:{}},interactions:[{type:"active-region"}]});var rA=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="column",t}return e.getDefaultOptions=function(){return Sst},e.prototype.changeData=function(t){this.updateOption({data:t});var n=this.options,i=n.yField,a=n.xField,o=n.isPercent,s=this,l=s.chart,u=s.options;j1({chart:l,options:u}),this.chart.changeData(kh(t,i,a,i,o))},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return jm},e}(De);function RYt(r){var e=r.options,t=e.xField,n=e.yField,i=e.xAxis,a=e.yAxis,o={left:"bottom",right:"top",top:"left",bottom:"right"},s=a!==!1?E({position:o[(a==null?void 0:a.position)||"left"]},a):!1,l=i!==!1?E({position:o[(i==null?void 0:i.position)||"bottom"]},i):!1;return E(E({},r),{options:E(E({},e),{xField:n,yField:t,xAxis:s,yAxis:l})})}function NYt(r){var e=r.options,t=e.label;return t&&!t.position&&(t.position="left",t.layout||(t.layout=[{type:"interval-adjust-position"},{type:"interval-hide-overlap"},{type:"adjust-color"},{type:"limit-in-plot",cfg:{action:"hide"}}])),gt({},r,{options:{label:t}})}function FYt(r){var e=r.options,t=e.seriesField,n=e.isStack,i=e.legend;return t?i!==!1&&(i=E({position:n?"top-left":"right-top"},i||{})):i=!1,gt({},r,{options:{legend:i}})}function BYt(r){var e=r.chart;return e.coordinate({actions:[["transpose"],["reflect","y"]]}),r}function GYt(r){var e=r.chart,t=r.options,n=t.barStyle,i=t.barWidthRatio,a=t.minBarWidth,o=t.maxBarWidth,s=t.barBackground;return jm({chart:e,options:E(E({},t),{columnStyle:n,columnWidthRatio:i,minColumnWidth:a,maxColumnWidth:o,columnBackground:s})},!0)}function SD(r){return Fe(RYt,NYt,FYt,wn,BYt,GYt)(r)}var Cst=gt({},De.getDefaultOptions(),{barWidthRatio:.6,marginRatio:1/32,tooltip:{shared:!0,showMarkers:!1,offset:20},legend:{radio:{}},interactions:[{type:"active-region"}]});var nA=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="bar",t}return e.getDefaultOptions=function(){return Cst},e.prototype.changeData=function(t){this.updateOption({data:t});var n=this,i=n.chart,a=n.options,o=a.xField,s=a.yField,l=a.isPercent,u=E(E({},a),{xField:s,yField:o});j1({chart:i,options:u}),i.changeData(kh(t,o,s,o,l))},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return SD},e}(De);var Ca=U(q());var CD=gt({},De.getDefaultOptions(),{legend:{position:"right",radio:{}},tooltip:{shared:!1,showTitle:!1,showMarkers:!1},label:{layout:{type:"limit-in-plot",cfg:{action:"ellipsis"}}},pieStyle:{stroke:"white",lineWidth:1},statistic:{title:{style:{fontWeight:300,color:"#4B535E",textAlign:"center",fontSize:"20px",lineHeight:1}},content:{style:{fontWeight:"bold",color:"rgba(44,53,66,0.85)",textAlign:"center",fontSize:"32px",lineHeight:1}}},theme:{components:{annotation:{text:{animate:!1}}}}});var x0=U(q());function wst(r,e){var t=null;return(0,x0.each)(r,function(n){typeof n[e]=="number"&&(t+=n[e])}),t}function Est(r,e){var t;switch(r){case"inner":return t="-30%",(0,x0.isString)(e)&&e.endsWith("%")?parseFloat(e)*.01>0?t:e:e<0?e:t;case"outer":return t=12,(0,x0.isString)(e)&&e.endsWith("%")?parseFloat(e)*.01<0?t:e:e>0?e:t;default:return e}}function W1(r,e){return(0,x0.every)(Lh(r,e),function(t){return t[e]===0})}var Ast=U(q());var zYt=[1,0,0,0,1,0,0,0,1];function iA(r,e){var t=e?dn(e):dn(zYt);return ea.transform(t,r)}var Mst=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getActiveElements=function(){var t=ea.getDelegationObject(this.context);if(t){var n=this.context.view,i=t.component,a=t.item,o=i.get("field");if(o){var s=n.geometries[0].elements;return s.filter(function(l){return l.getModel().data[o]===a.value})}}return[]},e.prototype.getActiveElementLabels=function(){var t=this.context.view,n=this.getActiveElements(),i=t.geometries[0].labelsContainer.getChildren();return i.filter(function(a){return n.find(function(o){return(0,Ast.isEqual)(o.getData(),a.get("data"))})})},e.prototype.transfrom=function(t){t===void 0&&(t=7.5);var n=this.getActiveElements(),i=this.getActiveElementLabels();n.forEach(function(a,o){var s=i[o],l=a.geometry.coordinate;if(l.isPolar&&l.isTransposed){var u=ea.getAngle(a.getModel(),l),f=u.startAngle,c=u.endAngle,h=(f+c)/2,d=t,p=d*Math.cos(h),v=d*Math.sin(h);a.shape.setMatrix(iA([["t",p,v]])),s.setMatrix(iA([["t",p,v]]))}})},e.prototype.active=function(){this.transfrom()},e.prototype.reset=function(){this.transfrom(0)},e}(Tr);var b0=U(q());function Tst(r){var e=r.event,t,n=e.target;return n&&(t=n.get("element")),t}var Ist=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getAnnotations=function(t){var n=t||this.context.view;return n.getController("annotation").option},e.prototype.getInitialAnnotation=function(){return this.initialAnnotation},e.prototype.init=function(){var t=this,n=this.context.view;n.removeInteraction("tooltip"),n.on("afterchangesize",function(){var i=t.getAnnotations(n);t.initialAnnotation=i})},e.prototype.change=function(t){var n=this.context,i=n.view,a=n.event;this.initialAnnotation||(this.initialAnnotation=this.getAnnotations());var o=(0,b0.get)(a,["data","data"]);if(a.type.match("legend-item")){var s=ea.getDelegationObject(this.context),l=i.getGroupedFields()[0];if(s&&l){var u=s.item;o=i.getData().find(function(d){return d[l]===u.value})}}if(o){var f=(0,b0.get)(t,"annotations",[]),c=(0,b0.get)(t,"statistic",{});i.getController("annotation").clear(!0),(0,b0.each)(f,function(d){typeof d=="object"&&i.annotation()[d.type](d)}),Ip(i,{statistic:c,plotType:"pie"},o),i.render(!0)}var h=Tst(this.context);h&&h.shape.toFront()},e.prototype.reset=function(){var t=this.context.view,n=t.getController("annotation");n.clear(!0);var i=this.getInitialAnnotation();(0,b0.each)(i,function(a){t.annotation()[a.type](a)}),t.render(!0)},e}(Tr);var Sj="pie-statistic";nr(Sj,Ist);xr("pie-statistic-active",{start:[{trigger:"element:mouseenter",action:"pie-statistic:change"}],end:[{trigger:"element:mouseleave",action:"pie-statistic:reset"}]});nr("pie-legend",Mst);xr("pie-legend-active",{start:[{trigger:"legend-item:mouseenter",action:"pie-legend:active"}],end:[{trigger:"legend-item:mouseleave",action:"pie-legend:reset"}]});function UYt(r){var e=r.chart,t=r.options,n=t.data,i=t.angleField,a=t.colorField,o=t.color,s=t.pieStyle,l=Lh(n,i);if(W1(l,i)){var u="$$percentage$$";l=l.map(function(c){var h;return E(E({},c),(h={},h[u]=1/l.length,h))}),e.data(l);var f=gt({},r,{options:{xField:"1",yField:u,seriesField:a,isStack:!0,interval:{color:o,style:s},args:{zIndexReversed:!0,sortZIndex:!0}}});gi(f)}else{e.data(l);var f=gt({},r,{options:{xField:"1",yField:i,seriesField:a,isStack:!0,interval:{color:o,style:s},args:{zIndexReversed:!0,sortZIndex:!0}}});gi(f)}return r}function jYt(r){var e,t=r.chart,n=r.options,i=n.meta,a=n.colorField,o=gt({},i);return t.scale(o,(e={},e[a]={type:"cat"},e)),r}function WYt(r){var e=r.chart,t=r.options,n=t.radius,i=t.innerRadius,a=t.startAngle,o=t.endAngle;return e.coordinate({type:"theta",cfg:{radius:n,innerRadius:i,startAngle:a,endAngle:o}}),r}function VYt(r){var e=r.chart,t=r.options,n=t.label,i=t.colorField,a=t.angleField,o=e.geometries[0];if(!n)o.label(!1);else{var s=n.callback,l=rr(n,["callback"]),u=Kn(l);if(u.content){var f=u.content;u.content=function(p,v,m){var g=p[i],x=p[a],b=e.getScaleByField(a),S=b==null?void 0:b.scale(x);return(0,Ca.isFunction)(f)?f(E(E({},p),{percent:S}),v,m):(0,Ca.isString)(f)?ZE(f,{value:x,name:g,percentage:(0,Ca.isNumber)(S)&&!(0,Ca.isNil)(x)?(S*100).toFixed(2)+"%":null}):f}}var c={inner:"",outer:"pie-outer",spider:"pie-spider"},h=u.type?c[u.type]:"pie-outer",d=u.layout?(0,Ca.isArray)(u.layout)?u.layout:[u.layout]:[];u.layout=(h?[{type:h}]:[]).concat(d),o.label({fields:i?[a,i]:[a],callback:s,cfg:E(E({},u),{offset:Est(u.type,u.offset),type:"pie"})})}return r}function Lst(r){var e=r.innerRadius,t=r.statistic,n=r.angleField,i=r.colorField,a=r.meta,o=r.locale,s=d0(o);if(e&&t){var l=gt({},CD.statistic,t),u=l.title,f=l.content;return u!==!1&&(u=gt({},{formatter:function(c){return c?c[i]:(0,Ca.isNil)(u.content)?s.get(["statistic","total"]):u.content}},u)),f!==!1&&(f=gt({},{formatter:function(c,h){var d=c?c[n]:wst(h,n),p=(0,Ca.get)(a,[n,"formatter"])||function(v){return v};return c||(0,Ca.isNil)(f.content)?p(d):f.content}},f)),gt({},{statistic:{title:u,content:f}},r)}return r}function Cj(r){var e=r.chart,t=r.options,n=Lst(t),i=n.innerRadius,a=n.statistic;return e.getController("annotation").clear(!0),Fe(nn())(r),i&&a&&Ip(e,{statistic:a,plotType:"pie"}),r}function HYt(r){var e=r.chart,t=r.options,n=t.tooltip,i=t.colorField,a=t.angleField,o=t.data;if(n===!1)e.tooltip(n);else if(e.tooltip(gt({},n,{shared:!1})),W1(o,a)){var s=(0,Ca.get)(n,"fields"),l=(0,Ca.get)(n,"formatter");(0,Ca.isEmpty)((0,Ca.get)(n,"fields"))&&(s=[i,a],l=l||function(u){return{name:u[i],value:(0,Ca.toString)(u[a])}}),e.geometries[0].tooltip(s.join("*"),v0(s,l))}return r}function YYt(r){var e=r.chart,t=r.options,n=Lst(t),i=n.interactions,a=n.statistic,o=n.annotations;return(0,Ca.each)(i,function(s){var l,u;if(s.enable===!1)e.removeInteraction(s.type);else if(s.type==="pie-statistic-active"){var f=[];((l=s.cfg)===null||l===void 0?void 0:l.start)||(f=[{trigger:"element:mouseenter",action:Sj+":change",arg:{statistic:a,annotations:o}}]),(0,Ca.each)((u=s.cfg)===null||u===void 0?void 0:u.start,function(c){f.push(E(E({},c),{arg:{statistic:a,annotations:o}}))}),e.interaction(s.type,gt({},s.cfg,{start:f}))}else e.interaction(s.type,s.cfg||{})}),r}function wD(r){return Fe(Xi("pieStyle"),UYt,jYt,lr,WYt,zl,HYt,VYt,Ms,Cj,YYt,Sr)(r)}var aA=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="pie",t}return e.getDefaultOptions=function(){return CD},e.prototype.changeData=function(t){this.chart.emit(wr.BEFORE_CHANGE_DATA,zn.fromData(this.chart,wr.BEFORE_CHANGE_DATA,null));var n=this.options,i=this.options.angleField,a=Lh(n.data,i),o=Lh(t,i);W1(a,i)||W1(o,i)?this.update({data:t}):(this.updateOption({data:t}),this.chart.data(o),Cj({chart:this.chart,options:this.options}),this.chart.render(!0)),this.chart.emit(wr.AFTER_CHANGE_DATA,zn.fromData(this.chart,wr.AFTER_CHANGE_DATA,null))},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return wD},e}(De);var V1=U(q());function XYt(r){var e=r.chart,t=r.options,n=t.data,i=t.sectorStyle,a=t.color;return e.data(n),Fe(gi)(gt({},r,{options:{marginRatio:1,interval:{style:i,color:a}}})),r}function qYt(r){var e=r.chart,t=r.options,n=t.label,i=t.xField,a=mi(e,"interval");if(n===!1)a.label(!1);else if((0,V1.isObject)(n)){var o=n.callback,s=n.fields,l=rr(n,["callback","fields"]),u=l.offset,f=l.layout;(u===void 0||u>=0)&&(f=f?(0,V1.isArray)(f)?f:[f]:[],l.layout=(0,V1.filter)(f,function(c){return c.type!=="limit-in-shape"}),l.layout.length||delete l.layout),a.label({fields:s||[i],callback:o,cfg:Kn(l)})}else As(Vo.WARN,n===null,"the label option must be an Object."),a.label({fields:[i]});return r}function KYt(r){var e=r.chart,t=r.options,n=t.legend,i=t.seriesField;return n===!1?e.legend(!1):i&&e.legend(i,n),r}function ZYt(r){var e=r.chart,t=r.options,n=t.radius,i=t.innerRadius,a=t.startAngle,o=t.endAngle;return e.coordinate({type:"polar",cfg:{radius:n,innerRadius:i,startAngle:a,endAngle:o}}),r}function $Yt(r){var e,t=r.options,n=t.xAxis,i=t.yAxis,a=t.xField,o=t.yField;return Fe(un((e={},e[a]=n,e[o]=i,e)))(r)}function QYt(r){var e=r.chart,t=r.options,n=t.xAxis,i=t.yAxis,a=t.xField,o=t.yField;return n?e.axis(a,n):e.axis(a,!1),i?e.axis(o,i):e.axis(o,!1),r}function Ost(r){Fe(Xi("sectorStyle"),XYt,$Yt,qYt,ZYt,QYt,KYt,wn,Pr,Sr,lr,nn(),Ms)(r)}var Dst=gt({},De.getDefaultOptions(),{xAxis:!1,yAxis:!1,legend:{position:"right",radio:{}},sectorStyle:{stroke:"#fff",lineWidth:1},label:{layout:{type:"limit-in-shape"}},tooltip:{shared:!0,showMarkers:!1},interactions:[{type:"active-region"}]});var wj=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="rose",t}return e.getDefaultOptions=function(){return Dst},e.prototype.changeData=function(t){this.updateOption({data:t}),this.chart.changeData(t)},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return Ost},e}(De);var TD=U(q());var Wm=U(q());var H1=U(q()),JYt={font:function(){return"serif"},padding:1,size:[500,500],spiral:"archimedean",timeInterval:3e3};function Pst(r,e){return e=(0,H1.assign)({},JYt,e),tXt(r,e)}function tXt(r,e){var t=dXt();["font","fontSize","fontWeight","padding","rotate","size","spiral","timeInterval","random"].forEach(function(l){(0,H1.isNil)(e[l])||t[l](e[l])}),t.words(r),e.imageMask&&t.createMask(e.imageMask);var n=t.start(),i=n._tags;i.forEach(function(l){l.x+=e.size[0]/2,l.y+=e.size[1]/2});var a=e.size,o=a[0],s=a[1];return i.push({text:"",value:0,x:0,y:0,opacity:0}),i.push({text:"",value:0,x:o,y:s,opacity:0}),i}var Ej=Math.PI/180,oA=1<<11>>5,ED=1<<11;function eXt(r){return r.text}function rXt(){return"serif"}function kst(){return"normal"}function nXt(r){return r.value}function iXt(){return~~(Math.random()*2)*90}function aXt(){return 1}function oXt(r,e,t,n){if(!e.sprite){var i=r.context,a=r.ratio;i.clearRect(0,0,(oA<<5)/a,ED/a);var o=0,s=0,l=0,u=t.length;for(--n;++n>5<<5,c=~~Math.max(Math.abs(v+m),Math.abs(v-m))}else f=f+31>>5<<5;if(c>l&&(l=c),o+f>=oA<<5&&(o=0,s+=l,l=0),s+c>=ED)break;i.translate((o+(f>>1))/a,(s+(c>>1))/a),e.rotate&&i.rotate(e.rotate*Ej),i.fillText(e.text,0,0),e.padding&&(i.lineWidth=2*e.padding,i.strokeText(e.text,0,0)),i.restore(),e.width=f,e.height=c,e.xoff=o,e.yoff=s,e.x1=f>>1,e.y1=c>>1,e.x0=-e.x1,e.y0=-e.y1,e.hasText=!0,o+=f}for(var x=i.getImageData(0,0,(oA<<5)/a,ED/a).data,b=[];--n>=0;)if(e=t[n],!!e.hasText){for(var f=e.width,S=f>>5,c=e.y1-e.y0,C=0;C>5),L=x[(s+I)*(oA<<5)+(o+C)<<2]?1<<31-C%32:0;b[P]|=L,w|=L}w?A=I:(e.y0++,c--,I--,s++)}e.y1=e.y0+A,e.sprite=b.slice(0,(e.y1-e.y0)*S)}}}function sXt(r,e,t){t>>=5;for(var n=r.sprite,i=r.width>>5,a=r.x-(i<<4),o=a&127,s=32-o,l=r.y1-r.y0,u=(r.y+r.y0)*t+(a>>5),f,c=0;c>>o:0))&e[u+h])return!0;u+=t}return!1}function lXt(r,e){var t=r[0],n=r[1];e.x+e.x0n.x&&(n.x=e.x+e.x1),e.y+e.y1>n.y&&(n.y=e.y+e.y1)}function uXt(r,e){return r.x+r.x1>e[0].x&&r.x+r.x0e[0].y&&r.y+r.y0>5)*r[1]),S=l.length,C=[],w=l.map(function(L,M,O){return L.text=f.call(this,L,M,O),L.font=e.call(this,L,M,O),L.style=c.call(this,L,M,O),L.weight=n.call(this,L,M,O),L.rotate=i.call(this,L,M,O),L.size=~~t.call(this,L,M,O),L.padding=a.call(this,L,M,O),L}).sort(function(L,M){return M.size-L.size}),A=-1,I=d.board?[{x:0,y:0},{x:m,y:g}]:null;P();function P(){for(var L=Date.now();Date.now()-L>1,M.y=g*(s()+.5)>>1,oXt(x,M,w,A),M.hasText&&v(b,M,I)&&(C.push(M),I?d.hasImage||lXt(I,M):I=[{x:M.x+M.x0,y:M.y+M.y0},{x:M.x+M.x1,y:M.y+M.y1}],M.x-=r[0]>>1,M.y-=r[1]>>1)}d._tags=C,d._bounds=I}return d};function p(m){m.width=m.height=1;var g=Math.sqrt(m.getContext("2d").getImageData(0,0,1,1).data.length>>2);m.width=(oA<<5)/g,m.height=ED/g;var x=m.getContext("2d");return x.fillStyle=x.strokeStyle="red",x.textAlign="center",{context:x,ratio:g}}function v(m,g,x){for(var b=g.x,S=g.y,C=Math.sqrt(r[0]*r[0]+r[1]*r[1]),w=o(r),A=s()<.5?1:-1,I,P=-A,L,M;(I=w(P+=A))&&(L=~~I[0],M=~~I[1],!(Math.min(Math.abs(L),Math.abs(M))>=C));)if(g.x=b+L,g.y=S+M,!(g.x+g.x0<0||g.y+g.y0<0||g.x+g.x1>r[0]||g.y+g.y1>r[1])&&(!x||!sXt(g,m,r[0]))&&(!x||uXt(g,x))){for(var O=g.sprite,F=g.width>>5,k=r[0]>>5,G=g.x-(F<<4),D=G&127,N=32-D,z=g.y1-g.y0,j=void 0,W=(g.y+g.y0)*k+(G>>5),J=0;J>>D:0);W+=k}return delete g.sprite,!0}return!1}return d.createMask=function(m){var g=document.createElement("canvas"),x=r[0],b=r[1];if(!(!x||!b)){var S=x>>5,C=Nst((x>>5)*b);g.width=x,g.height=b;var w=g.getContext("2d");w.drawImage(m,0,0,m.width,m.height,0,0,x,b);for(var A=w.getImageData(0,0,x,b).data,I=0;I>5),M=I*x+P<<2,O=A[M]>=250&&A[M+1]>=250&&A[M+2]>=250,F=O?1<<31-P%32:0;C[L]|=F}d.board=C,d.hasImage=!0}},d.timeInterval=function(m){u=m==null?1/0:m},d.words=function(m){l=m},d.size=function(m){r=[+m[0],+m[1]]},d.font=function(m){e=hc(m)},d.fontWeight=function(m){n=hc(m)},d.rotate=function(m){i=hc(m)},d.spiral=function(m){o=hXt[m]||m},d.fontSize=function(m){t=hc(m)},d.padding=function(m){a=hc(m)},d.random=function(m){s=hc(m)},d}function AD(r){var e=r.options,t=r.chart,n=t,i=n.width,a=n.height,o=n.padding,s=n.appendPadding,l=n.ele,u=e.data,f=e.imageMask,c=e.wordField,h=e.weightField,d=e.colorField,p=e.wordStyle,v=e.timeInterval,m=e.random,g=e.spiral,x=e.autoFit,b=x===void 0?!0:x,S=e.placementStrategy;if(!u||!u.length)return[];var C=p.fontFamily,w=p.fontWeight,A=p.padding,I=p.fontSize,P=gXt(u,h),L=[bXt(P),_Xt(P)],M=u.map(function(k){return{text:k[c],value:k[h],color:k[d],datum:k}}),O={imageMask:f,font:C,fontSize:mXt(I,L),fontWeight:w,size:pXt({width:i,height:a,padding:o,appendPadding:s,autoFit:b,container:l}),padding:A,timeInterval:v,random:m,spiral:g,rotate:yXt(e)};if((0,Wm.isFunction)(S)){var F=M.map(function(k,G,D){return E(E(E({},k),{hasText:!!k.text,font:hc(O.font)(k,G,D),weight:hc(O.fontWeight)(k,G,D),rotate:hc(O.rotate)(k,G,D),size:hc(O.fontSize)(k,G,D),style:"normal"}),S.call(t,k,G,D))});return F.push({text:"",value:0,x:0,y:0,opacity:0}),F.push({text:"",value:0,x:O.size[0],y:O.size[1],opacity:0}),F}return Pst(M,O)}function pXt(r){var e=r.width,t=r.height,n=r.container,i=r.autoFit,a=r.padding,o=r.appendPadding;if(i){var s=L1(n);e=s.width,t=s.height}e=e||400,t=t||400;var l=vXt({padding:a,appendPadding:o}),u=l[0],f=l[1],c=l[2],h=l[3],d=[e-(h+f),t-(u+c)];return d}function vXt(r){var e=fc(r.padding),t=fc(r.appendPadding),n=e[0]+t[0],i=e[1]+t[1],a=e[2]+t[2],o=e[3]+t[3];return[n,i,a,o]}function Fst(r){return new Promise(function(e,t){if(r instanceof HTMLImageElement){e(r);return}if((0,Wm.isString)(r)){var n=new Image;n.crossOrigin="anonymous",n.src=r,n.onload=function(){e(n)},n.onerror=function(){As(Vo.ERROR,!1,"image %s load failed !!!",r),t()};return}As(Vo.WARN,r===void 0,"The type of imageMask option must be String or HTMLImageElement."),t()})}function mXt(r,e){if((0,Wm.isFunction)(r))return r;if((0,Wm.isArray)(r)){var t=r[0],n=r[1];if(!e)return function(){return(n+t)/2};var i=e[0],a=e[1];return a===i?function(){return(n+t)/2}:function(s){var l=s.value;return(n-t)/(a-i)*(l-i)+t}}return function(){return r}}function gXt(r,e){return r.map(function(t){return t[e]}).filter(function(t){return typeof t=="number"&&!isNaN(t)})}function yXt(r){var e=xXt(r),t=e.rotation,n=e.rotationSteps;if(!(0,Wm.isArray)(t))return t;var i=t[0],a=t[1],o=n===1?0:(a-i)/(n-1);return function(){return a===i?a:Math.floor(Math.random()*n)*o}}function xXt(r){var e=r.wordStyle.rotationSteps;return e<1&&(As(Vo.WARN,!1,"The rotationSteps option must be greater than or equal to 1."),e=1),{rotation:r.wordStyle.rotation,rotationSteps:e}}function bXt(r){return Math.min.apply(Math,r)}function _Xt(r){return Math.max.apply(Math,r)}var MD="color",Bst=gt({},De.getDefaultOptions(),{timeInterval:2e3,legend:!1,tooltip:{showTitle:!1,showMarkers:!1,showCrosshairs:!1,fields:["text","value",MD],formatter:function(r){return{name:r.text,value:r.value}}},wordStyle:{fontFamily:"Verdana",fontWeight:"normal",padding:1,fontSize:[12,60],rotation:[0,90],rotationSteps:2,rotateRatio:.5}});function SXt(r){var e=r.chart,t=r.options,n=t.colorField,i=t.color,a=AD(r);e.data(a);var o=gt({},r,{options:{xField:"x",yField:"y",seriesField:n&&MD,rawFields:(0,TD.isFunction)(i)&&dn((0,TD.get)(t,"rawFields",[]),["datum"]),point:{color:i,shape:"word-cloud"}}}),s=Gi(o).ext;return s.geometry.label(!1),e.coordinate().reflect("y"),e.axis(!1),r}function CXt(r){return Fe(un({x:{nice:!1},y:{nice:!1}}))(r)}function wXt(r){var e=r.chart,t=r.options,n=t.legend,i=t.colorField;return n===!1?e.legend(!1):i&&e.legend(MD,n),r}function Gst(r){Fe(SXt,CXt,wn,wXt,Pr,Sr,lr,Ms)(r)}or("point","word-cloud",{draw:function(r,e){var t=r.x,n=r.y,i=e.addShape("text",{attrs:E(E({},EXt(r)),{x:t,y:n})}),a=r.data.rotate;return typeof a=="number"&&ea.rotate(i,a*Math.PI/180),i}});function EXt(r){return{fontSize:r.data.size,text:r.data.text,textAlign:"center",fontFamily:r.data.font,fontWeight:r.data.weight,fill:r.color||r.defaultStyle.stroke,textBaseline:"alphabetic"}}var Aj=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="word-cloud",t}return e.getDefaultOptions=function(){return Bst},e.prototype.changeData=function(t){this.updateOption({data:t}),this.options.imageMask?this.render():this.chart.changeData(AD({chart:this.chart,options:this.options}))},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.render=function(){var t=this;return new Promise(function(n){var i=t.options.imageMask;if(!i){r.prototype.render.call(t),n();return}var a=function(o){t.options=E(E({},t.options),{imageMask:o||null}),r.prototype.render.call(t),n()};Fst(i).then(a).catch(a)})},e.prototype.getSchemaAdaptor=function(){return Gst},e.prototype.triggerResize=function(){var t=this;this.chart.destroyed||(this.execAdaptor(),window.setTimeout(function(){r.prototype.triggerResize.call(t)}))},e}(De);var Hst=U(q());var jl=U(Ust()),af=U(q());var AXt={exp:jl.regressionExp,linear:jl.regressionLinear,loess:jl.regressionLoess,log:jl.regressionLog,poly:jl.regressionPoly,pow:jl.regressionPow,quad:jl.regressionQuad};function jst(r,e){var t=10,n={regionStyle:[{position:{start:[r,"max"],end:["max",e]},style:{fill:"#d8d0c0",opacity:.4}},{position:{start:["min","max"],end:[r,e]},style:{fill:"#a3dda1",opacity:.4}},{position:{start:["min",e],end:[r,"min"]},style:{fill:"#d8d0c0",opacity:.4}},{position:{start:[r,e],end:["max","min"]},style:{fill:"#a3dda1",opacity:.4}}],lineStyle:{stroke:"#9ba29a",lineWidth:1},labelStyle:[{position:["max",e],offsetX:-t,offsetY:-t,style:{textAlign:"right",textBaseline:"bottom",fontSize:14,fill:"#ccc"}},{position:["min",e],offsetX:t,offsetY:-t,style:{textAlign:"left",textBaseline:"bottom",fontSize:14,fill:"#ccc"}},{position:["min",e],offsetX:t,offsetY:t,style:{textAlign:"left",textBaseline:"top",fontSize:14,fill:"#ccc"}},{position:["max",e],offsetX:-t,offsetY:t,style:{textAlign:"right",textBaseline:"top",fontSize:14,fill:"#ccc"}}]};return n}var MXt=function(r,e){var t=e.view,n=e.options,i=n.xField,a=n.yField,o=t.getScaleByField(i),s=t.getScaleByField(a),l=r.map(function(u){return t.getCoordinate().convert({x:o.scale(u[0]),y:s.scale(u[1])})});return oj(l,!1)},Wst=function(r){var e=r.options,t=e.xField,n=e.yField,i=e.data,a=e.regressionLine,o=a.type,s=o===void 0?"linear":o,l=a.algorithm,u;if(l)u=(0,af.isArray)(l)?l:l(i);else{var f=AXt[s]().x(function(c){return c[t]}).y(function(c){return c[n]});u=f(i)}return MXt(u,r)},Vst=function(r){var e,t=r.meta,n=t===void 0?{}:t,i=r.xField,a=r.yField,o=r.data,s=o[0][i],l=o[0][a],u=s>0,f=l>0;function c(h,d){var p=(0,af.get)(n,[h]);function v(g){return(0,af.get)(p,g)}var m={};return d==="x"?((0,af.isNumber)(s)&&((0,af.isNumber)(v("min"))||(m.min=u?0:s*2),(0,af.isNumber)(v("max"))||(m.max=u?s*2:0)),m):((0,af.isNumber)(l)&&((0,af.isNumber)(v("min"))||(m.min=f?0:l*2),(0,af.isNumber)(v("max"))||(m.max=f?l*2:0)),m)}return E(E({},n),(e={},e[i]=E(E({},n[i]),c(i,"x")),e[a]=E(E({},n[a]),c(a,"y")),e))};function Mj(r){var e=r.data,t=e===void 0?[]:e,n=r.xField,i=r.yField;if(t.length){for(var a=!0,o=!0,s=t[0],l=void 0,u=1;u0){var s=this.view.geometries[0],l=s.dataArray,u=o[0].name,f=[];return l.forEach(function(c){c.forEach(function(h){var d=ea.getTooltipItems(h,s),p=d[0];if(!i&&p&&p.name===u){var v=(0,Tj.isNil)(a)?u:a;f.push(E(E({},p),{name:p.title,title:v}))}else if(i&&p){var v=(0,Tj.isNil)(a)?p.name||u:a;f.push(E(E({},p),{name:p.title,title:v}))}})}),f}return[]},e}(Qb);Qu("radar-tooltip",zXt);var qst=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.init=function(){var t=this.context.view;t.removeInteraction("tooltip")},e.prototype.show=function(){var t=this.context.event,n=this.getTooltipController();n.showTooltip({x:t.x,y:t.y})},e.prototype.hide=function(){var t=this.getTooltipController();t.hideTooltip()},e.prototype.getTooltipController=function(){var t=this.context.view;return t.getController("radar-tooltip")},e}(Tr);nr("radar-tooltip",qst);xr("radar-tooltip",{start:[{trigger:"plot:mousemove",action:"radar-tooltip:show"}],end:[{trigger:"plot:mouseleave",action:"radar-tooltip:hide"}]});var Ij=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="radar",t}return e.prototype.changeData=function(t){this.updateOption({data:t}),this.chart.changeData(t)},e.prototype.getDefaultOptions=function(){return gt({},r.prototype.getDefaultOptions.call(this),{xAxis:{label:{offset:15},grid:{line:{type:"line"}}},yAxis:{grid:{line:{type:"circle"}}},legend:{position:"top"},tooltip:{shared:!0,showCrosshairs:!0,showMarkers:!0,crosshairs:{type:"xy",line:{style:{stroke:"#565656",lineDash:[4]}},follow:!0}}})},e.prototype.getSchemaAdaptor=function(){return Xst},e}(De);var ra=U(q());var _0=U(q());var Vm;(function(r){r.Left="Left",r.Right="Right"})(Vm||(Vm={}));var Op;(function(r){r.Line="line",r.Column="column"})(Op||(Op={}));var Wl="left-axes-view",Vl="right-axes-view",Kst={nice:!0,label:{autoHide:!0,autoRotate:!1}},Zst=E(E({},Kst),{position:"left"}),$st=E(E({},Kst),{position:"right",grid:null});function uA(r){return(0,_0.get)(r,"geometry")===Op.Line}function fA(r){return(0,_0.get)(r,"geometry")===Op.Column}function Lj(r,e,t){return fA(t)?gt({},{geometry:Op.Column,label:t.label&&t.isRange?{content:function(n){var i;return(i=n[e])===null||i===void 0?void 0:i.join("-")}}:void 0},t):E({geometry:Op.Line},t)}function Oj(r,e){var t=r[0],n=r[1];if((0,_0.isArray)(e)){var i=e[0],a=e[1];return[i,a]}var o=(0,_0.get)(e,t),s=(0,_0.get)(e,n);return[o,s]}function Dj(r,e){return e===Vm.Left?r===!1?!1:gt({},Zst,r):e===Vm.Right?r===!1?!1:gt({},$st,r):r}var Rh=U(q());function Pj(r){var e=r.view,t=r.geometryOption,n=r.yField,i=r.legend,a=(0,Rh.get)(i,"marker"),o=mi(e,uA(t)?"line":"interval");if(!t.seriesField){var s=(0,Rh.get)(e,"options.scales."+n+".alias")||n,l=o.getAttribute("color"),u=e.getTheme().defaultColor;l&&(u=ea.getMappingValue(l,s,(0,Rh.get)(l,["values",0],u)));var f=((0,Rh.isFunction)(a)?a:!(0,Rh.isEmpty)(a)&>({},{style:{stroke:u,fill:u}},a))||(uA(t)?{symbol:function(h,d,p){return[["M",h-p,d],["L",h+p,d]]},style:{lineWidth:2,r:6,stroke:u}}:{symbol:"square",style:{fill:u}});return[{value:n,name:s,marker:f,isGeometry:!0,viewId:e.id}]}var c=o.getGroupAttributes();return(0,Rh.reduce)(c,function(h,d){var p=ea.getLegendItems(e,o,d,e.getTheme(),a);return h.concat(p)},[])}var Qst=U(q());function Jst(r){var e=r.options,t=r.chart,n=e.geometryOption,i=n.isStack,a=n.color,o=n.seriesField,s=n.groupField,l=n.isGroup,u=["xField","yField"];if(uA(n)){Ul(gt({},r,{options:E(E(E({},Hr(e,u)),n),{line:{color:n.color,style:n.lineStyle}})})),Gi(gt({},r,{options:E(E(E({},Hr(e,u)),n),{point:n.point&&E({color:a,shape:"circle"},n.point)})}));var f=[];l&&f.push({type:"dodge",dodgeBy:s||o,customOffset:0}),i&&f.push({type:"stack"}),f.length&&(0,Qst.each)(t.geometries,function(c){c.adjust(f)})}return fA(n)&&jm(gt({},r,{options:E(E(E({},Hr(e,u)),n),{widthRatio:n.columnWidthRatio,interval:E(E({},Hr(n,["color"])),{style:n.columnStyle})})})),r}var cA=U(q());var kj=function(r,e){var t=e[0],n=e[1],i=r.getOptions().data,a=r.getXScale(),o=(0,cA.size)(i);if(!(!a||!o)){var s=!0,l=(0,cA.valuesOfKey)(i,a.field),u=s?l:l.reverse(),f=(0,cA.size)(u),c=Math.floor(t*(f-1)),h=Math.floor(n*(f-1));r.filter(a.field,function(d){var p=u.indexOf(d);return p>-1?uj(p,c,h):!0}),r.render(!0)}};function UXt(r){var e,t=r.options,n=t.geometryOptions,i=n===void 0?[]:n,a=t.xField,o=t.yField,s=(0,ra.every)(i,function(l){var u=l.geometry;return u===Op.Line||u===void 0});return gt({},{options:{geometryOptions:[],meta:(e={},e[a]={type:"cat",sync:!0,range:s?[0,1]:void 0},e),tooltip:{showMarkers:s,showCrosshairs:s,shared:!0,crosshairs:{type:"x"}},interactions:s?[{type:"legend-visible-filter"}]:[{type:"legend-visible-filter"},{type:"active-region"}],legend:{position:"top-left"}}},r,{options:{yAxis:Oj(o,t.yAxis),geometryOptions:[Lj(a,o[0],i[0]),Lj(a,o[1],i[1])],annotations:Oj(o,t.annotations)}})}function jXt(r){var e,t,n=r.chart,i=r.options,a=i.geometryOptions,o={line:0,column:1},s=[{type:(e=a[0])===null||e===void 0?void 0:e.geometry,id:Wl},{type:(t=a[1])===null||t===void 0?void 0:t.geometry,id:Vl}];return s.sort(function(l,u){return-o[l.type]+o[u.type]}).forEach(function(l){return n.createView({id:l.id})}),r}function WXt(r){var e=r.chart,t=r.options,n=t.xField,i=t.yField,a=t.geometryOptions,o=t.data,s=t.tooltip,l=[E(E({},a[0]),{id:Wl,data:o[0],yField:i[0]}),E(E({},a[1]),{id:Vl,data:o[1],yField:i[1]})];return l.forEach(function(u){var f=u.id,c=u.data,h=u.yField,d=fA(u)&&u.isPercent,p=d?xj(c,h,n,h):c,v=qr(e,f).data(p),m=d?E({formatter:function(g){return{name:g[u.seriesField]||h,value:(Number(g[h])*100).toFixed(2)+"%"}}},s):s;Jst({chart:v,options:{xField:n,yField:h,tooltip:m,geometryOption:u}})}),r}function VXt(r){var e,t=r.chart,n=r.options,i=n.geometryOptions,a=((e=t.getTheme())===null||e===void 0?void 0:e.colors10)||[],o=0;return t.once("beforepaint",function(){(0,ra.each)(i,function(s,l){var u=qr(t,l===0?Wl:Vl);if(!s.color){var f=u.getGroupScales(),c=(0,ra.get)(f,[0,"values","length"],1),h=a.slice(o,o+c).concat(l===0?[]:a);u.geometries.forEach(function(d){s.seriesField?d.color(s.seriesField,h):d.color(h[0])}),o+=c}}),t.render(!0)}),r}function HXt(r){var e,t,n=r.chart,i=r.options,a=i.xAxis,o=i.yAxis,s=i.xField,l=i.yField;return un((e={},e[s]=a,e[l[0]]=o[0],e))(gt({},r,{chart:qr(n,Wl)})),un((t={},t[s]=a,t[l[1]]=o[1],t))(gt({},r,{chart:qr(n,Vl)})),r}function YXt(r){var e=r.chart,t=r.options,n=qr(e,Wl),i=qr(e,Vl),a=t.xField,o=t.yField,s=t.xAxis,l=t.yAxis;return e.axis(a,!1),e.axis(o[0],!1),e.axis(o[1],!1),n.axis(a,s),n.axis(o[0],Dj(l[0],Vm.Left)),i.axis(a,!1),i.axis(o[1],Dj(l[1],Vm.Right)),r}function XXt(r){var e=r.chart,t=r.options,n=t.tooltip,i=qr(e,Wl),a=qr(e,Vl);return e.tooltip(n),i.tooltip({shared:!0}),a.tooltip({shared:!0}),r}function qXt(r){var e=r.chart;return Pr(gt({},r,{chart:qr(e,Wl)})),Pr(gt({},r,{chart:qr(e,Vl)})),r}function KXt(r){var e=r.chart,t=r.options,n=t.annotations,i=(0,ra.get)(n,[0]),a=(0,ra.get)(n,[1]);return nn(i)(gt({},r,{chart:qr(e,Wl),options:{annotations:i}})),nn(a)(gt({},r,{chart:qr(e,Vl),options:{annotations:a}})),r}function ZXt(r){var e=r.chart;return lr(gt({},r,{chart:qr(e,Wl)})),lr(gt({},r,{chart:qr(e,Vl)})),lr(r),r}function $Xt(r){var e=r.chart;return Sr(gt({},r,{chart:qr(e,Wl)})),Sr(gt({},r,{chart:qr(e,Vl)})),r}function QXt(r){var e=r.chart,t=r.options,n=t.yAxis;return nf(gt({},r,{chart:qr(e,Wl),options:{yAxis:n[0]}})),nf(gt({},r,{chart:qr(e,Vl),options:{yAxis:n[1]}})),r}function JXt(r){var e=r.chart,t=r.options,n=t.legend,i=t.geometryOptions,a=t.yField,o=t.data,s=qr(e,Wl),l=qr(e,Vl);if(n===!1)e.legend(!1);else if((0,ra.isObject)(n)&&n.custom===!0)e.legend(n);else{var u=(0,ra.get)(i,[0,"legend"],n),f=(0,ra.get)(i,[1,"legend"],n);e.once("beforepaint",function(){var c=o[0].length?Pj({view:s,geometryOption:i[0],yField:a[0],legend:u}):[],h=o[1].length?Pj({view:l,geometryOption:i[1],yField:a[1],legend:f}):[];e.legend(gt({},n,{custom:!0,items:c.concat(h)}))}),i[0].seriesField&&s.legend(i[0].seriesField,u),i[1].seriesField&&l.legend(i[1].seriesField,f),e.on("legend-item:click",function(c){var h=(0,ra.get)(c,"gEvent.delegateObject",{});if(h&&h.item){var d=h.item,p=d.value,v=d.isGeometry,m=d.viewId;if(v){var g=(0,ra.findIndex)(a,function(S){return S===p});if(g>-1){var x=(0,ra.get)(qr(e,m),"geometries");(0,ra.each)(x,function(S){S.changeVisible(!h.item.unchecked)})}}else{var b=(0,ra.get)(e.getController("legend"),"option.items",[]);(0,ra.each)(e.views,function(S){var C=S.getGroupScales();(0,ra.each)(C,function(w){w.values&&w.values.indexOf(p)>-1&&S.filter(w.field,function(A){var I=(0,ra.find)(b,function(P){return P.value===A});return!I.unchecked})}),e.render(!0)})}}})}return r}function t9t(r){var e=r.chart,t=r.options,n=t.slider,i=qr(e,Wl),a=qr(e,Vl);return n&&(i.option("slider",n),i.on("slider:valuechanged",function(o){var s=o.event,l=s.value,u=s.originValue;(0,ra.isEqual)(l,u)||kj(a,l)}),e.once("afterpaint",function(){if(!(0,ra.isBoolean)(n)){var o=n.start,s=n.end;(o||s)&&kj(a,[o,s])}})),r}function tlt(r){return Fe(UXt,jXt,ZXt,WXt,HXt,YXt,QXt,XXt,qXt,KXt,$Xt,VXt,JXt,t9t)(r)}var Rj=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="dual-axes",t}return e.prototype.getDefaultOptions=function(){return gt({},r.prototype.getDefaultOptions.call(this),{yAxis:[],syncViewPadding:!0})},e.prototype.getSchemaAdaptor=function(){return tlt},e}(De);var elt=U(q()),Hm="x",Dp="y",Nj={showTitle:!1,shared:!0,showMarkers:!1,customContent:function(r,e){return""+(0,elt.get)(e,[0,"data","y"],0)},containerTpl:'
      ',itemTpl:"{value}",domStyles:{"g2-tooltip":{padding:"2px 4px",fontSize:"10px"}},showCrosshairs:!0,crosshairs:{type:"x"}},rlt={appendPadding:2,tooltip:E({},Nj),animation:{}};var nlt=U(q());function Su(r){return(0,nlt.map)(r||[],function(e,t){return{x:""+t,y:e}})}function e9t(r){var e=r.chart,t=r.options,n=t.data,i=t.color,a=t.areaStyle,o=t.point,s=t.line,l=o==null?void 0:o.state,u=Su(n);e.data(u);var f=gt({},r,{options:{xField:Hm,yField:Dp,area:{color:i,style:a},line:s,point:o}}),c=gt({},f,{options:{tooltip:!1}}),h=gt({},f,{options:{tooltip:!1,state:l}});return Dh(f),Ul(c),Gi(h),e.axis(!1),e.legend(!1),r}function dc(r){var e,t,n=r.options,i=n.xAxis,a=n.yAxis,o=n.data,s=Su(o);return Fe(un((e={},e[Hm]=i,e[Dp]=a,e),(t={},t[Hm]={type:"cat"},t[Dp]=P1(s,Dp),t)))(r)}function OD(r){return Fe(Xi("areaStyle"),e9t,dc,wn,lr,Sr,nn())(r)}function r9t(r){var e=r.chart,t=r.options,n=t.data,i=t.color,a=t.lineStyle,o=t.point,s=o==null?void 0:o.state,l=Su(n);e.data(l);var u=gt({},r,{options:{xField:Hm,yField:Dp,line:{color:i,style:a},point:o}}),f=gt({},u,{options:{tooltip:!1,state:s}});return Ul(u),Gi(f),e.axis(!1),e.legend(!1),r}function DD(r){return Fe(r9t,dc,lr,wn,Sr,nn())(r)}var hA=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="tiny-line",t}return e.getDefaultOptions=function(){return rlt},e.prototype.changeData=function(t){this.updateOption({data:t});var n=this,i=n.chart,a=n.options;dc({chart:i,options:a}),i.changeData(Su(t))},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return DD},e}(De);function n9t(r){var e=r.chart,t=r.options,n=t.data,i=t.color,a=t.columnStyle,o=t.columnWidthRatio,s=Su(n);e.data(s);var l=gt({},r,{options:{xField:Hm,yField:Dp,widthRatio:o,interval:{style:a,color:i}}});return gi(l),e.axis(!1),e.legend(!1),e.interaction("element-active"),r}function PD(r){return Fe(lr,Xi("columnStyle"),n9t,dc,wn,Sr,nn())(r)}var ilt=U(q()),i9t={showTitle:!1,shared:!0,showMarkers:!1,customContent:function(r,e){return""+(0,ilt.get)(e,[0,"data","y"],0)},containerTpl:'
      ',itemTpl:"{value}",domStyles:{"g2-tooltip":{padding:"2px 4px",fontSize:"10px"}}},alt={appendPadding:2,tooltip:E({},i9t),animation:{}};var dA=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="tiny-column",t}return e.getDefaultOptions=function(){return alt},e.prototype.changeData=function(t){this.updateOption({data:t});var n=this,i=n.chart,a=n.options;dc({chart:i,options:a}),i.changeData(Su(t))},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return PD},e}(De);var olt={appendPadding:2,tooltip:E({},Nj),color:"l(90) 0:#E5EDFE 1:#ffffff",areaStyle:{fillOpacity:.6},line:{size:1,color:"#5B8FF9"},animation:{}};var pA=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="tiny-area",t}return e.getDefaultOptions=function(){return olt},e.prototype.changeData=function(t){this.updateOption({data:t});var n=this,i=n.chart,a=n.options;dc({chart:i,options:a}),i.changeData(Su(t))},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return OD},e}(De);var _o=U(q());function slt(r,e,t){if(t===1)return[0,e];var n=Math.floor(r/e);return[e*n,e*(n+1)]}function a9t(r){return Math.ceil(Math.log(r.length)/Math.LN2)+1}function kD(r,e,t,n,i){var a=(0,_o.clone)(r);(0,_o.sortBy)(a,e);var o=(0,_o.valuesOfKey)(a,e),s=(0,_o.getRange)(o),l=s.max-s.min,u=t;if(!t&&n&&(u=n>1?l/(n-1):s.max),!t&&!n){var f=a9t(o);u=l/f}var c={},h=(0,_o.groupBy)(a,i);(0,_o.isEmpty)(h)?(0,_o.each)(a,function(p){var v=p[e],m=slt(v,u,n),g=m[0]+"-"+m[1];(0,_o.hasKey)(c,g)||(c[g]={range:m,count:0}),c[g].count+=1}):Object.keys(h).forEach(function(p){(0,_o.each)(h[p],function(v){var m=v[e],g=slt(m,u,n),x=g[0]+"-"+g[1],b=x+"-"+p;(0,_o.hasKey)(c,b)||(c[b]={range:g,count:0},c[b][i]=p),c[b].count+=1})});var d=[];return(0,_o.each)(c,function(p){d.push(p)}),d}var vA="range",Y1="count",llt=gt({},De.getDefaultOptions(),{columnStyle:{stroke:"#FFFFFF"},tooltip:{shared:!0,showMarkers:!1},interactions:[{type:"active-region"}]});function o9t(r){var e=r.chart,t=r.options,n=t.data,i=t.binField,a=t.binNumber,o=t.binWidth,s=t.color,l=t.stackField,u=t.legend,f=t.columnStyle,c=kD(n,i,o,a,l);e.data(c);var h=gt({},r,{options:{xField:vA,yField:Y1,seriesField:l,isStack:!0,interval:{color:s,style:f}}});return gi(h),u&&l&&e.legend(l,u),r}function s9t(r){var e,t=r.options,n=t.xAxis,i=t.yAxis;return Fe(un((e={},e[vA]=n,e[Y1]=i,e)))(r)}function l9t(r){var e=r.chart,t=r.options,n=t.xAxis,i=t.yAxis;return n===!1?e.axis(vA,!1):e.axis(vA,n),i===!1?e.axis(Y1,!1):e.axis(Y1,i),r}function u9t(r){var e=r.chart,t=r.options,n=t.label,i=mi(e,"interval");if(!n)i.label(!1);else{var a=n.callback,o=rr(n,["callback"]);i.label({fields:[Y1],callback:a,cfg:Kn(o)})}return r}function RD(r){return Fe(lr,Xi("columnStyle"),o9t,s9t,l9t,Ms,u9t,wn,Pr,Sr)(r)}var mA=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="histogram",t}return e.getDefaultOptions=function(){return llt},e.prototype.changeData=function(t){this.updateOption({data:t});var n=this.options,i=n.binField,a=n.binNumber,o=n.binWidth,s=n.stackField;this.chart.changeData(kD(t,i,o,a,s))},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return RD},e}(De);var clt=U(q());var Fj=["#FAAD14","#E8EDF3"],ult={percent:.2,color:Fj,animation:{}};var flt=U(q());function X1(r){var e=(0,flt.clamp)(uc(r)?r:0,0,1);return[{type:"current",percent:e},{type:"target",percent:1-e}]}function Bj(r){var e=r.chart,t=r.options,n=t.percent,i=t.progressStyle,a=t.color,o=t.barWidthRatio;e.data(X1(n));var s=gt({},r,{options:{xField:"1",yField:"percent",seriesField:"type",isStack:!0,widthRatio:o,interval:{style:i,color:(0,clt.isString)(a)?[a,Fj[1]]:a},args:{zIndexReversed:!0,sortZIndex:!0}}});return gi(s),e.tooltip(!1),e.axis(!1),e.legend(!1),r}function f9t(r){var e=r.chart;return e.coordinate("rect").transpose(),r}function ND(r){return Fe(Bj,un({}),f9t,Sr,lr,nn())(r)}var gA=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="process",t}return e.getDefaultOptions=function(){return ult},e.prototype.changeData=function(t){this.updateOption({percent:t}),this.chart.changeData(X1(t))},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return ND},e}(De);var FD=U(q());function c9t(r){var e=r.chart,t=r.options,n=t.innerRadius,i=t.radius;return e.coordinate("theta",{innerRadius:n,radius:i}),r}function Gj(r,e){var t=r.chart,n=r.options,i=n.innerRadius,a=n.statistic,o=n.percent,s=n.meta;if(t.getController("annotation").clear(!0),i&&a){var l=(0,FD.get)(s,["percent","formatter"])||function(f){return(f*100).toFixed(2)+"%"},u=a.content;u&&(u=gt({},u,{content:(0,FD.isNil)(u.content)?l(o):u.content})),Ip(t,{statistic:E(E({},a),{content:u}),plotType:"ring-progress"},{percent:o})}return e&&t.render(!0),r}function BD(r){return Fe(Bj,un({}),c9t,Gj,Sr,lr,nn())(r)}var hlt={percent:.2,innerRadius:.8,radius:.98,color:["#FAAD14","#E8EDF3"],statistic:{title:!1,content:{style:{fontSize:"14px",fontWeight:300,fill:"#4D4D4D",textAlign:"center",textBaseline:"middle"}}},animation:{}};var yA=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="ring-process",t}return e.getDefaultOptions=function(){return hlt},e.prototype.changeData=function(t){this.chart.emit(wr.BEFORE_CHANGE_DATA,zn.fromData(this.chart,wr.BEFORE_CHANGE_DATA,null)),this.updateOption({percent:t}),this.chart.data(X1(t)),Gj({chart:this.chart,options:this.options},!0),this.chart.emit(wr.AFTER_CHANGE_DATA,zn.fromData(this.chart,wr.AFTER_CHANGE_DATA,null))},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return BD},e}(De);var dlt=U(q());function h9t(r){var e=r.chart,t=r.options,n=t.data,i=t.type,a=t.xField,o=t.yField,s=t.colorField,l=t.sizeField,u=t.sizeRatio,f=t.shape,c=t.color,h=t.tooltip,d=t.heatmapStyle;e.data(n);var p="polygon";i==="density"&&(p="heatmap");var v=Sa(h,[a,o,s]),m=v.fields,g=v.formatter,x=1;return(u||u===0)&&(!f&&!l?console.warn("sizeRatio is not in effect: Must define shape or sizeField first"):u<0||u>1?console.warn("sizeRatio is not in effect: It must be a number in [0,1]"):x=u),Bi(gt({},r,{options:{type:p,colorField:s,tooltipFields:m,shapeField:l||"",label:void 0,mapping:{tooltip:g,shape:f&&(l?function(b){var S=n.map(function(A){return A[l]}),C=Math.min.apply(Math,S),w=Math.max.apply(Math,S);return[f,((0,dlt.get)(b,l)-C)/(w-C),x]}:function(){return[f,1,x]}),color:c||s&&e.getTheme().sequenceColors.join("-"),style:d}}})),r}function d9t(r){var e,t=r.options,n=t.xAxis,i=t.yAxis,a=t.xField,o=t.yField;return Fe(un((e={},e[a]=n,e[o]=i,e)))(r)}function p9t(r){var e=r.chart,t=r.options,n=t.xAxis,i=t.yAxis,a=t.xField,o=t.yField;return n===!1?e.axis(a,!1):e.axis(a,n),i===!1?e.axis(o,!1):e.axis(o,i),r}function v9t(r){var e=r.chart,t=r.options,n=t.legend,i=t.colorField,a=t.sizeField,o=t.sizeLegend,s=n!==!1;return i&&e.legend(i,s?n:!1),a&&e.legend(a,o===void 0?n:o),!s&&!o&&e.legend(!1),r}function m9t(r){var e=r.chart,t=r.options,n=t.label,i=t.colorField,a=t.type,o=mi(e,a==="density"?"heatmap":"polygon");if(!n)o.label(!1);else if(i){var s=n.callback,l=rr(n,["callback"]);o.label({fields:[i],callback:s,cfg:Kn(l)})}return r}function g9t(r){var e=r.chart,t=r.options,n=t.coordinate,i=t.reflect;return n&&e.coordinate({type:n.type||"rect",cfg:n.cfg}),i&&e.coordinate().reflect(i),r}function plt(r){return Fe(lr,Xi("heatmapStyle"),d9t,g9t,h9t,p9t,v9t,wn,m9t,nn(),Pr,Sr,Ms)(r)}var vlt=gt({},De.getDefaultOptions(),{type:"polygon",legend:!1,coordinate:{type:"rect"},xAxis:{tickLine:null,line:null,grid:{alignTick:!1,line:{style:{lineWidth:1,lineDash:null,stroke:"#f0f0f0"}}}},yAxis:{grid:{alignTick:!1,line:{style:{lineWidth:1,lineDash:null,stroke:"#f0f0f0"}}}}});or("polygon","circle",{draw:function(r,e){var t,n,i=r.x,a=r.y,o=this.parsePoints(r.points),s=Math.abs(o[2].x-o[1].x),l=Math.abs(o[1].y-o[0].y),u=Math.min(s,l)/2,f=Number(r.shape[1]),c=Number(r.shape[2]),h=Math.sqrt(c),d=u*h*Math.sqrt(f),p=((t=r.style)===null||t===void 0?void 0:t.fill)||r.color||((n=r.defaultStyle)===null||n===void 0?void 0:n.fill),v=e.addShape("circle",{attrs:E(E(E({x:i,y:a,r:d},r.defaultStyle),r.style),{fill:p})});return v}});or("polygon","square",{draw:function(r,e){var t,n,i=r.x,a=r.y,o=this.parsePoints(r.points),s=Math.abs(o[2].x-o[1].x),l=Math.abs(o[1].y-o[0].y),u=Math.min(s,l),f=Number(r.shape[1]),c=Number(r.shape[2]),h=Math.sqrt(c),d=u*h*Math.sqrt(f),p=((t=r.style)===null||t===void 0?void 0:t.fill)||r.color||((n=r.defaultStyle)===null||n===void 0?void 0:n.fill),v=e.addShape("rect",{attrs:E(E(E({x:i-d/2,y:a-d/2,width:d,height:d},r.defaultStyle),r.style),{fill:p})});return v}});var zj=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="heatmap",t}return e.getDefaultOptions=function(){return vlt},e.prototype.getSchemaAdaptor=function(){return plt},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e}(De);var UD=U(q());var Uj,Ym="$$range$$",y9t="low-q1-median-q3-high",mlt="$$y_outliers$$",GD="outliers_view",glt=gt({},De.getDefaultOptions(),{meta:(Uj={},Uj[Ym]={min:0,alias:y9t},Uj),interactions:[{type:"active-region"}],tooltip:{showMarkers:!1,shared:!0},boxStyle:{lineWidth:1}});var ylt=U(q());var zD=function(r,e){var t=r;if(Array.isArray(e)){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4];t=(0,ylt.map)(r,function(l){return l[Ym]=[l[n],l[i],l[a],l[o],l[s]],l})}return t};function x9t(r){var e=r.chart,t=r.options,n=t.xField,i=t.yField,a=t.groupField,o=t.color,s=t.tooltip,l=t.boxStyle;e.data(zD(t.data,i));var u=(0,UD.isArray)(i)?Ym:i,f=i?(0,UD.isArray)(i)?i:[i]:[],c=s;c!==!1&&(c=gt({},{fields:(0,UD.isArray)(i)?i:[]},c));var h=Bm(gt({},r,{options:{xField:n,yField:u,seriesField:a,tooltip:c,rawFields:f,label:!1,schema:{shape:"box",color:o,style:l}}})).ext;return a&&h.geometry.adjust("dodge"),r}function b9t(r){var e=r.chart,t=r.options,n=t.xField,i=t.data,a=t.outliersField,o=t.outliersStyle,s=t.padding,l=t.label;if(!a)return r;var u=e.createView({padding:s,id:GD}),f=i.reduce(function(c,h){var d=h[a];return d.forEach(function(p){var v;return c.push(E(E({},h),(v={},v[a]=p,v)))}),c},[]);return u.data(f),Gi({chart:u,options:{xField:n,yField:a,point:{shape:"circle",style:o},label:l}}),u.axis(!1),r}function _9t(r){var e,t,n=r.chart,i=r.options,a=i.meta,o=i.xAxis,s=i.yAxis,l=i.xField,u=i.yField,f=i.outliersField,c=Array.isArray(u)?Ym:u,h={};if(f){var d=mlt;h=(e={},e[f]={sync:d,nice:!0},e[c]={sync:d,nice:!0},e)}var p=gt(h,a,(t={},t[l]=Hr(o,za),t[c]=Hr(s,za),t));return n.scale(p),r}function S9t(r){var e=r.chart,t=r.options,n=t.xAxis,i=t.yAxis,a=t.xField,o=t.yField,s=Array.isArray(o)?Ym:o;return n===!1?e.axis(a,!1):e.axis(a,n),i===!1?e.axis(Ym,!1):e.axis(s,i),r}function C9t(r){var e=r.chart,t=r.options,n=t.legend,i=t.groupField;return i?n?e.legend(i,n):e.legend(i,{position:"bottom"}):e.legend(!1),r}function xlt(r){return Fe(x9t,b9t,_9t,S9t,C9t,wn,Pr,Sr,lr)(r)}var jj=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="box",t}return e.getDefaultOptions=function(){return glt},e.prototype.changeData=function(t){this.updateOption({data:t});var n=this.options.yField,i=this.chart.views.find(function(a){return a.id===GD});i&&i.data(t),this.chart.changeData(zD(t,n))},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return xlt},e}(De);var vc=U(q());var Nh=U(q()),Tlt=U(wlt());function Elt(r,e){var t=r.length*e;if(r.length===0)throw new Error("quantile requires at least one data point.");if(e<0||e>1)throw new Error("quantiles must be between 0 and 1");return e===1?r[r.length-1]:e===0?r[0]:t%1!=0?r[Math.ceil(t)-1]:r.length%2==0?(r[t-1]+r[t])/2:r[t]}function xA(r,e,t){var n=r[e];r[e]=r[t],r[t]=n}function WD(r,e,t,n){for(t=t||0,n=n||r.length-1;n>t;){if(n-t>600){var i=n-t+1,a=e-t+1,o=Math.log(i),s=.5*Math.exp(2*o/3),l=.5*Math.sqrt(o*s*(i-s)/i);a-i/2<0&&(l*=-1);var u=Math.max(t,Math.floor(e-a*s/i+l)),f=Math.min(n,Math.floor(e+(i-a)*s/i+l));WD(r,e,u,f)}var c=r[e],h=t,d=n;for(xA(r,t,e),r[n]>c&&xA(r,t,n);hc;)d--}r[t]===c?xA(r,t,d):(d++,xA(r,d,n)),d<=e&&(t=d+1),e<=d&&(n=d-1)}}function q1(r,e){var t=r.slice();if(Array.isArray(e)){M9t(t,e);for(var n=[],i=0;ie?e:r},lighten:function(r,e){return r>e?r:e},dodge:function(r,e){return r===255?255:(r=255*(e/255)/(1-r/255),r>255?255:r)},burn:function(r,e){return e===255?255:r===0?0:255*(1-Math.min(1,(1-e/255)/(r/255)))}},B9t=function(r){if(!Flt[r])throw new Error("unknown blend mode "+r);return Flt[r]};function Blt(r,e,t){t===void 0&&(t="normal");var n=F9t(B9t(t))(qD(r),qD(e)),i=qD(r),a=i[0],o=i[1],s=i[2],l=i[3],u=qD(e),f=u[0],c=u[1],h=u[2],d=u[3],p=Number((l+d*(1-l)).toFixed(2)),v=Math.round((l*(1-d)*(a/255)+l*d*(n[0]/255)+(1-l)*d*(f/255))/p*255),m=Math.round((l*(1-d)*(o/255)+l*d*(n[1]/255)+(1-l)*d*(c/255))/p*255),g=Math.round((l*(1-d)*(s/255)+l*d*(n[2]/255)+(1-l)*d*(h/255))/p*255);return"rgba("+v+", "+m+", "+g+", "+p+")"}function qD(r){var e=r.replace("/s+/g",""),t;return typeof e=="string"&&!e.startsWith("rgba")&&!e.startsWith("#")?t=mu.rgb2arr(mu.toRGB(e)).concat([1]):(e.startsWith("rgba")&&(t=e.replace("rgba(","").replace(")","").split(",")),e.startsWith("#")&&(t=mu.rgb2arr(e).concat([1])),t.map(function(n,i){return i===3?Number(n):n|0}))}var Is=U(Xj());var zlt=1e-10;function bA(r,e){var t=z9t(r),n=t.filter(function(A){return G9t(A,r)}),i=0,a=0,o,s=[];if(n.length>1){var l=$j(n);for(o=0;o-1){var v=r[c.parentIndex[p]],m=Math.atan2(c.x-v.x,c.y-v.y),g=Math.atan2(f.x-v.x,f.y-v.y),x=g-m;x<0&&(x+=2*Math.PI);var b=g-x/2,S=wu(h,{x:v.x+v.radius*Math.sin(b),y:v.y+v.radius*Math.cos(b)});S>v.radius*2&&(S=v.radius*2),(d===null||d.width>S)&&(d={circle:v,width:S,p1:c,p2:f})}d!==null&&(s.push(d),i+=qj(d.circle.radius,d.width),f=c)}}else{var C=r[0];for(o=1;oMath.abs(C.radius-r[o].radius)){w=!0;break}w?i=a=0:(i=C.radius*C.radius*Math.PI,s.push({circle:C,p1:{x:C.x,y:C.y+C.radius},p2:{x:C.x-zlt,y:C.y+C.radius},width:C.radius*2}))}return a/=2,e&&(e.area=i+a,e.arcArea=i,e.polygonArea=a,e.arcs=s,e.innerPoints=n,e.intersectionPoints=t),i+a}function G9t(r,e){for(var t=0;te[t].radius+zlt)return!1;return!0}function z9t(r){for(var e=[],t=0;t=r+e)return 0;if(t<=Math.abs(r-e))return Math.PI*Math.min(r,e)*Math.min(r,e);var n=r-(t*t-e*e+r*r)/(2*t),i=e-(t*t-r*r+e*e)/(2*t);return qj(r,n)+qj(e,i)}function Zj(r,e){var t=wu(r,e),n=r.radius,i=e.radius;if(t>=n+i||t<=Math.abs(n-i))return[];var a=(n*n-i*i+t*t)/(2*t),o=Math.sqrt(n*n-a*a),s=r.x+a*(e.x-r.x)/t,l=r.y+a*(e.y-r.y)/t,u=-(e.y-r.y)*(o/t),f=-(e.x-r.x)*(o/t);return[{x:s+u,y:l-f},{x:s-u,y:l+f}]}function $j(r){for(var e={x:0,y:0},t=0;tu?1:-1}),n=0;n=Math.min(e[o].size,e[s].size)?c=1:a.size<=1e-10&&(c=-1),i[o][s]=i[s][o]=c}),{distances:n,constraints:i}}function W9t(r,e,t,n){var i=0,a;for(a=0;a0&&p<=c||h<0&&p>=c||(i+=2*v*v,e[2*a]+=4*v*(o-u),e[2*a+1]+=4*v*(s-f),e[2*l]+=4*v*(u-o),e[2*l+1]+=4*v*(f-s))}return i}function V9t(r,e){var t=Y9t(r,e),n=e.lossFunction||Jj;if(r.length>=8){var i=H9t(r,e),a=n(i,r),o=n(t,r);a+1e-8=Math.min(n[f].size,n[c].size)&&(u=0),i[f].push({set:c,size:l.size,weight:u}),i[c].push({set:f,size:l.size,weight:u})}var h=[];for(a in i)if(i.hasOwnProperty(a)){for(var d=0,o=0;o=o&&(a=t[n],o=s)}var l=(0,Vlt.nelderMead)(function(h){return-1*tW({x:h[0],y:h[1]},r,e)},[a.x,a.y],{maxIterations:500,minErrorDelta:1e-10}).x,u={x:l[0],y:l[1]},f=!0;for(n=0;nr[n].radius){f=!1;break}for(n=0;n0&&console.log("WARNING: area "+a+" not represented on screen")}return t}function K9t(r,e,t){var n=[],i=r-t,a=e;return n.push("M",i,a),n.push("A",t,t,0,1,0,i+2*t,a),n.push("A",t,t,0,1,0,i,a),n.join(" ")}function Xlt(r){var e={};bA(r,e);var t=e.arcs;if(t.length===0)return"M 0 0";if(t.length==1){var n=t[0].circle;return K9t(n.x,n.y,n.radius)}else{for(var i=[` +M`,t[0].p2.x,t[0].p2.y],a=0;as;i.push(` +A`,s,s,0,l?1:0,1,o.p1.x,o.p1.y)}return i.join(" ")}}var mc="id",_A="path",qlt={appendPadding:[10,0,20,0],blendMode:"multiply",tooltip:{showTitle:!1,showMarkers:!1,fields:["id","size"],formatter:function(r){return{name:r.id,value:r.size}}},legend:{position:"top-left"},label:{style:{textAlign:"center",fill:"#fff"}},interactions:[{type:"legend-filter",enable:!1}],state:{active:{style:{stroke:"#000"}},selected:{style:{stroke:"#000",lineWidth:2}},inactive:{style:{fillOpacity:.3,strokeOpacity:.3}}},defaultInteractions:["tooltip","venn-legend-active"]};var Klt=(0,ZD.memoize)(function(r,e,t,n){var i=new Map,a=r.length;return e.forEach(function(o,s){if(o[n].length===1)i.set(o[mc],r[(s+a)%a]);else{var l=o[n].map(function(u){return i.get(u)});i.set(o[mc],l.slice(1).reduce(function(u,f){return Blt(u,f,t)},l[0]))}}),i},function(){for(var r=[],e=0;e0;)u-=Math.PI*2;u=u/Math.PI/2*t;var f=a-r+u-r*2;l.push(["M",f,e]);for(var c=0,h=0;h1?n+"_"+v:""+n},m[t]=t?c[t]:String(h),m[n]=p,m))}),s.push((d={tKey:""+a},d[t]=t?c[t]:String(h),d[a]=c[a],d)),l.push(c[i],c[n],c[a])});var u=Math.min.apply(Math,l.flat(1/0)),f=Math.max.apply(Math,l.flat(1/0));return u=u>0?0:u,o==="vertical"&&s.reverse(),{min:u,max:f,ds:s}}function X7t(r){var e=r.chart,t=r.options,n=t.bulletStyle,i=t.targetField,a=t.rangeField,o=t.measureField,s=t.xField,l=t.color,u=t.layout,f=t.size,c=t.label,h=lP(t),d=h.min,p=h.max,v=h.ds;e.data(v);var m=gt({},r,{options:{xField:s,yField:a,seriesField:"rKey",isStack:!0,label:(0,so.get)(c,"range"),interval:{color:(0,so.get)(l,"range"),style:(0,so.get)(n,"range"),size:(0,so.get)(f,"range")}}});gi(m),e.geometries[0].tooltip(!1);var g=gt({},r,{options:{xField:s,yField:o,seriesField:"mKey",isStack:!0,label:(0,so.get)(c,"measure"),interval:{color:(0,so.get)(l,"measure"),style:(0,so.get)(n,"measure"),size:(0,so.get)(f,"measure")}}});gi(g);var x=gt({},r,{options:{xField:s,yField:i,seriesField:"tKey",label:(0,so.get)(c,"target"),point:{color:(0,so.get)(l,"target"),style:(0,so.get)(n,"target"),size:(0,so.isFunction)((0,so.get)(f,"target"))?function(b){return(0,so.get)(f,"target")(b)/2}:(0,so.get)(f,"target")/2,shape:u==="horizontal"?"line":"hyphen"}}});return Gi(x),u==="horizontal"&&e.coordinate().transpose(),E(E({},r),{ext:{data:{min:d,max:p}}})}function oW(r){var e,t,n=r.options,i=r.ext,a=n.xAxis,o=n.yAxis,s=n.targetField,l=n.rangeField,u=n.measureField,f=n.xField,c=i.data;return Fe(un((e={},e[f]=a,e[u]=o,e),(t={},t[u]={min:c==null?void 0:c.min,max:c==null?void 0:c.max,sync:!0},t[s]={sync:""+u},t[l]={sync:""+u},t)))(r)}function q7t(r){var e=r.chart,t=r.options,n=t.xAxis,i=t.yAxis,a=t.xField,o=t.measureField,s=t.rangeField,l=t.targetField;return e.axis(""+s,!1),e.axis(""+l,!1),n===!1?e.axis(""+a,!1):e.axis(""+a,n),i===!1?e.axis(""+o,!1):e.axis(""+o,i),r}function K7t(r){var e=r.chart,t=r.options,n=t.legend;return e.removeInteraction("legend-filter"),e.legend(n),e.legend("rKey",!1),e.legend("mKey",!1),e.legend("tKey",!1),r}function Z7t(r){var e=r.chart,t=r.options,n=t.label,i=t.measureField,a=t.targetField,o=t.rangeField,s=e.geometries,l=s[0],u=s[1],f=s[2];return(0,so.get)(n,"range")?l.label(""+o,E({layout:[{type:"limit-in-plot"}]},Kn(n.range))):l.label(!1),(0,so.get)(n,"measure")?u.label(""+i,E({layout:[{type:"limit-in-plot"}]},Kn(n.measure))):u.label(!1),(0,so.get)(n,"target")?f.label(""+a,E({layout:[{type:"limit-in-plot"}]},Kn(n.target))):f.label(!1),r}function mut(r){Fe(X7t,oW,q7t,K7t,lr,Z7t,wn,Pr,Sr)(r)}var gut=gt({},De.getDefaultOptions(),{layout:"horizontal",size:{range:30,measure:20,target:20},xAxis:{tickLine:!1,line:null},bulletStyle:{range:{fillOpacity:.5}},label:{measure:{position:"right"}},tooltip:{showMarkers:!1}});var sW=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="bullet",t}return e.getDefaultOptions=function(){return gut},e.prototype.changeData=function(t){this.updateOption({data:t});var n=lP(this.options),i=n.min,a=n.max,o=n.ds;oW({options:this.options,ext:{data:{min:i,max:a}},chart:this.chart}),this.chart.changeData(o)},e.prototype.getSchemaAdaptor=function(){return mut},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e}(De);var $m=U(q()),lW="nodeIndex",uW="childNodeCount",wA="nodeAncestor",fW="Invalid field: it must be a string!";function J1(r,e){var t=r.field,n=r.fields;if((0,$m.isString)(t))return t;if((0,$m.isArray)(t))return console.warn(fW),t[0];if(console.warn(fW+" will try to get fields instead."),(0,$m.isString)(n))return n;if((0,$m.isArray)(n)&&n.length)return n[0];if(e)return e;throw new TypeError(fW)}function t_(r){var e=[];if(r&&r.each){var t,n;r.each(function(i){var a,o;i.parent!==t?(t=i.parent,n=0):n+=1;var s=(0,$m.filter)((((a=i.ancestors)===null||a===void 0?void 0:a.call(i))||[]).map(function(l){return e.find(function(u){return u.name===l.name})||l}),function(l){var u=l.depth;return u>0&&u1?(this.historyCache=t,this.drawBreadCrumb()):(this.historyCache=[],this.hideCrumbGroup())}},e.prototype.getButtonCfg=function(){var t=this.context.view,n=(0,sf.get)(t,["interactions","drill-down","cfg","drillDownConfig"]);return gt(this.breadCrumbCfg,n==null?void 0:n.breadCrumb,this.cfg)},e.prototype.drawBreadCrumb=function(){this.drawBreadCrumbGroup(),this.resetPosition(),this.breadCrumbGroup.show()},e.prototype.drawBreadCrumbGroup=function(){var t=this,n=this.getButtonCfg(),i=this.historyCache;this.breadCrumbGroup?this.breadCrumbGroup.clear():this.breadCrumbGroup=this.context.view.foregroundGroup.addGroup({name:Sut});var a=0;i.forEach(function(o,s){var l=t.breadCrumbGroup.addShape({type:"text",id:o.id,name:Sut+"_"+o.name+"_text",attrs:E(E({text:s===0&&!(0,sf.isNil)(n.rootText)?n.rootText:o.name},n.textStyle),{x:a,y:0})}),u=l.getBBox();if(a+=u.width+but,l.on("click",function(h){var d,p=h.target.get("id");if(p!==((d=(0,sf.last)(i))===null||d===void 0?void 0:d.id)){var v=i.slice(0,i.findIndex(function(m){return m.id===p})+1);t.backTo(v)}}),l.on("mouseenter",function(h){var d,p=h.target.get("id");p!==((d=(0,sf.last)(i))===null||d===void 0?void 0:d.id)?l.attr(n.activeTextStyle):l.attr({cursor:"default"})}),l.on("mouseleave",function(){l.attr(n.textStyle)}),swut,hierarchy:()=>Bh,pack:()=>hP,packEnclose:()=>uP,packSiblings:()=>Hut,partition:()=>pP,stratify:()=>Zut,tree:()=>$ut,treemap:()=>bW,treemapBinary:()=>Qut,treemapDice:()=>Gh,treemapResquarify:()=>tft,treemapSlice:()=>rg,treemapSliceDice:()=>Jut,treemapSquarify:()=>mP});function J7t(r,e){return r.parent===e.parent?1:2}function tqt(r){return r.reduce(eqt,0)/r.length}function eqt(r,e){return r+e.x}function rqt(r){return 1+r.reduce(nqt,0)}function nqt(r,e){return Math.max(r,e.y)}function iqt(r){for(var e;e=r.children;)r=e[0];return r}function aqt(r){for(var e;e=r.children;)r=e[e.length-1];return r}function wut(){var r=J7t,e=1,t=1,n=!1;function i(a){var o,s=0;a.eachAfter(function(h){var d=h.children;d?(h.x=tqt(d),h.y=rqt(d)):(h.x=o?s+=r(h,o):0,h.y=0,o=h)});var l=iqt(a),u=aqt(a),f=l.x-r(l,u)/2,c=u.x+r(u,l)/2;return a.eachAfter(n?function(h){h.x=(h.x-a.x)*e,h.y=(a.y-h.y)*t}:function(h){h.x=(h.x-f)/(c-f)*e,h.y=(1-(a.y?h.y/a.y:1))*t})}return i.separation=function(a){return arguments.length?(r=a,i):r},i.size=function(a){return arguments.length?(n=!1,e=+a[0],t=+a[1],i):n?null:[e,t]},i.nodeSize=function(a){return arguments.length?(n=!0,e=+a[0],t=+a[1],i):n?[e,t]:null},i}function oqt(r){var e=0,t=r.children,n=t&&t.length;if(!n)e=1;else for(;--n>=0;)e+=t[n].value;r.value=e}function Eut(){return this.eachAfter(oqt)}function Aut(r,e){let t=-1;for(let n of this)r.call(e,n,++t,this);return this}function Mut(r,e){for(var t=this,n=[t],i,a,o=-1;t=n.pop();)if(r.call(e,t,++o,this),i=t.children)for(a=i.length-1;a>=0;--a)n.push(i[a]);return this}function Tut(r,e){for(var t=this,n=[t],i=[],a,o,s,l=-1;t=n.pop();)if(i.push(t),a=t.children)for(o=0,s=a.length;o=0;)t+=n[i].value;e.value=t})}function Out(r){return this.eachBefore(function(e){e.children&&e.children.sort(r)})}function Dut(r){for(var e=this,t=sqt(e,r),n=[e];e!==t;)e=e.parent,n.push(e);for(var i=n.length;r!==t;)n.splice(i,0,r),r=r.parent;return n}function sqt(r,e){if(r===e)return r;var t=r.ancestors(),n=e.ancestors(),i=null;for(r=t.pop(),e=n.pop();r===e;)i=r,r=t.pop(),e=n.pop();return i}function Put(){for(var r=this,e=[r];r=r.parent;)e.push(r);return e}function kut(){return Array.from(this)}function Rut(){var r=[];return this.eachBefore(function(e){e.children||r.push(e)}),r}function Nut(){var r=this,e=[];return r.each(function(t){t!==r&&e.push({source:t.parent,target:t})}),e}function*Fut(){var r=this,e,t=[r],n,i,a;do for(e=t.reverse(),t=[];r=e.pop();)if(yield r,n=r.children)for(i=0,a=n.length;i=0;--s)i.push(a=o[s]=new tg(o[s])),a.parent=n,a.depth=n.depth+1;return t.eachBefore(hW)}function lqt(){return Bh(this).eachBefore(cqt)}function uqt(r){return r.children}function fqt(r){return Array.isArray(r)?r[1]:null}function cqt(r){r.data.value!==void 0&&(r.value=r.data.value),r.data=r.data.data}function hW(r){var e=0;do r.height=e;while((r=r.parent)&&r.height<++e)}function tg(r){this.data=r,this.depth=this.height=0,this.parent=null}tg.prototype=Bh.prototype={constructor:tg,count:Eut,each:Aut,eachAfter:Tut,eachBefore:Mut,find:Iut,sum:Lut,sort:Out,path:Dut,ancestors:Put,descendants:kut,leaves:Rut,links:Nut,copy:lqt,[Symbol.iterator]:Fut};function But(r){return typeof r=="object"&&"length"in r?r:Array.from(r)}function Gut(r){for(var e=r.length,t,n;e;)n=Math.random()*e--|0,t=r[e],r[e]=r[n],r[n]=t;return r}function uP(r){for(var e=0,t=(r=Gut(Array.from(r))).length,n=[],i,a;e0&&t*t>n*n+i*i}function dW(r,e){for(var t=0;tl?(i=(u+l-a)/(2*u),s=Math.sqrt(Math.max(0,l/u-i*i)),t.x=r.x-i*n-s*o,t.y=r.y-i*o+s*n):(i=(u+a-l)/(2*u),s=Math.sqrt(Math.max(0,a/u-i*i)),t.x=e.x+i*n-s*o,t.y=e.y+i*o+s*n)):(t.x=e.x+t.r,t.y=e.y)}function Wut(r,e){var t=r.r+e.r-1e-6,n=e.x-r.x,i=e.y-r.y;return t>0&&t*t>n*n+i*i}function Vut(r){var e=r._,t=r.next._,n=e.r+t.r,i=(e.x*t.r+t.x*e.r)/n,a=(e.y*t.r+t.y*e.r)/n;return i*i+a*a}function cP(r){this._=r,this.next=null,this.previous=null}function pW(r){if(!(i=(r=But(r)).length))return 0;var e,t,n,i,a,o,s,l,u,f,c;if(e=r[0],e.x=0,e.y=0,!(i>1))return e.r;if(t=r[1],e.x=-t.r,t.x=e.r,t.y=0,!(i>2))return e.r+t.r;jut(t,e,n=r[2]),e=new cP(e),t=new cP(t),n=new cP(n),e.next=n.previous=t,t.next=e.previous=n,n.next=t.previous=e;t:for(s=3;s0)throw new Error("cycle");return l}return t.id=function(n){return arguments.length?(r=r_(n),t):r},t.parentId=function(n){return arguments.length?(e=r_(n),t):e},t}function xqt(r,e){return r.parent===e.parent?1:2}function mW(r){var e=r.children;return e?e[0]:r.t}function gW(r){var e=r.children;return e?e[e.length-1]:r.t}function bqt(r,e,t){var n=t/(e.i-r.i);e.c-=n,e.s+=t,r.c+=n,e.z+=t,e.m+=t}function _qt(r){for(var e=0,t=0,n=r.children,i=n.length,a;--i>=0;)a=n[i],a.z+=e,a.m+=e,e+=a.s+(t+=a.c)}function Sqt(r,e,t){return r.a.parent===e.parent?r.a:t}function vP(r,e){this._=r,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}vP.prototype=Object.create(tg.prototype);function Cqt(r){for(var e=new vP(r,0),t,n=[e],i,a,o,s;t=n.pop();)if(a=t._.children)for(t.children=new Array(s=a.length),o=s-1;o>=0;--o)n.push(i=t.children[o]=new vP(a[o],o)),i.parent=t;return(e.parent=new vP(null,0)).children=[e],e}function $ut(){var r=xqt,e=1,t=1,n=null;function i(u){var f=Cqt(u);if(f.eachAfter(a),f.parent.m=-f.z,f.eachBefore(o),n)u.eachBefore(l);else{var c=u,h=u,d=u;u.eachBefore(function(x){x.xh.x&&(h=x),x.depth>d.depth&&(d=x)});var p=c===h?1:r(c,h)/2,v=p-c.x,m=e/(h.x+p+v),g=t/(d.depth||1);u.eachBefore(function(x){x.x=(x.x+v)*m,x.y=x.depth*g})}return u}function a(u){var f=u.children,c=u.parent.children,h=u.i?c[u.i-1]:null;if(f){_qt(u);var d=(f[0].z+f[f.length-1].z)/2;h?(u.z=h.z+r(u._,h._),u.m=u.z-d):u.z=d}else h&&(u.z=h.z+r(u._,h._));u.parent.A=s(u,h,u.parent.A||c[0])}function o(u){u._.x=u.z+u.parent.m,u.m+=u.parent.m}function s(u,f,c){if(f){for(var h=u,d=u,p=f,v=h.parent.children[0],m=h.m,g=d.m,x=p.m,b=v.m,S;p=gW(p),h=mW(h),p&&h;)v=mW(v),d=gW(d),d.a=u,S=p.z+x-h.z-m+r(p._,h._),S>0&&(bqt(Sqt(p,u,c),u,S),m+=S,g+=S),x+=p.m,m+=h.m,b+=v.m,g+=d.m;p&&!gW(d)&&(d.t=p,d.m+=x-g),h&&!mW(v)&&(v.t=h,v.m+=m-b,c=u)}return c}function l(u){u.x*=e,u.y=u.depth*t}return i.separation=function(u){return arguments.length?(r=u,i):r},i.size=function(u){return arguments.length?(n=!1,e=+u[0],t=+u[1],i):n?null:[e,t]},i.nodeSize=function(u){return arguments.length?(n=!0,e=+u[0],t=+u[1],i):n?[e,t]:null},i}function rg(r,e,t,n,i){for(var a=r.children,o,s=-1,l=a.length,u=r.value&&(i-t)/r.value;++sx&&(x=u),w=m*m*C,b=Math.max(x/w,w/g),b>S){m-=u;break}S=b}o.push(l={value:m,dice:d1?n:1)},t}(yW);function bW(){var r=mP,e=!1,t=1,n=1,i=[0],a=kp,o=kp,s=kp,l=kp,u=kp;function f(h){return h.x0=h.y0=0,h.x1=t,h.y1=n,h.eachBefore(c),i=[0],e&&h.eachBefore(dP),h}function c(h){var d=i[h.depth],p=h.x0+d,v=h.y0+d,m=h.x1-d,g=h.y1-d;m=h-1){var x=a[c];x.x0=p,x.y0=v,x.x1=m,x.y1=g;return}for(var b=u[c],S=d/2+b,C=c+1,w=h-1;C>>1;u[A]g-v){var L=d?(p*P+m*I)/d:m;f(c,C,I,p,v,L,g),f(C,h,P,L,v,m,g)}else{var M=d?(v*P+g*I)/d:g;f(c,C,I,p,v,m,M),f(C,h,P,p,M,m,g)}}}function Jut(r,e,t,n,i){(r.depth&1?rg:Gh)(r,e,t,n,i)}var tft=function r(e){function t(n,i,a,o,s){if((l=n._squarify)&&l.ratio===e)for(var l,u,f,c,h=-1,d,p=l.length,v=n.value;++h1?n:1)},t}(yW);var ng=U(q());var wqt={field:"value",size:[1,1],round:!1,padding:0,sort:function(r,e){return e.value-r.value},as:["x","y"],ignoreParentValue:!0};function eft(r,e){e=(0,ng.assign)({},wqt,e);var t=e.as;if(!(0,ng.isArray)(t)||t.length!==2)throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ "x", "y" ])!');var n;try{n=J1(e)}catch(l){console.warn(l)}var i=function(l){return pP().size(e.size).round(e.round).padding(e.padding)(Bh(l).sum(function(u){return(0,ng.size)(u.children)?e.ignoreParentValue?0:u[n]-(0,ng.reduce)(u.children,function(f,c){return f+c[n]},0):u[n]}).sort(e.sort))},a=i(r),o=t[0],s=t[1];return a.each(function(l){var u,f;l[o]=[l.x0,l.x1,l.x1,l.x0],l[s]=[l.y1,l.y1,l.y0,l.y0],l.name=l.name||((u=l.data)===null||u===void 0?void 0:u.name)||((f=l.data)===null||f===void 0?void 0:f.label),l.data.name=l.name,["x0","x1","y0","y1"].forEach(function(c){t.indexOf(c)===-1&&delete l[c]})}),t_(a)}var yP=U(q());var Eqt={field:"value",tile:"treemapSquarify",size:[1,1],round:!1,ignoreParentValue:!0,padding:0,paddingInner:0,paddingOuter:0,paddingTop:0,paddingRight:0,paddingBottom:0,paddingLeft:0,as:["x","y"],sort:function(r,e){return e.value-r.value},ratio:.5*(1+Math.sqrt(5))};function Aqt(r,e){return r==="treemapSquarify"?gP[r].ratio(e):gP[r]}function xP(r,e){e=(0,yP.assign)({},Eqt,e);var t=e.as;if(!(0,yP.isArray)(t)||t.length!==2)throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ "x", "y" ])!');var n;try{n=J1(e)}catch(u){console.warn(u)}var i=Aqt(e.tile,e.ratio),a=function(u){return bW().tile(i).size(e.size).round(e.round).padding(e.padding).paddingInner(e.paddingInner).paddingOuter(e.paddingOuter).paddingTop(e.paddingTop).paddingRight(e.paddingRight).paddingBottom(e.paddingBottom).paddingLeft(e.paddingLeft)(Bh(u).sum(function(f){return e.ignoreParentValue&&f.children?0:f[n]}).sort(e.sort))},o=a(r),s=t[0],l=t[1];return o.each(function(u){u[s]=[u.x0,u.x1,u.x1,u.x0],u[l]=[u.y1,u.y1,u.y0,u.y0],["x0","x1","y0","y1"].forEach(function(f){t.indexOf(f)===-1&&delete u[f]})}),t_(o)}function _W(r){var e=r.data,t=r.colorField,n=r.rawFields,i=r.hierarchyConfig,a=i===void 0?{}:i,o=a.activeDepth,s={partition:eft,treemap:xP},l=r.seriesField,u=r.type||"partition",f=s[u](e,E(E({field:l||"value"},(0,rft.omit)(a,["activeDepth"])),{type:"hierarchy."+u,as:["x","y"]})),c=[];return f.forEach(function(h){var d,p,v,m,g,x;if(h.depth===0||o>0&&h.depth>o)return null;for(var b=h.data.name,S=E({},h);S.depth>1;)b=((p=S.parent.data)===null||p===void 0?void 0:p.name)+" / "+b,S=S.parent;var C=E(E(E({},Hr(h.data,dn(n||[],[a.field]))),(d={},d[Qm]=b,d[e_]=S.data.name,d)),h);l&&(C[l]=h.data[l]||((m=(v=h.parent)===null||v===void 0?void 0:v.data)===null||m===void 0?void 0:m[l])),t&&(C[t]=h.data[t]||((x=(g=h.parent)===null||g===void 0?void 0:g.data)===null||x===void 0?void 0:x[t])),C.ext=a,C[Jm]={hierarchyConfig:a,colorField:t,rawFields:n},c.push(C)}),c}function Mqt(r){var e=r.chart,t=r.options,n=t.color,i=t.colorField,a=i===void 0?e_:i,o=t.sunburstStyle,s=t.rawFields,l=s===void 0?[]:s,u=_W(t);e.data(u);var f;return o&&(f=function(c){return gt({},{fillOpacity:Math.pow(.85,c.depth)},(0,lf.isFunction)(o)?o(c):o)}),Ph(gt({},r,{options:{xField:"x",yField:"y",seriesField:a,rawFields:(0,lf.uniq)(dn(yut,l)),polygon:{color:n,style:f}}})),r}function Tqt(r){var e=r.chart;return e.axis(!1),r}function Iqt(r){var e=r.chart,t=r.options,n=t.label,i=mi(e,"polygon");if(!n)i.label(!1);else{var a=n.fields,o=a===void 0?["name"]:a,s=n.callback,l=rr(n,["fields","callback"]);i.label({fields:o,callback:s,cfg:Kn(l)})}return r}function Lqt(r){var e=r.chart,t=r.options,n=t.innerRadius,i=t.radius,a=t.reflect,o=e.coordinate({type:"polar",cfg:{innerRadius:n,radius:i}});return a&&o.reflect(a),r}function Oqt(r){var e,t=r.options,n=t.hierarchyConfig,i=t.meta;return Fe(un({},(e={},e[cW]=(0,lf.get)(i,(0,lf.get)(n,["field"],"value")),e)))(r)}function Dqt(r){var e=r.chart,t=r.options,n=t.tooltip;if(n===!1)e.tooltip(!1);else{var i=n;(0,lf.get)(n,"fields")||(i=gt({},{customItems:function(a){return a.map(function(o){var s=(0,lf.get)(e.getOptions(),"scales"),l=(0,lf.get)(s,[Qm,"formatter"],function(f){return f}),u=(0,lf.get)(s,[cW,"formatter"],function(f){return f});return E(E({},o),{name:l(o.data[Qm]),value:u(o.data.value)})})}},i)),e.tooltip(i)}return r}function Pqt(r){var e=r.drilldown,t=r.interactions,n=t===void 0?[]:t;return(e==null?void 0:e.enabled)?gt({},r,{interactions:dn(n,[{type:"drill-down",cfg:{drillDownConfig:e,transformData:_W}}])}):r}function kqt(r){var e=r.chart,t=r.options,n=t.drilldown;return Pr({chart:e,options:Pqt(t)}),(n==null?void 0:n.enabled)&&(e.appendPadding=Rm(e.appendPadding,(0,lf.get)(n,["breadCrumb","position"]))),r}function nft(r){return Fe(lr,Xi("sunburstStyle"),Mqt,Tqt,Oqt,zl,Lqt,Dqt,Iqt,kqt,Sr,nn())(r)}var bP=U(q());function ift(r){var e=(0,bP.get)(r,["event","data","data"],{});return(0,bP.isArray)(e.children)&&e.children.length>0}function aft(r){var e=r.view.getCoordinate(),t=e.innerRadius;if(t){var n=r.event,i=n.x,a=n.y,o=e.center,s=o.x,l=o.y,u=e.getRadius()*t,f=Math.sqrt(Math.pow(s-i,2)+Math.pow(l-a,2));return f0&&s<1){var h=f-u;c=h/a/(s/(1-s)+1-1/a)}for(var d=c/(1-s)*s,p=e.addGroup(),v=this.coordinate.getCenter(),m=this.coordinate.getRadius(),g=ea.getAngle(r,this.coordinate),x=g.startAngle,b=g.endAngle,S=x;S0?f:c},p=gt({},r,{options:{xField:i,yField:Yl,seriesField:i,rawFields:[a,i_,TA,Yl],widthRatio:l,interval:{style:u,shape:"waterfall",color:d}}}),v=gi(p).ext,m=v.geometry;return m.customInfo({leaderLine:s}),r}function Vqt(r){var e,t,n=r.options,i=n.xAxis,a=n.yAxis,o=n.xField,s=n.yField,l=n.meta,u=gt({},{alias:s},(0,E0.get)(l,s));return Fe(un((e={},e[o]=i,e[s]=a,e[Yl]=a,e),gt({},l,(t={},t[Yl]=u,t[i_]=u,t[MA]=u,t))))(r)}function Hqt(r){var e=r.chart,t=r.options,n=t.xAxis,i=t.yAxis,a=t.xField,o=t.yField;return n===!1?e.axis(a,!1):e.axis(a,n),i===!1?(e.axis(o,!1),e.axis(Yl,!1)):(e.axis(o,i),e.axis(Yl,i)),r}function Yqt(r){var e=r.chart,t=r.options,n=t.legend,i=t.total,a=t.risingFill,o=t.fallingFill,s=t.locale,l=d0(s);if(n===!1)e.legend(!1);else{var u=[{name:l.get(["general","increase"]),value:"increase",marker:{symbol:"square",style:{r:5,fill:a}}},{name:l.get(["general","decrease"]),value:"decrease",marker:{symbol:"square",style:{r:5,fill:o}}}];i&&u.push({name:i.label||"",value:"total",marker:{symbol:"square",style:gt({},{r:5},(0,E0.get)(i,"style"))}}),e.legend(gt({},{custom:!0,position:"top",items:u},n)),e.removeInteraction("legend-filter")}return r}function Xqt(r){var e=r.chart,t=r.options,n=t.label,i=t.labelMode,a=t.xField,o=mi(e,"interval");if(!n)o.label(!1);else{var s=n.callback,l=rr(n,["callback"]);o.label({fields:i==="absolute"?[MA,a]:[i_,a],callback:s,cfg:Kn(l)})}return r}function qqt(r){var e=r.chart,t=r.options,n=t.tooltip,i=t.xField,a=t.yField;if(n!==!1){e.tooltip(E({showCrosshairs:!1,showMarkers:!1,shared:!0,fields:[a]},n));var o=e.geometries[0];(n==null?void 0:n.formatter)?o.tooltip(i+"*"+a,n.formatter):o.tooltip(a)}else e.tooltip(!1);return r}function hft(r){return Fe(jqt,lr,Wqt,Vqt,Hqt,Yqt,qqt,Xqt,Ms,Pr,Sr,nn())(r)}var wW=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="waterfall",t}return e.getDefaultOptions=function(){return fft},e.prototype.changeData=function(t){var n=this.options,i=n.xField,a=n.yField,o=n.total;this.updateOption({data:t}),this.chart.changeData(TP(t,i,a,o))},e.prototype.getSchemaAdaptor=function(){return hft},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e}(De);function dft(r,e,t){var n=t.map(function(o){return o[e]}).filter(function(o){return o!==void 0}),i=n.length>0?Math.max.apply(Math,n):0,a=Math.abs(r)%360;return a?i*360/a:i}function pft(r,e,t){var n=[];return r.forEach(function(i){var a=n.find(function(o){return o[e]===i[e]});a?a[t]+=i[t]||null:n.push(E({},i))}),n}function Kqt(r){var e=r.chart,t=r.options,n=t.barStyle,i=t.color,a=t.tooltip,o=t.colorField,s=t.type,l=t.xField,u=t.yField,f=t.data,c=Lh(f,u);e.data(c);var h=gt({},r,{options:{tooltip:a,seriesField:o,interval:{style:n,color:i,shape:s==="line"?"line":"intervel"},minColumnWidth:t.minBarWidth,maxColumnWidth:t.maxBarWidth,columnBackground:t.barBackground}});return gi(h),s==="line"&&Gi({chart:e,options:{xField:l,yField:u,seriesField:o,point:{shape:"circle",color:i}}}),r}function EW(r){var e,t=r.options,n=t.yField,i=t.xField,a=t.data,o=t.isStack,s=t.isGroup,l=t.colorField,u=t.maxAngle,f=o&&!s&&l?pft(a,i,n):a,c=Lh(f,n);return Fe(un((e={},e[n]={min:0,max:dft(u,n,c)},e)))(r)}function Zqt(r){var e=r.chart,t=r.options,n=t.radius,i=t.innerRadius,a=t.startAngle,o=t.endAngle;return e.coordinate({type:"polar",cfg:{radius:n,innerRadius:i,startAngle:a,endAngle:o}}).transpose(),r}function $qt(r){var e=r.chart,t=r.options,n=t.xField,i=t.xAxis;return e.axis(n,i),r}function Qqt(r){var e=r.chart,t=r.options,n=t.label,i=t.yField,a=mi(e,"interval");if(!n)a.label(!1);else{var o=n.callback,s=rr(n,["callback"]);a.label({fields:[i],callback:o,cfg:E(E({},Kn(s)),{type:"polar"})})}return r}function vft(r){return Fe(Xi("barStyle"),Kqt,EW,$qt,Zqt,Pr,Sr,lr,wn,zl,nn(),Qqt)(r)}var mft=gt({},De.getDefaultOptions(),{interactions:[{type:"element-active"}],legend:!1,tooltip:{showMarkers:!1},xAxis:{grid:null,tickLine:null,line:null},maxAngle:240});var AW=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="radial-bar",t}return e.getDefaultOptions=function(){return mft},e.prototype.changeData=function(t){this.updateOption({data:t}),EW({chart:this.chart,options:this.options}),this.chart.changeData(t)},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return vft},e}(De);var IA=U(q());var uf="first-axes-view",ff="second-axes-view",Rp="series-field-key";var gft=U(q());function IP(r,e,t,n,i){var a=[];e.forEach(function(c){n.forEach(function(h){var d,p=(d={},d[r]=h[r],d[t]=c,d[c]=h[c],d);a.push(p)})});var o=Object.values((0,gft.groupBy)(a,t)),s=o[0],l=s===void 0?[]:s,u=o[1],f=u===void 0?[]:u;return i?[l.reverse(),f.reverse()]:[l,f]}function yc(r){return r!=="vertical"}function yft(r,e,t){var n=e[0],i=e[1],a=n.autoPadding,o=i.autoPadding,s=r.__axisPosition,l=s.layout,u=s.position;if(yc(l)&&u==="top"&&(n.autoPadding=t.instance(a.top,0,a.bottom,a.left),i.autoPadding=t.instance(o.top,a.left,o.bottom,0)),yc(l)&&u==="bottom"&&(n.autoPadding=t.instance(a.top,a.right/2+5,a.bottom,a.left),i.autoPadding=t.instance(o.top,o.right,o.bottom,a.right/2+5)),!yc(l)&&u==="bottom"){var f=a.left>=o.left?a.left:o.left;n.autoPadding=t.instance(a.top,a.right,a.bottom/2+5,f),i.autoPadding=t.instance(a.bottom/2+5,o.right,o.bottom,f)}if(!yc(l)&&u==="top"){var f=a.left>=o.left?a.left:o.left;n.autoPadding=t.instance(a.top,a.right,0,f),i.autoPadding=t.instance(0,o.right,a.top,f)}}function Jqt(r){var e=r.chart,t=r.options,n=t.data,i=t.xField,a=t.yField,o=t.color,s=t.barStyle,l=t.widthRatio,u=t.legend,f=t.layout,c=IP(i,a,Rp,n,yc(f));u?e.legend(Rp,u):u===!1&&e.legend(!1);var h,d,p=c[0],v=c[1];yc(f)?(h=e.createView({region:{start:{x:0,y:0},end:{x:.5,y:1}},id:uf}),h.coordinate().transpose().reflect("x"),d=e.createView({region:{start:{x:.5,y:0},end:{x:1,y:1}},id:ff}),d.coordinate().transpose(),h.data(p),d.data(v)):(h=e.createView({region:{start:{x:0,y:0},end:{x:1,y:.5}},id:uf}),d=e.createView({region:{start:{x:0,y:.5},end:{x:1,y:1}},id:ff}),d.coordinate().reflect("y"),h.data(p),d.data(v));var m=gt({},r,{chart:h,options:{widthRatio:l,xField:i,yField:a[0],seriesField:Rp,interval:{color:o,style:s}}});gi(m);var g=gt({},r,{chart:d,options:{xField:i,yField:a[1],seriesField:Rp,widthRatio:l,interval:{color:o,style:s}}});return gi(g),r}function tKt(r){var e,t,n,i=r.options,a=r.chart,o=i.xAxis,s=i.yAxis,l=i.xField,u=i.yField,f=qr(a,uf),c=qr(a,ff),h={};return(0,IA.keys)((i==null?void 0:i.meta)||{}).map(function(d){(0,IA.get)(i==null?void 0:i.meta,[d,"alias"])&&(h[d]=i.meta[d].alias)}),a.scale((e={},e[Rp]={sync:!0,formatter:function(d){return(0,IA.get)(h,d,d)}},e)),un((t={},t[l]=o,t[u[0]]=s[u[0]],t))(gt({},r,{chart:f})),un((n={},n[l]=o,n[u[1]]=s[u[1]],n))(gt({},r,{chart:c})),r}function eKt(r){var e=r.chart,t=r.options,n=t.xAxis,i=t.yAxis,a=t.xField,o=t.yField,s=t.layout,l=qr(e,uf),u=qr(e,ff);return(n==null?void 0:n.position)==="bottom"?u.axis(a,E(E({},n),{label:{formatter:function(){return""}}})):u.axis(a,!1),n===!1?l.axis(a,!1):l.axis(a,E({position:yc(s)?"top":"bottom"},n)),i===!1?(l.axis(o[0],!1),u.axis(o[1],!1)):(l.axis(o[0],i[o[0]]),u.axis(o[1],i[o[1]])),e.__axisPosition={position:l.getOptions().axes[a].position,layout:s},r}function rKt(r){var e=r.chart;return Pr(gt({},r,{chart:qr(e,uf)})),Pr(gt({},r,{chart:qr(e,ff)})),r}function nKt(r){var e=r.chart,t=r.options,n=t.yField,i=t.yAxis;return nf(gt({},r,{chart:qr(e,uf),options:{yAxis:i[n[0]]}})),nf(gt({},r,{chart:qr(e,ff),options:{yAxis:i[n[1]]}})),r}function iKt(r){var e=r.chart;return lr(gt({},r,{chart:qr(e,uf)})),lr(gt({},r,{chart:qr(e,ff)})),r}function aKt(r){var e=r.chart;return Sr(gt({},r,{chart:qr(e,uf)})),Sr(gt({},r,{chart:qr(e,ff)})),r}function oKt(r){var e=this,t,n,i=r.chart,a=r.options,o=a.label,s=a.yField,l=a.layout,u=qr(i,uf),f=qr(i,ff),c=mi(u,"interval"),h=mi(f,"interval");if(!o)c.label(!1),h.label(!1);else{var d=o.callback,p=rr(o,["callback"]);p.position||(p.position="middle"),p.offset===void 0&&(p.offset=2);var v=E({},p);if(yc(l)){var m=((t=v.style)===null||t===void 0?void 0:t.textAlign)||(p.position==="middle"?"center":"left");p.style=gt({},p.style,{textAlign:m});var g={left:"right",right:"left",center:"center"};v.style=gt({},v.style,{textAlign:g[m]})}else{var x={top:"bottom",bottom:"top",middle:"middle"};typeof p.position=="string"?p.position=x[p.position]:typeof p.position=="function"&&(p.position=function(){for(var C=[],w=0;wz)throw new Error("circular link");j=W,W=new Set}if(u)for(var et=Math.max(DP(N,function(st){return st.depth})+1,0),lt=void 0,$=0;$z)throw new Error("circular link");j=W,W=new Set}}function S(D){for(var N=D.nodes,z=Math.max(DP(N,function(vt){return vt.depth})+1,0),j=(t-r-i)/(z-1),W=new Array(z).fill(0).map(function(){return[]}),J=0,et=N;J0){var it=(st/_t-$.y0)*N;$.y0+=it,$.y1+=it,O($)}}f===void 0&&J.sort(PP),J.length&&P(J,z)}}function I(D,N,z){for(var j=D.length,W=j-2;W>=0;--W){for(var J=D[W],et=0,lt=J;et0){var it=(st/_t-$.y0)*N;$.y0+=it,$.y1+=it,O($)}}f===void 0&&J.sort(PP),J.length&&P(J,z)}}function P(D,N){var z=D.length>>1,j=D[z];M(D,j.y0-o,z-1,N),L(D,j.y1+o,z+1,N),M(D,n,D.length-1,N),L(D,e,0,N)}function L(D,N,z,j){for(;z1e-6&&(W.y0+=J,W.y1+=J),N=W.y1+o}}function M(D,N,z,j){for(;z>=0;--z){var W=D[z],J=(W.y1-N)*j;J>1e-6&&(W.y0-=J,W.y1-=J),N=W.y0-o}}function O(D){var N=D.sourceLinks,z=D.targetLinks;if(c===void 0){for(var j=0,W=z;j "+i,value:a}}},nodeWidthRatio:.008,nodePaddingRatio:.01,animation:{appear:{animation:"wave-in"},enter:{animation:"wave-in"}}}},e.prototype.changeData=function(t){this.updateOption({data:t});var n=kP(this.options,this.chart.width,this.chart.height),i=n.nodes,a=n.edges,o=qr(this.chart,s_),s=qr(this.chart,l_);o.changeData(i),s.changeData(a)},e.prototype.getSchemaAdaptor=function(){return Pft},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e}(De);var Gft=U(q());var A0=U(q()),IKt={y:0,nodeWidthRatio:.05,weight:!1,nodePaddingRatio:.1,id:function(r){return r.id},source:function(r){return r.source},target:function(r){return r.target},sourceWeight:function(r){return r.value||1},targetWeight:function(r){return r.value||1},sortBy:null};function LKt(r,e,t){(0,A0.forIn)(r,function(n,i){n.inEdges=e.filter(function(a){return""+t.target(a)==""+i}),n.outEdges=e.filter(function(a){return""+t.source(a)==""+i}),n.edges=n.outEdges.concat(n.inEdges),n.frequency=n.edges.length,n.value=0,n.inEdges.forEach(function(a){n.value+=t.targetWeight(a)}),n.outEdges.forEach(function(a){n.value+=t.sourceWeight(a)})})}function OKt(r,e){var t={weight:function(i,a){return a.value-i.value},frequency:function(i,a){return a.frequency-i.frequency},id:function(i,a){return(""+e.id(i)).localeCompare(""+e.id(a))}},n=t[e.sortBy];!n&&(0,A0.isFunction)(e.sortBy)&&(n=e.sortBy),n&&r.sort(n)}function DKt(r,e){var t=r.length;if(!t)throw new TypeError("Invalid nodes: it's empty!");if(e.weight){var n=e.nodePaddingRatio;if(n<0||n>=1)throw new TypeError("Invalid nodePaddingRatio: it must be in range [0, 1)!");var i=n/(2*t),a=e.nodeWidthRatio;if(a<=0||a>=1)throw new TypeError("Invalid nodeWidthRatio: it must be in range (0, 1)!");var o=0;r.forEach(function(l){o+=l.value}),r.forEach(function(l){l.weight=l.value/o,l.width=l.weight*(1-n),l.height=a}),r.forEach(function(l,u){for(var f=0,c=u-1;c>=0;c--)f+=r[c].width+2*i;var h=l.minX=i+f,d=l.maxX=l.minX+l.width,p=l.minY=e.y-a/2,v=l.maxY=p+a;l.x=[h,d,d,h],l.y=[p,p,v,v]})}else{var s=1/t;r.forEach(function(l,u){l.x=(u+.5)*s,l.y=e.y})}return r}function PKt(r,e,t){if(t.weight){var n={};(0,A0.forIn)(r,function(i,a){n[a]=i.value}),e.forEach(function(i){var a=t.source(i),o=t.target(i),s=r[a],l=r[o];if(s&&l){var u=n[a],f=t.sourceWeight(i),c=s.minX+(s.value-u)/s.value*s.width,h=c+f/s.value*s.width;n[a]-=f;var d=n[o],p=t.targetWeight(i),v=l.minX+(l.value-d)/l.value*l.width,m=v+p/l.value*l.width;n[o]-=p;var g=t.y;i.x=[c,h,v,m],i.y=[g,g,g,g],i.source=s,i.target=l}})}else e.forEach(function(i){var a=r[t.source(i)],o=r[t.target(i)];a&&o&&(i.x=[a.x,o.x],i.y=[a.y,o.y],i.source=a,i.target=o)});return e}function kKt(r){return(0,A0.assign)({},IKt,r)}function Nft(r,e){var t=kKt(r),n={},i=e.nodes,a=e.links;i.forEach(function(l){var u=t.id(l);n[u]=l}),LKt(n,a,t),OKt(i,t);var o=DKt(i,t),s=PKt(n,a,t);return{nodes:o,links:s}}var Fft=U(q()),UW="x",jW="y",WW="name",VW="source",Bft={nodeStyle:{opacity:1,fillOpacity:1,lineWidth:1},edgeStyle:{opacity:.5,lineWidth:2},label:{fields:["x","name"],callback:function(r,e){var t=(r[0]+r[1])/2,n=t>.5?-4:4;return{labelEmit:!0,style:{fill:"#8c8c8c"},offsetX:n,content:e}}},tooltip:{showTitle:!1,showMarkers:!1,fields:["source","target","value","isNode"],showContent:function(r){return!(0,Fft.get)(r,[0,"data","isNode"])},formatter:function(r){var e=r.source,t=r.target,n=r.value;return{name:e+" -> "+t,value:n}}},interactions:[{type:"element-active"}],weight:!0,nodePaddingRatio:.1,nodeWidthRatio:.05};function RKt(r){var e=r.options,t=e.data,n=e.sourceField,i=e.targetField,a=e.weightField,o=e.nodePaddingRatio,s=e.nodeWidthRatio,l=e.rawFields,u=l===void 0?[]:l,f=tD(t,n,i,a),c=Nft({weight:!0,nodePaddingRatio:o,nodeWidthRatio:s},f),h=c.nodes,d=c.links,p=h.map(function(m){return E(E({},Hr(m,dn(["id","x","y","name"],u))),{isNode:!0})}),v=d.map(function(m){return E(E({source:m.source.name,target:m.target.name,name:m.source.name||m.target.name},Hr(m,dn(["x","y","value"],u))),{isNode:!1})});return E(E({},r),{ext:E(E({},r.ext),{chordData:{nodesData:p,edgesData:v}})})}function NKt(r){var e,t=r.chart;return t.scale((e={x:{sync:!0,nice:!0},y:{sync:!0,nice:!0,max:1}},e[WW]={sync:"color"},e[VW]={sync:"color"},e)),r}function FKt(r){var e=r.chart;return e.axis(!1),r}function BKt(r){var e=r.chart;return e.legend(!1),r}function GKt(r){var e=r.chart,t=r.options,n=t.tooltip;return e.tooltip(n),r}function zKt(r){var e=r.chart;return e.coordinate("polar").reflect("y"),r}function UKt(r){var e=r.chart,t=r.options,n=r.ext.chordData.nodesData,i=t.nodeStyle,a=t.label,o=t.tooltip,s=e.createView();return s.data(n),Ph({chart:s,options:{xField:UW,yField:jW,seriesField:WW,polygon:{style:i},label:a,tooltip:o}}),r}function jKt(r){var e=r.chart,t=r.options,n=r.ext.chordData.edgesData,i=t.edgeStyle,a=t.tooltip,o=e.createView();o.data(n);var s={xField:UW,yField:jW,seriesField:VW,edge:{style:i,shape:"arc"},tooltip:a};return JE({chart:o,options:s}),r}function WKt(r){var e=r.chart,t=r.options,n=t.animation;return typeof n=="boolean"?e.animate(n):e.animate(!0),(0,Gft.each)(Uot(e),function(i){i.animate(n)}),r}function zft(r){return Fe(lr,RKt,zKt,NKt,FKt,BKt,GKt,jKt,UKt,Pr,Ms,WKt)(r)}var HW=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="chord",t}return e.getDefaultOptions=function(){return Bft},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return zft},e}(De);var f_=U(q());var RP=U(q());var VKt={field:"value",as:["x","y","r"],sort:function(r,e){return e.value-r.value}};function Uft(r,e){e=(0,RP.assign)({},VKt,e);var t=e.as;if(!(0,RP.isArray)(t)||t.length!==3)throw new TypeError('Invalid as: it must be an array with 3 strings (e.g. [ "x", "y", "r" ])!');var n;try{n=J1(e)}catch(u){console.warn(u)}var i=function(u){return hP().size(e.size).padding(e.padding)(Bh(u).sum(function(f){return f[n]}).sort(e.sort))},a=i(r),o=t[0],s=t[1],l=t[2];return a.each(function(u){u[o]=u.x,u[s]=u.y,u[l]=u.r}),t_(a)}function YW(r){var e=r.data,t=r.hierarchyConfig,n=r.rawFields,i=n===void 0?[]:n,a=r.enableDrillDown,o=Uft(e,E(E({},t),{field:"value",as:["x","y","r"]})),s=[];return o.forEach(function(l){for(var u,f=l.data.name,c=E({},l);c.depth>1;)f=((u=c.parent.data)===null||u===void 0?void 0:u.name)+" / "+f,c=c.parent;if(a&&l.depth>2)return null;var h=gt({},l.data,E(E(E({},Hr(l.data,i)),{path:f}),l));h.ext=t,h[Jm]={hierarchyConfig:t,rawFields:i,enableDrillDown:a},s.push(h)}),s}function XW(r,e,t){var n=k1([r,e]),i=n[0],a=n[1],o=n[2],s=n[3],l=t.width,u=t.height,f=l-(s+a),c=u-(i+o),h=Math.min(f,c),d=(f-h)/2,p=(c-h)/2,v=i+p,m=a+d,g=o+p,x=s+d,b=[v,m,g,x],S=h<0?0:h;return{finalPadding:b,finalSize:S}}var jft=["x","y","r","name","value","path","depth"],Wft={colorField:"name",autoFit:!0,pointStyle:{lineWidth:0,stroke:"#fff"},legend:!1,hierarchyConfig:{size:[1,1],padding:0},label:{fields:["name"],layout:{type:"limit-in-shape"}},tooltip:{showMarkers:!1,showTitle:!1},drilldown:{enabled:!1}};function HKt(r){var e=r.chart,t=Math.min(e.viewBBox.width,e.viewBBox.height);return gt({options:{size:function(n){var i=n.r;return i*t}}},r)}function YKt(r){var e=r.options,t=r.chart,n=t.viewBBox,i=e.padding,a=e.appendPadding,o=e.drilldown,s=a;if(o==null?void 0:o.enabled){var l=Rm(t.appendPadding,(0,f_.get)(o,["breadCrumb","position"]));s=k1([l,a])}var u=XW(i,s,n).finalPadding;return t.padding=u,t.appendPadding=0,r}function XKt(r){var e=r.chart,t=r.options,n=e.padding,i=e.appendPadding,a=t.color,o=t.colorField,s=t.pointStyle,l=t.hierarchyConfig,u=t.sizeField,f=t.rawFields,c=f===void 0?[]:f,h=t.drilldown,d=YW({data:t.data,hierarchyConfig:l,enableDrillDown:h==null?void 0:h.enabled,rawFields:c});e.data(d);var p=e.viewBBox,v=XW(n,i,p).finalSize,m=function(g){var x=g.r;return x*v};return u&&(m=function(g){return g[u]*v}),Gi(gt({},r,{options:{xField:"x",yField:"y",seriesField:o,sizeField:u,rawFields:dn(jft,c),point:{color:a,style:s,shape:"circle",size:m}}})),r}function qKt(r){return Fe(un({},{x:{min:0,max:1,minLimit:0,maxLimit:1,nice:!0},y:{min:0,max:1,minLimit:0,maxLimit:1,nice:!0}}))(r)}function KKt(r){var e=r.chart,t=r.options,n=t.tooltip;if(n===!1)e.tooltip(!1);else{var i=n;(0,f_.get)(n,"fields")||(i=gt({},{customItems:function(a){return a.map(function(o){var s=(0,f_.get)(e.getOptions(),"scales"),l=(0,f_.get)(s,["name","formatter"],function(f){return f}),u=(0,f_.get)(s,["value","formatter"],function(f){return f});return E(E({},o),{name:l(o.data.name),value:u(o.data.value)})})}},i)),e.tooltip(i)}return r}function ZKt(r){var e=r.chart;return e.axis(!1),r}function $Kt(r){var e=r.drilldown,t=r.interactions,n=t===void 0?[]:t;return(e==null?void 0:e.enabled)?gt({},r,{interactions:dn(n,[{type:"drill-down",cfg:{drillDownConfig:e,transformData:YW,enableDrillDown:!0}}])}):r}function QKt(r){var e=r.chart,t=r.options;return Pr({chart:e,options:$Kt(t)}),r}function Vft(r){return Fe(Xi("pointStyle"),HKt,YKt,lr,qKt,XKt,ZKt,zl,KKt,QKt,Sr,nn())(r)}var qW=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="circle-packing",t}return e.getDefaultOptions=function(){return Wft},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return Vft},e.prototype.triggerResize=function(){this.chart.destroyed||(this.chart.forceFit(),this.chart.clear(),this.execAdaptor(),this.chart.render(!0))},e}(De);var JKt=function(r){H(e,r);function e(t,n,i,a){var o=r.call(this,t,gt({},a,n))||this;return o.type="g2-plot",o.defaultOptions=a,o.adaptor=i,o}return e.prototype.getDefaultOptions=function(){return this.defaultOptions},e.prototype.getSchemaAdaptor=function(){return this.adaptor},e}(De);var jh=U(q());var Hft=U(q());var tZt={line:mD,pie:wD,column:jm,bar:SD,area:yD,gauge:MP,"tiny-line":DD,"tiny-column":PD,"tiny-area":OD,"ring-progress":BD,progress:ND,scatter:LD,histogram:RD,funnel:iP},eZt={line:tA,pie:aA,column:rA,bar:nA,area:eA,gauge:AA,"tiny-line":hA,"tiny-column":dA,"tiny-area":pA,"ring-progress":yA,progress:gA,scatter:lA,histogram:mA,funnel:CA},rZt={pie:{label:!1},column:{tooltip:{showMarkers:!1}},bar:{tooltip:{showMarkers:!1}}};function NP(r,e,t){var n=eZt[r];if(!n){console.error("could not find "+r+" plot");return}var i=tZt[r];i({chart:e,options:gt({},n.getDefaultOptions(),(0,Hft.get)(rZt,r,{}),t)})}function nZt(r){var e=r.chart,t=r.options,n=t.views,i=t.legend;return(0,jh.each)(n,function(a){var o=a.region,s=a.data,l=a.meta,u=a.axes,f=a.coordinate,c=a.interactions,h=a.annotations,d=a.tooltip,p=a.geometries,v=e.createView({region:o});v.data(s);var m={};u&&(0,jh.each)(u,function(g,x){m[x]=Hr(g,za)}),m=gt({},l,m),v.scale(m),u?(0,jh.each)(u,function(g,x){v.axis(x,g)}):v.axis(!1),v.coordinate(f),(0,jh.each)(p,function(g){var x=Bi({chart:v,options:g}).ext,b=g.adjust;b&&x.geometry.adjust(b)}),(0,jh.each)(c,function(g){g.enable===!1?v.removeInteraction(g.type):v.interaction(g.type,g.cfg)}),(0,jh.each)(h,function(g){v.annotation()[g.type](E({},g))}),typeof a.animation=="boolean"?v.animate(!1):(v.animate(!0),(0,jh.each)(v.geometries,function(g){g.animate(a.animation)})),d&&(v.interaction("tooltip"),v.tooltip(d))}),i?(0,jh.each)(i,function(a,o){e.legend(o,a)}):e.legend(!1),e.tooltip(t.tooltip),r}function iZt(r){var e=r.chart,t=r.options,n=t.plots;return(0,jh.each)(n,function(i){var a=i.type,o=i.region,s=i.options,l=s===void 0?{}:s,u=l.tooltip,f=e.createView(E({region:o},Hr(l,pj)));u&&f.interaction("tooltip"),NP(a,f,l)}),r}function Yft(r){return Fe(Sr,nZt,iZt,Pr,Sr,lr,wn)(r)}var $s=U(q());var FP=U(q());function Xft(r,e){var t=r.getModel(),n=t.data,i;return(0,FP.isArray)(n)?i=n[0][e]:i=n[e],i}function qft(r){var e=O1(r);(0,FP.each)(e,function(t){t.hasState("active")&&t.setState("active",!1),t.hasState("selected")&&t.setState("selected",!1),t.hasState("inactive")&&t.setState("inactive",!1)})}var aZt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getAssociationItems=function(t,n){var i,a=this.context.event,o=n||{},s=o.linkField,l=o.dim,u=[];if((i=a.data)===null||i===void 0?void 0:i.data){var f=a.data.data;(0,$s.each)(t,function(c){var h,d,p=s;if(l==="x"?p=c.getXScale().field:l==="y"?p=(h=c.getYScales().find(function(m){return m.field===p}))===null||h===void 0?void 0:h.field:p||(p=(d=c.getGroupScales()[0])===null||d===void 0?void 0:d.field),!!p){var v=(0,$s.map)(O1(c),function(m){var g=!1,x=!1,b=(0,$s.isArray)(f)?(0,$s.get)(f[0],p):(0,$s.get)(f,p);return Xft(m,p)===b?g=!0:x=!0,{element:m,view:c,active:g,inactive:x}});u.push.apply(u,v)}})}return u},e.prototype.showTooltip=function(t){var n=QO(this.context.view),i=this.getAssociationItems(n,t);(0,$s.each)(i,function(a){if(a.active){var o=a.element.shape.getCanvasBBox();a.view.showTooltip({x:o.minX+o.width/2,y:o.minY+o.height/2})}})},e.prototype.hideTooltip=function(){var t=QO(this.context.view);(0,$s.each)(t,function(n){n.hideTooltip()})},e.prototype.active=function(t){var n=h0(this.context.view),i=this.getAssociationItems(n,t);(0,$s.each)(i,function(a){var o=a.active,s=a.element;o&&s.setState("active",!0)})},e.prototype.selected=function(t){var n=h0(this.context.view),i=this.getAssociationItems(n,t);(0,$s.each)(i,function(a){var o=a.active,s=a.element;o&&s.setState("selected",!0)})},e.prototype.highlight=function(t){var n=h0(this.context.view),i=this.getAssociationItems(n,t);(0,$s.each)(i,function(a){var o=a.inactive,s=a.element;o&&s.setState("inactive",!0)})},e.prototype.reset=function(){var t=h0(this.context.view);(0,$s.each)(t,function(n){qft(n)})},e}(Tr);nr("association",aZt);xr("association-active",{start:[{trigger:"element:mouseenter",action:"association:active"}],end:[{trigger:"element:mouseleave",action:"association:reset"}]});xr("association-selected",{start:[{trigger:"element:mouseenter",action:"association:selected"}],end:[{trigger:"element:mouseleave",action:"association:reset"}]});xr("association-highlight",{start:[{trigger:"element:mouseenter",action:"association:highlight"}],end:[{trigger:"element:mouseleave",action:"association:reset"}]});xr("association-tooltip",{start:[{trigger:"element:mousemove",action:"association:showTooltip"}],end:[{trigger:"element:mouseleave",action:"association:hideTooltip"}]});var c_=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="mix",t}return e.prototype.getSchemaAdaptor=function(){return Yft},e}(De);var T0=U(q());var M0=U(q());function Kft(r,e){var t=e.data,n=e.coordinate,i=e.interactions,a=e.annotations,o=e.animation,s=e.tooltip,l=e.axes,u=e.meta,f=e.geometries;t&&r.data(t);var c={};l&&(0,M0.each)(l,function(h,d){c[d]=Hr(h,za)}),c=gt({},u,c),r.scale(c),n&&r.coordinate(n),l===!1?r.axis(!1):(0,M0.each)(l,function(h,d){r.axis(d,h)}),(0,M0.each)(f,function(h){var d=Bi({chart:r,options:h}).ext,p=h.adjust;p&&d.geometry.adjust(p)}),(0,M0.each)(i,function(h){h.enable===!1?r.removeInteraction(h.type):r.interaction(h.type,h.cfg)}),(0,M0.each)(a,function(h){r.annotation()[h.type](E({},h))}),typeof o=="boolean"?r.animate(!1):(r.animate(!0),(0,M0.each)(r.geometries,function(h){h.animate(o)})),s?(r.interaction("tooltip"),r.tooltip(s)):s===!1&&r.removeInteraction("tooltip")}function oZt(r){var e=r.chart,t=r.options,n=t.type,i=t.data,a=t.fields,o=t.eachView,s=(0,T0.omit)(t,["type","data","fields","eachView","axes","meta","tooltip","coordinate","theme","legend","interactions","annotations"]);return e.data(i),e.facet(n,E(E({},s),{fields:a,eachView:function(l,u){var f=o(l,u);if(f.geometries)Kft(l,f);else{var c=f,h=c.options;h.tooltip&&l.interaction("tooltip"),NP(c.type,l,h)}}})),r}function sZt(r){var e=r.chart,t=r.options,n=t.axes,i=t.meta,a=t.tooltip,o=t.coordinate,s=t.theme,l=t.legend,u=t.interactions,f=t.annotations,c={};return n&&(0,T0.each)(n,function(h,d){c[d]=Hr(h,za)}),c=gt({},i,c),e.scale(c),e.coordinate(o),n?(0,T0.each)(n,function(h,d){e.axis(d,h)}):e.axis(!1),a?(e.interaction("tooltip"),e.tooltip(a)):a===!1&&e.removeInteraction("tooltip"),e.legend(l),s&&e.theme(s),(0,T0.each)(u,function(h){h.enable===!1?e.removeInteraction(h.type):e.interaction(h.type,h.cfg)}),(0,T0.each)(f,function(h){e.annotation()[h.type](E({},h))}),r}function Zft(r){return Fe(lr,oZt,sZt)(r)}var $ft={title:{style:{fontSize:12,fill:"rgba(0,0,0,0.65)"}},rowTitle:{style:{fontSize:12,fill:"rgba(0,0,0,0.65)"}},columnTitle:{style:{fontSize:12,fill:"rgba(0,0,0,0.65)"}}};var KW=function(r){H(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.type="area",t}return e.getDefaultOptions=function(){return $ft},e.prototype.getDefaultOptions=function(){return e.getDefaultOptions()},e.prototype.getSchemaAdaptor=function(){return Zft},e}(De);var h_;(function(r){r.DEV="DEV",r.BETA="BETA",r.STABLE="STABLE"})(h_||(h_={}));function lZt(r,e){console.warn(r===h_.DEV?"Plot '"+e+"' is in DEV stage, just give us issues.":r===h_.BETA?"Plot '"+e+"' is in BETA stage, DO NOT use it in production env.":r===h_.STABLE?"Plot '"+e+`' is in STABLE stage, import it by "import { `+e+` } from '@antv/g2plot'".`:"invalid Stage type.")}var uZt=function(){function r(){}return Object.defineProperty(r,"MultiView",{get:function(){return lZt(h_.STABLE,"MultiView"),c_},enumerable:!1,configurable:!0}),r}();fj("en-US",Zot);fj("zh-CN",$ot);var ZW={scale:un,legend:zl,tooltip:wn,annotation:nn,interaction:Pr,theme:lr,animation:Sr};var PA=U(q());var fZt=function(r,e){var t=document.createElement("div");return e==="tooltip"&&(t.className="g2-tooltip"),ht.render(r,t),t},Qft=fZt;var d_=function(r,e){var t={}.toString;return t.call(r)==="[object ".concat(e,"]")},$W=function(r){if(!r)return r;var e={};for(var t in r)e[t]=r[t];return e};var p_=function(r){if(!r||typeof r!="object")return r;var e;return Array.isArray(r)?e=r.map(function(t){return p_(t)}):(e={},Object.keys(r).forEach(function(t){return e[t]=p_(r[t])})),e},I0=function(r,e){for(var t=r,n=0;nPX,DagreGraph:()=>DX,DecompositionTreeGraph:()=>aAt,Edge:()=>T_,FlowAnalysisGraph:()=>iAt,FundFlowGraph:()=>uAt,G6:()=>Ur,Graph:()=>ES,IndentedTree:()=>kX,IndentedTreeGraph:()=>RX,Node:()=>cg,OrganizationGraph:()=>rAt,OrganizationTreeGraph:()=>LX,OrganizationalGraph:()=>NX,RadialGraph:()=>FX,RadialTreeGraph:()=>nAt});var v_=U(q());var k6=U(q()),nct={getDefaultCfg:function(){return{}},getEvents:function(){return{}},updateCfg:function(e){return Object.assign(this,e),!0},shouldBegin:function(){return!0},shouldUpdate:function(){return!0},shouldEnd:function(){return!0},bind:function(e){var t=this,n=this.events;this.graph=e,(this.type==="drag-canvas"||this.type==="brush-select"||this.type==="lasso-select")&&e.get("canvas").set("draggable",!0),(0,k6.each)(n,function(i,a){e.on(a,i)}),document.addEventListener("visibilitychange",function(){t.keydown=!1})},unbind:function(e){var t=this.events,n=e.get("canvas").get("draggable");(this.type==="drag-canvas"||this.type==="brush-select"||this.type==="lasso-select")&&e.get("canvas").set("draggable",!1),(0,k6.each)(t,function(i,a){e.off(a,i)}),e.get("canvas").set("draggable",n)},get:function(e){return this[e]},set:function(e,t){return this[e]=t,this}};var k$t=function(){function r(){}return r.registerBehavior=function(e,t){if(!t)throw new Error("please specify handler for this behavior: ".concat(e));var n=(0,v_.clone)(nct);Object.assign(n,t);var i=function(o){var s=this;Object.assign(this,this.getDefaultCfg(),o);var l=this.getEvents();this.events=null;var u={};l&&((0,v_.each)(l,function(f,c){u[c]=(0,v_.wrapBehavior)(s,f)}),this.events=u)};i.prototype=n,r.types[e]=i},r.hasBehavior=function(e){return!!r.types[e]},r.getBehavior=function(e){return r.types[e]},r.types={},r}(),zP=k$t;var R6=zP;var Ir=U(q());var nV={};Dn(nV,{GADDI:()=>rV,Stack:()=>__,breadthFirstSearch:()=>N6,connectedComponent:()=>g_,cosineSimilarity:()=>BA,default:()=>xQt,depthFirstSearch:()=>y_,detectAllCycles:()=>z6,detectAllDirectedCycle:()=>VP,detectAllUndirectedCycle:()=>WP,detectCycle:()=>HP,detectDirectedCycle:()=>Ict,dijkstra:()=>ag,findAllPath:()=>j6,findShortestPath:()=>U6,floydWarshall:()=>og,getAdjMatrix:()=>cf,getDegree:()=>Np,getInDegree:()=>B6,getNeighbors:()=>lo,getOutDegree:()=>G6,iLouvain:()=>X6,kCore:()=>q6,kMeans:()=>K6,labelPropagation:()=>W6,louvain:()=>FA,minimumSpanningTree:()=>$6,nodesCosineSimilarity:()=>Z6,pageRank:()=>Q6});var R$t=function(e,t){var n=e.nodes,i=e.edges,a=[],o={};if(!n)throw new Error("invalid nodes data!");return n&&n.forEach(function(s,l){o[s.id]=l;var u=[];a.push(u)}),i&&i.forEach(function(s){var l=s.source,u=s.target,f=o[l],c=o[u];!f&&f!==0||!c&&c!==0||(a[f][c]=1,t||(a[c][f]=1))}),a},cf=R$t;var N$t=function(e,t){return e===t},ict=function(){function r(e,t){t===void 0&&(t=null),this.value=e,this.next=t}return r.prototype.toString=function(e){return e?e(this.value):"".concat(this.value)},r}();var F$t=function(){function r(e){e===void 0&&(e=N$t),this.head=null,this.tail=null,this.compare=e}return r.prototype.prepend=function(e){var t=new ict(e,this.head);return this.head=t,this.tail||(this.tail=t),this},r.prototype.append=function(e){var t=new ict(e);return this.head?(this.tail.next=t,this.tail=t,this):(this.head=t,this.tail=t,this)},r.prototype.delete=function(e){if(!this.head)return null;for(var t=null;this.head&&this.compare(this.head.value,e);)t=this.head,this.head=this.head.next;var n=this.head;if(n!==null)for(;n.next;)this.compare(n.next.value,e)?(t=n.next,n.next=n.next.next):n=n.next;return this.compare(this.tail.value,e)&&(this.tail=n),t},r.prototype.find=function(e){var t=e.value,n=t===void 0?void 0:t,i=e.callback,a=i===void 0?void 0:i;if(!this.head)return null;for(var o=this.head;o;){if(a&&a(o.value)||n!==void 0&&this.compare(o.value,n))return o;o=o.next}return null},r.prototype.deleteTail=function(){var e=this.tail;if(this.head===this.tail)return this.head=null,this.tail=null,e;for(var t=this.head;t.next;)t.next.next?t=t.next:t.next=null;return this.tail=t,e},r.prototype.deleteHead=function(){if(!this.head)return null;var e=this.head;return this.head.next?this.head=this.head.next:(this.head=null,this.tail=null),e},r.prototype.fromArray=function(e){var t=this;return e.forEach(function(n){return t.append(n)}),this},r.prototype.toArray=function(){for(var e=[],t=this.head;t;)e.push(t),t=t.next;return e},r.prototype.reverse=function(){for(var e=this.head,t=null,n=null;e;)n=e.next,e.next=t,t=e,e=n;this.tail=this.head,this.head=t},r.prototype.toString=function(e){return e===void 0&&(e=void 0),this.toArray().map(function(t){return t.toString(e)}).toString()},r}(),UP=F$t;var B$t=function(){function r(){this.linkedList=new UP}return r.prototype.isEmpty=function(){return!this.linkedList.head},r.prototype.peek=function(){return this.linkedList.head?this.linkedList.head.value:null},r.prototype.enqueue=function(e){this.linkedList.append(e)},r.prototype.dequeue=function(){var e=this.linkedList.deleteHead();return e?e.value:null},r.prototype.toString=function(e){return this.linkedList.toString(e)},r}(),act=B$t;var lo=function(e,t,n){t===void 0&&(t=[]);var i=t.filter(function(l){return l.source===e||l.target===e});if(n==="target"){var a=function(u){return u.source===e};return i.filter(a).map(function(l){return l.target})}if(n==="source"){var o=function(u){return u.target===e};return i.filter(o).map(function(l){return l.source})}var s=function(u){return u.source===e?u.target:u.source};return i.map(s)},oct=function(e,t){return t.filter(function(n){return n.source===e})},m_=function(e,t){return t.filter(function(n){return n.source===e||n.target===e})},jP=function(e){e===void 0&&(e=0);var t="".concat(Math.random()).split(".")[1].substr(0,5),n="".concat(Math.random()).split(".")[1].substr(0,5);return"".concat(e,"-").concat(t).concat(n)};function G$t(r){r===void 0&&(r={});var e=r,t=function(){},n=function(){var i={};return function(a){var o=a.next,s=o;return i[s]?!1:(i[s]=!0,!0)}}();return e.allowTraversal=r.allowTraversal||n,e.enter=r.enter||t,e.leave=r.leave||t,e}var z$t=function(e,t,n,i){i===void 0&&(i=!0);var a=G$t(n),o=new act,s=e.edges,l=s===void 0?[]:s;o.enqueue(t);for(var u="",f=function(){var h=o.dequeue();a.enter({current:h,previous:u}),lo(h,l,i?"target":void 0).forEach(function(d){a.allowTraversal({previous:u,current:h,next:d})&&o.enqueue(d)}),a.leave({current:h,previous:u}),u=h};!o.isEmpty();)f()},N6=z$t;var U$t=function(e){for(var t=e.nodes,n=t===void 0?[]:t,i=e.edges,a=i===void 0?[]:i,o=[],s={},l=[],u=function d(p){l.push(p),s[p.id]=!0;for(var v=lo(p.id,a),m=function(b){var S=v[b];if(!s[S]){var C=n.filter(function(w){return w.id===S});C.length>0&&d(C[0])}},g=0;g0;)h.push(l.pop());o.push(h)}}return o},F6=function(e){for(var t=e.nodes,n=t===void 0?[]:t,i=e.edges,a=i===void 0?[]:i,o=[],s={},l={},u={},f=[],c=0,h=function m(g){l[g.id]=c,u[g.id]=c,c+=1,o.push(g),s[g.id]=!0;for(var x=lo(g.id,a,"target").filter(function(A){return n.map(function(I){return I.id}).indexOf(A)>-1}),b=function(I){var P=x[I];if(!l[P]&&l[P]!==0){var L=n.filter(function(M){return M.id===P});L.length>0&&m(L[0]),u[g.id]=Math.min(u[g.id],u[P])}else s[P]&&(u[g.id]=Math.min(u[g.id],l[P]))},S=0;S0;){var w=o.pop();if(s[w.id]=!1,C.push(w),w===g)break}C.length>0&&f.push(C)}},d=0,p=n;d0;)for(var m=d.pop(),g=m.id,x=lo(g,e.edges),b=function(w){var A,I=x[w],P=e.nodes.find(function(G){return G.id===I});if(I===g)o.push((A={},A[I]=m,A));else if(!(I in v))p[I]=m,d.push(P),v[I]=new Set([m]);else if(!v[g].has(P)){for(var L=!0,M=[P,m],O=p[g];v[I].size&&!v[I].has(O)&&(M.push(O),O!==p[O.id]);)O=p[O.id];if(M.push(O),t&&n?(L=!1,M.findIndex(function(G){return t.indexOf(G.id)>-1})>-1&&(L=!0)):t&&!n&&M.findIndex(function(G){return t.indexOf(G.id)>-1})>-1&&(L=!1),L){for(var F={},k=1;k0;){var k=F.pop();a.has(k)&&(a.delete(k),o[k.id].forEach(function(G){F.push(G)}),o[k.id].clear())}},c=function M(O,F,k){var G=!1;if(t&&n===!1&&t.indexOf(O.id)>-1)return G;i.push(O),a.add(O);for(var D=k[O.id],N=0;N-1});lt<$.length;lt++){var st=$[lt];st===et.id&&!(n===!1&&t.indexOf(et.id)>-1)?s.push((F={},F[et.id]=et,F)):J[et.id].push(u[st])}}return{component:W,adjList:J,minIdx:G}},b=0;b=b}),C=F6({nodes:S,edges:e.edges}).filter(function(M){return M.length>1});if(C.length===0)break;var w=x(C),A=w.minIdx,I=w.adjList,P=w.component;if(P.length>1){P.forEach(function(M){o[M.id]=new Set});var L=l[A];if(t&&n&&t.indexOf(L.id)===-1)return s;c(L,L,I),b=A+1}else break}return s},z6=function(e,t,n,i){return i===void 0&&(i=!0),t?VP(e,n,i):WP(e,n,i)},HP=W$t;var lct=U(q());var V$t=function(e,t,n){for(var i=1/0,a,o=0;oc[C.id]+O?(c[M]=c[C.id]+O,h[M]=[C.id]):c[M]===c[C.id]+O&&h[M].push(C.id)})},v=0;v0&&f.length>0;){var d=f[f.length-1];if(d.length){var p=d.shift();p&&(l.push(p),u[p]=!0,h=i?lo(p,s,"target"):lo(p,s),f.push(h.filter(function(g){return!u[g]})))}else{var v=l.pop();u[v]=!1,f.pop();continue}if(l[l.length-1]===n){var m=l.map(function(x){return x});c.push(m);var v=l.pop();u[v]=!1,f.pop()}}return c};var Y$t=function(e,t){for(var n=cf(e,t),i=[],a=n.length,o=0;oi[o][l]+i[l][s]&&(i[o][s]=i[o][l]+i[l][s]);return i},og=Y$t;var X$t=function(e,t,n,i){t===void 0&&(t=!1),n===void 0&&(n="weight"),i===void 0&&(i=1e3);var a=e.nodes,o=a===void 0?[]:a,s=e.edges,l=s===void 0?[]:s,u={},f={};o.forEach(function(S,C){var w=jP();S.clusterId=w,u[w]={id:w,nodes:[S]},f[S.id]={node:S,idx:C}});var c=cf(e,t),h=[],d={};c.forEach(function(S,C){var w=0,A=o[C].id;d[A]={},S.forEach(function(I,P){if(!!I){w+=I;var L=o[P].id;d[A][L]=I}}),h.push(w)});for(var p=0,v=function(){var C=!1;if(o.forEach(function(w){var A={};Object.keys(d[w.id]).forEach(function(G){var D=d[w.id][G],N=f[G].node,z=N.clusterId;A[z]||(A[z]=0),A[z]+=D});var I=-1/0,P=[];if(Object.keys(A).forEach(function(G){I=0&&P.splice(L,1),P&&P.length){C=!0;var M=u[w.clusterId],O=M.nodes.indexOf(w);M.nodes.splice(O,1);var F=Math.floor(Math.random()*P.length),k=u[P[F]];k.nodes.push(w),w.clusterId=k.id}}}),!C)return"break";p++};p0&&C>w&&C-ww&&(I=l.map(function(D){return{node:D,clusterId:D.clusterId}}),P=(0,cct.clone)(v),w=C),L||A>100)break;A++,Object.keys(v).forEach(function(D){var N=0;f.forEach(function(z){var j=z.source,W=z.target,J=m[j].node.clusterId,et=m[W].node.clusterId;(J===D&&et!==D||et===D&&J!==D)&&(N=N+(z[n]||1))}),v[D].sumTot=N}),l.forEach(function(D,N){var z=v[D.clusterId],j=0,W,J=x[N]/(2*S),et=0,lt=z.nodes;lt.forEach(function(it){var K=m[it.id].idx;et+=g[N][K]||0});var $=et-z.sumTot*J,st=lt.filter(function(it){return it.id!==D.id}),_t=[];st.forEach(function(it,K){_t[K]=c[it.originIndex]});var dt=Y6(st,c)*o,vt=b[D.id];if(Object.keys(vt).forEach(function(it){var K=m[it].node,Rt=K.clusterId;if(Rt!==D.clusterId){var Xt=v[Rt],Zt=Xt.nodes;if(!(!Zt||!Zt.length)){var Ae=0;Zt.forEach(function(pt){var Et=m[pt.id].idx;Ae+=g[N][Et]||0});var We=Ae-Xt.sumTot*J,$e=Zt.concat([D]),V=[];$e.forEach(function(pt,Et){V[Et]=c[pt.originIndex]});var Te=Y6($e,c)*o,ne=We-$;a&&(ne=We+Te-($+dt)),ne>j&&(j=ne,W=Xt)}}}),j>0){W.nodes.push(D);var Tt=D.clusterId;D.clusterId=W.id;var Ut=z.nodes.indexOf(D);z.nodes.splice(Ut,1);var $t=0,Y=0;f.forEach(function(it){var K=it.source,Rt=it.target,Xt=m[K].node.clusterId,Zt=m[Rt].node.clusterId;(Xt===W.id&&Zt!==W.id||Zt===W.id&&Xt!==W.id)&&($t=$t+(it[n]||1)),(Xt===Tt&&Zt!==Tt||Zt===Tt&&Xt!==Tt)&&(Y=Y+(it[n]||1))}),W.sumTot=$t,z.sumTot=Y}})}var M={},O=0;Object.keys(P).forEach(function(D){var N=P[D];if(!N.nodes||!N.nodes.length){delete P[D];return}var z=String(O+1);z!==D&&(N.id=z,N.nodes=N.nodes.map(function(j){return{id:j.id,clusterId:z}}),P[z]=N,M[D]=z,delete P[D],O++)}),I.forEach(function(D){var N=D.node,z=D.clusterId;N.clusterId=z,N.clusterId&&M[N.clusterId]&&(N.clusterId=M[N.clusterId])});var F=[],k={};f.forEach(function(D){var N=D.source,z=D.target,j=D[n]||1,W=m[N].node.clusterId,J=m[z].node.clusterId,et="".concat(W,"---").concat(J);if(k[et])k[et].weight+=j,k[et].count++;else{var lt={source:W,target:J,weight:j,count:1};k[et]=lt,F.push(lt)}});var G=[];return Object.keys(P).forEach(function(D){G.push(P[D])}),{clusters:G,clusterEdges:F}},FA=Z$t;var $$t=function(e,t,n,i,a){return t===void 0&&(t=!1),n===void 0&&(n="weight"),i===void 0&&(i=1e-4),a===void 0&&(a=1),FA(e,t,n,i,!0,a)},X6=$$t;var dct=U(q());var Q$t=function(e,t){var n;t===void 0&&(t=1);for(var i=(0,dct.clone)(e),a=i.nodes,o=a===void 0?[]:a,s=i.edges,l=s===void 0?[]:s,u=function(){var h=Np({nodes:o,edges:l}),d=Object.keys(h);d.sort(function(m,g){var x,b;return((x=h[m])===null||x===void 0?void 0:x.degree)-((b=h[g])===null||b===void 0?void 0:b.degree)});var p=d[0];if(!o.length||((n=h[p])===null||n===void 0?void 0:n.degree)>=t)return"break";var v=o.findIndex(function(m){return m.id===p});o.splice(v,1),l=l.filter(function(m){return!(m.source===p||m.target===p)})};;){var f=u();if(f==="break")break}return{nodes:o,edges:l}},q6=Q$t;var J$t=function(e,t,n,i,a,o){t===void 0&&(t=3),n===void 0&&(n=[]),i===void 0&&(i=[]),a===void 0&&(a="properties"),o===void 0&&(o=L0.EuclideanDistance);for(var s=e.nodes,l=e.edges,u=x_(s,a),f=b_(u,n,i),c=0;cm&&(m=w,g=x)}h[c]=f[g],d.push(g),p[c]=[s[g]],s[g].clusterId=String(c)}for(var A=0;;){for(var c=0;c=1e3)break}var G=[],D={};return l.forEach(function(N){var z,j,W=N.source,J=N.target,et=(z=s.find(function(_t){return _t.id===W}))===null||z===void 0?void 0:z.clusterId,lt=(j=s.find(function(_t){return _t.id===J}))===null||j===void 0?void 0:j.clusterId,$="".concat(et,"---").concat(lt);if(D[$])D[$].count++;else{var st={source:et,target:lt,count:1};D[$]=st,G.push(st)}}),{clusters:p,clusterEdges:G}},K6=J$t;var tQt=function(e,t){var n=new Ls(t),i=n.norm2(),a=new Ls(e),o=a.norm2(),s=n.dot(a),l=i*o,u=l?s/l:0;return u},BA=tQt;var pct=U(q());var eQt=function(e,t,n,i,a){e===void 0&&(e=[]),n===void 0&&(n=[]),i===void 0&&(i=[]),a===void 0&&(a="properties");var o=(0,pct.clone)(e.filter(function(h){return h.id!==t.id})),s=e.findIndex(function(h){return h.id===t.id}),l=x_(e,a),u=b_(l,n,i),f=u[s],c=[];return o.forEach(function(h,d){if(h.id!==t.id){var p=u[d],v=BA(p,f);c.push(v),h.cosineSimilarity=v}}),o.sort(function(h,d){return d.cosineSimilarity-h.cosineSimilarity}),{allCosineSimilarity:c,similarNodes:o}},Z6=eQt;var rQt=function(){function r(e){this.count=e.length,this.parent={};for(var t=0,n=e;t0&&(this.list[0]=t,this.moveDown(0)),e},r.prototype.insert=function(e){if(e!==null){this.list.push(e);var t=this.list.length-1;return this.moveUp(t),!0}return!1},r.prototype.moveUp=function(e){for(var t=this.getParent(e);e&&e>0&&this.compareFn(this.list[t],this.list[e])>0;){var n=this.list[t];this.list[t]=this.list[e],this.list[e]=n,e=t,t=this.getParent(e)}},r.prototype.moveDown=function(e){var t,n=e,i=this.getLeft(e),a=this.getRight(e),o=this.list.length;i!==null&&i0?n=i:a!==null&&a0&&(n=a),e!==n&&(t=[this.list[n],this.list[e]],this.list[e]=t[0],this.list[n]=t[1],this.moveDown(n))},r}(),mct=iQt;var aQt=function(e,t){var n=[],i=e.nodes,a=i===void 0?[]:i,o=e.edges,s=o===void 0?[]:o;if(a.length===0)return n;var l=a[0],u=new Set;u.add(l);var f=function(m,g){return t?m.weight-g.weight:0},c=new mct(f);for(m_(l.id,s).forEach(function(v){c.insert(v)});!c.isEmpty();){var h=c.delMin(),d=h.source,p=h.target;u.has(d)&&u.has(p)||(n.push(h),u.has(d)||(u.add(d),m_(d,s).forEach(function(v){c.insert(v)})),u.has(p)||(u.add(p),m_(p,s).forEach(function(v){c.insert(v)})))}return n},gct=function(e,t){var n=[],i=e.nodes,a=i===void 0?[]:i,o=e.edges,s=o===void 0?[]:o;if(a.length===0)return n;var l=s.map(function(d){return d});t&&l.sort(function(d,p){return d.weight-p.weight});for(var u=new vct(a.map(function(d){return d.id}));l.length>0;){var f=l.shift(),c=f.source,h=f.target;u.connected(c,h)||(n.push(f),u.union(c,h))}return n},oQt=function(e,t,n){var i={prim:aQt,kruskal:gct};return n?i[n](e,t):gct(e,t)},$6=oQt;var sQt=function(e,t,n){typeof t!="number"&&(t=1e-6),typeof n!="number"&&(n=.85);for(var i=1,a=0,o=1e3,s=e.nodes,l=s===void 0?[]:s,u=e.edges,f=u===void 0?[]:u,c=l.length,h,d={},p={},v=0;v0&&i>t;){a=0;for(var v=0;v0&&(h+=p[C]/w)}d[g]=n*h,a+=d[g]}}a=(1-a)/c,i=0;for(var v=0;v=0;n--){var i=this.dfsEdgeList[n],a=i.fromNode,o=i.toNode;ad||i.hasNode(o[h.to])||(t.labelb;C--){var w=S(C);if(w==="break")break}if(g){var A=e.findMinLabel(m);o.dfsEdgeList.push(new O0(v,x,xc,A.edgeLabel,xc));var I=o.dfsEdgeList.length-1;return e.dfsCode.dfsEdgeList[I]!==o.dfsEdgeList[I]?!1:c(m[A.edgeLabel].projected)}var P={};g=!1;var L=0;h.forEach(function(D){var N=new XP(D),z=e.findForwardPureEdges(i,N.edges[d[0]],p,N);z.length>0&&(g=!0,L=v,z.forEach(function(j){var W="".concat(j.label,"-").concat(a[j.to].label);P[W]||(P[W]={projected:[],edgeLabel:j.label,nodeLabel2:a[j.to].label}),P[W].projected.push({graphId:i.id,edge:j,preNode:D})}))});for(var M=d.length,O=function(N){if(g)return"break";var z=d[N];h.forEach(function(j){var W=new XP(j),J=e.findForwardRmpathEdges(i,W.edges[z],p,W);J.length>0&&(g=!0,L=o.dfsEdgeList[z].fromNode,J.forEach(function(et){var lt="".concat(et.label,"-").concat(a[et.to].label);P[lt]||(P[lt]={projected:[],edgeLabel:et.label,nodeLabel2:a[et.to].label}),P[lt].projected.push({graphId:i.id,edge:et,preNode:j})}))})},C=0;C=0;p--){var v=t.findBackwardEdge(c,d.edges[a[p]],d.edges[a[0]],d);if(v){var m="".concat(t.dfsCode.dfsEdgeList[a[p]].fromNode,"-").concat(v.label);u[m]||(u[m]={projected:[],toNodeId:t.dfsCode.dfsEdgeList[a[p]].fromNode,edgeLabel:v.label}),u[m].projected.push({graphId:f.graphId,edge:v,preNode:f})}}if(!(i>=t.maxNodeNum)){var g=t.findForwardPureEdges(c,d.edges[a[0]],s,d);g.forEach(function(b){var S="".concat(o,"-").concat(b.label,"-").concat(h[b.to].label);l[S]||(l[S]={projected:[],fromNodeId:o,edgeLabel:b.label,nodeLabel2:h[b.to].label}),l[S].projected.push({graphId:f.graphId,edge:b,preNode:f})});for(var x=function(S){var C=t.findForwardRmpathEdges(c,d.edges[a[S]],s,d);C.forEach(function(w){var A="".concat(t.dfsCode.dfsEdgeList[a[S]].fromNode,"-").concat(w.label,"-").concat(h[w.to].label);l[A]||(l[A]={projected:[],fromNodeId:t.dfsCode.dfsEdgeList[a[S]].fromNode,edgeLabel:w.label,nodeLabel2:h[w.to].label}),l[A].projected.push({graphId:f.graphId,edge:w,preNode:f})})},p=0;pb){var S=b;b=x,x=S}var C=g.label,w="".concat(u,"-").concat(x,"-").concat(C,"-").concat(b),A="".concat(x,"-").concat(C,"-").concat(b);if(!o[A]){var I=o[A]||0;I++,o[A]=I}l[w]={graphId:u,nodeLabel1:x,edgeLabel:C,nodeLabel2:b}})})}),Object.keys(a).forEach(function(u){var f=a[u];if(!(f2*t)););if(m<2*t&&(s["".concat(f,"-").concat(v)]={start:f,end:v,distance:a[f][v]},c++,l++,l>=n))return s;if(h++,h>2*t)break}if(ch&&(l=h);var d=n[c.id].inDegree;u>d&&(u=d);var p=n[c.id].outDegree;f>p&&(f=p)}),e[t]={degree:l,inDegree:u,outDegree:f}),{minPatternNodeLabelDegree:l,minPatternNodeLabelInDegree:u,minPatternNodeLabelOutDegree:f}},gQt=function(e,t,n,i,a,o,s){var l;if(n===void 0&&(n=!1),o===void 0&&(o="cluster"),s===void 0&&(s="cluster"),!(!e||!e.nodes)){var u=e.nodes.length;if(!!u){var f=og(e,n),c=og(t,n),h=Mct(e.nodes,f,n),d=Mct(t.nodes,c,n),p=Ect(e.nodes,o),v=p.nodeMap,m=p.nodeLabelMap,g=Ect(t.nodes,o),x=g.nodeMap,b=g.nodeLabelMap;Act(e.edges,s,v);var S=Act(t.edges,s,x).edgeLabelMap,C=[];c==null||c.forEach(function(V){C=C.concat(V)}),a||(a=Math.max.apply(Math,mn(mn([],C,!1),[2],!1))),i||(i=a);var w=Cct(e,f,o,i),A=Cct(t,c,o,i),I=Math.min(100,u*(u-1)/2),P=pQt(i,u,I,w,f),L=qP(P,w,e),M=10,O=1,F=1,k=4,G={graphs:L,nodeLabelProp:o,edgeLabelProp:s,minSupport:O,minNodeNum:F,maxNodeNum:k,directed:n},D=Sct(G).slice(0,M),N=D.length,z=[];D.forEach(function(V,Te){z[Te]={},Object.keys(L).forEach(function(ne){var pt=L[ne],Et=KP(pt,V,o,s);z[Te][ne]=Et})});var j=vQt(z,N,D),W=j.structure,J=j.structureCountMap,et=t.nodes[0],lt=[],$=(l=t.nodes[0])===null||l===void 0?void 0:l[o],st=-1/0;t.nodes.forEach(function(V){var Te=V[o],ne=m[Te];(ne==null?void 0:ne.length)>st&&(st=ne.length,lt=ne,$=Te,et=V)});var _t={},dt={},vt={},Tt={},Ut={},$t={};Object.keys(b).forEach(function(V,Te){Ut[V]=[],n&&($t[V]=[]);var ne=-1/0,pt=b[V],Et={};pt.forEach(function(Ht){var ae=d["".concat(et.id,"-").concat(Ht.id)];if(ae&&Ut[V].push(ae),neUt[V][_n]){ma=!0;break}if(ma)return lt.splice(ae,1),"continue";var ii={};Ye.neighbors.forEach(function(En){var ci=h["".concat(ge.id,"-").concat(En.id)];ii["".concat(ge.id,"-").concat(En.id)]={start:v[ge.id].idx,end:v[En.id].idx,distance:ci}}),L=qP(ii,w,e,L);var xi=[];Object.keys(ii).forEach(function(En){if(J[En]){xi.push(J[En]);return}var ci=L[En];J[En]=KP(ci,W,o,s),xi.push(J[En])}),xi=xi.sort(function(En,ci){return ci-En});for(var Ki=!1,_n=0;_n<$n;_n++)if(xi[_n]=0;Ue--)ee(Ue)});var Y=[];lt==null||lt.forEach(function(V){for(var Te=v[V.id].idx,ne=wct(e.nodes,f[Te],Te,o,a),pt=ne.neighbors,Et=pt.length,St=!1,Wt=Et-1;Wt>=0;Wt--){if(pt.length+1Ye){pt.splice(Wt,1);continue}if(n){var Ve="".concat(ee.id,"-").concat(V.id),$n=h[Ve];ge=$t[Ue].length-1;var ma=$t[Ue][ge];if($n>ma){pt.splice(Wt,1);continue}}var _n=J[Ht]?J[Ht]:mQt(e,V,ee,v,ae,w,W,o,s,J,L),ii="".concat(et.id,"-").concat(Ue),xi=Tt[ii][Tt[ii].length-1];if(_n=0;ae--){var ma=$n(ae);if(ma==="break")break}if(Ve)return Y.splice(Te,1),"continue";ne.edges=Wt;var _n=ag(ne,ne.nodes[0].id,!1).length;if(Object.keys(_n).reverse().forEach(function(er){if(!(er===ne.nodes[0].id||Ve)){if(_n[er]===1/0){var ai=St[er].node[o];if(Et[ai]--,Et[ai]K[ji][K[ji].length-1]){var ai=St[er].node[o];if(Et[ai]--,Et[ai]=0;ci--){var Nn=ne.nodes[ci],Ma=St[Nn.id].degree,Li=St[Nn.id].inDegree,Do=St[Nn.id].outDegree,Pu=Nn[o],Po=Tct(_t,Pu,x,b),ms=Po.minPatternNodeLabelDegree,$o=Po.minPatternNodeLabelInDegree,vl=Po.minPatternNodeLabelOutDegree,Ns=n?Ma=0;mo--){var Oi=Wt[mo];if(!St[Oi.source]||!St[Oi.target]){Wt.splice(mo,1);var gs=Oi[s];if(ee[gs]--,St[Oi.source]&&(St[Oi.source].degree--,St[Oi.source].outDegree--),St[Oi.target]&&(St[Oi.target].degree--,St[Oi.target].inDegree--),S[gs]&&ee[gs]=0;Zt--){var Ae=Xt(Zt);if(Ae==="break")break}for(var We=Y.length,$e=function(Te){var ne=Y[Te],pt={};ne.edges.forEach(function(Wt){var ee="".concat(Wt.source,"-").concat(Wt.target,"-").concat(Wt.label);pt[ee]?pt[ee]++:pt[ee]=1});for(var Et=function(ee){var Ue=Y[ee],Ht={};Ue.edges.forEach(function(ge){var Ye="".concat(ge.source,"-").concat(ge.target,"-").concat(ge.label);Ht[Ye]?Ht[Ye]++:Ht[Ye]=1});var ae=!0;Object.keys(Ht).length!==Object.keys(pt).length?ae=!1:Object.keys(pt).forEach(function(ge){Ht[ge]!==pt[ge]&&(ae=!1)}),ae&&Y.splice(ee,1)},St=We-1;St>Te;St--)Et(St);We=Y.length},Zt=0;Zt<=We-1;Zt++)$e(Zt);return Y}}},rV=gQt;var yQt=function(){function r(e){e===void 0&&(e=10),this.linkedList=new UP,this.maxStep=e}return Object.defineProperty(r.prototype,"length",{get:function(){return this.linkedList.toArray().length},enumerable:!1,configurable:!0}),r.prototype.isEmpty=function(){return!this.linkedList.head},r.prototype.isMaxStack=function(){return this.toArray().length>=this.maxStep},r.prototype.peek=function(){return this.isEmpty()?null:this.linkedList.head.value},r.prototype.push=function(e){this.linkedList.prepend(e),this.length>this.maxStep&&this.linkedList.deleteTail()},r.prototype.pop=function(){var e=this.linkedList.deleteHead();return e?e.value:null},r.prototype.toArray=function(){return this.linkedList.toArray().map(function(e){return e.value})},r.prototype.clear=function(){for(;!this.isEmpty();)this.pop()},r}(),__=yQt;var Ict=HP;var xQt={getAdjMatrix:cf,breadthFirstSearch:N6,connectedComponent:g_,getDegree:Np,getInDegree:B6,getOutDegree:G6,detectCycle:HP,detectDirectedCycle:Ict,detectAllCycles:z6,detectAllDirectedCycle:VP,detectAllUndirectedCycle:WP,depthFirstSearch:y_,dijkstra:ag,findAllPath:j6,findShortestPath:U6,floydWarshall:og,labelPropagation:W6,louvain:FA,iLouvain:X6,kCore:q6,kMeans:K6,cosineSimilarity:BA,nodesCosineSimilarity:Z6,minimumSpanningTree:$6,pageRank:Q6,getNeighbors:lo,Stack:__,GADDI:rV};var mV={};Dn(mV,{Line:()=>lg,applyMatrix:()=>S_,compare:()=>bQt,distance:()=>C_,floydWarshall:()=>SQt,fractionToLine:()=>tk,getAdjMatrix:()=>CQt,getBBoxBoundLine:()=>fV,getCircleCenterByPoints:()=>QP,getCircleIntersectByPoint:()=>aV,getDegree:()=>AQt,getEllipseIntersectByPoint:()=>oV,getLineIntersect:()=>$P,getPointsCenter:()=>hV,getRectIntersectByPoint:()=>iV,intersectBBox:()=>Oct,invertMatrix:()=>sV,isPointInPolygon:()=>w_,isPointsOverlap:()=>ek,isPolygonsIntersect:()=>uV,itemIntersectByLine:()=>cV,lerp:()=>vV,move:()=>JP,pointLineDistance:()=>LQt,pointLineSquareDist:()=>dV,pointRectSquareDist:()=>pV,rotate:()=>EQt,scale:()=>wQt,scaleMatrix:()=>_Qt,squareDist:()=>GA,translate:()=>lV});var sg=U(q()),ZP=gr.transform,bQt=function(e){return function(t,n){return t[e]-n[e]}},Lct=function(e,t,n){return e>=t&&e<=n},$P=function(e,t,n,i){var a=1e-4,o={x:n.x-e.x,y:n.y-e.y},s={x:t.x-e.x,y:t.y-e.y},l={x:i.x-n.x,y:i.y-n.y},u=s.x*l.y-s.y*l.x,f=u*u,c=1/u,h=s.x*s.x+s.y*s.y,d=l.x*l.x+l.y*l.y;if(f>a*h*d){var p=(o.x*l.y-o.y*l.x)*c,v=(o.x*s.y-o.y*s.x)*c;return!Lct(p,0,1)||!Lct(v,0,1)?null:{x:e.x+p*s.x,y:e.y+p*s.y}}return null},iV=function(e,t){var n=e.x,i=e.y,a=e.width,o=e.height,s=n+a/2,l=i+o/2,u=[],f={x:s,y:l};u.push({x:n,y:i}),u.push({x:n+a,y:i}),u.push({x:n+a,y:i+o}),u.push({x:n,y:i+o}),u.push({x:n,y:i});for(var c=null,h=1;ht[i][o]+t[o][a]&&(t[i][a]=t[i][o]+t[o][a]);return t},CQt=function(e,t){var n=e.nodes,i=e.edges,a=[],o={};if(!n)throw new Error("invalid nodes data!");return n&&n.forEach(function(s,l){o[s.id]=l;var u=[];a.push(u)}),i&&i.forEach(function(s){var l=s.source,u=s.target,f=o[l],c=o[u];a[f][c]=1,t||(a[c][f]=1)}),a},lV=function(e,t){e.translate(t.x,t.y)},JP=function(e,t,n,i){i===void 0&&(i={duration:500});var a=e.getMatrix();a||(a=[1,0,0,0,1,0,0,0,1]);var o=e.getCanvasBBox(),s=t.x-o.minX,l=t.y-o.minY;if(n){var u=s*a[0],f=l*a[4],c=0,h=0,d=0,p=0;e.animate(function(m){return d=u*m,p=f*m,a=ZP(a,[["t",d-c,p-h]]),c=d,h=p,{matrix:a}},i)}else{var v=ZP(a,[["t",s,l]]);e.setMatrix(v)}},wQt=function(e,t){var n=e.getMatrix();n||(n=[1,0,0,0,1,0,0,0,1]);var i=t;(0,sg.isArray)(t)||(i=[t,t]),(0,sg.isArray)(t)&&t.length===1&&(i=[t[0],t[0]]),n=ZP(n,[["s",i[0],i[1]]]),e.setMatrix(n)},EQt=function(e,t){var n=e.getMatrix();n||(n=[1,0,0,0,1,0,0,0,1]),n=ZP(n,[["r",t]]),e.setMatrix(n)},AQt=function(e,t,n){for(var i=[],a=0;a0!=s(f[1]-n)>0&&s(t-(n-u[1])*(u[0]-f[0])/(u[1]-f[1])-u[0])<0&&(i=!i)}return i},Oct=function(e,t){return!(t.minX>e.maxX||t.maxXe.maxY||t.maxY1){var x=h[0],b=h[p-1];d.push({from:{x:b[0],y:b[1]},to:{x:x[0],y:x[1]}})}return d};if(e.length<2||t.length<2)return!1;var a=n(e),o=n(t);if(!Oct(a,o))return!1;var s=!1;if((0,sg.each)(t,function(c){if(w_(e,c[0],c[1]))return s=!0,!1}),s||((0,sg.each)(e,function(c){if(w_(t,c[0],c[1]))return s=!0,!1}),s))return!0;var l=i(e),u=i(t),f=!1;return(0,sg.each)(u,function(c){if(TQt(l,c))return f=!0,!1}),f},lg=function(){function r(e,t,n,i){this.x1=e,this.y1=t,this.x2=n,this.y2=i}return r.prototype.getBBox=function(){var e=Math.min(this.x1,this.x2),t=Math.min(this.y1,this.y2),n=Math.max(this.x1,this.x2),i=Math.max(this.y1,this.y2),a={x:e,y:t,minX:e,minY:t,maxX:n,maxY:i,width:n-e,height:i-t};return a},r}();var fV=function(e,t){var n={top:[e.minX,e.minY,e.maxX,e.minY],left:[e.minX,e.minY,e.minX,e.maxY],bottom:[e.minX,e.maxY,e.maxX,e.maxY],right:[e.maxX,e.minY,e.maxX,e.maxY]};return n[t]},IQt=function(e,t){var n=(t.x2-t.x1)*(e.y1-t.y1)-(t.y2-t.y1)*(e.x1-t.x1),i=(e.x2-e.x1)*(e.y1-t.y1)-(e.y2-e.y1)*(e.x1-t.x1),a=(t.y2-t.y1)*(e.x2-e.x1)-(t.x2-t.x1)*(e.y2-e.y1);if(a){var o=n/a,s=i/a;if(o>=0&&o<=1&&s>=0&&s<=1)return o}return Number.POSITIVE_INFINITY},cV=function(e,t){for(var n=["top","left","bottom","right"],i=e.getBBox(),a=0,o=[],s=0;s<4;s++){var l=fV(i,n[s]),u=l[0],f=l[1],c=l[2],h=l[3];o[s]=$P({x:t.x1,y:t.y1},{x:t.x2,y:t.y2},{x:u,y:f},{x:c,y:h}),o[s]&&(a+=1)}return[o,a]},tk=function(e,t){for(var n=["top","left","bottom","right"],i=e.getBBox(),a=Number.POSITIVE_INFINITY,o=0,s=0;s<4;s++){var l=fV(i,n[s]),u=l[0],f=l[1],c=l[2],h=l[3],d=IQt(t,new lg(u,f,c,h));d=Math.abs(d-.5),d>=0&&d<=1&&(o+=1,a=d0){for(var i=0,a=e;it.x+t.width,a=e.y>t.y+t.height,o=e.yUA,getBBox:()=>E_,getComboBBox:()=>zA,getLabelPosition:()=>_V,getLetterWidth:()=>Gct,getLoopCfgs:()=>bV,getTextSize:()=>SV,plainCombosToTrees:()=>ik,reconstructTree:()=>ak,shouldRefreshEdge:()=>NQt,traverseTree:()=>Os,traverseTreeUp:()=>Vh});var ug="rgb(95, 149, 255)",OQt="rgb(255, 255, 255)",Dct="rgb(0, 0, 0)",gV="rgb(247, 250, 255)",Pct="rgb(239, 244, 255)",rk="rgb(253, 253, 253)",kct="rgb(250, 250, 250)",nk="rgb(224, 224, 224)",Rct="rgb(234, 234, 234)",DQt="rgb(245, 245, 245)",PQt="rgb(191, 213, 255)",Nct="#4572d9",kQt="rgb(223, 234, 255)",Un={mainStroke:ug,mainFill:Pct,activeStroke:ug,activeFill:gV,inactiveStroke:PQt,inactiveFill:gV,selectedStroke:ug,selectedFill:OQt,highlightStroke:Nct,highlightFill:kQt,disableStroke:nk,disableFill:kct,edgeMainStroke:nk,edgeActiveStroke:ug,edgeInactiveStroke:Rct,edgeSelectedStroke:ug,edgeHighlightStroke:ug,edgeDisableStroke:DQt,comboMainStroke:nk,comboMainFill:rk,comboActiveStroke:ug,comboActiveFill:gV,comboInactiveStroke:nk,comboInactiveFill:rk,comboSelectedStroke:ug,comboSelectedFill:rk,comboHighlightStroke:Nct,comboHighlightFill:rk,comboDisableStroke:Rct,comboDisableFill:kct},qe={version:"0.5.3",rootContainerClassName:"root-container",nodeContainerClassName:"node-container",edgeContainerClassName:"edge-container",comboContainerClassName:"combo-container",delegateContainerClassName:"delegate-container",defaultLoopPosition:"top",nodeLabel:{style:{fill:"#000",fontSize:12,textAlign:"center",textBaseline:"middle"},offset:4},defaultNode:{type:"circle",style:{lineWidth:1,stroke:Un.mainStroke,fill:Pct},size:20,color:Un.mainStroke,linkPoints:{size:8,lineWidth:1,fill:Un.activeFill,stroke:Un.activeStroke}},nodeStateStyles:{active:{fill:Un.activeFill,stroke:Un.activeStroke,lineWidth:2,shadowColor:Un.mainStroke,shadowBlur:10},selected:{fill:Un.selectedFill,stroke:Un.selectedStroke,lineWidth:4,shadowColor:Un.selectedStroke,shadowBlur:10,"text-shape":{fontWeight:500}},highlight:{fill:Un.highlightFill,stroke:Un.highlightStroke,lineWidth:2,"text-shape":{fontWeight:500}},inactive:{fill:Un.inactiveFill,stroke:Un.inactiveStroke,lineWidth:1},disable:{fill:Un.disableFill,stroke:Un.disableStroke,lineWidth:1}},edgeLabel:{style:{fill:Dct,textAlign:"center",textBaseline:"middle",fontSize:12}},defaultEdge:{type:"line",size:1,style:{stroke:Un.edgeMainStroke,lineAppendWidth:2},color:Un.edgeMainStroke},edgeStateStyles:{active:{stroke:Un.edgeActiveStroke,lineWidth:1},selected:{stroke:Un.edgeSelectedStroke,lineWidth:2,shadowColor:Un.edgeSelectedStroke,shadowBlur:10,"text-shape":{fontWeight:500}},highlight:{stroke:Un.edgeHighlightStroke,lineWidth:2,"text-shape":{fontWeight:500}},inactive:{stroke:Un.edgeInactiveStroke,lineWidth:1},disable:{stroke:Un.edgeDisableStroke,lineWidth:1}},comboLabel:{style:{fill:Dct,textBaseline:"middle",fontSize:12},refY:10,refX:10},defaultCombo:{type:"circle",style:{fill:Un.comboMainFill,lineWidth:1,stroke:Un.comboMainStroke,r:5,width:20,height:10},size:[20,5],color:Un.comboMainStroke,padding:[25,20,15,20]},comboStateStyles:{active:{stroke:Un.comboActiveStroke,lineWidth:1,fill:Un.comboActiveFill},selected:{stroke:Un.comboSelectedStroke,lineWidth:2,fill:Un.comboSelectedFill,shadowColor:Un.comboSelectedStroke,shadowBlur:10,"text-shape":{fontWeight:500}},highlight:{stroke:Un.comboHighlightStroke,lineWidth:2,fill:Un.comboHighlightFill,"text-shape":{fontWeight:500}},inactive:{stroke:Un.comboInactiveStroke,fill:Un.comboInactiveFill,lineWidth:1},disable:{stroke:Un.comboDisableStroke,fill:Un.comboDisableFill,lineWidth:1}},delegateStyle:{fill:"#F3F9FF",fillOpacity:.5,stroke:"#1890FF",strokeOpacity:.9,lineDash:[5,5]},windowFontFamily:typeof window!="undefined"&&window.getComputedStyle&&document.body&&window.getComputedStyle(document.body,null).getPropertyValue("font-family")||"Arial, sans-serif"};var Fct={" ":.3329986572265625,a:.5589996337890625,A:.6569992065429687,b:.58599853515625,B:.6769989013671875,c:.5469985961914062,C:.7279998779296875,d:.58599853515625,D:.705999755859375,e:.554998779296875,E:.63699951171875,f:.37299957275390627,F:.5769989013671875,g:.5909988403320312,G:.7479995727539063,h:.555999755859375,H:.7199996948242188,i:.255999755859375,I:.23699951171875,j:.26699981689453123,J:.5169998168945312,k:.5289993286132812,K:.6899993896484375,l:.23499908447265624,L:.5879989624023437,m:.854998779296875,M:.8819992065429687,n:.5589996337890625,N:.7189987182617188,o:.58599853515625,O:.7669998168945312,p:.58599853515625,P:.6419998168945312,q:.58599853515625,Q:.7669998168945312,r:.3649993896484375,R:.6759994506835938,s:.504998779296875,S:.6319992065429687,t:.354998779296875,T:.6189987182617187,u:.5599990844726562,U:.7139999389648437,v:.48199920654296874,V:.6389999389648438,w:.754998779296875,W:.929998779296875,x:.5089996337890625,X:.63699951171875,y:.4959991455078125,Y:.66199951171875,z:.48699951171875,Z:.6239990234375,"0":.6,"1":.40099945068359377,"2":.6,"3":.6,"4":.6,"5":.6,"6":.6,"7":.5469985961914062,"8":.6,"9":.6,"[":.3329986572265625,"]":.3329986572265625,",":.26399993896484375,".":.26399993896484375,";":.26399993896484375,":":.26399993896484375,"{":.3329986572265625,"}":.3329986572265625,"\\":.5,"|":.19499969482421875,"=":.604998779296875,"+":.604998779296875,"-":.604998779296875,_:.5,"`":.3329986572265625," ~":.8329986572265625,"!":.3329986572265625,"@":.8579986572265625,"#":.6,$:.6,"%":.9699996948242188,"^":.517999267578125,"&":.7259994506835937,"*":.505999755859375,"(":.3329986572265625,")":.3329986572265625,"<":.604998779296875,">":.604998779296875,"/":.5,"?":.53699951171875};var Co=U(q()),Wh=Math.PI,yV=Math.sin,xV=Math.cos,Ho=yV(Wh/8),Yo=xV(Wh/8),E_=function(e,t){var n=e.getBBox(),i={x:n.minX,y:n.minY},a={x:n.maxX,y:n.maxY};if(t){var o=t.getMatrix();o||(o=[1,0,0,0,1,0,0,0,1]),i=S_(i,o),a=S_(a,o)}var s=i.x,l=i.y,u=a.x,f=a.y;return{x:s,y:l,minX:s,minY:l,maxX:u,maxY:f,width:u-s,height:f-l}},bV=function(e){var t=e.sourceNode||e.targetNode,n=t.get("group"),i=n.getMatrix();i||(i=[1,0,0,0,1,0,0,0,1]);var a=t.getKeyShape(),o=a.getBBox(),s=e.loopCfg||{},l=s.dist||Math.max(o.width,o.height)*2,u=s.position||qe.defaultLoopPosition,f=[i[6],i[7]],c=[e.startPoint.x,e.startPoint.y],h=[e.endPoint.x,e.endPoint.y],d=o.height/2,p=o.height/2,v=d*Ho,m=d*Yo,g=p*Ho,x=p*Yo;if(c[0]===h[0]&&c[1]===h[1]){switch(u){case"top":c=[f[0]-v,f[1]-m],h=[f[0]+g,f[1]-x];break;case"top-right":d=o.height/2,p=o.width/2,v=d*Ho,m=d*Yo,g=p*Ho,x=p*Yo,c=[f[0]+v,f[1]-m],h=[f[0]+x,f[1]-g];break;case"right":d=o.width/2,p=o.width/2,v=d*Ho,m=d*Yo,g=p*Ho,x=p*Yo,c=[f[0]+m,f[1]-v],h=[f[0]+x,f[1]+g];break;case"bottom-right":d=o.width/2,p=o.height/2,v=d*Ho,m=d*Yo,g=p*Ho,x=p*Yo,c=[f[0]+m,f[1]+v],h=[f[0]+g,f[1]+x];break;case"bottom":d=o.height/2,p=o.height/2,v=d*Ho,m=d*Yo,g=p*Ho,x=p*Yo,c=[f[0]+v,f[1]+m],h=[f[0]-g,f[1]+x];break;case"bottom-left":d=o.height/2,p=o.width/2,v=d*Ho,m=d*Yo,g=p*Ho,x=p*Yo,c=[f[0]-v,f[1]+m],h=[f[0]-x,f[1]+g];break;case"left":d=o.width/2,p=o.width/2,v=d*Ho,m=d*Yo,g=p*Ho,x=p*Yo,c=[f[0]-m,f[1]+v],h=[f[0]-x,f[1]-g];break;case"top-left":d=o.width/2,p=o.height/2,v=d*Ho,m=d*Yo,g=p*Ho,x=p*Yo,c=[f[0]-m,f[1]-v],h=[f[0]-g,f[1]-x];break;default:d=o.width/2,p=o.width/2,v=d*Ho,m=d*Yo,g=p*Ho,x=p*Yo,c=[f[0]-v,f[1]-m],h=[f[0]+g,f[1]-x]}if(s.clockwise===!1){var b=[c[0],c[1]];c=[h[0],h[1]],h=[b[0],b[1]]}}var S=[c[0]-f[0],c[1]-f[1]],C=(d+l)/d,w=(p+l)/p;s.clockwise===!1&&(C=(p+l)/p,w=(d+l)/d);var A=oe.scale([0,0],S,C),I=[f[0]+A[0],f[1]+A[1]],P=[h[0]-f[0],h[1]-f[1]],L=oe.scale([0,0],P,w),M=[f[0]+L[0],f[1]+L[1]];return e.startPoint={x:c[0],y:c[1]},e.endPoint={x:h[0],y:h[1]},e.controlPoints=[{x:I[0],y:I[1]},{x:M[0],y:M[1]}],e},_V=function(e,t,n,i,a){var o=1e-4,s=[],l=e==null?void 0:e.getPoint(t);if(!l)return{x:0,y:0,angle:0};if(t1-o)s=e.getEndTangent();else{var u=e==null?void 0:e.getPoint(t+o);s.push([l.x,l.y]),s.push([u.x,u.y])}var f=Math.atan2(s[1][1]-s[0][1],s[1][0]-s[0][0]);if(f<0&&(f+=Wh*2),n&&(l.x+=xV(f)*n,l.y+=yV(f)*n),i){var c=f-Wh/2;f>1/2*Wh&&f<3*1/2*Wh&&(c-=Wh),l.x+=xV(c)*i,l.y+=yV(c)*i}var h={x:l.x,y:l.y,angle:f};return a?(f>.5*Wh&&f<1.5*Wh&&(f-=Wh),E({rotate:f},h)):h},Bct=function r(e,t){if(t(e)===!1)return!1;if(e&&e.children){for(var n=e.children.length-1;n>=0;n--)if(!r(e.children[n],t))return!1}return!0},RQt=function r(e,t){if(e&&e.children){for(var n=e.children.length-1;n>=0;n--)if(!r(e.children[n],t))return}return t(e)!==!1},Os=function(e,t){typeof t=="function"&&Bct(e,t)},Vh=function(e,t){typeof t=="function"&&RQt(e,t)},Gct=function(e,t){return t*(Fct[e]||1)},SV=function(e,t){var n=0,i=new RegExp("[\u4E00-\u9FA5]+");return e.split("").forEach(function(a){i.test(a)?n+=t:n+=Gct(a,t)}),[n,t]},ik=function(e,t){var n=[],i={},a={};e.forEach(function(l){a[l.id]=l}),e.forEach(function(l,u){var f=(0,Co.clone)(l);f.itemType="combo",f.children=void 0,f.parentId===f.id?(console.warn("The parentId for combo ".concat(f.id," can not be the same as the combo's id")),delete f.parentId):f.parentId&&!a[f.parentId]&&(console.warn("The parent combo for combo ".concat(f.id," does not exist!")),delete f.parentId);var c=i[f.id];if(c){if(f.children=c.children,i[f.id]=f,c=f,!c.parentId){n.push(c);return}var h=i[c.parentId];if(h)h.children?h.children.push(f):h.children=[f];else{var d={id:c.parentId,children:[c]};i[c.parentId]=d,i[f.id]=f}return}if((0,Co.isString)(l.parentId)){var p=i[l.parentId];if(p)p.children?p.children.push(f):p.children=[f],i[f.id]=f;else{var v={id:l.parentId,children:[f]};i[v.id]=v,i[f.id]=f}}else n.push(f),i[f.id]=f});var o={};(t||[]).forEach(function(l){o[l.id]=l;var u=i[l.comboId];if(u){var f={id:l.id,comboId:l.comboId};u.children?u.children.push(f):u.children=[f],f.itemType="node",i[l.id]=f}});var s=0;return n.forEach(function(l){l.depth=s+10,Bct(l,function(u){var f,c=i[u.id].itemType;c==="node"?f=i[u.comboId]:f=i[u.parentId],f&&c==="node"?u.depth=s+1:u.depth=s+10,s-1&&i.splice(u,1),s||(a={id:t,itemType:"node",comboId:n},o[t]={children:void 0}),t){var f=!1;if(n){var c=0;(e||[]).forEach(function(d){f||Os(d,function(p){return n===p.id?(f=!0,p.children?p.children.push(a):p.children=[a],c=p.depth,a.itemType==="node"?a.depth=c+2:a.depth=c+1,!1):!0})})}else(!n||!f)&&a.itemType!=="node"&&e.push(a);var h=a.depth;Os(a,function(d){return d.itemType==="node"?h+=2:h+=1,d.depth=h,!0})}return e},zA=function(e,t,n){var i={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0,x:void 0,y:void 0,width:void 0,height:void 0,centerX:void 0,centerY:void 0};if(!e||e.length===0){var a=n==null?void 0:n.getModel(),o=a||{},s=o.x,l=o.y;return{minX:s,minY:l,maxX:s,maxY:l,x:s,y:l,width:void 0,height:void 0}}return e.forEach(function(u){var f=t.findById(u.id);if(!(!f||!f.isVisible())){f.set("bboxCanvasCache",void 0);var c=f.getCanvasBBox();c.x&&i.minX>c.minX&&(i.minX=c.minX),c.y&&i.minY>c.minY&&(i.minY=c.minY),c.x&&i.maxXAV,cloneEvent:()=>BQt,formatPadding:()=>jA,isNaN:()=>WA,isViewportChanged:()=>GQt,processParallelEdges:()=>zQt,uniqueId:()=>sk});var A_=U(q());var Uct=function(r){H(e,r);function e(t,n){var i=r.call(this,t,n)||this;return i.item=n.item,i.canvasX=n.canvasX,i.canvasY=n.canvasY,i.wheelDelta=n.wheelDelta,i.detail=n.detail,i}return e}(Hu);var sk=function(e){return"".concat(e,"-").concat(Math.random()).concat(Date.now())},jA=function(e){if((0,A_.isArray)(e))switch(e.length){case 4:return e;case 3:return e.push(e[1]),e;case 2:return e.concat(e);case 1:return[e[0],e[0],e[0],e[0]];default:return[0,0,0,0]}if((0,A_.isNumber)(e))return[e,e,e,e];if((0,A_.isString)(e)){var t=parseInt(e,10);return[t,t,t,t]}return[0,0,0,0]},BQt=function(e){var t=new Uct(e.type,e);return t.clientX=e.clientX,t.clientY=e.clientY,t.x=e.x,t.y=e.y,t.target=e.target,t.currentTarget=e.currentTarget,t.bubbles=!0,t.item=e.item,t},GQt=function(e){if(!e)return!1;for(var t=9,n=[1,0,0,0,1,0,0,0,1],i=0;in&&(n=c),h>a&&(a=h)}var d=Math.floor(t),p=Math.floor(i),v=Math.ceil(n)-Math.floor(t),m=Math.ceil(a)-Math.floor(i);return{x:d,y:p,width:v,height:m,minX:t,minY:i,maxX:n,maxY:a}},zQt=function(e,t,n,i,a){t===void 0&&(t=15),n===void 0&&(n="quadratic"),i===void 0&&(i=void 0),a===void 0&&(a=void 0);for(var o=e.length,s=t*2,l=["top","top-right","right","bottom-right","bottom","bottom-left","left","top-left"],u={},f=[],c={},h=0;hf&&(c=f),e.zoom(c,s)||console.warn("zoom failed, ratio out of range, ratio: %f",c)}},r.prototype.fitViewByRules=function(e){var t=e.onlyOutOfViewPort,n=t===void 0?!1:t,i=e.direction,a=i===void 0?"both":i,o=e.ratioRule,s=o===void 0?"min":o,l=this.graph,u=this.getFormatPadding(),f=l.get("width"),c=l.get("height"),h=l.get("group");h.resetMatrix();var d=h.getCanvasBBox();if(!(d.width===0||d.height===0)){var p=this.getViewCenter(),v={x:d.x+d.width/2,y:d.y+d.height/2};l.translate(p.x-v.x,p.y-v.y);var m=(f-u[1]-u[3])/d.width,g=(c-u[0]-u[2])/d.height,x;a==="x"?x=m:a==="y"?x=g:x=s==="max"?Math.max(m,g):Math.min(m,g),n&&(x=x<1?x:1);var b=l.getZoom(),S=b*x,C=l.get("minZoom");S=0&&(a.height=o),s>=0&&(a.width=s),i.marginTop&&(a.y+=i.marginTop),i.marginLeft&&(a.x+=i.marginLeft),a}function Hct(r,e){var t;e===void 0&&(e={x:0,y:0});var n=E({x:0,y:0,width:0,height:0},e);if((t=r.children)===null||t===void 0?void 0:t.length){var i=r.attrs,a=i===void 0?{}:i,o=a.marginTop,s=E({},e);o&&(s.y+=o);for(var l=0;ln.width&&(n.width=f.width+f.x),f.height+f.y>n.height&&(n.height=f.height+f.y)}}}return r.bbox=VQt(r,e,n),r.attrs=E(E({},r.attrs),r.bbox),r}function Yct(r,e){var t,n,i,a,o=(r||{}).type,s=((e==null?void 0:e.attrs)||{}).key;if(s&&r&&(r.attrs.key=s),!r&&e)return{action:"delete",val:e,type:o,key:s};if(r&&!e)return{action:"add",val:r,type:o};if(!r&&!e)return{action:"same",type:o};var l=[];if(((t=r.children)===null||t===void 0?void 0:t.length)>0||((n=e.children)===null||n===void 0?void 0:n.length)>0)for(var u=Math.max((i=r.children)===null||i===void 0?void 0:i.length,(a=e.children)===null||a===void 0?void 0:a.length),f=e.children||[],c=r.children||[],h=0;h-1)return;n.push(a)}else l>-1&&n.splice(l,1)}else if((0,Ua.isString)(t)){var u=n.filter(function(h){return h.includes(o)});u.length>0&&this.clearStates(u),s=s.filter(function(h){return!h.includes(o)}),s.push(a),this.set("states",s)}if(i){var f=this.get("model"),c=f.type;i.setState(c,e,t,this)}},r.prototype.clearStates=function(e){var t=this,n=t.getStates(),i=t.get("shapeFactory"),a=t.get("model"),o=a.type;e||(e=n),(0,Ua.isString)(e)&&(e=[e]);var s=n.filter(function(l){return e.indexOf(l)===-1});t.set("states",s),e.forEach(function(l){i.setState(o,l,!1,t)})},r.prototype.getContainer=function(){return this.get("group")},r.prototype.getKeyShape=function(){return this.get("keyShape")},r.prototype.getModel=function(){return this.get("model")},r.prototype.getType=function(){return this.get("type")},r.prototype.getID=function(){return this.get("id")},r.prototype.isItem=function(){return!0},r.prototype.getStates=function(){return this.get("states")},r.prototype.hasState=function(e){var t=this.getStates();return t.indexOf(e)>=0},r.prototype.refresh=function(e){var t=this.get("model");this.updatePosition(t),this.updateShape(e),this.afterUpdate(),this.clearCache()},r.prototype.getUpdateType=function(e){},r.prototype.update=function(e,t){t===void 0&&(t=void 0);var n=this.get("model");if(t==="move")this.updatePosition(e);else{var i=n.visible,a=e.visible;i!==a&&a!==void 0&&this.changeVisibility(a);var o={x:n.x,y:n.y};e.x=isNaN(+e.x)?n.x:+e.x,e.y=isNaN(+e.y)?n.y:+e.y;var s=this.get("styles");if(e.stateStyles){var l=e.stateStyles;(0,Ua.mix)(s,l),delete e.stateStyles}Object.assign(n,e),(o.x!==e.x||o.y!==e.y)&&this.updatePosition(e),this.updateShape(t)}this.afterUpdate(),this.clearCache()},r.prototype.updateShape=function(e){var t=this.get("shapeFactory"),n=this.get("model"),i=n.type;if(t.shouldUpdate(i)&&i===this.get("currentShape")){var a=this.getShapeCfg(n,e);t.baseUpdate(i,a,this,e),e!=="move"&&this.setOriginStyle()}else this.draw();this.restoreStates(t,i)},r.prototype.updatePosition=function(e){var t=this.get("model"),n=isNaN(+e.x)?+t.x:+e.x,i=isNaN(+e.y)?+t.y:+e.y,a=this.get("group");if(isNaN(n)||isNaN(i))return!1;t.x=n,t.y=i;var o=a.getMatrix();return o&&o[6]===n&&o[7]===i?!1:(a.resetMatrix(),lV(a,{x:n,y:i}),this.clearCache(),!0)},r.prototype.getBBox=function(){var e=this.get(PV);return e||(e=this.calculateBBox(),this.set(PV,e)),e},r.prototype.getCanvasBBox=function(){var e=this.get(kV);return e||(e=this.calculateCanvasBBox(),this.set(kV,e)),e},r.prototype.toFront=function(){var e=this.get("group");e.toFront()},r.prototype.toBack=function(){var e=this.get("group");e.toBack()},r.prototype.show=function(){this.changeVisibility(!0)},r.prototype.hide=function(){this.changeVisibility(!1)},r.prototype.changeVisibility=function(e){var t=this.get("group");e?t.show():t.hide(),this.set("visible",e)},r.prototype.isVisible=function(){return this.get("visible")},r.prototype.enableCapture=function(e){var t=this.get("group");t&&t.set("capture",e)},r.prototype.destroy=function(){if(!this.destroyed){var e=this.get("animate"),t=this.get("group");e&&t.stopAnimate(),t.shapeMap={},this.clearCache(),t.remove(),this._cfg=null,this.destroyed=!0}},r}(),uk=YQt;var fk={source:"start",target:"end"},Hh="Node",M_="Point",XQt="Anchor",qQt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){return{type:"edge",sourceNode:null,targetNode:null,startPoint:null,endPoint:null,linkCenter:!1}},e.prototype.setEnd=function(t,n){var i=fk[t]+M_,a=t+Hh,o=this.get(a);o&&!o.destroyed&&o.removeEdge(this),(0,hf.isPlainObject)(n)?(this.set(i,n),this.set(a,null)):n&&(n.addEdge(this),this.set(a,n),this.set(i,null))},e.prototype.getLinkPoint=function(t,n,i){var a=fk[t]+M_,o=t+Hh,s=this.get(a);if(!s){var l=this.get(o),u=t+XQt,f=this.getPrePoint(t,i),c=n[u];(0,hf.isNil)(c)||(s=l.getLinkPointByAnchor(c)),s=s||l.getLinkPoint(f),(0,hf.isNil)(s.index)||this.set("".concat(t,"AnchorIndex"),s.index)}return s},e.prototype.getPrePoint=function(t,n){if(n&&n.length){var i=t==="source"?0:n.length-1;return n[i]}var a=t==="source"?"target":"source";return this.getEndPoint(a)},e.prototype.getEndPoint=function(t){var n=t+Hh,i=fk[t]+M_,a=this.get(n);return a?a.get("model"):this.get(i)},e.prototype.getControlPointsByCenter=function(t){var n=this.getEndPoint("source"),i=this.getEndPoint("target"),a=this.get("shapeFactory"),o=t.type;return a.getControlPoints(o,{startPoint:n,endPoint:i})},e.prototype.getEndCenter=function(t){var n=t+Hh,i=fk[t]+M_,a=this.get(n);if(a){var o=a.getBBox();return{x:o.centerX,y:o.centerY}}return this.get(i)},e.prototype.init=function(){r.prototype.init.call(this),this.setSource(this.get("source")),this.setTarget(this.get("target"))},e.prototype.getShapeCfg=function(t,n){var i=this,a=i.get("linkCenter"),o=(n==null?void 0:n.includes("move"))?t:r.prototype.getShapeCfg.call(this,t);if(a)o.startPoint=i.getEndCenter("source"),o.endPoint=i.getEndCenter("target");else{var s=o.controlPoints||i.getControlPointsByCenter(o);o.startPoint=i.getLinkPoint("source",t,s),o.endPoint=i.getLinkPoint("target",t,s)}return o.sourceNode=i.get("sourceNode"),o.targetNode=i.get("targetNode"),o},e.prototype.getModel=function(){var t=this.get("model"),n=this.get("source".concat(Hh)),i=this.get("target".concat(Hh));return n?delete t["source".concat(Hh)]:t.source=this.get("start".concat(M_)),i?delete t["target".concat(Hh)]:t.target=this.get("end".concat(M_)),!(0,hf.isString)(t.source)&&!(0,hf.isPlainObject)(t.source)&&(t.source=t.source.getID()),!(0,hf.isString)(t.target)&&!(0,hf.isPlainObject)(t.target)&&(t.target=t.target.getID()),t},e.prototype.setSource=function(t){this.setEnd("source",t),this.set("source",t)},e.prototype.setTarget=function(t){this.setEnd("target",t),this.set("target",t)},e.prototype.getSource=function(){return this.get("source")},e.prototype.getTarget=function(){return this.get("target")},e.prototype.updatePosition=function(){return!1},e.prototype.update=function(t,n){n===void 0&&(n=void 0);var i=this.get("model"),a=i.visible,o=t.visible;a!==o&&o!==void 0&&this.changeVisibility(o);var s=this.get("styles");if(t.stateStyles){var l=t.stateStyles;(0,hf.mix)(s,l),delete t.stateStyles}Object.assign(i,t),this.updateShape(n),this.afterUpdate(),this.clearCache()},e.prototype.destroy=function(){var t=this.get("source".concat(Hh)),n=this.get("target".concat(Hh));t&&!t.destroyed&&t.removeEdge(this),n&&!n.destroyed&&n.removeEdge(this),r.prototype.destroy.call(this)},e}(uk),T_=qQt;var fg=U(q());var RV="anchorPointsCache",KQt="bboxCache",ZQt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getNearestPoint=function(t,n){for(var i=0,a=t[0],o=C_(t[0],n),s=0;s-1&&n.splice(i,1)},e.prototype.clearCache=function(){this.set(KQt,null),this.set(RV,null)},e.prototype.getUpdateType=function(t){var n,i,a,o,s;if(!!t){var l=!(0,fg.isNil)(t.x),u=!(0,fg.isNil)(t.y),f=Object.keys(t);if(f.length===1&&(l||u)||f.length===2&&l&&u)return"move";if((0,fg.isNumber)(t.x)||(0,fg.isNumber)(t.y)||t.type||t.anchorPoints||t.size||(t==null?void 0:t.style)&&(((n=t==null?void 0:t.style)===null||n===void 0?void 0:n.r)||((i=t==null?void 0:t.style)===null||i===void 0?void 0:i.width)||((a=t==null?void 0:t.style)===null||a===void 0?void 0:a.height)||((o=t==null?void 0:t.style)===null||o===void 0?void 0:o.rx)||((s=t==null?void 0:t.style)===null||s===void 0?void 0:s.ry)))return"bbox|label";var c=f.includes("label")||f.includes("labelCfg");return c?"style|label":"style"}},e}(uk),cg=ZQt;var Kct=U(q()),Zct="bboxCache",$ct="bboxCanvasCache",NV="sizeCache",Qct="anchorPointsCache",$Qt=function(r){H(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.getDefaultCfg=function(){return{type:"combo",nodes:[],edges:[],combos:[]}},e.prototype.getShapeCfg=function(t){var n=this.get("styles"),i=this.get("bbox");if(n&&i){var a=t,o={r:Math.hypot(i.height,i.width)/2||qe.defaultCombo.size[0]/2,width:i.width||qe.defaultCombo.size[0],height:i.height||qe.defaultCombo.size[1]};a.style=E(E(E({},n),t.style),o);var s=t.padding||qe.defaultCombo.padding;return(0,Kct.isNumber)(s)?(o.r+=s,o.width+=s*2,o.height+=s*2):(o.r+=s[0],o.width+=s[1]+s[3]||s[1]*2,o.height+=s[0]+s[2]||s[0]*2),this.set(NV,o),a}return t},e.prototype.calculateCanvasBBox=function(){if(!this.destroyed){var t=this.get("keyShape"),n=this.get("group"),i=E_(t,n);i.centerX=(i.minX+i.maxX)/2,i.centerY=(i.minY+i.maxY)/2;var a=this.get(NV),o=this.get(Zct)||{},s=o.x,l=o.x;if(a){a.width=Math.max(a.width,i.width),a.height=Math.max(a.height,i.height);var u=t.get("type");u==="circle"?(i.width=a.r*2,i.height=a.r*2):(i.width=a.width,i.height=a.height),i.minX=i.centerX-i.width/2,i.minY=i.centerY-i.height/2,i.maxX=i.centerX+i.width/2,i.maxY=i.centerY+i.height/2}else i.width=i.maxX-i.minX,i.height=i.maxY-i.minY,i.centerX=(i.minX+i.maxX)/2,i.centerY=(i.minY+i.maxY)/2;return i.x=i.minX,i.y=i.minY,(i.x!==s||i.y!==l)&&this.set(Qct,null),i}},e.prototype.getChildren=function(){var t=this;return{nodes:t.getNodes(),combos:t.getCombos()}},e.prototype.getNodes=function(){var t=this;return t.get("nodes")},e.prototype.getCombos=function(){var t=this;return t.get("combos")},e.prototype.addChild=function(t){var n=this,i=t.getType();switch(i){case"node":n.addNode(t);break;case"combo":n.addCombo(t);break;default:return console.warn("Only node or combo items are allowed to be added into a combo"),!1}return!0},e.prototype.addCombo=function(t){var n=this;return n.get("combos").push(t),!0},e.prototype.addNode=function(t){var n=this;return n.get("nodes").push(t),!0},e.prototype.removeChild=function(t){var n=this,i=t.getType();switch(i){case"node":n.removeNode(t);break;case"combo":n.removeCombo(t);break;default:return console.warn("Only node or combo items are allowed to be added into a combo"),!1}return!0},e.prototype.removeCombo=function(t){if(!!t){var n=this.getCombos(),i=n.indexOf(t);return i>-1?(n.splice(i,1),!0):!1}},e.prototype.removeNode=function(t){if(!!t){var n=this.getNodes(),i=n.indexOf(t);return i>-1?(n.splice(i,1),!0):!1}},e.prototype.getUpdateType=function(t){},e.prototype.getBBox=function(){this.set($ct,null);var t=this.calculateCanvasBBox();return t},e.prototype.clearCache=function(){this.set(Zct,null),this.set($ct,null),this.set(Qct,null)},e.prototype.destroy=function(){if(!this.destroyed){var t=this.get("animate"),n=this.get("group");t&&n.stopAnimate(),n.shapeMap={},this.clearCache(),this.set(NV,null),this.set("bbox",null),n.remove(),this._cfg=null,this.destroyed=!0}},e}(cg),ck=$Qt;var HA="node",hk="edge",Jct="vedge",YA="combo",QQt="default",tht="Mapper",Fp="stateStyles",JQt=function(){function r(e){var t=this;this.edgeToBeUpdateMap={},this.throttleRefresh=(0,an.throttle)(function(n){var i,a=t.graph;if(!(!a||a.get("destroyed"))){var o=t.edgeToBeUpdateMap;!o||!((i=Object.keys(o))===null||i===void 0?void 0:i.length)||(Object.keys(o).forEach(function(s){var l=o[s].edge;!l||l.destroyed||l.refresh(o[s].updateType)}),t.edgeToBeUpdateMap={})}},16,{trailing:!0,leading:!0}),this.graph=e,this.destroyed=!1}return r.prototype.addItem=function(e,t){var n=this.graph,i=e===Jct?hk:e,a=n.get("".concat(i,"Group"))||n.get("group"),o=(0,an.upperFirst)(i),s=null,l=n.get(i+(0,an.upperFirst)(Fp))||{},u=n.get(QQt+o);t[Fp]&&(l=t[Fp]),u&&(0,an.each)(u,function(x,b){(0,an.isObject)(x)&&!(0,an.isArray)(x)?t[b]=(0,an.deepMix)({},x,t[b]):(0,an.isArray)(x)?t[b]=t[b]||(0,an.clone)(u[b]):t[b]=t[b]||u[b]});var f=n.get(i+tht);if(f){var c=f(t);c[Fp]&&(l=c[Fp],delete c[Fp]),(0,an.each)(c,function(x,b){(0,an.isObject)(x)&&!(0,an.isArray)(x)?t[b]=(0,an.deepMix)({},t[b],x):t[b]=c[b]||t[b]})}if(n.emit("beforeadditem",{type:e,model:t}),e===hk||e===Jct){var h=void 0,d=void 0;if(h=t.source,d=t.target,h&&(0,an.isString)(h)&&(h=n.findById(h)),d&&(0,an.isString)(d)&&(d=n.findById(d)),!h||!d){console.warn("The source or target node of edge ".concat(t.id," does not exist!"));return}h.getType&&h.getType()==="combo"&&(t.isComboEdge=!0),d.getType&&d.getType()==="combo"&&(t.isComboEdge=!0),s=new T_({model:t,source:h,target:d,styles:l,linkCenter:n.get("linkCenter"),group:a.addGroup()})}else if(e===HA)s=new cg({model:t,styles:l,group:a.addGroup()});else if(e===YA){var p=t.children,v=zA(p,n);isNaN(v.x)?isNaN(t.x)&&(t.x=Math.random()*100):t.x=v.x,isNaN(v.y)?isNaN(t.y)&&(t.y=Math.random()*100):t.y=v.y;var m=a.addGroup();m.setZIndex(t.depth),s=new ck({model:t,styles:l,bbox:t.collapsed?zA([],n):v,group:m});var g=s.getModel();(p||[]).forEach(function(x){var b=n.findById(x.id);s.addChild(b),x.depth=g.depth+2}),t.collapsed&&setTimeout(function(){s.destroyed||n.collapseCombo(s)},0)}if(s)return n.get("".concat(e,"s")).push(s),n.get("itemMap")[s.get("id")]=s,n.emit("afteradditem",{item:s,model:t}),s},r.prototype.updateItem=function(e,t){var n=this,i,a,o=this.graph;if((0,an.isString)(e)&&(e=o.findById(e)),!(!e||e.destroyed)){var s="";e.getType&&(s=e.getType());var l=o.get(s+tht),u=e.getModel(),f=e.getUpdateType(t);if(l){var c=(0,an.deepMix)({},u,t),h=l(c),d=(0,an.deepMix)({},u,h,t);h[Fp]&&(e.set("styles",d[Fp]),delete d[Fp]),(0,an.each)(d,function(C,w){t[w]=C})}else(0,an.each)(t,function(C,w){u[w]&&(0,an.isObject)(C)&&!(0,an.isArray)(C)&&(t[w]=E(E({},u[w]),t[w]))});if(o.emit("beforeupdateitem",{item:e,cfg:t}),s===hk){if(t.source){var p=t.source;(0,an.isString)(p)&&(p=o.findById(p)),e.setSource(p)}if(t.target){var v=t.target;(0,an.isString)(v)&&(v=o.findById(v)),e.setTarget(v)}e.update(t)}if(s===HA||s===YA){e.update(t,f);var m=e.getEdges(),g=(f==null?void 0:f.includes("bbox"))||f==="move";if(s===HA)f==="move"?(0,an.each)(m,function(C){n.edgeToBeUpdateMap[C.getID()]={edge:C,updateType:f},n.throttleRefresh()}):g&&(0,an.each)(m,function(C){C.refresh(f)});else if(g&&s===YA){var x=e.get("shapeFactory"),b=u.type||"circle",S=u.animate===void 0||t.animate===void 0?(a=(i=x[b])===null||i===void 0?void 0:i.options)===null||a===void 0?void 0:a.animate:u.animate||t.animate;S?setTimeout(function(){if(!(!e||e.destroyed)){var C=e.getKeyShape();!C||C.destroyed||(0,an.each)(m,function(w){w&&!w.destroyed&&w.refresh()})}},201):(0,an.each)(m,function(C){C.refresh()})}}o.emit("afterupdateitem",{item:e,cfg:t})}},r.prototype.updateCombo=function(e,t){var n=this,i,a,o=this.graph;if((0,an.isString)(e)&&(e=o.findById(e)),!(!e||e.destroyed)){var s=e.getModel(),l=zA(t,o,e),u=l.x,f=l.y;e.set("bbox",l),e.update({x:u||s.x,y:f||s.y});var c=e.get("shapeFactory"),h=s.type||"circle",d=s.animate===void 0?(a=(i=c[h])===null||i===void 0?void 0:i.options)===null||a===void 0?void 0:a.animate:s.animate;d?setTimeout(function(){if(!(!e||e.destroyed)){var p=e.getKeyShape();!p||p.destroyed||(e.getShapeCfg(s),n.updateComboEdges(e))}},201):this.updateComboEdges(e)}},r.prototype.updateComboEdges=function(e){for(var t=e.getEdges()||[],n=0;n-1&&o.splice(s,1),a===hk){var l=n.get("v".concat(a,"s")),u=l.indexOf(e);u>-1&&l.splice(u,1)}var f=e.get("id"),c=n.get("itemMap");delete c[f];var h=n.get("comboTrees"),d=e.get("id");if(a===HA){var p=e.getModel().comboId;if(h&&p){var v=h,m=!1;h.forEach(function(w){m||Os(w,function(A){if(A.id===d&&v){var I=v.indexOf(A);return v.splice(I,1),m=!0,!1}return v=A.children,!0})})}for(var g=e.getEdges(),x=g.length-1;x>=0;x--)n.removeItem(g[x],!1);p&&n.updateCombo(p)}else if(a===YA){var b=e.getModel().parentId,S,C=!1;(h||[]).forEach(function(A){C||Os(A,function(I){return I.id===d?(S=I,C=!0,!1):!0})}),S.removed=!0,S&&S.children&&S.children.forEach(function(A){t.removeItem(A.id)});for(var g=e.getEdges(),x=g.length;x>=0;x--)n.removeItem(g[x],!1);b&&n.updateCombo(b)}e.destroy(),n.emit("afterremoveitem",{item:i,type:a})}},r.prototype.setItemState=function(e,t,n){var i=this.graph,a=t;(0,an.isString)(n)&&(a="".concat(t,":").concat(n)),!(e.hasState(a)===n&&n||(0,an.isString)(n)&&e.hasState(a))&&(i.emit("beforeitemstatechange",{item:e,state:a,enabled:n}),e.setState(t,n),i.autoPaint(),i.emit("afteritemstatechange",{item:e,state:a,enabled:n}))},r.prototype.priorityState=function(e,t){var n=this.graph,i=e;(0,an.isString)(e)&&(i=n.findById(e)),this.setItemState(i,t,!1),this.setItemState(i,t,!0)},r.prototype.clearItemStates=function(e,t){var n=this.graph;(0,an.isString)(e)&&(e=n.findById(e)),n.emit("beforeitemstatesclear",{item:e,states:t}),e.clearStates(t),n.emit("afteritemstatesclear",{item:e,states:t})},r.prototype.refreshItem=function(e){var t=this.graph;(0,an.isString)(e)&&(e=t.findById(e)),t.emit("beforeitemrefresh",{item:e}),e.refresh(),t.emit("afteritemrefresh",{item:e})},r.prototype.addCombos=function(e,t){var n=this,i=this.graph;(e||[]).forEach(function(o){Vh(o,function(s){var l;return t.forEach(function(u){u.id===s.id&&(u.children=s.children,u.depth=s.depth,l=u)}),l&&n.addItem("combo",l),!0})});var a=i.get("comboGroup");a&&a.sort()},r.prototype.changeItemVisibility=function(e,t){var n=this,i=this.graph;if((0,an.isString)(e)&&(e=i.findById(e)),!e){console.warn("The item to be shown or hidden does not exist!");return}if(i.emit("beforeitemvisibilitychange",{item:e,visible:t}),e.changeVisibility(t),e.getType&&e.getType()===HA){var a=e.getEdges();(0,an.each)(a,function(f){t&&!(f.get("source").isVisible()&&f.get("target").isVisible())||n.changeItemVisibility(f,t)})}else if(e.getType&&e.getType()===YA){var o=i.get("comboTrees"),s=e.get("id"),l=[],u=!1;(o||[]).forEach(function(c){u||!c.children||c.children.length===0||Os(c,function(h){return h.id===s?(l=h.children,u=!0,!1):!0})}),l&&(!t||t&&!e.getModel().collapsed)&&l.forEach(function(c){var h=i.findById(c.id);n.changeItemVisibility(h,t)});var a=e.getEdges();(0,an.each)(a,function(c){t&&!(c.get("source").isVisible()&&c.get("target").isVisible())||n.changeItemVisibility(c,t)})}return i.emit("afteritemvisibilitychange",{item:e,visible:t}),e},r.prototype.destroy=function(){this.graph=null,this.destroyed=!0},r}(),FV=JQt;var XA=U(q()),D0=null,tJt=function(){function r(e){this.graph=e,this.cachedStates={enabled:{},disabled:{}},this.destroyed=!1}return r.checkCache=function(e,t,n){if(!!n[t]){var i=n[t].indexOf(e);i>=0&&n[t].splice(i,1)}},r.cacheState=function(e,t,n){n[t]||(n[t]=[]),n[t].push(e)},r.prototype.updateState=function(e,t,n){var i=this,a=r.checkCache,o=r.cacheState;if(!e.destroyed){var s=this.cachedStates,l=s.enabled,u=s.disabled;n?(a(e,t,u),o(e,t,l)):(a(e,t,l),o(e,t,u)),D0&&clearTimeout(D0),D0=setTimeout(function(){D0=null,i.updateGraphStates()},16)}},r.prototype.updateStates=function(e,t,n){var i=this;(0,XA.isString)(t)?this.updateState(e,t,n):t.forEach(function(a){i.updateState(e,a,n)})},r.prototype.updateGraphStates=function(){var e=this.graph.get("states"),t=this.cachedStates;(0,XA.each)(t.disabled,function(n,i){e[i]&&(e[i]=e[i].filter(function(a){return n.indexOf(a)<0&&!n.destroyed}))}),(0,XA.each)(t.enabled,function(n,i){if(!e[i])e[i]=n;else{var a={};e[i].forEach(function(o){o.destroyed||(a[o.get("id")]=!0)}),n.forEach(function(o){if(!o.destroyed){var s=o.get("id");a[s]||(a[s]=!0,e[i].push(o))}})}}),this.graph.emit("graphstatechange",{states:e}),this.cachedStates={enabled:{},disabled:{}}},r.prototype.destroy=function(){this.graph=null,this.cachedStates=null,D0&&clearTimeout(D0),D0=null,this.destroyed=!0},r}(),BV=tJt;var Js=U(q());var UV={};Dn(UV,{getClosedSpline:()=>pk,getControlPoint:()=>qA,getSpline:()=>GV,paddedHull:()=>zV,pathToPoints:()=>dk,pointsToPolygon:()=>rJt,roundedHull:()=>vk});var eJt=function(e,t){return!e||!t?e:e.replace(/\\?\{([^{}]+)\}/g,function(n,i){if(n.charAt(0)==="\\")return n.slice(1);var a=t[i];return a===0&&(a="0"),a||""})},GV=function(e){var t=[];if(e.length<2)throw new Error("point length must largn than 2, now it's ".concat(e.length));for(var n=0,i=e;n0?o-1:t-1,l=oe.normalize([0,0],oe.add([0,0],a[s].v,oe.scale([0,0],a[o].v,-1)));a[o].p=oe.add([0,0],a[o].p,oe.scale([0,0],l,e))}return a.map(function(u){var f=u.p;return{x:f[0],y:f[1]}})}var iht=function(e,t,n){return(e.y-n.y)*(t.x-n.x)-(e.x-n.x)*(t.y-n.y)},jV=function(e){var t=e.map(function(s){return{x:s.getModel().x,y:s.getModel().y}});if(t.sort(function(s,l){return s.x===l.x?s.y-l.y:s.x-l.x}),t.length===1)return t;for(var n=[],i=0;i=2&&iht(n[n.length-2],n[n.length-1],t[i])<=0;)n.pop();n.push(t[i])}for(var a=[],i=t.length-1;i>=0;i--){for(;a.length>=2&&iht(a[a.length-2],a[a.length-1],t[i])<=0;)a.pop();a.push(t[i])}a.pop(),n.pop();var o=n.concat(a);return o};var nJt={maxRoutingIterations:100,maxMarchingIterations:100,pixelGroupSize:2,edgeR0:10,edgeR1:10,nodeR0:5,nodeR1:10,morphBuffer:5,threshold:.001,skip:16,nodeInfluenceFactor:1,edgeInfluenceFactor:1,negativeNodeInfluenceFactor:-.5};function iJt(r,e,t){var n=!1,i=function(l,u){return e.cells[l+u*e.width]},a=function(l,u){var f=0;return i(l-1,u-1)>=t&&(f+=1),i(l,u-1)>t&&(f+=2),i(l-1,u)>t&&(f+=4),i(l,u)>t&&(f+=8),f},o=function(l,u){for(var f=l,c=u,h,d,p=0;p-1){if(!(r[0].x!==f||r[0].y!==c))return!0}else r.push({x:f,y:c});var v=a(f,c);switch(v){case-1:return console.warn("Marched out of bounds"),!0;case 0:case 3:case 2:case 7:f++;break;case 12:case 14:case 4:f--;break;case 6:h===0&&(d===-1?f-=1:f+=1);break;case 1:case 13:case 5:c--;break;case 9:h===1&&(d===0?c-=1:c+=1);break;case 10:case 8:case 11:c++;break;default:return console.warn("Marching squares invalid state: ".concat(v)),!0}}};this.march=function(){for(var s=0;st&&a(s,l)!==15&&(n=o(s,l));return n}}var aJt=function(e,t,n){var i=Math.ceil(e/n),a=Math.ceil(t/n),o=new Float32Array(Math.max(0,i*a)).fill(0);return{cells:o,width:i,height:a}},oJt=function(e,t,n){var i=null,a=Number.POSITIVE_INFINITY;return t.forEach(function(o){var s={x:e.getModel().x,y:e.getModel().y},l={x:o.getModel().x,y:o.getModel().y},u=GA(s,l),f=new lg(s.x,s.y,l.x,l.y),c=n.reduce(function(h,d){return tk(d,f)>0?h+1:h},0);u*Math.pow(c+1,2)=0&&o=1;)C/=1.5,w=sht(p,C,m,S),A=u(w,o)||u(w,a),I=f(w,t);w&&!A&&(!S||!I)&&(o.push(new lg(d.x1,d.y1,w.x,w.y)),o.push(new lg(w.x,w.y,d.x2,d.y2)),s=!0)};x(!0),s||x(!1)}}s||a.push(d),l+=1};!s&&o.length;)c()}for(;o.length;)a.push(o.pop());return a};function lJt(r,e,t,n,i){var a=oJt(r,t,e);if(a===null)return[];var o=function(c){for(var h=[];c.length>0;){var d=c.pop();if(c.length===0){h.push(d);break}var p=c.pop(),v=new lg(d.x1,d.y1,p.x2,p.y2),m=aht(e,v);m?(h.push(d),c.push(p)):c.push(v)}return h},s=new lg(r.getModel().x,r.getModel().y,a.getModel().x,a.getModel().y),l=sJt(s,e,n,i),u=o(l);return u}var oht=function(e,t,n){var i=Object.assign(nJt,n),a=hV(e.map(function(x){return{x:x.getModel().x,y:x.getModel().y}}));e=e.sort(function(x,b){return GA({x:x.getModel().x,y:x.getModel().y},a)-GA({x:b.getModel().x,y:b.getModel().y},a)});var o=[],s=[];e.forEach(function(x){var b=lJt(x,t,o,i.maxRoutingIterations,i.morphBuffer);b.forEach(function(S){s.push(S)}),o.push(x)});for(var l=uJt(e,s,i.nodeR0),u=aJt(l.width,l.height,i.pixelGroupSize),f=[],c=[],h=0;h1)for(p=Math.floor(d.length/i.skip);p<3&&i.skip>1;)i.skip-=1,p=Math.floor(d.length/i.skip);for(var v=0,m=0;m0)i.nonMemberInfluenceFactor*=.8;else break}return c};function uJt(r,e,t){var n={minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,width:0,height:0,x:0,y:0},i=[];r.forEach(function(l){i.push(l.getBBox())}),e.forEach(function(l){i.push(l.getBBox())});for(var a=0,o=i;an.maxX?s.maxX:n.maxX)+t,n.maxY=(s.maxY>n.maxY?s.maxY:n.maxY)+t}return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.x=n.minX,n.y=n.minY,n}function fJt(r,e,t,n,i,a){function o(d,p){var v=Math.floor((d-p)/a.pixelGroupSize);return v<0?0:v}function s(d,p){return d*a.pixelGroupSize+p}var l=(a.nodeR0-a.nodeR1)*(a.nodeR0-a.nodeR1),u=(a.edgeR0-a.edgeR1)*(a.edgeR0-a.edgeR1),f=function(p,v){var m=Math.min(o(p.minX,v+n.minX),i.width),g=Math.min(o(p.minY,v+n.minY),i.height),x=Math.min(o(p.maxX,-v+n.minX),i.width),b=Math.min(o(p.maxY,-v+n.minY),i.height);return[m,g,x,b]},c=function(p,v){for(var m=p.getBBox(),g=f(m,a.nodeR1),x=g[0],b=g[1],S=g[2],C=g[3],w=b;wl.y?n?u.topLeft:u.bottomRight:n?u.topRight:u.bottomLeft:o.ys.x?n?u.topLeft:u.bottomRight:n?u.bottomLeft:u.topRight:a.x0?this.cfg.padding+e:10+e,this.cfg.bubbleCfg={nodeR0:this.padding-e,nodeR1:this.padding-e,morphBuffer:this.padding-e}},r.prototype.setType=function(){this.type=this.cfg.type,this.members.length<3&&(this.type="round-convex"),this.type!=="round-convex"&&this.type!=="smooth-convex"&&this.type!=="bubble"&&(console.warn("The hull type should be either round-convex, smooth-convex or bubble, round-convex is used by default."),this.type="round-convex")},r.prototype.calcPath=function(e,t){var n,i,a;switch(this.type){case"round-convex":n=jV(e),a=vk(n.map(function(o){return[o.x,o.y]}),this.padding),i=Kf(a);break;case"smooth-convex":n=jV(e),n.length===2?(a=vk(n.map(function(o){return[o.x,o.y]}),this.padding),i=Kf(a)):n.length>2&&(a=zV(n.map(function(o){return[o.x,o.y]}),this.padding),i=pk(a));break;case"bubble":n=oht(e,t,this.cfg.bubbleCfg),i=n.length>=2&&pk(n);break;default:}return i},r.prototype.render=function(){this.group.addShape("path",{attrs:E({path:this.path},this.cfg.style),id:this.id,name:this.cfg.id,capture:!1}),this.group.toBack()},r.prototype.addMember=function(e){if(!!e){(0,Js.isString)(e)&&(e=this.graph.findById(e)),this.members.push(e);var t=this.nonMembers.indexOf(e);return t>-1&&this.nonMembers.splice(t,1),this.updateData(this.members,this.nonMembers),!0}},r.prototype.addNonMember=function(e){if(!!e){(0,Js.isString)(e)&&(e=this.graph.findById(e)),this.nonMembers.push(e);var t=this.members.indexOf(e);return t>-1&&this.members.splice(t,1),this.updateData(this.members,this.nonMembers),!0}},r.prototype.removeMember=function(e){if(!!e){(0,Js.isString)(e)&&(e=this.graph.findById(e));var t=this.members.indexOf(e);return t>-1?(this.members.splice(t,1),this.updateData(this.members,this.nonMembers),!0):!1}},r.prototype.removeNonMember=function(e){if(!!e){(0,Js.isString)(e)&&(e=this.graph.findById(e));var t=this.nonMembers.indexOf(e);return t>-1?(this.nonMembers.splice(t,1),this.updateData(this.members,this.nonMembers),!0):!1}},r.prototype.updateData=function(e,t){var n=this;this.group.findById(this.id).remove(),e&&(this.members=e.map(function(i){return(0,Js.isString)(i)?n.graph.findById(i):i})),t&&(this.nonMembers=t.map(function(i){return(0,Js.isString)(i)?n.graph.findById(i):i})),this.path=this.calcPath(this.members,this.nonMembers),this.render()},r.prototype.updateStyle=function(e){var t=this.group.findById(this.id);t.attr(E({},e))},r.prototype.updateCfg=function(e){var t=this;this.cfg=(0,Js.deepMix)(this.cfg,e),this.id=this.cfg.id,this.group=this.cfg.group,e.members&&(this.members=this.cfg.members.map(function(n){return(0,Js.isString)(n)?t.graph.findById(n):n})),e.nonMembers&&(this.nonMembers=this.cfg.nonMembers.map(function(n){return(0,Js.isString)(n)?t.graph.findById(n):n})),this.setPadding(),this.setType(),this.path=this.calcPath(this.members,this.nonMembers),this.render()},r.prototype.contain=function(e){var t=this,n;(0,Js.isString)(e)?n=this.graph.findById(e):n=e;var i,a=n.getKeyShape();if(n.get("type")==="path")i=dk(a.attr("path"));else{var o=a.getCanvasBBox();i=[[o.minX,o.minY],[o.maxX,o.minY],[o.maxX,o.maxY],[o.minX,o.maxY]]}return i=i.map(function(s){var l=t.graph.getPointByCanvas(s[0],s[1]);return[l.x,l.y]}),uV(i,dk(this.path))},r.prototype.destroy=function(){this.group.remove(),this.cfg=null},r}(),mk=cJt;var KA=gr.transform,hJt="node",dJt=function(r){H(e,r);function e(t){var n=r.call(this)||this;return n.cfg=(0,Ir.deepMix)(n.getDefaultCfg(),t),n.init(),n.animating=!1,n.destroyed=!1,n.cfg.enabledStack&&(n.undoStack=new __(n.cfg.maxStep),n.redoStack=new __(n.cfg.maxStep)),n}return e.prototype.init=function(){this.initCanvas();var t=new TV(this),n=new EV(this),i=new FV(this),a=new BV(this);this.set({viewController:t,modeController:n,itemController:i,stateController:a}),this.initLayoutController(),this.initEventController(),this.initGroups(),this.initPlugins()},e.prototype.initGroups=function(){var t=this.get("canvas");if(!!t){var n=t.get("el"),i=(n||{}).id,a=i===void 0?"g6":i,o=t.addGroup({id:"".concat(a,"-root"),className:qe.rootContainerClassName});if(this.get("groupByTypes")){var s=o.addGroup({id:"".concat(a,"-edge"),className:qe.edgeContainerClassName}),l=o.addGroup({id:"".concat(a,"-node"),className:qe.nodeContainerClassName}),u=o.addGroup({id:"".concat(a,"-combo"),className:qe.comboContainerClassName});u.toBack(),this.set({nodeGroup:l,edgeGroup:s,comboGroup:u})}var f=o.addGroup({id:"".concat(a,"-delegate"),className:qe.delegateContainerClassName});this.set({delegateGroup:f}),this.set("group",o)}},e.prototype.getDefaultCfg=function(){return{container:void 0,width:void 0,height:void 0,renderer:"canvas",modes:{},plugins:[],data:{},fitViewPadding:10,minZoom:.2,maxZoom:10,event:!0,groupByTypes:!0,directed:!1,autoPaint:!0,nodes:[],edges:[],combos:[],vedges:[],itemMap:{},linkCenter:!1,defaultNode:{},defaultEdge:{},nodeStateStyles:{},edgeStateStyles:{},states:{},animate:!1,animateCfg:{onFrame:void 0,duration:500,easing:"easeLinear"},callback:void 0,enabledStack:!1,maxStep:10,tooltips:[]}},e.prototype.set=function(t,n){return(0,Ir.isPlainObject)(t)?this.cfg=E(E({},this.cfg),t):this.cfg[t]=n,this},e.prototype.get=function(t){var n;return(n=this.cfg)===null||n===void 0?void 0:n[t]},e.prototype.getGroup=function(){return this.get("group")},e.prototype.getContainer=function(){return this.get("container")},e.prototype.getMinZoom=function(){return this.get("minZoom")},e.prototype.setMinZoom=function(t){return this.set("minZoom",t)},e.prototype.getMaxZoom=function(){return this.get("maxZoom")},e.prototype.setMaxZoom=function(t){return this.set("maxZoom",t)},e.prototype.getWidth=function(){return this.get("width")},e.prototype.getHeight=function(){return this.get("height")},e.prototype.clearItemStates=function(t,n){(0,Ir.isString)(t)&&(t=this.findById(t));var i=this.get("itemController");n||(n=t.get("states")),i.clearItemStates(t,n);var a=this.get("stateController");a.updateStates(t,n,!1)},e.prototype.node=function(t){typeof t=="function"&&this.set("nodeMapper",t)},e.prototype.edge=function(t){typeof t=="function"&&this.set("edgeMapper",t)},e.prototype.combo=function(t){typeof t=="function"&&this.set("comboMapper",t)},e.prototype.findById=function(t){return this.get("itemMap")[t]},e.prototype.find=function(t,n){var i,a=this.get("".concat(t,"s"));return(0,Ir.each)(a,function(o,s){if(n(o,s))return i=o,i}),i},e.prototype.findAll=function(t,n){var i=[];return(0,Ir.each)(this.get("".concat(t,"s")),function(a,o){n(a,o)&&i.push(a)}),i},e.prototype.findAllByState=function(t,n){return this.findAll(t,function(i){return i.hasState(n)})},e.prototype.getAnimateCfgWithCallback=function(t){var n=t.animateCfg,i=t.callback,a;if(!n)a={duration:500,callback:i};else if(a=(0,Ir.clone)(n),n.callback){var o=n.callback;a.callback=function(){i(),o()}}else a.callback=i;return a},e.prototype.translate=function(t,n,i,a){var o=this,s=this.get("group"),l=(0,Ir.clone)(s.getMatrix());if(l||(l=[1,0,0,0,1,0,0,0,1]),i){var u=this.getAnimateCfgWithCallback({animateCfg:a,callback:function(){return o.emit("viewportchange",{action:"translate",matrix:s.getMatrix()})}});JP(s,{x:s.getCanvasBBox().x+t,y:s.getCanvasBBox().y+n},i,u||{duration:500,easing:"easeCubic"})}else l=KA(l,[["t",t,n]]),s.setMatrix(l),this.emit("viewportchange",{action:"translate",matrix:l}),this.autoPaint()},e.prototype.moveTo=function(t,n,i,a){var o=this.get("group");JP(o,{x:t,y:n},i,a||{duration:500,easing:"easeCubic"}),this.emit("viewportchange",{action:"move",matrix:o.getMatrix()})},e.prototype.fitView=function(t,n){t&&this.set("fitViewPadding",t);var i=this.get("viewController");n?i.fitViewByRules(n):i.fitView(),this.autoPaint()},e.prototype.fitCenter=function(){var t=this.get("viewController");t.fitCenter(),this.autoPaint()},e.prototype.addBehaviors=function(t,n){var i=this.get("modeController");return i.manipulateBehaviors(t,n,!0),this},e.prototype.removeBehaviors=function(t,n){var i=this.get("modeController");return i.manipulateBehaviors(t,n,!1),this},e.prototype.updateBehavior=function(t,n,i){var a=this.get("modeController");return a.updateBehavior(t,n,i),this},e.prototype.zoom=function(t,n,i,a){var o=this,s=this.get("group"),l=(0,Ir.clone)(s.getMatrix()),u=this.get("minZoom"),f=this.get("maxZoom");if(l||(l=[1,0,0,0,1,0,0,0,1]),n?l=KA(l,[["t",-n.x,-n.y],["s",t,t],["t",n.x,n.y]]):l=KA(l,[["s",t,t]]),u&&l[0]f)return!1;if(i){var c=(0,Ir.clone)(s.getMatrix());c||(c=[1,0,0,0,1,0,0,0,1]);var h=c[0],d=h*t,p=this.getAnimateCfgWithCallback({animateCfg:a,callback:function(){return o.emit("viewportchange",{action:"zoom",matrix:s.getMatrix()})}});s.animate(function(v){if(v===1)c=l;else{var m=vV(h,d,v)/c[0];n?c=KA(c,[["t",-n.x,-n.y],["s",m,m],["t",n.x,n.y]]):c=KA(c,[["s",m,m]])}return{matrix:c}},p)}else s.setMatrix(l),this.emit("viewportchange",{action:"zoom",matrix:l}),this.autoPaint();return!0},e.prototype.zoomTo=function(t,n,i,a){var o=t/this.getZoom();return this.zoom(o,n,i,a)},e.prototype.focusItem=function(t,n,i){var a=this.get("viewController"),o=!1;n?o=!0:n===void 0&&(o=this.get("animate"));var s={};i?s=i:i===void 0&&(s=this.get("animateCfg")),a.focus(t,o,s),this.autoPaint()},e.prototype.autoPaint=function(){this.get("autoPaint")&&this.paint()},e.prototype.paint=function(){this.emit("beforepaint"),this.get("canvas").draw(),this.emit("afterpaint")},e.prototype.getPointByClient=function(t,n){var i=this.get("viewController");return i.getPointByClient(t,n)},e.prototype.getClientByPoint=function(t,n){var i=this.get("viewController");return i.getClientByPoint(t,n)},e.prototype.getPointByCanvas=function(t,n){var i=this.get("viewController");return i.getPointByCanvas(t,n)},e.prototype.getCanvasByPoint=function(t,n){var i=this.get("viewController");return i.getCanvasByPoint(t,n)},e.prototype.getGraphCenterPoint=function(){var t=this.get("group").getCanvasBBox();return{x:(t.minX+t.maxX)/2,y:(t.minY+t.maxY)/2}},e.prototype.getViewPortCenterPoint=function(){return this.getPointByCanvas(this.get("width")/2,this.get("height")/2)},e.prototype.showItem=function(t,n){n===void 0&&(n=!0);var i=this.get("itemController"),a=i.changeItemVisibility(t,!0);if(n&&this.get("enabledStack")){var o=a.getID(),s=a.getType(),l={},u={};switch(s){case"node":l.nodes=[{id:o,visible:!1}],u.nodes=[{id:o,visible:!0}];break;case"edge":l.nodes=[{id:o,visible:!1}],u.edges=[{id:o,visible:!0}];break;case"combo":l.nodes=[{id:o,visible:!1}],u.combos=[{id:o,visible:!0}];break;default:break}this.pushStack("visible",{before:l,after:u})}},e.prototype.hideItem=function(t,n){n===void 0&&(n=!0);var i=this.get("itemController"),a=i.changeItemVisibility(t,!1);if(n&&this.get("enabledStack")){var o=a.getID(),s=a.getType(),l={},u={};switch(s){case"node":l.nodes=[{id:o,visible:!0}],u.nodes=[{id:o,visible:!1}];break;case"edge":l.nodes=[{id:o,visible:!0}],u.edges=[{id:o,visible:!1}];break;case"combo":l.nodes=[{id:o,visible:!0}],u.combos=[{id:o,visible:!1}];break;default:break}this.pushStack("visible",{before:l,after:u})}},e.prototype.refreshItem=function(t){var n=this.get("itemController");n.refreshItem(t)},e.prototype.setAutoPaint=function(t){var n=this;n.set("autoPaint",t);var i=n.get("canvas");i.set("autoDraw",t)},e.prototype.remove=function(t,n){n===void 0&&(n=!0),this.removeItem(t,n)},e.prototype.removeItem=function(t,n){n===void 0&&(n=!0);var i=t;if((0,Ir.isString)(t)&&(i=this.findById(t)),!i&&(0,Ir.isString)(t))console.warn("The item to be removed does not exist!");else if(i){var a="";if(i.getType&&(a=i.getType()),n&&this.get("enabledStack")){var o=E(E({},i.getModel()),{itemType:a}),s={};switch(a){case"node":{s.nodes=[o],s.edges=[];for(var l=i.getEdges(),u=l.length-1;u>=0;u--)s.edges.push(E(E({},l[u].getModel()),{itemType:"edge"}));break}case"edge":s.edges=[o];break;case"combo":s.combos=[o];break;default:break}this.pushStack("delete",{before:s,after:{}})}if(a==="node"){var f=i.getModel();f.comboId&&this.updateComboTree(i,void 0,!1)}var c=this.get("itemController");if(c.removeItem(i),a==="combo"){var h=ak(this.get("comboTrees"));this.set("comboTrees",h)}}},e.prototype.addItem=function(t,n,i,a){i===void 0&&(i=!0),a===void 0&&(a=!0);var o=this.get("comboSorted");this.set("comboSorted",o&&!a);var s=this.get("itemController");if(!zct(t,n))return!1;if(n.id&&this.findById(n.id)){console.warn("This item exists already. Be sure the id %c".concat(n.id,"%c is unique."),"font-size: 20px; color: red;","");return}var l,u=this.get("comboTrees");if(u||(u=[]),t==="combo"){var f=this.get("itemMap"),c=!1;if(u.forEach(function(S){c||Vh(S,function(C){if(n.parentId===C.id){c=!0;var w=E({id:n.id,depth:C.depth+2},n);C.children?C.children.push(w):C.children=[w],n.depth=w.depth,l=s.addItem(t,n)}var A=f[C.id];return c&&A&&A.getType&&A.getType()==="combo"&&s.updateCombo(A,C.children),!0})}),!c){var h=E({id:n.id,depth:0},n);n.depth=h.depth,u.push(h),l=s.addItem(t,n)}this.set("comboTrees",u)}else if(t==="node"&&(0,Ir.isString)(n.comboId)&&u){var d=this.findById(n.comboId);d&&d.getType&&d.getType()!=="combo"&&console.warn("'".concat(n.comboId,"' is not a id of a combo in the graph, the node will be added without combo.")),l=s.addItem(t,n);var p=this.get("itemMap"),v=!1,m=!1;(u||[]).forEach(function(S){m||v||Vh(S,function(C){if(C.id===n.id)return m=!0,!1;if(n.comboId===C.id&&!m){v=!0;var w=(0,Ir.clone)(n);w.itemType="node",C.children?C.children.push(w):C.children=[w],w.depth=C.depth+1}return v&&p[C.id].getType&&p[C.id].getType()==="combo"&&s.updateCombo(p[C.id],C.children),!0})})}else l=s.addItem(t,n);if(t==="node"&&n.comboId||t==="combo"&&n.parentId){var d=this.findById(n.comboId||n.parentId);d&&d.getType&&d.getType()==="combo"&&d.addChild(l)}var g=this.get("combos");if(g&&g.length>0&&this.sortCombos(),this.autoPaint(),i&&this.get("enabledStack")){var x=E(E({},l.getModel()),{itemType:t}),b={};switch(t){case"node":b.nodes=[x];break;case"edge":b.edges=[x];break;case"combo":b.combos=[x];break;default:break}this.pushStack("add",{before:{},after:b})}return l},e.prototype.add=function(t,n,i,a){return i===void 0&&(i=!0),a===void 0&&(a=!0),this.addItem(t,n,i,a)},e.prototype.updateItem=function(t,n,i){var a=this;i===void 0&&(i=!0);var o=this.get("itemController"),s;(0,Ir.isString)(t)?s=this.findById(t):s=t;var l=(0,Ir.clone)(s.getModel()),u="";s.getType&&(u=s.getType());var f=mn([],s.getStates(),!0);if(u==="combo"&&(0,Ir.each)(f,function(p){return a.setItemState(s,p,!1)}),o.updateItem(s,n),u==="combo"&&(0,Ir.each)(f,function(p){return a.setItemState(s,p,!0)}),i&&this.get("enabledStack")){var c={nodes:[],edges:[],combos:[]},h={nodes:[],edges:[],combos:[]},d=E({id:l.id},n);switch(u){case"node":c.nodes.push(l),h.nodes.push(d);break;case"edge":c.edges.push(l),h.edges.push(d);break;case"combo":c.combos.push(l),h.combos.push(d);break;default:break}u==="node"&&c.nodes.push(l),this.pushStack("update",{before:c,after:h})}},e.prototype.update=function(t,n,i){i===void 0&&(i=!0),this.updateItem(t,n,i)},e.prototype.setItemState=function(t,n,i){(0,Ir.isString)(t)&&(t=this.findById(t));var a=this.get("itemController");a.setItemState(t,n,i);var o=this.get("stateController");(0,Ir.isString)(i)?o.updateState(t,"".concat(n,":").concat(i),!0):o.updateState(t,n,i)},e.prototype.priorityState=function(t,n){var i=this.get("itemController");i.priorityState(t,n)},e.prototype.data=function(t){wV(t),this.set("data",t)},e.prototype.render=function(){var t=this;this.set("comboSorted",!1);var n=this.get("data");if(this.get("enabledStack")&&this.clearStack(),!n)throw new Error("data must be defined first");var i=n.nodes,a=i===void 0?[]:i,o=n.edges,s=o===void 0?[]:o,l=n.combos,u=l===void 0?[]:l;if(this.clear(!0),this.emit("beforerender"),(0,Ir.each)(a,function(m){t.add("node",m,!1,!1)}),u&&u.length!==0){var f=ik(u,a);this.set("comboTrees",f),t.addCombos(u)}(0,Ir.each)(s,function(m){t.add("edge",m,!1,!1)});var c=t.get("animate");(t.get("fitView")||t.get("fitCenter"))&&t.set("animate",!1);var h=t.get("layoutController");if(h){if(h.layout(d),this.destroyed)return}else t.get("fitView")&&t.fitView(),t.get("fitCenter")&&t.fitCenter(),t.emit("afterrender"),t.set("animate",c);function d(){t.get("fitView")?t.fitView():t.get("fitCenter")&&t.fitCenter(),t.autoPaint(),t.emit("afterrender"),(t.get("fitView")||t.get("fitCenter"))&&t.set("animate",c)}if(!this.get("groupByTypes"))if(u&&u.length!==0)this.sortCombos();else if(n.nodes&&n.edges&&n.nodes.length=0;d--)c[d].destroyed&&c.splice(d,1);u&&(i.addCombos(u),this.get("groupByTypes")||this.sortCombos()),this.diffItems("edge",l,t.edges),(0,Ir.each)(s,function(v,m){v.getType&&(v.getType()==="node"||v.getType()==="combo")||l.edges.indexOf(v)<0&&(delete s[m],i.remove(v,!1))}),this.set({nodes:l.nodes,edges:l.edges});var p=this.get("layoutController");return p&&(p.changeData(),i.get("animate")&&!p.getLayoutType()?i.positionsAnimate():i.autoPaint()),setTimeout(function(){a.set("localRefresh",o)},16),this},e.prototype.addCombos=function(t){var n=this,i=n.get("comboTrees"),a=this.get("itemController");a.addCombos(i,t)},e.prototype.createCombo=function(t,n){var i=this;this.set("comboSorted",!1);var a="",o;if(!!t){if((0,Ir.isString)(t))a=t,o={id:t};else{if(a=t.id,!a){console.warn("Create combo failed. Please assign a unique string id for the adding combo.");return}o=t}var s=n.map(function(u){var f=i.findById(u),c=f.getModel(),h="";f.getType&&(h=f.getType());var d={id:f.getID(),itemType:h};return h==="combo"?(d.parentId=a,c.parentId=a):h==="node"&&(d.comboId=a,c.comboId=a),d});o.children=s,this.addItem("combo",o,!1),this.set("comboSorted",!1);var l=this.get("comboTrees");(l||[]).forEach(function(u){Vh(u,function(f){return f.id===a?(f.itemType="combo",f.children=s,!1):!0})}),l&&this.sortCombos()}},e.prototype.uncombo=function(t){var n=this,i,a=this,o=t;if((0,Ir.isString)(t)&&(o=this.findById(t)),!o||o.getType&&o.getType()!=="combo"){console.warn("The item is not a combo!");return}var s=o.getModel().parentId,l=a.get("comboTrees");l||(l=[]);var u=this.get("itemMap"),f=o.get("id"),c,h=[],d=this.get("combos"),p=this.findById(s);if(l.forEach(function(m){c||Vh(m,function(g){var x;if(g.id===f){c=g;var b=o.getEdges();b.forEach(function(C){n.removeItem(C,!1)});var S=d.indexOf(o);d.splice(S,1),delete u[f],o.destroy(),n.emit("afterremoveitem",{item:o,type:"combo"})}if(s&&c&&g.id===s){p.removeCombo(o),h=g.children;var S=h.indexOf(c);return S!==-1&&h.splice(S,1),(x=c.children)===null||x===void 0||x.forEach(function(w){var A=n.findById(w.id),I=A.getModel();A.getType&&A.getType()==="combo"?(w.parentId=s,delete w.comboId,I.parentId=s,delete I.comboId):A.getType&&A.getType()==="node"&&(w.comboId=s,I.comboId=s),p.addChild(A),h.push(w)}),!1}return!0})}),!s&&c){var v=l.indexOf(c);l.splice(v,1),(i=c.children)===null||i===void 0||i.forEach(function(m){m.parentId=void 0;var g=n.findById(m.id).getModel();delete g.parentId,delete g.comboId,m.itemType!=="node"&&l.push(m)})}},e.prototype.updateCombos=function(){var t=this,n=this,i=this.get("comboTrees"),a=n.get("itemController"),o=n.get("itemMap");(i||[]).forEach(function(s){Vh(s,function(l){if(!l)return!0;var u=o[l.id];if(u&&u.getType&&u.getType()==="combo"){var f=mn([],u.getStates(),!0);(0,Ir.each)(f,function(c){return t.setItemState(u,c,!1)}),a.updateCombo(u,l.children),(0,Ir.each)(f,function(c){return t.setItemState(u,c,!0)})}return!0})}),n.sortCombos()},e.prototype.updateCombo=function(t){var n=this,i=this,a=t,o;if((0,Ir.isString)(t)&&(a=this.findById(t)),!a||a.getType&&a.getType()!=="combo"){console.warn("The item to be updated is not a combo!");return}o=a.get("id");var s=this.get("comboTrees"),l=i.get("itemController"),u=i.get("itemMap");(s||[]).forEach(function(f){Vh(f,function(c){if(!c)return!0;var h=u[c.id];if(o===c.id&&h&&h.getType&&h.getType()==="combo"){var d=mn([],h.getStates(),!0);(0,Ir.each)(d,function(p){h.getStateStyle(p)&&n.setItemState(h,p,!1)}),l.updateCombo(h,c.children),(0,Ir.each)(d,function(p){h.getStateStyle(p)&&n.setItemState(h,p,!0)}),o&&(o=c.parentId)}return!0})})},e.prototype.updateComboTree=function(t,n,i){i===void 0&&(i=!0);var a=this;this.set("comboSorted",!1);var o;(0,Ir.isString)(t)?o=a.findById(t):o=t;var s=o.getModel(),l=s.comboId||s.parentId,u="";if(o.getType&&(u=o.getType()),n&&u==="combo"){var f=this.get("comboTrees"),c=!0,h;if((f||[]).forEach(function(x){h||Os(x,function(b){if(!h)return b.id===o.getID()&&(h=b),!0})}),Os(h,function(x){return x.id===n?(c=!1,!1):!0}),!c){console.warn("Failed to update the combo tree! The parentId points to a descendant of the combo!");return}}if(i&&this.get("enabledStack")){var d={},p={};u==="combo"?(d.combos=[{id:s.id,parentId:s.parentId}],p.combos=[{id:s.id,parentId:n}]):u==="node"&&(d.nodes=[{id:s.id,parentId:s.comboId}],p.nodes=[{id:s.id,parentId:n}]),this.pushStack("updateComboTree",{before:d,after:p})}if(s.parentId||s.comboId){var v=this.findById(s.parentId||s.comboId);v&&v.removeChild(o)}if(u==="combo"?s.parentId=n:u==="node"&&(s.comboId=n),n){var m=this.findById(n);m&&m.addChild(o)}if(l){var m=this.findById(l);m&&m.removeChild(o)}var g=ak(this.get("comboTrees"),s.id,n);this.set("comboTrees",g),this.updateCombos()},e.prototype.save=function(){var t=[],n=[],i=[];return(0,Ir.each)(this.get("nodes"),function(a){t.push(a.getModel())}),(0,Ir.each)(this.get("edges"),function(a){n.push(a.getModel())}),(0,Ir.each)(this.get("combos"),function(a){i.push(a.getModel())}),{nodes:t,edges:n,combos:i}},e.prototype.changeSize=function(t,n){var i=this.get("viewController");return i.changeSize(t,n),this},e.prototype.refresh=function(){var t=this;if(t.emit("beforegraphrefresh"),t.get("animate"))t.positionsAnimate();else{var n=t.get("nodes"),i=t.get("edges"),a=t.get("edges");(0,Ir.each)(n,function(o){o.refresh()}),(0,Ir.each)(i,function(o){o.refresh()}),(0,Ir.each)(a,function(o){o.refresh()})}t.emit("aftergraphrefresh"),t.autoPaint()},e.prototype.getNodes=function(){return this.get("nodes")},e.prototype.getEdges=function(){return this.get("edges")},e.prototype.getCombos=function(){return this.get("combos")},e.prototype.getComboChildren=function(t){if((0,Ir.isString)(t)&&(t=this.findById(t)),!t||t.getType&&t.getType()!=="combo"){console.warn("The combo does not exist!");return}return t.getChildren()},e.prototype.positionsAnimate=function(){var t=this;t.emit("beforeanimate");var n=t.get("animateCfg"),i=n.onFrame,a=t.getNodes(),o=a.map(function(l){var u=l.getModel();return{id:u.id,x:u.x,y:u.y}});t.isAnimating()&&t.stopAnimate();var s=t.get("canvas");s.animate(function(l){(0,Ir.each)(o,function(u){var f=t.findById(u.id);if(!(!f||f.destroyed)){var c=f.get("originAttrs"),h=f.get("model");if(!c){var d=f.getContainer().getMatrix();d||(d=[1,0,0,0,1,0,0,0,1]),c={x:d[6],y:d[7]},f.set("originAttrs",c)}if(i){var p=i(f,l,u,c);f.set("model",Object.assign(h,p))}else h.x=c.x+(u.x-c.x)*l,h.y=c.y+(u.y-c.y)*l}}),t.refreshPositions()},{duration:n.duration,easing:n.easing,callback:function(){(0,Ir.each)(a,function(u){u.set("originAttrs",null)}),n.callback&&n.callback(),t.emit("afteranimate"),t.animating=!1}})},e.prototype.refreshPositions=function(){var t=this;t.emit("beforegraphrefreshposition");var n=t.get("nodes"),i=t.get("edges"),a=t.get("vedges"),o=t.get("combos"),s,l={};(0,Ir.each)(n,function(u){s=u.getModel();var f=u.get("originAttrs");if(!(f&&s.x===f.x&&s.y===f.y)){var c=u.updatePosition({x:s.x,y:s.y});l[s.id]=c,s.comboId&&(l[s.comboId]=l[s.comboId]||c)}}),o&&o.length!==0&&t.updateCombos(),(0,Ir.each)(i,function(u){var f=u.getSource().getModel(),c=u.getTarget();if(!(0,Ir.isPlainObject)(c)){var h=c.getModel();(l[f.id]||l[h.id]||u.getModel().isComboEdge)&&u.refresh()}}),(0,Ir.each)(a,function(u){u.refresh()}),t.emit("aftergraphrefreshposition"),t.autoPaint()},e.prototype.stopAnimate=function(){this.get("canvas").stopAnimate()},e.prototype.isAnimating=function(){return this.animating},e.prototype.getZoom=function(){var t=this.get("group").getMatrix();return t?t[0]:1},e.prototype.getCurrentMode=function(){var t=this.get("modeController");return t.getMode()},e.prototype.setMode=function(t){var n=this.get("modeController");return n.setMode(t),this},e.prototype.clear=function(t){var n;return t===void 0&&(t=!1),(n=this.get("canvas"))===null||n===void 0||n.clear(),this.initGroups(),this.set({itemMap:{},nodes:[],edges:[],groups:[],combos:[],comboTrees:[]}),t||this.emit("afterrender"),this},e.prototype.updateLayout=function(t,n,i){var a=this,o=this.get("layoutController");if((0,Ir.isString)(t)&&(t={type:t}),n){var s=i;s||(n==="begin"?s={x:0,y:0}:s={x:this.getWidth()/2,y:this.getHeight()/2}),s=this.getPointByCanvas(s.x,s.y);var l=["force","gForce","fruchterman"];l.includes(t.type)||!t.type&&l.includes(o==null?void 0:o.layoutType)?t.center=[s.x,s.y]:this.once("afterlayout",function(c){var h=a.getGroup().getMatrix()||[1,0,0,0,1,0,0,0,1];s.x=s.x*h[0]+h[6],s.y=s.y*h[0]+h[7];var d=a.getGroup().getCanvasBBox(),p=d.minX,v=d.maxX,m=d.minY,g=d.maxY,x={x:(p+v)/2,y:(m+g)/2};n==="begin"&&(x.x=p,x.y=m),a.translate(s.x-x.x,s.y-x.y)})}var u=this.get("layout"),f={};Object.assign(f,u,t),this.set("layout",f),o.isLayoutTypeSame(f)&&f.gpuEnabled===u.gpuEnabled?o.updateLayoutCfg(f):o.changeLayout(f)},e.prototype.destroyLayout=function(){var t=this.get("layoutController");t.destroyLayout()},e.prototype.layout=function(){var t=this.get("layoutController"),n=this.get("layout");if(!(!n||!t)){if(n.workerEnabled){t.layout();return}t.layoutMethod?t.relayout(!0):t.layout()}},e.prototype.collapseCombo=function(t){var n=this;if((0,Ir.isString)(t)&&(t=this.findById(t)),!t){console.warn("The combo to be collapsed does not exist!");return}this.emit("beforecollapseexpandcombo",{action:"expand",item:t});var i=t.getModel(),a=this.get("itemController");a.collapseCombo(t),i.collapsed=!0;var o=this.getEdges().concat(this.get("vedges")),s=[],l=[],u=this.get("comboTrees"),f=!1;(u||[]).forEach(function(d){f||Os(d,function(p){if(f&&p.depth<=i.depth)return!1;if(i.id===p.id&&(f=!0),f){var v=n.findById(p.id);v&&v.getType&&v.getType()==="combo"&&(s=s.concat(v.getNodes()),l=l.concat(v.getCombos()))}return!0})});var c={},h=[];o.forEach(function(d){if(!(d.isVisible()&&!d.getModel().isVEdge)){var p=d.getSource(),v=d.getTarget();if((s.includes(p)||l.includes(p))&&!s.includes(v)&&!l.includes(v)||p.getModel().id===i.id){var m=d.getModel();if(m.isVEdge){n.removeItem(d,!1);return}for(var g=v.getModel();!v.isVisible();){if(v=n.findById(g.parentId||g.comboId),!v||!g.parentId&&!g.comboId)return;g=v.getModel()}var x=g.id;if(c["".concat(i.id,"-").concat(x)]){c["".concat(i.id,"-").concat(x)]+=m.size||1;return}var b=n.addItem("vedge",{source:i.id,target:x,isVEdge:!0},!1);c["".concat(i.id,"-").concat(x)]=m.size||1,h.push(b)}else if(!s.includes(p)&&!l.includes(p)&&(s.includes(v)||l.includes(v))||v.getModel().id===i.id){var m=d.getModel();if(m.isVEdge){n.removeItem(d,!1);return}for(var S=p.getModel();!p.isVisible();){if(p=n.findById(S.parentId||S.comboId),!p||!S.parentId&&!S.comboId)return;S=p.getModel()}var C=S.id;if(c["".concat(C,"-").concat(i.id)]){c["".concat(C,"-").concat(i.id)]+=m.size||1;return}var b=n.addItem("vedge",{target:i.id,source:C,isVEdge:!0},!1);c["".concat(C,"-").concat(i.id)]=m.size||1,h.push(b)}}}),h.forEach(function(d){var p=d.getModel();n.updateItem(d,{size:c["".concat(p.source,"-").concat(p.target)]},!1)}),this.emit("aftercollapseexpandcombo",{action:"collapse",item:t})},e.prototype.expandCombo=function(t){var n=this;if((0,Ir.isString)(t)&&(t=this.findById(t)),!t||t.getType&&t.getType()!=="combo"){console.warn("The combo to be collapsed does not exist!");return}this.emit("beforecollapseexpandcombo",{action:"expand",item:t});var i=t.getModel(),a=this.get("itemController");a.expandCombo(t),i.collapsed=!1;var o=this.getEdges().concat(this.get("vedges")),s=[],l=[],u=this.get("comboTrees"),f=!1;(u||[]).forEach(function(d){f||Os(d,function(p){if(f&&p.depth<=i.depth)return!1;if(i.id===p.id&&(f=!0),f){var v=n.findById(p.id);v&&v.getType&&v.getType()==="combo"&&(s=s.concat(v.getNodes()),l=l.concat(v.getCombos()))}return!0})});var c={},h={};o.forEach(function(d){if(!(d.isVisible()&&!d.getModel().isVEdge)){var p=d.getSource(),v=d.getTarget(),m=p.get("id"),g=v.get("id");if((s.includes(p)||l.includes(p))&&!s.includes(v)&&!l.includes(v)||m===i.id){if(d.getModel().isVEdge){n.removeItem(d,!1);return}for(var x=v.getModel();!v.isVisible();){if(v=n.findById(x.comboId||x.parentId),!v||!x.parentId&&!x.comboId)return;x=v.getModel()}g=x.id;for(var b=p.getModel();!p.isVisible();){if(p=n.findById(b.comboId||b.parentId),!p||!b.parentId&&!b.comboId)return;if(b.comboId===i.id||b.parentId===i.id)break;b=p.getModel()}if(m=b.id,g){var S="".concat(m,"-").concat(g);if(c[S]){c[S]+=d.getModel().size||1,n.updateItem(h[S],{size:c[S]},!1);return}var C=n.addItem("vedge",{source:m,target:g,isVEdge:!0},!1);c[S]=d.getModel().size||1,h[S]=C}}else if(!s.includes(p)&&!l.includes(p)&&(s.includes(v)||l.includes(v))||g===i.id){if(d.getModel().isVEdge){n.removeItem(d,!1);return}for(var b=p.getModel();!p.isVisible();){if(p=n.findById(b.comboId||b.parentId),!p||!b.parentId&&!b.comboId)return;b=p.getModel()}m=b.id;for(var x=v.getModel();!v.isVisible();){if(v=n.findById(x.comboId||x.parentId),!v||!x.parentId&&!x.comboId)return;if(x.comboId===i.id||x.parentId===i.id)break;x=v.getModel()}if(g=x.id,m){var S="".concat(m,"-").concat(g);if(c[S]){c[S]+=d.getModel().size||1,n.updateItem(h[S],{size:c[S]},!1);return}var C=n.addItem("vedge",{target:g,source:m,isVEdge:!0},!1);c[S]=d.getModel().size||1,h[S]=C}}else(s.includes(p)||l.includes(p))&&(s.includes(v)||l.includes(v))&&p.isVisible()&&v.isVisible()&&d.show()}}),this.emit("aftercollapseexpandcombo",{action:"expand",item:t})},e.prototype.collapseExpandCombo=function(t){if((0,Ir.isString)(t)&&(t=this.findById(t)),!(!t||t.getType&&t.getType()!=="combo")){for(var n=t.getModel(),i=this.findById(n.parentId);i;){var a=i.getModel();if(a.collapsed){console.warn("Fail to expand the combo since it's ancestor combo is collapsed."),i=void 0;return}i=this.findById(a.parentId)}var o=n.collapsed;o?this.expandCombo(t):this.collapseCombo(t),this.updateCombo(t)}},e.prototype.sortCombos=function(){var t=this,n=this.get("comboSorted");if(!n){this.set("comboSorted",!0);var i=[],a={},o=this.get("comboTrees");(o||[]).forEach(function(l){Os(l,function(u){return i[u.depth]?i[u.depth].push(u.id):i[u.depth]=[u.id],a[u.id]=u.depth,!0})});var s=this.getEdges().concat(this.get("vedges"));(s||[]).forEach(function(l){var u=l.getModel(),f=a[u.source]||0,c=a[u.target]||0,h=Math.max(f,c);i[h]?i[h].push(u.id):i[h]=[u.id]}),i.forEach(function(l){if(!(!l||!l.length))for(var u=l.length-1;u>=0;u--){var f=t.findById(l[u]);f&&f.toFront()}})}},e.prototype.getNeighbors=function(t,n){var i=t;return(0,Ir.isString)(t)&&(i=this.findById(t)),i.getNeighbors(n)},e.prototype.getNodeDegree=function(t,n,i){n===void 0&&(n=void 0),i===void 0&&(i=!1);var a=t;(0,Ir.isString)(t)&&(a=this.findById(t));var o=this.get("degrees");(!o||i)&&(o=Np(this.save()),this.set("degrees",o));var s=o[a.getID()],l=0;if(!s)return 0;switch(n){case"in":l=s.inDegree;break;case"out":l=s.outDegree;break;case"all":l=s;break;default:l=s.degree;break}return l},e.prototype.getUndoStack=function(){return this.undoStack},e.prototype.getRedoStack=function(){return this.redoStack},e.prototype.getStackData=function(){return this.get("enabledStack")?{undoStack:this.undoStack.toArray(),redoStack:this.redoStack.toArray()}:null},e.prototype.clearStack=function(){this.get("enabledStack")&&(this.undoStack.clear(),this.redoStack.clear())},e.prototype.pushStack=function(t,n,i){if(t===void 0&&(t="update"),i===void 0&&(i="undo"),!this.get("enabledStack")){console.warn("\u8BF7\u5148\u542F\u7528 undo & redo \u529F\u80FD\uFF0C\u5728\u5B9E\u4F8B\u5316 Graph \u65F6\u5019\u914D\u7F6E enabledStack: true !");return}var a=n?(0,Ir.clone)(n):{before:{},after:(0,Ir.clone)(this.save())};i==="redo"?this.redoStack.push({action:t,data:a}):this.undoStack.push({action:t,data:a}),this.emit("stackchange",{undoStack:this.undoStack,redoStack:this.redoStack})},e.prototype.getAdjMatrix=function(t,n){t===void 0&&(t=!0),n===void 0&&(n=this.get("directed"));var i=this.get("adjMatrix");return(!i||!t)&&(i=cf(this.save(),n),this.set("adjMatrix",i)),i},e.prototype.getShortestPathMatrix=function(t,n){t===void 0&&(t=!0),n===void 0&&(n=this.get("directed"));var i=this.get("adjMatrix"),a=this.get("shortestPathMatrix");return(!i||!t)&&(i=cf(this.save(),n),this.set("adjMatrix",i)),(!a||!t)&&(a=og(this.save(),n),this.set("shortestPathMatrix",a)),a},e.prototype.on=function(t,n,i){return r.prototype.on.call(this,t,n,i)},e.prototype.destroy=function(){var t,n,i,a,o;this.clear(),this.clearStack(),(t=this.get("itemController"))===null||t===void 0||t.destroy(),(n=this.get("modeController"))===null||n===void 0||n.destroy(),(i=this.get("viewController"))===null||i===void 0||i.destroy(),(a=this.get("stateController"))===null||a===void 0||a.destroy(),(o=this.get("canvas"))===null||o===void 0||o.destroy(),this.cfg=null,this.destroyed=!0,this.redoStack=null,this.undoStack=null},e.prototype.createHull=function(t){if(!t.members||t.members.length<1){console.warn("Create hull failed! The members is empty.");return}var n=this.get("hullGroup"),i=this.get("hullMap");if(i||(i={},this.set("hullMap",i)),(!n||n.get("destroyed"))&&(n=this.get("group").addGroup({id:"hullGroup"}),n.toBack(),this.set("hullGroup",n)),i[t.id])return console.warn("Existed hull id."),i[t.id];var a=n.addGroup({id:"".concat(t.id,"-container")}),o=new mk(this,E(E({},t),{group:a})),s=o.id;return i[s]=o,o},e.prototype.getHulls=function(){return this.get("hullMap")},e.prototype.getHullById=function(t){return this.get("hullMap")[t]},e.prototype.removeHull=function(t){var n,i;(0,Ir.isString)(t)?i=this.getHullById(t):i=t,(n=this.get("hullMap"))===null||n===void 0||delete n[i.id],i.destroy()},e.prototype.removeHulls=function(){var t=this.getHulls();!t||!Object.keys(t).length||(Object.keys(t).forEach(function(n){var i=t[n];i.destroy()}),this.set("hullMap",{}))},e}(jv),gk=dJt;var hg=U(q());var na=U(q());function WV(r){return WV=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},WV(r)}var I_=gr.transform,lht="-shape",VV="-label",yk=["startArrow","endArrow"],uht={lineWidth:1,stroke:void 0,fill:void 0,lineAppendWidth:1,opacity:void 0,strokeOpacity:void 0,fillOpacity:void 0,x:0,y:0,r:10,width:20,height:20,shadowColor:void 0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0},pJt={lineWidth:1,stroke:"#000",lineDash:void 0,startArrow:!1,endArrow:!1,opacity:void 0,strokeOpacity:void 0,fillOpacity:void 0,shadowColor:void 0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0},xk={edge:pJt,node:uht,combo:uht},bk="-label-bg",L_={options:{labelCfg:{style:{fontFamily:qe.windowFontFamily}},descriptionCfg:{style:{fontFamily:qe.windowFontFamily}}},itemType:"",type:"",getCustomConfig:function(e){return{}},getOptions:function(e,t){return t==="move"||(t==null?void 0:t.includes("bbox"))?{}:(0,na.deepMix)({},this.options,this.getCustomConfig(e)||{},e)},draw:function(e,t){t.shapeMap={},this.mergeStyle=this.getOptions(e);var n=this.drawShape(e,t);if(n.set("className",this.itemType+lht),t.shapeMap[this.itemType+lht]=n,e.label){var i=this.drawLabel(e,t);i.set("className",this.itemType+VV),t.shapeMap[this.itemType+VV]=i}return n},afterDraw:function(e,t,n){},drawShape:function(e,t){return null},drawLabel:function(e,t){var n=(this.mergeStyle||this.getOptions(e)||{}).labelCfg,i=n||{},a=this.getLabelStyle(e,i,t),o=a.rotate;delete a.rotate;var s=t.addShape("text",{attrs:a,draggable:!0,className:"text-shape",name:"text-shape",labelRelated:!0});if(t.shapeMap["text-shape"]=s,!isNaN(o)&&o!==""){var l=s.getBBox(),u=[1,0,0,0,1,0,0,0,1];if(a.rotateCenter)switch(a.rotateCenter){case"center":u=I_(u,[["t",-l.width/2,-l.height/2],["r",o],["t",l.width/2,l.height/2]]);break;case"lefttop":u=I_(u,[["t",-a.x,-a.y],["r",o],["t",a.x,a.y]]);break;case"leftcenter":u=I_(u,[["t",-a.x,-a.y-l.height/2],["r",o],["t",a.x,a.y+l.height/2]]);break;default:u=I_(u,[["t",-l.width/2,-l.height/2],["r",o],["t",l.width/2,l.height/2]]);break}else u=I_(u,[["t",-a.x,-a.y-l.height/2],["r",o],["t",a.x,a.y+l.height/2]]);s.setMatrix(u)}if(a.background){var f=this.drawLabelBg(e,t,s),c=this.itemType+bk;f.set("classname",c),t.shapeMap[c]=f,s.toFront()}return s},drawLabelBg:function(e,t,n){var i=this.options.labelCfg,a=(0,na.mix)({},i,e.labelCfg),o=this.getLabelBgStyleByPosition(n,a),s=t.addShape("rect",{name:"text-bg-shape",attrs:o,labelRelated:!0});return t.shapeMap["text-bg-shape"]=s,s},getLabelStyleByPosition:function(e,t,n){return{text:e.label}},getLabelBgStyleByPosition:function(e,t){return{}},getLabelStyle:function(e,t,n){var i=this.getLabelStyleByPosition(e,t,n),a="".concat(this.itemType,"Label"),o=qe[a]?qe[a].style:null;return E(E(E({},o),i),t.style)},getShapeStyle:function(e){return e.style},update:function(e,t,n){this.updateShapeStyle(e,t,n),this.updateLabel(e,t,n)},updateShapeStyle:function(e,t,n){var i,a=t.getContainer(),o=t.getKeyShape(),s=(0,na.mix)({},o.attr(),e.style),l=function(c){var h,d=s[c];if((0,na.isPlainObject)(d)){var p=((i=a.shapeMap)===null||i===void 0?void 0:i[c])||a.find(function(v){return v.get("name")===c});p==null||p.attr(d)}else o.attr((h={},h[c]=d,h))};for(var u in s)l(u)},updateLabel:function(e,t,n){var i,a;if(e.label||e.label===""){var o=t.getContainer(),s=(this.mergeStyle||this.getOptions({},n)||{}).labelCfg,l=s===void 0?{}:s,u=this.itemType+VV,f=o.shapeMap[u]||o.find(function(S){return S.get("className")===u}),c=this.itemType+bk,h=o.shapeMap[c]||o.find(function(S){return S.get("className")===c});if(f){(!n||n==="bbox|label"||this.itemType==="edge"&&n!=="style")&&(l=(0,na.deepMix)(l,e.labelCfg));var p=this.getLabelStyleByPosition(e,l,o),v=(i=e.labelCfg)===null||i===void 0?void 0:i.style,m=E(E({},p),v),g=m.rotate;if(delete m.rotate,!isNaN(g)&&g!==""){var x=[1,0,0,0,1,0,0,0,1];x=I_(x,[["t",-m.x,-m.y],["r",g],["t",m.x,m.y]]),m.matrix=x,f.attr(m)}else((a=f.getMatrix())===null||a===void 0?void 0:a[4])!==1&&f.resetMatrix(),f.attr(m);if(!h)m.background&&(h=this.drawLabelBg(e,o,f),h.set("classname",c),o.shapeMap[c]=h,f.toFront());else if(m.background){var b=this.getLabelBgStyleByPosition(f,l);h.attr(b)}else o.removeChild(h)}else{var d=this.drawLabel(e,o);d.set("className",u),o.shapeMap[u]=d}}},afterUpdate:function(e,t){},setState:function(e,t,n){var i,a,o,s=n.get("keyShape");if(!(!s||s.destroyed)){var l=n.getType(),u=(0,na.isBoolean)(t)?e:"".concat(e,":").concat(t),f=this.getStateStyle(u,n),c=n.getStateStyle(u);if(!(!c&&!f)){var h=(0,na.mix)({},c||f),d=n.getContainer(),p={x:1,y:1,cx:1,cy:1,matrix:1};if(l==="combo"&&(p.r=1,p.width=1,p.height=1),t){var v=function(D){var N,z=h[D];if((0,na.isPlainObject)(z)&&!yk.includes(D)){var j=((o=d.shapeMap)===null||o===void 0?void 0:o[D])||d.find(function(W){return W.get("name")===D});j==null||j.attr(z)}else s.attr((N={},N[D]=z,N))};for(var m in h)v(m)}else{var g=UA(n.getCurrentStatesStyle()),x=n.getModel(),b=(0,na.mix)({},x.style,UA(n.getOriginStyle())),S=s.get("name"),C=s.attr(),w={};Object.keys(C).forEach(function(G){if(G!=="img"){var D=C[G];D&&WV(D)==="object"?w[G]=(0,na.clone)(D):w[G]=D}});var A={},I=function(D){var N=h[D];if((0,na.isPlainObject)(N)&&!yk.includes(D)){var z=d.shapeMap[D]||d.find(function(J){return J.get("name")===D});if(z){var j=UA(z.attr());(0,na.each)(N,function(J,et){if(D===S&&w[et]&&!p[et]){delete w[et];var lt=b[D][et]||xk[l][et];s.attr(et,lt)}else if(j[et]||j[et]===0){delete j[et];var $=b[D][et]||xk[l][et];z.attr(et,$)}}),A[D]=j}}else if(w[D]&&!p[D]){delete w[D];var W=b[D]||(b[S]?b[S][D]:void 0)||xk[l][D];s.attr(D,W)}};for(var P in h)I(P);S?A[S]=w:(0,na.mix)(A,w);for(var m in g)if(!p[m]){var L=g[m];(!(0,na.isPlainObject)(L)||yk.includes(m))&&(S?((0,na.mix)(b[S],(a={},a[m]=L,a)),delete b[m]):(0,na.mix)(b,(i={},i[m]=L,i)),delete g[m])}var M={};(0,na.deepMix)(M,b,A,g);var O=!1,F=function(D){var N,z,j=M[D];if((0,na.isPlainObject)(j)&&!yk.includes(D)){var W=d.shapeMap[D]||d.find(function(et){return et.get("name")===D});W&&((W.get("type")==="text"||W.get("labelRelated"))&&(delete j.x,delete j.y,delete j.matrix),D===S&&(l==="combo"&&(delete j.r,delete j.width,delete j.height),O=!0),W.attr(j))}else if(!O){var J=j||xk[l][D];l==="combo"?S||s.attr((N={},N[D]=J,N)):s.attr((z={},z[D]=J,z))}};for(var k in M)F(k)}}}},getStateStyle:function(e,t){var n=t.getModel(),i=t.getType(),a=this.getOptions(n),o=a.stateStyles,s=a.style,l=s===void 0?{}:s,u=n.stateStyles?n.stateStyles[e]:o&&o[e];return i==="combo"?(0,na.clone)(u):(0,na.mix)({},l,u)},getControlPoints:function(e){return e.controlPoints},getAnchorPoints:function(e){var t,n,i=(e==null?void 0:e.anchorPoints)||((t=this.getCustomConfig(e))===null||t===void 0?void 0:t.anchorPoints)||((n=this.options)===null||n===void 0?void 0:n.anchorPoints);return i}};var vJt={itemType:"node",shapeType:"single-node",labelPosition:"center",offset:qe.nodeLabel.offset,getSize:function(e){var t,n=((t=this.mergeStyle)===null||t===void 0?void 0:t.size)||e.size||this.getOptions({}).size||qe.defaultNode.size;return(0,hg.isArray)(n)&&n.length===1&&(n=[n[0],n[0]]),(0,hg.isArray)(n)||(n=[n,n]),n},getLabelStyleByPosition:function(e,t){var n=t.position||this.labelPosition;if(n==="center")return{x:0,y:0,text:e.label};var i=t.offset;(0,hg.isNil)(i)&&(i=this.offset);var a=this.getSize(e),o;switch(n){case"top":o={x:0,y:-a[1]/2-i,textBaseline:"bottom"};break;case"bottom":o={x:0,y:a[1]/2+i,textBaseline:"top"};break;case"left":o={x:-a[0]/2-i,y:0,textAlign:"right"};break;default:o={x:a[0]/2+i,y:0,textAlign:"left"};break}return o.text=e.label,o},getLabelBgStyleByPosition:function(e,t){var n;if(!e)return{};var i=(n=t.style)===null||n===void 0?void 0:n.background;if(!i)return{};var a=e.getBBox(),o=jA(i.padding),s=a.width+o[1]+o[3],l=a.height+o[0]+o[2];return E(E({x:a.minX-o[3],y:a.minY-o[0]},i),{width:s,height:l})},drawShape:function(e,t){var n=this.shapeType,i=this.getShapeStyle(e),a=t.addShape(n,{attrs:i,draggable:!0,name:"node-shape"});return t.shapeMap["node-shape"]=a,a},updateLinkPoints:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).linkPoints,i=t.shapeMap["link-point-left"]||t.find(function(M){return M.get("className")==="link-point-left"}),a=t.shapeMap["link-point-right"]||t.find(function(M){return M.get("className")==="link-point-right"}),o=t.shapeMap["link-point-top"]||t.find(function(M){return M.get("className")==="link-point-top"}),s=t.shapeMap["link-point-bottom"]||t.find(function(M){return M.get("className")==="link-point-bottom"}),l;i&&(l=i.attr()),a&&!l&&(l=a.attr()),o&&!l&&(l=o.attr()),s&&!l&&(l=s.attr()),l||(l=n);var u=(0,hg.mix)({},l,e.linkPoints),f=u.fill,c=u.stroke,h=u.lineWidth,d=u.size/2;d||(d=u.r);var p=e.linkPoints?e.linkPoints:{left:void 0,right:void 0,top:void 0,bottom:void 0},v=p.left,m=p.right,g=p.top,x=p.bottom,b=this.getSize(e),S=b[0],C=b[1],w={r:d,fill:f,stroke:c,lineWidth:h};if(i)!v&&v!==void 0?(i.remove(),delete t.shapeMap["link-point-left"]):i.attr(E(E({},w),{x:-S/2,y:0}));else if(v){var A="link-point-left";t.shapeMap[A]=t.addShape("circle",{attrs:E(E({},w),{x:-S/2,y:0}),className:A,name:A,isAnchorPoint:!0})}if(a)!m&&m!==void 0&&(a.remove(),delete t.shapeMap["link-point-right"]),a.attr(E(E({},w),{x:S/2,y:0}));else if(m){var I="link-point-right";t.shapeMap[I]=t.addShape("circle",{attrs:E(E({},w),{x:S/2,y:0}),className:I,name:I,isAnchorPoint:!0})}if(o)!g&&g!==void 0&&(o.remove(),delete t.shapeMap["link-point-top"]),o.attr(E(E({},w),{x:0,y:-C/2}));else if(g){var P="link-point-top";t.shapeMap[P]=t.addShape("circle",{attrs:E(E({},w),{x:0,y:-C/2}),className:P,name:P,isAnchorPoint:!0})}if(s)!x&&x!==void 0?(s.remove(),delete t.shapeMap["link-point-bottom"]):s.attr(E(E({},w),{x:0,y:C/2}));else if(x){var L="link-point-bottom";t.shapeMap[L]=t.addShape("circle",{attrs:E(E({},w),{x:0,y:C/2}),className:L,name:L,isAnchorPoint:!0})}},updateShape:function(e,t,n,i,a){var o=t.get("keyShape");o.attr(E({},n)),this.updateLabel(e,t,a),i&&this.updateIcon(e,t)},updateIcon:function(e,t){var n=this,i=t.getContainer(),a=(this.mergeStyle||this.getOptions(e)).icon,o=e.icon?e.icon:{show:void 0,text:void 0},s=o.show,l=o.text,u=i.shapeMap["".concat(this.type,"-icon")]||i.find(function(g){return g.get("name")==="".concat(n.type,"-icon")});if(u)if(s||s===void 0){var f=(0,hg.mix)({},u.attr(),a),c=f.width,h=c===void 0?20:c,d=f.height,p=d===void 0?20:d;(f.fontFamily==="iconfont"||f.hasOwnProperty("text"))&&(h=0,p=0),u.attr(E(E({},f),{x:-h/2,y:-p/2}))}else u.remove();else if(s){var v="".concat(this.type,"-icon");if(l)i.shapeMap[v]=i.addShape("text",{attrs:E({x:0,y:0,fontSize:12,fill:"#000",stroke:"#000",textBaseline:"middle",textAlign:"center"},a),className:v,name:v});else{var h=a.width,p=a.height;i.shapeMap[v]=i.addShape("image",{attrs:E(E({},a),{x:-h/2,y:-p/2}),className:v,name:v})}var m=i.shapeMap["node-label"]||i.find(function(g){return g.get("name")==="node-label"});m&&m.toFront()}}},mJt=E(E({},L_),vJt);zi.registerNode("single-node",mJt);var fa=U(q());var _k="edge-shape";function gJt(r){var e=r;return r==="start"?e="end":r==="end"&&(e="start"),e}var yJt={itemType:"edge",labelPosition:"center",refX:0,refY:0,labelAutoRotate:!1,options:{size:qe.defaultEdge.size,style:{x:0,y:0,stroke:qe.defaultEdge.style.stroke,lineAppendWidth:qe.defaultEdge.style.lineAppendWidth},labelCfg:{style:{fill:qe.edgeLabel.style.fill,fontSize:qe.edgeLabel.style.fontSize,fontFamily:qe.windowFontFamily}},stateStyles:E({},qe.edgeStateStyles)},getPath:function(e){var t=[];return(0,fa.each)(e,function(n,i){i===0?t.push(["M",n.x,n.y]):t.push(["L",n.x,n.y])}),t},getShapeStyle:function(e){var t=this.options.style,n={stroke:e.color},i=(0,fa.mix)({},t,n,e.style),a=e.size||qe.defaultEdge.size;e=this.getPathPoints(e);var o=e.startPoint,s=e.endPoint,l=this.getControlPoints(e),u=[o];l&&(u=u.concat(l)),u.push(s);var f=this.getPath(u),c=(0,fa.mix)({},qe.defaultEdge.style,{stroke:qe.defaultEdge.color,lineWidth:a,path:f},i);return c},updateShapeStyle:function(e,t,n){var i,a=t.getContainer(),o=((i=t.getKeyShape)===null||i===void 0?void 0:i.call(t))||a.shapeMap["edge-shape"],s=e.size;e=this.getPathPoints(e);var l=e.startPoint,u=e.endPoint,f=this.getControlPoints(e),c=[l];f&&(c=c.concat(f)),c.push(u);var h=o.attr(),d=e.style||{};d.stroke===void 0&&(d.stroke=e.color);var p=e.sourceNode,v=e.targetNode,m={radius:d.radius};f||(m={source:p,target:v,offset:d.offset,radius:d.radius});var g=this.getPath(c,m),x={};n==="move"?x={path:g}:(h.endArrow&&d.endArrow===!1&&(e.style.endArrow={path:""}),h.startArrow&&d.startArrow===!1&&(e.style.startArrow={path:""}),x=E({},e.style),x.lineWidth===void 0&&(x.lineWdith=((0,fa.isNumber)(s)?s:s==null?void 0:s[0])||h.lineWidth),x.path===void 0&&(x.path=g),x.stroke===void 0&&(x.stroke=h.stroke||e.color)),o&&o.attr(x)},getLabelStyleByPosition:function(e,t,n){var i=t.position||this.labelPosition,a={},o=n==null?void 0:n.shapeMap[_k],s;i==="start"?s=0:i==="end"?s=1:s=.5;var l=t.refX||this.refX,u=t.refY||this.refY;if(e.startPoint.x===e.endPoint.x&&e.startPoint.y===e.endPoint.y)return a.x=e.startPoint.x+l,a.y=e.startPoint.y+u,a.text=e.label,a;var f;(0,fa.isNil)(t.autoRotate)?f=this.labelAutoRotate:f=t.autoRotate;var c=_V(o,s,l,u,f);return a.x=c.x,a.y=c.y,a.rotate=c.rotate,a.textAlign=this._getTextAlign(i,c.angle),a.text=e.label,a},getLabelBgStyleByPosition:function(e,t){if(!e)return{};var n=e.getBBox(),i=t.style&&t.style.background;if(!i)return{};var a=i.padding,o=n.width+a[1]+a[3],s=n.height+a[0]+a[2],l=E(E({},i),{width:o,height:s,x:n.minX-a[3],y:n.minY-a[0],matrix:[1,0,0,0,1,0,0,0,1]}),u;return(0,fa.isNil)(t.autoRotate)?u=this.labelAutoRotate:u=t.autoRotate,u&&(l.matrix=e.attr("matrix")||[1,0,0,0,1,0,0,0,1]),l},_getTextAlign:function(e,t){var n="center";return t?(t=t%(Math.PI*2),e!=="center"&&(t>=0&&t<=Math.PI/2||t>=3/2*Math.PI&&t<2*Math.PI?n=e:n=gJt(e)),n):e},getControlPoints:function(e){return e.controlPoints},getPathPoints:function(e){return e},drawShape:function(e,t){var n=this.getShapeStyle(e),i=t.addShape("path",{className:_k,name:_k,attrs:n});return t.shapeMap[_k]=i,i},drawLabel:function(e,t){var n=this.options.labelCfg,i=(0,fa.deepMix)({},n,e.labelCfg),a=this.getLabelStyle(e,i,t),o=a.rotate;delete a.rotate;var s=t.addShape("text",{attrs:a,name:"text-shape",labelRelated:!0});if(t.shapeMap["text-shape"]=s,!isNaN(o)&&o!==""&&s.rotateAtStart(o),a.background){var l=this.drawLabelBg(e,t,s,a,o),u=this.itemType+bk;l.set("classname",u),t.shapeMap[u]=l,s.toFront()}return s},drawLabelBg:function(e,t,n,i,a){var o=this.options.labelCfg,s=(0,fa.deepMix)({},o,e.labelCfg),l=this.getLabelBgStyleByPosition(n,s),u=t.addShape("rect",{name:"text-bg-shape",attrs:l,labelRelated:!0});return t.shapeMap["text-bg-shape"]=u,u}},xJt=E(E({},L_),yJt);zi.registerEdge("single-edge",xJt);zi.registerEdge("line",{getControlPoints:function(){}},"single-edge");zi.registerEdge("spline",{getPath:function(e){var t=GV(e);return t}},"single-edge");zi.registerEdge("arc",{curveOffset:20,clockwise:1,getControlPoints:function(e){var t=e.startPoint,n=e.endPoint,i={x:(t.x+n.x)/2,y:(t.y+n.y)/2},a,o;if(e.controlPoints!==void 0){if(o=e.controlPoints[0],a=QP(t,o,n),t.x<=n.x&&t.y>n.y?this.clockwise=a.x>o.x?0:1:t.x<=n.x&&t.yo.x?1:0:t.x>n.x&&t.y<=n.y?this.clockwise=a.ySJt});var SJt=["#5F95FF","#61DDAA","#65789B","#F6BD16","#7262FD","#78D3F8","#9661BC","#F6903D","#008685","#F08BB4"];var CJt=gr.transform,wJt=E(E(E(E(E(E({},MV),CV),UV),mV),YV),{transform:CJt,mat3:Ai}),Pa=wJt;var O_=U(q());var EJt=function(){function r(e){this.graph=e,this.layoutCfg=e.get("layout")||{},this.layoutType=this.getLayoutType(),this.layoutMethods=[],this.initLayout()}return r.prototype.initLayout=function(){},r.prototype.getLayoutType=function(){return this.getLayoutCfgType(this.layoutCfg)},r.prototype.getLayoutCfgType=function(e){var t=e.type;if(t)return t;var n=e.pipes;return Array.isArray(n)?n.map(function(i){return(i==null?void 0:i.type)||""}):null},r.prototype.isLayoutTypeSame=function(e){var t=this.getLayoutCfgType(e);return Array.isArray(this.layoutType)?this.layoutType.every(function(n,i){return n===t[i]}):(e==null?void 0:e.type)===this.layoutType},r.prototype.refreshLayout=function(){var e=this.graph;!e||(e.get("animate")?e.positionsAnimate():e.refreshPositions())},r.prototype.changeLayout=function(e){this.layoutCfg=e,this.destoryLayoutMethods(),this.layout()},r.prototype.changeData=function(){this.destoryLayoutMethods(),this.layout()},r.prototype.destoryLayoutMethods=function(){var e=this.layoutMethods;e==null||e.forEach(function(t){t.destroy()}),this.layoutMethods=[]},r.prototype.destroyLayout=function(){var e=this.graph;this.destoryLayoutMethods(),e.set("layout",void 0),this.layoutCfg=void 0,this.layoutType=void 0,this.layoutMethods=void 0},r.prototype.setDataFromGraph=function(){for(var e=[],t=[],n=[],i=[],a=[],o=[],s=[],l=this.graph.getNodes(),u=this.graph.getEdges(),f=this.graph.getCombos(),c=l.length,h=0;hEre,getColorsWithSubjectColor:()=>oR,mixColor:()=>Mo});var F_=U(Wdt());var sM=U(Vdt()),aR=2,Hdt=.16,xre=.05,bre=.05,_re=.15,Ydt=5,Xdt=4,Sre=[{index:7,opacity:.15},{index:6,opacity:.25},{index:5,opacity:.3},{index:5,opacity:.45},{index:5,opacity:.65},{index:5,opacity:.85},{index:4,opacity:.9},{index:3,opacity:.95},{index:2,opacity:.97},{index:1,opacity:.98}];function qdt(r,e,t){var n;return Math.round(r.h)>=60&&Math.round(r.h)<=240?n=t?Math.round(r.h)-aR*e:Math.round(r.h)+aR*e:n=t?Math.round(r.h)+aR*e:Math.round(r.h)-aR*e,n<0?n+=360:n>=360&&(n-=360),n}function Kdt(r,e,t){if(r.h===0&&r.s===0)return r.s;var n;return t?n=r.s-Hdt*e:e===Xdt?n=r.s+Hdt:n=r.s+xre*e,n>1&&(n=1),t&&e===Ydt&&n>.1&&(n=.1),n<.06&&(n=.06),Number(n.toFixed(2))}function Zdt(r,e,t){var n;return t?n=r.v+bre*e:n=r.v-_re*e,n>1&&(n=1),Number(n.toFixed(2))}function lM(r){for(var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=[],n=(0,sM.default)(r),i=Ydt;i>0;i-=1){var a=n.toHsv(),o=(0,sM.default)({h:qdt(a,i,!0),s:Kdt(a,i,!0),v:Zdt(a,i,!0)}).toHexString();t.push(o)}t.push(n.toHexString());for(var s=1;s<=Xdt;s+=1){var l=n.toHsv(),u=(0,sM.default)({h:qdt(l,s),s:Kdt(l,s),v:Zdt(l,s)}).toHexString();t.push(u)}return e.theme==="dark"?Sre.map(function(f){var c=f.index,h=f.opacity,d=sM.default.mix(e.backgroundColor||"#141414",t[c],h*100).toHexString();return d}):t}var m8={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1890FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},Ps={},g8={};Object.keys(m8).forEach(function(r){Ps[r]=lM(m8[r]),Ps[r].primary=Ps[r][5],g8[r]=lM(m8[r],{theme:"dark",backgroundColor:"#141414"}),g8[r].primary=g8[r][5]});var nSr=Ps.red,iSr=Ps.volcano,aSr=Ps.gold,oSr=Ps.orange,sSr=Ps.yellow,lSr=Ps.lime,uSr=Ps.green,fSr=Ps.cyan,cSr=Ps.blue,hSr=Ps.geekblue,dSr=Ps.purple,pSr=Ps.magenta,vSr=Ps.grey;var Mo=function(e,t,n){var i=(0,F_.default)(e),a=(0,F_.default)(t);return(0,F_.default)([(1-n)*i.red()+n*a.red(),(1-n)*i.green()+n*a.green(),(1-n)*i.blue()+n*a.blue()]).rgb()},Cre=function(e,t,n){t===void 0&&(t="#fff"),n===void 0&&(n="rgb(150, 150, 150)");var i=Mo(t,e,.05).rgb().toString(),a=Mo(t,e,.1).rgb().toString(),o=Mo(t,e,.2).rgb().toString(),s=Mo(t,e,.4).rgb().toString(),l=Mo(t,n,.02).rgb().toString(),u=Mo(t,n,.05).rgb().toString(),f=Mo(t,n,.1).rgb().toString(),c=Mo(t,n,.2).rgb().toString(),h=Mo(t,n,.3).rgb().toString(),d=lM(e,{theme:"default",backgroundColor:t}),p=(0,F_.default)(e).hex().toLowerCase(),v=d.indexOf(p),m=e;return v!==-1&&(m=d[v+1]),{mainStroke:e,mainFill:a,activeStroke:e,activeFill:i,inactiveStroke:s,inactiveFill:i,selectedStroke:e,selectedFill:t,highlightStroke:m,highlightFill:o,disableStroke:h,disableFill:u,edgeMainStroke:h,edgeActiveStroke:e,edgeInactiveStroke:c,edgeSelectedStroke:e,edgeHighlightStroke:e,edgeDisableStroke:f,comboMainStroke:h,comboMainFill:l,comboActiveStroke:e,comboActiveFill:i,comboInactiveStroke:h,comboInactiveFill:l,comboSelectedStroke:e,comboSelectedFill:l,comboHighlightStroke:m,comboHighlightFill:l,comboDisableStroke:c,comboDisableFill:u}},wre=function(e,t,n){t===void 0&&(t="#fff"),n===void 0&&(n="#777");var i=Mo(t,e,.2).rgb().toString(),a=Mo(t,e,.3).rgb().toString(),o=Mo(t,e,.6).rgb().toString(),s=Mo(t,e,.8).rgb().toString(),l=Mo(t,n,.2).rgb().toString(),u=Mo(t,n,.25).rgb().toString(),f=Mo(t,n,.3).rgb().toString(),c=Mo(t,n,.4).rgb().toString(),h=Mo(t,n,.5).rgb().toString(),d=lM(e,{theme:"dark",backgroundColor:t}),p=(0,F_.default)(e).hex().toLowerCase(),v=d.indexOf(p),m=e;return v!==-1&&(m=d[v+1]),{mainStroke:s,mainFill:i,activeStroke:e,activeFill:a,inactiveStroke:s,inactiveFill:i,selectedStroke:e,selectedFill:i,highlightStroke:e,highlightFill:o,disableStroke:h,disableFill:u,edgeMainStroke:n,edgeActiveStroke:e,edgeInactiveStroke:n,edgeSelectedStroke:e,edgeHighlightStroke:e,edgeDisableStroke:f,comboMainStroke:c,comboMainFill:u,comboActiveStroke:e,comboActiveFill:l,comboInactiveStroke:c,comboInactiveFill:u,comboSelectedStroke:e,comboSelectedFill:l,comboHighlightStroke:m,comboHighlightFill:u,comboDisableStroke:c,comboDisableFill:l}},oR=function(e,t,n,i){return t===void 0&&(t="#fff"),n===void 0&&(n="default"),i===void 0&&(i="rgb(150, 150, 150)"),n==="default"?Cre(e,t,"rgb(150, 150, 150)"):wre(e,t,"#777")},Ere=function(e,t,n,i){t===void 0&&(t="#fff"),n===void 0&&(n="default"),i===void 0&&(i="rgb(150, 150, 150)");var a=[];return e.forEach(function(o){a.push(oR(o,t,n,i))}),a};var Are="rgb(95, 149, 255)",Mre="rgb(255, 255, 255)",$dt="rgb(0, 0, 0)",Rn=oR(Are,Mre),bc={version:"0.5.3",rootContainerClassName:"root-container",nodeContainerClassName:"node-container",edgeContainerClassName:"edge-container",comboContainerClassName:"combo-container",delegateContainerClassName:"delegate-container",defaultLoopPosition:"top",nodeLabel:{style:{fill:"#000",fontSize:12,textAlign:"center",textBaseline:"middle"},offset:4},defaultNode:{type:"circle",style:{lineWidth:1,stroke:Rn.mainStroke,fill:Rn.mainFill},size:20,color:Rn.mainStroke,linkPoints:{size:8,lineWidth:1,fill:Rn.activeFill,stroke:Rn.activeStroke}},nodeStateStyles:{active:{fill:Rn.activeFill,stroke:Rn.activeStroke,lineWidth:2,shadowColor:Rn.mainStroke,shadowBlur:10},selected:{fill:Rn.selectedFill,stroke:Rn.selectedStroke,lineWidth:4,shadowColor:Rn.selectedStroke,shadowBlur:10,"text-shape":{fontWeight:500}},highlight:{fill:Rn.highlightFill,stroke:Rn.highlightStroke,lineWidth:2,"text-shape":{fontWeight:500}},inactive:{fill:Rn.inactiveFill,stroke:Rn.inactiveStroke,lineWidth:1},disable:{fill:Rn.disableFill,stroke:Rn.disableStroke,lineWidth:1}},edgeLabel:{style:{fill:$dt,textAlign:"center",textBaseline:"middle",fontSize:12}},defaultEdge:{type:"line",size:1,style:{stroke:Rn.edgeMainStroke,lineAppendWidth:2},color:Rn.edgeMainStroke},edgeStateStyles:{active:{stroke:Rn.edgeActiveStroke,lineWidth:1},selected:{stroke:Rn.edgeSelectedStroke,lineWidth:2,shadowColor:Rn.edgeSelectedStroke,shadowBlur:10,"text-shape":{fontWeight:500}},highlight:{stroke:Rn.edgeHighlightStroke,lineWidth:2,"text-shape":{fontWeight:500}},inactive:{stroke:Rn.edgeInactiveStroke,lineWidth:1},disable:{stroke:Rn.edgeDisableStroke,lineWidth:1}},comboLabel:{style:{fill:$dt,textBaseline:"middle",fontSize:12},refY:10,refX:10},defaultCombo:{type:"circle",style:{fill:Rn.comboMainFill,lineWidth:1,stroke:Rn.comboMainStroke,r:5,width:20,height:10},size:[20,5],color:Rn.comboMainStroke,padding:[25,20,15,20]},comboStateStyles:{active:{stroke:Rn.comboActiveStroke,lineWidth:1,fill:Rn.comboActiveFill},selected:{stroke:Rn.comboSelectedStroke,lineWidth:2,fill:Rn.comboSelectedFill,shadowColor:Rn.comboSelectedStroke,shadowBlur:10,"text-shape":{fontWeight:500}},highlight:{stroke:Rn.comboHighlightStroke,lineWidth:2,fill:Rn.comboHighlightFill,"text-shape":{fontWeight:500}},inactive:{stroke:Rn.comboInactiveStroke,fill:Rn.comboInactiveFill,lineWidth:1},disable:{stroke:Rn.comboDisableStroke,fill:Rn.comboDisableFill,lineWidth:1}},delegateStyle:{fill:"#F3F9FF",fillOpacity:.5,stroke:"#1890FF",strokeOpacity:.9,lineDash:[5,5]},textWaterMarkerConfig:{width:150,height:100,compatible:!1,text:{x:0,y:60,lineHeight:20,rotate:20,fontSize:14,fontFamily:"Microsoft YaHei",fill:"rgba(0, 0, 0, 0.1)",baseline:"Middle"}},imageWaterMarkerConfig:{width:150,height:130,compatible:!1,image:{x:0,y:0,width:30,height:20,rotate:0}},waterMarkerImage:"https://gw.alipayobjects.com/os/s/prod/antv/assets/image/logo-with-text-73b8a.svg"};var vg=U(q());var Tre=Pa.cloneEvent,Ire=Pa.isViewportChanged,Lre=function(r){H(e,r);function e(t){var n=r.call(this,t)||this;return n.extendEvents=[],n.dragging=!1,n.preItem=null,n.graph=t,n.destroyed=!1,n.initEvents(),n}return e.prototype.initEvents=function(){var t=this,n=t.graph,i=t.extendEvents,a=i===void 0?[]:i,o=n.get("canvas"),s=o.get("el"),l=(0,vg.wrapBehavior)(this,"onCanvasEvents"),u=(0,vg.wrapBehavior)(this,"onExtendEvents"),f=(0,vg.wrapBehavior)(this,"onWheelEvent");o.off("*").on("*",l),this.canvasHandler=l,a.push(Ws(s,"DOMMouseScroll",f)),a.push(Ws(s,"mousewheel",f)),typeof window!="undefined"&&(a.push(Ws(window,"keydown",u)),a.push(Ws(window,"keyup",u)),a.push(Ws(window,"focus",u)))},e.getItemRoot=function(t){for(;t&&!t.get("item");)t=t.get("parent");return t},e.prototype.onCanvasEvents=function(t){var n=this.graph,i=n.get("canvas"),a=t.target,o=t.type;t.canvasX=t.x,t.canvasY=t.y;var s={x:t.canvasX,y:t.canvasY},l=n.get("group"),u=l.getMatrix();if(u||(u=[1,0,0,0,1,0,0,0,1]),Ire(u)&&(s=n.getPointByClient(t.clientX,t.clientY)),t.x=s.x,t.y=s.y,t.currentTarget=n,a===i){(o==="mousemove"||o==="mouseleave")&&this.handleMouseMove(t,"canvas"),t.target=i,t.item=null,n.emit(o,t),n.emit("canvas:".concat(o),t);return}var f=e.getItemRoot(a);if(!f){n.emit(o,t);return}var c=f.get("item");if(!c.destroyed){var h=c.getType();if(t.target=a,t.item=c,t.canvasX===t.x&&t.canvasY===t.y){var d=n.getCanvasByPoint(t.x,t.y);t.canvasX=d.x,t.canvasY=d.y}n.emit(o,t),t.name&&!t.name.includes(":")?n.emit("".concat(h,":").concat(o),t):n.emit(t.name,t),o==="dragstart"&&(this.dragging=!0),o==="dragend"&&(this.dragging=!1),o==="mousemove"&&this.handleMouseMove(t,h)}},e.prototype.onExtendEvents=function(t){this.graph.emit(t.type,t)},e.prototype.onWheelEvent=function(t){(0,vg.isNil)(t.wheelDelta)&&(t.wheelDelta=-t.detail),this.graph.emit("wheel",t)},e.prototype.handleMouseMove=function(t,n){var i=this,a=i.graph,o=i.preItem,s=a.get("canvas"),l=t.target===s?null:t.item;t=Tre(t),o&&o!==l&&!o.destroyed&&(t.item=o,this.emitCustomEvent(o.getType(),"mouseleave",t),this.dragging&&this.emitCustomEvent(o.getType(),"dragleave",t)),l&&o!==l&&(t.item=l,this.emitCustomEvent(n,"mouseenter",t),this.dragging&&this.emitCustomEvent(n,"dragenter",t)),this.preItem=l},e.prototype.emitCustomEvent=function(t,n,i){i.type=n,this.graph.emit("".concat(t,":").concat(n),i)},e.prototype.destroy=function(){var t=this,n=t.graph,i=t.canvasHandler,a=t.extendEvents,o=n.get("canvas");o.off("*",i),(0,vg.each)(a,function(s){s.remove()}),this.dragging=!1,this.preItem=null,this.extendEvents.length=0,this.canvasHandler=null,this.destroyed=!0},e}(wk),x8=Lre;var li=class{constructor(){this.nodes=[],this.edges=[],this.combos=[],this.positions=[],this.destroyed=!1,this.onLayoutEnd=()=>{}}layout(e){return this.init(e),this.execute(!0)}init(e){this.nodes=e.nodes||[],this.edges=e.edges||[],this.combos=e.combos||[]}execute(e){}executeWithWorker(){}getDefaultCfg(){return{}}updateCfg(e){e&&Object.assign(this,e)}getType(){return"base"}destroy(){this.nodes=null,this.edges=null,this.combos=null,this.positions=null,this.destroyed=!0}};var mg=r=>typeof r=="string",Ore=r=>{let e=Object.create(null);return t=>e[t]||(e[t]=r(t))},Dre=/-(\w)/g,ESr=Ore(r=>r.replace(Dre,(e,t)=>t?t.toUpperCase():""));var ha=Array.isArray;var je=r=>typeof r=="number",uM=r=>Number.isNaN(Number(r));var co=r=>r!==null&&typeof r=="object",N0=r=>{if(r===null)return r;if(r instanceof Date)return new Date(r.getTime());if(r instanceof Array){let e=[];return r.forEach(t=>{e.push(t)}),e.map(t=>N0(t))}if(typeof r=="object"&&r!=={}){let e=Object.assign({},r);return Object.keys(e).forEach(t=>{e[t]=N0(e[t])}),e}return r};var xn=(r,e)=>{let t=r[e];return co(t)?t.cell:t},$h=(r,e,t)=>{let n=[];for(let i=0;i{let a=xn(i,"source"),o=xn(i,"target");a&&(n[e[a]]+=1),o&&(n[e[o]]+=1)}),n},sR=r=>{let e=[],t=r.length;for(let n=0;ne[i][n]+e[n][a]&&(e[i][a]=e[i][n]+e[n][a]);return e},lR=(r,e)=>{let{nodes:t,edges:n}=r,i=[],a={};if(!t)throw new Error("invalid nodes data!");return t&&t.forEach((o,s)=>{a[o.id]=s;let l=[];i.push(l)}),n&&n.forEach(o=>{let s=xn(o,"source"),l=xn(o,"target"),u=a[s],f=a[l];i[u][f]=1,e||(i[f][u]=1)}),i},Qdt=(r,e)=>{let t=[];return r.forEach(n=>{let i=[];n.forEach(a=>{i.push(a*e)}),t.push(i)}),t},Jdt=(r,e)=>{if(r&&r.children){for(let t=r.children.length-1;t>=0;t--)if(!Jdt(r.children[t],e))return}return!!e(r)},fM=(r,e)=>{typeof e=="function"&&Jdt(r,e)};var mf=r=>typeof r=="function";var uR=new Map,fs=(r,e)=>{if(uR.get(r)&&console.warn(`The layout with the name ${r} exists already, it will be overridden`),co(e)){class t extends li{constructor(i){super();let a=this,o={},s=a.getDefaultCfg();Object.assign(o,s,e,i),Object.keys(o).forEach(l=>{let u=o[l];a[l]=u})}}uR.set(r,t)}else uR.set(r,e);return uR.get(r)};var B_=class extends li{constructor(e){super();this.begin=[0,0],this.preventOverlap=!0,this.preventOverlapPadding=10,this.condense=!1,this.sortBy="degree",this.nodeSize=30,this.nodes=[],this.edges=[],this.width=300,this.height=300,this.row=0,this.col=0,this.cellWidth=0,this.cellHeight=0,this.cellUsed={},this.id2manPos={},this.onLayoutEnd=()=>{},this.updateCfg(e)}getDefaultCfg(){return{begin:[0,0],preventOverlap:!0,preventOverlapPadding:10,condense:!1,rows:void 0,cols:void 0,position:void 0,sortBy:"degree",nodeSize:30}}execute(){let e=this,t=e.nodes,n=e.edges,i=t.length,a=e.begin;if(i===0)return e.onLayoutEnd&&e.onLayoutEnd(),{nodes:t,edges:n};if(i===1)return t[0].x=a[0],t[0].y=a[1],e.onLayoutEnd&&e.onLayoutEnd(),{nodes:t,edges:n};let o=[];t.forEach(f=>{o.push(f)});let s={};if(o.forEach((f,c)=>{s[f.id]=c}),(e.sortBy==="degree"||!mg(e.sortBy)||o[0][e.sortBy]===void 0)&&(e.sortBy="degree",uM(t[0].degree))){let f=$h(o.length,s,n);o.forEach((c,h)=>{c.degree=f[h]})}o.sort((f,c)=>c[e.sortBy]-f[e.sortBy]),!e.width&&typeof window!="undefined"&&(e.width=window.innerWidth),!e.height&&typeof window!="undefined"&&(e.height=window.innerHeight);let l=e.rows,u=e.cols!=null?e.cols:e.columns;if(e.cells=i,l!=null&&u!=null?(e.rows=l,e.cols=u):l!=null&&u==null?(e.rows=l,e.cols=Math.ceil(e.cells/e.rows)):l==null&&u!=null?(e.cols=u,e.rows=Math.ceil(e.cells/e.cols)):(e.splits=Math.sqrt(e.cells*e.height/e.width),e.rows=Math.round(e.splits),e.cols=Math.round(e.width/e.height*e.splits)),e.cols*e.rows>e.cells){let f=e.small(),c=e.large();(f-1)*c>=e.cells?e.small(f-1):(c-1)*f>=e.cells&&e.large(c-1)}else for(;e.cols*e.rows=e.cells?e.large(c+1):e.small(f+1)}e.cellWidth=e.width/e.cols,e.cellHeight=e.height/e.rows,e.condense&&(e.cellWidth=0,e.cellHeight=0),e.preventOverlap&&o.forEach(f=>{(!f.x||!f.y)&&(f.x=0,f.y=0);let c,h;ha(f.size)?(c=f.size[0],h=f.size[1]):je(f.size)?(c=f.size,h=f.size):co(f.size)&&(c=f.size.width,h=f.size.height),(c===void 0||h===void 0)&&(ha(e.nodeSize)?(c=e.nodeSize[0],h=e.nodeSize[1]):je(e.nodeSize)?(c=e.nodeSize,h=e.nodeSize):(c=30,h=30));let d=e.preventOverlapPadding,p=c+d,v=h+d;e.cellWidth=Math.max(e.cellWidth,p),e.cellHeight=Math.max(e.cellHeight,v)}),e.cellUsed={},e.row=0,e.col=0,e.id2manPos={};for(let f=0;f=t&&(e.col=0,e.row++)}getPos(e){let t=this,n=t.begin,i=t.cellWidth,a=t.cellHeight,o,s,l=t.id2manPos[e.id];if(l)o=l.col*i+i/2+n[0],s=l.row*a+a/2+n[1];else{for(;t.used(t.row,t.col);)t.moveToNextCell();o=t.col*i+i/2+n[0],s=t.row*a+a/2+n[1],t.use(t.row,t.col),t.moveToNextCell()}e.x=o,e.y=s}getType(){return"grid"}};var G_=class extends li{constructor(e){super();this.center=[0,0],this.width=300,this.height=300,this.nodes=[],this.edges=[],this.onLayoutEnd=()=>{},this.updateCfg(e)}getDefaultCfg(){return{center:[0,0],width:300,height:300}}execute(){let e=this,t=e.nodes,n=.9,i=e.center;return!e.width&&typeof window!="undefined"&&(e.width=window.innerWidth),!e.height&&typeof window!="undefined"&&(e.height=window.innerHeight),t&&t.forEach(a=>{a.x=(Math.random()-.5)*n*e.width+i[0],a.y=(Math.random()-.5)*n*e.height+i[1]}),e.onLayoutEnd&&e.onLayoutEnd(),{nodes:t,edges:this.edges}}getType(){return"random"}};var b8=(r,e)=>{let t;return r?je(r)?t=n=>r:t=r:t=n=>e||1,t},z_=class extends li{constructor(e){super();this.maxIteration=1e3,this.workerEnabled=!1,this.edgeStrength=200,this.nodeStrength=1e3,this.coulombDisScale=.005,this.damping=.9,this.maxSpeed=1e3,this.minMovement=.5,this.interval=.02,this.factor=1,this.linkDistance=1,this.gravity=10,this.preventOverlap=!0,this.tick=()=>{},this.nodes=[],this.edges=[],this.width=300,this.height=300,this.nodeMap={},this.nodeIdxMap={},this.updateCfg(e)}getDefaultCfg(){return{maxIteration:500,gravity:10,enableTick:!0}}execute(){var e,t;let n=this,i=n.nodes;if(n.timeInterval!==void 0&&typeof window!="undefined"&&window.clearInterval(n.timeInterval),!i||i.length===0){(e=n.onLayoutEnd)===null||e===void 0||e.call(n);return}!n.width&&typeof window!="undefined"&&(n.width=window.innerWidth),!n.height&&typeof window!="undefined"&&(n.height=window.innerHeight),n.center||(n.center=[n.width/2,n.height/2]);let a=n.center;if(i.length===1){i[0].x=a[0],i[0].y=a[1],(t=n.onLayoutEnd)===null||t===void 0||t.call(n);return}let o={},s={};i.forEach((c,h)=>{je(c.x)||(c.x=Math.random()*n.width),je(c.y)||(c.y=Math.random()*n.height),o[c.id]=c,s[c.id]=h}),n.nodeMap=o,n.nodeIdxMap=s,n.linkDistance=b8(n.linkDistance,1),n.nodeStrength=b8(n.nodeStrength,1),n.edgeStrength=b8(n.edgeStrength,1);let l=n.nodeSize,u;if(n.preventOverlap){let c=n.nodeSpacing,h;je(c)?h=()=>c:mf(c)?h=c:h=()=>0,l?ha(l)?u=d=>(l[0]>l[1]?l[0]:l[1])+h(d):u=d=>l+h(d):u=d=>d.size?ha(d.size)?(d.size[0]>d.size[1]?d.size[0]:d.size[1])+h(d):co(d.size)?(d.size.width>d.size.height?d.size.width:d.size.height)+h(d):d.size+h(d):10+h(d)}n.nodeSize=u;let f=n.edges;n.degrees=$h(i.length,n.nodeIdxMap,f),n.getMass||(n.getMass=c=>n.degrees[n.nodeIdxMap[c.id]]||1),n.run()}run(){var e;let t=this,{maxIteration:n,nodes:i,workerEnabled:a,minMovement:o}=t;if(!!i)if(a){for(let s=0;s{var l,u;if(!i)return;let f=t.runOneStep(s)||[];t.reachMoveThreshold(i,f,o)&&((l=t.onLayoutEnd)===null||l===void 0||l.call(t),window.clearInterval(t.timeInterval)),s++,s>=n&&((u=t.onLayoutEnd)===null||u===void 0||u.call(t),window.clearInterval(t.timeInterval))},0)}}reachMoveThreshold(e,t,n){let i=0;return e.forEach((a,o)=>{let s=a.x-t[o].x,l=a.y-t[o].y;i+=Math.sqrt(s*s+l*l)}),i/=e.length,i{o[2*c]=0,o[2*c+1]=0,s[2*c]=0,s[2*c+1]=0}),n.calRepulsive(o,i),a&&n.calAttractive(o,a),n.calGravity(o,i);let l=Math.max(.02,n.interval-e*.002);n.updateVelocity(o,s,l,i);let u=[];return i.forEach(f=>{u.push({x:f.x,y:f.y})}),n.updatePosition(s,l,i),(t=n.tick)===null||t===void 0||t.call(n),u}calRepulsive(e,t){let n=this,i=n.getMass,a=n.nodeStrength,o=n.factor,s=n.coulombDisScale,l=n.preventOverlap,u=n.nodeSize;t.forEach((f,c)=>{let h=i?i(f):1;t.forEach((d,p)=>{if(c>=p)return;let v=f.x-d.x,m=f.y-d.y,g=Math.sqrt(v*v+m*m)+.01,x=(g+.1)*s,b=v/g,S=m/g,C=(a(f)+a(d))/2*o/(x*x),w=i?i(d):1;if(e[2*c]+=b*C,e[2*c+1]+=S*C,e[2*p]-=b*C,e[2*p+1]-=S*C,l&&g<(u(f)+u(d))/2){let A=(a(f)+a(d))/2/(g*g);e[2*c]+=b*A/h,e[2*c+1]+=S*A/h,e[2*p]-=b*A/w,e[2*p+1]-=S*A/w}})})}calAttractive(e,t){let n=this,i=n.nodeMap,a=n.nodeIdxMap,o=n.linkDistance,s=n.edgeStrength,l=n.getMass;t.forEach((u,f)=>{let c=xn(u,"source"),h=xn(u,"target"),d=i[c],p=i[h],v=p.x-d.x,m=p.y-d.y,g=Math.sqrt(v*v+m*m)+.01,x=v/g,b=m/g,w=((o(u)||1)-g)*s(u),A=a[c],I=a[h],P=l?l(d):1,L=l?l(p):1;e[2*A]-=x*w/P,e[2*A+1]-=b*w/P,e[2*I]+=x*w/L,e[2*I+1]+=b*w/L})}calGravity(e,t){let n=this,i=n.center,a=n.gravity,o=n.degrees,s=t.length;for(let l=0;l{let u=e[2*l]*o||.01,f=e[2*l+1]*o||.01,c=Math.sqrt(u*u+f*f);if(c>a.maxSpeed){let h=a.maxSpeed/c;u=h*u,f=h*f}t[2*l]=u,t[2*l+1]=f})}updatePosition(e,t,n){n.forEach((i,a)=>{if(je(i.fx)&&je(i.fy)){i.x=i.fx,i.y=i.fy;return}let o=e[2*a]*t,s=e[2*a+1]*t;i.x+=o,i.y+=s})}stop(){this.timeInterval&&typeof window!="undefined"&&window.clearInterval(this.timeInterval)}destroy(){let e=this;e.stop(),e.tick=null,e.nodes=null,e.edges=null,e.destroyed=!0}getType(){return"gForce"}};function cM(r,e){var t,n=1;r==null&&(r=0),e==null&&(e=0);function i(){var a,o=t.length,s,l=0,u=0;for(a=0;a=(c=(s+u)/2))?s=c:u=c,(m=t>=(h=(l+f)/2))?l=h:f=h,i=a,!(a=a[g=m<<1|v]))return i[g]=o,r;if(d=+r._x.call(null,a.data),p=+r._y.call(null,a.data),e===d&&t===p)return o.next=a,i?i[g]=o:r._root=o,r;do i=i?i[g]=new Array(4):r._root=new Array(4),(v=e>=(c=(s+u)/2))?s=c:u=c,(m=t>=(h=(l+f)/2))?l=h:f=h;while((g=m<<1|v)==(x=(p>=h)<<1|d>=c));return i[x]=a,i[g]=o,r}function rpt(r){var e,t,n=r.length,i,a,o=new Array(n),s=new Array(n),l=1/0,u=1/0,f=-1/0,c=-1/0;for(t=0;tf&&(f=i),ac&&(c=a));if(l>f||u>c)return this;for(this.cover(l,u).cover(f,c),t=0;tr||r>=i||n>e||e>=a;)switch(u=(ef||(s=p.y0)>c||(l=p.x1)=g)<<1|r>=m)&&(p=h[h.length-1],h[h.length-1]=h[h.length-1-v],h[h.length-1-v]=p)}else{var x=r-+this._x.call(null,d.data),b=e-+this._y.call(null,d.data),S=x*x+b*b;if(S=(h=(o+l)/2))?o=h:l=h,(v=c>=(d=(s+u)/2))?s=d:u=d,e=t,!(t=t[m=v<<1|p]))return this;if(!t.length)break;(e[m+1&3]||e[m+2&3]||e[m+3&3])&&(n=e,g=m)}for(;t.data!==r;)if(i=t,!(t=t.next))return this;return(a=t.next)&&delete t.next,i?(a?i.next=a:delete i.next,this):e?(a?e[m]=a:delete e[m],(t=e[0]||e[1]||e[2]||e[3])&&t===(e[3]||e[2]||e[1]||e[0])&&!t.length&&(n?n[g]=t:this._root=t),this):(this._root=a,this)}function lpt(r){for(var e=0,t=r.length;eh.index){var M=d-I.x-I.vx,O=p-I.y-I.vy,F=M*M+O*O;Fd+L||wp+L||Au.r&&(u.r=u[f].r)}function l(){if(!!e){var u,f=e.length,c;for(t=new Array(f),u=0;u[e(C,w,o),C])),S;for(m=0,s=new Array(g);m{}};function xpt(){for(var r=0,e=arguments.length,t={},n;r=0&&(n=t.slice(i+1),t=t.slice(0,i)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}})}fR.prototype=xpt.prototype={constructor:fR,on:function(r,e){var t=this._,n=Fre(r+"",t),i,a=-1,o=n.length;if(arguments.length<2){for(;++a0)for(var t=new Array(i),n=0,i,a;n(r=(Gre*r+zre)%_pt)/_pt}function Cpt(r){return r.x}function wpt(r){return r.y}var Ure=10,jre=Math.PI*(3-Math.sqrt(5));function B0(r){var e,t=1,n=.001,i=1-Math.pow(n,1/300),a=0,o=.6,s=new Map,l=vb(c),u=S8("tick","end"),f=Spt();r==null&&(r=[]);function c(){h(),u.call("tick",e),t1?(m==null?s.delete(v):s.set(v,p(m)),e):s.get(v)},find:function(v,m,g){var x=0,b=r.length,S,C,w,A,I;for(g==null?g=1/0:g*=g,x=0;x1?(u.on(v,m),e):u.on(v)}}}function G0(){var r,e,t,n,i=ho(-30),a,o=1,s=1/0,l=.81;function u(d){var p,v=r.length,m=F0(r,Cpt,wpt).visitAfter(c);for(n=d,p=0;p=s)return;(d.data!==e||d.next)&&(g===0&&(g=_c(t),S+=g*g),x===0&&(x=_c(t),S+=x*x),S$}let e=$=>$.cluster,t=r(1),n=r(-1),i=r(100),a=r(.1),o=[0,0],s=[],l={},u=[],f=100,c=100,h={none:{x:0,y:0}},d=[],p,v="force",m=!0,g=.1;function x($){if(!m)return x;p.tick(),I();for(let st=0,_t=s.length,dt,vt=$*g;st<_t;++st)dt=s[st],dt.vx+=(h[e(dt)].x-dt.x)*vt,dt.vy+=(h[e(dt)].y-dt.y)*vt}function b(){!s||S()}function S(){if(!s||!s.length)return;if(e(s[0])===void 0)throw Error("Couldnt find the grouping attribute for the nodes. Make sure to set it up with forceInABox.groupBy('clusterAttr') before calling .links()");let $=C();p=B0($.nodes).force("x",dM(f).strength(.1)).force("y",pM(c).strength(.1)).force("collide",hM(st=>st.r).iterations(4)).force("charge",G0().strength(n)).force("links",gg($.nodes.length?$.links:[]).distance(i).strength(a)),d=p.nodes(),I()}function C(){let $=[],st=[],_t={},dt=[],vt={},Tt=[];return vt=w(s),Tt=A(u),dt=Object.keys(vt),dt.forEach((Ut,$t)=>{let Y=vt[Ut];$.push({id:Ut,size:Y.count,r:Math.sqrt(Y.sumforceNodeSize/Math.PI)}),_t[Ut]=$t}),Tt.forEach(Ut=>{let $t=xn(Ut,"source"),Y=xn(Ut,"target"),it=_t[$t],K=_t[Y];it!==void 0&&K!==void 0&&st.push({source:it,target:K,count:Ut.count})}),{nodes:$,links:st}}function w($){let st={};return $.forEach(_t=>{let dt=e(_t);st[dt]||(st[dt]={count:0,sumforceNodeSize:0})}),$.forEach(_t=>{let dt=e(_t),vt=t(_t),Tt=st[dt];Tt.count=Tt.count+1,Tt.sumforceNodeSize=Tt.sumforceNodeSize+Math.PI*(vt*vt)*1.3,st[dt]=Tt}),st}function A($){let st={},_t=[];return $.forEach(vt=>{let Tt=P(vt),Ut=0;st[Tt]!==void 0&&(Ut=st[Tt]),Ut+=1,st[Tt]=Ut}),Object.entries(st).forEach(([vt,Tt])=>{let Ut=vt.split("~")[0],$t=vt.split("~")[1];Ut!==void 0&&$t!==void 0&&_t.push({source:Ut,target:$t,count:Tt})}),_t}function I(){return h={none:{x:0,y:0}},d.forEach($=>{h[$.id]={x:$.x-o[0],y:$.y-o[1]}}),h}function P($){let st=xn($,"source"),_t=xn($,"target"),dt=e(l[st]),vt=e(l[_t]);return dt<=vt?`${dt}~${vt}`:`${vt}~${dt}`}function L($){l={},$.forEach(st=>{l[st.id]=st})}function M($){return arguments.length?(v=$,b(),x):v}function O($){return arguments.length?typeof $=="string"?(e=st=>st[$],x):(e=$,x):e}function F($){return arguments.length?(m=$,x):m}function k($){return arguments.length?(g=$,x):g}function G($){return arguments.length?(f=$,x):f}function D($){return arguments.length?(c=$,x):c}function N($){return arguments.length?(L($||[]),s=$||[],x):s}function z($){return arguments.length?(u=$||[],b(),x):u}function j($){return arguments.length?(typeof $=="function"?t=$:t=r(+$),b(),x):t}function W($){return arguments.length?(typeof $=="function"?n=$:n=r(+$),b(),x):n}function J($){return arguments.length?(typeof $=="function"?i=$:i=r(+$),b(),x):i}function et($){return arguments.length?(typeof $=="function"?a=$:a=r(+$),b(),x):a}function lt($){return arguments.length?(o=$,x):o}return x.initialize=$=>{s=$,b()},x.template=M,x.groupBy=O,x.enableGrouping=F,x.strength=k,x.centerX=G,x.centerY=D,x.nodes=N,x.links=z,x.forceNodeSize=j,x.nodeSize=x.forceNodeSize,x.forceCharge=W,x.forceLinkDistance=J,x.forceLinkStrength=et,x.offset=lt,x.getFocis=I,x}var U_={RUN:"LAYOUT_RUN",END:"LAYOUT_END",ERROR:"LAYOUT_ERROR",TICK:"LAYOUT_TICK",GPURUN:"GPU_LAYOUT_RUN",GPUEND:"GPU_LAYOUT_END"};var j_=class extends li{constructor(e){super();this.center=[0,0],this.nodeStrength=null,this.edgeStrength=null,this.preventOverlap=!1,this.clusterNodeStrength=null,this.clusterEdgeStrength=null,this.clusterEdgeDistance=null,this.clusterNodeSize=null,this.clusterFociStrength=null,this.linkDistance=50,this.alphaDecay=.028,this.alphaMin=.001,this.alpha=.3,this.collideStrength=1,this.workerEnabled=!1,this.tick=()=>{},this.onLayoutEnd=()=>{},this.ticking=void 0,e&&this.updateCfg(e)}getDefaultCfg(){return{center:[0,0],nodeStrength:null,edgeStrength:null,preventOverlap:!1,nodeSize:void 0,nodeSpacing:void 0,linkDistance:50,forceSimulation:null,alphaDecay:.028,alphaMin:.001,alpha:.3,collideStrength:1,clustering:!1,clusterNodeStrength:-1,clusterEdgeStrength:.1,clusterEdgeDistance:100,clusterFociStrength:.8,clusterNodeSize:10,tick(){},onLayoutEnd(){},workerEnabled:!1}}init(e){let t=this;t.nodes=e.nodes||[];let n=e.edges||[];t.edges=n.map(i=>{let a={},o=["targetNode","sourceNode","startPoint","endPoint"];return Object.keys(i).forEach(s=>{o.indexOf(s)>-1||(a[s]=i[s])}),a}),t.ticking=!1}execute(e){let t=this,n=t.nodes,i=t.edges;if(t.ticking)return;let a=t.forceSimulation,o=t.alphaMin,s=t.alphaDecay,l=t.alpha;if(a){if(e){if(t.clustering&&t.clusterForce&&(t.clusterForce.nodes(n),t.clusterForce.links(i)),a.nodes(n),i&&t.edgeForce)t.edgeForce.links(i);else if(i&&!t.edgeForce){let u=gg().id(f=>f.id).links(i);t.edgeStrength&&u.strength(t.edgeStrength),t.linkDistance&&u.distance(t.linkDistance),t.edgeForce=u,a.force("link",u)}}t.preventOverlap&&t.overlapProcess(a),a.alpha(l).restart(),this.ticking=!0}else try{let u=G0();if(t.nodeStrength&&u.strength(t.nodeStrength),a=B0().nodes(n),t.clustering){let f=C8();f.centerX(t.center[0]).centerY(t.center[1]).template("force").strength(t.clusterFociStrength),i&&f.links(i),n&&f.nodes(n),f.forceLinkDistance(t.clusterEdgeDistance).forceLinkStrength(t.clusterEdgeStrength).forceCharge(t.clusterNodeStrength).forceNodeSize(t.clusterNodeSize),t.clusterForce=f,a.force("group",f)}if(a.force("center",cM(t.center[0],t.center[1])).force("charge",u).alpha(l).alphaDecay(s).alphaMin(o),t.preventOverlap&&t.overlapProcess(a),i){let f=gg().id(c=>c.id).links(i);t.edgeStrength&&f.strength(t.edgeStrength),t.linkDistance&&f.distance(t.linkDistance),t.edgeForce=f,a.force("link",f)}if(t.workerEnabled&&!Vre()&&(t.workerEnabled=!1,console.warn("workerEnabled option is only supported when running in web worker.")),!t.workerEnabled)a.on("tick",()=>{t.tick()}).on("end",()=>{t.ticking=!1,t.onLayoutEnd&&t.onLayoutEnd()}),t.ticking=!0;else{a.stop();let f=Wre(a);for(let c=1;c<=f;c++)a.tick(),postMessage({nodes:n,currentTick:c,totalTicks:f,type:U_.TICK},void 0);t.ticking=!1}t.forceSimulation=a,t.ticking=!0}catch(u){t.ticking=!1,console.warn(u)}}overlapProcess(e){let t=this,n=t.nodeSize,i=t.nodeSpacing,a,o,s=t.collideStrength;if(je(i)?o=()=>i:mf(i)?o=i:o=()=>0,!n)a=l=>l.size?ha(l.size)?(l.size[0]>l.size[1]?l.size[0]:l.size[1])/2+o(l):co(l.size)?(l.size.width>l.size.height?l.size.width:l.size.height)/2+o(l):l.size/2+o(l):10+o(l);else if(mf(n))a=l=>n(l)+o(l);else if(ha(n)){let u=(n[0]>n[1]?n[0]:n[1])/2;a=f=>u+o(f)}else if(je(n)){let l=n/2;a=u=>l+o(u)}else a=()=>10;e.force("collisionForce",hM(a).strength(s))}updateCfg(e){let t=this;t.ticking&&(t.forceSimulation.stop(),t.ticking=!1),t.forceSimulation=null,Object.assign(t,e)}destroy(){let e=this;e.ticking&&(e.forceSimulation.stop(),e.ticking=!1),e.nodes=null,e.edges=null,e.destroyed=!0}};function Wre(r){let e=r.alphaMin(),t=r.alphaTarget(),n=r.alpha(),i=Math.log((e-t)/(n-t))/Math.log(1-r.alphaDecay());return Math.ceil(i)}function Vre(){return typeof WorkerGlobalScope!="undefined"&&self instanceof WorkerGlobalScope}function Hre(r,e,t,n){r.forEach((i,a)=>{r[a].children=[],r[a].parent=[]}),n?e.forEach(i=>{let a=xn(i,"source"),o=xn(i,"target"),s=0;a&&(s=t[a]);let l=0;o&&(l=t[o]);let u=r[s].children,f=r[l].parent;u.push(r[l].id),f.push(r[s].id)}):e.forEach(i=>{let a=xn(i,"source"),o=xn(i,"target"),s=0;a&&(s=t[a]);let l=0;o&&(l=t[o]);let u=r[s].children,f=r[l].children;u.push(r[l].id),f.push(r[s].id)})}function Yre(r,e,t){let n=t.length;for(let i=0;in?1:0}var W_=class extends li{constructor(e){super();this.radius=null,this.startRadius=null,this.endRadius=null,this.startAngle=0,this.endAngle=2*Math.PI,this.clockwise=!0,this.divisions=1,this.ordering=null,this.angleRatio=1,this.nodes=[],this.edges=[],this.nodeMap={},this.degrees=[],this.width=300,this.height=300,this.updateCfg(e)}getDefaultCfg(){return{radius:null,startRadius:null,endRadius:null,startAngle:0,endAngle:2*Math.PI,clockwise:!0,divisions:1,ordering:null,angleRatio:1}}execute(){let e=this,t=e.nodes,n=e.edges,i=t.length;if(i===0){e.onLayoutEnd&&e.onLayoutEnd();return}!e.width&&typeof window!="undefined"&&(e.width=window.innerWidth),!e.height&&typeof window!="undefined"&&(e.height=window.innerHeight),e.center||(e.center=[e.width/2,e.height/2]);let a=e.center;if(i===1){t[0].x=a[0],t[0].y=a[1],e.onLayoutEnd&&e.onLayoutEnd();return}let o=e.radius,s=e.startRadius,l=e.endRadius,u=e.divisions,f=e.startAngle,c=e.endAngle,h=(c-f)/i,d={};t.forEach((C,w)=>{d[C.id]=w}),e.nodeMap=d;let p=$h(t.length,d,n);e.degrees=p,!o&&!s&&!l?o=e.height>e.width?e.width/2:e.height/2:!s&&l?s=l:s&&!l&&(l=s);let v=e.angleRatio,m=h*v,g=e.ordering,x=[];g==="topology"?x=e.topologyOrdering():g==="topology-directed"?x=e.topologyOrdering(!0):g==="degree"?x=e.degreeOrdering():x=t;let b=e.clockwise,S=Math.ceil(i/u);for(let C=0;C{if(p!==0)if((p===c-1||n[p]!==n[p+1]||Yre(l[h],d,i))&&!f[p])l.push(d),u.push(a[s[d.id]]),f[p]=!0,h++;else{let v=l[h].children,m=!1;for(let x=0;x{a.degree=i[o],n.push(a)}),n.sort(Xre),n}getType(){return"circular"}};var vvt=U(pvt()),O8=vvt.default;!O8&&typeof window!="undefined"&&(O8=window.graphlib);Array.prototype.flat||(Array.prototype.flat=function(r){let e=r||1;if(!isFinite(e))return;let t=this.length,n=[];if(this.length===0)return this;for(;e--;){let i=[],a=!1;if(n.length===0){a=!0;for(let o=0;o{r._prev._next=r._next,r._next._prev=r._prev,delete r._next,delete r._prev},Mne=(r,e)=>{if(r!=="_next"&&r!=="_prev")return e},gvt=class{constructor(){let e={};e._next=e._prev=e,this.isentinel=e}dequeue(){let e=this.isentinel,t=e._prev;if(t!==e)return mvt(t),t}enqueue(){let e=this.isentinel,t=e._prev;if(t!==e)return mvt(t),t}toString(){let e=[],t=this.isentinel,n=t._prev;for(;n!==t;)e.push(JSON.stringify(n,Mne)),n=n._prev;return`[${e.join(", ")}]`}},yvt=gvt;var Tne=Ko.Graph,Ine=()=>1,Lne=(r,e)=>{var t;if(r.nodeCount()<=1)return[];let n=Dne(r,e||Ine);return(t=One(n.graph,n.buckets,n.zeroIdx).map(a=>r.outEdges(a.v,a.w)))===null||t===void 0?void 0:t.flat()},One=(r,e,t)=>{let n=[],i=e[e.length-1],a=e[0],o;for(;r.nodeCount();){for(;o=a.dequeue();)D8(r,e,t,o);for(;o=i.dequeue();)D8(r,e,t,o);if(r.nodeCount()){for(let s=e.length-2;s>0;--s)if(o=e[s].dequeue(),o){n=n.concat(D8(r,e,t,o,!0));break}}}return n},D8=(r,e,t,n,i)=>{var a,o;let s=i?[]:void 0;return(a=r.inEdges(n.v))===null||a===void 0||a.forEach(l=>{let u=r.edge(l),f=r.node(l.v);i&&s.push({v:l.v,w:l.w}),f.out===void 0&&(f.out=0),f.out-=u,P8(e,t,f)}),(o=r.outEdges(n.v))===null||o===void 0||o.forEach(l=>{let u=r.edge(l),f=l.w,c=r.node(f);c.in===void 0&&(c.in=0),c.in-=u,P8(e,t,c)}),r.removeNode(n.v),s},Dne=(r,e)=>{let t=new Tne,n=0,i=0;r.nodes().forEach(l=>{t.setNode(l,{v:l,in:0,out:0})}),r.edges().forEach(l=>{let u=t.edge(l.v,l.w)||0,f=e==null?void 0:e(l),c=u+f;t.setEdge(l.v,l.w,c),i=Math.max(i,t.node(l.v).out+=f),n=Math.max(n,t.node(l.w).in+=f)});let a=[],o=i+n+3;for(let l=0;l{P8(a,s,t.node(l))}),{buckets:a,zeroIdx:s,graph:t}},P8=(r,e,t)=>{t.out?t.in?r[t.out-t.in+e].enqueue(t):r[r.length-1].enqueue(t):r[0].enqueue(t)},xvt=Lne;var Pne=r=>{let e=n=>i=>n.edge(i).weight,t=r.graph().acyclicer==="greedy"?xvt(r,e(r)):kne(r);t==null||t.forEach(n=>{let i=r.edge(n);r.removeEdge(n),i.forwardName=n.name,i.reversed=!0,r.setEdge(n.w,n.v,i,`rev-${Math.random()}`)})},kne=r=>{let e=[],t={},n={},i=a=>{var o;n.hasOwnProperty(a)||(n[a]=!0,t[a]=!0,(o=r.outEdges(a))===null||o===void 0||o.forEach(s=>{t.hasOwnProperty(s.w)?e.push(s):i(s.w)}),delete t[a])};return r.nodes().forEach(i),e},Rne=r=>{r.edges().forEach(e=>{let t=r.edge(e);if(t.reversed){r.removeEdge(e);let n=t.forwardName;delete t.reversed,delete t.forwardName,r.setEdge(e.w,e.v,t,n)}})},k8={run:Pne,undo:Rne};var bvt=Ko.Graph,_vt=(r,e,t,n)=>{let i;do i=`${n}${Math.random()}`;while(r.hasNode(i));return t.dummy=e,r.setNode(i,t),i},R8=r=>{let e=new bvt().setGraph(r.graph());return r.nodes().forEach(t=>{e.setNode(t,r.node(t))}),r.edges().forEach(t=>{let n=e.edge(t.v,t.w)||{weight:0,minlen:1},i=r.edge(t);e.setEdge(t.v,t.w,{weight:n.weight+i.weight,minlen:Math.max(n.minlen,i.minlen)})}),e},Nne=r=>{let e=new bvt({multigraph:r.isMultigraph()}).setGraph(r.graph());return r.nodes().forEach(t=>{var n;((n=r.children(t))===null||n===void 0?void 0:n.length)||e.setNode(t,r.node(t))}),r.edges().forEach(t=>e.setEdge(t,r.edge(t))),e},yM=(r,e)=>{let t={};return r==null||r.forEach((n,i)=>{t[n]=e[i]}),t},Fne=r=>{let e=r.nodes().map(t=>{var n;let i={};return(n=r.outEdges(t))===null||n===void 0||n.forEach(a=>{i[a.w]=(i[a.w]||0)+r.edge(a).weight}),i});return yM(r.nodes(),e)},Bne=r=>{let e=r.nodes().map(t=>{var n;let i={};return(n=r.inEdges(t))===null||n===void 0||n.forEach(a=>{i[a.v]=(i[a.v]||0)+r.edge(a).weight}),i});return yM(r.nodes(),e)},Gne=(r,e)=>{let t=r.x,n=r.y,i=e.x-t,a=e.y-n,o=r.width/2,s=r.height/2;if(!i&&!a)return{x:0,y:0};let l,u;return Math.abs(a)*o>Math.abs(i)*s?(a<0&&(s=-s),l=s*i/a,u=s):(i<0&&(o=-o),l=o,u=o*a/i),{x:t+l,y:n+u}},zne=r=>{let e=[],t=[],n=Svt(r)+1;for(let i=0;i{let o=r.node(i).rank;o!==void 0&&e[o]&&t[o].push(i)}),t==null||t.forEach((i,a)=>{i==null||i.sort((o,s)=>{var l,u;return((l=r.node(o))===null||l===void 0?void 0:l.order)-((u=r.node(s))===null||u===void 0?void 0:u.order)}),i.forEach(o=>{e[a].push(o)})}),e},N8=r=>{let e=r.nodes().filter(n=>r.node(n).rank!==void 0).map(n=>r.node(n).rank),t=Math.min(...e);r.nodes().forEach(n=>{let i=r.node(n);i.hasOwnProperty("rank")&&(i.rank||(i.rank=0),i.rank-=t)})},F8=r=>{let e=r.nodes().filter(o=>r.node(o).rank!==void 0).map(o=>r.node(o).rank),t=Math.min(...e),n=[];r.nodes().forEach(o=>{var s;let l=(((s=r.node(o))===null||s===void 0?void 0:s.rank)||0)-t;n[l]||(n[l]=[]),n[l].push(o)});let i=0,a=r.graph().nodeRankFactor||0;for(let o=0;o{r.node(l).rank||(r.node(l).rank=0),r.node(l).rank+=i}))}},Une=(r,e,t,n)=>{let i={width:0,height:0};return je(t)&&je(n)&&(i.rank=t,i.order=n),_vt(r,"border",i,e)},Svt=r=>{let e=r.nodes().map(t=>{let n=r.node(t).rank;return n!==void 0?n:-1/0});return Math.max(...e)},jne=(r,e)=>{let t={lhs:[],rhs:[]};return r==null||r.forEach(n=>{e(n)?t.lhs.push(n):t.rhs.push(n)}),t},B8=(r,e)=>{let t=Date.now();try{return e()}finally{console.log(`${r} time: ${Date.now()-t}ms`)}},G8=(r,e)=>e(),xM=(r,e)=>{let t=1/0,n;return r==null||r.forEach(i=>{let a=e(i);t>a&&(t=a,n=i)}),n};var Ni={addDummyNode:_vt,simplify:R8,asNonCompoundGraph:Nne,successorWeights:Fne,predecessorWeights:Bne,intersectRect:Gne,buildLayerMatrix:zne,normalizeRanks:N8,removeEmptyRanks:F8,addBorderNode:Une,maxRank:Svt,partition:jne,time:B8,notime:G8,zipObject:yM,minBy:xM};var Wne=r=>{r.graph().dummyChains=[],r.edges().forEach(e=>Vne(r,e))},Vne=(r,e)=>{var t,n;let i=e.v,a=r.node(i).rank,o=e.w,s=r.node(o).rank,l=e.name,u=r.edge(e),f=u.labelRank;if(s===a+1)return;r.removeEdge(e);let c,h,d;for(d=0,++a;a{var e;(e=r.graph().dummyChains)===null||e===void 0||e.forEach(t=>{var n;let i=r.node(t),a=i.edgeLabel,o;i.edgeObj&&r.setEdge(i.edgeObj,a);let s=t;for(;i.dummy;)o=(n=r.successors(s))===null||n===void 0?void 0:n[0],r.removeNode(s),a.points.push({x:i.x,y:i.y}),i.dummy==="edge-label"&&(a.x=i.x,a.y=i.y,a.width=i.width,a.height=i.height),s=o,i=r.node(s)})},z8={run:Wne,undo:Hne};var vR=r=>{var e;let t={},n=i=>{var a;let o=r.node(i);if(t.hasOwnProperty(i))return o.rank;t[i]=!0;let s=(a=r.outEdges(i))===null||a===void 0?void 0:a.map(u=>n(u.w)-r.edge(u).minlen||1/0),l=Math.min(...s);return(l===Number.POSITIVE_INFINITY||l===void 0||l===null)&&(l=0),o.rank=l,l};(e=r.sources())===null||e===void 0||e.forEach(i=>n(i))},Cvt=r=>{var e;let t={},n=0,i=o=>{var s;let l=r.node(o);if(t.hasOwnProperty(o))return l.rank;t[o]=!0;let u=(s=r.outEdges(o))===null||s===void 0?void 0:s.map(c=>i(c.w)-r.edge(c).minlen||1/0),f=Math.min(...u);return(f===Number.POSITIVE_INFINITY||f===void 0||f===null)&&(f=0),l.rank=f,n=Math.min(l.rank,n),l.rank};(e=r.sources())===null||e===void 0||e.forEach(o=>i(o)),n+=1;let a=(o,s)=>{var l;let u=r.node(o),f=isNaN(u.layer)?s:u.layer;(u.rank===void 0||u.rank{a(c.w,f+r.edge(c).minlen)})};r.nodes().forEach(o=>{let s=r.node(o);isNaN(s.layer)?s.rank-=n:a(o,s.layer)})},Jh=(r,e)=>r.node(e.w).rank-r.node(e.v).rank-r.edge(e).minlen;var wvt=Ko.Graph,Evt=r=>{let e=new wvt({directed:!1}),t=r.nodes()[0],n=r.nodeCount();e.setNode(t,{});let i,a;for(;Yne(e,r){let t=n=>{e.nodeEdges(n).forEach(i=>{let a=i.v,o=n===a?i.w:a;!r.hasNode(o)&&!Jh(e,i)&&(r.setNode(o,{}),r.setEdge(n,o,{}),t(o))})};return r.nodes().forEach(t),r.nodeCount()},Avt=r=>{let e=new wvt({directed:!1}),t=r.nodes()[0],n=r.nodeCount();e.setNode(t,{});let i,a;for(;Xne(e,r){let t=n=>{var i;(i=e.nodeEdges(n))===null||i===void 0||i.forEach(a=>{let o=a.v,s=n===o?a.w:o;!r.hasNode(s)&&(e.node(s).layer!==void 0||!Jh(e,a))&&(r.setNode(s,{}),r.setEdge(n,s,{}),t(s))})};return r.nodes().forEach(t),r.nodeCount()},Mvt=(r,e)=>xM(e.edges(),t=>r.hasNode(t.v)!==r.hasNode(t.w)?Jh(e,t):1/0),Tvt=(r,e,t)=>{r.nodes().forEach(n=>{e.node(n).rank||(e.node(n).rank=0),e.node(n).rank+=t})};var qne=Ko.alg,{preorder:Kne,postorder:Zne}=qne,U0=r=>{r=R8(r),vR(r);let e=Evt(r);j8(e),U8(e,r);let t,n;for(;t=Ovt(e);)n=Dvt(e,r,t),Pvt(e,r,t,n)},U8=(r,e)=>{let t=Zne(r,r.nodes());t=t==null?void 0:t.slice(0,(t==null?void 0:t.length)-1),t==null||t.forEach(n=>{$ne(r,e,n)})},$ne=(r,e,t)=>{let i=r.node(t).parent;r.edge(t,i).cutvalue=Ivt(r,e,t)},Ivt=(r,e,t)=>{var n;let a=r.node(t).parent,o=!0,s=e.edge(t,a),l=0;return s||(o=!1,s=e.edge(a,t)),l=s.weight,(n=e.nodeEdges(t))===null||n===void 0||n.forEach(u=>{let f=u.v===t,c=f?u.w:u.v;if(c!==a){let h=f===o,d=e.edge(u).weight;if(l+=h?d:-d,Jne(r,t,c)){let p=r.edge(t,c).cutvalue;l+=h?-p:p}}}),l},j8=(r,e)=>{e!==void 0&&(e=r.nodes()[0]),Lvt(r,{},1,e)},Lvt=(r,e,t,n,i)=>{var a;let o=t,s=t,l=r.node(n);return e[n]=!0,(a=r.neighbors(n))===null||a===void 0||a.forEach(u=>{e.hasOwnProperty(u)||(s=Lvt(r,e,s,u,n))}),l.low=o,l.lim=s++,i?l.parent=i:delete l.parent,s},Ovt=r=>r.edges().find(e=>r.edge(e).cutvalue<0),Dvt=(r,e,t)=>{let n=t.v,i=t.w;e.hasEdge(n,i)||(n=t.w,i=t.v);let a=r.node(n),o=r.node(i),s=a,l=!1;a.lim>o.lim&&(s=o,l=!0);let u=e.edges().filter(f=>l===kvt(r,r.node(f.v),s)&&l!==kvt(r,r.node(f.w),s));return xM(u,f=>Jh(e,f))},Pvt=(r,e,t,n)=>{let i=t.v,a=t.w;r.removeEdge(i,a),r.setEdge(n.v,n.w,{}),j8(r),U8(r,e),Qne(r,e)},Qne=(r,e)=>{let t=r.nodes().find(i=>!e.node(i).parent),n=Kne(r,t);n=n==null?void 0:n.slice(1),n==null||n.forEach(i=>{let a=r.node(i).parent,o=e.edge(i,a),s=!1;o||(o=e.edge(a,i),s=!0),e.node(i).rank=e.node(a).rank+(s?o.minlen:-o.minlen)})},Jne=(r,e,t)=>r.hasEdge(e,t),kvt=(r,e,t)=>t.low<=e.lim&&e.lim<=t.lim;U0.initLowLimValues=j8;U0.initCutValues=U8;U0.calcCutValue=Ivt;U0.leaveEdge=Ovt;U0.enterEdge=Dvt;U0.exchangeEdges=Pvt;var Rvt=U0;var tie=r=>{switch(r.graph().ranker){case"network-simplex":rie(r);break;case"tight-tree":Nvt(r);break;case"longest-path":eie(r);break;default:Nvt(r)}},eie=vR,Nvt=r=>{Cvt(r),Avt(r)},rie=r=>{Rvt(r)},Fvt=tie;var nie=r=>{var e;let t=aie(r);(e=r.graph().dummyChains)===null||e===void 0||e.forEach(n=>{var i,a;let o=r.node(n),s=o.edgeObj;if(!s)return;let l=iie(r,t,s.v,s.w),u=l.path,f=l.lca,c=0,h=u[c],d=!0;for(;n!==s.w;){if(o=r.node(n),d){for(;(h=u[c])!==f&&r.node(h).maxRank{let i=[],a=[],o=Math.min(e[t].low,e[n].low),s=Math.max(e[t].lim,e[n].lim),l,u;l=t;do l=r.parent(l),i.push(l);while(l&&(e[l].low>o||s>e[l].lim));for(u=l,l=n;(l=r.parent(l))!==u;)a.push(l);return{lca:u,path:i.concat(a.reverse())}},aie=r=>{var e;let t={},n=0,i=a=>{var o;let s=n;(o=r.children(a))===null||o===void 0||o.forEach(i),t[a]={low:s,lim:n++}};return(e=r.children())===null||e===void 0||e.forEach(i),t},Bvt=nie;var oie=r=>{var e;let t=Ni.addDummyNode(r,"root",{},"_root"),n=sie(r),i=Math.max(...Object.values(n))-1,a=2*i+1;r.graph().nestingRoot=t,r.edges().forEach(s=>{r.edge(s).minlen*=a});let o=lie(r)+1;(e=r.children())===null||e===void 0||e.forEach(s=>{Gvt(r,t,a,o,i,n,s)}),r.graph().nodeRankFactor=a},Gvt=(r,e,t,n,i,a,o)=>{let s=r.children(o);if(!(s==null?void 0:s.length)){o!==e&&r.setEdge(e,o,{weight:0,minlen:t});return}let l=Ni.addBorderNode(r,"_bt"),u=Ni.addBorderNode(r,"_bb"),f=r.node(o);r.setParent(l,o),f.borderTop=l,r.setParent(u,o),f.borderBottom=u,s==null||s.forEach(c=>{Gvt(r,e,t,n,i,a,c);let h=r.node(c),d=h.borderTop?h.borderTop:c,p=h.borderBottom?h.borderBottom:c,v=h.borderTop?n:2*n,m=d!==p?1:i-a[o]+1;r.setEdge(l,d,{minlen:m,weight:v,nestingEdge:!0}),r.setEdge(p,u,{minlen:m,weight:v,nestingEdge:!0})}),r.parent(o)||r.setEdge(e,l,{weight:0,minlen:i+a[o]})},sie=r=>{var e;let t={},n=(i,a)=>{let o=r.children(i);o==null||o.forEach(s=>n(s,a+1)),t[i]=a};return(e=r.children())===null||e===void 0||e.forEach(i=>n(i,1)),t},lie=r=>{let e=0;return r.edges().forEach(t=>{e+=r.edge(t).weight}),e},uie=r=>{let e=r.graph();e.nestingRoot&&r.removeNode(e.nestingRoot),delete e.nestingRoot,r.edges().forEach(t=>{r.edge(t).nestingEdge&&r.removeEdge(t)})},W8={run:oie,cleanup:uie};var fie=r=>{var e;let t=n=>{let i=r.children(n),a=r.node(n);if((i==null?void 0:i.length)&&i.forEach(o=>t(o)),a.hasOwnProperty("minRank")){a.borderLeft=[],a.borderRight=[];for(let o=a.minRank,s=a.maxRank+1;ot(n))},zvt=(r,e,t,n,i,a)=>{let o={rank:a,width:0,height:0,borderType:e},s=i[e][a-1],l=Ni.addDummyNode(r,"border",o,t);i[e][a]=l,r.setParent(l,n),s&&r.setEdge(s,l,{weight:1})},Uvt=fie;var cie=r=>{var e;let t=(e=r.graph().rankdir)===null||e===void 0?void 0:e.toLowerCase();(t==="lr"||t==="rl")&&jvt(r)},hie=r=>{var e;let t=(e=r.graph().rankdir)===null||e===void 0?void 0:e.toLowerCase();(t==="bt"||t==="rl")&&die(r),(t==="lr"||t==="rl")&&(pie(r),jvt(r))},jvt=r=>{r.nodes().forEach(e=>{Wvt(r.node(e))}),r.edges().forEach(e=>{Wvt(r.edge(e))})},Wvt=r=>{let e=r.width;r.width=r.height,r.height=e},die=r=>{r.nodes().forEach(e=>{V8(r.node(e))}),r.edges().forEach(e=>{var t;let n=r.edge(e);(t=n.points)===null||t===void 0||t.forEach(i=>V8(i)),n.hasOwnProperty("y")&&V8(n)})},V8=r=>{r.y=-r.y},pie=r=>{r.nodes().forEach(e=>{H8(r.node(e))}),r.edges().forEach(e=>{var t;let n=r.edge(e);(t=n.points)===null||t===void 0||t.forEach(i=>H8(i)),n.hasOwnProperty("x")&&H8(n)})},H8=r=>{let e=r.x;r.x=r.y,r.y=e},Y8={adjust:cie,undo:hie};var vie=r=>{let e={},t=r.nodes().filter(f=>{var c;return!((c=r.children(f))===null||c===void 0?void 0:c.length)}),n=t.map(f=>r.node(f).rank),i=Math.max(...n),a=[];for(let f=0;f{var c;if(e.hasOwnProperty(f))return;e[f]=!0;let h=r.node(f);isNaN(h.rank)||a[h.rank].push(f),(c=r.successors(f))===null||c===void 0||c.forEach(d=>o(d))},s=t.sort((f,c)=>r.node(f).rank-r.node(c).rank),u=s.filter(f=>r.node(f).fixorder!==void 0).sort((f,c)=>r.node(f).fixorder-r.node(c).fixorder);return u==null||u.forEach(f=>{isNaN(r.node(f).rank)||a[r.node(f).rank].push(f),e[f]=!0}),s==null||s.forEach(o),a},X8=vie;var mie=(r,e,t)=>{let n=yM(t,t.map((f,c)=>c)),a=e.map(f=>{var c;let h=(c=r.outEdges(f))===null||c===void 0?void 0:c.map(d=>({pos:n[d.w]||0,weight:r.edge(d).weight}));return h==null?void 0:h.sort((d,p)=>d.pos-p.pos)}).flat().filter(f=>f!==void 0),o=1;for(;o{let c=f.pos+o;l[c]+=f.weight;let h=0;for(;c>0;)c%2&&(h+=l[c+1]),c=c-1>>1,l[c]+=f.weight;u+=f.weight*h}),u},gie=(r,e)=>{let t=0;for(let n=1;n<(e==null?void 0:e.length);++n)t+=mie(r,e[n-1],e[n]);return t},q8=gie;var yie=Ko.Graph,xie=(r,e,t)=>{let n=bie(r),i=new yie({compound:!0}).setGraph({root:n}).setDefaultNodeLabel(a=>r.node(a));return r.nodes().forEach(a=>{let o=r.node(a),s=r.parent(a);(o.rank===e||o.minRank<=e&&e<=o.maxRank)&&(i.setNode(a),i.setParent(a,s||n),r[t](a).forEach(l=>{let u=l.v===a?l.w:l.v,f=i.edge(u,a),c=f!==void 0?f.weight:0;i.setEdge(u,a,{weight:r.edge(l).weight+c})}),o.hasOwnProperty("minRank")&&i.setNode(a,{borderLeft:o.borderLeft[e],borderRight:o.borderRight[e]}))}),i},bie=r=>{let e;for(;r.hasNode(e=`_root${Math.random()}`););return e},Vvt=xie;var _ie=(r,e,t)=>{let n={},i;t==null||t.forEach(a=>{let o=r.parent(a),s,l;for(;o;){if(s=r.parent(o),s?(l=n[s],n[s]=o):(l=i,i=o),l&&l!==o){e.setEdge(l,o);return}o=s}})},Hvt=_ie;var Sie=(r,e)=>e.map(t=>{let n=r.inEdges(t);if(!(n==null?void 0:n.length))return{v:t};{let i={sum:0,weight:0};return n==null||n.forEach(a=>{let o=r.edge(a),s=r.node(a.v);i.sum+=o.weight*s.order,i.weight+=o.weight}),{v:t,barycenter:i.sum/i.weight,weight:i.weight}}}),Yvt=Sie;var Cie=(r,e)=>{var t,n,i;let a={};r==null||r.forEach((s,l)=>{let u=a[s.v]={i:l,indegree:0,in:[],out:[],vs:[s.v]};s.barycenter!==void 0&&(u.barycenter=s.barycenter,u.weight=s.weight)}),(t=e.edges())===null||t===void 0||t.forEach(s=>{let l=a[s.v],u=a[s.w];l!==void 0&&u!==void 0&&(u.indegree++,l.out.push(a[s.w]))});let o=(i=(n=Object.values(a)).filter)===null||i===void 0?void 0:i.call(n,s=>!s.indegree);return wie(o)},wie=r=>{var e,t;let n=[],i=l=>u=>{u.merged||(u.barycenter===void 0||l.barycenter===void 0||u.barycenter>=l.barycenter)&&Eie(l,u)},a=l=>u=>{u.in.push(l),--u.indegree==0&&r.push(u)};for(;r==null?void 0:r.length;){let l=r.pop();n.push(l),(e=l.in.reverse())===null||e===void 0||e.forEach(u=>i(l)(u)),(t=l.out)===null||t===void 0||t.forEach(u=>a(l)(u))}let o=n.filter(l=>!l.merged),s=["vs","i","barycenter","weight"];return o.map(l=>{let u={};return s==null||s.forEach(f=>{l[f]!==void 0&&(u[f]=l[f])}),u})},Eie=(r,e)=>{var t;let n=0,i=0;r.weight&&(n+=r.barycenter*r.weight,i+=r.weight),e.weight&&(n+=e.barycenter*e.weight,i+=e.weight),r.vs=(t=e.vs)===null||t===void 0?void 0:t.concat(r.vs),r.barycenter=n/i,r.weight=i,r.i=Math.min(e.i,r.i),e.merged=!0},Xvt=Cie;var Aie=(r,e,t)=>{let n=Ni.partition(r,c=>c.hasOwnProperty("fixorder")&&!isNaN(c.fixorder)||c.hasOwnProperty("barycenter")),i=n.lhs,a=n.rhs.sort((c,h)=>-c.i- -h.i),o=[],s=0,l=0,u=0;i==null||i.sort(Mie(!!e,!!t)),u=qvt(o,a,u),i==null||i.forEach(c=>{var h;u+=(h=c.vs)===null||h===void 0?void 0:h.length,o.push(c.vs),s+=c.barycenter*c.weight,l+=c.weight,u=qvt(o,a,u)});let f={vs:o.flat()};return l&&(f.barycenter=s/l,f.weight=l),f},qvt=(r,e,t)=>{let n=t,i;for(;e.length&&(i=e[e.length-1]).i<=n;)e.pop(),r==null||r.push(i.vs),n++;return n},Mie=(r,e)=>(t,n)=>{if(t.fixorder!==void 0&&n.fixorder!==void 0)return t.fixorder-n.fixorder;if(t.barycentern.barycenter)return 1;if(e&&t.order!==void 0&&n.order!==void 0){if(t.ordern.order)return 1}return r?n.i-t.i:t.i-n.i},Kvt=Aie;var Zvt=(r,e,t,n,i)=>{var a,o,s,l;let u=r.children(e),f=r.node(e),c=f?f.borderLeft:void 0,h=f?f.borderRight:void 0,d={};c&&(u=u==null?void 0:u.filter(g=>g!==c&&g!==h));let p=Yvt(r,u||[]);p==null||p.forEach(g=>{var x;if((x=r.children(g.v))===null||x===void 0?void 0:x.length){let b=Zvt(r,g.v,t,n);d[g.v]=b,b.hasOwnProperty("barycenter")&&Iie(g,b)}});let v=Xvt(p,t);Tie(v,d),(a=v.filter(g=>{var x;return!!g.vs||((x=g.vs)===null||x===void 0?void 0:x.length)>0}))===null||a===void 0||a.forEach(g=>{let x=r.node(g.vs[0]);g.fixorder=x.fixorder,g.order=x.order});let m=Kvt(v,n,i);if(c&&(m.vs=[c,m.vs,h].flat(),(o=r.predecessors(c))===null||o===void 0?void 0:o.length)){let g=r.node(((s=r.predecessors(c))===null||s===void 0?void 0:s[0])||{}),x=r.node(((l=r.predecessors(h))===null||l===void 0?void 0:l[0])||{});m.hasOwnProperty("barycenter")||(m.barycenter=0,m.weight=0),m.barycenter=(m.barycenter*m.weight+g.order+x.order)/(m.weight+2),m.weight+=2}return m},Tie=(r,e)=>{r==null||r.forEach(t=>{var n;let i=(n=t.vs)===null||n===void 0?void 0:n.map(a=>e[a]?e[a].vs:a);t.vs=i.flat()})},Iie=(r,e)=>{r.barycenter!==void 0?(r.barycenter=(r.barycenter*r.weight+e.barycenter*e.weight)/(r.weight+e.weight),r.weight+=e.weight):(r.barycenter=e.barycenter,r.weight=e.weight)},$vt=Zvt;var Lie=Ko.Graph,Oie=r=>{let e=Ni.maxRank(r),t=[],n=[];for(let u=1;u-1;u--)n.push(u);let i=Qvt(r,t,"inEdges"),a=Qvt(r,n,"outEdges"),o=X8(r);K8(r,o);let s=Number.POSITIVE_INFINITY,l;for(let u=0,f=0;f<4;++u,++f){Jvt(u%2?i:a,u%4>=2),o=Ni.buildLayerMatrix(r);let c=q8(r,o);c=2,!0),o=Ni.buildLayerMatrix(r);let c=q8(r,o);ce.map(n=>Vvt(r,n,t)),Jvt=(r,e,t)=>{let n=new Lie;r==null||r.forEach(i=>{var a;let o=i.graph().root,s=$vt(i,o,n,e,t);for(let l=0;l<((a=s.vs)===null||a===void 0?void 0:a.length);l++)i.node(s.vs[l]).order=l;Hvt(i,n,s.vs)})},K8=(r,e)=>{e==null||e.forEach(t=>{t==null||t.forEach((n,i)=>{r.node(n).order=i})})},tmt=Oie;var Die=Ko.Graph,emt=(r,e)=>{let t={},n=(i,a)=>{let o=0,s=0,l=i.length,u=a==null?void 0:a[(a==null?void 0:a.length)-1];return a==null||a.forEach((f,c)=>{var h;let d=Pie(r,f),p=d?r.node(d).order:l;(d||f===u)&&((h=a.slice(s,c+1))===null||h===void 0||h.forEach(v=>{var m;(m=r.predecessors(v))===null||m===void 0||m.forEach(g=>{let x=r.node(g),b=x.order;(b{let t={},n=(a,o,s,l,u)=>{let f,c=[];for(let h=o;h{var d;f=a[h],r.node(f).dummy&&((d=r.predecessors(f))===null||d===void 0||d.forEach(p=>{let v=r.node(p);v.dummy&&(v.orderu)&&nmt(t,p,f)}))})},i=(a,o)=>{let s=-1,l,u=0;return o==null||o.forEach((f,c)=>{if(r.node(f).dummy==="border"){let h=r.predecessors(f)||[];h.length&&(l=r.node(h[0]).order,n(o,u,c,s,l),u=c,s=l)}n(o,u,o.length,l,a.length)}),o};return(e==null?void 0:e.length)&&e.reduce(i),t},Pie=(r,e)=>{var t;if(r.node(e).dummy)return(t=r.predecessors(e))===null||t===void 0?void 0:t.find(n=>r.node(n).dummy)},nmt=(r,e,t)=>{let n=e,i=t;if(n>i){let o=n;n=i,i=o}let a=r[n];a||(r[n]=a={}),a[i]=!0},kie=(r,e,t)=>{let n=e,i=t;if(n>i){let a=e;n=i,i=a}return r[n]&&r[n].hasOwnProperty(i)},imt=(r,e,t,n)=>{let i={},a={},o={};return e==null||e.forEach(s=>{s==null||s.forEach((l,u)=>{i[l]=l,a[l]=l,o[l]=u})}),e==null||e.forEach(s=>{let l=-1;s==null||s.forEach(u=>{let f=n(u);if(f.length){f=f.sort((h,d)=>o[h]-o[d]);let c=(f.length-1)/2;for(let h=Math.floor(c),d=Math.ceil(c);h<=d;++h){let p=f[h];a[u]===u&&l{var a;let o={},s=Rie(r,e,t,i),l=i?"borderLeft":"borderRight",u=(h,d)=>{let p=s.nodes(),v=p.pop(),m={};for(;v;)m[v]?h(v):(m[v]=!0,p.push(v),p=p.concat(d(v))),v=p.pop()},f=h=>{o[h]=(s.inEdges(h)||[]).reduce((d,p)=>Math.max(d,(o[p.v]||0)+s.edge(p)),0)},c=h=>{let d=(s.outEdges(h)||[]).reduce((v,m)=>Math.min(v,(o[m.w]||0)-s.edge(m)),Number.POSITIVE_INFINITY),p=r.node(h);d!==Number.POSITIVE_INFINITY&&p.borderType!==l&&(o[h]=Math.max(o[h],d))};return u(f,s.predecessors.bind(s)),u(c,s.successors.bind(s)),(a=Object.values(n))===null||a===void 0||a.forEach(h=>{o[h]=o[t[h]]}),o},Rie=(r,e,t,n)=>{let i=new Die,a=r.graph(),o=Nie(a.nodesep,a.edgesep,n);return e==null||e.forEach(s=>{let l;s==null||s.forEach(u=>{let f=t[u];if(i.setNode(f),l){let c=t[l],h=i.edge(c,f);i.setEdge(c,f,Math.max(o(r,u,l),h||0))}l=u})}),i},omt=(r,e)=>Ni.minBy(Object.values(e),t=>{var n;let i=Number.NEGATIVE_INFINITY,a=Number.POSITIVE_INFINITY;return(n=Object.keys(t))===null||n===void 0||n.forEach(o=>{let s=t[o],l=Fie(r,o)/2;i=Math.max(s+l,i),a=Math.min(s-l,a)}),i-a});function smt(r,e){let t=Object.values(e),n=Math.min(...t),i=Math.max(...t);["u","d"].forEach(a=>{["l","r"].forEach(o=>{let s=a+o,l=r[s],u;if(l===e)return;let f=Object.values(l);u=o==="l"?n-Math.min(...f):i-Math.max(...f),u&&(r[s]={},Object.keys(l).forEach(c=>{r[s][c]=l[c]+u}))})})}var lmt=(r,e)=>{let t={};return Object.keys(r.ul).forEach(n=>{if(e)t[n]=r[e.toLowerCase()][n];else{let a=Object.values(r).map(o=>o[n]).sort((o,s)=>o-s);t[n]=(a[1]+a[2])/2}}),t};var Nie=(r,e,t)=>(n,i,a)=>{let o=n.node(i),s=n.node(a),l=0,u;if(l+=o.width/2,o.hasOwnProperty("labelpos"))switch((o.labelpos||"").toLowerCase()){case"l":u=-o.width/2;break;case"r":u=o.width/2;break}if(u&&(l+=t?u:-u),u=0,l+=(o.dummy?e:r)/2,l+=(s.dummy?e:r)/2,l+=s.width/2,s.hasOwnProperty("labelpos"))switch((s.labelpos||"").toLowerCase()){case"l":u=s.width/2;break;case"r":u=-s.width/2;break}return u&&(l+=t?u:-u),u=0,l},Fie=(r,e)=>{var t;return((t=r.node(e))===null||t===void 0?void 0:t.width)||0};var Bie=r=>{let e=Ni.buildLayerMatrix(r),t=r.graph().ranksep,n=0;e==null||e.forEach(i=>{let a=i.map(s=>r.node(s).height),o=Math.max(...a);i==null||i.forEach(s=>{r.node(s).y=n+o/2}),n+=o+t})},Gie=r=>{let e=Ni.buildLayerMatrix(r),t=Object.assign(emt(r,e),rmt(r,e)),n={},i;["u","d"].forEach(o=>{i=o==="u"?e:Object.values(e).reverse(),["l","r"].forEach(s=>{s==="r"&&(i=i.map(c=>Object.values(c).reverse()));let l=(o==="u"?r.predecessors:r.successors).bind(r),u=imt(r,i,t,l),f=amt(r,i,u.root,u.align,s==="r");s==="r"&&Object.keys(f).forEach(c=>f[c]=-f[c]),n[o+s]=f})});let a=omt(r,n);return a&&smt(n,a),lmt(n,r.graph().align)},zie=r=>{var e;r=Ni.asNonCompoundGraph(r),Bie(r);let t=Gie(r);(e=Object.keys(t))===null||e===void 0||e.forEach(n=>{r.node(n).x=t[n]})},umt=zie;var Uie=(r,e)=>{let n=r.nodes().filter(o=>{var s;return!((s=r.children(o))===null||s===void 0?void 0:s.length)}).map(o=>r.node(o).rank),i=Math.max(...n),a=[];for(let o=0;o{let s=r.node(o);!s||s.dummy||isNaN(s.rank)||(s.fixorder=a[s.rank].length,a[s.rank].push(o))})},fmt=Uie;var jie=Ko.Graph,Wie=(r,e)=>{let t=e&&e.debugTiming?Ni.time:Ni.notime;t("layout",()=>{e&&!e.keepNodeOrder&&e.prevGraph&&t(" inheritOrder",()=>{Hie(r,e.prevGraph)});let n=t(" buildLayoutGraph",()=>Qie(r));e&&e.edgeLabelSpace===!1||t(" makeSpaceForEdgeLabels",()=>{Jie(n)});try{t(" runLayout",()=>{Vie(n,t,e)})}catch(i){if(i.message==="Not possible to find intersection inside of the rectangle"){console.error(`The following error may be caused by improper layer setting, please make sure your manual layer setting does not violate the graph's structure: +`,i);return}throw i}t(" updateInputGraph",()=>{Yie(r,n)})})},Vie=(r,e,t)=>{e(" removeSelfEdges",()=>{lae(r)}),e(" acyclic",()=>{k8.run(r)}),e(" nestingGraph.run",()=>{W8.run(r)}),e(" rank",()=>{Fvt(Ni.asNonCompoundGraph(r))}),e(" injectEdgeLabelProxies",()=>{tae(r)}),e(" removeEmptyRanks",()=>{F8(r)}),e(" nestingGraph.cleanup",()=>{W8.cleanup(r)}),e(" normalizeRanks",()=>{N8(r)}),e(" assignRankMinMax",()=>{eae(r)}),e(" removeEdgeLabelProxies",()=>{rae(r)}),e(" normalize.run",()=>{z8.run(r)}),e(" parentDummyChains",()=>{Bvt(r)}),e(" addBorderSegments",()=>{Uvt(r)}),t&&t.keepNodeOrder&&e(" initDataOrder",()=>{fmt(r,t.nodeOrder)}),e(" order",()=>{tmt(r)}),e(" insertSelfEdges",()=>{uae(r)}),e(" adjustCoordinateSystem",()=>{Y8.adjust(r)}),e(" position",()=>{umt(r)}),e(" positionSelfEdges",()=>{fae(r)}),e(" removeBorderNodes",()=>{sae(r)}),e(" normalize.undo",()=>{z8.undo(r)}),e(" fixupEdgeLabelCoords",()=>{aae(r)}),e(" undoCoordinateSystem",()=>{Y8.undo(r)}),e(" translateGraph",()=>{nae(r)}),e(" assignNodeIntersects",()=>{iae(r)}),e(" reversePoints",()=>{oae(r)}),e(" acyclic.undo",()=>{k8.undo(r)})},Hie=(r,e)=>{let t=e._nodes||{};r.nodes().forEach(n=>{let i=r.node(n);t[n]!==void 0?(i.fixorder=t[n]._order,delete t[n]._order):delete i.fixorder})},Yie=(r,e)=>{r.nodes().forEach(t=>{var n;let i=r.node(t),a=e.node(t);i&&(i.x=a.x,i.y=a.y,i._order=a.order,i._rank=a.rank,((n=e.children(t))===null||n===void 0?void 0:n.length)&&(i.width=a.width,i.height=a.height))}),r.edges().forEach(t=>{let n=r.edge(t),i=e.edge(t);n.points=i.points,i.hasOwnProperty("x")&&(n.x=i.x,n.y=i.y)}),r.graph().width=e.graph().width,r.graph().height=e.graph().height},Xie=["nodesep","edgesep","ranksep","marginx","marginy"],qie={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},Z8=["acyclicer","ranker","rankdir","align"],Kie=["width","height","layer","fixorder"],cmt={width:0,height:0},Zie=["minlen","weight","width","height","labeloffset"],$ie={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},$8=["labelpos"],Qie=r=>{let e=new jie({multigraph:!0,compound:!0}),t=J8(r.graph()),n={};return Z8==null||Z8.forEach(i=>{t[i]!==void 0&&(n[i]=t[i])}),e.setGraph(Object.assign({},qie,Q8(t,Xie),n)),r.nodes().forEach(i=>{let a=J8(r.node(i)),o=Q8(a,Kie);Object.keys(cmt).forEach(s=>{o[s]===void 0&&(o[s]=cmt[s])}),e.setNode(i,o),e.setParent(i,r.parent(i))}),r.edges().forEach(i=>{let a=J8(r.edge(i)),o={};$8==null||$8.forEach(s=>{a[s]!==void 0&&(o[s]=a[s])}),e.setEdge(i,Object.assign({},$ie,Q8(a,Zie),o))}),e},Jie=r=>{let e=r.graph();e.ranksep||(e.ranksep=0),e.ranksep/=2,r.nodes().forEach(t=>{let n=r.node(t);isNaN(n.layer)||(n.layer?n.layer*=2:n.layer=0)}),r.edges().forEach(t=>{var n;let i=r.edge(t);i.minlen*=2,((n=i.labelpos)===null||n===void 0?void 0:n.toLowerCase())!=="c"&&(e.rankdir==="TB"||e.rankdir==="BT"?i.width+=i.labeloffset:i.height+=i.labeloffset)})},tae=r=>{r.edges().forEach(e=>{let t=r.edge(e);if(t.width&&t.height){let n=r.node(e.v),i=r.node(e.w),a={e,rank:(i.rank-n.rank)/2+n.rank};Ni.addDummyNode(r,"edge-proxy",a,"_ep")}})},eae=r=>{let e=0;r.nodes().forEach(t=>{let n=r.node(t);n.borderTop&&(n.minRank=r.node(n.borderTop).rank,n.maxRank=r.node(n.borderBottom).rank,e=Math.max(e,n.maxRank||-1/0))}),r.graph().maxRank=e},rae=r=>{r.nodes().forEach(e=>{let t=r.node(e);t.dummy==="edge-proxy"&&(r.edge(t.e).labelRank=t.rank,r.removeNode(e))})},nae=r=>{let e=Number.POSITIVE_INFINITY,t=0,n=Number.POSITIVE_INFINITY,i=0,a=r.graph(),o=a.marginx||0,s=a.marginy||0,l=u=>{if(!u)return;let f=u.x,c=u.y,h=u.width,d=u.height;!isNaN(f)&&!isNaN(h)&&(e=Math.min(e,f-h/2),t=Math.max(t,f+h/2)),!isNaN(c)&&!isNaN(d)&&(n=Math.min(n,c-d/2),i=Math.max(i,c+d/2))};r.nodes().forEach(u=>{l(r.node(u))}),r.edges().forEach(u=>{let f=r.edge(u);f.hasOwnProperty("x")&&l(f)}),e-=o,n-=s,r.nodes().forEach(u=>{let f=r.node(u);f.x-=e,f.y-=n}),r.edges().forEach(u=>{var f;let c=r.edge(u);(f=c.points)===null||f===void 0||f.forEach(h=>{h.x-=e,h.y-=n}),c.hasOwnProperty("x")&&(c.x-=e),c.hasOwnProperty("y")&&(c.y-=n)}),a.width=t-e+o,a.height=i-n+s},iae=r=>{r.edges().forEach(e=>{let t=r.edge(e),n=r.node(e.v),i=r.node(e.w),a,o;t.points?(a=t.points[0],o=t.points[t.points.length-1]):(t.points=[],a=i,o=n),t.points.unshift(Ni.intersectRect(n,a)),t.points.push(Ni.intersectRect(i,o))})},aae=r=>{r.edges().forEach(e=>{let t=r.edge(e);if(t.hasOwnProperty("x"))switch((t.labelpos==="l"||t.labelpos==="r")&&(t.width-=t.labeloffset),t.labelpos){case"l":t.x-=t.width/2+t.labeloffset;break;case"r":t.x+=t.width/2+t.labeloffset;break}})},oae=r=>{r.edges().forEach(e=>{let t=r.edge(e);t.reversed&&t.points.reverse()})},sae=r=>{r.nodes().forEach(e=>{var t,n,i;if((t=r.children(e))===null||t===void 0?void 0:t.length){let a=r.node(e),o=r.node(a.borderTop),s=r.node(a.borderBottom),l=r.node(a.borderLeft[((n=a.borderLeft)===null||n===void 0?void 0:n.length)-1]),u=r.node(a.borderRight[((i=a.borderRight)===null||i===void 0?void 0:i.length)-1]);a.width=Math.abs((u==null?void 0:u.x)-(l==null?void 0:l.x))||10,a.height=Math.abs((s==null?void 0:s.y)-(o==null?void 0:o.y))||10,a.x=((l==null?void 0:l.x)||0)+a.width/2,a.y=((o==null?void 0:o.y)||0)+a.height/2}}),r.nodes().forEach(e=>{r.node(e).dummy==="border"&&r.removeNode(e)})},lae=r=>{r.edges().forEach(e=>{if(e.v===e.w){let t=r.node(e.v);t.selfEdges||(t.selfEdges=[]),t.selfEdges.push({e,label:r.edge(e)}),r.removeEdge(e)}})},uae=r=>{let e=Ni.buildLayerMatrix(r);e==null||e.forEach(t=>{let n=0;t==null||t.forEach((i,a)=>{var o;let s=r.node(i);s.order=a+n,(o=s.selfEdges)===null||o===void 0||o.forEach(l=>{Ni.addDummyNode(r,"selfedge",{width:l.label.width,height:l.label.height,rank:s.rank,order:a+ ++n,e:l.e,label:l.label},"_se")}),delete s.selfEdges})})},fae=r=>{r.nodes().forEach(e=>{let t=r.node(e);if(t.dummy==="selfedge"){let n=r.node(t.e.v),i=n.x+n.width/2,a=n.y,o=t.x-i,s=n.height/2;r.setEdge(t.e,t.label),r.removeNode(e),t.label.points=[{x:i+2*o/3,y:a-s},{x:i+5*o/6,y:a-s},{y:a,x:i+o},{x:i+5*o/6,y:a+s},{x:i+2*o/3,y:a+s}],t.label.x=t.x,t.label.y=t.y}})},Q8=(r,e)=>{let t={};return e==null||e.forEach(n=>{r[n]!==void 0&&(t[n]=+r[n])}),t},J8=r=>{let e={};return Object.keys(r).forEach(t=>{let n=r[t];e[t.toLowerCase()]=n}),e},hmt=Wie;var mR={graphlib:Ko,layout:hmt,util:{time:B8,notime:G8}};var yg=class extends li{constructor(e){super();this.rankdir="TB",this.nodesep=50,this.ranksep=50,this.controlPoints=!1,this.sortByCombo=!1,this.edgeLabelSpace=!0,this.nodes=[],this.edges=[],this.onLayoutEnd=()=>{},this.layoutNode=t=>{let n=this,{nodes:i}=n,a=i.find(o=>o.id===t);return a?a.layout!==!1:!0},this.updateCfg(e)}getDefaultCfg(){return{rankdir:"TB",align:void 0,nodeSize:void 0,nodesepFunc:void 0,ranksepFunc:void 0,nodesep:50,ranksep:50,controlPoints:!1}}execute(){let e=this,{nodes:t,nodeSize:n,rankdir:i,combos:a,begin:o}=e;if(!t)return;let s=e.edges||[],l=new mR.graphlib.Graph({multigraph:!0,compound:!0}),u;n?ha(n)?u=()=>n:u=()=>[n,n]:u=v=>v.size?ha(v.size)?v.size:co(v.size)?[v.size.width||40,v.size.height||40]:[v.size,v.size]:[40,40];let f=gR(e.nodesepFunc,e.nodesep,50),c=gR(e.ranksepFunc,e.ranksep,50);(i==="LR"||i==="RL")&&(f=gR(e.ranksepFunc,e.ranksep,50),c=gR(e.nodesepFunc,e.nodesep,50)),l.setDefaultEdgeLabel(()=>({})),l.setGraph(e);let h={};t.filter(v=>v.layout!==!1).forEach(v=>{let m=u(v),g=c(v),x=f(v),b=m[0]+2*x,S=m[1]+2*g,C=v.layer;je(C)?l.setNode(v.id,{width:b,height:S,layer:C}):l.setNode(v.id,{width:b,height:S}),this.sortByCombo&&v.comboId&&(h[v.comboId]||(h[v.comboId]=!0,l.setNode(v.comboId,{})),l.setParent(v.id,v.comboId))}),this.sortByCombo&&a&&a.forEach(v=>{!v.parentId||(h[v.parentId]||(h[v.parentId]=!0,l.setNode(v.parentId,{})),l.setParent(v.id,v.parentId))}),s.forEach(v=>{let m=xn(v,"source"),g=xn(v,"target");this.layoutNode(m)&&this.layoutNode(g)&&l.setEdge(m,g,{weight:v.weight||1})});let d;e.preset&&(d=new mR.graphlib.Graph({multigraph:!0,compound:!0}),e.preset.nodes.forEach(v=>{d==null||d.setNode(v.id,v)})),mR.layout(l,{prevGraph:d,edgeLabelSpace:e.edgeLabelSpace,keepNodeOrder:Boolean(!!e.nodeOrder),nodeOrder:e.nodeOrder});let p=[0,0];if(o){let v=1/0,m=1/0;l.nodes().forEach(g=>{let x=l.node(g);v>x.x&&(v=x.x),m>x.y&&(m=x.y)}),l.edges().forEach(g=>{l.edge(g).points.forEach(b=>{v>b.x&&(v=b.x),m>b.y&&(m=b.y)})}),p[0]=o[0]-v,p[1]=o[1]-m}return l.nodes().forEach(v=>{let m=l.node(v),g=t.findIndex(x=>x.id===v);!t[g]||(t[g].x=m.x+p[0],t[g].y=m.y+p[1],t[g]._order=m._order)}),l.edges().forEach(v=>{let m=l.edge(v),g=s.findIndex(x=>{let b=xn(x,"source"),S=xn(x,"target");return b===v.v&&S===v.w});e.edgeLabelSpace&&e.controlPoints&&s[g].type!=="loop"&&(s[g].controlPoints=m.points.slice(1,m.points.length-1),s[g].controlPoints.forEach(x=>{x.x+=p[0],x.y+=p[1]}))}),e.onLayoutEnd&&e.onLayoutEnd(),{nodes:t,edges:s}}getType(){return"dagre"}};function gR(r,e,t){let n;return r?n=r:je(e)?n=()=>e:n=()=>t,n}var cae=Object.prototype.toString;function xg(r){return cae.call(r).endsWith("Array]")}function hae(r){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!xg(r))throw new TypeError("input must be an array");if(r.length===0)throw new TypeError("input must not be empty");var t=e.fromIndex,n=t===void 0?0:t,i=e.toIndex,a=i===void 0?r.length:i;if(n<0||n>=r.length||!Number.isInteger(n))throw new Error("fromIndex must be a positive integer smaller than length");if(a<=n||a>r.length||!Number.isInteger(a))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var o=r[n],s=n+1;so&&(o=r[s]);return o}var dmt=hae;function dae(r){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!xg(r))throw new TypeError("input must be an array");if(r.length===0)throw new TypeError("input must not be empty");var t=e.fromIndex,n=t===void 0?0:t,i=e.toIndex,a=i===void 0?r.length:i;if(n<0||n>=r.length||!Number.isInteger(n))throw new Error("fromIndex must be a positive integer smaller than length");if(a<=n||a>r.length||!Number.isInteger(a))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var o=r[n],s=n+1;s1&&arguments[1]!==void 0?arguments[1]:{};if(xg(r)){if(r.length===0)throw new TypeError("input must not be empty")}else throw new TypeError("input must be an array");var t;if(e.output!==void 0){if(!xg(e.output))throw new TypeError("output option must be an array if specified");t=e.output}else t=new Array(r.length);var n=pmt(r),i=dmt(r);if(n===i)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var a=e.min,o=a===void 0?e.autoMinMax?n:0:a,s=e.max,l=s===void 0?e.autoMinMax?i:1:s;if(o>=l)throw new RangeError("min option must be smaller than max option");for(var u=(l-o)/(i-n),f=0;f>n);return this},r.prototype.signPropagatingRightShiftM=function(n){if(n=e.checkMatrix(n),this.rows!==n.rows||this.columns!==n.columns)throw new RangeError("Matrices dimensions must be equal");for(let i=0;i>n.get(i,a));return this},r.signPropagatingRightShift=function(n,i){return new e(n).signPropagatingRightShift(i)},r.prototype.rightShift=function(n){return typeof n=="number"?this.rightShiftS(n):this.rightShiftM(n)},r.prototype.rightShiftS=function(n){for(let i=0;i>>n);return this},r.prototype.rightShiftM=function(n){if(n=e.checkMatrix(n),this.rows!==n.rows||this.columns!==n.columns)throw new RangeError("Matrices dimensions must be equal");for(let i=0;i>>n.get(i,a));return this},r.rightShift=function(n,i){return new e(n).rightShift(i)},r.prototype.zeroFillRightShift=r.prototype.rightShift,r.prototype.zeroFillRightShiftS=r.prototype.rightShiftS,r.prototype.zeroFillRightShiftM=r.prototype.rightShiftM,r.zeroFillRightShift=r.rightShift,r.prototype.not=function(){for(let n=0;nn)throw new RangeError("Row index out of range")}function xf(r,e,t){let n=t?r.columns:r.columns-1;if(e<0||e>n)throw new RangeError("Column index out of range")}function j0(r,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==r.columns)throw new RangeError("vector size must be the same as the number of columns");return e}function W0(r,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==r.rows)throw new RangeError("vector size must be the same as the number of rows");return e}function ymt(r,e,t){return{row:mae(r,e),column:gae(r,t)}}function mae(r,e){if(typeof e!="object")throw new TypeError("unexpected type for row indices");if(e.some(n=>n<0||n>=r.rows))throw new RangeError("row indices are out of range");return Array.isArray(e)||(e=Array.from(e)),e}function gae(r,e){if(typeof e!="object")throw new TypeError("unexpected type for column indices");if(e.some(n=>n<0||n>=r.columns))throw new RangeError("column indices are out of range");return Array.isArray(e)||(e=Array.from(e)),e}function rH(r,e,t,n,i){if(arguments.length!==5)throw new RangeError("expected 4 arguments");if(xR("startRow",e),xR("endRow",t),xR("startColumn",n),xR("endColumn",i),e>t||n>i||e<0||e>=r.rows||t<0||t>=r.rows||n<0||n>=r.columns||i<0||i>=r.columns)throw new RangeError("Submatrix indices are out of range")}function bM(r,e=0){let t=[];for(let n=0;n=a)throw new RangeError("min must be smaller than max");let s=a-i,l=new Lr(e,t);for(let u=0;un?(a=!0,n=t):(i=!1,a=!0);e++}return i}isReducedEchelonForm(){let e=0,t=0,n=-1,i=!0,a=!1;for(;en?(a=!0,n=t):(i=!1,a=!0);for(let o=t+1;oe.get(i,n)&&(i=a);if(e.get(i,n)===0)n++;else{e.swapRows(t,i);let a=e.get(t,n);for(let o=n;o=0;)if(e.maxRow(i)===0)i--;else{let a=0,o=!1;for(;ae&&(e=this.get(t,n));return e}maxIndex(){V0(this);let e=this.get(0,0),t=[0,0];for(let n=0;ne&&(e=this.get(n,i),t[0]=n,t[1]=i);return t}min(){if(this.isEmpty())return NaN;let e=this.get(0,0);for(let t=0;tt&&(t=this.get(e,n));return t}maxRowIndex(e){yf(this,e),V0(this);let t=this.get(e,0),n=[e,0];for(let i=1;it&&(t=this.get(e,i),n[1]=i);return n}minRow(e){if(yf(this,e),this.isEmpty())return NaN;let t=this.get(e,0);for(let n=1;nt&&(t=this.get(n,e));return t}maxColumnIndex(e){xf(this,e),V0(this);let t=this.get(0,e),n=[0,e];for(let i=1;it&&(t=this.get(i,e),n[0]=i);return n}minColumn(e){if(xf(this,e),this.isEmpty())return NaN;let t=this.get(0,e);for(let n=1;n=n)throw new RangeError("min must be smaller than max");let i=new Lr(this.rows,this.columns);for(let a=0;a0&&tH(o,{min:t,max:n,output:o}),i.setRow(a,o)}return i}scaleColumns(e={}){if(typeof e!="object")throw new TypeError("options must be an object");let{min:t=0,max:n=1}=e;if(!Number.isFinite(t))throw new TypeError("min must be a number");if(!Number.isFinite(n))throw new TypeError("max must be a number");if(t>=n)throw new RangeError("min must be smaller than max");let i=new Lr(this.rows,this.columns);for(let a=0;an||t<0||t>=this.columns||n<0||n>=this.columns)throw new RangeError("Argument out of range");let i=new Lr(e.length,n-t+1);for(let a=0;a=this.rows)throw new RangeError(`Row index out of range: ${e[a]}`);i.set(a,o-t,this.get(e[a],o))}return i}subMatrixColumn(e,t,n){if(t===void 0&&(t=0),n===void 0&&(n=this.rows-1),t>n||t<0||t>=this.rows||n<0||n>=this.rows)throw new RangeError("Argument out of range");let i=new Lr(n-t+1,e.length);for(let a=0;a=this.columns)throw new RangeError(`Column index out of range: ${e[a]}`);i.set(o-t,a,this.get(o,e[a]))}return i}setSubMatrix(e,t,n){if(e=Lr.checkMatrix(e),e.isEmpty())return this;let i=t+e.rows-1,a=n+e.columns-1;rH(this,t,i,n,a);for(let o=0;o=0)if(this.data=[],Number.isInteger(t)&&t>=0)for(let n=0;nMath.abs(e)?(t=e/r,Math.abs(r)*Math.sqrt(1+t*t)):e!==0?(t=r/e,Math.abs(e)*Math.sqrt(1+t*t)):0}var bg=class{constructor(e,t={}){if(e=bR.checkMatrix(e),e.isEmpty())throw new Error("Matrix must be non-empty");let n=e.rows,i=e.columns,{computeLeftSingularVectors:a=!0,computeRightSingularVectors:o=!0,autoTranspose:s=!1}=t,l=Boolean(a),u=Boolean(o),f=!1,c;if(n=0;M--)if(p[M]!==0){for(let O=M+1;O=0;M--){if(M0;){let M,O;for(M=A-2;M>=-1&&M!==-1;M--){let F=Number.MIN_VALUE+L*Math.abs(p[M]+Math.abs(p[M+1]));if(Math.abs(g[M])<=F||Number.isNaN(g[M])){g[M]=0;break}}if(M===A-2)O=4;else{let F;for(F=A-1;F>=M&&F!==M;F--){let k=(F!==A?Math.abs(g[F]):0)+(F!==M+1?Math.abs(g[F-1]):0);if(Math.abs(p[F])<=L*k){p[F]=0;break}}F===M?O=3:F===A-1?O=1:(O=2,M=F)}switch(M++,O){case 1:{let F=g[A-2];g[A-2]=0;for(let k=A-2;k>=M;k--){let G=H0(p[k],F),D=p[k]/G,N=F/G;if(p[k]=G,k!==M&&(F=-N*g[k-1],g[k-1]=D*g[k-1]),u)for(let z=0;z=p[M+1]);){let F=p[M];if(p[M]=p[M+1],p[M+1]=F,u&&Mt&&a.set(f,c,e.get(f,c)/this.s[c]);let o=this.U,s=o.rows,l=o.columns,u=new Lr(n,s);for(let f=0;fe&&t++;return t}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return Lr.diag(this.s)}};var _R=class{constructor(e){this.distances=e.distances,this.dimension=e.dimension||2,this.linkDistance=e.linkDistance}layout(){let e=this,{dimension:t,distances:n,linkDistance:i}=e;try{let a=Lr.mul(Lr.pow(n,2),-.5),o=a.mean("row"),s=a.mean("column"),l=a.mean();a.add(l).subRowVector(o).subColumnVector(s);let u=new bg(a),f=Lr.sqrt(u.diagonalMatrix).diagonal();return u.leftSingularVectors.toJSON().map(c=>Lr.mul([c],[f]).toJSON()[0].splice(0,t))}catch(a){let o=[];for(let s=0;s{n[l]={x:0,y:0}}),e.getRepulsion(),e.updatePositions();return t}getRepulsion(){let e=this,t=e.positions,n=e.nodes,i=e.disp,a=e.k,o=e.radii||[];t.forEach((s,l)=>{i[l]={x:0,y:0},t.forEach((u,f)=>{if(l===f||o[l]!==o[f])return;let c=s[0]-u[0],h=s[1]-u[1],d=Math.sqrt(c*c+h*h);if(d===0){d=1;let p=l>f?1:-1;c=.01*p,h=.01*p}if(d{let c=t[f][0]-t[o][0],h=t[f][1]-t[o][1],d=Math.sqrt(c*c+h*h),p=h/d,v=-c/d,m=Math.sqrt(u.x*u.x+u.y*u.y),g=Math.acos((p*u.x+v*u.y)/m);g>Math.PI/2&&(g-=Math.PI/2,p*=-1,v*=-1);let x=Math.cos(g)*m;u.x=p*x,u.y=v*x});let l=e.radii;t.forEach((u,f)=>{if(f===o)return;let c=Math.sqrt(n[f].x*n[f].x+n[f].y*n[f].y);if(c>0&&f!==o){let h=Math.min(s*(i/yae),c);if(u[0]+=n[f].x/c*h,u[1]+=n[f].y/c*h,a){let d=u[0]-t[o][0],p=u[1]-t[o][1],v=Math.sqrt(d*d+p*p);d=d/v*l[f],p=p/v*l[f],u[0]=t[o][0]+d,u[1]=t[o][1]+p}}})}};function xae(r){let e=r.length,t=r[0].length,n=[];for(let i=0;i{n.id===e&&(t=i)}),t}function Bmt(r,e){return Math.sqrt((r[0]-e[0])*(r[0]-e[0])+(r[1]-e[1])*(r[1]-e[1]))}var H_=class extends li{constructor(e){super();this.maxIteration=1e3,this.focusNode=null,this.unitRadius=null,this.linkDistance=50,this.preventOverlap=!1,this.strictRadial=!0,this.maxPreventOverlapIteration=200,this.sortStrength=10,this.nodes=[],this.edges=[],this.updateCfg(e)}getDefaultCfg(){return{maxIteration:1e3,focusNode:null,unitRadius:null,linkDistance:50,preventOverlap:!1,nodeSize:void 0,nodeSpacing:void 0,strictRadial:!0,maxPreventOverlapIteration:200,sortBy:void 0,sortStrength:10}}execute(){let e=this,t=e.nodes,n=e.edges||[];if(!t||t.length===0){e.onLayoutEnd&&e.onLayoutEnd();return}!e.width&&typeof window!="undefined"&&(e.width=window.innerWidth),!e.height&&typeof window!="undefined"&&(e.height=window.innerHeight),e.center||(e.center=[e.width/2,e.height/2]);let i=e.center;if(t.length===1){t[0].x=i[0],t[0].y=i[1],e.onLayoutEnd&&e.onLayoutEnd();return}let a=e.linkDistance,o=null;if(mg(e.focusNode)){let M=!1;for(let O=0;Oi[0]?i[0]:h-i[0],v=d-i[1]>i[1]?i[1]:d-i[1];p===0&&(p=h/2),v===0&&(v=d/2);let m=v>p?p:v,g=Math.max(...c),x=[];c.forEach((M,O)=>{e.unitRadius||(e.unitRadius=m/g),x[O]=M*e.unitRadius}),e.radii=x;let b=e.eIdealDisMatrix();e.eIdealDistances=b;let S=xae(b);e.weights=S;let w=new _R({linkDistance:a,distances:b}).layout();w.forEach(M=>{uM(M[0])&&(M[0]=Math.random()*a),uM(M[1])&&(M[1]=Math.random()*a)}),e.positions=w,w.forEach((M,O)=>{t[O].x=M[0]+i[0],t[O].y=M[1]+i[1]}),w.forEach(M=>{M[0]-=w[s][0],M[1]-=w[s][1]}),e.run();let A=e.preventOverlap,I=e.nodeSize,P,L=e.strictRadial;if(A){let M=e.nodeSpacing,O;je(M)?O=()=>M:mf(M)?O=M:O=()=>0,I?ha(I)?P=G=>(I[0]>I[1]?I[0]:I[1])+O(G):P=G=>I+O(G):P=G=>G.size?ha(G.size)?(G.size[0]>G.size[1]?G.size[0]:G.size[1])+O(G):co(G.size)?(G.size.width>G.size.height?G.size.width:G.size.height)+O(G):G.size+O(G):10+O(G);let F={nodes:t,nodeSizeFunc:P,adjMatrix:l,positions:w,radii:x,height:d,width:h,strictRadial:L,focusID:s,iterations:e.maxPreventOverlapIteration||200,k:w.length/4.5};w=new SR(F).layout()}return w.forEach((M,O)=>{t[O].x=M[0]+i[0],t[O].y=M[1]+i[1]}),e.onLayoutEnd&&e.onLayoutEnd(),{nodes:t,edges:n}}run(){let e=this,t=e.maxIteration,n=e.positions||[],i=e.weights||[],a=e.eIdealDistances||[],o=e.radii||[];for(let s=0;s<=t;s++){let l=s/t;e.oneIteration(l,n,o,a,i)}}oneIteration(e,t,n,i,a){let o=this,s=1-e,l=o.focusIndex;t.forEach((u,f)=>{let c=Bmt(u,[0,0]),h=c===0?0:1/c;if(f===l)return;let d=0,p=0,v=0;t.forEach((g,x)=>{if(f===x)return;let b=Bmt(u,g),S=b===0?0:1/b,C=i[x][f];v+=a[f][x],d+=a[f][x]*(g[0]+C*(u[0]-g[0])*S),p+=a[f][x]*(g[1]+C*(u[1]-g[1])*S)});let m=n[f]===0?0:1/n[f];v*=s,v+=e*m*m,d*=s,d+=e*m*u[0]*h,u[0]=d/v,p*=s,p+=e*m*u[1]*h,u[1]=p/v})}eIdealDisMatrix(){let e=this,t=e.nodes;if(!t)return[];let n=e.distances,i=e.linkDistance,a=e.radii||[],o=e.unitRadius||50,s=[];return n&&n.forEach((l,u)=>{let f=[];l.forEach((c,h)=>{if(u===h)f.push(0);else if(a[u]===a[h])if(e.sortBy==="data")f.push(c*(Math.abs(u-h)*e.sortStrength)/(a[u]/o));else if(e.sortBy){let d=t[u][e.sortBy]||0,p=t[h][e.sortBy]||0;mg(d)&&(d=d.charCodeAt(0)),mg(p)&&(p=p.charCodeAt(0)),f.push(c*(Math.abs(d-p)*e.sortStrength)/(a[u]/o))}else f.push(c*i/(a[u]/o));else{let d=(i+o)/2;f.push(c*d)}}),s.push(f)}),s}handleInfinity(e,t,n){let i=e.length;for(let a=0;an?e[t][i]:n);return n}getType(){return"radial"}};var Y_=class extends li{constructor(e){super();this.nodeSize=30,this.minNodeSpacing=10,this.preventOverlap=!1,this.equidistant=!1,this.startAngle=3/2*Math.PI,this.clockwise=!0,this.sortBy="degree",this.nodes=[],this.edges=[],this.width=300,this.height=300,this.onLayoutEnd=()=>{},this.updateCfg(e)}getDefaultCfg(){return{nodeSize:30,minNodeSpacing:10,preventOverlap:!1,sweep:void 0,equidistant:!1,startAngle:3/2*Math.PI,clockwise:!0,maxLevelDiff:void 0,sortBy:"degree"}}execute(){let e=this,t=e.nodes,n=e.edges,i=t.length;if(i===0){e.onLayoutEnd&&e.onLayoutEnd();return}!e.width&&typeof window!="undefined"&&(e.width=window.innerWidth),!e.height&&typeof window!="undefined"&&(e.height=window.innerHeight),e.center||(e.center=[e.width/2,e.height/2]);let a=e.center;if(i===1){t[0].x=a[0],t[0].y=a[1],e.onLayoutEnd&&e.onLayoutEnd();return}let o=[],s;ha(e.nodeSize)?s=Math.max(e.nodeSize[0],e.nodeSize[1]):s=e.nodeSize,t.forEach(p=>{o.push(p);let v=s;ha(p.size)?v=Math.max(p.size[0],p.size[1]):je(p.size)?v=p.size:co(p.size)&&(v=Math.max(p.size.width,p.size.height)),s=Math.max(s,v)}),e.clockwise=e.counterclockwise!==void 0?!e.counterclockwise:e.clockwise;let l={},u={};if(o.forEach((p,v)=>{l[p.id]=p,u[p.id]=v}),(e.sortBy==="degree"||!mg(e.sortBy)||o[0][e.sortBy]===void 0)&&(e.sortBy="degree",!je(t[0].degree))){let p=$h(t.length,u,n);o.forEach((v,m)=>{v.degree=p[m]})}o.sort((p,v)=>v[e.sortBy]-p[e.sortBy]),e.maxValueNode=o[0],e.maxLevelDiff=e.maxLevelDiff||e.maxValueNode[e.sortBy]/4;let f=[[]],c=f[0];o.forEach(p=>{if(c.length>0){let v=Math.abs(c[0][e.sortBy]-p[e.sortBy]);e.maxLevelDiff&&v>=e.maxLevelDiff&&(c=[],f.push(c))}c.push(p)});let h=s+e.minNodeSpacing;if(!e.preventOverlap){let p=f.length>0&&f[0].length>1,m=(Math.min(e.width,e.height)/2-h)/(f.length+(p?1:0));h=Math.min(h,m)}let d=0;if(f.forEach(p=>{let v=e.sweep;v===void 0&&(v=2*Math.PI-2*Math.PI/p.length);let m=p.dTheta=v/Math.max(1,p.length-1);if(p.length>1&&e.preventOverlap){let g=Math.cos(m)-Math.cos(0),x=Math.sin(m)-Math.sin(0),b=Math.sqrt(h*h/(g*g+x*x));d=Math.max(b,d)}p.r=d,d+=h}),e.equidistant){let p=0,v=0;for(let m=0;m{g===0&&(v=m.r),m.r=v,v+=p})}return f.forEach(p=>{let v=p.dTheta,m=p.r;p.forEach((g,x)=>{let b=e.startAngle+(e.clockwise?1:-1)*v*x;g.x=a[0]+m*Math.cos(b),g.y=a[1]+m*Math.sin(b)})}),e.onLayoutEnd&&e.onLayoutEnd(),{nodes:t,edges:n}}getType(){return"concentric"}};var X_=class extends li{constructor(e){super();this.center=[0,0],this.linkDistance=50,this.nodes=[],this.edges=[],this.onLayoutEnd=()=>{},this.updateCfg(e)}getDefaultCfg(){return{center:[0,0],linkDistance:50}}execute(){let e=this,{nodes:t,edges:n=[]}=e,i=e.center;if(!t||t.length===0){e.onLayoutEnd&&e.onLayoutEnd();return}if(t.length===1){t[0].x=i[0],t[0].y=i[1],e.onLayoutEnd&&e.onLayoutEnd();return}let a=e.linkDistance,o=lR({nodes:t,edges:n},!1),s=sR(o);e.handleInfinity(s);let l=Qdt(s,a);e.scaledDistances=l;let u=e.runMDS();return e.positions=u,u.forEach((f,c)=>{t[c].x=f[0]+i[0],t[c].y=f[1]+i[1]}),e.onLayoutEnd&&e.onLayoutEnd(),{nodes:t,edges:n}}runMDS(){let e=this,t=2,n=e.scaledDistances,i=Lr.mul(Lr.pow(n,2),-.5),a=i.mean("row"),o=i.mean("column"),s=i.mean();i.add(s).subRowVector(a).subColumnVector(o);let l=new bg(i),u=Lr.sqrt(l.diagonalMatrix).diagonal();return l.leftSingularVectors.toJSON().map(f=>Lr.mul([f],[u]).toJSON()[0].splice(0,t))}handleInfinity(e){let t=-999999;e.forEach(n=>{n.forEach(i=>{i!==1/0&&t{n.forEach((a,o)=>{a===1/0&&(e[i][o]=t)})})}getType(){return"mds"}};var _ae=800,q_=class extends li{constructor(e){super();this.maxIteration=1e3,this.workerEnabled=!1,this.gravity=10,this.speed=5,this.clustering=!1,this.clusterGravity=10,this.nodes=[],this.edges=[],this.width=300,this.height=300,this.nodeMap={},this.nodeIdxMap={},this.onLayoutEnd=()=>{},this.tick=()=>{},this.updateCfg(e)}getDefaultCfg(){return{maxIteration:1e3,gravity:10,speed:1,clustering:!1,clusterGravity:10}}execute(){var e,t;let n=this,i=n.nodes;if(n.timeInterval!==void 0&&typeof window!="undefined"&&window.clearInterval(n.timeInterval),!i||i.length===0){(e=n.onLayoutEnd)===null||e===void 0||e.call(n);return}!n.width&&typeof window!="undefined"&&(n.width=window.innerWidth),!n.height&&typeof window!="undefined"&&(n.height=window.innerHeight),n.center||(n.center=[n.width/2,n.height/2]);let a=n.center;if(i.length===1){i[0].x=a[0],i[0].y=a[1],(t=n.onLayoutEnd)===null||t===void 0||t.call(n);return}let o={},s={};return i.forEach((l,u)=>{je(l.x)||(l.x=Math.random()*this.width),je(l.y)||(l.y=Math.random()*this.height),o[l.id]=l,s[l.id]=u}),n.nodeMap=o,n.nodeIdxMap=s,n.run()}run(){var e;let t=this,n=t.nodes;if(!n)return;let{edges:i,maxIteration:a,workerEnabled:o,clustering:s}=t,l={};if(s&&n.forEach(u=>{l[u.cluster]===void 0&&(l[u.cluster]={name:u.cluster,cx:0,cy:0,count:0})}),o){for(let u=0;u{var f;t.runOneStep(l),u++,u>=a&&((f=t.onLayoutEnd)===null||f===void 0||f.call(t),window.clearInterval(t.timeInterval))},0)}return{nodes:n,edges:i}}runOneStep(e){var t;let n=this,i=n.nodes;if(!i)return;let{edges:a,center:o,gravity:s,speed:l,clustering:u}=n,f=n.height*n.width,c=Math.sqrt(f)/10,h=f/(i.length+1),d=Math.sqrt(h),p=[];if(i.forEach((v,m)=>{p[m]={x:0,y:0}}),n.applyCalculate(i,a,p,d,h),u){for(let m in e)e[m].cx=0,e[m].cy=0,e[m].count=0;i.forEach(m=>{let g=e[m.cluster];je(m.x)&&(g.cx+=m.x),je(m.y)&&(g.cy+=m.y),g.count++});for(let m in e)e[m].cx/=e[m].count,e[m].cy/=e[m].count;let v=n.clusterGravity||s;i.forEach((m,g)=>{if(!je(m.x)||!je(m.y))return;let x=e[m.cluster],b=Math.sqrt((m.x-x.cx)*(m.x-x.cx)+(m.y-x.cy)*(m.y-x.cy)),S=d*v;p[g].x-=S*(m.x-x.cx)/b,p[g].y-=S*(m.y-x.cy)/b})}i.forEach((v,m)=>{if(!je(v.x)||!je(v.y))return;let g=.01*d*s;p[m].x-=g*(v.x-o[0]),p[m].y-=g*(v.y-o[1])}),i.forEach((v,m)=>{if(je(v.fx)&&je(v.fy)){v.x=v.fx,v.y=v.fy;return}if(!je(v.x)||!je(v.y))return;let g=Math.sqrt(p[m].x*p[m].x+p[m].y*p[m].y);if(g>0){let x=Math.min(c*(l/_ae),g);v.x+=p[m].x/g*x,v.y+=p[m].y/g*x}}),(t=n.tick)===null||t===void 0||t.call(n)}applyCalculate(e,t,n,i,a){let o=this;o.calRepulsive(e,n,a),t&&o.calAttractive(t,n,i)}calRepulsive(e,t,n){e.forEach((i,a)=>{t[a]={x:0,y:0},e.forEach((o,s)=>{if(a===s||!je(i.x)||!je(o.x)||!je(i.y)||!je(o.y))return;let l=i.x-o.x,u=i.y-o.y,f=l*l+u*u;if(f===0){f=1;let h=a>s?1:-1;l=.01*h,u=.01*h}let c=n/f;t[a].x+=l*c,t[a].y+=u*c})})}calAttractive(e,t,n){e.forEach(i=>{let a=xn(i,"source"),o=xn(i,"target");if(!a||!o)return;let s=this.nodeIdxMap[a],l=this.nodeIdxMap[o];if(s===l)return;let u=this.nodeMap[a],f=this.nodeMap[o];if(!je(f.x)||!je(u.x)||!je(f.y)||!je(u.y))return;let c=f.x-u.x,h=f.y-u.y,d=Math.sqrt(c*c+h*h),p=d*d/n;t[l].x-=c/d*p,t[l].y-=h/d*p,t[s].x+=c/d*p,t[s].y+=h/d*p})}stop(){this.timeInterval&&typeof window!="undefined"&&window.clearInterval(this.timeInterval)}destroy(){let e=this;e.stop(),e.tick=null,e.nodes=null,e.edges=null,e.destroyed=!0}getType(){return"fruchterman"}};function Ke(r,e,t,n){!t||Object.defineProperty(r,e,{enumerable:t.enumerable,configurable:t.configurable,writable:t.writable,value:t.initializer?t.initializer.call(n):void 0})}function se(r,e){if(!(r instanceof e))throw new TypeError("Cannot call a class as a function")}function Gmt(r,e){for(var t=0;t0)return!0;var ee=v.get(Et);return ee.delete(St),ee.size>0||v.delete(Et),!0}e("deleteMetadata",P);function L(pt,Et){for(var St=pt.length-1;St>=0;--St){var Wt=pt[St],ee=Wt(Et);if(!J(ee)&&!et(ee)){if(!Y(ee))throw new TypeError;Et=ee}}return Et}function M(pt,Et,St,Wt){for(var ee=pt.length-1;ee>=0;--ee){var Ue=pt[ee],Ht=Ue(Et,St,Wt);if(!J(Ht)&&!et(Ht)){if(!$(Ht))throw new TypeError;Wt=Ht}}return Wt}function O(pt,Et,St){var Wt=v.get(pt);if(J(Wt)){if(!St)return;Wt=new h,v.set(pt,Wt)}var ee=Wt.get(Et);if(J(ee)){if(!St)return;ee=new h,Wt.set(Et,ee)}return ee}function F(pt,Et,St){var Wt=k(pt,Et,St);if(Wt)return!0;var ee=We(Et);return et(ee)?!1:F(pt,ee,St)}function k(pt,Et,St){var Wt=O(Et,St,!1);return J(Wt)?!1:dt(Wt.has(pt))}function G(pt,Et,St){var Wt=k(pt,Et,St);if(Wt)return D(pt,Et,St);var ee=We(Et);if(!et(ee))return G(pt,ee,St)}function D(pt,Et,St){var Wt=O(Et,St,!1);if(!J(Wt))return Wt.get(pt)}function N(pt,Et,St,Wt){var ee=O(St,Wt,!0);ee.set(pt,Et)}function z(pt,Et){var St=j(pt,Et),Wt=We(pt);if(Wt===null)return St;var ee=z(Wt,Et);if(ee.length<=0)return St;if(St.length<=0)return ee;for(var Ue=new d,Ht=[],ae=0,ge=St;ae=0&&ae=this._keys.length?(this._index=-1,this._keys=Et,this._values=Et):this._index++,{value:ge,done:!1}}return{value:void 0,done:!0}},Ht.prototype.throw=function(ae){throw this._index>=0&&(this._index=-1,this._keys=Et,this._values=Et),ae},Ht.prototype.return=function(ae){return this._index>=0&&(this._index=-1,this._keys=Et,this._values=Et),{value:ae,done:!0}},Ht}();return function(){function Ht(){this._keys=[],this._values=[],this._cacheKey=pt,this._cacheIndex=-2}return Object.defineProperty(Ht.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),Ht.prototype.has=function(ae){return this._find(ae,!1)>=0},Ht.prototype.get=function(ae){var ge=this._find(ae,!1);return ge>=0?this._values[ge]:void 0},Ht.prototype.set=function(ae,ge){var Ye=this._find(ae,!0);return this._values[Ye]=ge,this},Ht.prototype.delete=function(ae){var ge=this._find(ae,!1);if(ge>=0){for(var Ye=this._keys.length,Ve=ge+1;Ve-1}},{key:"create",value:function(t,n){this.lookup[t]=this.components.length;var i=new this.clazz(n||{});return this.components.push(i),this.entities.push(t),i}},{key:"remove",value:function(t){var n=this.lookup[t];n>-1&&n-1){var i=this.entities[n];if(n-1?this.components[n]:null}},{key:"getCount",value:function(){return this.components.length}},{key:"getEntityByComponentIndex",value:function(t){for(var n=0,i=Object.keys(this.lookup);nr.length)&&(e=r.length);for(var t=0,n=new Array(e);t"),Renderable:Symbol("Factory"),MeshSystem:Symbol("MeshSystem"),MeshComponentManager:Symbol("MeshComponentManager"),CullableComponentManager:Symbol("CullableComponentManager"),Geometry:Symbol("Geometry"),GeometrySystem:Symbol("GeometrySystem"),GeometryComponentManager:Symbol("GeometryComponentManager"),Material:Symbol("Material"),MaterialSystem:Symbol("MaterialSystem"),MaterialComponentManager:Symbol("MaterialComponentManager"),ForwardRenderPath:Symbol("ForwardRenderPath"),ComputeSystem:Symbol("ComputeSystem"),ComputeComponentManager:Symbol("ComputeComponentManager"),ComputeStrategy:Symbol("ComputeStrategy"),Systems:Symbol("Systems"),World:Symbol("World"),RenderEngine:Symbol("RenderEngine"),WebGPUEngine:Symbol("WebGPUEngine"),WebGLEngine:Symbol("WebGLEngine"),ShaderModuleService:Symbol("ShaderModuleService"),ConfigService:Symbol("ConfigService"),InteractorService:Symbol("InteractorService"),IEventEmitter:Symbol("IEventEmitter"),Light:Symbol("Light")};var nyt=function r(){se(this,r),this.index=void 0};var iyt=function r(){se(this,r),this.name=void 0,this.data=void 0,this.execute=void 0,this.tearDown=void 0};var ayt=function(){function r(){se(this,r),this.name=void 0,this.refCount=0,this.hasSideEffect=!1,this.devirtualize=[],this.destroy=[],this.reads=[],this.writes=[]}return be(r,[{key:"read",value:function(t){return this.reads.find(function(n){return n.index===t.index})||this.reads.push(t),t}},{key:"sample",value:function(t){return this.read(t),t}},{key:"write",value:function(t,n){var i=this.writes.find(function(l){return l.index===n.index});if(i)return n;var a=t.getResourceNode(n);a.resource.version++,a.resource.imported&&(this.hasSideEffect=!0);var o=t.createResourceNode(a.resource),s=t.getResourceNode(o);return s.writer=this,this.writes.push(o),o}}]),r}();function EM(r,e){return EM=Object.setPrototypeOf||function(n,i){return n.__proto__=i,n},EM(r,e)}function ui(r,e){if(typeof e!="function"&&e!==null)throw new TypeError("Super expression must either be null or a function");r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),Object.defineProperty(r,"prototype",{writable:!1}),e&&EM(r,e)}function hs(r){return hs=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},hs(r)}function ri(r){if(r===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return r}function fi(r,e){if(e&&(hs(e)==="object"||typeof e=="function"))return e;if(e!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return ri(r)}function Zr(r){return Zr=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},Zr(r)}var oyt=function r(){se(this,r),this.first=void 0,this.last=void 0};function Yse(r){var e=Xse();return function(){var n=Zr(r),i;if(e){var a=Zr(this).constructor;i=Reflect.construct(n,arguments,a)}else i=n.apply(this,arguments);return fi(this,i)}}function Xse(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(r){return!1}}var IH=function(r){ui(t,r);var e=Yse(t);function t(){var n;se(this,t);for(var i=arguments.length,a=new Array(i),o=0;o=r.length?{done:!0}:{done:!1,value:r[n++]}},e:function(u){throw u},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,o=!1,s;return{s:function(){t=r[Symbol.iterator]()},n:function(){var u=t.next();return a=u.done,u},e:function(u){o=!0,s=u},f:function(){try{!a&&t.return!=null&&t.return()}finally{if(o)throw s}}}}function qse(r,e){if(!!r){if(typeof r=="string")return dyt(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t==="Object"&&r.constructor&&(t=r.constructor.name),t==="Map"||t==="Set")return Array.from(r);if(t==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return dyt(r,e)}}function dyt(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,n=new Array(e);t-1&&r%1==0&&r<=Kse}function wle(r){return!!r&&hs(r)==="object"}var DH=Sle;function pyt(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(r,i).enumerable})),t.push.apply(t,n)}return t}function vyt(r){for(var e=1;e0&&arguments[0]!==void 0?arguments[0]:{vertexCount:3},n=t.vertexCount,i=cs();return this.geometry.create(i,{vertexCount:n})}},{key:"createInstancedBufferGeometry",value:function(t){var n=t.maxInstancedCount,i=t.vertexCount,a=cs();return this.geometry.create(a,{maxInstancedCount:n,vertexCount:i})}}]),r}(),Syt),byt=Ze(aN.prototype,"geometry",[gyt],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),_yt=Ze(aN.prototype,"engine",[yyt],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),aN))||xyt);function Cyt(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(r,i).enumerable})),t.push.apply(t,n)}return t}function wyt(r){for(var e=1;eh&&(h=L),Mp&&(p=O),Fm&&(m=k),n[0]=(c+h)*.5,n[1]=(d+p)*.5,n[2]=(v+m)*.5,s[0]=(h-c)*.5,s[1]=(p-d)*.5,s[2]=(m-v)*.5,this.min[0]=c,this.min[1]=d,this.min[2]=v,this.max[0]=h,this.max[1]=p,this.max[2]=m}},{key:"intersects",value:function(t){var n=this.getMax(),i=this.getMin(),a=t.getMax(),o=t.getMin();return i[0]<=a[0]&&n[0]>=o[0]&&i[1]<=a[1]&&n[1]>=o[1]&&i[2]<=a[2]&&n[2]>=o[2]}},{key:"containsPoint",value:function(t){var n=this.getMin(),i=this.getMax();return!(t[0]i[0]||t[1]i[1]||t[2]i[2])}},{key:"getNegativeFarPoint",value:function(t){return t.pnVertexFlag===273?Ft.copy(Ft.create(),this.min):t.pnVertexFlag===272?Ft.fromValues(this.min[0],this.min[1],this.max[2]):t.pnVertexFlag===257?Ft.fromValues(this.min[0],this.max[1],this.min[2]):t.pnVertexFlag===256?Ft.fromValues(this.min[0],this.max[1],this.max[2]):t.pnVertexFlag===17?Ft.fromValues(this.max[0],this.min[1],this.min[2]):t.pnVertexFlag===16?Ft.fromValues(this.max[0],this.min[1],this.max[2]):t.pnVertexFlag===1?Ft.fromValues(this.max[0],this.max[1],this.min[2]):Ft.fromValues(this.max[0],this.max[1],this.max[2])}},{key:"getPositiveFarPoint",value:function(t){return t.pnVertexFlag===273?Ft.copy(Ft.create(),this.max):t.pnVertexFlag===272?Ft.fromValues(this.max[0],this.max[1],this.min[2]):t.pnVertexFlag===257?Ft.fromValues(this.max[0],this.min[1],this.max[2]):t.pnVertexFlag===256?Ft.fromValues(this.max[0],this.min[1],this.min[2]):t.pnVertexFlag===17?Ft.fromValues(this.min[0],this.max[1],this.max[2]):t.pnVertexFlag===16?Ft.fromValues(this.min[0],this.max[1],this.min[2]):t.pnVertexFlag===1?Ft.fromValues(this.min[0],this.min[1],this.max[2]):Ft.fromValues(this.min[0],this.min[1],this.min[2])}}]),r}();function Ole(r){var e=Dle();return function(){var n=Zr(r),i;if(e){var a=Zr(this).constructor;i=Reflect.construct(n,arguments,a)}else i=n.apply(this,arguments);return fi(this,i)}}function Dle(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(r){return!1}}var UH=function(r){ui(t,r);var e=Ole(t);function t(n){var i;return se(this,t),i=e.call(this,n),i.material=void 0,i.geometry=void 0,i.aabb=new rS,i.aabbDirty=!0,i.model=void 0,i.visible=!0,i.children=[],Object.assign(ri(i),n),i}return t}(rl);var jH=U(Ka());var Eg=U(Zn());var Nyt=function(){function r(e,t){se(this,r),this.distance=void 0,this.normal=void 0,this.pnVertexFlag=void 0,this.distance=e||0,this.normal=t||Ft.fromValues(0,1,0),this.updatePNVertexFlag()}return be(r,[{key:"updatePNVertexFlag",value:function(){this.pnVertexFlag=(Number(this.normal[0]>=0)<<8)+(Number(this.normal[1]>=0)<<4)+Number(this.normal[2]>=0)}},{key:"distanceToPoint",value:function(t){return Ft.dot(t,this.normal)-this.distance}},{key:"normalize",value:function(){var t=1/Ft.len(this.normal);Ft.scale(this.normal,this.normal,t),this.distance*=t}},{key:"intersectsLine",value:function(t,n,i){var a=this.distanceToPoint(t),o=this.distanceToPoint(n),s=a/(a-o),l=s>=0&&s<=1;return l&&i&&Ft.lerp(i,t,n,s),l}}]),r}();var Hp;(function(r){r[r.OUTSIDE=4294967295]="OUTSIDE",r[r.INSIDE=0]="INSIDE",r[r.INDETERMINATE=2147483647]="INDETERMINATE"})(Hp||(Hp={}));var Fyt=function(){function r(e){if(se(this,r),this.planes=[],e)this.planes=e;else for(var t=0;t<6;t++)this.planes.push(new Nyt)}return be(r,[{key:"extractFromVPMatrix",value:function(t){var n=zp(t,16),i=n[0],a=n[1],o=n[2],s=n[3],l=n[4],u=n[5],f=n[6],c=n[7],h=n[8],d=n[9],p=n[10],v=n[11],m=n[12],g=n[13],x=n[14],b=n[15];Ft.set(this.planes[0].normal,s-i,c-l,v-h),this.planes[0].distance=-(b-m),Ft.set(this.planes[1].normal,s+i,c+l,v+h),this.planes[1].distance=-(b+m),Ft.set(this.planes[2].normal,s+a,c+u,v+d),this.planes[2].distance=-(b+g),Ft.set(this.planes[3].normal,s-a,c-u,v-d),this.planes[3].distance=-(b-g),Ft.set(this.planes[4].normal,s-o,c-f,v-p),this.planes[4].distance=-(b-x),Ft.set(this.planes[5].normal,s+o,c+f,v+p),this.planes[5].distance=-(b+x),this.planes.forEach(function(S){S.normalize(),S.updatePNVertexFlag()})}}]),r}();function Byt(r,e){return e[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[4],e[4]=r[5],e[5]=r[6],e[6]=r[8],e[7]=r[9],e[8]=r[10],e}function Gyt(r){var e=zp(r,3),t=e[0],n=e[1],i=e[2],a=t+n*256+i*65536-1;return a}var zyt,Uyt,jyt,Wyt,Vyt,Hyt,Yyt,K0,Xyt,qyt,Kyt,Zyt,$yt,Qyt;function Jyt(r,e){var t;if(typeof Symbol=="undefined"||r[Symbol.iterator]==null){if(Array.isArray(r)||(t=Ple(r))||e&&r&&typeof r.length=="number"){t&&(r=t);var n=0,i=function(){};return{s:i,n:function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}},e:function(u){throw u},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,o=!1,s;return{s:function(){t=r[Symbol.iterator]()},n:function(){var u=t.next();return a=u.done,u},e:function(u){o=!0,s=u},f:function(){try{!a&&t.return!=null&&t.return()}finally{if(o)throw s}}}}function Ple(r,e){if(!!r){if(typeof r=="string")return t0t(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t==="Object"&&r.constructor&&(t=r.constructor.name),t==="Map"||t==="Set")return Array.from(r);if(t==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return t0t(r,e)}}function t0t(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,n=new Array(e);t0)return Hp.OUTSIDE;Ft.dot(f,t.getPositiveFarPoint(i[o]))+c>0&&(a|=l)}}return a}}]),r}(),Qyt),Xyt=Ze(K0.prototype,"mesh",[Uyt],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),qyt=Ze(K0.prototype,"cullable",[jyt],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Kyt=Ze(K0.prototype,"geometry",[Wyt],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),Zyt=Ze(K0.prototype,"hierarchy",[Vyt],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),$yt=Ze(K0.prototype,"transform",[Hyt],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),K0))||Yyt);var VH=U(Ka());var $0=U(Zn());var Z0=U(Ka());var Zl=U(Zn());var e0t,r0t,n0t,i0t,a0t,o0t,s0t,l0t,u0t,f0t,c0t,h0t,Sc,d0t,p0t,v0t,m0t,g0t,y0t,x0t,b0t,_0t,S0t,C0t;function oN(r,e){var t;if(typeof Symbol=="undefined"||r[Symbol.iterator]==null){if(Array.isArray(r)||(t=kle(r))||e&&r&&typeof r.length=="number"){t&&(r=t);var n=0,i=function(){};return{s:i,n:function(){return n>=r.length?{done:!0}:{done:!1,value:r[n++]}},e:function(u){throw u},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,o=!1,s;return{s:function(){t=r[Symbol.iterator]()},n:function(){var u=t.next();return a=u.done,u},e:function(u){o=!0,s=u},f:function(){try{!a&&t.return!=null&&t.return()}finally{if(o)throw s}}}}function kle(r,e){if(!!r){if(typeof r=="string")return w0t(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t==="Object"&&r.constructor&&(t=r.constructor.name),t==="Map"||t==="Set")return Array.from(r);if(t==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return w0t(r,e)}}function w0t(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,n=new Array(e);t=r.length?{done:!0}:{done:!1,value:r[n++]}},e:function(u){throw u},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,o=!1,s;return{s:function(){t=r[Symbol.iterator]()},n:function(){var u=t.next();return a=u.done,u},e:function(u){o=!0,s=u},f:function(){try{!a&&t.return!=null&&t.return()}finally{if(o)throw s}}}}function Rle(r,e){if(!!r){if(typeof r=="string")return F0t(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t==="Object"&&r.constructor&&(t=r.constructor.name),t==="Map"||t==="Set")return Array.from(r);if(t==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return F0t(r,e)}}function F0t(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,n=new Array(e);tf||h<0||d>c||d<0)){var p,v;return l(e.pickingFBO,function(){p=s({x:Math.round(h),y:Math.round(c-(a+1)*window.devicePixelRatio),width:1,height:1,data:new Uint8Array(1*1*4),framebuffer:e.pickingFBO}),(p[0]!==0||p[1]!==0||p[2]!==0)&&(v=Gyt(p),e.highlightEnabled&&e.highlightPickedFeature(p,n))}),v}}}return be(r,[{key:"enableHighlight",value:function(t){this.highlightEnabled=t}},{key:"setHighlightColor",value:function(t){this.highlightColor=t}},{key:"highlightPickedFeature",value:function(t,n){if(t){var i=HH(n.getScene().getEntities()),a;try{for(i.s();!(a=i.n()).done;){var o=a.value,s=this.mesh.getComponentByEntity(o),l=s.material;l.setUniform("u_PickingStage",YH.HIGHLIGHT),l.setUniform("u_PickingColor",[t[0],t[1],t[2]]),l.setUniform("u_HighlightColor",this.highlightColor)}}catch(u){i.e(u)}finally{i.f()}}}}]),r}(),R0t.IDENTIFIER="PixelPicking Pass",N0t),O0t=Ze(nS.prototype,"engine",[A0t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),D0t=Ze(nS.prototype,"resourcePool",[M0t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),P0t=Ze(nS.prototype,"renderPassFactory",[T0t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),k0t=Ze(nS.prototype,"mesh",[I0t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),nS))||L0t);var qH=U(Ka());var Yp=U(Zn());var XH=U(Ka());var TM=U(Zn());var B0t,G0t,z0t,U0t,sN,j0t,W0t,V0t,H0t,Nle=`varying vec2 v_UV; + +uniform sampler2D u_Texture; + +void main() { + gl_FragColor = vec4(texture2D(u_Texture, v_UV)); +}`,Fle=`attribute vec2 a_Position; + +varying vec2 v_UV; + +void main() { + v_UV = 0.5 * (a_Position + 1.0); + gl_Position = vec4(a_Position, 0., 1.); +}`,Ble=`layout(set = 0, binding = 0) uniform sampler u_TextureSampler; +layout(set = 0, binding = 1) uniform texture2D u_Texture; + +layout(location = 0) in vec2 v_UV; +layout(location = 0) out vec4 outColor; + +void main() { + outColor = texture(sampler2D(u_Texture, u_TextureSampler), v_UV); +}`,Gle=`layout(location = 0) in vec2 a_Position; +layout(location = 0) out vec2 v_UV; + +void main() { + v_UV = 0.5 * (a_Position + 1.0); + gl_Position = vec4(a_Position, 0., 1.); +}`,aS=(B0t=(0,TM.injectable)(),G0t=(0,TM.inject)(Qt.RenderEngine),z0t=(0,TM.inject)(Qt.ResourcePool),B0t(U0t=(sN=(H0t=V0t=function r(){var e=this;se(this,r),Ke(this,"engine",j0t,this),Ke(this,"resourcePool",W0t,this),this.model=void 0,this.setup=function(t,n,i){var a=t.getPass(id.IDENTIFIER);if(a){var o=t.createRenderTarget(n,"render to screen",{width:1,height:1});i.data={input:n.read(a.data.output),output:n.write(t,o)}}},this.execute=function(){var t=Fr(XH.default.mark(function n(i,a){var o,s,l,u,f,c,h;return XH.default.wrap(function(p){for(;;)switch(p.prev=p.next){case 0:if(o=e.engine,s=o.createModel,l=o.createAttribute,u=o.createBuffer,e.model){p.next=6;break}return p.next=4,s({vs:e.engine.supportWebGPU?Gle:Fle,fs:e.engine.supportWebGPU?Ble:Nle,attributes:{a_Position:l({buffer:u({data:[-4,-4,4,-4,0,4],type:Mt.FLOAT}),size:2,arrayStride:2*4,stepMode:"vertex",attributes:[{shaderLocation:0,offset:0,format:"float2"}]})},uniforms:{u_Texture:null},depth:{enable:!1},count:3,blend:{enable:!0}});case 4:f=p.sent,e.model=f;case 6:c=i.getResourceNode(a.data.input),h=e.resourcePool.getOrCreateResource(c.resource),e.engine.useFramebuffer(null,function(){e.engine.clear({framebuffer:null,color:[0,0,0,0],depth:1,stencil:0}),e.model.draw({uniforms:{u_Texture:h}})});case 9:case"end":return p.stop()}},n)}));return function(n,i){return t.apply(this,arguments)}}(),this.tearDown=function(){e.model=void 0}},V0t.IDENTIFIER="Copy Pass",H0t),j0t=Ze(sN.prototype,"engine",[G0t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),W0t=Ze(sN.prototype,"resourcePool",[z0t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),sN))||U0t);var Y0t,X0t,q0t,K0t,Z0t,$0t,Q0t,oS,J0t,txt,ext,rxt,nxt,KH=(Y0t=(0,Yp.injectable)(),X0t=(0,Yp.inject)(Qt.Systems),q0t=(0,Yp.named)(Qt.FrameGraphSystem),K0t=(0,Yp.inject)(Qt.RenderPassFactory),Z0t=(0,Yp.inject)(Qt.ConfigService),$0t=(0,Yp.inject)(Qt.ResourcePool),Y0t(Q0t=(oS=(nxt=function(){function r(){se(this,r),Ke(this,"frameGraphSystem",J0t,this),Ke(this,"renderPassFactory",txt,this),Ke(this,"configService",ext,this),Ke(this,"resourcePool",rxt,this)}return be(r,[{key:"execute",value:function(){var e=Fr(qH.default.mark(function n(i){var a,o,s,l,u,f,c,h,d;return qH.default.wrap(function(v){for(;;)switch(v.prev=v.next){case 0:a=this.renderPassFactory(id.IDENTIFIER),o=a.setup,s=a.execute,l=this.frameGraphSystem.addPass(id.IDENTIFIER,o,s),u=this.renderPassFactory(aS.IDENTIFIER),f=u.setup,c=u.execute,h=u.tearDown,d=this.frameGraphSystem.addPass(aS.IDENTIFIER,f,c,h),this.frameGraphSystem.present(d.data.output);case 5:case"end":return v.stop()}},n,this)}));function t(n){return e.apply(this,arguments)}return t}()},{key:"tearDown",value:function(){this.resourcePool.clean()}},{key:"pick",value:function(t,n){var i=this.renderPassFactory(iS.IDENTIFIER);return i.pick(t,n)}}]),r}(),nxt),J0t=Ze(oS.prototype,"frameGraphSystem",[X0t,q0t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),txt=Ze(oS.prototype,"renderPassFactory",[K0t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),ext=Ze(oS.prototype,"configService",[Z0t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),rxt=Ze(oS.prototype,"resourcePool",[$0t],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),oS))||Q0t);function zle(r){var e=Ule();return function(){var n=Zr(r),i;if(e){var a=Zr(this).constructor;i=Reflect.construct(n,arguments,a)}else i=n.apply(this,arguments);return fi(this,i)}}function Ule(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(r){return!1}}var ZH=function(r){ui(t,r);var e=zle(t);function t(n){var i;return se(this,t),i=e.call(this,n),i.parentID=void 0,Object.assign(ri(i),n),i}return t}(rl);var $H=U(Ka());var sS=U(Zn());var ixt,axt,oxt,sxt,lxt,IM,uxt,fxt,cxt,hxt,QH=(ixt=(0,sS.injectable)(),axt=(0,sS.inject)(Qt.HierarchyComponentManager),oxt=(0,sS.inject)(Qt.TransformComponentManager),sxt=(0,sS.inject)(Qt.MeshComponentManager),ixt(lxt=(IM=(hxt=function(){function r(){se(this,r),Ke(this,"hierarchy",uxt,this),Ke(this,"transform",fxt,this),Ke(this,"mesh",cxt,this)}return be(r,[{key:"execute",value:function(){var e=Fr($H.default.mark(function n(){return $H.default.wrap(function(a){for(;;)switch(a.prev=a.next){case 0:this.runTransformUpdateSystem(),this.runHierarchyUpdateSystem();case 2:case"end":return a.stop()}},n,this)}));function t(){return e.apply(this,arguments)}return t}()},{key:"tearDown",value:function(){this.hierarchy.clear(),this.transform.clear()}},{key:"getHierarchyComponentManager",value:function(){return this.hierarchy}},{key:"getTransformComponentManager",value:function(){return this.transform}},{key:"runTransformUpdateSystem",value:function(){var t=this;this.transform.forEach(function(n,i){(i.isDirty()||i.isLocalDirty())&&(t.setMeshAABBDirty(t.mesh.getComponentByEntity(n)),i.updateTransform())})}},{key:"runHierarchyUpdateSystem",value:function(){var t=this;this.hierarchy.forEach(function(n,i){var a=t.transform.getComponentByEntity(n),o=t.transform.getComponentByEntity(i.parentID);a!==null&&o!==null&&a.updateTransformWithParent(o)})}},{key:"attach",value:function(t,n,i){this.hierarchy.contains(t)&&this.detach(t),this.hierarchy.create(t,{parentID:n});var a=this.mesh.getComponentByEntity(n);if(this.setMeshAABBDirty(a),a&&a.children.indexOf(t)===-1&&a.children.push(t),this.hierarchy.getCount()>1)for(var o=this.hierarchy.getCount()-1;o>0;--o)for(var s=this.hierarchy.getEntity(o),l=0;l0&&arguments[0]!==void 0?arguments[0]:!0;i?this.dirtyFlag|=t.DIRTY:this.dirtyFlag&=~t.DIRTY}},{key:"isLocalDirty",value:function(){return this.localDirtyFlag}},{key:"setLocalDirty",value:function(){var i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;i?(this.localDirtyFlag|=t.DIRTY,this.setDirty(!0)):this.localDirtyFlag&=~t.DIRTY}},{key:"updateTransform",value:function(){this.isLocalDirty()&&this.getLocalTransform(),this.isDirty()&&this.parent===null&&(_r.copy(this.worldTransform,this.getLocalTransform()),this.setDirty(!1))}},{key:"updateTransformWithParent",value:function(i){_r.multiply(this.worldTransform,i.worldTransform,this.getLocalTransform())}},{key:"applyTransform",value:function(){this.setDirty(),_r.getScaling(this.localScale,this.worldTransform),_r.getTranslation(this.localPosition,this.worldTransform),_r.getRotation(this.localRotation,this.worldTransform)}},{key:"clearTransform",value:function(){this.setDirty(),this.localPosition=Ft.fromValues(0,0,0),this.localRotation=Nr.fromValues(0,0,0,1),this.localScale=Ft.fromValues(1,1,1)}},{key:"scaleLocal",value:function(i){return this.setLocalDirty(),Ft.multiply(this.localScale,this.localScale,i),this}},{key:"getLocalPosition",value:function(){return this.localPosition}},{key:"getLocalRotation",value:function(){return this.localRotation}},{key:"getLocalScale",value:function(){return this.localScale}},{key:"getLocalTransform",value:function(){return this.localDirtyFlag&&(_r.fromRotationTranslationScale(this.localTransform,this.localRotation,this.localPosition,this.localScale),this.setLocalDirty(!1)),this.localTransform}},{key:"getWorldTransform",value:function(){return!this.isLocalDirty()&&!this.isDirty()?this.worldTransform:(this.parent&&this.parent.getWorldTransform(),this.updateTransform(),this.worldTransform)}},{key:"getPosition",value:function(){return _r.getTranslation(this.position,this.worldTransform),this.position}},{key:"getRotation",value:function(){return _r.getRotation(this.rotation,this.worldTransform),this.rotation}},{key:"getScale",value:function(){return _r.getScaling(this.scaling,this.worldTransform),this.scaling}}]),t}(rl);lN.DIRTY=1<<0;var rY=U(Zn()),Gxt=U(pxt());var cN=U(Zn());var vxt,mxt,gxt,tY,yxt,xxt,bxt=(vxt=(0,cN.injectable)(),mxt=(0,cN.inject)(Qt.RenderEngine),vxt(gxt=(tY=(xxt=function(){function r(){se(this,r),Ke(this,"engine",yxt,this),this.resourcePool={}}return be(r,[{key:"getOrCreateResource",value:function(t){if(!this.resourcePool[t.name]){var n=t.descriptor,i=n.width,a=n.height,o=n.usage;this.resourcePool[t.name]=this.engine.createFramebuffer({color:this.engine.createTexture2D({width:i,height:a,wrapS:Mt.CLAMP_TO_EDGE,wrapT:Mt.CLAMP_TO_EDGE,usage:o})})}return this.resourcePool[t.name]}},{key:"clean",value:function(){this.resourcePool={}}}]),r}(),xxt),yxt=Ze(tY.prototype,"engine",[mxt],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),tY))||gxt);function Kle(r){var e=Zle();return function(){var n=Zr(r),i;if(e){var a=Zr(this).constructor;i=Reflect.construct(n,arguments,a)}else i=n.apply(this,arguments);return fi(this,i)}}function Zle(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(r){return!1}}var _xt=function(r){ui(t,r);var e=Kle(t);function t(n){var i;return se(this,t),i=e.call(this,n),i.name=void 0,i.name=n.name||"",i}return t}(rl);var Ext=U(Zn()),Sxt,Cxt,wxt,Axt=(Sxt=(0,Ext.injectable)(),Sxt(Cxt=(wxt=function(){function r(){se(this,r),this.config=void 0}return be(r,[{key:"get",value:function(){return this.config}},{key:"set",value:function(t){this.config=t}}]),r}(),wxt))||Cxt);var Ixt=U(Zn()),Mxt,Txt,Lxt;(function(r){r.PANSTART="PANSTART",r.PANEND="PANEND",r.PANMOVE="PANMOVE",r.PINCH="PINCH",r.KEYDOWN="KEYDOWN",r.KEYUP="KEYUP",r.HOVER="HOVER"})(Lxt||(Lxt={}));var Oxt=(Mxt=(0,Ixt.injectable)(),Mxt(Txt=function(){function r(){se(this,r)}return be(r,[{key:"listen",value:function(t){}},{key:"on",value:function(t,n){}},{key:"connect",value:function(){}},{key:"disconnect",value:function(){}},{key:"destroy",value:function(){}}]),r}())||Txt);var Fxt=U(Zn());function $le(r){var e=0;switch(r){case"vec2":case"ivec2":e=2;break;case"vec3":case"ivec3":e=3;break;case"vec4":case"ivec4":case"mat2":e=4;break;case"mat3":e=9;break;case"mat4":e=16;break;default:}return e}var Qle=/uniform\s+(bool|float|int|vec2|vec3|vec4|ivec2|ivec3|ivec4|mat2|mat3|mat4|sampler2D|samplerCube)\s+([\s\S]*?);/g;function eY(r){var e={};return r=r.replace(Qle,function(t,n,i){var a=i.split(":"),o=a[0].trim(),s="";switch(a.length>1&&(s=a[1].trim()),n){case"bool":s=s==="true";break;case"float":case"int":s=Number(s);break;case"vec2":case"vec3":case"vec4":case"ivec2":case"ivec3":case"ivec4":case"mat2":case"mat3":case"mat4":s?s=s.replace("[","").replace("]","").split(",").reduce(function(l,u){return l.push(Number(u.trim())),l},[]):s=new Array($le(n)).fill(0);break;default:}return e[o]=s,"uniform ".concat(n," ").concat(o,`; +`)}),{content:r,uniforms:e}}function Dxt(r){return r.filter(function(e,t,n){return n.indexOf(e)===t})}var Pxt,kxt,Rxt;function Nxt(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(r,i).enumerable})),t.push.apply(t,n)}return t}function OM(r){for(var e=1;e 0.0 ) p = vec2(p.x-k*p.y,-k*p.x-p.y)/2.0; + p.x -= clamp( p.x, -2.0, 0.0 ); + return -length(p)*sign(p.y); +} + +float sdBox(vec2 p, vec2 b) { + vec2 d = abs(p)-b; + return length(max(d,vec2(0))) + min(max(d.x,d.y),0.0); +} + +float sdPentagon(vec2 p, float r) { + vec3 k = vec3(0.809016994,0.587785252,0.726542528); + p.x = abs(p.x); + p -= 2.0*min(dot(vec2(-k.x,k.y),p),0.0)*vec2(-k.x,k.y); + p -= 2.0*min(dot(vec2( k.x,k.y),p),0.0)*vec2( k.x,k.y); + p -= vec2(clamp(p.x,-r*k.z,r*k.z),r); + return length(p)*sign(p.y); +} + +float sdHexagon(vec2 p, float r) { + vec3 k = vec3(-0.866025404,0.5,0.577350269); + p = abs(p); + p -= 2.0*min(dot(k.xy,p),0.0)*k.xy; + p -= vec2(clamp(p.x, -k.z*r, k.z*r), r); + return length(p)*sign(p.y); } -// node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js -function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} - -// node_modules/@babel/runtime/helpers/esm/toConsumableArray.js -function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); -} - -// node_modules/@antv/g-webgpu-engine/es/webgl/ReglComputeModel.js -var import_regenerator12 = __toModule(require_regenerator()); - -// node_modules/@antv/g-webgpu-engine/es/utils/is-typedarray.js -var MAX_SAFE_INTEGER3 = 9007199254740991; -var argsTag3 = "[object Arguments]"; -var arrayTag3 = "[object Array]"; -var boolTag3 = "[object Boolean]"; -var dateTag3 = "[object Date]"; -var errorTag3 = "[object Error]"; -var funcTag3 = "[object Function]"; -var mapTag3 = "[object Map]"; -var numberTag3 = "[object Number]"; -var objectTag3 = "[object Object]"; -var regexpTag3 = "[object RegExp]"; -var setTag3 = "[object Set]"; -var stringTag3 = "[object String]"; -var weakMapTag3 = "[object WeakMap]"; -var arrayBufferTag3 = "[object ArrayBuffer]"; -var dataViewTag3 = "[object DataView]"; -var float32Tag3 = "[object Float32Array]"; -var float64Tag3 = "[object Float64Array]"; -var int8Tag3 = "[object Int8Array]"; -var int16Tag3 = "[object Int16Array]"; -var int32Tag3 = "[object Int32Array]"; -var uint8Tag3 = "[object Uint8Array]"; -var uint8ClampedTag3 = "[object Uint8ClampedArray]"; -var uint16Tag3 = "[object Uint16Array]"; -var uint32Tag3 = "[object Uint32Array]"; -var typedArrayTags3 = {}; -typedArrayTags3[float32Tag3] = typedArrayTags3[float64Tag3] = typedArrayTags3[int8Tag3] = typedArrayTags3[int16Tag3] = typedArrayTags3[int32Tag3] = typedArrayTags3[uint8Tag3] = typedArrayTags3[uint8ClampedTag3] = typedArrayTags3[uint16Tag3] = typedArrayTags3[uint32Tag3] = true; -typedArrayTags3[argsTag3] = typedArrayTags3[arrayTag3] = typedArrayTags3[arrayBufferTag3] = typedArrayTags3[boolTag3] = typedArrayTags3[dataViewTag3] = typedArrayTags3[dateTag3] = typedArrayTags3[errorTag3] = typedArrayTags3[funcTag3] = typedArrayTags3[mapTag3] = typedArrayTags3[numberTag3] = typedArrayTags3[objectTag3] = typedArrayTags3[regexpTag3] = typedArrayTags3[setTag3] = typedArrayTags3[stringTag3] = typedArrayTags3[weakMapTag3] = false; -var objectProto3 = Object.prototype; -var objectToString3 = objectProto3.toString; -function baseIsTypedArray3(value2) { - return isObjectLike4(value2) && isLength3(value2.length) && !!typedArrayTags3[objectToString3.call(value2)]; -} -function isLength3(value2) { - return typeof value2 === "number" && value2 > -1 && value2 % 1 === 0 && value2 <= MAX_SAFE_INTEGER3; -} -function isObjectLike4(value2) { - return !!value2 && _typeof3(value2) === "object"; -} -var isTypedArray3 = baseIsTypedArray3; - -// node_modules/@antv/g-webgpu-engine/es/webgl/ReglComputeModel.js -function ownKeys6(object, enumerableOnly) { - var keys6 = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) - symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys6.push.apply(keys6, symbols); - } - return keys6; -} -function _objectSpread6(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = arguments[i4] != null ? arguments[i4] : {}; - if (i4 % 2) { - ownKeys6(Object(source), true).forEach(function(key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys6(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - return target; -} -var quadVert = "attribute vec3 a_Position;\nattribute vec2 a_TexCoord;\n\nvarying vec2 v_TexCoord;\n\nvoid main() {\n gl_Position = vec4(a_Position, 1.0);\n v_TexCoord = a_TexCoord;\n}"; -var textureId = 0; -var debug = false; -var ReglComputeModel = /* @__PURE__ */ function() { - function ReglComputeModel2(reGl, context) { - var _this = this; - _classCallCheck(this, ReglComputeModel2); - this.reGl = reGl; - this.context = context; - this.entity = createEntity(); - this.texFBO = void 0; - this.computeCommand = void 0; - this.textureCache = {}; - this.outputTextureName = void 0; - this.swapOutputTextureName = void 0; - this.compiledPingpong = void 0; - this.dynamicPingpong = void 0; - var uniforms = {}; - this.context.uniforms.forEach(function(uniform) { - var name = uniform.name, type2 = uniform.type, data3 = uniform.data, isReferer = uniform.isReferer, storageClass = uniform.storageClass; - if (storageClass === STORAGE_CLASS.StorageBuffer) { - if (!isReferer) { - _this.textureCache[name] = _this.calcDataTexture(name, type2, data3); - var _this$textureCache$na = _this.textureCache[name], width2 = _this$textureCache$na.textureWidth, isOutput = _this$textureCache$na.isOutput; - uniforms["".concat(name, "Size")] = [width2, width2]; - if (isOutput) { - _this.outputTextureName = name; - if (_this.context.needPingpong) { - _this.outputTextureName = "".concat(name, "Output"); - _this.textureCache[_this.outputTextureName] = _this.calcDataTexture(name, type2, data3); - } - } - } else { - _this.textureCache[name] = { - data: void 0 - }; - uniforms["".concat(name, "Size")] = function() { - return data3.compiledBundle.context.output.textureSize; - }; - } - uniforms[name] = function() { - if (debug) { - console.log("[".concat(_this.entity, "]: ").concat(name, " ").concat(_this.textureCache[name].id)); - } - return _this.textureCache[name].texture; - }; - } else if (storageClass === STORAGE_CLASS.Uniform) { - if (data3 && (Array.isArray(data3) || isTypedArray3(data3)) && data3.length > 16) { - throw new Error("invalid data type ".concat(type2)); - } - uniforms[name] = function() { - return uniform.data; - }; - } - }); - var _this$getOuputDataTex = this.getOuputDataTexture(), textureWidth = _this$getOuputDataTex.textureWidth, texelCount = _this$getOuputDataTex.texelCount; - uniforms.u_OutputTextureSize = [textureWidth, textureWidth]; - uniforms.u_OutputTexelCount = texelCount; - this.context.output.textureSize = [textureWidth, textureWidth]; - var drawParams = { - attributes: { - a_Position: [[-1, 1, 0], [-1, -1, 0], [1, 1, 0], [1, -1, 0]], - a_TexCoord: [[0, 1], [0, 0], [1, 1], [1, 0]] - }, - frag: "#ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n#else\n precision mediump float;\n#endif\n".concat(this.context.shader), - uniforms, - vert: quadVert, - primitive: "triangle strip", - count: 4 - }; - this.computeCommand = this.reGl(drawParams); - } - _createClass(ReglComputeModel2, [{ - key: "run", - value: function run4() { - var _this2 = this; - if (this.context.maxIteration > 1 && this.context.needPingpong) { - this.compiledPingpong = true; - } - if (this.compiledPingpong || this.dynamicPingpong) { - this.swap(); - } - this.texFBO = this.reGl.framebuffer({ - color: this.getOuputDataTexture().texture - }); - this.texFBO.use(function() { - _this2.computeCommand(); - }); - if (debug) { - console.log("[".concat(this.entity, "]: output ").concat(this.getOuputDataTexture().id)); - } - } - }, { - key: "readData", - value: function() { - var _readData = _asyncToGenerator(/* @__PURE__ */ import_regenerator12.default.mark(function _callee() { - var _this3 = this; - var pixels, _this$getOuputDataTex2, originalDataLength, elementsPerTexel, _this$getOuputDataTex3, typedArrayConstructor, formattedPixels, i4; - return import_regenerator12.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - this.reGl({ - framebuffer: this.texFBO - })(function() { - pixels = _this3.reGl.read(); - }); - if (!pixels) { - _context.next = 6; - break; - } - _this$getOuputDataTex2 = this.getOuputDataTexture(), originalDataLength = _this$getOuputDataTex2.originalDataLength, elementsPerTexel = _this$getOuputDataTex2.elementsPerTexel, _this$getOuputDataTex3 = _this$getOuputDataTex2.typedArrayConstructor, typedArrayConstructor = _this$getOuputDataTex3 === void 0 ? Float32Array : _this$getOuputDataTex3; - formattedPixels = []; - if (elementsPerTexel !== 4) { - for (i4 = 0; i4 < pixels.length; i4 += 4) { - if (elementsPerTexel === 1) { - formattedPixels.push(pixels[i4]); - } else if (elementsPerTexel === 2) { - formattedPixels.push(pixels[i4], pixels[i4 + 1]); - } else { - formattedPixels.push(pixels[i4], pixels[i4 + 1], pixels[i4 + 2]); - } - } - } else { - formattedPixels = pixels; - } - return _context.abrupt("return", new typedArrayConstructor(formattedPixels.slice(0, originalDataLength))); - case 6: - return _context.abrupt("return", new Float32Array()); - case 7: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - function readData() { - return _readData.apply(this, arguments); - } - return readData; - }() - }, { - key: "confirmInput", - value: function confirmInput(model, inputName) { - var inputModel; - if (this.entity === model.entity) { - this.dynamicPingpong = true; - inputModel = this; - } else { - inputModel = model; - } - this.textureCache[inputName].id = inputModel.getOuputDataTexture().id; - this.textureCache[inputName].texture = inputModel.getOuputDataTexture().texture; - if (debug) { - console.log("[".concat(this.entity, "]: confirm input ").concat(inputName, " from model ").concat(inputModel.entity, ", ").concat(inputModel.getOuputDataTexture().id)); - } - } - }, { - key: "updateUniform", - value: function updateUniform() { - } - }, { - key: "updateBuffer", - value: function updateBuffer(bufferName, data3) { - var offset = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0; - var buffer = this.context.uniforms.find(function(_ref2) { - var name = _ref2.name; - return name === bufferName; - }); - if (buffer) { - var _this$calcDataTexture = this.calcDataTexture(bufferName, buffer.type, data3), texture = _this$calcDataTexture.texture, paddingData = _this$calcDataTexture.data; - this.textureCache[bufferName].data = paddingData; - this.textureCache[bufferName].texture = texture; - } - } - }, { - key: "destroy", - value: function destroy() { - } - }, { - key: "swap", - value: function swap3() { - if (!this.swapOutputTextureName) { - this.createSwapOutputDataTexture(); - } - if (this.compiledPingpong) { - var outputTextureUniformName = this.context.output.name; - this.textureCache[outputTextureUniformName].id = this.getOuputDataTexture().id; - this.textureCache[outputTextureUniformName].texture = this.getOuputDataTexture().texture; - } - var tmp = this.outputTextureName; - this.outputTextureName = this.swapOutputTextureName; - this.swapOutputTextureName = tmp; - if (debug) { - console.log("[".concat(this.entity, "]: after swap, output ").concat(this.getOuputDataTexture().id)); - } - } - }, { - key: "getOuputDataTexture", - value: function getOuputDataTexture() { - return this.textureCache[this.outputTextureName]; - } - }, { - key: "createSwapOutputDataTexture", - value: function createSwapOutputDataTexture() { - var texture = this.cloneDataTexture(this.getOuputDataTexture()); - this.swapOutputTextureName = "".concat(this.entity, "-swap"); - this.textureCache[this.swapOutputTextureName] = texture; - } - }, { - key: "cloneDataTexture", - value: function cloneDataTexture(texture) { - var data3 = texture.data, textureWidth = texture.textureWidth; - return _objectSpread6(_objectSpread6({}, texture), {}, { - id: textureId++, - texture: this.reGl.texture({ - width: textureWidth, - height: textureWidth, - data: data3, - type: "float" - }) - }); - } - }, { - key: "calcDataTexture", - value: function calcDataTexture(name, type2, data3) { - var elementsPerTexel = 1; - if (type2 === AST_TOKEN_TYPES.Vector4FloatArray) { - elementsPerTexel = 4; - } - var paddingData = []; - for (var i4 = 0; i4 < data3.length; i4 += elementsPerTexel) { - if (elementsPerTexel === 1) { - paddingData.push(data3[i4], 0, 0, 0); - } else if (elementsPerTexel === 2) { - paddingData.push(data3[i4], data3[i4 + 1], 0, 0); - } else if (elementsPerTexel === 3) { - paddingData.push(data3[i4], data3[i4 + 1], data3[i4 + 2], 0); - } else if (elementsPerTexel === 4) { - paddingData.push(data3[i4], data3[i4 + 1], data3[i4 + 2], data3[i4 + 3]); - } - } - var originalDataLength = data3.length; - var texelCount = Math.ceil(originalDataLength / elementsPerTexel); - var width2 = Math.ceil(Math.sqrt(texelCount)); - var paddingTexelCount = width2 * width2; - if (texelCount < paddingTexelCount) { - paddingData.push.apply(paddingData, _toConsumableArray(new Array((paddingTexelCount - texelCount) * 4).fill(0))); - } - var texture = this.reGl.texture({ - width: width2, - height: width2, - data: paddingData, - type: "float" - }); - return { - id: textureId++, - data: paddingData, - originalDataLength, - typedArrayConstructor: isTypedArray3(data3) ? data3.constructor : void 0, - textureWidth: width2, - texture, - texelCount, - elementsPerTexel, - isOutput: name === this.context.output.name - }; - } - }]); - return ReglComputeModel2; -}(); - -// node_modules/@antv/g-webgpu-engine/es/webgl/ReglElements.js -var ReglElements = /* @__PURE__ */ function() { - function ReglElements2(reGl, options) { - _classCallCheck(this, ReglElements2); - this.elements = void 0; - var data3 = options.data, usage = options.usage, type2 = options.type, count2 = options.count; - this.elements = reGl.elements({ - data: data3, - usage: usageMap[usage || gl.STATIC_DRAW], - type: dataTypeMap[type2 || gl.UNSIGNED_BYTE], - count: count2 - }); - } - _createClass(ReglElements2, [{ - key: "get", - value: function get100() { - return this.elements; - } - }, { - key: "subData", - value: function subData(_ref2) { - var data3 = _ref2.data; - this.elements.subdata(data3); - } - }, { - key: "destroy", - value: function destroy() { - this.elements.destroy(); - } - }]); - return ReglElements2; -}(); - -// node_modules/@antv/g-webgpu-engine/es/webgl/ReglFramebuffer.js -var ReglFramebuffer = /* @__PURE__ */ function() { - function ReglFramebuffer2(reGl, options) { - _classCallCheck(this, ReglFramebuffer2); - this.framebuffer = void 0; - var width2 = options.width, height = options.height, color4 = options.color, colors = options.colors, depth = options.depth, stencil = options.stencil; - var framebufferOptions = { - width: width2, - height - }; - if (Array.isArray(colors)) { - framebufferOptions.colors = colors.map(function(c5) { - return c5.get(); - }); - } - if (color4 && typeof color4 !== "boolean") { - framebufferOptions.color = color4.get(); - } - this.framebuffer = reGl.framebuffer(framebufferOptions); - } - _createClass(ReglFramebuffer2, [{ - key: "get", - value: function get100() { - return this.framebuffer; - } - }, { - key: "destroy", - value: function destroy() { - this.framebuffer.destroy(); - } - }, { - key: "resize", - value: function resize(_ref2) { - var width2 = _ref2.width, height = _ref2.height; - this.framebuffer.resize(width2, height); - } - }]); - return ReglFramebuffer2; -}(); - -// node_modules/@antv/g-webgpu-engine/es/utils/is-object.js -function isObject27(value2) { - var type2 = _typeof3(value2); - return value2 != null && (type2 === "object" || type2 === "function"); -} - -// node_modules/@antv/g-webgpu-engine/es/utils/uniform.js -function extractUniforms2(uniforms) { - var extractedUniforms = {}; - Object.keys(uniforms).forEach(function(uniformName) { - extractUniformsRecursively(uniformName, uniforms[uniformName], extractedUniforms, ""); - }); - return extractedUniforms; -} -function extractUniformsRecursively(uniformName, uniformValue, uniforms, prefix2) { - if (uniformValue === null || typeof uniformValue === "number" || typeof uniformValue === "boolean" || Array.isArray(uniformValue) && typeof uniformValue[0] === "number" || isTypedArray3(uniformValue) || uniformValue === "" || uniformValue.resize !== void 0) { - uniforms["".concat(prefix2 && prefix2 + ".").concat(uniformName)] = uniformValue; - return; - } - if (isObject27(uniformValue)) { - Object.keys(uniformValue).forEach(function(childName) { - extractUniformsRecursively(childName, uniformValue[childName], uniforms, "".concat(prefix2 && prefix2 + ".").concat(uniformName)); - }); - } - if (Array.isArray(uniformValue)) { - uniformValue.forEach(function(child, idx) { - Object.keys(child).forEach(function(childName) { - extractUniformsRecursively(childName, child[childName], uniforms, "".concat(prefix2 && prefix2 + ".").concat(uniformName, "[").concat(idx, "]")); - }); - }); - } -} - -// node_modules/@antv/g-webgpu-engine/es/webgl/ReglModel.js -function ownKeys7(object, enumerableOnly) { - var keys6 = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) - symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys6.push.apply(keys6, symbols); - } - return keys6; -} -function _objectSpread7(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = arguments[i4] != null ? arguments[i4] : {}; - if (i4 % 2) { - ownKeys7(Object(source), true).forEach(function(key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys7(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - return target; -} -var ReglModel = /* @__PURE__ */ function() { - function ReglModel2(reGl, options) { - _classCallCheck(this, ReglModel2); - this.reGl = void 0; - this.drawCommand = void 0; - this.uniforms = {}; - this.reGl = reGl; - var vs = options.vs, fs = options.fs, defines = options.defines, attributes = options.attributes, uniforms = options.uniforms, primitive = options.primitive, count2 = options.count, elements = options.elements, depth = options.depth, blend2 = options.blend, stencil = options.stencil, cull = options.cull, instances = options.instances, scissor = options.scissor, viewport = options.viewport; - var reglUniforms = {}; - if (uniforms) { - this.uniforms = extractUniforms2(uniforms); - Object.keys(uniforms).forEach(function(uniformName) { - reglUniforms[uniformName] = reGl.prop(uniformName); - }); - } - var reglAttributes = {}; - Object.keys(attributes).forEach(function(name) { - reglAttributes[name] = attributes[name].get(); - }); - var defineStmts = defines && this.generateDefines(defines) || ""; - var drawParams = { - attributes: reglAttributes, - frag: "#ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n#else\n precision mediump float;\n#endif\n".concat(defineStmts, "\n").concat(fs), - uniforms: reglUniforms, - vert: "\n".concat(defineStmts, "\n").concat(vs), - primitive: primitiveMap[primitive === void 0 ? gl.TRIANGLES : primitive] - }; - if (instances) { - drawParams.instances = instances; - } - if (count2) { - drawParams.count = count2; - } - if (elements) { - drawParams.elements = elements.get(); - } - if (scissor) { - drawParams.scissor = scissor; - } - if (viewport) { - drawParams.viewport = viewport; - } - this.initDepthDrawParams({ - depth - }, drawParams); - this.initBlendDrawParams({ - blend: blend2 - }, drawParams); - this.initStencilDrawParams({ - stencil - }, drawParams); - this.initCullDrawParams({ - cull - }, drawParams); - this.drawCommand = reGl(drawParams); - } - _createClass(ReglModel2, [{ - key: "addUniforms", - value: function addUniforms(uniforms) { - this.uniforms = _objectSpread7(_objectSpread7({}, this.uniforms), extractUniforms2(uniforms)); - } - }, { - key: "draw", - value: function draw4(options) { - var uniforms = _objectSpread7(_objectSpread7({}, this.uniforms), extractUniforms2(options.uniforms || {})); - var reglDrawProps = {}; - Object.keys(uniforms).forEach(function(uniformName) { - var type2 = _typeof3(uniforms[uniformName]); - if (type2 === "boolean" || type2 === "number" || Array.isArray(uniforms[uniformName]) || uniforms[uniformName].BYTES_PER_ELEMENT) { - reglDrawProps[uniformName] = uniforms[uniformName]; - } else if (type2 === "string") { - } else { - reglDrawProps[uniformName] = uniforms[uniformName].get(); - } - }); - this.drawCommand(reglDrawProps); - } - }, { - key: "destroy", - value: function destroy() { - } - }, { - key: "initDepthDrawParams", - value: function initDepthDrawParams(_ref2, drawParams) { - var depth = _ref2.depth; - if (depth) { - drawParams.depth = { - enable: depth.enable === void 0 ? true : !!depth.enable, - mask: depth.mask === void 0 ? true : !!depth.mask, - func: depthFuncMap[depth.func || gl.LESS], - range: depth.range || [0, 1] - }; - } - } - }, { - key: "initBlendDrawParams", - value: function initBlendDrawParams(_ref2, drawParams) { - var blend2 = _ref2.blend; - if (blend2) { - var enable = blend2.enable, func = blend2.func, equation = blend2.equation, _blend$color = blend2.color, color4 = _blend$color === void 0 ? [0, 0, 0, 0] : _blend$color; - drawParams.blend = { - enable: !!enable, - func: { - srcRGB: blendFuncMap[func && func.srcRGB || gl.SRC_ALPHA], - srcAlpha: blendFuncMap[func && func.srcAlpha || gl.SRC_ALPHA], - dstRGB: blendFuncMap[func && func.dstRGB || gl.ONE_MINUS_SRC_ALPHA], - dstAlpha: blendFuncMap[func && func.dstAlpha || gl.ONE_MINUS_SRC_ALPHA] - }, - equation: { - rgb: blendEquationMap[equation && equation.rgb || gl.FUNC_ADD], - alpha: blendEquationMap[equation && equation.alpha || gl.FUNC_ADD] - }, - color: color4 - }; - } - } - }, { - key: "initStencilDrawParams", - value: function initStencilDrawParams(_ref3, drawParams) { - var stencil = _ref3.stencil; - if (stencil) { - var enable = stencil.enable, _stencil$mask = stencil.mask, mask = _stencil$mask === void 0 ? -1 : _stencil$mask, _stencil$func = stencil.func, func = _stencil$func === void 0 ? { - cmp: gl.ALWAYS, - ref: 0, - mask: -1 - } : _stencil$func, _stencil$opFront = stencil.opFront, opFront = _stencil$opFront === void 0 ? { - fail: gl.KEEP, - zfail: gl.KEEP, - zpass: gl.KEEP - } : _stencil$opFront, _stencil$opBack = stencil.opBack, opBack = _stencil$opBack === void 0 ? { - fail: gl.KEEP, - zfail: gl.KEEP, - zpass: gl.KEEP - } : _stencil$opBack; - drawParams.stencil = { - enable: !!enable, - mask, - func: _objectSpread7(_objectSpread7({}, func), {}, { - cmp: stencilFuncMap[func.cmp] - }), - opFront: { - fail: stencilOpMap[opFront.fail], - zfail: stencilOpMap[opFront.zfail], - zpass: stencilOpMap[opFront.zpass] - }, - opBack: { - fail: stencilOpMap[opBack.fail], - zfail: stencilOpMap[opBack.zfail], - zpass: stencilOpMap[opBack.zpass] - } - }; - } - } - }, { - key: "initCullDrawParams", - value: function initCullDrawParams(_ref4, drawParams) { - var cull = _ref4.cull; - if (cull) { - var enable = cull.enable, _cull$face = cull.face, face = _cull$face === void 0 ? gl.BACK : _cull$face; - drawParams.cull = { - enable: !!enable, - face: cullFaceMap[face] - }; - } - } - }, { - key: "generateDefines", - value: function generateDefines(defines) { - return Object.keys(defines).map(function(name) { - return "#define ".concat(name, " ").concat(Number(defines[name])); - }).join("\n"); - } - }]); - return ReglModel2; -}(); - -// node_modules/@antv/g-webgpu-engine/es/webgl/ReglTexture2D.js -var ReglTexture2D = /* @__PURE__ */ function() { - function ReglTexture2D2(reGl, options) { - _classCallCheck(this, ReglTexture2D2); - this.texture = void 0; - this.width = void 0; - this.height = void 0; - var data3 = options.data, _options$type = options.type, type2 = _options$type === void 0 ? gl.UNSIGNED_BYTE : _options$type, width2 = options.width, height = options.height, _options$flipY = options.flipY, flipY = _options$flipY === void 0 ? false : _options$flipY, _options$format = options.format, format2 = _options$format === void 0 ? gl.RGBA : _options$format, _options$mipmap = options.mipmap, mipmap = _options$mipmap === void 0 ? false : _options$mipmap, _options$wrapS = options.wrapS, wrapS = _options$wrapS === void 0 ? gl.CLAMP_TO_EDGE : _options$wrapS, _options$wrapT = options.wrapT, wrapT = _options$wrapT === void 0 ? gl.CLAMP_TO_EDGE : _options$wrapT, _options$aniso = options.aniso, aniso = _options$aniso === void 0 ? 0 : _options$aniso, _options$alignment = options.alignment, alignment = _options$alignment === void 0 ? 1 : _options$alignment, _options$premultiplyA = options.premultiplyAlpha, premultiplyAlpha = _options$premultiplyA === void 0 ? false : _options$premultiplyA, _options$mag = options.mag, mag = _options$mag === void 0 ? gl.NEAREST : _options$mag, _options$min = options.min, min13 = _options$min === void 0 ? gl.NEAREST : _options$min, _options$colorSpace = options.colorSpace, colorSpace = _options$colorSpace === void 0 ? gl.BROWSER_DEFAULT_WEBGL : _options$colorSpace; - this.width = width2; - this.height = height; - var textureOptions = { - width: width2, - height, - type: dataTypeMap[type2], - format: formatMap[format2], - wrapS: wrapModeMap[wrapS], - wrapT: wrapModeMap[wrapT], - mag: filterMap[mag], - min: filterMap[min13], - alignment, - flipY, - colorSpace: colorSpaceMap[colorSpace], - premultiplyAlpha, - aniso - }; - if (data3) { - textureOptions.data = data3; - } - if (typeof mipmap === "number") { - textureOptions.mipmap = mipmapMap[mipmap]; - } else if (typeof mipmap === "boolean") { - textureOptions.mipmap = mipmap; - } - this.texture = reGl.texture(textureOptions); - } - _createClass(ReglTexture2D2, [{ - key: "get", - value: function get100() { - return this.texture; - } - }, { - key: "update", - value: function update15() { - this.texture._texture.bind(); - } - }, { - key: "resize", - value: function resize(_ref2) { - var width2 = _ref2.width, height = _ref2.height; - this.texture.resize(width2, height); - this.width = width2; - this.height = height; - } - }, { - key: "destroy", - value: function destroy() { - this.texture.destroy(); - } - }]); - return ReglTexture2D2; -}(); - -// node_modules/@antv/g-webgpu-engine/es/webgl/index.js -var _dec41; -var _class20; -var _temp18; -var WebGLEngine = (_dec41 = (0, import_inversify21.injectable)(), _dec41(_class20 = (_temp18 = /* @__PURE__ */ function() { - function WebGLEngine2() { - var _this = this; - _classCallCheck(this, WebGLEngine2); - this.supportWebGPU = false; - this.useWGSL = false; - this.$canvas = void 0; - this.gl = void 0; - this.inited = void 0; - this.createModel = /* @__PURE__ */ function() { - var _ref2 = _asyncToGenerator(/* @__PURE__ */ import_regenerator13.default.mark(function _callee2(options) { - return import_regenerator13.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - if (!options.uniforms) { - _context2.next = 3; - break; - } - _context2.next = 3; - return Promise.all(Object.keys(options.uniforms).map(/* @__PURE__ */ function() { - var _ref22 = _asyncToGenerator(/* @__PURE__ */ import_regenerator13.default.mark(function _callee(name) { - var texture; - return import_regenerator13.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!(options.uniforms[name] && options.uniforms[name].load !== void 0)) { - _context.next = 5; - break; - } - _context.next = 3; - return options.uniforms[name].load(); - case 3: - texture = _context.sent; - options.uniforms[name] = texture; - case 5: - case "end": - return _context.stop(); - } - } - }, _callee); - })); - return function(_x2) { - return _ref22.apply(this, arguments); - }; - }())); - case 3: - return _context2.abrupt("return", new ReglModel(_this.gl, options)); - case 4: - case "end": - return _context2.stop(); - } - } - }, _callee2); - })); - return function(_x) { - return _ref2.apply(this, arguments); - }; - }(); - this.createAttribute = function(options) { - return new ReglAttribute(_this.gl, options); - }; - this.createBuffer = function(options) { - return new ReglBuffer(_this.gl, options); - }; - this.createElements = function(options) { - return new ReglElements(_this.gl, options); - }; - this.createTexture2D = function(options) { - return new ReglTexture2D(_this.gl, options); - }; - this.createFramebuffer = function(options) { - return new ReglFramebuffer(_this.gl, options); - }; - this.useFramebuffer = function(framebuffer, drawCommands) { - _this.gl({ - framebuffer: framebuffer ? framebuffer.get() : null - })(drawCommands); - }; - this.createComputeModel = /* @__PURE__ */ function() { - var _ref3 = _asyncToGenerator(/* @__PURE__ */ import_regenerator13.default.mark(function _callee3(context) { - return import_regenerator13.default.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - return _context3.abrupt("return", new ReglComputeModel(_this.gl, context)); - case 1: - case "end": - return _context3.stop(); - } - } - }, _callee3); - })); - return function(_x3) { - return _ref3.apply(this, arguments); - }; - }(); - this.clear = function(options) { - var color4 = options.color, depth = options.depth, stencil = options.stencil, _options$framebuffer = options.framebuffer, framebuffer = _options$framebuffer === void 0 ? null : _options$framebuffer; - var reglClearOptions = { - color: color4, - depth, - stencil - }; - reglClearOptions.framebuffer = framebuffer === null ? framebuffer : framebuffer.get(); - _this.gl.clear(reglClearOptions); - }; - this.setScissor = function(scissor) { - if (_this.gl && _this.gl._gl) { - if (scissor.enable && scissor.box) { - _this.gl._gl.enable(gl.SCISSOR_TEST); - _this.gl._gl.scissor(scissor.box.x, scissor.box.y, scissor.box.width, scissor.box.height); - } else { - _this.gl._gl.disable(gl.SCISSOR_TEST); - } - _this.gl._refresh(); - } - }; - this.viewport = function(_ref4) { - var x6 = _ref4.x, y5 = _ref4.y, width2 = _ref4.width, height = _ref4.height; - if (_this.gl && _this.gl._gl) { - _this.gl._gl.viewport(x6, y5, width2, height); - _this.gl._refresh(); - } - }; - this.readPixels = function(options) { - var framebuffer = options.framebuffer, x6 = options.x, y5 = options.y, width2 = options.width, height = options.height; - var readPixelsOptions = { - x: x6, - y: y5, - width: width2, - height - }; - if (framebuffer) { - readPixelsOptions.framebuffer = framebuffer.get(); - } - return _this.gl.read(readPixelsOptions); - }; - this.getCanvas = function() { - return _this.$canvas; - }; - this.getGLContext = function() { - return _this.gl._gl; - }; - this.destroy = function() { - if (_this.gl) { - _this.gl.destroy(); - _this.inited = false; - } - }; - } - _createClass(WebGLEngine2, [{ - key: "init", - value: function() { - var _init = _asyncToGenerator(/* @__PURE__ */ import_regenerator13.default.mark(function _callee4(cfg) { - return import_regenerator13.default.wrap(function _callee4$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - if (!this.inited) { - _context4.next = 2; - break; - } - return _context4.abrupt("return"); - case 2: - this.$canvas = cfg.canvas; - _context4.next = 5; - return new Promise(function(resolve, reject) { - (0, import_regl.default)({ - canvas: cfg.canvas, - attributes: { - alpha: true, - antialias: cfg.antialias, - premultipliedAlpha: true - }, - pixelRatio: 1, - extensions: [ - "OES_element_index_uint", - "OES_texture_float", - "OES_standard_derivatives", - "angle_instanced_arrays" - ], - optionalExtensions: ["EXT_texture_filter_anisotropic", "EXT_blend_minmax", "WEBGL_depth_texture"], - profile: true, - onDone: function onDone(err, r4) { - if (err || !r4) { - reject(err); - } - resolve(r4); - } - }); - }); - case 5: - this.gl = _context4.sent; - this.inited = true; - case 7: - case "end": - return _context4.stop(); - } - } - }, _callee4, this); - })); - function init(_x4) { - return _init.apply(this, arguments); - } - return init; - }() - }, { - key: "isFloatSupported", - value: function isFloatSupported() { - return this.gl.limits.readFloat; - } - }, { - key: "beginFrame", - value: function beginFrame() { - } - }, { - key: "endFrame", - value: function endFrame() { - } - }]); - return WebGLEngine2; -}(), _temp18)) || _class20); - -// node_modules/@antv/g-webgpu-engine/es/webgpu/index.js -var import_regenerator17 = __toModule(require_regenerator()); -var WebGPUConstants8 = __toModule(require_constants()); -var import_inversify22 = __toModule(require_inversify()); - -// node_modules/@antv/g-webgpu-engine/es/webgpu/glslang.js -var import_regenerator14 = __toModule(require_regenerator()); - -// node_modules/@antv/g-webgpu-engine/es/utils/dom.js -function isWindowObjectExist() { - return typeof window !== "undefined"; -} -function loadScript(scriptUrl, onSuccess, onError, scriptId) { - if (!isWindowObjectExist()) { - return; - } - var head13 = document.getElementsByTagName("head")[0]; - var script = document.createElement("script"); - script.setAttribute("type", "text/javascript"); - script.setAttribute("src", scriptUrl); - if (scriptId) { - script.id = scriptId; - } - script.onload = function() { - if (onSuccess) { - onSuccess(); - } - }; - script.onerror = function(e4) { - if (onError) { - onError("Unable to load script '".concat(scriptUrl, "'"), e4); - } - }; - head13.appendChild(script); -} -function loadScriptAsync(scriptUrl, scriptId) { - return new Promise(function(resolve, reject) { - loadScript(scriptUrl, function() { - resolve(); - }, function(message, exception2) { - reject(exception2); - }); - }); -} - -// node_modules/@antv/g-webgpu-engine/es/webgpu/glslang.js -var glslang; -function glslang_default() { - return _ref.apply(this, arguments); -} -function _ref() { - _ref = _asyncToGenerator(/* @__PURE__ */ import_regenerator14.default.mark(function _callee() { - return import_regenerator14.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!glslang) { - _context.next = 2; - break; - } - return _context.abrupt("return", glslang); - case 2: - _context.next = 4; - return loadScriptAsync("https://preview.babylonjs.com/glslang/glslang.js"); - case 4: - glslang = window.glslang("https://preview.babylonjs.com/glslang/glslang.wasm"); - return _context.abrupt("return", glslang); - case 6: - case "end": - return _context.stop(); - } - } - }, _callee); - })); - return _ref.apply(this, arguments); -} - -// node_modules/@antv/g-webgpu-engine/es/webgpu/WebGPUAttribute.js -var WebGPUAttribute = /* @__PURE__ */ function() { - function WebGPUAttribute2(engine, options) { - _classCallCheck(this, WebGPUAttribute2); - this.engine = engine; - this.options = options; - this.attribute = void 0; - this.buffer = void 0; - var _options = options, buffer = _options.buffer, offset = _options.offset, stride = _options.stride, normalized = _options.normalized, size14 = _options.size, divisor = _options.divisor, arrayStride = _options.arrayStride, attributes = _options.attributes, stepMode = _options.stepMode; - this.buffer = buffer; - this.attribute = { - buffer: buffer.get(), - offset: offset || 0, - stride: stride || 0, - normalized: normalized || false, - divisor: divisor || 0, - arrayStride: arrayStride || 0, - attributes, - stepMode: stepMode || "vertex" - }; - if (size14) { - this.attribute.size = size14; - } - } - _createClass(WebGPUAttribute2, [{ - key: "get", - value: function get100() { - return this.attribute; - } - }, { - key: "updateBuffer", - value: function updateBuffer(options) { - this.buffer.subData(options); - } - }, { - key: "destroy", - value: function destroy() { - this.buffer.destroy(); - } - }]); - return WebGPUAttribute2; -}(); - -// node_modules/@antv/g-webgpu-engine/es/webgpu/WebGPUBuffer.js -var WebGPUConstants2 = __toModule(require_constants()); -var WebGPUBuffer = /* @__PURE__ */ function() { - function WebGPUBuffer2(engine, options) { - _classCallCheck(this, WebGPUBuffer2); - this.engine = engine; - this.options = options; - this.buffer = void 0; - var _options = options, data3 = _options.data, usage = _options.usage, type2 = _options.type; - this.buffer = this.createBuffer(data3 instanceof Array ? new Float32Array(data3) : data3, usage || WebGPUConstants2.BufferUsage.Vertex | WebGPUConstants2.BufferUsage.CopyDst); - } - _createClass(WebGPUBuffer2, [{ - key: "get", - value: function get100() { - return this.buffer; - } - }, { - key: "destroy", - value: function destroy() { - this.buffer.destroy(); - } - }, { - key: "subData", - value: function subData(_ref2) { - var data3 = _ref2.data, offset = _ref2.offset; - this.setSubData(this.buffer, offset, data3 instanceof Array ? new Float32Array(data3) : data3); - } - }, { - key: "createBuffer", - value: function createBuffer(view, flags) { - var padding3 = view.byteLength % 4; - var verticesBufferDescriptor = { - size: view.byteLength + padding3, - usage: flags - }; - var buffer = this.engine.device.createBuffer(verticesBufferDescriptor); - this.setSubData(buffer, 0, view); - return buffer; - } - }, { - key: "setSubData", - value: function setSubData(destBuffer, destOffset, srcArrayBuffer) { - var queue = isSafari ? this.engine.device.getQueue() : this.engine.device.defaultQueue; - queue.writeBuffer(destBuffer, destOffset, srcArrayBuffer); - } - }]); - return WebGPUBuffer2; -}(); - -// node_modules/@antv/g-webgpu-engine/es/webgpu/WebGPUComputeModel.js -var import_regenerator15 = __toModule(require_regenerator()); -var WebGPUConstants3 = __toModule(require_constants()); - -// node_modules/@antv/g-webgpu-engine/es/utils/is-number.js -function isNumber48(value2) { - return typeof value2 === "number"; -} - -// node_modules/@antv/g-webgpu-engine/es/webgpu/WebGPUComputeModel.js -var WebGPUComputeModel = /* @__PURE__ */ function() { - function WebGPUComputeModel2(engine, context) { - _classCallCheck(this, WebGPUComputeModel2); - this.engine = engine; - this.context = context; - this.entity = createEntity(); - this.uniformGPUBufferLayout = []; - this.uniformBuffer = void 0; - this.vertexBuffers = {}; - this.outputBuffer = void 0; - this.bindGroupEntries = void 0; - this.bindGroup = void 0; - this.computePipeline = void 0; - } - _createClass(WebGPUComputeModel2, [{ - key: "init", - value: function() { - var _init = _asyncToGenerator(/* @__PURE__ */ import_regenerator15.default.mark(function _callee() { - var _this = this; - var _yield$this$compileCo, computeStage, buffers, uniforms, bufferBindingIndex, offset, mergedUniformData; - return import_regenerator15.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.next = 2; - return this.compileComputePipelineStageDescriptor(this.context.shader); - case 2: - _yield$this$compileCo = _context.sent; - computeStage = _yield$this$compileCo.computeStage; - buffers = this.context.uniforms.filter(function(uniform) { - return uniform.storageClass === STORAGE_CLASS.StorageBuffer; - }); - uniforms = this.context.uniforms.filter(function(uniform) { - return uniform.storageClass === STORAGE_CLASS.Uniform; - }); - bufferBindingIndex = uniforms.length ? 1 : 0; - this.bindGroupEntries = []; - if (bufferBindingIndex) { - offset = 0; - mergedUniformData = []; - uniforms.forEach(function(uniform) { - if (isNumber48(uniform.data)) { - _this.uniformGPUBufferLayout.push({ - name: uniform.name, - offset - }); - offset += 4; - mergedUniformData.push(uniform.data); - } else { - var _uniform$data; - var originDataLength = ((_uniform$data = uniform.data) === null || _uniform$data === void 0 ? void 0 : _uniform$data.length) || 1; - if (originDataLength === 3) { - originDataLength = 4; - uniform.data.push(0); - } - var padding3 = offset / 4 % 4; - if (padding3 > 0) { - var space = 4 - padding3; - if (originDataLength > 1 && originDataLength <= space) { - if (originDataLength === 2) { - if (space === 3) { - offset += 4; - mergedUniformData.push(0); - } - mergedUniformData.push.apply(mergedUniformData, _toConsumableArray(uniform.data)); - _this.uniformGPUBufferLayout.push({ - name: uniform.name, - offset - }); - } - } else { - for (var i4 = 0; i4 < space; i4++) { - offset += 4; - mergedUniformData.push(0); - } - mergedUniformData.push.apply(mergedUniformData, _toConsumableArray(uniform.data)); - _this.uniformGPUBufferLayout.push({ - name: uniform.name, - offset - }); - } - } - offset += 4 * originDataLength; - } - }); - this.uniformBuffer = new WebGPUBuffer(this.engine, { - data: mergedUniformData instanceof Array ? new Float32Array(mergedUniformData) : mergedUniformData, - usage: WebGPUConstants3.BufferUsage.Uniform | WebGPUConstants3.BufferUsage.CopyDst - }); - this.bindGroupEntries.push({ - binding: 0, - resource: { - buffer: this.uniformBuffer.get() - } - }); - } - buffers.forEach(function(buffer) { - if (buffer.data !== null) { - if (buffer.type === AST_TOKEN_TYPES.Vector4FloatArray || buffer.type === AST_TOKEN_TYPES.FloatArray) { - var gpuBuffer; - if (buffer.name === _this.context.output.name) { - gpuBuffer = new WebGPUBuffer(_this.engine, { - data: isFinite(Number(buffer.data)) ? [buffer.data] : buffer.data, - usage: WebGPUConstants3.BufferUsage.Storage | WebGPUConstants3.BufferUsage.CopyDst | WebGPUConstants3.BufferUsage.CopySrc - }); - _this.outputBuffer = gpuBuffer; - _this.context.output = { - name: buffer.name, - length: isFinite(Number(buffer.data)) ? 1 : buffer.data.length, - typedArrayConstructor: Float32Array, - gpuBuffer: gpuBuffer.get() - }; - } else { - if (buffer.isReferer) { - if (buffer.data.model && buffer.data.model.outputBuffer) { - gpuBuffer = buffer.data.model.outputBuffer; - } else { - } - } else { - gpuBuffer = new WebGPUBuffer(_this.engine, { - data: isFinite(Number(buffer.data)) ? [buffer.data] : buffer.data, - usage: WebGPUConstants3.BufferUsage.Storage | WebGPUConstants3.BufferUsage.CopyDst | WebGPUConstants3.BufferUsage.CopySrc - }); - } - } - _this.vertexBuffers[buffer.name] = gpuBuffer; - _this.bindGroupEntries.push({ - binding: bufferBindingIndex, - resource: { - name: buffer.name, - refer: gpuBuffer ? void 0 : buffer.data, - buffer: gpuBuffer ? gpuBuffer.get() : void 0 - } - }); - bufferBindingIndex++; - } - } - }); - this.computePipeline = this.engine.device.createComputePipeline({ - computeStage - }); - console.log(this.bindGroupEntries); - this.bindGroup = this.engine.device.createBindGroup({ - layout: this.computePipeline.getBindGroupLayout(0), - entries: this.bindGroupEntries - }); - case 13: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - function init() { - return _init.apply(this, arguments); - } - return init; - }() - }, { - key: "destroy", - value: function destroy() { - var _this2 = this; - if (this.uniformBuffer) { - this.uniformBuffer.destroy(); - } - Object.keys(this.vertexBuffers).forEach(function(bufferName) { - return _this2.vertexBuffers[bufferName].destroy(); - }); - } - }, { - key: "readData", - value: function() { - var _readData = _asyncToGenerator(/* @__PURE__ */ import_regenerator15.default.mark(function _callee2() { - var output, length5, typedArrayConstructor, gpuBuffer, byteCount, gpuReadBuffer, encoder, queue, arraybuffer, typedArray; - return import_regenerator15.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - output = this.context.output; - if (!output) { - _context2.next = 16; - break; - } - length5 = output.length, typedArrayConstructor = output.typedArrayConstructor, gpuBuffer = output.gpuBuffer; - if (!gpuBuffer) { - _context2.next = 16; - break; - } - byteCount = length5 * typedArrayConstructor.BYTES_PER_ELEMENT; - gpuReadBuffer = this.engine.device.createBuffer({ - size: byteCount, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ - }); - encoder = this.engine.device.createCommandEncoder(); - encoder.copyBufferToBuffer(gpuBuffer, 0, gpuReadBuffer, 0, byteCount); - queue = isSafari ? this.engine.device.getQueue() : this.engine.device.defaultQueue; - queue.submit([encoder.finish()]); - _context2.next = 12; - return gpuReadBuffer.mapAsync(WebGPUConstants3.MapMode.Read); - case 12: - arraybuffer = gpuReadBuffer.getMappedRange(); - typedArray = new typedArrayConstructor(arraybuffer.slice(0)); - gpuReadBuffer.unmap(); - return _context2.abrupt("return", typedArray); - case 16: - return _context2.abrupt("return", new Float32Array()); - case 17: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - })); - function readData() { - return _readData.apply(this, arguments); - } - return readData; - }() - }, { - key: "run", - value: function run4() { - if (this.engine.currentComputePass) { - var _this$engine$currentC; - this.engine.currentComputePass.setPipeline(this.computePipeline); - this.engine.currentComputePass.setBindGroup(0, this.bindGroup); - (_this$engine$currentC = this.engine.currentComputePass).dispatch.apply(_this$engine$currentC, _toConsumableArray(this.context.dispatch)); - } - } - }, { - key: "updateBuffer", - value: function updateBuffer(bufferName, data3) { - var offset = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0; - var buffer = this.vertexBuffers[bufferName]; - if (buffer) { - buffer.subData({ - data: data3, - offset - }); - } - } - }, { - key: "updateUniform", - value: function updateUniform(uniformName, data3) { - var layout6 = this.uniformGPUBufferLayout.find(function(l4) { - return l4.name === uniformName; - }); - if (layout6) { - this.uniformBuffer.subData({ - data: Number.isFinite(data3) ? new Float32Array([data3]) : new Float32Array(data3), - offset: layout6.offset - }); - } - } - }, { - key: "confirmInput", - value: function confirmInput(model, inputName) { - var inputBuffer = this.vertexBuffers[inputName]; - var outputBuffer = model.outputBuffer; - if (inputBuffer && outputBuffer && inputBuffer !== outputBuffer) { - var encoder = this.engine.device.createCommandEncoder(); - var _context$output = model.context.output, length5 = _context$output.length, typedArrayConstructor = _context$output.typedArrayConstructor; - var byteCount = length5 * typedArrayConstructor.BYTES_PER_ELEMENT; - encoder.copyBufferToBuffer(outputBuffer.get(), 0, inputBuffer.get(), 0, byteCount); - var queue = isSafari ? this.engine.device.getQueue() : this.engine.device.defaultQueue; - queue.submit([encoder.finish()]); - } - } - }, { - key: "compileShaderToSpirV", - value: function compileShaderToSpirV(source, type2, shaderVersion) { - return this.compileRawShaderToSpirV(shaderVersion + source, type2); - } - }, { - key: "compileRawShaderToSpirV", - value: function compileRawShaderToSpirV(source, type2) { - return this.engine.glslang.compileGLSL(source, type2); - } - }, { - key: "compileComputePipelineStageDescriptor", - value: function() { - var _compileComputePipelineStageDescriptor = _asyncToGenerator(/* @__PURE__ */ import_regenerator15.default.mark(function _callee3(computeCode) { - var computeShader, shaderVersion; - return import_regenerator15.default.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - computeShader = computeCode; - shaderVersion = "#version 450\n"; - if (this.engine.options.useWGSL) { - _context3.next = 6; - break; - } - _context3.next = 5; - return this.compileShaderToSpirV(computeCode, "compute", shaderVersion); - case 5: - computeShader = _context3.sent; - case 6: - return _context3.abrupt("return", { - computeStage: { - module: this.engine.device.createShaderModule({ - code: computeShader, - isWHLSL: isSafari - }), - entryPoint: "main" - } - }); - case 7: - case "end": - return _context3.stop(); - } - } - }, _callee3, this); - })); - function compileComputePipelineStageDescriptor(_x) { - return _compileComputePipelineStageDescriptor.apply(this, arguments); - } - return compileComputePipelineStageDescriptor; - }() - }]); - return WebGPUComputeModel2; -}(); - -// node_modules/@antv/g-webgpu-engine/es/webgpu/WebGPUElements.js -var WebGPUConstants4 = __toModule(require_constants()); -var WebGPUElements = /* @__PURE__ */ function() { - function WebGPUElements2(engine, options) { - _classCallCheck(this, WebGPUElements2); - this.engine = engine; - this.options = options; - this.indexCount = void 0; - this.buffer = void 0; - var _options = options, data3 = _options.data, usage = _options.usage, type2 = _options.type, count2 = _options.count; - this.indexCount = count2 || 0; - this.buffer = new WebGPUBuffer(engine, { - data: data3 instanceof Array ? new Uint16Array(data3) : data3, - usage: WebGPUConstants4.BufferUsage.Index | WebGPUConstants4.BufferUsage.CopyDst - }); - } - _createClass(WebGPUElements2, [{ - key: "get", - value: function get100() { - return this.buffer; - } - }, { - key: "subData", - value: function subData(options) { - this.buffer.subData(options); - } - }, { - key: "destroy", - value: function destroy() { - this.buffer.destroy(); - } - }]); - return WebGPUElements2; -}(); - -// node_modules/@antv/g-webgpu-engine/es/webgpu/WebGPUFramebuffer.js -var WebGPUFramebuffer = /* @__PURE__ */ function() { - function WebGPUFramebuffer2(engine, options) { - _classCallCheck(this, WebGPUFramebuffer2); - this.engine = engine; - this.options = options; - this.colorTexture = void 0; - this.depthTexture = void 0; - this.width = 0; - this.height = 0; - var _options = options, width2 = _options.width, height = _options.height, color4 = _options.color, colors = _options.colors, depth = _options.depth, stencil = _options.stencil; - if (color4) { - this.colorTexture = color4; - } - if (depth) { - this.depthTexture = depth; - } - } - _createClass(WebGPUFramebuffer2, [{ - key: "get", - value: function get100() { - var _this$colorTexture, _this$depthTexture; - return { - color: (_this$colorTexture = this.colorTexture) === null || _this$colorTexture === void 0 ? void 0 : _this$colorTexture.get(), - depth: (_this$depthTexture = this.depthTexture) === null || _this$depthTexture === void 0 ? void 0 : _this$depthTexture.get() - }; - } - }, { - key: "destroy", - value: function destroy() { - var _this$colorTexture2, _this$depthTexture2; - (_this$colorTexture2 = this.colorTexture) === null || _this$colorTexture2 === void 0 ? void 0 : _this$colorTexture2.destroy(); - (_this$depthTexture2 = this.depthTexture) === null || _this$depthTexture2 === void 0 ? void 0 : _this$depthTexture2.destroy(); - } - }, { - key: "resize", - value: function resize(_ref2) { - var width2 = _ref2.width, height = _ref2.height; - if (width2 !== this.width || height !== this.height) { - var _this$colorTexture3, _this$depthTexture3; - (_this$colorTexture3 = this.colorTexture) === null || _this$colorTexture3 === void 0 ? void 0 : _this$colorTexture3.resize({ - width: width2, - height - }); - (_this$depthTexture3 = this.depthTexture) === null || _this$depthTexture3 === void 0 ? void 0 : _this$depthTexture3.resize({ - width: width2, - height - }); - } - this.width = width2; - this.height = height; - } - }]); - return WebGPUFramebuffer2; -}(); - -// node_modules/@antv/g-webgpu-engine/es/webgpu/WebGPUModel.js -var import_regenerator16 = __toModule(require_regenerator()); -var WebGPUConstants6 = __toModule(require_constants()); - -// node_modules/@antv/g-webgpu-engine/es/webgpu/constants.js -var WebGPUConstants5 = __toModule(require_constants()); -var _primitiveMap2; -var _depthFuncMap2; -var _blendEquationMap2; -var _blendFuncMap2; -var _formatMap2; -var _filterMap2; -var _wrapModeMap2; -var primitiveMap2 = (_primitiveMap2 = {}, _defineProperty(_primitiveMap2, gl.POINTS, WebGPUConstants5.PrimitiveTopology.PointList), _defineProperty(_primitiveMap2, gl.LINES, WebGPUConstants5.PrimitiveTopology.LineList), _defineProperty(_primitiveMap2, gl.LINE_LOOP, WebGPUConstants5.PrimitiveTopology.LineList), _defineProperty(_primitiveMap2, gl.LINE_STRIP, WebGPUConstants5.PrimitiveTopology.LineStrip), _defineProperty(_primitiveMap2, gl.TRIANGLES, WebGPUConstants5.PrimitiveTopology.TriangleList), _defineProperty(_primitiveMap2, gl.TRIANGLE_FAN, WebGPUConstants5.PrimitiveTopology.TriangleList), _defineProperty(_primitiveMap2, gl.TRIANGLE_STRIP, WebGPUConstants5.PrimitiveTopology.TriangleStrip), _primitiveMap2); -var depthFuncMap2 = (_depthFuncMap2 = {}, _defineProperty(_depthFuncMap2, gl.NEVER, WebGPUConstants5.CompareFunction.Never), _defineProperty(_depthFuncMap2, gl.ALWAYS, WebGPUConstants5.CompareFunction.Always), _defineProperty(_depthFuncMap2, gl.LESS, WebGPUConstants5.CompareFunction.Less), _defineProperty(_depthFuncMap2, gl.LEQUAL, WebGPUConstants5.CompareFunction.LessEqual), _defineProperty(_depthFuncMap2, gl.GREATER, WebGPUConstants5.CompareFunction.Greater), _defineProperty(_depthFuncMap2, gl.GEQUAL, WebGPUConstants5.CompareFunction.GreaterEqual), _defineProperty(_depthFuncMap2, gl.EQUAL, WebGPUConstants5.CompareFunction.Equal), _defineProperty(_depthFuncMap2, gl.NOTEQUAL, WebGPUConstants5.CompareFunction.NotEqual), _depthFuncMap2); -var blendEquationMap2 = (_blendEquationMap2 = {}, _defineProperty(_blendEquationMap2, gl.FUNC_ADD, WebGPUConstants5.BlendOperation.Add), _defineProperty(_blendEquationMap2, gl.MIN_EXT, WebGPUConstants5.BlendOperation.Min), _defineProperty(_blendEquationMap2, gl.MAX_EXT, WebGPUConstants5.BlendOperation.Max), _defineProperty(_blendEquationMap2, gl.FUNC_SUBTRACT, WebGPUConstants5.BlendOperation.Subtract), _defineProperty(_blendEquationMap2, gl.FUNC_REVERSE_SUBTRACT, WebGPUConstants5.BlendOperation.ReverseSubtract), _blendEquationMap2); -var blendFuncMap2 = (_blendFuncMap2 = {}, _defineProperty(_blendFuncMap2, gl.ZERO, WebGPUConstants5.BlendFactor.Zero), _defineProperty(_blendFuncMap2, gl.ONE, WebGPUConstants5.BlendFactor.One), _defineProperty(_blendFuncMap2, gl.SRC_COLOR, WebGPUConstants5.BlendFactor.SrcColor), _defineProperty(_blendFuncMap2, gl.ONE_MINUS_SRC_COLOR, WebGPUConstants5.BlendFactor.OneMinusSrcColor), _defineProperty(_blendFuncMap2, gl.SRC_ALPHA, WebGPUConstants5.BlendFactor.SrcAlpha), _defineProperty(_blendFuncMap2, gl.ONE_MINUS_SRC_ALPHA, WebGPUConstants5.BlendFactor.OneMinusSrcAlpha), _defineProperty(_blendFuncMap2, gl.DST_COLOR, WebGPUConstants5.BlendFactor.DstColor), _defineProperty(_blendFuncMap2, gl.ONE_MINUS_DST_COLOR, WebGPUConstants5.BlendFactor.OneMinusDstColor), _defineProperty(_blendFuncMap2, gl.DST_ALPHA, WebGPUConstants5.BlendFactor.DstAlpha), _defineProperty(_blendFuncMap2, gl.ONE_MINUS_DST_ALPHA, WebGPUConstants5.BlendFactor.OneMinusDstAlpha), _defineProperty(_blendFuncMap2, gl.CONSTANT_COLOR, WebGPUConstants5.BlendFactor.BlendColor), _defineProperty(_blendFuncMap2, gl.ONE_MINUS_CONSTANT_COLOR, WebGPUConstants5.BlendFactor.OneMinusBlendColor), _defineProperty(_blendFuncMap2, gl.SRC_ALPHA_SATURATE, WebGPUConstants5.BlendFactor.SrcAlphaSaturated), _blendFuncMap2); -var formatMap2 = (_formatMap2 = {}, _defineProperty(_formatMap2, gl.ALPHA, "r8unorm"), _defineProperty(_formatMap2, gl.RGBA, "rgba8unorm"), _defineProperty(_formatMap2, gl.DEPTH_COMPONENT, "depth32float"), _defineProperty(_formatMap2, gl.DEPTH_STENCIL, "depth24plus-stencil8"), _formatMap2); -var filterMap2 = (_filterMap2 = {}, _defineProperty(_filterMap2, gl.NEAREST, "nearest"), _defineProperty(_filterMap2, gl.LINEAR, "linear"), _filterMap2); -var wrapModeMap2 = (_wrapModeMap2 = {}, _defineProperty(_wrapModeMap2, gl.REPEAT, "repeat"), _defineProperty(_wrapModeMap2, gl.CLAMP_TO_EDGE, "clamp-to-edge"), _defineProperty(_wrapModeMap2, gl.MIRRORED_REPEAT, "mirror-repeat"), _wrapModeMap2); -function getCullMode(_ref2) { - var cull = _ref2.cull; - if (!cull || !cull.enable) { - return WebGPUConstants5.CullMode.None; - } - if (cull.face) { - return cull.face === gl.FRONT ? WebGPUConstants5.CullMode.Front : WebGPUConstants5.CullMode.Back; - } -} -function getDepthStencilStateDescriptor(_ref2) { - var depth = _ref2.depth, stencil = _ref2.stencil; - var stencilFrontBack = { - compare: WebGPUConstants5.CompareFunction.Always, - depthFailOp: WebGPUConstants5.StencilOperation.Keep, - failOp: WebGPUConstants5.StencilOperation.Keep, - passOp: WebGPUConstants5.StencilOperation.Keep - }; - return { - depthWriteEnabled: depth && depth.enable, - depthCompare: depthFuncMap2[(depth === null || depth === void 0 ? void 0 : depth.func) || gl.ALWAYS], - format: WebGPUConstants5.TextureFormat.Depth24PlusStencil8, - stencilFront: stencilFrontBack, - stencilBack: stencilFrontBack, - stencilReadMask: 4294967295, - stencilWriteMask: 4294967295 - }; -} -function getColorStateDescriptors(_ref3, swapChainFormat) { - var blend2 = _ref3.blend; - return [{ - format: swapChainFormat, - alphaBlend: { - srcFactor: blendFuncMap2[blend2 && blend2.func && blend2.func.srcAlpha || gl.ONE], - dstFactor: blendFuncMap2[blend2 && blend2.func && blend2.func.dstAlpha || gl.ZERO], - operation: blendEquationMap2[blend2 && blend2.equation && blend2.equation.alpha || gl.FUNC_ADD] - }, - colorBlend: { - srcFactor: blendFuncMap2[blend2 && blend2.func && blend2.func.srcRGB || gl.ONE], - dstFactor: blendFuncMap2[blend2 && blend2.func && blend2.func.dstRGB || gl.ZERO], - operation: blendEquationMap2[blend2 && blend2.equation && blend2.equation.rgb || gl.FUNC_ADD] - }, - writeMask: WebGPUConstants5.ColorWrite.All - }]; -} - -// node_modules/@antv/g-webgpu-engine/es/webgpu/WebGPUModel.js -function ownKeys8(object, enumerableOnly) { - var keys6 = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) - symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys6.push.apply(keys6, symbols); - } - return keys6; -} -function _objectSpread8(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = arguments[i4] != null ? arguments[i4] : {}; - if (i4 % 2) { - ownKeys8(Object(source), true).forEach(function(key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys8(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - return target; -} -function concatenate(resultConstructor) { - var totalLength = 0; - for (var _len = arguments.length, arrays = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - arrays[_key - 1] = arguments[_key]; - } - for (var _i = 0, _arrays = arrays; _i < _arrays.length; _i++) { - var arr = _arrays[_i]; - totalLength += arr.length; - } - var result = new resultConstructor(totalLength); - var offset = 0; - for (var _i2 = 0, _arrays2 = arrays; _i2 < _arrays2.length; _i2++) { - var _arr = _arrays2[_i2]; - result.set(_arr, offset); - offset += _arr.length; - } - return result; -} -var WebGPUModel = /* @__PURE__ */ function() { - function WebGPUModel2(engine, options) { - _classCallCheck(this, WebGPUModel2); - this.engine = engine; - this.options = options; - this.pipelineLayout = void 0; - this.renderPipeline = void 0; - this.uniformsBindGroupLayout = void 0; - this.uniformBindGroup = void 0; - this.uniformBuffer = void 0; - this.uniforms = {}; - this.uniformGPUBufferLayout = []; - this.attributeCache = {}; - this.indexBuffer = void 0; - this.indexCount = void 0; - } - _createClass(WebGPUModel2, [{ - key: "init", - value: function() { - var _init = _asyncToGenerator(/* @__PURE__ */ import_regenerator16.default.mark(function _callee() { - var _this = this; - var _this$options, vs, fs, attributes, uniforms, primitive, count2, elements, depth, blend2, stencil, cull, instances, _yield$this$compilePi, vertexStage, fragmentStage, vertexState, descriptor; - return import_regenerator16.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _this$options = this.options, vs = _this$options.vs, fs = _this$options.fs, attributes = _this$options.attributes, uniforms = _this$options.uniforms, primitive = _this$options.primitive, count2 = _this$options.count, elements = _this$options.elements, depth = _this$options.depth, blend2 = _this$options.blend, stencil = _this$options.stencil, cull = _this$options.cull, instances = _this$options.instances; - _context.next = 3; - return this.compilePipelineStageDescriptor(vs, fs, null); - case 3: - _yield$this$compilePi = _context.sent; - vertexStage = _yield$this$compilePi.vertexStage; - fragmentStage = _yield$this$compilePi.fragmentStage; - if (uniforms) { - this.buildUniformBindGroup(uniforms); - } - if (elements) { - this.indexBuffer = elements.get(); - this.indexCount = elements.indexCount; - } - vertexState = { - vertexBuffers: Object.keys(attributes).map(function(attributeName, i4) { - var attribute = attributes[attributeName]; - var _attribute$get = attribute.get(), arrayStride = _attribute$get.arrayStride, stepMode = _attribute$get.stepMode, ats = _attribute$get.attributes; - _this.attributeCache[attributeName] = attribute; - return { - arrayStride, - stepMode, - attributes: ats - }; - }) - }; - descriptor = { - sampleCount: this.engine.mainPassSampleCount, - primitiveTopology: primitiveMap2[primitive || gl.TRIANGLES], - rasterizationState: _objectSpread8(_objectSpread8({}, this.getDefaultRasterizationStateDescriptor()), {}, { - cullMode: getCullMode({ - cull - }) - }), - depthStencilState: getDepthStencilStateDescriptor({ - depth, - stencil - }), - colorStates: getColorStateDescriptors({ - blend: blend2 - }, this.engine.options.swapChainFormat), - layout: this.pipelineLayout, - vertexStage, - fragmentStage, - vertexState - }; - this.renderPipeline = this.engine.device.createRenderPipeline(descriptor); - case 11: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - function init() { - return _init.apply(this, arguments); - } - return init; - }() - }, { - key: "addUniforms", - value: function addUniforms(uniforms) { - this.uniforms = _objectSpread8(_objectSpread8({}, this.uniforms), extractUniforms2(uniforms)); - } - }, { - key: "draw", - value: function draw4(options) { - var _this2 = this; - var renderPass = this.engine.getCurrentRenderPass(); - var uniforms = _objectSpread8(_objectSpread8({}, this.uniforms), extractUniforms2(options.uniforms || {})); - var bindGroupBindings = []; - Object.keys(uniforms).forEach(function(uniformName) { - var type2 = _typeof3(uniforms[uniformName]); - if (type2 === "boolean" || type2 === "number" || Array.isArray(uniforms[uniformName]) || uniforms[uniformName].BYTES_PER_ELEMENT) { - var _this2$uniformGPUBuff; - var offset = (_this2$uniformGPUBuff = _this2.uniformGPUBufferLayout.find(function(_ref2) { - var name = _ref2.name; - return name === uniformName; - })) === null || _this2$uniformGPUBuff === void 0 ? void 0 : _this2$uniformGPUBuff.offset; - if (offset !== null) { - _this2.uniformBuffer.subData({ - data: uniforms[uniformName], - offset - }); - } - } else { - var _this2$uniformGPUBuff2; - var _offset = (_this2$uniformGPUBuff2 = _this2.uniformGPUBufferLayout.find(function(_ref2) { - var name = _ref2.name; - return name === uniformName; - })) === null || _this2$uniformGPUBuff2 === void 0 ? void 0 : _this2$uniformGPUBuff2.offset; - if (_offset !== null) { - var textureOrFramebuffer = uniforms[uniformName].get(); - var _ref3 = textureOrFramebuffer.color || textureOrFramebuffer, texture = _ref3.texture, sampler = _ref3.sampler; - if (sampler) { - bindGroupBindings.push({ - binding: _offset, - resource: sampler - }); - _offset++; - } - bindGroupBindings.push({ - binding: _offset, - resource: texture.createView() - }); - } - } - }); - if (this.uniformBuffer) { - bindGroupBindings[0] = { - binding: 0, - resource: { - buffer: this.uniformBuffer.get() - } - }; - } - this.uniformBindGroup = this.engine.device.createBindGroup({ - layout: this.uniformsBindGroupLayout, - entries: bindGroupBindings - }); - if (this.renderPipeline) { - renderPass.setPipeline(this.renderPipeline); - } - renderPass.setBindGroup(0, this.uniformBindGroup); - if (this.indexBuffer) { - renderPass.setIndexBuffer(this.indexBuffer.get(), WebGPUConstants6.IndexFormat.Uint32, 0); - } - Object.keys(this.attributeCache).forEach(function(attributeName, i4) { - renderPass.setVertexBuffer(0 + i4, _this2.attributeCache[attributeName].get().buffer, 0); - }); - if (this.indexBuffer) { - renderPass.drawIndexed(this.indexCount, this.options.instances || 1, 0, 0, 0); - } else { - renderPass.draw(this.options.count || 0, this.options.instances || 0, 0, 0); - } - } - }, { - key: "destroy", - value: function destroy() { - throw new Error("Method not implemented."); - } - }, { - key: "compilePipelineStageDescriptor", - value: function() { - var _compilePipelineStageDescriptor = _asyncToGenerator(/* @__PURE__ */ import_regenerator16.default.mark(function _callee2(vertexCode, fragmentCode, defines) { - var shaderVersion, vertexShader, fragmentShader; - return import_regenerator16.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - shaderVersion = "#version 450\n"; - vertexShader = vertexCode; - fragmentShader = fragmentCode; - if (this.engine.options.useWGSL) { - _context2.next = 10; - break; - } - _context2.next = 6; - return this.compileShaderToSpirV(vertexCode, "vertex", shaderVersion); - case 6: - vertexShader = _context2.sent; - _context2.next = 9; - return this.compileShaderToSpirV(fragmentCode, "fragment", shaderVersion); - case 9: - fragmentShader = _context2.sent; - case 10: - return _context2.abrupt("return", this.createPipelineStageDescriptor(vertexShader, fragmentShader)); - case 11: - case "end": - return _context2.stop(); - } - } - }, _callee2, this); - })); - function compilePipelineStageDescriptor(_x, _x2, _x3) { - return _compilePipelineStageDescriptor.apply(this, arguments); - } - return compilePipelineStageDescriptor; - }() - }, { - key: "compileShaderToSpirV", - value: function compileShaderToSpirV(source, type2, shaderVersion) { - return this.compileRawShaderToSpirV(shaderVersion + source, type2); - } - }, { - key: "compileRawShaderToSpirV", - value: function compileRawShaderToSpirV(source, type2) { - return this.engine.glslang.compileGLSL(source, type2); - } - }, { - key: "createPipelineStageDescriptor", - value: function createPipelineStageDescriptor(vertexShader, fragmentShader) { - return { - vertexStage: { - module: this.engine.device.createShaderModule({ - code: vertexShader, - isWHLSL: isSafari - }), - entryPoint: "main" - }, - fragmentStage: { - module: this.engine.device.createShaderModule({ - code: fragmentShader, - isWHLSL: isSafari - }), - entryPoint: "main" - } - }; - } - }, { - key: "getDefaultRasterizationStateDescriptor", - value: function getDefaultRasterizationStateDescriptor() { - return { - frontFace: WebGPUConstants6.FrontFace.CCW, - cullMode: WebGPUConstants6.CullMode.None, - depthBias: 0, - depthBiasSlopeScale: 0, - depthBiasClamp: 0 - }; - } - }, { - key: "buildUniformBindGroup", - value: function buildUniformBindGroup(uniforms) { - var _this3 = this; - var offset = 0; - var mergedUniformData = concatenate.apply(void 0, [Float32Array].concat(_toConsumableArray(Object.keys(uniforms).map(function(uniformName) { - if (uniforms[uniformName]) { - _this3.uniformGPUBufferLayout.push({ - name: uniformName, - offset - }); - offset += (uniforms[uniformName].length || 1) * 4; - return uniforms[uniformName]; - } else { - return []; - } - })))); - var entries = []; - var hasUniform = false; - if (mergedUniformData.length) { - hasUniform = true; - entries.push({ - binding: 0, - visibility: WebGPUConstants6.ShaderStage.Fragment | WebGPUConstants6.ShaderStage.Vertex, - type: WebGPUConstants6.BindingType.UniformBuffer - }); - } - Object.keys(uniforms).filter(function(uniformName) { - return uniforms[uniformName] === null; - }).forEach(function(uniformName, i4) { - _this3.uniformGPUBufferLayout.push({ - name: uniformName, - offset: i4 * 2 + (hasUniform ? 1 : 0) - }); - entries.push({ - binding: i4 * 2 + (hasUniform ? 1 : 0), - visibility: WebGPUConstants6.ShaderStage.Fragment, - type: WebGPUConstants6.BindingType.Sampler - }, { - binding: i4 * 2 + (hasUniform ? 1 : 0) + 1, - visibility: WebGPUConstants6.ShaderStage.Fragment, - type: WebGPUConstants6.BindingType.SampledTexture - }); - }); - this.uniformsBindGroupLayout = this.engine.device.createBindGroupLayout({ - entries - }); - this.pipelineLayout = this.engine.device.createPipelineLayout({ - bindGroupLayouts: [this.uniformsBindGroupLayout] - }); - if (hasUniform) { - this.uniformBuffer = new WebGPUBuffer(this.engine, { - data: mergedUniformData instanceof Array ? new Float32Array(mergedUniformData) : mergedUniformData, - usage: WebGPUConstants6.BufferUsage.Uniform | WebGPUConstants6.BufferUsage.CopyDst - }); - } - } - }]); - return WebGPUModel2; -}(); - -// node_modules/@antv/g-webgpu-engine/es/webgpu/WebGPUTexture2D.js -var WebGPUConstants7 = __toModule(require_constants()); -var WebGPUTexture2D = /* @__PURE__ */ function() { - function WebGPUTexture2D2(engine, options) { - _classCallCheck(this, WebGPUTexture2D2); - this.engine = engine; - this.options = options; - this.texture = void 0; - this.sampler = void 0; - this.width = void 0; - this.height = void 0; - this.createTexture(); - } - _createClass(WebGPUTexture2D2, [{ - key: "get", - value: function get100() { - return { - texture: this.texture, - sampler: this.sampler - }; - } - }, { - key: "update", - value: function update15() { - } - }, { - key: "resize", - value: function resize(_ref2) { - var width2 = _ref2.width, height = _ref2.height; - if (width2 !== this.width || height !== this.height) { - this.destroy(); - this.createTexture(); - } - this.width = width2; - this.height = height; - } - }, { - key: "destroy", - value: function destroy() { - if (this.texture) { - this.texture.destroy(); - } - } - }, { - key: "createTexture", - value: function createTexture() { - var _this$options = this.options, data3 = _this$options.data, _this$options$type = _this$options.type, type2 = _this$options$type === void 0 ? gl.UNSIGNED_BYTE : _this$options$type, width2 = _this$options.width, height = _this$options.height, _this$options$flipY = _this$options.flipY, flipY = _this$options$flipY === void 0 ? false : _this$options$flipY, _this$options$format = _this$options.format, format2 = _this$options$format === void 0 ? gl.RGBA : _this$options$format, _this$options$mipmap = _this$options.mipmap, mipmap = _this$options$mipmap === void 0 ? false : _this$options$mipmap, _this$options$wrapS = _this$options.wrapS, wrapS = _this$options$wrapS === void 0 ? gl.CLAMP_TO_EDGE : _this$options$wrapS, _this$options$wrapT = _this$options.wrapT, wrapT = _this$options$wrapT === void 0 ? gl.CLAMP_TO_EDGE : _this$options$wrapT, _this$options$aniso = _this$options.aniso, aniso = _this$options$aniso === void 0 ? 0 : _this$options$aniso, _this$options$alignme = _this$options.alignment, alignment = _this$options$alignme === void 0 ? 1 : _this$options$alignme, _this$options$premult = _this$options.premultiplyAlpha, premultiplyAlpha = _this$options$premult === void 0 ? false : _this$options$premult, _this$options$mag = _this$options.mag, mag = _this$options$mag === void 0 ? gl.NEAREST : _this$options$mag, _this$options$min = _this$options.min, min13 = _this$options$min === void 0 ? gl.NEAREST : _this$options$min, _this$options$colorSp = _this$options.colorSpace, colorSpace = _this$options$colorSp === void 0 ? gl.BROWSER_DEFAULT_WEBGL : _this$options$colorSp, usage = _this$options.usage; - this.width = width2; - this.height = height; - this.texture = this.engine.device.createTexture({ - size: [width2, height, 1], - mipLevelCount: 1, - sampleCount: 1, - dimension: WebGPUConstants7.TextureDimension.E2d, - format: formatMap2[format2], - usage: usage || WebGPUConstants7.TextureUsage.Sampled | WebGPUConstants7.TextureUsage.CopyDst - }); - if (!usage || usage & WebGPUConstants7.TextureUsage.Sampled) { - this.sampler = this.engine.device.createSampler({ - addressModeU: wrapModeMap2[wrapS], - addressModeV: wrapModeMap2[wrapT], - addressModeW: wrapModeMap2[wrapS], - magFilter: filterMap2[mag], - minFilter: filterMap2[min13], - maxAnisotropy: aniso - }); - } - } - }]); - return WebGPUTexture2D2; -}(); - -// node_modules/@antv/g-webgpu-engine/es/webgpu/index.js -var _dec49; -var _class21; -var _temp19; -var WebGPUEngine = (_dec49 = (0, import_inversify22.injectable)(), _dec49(_class21 = (_temp19 = /* @__PURE__ */ function() { - function WebGPUEngine2() { - var _this = this; - _classCallCheck(this, WebGPUEngine2); - this.supportWebGPU = true; - this.useWGSL = false; - this.options = void 0; - this.canvas = void 0; - this.context = void 0; - this.glslang = void 0; - this.adapter = void 0; - this.device = void 0; - this.swapChain = void 0; - this.mainPassSampleCount = void 0; - this.mainTexture = void 0; - this.depthTexture = void 0; - this.mainColorAttachments = void 0; - this.mainTextureExtends = void 0; - this.mainDepthAttachment = void 0; - this.uploadEncoder = void 0; - this.renderEncoder = void 0; - this.computeEncoder = void 0; - this.renderTargetEncoder = void 0; - this.commandBuffers = new Array(4).fill(void 0); - this.currentRenderPass = null; - this.mainRenderPass = null; - this.currentRenderTargetViewDescriptor = void 0; - this.currentComputePass = null; - this.bundleEncoder = void 0; - this.tempBuffers = []; - this.currentRenderTarget = null; - this.uploadEncoderDescriptor = { - label: "upload" - }; - this.renderEncoderDescriptor = { - label: "render" - }; - this.renderTargetEncoderDescriptor = { - label: "renderTarget" - }; - this.computeEncoderDescriptor = { - label: "compute" - }; - this.pipelines = {}; - this.computePipelines = {}; - this.defaultSampleCount = 4; - this.clearDepthValue = 1; - this.clearStencilValue = 0; - this.transientViewport = { - x: Infinity, - y: 0, - width: 0, - height: 0 - }; - this.cachedViewport = { - x: 0, - y: 0, - width: 0, - height: 0 - }; - this.clear = function(options) { - var framebuffer = options.framebuffer, color4 = options.color, depth = options.depth, stencil = options.stencil; - if (_this.options.supportCompute) { - _this.startComputePass(); - } - if (_this.currentRenderTarget) { - if (_this.currentRenderPass) { - _this.endRenderTargetRenderPass(); - } - _this.startRenderTargetRenderPass(_this.currentRenderTarget, color4 ? color4 : null, !!depth, !!stencil); - } else { - _this.mainColorAttachments[0].loadValue = color4 ? color4 : WebGPUConstants8.LoadOp.Load; - _this.mainDepthAttachment.depthLoadValue = depth ? depth : WebGPUConstants8.LoadOp.Load; - _this.mainDepthAttachment.stencilLoadValue = stencil ? _this.clearStencilValue : WebGPUConstants8.LoadOp.Load; - if (_this.mainRenderPass) { - _this.endMainRenderPass(); - } - _this.startMainRenderPass(); - } - }; - this.createModel = /* @__PURE__ */ function() { - var _ref2 = _asyncToGenerator(/* @__PURE__ */ import_regenerator17.default.mark(function _callee(options) { - var model; - return import_regenerator17.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - model = new WebGPUModel(_this, options); - _context.next = 3; - return model.init(); - case 3: - return _context.abrupt("return", model); - case 4: - case "end": - return _context.stop(); - } - } - }, _callee); - })); - return function(_x) { - return _ref2.apply(this, arguments); - }; - }(); - this.createAttribute = function(options) { - return new WebGPUAttribute(_this, options); - }; - this.createBuffer = function(options) { - return new WebGPUBuffer(_this, options); - }; - this.createElements = function(options) { - return new WebGPUElements(_this, options); - }; - this.createTexture2D = function(options) { - return new WebGPUTexture2D(_this, options); - }; - this.createFramebuffer = function(options) { - return new WebGPUFramebuffer(_this, options); - }; - this.useFramebuffer = function(framebuffer, drawCommands) { - if (_this.currentRenderTarget) { - _this.unbindFramebuffer(_this.currentRenderTarget); - } - _this.currentRenderTarget = framebuffer; - _this.currentRenderTargetViewDescriptor = { - dimension: WebGPUConstants8.TextureViewDimension.E2d, - arrayLayerCount: 1, - aspect: WebGPUConstants8.TextureAspect.All - }; - _this.currentRenderPass = null; - drawCommands(); - }; - this.createComputeModel = /* @__PURE__ */ function() { - var _ref2 = _asyncToGenerator(/* @__PURE__ */ import_regenerator17.default.mark(function _callee2(context) { - var model; - return import_regenerator17.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - model = new WebGPUComputeModel(_this, context); - _context2.next = 3; - return model.init(); - case 3: - return _context2.abrupt("return", model); - case 4: - case "end": - return _context2.stop(); - } - } - }, _callee2); - })); - return function(_x2) { - return _ref2.apply(this, arguments); - }; - }(); - this.getCanvas = function() { - return _this.canvas; - }; - this.getGLContext = function() { - throw new Error("Method not implemented."); - }; - this.viewport = function(_ref3) { - var x6 = _ref3.x, y5 = _ref3.y, width2 = _ref3.width, height = _ref3.height; - if (!_this.currentRenderPass) { - _this.transientViewport = { - x: x6, - y: y5, - width: width2, - height - }; - } else if (_this.transientViewport.x !== Infinity) { - var renderPass = _this.getCurrentRenderPass(); - renderPass.setViewport(_this.transientViewport.x, _this.transientViewport.y, _this.transientViewport.width, _this.transientViewport.height, 0, 1); - } else if (x6 !== _this.cachedViewport.x || y5 !== _this.cachedViewport.y || width2 !== _this.cachedViewport.width || height !== _this.cachedViewport.height) { - _this.cachedViewport = { - x: x6, - y: y5, - width: width2, - height - }; - var _renderPass = _this.getCurrentRenderPass(); - _renderPass.setViewport(x6, y5, width2, height, 0, 1); - } - }; - this.readPixels = function(options) { - throw new Error("Method not implemented."); - }; - } - _createClass(WebGPUEngine2, [{ - key: "isFloatSupported", - value: function isFloatSupported() { - return true; - } - }, { - key: "init", - value: function() { - var _init = _asyncToGenerator(/* @__PURE__ */ import_regenerator17.default.mark(function _callee3(config) { - return import_regenerator17.default.wrap(function _callee3$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - this.canvas = config.canvas; - this.options = config; - this.useWGSL = !!config.useWGSL; - this.mainPassSampleCount = config.antialiasing ? this.defaultSampleCount : 1; - _context3.next = 6; - return this.initGlslang(); - case 6: - this.initContextAndSwapChain(); - this.initMainAttachments(); - case 8: - case "end": - return _context3.stop(); - } - } - }, _callee3, this); - })); - function init(_x3) { - return _init.apply(this, arguments); - } - return init; - }() - }, { - key: "setScissor", - value: function setScissor(scissor) { - throw new Error("Method not implemented."); - } - }, { - key: "destroy", - value: function destroy() { - if (this.mainTexture) { - this.mainTexture.destroy(); - } - if (this.depthTexture) { - this.depthTexture.destroy(); - } - this.tempBuffers.forEach(function(buffer) { - return buffer.destroy(); - }); - this.tempBuffers = []; - } - }, { - key: "beginFrame", - value: function beginFrame() { - this.uploadEncoder = this.device.createCommandEncoder(this.uploadEncoderDescriptor); - this.renderEncoder = this.device.createCommandEncoder(this.renderEncoderDescriptor); - this.renderTargetEncoder = this.device.createCommandEncoder(this.renderTargetEncoderDescriptor); - if (this.options.supportCompute) { - this.computeEncoder = this.device.createCommandEncoder(this.computeEncoderDescriptor); - } - } - }, { - key: "endFrame", - value: function endFrame() { - if (this.options.supportCompute) { - this.endComputePass(); - } - this.endMainRenderPass(); - this.commandBuffers[0] = this.uploadEncoder.finish(); - this.commandBuffers[1] = this.renderEncoder.finish(); - if (this.options.supportCompute) { - this.commandBuffers[2] = this.computeEncoder.finish(); - } - this.commandBuffers[3] = this.renderTargetEncoder.finish(); - if (isSafari) { - this.device.getQueue().submit(this.commandBuffers.filter(function(buffer) { - return buffer; - })); - } else { - this.device.defaultQueue.submit(this.commandBuffers.filter(function(buffer) { - return buffer; - })); - } - } - }, { - key: "getCurrentRenderPass", - value: function getCurrentRenderPass() { - if (this.currentRenderTarget && !this.currentRenderPass) { - this.startRenderTargetRenderPass(this.currentRenderTarget, null, false, false); - } else if (!this.currentRenderPass) { - this.startMainRenderPass(); - } - return this.currentRenderPass; - } - }, { - key: "initGlslang", - value: function() { - var _initGlslang = _asyncToGenerator(/* @__PURE__ */ import_regenerator17.default.mark(function _callee4() { - var _navigator, _navigator$gpu; - return import_regenerator17.default.wrap(function _callee4$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - _context4.next = 2; - return glslang_default(); - case 2: - this.glslang = _context4.sent; - _context4.next = 5; - return (_navigator = navigator) === null || _navigator === void 0 ? void 0 : (_navigator$gpu = _navigator.gpu) === null || _navigator$gpu === void 0 ? void 0 : _navigator$gpu.requestAdapter(); - case 5: - this.adapter = _context4.sent; - _context4.next = 8; - return this.adapter.requestDevice(); - case 8: - this.device = _context4.sent; - case 9: - case "end": - return _context4.stop(); - } - } - }, _callee4, this); - })); - function initGlslang() { - return _initGlslang.apply(this, arguments); - } - return initGlslang; - }() - }, { - key: "initContextAndSwapChain", - value: function initContextAndSwapChain() { - this.context = this.canvas.getContext(isSafari ? "gpu" : "gpupresent"); - this.swapChain = this.context.configureSwapChain({ - device: this.device, - format: this.options.swapChainFormat, - usage: WebGPUConstants8.TextureUsage.OutputAttachment | WebGPUConstants8.TextureUsage.CopySrc - }); - } - }, { - key: "initMainAttachments", - value: function initMainAttachments() { - this.mainTextureExtends = { - width: this.canvas.width, - height: this.canvas.height, - depth: 1 - }; - if (this.options.antialiasing) { - var mainTextureDescriptor = { - size: this.mainTextureExtends, - mipLevelCount: 1, - sampleCount: this.mainPassSampleCount, - dimension: WebGPUConstants8.TextureDimension.E2d, - format: WebGPUConstants8.TextureFormat.BGRA8Unorm, - usage: WebGPUConstants8.TextureUsage.OutputAttachment - }; - if (this.mainTexture) { - this.mainTexture.destroy(); - } - this.mainTexture = this.device.createTexture(mainTextureDescriptor); - this.mainColorAttachments = [{ - attachment: isSafari ? this.mainTexture.createDefaultView() : this.mainTexture.createView(), - loadValue: [0, 0, 0, 1], - storeOp: WebGPUConstants8.StoreOp.Store - }]; - } else { - this.mainColorAttachments = [{ - attachment: isSafari ? this.swapChain.getCurrentTexture().createDefaultView() : this.swapChain.getCurrentTexture().createView(), - loadValue: [0, 0, 0, 1], - storeOp: WebGPUConstants8.StoreOp.Store - }]; - } - var depthTextureDescriptor = { - size: this.mainTextureExtends, - mipLevelCount: 1, - sampleCount: this.mainPassSampleCount, - dimension: WebGPUConstants8.TextureDimension.E2d, - format: isSafari ? "depth32float-stencil8" : WebGPUConstants8.TextureFormat.Depth24PlusStencil8, - usage: WebGPUConstants8.TextureUsage.OutputAttachment - }; - if (this.depthTexture) { - this.depthTexture.destroy(); - } - this.depthTexture = this.device.createTexture(depthTextureDescriptor); - this.mainDepthAttachment = { - attachment: isSafari ? this.depthTexture.createDefaultView() : this.depthTexture.createView(), - depthLoadValue: this.clearDepthValue, - depthStoreOp: WebGPUConstants8.StoreOp.Store, - stencilLoadValue: this.clearStencilValue, - stencilStoreOp: WebGPUConstants8.StoreOp.Store - }; - } - }, { - key: "startComputePass", - value: function startComputePass() { - if (this.currentComputePass) { - this.endComputePass(); - } - this.currentComputePass = this.computeEncoder.beginComputePass(); - } - }, { - key: "startMainRenderPass", - value: function startMainRenderPass() { - if (this.currentRenderPass && !this.currentRenderTarget) { - this.endMainRenderPass(); - } - if (this.options.antialiasing) { - this.mainColorAttachments[0].resolveTarget = isSafari ? this.swapChain.getCurrentTexture().createDefaultView() : this.swapChain.getCurrentTexture().createView(); - } else { - this.mainColorAttachments[0].attachment = isSafari ? this.swapChain.getCurrentTexture().createDefaultView() : this.swapChain.getCurrentTexture().createView(); - } - this.currentRenderPass = this.renderEncoder.beginRenderPass({ - colorAttachments: this.mainColorAttachments, - depthStencilAttachment: this.mainDepthAttachment - }); - this.mainRenderPass = this.currentRenderPass; - if (this.cachedViewport) { - this.viewport(this.cachedViewport); - } - } - }, { - key: "startRenderTargetRenderPass", - value: function startRenderTargetRenderPass(renderTarget, clearColor, clearDepth) { - var _renderTarget$get$col, _renderTarget$get$dep; - var clearStencil = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : false; - var gpuTexture = (_renderTarget$get$col = renderTarget.get().color) === null || _renderTarget$get$col === void 0 ? void 0 : _renderTarget$get$col.texture; - var colorTextureView; - if (gpuTexture) { - colorTextureView = gpuTexture.createView(this.currentRenderTargetViewDescriptor); - } - var depthStencilTexture = (_renderTarget$get$dep = renderTarget.get().depth) === null || _renderTarget$get$dep === void 0 ? void 0 : _renderTarget$get$dep.texture; - var depthStencilTextureView; - if (depthStencilTexture) { - depthStencilTextureView = depthStencilTexture.createView(); - } - var renderPass = this.renderTargetEncoder.beginRenderPass({ - colorAttachments: [{ - attachment: colorTextureView, - loadValue: clearColor !== null ? clearColor : WebGPUConstants8.LoadOp.Load, - storeOp: WebGPUConstants8.StoreOp.Store - }], - depthStencilAttachment: depthStencilTexture && depthStencilTextureView ? { - attachment: depthStencilTextureView, - depthLoadValue: clearDepth ? this.clearDepthValue : WebGPUConstants8.LoadOp.Load, - depthStoreOp: WebGPUConstants8.StoreOp.Store, - stencilLoadValue: clearStencil ? this.clearStencilValue : WebGPUConstants8.LoadOp.Load, - stencilStoreOp: WebGPUConstants8.StoreOp.Store - } : void 0 - }); - this.currentRenderPass = renderPass; - if (this.cachedViewport) { - this.viewport(this.cachedViewport); - } - } - }, { - key: "endMainRenderPass", - value: function endMainRenderPass() { - if (this.currentRenderPass === this.mainRenderPass && this.currentRenderPass !== null) { - this.currentRenderPass.endPass(); - this.resetCachedViewport(); - this.currentRenderPass = null; - this.mainRenderPass = null; - } - } - }, { - key: "endComputePass", - value: function endComputePass() { - if (this.currentComputePass) { - this.currentComputePass.endPass(); - this.currentComputePass = null; - } - } - }, { - key: "endRenderTargetRenderPass", - value: function endRenderTargetRenderPass() { - if (this.currentRenderPass) { - this.currentRenderPass.endPass(); - this.resetCachedViewport(); - } - } - }, { - key: "resetCachedViewport", - value: function resetCachedViewport() { - this.cachedViewport = { - x: 0, - y: 0, - width: 0, - height: 0 - }; - } - }, { - key: "unbindFramebuffer", - value: function unbindFramebuffer(framebuffer) { - if (this.currentRenderPass && this.currentRenderPass !== this.mainRenderPass) { - this.endRenderTargetRenderPass(); - } - this.transientViewport.x = Infinity; - this.currentRenderTarget = null; - this.currentRenderPass = this.mainRenderPass; - } - }]); - return WebGPUEngine2; -}(), _temp19)) || _class21); - -// node_modules/@antv/g-webgpu/es/World.js -var WebGPUConstants10 = __toModule(require_constants()); -var import_inversify36 = __toModule(require_inversify()); - -// node_modules/@antv/g-webgpu/es/geometry/Box.js -var import_inversify23 = __toModule(require_inversify()); -var _dec50; -var _class30; -function _createSuper9(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct9(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct9() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var primitiveUv1Padding = 4 / 64; -var primitiveUv1PaddingScale = 1 - primitiveUv1Padding * 2; -var Box2 = (_dec50 = (0, import_inversify23.injectable)(), _dec50(_class30 = /* @__PURE__ */ function(_Geometry) { - _inherits(Box3, _Geometry); - var _super = _createSuper9(Box3); - function Box3() { - _classCallCheck(this, Box3); - return _super.apply(this, arguments); - } - _createClass(Box3, [{ - key: "onEntityCreated", - value: function onEntityCreated() { - var _this$config = this.config, _this$config$widthSeg = _this$config.widthSegments, widthSegments = _this$config$widthSeg === void 0 ? 1 : _this$config$widthSeg, _this$config$heightSe = _this$config.heightSegments, heightSegments = _this$config$heightSe === void 0 ? 1 : _this$config$heightSe, _this$config$depthSeg = _this$config.depthSegments, depthSegments = _this$config$depthSeg === void 0 ? 1 : _this$config$depthSeg, _this$config$halfExte = _this$config.halfExtents, halfExtents = _this$config$halfExte === void 0 ? vec3_exports.fromValues(0.5, 0.5, 0.5) : _this$config$halfExte; - var ws = widthSegments; - var hs = heightSegments; - var ds = depthSegments; - var _halfExtents = _slicedToArray(halfExtents, 3), hex2 = _halfExtents[0], hey = _halfExtents[1], hez = _halfExtents[2]; - var corners = [vec3_exports.fromValues(-hex2, -hey, hez), vec3_exports.fromValues(hex2, -hey, hez), vec3_exports.fromValues(hex2, hey, hez), vec3_exports.fromValues(-hex2, hey, hez), vec3_exports.fromValues(hex2, -hey, -hez), vec3_exports.fromValues(-hex2, -hey, -hez), vec3_exports.fromValues(-hex2, hey, -hez), vec3_exports.fromValues(hex2, hey, -hez)]; - var faceAxes = [ - [0, 1, 3], - [4, 5, 7], - [3, 2, 6], - [1, 0, 4], - [1, 4, 2], - [5, 0, 6] - ]; - var faceNormals = [ - [0, 0, 1], - [0, 0, -1], - [0, 1, 0], - [0, -1, 0], - [1, 0, 0], - [-1, 0, 0] - ]; - var sides = { - FRONT: 0, - BACK: 1, - TOP: 2, - BOTTOM: 3, - RIGHT: 4, - LEFT: 5 - }; - var positions = []; - var normals = []; - var uvs = []; - var uvs1 = []; - var indices = []; - var vcounter = 0; - var generateFace = function generateFace2(side, uSegments, vSegments) { - var u3; - var v3; - var i4; - var j4; - for (i4 = 0; i4 <= uSegments; i4++) { - for (j4 = 0; j4 <= vSegments; j4++) { - var temp1 = vec3_exports.create(); - var temp2 = vec3_exports.create(); - var temp3 = vec3_exports.create(); - var r4 = vec3_exports.create(); - vec3_exports.lerp(temp1, corners[faceAxes[side][0]], corners[faceAxes[side][1]], i4 / uSegments); - vec3_exports.lerp(temp2, corners[faceAxes[side][0]], corners[faceAxes[side][2]], j4 / vSegments); - vec3_exports.sub(temp3, temp2, corners[faceAxes[side][0]]); - vec3_exports.add(r4, temp1, temp3); - u3 = i4 / uSegments; - v3 = j4 / vSegments; - positions.push(r4[0], r4[1], r4[2]); - normals.push(faceNormals[side][0], faceNormals[side][1], faceNormals[side][2]); - uvs.push(u3, v3); - u3 /= 3; - v3 /= 3; - u3 = u3 * primitiveUv1PaddingScale + primitiveUv1Padding; - v3 = v3 * primitiveUv1PaddingScale + primitiveUv1Padding; - u3 += side % 3 / 3; - v3 += Math.floor(side / 3) / 3; - uvs1.push(u3, v3); - if (i4 < uSegments && j4 < vSegments) { - indices.push(vcounter + vSegments + 1, vcounter + 1, vcounter); - indices.push(vcounter + vSegments + 1, vcounter + vSegments + 2, vcounter + 1); - } - vcounter++; - } - } - }; - generateFace(sides.FRONT, ws, hs); - generateFace(sides.BACK, ws, hs); - generateFace(sides.TOP, ws, ds); - generateFace(sides.BOTTOM, ws, ds); - generateFace(sides.RIGHT, ds, hs); - generateFace(sides.LEFT, ds, hs); - var aabb = generateAABBFromVertices(positions); - var component2 = this.getComponent(); - component2.indices = Uint32Array.from(indices); - component2.aabb = aabb; - component2.vertexCount = vcounter; - component2.attributes = [{ - dirty: true, - name: "position", - data: Float32Array.from(positions), - arrayStride: 4 * 3, - stepMode: "vertex", - attributes: [{ - shaderLocation: 0, - offset: 0, - format: "float3" - }] - }, { - dirty: true, - name: "normal", - data: Float32Array.from(normals), - arrayStride: 4 * 3, - stepMode: "vertex", - attributes: [{ - shaderLocation: 1, - offset: 0, - format: "float3" - }] - }, { - dirty: true, - name: "uv", - data: Float32Array.from(uvs), - arrayStride: 4 * 2, - stepMode: "vertex", - attributes: [{ - shaderLocation: 2, - offset: 0, - format: "float2" - }] - }]; - } - }]); - return Box3; -}(Geometry2)) || _class30); - -// node_modules/@antv/g-webgpu/es/geometry/Merged.js -var import_inversify24 = __toModule(require_inversify()); +float sdOctogon(vec2 p, float r) { + vec3 k = vec3(-0.9238795325, 0.3826834323, 0.4142135623 ); + p = abs(p); + p -= 2.0*min(dot(vec2( k.x,k.y),p),0.0)*vec2( k.x,k.y); + p -= 2.0*min(dot(vec2(-k.x,k.y),p),0.0)*vec2(-k.x,k.y); + p -= vec2(clamp(p.x, -k.z*r, k.z*r), r); + return length(p)*sign(p.y); +} + +float sdHexagram(vec2 p, float r) { + vec4 k=vec4(-0.5,0.8660254038,0.5773502692,1.7320508076); + p = abs(p); + p -= 2.0*min(dot(k.xy,p),0.0)*k.xy; + p -= 2.0*min(dot(k.yx,p),0.0)*k.yx; + p -= vec2(clamp(p.x,r*k.z,r*k.w),r); + return length(p)*sign(p.y); +} + +float sdRhombus(vec2 p, vec2 b) { + vec2 q = abs(p); + float h = clamp((-2.0*ndot(q,b)+ndot(b,b))/dot(b,b),-1.0,1.0); + float d = length( q - 0.5*b*vec2(1.0-h,1.0+h) ); + return d * sign( q.x*b.y + q.y*b.x - b.x*b.y ); +} + +float sdVesica(vec2 p, float r, float d) { + p = abs(p); + float b = sqrt(r*r-d*d); // can delay this sqrt + return ((p.y-b)*d>p.x*b) + ? length(p-vec2(0.0,b)) + : length(p-vec2(-d,0.0))-r; +}`,rue=/precision\s+(high|low|medium)p\s+float/,nue=`#ifdef GL_FRAGMENT_PRECISION_HIGH + precision highp float; + #else + precision mediump float; +#endif +`,iue=/#pragma include (["^+"]?["\ "[a-zA-Z_0-9](.*)"]*?)/g,Bxt=(Pxt=(0,Fxt.injectable)(),Pxt(kxt=(Rxt=function(){function r(){se(this,r),this.moduleCache={},this.rawContentCache={}}return be(r,[{key:"registerBuiltinModules",value:function(){this.destroy(),this.registerModule("picking",{vs:tue,fs:Jle}),this.registerModule("sdf2d",{vs:"",fs:eue})}},{key:"registerModule",value:function(t,n){if(!this.rawContentCache[t]){var i=n.vs,a=i===void 0?"":i,o=n.fs,s=o===void 0?"":o,l=n.uniforms,u=eY(a),f=u.content,c=u.uniforms,h=eY(s),d=h.content,p=h.uniforms;this.rawContentCache[t]={fs:d,uniforms:OM(OM(OM({},c),p),l),vs:f}}}},{key:"destroy",value:function(){this.moduleCache={},this.rawContentCache={}}},{key:"getModule",value:function(t){var n=this;if(this.moduleCache[t])return this.moduleCache[t];var i=this.rawContentCache[t].vs||"",a=this.rawContentCache[t].fs||"",o=this.processModule(i,[],"vs"),s=o.content,l=o.includeList,u=this.processModule(a,[],"fs"),f=u.content,c=u.includeList,h=f,d=Dxt(l.concat(c).concat(t)).reduce(function(p,v){return OM(OM({},p),n.rawContentCache[v].uniforms)},{});return rue.test(f)||(h=nue+f),this.moduleCache[t]={fs:h.trim(),uniforms:d,vs:s.trim()},this.moduleCache[t]}},{key:"processModule",value:function(t,n,i){var a=this,o=t.replace(iue,function(s,l){var u=l.split(" "),f=u[0].replace(/"/g,"");if(n.indexOf(f)>-1)return"";var c=a.rawContentCache[f][i];n.push(f);var h=a.processModule(c||"",n,i),d=h.content;return d});return{content:o,includeList:n}}}]),r}(),Rxt))||kxt);var Cc=new rY.Container,bDr=(0,Gxt.default)(Cc,!1);Cc.bind(Qt.ShaderModuleService).to(Bxt).inSingletonScope();Cc.bind(Qt.NameComponentManager).toConstantValue(new Gp(_xt));Cc.bind(Qt.HierarchyComponentManager).toConstantValue(new Gp(ZH));Cc.bind(Qt.TransformComponentManager).toConstantValue(new Gp(lN));Cc.bind(Qt.MeshComponentManager).toConstantValue(new Gp(UH));Cc.bind(Qt.CullableComponentManager).toConstantValue(new Gp(zH));Cc.bind(Qt.GeometryComponentManager).toConstantValue(new Gp(PH));Cc.bind(Qt.MaterialComponentManager).toConstantValue(new Gp(NH));function nY(){var r=new rY.Container;return r.parent=Cc,r.bind(Qt.Systems).to(QH).inSingletonScope().whenTargetNamed(Qt.SceneGraphSystem),r.bind(Qt.Systems).to(OH).inSingletonScope().whenTargetNamed(Qt.FrameGraphSystem),r.bind(Qt.Systems).to(WH).inSingletonScope().whenTargetNamed(Qt.MeshSystem),r.bind(Qt.Systems).to(RH).inSingletonScope().whenTargetNamed(Qt.GeometrySystem),r.bind(Qt.Systems).to(BH).inSingletonScope().whenTargetNamed(Qt.MaterialSystem),r.bind(Qt.Systems).to(KH).inSingletonScope().whenTargetNamed(Qt.RendererSystem),r.bind(Qt.ResourcePool).to(bxt).inSingletonScope(),r.bind(Qt.ConfigService).to(Axt).inSingletonScope(),r.bind(Qt.InteractorService).to(Oxt).inSingletonScope(),r.bind(Qt.RenderPass).to(id).inSingletonScope().whenTargetNamed(id.IDENTIFIER),r.bind(Qt.RenderPass).to(aS).inSingletonScope().whenTargetNamed(aS.IDENTIFIER),r.bind(Qt.RenderPass).to(iS).inSingletonScope().whenTargetNamed(iS.IDENTIFIER),r.bind(Qt.RenderPassFactory).toFactory(function(e){return function(t){return e.container.getNamed(Qt.RenderPass,t)}}),r}function Q0(r){for(var e=new rS,t=Ft.fromValues(r[0],r[1],r[2]),n=Ft.fromValues(r[0],r[1],r[2]),i=3;in[0]&&(n[0]=a),o>n[1]&&(n[1]=o),s>n[2]&&(n[2]=s)}return e.setMinMax(t,n),e}var Lo=typeof navigator!="undefined"&&/Version\/[\d\.]+.*Safari/.test(navigator.userAgent);var GDr=Ft.create();var VDr=Ft.create(),HDr=Ft.create(),YDr=Ft.create(),XDr=Ft.create(),qDr=Ft.create();var zxt;(function(r){r.Normal="normal",r.PostProcessing="post-processing"})(zxt||(zxt={}));var ad;(function(r){r.Void="Void",r.Boolean="Boolean",r.Float="Float",r.Uint32="Uint32",r.Int32="Int32",r.Vector="Vector",r.Vector2Float="vec2",r.Vector3Float="vec3",r.Vector4Float="vec4",r.Vector2Boolean="vec2",r.Vector3Boolean="vec3",r.Vector4Boolean="vec4",r.Vector2Uint="vec2",r.Vector3Uint="vec3",r.Vector4Uint="vec4",r.Vector2Int="vec2",r.Vector3Int="vec3",r.Vector4Int="vec4",r.Matrix="Matrix",r.Matrix3x3Float="mat3x3",r.Matrix4x4Float="mat4x4",r.Struct="Struct",r.FloatArray="Float[]",r.Vector4FloatArray="vec4[]"})(ad||(ad={}));var Uxt;(function(r){r.Program="Program",r.Identifier="Identifier",r.VariableDeclaration="VariableDeclaration",r.BlockStatement="BlockStatement",r.ReturnStatement="ReturnStatement",r.FunctionDeclaration="FunctionDeclaration",r.VariableDeclarator="VariableDeclarator",r.AssignmentExpression="AssignmentExpression",r.LogicalExpression="LogicalExpression",r.BinaryExpression="BinaryExpression",r.ArrayExpression="ArrayExpression",r.UnaryExpression="UnaryExpression",r.UpdateExpression="UpdateExpression",r.FunctionExpression="FunctionExpression",r.MemberExpression="MemberExpression",r.ConditionalExpression="ConditionalExpression",r.ExpressionStatement="ExpressionStatement",r.CallExpression="CallExpression",r.NumThreadStatement="NumThreadStatement",r.StorageStatement="StorageStatement",r.DoWhileStatement="DoWhileStatement",r.WhileStatement="WhileStatement",r.ForStatement="ForStatement",r.BreakStatement="BreakStatement",r.ContinueStatement="ContinueStatement",r.IfStatement="IfStatement",r.ImportedFunctionStatement="ImportedFunctionStatement"})(Uxt||(Uxt={}));var wc;(function(r){r.Input="Input",r.Output="Output",r.Uniform="Uniform",r.Workgroup="Workgroup",r.UniformConstant="UniformConstant",r.Image="Image",r.StorageBuffer="StorageBuffer",r.Private="Private",r.Function="Function"})(wc||(wc={}));var uS;(function(r){r.GLSL100="GLSL100",r.GLSL450="GLSL450",r.WGSL="WGSL"})(uS||(uS={}));var jxt="__DefineValuePlaceholder__";var hN=U(Zn());function fS(r){return typeof r=="number"}function od(r){return r===void 0?0:r>360||r<-360?r%360:r}function Ag(r,e,t){return fS(r)?Ft.fromValues(r,e,t):r.length===3?Ft.clone(r):Ft.fromValues(r[0],r[1],r[2])}var iY=function(){function r(e,t){se(this,r),this.name=void 0,this.matrix=void 0,this.right=void 0,this.up=void 0,this.forward=void 0,this.position=void 0,this.focalPoint=void 0,this.distanceVector=void 0,this.distance=void 0,this.dollyingStep=void 0,this.azimuth=0,this.elevation=0,this.roll=0,this.relAzimuth=0,this.relElevation=0,this.relRoll=0,this.name=e,this.matrix=_r.clone(t.matrix),this.right=Ft.clone(t.right),this.up=Ft.clone(t.up),this.forward=Ft.clone(t.forward),this.position=Ft.clone(t.position),this.focalPoint=Ft.clone(t.focalPoint),this.distanceVector=Ft.clone(t.distanceVector),this.azimuth=t.azimuth,this.elevation=t.elevation,this.roll=t.roll,this.relAzimuth=t.relAzimuth,this.relElevation=t.relElevation,this.relRoll=t.relRoll,this.dollyingStep=t.dollyingStep,this.distance=t.distance}return be(r,[{key:"getPosition",value:function(){return this.position}},{key:"getFocalPoint",value:function(){return this.focalPoint}},{key:"getRoll",value:function(){return this.roll}},{key:"retrieve",value:function(t){t.matrix=_r.copy(t.matrix,this.matrix),t.right=Ft.copy(t.right,this.right),t.up=Ft.copy(t.up,this.up),t.forward=Ft.copy(t.forward,this.forward),t.position=Ft.copy(t.position,this.position),t.focalPoint=Ft.copy(t.focalPoint,this.focalPoint),t.distanceVector=Ft.copy(t.distanceVector,this.distanceVector),t.azimuth=this.azimuth,t.elevation=this.elevation,t.roll=this.roll,t.relAzimuth=this.relAzimuth,t.relElevation=this.relElevation,t.relRoll=this.relRoll,t.dollyingStep=this.dollyingStep,t.distance=this.distance}}]),r}();var Wxt,Vxt,Hxt,aY,Yxt,Xxt,qxt,Ti;(function(r){r.ORBITING="ORBITING",r.EXPLORING="EXPLORING",r.TRACKING="TRACKING"})(Ti||(Ti={}));var dN;(function(r){r.DEFAULT="DEFAULT",r.ROTATIONAL="ROTATIONAL",r.TRANSLATIONAL="TRANSLATIONAL",r.CINEMATIC="CINEMATIC"})(dN||(dN={}));var J0;(function(r){r.ORTHOGRAPHIC="ORTHOGRAPHIC",r.PERSPECTIVE="PERSPECTIVE"})(J0||(J0={}));var Xp=Math.PI/180,Mg=180/Math.PI,pN=(Wxt=(0,hN.injectable)(),Vxt=(0,hN.inject)(Qt.InteractorService),Wxt(Hxt=(aY=(qxt=Xxt=function(){function r(){se(this,r),this.matrix=_r.create(),this.right=Ft.fromValues(1,0,0),this.up=Ft.fromValues(0,1,0),this.forward=Ft.fromValues(0,0,1),this.position=Ft.fromValues(0,0,1),this.focalPoint=Ft.fromValues(0,0,0),this.distanceVector=Ft.fromValues(0,0,0),this.distance=1,this.azimuth=0,this.elevation=0,this.roll=0,this.relAzimuth=0,this.relElevation=0,this.relRoll=0,this.dollyingStep=0,this.maxDistance=1/0,this.minDistance=-1/0,this.rotateWorld=!1,Ke(this,"interactor",Yxt,this),this.fov=30,this.near=.1,this.far=1e4,this.aspect=1,this.left=void 0,this.rright=void 0,this.top=void 0,this.bottom=void 0,this.zoom=1,this.perspective=_r.create(),this.view=void 0,this.following=void 0,this.type=Ti.EXPLORING,this.trackingMode=dN.DEFAULT,this.projectionMode=J0.PERSPECTIVE,this.frustum=new Fyt,this.landmarks=[],this.landmarkAnimationID=void 0}return be(r,[{key:"clone",value:function(){var t=new r;return t.setType(this.type,void 0),t.interactor=this.interactor,t}},{key:"getProjectionMode",value:function(){return this.projectionMode}},{key:"getPerspective",value:function(){return this.perspective}},{key:"getFrustum",value:function(){return this.frustum}},{key:"getPosition",value:function(){return this.position}},{key:"setType",value:function(t,n){return this.type=t,this.type===Ti.EXPLORING?this.setWorldRotation(!0):this.setWorldRotation(!1),this._getAngles(),this.type===Ti.TRACKING&&n!==void 0&&this.setTrackingMode(n),this}},{key:"setProjectionMode",value:function(t){return this.projectionMode=t,this}},{key:"setTrackingMode",value:function(t){if(this.type!==Ti.TRACKING)throw new Error("Impossible to set a tracking mode if the camera is not of tracking type");return this.trackingMode=t,this}},{key:"setWorldRotation",value:function(t){this.rotateWorld=t,this._getAngles()}},{key:"getViewTransform",value:function(){return _r.invert(_r.create(),this.matrix)}},{key:"getWorldTransform",value:function(){return this.matrix}},{key:"setMatrix",value:function(t){return this.matrix=t,this._update(),this}},{key:"setAspect",value:function(t){return this.setPerspective(this.near,this.far,this.fov,t),this}},{key:"setViewOffset",value:function(t,n,i,a,o,s){return this.aspect=t/n,this.view===void 0&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=n,this.view.offsetX=i,this.view.offsetY=a,this.view.width=o,this.view.height=s,this.projectionMode===J0.PERSPECTIVE?this.setPerspective(this.near,this.far,this.fov,this.aspect):this.setOrthographic(this.left,this.rright,this.top,this.bottom,this.near,this.far),this}},{key:"clearViewOffset",value:function(){return this.view!==void 0&&(this.view.enabled=!1),this.projectionMode===J0.PERSPECTIVE?this.setPerspective(this.near,this.far,this.fov,this.aspect):this.setOrthographic(this.left,this.rright,this.top,this.bottom,this.near,this.far),this}},{key:"setPerspective",value:function(t,n,i,a){return this.projectionMode=J0.PERSPECTIVE,this.fov=i,this.near=t,this.far=n,this.aspect=a,_r.perspective(this.perspective,this.fov*Xp,this.aspect,this.near,this.far),this}},{key:"setOrthographic",value:function(t,n,i,a,o,s){this.projectionMode=J0.ORTHOGRAPHIC,this.rright=n,this.left=t,this.top=i,this.bottom=a,this.near=o,this.far=s;var l=(this.rright-this.left)/(2*this.zoom),u=(this.top-this.bottom)/(2*this.zoom),f=(this.rright+this.left)/2,c=(this.top+this.bottom)/2,h=f-l,d=f+l,p=c+u,v=c-u;if(this.view!==void 0&&this.view.enabled){var m=(this.rright-this.left)/this.view.fullWidth/this.zoom,g=(this.top-this.bottom)/this.view.fullHeight/this.zoom;h+=m*this.view.offsetX,d=h+m*this.view.width,p-=g*this.view.offsetY,v=p-g*this.view.height}return _r.ortho(this.perspective,h,d,p,v,o,s),this}},{key:"setPosition",value:function(t,n,i){return this._setPosition(t,n,i),this.setFocalPoint(this.focalPoint),this}},{key:"setFocalPoint",value:function(t,n,i){var a=Ft.fromValues(0,1,0);if(this.focalPoint=Ag(t,n,i),this.trackingMode===dN.CINEMATIC){var o=Ft.subtract(Ft.create(),this.focalPoint,this.position);t=o[0],n=o[1],i=o[2];var s=Ft.length(o),l=Math.asin(n/s)*Mg,u=90+Math.atan2(i,t)*Mg,f=_r.create();_r.rotateY(f,f,u*Xp),_r.rotateX(f,f,l*Xp),a=Ft.transformMat4(Ft.create(),[0,1,0],f)}return _r.invert(this.matrix,_r.lookAt(_r.create(),this.position,this.focalPoint,a)),this._getAxes(),this._getDistance(),this._getAngles(),this}},{key:"setDistance",value:function(t){if(!(this.distance===t||t<0)){this.distance=t,this.distance<2e-4&&(this.distance=2e-4),this.dollyingStep=this.distance/100;var n=Ft.create();t=this.distance;var i=this.forward,a=this.focalPoint;return n[0]=t*i[0]+a[0],n[1]=t*i[1]+a[1],n[2]=t*i[2]+a[2],this._setPosition(n),this}}},{key:"setMaxDistance",value:function(t){return this.maxDistance=t,this}},{key:"setMinDistance",value:function(t){return this.minDistance=t,this}},{key:"changeAzimuth",value:function(t){return this.setAzimuth(this.azimuth+t),this}},{key:"changeElevation",value:function(t){return this.setElevation(this.elevation+t),this}},{key:"changeRoll",value:function(t){return this.setRoll(this.roll+t),this}},{key:"setAzimuth",value:function(t){return this.azimuth=od(t),this.computeMatrix(),this._getAxes(),this.type===Ti.ORBITING||this.type===Ti.EXPLORING?this._getPosition():this.type===Ti.TRACKING&&this._getFocalPoint(),this}},{key:"getAzimuth",value:function(){return this.azimuth}},{key:"setElevation",value:function(t){return this.elevation=od(t),this.computeMatrix(),this._getAxes(),this.type===Ti.ORBITING||this.type===Ti.EXPLORING?this._getPosition():this.type===Ti.TRACKING&&this._getFocalPoint(),this}},{key:"setRoll",value:function(t){return this.roll=od(t),this.computeMatrix(),this._getAxes(),this.type===Ti.ORBITING||this.type===Ti.EXPLORING?this._getPosition():this.type===Ti.TRACKING&&this._getFocalPoint(),this}},{key:"rotate",value:function(t,n,i){if(this.type===Ti.EXPLORING){t=od(t),n=od(n),i=od(i);var a=Nr.setAxisAngle(Nr.create(),[1,0,0],(this.rotateWorld?1:-1)*n*Xp),o=Nr.setAxisAngle(Nr.create(),[0,1,0],(this.rotateWorld?1:-1)*t*Xp),s=Nr.setAxisAngle(Nr.create(),[0,0,1],i*Xp),l=Nr.multiply(Nr.create(),o,a);l=Nr.multiply(Nr.create(),l,s);var u=_r.fromQuat(_r.create(),l);_r.translate(this.matrix,this.matrix,[0,0,-this.distance]),_r.multiply(this.matrix,this.matrix,u),_r.translate(this.matrix,this.matrix,[0,0,this.distance])}else{if(Math.abs(this.elevation+n)>90)return;this.relElevation=od(n),this.relAzimuth=od(t),this.relRoll=od(i),this.elevation+=this.relElevation,this.azimuth+=this.relAzimuth,this.roll+=this.relRoll,this.computeMatrix()}return this._getAxes(),this.type===Ti.ORBITING||this.type===Ti.EXPLORING?this._getPosition():this.type===Ti.TRACKING&&this._getFocalPoint(),this._update(),this}},{key:"pan",value:function(t,n){var i=Ag(t,n,0),a=Ft.clone(this.position);return Ft.add(a,a,Ft.scale(Ft.create(),this.right,i[0])),Ft.add(a,a,Ft.scale(Ft.create(),this.up,i[1])),this._setPosition(a),this}},{key:"dolly",value:function(t){var n=this.forward,i=Ft.clone(this.position),a=t*this.dollyingStep,o=this.distance+t*this.dollyingStep;return a=Math.max(Math.min(o,this.maxDistance),this.minDistance)-this.distance,i[0]+=a*n[0],i[1]+=a*n[1],i[2]+=a*n[2],this._setPosition(i),this.type===Ti.ORBITING||this.type===Ti.EXPLORING?this._getDistance():this.type===Ti.TRACKING&&Ft.add(this.focalPoint,i,this.distanceVector),this}},{key:"createLandmark",value:function(t,n){var i=this.clone();i.setPosition(n.position),i.setFocalPoint(n.focalPoint),n.roll!==void 0&&i.setRoll(n.roll);var a=new iY(t,i);return this.landmarks.push(a),a}},{key:"setLandmark",value:function(t){var n=new iY(t,this);return this.landmarks.push(n),this}},{key:"gotoLandmark",value:function(t){var n=this,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1e3,a=this.landmarks.find(function(c){return c.name===t});if(a){if(i===0){a.retrieve(this);return}this.landmarkAnimationID!==void 0&&window.cancelAnimationFrame(this.landmarkAnimationID),this.interactor.disconnect();var o=a.getPosition(),s=a.getFocalPoint(),l=a.getRoll(),u,f=function c(h){u===void 0&&(u=h);var d=h-u,p=(1-Math.cos(d/i*Math.PI))/2,v=Ft.create(),m=Ft.create(),g=0;Ft.lerp(v,n.focalPoint,s,p),Ft.lerp(m,n.position,o,p),g=n.roll*(1-p)+l*p,n.setFocalPoint(v),n.setPosition(m),n.setRoll(g),n.computeMatrix();var x=Ft.dist(v,s)+Ft.dist(m,o);if(!(x>.01)){n.setFocalPoint(v),n.setPosition(m),n.setRoll(g),n.computeMatrix(),n.interactor.connect();return}d-1&&r%1==0&&r<=Rue}function ffe(r){return!!r&&hs(r)==="object"}var gN=lfe;var rbt,nbt,ibt,abt,yN,obt,sbt,lbt;function ubt(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(r,i).enumerable})),t.push.apply(t,n)}return t}function fbt(r){for(var e=1;e0&&s[0]!==void 0?s[0]:1,!this.dirty){u.next=6;break}return this.compiledBundle.context&&(a>1?this.compiledBundle.context.maxIteration=a:this.compiledBundle.context.maxIteration++),u.next=5,this.compile();case 5:this.dirty=!1;case 6:for(this.engine.beginFrame(),this.engine.clear({}),this.compiledBundle.context&&this.compiledBundle.context.uniforms.filter(function(f){var c=f.isReferer;return c}).forEach(function(f){var c=f.data,h=f.name;i.model.confirmInput(c.model,h)}),o=0;o-1&&r%1==0&&r<=cfe}function zfe(r){return!!r&&hs(r)==="object"}var GM=Bfe;function zbt(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(r,i).enumerable})),t.push.apply(t,n)}return t}function Ubt(r){for(var e=1;e16)throw new Error("invalid data type ".concat(c));i[f]=function(){return u.data}}});var a=this.getOuputDataTexture(),o=a.textureWidth,s=a.texelCount;i.u_OutputTextureSize=[o,o],i.u_OutputTexelCount=s,this.context.output.textureSize=[o,o];var l={attributes:{a_Position:[[-1,1,0],[-1,-1,0],[1,1,0],[1,-1,0]],a_TexCoord:[[0,1],[0,0],[1,1],[1,0]]},frag:`#ifdef GL_FRAGMENT_PRECISION_HIGH + precision highp float; +#else + precision mediump float; +#endif +`.concat(this.context.shader),uniforms:i,vert:Ufe,primitive:"triangle strip",count:4};this.computeCommand=this.reGl(l)}return be(r,[{key:"run",value:function(){var t=this;this.context.maxIteration>1&&this.context.needPingpong&&(this.compiledPingpong=!0),(this.compiledPingpong||this.dynamicPingpong)&&this.swap(),this.texFBO=this.reGl.framebuffer({color:this.getOuputDataTexture().texture}),this.texFBO.use(function(){t.computeCommand()}),EN&&console.log("[".concat(this.entity,"]: output ").concat(this.getOuputDataTexture().id))}},{key:"readData",value:function(){var e=Fr(mY.default.mark(function n(){var i=this,a,o,s,l,u,f,c,h;return mY.default.wrap(function(p){for(;;)switch(p.prev=p.next){case 0:if(this.reGl({framebuffer:this.texFBO})(function(){a=i.reGl.read()}),!a){p.next=6;break}if(o=this.getOuputDataTexture(),s=o.originalDataLength,l=o.elementsPerTexel,u=o.typedArrayConstructor,f=u===void 0?Float32Array:u,c=[],l!==4)for(h=0;h2&&arguments[2]!==void 0?arguments[2]:0,a=this.context.uniforms.find(function(u){var f=u.name;return f===t});if(a){var o=this.calcDataTexture(t,a.type,n),s=o.texture,l=o.data;this.textureCache[t].data=l,this.textureCache[t].texture=s}}},{key:"destroy",value:function(){}},{key:"swap",value:function(){if(this.swapOutputTextureName||this.createSwapOutputDataTexture(),this.compiledPingpong){var t=this.context.output.name;this.textureCache[t].id=this.getOuputDataTexture().id,this.textureCache[t].texture=this.getOuputDataTexture().texture}var n=this.outputTextureName;this.outputTextureName=this.swapOutputTextureName,this.swapOutputTextureName=n,EN&&console.log("[".concat(this.entity,"]: after swap, output ").concat(this.getOuputDataTexture().id))}},{key:"getOuputDataTexture",value:function(){return this.textureCache[this.outputTextureName]}},{key:"createSwapOutputDataTexture",value:function(){var t=this.cloneDataTexture(this.getOuputDataTexture());this.swapOutputTextureName="".concat(this.entity,"-swap"),this.textureCache[this.swapOutputTextureName]=t}},{key:"cloneDataTexture",value:function(t){var n=t.data,i=t.textureWidth;return Ubt(Ubt({},t),{},{id:jbt++,texture:this.reGl.texture({width:i,height:i,data:n,type:"float"})})}},{key:"calcDataTexture",value:function(t,n,i){var a=1;n===ad.Vector4FloatArray&&(a=4);for(var o=[],s=0;s0){var x=4-g;if(m>1&&m<=x)m===2&&(x===3&&(f+=4,c.push(0)),c.push.apply(c,Ui(p.data)),i.uniformGPUBufferLayout.push({name:p.name,offset:f}));else{for(var b=0;b2&&arguments[2]!==void 0?arguments[2]:0,a=this.vertexBuffers[t];a&&a.subData({data:n,offset:i})}},{key:"updateUniform",value:function(t,n){var i=this.uniformGPUBufferLayout.find(function(a){return a.name===t});i&&this.uniformBuffer.subData({data:Number.isFinite(n)?new Float32Array([n]):new Float32Array(n),offset:i.offset})}},{key:"confirmInput",value:function(t,n){var i=this.vertexBuffers[n],a=t.outputBuffer;if(i&&a&&i!==a){var o=this.engine.device.createCommandEncoder(),s=t.context.output,l=s.length,u=s.typedArrayConstructor,f=l*u.BYTES_PER_ELEMENT;o.copyBufferToBuffer(a.get(),0,i.get(),0,f);var c=Lo?this.engine.device.getQueue():this.engine.device.defaultQueue;c.submit([o.finish()])}}},{key:"compileShaderToSpirV",value:function(t,n,i){return this.compileRawShaderToSpirV(i+t,n)}},{key:"compileRawShaderToSpirV",value:function(t,n){return this.engine.glslang.compileGLSL(t,n)}},{key:"compileComputePipelineStageDescriptor",value:function(){var e=Fr(ix.default.mark(function n(i){var a,o;return ix.default.wrap(function(l){for(;;)switch(l.prev=l.next){case 0:if(a=i,o=`#version 450 +`,this.engine.options.useWGSL){l.next=6;break}return l.next=5,this.compileShaderToSpirV(i,"compute",o);case 5:a=l.sent;case 6:return l.abrupt("return",{computeStage:{module:this.engine.device.createShaderModule({code:a,isWHLSL:Lo}),entryPoint:"main"}});case 7:case"end":return l.stop()}},n,this)}));function t(n){return e.apply(this,arguments)}return t}()}]),r}();var SY=U(Ec());var o1t=function(){function r(e,t){se(this,r),this.engine=e,this.options=t,this.indexCount=void 0,this.buffer=void 0;var n=t,i=n.data,a=n.usage,o=n.type,s=n.count;this.indexCount=s||0,this.buffer=new fd(e,{data:i instanceof Array?new Uint16Array(i):i,usage:SY.BufferUsage.Index|SY.BufferUsage.CopyDst})}return be(r,[{key:"get",value:function(){return this.buffer}},{key:"subData",value:function(t){this.buffer.subData(t)}},{key:"destroy",value:function(){this.buffer.destroy()}}]),r}();var s1t=function(){function r(e,t){se(this,r),this.engine=e,this.options=t,this.colorTexture=void 0,this.depthTexture=void 0,this.width=0,this.height=0;var n=t,i=n.width,a=n.height,o=n.color,s=n.colors,l=n.depth,u=n.stencil;o&&(this.colorTexture=o),l&&(this.depthTexture=l)}return be(r,[{key:"get",value:function(){var t,n;return{color:(t=this.colorTexture)===null||t===void 0?void 0:t.get(),depth:(n=this.depthTexture)===null||n===void 0?void 0:n.get()}}},{key:"destroy",value:function(){var t,n;(t=this.colorTexture)===null||t===void 0||t.destroy(),(n=this.depthTexture)===null||n===void 0||n.destroy()}},{key:"resize",value:function(t){var n=t.width,i=t.height;if(n!==this.width||i!==this.height){var a,o;(a=this.colorTexture)===null||a===void 0||a.resize({width:n,height:i}),(o=this.depthTexture)===null||o===void 0||o.resize({width:n,height:i})}this.width=n,this.height=i}}]),r}();var UM=U(Ka());var Zo=U(Ec());var tn=U(Ec()),Qp,cd,ax,il,pS,MN,zM,l1t=(Qp={},qt(Qp,Mt.POINTS,tn.PrimitiveTopology.PointList),qt(Qp,Mt.LINES,tn.PrimitiveTopology.LineList),qt(Qp,Mt.LINE_LOOP,tn.PrimitiveTopology.LineList),qt(Qp,Mt.LINE_STRIP,tn.PrimitiveTopology.LineStrip),qt(Qp,Mt.TRIANGLES,tn.PrimitiveTopology.TriangleList),qt(Qp,Mt.TRIANGLE_FAN,tn.PrimitiveTopology.TriangleList),qt(Qp,Mt.TRIANGLE_STRIP,tn.PrimitiveTopology.TriangleStrip),Qp),Vfe=(cd={},qt(cd,Mt.NEVER,tn.CompareFunction.Never),qt(cd,Mt.ALWAYS,tn.CompareFunction.Always),qt(cd,Mt.LESS,tn.CompareFunction.Less),qt(cd,Mt.LEQUAL,tn.CompareFunction.LessEqual),qt(cd,Mt.GREATER,tn.CompareFunction.Greater),qt(cd,Mt.GEQUAL,tn.CompareFunction.GreaterEqual),qt(cd,Mt.EQUAL,tn.CompareFunction.Equal),qt(cd,Mt.NOTEQUAL,tn.CompareFunction.NotEqual),cd),u1t=(ax={},qt(ax,Mt.FUNC_ADD,tn.BlendOperation.Add),qt(ax,Mt.MIN_EXT,tn.BlendOperation.Min),qt(ax,Mt.MAX_EXT,tn.BlendOperation.Max),qt(ax,Mt.FUNC_SUBTRACT,tn.BlendOperation.Subtract),qt(ax,Mt.FUNC_REVERSE_SUBTRACT,tn.BlendOperation.ReverseSubtract),ax),TN=(il={},qt(il,Mt.ZERO,tn.BlendFactor.Zero),qt(il,Mt.ONE,tn.BlendFactor.One),qt(il,Mt.SRC_COLOR,tn.BlendFactor.SrcColor),qt(il,Mt.ONE_MINUS_SRC_COLOR,tn.BlendFactor.OneMinusSrcColor),qt(il,Mt.SRC_ALPHA,tn.BlendFactor.SrcAlpha),qt(il,Mt.ONE_MINUS_SRC_ALPHA,tn.BlendFactor.OneMinusSrcAlpha),qt(il,Mt.DST_COLOR,tn.BlendFactor.DstColor),qt(il,Mt.ONE_MINUS_DST_COLOR,tn.BlendFactor.OneMinusDstColor),qt(il,Mt.DST_ALPHA,tn.BlendFactor.DstAlpha),qt(il,Mt.ONE_MINUS_DST_ALPHA,tn.BlendFactor.OneMinusDstAlpha),qt(il,Mt.CONSTANT_COLOR,tn.BlendFactor.BlendColor),qt(il,Mt.ONE_MINUS_CONSTANT_COLOR,tn.BlendFactor.OneMinusBlendColor),qt(il,Mt.SRC_ALPHA_SATURATE,tn.BlendFactor.SrcAlphaSaturated),il),f1t=(pS={},qt(pS,Mt.ALPHA,"r8unorm"),qt(pS,Mt.RGBA,"rgba8unorm"),qt(pS,Mt.DEPTH_COMPONENT,"depth32float"),qt(pS,Mt.DEPTH_STENCIL,"depth24plus-stencil8"),pS),CY=(MN={},qt(MN,Mt.NEAREST,"nearest"),qt(MN,Mt.LINEAR,"linear"),MN),IN=(zM={},qt(zM,Mt.REPEAT,"repeat"),qt(zM,Mt.CLAMP_TO_EDGE,"clamp-to-edge"),qt(zM,Mt.MIRRORED_REPEAT,"mirror-repeat"),zM);function c1t(r){var e=r.cull;if(!e||!e.enable)return tn.CullMode.None;if(e.face)return e.face===Mt.FRONT?tn.CullMode.Front:tn.CullMode.Back}function h1t(r){var e=r.depth,t=r.stencil,n={compare:tn.CompareFunction.Always,depthFailOp:tn.StencilOperation.Keep,failOp:tn.StencilOperation.Keep,passOp:tn.StencilOperation.Keep};return{depthWriteEnabled:e&&e.enable,depthCompare:Vfe[(e==null?void 0:e.func)||Mt.ALWAYS],format:tn.TextureFormat.Depth24PlusStencil8,stencilFront:n,stencilBack:n,stencilReadMask:4294967295,stencilWriteMask:4294967295}}function d1t(r,e){var t=r.blend;return[{format:e,alphaBlend:{srcFactor:TN[t&&t.func&&t.func.srcAlpha||Mt.ONE],dstFactor:TN[t&&t.func&&t.func.dstAlpha||Mt.ZERO],operation:u1t[t&&t.equation&&t.equation.alpha||Mt.FUNC_ADD]},colorBlend:{srcFactor:TN[t&&t.func&&t.func.srcRGB||Mt.ONE],dstFactor:TN[t&&t.func&&t.func.dstRGB||Mt.ZERO],operation:u1t[t&&t.equation&&t.equation.rgb||Mt.FUNC_ADD]},writeMask:tn.ColorWrite.All}]}function p1t(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(r,i).enumerable})),t.push.apply(t,n)}return t}function vS(r){for(var e=1;e1?t-1:0),i=1;i3&&arguments[3]!==void 0?arguments[3]:!1,l=(a=t.get().color)===null||a===void 0?void 0:a.texture,u;l&&(u=l.createView(this.currentRenderTargetViewDescriptor));var f=(o=t.get().depth)===null||o===void 0?void 0:o.texture,c;f&&(c=f.createView());var h=this.renderTargetEncoder.beginRenderPass({colorAttachments:[{attachment:u,loadValue:n!==null?n:Ii.LoadOp.Load,storeOp:Ii.StoreOp.Store}],depthStencilAttachment:f&&c?{attachment:c,depthLoadValue:i?this.clearDepthValue:Ii.LoadOp.Load,depthStoreOp:Ii.StoreOp.Store,stencilLoadValue:s?this.clearStencilValue:Ii.LoadOp.Load,stencilStoreOp:Ii.StoreOp.Store}:void 0});this.currentRenderPass=h,this.cachedViewport&&this.viewport(this.cachedViewport)}},{key:"endMainRenderPass",value:function(){this.currentRenderPass===this.mainRenderPass&&this.currentRenderPass!==null&&(this.currentRenderPass.endPass(),this.resetCachedViewport(),this.currentRenderPass=null,this.mainRenderPass=null)}},{key:"endComputePass",value:function(){this.currentComputePass&&(this.currentComputePass.endPass(),this.currentComputePass=null)}},{key:"endRenderTargetRenderPass",value:function(){this.currentRenderPass&&(this.currentRenderPass.endPass(),this.resetCachedViewport())}},{key:"resetCachedViewport",value:function(){this.cachedViewport={x:0,y:0,width:0,height:0}}},{key:"unbindFramebuffer",value:function(t){this.currentRenderPass&&this.currentRenderPass!==this.mainRenderPass&&this.endRenderTargetRenderPass(),this.transientViewport.x=1/0,this.currentRenderTarget=null,this.currentRenderPass=this.mainRenderPass}}]),r}(),x1t))||y1t);var YCt=U(Ec()),NN=U(Zn());var C1t=U(Zn());var _1t,S1t;function Yfe(r){var e=Xfe();return function(){var n=Zr(r),i;if(e){var a=Zr(this).constructor;i=Reflect.construct(n,arguments,a)}else i=n.apply(this,arguments);return fi(this,i)}}function Xfe(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(r){return!1}}var EY=4/64,w1t=1-EY*2,E1t=(_1t=(0,C1t.injectable)(),_1t(S1t=function(r){ui(t,r);var e=Yfe(t);function t(){return se(this,t),e.apply(this,arguments)}return be(t,[{key:"onEntityCreated",value:function(){var i=this.config,a=i.widthSegments,o=a===void 0?1:a,s=i.heightSegments,l=s===void 0?1:s,u=i.depthSegments,f=u===void 0?1:u,c=i.halfExtents,h=c===void 0?Ft.fromValues(.5,.5,.5):c,d=o,p=l,v=f,m=zp(h,3),g=m[0],x=m[1],b=m[2],S=[Ft.fromValues(-g,-x,b),Ft.fromValues(g,-x,b),Ft.fromValues(g,x,b),Ft.fromValues(-g,x,b),Ft.fromValues(g,-x,-b),Ft.fromValues(-g,-x,-b),Ft.fromValues(-g,x,-b),Ft.fromValues(g,x,-b)],C=[[0,1,3],[4,5,7],[3,2,6],[1,0,4],[1,4,2],[5,0,6]],w=[[0,0,1],[0,0,-1],[0,1,0],[0,-1,0],[1,0,0],[-1,0,0]],A={FRONT:0,BACK:1,TOP:2,BOTTOM:3,RIGHT:4,LEFT:5},I=[],P=[],L=[],M=[],O=[],F=0,k=function(z,j,W){var J,et,lt,$;for(lt=0;lt<=j;lt++)for($=0;$<=W;$++){var st=Ft.create(),_t=Ft.create(),dt=Ft.create(),vt=Ft.create();Ft.lerp(st,S[C[z][0]],S[C[z][1]],lt/j),Ft.lerp(_t,S[C[z][0]],S[C[z][2]],$/W),Ft.sub(dt,_t,S[C[z][0]]),Ft.add(vt,st,dt),J=lt/j,et=$/W,I.push(vt[0],vt[1],vt[2]),P.push(w[z][0],w[z][1],w[z][2]),L.push(J,et),J/=3,et/=3,J=J*w1t+EY,et=et*w1t+EY,J+=z%3/3,et+=Math.floor(z/3)/3,M.push(J,et),lt 0.1) { + // gl_FragColor = mix(gl_FragColor, u_GridColor, v0); + // } + // else { + gl_FragColor = mix(gl_FragColor, u_GridColor2, v1); + // } } - if (!b10 || b10.length === 0) { - return a4; - } - if (!a4 || a4.length === 0) { - return b10; - } - if (Object.prototype.toString.call(a4) !== Object.prototype.toString.call(b10)) { - throw new Error("The types of the two arguments passed for parameters a and b do not match."); - } - var c5 = new a4.constructor(a4.length + b10.length); - c5.set(a4); - c5.set(b10, a4.length); - return c5; -} -// node_modules/@antv/g-webgpu/es/geometry/Merged.js -var _dec51; -var _class31; -function _createSuper10(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct10(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct10() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var Merged = (_dec51 = (0, import_inversify24.injectable)(), _dec51(_class31 = /* @__PURE__ */ function(_Geometry) { - _inherits(Merged2, _Geometry); - var _super = _createSuper10(Merged2); - function Merged2() { - _classCallCheck(this, Merged2); - return _super.apply(this, arguments); - } - _createClass(Merged2, [{ - key: "onEntityCreated", - value: function onEntityCreated() { - var _this$config$geometri = this.config.geometries, geometries = _this$config$geometri === void 0 ? [] : _this$config$geometri; - var mergedComponent = this.getComponent(); - mergedComponent.aabb = new AABB(); - var mergedAttributes = []; - var mergedIndices = []; - var indexOffset = 0; - geometries.forEach(function(geometry35) { - var aabb = geometry35.aabb, indices = geometry35.indices, vertexCount = geometry35.vertexCount, attributes = geometry35.attributes; - mergedComponent.aabb.add(aabb); - mergedComponent.vertexCount += vertexCount; - if (indices) { - mergedIndices.push.apply(mergedIndices, _toConsumableArray(indices.map(function(index2) { - return index2 + indexOffset; - }))); - } - indexOffset += vertexCount; - attributes.forEach(function(attribute, i4) { - if (!mergedAttributes[i4]) { - mergedAttributes[i4] = attribute; - mergedAttributes[i4].dirty = true; - } else { - if (attribute.data) { - if (isNumber47(attribute.data)) { - mergedAttributes[i4].push(attribute.data); - } else if (isTypedArray2(attribute.data)) { - mergedAttributes[i4].data = merge2(mergedAttributes[i4].data, attribute.data); - } else { - mergedAttributes[i4].data = mergedAttributes[i4].data.concat(attribute.data); - } - } - } - }); - }); - mergedComponent.attributes = mergedAttributes; - mergedComponent.indices = Uint32Array.from(mergedIndices); - mergedComponent.dirty = true; - } - }]); - return Merged2; -}(Geometry2)) || _class31); + // float shadowFactor = calcShadow(u_ShadowMap, v_PositionFromLight, l, n); + // vec3 diffuseColor = u_LightColor * NdotL * shadowFactor; -// node_modules/@antv/g-webgpu/es/geometry/Plane.js -var import_inversify25 = __toModule(require_inversify()); -var _dec57; -var _class39; -function _createSuper11(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct11(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct11() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var Plane2 = (_dec57 = (0, import_inversify25.injectable)(), _dec57(_class39 = /* @__PURE__ */ function(_Geometry) { - _inherits(Plane3, _Geometry); - var _super = _createSuper11(Plane3); - function Plane3() { - _classCallCheck(this, Plane3); - return _super.apply(this, arguments); - } - _createClass(Plane3, [{ - key: "onEntityCreated", - value: function onEntityCreated() { - var _this$config = this.config, _this$config$halfExte = _this$config.halfExtents, halfExtents = _this$config$halfExte === void 0 ? [0.5, 0.5] : _this$config$halfExte, _this$config$widthSeg = _this$config.widthSegments, widthSegments = _this$config$widthSeg === void 0 ? 5 : _this$config$widthSeg, _this$config$lengthSe = _this$config.lengthSegments, lengthSegments = _this$config$lengthSe === void 0 ? 5 : _this$config$lengthSe; - var positions = []; - var normals = []; - var uvs = []; - var indices = []; - var vcounter = 0; - for (var i4 = 0; i4 <= widthSegments; i4++) { - for (var j4 = 0; j4 <= lengthSegments; j4++) { - var x6 = -halfExtents[0] + 2 * halfExtents[0] * i4 / widthSegments; - var y5 = 0; - var z3 = -(-halfExtents[1] + 2 * halfExtents[1] * j4 / lengthSegments); - var u3 = i4 / widthSegments; - var v3 = j4 / lengthSegments; - positions.push(x6, y5, z3); - normals.push(0, 1, 0); - uvs.push(u3, v3); - if (i4 < widthSegments && j4 < lengthSegments) { - indices.push(vcounter + lengthSegments + 1, vcounter + 1, vcounter); - indices.push(vcounter + lengthSegments + 1, vcounter + lengthSegments + 2, vcounter + 1); - } - vcounter++; - } - } - var aabb = generateAABBFromVertices(positions); - var component2 = this.getComponent(); - component2.indices = Uint32Array.from(indices); - component2.aabb = aabb; - component2.vertexCount = vcounter; - component2.attributes = [{ - dirty: true, - name: "position", - data: Float32Array.from(positions), - arrayStride: 4 * 3, - stepMode: "vertex", - attributes: [{ - shaderLocation: 0, - offset: 0, - format: "float3" - }] - }, { - dirty: true, - name: "normal", - data: Float32Array.from(normals), - arrayStride: 4 * 3, - stepMode: "vertex", - attributes: [{ - shaderLocation: 1, - offset: 0, - format: "float3" - }] - }, { - dirty: true, - name: "uv", - data: Float32Array.from(uvs), - arrayStride: 4 * 2, - stepMode: "vertex", - attributes: [{ - shaderLocation: 2, - offset: 0, - format: "float2" - }] - }]; - } - }]); - return Plane3; -}(Geometry2)) || _class39); + // gl_FragColor.rgb *= diffuseColor; +}`,uce=`attribute vec3 a_Position; -// node_modules/@antv/g-webgpu/es/geometry/Sphere.js -var import_inversify26 = __toModule(require_inversify()); -var _dec58; -var _class40; -function _createSuper12(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct12(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct12() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var Sphere = (_dec58 = (0, import_inversify26.injectable)(), _dec58(_class40 = /* @__PURE__ */ function(_Geometry) { - _inherits(Sphere2, _Geometry); - var _super = _createSuper12(Sphere2); - function Sphere2() { - _classCallCheck(this, Sphere2); - return _super.apply(this, arguments); - } - _createClass(Sphere2, [{ - key: "onEntityCreated", - value: function onEntityCreated() { - var _this$config = this.config, _this$config$radius = _this$config.radius, radius = _this$config$radius === void 0 ? 0.5 : _this$config$radius, _this$config$latitude = _this$config.latitudeBands, latitudeBands = _this$config$latitude === void 0 ? 16 : _this$config$latitude, _this$config$longitud = _this$config.longitudeBands, longitudeBands = _this$config$longitud === void 0 ? 16 : _this$config$longitud; - var positions = []; - var normals = []; - var uvs = []; - var indices = []; - for (var lat = 0; lat <= latitudeBands; lat++) { - var theta = lat * Math.PI / latitudeBands; - var sinTheta = Math.sin(theta); - var cosTheta = Math.cos(theta); - for (var lon = 0; lon <= longitudeBands; lon++) { - var phi2 = lon * 2 * Math.PI / longitudeBands - Math.PI / 2; - var sinPhi = Math.sin(phi2); - var cosPhi = Math.cos(phi2); - var x6 = cosPhi * sinTheta; - var y5 = cosTheta; - var z3 = sinPhi * sinTheta; - var u3 = 1 - lon / longitudeBands; - var v3 = 1 - lat / latitudeBands; - positions.push(x6 * radius, y5 * radius, z3 * radius); - normals.push(x6, y5, z3); - uvs.push(u3, v3); - } - } - for (var _lat = 0; _lat < latitudeBands; ++_lat) { - for (var _lon = 0; _lon < longitudeBands; ++_lon) { - var first = _lat * (longitudeBands + 1) + _lon; - var second = first + longitudeBands + 1; - indices.push(first + 1, second, first); - indices.push(first + 1, second + 1, second); - } - } - var aabb = generateAABBFromVertices(positions); - var component2 = this.getComponent(); - component2.indices = Uint32Array.from(indices); - component2.aabb = aabb; - component2.vertexCount = positions.length / 3; - component2.attributes = [{ - dirty: true, - name: "position", - data: Float32Array.from(positions), - arrayStride: 4 * 3, - stepMode: "vertex", - attributes: [{ - shaderLocation: 0, - offset: 0, - format: "float3" - }] - }, { - dirty: true, - name: "normal", - data: Float32Array.from(normals), - arrayStride: 4 * 3, - stepMode: "vertex", - attributes: [{ - shaderLocation: 1, - offset: 0, - format: "float3" - }] - }, { - dirty: true, - name: "uv", - data: Float32Array.from(uvs), - arrayStride: 4 * 2, - stepMode: "vertex", - attributes: [{ - shaderLocation: 2, - offset: 0, - format: "float2" - }] - }]; - } - }]); - return Sphere2; -}(Geometry2)) || _class40); +varying vec3 v_Position; -// node_modules/@antv/g-webgpu/es/material/basic/index.js -var import_inversify27 = __toModule(require_inversify()); -var _dec59; -var _dec216; -var _dec312; -var _class41; -var _class217; -var _descriptor20; -var _descriptor212; -var _temp20; -function _createSuper13(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct13(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct13() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var webglFragmentShaderGLSL = 'varying vec4 fragColor;\n\n#pragma include "uv.frag.declaration"\n#pragma include "map.frag.declaration"\n\nvoid main() {\n vec4 diffuseColor = fragColor;\n\n #pragma include "map.frag.main"\n\n gl_FragColor = diffuseColor;\n}'; -var webglVertexShaderGLSL = 'attribute vec3 position;\nattribute vec3 normal;\n\nuniform mat4 projectionMatrix;\nuniform mat4 modelViewMatrix;\nuniform vec4 color;\n\nvarying vec4 fragColor;\n\n#pragma include "uv.vert.declaration"\n\nvoid main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n fragColor = color;\n\n #pragma include "uv.vert.main"\n}'; -var webgpuFragmentShaderGLSL = "// layout(set = 0, binding = 1) uniform WireframeUniforms {\n// float lineWidth;\n// vec4 lineColor;\n// } wireframe;\n\nlayout(location = 0) in vec4 fragColor;\n// layout(location = 1) in vec3 v_Barycentric;\n\nlayout(location = 0) out vec4 outColor;\n\n// wireframe\n// float edgeFactor() {\n// vec3 d = fwidth(v_Barycentric);\n// vec3 a3 = smoothstep(vec3(0.0), d * wireframe.lineWidth, v_Barycentric);\n// return min(min(a3.x, a3.y), a3.z);\n// }\n\nvoid main() {\n // outColor = mix(fragColor, wireframe.lineColor, (1.0 - edgeFactor()));\n outColor = fragColor;\n}"; -var webgpuVertexShaderGLSL = "layout(set = 0, binding = 0) uniform Uniforms {\n vec4 color;\n mat4 projectionMatrix;\n mat4 modelViewMatrix;\n} uniforms;\n\nlayout(location = 0) in vec3 position;\n// layout(location = 1) in vec3 barycentric;\n\nlayout(location = 0) out vec4 fragColor;\n// layout(location = 1) out vec3 v_Barycentric;\n\nvoid main() {\n gl_Position = uniforms.projectionMatrix * uniforms.modelViewMatrix * vec4(position, 1.0);\n fragColor = uniforms.color;\n // v_Barycentric = barycentric;\n}"; -var Basic = (_dec59 = (0, import_inversify27.injectable)(), _dec216 = (0, import_inversify27.inject)(IDENTIFIER.RenderEngine), _dec312 = (0, import_inversify27.inject)(IDENTIFIER.ShaderModuleService), _dec59(_class41 = (_class217 = (_temp20 = /* @__PURE__ */ function(_Material) { - _inherits(Basic2, _Material); - var _super = _createSuper13(Basic2); - function Basic2() { - var _this; - _classCallCheck(this, Basic2); - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - _this = _super.call.apply(_super, [this].concat(args)); - _initializerDefineProperty(_this, "engine", _descriptor20, _assertThisInitialized(_this)); - _initializerDefineProperty(_this, "shaderModuleService", _descriptor212, _assertThisInitialized(_this)); - return _this; - } - _createClass(Basic2, [{ - key: "onEntityCreated", - value: function onEntityCreated() { - var component2 = this.getComponent(); - var vertexShaderGLSL = this.engine.supportWebGPU ? webgpuVertexShaderGLSL : webglVertexShaderGLSL; - var fragmentShaderGLSL = this.engine.supportWebGPU ? webgpuFragmentShaderGLSL : webglFragmentShaderGLSL; - this.shaderModuleService.registerModule("material-basic", { - vs: vertexShaderGLSL, - fs: fragmentShaderGLSL - }); - var _this$shaderModuleSer = this.shaderModuleService.getModule("material-basic"), vs = _this$shaderModuleSer.vs, fs = _this$shaderModuleSer.fs, extractedUniforms = _this$shaderModuleSer.uniforms; - component2.vertexShaderGLSL = vs; - component2.fragmentShaderGLSL = fs; - component2.setUniform(extractedUniforms); - if (this.config.map) { - component2.setDefines({ - USE_UV: 1, - USE_MAP: 1 - }); - component2.setUniform({ - map: this.config.map, - uvTransform: mat3_exports.create() - }); - } - } - }]); - return Basic2; -}(Material), _temp20), _descriptor20 = _applyDecoratedDescriptor(_class217.prototype, "engine", [_dec216], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor212 = _applyDecoratedDescriptor(_class217.prototype, "shaderModuleService", [_dec312], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class217)) || _class41); +uniform mat4 projectionMatrix; +uniform mat4 modelViewMatrix; -// node_modules/@antv/g-webgpu/es/renderable/grid/index.js -var import_inversify28 = __toModule(require_inversify()); -var _dec60; -var _dec217; -var _dec313; -var _dec410; -var _dec510; -var _dec65; -var _class42; -var _class218; -var _descriptor21; -var _descriptor213; -var _descriptor39; -var _temp21; -function _createSuper14(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct14(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct14() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var gridFrag = "// generate grid, borrow from clay.gl viewer\n// @see https://github.com/pissang/clay-viewer/blob/master/src/graphic/ground.glsl\n#extension GL_OES_standard_derivatives : enable\n\nvarying vec3 v_Position;\n// varying vec3 v_Normal;\n\nuniform float u_GridSize : 5;\nuniform float u_GridSize2 : .5;\nuniform vec4 u_GridColor : [0, 0, 0, 1];\nuniform vec4 u_GridColor2 : [0.3, 0.3, 0.3, 1];\nuniform bool u_GridEnabled : true;\n\n// uniform vec3 u_LightDirection;\n// uniform vec3 u_LightColor;\n// uniform vec3 u_Camera;\n\nvoid main() {\n // vec3 n = v_Normal;\n // vec3 l = normalize(u_LightDirection);\n // float NdotL = clamp(dot(n, l), 0.001, 1.0);\n\n gl_FragColor = vec4(1.);\n\n if (u_GridEnabled) {\n float wx = v_Position.x;\n float wz = v_Position.z;\n // float x0 = abs(fract(wx / u_GridSize - 0.5) - 0.5) / fwidth(wx) * u_GridSize / 2.0;\n // float z0 = abs(fract(wz / u_GridSize - 0.5) - 0.5) / fwidth(wz) * u_GridSize / 2.0;\n\n float x1 = abs(fract(wx / u_GridSize2 - 0.5) - 0.5) / fwidth(wx) * u_GridSize2;\n float z1 = abs(fract(wz / u_GridSize2 - 0.5) - 0.5) / fwidth(wz) * u_GridSize2;\n\n // float v0 = 1.0 - clamp(min(x0, z0), 0.0, 1.0);\n float v1 = 1.0 - clamp(min(x1, z1), 0.0, 1.0);\n // if (v0 > 0.1) {\n // gl_FragColor = mix(gl_FragColor, u_GridColor, v0);\n // }\n // else {\n gl_FragColor = mix(gl_FragColor, u_GridColor2, v1);\n // }\n }\n\n // float shadowFactor = calcShadow(u_ShadowMap, v_PositionFromLight, l, n);\n // vec3 diffuseColor = u_LightColor * NdotL * shadowFactor;\n\n // gl_FragColor.rgb *= diffuseColor;\n}"; -var gridVert = "attribute vec3 a_Position;\n\nvarying vec3 v_Position;\n\nuniform mat4 projectionMatrix;\nuniform mat4 modelViewMatrix;\n\nvoid main() {\n v_Position = a_Position;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(a_Position, 1.);\n}"; -var Grid = (_dec60 = (0, import_inversify28.injectable)(), _dec217 = (0, import_inversify28.inject)(IDENTIFIER.Systems), _dec313 = (0, import_inversify28.named)(IDENTIFIER.MaterialSystem), _dec410 = (0, import_inversify28.inject)(IDENTIFIER.Systems), _dec510 = (0, import_inversify28.named)(IDENTIFIER.GeometrySystem), _dec65 = (0, import_inversify28.inject)(IDENTIFIER.ShaderModuleService), _dec60(_class42 = (_class218 = (_temp21 = /* @__PURE__ */ function(_Renderable) { - _inherits(Grid5, _Renderable); - var _super = _createSuper14(Grid5); - function Grid5() { - var _this; - _classCallCheck(this, Grid5); - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - _this = _super.call.apply(_super, [this].concat(args)); - _initializerDefineProperty(_this, "materialSystem", _descriptor21, _assertThisInitialized(_this)); - _initializerDefineProperty(_this, "geometrySystem", _descriptor213, _assertThisInitialized(_this)); - _initializerDefineProperty(_this, "shaderModuleService", _descriptor39, _assertThisInitialized(_this)); - return _this; - } - _createClass(Grid5, [{ - key: "onAttributeChanged", - value: function onAttributeChanged(_ref2) { - var name = _ref2.name, data3 = _ref2.data; - var mesh = this.getMeshComponent(); - if (mesh && mesh.material) { - if (name === "gridColor") { - mesh.material.setUniform("u_GridColor", data3); - mesh.material.setUniform("u_GridColor2", data3); - } else if (name === "gridSize") { - mesh.material.setUniform("u_GridSize", data3); - mesh.material.setUniform("u_GridSize2", data3); - } - } - } - }, { - key: "onEntityCreated", - value: function onEntityCreated() { - this.shaderModuleService.registerModule("grid", { - vs: gridVert, - fs: gridFrag - }); - var _this$shaderModuleSer = this.shaderModuleService.getModule("grid"), vs = _this$shaderModuleSer.vs, fs = _this$shaderModuleSer.fs, extractedUniforms = _this$shaderModuleSer.uniforms; - var material = this.materialSystem.createShaderMaterial({ - vertexShader: vs, - fragmentShader: fs - }); - this.setMaterial(material); - var geometry35 = this.geometrySystem.createBufferGeometry({ - vertexCount: 4 - }); - this.setGeometry(geometry35); - material.setCull({ - enable: false, - face: gl.BACK - }).setDepth({ - enable: true, - func: gl.LESS - }); - material.setUniform(extractedUniforms); - this.setAttributes({ - gridColor: this.config.gridColor, - gridSize: this.config.gridSize - }); - geometry35.setIndex([0, 3, 2, 2, 1, 0]); - geometry35.setAttribute("a_Position", Float32Array.from([-4, -1, -4, 4, -1, -4, 4, -1, 4, -4, -1, 4]), { - arrayStride: 4 * 2, - stepMode: "vertex", - attributes: [{ - shaderLocation: 0, - offset: 0, - format: "float2" - }] - }); - } - }]); - return Grid5; -}(Renderable), _temp21), _descriptor21 = _applyDecoratedDescriptor(_class218.prototype, "materialSystem", [_dec217, _dec313], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor213 = _applyDecoratedDescriptor(_class218.prototype, "geometrySystem", [_dec410, _dec510], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor39 = _applyDecoratedDescriptor(_class218.prototype, "shaderModuleService", [_dec65], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class218)) || _class42); +void main() { + v_Position = a_Position; + gl_Position = projectionMatrix * modelViewMatrix * vec4(a_Position, 1.); +}`,i_t=(X1t=(0,tv.injectable)(),q1t=(0,tv.inject)(Qt.Systems),K1t=(0,tv.named)(Qt.MaterialSystem),Z1t=(0,tv.inject)(Qt.Systems),$1t=(0,tv.named)(Qt.GeometrySystem),Q1t=(0,tv.inject)(Qt.ShaderModuleService),X1t(J1t=(WM=(n_t=function(r){ui(t,r);var e=oce(t);function t(){var n;se(this,t);for(var i=arguments.length,a=new Array(i),o=0;oh;if(!isFinite(A)){(0,hd.normal)(u,n),PN(p,d,C,u,1),v.push(s===1?[b,b+2,b+3]:[b+2,b+1,b+3]),c+=2,s=I;continue}P?(A=h,m.push(x/g),VM(d,u,-I),p.push(C),VM(d,o,A*I),p.push(C),v.push(s!==-I?[b,b+2,b+3]:[b+2,b+1,b+3]),v.push([b+2,b+3,b+4]),(0,hd.normal)(f,i),(0,ox.copy)(u,f),VM(d,u,-I),p.push(C),c+=3):(PN(p,d,C,o,A),v.push(s===1?[b,b+2,b+3]:[b+2,b+1,b+3]),I=-1,(0,ox.copy)(u,o),c+=2),s=I}}return{normals:d,attrIndex:v,attrPos:p,attrCounters:m}}var PSt,kSt,RSt,NSt,FSt,BSt,GSt,HM,zSt,USt,jSt,WSt;function Kce(r){var e=Zce();return function(){var n=Zr(r),i;if(e){var a=Zr(this).constructor;i=Reflect.construct(n,arguments,a)}else i=n.apply(this,arguments);return fi(this,i)}}function Zce(){if(typeof Reflect=="undefined"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(r){return!1}}var $ce=`uniform float u_dash_array : 0.02; +uniform float u_dash_offset : 0; +uniform float u_dash_ratio : 0; +uniform float u_thickness : 0.02; + +varying vec4 v_color; +varying vec2 v_normal; +varying float v_counters; + +void main() { + float blur = 1. - smoothstep(0.98, 1., length(v_normal)); -// node_modules/@antv/g-webgpu/es/renderable/line/index.js -var import_inversify29 = __toModule(require_inversify()); + gl_FragColor = v_color; + gl_FragColor.a *= blur * ceil(mod(v_counters + u_dash_offset, u_dash_array) - (u_dash_array * u_dash_ratio)); +}`,Qce=`attribute vec2 a_pos; +attribute vec4 a_color; +attribute float a_line_miter; +attribute vec2 a_line_normal; +attribute float a_counters; + +uniform mat4 projectionMatrix; +uniform mat4 modelViewMatrix; +uniform float u_thickness : 0.02; +uniform vec2 u_viewport; + +varying vec4 v_color; +varying vec2 v_normal; +varying float v_counters; -// node_modules/@antv/g-webgpu/es/utils/polyline-normals.js -var import_gl_vec2 = __toModule(require_gl_vec2()); -var import_polyline_miter_util = __toModule(require_polyline_miter_util()); -function extrusions(positions, out, point2, normal2, scale12) { - addNext(out, normal2, -scale12); - addNext(out, normal2, scale12); - positions.push(point2); - positions.push(point2); -} -function addNext(out, normal2, length5) { - out.push([[normal2[0], normal2[1]], length5]); -} -function polyline_normals_default(points, closed, indexOffset) { - var lineA = [0, 0]; - var lineB = [0, 0]; - var tangent = [0, 0]; - var miter = [0, 0]; - var _lastFlip = -1; - var _started = false; - var _normal = null; - var tmp = (0, import_gl_vec2.create)(); - var count2 = indexOffset || 0; - var miterLimit = 3; - var out = []; - var attrPos = []; - var attrIndex = []; - var attrCounters = [0, 0]; - if (closed) { - points = points.slice(); - points.push(points[0]); - } - var total = points.length; - for (var i4 = 1; i4 < total; i4++) { - var index2 = count2; - var last17 = points[i4 - 1]; - var cur = points[i4]; - var next = i4 < points.length - 1 ? points[i4 + 1] : null; - attrCounters.push(i4 / total, i4 / total); - (0, import_polyline_miter_util.direction)(lineA, cur, last17); - if (!_normal) { - _normal = [0, 0]; - (0, import_polyline_miter_util.normal)(_normal, lineA); - } - if (!_started) { - _started = true; - extrusions(attrPos, out, last17, _normal, 1); - } - attrIndex.push([index2 + 0, index2 + 1, index2 + 2]); - if (!next) { - (0, import_polyline_miter_util.normal)(_normal, lineA); - extrusions(attrPos, out, cur, _normal, 1); - attrIndex.push(_lastFlip === 1 ? [index2, index2 + 2, index2 + 3] : [index2 + 2, index2 + 1, index2 + 3]); - count2 += 2; - } else { - (0, import_polyline_miter_util.direction)(lineB, next, cur); - var miterLen = (0, import_polyline_miter_util.computeMiter)(tangent, miter, lineA, lineB, 1); - var flip = (0, import_gl_vec2.dot)(tangent, _normal) < 0 ? -1 : 1; - var bevel = miterLen > miterLimit; - if (!isFinite(miterLen)) { - (0, import_polyline_miter_util.normal)(_normal, lineA); - extrusions(attrPos, out, cur, _normal, 1); - attrIndex.push(_lastFlip === 1 ? [index2, index2 + 2, index2 + 3] : [index2 + 2, index2 + 1, index2 + 3]); - count2 += 2; - _lastFlip = flip; - continue; - } - if (bevel) { - miterLen = miterLimit; - attrCounters.push(i4 / total); - addNext(out, _normal, -flip); - attrPos.push(cur); - addNext(out, miter, miterLen * flip); - attrPos.push(cur); - attrIndex.push(_lastFlip !== -flip ? [index2, index2 + 2, index2 + 3] : [index2 + 2, index2 + 1, index2 + 3]); - attrIndex.push([index2 + 2, index2 + 3, index2 + 4]); - (0, import_polyline_miter_util.normal)(tmp, lineB); - (0, import_gl_vec2.copy)(_normal, tmp); - addNext(out, _normal, -flip); - attrPos.push(cur); - count2 += 3; - } else { - extrusions(attrPos, out, cur, miter, miterLen); - attrIndex.push(_lastFlip === 1 ? [index2, index2 + 2, index2 + 3] : [index2 + 2, index2 + 1, index2 + 3]); - flip = -1; - (0, import_gl_vec2.copy)(_normal, miter); - count2 += 2; - } - _lastFlip = flip; - } - } - return { - normals: out, - attrIndex, - attrPos, - attrCounters - }; -} +void main() { + v_color = a_color; + v_counters = a_counters; -// node_modules/@antv/g-webgpu/es/renderable/line/index.js -var _dec61; -var _dec218; -var _dec314; -var _dec411; -var _dec511; -var _dec66; -var _class43; -var _class219; -var _descriptor30; -var _descriptor214; -var _descriptor310; -var _temp22; -function _createSuper15(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct15(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct15() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } -} -var lineFrag = "uniform float u_dash_array : 0.02;\nuniform float u_dash_offset : 0;\nuniform float u_dash_ratio : 0;\nuniform float u_thickness : 0.02;\n\nvarying vec4 v_color;\nvarying vec2 v_normal;\nvarying float v_counters;\n\nvoid main() {\n float blur = 1. - smoothstep(0.98, 1., length(v_normal));\n\n gl_FragColor = v_color;\n gl_FragColor.a *= blur * ceil(mod(v_counters + u_dash_offset, u_dash_array) - (u_dash_array * u_dash_ratio));\n}"; -var lineVert = "attribute vec2 a_pos;\nattribute vec4 a_color;\nattribute float a_line_miter;\nattribute vec2 a_line_normal;\nattribute float a_counters;\n\nuniform mat4 projectionMatrix;\nuniform mat4 modelViewMatrix;\nuniform float u_thickness : 0.02;\nuniform vec2 u_viewport;\n\nvarying vec4 v_color;\nvarying vec2 v_normal;\nvarying float v_counters;\n\nvoid main() {\n v_color = a_color;\n v_counters = a_counters;\n\n vec3 normal = normalize(vec3(a_line_normal, 0.0));\n\n vec4 offset = vec4(normal * u_thickness / 2.0 * a_line_miter, 0.0);\n\n v_normal = vec2(normal * sign(a_line_miter));\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4(a_pos, 0.0, 1.0) + offset;\n}\n"; -var Line8 = (_dec61 = (0, import_inversify29.injectable)(), _dec218 = (0, import_inversify29.inject)(IDENTIFIER.Systems), _dec314 = (0, import_inversify29.named)(IDENTIFIER.MaterialSystem), _dec411 = (0, import_inversify29.inject)(IDENTIFIER.Systems), _dec511 = (0, import_inversify29.named)(IDENTIFIER.GeometrySystem), _dec66 = (0, import_inversify29.inject)(IDENTIFIER.ShaderModuleService), _dec61(_class43 = (_class219 = (_temp22 = /* @__PURE__ */ function(_Renderable) { - _inherits(Line9, _Renderable); - var _super = _createSuper15(Line9); - function Line9() { - var _this; - _classCallCheck(this, Line9); - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - _this = _super.call.apply(_super, [this].concat(args)); - _initializerDefineProperty(_this, "materialSystem", _descriptor30, _assertThisInitialized(_this)); - _initializerDefineProperty(_this, "geometrySystem", _descriptor214, _assertThisInitialized(_this)); - _initializerDefineProperty(_this, "shaderModuleService", _descriptor310, _assertThisInitialized(_this)); - _this.vertexCount = void 0; - return _this; - } - _createClass(Line9, [{ - key: "onAttributeChanged", - value: function onAttributeChanged(_ref2) { - var name = _ref2.name, data3 = _ref2.data; - var mesh = this.getMeshComponent(); - if (mesh && mesh.material) { - switch (name) { - case "dashArray": - mesh.material.setUniform("u_dash_array", data3); - break; - case "dashOffset": - mesh.material.setUniform("u_dash_offset", data3); - break; - case "dashRatio": - mesh.material.setUniform("u_dash_ratio", data3); - break; - case "thickness": - mesh.material.setUniform("u_thickness", data3); - break; - case "color": - var colors = new Array(this.vertexCount).fill(void 0).map(function() { - return data3; - }).reduce(function(prev, cur) { - return [].concat(_toConsumableArray(prev), _toConsumableArray(cur)); - }, []); - mesh.geometry.setAttribute("a_color", Float32Array.from(colors), { - arrayStride: 4 * 4, - stepMode: "vertex", - attributes: [{ - shaderLocation: 1, - offset: 0, - format: "float4" - }] - }); - break; - } - } - } - }, { - key: "onEntityCreated", - value: function onEntityCreated() { - var _this2 = this; - this.shaderModuleService.registerModule("line", { - vs: lineVert, - fs: lineFrag - }); - var _this$shaderModuleSer = this.shaderModuleService.getModule("line"), vs = _this$shaderModuleSer.vs, fs = _this$shaderModuleSer.fs, extractedUniforms = _this$shaderModuleSer.uniforms; - var material = this.materialSystem.createShaderMaterial({ - vertexShader: vs, - fragmentShader: fs - }); - var _getNormals = polyline_normals_default(this.config.points, false), normals = _getNormals.normals, attrIndex = _getNormals.attrIndex, attrPos = _getNormals.attrPos, attrCounters = _getNormals.attrCounters; - var vertexCount = attrPos.length; - this.vertexCount = vertexCount; - var geometry35 = this.geometrySystem.createBufferGeometry({ - vertexCount - }); - this.setMaterial(material); - this.setGeometry(geometry35); - material.setCull({ - enable: false, - face: gl.BACK - }).setUniform(extractedUniforms); - this.setAttributes({ - dashArray: this.config.dashArray, - dashOffset: this.config.dashOffset, - dashRatio: this.config.dashRatio, - thickness: this.config.thickness - }); - var attrNormal = []; - var attrMiter = []; - normals.forEach(function(n3) { - var norm = n3[0]; - var miter = n3[1]; - attrNormal.push([norm[0], norm[1]]); - attrMiter.push(miter); - }); - geometry35.setIndex(attrIndex.reduce(function(prev, cur) { - return [].concat(_toConsumableArray(prev), _toConsumableArray(cur)); - }, [])); - geometry35.setAttribute("a_pos", Float32Array.from(attrPos.reduce(function(prev, cur) { - return [].concat(_toConsumableArray(prev), _toConsumableArray(cur)); - }, [])), { - arrayStride: 4 * 2, - stepMode: "vertex", - attributes: [{ - shaderLocation: 0, - offset: 0, - format: "float2" - }] - }); - var colors = new Array(vertexCount).fill(void 0).map(function() { - return _toConsumableArray(_this2.config.color); - }).reduce(function(prev, cur) { - return [].concat(_toConsumableArray(prev), _toConsumableArray(cur)); - }, []); - geometry35.setAttribute("a_color", Float32Array.from(colors), { - arrayStride: 4 * 4, - stepMode: "vertex", - attributes: [{ - shaderLocation: 1, - offset: 0, - format: "float4" - }] - }); - geometry35.setAttribute("a_line_miter", Float32Array.from(attrMiter), { - arrayStride: 4 * 1, - stepMode: "vertex", - attributes: [{ - shaderLocation: 2, - offset: 0, - format: "float" - }] - }); - geometry35.setAttribute("a_line_normal", Float32Array.from(attrNormal.reduce(function(prev, cur) { - return [].concat(_toConsumableArray(prev), _toConsumableArray(cur)); - }, [])), { - arrayStride: 4 * 2, - stepMode: "vertex", - attributes: [{ - shaderLocation: 3, - offset: 0, - format: "float2" - }] - }); - geometry35.setAttribute("a_counters", Float32Array.from(attrCounters), { - arrayStride: 4 * 1, - stepMode: "vertex", - attributes: [{ - shaderLocation: 4, - offset: 0, - format: "float" - }] - }); - } - }]); - return Line9; -}(Renderable), _temp22), _descriptor30 = _applyDecoratedDescriptor(_class219.prototype, "materialSystem", [_dec218, _dec314], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor214 = _applyDecoratedDescriptor(_class219.prototype, "geometrySystem", [_dec411, _dec511], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor310 = _applyDecoratedDescriptor(_class219.prototype, "shaderModuleService", [_dec66], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class219)) || _class43); + vec3 normal = normalize(vec3(a_line_normal, 0.0)); -// node_modules/@antv/g-webgpu/es/renderable/point/index.js -var import_inversify30 = __toModule(require_inversify()); + vec4 offset = vec4(normal * u_thickness / 2.0 * a_line_miter, 0.0); -// node_modules/@antv/g-webgpu/es/utils/picking.js -function encodePickingColor(featureIdx) { - return [featureIdx + 1 & 255, featureIdx + 1 >> 8 & 255, featureIdx + 1 >> 8 >> 8 & 255]; -} + v_normal = vec2(normal * sign(a_line_miter)); -// node_modules/@antv/g-webgpu/es/renderable/point/index.js -var _dec67; -var _dec219; -var _dec315; -var _dec412; -var _dec512; -var _dec68; -var _class44; -var _class220; -var _descriptor31; -var _descriptor215; -var _descriptor311; -var _temp23; -function ownKeys9(object, enumerableOnly) { - var keys6 = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) - symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys6.push.apply(keys6, symbols); - } - return keys6; -} -function _objectSpread9(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = arguments[i4] != null ? arguments[i4] : {}; - if (i4 % 2) { - ownKeys9(Object(source), true).forEach(function(key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys9(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - return target; -} -function _createSuper16(Derived) { - var hasNativeReflectConstruct = _isNativeReflectConstruct16(); - return function _createSuperInternal() { - var Super = _getPrototypeOf(Derived), result; - if (hasNativeReflectConstruct) { - var NewTarget = _getPrototypeOf(this).constructor; - result = Reflect.construct(Super, arguments, NewTarget); - } else { - result = Super.apply(this, arguments); - } - return _possibleConstructorReturn(this, result); - }; -} -function _isNativeReflectConstruct16() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function() { - })); - return true; - } catch (e4) { - return false; - } + gl_Position = projectionMatrix * modelViewMatrix * vec4(a_pos, 0.0, 1.0) + offset; } -var pointFrag = `uniform float u_blur : 0.05; +`,VSt=(PSt=(0,ev.injectable)(),kSt=(0,ev.inject)(Qt.Systems),RSt=(0,ev.named)(Qt.MaterialSystem),NSt=(0,ev.inject)(Qt.Systems),FSt=(0,ev.named)(Qt.GeometrySystem),BSt=(0,ev.inject)(Qt.ShaderModuleService),PSt(GSt=(HM=(WSt=function(r){ui(t,r);var e=Kce(t);function t(){var n;se(this,t);for(var i=arguments.length,a=new Array(i),o=0;o>8&255,r+1>>8>>8&255]}var YSt,XSt,qSt,KSt,ZSt,$St,QSt,YM,JSt,tCt,eCt,rCt;function nCt(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(r,i).enumerable})),t.push.apply(t,n)}return t}function Jce(r){for(var e=1;e= o3.length) - return { done: true }; - return { done: false, value: o3[i4++] }; - }, e: function e4(_e) { - throw _e; - }, f: F3 }; - } - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - var normalCompletion = true, didErr = false, err; - return { s: function s4() { - it = o3[Symbol.iterator](); - }, n: function n3() { - var step = it.next(); - normalCompletion = step.done; - return step; - }, e: function e4(_e2) { - didErr = true; - err = _e2; - }, f: function f3() { - try { - if (!normalCompletion && it.return != null) - it.return(); - } finally { - if (didErr) - throw err; - } - } }; -} -function _unsupportedIterableToArray6(o3, minLen) { - if (!o3) - return; - if (typeof o3 === "string") - return _arrayLikeToArray6(o3, minLen); - var n3 = Object.prototype.toString.call(o3).slice(8, -1); - if (n3 === "Object" && o3.constructor) - n3 = o3.constructor.name; - if (n3 === "Map" || n3 === "Set") - return Array.from(o3); - if (n3 === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n3)) - return _arrayLikeToArray6(o3, minLen); -} -function _arrayLikeToArray6(arr, len5) { - if (len5 == null || len5 > arr.length) - len5 = arr.length; - for (var i4 = 0, arr2 = new Array(len5); i4 < len5; i4++) { - arr2[i4] = arr[i4]; - } - return arr2; -} -var mapFragDeclaration = "#ifdef USE_MAP\n uniform sampler2D map;\n#endif"; -var mapFragMain = "#ifdef USE_MAP\n vec4 texelColor = texture2D(map, vUv);\n // texelColor = mapTexelToLinear(texelColor);\n diffuseColor *= texelColor;\n#endif"; -var uvFragDeclaration = "#if (defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ))\n varying vec2 vUv;\n#endif"; -var uvVertDeclaration = "#ifdef USE_UV\n attribute vec2 uv;\n #ifdef UVS_VERTEX_ONLY\n vec2 vUv;\n #else\n varying vec2 vUv;\n #endif\n uniform mat3 uvTransform;\n#endif"; -var uvVertMain = "#ifdef USE_UV\n vUv = (uvTransform * vec3(uv, 1)).xy;\n#endif"; -var Renderer = (_dec69 = (0, import_inversify31.injectable)(), _dec220 = (0, import_inversify31.inject)(IDENTIFIER.RenderEngine), _dec316 = (0, import_inversify31.inject)(IDENTIFIER.ShaderModuleService), _dec413 = (0, import_inversify31.inject)(IDENTIFIER.ConfigService), _dec69(_class45 = (_class221 = (_temp24 = /* @__PURE__ */ function() { - function Renderer2() { - _classCallCheck(this, Renderer2); - this.container = void 0; - _initializerDefineProperty(this, "engine", _descriptor40, this); - _initializerDefineProperty(this, "shaderModule", _descriptor216, this); - _initializerDefineProperty(this, "configService", _descriptor312, this); - this.inited = false; - this.rendering = false; - this.pendings = []; - this.views = []; - this.size = void 0; - } - _createClass(Renderer2, [{ - key: "init", - value: function() { - var _init = _asyncToGenerator(/* @__PURE__ */ import_regenerator18.default.mark(function _callee() { - var systems, config, _iterator, _step, system; - return import_regenerator18.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - this.shaderModule.registerBuiltinModules(); - this.shaderModule.registerModule("uv.vert.declaration", { - vs: uvVertDeclaration - }); - this.shaderModule.registerModule("uv.vert.main", { - vs: uvVertMain - }); - this.shaderModule.registerModule("uv.frag.declaration", { - fs: uvFragDeclaration - }); - this.shaderModule.registerModule("map.frag.declaration", { - fs: mapFragDeclaration - }); - this.shaderModule.registerModule("map.frag.main", { - fs: mapFragMain - }); - systems = this.container.getAll(IDENTIFIER.Systems); - config = this.configService.get(); - if (!config.canvas) { - _context.next = 30; - break; - } - _context.next = 11; - return this.engine.init({ - canvas: config.canvas, - swapChainFormat: WebGPUConstants9.TextureFormat.BGRA8Unorm, - antialiasing: false - }); - case 11: - _iterator = _createForOfIteratorHelper5(systems); - _context.prev = 12; - _iterator.s(); - case 14: - if ((_step = _iterator.n()).done) { - _context.next = 21; - break; - } - system = _step.value; - if (!system.initialize) { - _context.next = 19; - break; - } - _context.next = 19; - return system.initialize(); - case 19: - _context.next = 14; - break; - case 21: - _context.next = 26; - break; - case 23: - _context.prev = 23; - _context.t0 = _context["catch"](12); - _iterator.e(_context.t0); - case 26: - _context.prev = 26; - _iterator.f(); - return _context.finish(26); - case 29: - this.inited = true; - case 30: - case "end": - return _context.stop(); - } - } - }, _callee, this, [[12, 23, 26, 29]]); - })); - function init() { - return _init.apply(this, arguments); - } - return init; - }() - }, { - key: "render", - value: function() { - var _render = _asyncToGenerator(/* @__PURE__ */ import_regenerator18.default.mark(function _callee2() { - var systems, _len, views, _key, _iterator2, _step2, system, _args2 = arguments; - return import_regenerator18.default.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - if (!(!this.inited || this.rendering)) { - _context2.next = 2; - break; - } - return _context2.abrupt("return"); - case 2: - if (this.pendings.length) { - this.pendings.forEach(function(pending) { - pending(); - }); - } - this.rendering = true; - this.engine.beginFrame(); - systems = this.container.getAll(IDENTIFIER.Systems); - for (_len = _args2.length, views = new Array(_len), _key = 0; _key < _len; _key++) { - views[_key] = _args2[_key]; - } - _iterator2 = _createForOfIteratorHelper5(systems); - _context2.prev = 8; - _iterator2.s(); - case 10: - if ((_step2 = _iterator2.n()).done) { - _context2.next = 17; - break; - } - system = _step2.value; - if (!system.execute) { - _context2.next = 15; - break; - } - _context2.next = 15; - return system.execute(views); - case 15: - _context2.next = 10; - break; - case 17: - _context2.next = 22; - break; - case 19: - _context2.prev = 19; - _context2.t0 = _context2["catch"](8); - _iterator2.e(_context2.t0); - case 22: - _context2.prev = 22; - _iterator2.f(); - return _context2.finish(22); - case 25: - this.engine.endFrame(); - this.rendering = false; - case 27: - case "end": - return _context2.stop(); - } - } - }, _callee2, this, [[8, 19, 22, 25]]); - })); - function render() { - return _render.apply(this, arguments); - } - return render; - }() - }, { - key: "clear", - value: function clear(options) { - var _this = this; - if (this.inited) { - this.engine.clear(options); - } else { - this.pendings.unshift(function() { - _this.engine.clear(options); - _this.pendings.shift(); - }); - } - return this; - } - }, { - key: "setSize", - value: function setSize(_ref2) { - var width2 = _ref2.width, height = _ref2.height; - var canvas = this.engine.getCanvas(); - this.size = { - width: width2, - height - }; - canvas.width = width2; - canvas.height = height; - return this; - } - }, { - key: "getSize", - value: function getSize5() { - return this.size; - } - }]); - return Renderer2; -}(), _temp24), _descriptor40 = _applyDecoratedDescriptor(_class221.prototype, "engine", [_dec220], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor216 = _applyDecoratedDescriptor(_class221.prototype, "shaderModule", [_dec316], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor312 = _applyDecoratedDescriptor(_class221.prototype, "configService", [_dec413], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class221)) || _class45); +uniform mat4 projectionMatrix; +uniform mat4 modelViewMatrix; -// node_modules/@antv/g-webgpu/es/Scene.js -var import_inversify32 = __toModule(require_inversify()); -var _dec70; -var _class46; -var _temp25; -var Scene = (_dec70 = (0, import_inversify32.injectable)(), _dec70(_class46 = (_temp25 = /* @__PURE__ */ function() { - function Scene2() { - _classCallCheck(this, Scene2); - this.entities = []; - } - _createClass(Scene2, [{ - key: "getEntities", - value: function getEntities() { - return this.entities; - } - }, { - key: "addRenderable", - value: function addRenderable(renderable) { - this.addEntity(renderable.getEntity()); - return this; - } - }, { - key: "removeRenderable", - value: function removeRenderable(renderable) { - this.removeEntity(renderable.getEntity()); - return this; - } - }, { - key: "addLight", - value: function addLight() { - } - }, { - key: "addEntity", - value: function addEntity(entity) { - if (this.entities.indexOf(entity) === -1) { - this.entities.push(entity); - } - return this; - } - }, { - key: "removeEntity", - value: function removeEntity(entity) { - var index2 = this.entities.indexOf(entity); - this.entities.splice(index2, 1); - return this; - } - }]); - return Scene2; -}(), _temp25)) || _class46); +uniform float u_stroke_width : 0.01; +uniform float u_device_pixel_ratio; +uniform vec2 u_viewport; -// node_modules/@antv/g-webgpu/es/texture/Cache.js -var import_inversify33 = __toModule(require_inversify()); -var _dec71; -var _class47; -var _temp26; -var TextureCache = (_dec71 = (0, import_inversify33.injectable)(), _dec71(_class47 = (_temp26 = /* @__PURE__ */ function() { - function TextureCache2() { - _classCallCheck(this, TextureCache2); - this.cache = {}; - } - _createClass(TextureCache2, [{ - key: "get", - value: function get100(name) { - return this.cache[name]; - } - }, { - key: "set", - value: function set13(name, texture) { - this.cache[name] = texture; - } - }]); - return TextureCache2; -}(), _temp26)) || _class47); +varying vec4 v_color; +varying vec4 v_data; +varying float v_radius; -// node_modules/@antv/g-webgpu/es/texture/Texture2D.js -var import_regenerator19 = __toModule(require_regenerator()); -var import_inversify34 = __toModule(require_inversify()); -var _dec73; -var _dec221; -var _dec317; -var _class48; -var _class222; -var _descriptor41; -var _descriptor217; -var _temp27; -function ownKeys10(object, enumerableOnly) { - var keys6 = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) - symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys6.push.apply(keys6, symbols); - } - return keys6; -} -function _objectSpread10(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = arguments[i4] != null ? arguments[i4] : {}; - if (i4 % 2) { - ownKeys10(Object(source), true).forEach(function(key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys10(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - return target; -} -var Texture2D = (_dec73 = (0, import_inversify34.injectable)(), _dec221 = (0, import_inversify34.inject)(TextureCache), _dec317 = (0, import_inversify34.inject)(IDENTIFIER.RenderEngine), _dec73(_class48 = (_class222 = (_temp27 = /* @__PURE__ */ function() { - function Texture2D2() { - _classCallCheck(this, Texture2D2); - _initializerDefineProperty(this, "textureCache", _descriptor41, this); - _initializerDefineProperty(this, "engine", _descriptor217, this); - this.config = void 0; - this.loaded = false; - this.texture = void 0; - } - _createClass(Texture2D2, [{ - key: "setConfig", - value: function setConfig(config) { - this.config = config; - } - }, { - key: "isLoaded", - value: function isLoaded() { - return this.loaded; - } - }, { - key: "load", - value: function() { - var _load = _asyncToGenerator(/* @__PURE__ */ import_regenerator19.default.mark(function _callee() { - var _this = this; - return import_regenerator19.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - if (!this.config.url) { - _context.next = 4; - break; - } - return _context.abrupt("return", new Promise(function(resolve, reject) { - var existed = _this.textureCache.get(_this.config.url); - if (existed) { - resolve(existed); - } else { - var image = new Image(); - image.crossOrigin = "Anonymous"; - image.src = _this.config.url; - image.onload = function() { - var texture = _this.engine.createTexture2D(_objectSpread10(_objectSpread10({}, _this.config), {}, { - data: image, - width: image.width, - height: image.height, - flipY: true - })); - _this.textureCache.set(_this.config.url, texture); - _this.texture = texture; - _this.loaded = true; - resolve(texture); - }; - image.onerror = function() { - reject(); - }; - } - })); - case 4: - this.loaded = true; - this.texture = this.engine.createTexture2D(this.config); - return _context.abrupt("return", this.texture); - case 7: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - function load2() { - return _load.apply(this, arguments); - } - return load2; - }() - }]); - return Texture2D2; -}(), _temp27), _descriptor41 = _applyDecoratedDescriptor(_class222.prototype, "textureCache", [_dec221], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _descriptor217 = _applyDecoratedDescriptor(_class222.prototype, "engine", [_dec317], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class222)) || _class48); +#pragma include "picking" -// node_modules/@antv/g-webgpu/es/View.js -var import_inversify35 = __toModule(require_inversify()); -var _dec74; -var _dec222; -var _dec318; -var _class49; -var _class223; -var _descriptor47; -var _temp28; -var View2 = (_dec74 = (0, import_inversify35.injectable)(), _dec222 = (0, import_inversify35.inject)(IDENTIFIER.Systems), _dec318 = (0, import_inversify35.named)(IDENTIFIER.RendererSystem), _dec74(_class49 = (_class223 = (_temp28 = /* @__PURE__ */ function() { - function View3() { - _classCallCheck(this, View3); - _initializerDefineProperty(this, "rendererSystem", _descriptor47, this); - this.camera = void 0; - this.scene = void 0; - this.viewport = { - x: 0, - y: 0, - width: 0, - height: 0 - }; - this.clearColor = [1, 1, 1, 1]; - } - _createClass(View3, [{ - key: "getCamera", - value: function getCamera() { - return this.camera; - } - }, { - key: "getScene", - value: function getScene() { - return this.scene; - } - }, { - key: "getViewport", - value: function getViewport() { - return this.viewport; - } - }, { - key: "getClearColor", - value: function getClearColor() { - return this.clearColor; - } - }, { - key: "setCamera", - value: function setCamera(camera) { - this.camera = camera; - return this; - } - }, { - key: "setScene", - value: function setScene(scene) { - this.scene = scene; - return this; - } - }, { - key: "setViewport", - value: function setViewport(viewport) { - this.viewport = viewport; - return this; - } - }, { - key: "setClearColor", - value: function setClearColor(clearColor) { - this.clearColor = clearColor; - return this; - } - }, { - key: "pick", - value: function pick5(position2) { - return this.rendererSystem.pick(position2, this); - } - }]); - return View3; -}(), _temp28), _descriptor47 = _applyDecoratedDescriptor(_class223.prototype, "rendererSystem", [_dec222, _dec318], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class223)) || _class49); +void main() { + v_color = color; + v_radius = size; -// node_modules/@antv/g-webgpu/es/World.js -var _dec75; -var _dec223; -var _class50; -var _class224; -var _descriptor48; -var _temp29; -function ownKeys11(object, enumerableOnly) { - var keys6 = Object.keys(object); - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) - symbols = symbols.filter(function(sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys6.push.apply(keys6, symbols); - } - return keys6; -} -function _objectSpread11(target) { - for (var i4 = 1; i4 < arguments.length; i4++) { - var source = arguments[i4] != null ? arguments[i4] : {}; - if (i4 % 2) { - ownKeys11(Object(source), true).forEach(function(key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys11(Object(source)).forEach(function(key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - return target; -} -var World = (_dec75 = (0, import_inversify36.injectable)(), _dec223 = (0, import_inversify36.inject)(IDENTIFIER.ConfigService), _dec75(_class50 = (_class224 = (_temp29 = /* @__PURE__ */ function() { - function World2() { - _classCallCheck(this, World2); - _initializerDefineProperty(this, "configService", _descriptor48, this); - this.container = void 0; - } - _createClass(World2, [{ - key: "getEngine", - value: function() { - var _getEngine = _asyncToGenerator(/* @__PURE__ */ import_regenerator20.default.mark(function _callee() { - var engine, _this$configService$g, canvas, engineOptions; - return import_regenerator20.default.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - engine = this.container.get(IDENTIFIER.RenderEngine); - _this$configService$g = this.configService.get(), canvas = _this$configService$g.canvas, engineOptions = _this$configService$g.engineOptions; - _context.next = 4; - return engine.init(_objectSpread11({ - canvas: canvas || createCanvas(), - swapChainFormat: WebGPUConstants10.TextureFormat.BGRA8Unorm, - antialiasing: false - }, engineOptions)); - case 4: - return _context.abrupt("return", engine); - case 5: - case "end": - return _context.stop(); - } - } - }, _callee, this); - })); - function getEngine2() { - return _getEngine.apply(this, arguments); - } - return getEngine2; - }() - }, { - key: "getTransformComponent", - value: function getTransformComponent(entity) { - var manager = this.container.get(IDENTIFIER.TransformComponentManager); - return manager.getComponentByEntity(entity); - } - }, { - key: "getMeshComponent", - value: function getMeshComponent(entity) { - var manager = this.container.get(IDENTIFIER.MeshComponentManager); - return manager.getComponentByEntity(entity); - } - }, { - key: "setConfig", - value: function setConfig(config) { - this.configService.set(config); - } - }, { - key: "setContainer", - value: function setContainer(container2) { - this.container = container2; - } - }, { - key: "getContainer", - value: function getContainer() { - return this.container; - } - }, { - key: "createEntity", - value: function createEntity2() { - return createEntity(); - } - }, { - key: "createScene", - value: function createScene() { - return this.container.get(Scene); - } - }, { - key: "createCamera", - value: function createCamera() { - return this.container.get(Camera); - } - }, { - key: "createView", - value: function createView() { - return this.container.get(View2); - } - }, { - key: "createRenderable", - value: function createRenderable(type2, config) { - var renderable = type2 ? this.container.getNamed(IDENTIFIER.Renderable, type2) : this.container.get(Renderable); - var entity = createEntity(); - renderable.setConfig(config || {}); - renderable.setEntity(entity); - return renderable; - } - }, { - key: "createGeometry", - value: function createGeometry(type2, config) { - var geometry35 = this.container.getNamed(IDENTIFIER.Geometry, type2); - var entity = createEntity(); - geometry35.setConfig(config || {}); - geometry35.setEntity(entity); - return geometry35.getComponent(); - } - }, { - key: "createMaterial", - value: function createMaterial(type2, config) { - var material = this.container.getNamed(IDENTIFIER.Material, type2); - var entity = createEntity(); - material.setConfig(config || {}); - material.setEntity(entity, type2); - return material.getComponent(); - } - }, { - key: "createTexture2D", - value: function createTexture2D(config) { - var texture = this.container.get(Texture2D); - texture.setConfig(config); - return texture; - } - }, { - key: "createBufferGeometry", - value: function createBufferGeometry(params) { - var geometrySystem = this.container.getNamed(IDENTIFIER.Systems, IDENTIFIER.GeometrySystem); - return geometrySystem.createBufferGeometry(params); - } - }, { - key: "createInstancedBufferGeometry", - value: function createInstancedBufferGeometry(params) { - var geometrySystem = this.container.getNamed(IDENTIFIER.Systems, IDENTIFIER.GeometrySystem); - return geometrySystem.createInstancedBufferGeometry(params); - } - }, { - key: "createShaderMaterial", - value: function createShaderMaterial(params) { - var materialSystem = this.container.getNamed(IDENTIFIER.Systems, IDENTIFIER.MaterialSystem); - return materialSystem.createShaderMaterial(params); - } - }, { - key: "createKernel", - value: function createKernel(precompiledBundle) { - var kernel = this.container.get(Kernel); - if (typeof precompiledBundle === "string") { - kernel.setBundle(JSON.parse(precompiledBundle)); - } else { - kernel.setBundle(precompiledBundle); - } - kernel.init(); - return kernel; - } - }, { - key: "createRenderer", - value: function createRenderer() { - var renderer = this.container.get(Renderer); - renderer.container = this.container; - renderer.init(); - return renderer; - } - }, { - key: "destroy", - value: function destroy() { - var systems = this.container.getAll(IDENTIFIER.Systems); - systems.forEach(function(system) { - if (system.tearDown) { - system.tearDown(); - } - }); - var engine = this.container.get(IDENTIFIER.RenderEngine); - engine.destroy(); - var interactor = this.container.get(IDENTIFIER.InteractorService); - interactor.destroy(); - } - }], [{ - key: "create", - value: function create8() { - var config = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; - var worldContainer = createWorldContainer(); - var engineClazz = !navigator.gpu ? WebGLEngine : WebGPUEngine; - if (!worldContainer.isBound(IDENTIFIER.RenderEngine)) { - worldContainer.bind(IDENTIFIER.RenderEngine).to(engineClazz).inSingletonScope(); - } - worldContainer.bind(Renderer).toSelf(); - worldContainer.bind(Kernel).toSelf(); - worldContainer.bind(Renderable).toSelf(); - worldContainer.bind(View2).toSelf(); - worldContainer.bind(Camera).toSelf(); - worldContainer.bind(Scene).toSelf(); - worldContainer.bind(World2).toSelf(); - worldContainer.bind(TextureCache).toSelf(); - worldContainer.bind(Texture2D).toSelf(); - worldContainer.bind(IDENTIFIER.Geometry).to(Box2).whenTargetNamed(Geometry2.BOX); - worldContainer.bind(IDENTIFIER.Geometry).to(Sphere).whenTargetNamed(Geometry2.SPHERE); - worldContainer.bind(IDENTIFIER.Geometry).to(Plane2).whenTargetNamed(Geometry2.PLANE); - worldContainer.bind(IDENTIFIER.Geometry).to(Merged).whenTargetNamed(Geometry2.MERGED); - worldContainer.bind(IDENTIFIER.Material).to(Basic).whenTargetNamed(Material.BASIC); - worldContainer.bind(IDENTIFIER.Renderable).to(Point2).whenTargetNamed(Renderable.POINT); - worldContainer.bind(IDENTIFIER.Renderable).to(Line8).whenTargetNamed(Renderable.LINE); - worldContainer.bind(IDENTIFIER.Renderable).to(Grid).whenTargetNamed(Renderable.GRID); - var world = worldContainer.get(World2); - world.setContainer(worldContainer); - world.setConfig(config); - return world; - } - }]); - return World2; -}(), _temp29), _descriptor48 = _applyDecoratedDescriptor(_class224.prototype, "configService", [_dec223], { - configurable: true, - enumerable: true, - writable: true, - initializer: null -}), _class224)) || _class50); + lowp float antialiasblur = 1.0 / u_device_pixel_ratio * (size + u_stroke_width); -// node_modules/@antv/layout/es/util/gpu.js -var proccessToFunc2 = (value2, defaultV) => { - let func; - if (!value2) { - func = () => { - return defaultV || 1; - }; - } else if (isNumber45(value2)) { - func = () => { - return value2; - }; - } else { - func = value2; - } - return func; -}; -var buildTextureData = (nodes, edges) => { - const dataArray = []; - const nodeDict = []; - const mapIdPos = {}; - let i4 = 0; - for (i4 = 0; i4 < nodes.length; i4++) { - const n3 = nodes[i4]; - mapIdPos[n3.id] = i4; - dataArray.push(n3.x); - dataArray.push(n3.y); - dataArray.push(0); - dataArray.push(0); - nodeDict.push([]); - } - for (i4 = 0; i4 < edges.length; i4++) { - const e4 = edges[i4]; - const source = getEdgeTerminal(e4, "source"); - const target = getEdgeTerminal(e4, "target"); - nodeDict[mapIdPos[source]].push(mapIdPos[target]); - nodeDict[mapIdPos[target]].push(mapIdPos[source]); - } - let maxEdgePerVetex = 0; - for (i4 = 0; i4 < nodes.length; i4++) { - const offset = dataArray.length; - const dests = nodeDict[i4]; - const len5 = dests.length; - dataArray[i4 * 4 + 2] = offset; - dataArray[i4 * 4 + 3] = dests.length; - maxEdgePerVetex = Math.max(maxEdgePerVetex, dests.length); - for (let j4 = 0; j4 < len5; ++j4) { - const dest = dests[j4]; - dataArray.push(+dest); - } - } - while (dataArray.length % 4 !== 0) { - dataArray.push(0); - } - return { - maxEdgePerVetex, - array: new Float32Array(dataArray) - }; -}; -var buildTextureDataWithTwoEdgeAttr = (nodes, edges, attrs1, attrs2) => { - const dataArray = []; - const nodeDict = []; - const mapIdPos = {}; - let i4 = 0; - for (i4 = 0; i4 < nodes.length; i4++) { - const n3 = nodes[i4]; - mapIdPos[n3.id] = i4; - dataArray.push(n3.x); - dataArray.push(n3.y); - dataArray.push(0); - dataArray.push(0); - nodeDict.push([]); - } - for (i4 = 0; i4 < edges.length; i4++) { - const e4 = edges[i4]; - const source = getEdgeTerminal(e4, "source"); - const target = getEdgeTerminal(e4, "target"); - nodeDict[mapIdPos[source]].push(mapIdPos[target]); - nodeDict[mapIdPos[source]].push(attrs1(e4)); - nodeDict[mapIdPos[source]].push(attrs2(e4)); - nodeDict[mapIdPos[source]].push(0); - nodeDict[mapIdPos[target]].push(mapIdPos[source]); - nodeDict[mapIdPos[target]].push(attrs1(e4)); - nodeDict[mapIdPos[target]].push(attrs2(e4)); - nodeDict[mapIdPos[target]].push(0); - } - let maxEdgePerVetex = 0; - for (i4 = 0; i4 < nodes.length; i4++) { - const offset = dataArray.length; - const dests = nodeDict[i4]; - const len5 = dests.length; - dataArray[i4 * 4 + 2] = offset + 1048576 * len5 / 4; - dataArray[i4 * 4 + 3] = 0; - maxEdgePerVetex = Math.max(maxEdgePerVetex, len5 / 4); - for (let j4 = 0; j4 < len5; ++j4) { - const dest = dests[j4]; - dataArray.push(+dest); - } - } - while (dataArray.length % 4 !== 0) { - dataArray.push(0); - } - return { - maxEdgePerVetex, - array: new Float32Array(dataArray) - }; -}; -var attributesToTextureData = (attributeNames, items) => { - const dataArray = []; - const attributeNum = attributeNames.length; - const attributteStringMap = {}; - items.forEach((item) => { - attributeNames.forEach((name, i4) => { - if (attributteStringMap[item[name]] === void 0) { - attributteStringMap[item[name]] = Object.keys(attributteStringMap).length; - } - dataArray.push(attributteStringMap[item[name]]); - if (i4 === attributeNum - 1) { - while (dataArray.length % 4 !== 0) { - dataArray.push(0); - } - } - }); - }); - return { - array: new Float32Array(dataArray), - count: Object.keys(attributteStringMap).length - }; -}; -var arrayToTextureData = (valueArrays) => { - const dataArray = []; - const attributeNum = valueArrays.length; - const itemNum = valueArrays[0].length; - for (let j4 = 0; j4 < itemNum; j4++) { - valueArrays.forEach((valueArray, i4) => { - dataArray.push(valueArray[j4]); - if (i4 === attributeNum - 1) { - while (dataArray.length % 4 !== 0) { - dataArray.push(0); - } - } - }); - } - return new Float32Array(dataArray); -}; + // construct point coords + v_data = vec4(position, antialiasblur, shape); -// node_modules/@antv/layout/es/layout/gpu/fruchtermanShader.js -var fruchtermanBundle = `{"shaders":{"WGSL":"import \\"GLSL.std.450\\" as std;\\n\\n\\n# var gWebGPUDebug : bool = false;\\n# var gWebGPUDebugOutput : vec4 = vec4(0.0);\\n\\n[[builtin global_invocation_id]] var globalInvocationID : vec3;\\n# [[builtin work_group_size]] var workGroupSize : vec3;\\n# [[builtin work_group_id]] var workGroupID : vec3;\\n[[builtin local_invocation_id]] var localInvocationID : vec3;\\n# [[builtin num_work_groups]] var numWorkGroups : vec3;\\n[[builtin local_invocation_idx]] var localInvocationIndex : u32;\\n\\ntype GWebGPUParams = [[block]] struct {\\n [[offset 0]] u_K : f32;\\n [[offset 4]] u_K2 : f32;\\n [[offset 8]] u_Center : vec2;\\n [[offset 16]] u_Gravity : f32;\\n [[offset 20]] u_ClusterGravity : f32;\\n [[offset 24]] u_Speed : f32;\\n [[offset 28]] u_MaxDisplace : f32;\\n [[offset 32]] u_Clustering : f32;\\n};\\n[[binding 0, set 0]] var gWebGPUUniformParams : GWebGPUParams;\\ntype GWebGPUBuffer0 = [[block]] struct {\\n [[offset 0]] u_Data : [[stride 16]] array>;\\n};\\n[[binding 1, set 0]] var gWebGPUBuffer0 : GWebGPUBuffer0;\\ntype GWebGPUBuffer1 = [[block]] struct {\\n [[offset 0]] u_AttributeArray : [[stride 16]] array>;\\n};\\n[[binding 2, set 0]] var gWebGPUBuffer1 : GWebGPUBuffer1;\\ntype GWebGPUBuffer2 = [[block]] struct {\\n [[offset 0]] u_ClusterCenters : [[stride 16]] array>;\\n};\\n[[binding 3, set 0]] var gWebGPUBuffer2 : GWebGPUBuffer2;\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nfn calcRepulsive(i : i32, currentNode : vec4) -> vec2 {var dx : f32 = 0.0;\\nvar dy : f32 = 0.0;\\nfor (var j : i32 = 0; j < __DefineValuePlaceholder__VERTEX_COUNT; j = j + 1) {if (i != j) {var nextNode : vec4 = gWebGPUBuffer0.u_Data[j];\\nvar xDist : f32 = currentNode.x - nextNode.x;\\nvar yDist : f32 = currentNode.y - nextNode.y;\\nvar dist : f32 = ((xDist * xDist) + (yDist * yDist)) + 0.01;\\nvar param : f32 = gWebGPUUniformParams.u_K2 / dist;\\nif (dist > 0.0) {dx = dx + param * xDist;\\ndy = dy + param * yDist;\\nif ((xDist == 0.0) && (yDist == 0.0)) {var sign : f32 = select(1.0, -1.0, i < j);\\ndx = dx + param * std::sign;\\ndy = dy + param * std::sign;}}}}\\nreturn vec2(dx, dy);}\\nfn calcGravity(currentNode : vec4, nodeAttributes : vec4) -> vec2 {var dx : f32 = 0.0;\\nvar dy : f32 = 0.0;\\nvar vx : f32 = currentNode.x - gWebGPUUniformParams.u_Center.x;\\nvar vy : f32 = currentNode.y - gWebGPUUniformParams.u_Center.y;\\nvar gf : f32 = (0.01 * gWebGPUUniformParams.u_K) * gWebGPUUniformParams.u_Gravity;\\ndx = gf * vx;\\ndy = gf * vy;\\nif (gWebGPUUniformParams.u_Clustering == 1.0) {var clusterIdx : i32 = i32(nodeAttributes.x);\\nvar center : vec4 = gWebGPUBuffer2.u_ClusterCenters[clusterIdx];\\nvar cvx : f32 = currentNode.x - center.x;\\nvar cvy : f32 = currentNode.y - center.y;\\nvar dist : f32 = std::sqrt((cvx * cvx) + (cvy * cvy)) + 0.01;\\nvar parma : f32 = (gWebGPUUniformParams.u_K * gWebGPUUniformParams.u_ClusterGravity) / dist;\\ndx = dx + parma * cvx;\\ndy = dy + parma * cvy;}\\nreturn vec2(dx, dy);}\\nfn calcAttractive(i : i32, currentNode : vec4) -> vec2 {var dx : f32 = 0.0;\\nvar dy : f32 = 0.0;\\nvar arr_offset : i32 = i32(std::floor(currentNode.z + 0.5));\\nvar length : i32 = i32(std::floor(currentNode.w + 0.5));\\nvar node_buffer : vec4;\\nfor (var p : i32 = 0; p < __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX; p = p + 1) {if (p >= length) {break;}\\nvar arr_idx : i32 = arr_offset + i32(p);\\nvar buf_offset : i32 = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = gWebGPUBuffer0.u_Data[i32(arr_idx / 4)];}\\nvar float_j : f32 = select(node_buffer.x, select(node_buffer.y, select(node_buffer.z, node_buffer.w, buf_offset == 2), buf_offset == 1), buf_offset == 0);\\nvar nextNode : vec4 = gWebGPUBuffer0.u_Data[i32(float_j)];\\nvar xDist : f32 = currentNode.x - nextNode.x;\\nvar yDist : f32 = currentNode.y - nextNode.y;\\nvar dist : f32 = std::sqrt((xDist * xDist) + (yDist * yDist)) + 0.01;\\nvar attractiveF : f32 = dist / gWebGPUUniformParams.u_K;\\nif (dist > 0.0) {dx = dx - xDist * attractiveF;\\ndy = dy - yDist * attractiveF;\\nif ((xDist == 0.0) && (yDist == 0.0)) {var sign : f32 = select(1.0, -1.0, i < i32(float_j));\\ndx = dx - std::sign * attractiveF;\\ndy = dy - std::sign * attractiveF;}}}\\nreturn vec2(dx, dy);}\\nfn main() -> void {var i : i32 = globalInvocationID.x;\\nvar currentNode : vec4 = gWebGPUBuffer0.u_Data[i];\\nvar dx : f32 = 0.0;\\nvar dy : f32 = 0.0;\\nif (i >= __DefineValuePlaceholder__VERTEX_COUNT) {gWebGPUBuffer0.u_Data[i] = currentNode;\\nreturn ;}\\nvar nodeAttributes : vec4 = gWebGPUBuffer1.u_AttributeArray[i];\\nif ((nodeAttributes.y != 0.0) && (nodeAttributes.z != 0.0)) {gWebGPUBuffer0.u_Data[i] = vec4(nodeAttributes.y, nodeAttributes.z, currentNode.z, currentNode.w);\\nreturn ;}\\nvar repulsive : vec2 = calcRepulsive(i, currentNode);\\ndx = dx + repulsive.x;\\ndy = dy + repulsive.y;\\nvar attractive : vec2 = calcAttractive(i, currentNode);\\ndx = dx + attractive.x;\\ndy = dy + attractive.y;\\nvar gravity : vec2 = calcGravity(currentNode, nodeAttributes);\\ndx = dx - gravity.x;\\ndy = dy - gravity.y;\\ndx = dx * gWebGPUUniformParams.u_Speed;\\ndy = dy * gWebGPUUniformParams.u_Speed;\\nvar distLength : f32 = std::sqrt((dx * dx) + (dy * dy));\\nif (distLength > 0.0) {var limitedDist : f32 = std::min(gWebGPUUniformParams.u_MaxDisplace * gWebGPUUniformParams.u_Speed, distLength);\\ngWebGPUBuffer0.u_Data[i] = vec4(currentNode.x + ((dx / distLength) * limitedDist), currentNode.y + ((dy / distLength) * limitedDist), currentNode.z, currentNode.w);}\\nreturn;}\\n\\nentry_point compute as \\"main\\" = main;\\n","GLSL450":"\\n\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\nivec3 globalInvocationID = ivec3(gl_GlobalInvocationID);\\nivec3 workGroupSize = ivec3(1,1,1);\\nivec3 workGroupID = ivec3(gl_WorkGroupID);\\nivec3 localInvocationID = ivec3(gl_LocalInvocationID);\\nivec3 numWorkGroups = ivec3(gl_NumWorkGroups);\\nint localInvocationIndex = int(gl_LocalInvocationIndex);\\n\\nlayout(std140, set = 0, binding = 0) uniform GWebGPUParams {\\n float u_K;\\n float u_K2;\\n vec2 u_Center;\\n float u_Gravity;\\n float u_ClusterGravity;\\n float u_Speed;\\n float u_MaxDisplace;\\n float u_Clustering;\\n} gWebGPUUniformParams;\\nlayout(std430, set = 0, binding = 1) buffer GWebGPUBuffer0 {\\n vec4 u_Data[];\\n} gWebGPUBuffer0;\\n\\nlayout(std430, set = 0, binding = 2) buffer readonly GWebGPUBuffer1 {\\n vec4 u_AttributeArray[];\\n} gWebGPUBuffer1;\\n\\nlayout(std430, set = 0, binding = 3) buffer readonly GWebGPUBuffer2 {\\n vec4 u_ClusterCenters[];\\n} gWebGPUBuffer2;\\n\\n\\n\\n#define MAX_EDGE_PER_VERTEX __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\nlayout (\\n local_size_x = 1,\\n local_size_y = 1,\\n local_size_z = 1\\n) in;\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nvec2 calcRepulsive(int i, vec4 currentNode) {float dx = 0.0;\\nfloat dy = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {if (i != j) {vec4 nextNode = gWebGPUBuffer0.u_Data[j];\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = ((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat param = gWebGPUUniformParams.u_K2 / dist;\\nif (dist > 0.0) {dx += param * xDist;\\ndy += param * yDist;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < j) ? (1.0) : (-1.0);\\ndx += param * sign;\\ndy += param * sign;}}}}\\nreturn vec2(dx, dy);}\\nvec2 calcGravity(vec4 currentNode, vec4 nodeAttributes) {float dx = 0.0;\\nfloat dy = 0.0;\\nfloat vx = currentNode.x - gWebGPUUniformParams.u_Center.x;\\nfloat vy = currentNode.y - gWebGPUUniformParams.u_Center.y;\\nfloat gf = (0.01 * gWebGPUUniformParams.u_K) * gWebGPUUniformParams.u_Gravity;\\ndx = gf * vx;\\ndy = gf * vy;\\nif (gWebGPUUniformParams.u_Clustering == 1.0) {int clusterIdx = int(nodeAttributes.x);\\nvec4 center = gWebGPUBuffer2.u_ClusterCenters[clusterIdx];\\nfloat cvx = currentNode.x - center.x;\\nfloat cvy = currentNode.y - center.y;\\nfloat dist = sqrt((cvx * cvx) + (cvy * cvy)) + 0.01;\\nfloat parma = (gWebGPUUniformParams.u_K * gWebGPUUniformParams.u_ClusterGravity) / dist;\\ndx += parma * cvx;\\ndy += parma * cvy;}\\nreturn vec2(dx, dy);}\\nvec2 calcAttractive(int i, vec4 currentNode) {float dx = 0.0;\\nfloat dy = 0.0;\\nint arr_offset = int(floor(currentNode.z + 0.5));\\nint length = int(floor(currentNode.w + 0.5));\\nvec4 node_buffer;\\nfor (int p = 0; p < MAX_EDGE_PER_VERTEX; p++) {if (p >= length) {break;}\\nint arr_idx = arr_offset + int(p);\\nint buf_offset = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = gWebGPUBuffer0.u_Data[int(arr_idx / 4)];}\\nfloat float_j = (buf_offset == 0) ? (node_buffer.x) : ((buf_offset == 1) ? (node_buffer.y) : ((buf_offset == 2) ? (node_buffer.z) : (node_buffer.w)));\\nvec4 nextNode = gWebGPUBuffer0.u_Data[int(float_j)];\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = sqrt((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat attractiveF = dist / gWebGPUUniformParams.u_K;\\nif (dist > 0.0) {dx -= xDist * attractiveF;\\ndy -= yDist * attractiveF;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < int(float_j)) ? (1.0) : (-1.0);\\ndx -= sign * attractiveF;\\ndy -= sign * attractiveF;}}}\\nreturn vec2(dx, dy);}\\nvoid main() {int i = globalInvocationID.x;\\nvec4 currentNode = gWebGPUBuffer0.u_Data[i];\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nif (i >= VERTEX_COUNT) {gWebGPUBuffer0.u_Data[i] = currentNode;\\nreturn ;}\\nvec4 nodeAttributes = gWebGPUBuffer1.u_AttributeArray[i];\\nif ((nodeAttributes.y != 0.0) && (nodeAttributes.z != 0.0)) {gWebGPUBuffer0.u_Data[i] = vec4(nodeAttributes.y, nodeAttributes.z, currentNode.z, currentNode.w);\\nreturn ;}\\nvec2 repulsive = calcRepulsive(i, currentNode);\\ndx += repulsive.x;\\ndy += repulsive.y;\\nvec2 attractive = calcAttractive(i, currentNode);\\ndx += attractive.x;\\ndy += attractive.y;\\nvec2 gravity = calcGravity(currentNode, nodeAttributes);\\ndx -= gravity.x;\\ndy -= gravity.y;\\ndx *= gWebGPUUniformParams.u_Speed;\\ndy *= gWebGPUUniformParams.u_Speed;\\nfloat distLength = sqrt((dx * dx) + (dy * dy));\\nif (distLength > 0.0) {float limitedDist = min(gWebGPUUniformParams.u_MaxDisplace * gWebGPUUniformParams.u_Speed, distLength);\\ngWebGPUBuffer0.u_Data[i] = vec4(currentNode.x + ((dx / distLength) * limitedDist), currentNode.y + ((dy / distLength) * limitedDist), currentNode.z, currentNode.w);}}\\n","GLSL100":"\\n\\nfloat epsilon = 0.00001;\\nvec2 addrTranslation_1Dto2D(float address1D, vec2 texSize) {\\n vec2 conv_const = vec2(1.0 / texSize.x, 1.0 / (texSize.x * texSize.y));\\n vec2 normAddr2D = float(address1D) * conv_const;\\n return vec2(fract(normAddr2D.x + epsilon), normAddr2D.y);\\n}\\n\\nvoid barrier() {}\\n \\n\\nuniform vec2 u_OutputTextureSize;\\nuniform int u_OutputTexelCount;\\nvarying vec2 v_TexCoord;\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\n#define MAX_EDGE_PER_VERTEX __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n\\nuniform sampler2D u_Data;\\nuniform vec2 u_DataSize;\\nvec4 getDatau_Data(vec2 address2D) {\\n return vec4(texture2D(u_Data, address2D).rgba);\\n}\\nvec4 getDatau_Data(float address1D) {\\n return getDatau_Data(addrTranslation_1Dto2D(address1D, u_DataSize));\\n}\\nvec4 getDatau_Data(int address1D) {\\n return getDatau_Data(float(address1D));\\n}\\nuniform float u_K;\\nuniform float u_K2;\\nuniform vec2 u_Center;\\nuniform float u_Gravity;\\nuniform float u_ClusterGravity;\\nuniform float u_Speed;\\nuniform float u_MaxDisplace;\\nuniform float u_Clustering;\\nuniform sampler2D u_AttributeArray;\\nuniform vec2 u_AttributeArraySize;\\nvec4 getDatau_AttributeArray(vec2 address2D) {\\n return vec4(texture2D(u_AttributeArray, address2D).rgba);\\n}\\nvec4 getDatau_AttributeArray(float address1D) {\\n return getDatau_AttributeArray(addrTranslation_1Dto2D(address1D, u_AttributeArraySize));\\n}\\nvec4 getDatau_AttributeArray(int address1D) {\\n return getDatau_AttributeArray(float(address1D));\\n}\\nuniform sampler2D u_ClusterCenters;\\nuniform vec2 u_ClusterCentersSize;\\nvec4 getDatau_ClusterCenters(vec2 address2D) {\\n return vec4(texture2D(u_ClusterCenters, address2D).rgba);\\n}\\nvec4 getDatau_ClusterCenters(float address1D) {\\n return getDatau_ClusterCenters(addrTranslation_1Dto2D(address1D, u_ClusterCentersSize));\\n}\\nvec4 getDatau_ClusterCenters(int address1D) {\\n return getDatau_ClusterCenters(float(address1D));\\n}\\nvec2 calcRepulsive(int i, vec4 currentNode) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {if (i != j) {vec4 nextNode = getDatau_Data(j);\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = ((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat param = u_K2 / dist;\\nif (dist > 0.0) {dx += param * xDist;\\ndy += param * yDist;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < j) ? (1.0) : (-1.0);\\ndx += param * sign;\\ndy += param * sign;}}}}\\nreturn vec2(dx, dy);}\\nvec2 calcGravity(vec4 currentNode, vec4 nodeAttributes) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nfloat vx = currentNode.x - u_Center.x;\\nfloat vy = currentNode.y - u_Center.y;\\nfloat gf = (0.01 * u_K) * u_Gravity;\\ndx = gf * vx;\\ndy = gf * vy;\\nif (u_Clustering == 1.0) {int clusterIdx = int(nodeAttributes.x);\\nvec4 center = getDatau_ClusterCenters(clusterIdx);\\nfloat cvx = currentNode.x - center.x;\\nfloat cvy = currentNode.y - center.y;\\nfloat dist = sqrt((cvx * cvx) + (cvy * cvy)) + 0.01;\\nfloat parma = (u_K * u_ClusterGravity) / dist;\\ndx += parma * cvx;\\ndy += parma * cvy;}\\nreturn vec2(dx, dy);}\\nvec2 calcAttractive(int i, vec4 currentNode) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nint arr_offset = int(floor(currentNode.z + 0.5));\\nint length = int(floor(currentNode.w + 0.5));\\nvec4 node_buffer;\\nfor (int p = 0; p < MAX_EDGE_PER_VERTEX; p++) {if (p >= length) {break;}\\nint arr_idx = arr_offset + int(p);\\nint buf_offset = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = getDatau_Data(int(arr_idx / 4));}\\nfloat float_j = (buf_offset == 0) ? (node_buffer.x) : ((buf_offset == 1) ? (node_buffer.y) : ((buf_offset == 2) ? (node_buffer.z) : (node_buffer.w)));\\nvec4 nextNode = getDatau_Data(int(float_j));\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = sqrt((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat attractiveF = dist / u_K;\\nif (dist > 0.0) {dx -= xDist * attractiveF;\\ndy -= yDist * attractiveF;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < int(float_j)) ? (1.0) : (-1.0);\\ndx -= sign * attractiveF;\\ndy -= sign * attractiveF;}}}\\nreturn vec2(dx, dy);}\\nvoid main() {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nint i = globalInvocationID.x;\\nvec4 currentNode = getDatau_Data(i);\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nif (i >= VERTEX_COUNT) {gl_FragColor = vec4(currentNode);\\nreturn ;}\\nvec4 nodeAttributes = getDatau_AttributeArray(i);\\nif ((nodeAttributes.y != 0.0) && (nodeAttributes.z != 0.0)) {gl_FragColor = vec4(vec4(nodeAttributes.y, nodeAttributes.z, currentNode.z, currentNode.w));\\nreturn ;}\\nvec2 repulsive = calcRepulsive(i, currentNode);\\ndx += repulsive.x;\\ndy += repulsive.y;\\nvec2 attractive = calcAttractive(i, currentNode);\\ndx += attractive.x;\\ndy += attractive.y;\\nvec2 gravity = calcGravity(currentNode, nodeAttributes);\\ndx -= gravity.x;\\ndy -= gravity.y;\\ndx *= u_Speed;\\ndy *= u_Speed;\\nfloat distLength = sqrt((dx * dx) + (dy * dy));\\nif (distLength > 0.0) {float limitedDist = min(u_MaxDisplace * u_Speed, distLength);\\ngl_FragColor = vec4(vec4(currentNode.x + ((dx / distLength) * limitedDist), currentNode.y + ((dy / distLength) * limitedDist), currentNode.z, currentNode.w));}if (gWebGPUDebug) {\\n gl_FragColor = gWebGPUDebugOutput;\\n}}\\n"},"context":{"name":"","dispatch":[1,1,1],"threadGroupSize":[1,1,1],"maxIteration":1,"defines":[{"name":"MAX_EDGE_PER_VERTEX","type":"Float","runtime":true},{"name":"VERTEX_COUNT","type":"Float","runtime":true}],"uniforms":[{"name":"u_Data","type":"vec4[]","storageClass":"StorageBuffer","readonly":false,"writeonly":false,"size":[1,1]},{"name":"u_K","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_K2","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_Center","type":"vec2","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_Gravity","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_ClusterGravity","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_Speed","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_MaxDisplace","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_Clustering","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_AttributeArray","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_ClusterCenters","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]}],"globalDeclarations":[],"output":{"name":"u_Data","size":[1,1],"length":1},"needPingpong":true}}`; -var clusterBundle = `{"shaders":{"WGSL":"import \\"GLSL.std.450\\" as std;\\n\\n\\n# var gWebGPUDebug : bool = false;\\n# var gWebGPUDebugOutput : vec4 = vec4(0.0);\\n\\n[[builtin global_invocation_id]] var globalInvocationID : vec3;\\n# [[builtin work_group_size]] var workGroupSize : vec3;\\n# [[builtin work_group_id]] var workGroupID : vec3;\\n[[builtin local_invocation_id]] var localInvocationID : vec3;\\n# [[builtin num_work_groups]] var numWorkGroups : vec3;\\n[[builtin local_invocation_idx]] var localInvocationIndex : u32;\\n\\n\\ntype GWebGPUBuffer0 = [[block]] struct {\\n [[offset 0]] u_Data : [[stride 16]] array>;\\n};\\n[[binding 0, set 0]] var gWebGPUBuffer0 : GWebGPUBuffer0;\\ntype GWebGPUBuffer1 = [[block]] struct {\\n [[offset 0]] u_NodeAttributes : [[stride 16]] array>;\\n};\\n[[binding 1, set 0]] var gWebGPUBuffer1 : GWebGPUBuffer1;\\ntype GWebGPUBuffer2 = [[block]] struct {\\n [[offset 0]] u_ClusterCenters : [[stride 16]] array>;\\n};\\n[[binding 2, set 0]] var gWebGPUBuffer2 : GWebGPUBuffer2;\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nfn main() -> void {var i : i32 = globalInvocationID.x;\\nvar center : vec4 = gWebGPUBuffer2.u_ClusterCenters[i];\\nvar sumx : f32 = 0.0;\\nvar sumy : f32 = 0.0;\\nvar count : f32 = 0.0;\\nfor (var j : i32 = 0; j < __DefineValuePlaceholder__VERTEX_COUNT; j = j + 1) {var attributes : vec4 = gWebGPUBuffer1.u_NodeAttributes[j];\\nvar clusterIdx : i32 = i32(attributes.x);\\nvar vertex : vec4 = gWebGPUBuffer0.u_Data[j];\\nif (clusterIdx == i) {sumx = sumx + vertex.x;\\nsumy = sumy + vertex.y;\\ncount = count + 1.0;}}\\ngWebGPUBuffer2.u_ClusterCenters[i] = vec4(sumx / count, sumy / count, count, i);\\nreturn;}\\n\\nentry_point compute as \\"main\\" = main;\\n","GLSL450":"\\n\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\nivec3 globalInvocationID = ivec3(gl_GlobalInvocationID);\\nivec3 workGroupSize = ivec3(1,1,1);\\nivec3 workGroupID = ivec3(gl_WorkGroupID);\\nivec3 localInvocationID = ivec3(gl_LocalInvocationID);\\nivec3 numWorkGroups = ivec3(gl_NumWorkGroups);\\nint localInvocationIndex = int(gl_LocalInvocationIndex);\\n\\n\\nlayout(std430, set = 0, binding = 0) buffer readonly GWebGPUBuffer0 {\\n vec4 u_Data[];\\n} gWebGPUBuffer0;\\n\\nlayout(std430, set = 0, binding = 1) buffer readonly GWebGPUBuffer1 {\\n vec4 u_NodeAttributes[];\\n} gWebGPUBuffer1;\\n\\nlayout(std430, set = 0, binding = 2) buffer GWebGPUBuffer2 {\\n vec4 u_ClusterCenters[];\\n} gWebGPUBuffer2;\\n\\n\\n\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n#define CLUSTER_COUNT __DefineValuePlaceholder__CLUSTER_COUNT\\nlayout (\\n local_size_x = 1,\\n local_size_y = 1,\\n local_size_z = 1\\n) in;\\n\\n\\n\\nvoid main() {int i = globalInvocationID.x;\\nvec4 center = gWebGPUBuffer2.u_ClusterCenters[i];\\nfloat sumx = 0.0;\\nfloat sumy = 0.0;\\nfloat count = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {vec4 attributes = gWebGPUBuffer1.u_NodeAttributes[j];\\nint clusterIdx = int(attributes.x);\\nvec4 vertex = gWebGPUBuffer0.u_Data[j];\\nif (clusterIdx == i) {sumx += vertex.x;\\nsumy += vertex.y;\\ncount += 1.0;}}\\ngWebGPUBuffer2.u_ClusterCenters[i] = vec4(sumx / count, sumy / count, count, i);}\\n","GLSL100":"\\n\\nfloat epsilon = 0.00001;\\nvec2 addrTranslation_1Dto2D(float address1D, vec2 texSize) {\\n vec2 conv_const = vec2(1.0 / texSize.x, 1.0 / (texSize.x * texSize.y));\\n vec2 normAddr2D = float(address1D) * conv_const;\\n return vec2(fract(normAddr2D.x + epsilon), normAddr2D.y);\\n}\\n\\nvoid barrier() {}\\n \\n\\nuniform vec2 u_OutputTextureSize;\\nuniform int u_OutputTexelCount;\\nvarying vec2 v_TexCoord;\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n#define CLUSTER_COUNT __DefineValuePlaceholder__CLUSTER_COUNT\\n\\nuniform sampler2D u_Data;\\nuniform vec2 u_DataSize;\\nvec4 getDatau_Data(vec2 address2D) {\\n return vec4(texture2D(u_Data, address2D).rgba);\\n}\\nvec4 getDatau_Data(float address1D) {\\n return getDatau_Data(addrTranslation_1Dto2D(address1D, u_DataSize));\\n}\\nvec4 getDatau_Data(int address1D) {\\n return getDatau_Data(float(address1D));\\n}\\nuniform sampler2D u_NodeAttributes;\\nuniform vec2 u_NodeAttributesSize;\\nvec4 getDatau_NodeAttributes(vec2 address2D) {\\n return vec4(texture2D(u_NodeAttributes, address2D).rgba);\\n}\\nvec4 getDatau_NodeAttributes(float address1D) {\\n return getDatau_NodeAttributes(addrTranslation_1Dto2D(address1D, u_NodeAttributesSize));\\n}\\nvec4 getDatau_NodeAttributes(int address1D) {\\n return getDatau_NodeAttributes(float(address1D));\\n}\\nuniform sampler2D u_ClusterCenters;\\nuniform vec2 u_ClusterCentersSize;\\nvec4 getDatau_ClusterCenters(vec2 address2D) {\\n return vec4(texture2D(u_ClusterCenters, address2D).rgba);\\n}\\nvec4 getDatau_ClusterCenters(float address1D) {\\n return getDatau_ClusterCenters(addrTranslation_1Dto2D(address1D, u_ClusterCentersSize));\\n}\\nvec4 getDatau_ClusterCenters(int address1D) {\\n return getDatau_ClusterCenters(float(address1D));\\n}\\nvoid main() {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nint i = globalInvocationID.x;\\nvec4 center = getDatau_ClusterCenters(i);\\nfloat sumx = 0.0;\\nfloat sumy = 0.0;\\nfloat count = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {vec4 attributes = getDatau_NodeAttributes(j);\\nint clusterIdx = int(attributes.x);\\nvec4 vertex = getDatau_Data(j);\\nif (clusterIdx == i) {sumx += vertex.x;\\nsumy += vertex.y;\\ncount += 1.0;}}\\ngl_FragColor = vec4(vec4(sumx / count, sumy / count, count, i));if (gWebGPUDebug) {\\n gl_FragColor = gWebGPUDebugOutput;\\n}}\\n"},"context":{"name":"","dispatch":[1,1,1],"threadGroupSize":[1,1,1],"maxIteration":1,"defines":[{"name":"VERTEX_COUNT","type":"Float","runtime":true},{"name":"CLUSTER_COUNT","type":"Float","runtime":true}],"uniforms":[{"name":"u_Data","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_NodeAttributes","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_ClusterCenters","type":"vec4[]","storageClass":"StorageBuffer","readonly":false,"writeonly":false,"size":[1,1]}],"globalDeclarations":[],"output":{"name":"u_ClusterCenters","size":[1,1],"length":1},"needPingpong":true}}`; + gl_Position = projectionMatrix * modelViewMatrix + * vec4(position * size + offset, 0.0, 1.0); -// node_modules/@antv/layout/es/layout/gpu/fruchterman.js -var __awaiter4 = function(thisArg, _arguments, P4, generator) { - function adopt(value2) { - return value2 instanceof P4 ? value2 : new P4(function(resolve) { - resolve(value2); - }); + setPickingColor(a_PickingColor); +}`,ihe=["circle","triangle","square","pentagon","hexagon","octogon","hexagram","rhombus","vesica"],iCt=(YSt=(0,rv.injectable)(),XSt=(0,rv.inject)(Qt.Systems),qSt=(0,rv.named)(Qt.MaterialSystem),KSt=(0,rv.inject)(Qt.Systems),ZSt=(0,rv.named)(Qt.GeometrySystem),$St=(0,rv.inject)(Qt.ShaderModuleService),YSt(QSt=(YM=(rCt=function(r){ui(t,r);var e=the(t);function t(){var n;se(this,t);for(var i=arguments.length,a=new Array(i),o=0;o=r.length?{done:!0}:{done:!1,value:r[n++]}},e:function(u){throw u},f:i}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a=!0,o=!1,s;return{s:function(){t=r[Symbol.iterator]()},n:function(){var u=t.next();return a=u.done,u},e:function(u){o=!0,s=u},f:function(){try{!a&&t.return!=null&&t.return()}finally{if(o)throw s}}}}function ahe(r,e){if(!!r){if(typeof r=="string")return vCt(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);if(t==="Object"&&r.constructor&&(t=r.constructor.name),t==="Map"||t==="Set")return Array.from(r);if(t==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return vCt(r,e)}}function vCt(r,e){(e==null||e>r.length)&&(e=r.length);for(var t=0,n=new Array(e);t0&&arguments[0]!==void 0?arguments[0]:{},n=nY(),i=navigator.gpu?wY:yY;n.isBound(Qt.RenderEngine)||n.bind(Qt.RenderEngine).to(i).inSingletonScope(),n.bind(GY).toSelf(),n.bind(xN).toSelf(),n.bind(Tu).toSelf(),n.bind(VY).toSelf(),n.bind(pN).toSelf(),n.bind(zY).toSelf(),n.bind(r).toSelf(),n.bind(kN).toSelf(),n.bind(jY).toSelf(),n.bind(Qt.Geometry).to(E1t).whenTargetNamed($l.BOX),n.bind(Qt.Geometry).to(B1t).whenTargetNamed($l.SPHERE),n.bind(Qt.Geometry).to(k1t).whenTargetNamed($l.PLANE),n.bind(Qt.Geometry).to(L1t).whenTargetNamed($l.MERGED),n.bind(Qt.Material).to(Y1t).whenTargetNamed(kM.BASIC),n.bind(Qt.Renderable).to(iCt).whenTargetNamed(Tu.POINT),n.bind(Qt.Renderable).to(VSt).whenTargetNamed(Tu.LINE),n.bind(Qt.Renderable).to(i_t).whenTargetNamed(Tu.GRID);var a=n.get(r);return a.setContainer(n),a.setConfig(t),a}}]),r}(),VCt),WCt=Ze(YY.prototype,"configService",[UCt],{configurable:!0,enumerable:!0,writable:!0,initializer:null}),YY))||jCt);var lx=(r,e)=>{let t;return r?je(r)?t=()=>r:t=r:t=()=>e||1,t},XCt=(r,e)=>{let t=[],n=[],i={},a=0;for(a=0;a{let i=[],a=[],o={},s=0;for(s=0;s{let t=[],n=r.length,i={};return e.forEach(a=>{r.forEach((o,s)=>{if(i[a[o]]===void 0&&(i[a[o]]=Object.keys(i).length),t.push(i[a[o]]),s===n-1)for(;t.length%4!=0;)t.push(0)})}),{array:new Float32Array(t),count:Object.keys(i).length}},XY=r=>{let e=[],t=r.length,n=r[0].length;for(let i=0;i{if(e.push(a[i]),o===t-1)for(;e.length%4!=0;)e.push(0)});return new Float32Array(e)};var ZCt='{"shaders":{"WGSL":"import \\"GLSL.std.450\\" as std;\\n\\n\\n# var gWebGPUDebug : bool = false;\\n# var gWebGPUDebugOutput : vec4 = vec4(0.0);\\n\\n[[builtin global_invocation_id]] var globalInvocationID : vec3;\\n# [[builtin work_group_size]] var workGroupSize : vec3;\\n# [[builtin work_group_id]] var workGroupID : vec3;\\n[[builtin local_invocation_id]] var localInvocationID : vec3;\\n# [[builtin num_work_groups]] var numWorkGroups : vec3;\\n[[builtin local_invocation_idx]] var localInvocationIndex : u32;\\n\\ntype GWebGPUParams = [[block]] struct {\\n [[offset 0]] u_K : f32;\\n [[offset 4]] u_K2 : f32;\\n [[offset 8]] u_Center : vec2;\\n [[offset 16]] u_Gravity : f32;\\n [[offset 20]] u_ClusterGravity : f32;\\n [[offset 24]] u_Speed : f32;\\n [[offset 28]] u_MaxDisplace : f32;\\n [[offset 32]] u_Clustering : f32;\\n};\\n[[binding 0, set 0]] var gWebGPUUniformParams : GWebGPUParams;\\ntype GWebGPUBuffer0 = [[block]] struct {\\n [[offset 0]] u_Data : [[stride 16]] array>;\\n};\\n[[binding 1, set 0]] var gWebGPUBuffer0 : GWebGPUBuffer0;\\ntype GWebGPUBuffer1 = [[block]] struct {\\n [[offset 0]] u_AttributeArray : [[stride 16]] array>;\\n};\\n[[binding 2, set 0]] var gWebGPUBuffer1 : GWebGPUBuffer1;\\ntype GWebGPUBuffer2 = [[block]] struct {\\n [[offset 0]] u_ClusterCenters : [[stride 16]] array>;\\n};\\n[[binding 3, set 0]] var gWebGPUBuffer2 : GWebGPUBuffer2;\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nfn calcRepulsive(i : i32, currentNode : vec4) -> vec2 {var dx : f32 = 0.0;\\nvar dy : f32 = 0.0;\\nfor (var j : i32 = 0; j < __DefineValuePlaceholder__VERTEX_COUNT; j = j + 1) {if (i != j) {var nextNode : vec4 = gWebGPUBuffer0.u_Data[j];\\nvar xDist : f32 = currentNode.x - nextNode.x;\\nvar yDist : f32 = currentNode.y - nextNode.y;\\nvar dist : f32 = ((xDist * xDist) + (yDist * yDist)) + 0.01;\\nvar param : f32 = gWebGPUUniformParams.u_K2 / dist;\\nif (dist > 0.0) {dx = dx + param * xDist;\\ndy = dy + param * yDist;\\nif ((xDist == 0.0) && (yDist == 0.0)) {var sign : f32 = select(1.0, -1.0, i < j);\\ndx = dx + param * std::sign;\\ndy = dy + param * std::sign;}}}}\\nreturn vec2(dx, dy);}\\nfn calcGravity(currentNode : vec4, nodeAttributes : vec4) -> vec2 {var dx : f32 = 0.0;\\nvar dy : f32 = 0.0;\\nvar vx : f32 = currentNode.x - gWebGPUUniformParams.u_Center.x;\\nvar vy : f32 = currentNode.y - gWebGPUUniformParams.u_Center.y;\\nvar gf : f32 = (0.01 * gWebGPUUniformParams.u_K) * gWebGPUUniformParams.u_Gravity;\\ndx = gf * vx;\\ndy = gf * vy;\\nif (gWebGPUUniformParams.u_Clustering == 1.0) {var clusterIdx : i32 = i32(nodeAttributes.x);\\nvar center : vec4 = gWebGPUBuffer2.u_ClusterCenters[clusterIdx];\\nvar cvx : f32 = currentNode.x - center.x;\\nvar cvy : f32 = currentNode.y - center.y;\\nvar dist : f32 = std::sqrt((cvx * cvx) + (cvy * cvy)) + 0.01;\\nvar parma : f32 = (gWebGPUUniformParams.u_K * gWebGPUUniformParams.u_ClusterGravity) / dist;\\ndx = dx + parma * cvx;\\ndy = dy + parma * cvy;}\\nreturn vec2(dx, dy);}\\nfn calcAttractive(i : i32, currentNode : vec4) -> vec2 {var dx : f32 = 0.0;\\nvar dy : f32 = 0.0;\\nvar arr_offset : i32 = i32(std::floor(currentNode.z + 0.5));\\nvar length : i32 = i32(std::floor(currentNode.w + 0.5));\\nvar node_buffer : vec4;\\nfor (var p : i32 = 0; p < __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX; p = p + 1) {if (p >= length) {break;}\\nvar arr_idx : i32 = arr_offset + i32(p);\\nvar buf_offset : i32 = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = gWebGPUBuffer0.u_Data[i32(arr_idx / 4)];}\\nvar float_j : f32 = select(node_buffer.x, select(node_buffer.y, select(node_buffer.z, node_buffer.w, buf_offset == 2), buf_offset == 1), buf_offset == 0);\\nvar nextNode : vec4 = gWebGPUBuffer0.u_Data[i32(float_j)];\\nvar xDist : f32 = currentNode.x - nextNode.x;\\nvar yDist : f32 = currentNode.y - nextNode.y;\\nvar dist : f32 = std::sqrt((xDist * xDist) + (yDist * yDist)) + 0.01;\\nvar attractiveF : f32 = dist / gWebGPUUniformParams.u_K;\\nif (dist > 0.0) {dx = dx - xDist * attractiveF;\\ndy = dy - yDist * attractiveF;\\nif ((xDist == 0.0) && (yDist == 0.0)) {var sign : f32 = select(1.0, -1.0, i < i32(float_j));\\ndx = dx - std::sign * attractiveF;\\ndy = dy - std::sign * attractiveF;}}}\\nreturn vec2(dx, dy);}\\nfn main() -> void {var i : i32 = globalInvocationID.x;\\nvar currentNode : vec4 = gWebGPUBuffer0.u_Data[i];\\nvar dx : f32 = 0.0;\\nvar dy : f32 = 0.0;\\nif (i >= __DefineValuePlaceholder__VERTEX_COUNT) {gWebGPUBuffer0.u_Data[i] = currentNode;\\nreturn ;}\\nvar nodeAttributes : vec4 = gWebGPUBuffer1.u_AttributeArray[i];\\nif ((nodeAttributes.y != 0.0) && (nodeAttributes.z != 0.0)) {gWebGPUBuffer0.u_Data[i] = vec4(nodeAttributes.y, nodeAttributes.z, currentNode.z, currentNode.w);\\nreturn ;}\\nvar repulsive : vec2 = calcRepulsive(i, currentNode);\\ndx = dx + repulsive.x;\\ndy = dy + repulsive.y;\\nvar attractive : vec2 = calcAttractive(i, currentNode);\\ndx = dx + attractive.x;\\ndy = dy + attractive.y;\\nvar gravity : vec2 = calcGravity(currentNode, nodeAttributes);\\ndx = dx - gravity.x;\\ndy = dy - gravity.y;\\ndx = dx * gWebGPUUniformParams.u_Speed;\\ndy = dy * gWebGPUUniformParams.u_Speed;\\nvar distLength : f32 = std::sqrt((dx * dx) + (dy * dy));\\nif (distLength > 0.0) {var limitedDist : f32 = std::min(gWebGPUUniformParams.u_MaxDisplace * gWebGPUUniformParams.u_Speed, distLength);\\ngWebGPUBuffer0.u_Data[i] = vec4(currentNode.x + ((dx / distLength) * limitedDist), currentNode.y + ((dy / distLength) * limitedDist), currentNode.z, currentNode.w);}\\nreturn;}\\n\\nentry_point compute as \\"main\\" = main;\\n","GLSL450":"\\n\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\nivec3 globalInvocationID = ivec3(gl_GlobalInvocationID);\\nivec3 workGroupSize = ivec3(1,1,1);\\nivec3 workGroupID = ivec3(gl_WorkGroupID);\\nivec3 localInvocationID = ivec3(gl_LocalInvocationID);\\nivec3 numWorkGroups = ivec3(gl_NumWorkGroups);\\nint localInvocationIndex = int(gl_LocalInvocationIndex);\\n\\nlayout(std140, set = 0, binding = 0) uniform GWebGPUParams {\\n float u_K;\\n float u_K2;\\n vec2 u_Center;\\n float u_Gravity;\\n float u_ClusterGravity;\\n float u_Speed;\\n float u_MaxDisplace;\\n float u_Clustering;\\n} gWebGPUUniformParams;\\nlayout(std430, set = 0, binding = 1) buffer GWebGPUBuffer0 {\\n vec4 u_Data[];\\n} gWebGPUBuffer0;\\n\\nlayout(std430, set = 0, binding = 2) buffer readonly GWebGPUBuffer1 {\\n vec4 u_AttributeArray[];\\n} gWebGPUBuffer1;\\n\\nlayout(std430, set = 0, binding = 3) buffer readonly GWebGPUBuffer2 {\\n vec4 u_ClusterCenters[];\\n} gWebGPUBuffer2;\\n\\n\\n\\n#define MAX_EDGE_PER_VERTEX __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\nlayout (\\n local_size_x = 1,\\n local_size_y = 1,\\n local_size_z = 1\\n) in;\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nvec2 calcRepulsive(int i, vec4 currentNode) {float dx = 0.0;\\nfloat dy = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {if (i != j) {vec4 nextNode = gWebGPUBuffer0.u_Data[j];\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = ((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat param = gWebGPUUniformParams.u_K2 / dist;\\nif (dist > 0.0) {dx += param * xDist;\\ndy += param * yDist;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < j) ? (1.0) : (-1.0);\\ndx += param * sign;\\ndy += param * sign;}}}}\\nreturn vec2(dx, dy);}\\nvec2 calcGravity(vec4 currentNode, vec4 nodeAttributes) {float dx = 0.0;\\nfloat dy = 0.0;\\nfloat vx = currentNode.x - gWebGPUUniformParams.u_Center.x;\\nfloat vy = currentNode.y - gWebGPUUniformParams.u_Center.y;\\nfloat gf = (0.01 * gWebGPUUniformParams.u_K) * gWebGPUUniformParams.u_Gravity;\\ndx = gf * vx;\\ndy = gf * vy;\\nif (gWebGPUUniformParams.u_Clustering == 1.0) {int clusterIdx = int(nodeAttributes.x);\\nvec4 center = gWebGPUBuffer2.u_ClusterCenters[clusterIdx];\\nfloat cvx = currentNode.x - center.x;\\nfloat cvy = currentNode.y - center.y;\\nfloat dist = sqrt((cvx * cvx) + (cvy * cvy)) + 0.01;\\nfloat parma = (gWebGPUUniformParams.u_K * gWebGPUUniformParams.u_ClusterGravity) / dist;\\ndx += parma * cvx;\\ndy += parma * cvy;}\\nreturn vec2(dx, dy);}\\nvec2 calcAttractive(int i, vec4 currentNode) {float dx = 0.0;\\nfloat dy = 0.0;\\nint arr_offset = int(floor(currentNode.z + 0.5));\\nint length = int(floor(currentNode.w + 0.5));\\nvec4 node_buffer;\\nfor (int p = 0; p < MAX_EDGE_PER_VERTEX; p++) {if (p >= length) {break;}\\nint arr_idx = arr_offset + int(p);\\nint buf_offset = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = gWebGPUBuffer0.u_Data[int(arr_idx / 4)];}\\nfloat float_j = (buf_offset == 0) ? (node_buffer.x) : ((buf_offset == 1) ? (node_buffer.y) : ((buf_offset == 2) ? (node_buffer.z) : (node_buffer.w)));\\nvec4 nextNode = gWebGPUBuffer0.u_Data[int(float_j)];\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = sqrt((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat attractiveF = dist / gWebGPUUniformParams.u_K;\\nif (dist > 0.0) {dx -= xDist * attractiveF;\\ndy -= yDist * attractiveF;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < int(float_j)) ? (1.0) : (-1.0);\\ndx -= sign * attractiveF;\\ndy -= sign * attractiveF;}}}\\nreturn vec2(dx, dy);}\\nvoid main() {int i = globalInvocationID.x;\\nvec4 currentNode = gWebGPUBuffer0.u_Data[i];\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nif (i >= VERTEX_COUNT) {gWebGPUBuffer0.u_Data[i] = currentNode;\\nreturn ;}\\nvec4 nodeAttributes = gWebGPUBuffer1.u_AttributeArray[i];\\nif ((nodeAttributes.y != 0.0) && (nodeAttributes.z != 0.0)) {gWebGPUBuffer0.u_Data[i] = vec4(nodeAttributes.y, nodeAttributes.z, currentNode.z, currentNode.w);\\nreturn ;}\\nvec2 repulsive = calcRepulsive(i, currentNode);\\ndx += repulsive.x;\\ndy += repulsive.y;\\nvec2 attractive = calcAttractive(i, currentNode);\\ndx += attractive.x;\\ndy += attractive.y;\\nvec2 gravity = calcGravity(currentNode, nodeAttributes);\\ndx -= gravity.x;\\ndy -= gravity.y;\\ndx *= gWebGPUUniformParams.u_Speed;\\ndy *= gWebGPUUniformParams.u_Speed;\\nfloat distLength = sqrt((dx * dx) + (dy * dy));\\nif (distLength > 0.0) {float limitedDist = min(gWebGPUUniformParams.u_MaxDisplace * gWebGPUUniformParams.u_Speed, distLength);\\ngWebGPUBuffer0.u_Data[i] = vec4(currentNode.x + ((dx / distLength) * limitedDist), currentNode.y + ((dy / distLength) * limitedDist), currentNode.z, currentNode.w);}}\\n","GLSL100":"\\n\\nfloat epsilon = 0.00001;\\nvec2 addrTranslation_1Dto2D(float address1D, vec2 texSize) {\\n vec2 conv_const = vec2(1.0 / texSize.x, 1.0 / (texSize.x * texSize.y));\\n vec2 normAddr2D = float(address1D) * conv_const;\\n return vec2(fract(normAddr2D.x + epsilon), normAddr2D.y);\\n}\\n\\nvoid barrier() {}\\n \\n\\nuniform vec2 u_OutputTextureSize;\\nuniform int u_OutputTexelCount;\\nvarying vec2 v_TexCoord;\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\n#define MAX_EDGE_PER_VERTEX __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n\\nuniform sampler2D u_Data;\\nuniform vec2 u_DataSize;\\nvec4 getDatau_Data(vec2 address2D) {\\n return vec4(texture2D(u_Data, address2D).rgba);\\n}\\nvec4 getDatau_Data(float address1D) {\\n return getDatau_Data(addrTranslation_1Dto2D(address1D, u_DataSize));\\n}\\nvec4 getDatau_Data(int address1D) {\\n return getDatau_Data(float(address1D));\\n}\\nuniform float u_K;\\nuniform float u_K2;\\nuniform vec2 u_Center;\\nuniform float u_Gravity;\\nuniform float u_ClusterGravity;\\nuniform float u_Speed;\\nuniform float u_MaxDisplace;\\nuniform float u_Clustering;\\nuniform sampler2D u_AttributeArray;\\nuniform vec2 u_AttributeArraySize;\\nvec4 getDatau_AttributeArray(vec2 address2D) {\\n return vec4(texture2D(u_AttributeArray, address2D).rgba);\\n}\\nvec4 getDatau_AttributeArray(float address1D) {\\n return getDatau_AttributeArray(addrTranslation_1Dto2D(address1D, u_AttributeArraySize));\\n}\\nvec4 getDatau_AttributeArray(int address1D) {\\n return getDatau_AttributeArray(float(address1D));\\n}\\nuniform sampler2D u_ClusterCenters;\\nuniform vec2 u_ClusterCentersSize;\\nvec4 getDatau_ClusterCenters(vec2 address2D) {\\n return vec4(texture2D(u_ClusterCenters, address2D).rgba);\\n}\\nvec4 getDatau_ClusterCenters(float address1D) {\\n return getDatau_ClusterCenters(addrTranslation_1Dto2D(address1D, u_ClusterCentersSize));\\n}\\nvec4 getDatau_ClusterCenters(int address1D) {\\n return getDatau_ClusterCenters(float(address1D));\\n}\\nvec2 calcRepulsive(int i, vec4 currentNode) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {if (i != j) {vec4 nextNode = getDatau_Data(j);\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = ((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat param = u_K2 / dist;\\nif (dist > 0.0) {dx += param * xDist;\\ndy += param * yDist;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < j) ? (1.0) : (-1.0);\\ndx += param * sign;\\ndy += param * sign;}}}}\\nreturn vec2(dx, dy);}\\nvec2 calcGravity(vec4 currentNode, vec4 nodeAttributes) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nfloat vx = currentNode.x - u_Center.x;\\nfloat vy = currentNode.y - u_Center.y;\\nfloat gf = (0.01 * u_K) * u_Gravity;\\ndx = gf * vx;\\ndy = gf * vy;\\nif (u_Clustering == 1.0) {int clusterIdx = int(nodeAttributes.x);\\nvec4 center = getDatau_ClusterCenters(clusterIdx);\\nfloat cvx = currentNode.x - center.x;\\nfloat cvy = currentNode.y - center.y;\\nfloat dist = sqrt((cvx * cvx) + (cvy * cvy)) + 0.01;\\nfloat parma = (u_K * u_ClusterGravity) / dist;\\ndx += parma * cvx;\\ndy += parma * cvy;}\\nreturn vec2(dx, dy);}\\nvec2 calcAttractive(int i, vec4 currentNode) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nint arr_offset = int(floor(currentNode.z + 0.5));\\nint length = int(floor(currentNode.w + 0.5));\\nvec4 node_buffer;\\nfor (int p = 0; p < MAX_EDGE_PER_VERTEX; p++) {if (p >= length) {break;}\\nint arr_idx = arr_offset + int(p);\\nint buf_offset = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = getDatau_Data(int(arr_idx / 4));}\\nfloat float_j = (buf_offset == 0) ? (node_buffer.x) : ((buf_offset == 1) ? (node_buffer.y) : ((buf_offset == 2) ? (node_buffer.z) : (node_buffer.w)));\\nvec4 nextNode = getDatau_Data(int(float_j));\\nfloat xDist = currentNode.x - nextNode.x;\\nfloat yDist = currentNode.y - nextNode.y;\\nfloat dist = sqrt((xDist * xDist) + (yDist * yDist)) + 0.01;\\nfloat attractiveF = dist / u_K;\\nif (dist > 0.0) {dx -= xDist * attractiveF;\\ndy -= yDist * attractiveF;\\nif ((xDist == 0.0) && (yDist == 0.0)) {float sign = (i < int(float_j)) ? (1.0) : (-1.0);\\ndx -= sign * attractiveF;\\ndy -= sign * attractiveF;}}}\\nreturn vec2(dx, dy);}\\nvoid main() {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nint i = globalInvocationID.x;\\nvec4 currentNode = getDatau_Data(i);\\nfloat dx = 0.0;\\nfloat dy = 0.0;\\nif (i >= VERTEX_COUNT) {gl_FragColor = vec4(currentNode);\\nreturn ;}\\nvec4 nodeAttributes = getDatau_AttributeArray(i);\\nif ((nodeAttributes.y != 0.0) && (nodeAttributes.z != 0.0)) {gl_FragColor = vec4(vec4(nodeAttributes.y, nodeAttributes.z, currentNode.z, currentNode.w));\\nreturn ;}\\nvec2 repulsive = calcRepulsive(i, currentNode);\\ndx += repulsive.x;\\ndy += repulsive.y;\\nvec2 attractive = calcAttractive(i, currentNode);\\ndx += attractive.x;\\ndy += attractive.y;\\nvec2 gravity = calcGravity(currentNode, nodeAttributes);\\ndx -= gravity.x;\\ndy -= gravity.y;\\ndx *= u_Speed;\\ndy *= u_Speed;\\nfloat distLength = sqrt((dx * dx) + (dy * dy));\\nif (distLength > 0.0) {float limitedDist = min(u_MaxDisplace * u_Speed, distLength);\\ngl_FragColor = vec4(vec4(currentNode.x + ((dx / distLength) * limitedDist), currentNode.y + ((dy / distLength) * limitedDist), currentNode.z, currentNode.w));}if (gWebGPUDebug) {\\n gl_FragColor = gWebGPUDebugOutput;\\n}}\\n"},"context":{"name":"","dispatch":[1,1,1],"threadGroupSize":[1,1,1],"maxIteration":1,"defines":[{"name":"MAX_EDGE_PER_VERTEX","type":"Float","runtime":true},{"name":"VERTEX_COUNT","type":"Float","runtime":true}],"uniforms":[{"name":"u_Data","type":"vec4[]","storageClass":"StorageBuffer","readonly":false,"writeonly":false,"size":[1,1]},{"name":"u_K","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_K2","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_Center","type":"vec2","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_Gravity","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_ClusterGravity","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_Speed","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_MaxDisplace","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_Clustering","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_AttributeArray","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_ClusterCenters","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]}],"globalDeclarations":[],"output":{"name":"u_Data","size":[1,1],"length":1},"needPingpong":true}}';var $Ct='{"shaders":{"WGSL":"import \\"GLSL.std.450\\" as std;\\n\\n\\n# var gWebGPUDebug : bool = false;\\n# var gWebGPUDebugOutput : vec4 = vec4(0.0);\\n\\n[[builtin global_invocation_id]] var globalInvocationID : vec3;\\n# [[builtin work_group_size]] var workGroupSize : vec3;\\n# [[builtin work_group_id]] var workGroupID : vec3;\\n[[builtin local_invocation_id]] var localInvocationID : vec3;\\n# [[builtin num_work_groups]] var numWorkGroups : vec3;\\n[[builtin local_invocation_idx]] var localInvocationIndex : u32;\\n\\n\\ntype GWebGPUBuffer0 = [[block]] struct {\\n [[offset 0]] u_Data : [[stride 16]] array>;\\n};\\n[[binding 0, set 0]] var gWebGPUBuffer0 : GWebGPUBuffer0;\\ntype GWebGPUBuffer1 = [[block]] struct {\\n [[offset 0]] u_NodeAttributes : [[stride 16]] array>;\\n};\\n[[binding 1, set 0]] var gWebGPUBuffer1 : GWebGPUBuffer1;\\ntype GWebGPUBuffer2 = [[block]] struct {\\n [[offset 0]] u_ClusterCenters : [[stride 16]] array>;\\n};\\n[[binding 2, set 0]] var gWebGPUBuffer2 : GWebGPUBuffer2;\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nfn main() -> void {var i : i32 = globalInvocationID.x;\\nvar center : vec4 = gWebGPUBuffer2.u_ClusterCenters[i];\\nvar sumx : f32 = 0.0;\\nvar sumy : f32 = 0.0;\\nvar count : f32 = 0.0;\\nfor (var j : i32 = 0; j < __DefineValuePlaceholder__VERTEX_COUNT; j = j + 1) {var attributes : vec4 = gWebGPUBuffer1.u_NodeAttributes[j];\\nvar clusterIdx : i32 = i32(attributes.x);\\nvar vertex : vec4 = gWebGPUBuffer0.u_Data[j];\\nif (clusterIdx == i) {sumx = sumx + vertex.x;\\nsumy = sumy + vertex.y;\\ncount = count + 1.0;}}\\ngWebGPUBuffer2.u_ClusterCenters[i] = vec4(sumx / count, sumy / count, count, i);\\nreturn;}\\n\\nentry_point compute as \\"main\\" = main;\\n","GLSL450":"\\n\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\nivec3 globalInvocationID = ivec3(gl_GlobalInvocationID);\\nivec3 workGroupSize = ivec3(1,1,1);\\nivec3 workGroupID = ivec3(gl_WorkGroupID);\\nivec3 localInvocationID = ivec3(gl_LocalInvocationID);\\nivec3 numWorkGroups = ivec3(gl_NumWorkGroups);\\nint localInvocationIndex = int(gl_LocalInvocationIndex);\\n\\n\\nlayout(std430, set = 0, binding = 0) buffer readonly GWebGPUBuffer0 {\\n vec4 u_Data[];\\n} gWebGPUBuffer0;\\n\\nlayout(std430, set = 0, binding = 1) buffer readonly GWebGPUBuffer1 {\\n vec4 u_NodeAttributes[];\\n} gWebGPUBuffer1;\\n\\nlayout(std430, set = 0, binding = 2) buffer GWebGPUBuffer2 {\\n vec4 u_ClusterCenters[];\\n} gWebGPUBuffer2;\\n\\n\\n\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n#define CLUSTER_COUNT __DefineValuePlaceholder__CLUSTER_COUNT\\nlayout (\\n local_size_x = 1,\\n local_size_y = 1,\\n local_size_z = 1\\n) in;\\n\\n\\n\\nvoid main() {int i = globalInvocationID.x;\\nvec4 center = gWebGPUBuffer2.u_ClusterCenters[i];\\nfloat sumx = 0.0;\\nfloat sumy = 0.0;\\nfloat count = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {vec4 attributes = gWebGPUBuffer1.u_NodeAttributes[j];\\nint clusterIdx = int(attributes.x);\\nvec4 vertex = gWebGPUBuffer0.u_Data[j];\\nif (clusterIdx == i) {sumx += vertex.x;\\nsumy += vertex.y;\\ncount += 1.0;}}\\ngWebGPUBuffer2.u_ClusterCenters[i] = vec4(sumx / count, sumy / count, count, i);}\\n","GLSL100":"\\n\\nfloat epsilon = 0.00001;\\nvec2 addrTranslation_1Dto2D(float address1D, vec2 texSize) {\\n vec2 conv_const = vec2(1.0 / texSize.x, 1.0 / (texSize.x * texSize.y));\\n vec2 normAddr2D = float(address1D) * conv_const;\\n return vec2(fract(normAddr2D.x + epsilon), normAddr2D.y);\\n}\\n\\nvoid barrier() {}\\n \\n\\nuniform vec2 u_OutputTextureSize;\\nuniform int u_OutputTexelCount;\\nvarying vec2 v_TexCoord;\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n#define CLUSTER_COUNT __DefineValuePlaceholder__CLUSTER_COUNT\\n\\nuniform sampler2D u_Data;\\nuniform vec2 u_DataSize;\\nvec4 getDatau_Data(vec2 address2D) {\\n return vec4(texture2D(u_Data, address2D).rgba);\\n}\\nvec4 getDatau_Data(float address1D) {\\n return getDatau_Data(addrTranslation_1Dto2D(address1D, u_DataSize));\\n}\\nvec4 getDatau_Data(int address1D) {\\n return getDatau_Data(float(address1D));\\n}\\nuniform sampler2D u_NodeAttributes;\\nuniform vec2 u_NodeAttributesSize;\\nvec4 getDatau_NodeAttributes(vec2 address2D) {\\n return vec4(texture2D(u_NodeAttributes, address2D).rgba);\\n}\\nvec4 getDatau_NodeAttributes(float address1D) {\\n return getDatau_NodeAttributes(addrTranslation_1Dto2D(address1D, u_NodeAttributesSize));\\n}\\nvec4 getDatau_NodeAttributes(int address1D) {\\n return getDatau_NodeAttributes(float(address1D));\\n}\\nuniform sampler2D u_ClusterCenters;\\nuniform vec2 u_ClusterCentersSize;\\nvec4 getDatau_ClusterCenters(vec2 address2D) {\\n return vec4(texture2D(u_ClusterCenters, address2D).rgba);\\n}\\nvec4 getDatau_ClusterCenters(float address1D) {\\n return getDatau_ClusterCenters(addrTranslation_1Dto2D(address1D, u_ClusterCentersSize));\\n}\\nvec4 getDatau_ClusterCenters(int address1D) {\\n return getDatau_ClusterCenters(float(address1D));\\n}\\nvoid main() {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nint i = globalInvocationID.x;\\nvec4 center = getDatau_ClusterCenters(i);\\nfloat sumx = 0.0;\\nfloat sumy = 0.0;\\nfloat count = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {vec4 attributes = getDatau_NodeAttributes(j);\\nint clusterIdx = int(attributes.x);\\nvec4 vertex = getDatau_Data(j);\\nif (clusterIdx == i) {sumx += vertex.x;\\nsumy += vertex.y;\\ncount += 1.0;}}\\ngl_FragColor = vec4(vec4(sumx / count, sumy / count, count, i));if (gWebGPUDebug) {\\n gl_FragColor = gWebGPUDebugOutput;\\n}}\\n"},"context":{"name":"","dispatch":[1,1,1],"threadGroupSize":[1,1,1],"maxIteration":1,"defines":[{"name":"VERTEX_COUNT","type":"Float","runtime":true},{"name":"CLUSTER_COUNT","type":"Float","runtime":true}],"uniforms":[{"name":"u_Data","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_NodeAttributes","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_ClusterCenters","type":"vec4[]","storageClass":"StorageBuffer","readonly":false,"writeonly":false,"size":[1,1]}],"globalDeclarations":[],"output":{"name":"u_ClusterCenters","size":[1,1],"length":1},"needPingpong":true}}';var FN=function(r,e,t,n){function i(a){return a instanceof t?a:new t(function(o){o(a)})}return new(t||(t=Promise))(function(a,o){function s(f){try{u(n.next(f))}catch(c){o(c)}}function l(f){try{u(n.throw(f))}catch(c){o(c)}}function u(f){f.done?a(f.value):i(f.value).then(s,l)}u((n=n.apply(r,e||[])).next())})},bS=class extends li{constructor(e){super();this.maxIteration=1e3,this.gravity=10,this.speed=1,this.clustering=!1,this.clusterField="cluster",this.clusterGravity=10,this.workerEnabled=!1,this.nodes=[],this.edges=[],this.width=300,this.height=300,this.nodeMap={},this.nodeIdxMap={},this.updateCfg(e)}getDefaultCfg(){return{maxIteration:1e3,gravity:10,speed:1,clustering:!1,clusterGravity:10}}execute(){return FN(this,void 0,void 0,function*(){let e=this,t=e.nodes;if(!t||t.length===0){e.onLayoutEnd&&e.onLayoutEnd();return}!e.width&&typeof window!="undefined"&&(e.width=window.innerWidth),!e.height&&typeof window!="undefined"&&(e.height=window.innerHeight),e.center||(e.center=[e.width/2,e.height/2]);let n=e.center;if(t.length===1){t[0].x=n[0],t[0].y=n[1],e.onLayoutEnd&&e.onLayoutEnd();return}let i={},a={};t.forEach((o,s)=>{je(o.x)||(o.x=Math.random()*this.width),je(o.y)||(o.y=Math.random()*this.height),i[o.id]=o,a[o.id]=s}),e.nodeMap=i,e.nodeIdxMap=a,yield e.run()})}executeWithWorker(e,t){return FN(this,void 0,void 0,function*(){let n=this,i=n.nodes,a=n.center;if(!i||i.length===0)return;if(i.length===1){i[0].x=a[0],i[0].y=a[1];return}let o={},s={};i.forEach((l,u)=>{je(l.x)||(l.x=Math.random()*this.width),je(l.y)||(l.y=Math.random()*this.height),o[l.id]=l,s[l.id]=u}),n.nodeMap=o,n.nodeIdxMap=s,yield n.run(e,t)})}run(e,t){return FN(this,void 0,void 0,function*(){let n=this,i=n.nodes,a=n.edges,o=n.maxIteration,s=n.center,l=n.height*n.width,u=Math.sqrt(l)/10,f=l/(i.length+1),c=Math.sqrt(f),h=n.speed,d=n.clustering,{array:p,count:v}=KCt([n.clusterField],i);i.forEach((L,M)=>{let O=0,F=0;je(L.fx)&&je(L.fy)&&(O=L.fx||.001,F=L.fy||.001),p[4*M+1]=O,p[4*M+2]=F});let m=i.length,{maxEdgePerVetex:g,array:x}=XCt(i,a),b=n.workerEnabled,S;b?S=sx.create({canvas:e,engineOptions:{supportCompute:!0}}):S=sx.create({engineOptions:{supportCompute:!0}});let C=n.onLayoutEnd,w=[];for(let L=0;LFN(this,void 0,void 0,function*(){for(let M=0;M{let F=L[4*O],k=L[4*O+1];M.x=F,M.y=k}),C&&C()}))()})}getType(){return"fruchterman-gpu"}};var QCt='{"shaders":{"WGSL":"import \\"GLSL.std.450\\" as std;\\n\\n\\n# var gWebGPUDebug : bool = false;\\n# var gWebGPUDebugOutput : vec4 = vec4(0.0);\\n\\n[[builtin global_invocation_id]] var globalInvocationID : vec3;\\n# [[builtin work_group_size]] var workGroupSize : vec3;\\n# [[builtin work_group_id]] var workGroupID : vec3;\\n[[builtin local_invocation_id]] var localInvocationID : vec3;\\n# [[builtin num_work_groups]] var numWorkGroups : vec3;\\n[[builtin local_invocation_idx]] var localInvocationIndex : u32;\\n\\ntype GWebGPUParams = [[block]] struct {\\n [[offset 0]] u_damping : f32;\\n [[offset 4]] u_maxSpeed : f32;\\n [[offset 8]] u_minMovement : f32;\\n \\n [[offset 12]] u_coulombDisScale : f32;\\n [[offset 16]] u_factor : f32;\\n \\n \\n [[offset 20]] u_interval : f32;\\n};\\n[[binding 0, set 0]] var gWebGPUUniformParams : GWebGPUParams;\\ntype GWebGPUBuffer0 = [[block]] struct {\\n [[offset 0]] u_Data : [[stride 16]] array>;\\n};\\n[[binding 1, set 0]] var gWebGPUBuffer0 : GWebGPUBuffer0;\\ntype GWebGPUBuffer1 = [[block]] struct {\\n [[offset 0]] u_AveMovement : [[stride 16]] array>;\\n};\\n[[binding 2, set 0]] var gWebGPUBuffer1 : GWebGPUBuffer1;\\ntype GWebGPUBuffer2 = [[block]] struct {\\n [[offset 0]] u_NodeAttributeArray1 : [[stride 16]] array>;\\n};\\n[[binding 3, set 0]] var gWebGPUBuffer2 : GWebGPUBuffer2;\\ntype GWebGPUBuffer3 = [[block]] struct {\\n [[offset 0]] u_NodeAttributeArray2 : [[stride 16]] array>;\\n};\\n[[binding 4, set 0]] var gWebGPUBuffer3 : GWebGPUBuffer3;\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nfn unpack_float(packedValue : f32) -> vec2 {var packedIntValue : i32 = i32(packedValue);\\nvar v0 : i32 = packedIntValue / 1048576;\\nreturn vec2(v0, packedIntValue - (v0 * 1048576));}\\nfn calcRepulsive(i : i32, currentNode : vec4) -> vec2 {var ax : f32 = 0.0;\\nvar ay : f32 = 0.0;\\nfor (var j : i32 = 0; j < __DefineValuePlaceholder__VERTEX_COUNT; j = j + 1) {if (i != j) {var nextNode : vec4 = gWebGPUBuffer0.u_Data[j];\\nvar vx : f32 = currentNode.x - nextNode.x;\\nvar vy : f32 = currentNode.y - nextNode.y;\\nvar dist : f32 = std::sqrt((vx * vx) + (vy * vy)) + 0.01;\\nvar n_dist : f32 = (dist + 0.1) * gWebGPUUniformParams.u_coulombDisScale;\\nvar direx : f32 = vx / dist;\\nvar direy : f32 = vy / dist;\\nvar attributesi : vec4 = gWebGPUBuffer2.u_NodeAttributeArray1[i];\\nvar attributesj : vec4 = gWebGPUBuffer2.u_NodeAttributeArray1[j];\\nvar massi : f32 = attributesi.x;\\nvar nodeStrengthi : f32 = attributesi.z;\\nvar nodeStrengthj : f32 = attributesj.z;\\nvar nodeStrength : f32 = (nodeStrengthi + nodeStrengthj) / 2.0;\\nvar param : f32 = (nodeStrength * gWebGPUUniformParams.u_factor) / (n_dist * n_dist);\\nax = ax + direx * param;\\nay = ay + direy * param;}}\\nreturn vec2(ax, ay);}\\nfn calcGravity(i : i32, currentNode : vec4, attributes2 : vec4) -> vec2 {var vx : f32 = currentNode.x - attributes2.x;\\nvar vy : f32 = currentNode.y - attributes2.y;\\nvar ax : f32 = vx * attributes2.z;\\nvar ay : f32 = vy * attributes2.z;\\nreturn vec2(ax, ay);}\\nfn calcAttractive(i : i32, currentNode : vec4, attributes1 : vec4) -> vec2 {var mass : f32 = attributes1.x;\\nvar ax : f32 = 0.0;\\nvar ay : f32 = 0.0;\\nvar compressed : vec2 = unpack_float(currentNode.z);\\nvar length : i32 = compressed.x;\\nvar arr_offset : i32 = compressed.y;\\nvar node_buffer : vec4;\\nfor (var p : i32 = 0; p < __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX; p = p + 1) {if (p >= length) {break;}\\nvar arr_idx : i32 = arr_offset + (4 * p);\\nvar buf_offset : i32 = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = gWebGPUBuffer0.u_Data[i32(arr_idx / 4)];}\\nvar float_j : f32 = node_buffer.x;\\nvar nextNode : vec4 = gWebGPUBuffer0.u_Data[i32(float_j)];\\nvar vx : f32 = nextNode.x - currentNode.x;\\nvar vy : f32 = nextNode.y - currentNode.y;\\nvar dist : f32 = std::sqrt((vx * vx) + (vy * vy)) + 0.01;\\nvar direx : f32 = vx / dist;\\nvar direy : f32 = vy / dist;\\nvar edgeLength : f32 = node_buffer.y;\\nvar edgeStrength : f32 = node_buffer.z;\\nvar diff : f32 = edgeLength - dist;\\nvar param : f32 = (diff * edgeStrength) / mass;\\nax = ax - direx * param;\\nay = ay - direy * param;}\\nreturn vec2(ax, ay);}\\nfn main() -> void {var i : i32 = globalInvocationID.x;\\nvar currentNode : vec4 = gWebGPUBuffer0.u_Data[i];\\nvar movement : vec4 = gWebGPUBuffer1.u_AveMovement[0];\\nvar ax : f32 = 0.0;\\nvar ay : f32 = 0.0;\\nif ((i >= __DefineValuePlaceholder__VERTEX_COUNT) || (movement.x < gWebGPUUniformParams.u_minMovement)) {gWebGPUBuffer0.u_Data[i] = currentNode;\\nreturn ;}\\nvar nodeAttributes1 : vec4 = gWebGPUBuffer2.u_NodeAttributeArray1[i];\\nvar nodeAttributes2 : vec4 = gWebGPUBuffer3.u_NodeAttributeArray2[i];\\nvar repulsive : vec2 = calcRepulsive(i, currentNode);\\nax = ax + repulsive.x;\\nay = ay + repulsive.y;\\nvar attractive : vec2 = calcAttractive(i, currentNode, nodeAttributes1);\\nax = ax + attractive.x;\\nay = ay + attractive.y;\\nvar gravity : vec2 = calcGravity(i, currentNode, nodeAttributes2);\\nax = ax - gravity.x;\\nay = ay - gravity.y;\\nvar param : f32 = gWebGPUUniformParams.u_interval * gWebGPUUniformParams.u_damping;\\nvar vx : f32 = ax * param;\\nvar vy : f32 = ay * param;\\nvar vlength : f32 = std::sqrt((vx * vx) + (vy * vy)) + 0.0001;\\nif (vlength > gWebGPUUniformParams.u_maxSpeed) {var param2 : f32 = gWebGPUUniformParams.u_maxSpeed / vlength;\\nvx = param2 * vx;\\nvy = param2 * vy;}\\nvar distx : f32 = vx * gWebGPUUniformParams.u_interval;\\nvar disty : f32 = vy * gWebGPUUniformParams.u_interval;\\nvar distLength : f32 = std::sqrt((distx * distx) + (disty * disty));\\nif ((nodeAttributes1.w != 0.0) && (nodeAttributes2.w != 0.0)) {gWebGPUBuffer0.u_Data[i] = vec4(nodeAttributes1.w, nodeAttributes2.w, currentNode.z, 0.0);}else {gWebGPUBuffer0.u_Data[i] = vec4(currentNode.x + distx, currentNode.y + disty, currentNode.z, distLength);}\\nreturn;}\\n\\nentry_point compute as \\"main\\" = main;\\n","GLSL450":"\\n\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\nivec3 globalInvocationID = ivec3(gl_GlobalInvocationID);\\nivec3 workGroupSize = ivec3(1,1,1);\\nivec3 workGroupID = ivec3(gl_WorkGroupID);\\nivec3 localInvocationID = ivec3(gl_LocalInvocationID);\\nivec3 numWorkGroups = ivec3(gl_NumWorkGroups);\\nint localInvocationIndex = int(gl_LocalInvocationIndex);\\n\\nlayout(std140, set = 0, binding = 0) uniform GWebGPUParams {\\n float u_damping;\\n float u_maxSpeed;\\n float u_minMovement;\\n \\n float u_coulombDisScale;\\n float u_factor;\\n \\n \\n float u_interval;\\n} gWebGPUUniformParams;\\nlayout(std430, set = 0, binding = 1) buffer GWebGPUBuffer0 {\\n vec4 u_Data[];\\n} gWebGPUBuffer0;\\n\\nlayout(std430, set = 0, binding = 2) buffer readonly GWebGPUBuffer1 {\\n vec4 u_AveMovement[];\\n} gWebGPUBuffer1;\\n\\nlayout(std430, set = 0, binding = 3) buffer readonly GWebGPUBuffer2 {\\n vec4 u_NodeAttributeArray1[];\\n} gWebGPUBuffer2;\\n\\nlayout(std430, set = 0, binding = 4) buffer readonly GWebGPUBuffer3 {\\n vec4 u_NodeAttributeArray2[];\\n} gWebGPUBuffer3;\\n\\n\\n\\n#define MAX_EDGE_PER_VERTEX __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n#define SHIFT_20 1048576.0\\nlayout (\\n local_size_x = 1,\\n local_size_y = 1,\\n local_size_z = 1\\n) in;\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nivec2 unpack_float(float packedValue) {int packedIntValue = int(packedValue);\\nint v0 = packedIntValue / int(SHIFT_20);\\nreturn ivec2(v0, packedIntValue - (v0 * int(SHIFT_20)));}\\nvec2 calcRepulsive(int i, vec4 currentNode) {float ax = 0.0;\\nfloat ay = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {if (i != j) {vec4 nextNode = gWebGPUBuffer0.u_Data[j];\\nfloat vx = currentNode.x - nextNode.x;\\nfloat vy = currentNode.y - nextNode.y;\\nfloat dist = sqrt((vx * vx) + (vy * vy)) + 0.01;\\nfloat n_dist = (dist + 0.1) * gWebGPUUniformParams.u_coulombDisScale;\\nfloat direx = vx / dist;\\nfloat direy = vy / dist;\\nvec4 attributesi = gWebGPUBuffer2.u_NodeAttributeArray1[i];\\nvec4 attributesj = gWebGPUBuffer2.u_NodeAttributeArray1[j];\\nfloat massi = attributesi.x;\\nfloat nodeStrengthi = attributesi.z;\\nfloat nodeStrengthj = attributesj.z;\\nfloat nodeStrength = (nodeStrengthi + nodeStrengthj) / 2.0;\\nfloat param = (nodeStrength * gWebGPUUniformParams.u_factor) / (n_dist * n_dist);\\nax += direx * param;\\nay += direy * param;}}\\nreturn vec2(ax, ay);}\\nvec2 calcGravity(int i, vec4 currentNode, vec4 attributes2) {float vx = currentNode.x - attributes2.x;\\nfloat vy = currentNode.y - attributes2.y;\\nfloat ax = vx * attributes2.z;\\nfloat ay = vy * attributes2.z;\\nreturn vec2(ax, ay);}\\nvec2 calcAttractive(int i, vec4 currentNode, vec4 attributes1) {float mass = attributes1.x;\\nfloat ax = 0.0;\\nfloat ay = 0.0;\\nivec2 compressed = unpack_float(currentNode.z);\\nint length = compressed.x;\\nint arr_offset = compressed.y;\\nvec4 node_buffer;\\nfor (int p = 0; p < MAX_EDGE_PER_VERTEX; p++) {if (p >= length) {break;}\\nint arr_idx = arr_offset + (4 * p);\\nint buf_offset = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = gWebGPUBuffer0.u_Data[int(arr_idx / 4)];}\\nfloat float_j = node_buffer.x;\\nvec4 nextNode = gWebGPUBuffer0.u_Data[int(float_j)];\\nfloat vx = nextNode.x - currentNode.x;\\nfloat vy = nextNode.y - currentNode.y;\\nfloat dist = sqrt((vx * vx) + (vy * vy)) + 0.01;\\nfloat direx = vx / dist;\\nfloat direy = vy / dist;\\nfloat edgeLength = node_buffer.y;\\nfloat edgeStrength = node_buffer.z;\\nfloat diff = edgeLength - dist;\\nfloat param = (diff * edgeStrength) / mass;\\nax -= direx * param;\\nay -= direy * param;}\\nreturn vec2(ax, ay);}\\nvoid main() {int i = globalInvocationID.x;\\nvec4 currentNode = gWebGPUBuffer0.u_Data[i];\\nvec4 movement = gWebGPUBuffer1.u_AveMovement[0];\\nfloat ax = 0.0;\\nfloat ay = 0.0;\\nif ((i >= VERTEX_COUNT) || (movement.x < gWebGPUUniformParams.u_minMovement)) {gWebGPUBuffer0.u_Data[i] = currentNode;\\nreturn ;}\\nvec4 nodeAttributes1 = gWebGPUBuffer2.u_NodeAttributeArray1[i];\\nvec4 nodeAttributes2 = gWebGPUBuffer3.u_NodeAttributeArray2[i];\\nvec2 repulsive = calcRepulsive(i, currentNode);\\nax += repulsive.x;\\nay += repulsive.y;\\nvec2 attractive = calcAttractive(i, currentNode, nodeAttributes1);\\nax += attractive.x;\\nay += attractive.y;\\nvec2 gravity = calcGravity(i, currentNode, nodeAttributes2);\\nax -= gravity.x;\\nay -= gravity.y;\\nfloat param = gWebGPUUniformParams.u_interval * gWebGPUUniformParams.u_damping;\\nfloat vx = ax * param;\\nfloat vy = ay * param;\\nfloat vlength = sqrt((vx * vx) + (vy * vy)) + 0.0001;\\nif (vlength > gWebGPUUniformParams.u_maxSpeed) {float param2 = gWebGPUUniformParams.u_maxSpeed / vlength;\\nvx = param2 * vx;\\nvy = param2 * vy;}\\nfloat distx = vx * gWebGPUUniformParams.u_interval;\\nfloat disty = vy * gWebGPUUniformParams.u_interval;\\nfloat distLength = sqrt((distx * distx) + (disty * disty));\\nif ((nodeAttributes1.w != 0.0) && (nodeAttributes2.w != 0.0)) {gWebGPUBuffer0.u_Data[i] = vec4(nodeAttributes1.w, nodeAttributes2.w, currentNode.z, 0.0);}else {gWebGPUBuffer0.u_Data[i] = vec4(currentNode.x + distx, currentNode.y + disty, currentNode.z, distLength);}}\\n","GLSL100":"\\n\\nfloat epsilon = 0.00001;\\nvec2 addrTranslation_1Dto2D(float address1D, vec2 texSize) {\\n vec2 conv_const = vec2(1.0 / texSize.x, 1.0 / (texSize.x * texSize.y));\\n vec2 normAddr2D = float(address1D) * conv_const;\\n return vec2(fract(normAddr2D.x + epsilon), normAddr2D.y);\\n}\\n\\nvoid barrier() {}\\n \\n\\nuniform vec2 u_OutputTextureSize;\\nuniform int u_OutputTexelCount;\\nvarying vec2 v_TexCoord;\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\n#define MAX_EDGE_PER_VERTEX __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n#define SHIFT_20 1048576.0\\n\\nuniform sampler2D u_Data;\\nuniform vec2 u_DataSize;\\nvec4 getDatau_Data(vec2 address2D) {\\n return vec4(texture2D(u_Data, address2D).rgba);\\n}\\nvec4 getDatau_Data(float address1D) {\\n return getDatau_Data(addrTranslation_1Dto2D(address1D, u_DataSize));\\n}\\nvec4 getDatau_Data(int address1D) {\\n return getDatau_Data(float(address1D));\\n}\\nuniform float u_damping;\\nuniform float u_maxSpeed;\\nuniform float u_minMovement;\\nuniform sampler2D u_AveMovement;\\nuniform vec2 u_AveMovementSize;\\nvec4 getDatau_AveMovement(vec2 address2D) {\\n return vec4(texture2D(u_AveMovement, address2D).rgba);\\n}\\nvec4 getDatau_AveMovement(float address1D) {\\n return getDatau_AveMovement(addrTranslation_1Dto2D(address1D, u_AveMovementSize));\\n}\\nvec4 getDatau_AveMovement(int address1D) {\\n return getDatau_AveMovement(float(address1D));\\n}\\nuniform float u_coulombDisScale;\\nuniform float u_factor;\\nuniform sampler2D u_NodeAttributeArray1;\\nuniform vec2 u_NodeAttributeArray1Size;\\nvec4 getDatau_NodeAttributeArray1(vec2 address2D) {\\n return vec4(texture2D(u_NodeAttributeArray1, address2D).rgba);\\n}\\nvec4 getDatau_NodeAttributeArray1(float address1D) {\\n return getDatau_NodeAttributeArray1(addrTranslation_1Dto2D(address1D, u_NodeAttributeArray1Size));\\n}\\nvec4 getDatau_NodeAttributeArray1(int address1D) {\\n return getDatau_NodeAttributeArray1(float(address1D));\\n}\\nuniform sampler2D u_NodeAttributeArray2;\\nuniform vec2 u_NodeAttributeArray2Size;\\nvec4 getDatau_NodeAttributeArray2(vec2 address2D) {\\n return vec4(texture2D(u_NodeAttributeArray2, address2D).rgba);\\n}\\nvec4 getDatau_NodeAttributeArray2(float address1D) {\\n return getDatau_NodeAttributeArray2(addrTranslation_1Dto2D(address1D, u_NodeAttributeArray2Size));\\n}\\nvec4 getDatau_NodeAttributeArray2(int address1D) {\\n return getDatau_NodeAttributeArray2(float(address1D));\\n}\\nuniform float u_interval;\\nivec2 unpack_float(float packedValue) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nint packedIntValue = int(packedValue);\\nint v0 = packedIntValue / int(SHIFT_20);\\nreturn ivec2(v0, packedIntValue - (v0 * int(SHIFT_20)));}\\nvec2 calcRepulsive(int i, vec4 currentNode) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat ax = 0.0;\\nfloat ay = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {if (i != j) {vec4 nextNode = getDatau_Data(j);\\nfloat vx = currentNode.x - nextNode.x;\\nfloat vy = currentNode.y - nextNode.y;\\nfloat dist = sqrt((vx * vx) + (vy * vy)) + 0.01;\\nfloat n_dist = (dist + 0.1) * u_coulombDisScale;\\nfloat direx = vx / dist;\\nfloat direy = vy / dist;\\nvec4 attributesi = getDatau_NodeAttributeArray1(i);\\nvec4 attributesj = getDatau_NodeAttributeArray1(j);\\nfloat massi = attributesi.x;\\nfloat nodeStrengthi = attributesi.z;\\nfloat nodeStrengthj = attributesj.z;\\nfloat nodeStrength = (nodeStrengthi + nodeStrengthj) / 2.0;\\nfloat param = (nodeStrength * u_factor) / (n_dist * n_dist);\\nax += direx * param;\\nay += direy * param;}}\\nreturn vec2(ax, ay);}\\nvec2 calcGravity(int i, vec4 currentNode, vec4 attributes2) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat vx = currentNode.x - attributes2.x;\\nfloat vy = currentNode.y - attributes2.y;\\nfloat ax = vx * attributes2.z;\\nfloat ay = vy * attributes2.z;\\nreturn vec2(ax, ay);}\\nvec2 calcAttractive(int i, vec4 currentNode, vec4 attributes1) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat mass = attributes1.x;\\nfloat ax = 0.0;\\nfloat ay = 0.0;\\nivec2 compressed = unpack_float(currentNode.z);\\nint length = compressed.x;\\nint arr_offset = compressed.y;\\nvec4 node_buffer;\\nfor (int p = 0; p < MAX_EDGE_PER_VERTEX; p++) {if (p >= length) {break;}\\nint arr_idx = arr_offset + (4 * p);\\nint buf_offset = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = getDatau_Data(int(arr_idx / 4));}\\nfloat float_j = node_buffer.x;\\nvec4 nextNode = getDatau_Data(int(float_j));\\nfloat vx = nextNode.x - currentNode.x;\\nfloat vy = nextNode.y - currentNode.y;\\nfloat dist = sqrt((vx * vx) + (vy * vy)) + 0.01;\\nfloat direx = vx / dist;\\nfloat direy = vy / dist;\\nfloat edgeLength = node_buffer.y;\\nfloat edgeStrength = node_buffer.z;\\nfloat diff = edgeLength - dist;\\nfloat param = (diff * edgeStrength) / mass;\\nax -= direx * param;\\nay -= direy * param;}\\nreturn vec2(ax, ay);}\\nvoid main() {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nint i = globalInvocationID.x;\\nvec4 currentNode = getDatau_Data(i);\\nvec4 movement = getDatau_AveMovement(0.0);\\nfloat ax = 0.0;\\nfloat ay = 0.0;\\nif ((i >= VERTEX_COUNT) || (movement.x < u_minMovement)) {gl_FragColor = vec4(currentNode);\\nreturn ;}\\nvec4 nodeAttributes1 = getDatau_NodeAttributeArray1(i);\\nvec4 nodeAttributes2 = getDatau_NodeAttributeArray2(i);\\nvec2 repulsive = calcRepulsive(i, currentNode);\\nax += repulsive.x;\\nay += repulsive.y;\\nvec2 attractive = calcAttractive(i, currentNode, nodeAttributes1);\\nax += attractive.x;\\nay += attractive.y;\\nvec2 gravity = calcGravity(i, currentNode, nodeAttributes2);\\nax -= gravity.x;\\nay -= gravity.y;\\nfloat param = u_interval * u_damping;\\nfloat vx = ax * param;\\nfloat vy = ay * param;\\nfloat vlength = sqrt((vx * vx) + (vy * vy)) + 0.0001;\\nif (vlength > u_maxSpeed) {float param2 = u_maxSpeed / vlength;\\nvx = param2 * vx;\\nvy = param2 * vy;}\\nfloat distx = vx * u_interval;\\nfloat disty = vy * u_interval;\\nfloat distLength = sqrt((distx * distx) + (disty * disty));\\nif ((nodeAttributes1.w != 0.0) && (nodeAttributes2.w != 0.0)) {gl_FragColor = vec4(vec4(nodeAttributes1.w, nodeAttributes2.w, currentNode.z, 0.0));}else {gl_FragColor = vec4(vec4(currentNode.x + distx, currentNode.y + disty, currentNode.z, distLength));}if (gWebGPUDebug) {\\n gl_FragColor = gWebGPUDebugOutput;\\n}}\\n"},"context":{"name":"","dispatch":[1,1,1],"threadGroupSize":[1,1,1],"maxIteration":1,"defines":[{"name":"MAX_EDGE_PER_VERTEX","type":"Float","runtime":true},{"name":"VERTEX_COUNT","type":"Float","runtime":true},{"name":"SHIFT_20","type":"Float","value":1048576,"runtime":false}],"uniforms":[{"name":"u_Data","type":"vec4[]","storageClass":"StorageBuffer","readonly":false,"writeonly":false,"size":[1,1]},{"name":"u_damping","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_maxSpeed","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_minMovement","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_AveMovement","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_coulombDisScale","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_factor","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_NodeAttributeArray1","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_NodeAttributeArray2","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_interval","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]}],"globalDeclarations":[],"output":{"name":"u_Data","size":[1,1],"length":1},"needPingpong":true}}';var JCt='{"shaders":{"WGSL":"import \\"GLSL.std.450\\" as std;\\n\\n\\n# var gWebGPUDebug : bool = false;\\n# var gWebGPUDebugOutput : vec4 = vec4(0.0);\\n\\n[[builtin global_invocation_id]] var globalInvocationID : vec3;\\n# [[builtin work_group_size]] var workGroupSize : vec3;\\n# [[builtin work_group_id]] var workGroupID : vec3;\\n[[builtin local_invocation_id]] var localInvocationID : vec3;\\n# [[builtin num_work_groups]] var numWorkGroups : vec3;\\n[[builtin local_invocation_idx]] var localInvocationIndex : u32;\\n\\ntype GWebGPUParams = [[block]] struct {\\n [[offset 0]] u_iter : f32;\\n};\\n[[binding 0, set 0]] var gWebGPUUniformParams : GWebGPUParams;\\ntype GWebGPUBuffer0 = [[block]] struct {\\n [[offset 0]] u_Data : [[stride 16]] array>;\\n};\\n[[binding 1, set 0]] var gWebGPUBuffer0 : GWebGPUBuffer0;\\ntype GWebGPUBuffer1 = [[block]] struct {\\n [[offset 0]] u_AveMovement : [[stride 16]] array>;\\n};\\n[[binding 2, set 0]] var gWebGPUBuffer1 : GWebGPUBuffer1;\\n\\n\\n\\n\\n\\n\\n\\n\\nfn main() -> void {var movement : f32 = 0.0;\\nfor (var j : i32 = 0; j < __DefineValuePlaceholder__VERTEX_COUNT; j = j + 1) {var vertex : vec4 = gWebGPUBuffer0.u_Data[j];\\nmovement = movement + vertex.w;}\\nmovement = movement / f32(__DefineValuePlaceholder__VERTEX_COUNT);\\ngWebGPUBuffer1.u_AveMovement[0] = vec4(movement, 0.0, 0.0, 0.0);\\nreturn;}\\n\\nentry_point compute as \\"main\\" = main;\\n","GLSL450":"\\n\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\nivec3 globalInvocationID = ivec3(gl_GlobalInvocationID);\\nivec3 workGroupSize = ivec3(1,1,1);\\nivec3 workGroupID = ivec3(gl_WorkGroupID);\\nivec3 localInvocationID = ivec3(gl_LocalInvocationID);\\nivec3 numWorkGroups = ivec3(gl_NumWorkGroups);\\nint localInvocationIndex = int(gl_LocalInvocationIndex);\\n\\nlayout(std140, set = 0, binding = 0) uniform GWebGPUParams {\\n float u_iter;\\n} gWebGPUUniformParams;\\nlayout(std430, set = 0, binding = 1) buffer readonly GWebGPUBuffer0 {\\n vec4 u_Data[];\\n} gWebGPUBuffer0;\\n\\nlayout(std430, set = 0, binding = 2) buffer GWebGPUBuffer1 {\\n vec4 u_AveMovement[];\\n} gWebGPUBuffer1;\\n\\n\\n\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\nlayout (\\n local_size_x = 1,\\n local_size_y = 1,\\n local_size_z = 1\\n) in;\\n\\n\\n\\nvoid main() {float movement = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {vec4 vertex = gWebGPUBuffer0.u_Data[j];\\nmovement += vertex.w;}\\nmovement = movement / float(VERTEX_COUNT);\\ngWebGPUBuffer1.u_AveMovement[0] = vec4(movement, 0.0, 0.0, 0.0);}\\n","GLSL100":"\\n\\nfloat epsilon = 0.00001;\\nvec2 addrTranslation_1Dto2D(float address1D, vec2 texSize) {\\n vec2 conv_const = vec2(1.0 / texSize.x, 1.0 / (texSize.x * texSize.y));\\n vec2 normAddr2D = float(address1D) * conv_const;\\n return vec2(fract(normAddr2D.x + epsilon), normAddr2D.y);\\n}\\n\\nvoid barrier() {}\\n \\n\\nuniform vec2 u_OutputTextureSize;\\nuniform int u_OutputTexelCount;\\nvarying vec2 v_TexCoord;\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n\\nuniform sampler2D u_Data;\\nuniform vec2 u_DataSize;\\nvec4 getDatau_Data(vec2 address2D) {\\n return vec4(texture2D(u_Data, address2D).rgba);\\n}\\nvec4 getDatau_Data(float address1D) {\\n return getDatau_Data(addrTranslation_1Dto2D(address1D, u_DataSize));\\n}\\nvec4 getDatau_Data(int address1D) {\\n return getDatau_Data(float(address1D));\\n}\\nuniform float u_iter;\\nuniform sampler2D u_AveMovement;\\nuniform vec2 u_AveMovementSize;\\nvec4 getDatau_AveMovement(vec2 address2D) {\\n return vec4(texture2D(u_AveMovement, address2D).rgba);\\n}\\nvec4 getDatau_AveMovement(float address1D) {\\n return getDatau_AveMovement(addrTranslation_1Dto2D(address1D, u_AveMovementSize));\\n}\\nvec4 getDatau_AveMovement(int address1D) {\\n return getDatau_AveMovement(float(address1D));\\n}\\nvoid main() {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat movement = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {vec4 vertex = getDatau_Data(j);\\nmovement += vertex.w;}\\nmovement = movement / float(VERTEX_COUNT);\\ngl_FragColor = vec4(vec4(movement, 0.0, 0.0, 0.0));if (gWebGPUDebug) {\\n gl_FragColor = gWebGPUDebugOutput;\\n}}\\n"},"context":{"name":"","dispatch":[1,1,1],"threadGroupSize":[1,1,1],"maxIteration":1,"defines":[{"name":"VERTEX_COUNT","type":"Float","runtime":true}],"uniforms":[{"name":"u_Data","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_iter","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_AveMovement","type":"vec4[]","storageClass":"StorageBuffer","readonly":false,"writeonly":false,"size":[1,1]}],"globalDeclarations":[],"output":{"name":"u_AveMovement","size":[1,1],"length":1},"needPingpong":true}}';var qY=function(r,e,t,n){function i(a){return a instanceof t?a:new t(function(o){o(a)})}return new(t||(t=Promise))(function(a,o){function s(f){try{u(n.next(f))}catch(c){o(c)}}function l(f){try{u(n.throw(f))}catch(c){o(c)}}function u(f){f.done?a(f.value):i(f.value).then(s,l)}u((n=n.apply(r,e||[])).next())})},_S=class extends li{constructor(e){super();this.maxIteration=1e3,this.edgeStrength=200,this.nodeStrength=1e3,this.coulombDisScale=.005,this.damping=.9,this.maxSpeed=1e3,this.minMovement=.5,this.interval=.02,this.factor=1,this.linkDistance=1,this.gravity=10,this.workerEnabled=!1,this.nodes=[],this.edges=[],this.width=300,this.height=300,this.nodeMap={},this.nodeIdxMap={},this.updateCfg(e)}getDefaultCfg(){return{maxIteration:2e3,gravity:10,clustering:!1,clusterGravity:10}}execute(){return qY(this,void 0,void 0,function*(){let e=this,t=e.nodes;if(!t||t.length===0){e.onLayoutEnd&&e.onLayoutEnd();return}!e.width&&typeof window!="undefined"&&(e.width=window.innerWidth),!e.height&&typeof window!="undefined"&&(e.height=window.innerHeight),e.center||(e.center=[e.width/2,e.height/2]);let n=e.center;if(t.length===1){t[0].x=n[0],t[0].y=n[1],e.onLayoutEnd&&e.onLayoutEnd();return}let i={},a={};t.forEach((o,s)=>{je(o.x)||(o.x=Math.random()*e.width),je(o.y)||(o.y=Math.random()*e.height),i[o.id]=o,a[o.id]=s}),e.nodeMap=i,e.nodeIdxMap=a,e.nodeStrength=lx(e.nodeStrength,1),e.edgeStrength=lx(e.edgeStrength,1),yield e.run()})}executeWithWorker(e,t){let n=this,i=n.nodes,a=n.center;if(!i||i.length===0)return;if(i.length===1){i[0].x=a[0],i[0].y=a[1];return}let o={},s={};i.forEach((l,u)=>{je(l.x)||(l.x=Math.random()*n.width),je(l.y)||(l.y=Math.random()*n.height),o[l.id]=l,s[l.id]=u}),n.nodeMap=o,n.nodeIdxMap=s,n.nodeStrength=lx(n.nodeStrength,1),n.edgeStrength=lx(n.edgeStrength,1),n.run(e,t)}run(e,t){return qY(this,void 0,void 0,function*(){let n=this,i=n.nodes,a=n.edges,o=n.maxIteration;!n.width&&typeof window!="undefined"&&(n.width=window.innerWidth),!n.height&&typeof window!="undefined"&&(n.height=window.innerHeight);let s=i.length;n.linkDistance=lx(n.linkDistance),n.edgeStrength=lx(n.edgeStrength);let{maxEdgePerVetex:l,array:u}=qCt(i,a,n.linkDistance,n.edgeStrength);n.degrees=$h(i.length,n.nodeIdxMap,a);let f=[],c=[],h=[],d=[],p=[],v=[],m=[];n.getMass||(n.getMass=O=>n.degrees[n.nodeIdxMap[O.id]]||1);let g=n.gravity,x=n.center;i.forEach((O,F)=>{f.push(n.getMass(O)),c.push(n.nodeStrength(O)),n.degrees[F]||(n.degrees[F]=0);let k=[x[0],x[1],g];if(n.getCenter){let G=n.getCenter(O,n.degrees[F]);G&&je(G[0])&&je(G[1])&&je(G[2])&&(k=G)}h.push(k[0]),d.push(k[1]),p.push(k[2]),je(O.fx)&&je(O.fy)?(v.push(O.fx||.001),m.push(O.fy||.001)):(v.push(0),m.push(0))});let b=XY([f,n.degrees,c,v]),S=XY([h,d,p,m]),C=n.workerEnabled,w;C?w=sx.create({canvas:e,engineOptions:{supportCompute:!0}}):w=sx.create({engineOptions:{supportCompute:!0}});let A=n.onLayoutEnd,I=[];u.forEach(O=>{I.push(O)});for(let O=0;O<4;O++)I.push(0);let P=w.createKernel(QCt).setDispatch([s,1,1]).setBinding({u_Data:u,u_damping:n.damping,u_maxSpeed:n.maxSpeed,u_minMovement:n.minMovement,u_coulombDisScale:n.coulombDisScale,u_factor:n.factor,u_NodeAttributeArray1:b,u_NodeAttributeArray2:S,MAX_EDGE_PER_VERTEX:l,VERTEX_COUNT:s,u_AveMovement:I,u_interval:n.interval}),L=w.createKernel(JCt).setDispatch([1,1,1]).setBinding({u_Data:u,VERTEX_COUNT:s,u_AveMovement:[0,0,0,0]});yield(()=>qY(this,void 0,void 0,function*(){for(let F=0;F{let G=O[4*k],D=O[4*k+1];F.x=G,F.y=D}),A&&A()}))()})}getType(){return"gForce-gpu"}};var SS=class extends li{constructor(e){super();this.center=[0,0],this.maxIteration=100,this.gravity=10,this.comboGravity=10,this.linkDistance=10,this.alpha=1,this.alphaMin=.001,this.alphaDecay=1-Math.pow(this.alphaMin,1/300),this.alphaTarget=0,this.velocityDecay=.6,this.edgeStrength=.6,this.nodeStrength=30,this.preventOverlap=!1,this.preventNodeOverlap=!1,this.preventComboOverlap=!1,this.collideStrength=void 0,this.nodeCollideStrength=.5,this.comboCollideStrength=.5,this.comboSpacing=20,this.comboPadding=10,this.optimizeRangeFactor=1,this.onTick=()=>{},this.onLayoutEnd=()=>{},this.depthAttractiveForceScale=1,this.depthRepulsiveForceScale=2,this.nodes=[],this.edges=[],this.combos=[],this.comboTrees=[],this.width=300,this.height=300,this.bias=[],this.nodeMap={},this.oriComboMap={},this.indexMap={},this.comboMap={},this.previousLayouted=!1,this.updateCfg(e)}getDefaultCfg(){return{maxIteration:100,center:[0,0],gravity:10,speed:1,comboGravity:30,preventOverlap:!1,preventComboOverlap:!0,preventNodeOverlap:!0,nodeSpacing:void 0,collideStrength:void 0,nodeCollideStrength:.5,comboCollideStrength:.5,comboSpacing:20,comboPadding:10,edgeStrength:.6,nodeStrength:30,linkDistance:10}}execute(){let e=this,t=e.nodes,n=e.center;if(e.comboTree={id:"comboTreeRoot",depth:-1,children:e.comboTrees},!t||t.length===0){e.onLayoutEnd&&e.onLayoutEnd();return}if(t.length===1){t[0].x=n[0],t[0].y=n[1],e.onLayoutEnd&&e.onLayoutEnd();return}e.initVals(),e.run(),e.onLayoutEnd&&e.onLayoutEnd()}run(){let e=this,t=e.nodes,n=e.previousLayouted?e.maxIteration/5:e.maxIteration;!e.width&&typeof window!="undefined"&&(e.width=window.innerWidth),!e.height&&typeof window!="undefined"&&(e.height=window.innerHeight);let i=e.center,a=e.velocityDecay,o=e.comboMap;e.previousLayouted||e.initPos(o);for(let u=0;u{f[h]={x:0,y:0}}),e.applyCalculate(f),e.applyComboCenterForce(f),t.forEach((c,h)=>{!je(c.x)||!je(c.y)||(c.x+=f[h].x*a,c.y+=f[h].y*a)}),e.alpha+=(e.alphaTarget-e.alpha)*e.alphaDecay,e.onTick()}let s=[0,0];t.forEach(u=>{!je(u.x)||!je(u.y)||(s[0]+=u.x,s[1]+=u.y)}),s[0]/=t.length,s[1]/=t.length;let l=[i[0]-s[0],i[1]-s[1]];t.forEach((u,f)=>{!je(u.x)||!je(u.y)||(u.x+=l[0],u.y+=l[1])}),e.combos.forEach(u=>{let f=o[u.id];f&&f.empty&&(u.x=f.cx||u.x,u.y=f.cy||u.y)}),e.previousLayouted=!0}initVals(){let e=this,t=e.edges,n=e.nodes,i=e.combos,a={},o={},s={};n.forEach((L,M)=>{o[L.id]=L,s[L.id]=M}),e.nodeMap=o,e.indexMap=s;let l={};i.forEach(L=>{l[L.id]=L}),e.oriComboMap=l,e.comboMap=e.getComboMap();let u=e.preventOverlap;e.preventComboOverlap=e.preventComboOverlap||u,e.preventNodeOverlap=e.preventNodeOverlap||u;let f=e.collideStrength;f&&(e.comboCollideStrength=f,e.nodeCollideStrength=f),e.comboCollideStrength=e.comboCollideStrength?e.comboCollideStrength:0,e.nodeCollideStrength=e.nodeCollideStrength?e.nodeCollideStrength:0;for(let L=0;Ld:mf(d)?v=d:v=()=>0,this.nodeSpacing=v,!h)p=L=>L.size?ha(L.size)?(L.size[0]>L.size[1]?L.size[0]:L.size[1])/2:co(L.size)?(L.size.width>L.size.height?L.size.width:L.size.height)/2:L.size/2:10;else if(mf(h))p=L=>h(L);else if(ha(h)){let M=(h[0]>h[1]?h[0]:h[1])/2;p=O=>M}else{let L=h/2;p=M=>L}this.nodeSize=p;let m=e.comboSpacing,g;je(m)?g=()=>m:mf(m)?g=m:g=()=>0,this.comboSpacing=g;let x=e.comboPadding,b;je(x)?b=()=>x:ha(x)?b=()=>Math.max.apply(null,x):mf(x)?b=x:b=()=>0,this.comboPadding=b;let S=this.linkDistance,C;S||(S=10),je(S)?C=L=>S:C=S,this.linkDistance=C;let w=this.edgeStrength,A;w||(w=1),je(w)?A=L=>w:A=w,this.edgeStrength=A;let I=this.nodeStrength,P;I||(I=30),je(I)?P=L=>I:P=I,this.nodeStrength=P}initPos(e){this.nodes.forEach((i,a)=>{let o=i.comboId,s=e[o];o&&s?(i.x=s.cx+100/(a+1),i.y=s.cy+100/(a+1)):(i.x=100/(a+1),i.y=100/(a+1))})}getComboMap(){let e=this,t=e.nodeMap,n=e.comboTrees,i=e.oriComboMap,a={};return(n||[]).forEach(o=>{let s=[];fM(o,l=>{if(l.itemType==="node"||!i[l.id])return!0;if(a[l.id]===void 0){let c={id:l.id,name:l.id,cx:0,cy:0,count:0,depth:e.oriComboMap[l.id].depth||0,children:[]};a[l.id]=c}let u=l.children;u&&u.forEach(c=>{if(!a[c.id]&&!t[c.id])return!0;s.push(c)});let f=a[l.id];if(f.cx=0,f.cy=0,s.length===0){f.empty=!0;let c=i[l.id];f.cx=c.x,f.cy=c.y}return s.forEach(c=>{if(f.count++,c.itemType!=="node"){let d=a[c.id];je(d.cx)&&(f.cx+=d.cx),je(d.cy)&&(f.cy+=d.cy);return}let h=t[c.id];!h||(je(h.x)&&(f.cx+=h.x),je(h.y)&&(f.cy+=h.y))}),f.cx/=f.count||1,f.cy/=f.count||1,f.children=s,!0})}),a}applyComboCenterForce(e){let t=this,n=t.gravity,i=t.comboGravity||n,a=this.alpha,o=t.comboTrees,s=t.indexMap,l=t.nodeMap,u=t.comboMap;(o||[]).forEach(f=>{fM(f,c=>{if(c.itemType==="node"||!u[c.id])return!0;let d=u[c.id],p=(d.depth+1)/10*.5,v=d.cx,m=d.cy;return d.cx=0,d.cy=0,d.children.forEach(g=>{if(g.itemType!=="node"){let I=u[g.id];I&&je(I.cx)&&(d.cx+=I.cx),I&&je(I.cy)&&(d.cy+=I.cy);return}let x=l[g.id],b=x.x-v||.005,S=x.y-m||.005,C=Math.sqrt(b*b+S*S),w=s[x.id],A=i*a/C*p;e[w].x-=b*A,e[w].y-=S*A,je(x.x)&&(d.cx+=x.x),je(x.y)&&(d.cy+=x.y)}),d.cx/=d.count||1,d.cy/=d.count||1,!0})})}applyCalculate(e){let t=this,n=t.comboMap,i=t.nodes,a={};i.forEach((s,l)=>{i.forEach((u,f)=>{if(l{let u=[];fM(l,f=>{if(f.itemType==="node")return!0;let c=e[f.id];if(!c)return!1;let h=f.children;h&&h.forEach(v=>{!e[v.id]&&!i[v.id]||u.push(v)}),c.minX=1/0,c.minY=1/0,c.maxX=-1/0,c.maxY=-1/0,u.forEach(v=>{if(v.itemType!=="node")return!0;let m=i[v.id];if(!m)return!0;let g=a(m),x=m.x-g,b=m.y-g,S=m.x+g,C=m.y+g;c.minX>x&&(c.minX=x),c.minY>b&&(c.minY=b),c.maxX{if(!t[l.id]&&!s[l.id]&&l.id!=="comboTreeRoot")return!1;let u=l.children;return u&&u.length>1&&u.forEach((f,c)=>{if(f.itemType==="node")return!1;let h=t[f.id];!h||u.forEach((d,p)=>{if(c<=p||d.itemType==="node")return!1;let v=t[d.id];if(!v)return!1;let m=h.cx-v.cx||.005,g=h.cy-v.cy||.005,x=m*m+g*g,b=h.r||1,S=v.r||1,C=b+S,w=S*S,A=b*b;if(x{if(D.itemType!=="node")return!1;if(!s[D.id])return;let N=o[D.id];P.forEach(z=>{if(z.itemType!=="node"||!s[z.id])return!1;let j=o[z.id];e[N].x+=O*k,e[N].y+=F*k,e[j].x-=O*G,e[j].y-=F*G})})}})}),!0})}calRepulsive(e,t){let n=this,i=n.nodes,a=n.width*n.optimizeRangeFactor,o=n.nodeStrength,s=n.alpha,l=n.nodeCollideStrength,u=n.preventNodeOverlap,f=n.nodeSize,c=n.nodeSpacing,h=n.depthRepulsiveForceScale,d=n.center;i.forEach((p,v)=>{if(!(!p.x||!p.y)){if(d){let m=n.gravity,g=p.x-d[0]||.005,x=p.y-d[1]||.005,b=Math.sqrt(g*g+x*x);e[v].x-=g*m*s/b,e[v].y-=x*m*s/b}i.forEach((m,g)=>{if(v===g||!m.x||!m.y)return;let{vl2:x,vl:b}=t[`${p.id}-${m.id}`];if(b>a)return;let{vx:S,vy:C}=t[`${p.id}-${m.id}`],w=Math.log(Math.abs(m.depth-p.depth)/10)+1||1;w=w<1?1:w,m.comboId!==p.comboId&&(w+=1);let A=w?Math.pow(h,w):1,I=o(m)*s/x*A;if(e[v].x+=S*I,e[v].y+=C*I,v{let h=xn(f,"source"),d=xn(f,"target");if(!h||!d||h===d)return;let p=n.indexMap[h],v=n.indexMap[d],m=n.nodeMap[h],g=n.nodeMap[d];if(!m||!g)return;let x=m.depth===g.depth?0:Math.log(Math.abs(m.depth-g.depth)/10);m.comboId===g.comboId&&(x=x/2);let b=x?Math.pow(u,x):1;if(m.comboId!==g.comboId&&b===1?b=u/2:m.comboId===g.comboId&&(b=2),!je(g.x)||!je(m.x)||!je(g.y)||!je(m.y))return;let{vl:S,vx:C,vy:w}=t[`${d}-${h}`],A=(S-a(f))/S*o*s(f)*b,I=C*A,P=w*A,L=l[c];e[v].x-=I*L,e[v].y-=P*L,e[p].x+=I*(1-L),e[p].y+=P*(1-L)})}getType(){return"comboForce"}};var CS=class{constructor(e){this.id=e.id||0,this.rx=e.rx,this.ry=e.ry,this.fx=0,this.fy=0,this.mass=e.mass,this.degree=e.degree,this.g=e.g||0}distanceTo(e){let t=this.rx-e.rx,n=this.ry-e.ry;return Math.hypot(t,n)}setPos(e,t){this.rx=e,this.ry=t}resetForce(){this.fx=0,this.fy=0}addForce(e){let t=e.rx-this.rx,n=e.ry-this.ry,i=Math.hypot(t,n);i=i<1e-4?1e-4:i;let a=this.g*(this.degree+1)*(e.degree+1)/i;this.fx+=a*t/i,this.fy+=a*n/i}in(e){return e.contains(this.rx,this.ry)}add(e){let t=this.mass+e.mass,n=(this.rx*this.mass+e.rx*e.mass)/t,i=(this.ry*this.mass+e.ry*e.mass)/t,a=this.degree+e.degree,o={rx:n,ry:i,mass:t,degree:a};return new CS(o)}};var nv=class{constructor(e){this.xmid=e.xmid,this.ymid=e.ymid,this.length=e.length,this.massCenter=e.massCenter||[0,0],this.mass=e.mass||1}getLength(){return this.length}contains(e,t){let n=this.length/2;return e<=this.xmid+n&&e>=this.xmid-n&&t<=this.ymid+n&&t>=this.ymid-n}NW(){let e=this.xmid-this.length/4,t=this.ymid+this.length/4,n=this.length/2,i={xmid:e,ymid:t,length:n};return new nv(i)}NE(){let e=this.xmid+this.length/4,t=this.ymid+this.length/4,n=this.length/2,i={xmid:e,ymid:t,length:n};return new nv(i)}SW(){let e=this.xmid-this.length/4,t=this.ymid-this.length/4,n=this.length/2,i={xmid:e,ymid:t,length:n};return new nv(i)}SE(){let e=this.xmid+this.length/4,t=this.ymid-this.length/4,n=this.length/2,i={xmid:e,ymid:t,length:n};return new nv(i)}};var iv=class{constructor(e){this.body=null,this.quad=null,this.NW=null,this.NE=null,this.SW=null,this.SE=null,this.theta=.5,e!=null&&(this.quad=e)}insert(e){if(this.body==null){this.body=e;return}this._isExternal()?(this.quad&&(this.NW=new iv(this.quad.NW()),this.NE=new iv(this.quad.NE()),this.SW=new iv(this.quad.SW()),this.SE=new iv(this.quad.SE())),this._putBody(this.body),this._putBody(e),this.body=this.body.add(e)):(this.body=this.body.add(e),this._putBody(e))}_putBody(e){!this.quad||(e.in(this.quad.NW())&&this.NW?this.NW.insert(e):e.in(this.quad.NE())&&this.NE?this.NE.insert(e):e.in(this.quad.SW())&&this.SW?this.SW.insert(e):e.in(this.quad.SE())&&this.SE&&this.SE.insert(e))}_isExternal(){return this.NW==null&&this.NE==null&&this.SW==null&&this.SE==null}updateForce(e){if(!(this.body==null||e===this.body))if(this._isExternal())e.addForce(this.body);else{let t=this.quad?this.quad.getLength():0,n=this.body.distanceTo(e);t/n{},this.prune=void 0,this.updateCfg(e)}getDefaultCfg(){return{}}execute(){let e=this,{nodes:t,onLayoutEnd:n,prune:i}=e,a=e.maxIteration;!e.width&&typeof window!="undefined"&&(e.width=window.innerWidth),!e.height&&typeof window!="undefined"&&(e.height=window.innerHeight);let o=[],s=t.length;for(let l=0;l250&&(e.barnesHut=!0),e.prune===void 0&&s>100&&(e.prune=!0),this.maxIteration===0&&!e.prune?(a=250,s<=200&&s>100?a=1e3:s>200&&(a=1200),this.maxIteration=a):this.maxIteration===0&&i&&(a=100,s<=200&&s>100?a=500:s>200&&(a=950),this.maxIteration=a),e.kr||(e.kr=50,s>100&&s<=500?e.kr=20:s>500&&(e.kr=1)),e.kg||(e.kg=20,s>100&&s<=500?e.kg=10:s>500&&(e.kg=1)),this.nodes=e.updateNodesByForces(o),n()}updateNodesByForces(e){let t=this,{edges:n,maxIteration:i}=t,a=t.nodes,o=n.filter(p=>{let v=xn(p,"source"),m=xn(p,"target");return v!==m}),s=a.length,l=o.length,u=[],f={},c={},h=[];for(let p=0;p0;){for(let C=0;Cm||!f)?g=this.getOptRepGraForces(g,b,a):g=this.getRepGraForces(v,m,g,p,o,a);let S=this.updatePos(g,x,d,a);l=S.nodes,d=S.sg,v--,s.tick&&s.tick()}return l}getAttrForces(e,t,n,i,a,o,s,l){let u=this,{nodes:f,preventOverlap:c,dissuadeHubs:h,mode:d,prune:p}=u;for(let v=0;v0&&(w=C,A=C),l[2*i[m.id]]+=w*S[0],l[2*i[x.id]]-=A*S[0],l[2*i[m.id]+1]+=w*S[1],l[2*i[x.id]+1]-=A*S[1]}return l}getRepGraForces(e,t,n,i,a,o){let s=this,{nodes:l,preventOverlap:u,kr:f,kg:c,center:h,prune:d}=s,p=l.length;for(let v=0;v0&&(w=f*(o[v]+1)*(o[b]+1)/C),n[2*v]-=w*S[0],n[2*b]+=w*S[0],n[2*v+1]-=w*S[1],n[2*b+1]+=w*S[1]}let m=[l[v].x-h[0],l[v].y-h[1]],g=Math.hypot(m[0],m[1]);m[0]=m[0]/g,m[1]=m[1]/g;let x=c*(o[v]+1);n[2*v]-=x*m[0],n[2*v+1]-=x*m[1]}return n}getOptRepGraForces(e,t,n){let i=this,{nodes:a,kg:o,center:s,prune:l}=i,u=a.length,f=9e10,c=-9e10,h=9e10,d=-9e10;for(let x=0;x=c&&(c=a[x].x),a[x].x<=f&&(f=a[x].x),a[x].y>=d&&(d=a[x].y),a[x].y<=h&&(h=a[x].y));let p=Math.max(c-f,d-h),v={xmid:(c+f)/2,ymid:(d+h)/2,length:p,massCenter:s,mass:u},m=new nv(v),g=new iv(m);for(let x=0;x1.5*m?1.5*m:n);for(let g=0;gS?S:x;let C=x*e[2*g],w=x*e[2*g+1];o[g].x+=C,o[g].y+=w}return{nodes:o,sg:n}}};var wf=class{constructor(){this.cells=[],this.columnNum=0,this.rowNum=0,this.additionColumn=[],this.additionRow=[]}init(e,t,n){this.cells=[],this.CELL_W=n.CELL_W||wf.DEFAULT_CELL_W,this.CELL_H=n.CELL_H||wf.DEFAULT_CELL_H,this.columnNum=Math.ceil(e/this.CELL_W),this.rowNum=Math.ceil(t/this.CELL_H),wf.MIN_DIST=Math.pow(e,2)+Math.pow(t,2);for(let i=0;ie;n--)for(let i=0;i=e&&(this.additionColumn[n]+=t);for(let n=0;ne;i--)this.cells[n][i+t]=Object.assign(Object.assign({},this.cells[n][i]),{dx:n,dy:i+t,x:n*this.CELL_W,y:(i+t)*this.CELL_H}),this.cells[n][i]={dx:n,dy:i,x:n*this.CELL_W,y:i*this.CELL_H,occupied:!1,node:null};for(let n=0;n=e&&(this.additionRow[n]+=t);for(let n=0;n{let u=l.size[0]||50,f=l.size[1]||50;a=Math.min(u,a),o=Math.min(f,o)});let s=new wf;s.init(t,n,{CELL_H:o,CELL_W:a}),r.nodes.forEach(l=>{let u=s.occupyNearest(l);u&&(u.node={id:l.id,size:l.size},l.x=u.x,l.y=u.y,l.dx=u.dx,l.dy=u.dy)});for(let l=0;la){let d=Math.ceil((u.size[0]+i)/a)-1,p=d;for(let v=0;v-1&&!s.cells[c+v+1][h].node);v++)p--;s.insertColumn(c,p)}if(u.size[1]+i>o){let d=Math.ceil((u.size[1]+i)/o)-1,p=d;for(let v=0;v-1&&!s.cells[c][h+v+1].node);v++)p--;s.insertRow(h,p)}}for(let l=0;l{var d;return h.id===((d=f==null?void 0:f.node)===null||d===void 0?void 0:d.id)});c&&(c.x=f.x+c.size[0]/2,c.y=f.y+c.size[1]/2)}}}var twt=1200,ewt=800,BN=1e7,ZM=10,rwt=3.141592653589793,ZY=1.5707963267948966,hhe=rwt*.375,dhe=rwt*.625,GN=new Map,phe=10,vhe=10,$Y=.8,nwt=.1,mhe=.5;function ghe(r,e,t){let n=r.x-r.size[0]/2,i=r.y-r.size[1]/2,a=r.x+r.size[0]/2,o=r.y+r.size[1]/2,s=e.x-e.size[0]/2,l=e.y-e.size[1]/2,u=e.x+e.size[0]/2,f=e.y+e.size[1]/2,c=r.x,h=r.y,d=e.x,p=e.y,v=d-c,m=Math.atan2(v,p-h),g=0,x=0,b=0,S=0;m>ZY?(x=i-f,g=s-a,b=parseFloat(x?(x/Math.cos(m)).toFixed(2):g.toFixed(2)),S=parseFloat(g?(g/Math.sin(m)).toFixed(2):x.toFixed(2))):0g?b=S=parseFloat(x?(x/Math.cos(m)).toFixed(2):g.toFixed(2)):b=S=parseFloat(g?(g/Math.sin(m)).toFixed(2):x.toFixed(2))):m<-ZY?(x=i-f,g=-(u-n),x>g?b=S=parseFloat(x?(x/Math.cos(m)).toFixed(2):g.toFixed(2)):b=S=parseFloat(g?(g/Math.sin(m)).toFixed(2):x.toFixed(2))):(x=l-o,Math.abs(v)>(a-n)/2?g=n-u:g=v,x>g?b=S=parseFloat(x?(x/Math.cos(m)).toFixed(2):g.toFixed(2)):b=S=parseFloat(g&&m!==0?(g/Math.sin(m)).toFixed(2):x.toFixed(2)));let C=parseFloat(m.toFixed(2)),w=t;return t&&(w=hheA.source===e.id||A.target===e.id),i=r.size[0]*r.size[1],a=e.size[0]*e.size[1],o=i>a?e:r,s=i>a?r:e,l=o.x-o.size[0]/2,u=o.y-o.size[1]/2,f=o.x+o.size[0]/2,c=o.y+o.size[1]/2,h=s.x-s.size[0]/2,d=s.y-s.size[1]/2,p=s.x+s.size[0]/2,v=s.y+s.size[1]/2,m=o.x,g=o.y,x=s.x,b=s.y,S=f>=h&&p>=l&&c>=d&&v>=u,C=0,w=0;if(S){w=Math.sqrt(Math.pow(x-m,2)+Math.pow(b-g,2));let A=l>h?l:h,I=u>d?u:d,P=ftwt||n.y>ewt)&&(e+=1e12);for(let i=t+1;i{i.set(l.id,l)});let a=n.filter(l=>l.source===r.id||l.target===r.id)||[],o=[];a.forEach(l=>{let u=l.source===r.id?l.target:l.source,f=i.get(u);f&&o.push(f)});let s=!0;for(let l=0;l150,d=c<30||c>150,p=f>70&&f<110,v=c>70&&c<110;if(h&&!d||f*c<0){s=!1;break}else if(p&&!v||f*c<0){s=!1;break}else if((u.x-r.x)*(u.x-e.x)<0){s=!1;break}else if((u.y-r.y)*(u.y-e.y)<0){s=!1;break}}return s}function xhe(r,e){let t=!1,n=1,i=phe*n,a=vhe*n,o=[i,-i,0,0],s=[0,0,a,-a];for(let l=0;lnwt?(f=d,t=!0):(u.x-=o[c],u.y-=s[c])}}return $Y>nwt&&($Y*=mhe),t?awt(r):0}function owt(r,e){let t=0;(r.x<0||r.y<0||r.x+r.size[0]+20>twt||r.y+r.size[1]+20>ewt)&&(t+=1e12);for(let n=0;n{let u=e.filter(f=>f.source===l.id||f.target===l.id);GN.set(l,u)}),r.sort((l,u)=>{var f,c;return((f=GN.get(l.id))===null||f===void 0?void 0:f.length)-((c=GN.get(u.id))===null||c===void 0?void 0:c.length)});let t=awt(r),n=20,i=1,a=0,o=50,s=0;for(;n>0&&(s++,!(s>=o));){let l=xhe(r,e);l!==0&&(a=l),i=a-t,t=a,i===0?--n:n=20}return r.forEach(l=>{l.x=l.x-l.size[0]/2,l.y=l.y-l.size[1]/2}),{nodes:r,edges:e}}var swt=bhe;function QY(r,e){let{nodes:t,edges:n}=r,i=e.width,a=e.height;if(!(t==null?void 0:t.length))return Promise.resolve();let o=[];t.forEach(p=>{if(n.filter(m=>m.source===p.id||m.target===p.id).length>1){let m=Object.assign({},p);delete m.size,o.push(m)}});let s=[];n.forEach(p=>{let v=o.find(g=>g.id===p.source),m=o.find(g=>g.id===p.target);v&&m&&s.push(p)});let l=new yg({type:"dagre",ranksep:e.nodeMinGap,nodesep:e.nodeMinGap}),{nodes:u}=l.layout({nodes:o,edges:s});t.forEach(p=>{let v=(u||[]).find(m=>m.id===p.id);p.x=(v==null?void 0:v.x)||i/2,p.y=(v==null?void 0:v.y)||a/2});let f=JSON.parse(JSON.stringify(t)),c=JSON.parse(JSON.stringify(n)),h=B0().nodes(f).force("link",gg(c).id(p=>p.id).distance(p=>s.find(m=>m.source===p.source&&m.target===p.target)?30:20)).force("charge",G0()).force("center",cM(i/2,a/2)).force("x",dM(i/2)).force("y",pM(a/2)).alpha(.3).alphaDecay(.08).alphaMin(.001);return new Promise(p=>{h.on("end",()=>{t.forEach(C=>{let w=f.find(A=>A.id===C.id);w&&(C.x=w.x,C.y=w.y)});let v=Math.min(...t.map(C=>C.x)),m=Math.max(...t.map(C=>C.x)),g=Math.min(...t.map(C=>C.y)),x=Math.max(...t.map(C=>C.y)),b=i/(m-v),S=a/(x-g);t.forEach(C=>{C.x!==void 0&&b<1&&(C.x=(C.x-v)*b),C.y!==void 0&&S<1&&(C.y=(C.y-g)*S)}),t.forEach(C=>{C.sizeTemp=C.size,C.size=[10,10]}),swt(t,n),t.forEach(C=>{C.size=C.sizeTemp||[],delete C.sizeTemp}),KY({nodes:t,edges:n},e),p()})})}var zN=class extends li{constructor(e){super();this.width=300,this.height=300,this.nodeMinGap=50,this.onLayoutEnd=()=>{},e&&this.updateCfg(e)}getDefaultCfg(){return{width:300,height:300,nodeMinGap:50}}execute(){let e=this,t=e.nodes,n=e.edges;return t==null||t.forEach(i=>{i.size||(i.size=[50,50])}),QY({nodes:t,edges:n},{width:this.width,height:this.height,nodeMinGap:this.nodeMinGap}).then(()=>{e.onLayoutEnd&&e.onLayoutEnd()})}getType(){return"er"}};var Ig={force:j_,fruchterman:q_,forceAtlas2:wS,gForce:z_,dagre:yg,circular:W_,radial:H_,concentric:Y_,grid:B_,mds:X_,comboForce:SS,random:G_,"gForce-gpu":_S,"fruchterman-gpu":bS,er:zN};var iX=U(tX());var eX={};Dn(eX,{arrayToTextureData:()=>Mhe,attributesToTextureData:()=>Ahe,buildTextureData:()=>Che,buildTextureDataWithOneEdgeAttr:()=>whe,buildTextureDataWithTwoEdgeAttr:()=>Ehe,proccessToFunc:()=>She,radialLayout:()=>The});var lwt=U(q()),uwt=Pa.traverseTree,She=function(e,t){var n;return e?(0,lwt.isNumber)(e)?n=function(a){return e}:n=e:n=function(a){return t||1},n},Che=function(e,t){var n=[],i=[],a={},o=0;for(o=0;o=0&&(s="x",o="y");var l=0;uwt(e,function(c){return l++,c.x>a.x&&(a.x=c.x),c.xa.y&&(a.y=c.y),c.yrX});var rX=function r(){return typeof window=="undefined"||typeof document=="undefined"?{}:{canvas:!!window.CanvasRenderingContext2D,webgl:function(){try{var e=document.createElement("canvas");return!!(window.WebGLRenderingContext&&(e.getContext("webgl")||e.getContext("experimental-webgl")))}catch(t){return!1}}(),workers:!!window.Worker,fileapi:window.File&&window.FileReader&&window.FileList&&window.Blob,getWebGLErrorMessage:function(){var t=document.createElement("div");return t.id="webgl-error-message",t.style.fontFamily="monospace",t.style.fontSize="13px",t.style.fontWeight="normal",t.style.textAlign="center",t.style.background="#fff",t.style.color="#000",t.style.padding="1.5em",t.style.width="400px",t.style.margin="5em auto 0",this.webgl||(t.innerHTML=window.WebGLRenderingContext?['Your graphics card does not seem to support WebGL.
      ','Find out how to get it here.'].join(` +`):['Your browser does not seem to support WebGL.
      ','Find out how to get it here.'].join(` +`)),t},addGetWebGLMessage:function(t){t=t||{};var n=t.parent!==void 0?t.parent:document.body,i=t.id!==void 0?t.id:"oldie",a=r().getWebGLErrorMessage();a.id=i,n.appendChild(a)}}};var Ihe=E(E(E(E({},Pa),y8),eX),nX),al=Ihe;var Lhe=al.radialLayout,Ohe=function(){function r(e){this.type=e.type,this.radial=e.radial,this.config=e}return r.prototype.init=function(e){var t=this;if(this.data=e,this.radial){this.layoutMethod=function(n){var i=iX.default[t.type](n,t.config);return Lhe(i),i};return}this.layoutMethod=function(n){return iX.default[t.type](n,t.config)}},r.prototype.execute=function(){return this.layoutMethod(this.data,this.config)},r.prototype.layout=function(e){return this.init(e),this.execute()},r}(),aX=Ohe;fs("grid",B_);fs("random",G_);fs("force",j_);fs("circular",W_);fs("dagre",yg);fs("radial",H_);fs("concentric",Y_);fs("mds",X_);fs("fruchterman",q_);fs("fruchterman-gpu",bS);fs("gForce",z_);fs("gForce-gpu",_S);fs("comboForce",SS);fs("forceAtlas2",wS);var fwt=function(e,t){t.isCustomLayout=!0,Ig[e]=fs(e,t)};var Dhe=function(){function r(e,t){var n=e.toString(),i=new Blob(["importScripts('".concat(t,"');(").concat(n,")()")],{type:"text/javascript"});return new Worker(URL.createObjectURL(i))}return r}(),cwt=Dhe;var hwt=function(e){e===void 0&&(e="https://unpkg.com/@antv/layout@latest/dist/layout.min.js");function t(){var i={RUN:"LAYOUT_RUN",END:"LAYOUT_END",ERROR:"LAYOUT_ERROR",TICK:"LAYOUT_TICK",GPURUN:"GPU_LAYOUT_RUN",GPUEND:"GPU_LAYOUT_END"};layout.registerLayout("grid",layout.GridLayout),layout.registerLayout("random",layout.RandomLayout),layout.registerLayout("force",layout.ForceLayout),layout.registerLayout("circular",layout.CircularLayout),layout.registerLayout("dagre",layout.DagreLayout),layout.registerLayout("radial",layout.RadialLayout),layout.registerLayout("concentric",layout.ConcentricLayout),layout.registerLayout("mds",layout.MDSLayout),layout.registerLayout("fruchterman",layout.FruchtermanLayout),layout.registerLayout("fruchterman-gpu",layout.FruchtermanGPULayout),layout.registerLayout("gForce",layout.GForceLayout),layout.registerLayout("gForce-gpu",layout.GForceGPULayout),layout.registerLayout("comboForce",layout.ComboForceLayout),layout.registerLayout("forceAtlas2",layout.ForceAtlas2Layout);function a(s){var l=s.data.type;return l===i.RUN||l===i.GPURUN}function o(s){var l=this,u=s.data.type;switch(u){case i.RUN:{var f=s.data,c=f.nodes,h=f.edges,d=f.layoutCfg,p=d===void 0?{}:d,v=p.type,m=layout.getLayoutByName(v);if(!m){this.postMessage({type:i.ERROR,message:"layout ".concat(v," not found")});break}var g;p.onLayoutEnd=function(){l.postMessage({type:i.END,nodes:c}),g==null||g.destroy()},g=new m(p),g.init({nodes:c,edges:h}),g.execute();break}case i.GPURUN:{var x=s.data,b=x.nodes,h=x.edges,S=x.layoutCfg,p=S===void 0?{}:S,C=x.canvas,v=p.type,m=layout.getLayoutByName(v);if(!m){this.postMessage({type:i.ERROR,message:"layout ".concat(v," not found")});break}if(v.split("-")[1]!=="gpu"){this.postMessage({type:i.ERROR,message:"layout ".concat(v," does not support GPU")});break}var w=new m(p);w.init({nodes:b,edges:h}),w.executeWithWorker(C,this);break}default:break}}onmessage=function(l){a(l)&&o(l)}}var n=new cwt(t,e);return n};var ux={RUN:"LAYOUT_RUN",END:"LAYOUT_END",ERROR:"LAYOUT_ERROR",TICK:"LAYOUT_TICK",GPURUN:"GPU_LAYOUT_RUN",GPUEND:"GPU_LAYOUT_END"};var UN=U(q());function oX(r){return oX=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},oX(r)}var dwt=function(e){return setTimeout(e,16)},pwt=function(e){return clearTimeout(e)},jN={requestAnimationFrame:function(e){var t=typeof window!="undefined"&&(window.requestAnimationFrame||window.webkitRequestAnimationFrame)||dwt;return t(e)},cancelAnimationFrame:function(e){var t=typeof window!="undefined"&&(window.cancelAnimationFrame||window.webkitCancelAnimationFrame)||pwt;return t(e)}},Phe=["fruchterman","gForce"],khe=["force","grid","circular"],Rhe=function(r){H(e,r);function e(t){var n=r.call(this,t)||this;return n.graph=t,n.layoutCfg=t.get("layout")||{},n.layoutType=n.getLayoutType(),n.worker=null,n.workerData={},n.initLayout(),n}return e.prototype.initLayout=function(){},e.prototype.getWorker=function(){return this.worker?this.worker:(typeof Worker=="undefined"?(console.warn("Web worker is not supported in current browser."),this.worker=null):this.worker=hwt(this.layoutCfg.workerScriptURL),this.worker)},e.prototype.stopWorker=function(){var t=this.workerData;!this.worker||(this.worker.terminate(),this.worker=null,t.requestId&&(jN.cancelAnimationFrame(t.requestId),t.requestId=null),t.requestId2&&(jN.cancelAnimationFrame(t.requestId2),t.requestId2=null))},e.prototype.execLayoutMethod=function(t,n){var i=this;return new Promise(function(a,o){return Yf(i,void 0,void 0,function(){var s,l,u,f,c,h,d,p,c,v;return Xf(this,function(m){switch(m.label){case 0:if(s=this.graph,!s||s.get("destroyed"))return[2];l=t.type,t.onLayoutEnd=function(){s.emit("aftersublayout",{type:l}),a()},l&&this.isGPU&&(this.hasGPUVersion(l)?l="".concat(l,"-gpu"):console.warn("The '".concat(l,"' layout does not support GPU calculation for now, it will run in CPU."))),u=l==="force"||l==="g6force"||l==="gForce",u?(f=t.onTick,c=function(){f&&f(),s.refreshPositions()},t.tick=c):t.type==="comboForce"&&(t.comboTrees=s.get("comboTrees")),h=!1;try{d=new Ig[l](t)}catch(g){console.warn("The layout method: '".concat(l,"' does not exist! Please specify it first.")),o()}return h=d.enableTick,h&&(p=t.onTick,c=function(){p&&p(),s.refreshPositions()},d.tick=c),v=this.filterLayoutData(this.data,t),Bhe(v,n),d.init(v),s.emit("beforesublayout",{type:l}),[4,d.execute()];case 1:return m.sent(),d.isCustomLayout&&t.onLayoutEnd&&t.onLayoutEnd(),this.layoutMethods[n]=d,[2]}})})})},e.prototype.updateLayoutMethod=function(t,n){var i=this;return new Promise(function(a,o){return Yf(i,void 0,void 0,function(){var s,l,u;return Xf(this,function(f){switch(f.label){case 0:return s=this.graph,l=n==null?void 0:n.type,n.onLayoutEnd=function(){s.emit("aftersublayout",{type:l}),a()},u=this.filterLayoutData(this.data,n),t.init(u),t.updateCfg(n),s.emit("beforesublayout",{type:l}),[4,t.execute()];case 1:return f.sent(),t.isCustomLayout&&n.onLayoutEnd&&n.onLayoutEnd(),[2]}})})})},e.prototype.layout=function(t){var n=this,i=this.graph;this.data=this.setDataFromGraph();var a=this.data,o=a.nodes,s=a.hiddenNodes;if(!o)return!1;var l=i.get("width"),u=i.get("height"),f={};Object.assign(f,{width:l,height:u,center:[l/2,u/2]},this.layoutCfg),this.layoutCfg=f,this.destoryLayoutMethods(),i.emit("beforelayout"),this.initPositions(f.center,o),this.initPositions(f.center,s);var c=f.type;c&&c.split("-")[1]==="gpu"&&(c=c.split("-")[0],f.gpuEnabled=!0);var h=!1;f.gpuEnabled&&(h=!0,rX().webgl||(console.warn("Your browser does not support webGL or GPGPU. The layout will run in CPU."),h=!1)),this.isGPU=h;var d=f.onLayoutEnd,p=f.layoutEndFormatted,v=f.adjust;if(p||(f.layoutEndFormatted=!0,f.onAllLayoutEnd=function(){return Yf(n,void 0,void 0,function(){return Xf(this,function(g){switch(g.label){case 0:return d&&d(),this.refreshLayout(),v&&f.pipes?[4,this.adjustPipesBox(this.data,v)]:[3,2];case 1:g.sent(),this.refreshLayout(),g.label=2;case 2:return i.emit("afterlayout"),[2]}})})}),this.stopWorker(),f.workerEnabled&&this.layoutWithWorker(this.data))return!0;var m=Promise.resolve();return f.type?m=m.then(function(){return Yf(n,void 0,void 0,function(){return Xf(this,function(g){switch(g.label){case 0:return[4,this.execLayoutMethod(f,0)];case 1:return[2,g.sent()]}})})}):f.pipes&&f.pipes.forEach(function(g,x){m=m.then(function(){return Yf(n,void 0,void 0,function(){return Xf(this,function(b){switch(b.label){case 0:return[4,this.execLayoutMethod(g,x)];case 1:return[2,b.sent()]}})})})}),m.then(function(){f.onAllLayoutEnd&&f.onAllLayoutEnd(),t&&t()}).catch(function(g){console.warn("graph layout failed,",g)}),!1},e.prototype.layoutWithWorker=function(t){var n=this,i=this,a=i.layoutCfg,o=i.graph,s=this.getWorker(),l=this.workerData;if(!s)return!1;l.requestId=null,l.requestId2=null,l.currentTick=null,l.currentTickData=null,o.emit("beforelayout");var u=Promise.resolve();if(a.type)u=u.then(function(){return n.runWebworker(s,t,a)});else if(a.pipes)for(var f=function(v){u=u.then(function(){return n.runWebworker(s,t,v)})},c=0,h=a.pipes;c'),f=i?i.backgroundColor:void 0,c=i?i.padding:void 0;c?(0,ol.isNumber)(c)&&(c=[c,c,c,c]):c=[0,0,0,0];var h=o+c[0]+c[2],d=s+c[1]+c[3],p={container:u,height:h,width:d,quickHit:!0},v=l==="svg"?new Ah(p):new Bl(p),m=this.get("group"),g=m.clone(),x=(0,ol.clone)(g.getMatrix());x||(x=[1,0,0,0,1,0,0,0,1]);var b=(a.maxX+a.minX)/2,S=(a.maxY+a.minY)/2;x=vwt(x,[["t",-b,-S],["t",s/2+c[3],o/2+c[0]]]),g.resetMatrix(),g.setMatrix(x),v.add(g);var C=v.get("el"),w="";n||(n="image/png"),setTimeout(function(){if(l==="svg"){var A=C.cloneNode(!0),I=document.implementation.createDocumentType("svg","-//W3C//DTD SVG 1.1//EN","http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"),P=document.implementation.createDocument("http://www.w3.org/2000/svg","svg",I);P.replaceChild(A,P.documentElement);var L=new XMLSerializer().serializeToString(P);w="data:image/svg+xml;charset=utf8,".concat(encodeURIComponent(L))}else{var M=void 0,O=C.getContext("2d"),F=void 0;if(f){var k=typeof window!="undefined"?window.devicePixelRatio:1;try{M=O.getImageData(0,0,d*k,h*k),F=O.globalCompositeOperation,O.globalCompositeOperation="destination-over",O.fillStyle=f,O.fillRect(0,0,d,h)}catch(G){console.error("Download image failed. Out of memory at ImageData creation")}}w=C.toDataURL(n),f&&(O.clearRect(0,0,d,h),O.putImageData(M,0,0),O.globalCompositeOperation=F)}t&&t(w)},16)},e.prototype.downloadFullImage=function(t,n,i){var a=this,o=this.get("group").getCanvasBBox(),s=o.height,l=o.width,u=this.get("renderer"),f=en(''),c=document.querySelector(".g6-graph-watermarker"),h=i?i.backgroundColor:void 0,d=i?i.padding:void 0;d?(0,ol.isNumber)(d)&&(d=[d,d,d,d]):d=[0,0,0,0];var p=s+d[0]+d[2],v=l+d[1]+d[3];if(c){var m=this.get("graphWaterMarker").cfg||{},g=m.width,x=m.height;p=Math.ceil(p/x)*x,v=Math.ceil(v/g)*g}var b={container:f,height:p,width:v},S=u==="svg"?new Ah(b):new Bl(b),C=this.get("group"),w=C.clone(),A=(0,ol.clone)(w.getMatrix());A||(A=[1,0,0,0,1,0,0,0,1]);var I=(o.maxX+o.minX)/2,P=(o.maxY+o.minY)/2;A=vwt(A,[["t",-I,-P],["t",l/2+d[3],s/2+d[0]]]),w.resetMatrix(),w.setMatrix(A),S.add(w);var L=S.get("el");n||(n="image/png"),this.asyncToDataUrl(n,h,function(M){var O=document.createElement("a"),F=(t||"graph")+(u==="svg"?".svg":".".concat(n.split("/")[1]));a.dataURLToImage(M,u,O,F);var k=document.createEvent("MouseEvents");k.initEvent("click",!1,!1),O.dispatchEvent(k)},v,p,L)},e.prototype.downloadImage=function(t,n,i){var a=this,o=this;o.isAnimating()&&o.stopAnimate();var s=o.get("canvas"),l=s.getRenderer();n||(n="image/png");var u=(t||"graph")+(l==="svg"?".svg":n.split("/")[1]),f=document.createElement("a");o.asyncToDataUrl(n,i,function(c){a.dataURLToImage(c,l,f,u);var h=document.createEvent("MouseEvents");h.initEvent("click",!1,!1),f.dispatchEvent(h)})},e.prototype.dataURLToImage=function(t,n,i,a){if(!t||t==="data:"){console.error("Download image failed. The graph is too large or there is invalid attribute values in graph items");return}if(typeof window!="undefined")if(window.Blob&&window.URL&&n!=="svg"){var o=t.split(","),s="";if(o&&o.length>0){var l=o[0].match(/:(.*?);/);l&&l.length>=2&&(s=l[1])}for(var u=atob(o[1]),f=u.length,c=new Uint8Array(f);f--;)c[f]=u.charCodeAt(f);var h=new Blob([c],{type:s});window.navigator.msSaveBlob?window.navigator.msSaveBlob(h,a):i.addEventListener("click",function(){i.download=a,i.href=window.URL.createObjectURL(h)})}else i.addEventListener("click",function(){i.download=a,i.href=t})},e.prototype.addPlugin=function(t){var n=this;t.destroyed||(n.get("plugins").push(t),t.initPlugin(n))},e.prototype.removePlugin=function(t){var n=this.get("plugins"),i=n.indexOf(t);i>=0&&(t.destroyPlugin(),n.splice(i,1))},e.prototype.setImageWaterMarker=function(t,n){t===void 0&&(t=bc.waterMarkerImage);var i=this.get("container");(0,ol.isString)(i)&&(i=document.getElementById(i)),i.style.position||(i.style.position="relative");var a=this.get("graphWaterMarker"),o=(0,ol.deepMix)({},bc.imageWaterMarkerConfig,n),s=o.width,l=o.height,u=o.compatible,f=o.image;if(!a){var c={container:i,width:s,height:l,capture:!1},h=this.get("pixelRatio");h&&(c.pixelRatio=h),a=new Bl(c),this.set("graphWaterMarker",a)}a.get("el").style.display="none";var d=a.get("context"),p=f.rotate,v=f.x,m=f.y;d.rotate(-p*Math.PI/180);var g=new Image;g.crossOrigin="anonymous",g.src=t,g.onload=function(){if(d.drawImage(g,v,m,f.width,f.height),d.rotate(p*Math.PI/180),u)i.style.cssText="background-image: url(".concat(a.get("el").toDataURL("image/png"),");background-repeat:repeat;");else{var x=document.querySelector(".g6-graph-watermarker");x||(x=document.createElement("div"),x.className="g6-graph-watermarker"),x.className="g6-graph-watermarker",a.destroyed||(x.style.cssText="background-image: url(".concat(a.get("el").toDataURL("image/png"),");background-repeat:repeat;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none;z-index:-1;"),i.appendChild(x))}}},e.prototype.setTextWaterMarker=function(t,n){var i=this.get("container");(0,ol.isString)(i)&&(i=document.getElementById(i)),i.style.position||(i.style.position="relative");var a=this.get("graphWaterMarker"),o=(0,ol.deepMix)({},bc.textWaterMarkerConfig,n),s=o.width,l=o.height,u=o.compatible,f=o.text;if(!a){var c={container:i,width:s,height:l,capture:!1},h=this.get("pixelRatio");h&&(c.pixelRatio=h),a=new Bl(c),this.set("graphWaterMarker",a)}a.get("el").style.display="none";var d=a.get("context"),p=f.rotate,v=f.fill,m=f.fontFamily,g=f.fontSize,x=f.baseline,b=f.x,S=f.y,C=f.lineHeight;d.rotate(-p*Math.PI/180),d.font="".concat(g,"px ").concat(m),d.fillStyle=v,d.textBaseline=x;for(var w=t.length-1;w>=0;w--)d.fillText(t[w],b,S+w*C);if(d.rotate(p*Math.PI/180),u)i.style.cssText="background-image: url(".concat(a.get("el").toDataURL("image/png"),");background-repeat:repeat;");else{var A=document.querySelector(".g6-graph-watermarker");A||(A=document.createElement("div"),A.className="g6-graph-watermarker"),A.style.cssText="background-image: url(".concat(a.get("el").toDataURL("image/png"),");background-repeat:repeat;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none;z-index:99;"),i.appendChild(A)}},e.prototype.destroy=function(){var t,n,i,a;(0,ol.each)(this.get("plugins"),function(f){f.destroyPlugin()});var o=this.get("tooltips");if(o)for(var s=0;s0)for(var u=s.length-1;u>=0;u--){var f=s[u].getModel();e.indexOfChild(t.children||[],f.id)===-1&&(a.innerRemoveChild(f.id,{x:t.x,y:t.y},i),s.splice(u,1))}}var c,h;o.get("originAttrs")&&(c=o.get("originAttrs").x,h=o.get("originAttrs").y);var d=o.getModel();i&&o.set("originAttrs",{x:d.x,y:d.y}),o.set("model",t.data),(c!==t.x||h!==t.y)&&o.updatePosition({x:t.x,y:t.y})},e.prototype.innerRemoveChild=function(t,n,i){var a=this,o=a.findById(t);if(!!o)if((0,Iu.each)(o.get("children"),function(l){a.innerRemoveChild(l.getModel().id,n,i)}),i){var s=o.getModel();o.set("to",n),o.set("originAttrs",{x:s.x,y:s.y}),a.get("removeList").push(o)}else a.removeItem(o,!1)},e.prototype.changeData=function(t){var n=this;this.getNodes().map(function(i){return n.clearItemStates(i)}),this.getEdges().map(function(i){return n.clearItemStates(i)}),t?(n.data(t),n.render()):n.layout(this.get("fitView"))},e.prototype.changeLayout=function(t){console.warn("Please call updateLayout instead of changeLayout. changeLayout will be discarded soon");var n=this;n.updateLayout(t)},e.prototype.updateLayout=function(t){var n=this;if(!t){console.warn("layout cannot be null");return}n.set("layout",t),n.set("layoutMethod",n.getLayout()),n.layout()},e.prototype.refreshLayout=function(t){console.warn("Please call layout instead of refreshLayout. refreshLayout will be discarded soon");var n=this;n.layout(t)},e.prototype.layout=function(t){var n=this,i=n.get("data"),a=n.get("layoutMethod"),o=a?a(i,n.get("layout")):i,s=n.get("animate");if(n.emit("beforerefreshlayout",{data:i,layoutData:o}),n.emit("beforelayout"),n.innerUpdateChild(o,void 0,s),t){var l=n.get("viewController");l.fitView()}s?n.layoutAnimate(o):(n.refresh(),n.paint()),n.emit("afterrefreshlayout",{data:i,layoutData:o}),n.emit("afterlayout")},e.prototype.addChild=function(t,n){var i=this;i.emit("beforeaddchild",{model:t,parent:n}),(0,Iu.isString)(n)||(n=n.get("id"));var a=i.findDataById(n);a&&(a.children||(a.children=[]),a.children.push(t),i.changeData())},e.prototype.updateChildren=function(t,n){var i=this;if(!n||!i.findById(n)){console.warn("Update children failed! There is no node with id '".concat(n,"'"));return}var a=i.findDataById(n);a.children=t,i.changeData()},e.prototype.updateChild=function(t,n){var i=this;if(!n||!i.findById(n)){i.changeData(t);return}var a=i.findDataById(n),o=i.findById(t.id);if(a.children||(a.children=[]),!o)a.children.push(t);else{var s=e.indexOfChild(a.children,t.id);a.children[s]=t}i.changeData()},e.prototype.removeChild=function(t){var n=this,i=n.findById(t);if(!!i){var a=i.get("parent");if(a&&!a.destroyed){var o=n.findDataById(a.get("id")),s=o&&o.children||[],l=i.getModel(),u=e.indexOfChild(s,l.id);s.splice(u,1)}n.changeData()}},e.prototype.findDataById=function(t,n){var i=this;if(n||(n=i.get("data")),t===n.id)return n;var a=null;return(0,Iu.each)(n.children||[],function(o){if(o.id===t)return a=o,!1;if(a=i.findDataById(t,o),a)return!1}),a},e.prototype.layoutAnimate=function(t,n){var i=this,a=this.get("animateCfg");i.emit("beforeanimate",{data:t}),i.getEdges().forEach(function(o){var s=o.get("model");s.sourceAnchor||(s.sourceAnchor=o.get("sourceAnchorIndex"))}),this.get("canvas").animate(function(o){jhe(t,function(s){var l=i.findById(s.id);if(l){var u=l.get("originAttrs"),f=l.get("model");if(u||(u={x:f.x,y:f.y},l.set("originAttrs",u)),n){var c=n(l,o,u,t);l.set("model",Object.assign(f,c))}else f.x=u.x+(s.x-u.x)*o,f.y=u.y+(s.y-u.y)*o}return!0}),(0,Iu.each)(i.get("removeList"),function(s){var l=s.getModel(),u=s.get("originAttrs"),f=s.get("to");l.x=u.x+(f.x-u.x)*o,l.y=u.y+(f.y-u.y)*o}),i.refreshPositions()},{duration:a.duration,easing:a.ease,callback:function(){(0,Iu.each)(i.getNodes(),function(s){s.set("originAttrs",null)}),(0,Iu.each)(i.get("removeList"),function(s){i.removeItem(s)}),i.set("removeList",[]),a.callback&&a.callback(),i.emit("afteranimate",{data:t})},delay:a.delay})},e.prototype.stopLayoutAnimate=function(){this.get("canvas").stopAnimate(),this.emit("layoutanimateend",{data:this.get("data")}),this.layoutAnimating=!1},e.prototype.isLayoutAnimating=function(){return this.layoutAnimating},e.prototype.render=function(){var t=this,n=t.get("data");if(!n||!(0,Iu.isObject)(n)||!Object.keys(n).length)throw new Error("data must be defined first");t.clear(),t.emit("beforerender"),t.layout(this.get("fitView")),t.emit("afterrender")},e.prototype.save=function(){return this.get("data")},e}(ES),mwt=Whe;var fx=U(q()),Vhe=function(){function r(e){this._cfgs=(0,fx.deepMix)(this.getDefaultCfgs(),e),this._events={},this.destroyed=!1}return r.prototype.getDefaultCfgs=function(){return{}},r.prototype.initPlugin=function(e){var t=this;t.set("graph",e);var n=t.getEvents(),i={};(0,fx.each)(n,function(a,o){var s=(0,fx.wrapBehavior)(t,a);i[o]=s,e.on(o,s)}),this._events=i,this.init()},r.prototype.getEvents=function(){return{}},r.prototype.get=function(e){var t;return(t=this._cfgs)===null||t===void 0?void 0:t[e]},r.prototype.set=function(e,t){this._cfgs[e]=t},r.prototype.destroy=function(){},r.prototype.destroyPlugin=function(){this.destroy();var e=this.get("graph"),t=this._events;(0,fx.each)(t,function(n,i){e.off(i,n)}),this._events=null,this._cfgs=null,this.destroyed=!0},r}(),ia=Vhe;var Hhe=function(){var r=function(t,n){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,a){i.__proto__=a}||function(i,a){for(var o in a)Object.prototype.hasOwnProperty.call(a,o)&&(i[o]=a[o])},r(t,n)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),gwt="url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImdyaWQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTSAwIDEwIEwgNDAgMTAgTSAxMCAwIEwgMTAgNDAgTSAwIDIwIEwgNDAgMjAgTSAyMCAwIEwgMjAgNDAgTSAwIDMwIEwgNDAgMzAgTSAzMCAwIEwgMzAgNDAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2UwZTBlMCIgb3BhY2l0eT0iMC4yIiBzdHJva2Utd2lkdGg9IjEiLz48cGF0aCBkPSJNIDQwIDAgTCAwIDAgMCA0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIiBzdHJva2Utd2lkdGg9IjEiLz48L3BhdHRlcm4+PC9kZWZzPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JpZCkiLz48L3N2Zz4=)",Yhe=function(r){Hhe(e,r);function e(t){return r.call(this,t)||this}return e.prototype.getDefaultCfgs=function(){return{img:gwt,follow:!0}},e.prototype.init=function(){var t=this.get("graph"),n=t.get("container"),i=t.get("canvas").get("el"),a=this.get("img")||gwt,o=en(`
      `),s=en(`
      `));this.set("container",o),this.set("gridContainer",s),this.positionInit(),o.appendChild(s),n.insertBefore(o,i)},e.prototype.positionInit=function(){var t=this.get("graph"),n=t.get("minZoom"),i=t.get("width"),a=t.get("height");yr(this.get("container"),{width:"".concat(i,"px"),height:"".concat(a,"px")});var o=i*80/n,s=a*80/n;yr(this.get("gridContainer"),{width:"".concat(o,"px"),height:"".concat(s,"px"),left:"-".concat(o/2,"px"),top:"-".concat(s/2,"px")})},e.prototype.getEvents=function(){return{viewportchange:"updateGrid"}},e.prototype.updateGrid=function(t){var n=this.get("gridContainer"),i=t.matrix;i||(i=[1,0,0,0,1,0,0,0,1]);var a=this.get("follow"),o="matrix(".concat(i[0],", ").concat(i[1],", ").concat(i[3],", ").concat(i[4],", ").concat(a?i[6]:"0",", ").concat(a?i[7]:"0",")");yr(n,{transform:o})},e.prototype.getContainer=function(){return this.get("container")},e.prototype.destroy=function(){var t=this.get("graph"),n=t.get("container"),i=this.get("container");n.removeChild(i)},e}(ia),ywt=Yhe;var VN=U(q()),_wt=U(WN());var Khe=function(){var r=function(t,n){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,a){i.__proto__=a}||function(i,a){for(var o in a)Object.prototype.hasOwnProperty.call(a,o)&&(i[o]=a[o])},r(t,n)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}();typeof document!="undefined"&&(0,_wt.default)(` + .g6-component-contextmenu { + border: 1px solid #e2e2e2; + border-radius: 4px; + font-size: 12px; + color: #545454; + background-color: rgba(255, 255, 255, 0.9); + padding: 10px 8px; + box-shadow: rgb(174, 174, 174) 0px 0px 10px; } - return new (P4 || (P4 = Promise))(function(resolve, reject) { - function fulfilled(value2) { - try { - step(generator.next(value2)); - } catch (e4) { - reject(e4); - } - } - function rejected(value2) { - try { - step(generator["throw"](value2)); - } catch (e4) { - reject(e4); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var FruchtermanGPULayout = class extends Base3 { - constructor(options) { - super(); - this.maxIteration = 1e3; - this.gravity = 10; - this.speed = 1; - this.clustering = false; - this.clusterField = "cluster"; - this.clusterGravity = 10; - this.workerEnabled = false; - this.nodes = []; - this.edges = []; - this.width = 300; - this.height = 300; - this.nodeMap = {}; - this.nodeIdxMap = {}; - this.updateCfg(options); + .g6-contextmenu-ul { + padding: 0; + margin: 0; + list-style: none; } - getDefaultCfg() { - return { - maxIteration: 1e3, - gravity: 10, - speed: 1, - clustering: false, - clusterGravity: 10 - }; - } - execute() { - return __awaiter4(this, void 0, void 0, function* () { - const self2 = this; - const nodes = self2.nodes; - if (!nodes || nodes.length === 0) { - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - if (!self2.width && typeof window !== "undefined") { - self2.width = window.innerWidth; - } - if (!self2.height && typeof window !== "undefined") { - self2.height = window.innerHeight; - } - if (!self2.center) { - self2.center = [self2.width / 2, self2.height / 2]; - } - const center2 = self2.center; - if (nodes.length === 1) { - nodes[0].x = center2[0]; - nodes[0].y = center2[1]; - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - const nodeMap = {}; - const nodeIdxMap = {}; - nodes.forEach((node, i4) => { - if (!isNumber45(node.x)) - node.x = Math.random() * this.width; - if (!isNumber45(node.y)) - node.y = Math.random() * this.height; - nodeMap[node.id] = node; - nodeIdxMap[node.id] = i4; - }); - self2.nodeMap = nodeMap; - self2.nodeIdxMap = nodeIdxMap; - yield self2.run(); - }); - } - executeWithWorker(canvas, ctx3) { - return __awaiter4(this, void 0, void 0, function* () { - const self2 = this; - const nodes = self2.nodes; - const center2 = self2.center; - if (!nodes || nodes.length === 0) { - return; - } - if (nodes.length === 1) { - nodes[0].x = center2[0]; - nodes[0].y = center2[1]; - return; - } - const nodeMap = {}; - const nodeIdxMap = {}; - nodes.forEach((node, i4) => { - if (!isNumber45(node.x)) - node.x = Math.random() * this.width; - if (!isNumber45(node.y)) - node.y = Math.random() * this.height; - nodeMap[node.id] = node; - nodeIdxMap[node.id] = i4; - }); - self2.nodeMap = nodeMap; - self2.nodeIdxMap = nodeIdxMap; - yield self2.run(canvas, ctx3); - }); - } - run(canvas, ctx3) { - return __awaiter4(this, void 0, void 0, function* () { - const self2 = this; - const nodes = self2.nodes; - const edges = self2.edges; - const maxIteration = self2.maxIteration; - const center2 = self2.center; - const area2 = self2.height * self2.width; - let maxDisplace = Math.sqrt(area2) / 10; - const k22 = area2 / (nodes.length + 1); - const k4 = Math.sqrt(k22); - const speed = self2.speed; - const clustering = self2.clustering; - const { array: attributeArray, count: clusterCount } = attributesToTextureData([self2.clusterField], nodes); - nodes.forEach((node, i4) => { - let fx = 0; - let fy = 0; - if (isNumber45(node.fx) && isNumber45(node.fy)) { - fx = node.fx || 1e-3; - fy = node.fy || 1e-3; - } - attributeArray[4 * i4 + 1] = fx; - attributeArray[4 * i4 + 2] = fy; - }); - const numParticles = nodes.length; - const { maxEdgePerVetex, array: nodesEdgesArray } = buildTextureData(nodes, edges); - const workerEnabled = self2.workerEnabled; - let world; - if (workerEnabled) { - world = World.create({ - canvas, - engineOptions: { - supportCompute: true - } - }); - } else { - world = World.create({ - engineOptions: { - supportCompute: true - } - }); - } - const onLayoutEnd = self2.onLayoutEnd; - const clusterCenters = []; - for (let i4 = 0; i4 < clusterCount; i4++) { - clusterCenters.push(0, 0, 0, 0); - } - const kernelFruchterman = world.createKernel(fruchtermanBundle).setDispatch([numParticles, 1, 1]).setBinding({ - u_Data: nodesEdgesArray, - u_K: k4, - u_K2: k22, - u_Gravity: self2.gravity, - u_ClusterGravity: self2.clusterGravity || self2.gravity || 1, - u_Speed: speed, - u_MaxDisplace: maxDisplace, - u_Clustering: clustering ? 1 : 0, - u_Center: center2, - u_AttributeArray: attributeArray, - u_ClusterCenters: clusterCenters, - MAX_EDGE_PER_VERTEX: maxEdgePerVetex, - VERTEX_COUNT: numParticles - }); - let kernelCluster; - if (clustering) { - kernelCluster = world.createKernel(clusterBundle).setDispatch([clusterCount, 1, 1]).setBinding({ - u_Data: nodesEdgesArray, - u_NodeAttributes: attributeArray, - u_ClusterCenters: clusterCenters, - VERTEX_COUNT: numParticles, - CLUSTER_COUNT: clusterCount - }); - } - const execute = () => __awaiter4(this, void 0, void 0, function* () { - for (let i4 = 0; i4 < maxIteration; i4++) { - yield kernelFruchterman.execute(); - if (clustering) { - kernelCluster.setBinding({ - u_Data: kernelFruchterman - }); - yield kernelCluster.execute(); - kernelFruchterman.setBinding({ - u_ClusterCenters: kernelCluster - }); - } - kernelFruchterman.setBinding({ - u_MaxDisplace: maxDisplace *= 0.99 - }); - } - const finalParticleData = yield kernelFruchterman.getOutput(); - if (canvas) { - ctx3.postMessage({ - type: LAYOUT_MESSAGE.GPUEND, - vertexEdgeData: finalParticleData - }); - } else { - nodes.forEach((node, i4) => { - const x6 = finalParticleData[4 * i4]; - const y5 = finalParticleData[4 * i4 + 1]; - node.x = x6; - node.y = y5; - }); - } - if (onLayoutEnd) - onLayoutEnd(); - }); - yield execute(); - }); - } - getType() { - return "fruchterman-gpu"; - } -}; -// node_modules/@antv/layout/es/layout/gpu/gForceShader.js -var gForceBundle = `{"shaders":{"WGSL":"import \\"GLSL.std.450\\" as std;\\n\\n\\n# var gWebGPUDebug : bool = false;\\n# var gWebGPUDebugOutput : vec4 = vec4(0.0);\\n\\n[[builtin global_invocation_id]] var globalInvocationID : vec3;\\n# [[builtin work_group_size]] var workGroupSize : vec3;\\n# [[builtin work_group_id]] var workGroupID : vec3;\\n[[builtin local_invocation_id]] var localInvocationID : vec3;\\n# [[builtin num_work_groups]] var numWorkGroups : vec3;\\n[[builtin local_invocation_idx]] var localInvocationIndex : u32;\\n\\ntype GWebGPUParams = [[block]] struct {\\n [[offset 0]] u_damping : f32;\\n [[offset 4]] u_maxSpeed : f32;\\n [[offset 8]] u_minMovement : f32;\\n \\n [[offset 12]] u_coulombDisScale : f32;\\n [[offset 16]] u_factor : f32;\\n \\n \\n [[offset 20]] u_interval : f32;\\n};\\n[[binding 0, set 0]] var gWebGPUUniformParams : GWebGPUParams;\\ntype GWebGPUBuffer0 = [[block]] struct {\\n [[offset 0]] u_Data : [[stride 16]] array>;\\n};\\n[[binding 1, set 0]] var gWebGPUBuffer0 : GWebGPUBuffer0;\\ntype GWebGPUBuffer1 = [[block]] struct {\\n [[offset 0]] u_AveMovement : [[stride 16]] array>;\\n};\\n[[binding 2, set 0]] var gWebGPUBuffer1 : GWebGPUBuffer1;\\ntype GWebGPUBuffer2 = [[block]] struct {\\n [[offset 0]] u_NodeAttributeArray1 : [[stride 16]] array>;\\n};\\n[[binding 3, set 0]] var gWebGPUBuffer2 : GWebGPUBuffer2;\\ntype GWebGPUBuffer3 = [[block]] struct {\\n [[offset 0]] u_NodeAttributeArray2 : [[stride 16]] array>;\\n};\\n[[binding 4, set 0]] var gWebGPUBuffer3 : GWebGPUBuffer3;\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nfn unpack_float(packedValue : f32) -> vec2 {var packedIntValue : i32 = i32(packedValue);\\nvar v0 : i32 = packedIntValue / 1048576;\\nreturn vec2(v0, packedIntValue - (v0 * 1048576));}\\nfn calcRepulsive(i : i32, currentNode : vec4) -> vec2 {var ax : f32 = 0.0;\\nvar ay : f32 = 0.0;\\nfor (var j : i32 = 0; j < __DefineValuePlaceholder__VERTEX_COUNT; j = j + 1) {if (i != j) {var nextNode : vec4 = gWebGPUBuffer0.u_Data[j];\\nvar vx : f32 = currentNode.x - nextNode.x;\\nvar vy : f32 = currentNode.y - nextNode.y;\\nvar dist : f32 = std::sqrt((vx * vx) + (vy * vy)) + 0.01;\\nvar n_dist : f32 = (dist + 0.1) * gWebGPUUniformParams.u_coulombDisScale;\\nvar direx : f32 = vx / dist;\\nvar direy : f32 = vy / dist;\\nvar attributesi : vec4 = gWebGPUBuffer2.u_NodeAttributeArray1[i];\\nvar attributesj : vec4 = gWebGPUBuffer2.u_NodeAttributeArray1[j];\\nvar massi : f32 = attributesi.x;\\nvar nodeStrengthi : f32 = attributesi.z;\\nvar nodeStrengthj : f32 = attributesj.z;\\nvar nodeStrength : f32 = (nodeStrengthi + nodeStrengthj) / 2.0;\\nvar param : f32 = (nodeStrength * gWebGPUUniformParams.u_factor) / (n_dist * n_dist);\\nax = ax + direx * param;\\nay = ay + direy * param;}}\\nreturn vec2(ax, ay);}\\nfn calcGravity(i : i32, currentNode : vec4, attributes2 : vec4) -> vec2 {var vx : f32 = currentNode.x - attributes2.x;\\nvar vy : f32 = currentNode.y - attributes2.y;\\nvar ax : f32 = vx * attributes2.z;\\nvar ay : f32 = vy * attributes2.z;\\nreturn vec2(ax, ay);}\\nfn calcAttractive(i : i32, currentNode : vec4, attributes1 : vec4) -> vec2 {var mass : f32 = attributes1.x;\\nvar ax : f32 = 0.0;\\nvar ay : f32 = 0.0;\\nvar compressed : vec2 = unpack_float(currentNode.z);\\nvar length : i32 = compressed.x;\\nvar arr_offset : i32 = compressed.y;\\nvar node_buffer : vec4;\\nfor (var p : i32 = 0; p < __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX; p = p + 1) {if (p >= length) {break;}\\nvar arr_idx : i32 = arr_offset + (4 * p);\\nvar buf_offset : i32 = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = gWebGPUBuffer0.u_Data[i32(arr_idx / 4)];}\\nvar float_j : f32 = node_buffer.x;\\nvar nextNode : vec4 = gWebGPUBuffer0.u_Data[i32(float_j)];\\nvar vx : f32 = nextNode.x - currentNode.x;\\nvar vy : f32 = nextNode.y - currentNode.y;\\nvar dist : f32 = std::sqrt((vx * vx) + (vy * vy)) + 0.01;\\nvar direx : f32 = vx / dist;\\nvar direy : f32 = vy / dist;\\nvar edgeLength : f32 = node_buffer.y;\\nvar edgeStrength : f32 = node_buffer.z;\\nvar diff : f32 = edgeLength - dist;\\nvar param : f32 = (diff * edgeStrength) / mass;\\nax = ax - direx * param;\\nay = ay - direy * param;}\\nreturn vec2(ax, ay);}\\nfn main() -> void {var i : i32 = globalInvocationID.x;\\nvar currentNode : vec4 = gWebGPUBuffer0.u_Data[i];\\nvar movement : vec4 = gWebGPUBuffer1.u_AveMovement[0];\\nvar ax : f32 = 0.0;\\nvar ay : f32 = 0.0;\\nif ((i >= __DefineValuePlaceholder__VERTEX_COUNT) || (movement.x < gWebGPUUniformParams.u_minMovement)) {gWebGPUBuffer0.u_Data[i] = currentNode;\\nreturn ;}\\nvar nodeAttributes1 : vec4 = gWebGPUBuffer2.u_NodeAttributeArray1[i];\\nvar nodeAttributes2 : vec4 = gWebGPUBuffer3.u_NodeAttributeArray2[i];\\nvar repulsive : vec2 = calcRepulsive(i, currentNode);\\nax = ax + repulsive.x;\\nay = ay + repulsive.y;\\nvar attractive : vec2 = calcAttractive(i, currentNode, nodeAttributes1);\\nax = ax + attractive.x;\\nay = ay + attractive.y;\\nvar gravity : vec2 = calcGravity(i, currentNode, nodeAttributes2);\\nax = ax - gravity.x;\\nay = ay - gravity.y;\\nvar param : f32 = gWebGPUUniformParams.u_interval * gWebGPUUniformParams.u_damping;\\nvar vx : f32 = ax * param;\\nvar vy : f32 = ay * param;\\nvar vlength : f32 = std::sqrt((vx * vx) + (vy * vy)) + 0.0001;\\nif (vlength > gWebGPUUniformParams.u_maxSpeed) {var param2 : f32 = gWebGPUUniformParams.u_maxSpeed / vlength;\\nvx = param2 * vx;\\nvy = param2 * vy;}\\nvar distx : f32 = vx * gWebGPUUniformParams.u_interval;\\nvar disty : f32 = vy * gWebGPUUniformParams.u_interval;\\nvar distLength : f32 = std::sqrt((distx * distx) + (disty * disty));\\nif ((nodeAttributes1.w != 0.0) && (nodeAttributes2.w != 0.0)) {gWebGPUBuffer0.u_Data[i] = vec4(nodeAttributes1.w, nodeAttributes2.w, currentNode.z, 0.0);}else {gWebGPUBuffer0.u_Data[i] = vec4(currentNode.x + distx, currentNode.y + disty, currentNode.z, distLength);}\\nreturn;}\\n\\nentry_point compute as \\"main\\" = main;\\n","GLSL450":"\\n\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\nivec3 globalInvocationID = ivec3(gl_GlobalInvocationID);\\nivec3 workGroupSize = ivec3(1,1,1);\\nivec3 workGroupID = ivec3(gl_WorkGroupID);\\nivec3 localInvocationID = ivec3(gl_LocalInvocationID);\\nivec3 numWorkGroups = ivec3(gl_NumWorkGroups);\\nint localInvocationIndex = int(gl_LocalInvocationIndex);\\n\\nlayout(std140, set = 0, binding = 0) uniform GWebGPUParams {\\n float u_damping;\\n float u_maxSpeed;\\n float u_minMovement;\\n \\n float u_coulombDisScale;\\n float u_factor;\\n \\n \\n float u_interval;\\n} gWebGPUUniformParams;\\nlayout(std430, set = 0, binding = 1) buffer GWebGPUBuffer0 {\\n vec4 u_Data[];\\n} gWebGPUBuffer0;\\n\\nlayout(std430, set = 0, binding = 2) buffer readonly GWebGPUBuffer1 {\\n vec4 u_AveMovement[];\\n} gWebGPUBuffer1;\\n\\nlayout(std430, set = 0, binding = 3) buffer readonly GWebGPUBuffer2 {\\n vec4 u_NodeAttributeArray1[];\\n} gWebGPUBuffer2;\\n\\nlayout(std430, set = 0, binding = 4) buffer readonly GWebGPUBuffer3 {\\n vec4 u_NodeAttributeArray2[];\\n} gWebGPUBuffer3;\\n\\n\\n\\n#define MAX_EDGE_PER_VERTEX __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n#define SHIFT_20 1048576.0\\nlayout (\\n local_size_x = 1,\\n local_size_y = 1,\\n local_size_z = 1\\n) in;\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nivec2 unpack_float(float packedValue) {int packedIntValue = int(packedValue);\\nint v0 = packedIntValue / int(SHIFT_20);\\nreturn ivec2(v0, packedIntValue - (v0 * int(SHIFT_20)));}\\nvec2 calcRepulsive(int i, vec4 currentNode) {float ax = 0.0;\\nfloat ay = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {if (i != j) {vec4 nextNode = gWebGPUBuffer0.u_Data[j];\\nfloat vx = currentNode.x - nextNode.x;\\nfloat vy = currentNode.y - nextNode.y;\\nfloat dist = sqrt((vx * vx) + (vy * vy)) + 0.01;\\nfloat n_dist = (dist + 0.1) * gWebGPUUniformParams.u_coulombDisScale;\\nfloat direx = vx / dist;\\nfloat direy = vy / dist;\\nvec4 attributesi = gWebGPUBuffer2.u_NodeAttributeArray1[i];\\nvec4 attributesj = gWebGPUBuffer2.u_NodeAttributeArray1[j];\\nfloat massi = attributesi.x;\\nfloat nodeStrengthi = attributesi.z;\\nfloat nodeStrengthj = attributesj.z;\\nfloat nodeStrength = (nodeStrengthi + nodeStrengthj) / 2.0;\\nfloat param = (nodeStrength * gWebGPUUniformParams.u_factor) / (n_dist * n_dist);\\nax += direx * param;\\nay += direy * param;}}\\nreturn vec2(ax, ay);}\\nvec2 calcGravity(int i, vec4 currentNode, vec4 attributes2) {float vx = currentNode.x - attributes2.x;\\nfloat vy = currentNode.y - attributes2.y;\\nfloat ax = vx * attributes2.z;\\nfloat ay = vy * attributes2.z;\\nreturn vec2(ax, ay);}\\nvec2 calcAttractive(int i, vec4 currentNode, vec4 attributes1) {float mass = attributes1.x;\\nfloat ax = 0.0;\\nfloat ay = 0.0;\\nivec2 compressed = unpack_float(currentNode.z);\\nint length = compressed.x;\\nint arr_offset = compressed.y;\\nvec4 node_buffer;\\nfor (int p = 0; p < MAX_EDGE_PER_VERTEX; p++) {if (p >= length) {break;}\\nint arr_idx = arr_offset + (4 * p);\\nint buf_offset = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = gWebGPUBuffer0.u_Data[int(arr_idx / 4)];}\\nfloat float_j = node_buffer.x;\\nvec4 nextNode = gWebGPUBuffer0.u_Data[int(float_j)];\\nfloat vx = nextNode.x - currentNode.x;\\nfloat vy = nextNode.y - currentNode.y;\\nfloat dist = sqrt((vx * vx) + (vy * vy)) + 0.01;\\nfloat direx = vx / dist;\\nfloat direy = vy / dist;\\nfloat edgeLength = node_buffer.y;\\nfloat edgeStrength = node_buffer.z;\\nfloat diff = edgeLength - dist;\\nfloat param = (diff * edgeStrength) / mass;\\nax -= direx * param;\\nay -= direy * param;}\\nreturn vec2(ax, ay);}\\nvoid main() {int i = globalInvocationID.x;\\nvec4 currentNode = gWebGPUBuffer0.u_Data[i];\\nvec4 movement = gWebGPUBuffer1.u_AveMovement[0];\\nfloat ax = 0.0;\\nfloat ay = 0.0;\\nif ((i >= VERTEX_COUNT) || (movement.x < gWebGPUUniformParams.u_minMovement)) {gWebGPUBuffer0.u_Data[i] = currentNode;\\nreturn ;}\\nvec4 nodeAttributes1 = gWebGPUBuffer2.u_NodeAttributeArray1[i];\\nvec4 nodeAttributes2 = gWebGPUBuffer3.u_NodeAttributeArray2[i];\\nvec2 repulsive = calcRepulsive(i, currentNode);\\nax += repulsive.x;\\nay += repulsive.y;\\nvec2 attractive = calcAttractive(i, currentNode, nodeAttributes1);\\nax += attractive.x;\\nay += attractive.y;\\nvec2 gravity = calcGravity(i, currentNode, nodeAttributes2);\\nax -= gravity.x;\\nay -= gravity.y;\\nfloat param = gWebGPUUniformParams.u_interval * gWebGPUUniformParams.u_damping;\\nfloat vx = ax * param;\\nfloat vy = ay * param;\\nfloat vlength = sqrt((vx * vx) + (vy * vy)) + 0.0001;\\nif (vlength > gWebGPUUniformParams.u_maxSpeed) {float param2 = gWebGPUUniformParams.u_maxSpeed / vlength;\\nvx = param2 * vx;\\nvy = param2 * vy;}\\nfloat distx = vx * gWebGPUUniformParams.u_interval;\\nfloat disty = vy * gWebGPUUniformParams.u_interval;\\nfloat distLength = sqrt((distx * distx) + (disty * disty));\\nif ((nodeAttributes1.w != 0.0) && (nodeAttributes2.w != 0.0)) {gWebGPUBuffer0.u_Data[i] = vec4(nodeAttributes1.w, nodeAttributes2.w, currentNode.z, 0.0);}else {gWebGPUBuffer0.u_Data[i] = vec4(currentNode.x + distx, currentNode.y + disty, currentNode.z, distLength);}}\\n","GLSL100":"\\n\\nfloat epsilon = 0.00001;\\nvec2 addrTranslation_1Dto2D(float address1D, vec2 texSize) {\\n vec2 conv_const = vec2(1.0 / texSize.x, 1.0 / (texSize.x * texSize.y));\\n vec2 normAddr2D = float(address1D) * conv_const;\\n return vec2(fract(normAddr2D.x + epsilon), normAddr2D.y);\\n}\\n\\nvoid barrier() {}\\n \\n\\nuniform vec2 u_OutputTextureSize;\\nuniform int u_OutputTexelCount;\\nvarying vec2 v_TexCoord;\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\n#define MAX_EDGE_PER_VERTEX __DefineValuePlaceholder__MAX_EDGE_PER_VERTEX\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n#define SHIFT_20 1048576.0\\n\\nuniform sampler2D u_Data;\\nuniform vec2 u_DataSize;\\nvec4 getDatau_Data(vec2 address2D) {\\n return vec4(texture2D(u_Data, address2D).rgba);\\n}\\nvec4 getDatau_Data(float address1D) {\\n return getDatau_Data(addrTranslation_1Dto2D(address1D, u_DataSize));\\n}\\nvec4 getDatau_Data(int address1D) {\\n return getDatau_Data(float(address1D));\\n}\\nuniform float u_damping;\\nuniform float u_maxSpeed;\\nuniform float u_minMovement;\\nuniform sampler2D u_AveMovement;\\nuniform vec2 u_AveMovementSize;\\nvec4 getDatau_AveMovement(vec2 address2D) {\\n return vec4(texture2D(u_AveMovement, address2D).rgba);\\n}\\nvec4 getDatau_AveMovement(float address1D) {\\n return getDatau_AveMovement(addrTranslation_1Dto2D(address1D, u_AveMovementSize));\\n}\\nvec4 getDatau_AveMovement(int address1D) {\\n return getDatau_AveMovement(float(address1D));\\n}\\nuniform float u_coulombDisScale;\\nuniform float u_factor;\\nuniform sampler2D u_NodeAttributeArray1;\\nuniform vec2 u_NodeAttributeArray1Size;\\nvec4 getDatau_NodeAttributeArray1(vec2 address2D) {\\n return vec4(texture2D(u_NodeAttributeArray1, address2D).rgba);\\n}\\nvec4 getDatau_NodeAttributeArray1(float address1D) {\\n return getDatau_NodeAttributeArray1(addrTranslation_1Dto2D(address1D, u_NodeAttributeArray1Size));\\n}\\nvec4 getDatau_NodeAttributeArray1(int address1D) {\\n return getDatau_NodeAttributeArray1(float(address1D));\\n}\\nuniform sampler2D u_NodeAttributeArray2;\\nuniform vec2 u_NodeAttributeArray2Size;\\nvec4 getDatau_NodeAttributeArray2(vec2 address2D) {\\n return vec4(texture2D(u_NodeAttributeArray2, address2D).rgba);\\n}\\nvec4 getDatau_NodeAttributeArray2(float address1D) {\\n return getDatau_NodeAttributeArray2(addrTranslation_1Dto2D(address1D, u_NodeAttributeArray2Size));\\n}\\nvec4 getDatau_NodeAttributeArray2(int address1D) {\\n return getDatau_NodeAttributeArray2(float(address1D));\\n}\\nuniform float u_interval;\\nivec2 unpack_float(float packedValue) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nint packedIntValue = int(packedValue);\\nint v0 = packedIntValue / int(SHIFT_20);\\nreturn ivec2(v0, packedIntValue - (v0 * int(SHIFT_20)));}\\nvec2 calcRepulsive(int i, vec4 currentNode) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat ax = 0.0;\\nfloat ay = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {if (i != j) {vec4 nextNode = getDatau_Data(j);\\nfloat vx = currentNode.x - nextNode.x;\\nfloat vy = currentNode.y - nextNode.y;\\nfloat dist = sqrt((vx * vx) + (vy * vy)) + 0.01;\\nfloat n_dist = (dist + 0.1) * u_coulombDisScale;\\nfloat direx = vx / dist;\\nfloat direy = vy / dist;\\nvec4 attributesi = getDatau_NodeAttributeArray1(i);\\nvec4 attributesj = getDatau_NodeAttributeArray1(j);\\nfloat massi = attributesi.x;\\nfloat nodeStrengthi = attributesi.z;\\nfloat nodeStrengthj = attributesj.z;\\nfloat nodeStrength = (nodeStrengthi + nodeStrengthj) / 2.0;\\nfloat param = (nodeStrength * u_factor) / (n_dist * n_dist);\\nax += direx * param;\\nay += direy * param;}}\\nreturn vec2(ax, ay);}\\nvec2 calcGravity(int i, vec4 currentNode, vec4 attributes2) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat vx = currentNode.x - attributes2.x;\\nfloat vy = currentNode.y - attributes2.y;\\nfloat ax = vx * attributes2.z;\\nfloat ay = vy * attributes2.z;\\nreturn vec2(ax, ay);}\\nvec2 calcAttractive(int i, vec4 currentNode, vec4 attributes1) {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat mass = attributes1.x;\\nfloat ax = 0.0;\\nfloat ay = 0.0;\\nivec2 compressed = unpack_float(currentNode.z);\\nint length = compressed.x;\\nint arr_offset = compressed.y;\\nvec4 node_buffer;\\nfor (int p = 0; p < MAX_EDGE_PER_VERTEX; p++) {if (p >= length) {break;}\\nint arr_idx = arr_offset + (4 * p);\\nint buf_offset = arr_idx - ((arr_idx / 4) * 4);\\nif ((p == 0) || (buf_offset == 0)) {node_buffer = getDatau_Data(int(arr_idx / 4));}\\nfloat float_j = node_buffer.x;\\nvec4 nextNode = getDatau_Data(int(float_j));\\nfloat vx = nextNode.x - currentNode.x;\\nfloat vy = nextNode.y - currentNode.y;\\nfloat dist = sqrt((vx * vx) + (vy * vy)) + 0.01;\\nfloat direx = vx / dist;\\nfloat direy = vy / dist;\\nfloat edgeLength = node_buffer.y;\\nfloat edgeStrength = node_buffer.z;\\nfloat diff = edgeLength - dist;\\nfloat param = (diff * edgeStrength) / mass;\\nax -= direx * param;\\nay -= direy * param;}\\nreturn vec2(ax, ay);}\\nvoid main() {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nint i = globalInvocationID.x;\\nvec4 currentNode = getDatau_Data(i);\\nvec4 movement = getDatau_AveMovement(0.0);\\nfloat ax = 0.0;\\nfloat ay = 0.0;\\nif ((i >= VERTEX_COUNT) || (movement.x < u_minMovement)) {gl_FragColor = vec4(currentNode);\\nreturn ;}\\nvec4 nodeAttributes1 = getDatau_NodeAttributeArray1(i);\\nvec4 nodeAttributes2 = getDatau_NodeAttributeArray2(i);\\nvec2 repulsive = calcRepulsive(i, currentNode);\\nax += repulsive.x;\\nay += repulsive.y;\\nvec2 attractive = calcAttractive(i, currentNode, nodeAttributes1);\\nax += attractive.x;\\nay += attractive.y;\\nvec2 gravity = calcGravity(i, currentNode, nodeAttributes2);\\nax -= gravity.x;\\nay -= gravity.y;\\nfloat param = u_interval * u_damping;\\nfloat vx = ax * param;\\nfloat vy = ay * param;\\nfloat vlength = sqrt((vx * vx) + (vy * vy)) + 0.0001;\\nif (vlength > u_maxSpeed) {float param2 = u_maxSpeed / vlength;\\nvx = param2 * vx;\\nvy = param2 * vy;}\\nfloat distx = vx * u_interval;\\nfloat disty = vy * u_interval;\\nfloat distLength = sqrt((distx * distx) + (disty * disty));\\nif ((nodeAttributes1.w != 0.0) && (nodeAttributes2.w != 0.0)) {gl_FragColor = vec4(vec4(nodeAttributes1.w, nodeAttributes2.w, currentNode.z, 0.0));}else {gl_FragColor = vec4(vec4(currentNode.x + distx, currentNode.y + disty, currentNode.z, distLength));}if (gWebGPUDebug) {\\n gl_FragColor = gWebGPUDebugOutput;\\n}}\\n"},"context":{"name":"","dispatch":[1,1,1],"threadGroupSize":[1,1,1],"maxIteration":1,"defines":[{"name":"MAX_EDGE_PER_VERTEX","type":"Float","runtime":true},{"name":"VERTEX_COUNT","type":"Float","runtime":true},{"name":"SHIFT_20","type":"Float","value":1048576,"runtime":false}],"uniforms":[{"name":"u_Data","type":"vec4[]","storageClass":"StorageBuffer","readonly":false,"writeonly":false,"size":[1,1]},{"name":"u_damping","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_maxSpeed","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_minMovement","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_AveMovement","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_coulombDisScale","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_factor","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_NodeAttributeArray1","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_NodeAttributeArray2","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_interval","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]}],"globalDeclarations":[],"output":{"name":"u_Data","size":[1,1],"length":1},"needPingpong":true}}`; -var aveMovementBundle = `{"shaders":{"WGSL":"import \\"GLSL.std.450\\" as std;\\n\\n\\n# var gWebGPUDebug : bool = false;\\n# var gWebGPUDebugOutput : vec4 = vec4(0.0);\\n\\n[[builtin global_invocation_id]] var globalInvocationID : vec3;\\n# [[builtin work_group_size]] var workGroupSize : vec3;\\n# [[builtin work_group_id]] var workGroupID : vec3;\\n[[builtin local_invocation_id]] var localInvocationID : vec3;\\n# [[builtin num_work_groups]] var numWorkGroups : vec3;\\n[[builtin local_invocation_idx]] var localInvocationIndex : u32;\\n\\ntype GWebGPUParams = [[block]] struct {\\n [[offset 0]] u_iter : f32;\\n};\\n[[binding 0, set 0]] var gWebGPUUniformParams : GWebGPUParams;\\ntype GWebGPUBuffer0 = [[block]] struct {\\n [[offset 0]] u_Data : [[stride 16]] array>;\\n};\\n[[binding 1, set 0]] var gWebGPUBuffer0 : GWebGPUBuffer0;\\ntype GWebGPUBuffer1 = [[block]] struct {\\n [[offset 0]] u_AveMovement : [[stride 16]] array>;\\n};\\n[[binding 2, set 0]] var gWebGPUBuffer1 : GWebGPUBuffer1;\\n\\n\\n\\n\\n\\n\\n\\n\\nfn main() -> void {var movement : f32 = 0.0;\\nfor (var j : i32 = 0; j < __DefineValuePlaceholder__VERTEX_COUNT; j = j + 1) {var vertex : vec4 = gWebGPUBuffer0.u_Data[j];\\nmovement = movement + vertex.w;}\\nmovement = movement / f32(__DefineValuePlaceholder__VERTEX_COUNT);\\ngWebGPUBuffer1.u_AveMovement[0] = vec4(movement, 0.0, 0.0, 0.0);\\nreturn;}\\n\\nentry_point compute as \\"main\\" = main;\\n","GLSL450":"\\n\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\nivec3 globalInvocationID = ivec3(gl_GlobalInvocationID);\\nivec3 workGroupSize = ivec3(1,1,1);\\nivec3 workGroupID = ivec3(gl_WorkGroupID);\\nivec3 localInvocationID = ivec3(gl_LocalInvocationID);\\nivec3 numWorkGroups = ivec3(gl_NumWorkGroups);\\nint localInvocationIndex = int(gl_LocalInvocationIndex);\\n\\nlayout(std140, set = 0, binding = 0) uniform GWebGPUParams {\\n float u_iter;\\n} gWebGPUUniformParams;\\nlayout(std430, set = 0, binding = 1) buffer readonly GWebGPUBuffer0 {\\n vec4 u_Data[];\\n} gWebGPUBuffer0;\\n\\nlayout(std430, set = 0, binding = 2) buffer GWebGPUBuffer1 {\\n vec4 u_AveMovement[];\\n} gWebGPUBuffer1;\\n\\n\\n\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\nlayout (\\n local_size_x = 1,\\n local_size_y = 1,\\n local_size_z = 1\\n) in;\\n\\n\\n\\nvoid main() {float movement = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {vec4 vertex = gWebGPUBuffer0.u_Data[j];\\nmovement += vertex.w;}\\nmovement = movement / float(VERTEX_COUNT);\\ngWebGPUBuffer1.u_AveMovement[0] = vec4(movement, 0.0, 0.0, 0.0);}\\n","GLSL100":"\\n\\nfloat epsilon = 0.00001;\\nvec2 addrTranslation_1Dto2D(float address1D, vec2 texSize) {\\n vec2 conv_const = vec2(1.0 / texSize.x, 1.0 / (texSize.x * texSize.y));\\n vec2 normAddr2D = float(address1D) * conv_const;\\n return vec2(fract(normAddr2D.x + epsilon), normAddr2D.y);\\n}\\n\\nvoid barrier() {}\\n \\n\\nuniform vec2 u_OutputTextureSize;\\nuniform int u_OutputTexelCount;\\nvarying vec2 v_TexCoord;\\n\\nbool gWebGPUDebug = false;\\nvec4 gWebGPUDebugOutput = vec4(0.0);\\n\\n#define VERTEX_COUNT __DefineValuePlaceholder__VERTEX_COUNT\\n\\nuniform sampler2D u_Data;\\nuniform vec2 u_DataSize;\\nvec4 getDatau_Data(vec2 address2D) {\\n return vec4(texture2D(u_Data, address2D).rgba);\\n}\\nvec4 getDatau_Data(float address1D) {\\n return getDatau_Data(addrTranslation_1Dto2D(address1D, u_DataSize));\\n}\\nvec4 getDatau_Data(int address1D) {\\n return getDatau_Data(float(address1D));\\n}\\nuniform float u_iter;\\nuniform sampler2D u_AveMovement;\\nuniform vec2 u_AveMovementSize;\\nvec4 getDatau_AveMovement(vec2 address2D) {\\n return vec4(texture2D(u_AveMovement, address2D).rgba);\\n}\\nvec4 getDatau_AveMovement(float address1D) {\\n return getDatau_AveMovement(addrTranslation_1Dto2D(address1D, u_AveMovementSize));\\n}\\nvec4 getDatau_AveMovement(int address1D) {\\n return getDatau_AveMovement(float(address1D));\\n}\\nvoid main() {\\nivec3 workGroupSize = ivec3(1, 1, 1);\\nivec3 numWorkGroups = ivec3(1, 1, 1); \\nint globalInvocationIndex = int(floor(v_TexCoord.x * u_OutputTextureSize.x))\\n + int(floor(v_TexCoord.y * u_OutputTextureSize.y)) * int(u_OutputTextureSize.x);\\nint workGroupIDLength = globalInvocationIndex / (workGroupSize.x * workGroupSize.y * workGroupSize.z);\\nivec3 workGroupID = ivec3(workGroupIDLength / numWorkGroups.y / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.z, workGroupIDLength / numWorkGroups.x / numWorkGroups.y);\\nint localInvocationIDZ = globalInvocationIndex / (workGroupSize.x * workGroupSize.y);\\nint localInvocationIDY = (globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y) / workGroupSize.x;\\nint localInvocationIDX = globalInvocationIndex - localInvocationIDZ * workGroupSize.x * workGroupSize.y - localInvocationIDY * workGroupSize.x;\\nivec3 localInvocationID = ivec3(localInvocationIDX, localInvocationIDY, localInvocationIDZ);\\nivec3 globalInvocationID = workGroupID * workGroupSize + localInvocationID;\\nint localInvocationIndex = localInvocationID.z * workGroupSize.x * workGroupSize.y\\n + localInvocationID.y * workGroupSize.x + localInvocationID.x;\\nfloat movement = 0.0;\\nfor (int j = 0; j < VERTEX_COUNT; j++) {vec4 vertex = getDatau_Data(j);\\nmovement += vertex.w;}\\nmovement = movement / float(VERTEX_COUNT);\\ngl_FragColor = vec4(vec4(movement, 0.0, 0.0, 0.0));if (gWebGPUDebug) {\\n gl_FragColor = gWebGPUDebugOutput;\\n}}\\n"},"context":{"name":"","dispatch":[1,1,1],"threadGroupSize":[1,1,1],"maxIteration":1,"defines":[{"name":"VERTEX_COUNT","type":"Float","runtime":true}],"uniforms":[{"name":"u_Data","type":"vec4[]","storageClass":"StorageBuffer","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_iter","type":"Float","storageClass":"Uniform","readonly":true,"writeonly":false,"size":[1,1]},{"name":"u_AveMovement","type":"vec4[]","storageClass":"StorageBuffer","readonly":false,"writeonly":false,"size":[1,1]}],"globalDeclarations":[],"output":{"name":"u_AveMovement","size":[1,1],"length":1},"needPingpong":true}}`; - -// node_modules/@antv/layout/es/layout/gpu/gForce.js -var __awaiter5 = function(thisArg, _arguments, P4, generator) { - function adopt(value2) { - return value2 instanceof P4 ? value2 : new P4(function(resolve) { - resolve(value2); - }); - } - return new (P4 || (P4 = Promise))(function(resolve, reject) { - function fulfilled(value2) { - try { - step(generator.next(value2)); - } catch (e4) { - reject(e4); - } - } - function rejected(value2) { - try { - step(generator["throw"](value2)); - } catch (e4) { - reject(e4); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var GForceGPULayout = class extends Base3 { - constructor(options) { - super(); - this.maxIteration = 1e3; - this.edgeStrength = 200; - this.nodeStrength = 1e3; - this.coulombDisScale = 5e-3; - this.damping = 0.9; - this.maxSpeed = 1e3; - this.minMovement = 0.5; - this.interval = 0.02; - this.factor = 1; - this.linkDistance = 1; - this.gravity = 10; - this.workerEnabled = false; - this.nodes = []; - this.edges = []; - this.width = 300; - this.height = 300; - this.nodeMap = {}; - this.nodeIdxMap = {}; - this.updateCfg(options); - } - getDefaultCfg() { - return { - maxIteration: 2e3, - gravity: 10, - clustering: false, - clusterGravity: 10 - }; - } - execute() { - return __awaiter5(this, void 0, void 0, function* () { - const self2 = this; - const nodes = self2.nodes; - if (!nodes || nodes.length === 0) { - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - if (!self2.width && typeof window !== "undefined") { - self2.width = window.innerWidth; - } - if (!self2.height && typeof window !== "undefined") { - self2.height = window.innerHeight; - } - if (!self2.center) { - self2.center = [self2.width / 2, self2.height / 2]; - } - const center2 = self2.center; - if (nodes.length === 1) { - nodes[0].x = center2[0]; - nodes[0].y = center2[1]; - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - const nodeMap = {}; - const nodeIdxMap = {}; - nodes.forEach((node, i4) => { - if (!isNumber45(node.x)) - node.x = Math.random() * self2.width; - if (!isNumber45(node.y)) - node.y = Math.random() * self2.height; - nodeMap[node.id] = node; - nodeIdxMap[node.id] = i4; - }); - self2.nodeMap = nodeMap; - self2.nodeIdxMap = nodeIdxMap; - self2.nodeStrength = proccessToFunc2(self2.nodeStrength, 1); - self2.edgeStrength = proccessToFunc2(self2.edgeStrength, 1); - yield self2.run(); - }); - } - executeWithWorker(canvas, ctx3) { - const self2 = this; - const nodes = self2.nodes; - const center2 = self2.center; - if (!nodes || nodes.length === 0) { - return; - } - if (nodes.length === 1) { - nodes[0].x = center2[0]; - nodes[0].y = center2[1]; - return; - } - const nodeMap = {}; - const nodeIdxMap = {}; - nodes.forEach((node, i4) => { - if (!isNumber45(node.x)) - node.x = Math.random() * self2.width; - if (!isNumber45(node.y)) - node.y = Math.random() * self2.height; - nodeMap[node.id] = node; - nodeIdxMap[node.id] = i4; - }); - self2.nodeMap = nodeMap; - self2.nodeIdxMap = nodeIdxMap; - self2.nodeStrength = proccessToFunc2(self2.nodeStrength, 1); - self2.edgeStrength = proccessToFunc2(self2.edgeStrength, 1); - self2.run(canvas, ctx3); - } - run(canvas, ctx3) { - return __awaiter5(this, void 0, void 0, function* () { - const self2 = this; - const nodes = self2.nodes; - const edges = self2.edges; - const maxIteration = self2.maxIteration; - if (!self2.width && typeof window !== "undefined") { - self2.width = window.innerWidth; - } - if (!self2.height && typeof window !== "undefined") { - self2.height = window.innerHeight; - } - const numParticles = nodes.length; - self2.linkDistance = proccessToFunc2(self2.linkDistance); - self2.edgeStrength = proccessToFunc2(self2.edgeStrength); - const { maxEdgePerVetex, array: nodesEdgesArray } = buildTextureDataWithTwoEdgeAttr(nodes, edges, self2.linkDistance, self2.edgeStrength); - self2.degrees = getDegree3(nodes.length, self2.nodeIdxMap, edges); - const masses = []; - const nodeStrengths = []; - const centerXs = []; - const centerYs = []; - const centerGravities = []; - const fxs = []; - const fys = []; - if (!self2.getMass) { - self2.getMass = (d3) => { - return self2.degrees[self2.nodeIdxMap[d3.id]] || 1; - }; - } - const gravity = self2.gravity; - const center2 = self2.center; - nodes.forEach((node, i4) => { - masses.push(self2.getMass(node)); - nodeStrengths.push(self2.nodeStrength(node)); - if (!self2.degrees[i4]) - self2.degrees[i4] = 0; - let nodeGravity = [center2[0], center2[1], gravity]; - if (self2.getCenter) { - const customCenter = self2.getCenter(node, self2.degrees[i4]); - if (customCenter && isNumber45(customCenter[0]) && isNumber45(customCenter[1]) && isNumber45(customCenter[2])) { - nodeGravity = customCenter; - } - } - centerXs.push(nodeGravity[0]); - centerYs.push(nodeGravity[1]); - centerGravities.push(nodeGravity[2]); - if (isNumber45(node.fx) && isNumber45(node.fy)) { - fxs.push(node.fx || 1e-3); - fys.push(node.fy || 1e-3); - } else { - fxs.push(0); - fys.push(0); - } - }); - const nodeAttributeArray1 = arrayToTextureData([ - masses, - self2.degrees, - nodeStrengths, - fxs - ]); - const nodeAttributeArray2 = arrayToTextureData([ - centerXs, - centerYs, - centerGravities, - fys - ]); - const workerEnabled = self2.workerEnabled; - let world; - if (workerEnabled) { - world = World.create({ - canvas, - engineOptions: { - supportCompute: true - } - }); - } else { - world = World.create({ - engineOptions: { - supportCompute: true - } - }); - } - const onLayoutEnd = self2.onLayoutEnd; - const initPreviousData = []; - nodesEdgesArray.forEach((value2) => { - initPreviousData.push(value2); - }); - for (let i4 = 0; i4 < 4; i4++) { - initPreviousData.push(0); - } - const kernelGForce = world.createKernel(gForceBundle).setDispatch([numParticles, 1, 1]).setBinding({ - u_Data: nodesEdgesArray, - u_damping: self2.damping, - u_maxSpeed: self2.maxSpeed, - u_minMovement: self2.minMovement, - u_coulombDisScale: self2.coulombDisScale, - u_factor: self2.factor, - u_NodeAttributeArray1: nodeAttributeArray1, - u_NodeAttributeArray2: nodeAttributeArray2, - MAX_EDGE_PER_VERTEX: maxEdgePerVetex, - VERTEX_COUNT: numParticles, - u_AveMovement: initPreviousData, - u_interval: self2.interval - }); - const kernelAveMovement = world.createKernel(aveMovementBundle).setDispatch([1, 1, 1]).setBinding({ - u_Data: nodesEdgesArray, - VERTEX_COUNT: numParticles, - u_AveMovement: [0, 0, 0, 0] - }); - const execute = () => __awaiter5(this, void 0, void 0, function* () { - for (let i4 = 0; i4 < maxIteration; i4++) { - yield kernelGForce.execute(); - kernelAveMovement.setBinding({ - u_Data: kernelGForce - }); - yield kernelAveMovement.execute(); - const stepInterval = Math.max(0.02, self2.interval - i4 * 2e-3); - kernelGForce.setBinding({ - u_interval: stepInterval, - u_AveMovement: kernelAveMovement - }); - } - const finalParticleData = yield kernelGForce.getOutput(); - if (canvas) { - ctx3.postMessage({ - type: LAYOUT_MESSAGE.GPUEND, - vertexEdgeData: finalParticleData - }); - } else { - nodes.forEach((node, i4) => { - const x6 = finalParticleData[4 * i4]; - const y5 = finalParticleData[4 * i4 + 1]; - node.x = x6; - node.y = y5; - }); - } - if (onLayoutEnd) - onLayoutEnd(); - }); - yield execute(); - }); - } - getType() { - return "gForce-gpu"; - } -}; - -// node_modules/@antv/layout/es/layout/comboForce.js -var ComboForceLayout = class extends Base3 { - constructor(options) { - super(); - this.center = [0, 0]; - this.maxIteration = 100; - this.gravity = 10; - this.comboGravity = 10; - this.linkDistance = 10; - this.alpha = 1; - this.alphaMin = 1e-3; - this.alphaDecay = 1 - Math.pow(this.alphaMin, 1 / 300); - this.alphaTarget = 0; - this.velocityDecay = 0.6; - this.edgeStrength = 0.6; - this.nodeStrength = 30; - this.preventOverlap = false; - this.preventNodeOverlap = false; - this.preventComboOverlap = false; - this.collideStrength = void 0; - this.nodeCollideStrength = 0.5; - this.comboCollideStrength = 0.5; - this.comboSpacing = 20; - this.comboPadding = 10; - this.optimizeRangeFactor = 1; - this.onTick = () => { - }; - this.onLayoutEnd = () => { - }; - this.depthAttractiveForceScale = 1; - this.depthRepulsiveForceScale = 2; - this.nodes = []; - this.edges = []; - this.combos = []; - this.comboTrees = []; - this.width = 300; - this.height = 300; - this.bias = []; - this.nodeMap = {}; - this.oriComboMap = {}; - this.indexMap = {}; - this.comboMap = {}; - this.previousLayouted = false; - this.updateCfg(options); - } - getDefaultCfg() { - return { - maxIteration: 100, - center: [0, 0], - gravity: 10, - speed: 1, - comboGravity: 30, - preventOverlap: false, - preventComboOverlap: true, - preventNodeOverlap: true, - nodeSpacing: void 0, - collideStrength: void 0, - nodeCollideStrength: 0.5, - comboCollideStrength: 0.5, - comboSpacing: 20, - comboPadding: 10, - edgeStrength: 0.6, - nodeStrength: 30, - linkDistance: 10 - }; - } - execute() { - const self2 = this; - const nodes = self2.nodes; - const center2 = self2.center; - self2.comboTree = { - id: "comboTreeRoot", - depth: -1, - children: self2.comboTrees - }; - if (!nodes || nodes.length === 0) { - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - if (nodes.length === 1) { - nodes[0].x = center2[0]; - nodes[0].y = center2[1]; - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - return; - } - self2.initVals(); - self2.run(); - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - } - run() { - const self2 = this; - const nodes = self2.nodes; - const maxIteration = self2.previousLayouted ? self2.maxIteration / 5 : self2.maxIteration; - if (!self2.width && typeof window !== "undefined") { - self2.width = window.innerWidth; - } - if (!self2.height && typeof window !== "undefined") { - self2.height = window.innerHeight; - } - const center2 = self2.center; - const velocityDecay = self2.velocityDecay; - const comboMap = self2.comboMap; - if (!self2.previousLayouted) - self2.initPos(comboMap); - for (let i4 = 0; i4 < maxIteration; i4++) { - const displacements = []; - nodes.forEach((_8, j4) => { - displacements[j4] = { x: 0, y: 0 }; - }); - self2.applyCalculate(displacements); - self2.applyComboCenterForce(displacements); - nodes.forEach((n3, j4) => { - if (!isNumber45(n3.x) || !isNumber45(n3.y)) - return; - n3.x += displacements[j4].x * velocityDecay; - n3.y += displacements[j4].y * velocityDecay; - }); - self2.alpha += (self2.alphaTarget - self2.alpha) * self2.alphaDecay; - self2.onTick(); - } - const meanCenter = [0, 0]; - nodes.forEach((n3) => { - if (!isNumber45(n3.x) || !isNumber45(n3.y)) - return; - meanCenter[0] += n3.x; - meanCenter[1] += n3.y; - }); - meanCenter[0] /= nodes.length; - meanCenter[1] /= nodes.length; - const centerOffset = [center2[0] - meanCenter[0], center2[1] - meanCenter[1]]; - nodes.forEach((n3, j4) => { - if (!isNumber45(n3.x) || !isNumber45(n3.y)) - return; - n3.x += centerOffset[0]; - n3.y += centerOffset[1]; - }); - self2.combos.forEach((combo) => { - const mapped = comboMap[combo.id]; - if (mapped && mapped.empty) { - combo.x = mapped.cx || combo.x; - combo.y = mapped.cy || combo.y; - } - }); - self2.previousLayouted = true; - } - initVals() { - const self2 = this; - const edges = self2.edges; - const nodes = self2.nodes; - const combos = self2.combos; - const count2 = {}; - const nodeMap = {}; - const indexMap = {}; - nodes.forEach((node, i4) => { - nodeMap[node.id] = node; - indexMap[node.id] = i4; - }); - self2.nodeMap = nodeMap; - self2.indexMap = indexMap; - const oriComboMap = {}; - combos.forEach((combo) => { - oriComboMap[combo.id] = combo; - }); - self2.oriComboMap = oriComboMap; - self2.comboMap = self2.getComboMap(); - const preventOverlap = self2.preventOverlap; - self2.preventComboOverlap = self2.preventComboOverlap || preventOverlap; - self2.preventNodeOverlap = self2.preventNodeOverlap || preventOverlap; - const collideStrength = self2.collideStrength; - if (collideStrength) { - self2.comboCollideStrength = collideStrength; - self2.nodeCollideStrength = collideStrength; - } - self2.comboCollideStrength = self2.comboCollideStrength ? self2.comboCollideStrength : 0; - self2.nodeCollideStrength = self2.nodeCollideStrength ? self2.nodeCollideStrength : 0; - for (let i4 = 0; i4 < edges.length; ++i4) { - const source = getEdgeTerminal(edges[i4], "source"); - const target = getEdgeTerminal(edges[i4], "target"); - if (count2[source]) - count2[source]++; - else - count2[source] = 1; - if (count2[target]) - count2[target]++; - else - count2[target] = 1; - } - const bias = []; - for (let i4 = 0; i4 < edges.length; ++i4) { - const source = getEdgeTerminal(edges[i4], "source"); - const target = getEdgeTerminal(edges[i4], "target"); - bias[i4] = count2[source] / (count2[source] + count2[target]); - } - this.bias = bias; - const nodeSize = self2.nodeSize; - const nodeSpacing = self2.nodeSpacing; - let nodeSizeFunc; - let nodeSpacingFunc; - if (isNumber45(nodeSpacing)) { - nodeSpacingFunc = () => nodeSpacing; - } else if (isFunction41(nodeSpacing)) { - nodeSpacingFunc = nodeSpacing; - } else { - nodeSpacingFunc = () => 0; - } - this.nodeSpacing = nodeSpacingFunc; - if (!nodeSize) { - nodeSizeFunc = (d3) => { - if (d3.size) { - if (isArray82(d3.size)) { - const res = d3.size[0] > d3.size[1] ? d3.size[0] : d3.size[1]; - return res / 2; - } - if (isObject26(d3.size)) { - const res = d3.size.width > d3.size.height ? d3.size.width : d3.size.height; - return res / 2; - } - return d3.size / 2; - } - return 10; - }; - } else if (isFunction41(nodeSize)) { - nodeSizeFunc = (d3) => { - return nodeSize(d3); - }; - } else if (isArray82(nodeSize)) { - const larger = nodeSize[0] > nodeSize[1] ? nodeSize[0] : nodeSize[1]; - const radius = larger / 2; - nodeSizeFunc = (d3) => radius; - } else { - const radius = nodeSize / 2; - nodeSizeFunc = (d3) => radius; - } - this.nodeSize = nodeSizeFunc; - const comboSpacing = self2.comboSpacing; - let comboSpacingFunc; - if (isNumber45(comboSpacing)) { - comboSpacingFunc = () => comboSpacing; - } else if (isFunction41(comboSpacing)) { - comboSpacingFunc = comboSpacing; - } else { - comboSpacingFunc = () => 0; - } - this.comboSpacing = comboSpacingFunc; - const comboPadding = self2.comboPadding; - let comboPaddingFunc; - if (isNumber45(comboPadding)) { - comboPaddingFunc = () => comboPadding; - } else if (isArray82(comboPadding)) { - comboPaddingFunc = () => Math.max.apply(null, comboPadding); - } else if (isFunction41(comboPadding)) { - comboPaddingFunc = comboPadding; - } else { - comboPaddingFunc = () => 0; - } - this.comboPadding = comboPaddingFunc; - let linkDistance = this.linkDistance; - let linkDistanceFunc; - if (!linkDistance) { - linkDistance = 10; - } - if (isNumber45(linkDistance)) { - linkDistanceFunc = (d3) => { - return linkDistance; - }; - } else { - linkDistanceFunc = linkDistance; - } - this.linkDistance = linkDistanceFunc; - let edgeStrength = this.edgeStrength; - let edgeStrengthFunc; - if (!edgeStrength) { - edgeStrength = 1; - } - if (isNumber45(edgeStrength)) { - edgeStrengthFunc = (d3) => { - return edgeStrength; - }; - } else { - edgeStrengthFunc = edgeStrength; - } - this.edgeStrength = edgeStrengthFunc; - let nodeStrength = this.nodeStrength; - let nodeStrengthFunc; - if (!nodeStrength) { - nodeStrength = 30; - } - if (isNumber45(nodeStrength)) { - nodeStrengthFunc = (d3) => { - return nodeStrength; - }; - } else { - nodeStrengthFunc = nodeStrength; - } - this.nodeStrength = nodeStrengthFunc; - } - initPos(comboMap) { - const self2 = this; - const nodes = self2.nodes; - nodes.forEach((node, i4) => { - const comboId = node.comboId; - const combo = comboMap[comboId]; - if (comboId && combo) { - node.x = combo.cx + 100 / (i4 + 1); - node.y = combo.cy + 100 / (i4 + 1); - } else { - node.x = 100 / (i4 + 1); - node.y = 100 / (i4 + 1); - } - }); - } - getComboMap() { - const self2 = this; - const nodeMap = self2.nodeMap; - const comboTrees = self2.comboTrees; - const oriComboMap = self2.oriComboMap; - const comboMap = {}; - (comboTrees || []).forEach((ctree) => { - const treeChildren = []; - traverseTreeUp3(ctree, (treeNode) => { - if (treeNode.itemType === "node") - return true; - if (!oriComboMap[treeNode.id]) - return true; - if (comboMap[treeNode.id] === void 0) { - const combo = { - id: treeNode.id, - name: treeNode.id, - cx: 0, - cy: 0, - count: 0, - depth: self2.oriComboMap[treeNode.id].depth || 0, - children: [] - }; - comboMap[treeNode.id] = combo; - } - const children = treeNode.children; - if (children) { - children.forEach((child) => { - if (!comboMap[child.id] && !nodeMap[child.id]) - return true; - treeChildren.push(child); - }); - } - const c5 = comboMap[treeNode.id]; - c5.cx = 0; - c5.cy = 0; - if (treeChildren.length === 0) { - c5.empty = true; - const oriCombo = oriComboMap[treeNode.id]; - c5.cx = oriCombo.x; - c5.cy = oriCombo.y; - } - treeChildren.forEach((child) => { - c5.count++; - if (child.itemType !== "node") { - const childCombo = comboMap[child.id]; - if (isNumber45(childCombo.cx)) - c5.cx += childCombo.cx; - if (isNumber45(childCombo.cy)) - c5.cy += childCombo.cy; - return; - } - const node = nodeMap[child.id]; - if (!node) - return; - if (isNumber45(node.x)) { - c5.cx += node.x; - } - if (isNumber45(node.y)) { - c5.cy += node.y; - } - }); - c5.cx /= c5.count || 1; - c5.cy /= c5.count || 1; - c5.children = treeChildren; - return true; - }); - }); - return comboMap; - } - applyComboCenterForce(displacements) { - const self2 = this; - const gravity = self2.gravity; - const comboGravity = self2.comboGravity || gravity; - const alpha = this.alpha; - const comboTrees = self2.comboTrees; - const indexMap = self2.indexMap; - const nodeMap = self2.nodeMap; - const comboMap = self2.comboMap; - (comboTrees || []).forEach((ctree) => { - traverseTreeUp3(ctree, (treeNode) => { - if (treeNode.itemType === "node") - return true; - const combo = comboMap[treeNode.id]; - if (!combo) - return true; - const c5 = comboMap[treeNode.id]; - const gravityScale = (c5.depth + 1) / 10 * 0.5; - const comboX = c5.cx; - const comboY = c5.cy; - c5.cx = 0; - c5.cy = 0; - c5.children.forEach((child) => { - if (child.itemType !== "node") { - const childCombo = comboMap[child.id]; - if (childCombo && isNumber45(childCombo.cx)) - c5.cx += childCombo.cx; - if (childCombo && isNumber45(childCombo.cy)) - c5.cy += childCombo.cy; - return; - } - const node = nodeMap[child.id]; - const vecX = node.x - comboX || 5e-3; - const vecY = node.y - comboY || 5e-3; - const l4 = Math.sqrt(vecX * vecX + vecY * vecY); - const childIdx = indexMap[node.id]; - const params = comboGravity * alpha / l4 * gravityScale; - displacements[childIdx].x -= vecX * params; - displacements[childIdx].y -= vecY * params; - if (isNumber45(node.x)) - c5.cx += node.x; - if (isNumber45(node.y)) - c5.cy += node.y; - }); - c5.cx /= c5.count || 1; - c5.cy /= c5.count || 1; - return true; - }); - }); - } - applyCalculate(displacements) { - const self2 = this; - const comboMap = self2.comboMap; - const nodes = self2.nodes; - const vecMap = {}; - nodes.forEach((v3, i4) => { - nodes.forEach((u3, j4) => { - if (i4 < j4) - return; - const vx = v3.x - u3.x || 5e-3; - const vy = v3.y - u3.y || 5e-3; - let vl2 = vx * vx + vy * vy; - const vl = Math.sqrt(vl2); - if (vl2 < 1) - vl2 = vl; - vecMap[`${v3.id}-${u3.id}`] = { vx, vy, vl2, vl }; - vecMap[`${u3.id}-${v3.id}`] = { vl2, vl, vx: -vx, vy: -vy }; - }); - }); - self2.updateComboSizes(comboMap); - self2.calRepulsive(displacements, vecMap); - self2.calAttractive(displacements, vecMap); - const preventComboOverlap = self2.preventComboOverlap; - if (preventComboOverlap) - self2.comboNonOverlapping(displacements, comboMap); - } - updateComboSizes(comboMap) { - const self2 = this; - const comboTrees = self2.comboTrees; - const nodeMap = self2.nodeMap; - const nodeSize = self2.nodeSize; - const comboSpacing = self2.comboSpacing; - const comboPadding = self2.comboPadding; - (comboTrees || []).forEach((ctree) => { - const treeChildren = []; - traverseTreeUp3(ctree, (treeNode) => { - if (treeNode.itemType === "node") - return true; - const c5 = comboMap[treeNode.id]; - if (!c5) - return false; - const children = treeNode.children; - if (children) { - children.forEach((child) => { - if (!comboMap[child.id] && !nodeMap[child.id]) - return; - treeChildren.push(child); - }); - } - c5.minX = Infinity; - c5.minY = Infinity; - c5.maxX = -Infinity; - c5.maxY = -Infinity; - treeChildren.forEach((child) => { - if (child.itemType !== "node") - return true; - const node = nodeMap[child.id]; - if (!node) - return true; - const r4 = nodeSize(node); - const nodeMinX = node.x - r4; - const nodeMinY = node.y - r4; - const nodeMaxX = node.x + r4; - const nodeMaxY = node.y + r4; - if (c5.minX > nodeMinX) - c5.minX = nodeMinX; - if (c5.minY > nodeMinY) - c5.minY = nodeMinY; - if (c5.maxX < nodeMaxX) - c5.maxX = nodeMaxX; - if (c5.maxY < nodeMaxY) - c5.maxY = nodeMaxY; - }); - let minSize = self2.oriComboMap[treeNode.id].size || 10; - if (isArray82(minSize)) - minSize = minSize[0]; - const maxLength = Math.max(c5.maxX - c5.minX, c5.maxY - c5.minY, minSize); - c5.r = maxLength / 2 + comboSpacing(c5) / 2 + comboPadding(c5); - return true; - }); - }); - } - comboNonOverlapping(displacements, comboMap) { - const self2 = this; - const comboTree = self2.comboTree; - const comboCollideStrength = self2.comboCollideStrength; - const indexMap = self2.indexMap; - const nodeMap = self2.nodeMap; - traverseTreeUp3(comboTree, (treeNode) => { - if (!comboMap[treeNode.id] && !nodeMap[treeNode.id] && treeNode.id !== "comboTreeRoot") { - return false; - } - const children = treeNode.children; - if (children && children.length > 1) { - children.forEach((v3, i4) => { - if (v3.itemType === "node") - return false; - const cv = comboMap[v3.id]; - if (!cv) - return; - children.forEach((u3, j4) => { - if (i4 <= j4) - return false; - if (u3.itemType === "node") - return false; - const cu = comboMap[u3.id]; - if (!cu) - return false; - const vx = cv.cx - cu.cx || 5e-3; - const vy = cv.cy - cu.cy || 5e-3; - const l4 = vx * vx + vy * vy; - const rv = cv.r || 1; - const ru = cu.r || 1; - const r4 = rv + ru; - const ru2 = ru * ru; - const rv2 = rv * rv; - if (l4 < r4 * r4) { - const vnodes = v3.children; - if (!vnodes || vnodes.length === 0) - return false; - const unodes = u3.children; - if (!unodes || unodes.length === 0) - return false; - const sqrtl = Math.sqrt(l4); - const ll = (r4 - sqrtl) / sqrtl * comboCollideStrength; - const xl = vx * ll; - const yl = vy * ll; - const rratio = ru2 / (rv2 + ru2); - const irratio = 1 - rratio; - vnodes.forEach((vn) => { - if (vn.itemType !== "node") - return false; - if (!nodeMap[vn.id]) - return; - const vindex = indexMap[vn.id]; - unodes.forEach((un2) => { - if (un2.itemType !== "node") - return false; - if (!nodeMap[un2.id]) - return false; - const uindex = indexMap[un2.id]; - displacements[vindex].x += xl * rratio; - displacements[vindex].y += yl * rratio; - displacements[uindex].x -= xl * irratio; - displacements[uindex].y -= yl * irratio; - }); - }); - } - }); - }); - } - return true; - }); - } - calRepulsive(displacements, vecMap) { - const self2 = this; - const nodes = self2.nodes; - const max15 = self2.width * self2.optimizeRangeFactor; - const nodeStrength = self2.nodeStrength; - const alpha = self2.alpha; - const nodeCollideStrength = self2.nodeCollideStrength; - const preventNodeOverlap = self2.preventNodeOverlap; - const nodeSizeFunc = self2.nodeSize; - const nodeSpacingFunc = self2.nodeSpacing; - const scale12 = self2.depthRepulsiveForceScale; - const center2 = self2.center; - nodes.forEach((v3, i4) => { - if (!v3.x || !v3.y) - return; - if (center2) { - const gravity = self2.gravity; - const vecX = v3.x - center2[0] || 5e-3; - const vecY = v3.y - center2[1] || 5e-3; - const l4 = Math.sqrt(vecX * vecX + vecY * vecY); - displacements[i4].x -= vecX * gravity * alpha / l4; - displacements[i4].y -= vecY * gravity * alpha / l4; - } - nodes.forEach((u3, j4) => { - if (i4 === j4) { - return; - } - if (!u3.x || !u3.y) - return; - const { vl2, vl } = vecMap[`${v3.id}-${u3.id}`]; - if (vl > max15) - return; - const { vx, vy } = vecMap[`${v3.id}-${u3.id}`]; - let depthDiff = Math.log(Math.abs(u3.depth - v3.depth) / 10) + 1 || 1; - depthDiff = depthDiff < 1 ? 1 : depthDiff; - if (u3.comboId !== v3.comboId) - depthDiff += 1; - const depthParam = depthDiff ? Math.pow(scale12, depthDiff) : 1; - const params = nodeStrength(u3) * alpha / vl2 * depthParam; - displacements[i4].x += vx * params; - displacements[i4].y += vy * params; - if (i4 < j4 && preventNodeOverlap) { - const ri = nodeSizeFunc(v3) + nodeSpacingFunc(v3) || 1; - const rj = nodeSizeFunc(u3) + nodeSpacingFunc(u3) || 1; - const r4 = ri + rj; - if (vl2 < r4 * r4) { - const ll = (r4 - vl) / vl * nodeCollideStrength; - const rj2 = rj * rj; - let rratio = rj2 / (ri * ri + rj2); - const xl = vx * ll; - const yl = vy * ll; - displacements[i4].x += xl * rratio; - displacements[i4].y += yl * rratio; - rratio = 1 - rratio; - displacements[j4].x -= xl * rratio; - displacements[j4].y -= yl * rratio; - } - } - }); - }); - } - calAttractive(displacements, vecMap) { - const self2 = this; - const edges = self2.edges; - const linkDistance = self2.linkDistance; - const alpha = self2.alpha; - const edgeStrength = self2.edgeStrength; - const bias = self2.bias; - const scale12 = self2.depthAttractiveForceScale; - edges.forEach((e4, i4) => { - const source = getEdgeTerminal(e4, "source"); - const target = getEdgeTerminal(e4, "target"); - if (!source || !target || source === target) - return; - const uIndex = self2.indexMap[source]; - const vIndex = self2.indexMap[target]; - const u3 = self2.nodeMap[source]; - const v3 = self2.nodeMap[target]; - if (!u3 || !v3) - return; - let depthDiff = u3.depth === v3.depth ? 0 : Math.log(Math.abs(u3.depth - v3.depth) / 10); - if (u3.comboId === v3.comboId) { - depthDiff = depthDiff / 2; - } - let depthParam = depthDiff ? Math.pow(scale12, depthDiff) : 1; - if (u3.comboId !== v3.comboId && depthParam === 1) { - depthParam = scale12 / 2; - } else if (u3.comboId === v3.comboId) { - depthParam = 2; - } - if (!isNumber45(v3.x) || !isNumber45(u3.x) || !isNumber45(v3.y) || !isNumber45(u3.y)) { - return; - } - const { vl, vx, vy } = vecMap[`${target}-${source}`]; - const l4 = (vl - linkDistance(e4)) / vl * alpha * edgeStrength(e4) * depthParam; - const vecX = vx * l4; - const vecY = vy * l4; - const b10 = bias[i4]; - displacements[vIndex].x -= vecX * b10; - displacements[vIndex].y -= vecY * b10; - displacements[uIndex].x += vecX * (1 - b10); - displacements[uIndex].y += vecY * (1 - b10); - }); - } - getType() { - return "comboForce"; - } -}; - -// node_modules/@antv/layout/es/layout/forceAtlas2/body.js -var Body = class { - constructor(params) { - this.id = params.id || 0; - this.rx = params.rx; - this.ry = params.ry; - this.fx = 0; - this.fy = 0; - this.mass = params.mass; - this.degree = params.degree; - this.g = params.g || 0; - } - distanceTo(bo) { - const dx = this.rx - bo.rx; - const dy = this.ry - bo.ry; - return Math.hypot(dx, dy); - } - setPos(x6, y5) { - this.rx = x6; - this.ry = y5; - } - resetForce() { - this.fx = 0; - this.fy = 0; - } - addForce(b10) { - const dx = b10.rx - this.rx; - const dy = b10.ry - this.ry; - let dist4 = Math.hypot(dx, dy); - dist4 = dist4 < 1e-4 ? 1e-4 : dist4; - const F3 = this.g * (this.degree + 1) * (b10.degree + 1) / dist4; - this.fx += F3 * dx / dist4; - this.fy += F3 * dy / dist4; - } - in(quad) { - return quad.contains(this.rx, this.ry); - } - add(bo) { - const nenwMass = this.mass + bo.mass; - const x6 = (this.rx * this.mass + bo.rx * bo.mass) / nenwMass; - const y5 = (this.ry * this.mass + bo.ry * bo.mass) / nenwMass; - const dg = this.degree + bo.degree; - const params = { - rx: x6, - ry: y5, - mass: nenwMass, - degree: dg - }; - return new Body(params); - } -}; - -// node_modules/@antv/layout/es/layout/forceAtlas2/quad.js -var Quad = class { - constructor(params) { - this.xmid = params.xmid; - this.ymid = params.ymid; - this.length = params.length; - this.massCenter = params.massCenter || [0, 0]; - this.mass = params.mass || 1; - } - getLength() { - return this.length; - } - contains(x6, y5) { - const halfLen = this.length / 2; - return x6 <= this.xmid + halfLen && x6 >= this.xmid - halfLen && y5 <= this.ymid + halfLen && y5 >= this.ymid - halfLen; - } - NW() { - const x6 = this.xmid - this.length / 4; - const y5 = this.ymid + this.length / 4; - const len5 = this.length / 2; - const params = { - xmid: x6, - ymid: y5, - length: len5 - }; - const NW = new Quad(params); - return NW; - } - NE() { - const x6 = this.xmid + this.length / 4; - const y5 = this.ymid + this.length / 4; - const len5 = this.length / 2; - const params = { - xmid: x6, - ymid: y5, - length: len5 - }; - const NE = new Quad(params); - return NE; - } - SW() { - const x6 = this.xmid - this.length / 4; - const y5 = this.ymid - this.length / 4; - const len5 = this.length / 2; - const params = { - xmid: x6, - ymid: y5, - length: len5 - }; - const SW = new Quad(params); - return SW; - } - SE() { - const x6 = this.xmid + this.length / 4; - const y5 = this.ymid - this.length / 4; - const len5 = this.length / 2; - const params = { - xmid: x6, - ymid: y5, - length: len5 - }; - const SE = new Quad(params); - return SE; - } -}; - -// node_modules/@antv/layout/es/layout/forceAtlas2/quadTree.js -var QuadTree = class { - constructor(param) { - this.body = null; - this.quad = null; - this.NW = null; - this.NE = null; - this.SW = null; - this.SE = null; - this.theta = 0.5; - if (param != null) - this.quad = param; - } - insert(bo) { - if (this.body == null) { - this.body = bo; - return; - } - if (!this._isExternal()) { - this.body = this.body.add(bo); - this._putBody(bo); - } else { - if (this.quad) { - this.NW = new QuadTree(this.quad.NW()); - this.NE = new QuadTree(this.quad.NE()); - this.SW = new QuadTree(this.quad.SW()); - this.SE = new QuadTree(this.quad.SE()); - } - this._putBody(this.body); - this._putBody(bo); - this.body = this.body.add(bo); - } - } - _putBody(bo) { - if (!this.quad) - return; - if (bo.in(this.quad.NW()) && this.NW) - this.NW.insert(bo); - else if (bo.in(this.quad.NE()) && this.NE) - this.NE.insert(bo); - else if (bo.in(this.quad.SW()) && this.SW) - this.SW.insert(bo); - else if (bo.in(this.quad.SE()) && this.SE) - this.SE.insert(bo); - } - _isExternal() { - return this.NW == null && this.NE == null && this.SW == null && this.SE == null; - } - updateForce(bo) { - if (this.body == null || bo === this.body) { - return; - } - if (this._isExternal()) - bo.addForce(this.body); - else { - const s4 = this.quad ? this.quad.getLength() : 0; - const d3 = this.body.distanceTo(bo); - if (s4 / d3 < this.theta) - bo.addForce(this.body); - else { - this.NW && this.NW.updateForce(bo); - this.NE && this.NE.updateForce(bo); - this.SW && this.SW.updateForce(bo); - this.SE && this.SE.updateForce(bo); - } - } - } -}; - -// node_modules/@antv/layout/es/layout/forceAtlas2/index.js -var ForceAtlas2Layout = class extends Base3 { - constructor(options) { - super(); - this.center = [0, 0]; - this.width = 300; - this.height = 300; - this.nodes = []; - this.edges = []; - this.kr = 5; - this.kg = 1; - this.mode = "normal"; - this.preventOverlap = false; - this.dissuadeHubs = false; - this.barnesHut = void 0; - this.maxIteration = 0; - this.ks = 0.1; - this.ksmax = 10; - this.tao = 0.1; - this.onLayoutEnd = () => { - }; - this.prune = void 0; - this.updateCfg(options); - } - getDefaultCfg() { - return {}; - } - execute() { - const self2 = this; - const { nodes, onLayoutEnd, prune } = self2; - let maxIteration = self2.maxIteration; - if (!self2.width && typeof window !== "undefined") { - self2.width = window.innerWidth; - } - if (!self2.height && typeof window !== "undefined") { - self2.height = window.innerHeight; - } - const sizes = []; - const nodeNum = nodes.length; - for (let i4 = 0; i4 < nodeNum; i4 += 1) { - const node = nodes[i4]; - let nodeWidth = 10; - let nodeHeight = 10; - if (isNumber45(node.size)) { - nodeWidth = node.size; - nodeHeight = node.size; - } - if (isArray82(node.size)) { - if (!isNaN(node.size[0])) - nodeWidth = node.size[0]; - if (!isNaN(node.size[1])) - nodeHeight = node.size[1]; - } else if (isObject26(node.size)) { - nodeWidth = node.size.width; - nodeHeight = node.size.height; - } - if (self2.getWidth && !isNaN(self2.getWidth(node))) - nodeHeight = self2.getWidth(node); - if (self2.getHeight && !isNaN(self2.getHeight(node))) - nodeWidth = self2.getHeight(node); - const maxSize = Math.max(nodeWidth, nodeHeight); - sizes.push(maxSize); - } - if (self2.barnesHut === void 0 && nodeNum > 250) - self2.barnesHut = true; - if (self2.prune === void 0 && nodeNum > 100) - self2.prune = true; - if (this.maxIteration === 0 && !self2.prune) { - maxIteration = 250; - if (nodeNum <= 200 && nodeNum > 100) - maxIteration = 1e3; - else if (nodeNum > 200) - maxIteration = 1200; - this.maxIteration = maxIteration; - } else if (this.maxIteration === 0 && prune) { - maxIteration = 100; - if (nodeNum <= 200 && nodeNum > 100) - maxIteration = 500; - else if (nodeNum > 200) - maxIteration = 950; - this.maxIteration = maxIteration; - } - if (!self2.kr) { - self2.kr = 50; - if (nodeNum > 100 && nodeNum <= 500) - self2.kr = 20; - else if (nodeNum > 500) - self2.kr = 1; - } - if (!self2.kg) { - self2.kg = 20; - if (nodeNum > 100 && nodeNum <= 500) - self2.kg = 10; - else if (nodeNum > 500) - self2.kg = 1; - } - this.nodes = self2.updateNodesByForces(sizes); - onLayoutEnd(); - } - updateNodesByForces(sizes) { - const self2 = this; - const { edges, maxIteration } = self2; - let nodes = self2.nodes; - const nonLoopEdges = edges.filter((edge2) => { - const source = getEdgeTerminal(edge2, "source"); - const target = getEdgeTerminal(edge2, "target"); - return source !== target; - }); - const size14 = nodes.length; - const esize = nonLoopEdges.length; - const degrees = []; - const idMap = {}; - const edgeEndsIdMap = {}; - const Es = []; - for (let i4 = 0; i4 < size14; i4 += 1) { - idMap[nodes[i4].id] = i4; - degrees[i4] = 0; - if (nodes[i4].x === void 0 || isNaN(nodes[i4].x)) { - nodes[i4].x = Math.random() * 1e3; - } - if (nodes[i4].y === void 0 || isNaN(nodes[i4].y)) { - nodes[i4].y = Math.random() * 1e3; - } - Es.push({ x: nodes[i4].x, y: nodes[i4].y }); - } - for (let i4 = 0; i4 < esize; i4 += 1) { - let node1; - let node2; - let sIdx = 0; - let tIdx = 0; - for (let j4 = 0; j4 < size14; j4 += 1) { - const source = getEdgeTerminal(nonLoopEdges[i4], "source"); - const target = getEdgeTerminal(nonLoopEdges[i4], "target"); - if (nodes[j4].id === source) { - node1 = nodes[j4]; - sIdx = j4; - } else if (nodes[j4].id === target) { - node2 = nodes[j4]; - tIdx = j4; - } - edgeEndsIdMap[i4] = { sourceIdx: sIdx, targetIdx: tIdx }; - } - if (node1) - degrees[idMap[node1.id]] += 1; - if (node2) - degrees[idMap[node2.id]] += 1; - } - let iteration = maxIteration; - nodes = this.iterate(iteration, idMap, edgeEndsIdMap, esize, degrees, sizes); - if (self2.prune) { - for (let j4 = 0; j4 < esize; j4 += 1) { - if (degrees[edgeEndsIdMap[j4].sourceIdx] <= 1) { - nodes[edgeEndsIdMap[j4].sourceIdx].x = nodes[edgeEndsIdMap[j4].targetIdx].x; - nodes[edgeEndsIdMap[j4].sourceIdx].y = nodes[edgeEndsIdMap[j4].targetIdx].y; - } else if (degrees[edgeEndsIdMap[j4].targetIdx] <= 1) { - nodes[edgeEndsIdMap[j4].targetIdx].x = nodes[edgeEndsIdMap[j4].sourceIdx].x; - nodes[edgeEndsIdMap[j4].targetIdx].y = nodes[edgeEndsIdMap[j4].sourceIdx].y; - } - } - self2.prune = false; - self2.barnesHut = false; - iteration = 100; - nodes = this.iterate(iteration, idMap, edgeEndsIdMap, esize, degrees, sizes); - } - return nodes; - } - iterate(iteration, idMap, edgeEndsIdMap, esize, degrees, sizes) { - const self2 = this; - let { nodes } = self2; - const { kr, preventOverlap } = self2; - const { barnesHut } = self2; - const nodeNum = nodes.length; - let sg = 0; - const krPrime = 100; - let iter = iteration; - const prevoIter = 50; - let forces = []; - const preForces = []; - const bodies = []; - for (let i4 = 0; i4 < nodeNum; i4 += 1) { - forces[2 * i4] = 0; - forces[2 * i4 + 1] = 0; - if (barnesHut) { - const params = { - id: i4, - rx: nodes[i4].x, - ry: nodes[i4].y, - mass: 1, - g: kr, - degree: degrees[i4] - }; - bodies[i4] = new Body(params); - } - } - while (iter > 0) { - for (let i4 = 0; i4 < nodeNum; i4 += 1) { - preForces[2 * i4] = forces[2 * i4]; - preForces[2 * i4 + 1] = forces[2 * i4 + 1]; - forces[2 * i4] = 0; - forces[2 * i4 + 1] = 0; - } - forces = this.getAttrForces(iter, prevoIter, esize, idMap, edgeEndsIdMap, degrees, sizes, forces); - if (barnesHut && (preventOverlap && iter > prevoIter || !preventOverlap)) { - forces = this.getOptRepGraForces(forces, bodies, degrees); - } else { - forces = this.getRepGraForces(iter, prevoIter, forces, krPrime, sizes, degrees); - } - const res = this.updatePos(forces, preForces, sg, degrees); - nodes = res.nodes; - sg = res.sg; - iter--; - if (self2.tick) - self2.tick(); - } - return nodes; - } - getAttrForces(iter, prevoIter, esize, idMap, edgeEndsIdMap, degrees, sizes, forces) { - const self2 = this; - const { nodes, preventOverlap, dissuadeHubs, mode, prune } = self2; - for (let i4 = 0; i4 < esize; i4 += 1) { - const sourceNode = nodes[edgeEndsIdMap[i4].sourceIdx]; - const sourceIdx = edgeEndsIdMap[i4].sourceIdx; - const targetNode = nodes[edgeEndsIdMap[i4].targetIdx]; - const targetIdx = edgeEndsIdMap[i4].targetIdx; - if (prune && (degrees[sourceIdx] <= 1 || degrees[targetIdx] <= 1)) - continue; - const dir = [targetNode.x - sourceNode.x, targetNode.y - sourceNode.y]; - let eucliDis = Math.hypot(dir[0], dir[1]); - eucliDis = eucliDis < 1e-4 ? 1e-4 : eucliDis; - dir[0] = dir[0] / eucliDis; - dir[1] = dir[1] / eucliDis; - if (preventOverlap && iter < prevoIter) - eucliDis = eucliDis - sizes[sourceIdx] - sizes[targetIdx]; - let Fa1 = eucliDis; - let Fa2 = Fa1; - if (mode === "linlog") { - Fa1 = Math.log(1 + eucliDis); - Fa2 = Fa1; - } - if (dissuadeHubs) { - Fa1 = eucliDis / degrees[sourceIdx]; - Fa2 = eucliDis / degrees[targetIdx]; - } - if (preventOverlap && iter < prevoIter && eucliDis <= 0) { - Fa1 = 0; - Fa2 = 0; - } else if (preventOverlap && iter < prevoIter && eucliDis > 0) { - Fa1 = eucliDis; - Fa2 = eucliDis; - } - forces[2 * idMap[sourceNode.id]] += Fa1 * dir[0]; - forces[2 * idMap[targetNode.id]] -= Fa2 * dir[0]; - forces[2 * idMap[sourceNode.id] + 1] += Fa1 * dir[1]; - forces[2 * idMap[targetNode.id] + 1] -= Fa2 * dir[1]; - } - return forces; - } - getRepGraForces(iter, prevoIter, forces, krPrime, sizes, degrees) { - const self2 = this; - const { nodes, preventOverlap, kr, kg, center: center2, prune } = self2; - const nodeNum = nodes.length; - for (let i4 = 0; i4 < nodeNum; i4 += 1) { - for (let j4 = i4 + 1; j4 < nodeNum; j4 += 1) { - if (prune && (degrees[i4] <= 1 || degrees[j4] <= 1)) - continue; - const dir2 = [nodes[j4].x - nodes[i4].x, nodes[j4].y - nodes[i4].y]; - let eucliDis2 = Math.hypot(dir2[0], dir2[1]); - eucliDis2 = eucliDis2 < 1e-4 ? 1e-4 : eucliDis2; - dir2[0] = dir2[0] / eucliDis2; - dir2[1] = dir2[1] / eucliDis2; - if (preventOverlap && iter < prevoIter) - eucliDis2 = eucliDis2 - sizes[i4] - sizes[j4]; - let Fr = kr * (degrees[i4] + 1) * (degrees[j4] + 1) / eucliDis2; - if (preventOverlap && iter < prevoIter && eucliDis2 < 0) { - Fr = krPrime * (degrees[i4] + 1) * (degrees[j4] + 1); - } else if (preventOverlap && iter < prevoIter && eucliDis2 === 0) { - Fr = 0; - } else if (preventOverlap && iter < prevoIter && eucliDis2 > 0) { - Fr = kr * (degrees[i4] + 1) * (degrees[j4] + 1) / eucliDis2; - } - forces[2 * i4] -= Fr * dir2[0]; - forces[2 * j4] += Fr * dir2[0]; - forces[2 * i4 + 1] -= Fr * dir2[1]; - forces[2 * j4 + 1] += Fr * dir2[1]; - } - const dir = [nodes[i4].x - center2[0], nodes[i4].y - center2[1]]; - const eucliDis = Math.hypot(dir[0], dir[1]); - dir[0] = dir[0] / eucliDis; - dir[1] = dir[1] / eucliDis; - const Fg = kg * (degrees[i4] + 1); - forces[2 * i4] -= Fg * dir[0]; - forces[2 * i4 + 1] -= Fg * dir[1]; - } - return forces; - } - getOptRepGraForces(forces, bodies, degrees) { - const self2 = this; - const { nodes, kg, center: center2, prune } = self2; - const nodeNum = nodes.length; - let minx = 9e10; - let maxx = -9e10; - let miny = 9e10; - let maxy = -9e10; - for (let i4 = 0; i4 < nodeNum; i4 += 1) { - if (prune && degrees[i4] <= 1) - continue; - bodies[i4].setPos(nodes[i4].x, nodes[i4].y); - if (nodes[i4].x >= maxx) - maxx = nodes[i4].x; - if (nodes[i4].x <= minx) - minx = nodes[i4].x; - if (nodes[i4].y >= maxy) - maxy = nodes[i4].y; - if (nodes[i4].y <= miny) - miny = nodes[i4].y; - } - const width2 = Math.max(maxx - minx, maxy - miny); - const quadParams = { - xmid: (maxx + minx) / 2, - ymid: (maxy + miny) / 2, - length: width2, - massCenter: center2, - mass: nodeNum - }; - const quad = new Quad(quadParams); - const quadTree = new QuadTree(quad); - for (let i4 = 0; i4 < nodeNum; i4 += 1) { - if (prune && degrees[i4] <= 1) - continue; - if (bodies[i4].in(quad)) - quadTree.insert(bodies[i4]); - } - for (let i4 = 0; i4 < nodeNum; i4 += 1) { - if (prune && degrees[i4] <= 1) - continue; - bodies[i4].resetForce(); - quadTree.updateForce(bodies[i4]); - forces[2 * i4] -= bodies[i4].fx; - forces[2 * i4 + 1] -= bodies[i4].fy; - const dir = [nodes[i4].x - center2[0], nodes[i4].y - center2[1]]; - let eucliDis = Math.hypot(dir[0], dir[1]); - eucliDis = eucliDis < 1e-4 ? 1e-4 : eucliDis; - dir[0] = dir[0] / eucliDis; - dir[1] = dir[1] / eucliDis; - const Fg = kg * (degrees[i4] + 1); - forces[2 * i4] -= Fg * dir[0]; - forces[2 * i4 + 1] -= Fg * dir[1]; - } - return forces; - } - updatePos(forces, preForces, sg, degrees) { - const self2 = this; - const { nodes, ks, tao, prune, ksmax } = self2; - const nodeNum = nodes.length; - const swgns = []; - const trans = []; - let swgG = 0; - let traG = 0; - for (let i4 = 0; i4 < nodeNum; i4 += 1) { - if (prune && degrees[i4] <= 1) - continue; - const minus = [ - forces[2 * i4] - preForces[2 * i4], - forces[2 * i4 + 1] - preForces[2 * i4 + 1] - ]; - const minusNorm = Math.hypot(minus[0], minus[1]); - const add8 = [ - forces[2 * i4] + preForces[2 * i4], - forces[2 * i4 + 1] + preForces[2 * i4 + 1] - ]; - const addNorm = Math.hypot(add8[0], add8[1]); - swgns[i4] = minusNorm; - trans[i4] = addNorm / 2; - swgG += (degrees[i4] + 1) * swgns[i4]; - traG += (degrees[i4] + 1) * trans[i4]; - } - const preSG = sg; - sg = tao * traG / swgG; - if (preSG !== 0) { - sg = sg > 1.5 * preSG ? 1.5 * preSG : sg; - } - for (let i4 = 0; i4 < nodeNum; i4 += 1) { - if (prune && degrees[i4] <= 1) - continue; - let sn = ks * sg / (1 + sg * Math.sqrt(swgns[i4])); - let absForce = Math.hypot(forces[2 * i4], forces[2 * i4 + 1]); - absForce = absForce < 1e-4 ? 1e-4 : absForce; - const max15 = ksmax / absForce; - sn = sn > max15 ? max15 : sn; - const dnx = sn * forces[2 * i4]; - const dny = sn * forces[2 * i4 + 1]; - nodes[i4].x += dnx; - nodes[i4].y += dny; - } - return { nodes, sg }; - } -}; - -// node_modules/@antv/layout/es/layout/er/grid.js -var Grid2 = class { - constructor() { - this.cells = []; - this.columnNum = 0; - this.rowNum = 0; - this.additionColumn = []; - this.additionRow = []; - } - init(width2, height, gridSize) { - this.cells = []; - this.CELL_W = gridSize.CELL_W || Grid2.DEFAULT_CELL_W; - this.CELL_H = gridSize.CELL_H || Grid2.DEFAULT_CELL_H; - this.columnNum = Math.ceil(width2 / this.CELL_W); - this.rowNum = Math.ceil(height / this.CELL_H); - Grid2.MIN_DIST = Math.pow(width2, 2) + Math.pow(height, 2); - for (let i4 = 0; i4 < this.columnNum; i4++) { - const tmp = []; - for (let j4 = 0; j4 < this.rowNum; j4++) { - const cell = { - dx: i4, - dy: j4, - x: i4 * this.CELL_W, - y: j4 * this.CELL_H, - occupied: false - }; - tmp.push(cell); - } - this.cells.push(tmp); - } - } - findGridByNodeId(nodeId) { - var _a6, _b; - for (let i4 = 0; i4 < this.columnNum; i4++) { - for (let j4 = 0; j4 < this.rowNum; j4++) { - if (this.cells[i4][j4].node) { - if (((_b = (_a6 = this.cells[i4][j4]) === null || _a6 === void 0 ? void 0 : _a6.node) === null || _b === void 0 ? void 0 : _b.id) === nodeId) { - return { column: i4, row: j4 }; - } - } - } - } - return null; - } - sqdist(a4, b10) { - return Math.pow(a4.x - b10.x, 2) + Math.pow(a4.y - b10.y, 2); - } - occupyNearest(p4) { - let minDist = Grid2.MIN_DIST; - let d3; - let candidate = null; - for (let i4 = 0; i4 < this.columnNum; i4++) { - for (let j4 = 0; j4 < this.rowNum; j4++) { - if (!this.cells[i4][j4].occupied && (d3 = this.sqdist(p4, this.cells[i4][j4])) < minDist) { - minDist = d3; - candidate = this.cells[i4][j4]; - } - } - } - if (candidate) { - candidate.occupied = true; - } - return candidate; - } - insertColumn(columnIndex, length5) { - if (length5 <= 0) - return; - for (let i4 = 0; i4 < length5; i4++) { - this.cells[i4 + this.columnNum] = []; - for (let j4 = 0; j4 < this.rowNum; j4++) { - this.cells[i4 + this.columnNum][j4] = { - dx: i4, - dy: j4, - x: i4 * this.CELL_W, - y: j4 * this.CELL_H, - occupied: false, - node: null - }; - } - } - for (let i4 = this.columnNum - 1; i4 > columnIndex; i4--) { - for (let j4 = 0; j4 < this.rowNum; j4++) { - this.cells[i4 + length5][j4] = Object.assign(Object.assign({}, this.cells[i4][j4]), { x: (i4 + length5) * this.CELL_W, y: j4 * this.CELL_H }); - this.cells[i4][j4] = { - x: i4 * this.CELL_W, - y: j4 * this.CELL_H, - occupied: true, - node: null - }; - } - } - for (let j4 = 0; j4 < this.additionColumn.length; j4++) { - if (this.additionColumn[j4] >= columnIndex) { - this.additionColumn[j4] += length5; - } - } - for (let i4 = 0; i4 < length5; i4++) { - this.additionColumn.push(columnIndex + i4 + 1); - } - this.columnNum += length5; - } - insertRow(rowIndex, length5) { - if (length5 <= 0) - return; - for (let j4 = 0; j4 < length5; j4++) { - for (let i4 = 0; i4 < this.columnNum; i4++) { - this.cells[i4][j4 + this.rowNum] = { - dx: i4, - dy: j4, - x: i4 * this.CELL_W, - y: j4 * this.CELL_H, - occupied: false, - node: null - }; - } - } - for (let i4 = 0; i4 < this.columnNum; i4++) { - for (let j4 = this.rowNum - 1; j4 > rowIndex; j4--) { - this.cells[i4][j4 + length5] = Object.assign(Object.assign({}, this.cells[i4][j4]), { dx: i4, dy: j4 + length5, x: i4 * this.CELL_W, y: (j4 + length5) * this.CELL_H }); - this.cells[i4][j4] = { - dx: i4, - dy: j4, - x: i4 * this.CELL_W, - y: j4 * this.CELL_H, - occupied: false, - node: null - }; - } - } - for (let j4 = 0; j4 < this.additionRow.length; j4++) { - if (this.additionRow[j4] >= rowIndex) { - this.additionRow[j4] += length5; - } - } - for (let i4 = 0; i4 < length5; i4++) { - this.additionRow.push(rowIndex + i4 + 1); - } - this.rowNum += length5; - } - getNodes() { - const nodes = []; - for (let i4 = 0; i4 < this.columnNum; i4++) { - for (let j4 = 0; j4 < this.rowNum; j4++) { - if (this.cells[i4][j4].node) { - nodes.push(this.cells[i4][j4]); - } - } - } - return nodes; - } -}; -Grid2.MIN_DIST = 50; -Grid2.DEFAULT_CELL_W = 80; -Grid2.DEFAULT_CELL_H = 80; - -// node_modules/@antv/layout/es/layout/er/forceGrid.js -function layout3(data3, options) { - if (!data3.nodes || data3.nodes.length === 0) - return data3; - const width2 = options.width; - const height = options.height; - const nodeMinGap = options.nodeMinGap; - let CELL_W2 = 1e4; - let CELL_H2 = 1e4; - data3.nodes.forEach((node) => { - const nodeWidth = node.size[0] || 50; - const nodeHeight = node.size[1] || 50; - CELL_W2 = Math.min(nodeWidth, CELL_W2); - CELL_H2 = Math.min(nodeHeight, CELL_H2); - }); - const grid = new Grid2(); - grid.init(width2, height, { - CELL_H: CELL_H2, - CELL_W: CELL_W2 - }); - data3.nodes.forEach((d3) => { - const gridpoint = grid.occupyNearest(d3); - if (gridpoint) { - gridpoint.node = { - id: d3.id, - size: d3.size - }; - d3.x = gridpoint.x; - d3.y = gridpoint.y; - d3.dx = gridpoint.dx; - d3.dy = gridpoint.dy; - } - }); - for (let i4 = 0; i4 < data3.nodes.length; i4++) { - const node = data3.nodes[i4]; - const result = grid.findGridByNodeId(node.id); - if (!result) - throw new Error("can not find node cell"); - const { column, row } = result; - if (node.size[0] + nodeMinGap > CELL_W2) { - const addGridSize = Math.ceil((node.size[0] + nodeMinGap) / CELL_W2) - 1; - let realAdd = addGridSize; - for (let j4 = 0; j4 < addGridSize; j4++) { - const hasColumn = grid.additionColumn.indexOf(column + j4 + 1) > -1; - if (hasColumn && !grid.cells[column + j4 + 1][row].node) { - realAdd--; - } else { - break; - } - } - grid.insertColumn(column, realAdd); - } - if (node.size[1] + nodeMinGap > CELL_H2) { - const addGridSize = Math.ceil((node.size[1] + nodeMinGap) / CELL_H2) - 1; - let realAdd = addGridSize; - for (let j4 = 0; j4 < addGridSize; j4++) { - const hasColumn = grid.additionRow.indexOf(row + j4 + 1) > -1; - if (hasColumn && !grid.cells[column][row + j4 + 1].node) { - realAdd--; - } else { - break; - } - } - grid.insertRow(row, realAdd); - } - } - for (let i4 = 0; i4 < grid.columnNum; i4++) { - for (let j4 = 0; j4 < grid.rowNum; j4++) { - const cell = grid.cells[i4][j4]; - if (cell.node) { - const node = data3.nodes.find((node2) => { - var _a6; - return node2.id === ((_a6 = cell === null || cell === void 0 ? void 0 : cell.node) === null || _a6 === void 0 ? void 0 : _a6.id); - }); - if (node) { - node.x = cell.x + node.size[0] / 2; - node.y = cell.y + node.size[1] / 2; - } - } - } - } -} - -// node_modules/@antv/layout/es/layout/er/mysqlWorkbench.js -var graphWidth = 1200; -var graphHeight = 800; -var OVERLAP_QUOT = 1e7; -var MIN_DIST = 10; -var M_PI = 3.141592653589793; -var M_PI_2 = 1.5707963267948966; -var PI_38 = M_PI * 0.375; -var PI_58 = M_PI * 0.625; -var nodeEdgeMap = new Map(); -var CELL_W = 10; -var CELL_H = 10; -var T4 = 0.8; -var T_MIN = 0.1; -var R2 = 0.5; -function distanceToNode(node1, node2, isHoriz) { - const x11 = node1.x - node1.size[0] / 2; - const y11 = node1.y - node1.size[1] / 2; - const x12 = node1.x + node1.size[0] / 2; - const y12 = node1.y + node1.size[1] / 2; - const x21 = node2.x - node2.size[0] / 2; - const y21 = node2.y - node2.size[1] / 2; - const x22 = node2.x + node2.size[0] / 2; - const y22 = node2.y + node2.size[1] / 2; - const cx1 = node1.x; - const cy1 = node1.y; - const cx2 = node2.x; - const cy2 = node2.y; - const dcx = cx2 - cx1; - const qr = Math.atan2(dcx, cy2 - cy1); - let dx = 0; - let dy = 0; - let l1 = 0; - let l22 = 0; - if (qr > M_PI_2) { - dy = y11 - y22; - dx = x21 - x12; - l1 = parseFloat(dy ? (dy / Math.cos(qr)).toFixed(2) : dx.toFixed(2)); - l22 = parseFloat(dx ? (dx / Math.sin(qr)).toFixed(2) : dy.toFixed(2)); - } else if (0 < qr && qr <= M_PI_2) { - dy = y21 - y12; - dx = x21 - x12; - if (dy > dx) { - l1 = l22 = parseFloat(dy ? (dy / Math.cos(qr)).toFixed(2) : dx.toFixed(2)); - } else { - l1 = l22 = parseFloat(dx ? (dx / Math.sin(qr)).toFixed(2) : dy.toFixed(2)); - } - } else if (qr < -M_PI_2) { - dy = y11 - y22; - dx = -(x22 - x11); - if (dy > dx) { - l1 = l22 = parseFloat(dy ? (dy / Math.cos(qr)).toFixed(2) : dx.toFixed(2)); - } else { - l1 = l22 = parseFloat(dx ? (dx / Math.sin(qr)).toFixed(2) : dy.toFixed(2)); - } - } else { - dy = y21 - y12; - if (Math.abs(dcx) > (x12 - x11) / 2) { - dx = x11 - x22; - } else { - dx = dcx; - } - if (dy > dx) { - l1 = l22 = parseFloat(dy ? (dy / Math.cos(qr)).toFixed(2) : dx.toFixed(2)); - } else { - l1 = l22 = parseFloat(dx && qr !== 0 ? (dx / Math.sin(qr)).toFixed(2) : dy.toFixed(2)); - } - } - const aqr = parseFloat(qr.toFixed(2)); - let newHoriz = isHoriz; - if (isHoriz) { - newHoriz = PI_38 < aqr && aqr < PI_58; - } - return { - distance: Math.abs(l1 < l22 ? l1 : l22), - isHoriz: newHoriz - }; -} -function calcNodePair(nodeA, nodeB) { - const edges = nodeEdgeMap.get(nodeA.id) || []; - const isLinked = edges.find((edge2) => { - return edge2.source === nodeB.id || edge2.target === nodeB.id; - }); - const areaA = nodeA.size[0] * nodeA.size[1]; - const areaB = nodeB.size[0] * nodeB.size[1]; - const node1 = areaA > areaB ? nodeB : nodeA; - const node2 = areaA > areaB ? nodeA : nodeB; - const x11 = node1.x - node1.size[0] / 2; - const y11 = node1.y - node1.size[1] / 2; - const x12 = node1.x + node1.size[0] / 2; - const y12 = node1.y + node1.size[1] / 2; - const x21 = node2.x - node2.size[0] / 2; - const y21 = node2.y - node2.size[1] / 2; - const x22 = node2.x + node2.size[0] / 2; - const y22 = node2.y + node2.size[1] / 2; - const cx1 = node1.x; - const cy1 = node1.y; - const cx2 = node2.x; - const cy2 = node2.y; - const isoverlap = x12 >= x21 && x22 >= x11 && y12 >= y21 && y22 >= y11; - let e4 = 0; - let distance15 = 0; - if (isoverlap) { - distance15 = Math.sqrt(Math.pow(cx2 - cx1, 2) + Math.pow(cy2 - cy1, 2)); - const sx1 = x11 > x21 ? x11 : x21; - const sy1 = y11 > y21 ? y11 : y21; - const sx2 = x12 < x22 ? x12 : x22; - const sy2 = y12 < y22 ? y12 : y22; - const dsx = sx2 - sx1; - const dsy = sy2 - sy1; - const sov = dsx * dsy; - if (distance15 === 0) { - distance15 = 1e-7; - } - e4 = MIN_DIST * 1 / distance15 * 100 + sov; - e4 *= OVERLAP_QUOT; - } else { - let isHoriz = false; - const res = distanceToNode(node1, node2, isHoriz); - distance15 = res.distance; - isHoriz = res.isHoriz; - if (distance15 <= MIN_DIST) { - if (distance15 !== 0) { - if (isLinked) { - e4 += MIN_DIST + OVERLAP_QUOT * 1 / distance15; - } else { - e4 += MIN_DIST + OVERLAP_QUOT * MIN_DIST / distance15; - } - } else { - e4 += OVERLAP_QUOT; - } - } else { - e4 += distance15; - if (isLinked) { - e4 += distance15 * distance15; - } - } - } - return e4; -} -function calcEnergy(nodes) { - let energy = 0; - for (let i4 = 0; i4 < nodes.length; i4++) { - const node = nodes[i4]; - if (node.x < 0 || node.y < 0 || node.x > graphWidth || node.y > graphHeight) { - energy += 1e12; - } - for (let j4 = i4 + 1; j4 < nodes.length; j4++) { - energy += calcNodePair(node, nodes[j4]); - } - } - return energy; -} -function isCorrectPosition(node, newPosition, nodes, edges) { - const nodeIdxMap = new Map(); - nodes.forEach((o3, i4) => { - nodeIdxMap.set(o3.id, o3); - }); - const relateEdges = edges.filter((edge2) => edge2.source === node.id || edge2.target === node.id) || []; - const relateNodes = []; - relateEdges.forEach((edge2) => { - const otherNodeId = edge2.source === node.id ? edge2.target : edge2.source; - const otherNode = nodeIdxMap.get(otherNodeId); - if (otherNode) { - relateNodes.push(otherNode); - } - }); - let flag = true; - for (let i4 = 0; i4 < relateNodes.length; i4++) { - const item = relateNodes[i4]; - const delta = Math.atan((node.y - item.y) / (item.x - node.y)) * 180; - const newDelta = Math.atan((newPosition.y - item.y) / (item.x - newPosition.y)) * 180; - const isHor = delta < 30 || delta > 150; - const newIsHor = newDelta < 30 || newDelta > 150; - const isVer = delta > 70 && delta < 110; - const newIsVer = newDelta > 70 && newDelta < 110; - if (isHor && !newIsHor || delta * newDelta < 0) { - flag = false; - break; - } else if (isVer && !newIsVer || delta * newDelta < 0) { - flag = false; - break; - } else if ((item.x - node.x) * (item.x - newPosition.x) < 0) { - flag = false; - break; - } else if ((item.y - node.y) * (item.y - newPosition.y) < 0) { - flag = false; - break; - } - } - return flag; -} -function shuffle2(nodes, edges) { - let foundSmallerEnergy = false; - const step = 1; - const wstep = CELL_W * step; - const hstep = CELL_H * step; - const wsteps = [wstep, -wstep, 0, 0]; - const hsteps = [0, 0, hstep, -hstep]; - for (let i4 = 0; i4 < nodes.length; ++i4) { - const node = nodes[i4]; - let nodeEnergy = calcNodeEnergy(node, nodes); - for (let ns = 0; ns < wsteps.length; ns++) { - const flag = isCorrectPosition(node, { x: node.x + wsteps[ns], y: node.y + hsteps[ns] }, nodes, edges); - if (flag) { - node.x += wsteps[ns]; - node.y += hsteps[ns]; - const energy = calcNodeEnergy(node, nodes); - const rdm = Math.random(); - if (energy < nodeEnergy) { - nodeEnergy = energy; - foundSmallerEnergy = true; - } else if (rdm < T4 && rdm > T_MIN) { - nodeEnergy = energy; - foundSmallerEnergy = true; - } else { - node.x -= wsteps[ns]; - node.y -= hsteps[ns]; - } - } - } - } - if (T4 > T_MIN) { - T4 *= R2; - } - if (foundSmallerEnergy) { - return calcEnergy(nodes); - } - return 0; -} -function calcNodeEnergy(node, nodes) { - let e4 = 0; - if (node.x < 0 || node.y < 0 || node.x + node.size[0] + 20 > graphWidth || node.y + node.size[1] + 20 > graphHeight) { - e4 += 1e12; - } - for (let i4 = 0; i4 < nodes.length; ++i4) { - if (node.id !== nodes[i4].id) { - e4 += calcNodePair(node, nodes[i4]); - } - } - return e4; -} -function layout4(nodes, edges) { - if (nodes.length === 0) { - return { nodes, edges }; - } - nodes.forEach((node) => { - const relateEdge = edges.filter((edge2) => edge2.source === node.id || edge2.target === node.id); - nodeEdgeMap.set(node, relateEdge); - }); - nodes.sort((node1, node2) => { - var _a6, _b; - return ((_a6 = nodeEdgeMap.get(node1.id)) === null || _a6 === void 0 ? void 0 : _a6.length) - ((_b = nodeEdgeMap.get(node2.id)) === null || _b === void 0 ? void 0 : _b.length); - }); - let minEnergy = calcEnergy(nodes); - let deSameCount = 20; - let de = 1; - let prevEnergy = 0; - const MAX_COUNT = 50; - let count2 = 0; - while (deSameCount > 0) { - count2++; - if (count2 >= MAX_COUNT) { - break; - } - const ea = shuffle2(nodes, edges); - if (ea !== 0) { - prevEnergy = ea; - } - de = prevEnergy - minEnergy; - minEnergy = prevEnergy; - if (de === 0) { - --deSameCount; - } else { - deSameCount = 20; - } - } - nodes.forEach((node) => { - node.x = node.x - node.size[0] / 2; - node.y = node.y - node.size[1] / 2; - }); - return { - nodes, - edges - }; -} -var mysqlWorkbench_default = layout4; - -// node_modules/@antv/layout/es/layout/er/core.js -function layout5(data3, options) { - const { nodes, edges } = data3; - const width2 = options.width; - const height = options.height; - if (!(nodes === null || nodes === void 0 ? void 0 : nodes.length)) - return Promise.resolve(); - const noLeafNodes = []; - nodes.forEach((node) => { - const relateEdges = edges.filter((edge2) => { - return edge2.source === node.id || edge2.target === node.id; - }); - if (relateEdges.length > 1) { - const temp = Object.assign({}, node); - delete temp.size; - noLeafNodes.push(temp); - } - }); - const noLeafEdge = []; - edges.forEach((edge2) => { - const sourceNode = noLeafNodes.find((node) => node.id === edge2.source); - const targetNode = noLeafNodes.find((node) => node.id === edge2.target); - if (sourceNode && targetNode) { - noLeafEdge.push(edge2); - } - }); - const graphLayout = new DagreLayout({ - type: "dagre", - ranksep: options.nodeMinGap, - nodesep: options.nodeMinGap - }); - const { nodes: nodesTmp } = graphLayout.layout({ - nodes: noLeafNodes, - edges: noLeafEdge - }); - nodes.forEach((n3) => { - const found = (nodesTmp || []).find((temp) => temp.id === n3.id); - n3.x = (found === null || found === void 0 ? void 0 : found.x) || width2 / 2; - n3.y = (found === null || found === void 0 ? void 0 : found.y) || height / 2; - }); - const copyNodes = JSON.parse(JSON.stringify(nodes)); - const copyEdges = JSON.parse(JSON.stringify(edges)); - const simulation = simulation_default().nodes(copyNodes).force("link", link_default(copyEdges).id((d3) => d3.id).distance((d3) => { - const edgeInfo = noLeafEdge.find((edge2) => edge2.source === d3.source && edge2.target === d3.target); - if (edgeInfo) { - return 30; - } - return 20; - })).force("charge", manyBody_default()).force("center", center_default(width2 / 2, height / 2)).force("x", x_default2(width2 / 2)).force("y", y_default2(height / 2)).alpha(0.3).alphaDecay(0.08).alphaMin(1e-3); - const layoutPromise = new Promise((resolve) => { - simulation.on("end", () => { - nodes.forEach((node) => { - const nodeInfo = copyNodes.find((item) => item.id === node.id); - if (nodeInfo) { - node.x = nodeInfo.x; - node.y = nodeInfo.y; - } - }); - const minX = Math.min(...nodes.map((node) => node.x)); - const maxX = Math.max(...nodes.map((node) => node.x)); - const minY = Math.min(...nodes.map((node) => node.y)); - const maxY2 = Math.max(...nodes.map((node) => node.y)); - const scalex = width2 / (maxX - minX); - const scaley = height / (maxY2 - minY); - nodes.forEach((node) => { - if (node.x !== void 0 && scalex < 1) { - node.x = (node.x - minX) * scalex; - } - if (node.y !== void 0 && scaley < 1) { - node.y = (node.y - minY) * scaley; - } - }); - nodes.forEach((node) => { - node.sizeTemp = node.size; - node.size = [10, 10]; - }); - mysqlWorkbench_default(nodes, edges); - nodes.forEach((node) => { - node.size = node.sizeTemp || []; - delete node.sizeTemp; - }); - layout3({ - nodes, - edges - }, options); - resolve(); - }); - }); - return layoutPromise; -} - -// node_modules/@antv/layout/es/layout/er/index.js -var ERLayout = class extends Base3 { - constructor(options) { - super(); - this.width = 300; - this.height = 300; - this.nodeMinGap = 50; - this.onLayoutEnd = () => { - }; - if (options) { - this.updateCfg(options); - } - } - getDefaultCfg() { - return { - width: 300, - height: 300, - nodeMinGap: 50 - }; - } - execute() { - const self2 = this; - const nodes = self2.nodes; - const edges = self2.edges; - nodes === null || nodes === void 0 ? void 0 : nodes.forEach((node) => { - if (!node.size) { - node.size = [50, 50]; - } - }); - return layout5({ - nodes, - edges - }, { - width: this.width, - height: this.height, - nodeMinGap: this.nodeMinGap - }).then(() => { - if (self2.onLayoutEnd) - self2.onLayoutEnd(); - }); - } - getType() { - return "er"; - } -}; - -// node_modules/@antv/layout/es/layout/layout.js -var Layouts = { - force: ForceLayout, - fruchterman: FruchtermanLayout, - forceAtlas2: ForceAtlas2Layout, - gForce: GForceLayout, - dagre: DagreLayout, - circular: CircularLayout, - radial: RadialLayout, - concentric: ConcentricLayout, - grid: GridLayout, - mds: MDSLayout, - comboForce: ComboForceLayout, - random: RandomLayout, - "gForce-gpu": GForceGPULayout, - "fruchterman-gpu": FruchtermanGPULayout, - er: ERLayout -}; - -// node_modules/@antv/g6-pc/es/layout/tree-layout.js -var import_hierarchy4 = __toModule(require_hierarchy()); - -// node_modules/@antv/g6-pc/es/util/layout.js -var layout_exports = {}; -__export(layout_exports, { - arrayToTextureData: () => arrayToTextureData2, - attributesToTextureData: () => attributesToTextureData2, - buildTextureData: () => buildTextureData2, - buildTextureDataWithOneEdgeAttr: () => buildTextureDataWithOneEdgeAttr, - buildTextureDataWithTwoEdgeAttr: () => buildTextureDataWithTwoEdgeAttr2, - proccessToFunc: () => proccessToFunc3, - radialLayout: () => radialLayout -}); -var import_util549 = __toModule(require_lib()); -var traverseTree3 = util_default.traverseTree; -var proccessToFunc3 = function proccessToFunc4(value2, defaultV) { - var func; - if (!value2) { - func = function func2(d3) { - return defaultV || 1; - }; - } else if ((0, import_util549.isNumber)(value2)) { - func = function func2(d3) { - return value2; - }; - } else { - func = value2; - } - return func; -}; -var buildTextureData2 = function buildTextureData3(nodes, edges) { - var dataArray = []; - var nodeDict = []; - var mapIdPos = {}; - var i4 = 0; - for (i4 = 0; i4 < nodes.length; i4++) { - var n3 = nodes[i4]; - mapIdPos[n3.id] = i4; - dataArray.push(n3.x); - dataArray.push(n3.y); - dataArray.push(0); - dataArray.push(0); - nodeDict.push([]); - } - for (i4 = 0; i4 < edges.length; i4++) { - var e4 = edges[i4]; - nodeDict[mapIdPos[e4.source]].push(mapIdPos[e4.target]); - nodeDict[mapIdPos[e4.target]].push(mapIdPos[e4.source]); - } - var maxEdgePerVetex = 0; - for (i4 = 0; i4 < nodes.length; i4++) { - var offset = dataArray.length; - var dests = nodeDict[i4]; - var len5 = dests.length; - dataArray[i4 * 4 + 2] = offset; - dataArray[i4 * 4 + 3] = dests.length; - maxEdgePerVetex = Math.max(maxEdgePerVetex, dests.length); - for (var j4 = 0; j4 < len5; ++j4) { - var dest = dests[j4]; - dataArray.push(+dest); - } - } - while (dataArray.length % 4 !== 0) { - dataArray.push(0); - } - return { - array: new Float32Array(dataArray), - maxEdgePerVetex - }; -}; -var buildTextureDataWithOneEdgeAttr = function buildTextureDataWithOneEdgeAttr2(nodes, edges, attrs) { - var dataArray = []; - var nodeDict = []; - var mapIdPos = {}; - var i4 = 0; - for (i4 = 0; i4 < nodes.length; i4++) { - var n3 = nodes[i4]; - mapIdPos[n3.id] = i4; - dataArray.push(n3.x); - dataArray.push(n3.y); - dataArray.push(0); - dataArray.push(0); - nodeDict.push([]); - } - for (i4 = 0; i4 < edges.length; i4++) { - var e4 = edges[i4]; - nodeDict[mapIdPos[e4.source]].push(mapIdPos[e4.target]); - nodeDict[mapIdPos[e4.source]].push(attrs(e4)); - nodeDict[mapIdPos[e4.target]].push(mapIdPos[e4.source]); - nodeDict[mapIdPos[e4.target]].push(attrs(e4)); - } - var maxEdgePerVetex = 0; - for (i4 = 0; i4 < nodes.length; i4++) { - var offset = dataArray.length; - var dests = nodeDict[i4]; - var len5 = dests.length; - dataArray[i4 * 4 + 2] = offset; - dataArray[i4 * 4 + 3] = len5 / 2; - maxEdgePerVetex = Math.max(maxEdgePerVetex, len5 / 2); - for (var j4 = 0; j4 < len5; ++j4) { - var dest = dests[j4]; - dataArray.push(+dest); - } - } - while (dataArray.length % 4 !== 0) { - dataArray.push(0); - } - return { - array: new Float32Array(dataArray), - maxEdgePerVetex - }; -}; -var buildTextureDataWithTwoEdgeAttr2 = function buildTextureDataWithTwoEdgeAttr3(nodes, edges, attrs1, attrs2) { - var dataArray = []; - var nodeDict = []; - var mapIdPos = {}; - var i4 = 0; - for (i4 = 0; i4 < nodes.length; i4++) { - var n3 = nodes[i4]; - mapIdPos[n3.id] = i4; - dataArray.push(n3.x); - dataArray.push(n3.y); - dataArray.push(0); - dataArray.push(0); - nodeDict.push([]); - } - for (i4 = 0; i4 < edges.length; i4++) { - var e4 = edges[i4]; - nodeDict[mapIdPos[e4.source]].push(mapIdPos[e4.target]); - nodeDict[mapIdPos[e4.source]].push(attrs1(e4)); - nodeDict[mapIdPos[e4.source]].push(attrs2(e4)); - nodeDict[mapIdPos[e4.source]].push(0); - nodeDict[mapIdPos[e4.target]].push(mapIdPos[e4.source]); - nodeDict[mapIdPos[e4.target]].push(attrs1(e4)); - nodeDict[mapIdPos[e4.target]].push(attrs2(e4)); - nodeDict[mapIdPos[e4.target]].push(0); - } - var maxEdgePerVetex = 0; - for (i4 = 0; i4 < nodes.length; i4++) { - var offset = dataArray.length; - var dests = nodeDict[i4]; - var len5 = dests.length; - dataArray[i4 * 4 + 2] = offset + 1048576 * len5 / 4; - dataArray[i4 * 4 + 3] = 0; - maxEdgePerVetex = Math.max(maxEdgePerVetex, len5 / 4); - for (var j4 = 0; j4 < len5; ++j4) { - var dest = dests[j4]; - dataArray.push(+dest); - } - } - while (dataArray.length % 4 !== 0) { - dataArray.push(0); - } - return { - array: new Float32Array(dataArray), - maxEdgePerVetex - }; -}; -var attributesToTextureData2 = function attributesToTextureData3(attributeNames, items) { - var dataArray = []; - var attributeNum = attributeNames.length; - var attributteStringMap = {}; - items.forEach(function(item) { - attributeNames.forEach(function(name, i4) { - if (attributteStringMap[item[name]] === void 0) { - attributteStringMap[item[name]] = Object.keys(attributteStringMap).length; - } - dataArray.push(attributteStringMap[item[name]]); - if (i4 === attributeNum - 1) { - while (dataArray.length % 4 !== 0) { - dataArray.push(0); - } - } - }); - }); - return { - array: new Float32Array(dataArray), - count: Object.keys(attributteStringMap).length - }; -}; -var arrayToTextureData2 = function arrayToTextureData3(valueArrays) { - var dataArray = []; - var attributeNum = valueArrays.length; - var itemNum = valueArrays[0].length; - var _loop_1 = function _loop_12(j5) { - valueArrays.forEach(function(valueArray, i4) { - dataArray.push(valueArray[j5]); - if (i4 === attributeNum - 1) { - while (dataArray.length % 4 !== 0) { - dataArray.push(0); - } - } - }); - }; - for (var j4 = 0; j4 < itemNum; j4++) { - _loop_1(j4); - } - return new Float32Array(dataArray); -}; -var radialLayout = function radialLayout2(data3, layout6) { - var VERTICAL_LAYOUTS = ["V", "TB", "BT"]; - var min13 = { - x: Infinity, - y: Infinity - }; - var max15 = { - x: -Infinity, - y: -Infinity - }; - var rScale = "x"; - var radScale = "y"; - if (layout6 && VERTICAL_LAYOUTS.indexOf(layout6) >= 0) { - radScale = "x"; - rScale = "y"; - } - var count2 = 0; - traverseTree3(data3, function(node) { - count2++; - if (node.x > max15.x) { - max15.x = node.x; - } - if (node.x < min13.x) { - min13.x = node.x; - } - if (node.y > max15.y) { - max15.y = node.y; - } - if (node.y < min13.y) { - min13.y = node.y; - } - return true; - }); - var avgRad = Math.PI * 2 / count2; - var radDiff = max15[radScale] - min13[radScale]; - if (radDiff === 0) { - return data3; - } - traverseTree3(data3, function(node) { - var radial = (node[radScale] - min13[radScale]) / radDiff * (Math.PI * 2 - avgRad) + avgRad; - var r4 = Math.abs(rScale === "x" ? node.x - data3.x : node.y - data3.y); - node.x = r4 * Math.cos(radial); - node.y = r4 * Math.sin(radial); - return true; - }); - return data3; -}; - -// node_modules/@antv/g6-pc/es/util/gpu.js -var gpu_exports = {}; -__export(gpu_exports, { - gpuDetector: () => gpuDetector -}); -var gpuDetector = function gpuDetector2() { - if (typeof window === "undefined" || typeof document === "undefined") - return {}; - return { - canvas: !!window.CanvasRenderingContext2D, - webgl: function() { - try { - var canvas = document.createElement("canvas"); - return !!(window.WebGLRenderingContext && (canvas.getContext("webgl") || canvas.getContext("experimental-webgl"))); - } catch (e4) { - return false; - } - }(), - workers: !!window.Worker, - fileapi: window.File && window.FileReader && window.FileList && window.Blob, - getWebGLErrorMessage: function getWebGLErrorMessage() { - var element = document.createElement("div"); - element.id = "webgl-error-message"; - element.style.fontFamily = "monospace"; - element.style.fontSize = "13px"; - element.style.fontWeight = "normal"; - element.style.textAlign = "center"; - element.style.background = "#fff"; - element.style.color = "#000"; - element.style.padding = "1.5em"; - element.style.width = "400px"; - element.style.margin = "5em auto 0"; - if (!this.webgl) { - element.innerHTML = window.WebGLRenderingContext ? ['Your graphics card does not seem to support WebGL.
      ', 'Find out how to get it here.'].join("\n") : ['Your browser does not seem to support WebGL.
      ', 'Find out how to get it here.'].join("\n"); - } - return element; - }, - addGetWebGLMessage: function addGetWebGLMessage(parameters) { - parameters = parameters || {}; - var parent = parameters.parent !== void 0 ? parameters.parent : document.body; - var id = parameters.id !== void 0 ? parameters.id : "oldie"; - var element = gpuDetector2().getWebGLErrorMessage(); - element.id = id; - parent.appendChild(element); - } - }; -}; - -// node_modules/@antv/g6-pc/es/util/index.js -var G6Util = __assign(__assign(__assign(__assign({}, util_default), color_exports2), layout_exports), gpu_exports); -var util_default3 = G6Util; - -// node_modules/@antv/g6-pc/es/layout/tree-layout.js -var radialLayout3 = util_default3.radialLayout; -var TreeLayout = function() { - function TreeLayout2(cfg) { - this.type = cfg.type; - this.radial = cfg.radial; - this.config = cfg; - } - TreeLayout2.prototype.init = function(data3) { - var _this = this; - this.data = data3; - if (this.radial) { - this.layoutMethod = function(data4) { - var layoutData = import_hierarchy4.default[_this.type](data4, _this.config); - radialLayout3(layoutData); - return layoutData; - }; - return; - } - this.layoutMethod = function(data4) { - return import_hierarchy4.default[_this.type](data4, _this.config); - }; - }; - TreeLayout2.prototype.execute = function() { - return this.layoutMethod(this.data, this.config); - }; - TreeLayout2.prototype.layout = function(data3) { - this.init(data3); - return this.execute(); - }; - return TreeLayout2; -}(); -var tree_layout_default = TreeLayout; - -// node_modules/@antv/g6-pc/es/layout/index.js -registerLayout("grid", GridLayout); -registerLayout("random", RandomLayout); -registerLayout("force", ForceLayout); -registerLayout("circular", CircularLayout); -registerLayout("dagre", DagreLayout); -registerLayout("radial", RadialLayout); -registerLayout("concentric", ConcentricLayout); -registerLayout("mds", MDSLayout); -registerLayout("fruchterman", FruchtermanLayout); -registerLayout("fruchterman-gpu", FruchtermanGPULayout); -registerLayout("gForce", GForceLayout); -registerLayout("gForce-gpu", GForceGPULayout); -registerLayout("comboForce", ComboForceLayout); -registerLayout("forceAtlas2", ForceAtlas2Layout); -var registerLayout2 = function registerLayout3(name, layoutOverride) { - layoutOverride.isCustomLayout = true; - Layouts[name] = registerLayout(name, layoutOverride); -}; - -// node_modules/@antv/g6-pc/es/layout/worker/work.js -var WebWorker = function() { - function WebWorker2(worker, workerScirptURL) { - var code = worker.toString(); - var blob = new Blob(["importScripts('".concat(workerScirptURL, "');(").concat(code, ")()")], { - type: "text/javascript" - }); - return new Worker(URL.createObjectURL(blob)); - } - return WebWorker2; -}(); -var work_default = WebWorker; - -// node_modules/@antv/g6-pc/es/layout/worker/layout.worker.js -var LayoutWorker = function LayoutWorker2(workerScriptURL) { - if (workerScriptURL === void 0) { - workerScriptURL = "https://unpkg.com/@antv/layout@latest/dist/layout.min.js"; - } - function workerCode() { - var LAYOUT_MESSAGE3 = { - RUN: "LAYOUT_RUN", - END: "LAYOUT_END", - ERROR: "LAYOUT_ERROR", - TICK: "LAYOUT_TICK", - GPURUN: "GPU_LAYOUT_RUN", - GPUEND: "GPU_LAYOUT_END" - }; - layout.registerLayout("grid", layout.GridLayout); - layout.registerLayout("random", layout.RandomLayout); - layout.registerLayout("force", layout.ForceLayout); - layout.registerLayout("circular", layout.CircularLayout); - layout.registerLayout("dagre", layout.DagreLayout); - layout.registerLayout("radial", layout.RadialLayout); - layout.registerLayout("concentric", layout.ConcentricLayout); - layout.registerLayout("mds", layout.MDSLayout); - layout.registerLayout("fruchterman", layout.FruchtermanLayout); - layout.registerLayout("fruchterman-gpu", layout.FruchtermanGPULayout); - layout.registerLayout("gForce", layout.GForceLayout); - layout.registerLayout("gForce-gpu", layout.GForceGPULayout); - layout.registerLayout("comboForce", layout.ComboForceLayout); - layout.registerLayout("forceAtlas2", layout.ForceAtlas2Layout); - function isLayoutMessage(event) { - var type2 = event.data.type; - return type2 === LAYOUT_MESSAGE3.RUN || type2 === LAYOUT_MESSAGE3.GPURUN; - } - function handleLayoutMessage(event) { - var _this = this; - var type2 = event.data.type; - switch (type2) { - case LAYOUT_MESSAGE3.RUN: { - var _a6 = event.data, nodes_1 = _a6.nodes, edges = _a6.edges, _b = _a6.layoutCfg, layoutCfg = _b === void 0 ? {} : _b; - var layoutType = layoutCfg.type; - var LayoutClass = layout.getLayoutByName(layoutType); - if (!LayoutClass) { - this.postMessage({ - type: LAYOUT_MESSAGE3.ERROR, - message: "layout ".concat(layoutType, " not found") - }); - break; - } - var layoutMethod_1; - layoutCfg.onLayoutEnd = function() { - _this.postMessage({ - type: LAYOUT_MESSAGE3.END, - nodes: nodes_1 - }); - layoutMethod_1 === null || layoutMethod_1 === void 0 ? void 0 : layoutMethod_1.destroy(); - }; - layoutMethod_1 = new LayoutClass(layoutCfg); - layoutMethod_1.init({ - nodes: nodes_1, - edges - }); - layoutMethod_1.execute(); - break; - } - case LAYOUT_MESSAGE3.GPURUN: { - var _c = event.data, nodes = _c.nodes, edges = _c.edges, _d = _c.layoutCfg, layoutCfg = _d === void 0 ? {} : _d, canvas = _c.canvas; - var layoutType = layoutCfg.type; - var LayoutClass = layout.getLayoutByName(layoutType); - if (!LayoutClass) { - this.postMessage({ - type: LAYOUT_MESSAGE3.ERROR, - message: "layout ".concat(layoutType, " not found") - }); - break; - } - if (layoutType.split("-")[1] !== "gpu") { - this.postMessage({ - type: LAYOUT_MESSAGE3.ERROR, - message: "layout ".concat(layoutType, " does not support GPU") - }); - break; - } - var layoutMethod = new LayoutClass(layoutCfg); - layoutMethod.init({ - nodes, - edges - }); - layoutMethod.executeWithWorker(canvas, this); - break; - } - default: - break; - } - } - onmessage = function onmessage2(event) { - if (isLayoutMessage(event)) { - handleLayoutMessage(event); - } - }; - } - var layoutWorker = new work_default(workerCode, workerScriptURL); - return layoutWorker; -}; - -// node_modules/@antv/g6-pc/es/layout/worker/layoutConst.js -var LAYOUT_MESSAGE2 = { - RUN: "LAYOUT_RUN", - END: "LAYOUT_END", - ERROR: "LAYOUT_ERROR", - TICK: "LAYOUT_TICK", - GPURUN: "GPU_LAYOUT_RUN", - GPUEND: "GPU_LAYOUT_END" -}; - -// node_modules/@antv/g6-pc/es/graph/controller/layout.js -var import_util551 = __toModule(require_lib()); -function _typeof4(obj) { - "@babel/helpers - typeof"; - return _typeof4 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(obj2) { - return typeof obj2; - } : function(obj2) { - return obj2 && typeof Symbol == "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }, _typeof4(obj); -} -var mockRaf = function mockRaf2(cb) { - return setTimeout(cb, 16); -}; -var mockCaf = function mockCaf2(reqId) { - return clearTimeout(reqId); -}; -var helper = { - requestAnimationFrame: function requestAnimationFrame3(callback) { - var fn = typeof window !== "undefined" ? window.requestAnimationFrame || window.webkitRequestAnimationFrame || mockRaf : mockRaf; - return fn(callback); - }, - cancelAnimationFrame: function cancelAnimationFrame2(requestId) { - var fn = typeof window !== "undefined" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || mockCaf : mockCaf; - return fn(requestId); - } -}; -var GPU_LAYOUT_NAMES = ["fruchterman", "gForce"]; -var LAYOUT_PIPES_ADJUST_NAMES = ["force", "grid", "circular"]; -var LayoutController2 = function(_super) { - __extends(LayoutController3, _super); - function LayoutController3(graph) { - var _this = _super.call(this, graph) || this; - _this.graph = graph; - _this.layoutCfg = graph.get("layout") || {}; - _this.layoutType = _this.getLayoutType(); - _this.worker = null; - _this.workerData = {}; - _this.initLayout(); - return _this; - } - LayoutController3.prototype.initLayout = function() { - }; - LayoutController3.prototype.getWorker = function() { - if (this.worker) { - return this.worker; - } - if (typeof Worker === "undefined") { - console.warn("Web worker is not supported in current browser."); - this.worker = null; - } else { - this.worker = LayoutWorker(this.layoutCfg.workerScriptURL); - } - return this.worker; - }; - LayoutController3.prototype.stopWorker = function() { - var workerData = this.workerData; - if (!this.worker) { - return; - } - this.worker.terminate(); - this.worker = null; - if (workerData.requestId) { - helper.cancelAnimationFrame(workerData.requestId); - workerData.requestId = null; - } - if (workerData.requestId2) { - helper.cancelAnimationFrame(workerData.requestId2); - workerData.requestId2 = null; - } - }; - LayoutController3.prototype.execLayoutMethod = function(layoutCfg, order2) { - var _this = this; - return new Promise(function(reslove, reject) { - return __awaiter(_this, void 0, void 0, function() { - var graph, layoutType, isForce, onTick_1, tick, enableTick, layoutMethod, onTick_2, tick, layoutData; - return __generator(this, function(_a6) { - switch (_a6.label) { - case 0: - graph = this.graph; - if (!graph || graph.get("destroyed")) - return [ - 2 - ]; - layoutType = layoutCfg.type; - layoutCfg.onLayoutEnd = function() { - graph.emit("aftersublayout", { - type: layoutType - }); - reslove(); - }; - if (layoutType && this.isGPU) { - if (!this.hasGPUVersion(layoutType)) { - console.warn("The '".concat(layoutType, "' layout does not support GPU calculation for now, it will run in CPU.")); - } else { - layoutType = "".concat(layoutType, "-gpu"); - } - } - isForce = layoutType === "force" || layoutType === "g6force" || layoutType === "gForce"; - if (isForce) { - onTick_1 = layoutCfg.onTick; - tick = function tick2() { - if (onTick_1) { - onTick_1(); - } - graph.refreshPositions(); - }; - layoutCfg.tick = tick; - } else if (layoutCfg.type === "comboForce") { - layoutCfg.comboTrees = graph.get("comboTrees"); - } - enableTick = false; - try { - layoutMethod = new Layouts[layoutType](layoutCfg); - } catch (e4) { - console.warn("The layout method: '".concat(layoutType, "' does not exist! Please specify it first.")); - reject(); - } - enableTick = layoutMethod.enableTick; - if (enableTick) { - onTick_2 = layoutCfg.onTick; - tick = function tick2() { - if (onTick_2) { - onTick_2(); - } - graph.refreshPositions(); - }; - layoutMethod.tick = tick; - } - layoutData = this.filterLayoutData(this.data, layoutCfg); - addLayoutOrder(layoutData, order2); - layoutMethod.init(layoutData); - graph.emit("beforesublayout", { - type: layoutType - }); - return [ - 4, - layoutMethod.execute() - ]; - case 1: - _a6.sent(); - if (layoutMethod.isCustomLayout && layoutCfg.onLayoutEnd) - layoutCfg.onLayoutEnd(); - this.layoutMethods[order2] = layoutMethod; - return [ - 2 - ]; - } - }); - }); - }); - }; - LayoutController3.prototype.updateLayoutMethod = function(layoutMethod, layoutCfg) { - var _this = this; - return new Promise(function(reslove, reject) { - return __awaiter(_this, void 0, void 0, function() { - var graph, layoutType, layoutData; - return __generator(this, function(_a6) { - switch (_a6.label) { - case 0: - graph = this.graph; - layoutType = layoutCfg === null || layoutCfg === void 0 ? void 0 : layoutCfg.type; - layoutCfg.onLayoutEnd = function() { - graph.emit("aftersublayout", { - type: layoutType - }); - reslove(); - }; - layoutData = this.filterLayoutData(this.data, layoutCfg); - layoutMethod.init(layoutData); - layoutMethod.updateCfg(layoutCfg); - graph.emit("beforesublayout", { - type: layoutType - }); - return [ - 4, - layoutMethod.execute() - ]; - case 1: - _a6.sent(); - if (layoutMethod.isCustomLayout && layoutCfg.onLayoutEnd) - layoutCfg.onLayoutEnd(); - return [ - 2 - ]; - } - }); - }); - }); - }; - LayoutController3.prototype.layout = function(success) { - var _this = this; - var graph = this.graph; - this.data = this.setDataFromGraph(); - var _a6 = this.data, nodes = _a6.nodes, hiddenNodes = _a6.hiddenNodes; - if (!nodes) { - return false; - } - var width2 = graph.get("width"); - var height = graph.get("height"); - var layoutCfg = {}; - Object.assign(layoutCfg, { - width: width2, - height, - center: [width2 / 2, height / 2] - }, this.layoutCfg); - this.layoutCfg = layoutCfg; - this.destoryLayoutMethods(); - graph.emit("beforelayout"); - this.initPositions(layoutCfg.center, nodes); - this.initPositions(layoutCfg.center, hiddenNodes); - var layoutType = layoutCfg.type; - if (layoutType && layoutType.split("-")[1] === "gpu") { - layoutType = layoutType.split("-")[0]; - layoutCfg.gpuEnabled = true; - } - var enableGPU = false; - if (layoutCfg.gpuEnabled) { - enableGPU = true; - if (!gpuDetector().webgl) { - console.warn("Your browser does not support webGL or GPGPU. The layout will run in CPU."); - enableGPU = false; - } - } - this.isGPU = enableGPU; - var onLayoutEnd = layoutCfg.onLayoutEnd, layoutEndFormatted = layoutCfg.layoutEndFormatted, adjust4 = layoutCfg.adjust; - if (!layoutEndFormatted) { - layoutCfg.layoutEndFormatted = true; - layoutCfg.onAllLayoutEnd = function() { - return __awaiter(_this, void 0, void 0, function() { - return __generator(this, function(_a7) { - switch (_a7.label) { - case 0: - if (onLayoutEnd) { - onLayoutEnd(); - } - this.refreshLayout(); - if (!(adjust4 && layoutCfg.pipes)) - return [ - 3, - 2 - ]; - return [ - 4, - this.adjustPipesBox(this.data, adjust4) - ]; - case 1: - _a7.sent(); - this.refreshLayout(); - _a7.label = 2; - case 2: - graph.emit("afterlayout"); - return [ - 2 - ]; - } - }); - }); - }; - } - this.stopWorker(); - if (layoutCfg.workerEnabled && this.layoutWithWorker(this.data)) { - return true; - } - var start = Promise.resolve(); - if (layoutCfg.type) { - start = start.then(function() { - return __awaiter(_this, void 0, void 0, function() { - return __generator(this, function(_a7) { - switch (_a7.label) { - case 0: - return [ - 4, - this.execLayoutMethod(layoutCfg, 0) - ]; - case 1: - return [ - 2, - _a7.sent() - ]; - } - }); - }); - }); - } else if (layoutCfg.pipes) { - layoutCfg.pipes.forEach(function(cfg, index2) { - start = start.then(function() { - return __awaiter(_this, void 0, void 0, function() { - return __generator(this, function(_a7) { - switch (_a7.label) { - case 0: - return [ - 4, - this.execLayoutMethod(cfg, index2) - ]; - case 1: - return [ - 2, - _a7.sent() - ]; - } - }); - }); - }); - }); - } - start.then(function() { - if (layoutCfg.onAllLayoutEnd) - layoutCfg.onAllLayoutEnd(); - if (success) - success(); - }).catch(function(error) { - console.warn("graph layout failed,", error); - }); - return false; - }; - LayoutController3.prototype.layoutWithWorker = function(data3) { - var _this = this; - var _a6 = this, layoutCfg = _a6.layoutCfg, graph = _a6.graph; - var worker = this.getWorker(); - var workerData = this.workerData; - if (!worker) { - return false; - } - workerData.requestId = null; - workerData.requestId2 = null; - workerData.currentTick = null; - workerData.currentTickData = null; - graph.emit("beforelayout"); - var start = Promise.resolve(); - if (layoutCfg.type) { - start = start.then(function() { - return _this.runWebworker(worker, data3, layoutCfg); - }); - } else if (layoutCfg.pipes) { - var _loop_1 = function _loop_12(cfg2) { - start = start.then(function() { - return _this.runWebworker(worker, data3, cfg2); - }); - }; - for (var _i = 0, _b = layoutCfg.pipes; _i < _b.length; _i++) { - var cfg = _b[_i]; - _loop_1(cfg); - } - } - start.then(function() { - if (layoutCfg.onAllLayoutEnd) - layoutCfg.onAllLayoutEnd(); - }).catch(function(error) { - console.error("layout failed", error); - }); - return true; - }; - LayoutController3.prototype.runWebworker = function(worker, allData, layoutCfg) { - var _this = this; - var isGPU = this.isGPU; - var data3 = this.filterLayoutData(allData, layoutCfg); - var nodes = data3.nodes, edges = data3.edges; - var offScreenCanvas = document.createElement("canvas"); - var gpuWorkerAbility = isGPU && typeof window !== "undefined" && window.navigator && !navigator["gpu"] && "OffscreenCanvas" in window && "transferControlToOffscreen" in offScreenCanvas; - var filteredLayoutCfg = filterObject(layoutCfg, function(value2) { - return typeof value2 !== "function"; - }); - if (!gpuWorkerAbility) { - worker.postMessage({ - type: LAYOUT_MESSAGE2.RUN, - nodes, - edges, - layoutCfg: filteredLayoutCfg - }); - } else { - var offscreen = offScreenCanvas.transferControlToOffscreen(); - filteredLayoutCfg.type = "".concat(filteredLayoutCfg.type, "-gpu"); - worker.postMessage({ - type: LAYOUT_MESSAGE2.GPURUN, - nodes, - edges, - layoutCfg: filteredLayoutCfg, - canvas: offscreen - }, [offscreen]); - } - return new Promise(function(reslove, reject) { - worker.onmessage = function(event) { - _this.handleWorkerMessage(reslove, reject, event, data3, layoutCfg); - }; - }); - }; - LayoutController3.prototype.handleWorkerMessage = function(reslove, reject, event, data3, layoutCfg) { - var _a6 = this, graph = _a6.graph, workerData = _a6.workerData; - var eventData = event.data; - var type2 = eventData.type; - var onTick = function onTick2() { - if (layoutCfg.onTick) { - layoutCfg.onTick(); - } - }; - switch (type2) { - case LAYOUT_MESSAGE2.TICK: - workerData.currentTick = eventData.currentTick; - workerData.currentTickData = eventData; - if (!workerData.requestId) { - workerData.requestId = helper.requestAnimationFrame(function requestId() { - updateLayoutPosition(data3, eventData); - graph.refreshPositions(); - onTick(); - if (eventData.currentTick === eventData.totalTicks) { - reslove(); - } else if (workerData.currentTick === eventData.totalTicks) { - workerData.requestId2 = helper.requestAnimationFrame(function requestId2() { - updateLayoutPosition(data3, workerData.currentTickData); - graph.refreshPositions(); - workerData.requestId2 = null; - onTick(); - reslove(); - }); - } - workerData.requestId = null; - }); - } - break; - case LAYOUT_MESSAGE2.END: - if (workerData.currentTick == null) { - updateLayoutPosition(data3, eventData); - reslove(); - } - break; - case LAYOUT_MESSAGE2.GPUEND: - if (workerData.currentTick == null) { - updateGPUWorkerLayoutPosition(data3, eventData); - reslove(); - } - break; - case LAYOUT_MESSAGE2.ERROR: - console.warn("Web-Worker layout error!", eventData.message); - reject(); - break; - default: - reject(); - break; - } - }; - LayoutController3.prototype.updateLayoutCfg = function(cfg) { - var _this = this; - var _a6 = this, graph = _a6.graph, layoutMethods = _a6.layoutMethods; - var layoutCfg = (0, import_util551.mix)({}, this.layoutCfg, cfg); - this.layoutCfg = layoutCfg; - if (!(layoutMethods === null || layoutMethods === void 0 ? void 0 : layoutMethods.length)) { - this.layout(); - return; - } - this.data = this.setDataFromGraph(); - this.stopWorker(); - if (cfg.workerEnabled && this.layoutWithWorker(this.data)) { - return; - } - graph.emit("beforelayout"); - var start = Promise.resolve(); - if (layoutMethods.length === 1) { - start = start.then(function() { - return __awaiter(_this, void 0, void 0, function() { - return __generator(this, function(_a7) { - switch (_a7.label) { - case 0: - return [ - 4, - this.updateLayoutMethod(layoutMethods[0], layoutCfg) - ]; - case 1: - return [ - 2, - _a7.sent() - ]; - } - }); - }); - }); - } else { - layoutMethods === null || layoutMethods === void 0 ? void 0 : layoutMethods.forEach(function(layoutMethod, index2) { - var currentCfg = layoutCfg.pipes[index2]; - start = start.then(function() { - return __awaiter(_this, void 0, void 0, function() { - return __generator(this, function(_a7) { - switch (_a7.label) { - case 0: - return [ - 4, - this.updateLayoutMethod(layoutMethod, currentCfg) - ]; - case 1: - return [ - 2, - _a7.sent() - ]; - } - }); - }); - }); - }); - } - start.then(function() { - if (layoutCfg.onAllLayoutEnd) - layoutCfg.onAllLayoutEnd(); - }).catch(function(error) { - console.warn("layout failed", error); - }); - }; - LayoutController3.prototype.adjustPipesBox = function(data3, adjust4) { - var _this = this; - return new Promise(function(resolve) { - var nodes = data3.nodes; - if (!(nodes === null || nodes === void 0 ? void 0 : nodes.length)) { - resolve(); - } - if (!LAYOUT_PIPES_ADJUST_NAMES.includes(adjust4)) { - console.warn("The adjust type ".concat(adjust4, " is not supported yet, please assign it with 'force', 'grid', or 'circular'.")); - resolve(); - } - var layoutCfg = { - center: _this.layoutCfg.center, - nodeSize: function nodeSize(d3) { - return Math.max(d3.height, d3.width); - }, - preventOverlap: true, - onLayoutEnd: function onLayoutEnd() { - } - }; - var _a6 = _this.getLayoutBBox(nodes), groupNodes = _a6.groupNodes, layoutNodes2 = _a6.layoutNodes; - var preNodes = (0, import_util551.clone)(layoutNodes2); - layoutCfg.onLayoutEnd = function() { - layoutNodes2 === null || layoutNodes2 === void 0 ? void 0 : layoutNodes2.forEach(function(ele, index2) { - var _a7, _b, _c; - var dx = ele.x - ((_a7 = preNodes[index2]) === null || _a7 === void 0 ? void 0 : _a7.x); - var dy = ele.y - ((_b = preNodes[index2]) === null || _b === void 0 ? void 0 : _b.y); - (_c = groupNodes[index2]) === null || _c === void 0 ? void 0 : _c.forEach(function(n3) { - n3.x += dx; - n3.y += dy; - }); - }); - resolve(); - }; - var layoutMethod = new Layouts[adjust4](layoutCfg); - layoutMethod.layout({ - nodes: layoutNodes2 - }); - }); - }; - LayoutController3.prototype.hasGPUVersion = function(layoutName) { - return GPU_LAYOUT_NAMES.includes(layoutName); - }; - LayoutController3.prototype.destroy = function() { - this.destoryLayoutMethods(); - var worker = this.worker; - if (worker) { - worker.terminate(); - this.worker = null; - } - this.destroyed = true; - this.graph.set("layout", void 0); - this.layoutCfg = void 0; - this.layoutType = void 0; - this.layoutMethods = void 0; - this.graph = null; - }; - return LayoutController3; -}(layout_default); -var layout_default3 = LayoutController2; -function updateLayoutPosition(data3, layoutData) { - var nodes = data3.nodes; - var layoutNodes2 = layoutData.nodes; - var nodeLength = nodes.length; - for (var i4 = 0; i4 < nodeLength; i4++) { - var node = nodes[i4]; - node.x = layoutNodes2[i4].x; - node.y = layoutNodes2[i4].y; - } -} -function filterObject(collection, callback) { - var result = {}; - if (collection && _typeof4(collection) === "object") { - Object.keys(collection).forEach(function(key) { - if (collection.hasOwnProperty(key) && callback(collection[key])) { - result[key] = collection[key]; - } - }); - return result; - } - return collection; -} -function updateGPUWorkerLayoutPosition(data3, layoutData) { - var nodes = data3.nodes; - var vertexEdgeData = layoutData.vertexEdgeData; - var nodeLength = nodes.length; - for (var i4 = 0; i4 < nodeLength; i4++) { - var node = nodes[i4]; - var x6 = vertexEdgeData[4 * i4]; - var y5 = vertexEdgeData[4 * i4 + 1]; - node.x = x6; - node.y = y5; - } -} -function addLayoutOrder(data3, order2) { - var _a6; - if (!((_a6 = data3 === null || data3 === void 0 ? void 0 : data3.nodes) === null || _a6 === void 0 ? void 0 : _a6.length)) { - return; - } - var nodes = data3.nodes; - nodes.forEach(function(node) { - node.layoutOrder = order2; - }); -} - -// node_modules/@antv/g6-pc/es/graph/graph.js -var transform12 = ext_exports.transform; -var SVG2 = "svg"; -var Graph9 = function(_super) { - __extends(Graph10, _super); - function Graph10(cfg) { - var _this = _super.call(this, cfg) || this; - var defaultNode = _this.get("defaultNode"); - if (!defaultNode) { - _this.set("defaultNode", { - type: "circle" - }); - } - if (!defaultNode.type) { - defaultNode.type = "circle"; - _this.set("defaultNode", defaultNode); - } - _this.destroyed = false; - return _this; - } - Graph10.prototype.initLayoutController = function() { - var layoutController = new layout_default3(this); - this.set({ - layoutController - }); - }; - Graph10.prototype.initEventController = function() { - var eventController = new event_default3(this); - this.set({ - eventController - }); - }; - Graph10.prototype.initCanvas = function() { - var container2 = this.get("container"); - if (typeof container2 === "string") { - container2 = document.getElementById(container2); - this.set("container", container2); - } - if (!container2) { - throw new Error("invalid container"); - } - var clientWidth = container2.clientWidth, clientHeight = container2.clientHeight; - var width2 = this.get("width") || clientWidth; - var height = this.get("height") || clientHeight; - if (!this.get("width") && !this.get("height")) { - this.set("width", clientWidth); - this.set("height", clientHeight); - } - var renderer = this.get("renderer"); - var canvas; - if (renderer === SVG2) { - canvas = new canvas_default3({ - container: container2, - width: width2, - height - }); - } else { - var canvasCfg = { - container: container2, - width: width2, - height - }; - var pixelRatio = this.get("pixelRatio"); - if (pixelRatio) { - canvasCfg.pixelRatio = pixelRatio; - } - canvas = new canvas_default2(canvasCfg); - } - this.set("canvas", canvas); - }; - Graph10.prototype.initPlugins = function() { - var self2 = this; - (0, import_util552.each)(self2.get("plugins"), function(plugin) { - if (!plugin.destroyed && plugin.initPlugin) { - plugin.initPlugin(self2); - } - }); - }; - Graph10.prototype.downloadImageWatermark = function(watermarker, context, width2, height) { - return __awaiter(this, void 0, void 0, function() { - var watermarkStr, watermarkbase64, img; - return __generator(this, function(_a6) { - switch (_a6.label) { - case 0: - watermarkStr = watermarker.style.backgroundImage; - watermarkbase64 = watermarkStr.slice(5, watermarkStr.length - 2); - img = new Image(); - img.src = watermarkbase64; - return [ - 4, - new Promise(function(resolve) { - img.onload = function() { - var pat = context.createPattern(img, "repeat"); - context.rect(0, 0, width2, height); - context.fillStyle = pat; - context.fill(); - resolve(""); - }; - }) - ]; - case 1: - _a6.sent(); - return [ - 2 - ]; - } - }); - }); - }; - Graph10.prototype.asyncToDataUrl = function(type2, backgroundColor, callback, widths, heights, vCanvasEl) { - var _this = this; - var watermarker = document.querySelector(".g6-graph-watermarker"); - var canvas = this.get("canvas"); - var renderer = canvas.getRenderer(); - var canvasDom = vCanvasEl || canvas.get("el"); - var dataURL = ""; - if (!type2) - type2 = "image/png"; - setTimeout(function() { - return __awaiter(_this, void 0, void 0, function() { - var cloneNode, svgDocType, svgDoc, svgData, imageData, context, width2, height, compositeOperation, pixelRatio; - return __generator(this, function(_a6) { - switch (_a6.label) { - case 0: - if (!(renderer === "svg")) - return [ - 3, - 1 - ]; - cloneNode = canvasDom.cloneNode(true); - svgDocType = document.implementation.createDocumentType("svg", "-//W3C//DTD SVG 1.1//EN", "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"); - svgDoc = document.implementation.createDocument("http://www.w3.org/2000/svg", "svg", svgDocType); - svgDoc.replaceChild(cloneNode, svgDoc.documentElement); - svgData = new XMLSerializer().serializeToString(svgDoc); - dataURL = "data:image/svg+xml;charset=utf8,".concat(encodeURIComponent(svgData)); - return [ - 3, - 4 - ]; - case 1: - imageData = void 0; - context = canvasDom.getContext("2d"); - width2 = widths || this.get("width"); - height = heights || this.get("height"); - compositeOperation = void 0; - if (!watermarker) - return [ - 3, - 3 - ]; - return [ - 4, - this.downloadImageWatermark(watermarker, context, width2, height) - ]; - case 2: - _a6.sent(); - _a6.label = 3; - case 3: - if (backgroundColor) { - pixelRatio = typeof window !== "undefined" ? window.devicePixelRatio : 1; - try { - imageData = context.getImageData(0, 0, width2 * pixelRatio, height * pixelRatio); - compositeOperation = context.globalCompositeOperation; - context.globalCompositeOperation = "destination-over"; - context.fillStyle = backgroundColor; - context.fillRect(0, 0, width2, height); - } catch (error) { - console.error("Download image failed. Out of memory at ImageData creation"); - } - } - dataURL = canvasDom.toDataURL(type2); - if (backgroundColor) { - context.clearRect(0, 0, width2, height); - context.putImageData(imageData, 0, 0); - context.globalCompositeOperation = compositeOperation; - } - _a6.label = 4; - case 4: - if (callback) - callback(dataURL); - return [ - 2 - ]; - } - }); - }); - }, 16); - }; - Graph10.prototype.toDataURL = function(type2, backgroundColor) { - var canvas = this.get("canvas"); - var renderer = canvas.getRenderer(); - var canvasDom = canvas.get("el"); - if (!type2) - type2 = "image/png"; - var dataURL = ""; - if (renderer === "svg") { - var cloneNode = canvasDom.cloneNode(true); - var svgDocType = document.implementation.createDocumentType("svg", "-//W3C//DTD SVG 1.1//EN", "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"); - var svgDoc = document.implementation.createDocument("http://www.w3.org/2000/svg", "svg", svgDocType); - svgDoc.replaceChild(cloneNode, svgDoc.documentElement); - var svgData = new XMLSerializer().serializeToString(svgDoc); - dataURL = "data:image/svg+xml;charset=utf8,".concat(encodeURIComponent(svgData)); - } else { - var imageData = void 0; - var context = canvasDom.getContext("2d"); - var width2 = this.get("width"); - var height = this.get("height"); - var compositeOperation = void 0; - if (backgroundColor) { - var pixelRatio = typeof window !== "undefined" ? window.devicePixelRatio : 1; - try { - imageData = context.getImageData(0, 0, width2 * pixelRatio, height * pixelRatio); - compositeOperation = context.globalCompositeOperation; - context.globalCompositeOperation = "destination-over"; - context.fillStyle = backgroundColor; - context.fillRect(0, 0, width2, height); - } catch (error) { - console.error("Download image failed. Out of memory at ImageData creation"); - } - } - dataURL = canvasDom.toDataURL(type2); - if (backgroundColor) { - context.clearRect(0, 0, width2, height); - context.putImageData(imageData, 0, 0); - context.globalCompositeOperation = compositeOperation; - } - } - return dataURL; - }; - Graph10.prototype.toFullDataURL = function(callback, type2, imageConfig) { - var bbox = this.get("group").getCanvasBBox(); - var height = bbox.height; - var width2 = bbox.width; - var renderer = this.get("renderer"); - var vContainerDOM = createDom(''); - var backgroundColor = imageConfig ? imageConfig.backgroundColor : void 0; - var padding3 = imageConfig ? imageConfig.padding : void 0; - if (!padding3) - padding3 = [0, 0, 0, 0]; - else if ((0, import_util552.isNumber)(padding3)) - padding3 = [padding3, padding3, padding3, padding3]; - var vHeight = height + padding3[0] + padding3[2]; - var vWidth = width2 + padding3[1] + padding3[3]; - var canvasOptions = { - container: vContainerDOM, - height: vHeight, - width: vWidth, - quickHit: true - }; - var vCanvas = renderer === "svg" ? new canvas_default3(canvasOptions) : new canvas_default2(canvasOptions); - var group3 = this.get("group"); - var vGroup = group3.clone(); - var matrix = (0, import_util552.clone)(vGroup.getMatrix()); - if (!matrix) - matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - var centerX = (bbox.maxX + bbox.minX) / 2; - var centerY = (bbox.maxY + bbox.minY) / 2; - matrix = transform12(matrix, [["t", -centerX, -centerY], ["t", width2 / 2 + padding3[3], height / 2 + padding3[0]]]); - vGroup.resetMatrix(); - vGroup.setMatrix(matrix); - vCanvas.add(vGroup); - var vCanvasEl = vCanvas.get("el"); - var dataURL = ""; - if (!type2) - type2 = "image/png"; - setTimeout(function() { - if (renderer === "svg") { - var cloneNode = vCanvasEl.cloneNode(true); - var svgDocType = document.implementation.createDocumentType("svg", "-//W3C//DTD SVG 1.1//EN", "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"); - var svgDoc = document.implementation.createDocument("http://www.w3.org/2000/svg", "svg", svgDocType); - svgDoc.replaceChild(cloneNode, svgDoc.documentElement); - var svgData = new XMLSerializer().serializeToString(svgDoc); - dataURL = "data:image/svg+xml;charset=utf8,".concat(encodeURIComponent(svgData)); - } else { - var imageData = void 0; - var context = vCanvasEl.getContext("2d"); - var compositeOperation = void 0; - if (backgroundColor) { - var pixelRatio = typeof window !== "undefined" ? window.devicePixelRatio : 1; - try { - imageData = context.getImageData(0, 0, vWidth * pixelRatio, vHeight * pixelRatio); - compositeOperation = context.globalCompositeOperation; - context.globalCompositeOperation = "destination-over"; - context.fillStyle = backgroundColor; - context.fillRect(0, 0, vWidth, vHeight); - } catch (error) { - console.error("Download image failed. Out of memory at ImageData creation"); - } - } - dataURL = vCanvasEl.toDataURL(type2); - if (backgroundColor) { - context.clearRect(0, 0, vWidth, vHeight); - context.putImageData(imageData, 0, 0); - context.globalCompositeOperation = compositeOperation; - } - } - if (callback) - callback(dataURL); - }, 16); - }; - Graph10.prototype.downloadFullImage = function(name, type2, imageConfig) { - var _this = this; - var bbox = this.get("group").getCanvasBBox(); - var height = bbox.height; - var width2 = bbox.width; - var renderer = this.get("renderer"); - var vContainerDOM = createDom(''); - var watermarker = document.querySelector(".g6-graph-watermarker"); - var backgroundColor = imageConfig ? imageConfig.backgroundColor : void 0; - var padding3 = imageConfig ? imageConfig.padding : void 0; - if (!padding3) - padding3 = [0, 0, 0, 0]; - else if ((0, import_util552.isNumber)(padding3)) - padding3 = [padding3, padding3, padding3, padding3]; - var vHeight = height + padding3[0] + padding3[2]; - var vWidth = width2 + padding3[1] + padding3[3]; - if (watermarker) { - var _a6 = this.get("graphWaterMarker").cfg || {}, wmWidth = _a6.width, wmHeight = _a6.height; - vHeight = Math.ceil(vHeight / wmHeight) * wmHeight; - vWidth = Math.ceil(vWidth / wmWidth) * wmWidth; - } - var canvasOptions = { - container: vContainerDOM, - height: vHeight, - width: vWidth - }; - var vCanvas = renderer === "svg" ? new canvas_default3(canvasOptions) : new canvas_default2(canvasOptions); - var group3 = this.get("group"); - var vGroup = group3.clone(); - var matrix = (0, import_util552.clone)(vGroup.getMatrix()); - if (!matrix) - matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - var centerX = (bbox.maxX + bbox.minX) / 2; - var centerY = (bbox.maxY + bbox.minY) / 2; - matrix = transform12(matrix, [["t", -centerX, -centerY], ["t", width2 / 2 + padding3[3], height / 2 + padding3[0]]]); - vGroup.resetMatrix(); - vGroup.setMatrix(matrix); - vCanvas.add(vGroup); - var vCanvasEl = vCanvas.get("el"); - if (!type2) - type2 = "image/png"; - this.asyncToDataUrl(type2, backgroundColor, function(dataURL) { - var link = document.createElement("a"); - var fileName = (name || "graph") + (renderer === "svg" ? ".svg" : ".".concat(type2.split("/")[1])); - _this.dataURLToImage(dataURL, renderer, link, fileName); - var e4 = document.createEvent("MouseEvents"); - e4.initEvent("click", false, false); - link.dispatchEvent(e4); - }, vWidth, vHeight, vCanvasEl); - }; - Graph10.prototype.downloadImage = function(name, type2, backgroundColor) { - var _this = this; - var self2 = this; - if (self2.isAnimating()) { - self2.stopAnimate(); - } - var canvas = self2.get("canvas"); - var renderer = canvas.getRenderer(); - if (!type2) - type2 = "image/png"; - var fileName = (name || "graph") + (renderer === "svg" ? ".svg" : type2.split("/")[1]); - var link = document.createElement("a"); - self2.asyncToDataUrl(type2, backgroundColor, function(dataURL) { - _this.dataURLToImage(dataURL, renderer, link, fileName); - var e4 = document.createEvent("MouseEvents"); - e4.initEvent("click", false, false); - link.dispatchEvent(e4); - }); - }; - Graph10.prototype.dataURLToImage = function(dataURL, renderer, link, fileName) { - if (!dataURL || dataURL === "data:") { - console.error("Download image failed. The graph is too large or there is invalid attribute values in graph items"); - return; - } - if (typeof window !== "undefined") { - if (window.Blob && window.URL && renderer !== "svg") { - var arr = dataURL.split(","); - var mime = ""; - if (arr && arr.length > 0) { - var match = arr[0].match(/:(.*?);/); - if (match && match.length >= 2) - mime = match[1]; - } - var bstr = atob(arr[1]); - var n3 = bstr.length; - var u8arr = new Uint8Array(n3); - while (n3--) { - u8arr[n3] = bstr.charCodeAt(n3); - } - var blobObj_1 = new Blob([u8arr], { - type: mime - }); - if (window.navigator.msSaveBlob) { - window.navigator.msSaveBlob(blobObj_1, fileName); - } else { - link.addEventListener("click", function() { - link.download = fileName; - link.href = window.URL.createObjectURL(blobObj_1); - }); - } - } else { - link.addEventListener("click", function() { - link.download = fileName; - link.href = dataURL; - }); - } - } - }; - Graph10.prototype.addPlugin = function(plugin) { - var self2 = this; - if (plugin.destroyed) { - return; - } - self2.get("plugins").push(plugin); - plugin.initPlugin(self2); - }; - Graph10.prototype.removePlugin = function(plugin) { - var plugins = this.get("plugins"); - var index2 = plugins.indexOf(plugin); - if (index2 >= 0) { - plugin.destroyPlugin(); - plugins.splice(index2, 1); - } - }; - Graph10.prototype.setImageWaterMarker = function(imgURL, config) { - if (imgURL === void 0) { - imgURL = global_default2.waterMarkerImage; - } - var container2 = this.get("container"); - if ((0, import_util552.isString)(container2)) { - container2 = document.getElementById(container2); - } - if (!container2.style.position) { - container2.style.position = "relative"; - } - var canvas = this.get("graphWaterMarker"); - var waterMarkerConfig = (0, import_util552.deepMix)({}, global_default2.imageWaterMarkerConfig, config); - var width2 = waterMarkerConfig.width, height = waterMarkerConfig.height, compatible = waterMarkerConfig.compatible, image = waterMarkerConfig.image; - if (!canvas) { - var canvasCfg = { - container: container2, - width: width2, - height, - capture: false - }; - var pixelRatio = this.get("pixelRatio"); - if (pixelRatio) { - canvasCfg.pixelRatio = pixelRatio; - } - canvas = new canvas_default2(canvasCfg); - this.set("graphWaterMarker", canvas); - } - canvas.get("el").style.display = "none"; - var ctx3 = canvas.get("context"); - var rotate8 = image.rotate, x6 = image.x, y5 = image.y; - ctx3.rotate(-rotate8 * Math.PI / 180); - var img = new Image(); - img.crossOrigin = "anonymous"; - img.src = imgURL; - img.onload = function() { - ctx3.drawImage(img, x6, y5, image.width, image.height); - ctx3.rotate(rotate8 * Math.PI / 180); - if (!compatible) { - var box2 = document.querySelector(".g6-graph-watermarker"); - if (!box2) { - box2 = document.createElement("div"); - box2.className = "g6-graph-watermarker"; - } - box2.className = "g6-graph-watermarker"; - if (!canvas.destroyed) { - box2.style.cssText = "background-image: url(".concat(canvas.get("el").toDataURL("image/png"), ");background-repeat:repeat;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none;z-index:-1;"); - container2.appendChild(box2); - } - } else { - container2.style.cssText = "background-image: url(".concat(canvas.get("el").toDataURL("image/png"), ");background-repeat:repeat;"); - } - }; - }; - Graph10.prototype.setTextWaterMarker = function(texts, config) { - var container2 = this.get("container"); - if ((0, import_util552.isString)(container2)) { - container2 = document.getElementById(container2); - } - if (!container2.style.position) { - container2.style.position = "relative"; - } - var canvas = this.get("graphWaterMarker"); - var waterMarkerConfig = (0, import_util552.deepMix)({}, global_default2.textWaterMarkerConfig, config); - var width2 = waterMarkerConfig.width, height = waterMarkerConfig.height, compatible = waterMarkerConfig.compatible, text = waterMarkerConfig.text; - if (!canvas) { - var canvasCfg = { - container: container2, - width: width2, - height, - capture: false - }; - var pixelRatio = this.get("pixelRatio"); - if (pixelRatio) { - canvasCfg.pixelRatio = pixelRatio; - } - canvas = new canvas_default2(canvasCfg); - this.set("graphWaterMarker", canvas); - } - canvas.get("el").style.display = "none"; - var ctx3 = canvas.get("context"); - var rotate8 = text.rotate, fill = text.fill, fontFamily = text.fontFamily, fontSize = text.fontSize, baseline = text.baseline, x6 = text.x, y5 = text.y, lineHeight = text.lineHeight; - ctx3.rotate(-rotate8 * Math.PI / 180); - ctx3.font = "".concat(fontSize, "px ").concat(fontFamily); - ctx3.fillStyle = fill; - ctx3.textBaseline = baseline; - for (var i4 = texts.length - 1; i4 >= 0; i4--) { - ctx3.fillText(texts[i4], x6, y5 + i4 * lineHeight); - } - ctx3.rotate(rotate8 * Math.PI / 180); - if (!compatible) { - var box2 = document.querySelector(".g6-graph-watermarker"); - if (!box2) { - box2 = document.createElement("div"); - box2.className = "g6-graph-watermarker"; - } - box2.style.cssText = "background-image: url(".concat(canvas.get("el").toDataURL("image/png"), ");background-repeat:repeat;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none;z-index:99;"); - container2.appendChild(box2); - } else { - container2.style.cssText = "background-image: url(".concat(canvas.get("el").toDataURL("image/png"), ");background-repeat:repeat;"); - } - }; - Graph10.prototype.destroy = function() { - var _a6, _b, _c, _d; - (0, import_util552.each)(this.get("plugins"), function(plugin) { - plugin.destroyPlugin(); - }); - var tooltipDOMs = this.get("tooltips"); - if (tooltipDOMs) { - for (var i4 = 0; i4 < tooltipDOMs.length; i4++) { - var container2 = tooltipDOMs[i4]; - if (!container2) - continue; - var parent_1 = container2.parentElement; - if (!parent_1) - continue; - parent_1.removeChild(container2); - } - } - (_a6 = this.get("eventController")) === null || _a6 === void 0 ? void 0 : _a6.destroy(); - (_b = this.get("layoutController")) === null || _b === void 0 ? void 0 : _b.destroy(); - (_c = this.get("graphWaterMarker")) === null || _c === void 0 ? void 0 : _c.destroy(); - (_d = document.querySelector(".g6-graph-watermarker")) === null || _d === void 0 ? void 0 : _d.remove(); - _super.prototype.destroy.call(this); - }; - return Graph10; -}(graph_default); -var graph_default2 = Graph9; - -// node_modules/@antv/g6-pc/es/graph/tree-graph.js -var import_hierarchy5 = __toModule(require_hierarchy()); -var import_util553 = __toModule(require_lib()); -var radialLayout4 = util_default3.radialLayout; -var traverseTree4 = util_default3.traverseTree; -var TreeGraph = function(_super) { - __extends(TreeGraph2, _super); - function TreeGraph2(cfg) { - var _this = _super.call(this, cfg) || this; - _this.layoutAnimating = false; - _this.set("removeList", []); - _this.set("layoutMethod", _this.getLayout()); - return _this; - } - TreeGraph2.prototype.getLayout = function() { - var layout6 = this.get("layout"); - if (!layout6) { - return null; - } - if (typeof layout6 === "function") { - return layout6; - } - if (!layout6.type) { - layout6.type = "dendrogram"; - } - if (!layout6.direction) { - layout6.direction = "TB"; - } - if (layout6.radial) { - return function(data3) { - var layoutData = import_hierarchy5.default[layout6.type](data3, layout6); - radialLayout4(layoutData); - return layoutData; - }; - } - return function(data3) { - return import_hierarchy5.default[layout6.type](data3, layout6); - }; - }; - TreeGraph2.indexOfChild = function(children, id) { - var index2 = -1; - (0, import_util553.each)(children, function(former, i4) { - if (id === former.id) { - index2 = i4; - return false; - } - }); - return index2; - }; - TreeGraph2.prototype.getDefaultCfg = function() { - var cfg = _super.prototype.getDefaultCfg.call(this); - cfg.animate = true; - return cfg; - }; - TreeGraph2.prototype.innerAddChild = function(treeData, parent, animate) { - var self2 = this; - var model = treeData.data; - if (model) { - model.x = treeData.x; - model.y = treeData.y; - model.depth = treeData.depth; - } - var node = self2.addItem("node", model, false); - if (parent) { - node.set("parent", parent); - if (animate) { - var origin_1 = parent.get("originAttrs"); - if (origin_1) { - node.set("originAttrs", origin_1); - } else { - var parentModel = parent.getModel(); - node.set("originAttrs", { - x: parentModel.x, - y: parentModel.y - }); - } - } - var childrenList = parent.get("children"); - if (!childrenList) { - parent.set("children", [node]); - } else { - childrenList.push(node); - } - self2.addItem("edge", { - source: parent.get("id"), - target: node.get("id"), - id: "".concat(parent.get("id"), ":").concat(node.get("id")) - }, false); - } - (0, import_util553.each)(treeData.children || [], function(child) { - self2.innerAddChild(child, node, animate); - }); - self2.emit("afteraddchild", { - item: node, - parent - }); - return node; - }; - TreeGraph2.prototype.innerUpdateChild = function(data3, parent, animate) { - var self2 = this; - var current = self2.findById(data3.id); - if (!current) { - self2.innerAddChild(data3, parent, animate); - return; - } - (0, import_util553.each)(data3.children || [], function(child2) { - self2.innerUpdateChild(child2, current, animate); - }); - var children = current.get("children"); - if (children) { - var len5 = children.length; - if (len5 > 0) { - for (var i4 = children.length - 1; i4 >= 0; i4--) { - var child = children[i4].getModel(); - if (TreeGraph2.indexOfChild(data3.children || [], child.id) === -1) { - self2.innerRemoveChild(child.id, { - x: data3.x, - y: data3.y - }, animate); - children.splice(i4, 1); - } - } - } - } - var oriX; - var oriY; - if (current.get("originAttrs")) { - oriX = current.get("originAttrs").x; - oriY = current.get("originAttrs").y; - } - var model = current.getModel(); - if (animate) { - current.set("originAttrs", { - x: model.x, - y: model.y - }); - } - current.set("model", data3.data); - if (oriX !== data3.x || oriY !== data3.y) { - current.updatePosition({ - x: data3.x, - y: data3.y - }); - } - }; - TreeGraph2.prototype.innerRemoveChild = function(id, to, animate) { - var self2 = this; - var node = self2.findById(id); - if (!node) { - return; - } - (0, import_util553.each)(node.get("children"), function(child) { - self2.innerRemoveChild(child.getModel().id, to, animate); - }); - if (animate) { - var model = node.getModel(); - node.set("to", to); - node.set("originAttrs", { - x: model.x, - y: model.y - }); - self2.get("removeList").push(node); - } else { - self2.removeItem(node, false); - } - }; - TreeGraph2.prototype.changeData = function(data3) { - var self2 = this; - this.getNodes().map(function(node) { - return self2.clearItemStates(node); - }); - this.getEdges().map(function(edge2) { - return self2.clearItemStates(edge2); - }); - if (data3) { - self2.data(data3); - self2.render(); - } else { - self2.layout(this.get("fitView")); - } - }; - TreeGraph2.prototype.changeLayout = function(layout6) { - console.warn("Please call updateLayout instead of changeLayout. changeLayout will be discarded soon"); - var self2 = this; - self2.updateLayout(layout6); - }; - TreeGraph2.prototype.updateLayout = function(layout6) { - var self2 = this; - if (!layout6) { - console.warn("layout cannot be null"); - return; - } - self2.set("layout", layout6); - self2.set("layoutMethod", self2.getLayout()); - self2.layout(); - }; - TreeGraph2.prototype.refreshLayout = function(fitView) { - console.warn("Please call layout instead of refreshLayout. refreshLayout will be discarded soon"); - var self2 = this; - self2.layout(fitView); - }; - TreeGraph2.prototype.layout = function(fitView) { - var self2 = this; - var data3 = self2.get("data"); - var layoutMethod = self2.get("layoutMethod"); - var layoutData = layoutMethod ? layoutMethod(data3, self2.get("layout")) : data3; - var animate = self2.get("animate"); - self2.emit("beforerefreshlayout", { - data: data3, - layoutData - }); - self2.emit("beforelayout"); - self2.innerUpdateChild(layoutData, void 0, animate); - if (fitView) { - var viewController = self2.get("viewController"); - viewController.fitView(); - } - if (!animate) { - self2.refresh(); - self2.paint(); - } else { - self2.layoutAnimate(layoutData); - } - self2.emit("afterrefreshlayout", { - data: data3, - layoutData - }); - self2.emit("afterlayout"); - }; - TreeGraph2.prototype.addChild = function(data3, parent) { - var self2 = this; - self2.emit("beforeaddchild", { - model: data3, - parent - }); - if (!(0, import_util553.isString)(parent)) { - parent = parent.get("id"); - } - var parentData = self2.findDataById(parent); - if (parentData) { - if (!parentData.children) { - parentData.children = []; - } - parentData.children.push(data3); - self2.changeData(); - } - }; - TreeGraph2.prototype.updateChildren = function(data3, parentId) { - var self2 = this; - if (!parentId || !self2.findById(parentId)) { - console.warn("Update children failed! There is no node with id '".concat(parentId, "'")); - return; - } - var parentModel = self2.findDataById(parentId); - parentModel.children = data3; - self2.changeData(); - }; - TreeGraph2.prototype.updateChild = function(data3, parentId) { - var self2 = this; - if (!parentId || !self2.findById(parentId)) { - self2.changeData(data3); - return; - } - var parentModel = self2.findDataById(parentId); - var current = self2.findById(data3.id); - if (!parentModel.children) { - parentModel.children = []; - } - if (!current) { - parentModel.children.push(data3); - } else { - var index2 = TreeGraph2.indexOfChild(parentModel.children, data3.id); - parentModel.children[index2] = data3; - } - self2.changeData(); - }; - TreeGraph2.prototype.removeChild = function(id) { - var self2 = this; - var node = self2.findById(id); - if (!node) { - return; - } - var parent = node.get("parent"); - if (parent && !parent.destroyed) { - var parentNode = self2.findDataById(parent.get("id")); - var siblings = parentNode && parentNode.children || []; - var model = node.getModel(); - var index2 = TreeGraph2.indexOfChild(siblings, model.id); - siblings.splice(index2, 1); - } - self2.changeData(); - }; - TreeGraph2.prototype.findDataById = function(id, parent) { - var self2 = this; - if (!parent) { - parent = self2.get("data"); - } - if (id === parent.id) { - return parent; - } - var result = null; - (0, import_util553.each)(parent.children || [], function(child) { - if (child.id === id) { - result = child; - return false; - } - result = self2.findDataById(id, child); - if (result) { - return false; - } - }); - return result; - }; - TreeGraph2.prototype.layoutAnimate = function(data3, onFrame) { - var self2 = this; - var animateCfg = this.get("animateCfg"); - self2.emit("beforeanimate", { - data: data3 - }); - self2.getEdges().forEach(function(edge2) { - var model = edge2.get("model"); - if (!model.sourceAnchor) { - model.sourceAnchor = edge2.get("sourceAnchorIndex"); - } - }); - this.get("canvas").animate(function(ratio) { - traverseTree4(data3, function(child) { - var node = self2.findById(child.id); - if (node) { - var origin_2 = node.get("originAttrs"); - var model = node.get("model"); - if (!origin_2) { - origin_2 = { - x: model.x, - y: model.y - }; - node.set("originAttrs", origin_2); - } - if (onFrame) { - var attrs = onFrame(node, ratio, origin_2, data3); - node.set("model", Object.assign(model, attrs)); - } else { - model.x = origin_2.x + (child.x - origin_2.x) * ratio; - model.y = origin_2.y + (child.y - origin_2.y) * ratio; - } - } - return true; - }); - (0, import_util553.each)(self2.get("removeList"), function(node) { - var model = node.getModel(); - var from = node.get("originAttrs"); - var to = node.get("to"); - model.x = from.x + (to.x - from.x) * ratio; - model.y = from.y + (to.y - from.y) * ratio; - }); - self2.refreshPositions(); - }, { - duration: animateCfg.duration, - easing: animateCfg.ease, - callback: function callback() { - (0, import_util553.each)(self2.getNodes(), function(node) { - node.set("originAttrs", null); - }); - (0, import_util553.each)(self2.get("removeList"), function(node) { - self2.removeItem(node); - }); - self2.set("removeList", []); - if (animateCfg.callback) { - animateCfg.callback(); - } - self2.emit("afteranimate", { - data: data3 - }); - }, - delay: animateCfg.delay - }); - }; - TreeGraph2.prototype.stopLayoutAnimate = function() { - this.get("canvas").stopAnimate(); - this.emit("layoutanimateend", { - data: this.get("data") - }); - this.layoutAnimating = false; - }; - TreeGraph2.prototype.isLayoutAnimating = function() { - return this.layoutAnimating; - }; - TreeGraph2.prototype.render = function() { - var self2 = this; - var data3 = self2.get("data"); - if (!data3 || !(0, import_util553.isObject)(data3) || !Object.keys(data3).length) { - throw new Error("data must be defined first"); - } - self2.clear(); - self2.emit("beforerender"); - self2.layout(this.get("fitView")); - self2.emit("afterrender"); - }; - TreeGraph2.prototype.save = function() { - return this.get("data"); - }; - return TreeGraph2; -}(graph_default2); -var tree_graph_default = TreeGraph; - -// node_modules/@antv/g6-plugin/es/base.js -var import_util555 = __toModule(require_lib()); -var PluginBase = function() { - function PluginBase2(cfgs) { - this._cfgs = (0, import_util555.deepMix)(this.getDefaultCfgs(), cfgs); - this._events = {}; - this.destroyed = false; - } - PluginBase2.prototype.getDefaultCfgs = function() { - return {}; - }; - PluginBase2.prototype.initPlugin = function(graph) { - var self2 = this; - self2.set("graph", graph); - var events = self2.getEvents(); - var bindEvents2 = {}; - (0, import_util555.each)(events, function(v3, k4) { - var event = (0, import_util555.wrapBehavior)(self2, v3); - bindEvents2[k4] = event; - graph.on(k4, event); - }); - this._events = bindEvents2; - this.init(); - }; - PluginBase2.prototype.getEvents = function() { - return {}; - }; - PluginBase2.prototype.get = function(key) { - var _a6; - return (_a6 = this._cfgs) === null || _a6 === void 0 ? void 0 : _a6[key]; - }; - PluginBase2.prototype.set = function(key, val) { - this._cfgs[key] = val; - }; - PluginBase2.prototype.destroy = function() { - }; - PluginBase2.prototype.destroyPlugin = function() { - this.destroy(); - var graph = this.get("graph"); - var events = this._events; - (0, import_util555.each)(events, function(v3, k4) { - graph.off(k4, v3); - }); - this._events = null; - this._cfgs = null; - this.destroyed = true; - }; - return PluginBase2; -}(); -var base_default18 = PluginBase; - -// node_modules/@antv/g6-plugin/es/grid/index.js -var __extends5 = function() { - var _extendStatics = function extendStatics(d3, b10) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) { - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - } - }; - return _extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - _extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -var GRID_PNG = "url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImdyaWQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTSAwIDEwIEwgNDAgMTAgTSAxMCAwIEwgMTAgNDAgTSAwIDIwIEwgNDAgMjAgTSAyMCAwIEwgMjAgNDAgTSAwIDMwIEwgNDAgMzAgTSAzMCAwIEwgMzAgNDAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2UwZTBlMCIgb3BhY2l0eT0iMC4yIiBzdHJva2Utd2lkdGg9IjEiLz48cGF0aCBkPSJNIDQwIDAgTCAwIDAgMCA0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIiBzdHJva2Utd2lkdGg9IjEiLz48L3BhdHRlcm4+PC9kZWZzPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JpZCkiLz48L3N2Zz4=)"; -var Grid3 = function(_super) { - __extends5(Grid5, _super); - function Grid5(config) { - return _super.call(this, config) || this; - } - Grid5.prototype.getDefaultCfgs = function() { - return { - img: GRID_PNG, - follow: true - }; - }; - Grid5.prototype.init = function() { - var graph = this.get("graph"); - var graphContainer = graph.get("container"); - var canvas = graph.get("canvas").get("el"); - var img = this.get("img") || GRID_PNG; - var container2 = createDom(`
      `); - var gridContainer = createDom("")); - this.set("container", container2); - this.set("gridContainer", gridContainer); - this.positionInit(); - container2.appendChild(gridContainer); - graphContainer.insertBefore(container2, canvas); - }; - Grid5.prototype.positionInit = function() { - var graph = this.get("graph"); - var minZoom = graph.get("minZoom"); - var width2 = graph.get("width"); - var height = graph.get("height"); - modifyCSS(this.get("container"), { - width: "".concat(width2, "px"), - height: "".concat(height, "px") - }); - var gridContainerWidth = width2 * 80 / minZoom; - var gridContainerHeight = height * 80 / minZoom; - modifyCSS(this.get("gridContainer"), { - width: "".concat(gridContainerWidth, "px"), - height: "".concat(gridContainerHeight, "px"), - left: "-".concat(gridContainerWidth / 2, "px"), - top: "-".concat(gridContainerHeight / 2, "px") - }); - }; - Grid5.prototype.getEvents = function() { - return { - viewportchange: "updateGrid" - }; - }; - Grid5.prototype.updateGrid = function(param) { - var gridContainer = this.get("gridContainer"); - var matrix = param.matrix; - if (!matrix) - matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - var isFollow = this.get("follow"); - var transform18 = "matrix(".concat(matrix[0], ", ").concat(matrix[1], ", ").concat(matrix[3], ", ").concat(matrix[4], ", ").concat(isFollow ? matrix[6] : "0", ", ").concat(isFollow ? matrix[7] : "0", ")"); - modifyCSS(gridContainer, { - transform: transform18 - }); - }; - Grid5.prototype.getContainer = function() { - return this.get("container"); - }; - Grid5.prototype.destroy = function() { - var graph = this.get("graph"); - var graphContainer = graph.get("container"); - var container2 = this.get("container"); - graphContainer.removeChild(container2); - }; - return Grid5; -}(base_default18); -var grid_default = Grid3; - -// node_modules/@antv/g6-plugin/es/menu/index.js -var import_util556 = __toModule(require_lib()); -var import_insert_css = __toModule(require_insert_css()); -var __extends6 = function() { - var _extendStatics = function extendStatics(d3, b10) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) { - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - } - }; - return _extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - _extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -typeof document !== "undefined" && (0, import_insert_css.default)("\n .g6-component-contextmenu {\n border: 1px solid #e2e2e2;\n border-radius: 4px;\n font-size: 12px;\n color: #545454;\n background-color: rgba(255, 255, 255, 0.9);\n padding: 10px 8px;\n box-shadow: rgb(174, 174, 174) 0px 0px 10px;\n }\n .g6-contextmenu-ul {\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n"); -var Menu = function(_super) { - __extends6(Menu3, _super); - function Menu3(config) { - return _super.call(this, config) || this; - } - Menu3.prototype.getDefaultCfgs = function() { - return { - offsetX: 6, - offsetY: 6, - handleMenuClick: void 0, - getContent: function getContent(e4) { - return "\n
        \n
      • \u83DC\u5355\u98791
      • \n
      • \u83DC\u5355\u98792
      • \n
      \n "; - }, - shouldBegin: function shouldBegin2(e4) { - return true; - }, - onHide: function onHide() { - return true; - }, - itemTypes: ["node", "edge", "combo"], - trigger: "contextmenu" - }; - }; - Menu3.prototype.getEvents = function() { - if (this.get("trigger") === "click") { - return { - click: "onMenuShow" - }; - } - return { - contextmenu: "onMenuShow" - }; - }; - Menu3.prototype.init = function() { - var className = this.get("className"); - var menu = createDom("
      ")); - modifyCSS(menu, { - top: "0px", - position: "absolute", - visibility: "hidden" - }); - var container2 = this.get("container"); - if (!container2) { - container2 = this.get("graph").get("container"); - } - if ((0, import_util556.isString)(container2)) { - container2 = document.getElementById(container2); - } - container2.appendChild(menu); - this.set("menu", menu); - }; - Menu3.prototype.onMenuShow = function(e4) { - var self2 = this; - e4.preventDefault(); - var itemTypes = this.get("itemTypes"); - if (!e4.item) { - if (itemTypes.indexOf("canvas") === -1) { - self2.onMenuHide(); - return; - } - } else { - if (e4.item && e4.item.getType && itemTypes.indexOf(e4.item.getType()) === -1) { - self2.onMenuHide(); - return; - } - } - var shouldBegin2 = this.get("shouldBegin"); - if (!shouldBegin2(e4)) - return; - var menuDom = this.get("menu"); - var getContent = this.get("getContent"); - var graph = this.get("graph"); - var menu = getContent(e4, graph); - if ((0, import_util556.isString)(menu)) { - menuDom.innerHTML = menu; - } else { - menuDom.innerHTML = menu.outerHTML; - } - this.removeMenuEventListener(); - var handleMenuClick = this.get("handleMenuClick"); - if (handleMenuClick) { - var handleMenuClickWrapper = function handleMenuClickWrapper2(evt) { - handleMenuClick(evt.target, e4.item, graph); - }; - this.set("handleMenuClickWrapper", handleMenuClickWrapper); - menuDom.addEventListener("click", handleMenuClickWrapper); - } - var width2 = graph.get("width"); - var height = graph.get("height"); - var bbox = menuDom.getBoundingClientRect(); - var offsetX = this.get("offsetX") || 0; - var offsetY = this.get("offsetY") || 0; - var graphTop = graph.getContainer().offsetTop; - var graphLeft = graph.getContainer().offsetLeft; - var x6 = e4.canvasX + graphLeft + offsetX; - var y5 = e4.canvasY + graphTop + offsetY; - if (x6 + bbox.width > width2) { - x6 = e4.canvasX - bbox.width - offsetX + graphLeft; - } - if (y5 + bbox.height > height) { - y5 = e4.canvasY - bbox.height - offsetY + graphTop; - } - modifyCSS(menuDom, { - top: "".concat(y5, "px"), - left: "".concat(x6, "px"), - visibility: "visible" - }); - var triggeredByFirstClick = this.get("trigger") === "click"; - var handler = function handler2(evt) { - if (triggeredByFirstClick) { - triggeredByFirstClick = false; - return; - } - self2.onMenuHide(); - }; - document.body.addEventListener("click", handler); - this.set("handler", handler); - }; - Menu3.prototype.removeMenuEventListener = function() { - var handleMenuClickWrapper = this.get("handleMenuClickWrapper"); - var handler = this.get("handler"); - if (handleMenuClickWrapper) { - var menuDom = this.get("menu"); - menuDom.removeEventListener("click", handleMenuClickWrapper); - this.set("handleMenuClickWrapper", null); - } - if (handler) { - document.body.removeEventListener("click", handler); - } - }; - Menu3.prototype.onMenuHide = function() { - var menuDom = this.get("menu"); - if (menuDom) { - modifyCSS(menuDom, { - visibility: "hidden" - }); - } - this.removeMenuEventListener(); - }; - Menu3.prototype.destroy = function() { - var menu = this.get("menu"); - this.removeMenuEventListener(); - if (menu) { - var container2 = this.get("container"); - if (!container2) { - container2 = this.get("graph").get("container"); - } - if ((0, import_util556.isString)(container2)) { - container2 = document.getElementById(container2); - } - container2.removeChild(menu); - } - }; - return Menu3; -}(base_default18); -var menu_default = Menu; - -// node_modules/@antv/g6-plugin/es/minimap/index.js -var import_util557 = __toModule(require_lib()); -var __extends7 = function() { - var _extendStatics = function extendStatics(d3, b10) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) { - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - } - }; - return _extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - _extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -var __assign7 = function() { - __assign7 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) { - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - } - return t4; - }; - return __assign7.apply(this, arguments); -}; -var max13 = Math.max; -var transform13 = ext_exports.transform; -var DEFAULT_MODE = "default"; -var KEYSHAPE_MODE = "keyShape"; -var DELEGATE_MODE = "delegate"; -var SVG3 = "svg"; -var MiniMap = function(_super) { - __extends7(MiniMap2, _super); - function MiniMap2(config) { - var _this = _super.call(this, config) || this; - _this.handleUpdateCanvas = (0, import_util557.debounce)(function(event) { - var self2 = _this; - if (self2.destroyed) - return; - self2.updateCanvas(); - }, 100, false); - return _this; - } - MiniMap2.prototype.getDefaultCfgs = function() { - return { - container: null, - className: "g6-minimap", - viewportClassName: "g6-minimap-viewport", - type: "default", - padding: 50, - size: [200, 120], - delegateStyle: { - fill: "#40a9ff", - stroke: "#096dd9" - }, - refresh: true - }; - }; - MiniMap2.prototype.getEvents = function() { - return { - beforepaint: "updateViewport", - beforeanimate: "disableRefresh", - afteranimate: "enableRefresh", - viewportchange: "disableOneRefresh" - }; - }; - MiniMap2.prototype.disableRefresh = function() { - this.set("refresh", false); - }; - MiniMap2.prototype.enableRefresh = function() { - this.set("refresh", true); - this.updateCanvas(); - }; - MiniMap2.prototype.disableOneRefresh = function() { - this.set("viewportChange", true); - }; - MiniMap2.prototype.initViewport = function() { - var _this = this; - var cfgs = this._cfgs; - var size14 = cfgs.size, graph = cfgs.graph; - if (this.destroyed) - return; - var canvas = this.get("canvas"); - var containerDOM = canvas.get("container"); - var viewport = createDom("\n \n ")); - var isFireFox = navigator.userAgent.toLowerCase().indexOf("firefox") > -1; - var x6 = 0; - var y5 = 0; - var dragging = false; - var left2 = 0; - var top = 0; - var width2 = 0; - var height = 0; - var ratio = 0; - var zoom2 = 0; - viewport.addEventListener("dragstart", function(e4) { - var _a6, _b; - if (e4.dataTransfer) { - var img = new Image(); - img.src = "data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' %3E%3Cpath /%3E%3C/svg%3E"; - (_b = (_a6 = e4.dataTransfer).setDragImage) === null || _b === void 0 ? void 0 : _b.call(_a6, img, 0, 0); - try { - e4.dataTransfer.setData("text/html", "view-port-minimap"); - } catch (_c) { - e4.dataTransfer.setData("text", "view-port-minimap"); - } - } - cfgs.refresh = false; - if (e4.target !== viewport) { - return; - } - var style = viewport.style; - left2 = parseInt(style.left, 10); - top = parseInt(style.top, 10); - width2 = parseInt(style.width, 10); - height = parseInt(style.height, 10); - if (width2 > size14[0] || height > size14[1]) { - return; - } - zoom2 = graph.getZoom(); - ratio = _this.get("ratio"); - dragging = true; - x6 = e4.clientX; - y5 = e4.clientY; - }, false); - viewport.addEventListener(isFireFox ? "dragover" : "drag", function(e4) { - if (!dragging || (0, import_util557.isNil)(e4.clientX) || (0, import_util557.isNil)(e4.clientY)) { - return; - } - var dx = x6 - e4.clientX; - var dy = y5 - e4.clientY; - if (left2 - dx < 0 || left2 - dx + width2 >= size14[0]) { - dx = 0; - } - if (top - dy < 0 || top - dy + height >= size14[1]) { - dy = 0; - } - left2 -= dx; - top -= dy; - modifyCSS(viewport, { - left: "".concat(left2, "px"), - top: "".concat(top, "px") - }); - graph.translate(dx * zoom2 / ratio, dy * zoom2 / ratio); - x6 = e4.clientX; - y5 = e4.clientY; - }, false); - viewport.addEventListener("dragend", function() { - dragging = false; - cfgs.refresh = true; - }, false); - this.set("viewport", viewport); - containerDOM.appendChild(viewport); - }; - MiniMap2.prototype.updateViewport = function() { - if (this.destroyed) - return; - var ratio = this.get("ratio"); - var dx = this.get("dx"); - var dy = this.get("dy"); - var totaldx = this.get("totaldx"); - var totaldy = this.get("totaldy"); - var graph = this.get("graph"); - var size14 = this.get("size"); - var graphWidth2 = graph.get("width"); - var graphHeight2 = graph.get("height"); - var topLeft = graph.getPointByCanvas(0, 0); - var bottomRight = graph.getPointByCanvas(graphWidth2, graphHeight2); - var viewport = this.get("viewport"); - if (!viewport) { - this.initViewport(); - } - var width2 = (bottomRight.x - topLeft.x) * ratio; - var height = (bottomRight.y - topLeft.y) * ratio; - var left2 = topLeft.x * ratio + totaldx; - var top = topLeft.y * ratio + totaldy; - var right2 = left2 + width2; - var bottom = top + height; - if (left2 < 0) { - width2 += left2; - left2 = 0; - } - if (right2 > size14[0]) { - width2 = width2 - (right2 - size14[0]); - } - if (top < 0) { - height += top; - top = 0; - } - if (bottom > size14[1]) { - height = height - (bottom - size14[1]); - } - this.set("ratio", ratio); - var correctLeft = "".concat(left2, "px"); - var correctTop = "".concat(top, "px"); - modifyCSS(viewport, { - left: correctLeft, - top: correctTop, - width: "".concat(width2, "px"), - height: "".concat(height, "px") - }); - }; - MiniMap2.prototype.updateGraphShapes = function() { - var graph = this._cfgs.graph; - var canvas = this.get("canvas"); - var graphGroup = graph.get("group"); - if (graphGroup.destroyed) - return; - var clonedGroup = graphGroup.clone(); - clonedGroup.resetMatrix(); - canvas.clear(); - canvas.add(clonedGroup); - var renderer = graph.get("renderer"); - if (renderer === SVG3) { - this.updateVisible(clonedGroup); - } - }; - MiniMap2.prototype.updateVisible = function(ele) { - var _this = this; - if (!ele.isGroup() && !ele.get("visible")) { - ele.hide(); - } else { - var children = ele.get("children"); - if (!children || !children.length) - return; - children.forEach(function(child) { - if (!child.get("visible")) - child.hide(); - _this.updateVisible(child); - }); - } - }; - MiniMap2.prototype.updateKeyShapes = function() { - var _this = this; - var graph = this._cfgs.graph; - var canvas = this.get("canvas"); - var group3 = canvas.get("children")[0] || canvas.addGroup(); - (0, import_util557.each)(graph.getEdges(), function(edge2) { - _this.updateOneEdgeKeyShape(edge2, group3); - }); - (0, import_util557.each)(graph.getNodes(), function(node) { - _this.updateOneNodeKeyShape(node, group3); - }); - var combos = graph.getCombos(); - if (combos && combos.length) { - var comboGroup_1 = group3.find(function(e4) { - return e4.get("name") === "comboGroup"; - }) || group3.addGroup({ - name: "comboGroup" - }); - setTimeout(function() { - if (_this.destroyed) - return; - (0, import_util557.each)(combos, function(combo) { - _this.updateOneComboKeyShape(combo, comboGroup_1); - }); - comboGroup_1 === null || comboGroup_1 === void 0 ? void 0 : comboGroup_1.sort(); - comboGroup_1 === null || comboGroup_1 === void 0 ? void 0 : comboGroup_1.toBack(); - _this.updateCanvas(); - }, 250); - } - this.clearDestroyedShapes(); - }; - MiniMap2.prototype.updateOneComboKeyShape = function(item, comboGroup) { - if (this.destroyed) - return; - var itemMap = this.get("itemMap") || {}; - var mappedItem = itemMap[item.get("id")]; - var bbox = item.getBBox(); - var cKeyShape = item.get("keyShape").clone(); - var keyShapeStyle = cKeyShape.attr(); - var attrs = { - x: bbox.centerX, - y: bbox.centerY - }; - if (!mappedItem) { - mappedItem = cKeyShape; - comboGroup.add(mappedItem); - } else { - attrs = Object.assign(keyShapeStyle, attrs); - } - var shapeType = mappedItem.get("type"); - if (shapeType === "rect" || shapeType === "image") { - attrs.x = bbox.minX; - attrs.y = bbox.minY; - } - mappedItem.attr(attrs); - if (!item.isVisible()) - mappedItem.hide(); - else - mappedItem.show(); - mappedItem.exist = true; - var zIndex = item.getModel().depth; - if (!isNaN(zIndex)) - mappedItem.set("zIndex", zIndex); - itemMap[item.get("id")] = mappedItem; - this.set("itemMap", itemMap); - }; - MiniMap2.prototype.updateOneNodeKeyShape = function(item, group3) { - var itemMap = this.get("itemMap") || {}; - var mappedItem = itemMap[item.get("id")]; - var bbox = item.getBBox(); - var cKeyShape = item.get("keyShape").clone(); - var keyShapeStyle = cKeyShape.attr(); - var attrs = { - x: bbox.centerX, - y: bbox.centerY - }; - if (!mappedItem) { - mappedItem = cKeyShape; - group3.add(mappedItem); - } else { - attrs = Object.assign(keyShapeStyle, attrs); - } - var shapeType = mappedItem.get("type"); - if (shapeType === "rect" || shapeType === "image") { - attrs.x = bbox.minX; - attrs.y = bbox.minY; - } - mappedItem.attr(attrs); - if (!item.isVisible()) - mappedItem.hide(); - else - mappedItem.show(); - mappedItem.exist = true; - var zIndex = item.getModel().depth; - if (!isNaN(zIndex)) - mappedItem.set("zIndex", zIndex); - itemMap[item.get("id")] = mappedItem; - this.set("itemMap", itemMap); - }; - MiniMap2.prototype.updateDelegateShapes = function() { - var _this = this; - var graph = this._cfgs.graph; - var canvas = this.get("canvas"); - var group3 = canvas.get("children")[0] || canvas.addGroup(); - (0, import_util557.each)(graph.getEdges(), function(edge2) { - _this.updateOneEdgeKeyShape(edge2, group3); - }); - (0, import_util557.each)(graph.getNodes(), function(node) { - _this.updateOneNodeDelegateShape(node, group3); - }); - var combos = graph.getCombos(); - if (combos && combos.length) { - var comboGroup_2 = group3.find(function(e4) { - return e4.get("name") === "comboGroup"; - }) || group3.addGroup({ - name: "comboGroup" - }); - setTimeout(function() { - if (_this.destroyed) - return; - (0, import_util557.each)(combos, function(combo) { - _this.updateOneComboKeyShape(combo, comboGroup_2); - }); - comboGroup_2 === null || comboGroup_2 === void 0 ? void 0 : comboGroup_2.sort(); - comboGroup_2 === null || comboGroup_2 === void 0 ? void 0 : comboGroup_2.toBack(); - _this.updateCanvas(); - }, 250); - } - this.clearDestroyedShapes(); - }; - MiniMap2.prototype.clearDestroyedShapes = function() { - var itemMap = this.get("itemMap") || {}; - var keys6 = Object.keys(itemMap); - if (!keys6 || keys6.length === 0) - return; - for (var i4 = keys6.length - 1; i4 >= 0; i4--) { - var shape = itemMap[keys6[i4]]; - var exist = shape.exist; - shape.exist = false; - if (!exist) { - shape.remove(); - delete itemMap[keys6[i4]]; - } - } - }; - MiniMap2.prototype.updateOneEdgeKeyShape = function(item, group3) { - var itemMap = this.get("itemMap") || {}; - var mappedItem = itemMap[item.get("id")]; - if (mappedItem) { - var path = item.get("keyShape").attr("path"); - mappedItem.attr("path", path); - } else { - mappedItem = item.get("keyShape").clone(); - group3.add(mappedItem); - } - if (!item.isVisible()) - mappedItem.hide(); - else - mappedItem.show(); - mappedItem.exist = true; - itemMap[item.get("id")] = mappedItem; - this.set("itemMap", itemMap); - }; - MiniMap2.prototype.updateOneNodeDelegateShape = function(item, group3) { - var delegateStyle = this.get("delegateStyle"); - var itemMap = this.get("itemMap") || {}; - var mappedItem = itemMap[item.get("id")]; - var bbox = item.getBBox(); - if (mappedItem) { - var attrs = { - x: bbox.minX, - y: bbox.minY, - width: bbox.width, - height: bbox.height - }; - mappedItem.attr(attrs); - } else { - mappedItem = group3.addShape("rect", { - attrs: __assign7({ - x: bbox.minX, - y: bbox.minY, - width: bbox.width, - height: bbox.height - }, delegateStyle), - name: "minimap-node-shape" - }); - } - if (!item.isVisible()) - mappedItem.hide(); - else - mappedItem.show(); - mappedItem.exist = true; - itemMap[item.get("id")] = mappedItem; - this.set("itemMap", itemMap); - }; - MiniMap2.prototype.init = function() { - this.initContainer(); - this.get("graph").on("afterupdateitem", this.handleUpdateCanvas); - this.get("graph").on("afteritemstatechange", this.handleUpdateCanvas); - this.get("graph").on("afteradditem", this.handleUpdateCanvas); - this.get("graph").on("afterremoveitem", this.handleUpdateCanvas); - this.get("graph").on("afterrender", this.handleUpdateCanvas); - this.get("graph").on("afterlayout", this.handleUpdateCanvas); - }; - MiniMap2.prototype.initContainer = function() { - var self2 = this; - var graph = self2.get("graph"); - var size14 = self2.get("size"); - var className = self2.get("className"); - var parentNode = self2.get("container"); - var container2 = createDom("
      ")); - if ((0, import_util557.isString)(parentNode)) { - parentNode = document.getElementById(parentNode); - } - if (parentNode) { - parentNode.appendChild(container2); - } else { - graph.get("container").appendChild(container2); - } - self2.set("container", container2); - var containerDOM = createDom('
      '); - container2.appendChild(containerDOM); - containerDOM.addEventListener("dragenter", function(e4) { - e4.preventDefault(); - }); - containerDOM.addEventListener("dragover", function(e4) { - e4.preventDefault(); - }); - var canvas; - var renderer = graph.get("renderer"); - if (renderer === SVG3) { - canvas = new canvas_default3({ - container: containerDOM, - width: size14[0], - height: size14[1] - }); - } else { - canvas = new canvas_default2({ - container: containerDOM, - width: size14[0], - height: size14[1] - }); - } - self2.set("canvas", canvas); - self2.updateCanvas(); - }; - MiniMap2.prototype.updateCanvas = function() { - if (this.destroyed) - return; - var isRefresh = this.get("refresh"); - if (!isRefresh) { - return; - } - var graph = this.get("graph"); - if (graph.get("destroyed")) { - return; - } - if (this.get("viewportChange")) { - this.set("viewportChange", false); - this.updateViewport(); - } - var size14 = this.get("size"); - var canvas = this.get("canvas"); - var type2 = this.get("type"); - var padding3 = this.get("padding"); - if (canvas.destroyed) { - return; - } - switch (type2) { - case DEFAULT_MODE: - this.updateGraphShapes(); - break; - case KEYSHAPE_MODE: - this.updateKeyShapes(); - break; - case DELEGATE_MODE: - this.updateDelegateShapes(); - break; - default: - break; - } - var group3 = canvas.get("children")[0]; - if (!group3) - return; - group3.resetMatrix(); - var bbox = group3.getCanvasBBox(); - var graphBBox = graph.get("canvas").getCanvasBBox(); - var graphZoom = graph.getZoom() || 1; - var width2 = graphBBox.width / graphZoom; - var height = graphBBox.height / graphZoom; - if (Number.isFinite(bbox.width)) { - width2 = max13(bbox.width, width2); - height = max13(bbox.height, height); - } - width2 += 2 * padding3; - height += 2 * padding3; - var ratio = Math.min(size14[0] / width2, size14[1] / height); - var matrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - var minX = 0; - var minY = 0; - if (Number.isFinite(bbox.minX)) { - minX = -bbox.minX; - } - if (Number.isFinite(bbox.minY)) { - minY = -bbox.minY; - } - var dx = (size14[0] - (width2 - 2 * padding3) * ratio) / 2; - var dy = (size14[1] - (height - 2 * padding3) * ratio) / 2; - matrix = transform13(matrix, [ - ["t", minX, minY], - ["s", ratio, ratio], - ["t", dx, dy] - ]); - group3.setMatrix(matrix); - this.set("ratio", ratio); - this.set("totaldx", dx + minX * ratio); - this.set("totaldy", dy + minY * ratio); - this.set("dx", dx); - this.set("dy", dy); - this.updateViewport(); - }; - MiniMap2.prototype.getCanvas = function() { - return this.get("canvas"); - }; - MiniMap2.prototype.getViewport = function() { - return this.get("viewport"); - }; - MiniMap2.prototype.getContainer = function() { - return this.get("container"); - }; - MiniMap2.prototype.destroy = function() { - this.get("canvas").destroy(); - var container2 = this.get("container"); - container2.parentNode.removeChild(container2); - }; - return MiniMap2; -}(base_default18); -var minimap_default = MiniMap; - -// node_modules/@antv/g6-plugin/es/bundling/index.js -var __extends8 = function() { - var _extendStatics = function extendStatics(d3, b10) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) { - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - } - }; - return _extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - _extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -function getEucliDis(pointA, pointB, eps2) { - var vx = pointA.x - pointB.x; - var vy = pointA.y - pointB.y; - if (!eps2 || Math.abs(vx) > eps2 || Math.abs(vy) > eps2) { - return Math.sqrt(vx * vx + vy * vy); - } - return eps2; -} -function getDotProduct(ei, ej) { - return ei.x * ej.x + ei.y * ej.y; -} -function projectPointToEdge(p4, e4) { - var k4 = (e4.source.y - e4.target.y) / (e4.source.x - e4.target.x); - var x6 = (k4 * k4 * e4.source.x + k4 * (p4.y - e4.source.y) + p4.x) / (k4 * k4 + 1); - var y5 = k4 * (x6 - e4.source.x) + e4.source.y; - return { - x: x6, - y: y5 - }; -} -var Bundling = function(_super) { - __extends8(Bundling3, _super); - function Bundling3(config) { - return _super.call(this, config) || this; - } - Bundling3.prototype.getDefaultCfgs = function() { - return { - edgeBundles: [], - edgePoints: [], - K: 0.1, - lambda: 0.1, - divisions: 1, - divRate: 2, - cycles: 6, - iterations: 90, - iterRate: 0.6666667, - bundleThreshold: 0.6, - eps: 1e-6, - onLayoutEnd: function onLayoutEnd() { - }, - onTick: function onTick() { - } - }; - }; - Bundling3.prototype.init = function() { - var graph = this.get("graph"); - var onTick = this.get("onTick"); - var tick = function tick2() { - if (onTick) { - onTick(); - } - graph.refreshPositions(); - }; - this.set("tick", tick); - }; - Bundling3.prototype.bundling = function(data3) { - var self2 = this; - self2.set("data", data3); - if (self2.isTicking()) { - return; - } - var edges = data3.edges || []; - var nodes = data3.nodes || []; - var nodeIdMap = {}; - var error = false; - nodes.forEach(function(node) { - if (node.x === null || !node.y === null || node.x === void 0 || !node.y === void 0) { - error = true; - } - nodeIdMap[node.id] = node; - }); - if (error) - throw new Error("please layout the graph or assign x and y for nodes first"); - self2.set("nodeIdMap", nodeIdMap); - var divisions = self2.get("divisions"); - var divRate = self2.get("divRate"); - var edgePoints = self2.divideEdges(divisions); - self2.set("edgePoints", edgePoints); - var edgeBundles = self2.getEdgeBundles(); - self2.set("edgeBundles", edgeBundles); - var C3 = self2.get("cycles"); - var iterations = self2.get("iterations"); - var iterRate = self2.get("iterRate"); - var lambda = self2.get("lambda"); - for (var i4 = 0; i4 < C3; i4++) { - var _loop_1 = function _loop_12(j5) { - var forces = []; - edges.forEach(function(e4, k4) { - if (e4.source === e4.target) - return; - var source = nodeIdMap[e4.source]; - var target = nodeIdMap[e4.target]; - forces[k4] = self2.getEdgeForces({ - source, - target - }, k4, divisions, lambda); - for (var p4 = 0; p4 < divisions + 1; p4++) { - edgePoints[k4][p4].x += forces[k4][p4].x; - edgePoints[k4][p4].y += forces[k4][p4].y; - } - }); - }; - for (var j4 = 0; j4 < iterations; j4++) { - _loop_1(j4); - } - lambda = lambda / 2; - divisions *= divRate; - iterations *= iterRate; - edgePoints = self2.divideEdges(divisions); - self2.set("edgePoints", edgePoints); - } - edges.forEach(function(e4, i5) { - if (e4.source === e4.target) - return; - e4.type = "polyline"; - e4.controlPoints = edgePoints[i5].slice(1, edgePoints[i5].length - 1); - }); - var graph = self2.get("graph"); - graph.refresh(); - }; - Bundling3.prototype.updateBundling = function(cfg) { - var self2 = this; - var data3 = cfg.data; - if (data3) { - self2.set("data", data3); - } - if (self2.get("ticking")) { - self2.set("ticking", false); - } - Object.keys(cfg).forEach(function(key) { - self2.set(key, cfg[key]); - }); - if (cfg.onTick) { - var graph_1 = this.get("graph"); - self2.set("tick", function() { - cfg.onTick(); - graph_1.refresh(); - }); - } - self2.bundling(data3); - }; - Bundling3.prototype.divideEdges = function(divisions) { - var self2 = this; - var edges = self2.get("data").edges; - var nodeIdMap = self2.get("nodeIdMap"); - var edgePoints = self2.get("edgePoints"); - if (!edgePoints || edgePoints === void 0) - edgePoints = []; - edges.forEach(function(edge2, i4) { - if (!edgePoints[i4] || edgePoints[i4] === void 0) { - edgePoints[i4] = []; - } - var source = nodeIdMap[edge2.source]; - var target = nodeIdMap[edge2.target]; - if (divisions === 1) { - edgePoints[i4].push({ - x: source.x, - y: source.y - }); - edgePoints[i4].push({ - x: 0.5 * (source.x + target.x), - y: 0.5 * (source.y + target.y) - }); - edgePoints[i4].push({ - x: target.x, - y: target.y - }); - } else { - var edgeLength = 0; - if (!edgePoints[i4] || edgePoints[i4] === []) { - edgeLength = getEucliDis({ - x: source.x, - y: source.y - }, { - x: target.x, - y: target.y - }); - } else { - edgeLength = self2.getEdgeLength(edgePoints[i4]); - } - var divisionLength_1 = edgeLength / (divisions + 1); - var currentDivisonLength_1 = divisionLength_1; - var newEdgePoints_1 = [{ - x: source.x, - y: source.y - }]; - edgePoints[i4].forEach(function(ep, j4) { - if (j4 === 0) - return; - var oriDivisionLength = getEucliDis(ep, edgePoints[i4][j4 - 1]); - while (oriDivisionLength > currentDivisonLength_1) { - var ratio = currentDivisonLength_1 / oriDivisionLength; - var edgePoint = { - x: edgePoints[i4][j4 - 1].x, - y: edgePoints[i4][j4 - 1].y - }; - edgePoint.x += ratio * (ep.x - edgePoints[i4][j4 - 1].x); - edgePoint.y += ratio * (ep.y - edgePoints[i4][j4 - 1].y); - newEdgePoints_1.push(edgePoint); - oriDivisionLength -= currentDivisonLength_1; - currentDivisonLength_1 = divisionLength_1; - } - currentDivisonLength_1 -= oriDivisionLength; - }); - newEdgePoints_1.push({ - x: target.x, - y: target.y - }); - edgePoints[i4] = newEdgePoints_1; - } - }); - return edgePoints; - }; - Bundling3.prototype.getEdgeLength = function(points) { - var length5 = 0; - points.forEach(function(p4, i4) { - if (i4 === 0) - return; - length5 += getEucliDis(p4, points[i4 - 1]); - }); - return length5; - }; - Bundling3.prototype.getEdgeBundles = function() { - var self2 = this; - var data3 = self2.get("data"); - var edges = data3.edges || []; - var bundleThreshold = self2.get("bundleThreshold"); - var nodeIdMap = self2.get("nodeIdMap"); - var edgeBundles = self2.get("edgeBundles"); - if (!edgeBundles) - edgeBundles = []; - edges.forEach(function(e4, i4) { - if (!edgeBundles[i4] || edgeBundles[i4] === void 0) { - edgeBundles[i4] = []; - } - }); - edges.forEach(function(ei, i4) { - var iSource = nodeIdMap[ei.source]; - var iTarget = nodeIdMap[ei.target]; - edges.forEach(function(ej, j4) { - if (j4 <= i4) - return; - var jSource = nodeIdMap[ej.source]; - var jTarget = nodeIdMap[ej.target]; - var score2 = self2.getBundleScore({ - source: iSource, - target: iTarget - }, { - source: jSource, - target: jTarget - }); - if (score2 >= bundleThreshold) { - edgeBundles[i4].push(j4); - edgeBundles[j4].push(i4); - } - }); - }); - return edgeBundles; - }; - Bundling3.prototype.getBundleScore = function(ei, ej) { - var self2 = this; - ei.vx = ei.target.x - ei.source.x; - ei.vy = ei.target.y - ei.source.y; - ej.vx = ej.target.x - ej.source.x; - ej.vy = ej.target.y - ej.source.y; - ei.length = getEucliDis({ - x: ei.source.x, - y: ei.source.y - }, { - x: ei.target.x, - y: ei.target.y - }); - ej.length = getEucliDis({ - x: ej.source.x, - y: ej.source.y - }, { - x: ej.target.x, - y: ej.target.y - }); - var aScore = self2.getAngleScore(ei, ej); - var sScore = self2.getScaleScore(ei, ej); - var pScore = self2.getPositionScore(ei, ej); - var vScore = self2.getVisibilityScore(ei, ej); - return aScore * sScore * pScore * vScore; - }; - Bundling3.prototype.getAngleScore = function(ei, ej) { - var dotProduct = getDotProduct({ - x: ei.vx, - y: ei.vy - }, { - x: ej.vx, - y: ej.vy - }); - return dotProduct / (ei.length * ej.length); - }; - Bundling3.prototype.getScaleScore = function(ei, ej) { - var aLength = (ei.length + ej.length) / 2; - var score2 = 2 / (aLength / Math.min(ei.length, ej.length) + Math.max(ei.length, ej.length) / aLength); - return score2; - }; - Bundling3.prototype.getPositionScore = function(ei, ej) { - var aLength = (ei.length + ej.length) / 2; - var iMid = { - x: (ei.source.x + ei.target.x) / 2, - y: (ei.source.y + ei.target.y) / 2 - }; - var jMid = { - x: (ej.source.x + ej.target.x) / 2, - y: (ej.source.y + ej.target.y) / 2 - }; - var distance15 = getEucliDis(iMid, jMid); - return aLength / (aLength + distance15); - }; - Bundling3.prototype.getVisibilityScore = function(ei, ej) { - var vij = this.getEdgeVisibility(ei, ej); - var vji = this.getEdgeVisibility(ej, ei); - return vij < vji ? vij : vji; - }; - Bundling3.prototype.getEdgeVisibility = function(ei, ej) { - var ps = projectPointToEdge(ej.source, ei); - var pt = projectPointToEdge(ej.target, ei); - var pMid = { - x: (ps.x + pt.x) / 2, - y: (ps.y + pt.y) / 2 - }; - var iMid = { - x: (ei.source.x + ei.target.x) / 2, - y: (ei.source.y + ei.target.y) / 2 - }; - return Math.max(0, 1 - 2 * getEucliDis(pMid, iMid) / getEucliDis(ps, pt)); - }; - Bundling3.prototype.getEdgeForces = function(e4, eidx, divisions, lambda) { - var self2 = this; - var edgePoints = self2.get("edgePoints"); - var K2 = self2.get("K"); - var kp = K2 / (getEucliDis(e4.source, e4.target) * (divisions + 1)); - var edgePointForces = [{ - x: 0, - y: 0 - }]; - for (var i4 = 1; i4 < divisions; i4++) { - var force = { - x: 0, - y: 0 - }; - var spring = self2.getSpringForce({ - pre: edgePoints[eidx][i4 - 1], - cur: edgePoints[eidx][i4], - next: edgePoints[eidx][i4 + 1] - }, kp); - var electrostatic = self2.getElectrostaticForce(i4, eidx); - force.x = lambda * (spring.x + electrostatic.x); - force.y = lambda * (spring.y + electrostatic.y); - edgePointForces.push(force); - } - edgePointForces.push({ - x: 0, - y: 0 - }); - return edgePointForces; - }; - Bundling3.prototype.getSpringForce = function(divisions, kp) { - var x6 = divisions.pre.x + divisions.next.x - 2 * divisions.cur.x; - var y5 = divisions.pre.y + divisions.next.y - 2 * divisions.cur.y; - x6 *= kp; - y5 *= kp; - return { - x: x6, - y: y5 - }; - }; - Bundling3.prototype.getElectrostaticForce = function(pidx, eidx) { - var self2 = this; - var eps2 = self2.get("eps"); - var edgeBundles = self2.get("edgeBundles"); - var edgePoints = self2.get("edgePoints"); - var edgeBundle = edgeBundles[eidx]; - var resForce = { - x: 0, - y: 0 - }; - edgeBundle.forEach(function(eb) { - var force = { - x: edgePoints[eb][pidx].x - edgePoints[eidx][pidx].x, - y: edgePoints[eb][pidx].y - edgePoints[eidx][pidx].y - }; - if (Math.abs(force.x) > eps2 || Math.abs(force.y) > eps2) { - var length_1 = getEucliDis(edgePoints[eb][pidx], edgePoints[eidx][pidx]); - var diff2 = 1 / length_1; - resForce.x += force.x * diff2; - resForce.y += force.y * diff2; - } - }); - return resForce; - }; - Bundling3.prototype.isTicking = function() { - return this.get("ticking"); - }; - Bundling3.prototype.getSimulation = function() { - return this.get("forceSimulation"); - }; - Bundling3.prototype.destroy = function() { - if (this.get("ticking")) { - this.getSimulation().stop(); - } - _super.prototype.destroy.call(this); - }; - return Bundling3; -}(base_default18); -var bundling_default = Bundling; - -// node_modules/@antv/g6-plugin/es/fisheye/index.js -var import_util558 = __toModule(require_lib()); -var __extends9 = function() { - var _extendStatics = function extendStatics(d3, b10) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) { - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - } - }; - return _extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - _extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -var __assign8 = function() { - __assign8 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) { - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - } - return t4; - }; - return __assign8.apply(this, arguments); -}; -var DELTA = 0.05; -var lensDelegateStyle = { - stroke: "#000", - strokeOpacity: 0.8, - lineWidth: 2, - fillOpacity: 0.1, - fill: "#ccc" -}; -var Fisheye = function(_super) { - __extends9(Fisheye3, _super); - function Fisheye3(config) { - return _super.call(this, config) || this; - } - Fisheye3.prototype.getDefaultCfgs = function() { - return { - trigger: "mousemove", - d: 1.5, - r: 300, - delegateStyle: (0, import_util558.clone)(lensDelegateStyle), - showLabel: false, - maxD: 5, - minD: 0, - scaleRBy: "unset", - scaleDBy: "unset", - showDPercent: true - }; - }; - Fisheye3.prototype.getEvents = function() { - var events; - switch (this.get("trigger")) { - case "click": - events = { - click: "magnify" - }; - break; - case "drag": - events = { - click: "createDelegate" - }; - break; - default: - events = { - mousemove: "magnify" - }; - break; - } - return events; - }; - Fisheye3.prototype.init = function() { - var self2 = this; - var r4 = self2.get("r"); - self2.set("cachedMagnifiedModels", []); - self2.set("cachedOriginPositions", {}); - self2.set("r2", r4 * r4); - var d3 = self2.get("d"); - self2.set("molecularParam", (d3 + 1) * r4); - }; - Fisheye3.prototype.createDelegate = function(e4) { - var _this = this; - var self2 = this; - var lensDelegate = self2.get("delegate"); - if (!lensDelegate || lensDelegate.destroyed) { - self2.magnify(e4); - lensDelegate = self2.get("delegate"); - lensDelegate.on("dragstart", function(evt) { - self2.set("delegateCenterDiff", { - x: lensDelegate.attr("x") - evt.x, - y: lensDelegate.attr("y") - evt.y - }); - }); - lensDelegate.on("drag", function(evt) { - self2.magnify(evt); - }); - if (this.get("scaleDBy") === "wheel") { - lensDelegate.on("mousewheel", function(evt) { - _this.scaleDByWheel(evt); - }); - } - if (this.get("scaleRBy") === "wheel") { - lensDelegate.on("mousewheel", function(evt) { - self2.scaleRByWheel(evt); - }); - } - } - }; - Fisheye3.prototype.scaleRByWheel = function(e4) { - var self2 = this; - if (!e4 || !e4.originalEvent) - return; - if (e4.preventDefault) - e4.preventDefault(); - var graph = self2.get("graph"); - var ratio; - var lensDelegate = self2.get("delegate"); - var lensCenter = lensDelegate ? { - x: lensDelegate.attr("x"), - y: lensDelegate.attr("y") - } : void 0; - var mousePos = lensCenter || graph.getPointByClient(e4.clientX, e4.clientY); - if (e4.originalEvent.wheelDelta < 0) { - ratio = 1 - DELTA; - } else { - ratio = 1 / (1 - DELTA); - } - var maxR = self2.get("maxR"); - var minR = self2.get("minR"); - var r4 = self2.get("r"); - if (r4 > (maxR || graph.get("height")) && ratio > 1 || r4 < (minR || graph.get("height") * 0.05) && ratio < 1) { - ratio = 1; - } - r4 *= ratio; - self2.set("r", r4); - self2.set("r2", r4 * r4); - var d3 = self2.get("d"); - self2.set("molecularParam", (d3 + 1) * r4); - self2.set("delegateCenterDiff", void 0); - self2.magnify(e4, mousePos); - }; - Fisheye3.prototype.scaleRByDrag = function(e4) { - var self2 = this; - if (!e4) - return; - var dragPrePos = self2.get("dragPrePos"); - var graph = self2.get("graph"); - var ratio; - var mousePos = graph.getPointByClient(e4.clientX, e4.clientY); - if (e4.x - dragPrePos.x < 0) { - ratio = 1 - DELTA; - } else { - ratio = 1 / (1 - DELTA); - } - var maxR = self2.get("maxR"); - var minR = self2.get("minR"); - var r4 = self2.get("r"); - if (r4 > (maxR || graph.get("height")) && ratio > 1 || r4 < (minR || graph.get("height") * 0.05) && ratio < 1) { - ratio = 1; - } - r4 *= ratio; - self2.set("r", r4); - self2.set("r2", r4 * r4); - var d3 = self2.get("d"); - self2.set("molecularParam", (d3 + 1) * r4); - self2.magnify(e4, mousePos); - self2.set("dragPrePos", { - x: e4.x, - y: e4.y - }); - }; - Fisheye3.prototype.scaleDByWheel = function(evt) { - var self2 = this; - if (!evt && !evt.originalEvent) - return; - if (evt.preventDefault) - evt.preventDefault(); - var delta = 0; - if (evt.originalEvent.wheelDelta < 0) { - delta = -0.1; - } else { - delta = 0.1; - } - var d3 = self2.get("d"); - var newD = d3 + delta; - var maxD = self2.get("maxD"); - var minD = self2.get("minD"); - if (newD < maxD && newD > minD) { - self2.set("d", newD); - var r4 = self2.get("r"); - self2.set("molecularParam", (newD + 1) * r4); - var lensDelegate = self2.get("delegate"); - var lensCenter = lensDelegate ? { - x: lensDelegate.attr("x"), - y: lensDelegate.attr("y") - } : void 0; - self2.set("delegateCenterDiff", void 0); - self2.magnify(evt, lensCenter); - } - }; - Fisheye3.prototype.scaleDByDrag = function(e4) { - var self2 = this; - var dragPrePos = self2.get("dragPrePos"); - var delta = e4.x - dragPrePos.x > 0 ? 0.1 : -0.1; - var d3 = self2.get("d"); - var newD = d3 + delta; - var maxD = self2.get("maxD"); - var minD = self2.get("minD"); - if (newD < maxD && newD > minD) { - self2.set("d", newD); - var r4 = self2.get("r"); - self2.set("molecularParam", (newD + 1) * r4); - self2.magnify(e4); - } - self2.set("dragPrePos", { - x: e4.x, - y: e4.y - }); - }; - Fisheye3.prototype.magnify = function(e4, mousePos) { - var self2 = this; - self2.restoreCache(); - var graph = self2.get("graph"); - var cachedMagnifiedModels = self2.get("cachedMagnifiedModels"); - var cachedOriginPositions = self2.get("cachedOriginPositions"); - var showLabel = self2.get("showLabel"); - var r4 = self2.get("r"); - var r22 = self2.get("r2"); - var d3 = self2.get("d"); - var molecularParam = self2.get("molecularParam"); - var nodes = graph.getNodes(); - var nodeLength = nodes.length; - var mCenter = mousePos ? { - x: mousePos.x, - y: mousePos.y - } : { - x: e4.x, - y: e4.y - }; - if (self2.get("dragging") && (self2.get("trigger") === "mousemove" || self2.get("trigger") === "click")) { - mCenter = self2.get("cacheCenter"); - } - var delegateCenterDiff = self2.get("delegateCenterDiff"); - if (delegateCenterDiff) { - mCenter.x += delegateCenterDiff.x; - mCenter.y += delegateCenterDiff.y; - } - self2.updateDelegate(mCenter, r4); - for (var i4 = 0; i4 < nodeLength; i4++) { - var model = nodes[i4].getModel(); - var x6 = model.x, y5 = model.y; - if (isNaN(x6) || isNaN(y5)) - continue; - var dist22 = (x6 - mCenter.x) * (x6 - mCenter.x) + (y5 - mCenter.y) * (y5 - mCenter.y); - if (!isNaN(dist22) && dist22 < r22 && dist22 !== 0) { - var dist4 = Math.sqrt(dist22); - var magnifiedDist = molecularParam * dist4 / (d3 * dist4 + r4); - var cos3 = (x6 - mCenter.x) / dist4; - var sin3 = (y5 - mCenter.y) / dist4; - model.x = cos3 * magnifiedDist + mCenter.x; - model.y = sin3 * magnifiedDist + mCenter.y; - if (!cachedOriginPositions[model.id]) { - cachedOriginPositions[model.id] = { - x: x6, - y: y5, - texts: [] - }; - } - cachedMagnifiedModels.push(model); - if (showLabel && 2 * dist4 < r4) { - var node = nodes[i4]; - var nodeGroup = node.getContainer(); - var shapes = nodeGroup.getChildren(); - var shapeLength = shapes.length; - for (var j4 = 0; j4 < shapeLength; j4++) { - var shape = shapes[j4]; - if (shape.get("type") === "text") { - cachedOriginPositions[model.id].texts.push({ - visible: shape.get("visible"), - shape - }); - shape.set("visible", true); - } - } - } - } - } - graph.refreshPositions(); - }; - Fisheye3.prototype.restoreCache = function() { - var self2 = this; - var cachedMagnifiedModels = self2.get("cachedMagnifiedModels"); - var cachedOriginPositions = self2.get("cachedOriginPositions"); - var cacheLength = cachedMagnifiedModels.length; - for (var i4 = 0; i4 < cacheLength; i4++) { - var node = cachedMagnifiedModels[i4]; - var id = node.id; - var ori = cachedOriginPositions[id]; - node.x = ori.x; - node.y = ori.y; - var textLength = ori.texts.length; - for (var j4 = 0; j4 < textLength; j4++) { - var text = ori.texts[j4]; - text.shape.set("visible", text.visible); - } - } - self2.set("cachedMagnifiedModels", []); - self2.set("cachedOriginPositions", {}); - }; - Fisheye3.prototype.updateParams = function(cfg) { - var self2 = this; - var r4 = cfg.r, d3 = cfg.d, trigger = cfg.trigger, minD = cfg.minD, maxD = cfg.maxD, minR = cfg.minR, maxR = cfg.maxR, scaleDBy = cfg.scaleDBy, scaleRBy = cfg.scaleRBy; - if (!isNaN(cfg.r)) { - self2.set("r", r4); - self2.set("r2", r4 * r4); - } - if (!isNaN(d3)) { - self2.set("d", d3); - } - if (!isNaN(maxD)) { - self2.set("maxD", maxD); - } - if (!isNaN(minD)) { - self2.set("minD", minD); - } - if (!isNaN(maxR)) { - self2.set("maxR", maxR); - } - if (!isNaN(minR)) { - self2.set("minR", minR); - } - var nd = self2.get("d"); - var nr = self2.get("r"); - self2.set("molecularParam", (nd + 1) * nr); - if (trigger === "mousemove" || trigger === "click" || trigger === "drag") { - self2.set("trigger", trigger); - } - if (scaleDBy === "drag" || scaleDBy === "wheel" || scaleDBy === "unset") { - self2.set("scaleDBy", scaleDBy); - self2.get("delegate").remove(); - self2.get("delegate").destroy(); - var dPercentText = self2.get("dPercentText"); - if (dPercentText) { - dPercentText.remove(); - dPercentText.destroy(); - } - } - if (scaleRBy === "drag" || scaleRBy === "wheel" || scaleRBy === "unset") { - self2.set("scaleRBy", scaleRBy); - self2.get("delegate").remove(); - self2.get("delegate").destroy(); - var dPercentText = self2.get("dPercentText"); - if (dPercentText) { - dPercentText.remove(); - dPercentText.destroy(); - } - } - }; - Fisheye3.prototype.updateDelegate = function(mCenter, r4) { - var _this = this; - var self2 = this; - var graph = self2.get("graph"); - var lensDelegate = self2.get("delegate"); - if (!lensDelegate || lensDelegate.destroyed) { - var parent_1 = graph.get("group"); - var attrs = self2.get("delegateStyle") || lensDelegateStyle; - lensDelegate = parent_1.addShape("circle", { - attrs: __assign8({ - r: r4 / 1.5, - x: mCenter.x, - y: mCenter.y - }, attrs), - name: "lens-shape", - draggable: true - }); - if (this.get("trigger") !== "drag") { - if (this.get("scaleRBy") === "wheel") { - lensDelegate.on("mousewheel", function(evt) { - self2.scaleRByWheel(evt); - }); - } else if (this.get("scaleRBy") === "drag") { - lensDelegate.on("dragstart", function(e4) { - self2.set("dragging", true); - self2.set("cacheCenter", { - x: e4.x, - y: e4.y - }); - self2.set("dragPrePos", { - x: e4.x, - y: e4.y - }); - }); - lensDelegate.on("drag", function(evt) { - self2.scaleRByDrag(evt); - }); - lensDelegate.on("dragend", function(e4) { - self2.set("dragging", false); - }); - } - if (this.get("scaleDBy") === "wheel") { - lensDelegate.on("mousewheel", function(evt) { - _this.scaleDByWheel(evt); - }); - } else if (this.get("scaleDBy") === "drag") { - lensDelegate.on("dragstart", function(evt) { - self2.set("dragging", true); - self2.set("cacheCenter", { - x: evt.x, - y: evt.y - }); - self2.set("dragPrePos", { - x: evt.x, - y: evt.y - }); - }); - lensDelegate.on("drag", function(evt) { - _this.scaleDByDrag(evt); - }); - lensDelegate.on("dragend", function(evt) { - self2.set("dragging", false); - }); - } - } - } else { - lensDelegate.attr({ - x: mCenter.x, - y: mCenter.y, - r: r4 / 1.5 - }); - } - if (self2.get("showDPercent")) { - var percent2 = Math.round((self2.get("d") - self2.get("minD")) / (self2.get("maxD") - self2.get("minD")) * 100); - var dPercentText = self2.get("dPercentText"); - var textY = mCenter.y + r4 / 1.5 + 16; - if (!dPercentText || dPercentText.destroyed) { - var parent_2 = graph.get("group"); - dPercentText = parent_2.addShape("text", { - attrs: { - text: "".concat(percent2, "%"), - x: mCenter.x, - y: textY, - fill: "#aaa", - stroke: "#fff", - lineWidth: 1, - fontSize: 12 - } - }); - self2.set("dPercentText", dPercentText); - } else { - dPercentText.attr({ - text: "".concat(percent2, "%"), - x: mCenter.x, - y: textY - }); - } - } - self2.set("delegate", lensDelegate); - }; - Fisheye3.prototype.clear = function() { - var graph = this.get("graph"); - this.restoreCache(); - graph.refreshPositions(); - var lensDelegate = this.get("delegate"); - if (lensDelegate && !lensDelegate.destroyed) { - lensDelegate.remove(); - lensDelegate.destroy(); - } - var dPercentText = this.get("dPercentText"); - if (dPercentText && !dPercentText.destroyed) { - dPercentText.remove(); - dPercentText.destroy(); - } - }; - Fisheye3.prototype.destroy = function() { - this.clear(); - }; - return Fisheye3; -}(base_default18); -var fisheye_default = Fisheye; - -// node_modules/@antv/g6-plugin/es/toolBar/index.js -var import_util559 = __toModule(require_lib()); -var import_insert_css2 = __toModule(require_insert_css()); -var __extends10 = function() { - var _extendStatics = function extendStatics(d3, b10) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) { - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - } - }; - return _extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - _extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -var DELTA2 = 0.05; -typeof document !== "undefined" && (0, import_insert_css2.default)("\n .g6-component-toolbar {\n position: absolute;\n list-style-type: none;\n padding: 6px;\n left: 0px;\n top: 0px;\n background-color: rgba(255, 255, 255, 0.9);\n border: 1px solid #e2e2e2;\n border-radius: 4px;\n font-size: 12px;\n color: #545454;\n margin: 0;\n }\n .g6-component-toolbar li {\n float: left;\n text-align: center;\n width: 35px;\n height: 24px;\n cursor: pointer;\n list-style-type:none;\n list-style: none;\n margin-left: 0px;\n }\n .g6-component-toolbar li .icon {\n opacity: 0.7;\n }\n .g6-component-toolbar li .icon:hover {\n opacity: 1;\n }\n"); -var getEventPath = function getEventPath2(evt) { - if (!evt) { - return []; - } - if (evt.composedPath) { - return evt.composedPath(); - } - var path = []; - var el = evt.target; - while (el) { - path.push(el); - if (el.tagName === "HTML") { - path.push(document, window); - return path; - } - el = el.parentElement; - } - return path; -}; -var ToolBar = function(_super) { - __extends10(ToolBar3, _super); - function ToolBar3(config) { - return _super.call(this, config) || this; - } - ToolBar3.prototype.getDefaultCfgs = function() { - return { - handleClick: void 0, - getContent: function getContent(graph) { - return ` +`);var Zhe=function(r){Khe(e,r);function e(t){return r.call(this,t)||this}return e.prototype.getDefaultCfgs=function(){return{offsetX:6,offsetY:6,handleMenuClick:void 0,getContent:function(n){return` +
        +
      • \u83DC\u5355\u98791
      • +
      • \u83DC\u5355\u98792
      • +
      + `},shouldBegin:function(n){return!0},onHide:function(){return!0},itemTypes:["node","edge","combo"],trigger:"contextmenu"}},e.prototype.getEvents=function(){return this.get("trigger")==="click"?{click:"onMenuShow"}:{contextmenu:"onMenuShow"}},e.prototype.init=function(){var t=this.get("className"),n=en("
      "));yr(n,{top:"0px",position:"absolute",visibility:"hidden"});var i=this.get("container");i||(i=this.get("graph").get("container")),(0,VN.isString)(i)&&(i=document.getElementById(i)),i.appendChild(n),this.set("menu",n)},e.prototype.onMenuShow=function(t){var n=this;t.preventDefault();var i=this.get("itemTypes");if(t.item){if(t.item&&t.item.getType&&i.indexOf(t.item.getType())===-1){n.onMenuHide();return}}else if(i.indexOf("canvas")===-1){n.onMenuHide();return}var a=this.get("shouldBegin");if(!!a(t)){var o=this.get("menu"),s=this.get("getContent"),l=this.get("graph"),u=s(t,l);(0,VN.isString)(u)?o.innerHTML=u:o.innerHTML=u.outerHTML,this.removeMenuEventListener();var f=this.get("handleMenuClick");if(f){var c=function(I){f(I.target,t.item,l)};this.set("handleMenuClickWrapper",c),o.addEventListener("click",c)}var h=l.get("width"),d=l.get("height"),p=o.getBoundingClientRect(),v=this.get("offsetX")||0,m=this.get("offsetY")||0,g=l.getContainer().offsetTop,x=l.getContainer().offsetLeft,b=t.canvasX+x+v,S=t.canvasY+g+m;b+p.width>h&&(b=t.canvasX-p.width-v+x),S+p.height>d&&(S=t.canvasY-p.height-m+g),yr(o,{top:"".concat(S,"px"),left:"".concat(b,"px"),visibility:"visible"});var C=this.get("trigger")==="click",w=function(I){if(C){C=!1;return}n.onMenuHide()};document.body.addEventListener("click",w),this.set("handler",w)}},e.prototype.removeMenuEventListener=function(){var t=this.get("handleMenuClickWrapper"),n=this.get("handler");if(t){var i=this.get("menu");i.removeEventListener("click",t),this.set("handleMenuClickWrapper",null)}n&&document.body.removeEventListener("click",n)},e.prototype.onMenuHide=function(){var t=this.get("menu");t&&yr(t,{visibility:"hidden"}),this.removeMenuEventListener()},e.prototype.destroy=function(){var t=this.get("menu");if(this.removeMenuEventListener(),t){var n=this.get("container");n||(n=this.get("graph").get("container")),(0,VN.isString)(n)&&(n=document.getElementById(n)),n.removeChild(t)}},e}(ia),Swt=Zhe;var Ql=U(q());var $he=function(){var r=function(t,n){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,a){i.__proto__=a}||function(i,a){for(var o in a)Object.prototype.hasOwnProperty.call(a,o)&&(i[o]=a[o])},r(t,n)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),cX=function(){return cX=Object.assign||function(r){for(var e,t=1,n=arguments.length;t + `)),u=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,f=0,c=0,h=!1,d=0,p=0,v=0,m=0,g=0,x=0;l.addEventListener("dragstart",function(b){var S,C;if(b.dataTransfer){var w=new Image;w.src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' %3E%3Cpath /%3E%3C/svg%3E",(C=(S=b.dataTransfer).setDragImage)===null||C===void 0||C.call(S,w,0,0);try{b.dataTransfer.setData("text/html","view-port-minimap")}catch(I){b.dataTransfer.setData("text","view-port-minimap")}}if(n.refresh=!1,b.target===l){var A=l.style;d=parseInt(A.left,10),p=parseInt(A.top,10),v=parseInt(A.width,10),m=parseInt(A.height,10),!(v>i[0]||m>i[1])&&(x=a.getZoom(),g=t.get("ratio"),h=!0,f=b.clientX,c=b.clientY)}},!1),l.addEventListener(u?"dragover":"drag",function(b){if(!(!h||(0,Ql.isNil)(b.clientX)||(0,Ql.isNil)(b.clientY))){var S=f-b.clientX,C=c-b.clientY;(d-S<0||d-S+v>=i[0])&&(S=0),(p-C<0||p-C+m>=i[1])&&(C=0),d-=S,p-=C,yr(l,{left:"".concat(d,"px"),top:"".concat(p,"px")}),a.translate(S*x/g,C*x/g),f=b.clientX,c=b.clientY}},!1),l.addEventListener("dragend",function(){h=!1,n.refresh=!0},!1),this.set("viewport",l),s.appendChild(l)}},e.prototype.updateViewport=function(){if(!this.destroyed){var t=this.get("ratio"),n=this.get("dx"),i=this.get("dy"),a=this.get("totaldx"),o=this.get("totaldy"),s=this.get("graph"),l=this.get("size"),u=s.get("width"),f=s.get("height"),c=s.getPointByCanvas(0,0),h=s.getPointByCanvas(u,f),d=this.get("viewport");d||this.initViewport();var p=(h.x-c.x)*t,v=(h.y-c.y)*t,m=c.x*t+a,g=c.y*t+o,x=m+p,b=g+v;m<0&&(p+=m,m=0),x>l[0]&&(p=p-(x-l[0])),g<0&&(v+=g,g=0),b>l[1]&&(v=v-(b-l[1])),this.set("ratio",t);var S="".concat(m,"px"),C="".concat(g,"px");yr(d,{left:S,top:C,width:"".concat(p,"px"),height:"".concat(v,"px")})}},e.prototype.updateGraphShapes=function(){var t=this._cfgs.graph,n=this.get("canvas"),i=t.get("group");if(!i.destroyed){var a=i.clone();a.resetMatrix(),n.clear(),n.add(a);var o=t.get("renderer");o===wwt&&this.updateVisible(a)}},e.prototype.updateVisible=function(t){var n=this;if(!t.isGroup()&&!t.get("visible"))t.hide();else{var i=t.get("children");if(!i||!i.length)return;i.forEach(function(a){a.get("visible")||a.hide(),n.updateVisible(a)})}},e.prototype.updateKeyShapes=function(){var t=this,n=this._cfgs.graph,i=this.get("canvas"),a=i.get("children")[0]||i.addGroup();(0,Ql.each)(n.getEdges(),function(l){t.updateOneEdgeKeyShape(l,a)}),(0,Ql.each)(n.getNodes(),function(l){t.updateOneNodeKeyShape(l,a)});var o=n.getCombos();if(o&&o.length){var s=a.find(function(l){return l.get("name")==="comboGroup"})||a.addGroup({name:"comboGroup"});setTimeout(function(){t.destroyed||((0,Ql.each)(o,function(l){t.updateOneComboKeyShape(l,s)}),s==null||s.sort(),s==null||s.toBack(),t.updateCanvas())},250)}this.clearDestroyedShapes()},e.prototype.updateOneComboKeyShape=function(t,n){if(!this.destroyed){var i=this.get("itemMap")||{},a=i[t.get("id")],o=t.getBBox(),s=t.get("keyShape").clone(),l=s.attr(),u={x:o.centerX,y:o.centerY};a?u=Object.assign(l,u):(a=s,n.add(a));var f=a.get("type");(f==="rect"||f==="image")&&(u.x=o.minX,u.y=o.minY),a.attr(u),t.isVisible()?a.show():a.hide(),a.exist=!0;var c=t.getModel().depth;isNaN(c)||a.set("zIndex",c),i[t.get("id")]=a,this.set("itemMap",i)}},e.prototype.updateOneNodeKeyShape=function(t,n){var i=this.get("itemMap")||{},a=i[t.get("id")],o=t.getBBox(),s=t.get("keyShape").clone(),l=s.attr(),u={x:o.centerX,y:o.centerY};a?u=Object.assign(l,u):(a=s,n.add(a));var f=a.get("type");(f==="rect"||f==="image")&&(u.x=o.minX,u.y=o.minY),a.attr(u),t.isVisible()?a.show():a.hide(),a.exist=!0;var c=t.getModel().depth;isNaN(c)||a.set("zIndex",c),i[t.get("id")]=a,this.set("itemMap",i)},e.prototype.updateDelegateShapes=function(){var t=this,n=this._cfgs.graph,i=this.get("canvas"),a=i.get("children")[0]||i.addGroup();(0,Ql.each)(n.getEdges(),function(l){t.updateOneEdgeKeyShape(l,a)}),(0,Ql.each)(n.getNodes(),function(l){t.updateOneNodeDelegateShape(l,a)});var o=n.getCombos();if(o&&o.length){var s=a.find(function(l){return l.get("name")==="comboGroup"})||a.addGroup({name:"comboGroup"});setTimeout(function(){t.destroyed||((0,Ql.each)(o,function(l){t.updateOneComboKeyShape(l,s)}),s==null||s.sort(),s==null||s.toBack(),t.updateCanvas())},250)}this.clearDestroyedShapes()},e.prototype.clearDestroyedShapes=function(){var t=this.get("itemMap")||{},n=Object.keys(t);if(!(!n||n.length===0))for(var i=n.length-1;i>=0;i--){var a=t[n[i]],o=a.exist;a.exist=!1,o||(a.remove(),delete t[n[i]])}},e.prototype.updateOneEdgeKeyShape=function(t,n){var i=this.get("itemMap")||{},a=i[t.get("id")];if(a){var o=t.get("keyShape").attr("path");a.attr("path",o)}else a=t.get("keyShape").clone(),n.add(a);t.isVisible()?a.show():a.hide(),a.exist=!0,i[t.get("id")]=a,this.set("itemMap",i)},e.prototype.updateOneNodeDelegateShape=function(t,n){var i=this.get("delegateStyle"),a=this.get("itemMap")||{},o=a[t.get("id")],s=t.getBBox();if(o){var l={x:s.minX,y:s.minY,width:s.width,height:s.height};o.attr(l)}else o=n.addShape("rect",{attrs:cX({x:s.minX,y:s.minY,width:s.width,height:s.height},i),name:"minimap-node-shape"});t.isVisible()?o.show():o.hide(),o.exist=!0,a[t.get("id")]=o,this.set("itemMap",a)},e.prototype.init=function(){this.initContainer(),this.get("graph").on("afterupdateitem",this.handleUpdateCanvas),this.get("graph").on("afteritemstatechange",this.handleUpdateCanvas),this.get("graph").on("afteradditem",this.handleUpdateCanvas),this.get("graph").on("afterremoveitem",this.handleUpdateCanvas),this.get("graph").on("afterrender",this.handleUpdateCanvas),this.get("graph").on("afterlayout",this.handleUpdateCanvas)},e.prototype.initContainer=function(){var t=this,n=t.get("graph"),i=t.get("size"),a=t.get("className"),o=t.get("container"),s=en("
      "));(0,Ql.isString)(o)&&(o=document.getElementById(o)),o?o.appendChild(s):n.get("container").appendChild(s),t.set("container",s);var l=en('
      ');s.appendChild(l),l.addEventListener("dragenter",function(c){c.preventDefault()}),l.addEventListener("dragover",function(c){c.preventDefault()});var u,f=n.get("renderer");f===wwt?u=new Ah({container:l,width:i[0],height:i[1]}):u=new Bl({container:l,width:i[0],height:i[1]}),t.set("canvas",u),t.updateCanvas()},e.prototype.updateCanvas=function(){if(!this.destroyed){var t=this.get("refresh");if(!!t){var n=this.get("graph");if(!n.get("destroyed")){this.get("viewportChange")&&(this.set("viewportChange",!1),this.updateViewport());var i=this.get("size"),a=this.get("canvas"),o=this.get("type"),s=this.get("padding");if(!a.destroyed){switch(o){case Jhe:this.updateGraphShapes();break;case tde:this.updateKeyShapes();break;case ede:this.updateDelegateShapes();break;default:break}var l=a.get("children")[0];if(!!l){l.resetMatrix();var u=l.getCanvasBBox(),f=n.get("canvas").getCanvasBBox(),c=n.getZoom()||1,h=f.width/c,d=f.height/c;Number.isFinite(u.width)&&(h=Cwt(u.width,h),d=Cwt(u.height,d)),h+=2*s,d+=2*s;var p=Math.min(i[0]/h,i[1]/d),v=[1,0,0,0,1,0,0,0,1],m=0,g=0;Number.isFinite(u.minX)&&(m=-u.minX),Number.isFinite(u.minY)&&(g=-u.minY);var x=(i[0]-(h-2*s)*p)/2,b=(i[1]-(d-2*s)*p)/2;v=Qhe(v,[["t",m,g],["s",p,p],["t",x,b]]),l.setMatrix(v),this.set("ratio",p),this.set("totaldx",x+m*p),this.set("totaldy",b+g*p),this.set("dx",x),this.set("dy",b),this.updateViewport()}}}}}},e.prototype.getCanvas=function(){return this.get("canvas")},e.prototype.getViewport=function(){return this.get("viewport")},e.prototype.getContainer=function(){return this.get("container")},e.prototype.destroy=function(){this.get("canvas").destroy();var t=this.get("container");t.parentNode.removeChild(t)},e}(ia),Ewt=rde;var nde=function(){var r=function(t,n){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,a){i.__proto__=a}||function(i,a){for(var o in a)Object.prototype.hasOwnProperty.call(a,o)&&(i[o]=a[o])},r(t,n)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}();function dd(r,e,t){var n=r.x-e.x,i=r.y-e.y;return!t||Math.abs(n)>t||Math.abs(i)>t?Math.sqrt(n*n+i*i):t}function ide(r,e){return r.x*e.x+r.y*e.y}function Awt(r,e){var t=(e.source.y-e.target.y)/(e.source.x-e.target.x),n=(t*t*e.source.x+t*(r.y-e.source.y)+r.x)/(t*t+1),i=t*(n-e.source.x)+e.source.y;return{x:n,y:i}}var ade=function(r){nde(e,r);function e(t){return r.call(this,t)||this}return e.prototype.getDefaultCfgs=function(){return{edgeBundles:[],edgePoints:[],K:.1,lambda:.1,divisions:1,divRate:2,cycles:6,iterations:90,iterRate:.6666667,bundleThreshold:.6,eps:1e-6,onLayoutEnd:function(){},onTick:function(){}}},e.prototype.init=function(){var t=this.get("graph"),n=this.get("onTick"),i=function(){n&&n(),t.refreshPositions()};this.set("tick",i)},e.prototype.bundling=function(t){var n=this;if(n.set("data",t),!n.isTicking()){var i=t.edges||[],a=t.nodes||[],o={},s=!1;if(a.forEach(function(S){(S.x===null||!S.y===null||S.x===void 0||!S.y===void 0)&&(s=!0),o[S.id]=S}),s)throw new Error("please layout the graph or assign x and y for nodes first");n.set("nodeIdMap",o);var l=n.get("divisions"),u=n.get("divRate"),f=n.divideEdges(l);n.set("edgePoints",f);var c=n.getEdgeBundles();n.set("edgeBundles",c);for(var h=n.get("cycles"),d=n.get("iterations"),p=n.get("iterRate"),v=n.get("lambda"),m=0;md;){var x=d/g,b={x:o[l][m-1].x,y:o[l][m-1].y};b.x+=x*(v.x-o[l][m-1].x),b.y+=x*(v.y-o[l][m-1].y),p.push(b),g-=d,d=h}d-=g}}),p.push({x:f.x,y:f.y}),o[l]=p}}),o},e.prototype.getEdgeLength=function(t){var n=0;return t.forEach(function(i,a){a!==0&&(n+=dd(i,t[a-1]))}),n},e.prototype.getEdgeBundles=function(){var t=this,n=t.get("data"),i=n.edges||[],a=t.get("bundleThreshold"),o=t.get("nodeIdMap"),s=t.get("edgeBundles");return s||(s=[]),i.forEach(function(l,u){(!s[u]||s[u]===void 0)&&(s[u]=[])}),i.forEach(function(l,u){var f=o[l.source],c=o[l.target];i.forEach(function(h,d){if(!(d<=u)){var p=o[h.source],v=o[h.target],m=t.getBundleScore({source:f,target:c},{source:p,target:v});m>=a&&(s[u].push(d),s[d].push(u))}})}),s},e.prototype.getBundleScore=function(t,n){var i=this;t.vx=t.target.x-t.source.x,t.vy=t.target.y-t.source.y,n.vx=n.target.x-n.source.x,n.vy=n.target.y-n.source.y,t.length=dd({x:t.source.x,y:t.source.y},{x:t.target.x,y:t.target.y}),n.length=dd({x:n.source.x,y:n.source.y},{x:n.target.x,y:n.target.y});var a=i.getAngleScore(t,n),o=i.getScaleScore(t,n),s=i.getPositionScore(t,n),l=i.getVisibilityScore(t,n);return a*o*s*l},e.prototype.getAngleScore=function(t,n){var i=ide({x:t.vx,y:t.vy},{x:n.vx,y:n.vy});return i/(t.length*n.length)},e.prototype.getScaleScore=function(t,n){var i=(t.length+n.length)/2,a=2/(i/Math.min(t.length,n.length)+Math.max(t.length,n.length)/i);return a},e.prototype.getPositionScore=function(t,n){var i=(t.length+n.length)/2,a={x:(t.source.x+t.target.x)/2,y:(t.source.y+t.target.y)/2},o={x:(n.source.x+n.target.x)/2,y:(n.source.y+n.target.y)/2},s=dd(a,o);return i/(i+s)},e.prototype.getVisibilityScore=function(t,n){var i=this.getEdgeVisibility(t,n),a=this.getEdgeVisibility(n,t);return ia||Math.abs(c.y)>a){var h=dd(s[f][t],s[n][t]),d=1/h;u.x+=c.x*d,u.y+=c.y*d}}),u},e.prototype.isTicking=function(){return this.get("ticking")},e.prototype.getSimulation=function(){return this.get("forceSimulation")},e.prototype.destroy=function(){this.get("ticking")&&this.getSimulation().stop(),r.prototype.destroy.call(this)},e}(ia),Mwt=ade;var Twt=U(q());var ode=function(){var r=function(t,n){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,a){i.__proto__=a}||function(i,a){for(var o in a)Object.prototype.hasOwnProperty.call(a,o)&&(i[o]=a[o])},r(t,n)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),hX=function(){return hX=Object.assign||function(r){for(var e,t=1,n=arguments.length;t(u||i.get("height"))&&a>1||c<(f||i.get("height")*.05)&&a<1)&&(a=1),c*=a,n.set("r",c),n.set("r2",c*c);var h=n.get("d");n.set("molecularParam",(h+1)*c),n.set("delegateCenterDiff",void 0),n.magnify(t,l)}},e.prototype.scaleRByDrag=function(t){var n=this;if(!!t){var i=n.get("dragPrePos"),a=n.get("graph"),o,s=a.getPointByClient(t.clientX,t.clientY);t.x-i.x<0?o=1-HN:o=1/(1-HN);var l=n.get("maxR"),u=n.get("minR"),f=n.get("r");(f>(l||a.get("height"))&&o>1||f<(u||a.get("height")*.05)&&o<1)&&(o=1),f*=o,n.set("r",f),n.set("r2",f*f);var c=n.get("d");n.set("molecularParam",(c+1)*f),n.magnify(t,s),n.set("dragPrePos",{x:t.x,y:t.y})}},e.prototype.scaleDByWheel=function(t){var n=this;if(!(!t&&!t.originalEvent)){t.preventDefault&&t.preventDefault();var i=0;t.originalEvent.wheelDelta<0?i=-.1:i=.1;var a=n.get("d"),o=a+i,s=n.get("maxD"),l=n.get("minD");if(ol){n.set("d",o);var u=n.get("r");n.set("molecularParam",(o+1)*u);var f=n.get("delegate"),c=f?{x:f.attr("x"),y:f.attr("y")}:void 0;n.set("delegateCenterDiff",void 0),n.magnify(t,c)}}},e.prototype.scaleDByDrag=function(t){var n=this,i=n.get("dragPrePos"),a=t.x-i.x>0?.1:-.1,o=n.get("d"),s=o+a,l=n.get("maxD"),u=n.get("minD");if(su){n.set("d",s);var f=n.get("r");n.set("molecularParam",(s+1)*f),n.magnify(t)}n.set("dragPrePos",{x:t.x,y:t.y})},e.prototype.magnify=function(t,n){var i=this;i.restoreCache();var a=i.get("graph"),o=i.get("cachedMagnifiedModels"),s=i.get("cachedOriginPositions"),l=i.get("showLabel"),u=i.get("r"),f=i.get("r2"),c=i.get("d"),h=i.get("molecularParam"),d=a.getNodes(),p=d.length,v=n?{x:n.x,y:n.y}:{x:t.x,y:t.y};i.get("dragging")&&(i.get("trigger")==="mousemove"||i.get("trigger")==="click")&&(v=i.get("cacheCenter"));var m=i.get("delegateCenterDiff");m&&(v.x+=m.x,v.y+=m.y),i.updateDelegate(v,u);for(var g=0;g
    • @@ -137699,15133 +743,36 @@ var ToolBar = function(_super) {
    • - `; - }, - zoomSensitivity: 2 - }; - }; - ToolBar3.prototype.init = function() { - var _this = this; - var graph = this.get("graph"); - var getContent = this.get("getContent"); - var toolBar = getContent(graph); - var toolBarDOM = toolBar; - if ((0, import_util559.isString)(toolBar)) { - toolBarDOM = createDom(toolBar); - } - var className = this.get("className"); - toolBarDOM.setAttribute("class", className || "g6-component-toolbar"); - var container2 = this.get("container"); - if (!container2) { - container2 = this.get("graph").get("container"); - } - if ((0, import_util559.isString)(container2)) { - container2 = document.getElementById(container2); - } - container2.appendChild(toolBarDOM); - this.set("toolBar", toolBarDOM); - var handleClick = this.get("handleClick"); - toolBarDOM.addEventListener("click", function(evt) { - var current = getEventPath(evt).filter(function(p4) { - return p4.nodeName === "LI"; - }); - if (current.length === 0) { - return; - } - var code = current[0].getAttribute("code"); - if (!code) { - return; - } - if (handleClick) { - handleClick(code, graph); - } else { - _this.handleDefaultOperator(code, graph); - } - }); - var pos = this.get("position"); - if (pos) { - modifyCSS(toolBarDOM, { - top: "".concat(pos.y, "px"), - left: "".concat(pos.x, "px") - }); - } - this.bindUndoRedo(); - }; - ToolBar3.prototype.bindUndoRedo = function() { - var graph = this.get("graph"); - var undoDom = document.querySelector('.g6-component-toolbar li[code="undo"]'); - var undoDomIcon = document.querySelector('.g6-component-toolbar li[code="undo"] svg'); - var redoDom = document.querySelector('.g6-component-toolbar li[code="redo"]'); - var redoDomIcon = document.querySelector('.g6-component-toolbar li[code="redo"] svg'); - if (!undoDom || !undoDomIcon || !redoDom || !redoDomIcon) { - return; - } - graph.on("stackchange", function(evt) { - var undoStack = evt.undoStack, redoStack = evt.redoStack; - var undoStackLen = undoStack.length; - var redoStackLen = redoStack.length; - if (undoStackLen === 1) { - undoDom.setAttribute("style", "cursor: not-allowed"); - undoDomIcon.setAttribute("style", "opacity: 0.4"); - } else { - undoDom.removeAttribute("style"); - undoDomIcon.removeAttribute("style"); - } - if (redoStackLen === 0) { - redoDom.setAttribute("style", "cursor: not-allowed"); - redoDomIcon.setAttribute("style", "opacity: 0.4"); - } else { - redoDom.removeAttribute("style"); - redoDomIcon.removeAttribute("style"); - } - }); - }; - ToolBar3.prototype.undo = function() { - var graph = this.get("graph"); - var undoStack = graph.getUndoStack(); - if (!undoStack || undoStack.length === 1) { - return; - } - var currentData = undoStack.pop(); - if (currentData) { - var action = currentData.action; - graph.pushStack(action, (0, import_util559.clone)(currentData.data), "redo"); - var data_1 = currentData.data.before; - if (action === "add") { - data_1 = currentData.data.after; - } - if (!data_1) - return; - switch (action) { - case "visible": { - Object.keys(data_1).forEach(function(key) { - var array = data_1[key]; - if (!array) - return; - array.forEach(function(model) { - var item = graph.findById(model.id); - if (model.visible) { - graph.showItem(item, false); - } else { - graph.hideItem(item, false); - } - }); - }); - break; - } - case "render": - case "update": - Object.keys(data_1).forEach(function(key) { - var array = data_1[key]; - if (!array) - return; - array.forEach(function(model) { - graph.updateItem(model.id, model, false); - }); - }); - break; - case "changedata": - graph.changeData(data_1, false); - break; - case "delete": { - Object.keys(data_1).forEach(function(key) { - var array = data_1[key]; - if (!array) - return; - array.forEach(function(model) { - var itemType = model.itemType; - delete model.itemType; - graph.addItem(itemType, model, false); - }); - }); - break; - } - case "add": - Object.keys(data_1).forEach(function(key) { - var array = data_1[key]; - if (!array) - return; - array.forEach(function(model) { - graph.removeItem(model.id, false); - }); - }); - break; - case "updateComboTree": - Object.keys(data_1).forEach(function(key) { - var array = data_1[key]; - if (!array) - return; - array.forEach(function(model) { - graph.updateComboTree(model.id, model.parentId, false); - }); - }); - break; - default: - } - } - }; - ToolBar3.prototype.redo = function() { - var graph = this.get("graph"); - var redoStack = graph.getRedoStack(); - if (!redoStack || redoStack.length === 0) { - return; - } - var currentData = redoStack.pop(); - if (currentData) { - var action = currentData.action; - var data_2 = currentData.data.after; - graph.pushStack(action, (0, import_util559.clone)(currentData.data)); - if (action === "delete") { - data_2 = currentData.data.before; - } - if (!data_2) - return; - switch (action) { - case "visible": { - Object.keys(data_2).forEach(function(key) { - var array = data_2[key]; - if (!array) - return; - array.forEach(function(model) { - var item = graph.findById(model.id); - if (model.visible) { - graph.showItem(item, false); - } else { - graph.hideItem(item, false); - } - }); - }); - break; - } - case "render": - case "update": - Object.keys(data_2).forEach(function(key) { - var array = data_2[key]; - if (!array) - return; - array.forEach(function(model) { - graph.updateItem(model.id, model, false); - }); - }); - break; - case "changedata": - graph.changeData(data_2, false); - break; - case "delete": - if (data_2.edges) { - data_2.edges.forEach(function(model) { - graph.removeItem(model.id, false); - }); - } - if (data_2.nodes) { - data_2.nodes.forEach(function(model) { - graph.removeItem(model.id, false); - }); - } - if (data_2.combos) { - data_2.combos.forEach(function(model) { - graph.removeItem(model.id, false); - }); - } - break; - case "add": { - Object.keys(data_2).forEach(function(key) { - var array = data_2[key]; - if (!array) - return; - array.forEach(function(model) { - var itemType = model.itemType; - delete model.itemType; - graph.addItem(itemType, model, false); - }); - }); - break; - } - case "updateComboTree": - Object.keys(data_2).forEach(function(key) { - var array = data_2[key]; - if (!array) - return; - array.forEach(function(model) { - graph.updateComboTree(model.id, model.parentId, false); - }); - }); - break; - default: - } - } - }; - ToolBar3.prototype.handleDefaultOperator = function(code, graph) { - var currentZoom = graph.getZoom(); - switch (code) { - case "redo": - this.redo(); - break; - case "undo": - this.undo(); - break; - case "zoomOut": { - var ratioOut = 1 / (1 - DELTA2 * this.get("zoomSensitivity")); - var maxZoom = this.get("maxZoom") || graph.get("maxZoom"); - if (ratioOut * currentZoom > maxZoom) { - return; - } - graph.zoomTo(currentZoom * ratioOut); - break; - } - case "zoomIn": { - var ratioIn = 1 - DELTA2 * this.get("zoomSensitivity"); - var minZoom = this.get("minZoom") || graph.get("minZoom"); - if (ratioIn * currentZoom < minZoom) { - return; - } - graph.zoomTo(currentZoom * ratioIn); - break; - } - case "realZoom": - graph.zoomTo(1); - break; - case "autoZoom": - graph.fitView([20, 20]); - break; - default: - } - }; - ToolBar3.prototype.destroy = function() { - var toolBar = this.get("toolBar"); - if (toolBar) { - var container2 = this.get("container"); - if (!container2) { - container2 = this.get("graph").get("container"); - } - if ((0, import_util559.isString)(container2)) { - container2 = document.getElementById(container2); - } - container2.removeChild(toolBar); - } - var handleClick = this.get("handleClick"); - if (handleClick) { - toolBar.removeEventListener("click", handleClick); - } - }; - return ToolBar3; -}(base_default18); -var toolBar_default = ToolBar; - -// node_modules/@antv/g6-plugin/es/tooltip/index.js -var import_util560 = __toModule(require_lib()); -var import_insert_css3 = __toModule(require_insert_css()); -var __extends11 = function() { - var _extendStatics = function extendStatics(d3, b10) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) { - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - } - }; - return _extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - _extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -typeof document !== "undefined" && (0, import_insert_css3.default)("\n .g6-component-tooltip {\n border: 1px solid #e2e2e2;\n border-radius: 4px;\n font-size: 12px;\n color: #545454;\n background-color: rgba(255, 255, 255, 0.9);\n padding: 10px 8px;\n box-shadow: rgb(174, 174, 174) 0px 0px 10px;\n }\n .tooltip-type {\n padding: 0;\n margin: 0;\n }\n .tooltip-id {\n color: #531dab;\n }\n"); -var Tooltip3 = function(_super) { - __extends11(Tooltip5, _super); - function Tooltip5(config) { - return _super.call(this, config) || this; - } - Tooltip5.prototype.getDefaultCfgs = function() { - return { - offsetX: 6, - offsetY: 6, - getContent: function getContent(e4) { - return "\n

      \u7C7B\u578B\uFF1A".concat(e4.item.getType(), "

      \n ID\uFF1A").concat(e4.item.getID(), "\n "); - }, - shouldBegin: function shouldBegin2(e4) { - return true; - }, - itemTypes: ["node", "edge", "combo"], - trigger: "mouseenter", - fixToNode: void 0 - }; - }; - Tooltip5.prototype.getEvents = function() { - if (this.get("trigger") === "click") { - return { - "node:click": "onClick", - "edge:click": "onClick", - "combo:click": "onClick", - "canvas:click": "onMouseLeave", - afterremoveitem: "onMouseLeave", - contextmenu: "onMouseLeave", - drag: "onMouseLeave" - }; - } - return { - "node:mouseenter": "onMouseEnter", - "node:mouseleave": "onMouseLeave", - "node:mousemove": "onMouseMove", - "edge:mouseenter": "onMouseEnter", - "edge:mouseleave": "onMouseLeave", - "edge:mousemove": "onMouseMove", - "combo:mouseenter": "onMouseEnter", - "combo:mouseleave": "onMouseLeave", - "combo:mousemove": "onMouseMove", - afterremoveitem: "onMouseLeave", - contextmenu: "onMouseLeave", - "node:drag": "onMouseLeave" - }; - }; - Tooltip5.prototype.init = function() { - var self2 = this; - var className = self2.get("className") || "g6-component-tooltip"; - var tooltip10 = createDom("
      ")); - var container2 = self2.get("container"); - if (!container2) { - container2 = self2.get("graph").get("container"); - } - if ((0, import_util560.isString)(container2)) { - container2 = document.getElementById(container2); - } - modifyCSS(tooltip10, { - position: "absolute", - visibility: "hidden", - display: "none" - }); - container2.appendChild(tooltip10); - if (self2.get("trigger") !== "click") { - tooltip10.addEventListener("mouseenter", function(e4) { - modifyCSS(tooltip10, { - visibility: "visible", - display: "unset" - }); - }); - tooltip10.addEventListener("mouseleave", function(e4) { - self2.hideTooltip(); - }); - } - self2.set("tooltip", tooltip10); - }; - Tooltip5.prototype.onClick = function(e4) { - var itemTypes = this.get("itemTypes"); - if (e4.item && e4.item.getType && itemTypes.indexOf(e4.item.getType()) === -1) - return; - var item = e4.item; - var graph = this.get("graph"); - if (this.currentTarget === item) { - this.currentTarget = null; - this.hideTooltip(); - graph.emit("tooltipchange", { - item: e4.item, - action: "hide" - }); - } else { - this.currentTarget = item; - this.showTooltip(e4); - graph.emit("tooltipchange", { - item: e4.item, - action: "show" - }); - } - }; - Tooltip5.prototype.onMouseEnter = function(e4) { - var itemTypes = this.get("itemTypes"); - if (e4.item && e4.item.getType && itemTypes.indexOf(e4.item.getType()) === -1) - return; - var item = e4.item; - var graph = this.get("graph"); - this.currentTarget = item; - this.showTooltip(e4); - graph.emit("tooltipchange", { - item: e4.item, - action: "show" - }); - }; - Tooltip5.prototype.onMouseMove = function(e4) { - var itemTypes = this.get("itemTypes"); - if (e4.item && e4.item.getType && itemTypes.indexOf(e4.item.getType()) === -1) - return; - if (!this.currentTarget || e4.item !== this.currentTarget) { - return; - } - this.showTooltip(e4); - }; - Tooltip5.prototype.onMouseLeave = function() { - this.hideTooltip(); - var graph = this.get("graph"); - graph.emit("tooltipchange", { - item: this.currentTarget, - action: "hide" - }); - this.currentTarget = null; - }; - Tooltip5.prototype.showTooltip = function(e4) { - if (!e4.item) { - return; - } - var itemTypes = this.get("itemTypes"); - if (e4.item.getType && itemTypes.indexOf(e4.item.getType()) === -1) - return; - var container2 = this.get("tooltip"); - var getContent = this.get("getContent"); - var tooltip10 = getContent(e4); - if ((0, import_util560.isString)(tooltip10)) { - container2.innerHTML = tooltip10; - } else { - container2.innerHTML = tooltip10.outerHTML; - } - this.updatePosition(e4); - }; - Tooltip5.prototype.hideTooltip = function() { - var tooltip10 = this.get("tooltip"); - if (tooltip10) { - modifyCSS(tooltip10, { - visibility: "hidden", - display: "none" - }); - } - }; - Tooltip5.prototype.updatePosition = function(e4) { - var shouldBegin2 = this.get("shouldBegin"); - var tooltip10 = this.get("tooltip"); - if (!shouldBegin2(e4)) { - modifyCSS(tooltip10, { - visibility: "hidden", - display: "none" - }); - return; - } - var graph = this.get("graph"); - var width2 = graph.get("width"); - var height = graph.get("height"); - var offsetX = this.get("offsetX") || 0; - var offsetY = this.get("offsetY") || 0; - var point2 = graph.getPointByClient(e4.clientX, e4.clientY); - var fixToNode = this.get("fixToNode"); - var item = e4.item; - if (item.getType && item.getType() === "node" && fixToNode && (0, import_util560.isArray)(fixToNode) && fixToNode.length >= 2) { - var itemBBox = item.getBBox(); - point2 = { - x: itemBBox.minX + itemBBox.width * fixToNode[0], - y: itemBBox.minY + itemBBox.height * fixToNode[1] - }; - } - var _a6 = graph.getCanvasByPoint(point2.x, point2.y), x6 = _a6.x, y5 = _a6.y; - var graphContainer = graph.getContainer(); - var res = { - x: x6 + graphContainer.offsetLeft + offsetX, - y: y5 + graphContainer.offsetTop + offsetY - }; - modifyCSS(tooltip10, { - visibility: "visible", - display: "unset" - }); - var bbox = tooltip10.getBoundingClientRect(); - if (x6 + bbox.width + offsetX > width2) { - res.x -= bbox.width + offsetX; - } - if (y5 + bbox.height + offsetY > height) { - res.y -= bbox.height + offsetY; - } - modifyCSS(tooltip10, { - left: "".concat(res.x, "px"), - top: "".concat(res.y, "px") - }); - }; - Tooltip5.prototype.hide = function() { - this.onMouseLeave(); - }; - Tooltip5.prototype.destroy = function() { - var tooltip10 = this.get("tooltip"); - if (tooltip10) { - var container2 = this.get("container"); - if (!container2) { - container2 = this.get("graph").get("container"); - } - if ((0, import_util560.isString)(container2)) { - container2 = document.getElementById(container2); - } - container2.removeChild(tooltip10); - } - }; - return Tooltip5; -}(base_default18); -var tooltip_default2 = Tooltip3; - -// node_modules/@antv/g6-plugin/es/timeBar/trendTimeBar.js -var import_util565 = __toModule(require_lib()); - -// node_modules/@antv/g6-plugin/es/timeBar/path.js -var import_util561 = __toModule(require_lib()); -var __spreadArray3 = function(to, from, pack2) { - if (pack2 || arguments.length === 2) - for (var i4 = 0, l4 = from.length, ar; i4 < l4; i4++) { - if (ar || !(i4 in from)) { - if (!ar) - ar = Array.prototype.slice.call(from, 0, i4); - ar[i4] = from[i4]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -}; -function pointsToPath2(points) { - return (0, import_util561.map)(points, function(p4, idx) { - var command = idx === 0 ? "M" : "L"; - var x6 = p4[0], y5 = p4[1]; - return [command, x6, y5]; - }); -} -function getLinePath3(points) { - return pointsToPath2(points); -} -function getSmoothLinePath2(points) { - if (points.length <= 2) { - return getLinePath3(points); - } - var data3 = []; - (0, import_util561.each)(points, function(p4) { - if (!(0, import_util561.isEqual)(p4, data3.slice(data3.length - 2))) { - data3.push(p4[0], p4[1]); - } - }); - var path = catmull_rom_2_bezier_default(data3, false); - var _a6 = (0, import_util561.head)(points), x6 = _a6[0], y5 = _a6[1]; - path.unshift(["M", x6, y5]); - return path; -} -function dataToPath2(data3, width2, height, smooth) { - if (smooth === void 0) { - smooth = true; - } - var y5 = new linear_default({ - values: data3 - }); - var x6 = new base_default5({ - values: (0, import_util561.map)(data3, function(v3, idx) { - return idx; - }) - }); - var points = (0, import_util561.map)(data3, function(v3, idx) { - return [x6.scale(idx) * width2, height - y5.scale(v3) * height]; - }); - return smooth ? getSmoothLinePath2(points) : getLinePath3(points); -} -function dataToRectPath(data3, width2, height, barWidth) { - if (barWidth === void 0) { - barWidth = 5; - } - var y5 = new linear_default({ - values: data3 - }); - var x6 = new base_default5({ - values: (0, import_util561.map)(data3, function(v3, idx) { - return idx; - }) - }); - var points = (0, import_util561.map)(data3, function(v3, idx) { - return [x6.scale(idx) * width2, height - y5.scale(v3) * height]; - }); - var rectPoints = []; - for (var i4 = 0; i4 < points.length; i4++) { - var point2 = points[i4]; - var param = { - x: point2[0], - y: point2[1], - y0: height, - size: barWidth - }; - var rectPoint = getRectPoints3(param); - rectPoints.push.apply(rectPoints, rectPoint); - } - return getRectPath3(rectPoints); -} -function getAreaLineY2(data3, height) { - var y5 = new linear_default({ - values: data3 - }); - var lineY = Math.max(0, y5.min); - return height - y5.scale(lineY) * height; -} -function linePathToAreaPath2(path, width2, height, data3) { - var areaPath = __spreadArray3([], path, true); - var lineYPx = getAreaLineY2(data3, height); - areaPath.push(["L", width2, lineYPx]); - areaPath.push(["L", 0, lineYPx]); - areaPath.push(["Z"]); - return areaPath; -} -function getRectPoints3(pointInfo) { - var x6 = pointInfo.x, y5 = pointInfo.y, y0 = pointInfo.y0, size14 = pointInfo.size; - var yMin; - var yMax; - if ((0, import_util561.isArray)(y5)) { - yMin = y5[0], yMax = y5[1]; - } else { - yMin = y0; - yMax = y5; - } - var xMin; - var xMax; - if ((0, import_util561.isArray)(x6)) { - xMin = x6[0], xMax = x6[1]; - } else { - xMin = x6 - size14 / 2; - xMax = x6 + size14 / 2; - } - var points = [{ - x: xMin, - y: yMin - }, { - x: xMin, - y: yMax - }]; - points.push({ - x: xMax, - y: yMax - }, { - x: xMax, - y: yMin - }); - return points; -} -function getRectPath3(points, isClosed) { - if (isClosed === void 0) { - isClosed = true; - } - var path = []; - var firstPoint = points[0]; - path.push(["M", firstPoint.x, firstPoint.y]); - for (var i4 = 1, len5 = points.length; i4 < len5; i4++) { - path.push(["L", points[i4].x, points[i4].y]); - } - if (isClosed) { - path.push(["L", firstPoint.x, firstPoint.y]); - path.push(["z"]); - } - return path; -} - -// node_modules/@antv/g6-plugin/es/timeBar/trend.js -var __assign9 = function() { - __assign9 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) { - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - } - return t4; - }; - return __assign9.apply(this, arguments); -}; -var LINE_STYLE2 = { - stroke: "#C5C5C5", - strokeOpacity: 0.85 -}; -var AREA_STYLE2 = { - fill: "#CACED4", - opacity: 0.85 -}; -var Trend2 = function() { - function Trend3(cfg) { - var _a6 = cfg.x, x6 = _a6 === void 0 ? 0 : _a6, _b = cfg.y, y5 = _b === void 0 ? 0 : _b, _c = cfg.width, width2 = _c === void 0 ? 200 : _c, _d = cfg.height, height = _d === void 0 ? 26 : _d, _e = cfg.smooth, smooth = _e === void 0 ? true : _e, _f = cfg.isArea, isArea = _f === void 0 ? false : _f, _g = cfg.data, data3 = _g === void 0 ? [] : _g, lineStyle = cfg.lineStyle, areaStyle = cfg.areaStyle, group3 = cfg.group, _h = cfg.interval, interval3 = _h === void 0 ? null : _h; - this.group = group3; - this.x = x6; - this.y = y5; - this.width = width2; - this.height = height; - this.data = data3; - this.smooth = smooth; - this.isArea = isArea; - this.lineStyle = Object.assign({}, LINE_STYLE2, lineStyle); - this.areaStyle = Object.assign({}, AREA_STYLE2, areaStyle); - this.intervalConfig = interval3; - this.renderLine(); - } - Trend3.prototype.renderLine = function() { - var _a6 = this, x6 = _a6.x, y5 = _a6.y, width2 = _a6.width, height = _a6.height, barWidth = _a6.barWidth, data3 = _a6.data, smooth = _a6.smooth, isArea = _a6.isArea, lineStyle = _a6.lineStyle, areaStyle = _a6.areaStyle; - var trendGroup = this.group.addGroup({ - name: "trend-group" - }); - if (data3) { - var path = dataToPath2(data3, width2, height, smooth); - trendGroup.addShape("path", { - attrs: __assign9({ - path - }, lineStyle), - name: "trend-line" - }); - if (isArea) { - var areaPath = linePathToAreaPath2(path, width2, height, data3); - trendGroup.addShape("path", { - attrs: __assign9({ - path: areaPath - }, areaStyle), - name: "trend-area" - }); - } - } - if (this.intervalConfig) { - trendGroup.addShape("path", { - attrs: __assign9({ - path: dataToRectPath(this.intervalConfig.data, width2, height, this.intervalConfig.style.barWidth) - }, this.intervalConfig.style), - name: "trend-interval" - }); - } - trendGroup.move(x6, y5); - }; - Trend3.prototype.destory = function() { - this.group.destroy(); - }; - return Trend3; -}(); -var trend_default = Trend2; - -// node_modules/@antv/g6-plugin/es/timeBar/handler.js -var import_util562 = __toModule(require_lib()); -var __assign10 = function() { - __assign10 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) { - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - } - return t4; - }; - return __assign10.apply(this, arguments); -}; -var DEFAULT_STYLE2 = { - fill: "#1890ff", - stroke: "#1890ff", - type: "trend", - radius: 2, - opacity: 1, - cursor: "ew-resize", - highLightFill: "#0050b3" -}; -var SIMPLE_DEFAULT_STYLE = { - fill: "#fff", - stroke: "#1890ff", - radius: 2, - opacity: 1, - cursor: "ew-resize" -}; -var Handler2 = function() { - function Handler3(cfg) { - var group3 = cfg.group, name = cfg.name, type2 = cfg.type, _a6 = cfg.x, x6 = _a6 === void 0 ? 0 : _a6, _b = cfg.y, y5 = _b === void 0 ? 0 : _b, _c = cfg.width, width2 = _c === void 0 ? 2 : _c, _d = cfg.height, height = _d === void 0 ? 24 : _d, _e = cfg.style, style = _e === void 0 ? {} : _e; - this.group = group3; - this.name = name; - this.handleType = type2; - this.x = x6; - this.y = y5; - this.width = width2; - this.height = height; - if (type2 === "trend") { - this.style = __assign10(__assign10({}, DEFAULT_STYLE2), style); - } else if (type2 === "simple") { - this.style = __assign10(__assign10({}, SIMPLE_DEFAULT_STYLE), style); - } - this.renderHandle(); - } - Handler3.prototype.setX = function(x6) { - this.setXY(x6, void 0); - }; - Handler3.prototype.setY = function(y5) { - this.setXY(void 0, y5); - }; - Handler3.prototype.setXY = function(x6, y5) { - if ((0, import_util562.isNumber)(x6)) { - this.x = x6; - } - if ((0, import_util562.isNumber)(y5)) { - this.y = y5; - } - this.updateXY(); - }; - Handler3.prototype.renderHandle = function() { - var _a6 = this, width2 = _a6.width, height = _a6.height, style = _a6.style, name = _a6.name; - var fill = style.fill, stroke = style.stroke, radius = style.radius, opacity = style.opacity, cursor = style.cursor; - this.handleGroup = this.group.addGroup(); - if (this.handleType === "trend") { - this.verticalLine = this.handleGroup.addShape("rect", { - attrs: { - x: 0, - y: 0, - width: width2, - height, - fill, - stroke, - radius, - opacity, - cursor - }, - name: "".concat(name, "-handler") - }); - this.topCircle = this.handleGroup.addShape("circle", { - attrs: { - x: width2 / 2, - y: 0, - r: 2 * width2, - fill, - stroke, - radius, - opacity, - cursor, - lineAppendWidth: 12 - }, - name: "".concat(name, "-handler") - }); - this.bottomCircle = this.handleGroup.addShape("circle", { - attrs: { - x: width2 / 2, - y: height, - r: 2 * width2, - fill, - stroke, - radius, - opacity, - cursor - }, - name: "".concat(name, "-handler") - }); - } else if (this.handleType === "simple") { - this.topCircle = this.handleGroup.addShape("circle", { - attrs: { - x: width2 / 2, - y: height / 2, - r: 2 * width2, - fill, - stroke, - radius, - opacity, - cursor, - lineWidth: 2 - }, - name: "".concat(name, "-handler") - }); - } - this.updateXY(); - if (this.handleType === "trend") { - this.bindTrendEvents(); - } else if (this.handleType === "simple") { - this.bindSimpleEvents(); - } - }; - Handler3.prototype.bindSimpleEvents = function() { - var _this = this; - var name = this.name; - this.handleGroup.on("".concat(name, "-handler:mouseenter"), function() { - var highLightFill = _this.style.highLightFill; - _this.topCircle.attr("fill", highLightFill); - }); - this.handleGroup.on("".concat(name, "-handler:mouseleave"), function() { - var fill = _this.style.fill; - _this.topCircle.attr("fill", fill); - }); - }; - Handler3.prototype.bindTrendEvents = function() { - var _this = this; - var name = this.name; - this.handleGroup.on("".concat(name, "-handler:mouseenter"), function() { - var highLightFill = _this.style.highLightFill; - _this.verticalLine.attr("fill", highLightFill); - _this.topCircle.attr("fill", highLightFill); - _this.bottomCircle.attr("fill", highLightFill); - }); - this.handleGroup.on("".concat(name, "-handler:mouseleave"), function() { - var fill = _this.style.fill; - _this.verticalLine.attr("fill", fill); - _this.topCircle.attr("fill", fill); - _this.bottomCircle.attr("fill", fill); - }); - }; - Handler3.prototype.show = function() { - this.handleGroup.show(); - }; - Handler3.prototype.hide = function() { - this.handleGroup.hide(); - }; - Handler3.prototype.updateXY = function() { - this.handleGroup.setMatrix([1, 0, 0, 0, 1, 0, this.x, this.y, 1]); - }; - return Handler3; -}(); -var handler_default = Handler2; - -// node_modules/@antv/g6-plugin/es/timeBar/trendTimeBar.js -var import_util566 = __toModule(require_lib()); - -// node_modules/@antv/g6-plugin/es/timeBar/controllerBtn.js -var import_util564 = __toModule(require_lib()); - -// node_modules/@antv/g6-plugin/es/timeBar/timeButton.js -var import_util563 = __toModule(require_lib()); - -// node_modules/@antv/g6-plugin/es/timeBar/constant.js -var TIMELINE_START = "timebarstartplay"; -var TIMELINE_END = "timebarendplay"; -var VALUE_CHANGE = "valuechange"; -var TIMEBAR_CONFIG_CHANGE = "timebarConfigChanged"; -var PLAY_PAUSE_BTN = "playPauseBtn"; -var NEXT_STEP_BTN = "nextStepBtn"; -var PRE_STEP_BTN = "preStepBtn"; - -// node_modules/@antv/g6-plugin/es/timeBar/timeButton.js -var __assign11 = function() { - __assign11 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) { - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - } - return t4; - }; - return __assign11.apply(this, arguments); -}; -var Button = function() { - function Button2(cfg) { - this.config = (0, import_util563.deepMix)({}, cfg); - this.init(); - } - Button2.prototype.update = function(cfg) { - this.config = (0, import_util563.deepMix)({}, this.config, cfg); - this.updateElement(); - this.renderMarker(); - }; - Button2.prototype.init = function() { - this.initElement(); - this.renderMarker(); - }; - Button2.prototype.initElement = function() { - var _a6 = this.config, group3 = _a6.group, style = _a6.style; - var _b = style.scale, scale12 = _b === void 0 ? 1 : _b, _c = style.offsetX, offsetX = _c === void 0 ? 0 : _c, _d = style.offsetY, offsetY = _d === void 0 ? 0 : _d; - var x6 = this.config.x + offsetX; - var y5 = this.config.y + offsetY; - var buttonGroup = group3.addGroup({ - name: PLAY_PAUSE_BTN - }); - this.startMarkerGroup = buttonGroup.addGroup({ - name: PLAY_PAUSE_BTN - }); - this.circle = group3.addShape("circle", { - attrs: __assign11({ - x: x6, - y: y5, - r: this.config.r * scale12 - }, style), - name: PLAY_PAUSE_BTN - }); - this.startMarker = this.startMarkerGroup.addShape("path", { - attrs: { - path: this.getStartMarkerPath(x6, y5, scale12), - fill: style.stroke || "#aaa" - }, - name: "start-marker" - }); - this.pauseMarkerGroup = buttonGroup.addGroup({ - name: PLAY_PAUSE_BTN - }); - var width2 = 0.25 * this.config.r * scale12; - var height = 0.5 * this.config.r * Math.sqrt(3) * scale12; - this.pauseLeftMarker = this.pauseMarkerGroup.addShape("rect", { - attrs: { - x: x6 - 0.375 * this.config.r * scale12, - y: y5 - height / 2, - width: width2, - height, - fill: style.stroke || "#aaa", - lineWidth: 0 - } - }); - this.pauseRightMarker = this.pauseMarkerGroup.addShape("rect", { - attrs: { - x: x6 + 1 / 8 * this.config.r * scale12, - y: y5 - height / 2, - width: width2, - height, - fill: style.stroke || "#aaa", - lineWidth: 0 - } - }); - }; - Button2.prototype.updateElement = function() { - var _a6 = this.config.style, _b = _a6.scale, scale12 = _b === void 0 ? 1 : _b, _c = _a6.offsetX, offsetX = _c === void 0 ? 0 : _c, _d = _a6.offsetY, offsetY = _d === void 0 ? 0 : _d; - var x6 = this.config.x + offsetX; - var y5 = this.config.y + offsetY; - this.circle.attr("x", x6); - this.circle.attr("y", y5); - this.circle.attr("r", this.config.r * scale12); - this.startMarker.attr("path", this.getStartMarkerPath(x6, y5, scale12)); - var width2 = 0.25 * this.config.r * scale12; - var height = 0.5 * this.config.r * Math.sqrt(3) * scale12; - this.pauseLeftMarker.attr("x", x6 - (1 / 4 + 1 / 8) * this.config.r * scale12); - this.pauseLeftMarker.attr("y", y5 - height / 2); - this.pauseLeftMarker.attr("width", width2); - this.pauseLeftMarker.attr("height", height); - this.pauseRightMarker.attr("x", x6 + 1 / 8 * this.config.r * scale12); - this.pauseRightMarker.attr("y", y5 - height / 2); - this.pauseRightMarker.attr("width", width2); - this.pauseRightMarker.attr("height", height); - }; - Button2.prototype.renderMarker = function() { - if (this.config.isPlay) { - this.startMarkerGroup.hide(); - this.pauseMarkerGroup.show(); - } else { - this.startMarkerGroup.show(); - this.pauseMarkerGroup.hide(); - } - }; - Button2.prototype.getStartMarkerPath = function(x6, y5, scale12) { - var sideLength = 0.5 * this.config.r * Math.sqrt(3) * scale12; - return [["M", x6 - sideLength / Math.sqrt(3) / 2, y5 - sideLength / 2], ["L", x6 + sideLength / Math.sqrt(3), y5], ["L", x6 - sideLength / Math.sqrt(3) / 2, y5 + sideLength / 2]]; - }; - return Button2; -}(); -var timeButton_default = Button; - -// node_modules/@antv/g6-plugin/es/timeBar/controllerBtn.js -var __assign12 = function() { - __assign12 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) { - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - } - return t4; - }; - return __assign12.apply(this, arguments); -}; -var transform14 = ext_exports.transform; -var DEFAULT_RECT_FILL = "#aaa"; -var DEFAULT_RECT_STROKE = "green"; -var DEFAULT_PLAYBTN_STYLE = { - fill: "#aaa", - fillOpacity: 0.35, - stroke: "#aaa" -}; -var DEFAULT_PREBTN_STYLE = { - fill: "#fff" -}; -var DEFAULT_NEXTBTN_STYLE = { - fill: "green" -}; -var DEFAULT_SPEED_CONTROLLER_STYLE = { - pointer: { - fill: "#aaa", - lineWidth: 0 - }, - scroller: { - stroke: "#aaa", - fill: "#aaa", - lineWidth: 1, - lineAppendWidth: 5, - cursor: "pointer" - }, - text: { - fill: "#aaa", - textBaseline: "top" - } -}; -var DEFAULT_TIMETYPE_CONTROLLER_STYLE = { - check: { - stroke: "green", - lineWidth: 3 - }, - box: { - fill: "#fff", - stroke: "#aaa", - lineWidth: 2, - radius: 3, - width: 12, - height: 12 - }, - text: { - fill: "#aaa", - fontSize: 12, - textBaseline: "top" - } -}; -var DEFAULT_CONTROLLER_CONFIG = { - speed: 1, - loop: false, - fill: "#fff", - stroke: "#fff", - hideTimeTypeController: false, - preBtnStyle: { - fill: "#aaa", - stroke: "#aaa" - }, - nextBtnStyle: { - fill: "#aaa", - stroke: "#aaa" - }, - playBtnStyle: { - fill: "#aaa", - stroke: "#aaa", - fillOpacity: 0.05 - }, - speedControllerStyle: DEFAULT_SPEED_CONTROLLER_STYLE, - timeTypeControllerStyle: DEFAULT_TIMETYPE_CONTROLLER_STYLE -}; -var SPEED_CONTROLLER_OFFSET = 110; -var TOGGLE_MODEL_OFFSET = 50; -var ControllerBtn = function() { - function ControllerBtn2(cfg) { - this.controllerCfg = (0, import_util564.deepMix)({}, DEFAULT_CONTROLLER_CONFIG, cfg); - this.group = cfg.group; - this.controllerGroup = this.group.addGroup({ - name: "controller-group" - }); - this.speedAxisY = []; - this.currentSpeed = this.controllerCfg.speed; - this.currentType = "range"; - this.fontFamily = cfg.fontFamily || "Arial, sans-serif"; - this.init(); - } - ControllerBtn2.prototype.init = function() { - this.renderPlayButton(); - }; - ControllerBtn2.prototype.getNextMarkerPath = function(x6, y5, len5) { - return [["M", x6, y5 - len5], ["L", x6 + len5, y5], ["L", x6, y5 + len5], ["Z", x6, y5 - len5], ["M", x6, y5], ["L", x6 - len5, y5 - len5], ["L", x6 - len5, y5 + len5], ["Z"]]; - }; - ControllerBtn2.prototype.getPreMarkerPath = function(x6, y5, len5) { - return [["M", x6, y5 - len5], ["L", x6 - len5, y5], ["L", x6, y5 + len5], ["L", x6, y5 - len5], ["M", x6, y5], ["L", x6 + len5, y5 - len5], ["L", x6 + len5, y5 + len5], ["Z"]]; - }; - ControllerBtn2.prototype.renderPlayButton = function() { - var controllerCfg = this.controllerCfg; - var width2 = controllerCfg.width, height = controllerCfg.height, x6 = controllerCfg.x, y5 = controllerCfg.y, hideTimeTypeController = controllerCfg.hideTimeTypeController, _a6 = controllerCfg.fill, fill = _a6 === void 0 ? DEFAULT_RECT_FILL : _a6, _b = controllerCfg.stroke, stroke = _b === void 0 ? DEFAULT_RECT_STROKE : _b, _c = controllerCfg.containerStyle, containerStyle = _c === void 0 ? {} : _c; - var playBtnStyle = __assign12(__assign12({}, DEFAULT_PLAYBTN_STYLE), controllerCfg.playBtnStyle || {}); - var preBtnStyle = __assign12(__assign12({}, DEFAULT_PREBTN_STYLE), controllerCfg.preBtnStyle || {}); - var nextBtnStyle = __assign12(__assign12({}, DEFAULT_NEXTBTN_STYLE), controllerCfg.nextBtnStyle || {}); - var r4 = height / 2 - 5; - var realY = y5 + 10; - var container2 = this.controllerGroup.addShape("rect", { - attrs: __assign12({ - x: x6, - y: realY, - width: width2, - height, - stroke, - fill - }, containerStyle), - name: "container-rect" - }); - if (this.playButton) { - this.playButton.update({ - x: width2 / 2, - y: realY, - r: r4 - }); - } else { - this.playButton = new timeButton_default({ - group: this.controllerGroup, - x: width2 / 2, - y: realY + r4 + 5, - r: r4, - isPlay: this.isPlay, - style: playBtnStyle - }); - } - var prePaddingX = preBtnStyle.offsetX || 0; - var prePaddingY = preBtnStyle.offsetY || 0; - var preR = (preBtnStyle.scale || 1) * r4; - this.controllerGroup.addShape("path", { - attrs: __assign12({ - path: this.getPreMarkerPath(width2 / 2 - 5 * r4 + prePaddingX, realY + r4 + 5 + prePaddingY, preR * 0.5) - }, preBtnStyle), - name: PRE_STEP_BTN - }); - var nxtPaddingX = nextBtnStyle.offsetX || 0; - var nxtPaddingY = nextBtnStyle.offsetY || 0; - var nxtR = (nextBtnStyle.scale || 1) * r4; - this.controllerGroup.addShape("path", { - attrs: __assign12({ - path: this.getNextMarkerPath(width2 / 2 + 5 * r4 + nxtPaddingX, realY + r4 + 5 + nxtPaddingY, nxtR * 0.5) - }, nextBtnStyle), - name: NEXT_STEP_BTN - }); - container2.toBack(); - this.renderSpeedBtn(); - if (!hideTimeTypeController) { - this.renderToggleTime(); - } - this.bindEvent(); - var _d = this.controllerCfg.scale, scale12 = _d === void 0 ? 1 : _d; - var currentBBox = this.controllerGroup.getCanvasBBox(); - var centerX = (currentBBox.maxX + currentBBox.minX) / 2; - var centerY = (currentBBox.maxY + currentBBox.minY) / 2; - var matrix = transform14([1, 0, 0, 0, 1, 0, 0, 0, 1], [["t", -centerX, -centerY], ["s", scale12, scale12], ["t", centerX, centerY]]); - this.controllerGroup.setMatrix(matrix); - }; - ControllerBtn2.prototype.renderSpeedBtn = function() { - var _a6 = this.controllerCfg, y5 = _a6.y, width2 = _a6.width, hideTimeTypeController = _a6.hideTimeTypeController; - var speedControllerStyle = __assign12(__assign12({}, DEFAULT_SPEED_CONTROLLER_STYLE), this.controllerCfg.speedControllerStyle || {}); - var _b = speedControllerStyle.scroller, scroller = _b === void 0 ? {} : _b, _c = speedControllerStyle.text, text = _c === void 0 ? {} : _c, _d = speedControllerStyle.pointer, pointer = _d === void 0 ? {} : _d, _e = speedControllerStyle.scale, scale12 = _e === void 0 ? 1 : _e, _f = speedControllerStyle.offsetX, offsetX = _f === void 0 ? 0 : _f, _g = speedControllerStyle.offsetY, offsetY = _g === void 0 ? 0 : _g; - var speedGroup = this.controllerGroup.addGroup({ - name: "speed-group" - }); - this.speedGroup = speedGroup; - var speedNum = []; - var maxSpeed = 5; - this.speedAxisY = [19, 22, 26, 32, 39]; - for (var i4 = 0; i4 < 5; i4++) { - var axisY = y5 + this.speedAxisY[i4]; - var startX = width2 - (!hideTimeTypeController ? SPEED_CONTROLLER_OFFSET : TOGGLE_MODEL_OFFSET); - speedGroup.addShape("line", { - attrs: __assign12({ - x1: startX, - x2: startX + 15, - y1: axisY, - y2: axisY - }, scroller), - speed: maxSpeed, - name: "speed-rect" - }); - this.speedAxisY[i4] = axisY; - speedNum.push(maxSpeed); - maxSpeed = maxSpeed - 1; - } - this.speedText = speedGroup.addShape("text", { - attrs: __assign12({ - x: width2 - (!hideTimeTypeController ? SPEED_CONTROLLER_OFFSET : TOGGLE_MODEL_OFFSET) + 20, - y: this.speedAxisY[0] + 4, - text: "1.0X", - fontFamily: this.fontFamily || "Arial, sans-serif" - }, text), - name: "speed-text" - }); - this.speedPoint = speedGroup.addShape("path", { - attrs: __assign12({ - path: this.getPointerPath(width2 - (!hideTimeTypeController ? SPEED_CONTROLLER_OFFSET : TOGGLE_MODEL_OFFSET), 0), - matrix: [1, 0, 0, 0, 1, 0, 0, this.speedAxisY[4], 1] - }, pointer), - name: "speed-pointer" - }); - var currentBBox = this.speedGroup.getCanvasBBox(); - var centerX = (currentBBox.maxX + currentBBox.minX) / 2; - var centerY = (currentBBox.maxY + currentBBox.minY) / 2; - var matrix = this.speedGroup.getMatrix() || [1, 0, 0, 0, 1, 0, 0, 0, 1]; - matrix = transform14(matrix, [["t", -centerX, -centerY], ["s", scale12, scale12], ["t", centerX + offsetX * scale12, centerY + offsetY * scale12]]); - this.speedGroup.setMatrix(matrix); - }; - ControllerBtn2.prototype.getPointerPath = function(x6, y5) { - return [["M", x6, y5], ["L", x6 - 10, y5 - 4], ["L", x6 - 10, y5 + 4], ["Z"]]; - }; - ControllerBtn2.prototype.renderToggleTime = function() { - var _a6; - var width2 = this.controllerCfg.width; - var timeTypeControllerStyle = __assign12(__assign12({}, DEFAULT_TIMETYPE_CONTROLLER_STYLE), this.controllerCfg.timeTypeControllerStyle || {}); - var _b = timeTypeControllerStyle.scale, scale12 = _b === void 0 ? 1 : _b, _c = timeTypeControllerStyle.offsetX, offsetX = _c === void 0 ? 0 : _c, _d = timeTypeControllerStyle.offsetY, offsetY = _d === void 0 ? 0 : _d, _e = timeTypeControllerStyle.box, box2 = _e === void 0 ? {} : _e, _f = timeTypeControllerStyle.check, check = _f === void 0 ? {} : _f, _g = timeTypeControllerStyle.text, text = _g === void 0 ? {} : _g; - this.toggleGroup = this.controllerGroup.addGroup({ - name: "toggle-group" - }); - this.toggleGroup.addShape("rect", { - attrs: __assign12({ - x: width2 - TOGGLE_MODEL_OFFSET, - y: this.speedAxisY[0] + 3.5 - }, box2), - isChecked: false, - name: "toggle-model" - }); - this.checkedIcon = this.toggleGroup.addShape("path", { - attrs: __assign12({ - path: [["M", width2 - TOGGLE_MODEL_OFFSET + 3, this.speedAxisY[1] + 6], ["L", width2 - TOGGLE_MODEL_OFFSET + 7, this.speedAxisY[1] + 10], ["L", width2 - TOGGLE_MODEL_OFFSET + 12, this.speedAxisY[1] + 4]] - }, check), - capture: false, - name: "check-icon" - }); - this.checkedIcon.hide(); - this.checkedText = this.toggleGroup.addShape("text", { - attrs: __assign12({ - text: ((_a6 = this.controllerCfg) === null || _a6 === void 0 ? void 0 : _a6.timePointControllerText) || "\u5355\u4E00\u65F6\u95F4", - x: width2 - TOGGLE_MODEL_OFFSET + 15, - y: this.speedAxisY[0] + 4, - fontFamily: typeof window !== "undefined" ? window.getComputedStyle(document.body, null).getPropertyValue("font-family") || "Arial, sans-serif" : "Arial, sans-serif" - }, text), - name: "checked-text" - }); - var currentBBox = this.toggleGroup.getCanvasBBox(); - var centerX = (currentBBox.maxX + currentBBox.minX) / 2; - var centerY = (currentBBox.maxY + currentBBox.minY) / 2; - var matrix = this.toggleGroup.getMatrix() || [1, 0, 0, 0, 1, 0, 0, 0, 1]; - matrix = transform14(matrix, [["t", -centerX, -centerY], ["s", scale12, scale12], ["t", centerX + offsetX * scale12, centerY + offsetY * scale12]]); - this.toggleGroup.setMatrix(matrix); - }; - ControllerBtn2.prototype.bindEvent = function() { - var _this = this; - this.speedGroup.on("speed-rect:click", function(evt) { - var currentPointerY = evt.target.attr("y1"); - var pointerMatrix = _this.speedPoint.attr("matrix"); - var currentYIdx = _this.speedAxisY.indexOf(pointerMatrix[7] || 0); - var targetYIdx = _this.speedAxisY.indexOf(currentPointerY); - var yDiff = _this.speedAxisY[targetYIdx] - _this.speedAxisY[currentYIdx]; - pointerMatrix = transform14(pointerMatrix, [["t", 0, yDiff]]); - _this.speedPoint.setMatrix(pointerMatrix); - _this.currentSpeed = _this.speedAxisY.length - targetYIdx; - _this.speedText.attr("text", "".concat(_this.currentSpeed, ".0X")); - _this.group.emit(TIMEBAR_CONFIG_CHANGE, { - speed: _this.currentSpeed, - type: _this.currentType - }); - }); - this.speedGroup.on("mousewheel", function(evt) { - evt.preventDefault(); - var pointerMatrix = _this.speedPoint.attr("matrix") || [1, 0, 0, 0, 1, 0, 0, 0, 1]; - var currentPointerY = pointerMatrix[7]; - var currentYIdx = _this.speedAxisY.indexOf(currentPointerY); - if (currentYIdx === -1) { - var minDist_1 = Infinity; - _this.speedAxisY.forEach(function(y5, idx) { - var dist4 = Math.abs(y5 - currentPointerY); - if (minDist_1 > dist4) { - minDist_1 = dist4; - currentYIdx = idx; - } - }); - } - if (evt.originalEvent.deltaY > 0) - currentYIdx = Math.max(0, currentYIdx - 1); - else - currentYIdx = Math.min(_this.speedAxisY.length - 1, currentYIdx + 1); - var yDiff = _this.speedAxisY[currentYIdx] - currentPointerY; - pointerMatrix = transform14(pointerMatrix, [["t", 0, yDiff]]); - _this.speedPoint.setMatrix(pointerMatrix); - _this.currentSpeed = _this.speedAxisY.length - currentYIdx; - _this.speedText.attr("text", "".concat(_this.currentSpeed, ".0X")); - _this.group.emit(TIMEBAR_CONFIG_CHANGE, { - speed: _this.currentSpeed, - type: _this.currentType - }); - }); - if (this.toggleGroup) { - this.toggleGroup.on("toggle-model:click", function(evt) { - var _a6, _b; - var isChecked = evt.target.get("isChecked"); - if (!isChecked) { - _this.checkedIcon.show(); - _this.checkedText.attr("text", ((_a6 = _this.controllerCfg) === null || _a6 === void 0 ? void 0 : _a6.timeRangeControllerText) || "\u65F6\u95F4\u8303\u56F4"); - _this.currentType = "single"; - } else { - _this.checkedIcon.hide(); - _this.checkedText.attr("text", ((_b = _this.controllerCfg) === null || _b === void 0 ? void 0 : _b.timePointControllerText) || "\u5355\u4E00\u65F6\u95F4"); - _this.currentType = "range"; - } - evt.target.set("isChecked", !isChecked); - _this.group.emit(TIMEBAR_CONFIG_CHANGE, { - type: _this.currentType, - speed: _this.currentSpeed - }); - }); - } - }; - ControllerBtn2.prototype.destroy = function() { - this.speedGroup.off("speed-rect:click"); - if (this.toggleGroup) { - this.toggleGroup.off("toggle-model:click"); - this.toggleGroup.destroy(); - } - this.speedGroup.destroy(); - }; - return ControllerBtn2; -}(); -var controllerBtn_default = ControllerBtn; - -// node_modules/@antv/g6-plugin/es/timeBar/trendTimeBar.js -var __assign13 = function() { - __assign13 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) { - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - } - return t4; - }; - return __assign13.apply(this, arguments); -}; -var transform15 = ext_exports.transform; -var BACKGROUND_STYLE3 = { - fill: "#416180", - opacity: 0.05 -}; -var SIMPLE_BACKGROUND_STYLE = { - fill: "#416180", - opacity: 0.15, - radius: 5 -}; -var FOREGROUND_STYLE2 = { - fill: "#5B8FF9", - opacity: 0.3, - cursor: "grab" -}; -var DEFAULT_HANDLER_WIDTH2 = 2; -var HANDLER_STYLE2 = { - width: DEFAULT_HANDLER_WIDTH2, - height: 24 -}; -var TEXT_STYLE2 = { - textBaseline: "middle", - fill: "#000", - opacity: 0.45 -}; -var TICK_LABEL_STYLE = { - textAlign: "center", - textBaseline: "top", - fill: "#607889", - opacity: 0.35 -}; -var TICK_LINE_STYLE = { - lineWidth: 1, - stroke: "#ccc" -}; -var TrendTimeBar = function() { - function TrendTimeBar2(cfg) { - var _this = this; - this.prevX = 0; - this.onMouseDown = function(handler) { - return function(e4) { - _this.currentHandler = handler; - var event = e4.originalEvent; - event.stopPropagation(); - event.preventDefault(); - _this.prevX = (0, import_util565.get)(event, "touches.0.pageX", event.pageX); - var containerDOM = _this.canvas.get("container"); - containerDOM.addEventListener("mousemove", _this.onMouseMove); - containerDOM.addEventListener("mouseup", _this.onMouseUp); - containerDOM.addEventListener("mouseleave", _this.onMouseUp); - containerDOM.addEventListener("touchmove", _this.onMouseMove); - containerDOM.addEventListener("touchend", _this.onMouseUp); - containerDOM.addEventListener("touchcancel", _this.onMouseUp); - }; - }; - this.onMouseMove = function(e4) { - e4.stopPropagation(); - e4.preventDefault(); - var x7 = (0, import_util565.get)(e4, "touches.0.pageX", e4.pageX); - var offsetX = x7 - _this.prevX; - var offsetXRange = _this.adjustOffsetRange(offsetX / _this.width); - _this.updateStartEnd(offsetXRange); - _this.updateUI(); - _this.prevX = x7; - }; - this.onMouseUp = function() { - if (_this.currentHandler) { - _this.currentHandler = void 0; - } - var containerDOM = _this.canvas.get("container"); - if (containerDOM) { - containerDOM.removeEventListener("mousemove", _this.onMouseMove); - containerDOM.removeEventListener("mouseup", _this.onMouseUp); - containerDOM.removeEventListener("mouseleave", _this.onMouseUp); - containerDOM.removeEventListener("touchmove", _this.onMouseMove); - containerDOM.removeEventListener("touchend", _this.onMouseUp); - containerDOM.removeEventListener("touchcancel", _this.onMouseUp); - } - }; - var _a6 = cfg.x, x6 = _a6 === void 0 ? 0 : _a6, _b = cfg.y, y5 = _b === void 0 ? 0 : _b, _c = cfg.width, width2 = _c === void 0 ? 100 : _c, height = cfg.height, _d = cfg.padding, padding3 = _d === void 0 ? 10 : _d, trendCfg = cfg.trendCfg, _e = cfg.controllerCfg, controllerCfg = _e === void 0 ? { - speed: 1 - } : _e, _f = cfg.backgroundStyle, backgroundStyle = _f === void 0 ? {} : _f, _g = cfg.foregroundStyle, foregroundStyle = _g === void 0 ? {} : _g, _h = cfg.handlerStyle, handlerStyle = _h === void 0 ? {} : _h, _j = cfg.textStyle, textStyle2 = _j === void 0 ? {} : _j, _k = cfg.start, start = _k === void 0 ? 0 : _k, _l = cfg.end, end2 = _l === void 0 ? 1 : _l, _m = cfg.minText, minText = _m === void 0 ? "" : _m, _o = cfg.maxText, maxText = _o === void 0 ? "" : _o, group3 = cfg.group, graph = cfg.graph, canvas = cfg.canvas, _p = cfg.tick, tick = _p === void 0 ? { - tickLabelStyle: {}, - tickLineStyle: {}, - tickLabelFormatter: function tickLabelFormatter(d3) { - return d3; - }, - ticks: [] - } : _p, type2 = cfg.type; - this.graph = graph; - this.canvas = canvas; - this.group = group3; - this.timeBarType = type2; - this.x = x6; - this.y = y5; - this.width = width2; - this.height = height; - this.padding = padding3; - this.ticks = tick.ticks; - this.trendCfg = trendCfg; - this.controllerCfg = controllerCfg; - this.currentSpeed = controllerCfg.speed || 1; - this.tickLabelFormatter = tick.tickLabelFormatter; - if (type2 === "trend") { - this.backgroundStyle = __assign13(__assign13({}, BACKGROUND_STYLE3), backgroundStyle); - } else if (type2 === "simple") { - this.backgroundStyle = __assign13(__assign13({}, SIMPLE_BACKGROUND_STYLE), backgroundStyle); - } - this.foregroundStyle = __assign13(__assign13({}, FOREGROUND_STYLE2), foregroundStyle); - this.handlerStyle = __assign13(__assign13({}, HANDLER_STYLE2), handlerStyle); - this.textStyle = __assign13(__assign13({}, TEXT_STYLE2), textStyle2); - this.tickLabelStyle = __assign13(__assign13({}, TICK_LABEL_STYLE), tick.tickLabelStyle); - this.tickLineStyle = __assign13(__assign13({}, TICK_LINE_STYLE), tick.tickLineStyle); - this.currentMode = "range"; - this.start = start; - this.end = end2; - this.minText = minText; - this.maxText = maxText; - this.fontFamily = typeof window !== "undefined" ? window.getComputedStyle(document.body, null).getPropertyValue("font-family") || "Arial, sans-serif" : "Arial, sans-serif"; - this.renderSlider(); - } - TrendTimeBar2.prototype.update = function(cfg) { - var x6 = cfg.x, y5 = cfg.y, width2 = cfg.width, height = cfg.height, minText = cfg.minText, maxText = cfg.maxText, start = cfg.start, end2 = cfg.end; - this.start = Math.min(1, Math.max(start, 0)); - this.end = Math.min(1, Math.max(end2, 0)); - (0, import_util565.assign)(this, { - x: x6, - y: y5, - width: width2, - height, - minText, - maxText - }); - this.updateUI(); - }; - TrendTimeBar2.prototype.setText = function(minText, maxText) { - this.minTextShape.attr("text", minText); - this.maxTextShape.attr("text", maxText); - }; - TrendTimeBar2.prototype.renderSlider = function() { - var _this = this; - var _a6 = this, width2 = _a6.width, height = _a6.height, timeBarType = _a6.timeBarType; - if (timeBarType === "trend" && (0, import_util565.size)((0, import_util565.get)(this.trendCfg, "data"))) { - var trendComponent = new trend_default(__assign13(__assign13({ - x: this.x, - y: this.y, - width: width2, - height - }, this.trendCfg), { - group: this.group - })); - this.trendComponent = trendComponent; - } - var sliderGroup = this.group.addGroup({ - name: "slider-group" - }); - sliderGroup.addShape("rect", { - attrs: __assign13({ - x: 0, - y: 0, - width: width2, - height - }, this.backgroundStyle), - name: "background" - }); - var textGroup = this.group.addGroup(); - if (timeBarType === "trend") { - this.minTextShape = textGroup.addShape("text", { - attrs: __assign13({ - x: 0, - y: height / 2 + this.y, - textAlign: "right", - text: this.minText, - silent: false, - fontFamily: this.fontFamily || "Arial, sans-serif", - stroke: "#fff", - lineWidth: 5 - }, this.textStyle), - capture: false, - name: "min-text-shape" - }); - this.maxTextShape = textGroup.addShape("text", { - attrs: __assign13({ - y: height / 2 + this.y, - textAlign: "left", - text: this.maxText, - silent: false, - fontFamily: this.fontFamily || "Arial, sans-serif", - stroke: "#fff", - lineWidth: 5 - }, this.textStyle), - capture: false, - name: "max-text-shape" - }); - } else { - this.minTextShape = textGroup.addShape("text", { - attrs: __assign13({ - x: 0, - y: this.y - 10, - textAlign: "center", - text: this.minText, - silent: false, - fontFamily: this.fontFamily || "Arial, sans-serif", - stroke: "#fff", - lineWidth: 5 - }, this.textStyle), - capture: false, - name: "min-text-shape" - }); - this.maxTextShape = textGroup.addShape("text", { - attrs: __assign13({ - y: this.y - 10, - textAlign: "center", - text: this.maxText, - silent: false, - fontFamily: this.fontFamily || "Arial, sans-serif", - stroke: "#fff", - lineWidth: 5 - }, this.textStyle), - capture: false, - name: "max-text-shape" - }); - } - this.foregroundShape = this.group.addGroup().addShape("rect", { - attrs: __assign13({ - x: 0, - y: this.y, - height - }, this.foregroundStyle), - name: "foreground-shape" - }); - this.foregroundShape.on("mousedown", function(e4) { - e4.target.attr("cursor", "grabbing"); - }); - this.foregroundShape.on("mouseup", function(e4) { - e4.target.attr("cursor", _this.foregroundStyle.cursor || "grab"); - }); - var handlerWidth = (0, import_util565.get)(this.handlerStyle, "width", 2); - var handlerHeight = (0, import_util565.get)(this.handlerStyle, "height", 24); - var minHandleGroup = this.group.addGroup({ - name: "minHandlerShape" - }); - this.minHandlerShape = new handler_default({ - name: "minHandlerShape", - group: minHandleGroup, - type: timeBarType, - x: this.x, - y: this.y, - width: handlerWidth, - height: handlerHeight, - style: this.handlerStyle - }); - var maxHandleGroup = this.group.addGroup({ - name: "maxHandlerShape" - }); - this.maxHandlerShape = new handler_default({ - name: "maxHandlerShape", - group: maxHandleGroup, - type: timeBarType, - x: this.x, - y: this.y, - width: handlerWidth, - height: handlerHeight, - style: this.handlerStyle - }); - var tickData = this.ticks; - var interval3 = width2 / (tickData.length - 1); - this.tickPosList = []; - if (this.textList && this.textList.length) { - this.textList.forEach(function(text) { - text.destroy(); - }); - } - var lastX = -Infinity; - var rotate8 = this.tickLabelStyle.rotate; - delete this.tickLabelStyle.rotate; - this.textList = tickData.map(function(data3, index2) { - _this.tickPosList.push(_this.x + index2 * interval3); - var label17; - if (_this.tickLabelFormatter) { - label17 = _this.tickLabelFormatter(data3); - if (!(0, import_util566.isString)(label17) && label17) { - label17 = data3.date; - } - } else { - label17 = data3.date; - } - var textX = _this.x + index2 * interval3, textY = _this.y + height + 5; - var text = _this.group.addShape("text", { - attrs: __assign13({ - x: textX, - y: textY, - text: label17, - fontFamily: _this.fontFamily || "Arial, sans-serif" - }, _this.tickLabelStyle), - name: "tick-label" - }); - if ((0, import_util565.isNumber)(rotate8) && index2 !== tickData.length - 1) { - var matrix = transform15([1, 0, 0, 0, 1, 0, 0, 0, 1], [["t", -textX, -textY], ["r", rotate8], ["t", textX - 5, textY + 2]]); - text.attr({ - textAlign: "left", - matrix - }); - } - if (index2 === 0) { - text.attr({ - textAlign: "left" - }); - } else if (index2 !== tickData.length - 1) { - text.attr({ - textAlign: "right" - }); - } - var line2 = _this.group.addShape("line", { - attrs: __assign13({ - x1: _this.x + index2 * interval3, - y1: _this.y + height + 2, - x2: _this.x + index2 * interval3, - y2: _this.y + height + 6 - }, _this.tickLineStyle), - name: "tick-line" - }); - line2.toBack(); - var bbox = text.getBBox(); - if (bbox.minX > lastX) { - text.show(); - line2.show(); - lastX = bbox.minX + bbox.width + 10; - } else { - text.hide(); - line2.hide(); - } - return text; - }); - this.controllerBtnGroup = new controllerBtn_default(__assign13({ - group: this.group, - x: this.x, - y: this.y + height + 25, - width: width2, - height: 35 - }, this.controllerCfg)); - this.updateStartEnd(0); - this.updateUI(); - sliderGroup.move(this.x, this.y); - this.bindEvents(); - }; - TrendTimeBar2.prototype.bindEvents = function() { - var _this = this; - var minHandleShapeGroup = this.group.find(function(group3) { - return group3.get("name") === "minHandlerShape"; - }); - if (minHandleShapeGroup) { - minHandleShapeGroup.on("minHandlerShape-handler:mousedown", this.onMouseDown(this.minHandlerShape)); - minHandleShapeGroup.on("minHandlerShape-handler:touchstart", this.onMouseDown(this.minHandlerShape)); - } - var maxHandleShapeGroup = this.group.find(function(group3) { - return group3.get("name") === "maxHandlerShape"; - }); - if (maxHandleShapeGroup) { - maxHandleShapeGroup.on("maxHandlerShape-handler:mousedown", this.onMouseDown(this.maxHandlerShape)); - maxHandleShapeGroup.on("maxHandlerShape-handler:touchstart", this.onMouseDown(this.maxHandlerShape)); - } - this.foregroundShape.on("mousedown", this.onMouseDown(this.foregroundShape)); - this.foregroundShape.on("touchstart", this.onMouseDown(this.foregroundShape)); - this.group.on("".concat(PLAY_PAUSE_BTN, ":click"), function() { - _this.isPlay = !_this.isPlay; - _this.currentHandler = _this.maxHandlerShape; - _this.changePlayStatus(); - }); - this.group.on("".concat(NEXT_STEP_BTN, ":click"), function() { - _this.currentHandler = _this.maxHandlerShape; - _this.updateStartEnd(0.01); - _this.updateUI(); - }); - this.group.on("".concat(PRE_STEP_BTN, ":click"), function() { - _this.currentHandler = _this.maxHandlerShape; - _this.updateStartEnd(-0.01); - _this.updateUI(); - }); - this.group.on(TIMEBAR_CONFIG_CHANGE, function(_a6) { - var type2 = _a6.type, speed = _a6.speed; - _this.currentSpeed = speed; - _this.currentMode = type2; - if (type2 === "single") { - _this.minHandlerShape.hide(); - _this.foregroundShape.hide(); - _this.minTextShape.hide(); - } else if (type2 === "range") { - _this.minHandlerShape.show(); - _this.foregroundShape.show(); - _this.minTextShape.show(); - } - }); - }; - TrendTimeBar2.prototype.adjustTickIndex = function(timeSelectX) { - for (var i4 = 0; i4 < this.tickPosList.length - 1; i4++) { - if (this.tickPosList[i4] <= timeSelectX && timeSelectX <= this.tickPosList[i4 + 1]) { - return Math.abs(this.tickPosList[i4] - timeSelectX) < Math.abs(timeSelectX - this.tickPosList[i4 + 1]) ? i4 : i4 + 1; - } - } - return 0; - }; - TrendTimeBar2.prototype.adjustOffsetRange = function(offsetRange) { - switch (this.currentHandler) { - case this.minHandlerShape: { - var min13 = 0 - this.start; - var max15 = 1 - this.start; - return Math.min(max15, Math.max(min13, offsetRange)); - } - case this.maxHandlerShape: { - var min13 = 0 - this.end; - var max15 = 1 - this.end; - return Math.min(max15, Math.max(min13, offsetRange)); - } - case this.foregroundShape: { - var min13 = 0 - this.start; - var max15 = 1 - this.end; - return Math.min(max15, Math.max(min13, offsetRange)); - } - default: - return 0; - } - }; - TrendTimeBar2.prototype.updateStartEnd = function(offsetRange) { - var minData = this.ticks[this.adjustTickIndex(this.start * this.width)]; - var maxData = this.ticks[this.adjustTickIndex(this.end * this.width)]; - if (!this.currentHandler) { - this.minText = this.tickLabelFormatter ? this.tickLabelFormatter(minData) : minData === null || minData === void 0 ? void 0 : minData.date; - this.maxText = this.tickLabelFormatter ? this.tickLabelFormatter(maxData) : maxData === null || maxData === void 0 ? void 0 : maxData.date; - return; - } - switch (this.currentHandler) { - case this.minHandlerShape: - this.maxText = this.maxTextShape.attr("text"); - this.start += offsetRange; - this.minText = this.tickLabelFormatter ? this.tickLabelFormatter(minData) : minData.date; - break; - case this.maxHandlerShape: - this.minText = this.minTextShape.attr("text"); - this.end += offsetRange; - this.maxText = this.tickLabelFormatter ? this.tickLabelFormatter(maxData) : maxData.date; - break; - case this.foregroundShape: - this.start += offsetRange; - this.end += offsetRange; - this.minText = this.tickLabelFormatter ? this.tickLabelFormatter(minData) : minData.date; - this.maxText = this.tickLabelFormatter ? this.tickLabelFormatter(maxData) : maxData.date; - break; - default: - break; - } - }; - TrendTimeBar2.prototype.updateUI = function() { - var _this = this; - if (this.start < 0) { - this.start = 0; - } - if (this.end > 1) { - this.end = 1; - } - var min13 = this.x + this.start * this.width; - var max15 = this.x + this.end * this.width; - this.foregroundShape.attr("x", min13); - this.foregroundShape.attr("width", max15 - min13); - var handlerWidth = (0, import_util565.get)(this.handlerStyle, "width", DEFAULT_HANDLER_WIDTH2); - this.setText(this.minText, this.maxText); - var _a6 = this.dodgeText([min13, max15]), minAttrs = _a6[0], maxAttrs = _a6[1]; - this.minHandlerShape.setX(min13 - handlerWidth / 2); - (0, import_util565.each)(minAttrs, function(v3, k4) { - return _this.minTextShape.attr(k4, v3); - }); - this.maxHandlerShape.setX(max15 - handlerWidth / 2); - (0, import_util565.each)(maxAttrs, function(v3, k4) { - return _this.maxTextShape.attr(k4, v3); - }); - if (this.currentMode === "range") { - this.graph.emit(VALUE_CHANGE, { - value: [this.start, this.end].sort() - }); - } else if (this.currentMode === "single") { - this.graph.emit(VALUE_CHANGE, { - value: [this.end, this.end] - }); - } - }; - TrendTimeBar2.prototype.dodgeText = function(range) { - var _a6, _b; - var TEXTPADDING = 2; - var handlerWidth = (0, import_util565.get)(this.handlerStyle, "width", DEFAULT_HANDLER_WIDTH2); - var minTextShape = this.minTextShape; - var maxTextShape = this.maxTextShape; - var min13 = range[0], max15 = range[1]; - var sorted = false; - if (min13 > max15) { - _a6 = [max15, min13], min13 = _a6[0], max15 = _a6[1]; - _b = [maxTextShape, minTextShape], minTextShape = _b[0], maxTextShape = _b[1]; - sorted = true; - } - var minBBox = minTextShape.getBBox(); - var maxBBox = maxTextShape.getBBox(); - var minAttrs = null; - var maxAttrs = null; - if (this.timeBarType === "trend") { - minAttrs = min13 - minBBox.width < this.x + TEXTPADDING ? { - x: min13 + handlerWidth / 2 + TEXTPADDING, - textAlign: "left" - } : { - x: min13 - handlerWidth / 2 - TEXTPADDING, - textAlign: "right" - }; - maxAttrs = max15 + maxBBox.width > this.x + this.width ? { - x: max15 - handlerWidth / 2 - TEXTPADDING, - textAlign: "right" - } : { - x: max15 + handlerWidth / 2 + TEXTPADDING, - textAlign: "left" - }; - } else if (this.timeBarType === "simple") { - minAttrs = minTextShape.attr("x") > minBBox.width ? { - x: min13, - textAlign: "center" - } : { - x: min13, - textAlign: "left" - }; - maxAttrs = maxTextShape.attr("x") > this.width - maxBBox.width ? { - x: max15, - textAlign: "right" - } : { - x: max15, - textAlign: "center" - }; - } - return !sorted ? [minAttrs, maxAttrs] : [maxAttrs, minAttrs]; - }; - TrendTimeBar2.prototype.startPlay = function() { - var _this = this; - return typeof window !== "undefined" ? window.requestAnimationFrame(function() { - var _a6 = _this, ticks = _a6.ticks, width2 = _a6.width; - var speed = _this.currentSpeed; - var tickInterval = width2 / ticks.length; - var offsetX = tickInterval / ((10 - speed) * 1e3 / 60); - var offsetXRange = _this.adjustOffsetRange(offsetX / _this.width); - _this.updateStartEnd(offsetXRange); - _this.updateUI(); - if (_this.isPlay) { - _this.playHandler = _this.startPlay(); - } - }) : void 0; - }; - TrendTimeBar2.prototype.changePlayStatus = function(isSync) { - if (isSync === void 0) { - isSync = true; - } - this.controllerBtnGroup.playButton.update({ - isPlay: this.isPlay - }); - if (this.isPlay) { - this.playHandler = this.startPlay(); - this.graph.emit(TIMELINE_START, null); - } else { - if (this.playHandler) { - if (typeof window !== "undefined") - window.cancelAnimationFrame(this.playHandler); - if (isSync) { - this.graph.emit(TIMELINE_END, null); - } - } - } - }; - TrendTimeBar2.prototype.destory = function() { - this.graph.off(VALUE_CHANGE); - var group3 = this.group; - var minHandleShapeGroup = group3.find(function(g4) { - return g4.get("name") === "minHandlerShape"; - }); - if (minHandleShapeGroup) { - minHandleShapeGroup.off("minHandlerShape-handler:mousedown"); - minHandleShapeGroup.off("minHandlerShape-handler:touchstart"); - minHandleShapeGroup.destroy(); - } - var maxHandleShapeGroup = group3.find(function(g4) { - return g4.get("name") === "maxHandlerShape"; - }); - if (maxHandleShapeGroup) { - maxHandleShapeGroup.off("maxHandlerShape-handler:mousedown"); - maxHandleShapeGroup.off("maxHandlerShape-handler:touchstart"); - maxHandleShapeGroup.destroy(); - } - this.foregroundShape.off("mousedown"); - this.foregroundShape.off("touchstart"); - this.foregroundShape.destroy(); - group3.off("".concat(PLAY_PAUSE_BTN, ":click")); - group3.off("".concat(NEXT_STEP_BTN, ":click")); - group3.off("".concat(PRE_STEP_BTN, ":click")); - group3.off(TIMEBAR_CONFIG_CHANGE); - group3.destroy(); - if (this.trendComponent) { - this.trendComponent.destory(); - } - }; - return TrendTimeBar2; -}(); -var trendTimeBar_default = TrendTimeBar; - -// node_modules/@antv/g6-plugin/es/timeBar/timeBarSlice.js -var import_util568 = __toModule(require_lib()); - -// node_modules/@antv/g6-plugin/es/timeBar/timeBarTooltip.js -var import_util567 = __toModule(require_lib()); -var TimeBarTooltip = function() { - function TimeBarTooltip2(cfg) { - var _a6 = cfg.x, x6 = _a6 === void 0 ? 0 : _a6, _b = cfg.y, y5 = _b === void 0 ? 0 : _b, container2 = cfg.container, text = cfg.text, _c = cfg.padding, padding3 = _c === void 0 ? [4, 4, 4, 4] : _c, _d = cfg.className, className = _d === void 0 ? "g6-component-timebar-tooltip" : _d, _e = cfg.backgroundColor, backgroundColor = _e === void 0 ? "#000" : _e, _f = cfg.textColor, textColor3 = _f === void 0 ? "#fff" : _f, _g = cfg.opacity, opacity = _g === void 0 ? 0.8 : _g, _h = cfg.fontSize, fontSize = _h === void 0 ? 12 : _h; - this.container = container2; - this.className = className; - this.backgroundColor = backgroundColor; - this.textColor = textColor3; - this.x = x6; - this.y = y5; - this.text = text; - this.padding = padding3; - this.opacity = opacity; - this.fontSize = fontSize; - this.render(); - } - TimeBarTooltip2.prototype.render = function() { - var self2 = this; - var className = self2.className, x6 = self2.x, y5 = self2.y, backgroundColor = self2.backgroundColor, textColor3 = self2.textColor, text = self2.text, padding3 = self2.padding, opacity = self2.opacity, fontSize = self2.fontSize; - var parentNode = self2.container; - var container2 = createDom("
      ')); - if ((0, import_util567.isString)(parentNode)) { - parentNode = document.getElementById(parentNode); - } - parentNode.appendChild(container2); - self2.parentHeight = parentNode.offsetHeight; - self2.parentWidth = parentNode.offsetWidth; - modifyCSS(container2, { - visibility: "hidden", - top: 0, - left: 0 - }); - var background = createDom("\n
      ")); - background.innerHTML = text; - container2.appendChild(background); - self2.backgroundDOM = background; - var arrow = createDom("
      ")); - container2.appendChild(arrow); - self2.arrowDOM = arrow; - self2.container = container2; - }; - TimeBarTooltip2.prototype.show = function(cfg) { - var self2 = this; - var text = cfg.text, x6 = cfg.x, y5 = cfg.y, clientX = cfg.clientX, clientY = cfg.clientY; - self2.backgroundDOM.innerHTML = text; - var backgroundWidth = self2.backgroundDOM.offsetWidth; - var backgroundHeight = self2.backgroundDOM.offsetHeight; - var arrowWidth = self2.arrowDOM.offsetWidth; - var arrowHeight = self2.arrowDOM.offsetHeight; - modifyCSS(self2.container, { - top: "".concat(-backgroundHeight - arrowHeight, "px"), - left: "".concat(x6, "px"), - visibility: "visible" - }); - modifyCSS(self2.backgroundDOM, { - marginLeft: "".concat(-backgroundWidth / 2, "px") - }); - modifyCSS(self2.arrowDOM, { - marginLeft: "".concat(-arrowWidth / 2, "px"), - top: "".concat(backgroundHeight, "px") - }); - var left2 = x6 - backgroundWidth / 2; - var right2 = x6 + backgroundWidth / 2; - if (left2 < 0) { - modifyCSS(self2.backgroundDOM, { - marginLeft: "".concat(-backgroundWidth / 2 - left2, "px") - }); - } else if (right2 > self2.parentWidth) { - modifyCSS(self2.backgroundDOM, { - marginLeft: "".concat(-backgroundWidth / 2 - right2 + self2.parentWidth + 12, "px") - }); - } - }; - TimeBarTooltip2.prototype.hide = function() { - modifyCSS(this.container, { - top: 0, - left: 0, - visibility: "hidden" - }); - }; - return TimeBarTooltip2; -}(); -var timeBarTooltip_default = TimeBarTooltip; - -// node_modules/@antv/g6-plugin/es/timeBar/timeBarSlice.js -var __assign14 = function() { - __assign14 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) { - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - } - return t4; - }; - return __assign14.apply(this, arguments); -}; -var transform16 = ext_exports.transform; -var DEFAULT_SELECTEDTICK_STYLE = { - fill: "#5B8FF9" -}; -var DEFAULT_UNSELECTEDTICK_STYLE = { - fill: "#e6e8e9" -}; -var TimeBarSlice = function() { - function TimeBarSlice2(cfgs) { - this.frameCount = 0; - this.fontFamily = "Arial, sans-serif"; - var graph = cfgs.graph, canvas = cfgs.canvas, group3 = cfgs.group, width2 = cfgs.width, height = cfgs.height, padding3 = cfgs.padding, data3 = cfgs.data, start = cfgs.start, end2 = cfgs.end, _a6 = cfgs.x, x6 = _a6 === void 0 ? 0 : _a6, _b = cfgs.y, y5 = _b === void 0 ? 0 : _b, tickLabelFormatter = cfgs.tickLabelFormatter, _c = cfgs.selectedTickStyle, selectedTickStyle = _c === void 0 ? DEFAULT_SELECTEDTICK_STYLE : _c, _d = cfgs.unselectedTickStyle, unselectedTickStyle = _d === void 0 ? DEFAULT_UNSELECTEDTICK_STYLE : _d, tooltipBackgroundColor = cfgs.tooltipBackgroundColor, tooltipFomatter = cfgs.tooltipFomatter, tickLabelStyle = cfgs.tickLabelStyle; - this.graph = graph; - this.group = group3; - this.sliceGroup = group3.addGroup({ - name: "slice-group" - }); - this.canvas = canvas; - this.width = width2; - this.height = height; - this.padding = padding3; - this.data = data3; - this.start = start; - this.end = end2; - this.tickLabelFormatter = tickLabelFormatter; - this.tickLabelStyle = tickLabelStyle || {}; - this.selectedTickStyle = selectedTickStyle; - this.unselectedTickStyle = unselectedTickStyle; - this.x = x6; - this.y = y5; - this.tooltipBackgroundColor = tooltipBackgroundColor; - this.tooltipFomatter = tooltipFomatter; - this.fontFamily = typeof window !== "undefined" ? window.getComputedStyle(document.body, null).getPropertyValue("font-family") || "Arial, sans-serif" : "Arial, sans-serif"; - this.renderSlices(); - this.initEvent(); - } - TimeBarSlice2.prototype.renderSlices = function() { - var _this = this; - var _a6 = this, width2 = _a6.width, height = _a6.height, padding3 = _a6.padding, data3 = _a6.data, start = _a6.start, end2 = _a6.end, tickLabelFormatter = _a6.tickLabelFormatter, selectedTickStyle = _a6.selectedTickStyle, unselectedTickStyle = _a6.unselectedTickStyle, tickLabelStyle = _a6.tickLabelStyle; - var realWidth = width2 - 2 * padding3; - var fontSize = 10; - var labelLineHeight = 4; - var labelAreaHeight = 3 * padding3 + labelLineHeight + fontSize; - var ticksAreaHeight = height - labelAreaHeight - 2 * padding3; - var gap = 2; - var ticksLength = data3.length; - var tickWidth = (realWidth - gap * (ticksLength - 1)) / ticksLength; - this.tickWidth = tickWidth; - var sliceGroup = this.sliceGroup; - var tickRects = []; - var labels = []; - var startTickId = Math.round(ticksLength * start); - var endTickId = Math.round(ticksLength * end2); - this.startTickRectId = startTickId; - this.endTickRectId = endTickId; - var rotate8 = tickLabelStyle.rotate; - delete tickLabelStyle.rotate; - data3.forEach(function(d3, i4) { - var selected = i4 >= startTickId && i4 <= endTickId; - var tickStyle = selected ? selectedTickStyle : unselectedTickStyle; - var rect3 = sliceGroup.addShape("rect", { - attrs: __assign14({ - x: padding3 + i4 * (tickWidth + gap), - y: padding3, - width: tickWidth, - height: ticksAreaHeight - }, tickStyle), - draggable: true, - name: "tick-rect-".concat(i4) - }); - var pickRect = sliceGroup.addShape("rect", { - attrs: { - x: padding3 + i4 * tickWidth + gap * (2 * i4 - 1) / 2, - y: padding3, - width: i4 === 0 || i4 === ticksLength - 1 ? tickWidth + gap / 2 : tickWidth + gap, - height: ticksAreaHeight, - fill: "#fff", - opacity: 0 - }, - draggable: true, - name: "pick-rect-".concat(i4) - }); - pickRect.toFront(); - var rectBBox = rect3.getBBox(); - var centerX = (rectBBox.minX + rectBBox.maxX) / 2; - tickRects.push({ - rect: rect3, - pickRect, - value: d3.date, - x: centerX, - y: rectBBox.minY - }); - var label17; - if (tickLabelFormatter) { - label17 = tickLabelFormatter(d3); - if (!(0, import_util568.isString)(label17) && label17) { - label17 = d3.date; - } - } else if (i4 % Math.round(ticksLength / 10) === 0) { - label17 = d3.date; - } - if (label17) { - labels.push(label17); - var lineStartY = rectBBox.maxY + padding3 * 2; - sliceGroup.addShape("line", { - attrs: { - stroke: "#BFBFBF", - x1: centerX, - y1: lineStartY, - x2: centerX, - y2: lineStartY + labelLineHeight - }, - name: "tick-line" - }); - var labelStartY = lineStartY + labelLineHeight + padding3; - var text = sliceGroup.addShape("text", { - attrs: __assign14({ - fill: "#8c8c8c", - stroke: "#fff", - lineWidth: 1, - x: centerX, - y: labelStartY, - textAlign: "center", - text: label17, - textBaseline: "top", - fontSize: 10, - fontFamily: _this.fontFamily || "Arial, sans-serif" - }, tickLabelStyle), - capture: false, - name: "tick-label" - }); - var textBBox = text.getBBox(); - if (textBBox.maxX > width2) { - text.attr("textAlign", "right"); - } else if (textBBox.minX < 0) { - text.attr("textAlign", "left"); - } - if ((0, import_util568.isNumber)(rotate8) && labels.length !== 10) { - var matrix = transform16([1, 0, 0, 0, 1, 0, 0, 0, 1], [["t", -centerX, -labelStartY], ["r", rotate8], ["t", centerX - 5, labelStartY + 2]]); - text.attr({ - textAlign: "left", - matrix - }); - } - if (labels.length === 1) { - text.attr({ - textAlign: "left" - }); - } else if (labels.length === 10) { - text.attr({ - textAlign: "right" - }); - } - } - }); - this.tickRects = tickRects; - var group3 = this.group; - this.currentSpeed = 1; - this.controllerBtnGroup = new controllerBtn_default({ - group: group3, - x: this.x, - y: this.y + height + 5, - width: width2, - height: 40, - hideTimeTypeController: true, - speed: this.currentSpeed, - fontFamily: this.fontFamily || "Arial, sans-serif" - }); - }; - TimeBarSlice2.prototype.initEvent = function() { - var _this = this; - var sliceGroup = this.sliceGroup; - sliceGroup.on("click", function(e4) { - var targetRect = e4.target; - if (targetRect.get("type") !== "rect" || !targetRect.get("name")) - return; - var id = parseInt(targetRect.get("name").split("-")[2], 10); - if (!isNaN(id)) { - var tickRects_1 = _this.tickRects; - var unselectedTickStyle_1 = _this.unselectedTickStyle; - tickRects_1.forEach(function(tickRect) { - tickRect.rect.attr(unselectedTickStyle_1); - }); - var selectedTickStyle = _this.selectedTickStyle; - tickRects_1[id].rect.attr(selectedTickStyle); - _this.startTickRectId = id; - _this.endTickRectId = id; - var ticksLength = tickRects_1.length; - var start = id / ticksLength; - _this.graph.emit(VALUE_CHANGE, { - value: [start, start] - }); - } - }); - sliceGroup.on("dragstart", function(e4) { - var tickRects2 = _this.tickRects; - var unselectedTickStyle = _this.unselectedTickStyle; - tickRects2.forEach(function(tickRect) { - tickRect.rect.attr(unselectedTickStyle); - }); - var targetRect = e4.target; - var id = parseInt(targetRect.get("name").split("-")[2], 10); - var selectedTickStyle = _this.selectedTickStyle; - tickRects2[id].rect.attr(selectedTickStyle); - _this.startTickRectId = id; - var ticksLength = tickRects2.length; - var start = id / ticksLength; - _this.graph.emit(VALUE_CHANGE, { - value: [start, start] - }); - _this.dragging = true; - }); - sliceGroup.on("dragover", function(e4) { - if (!_this.dragging) - return; - if (e4.target.get("type") !== "rect") - return; - var id = parseInt(e4.target.get("name").split("-")[2], 10); - var startTickRectId = _this.startTickRectId; - var tickRects2 = _this.tickRects; - var selectedTickStyle = _this.selectedTickStyle; - var unselectedTickStyle = _this.unselectedTickStyle; - for (var i4 = 0; i4 < tickRects2.length; i4++) { - var style = i4 >= startTickRectId && i4 <= id ? selectedTickStyle : unselectedTickStyle; - tickRects2[i4].rect.attr(style); - } - var ticksLength = tickRects2.length; - _this.endTickRectId = id; - var start = startTickRectId / ticksLength; - var end2 = id / ticksLength; - _this.graph.emit(VALUE_CHANGE, { - value: [start, end2] - }); - }); - sliceGroup.on("drop", function(e4) { - if (!_this.dragging) - return; - _this.dragging = false; - if (e4.target.get("type") !== "rect") - return; - var startTickRectId = _this.startTickRectId; - var id = parseInt(e4.target.get("name").split("-")[2], 10); - if (id < startTickRectId) - return; - var selectedTickStyle = _this.selectedTickStyle; - var tickRects2 = _this.tickRects; - tickRects2[id].rect.attr(selectedTickStyle); - _this.endTickRectId = id; - var ticksLength = tickRects2.length; - var start = startTickRectId / ticksLength; - var end2 = id / ticksLength; - _this.graph.emit(VALUE_CHANGE, { - value: [start, end2] - }); - }); - var _a6 = this, tooltipBackgroundColor = _a6.tooltipBackgroundColor, tooltipFomatter = _a6.tooltipFomatter, canvas = _a6.canvas; - var tooltip10 = new timeBarTooltip_default({ - container: canvas.get("container"), - backgroundColor: tooltipBackgroundColor - }); - var tickRects = this.tickRects; - tickRects.forEach(function(tickRect) { - var pickRect = tickRect.pickRect; - pickRect.on("mouseenter", function(e4) { - var rect3 = e4.target; - if (rect3.get("type") !== "rect") - return; - var id = parseInt(rect3.get("name").split("-")[2], 10); - var clientPoint = canvas.getClientByPoint(tickRects[id].x, tickRects[id].y); - tooltip10.show({ - x: tickRects[id].x, - y: tickRects[id].y, - clientX: clientPoint.x, - clientY: clientPoint.y, - text: tooltipFomatter ? tooltipFomatter(tickRects[id].value) : tickRects[id].value - }); - }); - pickRect.on("mouseleave", function(e4) { - tooltip10.hide(); - }); - }); - var group3 = this.group; - group3.on("".concat(PLAY_PAUSE_BTN, ":click"), function() { - _this.isPlay = !_this.isPlay; - _this.changePlayStatus(); - }); - group3.on("".concat(NEXT_STEP_BTN, ":click"), function() { - _this.updateStartEnd(1); - }); - group3.on("".concat(PRE_STEP_BTN, ":click"), function() { - _this.updateStartEnd(-1); - }); - group3.on(TIMEBAR_CONFIG_CHANGE, function(_a7) { - var type2 = _a7.type, speed = _a7.speed; - _this.currentSpeed = speed; - }); - }; - TimeBarSlice2.prototype.changePlayStatus = function(isSync) { - if (isSync === void 0) { - isSync = true; - } - this.controllerBtnGroup.playButton.update({ - isPlay: this.isPlay - }); - if (this.isPlay) { - this.playHandler = this.startPlay(); - this.graph.emit(TIMELINE_START, null); - } else { - if (this.playHandler) { - if (typeof window !== "undefined") - window.cancelAnimationFrame(this.playHandler); - if (isSync) { - this.graph.emit(TIMELINE_END, null); - } - } - } - }; - TimeBarSlice2.prototype.startPlay = function() { - var _this = this; - return typeof window !== "undefined" ? window.requestAnimationFrame(function() { - var speed = _this.currentSpeed; - if (_this.frameCount % (60 / speed) === 0) { - _this.frameCount = 0; - _this.updateStartEnd(1); - } - _this.frameCount++; - if (_this.isPlay) { - _this.playHandler = _this.startPlay(); - } - }) : void 0; - }; - TimeBarSlice2.prototype.updateStartEnd = function(sign) { - var self2 = this; - var tickRects = this.tickRects; - var ticksLength = tickRects.length; - var unselectedTickStyle = this.unselectedTickStyle; - var selectedTickStyle = this.selectedTickStyle; - var previousEndTickRectId = self2.endTickRectId; - if (sign > 0) { - self2.endTickRectId++; - } else { - tickRects[self2.endTickRectId].rect.attr(unselectedTickStyle); - self2.endTickRectId--; - } - if (previousEndTickRectId !== self2.startTickRectId) { - if (self2.endTickRectId < self2.startTickRectId) { - self2.startTickRectId = self2.endTickRectId; - } - } else { - for (var i4 = self2.startTickRectId; i4 <= self2.endTickRectId - 1; i4++) { - tickRects[i4].rect.attr(unselectedTickStyle); - } - self2.startTickRectId = self2.endTickRectId; - } - if (tickRects[self2.endTickRectId]) { - tickRects[self2.endTickRectId].rect.attr(selectedTickStyle); - var start = self2.startTickRectId / ticksLength; - var end2 = self2.endTickRectId / ticksLength; - this.graph.emit(VALUE_CHANGE, { - value: [start, end2] - }); - } - }; - TimeBarSlice2.prototype.destory = function() { - this.graph.off(VALUE_CHANGE); - var group3 = this.sliceGroup; - group3.off("click"); - group3.off("dragstart"); - group3.off("dragover"); - group3.off("drop"); - this.tickRects.forEach(function(tickRect) { - var pickRect = tickRect.pickRect; - pickRect.off("mouseenter"); - pickRect.off("mouseleave"); - }); - this.tickRects.length = 0; - group3.off("".concat(PLAY_PAUSE_BTN, ":click")); - group3.off("".concat(NEXT_STEP_BTN, ":click")); - group3.off("".concat(PRE_STEP_BTN, ":click")); - group3.off(TIMEBAR_CONFIG_CHANGE); - this.sliceGroup.destroy(); - }; - return TimeBarSlice2; -}(); -var timeBarSlice_default = TimeBarSlice; - -// node_modules/@antv/g6-plugin/es/timeBar/index.js -var import_util569 = __toModule(require_lib()); -var __extends12 = function() { - var _extendStatics = function extendStatics(d3, b10) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) { - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - } - }; - return _extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - _extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -var __assign15 = function() { - __assign15 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) { - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - } - return t4; - }; - return __assign15.apply(this, arguments); -}; -var __rest41 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) { - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - } - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var DEFAULT_SIMPLE_HEIGHT = 4; -var DEFAULT_TREND_HEIGHT = 26; -var TimeBar = function(_super) { - __extends12(TimeBar3, _super); - function TimeBar3(config) { - return _super.call(this, config) || this; - } - TimeBar3.prototype.getDefaultCfgs = function() { - return { - container: null, - className: "g6-component-timebar", - padding: 10, - type: "trend", - trend: { - data: [], - isArea: false, - smooth: true - }, - controllerCfg: { - speed: 1, - loop: false - }, - slider: { - start: 0.1, - end: 0.9, - minText: "min", - maxText: "max" - }, - tick: { - start: 0.1, - end: 0.9, - data: [] - }, - textStyle: {}, - filterEdge: false, - filterItemTypes: ["node"], - containerCSS: {} - }; - }; - TimeBar3.prototype.initContainer = function() { - var graph = this.get("graph"); - var _a6 = this._cfgs, width2 = _a6.width, height = _a6.height; - var className = this.get("className") || "g6-component-timebar"; - var container2 = this.get("container"); - var graphContainer = this.get("graph").get("container"); - var timeBarContainer; - if (!container2) { - timeBarContainer = createDom("
      ")); - modifyCSS(timeBarContainer, { - position: "relative" - }); - } else { - if ((0, import_util569.isString)(container2)) { - container2 = document.getElementById(container2); - } - timeBarContainer = container2; - } - graphContainer.appendChild(timeBarContainer); - this.set("timeBarContainer", timeBarContainer); - var canvas; - var renderer = graph.get("renderer"); - if (renderer === "SVG") { - canvas = new canvas_default3({ - container: timeBarContainer, - width: width2, - height - }); - } else { - canvas = new canvas_default2({ - container: timeBarContainer, - width: width2, - height - }); - } - if (this.get("containerCSS")) - modifyCSS(timeBarContainer, this.get("containerCSS")); - this.set("canvas", canvas); - }; - TimeBar3.prototype.init = function() { - this.initContainer(); - var canvas = this.get("canvas"); - var timeBarGroup = canvas.addGroup({ - name: "timebar-group" - }); - this.set("timeBarGroup", timeBarGroup); - this.renderTrend(); - this.initEvent(); - var fontFamily = typeof window !== "undefined" ? window.getComputedStyle(document.body, null).getPropertyValue("font-family") || "Arial, sans-serif" : "Arial, sans-serif"; - this.set("fontFamily", fontFamily); - }; - TimeBar3.prototype.renderTrend = function() { - var _this = this; - var _a6 = this._cfgs, width2 = _a6.width, x6 = _a6.x, y5 = _a6.y, padding3 = _a6.padding, type2 = _a6.type, trend = _a6.trend, slider3 = _a6.slider, controllerCfg = _a6.controllerCfg, textStyle2 = _a6.textStyle, tick = _a6.tick, backgroundStyle = _a6.backgroundStyle, foregroundStyle = _a6.foregroundStyle; - var data3 = trend.data, other2 = __rest41(trend, ["data"]); - var realWidth = width2 - 2 * padding3; - var defaultHeight = type2 === "trend" ? DEFAULT_TREND_HEIGHT : DEFAULT_SIMPLE_HEIGHT; - var graph = this.get("graph"); - var group3 = this.get("timeBarGroup"); - var canvas = this.get("canvas"); - var timebar = null; - if (type2 === "trend" || type2 === "simple") { - var getValue_1 = this.get("getValue"); - timebar = new trendTimeBar_default(__assign15(__assign15({ - graph, - canvas, - group: group3, - type: type2, - x: x6 + padding3, - y: type2 === "trend" ? y5 + padding3 : y5 + padding3 + 15, - width: realWidth, - height: defaultHeight, - padding: padding3, - backgroundStyle, - foregroundStyle, - trendCfg: __assign15(__assign15({}, other2), { - data: data3.map(function(d3) { - return (getValue_1 === null || getValue_1 === void 0 ? void 0 : getValue_1(d3)) || d3.value; - }) - }) - }, slider3), { - tick: { - ticks: data3, - tickLabelFormatter: tick.tickLabelFormatter, - tickLabelStyle: tick.tickLabelStyle, - tickLineStyle: tick.tickLineStyle - }, - handlerStyle: __assign15(__assign15({}, slider3.handlerStyle), { - height: slider3.height || defaultHeight - }), - controllerCfg, - textStyle: textStyle2 - })); - } else if (type2 === "tick") { - timebar = new timeBarSlice_default(__assign15({ - graph, - canvas, - group: group3, - x: x6 + padding3, - y: y5 + padding3, - width: width2, - height: 42, - padding: 2 - }, tick)); - } - var handleMouseUp = function handleMouseUp2() { - var timebarInstance = _this.get("timebar"); - timebarInstance.draggingHandler = false; - if (timebarInstance.isPlay) { - timebarInstance.isPlay = false; - timebarInstance.currentHandler = timebarInstance.maxHandlerShape; - timebarInstance.changePlayStatus(); - } - document.removeEventListener("mouseup", handleMouseUp2); - }; - canvas.on("mousedown", function(e4) { - if (e4.target.get("name") === "maxHandlerShape-handler" || e4.target.get("name") === "minHandlerShape-handler" || e4.target === timebar.foregroundShape) { - document.addEventListener("mouseup", handleMouseUp); - } - }); - this.set("timebar", timebar); - }; - TimeBar3.prototype.filterData = function(evt) { - var _a6; - var value2 = evt.value; - var trendData = null; - var type2 = this._cfgs.type; - if (type2 === "trend" || type2 === "simple") { - trendData = this._cfgs.trend.data; - } else if (type2 === "tick") { - trendData = this._cfgs.tick.data; - } - if (!trendData || trendData.length === 0) { - console.warn("\u8BF7\u914D\u7F6E TimeBar \u7EC4\u4EF6\u7684\u6570\u636E"); - return; - } - var rangeChange = this.get("rangeChange"); - var graph = this.get("graph"); - var min13 = Math.round(trendData.length * value2[0]); - var max15 = Math.round(trendData.length * value2[1]); - max15 = max15 >= trendData.length ? trendData.length - 1 : max15; - min13 = min13 >= trendData.length ? trendData.length - 1 : min13; - var tickLabelFormatter = (_a6 = this._cfgs.tick) === null || _a6 === void 0 ? void 0 : _a6.tickLabelFormatter; - var minText = tickLabelFormatter ? tickLabelFormatter(trendData[min13]) : trendData[min13].date; - var maxText = tickLabelFormatter ? tickLabelFormatter(trendData[max15]) : trendData[max15].date; - if (type2 !== "tick") { - var timebar = this.get("timebar"); - timebar.setText(minText, maxText); - } - if (rangeChange) { - rangeChange(graph, minText, maxText); - } else { - if (!this.cacheGraphData || this.cacheGraphData.nodes && this.cacheGraphData.nodes.length === 0) { - this.cacheGraphData = graph.get("data"); - } - var filterItemTypes = this.get("filterItemTypes"); - var changeData = this.get("changeData"); - var getDate_1 = this.get("getDate"); - var shouldIgnore_1 = this.get("shouldIgnore"); - var minDate_1 = trendData[min13].date, maxDate_1 = trendData[max15].date; - if (changeData || changeData === void 0) { - var filterNodes = this.cacheGraphData.nodes; - var filterEdges = this.cacheGraphData.edges; - if (filterItemTypes.includes("node")) { - filterNodes = filterNodes.filter(function(node) { - var date = +((getDate_1 === null || getDate_1 === void 0 ? void 0 : getDate_1(node)) || node.date); - return date >= minDate_1 && date <= maxDate_1 || (shouldIgnore_1 === null || shouldIgnore_1 === void 0 ? void 0 : shouldIgnore_1("node", node, { - min: minDate_1, - max: maxDate_1 - })); - }); - var nodeIds_1 = filterNodes.map(function(node) { - return node.id; - }); - if (filterEdges) { - filterEdges = filterEdges.filter(function(edge2) { - return nodeIds_1.includes(edge2.source) && nodeIds_1.includes(edge2.target) || (shouldIgnore_1 === null || shouldIgnore_1 === void 0 ? void 0 : shouldIgnore_1("edge", edge2, { - min: minDate_1, - max: maxDate_1 - })); - }); - } - } - if (this.get("filterEdge") || filterItemTypes.includes("edge")) { - filterEdges = filterEdges.filter(function(edge2) { - var date = +((getDate_1 === null || getDate_1 === void 0 ? void 0 : getDate_1(edge2)) || edge2.date); - return date >= minDate_1 && date <= maxDate_1 || (shouldIgnore_1 === null || shouldIgnore_1 === void 0 ? void 0 : shouldIgnore_1("edge", edge2, { - min: minDate_1, - max: maxDate_1 - })); - }); - } - graph.changeData({ - nodes: filterNodes, - edges: filterEdges - }); - } else { - if (filterItemTypes.includes("node")) { - graph.getNodes().forEach(function(node) { - var model = node.getModel(); - if (shouldIgnore_1 === null || shouldIgnore_1 === void 0 ? void 0 : shouldIgnore_1("node", model, { - min: minDate_1, - max: maxDate_1 - })) - return; - var date = +((getDate_1 === null || getDate_1 === void 0 ? void 0 : getDate_1(model)) || model.date); - if (date < minDate_1 || date > maxDate_1) { - graph.hideItem(node); - } else { - graph.showItem(node); - } - }); - } - if (this.get("filterEdge") || filterItemTypes.includes("edge")) { - graph.getEdges().forEach(function(edge2) { - var model = edge2.getModel(); - if (shouldIgnore_1 === null || shouldIgnore_1 === void 0 ? void 0 : shouldIgnore_1("edge", model, { - min: trendData[min13].date, - max: trendData[max15].date - })) - return; - var date = +((getDate_1 === null || getDate_1 === void 0 ? void 0 : getDate_1(model)) || model.date); - if (date < trendData[min13].date || date > trendData[max15].date) { - graph.hideItem(edge2); - } else { - graph.showItem(edge2); - } - }); - } - } - } - }; - TimeBar3.prototype.initEvent = function() { - var _this = this; - var start = 0; - var end2 = 0; - var type2 = this._cfgs.type; - if (!type2 || type2 === "trend" || type2 === "simple") { - start = this._cfgs.slider.start; - end2 = this._cfgs.slider.end; - } else if (type2 === "tick") { - start = this._cfgs.tick.start; - end2 = this._cfgs.tick.end; - } - var graph = this.get("graph"); - graph.on("afterrender", function(e4) { - _this.filterData({ - value: [start, end2] - }); - }); - graph.on(VALUE_CHANGE, (0, import_util569.throttle)(function(e4) { - _this.filterData(e4); - }, 200, { - trailing: true, - leading: true - })); - }; - TimeBar3.prototype.destroy = function() { - var timebar = this.get("timebar"); - if (timebar && timebar.destory) { - timebar.destory(); - } - _super.prototype.destroy.call(this); - var timeBarContainer = this.get("timeBarContainer"); - if (timeBarContainer) { - var container2 = this.get("container"); - if (!container2) { - container2 = this.get("graph").get("container"); - } - if ((0, import_util569.isString)(container2)) { - container2 = document.getElementById(container2); - } - container2.removeChild(timeBarContainer); - } - }; - return TimeBar3; -}(base_default18); -var timeBar_default = TimeBar; - -// node_modules/@antv/g6-plugin/es/imageMinimap/index.js -var import_util570 = __toModule(require_lib()); -var __extends13 = function() { - var _extendStatics = function extendStatics(d3, b10) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) { - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - } - }; - return _extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - _extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -var applyMatrix3 = util_default.applyMatrix; -function getImgNaturalDimension(img, callback) { - var nWidth, nHeight; - if (img.naturalWidth) { - nWidth = img.naturalWidth; - nHeight = img.naturalHeight; - } else { - var image_1 = new Image(); - image_1.src = img.src; - image_1.onload = function() { - if (callback) - callback(image_1.width, image_1.height); - }; - } - return [nWidth, nHeight]; -} -var ImageMiniMap = function(_super) { - __extends13(ImageMiniMap2, _super); - function ImageMiniMap2(config) { - return _super.call(this, config) || this; - } - ImageMiniMap2.prototype.getDefaultCfgs = function() { - return { - container: null, - className: "g6-minimap", - viewportClassName: "g6-minimap-viewport", - width: 200, - delegateStyle: { - fill: "#40a9ff", - stroke: "#096dd9" - }, - refresh: true - }; - }; - ImageMiniMap2.prototype.getEvents = function() { - return { - beforepaint: "updateViewport", - beforeanimate: "disableRefresh", - afteranimate: "enableRefresh", - viewportchange: "disableOneRefresh" - }; - }; - ImageMiniMap2.prototype.disableRefresh = function() { - this.set("refresh", false); - }; - ImageMiniMap2.prototype.enableRefresh = function() { - this.set("refresh", true); - this.updateCanvas(); - }; - ImageMiniMap2.prototype.disableOneRefresh = function() { - this.set("viewportChange", true); - }; - ImageMiniMap2.prototype.initViewport = function() { - var _this = this; - var cfgs = this._cfgs; - var graph = cfgs.graph; - if (this.destroyed) - return; - var containerDOM = this.get("container"); - if ((0, import_util570.isString)(containerDOM)) { - containerDOM = document.getElementById(containerDOM); - } - var viewport = createDom("
      \n
      ")); - var x6 = 0; - var y5 = 0; - var dragging = false; - var left2 = 0; - var top = 0; - var width2 = 0; - var height = 0; - var ratio = 0; - var zoom2 = 0; - containerDOM.addEventListener("mousedown", function(e4) { - cfgs.refresh = false; - if (e4.target !== viewport) { - return; - } - var style = viewport.style; - width2 = parseInt(style.width, 10); - height = parseInt(style.height, 10); - var cWidth = _this.get("width"); - var cHeight = _this.get("height"); - if (width2 > cWidth || height > cHeight) { - return; - } - zoom2 = graph.getZoom(); - ratio = _this.get("ratio"); - dragging = true; - x6 = e4.clientX; - y5 = e4.clientY; - }, false); - containerDOM.addEventListener("mousemove", function(e4) { - if (!dragging || (0, import_util570.isNil)(e4.clientX) || (0, import_util570.isNil)(e4.clientY)) { - return; - } - var cWidth = _this.get("width"); - var cHeight = _this.get("height"); - var style = viewport.style; - left2 = parseInt(style.left, 10); - top = parseInt(style.top, 10); - width2 = parseInt(style.width, 10); - height = parseInt(style.height, 10); - var dx = x6 - e4.clientX; - var dy = y5 - e4.clientY; - if (left2 - dx < 0) { - dx = left2; - } else if (left2 - dx + width2 >= cWidth) { - dx = 0; - } - if (top - dy < 0) { - dy = top; - } else if (top - dy + height >= cHeight) { - dy = 0; - } - left2 -= dx; - top -= dy; - modifyCSS(viewport, { - left: "".concat(left2, "px"), - top: "".concat(top, "px") - }); - graph.translate(dx * zoom2 / ratio, dy * zoom2 / ratio); - x6 = e4.clientX; - y5 = e4.clientY; - }, false); - containerDOM.addEventListener("mouseleave", function() { - dragging = false; - cfgs.refresh = true; - }, false); - containerDOM.addEventListener("mouseup", function() { - dragging = false; - cfgs.refresh = true; - }, false); - this.set("viewport", viewport); - containerDOM.appendChild(viewport); - }; - ImageMiniMap2.prototype.updateViewport = function() { - if (this.destroyed) - return; - var ratio = this.get("ratio"); - var cWidth = this.get("width"); - var cHeight = this.get("height"); - var graph = this.get("graph"); - var graphWidth2 = graph.get("width"); - var graphHeight2 = graph.get("height"); - var aspectRatio = graphWidth2 / graphHeight2; - var graphGroup = graph.getGroup(); - var graphCanvasBBox = graphGroup.getCanvasBBox(); - var graphCanvasBBoxMean = [(graphCanvasBBox.minX + graphCanvasBBox.maxX) / 2, (graphCanvasBBox.minY + graphCanvasBBox.maxY) / 2]; - var graphCanvasBBoxSize = [graphCanvasBBox.maxX - graphCanvasBBox.minX, graphCanvasBBox.maxY - graphCanvasBBox.minY]; - var expandedGraphCanvasBBox = { - centerX: graphCanvasBBoxMean[0], - centerY: graphCanvasBBoxMean[1], - width: 0, - height: 0, - minX: 0, - minY: 0 - }; - if (graphCanvasBBox[0] / graphCanvasBBox[1] > aspectRatio) { - expandedGraphCanvasBBox.width = graphCanvasBBoxSize[0]; - expandedGraphCanvasBBox.height = expandedGraphCanvasBBox.width / aspectRatio; - } else { - expandedGraphCanvasBBox.height = graphCanvasBBoxSize[1]; - expandedGraphCanvasBBox.width = expandedGraphCanvasBBox.height * aspectRatio; - } - expandedGraphCanvasBBox.minX = graphCanvasBBoxMean[0] - expandedGraphCanvasBBox.width / 2; - expandedGraphCanvasBBox.minY = graphCanvasBBoxMean[1] - expandedGraphCanvasBBox.height / 2; - var graphMatrix = graphGroup.getMatrix(); - if (!graphMatrix) - graphMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - var invertGraphMatrix = mat3_exports.invert([1, 0, 0, 0, 1, 0, 0, 0, 1], graphMatrix); - var minXY = applyMatrix3({ - x: expandedGraphCanvasBBox.minX, - y: expandedGraphCanvasBBox.minY - }, invertGraphMatrix); - var topLeft = graph.getCanvasByPoint(minXY.x, minXY.y); - var viewport = this.get("viewport"); - if (!viewport) { - this.initViewport(); - } - var vpToMc = graphWidth2 / expandedGraphCanvasBBox.width; - var width2 = vpToMc * cWidth; - var height = vpToMc * cHeight; - var left2 = cWidth * -topLeft.x / expandedGraphCanvasBBox.width; - var top = cHeight * -topLeft.y / expandedGraphCanvasBBox.height; - var right2 = left2 + width2; - var bottom = top + height; - if (left2 < 0) { - width2 += left2; - left2 = 0; - } - if (right2 > cWidth) { - width2 = width2 - (right2 - cWidth); - } - if (top < 0) { - height += top; - top = 0; - } - if (bottom > cHeight) { - height = height - (bottom - cHeight); - } - this.set("ratio", ratio); - var correctLeft = "".concat(left2, "px"); - var correctTop = "".concat(top, "px"); - modifyCSS(viewport, { - left: correctLeft, - top: correctTop, - width: "".concat(width2, "px"), - height: "".concat(height, "px") - }); - }; - ImageMiniMap2.prototype.init = function() { - this.initContainer(); - }; - ImageMiniMap2.prototype.initContainer = function() { - var self2 = this; - var graph = self2.get("graph"); - var graphWidth2 = graph.get("width"); - var graphHeight2 = graph.get("height"); - var aspectRatio = graphHeight2 / graphWidth2; - var className = self2.get("className"); - var parentNode = self2.get("container"); - var cWidth = self2.get("width"); - var cHeight = self2.get("height"); - if (!cWidth && !cHeight) { - cWidth = 200; - } - if (cWidth) { - cHeight = aspectRatio * cWidth; - self2.set("height", cHeight); - } else { - cWidth = 1 / aspectRatio * cHeight; - self2.set("width", cWidth); - } - var container2 = createDom("
      ")); - if ((0, import_util570.isString)(parentNode)) { - parentNode = document.getElementById(parentNode); - } - if (parentNode) { - parentNode.appendChild(container2); - } else { - graph.get("container").appendChild(container2); - } - self2.set("container", container2); - var containerDOM = createDom('
      '); - container2.appendChild(containerDOM); - var span = createDom(''); - containerDOM.appendChild(span); - self2.set("containerDOM", containerDOM); - self2.set("containerSpan", span); - var img = createDom('')); - self2.set("imgDOM", img); - self2.updateImgSize(); - span.appendChild(img); - self2.updateCanvas(); - }; - ImageMiniMap2.prototype.updateImgSize = function() { - var self2 = this; - var imgDOM = self2.get("imgDOM"); - var cWidth = self2.get("width"); - var cHeight = self2.get("height"); - imgDOM.onload = function() { - var naturalSize = getImgNaturalDimension(imgDOM); - if (naturalSize[0] > naturalSize[1]) { - imgDOM.width = cWidth; - } else { - imgDOM.height = cHeight; - } - }; - }; - ImageMiniMap2.prototype.updateCanvas = function() { - var isRefresh = this.get("refresh"); - if (!isRefresh) { - return; - } - var graph = this.get("graph"); - if (graph.get("destroyed")) { - return; - } - if (this.get("viewportChange")) { - this.set("viewportChange", false); - this.updateViewport(); - } - var cWidth = this.get("width"); - var graphBBox = graph.get("canvas").getCanvasBBox(); - var width2 = graphBBox.width; - var ratio = cWidth / width2; - this.set("ratio", ratio); - this.updateViewport(); - }; - ImageMiniMap2.prototype.getViewport = function() { - return this.get("viewport"); - }; - ImageMiniMap2.prototype.getContainer = function() { - return this.get("container"); - }; - ImageMiniMap2.prototype.updateGraphImg = function(img) { - var self2 = this; - var oriImgDOM = self2.get("imgDOM"); - oriImgDOM.remove(); - self2.set("graphImg", img); - var imgDOM = createDom('')); - self2.set("imgDOM", imgDOM); - imgDOM.src = img; - self2.updateImgSize(); - var span = self2.get("containerSpan"); - span.appendChild(imgDOM); - self2.updateCanvas(); - }; - ImageMiniMap2.prototype.destroy = function() { - var container2 = this.get("container"); - container2.parentNode.removeChild(container2); - }; - return ImageMiniMap2; -}(base_default18); -var imageMinimap_default = ImageMiniMap; - -// node_modules/@antv/g6-plugin/es/edgeFilterLens/index.js -var import_util571 = __toModule(require_lib()); -var __extends14 = function() { - var _extendStatics = function extendStatics(d3, b10) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) { - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - } - }; - return _extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - _extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -var __assign16 = function() { - __assign16 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) { - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - } - return t4; - }; - return __assign16.apply(this, arguments); -}; -var distance12 = util_default.distance; -var DELTA3 = 0.05; -var lensDelegateStyle2 = { - stroke: "#000", - strokeOpacity: 0.8, - lineWidth: 2, - fillOpacity: 1, - fill: "#fff" -}; -var EdgeFilterLens = function(_super) { - __extends14(EdgeFilterLens3, _super); - function EdgeFilterLens3(config) { - return _super.call(this, config) || this; - } - EdgeFilterLens3.prototype.getDefaultCfgs = function() { - return { - type: "both", - trigger: "mousemove", - r: 60, - delegateStyle: (0, import_util571.clone)(lensDelegateStyle2), - showLabel: "edge", - scaleRBy: "wheel" - }; - }; - EdgeFilterLens3.prototype.getEvents = function() { - var events; - switch (this.get("trigger")) { - case "click": - events = { - click: "filter" - }; - break; - case "drag": - events = { - click: "createDelegate" - }; - break; - default: - events = { - mousemove: "filter" - }; - break; - } - return events; - }; - EdgeFilterLens3.prototype.init = function() { - var self2 = this; - var showLabel = self2.get("showLabel"); - var showNodeLabel = showLabel === "node" || showLabel === "both"; - var showEdgeLabel = showLabel === "edge" || showLabel === "both"; - self2.set("showNodeLabel", showNodeLabel); - self2.set("showEdgeLabel", showEdgeLabel); - var shouldShow = self2.get("shouldShow"); - if (!shouldShow) - self2.set("shouldShow", function() { - return true; - }); - }; - EdgeFilterLens3.prototype.createDelegate = function(e4) { - var self2 = this; - var lensDelegate = self2.get("delegate"); - if (!lensDelegate || lensDelegate.destroyed) { - self2.filter(e4); - lensDelegate = self2.get("delegate"); - lensDelegate.on("dragstart", function(evt) { - }); - lensDelegate.on("drag", function(evt) { - self2.filter(evt); - }); - if (this.get("scaleRBy") === "wheel") { - lensDelegate.on("mousewheel", function(evt) { - self2.scaleRByWheel(evt); - }); - } - } - }; - EdgeFilterLens3.prototype.scaleRByWheel = function(e4) { - var self2 = this; - if (!e4 || !e4.originalEvent) - return; - if (e4.preventDefault) - e4.preventDefault(); - var graph = self2.get("graph"); - var ratio; - var lensDelegate = self2.get("delegate"); - var lensCenter = lensDelegate ? { - x: lensDelegate.attr("x"), - y: lensDelegate.attr("y") - } : void 0; - var mousePos = lensCenter || graph.getPointByClient(e4.clientX, e4.clientY); - if (e4.originalEvent.wheelDelta < 0) { - ratio = 1 - DELTA3; - } else { - ratio = 1 / (1 - DELTA3); - } - var maxR = self2.get("maxR"); - var minR = self2.get("minR"); - var r4 = self2.get("r"); - if (r4 > (maxR || graph.get("height")) && ratio > 1 || r4 < (minR || graph.get("height") * 0.05) && ratio < 1) { - ratio = 1; - } - r4 *= ratio; - self2.set("r", r4); - self2.filter(e4); - }; - EdgeFilterLens3.prototype.filter = function(e4) { - var self2 = this; - var graph = self2.get("graph"); - var nodes = graph.getNodes(); - var hitNodesMap = {}; - var r4 = self2.get("r"); - var type2 = self2.get("type"); - var fCenter = { - x: e4.x, - y: e4.y - }; - self2.updateDelegate(fCenter, r4); - var shouldShow = self2.get("shouldShow"); - var vShapes = self2.get("vShapes"); - if (vShapes) { - vShapes.forEach(function(shape) { - shape.remove(); - shape.destroy(); - }); - } - vShapes = []; - nodes.forEach(function(node) { - var model = node.getModel(); - var x6 = model.x, y5 = model.y; - if (distance12({ - x: x6, - y: y5 - }, fCenter) < r4) { - hitNodesMap[model.id] = node; - } - }); - var edges = graph.getEdges(); - var hitEdges = []; - edges.forEach(function(edge2) { - var model = edge2.getModel(); - var sourceId = model.source; - var targetId = model.target; - if (shouldShow(model)) { - if (type2 === "only-source" || type2 === "one") { - if (hitNodesMap[sourceId] && !hitNodesMap[targetId]) - hitEdges.push(edge2); - } else if (type2 === "only-target" || type2 === "one") { - if (hitNodesMap[targetId] && !hitNodesMap[sourceId]) - hitEdges.push(edge2); - } else if (type2 === "both" && hitNodesMap[sourceId] && hitNodesMap[targetId]) { - hitEdges.push(edge2); - } - } - }); - var showNodeLabel = self2.get("showNodeLabel"); - var showEdgeLabel = self2.get("showEdgelabel"); - var group3 = graph.get("group"); - hitEdges.forEach(function(edge2) { - var shapes = edge2.get("group").get("children"); - shapes.forEach(function(shape) { - var shapeType = shape.get("type"); - var vShape = group3.addShape(shapeType, { - attrs: shape.attr() - }); - vShapes.push(vShape); - if (showNodeLabel && shapeType === "text") { - vShape.set("visible", true); - } - }); - }); - Object.keys(hitNodesMap).forEach(function(key) { - var node = hitNodesMap[key]; - var clonedGroup = node.get("group").clone(); - group3.add(clonedGroup); - vShapes.push(clonedGroup); - if (showEdgeLabel) { - var shapes = clonedGroup.get("children"); - for (var j4 = 0; j4 < shapes.length; j4++) { - var shape = shapes[j4]; - if (shape.get("type") === "text") { - shape.set("visible", true); - } - } - } - }); - self2.set("vShapes", vShapes); - }; - EdgeFilterLens3.prototype.updateParams = function(cfg) { - var self2 = this; - var r4 = cfg.r, trigger = cfg.trigger, minR = cfg.minR, maxR = cfg.maxR, scaleRBy = cfg.scaleRBy, showLabel = cfg.showLabel, shouldShow = cfg.shouldShow; - if (!isNaN(cfg.r)) { - self2.set("r", r4); - } - if (!isNaN(maxR)) { - self2.set("maxR", maxR); - } - if (!isNaN(minR)) { - self2.set("minR", minR); - } - if (trigger === "mousemove" || trigger === "click") { - self2.set("trigger", trigger); - } - if (scaleRBy === "wheel" || scaleRBy === "unset") { - self2.set("scaleRBy", scaleRBy); - self2.get("delegate").remove(); - self2.get("delegate").destroy(); - var dPercentText = self2.get("dPercentText"); - if (dPercentText) { - dPercentText.remove(); - dPercentText.destroy(); - } - } - if (showLabel === "node" || showLabel === "both") { - self2.set("showNodeLabel", true); - } - if (showLabel === "edge" || showLabel === "both") { - self2.set("showEdgeLabel", true); - } - if (shouldShow) { - self2.set("shouldShow", shouldShow); - } - }; - EdgeFilterLens3.prototype.updateDelegate = function(mCenter, r4) { - var self2 = this; - var graph = self2.get("graph"); - var lensDelegate = self2.get("delegate"); - if (!lensDelegate || lensDelegate.destroyed) { - var parent_1 = graph.get("group"); - var attrs = self2.get("delegateStyle") || lensDelegateStyle2; - lensDelegate = parent_1.addShape("circle", { - attrs: __assign16({ - r: r4, - x: mCenter.x, - y: mCenter.y - }, attrs), - name: "lens-shape", - draggable: true - }); - if (this.get("trigger") !== "drag") { - if (this.get("scaleRBy") === "wheel") { - lensDelegate.on("mousewheel", function(evt) { - self2.scaleRByWheel(evt); - }); - } - } - } else { - lensDelegate.attr({ - x: mCenter.x, - y: mCenter.y, - r: r4 - }); - } - self2.set("delegate", lensDelegate); - }; - EdgeFilterLens3.prototype.clear = function() { - var self2 = this; - var vShapes = self2.get("vShapes"); - if (vShapes) { - vShapes.forEach(function(shape) { - shape.remove(); - shape.destroy(); - }); - } - vShapes = []; - self2.set("vShapes", vShapes); - var lensDelegate = self2.get("delegate"); - if (lensDelegate && !lensDelegate.destroyed) { - lensDelegate.remove(); - lensDelegate.destroy(); - } - }; - EdgeFilterLens3.prototype.destroy = function() { - this.clear(); - }; - return EdgeFilterLens3; -}(base_default18); -var edgeFilterLens_default = EdgeFilterLens; - -// node_modules/@antv/g6-plugin/es/snapline/index.js -var import_util572 = __toModule(require_lib()); -var __extends15 = function() { - var _extendStatics = function extendStatics(d3, b10) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) { - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - } - }; - return _extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - _extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -var pointLineDistance3 = util_default.pointLineDistance; -var alignLineStyle = { - stroke: "#FA8C16", - lineWidth: 1 -}; -var SnapLine = function(_super) { - __extends15(SnapLine3, _super); - function SnapLine3(props) { - return _super.call(this, props) || this; - } - SnapLine3.prototype.getDefaultCfgs = function() { - return { - line: alignLineStyle, - itemAlignType: "center", - tolerance: 5, - horizontalLines: {}, - verticalLines: {}, - alignLines: [] - }; - }; - SnapLine3.prototype.init = function() { - }; - SnapLine3.prototype.getEvents = function() { - return { - "node:dragstart": "onDragStart", - "node:drag": "onDrag", - "node:dragend": "onDragEnd" - }; - }; - SnapLine3.prototype.onDragStart = function() { - this.initBoxLine(); - }; - SnapLine3.prototype.onDrag = function(e4) { - var item = e4.item; - var delegateShape = item.get("delegateShape") || item; - var bbox = delegateShape.getBBox(); - var model = item.getModel(); - var dx = model.x - bbox.x; - var dy = model.y - bbox.y; - this.show({ - x: bbox.minX + dx, - y: bbox.minY + dy - }, { - width: bbox.width, - height: bbox.height - }); - }; - SnapLine3.prototype.onDragEnd = function() { - this.destory(); - }; - SnapLine3.prototype.initBoxLine = function() { - var _a6 = this._cfgs, horizontalLines = _a6.horizontalLines, verticalLines = _a6.verticalLines, itemAlignType = _a6.itemAlignType; - var graph = this.get("graph"); - var nodes = graph.getNodes(); - nodes.forEach(function(item) { - var bbox = item.getBBox(); - var nodeId = item.get("id"); - if (itemAlignType === true || itemAlignType === "horizontal") { - horizontalLines["".concat(nodeId, "tltr")] = [bbox.minX, bbox.minY, bbox.maxX, bbox.minY, item]; - horizontalLines["".concat(nodeId, "lcrc")] = [bbox.minX, bbox.centerY, bbox.maxX, bbox.centerY, item]; - horizontalLines["".concat(nodeId, "blbr")] = [bbox.minX, bbox.maxY, bbox.maxX, bbox.maxY, item]; - } else if (itemAlignType === "center") { - horizontalLines["".concat(nodeId, "lcrc")] = [bbox.minX, bbox.centerY, bbox.maxX, bbox.centerY, item]; - } - if (itemAlignType === true || itemAlignType === "vertical") { - verticalLines["".concat(nodeId, "tlbl")] = [bbox.minX, bbox.minY, bbox.minX, bbox.maxY, item]; - verticalLines["".concat(nodeId, "tcbc")] = [bbox.centerX, bbox.minY, bbox.centerX, bbox.maxY, item]; - verticalLines["".concat(nodeId, "trbr")] = [bbox.maxX, bbox.minY, bbox.maxX, bbox.maxY, item]; - } else if (itemAlignType === "center") { - verticalLines["".concat(nodeId, "tcbc")] = [bbox.centerX, bbox.minY, bbox.centerX, bbox.maxY, item]; - } - }); - }; - SnapLine3.prototype.show = function(point2, bbox) { - var originPoint = (0, import_util572.mix)({}, point2); - this.itemAlign(point2, bbox, originPoint); - return point2; - }; - SnapLine3.prototype.itemAlign = function(point2, bbox, originPoint) { - var _this = this; - var _a6 = this._cfgs, horizontalLines = _a6.horizontalLines, verticalLines = _a6.verticalLines, tolerance3 = _a6.tolerance; - var tc = { - x: originPoint.x + bbox.width / 2, - y: originPoint.y - }; - var cc = { - x: originPoint.x + bbox.width / 2, - y: originPoint.y + bbox.height / 2 - }; - var bc = { - x: originPoint.x + bbox.width / 2, - y: originPoint.y + bbox.height - }; - var lc = { - x: originPoint.x, - y: originPoint.y + bbox.height / 2 - }; - var rc = { - x: originPoint.x + bbox.width, - y: originPoint.y + bbox.height / 2 - }; - var horizontalDis = []; - var verticalDis = []; - var alignCfg = null; - this.clearAlignLine(); - (0, import_util572.each)(horizontalLines, function(line2) { - if (line2[4].isVisible) { - horizontalDis.push(_this.getLineDisObject(line2, tc)); - horizontalDis.push(_this.getLineDisObject(line2, cc)); - horizontalDis.push(_this.getLineDisObject(line2, bc)); - } - }); - (0, import_util572.each)(verticalLines, function(line2) { - if (line2[4].isVisible) { - verticalDis.push(_this.getLineDisObject(line2, lc)); - verticalDis.push(_this.getLineDisObject(line2, cc)); - verticalDis.push(_this.getLineDisObject(line2, rc)); - } - }); - horizontalDis.sort(function(a4, b10) { - return a4.dis - b10.dis; - }); - verticalDis.sort(function(a4, b10) { - return a4.dis - b10.dis; - }); - if (horizontalDis.length !== 0 && horizontalDis[0].dis < tolerance3) { - point2.y = horizontalDis[0].line[1] - horizontalDis[0].point.y + originPoint.y; - alignCfg = { - type: "item", - horizontals: [horizontalDis[0]] - }; - for (var i4 = 1; i4 < 3; i4++) { - if (horizontalDis[0].dis === horizontalDis[i4].dis) { - alignCfg.horizontals.push(horizontalDis[i4]); - } - } - } - if (verticalDis.length !== 0 && verticalDis[0].dis < tolerance3) { - point2.x = verticalDis[0].line[0] - verticalDis[0].point.x + originPoint.x; - if (!alignCfg) { - alignCfg = { - type: "item", - verticals: [verticalDis[0]] - }; - } else { - alignCfg.verticals = [verticalDis[0]]; - } - for (var i4 = 1; i4 < 3; i4++) { - if (verticalDis[0].dis === verticalDis[i4].dis) { - alignCfg.verticals.push(verticalDis[i4]); - } - } - } - if (alignCfg) { - alignCfg.bbox = bbox; - this.addAlignLine(alignCfg); - } - }; - SnapLine3.prototype.addAlignLine = function(cfg) { - var bbox = cfg.bbox, type2 = cfg.type, horizontals = cfg.horizontals, verticals = cfg.verticals; - var _a6 = this._cfgs, lineStyle = _a6.line, alignLines = _a6.alignLines; - var graph = this.get("graph"); - var group3 = graph.get("group"); - if (type2 === "item") { - if (horizontals) { - (0, import_util572.each)(horizontals, function(horizontal) { - var refLine = horizontal.line, refPoint = horizontal.point; - var lineCenterX = (refLine[0] + refLine[2]) / 2; - var x1; - var x22; - if (refPoint.x < lineCenterX) { - x1 = refPoint.x - bbox.width / 2; - x22 = Math.max(refLine[0], refLine[2]); - } else { - x1 = refPoint.x + bbox.width / 2; - x22 = Math.min(refLine[0], refLine[2]); - } - var lineAttrs = (0, import_util572.mix)({ - x1, - y1: refLine[1], - x2: x22, - y2: refLine[1] - }, lineStyle); - var line2 = group3.addShape("line", { - attrs: lineAttrs, - capture: false - }); - alignLines.push(line2); - }); - } - if (verticals) { - (0, import_util572.each)(verticals, function(vertical2) { - var refLine = vertical2.line, refPoint = vertical2.point; - var lineCenterY = (refLine[1] + refLine[3]) / 2; - var y1; - var y22; - if (refPoint.y < lineCenterY) { - y1 = refPoint.y - bbox.height / 2; - y22 = Math.max(refLine[1], refLine[3]); - } else { - y1 = refPoint.y + bbox.height / 2; - y22 = Math.min(refLine[1], refLine[3]); - } - var lineAtts = (0, import_util572.mix)({ - x1: refLine[0], - y1, - x2: refLine[0], - y2: y22 - }, lineStyle); - var line2 = group3.addShape("line", { - attrs: lineAtts, - capture: false - }); - alignLines.push(line2); - }); - } - } - }; - SnapLine3.prototype.getLineDisObject = function(line2, point2) { - return { - line: line2, - point: point2, - dis: pointLineDistance3(line2, point2) - }; - }; - SnapLine3.prototype.getContainer = function() { - return this.get("container"); - }; - SnapLine3.prototype.clearAlignLine = function() { - var alignLines = this._cfgs.alignLines; - (0, import_util572.each)(alignLines, function(line2) { - line2.remove(); - }); - alignLines.length = 0; - }; - SnapLine3.prototype.destory = function() { - var _a6 = this._cfgs, horizontalLines = _a6.horizontalLines, verticalLines = _a6.verticalLines; - var graph = this.get("graph"); - var nodes = graph.getNodes(); - nodes.forEach(function(node) { - var itemId = node.get("id"); - delete horizontalLines["".concat(itemId, "tltr")]; - delete horizontalLines["".concat(itemId, "lcrc")]; - delete horizontalLines["".concat(itemId, "blbr")]; - delete verticalLines["".concat(itemId, "tlbl")]; - delete verticalLines["".concat(itemId, "tcbc")]; - delete verticalLines["".concat(itemId, "trbr")]; - }); - this.clearAlignLine(); - }; - return SnapLine3; -}(base_default18); -var snapline_default = SnapLine; - -// node_modules/@antv/g6-plugin/es/legend/index.js -var import_util573 = __toModule(require_lib()); -var __extends16 = function() { - var _extendStatics = function extendStatics(d3, b10) { - _extendStatics = Object.setPrototypeOf || { - __proto__: [] - } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) { - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - } - }; - return _extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - _extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -var __assign17 = function() { - __assign17 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) { - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - } - return t4; - }; - return __assign17.apply(this, arguments); -}; -var ALLOW_EVENTS = ["click", "mouseenter"]; -var Legend2 = function(_super) { - __extends16(Legend4, _super); - function Legend4(config) { - return _super.call(this, config) || this; - } - Legend4.prototype.getDefaultCfgs = function() { - return { - data: {}, - position: "top", - padding: 8, - margin: 8, - offsetX: 0, - offsetY: 0, - layout: "horizontal", - flipPage: false, - containerStyle: {}, - align: void 0, - horiSep: 8, - vertiSep: 8, - filter: { - enable: false, - trigger: "click" - } - }; - }; - Legend4.prototype.init = function() { - this.formatArray("padding"); - this.formatArray("margin"); - var filter17 = this.get("filter") || {}; - var multiple = filter17.multiple; - if (multiple && filter17.trigger === "mouseenter") - this.set("multiple", false); - var align = this.get("align"); - if (!align) { - var positions = this.get("position").split("-"); - if (positions.includes("left")) - align = "left"; - if (positions.includes("right")) - align = "right"; - else - align = "center"; - this.set("align", align); - } - var graph = this.get("graph"); - var graphContainer = graph.get("container"); - var container2 = createDom(`
      `); - graphContainer.appendChild(container2); - this.set("container", container2); - var size14 = this.render(); - modifyCSS(container2, this.getContainerPos(size14)); - this.bindEvents(); - }; - Legend4.prototype.getContainerPos = function(size14) { - if (size14 === void 0) { - size14 = [0, 0]; - } - var self2 = this; - var graph = self2.get("graph"); - var offsetX = this.get("offsetX"); - var offsetY = this.get("offsetY"); - var margin = this.get("margin"); - var positions = this.get("position").split("-"); - var posIdxMap = { - "top": 0, - "right": 1, - "bottom": 2, - "left": 3 - }; - var x6 = 0, y5 = 0; - var containerCSS = { - left: (graph.getWidth() - size14[0]) / 2 + x6, - top: (graph.getHeight() - size14[1]) / 2 + y5 - }; - positions.forEach(function(pos) { - var marginValue = margin[posIdxMap[pos]]; - var key = pos; - switch (pos) { - case "top": - marginValue += y5; - break; - case "left": - marginValue += x6; - break; - case "bottom": - marginValue = graph.getHeight() - size14[1] - marginValue + y5; - key = "top"; - break; - default: - marginValue = graph.getWidth() - size14[0] - marginValue + x6; - key = "left"; - break; - } - containerCSS[key] = marginValue; - }); - containerCSS.top += offsetY + graph.getContainer().offsetTop; - containerCSS.left += offsetX + graph.getContainer().offsetLeft; - Object.keys(containerCSS).forEach(function(key) { - containerCSS[key] = "".concat(containerCSS[key], "px"); - }); - return containerCSS; - }; - Legend4.prototype.bindEvents = function() { - var self2 = this; - var filter17 = self2.get("filter"); - if (!filter17 || !filter17.enable) - return; - var trigger = filter17.trigger || "click"; - if (!ALLOW_EVENTS.includes(trigger)) { - console.warn("Trigger for legend filterling must be 'click' or 'mouseenter', 'click' will take effect by default."); - trigger = "click"; - } - var lc = self2.get("legendCanvas"); - if (trigger === "mouseenter") { - lc.on("node-container:mouseenter", function(e4) { - return self2.filterData(e4); - }); - lc.on("node-container:mouseleave", function(e4) { - self2.clearFilter(); - self2.clearActiveLegend(); - }); - } else { - lc.on("node-container:click", function(e4) { - return self2.filterData(e4); - }); - lc.on("click", function(e4) { - if (e4.target && e4.target.isCanvas && e4.target.isCanvas()) { - self2.clearFilter(); - self2.clearActiveLegend(); - } - }); - } - }; - Legend4.prototype.changeData = function(data3) { - this.set("data", data3); - var size14 = this.render(); - modifyCSS(this.get("container"), this.getContainerPos(size14)); - }; - Legend4.prototype.activateLegend = function(shape) { - var filter17 = this.get("filter"); - var multiple = filter17 === null || filter17 === void 0 ? void 0 : filter17.multiple; - if (!multiple) - this.clearActiveLegend(); - var shapeGroup = shape.get("parent"); - if (shapeGroup.get("active")) { - shapeGroup.set("active", false); - if (this.findLegendItemsByState("active").length) - shapeGroup.set("inactive", true); - } else { - shapeGroup.set("inactive", false); - shapeGroup.set("active", true); - } - if (this.findLegendItemsByState("active").length) { - this.findLegendItemsByState("active", "all", false).forEach(function(subGroup) { - subGroup.set("inactive", true); - }); - } else { - this.clearActiveLegend(); - } - var stateStyles = (filter17 === null || filter17 === void 0 ? void 0 : filter17.lengedStateStyles) || {}; - var legendInactive = (stateStyles === null || stateStyles === void 0 ? void 0 : stateStyles.inactive) || { - opacity: 0.5, - "text-shape": { - opacity: 0.5 - } - }; - var legendTextInactive = legendInactive["text-shape"] || {}; - this.findLegendItemsByState("inactive").forEach(function(subGroup) { - var _a6 = subGroup.get("children"), keyShape = _a6[0], text = _a6[1]; - keyShape.attr(__assign17(__assign17({}, keyShape.get("oriAttrs")), legendInactive)); - text.attr(__assign17(__assign17({}, text.get("oriAttrs")), legendTextInactive)); - }); - var legendActive = (stateStyles === null || stateStyles === void 0 ? void 0 : stateStyles.active) || { - stroke: "#000", - lineWidth: 2, - "text-shape": { - fontWeight: "bold" - } - }; - var legendTextActive = legendActive["text-shape"] || {}; - this.findLegendItemsByState("active").forEach(function(subGroup) { - var _a6 = subGroup.get("children"), keyShape = _a6[0], text = _a6[1]; - keyShape.attr(__assign17(__assign17({}, keyShape.get("oriAttrs")), legendActive)); - text.attr(__assign17(__assign17({}, text.get("oriAttrs")), legendTextActive)); - }); - }; - Legend4.prototype.findLegendItemsByState = function(stateName, type2, value2) { - if (type2 === void 0) { - type2 = "all"; - } - if (value2 === void 0) { - value2 = true; - } - var group3 = this.get("legendCanvas").find(function(e4) { - return e4.get("name") === "root"; - }); - var nodeGroup = group3.find(function(e4) { - return e4.get("name") === "node-group"; - }); - var edgeGroup = group3.find(function(e4) { - return e4.get("name") === "edge-group"; - }); - if (type2 === "node") - return nodeGroup.get("children").filter(function(g4) { - return !!g4.get(stateName) === value2; - }); - if (type2 === "edge") - return edgeGroup.get("children").filter(function(g4) { - return !!g4.get(stateName) === value2; - }); - return nodeGroup.get("children").filter(function(g4) { - return !!g4.get(stateName) === value2; - }).concat(edgeGroup.get("children").filter(function(g4) { - return !!g4.get(stateName) === value2; - })); - }; - Legend4.prototype.clearActiveLegend = function() { - var lg = this.get("legendCanvas"); - var group3 = lg.find(function(e4) { - return e4.get("name") === "root"; - }); - var groups = [group3.find(function(e4) { - return e4.get("name") === "node-group"; - }), group3.find(function(e4) { - return e4.get("name") === "edge-group"; - })]; - groups.forEach(function(itemGroup) { - itemGroup.get("children").forEach(function(subGroup) { - subGroup.set("active", false); - subGroup.set("inactive", false); - var _a6 = subGroup.get("children"), keyShape = _a6[0], text = _a6[1]; - keyShape.attr(keyShape.get("oriAttrs")); - text.attr(text.get("oriAttrs")); - }); - }); - }; - Legend4.prototype.filterData = function(e4) { - var filter17 = this.get("filter"); - var filterFunctions = filter17 === null || filter17 === void 0 ? void 0 : filter17.filterFunctions; - if (!filter17 || !filterFunctions) - return; - var lc = this.get("legendCanvas"); - var graph = this.get("graph"); - var activeState = filter17.graphActiveState || "active"; - var inactiveState = filter17.graphInactiveState || "inactive"; - var multiple = filter17.multiple; - this.clearFilter(); - if (!multiple) - this.clearActiveLegend(); - this.activateLegend(e4.target); - var group3 = lc.find(function(e6) { - return e6.get("name") === "root"; - }); - var nodeGroup = group3.find(function(e6) { - return e6.get("name") === "node-group"; - }); - var edgeGroup = group3.find(function(e6) { - return e6.get("name") === "edge-group"; - }); - var activeNodeLegend = nodeGroup.get("children").filter(function(e6) { - return e6.get("active"); - }); - var activeEdgeLegend = edgeGroup.get("children").filter(function(e6) { - return e6.get("active"); - }); - var activeCount = 0; - var typeFuncs = ["getNodes", "getEdges"]; - typeFuncs.forEach(function(typeFunc) { - graph[typeFunc]().forEach(function(graphItem) { - var active = false; - var activeLegend = typeFunc === "getNodes" ? activeNodeLegend : activeEdgeLegend; - activeLegend.forEach(function(itemGroup) { - var func = filterFunctions[itemGroup.get("id")]; - active = active || func(graphItem.getModel()); - }); - if (active) { - graph.setItemState(graphItem, inactiveState, false); - graph.setItemState(graphItem, activeState, true); - activeCount++; - } else { - graph.setItemState(graphItem, activeState, false); - graph.setItemState(graphItem, inactiveState, true); - } - }); - }); - if (!activeCount) - typeFuncs.forEach(function(typeFunc) { - graph[typeFunc]().forEach(function(graphItem) { - graph.clearItemStates(graphItem, [inactiveState]); - }); - }); - }; - Legend4.prototype.clearFilter = function() { - var graph = this.get("graph"); - var filter17 = this.get("filter"); - if (!filter17) - return; - var activeState = filter17.graphActiveState || "active"; - var inactiveState = filter17.graphInactiveState || "inactive"; - graph.getNodes().forEach(function(node) { - graph.clearItemStates(node, [activeState, inactiveState]); - }); - graph.getEdges().forEach(function(edge2) { - graph.clearItemStates(edge2, [activeState, inactiveState]); - }); - }; - Legend4.prototype.render = function() { - var _this = this; - this.processData(); - var lc = this.get("legendCanvas"); - if (!lc) { - lc = new canvas_default2({ - container: this.get("container"), - width: 200, - height: 200 - }); - var rootGroup = lc.addGroup({ - name: "root" - }); - rootGroup.addGroup({ - name: "node-group" - }); - rootGroup.addGroup({ - name: "edge-group" - }); - this.set("legendCanvas", lc); - } - var group3 = lc.find(function(e4) { - return e4.get("name") === "root"; - }); - var nodeGroup = group3.find(function(e4) { - return e4.get("name") === "node-group"; - }); - var edgeGroup = group3.find(function(e4) { - return e4.get("name") === "edge-group"; - }); - var itemsData = this.get("itemsData"); - var itemTypes = ["nodes", "edges"]; - var itemGroup = [nodeGroup, edgeGroup]; - itemTypes.forEach(function(itemType, i4) { - itemsData[itemType].forEach(function(data3) { - var _a6; - var subGroup = itemGroup[i4].addGroup({ - id: data3.id, - name: "node-container" - }); - var attrs; - var shapeType = data3.type; - var _b = _this.getShapeSize(data3), width2 = _b.width, height = _b.height, r4 = _b.r; - var style2 = _this.getStyle(itemType.substr(0, 4), data3); - switch (data3.type) { - case "circle": - attrs = { - r: r4, - x: 0, - y: 0 - }; - break; - case "rect": - attrs = { - width: width2, - height, - x: -width2 / 2, - y: -height / 2 - }; - break; - case "ellipse": - attrs = { - r1: width2, - r2: height, - x: 0, - y: 0 - }; - break; - case "line": - attrs = { - x1: -width2 / 2, - y1: 0, - x2: width2 / 2, - y2: 0 - }; - shapeType = "line"; - break; - case "quadratic": - attrs = { - path: [["M", -width2 / 2, 0], ["Q", 0, width2 / 2, width2 / 2, 0]] - }; - shapeType = "path"; - break; - case "cubic": - attrs = { - path: [["M", -width2 / 2, 0], ["C", -width2 / 6, width2 / 2, width2 / 6, -width2 / 2, width2 / 2, 0]] - }; - shapeType = "path"; - break; - default: - attrs = { - r: r4, - x: 0, - y: 0 - }; - break; - } - var keyShape = subGroup.addShape(shapeType, { - attrs: __assign17(__assign17({}, attrs), style2), - name: "".concat(data3.type, "-node-keyShape"), - oriAttrs: __assign17({ - opacity: 1 - }, style2) - }); - if (data3.label) { - var keyShapeBBox = keyShape.getBBox(); - var labelStyle = ((_a6 = data3.labelCfg) === null || _a6 === void 0 ? void 0 : _a6.style) || {}; - var attrs_1 = __assign17({ - textAlign: "begin", - fontSize: 12, - textBaseline: "middle", - fill: "#000", - opacity: 1, - fontWeight: "normal" - }, labelStyle); - subGroup.addShape("text", { - attrs: __assign17({ - x: keyShapeBBox.maxX + 4, - y: 0, - text: data3.label - }, attrs_1), - className: "legend-label", - name: "".concat(data3.type, "-node-text"), - oriAttrs: attrs_1 - }); - } - }); - }); - var padding3 = this.get("padding"); - var titleShape; - var titleGroup = group3.find(function(e4) { - return e4.get("name") === "title-container"; - }); - var titleGroupBBox = { - height: 0, - maxY: 0, - width: 0 - }; - if (this.get("title")) { - if (!titleGroup) { - titleGroup = group3.addGroup({ - name: "title-container" - }); - } - var defaultTitleStyle = { - fontSize: 20, - fontFamily: "Arial", - fontWeight: 300, - textBaseline: "top", - textAlign: "center", - fill: "#000", - x: 0, - y: padding3[0] - }; - var titleConfig = this.get("titleConfig") || {}; - var style = Object.assign(defaultTitleStyle, titleConfig.style || {}); - titleShape = titleGroup.addShape("text", { - attrs: __assign17({ - text: this.get("title") - }, style) - }); - titleGroupBBox = titleGroup.getCanvasBBox(); - titleGroup.setMatrix([1, 0, 0, 0, 1, 0, titleConfig.offsetX, titleConfig.offsetY, 1]); - } - this.layoutItems(); - var lcBBox = group3.getCanvasBBox(); - var nodeGroupBBox = nodeGroup.getCanvasBBox(); - var nodeGroupBeginX = nodeGroupBBox.minX < 0 ? Math.abs(nodeGroupBBox.minX) + padding3[3] : padding3[3]; - var nodeGroupBeginY = titleGroupBBox.maxY < nodeGroupBBox.minY ? Math.abs(titleGroupBBox.maxY - nodeGroupBBox.minY) + padding3[0] : titleGroupBBox.maxY + padding3[0]; - var nodeGroupMatrix = [1, 0, 0, 0, 1, 0, nodeGroupBeginX, nodeGroupBeginY, 1]; - nodeGroup.setMatrix(nodeGroupMatrix); - lcBBox = group3.getCanvasBBox(); - var size14 = [lcBBox.minX + lcBBox.width + padding3[1], lcBBox.minY + lcBBox.height + padding3[2]]; - if (titleShape) { - var titleConfig = __assign17({ - position: "center", - offsetX: 0, - offsetY: 0 - }, this.get("titleConfig")); - titleGroupBBox = titleGroup.getCanvasBBox(); - var titleGroupMatrix = titleGroup.getMatrix() || [1, 0, 0, 0, 1, 0, 0, 0, 1]; - if (titleConfig.position === "center") { - titleGroupMatrix[6] = size14[0] / 2 + titleConfig.offsetX; - } else if (titleConfig.position === "right") { - titleGroupMatrix[6] = size14[0] - padding3[3] + titleConfig.offsetX; - titleShape.attr({ - textAlign: "right" - }); - } else { - titleGroupMatrix[6] = padding3[3] + titleConfig.offsetX; - titleShape.attr({ - textAlign: "left" - }); - } - titleGroup.setMatrix(titleGroupMatrix); - titleGroupBBox = titleGroup.getCanvasBBox(); - nodeGroupBeginX = nodeGroupBBox.minX < 0 ? Math.abs(nodeGroupBBox.minX) + padding3[3] : padding3[3]; - nodeGroupBeginY = nodeGroupBBox.minY < titleGroupBBox.maxY ? Math.abs(titleGroupBBox.maxY - nodeGroupBBox.minY) + padding3[0] : titleGroupBBox.maxY + padding3[0]; - nodeGroupMatrix = [1, 0, 0, 0, 1, 0, nodeGroupBeginX, nodeGroupBeginY, 1]; - nodeGroup.setMatrix(nodeGroupMatrix); - var edgeGroupMatrix_1 = [1, 0, 0, 0, 1, 0, nodeGroupBeginX, nodeGroupBeginY, 1]; - if (this.get("layout") === "vertical") - edgeGroupMatrix_1[6] += nodeGroupBBox.maxX + this.get("horiSep"); - else - edgeGroupMatrix_1[7] += nodeGroupBBox.maxY + this.get("vertiSep"); - edgeGroup.setMatrix(edgeGroupMatrix_1); - } else { - nodeGroupBBox = nodeGroup.getCanvasBBox(); - var edgeGroupMatrix_2 = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - if (this.get("layout") === "vertical") - edgeGroupMatrix_2[6] += nodeGroupMatrix[6] + nodeGroupBBox.maxX + this.get("horiSep"); - else - edgeGroupMatrix_2[7] += nodeGroupMatrix[7] + nodeGroupBBox.maxY + this.get("vertiSep"); - edgeGroup.setMatrix(edgeGroupMatrix_2); - } - lcBBox = group3.getCanvasBBox(); - nodeGroupBBox = nodeGroup.getCanvasBBox(); - nodeGroupMatrix = nodeGroup.getMatrix() || [1, 0, 0, 0, 1, 0, 0, 0, 1]; - var edgeGroupMatrix = edgeGroup.getMatrix() || [1, 0, 0, 0, 1, 0, 0, 0, 1]; - var edgeGroupBBox = edgeGroup.getCanvasBBox(); - size14 = [Math.max(nodeGroupBBox.width + nodeGroupMatrix[6], edgeGroupBBox.width + edgeGroupMatrix[6]) + padding3[1], Math.max(nodeGroupBBox.height + nodeGroupMatrix[7], edgeGroupBBox.height + edgeGroupMatrix[7]) + padding3[2]]; - lc.changeSize(size14[0], size14[1]); - var containerStyle = this.get("containerStyle"); - var viewportMatrix = group3.getMatrix() || [1, 0, 0, 0, 1, 0, 0, 0, 1]; - var beginPos = util_default.invertMatrix({ - x: 0, - y: 0 - }, viewportMatrix); - var backRect = group3.addShape("rect", { - attrs: __assign17({ - x: beginPos.x + (containerStyle.lineWidth || 1), - y: beginPos.y + (containerStyle.lineWidth || 1), - width: size14[0] - 2 * (containerStyle.lineWidth || 1), - height: size14[1] - 2 * (containerStyle.lineWidth || 1), - fill: "#f00", - stroke: "#000", - lineWidth: 1, - opacity: 0.5 - }, containerStyle), - name: "legend-back-rect", - capture: false - }); - backRect.toBack(); - return size14; - }; - Legend4.prototype.layoutItems = function() { - var lc = this.get("legendCanvas"); - var horiSep = this.get("horiSep"); - var vertiSep = this.get("vertiSep"); - var layout6 = this.get("layout"); - var align = this.get("align"); - var begin = [0, 0]; - var group3 = lc.find(function(e4) { - return e4.get("name") === "root"; - }); - var nodeGroup = group3.find(function(e4) { - return e4.get("name") === "node-group"; - }); - var edgeGroup = group3.find(function(e4) { - return e4.get("name") === "edge-group"; - }); - var nodeLegendSize = { - min: 0, - max: -Infinity - }; - var rowMaxY = -Infinity; - nodeGroup.get("children").forEach(function(cNodeGroup, i4) { - if (i4 === 0) - nodeLegendSize.min = begin[0]; - var keyShape = cNodeGroup.get("children")[0]; - var bbox = cNodeGroup.getCanvasBBox(); - var _a6 = keyShape.getBBox(), keyShapeWidth = _a6.width, keyShapeHeight = _a6.height; - var curHeight = 0, x6 = 0, y5 = 0; - if (layout6 === "vertical") { - x6 = begin[1]; - y5 = begin[0] + keyShapeWidth / 2; - begin[0] = y5 + bbox.height + vertiSep; - curHeight = bbox.maxX + x6 + keyShapeWidth / 2; - } else { - x6 = begin[0] + keyShapeWidth / 2; - y5 = begin[1]; - begin[0] = x6 + bbox.width + horiSep; - curHeight = bbox.maxY + y5 + keyShapeHeight / 2; - } - if (begin[0] > nodeLegendSize.max) - nodeLegendSize.max = begin[0]; - if (curHeight > rowMaxY) - rowMaxY = curHeight; - cNodeGroup.setMatrix([1, 0, 0, 0, 1, 0, x6, y5, 1]); - }); - var nw = nodeLegendSize.max - nodeLegendSize.min; - var edgeLegendSize = { - min: 0, - max: -Infinity - }; - var nodeGroupBBox = nodeGroup.getCanvasBBox(); - begin[0] = 0; - begin[1] = layout6 === "vertical" ? nodeGroupBBox.maxX + horiSep : nodeGroupBBox.maxY + vertiSep; - edgeGroup.get("children").forEach(function(subGroup, i4) { - if (i4 === 0) - edgeLegendSize.min = begin[0]; - var keyShape = subGroup.get("children")[0]; - var bbox = subGroup.getCanvasBBox(); - var _a6 = keyShape.getBBox(), keyShapeWidth = _a6.width, keyShapeHeight = _a6.height; - var x6 = 0, y5 = 0; - if (layout6 === "vertical") { - x6 = begin[1]; - y5 = begin[0]; - begin[0] = y5 + bbox.height + vertiSep; - subGroup.setMatrix([1, 0, 0, 0, 1, 0, 0, y5 + keyShapeHeight / 2, 1]); - } else { - x6 = begin[0]; - y5 = begin[1]; - begin[0] = x6 + bbox.width + horiSep; - subGroup.setMatrix([1, 0, 0, 0, 1, 0, x6 + keyShapeWidth / 2, 0, 1]); - } - if (begin[0] > edgeLegendSize.max) - edgeLegendSize.max = begin[0]; - }); - var ew = edgeLegendSize.max - edgeLegendSize.min; - if (align && align !== "" && align !== "left") { - var widthDiff = nw - ew; - var movement_1 = align === "center" ? Math.abs(widthDiff) / 2 : Math.abs(widthDiff); - var shouldAdjustGroup = widthDiff < 0 ? nodeGroup : edgeGroup; - shouldAdjustGroup.get("children").forEach(function(subGroup) { - var matrix = subGroup.getMatrix() || [1, 0, 0, 0, 1, 0, 0, 0, 1]; - if (layout6 === "vertical") - matrix[7] += movement_1; - else - matrix[6] += movement_1; - subGroup.setMatrix(matrix); - }); - } - }; - Legend4.prototype.processData = function() { - var data3 = this.get("data"); - var itemsData = { - nodes: [], - edges: [] - }; - if (data3.nodes) { - data3.nodes.sort(function(a4, b10) { - return a4.order - b10.order; - }); - data3.nodes.forEach(function(node) { - var _a6, _b, _c, _d, _e; - var size14 = node.size || [((_a6 = node.style) === null || _a6 === void 0 ? void 0 : _a6.width) || ((_b = node.style) === null || _b === void 0 ? void 0 : _b.r) || 8, ((_c = node.style) === null || _c === void 0 ? void 0 : _c.height) || ((_d = node.style) === null || _d === void 0 ? void 0 : _d.r) || 8]; - var labelStyle = ((_e = node.labelCfg) === null || _e === void 0 ? void 0 : _e.style) || {}; - itemsData.nodes.push({ - id: node.id || (0, import_util573.uniqueId)(), - type: node.type || "circle", - style: __assign17({}, node.style), - order: node.order, - label: node.label, - itemType: "node", - size: size14, - labelCfg: { - position: "right", - style: __assign17({ - fontFamily: "Arial" - }, labelStyle) - } - }); - }); - } - if (data3.edges) { - data3.edges.sort(function(a4, b10) { - return a4.order - b10.order; - }); - data3.edges.forEach(function(edge2) { - var _a6, _b; - var type2 = edge2.type || "line"; - if (edge2.type === "cubic-horizontal") - type2 = "cubic"; - var labelStyle = ((_a6 = edge2.labelCfg) === null || _a6 === void 0 ? void 0 : _a6.style) || {}; - var size14 = edge2.size || [((_b = edge2.style) === null || _b === void 0 ? void 0 : _b.width) || 8, 1]; - itemsData.edges.push({ - id: edge2.id || (0, import_util573.uniqueId)(), - type: type2, - size: size14, - style: __assign17({ - lineWidth: (0, import_util573.isArray)(size14) ? size14[1] : 1 - }, edge2.style), - order: edge2.order, - label: edge2.label, - itemType: "edge", - labelCfg: { - position: "right", - style: __assign17({ - fontFamily: "Arial" - }, labelStyle) - } - }); - }); - } - this.set("itemsData", itemsData); - }; - Legend4.prototype.getContainer = function() { - return this.get("container"); - }; - Legend4.prototype.formatArray = function(key) { - var value2 = this.get(key); - if ((0, import_util573.isNumber)(value2)) - this.set(key, [value2, value2, value2, value2]); - else if ((0, import_util573.isArray)(value2)) { - switch (value2.length) { - case 0: - this.set(key, [0, 0, 0, 0]); - break; - case 1: - this.set(key, [value2[0], value2[0], value2[0], value2[0]]); - break; - case 2: - this.set(key, [value2[0], value2[1], value2[0], value2[1]]); - break; - case 3: - this.set(key, [value2[0], value2[1], value2[2], value2[1]]); - break; - default: - break; - } - } - return this.get(key); - }; - Legend4.prototype.getShapeSize = function(data3) { - var width2, height, r4; - if (data3.size) { - if ((0, import_util573.isArray)(data3.size)) { - width2 = data3.size[0]; - height = data3.size[1] || data3.size[0]; - r4 = data3.size[0] / 2; - } else if ((0, import_util573.isNumber)(data3.size)) { - width2 = data3.size; - height = data3.size; - r4 = data3.size / 2; - } - } - if (data3.style) { - if (data3.style.width) - width2 = data3.style.width; - if (data3.style.height) - height = data3.style.height; - if (data3.style.r) - r4 = data3.style.r; - } - if (!r4) - r4 = 5; - if (!width2) - width2 = r4; - if (!height) - height = r4; - return { - width: width2, - height, - r: r4 - }; - }; - Legend4.prototype.getStyle = function(type2, data3) { - var defaultStyle = type2 === "node" ? { - fill: "#ccc", - lineWidth: 0 - } : { - stroke: "#000", - lineWidth: 1 - }; - return __assign17(__assign17({}, defaultStyle), data3.style || {}); - }; - Legend4.prototype.destroy = function() { - var graph = this.get("graph"); - var graphContainer = graph.get("container"); - var container2 = this.get("container"); - graphContainer.removeChild(container2); - }; - return Legend4; -}(base_default18); -var legend_default2 = Legend2; - -// node_modules/@antv/g6-plugin/es/index.js -var Plugin = { - PluginBase: base_default18, - Menu: menu_default, - Grid: grid_default, - Minimap: minimap_default, - Bundling: bundling_default, - ToolBar: toolBar_default, - Tooltip: tooltip_default2, - Fisheye: fisheye_default, - TimeBar: timeBar_default, - ImageMinimap: imageMinimap_default, - EdgeFilterLens: edgeFilterLens_default, - SnapLine: snapline_default, - Legend: legend_default2 -}; -var es_default4 = Plugin; - -// node_modules/@antv/g6-pc/es/plugin/index.js -var plugin_default = es_default4; - -// node_modules/@antv/g6-element/es/nodes/circle.js -var import_util574 = __toModule(require_lib()); -registerNode("circle", { - options: { - size: BaseGlobal.defaultNode.size, - style: { - x: 0, - y: 0, - stroke: BaseGlobal.defaultNode.style.stroke, - fill: BaseGlobal.defaultNode.style.fill, - lineWidth: BaseGlobal.defaultNode.style.lineWidth - }, - labelCfg: { - style: { - fill: BaseGlobal.nodeLabel.style.fill, - fontSize: BaseGlobal.nodeLabel.style.fontSize, - fontFamily: BaseGlobal.windowFontFamily - } - }, - linkPoints: { - top: false, - right: false, - bottom: false, - left: false, - size: BaseGlobal.defaultNode.linkPoints.size, - lineWidth: BaseGlobal.defaultNode.linkPoints.lineWidth, - fill: BaseGlobal.defaultNode.linkPoints.fill, - stroke: BaseGlobal.defaultNode.linkPoints.stroke - }, - icon: { - show: false, - img: "https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg", - width: 20, - height: 20 - }, - stateStyles: __assign({}, BaseGlobal.nodeStateStyles) - }, - shapeType: "circle", - labelPosition: "center", - drawShape: function drawShape11(cfg, group3) { - var _a6 = (this.mergeStyle || this.getOptions(cfg)).icon, defaultIcon = _a6 === void 0 ? {} : _a6; - var style = this.getShapeStyle(cfg); - var icon = (0, import_util574.deepMix)({}, defaultIcon, cfg.icon); - var name = "".concat(this.type, "-keyShape"); - var keyShape = group3.addShape("circle", { - attrs: style, - className: name, - name, - draggable: true - }); - group3["shapeMap"][name] = keyShape; - var width2 = icon.width, height = icon.height, show = icon.show, text = icon.text; - if (show) { - var iconName = "".concat(this.type, "-icon"); - if (text) { - group3["shapeMap"][iconName] = group3.addShape("text", { - attrs: __assign({ - x: 0, - y: 0, - fontSize: 12, - fill: "#000", - stroke: "#000", - textBaseline: "middle", - textAlign: "center" - }, icon), - className: iconName, - name: iconName, - draggable: true - }); - } else { - group3["shapeMap"][iconName] = group3.addShape("image", { - attrs: __assign({ - x: -width2 / 2, - y: -height / 2 - }, icon), - className: iconName, - name: iconName, - draggable: true - }); - } - } - this.drawLinkPoints(cfg, group3); - return keyShape; - }, - drawLinkPoints: function drawLinkPoints(cfg, group3) { - var linkPoints = (this.mergeStyle || this.getOptions(cfg)).linkPoints; - if (!linkPoints) - return; - var _a6 = linkPoints || {}, top = _a6.top, left2 = _a6.left, right2 = _a6.right, bottom = _a6.bottom, markSize = _a6.size, markR = _a6.r, markStyle = __rest(_a6, ["top", "left", "right", "bottom", "size", "r"]); - var size14 = this.getSize(cfg); - var r4 = size14[0] / 2; - if (left2) { - var name_1 = "link-point-left"; - group3["shapeMap"][name_1] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: -r4, - y: 0, - r: markSize / 2 || markR || 5 - }), - className: name_1, - name: name_1, - isAnchorPoint: true - }); - } - if (right2) { - var name_2 = "link-point-right"; - group3["shapeMap"][name_2] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: r4, - y: 0, - r: markSize / 2 || markR || 5 - }), - className: name_2, - name: name_2, - isAnchorPoint: true - }); - } - if (top) { - var name_3 = "link-point-top"; - group3["shapeMap"][name_3] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: 0, - y: -r4, - r: markSize / 2 || markR || 5 - }), - className: name_3, - name: name_3, - isAnchorPoint: true - }); - } - if (bottom) { - var name_4 = "link-point-bottom"; - group3["shapeMap"][name_4] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: 0, - y: r4, - r: markSize / 2 || markR || 5 - }), - className: name_4, - name: name_4, - isAnchorPoint: true - }); - } - }, - getShapeStyle: function getShapeStyle8(cfg) { - var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style; - var strokeStyle = { - stroke: cfg.color - }; - var style = (0, import_util574.deepMix)({}, defaultStyle, strokeStyle); - var size14 = this.getSize(cfg); - var r4 = size14[0] / 2; - var styles = __assign({ - x: 0, - y: 0, - r: r4 - }, style); - return styles; - }, - update: function update7(cfg, item, updateType) { - var group3 = item.getContainer(); - var size14 = this.getSize(cfg); - var style = __assign({}, cfg.style); - if (cfg.style.stroke === void 0 && cfg.color) { - style.stroke = cfg.color; - } - if (cfg.style.r === void 0 && !isNaN(size14[0])) { - style.r = size14[0] / 2; - } - this.updateShape(cfg, item, style, true, updateType); - this.updateLinkPoints(cfg, group3); - } -}, "single-node"); - -// node_modules/@antv/g6-element/es/nodes/rect.js -var import_util575 = __toModule(require_lib()); -registerNode("rect", { - options: { - size: [100, 30], - style: { - radius: 0, - stroke: BaseGlobal.defaultNode.style.stroke, - fill: BaseGlobal.defaultNode.style.fill, - lineWidth: BaseGlobal.defaultNode.style.lineWidth - }, - labelCfg: { - style: { - fill: BaseGlobal.nodeLabel.style.fill, - fontSize: BaseGlobal.nodeLabel.style.fontSize, - fontFamily: BaseGlobal.windowFontFamily - } - }, - linkPoints: { - top: false, - right: false, - bottom: false, - left: false, - size: BaseGlobal.defaultNode.linkPoints.size, - lineWidth: BaseGlobal.defaultNode.linkPoints.lineWidth, - fill: BaseGlobal.defaultNode.linkPoints.fill, - stroke: BaseGlobal.defaultNode.linkPoints.stroke - }, - icon: { - show: false, - img: "https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg", - width: 20, - height: 20 - }, - anchorPoints: [[0, 0.5], [1, 0.5]], - stateStyles: __assign({}, BaseGlobal.nodeStateStyles) - }, - shapeType: "rect", - labelPosition: "center", - drawShape: function drawShape12(cfg, group3) { - var style = this.getShapeStyle(cfg); - var keyShape = group3.addShape("rect", { - attrs: style, - className: "".concat(this.type, "-keyShape"), - name: "".concat(this.type, "-keyShape"), - draggable: true - }); - group3["shapeMap"]["".concat(this.type, "-keyShape")] = keyShape; - this.drawLinkPoints(cfg, group3); - return keyShape; - }, - drawLinkPoints: function drawLinkPoints2(cfg, group3) { - var _a6 = (this.mergeStyle || this.getOptions(cfg)).linkPoints, linkPoints = _a6 === void 0 ? {} : _a6; - var top = linkPoints.top, left2 = linkPoints.left, right2 = linkPoints.right, bottom = linkPoints.bottom, markSize = linkPoints.size, markR = linkPoints.r, markStyle = __rest(linkPoints, ["top", "left", "right", "bottom", "size", "r"]); - var size14 = this.getSize(cfg); - var width2 = size14[0]; - var height = size14[1]; - if (left2) { - group3["shapeMap"]["link-point-left"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: -width2 / 2, - y: 0, - r: markSize / 2 || markR || 5 - }), - className: "link-point-left", - name: "link-point-left", - isAnchorPoint: true - }); - } - if (right2) { - group3["shapeMap"]["link-point-right"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: width2 / 2, - y: 0, - r: markSize / 2 || markR || 5 - }), - className: "link-point-right", - name: "link-point-right", - isAnchorPoint: true - }); - } - if (top) { - group3["shapeMap"]["link-point-top"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: 0, - y: -height / 2, - r: markSize / 2 || markR || 5 - }), - className: "link-point-top", - name: "link-point-top", - isAnchorPoint: true - }); - } - if (bottom) { - group3["shapeMap"]["link-point-bottom"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: 0, - y: height / 2, - r: markSize / 2 || markR || 5 - }), - className: "link-point-bottom", - name: "link-point-bottom", - isAnchorPoint: true - }); - } - }, - getShapeStyle: function getShapeStyle9(cfg) { - var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style; - var strokeStyle = { - stroke: cfg.color - }; - var style = (0, import_util575.mix)({}, defaultStyle, strokeStyle); - var size14 = this.getSize(cfg); - var width2 = style.width || size14[0]; - var height = style.height || size14[1]; - var styles = __assign({ - x: -width2 / 2, - y: -height / 2, - width: width2, - height - }, style); - return styles; - }, - update: function update8(cfg, item, updateType) { - var group3 = item.getContainer(); - var defaultStyle = this.getOptions({}).style; - var size14 = this.getSize(cfg); - var keyShape = item.get("keyShape"); - if (!cfg.size) { - size14[0] = keyShape.attr("width") || defaultStyle.width; - size14[1] = keyShape.attr("height") || defaultStyle.height; - } - var strokeStyle = { - stroke: cfg.color, - x: -size14[0] / 2, - y: -size14[1] / 2, - width: size14[0], - height: size14[1] - }; - var style = (0, import_util575.mix)({}, defaultStyle, keyShape.attr(), strokeStyle); - style = (0, import_util575.mix)(style, cfg.style); - this.updateShape(cfg, item, style, false, updateType); - this.updateLinkPoints(cfg, group3); - } -}, "single-node"); - -// node_modules/@antv/g6-element/es/nodes/ellipse.js -var import_util576 = __toModule(require_lib()); -registerNode("ellipse", { - options: { - size: [80, 40], - style: { - x: 0, - y: 0, - stroke: BaseGlobal.defaultNode.style.stroke, - fill: BaseGlobal.defaultNode.style.fill, - lineWidth: BaseGlobal.defaultNode.style.lineWidth - }, - labelCfg: { - style: { - fill: BaseGlobal.nodeLabel.style.fill, - fontSize: BaseGlobal.nodeLabel.style.fontSize, - fontFamily: BaseGlobal.windowFontFamily - } - }, - linkPoints: { - top: false, - right: false, - bottom: false, - left: false, - size: BaseGlobal.defaultNode.linkPoints.size, - lineWidth: BaseGlobal.defaultNode.linkPoints.lineWidth, - fill: BaseGlobal.defaultNode.linkPoints.fill, - stroke: BaseGlobal.defaultNode.linkPoints.stroke - }, - icon: { - show: false, - img: "https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg", - width: 20, - height: 20 - }, - stateStyles: __assign({}, BaseGlobal.nodeStateStyles) - }, - shapeType: "ellipse", - labelPosition: "center", - drawShape: function drawShape13(cfg, group3) { - var _a6 = (this.mergeStyle || this.getOptions(cfg)).icon, icon = _a6 === void 0 ? {} : _a6; - var style = this.getShapeStyle(cfg); - var keyShape = group3.addShape("ellipse", { - attrs: style, - className: "ellipse-keyShape", - name: "ellipse-keyShape", - draggable: true - }); - group3["shapeMap"]["ellipse-keyShape"] = keyShape; - var width2 = icon.width, height = icon.height, show = icon.show, text = icon.text; - if (show) { - if (text) { - group3["shapeMap"]["".concat(this.type, "-icon")] = group3.addShape("text", { - attrs: __assign({ - x: 0, - y: 0, - fontSize: 12, - fill: "#000", - stroke: "#000", - textBaseline: "middle", - textAlign: "center" - }, icon), - className: "".concat(this.type, "-icon"), - name: "".concat(this.type, "-icon"), - draggable: true - }); - } else { - group3["shapeMap"]["".concat(this.type, "-icon")] = group3.addShape("image", { - attrs: __assign({ - x: -width2 / 2, - y: -height / 2 - }, icon), - className: "".concat(this.type, "-icon"), - name: "".concat(this.type, "-icon"), - draggable: true - }); - } - } - this.drawLinkPoints(cfg, group3); - return keyShape; - }, - drawLinkPoints: function drawLinkPoints3(cfg, group3) { - var _a6 = (this.mergeStyle || this.getOptions(cfg)).linkPoints, linkPoints = _a6 === void 0 ? {} : _a6; - var top = linkPoints.top, left2 = linkPoints.left, right2 = linkPoints.right, bottom = linkPoints.bottom, markSize = linkPoints.size, markR = linkPoints.r, markStyle = __rest(linkPoints, ["top", "left", "right", "bottom", "size", "r"]); - var size14 = this.getSize(cfg); - var rx = size14[0] / 2; - var ry = size14[1] / 2; - if (left2) { - group3["shapeMap"]["link-point-left"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: -rx, - y: 0, - r: markSize / 2 || markR || 5 - }), - className: "link-point-left", - name: "link-point-left", - isAnchorPoint: true - }); - } - if (right2) { - group3["shapeMap"]["link-point-right"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: rx, - y: 0, - r: markSize / 2 || markR || 5 - }), - className: "link-point-right", - name: "link-point-right", - isAnchorPoint: true - }); - } - if (top) { - group3["shapeMap"]["link-point-top"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: 0, - y: -ry, - r: markSize / 2 || markR || 5 - }), - className: "link-point-top", - name: "link-point-top", - isAnchorPoint: true - }); - } - if (bottom) { - group3["shapeMap"]["link-point-bottom"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: 0, - y: ry, - r: markSize / 2 || markR || 5 - }), - className: "link-point-bottom", - name: "link-point-bottom", - isAnchorPoint: true - }); - } - }, - getShapeStyle: function getShapeStyle10(cfg) { - var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style; - var strokeStyle = { - stroke: cfg.color - }; - var style = (0, import_util576.mix)({}, defaultStyle, strokeStyle); - var size14 = this.getSize(cfg); - var rx = size14[0] / 2; - var ry = size14[1] / 2; - var styles = __assign({ - x: 0, - y: 0, - rx, - ry - }, style); - return styles; - }, - update: function update9(cfg, item, updateType) { - var group3 = item.getContainer(); - var defaultStyle = this.getOptions({}).style; - var size14 = this.getSize(cfg); - var strokeStyle = { - stroke: cfg.color, - rx: size14[0] / 2, - ry: size14[1] / 2 - }; - var keyShape = item.get("keyShape"); - var style = (0, import_util576.mix)({}, defaultStyle, keyShape.attr(), strokeStyle); - style = (0, import_util576.mix)(style, cfg.style); - this.updateShape(cfg, item, style, true, updateType); - this.updateLinkPoints(cfg, group3); - } -}, "single-node"); - -// node_modules/@antv/g6-element/es/nodes/diamond.js -var import_util577 = __toModule(require_lib()); -registerNode("diamond", { - options: { - size: [80, 80], - style: { - stroke: BaseGlobal.defaultNode.style.stroke, - fill: BaseGlobal.defaultNode.style.fill, - lineWidth: BaseGlobal.defaultNode.style.lineWidth - }, - labelCfg: { - style: { - fill: BaseGlobal.nodeLabel.style.fill, - fontSize: BaseGlobal.nodeLabel.style.fontSize, - fontFamily: BaseGlobal.windowFontFamily - } - }, - linkPoints: { - top: false, - right: false, - bottom: false, - left: false, - size: BaseGlobal.defaultNode.linkPoints.size, - lineWidth: BaseGlobal.defaultNode.linkPoints.lineWidth, - fill: BaseGlobal.defaultNode.linkPoints.fill, - stroke: BaseGlobal.defaultNode.linkPoints.stroke - }, - icon: { - show: false, - img: "https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg", - width: 20, - height: 20 - }, - stateStyles: __assign({}, BaseGlobal.nodeStateStyles) - }, - shapeType: "diamond", - labelPosition: "center", - drawShape: function drawShape14(cfg, group3) { - var _a6 = (this.mergeStyle || this.getOptions(cfg)).icon, icon = _a6 === void 0 ? {} : _a6; - var style = this.getShapeStyle(cfg); - var keyShape = group3.addShape("path", { - attrs: style, - className: "".concat(this.type, "-keyShape"), - name: "".concat(this.type, "-keyShape"), - draggable: true - }); - group3["shapeMap"]["".concat(this.type, "-keyShape")] = keyShape; - var w4 = icon.width, h3 = icon.height, show = icon.show, text = icon.text; - if (show) { - if (text) { - group3["shapeMap"]["".concat(this.type, "-icon")] = group3.addShape("text", { - attrs: __assign({ - x: 0, - y: 0, - fontSize: 12, - fill: "#000", - stroke: "#000", - textBaseline: "middle", - textAlign: "center" - }, icon), - className: "".concat(this.type, "-icon"), - name: "".concat(this.type, "-icon"), - draggable: true - }); - } else { - group3["shapeMap"]["".concat(this.type, "-icon")] = group3.addShape("image", { - attrs: __assign({ - x: -w4 / 2, - y: -h3 / 2 - }, icon), - className: "".concat(this.type, "-icon"), - name: "".concat(this.type, "-icon"), - draggable: true - }); - } - } - this.drawLinkPoints(cfg, group3); - return keyShape; - }, - drawLinkPoints: function drawLinkPoints4(cfg, group3) { - var _a6 = (this.mergeStyle || this.getOptions(cfg)).linkPoints, linkPoints = _a6 === void 0 ? {} : _a6; - var top = linkPoints.top, left2 = linkPoints.left, right2 = linkPoints.right, bottom = linkPoints.bottom, markSize = linkPoints.size, markR = linkPoints.r, markStyle = __rest(linkPoints, ["top", "left", "right", "bottom", "size", "r"]); - var size14 = this.getSize(cfg); - var width2 = size14[0]; - var height = size14[1]; - if (left2) { - group3["shapeMap"]["link-point-left"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: -width2 / 2, - y: 0, - r: markSize / 2 || markR || 5 - }), - className: "link-point-left", - name: "link-point-left", - isAnchorPoint: true - }); - } - if (right2) { - group3["shapeMap"]["link-point-right"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: width2 / 2, - y: 0, - r: markSize / 2 || markR || 5 - }), - className: "link-point-right", - name: "link-point-right", - isAnchorPoint: true - }); - } - if (top) { - group3["shapeMap"]["link-point-top"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: 0, - y: -height / 2, - r: markSize / 2 || markR || 5 - }), - className: "link-point-top", - name: "link-point-top", - isAnchorPoint: true - }); - } - if (bottom) { - group3["shapeMap"]["link-point-bottom"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: 0, - y: height / 2, - r: markSize / 2 || markR || 5 - }), - className: "link-point-bottom", - name: "link-point-bottom", - isAnchorPoint: true - }); - } - }, - getPath: function getPath10(cfg) { - var size14 = this.getSize(cfg); - var width2 = size14[0]; - var height = size14[1]; - var path = [ - ["M", 0, -height / 2], - ["L", width2 / 2, 0], - ["L", 0, height / 2], - ["L", -width2 / 2, 0], - ["Z"] - ]; - return path; - }, - getShapeStyle: function getShapeStyle11(cfg) { - var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style; - var strokeStyle = { - stroke: cfg.color - }; - var style = (0, import_util577.mix)({}, defaultStyle, strokeStyle); - var path = this.getPath(cfg); - var styles = __assign({ - path - }, style); - return styles; - }, - update: function update10(cfg, item, updateType) { - var group3 = item.getContainer(); - var defaultStyle = this.getOptions({}).style; - var path = this.getPath(cfg); - var strokeStyle = { - stroke: cfg.color, - path - }; - var keyShape = item.get("keyShape"); - var style = (0, import_util577.mix)({}, defaultStyle, keyShape.attr(), strokeStyle); - style = (0, import_util577.mix)(style, cfg.style); - this.updateShape(cfg, item, style, true, updateType); - this.updateLinkPoints(cfg, group3); - } -}, "single-node"); - -// node_modules/@antv/g6-element/es/nodes/triangle.js -var import_util578 = __toModule(require_lib()); -registerNode("triangle", { - options: { - size: 40, - direction: "up", - style: { - stroke: BaseGlobal.defaultNode.style.stroke, - fill: BaseGlobal.defaultNode.style.fill, - lineWidth: BaseGlobal.defaultNode.style.lineWidth - }, - labelCfg: { - style: { - fill: BaseGlobal.nodeLabel.style.fill, - fontSize: BaseGlobal.nodeLabel.style.fontSize - }, - offset: 15 - }, - linkPoints: { - top: false, - right: false, - bottom: false, - left: false, - size: BaseGlobal.defaultNode.linkPoints.size, - lineWidth: BaseGlobal.defaultNode.linkPoints.lineWidth, - fill: BaseGlobal.defaultNode.linkPoints.fill, - stroke: BaseGlobal.defaultNode.linkPoints.stroke - }, - icon: { - show: false, - img: "https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg", - width: 20, - height: 20, - offset: 6 - }, - stateStyles: __assign({}, BaseGlobal.nodeStateStyles) - }, - shapeType: "triangle", - labelPosition: "bottom", - drawShape: function drawShape15(cfg, group3) { - var _a6 = this.mergeStyle || this.getOptions(cfg), _b = _a6.icon, icon = _b === void 0 ? {} : _b, defaultDirection = _a6.direction; - var style = this.getShapeStyle(cfg); - var direction3 = cfg.direction || defaultDirection; - var keyShape = group3.addShape("path", { - attrs: style, - className: "".concat(this.type, "-keyShape"), - name: "".concat(this.type, "-keyShape"), - draggable: true - }); - group3["shapeMap"]["".concat(this.type, "-keyShape")] = keyShape; - var w4 = icon.width, h3 = icon.height, show = icon.show, offset = icon.offset, text = icon.text; - if (show) { - if (text) { - group3["shapeMap"]["".concat(this.type, "-icon")] = group3.addShape("text", { - attrs: __assign({ - x: 0, - y: 0, - fontSize: 12, - fill: "#000", - stroke: "#000", - textBaseline: "middle", - textAlign: "center" - }, icon), - className: "".concat(this.type, "-icon"), - name: "".concat(this.type, "-icon"), - draggable: true - }); - } else { - var iconW = -w4 / 2; - var iconH = -h3 / 2; - if (direction3 === "up" || direction3 === "down") { - iconH += offset; - } - if (direction3 === "left" || direction3 === "right") { - iconW += offset; - } - group3["shapeMap"]["".concat(this.type, "-icon")] = group3.addShape("image", { - attrs: __assign({ - x: iconW, - y: iconH - }, icon), - className: "".concat(this.type, "-icon"), - name: "".concat(this.type, "-icon"), - draggable: true - }); - } - } - this.drawLinkPoints(cfg, group3); - return keyShape; - }, - drawLinkPoints: function drawLinkPoints5(cfg, group3) { - var _a6 = this.mergeStyle || this.getOptions(cfg), _b = _a6.linkPoints, linkPoints = _b === void 0 ? {} : _b, defaultDirection = _a6.direction; - var direction3 = cfg.direction || defaultDirection; - var top = linkPoints.top, left2 = linkPoints.left, right2 = linkPoints.right, bottom = linkPoints.bottom, markSize = linkPoints.size, markR = linkPoints.r, markStyle = __rest(linkPoints, ["top", "left", "right", "bottom", "size", "r"]); - var size14 = this.getSize(cfg); - var len5 = size14[0]; - if (left2) { - var leftPos = null; - var diffY = len5 * Math.sin(1 / 3 * Math.PI); - var r4 = len5 * Math.sin(1 / 3 * Math.PI); - if (direction3 === "up") { - leftPos = [-r4, diffY]; - } else if (direction3 === "down") { - leftPos = [-r4, -diffY]; - } else if (direction3 === "left") { - leftPos = [-r4, r4 - diffY]; - } - if (leftPos) { - group3["shapeMap"]["link-point-left"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: leftPos[0], - y: leftPos[1], - r: markSize / 2 || markR || 5 - }), - className: "link-point-left", - name: "link-point-left" - }); - } - } - if (right2) { - var rightPos = null; - var diffY = len5 * Math.sin(1 / 3 * Math.PI); - var r4 = len5 * Math.sin(1 / 3 * Math.PI); - if (direction3 === "up") { - rightPos = [r4, diffY]; - } else if (direction3 === "down") { - rightPos = [r4, -diffY]; - } else if (direction3 === "right") { - rightPos = [r4, r4 - diffY]; - } - if (rightPos) { - group3["shapeMap"]["link-point-right"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: rightPos[0], - y: rightPos[1], - r: markSize / 2 || markR || 5 - }), - className: "link-point-right", - name: "link-point-right" - }); - } - } - if (top) { - var topPos = null; - var diffY = len5 * Math.sin(1 / 3 * Math.PI); - var r4 = len5 * Math.sin(1 / 3 * Math.PI); - if (direction3 === "up") { - topPos = [r4 - diffY, -diffY]; - } else if (direction3 === "left") { - topPos = [r4, -diffY]; - } else if (direction3 === "right") { - topPos = [-r4, -diffY]; - } - if (topPos) { - group3["shapeMap"]["link-point-top"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: topPos[0], - y: topPos[1], - r: markSize / 2 || markR || 5 - }), - className: "link-point-top", - name: "link-point-top" - }); - } - } - if (bottom) { - var bottomPos = null; - var diffY = len5 * Math.sin(1 / 3 * Math.PI); - var r4 = len5 * Math.sin(1 / 3 * Math.PI); - if (direction3 === "down") { - bottomPos = [-r4 + diffY, diffY]; - } else if (direction3 === "left") { - bottomPos = [r4, diffY]; - } else if (direction3 === "right") { - bottomPos = [-r4, diffY]; - } - if (bottomPos) { - group3["shapeMap"]["link-point-bottom"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: bottomPos[0], - y: bottomPos[1], - r: markSize / 2 || markR || 5 - }), - className: "link-point-bottom", - name: "link-point-bottom" - }); - } - } - }, - getPath: function getPath11(cfg) { - var defaultDirection = (this.mergeStyle || this.getOptions(cfg)).direction; - var direction3 = cfg.direction || defaultDirection; - var size14 = this.getSize(cfg); - var len5 = size14[0]; - var diffY = len5 * Math.sin(1 / 3 * Math.PI); - var r4 = len5 * Math.sin(1 / 3 * Math.PI); - var path = [ - ["M", -r4, diffY], - ["L", 0, -diffY], - ["L", r4, diffY], - ["Z"] - ]; - if (direction3 === "down") { - path = [ - ["M", -r4, -diffY], - ["L", r4, -diffY], - ["L", 0, diffY], - ["Z"] - ]; - } else if (direction3 === "left") { - path = [ - ["M", -r4, r4 - diffY], - ["L", r4, -r4], - ["L", r4, r4], - ["Z"] - ]; - } else if (direction3 === "right") { - path = [ - ["M", r4, r4 - diffY], - ["L", -r4, r4], - ["L", -r4, -r4], - ["Z"] - ]; - } - return path; - }, - getShapeStyle: function getShapeStyle12(cfg) { - var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style; - var strokeStyle = { - stroke: cfg.color - }; - var style = (0, import_util578.mix)({}, defaultStyle, strokeStyle); - var path = this.getPath(cfg); - var styles = __assign({ - path - }, style); - return styles; - }, - update: function update11(cfg, item, updateType) { - var group3 = item.getContainer(); - var defaultStyle = this.getOptions({}).style; - var path = this.getPath(cfg); - var strokeStyle = { - stroke: cfg.color, - path - }; - var keyShape = item.get("keyShape"); - var style = (0, import_util578.mix)({}, defaultStyle, keyShape.attr(), strokeStyle); - style = (0, import_util578.mix)(style, cfg.style); - this.updateShape(cfg, item, style, true, updateType); - this.updateLinkPoints(cfg, group3); - }, - updateLinkPoints: function updateLinkPoints2(cfg, group3) { - var _a6 = this.getOptions({}), defaultLinkPoints = _a6.linkPoints, defaultDirection = _a6.direction; - var direction3 = cfg.direction || defaultDirection; - var markLeft = group3["shapeMap"]["link-point-left"] || group3.find(function(element) { - return element.get("className") === "link-point-left"; - }); - var markRight = group3["shapeMap"]["link-point-right"] || group3.find(function(element) { - return element.get("className") === "link-point-right"; - }); - var markTop = group3["shapeMap"]["link-point-top"] || group3.find(function(element) { - return element.get("className") === "link-point-top"; - }); - var markBottom = group3["shapeMap"]["link-point-bottom"] || group3.find(function(element) { - return element.get("className") === "link-point-bottom"; - }); - var currentLinkPoints = defaultLinkPoints; - var existLinkPoint = markLeft || markRight || markTop || markBottom; - if (existLinkPoint) { - currentLinkPoints = existLinkPoint.attr(); - } - var linkPoints = (0, import_util578.mix)({}, currentLinkPoints, cfg.linkPoints); - var markFill = linkPoints.fill, markStroke = linkPoints.stroke, borderWidth = linkPoints.lineWidth; - var markSize = linkPoints.size / 2; - if (!markSize) - markSize = linkPoints.r; - var _b = cfg.linkPoints ? cfg.linkPoints : { - left: void 0, - right: void 0, - top: void 0, - bottom: void 0 - }, left2 = _b.left, right2 = _b.right, top = _b.top, bottom = _b.bottom; - var size14 = this.getSize(cfg); - var len5 = size14[0]; - var styles = { - r: markSize, - fill: markFill, - stroke: markStroke, - lineWidth: borderWidth - }; - var leftPos = null; - var diffY = len5 * Math.sin(1 / 3 * Math.PI); - var r4 = len5 * Math.sin(1 / 3 * Math.PI); - if (direction3 === "up") { - leftPos = [-r4, diffY]; - } else if (direction3 === "down") { - leftPos = [-r4, -diffY]; - } else if (direction3 === "left") { - leftPos = [-r4, r4 - diffY]; - } - if (leftPos) { - if (markLeft) { - if (!left2 && left2 !== void 0) { - markLeft.remove(); - delete group3["shapeMap"]["link-point-left"]; - } else { - markLeft.attr(__assign(__assign({}, styles), { - x: leftPos[0], - y: leftPos[1] - })); - } - } else if (left2) { - group3["shapeMap"]["link-point-left"] = group3.addShape("circle", { - attrs: __assign(__assign({}, styles), { - x: leftPos[0], - y: leftPos[1] - }), - className: "link-point-left", - name: "link-point-left", - isAnchorPoint: true - }); - } - } - var rightPos = null; - if (direction3 === "up") { - rightPos = [r4, diffY]; - } else if (direction3 === "down") { - rightPos = [r4, -diffY]; - } else if (direction3 === "right") { - rightPos = [r4, r4 - diffY]; - } - if (rightPos) { - if (markRight) { - if (!right2 && right2 !== void 0) { - markRight.remove(); - delete group3["shapeMap"]["link-point-right"]; - } else { - markRight.attr(__assign(__assign({}, styles), { - x: rightPos[0], - y: rightPos[1] - })); - } - } else if (right2) { - group3["shapeMap"]["link-point-right"] = group3.addShape("circle", { - attrs: __assign(__assign({}, styles), { - x: rightPos[0], - y: rightPos[1] - }), - className: "link-point-right", - name: "link-point-right", - isAnchorPoint: true - }); - } - } - var topPos = null; - if (direction3 === "up") { - topPos = [r4 - diffY, -diffY]; - } else if (direction3 === "left") { - topPos = [r4, -diffY]; - } else if (direction3 === "right") { - topPos = [-r4, -diffY]; - } - if (topPos) { - if (markTop) { - if (!top && top !== void 0) { - markTop.remove(); - delete group3["shapeMap"]["link-point-top"]; - } else { - markTop.attr(__assign(__assign({}, styles), { - x: topPos[0], - y: topPos[1] - })); - } - } else if (top) { - group3["shapeMap"]["link-point-top"] = group3.addShape("circle", { - attrs: __assign(__assign({}, styles), { - x: topPos[0], - y: topPos[1] - }), - className: "link-point-top", - name: "link-point-top", - isAnchorPoint: true - }); - } - } - var bottomPos = null; - if (direction3 === "down") { - bottomPos = [-r4 + diffY, diffY]; - } else if (direction3 === "left") { - bottomPos = [r4, diffY]; - } else if (direction3 === "right") { - bottomPos = [-r4, diffY]; - } - if (bottomPos) { - if (markBottom) { - if (!bottom && bottom !== void 0) { - markBottom.remove(); - delete group3["shapeMap"]["link-point-bottom"]; - } else { - markBottom.attr(__assign(__assign({}, styles), { - x: bottomPos[0], - y: bottomPos[1] - })); - } - } else if (bottom) { - group3["shapeMap"]["link-point-bottom"] = group3.addShape("circle", { - attrs: __assign(__assign({}, styles), { - x: bottomPos[0], - y: bottomPos[1] - }), - className: "link-point-bottom", - name: "link-point-bottom", - isAnchorPoint: true - }); - } - } - } -}, "single-node"); - -// node_modules/@antv/g6-element/es/nodes/modelRect.js -var import_util579 = __toModule(require_lib()); -registerNode("modelRect", { - options: { - size: [185, 70], - style: { - radius: 5, - stroke: "#69c0ff", - fill: "#ffffff", - lineWidth: BaseGlobal.defaultNode.style.lineWidth, - fillOpacity: 1 - }, - labelCfg: { - style: { - fill: "#595959", - fontSize: 14, - fontFamily: BaseGlobal.windowFontFamily - }, - offset: 30 - }, - descriptionCfg: { - style: { - fontSize: 12, - fill: "#bfbfbf", - fontFamily: BaseGlobal.windowFontFamily - }, - paddingTop: 0 - }, - preRect: { - show: true, - width: 4, - fill: "#40a9ff", - radius: 2 - }, - linkPoints: { - top: false, - right: false, - bottom: false, - left: false, - size: 10, - lineWidth: 1, - fill: "#72CC4A", - stroke: "#72CC4A" - }, - logoIcon: { - show: true, - x: 0, - y: 0, - img: "https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg", - width: 16, - height: 16, - offset: 0 - }, - stateIcon: { - show: true, - x: 0, - y: 0, - img: "https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg", - width: 16, - height: 16, - offset: -5 - }, - anchorPoints: [[0, 0.5], [1, 0.5]] - }, - shapeType: "modelRect", - drawShape: function drawShape16(cfg, group3) { - var _a6 = (this.mergeStyle || this.getOptions(cfg)).preRect, preRect = _a6 === void 0 ? {} : _a6; - var style = this.getShapeStyle(cfg); - var size14 = this.getSize(cfg); - var width2 = size14[0]; - var height = size14[1]; - var keyShape = group3.addShape("rect", { - attrs: style, - className: "".concat(this.type, "-keyShape"), - name: "".concat(this.type, "-keyShape"), - draggable: true - }); - group3["shapeMap"]["".concat(this.type, "-keyShape")] = keyShape; - var preRectShow = preRect.show, preRectStyle = __rest(preRect, ["show"]); - if (preRectShow) { - group3["shapeMap"]["pre-rect"] = group3.addShape("rect", { - attrs: __assign({ - x: -width2 / 2, - y: -height / 2, - height - }, preRectStyle), - className: "pre-rect", - name: "pre-rect", - draggable: true - }); - } - this.drawLogoIcon(cfg, group3); - this.drawStateIcon(cfg, group3); - this.drawLinkPoints(cfg, group3); - return keyShape; - }, - drawLogoIcon: function drawLogoIcon(cfg, group3) { - var _a6 = (this.mergeStyle || this.getOptions(cfg)).logoIcon, logoIcon = _a6 === void 0 ? {} : _a6; - var size14 = this.getSize(cfg); - var width2 = size14[0]; - if (logoIcon.show) { - var w4 = logoIcon.width, h3 = logoIcon.height, x6 = logoIcon.x, y5 = logoIcon.y, offset = logoIcon.offset, text = logoIcon.text, logoIconStyle = __rest(logoIcon, ["width", "height", "x", "y", "offset", "text"]); - if (text) { - group3["shapeMap"]["rect-logo-icon"] = group3.addShape("text", { - attrs: __assign({ - x: 0, - y: 0, - fontSize: 12, - fill: "#000", - stroke: "#000", - textBaseline: "middle", - textAlign: "center" - }, logoIconStyle), - className: "rect-logo-icon", - name: "rect-logo-icon", - draggable: true - }); - } else { - group3["shapeMap"]["rect-logo-icon"] = group3.addShape("image", { - attrs: __assign(__assign({}, logoIconStyle), { - x: x6 || -width2 / 2 + w4 + offset, - y: y5 || -h3 / 2, - width: w4, - height: h3 - }), - className: "rect-logo-icon", - name: "rect-logo-icon", - draggable: true - }); - } - } - }, - drawStateIcon: function drawStateIcon(cfg, group3) { - var _a6 = (this.mergeStyle || this.getOptions(cfg)).stateIcon, stateIcon = _a6 === void 0 ? {} : _a6; - var size14 = this.getSize(cfg); - var width2 = size14[0]; - if (stateIcon.show) { - var w4 = stateIcon.width, h3 = stateIcon.height, x6 = stateIcon.x, y5 = stateIcon.y, offset = stateIcon.offset, text = stateIcon.text, iconStyle = __rest(stateIcon, ["width", "height", "x", "y", "offset", "text"]); - if (text) { - group3["shapeMap"]["rect-state-icon"] = group3.addShape("text", { - attrs: __assign({ - x: 0, - y: 0, - fontSize: 12, - fill: "#000", - stroke: "#000", - textBaseline: "middle", - textAlign: "center" - }, iconStyle), - className: "rect-state-icon", - name: "rect-state-icon", - draggable: true - }); - } else { - group3["shapeMap"]["rect-state-icon"] = group3.addShape("image", { - attrs: __assign(__assign({}, iconStyle), { - x: x6 || width2 / 2 - w4 + offset, - y: y5 || -h3 / 2, - width: w4, - height: h3 - }), - className: "rect-state-icon", - name: "rect-state-icon", - draggable: true - }); - } - } - }, - drawLinkPoints: function drawLinkPoints6(cfg, group3) { - var _a6 = (this.mergeStyle || this.getOptions(cfg)).linkPoints, linkPoints = _a6 === void 0 ? {} : _a6; - var top = linkPoints.top, left2 = linkPoints.left, right2 = linkPoints.right, bottom = linkPoints.bottom, markSize = linkPoints.size, markR = linkPoints.r, markStyle = __rest(linkPoints, ["top", "left", "right", "bottom", "size", "r"]); - var size14 = this.getSize(cfg); - var width2 = size14[0]; - var height = size14[1]; - if (left2) { - group3["shapeMap"]["link-point-left"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: -width2 / 2, - y: 0, - r: markSize / 2 || markR || 5 - }), - className: "link-point-left", - name: "link-point-left", - isAnchorPoint: true - }); - } - if (right2) { - group3["shapeMap"]["link-point-right"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: width2 / 2, - y: 0, - r: markSize / 2 || markR || 5 - }), - className: "link-point-right", - name: "link-point-right", - isAnchorPoint: true - }); - } - if (top) { - group3["shapeMap"]["link-point-top"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: 0, - y: -height / 2, - r: markSize / 2 || markR || 5 - }), - className: "link-point-top", - name: "link-point-top", - isAnchorPoint: true - }); - } - if (bottom) { - group3["shapeMap"]["link-point-bottom"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: 0, - y: height / 2, - r: markSize / 2 || markR || 5 - }), - className: "link-point-bottom", - name: "link-point-bottom", - isAnchorPoint: true - }); - } - }, - drawLabel: function drawLabel3(cfg, group3) { - var _a6 = this.getOptions(cfg), _b = _a6.labelCfg, labelCfg = _b === void 0 ? {} : _b, _c = _a6.logoIcon, logoIcon = _c === void 0 ? {} : _c, _d = _a6.descriptionCfg, descriptionCfg = _d === void 0 ? {} : _d; - var size14 = this.getSize(cfg); - var width2 = size14[0]; - var label17 = null; - var show = logoIcon.show, w4 = logoIcon.width; - var offsetX = -width2 / 2 + labelCfg.offset; - if (show) { - offsetX = -width2 / 2 + w4 + labelCfg.offset; - } - var fontStyle = labelCfg.style; - var descriptionStyle = descriptionCfg.style, descriptionPaddingTop = descriptionCfg.paddingTop; - if ((0, import_util579.isString)(cfg.description)) { - label17 = group3.addShape("text", { - attrs: __assign(__assign({}, fontStyle), { - x: offsetX, - y: -5, - text: cfg.label - }), - className: "text-shape", - name: "text-shape", - draggable: true, - labelRelated: true - }); - group3["shapeMap"]["text-shape"] = label17; - group3["shapeMap"]["rect-description"] = group3.addShape("text", { - attrs: __assign(__assign({}, descriptionStyle), { - x: offsetX, - y: 17 + (descriptionPaddingTop || 0), - text: cfg.description - }), - className: "rect-description", - name: "rect-description", - draggable: true, - labelRelated: true - }); - } else { - label17 = group3.addShape("text", { - attrs: __assign(__assign({}, fontStyle), { - x: offsetX, - y: 7, - text: cfg.label - }), - className: "text-shape", - name: "text-shape", - draggable: true, - labelRelated: true - }); - group3["shapeMap"]["text-shape"] = label17; - } - return label17; - }, - getShapeStyle: function getShapeStyle13(cfg) { - var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style; - var strokeStyle = { - stroke: cfg.color - }; - var style = (0, import_util579.mix)({}, defaultStyle, strokeStyle); - var size14 = this.getSize(cfg); - var width2 = style.width || size14[0]; - var height = style.height || size14[1]; - var styles = __assign({ - x: -width2 / 2, - y: -height / 2, - width: width2, - height - }, style); - return styles; - }, - update: function update12(cfg, item) { - var _a6 = this.mergeStyle || this.getOptions(cfg), _b = _a6.style, style = _b === void 0 ? {} : _b, _c = _a6.labelCfg, labelCfg = _c === void 0 ? {} : _c, _d = _a6.descriptionCfg, descriptionCfg = _d === void 0 ? {} : _d; - var size14 = this.getSize(cfg); - var width2 = size14[0]; - var height = size14[1]; - var keyShape = item.get("keyShape"); - keyShape.attr(__assign(__assign({}, style), { - x: -width2 / 2, - y: -height / 2, - width: width2, - height - })); - var group3 = item.getContainer(); - var logoIconShape = group3["shapeMap"]["rect-logo-icon"] || group3.find(function(element) { - return element.get("className") === "rect-logo-icon"; - }); - var currentLogoIconAttr = logoIconShape ? logoIconShape.attr() : {}; - var logoIcon = (0, import_util579.mix)({}, currentLogoIconAttr, cfg.logoIcon); - var w4 = logoIcon.width; - if (w4 === void 0) { - w4 = this.options.logoIcon.width; - } - var show = cfg.logoIcon ? cfg.logoIcon.show : void 0; - var offset = labelCfg.offset; - var offsetX = -width2 / 2 + w4 + offset; - if (!show && show !== void 0) { - offsetX = -width2 / 2 + offset; - } - var label17 = group3["shapeMap"]["node-label"] || group3.find(function(element) { - return element.get("className") === "node-label"; - }); - var description = group3["shapeMap"]["rect-description"] || group3.find(function(element) { - return element.get("className") === "rect-description"; - }); - if (cfg.label) { - if (!label17) { - group3["shapeMap"]["node-label"] = group3.addShape("text", { - attrs: __assign(__assign({}, labelCfg.style), { - x: offsetX, - y: cfg.description ? -5 : 7, - text: cfg.label - }), - className: "node-label", - name: "node-label", - draggable: true, - labelRelated: true - }); - } else { - var cfgStyle = cfg.labelCfg ? cfg.labelCfg.style : {}; - var labelStyle = (0, import_util579.mix)({}, label17.attr(), cfgStyle); - if (cfg.label) - labelStyle.text = cfg.label; - labelStyle.x = offsetX; - if ((0, import_util579.isString)(cfg.description)) - labelStyle.y = -5; - if (description) { - description.resetMatrix(); - description.attr({ - x: offsetX - }); - } - label17.resetMatrix(); - label17.attr(labelStyle); - } - } - if ((0, import_util579.isString)(cfg.description)) { - var paddingTop = descriptionCfg.paddingTop; - if (!description) { - group3["shapeMap"]["rect-description"] = group3.addShape("text", { - attrs: __assign(__assign({}, descriptionCfg.style), { - x: offsetX, - y: 17 + (paddingTop || 0), - text: cfg.description - }), - className: "rect-description", - name: "rect-description", - draggable: true, - labelRelated: true - }); - } else { - var cfgStyle = cfg.descriptionCfg ? cfg.descriptionCfg.style : {}; - var descriptionStyle = (0, import_util579.mix)({}, description.attr(), cfgStyle); - if ((0, import_util579.isString)(cfg.description)) - descriptionStyle.text = cfg.description; - descriptionStyle.x = offsetX; - description.resetMatrix(); - description.attr(__assign(__assign({}, descriptionStyle), { - y: 17 + (paddingTop || 0) - })); - } - } - var preRectShape = group3["shapeMap"]["pre-rect"] || group3.find(function(element) { - return element.get("className") === "pre-rect"; - }); - if (preRectShape && !preRectShape.destroyed) { - var preRect = (0, import_util579.mix)({}, preRectShape.attr(), cfg.preRect); - preRectShape.attr(__assign(__assign({}, preRect), { - x: -width2 / 2, - y: -height / 2, - height - })); - } - if (logoIconShape && !logoIconShape.destroyed) { - if (!show && show !== void 0) { - logoIconShape.remove(); - delete group3["shapeMap"]["pre-rect"]; - } else { - var logoW = logoIcon.width, h3 = logoIcon.height, x6 = logoIcon.x, y5 = logoIcon.y, logoOffset = logoIcon.offset, logoIconStyle = __rest(logoIcon, ["width", "height", "x", "y", "offset"]); - logoIconShape.attr(__assign(__assign({}, logoIconStyle), { - x: x6 || -width2 / 2 + logoW + logoOffset, - y: y5 || -h3 / 2, - width: logoW, - height: h3 - })); - } - } else if (show) { - this.drawLogoIcon(cfg, group3); - } - var stateIconShape = group3["shapeMap"]["rect-state-icon"] || group3.find(function(element) { - return element.get("className") === "rect-state-icon"; - }); - var currentStateIconAttr = stateIconShape ? stateIconShape.attr() : {}; - var stateIcon = (0, import_util579.mix)({}, currentStateIconAttr, cfg.stateIcon); - if (stateIconShape) { - if (!stateIcon.show && stateIcon.show !== void 0) { - stateIconShape.remove(); - delete group3["shapeMap"]["rect-state-icon"]; - } - var stateW = stateIcon.width, h3 = stateIcon.height, x6 = stateIcon.x, y5 = stateIcon.y, stateOffset = stateIcon.offset, stateIconStyle = __rest(stateIcon, ["width", "height", "x", "y", "offset"]); - stateIconShape.attr(__assign(__assign({}, stateIconStyle), { - x: x6 || width2 / 2 - stateW + stateOffset, - y: y5 || -h3 / 2, - width: stateW, - height: h3 - })); - } else if (stateIcon.show) { - this.drawStateIcon(cfg, group3); - } - this.updateLinkPoints(cfg, group3); - } -}, "single-node"); - -// node_modules/@antv/g6-element/es/nodes/star.js -var import_util580 = __toModule(require_lib()); -registerNode("star", { - options: { - size: 60, - style: { - stroke: BaseGlobal.defaultNode.style.stroke, - fill: BaseGlobal.defaultNode.style.fill, - lineWidth: BaseGlobal.defaultNode.style.lineWidth - }, - labelCfg: { - style: { - fill: BaseGlobal.nodeLabel.style.fill, - fontSize: BaseGlobal.nodeLabel.style.fontSize, - fontFamily: BaseGlobal.windowFontFamily - } - }, - linkPoints: { - top: false, - right: false, - bottom: false, - left: false, - size: BaseGlobal.defaultNode.linkPoints.size, - lineWidth: BaseGlobal.defaultNode.linkPoints.lineWidth, - fill: BaseGlobal.defaultNode.linkPoints.fill, - stroke: BaseGlobal.defaultNode.linkPoints.stroke - }, - icon: { - show: false, - img: "https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg", - width: 20, - height: 20 - }, - stateStyles: __assign({}, BaseGlobal.nodeStateStyles) - }, - shapeType: "star", - labelPosition: "center", - drawShape: function drawShape17(cfg, group3) { - var _a6 = (this.mergeStyle || this.getOptions(cfg)).icon, icon = _a6 === void 0 ? {} : _a6; - var style = this.getShapeStyle(cfg); - var keyShape = group3.addShape("path", { - attrs: style, - className: "".concat(this.type, "-keyShape"), - name: "".concat(this.type, "-keyShape"), - draggable: true - }); - group3["shapeMap"]["".concat(this.type, "-keyShape")] = keyShape; - var w4 = icon.width, h3 = icon.height, show = icon.show, text = icon.text; - if (show) { - if (text) { - group3["shapeMap"]["".concat(this.type, "-icon")] = group3.addShape("text", { - attrs: __assign({ - x: 0, - y: 0, - fontSize: 12, - fill: "#000", - stroke: "#000", - textBaseline: "middle", - textAlign: "center" - }, icon), - className: "".concat(this.type, "-icon"), - name: "".concat(this.type, "-icon"), - draggable: true - }); - } else { - group3["shapeMap"]["".concat(this.type, "-icon")] = group3.addShape("image", { - attrs: __assign({ - x: -w4 / 2, - y: -h3 / 2 - }, icon), - className: "".concat(this.type, "-icon"), - name: "".concat(this.type, "-icon"), - draggable: true - }); - } - } - this.drawLinkPoints(cfg, group3); - return keyShape; - }, - drawLinkPoints: function drawLinkPoints7(cfg, group3) { - var _a6 = (this.mergeStyle || this.getOptions(cfg)).linkPoints, linkPoints = _a6 === void 0 ? {} : _a6; - var top = linkPoints.top, left2 = linkPoints.left, right2 = linkPoints.right, leftBottom = linkPoints.leftBottom, rightBottom = linkPoints.rightBottom, markSize = linkPoints.size, markR = linkPoints.r, markStyle = __rest(linkPoints, ["top", "left", "right", "leftBottom", "rightBottom", "size", "r"]); - var size14 = this.getSize(cfg); - var outerR = size14[0]; - if (right2) { - var x1 = Math.cos((18 + 72 * 0) / 180 * Math.PI) * outerR; - var y1 = Math.sin((18 + 72 * 0) / 180 * Math.PI) * outerR; - group3["shapeMap"]["link-point-right"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: x1, - y: -y1, - r: markSize / 2 || markR || 5 - }), - className: "link-point-right", - name: "link-point-right" - }); - } - if (top) { - var x1 = Math.cos((18 + 72 * 1) / 180 * Math.PI) * outerR; - var y1 = Math.sin((18 + 72 * 1) / 180 * Math.PI) * outerR; - group3["shapeMap"]["link-point-top"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: x1, - y: -y1, - r: markSize / 2 || markR || 5 - }), - className: "link-point-top", - name: "link-point-top" - }); - } - if (left2) { - var x1 = Math.cos((18 + 72 * 2) / 180 * Math.PI) * outerR; - var y1 = Math.sin((18 + 72 * 2) / 180 * Math.PI) * outerR; - group3["shapeMap"]["link-point-left"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: x1, - y: -y1, - r: markSize / 2 || markR || 5 - }), - className: "link-point-left", - name: "link-point-left" - }); - } - if (leftBottom) { - var x1 = Math.cos((18 + 72 * 3) / 180 * Math.PI) * outerR; - var y1 = Math.sin((18 + 72 * 3) / 180 * Math.PI) * outerR; - group3["shapeMap"]["link-point-bottom"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: x1, - y: -y1, - r: markSize / 2 || markR || 5 - }), - className: "link-point-left-bottom", - name: "link-point-left-bottom" - }); - } - if (rightBottom) { - var x1 = Math.cos((18 + 72 * 4) / 180 * Math.PI) * outerR; - var y1 = Math.sin((18 + 72 * 4) / 180 * Math.PI) * outerR; - group3["shapeMap"]["link-point-right-bottom"] = group3.addShape("circle", { - attrs: __assign(__assign({}, markStyle), { - x: x1, - y: -y1, - r: markSize / 2 || markR || 5 - }), - className: "link-point-right-bottom", - name: "link-point-right-bottom" - }); - } - }, - getPath: function getPath12(cfg) { - var size14 = this.getSize(cfg); - var outerR = size14[0]; - var defaultInnerR = outerR * 3 / 8; - var innerR = cfg.innerR || defaultInnerR; - var path = []; - for (var i4 = 0; i4 < 5; i4++) { - var x1 = Math.cos((18 + 72 * i4) / 180 * Math.PI) * outerR; - var y1 = Math.sin((18 + 72 * i4) / 180 * Math.PI) * outerR; - var x22 = Math.cos((54 + 72 * i4) / 180 * Math.PI) * innerR; - var y22 = Math.sin((54 + 72 * i4) / 180 * Math.PI) * innerR; - if (i4 === 0) { - path.push(["M", x1, -y1]); - } else { - path.push(["L", x1, -y1]); - } - path.push(["L", x22, -y22]); - } - path.push(["Z"]); - return path; - }, - getShapeStyle: function getShapeStyle14(cfg) { - var defaultStyle = (this.mergeStyle || this.getOptions(cfg)).style; - var strokeStyle = { - stroke: cfg.color - }; - var style = (0, import_util580.mix)({}, defaultStyle, strokeStyle); - var path = this.getPath(cfg); - var styles = __assign({ - path - }, style); - return styles; - }, - update: function update13(cfg, item, updateType) { - var group3 = item.getContainer(); - var defaultStyle = this.getOptions({}).style; - var path = this.getPath(cfg); - var strokeStyle = { - stroke: cfg.color, - path - }; - var keyShape = item.get("keyShape"); - var style = (0, import_util580.mix)({}, defaultStyle, keyShape.attr(), strokeStyle); - style = (0, import_util580.mix)(style, cfg.style); - this.updateShape(cfg, item, style, true, updateType); - this.updateLinkPoints(cfg, group3); - }, - updateLinkPoints: function updateLinkPoints3(cfg, group3) { - var defaultLinkPoints = this.getOptions({}).linkPoints; - var markLeft = group3["shapeMap"]["link-point-left"] || group3.find(function(element) { - return element.get("className") === "link-point-left"; - }); - var markRight = group3["shapeMap"]["link-point-right"] || group3.find(function(element) { - return element.get("className") === "link-point-right"; - }); - var markTop = group3["shapeMap"]["link-point-top"] || group3.find(function(element) { - return element.get("className") === "link-point-top"; - }); - var markLeftBottom = group3["shapeMap"]["link-point-left-bottom"] || group3.find(function(element) { - return element.get("className") === "link-point-left-bottom"; - }); - var markRightBottom = group3["shapeMap"]["link-point-left-bottom"] || group3.find(function(element) { - return element.get("className") === "link-point-right-bottom"; - }); - var currentLinkPoints = defaultLinkPoints; - var existLinkPoint = markLeft || markRight || markTop || markLeftBottom || markRightBottom; - if (existLinkPoint) { - currentLinkPoints = existLinkPoint.attr(); - } - var linkPoints = (0, import_util580.mix)({}, currentLinkPoints, cfg.linkPoints); - var markFill = linkPoints.fill, markStroke = linkPoints.stroke, borderWidth = linkPoints.lineWidth; - var markSize = linkPoints.size / 2; - if (!markSize) - markSize = linkPoints.r; - var _a6 = cfg.linkPoints ? cfg.linkPoints : { - left: void 0, - right: void 0, - top: void 0, - leftBottom: void 0, - rightBottom: void 0 - }, left2 = _a6.left, right2 = _a6.right, top = _a6.top, leftBottom = _a6.leftBottom, rightBottom = _a6.rightBottom; - var size14 = this.getSize(cfg); - var outerR = size14[0]; - var styles = { - r: markSize, - fill: markFill, - stroke: markStroke, - lineWidth: borderWidth - }; - var x6 = Math.cos((18 + 72 * 0) / 180 * Math.PI) * outerR; - var y5 = Math.sin((18 + 72 * 0) / 180 * Math.PI) * outerR; - if (markRight) { - if (!right2 && right2 !== void 0) { - markRight.remove(); - delete group3["shapeMap"]["link-point-right"]; - } else { - markRight.attr(__assign(__assign({}, styles), { - x: x6, - y: -y5 - })); - } - } else if (right2) { - group3["shapeMap"]["link-point-right"] = group3.addShape("circle", { - attrs: __assign(__assign({}, styles), { - x: x6, - y: -y5 - }), - className: "link-point-right", - name: "link-point-right", - isAnchorPoint: true - }); - } - x6 = Math.cos((18 + 72 * 1) / 180 * Math.PI) * outerR; - y5 = Math.sin((18 + 72 * 1) / 180 * Math.PI) * outerR; - if (markTop) { - if (!top && top !== void 0) { - markTop.remove(); - delete group3["shapeMap"]["link-point-top"]; - } else { - markTop.attr(__assign(__assign({}, styles), { - x: x6, - y: -y5 - })); - } - } else if (top) { - group3["shapeMap"]["link-point-top"] = group3.addShape("circle", { - attrs: __assign(__assign({}, styles), { - x: x6, - y: -y5 - }), - className: "link-point-top", - name: "link-point-top", - isAnchorPoint: true - }); - } - x6 = Math.cos((18 + 72 * 2) / 180 * Math.PI) * outerR; - y5 = Math.sin((18 + 72 * 2) / 180 * Math.PI) * outerR; - if (markLeft) { - if (!left2 && left2 !== void 0) { - markLeft.remove(); - delete group3["shapeMap"]["link-point-left"]; - } else { - markLeft.attr(__assign(__assign({}, styles), { - x: x6, - y: -y5 - })); - } - } else if (left2) { - group3["shapeMap"]["link-point-left"] = group3.addShape("circle", { - attrs: __assign(__assign({}, styles), { - x: x6, - y: -y5 - }), - className: "link-point-left", - name: "link-point-left", - isAnchorPoint: true - }); - } - x6 = Math.cos((18 + 72 * 3) / 180 * Math.PI) * outerR; - y5 = Math.sin((18 + 72 * 3) / 180 * Math.PI) * outerR; - if (markLeftBottom) { - if (!leftBottom && leftBottom !== void 0) { - markLeftBottom.remove(); - delete group3["shapeMap"]["link-point-left-bottom"]; - } else { - markLeftBottom.attr(__assign(__assign({}, styles), { - x: x6, - y: -y5 - })); - } - } else if (leftBottom) { - group3["shapeMap"]["link-point-left-bottom"] = group3.addShape("circle", { - attrs: __assign(__assign({}, styles), { - x: x6, - y: -y5 - }), - className: "link-point-left-bottom", - name: "link-point-left-bottom", - isAnchorPoint: true - }); - } - x6 = Math.cos((18 + 72 * 4) / 180 * Math.PI) * outerR; - y5 = Math.sin((18 + 72 * 4) / 180 * Math.PI) * outerR; - if (markRightBottom) { - if (!rightBottom && rightBottom !== void 0) { - markLeftBottom.remove(); - delete group3["shapeMap"]["link-point-right-bottom"]; - } else { - markRightBottom.attr(__assign(__assign({}, styles), { - x: x6, - y: -y5 - })); - } - } else if (rightBottom) { - group3["shapeMap"]["link-point-right-bottom"] = group3.addShape("circle", { - attrs: __assign(__assign({}, styles), { - x: x6, - y: -y5 - }), - className: "link-point-right-bottom", - name: "link-point-right-bottom", - isAnchorPoint: true - }); - } - } -}, "single-node"); - -// node_modules/@antv/g6-element/es/nodes/donut.js -var import_util581 = __toModule(require_lib()); -var defaultSubjectColors2 = util_default.defaultSubjectColors; -registerNode("donut", { - options: { - size: BaseGlobal.defaultNode.size, - style: { - x: 0, - y: 0, - stroke: BaseGlobal.defaultNode.style.stroke, - fill: BaseGlobal.defaultNode.style.fill, - lineWidth: BaseGlobal.defaultNode.style.lineWidth - }, - labelCfg: { - style: { - fill: BaseGlobal.nodeLabel.style.fill, - fontSize: BaseGlobal.nodeLabel.style.fontSize, - fontFamily: BaseGlobal.windowFontFamily - } - }, - linkPoints: { - top: false, - right: false, - bottom: false, - left: false, - size: BaseGlobal.defaultNode.linkPoints.size, - lineWidth: BaseGlobal.defaultNode.linkPoints.lineWidth, - fill: BaseGlobal.defaultNode.linkPoints.fill, - stroke: BaseGlobal.defaultNode.linkPoints.stroke - }, - icon: { - show: false, - img: "https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg", - width: 20, - height: 20 - }, - stateStyles: __assign({}, BaseGlobal.nodeStateStyles) - }, - shapeType: "circle", - labelPosition: "center", - drawShape: function drawShape18(cfg, group3) { - var _a6 = (this.mergeStyle || this.getOptions(cfg)).icon, defaultIcon = _a6 === void 0 ? {} : _a6; - var style = this.getShapeStyle(cfg); - var icon = (0, import_util581.deepMix)({}, defaultIcon, cfg.icon); - var keyShape = group3.addShape("circle", { - attrs: style, - className: "".concat(this.type, "-keyShape"), - draggable: true, - name: "".concat(this.type, "-keyShape") - }); - group3["shapeMap"]["".concat(this.type, "-keyShape")] = keyShape; - var width2 = icon.width, height = icon.height, show = icon.show, text = icon.text; - if (show) { - if (text) { - group3["shapeMap"]["".concat(this.type, "-icon")] = group3.addShape("text", { - attrs: __assign({ - x: 0, - y: 0, - fontSize: 12, - fill: "#000", - stroke: "#000", - textBaseline: "middle", - textAlign: "center" - }, icon), - className: "".concat(this.type, "-icon"), - name: "".concat(this.type, "-icon"), - draggable: true - }); - } else { - group3["shapeMap"]["".concat(this.type, "-icon")] = group3.addShape("image", { - attrs: __assign({ - x: -width2 / 2, - y: -height / 2 - }, icon), - className: "".concat(this.type, "-icon"), - name: "".concat(this.type, "-icon"), - draggable: true - }); - } - } - var donutR = keyShape.attr("r"); - var innerR = 0.6 * donutR; - var arcR = (donutR + innerR) / 2; - var _b = cfg, _c = _b.donutAttrs, donutAttrs = _c === void 0 ? {} : _c, _d = _b.donutColorMap, donutColorMap = _d === void 0 ? {} : _d; - var attrNum = Object.keys(donutAttrs).length; - if (donutAttrs && attrNum > 1) { - var attrs_1 = []; - var totalValue_1 = 0; - Object.keys(donutAttrs).forEach(function(name) { - var value2 = donutAttrs[name] || 0; - if (!(0, import_util581.isNumber)(value2)) - return; - attrs_1.push({ - key: name, - value: value2, - color: donutColorMap[name] - }); - totalValue_1 += value2; - }); - if (totalValue_1) { - var lineWidth_1 = donutR - innerR; - if (attrNum === 1) { - group3["shapeMap"]["fan-shape-0"] = group3.addShape("circle", { - attrs: { - r: arcR, - x: 0, - y: 0, - stroke: attrs_1[0].color || defaultSubjectColors2[0], - lineWidth: lineWidth_1 - }, - name: "fan-shape-0" - }); - return; - } - var arcBegin_1 = [arcR, 0]; - var beginAngle_1 = 0; - attrs_1.forEach(function(attr, i4) { - var percent2 = attr.value / totalValue_1; - if (percent2 < 1e-3) - return; - if (percent2 > 0.999) - percent2 = 1; - if (percent2 === 1) { - group3["shapeMap"]["fan-shape-".concat(i4)] = group3.addShape("circle", { - attrs: { - r: arcR, - x: 0, - y: 0, - stroke: attr.color || defaultSubjectColors2[i4 % defaultSubjectColors2.length], - lineWidth: lineWidth_1 - }, - name: "fan-shape-".concat(i4) - }); - return; - } - attr.percent = percent2; - attr.angle = percent2 * Math.PI * 2; - attr.beginAgnle = beginAngle_1; - beginAngle_1 += attr.angle; - attr.endAngle = beginAngle_1; - attr.arcBegin = arcBegin_1; - attr.arcEnd = [arcR * Math.cos(attr.endAngle), -arcR * Math.sin(attr.endAngle)]; - var isBig = attr.angle > Math.PI ? 1 : 0; - var path = [["M", attr.arcBegin[0], attr.arcBegin[1]], ["A", arcR, arcR, 0, isBig, 0, attr.arcEnd[0], attr.arcEnd[1]], ["L", attr.arcEnd[0], attr.arcEnd[1]]]; - group3["shapeMap"]["fan-shape-".concat(i4)] = group3.addShape("path", { - attrs: { - path, - lineWidth: lineWidth_1, - stroke: attr.color || defaultSubjectColors2[i4 % defaultSubjectColors2.length] - }, - name: "fan-shape-".concat(i4) - }); - arcBegin_1 = attr.arcEnd; - }); - } - } - this.drawLinkPoints(cfg, group3); - return keyShape; - }, - update: void 0 -}, "circle"); - -// node_modules/@antv/g6-element/es/edges/polyline.js -var import_util583 = __toModule(require_lib()); - -// node_modules/@antv/g6-element/es/edges/polyline-util.js -var getBBoxFromPoint = function getBBoxFromPoint2(point2) { - var x6 = point2.x, y5 = point2.y; - return { - x: x6, - y: y5, - centerX: x6, - centerY: y5, - minX: x6, - minY: y5, - maxX: x6, - maxY: y5, - height: 0, - width: 0 - }; -}; -var getBBoxFromPoints = function getBBoxFromPoints2(points) { - if (points === void 0) { - points = []; - } - var xs = []; - var ys = []; - points.forEach(function(p4) { - xs.push(p4.x); - ys.push(p4.y); - }); - var minX = Math.min.apply(Math, xs); - var maxX = Math.max.apply(Math, xs); - var minY = Math.min.apply(Math, ys); - var maxY2 = Math.max.apply(Math, ys); - return { - centerX: (minX + maxX) / 2, - centerY: (minY + maxY2) / 2, - maxX, - maxY: maxY2, - minX, - minY, - height: maxY2 - minY, - width: maxX - minX - }; -}; -var filterConnectPoints = function filterConnectPoints2(points) { - var result = []; - var pointsMap = {}; - var pointsLength = points.length; - for (var i4 = pointsLength - 1; i4 >= 0; i4--) { - var p4 = points[i4]; - p4.id = "".concat(p4.x, "|||").concat(p4.y); - pointsMap[p4.id] = p4; - result.push(p4); - } - return result; -}; -var simplifyPolyline = function simplifyPolyline2(points) { - return filterConnectPoints(points); -}; -var getExpandedBBox = function getExpandedBBox2(bbox, offset) { - if (bbox.width || bbox.height) { - return { - centerX: bbox.centerX, - centerY: bbox.centerY, - minX: bbox.minX - offset, - minY: bbox.minY - offset, - maxX: bbox.maxX + offset, - maxY: bbox.maxY + offset, - height: bbox.height + 2 * offset, - width: bbox.width + 2 * offset - }; - } - return bbox; -}; -var isHorizontalPort = function isHorizontalPort2(port, bbox) { - var dx = Math.abs(port.x - bbox.centerX); - var dy = Math.abs(port.y - bbox.centerY); - if (dx === 0 && dy === 0) - return 0; - return dx / bbox.width > dy / bbox.height; -}; -var getExpandedBBoxPoint = function getExpandedBBoxPoint2(bbox, point2, anotherPoint) { - var isHorizontal2 = isHorizontalPort(point2, bbox); - if (isHorizontal2 === 0) { - var x6 = bbox.centerX; - var y5 = bbox.centerY; - if (anotherPoint.y < point2.y) { - y5 = bbox.minY; - } else if (anotherPoint.x > point2.x) { - x6 = bbox.maxX; - } else if (anotherPoint.x < point2.x) { - x6 = bbox.minX; - } else if (anotherPoint.x === point2.x) { - y5 = bbox.maxY; - } - return { - x: x6, - y: y5 - }; - } - if (isHorizontal2) { - return { - x: point2.x > bbox.centerX ? bbox.maxX : bbox.minX, - y: point2.y - }; - } - return { - x: point2.x, - y: point2.y > bbox.centerY ? bbox.maxY : bbox.minY - }; -}; -var mergeBBox2 = function mergeBBox3(b12, b23) { - var minX = Math.min(b12.minX, b23.minX); - var minY = Math.min(b12.minY, b23.minY); - var maxX = Math.max(b12.maxX, b23.maxX); - var maxY2 = Math.max(b12.maxY, b23.maxY); - return { - centerX: (minX + maxX) / 2, - centerY: (minY + maxY2) / 2, - minX, - minY, - maxX, - maxY: maxY2, - height: maxY2 - minY, - width: maxX - minX - }; -}; -var getPointsFromBBox = function getPointsFromBBox2(bbox) { - return [{ - x: bbox.minX, - y: bbox.minY - }, { - x: bbox.maxX, - y: bbox.minY - }, { - x: bbox.maxX, - y: bbox.maxY - }, { - x: bbox.minX, - y: bbox.maxY - }]; -}; -var isPointOutsideBBox = function isPointOutsideBBox2(point2, bbox) { - var x6 = point2.x, y5 = point2.y; - return x6 < bbox.minX || x6 > bbox.maxX || y5 < bbox.minY || y5 > bbox.maxY; -}; -var getBBoxXCrossPoints = function getBBoxXCrossPoints2(bbox, x6) { - if (x6 < bbox.minX || x6 > bbox.maxX) { - return []; - } - return [{ - x: x6, - y: bbox.minY - }, { - x: x6, - y: bbox.maxY - }]; -}; -var getBBoxYCrossPoints = function getBBoxYCrossPoints2(bbox, y5) { - if (y5 < bbox.minY || y5 > bbox.maxY) { - return []; - } - return [{ - x: bbox.minX, - y: y5 - }, { - x: bbox.maxX, - y: y5 - }]; -}; -var getBBoxCrossPointsByPoint = function getBBoxCrossPointsByPoint2(bbox, point2) { - return getBBoxXCrossPoints(bbox, point2.x).concat(getBBoxYCrossPoints(bbox, point2.y)); -}; -var distance13 = function distance14(p1, p22) { - return Math.abs(p1.x - p22.x) + Math.abs(p1.y - p22.y); -}; -var _costByPoints = function _costByPoints2(p4, points) { - var offset = -2; - var result = 0; - points.forEach(function(point2) { - if (point2) { - if (p4.x === point2.x) { - result += offset; - } - if (p4.y === point2.y) { - result += offset; - } - } - }); - return result; -}; -var heuristicCostEstimate = function heuristicCostEstimate2(p4, ps, pt, source, target) { - return distance13(p4, ps) + distance13(p4, pt) + _costByPoints(p4, [ps, pt, source, target]); -}; -var reconstructPath = function reconstructPath2(pathPoints, pointById, cameFrom, currentId, iterator) { - if (iterator === void 0) { - iterator = 0; - } - pathPoints.unshift(pointById[currentId]); - if (cameFrom[currentId] && cameFrom[currentId] !== currentId && iterator <= 100) { - reconstructPath2(pathPoints, pointById, cameFrom, cameFrom[currentId], iterator + 1); - } -}; -var removeFrom = function removeFrom2(arr, item) { - var index2 = arr.indexOf(item); - if (index2 > -1) { - arr.splice(index2, 1); - } -}; -var isSegmentsIntersected = function isSegmentsIntersected2(p0, p1, p22, p32) { - var v1x = p22.x - p0.x; - var v1y = p22.y - p0.y; - var v2x = p32.x - p0.x; - var v2y = p32.y - p0.y; - var v3x = p22.x - p1.x; - var v3y = p22.y - p1.y; - var v4x = p32.x - p1.x; - var v4y = p32.y - p1.y; - var pd1 = v1x * v2y - v1y * v2x; - var pd2 = v3x * v4y - v3y * v4x; - var pd3 = v1x * v3y - v1y * v3x; - var pd4 = v2x * v4y - v2y * v4x; - return pd1 * pd2 <= 0 && pd3 * pd4 <= 0; -}; -var isSegmentCrossingBBox = function isSegmentCrossingBBox2(p1, p22, bbox) { - if (bbox.width || bbox.height) { - var _a6 = getPointsFromBBox(bbox), pa = _a6[0], pb = _a6[1], pc = _a6[2], pd = _a6[3]; - return isSegmentsIntersected(p1, p22, pa, pb) || isSegmentsIntersected(p1, p22, pa, pd) || isSegmentsIntersected(p1, p22, pb, pc) || isSegmentsIntersected(p1, p22, pc, pd); - } - return false; -}; -var getNeighborPoints = function getNeighborPoints2(points, point2, bbox1, bbox2) { - var neighbors = []; - points.forEach(function(p4) { - if (p4 === point2) - return; - if (p4.x === point2.x || p4.y === point2.y) { - if (isSegmentCrossingBBox(p4, point2, bbox1) || isSegmentCrossingBBox(p4, point2, bbox2)) - return; - neighbors.push(p4); - } - }); - return filterConnectPoints(neighbors); -}; -var pathFinder = function pathFinder2(points, start, goal, sBBox, tBBox, os, ot) { - var closedSet = []; - var openSet = [start]; - var cameFrom = {}; - var gScore = {}; - var fScore = {}; - gScore[start.id] = 0; - fScore[start.id] = heuristicCostEstimate(start, goal, start); - var pointById = {}; - points.forEach(function(p4) { - pointById[p4.id] = p4; - }); - var current, lowestFScore; - while (openSet.length) { - current = void 0; - lowestFScore = Infinity; - openSet.forEach(function(p4) { - if (fScore[p4.id] <= lowestFScore) { - lowestFScore = fScore[p4.id]; - current = p4; - } - }); - if (current === goal) { - var pathPoints = []; - reconstructPath(pathPoints, pointById, cameFrom, goal.id); - return pathPoints; - } - removeFrom(openSet, current); - closedSet.push(current); - getNeighborPoints(points, current, sBBox, tBBox).forEach(function(neighbor) { - if (closedSet.indexOf(neighbor) !== -1) { - return; - } - if (openSet.indexOf(neighbor) === -1) { - openSet.push(neighbor); - } - var tentativeGScore = fScore[current.id] + distance13(current, neighbor); - if (gScore[neighbor.id] && tentativeGScore >= gScore[neighbor.id]) { - return; - } - cameFrom[neighbor.id] = current.id; - gScore[neighbor.id] = tentativeGScore; - fScore[neighbor.id] = gScore[neighbor.id] + heuristicCostEstimate(neighbor, goal, start, os, ot); - }); - } - return [start, goal]; -}; -var isBending = function isBending2(p0, p1, p22) { - return !(p0.x === p1.x && p1.x === p22.x || p0.y === p1.y && p1.y === p22.y); -}; -var getBorderRadiusPoints = function getBorderRadiusPoints2(p0, p1, p22, r4) { - var d0 = distance13(p0, p1); - var d1 = distance13(p22, p1); - if (d0 < r4) { - r4 = d0; - } - if (d1 < r4) { - r4 = d1; - } - var ps = { - x: p1.x - r4 / d0 * (p1.x - p0.x), - y: p1.y - r4 / d0 * (p1.y - p0.y) - }; - var pt = { - x: p1.x - r4 / d1 * (p1.x - p22.x), - y: p1.y - r4 / d1 * (p1.y - p22.y) - }; - return [ps, pt]; -}; -var getPathWithBorderRadiusByPolyline = function getPathWithBorderRadiusByPolyline2(points, borderRadius) { - var pathSegments = []; - var startPoint = points[0]; - pathSegments.push("M".concat(startPoint.x, " ").concat(startPoint.y)); - points.forEach(function(p4, i4) { - var p1 = points[i4 + 1]; - var p22 = points[i4 + 2]; - if (p1 && p22) { - if (isBending(p4, p1, p22)) { - var _a6 = getBorderRadiusPoints(p4, p1, p22, borderRadius), ps = _a6[0], pt = _a6[1]; - pathSegments.push("L".concat(ps.x, " ").concat(ps.y)); - pathSegments.push("Q".concat(p1.x, " ").concat(p1.y, " ").concat(pt.x, " ").concat(pt.y)); - pathSegments.push("L".concat(pt.x, " ").concat(pt.y)); - } else { - pathSegments.push("L".concat(p1.x, " ").concat(p1.y)); - } - } else if (p1) { - pathSegments.push("L".concat(p1.x, " ").concat(p1.y)); - } - }); - return pathSegments.join(""); -}; -var getPolylinePoints = function getPolylinePoints2(start, end2, sNode, tNode, offset) { - var sBBox, tBBox; - if (!sNode || !sNode.getType()) { - sBBox = getBBoxFromPoint(start); - } else if (sNode.getType() === "combo") { - var sNodeKeyShape = sNode.getKeyShape(); - sBBox = sNodeKeyShape.getCanvasBBox() || getBBoxFromPoint(start); - sBBox.centerX = (sBBox.minX + sBBox.maxX) / 2; - sBBox.centerY = (sBBox.minY + sBBox.maxY) / 2; - } else { - sBBox = sNode.getBBox(); - } - if (!tNode || !tNode.getType()) { - tBBox = getBBoxFromPoint(end2); - } else if (tNode.getType() === "combo") { - var tKeyShapeBBox = tNode.getKeyShape().getBBox(); - if (tKeyShapeBBox) { - var _a6 = tNode.getModel(), tx = _a6.x, ty = _a6.y; - tBBox = { - x: tx, - y: ty, - width: tKeyShapeBBox.width, - height: tKeyShapeBBox.height, - minX: tKeyShapeBBox.minX + tx, - maxX: tKeyShapeBBox.maxX + tx, - minY: tKeyShapeBBox.minY + ty, - maxY: tKeyShapeBBox.maxY + ty - }; - tBBox.centerX = (tBBox.minX + tBBox.maxX) / 2; - tBBox.centerY = (tBBox.minY + tBBox.maxY) / 2; - } else { - tBBox = getBBoxFromPoint(end2); - } - } else { - tBBox = tNode && tNode.getBBox(); - } - var sxBBox = getExpandedBBox(sBBox, offset); - var txBBox = getExpandedBBox(tBBox, offset); - var sPoint = getExpandedBBoxPoint(sxBBox, start, end2); - var tPoint = getExpandedBBoxPoint(txBBox, end2, start); - var lineBBox = getBBoxFromPoints([sPoint, tPoint]); - var sMixBBox = mergeBBox2(sxBBox, lineBBox); - var tMixBBox = mergeBBox2(txBBox, lineBBox); - var connectPoints = []; - connectPoints = connectPoints.concat(getPointsFromBBox(sMixBBox)).concat(getPointsFromBBox(tMixBBox)); - var centerPoint = { - x: (start.x + end2.x) / 2, - y: (start.y + end2.y) / 2 - }; - [lineBBox, sMixBBox, tMixBBox].forEach(function(bbox) { - connectPoints = connectPoints.concat(getBBoxCrossPointsByPoint(bbox, centerPoint).filter(function(p4) { - return isPointOutsideBBox(p4, sxBBox) && isPointOutsideBBox(p4, txBBox); - })); - }); - [{ - x: sPoint.x, - y: tPoint.y - }, { - x: tPoint.x, - y: sPoint.y - }].forEach(function(p4) { - if (isPointOutsideBBox(p4, sxBBox) && isPointOutsideBBox(p4, txBBox)) { - connectPoints.push(p4); - } - }); - connectPoints.unshift(sPoint); - connectPoints.push(tPoint); - connectPoints = filterConnectPoints(connectPoints); - var pathPoints = pathFinder(connectPoints, sPoint, tPoint, sBBox, tBBox, start, end2); - pathPoints.unshift(start); - pathPoints.push(end2); - return simplifyPolyline(pathPoints); -}; - -// node_modules/@antv/g6-element/es/edges/router.js -var import_util582 = __toModule(require_lib()); -var manhattanDist = function manhattanDist2(p1, p22) { - return Math.abs(p1.x - p22.x) + Math.abs(p1.y - p22.y); -}; -var eucliDist = function eucliDist2(p1, p22) { - return Math.sqrt(Math.pow(p1.x - p22.x, 2) + Math.pow(p1.y - p22.y, 2)); -}; -var straightPath = function straightPath2(start, end2) { - return [start, end2]; -}; -var simplePolyline = function simplePolyline2(start, end2, startNode, endNode, cfg) { - return simplifyPolyline(getPolylinePoints(start, end2, startNode, endNode, cfg.offset)); -}; -var defaultCfg = { - offset: 20, - maxAllowedDirectionChange: Math.PI / 2, - maximumLoops: 2e3, - gridSize: 10, - directions: [ - { - stepX: 1, - stepY: 0 - }, - { - stepX: -1, - stepY: 0 - }, - { - stepX: 0, - stepY: 1 - }, - { - stepX: 0, - stepY: -1 - } - ], - get penalties() { - return { - 0: 0, - 45: this.gridSize / 2, - 90: this.gridSize / 2 - }; - }, - distFunc: manhattanDist, - fallbackRoute: simplePolyline -}; -var octolinearCfg = { - maxAllowedDirectionChange: Math.PI / 4, - directions: [{ - stepX: 1, - stepY: 0 - }, { - stepX: 1, - stepY: 1 - }, { - stepX: 0, - stepY: 1 - }, { - stepX: -1, - stepY: 1 - }, { - stepX: -1, - stepY: 0 - }, { - stepX: -1, - stepY: -1 - }, { - stepX: 0, - stepY: -1 - }, { - stepX: 1, - stepY: -1 - }], - distFunc: eucliDist, - fallbackRoute: straightPath -}; -var pos2GridIx = function pos2GridIx2(pos, gridSize) { - var gridIx = Math.round(Math.abs(pos / gridSize)); - var sign = pos < 0 ? -1 : 1; - return gridIx < 0 ? 0 : sign * gridIx; -}; -var getObstacleMap = function getObstacleMap2(items, gridSize, offset) { - var map23 = {}; - items.forEach(function(item) { - if (!item) - return; - var bbox = getExpandedBBox(item.getBBox(), offset); - for (var x6 = pos2GridIx(bbox.minX, gridSize); x6 <= pos2GridIx(bbox.maxX, gridSize); x6 += 1) { - for (var y5 = pos2GridIx(bbox.minY, gridSize); y5 <= pos2GridIx(bbox.maxY, gridSize); y5 += 1) { - map23["".concat(x6, "|||").concat(y5)] = true; - } - } - }); - return map23; -}; -var getDirectionAngle = function getDirectionAngle2(p1, p22) { - var deltaX = p22.x - p1.x; - var deltaY = p22.y - p1.y; - if (deltaX || deltaY) { - return Math.atan2(deltaY, deltaX); - } - return 0; -}; -var getAngleDiff = function getAngleDiff2(angle1, angle22) { - var directionChange = Math.abs(angle1 - angle22); - return directionChange > Math.PI ? 2 * Math.PI - directionChange : directionChange; -}; -var estimateCost = function estimateCost2(from, endPoints, distFunc) { - var min13 = Infinity; - for (var i4 = 0, len5 = endPoints.length; i4 < len5; i4++) { - var cost = distFunc(from, endPoints[i4]); - if (cost < min13) { - min13 = cost; - } - } - return min13; -}; -var getBoxPoints2 = function getBoxPoints3(point2, oriPoint, node, anotherPoint, cfg) { - var points = []; - if (!node) { - return [point2]; - } - var directions = cfg.directions, offset = cfg.offset; - var bbox = node.getBBox(); - var isInside = oriPoint.x > bbox.minX && oriPoint.x < bbox.maxX && oriPoint.y > bbox.minY && oriPoint.y < bbox.maxY; - var expandBBox = getExpandedBBox(bbox, offset); - for (var i4 in expandBBox) { - expandBBox[i4] = pos2GridIx(expandBBox[i4], cfg.gridSize); - } - if (isInside) { - for (var _i = 0, directions_1 = directions; _i < directions_1.length; _i++) { - var dir = directions_1[_i]; - var bounds = [[{ - x: expandBBox.minX, - y: expandBBox.minY - }, { - x: expandBBox.maxX, - y: expandBBox.minY - }], [{ - x: expandBBox.minX, - y: expandBBox.minY - }, { - x: expandBBox.minX, - y: expandBBox.maxY - }], [{ - x: expandBBox.maxX, - y: expandBBox.minY - }, { - x: expandBBox.maxX, - y: expandBBox.maxY - }], [{ - x: expandBBox.minX, - y: expandBBox.maxY - }, { - x: expandBBox.maxX, - y: expandBBox.maxY - }]]; - for (var i4 = 0; i4 < 4; i4++) { - var boundLine = bounds[i4]; - var insterctP_1 = util_default.getLineIntersect(point2, { - x: point2.x + dir.stepX * expandBBox.width, - y: point2.y + dir.stepY * expandBBox.height - }, boundLine[0], boundLine[1]); - if (insterctP_1 && !isSegmentCrossingBBox(point2, insterctP_1, bbox)) { - insterctP_1.id = "".concat(insterctP_1.x, "|||").concat(insterctP_1.y); - points.push(insterctP_1); - } - } - } - return points; - } - var insterctP = getExpandedBBoxPoint(expandBBox, point2, anotherPoint); - insterctP.id = "".concat(insterctP.x, "|||").concat(insterctP.y); - return [insterctP]; -}; -var getDirectionChange = function getDirectionChange2(current, neighbor, cameFrom, scaleStartPoint) { - var directionAngle = getDirectionAngle(current, neighbor); - if (!cameFrom[current.id]) { - var startAngle = getDirectionAngle(scaleStartPoint, current); - return getAngleDiff(startAngle, directionAngle); - } - var prevDirectionAngle = getDirectionAngle({ - x: cameFrom[current.id].x, - y: cameFrom[current.id].y - }, current); - return getAngleDiff(prevDirectionAngle, directionAngle); -}; -var getControlPoints12 = function getControlPoints13(current, cameFrom, scaleStartPoint, endPoint, startPoint, scaleEndPoint, gridSize) { - var controlPoints = [endPoint]; - var currentId = current.id; - var currentX = current.x; - var currentY = current.y; - var lastPoint = { - x: currentX, - y: currentY, - id: currentId - }; - if (getDirectionChange(lastPoint, scaleEndPoint, cameFrom, scaleStartPoint)) { - controlPoints.unshift({ - x: scaleEndPoint.x === endPoint.x ? endPoint.x : lastPoint.x * gridSize, - y: scaleEndPoint.y === endPoint.y ? endPoint.y : lastPoint.y * gridSize - }); - } - while (cameFrom[currentId] && cameFrom[currentId].id !== currentId) { - var point2 = { - x: currentX, - y: currentY, - id: currentId - }; - var preId = cameFrom[currentId].id; - var preX = cameFrom[currentId].x; - var preY = cameFrom[currentId].y; - var prePoint = { - x: preX, - y: preY, - id: preId - }; - var directionChange = getDirectionChange(prePoint, point2, cameFrom, scaleStartPoint); - if (directionChange) { - controlPoints.unshift({ - x: prePoint.x === point2.x ? controlPoints[0].x : prePoint.x * gridSize, - y: prePoint.y === point2.y ? controlPoints[0].y : prePoint.y * gridSize - }); - } - currentId = preId; - currentX = preX; - currentY = preY; - } - var firstPoint = { - x: currentX, - y: currentY, - id: currentId - }; - controlPoints[0].x = firstPoint.x === scaleStartPoint.x ? startPoint.x : controlPoints[0].x; - controlPoints[0].y = firstPoint.y === scaleStartPoint.y ? startPoint.y : controlPoints[0].y; - controlPoints.unshift(startPoint); - return controlPoints; -}; -var pathFinder3 = function pathFinder4(startPoint, endPoint, startNode, endNode, routerCfg) { - if (isNaN(startPoint.x) || isNaN(endPoint.x)) - return []; - var cfg = (0, import_util582.deepMix)(defaultCfg, routerCfg); - cfg.obstacles = cfg.obstacles || []; - var gridSize = cfg.gridSize; - var map23 = getObstacleMap(cfg.obstacles.concat([startNode, endNode]), gridSize, cfg.offset); - var scaleStartPoint = { - x: pos2GridIx(startPoint.x, gridSize), - y: pos2GridIx(startPoint.y, gridSize) - }; - var scaleEndPoint = { - x: pos2GridIx(endPoint.x, gridSize), - y: pos2GridIx(endPoint.y, gridSize) - }; - startPoint.id = "".concat(scaleStartPoint.x, "|||").concat(scaleStartPoint.y); - endPoint.id = "".concat(scaleEndPoint.x, "|||").concat(scaleEndPoint.y); - var startPoints = getBoxPoints2(scaleStartPoint, startPoint, startNode, scaleEndPoint, cfg); - var endPoints = getBoxPoints2(scaleEndPoint, endPoint, endNode, scaleStartPoint, cfg); - startPoints.forEach(function(point2) { - delete map23[point2.id]; - }); - endPoints.forEach(function(point2) { - delete map23[point2.id]; - }); - var openSet = {}; - var closedSet = {}; - var cameFrom = {}; - var gScore = {}; - var fScore = {}; - for (var i4 = 0; i4 < startPoints.length; i4++) { - var firstStep = startPoints[i4]; - openSet[firstStep.id] = firstStep; - gScore[firstStep.id] = 0; - fScore[firstStep.id] = estimateCost(firstStep, endPoints, cfg.distFunc); - } - var remainLoops = cfg.maximumLoops; - var penalties = cfg.penalties; - var current, curCost, direction3, neighbor, neighborCost, costFromStart, directionChange; - while (Object.keys(openSet).length > 0 && remainLoops > 0) { - current = void 0; - curCost = Infinity; - Object.keys(openSet).forEach(function(key) { - var id = openSet[key].id; - if (fScore[id] <= curCost) { - curCost = fScore[id]; - current = openSet[id]; - } - }); - if (!current) - break; - if (endPoints.findIndex(function(point2) { - return point2.x === current.x && point2.y === current.y; - }) > -1) { - return getControlPoints12(current, cameFrom, scaleStartPoint, endPoint, startPoint, scaleEndPoint, gridSize); - } - delete openSet[current.id]; - closedSet[current.id] = true; - for (var i4 = 0; i4 < cfg.directions.length; i4++) { - direction3 = cfg.directions[i4]; - neighbor = { - x: current.x + direction3.stepX, - y: current.y + direction3.stepY, - id: "".concat(Math.round(current.x) + direction3.stepX, "|||").concat(Math.round(current.y) + direction3.stepY) - }; - if (closedSet[neighbor.id]) - continue; - directionChange = getDirectionChange(current, neighbor, cameFrom, scaleStartPoint); - if (directionChange > cfg.maxAllowedDirectionChange) - continue; - if (map23[neighbor.id]) - continue; - if (!openSet[neighbor.id]) { - openSet[neighbor.id] = neighbor; - } - neighborCost = cfg.distFunc(current, neighbor) + (isNaN(penalties[directionChange]) ? gridSize : penalties[directionChange]); - costFromStart = gScore[current.id] + neighborCost; - if (gScore[neighbor.id] && costFromStart >= gScore[neighbor.id]) { - continue; - } - cameFrom[neighbor.id] = current; - gScore[neighbor.id] = costFromStart; - fScore[neighbor.id] = costFromStart + estimateCost(neighbor, endPoints, cfg.distFunc); - } - remainLoops -= 1; - } - return cfg.fallbackRoute(startPoint, endPoint, startNode, endNode, cfg); -}; - -// node_modules/@antv/g6-element/es/edges/polyline.js -registerEdge("polyline", { - options: { - color: BaseGlobal.defaultEdge.color, - size: BaseGlobal.defaultEdge.size, - style: { - radius: 0, - offset: 15, - x: 0, - y: 0, - stroke: BaseGlobal.defaultEdge.style.stroke, - lineAppendWidth: BaseGlobal.defaultEdge.style.lineAppendWidth - }, - labelCfg: { - style: { - fill: BaseGlobal.edgeLabel.style.fill, - fontSize: BaseGlobal.edgeLabel.style.fontSize, - fontFamily: BaseGlobal.windowFontFamily - } - }, - routeCfg: { - obstacles: [], - maxAllowedDirectionChange: Math.PI, - maximumLoops: 500, - gridSize: 10 - }, - stateStyles: __assign({}, BaseGlobal.edgeStateStyles) - }, - shapeType: "polyline", - labelPosition: "center", - drawShape: function drawShape19(cfg, group3) { - var shapeStyle = this.getShapeStyle(cfg); - if (shapeStyle.radius === 0) - delete shapeStyle.radius; - var keyShape = group3.addShape("path", { - className: "edge-shape", - name: "edge-shape", - attrs: shapeStyle - }); - group3["shapeMap"]["edge-shape"] = keyShape; - return keyShape; - }, - getShapeStyle: function getShapeStyle15(cfg) { - var defaultStyle = this.options.style; - var strokeStyle = { - stroke: cfg.color - }; - var style = (0, import_util583.mix)({}, defaultStyle, strokeStyle, cfg.style); - cfg = this.getPathPoints(cfg); - this.radius = style.radius; - this.offset = style.offset; - var startPoint = cfg.startPoint, endPoint = cfg.endPoint; - var controlPoints = this.getControlPoints(cfg); - var points = [startPoint]; - if (controlPoints) { - points = points.concat(controlPoints); - } - points.push(endPoint); - var source = cfg.sourceNode; - var target = cfg.targetNode; - var radius = style.radius; - var defaultRouteCfg = this.options.routeCfg; - var routeCfg = (0, import_util583.mix)({}, defaultRouteCfg, cfg.routeCfg); - routeCfg.offset = style.offset; - var path = this.getPath(points, source, target, radius, routeCfg); - if ((0, import_util583.isArray)(path) && path.length <= 1 || (0, import_util583.isString)(path) && path.indexOf("L") === -1) { - path = "M0 0, L0 0"; - } - if (isNaN(startPoint.x) || isNaN(startPoint.y) || isNaN(endPoint.x) || isNaN(endPoint.y)) { - path = "M0 0, L0 0"; - } - var attrs = (0, import_util583.mix)({}, BaseGlobal.defaultEdge.style, style, { - lineWidth: cfg.size, - path - }); - return attrs; - }, - updateShapeStyle: function updateShapeStyle4(cfg, item) { - var group3 = item.getContainer(); - if (!item.isVisible()) - return; - var strokeStyle = { - stroke: cfg.color - }; - var shape = group3["shapeMap"]["edge-shape"] || group3.find(function(element) { - return element.get("className") === "edge-shape"; - }) || item.getKeyShape(); - var size14 = cfg.size; - cfg = this.getPathPoints(cfg); - var startPoint = cfg.startPoint, endPoint = cfg.endPoint; - var controlPoints = this.getControlPoints(cfg); - var points = [startPoint]; - if (controlPoints) { - points = points.concat(controlPoints); - } - points.push(endPoint); - var currentAttr = shape.attr(); - var previousStyle = (0, import_util583.mix)({}, strokeStyle, currentAttr, cfg.style); - var source = cfg.sourceNode; - var target = cfg.targetNode; - var radius = previousStyle.radius; - var defaultRouteCfg = this.options.routeCfg; - var routeCfg = (0, import_util583.mix)({}, defaultRouteCfg, cfg.routeCfg); - routeCfg.offset = previousStyle.offset; - var path = this.getPath(points, source, target, radius, routeCfg); - if ((0, import_util583.isArray)(path) && path.length <= 1 || (0, import_util583.isString)(path) && path.indexOf("L") === -1) { - path = "M0 0, L0 0"; - } - if (isNaN(startPoint.x) || isNaN(startPoint.y) || isNaN(endPoint.x) || isNaN(endPoint.y)) { - path = "M0 0, L0 0"; - } - if (currentAttr.endArrow && previousStyle.endArrow === false) { - cfg.style.endArrow = { - path: "" - }; - } - if (currentAttr.startArrow && previousStyle.startArrow === false) { - cfg.style.startArrow = { - path: "" - }; - } - var style = (0, import_util583.mix)(strokeStyle, shape.attr(), { - lineWidth: size14, - path - }, cfg.style); - if (shape) { - shape.attr(style); - } - }, - getPath: function getPath13(points, source, target, radius, routeCfg) { - var offset = routeCfg.offset, simple = routeCfg.simple; - if (!offset || points.length > 2) { - if (radius) { - return getPathWithBorderRadiusByPolyline(points, radius); - } - var pathArray_1 = []; - (0, import_util583.each)(points, function(point2, index2) { - if (index2 === 0) { - pathArray_1.push(["M", point2.x, point2.y]); - } else { - pathArray_1.push(["L", point2.x, point2.y]); - } - }); - return pathArray_1; - } - var polylinePoints = simple ? getPolylinePoints(points[points.length - 1], points[0], target, source, offset) : pathFinder3(points[0], points[points.length - 1], source, target, routeCfg); - if (!polylinePoints || !polylinePoints.length) - return "M0 0, L0 0"; - if (radius) { - var res_1 = getPathWithBorderRadiusByPolyline(polylinePoints, radius); - return res_1; - } - var res = util_default.pointsToPolygon(polylinePoints); - return res; - } -}, "single-edge"); - -// node_modules/@antv/g6-pc/es/behavior/index.js -var import_util592 = __toModule(require_lib()); - -// node_modules/@antv/g6-pc/es/behavior/drag-canvas.js -var cloneEvent4 = util_default3.cloneEvent; -var isNaN5 = util_default3.isNaN; -var abs = Math.abs; -var DRAG_OFFSET = 10; -var ALLOW_EVENTS2 = ["shift", "ctrl", "alt", "control"]; -var drag_canvas_default = { - getDefaultCfg: function getDefaultCfg2() { - return { - direction: "both", - enableOptimize: false, - scalableRange: 0, - allowDragOnItem: false - }; - }, - getEvents: function getEvents2() { - return { - dragstart: "onMouseDown", - drag: "onMouseMove", - dragend: "onMouseUp", - "canvas:click": "onMouseUp", - keyup: "onKeyUp", - focus: "onKeyUp", - keydown: "onKeyDown", - touchstart: "onTouchStart", - touchmove: "onTouchMove", - touchend: "onMouseUp" - }; - }, - updateViewport: function updateViewport(e4) { - var origin = this.origin; - var clientX = +e4.clientX; - var clientY = +e4.clientY; - if (isNaN5(clientX) || isNaN5(clientY)) { - return; - } - var dx = clientX - origin.x; - var dy = clientY - origin.y; - if (this.get("direction") === "x") { - dy = 0; - } else if (this.get("direction") === "y") { - dx = 0; - } - this.origin = { - x: clientX, - y: clientY - }; - var width2 = this.graph.get("width"); - var height = this.graph.get("height"); - var graphCanvasBBox = this.graph.get("canvas").getCanvasBBox(); - var expandWidth = this.scalableRange; - var expandHeight = this.scalableRange; - if (expandWidth < 1 && expandWidth > -1) { - expandWidth = width2 * expandWidth; - expandHeight = height * expandHeight; - } - if (graphCanvasBBox.minX <= width2 + expandWidth && graphCanvasBBox.minX + dx > width2 + expandWidth || graphCanvasBBox.maxX + expandWidth >= 0 && graphCanvasBBox.maxX + expandWidth + dx < 0) { - dx = 0; - } - if (graphCanvasBBox.minY <= height + expandHeight && graphCanvasBBox.minY + dy > height + expandHeight || graphCanvasBBox.maxY + expandHeight >= 0 && graphCanvasBBox.maxY + expandHeight + dy < 0) { - dy = 0; - } - this.graph.translate(dx, dy); - }, - onTouchStart: function onTouchStart(e4) { - var self2 = this; - var touches = e4.originalEvent.touches; - var event1 = touches[0]; - var event2 = touches[1]; - if (event1 && event2) { - return; - } - e4.preventDefault(); - self2.onMouseDown(e4); - }, - onMouseDown: function onMouseDown(e4) { - var self2 = this; - var event = e4.originalEvent; - if (event && e4.name !== G6Event.TOUCHSTART && event.button !== 0) { - return; - } - if (e4.name !== G6Event.TOUCHSTART && typeof window !== "undefined" && window.event && !window.event.buttons && !window.event.button) { - return; - } - if (!this.shouldBegin.call(this, e4)) { - return; - } - if (self2.keydown) - return; - var target = e4.target; - var targetIsCanvas = target && target.isCanvas && target.isCanvas(); - if (!this.allowDragOnItem && !targetIsCanvas) - return; - self2.origin = { - x: e4.clientX, - y: e4.clientY - }; - self2.dragging = false; - if (this.enableOptimize) { - var graph = this.graph; - var edges = graph.getEdges(); - for (var i4 = 0, len5 = edges.length; i4 < len5; i4++) { - var shapes = edges[i4].get("group").get("children"); - if (!shapes) - continue; - shapes.forEach(function(shape) { - shape.set("ori-visibility", shape.get("ori-visibility") || shape.get("visible")); - shape.hide(); - }); - } - var nodes = graph.getNodes(); - for (var j4 = 0, nodeLen = nodes.length; j4 < nodeLen; j4++) { - var container2 = nodes[j4].getContainer(); - var children = container2.get("children"); - for (var _i = 0, children_1 = children; _i < children_1.length; _i++) { - var child = children_1[_i]; - var isKeyShape = child.get("isKeyShape"); - if (!isKeyShape) { - child.set("ori-visibility", child.get("ori-visibility") || child.get("visible")); - child.hide(); - } - } - } - } - }, - onTouchMove: function onTouchMove(e4) { - var self2 = this; - var touches = e4.originalEvent.touches; - var event1 = touches[0]; - var event2 = touches[1]; - if (event1 && event2) { - this.onMouseUp(e4); - return; - } - e4.preventDefault(); - self2.onMouseMove(e4); - }, - onMouseMove: function onMouseMove(e4) { - var graph = this.graph; - if (this.keydown) - return; - var target = e4.target; - var targetIsCanvas = target && target.isCanvas && target.isCanvas(); - if (!this.allowDragOnItem && !targetIsCanvas) - return; - e4 = cloneEvent4(e4); - if (!this.origin) { - return; - } - if (!this.dragging) { - if (abs(this.origin.x - e4.clientX) + abs(this.origin.y - e4.clientY) < DRAG_OFFSET) { - return; - } - if (this.shouldBegin.call(this, e4)) { - e4.type = "dragstart"; - graph.emit("canvas:dragstart", e4); - this.originPosition = { - x: e4.clientX, - y: e4.clientY - }; - this.dragging = true; - } - } else { - e4.type = "drag"; - graph.emit("canvas:drag", e4); - } - if (this.shouldUpdate.call(this, e4)) { - this.updateViewport(e4); - } - }, - onMouseUp: function onMouseUp(e4) { - var _a6, _b; - var graph = this.graph; - if (this.keydown) - return; - var currentZoom = graph.getZoom(); - var modeController = graph.get("modeController"); - var zoomCanvas = (_b = (_a6 = modeController === null || modeController === void 0 ? void 0 : modeController.modes[modeController.mode]) === null || _a6 === void 0 ? void 0 : _a6.filter(function(behavior) { - return behavior.type === "zoom-canvas"; - })) === null || _b === void 0 ? void 0 : _b[0]; - var optimizeZoom = zoomCanvas ? zoomCanvas.optimizeZoom || 0.1 : 0; - if (this.enableOptimize) { - var edges = graph.getEdges(); - for (var i4 = 0, len5 = edges.length; i4 < len5; i4++) { - var shapes = edges[i4].get("group").get("children"); - if (!shapes) - continue; - shapes.forEach(function(shape) { - var oriVis2 = shape.get("ori-visibility"); - if (oriVis2) - shape.show(); - }); - } - if (currentZoom > optimizeZoom) { - var nodes = graph.getNodes(); - for (var j4 = 0, nodeLen = nodes.length; j4 < nodeLen; j4++) { - var container2 = nodes[j4].getContainer(); - var children = container2.get("children"); - for (var _i = 0, children_2 = children; _i < children_2.length; _i++) { - var child = children_2[_i]; - var isKeyShape = child.get("isKeyShape"); - if (!isKeyShape) { - var oriVis = child.get("ori-visibility"); - if (oriVis) - child.show(); - } - } - } - } - } - if (!this.dragging) { - this.origin = null; - return; - } - e4 = cloneEvent4(e4); - if (this.shouldEnd.call(this, e4)) { - this.updateViewport(e4); - } - e4.type = "dragend"; - e4.dx = e4.clientX - this.originPosition.x; - e4.dy = e4.clientY - this.originPosition.y; - graph.emit("canvas:dragend", e4); - this.endDrag(); - }, - endDrag: function endDrag() { - this.origin = null; - this.dragging = false; - this.dragbegin = false; - }, - onKeyDown: function onKeyDown(e4) { - var self2 = this; - var code = e4.key; - if (!code) { - return; - } - if (ALLOW_EVENTS2.indexOf(code.toLowerCase()) > -1) { - self2.keydown = true; - } else { - self2.keydown = false; - } - }, - onKeyUp: function onKeyUp() { - this.keydown = false; - this.origin = null; - this.dragging = false; - this.dragbegin = false; - } -}; - -// node_modules/@antv/g6-pc/es/behavior/drag-node.js -var import_util585 = __toModule(require_lib()); -var drag_node_default = { - getDefaultCfg: function getDefaultCfg3() { - return { - updateEdge: true, - delegateStyle: {}, - enableDelegate: false, - onlyChangeComboSize: false, - comboActiveState: "", - selectedState: "selected", - enableOptimize: false, - enableDebounce: false, - enableStack: true - }; - }, - getEvents: function getEvents3() { - return { - "node:dragstart": "onDragStart", - "node:drag": "onDrag", - "node:dragend": "onDragEnd", - "combo:dragenter": "onDragEnter", - "combo:dragleave": "onDragLeave", - "combo:drop": "onDropCombo", - "node:drop": "onDropNode", - "canvas:drop": "onDropCanvas", - "touchstart": "onTouchStart", - "touchmove": "onTouchMove", - "touchend": "onDragEnd" - }; - }, - validationCombo: function validationCombo(item) { - if (!this.origin || !item || item.destroyed) { - return false; - } - var type2 = item.getType(); - if (type2 !== "combo") { - return false; - } - return true; - }, - onTouchStart: function onTouchStart2(e4) { - if (!e4.item) - return; - var self2 = this; - try { - var touches = e4.originalEvent.touches; - var event1 = touches[0]; - var event2 = touches[1]; - if (event1 && event2) { - return; - } - e4.preventDefault(); - } catch (e6) { - console.warn("Touch original event not exist!"); - } - self2.onDragStart(e4); - }, - onTouchMove: function onTouchMove2(e4) { - var self2 = this; - try { - var touches = e4.originalEvent.touches; - var event1 = touches[0]; - var event2 = touches[1]; - if (event1 && event2) { - self2.onDragEnd(e4); - return; - } - e4.preventDefault(); - } catch (e6) { - console.warn("Touch original event not exist!"); - } - self2.onDrag(e4); - }, - onDragStart: function onDragStart(evt) { - var _this = this; - this.currentShouldEnd = true; - if (!this.shouldBegin.call(this, evt)) { - return; - } - var item = evt.item; - if (!item || item.destroyed || item.hasLocked()) { - return; - } - var group3 = item.getContainer(); - group3.set("capture", false); - if (!this.cachedCaptureItems) - this.cachedCaptureItems = []; - this.cachedCaptureItems.push(item); - var target = evt.target; - if (target) { - var isAnchorPoint = target.get("isAnchorPoint"); - if (isAnchorPoint) { - return; - } - } - var graph = this.graph; - this.targets = []; - this.targetCombo = null; - var nodes = graph.findAllByState("node", this.selectedState); - var currentNodeId = item.get("id"); - var dragNodes = nodes.filter(function(node) { - var nodeId = node.get("id"); - return currentNodeId === nodeId; - }); - if (dragNodes.length === 0) { - this.targets.push(item); - } else if (nodes.length > 1) { - nodes.forEach(function(node) { - var locked = node.hasLocked(); - if (!locked) { - _this.targets.push(node); - } - }); - } else { - this.targets.push(item); - } - var beforeDragNodes = []; - this.targets.forEach(function(t4) { - beforeDragNodes.push((0, import_util585.clone)(t4.getModel())); - }); - this.set("beforeDragNodes", beforeDragNodes); - this.hidenEdge = {}; - if (this.get("updateEdge") && this.enableOptimize && !this.enableDelegate) { - this.targets.forEach(function(node) { - var edges = node.getEdges(); - edges.forEach(function(edge2) { - if (!edge2.isVisible()) - return; - _this.hidenEdge[edge2.getID()] = true; - edge2.hide(); - }); - }); - } - this.origin = { - x: evt.x, - y: evt.y - }; - this.point = {}; - this.originPoint = {}; - }, - onDrag: function onDrag(evt) { - var _this = this; - if (!this.origin) { - return; - } - if (!this.shouldUpdate.call(this, evt)) { - return; - } - if (this.get("enableDelegate")) { - this.updateDelegate(evt); - } else { - if (this.enableDebounce) - this.debounceUpdate({ - targets: this.targets, - graph: this.graph, - point: this.point, - origin: this.origin, - evt, - updateEdge: this.get("updateEdge") - }); - else - this.targets.map(function(target) { - _this.update(target, evt); - }); - } - }, - onDragEnd: function onDragEnd(evt) { - var _this = this; - var _a6; - if (!this.origin) { - return; - } - (_a6 = this.cachedCaptureItems) === null || _a6 === void 0 ? void 0 : _a6.forEach(function(item) { - var group3 = item.getContainer(); - group3.set("capture", true); - }); - this.cachedCaptureItems = []; - if (this.delegateRect) { - this.delegateRect.remove(); - this.delegateRect = null; - } - if (this.get("updateEdge") && this.enableOptimize && !this.enableDelegate) { - this.targets.forEach(function(node) { - var edges = node.getEdges(); - edges.forEach(function(edge2) { - if (_this.hidenEdge[edge2.getID()]) - edge2.show(); - edge2.refresh(); - }); - }); - } - this.hidenEdge = {}; - var graph = this.graph; - if (graph.get("enabledStack") && this.enableStack) { - var stackData_1 = { - before: { - nodes: [], - edges: [], - combos: [] - }, - after: { - nodes: [], - edges: [], - combos: [] - } - }; - this.get("beforeDragNodes").forEach(function(model) { - stackData_1.before.nodes.push({ - id: model.id, - x: model.x, - y: model.y - }); - }); - this.targets.forEach(function(target) { - var targetModel = target.getModel(); - stackData_1.after.nodes.push({ - id: targetModel.id, - x: targetModel.x, - y: targetModel.y - }); - }); - graph.pushStack("update", (0, import_util585.clone)(stackData_1)); - } - graph.emit("dragnodeend", { - items: this.targets, - targetItem: null - }); - this.point = {}; - this.origin = null; - this.originPoint = {}; - this.targets.length = 0; - this.targetCombo = null; - }, - onDropCombo: function onDropCombo(evt) { - var item = evt.item; - this.currentShouldEnd = this.shouldEnd.call(this, evt, item); - this.updatePositions(evt, !this.currentShouldEnd); - if (!this.currentShouldEnd || !this.validationCombo(item)) - return; - var graph = this.graph; - if (this.comboActiveState) { - graph.setItemState(item, this.comboActiveState, false); - } - this.targetCombo = item; - if (this.onlyChangeComboSize) { - graph.updateCombos(); - } else { - var targetComboModel_1 = item.getModel(); - this.targets.map(function(node) { - var nodeModel = node.getModel(); - if (nodeModel.comboId !== targetComboModel_1.id) { - graph.updateComboTree(node, targetComboModel_1.id); - } - }); - graph.updateCombo(item); - } - graph.emit("dragnodeend", { - items: this.targets, - targetItem: this.targetCombo - }); - }, - onDropCanvas: function onDropCanvas(evt) { - var graph = this.graph; - this.currentShouldEnd = this.shouldEnd.call(this, evt, void 0); - this.updatePositions(evt, !this.currentShouldEnd); - if (!this.targets || this.targets.length === 0 || !this.currentShouldEnd) - return; - if (this.onlyChangeComboSize) { - graph.updateCombos(); - } else { - this.targets.map(function(node) { - var model = node.getModel(); - if (model.comboId) { - graph.updateComboTree(node); - } - }); - } - }, - onDropNode: function onDropNode(evt) { - if (!this.targets || this.targets.length === 0) - return; - var self2 = this; - var item = evt.item; - var graph = self2.graph; - var comboId = item.getModel().comboId; - var newParentCombo = comboId ? graph.findById(comboId) : void 0; - this.currentShouldEnd = this.shouldEnd.call(this, evt, newParentCombo); - this.updatePositions(evt, !this.currentShouldEnd); - if (!this.currentShouldEnd) - return; - if (this.onlyChangeComboSize) { - graph.updateCombos(); - } else if (comboId) { - var combo = graph.findById(comboId); - if (self2.comboActiveState) { - graph.setItemState(combo, self2.comboActiveState, false); - } - this.targets.map(function(node) { - var nodeModel = node.getModel(); - if (comboId !== nodeModel.comboId) { - graph.updateComboTree(node, comboId); - } - }); - graph.updateCombo(combo); - } else { - this.targets.map(function(node) { - var model = node.getModel(); - if (model.comboId) { - graph.updateComboTree(node); - } - }); - } - graph.emit("dragnodeend", { - items: this.targets, - targetItem: item - }); - }, - onDragEnter: function onDragEnter(evt) { - var item = evt.item; - if (!this.validationCombo(item)) - return; - var graph = this.graph; - if (this.comboActiveState) { - graph.setItemState(item, this.comboActiveState, true); - } - }, - onDragLeave: function onDragLeave(evt) { - var item = evt.item; - if (!this.validationCombo(item)) - return; - var graph = this.graph; - if (this.comboActiveState) { - graph.setItemState(item, this.comboActiveState, false); - } - }, - updatePositions: function updatePositions(evt, restore) { - var _this = this; - if (!this.targets || this.targets.length === 0) - return; - if (this.get("enableDelegate")) { - if (this.enableDebounce) - this.debounceUpdate({ - targets: this.targets, - graph: this.graph, - point: this.point, - origin: this.origin, - evt, - updateEdge: this.get("updateEdge"), - updateFunc: this.update - }); - else if (!restore) - this.targets.map(function(node) { - return _this.update(node, evt); - }); - } else - this.targets.map(function(node) { - return _this.update(node, evt, restore); - }); - }, - update: function update14(item, evt, restore) { - var origin = this.origin; - var model = item.get("model"); - var nodeId = item.get("id"); - if (!this.point[nodeId]) { - this.point[nodeId] = { - x: model.x || 0, - y: model.y || 0 - }; - } - var x6 = evt.x - origin.x + this.point[nodeId].x; - var y5 = evt.y - origin.y + this.point[nodeId].y; - if (restore) { - x6 += origin.x - evt.x; - y5 += origin.y - evt.y; - } - var pos = { - x: x6, - y: y5 - }; - if (this.get("updateEdge")) { - this.graph.updateItem(item, pos, false); - } else { - item.updatePosition(pos); - } - }, - debounceUpdate: (0, import_util585.debounce)(function(event) { - var targets = event.targets, graph = event.graph, point2 = event.point, origin = event.origin, evt = event.evt, updateEdge = event.updateEdge, updateFunc = event.updateFunc; - targets.map(function(item) { - var model = item.get("model"); - var nodeId = item.get("id"); - if (!point2[nodeId]) { - point2[nodeId] = { - x: model.x || 0, - y: model.y || 0 - }; - } - var x6 = evt.x - origin.x + point2[nodeId].x; - var y5 = evt.y - origin.y + point2[nodeId].y; - var pos = { - x: x6, - y: y5 - }; - if (updateEdge) { - graph.updateItem(item, pos, false); - } else { - item.updatePosition(pos); - } - }); - }, 50, true), - updateDelegate: function updateDelegate(e4) { - var graph = this.graph; - if (!this.delegateRect) { - var parent_1 = graph.get("group"); - var attrs = (0, import_util585.deepMix)({}, global_default2.delegateStyle, this.delegateStyle); - var _a6 = this.calculationGroupPosition(e4), cx = _a6.x, cy = _a6.y, width2 = _a6.width, height = _a6.height, minX = _a6.minX, minY = _a6.minY; - this.originPoint = { - x: cx, - y: cy, - width: width2, - height, - minX, - minY - }; - this.delegateRect = parent_1.addShape("rect", { - attrs: __assign({ - width: width2, - height, - x: cx, - y: cy - }, attrs), - name: "rect-delegate-shape" - }); - this.delegate = this.delegateRect; - this.delegateRect.set("capture", false); - } else { - var clientX = e4.x - this.origin.x + this.originPoint.minX; - var clientY = e4.y - this.origin.y + this.originPoint.minY; - this.delegateRect.attr({ - x: clientX, - y: clientY - }); - } - }, - calculationGroupPosition: function calculationGroupPosition(evt) { - var nodes = this.targets; - if (nodes.length === 0) { - nodes.push(evt.item); - } - var minx = Infinity; - var maxx = -Infinity; - var miny = Infinity; - var maxy = -Infinity; - for (var i4 = 0; i4 < nodes.length; i4++) { - var element = nodes[i4]; - var bbox = element.getBBox(); - var minX = bbox.minX, minY = bbox.minY, maxX = bbox.maxX, maxY2 = bbox.maxY; - if (minX < minx) { - minx = minX; - } - if (minY < miny) { - miny = minY; - } - if (maxX > maxx) { - maxx = maxX; - } - if (maxY2 > maxy) { - maxy = maxY2; - } - } - var x6 = Math.floor(minx); - var y5 = Math.floor(miny); - var width2 = Math.ceil(maxx) - Math.floor(minx); - var height = Math.ceil(maxy) - Math.floor(miny); - return { - x: x6, - y: y5, - width: width2, - height, - minX: minx, - minY: miny - }; - } -}; - -// node_modules/@antv/g6-pc/es/behavior/activate-relations.js -var activate_relations_default = { - getDefaultCfg: function getDefaultCfg4() { - return { - trigger: "mouseenter", - activeState: "active", - inactiveState: "inactive", - resetSelected: false, - shouldUpdate: function shouldUpdate3() { - return true; - } - }; - }, - getEvents: function getEvents4() { - if (this.get("trigger") === "mouseenter") { - return { - "node:mouseenter": "setAllItemStates", - "combo:mouseenter": "setAllItemStates", - "node:mouseleave": "clearActiveState", - "combo:mouseleave": "clearActiveState" - }; - } - return { - "node:click": "setAllItemStates", - "combo:click": "setAllItemStates", - "canvas:click": "clearActiveState", - "node:touchstart": "setOnTouchStart", - "combo:touchstart": "setOnTouchStart", - "canvas:touchstart": "clearOnTouchStart" - }; - }, - setOnTouchStart: function setOnTouchStart(e4) { - var self2 = this; - try { - var touches = e4.originalEvent.touches; - var event1 = touches[0]; - var event2 = touches[1]; - if (event1 && event2) { - return; - } - e4.preventDefault(); - } catch (e6) { - console.warn("Touch original event not exist!"); - } - self2.setAllItemStates(e4); - }, - clearOnTouchStart: function clearOnTouchStart(e4) { - var self2 = this; - try { - var touches = e4.originalEvent.touches; - var event1 = touches[0]; - var event2 = touches[1]; - if (event1 && event2) { - return; - } - e4.preventDefault(); - } catch (e6) { - console.warn("Touch original event not exist!"); - } - self2.clearActiveState(e4); - }, - setAllItemStates: function setAllItemStates(e4) { - var item = e4.item; - var graph = this.graph; - this.item = item; - if (!this.shouldUpdate(e4.item, { - event: e4, - action: "activate" - })) { - return; - } - var self2 = this; - var activeState = this.activeState; - var inactiveState = this.inactiveState; - var nodes = graph.getNodes(); - var combos = graph.getCombos(); - var edges = graph.getEdges(); - var vEdges = graph.get("vedges"); - var nodeLength = nodes.length; - var comboLength = combos.length; - var edgeLength = edges.length; - var vEdgeLength = vEdges.length; - for (var i4 = 0; i4 < nodeLength; i4++) { - var node = nodes[i4]; - var hasSelected = node.hasState("selected"); - if (self2.resetSelected) { - if (hasSelected) { - graph.setItemState(node, "selected", false); - } - } - graph.setItemState(node, activeState, false); - if (inactiveState) { - graph.setItemState(node, inactiveState, true); - } - } - for (var i4 = 0; i4 < comboLength; i4++) { - var combo = combos[i4]; - var hasSelected = combo.hasState("selected"); - if (self2.resetSelected) { - if (hasSelected) { - graph.setItemState(combo, "selected", false); - } - } - graph.setItemState(combo, activeState, false); - if (inactiveState) { - graph.setItemState(combo, inactiveState, true); - } - } - for (var i4 = 0; i4 < edgeLength; i4++) { - var edge2 = edges[i4]; - graph.setItemState(edge2, activeState, false); - if (inactiveState) { - graph.setItemState(edge2, inactiveState, true); - } - } - for (var i4 = 0; i4 < vEdgeLength; i4++) { - var vEdge = vEdges[i4]; - graph.setItemState(vEdge, activeState, false); - if (inactiveState) { - graph.setItemState(vEdge, inactiveState, true); - } - } - if (inactiveState) { - graph.setItemState(item, inactiveState, false); - } - graph.setItemState(item, activeState, true); - var rEdges = item.getEdges(); - var rEdgeLegnth = rEdges.length; - for (var i4 = 0; i4 < rEdgeLegnth; i4++) { - var edge2 = rEdges[i4]; - var otherEnd = void 0; - if (edge2.getSource() === item) { - otherEnd = edge2.getTarget(); - } else { - otherEnd = edge2.getSource(); - } - if (inactiveState) { - graph.setItemState(otherEnd, inactiveState, false); - } - graph.setItemState(otherEnd, activeState, true); - graph.setItemState(edge2, inactiveState, false); - graph.setItemState(edge2, activeState, true); - edge2.toFront(); - } - graph.emit("afteractivaterelations", { - item: e4.item, - action: "activate" - }); - }, - clearActiveState: function clearActiveState(e4) { - var self2 = this; - var graph = self2.get("graph"); - if (!self2.shouldUpdate(e4.item, { - event: e4, - action: "deactivate" - })) { - return; - } - var activeState = this.activeState; - var inactiveState = this.inactiveState; - var autoPaint = graph.get("autoPaint"); - graph.setAutoPaint(false); - var nodes = graph.getNodes() || []; - var combos = graph.getCombos() || []; - var edges = graph.getEdges() || []; - var vEdges = graph.get("vedges") || []; - var nodeLength = nodes.length; - var comboLength = combos.length; - var edgeLength = edges.length; - var vEdgeLength = vEdges.length; - for (var i4 = 0; i4 < nodeLength; i4++) { - var node = nodes[i4]; - graph.clearItemStates(node, [activeState, inactiveState]); - } - for (var i4 = 0; i4 < comboLength; i4++) { - var combo = combos[i4]; - graph.clearItemStates(combo, [activeState, inactiveState]); - } - for (var i4 = 0; i4 < edgeLength; i4++) { - var edge2 = edges[i4]; - graph.clearItemStates(edge2, [activeState, inactiveState, "deactivate"]); - } - for (var i4 = 0; i4 < vEdgeLength; i4++) { - var vEdge = vEdges[i4]; - graph.clearItemStates(vEdge, [activeState, inactiveState, "deactivate"]); - } - graph.paint(); - graph.setAutoPaint(autoPaint); - graph.emit("afteractivaterelations", { - item: e4.item || self2.get("item"), - action: "deactivate" - }); - } -}; - -// node_modules/@antv/g6-pc/es/behavior/brush-select.js -var min12 = Math.min; -var max14 = Math.max; -var abs2 = Math.abs; -var DEFAULT_TRIGGER = "shift"; -var ALLOW_EVENTS3 = ["drag", "shift", "ctrl", "alt", "control"]; -var brush_select_default = { - getDefaultCfg: function getDefaultCfg5() { - return { - brushStyle: { - fill: "#EEF6FF", - fillOpacity: 0.4, - stroke: "#DDEEFE", - lineWidth: 1 - }, - onSelect: function onSelect() { - }, - onDeselect: function onDeselect() { - }, - selectedState: "selected", - trigger: DEFAULT_TRIGGER, - includeEdges: true, - selectedEdges: [], - selectedNodes: [] - }; - }, - getEvents: function getEvents5() { - if (!(ALLOW_EVENTS3.indexOf(this.trigger.toLowerCase()) > -1)) { - this.trigger = DEFAULT_TRIGGER; - console.warn("Behavior brush-select \u7684 trigger \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'drag'\u3001'shift'\u3001'ctrl' \u6216 'alt'"); - } - if (this.trigger === "drag") { - return { - dragstart: "onMouseDown", - drag: "onMouseMove", - dragend: "onMouseUp", - "canvas:click": "clearStates" - }; - } - return { - dragstart: "onMouseDown", - drag: "onMouseMove", - dragend: "onMouseUp", - "canvas:click": "clearStates", - keyup: "onKeyUp", - keydown: "onKeyDown" - }; - }, - onMouseDown: function onMouseDown2(e4) { - var item = e4.item; - var brush = this.brush; - if (item) { - return; - } - if (this.trigger !== "drag" && !this.keydown) { - return; - } - if (this.selectedNodes && this.selectedNodes.length !== 0) { - this.clearStates(); - } - if (!brush) { - brush = this.createBrush(); - } - this.originPoint = { - x: e4.canvasX, - y: e4.canvasY - }; - brush.attr({ - width: 0, - height: 0 - }); - brush.show(); - this.dragging = true; - }, - onMouseMove: function onMouseMove2(e4) { - if (!this.dragging) { - return; - } - if (this.trigger !== "drag" && !this.keydown) { - return; - } - this.updateBrush(e4); - }, - onMouseUp: function onMouseUp2(e4) { - var graph = this.graph; - if (!this.brush && !this.dragging) { - return; - } - if (this.trigger !== "drag" && !this.keydown) { - return; - } - this.brush.remove(true); - this.brush = null; - this.getSelectedNodes(e4); - this.dragging = false; - }, - clearStates: function clearStates() { - var _a6 = this, graph = _a6.graph, selectedState = _a6.selectedState; - var nodes = graph.findAllByState("node", selectedState); - var edges = graph.findAllByState("edge", selectedState); - nodes.forEach(function(node) { - return graph.setItemState(node, selectedState, false); - }); - edges.forEach(function(edge2) { - return graph.setItemState(edge2, selectedState, false); - }); - this.selectedNodes = []; - this.selectedEdges = []; - if (this.onDeselect) { - this.onDeselect(this.selectedNodes, this.selectedEdges); - } - graph.emit("nodeselectchange", { - selectedItems: { - nodes: [], - edges: [] - }, - select: false - }); - }, - getSelectedNodes: function getSelectedNodes(e4) { - var _this = this; - var _a6 = this, graph = _a6.graph, originPoint = _a6.originPoint, shouldUpdate3 = _a6.shouldUpdate; - var state2 = this.selectedState; - var p1 = { - x: e4.x, - y: e4.y - }; - var p22 = graph.getPointByCanvas(originPoint.x, originPoint.y); - var left2 = min12(p1.x, p22.x); - var right2 = max14(p1.x, p22.x); - var top = min12(p1.y, p22.y); - var bottom = max14(p1.y, p22.y); - var selectedNodes = []; - var selectedIds = []; - graph.getNodes().forEach(function(node) { - if (!node.isVisible()) - return; - var bbox = node.getBBox(); - if (bbox.centerX >= left2 && bbox.centerX <= right2 && bbox.centerY >= top && bbox.centerY <= bottom) { - if (shouldUpdate3(node, "select")) { - selectedNodes.push(node); - var model = node.getModel(); - selectedIds.push(model.id); - graph.setItemState(node, state2, true); - } - } - }); - var selectedEdges = []; - if (this.includeEdges) { - selectedNodes.forEach(function(node) { - var edges = node.getOutEdges(); - edges.forEach(function(edge2) { - if (!edge2.isVisible()) - return; - var model = edge2.getModel(); - var source = model.source, target = model.target; - if (selectedIds.includes(source) && selectedIds.includes(target) && shouldUpdate3(edge2, "select")) { - selectedEdges.push(edge2); - graph.setItemState(edge2, _this.selectedState, true); - } - }); - }); - } - this.selectedEdges = selectedEdges; - this.selectedNodes = selectedNodes; - if (this.onSelect) { - this.onSelect(selectedNodes, selectedEdges); - } - graph.emit("nodeselectchange", { - selectedItems: { - nodes: selectedNodes, - edges: selectedEdges - }, - select: true - }); - }, - createBrush: function createBrush() { - var self2 = this; - var brush = self2.graph.get("canvas").addShape("rect", { - attrs: self2.brushStyle, - capture: false, - name: "brush-shape" - }); - this.brush = brush; - this.delegate = brush; - return brush; - }, - updateBrush: function updateBrush(e4) { - var originPoint = this.originPoint; - this.brush.attr({ - width: abs2(e4.canvasX - originPoint.x), - height: abs2(e4.canvasY - originPoint.y), - x: min12(e4.canvasX, originPoint.x), - y: min12(e4.canvasY, originPoint.y) - }); - }, - onKeyDown: function onKeyDown2(e4) { - var code = e4.key; - if (!code) { - return; - } - var triggerLowerCase = this.trigger.toLowerCase(); - var codeLowerCase = code.toLowerCase(); - if (codeLowerCase === triggerLowerCase || codeLowerCase === "control" && triggerLowerCase === "ctrl" || codeLowerCase === "ctrl" && triggerLowerCase === "control") { - this.keydown = true; - } else { - this.keydown = false; - } - }, - onKeyUp: function onKeyUp2() { - if (this.brush) { - this.brush.remove(true); - this.brush = null; - this.dragging = false; - } - this.keydown = false; - } -}; - -// node_modules/@antv/g6-pc/es/behavior/click-select.js -var import_util586 = __toModule(require_lib()); -var DEFAULT_TRIGGER2 = "shift"; -var ALLOW_EVENTS4 = ["shift", "ctrl", "alt", "control"]; -var click_select_default = { - getDefaultCfg: function getDefaultCfg6() { - return { - multiple: true, - trigger: DEFAULT_TRIGGER2, - selectedState: "selected" - }; - }, - getEvents: function getEvents6() { - var self2 = this; - if (!(ALLOW_EVENTS4.indexOf(self2.trigger.toLowerCase()) > -1)) { - self2.trigger = DEFAULT_TRIGGER2; - console.warn("Behavior brush-select \u7684 trigger \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'drag'\u3001'shift'\u3001'ctrl' \u6216 'alt'"); - } - if (!self2.multiple) { - return { - "node:click": "onClick", - "combo:click": "onClick", - "canvas:click": "onCanvasClick" - }; - } - return { - "node:click": "onClick", - "combo:click": "onClick", - "canvas:click": "onCanvasClick", - keyup: "onKeyUp", - keydown: "onKeyDown" - }; - }, - onClick: function onClick(evt) { - var self2 = this; - var item = evt.item; - if (!item || item.destroyed) { - return; - } - var type2 = item.getType(); - var graph = self2.graph, keydown = self2.keydown, multiple = self2.multiple, shouldUpdate3 = self2.shouldUpdate, shouldBegin2 = self2.shouldBegin; - if (!shouldBegin2.call(self2, evt)) { - return; - } - if (!keydown || !multiple) { - var selected = graph.findAllByState("node", self2.selectedState).concat(graph.findAllByState("combo", self2.selectedState)); - (0, import_util586.each)(selected, function(combo) { - if (combo !== item) { - graph.setItemState(combo, self2.selectedState, false); - } - }); - } - if (item.hasState(self2.selectedState)) { - if (shouldUpdate3.call(self2, evt)) { - graph.setItemState(item, self2.selectedState, false); - } - var selectedNodes = graph.findAllByState("node", self2.selectedState); - var selectedCombos = graph.findAllByState("combo", self2.selectedState); - graph.emit("nodeselectchange", { - target: item, - selectedItems: { - nodes: selectedNodes, - combos: selectedCombos - }, - select: false - }); - } else { - if (shouldUpdate3.call(self2, evt)) { - graph.setItemState(item, self2.selectedState, true); - } - var selectedNodes = graph.findAllByState("node", self2.selectedState); - var selectedCombos = graph.findAllByState("combo", self2.selectedState); - graph.emit("nodeselectchange", { - target: item, - selectedItems: { - nodes: selectedNodes, - combos: selectedCombos - }, - select: true - }); - } - }, - onCanvasClick: function onCanvasClick() { - var _this = this; - var graph = this.graph; - var selected = graph.findAllByState("node", this.selectedState); - (0, import_util586.each)(selected, function(node) { - graph.setItemState(node, _this.selectedState, false); - }); - var selectedCombos = graph.findAllByState("combo", this.selectedState); - (0, import_util586.each)(selectedCombos, function(combo) { - graph.setItemState(combo, _this.selectedState, false); - }); - graph.emit("nodeselectchange", { - selectedItems: { - nodes: [], - edges: [], - combos: [] - }, - select: false - }); - }, - onKeyDown: function onKeyDown3(e4) { - var self2 = this; - var code = e4.key; - if (!code) { - return; - } - if (code.toLowerCase() === this.trigger.toLowerCase() || code.toLowerCase() === "control") { - self2.keydown = true; - } else { - self2.keydown = false; - } - }, - onKeyUp: function onKeyUp3() { - var self2 = this; - self2.keydown = false; - } -}; - -// node_modules/@antv/g6-pc/es/behavior/zoom-canvas.js -var import_util587 = __toModule(require_lib()); -var transform17 = ext_exports.transform; -var DELTA4 = 0.05; -var zoom_canvas_default = { - getDefaultCfg: function getDefaultCfg7() { - return { - sensitivity: 2, - minZoom: void 0, - maxZoom: void 0, - enableOptimize: false, - optimizeZoom: 0.1, - fixSelectedItems: { - fixAll: false, - fixLineWidth: false, - fixLabel: false, - fixState: "selected" - }, - animate: false, - animateCfg: { - duration: 500 - } - }; - }, - getEvents: function getEvents7() { - var fixSelectedItems = this.fixSelectedItems; - if (!fixSelectedItems.fixState) - fixSelectedItems.fixState = "selected"; - if (fixSelectedItems.fixAll) { - fixSelectedItems.fixLineWidth = true; - fixSelectedItems.fixLabel = true; - } - return { - wheel: "onWheel", - touchstart: "onTouchStart", - touchmove: "onTouchMove", - touchend: "onTouchEnd" - }; - }, - onTouchStart: function onTouchStart3(evt) { - var touches = evt.originalEvent.touches; - var event1 = touches[0]; - var event2 = touches[1]; - evt.preventDefault(); - if (!event2) { - return; - } - if (this.shouldBegin && !this.shouldBegin.call(this, evt)) { - return; - } - this.startPoint = { - pageX: event1.pageX, - pageY: event1.pageY - }; - this.moveable = true; - if (event2) { - this.endPoint = { - pageX: event2.pageX, - pageY: event2.pageY - }; - } - this.originScale = this.graph.getZoom() || this.currentScale || 1; - }, - onTouchMove: function onTouchMove3(evt) { - if (!this.moveable) { - return; - } - evt.preventDefault(); - var touches = evt.originalEvent.touches; - var event1 = touches[0]; - var event2 = touches[1]; - if (!event2) { - return; - } - if (!this.endPoint) { - this.endPoint = { - pageX: event2.pageX, - pageY: event2.pageY - }; - } - var getDistance3 = function getDistance4(start, end2) { - return Math.hypot(end2.x - start.x, end2.y - start.y); - }; - var scale12 = getDistance3({ - x: event1.pageX, - y: event1.pageY - }, { - x: event2.pageX, - y: event2.pageY - }) / getDistance3({ - x: this.startPoint.pageX, - y: this.startPoint.pageY - }, { - x: this.endPoint.pageX, - y: this.endPoint.pageY - }); - var zoom2 = this.originScale * scale12; - this.currentScale = zoom2; - var minZoom = this.get("minZoom") || this.graph.get("minZoom"); - var maxZoom = this.get("maxZoom") || this.graph.get("maxZoom"); - if (zoom2 > maxZoom || zoom2 < minZoom) { - return; - } - var animate = this.get("animate"); - var animateCfg = this.get("animateCfg"); - var canvas = this.graph.get("canvas"); - var point2 = canvas.getPointByClient(evt.clientX, evt.clientY); - this.graph.zoomTo(zoom2, { - x: point2.x, - y: point2.y - }, animate, animateCfg); - this.graph.emit("wheelzoom", evt); - }, - onTouchEnd: function onTouchEnd() { - this.moveable = false; - this.endPoint = null; - }, - onWheel: function onWheel(e4) { - var _this = this; - var _a6 = this, graph = _a6.graph, fixSelectedItems = _a6.fixSelectedItems; - if (this.shouldBegin && !this.shouldBegin.call(this, e4)) { - return; - } - if (!this.shouldUpdate.call(this, e4)) { - return; - } - e4.preventDefault(); - var canvas = graph.get("canvas"); - var point2 = canvas.getPointByClient(e4.clientX, e4.clientY); - var sensitivity = this.get("sensitivity"); - var graphZoom = graph.getZoom(); - var ratio = graphZoom; - var zoom2 = graphZoom; - if (e4.wheelDelta < 0) { - ratio = 1 - DELTA4 * sensitivity; - } else { - ratio = 1 / (1 - DELTA4 * sensitivity); - } - zoom2 = graphZoom * ratio; - var minZoom = this.get("minZoom") || graph.get("minZoom"); - var maxZoom = this.get("maxZoom") || graph.get("maxZoom"); - if (zoom2 > maxZoom || zoom2 < minZoom) { - return; - } - var enableOptimize = this.get("enableOptimize"); - if (enableOptimize) { - var optimizeZoom_1 = this.get("optimizeZoom"); - var optimized = this.get("optimized"); - var nodes_1 = graph.getNodes(); - var edges_1 = graph.getEdges(); - var nodesLength_1 = nodes_1.length; - var edgesLength_1 = edges_1.length; - if (!optimized) { - for (var n3 = 0; n3 < nodesLength_1; n3++) { - var node = nodes_1[n3]; - if (!node.destroyed) { - var children = node.get("group").get("children"); - var childrenLength = children.length; - for (var c5 = 0; c5 < childrenLength; c5++) { - var shape = children[c5]; - if (!shape.destoryed && !shape.get("isKeyShape")) { - shape.set("ori-visibility", shape.get("ori-visibility") || shape.get("visible")); - shape.hide(); - } - } - } - } - for (var edgeIndex = 0; edgeIndex < edgesLength_1; edgeIndex++) { - var edge2 = edges_1[edgeIndex]; - var children = edge2.get("group").get("children"); - var childrenLength = children.length; - for (var c5 = 0; c5 < childrenLength; c5++) { - var shape = children[c5]; - shape.set("ori-visibility", shape.get("ori-visibility") || shape.get("visible")); - shape.hide(); - } - } - this.set("optimized", true); - } - clearTimeout(this.get("timeout")); - var timeout2 = setTimeout(function() { - var currentZoom = graph.getZoom(); - var curOptimized = _this.get("optimized"); - if (curOptimized) { - _this.set("optimized", false); - for (var n4 = 0; n4 < nodesLength_1; n4++) { - var node2 = nodes_1[n4]; - var children2 = node2.get("group").get("children"); - var childrenLength2 = children2.length; - if (currentZoom < optimizeZoom_1) { - var keyShape = node2.getKeyShape(); - var oriVis = keyShape.get("ori-visibility"); - if (oriVis) - keyShape.show(); - } else { - for (var c6 = 0; c6 < childrenLength2; c6++) { - var shape2 = children2[c6]; - var oriVis = shape2.get("ori-visibility"); - if (!shape2.get("visible") && oriVis) { - if (oriVis) - shape2.show(); - } - } - } - } - for (var edgeIndex2 = 0; edgeIndex2 < edgesLength_1; edgeIndex2++) { - var edge3 = edges_1[edgeIndex2]; - var children2 = edge3.get("group").get("children"); - var childrenLength2 = children2.length; - if (currentZoom < optimizeZoom_1) { - var keyShape = edge3.getKeyShape(); - var oriVis = keyShape.get("ori-visibility"); - if (oriVis) - keyShape.show(); - } else { - for (var c6 = 0; c6 < childrenLength2; c6++) { - var shape2 = children2[c6]; - if (!shape2.get("visible")) { - var oriVis = shape2.get("ori-visibility"); - if (oriVis) - shape2.show(); - } - } - } - } - } - }, 100); - this.set("timeout", timeout2); - } - if (graphZoom <= 1) { - var fixNodes = void 0, fixEdges = void 0; - if (fixSelectedItems.fixAll || fixSelectedItems.fixLineWidth || fixSelectedItems.fixLabel) { - fixNodes = graph.findAllByState("node", fixSelectedItems.fixState); - fixEdges = graph.findAllByState("edge", fixSelectedItems.fixState); - var scale12 = graphZoom / zoom2; - var fixNodesLength = fixNodes.length; - for (var fn = 0; fn < fixNodesLength; fn++) { - var node = fixNodes[fn]; - var group3 = node.getContainer(); - var nodeModel = node.getModel(); - var originStyle = node.getOriginStyle(); - var itemStateStyle = node.getStateStyle(fixSelectedItems.fixState); - var shapeStateStyle = node.get("shapeFactory").getShape(nodeModel.type).getStateStyle(fixSelectedItems.fixState, node)[fixSelectedItems.fixState]; - if (fixSelectedItems.fixAll) { - if (zoom2 <= 1) { - var groupMatrix = (0, import_util587.clone)(group3.getMatrix()); - if (!groupMatrix) - groupMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1]; - var _b = node.getModel(), x6 = _b.x, y5 = _b.y; - groupMatrix = transform17(groupMatrix, [["t", -x6, -y5], ["s", scale12, scale12], ["t", x6, y5]]); - group3.setMatrix(groupMatrix); - } - } else { - var children = group3.get("children"); - var childrenLength = children.length; - for (var c5 = 0; c5 < childrenLength; c5++) { - var shape = children[c5]; - var fontSize = void 0, lineWidth = void 0; - if (fixSelectedItems.fixLabel) { - var shapeType = shape.get("type"); - if (shapeType === "text") { - fontSize = shape.attr("fontSize") || 12; - var itemStyle = itemStateStyle[shape.get("name")]; - var shapeStyle = shapeStateStyle[shape.get("name")]; - var itemFontSize = itemStyle ? itemStyle.fontSize : 12; - var shapeFontSize = shapeStyle ? shapeStyle.fontSize : 12; - var oriFontSize = itemFontSize || shapeFontSize || 12; - if (zoom2 <= 1) - shape.attr("fontSize", oriFontSize / zoom2); - if (lineWidth) - break; - } - } - if (fixSelectedItems.fixLineWidth) { - if (shape.get("isKeyShape")) { - lineWidth = shape.attr("lineWidth") || 0; - var oriLineWidth = itemStateStyle.lineWidth || shapeStateStyle.lineWidth || originStyle.lineWidth || 0; - if (zoom2 <= 1) - shape.attr("lineWidth", oriLineWidth / zoom2); - if (fontSize) - break; - } - } - } - } - } - var fixEdgesLength = fixEdges.length; - for (var fe = 0; fe < fixEdgesLength; fe++) { - var edge2 = fixEdges[fe]; - var group3 = edge2.getContainer(); - var children = group3.get("children"); - var nodeModel = edge2.getModel(); - var itemStateStyle = edge2.getStateStyle(fixSelectedItems.fixState); - var shapeStateStyle = edge2.get("shapeFactory").getShape(nodeModel.type).getStateStyle(fixSelectedItems.fixState, edge2)[fixSelectedItems.fixState]; - var childrenLength = children.length; - for (var c5 = 0; c5 < childrenLength; c5++) { - var shape = children[c5]; - var fontSize = void 0, lineWidth = void 0; - if (fixSelectedItems.fixLabel || fixSelectedItems.fixAll) { - var shapeType = shape.get("type"); - if (shapeType === "text") { - fontSize = shape.attr("fontSize") || 12; - var itemStyle = itemStateStyle[shape.get("name")]; - var shapeStyle = shapeStateStyle[shape.get("name")]; - var itemFontSize = itemStyle ? itemStyle.fontSize : 12; - var shapeFontSize = shapeStyle ? shapeStyle.fontSize : 12; - var oriFontSize = itemFontSize || shapeFontSize || 12; - if (zoom2 <= 1) - shape.attr("fontSize", oriFontSize / zoom2); - if (lineWidth) - break; - } - } - if (fixSelectedItems.fixLineWidth || fixSelectedItems.fixAll) { - if (shape.get("isKeyShape")) { - lineWidth = shape.attr("lineWidth") || 0; - var oriLineWidth = itemStateStyle.lineWidth || shapeStateStyle.lineWidth || 1; - if (zoom2 <= 1) - shape.attr("lineWidth", oriLineWidth / zoom2); - if (fontSize) - break; - } - } - } - } - } - } - var animate = this.get("animate"); - var animateCfg = this.get("animateCfg"); - graph.zoomTo(zoom2, { - x: point2.x, - y: point2.y - }, animate, animateCfg); - graph.emit("wheelzoom", e4); - } -}; - -// node_modules/@antv/g6-pc/es/behavior/tooltip-base.js -var tooltip_base_default = { - onMouseEnter: function onMouseEnter(e4) { - var item = e4.item; - this.currentTarget = item; - this.showTooltip(e4); - this.graph.emit("tooltipchange", { - item: e4.item, - action: "show" - }); - }, - onMouseMove: function onMouseMove3(e4) { - if (!this.shouldUpdate(e4)) { - this.hideTooltip(); - return; - } - if (!this.currentTarget || e4.item !== this.currentTarget) { - return; - } - this.updatePosition(e4); - }, - onMouseLeave: function onMouseLeave(e4) { - if (!this.shouldEnd(e4)) { - return; - } - this.hideTooltip(); - this.graph.emit("tooltipchange", { - item: this.currentTarget, - action: "hide" - }); - this.currentTarget = null; - }, - showTooltip: function showTooltip(e4) { - var container2 = this.container; - if (!e4.item || e4.item.destroyed) { - return; - } - if (!container2) { - container2 = this.createTooltip(this.graph.get("canvas")); - this.container = container2; - } - var text = this.formatText(e4.item.get("model"), e4); - container2.innerHTML = text; - modifyCSS(this.container, { - visibility: "visible" - }); - this.updatePosition(e4); - }, - hideTooltip: function hideTooltip() { - modifyCSS(this.container, { - visibility: "hidden" - }); - }, - updatePosition: function updatePosition(e4) { - var shouldBegin2 = this.get("shouldBegin"); - var _a6 = this, width2 = _a6.width, height = _a6.height, container2 = _a6.container, graph = _a6.graph; - if (!shouldBegin2(e4)) { - modifyCSS(container2, { - visibility: "hidden" - }); - return; - } - var point2 = graph.getPointByClient(e4.clientX, e4.clientY); - var _b = graph.getCanvasByPoint(point2.x, point2.y), x6 = _b.x, y5 = _b.y; - var bbox = container2.getBoundingClientRect(); - if (x6 > width2 / 2) { - x6 -= bbox.width; - } else { - x6 += this.offset; - } - if (y5 > height / 2) { - y5 -= bbox.height; - } else { - y5 += this.offset; - } - var left2 = "".concat(x6, "px"); - var top = "".concat(y5, "px"); - modifyCSS(this.container, { - left: left2, - top, - visibility: "visible" - }); - }, - createTooltip: function createTooltip(canvas) { - var el = canvas.get("el"); - el.style.position = "relative"; - var container2 = createDom('
      ')); - el.parentNode.appendChild(container2); - modifyCSS(container2, { - position: "absolute", - visibility: "visible" - }); - this.width = canvas.get("width"); - this.height = canvas.get("height"); - this.container = container2; - this.graph.get("tooltips").push(container2); - return container2; - } -}; - -// node_modules/@antv/g6-pc/es/behavior/tooltip.js -var tooltip_default3 = __assign({ - getDefaultCfg: function getDefaultCfg8() { - return { - item: "node", - offset: 12, - formatText: function formatText(model) { - return model.label; - } - }; - }, - getEvents: function getEvents8() { - return { - "node:mouseenter": "onMouseEnter", - "node:mouseleave": "onMouseLeave", - "node:mousemove": "onMouseMove", - afterremoveitem: "onMouseLeave" - }; - } -}, tooltip_base_default); - -// node_modules/@antv/g6-pc/es/behavior/edge-tooltip.js -var edge_tooltip_default = __assign({ - getDefaultCfg: function getDefaultCfg9() { - return { - item: "edge", - offset: 12, - formatText: function formatText(model) { - return "source: ".concat(model.source, " target: ").concat(model.target); - } - }; - }, - getEvents: function getEvents9() { - return { - "edge:mouseenter": "onMouseEnter", - "edge:mouseleave": "onMouseLeave", - "edge:mousemove": "onMouseMove", - afterremoveitem: "onMouseLeave" - }; - } -}, tooltip_base_default); - -// node_modules/@antv/g6-pc/es/behavior/collapse-expand.js -var DEFAULT_TRIGGER3 = "click"; -var ALLOW_EVENTS5 = ["click", "dblclick"]; -var collapse_expand_default = { - getDefaultCfg: function getDefaultCfg10() { - return { - trigger: DEFAULT_TRIGGER3, - onChange: function onChange() { - } - }; - }, - getEvents: function getEvents10() { - var _a6; - var trigger; - if (ALLOW_EVENTS5.includes(this.trigger)) { - trigger = this.trigger; - } else { - trigger = DEFAULT_TRIGGER3; - console.warn("Behavior collapse-expand \u7684 trigger \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'click' \u6216 'dblclick'"); - } - return _a6 = {}, _a6["node:".concat(trigger)] = "onNodeClick", _a6.touchstart = "onNodeClick", _a6; - }, - onNodeClick: function onNodeClick(e4) { - var item = e4.item; - if (!item) - return; - var sourceData = this.graph.findDataById(item.get("id")); - if (!sourceData) { - return; - } - var children = sourceData.children; - if (!children || children.length === 0) { - return; - } - var collapsed = !sourceData.collapsed; - if (!this.shouldBegin(e4, collapsed)) { - return; - } - sourceData.collapsed = collapsed; - item.getModel().collapsed = collapsed; - this.graph.emit("itemcollapsed", { - item: e4.item, - collapsed - }); - if (!this.shouldUpdate(e4, collapsed)) { - return; - } - this.onChange(item, collapsed); - this.graph.layout(); - } -}; - -// node_modules/@antv/g6-pc/es/behavior/drag-combo.js -var import_util588 = __toModule(require_lib()); -var calculationItemsBBox3 = util_default3.calculationItemsBBox; -var traverseCombo = function traverseCombo2(data3, fn) { - if (fn(data3) === false) { - return; - } - if (data3) { - var combos = data3.get("combos"); - if (combos.length === 0) { - return false; - } - (0, import_util588.each)(combos, function(child) { - traverseCombo2(child, fn); - }); - } -}; -var drag_combo_default = { - getDefaultCfg: function getDefaultCfg11() { - return { - enableDelegate: false, - delegateStyle: {}, - onlyChangeComboSize: false, - activeState: "", - selectedState: "selected" - }; - }, - getEvents: function getEvents11() { - return { - "combo:dragstart": "onDragStart", - "combo:drag": "onDrag", - "combo:dragend": "onDragEnd", - "combo:drop": "onDrop", - "node:drop": "onNodeDrop", - "combo:dragenter": "onDragEnter", - "combo:dragleave": "onDragLeave" - }; - }, - validationCombo: function validationCombo2(evt) { - var item = evt.item; - if (!item || item.destroyed) { - return false; - } - if (!this.shouldUpdate.call(this, evt)) { - return false; - } - var type2 = item.getType(); - if (type2 !== "combo") { - return false; - } - return true; - }, - onDragStart: function onDragStart2(evt) { - var _this = this; - var graph = this.graph; - var item = evt.item; - this.currentShouldEnd = true; - if (!this.validationCombo(evt)) - return; - this.targets = []; - var combos = graph.findAllByState("combo", this.selectedState); - var currentCombo = item.get("id"); - var dragCombos = combos.filter(function(combo) { - var comboId = combo.get("id"); - return currentCombo === comboId; - }); - if (dragCombos.length === 0) { - this.targets.push(item); - } else { - this.targets = combos; - } - if (this.activeState) { - this.targets.map(function(combo) { - var model = combo.getModel(); - if (model.parentId) { - var parentCombo = graph.findById(model.parentId); - if (parentCombo) { - graph.setItemState(parentCombo, _this.activeState, true); - } - } - }); - } - this.point = {}; - this.originPoint = {}; - this.origin = { - x: evt.x, - y: evt.y - }; - this.currentItemChildCombos = []; - traverseCombo(item, function(param) { - if (param.destroyed) { - return false; - } - var model = param.getModel(); - _this.currentItemChildCombos.push(model.id); - return true; - }); - }, - onDrag: function onDrag2(evt) { - var _this = this; - if (!this.origin) { - return; - } - if (!this.validationCombo(evt)) - return; - if (this.enableDelegate) { - this.updateDelegate(evt); - } else { - if (this.activeState) { - var graph_1 = this.graph; - var item = evt.item; - var model_1 = item.getModel(); - var combos = graph_1.getCombos(); - var sourceBBox = item.getBBox(); - var centerX_1 = sourceBBox.centerX, centerY_1 = sourceBBox.centerY, width_1 = sourceBBox.width; - var calcCombos = combos.filter(function(combo) { - var cmodel = combo.getModel(); - if (!model_1.parentId) { - return cmodel.id !== model_1.id && !_this.currentItemChildCombos.includes(cmodel.id); - } - return cmodel.id !== model_1.id && !_this.currentItemChildCombos.includes(cmodel.id); - }); - calcCombos.map(function(combo) { - var _a6 = combo.getBBox(), cx = _a6.centerX, cy = _a6.centerY, w4 = _a6.width; - var disX = centerX_1 - cx; - var disY = centerY_1 - cy; - var distance15 = 2 * Math.sqrt(disX * disX + disY * disY); - if (width_1 + w4 - distance15 > 0.8 * width_1) { - graph_1.setItemState(combo, _this.activeState, true); - } else { - graph_1.setItemState(combo, _this.activeState, false); - } - }); - } - (0, import_util588.each)(this.targets, function(item2) { - _this.updateCombo(item2, evt); - }); - } - }, - updatePositions: function updatePositions2(evt, restore) { - var _this = this; - if (this.enableDelegate || restore) { - (0, import_util588.each)(this.targets, function(item) { - _this.updateCombo(item, evt, restore); - }); - } - }, - onDrop: function onDrop(evt) { - var _this = this; - var item = evt.item; - this.currentShouldEnd = this.shouldEnd.call(this, evt, item); - this.updatePositions(evt, !this.currentShouldEnd); - if (!this.currentShouldEnd || !item || !this.targets || item.destroyed) - return; - var graph = this.graph; - var targetModel = item.getModel(); - this.targets.map(function(combo) { - var model = combo.getModel(); - if (model.parentId !== targetModel.id) { - if (_this.activeState) { - graph.setItemState(item, _this.activeState, false); - } - if (!_this.onlyChangeComboSize) { - graph.updateComboTree(combo, targetModel.id); - } else { - graph.updateCombo(combo); - } - } else { - graph.updateCombo(item); - } - }); - this.end(item, evt); - this.endComparison = true; - }, - onNodeDrop: function onNodeDrop(evt) { - var _this = this; - if (!this.targets || this.targets.length === 0) - return; - var graph = this.graph; - var item = evt.item; - var comboId = item.getModel().comboId; - var newParentCombo = comboId ? graph.findById(comboId) : void 0; - this.currentShouldEnd = this.shouldEnd.call(this, evt, newParentCombo); - this.updatePositions(evt, !this.currentShouldEnd); - if (!this.currentShouldEnd) - return; - var droppedCombo; - if (comboId) { - if (this.activeState) { - var combo = graph.findById(comboId); - graph.setItemState(combo, this.activeState, false); - } - this.targets.map(function(combo2) { - if (!_this.onlyChangeComboSize) { - if (comboId !== combo2.getID()) { - droppedCombo = graph.findById(comboId); - if (comboId !== combo2.getModel().parentId) - graph.updateComboTree(combo2, comboId); - } - } else { - graph.updateCombo(combo2); - } - }); - } else { - this.targets.map(function(combo2) { - if (!_this.onlyChangeComboSize) { - var model = combo2.getModel(); - if (model.comboId) { - graph.updateComboTree(combo2); - } - } else { - graph.updateCombo(combo2); - } - }); - } - this.endComparison = true; - this.end(droppedCombo, evt); - }, - onDragEnter: function onDragEnter2(evt) { - if (!this.origin) { - return; - } - if (!this.validationCombo(evt)) - return; - var item = evt.item; - var graph = this.graph; - if (this.activeState) { - graph.setItemState(item, this.activeState, true); - } - }, - onDragLeave: function onDragLeave2(evt) { - if (!this.origin) { - return; - } - if (!this.validationCombo(evt)) - return; - var item = evt.item; - var graph = this.graph; - if (this.activeState) { - graph.setItemState(item, this.activeState, false); - } - }, - onDragEnd: function onDragEnd2(evt) { - if (!this.targets || this.targets.length === 0) - return; - var item = evt.item; - if (this.currentShouldEnd) { - this.updatePositions(evt); - } - var parentCombo = this.getParentCombo(item.getModel().parentId); - var graph = this.graph; - if (parentCombo && this.activeState) { - graph.setItemState(parentCombo, this.activeState, false); - } - this.end(void 0, evt); - }, - end: function end(comboDropedOn, evt) { - var _this = this; - if (!this.origin) - return; - var graph = this.graph; - if (this.delegateShape) { - var delegateGroup = graph.get("delegateGroup"); - delegateGroup.clear(); - this.delegateShape = null; - } - if (comboDropedOn && this.activeState) { - graph.setItemState(comboDropedOn, this.activeState, false); - } - if (!comboDropedOn) { - this.targets.map(function(combo) { - if (!_this.onlyChangeComboSize) { - graph.updateComboTree(combo); - } else { - graph.updateCombo(combo); - } - }); - } - this.point = []; - this.origin = null; - this.originPoint = null; - this.targets.length = 0; - }, - traverse: function traverse3(data3, fn) { - var _this = this; - if (fn(data3) === false) { - return; - } - if (data3) { - var combos = data3.get("combos"); - (0, import_util588.each)(combos, function(child) { - _this.traverse(child, fn); - }); - var nodes = data3.get("nodes"); - (0, import_util588.each)(nodes, function(child) { - _this.traverse(child, fn); - }); - } - }, - updateCombo: function updateCombo(item, evt, restore) { - var _this = this; - this.traverse(item, function(param) { - if (param.destroyed) { - return false; - } - _this.updateSignleItem(param, evt, restore); - return true; - }); - }, - updateSignleItem: function updateSignleItem(item, evt, restore) { - var origin = this.origin; - var graph = this.graph; - var model = item.getModel(); - var itemId = item.get("id"); - if (!this.point[itemId]) { - this.point[itemId] = { - x: model.x, - y: model.y - }; - } - var x6 = evt.x - origin.x + this.point[itemId].x; - var y5 = evt.y - origin.y + this.point[itemId].y; - if (restore) { - x6 += origin.x - evt.x; - y5 += origin.y - evt.y; - } - graph.updateItem(item, { - x: x6, - y: y5 - }); - }, - getParentCombo: function getParentCombo(parentId) { - var graph = this.graph; - if (!parentId) { - return void 0; - } - var parentCombo = graph.findById(parentId); - if (!parentCombo) { - return void 0; - } - return parentCombo; - }, - updateDelegate: function updateDelegate2(evt) { - var graph = this.graph; - if (!this.delegateShape) { - var delegateGroup = graph.get("delegateGroup"); - var bbox = null; - if (this.targets.length > 1) { - bbox = calculationItemsBBox3(this.targets); - } else { - bbox = this.targets[0].getBBox(); - } - var x6 = bbox.x, y5 = bbox.y, width2 = bbox.width, height = bbox.height, minX = bbox.minX, minY = bbox.minY; - this.originPoint = { - x: x6, - y: y5, - width: width2, - height, - minX, - minY - }; - var attrs = __assign(__assign({}, global_default2.delegateStyle), this.delegateStyle); - this.delegateShape = delegateGroup.addShape("rect", { - attrs: __assign({ - width: bbox.width, - height: bbox.height, - x: bbox.x, - y: bbox.y - }, attrs), - name: "combo-delegate-shape" - }); - this.delegateShape.set("capture", false); - this.delegate = this.delegateShape; - } else { - var clientX = evt.x - this.origin.x + this.originPoint.minX; - var clientY = evt.y - this.origin.y + this.originPoint.minY; - this.delegateShape.attr({ - x: clientX, - y: clientY - }); - } - } -}; - -// node_modules/@antv/g6-pc/es/behavior/collapse-expand-combo.js -var DEFAULT_TRIGGER4 = "dblclick"; -var ALLOW_EVENTS6 = ["click", "dblclick"]; -var collapse_expand_combo_default = { - getDefaultCfg: function getDefaultCfg12() { - return { - trigger: DEFAULT_TRIGGER4, - relayout: true - }; - }, - getEvents: function getEvents12() { - var _a6; - var trigger; - if (ALLOW_EVENTS6.includes(this.trigger)) { - trigger = this.trigger; - } else { - trigger = DEFAULT_TRIGGER4; - console.warn("Behavior collapse-expand-group \u7684 trigger \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'click' \u6216 'dblclick'"); - } - return _a6 = {}, _a6["combo:".concat(trigger)] = "onComboClick", _a6; - }, - onComboClick: function onComboClick(evt) { - var item = evt.item; - var _a6 = this, graph = _a6.graph, relayout = _a6.relayout; - if (!item || item.destroyed || item.getType() !== "combo") - return; - var model = item.getModel(); - var comboId = model.id; - if (!comboId) { - return; - } - graph.collapseExpandCombo(comboId); - if (relayout && graph.get("layout")) - graph.layout(); - else - graph.refreshPositions(); - } -}; - -// node_modules/@antv/g6-pc/es/behavior/lasso-select.js -var isPolygonsIntersect4 = util_default3.isPolygonsIntersect; -var pathToPoints4 = util_default3.pathToPoints; -var DEFAULT_TRIGGER5 = "shift"; -var ALLOW_EVENTS7 = ["drag", "shift", "ctrl", "alt", "control"]; -var isItemIntersecPolygon = function isItemIntersecPolygon2(item, polyPoints) { - var shapePoints; - var shape = item.getKeyShape(); - if (item.get("type") === "path") { - shapePoints = pathToPoints4(shape.attr("path")); - } else { - var shapeBBox = shape.getCanvasBBox(); - shapePoints = [[shapeBBox.minX, shapeBBox.minY], [shapeBBox.maxX, shapeBBox.minY], [shapeBBox.maxX, shapeBBox.maxY], [shapeBBox.minX, shapeBBox.maxY]]; - } - return isPolygonsIntersect4(polyPoints, shapePoints); -}; -var lasso_select_default = { - getDefaultCfg: function getDefaultCfg13() { - return { - delegateStyle: { - fill: "#EEF6FF", - fillOpacity: 0.4, - stroke: "#DDEEFE", - lineWidth: 1 - }, - onSelect: function onSelect() { - }, - onDeselect: function onDeselect() { - }, - selectedState: "selected", - trigger: DEFAULT_TRIGGER5, - includeEdges: true, - selectedEdges: [], - selectedNodes: [] - }; - }, - getEvents: function getEvents13() { - if (!(ALLOW_EVENTS7.indexOf(this.trigger.toLowerCase()) > -1)) { - this.trigger = DEFAULT_TRIGGER5; - console.warn("Behavior lasso-select \u7684 trigger \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'drag'\u3001'shift'\u3001'ctrl' \u6216 'alt'"); - } - if (this.trigger === "drag") { - return { - dragstart: "onDragStart", - drag: "onDragMove", - dragend: "onDragEnd", - "canvas:click": "clearStates" - }; - } - return { - dragstart: "onDragStart", - drag: "onDragMove", - dragend: "onDragEnd", - keyup: "onKeyUp", - keydown: "onKeyDown", - "canvas:click": "clearStates" - }; - }, - onDragStart: function onDragStart3(e4) { - var lasso = this.lasso; - var item = e4.item; - if (item) { - return; - } - if (this.trigger !== "drag" && !this.keydown) { - return; - } - if (this.selectedNodes && this.selectedNodes.length !== 0) { - this.clearStates(); - } - if (!lasso) { - lasso = this.createLasso(); - } - this.dragging = true; - this.originPoint = { - x: e4.x, - y: e4.y - }; - this.points.push(this.originPoint); - lasso.show(); - }, - onDragMove: function onDragMove(e4) { - if (!this.dragging) { - return; - } - if (this.trigger !== "drag" && !this.keydown) { - return; - } - this.points.push({ - x: e4.x, - y: e4.y - }); - this.updateLasso(e4); - }, - onDragEnd: function onDragEnd3(e4) { - if (!this.lasso && !this.dragging) { - return; - } - if (this.trigger !== "drag" && !this.keydown) { - return; - } - this.points.push(this.originPoint); - this.getSelectedItems(); - this.lasso.remove(true); - this.lasso = null; - this.points = []; - this.dragging = false; - }, - getLassoPath: function getLassoPath() { - var points = this.points; - var path = []; - if (points.length) { - points.forEach(function(point2, index2) { - if (index2 === 0) { - path.push(["M", point2.x, point2.y]); - } else { - path.push(["L", point2.x, point2.y]); - } - }); - path.push(["L", points[0].x, points[0].y]); - } - return path; - }, - clearStates: function clearStates2() { - var _a6 = this, graph = _a6.graph, selectedState = _a6.selectedState; - var nodes = graph.findAllByState("node", selectedState); - var edges = graph.findAllByState("edge", selectedState); - nodes.forEach(function(node) { - return graph.setItemState(node, selectedState, false); - }); - edges.forEach(function(edge2) { - return graph.setItemState(edge2, selectedState, false); - }); - if (this.onDeselect) { - this.onDeselect(this.selectedNodes, this.selectedEdges); - } - this.selectedNodes = []; - this.selectedEdges = []; - graph.emit("nodeselectchange", { - selectedItems: { - nodes: [], - edges: [] - }, - select: false - }); - }, - getSelectedItems: function getSelectedItems() { - var _this = this; - var _a6 = this, graph = _a6.graph, shouldUpdate3 = _a6.shouldUpdate; - var lassoContour = this.points.map(function(point2) { - return [graph.getCanvasByPoint(point2.x, point2.y).x, graph.getCanvasByPoint(point2.x, point2.y).y]; - }); - var state2 = this.selectedState; - var selectedNodes = []; - var selectedIds = []; - graph.getNodes().forEach(function(node) { - if (!node.isVisible()) - return; - if (isItemIntersecPolygon(node, lassoContour)) { - if (shouldUpdate3(node, "select")) { - selectedNodes.push(node); - var model = node.getModel(); - selectedIds.push(model.id); - graph.setItemState(node, state2, true); - } - } - }); - var selectedEdges = []; - if (this.includeEdges) { - selectedNodes.forEach(function(node) { - var edges = node.getOutEdges(); - edges.forEach(function(edge2) { - if (!edge2.isVisible()) - return; - var model = edge2.getModel(); - var source = model.source, target = model.target; - if (selectedIds.includes(source) && selectedIds.includes(target) && shouldUpdate3(edge2, "select")) { - selectedEdges.push(edge2); - graph.setItemState(edge2, _this.selectedState, true); - } - }); - }); - } - this.selectedEdges = selectedEdges; - this.selectedNodes = selectedNodes; - if (this.onSelect) { - this.onSelect(selectedNodes, selectedEdges); - } - graph.emit("nodeselectchange", { - selectedItems: { - nodes: selectedNodes, - edges: selectedEdges - }, - select: true - }); - }, - createLasso: function createLasso() { - var self2 = this; - var lasso = self2.graph.get("delegateGroup").addShape("path", { - attrs: __assign({ - path: [] - }, self2.delegateStyle), - capture: false, - name: "lasso-shape" - }); - this.lasso = lasso; - this.delegate = lasso; - this.points = []; - return lasso; - }, - updateLasso: function updateLasso(e4) { - var self2 = this; - this.lasso.attr({ - path: self2.getLassoPath() - }); - }, - onKeyDown: function onKeyDown4(e4) { - var code = e4.key; - if (!code) { - return; - } - if (code.toLowerCase() === this.trigger.toLowerCase()) { - this.keydown = true; - } else { - this.keydown = false; - } - }, - onKeyUp: function onKeyUp4() { - if (this.lasso) { - this.lasso.remove(true); - this.lasso = null; - this.points = []; - this.dragging = false; - } - this.keydown = false; - } -}; - -// node_modules/@antv/g6-pc/es/behavior/create-edge.js -var import_util591 = __toModule(require_lib()); -var DEFAULT_TRIGGER6 = "click"; -var ALLOW_EVENTS8 = ["click", "drag"]; -var DEFAULT_KEY = void 0; -var ALLOW_KEYS = ["shift", "ctrl", "control", "alt", "meta", void 0]; -var create_edge_default = { - getDefaultCfg: function getDefaultCfg14() { - return { - trigger: DEFAULT_TRIGGER6, - key: DEFAULT_KEY, - edgeConfig: {}, - getEdgeConfig: void 0 - }; - }, - getEvents: function getEvents14() { - var self2 = this; - if (!(ALLOW_EVENTS8.indexOf(self2.trigger.toLowerCase()) > -1)) { - self2.trigger = DEFAULT_TRIGGER6; - console.warn("Behavior create-edge \u7684 trigger \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'click'\uFF0C'drag'"); - } - if (self2.key && ALLOW_KEYS.indexOf(self2.key.toLowerCase()) === -1) { - self2.trigger = DEFAULT_KEY; - console.warn("Behavior create-edge \u7684 key \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'shift'\uFF0C'ctrl'\uFF0C'alt'\uFF0C'control'\uFF0C\u6216 undefined"); - } - var events; - if (self2.trigger === "drag") { - events = { - "node:dragstart": "onClick", - "combo:dragstart": "onClick", - drag: "updateEndPoint", - "node:drop": "onClick", - "combo:drop": "onClick", - dragend: "onDragEnd" - }; - } else if (self2.trigger === "click") { - events = { - "node:click": "onClick", - mousemove: "updateEndPoint", - "edge:click": "cancelCreating", - "canvas:click": "cancelCreating", - "combo:click": "onClick" - }; - } - if (self2.key) { - events.keydown = "onKeyDown"; - events.keyup = "onKeyUp"; - } - return events; - }, - onDragEnd: function onDragEnd4(ev) { - var self2 = this; - if (self2.key && !self2.keydown) - return; - var item = ev.item; - if (!item || item.getID() === self2.source || item.getType() !== "node") - self2.cancelCreating({ - item: self2.edge, - x: ev.x, - y: ev.y - }); - }, - onClick: function onClick2(ev) { - var self2 = this; - if (self2.key && !self2.keydown) - return; - var node = ev.item; - var graph = self2.graph; - var model = node.getModel(); - var getEdgeConfig = self2.getEdgeConfig; - if (self2.addingEdge && self2.edge) { - if (!self2.shouldEnd.call(self2, ev)) - return; - var edgeConfig = void 0; - if (getEdgeConfig && (0, import_util591.isFunction)(getEdgeConfig)) { - edgeConfig = getEdgeConfig({ - source: self2.source, - target: model.id - }); - } else { - edgeConfig = self2.edgeConfig; - } - var updateCfg2 = __assign({ - target: model.id - }, edgeConfig); - if (self2.source === model.id) { - updateCfg2.type = "loop"; - } - graph.emit("beforecreateedge", {}); - graph.updateItem(self2.edge, updateCfg2, false); - if (graph.get("enabledStack")) { - var addedModel = __assign(__assign({}, self2.edge.getModel()), { - itemType: "edge" - }); - var after = {}; - after.edges = [addedModel]; - graph.pushStack("add", { - before: {}, - after - }); - } - graph.emit("aftercreateedge", { - edge: self2.edge - }); - self2.edge.getKeyShape().set("capture", true); - self2.edge = null; - self2.addingEdge = false; - } else { - if (!self2.shouldBegin.call(self2, ev)) - return; - var edgeConfig = void 0; - if (getEdgeConfig && (0, import_util591.isFunction)(getEdgeConfig)) { - edgeConfig = getEdgeConfig({ - source: model.id, - target: model.id - }); - } else { - edgeConfig = self2.edgeConfig; - } - self2.edge = graph.addItem("edge", __assign({ - source: model.id, - target: model.id - }, edgeConfig), false); - self2.source = model.id; - self2.addingEdge = true; - self2.edge.getKeyShape().set("capture", false); - } - }, - updateEndPoint: function updateEndPoint(ev) { - var self2 = this; - if (self2.key && !self2.keydown) - return; - if (self2.edge && self2.edge.destroyed) - self2.cancelCreating({ - item: self2.edge - }); - var point2 = { - x: ev.x, - y: ev.y - }; - if (!self2.graph.findById(self2.source)) { - self2.addingEdge = false; - return; - } - if (self2.addingEdge && self2.edge) { - self2.graph.updateItem(self2.edge, { - target: point2 - }, false); - } - }, - cancelCreating: function cancelCreating(ev) { - var _a6, _b; - var self2 = this; - if (self2.key && !self2.keydown) - return; - var graph = self2.graph; - var currentEdge = ev.item; - if (self2.addingEdge && (self2.edge === currentEdge || ((_b = (_a6 = ev.target) === null || _a6 === void 0 ? void 0 : _a6.isCanvas) === null || _b === void 0 ? void 0 : _b.call(_a6)))) { - if (self2.edge && !self2.edge.destroyed) - graph.removeItem(self2.edge, false); - self2.edge = null; - self2.addingEdge = false; - return; - } - }, - onKeyDown: function onKeyDown5(e4) { - var self2 = this; - var code = e4.key; - if (!code) { - return; - } - if (code.toLowerCase() === self2.key.toLowerCase()) { - self2.keydown = true; - } else { - self2.keydown = false; - } - }, - onKeyUp: function onKeyUp5() { - var self2 = this; - if (self2.addingEdge && self2.edge) { - self2.graph.removeItem(self2.edge, false); - self2.addingEdge = false; - self2.edge = null; - } - this.keydown = false; - } -}; - -// node_modules/@antv/g6-pc/es/behavior/shortcuts-call.js -var DEFAULT_TRIGGER7 = "ctrl"; -var ALLOW_EVENTS9 = ["shift", "ctrl", "alt", "control"]; -var DEFAULT_COMBINED_KEY = "1"; -var shortcuts_call_default = { - getDefaultCfg: function getDefaultCfg15() { - return { - trigger: DEFAULT_TRIGGER7, - combinedKey: DEFAULT_COMBINED_KEY, - functionName: "fitView", - functionParams: [] - }; - }, - getEvents: function getEvents15() { - if (!(ALLOW_EVENTS9.indexOf(this.trigger.toLowerCase()) > -1)) { - this.trigger = DEFAULT_TRIGGER7; - console.warn("Behavior shortcuts-fit-view \u7684 trigger \u53C2\u6570 '".concat(this.trigger, "' \u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'drag'\u3001'shift'\u3001'ctrl' \u6216 'alt'")); - } - if (this.combinedKey === this.trigger) { - this.combinedKey = void 0; - } - return { - keyup: "onKeyUp", - keydown: "onKeyDown" - }; - }, - onKeyDown: function onKeyDown6(e4) { - var code = e4.key; - if (!code) { - return; - } - var triggerLowerCase = this.trigger.toLowerCase(); - var codeLowerCase = code.toLowerCase(); - if (!this.triggerKeydown) { - if (codeLowerCase === triggerLowerCase || codeLowerCase === "control" && triggerLowerCase === "ctrl" || codeLowerCase === "ctrl" && triggerLowerCase === "control") { - this.triggerKeydown = true; - } else { - this.triggerKeydown = false; - } - } - var graph = this.graph; - if (!graph[this.functionName]) { - console.warn("Behavior shortcuts-fit-view \u7684 functionName \u53C2\u6570 '".concat(this.functionName, "' \u4E0D\u5408\u6CD5\uFF0C\u5B83\u4E0D\u662F Graph \u7684\u4E00\u4E2A\u51FD\u6570\u540D")); - return {}; - } - if (this.triggerKeydown && !this.combinedKey) { - if (this.functionParams && this.functionParams.length) - graph[this.functionName].apply(graph, this.functionParams); - else - graph[this.functionName](); - return; - } - var combinedKeyLowerCase = this.combinedKey.toLowerCase(); - if (this.triggerKeydown) { - if (codeLowerCase === combinedKeyLowerCase || codeLowerCase === "control" && combinedKeyLowerCase === "ctrl" || codeLowerCase === "ctrl" && combinedKeyLowerCase === "control") { - if (this.functionParams && this.functionParams.length) - graph[this.functionName].apply(graph, this.functionParams); - else - graph[this.functionName](); - } - } - }, - onKeyUp: function onKeyUp6() { - if (this.brush) { - this.brush.remove(true); - this.brush = null; - this.dragging = false; - } - this.triggerKeydown = false; - } -}; - -// node_modules/@antv/g6-pc/es/behavior/scroll-canvas.js -var ALLOW_EVENTS10 = ["shift", "ctrl", "alt", "control"]; -var scroll_canvas_default = { - getDefaultCfg: function getDefaultCfg16() { - return { - direction: "both", - enableOptimize: false, - zoomKey: "ctrl", - scalableRange: 0 - }; - }, - getEvents: function getEvents16() { - if (!this.zoomKey || ALLOW_EVENTS10.indexOf(this.zoomKey) === -1) - this.zoomKey = "ctrl"; - return { - wheel: "onWheel" - }; - }, - onWheel: function onWheel2(ev) { - var _this = this; - var graph = this.graph; - var keyDown = ev["".concat(this.zoomKey, "Key")]; - if (this.zoomKey === "control") - keyDown = ev.ctrlKey; - if (keyDown) { - var canvas = graph.get("canvas"); - var point2 = canvas.getPointByClient(ev.clientX, ev.clientY); - var ratio = graph.getZoom(); - if (ev.wheelDelta > 0) { - ratio = ratio + ratio * 0.05; - } else { - ratio = ratio - ratio * 0.05; - } - graph.zoomTo(ratio, { - x: point2.x, - y: point2.y - }); - } else { - var dx = ev.deltaX || ev.movementX; - var dy = ev.deltaY || ev.movementY; - if (!dy && navigator.userAgent.indexOf("Firefox") > -1) - dy = -ev.wheelDelta * 125 / 3; - var width2 = this.graph.get("width"); - var height = this.graph.get("height"); - var graphCanvasBBox = this.graph.get("canvas").getCanvasBBox(); - var expandWidth = this.scalableRange; - var expandHeight = this.scalableRange; - if (expandWidth < 1 && expandWidth > -1) { - expandWidth = width2 * expandWidth; - expandHeight = height * expandHeight; - } - var minX = graphCanvasBBox.minX, maxX = graphCanvasBBox.maxX, minY = graphCanvasBBox.minY, maxY2 = graphCanvasBBox.maxY; - if (dx > 0) { - if (maxX < -expandWidth) { - dx = 0; - } else if (maxX - dx < -expandWidth) { - dx = maxX + expandWidth; - } - } else if (dx < 0) { - if (minX > width2 + expandWidth) { - dx = 0; - } else if (minX - dx > width2 + expandWidth) { - dx = minX - (width2 + expandWidth); - } - } - if (dy > 0) { - if (maxY2 < -expandHeight) { - dy = 0; - } else if (maxY2 - dy < -expandHeight) { - dy = maxY2 + expandHeight; - } - } else if (dy < 0) { - if (minY > height + expandHeight) { - dy = 0; - } else if (minY - dy > height + expandHeight) { - dy = minY - (height + expandHeight); - } - } - if (this.get("direction") === "x") { - dy = 0; - } else if (this.get("direction") === "y") { - dx = 0; - } - graph.translate(-dx, -dy); - } - ev.preventDefault(); - var enableOptimize = this.get("enableOptimize"); - if (enableOptimize) { - var optimizeZoom_1 = this.get("optimizeZoom"); - var optimized = this.get("optimized"); - var nodes_1 = graph.getNodes(); - var edges_1 = graph.getEdges(); - var nodesLength_1 = nodes_1.length; - var edgesLength_1 = edges_1.length; - if (!optimized) { - for (var n3 = 0; n3 < nodesLength_1; n3++) { - var node = nodes_1[n3]; - if (!node.destroyed) { - var children = node.get("group").get("children"); - var childrenLength = children.length; - for (var c5 = 0; c5 < childrenLength; c5++) { - var shape = children[c5]; - if (!shape.destoryed && !shape.get("isKeyShape")) { - shape.set("ori-visibility", shape.get("ori-visibility") || shape.get("visible")); - shape.hide(); - } - } - } - } - for (var edgeIndex = 0; edgeIndex < edgesLength_1; edgeIndex++) { - var edge2 = edges_1[edgeIndex]; - var children = edge2.get("group").get("children"); - var childrenLength = children.length; - for (var c5 = 0; c5 < childrenLength; c5++) { - var shape = children[c5]; - shape.set("ori-visibility", shape.get("ori-visibility") || shape.get("visible")); - shape.hide(); - } - } - this.set("optimized", true); - } - clearTimeout(this.get("timeout")); - var timeout2 = setTimeout(function() { - var currentZoom = graph.getZoom(); - var curOptimized = _this.get("optimized"); - if (curOptimized) { - _this.set("optimized", false); - for (var n4 = 0; n4 < nodesLength_1; n4++) { - var node2 = nodes_1[n4]; - var children2 = node2.get("group").get("children"); - var childrenLength2 = children2.length; - if (currentZoom < optimizeZoom_1) { - var keyShape = node2.getKeyShape(); - var oriVis = keyShape.get("ori-visibility"); - if (oriVis) - keyShape.show(); - } else { - for (var c6 = 0; c6 < childrenLength2; c6++) { - var shape2 = children2[c6]; - var oriVis = shape2.get("ori-visibility"); - if (!shape2.get("visible") && oriVis) { - if (oriVis) - shape2.show(); - } - } - } - } - for (var edgeIndex2 = 0; edgeIndex2 < edgesLength_1; edgeIndex2++) { - var edge3 = edges_1[edgeIndex2]; - var children2 = edge3.get("group").get("children"); - var childrenLength2 = children2.length; - if (currentZoom < optimizeZoom_1) { - var keyShape = edge3.getKeyShape(); - var oriVis = keyShape.get("ori-visibility"); - if (oriVis) - keyShape.show(); - } else { - for (var c6 = 0; c6 < childrenLength2; c6++) { - var shape2 = children2[c6]; - if (!shape2.get("visible")) { - var oriVis = shape2.get("ori-visibility"); - if (oriVis) - shape2.show(); - } - } - } - } - } - }, 100); - this.set("timeout", timeout2); - } - } -}; - -// node_modules/@antv/g6-pc/es/behavior/index.js -var behaviors = { - "drag-canvas": drag_canvas_default, - "zoom-canvas": zoom_canvas_default, - "drag-node": drag_node_default, - "activate-relations": activate_relations_default, - "brush-select": brush_select_default, - "click-select": click_select_default, - "lasso-select": lasso_select_default, - tooltip: tooltip_default3, - "edge-tooltip": edge_tooltip_default, - "collapse-expand": collapse_expand_default, - "drag-combo": drag_combo_default, - "collapse-expand-combo": collapse_expand_combo_default, - "create-edge": create_edge_default, - "shortcuts-call": shortcuts_call_default, - "scroll-canvas": scroll_canvas_default -}; -(0, import_util592.each)(behaviors, function(behavior, type2) { - registerBehavior(type2, behavior); -}); - -// node_modules/@antv/g6-pc/es/index.js -var Algorithm = __assign(__assign({}, es_exports2), AlgorithmAsync); -var Grid4 = plugin_default.Grid; -var Minimap = plugin_default.Minimap; -var Bundling2 = plugin_default.Bundling; -var Menu2 = plugin_default.Menu; -var Fisheye2 = plugin_default.Fisheye; -var ToolBar2 = plugin_default.ToolBar; -var Tooltip4 = plugin_default.Tooltip; -var TimeBar2 = plugin_default.TimeBar; -var ImageMinimap = plugin_default.ImageMinimap; -var EdgeFilterLens2 = plugin_default.EdgeFilterLens; -var SnapLine2 = plugin_default.SnapLine; -var Legend3 = plugin_default.Legend; -var es_default5 = { - version: global_default2.version, - Graph: graph_default2, - TreeGraph: tree_graph_default, - Util: util_default3, - Layout: Layouts, - TreeLayout: tree_layout_default, - registerLayout: registerLayout2, - Global: global_default2, - registerBehavior, - registerCombo, - registerEdge, - registerNode, - Minimap: plugin_default.Minimap, - Grid: plugin_default.Grid, - Bundling: plugin_default.Bundling, - Menu: plugin_default.Menu, - ToolBar: plugin_default.ToolBar, - Tooltip: plugin_default.Tooltip, - Legend: plugin_default.Legend, - TimeBar: TimeBar2, - SnapLine: SnapLine2, - Fisheye: Fisheye2, - ImageMinimap, - EdgeFilterLens: EdgeFilterLens2, - Algorithm, - Arrow: arrow_default2, - Marker: marker_default3, - Shape: element_default3 -}; - -// node_modules/@antv/g6/es/index.js -es_default5.version = "4.5.3"; -var es_default6 = es_default5; - -// node_modules/@ant-design/graphs/es/utils/createLoading.js -var ChartLoading2 = function(_a6) { - var loadingTemplate = _a6.loadingTemplate; - var renderLoading = function() { - if (loadingTemplate) { - return loadingTemplate; - } - return compat_module_default.createElement(react_content_loader_es_default, { viewBox: "0 0 400 180", width: 200, height: 90, speed: 1 }, compat_module_default.createElement("rect", { x: "20", y: "5", rx: "0", ry: "0", width: "1", height: "170" }), compat_module_default.createElement("rect", { x: "20", y: "175", rx: "0", ry: "0", width: "360", height: "1" }), compat_module_default.createElement("rect", { x: "40", y: "75", rx: "0", ry: "0", width: "35", height: "100" }), compat_module_default.createElement("rect", { x: "80", y: "125", rx: "0", ry: "0", width: "35", height: "50" }), compat_module_default.createElement("rect", { x: "120", y: "105", rx: "0", ry: "0", width: "35", height: "70" }), compat_module_default.createElement("rect", { x: "160", y: "35", rx: "0", ry: "0", width: "35", height: "140" }), compat_module_default.createElement("rect", { x: "200", y: "55", rx: "0", ry: "0", width: "35", height: "120" }), compat_module_default.createElement("rect", { x: "240", y: "15", rx: "0", ry: "0", width: "35", height: "160" }), compat_module_default.createElement("rect", { x: "280", y: "135", rx: "0", ry: "0", width: "35", height: "40" }), compat_module_default.createElement("rect", { x: "320", y: "85", rx: "0", ry: "0", width: "35", height: "90" })); - }; - return compat_module_default.createElement("div", { style: { - position: "absolute", - width: "100%", - height: "100%", - display: "flex", - alignItems: "center", - justifyContent: "center", - left: 0, - top: 0, - zIndex: 99, - backgroundColor: "#fff" - } }, renderLoading()); -}; -var createLoading_default2 = ChartLoading2; - -// node_modules/@ant-design/graphs/es/errorBoundary/index.js -var __extends17 = function() { - var extendStatics = function(d3, b10) { - extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d4, b11) { - d4.__proto__ = b11; - } || function(d4, b11) { - for (var p4 in b11) - if (Object.prototype.hasOwnProperty.call(b11, p4)) - d4[p4] = b11[p4]; - }; - return extendStatics(d3, b10); - }; - return function(d3, b10) { - if (typeof b10 !== "function" && b10 !== null) - throw new TypeError("Class extends value " + String(b10) + " is not a constructor or null"); - extendStatics(d3, b10); - function __() { - this.constructor = d3; - } - d3.prototype = b10 === null ? Object.create(b10) : (__.prototype = b10.prototype, new __()); - }; -}(); -var ErrorBoundary2 = function(_super) { - __extends17(ErrorBoundary3, _super); - function ErrorBoundary3() { - var _this = _super !== null && _super.apply(this, arguments) || this; - _this.state = { - hasError: false - }; - _this.renderError = function(e4) { - var errorTemplate = _this.props.errorTemplate; - switch (e4) { - default: - return errorTemplate && typeof errorTemplate === "function" ? errorTemplate(e4) : compat_module_default.createElement("h5", null, "\u7EC4\u4EF6\u51FA\u9519\u4E86\uFF0C\u8BF7\u6838\u67E5\u540E\u91CD\u8BD5\uFF1A ", e4.message); - } - }; - return _this; - } - ErrorBoundary3.getDerivedStateFromError = function(error) { - return { hasError: true, error }; - }; - ErrorBoundary3.getDerivedStateFromProps = function(nextProps, state2) { - if (state2.children !== nextProps.children) { - return { - children: nextProps.children, - hasError: false, - error: void 0 - }; - } - return null; - }; - ErrorBoundary3.prototype.render = function() { - if (this.state.hasError) { - return this.renderError(this.state.error); - } - return compat_module_default.createElement(d, null, this.props.children); - }; - return ErrorBoundary3; -}(compat_module_default.Component); -var errorBoundary_default2 = ErrorBoundary2; - -// node_modules/@ant-design/graphs/es/hooks/useGraphs.js -var import_util595 = __toModule(require_lib()); - -// node_modules/@ant-design/graphs/es/utils/index.js -var import_util594 = __toModule(require_lib()); - -// node_modules/@ant-design/graphs/es/constants/index.js -var defaultStateStyles = { - hover: { - stroke: "#1890ff", - lineWidth: 2 - } -}; -var defaultNodeSize = [120, 40]; -var defaultNodeStyle = { - stroke: "#40a9ff" -}; -var defaultFlowGraphAnchorPoints = [ - [0, 0.5], - [1, 0.5] -]; -var defaultLabelStyle = { - fill: "#000", - fontSize: 12 -}; -var defaultMinimapCfg = { - show: false, - size: [150, 100], - type: "keyShape" -}; -var defaultCardStyle = { - fill: "#fff", - stroke: "#40a9ff", - radius: 2 -}; -var defaultMargin = 6; -var prefix = "g"; - -// node_modules/@ant-design/graphs/es/utils/index.js -var __assign18 = function() { - __assign18 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign18.apply(this, arguments); -}; -var __awaiter6 = function(thisArg, _arguments, P4, generator) { - function adopt(value2) { - return value2 instanceof P4 ? value2 : new P4(function(resolve) { - resolve(value2); - }); - } - return new (P4 || (P4 = Promise))(function(resolve, reject) { - function fulfilled(value2) { - try { - step(generator.next(value2)); - } catch (e4) { - reject(e4); - } - } - function rejected(value2) { - try { - step(generator["throw"](value2)); - } catch (e4) { - reject(e4); - } - } - function step(result) { - result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator4 = function(thisArg, body) { - var _8 = { label: 0, sent: function() { - if (t4[0] & 1) - throw t4[1]; - return t4[1]; - }, trys: [], ops: [] }, f3, y5, t4, g4; - return g4 = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g4[Symbol.iterator] = function() { - return this; - }), g4; - function verb(n3) { - return function(v3) { - return step([n3, v3]); - }; - } - function step(op) { - if (f3) - throw new TypeError("Generator is already executing."); - while (_8) - try { - if (f3 = 1, y5 && (t4 = op[0] & 2 ? y5["return"] : op[0] ? y5["throw"] || ((t4 = y5["return"]) && t4.call(y5), 0) : y5.next) && !(t4 = t4.call(y5, op[1])).done) - return t4; - if (y5 = 0, t4) - op = [op[0] & 2, t4.value]; - switch (op[0]) { - case 0: - case 1: - t4 = op; - break; - case 4: - _8.label++; - return { value: op[1], done: false }; - case 5: - _8.label++; - y5 = op[1]; - op = [0]; - continue; - case 7: - op = _8.ops.pop(); - _8.trys.pop(); - continue; - default: - if (!(t4 = _8.trys, t4 = t4.length > 0 && t4[t4.length - 1]) && (op[0] === 6 || op[0] === 2)) { - _8 = 0; - continue; - } - if (op[0] === 3 && (!t4 || op[1] > t4[0] && op[1] < t4[3])) { - _8.label = op[1]; - break; - } - if (op[0] === 6 && _8.label < t4[1]) { - _8.label = t4[1]; - t4 = op; - break; - } - if (t4 && _8.label < t4[2]) { - _8.label = t4[2]; - _8.ops.push(op); - break; - } - if (t4[2]) - _8.ops.pop(); - _8.trys.pop(); - continue; - } - op = body.call(thisArg, _8); - } catch (e4) { - op = [6, e4]; - y5 = 0; - } finally { - f3 = t4 = 0; - } - if (op[0] & 5) - throw op[1]; - return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var isType6 = function(value2, type2) { - var toString7 = {}.toString; - return toString7.call(value2) === "[object ".concat(type2, "]"); -}; -var Log2 = window.console; -var getType = function(n3) { - return Object.prototype.toString.call(n3).slice(8, -1); -}; -var deepClone2 = function(source) { - if (!source || typeof source !== "object") { - return source; - } - var target; - if (Array.isArray(source)) { - target = source.map(function(item) { - return deepClone2(item); - }); - } else if (source instanceof HTMLElement) { - target = source; - } else { - target = {}; - Object.keys(source).forEach(function(key) { - return target[key] = deepClone2(source[key]); - }); - } - return target; -}; -var getGraphSize = function(width2, height, container2) { - var CANVAS_WIDTH; - var CANVAS_HEIGHT; - if (container2 && container2.current) { - CANVAS_WIDTH = container2.current.offsetWidth; - CANVAS_HEIGHT = container2.current.offsetHeight || 500; - } - if (!width2 && !CANVAS_WIDTH || !height && !CANVAS_HEIGHT) { - Log2.warn("\u8BF7\u4E3A Graph \u6307\u5B9A width \u4E0E height\uFF01\u5426\u5219\u5C06\u4F7F\u7528\u9ED8\u8BA4\u503C 500 * 500"); - return [500, 500]; - } - return [width2 || CANVAS_WIDTH || 500, height || CANVAS_HEIGHT || 500]; -}; -var EventData = function() { - function EventData2(data3) { - data3 && this.setData(data3); - } - EventData2.prototype.getData = function() { - return this.data; - }; - EventData2.prototype.setData = function(data3) { - this.data = data3; - }; - return EventData2; -}(); -var bindDefaultEvents = function(graph, level, getChildren) { - var onClick3 = function(e4) { - return __awaiter6(void 0, void 0, void 0, function() { - var item, _a6, collapsed, g_currentPath_1, _b, children, g_parentId_1, g_level_1, id_1, appendChildren, appendChildrenData, currentData; - var _c; - return __generator4(this, function(_d) { - switch (_d.label) { - case 0: - item = e4.item; - if (!(e4.target.get("name") === "collapse-icon")) - return [3, 3]; - _a6 = item.getModel(), collapsed = _a6.collapsed, g_currentPath_1 = _a6.g_currentPath, _b = _a6.children, children = _b === void 0 ? [] : _b, g_parentId_1 = _a6.g_parentId, g_level_1 = _a6.g_level, id_1 = _a6.id; - appendChildren = level && !children.length && getChildrenData(graph.get("eventData").getData(), g_currentPath_1); - if (!(getChildren && !((_c = children) === null || _c === void 0 ? void 0 : _c.length) && !(appendChildren === null || appendChildren === void 0 ? void 0 : appendChildren.length))) - return [3, 2]; - createLoading(); - return [4, getChildren(item.getModel())]; - case 1: - appendChildrenData = _d.sent(); - if (appendChildrenData) { - appendChildrenData = appendChildrenData.map(function(t4, index2) { - var _a7; - return __assign18((_a7 = {}, _a7["".concat(prefix, "_level")] = g_level_1 + 1, _a7["".concat(prefix, "_parentId")] = "".concat(g_parentId_1, "-").concat(id_1), _a7["".concat(prefix, "_currentPath")] = "".concat(g_currentPath_1, "-").concat(index2), _a7), t4); - }); - setLevelData(graph, appendChildrenData, g_currentPath_1); - } - appendChildren = appendChildrenData; - closeLoading(); - _d.label = 2; - case 2: - if ((appendChildren === null || appendChildren === void 0 ? void 0 : appendChildren.length) > 0) { - currentData = setParentChildren(graph.get("data"), g_currentPath_1, appendChildren); - graph.changeData(currentData); - if (graph.get("fitCenter")) { - graph.fitCenter(); - graph.stopAnimate(); - } - } else { - graph.updateItem(item, { - collapsed: !collapsed - }); - graph.layout(); - } - _d.label = 3; - case 3: - return [2]; - } - }); - }); - }; - graph.on("node:click", function(e4) { - onClick3(e4); - }); - graph.on("node:touchstart", function(e4) { - onClick3(e4); - }); -}; -var renderGraph = function(graph, data3, level) { - var originData = deepClone2(data3); - var tagData = originData; - if (level) { - tagData = setTag4(data3); - originData = getLevelData(tagData, level); - } - graph.data(originData); - graph.set("eventData", new EventData(tagData)); - graph.render(); - graph.get("canvas").set("localRefresh", false); -}; -var grapgMinmapMaps = {}; -var processMinimap = function(cfg, graph) { - if (cfg === void 0) { - cfg = {}; - } - var graphId = graph === null || graph === void 0 ? void 0 : graph.get("id"); - if (!graph || graph.destroyed) { - grapgMinmapMaps[graphId] = null; - return; - } - if ((!cfg || !cfg.show) && grapgMinmapMaps[graphId]) { - var pluginMinimap = graph.get("plugins")[0]; - if (pluginMinimap) { - graph.removePlugin(pluginMinimap); - } - grapgMinmapMaps[graphId] = null; - } - if (cfg.show && !grapgMinmapMaps[graphId]) { - var curMminimapCfg = Object.assign(defaultMinimapCfg, cfg); - var minimap = new es_default6.Minimap(__assign18(__assign18({}, curMminimapCfg), { id: graphId })); - graph.addPlugin(minimap); - grapgMinmapMaps[graphId] = minimap; - return minimap; - } - return null; -}; -var getUuid = function() { - return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c5) { - var r4 = Math.random() * 16 | 0; - var v3 = c5 == "x" ? r4 : r4 & 3 | 8; - return v3.toString(16); - }); -}; -var getGraphId = function(graph) { - if (graph.current) { - return graph.current; - } - graph.current = "graph-".concat(getUuid()); - return graph.current; -}; -var getMarkerPosition = function(direction3, size14) { - if (direction3 === void 0) { - direction3 = "right"; - } - var width2 = size14[0], height = size14[1]; - var x6 = 0; - var y5 = 0; - switch (direction3) { - case "top": - x6 = width2 / 2; - y5 = 0; - break; - case "right": - x6 = width2; - y5 = height / 2; - break; - case "bottom": - x6 = width2 / 2; - y5 = height; - break; - case "left": - x6 = 0; - y5 = height / 2; - break; - } - return { x: x6, y: y5 }; -}; -var bindSourceMapCollapseEvents = function(graph) { - var onClick3 = function(e4) { - var _a6; - var controlData = graph.get("eventData").getData(); - if (e4.target.get("name") === "collapse-icon") { - var item = e4.item; - var collapsed = item.getModel().collapsed; - if (!isType6(collapsed, "Boolean")) { - collapsed = (_a6 = item._cfg.group.getChildren().find(function(item2) { - return item2.get("name") === "main-box"; - })) === null || _a6 === void 0 ? void 0 : _a6.attr("defaultCollapsed"); - } - var marker = e4.item._cfg.group.getChildren().find(function(item2) { - return item2.cfg.type === "marker"; - }); - var _b = (controlData !== null && controlData !== void 0 ? controlData : {}).edges, fullEdges_1 = _b === void 0 ? [] : _b; - var nodeId = item.getModel().id; - var targetNodeIds_1 = []; - var updateItems_1 = []; - var updateIds_1 = []; - var getLinkedId_1 = function(currentId) { - fullEdges_1.forEach(function(edge2) { - var source = edge2.source, target = edge2.target; - if (source === currentId) { - targetNodeIds_1.push(target); - getLinkedId_1(target); - } - }); - }; - getLinkedId_1(nodeId); - if (!collapsed) { - graph.findAll("node", function(node) { - return targetNodeIds_1.includes(node.get("id")); - }).forEach(function(node) { - return graph.hideItem(node); - }); - controlData.nodes.forEach(function(node) { - var _a7 = node.collapsedLevel, collapsedLevel = _a7 === void 0 ? 0 : _a7, id = node.id; - if (targetNodeIds_1.includes(id)) { - node.collapsedLevel = collapsedLevel + 1; - } - }); - } else { - graph.findAll("node", function(node) { - var collapsedLevel = controlData.nodes.find(function(item2) { - return item2.id === node.get("id"); - }).collapsedLevel; - return targetNodeIds_1.includes(node.get("id")) && (!collapsedLevel || collapsedLevel < 2); - }).forEach(function(node) { - return graph.showItem(node); - }); - controlData.nodes.forEach(function(node) { - var _a7 = node.collapsedLevel, collapsedLevel = _a7 === void 0 ? 0 : _a7, id = node.id; - if (targetNodeIds_1.includes(id)) { - node.collapsedLevel = collapsedLevel - 1; - } - }); - } - fullEdges_1.forEach(function(edge2) { - var source = edge2.source, target = edge2.target; - if (targetNodeIds_1.includes(target)) { - updateIds_1.push(source); - } - }); - updateIds_1 = Array.from(new Set(updateIds_1)); - updateIds_1.forEach(function(id) { - updateItems_1.push(graph.find("node", function(node) { - return node.get("id") === id; - })); - }); - updateItems_1.forEach(function(nodeItem) { - graph.updateItem(nodeItem, { - collapsed: !nodeItem.getModel().collapsed - }); - graph.refreshItem(nodeItem); - }); - } - }; - graph.on("node:click", function(e4) { - onClick3(e4); - }); - graph.on("node:touchstart", function(e4) { - onClick3(e4); - }); -}; -var getCssPadding = function(padding3) { - if (typeof padding3 === "number") { - return [padding3, padding3, padding3, padding3]; - } - var result = []; - switch (padding3.length) { - case 1: - result = [padding3[0], padding3[0], padding3[0], padding3[0]]; - break; - case 2: - result = [padding3[0], padding3[1], padding3[0], padding3[1]]; - break; - case 3: - result = [padding3[0], padding3[1], padding3[2], padding3[1]]; - break; - case 4: - result = padding3; - break; - default: - break; - } - return result; -}; -var getArrowCfg = function(arrowCfg, edge2) { - if (!arrowCfg) { - return; - } - if (typeof arrowCfg === "object" && (arrowCfg === null || arrowCfg === void 0 ? void 0 : arrowCfg.show) === false) { - return; - } - var cfg = typeof arrowCfg === "function" ? arrowCfg(edge2) : arrowCfg; - var _a6 = cfg.type, type2 = _a6 === void 0 ? "vee" : _a6, _b = cfg.d, d3 = _b === void 0 ? 0 : _b, _c = cfg.size, size14 = _c === void 0 ? 10 : _c; - return __assign18({ path: es_default6.Arrow[type2](size14, size14, d3), fill: "#ccc", d: d3 }, cfg); -}; -var bindStateEvents = function(graph, cfg) { - var _a6 = cfg !== null && cfg !== void 0 ? cfg : {}, _b = _a6.nodeCfg, nodeCfg = _b === void 0 ? {} : _b, _c = _a6.edgeCfg, edgeCfg = _c === void 0 ? {} : _c; - var nodeStateStyles = nodeCfg.nodeStateStyles; - var edgeStateStyles = edgeCfg.edgeStateStyles; - var statusCache = {}; - var updateArrowFill = function(item, endArrowFill, stratArrowFill) { - graph.updateItem(item, { - style: { - endArrow: !!endArrowFill && { - fill: endArrowFill - }, - startArrow: !!stratArrowFill && { - fill: stratArrowFill - } - } - }); - }; - var setState4 = function(item, name, status) { - var _a7, _b2, _c2; - status ? item.toFront() : item.toBack(); - var _d = (_a7 = item.getModel().style) !== null && _a7 !== void 0 ? _a7 : {}, endArrow = _d.endArrow, startArrow = _d.startArrow; - if (endArrow || startArrow) { - if (!statusCache[item.getID()]) { - var endArrowFill = (endArrow !== null && endArrow !== void 0 ? endArrow : {}).fill; - var startArrowFill = (startArrow !== null && startArrow !== void 0 ? startArrow : {}).fill; - var hoverStatus = (_c2 = (_b2 = item.getModel().style) === null || _b2 === void 0 ? void 0 : _b2[name]) === null || _c2 === void 0 ? void 0 : _c2.stroke; - statusCache[item.getID()] = [ - [hoverStatus !== null && hoverStatus !== void 0 ? hoverStatus : endArrowFill, endArrowFill], - [hoverStatus !== null && hoverStatus !== void 0 ? hoverStatus : startArrowFill, startArrowFill] - ]; - } - var fill = statusCache[item.getID()]; - updateArrowFill(item, endArrow && fill[0][status ? 0 : 1], startArrow && fill[1][status ? 0 : 1]); - } - graph.setItemState(item, name, status); - }; - var getRelationItems = function(currentItem, name, status, type2) { - var relationItems = type2 === "node" ? graph.findAll("edge", function(edge2) { - return edge2.getSource() === currentItem || edge2.getTarget() === currentItem; - }) : graph.findAll("node", function(node) { - return currentItem.getSource().get("id") === node.get("id") || currentItem.getTarget().get("id") === node.get("id"); - }); - var highlightItems = [currentItem].concat(relationItems); - highlightItems.forEach(function(item) { - setState4(item, name, status); - }); - }; - if (nodeStateStyles) { - graph.on("node:mouseenter", function(evt) { - var item = evt.item; - getRelationItems(item, "hover", true, "node"); - }); - graph.on("node:mouseleave", function(evt) { - var item = evt.item; - getRelationItems(item, "hover", false, "node"); - }); - } - if (edgeStateStyles) { - graph.on("edge:mouseenter", function(evt) { - var item = evt.item; - getRelationItems(item, "hover", true, "edge"); - }); - graph.on("edge:mouseleave", function(evt) { - var item = evt.item; - getRelationItems(item, "hover", false, "edge"); - }); - } -}; -var getStyle3 = function(source, cfg, item, current) { - if (typeof source === "function") { - return source(cfg, item, current) || {}; - } - return source || {}; -}; -var getCommonConfig = function(cfg, item, graph) { - if (typeof cfg === "function") { - return cfg(item, graph); - } - return cfg; -}; -var getSize4 = function(size14) { - if (Array.isArray(size14)) { - return size14; - } - return size14 ? [size14, size14] : defaultNodeSize; -}; -var DefaultStatusBarWidth = 4; -var getStatusBBox = function(cfg) { - if (!cfg) { - return [0, 0, 0, 0]; - } - var _a6 = cfg.size, size14 = _a6 === void 0 ? [] : _a6, _b = cfg.position, position2 = _b === void 0 ? "left" : _b; - var _c = getSize4(size14), width2 = _c[0], height = _c[1]; - var appendPadding = []; - switch (position2) { - case "top": - appendPadding.push(height !== null && height !== void 0 ? height : DefaultStatusBarWidth, 0, 0, 0); - break; - case "right": - appendPadding.push(0, width2 !== null && width2 !== void 0 ? width2 : DefaultStatusBarWidth, 0, 0); - break; - case "bottom": - appendPadding.push(0, 0, height !== null && height !== void 0 ? height : DefaultStatusBarWidth, 0); - break; - case "left": - appendPadding.push(0, 0, 0, width2 !== null && width2 !== void 0 ? width2 : DefaultStatusBarWidth); - break; - } - return appendPadding; -}; -var getStatusCfg = function(cfg, cardSize) { - var _a6 = cfg !== null && cfg !== void 0 ? cfg : {}, _b = _a6.size, size14 = _b === void 0 ? [] : _b, _c = _a6.position, position2 = _c === void 0 ? "left" : _c; - var _d = getSize4(size14), width2 = _d[0], height = _d[1]; - var cardWidth = cardSize[0], cardHeight = cardSize[1]; - var x6 = 0; - var y5 = 0; - var w4 = 0; - var h3 = 0; - switch (position2) { - case "top": - x6 = 0; - y5 = 0; - w4 = width2 !== null && width2 !== void 0 ? width2 : cardWidth; - h3 = height !== null && height !== void 0 ? height : DefaultStatusBarWidth; - break; - case "left": - x6 = 0; - y5 = 0; - w4 = width2 !== null && width2 !== void 0 ? width2 : DefaultStatusBarWidth; - h3 = height !== null && height !== void 0 ? height : cardHeight; - break; - case "right": - x6 = cardWidth - ((0, import_util594.isNumber)(width2) ? width2 : DefaultStatusBarWidth); - y5 = 0; - w4 = width2 !== null && width2 !== void 0 ? width2 : DefaultStatusBarWidth; - h3 = height !== null && height !== void 0 ? height : cardHeight; - break; - case "bottom": - x6 = 0; - y5 = cardHeight - ((0, import_util594.isNumber)(height) ? height : DefaultStatusBarWidth); - w4 = width2 !== null && width2 !== void 0 ? width2 : cardWidth; - h3 = height !== null && height !== void 0 ? height : DefaultStatusBarWidth; - break; - } - return { - x: x6, - y: y5, - width: w4, - height: h3 - }; -}; -var createMarker = function(cfg, group3, size14) { - var show = cfg.show, position2 = cfg.position, collapsed = cfg.collapsed, style = cfg.style; - if (show) { - group3.addShape("marker", { - attrs: __assign18(__assign18(__assign18({}, getMarkerPosition(position2, size14)), { r: 6, cursor: "pointer", symbol: collapsed ? es_default6.Marker.expand : es_default6.Marker.collapse, stroke: defaultCardStyle.stroke, lineWidth: 1, fill: "#fff" }), style), - defaultCollapsed: false, - name: "collapse-icon" - }); - } -}; -var cloneBesidesImg3 = function(obj) { - var clonedObj = {}; - Object.keys(obj).forEach(function(key1) { - var obj2 = obj[key1]; - if ((0, import_util594.isObject)(obj2)) { - var clonedObj2_1 = {}; - Object.keys(obj2).forEach(function(key2) { - var v3 = obj2[key2]; - if (key2 === "img" && !(0, import_util594.isString)(v3)) - return; - clonedObj2_1[key2] = (0, import_util594.clone)(v3); - }); - clonedObj[key1] = clonedObj2_1; - } else { - clonedObj[key1] = (0, import_util594.clone)(obj2); - } - }); - return clonedObj; -}; -var setStyles = function(container2, style) { - if (style === void 0) { - style = {}; - } - var keys6 = Object.keys(style); - keys6.forEach(function(key) { - container2.style[key] = style[key]; - }); -}; -var setTag4 = function(data3, level, parentId, path) { - var _a6; - if (level === void 0) { - level = 0; - } - if (parentId === void 0) { - parentId = ""; - } - if (path === void 0) { - path = ""; - } - var id = data3.id, _b = data3.children, children = _b === void 0 ? [] : _b; - return __assign18(__assign18((_a6 = {}, _a6["".concat(prefix, "_level")] = level, _a6["".concat(prefix, "_parentId")] = parentId, _a6["".concat(prefix, "_currentPath")] = path, _a6), data3), { children: children === null || children === void 0 ? void 0 : children.map(function(item, index2) { - return setTag4(item, level + 1, parentId ? "".concat(parentId, "-").concat(id) : id, "".concat(path, "-").concat(index2)); - }) }); -}; -var getLevelData = function(data3, level) { - var _a6 = data3.children, children = _a6 === void 0 ? [] : _a6, _b = data3.g_level, g_level = _b === void 0 ? 0 : _b; - if (level <= 0) { - return data3; - } - return __assign18(__assign18({}, data3), { children: g_level + 1 < level ? children === null || children === void 0 ? void 0 : children.map(function(item) { - return getLevelData(item, level); - }) : [] }); -}; -var setLevelData = function(graph, data3, currentPath) { - var currentData = graph.get("eventData").getData(); - var path = currentPath.split("-"); - path.shift(); - var current = currentData; - path.forEach(function(childrenIndex) { - current = current.children[Number(childrenIndex)]; - }); - current.children = data3; -}; -var getChildrenData = function(data3, currentPath) { - var path = currentPath.split("-"); - path.shift(); - var current = data3; - path.forEach(function(childrenIndex) { - current = current.children[Number(childrenIndex)]; - }); - if (!(current === null || current === void 0 ? void 0 : current.children)) { - return []; - } - return current.children.map(function(item) { - return __assign18(__assign18({}, item), { children: [] }); - }); -}; -var setParentChildren = function(parendData, currentPath, children) { - var path = currentPath.split("-"); - path.shift(); - var current = parendData; - path.forEach(function(childrenIndex) { - current = current.children[Number(childrenIndex)]; - }); - current.children = children; - return parendData; -}; -var setEllipsis = function(text, fontSize, contentWidth) { - if (fontSize === void 0) { - fontSize = 12; - } - if (contentWidth === void 0) { - contentWidth = 120; - } - var size14 = (0, import_util594.isNumber)(fontSize) ? fontSize : Number(fontSize.replace("px", "")); - var maxWords = Math.floor(contentWidth / size14); - if (text.length <= maxWords) { - return text; - } - return text.slice(0, maxWords - 1) + "..."; -}; -var createLoading = function() { - var container2 = document.createElement("div"); - container2.className = "".concat(prefix, "-antd-loading"); - var styles = { - position: "fixed", - left: "0", - top: "0", - width: "100vw", - height: "100vh", - display: "flex", - alignItems: "center", - justifyContent: "center", - background: "rgba(0,0,0, 0.25)", - color: "#fff", - fontSize: "16px", - zIndex: 999 - }; - var span = document.createElement("span"); - span.innerText = "loading..."; - setStyles(container2, styles); - container2.appendChild(span); - document.body.appendChild(container2); -}; -var closeLoading = function() { - var hideContainer = document.getElementsByClassName("".concat(prefix, "-antd-loading")); - Array.from(hideContainer).forEach(function(el) { - document.body.removeChild(el); - }); -}; - -// node_modules/@ant-design/graphs/es/hooks/useFullscreen.js -var useFullscreen = function(el) { - var _a6 = l3(false), fullscreen = _a6[0], setFullscreen = _a6[1]; - var handleFullScreenChange = function() { - if (!document.fullscreenElement) { - setFullscreen(false); - } - }; - var enterFullscreen = function() { - if (el && el.requestFullscreen) { - el.requestFullscreen().then(function() { - setFullscreen(true); - }).catch(function(err) { - Log2.error("requestFullscreen error: ", err); - }); - } - }; - var exitFullscreen = function() { - if (document.exitFullscreen) { - document.exitFullscreen().then(function() { - setFullscreen(false); - }).catch(function(err) { - Log2.error("exitFullscreen error: ", err); - }); - } - }; - var toggleFullscreen = function() { - if (!el) { - Log2.error("need dom"); - return; - } - if (!fullscreen) { - enterFullscreen(); - } else { - exitFullscreen(); - } - }; - y2(function() { - document.addEventListener("fullscreenchange", handleFullScreenChange, false); - return function() { - document.removeEventListener("fullscreenchange", handleFullScreenChange); - }; - }, []); - return [fullscreen, toggleFullscreen]; -}; -var useFullscreen_default = useFullscreen; - -// node_modules/@ant-design/graphs/es/components/toolbar/index.js -var Toolbar = function(_a6) { - var _b, _c; - var toolbarCfg = _a6.toolbarCfg, container2 = _a6.container, graph = _a6.graph; - var useGraph3 = s3(); - var width2 = s3(); - var height = s3(); - var zoom2 = s3(1); - var _d = toolbarCfg.zoomFactor, zoomFactor = _d === void 0 ? 0.25 : _d, renderIcon = toolbarCfg.renderIcon; - var _e = useFullscreen_default(container2), fullscreen = _e[0], toggleFullscreen = _e[1]; - var getWindow = function() { - return [window.outerWidth, window.outerHeight]; - }; - var toggleWidth = function(f3) { - var _a7; - var size14 = f3 ? getWindow() : [width2.current, height.current]; - (_a7 = useGraph3.current) === null || _a7 === void 0 ? void 0 : _a7.changeSize(size14[0], size14[1]); - }; - var getCenter2 = function() { - if (!container2) { - return { - x: 0, - y: 0 - }; - } - return { - x: container2.clientWidth / 2, - y: container2.clientHeight / 2 - }; - }; - var zoomIn2 = function() { - var _a7; - (_a7 = useGraph3.current) === null || _a7 === void 0 ? void 0 : _a7.zoom(Math.min(zoom2.current + zoomFactor, 5), getCenter2()); - }; - var zoomOut2 = function() { - var _a7; - (_a7 = useGraph3.current) === null || _a7 === void 0 ? void 0 : _a7.zoom(Math.max(zoom2.current - zoomFactor, 0.25), getCenter2()); - }; - y2(function() { - if (graph) { - useGraph3.current = graph; - width2.current = container2 === null || container2 === void 0 ? void 0 : container2.clientWidth; - height.current = container2 === null || container2 === void 0 ? void 0 : container2.clientHeight; - } - }, [graph]); - var setToggleFullscreen = function() { - toggleFullscreen(); - toggleWidth(!document.fullscreenElement); - }; - if (renderIcon) { - if (!((_c = (_b = renderIcon.toString().match(/\(([^)]*)\)/)) === null || _b === void 0 ? void 0 : _b[1]) === null || _c === void 0 ? void 0 : _c.includes("{"))) { - Log2.warn("renderIcon \u7528\u6CD5\u5DF2\u7ECF\u5347\u7EA7\uFF0CrenderIcon(zoomIn, xx) => renderIcon({zoomIn, xx})"); - } - return renderIcon({ - zoomIn: zoomIn2, - zoomOut: zoomOut2, - toggleFullscreen: setToggleFullscreen, - fullscreen - }); - } - return compat_module_default.createElement(d, null, !fullscreen ? compat_module_default.createElement("span", { style: { - cursor: "pointer" - }, onClick: setToggleFullscreen }, "\u2610") : compat_module_default.createElement("span", { style: { - cursor: "pointer" - }, onClick: setToggleFullscreen }, "\u2684"), compat_module_default.createElement("span", { style: { - cursor: "pointer" - }, onClick: zoomIn2 }, "+"), compat_module_default.createElement("span", { style: { - cursor: "pointer" - }, onClick: zoomOut2 }, "-")); -}; -var createToolbar = function(_a6) { - var _b; - var graph = _a6.graph, container2 = _a6.container, toolbarCfg = _a6.toolbarCfg; - var style = toolbarCfg.style, show = toolbarCfg.show, className = toolbarCfg.className; - var toolbarId = "".concat(graph.get("id"), "-toolbar"); - var exist = document.querySelector("#".concat(toolbarId)); - if (exist) { - (_b = exist.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(exist); - } - if (!show) { - return; - } - var defaultStyle = { - position: "absolute", - right: "12px", - top: "12px", - display: "flex", - flexDirection: "column", - padding: "6px", - borderRadius: "2px", - fontSize: "24px", - textAlign: "center", - lineHeight: "24px", - color: "rgba(0,0,0,.65)", - backgroundColor: "#fff", - boxShadow: "0 0 3px #ccc" - }; - var mountPoint = document.createElement("div"); - mountPoint.id = toolbarId; - mountPoint.className = className !== null && className !== void 0 ? className : "charts-toolbar"; - setStyles(mountPoint, defaultStyle); - setStyles(mountPoint, style); - compat_module_default.render(compat_module_default.createElement(Toolbar, { graph, container: container2, toolbarCfg }), mountPoint); - container2.appendChild(mountPoint); -}; - -// node_modules/@ant-design/graphs/es/hooks/useGraphs.js -var __assign19 = function() { - __assign19 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign19.apply(this, arguments); -}; -var __rest42 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -function useGraph(graphClass, config, extra) { - if (extra === void 0) { - extra = {}; - } - var container2 = s3(null); - var graphRef = s3(); - var graphOptions = s3(); - var graphData = s3(); - var data3 = config.data, width2 = config.width, height = config.height, layout6 = config.layout, minimapCfg = config.minimapCfg, behaviors2 = config.behaviors, fitCenter = config.fitCenter, nodeCfg = config.nodeCfg, edgeCfg = config.edgeCfg, markerCfg = config.markerCfg, level = config.level, toolbarCfg = config.toolbarCfg; - var graph = graphRef.current; - var setEdgesState = function(edges) { - edges.forEach(function(edge2) { - var _a6, _b; - var _c = edge2.getModel(), source = _c.source, target = _c.target; - var sourceVisible = (_a6 = graph === null || graph === void 0 ? void 0 : graph.findById(source)) === null || _a6 === void 0 ? void 0 : _a6.get("visible"); - var targetVisible = (_b = graph === null || graph === void 0 ? void 0 : graph.findById(target)) === null || _b === void 0 ? void 0 : _b.get("visible"); - if (sourceVisible === false || targetVisible === false) { - edge2.changeVisibility(false); - } - }); - }; - var changeData = function() { - var _a6; - if (!graph) { - return; - } - var currentData = data3; - if (level) { - currentData = setTag4(data3); - } - graph.changeData(level ? getLevelData(currentData, level) : data3); - (_a6 = graph.get("eventData")) === null || _a6 === void 0 ? void 0 : _a6.setData(currentData); - setEdgesState(graph.getEdges()); - if (fitCenter) { - graph.fitCenter(); - } - }; - var updateLayout = function() { - graph === null || graph === void 0 ? void 0 : graph.updateLayout(layout6); - if (fitCenter) { - graph === null || graph === void 0 ? void 0 : graph.fitCenter(); - } - }; - var updateNodes = function() { - if (!graph) { - return; - } - var _a6 = nodeCfg !== null && nodeCfg !== void 0 ? nodeCfg : {}, nodeType = _a6.type, nodeAnchorPoints = _a6.anchorPoints, nodeStyle = _a6.style, nodeLabelCfg = _a6.title; - graph.getNodes().forEach(function(node) { - graph.updateItem(node, { - nodeCfg, - markerCfg, - type: nodeType, - style: nodeStyle, - anchorPoints: nodeAnchorPoints, - labelCfg: nodeLabelCfg - }); - }); - }; - var updateEdges = function() { - if (!graph) { - return; - } - var _a6 = edgeCfg !== null && edgeCfg !== void 0 ? edgeCfg : {}, edgeType = _a6.type, edgeStyle = _a6.style, startArrowCfg = _a6.startArrow, endArrowCfg = _a6.endArrow, labelCfg = _a6.label; - graph.getEdges().forEach(function(edge2) { - if (edgeType === "fund-line") { - graph.updateItem(edge2, { - edgeCfg - }); - } else { - var edgeCfgModel = edge2.getModel(); - var startArrow = getArrowCfg(startArrowCfg, edgeCfgModel); - var endArrow = getArrowCfg(endArrowCfg, edgeCfgModel); - var _a7 = labelCfg !== null && labelCfg !== void 0 ? labelCfg : {}, style = _a7.style, content = _a7.content; - graph.updateItem(edge2, { - type: edgeType, - label: getCommonConfig(content, edgeCfgModel, graph), - labelCfg: { - style: getCommonConfig(style, edgeCfgModel, graph) - }, - style: __assign19({ stroke: "#ccc", startArrow, endArrow }, typeof edgeStyle === "function" ? edgeStyle(edgeCfgModel, graph) : edgeStyle) - }); - } - }); - }; - var updateMarker = function() { - if (!graph) { - return; - } - graph.getNodes().forEach(function(node) { - var _a6 = (typeof markerCfg === "function" ? markerCfg(node.getModel(), node.get("group")) : markerCfg).position, position2 = _a6 === void 0 ? "right" : _a6; - var _b = node.getBBox(), width3 = _b.width, height2 = _b.height; - var markerShape = node.get("group").get("children").find(function(item) { - return item.get("name") === "collapse-icon"; - }); - if (markerShape) { - markerShape === null || markerShape === void 0 ? void 0 : markerShape.attr(__assign19({}, getMarkerPosition(position2, [width3, height2]))); - } - }); - }; - var getEdgeStateStyles = function(edgeStateStyles) { - var _a6 = extra.name, name = _a6 === void 0 ? "" : _a6; - if (name !== "FundFlowGraph") { - return edgeStateStyles; - } - if (!edgeStateStyles) { - return; - } - var _b = edgeStateStyles.hover, hover = _b === void 0 ? {} : _b; - var endArrow = hover.endArrow, startArrow = hover.startArrow; - if (!endArrow && !startArrow) { - return edgeStateStyles; - } - return { - hover: __assign19(__assign19({}, hover), { endArrow: endArrow ? getArrowCfg(endArrow) : false, startArrow: startArrow ? getArrowCfg(startArrow) : false }) - }; - }; - y2(function() { - if (graph && !graph.destroyed) { - if ((0, import_util595.isEqual)(data3, graphData.current)) { - return; - } - graphData.current = deepClone2(data3); - changeData(); - } - }, [data3]); - y2(function() { - var _a6, _b, _c, _d, _e; - if (graph && !graph.destroyed) { - if ((0, import_util595.isEqual)(config, graphOptions.current)) { - return; - } - if (!(0, import_util595.isEqual)(layout6, (_a6 = graphOptions.current) === null || _a6 === void 0 ? void 0 : _a6.layout)) { - updateLayout(); - } - if (!(0, import_util595.isEqual)(minimapCfg, (_b = graphOptions.current) === null || _b === void 0 ? void 0 : _b.minimapCfg)) { - processMinimap(minimapCfg, graph); - } - if (!(0, import_util595.isEqual)(nodeCfg, (_c = graphOptions.current) === null || _c === void 0 ? void 0 : _c.nodeCfg)) { - updateNodes(); - } - if (!(0, import_util595.isEqual)(edgeCfg, (_d = graphOptions.current) === null || _d === void 0 ? void 0 : _d.edgeCfg)) { - updateEdges(); - } - if (!(0, import_util595.isEqual)(markerCfg, (_e = graphOptions.current) === null || _e === void 0 ? void 0 : _e.markerCfg)) { - updateMarker(); - } - graphOptions.current = config; - } - }, [config]); - y2(function() { - if (graph && !graph.destroyed) { - var graphSize = getGraphSize(width2, height, container2); - graph.changeSize(graphSize[0], graphSize[1]); - } - }, [container2, width2, height]); - y2(function() { - if (graph && !graph.destroyed) { - var defaultMode = graph.get("modes").default; - var removingBehaviors_1 = []; - defaultMode.forEach(function(be) { - if ((0, import_util595.isObject)(be)) { - removingBehaviors_1.push(be.type); - } else if ((0, import_util595.isString)(be)) { - removingBehaviors_1.push(be); - } - }); - graph.removeBehaviors(removingBehaviors_1, "default"); - graph.addBehaviors(behaviors2, "default"); - } - }, [behaviors2]); - y2(function() { - if (container2.current && graphClass) { - var _a6 = extra.name, name_1 = _a6 === void 0 ? "" : _a6; - var graphSize = getGraphSize(width2, height, container2); - var plugins = []; - var nodeCfg_1 = config.nodeCfg, edgeCfg_1 = config.edgeCfg, behaviors_1 = config.behaviors, layout_1 = config.layout, animate = config.animate, autoFit = config.autoFit, fitCenter_1 = config.fitCenter, onReady = config.onReady, tooltipCfg = config.tooltipCfg; - var _b = nodeCfg_1 !== null && nodeCfg_1 !== void 0 ? nodeCfg_1 : {}, nodeType_1 = _b.type, nodeSize = _b.size, nodeAnchorPoints = _b.anchorPoints, nodeStateStyles = _b.nodeStateStyles, nodeStyle_1 = _b.style, nodeLabelCfg_1 = _b.title, linkCenter = _b.linkCenter, getChildren = _b.getChildren; - var _c = edgeCfg_1 !== null && edgeCfg_1 !== void 0 ? edgeCfg_1 : {}, edgeType = _c.type, edgeStyle_1 = _c.style, startArrowCfg_1 = _c.startArrow, endArrowCfg_1 = _c.endArrow, labelCfg_1 = _c.label, edgeStateStyles = _c.edgeStateStyles; - if (tooltipCfg && (0, import_util595.isFunction)(tooltipCfg.customContent)) { - var customContent_1 = tooltipCfg.customContent, rest = __rest42(tooltipCfg, ["customContent"]); - var createNode_1 = function(children) { - var mountPoint = document.createElement("div"); - mountPoint.className = "g6-tooltip"; - compat_module_default.render(children, mountPoint); - return mountPoint; - }; - var tooltipPlugin = new es_default6.Tooltip(__assign19(__assign19({ offsetX: 10, offsetY: 20, itemTypes: ["node"] }, rest), { getContent: function(e4) { - return createNode_1(customContent_1(e4.item.getModel())); - } })); - plugins.push(tooltipPlugin); - } - graphRef.current = new es_default6[graphClass]({ - container: container2.current, - width: graphSize[0], - height: graphSize[1], - animate, - linkCenter, - modes: { - default: behaviors_1 - }, - defaultNode: { - type: nodeType_1, - size: nodeSize, - anchorPoints: nodeAnchorPoints, - nodeCfg: nodeCfg_1 - }, - defaultEdge: { - type: edgeType, - edgeCfg: edgeCfg_1, - labelCfg: labelCfg_1 === null || labelCfg_1 === void 0 ? void 0 : labelCfg_1.style - }, - nodeStateStyles, - edgeStateStyles: getEdgeStateStyles(edgeStateStyles), - layout: layout_1, - fitView: autoFit, - fitCenter: fitCenter_1, - plugins - }); - var graphId = getGraphId(graphRef.current); - var graph_1 = graphRef.current; - graph_1.set("id", graphId); - var getLabel_1 = function(value2) { - if ((0, import_util595.isString)(value2)) { - return value2; - } - if (name_1 === "FundFlowGraph") { - return value2 === null || value2 === void 0 ? void 0 : value2.text; - } - return value2 === null || value2 === void 0 ? void 0 : value2.title; - }; - var customNode_1 = ["fund-card", "indicator-card"]; - graph_1.node(function(node) { - if (customNode_1.includes(nodeType_1) || name_1 === "OrganizationGraph") { - node.markerCfg = markerCfg; - return {}; - } - var style = (nodeLabelCfg_1 !== null && nodeLabelCfg_1 !== void 0 ? nodeLabelCfg_1 : {}).style; - return { - label: getLabel_1(node.value), - labelCfg: { - style: getCommonConfig(style, node, graph_1) - }, - style: __assign19({ stroke: "#ccc" }, typeof nodeStyle_1 === "function" ? nodeStyle_1(node, graph_1) : nodeStyle_1) - }; - }); - var getEdgeLabel_1 = function(edge2) { - var content = (labelCfg_1 !== null && labelCfg_1 !== void 0 ? labelCfg_1 : {}).content; - if (["DecompositionTreeGraph", "OrganizationGraph", "RadialTreeGraph"].includes(name_1)) { - return getCommonConfig(content, edge2, graph_1); - } - if (name_1 === "FundFlowGraph") { - var value2 = edge2.value; - return typeof value2 === "object" ? value2 === null || value2 === void 0 ? void 0 : value2.text : value2; - } - return edge2.value; - }; - if (edgeType !== "fund-line") { - graph_1.edge(function(edge2) { - var startArrow = getArrowCfg(startArrowCfg_1, edge2); - var endArrow = getArrowCfg(endArrowCfg_1, edge2); - var style = (labelCfg_1 !== null && labelCfg_1 !== void 0 ? labelCfg_1 : {}).style; - return { - label: getEdgeLabel_1(edge2), - labelCfg: { - style: getCommonConfig(style, edge2, graph_1) - }, - style: __assign19({ stroke: "#ccc", startArrow, endArrow }, typeof edgeStyle_1 === "function" ? edgeStyle_1(edge2, graph_1) : edgeStyle_1) - }; - }); - } - processMinimap(minimapCfg, graph_1); - bindStateEvents(graph_1, config); - if (markerCfg) { - var sourceGraph = ["FlowAnalysisGraph", "FundFlowGraph"]; - sourceGraph.includes(name_1) ? bindSourceMapCollapseEvents(graph_1) : bindDefaultEvents(graph_1, level, getChildren); - } - renderGraph(graph_1, data3, level); - if (fitCenter_1) { - graph_1.fitCenter(); - } - if (onReady) { - onReady(graph_1); - } - } - }, []); - y2(function() { - if (graphRef.current && toolbarCfg) { - createToolbar({ graph: graphRef.current, container: container2.current, toolbarCfg }); - } - }, [graphRef, toolbarCfg]); - y2(function() { - return function() { - if ((graph === null || graph === void 0 ? void 0 : graph.current) && !graph.current.destroyed) { - graph.current.destroy(); - } - }; - }, []); - return { - container: container2 - }; -} - -// node_modules/@ant-design/graphs/es/hooks/useProps.js -var __assign20 = function() { - __assign20 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign20.apply(this, arguments); -}; -function useProps(props, defaultProps13) { - var cloneProps = deepClone2(props); - var mergeProps = A2(function(p4, defaultProps14) { - var config = __assign20({}, defaultProps14); - var propsKeys = Object.keys(p4); - propsKeys.forEach(function(key) { - if (getType(p4[key]) === "Object") { - config[key] = __assign20(__assign20({}, defaultProps14[key]), p4[key]); - } else { - config[key] = p4[key]; - } - }); - return config; - }, [props, defaultProps13]); - var uProps = mergeProps(cloneProps, defaultProps13); - return { - uProps - }; -} - -// node_modules/@ant-design/graphs/es/components/organizationGraph/customItem.js -var __assign21 = function() { - __assign21 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign21.apply(this, arguments); -}; -var __spreadArray4 = function(to, from, pack2) { - if (pack2 || arguments.length === 2) - for (var i4 = 0, l4 = from.length, ar; i4 < l4; i4++) { - if (ar || !(i4 in from)) { - if (!ar) - ar = Array.prototype.slice.call(from, 0, i4); - ar[i4] = from[i4]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -}; -var registerOrganizationCardNode = function() { - var defaultIconStyle = { - width: 12, - height: 12 - }; - es_default6.registerNode("organization-card", { - draw: function(cfg, group3) { - var _a6, _b, _c; - if (cfg === void 0) { - cfg = {}; - } - var _d = cfg.value, originValue = _d === void 0 ? {} : _d, nodeCfg = cfg.nodeCfg, markerCfg = cfg.markerCfg; - var value2 = __assign21({}, originValue); - var isOld = false; - if (value2.text) { - isOld = true; - value2.name = value2.text; - } - if (value2.value) { - isOld = true; - value2.title = value2.value; - } - var _e = nodeCfg, style = _e.style, _f = _e.padding, padding3 = _f === void 0 ? 0 : _f, _g = _e.label, label17 = _g === void 0 ? {} : _g, autoWidth = _e.autoWidth, customContent = _e.customContent; - var labelStyle = label17.style; - var paddingArray = getCssPadding(padding3); - var size14 = (cfg === null || cfg === void 0 ? void 0 : cfg.size) || [100, 30]; - if (typeof size14 === "number") - size14 = [size14, size14]; - var height = 0; - var contentWidth = size14[0] - paddingArray[1] - paddingArray[3]; - var cardStyle = getStyle3(style, cfg, group3); - var shape = group3.addShape("rect", { - attrs: __assign21(__assign21({ x: 0, y: 0, width: size14[0], height: size14[1] }, defaultCardStyle), cardStyle), - name: "main-box", - draggable: true - }); - if (value2) { - var getKey_1 = function(key) { - if (isOld) { - var keys6 = { - name: "text", - title: "value" - }; - return keys6[key]; - } - return key; - }; - height += paddingArray[0]; - var createRowItems_1 = function(item, contentWidth2, startX, index2) { - if (index2 === void 0) { - index2 = 0; - } - var iconWidth = 0; - var rowHeight = []; - var keys6 = ["icon", "name", "title"]; - var getXY = function(type2, layoutCfg) { - var _a7 = layoutCfg.fontSize, fontSize = _a7 === void 0 ? 12 : _a7; - var x6 = 0; - var y5 = 0; - var offsetX = autoWidth ? iconWidth ? iconWidth + paddingArray[3] : iconWidth : (contentWidth2 + iconWidth) / 2; - switch (type2) { - case "icon": - x6 = startX; - y5 = height; - break; - case "name": - x6 = startX + offsetX; - y5 = item.value ? paddingArray[0] : (size14[1] - fontSize) / 2; - break; - case "title": - x6 = startX + offsetX; - y5 = item.text ? paddingArray[0] + rowHeight[1] + defaultMargin : (size14[1] - fontSize) / 2; - break; - default: - break; - } - return { x: x6, y: y5 }; - }; - keys6.forEach(function(key, keyIndex) { - var isIcon = key.startsWith("icon"); - var shapeStyle = getStyle3(labelStyle, cfg, group3, getKey_1(key)); - if (key === "icon" && item[key]) { - iconWidth = shapeStyle.width || 32; - } - var keyShape = group3.addShape(isIcon ? "image" : "text", { - attrs: __assign21(__assign21(__assign21(__assign21({ textBaseline: "top", textAlign: autoWidth ? "start" : "center" }, getXY(key, shapeStyle)), { text: item[key], img: item[key] }), isIcon ? defaultIconStyle : defaultLabelStyle), shapeStyle), - name: "".concat(key, "-").concat(index2, "-").concat(keyIndex) - }); - rowHeight.push(keyShape.getBBox().height); - }); - return rowHeight; - }; - var createItems = function(item, index2) { - var _a7; - if (index2 === void 0) { - index2 = 0; - } - var itemsHeight = []; - if (customContent) { - itemsHeight.push((_a7 = customContent(item, group3, { - startX: paddingArray[3], - startY: height, - width: contentWidth - })) !== null && _a7 !== void 0 ? _a7 : 0); - } else { - itemsHeight.push.apply(itemsHeight, createRowItems_1(item, contentWidth, paddingArray[3], index2)); - } - height += Math.max.apply(Math, itemsHeight); - }; - createItems(value2); - } - shape === null || shape === void 0 ? void 0 : shape.attr("height", Math.max(height + paddingArray[2], size14[1])); - if (autoWidth) { - var maxX = Math.max.apply(Math, __spreadArray4([size14[0]], (_a6 = group3 === null || group3 === void 0 ? void 0 : group3.getChildren()) === null || _a6 === void 0 ? void 0 : _a6.map(function(childrenShape) { - return (childrenShape.getBBox().maxX || 0) + paddingArray[1]; - }), false)); - shape === null || shape === void 0 ? void 0 : shape.attr("width", maxX); - } - if (markerCfg) { - var stateCollapsed = ((_c = (_b = group3 === null || group3 === void 0 ? void 0 : group3.get("item")) === null || _b === void 0 ? void 0 : _b.getModel()) !== null && _c !== void 0 ? _c : {}).collapsed; - var _h = shape.getBBox(), shapeWidth = _h.width, shapeHeight = _h.height; - var _j = typeof markerCfg === "function" ? markerCfg(cfg, group3) : markerCfg, show = _j.show, _k = _j.position, position2 = _k === void 0 ? "right" : _k, collapsed = _j.collapsed, markerStyle = _j.style; - createMarker({ - show, - position: position2, - collapsed: stateCollapsed !== null && stateCollapsed !== void 0 ? stateCollapsed : collapsed, - style: markerStyle - }, group3, [shapeWidth, shapeHeight]); - shape.attr("defaultCollapsed", collapsed); - } - return shape; - }, - update: void 0 - }, "single-node"); -}; - -// node_modules/@ant-design/graphs/es/components/organizationGraph/index.js -var __rest43 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -registerOrganizationCardNode(); -var defaultNodeStyle2 = { - fill: "#91d5ff", - stroke: "#40a9ff", - radius: 2 -}; -var defaultLayout2 = { - type: "compactBox", - direction: "TB", - getId: function getId(d3) { - return d3.id; - }, - getHeight: function getHeight3() { - return 16; - }, - getWidth: function getWidth() { - return 16; - }, - getVGap: function getVGap() { - return 40; - }, - getHGap: function getHGap() { - return 70; - } -}; -var defaultProps = { - nodeCfg: { - type: "organization-card", - size: [100, 44], - style: defaultNodeStyle2, - padding: 6, - anchorPoints: [ - [0.5, 0], - [0.5, 1] - ], - nodeStateStyles: defaultStateStyles, - label: { - style: function(cfg, group3, type2) { - var styles = { - icon: { - width: 32, - height: 32 - }, - value: { - fill: "#fff" - }, - text: { - fill: "#000" - } - }; - return type2 ? styles[type2] : {}; - } - } - }, - edgeCfg: { - type: "polyline", - endArrow: { - type: "triangle", - fill: "#91d5ff" - }, - edgeStateStyles: defaultStateStyles, - style: { - stroke: "#91d5ff" - } - }, - behaviors: ["zoom-canvas", "drag-canvas"], - layout: defaultLayout2, - animate: true, - markerPosition: "right", - autoFit: true, - fitCenter: true, - style: { - position: "relative", - height: "inherit", - backgroundColor: "#fff" - } -}; -var OrganizationGraph = function(props) { - var uProps = useProps(props, defaultProps).uProps; - var className = uProps.className, style = uProps.style, loading = uProps.loading, loadingTemplate = uProps.loadingTemplate, errorTemplate = uProps.errorTemplate, rest = __rest43(uProps, ["className", "style", "loading", "loadingTemplate", "errorTemplate"]); - var container2 = useGraph("TreeGraph", rest, { name: "OrganizationGraph" }).container; - return compat_module_default.createElement(errorBoundary_default2, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default2, { loadingTemplate }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}; -var organizationGraph_default = OrganizationGraph; - -// node_modules/@ant-design/graphs/es/components/radialTreeGraph/index.js -var __rest44 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -var defaultLayout3 = { - type: "dendrogram", - direction: "LR", - nodeSep: 20, - rankSep: 100, - radial: true -}; -var defaultProps2 = { - nodeCfg: { - type: "circle", - size: 30, - anchorPoints: defaultFlowGraphAnchorPoints, - linkCenter: true, - nodeStateStyles: defaultStateStyles, - style: defaultNodeStyle - }, - edgeCfg: { - type: "line", - edgeStateStyles: defaultStateStyles - }, - behaviors: ["zoom-canvas", "drag-canvas"], - layout: defaultLayout3, - animate: true, - markerPosition: "right", - autoFit: true, - fitCenter: true, - style: { - position: "relative", - height: "inherit", - backgroundColor: "#fff" - } -}; -var RadialTreeGraph = function(props) { - var uProps = useProps(props, defaultProps2).uProps; - var className = uProps.className, style = uProps.style, loading = uProps.loading, loadingTemplate = uProps.loadingTemplate, errorTemplate = uProps.errorTemplate, rest = __rest44(uProps, ["className", "style", "loading", "loadingTemplate", "errorTemplate"]); - var container2 = useGraph("TreeGraph", rest, { name: "RadialTreeGraph" }).container; - return compat_module_default.createElement(errorBoundary_default2, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default2, { loadingTemplate }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}; -var radialTreeGraph_default = RadialTreeGraph; - -// node_modules/@ant-design/graphs/es/components/flowAnalysisGraph/customItem.js -var import_util596 = __toModule(require_lib()); -var __assign22 = function() { - __assign22 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign22.apply(this, arguments); -}; -var __spreadArray5 = function(to, from, pack2) { - if (pack2 || arguments.length === 2) - for (var i4 = 0, l4 = from.length, ar; i4 < l4; i4++) { - if (ar || !(i4 in from)) { - if (!ar) - ar = Array.prototype.slice.call(from, 0, i4); - ar[i4] = from[i4]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -}; -var registerIndicatorCardNode = function() { - var defaultTitleLabelStyle = { - fill: "#fff", - fontSize: 12 - }; - var defaultTitleRectStyle = { - fill: "#40a9ff", - radius: [2, 2, 0, 0] - }; - var defaultIconStyle = { - width: 12, - height: 12 - }; - var ARROWS2 = ["startArrow", "endArrow"]; - var SHAPE_DEFAULT_ATTRS2 = { - lineWidth: 1, - stroke: void 0, - fill: void 0, - lineAppendWidth: 1, - opacity: void 0, - strokeOpacity: void 0, - fillOpacity: void 0, - x: 0, - y: 0, - r: 10, - width: 20, - height: 20, - shadowColor: void 0, - shadowBlur: 0, - shadowOffsetX: 0, - shadowOffsetY: 0 - }; - var PATH_SHAPE_DEFAULT_ATTRS2 = { - lineWidth: 1, - stroke: "#000", - lineDash: void 0, - startArrow: false, - endArrow: false, - opacity: void 0, - strokeOpacity: void 0, - fillOpacity: void 0, - shadowColor: void 0, - shadowBlur: 0, - shadowOffsetX: 0, - shadowOffsetY: 0 - }; - var SHAPES_DEFAULT_ATTRS2 = { - edge: PATH_SHAPE_DEFAULT_ATTRS2, - node: SHAPE_DEFAULT_ATTRS2 - }; - es_default6.registerNode("indicator-card", { - draw: function(cfg, group3) { - var _a6, _b, _c; - if (cfg === void 0) { - cfg = {}; - } - var _d = cfg.value, value2 = _d === void 0 ? {} : _d, nodeCfg = cfg.nodeCfg, markerCfg = cfg.markerCfg; - var _e = nodeCfg, titleCfg = _e.title, itemsCfg = _e.items, _f = _e.label, label17 = _f === void 0 ? {} : _f, style = _e.style, _g = _e.padding, padding3 = _g === void 0 ? 0 : _g, badge = _e.badge, autoWidth = _e.autoWidth, customContent = _e.customContent; - var appendPadding = getStatusBBox(badge); - var labelStyle = label17.style; - var cardPadding = getCssPadding(padding3); - var paddingArray = cardPadding.map(function(item, index2) { - return item + appendPadding[index2]; - }); - var _h = titleCfg !== null && titleCfg !== void 0 ? titleCfg : {}, titleStyle = _h.style, titleContainerStyle = _h.containerStyle, _j = _h.autoEllipsis, autoEllipsis = _j === void 0 ? true : _j; - var _k = itemsCfg !== null && itemsCfg !== void 0 ? itemsCfg : {}, itemStyle = _k.style, itemContainerStyle = _k.containerStyle, layout6 = _k.layout, _l = _k.itemSpacing, itemSpacing = _l === void 0 ? 4 : _l, sort2 = _k.sort, _m = _k.padding, itemPadding = _m === void 0 ? [6, 0, 0] : _m; - var itemPaddingArray = getCssPadding(itemPadding); - var _o = value2, title = _o.title, items = _o.items; - var size14 = (cfg === null || cfg === void 0 ? void 0 : cfg.size) || [100, 30]; - if (typeof size14 === "number") - size14 = [size14, size14]; - var height = 0; - var shapeWidth = size14[0]; - var contentWidth = shapeWidth - paddingArray[1] - paddingArray[3]; - var cardStyle = getStyle3(style, cfg, group3); - var shape = group3.addShape("rect", { - attrs: __assign22(__assign22({ x: 0, y: 0, width: size14[0], height: size14[1] }, defaultCardStyle), cardStyle), - name: "main-box", - draggable: true - }); - var titleTextShape; - var itemShape; - var titleShape; - if (title) { - titleShape = group3.addShape("rect", { - attrs: __assign22(__assign22({ x: 0, y: 0, width: size14[0], height: 0 }, defaultTitleRectStyle), getStyle3(titleContainerStyle, cfg, group3)), - name: "title-rect", - draggable: true - }); - var textStyle2 = __assign22(__assign22({}, defaultTitleLabelStyle), getStyle3(titleStyle, cfg, group3)); - titleTextShape = group3.addShape("text", { - attrs: __assign22({ x: paddingArray[3], y: paddingArray[0], textBaseline: "top", text: autoEllipsis && !autoWidth ? setEllipsis(title, textStyle2 === null || textStyle2 === void 0 ? void 0 : textStyle2.fontSize, contentWidth) : title }, textStyle2), - name: "title" - }); - var titleHeight_1 = (titleTextShape ? titleTextShape.getBBox() : { height: size14[1] / 2 }).height; - titleShape === null || titleShape === void 0 ? void 0 : titleShape.attr("height", titleHeight_1 + paddingArray[0] + paddingArray[2]); - height += titleShape.getBBox().height; - } - if (items) { - if (!titleShape) { - height += paddingArray[0]; - } - itemShape = group3.addShape("rect", { - attrs: __assign22({ x: paddingArray[3], y: height, width: contentWidth, height: 0 }, getStyle3(itemContainerStyle, cfg, group3)), - name: "item-box", - draggable: true - }); - height += itemPaddingArray[0]; - var itemContentWidth_1 = contentWidth - itemPaddingArray[1] - itemPaddingArray[3]; - var isArray_1 = Array.isArray(items); - var createRowItems_1 = function(item, contentWidth2, startX, index2) { - if (index2 === void 0) { - index2 = 0; - } - var rowHeight = []; - var valueShapeWidth = 0; - var keys6 = sort2 ? Object.keys(item) : ["text", "value", "icon"]; - keys6.forEach(function(key, keyIndex) { - var x6; - var isIcon = key.startsWith("icon"); - if (sort2 || layout6 === "flex") { - x6 = keyIndex * contentWidth2 / keys6.length; - } else if (layout6 === "follow") { - x6 = valueShapeWidth; - } else { - x6 = key === "text" ? 0 : contentWidth2 / 2; - x6 += isIcon ? valueShapeWidth : 0; - } - var keyShape = group3.addShape(isIcon ? "image" : "text", { - attrs: __assign22(__assign22({ textBaseline: "top", x: startX + x6, y: height, text: item[key], img: item[key] }, isIcon ? defaultIconStyle : defaultLabelStyle), getStyle3(itemStyle || labelStyle, cfg, group3, key)), - name: "".concat(key, "-").concat(index2, "-").concat(keyIndex) - }); - if (key === "value" || layout6 === "follow") { - valueShapeWidth += keyShape.getBBox().width; - valueShapeWidth += layout6 === "follow" ? itemSpacing : 0; - } - rowHeight.push(keyShape.getBBox().height); - }); - return rowHeight; - }; - var createItems_1 = function(item, index2) { - var _a7; - if (index2 === void 0) { - index2 = 0; - } - var itemsHeight = []; - if (customContent) { - itemsHeight.push((_a7 = customContent(item, group3, { - startX: paddingArray[3] + itemPaddingArray[3], - startY: height, - width: itemContentWidth_1 - })) !== null && _a7 !== void 0 ? _a7 : 0); - } else { - itemsHeight.push.apply(itemsHeight, createRowItems_1(item, itemContentWidth_1, paddingArray[3] + itemPaddingArray[3], index2)); - } - height += Math.max.apply(Math, itemsHeight); - if (isArray_1 && index2 !== items.length - 1) { - height += defaultMargin; - } - }; - if (Array.isArray(items)) { - items.forEach(function(item, index2) { - createItems_1(item, index2); - }); - } else { - createItems_1(items); - } - } - var titleHeight = (titleShape === null || titleShape === void 0 ? void 0 : titleShape.getBBox().height) || 0; - itemShape === null || itemShape === void 0 ? void 0 : itemShape.attr("height", Math.max(height - titleHeight + itemPaddingArray[2], size14[1])); - var itemHeight = (itemShape === null || itemShape === void 0 ? void 0 : itemShape.getBBox().height) || 0; - var shapeHeight = items ? (titleHeight || paddingArray[0]) + itemHeight + paddingArray[2] : titleHeight + itemHeight; - shape === null || shape === void 0 ? void 0 : shape.attr("height", shapeHeight); - if (autoWidth) { - var maxX = Math.max.apply(Math, __spreadArray5([shapeWidth], (_a6 = group3 === null || group3 === void 0 ? void 0 : group3.getChildren()) === null || _a6 === void 0 ? void 0 : _a6.map(function(childrenShape) { - return (childrenShape.getBBox().maxX || 0) + paddingArray[1]; - }), false)); - titleShape === null || titleShape === void 0 ? void 0 : titleShape.attr("width", maxX); - shape === null || shape === void 0 ? void 0 : shape.attr("width", maxX); - } - if (badge) { - var statusConfig = getStatusCfg(badge, [size14[0], shapeHeight]); - group3.addShape("rect", { - attrs: __assign22(__assign22({ fill: "#40a9ff" }, statusConfig), getStyle3(badge.style, cfg, group3)), - name: "status-rect" - }); - } - if (markerCfg) { - var stateCollapsed = ((_c = (_b = group3 === null || group3 === void 0 ? void 0 : group3.get("item")) === null || _b === void 0 ? void 0 : _b.getModel()) !== null && _c !== void 0 ? _c : {}).collapsed; - var _p = shape.getBBox(), shapeWidth_1 = _p.width, shapeHeight_1 = _p.height; - var _q = typeof markerCfg === "function" ? markerCfg(cfg, group3) : markerCfg, show = _q.show, _r = _q.position, position2 = _r === void 0 ? "right" : _r, collapsed = _q.collapsed, markerStyle = _q.style; - createMarker({ - show, - position: position2, - collapsed: stateCollapsed !== null && stateCollapsed !== void 0 ? stateCollapsed : collapsed, - style: markerStyle - }, group3, [shapeWidth_1, shapeHeight_1]); - shape.attr("defaultCollapsed", collapsed); - } - return shape; - }, - update: void 0, - setState: function(name, value2, item) { - var _a6, _b; - var shape = item.get("keyShape"); - if (!shape || shape.destroyed) - return; - var type2 = item.getType(); - var stateName = (0, import_util596.isBoolean)(value2) ? name : "".concat(name, ":").concat(value2); - var itemStateStyle = item.getStateStyle(stateName); - if (!itemStateStyle) { - return; - } - var styles = Object.assign({}, itemStateStyle); - var group3 = item.getContainer(); - var keptAttrs = { x: 1, y: 1, cx: 1, cy: 1 }; - if (value2) { - var _loop_1 = function(key2) { - var _c; - var style = styles[key2]; - if ((0, import_util596.isPlainObject)(style) && !ARROWS2.includes(key2)) { - var subShape = group3.find(function(element) { - return element.get("name") === key2; - }); - if (subShape) { - subShape.attr(style); - } - } else { - shape.attr((_c = {}, _c[key2] = style, _c)); - } - }; - for (var key in styles) { - _loop_1(key); - } - } else { - var enableStatesStyle = cloneBesidesImg3(item.getCurrentStatesStyle()); - var model = item.getModel(); - var originStyle_1 = (0, import_util596.mix)({}, model.style, cloneBesidesImg3(item.getOriginStyle())); - var keyShapeName_1 = shape.get("name"); - var shapeAttrs_1 = shape.attr(); - var keyShapeStyles_1 = {}; - Object.keys(shapeAttrs_1).forEach(function(key2) { - if (key2 === "img") - return; - var attr = shapeAttrs_1[key2]; - if (attr && typeof attr === "object") { - keyShapeStyles_1[key2] = (0, import_util596.clone)(attr); - } else { - keyShapeStyles_1[key2] = attr; - } - }); - var filtetDisableStatesStyle = {}; - var _loop_2 = function(p5) { - var style = styles[p5]; - if ((0, import_util596.isPlainObject)(style) && !ARROWS2.includes(p5)) { - var subShape_1 = group3.find(function(element) { - return element.get("name") === p5; - }); - if (subShape_1) { - var subShapeStyles_1 = (0, import_util596.clone)(subShape_1.attr()); - (0, import_util596.each)(style, function(v3, key2) { - if (p5 === keyShapeName_1 && keyShapeStyles_1[key2] && !keptAttrs[key2]) { - delete keyShapeStyles_1[key2]; - var value_1 = originStyle_1[p5][key2] || SHAPES_DEFAULT_ATTRS2[type2][key2]; - shape.attr(key2, value_1); - } else if (subShapeStyles_1[key2] || subShapeStyles_1[key2] === 0) { - delete subShapeStyles_1[key2]; - var value_2 = originStyle_1[p5][key2] || SHAPES_DEFAULT_ATTRS2[type2][key2]; - subShape_1.attr(key2, value_2); - } - }); - filtetDisableStatesStyle[p5] = subShapeStyles_1; - } - } else { - if (keyShapeStyles_1[p5] && !keptAttrs[p5]) { - delete keyShapeStyles_1[p5]; - var value_3 = originStyle_1[p5] || (originStyle_1[keyShapeName_1] ? originStyle_1[keyShapeName_1][p5] : void 0) || SHAPES_DEFAULT_ATTRS2[type2][p5]; - shape.attr(p5, value_3); - } - } - }; - for (var p4 in styles) { - _loop_2(p4); - } - if (!keyShapeName_1) { - (0, import_util596.mix)(filtetDisableStatesStyle, keyShapeStyles_1); - } else { - filtetDisableStatesStyle[keyShapeName_1] = keyShapeStyles_1; - } - for (var key in enableStatesStyle) { - if (keptAttrs[key]) - continue; - var enableStyle = enableStatesStyle[key]; - if (!(0, import_util596.isPlainObject)(enableStyle) || ARROWS2.includes(key)) { - if (!keyShapeName_1) { - (0, import_util596.mix)(originStyle_1, (_a6 = {}, _a6[key] = enableStyle, _a6)); - } else { - (0, import_util596.mix)(originStyle_1[keyShapeName_1], (_b = {}, _b[key] = enableStyle, _b)); - delete originStyle_1[key]; - } - delete enableStatesStyle[key]; - } - } - var originstyles = {}; - (0, import_util596.deepMix)(originstyles, originStyle_1, filtetDisableStatesStyle, enableStatesStyle); - var keyShapeSetted = false; - var _loop_3 = function(originKey2) { - var _d; - var style = originstyles[originKey2]; - if ((0, import_util596.isPlainObject)(style) && !ARROWS2.includes(originKey2)) { - var subShape = group3.find(function(element) { - return element.get("name") === originKey2; - }); - if (subShape) { - if (originKey2 === keyShapeName_1) { - keyShapeSetted = true; - } - if (originKey2 !== "collapse-icon") - subShape.attr(style); - } - } else if (!keyShapeSetted) { - var value_4 = style || SHAPES_DEFAULT_ATTRS2[type2][originKey2]; - shape.attr((_d = {}, _d[originKey2] = value_4, _d)); - } - }; - for (var originKey in originstyles) { - _loop_3(originKey); - } - } - } - }, "single-node"); -}; - -// node_modules/@ant-design/graphs/es/components/flowAnalysisGraph/index.js -var __rest45 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -registerIndicatorCardNode(); -var defaultLayout4 = { - type: "dagre", - rankdir: "LR", - center: [0, 0], - nodesepFunc: function() { - return 1; - }, - ranksepFunc: function() { - return 1; - } -}; -var defaultProps3 = { - nodeCfg: { - type: "indicator-card", - size: defaultNodeSize, - style: defaultNodeStyle, - anchorPoints: defaultFlowGraphAnchorPoints, - padding: 6, - layout: "bundled", - nodeStateStyles: defaultStateStyles - }, - edgeCfg: { - type: "cubic-horizontal", - edgeStateStyles: defaultStateStyles - }, - behaviors: ["zoom-canvas", "drag-canvas"], - layout: defaultLayout4, - animate: true, - markerPosition: "right", - autoFit: true, - fitCenter: true, - style: { - position: "relative", - height: "inherit", - backgroundColor: "#fff" - } -}; -var FlowAnalysisGraph = function(props) { - var uProps = useProps(props, defaultProps3).uProps; - var className = uProps.className, style = uProps.style, loading = uProps.loading, loadingTemplate = uProps.loadingTemplate, errorTemplate = uProps.errorTemplate, rest = __rest45(uProps, ["className", "style", "loading", "loadingTemplate", "errorTemplate"]); - var container2 = useGraph("Graph", rest, { name: "FlowAnalysisGraph" }).container; - return compat_module_default.createElement(errorBoundary_default2, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default2, { loadingTemplate }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}; -var flowAnalysisGraph_default = FlowAnalysisGraph; - -// node_modules/@ant-design/graphs/es/components/decompositionTreeGraph/index.js -var __rest46 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -registerIndicatorCardNode(); -var defaultLayout5 = { - type: "compactBox", - direction: "LR", - getId: function(d3) { - return d3.id; - }, - getHeight: function() { - return 60; - }, - getWidth: function() { - return 16; - }, - getVGap: function() { - return 16; - }, - getHGap: function() { - return 100; - } -}; -var defaultProps4 = { - nodeCfg: { - type: "indicator-card", - size: defaultNodeSize, - style: defaultNodeStyle, - anchorPoints: defaultFlowGraphAnchorPoints, - padding: 6, - layout: "bundled", - nodeStateStyles: defaultStateStyles, - label: { - style: function(cfg, group3, type2) { - var styles = { - icon: { - width: 10, - height: 10 - }, - value: { - fill: "#000" - }, - text: { - fill: "#aaa" - } - }; - return type2 ? styles[type2] : {}; - } - } - }, - edgeCfg: { - type: "cubic-horizontal", - endArrow: { - type: "vee" - }, - edgeStateStyles: defaultStateStyles - }, - behaviors: ["zoom-canvas", "drag-canvas"], - layout: defaultLayout5, - animate: true, - autoFit: true, - fitCenter: true, - style: { - position: "relative", - height: "inherit", - backgroundColor: "#fff" - }, - level: 100 -}; -var DecompositionTreeGraph = function(props) { - var uProps = useProps(props, defaultProps4).uProps; - var className = uProps.className, style = uProps.style, loading = uProps.loading, loadingTemplate = uProps.loadingTemplate, errorTemplate = uProps.errorTemplate, rest = __rest46(uProps, ["className", "style", "loading", "loadingTemplate", "errorTemplate"]); - var container2 = useGraph("TreeGraph", rest, { - name: "DecompositionTreeGraph" - }).container; - return compat_module_default.createElement(errorBoundary_default2, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default2, { loadingTemplate }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}; -var decompositionTreeGraph_default = DecompositionTreeGraph; - -// node_modules/@ant-design/graphs/es/components/fundFlowGraph/customItem.js -var __assign23 = function() { - __assign23 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign23.apply(this, arguments); -}; -var getPathInfo = function(cfg) { - var edgeCfg = cfg.edgeCfg; - var startPoint = cfg.startPoint; - var endPoint = cfg.endPoint; - var startX = startPoint.x, startY = startPoint.y; - var endX = endPoint.x, endY = endPoint.y; - var Ydiff = endY - startY; - var slope = Ydiff !== 0 ? Math.min(500 / Math.abs(Ydiff), 20) : 0; - var cpOffset = slope > 15 ? 0 : 16; - var offset = Ydiff < 0 ? cpOffset : -cpOffset; - var line1EndPoint = { - x: startX + slope, - y: endY + offset - }; - var line2StartPoint = { - x: line1EndPoint.x + cpOffset, - y: endY - }; - var controlPoint = { - x: (line1EndPoint.x - startX) * (endY - startY) / (line1EndPoint.y - startY) + startX, - y: endY - }; - var path = [ - ["M", startX, startY], - ["L", line1EndPoint.x, line1EndPoint.y], - ["Q", controlPoint.x, controlPoint.y, line2StartPoint.x, line2StartPoint.y], - ["L", endX, endY] - ]; - if (Math.abs(Ydiff) <= 5) { - path = [ - ["M", startX, startY], - ["L", endX, endY] - ]; - } - var _a6 = edgeCfg, startArrowCfg = _a6.startArrow, endArrowCfg = _a6.endArrow; - var startArrow = getArrowCfg(startArrowCfg, cfg); - var endArrow = getArrowCfg(endArrowCfg, cfg); - return { - startArrow, - endArrow, - path, - line2StartPoint, - endY - }; -}; -var getPathText = function(value2) { - var text; - var subText; - if (value2 instanceof Object) { - text = value2.text; - subText = value2.subText; - } else { - text = value2; - } - return { text, subText }; -}; -var registerFundFlowItems = function() { - es_default6.registerNode("fund-card", { - draw: function(cfg, group3) { - var _a6, _b; - if (cfg === void 0) { - cfg = {}; - } - var _c = cfg.value, value2 = _c === void 0 ? {} : _c, nodeCfg = cfg.nodeCfg, markerCfg = cfg.markerCfg; - var _d = nodeCfg, _e = _d.label, label17 = _e === void 0 ? {} : _e, style = _d.style, _f = _d.padding, padding3 = _f === void 0 ? 0 : _f, customContent = _d.customContent; - var labelStyle = label17.style; - var paddingArray = getCssPadding(padding3); - var size14 = getSize4(cfg.size); - var height = 0; - var shapeWidth = size14[0]; - var contentWidth = shapeWidth - paddingArray[1] - paddingArray[3]; - var contentHeight = size14[1] - paddingArray[0] - paddingArray[2]; - var cardStyle = getStyle3(style, cfg, group3); - var shape = group3.addShape("rect", { - attrs: __assign23({ x: 0, y: 0, width: size14[0], height: size14[1], radius: size14[1] / 2, fill: "#fff", stroke: "#40a9ff" }, cardStyle), - name: "main-box", - draggable: true - }); - if (value2) { - height += paddingArray[0]; - var createRowItems_1 = function(item, contentWidth2, startX) { - var _a7, _b2; - var text = item.text, icon = item.icon; - var textShape; - var iconShape; - if (icon) { - iconShape = group3.addShape("image", { - attrs: __assign23({ x: startX, y: height, img: icon, width: contentHeight, height: contentHeight }, getStyle3(labelStyle, cfg, group3, "icon")), - name: "fund-icon" - }); - } - textShape = group3 === null || group3 === void 0 ? void 0 : group3.addShape("text", { - attrs: __assign23(__assign23({ textBaseline: "middle", textAlign: iconShape ? "start" : "center", x: startX + (iconShape ? (iconShape === null || iconShape === void 0 ? void 0 : iconShape.getBBox().width) + defaultMargin : contentWidth2 / 2), y: paddingArray[0] + contentHeight / 2, text }, defaultLabelStyle), getStyle3(labelStyle, cfg, group3, "text")), - name: "fund-text" - }); - return [(_a7 = textShape === null || textShape === void 0 ? void 0 : textShape.getBBox().height) !== null && _a7 !== void 0 ? _a7 : 0, (_b2 = iconShape === null || iconShape === void 0 ? void 0 : iconShape.getBBox().height) !== null && _b2 !== void 0 ? _b2 : 0]; - }; - var createItems = function(item) { - var _a7; - var itemsHeight = []; - if (customContent) { - itemsHeight.push((_a7 = customContent(item, group3, { - startX: paddingArray[3], - startY: height, - width: contentWidth - })) !== null && _a7 !== void 0 ? _a7 : 0); - } else { - itemsHeight.push.apply(itemsHeight, createRowItems_1(item, contentWidth, paddingArray[3])); - } - height += Math.max.apply(Math, itemsHeight); - }; - createItems(value2); - } - shape === null || shape === void 0 ? void 0 : shape.attr("height", Math.max(size14[1], height + paddingArray[2])); - if (markerCfg) { - var stateCollapsed = ((_b = (_a6 = group3 === null || group3 === void 0 ? void 0 : group3.get("item")) === null || _a6 === void 0 ? void 0 : _a6.getModel()) !== null && _b !== void 0 ? _b : {}).collapsed; - var _g = shape.getBBox(), shapeWidth_1 = _g.width, shapeHeight = _g.height; - var _h = typeof markerCfg === "function" ? markerCfg(cfg, group3) : markerCfg, show = _h.show, _j = _h.position, position2 = _j === void 0 ? "right" : _j, collapsed = _h.collapsed, markerStyle = _h.style; - createMarker({ - show, - position: position2, - collapsed: stateCollapsed !== null && stateCollapsed !== void 0 ? stateCollapsed : collapsed, - style: markerStyle - }, group3, [shapeWidth_1, shapeHeight]); - shape.attr("defaultCollapsed", collapsed); - } - return shape; - }, - update: void 0 - }, "single-node"); - es_default6.registerEdge("fund-line", { - draw: function draw4(cfg, group3) { - if (cfg === void 0) { - cfg = {}; - } - var edgeCfg = cfg.edgeCfg, value2 = cfg.value; - var _a6 = getPathText(value2), text = _a6.text, subText = _a6.subText; - var _b = edgeCfg, edgeStyle = _b.style, labelCfg = _b.label; - var _c = getPathInfo(cfg), startArrow = _c.startArrow, endArrow = _c.endArrow, path = _c.path, line2StartPoint = _c.line2StartPoint, endY = _c.endY; - var labelStyle = (labelCfg !== null && labelCfg !== void 0 ? labelCfg : {}).style; - var line2 = group3.addShape("path", { - attrs: __assign23({ path, stroke: "#ccc", startArrow, endArrow }, typeof edgeStyle === "function" ? edgeStyle(cfg, group3) : edgeStyle), - name: "path-shape" - }); - var createItem = function(itemText, key) { - group3.addShape("text", { - attrs: __assign23(__assign23({ text: itemText, x: line2StartPoint.x, y: key === "text" ? endY - 4 : endY + 16 }, defaultLabelStyle), getStyle3(labelStyle, cfg, group3, key)), - name: "line-text-".concat(key) - }); - }; - text && createItem(text, "text"); - subText && createItem(subText, "subText"); - return line2; - }, - update: function(cfg, edge2) { - var edgeCfg = cfg.edgeCfg, value2 = cfg.value; - var _a6 = getPathText(value2), text = _a6.text, subText = _a6.subText; - var group3 = edge2.getContainer(); - var getShape3 = function(shapeName) { - return group3.get("children").find(function(item) { - return item.get("name") === shapeName; - }); - }; - var _b = getPathInfo(cfg), startArrow = _b.startArrow, endArrow = _b.endArrow, path = _b.path, line2StartPoint = _b.line2StartPoint, endY = _b.endY; - var _c = edgeCfg, edgeStyle = _c.style, labelCfg = _c.label; - var labelStyle = (labelCfg !== null && labelCfg !== void 0 ? labelCfg : {}).style; - var pathShape = getShape3("path-shape"); - pathShape === null || pathShape === void 0 ? void 0 : pathShape.attr(__assign23({ path, stroke: "#ccc", startArrow, endArrow }, typeof edgeStyle === "function" ? edgeStyle(cfg, group3) : edgeStyle)); - var texts = ["text", "subText"]; - texts.forEach(function(key) { - var textShape = getShape3("line-text-".concat(key)); - textShape === null || textShape === void 0 ? void 0 : textShape.attr(__assign23(__assign23({ x: line2StartPoint.x, y: key === "text" ? endY - 4 : endY + 16, text: key === "text" ? text : subText }, defaultLabelStyle), getStyle3(labelStyle, cfg, group3, key))); - }); - } - }, "single-edge"); -}; - -// node_modules/@ant-design/graphs/es/components/fundFlowGraph/index.js -var __rest47 = function(s4, e4) { - var t4 = {}; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4) && e4.indexOf(p4) < 0) - t4[p4] = s4[p4]; - if (s4 != null && typeof Object.getOwnPropertySymbols === "function") - for (var i4 = 0, p4 = Object.getOwnPropertySymbols(s4); i4 < p4.length; i4++) { - if (e4.indexOf(p4[i4]) < 0 && Object.prototype.propertyIsEnumerable.call(s4, p4[i4])) - t4[p4[i4]] = s4[p4[i4]]; - } - return t4; -}; -registerFundFlowItems(); -var defaultLayout6 = { - type: "dagre", - rankdir: "LR", - nodesep: 30, - ranksep: 50 -}; -var defaultProps5 = { - nodeCfg: { - type: "fund-card", - size: defaultNodeSize, - style: defaultNodeStyle, - anchorPoints: defaultFlowGraphAnchorPoints, - nodeStateStyles: defaultStateStyles, - padding: 6 - }, - edgeCfg: { - type: "fund-line", - edgeStateStyles: defaultStateStyles, - style: { - stroke: "#40a9ff" - }, - endArrow: { - fill: "#40a9ff" - } - }, - behaviors: ["zoom-canvas", "drag-canvas"], - layout: defaultLayout6, - animate: true, - autoFit: true, - fitCenter: true, - style: { - position: "relative", - height: "inherit", - backgroundColor: "#fff" - } -}; -var FundFlowGraph = function(props) { - var uProps = useProps(props, defaultProps5).uProps; - var className = uProps.className, style = uProps.style, loading = uProps.loading, loadingTemplate = uProps.loadingTemplate, errorTemplate = uProps.errorTemplate, rest = __rest47(uProps, ["className", "style", "loading", "loadingTemplate", "errorTemplate"]); - var container2 = useGraph("Graph", rest, { name: "FundFlowGraph" }).container; - return compat_module_default.createElement(errorBoundary_default2, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default2, { loadingTemplate }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}; -var fundFlowGraph_default = FundFlowGraph; - -// node_modules/@ant-design/graphs/es/obsolescent/hooks/useGraph.js -var import_util597 = __toModule(require_lib()); -var __assign24 = function() { - __assign24 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign24.apply(this, arguments); -}; -function useGraph2(graphInstance, config, container2) { - var graphHook = s3(); - var data3 = config.data, width2 = config.width, height = config.height, layout6 = config.layout, minimapCfg = config.minimapCfg, behaviors2 = config.behaviors, fitCenter = config.fitCenter, nodeCfg = config.nodeCfg, edgeCfg = config.edgeCfg, markerCfg = config.markerCfg, level = config.level; - var graphOptions = s3(); - var graphData = s3(); - var setEdgesState = function(edges) { - edges.forEach(function(edge2) { - var _a6, _b; - var _c = edge2.getModel(), source = _c.source, target = _c.target; - var sourceVisible = (_a6 = graphInstance === null || graphInstance === void 0 ? void 0 : graphInstance.findById(source)) === null || _a6 === void 0 ? void 0 : _a6.get("visible"); - var targetVisible = (_b = graphInstance === null || graphInstance === void 0 ? void 0 : graphInstance.findById(target)) === null || _b === void 0 ? void 0 : _b.get("visible"); - if (sourceVisible === false || targetVisible === false) { - edge2.changeVisibility(false); - } - }); - }; - var changeData = function() { - var _a6; - if (!graphInstance) { - return; - } - var currentData = data3; - if (level) { - currentData = setTag4(data3); - } - graphInstance.changeData(level ? getLevelData(currentData, level) : data3); - (_a6 = graphInstance.get("eventData")) === null || _a6 === void 0 ? void 0 : _a6.setData(currentData); - setEdgesState(graphInstance.getEdges()); - if (fitCenter) { - graphInstance.fitCenter(); - } - }; - var updateLayout = function() { - graphInstance === null || graphInstance === void 0 ? void 0 : graphInstance.updateLayout(layout6); - if (fitCenter) { - graphInstance === null || graphInstance === void 0 ? void 0 : graphInstance.fitCenter(); - } - }; - var updateNodes = function() { - if (!graphInstance) { - return; - } - var _a6 = nodeCfg !== null && nodeCfg !== void 0 ? nodeCfg : {}, nodeType = _a6.type, nodeAnchorPoints = _a6.anchorPoints, nodeStyle = _a6.style, nodeLabelCfg = _a6.title; - graphInstance.getNodes().forEach(function(node) { - graphInstance.updateItem(node, { - nodeCfg, - markerCfg, - type: nodeType, - style: nodeStyle, - anchorPoints: nodeAnchorPoints, - labelCfg: nodeLabelCfg - }); - }); - }; - var updateEdges = function() { - if (!graphInstance) { - return; - } - var _a6 = edgeCfg !== null && edgeCfg !== void 0 ? edgeCfg : {}, edgeType = _a6.type, edgeStyle = _a6.style, startArrowCfg = _a6.startArrow, endArrowCfg = _a6.endArrow, labelCfg = _a6.label; - graphInstance.getEdges().forEach(function(edge2) { - if (edgeType === "fund-line") { - graphInstance.updateItem(edge2, { - edgeCfg - }); - } else { - var edgeCfgModel = edge2.getModel(); - var startArrow = getArrowCfg(startArrowCfg, edgeCfgModel); - var endArrow = getArrowCfg(endArrowCfg, edgeCfgModel); - var _a7 = labelCfg !== null && labelCfg !== void 0 ? labelCfg : {}, style = _a7.style, content = _a7.content; - graphInstance.updateItem(edge2, { - type: edgeType, - label: getCommonConfig(content, edgeCfgModel, graphInstance), - labelCfg: { - style: getCommonConfig(style, edgeCfgModel, graphInstance) - }, - style: __assign24({ stroke: "#ccc", startArrow, endArrow }, typeof edgeStyle === "function" ? edgeStyle(edgeCfgModel, graphInstance) : edgeStyle) - }); - } - }); - }; - var updateMarker = function() { - if (!graphInstance) { - return; - } - graphInstance.getNodes().forEach(function(node) { - var _a6 = (typeof markerCfg === "function" ? markerCfg(node.getModel(), node.get("group")) : markerCfg).position, position2 = _a6 === void 0 ? "right" : _a6; - var _b = node.getBBox(), width3 = _b.width, height2 = _b.height; - var markerShape = node.get("group").get("children").find(function(item) { - return item.get("name") === "collapse-icon"; - }); - if (markerShape) { - markerShape === null || markerShape === void 0 ? void 0 : markerShape.attr(__assign24({}, getMarkerPosition(position2, [width3, height2]))); - } - }); - }; - y2(function() { - if (graphInstance && !graphInstance.destroyed) { - if ((0, import_util597.isEqual)(data3, graphData.current)) { - return; - } - graphData.current = deepClone2(data3); - changeData(); - } - }, [data3]); - y2(function() { - var _a6, _b, _c, _d, _e; - if (graphInstance && !graphInstance.destroyed) { - if ((0, import_util597.isEqual)(config, graphOptions.current)) { - return; - } - if (!(0, import_util597.isEqual)(layout6, (_a6 = graphOptions.current) === null || _a6 === void 0 ? void 0 : _a6.layout)) { - updateLayout(); - } - if (!(0, import_util597.isEqual)(minimapCfg, (_b = graphOptions.current) === null || _b === void 0 ? void 0 : _b.minimapCfg)) { - processMinimap(minimapCfg, graphInstance); - } - if (!(0, import_util597.isEqual)(nodeCfg, (_c = graphOptions.current) === null || _c === void 0 ? void 0 : _c.nodeCfg)) { - updateNodes(); - } - if (!(0, import_util597.isEqual)(edgeCfg, (_d = graphOptions.current) === null || _d === void 0 ? void 0 : _d.edgeCfg)) { - updateEdges(); - } - if (!(0, import_util597.isEqual)(markerCfg, (_e = graphOptions.current) === null || _e === void 0 ? void 0 : _e.markerCfg)) { - updateMarker(); - } - graphOptions.current = config; - } - }, [config]); - y2(function() { - if (graphInstance && !graphInstance.destroyed) { - var graphSize = getGraphSize(width2, height, container2); - graphInstance.changeSize(graphSize[0], graphSize[1]); - } - }, [container2, width2, height]); - y2(function() { - if (graphInstance && !graphInstance.destroyed) { - var defaultMode = graphInstance.get("modes").default; - var removingBehaviors_1 = []; - defaultMode.forEach(function(be) { - if ((0, import_util597.isObject)(be)) { - removingBehaviors_1.push(be.type); - } else if ((0, import_util597.isString)(be)) { - removingBehaviors_1.push(be); - } - }); - graphInstance.removeBehaviors(removingBehaviors_1, "default"); - graphInstance.addBehaviors(behaviors2, "default"); - } - }, [behaviors2]); - y2(function() { - graphHook.current = graphInstance; - return function() { - if (graphInstance && !graphInstance.destroyed) { - graphInstance.destroy(); - graphInstance = void 0; - } - }; - }, []); - return { - graphHook - }; -} - -// node_modules/@ant-design/graphs/es/obsolescent/graph/customItems.js -var import_util598 = __toModule(require_lib()); -var __assign25 = function() { - __assign25 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign25.apply(this, arguments); -}; -var registerCustomItems = function() { - es_default6.registerNode("card-node", { - draw: function(cfg, group3) { - var _a6; - if (cfg === void 0) { - cfg = {}; - } - var size14 = cfg.size || [100, 30]; - if (typeof size14 === "number") - size14 = [size14, size14]; - var style = __assign25({ radius: 2, fill: "#fff" }, cfg.style); - var color4 = style.stroke || cfg.color || "#5B8FF9"; - var r4 = style.radius || 0; - var shape = group3.addShape("rect", { - attrs: __assign25({ x: 0, y: 0, width: size14[0], height: size14[1], stroke: color4 }, style), - name: "main-box", - draggable: true - }); - var title = cfg.title || cfg.label; - var titleTextShape; - var labelStyle = ((_a6 = cfg.labelCfg) === null || _a6 === void 0 ? void 0 : _a6.style) || {}; - if (title) { - var titleStyle = __assign25({ fill: "#fff" }, labelStyle); - titleTextShape = group3.addShape("text", { - attrs: __assign25(__assign25({ - textBaseline: "top", - x: 8, - y: 2, - text: title - }, titleStyle), { fill: "#fff" }), - name: "title" - }); - } - var titleBox = titleTextShape ? titleTextShape.getBBox() : { height: size14[1] / 2 }; - var titleRectShape = group3.addShape("rect", { - attrs: { - x: 0, - y: 0, - width: size14[0], - height: titleBox.height + 4, - fill: color4, - radius: [r4, r4, 0, 0] - }, - name: "title-rect", - draggable: true - }); - titleTextShape === null || titleTextShape === void 0 ? void 0 : titleTextShape.toFront(); - var markerShape; - if (cfg === null || cfg === void 0 ? void 0 : cfg.children) { - markerShape = group3.addShape("marker", { - attrs: { - x: size14[0] / 2, - y: 0, - r: 6, - cursor: "pointer", - symbol: cfg.collapsed ? es_default6.Marker.expand : es_default6.Marker.collapse, - stroke: color4, - lineWidth: 1, - fill: "#fff" - }, - name: "collapse-icon" - }); - } - var description = cfg && cfg.description ? cfg.description : void 0; - var titleRectBox = titleRectShape.getBBox(); - var descriptionTextShape; - if (description) { - descriptionTextShape = group3.addShape("text", { - attrs: __assign25({ textBaseline: "top", x: 8, y: titleRectBox.height + 8, text: description }, labelStyle), - name: "description" - }); - } - if (descriptionTextShape) { - var desTextShapeBBox = descriptionTextShape.getBBox(); - var height = titleRectBox.height + 16 + desTextShapeBBox.height; - var width2 = size14[0] > desTextShapeBBox.width + 16 ? size14[0] : desTextShapeBBox.width + 16; - shape.attr({ width: width2, height }); - titleRectShape === null || titleRectShape === void 0 ? void 0 : titleRectShape.attr("width", width2); - markerShape === null || markerShape === void 0 ? void 0 : markerShape.attr({ - x: width2, - y: height / 2 - }); - } - return shape; - }, - update: void 0 - }, "single-node"); - es_default6.registerNode("round-rect", { - drawShape: function(cfg, group3) { - if (cfg === void 0) { - cfg = {}; - } - var size14 = cfg.size || [100, 30]; - if (typeof size14 === "number") - size14 = [size14, size14]; - var style = cfg.style || {}; - var color4 = style.stroke || cfg.color || "#5B8FF9"; - var fill = style.fill || "#fff"; - style = __assign25({ width: size14[0], height: size14[1], radius: size14[1] / 2, fill, lineWidth: 1.2, stroke: color4 }, style); - var rect3 = group3.addShape("rect", { - attrs: __assign25({ x: -size14[0] / 2, y: -size14[1] / 2 }, style), - name: "rect-shape" - }); - group3.addShape("circle", { - attrs: { - x: -size14[0] / 2, - y: 0, - r: 3, - fill: style.stroke - }, - name: "circle-shape" - }); - group3.addShape("circle", { - attrs: { - x: size14[0] / 2, - y: 0, - r: 3, - fill: style.stroke - }, - name: "circle-shape2" - }); - return rect3; - }, - getAnchorPoints: function getAnchorPoints4() { - return [ - [0, 0.5], - [1, 0.5] - ]; - }, - update: function update15(cfg, item) { - var _a6; - if (cfg === void 0) { - cfg = {}; - } - var group3 = item.getContainer(); - var children = group3.get("children"); - var node = children[0]; - var circleLeft = children[1]; - var circleRight = children[2]; - var stroke = ((_a6 = cfg.style) === null || _a6 === void 0 ? void 0 : _a6.stroke) || "#5B8FF9"; - if (stroke) { - node.attr("stroke", stroke); - circleLeft.attr("fill", stroke); - circleRight.attr("fill", stroke); - } - } - }, "single-node"); - es_default6.registerEdge("fund-polyline", { - draw: function draw4(cfg, group3) { - var _a6; - if (cfg === void 0) { - cfg = {}; - } - var startPoint = cfg.startPoint; - var endPoint = cfg.endPoint; - var Ydiff = endPoint.y - startPoint.y; - var slope = Ydiff !== 0 ? Math.min(500 / Math.abs(Ydiff), 20) : 0; - var cpOffset = slope > 15 ? 0 : 16; - var offset = Ydiff < 0 ? cpOffset : -cpOffset; - var line1EndPoint = { - x: startPoint.x + slope, - y: endPoint.y + offset - }; - var line2StartPoint = { - x: line1EndPoint.x + cpOffset, - y: endPoint.y - }; - var controlPoint = { - x: (line1EndPoint.x - startPoint.x) * (endPoint.y - startPoint.y) / (line1EndPoint.y - startPoint.y) + startPoint.x, - y: endPoint.y - }; - var path = [ - ["M", startPoint.x, startPoint.y], - ["L", line1EndPoint.x, line1EndPoint.y], - ["Q", controlPoint.x, controlPoint.y, line2StartPoint.x, line2StartPoint.y], - ["L", endPoint.x, endPoint.y] - ]; - if (Math.abs(Ydiff) <= 5) { - path = [ - ["M", startPoint.x, startPoint.y], - ["L", endPoint.x, endPoint.y] - ]; - } - var style = cfg.style; - var stroke = style.stroke || (cfg === null || cfg === void 0 ? void 0 : cfg.colorMap) && cfg.colorMap[cfg.dataType] ? (cfg === null || cfg === void 0 ? void 0 : cfg.colorMap)[cfg === null || cfg === void 0 ? void 0 : cfg.dataType] : "#5B8FF9"; - var endArrow = ((_a6 = cfg.style) === null || _a6 === void 0 ? void 0 : _a6.endArrow) || false; - if ((0, import_util598.isObject)(endArrow)) - endArrow.fill = stroke; - var line2 = group3.addShape("path", { - attrs: { - path, - stroke, - lineWidth: style.lineWidth || 1.2, - endArrow - }, - name: "path-shape" - }); - var labelLeftOffset = 0; - var labelTopOffset = 8; - var labelTextShape; - var textBeginX = line2StartPoint.x + labelLeftOffset; - if (cfg === null || cfg === void 0 ? void 0 : cfg.label) { - labelTextShape = group3.addShape("text", { - attrs: { - text: cfg.label, - x: textBeginX, - y: endPoint.y - labelTopOffset - 2, - fontSize: 14, - textAlign: "left", - textBaseline: "middle", - fill: "#000" - }, - name: "text-shape-label" - }); - } - if (cfg === null || cfg === void 0 ? void 0 : cfg.dataType) { - var labelTextShapeBBox = labelTextShape ? labelTextShape.getBBox() : { height: 0 }; - group3.addShape("text", { - attrs: { - text: cfg.dataType, - x: textBeginX, - y: endPoint.y - labelTopOffset - labelTextShapeBBox.height - 2, - fontSize: 10, - textAlign: "left", - textBaseline: "middle", - fill: "#000" - }, - name: "text-shape-type" - }); - } - if (cfg === null || cfg === void 0 ? void 0 : cfg.subLabel) { - group3.addShape("text", { - attrs: { - text: cfg.subLabel, - x: textBeginX, - y: endPoint.y + labelTopOffset + 4, - fontSize: 12, - fontWeight: 300, - textAlign: "left", - textBaseline: "middle", - fill: "#000" - }, - name: "text-shape-sub-label" - }); - } - return line2; - }, - update: void 0 - }, "single-edge"); - es_default6.registerEdge("flow-line", { - draw: function(cfg, group3) { - if (cfg === void 0) { - cfg = {}; - } - var startPoint = cfg.startPoint, endPoint = cfg.endPoint; - var _a6 = cfg.style, style = _a6 === void 0 ? {} : _a6; - var shape = group3.addShape("path", { - attrs: { - stroke: style.stroke, - endArrow: style.endArrow, - path: [ - ["M", startPoint.x, startPoint.y], - ["L", startPoint.x, (startPoint.y + endPoint.y) / 2], - ["L", endPoint.x, (startPoint.y + endPoint.y) / 2], - ["L", endPoint.x, endPoint.y] - ] - } - }); - return shape; - } - }); -}; -var customIconNode = function(params) { - es_default6.registerNode("icon-node", { - options: { - size: [60, 20], - stroke: "#91d5ff", - fill: "#91d5ff" - }, - draw: function(cfg, group3) { - if (cfg === void 0) { - cfg = {}; - } - var styles = this.getShapeStyle(cfg); - var _a6 = cfg.labelCfg, labelCfg = _a6 === void 0 ? {} : _a6; - var keyShape = group3.addShape("rect", { - attrs: __assign25(__assign25({}, styles), { x: 0, y: 0 }) - }); - var style = { - fill: "#e6fffb" - }; - var img = "https://g.alicdn.com/cm-design/arms-trace/1.0.155/styles/armsTrace/images/TAIR.png"; - if (cfg.leftIcon) { - style = __assign25(__assign25({}, style), cfg.leftIcon.style); - img = cfg.leftIcon.img; - } - group3.addShape("rect", { - attrs: __assign25({ x: 1, y: 1, width: 38, height: styles.height - 2 }, style) - }); - group3.addShape("image", { - attrs: { - x: 8, - y: 8, - width: 24, - height: 24, - img - }, - name: "image-shape" - }); - if (params.enableEdit) { - group3.addShape("marker", { - attrs: { - x: styles.width / 3, - y: styles.height + 6, - r: 6, - stroke: "#73d13d", - cursor: "pointer", - symbol: es_default6.Marker.expand - }, - name: "add-item" - }); - group3.addShape("marker", { - attrs: { - x: styles.width * 2 / 3, - y: styles.height + 6, - r: 6, - stroke: "#ff4d4f", - cursor: "pointer", - symbol: es_default6.Marker.collapse - }, - name: "remove-item" - }); - } - if (cfg.label) { - group3.addShape("text", { - attrs: __assign25(__assign25({}, labelCfg.style), { text: cfg.label, x: styles.width / 2, y: styles.height / 1.5 }) - }); - } - return keyShape; - } - }, "rect"); -}; - -// node_modules/@ant-design/graphs/es/obsolescent/graph/constants.js -var defaultLabelCfg = { - style: { - fill: "#000", - fontSize: 12 - } -}; -var defaultEdgeStyle = { - stroke: "#91d5ff", - endArrow: { - path: es_default6.Arrow.vee(10, 10) - } -}; -var defaultNodeAnchorPoints = [ - [0.5, 0], - [0.5, 1] -]; -var defaultStateStyles2 = { - hover: { - stroke: "#1890ff", - lineWidth: 2 - } -}; -var defaultNodeSize2 = [120, 40]; - -// node_modules/@ant-design/graphs/es/obsolescent/graph/utils.js -var __assign26 = function() { - __assign26 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign26.apply(this, arguments); -}; -var defaultMinimapCfg2 = { - show: false, - size: [150, 100], - type: "keyShape" -}; -var getGraphSize2 = function(width2, height, container2) { - var CANVAS_WIDTH; - var CANVAS_HEIGHT; - if (container2 && container2.current) { - CANVAS_WIDTH = container2.current.offsetWidth; - CANVAS_HEIGHT = container2.current.offsetHeight || 500; - } - if (!width2 && !CANVAS_WIDTH || !height && !CANVAS_HEIGHT) { - Log2.warn("\u8BF7\u4E3A Graph \u6307\u5B9A width \u4E0E height\uFF01\u5426\u5219\u5C06\u4F7F\u7528\u9ED8\u8BA4\u503C 500 * 500"); - return [500, 500]; - } - return [width2 || CANVAS_WIDTH || 500, height || CANVAS_HEIGHT || 500]; -}; -var processMinimap2 = function(cfg, graph) { - if (!graph || graph.destroyed) - return; - if (cfg && cfg.show) { - var curMminimapCfg = Object.assign(defaultMinimapCfg2, cfg); - var minimap = new es_default6.Minimap(__assign26({}, curMminimapCfg)); - graph.addPlugin(minimap); - return minimap; - } - return null; -}; -var uuid = function() { - return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c5) { - var r4 = Math.random() * 16 | 0; - var v3 = c5 == "x" ? r4 : r4 & 3 | 8; - return v3.toString(16); - }); -}; -var getGraphId2 = function(graph) { - if (graph.current) { - return graph.current; - } - graph.current = "IndentedTreeGraph-".concat(uuid()); - return graph.current; -}; -var renderGraph2 = function(graph, data3) { - var originData = deepClone2(data3); - graph.data(originData); - graph.render(); -}; -var bindEvents = function(graph, props) { - var handleEdgeClick = props.handleEdgeClick, handleEdgeHover = props.handleEdgeHover, handleEdgeUnHover = props.handleEdgeUnHover, handleNodeClick = props.handleNodeClick, handleNodeHover = props.handleNodeHover, handleNodeUnHover = props.handleNodeUnHover, handleCanvasClick = props.handleCanvasClick; - graph.on("edge:mouseenter", function(evt) { - var item = evt.item; - graph.setItemState(item, "hover", true); - handleEdgeHover === null || handleEdgeHover === void 0 ? void 0 : handleEdgeHover(item, graph); - }); - graph.on("edge:mouseleave", function(evt) { - var item = evt.item; - graph.setItemState(item, "hover", false); - handleEdgeUnHover === null || handleEdgeUnHover === void 0 ? void 0 : handleEdgeUnHover(item, graph); - }); - graph.on("edge:click", function(evt) { - var item = evt.item; - handleEdgeClick === null || handleEdgeClick === void 0 ? void 0 : handleEdgeClick(item, graph); - }); - graph.on("edge:touchstart", function(evt) { - var item = evt.item; - handleEdgeClick === null || handleEdgeClick === void 0 ? void 0 : handleEdgeClick(item, graph); - }); - graph.on("node:mouseenter", function(evt) { - var item = evt.item; - graph.setItemState(item, "hover", true); - handleNodeHover === null || handleNodeHover === void 0 ? void 0 : handleNodeHover(item, graph); - }); - graph.on("node:mouseleave", function(evt) { - var item = evt.item; - graph.setItemState(item, "hover", false); - handleNodeUnHover === null || handleNodeUnHover === void 0 ? void 0 : handleNodeUnHover(item, graph); - }); - graph.on("node:click", function(evt) { - var item = evt.item; - handleNodeClick === null || handleNodeClick === void 0 ? void 0 : handleNodeClick(item, graph); - }); - graph.on("canvas:click", function() { - handleCanvasClick === null || handleCanvasClick === void 0 ? void 0 : handleCanvasClick(graph); - }); - graph.on("canvas:touchstart", function() { - handleCanvasClick === null || handleCanvasClick === void 0 ? void 0 : handleCanvasClick(graph); - }); -}; -var useProps2 = function(props, defaultProps13) { - return __assign26(__assign26(__assign26({}, defaultProps13), props), { layout: __assign26(__assign26({}, defaultProps13 === null || defaultProps13 === void 0 ? void 0 : defaultProps13.layout), props === null || props === void 0 ? void 0 : props.layout) }); -}; - -// node_modules/@ant-design/graphs/es/obsolescent/graph/organizationTreeGraph.js -var defaultNodeStyle3 = { - fill: "#91d5ff", - stroke: "#40a9ff", - radius: 2 -}; -var defaultEdgeStyle2 = { - stroke: "#91d5ff", - endArrow: { - path: "M 0,0 L 12, 6 L 9,0 L 12, -6 Z", - fill: "#91d5ff", - d: -20 - } -}; -var defaultLayout7 = { - type: "compactBox", - direction: "TB", - getId: function getId2(d3) { - return d3.id; - }, - getHeight: function getHeight4() { - return 16; - }, - getWidth: function getWidth2() { - return 16; - }, - getVGap: function getVGap2() { - return 40; - }, - getHGap: function getHGap2() { - return 70; - } -}; -var defaultProps6 = { - nodeType: "rect", - edgeType: "flow-line", - collapseExpand: false, - nodeSize: [120, 40], - nodeLabelCfg: defaultLabelCfg, - edgeLabelCfg: defaultLabelCfg, - layout: defaultLayout7, - enableEdit: false, - nodeStyle: defaultNodeStyle3, - edgeStyle: defaultEdgeStyle2, - nodeStateStyles: defaultStateStyles2, - edgeStateStyles: defaultStateStyles2, - autoFit: true -}; -var graphs = {}; -var OrganizationTreeGraphComponent = function(props) { - var uProps = useProps2(props, defaultProps6); - var data3 = uProps.data, className = uProps.className, style = uProps.style, width2 = uProps.width, height = uProps.height, _a6 = uProps.nodeType, nodeType = _a6 === void 0 ? "rect" : _a6, _b = uProps.edgeType, edgeType = _b === void 0 ? "flow-line" : _b, _c = uProps.collapseExpand, collapseExpand = _c === void 0 ? false : _c, _d = uProps.nodeSize, nodeSize = _d === void 0 ? [120, 40] : _d, _e = uProps.nodeLabelCfg, nodeLabelCfg = _e === void 0 ? defaultLabelCfg : _e, _f = uProps.edgeLabelCfg, edgeLabelCfg = _f === void 0 ? defaultLabelCfg : _f, _g = uProps.layout, layout6 = _g === void 0 ? defaultLayout7 : _g, _h = uProps.enableEdit, enableEdit = _h === void 0 ? false : _h, minimapCfg = uProps.minimapCfg, _j = uProps.nodeStyle, nodeStyle = _j === void 0 ? defaultNodeStyle3 : _j, _k = uProps.edgeStyle, edgeStyle = _k === void 0 ? defaultEdgeStyle2 : _k, _l = uProps.nodeStateStyles, nodeStateStyles = _l === void 0 ? defaultStateStyles2 : _l, _m = uProps.edgeStateStyles, edgeStateStyles = _m === void 0 ? defaultStateStyles2 : _m, _o = uProps.autoFit, autoFit = _o === void 0 ? true : _o, graphRef = uProps.graphRef, onReady = uProps.onReady, loading = uProps.loading, loadingTemplate = uProps.loadingTemplate, errorTemplate = uProps.errorTemplate; - var container2 = compat_module_default.useRef(null); - var graph = compat_module_default.useRef(null); - var graphId = getGraphId2(graph); - useGraph2(graphs[graphId], uProps, container2); - y2(function() { - var graphSize = getGraphSize2(width2, height, container2); - if (nodeType === "icon-node") { - customIconNode({ enableEdit }); - } - var graph2 = graphs[graphId]; - if (!graph2) { - graph2 = new es_default6.TreeGraph({ - container: container2.current, - width: graphSize[0], - height: graphSize[1], - linkCenter: true, - modes: { - default: ["drag-canvas", "zoom-canvas"] - }, - defaultNode: { - type: nodeType, - size: nodeSize, - style: nodeStyle, - labelCfg: nodeLabelCfg - }, - defaultEdge: { - type: edgeType, - style: edgeStyle, - labelCfg: edgeLabelCfg - }, - nodeStateStyles, - edgeStateStyles, - layout: layout6, - fitView: autoFit - }); - graphs[graphId] = graph2; - } - if (graphRef) { - graphRef.current = graph2; - } - processMinimap2(minimapCfg, graph2); - renderGraph2(graph2, data3); - if (onReady) { - onReady(graph2); - } - if (collapseExpand) { - graph2.addBehaviors({ - type: "collapse-expand" - }, "default"); - } - bindEvents(graph2, props); - return function() { - if (graphs[graphId]) { - graphs[graphId].destroy(); - delete graphs[graphId]; - } - }; - }, []); - return compat_module_default.createElement(errorBoundary_default2, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default2, { loadingTemplate }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}; -var organizationTreeGraph_default = OrganizationTreeGraphComponent; - -// node_modules/@ant-design/graphs/es/obsolescent/graphs/constants.js -var defaultStateStyles3 = { - hover: { - stroke: "#1890ff", - lineWidth: 2 - } -}; -var defaultNodeSize3 = [120, 40]; -var defaultNodeStyle4 = { - stroke: "#40a9ff" -}; -var defaultNodeAnchorPoints2 = [ - [0, 0.5], - [1, 0.5] -]; -var Margin = 6; -var defaultTitleLabelCfg = { - fill: "#fff", - fontSize: 12 -}; -var cardTitlePadding = 2; -var defaultLabelStyle2 = { - fill: "#000", - fontSize: 12 -}; -var defaultMinimapCfg3 = { - show: false, - size: [150, 100], - type: "keyShape" -}; - -// node_modules/@ant-design/graphs/es/obsolescent/graphs/utils.js -var __assign27 = function() { - __assign27 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign27.apply(this, arguments); -}; -var getGraphSize3 = function(width2, height, container2) { - var CANVAS_WIDTH; - var CANVAS_HEIGHT; - if (container2 && container2.current) { - CANVAS_WIDTH = container2.current.offsetWidth; - CANVAS_HEIGHT = container2.current.offsetHeight || 500; - } - if (!width2 && !CANVAS_WIDTH || !height && !CANVAS_HEIGHT) { - Log2.warn("\u8BF7\u4E3A Graph \u6307\u5B9A width \u4E0E height\uFF01\u5426\u5219\u5C06\u4F7F\u7528\u9ED8\u8BA4\u503C 500 * 500"); - return [500, 500]; - } - return [width2 || CANVAS_WIDTH || 500, height || CANVAS_HEIGHT || 500]; -}; -var bindDefaultEvents2 = function(graph, collapseExpand) { - if (collapseExpand) { - var onClick_1 = function(e4) { - var item = e4.item; - if (e4.target.get("name") === "collapse-icon") { - graph.updateItem(item, { - collapsed: !item.getModel().collapsed - }); - graph.layout(); - } - }; - graph.on("node:click", function(e4) { - onClick_1(e4); - }); - graph.on("node:touchstart", function(e4) { - onClick_1(e4); - }); - } -}; -var getDefaultEdgeArrowCfg = function(d3, arrowType, fill) { - if (d3 === void 0) { - d3 = 0; - } - if (arrowType === void 0) { - arrowType = "vee"; - } - if (fill === void 0) { - fill = "#ccc"; - } - return { - endArrow: { - path: es_default6.Arrow[arrowType](10, 10, d3), - fill, - d: d3 - } - }; -}; -var getContentAndStyle = function(cfg) { - if (typeof cfg === "string" || typeof cfg === "number") { - return { - text: cfg - }; - } - var content = cfg.content, style = cfg.style; - return { - text: content, - style - }; -}; -var getConfig = function(source, item, cfg) { - if (typeof source === "function") { - return source(item, cfg); - } - return source || {}; -}; -var uuid2 = function() { - return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c5) { - var r4 = Math.random() * 16 | 0; - var v3 = c5 == "x" ? r4 : r4 & 3 | 8; - return v3.toString(16); - }); -}; -var getGraphId3 = function(graph) { - if (graph.current) { - return graph.current; - } - graph.current = "IndentedTreeGraph-".concat(uuid2()); - return graph.current; -}; -var renderGraph3 = function(graph, data3) { - var originData = deepClone2(data3); - graph.data(originData); - graph.render(); -}; -var processMinimap3 = function(cfg, graph) { - if (cfg === void 0) { - cfg = {}; - } - if (!graph || graph.destroyed) - return; - if (cfg.show) { - var curMminimapCfg = Object.assign(defaultMinimapCfg3, cfg); - var minimap = new es_default6.Minimap(__assign27({}, curMminimapCfg)); - graph.addPlugin(minimap); - return minimap; - } - return null; -}; -var getMarkerPosition2 = function(direction3, size14) { - if (direction3 === void 0) { - direction3 = "right"; - } - var width2 = size14[0], height = size14[1]; - var x6 = 0; - var y5 = 0; - switch (direction3) { - case "top": - x6 = width2 / 2; - y5 = 0; - break; - case "right": - x6 = width2; - y5 = height / 2; - break; - case "bottom": - x6 = width2 / 2; - y5 = height; - break; - case "left": - x6 = 0; - y5 = height / 2; - break; - } - return { x: x6, y: y5 }; -}; -var useProps3 = function(props, defaultProps13) { - return __assign27(__assign27(__assign27({}, defaultProps13), props), { layout: __assign27(__assign27({}, defaultProps13 === null || defaultProps13 === void 0 ? void 0 : defaultProps13.layout), props === null || props === void 0 ? void 0 : props.layout) }); -}; - -// node_modules/@ant-design/graphs/es/obsolescent/graphs/customItems.js -var __assign28 = function() { - __assign28 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign28.apply(this, arguments); -}; -var registerCardNode = function() { - es_default6.registerNode("card", { - draw: function(cfg, group3) { - var _a6; - if (cfg === void 0) { - cfg = {}; - } - var title = cfg.title, body = cfg.body, footer = cfg.footer, collapseExpand = cfg.collapseExpand, children = cfg.children, markerPosition = cfg.markerPosition; - var size14 = cfg.size || [100, 30]; - var height = 0; - if (typeof size14 === "number") - size14 = [size14, size14]; - var style = __assign28({ radius: 2, fill: "#fff" }, cfg.style); - var color4 = style.stroke || cfg.color || "#5B8FF9"; - var radius = style.radius; - var shape = group3.addShape("rect", { - attrs: __assign28({ x: 0, y: 0, width: size14[0], height: size14[1], stroke: color4 }, style), - name: "main-box", - draggable: true - }); - var titleTextShape; - if (title) { - var _b = getContentAndStyle(title), text = _b.text, _c = _b.style, titleStyle = _c === void 0 ? cfg.titleStyle : _c; - titleTextShape = group3.addShape("text", { - attrs: __assign28(__assign28({ textBaseline: "top", x: Margin, y: cardTitlePadding, text }, defaultTitleLabelCfg), getConfig(titleStyle, group3)), - name: "title" - }); - } - var titleHeight = (titleTextShape ? titleTextShape.getBBox() : { height: size14[1] / 2 }).height; - var titleRectShape = group3.addShape("rect", { - attrs: { - x: 0, - y: 0, - width: size14[0], - height: titleHeight + 2 * cardTitlePadding, - fill: color4, - radius: [radius, radius, 0, 0] - }, - name: "title-rect", - draggable: true - }); - titleTextShape === null || titleTextShape === void 0 ? void 0 : titleTextShape.toFront(); - var markerShape; - if (collapseExpand && children) { - markerShape = group3.addShape("marker", { - attrs: __assign28(__assign28(__assign28({}, getMarkerPosition2(markerPosition, size14)), { r: 6, cursor: "pointer", symbol: cfg.collapsed ? es_default6.Marker.expand : es_default6.Marker.collapse, stroke: color4, lineWidth: 1, fill: "#fff" }), getConfig(cfg.markerStyle, group3, __assign28(__assign28({}, cfg), { name: "collapse-icon" }))), - name: "collapse-icon" - }); - } - var titleRectBoxHeight = titleRectShape.getBBox().height; - height += titleRectBoxHeight; - var bodyShape; - if (body) { - var _d = getContentAndStyle(body), text = _d.text, _e = _d.style, bodyStyle = _e === void 0 ? cfg.bodyStyle : _e; - bodyShape = group3.addShape("text", { - attrs: __assign28(__assign28({ textBaseline: "top", x: Margin, y: height + Margin, text }, defaultLabelStyle2), getConfig(bodyStyle, group3)), - name: "body" - }); - height += bodyShape.getBBox().height; - } - var footerTextShape; - if (footer) { - if (bodyShape) { - height += Margin; - } - var _f = getContentAndStyle(footer), labelText = _f.text, _g = _f.style, labelStyle = _g === void 0 ? cfg.footerStyle : _g; - footerTextShape = group3.addShape("text", { - attrs: __assign28(__assign28({ textBaseline: "top", x: Margin, y: height + Margin, text: labelText }, defaultLabelStyle2), getConfig(labelStyle, group3)), - name: "footer-label" - }); - var _h = footerTextShape.getBBox(), width2 = _h.width, contentHeight = _h.height; - var footerValueHeight = 0; - if (typeof cfg.footer === "object" && ((_a6 = cfg.footer) === null || _a6 === void 0 ? void 0 : _a6.value)) { - var _j = getContentAndStyle({ - content: cfg.footer.value, - style: cfg.footer.valueStyle - }), valueText = _j.text, _k = _j.style, valueStyle = _k === void 0 ? cfg.footerValueStyle || cfg.footerStyle : _k; - var valueTextShape = group3.addShape("text", { - attrs: __assign28(__assign28({ textBaseline: "top", x: width2 + Margin * 2, y: height + Margin, text: valueText }, defaultLabelStyle2), getConfig(valueStyle, group3)), - name: "footer-value" - }); - var valueHeight = valueTextShape.getBBox().height; - footerValueHeight = valueHeight; - } - height += Math.max(contentHeight, footerValueHeight); - } - if (bodyShape) { - var desTextShapeBBox = bodyShape.getBBox(); - var width2 = size14[0] > desTextShapeBBox.width + 16 ? size14[0] : desTextShapeBBox.width + 16; - shape.attr({ width: width2, height: height + 16 }); - titleRectShape === null || titleRectShape === void 0 ? void 0 : titleRectShape.attr("width", width2); - markerShape === null || markerShape === void 0 ? void 0 : markerShape.attr(__assign28({}, getMarkerPosition2(markerPosition, [width2, height + titleHeight + 2 * cardTitlePadding]))); - } - return shape; - }, - update: void 0 - }, "single-node"); -}; -var registerIconNode = function() { - es_default6.registerNode("icon-node", { - options: { - size: [60, 20], - stroke: "#91d5ff", - fill: "#91d5ff" - }, - draw: function(cfg, group3) { - if (cfg === void 0) { - cfg = {}; - } - var styles = this.getShapeStyle(cfg); - var _a6 = cfg.labelCfg, labelCfg = _a6 === void 0 ? {} : _a6, labelStyle = cfg.labelStyle, label17 = cfg.label, markerStyle = cfg.markerStyle, showMarker = cfg.showMarker, title = cfg.title, titleStyle = cfg.titleStyle; - var keyShape = group3.addShape("rect", { - attrs: __assign28(__assign28({}, styles), { x: 0, y: 0 }) - }); - var keyShapeHeight = keyShape.getBBox().height; - var headShape; - if (cfg.leftIcon) { - var _b = cfg.leftIcon, _c = _b.x, x6 = _c === void 0 ? 8 : _c, y5 = _b.y, _d = _b.width, width2 = _d === void 0 ? 24 : _d, _e = _b.height, height = _e === void 0 ? 24 : _e, style = _b.style; - if (style) { - group3.addShape("rect", { - attrs: __assign28({ x: 1, y: 1, width: 38, height: styles.height - 2 }, style) - }); - } - headShape = group3.addShape("image", { - attrs: { - x: x6, - y: y5 || keyShapeHeight / 2 - height / 2, - width: width2, - height, - img: cfg.leftIcon.img - }, - name: "image-shape" - }); - } - if (showMarker) { - group3.addShape("marker", { - attrs: __assign28({ x: styles.width / 3, y: styles.height + 6, r: 6, stroke: "#73d13d", cursor: "pointer", symbol: es_default6.Marker.expand }, getConfig(markerStyle, group3, __assign28(__assign28({}, cfg), { name: "add-item" }))), - name: "add-item" - }); - group3.addShape("marker", { - attrs: __assign28({ x: styles.width * 2 / 3, y: styles.height + 6, r: 6, stroke: "#ff4d4f", cursor: "pointer", symbol: es_default6.Marker.collapse }, getConfig(markerStyle, group3, __assign28(__assign28({}, cfg), { name: "remove-item" }))), - name: "remove-item" - }); - } - if (label17) { - var textCfg = labelStyle ? getConfig(labelStyle, group3, cfg) : labelCfg.style; - var y5 = title ? styles.height / 2 - (textCfg.fontSize * 1 || 12) - Margin / 2 : styles.height / 2; - group3.addShape("text", { - attrs: __assign28({ text: label17, x: styles.width / 2, y: y5, textAlign: headShape ? "start" : "center", textBaseline: title ? "top" : "middle" }, textCfg) - }); - } - if (title) { - var titleCfg = titleStyle ? getConfig(titleStyle, group3, cfg) : labelCfg.style; - group3.addShape("text", { - attrs: __assign28({ text: title, x: styles.width / 2, y: styles.height / 2 + Margin / 2, textAlign: headShape ? "start" : "center", textBaseline: "top" }, titleCfg) - }); - } - return keyShape; - } - }, "rect"); -}; - -// node_modules/@ant-design/graphs/es/obsolescent/graph/dagre.js -registerCustomItems(); -registerCardNode(); -var defaultNodeStyle5 = { - stroke: "#40a9ff" -}; -var defaultLayout8 = { - type: "dagre", - rankdir: "TB", - nodesepFunc: function() { - return 0; - }, - ranksepFunc: function() { - return 0; - }, - controlPoints: true -}; -var defaultProps7 = { - nodeType: "modelRect", - edgeType: "polyline", - behaviors: ["zoom-canvas", "drag-canvas"], - nodeSize: defaultNodeSize2, - nodeLabelCfg: defaultLabelCfg, - edgeLabelCfg: defaultLabelCfg, - nodeAnchorPoints: defaultNodeAnchorPoints, - layout: defaultLayout8, - nodeStyle: defaultNodeStyle5, - edgeStyle: defaultEdgeStyle, - nodeStateStyles: defaultStateStyles2, - edgeStateStyles: defaultStateStyles2, - autoFit: true -}; -var graphs2 = {}; -var DagreGraph = function(props) { - var uProps = useProps2(props, defaultProps7); - var data3 = uProps.data, className = uProps.className, style = uProps.style, width2 = uProps.width, height = uProps.height, _a6 = uProps.nodeType, nodeType = _a6 === void 0 ? "modelRect" : _a6, _b = uProps.edgeType, edgeType = _b === void 0 ? "polyline" : _b, _c = uProps.behaviors, behaviors2 = _c === void 0 ? ["zoom-canvas", "drag-canvas"] : _c, _d = uProps.nodeSize, nodeSize = _d === void 0 ? defaultNodeSize2 : _d, _e = uProps.nodeLabelCfg, nodeLabelCfg = _e === void 0 ? defaultLabelCfg : _e, _f = uProps.edgeLabelCfg, edgeLabelCfg = _f === void 0 ? defaultLabelCfg : _f, _g = uProps.nodeAnchorPoints, nodeAnchorPoints = _g === void 0 ? defaultNodeAnchorPoints : _g, _h = uProps.layout, layout6 = _h === void 0 ? defaultLayout8 : _h, minimapCfg = uProps.minimapCfg, _j = uProps.nodeStyle, nodeStyle = _j === void 0 ? defaultNodeStyle5 : _j, _k = uProps.edgeStyle, edgeStyle = _k === void 0 ? defaultEdgeStyle : _k, _l = uProps.nodeStateStyles, nodeStateStyles = _l === void 0 ? defaultStateStyles2 : _l, _m = uProps.edgeStateStyles, edgeStateStyles = _m === void 0 ? defaultStateStyles2 : _m, _o = uProps.autoFit, autoFit = _o === void 0 ? true : _o, graphRef = uProps.graphRef, onReady = uProps.onReady, loading = uProps.loading, loadingTemplate = uProps.loadingTemplate, errorTemplate = uProps.errorTemplate; - var container2 = compat_module_default.useRef(null); - var graph = compat_module_default.useRef(null); - var graphId = getGraphId2(graph); - useGraph2(graphs2[graphId], uProps, container2); - y2(function() { - var graphSize = getGraphSize2(width2, height, container2); - var graph2 = graphs2[graphId]; - if (!graph2) { - graph2 = new es_default6.Graph({ - container: container2.current, - width: graphSize[0], - height: graphSize[1], - modes: { - default: behaviors2 - }, - defaultNode: { - type: nodeType, - size: nodeSize, - style: nodeStyle, - anchorPoints: nodeAnchorPoints, - labelCfg: nodeLabelCfg - }, - defaultEdge: { - type: edgeType, - style: edgeStyle, - labelCfg: edgeLabelCfg - }, - nodeStateStyles, - edgeStateStyles, - layout: layout6, - fitView: autoFit - }); - graphs2[graphId] = graph2; - } - if (graphRef) { - graphRef.current = graph2; - } - processMinimap2(minimapCfg, graph2); - renderGraph2(graph2, data3); - if (onReady) { - onReady(graph2); - } - bindEvents(graph2, props); - return function() { - if (graphs2[graphId]) { - graphs2[graphId].destroy(); - delete graphs2[graphId]; - } - }; - }, []); - return compat_module_default.createElement(errorBoundary_default2, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default2, { loadingTemplate }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}; -var dagre_default2 = DagreGraph; - -// node_modules/@ant-design/graphs/es/obsolescent/graph/dagreFundFlow.js -registerCustomItems(); -var defaultNodeSize4 = [150, 30]; -var defaultNodeStyle6 = { - stroke: "#72CC4A", - fill: "#f00" -}; -var defaultLayout9 = { - type: "dagre", - rankdir: "LR", - nodesep: 30, - ranksep: 50 -}; -var defaultLabelCfg2 = { - style: { - fill: "#000000A6", - fontSize: 10 - } -}; -var defaultProps8 = { - nodeType: "round-rect", - edgeType: "fund-polyline", - behaviors: ["zoom-canvas", "drag-canvas"], - nodeSize: defaultNodeSize4, - nodeLabelCfg: defaultLabelCfg2, - edgeLabelCfg: defaultLabelCfg2, - nodeAnchorPoints: defaultNodeAnchorPoints, - layout: defaultLayout9, - nodeStyle: defaultNodeStyle6, - edgeStyle: defaultEdgeStyle, - nodeStateStyles: defaultStateStyles2, - edgeStateStyles: defaultStateStyles2, - colorMap: {}, - autoFit: true -}; -var graphs3 = {}; -var DagreFundFlowGraph = function(props) { - var uProps = useProps2(props, defaultProps8); - var data3 = uProps.data, className = uProps.className, style = uProps.style, width2 = uProps.width, height = uProps.height, _a6 = uProps.nodeType, nodeType = _a6 === void 0 ? "round-rect" : _a6, _b = uProps.edgeType, edgeType = _b === void 0 ? "fund-polyline" : _b, _c = uProps.behaviors, behaviors2 = _c === void 0 ? ["zoom-canvas", "drag-canvas"] : _c, _d = uProps.nodeSize, nodeSize = _d === void 0 ? defaultNodeSize4 : _d, _e = uProps.nodeLabelCfg, nodeLabelCfg = _e === void 0 ? defaultLabelCfg2 : _e, _f = uProps.edgeLabelCfg, edgeLabelCfg = _f === void 0 ? defaultLabelCfg2 : _f, _g = uProps.nodeAnchorPoints, nodeAnchorPoints = _g === void 0 ? defaultNodeAnchorPoints : _g, _h = uProps.layout, layout6 = _h === void 0 ? defaultLayout9 : _h, minimapCfg = uProps.minimapCfg, _j = uProps.nodeStyle, nodeStyle = _j === void 0 ? defaultNodeStyle6 : _j, _k = uProps.edgeStyle, edgeStyle = _k === void 0 ? defaultEdgeStyle : _k, _l = uProps.nodeStateStyles, nodeStateStyles = _l === void 0 ? defaultStateStyles2 : _l, _m = uProps.edgeStateStyles, edgeStateStyles = _m === void 0 ? defaultStateStyles2 : _m, _o = uProps.colorMap, colorMap2 = _o === void 0 ? {} : _o, _p = uProps.autoFit, autoFit = _p === void 0 ? true : _p, graphRef = uProps.graphRef, onReady = uProps.onReady, loading = uProps.loading, loadingTemplate = uProps.loadingTemplate, errorTemplate = uProps.errorTemplate; - var container2 = compat_module_default.useRef(null); - var graph = compat_module_default.useRef(null); - var graphId = getGraphId2(graph); - useGraph2(graphs3[graphId], uProps, container2); - y2(function() { - var graphSize = getGraphSize2(width2, height, container2); - var graph2 = graphs3[graphId]; - if (!graph2) { - graph2 = new es_default6.Graph({ - container: container2.current, - width: graphSize[0], - height: graphSize[1], - modes: { - default: behaviors2 - }, - defaultNode: { - type: nodeType, - size: nodeSize, - style: nodeStyle, - anchorPoints: nodeAnchorPoints, - labelCfg: nodeLabelCfg - }, - defaultEdge: { - type: edgeType, - style: edgeStyle, - colorMap: colorMap2, - labelCfg: edgeLabelCfg - }, - nodeStateStyles, - edgeStateStyles, - layout: layout6, - fitView: autoFit - }); - graphs3[graphId] = graph2; - } - if (graphRef) { - graphRef.current = graph2; - } - processMinimap2(minimapCfg, graph2); - var originData = deepClone2(data3); - graph2.data(originData); - graph2.render(); - if (onReady) { - onReady(graph2); - } - var edges = graph2.getEdges(); - edges.forEach(function(edge2) { - var line2 = edge2.getKeyShape(); - var stroke = line2.attr("stroke"); - var targetNode = edge2.getTarget(); - targetNode.update({ - style: { - stroke - } - }); - }); - bindEvents(graph2, props); - return function() { - if (graphs3[graphId]) { - graphs3[graphId].destroy(); - delete graphs3[graphId]; - } - }; - }, []); - return compat_module_default.createElement(errorBoundary_default2, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default2, { loadingTemplate }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}; -var dagreFundFlow_default = DagreFundFlowGraph; - -// node_modules/@ant-design/graphs/es/obsolescent/graph/indented.js -registerCustomItems(); -var defaultNodeStyle7 = { - stroke: "#40a9ff" -}; -var defaultNodeAnchorPoints3 = [ - [0, 0.5], - [1, 0.5] -]; -var defaultEdgeStyle3 = { - stroke: "#ccc", - endArrow: { - path: es_default6.Arrow.vee(10, 10), - fill: "#ccc" - } -}; -var defaultLayout10 = { - type: "indented", - direction: "LR", - dropCap: false, - indent: 250, - getHeight: function() { - return 60; - }, - getWidth: function() { - return 100; - } -}; -var defaultProps9 = { - nodeType: "card-node", - edgeType: "cubic-horizontal", - behaviors: ["zoom-canvas", "drag-canvas"], - nodeSize: defaultNodeSize2, - nodeLabelCfg: defaultLabelCfg, - nodeAnchorPoints: defaultNodeAnchorPoints3, - layout: defaultLayout10, - nodeStyle: defaultNodeStyle7, - edgeStyle: defaultEdgeStyle3, - nodeStateStyles: defaultStateStyles2, - edgeStateStyles: defaultStateStyles2, - collapseExpand: true, - autoFit: true -}; -var graphs4 = {}; -var IndentedTree = function(props) { - var uProps = useProps2(props, defaultProps9); - var data3 = uProps.data, className = uProps.className, style = uProps.style, width2 = uProps.width, height = uProps.height, _a6 = uProps.nodeType, nodeType = _a6 === void 0 ? "card-node" : _a6, _b = uProps.edgeType, edgeType = _b === void 0 ? "cubic-horizontal" : _b, _c = uProps.behaviors, behaviors2 = _c === void 0 ? ["zoom-canvas", "drag-canvas"] : _c, _d = uProps.nodeSize, nodeSize = _d === void 0 ? defaultNodeSize2 : _d, _e = uProps.nodeLabelCfg, nodeLabelCfg = _e === void 0 ? defaultLabelCfg : _e, _f = uProps.nodeAnchorPoints, nodeAnchorPoints = _f === void 0 ? defaultNodeAnchorPoints3 : _f, _g = uProps.layout, layout6 = _g === void 0 ? defaultLayout10 : _g, minimapCfg = uProps.minimapCfg, _h = uProps.nodeStyle, nodeStyle = _h === void 0 ? defaultNodeStyle7 : _h, _j = uProps.edgeStyle, edgeStyle = _j === void 0 ? defaultEdgeStyle3 : _j, _k = uProps.nodeStateStyles, nodeStateStyles = _k === void 0 ? defaultStateStyles2 : _k, _l = uProps.edgeStateStyles, edgeStateStyles = _l === void 0 ? defaultStateStyles2 : _l, _m = uProps.collapseExpand, collapseExpand = _m === void 0 ? true : _m, _o = uProps.autoFit, autoFit = _o === void 0 ? true : _o, handleNodeClick = uProps.handleNodeClick, graphRef = uProps.graphRef, onReady = uProps.onReady, loading = uProps.loading, loadingTemplate = uProps.loadingTemplate, errorTemplate = uProps.errorTemplate; - var graph = compat_module_default.useRef(null); - var graphId = getGraphId2(graph); - var container2 = compat_module_default.useRef(null); - useGraph2(graphs4[graphId], uProps, container2); - y2(function() { - var graphSize = getGraphSize2(width2, height, container2); - var graph2 = graphs4[graphId]; - if (!graph2) { - graph2 = new es_default6.TreeGraph({ - container: container2.current, - width: graphSize[0], - height: graphSize[1], - modes: { - default: behaviors2 - }, - defaultNode: { - type: nodeType, - size: nodeSize, - style: nodeStyle, - anchorPoints: nodeAnchorPoints, - labelCfg: nodeLabelCfg - }, - defaultEdge: { - type: edgeType, - style: edgeStyle - }, - nodeStateStyles, - edgeStateStyles, - layout: layout6, - fitView: autoFit - }); - graphs4[graphId] = graph2; - } - if (graphRef) { - graphRef.current = graph2; - } - processMinimap2(minimapCfg, graph2); - renderGraph2(graph2, data3); - if (onReady) { - onReady(graph2); - } - if (collapseExpand) { - var onClick_1 = function(e4) { - var item = e4.item; - if (e4.target.get("name") === "collapse-icon") { - graph2.updateItem(item, { - collapsed: !item.getModel().collapsed - }); - graph2.layout(); - } else if (handleNodeClick) { - handleNodeClick(item, graph2); - } - }; - graph2.on("node:click", function(e4) { - onClick_1(e4); - }); - graph2.on("node:touchstart", function(e4) { - onClick_1(e4); - }); - } - bindEvents(graph2, props); - return function() { - if (graphs4[graphId]) { - graphs4[graphId].destroy(); - delete graphs4[graphId]; - } - }; - }, []); - return compat_module_default.createElement(errorBoundary_default2, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default2, { loadingTemplate }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}; -var indented_default = IndentedTree; - -// node_modules/@ant-design/graphs/es/obsolescent/graphs/indentedTreeGraph/index.js -var __assign29 = function() { - __assign29 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign29.apply(this, arguments); -}; -var graphs5 = {}; -registerCardNode(); -var defaultLayout11 = { - type: "compactBox", - direction: "LR", - getId: function(d3) { - return d3.id; - }, - getHeight: function() { - return 60; - }, - getWidth: function() { - return 16; - }, - getVGap: function() { - return 16; - }, - getHGap: function() { - return 100; - } -}; -var defaultProps10 = { - nodeType: "card", - edgeType: "cubic-horizontal", - behaviors: ["zoom-canvas", "drag-canvas"], - nodeAnchorPoints: defaultNodeAnchorPoints2, - nodeSize: defaultNodeSize3, - layout: defaultLayout11, - animate: true, - markerPosition: "right", - nodeStateStyles: defaultStateStyles3, - edgeStateStyles: defaultStateStyles3, - collapseExpand: true, - showArrow: true, - arrowType: "vee", - autoFit: true, - style: { - height: "inherit" - } -}; -var IndentedTreeGraph = function(props) { - var uProps = useProps3(props, defaultProps10); - var data3 = uProps.data, className = uProps.className, style = uProps.style, width2 = uProps.width, height = uProps.height, _a6 = uProps.nodeType, nodeType = _a6 === void 0 ? "card" : _a6, _b = uProps.edgeType, edgeType = _b === void 0 ? "cubic-horizontal" : _b, _c = uProps.behaviors, behaviors2 = _c === void 0 ? ["zoom-canvas", "drag-canvas"] : _c, _d = uProps.nodeAnchorPoints, nodeAnchorPoints = _d === void 0 ? defaultNodeAnchorPoints2 : _d, _e = uProps.nodeSize, nodeSize = _e === void 0 ? defaultNodeSize3 : _e, layout6 = uProps.layout, _f = uProps.animate, animate = _f === void 0 ? true : _f, nodeStyle = uProps.nodeStyle, edgeStyle = uProps.edgeStyle, edgeCfg = uProps.edgeCfg, markerStyle = uProps.markerStyle, _g = uProps.markerPosition, markerPosition = _g === void 0 ? "right" : _g, _h = uProps.nodeStateStyles, nodeStateStyles = _h === void 0 ? defaultStateStyles3 : _h, _j = uProps.edgeStateStyles, edgeStateStyles = _j === void 0 ? defaultStateStyles3 : _j, _k = uProps.collapseExpand, collapseExpand = _k === void 0 ? true : _k, titleStyle = uProps.titleStyle, bodyStyle = uProps.bodyStyle, footerStyle = uProps.footerStyle, footerValueStyle = uProps.footerValueStyle, _l = uProps.showArrow, showArrow = _l === void 0 ? true : _l, _m = uProps.arrowType, arrowType = _m === void 0 ? "vee" : _m, _o = uProps.autoFit, autoFit = _o === void 0 ? true : _o, onReady = uProps.onReady, loading = uProps.loading, loadingTemplate = uProps.loadingTemplate, errorTemplate = uProps.errorTemplate; - var container2 = compat_module_default.useRef(null); - var graph = compat_module_default.useRef(null); - var graphId = getGraphId3(graph); - useGraph2(graphs5[graphId], uProps, container2); - y2(function() { - var graphSize = getGraphSize3(width2, height, container2); - var graph2 = graphs5[graphId]; - if (!graph2) { - graph2 = new es_default6.TreeGraph({ - container: container2.current, - width: graphSize[0], - height: graphSize[1], - animate, - modes: { - default: behaviors2 - }, - defaultNode: { - type: nodeType, - size: nodeSize, - anchorPoints: nodeAnchorPoints, - titleStyle, - bodyStyle, - footerStyle, - footerValueStyle, - markerStyle, - collapseExpand, - markerPosition - }, - defaultEdge: { - type: edgeType - }, - nodeStateStyles, - edgeStateStyles, - layout: layout6, - fitView: autoFit - }); - graphs5[graphId] = graph2; - } - graph2.node(function(node) { - if (typeof nodeStyle === "function") { - return { - style: nodeStyle(node, graph2) - }; - } - return { - style: __assign29(__assign29({}, defaultNodeStyle4), nodeStyle) - }; - }); - graph2.edge(function(edge2) { - if (edgeCfg) { - return typeof edgeCfg === "function" ? edgeCfg(edge2, graph2) : edgeCfg; - } - if (typeof edgeStyle === "function") { - return { - style: edgeStyle(edge2, graph2) - }; - } - return { - style: __assign29(__assign29({ stroke: "#ccc" }, showArrow && getDefaultEdgeArrowCfg(0, arrowType)), edgeStyle) - }; - }); - if (collapseExpand) { - bindDefaultEvents2(graph2, collapseExpand); - } - renderGraph3(graph2, data3); - if (onReady) { - onReady(graph2); - } - return function() { - if (graphs5[graphId]) { - graphs5[graphId].destroy(); - delete graphs5[graphId]; - } - }; - }, []); - return compat_module_default.createElement(errorBoundary_default2, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default2, { loadingTemplate }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}; -var indentedTreeGraph_default = IndentedTreeGraph; - -// node_modules/@ant-design/graphs/es/obsolescent/graphs/organizationalGraph/index.js -var __assign30 = function() { - __assign30 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign30.apply(this, arguments); -}; -var defaultNodeStyle8 = { - fill: "#91d5ff", - stroke: "#40a9ff", - radius: 2 -}; -var defaultLayout12 = { - type: "compactBox", - direction: "TB", - getId: function getId3(d3) { - return d3.id; - }, - getHeight: function getHeight5() { - return 16; - }, - getWidth: function getWidth3() { - return 16; - }, - getVGap: function getVGap3() { - return 40; - }, - getHGap: function getHGap3() { - return 70; - } -}; -var defaultProps11 = { - animate: true, - nodeType: "rect", - edgeType: "polyline", - nodeSize: defaultNodeSize3, - behaviors: ["drag-canvas", "zoom-canvas"], - nodeLabelCfg: { - style: defaultLabelStyle2 - }, - layout: defaultLayout12, - showMarker: false, - showArrow: true, - arrowType: "triangle", - nodeStateStyles: defaultStateStyles3, - edgeStateStyles: defaultStateStyles3, - autoFit: true, - style: { - height: "inherit" - } -}; -var graphs6 = {}; -var OrganizationalGraph = function(props) { - var uProps = useProps3(props, defaultProps11); - var data3 = uProps.data, className = uProps.className, style = uProps.style, width2 = uProps.width, height = uProps.height, _a6 = uProps.animate, animate = _a6 === void 0 ? true : _a6, _b = uProps.nodeType, nodeType = _b === void 0 ? "rect" : _b, _c = uProps.edgeType, edgeType = _c === void 0 ? "polyline" : _c, _d = uProps.nodeSize, nodeSize = _d === void 0 ? defaultNodeSize3 : _d, _e = uProps.behaviors, behaviors2 = _e === void 0 ? ["drag-canvas", "zoom-canvas"] : _e, nodeLabelCfg = uProps.nodeLabelCfg, nodeCfg = uProps.nodeCfg, _f = uProps.layout, layout6 = _f === void 0 ? defaultLayout12 : _f, _g = uProps.showMarker, showMarker = _g === void 0 ? false : _g, _h = uProps.showArrow, showArrow = _h === void 0 ? true : _h, _j = uProps.arrowType, arrowType = _j === void 0 ? "triangle" : _j, minimapCfg = uProps.minimapCfg, edgeCfg = uProps.edgeCfg, markerStyle = uProps.markerStyle, _k = uProps.nodeStateStyles, nodeStateStyles = _k === void 0 ? defaultStateStyles3 : _k, _l = uProps.edgeStateStyles, edgeStateStyles = _l === void 0 ? defaultStateStyles3 : _l, _m = uProps.autoFit, autoFit = _m === void 0 ? true : _m, onReady = uProps.onReady, loading = uProps.loading, loadingTemplate = uProps.loadingTemplate, errorTemplate = uProps.errorTemplate; - var container2 = compat_module_default.useRef(null); - var graph = compat_module_default.useRef(null); - var graphId = getGraphId3(graph); - useGraph2(graphs6[graphId], uProps, container2); - var arrowOffset = (Array.isArray(nodeSize) ? nodeSize[1] : nodeSize) / 2; - y2(function() { - var graphSize = getGraphSize3(width2, height, container2); - if (nodeType === "icon-node") { - registerIconNode(); - } - var graph2 = graphs6[graphId]; - if (!graph2) { - graph2 = new es_default6.TreeGraph({ - container: container2.current, - width: graphSize[0], - height: graphSize[1], - linkCenter: true, - animate, - modes: { - default: behaviors2 - }, - defaultNode: { - type: nodeType, - size: nodeSize, - labelCfg: nodeLabelCfg, - markerStyle, - showMarker - }, - defaultEdge: { - type: edgeType - }, - nodeStateStyles, - edgeStateStyles, - layout: layout6, - fitView: autoFit - }); - graphs6[graphId] = graph2; - } - graph2.node(function(node) { - if (typeof nodeCfg === "function") { - return nodeCfg(node, graph2); - } - return { - style: __assign30(__assign30({}, defaultNodeStyle8), nodeCfg === null || nodeCfg === void 0 ? void 0 : nodeCfg.style) - }; - }); - graph2.edge(function(edge2) { - if (typeof edgeCfg === "function") { - return edgeCfg(edge2, graph2); - } - return __assign30(__assign30({}, edgeCfg), { style: __assign30(__assign30({ stroke: "#91d5ff" }, showArrow && getDefaultEdgeArrowCfg(arrowOffset, arrowType, "#91d5ff")), edgeCfg === null || edgeCfg === void 0 ? void 0 : edgeCfg.style) }); - }); - processMinimap3(minimapCfg, graph2); - renderGraph3(graph2, data3); - if (onReady) { - onReady(graph2); - } - return function() { - if (graphs6[graphId]) { - graphs6[graphId].destroy(); - delete graphs6[graphId]; - } - }; - }, []); - return compat_module_default.createElement(errorBoundary_default2, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default2, { loadingTemplate }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}; -var organizationalGraph_default = OrganizationalGraph; - -// node_modules/@ant-design/graphs/es/obsolescent/graphs/radialGraph/index.js -var __assign31 = function() { - __assign31 = Object.assign || function(t4) { - for (var s4, i4 = 1, n3 = arguments.length; i4 < n3; i4++) { - s4 = arguments[i4]; - for (var p4 in s4) - if (Object.prototype.hasOwnProperty.call(s4, p4)) - t4[p4] = s4[p4]; - } - return t4; - }; - return __assign31.apply(this, arguments); -}; -var graphs7 = {}; -var defaultLayout13 = { - type: "dendrogram", - direction: "LR", - nodeSep: 20, - rankSep: 100, - radial: true -}; -var defaultProps12 = { - nodeType: "circle", - linkCenter: true, - edgeType: "line", - behaviors: ["zoom-canvas", "drag-canvas"], - nodeAnchorPoints: defaultNodeAnchorPoints2, - nodeSize: 30, - layout: defaultLayout13, - animate: true, - nodeStateStyles: defaultStateStyles3, - edgeStateStyles: defaultStateStyles3, - showArrow: false, - arrowType: "triangle", - autoFit: true -}; -var RadialGraph = function(props) { - var uProps = useProps3(props, defaultProps12); - var data3 = uProps.data, className = uProps.className, style = uProps.style, width2 = uProps.width, height = uProps.height, _a6 = uProps.nodeType, nodeType = _a6 === void 0 ? "circle" : _a6, _b = uProps.linkCenter, linkCenter = _b === void 0 ? true : _b, _c = uProps.edgeType, edgeType = _c === void 0 ? "line" : _c, _d = uProps.behaviors, behaviors2 = _d === void 0 ? ["zoom-canvas", "drag-canvas"] : _d, _e = uProps.nodeAnchorPoints, nodeAnchorPoints = _e === void 0 ? defaultNodeAnchorPoints2 : _e, _f = uProps.nodeSize, nodeSize = _f === void 0 ? 30 : _f, layout6 = uProps.layout, _g = uProps.animate, animate = _g === void 0 ? true : _g, nodeCfg = uProps.nodeCfg, edgeCfg = uProps.edgeCfg, _h = uProps.nodeStateStyles, nodeStateStyles = _h === void 0 ? defaultStateStyles3 : _h, _j = uProps.edgeStateStyles, edgeStateStyles = _j === void 0 ? defaultStateStyles3 : _j, _k = uProps.showArrow, showArrow = _k === void 0 ? false : _k, _l = uProps.arrowType, arrowType = _l === void 0 ? "triangle" : _l, _m = uProps.autoFit, autoFit = _m === void 0 ? true : _m, onReady = uProps.onReady, loading = uProps.loading, loadingTemplate = uProps.loadingTemplate, errorTemplate = uProps.errorTemplate; - var container2 = compat_module_default.useRef(null); - var graph = compat_module_default.useRef(null); - var graphId = getGraphId3(graph); - useGraph2(graphs7[graphId], uProps, container2); - var arrowOffset = (Array.isArray(nodeSize) ? nodeSize[0] : nodeSize) / 2; - y2(function() { - var graphSize = getGraphSize3(width2, height, container2); - var graph2 = graphs7[graphId]; - if (!graph2) { - graph2 = new es_default6.TreeGraph({ - container: container2.current, - width: graphSize[0], - height: graphSize[1], - animate, - linkCenter, - modes: { - default: behaviors2 - }, - defaultNode: { - type: nodeType, - size: nodeSize, - anchorPoints: nodeAnchorPoints - }, - defaultEdge: { - type: edgeType - }, - nodeStateStyles, - edgeStateStyles, - layout: layout6, - fitView: autoFit - }); - graphs7[graphId] = graph2; - } - graph2.node(function(node) { - if (typeof nodeCfg === "function") { - return nodeCfg(node, graph2); - } - return __assign31(__assign31({}, nodeCfg), { style: __assign31(__assign31({}, defaultNodeStyle4), nodeCfg === null || nodeCfg === void 0 ? void 0 : nodeCfg.style) }); - }); - graph2.edge(function(edge2) { - if (typeof edgeCfg === "function") { - return edgeCfg(edge2, graph2); - } - return { - style: __assign31(__assign31({ stroke: "#ccc" }, showArrow && getDefaultEdgeArrowCfg(arrowOffset, arrowType)), edgeCfg === null || edgeCfg === void 0 ? void 0 : edgeCfg.style) - }; - }); - renderGraph3(graph2, data3); - if (onReady) { - onReady(graph2); - } - return function() { - if (graphs7[graphId]) { - graphs7[graphId].destroy(); - delete graphs7[graphId]; - } - }; - }, []); - return compat_module_default.createElement(errorBoundary_default2, { errorTemplate }, loading && compat_module_default.createElement(createLoading_default2, { loadingTemplate }), compat_module_default.createElement("div", { className, style, ref: container2 })); -}; -var radialGraph_default = RadialGraph; - -// src/components/Chart.tsx -esm_exports3.registerTheme("theme1", { - colors10: ["#FF6B3B", "#626681", "#FFC100", "#9FB40F", "#76523B", "#DAD5B5", "#0E8E89", "#E19348", "#F383A2", "#247FEA"], - colors20: ["#FF6B3B", "#626681", "#FFC100", "#9FB40F", "#76523B", "#DAD5B5", "#0E8E89", "#E19348", "#F383A2", "#247FEA", "#2BCB95", "#B1ABF4", "#1D42C2", "#1D9ED1", "#D64BC0", "#255634", "#8C8C47", "#8CDAE5", "#8E283B", "#791DC9"] -}); -esm_exports3.registerTheme("theme2", { - "colors10": ["#025DF4", "#DB6BCF", "#2498D1", "#BBBDE6", "#4045B2", "#21A97A", "#FF745A", "#007E99", "#FFA8A8", "#2391FF"], - "colors20": ["#025DF4", "#DB6BCF", "#2498D1", "#BBBDE6", "#4045B2", "#21A97A", "#FF745A", "#007E99", "#FFA8A8", "#2391FF", "#FFC328", "#A0DC2C", "#946DFF", "#626681", "#EB4185", "#CD8150", "#36BCCB", "#327039", "#803488", "#83BC99"] -}); -var Chart2 = ({ type: type2, config, showExportBtn = false }) => { - const Component4 = es_exports[type2] || es_exports3[type2]; - const ref = s3(); - let exportBtn; - if (showExportBtn) { - const downloadImage = () => { - var _a6; - (_a6 = ref.current) == null ? void 0 : _a6.downloadImage(`${type2}.png`); - }; - exportBtn = /* @__PURE__ */ compat_module_default.createElement("div", { - className: "chartsview-export-button", - "aria-label": "Export to PNG", - onClick: downloadImage - }, /* @__PURE__ */ compat_module_default.createElement("svg", { - className: "code-glyph", - viewBox: "0 0 1024 1024", - width: "16", - height: "16" - }, /* @__PURE__ */ compat_module_default.createElement("path", { - fill: "currentColor", - stroke: "currentColor", - d: "M896 166.4H128c-25.6 0-42.666667 17.066667-42.666667 42.666667v597.333333c0 25.6 17.066667 42.666667 42.666667 42.666667h768c25.6 0 42.666667-17.066667 42.666667-42.666667v-597.333333c0-25.6-21.333333-42.666667-42.666667-42.666667z m-42.666667 85.333333v418.133334l-136.533333-136.533334c-21.333333-12.8-51.2-12.8-64 4.266667L554.666667 635.733333l-183.466667-179.2c-17.066667-17.066667-46.933333-17.066667-59.733333 0L170.666667 597.333333V251.733333h682.666666z m-243.2 443.733334l76.8-76.8 136.533334 140.8h-145.066667l-68.266667-64zM170.666667 716.8l170.666666-170.666667 217.6 217.6H170.666667v-46.933333z" - }), /* @__PURE__ */ compat_module_default.createElement("path", { - fill: "currentColor", - stroke: "currentColor", - d: "M716.8 396.8m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0Z" - }))); - } - return /* @__PURE__ */ compat_module_default.createElement(errorBoundary_default, null, exportBtn, /* @__PURE__ */ compat_module_default.createElement(Component4, __spreadProps(__spreadValues({}, config), { - onReady: (chart) => { - ref.current = chart; - if (chart instanceof Plot) { - const custom12 = {}; - if (config.theme && config.backgroundColor) { - custom12.theme = { background: config.backgroundColor }; - } - if (config.padding) { - custom12.padding = config.padding; - } - if (custom12.theme || config.padding) { - chart.update(custom12); - } - } - } - }))); -}; - -// src/parser.ts -var import_obsidian2 = __toModule(require("obsidian")); - -// src/tools.ts -var import_papaparse = __toModule(require_papaparse_min()); -var import_obsidian = __toModule(require("obsidian")); -function insertEditor(editor, data3) { - editor.somethingSelected ? editor.replaceSelection(data3) : editor.setLine(editor.getCursor().line, data3); -} -function getFolderOptions(app) { - const options = {}; - import_obsidian.Vault.recurseChildren(app.vault.getRoot(), (f3) => { - if (f3 instanceof import_obsidian.TFolder) { - options[f3.path] = f3.path; - } - }); - return options; -} -function parseCsv(content) { - return import_papaparse.default.parse(content, { - header: true, - skipEmptyLines: true, - comments: false, - dynamicTyping: true - }).data; -} -function getWordCountRegex() { - const spaceDelimitedChars = /A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source; - const nonSpaceDelimitedWords = /\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u4E00-\u9FD5/.source; - const nonSpaceDelimitedWordsOther = /[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u4E00-\u9FD5]{1}/.source; - return new RegExp([ - `(?:[0-9]+(?:(?:,|\\.)[0-9]+)*|[\\-${spaceDelimitedChars}])+`, - nonSpaceDelimitedWords, - nonSpaceDelimitedWordsOther - ].join("|"), "g"); -} -function getWordCount(text, filter17) { - const words = {}; - const matchs = text.match(getWordCountRegex()); - if (matchs) { - matchs.forEach((match) => { - match = match.toLowerCase(); - words[match] = words[match] ? words[match] + 1 : 1; - }); - } - const wordCount = []; - const ignoreRegex = new RegExp(filter17.split("\n").map((e4) => ["^", e4.trim(), "$"].join("")).join("|"), "i"); - for (const word2 in words) { - if (!ignoreRegex.test(word2)) { - wordCount.push({ word: word2, count: words[word2] }); - } - } - return wordCount; -} - -// src/parser.ts -var import_obsidian_dataview = __toModule(require_lib5()); -var functionRegex = /^\s*function\s*.*\(.*\)\s*\{[\w\W]*\}\s*/i; -function parseConfig(content, plugin, sourcePath) { - return __async(this, null, function* () { - const dataProps = (0, import_obsidian2.parseYaml)(content); - const type2 = dataProps.type; - const chart = es_exports[type2] || es_exports3[type2]; - if (chart === void 0) { - throw new Error(`Unsupported chart type ${type2}.`); - } - const data3 = dataProps.data; - const options = stringToFunction(dataProps.options || {}); - if (type2 == "MultiView" || type2 == "Mix") { - return { - type: type2, - config: yield parseMultiViewConfig(dataProps, data3, options, plugin, sourcePath) - }; - } else { - return { - type: type2, - config: __spreadValues({ data: yield loadFromFile(data3, plugin, sourcePath) }, options) - }; - } - }); -} -function stringToFunction(options) { - for (const key in options) { - const value2 = options[key]; - if (value2) { - if (typeof value2 === "string" && functionRegex.test(value2)) { - options[key] = (0, eval)(`(${value2})`); - } else if (Array.isArray(value2)) { - options[key] = value2.map(stringToFunction); - } else if (typeof value2 === "object") { - options[key] = stringToFunction(value2); - } - } - } - return options; -} -function parseMultiViewConfig(dataProps, data3, options, plugin, sourcePath) { - return __async(this, null, function* () { - const temp = new Map(); - const views = []; - for (const key in dataProps) { - const keyParts = key.split("."); - if (keyParts.length !== 2 || keyParts[0] !== "options" && keyParts[0] !== "data") { - continue; - } - const viewType = keyParts[1]; - const view = temp.get(viewType) || {}; - view[keyParts[0]] = dataProps[key]; - temp.set(viewType, view); - } - for (const v3 of temp.values()) { - views.push(__spreadValues({ data: (yield loadFromFile(v3["data"], plugin, sourcePath)) || data3 }, stringToFunction(v3["options"] || {}))); - } - return __spreadValues({ views }, options); - }); -} -function loadFromFile(data3, plugin, sourcePath) { - return __async(this, null, function* () { - if (typeof data3 === "string") { - if (data3.startsWith("wordcount:")) { - return loadFromMdWordCount(data3.replace("wordcount:", ""), plugin); - } else if (data3.startsWith("dataviewjs:")) { - return loadFromDataViewPlugin(data3.replace("dataviewjs:", ""), plugin, sourcePath); - } else { - return loadFromCsv(data3, plugin); - } - } else { - return data3; - } - }); -} -var dataViewApiProxy = function(api, currentFilePath) { - return { - pagePaths: function(query) { - return api.pagePaths(query, currentFilePath); - }, - page: function(path) { - return api.page(path, currentFilePath); - }, - pages: function(query) { - return api.pages(query, currentFilePath); - }, - current: function() { - return api.page(currentFilePath, currentFilePath); - }, - array: function(raw) { - return api.array(raw); - }, - isArray: function(raw) { - return api.isArray(raw); - }, - fileLink: function(path, embed, display) { - return import_obsidian_dataview.Link.file(path, embed, display); - }, - date: function(pathlike) { - return api.date(pathlike); - } - }; -}; -function loadFromDataViewPlugin(content, plugin, sourcePath) { - return __async(this, null, function* () { - var _a6; - if (plugin.app.plugins.enabledPlugins.has("dataview")) { - const api = (_a6 = plugin.app.plugins.plugins.dataview) == null ? void 0 : _a6.api; - if (api) { - return new Function("dv", content).call(void 0, dataViewApiProxy(api, sourcePath)); - } else { - throw new Error(`Obsidian Dataview is not ready.`); - } - } else { - throw new Error(`Obsidian Dataview is required.`); - } - }); -} -function loadFromMdWordCount(fileName, plugin) { - return __async(this, null, function* () { - const fileOrPaths = fileName.split(","); - const contents = []; - for (const file of plugin.app.vault.getMarkdownFiles()) { - if (file.basename == fileName || fileOrPaths.contains(file.basename) || containedParent(file.parent, fileOrPaths)) { - const content = yield plugin.app.vault.cachedRead(file); - contents.push(content); - } - } - if (contents.length == 0) { - throw new Error("No words found."); - } - return getWordCount(contents.join("\n"), plugin.settings.wordCountFilter); - }); -} -function containedParent(folder, fileOrPaths) { - const contained = fileOrPaths.contains(`${folder.name}/`); - if (contained || folder.parent == void 0) { - return contained; - } else { - return containedParent(folder.parent, fileOrPaths); - } -} -function loadFromCsv(data3, plugin) { - return __async(this, null, function* () { - const csvFileNames = data3.split(","); - const value2 = []; - for (const name of csvFileNames.values()) { - const path = plugin.settings.dataPath === "/" ? "" : `${plugin.settings.dataPath}/`; - const file = plugin.app.vault.getAbstractFileByPath(`${path}${name.trim()}`); - if (file instanceof import_obsidian2.TFile) { - value2.push(parseCsv(yield plugin.app.vault.read(file))); - } else { - value2.push({}); - } - } - if (value2.length == 0) { - return {}; - } - if (value2.length == 1) { - return value2[0]; - } - return value2; - }); -} - -// src/settings.tsx -var import_obsidian3 = __toModule(require("obsidian")); -var DEFAULT_SETTINGS = { - theme: "default", - dataPath: "", - backgroundColor: "transparent", - paddingTop: 30, - paddingRight: 30, - paddingBottom: 30, - paddingLeft: 30, - showExportBtn: false, - wordCountFilter: `[A-z]{1,2} + `},zoomSensitivity:2}},e.prototype.init=function(){var t=this,n=this.get("graph"),i=this.get("getContent"),a=i(n),o=a;(0,cx.isString)(a)&&(o=en(a));var s=this.get("className");o.setAttribute("class",s||"g6-component-toolbar");var l=this.get("container");l||(l=this.get("graph").get("container")),(0,cx.isString)(l)&&(l=document.getElementById(l)),l.appendChild(o),this.set("toolBar",o);var u=this.get("handleClick");o.addEventListener("click",function(c){var h=ude(c).filter(function(p){return p.nodeName==="LI"});if(h.length!==0){var d=h[0].getAttribute("code");!d||(u?u(d,n):t.handleDefaultOperator(d,n))}});var f=this.get("position");f&&yr(o,{top:"".concat(f.y,"px"),left:"".concat(f.x,"px")}),this.bindUndoRedo()},e.prototype.bindUndoRedo=function(){var t=this.get("graph"),n=document.querySelector('.g6-component-toolbar li[code="undo"]'),i=document.querySelector('.g6-component-toolbar li[code="undo"] svg'),a=document.querySelector('.g6-component-toolbar li[code="redo"]'),o=document.querySelector('.g6-component-toolbar li[code="redo"] svg');!n||!i||!a||!o||t.on("stackchange",function(s){var l=s.undoStack,u=s.redoStack,f=l.length,c=u.length;f===1?(n.setAttribute("style","cursor: not-allowed"),i.setAttribute("style","opacity: 0.4")):(n.removeAttribute("style"),i.removeAttribute("style")),c===0?(a.setAttribute("style","cursor: not-allowed"),o.setAttribute("style","opacity: 0.4")):(a.removeAttribute("style"),o.removeAttribute("style"))})},e.prototype.undo=function(){var t=this.get("graph"),n=t.getUndoStack();if(!(!n||n.length===1)){var i=n.pop();if(i){var a=i.action;t.pushStack(a,(0,cx.clone)(i.data),"redo");var o=i.data.before;if(a==="add"&&(o=i.data.after),!o)return;switch(a){case"visible":{Object.keys(o).forEach(function(s){var l=o[s];!l||l.forEach(function(u){var f=t.findById(u.id);u.visible?t.showItem(f,!1):t.hideItem(f,!1)})});break}case"render":case"update":Object.keys(o).forEach(function(s){var l=o[s];!l||l.forEach(function(u){t.updateItem(u.id,u,!1)})});break;case"changedata":t.changeData(o,!1);break;case"delete":{Object.keys(o).forEach(function(s){var l=o[s];!l||l.forEach(function(u){var f=u.itemType;delete u.itemType,t.addItem(f,u,!1)})});break}case"add":Object.keys(o).forEach(function(s){var l=o[s];!l||l.forEach(function(u){t.removeItem(u.id,!1)})});break;case"updateComboTree":Object.keys(o).forEach(function(s){var l=o[s];!l||l.forEach(function(u){t.updateComboTree(u.id,u.parentId,!1)})});break;default:}}}},e.prototype.redo=function(){var t=this.get("graph"),n=t.getRedoStack();if(!(!n||n.length===0)){var i=n.pop();if(i){var a=i.action,o=i.data.after;if(t.pushStack(a,(0,cx.clone)(i.data)),a==="delete"&&(o=i.data.before),!o)return;switch(a){case"visible":{Object.keys(o).forEach(function(s){var l=o[s];!l||l.forEach(function(u){var f=t.findById(u.id);u.visible?t.showItem(f,!1):t.hideItem(f,!1)})});break}case"render":case"update":Object.keys(o).forEach(function(s){var l=o[s];!l||l.forEach(function(u){t.updateItem(u.id,u,!1)})});break;case"changedata":t.changeData(o,!1);break;case"delete":o.edges&&o.edges.forEach(function(s){t.removeItem(s.id,!1)}),o.nodes&&o.nodes.forEach(function(s){t.removeItem(s.id,!1)}),o.combos&&o.combos.forEach(function(s){t.removeItem(s.id,!1)});break;case"add":{Object.keys(o).forEach(function(s){var l=o[s];!l||l.forEach(function(u){var f=u.itemType;delete u.itemType,t.addItem(f,u,!1)})});break}case"updateComboTree":Object.keys(o).forEach(function(s){var l=o[s];!l||l.forEach(function(u){t.updateComboTree(u.id,u.parentId,!1)})});break;default:}}}},e.prototype.handleDefaultOperator=function(t,n){var i=n.getZoom();switch(t){case"redo":this.redo();break;case"undo":this.undo();break;case"zoomOut":{var a=1/(1-Dwt*this.get("zoomSensitivity")),o=this.get("maxZoom")||n.get("maxZoom");if(a*i>o)return;n.zoomTo(i*a);break}case"zoomIn":{var s=1-Dwt*this.get("zoomSensitivity"),l=this.get("minZoom")||n.get("minZoom");if(s*i\u7C7B\u578B\uFF1A`.concat(n.item.getType(),` + ID\uFF1A`).concat(n.item.getID(),` + `)},shouldBegin:function(n){return!0},itemTypes:["node","edge","combo"],trigger:"mouseenter",fixToNode:void 0}},e.prototype.getEvents=function(){return this.get("trigger")==="click"?{"node:click":"onClick","edge:click":"onClick","combo:click":"onClick","canvas:click":"onMouseLeave",afterremoveitem:"onMouseLeave",contextmenu:"onMouseLeave",drag:"onMouseLeave"}:{"node:mouseenter":"onMouseEnter","node:mouseleave":"onMouseLeave","node:mousemove":"onMouseMove","edge:mouseenter":"onMouseEnter","edge:mouseleave":"onMouseLeave","edge:mousemove":"onMouseMove","combo:mouseenter":"onMouseEnter","combo:mouseleave":"onMouseLeave","combo:mousemove":"onMouseMove",afterremoveitem:"onMouseLeave",contextmenu:"onMouseLeave","node:drag":"onMouseLeave"}},e.prototype.init=function(){var t=this,n=t.get("className")||"g6-component-tooltip",i=en("
      ")),a=t.get("container");a||(a=t.get("graph").get("container")),(0,AS.isString)(a)&&(a=document.getElementById(a)),yr(i,{position:"absolute",visibility:"hidden",display:"none"}),a.appendChild(i),t.get("trigger")!=="click"&&(i.addEventListener("mouseenter",function(o){yr(i,{visibility:"visible",display:"unset"})}),i.addEventListener("mouseleave",function(o){t.hideTooltip()})),t.set("tooltip",i)},e.prototype.onClick=function(t){var n=this.get("itemTypes");if(!(t.item&&t.item.getType&&n.indexOf(t.item.getType())===-1)){var i=t.item,a=this.get("graph");this.currentTarget===i?(this.currentTarget=null,this.hideTooltip(),a.emit("tooltipchange",{item:t.item,action:"hide"})):(this.currentTarget=i,this.showTooltip(t),a.emit("tooltipchange",{item:t.item,action:"show"}))}},e.prototype.onMouseEnter=function(t){var n=this.get("itemTypes");if(!(t.item&&t.item.getType&&n.indexOf(t.item.getType())===-1)){var i=t.item,a=this.get("graph");this.currentTarget=i,this.showTooltip(t),a.emit("tooltipchange",{item:t.item,action:"show"})}},e.prototype.onMouseMove=function(t){var n=this.get("itemTypes");t.item&&t.item.getType&&n.indexOf(t.item.getType())===-1||!this.currentTarget||t.item!==this.currentTarget||this.showTooltip(t)},e.prototype.onMouseLeave=function(){this.hideTooltip();var t=this.get("graph");t.emit("tooltipchange",{item:this.currentTarget,action:"hide"}),this.currentTarget=null},e.prototype.showTooltip=function(t){if(!!t.item){var n=this.get("itemTypes");if(!(t.item.getType&&n.indexOf(t.item.getType())===-1)){var i=this.get("tooltip"),a=this.get("getContent"),o=a(t);(0,AS.isString)(o)?i.innerHTML=o:i.innerHTML=o.outerHTML,this.updatePosition(t)}}},e.prototype.hideTooltip=function(){var t=this.get("tooltip");t&&yr(t,{visibility:"hidden",display:"none"})},e.prototype.updatePosition=function(t){var n=this.get("shouldBegin"),i=this.get("tooltip");if(!n(t)){yr(i,{visibility:"hidden",display:"none"});return}var a=this.get("graph"),o=a.get("width"),s=a.get("height"),l=this.get("offsetX")||0,u=this.get("offsetY")||0,f=a.getPointByClient(t.clientX,t.clientY),c=this.get("fixToNode"),h=t.item;if(h.getType&&h.getType()==="node"&&c&&(0,AS.isArray)(c)&&c.length>=2){var d=h.getBBox();f={x:d.minX+d.width*c[0],y:d.minY+d.height*c[1]}}var p=a.getCanvasByPoint(f.x,f.y),v=p.x,m=p.y,g=a.getContainer(),x={x:v+g.offsetLeft+l,y:m+g.offsetTop+u};yr(i,{visibility:"visible",display:"unset"});var b=i.getBoundingClientRect();v+b.width+l>o&&(x.x-=b.width+l),m+b.height+u>s&&(x.y-=b.height+u),yr(i,{left:"".concat(x.x,"px"),top:"".concat(x.y,"px")})},e.prototype.hide=function(){this.onMouseLeave()},e.prototype.destroy=function(){var t=this.get("tooltip");if(t){var n=this.get("container");n||(n=this.get("graph").get("container")),(0,AS.isString)(n)&&(n=document.getElementById(n)),n.removeChild(t)}},e}(ia),Rwt=hde;var ps=U(q());var sl=U(q()),dde=function(r,e,t){if(t||arguments.length===2)for(var n=0,i=e.length,a;nf&&(o=f,a=u)})}t.originalEvent.deltaY>0?a=Math.max(0,a-1):a=Math.min(e.speedAxisY.length-1,a+1);var s=e.speedAxisY[a]-i;n=tT(n,[["t",0,s]]),e.speedPoint.setMatrix(n),e.currentSpeed=e.speedAxisY.length-a,e.speedText.attr("text","".concat(e.currentSpeed,".0X")),e.group.emit(pd,{speed:e.currentSpeed,type:e.currentType})}),this.toggleGroup&&this.toggleGroup.on("toggle-model:click",function(t){var n,i,a=t.target.get("isChecked");a?(e.checkedIcon.hide(),e.checkedText.attr("text",((i=e.controllerCfg)===null||i===void 0?void 0:i.timePointControllerText)||"\u5355\u4E00\u65F6\u95F4"),e.currentType="range"):(e.checkedIcon.show(),e.checkedText.attr("text",((n=e.controllerCfg)===null||n===void 0?void 0:n.timeRangeControllerText)||"\u65F6\u95F4\u8303\u56F4"),e.currentType="single"),t.target.set("isChecked",!a),e.group.emit(pd,{type:e.currentType,speed:e.currentSpeed})})},r.prototype.destroy=function(){this.speedGroup.off("speed-rect:click"),this.toggleGroup&&(this.toggleGroup.off("toggle-model:click"),this.toggleGroup.destroy()),this.speedGroup.destroy()},r}(),qN=Dde;var qi=function(){return qi=Object.assign||function(r){for(var e,t=1,n=arguments.length;tv?(w.show(),I.show(),v=P.minX+P.width+10):(w.hide(),I.hide()),w}),this.controllerBtnGroup=new qN(qi({group:this.group,x:this.x,y:this.y+i+25,width:n,height:35},this.controllerCfg)),this.updateStartEnd(0),this.updateUI(),s.move(this.x,this.y),this.bindEvents()},r.prototype.bindEvents=function(){var e=this,t=this.group.find(function(i){return i.get("name")==="minHandlerShape"});t&&(t.on("minHandlerShape-handler:mousedown",this.onMouseDown(this.minHandlerShape)),t.on("minHandlerShape-handler:touchstart",this.onMouseDown(this.minHandlerShape)));var n=this.group.find(function(i){return i.get("name")==="maxHandlerShape"});n&&(n.on("maxHandlerShape-handler:mousedown",this.onMouseDown(this.maxHandlerShape)),n.on("maxHandlerShape-handler:touchstart",this.onMouseDown(this.maxHandlerShape))),this.foregroundShape.on("mousedown",this.onMouseDown(this.foregroundShape)),this.foregroundShape.on("touchstart",this.onMouseDown(this.foregroundShape)),this.group.on("".concat(Mc,":click"),function(){e.isPlay=!e.isPlay,e.currentHandler=e.maxHandlerShape,e.changePlayStatus()}),this.group.on("".concat(Lg,":click"),function(){e.currentHandler=e.maxHandlerShape,e.updateStartEnd(.01),e.updateUI()}),this.group.on("".concat(Og,":click"),function(){e.currentHandler=e.maxHandlerShape,e.updateStartEnd(-.01),e.updateUI()}),this.group.on(pd,function(i){var a=i.type,o=i.speed;e.currentSpeed=o,e.currentMode=a,a==="single"?(e.minHandlerShape.hide(),e.foregroundShape.hide(),e.minTextShape.hide()):a==="range"&&(e.minHandlerShape.show(),e.foregroundShape.show(),e.minTextShape.show())})},r.prototype.adjustTickIndex=function(e){for(var t=0;t1&&(this.end=1);var t=this.x+this.start*this.width,n=this.x+this.end*this.width;this.foregroundShape.attr("x",t),this.foregroundShape.attr("width",n-t);var i=(0,ps.get)(this.handlerStyle,"width",yX);this.setText(this.minText,this.maxText);var a=this.dodgeText([t,n]),o=a[0],s=a[1];this.minHandlerShape.setX(t-i/2),(0,ps.each)(o,function(l,u){return e.minTextShape.attr(u,l)}),this.maxHandlerShape.setX(n-i/2),(0,ps.each)(s,function(l,u){return e.maxTextShape.attr(u,l)}),this.currentMode==="range"?this.graph.emit(Lu,{value:[this.start,this.end].sort()}):this.currentMode==="single"&&this.graph.emit(Lu,{value:[this.end,this.end]})},r.prototype.dodgeText=function(e){var t,n,i=2,a=(0,ps.get)(this.handlerStyle,"width",yX),o=this.minTextShape,s=this.maxTextShape,l=e[0],u=e[1],f=!1;l>u&&(t=[u,l],l=t[0],u=t[1],n=[s,o],o=n[0],s=n[1],f=!0);var c=o.getBBox(),h=s.getBBox(),d=null,p=null;return this.timeBarType==="trend"?(d=l-c.widththis.x+this.width?{x:u-a/2-i,textAlign:"right"}:{x:u+a/2+i,textAlign:"left"}):this.timeBarType==="simple"&&(d=o.attr("x")>c.width?{x:l,textAlign:"center"}:{x:l,textAlign:"left"},p=s.attr("x")>this.width-h.width?{x:u,textAlign:"right"}:{x:u,textAlign:"center"}),f?[p,d]:[d,p]},r.prototype.startPlay=function(){var e=this;return typeof window!="undefined"?window.requestAnimationFrame(function(){var t=e,n=t.ticks,i=t.width,a=e.currentSpeed,o=i/n.length,s=o/((10-a)*1e3/60),l=e.adjustOffsetRange(s/e.width);e.updateStartEnd(l),e.updateUI(),e.isPlay&&(e.playHandler=e.startPlay())}):void 0},r.prototype.changePlayStatus=function(e){e===void 0&&(e=!0),this.controllerBtnGroup.playButton.update({isPlay:this.isPlay}),this.isPlay?(this.playHandler=this.startPlay(),this.graph.emit(YN,null)):this.playHandler&&(typeof window!="undefined"&&window.cancelAnimationFrame(this.playHandler),e&&this.graph.emit(XN,null))},r.prototype.destory=function(){this.graph.off(Lu);var e=this.group,t=e.find(function(i){return i.get("name")==="minHandlerShape"});t&&(t.off("minHandlerShape-handler:mousedown"),t.off("minHandlerShape-handler:touchstart"),t.destroy());var n=e.find(function(i){return i.get("name")==="maxHandlerShape"});n&&(n.off("maxHandlerShape-handler:mousedown"),n.off("maxHandlerShape-handler:touchstart"),n.destroy()),this.foregroundShape.off("mousedown"),this.foregroundShape.off("touchstart"),this.foregroundShape.destroy(),e.off("".concat(Mc,":click")),e.off("".concat(Lg,":click")),e.off("".concat(Og,":click")),e.off(pd),e.destroy(),this.trendComponent&&this.trendComponent.destory()},r}(),Ywt=Ude;var ZN=U(q());var Xwt=U(q());var jde=function(){function r(e){var t=e.x,n=t===void 0?0:t,i=e.y,a=i===void 0?0:i,o=e.container,s=e.text,l=e.padding,u=l===void 0?[4,4,4,4]:l,f=e.className,c=f===void 0?"g6-component-timebar-tooltip":f,h=e.backgroundColor,d=h===void 0?"#000":h,p=e.textColor,v=p===void 0?"#fff":p,m=e.opacity,g=m===void 0?.8:m,x=e.fontSize,b=x===void 0?12:x;this.container=o,this.className=c,this.backgroundColor=d,this.textColor=v,this.x=n,this.y=a,this.text=s,this.padding=u,this.opacity=g,this.fontSize=b,this.render()}return r.prototype.render=function(){var e=this,t=e.className,n=e.x,i=e.y,a=e.backgroundColor,o=e.textColor,s=e.text,l=e.padding,u=e.opacity,f=e.fontSize,c=e.container,h=en("
      '));(0,Xwt.isString)(c)&&(c=document.getElementById(c)),c.appendChild(h),e.parentHeight=c.offsetHeight,e.parentWidth=c.offsetWidth,yr(h,{visibility:"hidden",top:0,left:0});var d=en(` +
      "));d.innerHTML=s,h.appendChild(d),e.backgroundDOM=d;var p=en("
      "));h.appendChild(p),e.arrowDOM=p,e.container=h},r.prototype.show=function(e){var t=this,n=e.text,i=e.x,a=e.y,o=e.clientX,s=e.clientY;t.backgroundDOM.innerHTML=n;var l=t.backgroundDOM.offsetWidth,u=t.backgroundDOM.offsetHeight,f=t.arrowDOM.offsetWidth,c=t.arrowDOM.offsetHeight;yr(t.container,{top:"".concat(-u-c,"px"),left:"".concat(i,"px"),visibility:"visible"}),yr(t.backgroundDOM,{marginLeft:"".concat(-l/2,"px")}),yr(t.arrowDOM,{marginLeft:"".concat(-f/2,"px"),top:"".concat(u,"px")});var h=i-l/2,d=i+l/2;h<0?yr(t.backgroundDOM,{marginLeft:"".concat(-l/2-h,"px")}):d>t.parentWidth&&yr(t.backgroundDOM,{marginLeft:"".concat(-l/2-d+t.parentWidth+12,"px")})},r.prototype.hide=function(){yr(this.container,{top:0,left:0,visibility:"hidden"})},r}(),qwt=jde;var KN=function(){return KN=Object.assign||function(r){for(var e,t=1,n=arguments.length;t=I&&F<=P,G=k?f:c,D=C.addShape("rect",{attrs:KN({x:a+F*(S+x),y:a,width:S,height:g},G),draggable:!0,name:"tick-rect-".concat(F)}),N=C.addShape("rect",{attrs:{x:a+F*S+x*(2*F-1)/2,y:a,width:F===0||F===b-1?S+x/2:S+x,height:g,fill:"#fff",opacity:0},draggable:!0,name:"pick-rect-".concat(F)});N.toFront();var z=D.getBBox(),j=(z.minX+z.maxX)/2;w.push({rect:D,pickRect:N,value:O.date,x:j,y:z.minY});var W;if(u?(W=u(O),!(0,ZN.isString)(W)&&W&&(W=O.date)):F%Math.round(b/10)==0&&(W=O.date),W){A.push(W);var J=z.maxY+a*2;C.addShape("line",{attrs:{stroke:"#BFBFBF",x1:j,y1:J,x2:j,y2:J+v},name:"tick-line"});var et=J+v+a,lt=C.addShape("text",{attrs:KN({fill:"#8c8c8c",stroke:"#fff",lineWidth:1,x:j,y:et,textAlign:"center",text:W,textBaseline:"top",fontSize:10,fontFamily:e.fontFamily||"Arial, sans-serif"},h),capture:!1,name:"tick-label"}),$=lt.getBBox();if($.maxX>n?lt.attr("textAlign","right"):$.minX<0&<.attr("textAlign","left"),(0,ZN.isNumber)(L)&&A.length!==10){var st=Wde([1,0,0,0,1,0,0,0,1],[["t",-j,-et],["r",L],["t",j-5,et+2]]);lt.attr({textAlign:"left",matrix:st})}A.length===1?lt.attr({textAlign:"left"}):A.length===10&<.attr({textAlign:"right"})}}),this.tickRects=w;var M=this.group;this.currentSpeed=1,this.controllerBtnGroup=new qN({group:M,x:this.x,y:this.y+i+5,width:n,height:40,hideTimeTypeController:!0,speed:this.currentSpeed,fontFamily:this.fontFamily||"Arial, sans-serif"})},r.prototype.initEvent=function(){var e=this,t=this.sliceGroup;t.on("click",function(f){var c=f.target;if(!(c.get("type")!=="rect"||!c.get("name"))){var h=parseInt(c.get("name").split("-")[2],10);if(!isNaN(h)){var d=e.tickRects,p=e.unselectedTickStyle;d.forEach(function(x){x.rect.attr(p)});var v=e.selectedTickStyle;d[h].rect.attr(v),e.startTickRectId=h,e.endTickRectId=h;var m=d.length,g=h/m;e.graph.emit(Lu,{value:[g,g]})}}}),t.on("dragstart",function(f){var c=e.tickRects,h=e.unselectedTickStyle;c.forEach(function(x){x.rect.attr(h)});var d=f.target,p=parseInt(d.get("name").split("-")[2],10),v=e.selectedTickStyle;c[p].rect.attr(v),e.startTickRectId=p;var m=c.length,g=p/m;e.graph.emit(Lu,{value:[g,g]}),e.dragging=!0}),t.on("dragover",function(f){if(!!e.dragging&&f.target.get("type")==="rect"){for(var c=parseInt(f.target.get("name").split("-")[2],10),h=e.startTickRectId,d=e.tickRects,p=e.selectedTickStyle,v=e.unselectedTickStyle,m=0;m=h&&m<=c?p:v;d[m].rect.attr(g)}var x=d.length;e.endTickRectId=c;var b=h/x,S=c/x;e.graph.emit(Lu,{value:[b,S]})}}),t.on("drop",function(f){if(!!e.dragging&&(e.dragging=!1,f.target.get("type")==="rect")){var c=e.startTickRectId,h=parseInt(f.target.get("name").split("-")[2],10);if(!(h0?t.endTickRectId++:(n[t.endTickRectId].rect.attr(a),t.endTickRectId--),s!==t.startTickRectId)t.endTickRectId")),yr(u,{position:"relative"})),l.appendChild(u),this.set("timeBarContainer",u);var f,c=t.get("renderer");c==="SVG"?f=new Ah({container:u,width:i,height:a}):f=new Bl({container:u,width:i,height:a}),this.get("containerCSS")&&yr(u,this.get("containerCSS")),this.set("canvas",f)},e.prototype.init=function(){this.initContainer();var t=this.get("canvas"),n=t.addGroup({name:"timebar-group"});this.set("timeBarGroup",n),this.renderTrend(),this.initEvent();var i=typeof window!="undefined"&&window.getComputedStyle(document.body,null).getPropertyValue("font-family")||"Arial, sans-serif";this.set("fontFamily",i)},e.prototype.renderTrend=function(){var t=this,n=this._cfgs,i=n.width,a=n.x,o=n.y,s=n.padding,l=n.type,u=n.trend,f=n.slider,c=n.controllerCfg,h=n.textStyle,d=n.tick,p=n.backgroundStyle,v=n.foregroundStyle,m=u.data,g=qde(u,["data"]),x=i-2*s,b=l==="trend"?Zde:Kde,S=this.get("graph"),C=this.get("timeBarGroup"),w=this.get("canvas"),A=null;if(l==="trend"||l==="simple"){var I=this.get("getValue");A=new Ywt(av(av({graph:S,canvas:w,group:C,type:l,x:a+s,y:l==="trend"?o+s:o+s+15,width:x,height:b,padding:s,backgroundStyle:p,foregroundStyle:v,trendCfg:av(av({},g),{data:m.map(function(L){return(I==null?void 0:I(L))||L.value})})},f),{tick:{ticks:m,tickLabelFormatter:d.tickLabelFormatter,tickLabelStyle:d.tickLabelStyle,tickLineStyle:d.tickLineStyle},handlerStyle:av(av({},f.handlerStyle),{height:f.height||b}),controllerCfg:c,textStyle:h}))}else l==="tick"&&(A=new Kwt(av({graph:S,canvas:w,group:C,x:a+s,y:o+s,width:i,height:42,padding:2},d)));var P=function L(){var M=t.get("timebar");M.draggingHandler=!1,M.isPlay&&(M.isPlay=!1,M.currentHandler=M.maxHandlerShape,M.changePlayStatus()),document.removeEventListener("mouseup",L)};w.on("mousedown",function(L){(L.target.get("name")==="maxHandlerShape-handler"||L.target.get("name")==="minHandlerShape-handler"||L.target===A.foregroundShape)&&document.addEventListener("mouseup",P)}),this.set("timebar",A)},e.prototype.filterData=function(t){var n,i=t.value,a=null,o=this._cfgs.type;if(o==="trend"||o==="simple"?a=this._cfgs.trend.data:o==="tick"&&(a=this._cfgs.tick.data),!a||a.length===0){console.warn("\u8BF7\u914D\u7F6E TimeBar \u7EC4\u4EF6\u7684\u6570\u636E");return}var s=this.get("rangeChange"),l=this.get("graph"),u=Math.round(a.length*i[0]),f=Math.round(a.length*i[1]);f=f>=a.length?a.length-1:f,u=u>=a.length?a.length-1:u;var c=(n=this._cfgs.tick)===null||n===void 0?void 0:n.tickLabelFormatter,h=c?c(a[u]):a[u].date,d=c?c(a[f]):a[f].date;if(o!=="tick"){var p=this.get("timebar");p.setText(h,d)}if(s)s(l,h,d);else{(!this.cacheGraphData||this.cacheGraphData.nodes&&this.cacheGraphData.nodes.length===0)&&(this.cacheGraphData=l.get("data"));var v=this.get("filterItemTypes"),m=this.get("changeData"),g=this.get("getDate"),x=this.get("shouldIgnore"),b=a[u].date,S=a[f].date;if(m||m===void 0){var C=this.cacheGraphData.nodes,w=this.cacheGraphData.edges;if(v.includes("node")){C=C.filter(function(I){var P=+((g==null?void 0:g(I))||I.date);return P>=b&&P<=S||(x==null?void 0:x("node",I,{min:b,max:S}))});var A=C.map(function(I){return I.id});w&&(w=w.filter(function(I){return A.includes(I.source)&&A.includes(I.target)||(x==null?void 0:x("edge",I,{min:b,max:S}))}))}(this.get("filterEdge")||v.includes("edge"))&&(w=w.filter(function(I){var P=+((g==null?void 0:g(I))||I.date);return P>=b&&P<=S||(x==null?void 0:x("edge",I,{min:b,max:S}))})),l.changeData({nodes:C,edges:w})}else v.includes("node")&&l.getNodes().forEach(function(I){var P=I.getModel();if(!(x==null?void 0:x("node",P,{min:b,max:S}))){var L=+((g==null?void 0:g(P))||P.date);LS?l.hideItem(I):l.showItem(I)}}),(this.get("filterEdge")||v.includes("edge"))&&l.getEdges().forEach(function(I){var P=I.getModel();if(!(x==null?void 0:x("edge",P,{min:a[u].date,max:a[f].date}))){var L=+((g==null?void 0:g(P))||P.date);La[f].date?l.hideItem(I):l.showItem(I)}})}},e.prototype.initEvent=function(){var t=this,n=0,i=0,a=this._cfgs.type;!a||a==="trend"||a==="simple"?(n=this._cfgs.slider.start,i=this._cfgs.slider.end):a==="tick"&&(n=this._cfgs.tick.start,i=this._cfgs.tick.end);var o=this.get("graph");o.on("afterrender",function(s){t.filterData({value:[n,i]})}),o.on(Lu,(0,eT.throttle)(function(s){t.filterData(s)},200,{trailing:!0,leading:!0}))},e.prototype.destroy=function(){var t=this.get("timebar");t&&t.destory&&t.destory(),r.prototype.destroy.call(this);var n=this.get("timeBarContainer");if(n){var i=this.get("container");i||(i=this.get("graph").get("container")),(0,eT.isString)(i)&&(i=document.getElementById(i)),i.removeChild(n)}},e}(ia),Zwt=$de;var TS=U(q());var Qde=function(){var r=function(t,n){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,a){i.__proto__=a}||function(i,a){for(var o in a)Object.prototype.hasOwnProperty.call(a,o)&&(i[o]=a[o])},r(t,n)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),Jde=Pa.applyMatrix;function tpe(r,e){var t,n;if(r.naturalWidth)t=r.naturalWidth,n=r.naturalHeight;else{var i=new Image;i.src=r.src,i.onload=function(){e&&e(i.width,i.height)}}return[t,n]}var epe=function(r){Qde(e,r);function e(t){return r.call(this,t)||this}return e.prototype.getDefaultCfgs=function(){return{container:null,className:"g6-minimap",viewportClassName:"g6-minimap-viewport",width:200,delegateStyle:{fill:"#40a9ff",stroke:"#096dd9"},refresh:!0}},e.prototype.getEvents=function(){return{beforepaint:"updateViewport",beforeanimate:"disableRefresh",afteranimate:"enableRefresh",viewportchange:"disableOneRefresh"}},e.prototype.disableRefresh=function(){this.set("refresh",!1)},e.prototype.enableRefresh=function(){this.set("refresh",!0),this.updateCanvas()},e.prototype.disableOneRefresh=function(){this.set("viewportChange",!0)},e.prototype.initViewport=function(){var t=this,n=this._cfgs,i=n.graph;if(!this.destroyed){var a=this.get("container");(0,TS.isString)(a)&&(a=document.getElementById(a));var o=en("
      x||d>b||(v=i.getZoom(),p=t.get("ratio"),u=!0,s=m.clientX,l=m.clientY)}},!1),a.addEventListener("mousemove",function(m){if(!(!u||(0,TS.isNil)(m.clientX)||(0,TS.isNil)(m.clientY))){var g=t.get("width"),x=t.get("height"),b=o.style;f=parseInt(b.left,10),c=parseInt(b.top,10),h=parseInt(b.width,10),d=parseInt(b.height,10);var S=s-m.clientX,C=l-m.clientY;f-S<0?S=f:f-S+h>=g&&(S=0),c-C<0?C=c:c-C+d>=x&&(C=0),f-=S,c-=C,yr(o,{left:"".concat(f,"px"),top:"".concat(c,"px")}),i.translate(S*v/p,C*v/p),s=m.clientX,l=m.clientY}},!1),a.addEventListener("mouseleave",function(){u=!1,n.refresh=!0},!1),a.addEventListener("mouseup",function(){u=!1,n.refresh=!0},!1),this.set("viewport",o),a.appendChild(o)}},e.prototype.updateViewport=function(){if(!this.destroyed){var t=this.get("ratio"),n=this.get("width"),i=this.get("height"),a=this.get("graph"),o=a.get("width"),s=a.get("height"),l=o/s,u=a.getGroup(),f=u.getCanvasBBox(),c=[(f.minX+f.maxX)/2,(f.minY+f.maxY)/2],h=[f.maxX-f.minX,f.maxY-f.minY],d={centerX:c[0],centerY:c[1],width:0,height:0,minX:0,minY:0};f[0]/f[1]>l?(d.width=h[0],d.height=d.width/l):(d.height=h[1],d.width=d.height*l),d.minX=c[0]-d.width/2,d.minY=c[1]-d.height/2;var p=u.getMatrix();p||(p=[1,0,0,0,1,0,0,0,1]);var v=Ai.invert([1,0,0,0,1,0,0,0,1],p),m=Jde({x:d.minX,y:d.minY},v),g=a.getCanvasByPoint(m.x,m.y),x=this.get("viewport");x||this.initViewport();var b=o/d.width,S=b*n,C=b*i,w=n*-g.x/d.width,A=i*-g.y/d.height,I=w+S,P=A+C;w<0&&(S+=w,w=0),I>n&&(S=S-(I-n)),A<0&&(C+=A,A=0),P>i&&(C=C-(P-i)),this.set("ratio",t);var L="".concat(w,"px"),M="".concat(A,"px");yr(x,{left:L,top:M,width:"".concat(S,"px"),height:"".concat(C,"px")})}},e.prototype.init=function(){this.initContainer()},e.prototype.initContainer=function(){var t=this,n=t.get("graph"),i=n.get("width"),a=n.get("height"),o=a/i,s=t.get("className"),l=t.get("container"),u=t.get("width"),f=t.get("height");!u&&!f&&(u=200),u?(f=o*u,t.set("height",f)):(u=1/o*f,t.set("width",u));var c=en("
      "));(0,TS.isString)(l)&&(l=document.getElementById(l)),l?l.appendChild(c):n.get("container").appendChild(c),t.set("container",c);var h=en('
      ');c.appendChild(h);var d=en('');h.appendChild(d),t.set("containerDOM",h),t.set("containerSpan",d);var p=en(''));t.set("imgDOM",p),t.updateImgSize(),d.appendChild(p),t.updateCanvas()},e.prototype.updateImgSize=function(){var t=this,n=t.get("imgDOM"),i=t.get("width"),a=t.get("height");n.onload=function(){var o=tpe(n);o[0]>o[1]?n.width=i:n.height=a}},e.prototype.updateCanvas=function(){var t=this.get("refresh");if(!!t){var n=this.get("graph");if(!n.get("destroyed")){this.get("viewportChange")&&(this.set("viewportChange",!1),this.updateViewport());var i=this.get("width"),a=n.get("canvas").getCanvasBBox(),o=a.width,s=i/o;this.set("ratio",s),this.updateViewport()}}},e.prototype.getViewport=function(){return this.get("viewport")},e.prototype.getContainer=function(){return this.get("container")},e.prototype.updateGraphImg=function(t){var n=this,i=n.get("imgDOM");i.remove(),n.set("graphImg",t);var a=en(''));n.set("imgDOM",a),a.src=t,n.updateImgSize();var o=n.get("containerSpan");o.appendChild(a),n.updateCanvas()},e.prototype.destroy=function(){var t=this.get("container");t.parentNode.removeChild(t)},e}(ia),$wt=epe;var Qwt=U(q());var rpe=function(){var r=function(t,n){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,a){i.__proto__=a}||function(i,a){for(var o in a)Object.prototype.hasOwnProperty.call(a,o)&&(i[o]=a[o])},r(t,n)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}}(),xX=function(){return xX=Object.assign||function(r){for(var e,t=1,n=arguments.length;t(u||i.get("height"))&&a>1||c<(f||i.get("height")*.05)&&a<1)&&(a=1),c*=a,n.set("r",c),n.filter(t)}},e.prototype.filter=function(t){var n=this,i=n.get("graph"),a=i.getNodes(),o={},s=n.get("r"),l=n.get("type"),u={x:t.x,y:t.y};n.updateDelegate(u,s);var f=n.get("shouldShow"),c=n.get("vShapes");c&&c.forEach(function(g){g.remove(),g.destroy()}),c=[],a.forEach(function(g){var x=g.getModel(),b=x.x,S=x.y;npe({x:b,y:S},u)
      `);s.appendChild(l),this.set("container",l);var u=this.render();yr(l,this.getContainerPos(u)),this.bindEvents()},e.prototype.getContainerPos=function(t){t===void 0&&(t=[0,0]);var n=this,i=n.get("graph"),a=this.get("offsetX"),o=this.get("offsetY"),s=this.get("margin"),l=this.get("position").split("-"),u={top:0,right:1,bottom:2,left:3},f=0,c=0,h={left:(i.getWidth()-t[0])/2+f,top:(i.getHeight()-t[1])/2+c};return l.forEach(function(d){var p=s[u[d]],v=d;switch(d){case"top":p+=c;break;case"left":p+=f;break;case"bottom":p=i.getHeight()-t[1]-p+c,v="top";break;default:p=i.getWidth()-t[0]-p+f,v="left";break}h[v]=p}),h.top+=o+i.getContainer().offsetTop,h.left+=a+i.getContainer().offsetLeft,Object.keys(h).forEach(function(d){h[d]="".concat(h[d],"px")}),h},e.prototype.bindEvents=function(){var t=this,n=t.get("filter");if(!(!n||!n.enable)){var i=n.trigger||"click";fpe.includes(i)||(console.warn("Trigger for legend filterling must be 'click' or 'mouseenter', 'click' will take effect by default."),i="click");var a=t.get("legendCanvas");i==="mouseenter"?(a.on("node-container:mouseenter",function(o){return t.filterData(o)}),a.on("node-container:mouseleave",function(o){t.clearFilter(),t.clearActiveLegend()})):(a.on("node-container:click",function(o){return t.filterData(o)}),a.on("click",function(o){o.target&&o.target.isCanvas&&o.target.isCanvas()&&(t.clearFilter(),t.clearActiveLegend())}))}},e.prototype.changeData=function(t){this.set("data",t);var n=this.render();yr(this.get("container"),this.getContainerPos(n))},e.prototype.activateLegend=function(t){var n=this.get("filter"),i=n==null?void 0:n.multiple;i||this.clearActiveLegend();var a=t.get("parent");a.get("active")?(a.set("active",!1),this.findLegendItemsByState("active").length&&a.set("inactive",!0)):(a.set("inactive",!1),a.set("active",!0)),this.findLegendItemsByState("active").length?this.findLegendItemsByState("active","all",!1).forEach(function(c){c.set("inactive",!0)}):this.clearActiveLegend();var o=(n==null?void 0:n.lengedStateStyles)||{},s=(o==null?void 0:o.inactive)||{opacity:.5,"text-shape":{opacity:.5}},l=s["text-shape"]||{};this.findLegendItemsByState("inactive").forEach(function(c){var h=c.get("children"),d=h[0],p=h[1];d.attr(wa(wa({},d.get("oriAttrs")),s)),p.attr(wa(wa({},p.get("oriAttrs")),l))});var u=(o==null?void 0:o.active)||{stroke:"#000",lineWidth:2,"text-shape":{fontWeight:"bold"}},f=u["text-shape"]||{};this.findLegendItemsByState("active").forEach(function(c){var h=c.get("children"),d=h[0],p=h[1];d.attr(wa(wa({},d.get("oriAttrs")),u)),p.attr(wa(wa({},p.get("oriAttrs")),f))})},e.prototype.findLegendItemsByState=function(t,n,i){n===void 0&&(n="all"),i===void 0&&(i=!0);var a=this.get("legendCanvas").find(function(l){return l.get("name")==="root"}),o=a.find(function(l){return l.get("name")==="node-group"}),s=a.find(function(l){return l.get("name")==="edge-group"});return n==="node"?o.get("children").filter(function(l){return!!l.get(t)===i}):n==="edge"?s.get("children").filter(function(l){return!!l.get(t)===i}):o.get("children").filter(function(l){return!!l.get(t)===i}).concat(s.get("children").filter(function(l){return!!l.get(t)===i}))},e.prototype.clearActiveLegend=function(){var t=this.get("legendCanvas"),n=t.find(function(a){return a.get("name")==="root"}),i=[n.find(function(a){return a.get("name")==="node-group"}),n.find(function(a){return a.get("name")==="edge-group"})];i.forEach(function(a){a.get("children").forEach(function(o){o.set("active",!1),o.set("inactive",!1);var s=o.get("children"),l=s[0],u=s[1];l.attr(l.get("oriAttrs")),u.attr(u.get("oriAttrs"))})})},e.prototype.filterData=function(t){var n=this.get("filter"),i=n==null?void 0:n.filterFunctions;if(!(!n||!i)){var a=this.get("legendCanvas"),o=this.get("graph"),s=n.graphActiveState||"active",l=n.graphInactiveState||"inactive",u=n.multiple;this.clearFilter(),u||this.clearActiveLegend(),this.activateLegend(t.target);var f=a.find(function(g){return g.get("name")==="root"}),c=f.find(function(g){return g.get("name")==="node-group"}),h=f.find(function(g){return g.get("name")==="edge-group"}),d=c.get("children").filter(function(g){return g.get("active")}),p=h.get("children").filter(function(g){return g.get("active")}),v=0,m=["getNodes","getEdges"];m.forEach(function(g){o[g]().forEach(function(x){var b=!1,S=g==="getNodes"?d:p;S.forEach(function(C){var w=i[C.get("id")];b=b||w(x.getModel())}),b?(o.setItemState(x,l,!1),o.setItemState(x,s,!0),v++):(o.setItemState(x,s,!1),o.setItemState(x,l,!0))})}),v||m.forEach(function(g){o[g]().forEach(function(x){o.clearItemStates(x,[l])})})}},e.prototype.clearFilter=function(){var t=this.get("graph"),n=this.get("filter");if(!!n){var i=n.graphActiveState||"active",a=n.graphInactiveState||"inactive";t.getNodes().forEach(function(o){t.clearItemStates(o,[i,a])}),t.getEdges().forEach(function(o){t.clearItemStates(o,[i,a])})}},e.prototype.render=function(){var t=this;this.processData();var n=this.get("legendCanvas");if(!n){n=new Bl({container:this.get("container"),width:200,height:200});var i=n.addGroup({name:"root"});i.addGroup({name:"node-group"}),i.addGroup({name:"edge-group"}),this.set("legendCanvas",n)}var a=n.find(function(N){return N.get("name")==="root"}),o=a.find(function(N){return N.get("name")==="node-group"}),s=a.find(function(N){return N.get("name")==="edge-group"}),l=this.get("itemsData"),u=["nodes","edges"],f=[o,s];u.forEach(function(N,z){l[N].forEach(function(j){var W,J=f[z].addGroup({id:j.id,name:"node-container"}),et,lt=j.type,$=t.getShapeSize(j),st=$.width,_t=$.height,dt=$.r,vt=t.getStyle(N.substr(0,4),j);switch(j.type){case"circle":et={r:dt,x:0,y:0};break;case"rect":et={width:st,height:_t,x:-st/2,y:-_t/2};break;case"ellipse":et={r1:st,r2:_t,x:0,y:0};break;case"line":et={x1:-st/2,y1:0,x2:st/2,y2:0},lt="line";break;case"quadratic":et={path:[["M",-st/2,0],["Q",0,st/2,st/2,0]]},lt="path";break;case"cubic":et={path:[["M",-st/2,0],["C",-st/6,st/2,st/6,-st/2,st/2,0]]},lt="path";break;default:et={r:dt,x:0,y:0};break}var Tt=J.addShape(lt,{attrs:wa(wa({},et),vt),name:"".concat(j.type,"-node-keyShape"),oriAttrs:wa({opacity:1},vt)});if(j.label){var Ut=Tt.getBBox(),$t=((W=j.labelCfg)===null||W===void 0?void 0:W.style)||{},Y=wa({textAlign:"begin",fontSize:12,textBaseline:"middle",fill:"#000",opacity:1,fontWeight:"normal"},$t);J.addShape("text",{attrs:wa({x:Ut.maxX+4,y:0,text:j.label},Y),className:"legend-label",name:"".concat(j.type,"-node-text"),oriAttrs:Y})}})});var c=this.get("padding"),h,d=a.find(function(N){return N.get("name")==="title-container"}),p={height:0,maxY:0,width:0};if(this.get("title")){d||(d=a.addGroup({name:"title-container"}));var v={fontSize:20,fontFamily:"Arial",fontWeight:300,textBaseline:"top",textAlign:"center",fill:"#000",x:0,y:c[0]},m=this.get("titleConfig")||{},g=Object.assign(v,m.style||{});h=d.addShape("text",{attrs:wa({text:this.get("title")},g)}),p=d.getCanvasBBox(),d.setMatrix([1,0,0,0,1,0,m.offsetX,m.offsetY,1])}this.layoutItems();var x=a.getCanvasBBox(),b=o.getCanvasBBox(),S=b.minX<0?Math.abs(b.minX)+c[3]:c[3],C=p.maxYc.max&&(c.max=s[0]),M>h&&(h=M),S.setMatrix([1,0,0,0,1,0,O,F,1])});var d=c.max-c.min,p={min:0,max:-1/0},v=u.getCanvasBBox();s[0]=0,s[1]=a==="vertical"?v.maxX+n:v.maxY+i,f.get("children").forEach(function(S,C){C===0&&(p.min=s[0]);var w=S.get("children")[0],A=S.getCanvasBBox(),I=w.getBBox(),P=I.width,L=I.height,M=0,O=0;a==="vertical"?(M=s[1],O=s[0],s[0]=O+A.height+i,S.setMatrix([1,0,0,0,1,0,0,O+L/2,1])):(M=s[0],O=s[1],s[0]=M+A.width+n,S.setMatrix([1,0,0,0,1,0,M+P/2,0,1])),s[0]>p.max&&(p.max=s[0])});var m=p.max-p.min;if(o&&o!==""&&o!=="left"){var g=d-m,x=o==="center"?Math.abs(g)/2:Math.abs(g),b=g<0?u:f;b.get("children").forEach(function(S){var C=S.getMatrix()||[1,0,0,0,1,0,0,0,1];a==="vertical"?C[7]+=x:C[6]+=x,S.setMatrix(C)})}},e.prototype.processData=function(){var t=this.get("data"),n={nodes:[],edges:[]};t.nodes&&(t.nodes.sort(function(i,a){return i.order-a.order}),t.nodes.forEach(function(i){var a,o,s,l,u,f=i.size||[((a=i.style)===null||a===void 0?void 0:a.width)||((o=i.style)===null||o===void 0?void 0:o.r)||8,((s=i.style)===null||s===void 0?void 0:s.height)||((l=i.style)===null||l===void 0?void 0:l.r)||8],c=((u=i.labelCfg)===null||u===void 0?void 0:u.style)||{};n.nodes.push({id:i.id||(0,md.uniqueId)(),type:i.type||"circle",style:wa({},i.style),order:i.order,label:i.label,itemType:"node",size:f,labelCfg:{position:"right",style:wa({fontFamily:"Arial"},c)}})})),t.edges&&(t.edges.sort(function(i,a){return i.order-a.order}),t.edges.forEach(function(i){var a,o,s=i.type||"line";i.type==="cubic-horizontal"&&(s="cubic");var l=((a=i.labelCfg)===null||a===void 0?void 0:a.style)||{},u=i.size||[((o=i.style)===null||o===void 0?void 0:o.width)||8,1];n.edges.push({id:i.id||(0,md.uniqueId)(),type:s,size:u,style:wa({lineWidth:(0,md.isArray)(u)?u[1]:1},i.style),order:i.order,label:i.label,itemType:"edge",labelCfg:{position:"right",style:wa({fontFamily:"Arial"},l)}})})),this.set("itemsData",n)},e.prototype.getContainer=function(){return this.get("container")},e.prototype.formatArray=function(t){var n=this.get(t);if((0,md.isNumber)(n))this.set(t,[n,n,n,n]);else if((0,md.isArray)(n))switch(n.length){case 0:this.set(t,[0,0,0,0]);break;case 1:this.set(t,[n[0],n[0],n[0],n[0]]);break;case 2:this.set(t,[n[0],n[1],n[0],n[1]]);break;case 3:this.set(t,[n[0],n[1],n[2],n[1]]);break;default:break}return this.get(t)},e.prototype.getShapeSize=function(t){var n,i,a;return t.size&&((0,md.isArray)(t.size)?(n=t.size[0],i=t.size[1]||t.size[0],a=t.size[0]/2):(0,md.isNumber)(t.size)&&(n=t.size,i=t.size,a=t.size/2)),t.style&&(t.style.width&&(n=t.style.width),t.style.height&&(i=t.style.height),t.style.r&&(a=t.style.r)),a||(a=5),n||(n=a),i||(i=a),{width:n,height:i,r:a}},e.prototype.getStyle=function(t,n){var i=t==="node"?{fill:"#ccc",lineWidth:0}:{stroke:"#000",lineWidth:1};return wa(wa({},i),n.style||{})},e.prototype.destroy=function(){var t=this.get("graph"),n=t.get("container"),i=this.get("container");n.removeChild(i)},e}(ia),nEt=cpe;var hpe={PluginBase:ia,Menu:Swt,Grid:ywt,Minimap:Ewt,Bundling:Mwt,ToolBar:Pwt,Tooltip:Rwt,Fisheye:Lwt,TimeBar:Zwt,ImageMinimap:$wt,EdgeFilterLens:eEt,SnapLine:rEt,Legend:nEt},iEt=hpe;var po=iEt;var bX=U(q());Xo("circle",{options:{size:ze.defaultNode.size,style:{x:0,y:0,stroke:ze.defaultNode.style.stroke,fill:ze.defaultNode.style.fill,lineWidth:ze.defaultNode.style.lineWidth},labelCfg:{style:{fill:ze.nodeLabel.style.fill,fontSize:ze.nodeLabel.style.fontSize,fontFamily:ze.windowFontFamily}},linkPoints:{top:!1,right:!1,bottom:!1,left:!1,size:ze.defaultNode.linkPoints.size,lineWidth:ze.defaultNode.linkPoints.lineWidth,fill:ze.defaultNode.linkPoints.fill,stroke:ze.defaultNode.linkPoints.stroke},icon:{show:!1,img:"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg",width:20,height:20},stateStyles:E({},ze.nodeStateStyles)},shapeType:"circle",labelPosition:"center",drawShape:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).icon,i=n===void 0?{}:n,a=this.getShapeStyle(e),o=(0,bX.deepMix)({},i,e.icon),s="".concat(this.type,"-keyShape"),l=t.addShape("circle",{attrs:a,className:s,name:s,draggable:!0});t.shapeMap[s]=l;var u=o.width,f=o.height,c=o.show,h=o.text;if(c){var d="".concat(this.type,"-icon");h?t.shapeMap[d]=t.addShape("text",{attrs:E({x:0,y:0,fontSize:12,fill:"#000",stroke:"#000",textBaseline:"middle",textAlign:"center"},o),className:d,name:d,draggable:!0}):t.shapeMap[d]=t.addShape("image",{attrs:E({x:-u/2,y:-f/2},o),className:d,name:d,draggable:!0})}return this.drawLinkPoints(e,t),l},drawLinkPoints:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).linkPoints;if(!!n){var i=n||{},a=i.top,o=i.left,s=i.right,l=i.bottom,u=i.size,f=i.r,c=rr(i,["top","left","right","bottom","size","r"]),h=this.getSize(e),d=h[0]/2;if(o){var p="link-point-left";t.shapeMap[p]=t.addShape("circle",{attrs:E(E({},c),{x:-d,y:0,r:u/2||f||5}),className:p,name:p,isAnchorPoint:!0})}if(s){var v="link-point-right";t.shapeMap[v]=t.addShape("circle",{attrs:E(E({},c),{x:d,y:0,r:u/2||f||5}),className:v,name:v,isAnchorPoint:!0})}if(a){var m="link-point-top";t.shapeMap[m]=t.addShape("circle",{attrs:E(E({},c),{x:0,y:-d,r:u/2||f||5}),className:m,name:m,isAnchorPoint:!0})}if(l){var g="link-point-bottom";t.shapeMap[g]=t.addShape("circle",{attrs:E(E({},c),{x:0,y:d,r:u/2||f||5}),className:g,name:g,isAnchorPoint:!0})}}},getShapeStyle:function(e){var t=(this.mergeStyle||this.getOptions(e)).style,n={stroke:e.color},i=(0,bX.deepMix)({},t,n),a=this.getSize(e),o=a[0]/2,s=E({x:0,y:0,r:o},i);return s},update:function(e,t,n){var i=t.getContainer(),a=this.getSize(e),o=E({},e.style);e.style.stroke===void 0&&e.color&&(o.stroke=e.color),e.style.r===void 0&&!isNaN(a[0])&&(o.r=a[0]/2),this.updateShape(e,t,o,!0,n),this.updateLinkPoints(e,i)}},"single-node");var $N=U(q());Xo("rect",{options:{size:[100,30],style:{radius:0,stroke:ze.defaultNode.style.stroke,fill:ze.defaultNode.style.fill,lineWidth:ze.defaultNode.style.lineWidth},labelCfg:{style:{fill:ze.nodeLabel.style.fill,fontSize:ze.nodeLabel.style.fontSize,fontFamily:ze.windowFontFamily}},linkPoints:{top:!1,right:!1,bottom:!1,left:!1,size:ze.defaultNode.linkPoints.size,lineWidth:ze.defaultNode.linkPoints.lineWidth,fill:ze.defaultNode.linkPoints.fill,stroke:ze.defaultNode.linkPoints.stroke},icon:{show:!1,img:"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg",width:20,height:20},anchorPoints:[[0,.5],[1,.5]],stateStyles:E({},ze.nodeStateStyles)},shapeType:"rect",labelPosition:"center",drawShape:function(e,t){var n=this.getShapeStyle(e),i=t.addShape("rect",{attrs:n,className:"".concat(this.type,"-keyShape"),name:"".concat(this.type,"-keyShape"),draggable:!0});return t.shapeMap["".concat(this.type,"-keyShape")]=i,this.drawLinkPoints(e,t),i},drawLinkPoints:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).linkPoints,i=n===void 0?{}:n,a=i.top,o=i.left,s=i.right,l=i.bottom,u=i.size,f=i.r,c=rr(i,["top","left","right","bottom","size","r"]),h=this.getSize(e),d=h[0],p=h[1];o&&(t.shapeMap["link-point-left"]=t.addShape("circle",{attrs:E(E({},c),{x:-d/2,y:0,r:u/2||f||5}),className:"link-point-left",name:"link-point-left",isAnchorPoint:!0})),s&&(t.shapeMap["link-point-right"]=t.addShape("circle",{attrs:E(E({},c),{x:d/2,y:0,r:u/2||f||5}),className:"link-point-right",name:"link-point-right",isAnchorPoint:!0})),a&&(t.shapeMap["link-point-top"]=t.addShape("circle",{attrs:E(E({},c),{x:0,y:-p/2,r:u/2||f||5}),className:"link-point-top",name:"link-point-top",isAnchorPoint:!0})),l&&(t.shapeMap["link-point-bottom"]=t.addShape("circle",{attrs:E(E({},c),{x:0,y:p/2,r:u/2||f||5}),className:"link-point-bottom",name:"link-point-bottom",isAnchorPoint:!0}))},getShapeStyle:function(e){var t=(this.mergeStyle||this.getOptions(e)).style,n={stroke:e.color},i=(0,$N.mix)({},t,n),a=this.getSize(e),o=i.width||a[0],s=i.height||a[1],l=E({x:-o/2,y:-s/2,width:o,height:s},i);return l},update:function(e,t,n){var i=t.getContainer(),a=this.getOptions({}).style,o=this.getSize(e),s=t.get("keyShape");e.size||(o[0]=s.attr("width")||a.width,o[1]=s.attr("height")||a.height);var l={stroke:e.color,x:-o[0]/2,y:-o[1]/2,width:o[0],height:o[1]},u=(0,$N.mix)({},a,s.attr(),l);u=(0,$N.mix)(u,e.style),this.updateShape(e,t,u,!1,n),this.updateLinkPoints(e,i)}},"single-node");var QN=U(q());Xo("ellipse",{options:{size:[80,40],style:{x:0,y:0,stroke:ze.defaultNode.style.stroke,fill:ze.defaultNode.style.fill,lineWidth:ze.defaultNode.style.lineWidth},labelCfg:{style:{fill:ze.nodeLabel.style.fill,fontSize:ze.nodeLabel.style.fontSize,fontFamily:ze.windowFontFamily}},linkPoints:{top:!1,right:!1,bottom:!1,left:!1,size:ze.defaultNode.linkPoints.size,lineWidth:ze.defaultNode.linkPoints.lineWidth,fill:ze.defaultNode.linkPoints.fill,stroke:ze.defaultNode.linkPoints.stroke},icon:{show:!1,img:"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg",width:20,height:20},stateStyles:E({},ze.nodeStateStyles)},shapeType:"ellipse",labelPosition:"center",drawShape:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).icon,i=n===void 0?{}:n,a=this.getShapeStyle(e),o=t.addShape("ellipse",{attrs:a,className:"ellipse-keyShape",name:"ellipse-keyShape",draggable:!0});t.shapeMap["ellipse-keyShape"]=o;var s=i.width,l=i.height,u=i.show,f=i.text;return u&&(f?t.shapeMap["".concat(this.type,"-icon")]=t.addShape("text",{attrs:E({x:0,y:0,fontSize:12,fill:"#000",stroke:"#000",textBaseline:"middle",textAlign:"center"},i),className:"".concat(this.type,"-icon"),name:"".concat(this.type,"-icon"),draggable:!0}):t.shapeMap["".concat(this.type,"-icon")]=t.addShape("image",{attrs:E({x:-s/2,y:-l/2},i),className:"".concat(this.type,"-icon"),name:"".concat(this.type,"-icon"),draggable:!0})),this.drawLinkPoints(e,t),o},drawLinkPoints:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).linkPoints,i=n===void 0?{}:n,a=i.top,o=i.left,s=i.right,l=i.bottom,u=i.size,f=i.r,c=rr(i,["top","left","right","bottom","size","r"]),h=this.getSize(e),d=h[0]/2,p=h[1]/2;o&&(t.shapeMap["link-point-left"]=t.addShape("circle",{attrs:E(E({},c),{x:-d,y:0,r:u/2||f||5}),className:"link-point-left",name:"link-point-left",isAnchorPoint:!0})),s&&(t.shapeMap["link-point-right"]=t.addShape("circle",{attrs:E(E({},c),{x:d,y:0,r:u/2||f||5}),className:"link-point-right",name:"link-point-right",isAnchorPoint:!0})),a&&(t.shapeMap["link-point-top"]=t.addShape("circle",{attrs:E(E({},c),{x:0,y:-p,r:u/2||f||5}),className:"link-point-top",name:"link-point-top",isAnchorPoint:!0})),l&&(t.shapeMap["link-point-bottom"]=t.addShape("circle",{attrs:E(E({},c),{x:0,y:p,r:u/2||f||5}),className:"link-point-bottom",name:"link-point-bottom",isAnchorPoint:!0}))},getShapeStyle:function(e){var t=(this.mergeStyle||this.getOptions(e)).style,n={stroke:e.color},i=(0,QN.mix)({},t,n),a=this.getSize(e),o=a[0]/2,s=a[1]/2,l=E({x:0,y:0,rx:o,ry:s},i);return l},update:function(e,t,n){var i=t.getContainer(),a=this.getOptions({}).style,o=this.getSize(e),s={stroke:e.color,rx:o[0]/2,ry:o[1]/2},l=t.get("keyShape"),u=(0,QN.mix)({},a,l.attr(),s);u=(0,QN.mix)(u,e.style),this.updateShape(e,t,u,!0,n),this.updateLinkPoints(e,i)}},"single-node");var JN=U(q());Xo("diamond",{options:{size:[80,80],style:{stroke:ze.defaultNode.style.stroke,fill:ze.defaultNode.style.fill,lineWidth:ze.defaultNode.style.lineWidth},labelCfg:{style:{fill:ze.nodeLabel.style.fill,fontSize:ze.nodeLabel.style.fontSize,fontFamily:ze.windowFontFamily}},linkPoints:{top:!1,right:!1,bottom:!1,left:!1,size:ze.defaultNode.linkPoints.size,lineWidth:ze.defaultNode.linkPoints.lineWidth,fill:ze.defaultNode.linkPoints.fill,stroke:ze.defaultNode.linkPoints.stroke},icon:{show:!1,img:"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg",width:20,height:20},stateStyles:E({},ze.nodeStateStyles)},shapeType:"diamond",labelPosition:"center",drawShape:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).icon,i=n===void 0?{}:n,a=this.getShapeStyle(e),o=t.addShape("path",{attrs:a,className:"".concat(this.type,"-keyShape"),name:"".concat(this.type,"-keyShape"),draggable:!0});t.shapeMap["".concat(this.type,"-keyShape")]=o;var s=i.width,l=i.height,u=i.show,f=i.text;return u&&(f?t.shapeMap["".concat(this.type,"-icon")]=t.addShape("text",{attrs:E({x:0,y:0,fontSize:12,fill:"#000",stroke:"#000",textBaseline:"middle",textAlign:"center"},i),className:"".concat(this.type,"-icon"),name:"".concat(this.type,"-icon"),draggable:!0}):t.shapeMap["".concat(this.type,"-icon")]=t.addShape("image",{attrs:E({x:-s/2,y:-l/2},i),className:"".concat(this.type,"-icon"),name:"".concat(this.type,"-icon"),draggable:!0})),this.drawLinkPoints(e,t),o},drawLinkPoints:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).linkPoints,i=n===void 0?{}:n,a=i.top,o=i.left,s=i.right,l=i.bottom,u=i.size,f=i.r,c=rr(i,["top","left","right","bottom","size","r"]),h=this.getSize(e),d=h[0],p=h[1];o&&(t.shapeMap["link-point-left"]=t.addShape("circle",{attrs:E(E({},c),{x:-d/2,y:0,r:u/2||f||5}),className:"link-point-left",name:"link-point-left",isAnchorPoint:!0})),s&&(t.shapeMap["link-point-right"]=t.addShape("circle",{attrs:E(E({},c),{x:d/2,y:0,r:u/2||f||5}),className:"link-point-right",name:"link-point-right",isAnchorPoint:!0})),a&&(t.shapeMap["link-point-top"]=t.addShape("circle",{attrs:E(E({},c),{x:0,y:-p/2,r:u/2||f||5}),className:"link-point-top",name:"link-point-top",isAnchorPoint:!0})),l&&(t.shapeMap["link-point-bottom"]=t.addShape("circle",{attrs:E(E({},c),{x:0,y:p/2,r:u/2||f||5}),className:"link-point-bottom",name:"link-point-bottom",isAnchorPoint:!0}))},getPath:function(e){var t=this.getSize(e),n=t[0],i=t[1],a=[["M",0,-i/2],["L",n/2,0],["L",0,i/2],["L",-n/2,0],["Z"]];return a},getShapeStyle:function(e){var t=(this.mergeStyle||this.getOptions(e)).style,n={stroke:e.color},i=(0,JN.mix)({},t,n),a=this.getPath(e),o=E({path:a},i);return o},update:function(e,t,n){var i=t.getContainer(),a=this.getOptions({}).style,o=this.getPath(e),s={stroke:e.color,path:o},l=t.get("keyShape"),u=(0,JN.mix)({},a,l.attr(),s);u=(0,JN.mix)(u,e.style),this.updateShape(e,t,u,!0,n),this.updateLinkPoints(e,i)}},"single-node");var rT=U(q());Xo("triangle",{options:{size:40,direction:"up",style:{stroke:ze.defaultNode.style.stroke,fill:ze.defaultNode.style.fill,lineWidth:ze.defaultNode.style.lineWidth},labelCfg:{style:{fill:ze.nodeLabel.style.fill,fontSize:ze.nodeLabel.style.fontSize},offset:15},linkPoints:{top:!1,right:!1,bottom:!1,left:!1,size:ze.defaultNode.linkPoints.size,lineWidth:ze.defaultNode.linkPoints.lineWidth,fill:ze.defaultNode.linkPoints.fill,stroke:ze.defaultNode.linkPoints.stroke},icon:{show:!1,img:"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg",width:20,height:20,offset:6},stateStyles:E({},ze.nodeStateStyles)},shapeType:"triangle",labelPosition:"bottom",drawShape:function(e,t){var n=this.mergeStyle||this.getOptions(e),i=n.icon,a=i===void 0?{}:i,o=n.direction,s=this.getShapeStyle(e),l=e.direction||o,u=t.addShape("path",{attrs:s,className:"".concat(this.type,"-keyShape"),name:"".concat(this.type,"-keyShape"),draggable:!0});t.shapeMap["".concat(this.type,"-keyShape")]=u;var f=a.width,c=a.height,h=a.show,d=a.offset,p=a.text;if(h)if(p)t.shapeMap["".concat(this.type,"-icon")]=t.addShape("text",{attrs:E({x:0,y:0,fontSize:12,fill:"#000",stroke:"#000",textBaseline:"middle",textAlign:"center"},a),className:"".concat(this.type,"-icon"),name:"".concat(this.type,"-icon"),draggable:!0});else{var v=-f/2,m=-c/2;(l==="up"||l==="down")&&(m+=d),(l==="left"||l==="right")&&(v+=d),t.shapeMap["".concat(this.type,"-icon")]=t.addShape("image",{attrs:E({x:v,y:m},a),className:"".concat(this.type,"-icon"),name:"".concat(this.type,"-icon"),draggable:!0})}return this.drawLinkPoints(e,t),u},drawLinkPoints:function(e,t){var n=this.mergeStyle||this.getOptions(e),i=n.linkPoints,a=i===void 0?{}:i,o=n.direction,s=e.direction||o,l=a.top,u=a.left,f=a.right,c=a.bottom,h=a.size,d=a.r,p=rr(a,["top","left","right","bottom","size","r"]),v=this.getSize(e),m=v[0];if(u){var g=null,x=m*Math.sin(1/3*Math.PI),b=m*Math.sin(1/3*Math.PI);s==="up"?g=[-b,x]:s==="down"?g=[-b,-x]:s==="left"&&(g=[-b,b-x]),g&&(t.shapeMap["link-point-left"]=t.addShape("circle",{attrs:E(E({},p),{x:g[0],y:g[1],r:h/2||d||5}),className:"link-point-left",name:"link-point-left"}))}if(f){var S=null,x=m*Math.sin(1/3*Math.PI),b=m*Math.sin(1/3*Math.PI);s==="up"?S=[b,x]:s==="down"?S=[b,-x]:s==="right"&&(S=[b,b-x]),S&&(t.shapeMap["link-point-right"]=t.addShape("circle",{attrs:E(E({},p),{x:S[0],y:S[1],r:h/2||d||5}),className:"link-point-right",name:"link-point-right"}))}if(l){var C=null,x=m*Math.sin(1/3*Math.PI),b=m*Math.sin(1/3*Math.PI);s==="up"?C=[b-x,-x]:s==="left"?C=[b,-x]:s==="right"&&(C=[-b,-x]),C&&(t.shapeMap["link-point-top"]=t.addShape("circle",{attrs:E(E({},p),{x:C[0],y:C[1],r:h/2||d||5}),className:"link-point-top",name:"link-point-top"}))}if(c){var w=null,x=m*Math.sin(1/3*Math.PI),b=m*Math.sin(1/3*Math.PI);s==="down"?w=[-b+x,x]:s==="left"?w=[b,x]:s==="right"&&(w=[-b,x]),w&&(t.shapeMap["link-point-bottom"]=t.addShape("circle",{attrs:E(E({},p),{x:w[0],y:w[1],r:h/2||d||5}),className:"link-point-bottom",name:"link-point-bottom"}))}},getPath:function(e){var t=(this.mergeStyle||this.getOptions(e)).direction,n=e.direction||t,i=this.getSize(e),a=i[0],o=a*Math.sin(1/3*Math.PI),s=a*Math.sin(1/3*Math.PI),l=[["M",-s,o],["L",0,-o],["L",s,o],["Z"]];return n==="down"?l=[["M",-s,-o],["L",s,-o],["L",0,o],["Z"]]:n==="left"?l=[["M",-s,s-o],["L",s,-s],["L",s,s],["Z"]]:n==="right"&&(l=[["M",s,s-o],["L",-s,s],["L",-s,-s],["Z"]]),l},getShapeStyle:function(e){var t=(this.mergeStyle||this.getOptions(e)).style,n={stroke:e.color},i=(0,rT.mix)({},t,n),a=this.getPath(e),o=E({path:a},i);return o},update:function(e,t,n){var i=t.getContainer(),a=this.getOptions({}).style,o=this.getPath(e),s={stroke:e.color,path:o},l=t.get("keyShape"),u=(0,rT.mix)({},a,l.attr(),s);u=(0,rT.mix)(u,e.style),this.updateShape(e,t,u,!0,n),this.updateLinkPoints(e,i)},updateLinkPoints:function(e,t){var n=this.getOptions({}),i=n.linkPoints,a=n.direction,o=e.direction||a,s=t.shapeMap["link-point-left"]||t.find(function(D){return D.get("className")==="link-point-left"}),l=t.shapeMap["link-point-right"]||t.find(function(D){return D.get("className")==="link-point-right"}),u=t.shapeMap["link-point-top"]||t.find(function(D){return D.get("className")==="link-point-top"}),f=t.shapeMap["link-point-bottom"]||t.find(function(D){return D.get("className")==="link-point-bottom"}),c=i,h=s||l||u||f;h&&(c=h.attr());var d=(0,rT.mix)({},c,e.linkPoints),p=d.fill,v=d.stroke,m=d.lineWidth,g=d.size/2;g||(g=d.r);var x=e.linkPoints?e.linkPoints:{left:void 0,right:void 0,top:void 0,bottom:void 0},b=x.left,S=x.right,C=x.top,w=x.bottom,A=this.getSize(e),I=A[0],P={r:g,fill:p,stroke:v,lineWidth:m},L=null,M=I*Math.sin(1/3*Math.PI),O=I*Math.sin(1/3*Math.PI);o==="up"?L=[-O,M]:o==="down"?L=[-O,-M]:o==="left"&&(L=[-O,O-M]),L&&(s?!b&&b!==void 0?(s.remove(),delete t.shapeMap["link-point-left"]):s.attr(E(E({},P),{x:L[0],y:L[1]})):b&&(t.shapeMap["link-point-left"]=t.addShape("circle",{attrs:E(E({},P),{x:L[0],y:L[1]}),className:"link-point-left",name:"link-point-left",isAnchorPoint:!0})));var F=null;o==="up"?F=[O,M]:o==="down"?F=[O,-M]:o==="right"&&(F=[O,O-M]),F&&(l?!S&&S!==void 0?(l.remove(),delete t.shapeMap["link-point-right"]):l.attr(E(E({},P),{x:F[0],y:F[1]})):S&&(t.shapeMap["link-point-right"]=t.addShape("circle",{attrs:E(E({},P),{x:F[0],y:F[1]}),className:"link-point-right",name:"link-point-right",isAnchorPoint:!0})));var k=null;o==="up"?k=[O-M,-M]:o==="left"?k=[O,-M]:o==="right"&&(k=[-O,-M]),k&&(u?!C&&C!==void 0?(u.remove(),delete t.shapeMap["link-point-top"]):u.attr(E(E({},P),{x:k[0],y:k[1]})):C&&(t.shapeMap["link-point-top"]=t.addShape("circle",{attrs:E(E({},P),{x:k[0],y:k[1]}),className:"link-point-top",name:"link-point-top",isAnchorPoint:!0})));var G=null;o==="down"?G=[-O+M,M]:o==="left"?G=[O,M]:o==="right"&&(G=[-O,M]),G&&(f?!w&&w!==void 0?(f.remove(),delete t.shapeMap["link-point-bottom"]):f.attr(E(E({},P),{x:G[0],y:G[1]})):w&&(t.shapeMap["link-point-bottom"]=t.addShape("circle",{attrs:E(E({},P),{x:G[0],y:G[1]}),className:"link-point-bottom",name:"link-point-bottom",isAnchorPoint:!0})))}},"single-node");var Ef=U(q());Xo("modelRect",{options:{size:[185,70],style:{radius:5,stroke:"#69c0ff",fill:"#ffffff",lineWidth:ze.defaultNode.style.lineWidth,fillOpacity:1},labelCfg:{style:{fill:"#595959",fontSize:14,fontFamily:ze.windowFontFamily},offset:30},descriptionCfg:{style:{fontSize:12,fill:"#bfbfbf",fontFamily:ze.windowFontFamily},paddingTop:0},preRect:{show:!0,width:4,fill:"#40a9ff",radius:2},linkPoints:{top:!1,right:!1,bottom:!1,left:!1,size:10,lineWidth:1,fill:"#72CC4A",stroke:"#72CC4A"},logoIcon:{show:!0,x:0,y:0,img:"https://gw.alipayobjects.com/zos/basement_prod/4f81893c-1806-4de4-aff3-9a6b266bc8a2.svg",width:16,height:16,offset:0},stateIcon:{show:!0,x:0,y:0,img:"https://gw.alipayobjects.com/zos/basement_prod/300a2523-67e0-4cbf-9d4a-67c077b40395.svg",width:16,height:16,offset:-5},anchorPoints:[[0,.5],[1,.5]]},shapeType:"modelRect",drawShape:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).preRect,i=n===void 0?{}:n,a=this.getShapeStyle(e),o=this.getSize(e),s=o[0],l=o[1],u=t.addShape("rect",{attrs:a,className:"".concat(this.type,"-keyShape"),name:"".concat(this.type,"-keyShape"),draggable:!0});t.shapeMap["".concat(this.type,"-keyShape")]=u;var f=i.show,c=rr(i,["show"]);return f&&(t.shapeMap["pre-rect"]=t.addShape("rect",{attrs:E({x:-s/2,y:-l/2,height:l},c),className:"pre-rect",name:"pre-rect",draggable:!0})),this.drawLogoIcon(e,t),this.drawStateIcon(e,t),this.drawLinkPoints(e,t),u},drawLogoIcon:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).logoIcon,i=n===void 0?{}:n,a=this.getSize(e),o=a[0];if(i.show){var s=i.width,l=i.height,u=i.x,f=i.y,c=i.offset,h=i.text,d=rr(i,["width","height","x","y","offset","text"]);h?t.shapeMap["rect-logo-icon"]=t.addShape("text",{attrs:E({x:0,y:0,fontSize:12,fill:"#000",stroke:"#000",textBaseline:"middle",textAlign:"center"},d),className:"rect-logo-icon",name:"rect-logo-icon",draggable:!0}):t.shapeMap["rect-logo-icon"]=t.addShape("image",{attrs:E(E({},d),{x:u||-o/2+s+c,y:f||-l/2,width:s,height:l}),className:"rect-logo-icon",name:"rect-logo-icon",draggable:!0})}},drawStateIcon:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).stateIcon,i=n===void 0?{}:n,a=this.getSize(e),o=a[0];if(i.show){var s=i.width,l=i.height,u=i.x,f=i.y,c=i.offset,h=i.text,d=rr(i,["width","height","x","y","offset","text"]);h?t.shapeMap["rect-state-icon"]=t.addShape("text",{attrs:E({x:0,y:0,fontSize:12,fill:"#000",stroke:"#000",textBaseline:"middle",textAlign:"center"},d),className:"rect-state-icon",name:"rect-state-icon",draggable:!0}):t.shapeMap["rect-state-icon"]=t.addShape("image",{attrs:E(E({},d),{x:u||o/2-s+c,y:f||-l/2,width:s,height:l}),className:"rect-state-icon",name:"rect-state-icon",draggable:!0})}},drawLinkPoints:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).linkPoints,i=n===void 0?{}:n,a=i.top,o=i.left,s=i.right,l=i.bottom,u=i.size,f=i.r,c=rr(i,["top","left","right","bottom","size","r"]),h=this.getSize(e),d=h[0],p=h[1];o&&(t.shapeMap["link-point-left"]=t.addShape("circle",{attrs:E(E({},c),{x:-d/2,y:0,r:u/2||f||5}),className:"link-point-left",name:"link-point-left",isAnchorPoint:!0})),s&&(t.shapeMap["link-point-right"]=t.addShape("circle",{attrs:E(E({},c),{x:d/2,y:0,r:u/2||f||5}),className:"link-point-right",name:"link-point-right",isAnchorPoint:!0})),a&&(t.shapeMap["link-point-top"]=t.addShape("circle",{attrs:E(E({},c),{x:0,y:-p/2,r:u/2||f||5}),className:"link-point-top",name:"link-point-top",isAnchorPoint:!0})),l&&(t.shapeMap["link-point-bottom"]=t.addShape("circle",{attrs:E(E({},c),{x:0,y:p/2,r:u/2||f||5}),className:"link-point-bottom",name:"link-point-bottom",isAnchorPoint:!0}))},drawLabel:function(e,t){var n=this.getOptions(e),i=n.labelCfg,a=i===void 0?{}:i,o=n.logoIcon,s=o===void 0?{}:o,l=n.descriptionCfg,u=l===void 0?{}:l,f=this.getSize(e),c=f[0],h=null,d=s.show,p=s.width,v=-c/2+a.offset;d&&(v=-c/2+p+a.offset);var m=a.style,g=u.style,x=u.paddingTop;return(0,Ef.isString)(e.description)?(h=t.addShape("text",{attrs:E(E({},m),{x:v,y:-5,text:e.label}),className:"text-shape",name:"text-shape",draggable:!0,labelRelated:!0}),t.shapeMap["text-shape"]=h,t.shapeMap["rect-description"]=t.addShape("text",{attrs:E(E({},g),{x:v,y:17+(x||0),text:e.description}),className:"rect-description",name:"rect-description",draggable:!0,labelRelated:!0})):(h=t.addShape("text",{attrs:E(E({},m),{x:v,y:7,text:e.label}),className:"text-shape",name:"text-shape",draggable:!0,labelRelated:!0}),t.shapeMap["text-shape"]=h),h},getShapeStyle:function(e){var t=(this.mergeStyle||this.getOptions(e)).style,n={stroke:e.color},i=(0,Ef.mix)({},t,n),a=this.getSize(e),o=i.width||a[0],s=i.height||a[1],l=E({x:-o/2,y:-s/2,width:o,height:s},i);return l},update:function(e,t){var n=this.mergeStyle||this.getOptions(e),i=n.style,a=i===void 0?{}:i,o=n.labelCfg,s=o===void 0?{}:o,l=n.descriptionCfg,u=l===void 0?{}:l,f=this.getSize(e),c=f[0],h=f[1],d=t.get("keyShape");d.attr(E(E({},a),{x:-c/2,y:-h/2,width:c,height:h}));var p=t.getContainer(),v=p.shapeMap["rect-logo-icon"]||p.find(function(_t){return _t.get("className")==="rect-logo-icon"}),m=v?v.attr():{},g=(0,Ef.mix)({},m,e.logoIcon),x=g.width;x===void 0&&(x=this.options.logoIcon.width);var b=e.logoIcon?e.logoIcon.show:void 0,S=s.offset,C=-c/2+x+S;!b&&b!==void 0&&(C=-c/2+S);var w=p.shapeMap["node-label"]||p.find(function(_t){return _t.get("className")==="node-label"}),A=p.shapeMap["rect-description"]||p.find(function(_t){return _t.get("className")==="rect-description"});if(e.label)if(!w)p.shapeMap["node-label"]=p.addShape("text",{attrs:E(E({},s.style),{x:C,y:e.description?-5:7,text:e.label}),className:"node-label",name:"node-label",draggable:!0,labelRelated:!0});else{var I=e.labelCfg?e.labelCfg.style:{},P=(0,Ef.mix)({},w.attr(),I);e.label&&(P.text=e.label),P.x=C,(0,Ef.isString)(e.description)&&(P.y=-5),A&&(A.resetMatrix(),A.attr({x:C})),w.resetMatrix(),w.attr(P)}if((0,Ef.isString)(e.description)){var L=u.paddingTop;if(!A)p.shapeMap["rect-description"]=p.addShape("text",{attrs:E(E({},u.style),{x:C,y:17+(L||0),text:e.description}),className:"rect-description",name:"rect-description",draggable:!0,labelRelated:!0});else{var I=e.descriptionCfg?e.descriptionCfg.style:{},M=(0,Ef.mix)({},A.attr(),I);(0,Ef.isString)(e.description)&&(M.text=e.description),M.x=C,A.resetMatrix(),A.attr(E(E({},M),{y:17+(L||0)}))}}var O=p.shapeMap["pre-rect"]||p.find(function(_t){return _t.get("className")==="pre-rect"});if(O&&!O.destroyed){var F=(0,Ef.mix)({},O.attr(),e.preRect);O.attr(E(E({},F),{x:-c/2,y:-h/2,height:h}))}if(v&&!v.destroyed)if(!b&&b!==void 0)v.remove(),delete p.shapeMap["pre-rect"];else{var k=g.width,G=g.height,D=g.x,N=g.y,z=g.offset,j=rr(g,["width","height","x","y","offset"]);v.attr(E(E({},j),{x:D||-c/2+k+z,y:N||-G/2,width:k,height:G}))}else b&&this.drawLogoIcon(e,p);var W=p.shapeMap["rect-state-icon"]||p.find(function(_t){return _t.get("className")==="rect-state-icon"}),J=W?W.attr():{},et=(0,Ef.mix)({},J,e.stateIcon);if(W){!et.show&&et.show!==void 0&&(W.remove(),delete p.shapeMap["rect-state-icon"]);var lt=et.width,G=et.height,D=et.x,N=et.y,$=et.offset,st=rr(et,["width","height","x","y","offset"]);W.attr(E(E({},st),{x:D||c/2-lt+$,y:N||-G/2,width:lt,height:G}))}else et.show&&this.drawStateIcon(e,p);this.updateLinkPoints(e,p)}},"single-node");var nT=U(q());Xo("star",{options:{size:60,style:{stroke:ze.defaultNode.style.stroke,fill:ze.defaultNode.style.fill,lineWidth:ze.defaultNode.style.lineWidth},labelCfg:{style:{fill:ze.nodeLabel.style.fill,fontSize:ze.nodeLabel.style.fontSize,fontFamily:ze.windowFontFamily}},linkPoints:{top:!1,right:!1,bottom:!1,left:!1,size:ze.defaultNode.linkPoints.size,lineWidth:ze.defaultNode.linkPoints.lineWidth,fill:ze.defaultNode.linkPoints.fill,stroke:ze.defaultNode.linkPoints.stroke},icon:{show:!1,img:"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg",width:20,height:20},stateStyles:E({},ze.nodeStateStyles)},shapeType:"star",labelPosition:"center",drawShape:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).icon,i=n===void 0?{}:n,a=this.getShapeStyle(e),o=t.addShape("path",{attrs:a,className:"".concat(this.type,"-keyShape"),name:"".concat(this.type,"-keyShape"),draggable:!0});t.shapeMap["".concat(this.type,"-keyShape")]=o;var s=i.width,l=i.height,u=i.show,f=i.text;return u&&(f?t.shapeMap["".concat(this.type,"-icon")]=t.addShape("text",{attrs:E({x:0,y:0,fontSize:12,fill:"#000",stroke:"#000",textBaseline:"middle",textAlign:"center"},i),className:"".concat(this.type,"-icon"),name:"".concat(this.type,"-icon"),draggable:!0}):t.shapeMap["".concat(this.type,"-icon")]=t.addShape("image",{attrs:E({x:-s/2,y:-l/2},i),className:"".concat(this.type,"-icon"),name:"".concat(this.type,"-icon"),draggable:!0})),this.drawLinkPoints(e,t),o},drawLinkPoints:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).linkPoints,i=n===void 0?{}:n,a=i.top,o=i.left,s=i.right,l=i.leftBottom,u=i.rightBottom,f=i.size,c=i.r,h=rr(i,["top","left","right","leftBottom","rightBottom","size","r"]),d=this.getSize(e),p=d[0];if(s){var v=Math.cos((18+72*0)/180*Math.PI)*p,m=Math.sin((18+72*0)/180*Math.PI)*p;t.shapeMap["link-point-right"]=t.addShape("circle",{attrs:E(E({},h),{x:v,y:-m,r:f/2||c||5}),className:"link-point-right",name:"link-point-right"})}if(a){var v=Math.cos((18+72*1)/180*Math.PI)*p,m=Math.sin((18+72*1)/180*Math.PI)*p;t.shapeMap["link-point-top"]=t.addShape("circle",{attrs:E(E({},h),{x:v,y:-m,r:f/2||c||5}),className:"link-point-top",name:"link-point-top"})}if(o){var v=Math.cos((18+72*2)/180*Math.PI)*p,m=Math.sin((18+72*2)/180*Math.PI)*p;t.shapeMap["link-point-left"]=t.addShape("circle",{attrs:E(E({},h),{x:v,y:-m,r:f/2||c||5}),className:"link-point-left",name:"link-point-left"})}if(l){var v=Math.cos((18+72*3)/180*Math.PI)*p,m=Math.sin((18+72*3)/180*Math.PI)*p;t.shapeMap["link-point-bottom"]=t.addShape("circle",{attrs:E(E({},h),{x:v,y:-m,r:f/2||c||5}),className:"link-point-left-bottom",name:"link-point-left-bottom"})}if(u){var v=Math.cos((18+72*4)/180*Math.PI)*p,m=Math.sin((18+72*4)/180*Math.PI)*p;t.shapeMap["link-point-right-bottom"]=t.addShape("circle",{attrs:E(E({},h),{x:v,y:-m,r:f/2||c||5}),className:"link-point-right-bottom",name:"link-point-right-bottom"})}},getPath:function(e){for(var t=this.getSize(e),n=t[0],i=n*3/8,a=e.innerR||i,o=[],s=0;s<5;s++){var l=Math.cos((18+72*s)/180*Math.PI)*n,u=Math.sin((18+72*s)/180*Math.PI)*n,f=Math.cos((54+72*s)/180*Math.PI)*a,c=Math.sin((54+72*s)/180*Math.PI)*a;s===0?o.push(["M",l,-u]):o.push(["L",l,-u]),o.push(["L",f,-c])}return o.push(["Z"]),o},getShapeStyle:function(e){var t=(this.mergeStyle||this.getOptions(e)).style,n={stroke:e.color},i=(0,nT.mix)({},t,n),a=this.getPath(e),o=E({path:a},i);return o},update:function(e,t,n){var i=t.getContainer(),a=this.getOptions({}).style,o=this.getPath(e),s={stroke:e.color,path:o},l=t.get("keyShape"),u=(0,nT.mix)({},a,l.attr(),s);u=(0,nT.mix)(u,e.style),this.updateShape(e,t,u,!0,n),this.updateLinkPoints(e,i)},updateLinkPoints:function(e,t){var n=this.getOptions({}).linkPoints,i=t.shapeMap["link-point-left"]||t.find(function(M){return M.get("className")==="link-point-left"}),a=t.shapeMap["link-point-right"]||t.find(function(M){return M.get("className")==="link-point-right"}),o=t.shapeMap["link-point-top"]||t.find(function(M){return M.get("className")==="link-point-top"}),s=t.shapeMap["link-point-left-bottom"]||t.find(function(M){return M.get("className")==="link-point-left-bottom"}),l=t.shapeMap["link-point-left-bottom"]||t.find(function(M){return M.get("className")==="link-point-right-bottom"}),u=n,f=i||a||o||s||l;f&&(u=f.attr());var c=(0,nT.mix)({},u,e.linkPoints),h=c.fill,d=c.stroke,p=c.lineWidth,v=c.size/2;v||(v=c.r);var m=e.linkPoints?e.linkPoints:{left:void 0,right:void 0,top:void 0,leftBottom:void 0,rightBottom:void 0},g=m.left,x=m.right,b=m.top,S=m.leftBottom,C=m.rightBottom,w=this.getSize(e),A=w[0],I={r:v,fill:h,stroke:d,lineWidth:p},P=Math.cos((18+72*0)/180*Math.PI)*A,L=Math.sin((18+72*0)/180*Math.PI)*A;a?!x&&x!==void 0?(a.remove(),delete t.shapeMap["link-point-right"]):a.attr(E(E({},I),{x:P,y:-L})):x&&(t.shapeMap["link-point-right"]=t.addShape("circle",{attrs:E(E({},I),{x:P,y:-L}),className:"link-point-right",name:"link-point-right",isAnchorPoint:!0})),P=Math.cos((18+72*1)/180*Math.PI)*A,L=Math.sin((18+72*1)/180*Math.PI)*A,o?!b&&b!==void 0?(o.remove(),delete t.shapeMap["link-point-top"]):o.attr(E(E({},I),{x:P,y:-L})):b&&(t.shapeMap["link-point-top"]=t.addShape("circle",{attrs:E(E({},I),{x:P,y:-L}),className:"link-point-top",name:"link-point-top",isAnchorPoint:!0})),P=Math.cos((18+72*2)/180*Math.PI)*A,L=Math.sin((18+72*2)/180*Math.PI)*A,i?!g&&g!==void 0?(i.remove(),delete t.shapeMap["link-point-left"]):i.attr(E(E({},I),{x:P,y:-L})):g&&(t.shapeMap["link-point-left"]=t.addShape("circle",{attrs:E(E({},I),{x:P,y:-L}),className:"link-point-left",name:"link-point-left",isAnchorPoint:!0})),P=Math.cos((18+72*3)/180*Math.PI)*A,L=Math.sin((18+72*3)/180*Math.PI)*A,s?!S&&S!==void 0?(s.remove(),delete t.shapeMap["link-point-left-bottom"]):s.attr(E(E({},I),{x:P,y:-L})):S&&(t.shapeMap["link-point-left-bottom"]=t.addShape("circle",{attrs:E(E({},I),{x:P,y:-L}),className:"link-point-left-bottom",name:"link-point-left-bottom",isAnchorPoint:!0})),P=Math.cos((18+72*4)/180*Math.PI)*A,L=Math.sin((18+72*4)/180*Math.PI)*A,l?!C&&C!==void 0?(s.remove(),delete t.shapeMap["link-point-right-bottom"]):l.attr(E(E({},I),{x:P,y:-L})):C&&(t.shapeMap["link-point-right-bottom"]=t.addShape("circle",{attrs:E(E({},I),{x:P,y:-L}),className:"link-point-right-bottom",name:"link-point-right-bottom",isAnchorPoint:!0}))}},"single-node");var tF=U(q()),iT=Pa.defaultSubjectColors;Xo("donut",{options:{size:ze.defaultNode.size,style:{x:0,y:0,stroke:ze.defaultNode.style.stroke,fill:ze.defaultNode.style.fill,lineWidth:ze.defaultNode.style.lineWidth},labelCfg:{style:{fill:ze.nodeLabel.style.fill,fontSize:ze.nodeLabel.style.fontSize,fontFamily:ze.windowFontFamily}},linkPoints:{top:!1,right:!1,bottom:!1,left:!1,size:ze.defaultNode.linkPoints.size,lineWidth:ze.defaultNode.linkPoints.lineWidth,fill:ze.defaultNode.linkPoints.fill,stroke:ze.defaultNode.linkPoints.stroke},icon:{show:!1,img:"https://gw.alipayobjects.com/zos/bmw-prod/5d015065-8505-4e7a-baec-976f81e3c41d.svg",width:20,height:20},stateStyles:E({},ze.nodeStateStyles)},shapeType:"circle",labelPosition:"center",drawShape:function(e,t){var n=(this.mergeStyle||this.getOptions(e)).icon,i=n===void 0?{}:n,a=this.getShapeStyle(e),o=(0,tF.deepMix)({},i,e.icon),s=t.addShape("circle",{attrs:a,className:"".concat(this.type,"-keyShape"),draggable:!0,name:"".concat(this.type,"-keyShape")});t.shapeMap["".concat(this.type,"-keyShape")]=s;var l=o.width,u=o.height,f=o.show,c=o.text;f&&(c?t.shapeMap["".concat(this.type,"-icon")]=t.addShape("text",{attrs:E({x:0,y:0,fontSize:12,fill:"#000",stroke:"#000",textBaseline:"middle",textAlign:"center"},o),className:"".concat(this.type,"-icon"),name:"".concat(this.type,"-icon"),draggable:!0}):t.shapeMap["".concat(this.type,"-icon")]=t.addShape("image",{attrs:E({x:-l/2,y:-u/2},o),className:"".concat(this.type,"-icon"),name:"".concat(this.type,"-icon"),draggable:!0}));var h=s.attr("r"),d=.6*h,p=(h+d)/2,v=e,m=v.donutAttrs,g=m===void 0?{}:m,x=v.donutColorMap,b=x===void 0?{}:x,S=Object.keys(g).length;if(g&&S>1){var C=[],w=0;if(Object.keys(g).forEach(function(L){var M=g[L]||0;!(0,tF.isNumber)(M)||(C.push({key:L,value:M,color:b[L]}),w+=M)}),w){var A=h-d;if(S===1){t.shapeMap["fan-shape-0"]=t.addShape("circle",{attrs:{r:p,x:0,y:0,stroke:C[0].color||iT[0],lineWidth:A},name:"fan-shape-0"});return}var I=[p,0],P=0;C.forEach(function(L,M){var O=L.value/w;if(!(O<.001)){if(O>.999&&(O=1),O===1){t.shapeMap["fan-shape-".concat(M)]=t.addShape("circle",{attrs:{r:p,x:0,y:0,stroke:L.color||iT[M%iT.length],lineWidth:A},name:"fan-shape-".concat(M)});return}L.percent=O,L.angle=O*Math.PI*2,L.beginAgnle=P,P+=L.angle,L.endAngle=P,L.arcBegin=I,L.arcEnd=[p*Math.cos(L.endAngle),-p*Math.sin(L.endAngle)];var F=L.angle>Math.PI?1:0,k=[["M",L.arcBegin[0],L.arcBegin[1]],["A",p,p,0,F,0,L.arcEnd[0],L.arcEnd[1]],["L",L.arcEnd[0],L.arcEnd[1]]];t.shapeMap["fan-shape-".concat(M)]=t.addShape("path",{attrs:{path:k,lineWidth:A,stroke:L.color||iT[M%iT.length]},name:"fan-shape-".concat(M)}),I=L.arcEnd}})}}return this.drawLinkPoints(e,t),s},update:void 0},"circle");var ll=U(q());var eF=function(e){var t=e.x,n=e.y;return{x:t,y:n,centerX:t,centerY:n,minX:t,minY:n,maxX:t,maxY:n,height:0,width:0}},dpe=function(e){e===void 0&&(e=[]);var t=[],n=[];e.forEach(function(l){t.push(l.x),n.push(l.y)});var i=Math.min.apply(Math,t),a=Math.max.apply(Math,t),o=Math.min.apply(Math,n),s=Math.max.apply(Math,n);return{centerX:(i+a)/2,centerY:(o+s)/2,maxX:a,maxY:s,minX:i,minY:o,height:s-o,width:a-i}};var _X=function(e){for(var t=[],n={},i=e.length,a=i-1;a>=0;a--){var o=e[a];o.id="".concat(o.x,"|||").concat(o.y),n[o.id]=o,t.push(o)}return t},SX=function(e){return _X(e)};var aT=function(e,t){return e.width||e.height?{centerX:e.centerX,centerY:e.centerY,minX:e.minX-t,minY:e.minY-t,maxX:e.maxX+t,maxY:e.maxY+t,height:e.height+2*t,width:e.width+2*t}:e},ppe=function(e,t){var n=Math.abs(e.x-t.centerX),i=Math.abs(e.y-t.centerY);return n===0&&i===0?0:n/t.width>i/t.height},rF=function(e,t,n){var i=ppe(t,e);if(i===0){var a=e.centerX,o=e.centerY;return n.yt.x?a=e.maxX:n.xe.centerX?e.maxX:e.minX,y:t.y}:{x:t.x,y:t.y>e.centerY?e.maxY:e.minY}},aEt=function(e,t){var n=Math.min(e.minX,t.minX),i=Math.min(e.minY,t.minY),a=Math.max(e.maxX,t.maxX),o=Math.max(e.maxY,t.maxY);return{centerX:(n+a)/2,centerY:(i+o)/2,minX:n,minY:i,maxX:a,maxY:o,height:o-i,width:a-n}},CX=function(e){return[{x:e.minX,y:e.minY},{x:e.maxX,y:e.minY},{x:e.maxX,y:e.maxY},{x:e.minX,y:e.maxY}]},nF=function(e,t){var n=e.x,i=e.y;return nt.maxX||it.maxY},vpe=function(e,t){return te.maxX?[]:[{x:t,y:e.minY},{x:t,y:e.maxY}]},mpe=function(e,t){return te.maxY?[]:[{x:e.minX,y:t},{x:e.maxX,y:t}]},gpe=function(e,t){return vpe(e,t.x).concat(mpe(e,t.y))},oT=function(e,t){return Math.abs(e.x-t.x)+Math.abs(e.y-t.y)},ype=function(e,t){var n=-2,i=0;return t.forEach(function(a){a&&(e.x===a.x&&(i+=n),e.y===a.y&&(i+=n))}),i},oEt=function(e,t,n,i,a){return oT(e,t)+oT(e,n)+ype(e,[t,n,i,a])},xpe=function r(e,t,n,i,a){a===void 0&&(a=0),e.unshift(t[i]),n[i]&&n[i]!==i&&a<=100&&r(e,t,n,n[i],a+1)},bpe=function(e,t){var n=e.indexOf(t);n>-1&&e.splice(n,1)},iF=function(e,t,n,i){var a=n.x-e.x,o=n.y-e.y,s=i.x-e.x,l=i.y-e.y,u=n.x-t.x,f=n.y-t.y,c=i.x-t.x,h=i.y-t.y,d=a*l-o*s,p=u*h-f*c,v=a*f-o*u,m=s*h-l*c;return d*p<=0&&v*m<=0},aF=function(e,t,n){if(n.width||n.height){var i=CX(n),a=i[0],o=i[1],s=i[2],l=i[3];return iF(e,t,a,o)||iF(e,t,a,l)||iF(e,t,o,s)||iF(e,t,s,l)}return!1},_pe=function(e,t,n,i){var a=[];return e.forEach(function(o){if(o!==t&&(o.x===t.x||o.y===t.y)){if(aF(o,t,n)||aF(o,t,i))return;a.push(o)}}),_X(a)},Spe=function(e,t,n,i,a,o,s){var l=[],u=[t],f={},c={},h={};c[t.id]=0,h[t.id]=oEt(t,n,t);var d={};e.forEach(function(g){d[g.id]=g});for(var p,v;u.length;){if(p=void 0,v=1/0,u.forEach(function(g){h[g.id]<=v&&(v=h[g.id],p=g)}),p===n){var m=[];return xpe(m,d,f,n.id),m}bpe(u,p),l.push(p),_pe(e,p,i,a).forEach(function(g){if(l.indexOf(g)===-1){u.indexOf(g)===-1&&u.push(g);var x=h[p.id]+oT(p,g);c[g.id]&&x>=c[g.id]||(f[g.id]=p.id,c[g.id]=x,h[g.id]=c[g.id]+oEt(g,n,t,o,s))}})}return[t,n]},Cpe=function(e,t,n){return!(e.x===t.x&&t.x===n.x||e.y===t.y&&t.y===n.y)},wpe=function(e,t,n,i){var a=oT(e,t),o=oT(n,t);aMath.PI?2*Math.PI-n:n},uEt=function(e,t,n){for(var i=1/0,a=0,o=t.length;au.minX&&t.xu.minY&&t.y0&&S>0&&(w=void 0,A=1/0,Object.keys(d).forEach(function(F){var k=d[F].id;g[k]<=A&&(A=g[k],w=d[k])}),!!w);){if(h.findIndex(function(F){return F.x===w.x&&F.y===w.y})>-1)return Ope(w,v,u,t,e,f,s);delete d[w.id],p[w.id]=!0;for(var x=0;xo.maxAllowedDirectionChange)&&(l[P.id]||(d[P.id]||(d[P.id]=P),L=o.distFunc(w,P)+(isNaN(C[O])?s:C[O]),M=m[w.id]+L,!(m[P.id]&&M>=m[P.id])&&(v[P.id]=w,m[P.id]=M,g[P.id]=M+uEt(P,h,o.distFunc)))));S-=1}return o.fallbackRoute(e,t,n,i,o)};Ek("polyline",{options:{color:ze.defaultEdge.color,size:ze.defaultEdge.size,style:{radius:0,offset:15,x:0,y:0,stroke:ze.defaultEdge.style.stroke,lineAppendWidth:ze.defaultEdge.style.lineAppendWidth},labelCfg:{style:{fill:ze.edgeLabel.style.fill,fontSize:ze.edgeLabel.style.fontSize,fontFamily:ze.windowFontFamily}},routeCfg:{obstacles:[],maxAllowedDirectionChange:Math.PI,maximumLoops:500,gridSize:10},stateStyles:E({},ze.edgeStateStyles)},shapeType:"polyline",labelPosition:"center",drawShape:function(e,t){var n=this.getShapeStyle(e);n.radius===0&&delete n.radius;var i=t.addShape("path",{className:"edge-shape",name:"edge-shape",attrs:n});return t.shapeMap["edge-shape"]=i,i},getShapeStyle:function(e){var t=this.options.style,n={stroke:e.color},i=(0,ll.mix)({},t,n,e.style);e=this.getPathPoints(e),this.radius=i.radius,this.offset=i.offset;var a=e.startPoint,o=e.endPoint,s=this.getControlPoints(e),l=[a];s&&(l=l.concat(s)),l.push(o);var u=e.sourceNode,f=e.targetNode,c=i.radius,h=this.options.routeCfg,d=(0,ll.mix)({},h,e.routeCfg);d.offset=i.offset;var p=this.getPath(l,u,f,c,d);((0,ll.isArray)(p)&&p.length<=1||(0,ll.isString)(p)&&p.indexOf("L")===-1)&&(p="M0 0, L0 0"),(isNaN(a.x)||isNaN(a.y)||isNaN(o.x)||isNaN(o.y))&&(p="M0 0, L0 0");var v=(0,ll.mix)({},ze.defaultEdge.style,i,{lineWidth:e.size,path:p});return v},updateShapeStyle:function(e,t){var n=t.getContainer();if(!!t.isVisible()){var i={stroke:e.color},a=n.shapeMap["edge-shape"]||n.find(function(S){return S.get("className")==="edge-shape"})||t.getKeyShape(),o=e.size;e=this.getPathPoints(e);var s=e.startPoint,l=e.endPoint,u=this.getControlPoints(e),f=[s];u&&(f=f.concat(u)),f.push(l);var c=a.attr(),h=(0,ll.mix)({},i,c,e.style),d=e.sourceNode,p=e.targetNode,v=h.radius,m=this.options.routeCfg,g=(0,ll.mix)({},m,e.routeCfg);g.offset=h.offset;var x=this.getPath(f,d,p,v,g);((0,ll.isArray)(x)&&x.length<=1||(0,ll.isString)(x)&&x.indexOf("L")===-1)&&(x="M0 0, L0 0"),(isNaN(s.x)||isNaN(s.y)||isNaN(l.x)||isNaN(l.y))&&(x="M0 0, L0 0"),c.endArrow&&h.endArrow===!1&&(e.style.endArrow={path:""}),c.startArrow&&h.startArrow===!1&&(e.style.startArrow={path:""});var b=(0,ll.mix)(i,a.attr(),{lineWidth:o,path:x},e.style);a&&a.attr(b)}},getPath:function(e,t,n,i,a){var o=a.offset,s=a.simple;if(!o||e.length>2){if(i)return wX(e,i);var l=[];return(0,ll.each)(e,function(h,d){d===0?l.push(["M",h.x,h.y]):l.push(["L",h.x,h.y])}),l}var u=s?oF(e[e.length-1],e[0],n,t,o):cEt(e[0],e[e.length-1],t,n,a);if(!u||!u.length)return"M0 0, L0 0";if(i){var f=wX(u,i);return f}var c=Pa.pointsToPolygon(u);return c}},"single-edge");var jEt=U(q());var hEt=al.cloneEvent,dEt=al.isNaN,pEt=Math.abs,Dpe=10,Ppe=["shift","ctrl","alt","control"],vEt={getDefaultCfg:function(){return{direction:"both",enableOptimize:!1,scalableRange:0,allowDragOnItem:!1}},getEvents:function(){return{dragstart:"onMouseDown",drag:"onMouseMove",dragend:"onMouseUp","canvas:click":"onMouseUp",keyup:"onKeyUp",focus:"onKeyUp",keydown:"onKeyDown",touchstart:"onTouchStart",touchmove:"onTouchMove",touchend:"onMouseUp"}},updateViewport:function(e){var t=this.origin,n=+e.clientX,i=+e.clientY;if(!(dEt(n)||dEt(i))){var a=n-t.x,o=i-t.y;this.get("direction")==="x"?o=0:this.get("direction")==="y"&&(a=0),this.origin={x:n,y:i};var s=this.graph.get("width"),l=this.graph.get("height"),u=this.graph.get("canvas").getCanvasBBox(),f=this.scalableRange,c=this.scalableRange;f<1&&f>-1&&(f=s*f,c=l*c),(u.minX<=s+f&&u.minX+a>s+f||u.maxX+f>=0&&u.maxX+f+a<0)&&(a=0),(u.minY<=l+c&&u.minY+o>l+c||u.maxY+c>=0&&u.maxY+c+o<0)&&(o=0),this.graph.translate(a,o)}},onTouchStart:function(e){var t=this,n=e.originalEvent.touches,i=n[0],a=n[1];i&&a||(e.preventDefault(),t.onMouseDown(e))},onMouseDown:function(e){var t=this,n=e.originalEvent;if(!(n&&e.name!==QA.TOUCHSTART&&n.button!==0)&&!(e.name!==QA.TOUCHSTART&&typeof window!="undefined"&&window.event&&!window.event.buttons&&!window.event.button)&&!!this.shouldBegin.call(this,e)&&!t.keydown){var i=e.target,a=i&&i.isCanvas&&i.isCanvas();if(!(!this.allowDragOnItem&&!a)&&(t.origin={x:e.clientX,y:e.clientY},t.dragging=!1,this.enableOptimize)){for(var o=this.graph,s=o.getEdges(),l=0,u=s.length;ll)for(var d=i.getNodes(),p=0,v=d.length;p-1?t.keydown=!0:t.keydown=!1)},onKeyUp:function(){this.keydown=!1,this.origin=null,this.dragging=!1,this.dragbegin=!1}};var hx=U(q());var mEt={getDefaultCfg:function(){return{updateEdge:!0,delegateStyle:{},enableDelegate:!1,onlyChangeComboSize:!1,comboActiveState:"",selectedState:"selected",enableOptimize:!1,enableDebounce:!1,enableStack:!0}},getEvents:function(){return{"node:dragstart":"onDragStart","node:drag":"onDrag","node:dragend":"onDragEnd","combo:dragenter":"onDragEnter","combo:dragleave":"onDragLeave","combo:drop":"onDropCombo","node:drop":"onDropNode","canvas:drop":"onDropCanvas",touchstart:"onTouchStart",touchmove:"onTouchMove",touchend:"onDragEnd"}},validationCombo:function(e){if(!this.origin||!e||e.destroyed)return!1;var t=e.getType();return t==="combo"},onTouchStart:function(e){if(!!e.item){var t=this;try{var n=e.originalEvent.touches,i=n[0],a=n[1];if(i&&a)return;e.preventDefault()}catch(o){console.warn("Touch original event not exist!")}t.onDragStart(e)}},onTouchMove:function(e){var t=this;try{var n=e.originalEvent.touches,i=n[0],a=n[1];if(i&&a){t.onDragEnd(e);return}e.preventDefault()}catch(o){console.warn("Touch original event not exist!")}t.onDrag(e)},onDragStart:function(e){var t=this;if(this.currentShouldEnd=!0,!!this.shouldBegin.call(this,e)){var n=e.item;if(!(!n||n.destroyed||n.hasLocked())){var i=n.getContainer();i.set("capture",!1),this.cachedCaptureItems||(this.cachedCaptureItems=[]),this.cachedCaptureItems.push(n);var a=e.target;if(a){var o=a.get("isAnchorPoint");if(o)return}var s=this.graph;this.targets=[],this.targetCombo=null;var l=s.findAllByState("node",this.selectedState),u=n.get("id"),f=l.filter(function(h){var d=h.get("id");return u===d});f.length===0?this.targets.push(n):l.length>1?l.forEach(function(h){var d=h.hasLocked();d||t.targets.push(h)}):this.targets.push(n);var c=[];this.targets.forEach(function(h){c.push((0,hx.clone)(h.getModel()))}),this.set("beforeDragNodes",c),this.hidenEdge={},this.get("updateEdge")&&this.enableOptimize&&!this.enableDelegate&&this.targets.forEach(function(h){var d=h.getEdges();d.forEach(function(p){!p.isVisible()||(t.hidenEdge[p.getID()]=!0,p.hide())})}),this.origin={x:e.x,y:e.y},this.point={},this.originPoint={}}}},onDrag:function(e){var t=this;!this.origin||!this.shouldUpdate.call(this,e)||(this.get("enableDelegate")?this.updateDelegate(e):this.enableDebounce?this.debounceUpdate({targets:this.targets,graph:this.graph,point:this.point,origin:this.origin,evt:e,updateEdge:this.get("updateEdge")}):this.targets.map(function(n){t.update(n,e)}))},onDragEnd:function(e){var t=this,n;if(!!this.origin){(n=this.cachedCaptureItems)===null||n===void 0||n.forEach(function(o){var s=o.getContainer();s.set("capture",!0)}),this.cachedCaptureItems=[],this.delegateRect&&(this.delegateRect.remove(),this.delegateRect=null),this.get("updateEdge")&&this.enableOptimize&&!this.enableDelegate&&this.targets.forEach(function(o){var s=o.getEdges();s.forEach(function(l){t.hidenEdge[l.getID()]&&l.show(),l.refresh()})}),this.hidenEdge={};var i=this.graph;if(i.get("enabledStack")&&this.enableStack){var a={before:{nodes:[],edges:[],combos:[]},after:{nodes:[],edges:[],combos:[]}};this.get("beforeDragNodes").forEach(function(o){a.before.nodes.push({id:o.id,x:o.x,y:o.y})}),this.targets.forEach(function(o){var s=o.getModel();a.after.nodes.push({id:s.id,x:s.x,y:s.y})}),i.pushStack("update",(0,hx.clone)(a))}i.emit("dragnodeend",{items:this.targets,targetItem:null}),this.point={},this.origin=null,this.originPoint={},this.targets.length=0,this.targetCombo=null}},onDropCombo:function(e){var t=e.item;if(this.currentShouldEnd=this.shouldEnd.call(this,e,t),this.updatePositions(e,!this.currentShouldEnd),!(!this.currentShouldEnd||!this.validationCombo(t))){var n=this.graph;if(this.comboActiveState&&n.setItemState(t,this.comboActiveState,!1),this.targetCombo=t,this.onlyChangeComboSize)n.updateCombos();else{var i=t.getModel();this.targets.map(function(a){var o=a.getModel();o.comboId!==i.id&&n.updateComboTree(a,i.id)}),n.updateCombo(t)}n.emit("dragnodeend",{items:this.targets,targetItem:this.targetCombo})}},onDropCanvas:function(e){var t=this.graph;this.currentShouldEnd=this.shouldEnd.call(this,e,void 0),this.updatePositions(e,!this.currentShouldEnd),!(!this.targets||this.targets.length===0||!this.currentShouldEnd)&&(this.onlyChangeComboSize?t.updateCombos():this.targets.map(function(n){var i=n.getModel();i.comboId&&t.updateComboTree(n)}))},onDropNode:function(e){if(!(!this.targets||this.targets.length===0)){var t=this,n=e.item,i=t.graph,a=n.getModel().comboId,o=a?i.findById(a):void 0;if(this.currentShouldEnd=this.shouldEnd.call(this,e,o),this.updatePositions(e,!this.currentShouldEnd),!!this.currentShouldEnd){if(this.onlyChangeComboSize)i.updateCombos();else if(a){var s=i.findById(a);t.comboActiveState&&i.setItemState(s,t.comboActiveState,!1),this.targets.map(function(l){var u=l.getModel();a!==u.comboId&&i.updateComboTree(l,a)}),i.updateCombo(s)}else this.targets.map(function(l){var u=l.getModel();u.comboId&&i.updateComboTree(l)});i.emit("dragnodeend",{items:this.targets,targetItem:n})}}},onDragEnter:function(e){var t=e.item;if(!!this.validationCombo(t)){var n=this.graph;this.comboActiveState&&n.setItemState(t,this.comboActiveState,!0)}},onDragLeave:function(e){var t=e.item;if(!!this.validationCombo(t)){var n=this.graph;this.comboActiveState&&n.setItemState(t,this.comboActiveState,!1)}},updatePositions:function(e,t){var n=this;!this.targets||this.targets.length===0||(this.get("enableDelegate")?this.enableDebounce?this.debounceUpdate({targets:this.targets,graph:this.graph,point:this.point,origin:this.origin,evt:e,updateEdge:this.get("updateEdge"),updateFunc:this.update}):t||this.targets.map(function(i){return n.update(i,e)}):this.targets.map(function(i){return n.update(i,e,t)}))},update:function(e,t,n){var i=this.origin,a=e.get("model"),o=e.get("id");this.point[o]||(this.point[o]={x:a.x||0,y:a.y||0});var s=t.x-i.x+this.point[o].x,l=t.y-i.y+this.point[o].y;n&&(s+=i.x-t.x,l+=i.y-t.y);var u={x:s,y:l};this.get("updateEdge")?this.graph.updateItem(e,u,!1):e.updatePosition(u)},debounceUpdate:(0,hx.debounce)(function(r){var e=r.targets,t=r.graph,n=r.point,i=r.origin,a=r.evt,o=r.updateEdge,s=r.updateFunc;e.map(function(l){var u=l.get("model"),f=l.get("id");n[f]||(n[f]={x:u.x||0,y:u.y||0});var c=a.x-i.x+n[f].x,h=a.y-i.y+n[f].y,d={x:c,y:h};o?t.updateItem(l,d,!1):l.updatePosition(d)})},50,!0),updateDelegate:function(e){var t=this.graph;if(this.delegateRect){var h=e.x-this.origin.x+this.originPoint.minX,d=e.y-this.origin.y+this.originPoint.minY;this.delegateRect.attr({x:h,y:d})}else{var n=t.get("group"),i=(0,hx.deepMix)({},bc.delegateStyle,this.delegateStyle),a=this.calculationGroupPosition(e),o=a.x,s=a.y,l=a.width,u=a.height,f=a.minX,c=a.minY;this.originPoint={x:o,y:s,width:l,height:u,minX:f,minY:c},this.delegateRect=n.addShape("rect",{attrs:E({width:l,height:u,x:o,y:s},i),name:"rect-delegate-shape"}),this.delegate=this.delegateRect,this.delegateRect.set("capture",!1)}},calculationGroupPosition:function(e){var t=this.targets;t.length===0&&t.push(e.item);for(var n=1/0,i=-1/0,a=1/0,o=-1/0,s=0;si&&(i=h),d>o&&(o=d)}var p=Math.floor(n),v=Math.floor(a),m=Math.ceil(i)-Math.floor(n),g=Math.ceil(o)-Math.floor(a);return{x:p,y:v,width:m,height:g,minX:n,minY:a}}};var gEt={getDefaultCfg:function(){return{trigger:"mouseenter",activeState:"active",inactiveState:"inactive",resetSelected:!1,shouldUpdate:function(){return!0}}},getEvents:function(){return this.get("trigger")==="mouseenter"?{"node:mouseenter":"setAllItemStates","combo:mouseenter":"setAllItemStates","node:mouseleave":"clearActiveState","combo:mouseleave":"clearActiveState"}:{"node:click":"setAllItemStates","combo:click":"setAllItemStates","canvas:click":"clearActiveState","node:touchstart":"setOnTouchStart","combo:touchstart":"setOnTouchStart","canvas:touchstart":"clearOnTouchStart"}},setOnTouchStart:function(e){var t=this;try{var n=e.originalEvent.touches,i=n[0],a=n[1];if(i&&a)return;e.preventDefault()}catch(o){console.warn("Touch original event not exist!")}t.setAllItemStates(e)},clearOnTouchStart:function(e){var t=this;try{var n=e.originalEvent.touches,i=n[0],a=n[1];if(i&&a)return;e.preventDefault()}catch(o){console.warn("Touch original event not exist!")}t.clearActiveState(e)},setAllItemStates:function(e){var t=e.item,n=this.graph;if(this.item=t,!!this.shouldUpdate(e.item,{event:e,action:"activate"})){for(var i=this,a=this.activeState,o=this.inactiveState,s=n.getNodes(),l=n.getCombos(),u=n.getEdges(),f=n.get("vedges"),c=s.length,h=l.length,d=u.length,p=f.length,v=0;v-1||(this.trigger=bEt,console.warn("Behavior brush-select \u7684 trigger \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'drag'\u3001'shift'\u3001'ctrl' \u6216 'alt'")),this.trigger==="drag"?{dragstart:"onMouseDown",drag:"onMouseMove",dragend:"onMouseUp","canvas:click":"clearStates"}:{dragstart:"onMouseDown",drag:"onMouseMove",dragend:"onMouseUp","canvas:click":"clearStates",keyup:"onKeyUp",keydown:"onKeyDown"}},onMouseDown:function(e){var t=e.item,n=this.brush;t||this.trigger!=="drag"&&!this.keydown||(this.selectedNodes&&this.selectedNodes.length!==0&&this.clearStates(),n||(n=this.createBrush()),this.originPoint={x:e.canvasX,y:e.canvasY},n.attr({width:0,height:0}),n.show(),this.dragging=!0)},onMouseMove:function(e){!this.dragging||this.trigger!=="drag"&&!this.keydown||this.updateBrush(e)},onMouseUp:function(e){var t=this.graph;!this.brush&&!this.dragging||this.trigger!=="drag"&&!this.keydown||(this.brush.remove(!0),this.brush=null,this.getSelectedNodes(e),this.dragging=!1)},clearStates:function(){var e=this,t=e.graph,n=e.selectedState,i=t.findAllByState("node",n),a=t.findAllByState("edge",n);i.forEach(function(o){return t.setItemState(o,n,!1)}),a.forEach(function(o){return t.setItemState(o,n,!1)}),this.selectedNodes=[],this.selectedEdges=[],this.onDeselect&&this.onDeselect(this.selectedNodes,this.selectedEdges),t.emit("nodeselectchange",{selectedItems:{nodes:[],edges:[]},select:!1})},getSelectedNodes:function(e){var t=this,n=this,i=n.graph,a=n.originPoint,o=n.shouldUpdate,s=this.selectedState,l={x:e.x,y:e.y},u=i.getPointByCanvas(a.x,a.y),f=sF(l.x,u.x),c=yEt(l.x,u.x),h=sF(l.y,u.y),d=yEt(l.y,u.y),p=[],v=[];i.getNodes().forEach(function(g){if(!!g.isVisible()){var x=g.getBBox();if(x.centerX>=f&&x.centerX<=c&&x.centerY>=h&&x.centerY<=d&&o(g,"select")){p.push(g);var b=g.getModel();v.push(b.id),i.setItemState(g,s,!0)}}});var m=[];this.includeEdges&&p.forEach(function(g){var x=g.getOutEdges();x.forEach(function(b){if(!!b.isVisible()){var S=b.getModel(),C=S.source,w=S.target;v.includes(C)&&v.includes(w)&&o(b,"select")&&(m.push(b),i.setItemState(b,t.selectedState,!0))}})}),this.selectedEdges=m,this.selectedNodes=p,this.onSelect&&this.onSelect(p,m),i.emit("nodeselectchange",{selectedItems:{nodes:p,edges:m},select:!0})},createBrush:function(){var e=this,t=e.graph.get("canvas").addShape("rect",{attrs:e.brushStyle,capture:!1,name:"brush-shape"});return this.brush=t,this.delegate=t,t},updateBrush:function(e){var t=this.originPoint;this.brush.attr({width:xEt(e.canvasX-t.x),height:xEt(e.canvasY-t.y),x:sF(e.canvasX,t.x),y:sF(e.canvasY,t.y)})},onKeyDown:function(e){var t=e.key;if(!!t){var n=this.trigger.toLowerCase(),i=t.toLowerCase();i===n||i==="control"&&n==="ctrl"||i==="ctrl"&&n==="control"?this.keydown=!0:this.keydown=!1}},onKeyUp:function(){this.brush&&(this.brush.remove(!0),this.brush=null,this.dragging=!1),this.keydown=!1}};var lF=U(q()),SEt="shift",Rpe=["shift","ctrl","alt","control"],CEt={getDefaultCfg:function(){return{multiple:!0,trigger:SEt,selectedState:"selected"}},getEvents:function(){var e=this;return Rpe.indexOf(e.trigger.toLowerCase())>-1||(e.trigger=SEt,console.warn("Behavior brush-select \u7684 trigger \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'drag'\u3001'shift'\u3001'ctrl' \u6216 'alt'")),e.multiple?{"node:click":"onClick","combo:click":"onClick","canvas:click":"onCanvasClick",keyup:"onKeyUp",keydown:"onKeyDown"}:{"node:click":"onClick","combo:click":"onClick","canvas:click":"onCanvasClick"}},onClick:function(e){var t=this,n=e.item;if(!(!n||n.destroyed)){var i=n.getType(),a=t.graph,o=t.keydown,s=t.multiple,l=t.shouldUpdate,u=t.shouldBegin;if(!!u.call(t,e)){if(!o||!s){var f=a.findAllByState("node",t.selectedState).concat(a.findAllByState("combo",t.selectedState));(0,lF.each)(f,function(d){d!==n&&a.setItemState(d,t.selectedState,!1)})}if(n.hasState(t.selectedState)){l.call(t,e)&&a.setItemState(n,t.selectedState,!1);var c=a.findAllByState("node",t.selectedState),h=a.findAllByState("combo",t.selectedState);a.emit("nodeselectchange",{target:n,selectedItems:{nodes:c,combos:h},select:!1})}else{l.call(t,e)&&a.setItemState(n,t.selectedState,!0);var c=a.findAllByState("node",t.selectedState),h=a.findAllByState("combo",t.selectedState);a.emit("nodeselectchange",{target:n,selectedItems:{nodes:c,combos:h},select:!0})}}}},onCanvasClick:function(){var e=this,t=this.graph,n=t.findAllByState("node",this.selectedState);(0,lF.each)(n,function(a){t.setItemState(a,e.selectedState,!1)});var i=t.findAllByState("combo",this.selectedState);(0,lF.each)(i,function(a){t.setItemState(a,e.selectedState,!1)}),t.emit("nodeselectchange",{selectedItems:{nodes:[],edges:[],combos:[]},select:!1})},onKeyDown:function(e){var t=this,n=e.key;!n||(n.toLowerCase()===this.trigger.toLowerCase()||n.toLowerCase()==="control"?t.keydown=!0:t.keydown=!1)},onKeyUp:function(){var e=this;e.keydown=!1}};var wEt=U(q()),Npe=gr.transform,EEt=.05,AEt={getDefaultCfg:function(){return{sensitivity:2,minZoom:void 0,maxZoom:void 0,enableOptimize:!1,optimizeZoom:.1,fixSelectedItems:{fixAll:!1,fixLineWidth:!1,fixLabel:!1,fixState:"selected"},animate:!1,animateCfg:{duration:500}}},getEvents:function(){var e=this.fixSelectedItems;return e.fixState||(e.fixState="selected"),e.fixAll&&(e.fixLineWidth=!0,e.fixLabel=!0),{wheel:"onWheel",touchstart:"onTouchStart",touchmove:"onTouchMove",touchend:"onTouchEnd"}},onTouchStart:function(e){var t=e.originalEvent.touches,n=t[0],i=t[1];e.preventDefault(),!!i&&(this.shouldBegin&&!this.shouldBegin.call(this,e)||(this.startPoint={pageX:n.pageX,pageY:n.pageY},this.moveable=!0,i&&(this.endPoint={pageX:i.pageX,pageY:i.pageY}),this.originScale=this.graph.getZoom()||this.currentScale||1))},onTouchMove:function(e){if(!!this.moveable){e.preventDefault();var t=e.originalEvent.touches,n=t[0],i=t[1];if(!!i){this.endPoint||(this.endPoint={pageX:i.pageX,pageY:i.pageY});var a=function(v,m){return Math.hypot(m.x-v.x,m.y-v.y)},o=a({x:n.pageX,y:n.pageY},{x:i.pageX,y:i.pageY})/a({x:this.startPoint.pageX,y:this.startPoint.pageY},{x:this.endPoint.pageX,y:this.endPoint.pageY}),s=this.originScale*o;this.currentScale=s;var l=this.get("minZoom")||this.graph.get("minZoom"),u=this.get("maxZoom")||this.graph.get("maxZoom");if(!(s>u||sd||ci/2?f-=h.width:f+=this.offset,c>a/2?c-=h.height:c+=this.offset;var d="".concat(f,"px"),p="".concat(c,"px");yr(this.container,{left:d,top:p,visibility:"visible"})},createTooltip:function(e){var t=e.get("el");t.style.position="relative";var n=en('
      '));return t.parentNode.appendChild(n),yr(n,{position:"absolute",visibility:"visible"}),this.width=e.get("width"),this.height=e.get("height"),this.container=n,this.graph.get("tooltips").push(n),n}};var MEt=E({getDefaultCfg:function(){return{item:"node",offset:12,formatText:function(t){return t.label}}},getEvents:function(){return{"node:mouseenter":"onMouseEnter","node:mouseleave":"onMouseLeave","node:mousemove":"onMouseMove",afterremoveitem:"onMouseLeave"}}},uF);var TEt=E({getDefaultCfg:function(){return{item:"edge",offset:12,formatText:function(t){return"source: ".concat(t.source," target: ").concat(t.target)}}},getEvents:function(){return{"edge:mouseenter":"onMouseEnter","edge:mouseleave":"onMouseLeave","edge:mousemove":"onMouseMove",afterremoveitem:"onMouseLeave"}}},uF);var IEt="click",Fpe=["click","dblclick"],LEt={getDefaultCfg:function(){return{trigger:IEt,onChange:function(){}}},getEvents:function(){var e,t;return Fpe.includes(this.trigger)?t=this.trigger:(t=IEt,console.warn("Behavior collapse-expand \u7684 trigger \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'click' \u6216 'dblclick'")),e={},e["node:".concat(t)]="onNodeClick",e.touchstart="onNodeClick",e},onNodeClick:function(e){var t=e.item;if(!!t){var n=this.graph.findDataById(t.get("id"));if(!!n){var i=n.children;if(!(!i||i.length===0)){var a=!n.collapsed;!this.shouldBegin(e,a)||(n.collapsed=a,t.getModel().collapsed=a,this.graph.emit("itemcollapsed",{item:e.item,collapsed:a}),!!this.shouldUpdate(e,a)&&(this.onChange(t,a),this.graph.layout()))}}}}};var IS=U(q());var Bpe=al.calculationItemsBBox,Gpe=function r(e,t){if(t(e)!==!1&&e){var n=e.get("combos");if(n.length===0)return!1;(0,IS.each)(n,function(i){r(i,t)})}},OEt={getDefaultCfg:function(){return{enableDelegate:!1,delegateStyle:{},onlyChangeComboSize:!1,activeState:"",selectedState:"selected"}},getEvents:function(){return{"combo:dragstart":"onDragStart","combo:drag":"onDrag","combo:dragend":"onDragEnd","combo:drop":"onDrop","node:drop":"onNodeDrop","combo:dragenter":"onDragEnter","combo:dragleave":"onDragLeave"}},validationCombo:function(e){var t=e.item;if(!t||t.destroyed||!this.shouldUpdate.call(this,e))return!1;var n=t.getType();return n==="combo"},onDragStart:function(e){var t=this,n=this.graph,i=e.item;if(this.currentShouldEnd=!0,!!this.validationCombo(e)){this.targets=[];var a=n.findAllByState("combo",this.selectedState),o=i.get("id"),s=a.filter(function(l){var u=l.get("id");return o===u});s.length===0?this.targets.push(i):this.targets=a,this.activeState&&this.targets.map(function(l){var u=l.getModel();if(u.parentId){var f=n.findById(u.parentId);f&&n.setItemState(f,t.activeState,!0)}}),this.point={},this.originPoint={},this.origin={x:e.x,y:e.y},this.currentItemChildCombos=[],Gpe(i,function(l){if(l.destroyed)return!1;var u=l.getModel();return t.currentItemChildCombos.push(u.id),!0})}},onDrag:function(e){var t=this;if(!!this.origin&&!!this.validationCombo(e))if(this.enableDelegate)this.updateDelegate(e);else{if(this.activeState){var n=this.graph,i=e.item,a=i.getModel(),o=n.getCombos(),s=i.getBBox(),l=s.centerX,u=s.centerY,f=s.width,c=o.filter(function(h){var d=h.getModel();return a.parentId,d.id!==a.id&&!t.currentItemChildCombos.includes(d.id)});c.map(function(h){var d=h.getBBox(),p=d.centerX,v=d.centerY,m=d.width,g=l-p,x=u-v,b=2*Math.sqrt(g*g+x*x);f+m-b>.8*f?n.setItemState(h,t.activeState,!0):n.setItemState(h,t.activeState,!1)})}(0,IS.each)(this.targets,function(h){t.updateCombo(h,e)})}},updatePositions:function(e,t){var n=this;(this.enableDelegate||t)&&(0,IS.each)(this.targets,function(i){n.updateCombo(i,e,t)})},onDrop:function(e){var t=this,n=e.item;if(this.currentShouldEnd=this.shouldEnd.call(this,e,n),this.updatePositions(e,!this.currentShouldEnd),!(!this.currentShouldEnd||!n||!this.targets||n.destroyed)){var i=this.graph,a=n.getModel();this.targets.map(function(o){var s=o.getModel();s.parentId!==a.id?(t.activeState&&i.setItemState(n,t.activeState,!1),t.onlyChangeComboSize?i.updateCombo(o):i.updateComboTree(o,a.id)):i.updateCombo(n)}),this.end(n,e),this.endComparison=!0}},onNodeDrop:function(e){var t=this;if(!(!this.targets||this.targets.length===0)){var n=this.graph,i=e.item,a=i.getModel().comboId,o=a?n.findById(a):void 0;if(this.currentShouldEnd=this.shouldEnd.call(this,e,o),this.updatePositions(e,!this.currentShouldEnd),!!this.currentShouldEnd){var s;if(a){if(this.activeState){var l=n.findById(a);n.setItemState(l,this.activeState,!1)}this.targets.map(function(u){t.onlyChangeComboSize?n.updateCombo(u):a!==u.getID()&&(s=n.findById(a),a!==u.getModel().parentId&&n.updateComboTree(u,a))})}else this.targets.map(function(u){if(t.onlyChangeComboSize)n.updateCombo(u);else{var f=u.getModel();f.comboId&&n.updateComboTree(u)}});this.endComparison=!0,this.end(s,e)}}},onDragEnter:function(e){if(!!this.origin&&!!this.validationCombo(e)){var t=e.item,n=this.graph;this.activeState&&n.setItemState(t,this.activeState,!0)}},onDragLeave:function(e){if(!!this.origin&&!!this.validationCombo(e)){var t=e.item,n=this.graph;this.activeState&&n.setItemState(t,this.activeState,!1)}},onDragEnd:function(e){if(!(!this.targets||this.targets.length===0)){var t=e.item;this.currentShouldEnd&&this.updatePositions(e);var n=this.getParentCombo(t.getModel().parentId),i=this.graph;n&&this.activeState&&i.setItemState(n,this.activeState,!1),this.end(void 0,e)}},end:function(e,t){var n=this;if(!!this.origin){var i=this.graph;if(this.delegateShape){var a=i.get("delegateGroup");a.clear(),this.delegateShape=null}e&&this.activeState&&i.setItemState(e,this.activeState,!1),e||this.targets.map(function(o){n.onlyChangeComboSize?i.updateCombo(o):i.updateComboTree(o)}),this.point=[],this.origin=null,this.originPoint=null,this.targets.length=0}},traverse:function(e,t){var n=this;if(t(e)!==!1&&e){var i=e.get("combos");(0,IS.each)(i,function(o){n.traverse(o,t)});var a=e.get("nodes");(0,IS.each)(a,function(o){n.traverse(o,t)})}},updateCombo:function(e,t,n){var i=this;this.traverse(e,function(a){return a.destroyed?!1:(i.updateSignleItem(a,t,n),!0)})},updateSignleItem:function(e,t,n){var i=this.origin,a=this.graph,o=e.getModel(),s=e.get("id");this.point[s]||(this.point[s]={x:o.x,y:o.y});var l=t.x-i.x+this.point[s].x,u=t.y-i.y+this.point[s].y;n&&(l+=i.x-t.x,u+=i.y-t.y),a.updateItem(e,{x:l,y:u})},getParentCombo:function(e){var t=this.graph;if(!!e){var n=t.findById(e);if(!!n)return n}},updateDelegate:function(e){var t=this.graph;if(this.delegateShape){var h=e.x-this.origin.x+this.originPoint.minX,d=e.y-this.origin.y+this.originPoint.minY;this.delegateShape.attr({x:h,y:d})}else{var n=t.get("delegateGroup"),i=null;this.targets.length>1?i=Bpe(this.targets):i=this.targets[0].getBBox();var a=i.x,o=i.y,s=i.width,l=i.height,u=i.minX,f=i.minY;this.originPoint={x:a,y:o,width:s,height:l,minX:u,minY:f};var c=E(E({},bc.delegateStyle),this.delegateStyle);this.delegateShape=n.addShape("rect",{attrs:E({width:i.width,height:i.height,x:i.x,y:i.y},c),name:"combo-delegate-shape"}),this.delegateShape.set("capture",!1),this.delegate=this.delegateShape}}};var DEt="dblclick",zpe=["click","dblclick"],PEt={getDefaultCfg:function(){return{trigger:DEt,relayout:!0}},getEvents:function(){var e,t;return zpe.includes(this.trigger)?t=this.trigger:(t=DEt,console.warn("Behavior collapse-expand-group \u7684 trigger \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'click' \u6216 'dblclick'")),e={},e["combo:".concat(t)]="onComboClick",e},onComboClick:function(e){var t=e.item,n=this,i=n.graph,a=n.relayout;if(!(!t||t.destroyed||t.getType()!=="combo")){var o=t.getModel(),s=o.id;!s||(i.collapseExpandCombo(s),a&&i.get("layout")?i.layout():i.refreshPositions())}}};var Upe=al.isPolygonsIntersect,jpe=al.pathToPoints,kEt="shift",Wpe=["drag","shift","ctrl","alt","control"],Vpe=function(e,t){var n,i=e.getKeyShape();if(e.get("type")==="path")n=jpe(i.attr("path"));else{var a=i.getCanvasBBox();n=[[a.minX,a.minY],[a.maxX,a.minY],[a.maxX,a.maxY],[a.minX,a.maxY]]}return Upe(t,n)},REt={getDefaultCfg:function(){return{delegateStyle:{fill:"#EEF6FF",fillOpacity:.4,stroke:"#DDEEFE",lineWidth:1},onSelect:function(){},onDeselect:function(){},selectedState:"selected",trigger:kEt,includeEdges:!0,selectedEdges:[],selectedNodes:[]}},getEvents:function(){return Wpe.indexOf(this.trigger.toLowerCase())>-1||(this.trigger=kEt,console.warn("Behavior lasso-select \u7684 trigger \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'drag'\u3001'shift'\u3001'ctrl' \u6216 'alt'")),this.trigger==="drag"?{dragstart:"onDragStart",drag:"onDragMove",dragend:"onDragEnd","canvas:click":"clearStates"}:{dragstart:"onDragStart",drag:"onDragMove",dragend:"onDragEnd",keyup:"onKeyUp",keydown:"onKeyDown","canvas:click":"clearStates"}},onDragStart:function(e){var t=this.lasso,n=e.item;n||this.trigger!=="drag"&&!this.keydown||(this.selectedNodes&&this.selectedNodes.length!==0&&this.clearStates(),t||(t=this.createLasso()),this.dragging=!0,this.originPoint={x:e.x,y:e.y},this.points.push(this.originPoint),t.show())},onDragMove:function(e){!this.dragging||this.trigger!=="drag"&&!this.keydown||(this.points.push({x:e.x,y:e.y}),this.updateLasso(e))},onDragEnd:function(e){!this.lasso&&!this.dragging||this.trigger!=="drag"&&!this.keydown||(this.points.push(this.originPoint),this.getSelectedItems(),this.lasso.remove(!0),this.lasso=null,this.points=[],this.dragging=!1)},getLassoPath:function(){var e=this.points,t=[];return e.length&&(e.forEach(function(n,i){i===0?t.push(["M",n.x,n.y]):t.push(["L",n.x,n.y])}),t.push(["L",e[0].x,e[0].y])),t},clearStates:function(){var e=this,t=e.graph,n=e.selectedState,i=t.findAllByState("node",n),a=t.findAllByState("edge",n);i.forEach(function(o){return t.setItemState(o,n,!1)}),a.forEach(function(o){return t.setItemState(o,n,!1)}),this.onDeselect&&this.onDeselect(this.selectedNodes,this.selectedEdges),this.selectedNodes=[],this.selectedEdges=[],t.emit("nodeselectchange",{selectedItems:{nodes:[],edges:[]},select:!1})},getSelectedItems:function(){var e=this,t=this,n=t.graph,i=t.shouldUpdate,a=this.points.map(function(f){return[n.getCanvasByPoint(f.x,f.y).x,n.getCanvasByPoint(f.x,f.y).y]}),o=this.selectedState,s=[],l=[];n.getNodes().forEach(function(f){if(!!f.isVisible()&&Vpe(f,a)&&i(f,"select")){s.push(f);var c=f.getModel();l.push(c.id),n.setItemState(f,o,!0)}});var u=[];this.includeEdges&&s.forEach(function(f){var c=f.getOutEdges();c.forEach(function(h){if(!!h.isVisible()){var d=h.getModel(),p=d.source,v=d.target;l.includes(p)&&l.includes(v)&&i(h,"select")&&(u.push(h),n.setItemState(h,e.selectedState,!0))}})}),this.selectedEdges=u,this.selectedNodes=s,this.onSelect&&this.onSelect(s,u),n.emit("nodeselectchange",{selectedItems:{nodes:s,edges:u},select:!0})},createLasso:function(){var e=this,t=e.graph.get("delegateGroup").addShape("path",{attrs:E({path:[]},e.delegateStyle),capture:!1,name:"lasso-shape"});return this.lasso=t,this.delegate=t,this.points=[],t},updateLasso:function(e){var t=this;this.lasso.attr({path:t.getLassoPath()})},onKeyDown:function(e){var t=e.key;!t||(t.toLowerCase()===this.trigger.toLowerCase()?this.keydown=!0:this.keydown=!1)},onKeyUp:function(){this.lasso&&(this.lasso.remove(!0),this.lasso=null,this.points=[],this.dragging=!1),this.keydown=!1}};var MX=U(q()),NEt="click",Hpe=["click","drag"],FEt=void 0,Ype=["shift","ctrl","control","alt","meta",void 0],BEt={getDefaultCfg:function(){return{trigger:NEt,key:FEt,edgeConfig:{},getEdgeConfig:void 0}},getEvents:function(){var e=this;Hpe.indexOf(e.trigger.toLowerCase())>-1||(e.trigger=NEt,console.warn("Behavior create-edge \u7684 trigger \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'click'\uFF0C'drag'")),e.key&&Ype.indexOf(e.key.toLowerCase())===-1&&(e.trigger=FEt,console.warn("Behavior create-edge \u7684 key \u53C2\u6570\u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'shift'\uFF0C'ctrl'\uFF0C'alt'\uFF0C'control'\uFF0C\u6216 undefined"));var t;return e.trigger==="drag"?t={"node:dragstart":"onClick","combo:dragstart":"onClick",drag:"updateEndPoint","node:drop":"onClick","combo:drop":"onClick",dragend:"onDragEnd"}:e.trigger==="click"&&(t={"node:click":"onClick",mousemove:"updateEndPoint","edge:click":"cancelCreating","canvas:click":"cancelCreating","combo:click":"onClick"}),e.key&&(t.keydown="onKeyDown",t.keyup="onKeyUp"),t},onDragEnd:function(e){var t=this;if(!(t.key&&!t.keydown)){var n=e.item;(!n||n.getID()===t.source||n.getType()!=="node")&&t.cancelCreating({item:t.edge,x:e.x,y:e.y})}},onClick:function(e){var t=this;if(!(t.key&&!t.keydown)){var n=e.item,i=t.graph,a=n.getModel(),o=t.getEdgeConfig;if(t.addingEdge&&t.edge){if(!t.shouldEnd.call(t,e))return;var s=void 0;o&&(0,MX.isFunction)(o)?s=o({source:t.source,target:a.id}):s=t.edgeConfig;var l=E({target:a.id},s);if(t.source===a.id&&(l.type="loop"),i.emit("beforecreateedge",{}),i.updateItem(t.edge,l,!1),i.get("enabledStack")){var u=E(E({},t.edge.getModel()),{itemType:"edge"}),f={};f.edges=[u],i.pushStack("add",{before:{},after:f})}i.emit("aftercreateedge",{edge:t.edge}),t.edge.getKeyShape().set("capture",!0),t.edge=null,t.addingEdge=!1}else{if(!t.shouldBegin.call(t,e))return;var s=void 0;o&&(0,MX.isFunction)(o)?s=o({source:a.id,target:a.id}):s=t.edgeConfig,t.edge=i.addItem("edge",E({source:a.id,target:a.id},s),!1),t.source=a.id,t.addingEdge=!0,t.edge.getKeyShape().set("capture",!1)}}},updateEndPoint:function(e){var t=this;if(!(t.key&&!t.keydown)){t.edge&&t.edge.destroyed&&t.cancelCreating({item:t.edge});var n={x:e.x,y:e.y};if(!t.graph.findById(t.source)){t.addingEdge=!1;return}t.addingEdge&&t.edge&&t.graph.updateItem(t.edge,{target:n},!1)}},cancelCreating:function(e){var t,n,i=this;if(!(i.key&&!i.keydown)){var a=i.graph,o=e.item;if(i.addingEdge&&(i.edge===o||((n=(t=e.target)===null||t===void 0?void 0:t.isCanvas)===null||n===void 0?void 0:n.call(t)))){i.edge&&!i.edge.destroyed&&a.removeItem(i.edge,!1),i.edge=null,i.addingEdge=!1;return}}},onKeyDown:function(e){var t=this,n=e.key;!n||(n.toLowerCase()===t.key.toLowerCase()?t.keydown=!0:t.keydown=!1)},onKeyUp:function(){var e=this;e.addingEdge&&e.edge&&(e.graph.removeItem(e.edge,!1),e.addingEdge=!1,e.edge=null),this.keydown=!1}};var GEt="ctrl",Xpe=["shift","ctrl","alt","control"],qpe="1",zEt={getDefaultCfg:function(){return{trigger:GEt,combinedKey:qpe,functionName:"fitView",functionParams:[]}},getEvents:function(){return Xpe.indexOf(this.trigger.toLowerCase())>-1||(this.trigger=GEt,console.warn("Behavior shortcuts-fit-view \u7684 trigger \u53C2\u6570 '".concat(this.trigger,"' \u4E0D\u5408\u6CD5\uFF0C\u8BF7\u8F93\u5165 'drag'\u3001'shift'\u3001'ctrl' \u6216 'alt'"))),this.combinedKey===this.trigger&&(this.combinedKey=void 0),{keyup:"onKeyUp",keydown:"onKeyDown"}},onKeyDown:function(e){var t=e.key;if(!!t){var n=this.trigger.toLowerCase(),i=t.toLowerCase();this.triggerKeydown||(i===n||i==="control"&&n==="ctrl"||i==="ctrl"&&n==="control"?this.triggerKeydown=!0:this.triggerKeydown=!1);var a=this.graph;if(!a[this.functionName])return console.warn("Behavior shortcuts-fit-view \u7684 functionName \u53C2\u6570 '".concat(this.functionName,"' \u4E0D\u5408\u6CD5\uFF0C\u5B83\u4E0D\u662F Graph \u7684\u4E00\u4E2A\u51FD\u6570\u540D")),{};if(this.triggerKeydown&&!this.combinedKey){this.functionParams&&this.functionParams.length?a[this.functionName].apply(a,this.functionParams):a[this.functionName]();return}var o=this.combinedKey.toLowerCase();this.triggerKeydown&&(i===o||i==="control"&&o==="ctrl"||i==="ctrl"&&o==="control")&&(this.functionParams&&this.functionParams.length?a[this.functionName].apply(a,this.functionParams):a[this.functionName]())}},onKeyUp:function(){this.brush&&(this.brush.remove(!0),this.brush=null,this.dragging=!1),this.triggerKeydown=!1}};var Kpe=["shift","ctrl","alt","control"],UEt={getDefaultCfg:function(){return{direction:"both",enableOptimize:!1,zoomKey:"ctrl",scalableRange:0}},getEvents:function(){return(!this.zoomKey||Kpe.indexOf(this.zoomKey)===-1)&&(this.zoomKey="ctrl"),{wheel:"onWheel"}},onWheel:function(e){var t=this,n=this.graph,i=e["".concat(this.zoomKey,"Key")];if(this.zoomKey==="control"&&(i=e.ctrlKey),i){var a=n.get("canvas"),o=a.getPointByClient(e.clientX,e.clientY),s=n.getZoom();e.wheelDelta>0?s=s+s*.05:s=s-s*.05,n.zoomTo(s,{x:o.x,y:o.y})}else{var l=e.deltaX||e.movementX,u=e.deltaY||e.movementY;!u&&navigator.userAgent.indexOf("Firefox")>-1&&(u=-e.wheelDelta*125/3);var f=this.graph.get("width"),c=this.graph.get("height"),h=this.graph.get("canvas").getCanvasBBox(),d=this.scalableRange,p=this.scalableRange;d<1&&d>-1&&(d=f*d,p=c*p);var v=h.minX,m=h.maxX,g=h.minY,x=h.maxY;l>0?m<-d?l=0:m-l<-d&&(l=m+d):l<0&&(v>f+d?l=0:v-l>f+d&&(l=v-(f+d))),u>0?x<-p?u=0:x-u<-p&&(u=x+p):u<0&&(g>c+p?u=0:g-u>c+p&&(u=g-(c+p))),this.get("direction")==="x"?u=0:this.get("direction")==="y"&&(l=0),n.translate(-l,-u)}e.preventDefault();var b=this.get("enableOptimize");if(b){var S=this.get("optimizeZoom"),C=this.get("optimized"),w=n.getNodes(),A=n.getEdges(),I=w.length,P=A.length;if(!C){for(var L=0;L0&&a[a.length-1])&&(u[0]===6||u[0]===2)){t=0;continue}if(u[0]===3&&(!a||u[1]>a[0]&&u[1]0?(m=pve(r.get("data"),l,p),r.changeData(m),r.get("fitCenter")&&(r.fitCenter(),r.stopAnimate())):(r.updateItem(a,{collapsed:!s}),r.layout()),x.label=3;case 3:return[2]}})})};r.on("node:click",function(i){n(i)}),r.on("node:touchstart",function(i){n(i)})},YEt=function(r,e,t){var n=cl(e),i=n;t&&(i=PS(e),n=kS(i,t)),r.data(n),r.set("eventData",new fve(i)),r.render(),r.get("canvas").set("localRefresh",!1)},lT={},uT=function(r,e){r===void 0&&(r={});var t=e==null?void 0:e.get("id");if(!e||e.destroyed){lT[t]=null;return}if((!r||!r.show)&&lT[t]){var n=e.get("plugins")[0];n&&e.removePlugin(n),lT[t]=null}if(r.show&&!lT[t]){var i=Object.assign(WEt,r),a=new Ur.Minimap(fl(fl({},i),{id:t}));return e.addPlugin(a),lT[t]=a,a}return null},cve=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(r){var e=Math.random()*16|0,t=r=="x"?e:e&3|8;return t.toString(16)})},XEt=function(r){return r.current||(r.current="graph-".concat(cve())),r.current},fT=function(r,e){r===void 0&&(r="right");var t=e[0],n=e[1],i=0,a=0;switch(r){case"top":i=t/2,a=0;break;case"right":i=t,a=n/2;break;case"bottom":i=t/2,a=n;break;case"left":i=0,a=n/2;break}return{x:i,y:a}},qEt=function(r){var e=function(t){var n,i=r.get("eventData").getData();if(t.target.get("name")==="collapse-icon"){var a=t.item,o=a.getModel().collapsed;uve(o,"Boolean")||(o=(n=a._cfg.group.getChildren().find(function(v){return v.get("name")==="main-box"}))===null||n===void 0?void 0:n.attr("defaultCollapsed"));var s=t.item._cfg.group.getChildren().find(function(v){return v.cfg.type==="marker"}),l=(i!=null?i:{}).edges,u=l===void 0?[]:l,f=a.getModel().id,c=[],h=[],d=[],p=function(v){u.forEach(function(m){var g=m.source,x=m.target;g===v&&(c.push(x),p(x))})};p(f),o?(r.findAll("node",function(v){var m=i.nodes.find(function(g){return g.id===v.get("id")}).collapsedLevel;return c.includes(v.get("id"))&&(!m||m<2)}).forEach(function(v){return r.showItem(v)}),i.nodes.forEach(function(v){var m=v.collapsedLevel,g=m===void 0?0:m,x=v.id;c.includes(x)&&(v.collapsedLevel=g-1)})):(r.findAll("node",function(v){return c.includes(v.get("id"))}).forEach(function(v){return r.hideItem(v)}),i.nodes.forEach(function(v){var m=v.collapsedLevel,g=m===void 0?0:m,x=v.id;c.includes(x)&&(v.collapsedLevel=g+1)})),u.forEach(function(v){var m=v.source,g=v.target;c.includes(g)&&d.push(m)}),d=Array.from(new Set(d)),d.forEach(function(v){h.push(r.find("node",function(m){return m.get("id")===v}))}),h.forEach(function(v){r.updateItem(v,{collapsed:!v.getModel().collapsed}),r.refreshItem(v)})}};r.on("node:click",function(t){e(t)}),r.on("node:touchstart",function(t){e(t)})},dx=function(r){if(typeof r=="number")return[r,r,r,r];var e=[];switch(r.length){case 1:e=[r[0],r[0],r[0],r[0]];break;case 2:e=[r[0],r[1],r[0],r[1]];break;case 3:e=[r[0],r[1],r[2],r[1]];break;case 4:e=r;break;default:break}return e},Ou=function(r,e){if(!!r&&!(typeof r=="object"&&(r==null?void 0:r.show)===!1)){var t=typeof r=="function"?r(e):r,n=t.type,i=n===void 0?"vee":n,a=t.d,o=a===void 0?0:a,s=t.size,l=s===void 0?10:s;return fl({path:Ur.Arrow[i](l,l,o),fill:"#ccc",d:o},t)}},KEt=function(r,e){var t=e!=null?e:{},n=t.nodeCfg,i=n===void 0?{}:n,a=t.edgeCfg,o=a===void 0?{}:a,s=i.nodeStateStyles,l=o.edgeStateStyles,u={},f=function(d,p,v){r.updateItem(d,{style:{endArrow:!!p&&{fill:p},startArrow:!!v&&{fill:v}}})},c=function(d,p,v){var m,g,x;v?d.toFront():d.toBack();var b=(m=d.getModel().style)!==null&&m!==void 0?m:{},S=b.endArrow,C=b.startArrow;if(S||C){if(!u[d.getID()]){var w=(S!=null?S:{}).fill,A=(C!=null?C:{}).fill,I=(x=(g=d.getModel().style)===null||g===void 0?void 0:g[p])===null||x===void 0?void 0:x.stroke;u[d.getID()]=[[I!=null?I:w,w],[I!=null?I:A,A]]}var P=u[d.getID()];f(d,S&&P[0][v?0:1],C&&P[1][v?0:1])}r.setItemState(d,p,v)},h=function(d,p,v,m){var g=m==="node"?r.findAll("edge",function(b){return b.getSource()===d||b.getTarget()===d}):r.findAll("node",function(b){return d.getSource().get("id")===b.get("id")||d.getTarget().get("id")===b.get("id")}),x=[d].concat(g);x.forEach(function(b){c(b,p,v)})};s&&(r.on("node:mouseenter",function(d){var p=d.item;h(p,"hover",!0,"node")}),r.on("node:mouseleave",function(d){var p=d.item;h(p,"hover",!1,"node")})),l&&(r.on("edge:mouseenter",function(d){var p=d.item;h(p,"hover",!0,"edge")}),r.on("edge:mouseleave",function(d){var p=d.item;h(p,"hover",!1,"edge")}))},ks=function(r,e,t,n){return typeof r=="function"?r(e,t,n)||{}:r||{}},lv=function(r,e,t){return typeof r=="function"?r(e,t):r},fF=function(r){return Array.isArray(r)?r:r?[r,r]:Pg},gd=4,ZEt=function(r){if(!r)return[0,0,0,0];var e=r.size,t=e===void 0?[]:e,n=r.position,i=n===void 0?"left":n,a=fF(t),o=a[0],s=a[1],l=[];switch(i){case"top":l.push(s!=null?s:gd,0,0,0);break;case"right":l.push(0,o!=null?o:gd,0,0);break;case"bottom":l.push(0,0,s!=null?s:gd,0);break;case"left":l.push(0,0,0,o!=null?o:gd);break}return l},$Et=function(r,e){var t=r!=null?r:{},n=t.size,i=n===void 0?[]:n,a=t.position,o=a===void 0?"left":a,s=fF(i),l=s[0],u=s[1],f=e[0],c=e[1],h=0,d=0,p=0,v=0;switch(o){case"top":h=0,d=0,p=l!=null?l:f,v=u!=null?u:gd;break;case"left":h=0,d=0,p=l!=null?l:gd,v=u!=null?u:c;break;case"right":h=f-((0,Tc.isNumber)(l)?l:gd),d=0,p=l!=null?l:gd,v=u!=null?u:c;break;case"bottom":h=0,d=c-((0,Tc.isNumber)(u)?u:gd),p=l!=null?l:f,v=u!=null?u:gd;break}return{x:h,y:d,width:p,height:v}},DS=function(r,e,t){var n=r.show,i=r.position,a=r.collapsed,o=r.style;n&&e.addShape("marker",{attrs:fl(fl(fl({},fT(i,t)),{r:6,cursor:"pointer",symbol:a?Ur.Marker.expand:Ur.Marker.collapse,stroke:LS.stroke,lineWidth:1,fill:"#fff"}),o),defaultCollapsed:!1,name:"collapse-icon"})},IX=function(r){var e={};return Object.keys(r).forEach(function(t){var n=r[t];if((0,Tc.isObject)(n)){var i={};Object.keys(n).forEach(function(a){var o=n[a];a==="img"&&!(0,Tc.isString)(o)||(i[a]=(0,Tc.clone)(o))}),e[t]=i}else e[t]=(0,Tc.clone)(n)}),e},cF=function(r,e){e===void 0&&(e={});var t=Object.keys(e);t.forEach(function(n){r.style[n]=e[n]})},PS=function(r,e,t,n){var i;e===void 0&&(e=0),t===void 0&&(t=""),n===void 0&&(n="");var a=r.id,o=r.children,s=o===void 0?[]:o;return fl(fl((i={},i["".concat(sv,"_level")]=e,i["".concat(sv,"_parentId")]=t,i["".concat(sv,"_currentPath")]=n,i),r),{children:s==null?void 0:s.map(function(l,u){return PS(l,e+1,t?"".concat(t,"-").concat(a):a,"".concat(n,"-").concat(u))})})},kS=function(r,e){var t=r.children,n=t===void 0?[]:t,i=r.g_level,a=i===void 0?0:i;return e<=0?r:fl(fl({},r),{children:a+1 renderIcon({zoomIn, xx})"),h({zoomIn:b,zoomOut:S,toggleFullscreen:C,fullscreen:p})):ht.createElement(Ss,null,p?ht.createElement("span",{style:{cursor:"pointer"},onClick:C},"\u2684"):ht.createElement("span",{style:{cursor:"pointer"},onClick:C},"\u2610"),ht.createElement("span",{style:{cursor:"pointer"},onClick:b},"+"),ht.createElement("span",{style:{cursor:"pointer"},onClick:S},"-"))},tAt=function(r){var e,t=r.graph,n=r.container,i=r.toolbarCfg,a=i.style,o=i.show,s=i.className,l="".concat(t.get("id"),"-toolbar"),u=document.querySelector("#".concat(l));if(u&&((e=u.parentNode)===null||e===void 0||e.removeChild(u)),!!o){var f={position:"absolute",right:"12px",top:"12px",display:"flex",flexDirection:"column",padding:"6px",borderRadius:"2px",fontSize:"24px",textAlign:"center",lineHeight:"24px",color:"rgba(0,0,0,.65)",backgroundColor:"#fff",boxShadow:"0 0 3px #ccc"},c=document.createElement("div");c.id=l,c.className=s!=null?s:"charts-toolbar",cF(c,f),cF(c,a),ht.render(ht.createElement(yve,{graph:t,container:n,toolbarCfg:i}),c),n.appendChild(c)}};var yd=function(){return yd=Object.assign||function(r){for(var e,t=1,n=arguments.length;t15?0:16,c=l<0?f:-f,h={x:i+u,y:s+c},d={x:h.x+f,y:s},p={x:(h.x-i)*(s-a)/(h.y-a)+i,y:s},v=[["M",i,a],["L",h.x,h.y],["Q",p.x,p.y,d.x,d.y],["L",o,s]];Math.abs(l)<=5&&(v=[["M",i,a],["L",o,s]]);var m=e,g=m.startArrow,x=m.endArrow,b=Ou(g,r),S=Ou(x,r);return{startArrow:b,endArrow:S,path:v,line2StartPoint:d,endY:s}},sAt=function(r){var e,t;return r instanceof Object?(e=r.text,t=r.subText):e=r,{text:e,subText:t}},lAt=function(){Ur.registerNode("fund-card",{draw:function(r,e){var t,n;r===void 0&&(r={});var i=r.value,a=i===void 0?{}:i,o=r.nodeCfg,s=r.markerCfg,l=o,u=l.label,f=u===void 0?{}:u,c=l.style,h=l.padding,d=h===void 0?0:h,p=l.customContent,v=f.style,m=dx(d),g=fF(r.size),x=0,b=g[0],S=b-m[1]-m[3],C=g[1]-m[0]-m[2],w=ks(c,r,e),A=e.addShape("rect",{attrs:Af({x:0,y:0,width:g[0],height:g[1],radius:g[1]/2,fill:"#fff",stroke:"#40a9ff"},w),name:"main-box",draggable:!0});if(a){x+=m[0];var I=function(W,J,et){var lt,$,st=W.text,_t=W.icon,dt,vt;return _t&&(vt=e.addShape("image",{attrs:Af({x:et,y:x,img:_t,width:C,height:C},ks(v,r,e,"icon")),name:"fund-icon"})),dt=e==null?void 0:e.addShape("text",{attrs:Af(Af({textBaseline:"middle",textAlign:vt?"start":"center",x:et+(vt?(vt==null?void 0:vt.getBBox().width)+OS:J/2),y:m[0]+C/2,text:st},Ng),ks(v,r,e,"text")),name:"fund-text"}),[(lt=dt==null?void 0:dt.getBBox().height)!==null&<!==void 0?lt:0,($=vt==null?void 0:vt.getBBox().height)!==null&&$!==void 0?$:0]},P=function(W){var J,et=[];p?et.push((J=p(W,e,{startX:m[3],startY:x,width:S}))!==null&&J!==void 0?J:0):et.push.apply(et,I(W,S,m[3])),x+=Math.max.apply(Math,et)};P(a)}if(A==null||A.attr("height",Math.max(g[1],x+m[2])),s){var L=((n=(t=e==null?void 0:e.get("item"))===null||t===void 0?void 0:t.getModel())!==null&&n!==void 0?n:{}).collapsed,M=A.getBBox(),O=M.width,F=M.height,k=typeof s=="function"?s(r,e):s,G=k.show,D=k.position,N=D===void 0?"right":D,z=k.collapsed,j=k.style;DS({show:G,position:N,collapsed:L!=null?L:z,style:j},e,[O,F]),A.attr("defaultCollapsed",z)}return A},update:void 0},"single-node"),Ur.registerEdge("fund-line",{draw:function(e,t){e===void 0&&(e={});var n=e.edgeCfg,i=e.value,a=sAt(i),o=a.text,s=a.subText,l=n,u=l.style,f=l.label,c=oAt(e),h=c.startArrow,d=c.endArrow,p=c.path,v=c.line2StartPoint,m=c.endY,g=(f!=null?f:{}).style,x=t.addShape("path",{attrs:Af({path:p,stroke:"#ccc",startArrow:h,endArrow:d},typeof u=="function"?u(e,t):u),name:"path-shape"}),b=function(S,C){t.addShape("text",{attrs:Af(Af({text:S,x:v.x,y:C==="text"?m-4:m+16},Ng),ks(g,e,t,C)),name:"line-text-".concat(C)})};return o&&b(o,"text"),s&&b(s,"subText"),x},update:function(r,e){var t=r.edgeCfg,n=r.value,i=sAt(n),a=i.text,o=i.subText,s=e.getContainer(),l=function(C){return s.get("children").find(function(w){return w.get("name")===C})},u=oAt(r),f=u.startArrow,c=u.endArrow,h=u.path,d=u.line2StartPoint,p=u.endY,v=t,m=v.style,g=v.label,x=(g!=null?g:{}).style,b=l("path-shape");b==null||b.attr(Af({path:h,stroke:"#ccc",startArrow:f,endArrow:c},typeof m=="function"?m(r,s):m));var S=["text","subText"];S.forEach(function(C){var w=l("line-text-".concat(C));w==null||w.attr(Af(Af({x:d.x,y:C==="text"?p-4:p+16,text:C==="text"?a:o},Ng),ks(x,r,s,C)))})}},"single-edge")};var Gve=function(r,e){var t={};for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(r);ix.width+16?n[0]:x.width+16;s.attr({width:S,height:b}),d==null||d.attr("width",S),p==null||p.attr({x:S,y:b/2})}return s},update:void 0},"single-node"),Ur.registerNode("round-rect",{drawShape:function(r,e){r===void 0&&(r={});var t=r.size||[100,30];typeof t=="number"&&(t=[t,t]);var n=r.style||{},i=n.stroke||r.color||"#5B8FF9",a=n.fill||"#fff";n=vs({width:t[0],height:t[1],radius:t[1]/2,fill:a,lineWidth:1.2,stroke:i},n);var o=e.addShape("rect",{attrs:vs({x:-t[0]/2,y:-t[1]/2},n),name:"rect-shape"});return e.addShape("circle",{attrs:{x:-t[0]/2,y:0,r:3,fill:n.stroke},name:"circle-shape"}),e.addShape("circle",{attrs:{x:t[0]/2,y:0,r:3,fill:n.stroke},name:"circle-shape2"}),o},getAnchorPoints:function(){return[[0,.5],[1,.5]]},update:function(e,t){var n;e===void 0&&(e={});var i=t.getContainer(),a=i.get("children"),o=a[0],s=a[1],l=a[2],u=((n=e.style)===null||n===void 0?void 0:n.stroke)||"#5B8FF9";u&&(o.attr("stroke",u),s.attr("fill",u),l.attr("fill",u))}},"single-node"),Ur.registerEdge("fund-polyline",{draw:function(e,t){var n;e===void 0&&(e={});var i=e.startPoint,a=e.endPoint,o=a.y-i.y,s=o!==0?Math.min(500/Math.abs(o),20):0,l=s>15?0:16,u=o<0?l:-l,f={x:i.x+s,y:a.y+u},c={x:f.x+l,y:a.y},h={x:(f.x-i.x)*(a.y-i.y)/(f.y-i.y)+i.x,y:a.y},d=[["M",i.x,i.y],["L",f.x,f.y],["Q",h.x,h.y,c.x,c.y],["L",a.x,a.y]];Math.abs(o)<=5&&(d=[["M",i.x,i.y],["L",a.x,a.y]]);var p=e.style,v=p.stroke||(e==null?void 0:e.colorMap)&&e.colorMap[e.dataType]?(e==null?void 0:e.colorMap)[e==null?void 0:e.dataType]:"#5B8FF9",m=((n=e.style)===null||n===void 0?void 0:n.endArrow)||!1;(0,fAt.isObject)(m)&&(m.fill=v);var g=t.addShape("path",{attrs:{path:d,stroke:v,lineWidth:p.lineWidth||1.2,endArrow:m},name:"path-shape"}),x=0,b=8,S,C=c.x+x;if((e==null?void 0:e.label)&&(S=t.addShape("text",{attrs:{text:e.label,x:C,y:a.y-b-2,fontSize:14,textAlign:"left",textBaseline:"middle",fill:"#000"},name:"text-shape-label"})),e==null?void 0:e.dataType){var w=S?S.getBBox():{height:0};t.addShape("text",{attrs:{text:e.dataType,x:C,y:a.y-b-w.height-2,fontSize:10,textAlign:"left",textBaseline:"middle",fill:"#000"},name:"text-shape-type"})}return(e==null?void 0:e.subLabel)&&t.addShape("text",{attrs:{text:e.subLabel,x:C,y:a.y+b+4,fontSize:12,fontWeight:300,textAlign:"left",textBaseline:"middle",fill:"#000"},name:"text-shape-sub-label"}),g},update:void 0},"single-edge"),Ur.registerEdge("flow-line",{draw:function(r,e){r===void 0&&(r={});var t=r.startPoint,n=r.endPoint,i=r.style,a=i===void 0?{}:i,o=e.addShape("path",{attrs:{stroke:a.stroke,endArrow:a.endArrow,path:[["M",t.x,t.y],["L",t.x,(t.y+n.y)/2],["L",n.x,(t.y+n.y)/2],["L",n.x,n.y]]}});return o}})},cAt=function(r){Ur.registerNode("icon-node",{options:{size:[60,20],stroke:"#91d5ff",fill:"#91d5ff"},draw:function(e,t){e===void 0&&(e={});var n=this.getShapeStyle(e),i=e.labelCfg,a=i===void 0?{}:i,o=t.addShape("rect",{attrs:vs(vs({},n),{x:0,y:0})}),s={fill:"#e6fffb"},l="https://g.alicdn.com/cm-design/arms-trace/1.0.155/styles/armsTrace/images/TAIR.png";return e.leftIcon&&(s=vs(vs({},s),e.leftIcon.style),l=e.leftIcon.img),t.addShape("rect",{attrs:vs({x:1,y:1,width:38,height:n.height-2},s)}),t.addShape("image",{attrs:{x:8,y:8,width:24,height:24,img:l},name:"image-shape"}),r.enableEdit&&(t.addShape("marker",{attrs:{x:n.width/3,y:n.height+6,r:6,stroke:"#73d13d",cursor:"pointer",symbol:Ur.Marker.expand},name:"add-item"}),t.addShape("marker",{attrs:{x:n.width*2/3,y:n.height+6,r:6,stroke:"#ff4d4f",cursor:"pointer",symbol:Ur.Marker.collapse},name:"remove-item"})),e.label&&t.addShape("text",{attrs:vs(vs({},a.style),{text:e.label,x:n.width/2,y:n.height/1.5})}),o}},"rect")};var Du={style:{fill:"#000",fontSize:12}},NS={stroke:"#91d5ff",endArrow:{path:Ur.Arrow.vee(10,10)}},FS=[[.5,0],[.5,1]],vo={hover:{stroke:"#1890ff",lineWidth:2}},BS=[120,40];var Fg=function(){return Fg=Object.assign||function(r){for(var e,t=1,n=arguments.length;tdt.width+16?u[0]:dt.width+16;p.attr({width:z,height:f+16}),C==null||C.attr("width",z),w==null||w.attr(Fi({},OX(l,[z,f+S+2*vF])))}return p},update:void 0},"single-node")},xAt=function(){Ur.registerNode("icon-node",{options:{size:[60,20],stroke:"#91d5ff",fill:"#91d5ff"},draw:function(r,e){r===void 0&&(r={});var t=this.getShapeStyle(r),n=r.labelCfg,i=n===void 0?{}:n,a=r.labelStyle,o=r.label,s=r.markerStyle,l=r.showMarker,u=r.title,f=r.titleStyle,c=e.addShape("rect",{attrs:Fi(Fi({},t),{x:0,y:0})}),h=c.getBBox().height,d;if(r.leftIcon){var p=r.leftIcon,v=p.x,m=v===void 0?8:v,g=p.y,x=p.width,b=x===void 0?24:x,S=p.height,C=S===void 0?24:S,w=p.style;w&&e.addShape("rect",{attrs:Fi({x:1,y:1,width:38,height:t.height-2},w)}),d=e.addShape("image",{attrs:{x:m,y:g||h/2-C/2,width:b,height:C,img:r.leftIcon.img},name:"image-shape"})}if(l&&(e.addShape("marker",{attrs:Fi({x:t.width/3,y:t.height+6,r:6,stroke:"#73d13d",cursor:"pointer",symbol:Ur.Marker.expand},xd(s,e,Fi(Fi({},r),{name:"add-item"}))),name:"add-item"}),e.addShape("marker",{attrs:Fi({x:t.width*2/3,y:t.height+6,r:6,stroke:"#ff4d4f",cursor:"pointer",symbol:Ur.Marker.collapse},xd(s,e,Fi(Fi({},r),{name:"remove-item"}))),name:"remove-item"})),o){var A=a?xd(a,e,r):i.style,g=u?t.height/2-(A.fontSize*1||12)-Dc/2:t.height/2;e.addShape("text",{attrs:Fi({text:o,x:t.width/2,y:g,textAlign:d?"start":"center",textBaseline:u?"top":"middle"},A)})}if(u){var I=f?xd(f,e,r):i.style;e.addShape("text",{attrs:Fi({text:u,x:t.width/2,y:t.height/2+Dc/2,textAlign:d?"start":"center",textBaseline:"top"},I)})}return c}},"rect")};RS();mF();var bAt={stroke:"#40a9ff"},_At={type:"dagre",rankdir:"TB",nodesepFunc:function(){return 0},ranksepFunc:function(){return 0},controlPoints:!0},qve={nodeType:"modelRect",edgeType:"polyline",behaviors:["zoom-canvas","drag-canvas"],nodeSize:BS,nodeLabelCfg:Du,edgeLabelCfg:Du,nodeAnchorPoints:FS,layout:_At,nodeStyle:bAt,edgeStyle:NS,nodeStateStyles:vo,edgeStateStyles:vo,autoFit:!0},KS={},Kve=function(r){var e=jg(r,qve),t=e.data,n=e.className,i=e.style,a=e.width,o=e.height,s=e.nodeType,l=s===void 0?"modelRect":s,u=e.edgeType,f=u===void 0?"polyline":u,c=e.behaviors,h=c===void 0?["zoom-canvas","drag-canvas"]:c,d=e.nodeSize,p=d===void 0?BS:d,v=e.nodeLabelCfg,m=v===void 0?Du:v,g=e.edgeLabelCfg,x=g===void 0?Du:g,b=e.nodeAnchorPoints,S=b===void 0?FS:b,C=e.layout,w=C===void 0?_At:C,A=e.minimapCfg,I=e.nodeStyle,P=I===void 0?bAt:I,L=e.edgeStyle,M=L===void 0?NS:L,O=e.nodeStateStyles,F=O===void 0?vo:O,k=e.edgeStateStyles,G=k===void 0?vo:k,D=e.autoFit,N=D===void 0?!0:D,z=e.graphRef,j=e.onReady,W=e.loading,J=e.loadingTemplate,et=e.errorTemplate,lt=ht.useRef(null),$=ht.useRef(null),st=zg($);return dl(KS[st],e,lt),ke(function(){var _t=Bg(a,o,lt),dt=KS[st];return dt||(dt=new Ur.Graph({container:lt.current,width:_t[0],height:_t[1],modes:{default:h},defaultNode:{type:l,size:p,style:P,anchorPoints:S,labelCfg:m},defaultEdge:{type:f,style:M,labelCfg:x},nodeStateStyles:F,edgeStateStyles:G,layout:w,fitView:N}),KS[st]=dt),z&&(z.current=dt),Gg(A,dt),GS(dt,t),j&&j(dt),Ug(dt,r),function(){KS[st]&&(KS[st].destroy(),delete KS[st])}},[]),ht.createElement(Aa,{errorTemplate:et},W&&ht.createElement(Ea,{loadingTemplate:J}),ht.createElement("div",{className:n,style:i,ref:lt}))},DX=Kve;RS();var SAt=[150,30],CAt={stroke:"#72CC4A",fill:"#f00"},wAt={type:"dagre",rankdir:"LR",nodesep:30,ranksep:50},gF={style:{fill:"#000000A6",fontSize:10}},Zve={nodeType:"round-rect",edgeType:"fund-polyline",behaviors:["zoom-canvas","drag-canvas"],nodeSize:SAt,nodeLabelCfg:gF,edgeLabelCfg:gF,nodeAnchorPoints:FS,layout:wAt,nodeStyle:CAt,edgeStyle:NS,nodeStateStyles:vo,edgeStateStyles:vo,colorMap:{},autoFit:!0},ZS={},$ve=function(r){var e=jg(r,Zve),t=e.data,n=e.className,i=e.style,a=e.width,o=e.height,s=e.nodeType,l=s===void 0?"round-rect":s,u=e.edgeType,f=u===void 0?"fund-polyline":u,c=e.behaviors,h=c===void 0?["zoom-canvas","drag-canvas"]:c,d=e.nodeSize,p=d===void 0?SAt:d,v=e.nodeLabelCfg,m=v===void 0?gF:v,g=e.edgeLabelCfg,x=g===void 0?gF:g,b=e.nodeAnchorPoints,S=b===void 0?FS:b,C=e.layout,w=C===void 0?wAt:C,A=e.minimapCfg,I=e.nodeStyle,P=I===void 0?CAt:I,L=e.edgeStyle,M=L===void 0?NS:L,O=e.nodeStateStyles,F=O===void 0?vo:O,k=e.edgeStateStyles,G=k===void 0?vo:k,D=e.colorMap,N=D===void 0?{}:D,z=e.autoFit,j=z===void 0?!0:z,W=e.graphRef,J=e.onReady,et=e.loading,lt=e.loadingTemplate,$=e.errorTemplate,st=ht.useRef(null),_t=ht.useRef(null),dt=zg(_t);return dl(ZS[dt],e,st),ke(function(){var vt=Bg(a,o,st),Tt=ZS[dt];Tt||(Tt=new Ur.Graph({container:st.current,width:vt[0],height:vt[1],modes:{default:h},defaultNode:{type:l,size:p,style:P,anchorPoints:S,labelCfg:m},defaultEdge:{type:f,style:M,colorMap:N,labelCfg:x},nodeStateStyles:F,edgeStateStyles:G,layout:w,fitView:j}),ZS[dt]=Tt),W&&(W.current=Tt),Gg(A,Tt);var Ut=cl(t);Tt.data(Ut),Tt.render(),J&&J(Tt);var $t=Tt.getEdges();return $t.forEach(function(Y){var it=Y.getKeyShape(),K=it.attr("stroke"),Rt=Y.getTarget();Rt.update({style:{stroke:K}})}),Ug(Tt,r),function(){ZS[dt]&&(ZS[dt].destroy(),delete ZS[dt])}},[]),ht.createElement(Aa,{errorTemplate:$},et&&ht.createElement(Ea,{loadingTemplate:lt}),ht.createElement("div",{className:n,style:i,ref:st}))},PX=$ve;RS();var EAt={stroke:"#40a9ff"},AAt=[[0,.5],[1,.5]],MAt={stroke:"#ccc",endArrow:{path:Ur.Arrow.vee(10,10),fill:"#ccc"}},TAt={type:"indented",direction:"LR",dropCap:!1,indent:250,getHeight:function(){return 60},getWidth:function(){return 100}},Qve={nodeType:"card-node",edgeType:"cubic-horizontal",behaviors:["zoom-canvas","drag-canvas"],nodeSize:BS,nodeLabelCfg:Du,nodeAnchorPoints:AAt,layout:TAt,nodeStyle:EAt,edgeStyle:MAt,nodeStateStyles:vo,edgeStateStyles:vo,collapseExpand:!0,autoFit:!0},$S={},Jve=function(r){var e=jg(r,Qve),t=e.data,n=e.className,i=e.style,a=e.width,o=e.height,s=e.nodeType,l=s===void 0?"card-node":s,u=e.edgeType,f=u===void 0?"cubic-horizontal":u,c=e.behaviors,h=c===void 0?["zoom-canvas","drag-canvas"]:c,d=e.nodeSize,p=d===void 0?BS:d,v=e.nodeLabelCfg,m=v===void 0?Du:v,g=e.nodeAnchorPoints,x=g===void 0?AAt:g,b=e.layout,S=b===void 0?TAt:b,C=e.minimapCfg,w=e.nodeStyle,A=w===void 0?EAt:w,I=e.edgeStyle,P=I===void 0?MAt:I,L=e.nodeStateStyles,M=L===void 0?vo:L,O=e.edgeStateStyles,F=O===void 0?vo:O,k=e.collapseExpand,G=k===void 0?!0:k,D=e.autoFit,N=D===void 0?!0:D,z=e.handleNodeClick,j=e.graphRef,W=e.onReady,J=e.loading,et=e.loadingTemplate,lt=e.errorTemplate,$=ht.useRef(null),st=zg($),_t=ht.useRef(null);return dl($S[st],e,_t),ke(function(){var dt=Bg(a,o,_t),vt=$S[st];if(vt||(vt=new Ur.TreeGraph({container:_t.current,width:dt[0],height:dt[1],modes:{default:h},defaultNode:{type:l,size:p,style:A,anchorPoints:x,labelCfg:m},defaultEdge:{type:f,style:P},nodeStateStyles:M,edgeStateStyles:F,layout:S,fitView:N}),$S[st]=vt),j&&(j.current=vt),Gg(C,vt),GS(vt,t),W&&W(vt),G){var Tt=function(Ut){var $t=Ut.item;Ut.target.get("name")==="collapse-icon"?(vt.updateItem($t,{collapsed:!$t.getModel().collapsed}),vt.layout()):z&&z($t,vt)};vt.on("node:click",function(Ut){Tt(Ut)}),vt.on("node:touchstart",function(Ut){Tt(Ut)})}return Ug(vt,r),function(){$S[st]&&($S[st].destroy(),delete $S[st])}},[]),ht.createElement(Aa,{errorTemplate:lt},J&&ht.createElement(Ea,{loadingTemplate:et}),ht.createElement("div",{className:n,style:i,ref:_t}))},kX=Jve;var QS=function(){return QS=Object.assign||function(r){for(var e,t=1,n=arguments.length;tencodeURIComponent(r),fv=r=>`(${encodeURIComponent(r)})`,fme=r=>`"${encodeURIComponent(r)}"`,LAt=r=>`("${encodeURIComponent(r)}")`,OAt=class extends Tr{search(e,t,n){let i=this.context.event.data,{shape:a,data:o}=i,s;a==="word-cloud"?s=o.text:s=e?o[e.field]:"",n&&(s=n(s));let l=window.document.body.createEl("a",{href:`obsidian://search?vault=${encodeURIComponent(e.vault)}&query=${t}${s}`});l.click(),l.remove()}tag(e){this.search(e,"tag%3A",ume)}file(e){this.search(e,"file%3A",LAt)}path(e){this.search(e,"path%3A",LAt)}content(e){this.search(e,"content%3A",fv)}task(e){this.search(e,"task%3A",fv)}matchCase(e){this.search(e,"match-case%3A",fv)}ignoreCase(e){this.search(e,"ignore-case%3A",fv)}line(e){this.search(e,"line%3A",fv)}block(e){this.search(e,"block%3A",fv)}taskTodo(e){this.search(e,"task-todo%3A",fv)}taskDone(e){this.search(e,"task-done%3A",fv)}section(e){this.search(e,"section%3A",fv)}default(e){this.search(e,"",fme)}};nr("obsidian-search",OAt);xr("obsidian-search",{start:[{trigger:"element:click",action:"obsidian-search:default"}]});r0("theme1",{colors10:["#FF6B3B","#626681","#FFC100","#9FB40F","#76523B","#DAD5B5","#0E8E89","#E19348","#F383A2","#247FEA"],colors20:["#FF6B3B","#626681","#FFC100","#9FB40F","#76523B","#DAD5B5","#0E8E89","#E19348","#F383A2","#247FEA","#2BCB95","#B1ABF4","#1D42C2","#1D9ED1","#D64BC0","#255634","#8C8C47","#8CDAE5","#8E283B","#791DC9"]});r0("theme2",{colors10:["#025DF4","#DB6BCF","#2498D1","#BBBDE6","#4045B2","#21A97A","#FF745A","#007E99","#FFA8A8","#2391FF"],colors20:["#025DF4","#DB6BCF","#2498D1","#BBBDE6","#4045B2","#21A97A","#FF745A","#007E99","#FFA8A8","#2391FF","#FFC328","#A0DC2C","#946DFF","#626681","#EB4185","#CD8150","#36BCCB","#327039","#803488","#83BC99"]});var DAt=({type:r,config:e,showExportBtn:t=!1})=>{let n=RA[r]||dT[r],i=Na(),a;return t&&(a=ht.createElement("div",{className:"chartsview-export-button","aria-label":"Export to PNG",onClick:()=>{var s;(s=i.current)==null||s.downloadImage(`${r}.png`)}},ht.createElement("svg",{className:"code-glyph",viewBox:"0 0 1024 1024",width:"16",height:"16"},ht.createElement("path",{fill:"currentColor",stroke:"currentColor",d:"M896 166.4H128c-25.6 0-42.666667 17.066667-42.666667 42.666667v597.333333c0 25.6 17.066667 42.666667 42.666667 42.666667h768c25.6 0 42.666667-17.066667 42.666667-42.666667v-597.333333c0-25.6-21.333333-42.666667-42.666667-42.666667z m-42.666667 85.333333v418.133334l-136.533333-136.533334c-21.333333-12.8-51.2-12.8-64 4.266667L554.666667 635.733333l-183.466667-179.2c-17.066667-17.066667-46.933333-17.066667-59.733333 0L170.666667 597.333333V251.733333h682.666666z m-243.2 443.733334l76.8-76.8 136.533334 140.8h-145.066667l-68.266667-64zM170.666667 716.8l170.666666-170.666667 217.6 217.6H170.666667v-46.933333z"}),ht.createElement("path",{fill:"currentColor",stroke:"currentColor",d:"M716.8 396.8m-64 0a64 64 0 1 0 128 0 64 64 0 1 0-128 0Z"})))),ht.createElement(fr,null,a,ht.createElement(n,_9(Hf({},e),{onReady:o=>{if(i.current=o,o instanceof De){let s={};e.theme&&e.backgroundColor&&(s.theme={background:e.backgroundColor}),e.padding&&(s.padding=e.padding),(s.theme||e.padding)&&o.update(s)}}})))};var SF=U(require("obsidian"));var kAt=U(PAt()),yF=U(require("obsidian"));function xF(r,e){r.somethingSelected?r.replaceSelection(e):r.setLine(r.getCursor().line,e)}function RAt(r){let e={};return yF.Vault.recurseChildren(r.vault.getRoot(),t=>{t instanceof yF.TFolder&&(e[t.path]=t.path)}),e}function bF(r){return kAt.default.parse(r,{header:!0,skipEmptyLines:!0,comments:!1,dynamicTyping:!0}).data}function cme(){let r=/A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source,e=/\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u4E00-\u9FD5/.source,t=/[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u4E00-\u9FD5]{1}/.source;return new RegExp([`(?:[0-9]+(?:(?:,|\\.)[0-9]+)*|[\\-${r}])+`,e,t].join("|"),"g")}function NAt(r,e){let t={},n=r.match(cme());n&&n.forEach(o=>{o=o.toLowerCase(),t[o]=t[o]?t[o]+1:1});let i=[],a=new RegExp(e.split(` +`).map(o=>["^",o.trim(),"$"].join("")).join("|"),"i");for(let o in t)a.test(o)||i.push({word:o,count:t[o]});return i}var BAt=U(FAt()),pme=/^\s*function\s*.*\(.*\)\s*\{[\w\W]*\}\s*/i;function GAt(r,e,t){return Da(this,null,function*(){let n=(0,SF.parseYaml)(r),{type:i,data:a}=n;if((RA[i]||dT[i])===void 0)throw new Error(`Unsupported chart type ${i}.`);let s=CF(n.options||{}),l=i=="MultiView"||i=="Mix"?yield vme(n,a,s,e,t):Hf({data:yield UAt(a,e,t)},zAt(s,e)),{theme:u,padding:f}=l,c=u&&(u.background||u.styleSheet&&u.styleSheet.backgroundColor);return l.theme=u!=null?u:$u(e.settings.theme),l.backgroundColor=c?void 0:e.settings.backgroundColor,l.padding=f?void 0:[e.settings.paddingTop,e.settings.paddingRight,e.settings.paddingBottom,e.settings.paddingLeft],{type:i,showExportBtn:e.settings.showExportBtn,config:l}})}function CF(r){for(let e in r){let t=r[e];t&&(typeof t=="string"&&pme.test(t)?r[e]=(0,eval)(`(${t})`):Array.isArray(t)?r[e]=t.map(CF):typeof t=="object"&&(r[e]=CF(t)))}return r}function zAt(r,e){var o,s;let{enableSearchInteraction:t,interactions:n}=r;if(t!==!0&&typeof t!="object")return r;let i=n!=null?n:[];if(!Array.isArray(i))return r;let a={type:"obsidian-search",cfg:{start:[{trigger:"element:click",action:"obsidian-search:default",arg:{field:"text",vault:e.app.vault.getName()}}]}};return typeof t=="object"&&(a.cfg.start[0].action=`obsidian-search:${(o=t.operator)!=null?o:"default"}`,a.cfg.start[0].arg.field=(s=t.field)!=null?s:"text"),i.push(a),delete r.enableSearchInteraction,r.interactions=i,r}function vme(r,e,t,n,i){return Da(this,null,function*(){let a=new Map,o=[];for(let s in r){let l=s.split(".");if(l.length!==2||l[0]!=="options"&&l[0]!=="data")continue;let u=l[1],f=a.get(u)||{};f[l[0]]=r[s],a.set(u,f)}for(let s of a.values())o.push(Hf({data:(yield UAt(s.data,n,i))||e},zAt(CF(s.options||{}),n)));return Hf({views:o},t)})}function UAt(r,e,t){return Da(this,null,function*(){return typeof r=="string"?r.startsWith("wordcount:")?yme(r.replace("wordcount:",""),e):r.startsWith("dataviewjs:")?gme(r.replace("dataviewjs:",""),e,t):xme(r,e):r})}var mme=function(r,e){return{pagePaths:function(t){return r.pagePaths(t,e)},page:function(t){return r.page(t,e)},pages:function(t){return r.pages(t,e)},current:function(){return r.page(e,e)},array:function(t){return r.array(t)},isArray:function(t){return r.isArray(t)},fileLink:function(t,n,i){return BAt.Link.file(t,n,i)},date:function(t){return r.date(t)}}};function gme(r,e,t){return Da(this,null,function*(){var n;if(e.app.plugins.enabledPlugins.has("dataview")){let i=(n=e.app.plugins.plugins.dataview)==null?void 0:n.api;if(i)return new Function("dv",r).call(void 0,mme(i,t));throw new Error("Obsidian Dataview is not ready.")}else throw new Error("Obsidian Dataview is required.")})}function yme(r,e){return Da(this,null,function*(){let t=r.split(","),n=[];for(let i of e.app.vault.getMarkdownFiles())if(i.basename==r||t.contains(i.basename)||jAt(i.parent,t)){let a=yield e.app.vault.cachedRead(i);n.push(a)}if(n.length==0)throw new Error("No words found.");return NAt(n.join(` +`),e.settings.wordCountFilter)})}function jAt(r,e){let t=e.contains(`${r.name}/`);return t||r.parent==null?t:jAt(r.parent,e)}function xme(r,e){return Da(this,null,function*(){let t=r.split(","),n=[];for(let i of t.values()){let a=e.settings.dataPath==="/"?"":`${e.settings.dataPath}/`,o=e.app.vault.getAbstractFileByPath(`${a}${i.trim()}`);o instanceof SF.TFile?n.push(bF(yield e.app.vault.read(o))):n.push({})}return n.length==0?{}:n.length==1?n[0]:n})}var Pc=U(require("obsidian"));var WAt={theme:"default",dataPath:"",backgroundColor:"transparent",paddingTop:30,paddingRight:30,paddingBottom:30,paddingLeft:30,showExportBtn:!1,wordCountFilter:`[A-z]{1,2} [0-9]+ (?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*) and @@ -152861,314 +808,8 @@ went were with these -those` -}; -var ChartsViewSettingTab = class extends import_obsidian3.PluginSettingTab { - constructor(app, plugin) { - super(app, plugin); - this.plugin = plugin; - } - display() { - const { containerEl } = this; - containerEl.empty(); - containerEl.createEl("h2", { text: "Charts View Settings" }); - new import_obsidian3.Setting(containerEl).setName("Theme").setDesc("Choose default color scheme.").addDropdown((dropdown) => dropdown.addOption("default", "default").addOption("dark", "dark").addOption("theme1", "Theme #1").addOption("theme2", "Theme #2").setValue(this.plugin.settings.theme).onChange((value2) => __async(this, null, function* () { - this.plugin.settings.theme = value2; - yield this.plugin.saveSettings(); - }))); - new import_obsidian3.Setting(containerEl).setName("Background Color").setDesc("Change the background color of chart. e.g., #FFFFFF").addText((text) => text.setPlaceholder("transparent").setValue(this.plugin.settings.backgroundColor).onChange((value2) => __async(this, null, function* () { - this.plugin.settings.backgroundColor = value2; - yield this.plugin.saveSettings(); - }))); - new import_obsidian3.Setting(containerEl).setName("Chart Padding").setDesc("Change the padding of chart. (Top, Right, Bottom, Left)").addText((text) => { - text.inputEl.size = 5; - text.setPlaceholder("30").setValue(String(this.plugin.settings.paddingTop)).onChange((value2) => __async(this, null, function* () { - this.plugin.settings.paddingTop = Number(value2); - yield this.plugin.saveSettings(); - })); - }).addText((text) => { - text.inputEl.size = 5; - text.setPlaceholder("30").setValue(String(this.plugin.settings.paddingRight)).onChange((value2) => __async(this, null, function* () { - this.plugin.settings.paddingRight = Number(value2); - yield this.plugin.saveSettings(); - })); - }).addText((text) => { - text.inputEl.size = 5; - text.setPlaceholder("30").setValue(String(this.plugin.settings.paddingBottom)).onChange((value2) => __async(this, null, function* () { - this.plugin.settings.paddingBottom = Number(value2); - yield this.plugin.saveSettings(); - })); - }).addText((text) => { - text.inputEl.size = 5; - text.setPlaceholder("30").setValue(String(this.plugin.settings.paddingLeft)).onChange((value2) => __async(this, null, function* () { - this.plugin.settings.paddingLeft = Number(value2); - yield this.plugin.saveSettings(); - })); - }); - new import_obsidian3.Setting(containerEl).setName("Data Folder").setDesc("Choose default folder for loading chart datas.").addDropdown((dropdown) => dropdown.addOptions(getFolderOptions(this.app)).setValue(this.plugin.settings.dataPath).onChange((value2) => __async(this, null, function* () { - this.plugin.settings.dataPath = value2; - yield this.plugin.saveSettings(); - }))); - new import_obsidian3.Setting(containerEl).setName("Show Export Button").addToggle((toggle) => toggle.setValue(this.plugin.settings.showExportBtn).onChange((value2) => __async(this, null, function* () { - this.plugin.settings.showExportBtn = value2; - yield this.plugin.saveSettings(); - }))); - new import_obsidian3.Setting(containerEl).setName("Word Filter").setDesc("For word count, any words in the list will be ignored.").addTextArea((text) => { - text.inputEl.rows = 6; - text.setValue(this.plugin.settings.wordCountFilter).onChange((value2) => __async(this, null, function* () { - this.plugin.settings.wordCountFilter = value2; - yield this.plugin.saveSettings(); - })); - }); - if (import_obsidian3.Platform.isDesktopApp) { - compat_module_default.render(/* @__PURE__ */ compat_module_default.createElement(compat_module_default.Fragment, null, /* @__PURE__ */ compat_module_default.createElement("p", null, "Make a donation to support Charts View plugin development."), /* @__PURE__ */ compat_module_default.createElement("a", { - href: "https://paypal.me/caronchenhz", - className: "paypal" - }, /* @__PURE__ */ compat_module_default.createElement("svg", { - width: "145px", - height: "37px", - viewBox: "0 0 145 37", - version: "1.1", - xmlns: "http://www.w3.org/2000/svg", - xmlnsXlink: "http://www.w3.org/1999/xlink" - }, /* @__PURE__ */ compat_module_default.createElement("defs", null, /* @__PURE__ */ compat_module_default.createElement("polygon", { - id: "path-1", - points: "0 0.30377 29.7890799 0.30377 29.7890799 36.629778 0 36.629778" - }), /* @__PURE__ */ compat_module_default.createElement("polygon", { - id: "path-3", - points: "0 0.30377 27.0026179 0.30377 27.0026179 32.599368 0 32.599368" - }), /* @__PURE__ */ compat_module_default.createElement("polygon", { - id: "path-5", - points: "0 0.30377 27.0025944 0.30377 27.0025944 32.599368 0 32.599368" - })), /* @__PURE__ */ compat_module_default.createElement("g", { - id: "Page-1", - stroke: "none", - strokeWidth: "1", - fill: "none", - fillRule: "evenodd" - }, /* @__PURE__ */ compat_module_default.createElement("g", { - id: "01.2---Corp-Landing---Sticky-Nav", - transform: "translate(-80.000000, -21.000000)" - }, /* @__PURE__ */ compat_module_default.createElement("g", { - id: "logo-paypal", - transform: "translate(80.000000, 21.000000)" - }, /* @__PURE__ */ compat_module_default.createElement("path", { - d: "M112.489747,16.203225 C112.054389,19.158415 109.870796,19.158415 107.758093,19.158415 L106.556562,19.158415 L107.399352,13.640975 C107.450549,13.307605 107.728735,13.061925 108.055253,13.061925 L108.606253,13.061925 C110.04408,13.061925 111.402426,13.061925 112.102364,13.908485 C112.521611,14.415015 112.647994,15.165745 112.489747,16.203225 M111.570698,8.493535 L103.60429,8.493535 C103.059735,8.493535 102.595735,8.903125 102.511241,9.458865 L99.2897346,30.568475 C99.2260062,30.985095 99.5374877,31.362125 99.9456358,31.362125 L104.033204,31.362125 C104.414142,31.362125 104.739228,31.075005 104.798302,30.686135 L105.711623,24.701385 C105.796833,24.145275 106.260475,23.735315 106.805031,23.735315 L109.325525,23.735315 C114.572735,23.735315 117.600907,21.111645 118.3925,15.910185 C118.748735,13.635425 118.406821,11.847955 117.376068,10.596615 C116.243278,9.220955 114.235475,8.493535 111.570698,8.493535", - id: "Fill-1", - fill: "#009CDE" - }), /* @__PURE__ */ compat_module_default.createElement("path", { - d: "M55.6725531,16.203225 C55.2371951,19.158415 53.0532444,19.158415 50.9412568,19.158415 L49.7393679,19.158415 L50.582158,13.640975 C50.6333556,13.307605 50.9115407,13.061925 51.2380593,13.061925 L51.7890593,13.061925 C53.2268864,13.061925 54.5852321,13.061925 55.2851704,13.908485 C55.7040593,14.415015 55.8308,15.165745 55.6725531,16.203225 M54.7535037,8.493535 L46.7870963,8.493535 C46.2425407,8.493535 45.7788988,8.903125 45.6936889,9.458865 L42.4725407,30.568475 C42.4091704,30.985095 42.7206519,31.362125 43.128442,31.362125 L46.9320963,31.362125 C47.4766519,31.362125 47.9402938,30.952165 48.0255037,30.396055 L48.8944296,24.701385 C48.9792815,24.145275 49.4432815,23.735315 49.987837,23.735315 L52.5086889,23.735315 C57.7555407,23.735315 60.7840716,21.111645 61.5753062,15.910185 C61.9315407,13.635425 61.5896272,11.847955 60.5592321,10.596615 C59.426084,9.220955 57.4182815,8.493535 54.7535037,8.493535", - id: "Fill-3", - fill: "#003087" - }), /* @__PURE__ */ compat_module_default.createElement("path", { - d: "M73.2472333,23.781713 C72.8788259,26.034273 71.1484926,27.546093 68.9416284,27.546093 C67.8353321,27.546093 66.949579,27.178313 66.3803198,26.482343 C65.8160728,25.791923 65.6034062,24.808093 65.7824185,23.712893 C66.1261222,21.480683 67.8840235,19.919653 70.0572333,19.919653 C71.140616,19.919653 72.0199247,20.291133 72.6002827,20.994133 C73.184579,21.701943 73.4144309,22.692063 73.2472333,23.781713 M78.563184,16.108653 L74.7487889,16.108653 C74.4219123,16.108653 74.1437272,16.354333 74.0925296,16.688073 L73.9253321,17.790303 L73.6582457,17.391073 C72.8322827,16.151573 70.9913198,15.737913 69.1525049,15.737913 C64.9385543,15.737913 61.338616,19.038313 60.6379617,23.667013 C60.2731346,25.976553 60.7908383,28.183233 62.0578877,29.723543 C63.222184,31.138793 64.8830605,31.727833 66.862221,31.727833 C70.2588012,31.727833 72.1430852,29.472683 72.1430852,29.472683 L71.9726654,30.568253 C71.908937,30.984873 72.2204185,31.361903 72.6285667,31.361903 L76.0638136,31.361903 C76.6083691,31.361903 77.0720111,30.952683 77.156863,30.396573 L79.2190852,16.901563 C79.2824556,16.485313 78.9709741,16.108653 78.563184,16.108653", - id: "Fill-5", - fill: "#003087" - }), /* @__PURE__ */ compat_module_default.createElement("path", { - d: "M130.064427,23.781713 C129.69602,26.034273 127.966044,27.546093 125.75918,27.546093 C124.652526,27.546093 123.766773,27.178313 123.197156,26.482343 C122.633267,25.791923 122.4206,24.808093 122.599612,23.712893 C122.943316,21.480683 124.701217,19.919653 126.874427,19.919653 C127.957452,19.919653 128.837119,20.291133 129.417477,20.994133 C130.001773,21.701943 130.231625,22.692063 130.064427,23.781713 M135.380378,16.108653 L131.565983,16.108653 C131.239106,16.108653 130.960921,16.354333 130.909723,16.688073 L130.742526,17.790303 L130.47544,17.391073 C129.649477,16.151573 127.808156,15.737913 125.969699,15.737913 C121.755748,15.737913 118.15581,19.038313 117.455156,23.667013 C117.090686,25.976553 117.608032,28.183233 118.875081,29.723543 C120.03902,31.138793 121.700254,31.727833 123.679415,31.727833 C127.075995,31.727833 128.960279,29.472683 128.960279,29.472683 L128.789859,30.568253 C128.726131,30.984873 129.037612,31.361903 129.44576,31.361903 L132.881007,31.361903 C133.425563,31.361903 133.889205,30.952683 133.974057,30.396573 L136.036279,16.901563 C136.099649,16.485313 135.788168,16.108653 135.380378,16.108653", - id: "Fill-7", - fill: "#009CDE" - }), /* @__PURE__ */ compat_module_default.createElement("path", { - d: "M98.8795457,16.108727 L95.0454593,16.108727 C94.678842,16.108727 94.3358543,16.296687 94.1296321,16.610077 L88.8408914,24.660167 L86.5992988,16.924947 C86.4593111,16.440617 86.0278914,16.108727 85.5391877,16.108727 L81.7702617,16.108727 C81.3148543,16.108727 80.9951383,16.571227 81.1415704,17.016707 L85.3633975,29.823147 L81.3925457,35.613277 C81.0807062,36.068007 81.3954099,36.696267 81.9345951,36.696267 L85.7647432,36.696267 C86.1277802,36.696267 86.4675457,36.512377 86.674484,36.204167 L99.4251753,17.186167 C99.7302123,16.731067 99.4151506,16.108727 98.8795457,16.108727", - id: "Fill-9", - fill: "#003087" - }), /* @__PURE__ */ compat_module_default.createElement("path", { - d: "M139.876523,9.07314 L136.606684,30.56903 C136.543314,30.98565 136.855153,31.36194 137.262585,31.36194 L140.551042,31.36194 C141.095598,31.36194 141.55924,30.95235 141.644091,30.39661 L144.867746,9.287 C144.931474,8.87038 144.619993,8.49372 144.211844,8.49372 L140.532425,8.49372 C140.205548,8.49372 139.927363,8.7394 139.876523,9.07314", - id: "Fill-11", - fill: "#009CDE" - }), /* @__PURE__ */ compat_module_default.createElement("g", { - id: "Group-15", - transform: "translate(0.000000, 0.066415)" - }, /* @__PURE__ */ compat_module_default.createElement("mask", { - id: "mask-2", - fill: "white" - }, /* @__PURE__ */ compat_module_default.createElement("use", { - xlinkHref: "#path-1" - })), /* @__PURE__ */ compat_module_default.createElement("g", { - id: "Clip-14" - }), /* @__PURE__ */ compat_module_default.createElement("path", { - d: "M26.8450852,9.532828 C27.2739988,6.706768 26.842221,4.784248 25.363221,3.042288 C23.7349247,1.124948 20.7933938,0.303548 17.0294802,0.303548 L6.10471481,0.303548 C5.33567778,0.303548 4.68085062,0.881858 4.56091235,1.667368 L0.0114925926,31.479008 C-0.0780135802,32.067308 0.361998765,32.599368 0.938060494,32.599368 L7.68252963,32.599368 L7.21709753,35.650018 C7.13869012,36.164688 7.52320864,36.629778 8.02730741,36.629778 L13.7120235,36.629778 C14.3851099,36.629778 14.9579494,36.123988 15.0628506,35.437268 L15.1187025,35.138308 L16.1895543,28.120148 L16.2586531,27.732388 C16.3635543,27.045668 16.9363938,26.539508 17.6091222,26.539508 L18.4594309,26.539508 C23.9669247,26.539508 28.2793321,24.227378 29.539221,17.539998 C30.0658753,14.745388 29.7934185,12.413278 28.4014185,10.773438 C27.9800235,10.277268 27.4562333,9.867308 26.8450852,9.532828", - id: "Fill-13", - fill: "#009CDE", - mask: "url(#mask-2)" - })), /* @__PURE__ */ compat_module_default.createElement("g", { - id: "Group-18", - transform: "translate(0.000000, 0.066415)" - }, /* @__PURE__ */ compat_module_default.createElement("mask", { - id: "mask-4", - fill: "white" - }, /* @__PURE__ */ compat_module_default.createElement("use", { - xlinkHref: "#path-3" - })), /* @__PURE__ */ compat_module_default.createElement("g", { - id: "Clip-17" - }), /* @__PURE__ */ compat_module_default.createElement("path", { - d: "M26.8450852,9.532828 C27.2739988,6.706768 26.842221,4.784248 25.363221,3.042288 C23.7349247,1.124948 20.7933938,0.303548 17.0294802,0.303548 L6.10471481,0.303548 C5.33567778,0.303548 4.68085062,0.881858 4.56091235,1.667368 L0.0114925926,31.479008 C-0.0780135802,32.067308 0.361998765,32.599368 0.938060494,32.599368 L7.68252963,32.599368 L9.37670247,21.496778 L9.32407284,21.844948 C9.44401111,21.059808 10.0931099,20.481498 10.8625049,20.481498 L14.0679,20.481498 C20.3634062,20.481498 25.2930481,17.838218 26.7333815,10.194018 C26.7759864,9.967578 26.8125049,9.748538 26.8450852,9.532828", - id: "Fill-16", - fill: "#012169", - mask: "url(#mask-4)" - })), /* @__PURE__ */ compat_module_default.createElement("g", { - id: "Group-21", - transform: "translate(0.000000, 0.066415)" - }, /* @__PURE__ */ compat_module_default.createElement("mask", { - id: "mask-6", - fill: "white" - }, /* @__PURE__ */ compat_module_default.createElement("use", { - xlinkHref: "#path-5" - })), /* @__PURE__ */ compat_module_default.createElement("g", { - id: "Clip-20" - }), /* @__PURE__ */ compat_module_default.createElement("path", { - d: "M11.196721,9.570198 C11.268684,9.098078 11.5622642,8.711058 11.9571654,8.515698 C12.1365358,8.426898 12.3370296,8.377318 12.5471901,8.377318 L21.1107827,8.377318 C22.1254247,8.377318 23.0713259,8.445768 23.9363136,8.590068 C24.1833506,8.630768 24.4239432,8.678128 24.6573753,8.731778 C24.8911654,8.785428 25.1177951,8.845368 25.3372642,8.911598 C25.4471778,8.944898 25.5549432,8.979678 25.6612765,9.015938 C26.0858938,9.161718 26.4811531,9.333398 26.8452642,9.532828 C27.2738198,6.706768 26.842042,4.783878 25.363042,3.042288 C23.7351037,1.124948 20.7932148,0.303548 17.0296593,0.303548 L6.10489383,0.303548 C5.33549877,0.303548 4.6806716,0.881858 4.56073333,1.667368 L0.0116716049,31.479008 C-0.0781925926,32.067308 0.361819753,32.599368 0.937881481,32.599368 L7.68270864,32.599368 L9.37688148,21.496778 L11.196721,9.570198 Z", - id: "Fill-19", - fill: "#003087", - mask: "url(#mask-6)" - })))))))), containerEl.createDiv({ cls: "chartsview-donation" })); - } - } -}; - -// src/components/Modal.ts -var import_obsidian4 = __toModule(require("obsidian")); - -// src/templates.ts -var ChartTemplateType; -(function(ChartTemplateType2) { - ChartTemplateType2["Bar"] = "YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBCYXIKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGE6CiAgLSBhY3Rpb246ICJCcm93c2UgdGhlIHdlYnNpdGUiCiAgICBwdjogNTAwMDAKICAtIGFjdGlvbjogIkFkZCB0byBjYXJ0IgogICAgcHY6IDM1MDAwCiAgLSBhY3Rpb246ICJHZW5lcmF0ZSBvcmRlcnMiCiAgICBwdjogMjUwMDAKICAtIGFjdGlvbjogIlBheSBvcmRlciIKICAgIHB2OiAxNTAwMAogIC0gYWN0aW9uOiAiU2VhbCB0aGUgZGVhbCIKICAgIHB2OiA4NTAwCgojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IG9wdGlvbnMgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwpvcHRpb25zOgogIHhGaWVsZDogInB2IgogIHlGaWVsZDogImFjdGlvbiIKICBjb252ZXJzaW9uVGFnOiB7fQpgYGA="; - ChartTemplateType2["Pie"] = "YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBQaWUKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGE6CiAgLSB0eXBlOiAiV2FnZSBpbmNvbWUgcGVyIGNhcGl0YSAowqUpIgogICAgdmFsdWU6IDE3OTE3CiAgLSB0eXBlOiAiT3BlcmF0aW5nIG5ldCBpbmNvbWUgcGVyIGNhcGl0YSAowqUpIgogICAgdmFsdWU6IDUzMDcKICAtIHR5cGU6ICJQcm9wZXJ0eSBQZXIgQ2FwaXRhIE5ldCBJbmNvbWUgKMKlKSIKICAgIHZhbHVlOiAyNzkxCiAgLSB0eXBlOiAiVHJhbnNmZXIgb2YgbmV0IGluY29tZSBwZXIgY2FwaXRhICjCpSkiCiAgICB2YWx1ZTogNjE3MwoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBvcHRpb25zIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKb3B0aW9uczoKICBhbmdsZUZpZWxkOiAidmFsdWUiCiAgY29sb3JGaWVsZDogInR5cGUiCiAgcmFkaXVzOiAwLjUKICBsYWJlbDoKICAgIHR5cGU6ICJzcGlkZXIiCiAgICBjb250ZW50OiAie3BlcmNlbnRhZ2V9XG57bmFtZX0iCiAgbGVnZW5kOgogICAgbGF5b3V0OiAiaG9yaXpvbnRhbCIKICAgIHBvc2l0aW9uOiAiYm90dG9tIgpgYGA="; - ChartTemplateType2["WordCloud"] = "YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBXb3JkQ2xvdWQKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGE6CiAgLSB4OiAiQ2hpbmEiCiAgICB2YWx1ZTogMjM4MzIyMDAwMAogICAgY2F0ZWdvcnk6ICJhc2lhIgogIC0geDogIkluZG9uZXNpYSIKICAgIHZhbHVlOiAyNjM1MTAwMDAKICAgIGNhdGVnb3J5OiAiYXNpYSIKICAtIHg6ICJQYWtpc3RhbiIKICAgIHZhbHVlOiAzOTY0NTkwMDAKICAgIGNhdGVnb3J5OiAiYXNpYSIKICAtIHg6ICJSdXNzaWEiCiAgICB2YWx1ZTogNTQ2ODA0MzcyCiAgICBjYXRlZ29yeTogImV1cm9wZSIKICAtIHg6ICJKYXBhbiIKICAgIHZhbHVlOiAxMjY3OTAwMDAKICAgIGNhdGVnb3J5OiAiYXNpYSIKICAtIHg6ICJWaWV0bmFtIgogICAgdmFsdWU6IDkyNzAwMDAwCiAgICBjYXRlZ29yeTogImFzaWEiCiAgLSB4OiAiR2VybWFueSIKICAgIHZhbHVlOiA4MjgwMDAwMAogICAgY2F0ZWdvcnk6ICJldXJvcGUiCiAgLSB4OiAiSXJhbiIKICAgIHZhbHVlOiA4MDEzNTQwMAogICAgY2F0ZWdvcnk6ICJhc2lhIgogIC0geDogIlRoYWlsYW5kIgogICAgdmFsdWU6IDY4Mjk4MDAwCiAgICBjYXRlZ29yeTogImFzaWEiCiAgLSB4OiAiRnJhbmNlIgogICAgdmFsdWU6IDY3MDEzMDAwCiAgICBjYXRlZ29yeTogImV1cm9wZSIKICAtIHg6ICJJdGFseSIKICAgIHZhbHVlOiA2MDU5OTkzNgogICAgY2F0ZWdvcnk6ICJldXJvcGUiCiAgLSB4OiAiU291dGggS29yZWEiCiAgICB2YWx1ZTogNTE0NDYyMDEKICAgIGNhdGVnb3J5OiAiYXNpYSIKICAtIHg6ICJLZW55YSIKICAgIHZhbHVlOiA0ODQ2NzAwMAogICAgY2F0ZWdvcnk6ICJhZnJpY2EiCiAgLSB4OiAiU3BhaW4iCiAgICB2YWx1ZTogNDY4MTIwMDAKICAgIGNhdGVnb3J5OiAiZXVyb3BlIgogIC0geDogIlN1ZGFuIgogICAgdmFsdWU6IDQyMTc2MDAwCiAgICBjYXRlZ29yeTogImFmcmljYSIKICAtIHg6ICJJcmFxIgogICAgdmFsdWU6IDQ3ODgzNTQzCiAgICBjYXRlZ29yeTogImFzaWEiCiAgLSB4OiAiTmVwYWwiCiAgICB2YWx1ZTogMjg4MjU3MDkKICAgIGNhdGVnb3J5OiAiYXNpYSIKICAtIHg6ICJOb3J0aCBLb3JlYSIKICAgIHZhbHVlOiAyNDIxMzUxMAogICAgY2F0ZWdvcnk6ICJhc2lhIgogIC0geDogIkNoaWxlIgogICAgdmFsdWU6IDI4MTkxOTAwCiAgICBjYXRlZ29yeTogImFtZXJpY2EiCgojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IG9wdGlvbnMgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwpvcHRpb25zOgogIHdvcmRGaWVsZDogIngiCiAgd2VpZ2h0RmllbGQ6ICJ2YWx1ZSIKICBjb2xvcjogIiMxMjJjNmEiCiAgd29yZFN0eWxlOgogICAgZm9udEZhbWlseTogIlZlcmRhbmEiCiAgICBmb250U2l6ZTogWzI0LCA4MF0KICBpbnRlcmFjdGlvbnM6CiAgICB0eXBlOiAiZWxlbWVudC1hY3RpdmUiCiAgc3R5bGU6CiAgICBiYWNrZ3JvdW5kQ29sb3I6ICJ3aGl0ZSIKICBzdGF0ZToKICAgIGFjdGl2ZToKICAgICAgc3R5bGU6CiAgICAgICAgbGluZVdpZHRoOiAzCmBgYA=="; - ChartTemplateType2["WordCount"] = "YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBXb3JkQ2xvdWQKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGE6ICJ3b3JkY291bnQ6bm90ZS1uYW1lLWhlcmUtd2l0aG91dC1mb2xkLXBhdGgiCgojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IG9wdGlvbnMgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwpvcHRpb25zOgogIHdvcmRGaWVsZDogIndvcmQiCiAgd2VpZ2h0RmllbGQ6ICJjb3VudCIKICBjb2xvckZpZWxkOiAiY291bnQiCiAgd29yZFN0eWxlOgogICAgcm90YXRpb246IDMwCmBgYA=="; - ChartTemplateType2["Treemap"] = "YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBUcmVlbWFwCgojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IGRhdGEgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwpkYXRhOgogIG5hbWU6ICdyb290JwogIGNoaWxkcmVuOgogICAgLSBuYW1lOiAnRm9sZGVyIDEnCiAgICAgIHZhbHVlOiA1NjAKICAgIC0gbmFtZTogJ0ZvbGRlciAyJwogICAgICB2YWx1ZTogNTAwCiAgICAtIG5hbWU6ICdGb2xkZXIgMycKICAgICAgdmFsdWU6IDE1MAogICAgLSBuYW1lOiAnRm9sZGVyIDQnCiAgICAgIHZhbHVlOiAxNDAKICAgIC0gbmFtZTogJ0ZvbGRlciA1JwogICAgICB2YWx1ZTogMTE1CiAgICAtIG5hbWU6ICdGb2xkZXIgNicKICAgICAgdmFsdWU6IDk1CiAgICAtIG5hbWU6ICdGb2xkZXIgNycKICAgICAgdmFsdWU6IDkwCiAgICAtIG5hbWU6ICdGb2xkZXIgOCcKICAgICAgdmFsdWU6IDc1CiAgICAtIG5hbWU6ICdGb2xkZXIgOScKICAgICAgdmFsdWU6IDk4CiAgICAtIG5hbWU6ICdGb2xkZXIgMTAnCiAgICAgIHZhbHVlOiA2MAogICAgLSBuYW1lOiAnRm9sZGVyIDExJwogICAgICB2YWx1ZTogNDUKICAgIC0gbmFtZTogJ0ZvbGRlciAxMicKICAgICAgdmFsdWU6IDQwCiAgICAtIG5hbWU6ICdGb2xkZXIgMTMnCiAgICAgIHZhbHVlOiA0MAogICAgLSBuYW1lOiAnRm9sZGVyIDE0JwogICAgICB2YWx1ZTogMzUKICAgIC0gbmFtZTogJ0ZvbGRlciAxNScKICAgICAgdmFsdWU6IDQwCiAgICAtIG5hbWU6ICdGb2xkZXIgMTYnCiAgICAgIHZhbHVlOiA0MAogICAgLSBuYW1lOiAnRm9sZGVyIDE3JwogICAgICB2YWx1ZTogNDAKICAgIC0gbmFtZTogJ0ZvbGRlciAxOCcKICAgICAgdmFsdWU6IDMwCiAgICAtIG5hbWU6ICdGb2xkZXIgMTknCiAgICAgIHZhbHVlOiAyOAogICAgLSBuYW1lOiAnRm9sZGVyIDIwJwogICAgICB2YWx1ZTogMTYKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgb3B0aW9ucyAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCm9wdGlvbnM6CiAgY29sb3JGaWVsZDogIm5hbWUiCmBgYAo="; - ChartTemplateType2["DualAxes"] = "YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBEdWFsQXhlcwoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBkYXRhICAgIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKZGF0YToKICAtCiAgICAtIHRpbWU6ICIyMDE5LTAzIgogICAgICB2YWx1ZTogMzUwCiAgICAgIGNvdW50OiA4MDAKICAgIC0gdGltZTogIjIwMTktMDQiCiAgICAgIHZhbHVlOiA5MDAKICAgICAgY291bnQ6IDYwMAogICAgLSB0aW1lOiAiMjAxOS0wNSIKICAgICAgdmFsdWU6IDMwMAogICAgICBjb3VudDogNDAwCiAgICAtIHRpbWU6ICIyMDE5LTA2IgogICAgICB2YWx1ZTogNDUwCiAgICAgIGNvdW50OiAzODAKICAgIC0gdGltZTogIjIwMTktMDciCiAgICAgIHZhbHVlOiA0NzAKICAgICAgY291bnQ6IDIyCiAgLQogICAgLSB0aW1lOiAiMjAxOS0wMyIKICAgICAgdmFsdWU6IDM1MAogICAgICBjb3VudDogODAwCiAgICAtIHRpbWU6ICIyMDE5LTA0IgogICAgICB2YWx1ZTogOTAwCiAgICAgIGNvdW50OiA2MDAKICAgIC0gdGltZTogIjIwMTktMDUiCiAgICAgIHZhbHVlOiAzMDAKICAgICAgY291bnQ6IDQwMAogICAgLSB0aW1lOiAiMjAxOS0wNiIKICAgICAgdmFsdWU6IDQ1MAogICAgICBjb3VudDogMzgwCiAgICAtIHRpbWU6ICIyMDE5LTA3IgogICAgICB2YWx1ZTogNDcwCiAgICAgIGNvdW50OiAyMgoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBvcHRpb25zIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKb3B0aW9uczoKICB4RmllbGQ6ICd0aW1lJwogIHlGaWVsZDogWyd2YWx1ZScsICdjb3VudCddCiAgeUF4aXM6CiAgICB2YWx1ZToKICAgICAgbWluOiAwCiAgICAgIGxhYmVsOgogICAgICAgIGZvcm1hdHRlcjoKICAgICAgICAgIGZ1bmN0aW9uIGZvcm1hdHRlcih2YWwpIHsKICAgICAgICAgICAgcmV0dXJuICcnLmNvbmNhdCh2YWwsICfkuKonKTsKICAgICAgICAgIH0KICBnZW9tZXRyeU9wdGlvbnM6CiAgICAtIGdlb21ldHJ5OiAnY29sdW1uJwogICAgLSBnZW9tZXRyeTogJ2xpbmUnCiAgICAgIGxpbmVTdHlsZToKICAgICAgICBsaW5lV2lkdGg6IDIKYGBg"; - ChartTemplateType2["Mix"] = "YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBNaXgKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGEuYXJlYToKICAtIHRpbWU6IDEyNDY0MDY0MDAwMDAKICAgIHRlbXBlcmF0dXJlOiBbMTQuMywgMjcuN10KICAtIHRpbWU6IDEyNDY0OTI4MDAwMDAKICAgIHRlbXBlcmF0dXJlOiBbMTQuNSwgMjcuOF0KICAtIHRpbWU6IDEyNDY1NzkyMDAwMDAKICAgIHRlbXBlcmF0dXJlOiBbMTUuNSwgMjkuNl0KICAtIHRpbWU6IDEyNDY2NjU2MDAwMDAKICAgIHRlbXBlcmF0dXJlOiBbMTYuNywgMzAuN10KICAtIHRpbWU6IDEyNDY3NTIwMDAwMDAKICAgIHRlbXBlcmF0dXJlOiBbMTYuNSwgMjUuMF0KICAtIHRpbWU6IDEyNDY4Mzg0MDAwMDAKICAgIHRlbXBlcmF0dXJlOiBbMTcuOCwgMjUuN10KCmRhdGEubGluZToKICAtIHRpbWU6IDEyNDY0MDY0MDAwMDAKICAgIHRlbXBlcmF0dXJlOiAyMS41CiAgLSB0aW1lOiAxMjQ2NDkyODAwMDAwCiAgICB0ZW1wZXJhdHVyZTogMjIuMQogIC0gdGltZTogMTI0NjU3OTIwMDAwMAogICAgdGVtcGVyYXR1cmU6IDIzCiAgLSB0aW1lOiAxMjQ2NjY1NjAwMDAwCiAgICB0ZW1wZXJhdHVyZTogMjMuOAogIC0gdGltZTogMTI0Njc1MjAwMDAwMAogICAgdGVtcGVyYXR1cmU6IDIxLjQKICAtIHRpbWU6IDEyNDY4Mzg0MDAwMDAKICAgIHRlbXBlcmF0dXJlOiAyMS4zCgojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IG9wdGlvbnMgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwpvcHRpb25zOgogIGFwcGVuZFBhZGRpbmc6IDgKICBzeW5jVmlld1BhZGRpbmc6IHRydWUKICB0b29sdGlwOgogICAgc2hhcmVkOiB0cnVlCiAgICBzaG93TWFya2VyczogZmFsc2UKICAgIHNob3dDcm9zc2hhaXJzOiB0cnVlCiAgICBvZmZzZXRZOiAtNTAKCm9wdGlvbnMuYXJlYToKICBheGVzOiB7fQogIG1ldGE6CiAgICB0aW1lOgogICAgICB0eXBlOiAndGltZScKICAgICAgbWFzazogJ01NLUREJwogICAgICBuaWNlOiB0cnVlCiAgICAgIHRpY2tJbnRlcnZhbDogMTcyODAwMDAwCiAgICAgIHJhbmdlOiBbMCwgMV0KICAgIHRlbXBlcmF0dXJlOgogICAgICBuaWNlOiB0cnVlCiAgICAgIHN5bmM6IHRydWUKICAgICAgYWxpYXM6ICfmuKnluqbojIPlm7QnCiAgZ2VvbWV0cmllczoKICAgIC0gdHlwZTogJ2FyZWEnCiAgICAgIHhGaWVsZDogJ3RpbWUnCiAgICAgIHlGaWVsZDogJ3RlbXBlcmF0dXJlJwogICAgICBtYXBwaW5nOiB7fQoKb3B0aW9ucy5saW5lOgogIGF4ZXM6IGZhbHNlCiAgbWV0YToKICAgIHRpbWU6CiAgICAgIHR5cGU6ICd0aW1lJwogICAgICBtYXNrOiAnTU0tREQnCiAgICAgIG5pY2U6IHRydWUKICAgICAgdGlja0ludGVydmFsOiAxNzI4MDAwMDAKICAgICAgcmFuZ2U6IFswLCAxXQogICAgdGVtcGVyYXR1cmU6CiAgICAgIHN5bmM6ICd0ZW1wZXJhdHVyZScKICAgICAgYWxpYXM6ICfmuKnluqYnCiAgZ2VvbWV0cmllczoKICAgIC0gdHlwZTogJ2xpbmUnCiAgICAgIHhGaWVsZDogJ3RpbWUnCiAgICAgIHlGaWVsZDogJ3RlbXBlcmF0dXJlJwogICAgICBtYXBwaW5nOiB7fQogICAgLSB0eXBlOiAncG9pbnQnCiAgICAgIHhGaWVsZDogJ3RpbWUnCiAgICAgIHlGaWVsZDogJ3RlbXBlcmF0dXJlJwogICAgICBtYXBwaW5nOgogICAgICAgIHNoYXBlOiAnY2lyY2xlJwogICAgICAgIHN0eWxlOgogICAgICAgICAgZmlsbE9wYWNpdHk6IDEKYGBg"; - ChartTemplateType2["OrganizationTreeGraph"] = "YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBPcmdhbml6YXRpb25UcmVlR3JhcGgKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGE6CiAgaWQ6ICJyb290IgogIGxhYmVsOiAiUm9vdCIKICBjaGlsZHJlbjoKICAgIC0gaWQ6ICJjMSIKICAgICAgbGFiZWw6ICJDMSIKICAgICAgY2hpbGRyZW46CiAgICAgICAgLSBpZDogImMxLTEiCiAgICAgICAgICBsYWJlbDogIkMxLTEiCiAgICAgICAgICBjaGlsZHJlbjoKICAgICAgICAgICAgLSBpZDogImMxLTEtMSIKICAgICAgICAgICAgICBsYWJlbDogIkMxLTEtMSIKICAgICAgICAgICAgLSBpZDogImMxLTEtMiIKICAgICAgICAgICAgICBsYWJlbDogIkMxLTEtMiIKICAgICAgICAtIGlkOiAiYzEtMiIKICAgICAgICAgIGxhYmVsOiAiQzEtMiIKICAgICAgICAgIGNoaWxkcmVuOgogICAgICAgICAgICAtIGlkOiAiYzEtMi0xIgogICAgICAgICAgICAgIGxhYmVsOiAiQzEtMi0xIgogICAgICAgICAgICAtIGlkOiAiYzEtMi0yIgogICAgICAgICAgICAgIGxhYmVsOiAiQzEtMi0yIgogICAgLSBpZDogImMyIgogICAgICBsYWJlbDogIkMyIgogICAgICBjaGlsZHJlbjoKICAgICAgICAtIGlkOiAiYzItMSIKICAgICAgICAgIGxhYmVsOiAiQzItMSIKICAgICAgICAgIGNoaWxkcmVuOgogICAgICAgICAgICAtIGlkOiAiYzItMS0xIgogICAgICAgICAgICAgIGxhYmVsOiAiQzItMS0xIgoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBvcHRpb25zIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKb3B0aW9uczoge30KYGBg"; - ChartTemplateType2["Radar"] = "YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBSYWRhcgoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBkYXRhICAgIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKZGF0YToKICAtIGl0ZW06ICJEZXNpZ24iCiAgICB1c2VyOiAiYSIKICAgIHNjb3JlOiA3MAogIC0gaXRlbTogIkRlc2lnbiIKICAgIHVzZXI6ICJiIgogICAgc2NvcmU6IDMwCiAgLSBpdGVtOiAiTWFya2V0aW5nIgogICAgdXNlcjogImEiCiAgICBzY29yZTogNTAKICAtIGl0ZW06ICJNYXJrZXRpbmciCiAgICB1c2VyOiAiYiIKICAgIHNjb3JlOiA2MAogIC0gaXRlbTogIlRlY2hub2xvZ3kiCiAgICB1c2VyOiAiYSIKICAgIHNjb3JlOiA1MAogIC0gaXRlbTogIlRlY2hub2xvZ3kiCiAgICB1c2VyOiAiYiIKICAgIHNjb3JlOiA0MAogIC0gaXRlbTogIlN1cHBvcnQiCiAgICB1c2VyOiAiYSIKICAgIHNjb3JlOiAzMAogIC0gaXRlbTogIlN1cHBvcnQiCiAgICB1c2VyOiAiYiIKICAgIHNjb3JlOiA0MAogIC0gaXRlbTogIlNhbGVzIgogICAgdXNlcjogImEiCiAgICBzY29yZTogNjAKICAtIGl0ZW06ICJTYWxlcyIKICAgIHVzZXI6ICJiIgogICAgc2NvcmU6IDQwCgojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IG9wdGlvbnMgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwpvcHRpb25zOgogIHhGaWVsZDogIml0ZW0iCiAgeUZpZWxkOiAic2NvcmUiCiAgc2VyaWVzRmllbGQ6ICJ1c2VyIgogIG1ldGE6CiAgICBzY29yZToKICAgICAgYWxpYXM6ICJTY29yZSIKICAgICAgbWluOiAwCiAgICAgIG5pY2U6IHRydWUKICB4QXhpczoKICAgIGxpbmU6IG51bGwKICAgIHRpY2tMaW5lOiBudWxsCiAgeUF4aXM6CiAgICBsYWJlbDogZmFsc2UKICAgIGdyaWQ6CiAgICAgIGFsdGVybmF0ZUNvbG9yOiAicmdiYSgwLCAwLCAwLCAwLjA0KSIKICBwb2ludDoge30KICBhcmVhOiB7fQpgYGA="; - ChartTemplateType2["TinyLine"] = "YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBUaW55TGluZQoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBkYXRhICAgIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKZGF0YTogWzI2NCwgNDE3LCA0MzgsIDg4NywgMzA5LCAzOTcsIDU1MCwgNTc1LCA1NjMsIDQzMCwgNTI1LCA1OTIsIDQ5MiwgNDY3LCA1MTMsIDU0NiwgOTgzLCAzNDAsIDUzOSwgMjQzLCAyMjYsIDE5Ml0KCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgb3B0aW9ucyAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCm9wdGlvbnM6CiAgaGVpZ2h0OiA2MAogIGF1dG9GaXQ6IGZhbHNlCiAgc21vb3RoOiB0cnVlCiAgdG9vbHRpcDogZmFsc2UKICBhbm5vdGF0aW9uczoKICAgIC0gdHlwZTogImxpbmUiCiAgICAgIHN0YXJ0OiBbIm1pbiIsICJtZWFuIl0KICAgICAgZW5kOiBbIm1heCIsICJtZWFuIl0KICAgICAgc3R5bGU6CiAgICAgICAgc3Ryb2tlOiAicmdiYSgwLCAwLCAwLCAwLjQ1KSIKICAgICAgdGV4dDoKICAgICAgICBjb250ZW50OiAiQXZlcmFnZSIKICAgICAgICBvZmZzZXRZOiAtMgogICAgICAgIHN0eWxlOgogICAgICAgICAgdGV4dEFsaWduOiAibGVmdCIKICAgICAgICAgIGZvbnRTaXplOiAxMAogICAgICAgICAgZmlsbDogInJnYmEoNDQsIDUzLCA2NiwgMC40NSkiCiAgICAgICAgICB0ZXh0QmFzZWxpbmU6ICJib3R0b20iCiAgICAtIHR5cGU6ICJsaW5lIgogICAgICBzdGFydDogWyJtaW4iLCA4MDBdCiAgICAgIGVuZDogWyJtYXgiLCA4MDBdCiAgICAgIHN0eWxlOgogICAgICAgIHN0cm9rZTogInJnYmEoMjAwLCAwLCAwLCAwLjU1KSIKICAgICAgdGV4dDoKICAgICAgICBjb250ZW50OiAiVGFyZ2V0IgogICAgICAgIG9mZnNldFk6IC0yCiAgICAgICAgc3R5bGU6CiAgICAgICAgICB0ZXh0QWxpZ246ICJsZWZ0IgogICAgICAgICAgZm9udFNpemU6IDEwCiAgICAgICAgICBmaWxsOiAicmdiYSg0NCwgNTMsIDY2LCAwLjQ1KSIKICAgICAgICAgIHRleHRCYXNlbGluZTogImJvdHRvbSIKYGBg"; - ChartTemplateType2["Dataviewjs Example (Column)"] = "YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBDb2x1bW4KCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGE6IHwKICBkYXRhdmlld2pzOgogIHJldHVybiBkdi5wYWdlcygpCiAgICAgICAgICAgLmdyb3VwQnkocCA9PiBwLmZpbGUuZm9sZGVyKQogICAgICAgICAgIC5tYXAocCA9PiAoe2ZvbGRlcjogcC5rZXkgfHwgIlJPT1QiLCBjb3VudDogcC5yb3dzLmxlbmd0aH0pKQogICAgICAgICAgIC5hcnJheSgpOwoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBvcHRpb25zIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKb3B0aW9uczoKICB4RmllbGQ6ICJmb2xkZXIiCiAgeUZpZWxkOiAiY291bnQiCiAgcGFkZGluZzogYXV0bwogIGxhYmVsOgogICAgcG9zaXRpb246ICJtaWRkbGUiCiAgICBzdHlsZToKICAgICAgb3BhY2l0eTogMC42CiAgICAgIGZvbnRTaXplOiAxMgogIGNvbHVtblN0eWxlOgogICAgZmlsbE9wYWNpdHk6IDAuNQogICAgbGluZVdpZHRoOiAxCiAgICBzdHJva2VPcGFjaXR5OiAwLjcKICAgIHNoYWRvd0NvbG9yOiAiZ3JleSIKICAgIHNoYWRvd0JsdXI6IDEwCiAgICBzaGFkb3dPZmZzZXRYOiA1CiAgICBzaGFkb3dPZmZzZXRZOiA1CiAgeEF4aXM6CiAgICBsYWJlbDoKICAgICAgYXV0b0hpZGU6IGZhbHNlCiAgICAgIGF1dG9Sb3RhdGU6IHRydWUKICBtZXRhOgogICAgY291bnQ6CiAgICAgIGFsaWFzOiAiQ291bnQiCmBgYA=="; -})(ChartTemplateType || (ChartTemplateType = {})); -var ChartThumbnailMapping = { - [ChartTemplateType.Bar]: "https://user-images.githubusercontent.com/150803/123117024-fa43b180-d473-11eb-84eb-8e1806ce5dec.png", - [ChartTemplateType.Pie]: "https://user-images.githubusercontent.com/150803/119069882-87c95700-ba19-11eb-8cef-02d1e021d1a2.png", - [ChartTemplateType.WordCloud]: "https://user-images.githubusercontent.com/150803/119069991-bba47c80-ba19-11eb-873f-847563daea39.png", - [ChartTemplateType.WordCount]: "https://user-images.githubusercontent.com/150803/136478725-be28a56b-0075-4f0a-a719-f61b30e83b6a.png", - [ChartTemplateType.Treemap]: "https://user-images.githubusercontent.com/150803/119070047-decf2c00-ba19-11eb-9d59-21c051da593c.png", - [ChartTemplateType.DualAxes]: "https://user-images.githubusercontent.com/150803/119969638-618b5480-bfe1-11eb-8a36-0a5d60408b00.png", - [ChartTemplateType.Mix]: "https://user-images.githubusercontent.com/150803/120421841-a1638a80-c399-11eb-9464-d773931fdd6f.png", - [ChartTemplateType.OrganizationTreeGraph]: "https://user-images.githubusercontent.com/150803/123117254-2b23e680-d474-11eb-845f-0d663a458fa7.png", - [ChartTemplateType.Radar]: "https://user-images.githubusercontent.com/150803/123117394-4a227880-d474-11eb-8a11-23f3cd482251.png", - [ChartTemplateType.TinyLine]: "https://user-images.githubusercontent.com/150803/123117476-5a3a5800-d474-11eb-9db8-4b3785bb010c.png", - [ChartTemplateType["Dataviewjs Example (Column)"]]: "https://user-images.githubusercontent.com/150803/140684190-fa6a08ea-3394-44fe-ae92-265810f6b9a9.png" -}; - -// src/components/Modal.ts -var import_buffer = __toModule(require("buffer")); -var ChartTemplateSuggestModal = class extends import_obsidian4.FuzzySuggestModal { - constructor(app, editor) { - super(app); - this.editor = editor; - } - getItems() { - return Object.entries(ChartTemplateType); - } - getItemText(item) { - return item[0]; - } - renderSuggestion(item, el) { - const div4 = createDiv({ cls: "chartsview-thumbnail" }); - const type2 = ChartTemplateType[item.item[0]]; - const img = createEl("img", { - attr: { - src: ChartThumbnailMapping[type2] - } - }); - div4.appendChild(img); - el.appendChild(div4); - el.addClass("chartsview-thumbnail-container"); - super.renderSuggestion(item, el); - } - onChooseItem(item) { - insertEditor(this.editor, import_buffer.Buffer.from(item[1], "base64").toString("utf8")); - } -}; - -// src/main.tsx -var CSV_FILE_EXTENSION = "csv"; -var VIEW_TYPE_CSV = "csv"; -var ChartsViewPlugin = class extends import_obsidian5.Plugin { - ChartsViewProcessor(source, el, ctx3) { - return __async(this, null, function* () { - compat_module_default.unmountComponentAtNode(el); - try { - const chartProps = yield parseConfig(source, this, ctx3.sourcePath); - const cfg = chartProps.config; - const isBackgroundColorCustomed = cfg.theme && (cfg.theme.background || cfg.theme.styleSheet && cfg.theme.styleSheet.backgroundColor); - const isPaddingCustomed = cfg.padding; - cfg.theme = cfg.theme || esm_exports3.getTheme(this.settings.theme); - cfg.backgroundColor = isBackgroundColorCustomed ? void 0 : this.settings.backgroundColor; - cfg.padding = isPaddingCustomed ? void 0 : [ - this.settings.paddingTop, - this.settings.paddingRight, - this.settings.paddingBottom, - this.settings.paddingLeft - ]; - compat_module_default.render(/* @__PURE__ */ compat_module_default.createElement(Chart2, __spreadProps(__spreadValues({}, chartProps), { - showExportBtn: this.settings.showExportBtn - })), el); - } catch (e4) { - compat_module_default.render(/* @__PURE__ */ compat_module_default.createElement("div", { - style: { color: "var(--text-title-h1)" } - }, e4.toString()), el); - } - }); - } - onload() { - return __async(this, null, function* () { - try { - yield this.loadSettings(); - this.addSettingTab(new ChartsViewSettingTab(this.app, this)); - this.registerMarkdownCodeBlockProcessor("chartsview", this.ChartsViewProcessor.bind(this)); - this.addCommand({ - id: "insert-chartsview-template", - name: "Insert Template", - editorCallback: (editor) => { - new ChartTemplateSuggestModal(this.app, editor).open(); - } - }); - if (import_obsidian5.Platform.isDesktopApp) { - this.addCommand({ - id: `import-chartsview-data-csv`, - name: `Import data from external CSV file`, - editorCallback: (editor) => __async(this, null, function* () { - const file = yield r({ accept: ".csv", strict: true }); - const content = yield file.text(); - const records = parseCsv(content); - insertEditor(editor, js_yaml_default.dump(records, { quotingType: '"', noRefs: true }).replace(/\n/g, "\n" + " ".repeat(editor.getCursor().ch))); - }) - }); - } - } catch (error) { - console.log(`Load error. ${error}`); - } - try { - this.registerExtensions([CSV_FILE_EXTENSION], VIEW_TYPE_CSV); - } catch (error) { - console.log(`Existing file extension ${CSV_FILE_EXTENSION}`); - } - console.log("Loaded Charts View plugin"); - }); - } - onunload() { - console.log("Unloading Charts View plugin"); - } - loadSettings() { - return __async(this, null, function* () { - this.settings = Object.assign(DEFAULT_SETTINGS, yield this.loadData()); - }); - } - saveSettings() { - return __async(this, null, function* () { - yield this.saveData(this.settings); - }); - } -}; +those`},zX=class extends Pc.PluginSettingTab{constructor(e,t){super(e,t);this.plugin=t}display(){let{containerEl:e}=this;if(e.empty(),e.createEl("h2",{text:"Charts View Settings"}),new Pc.Setting(e).setName("Theme").setDesc("Choose default color scheme.").addDropdown(t=>t.addOption("default","default").addOption("dark","dark").addOption("theme1","Theme #1").addOption("theme2","Theme #2").setValue(this.plugin.settings.theme).onChange(n=>Da(this,null,function*(){this.plugin.settings.theme=n,yield this.plugin.saveSettings()}))),new Pc.Setting(e).setName("Background Color").setDesc("Change the background color of chart. e.g., #FFFFFF").addText(t=>t.setPlaceholder("transparent").setValue(this.plugin.settings.backgroundColor).onChange(n=>Da(this,null,function*(){this.plugin.settings.backgroundColor=n,yield this.plugin.saveSettings()}))),new Pc.Setting(e).setName("Chart Padding").setDesc("Change the padding of chart. (Top, Right, Bottom, Left)").addText(t=>{t.inputEl.size=5,t.setPlaceholder("30").setValue(String(this.plugin.settings.paddingTop)).onChange(n=>Da(this,null,function*(){this.plugin.settings.paddingTop=Number(n),yield this.plugin.saveSettings()}))}).addText(t=>{t.inputEl.size=5,t.setPlaceholder("30").setValue(String(this.plugin.settings.paddingRight)).onChange(n=>Da(this,null,function*(){this.plugin.settings.paddingRight=Number(n),yield this.plugin.saveSettings()}))}).addText(t=>{t.inputEl.size=5,t.setPlaceholder("30").setValue(String(this.plugin.settings.paddingBottom)).onChange(n=>Da(this,null,function*(){this.plugin.settings.paddingBottom=Number(n),yield this.plugin.saveSettings()}))}).addText(t=>{t.inputEl.size=5,t.setPlaceholder("30").setValue(String(this.plugin.settings.paddingLeft)).onChange(n=>Da(this,null,function*(){this.plugin.settings.paddingLeft=Number(n),yield this.plugin.saveSettings()}))}),new Pc.Setting(e).setName("Data Folder").setDesc("Choose default folder for loading chart datas.").addDropdown(t=>t.addOptions(RAt(this.app)).setValue(this.plugin.settings.dataPath).onChange(n=>Da(this,null,function*(){this.plugin.settings.dataPath=n,yield this.plugin.saveSettings()}))),new Pc.Setting(e).setName("Show Export Button").addToggle(t=>t.setValue(this.plugin.settings.showExportBtn).onChange(n=>Da(this,null,function*(){this.plugin.settings.showExportBtn=n,yield this.plugin.saveSettings()}))),new Pc.Setting(e).setName("Word Filter").setDesc("For word count, any words in the list will be ignored.").addTextArea(t=>{t.inputEl.rows=6,t.setValue(this.plugin.settings.wordCountFilter).onChange(n=>Da(this,null,function*(){this.plugin.settings.wordCountFilter=n,yield this.plugin.saveSettings()}))}),Pc.Platform.isDesktopApp){let t=e.createDiv({cls:"chartsview-donation"});t.createEl("p",{text:"Make a donation to support Charts View plugin development."});let i=t.createEl("a",{href:"https://paypal.me/caronchenhz",cls:"paypal"}).createEl("img");i.src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjQsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iMTI0cHgiIGhlaWdodD0iMzNweCIgdmlld0JveD0iMCAwIDEyNCAzMyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTI0IDMzIiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGw9IiMyNTNCODAiIGQ9Ik00Ni4yMTEsNi43NDloLTYuODM5Yy0wLjQ2OCwwLTAuODY2LDAuMzQtMC45MzksMC44MDJsLTIuNzY2LDE3LjUzN2MtMC4wNTUsMC4zNDYsMC4yMTMsMC42NTgsMC41NjQsMC42NTgNCgloMy4yNjVjMC40NjgsMCwwLjg2Ni0wLjM0LDAuOTM5LTAuODAzbDAuNzQ2LTQuNzNjMC4wNzItMC40NjMsMC40NzEtMC44MDMsMC45MzgtMC44MDNoMi4xNjVjNC41MDUsMCw3LjEwNS0yLjE4LDcuNzg0LTYuNQ0KCWMwLjMwNi0xLjg5LDAuMDEzLTMuMzc1LTAuODcyLTQuNDE1QzUwLjIyNCw3LjM1Myw0OC41LDYuNzQ5LDQ2LjIxMSw2Ljc0OXogTTQ3LDEzLjE1NGMtMC4zNzQsMi40NTQtMi4yNDksMi40NTQtNC4wNjIsMi40NTQNCgloLTEuMDMybDAuNzI0LTQuNTgzYzAuMDQzLTAuMjc3LDAuMjgzLTAuNDgxLDAuNTYzLTAuNDgxaDAuNDczYzEuMjM1LDAsMi40LDAsMy4wMDIsMC43MDRDNDcuMDI3LDExLjY2OCw0Ny4xMzcsMTIuMjkyLDQ3LDEzLjE1NHoiDQoJLz4NCjxwYXRoIGZpbGw9IiMyNTNCODAiIGQ9Ik02Ni42NTQsMTMuMDc1aC0zLjI3NWMtMC4yNzksMC0wLjUyLDAuMjA0LTAuNTYzLDAuNDgxbC0wLjE0NSwwLjkxNmwtMC4yMjktMC4zMzINCgljLTAuNzA5LTEuMDI5LTIuMjktMS4zNzMtMy44NjgtMS4zNzNjLTMuNjE5LDAtNi43MSwyLjc0MS03LjMxMiw2LjU4NmMtMC4zMTMsMS45MTgsMC4xMzIsMy43NTIsMS4yMiw1LjAzMQ0KCWMwLjk5OCwxLjE3NiwyLjQyNiwxLjY2Niw0LjEyNSwxLjY2NmMyLjkxNiwwLDQuNTMzLTEuODc1LDQuNTMzLTEuODc1bC0wLjE0NiwwLjkxYy0wLjA1NSwwLjM0OCwwLjIxMywwLjY2LDAuNTYyLDAuNjZoMi45NQ0KCWMwLjQ2OSwwLDAuODY1LTAuMzQsMC45MzktMC44MDNsMS43Ny0xMS4yMDlDNjcuMjcxLDEzLjM4OCw2Ny4wMDQsMTMuMDc1LDY2LjY1NCwxMy4wNzV6IE02Mi4wODksMTkuNDQ5DQoJYy0wLjMxNiwxLjg3MS0xLjgwMSwzLjEyNy0zLjY5NSwzLjEyN2MtMC45NTEsMC0xLjcxMS0wLjMwNS0yLjE5OS0wLjg4M2MtMC40ODQtMC41NzQtMC42NjgtMS4zOTEtMC41MTQtMi4zMDENCgljMC4yOTUtMS44NTUsMS44MDUtMy4xNTIsMy42Ny0zLjE1MmMwLjkzLDAsMS42ODYsMC4zMDksMi4xODQsMC44OTJDNjIuMDM0LDE3LjcyMSw2Mi4yMzIsMTguNTQzLDYyLjA4OSwxOS40NDl6Ii8+DQo8cGF0aCBmaWxsPSIjMjUzQjgwIiBkPSJNODQuMDk2LDEzLjA3NWgtMy4yOTFjLTAuMzE0LDAtMC42MDksMC4xNTYtMC43ODcsMC40MTdsLTQuNTM5LDYuNjg2bC0xLjkyNC02LjQyNQ0KCWMtMC4xMjEtMC40MDItMC40OTItMC42NzgtMC45MTItMC42NzhoLTMuMjM0Yy0wLjM5MywwLTAuNjY2LDAuMzg0LTAuNTQxLDAuNzU0bDMuNjI1LDEwLjYzOGwtMy40MDgsNC44MTENCgljLTAuMjY4LDAuMzc5LDAuMDAyLDAuOSwwLjQ2NSwwLjloMy4yODdjMC4zMTIsMCwwLjYwNC0wLjE1MiwwLjc4MS0wLjQwOEw4NC41NjQsMTMuOTdDODQuODI2LDEzLjU5Miw4NC41NTcsMTMuMDc1LDg0LjA5NiwxMy4wNzV6DQoJIi8+DQo8cGF0aCBmaWxsPSIjMTc5QkQ3IiBkPSJNOTQuOTkyLDYuNzQ5aC02Ljg0Yy0wLjQ2NywwLTAuODY1LDAuMzQtMC45MzgsMC44MDJsLTIuNzY2LDE3LjUzN2MtMC4wNTUsMC4zNDYsMC4yMTMsMC42NTgsMC41NjIsMC42NTgNCgloMy41MWMwLjMyNiwwLDAuNjA1LTAuMjM4LDAuNjU2LTAuNTYybDAuNzg1LTQuOTcxYzAuMDcyLTAuNDYzLDAuNDcxLTAuODAzLDAuOTM4LTAuODAzaDIuMTY0YzQuNTA2LDAsNy4xMDUtMi4xOCw3Ljc4NS02LjUNCgljMC4zMDctMS44OSwwLjAxMi0zLjM3NS0wLjg3My00LjQxNUM5OS4wMDQsNy4zNTMsOTcuMjgxLDYuNzQ5LDk0Ljk5Miw2Ljc0OXogTTk1Ljc4MSwxMy4xNTRjLTAuMzczLDIuNDU0LTIuMjQ4LDIuNDU0LTQuMDYyLDIuNDU0DQoJaC0xLjAzMWwwLjcyNS00LjU4M2MwLjA0My0wLjI3NywwLjI4MS0wLjQ4MSwwLjU2Mi0wLjQ4MWgwLjQ3M2MxLjIzNCwwLDIuNCwwLDMuMDAyLDAuNzA0DQoJQzk1LjgwOSwxMS42NjgsOTUuOTE4LDEyLjI5Miw5NS43ODEsMTMuMTU0eiIvPg0KPHBhdGggZmlsbD0iIzE3OUJENyIgZD0iTTExNS40MzQsMTMuMDc1aC0zLjI3M2MtMC4yODEsMC0wLjUyLDAuMjA0LTAuNTYyLDAuNDgxbC0wLjE0NSwwLjkxNmwtMC4yMy0wLjMzMg0KCWMtMC43MDktMS4wMjktMi4yODktMS4zNzMtMy44NjctMS4zNzNjLTMuNjE5LDAtNi43MDksMi43NDEtNy4zMTEsNi41ODZjLTAuMzEyLDEuOTE4LDAuMTMxLDMuNzUyLDEuMjE5LDUuMDMxDQoJYzEsMS4xNzYsMi40MjYsMS42NjYsNC4xMjUsMS42NjZjMi45MTYsMCw0LjUzMy0xLjg3NSw0LjUzMy0xLjg3NWwtMC4xNDYsMC45MWMtMC4wNTUsMC4zNDgsMC4yMTMsMC42NiwwLjU2NCwwLjY2aDIuOTQ5DQoJYzAuNDY3LDAsMC44NjUtMC4zNCwwLjkzOC0wLjgwM2wxLjc3MS0xMS4yMDlDMTE2LjA1MywxMy4zODgsMTE1Ljc4NSwxMy4wNzUsMTE1LjQzNCwxMy4wNzV6IE0xMTAuODY5LDE5LjQ0OQ0KCWMtMC4zMTQsMS44NzEtMS44MDEsMy4xMjctMy42OTUsMy4xMjdjLTAuOTQ5LDAtMS43MTEtMC4zMDUtMi4xOTktMC44ODNjLTAuNDg0LTAuNTc0LTAuNjY2LTEuMzkxLTAuNTE0LTIuMzAxDQoJYzAuMjk3LTEuODU1LDEuODA1LTMuMTUyLDMuNjctMy4xNTJjMC45MywwLDEuNjg2LDAuMzA5LDIuMTg0LDAuODkyQzExMC44MTYsMTcuNzIxLDExMS4wMTQsMTguNTQzLDExMC44NjksMTkuNDQ5eiIvPg0KPHBhdGggZmlsbD0iIzE3OUJENyIgZD0iTTExOS4yOTUsNy4yM2wtMi44MDcsMTcuODU4Yy0wLjA1NSwwLjM0NiwwLjIxMywwLjY1OCwwLjU2MiwwLjY1OGgyLjgyMmMwLjQ2OSwwLDAuODY3LTAuMzQsMC45MzktMC44MDMNCglsMi43NjgtMTcuNTM2YzAuMDU1LTAuMzQ2LTAuMjEzLTAuNjU5LTAuNTYyLTAuNjU5aC0zLjE2QzExOS41NzgsNi43NDksMTE5LjMzOCw2Ljk1MywxMTkuMjk1LDcuMjN6Ii8+DQo8cGF0aCBmaWxsPSIjMjUzQjgwIiBkPSJNNy4yNjYsMjkuMTU0bDAuNTIzLTMuMzIybC0xLjE2NS0wLjAyN0gxLjA2MUw0LjkyNywxLjI5MkM0LjkzOSwxLjIxOCw0Ljk3OCwxLjE0OSw1LjAzNSwxLjENCgljMC4wNTctMC4wNDksMC4xMy0wLjA3NiwwLjIwNi0wLjA3Nmg5LjM4YzMuMTE0LDAsNS4yNjMsMC42NDgsNi4zODUsMS45MjdjMC41MjYsMC42LDAuODYxLDEuMjI3LDEuMDIzLDEuOTE3DQoJYzAuMTcsMC43MjQsMC4xNzMsMS41ODksMC4wMDcsMi42NDRsLTAuMDEyLDAuMDc3djAuNjc2bDAuNTI2LDAuMjk4YzAuNDQzLDAuMjM1LDAuNzk1LDAuNTA0LDEuMDY1LDAuODEyDQoJYzAuNDUsMC41MTMsMC43NDEsMS4xNjUsMC44NjQsMS45MzhjMC4xMjcsMC43OTUsMC4wODUsMS43NDEtMC4xMjMsMi44MTJjLTAuMjQsMS4yMzItMC42MjgsMi4zMDUtMS4xNTIsMy4xODMNCgljLTAuNDgyLDAuODA5LTEuMDk2LDEuNDgtMS44MjUsMmMtMC42OTYsMC40OTQtMS41MjMsMC44NjktMi40NTgsMS4xMDljLTAuOTA2LDAuMjM2LTEuOTM5LDAuMzU1LTMuMDcyLDAuMzU1aC0wLjczDQoJYy0wLjUyMiwwLTEuMDI5LDAuMTg4LTEuNDI3LDAuNTI1Yy0wLjM5OSwwLjM0NC0wLjY2MywwLjgxNC0wLjc0NCwxLjMyOGwtMC4wNTUsMC4yOTlsLTAuOTI0LDUuODU1bC0wLjA0MiwwLjIxNQ0KCWMtMC4wMTEsMC4wNjgtMC4wMywwLjEwMi0wLjA1OCwwLjEyNWMtMC4wMjUsMC4wMjEtMC4wNjEsMC4wMzUtMC4wOTYsMC4wMzVINy4yNjZ6Ii8+DQo8cGF0aCBmaWxsPSIjMTc5QkQ3IiBkPSJNMjMuMDQ4LDcuNjY3TDIzLjA0OCw3LjY2N0wyMy4wNDgsNy42NjdjLTAuMDI4LDAuMTc5LTAuMDYsMC4zNjItMC4wOTYsMC41NQ0KCWMtMS4yMzcsNi4zNTEtNS40NjksOC41NDUtMTAuODc0LDguNTQ1SDkuMzI2Yy0wLjY2MSwwLTEuMjE4LDAuNDgtMS4zMjEsMS4xMzJsMCwwbDAsMEw2LjU5NiwyNi44M2wtMC4zOTksMi41MzMNCgljLTAuMDY3LDAuNDI4LDAuMjYzLDAuODE0LDAuNjk1LDAuODE0aDQuODgxYzAuNTc4LDAsMS4wNjktMC40MiwxLjE2LTAuOTlsMC4wNDgtMC4yNDhsMC45MTktNS44MzJsMC4wNTktMC4zMg0KCWMwLjA5LTAuNTcyLDAuNTgyLTAuOTkyLDEuMTYtMC45OTJoMC43M2M0LjcyOSwwLDguNDMxLTEuOTIsOS41MTMtNy40NzZjMC40NTItMi4zMjEsMC4yMTgtNC4yNTktMC45NzgtNS42MjINCglDMjQuMDIyLDguMjg2LDIzLjU3Myw3Ljk0NSwyMy4wNDgsNy42Njd6Ii8+DQo8cGF0aCBmaWxsPSIjMjIyRDY1IiBkPSJNMjEuNzU0LDcuMTUxYy0wLjE4OS0wLjA1NS0wLjM4NC0wLjEwNS0wLjU4NC0wLjE1Yy0wLjIwMS0wLjA0NC0wLjQwNy0wLjA4My0wLjYxOS0wLjExNw0KCWMtMC43NDItMC4xMi0xLjU1NS0wLjE3Ny0yLjQyNi0wLjE3N2gtNy4zNTJjLTAuMTgxLDAtMC4zNTMsMC4wNDEtMC41MDcsMC4xMTVDOS45MjcsNi45ODUsOS42NzUsNy4zMDYsOS42MTQsNy42OTlMOC4wNSwxNy42MDUNCglsLTAuMDQ1LDAuMjg5YzAuMTAzLTAuNjUyLDAuNjYtMS4xMzIsMS4zMjEtMS4xMzJoMi43NTJjNS40MDUsMCw5LjYzNy0yLjE5NSwxMC44NzQtOC41NDVjMC4wMzctMC4xODgsMC4wNjgtMC4zNzEsMC4wOTYtMC41NQ0KCWMtMC4zMTMtMC4xNjYtMC42NTItMC4zMDgtMS4wMTctMC40MjlDMjEuOTQxLDcuMjA4LDIxLjg0OCw3LjE3OSwyMS43NTQsNy4xNTF6Ii8+DQo8cGF0aCBmaWxsPSIjMjUzQjgwIiBkPSJNOS42MTQsNy42OTljMC4wNjEtMC4zOTMsMC4zMTMtMC43MTQsMC42NTItMC44NzZjMC4xNTUtMC4wNzQsMC4zMjYtMC4xMTUsMC41MDctMC4xMTVoNy4zNTINCgljMC44NzEsMCwxLjY4NCwwLjA1NywyLjQyNiwwLjE3N2MwLjIxMiwwLjAzNCwwLjQxOCwwLjA3MywwLjYxOSwwLjExN2MwLjIsMC4wNDUsMC4zOTUsMC4wOTUsMC41ODQsMC4xNQ0KCWMwLjA5NCwwLjAyOCwwLjE4NywwLjA1NywwLjI3OCwwLjA4NmMwLjM2NSwwLjEyMSwwLjcwNCwwLjI2NCwxLjAxNywwLjQyOWMwLjM2OC0yLjM0Ny0wLjAwMy0zLjk0NS0xLjI3Mi01LjM5Mg0KCUMyMC4zNzgsMC42ODIsMTcuODUzLDAsMTQuNjIyLDBoLTkuMzhjLTAuNjYsMC0xLjIyMywwLjQ4LTEuMzI1LDEuMTMzTDAuMDEsMjUuODk4Yy0wLjA3NywwLjQ5LDAuMzAxLDAuOTMyLDAuNzk1LDAuOTMyaDUuNzkxDQoJbDEuNDU0LTkuMjI1TDkuNjE0LDcuNjk5eiIvPg0KPC9zdmc+DQo=",i.alt="PayPal"}}};var HAt=U(require("obsidian"));var Rs;(function(f){f.Bar="YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBCYXIKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGE6CiAgLSBhY3Rpb246ICJCcm93c2UgdGhlIHdlYnNpdGUiCiAgICBwdjogNTAwMDAKICAtIGFjdGlvbjogIkFkZCB0byBjYXJ0IgogICAgcHY6IDM1MDAwCiAgLSBhY3Rpb246ICJHZW5lcmF0ZSBvcmRlcnMiCiAgICBwdjogMjUwMDAKICAtIGFjdGlvbjogIlBheSBvcmRlciIKICAgIHB2OiAxNTAwMAogIC0gYWN0aW9uOiAiU2VhbCB0aGUgZGVhbCIKICAgIHB2OiA4NTAwCgojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IG9wdGlvbnMgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwpvcHRpb25zOgogIHhGaWVsZDogInB2IgogIHlGaWVsZDogImFjdGlvbiIKICBjb252ZXJzaW9uVGFnOiB7fQpgYGA=",f.Pie="YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBQaWUKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGE6CiAgLSB0eXBlOiAiV2FnZSBpbmNvbWUgcGVyIGNhcGl0YSAowqUpIgogICAgdmFsdWU6IDE3OTE3CiAgLSB0eXBlOiAiT3BlcmF0aW5nIG5ldCBpbmNvbWUgcGVyIGNhcGl0YSAowqUpIgogICAgdmFsdWU6IDUzMDcKICAtIHR5cGU6ICJQcm9wZXJ0eSBQZXIgQ2FwaXRhIE5ldCBJbmNvbWUgKMKlKSIKICAgIHZhbHVlOiAyNzkxCiAgLSB0eXBlOiAiVHJhbnNmZXIgb2YgbmV0IGluY29tZSBwZXIgY2FwaXRhICjCpSkiCiAgICB2YWx1ZTogNjE3MwoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBvcHRpb25zIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKb3B0aW9uczoKICBhbmdsZUZpZWxkOiAidmFsdWUiCiAgY29sb3JGaWVsZDogInR5cGUiCiAgcmFkaXVzOiAwLjUKICBsYWJlbDoKICAgIHR5cGU6ICJzcGlkZXIiCiAgICBjb250ZW50OiAie3BlcmNlbnRhZ2V9XG57bmFtZX0iCiAgbGVnZW5kOgogICAgbGF5b3V0OiAiaG9yaXpvbnRhbCIKICAgIHBvc2l0aW9uOiAiYm90dG9tIgpgYGA=",f.WordCloud="YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBXb3JkQ2xvdWQKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGE6CiAgLSB4OiAiQ2hpbmEiCiAgICB2YWx1ZTogMjM4MzIyMDAwMAogICAgY2F0ZWdvcnk6ICJhc2lhIgogIC0geDogIkluZG9uZXNpYSIKICAgIHZhbHVlOiAyNjM1MTAwMDAKICAgIGNhdGVnb3J5OiAiYXNpYSIKICAtIHg6ICJQYWtpc3RhbiIKICAgIHZhbHVlOiAzOTY0NTkwMDAKICAgIGNhdGVnb3J5OiAiYXNpYSIKICAtIHg6ICJSdXNzaWEiCiAgICB2YWx1ZTogNTQ2ODA0MzcyCiAgICBjYXRlZ29yeTogImV1cm9wZSIKICAtIHg6ICJKYXBhbiIKICAgIHZhbHVlOiAxMjY3OTAwMDAKICAgIGNhdGVnb3J5OiAiYXNpYSIKICAtIHg6ICJWaWV0bmFtIgogICAgdmFsdWU6IDkyNzAwMDAwCiAgICBjYXRlZ29yeTogImFzaWEiCiAgLSB4OiAiR2VybWFueSIKICAgIHZhbHVlOiA4MjgwMDAwMAogICAgY2F0ZWdvcnk6ICJldXJvcGUiCiAgLSB4OiAiSXJhbiIKICAgIHZhbHVlOiA4MDEzNTQwMAogICAgY2F0ZWdvcnk6ICJhc2lhIgogIC0geDogIlRoYWlsYW5kIgogICAgdmFsdWU6IDY4Mjk4MDAwCiAgICBjYXRlZ29yeTogImFzaWEiCiAgLSB4OiAiRnJhbmNlIgogICAgdmFsdWU6IDY3MDEzMDAwCiAgICBjYXRlZ29yeTogImV1cm9wZSIKICAtIHg6ICJJdGFseSIKICAgIHZhbHVlOiA2MDU5OTkzNgogICAgY2F0ZWdvcnk6ICJldXJvcGUiCiAgLSB4OiAiU291dGggS29yZWEiCiAgICB2YWx1ZTogNTE0NDYyMDEKICAgIGNhdGVnb3J5OiAiYXNpYSIKICAtIHg6ICJLZW55YSIKICAgIHZhbHVlOiA0ODQ2NzAwMAogICAgY2F0ZWdvcnk6ICJhZnJpY2EiCiAgLSB4OiAiU3BhaW4iCiAgICB2YWx1ZTogNDY4MTIwMDAKICAgIGNhdGVnb3J5OiAiZXVyb3BlIgogIC0geDogIlN1ZGFuIgogICAgdmFsdWU6IDQyMTc2MDAwCiAgICBjYXRlZ29yeTogImFmcmljYSIKICAtIHg6ICJJcmFxIgogICAgdmFsdWU6IDQ3ODgzNTQzCiAgICBjYXRlZ29yeTogImFzaWEiCiAgLSB4OiAiTmVwYWwiCiAgICB2YWx1ZTogMjg4MjU3MDkKICAgIGNhdGVnb3J5OiAiYXNpYSIKICAtIHg6ICJOb3J0aCBLb3JlYSIKICAgIHZhbHVlOiAyNDIxMzUxMAogICAgY2F0ZWdvcnk6ICJhc2lhIgogIC0geDogIkNoaWxlIgogICAgdmFsdWU6IDI4MTkxOTAwCiAgICBjYXRlZ29yeTogImFtZXJpY2EiCgojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IG9wdGlvbnMgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwpvcHRpb25zOgogIHdvcmRGaWVsZDogIngiCiAgd2VpZ2h0RmllbGQ6ICJ2YWx1ZSIKICBjb2xvcjogIiMxMjJjNmEiCiAgd29yZFN0eWxlOgogICAgZm9udEZhbWlseTogIlZlcmRhbmEiCiAgICBmb250U2l6ZTogWzI0LCA4MF0KICBpbnRlcmFjdGlvbnM6CiAgICB0eXBlOiAiZWxlbWVudC1hY3RpdmUiCiAgc3R5bGU6CiAgICBiYWNrZ3JvdW5kQ29sb3I6ICJ3aGl0ZSIKICBzdGF0ZToKICAgIGFjdGl2ZToKICAgICAgc3R5bGU6CiAgICAgICAgbGluZVdpZHRoOiAzCmBgYA==",f.WordCount="YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBXb3JkQ2xvdWQKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGE6ICJ3b3JkY291bnQ6bm90ZS1uYW1lLWhlcmUtd2l0aG91dC1mb2xkLXBhdGgiCgojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IG9wdGlvbnMgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwpvcHRpb25zOgogIHdvcmRGaWVsZDogIndvcmQiCiAgd2VpZ2h0RmllbGQ6ICJjb3VudCIKICBjb2xvckZpZWxkOiAiY291bnQiCiAgd29yZFN0eWxlOgogICAgcm90YXRpb246IDMwCmBgYA==",f.Treemap="YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBUcmVlbWFwCgojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IGRhdGEgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwpkYXRhOgogIG5hbWU6ICdyb290JwogIGNoaWxkcmVuOgogICAgLSBuYW1lOiAnRm9sZGVyIDEnCiAgICAgIHZhbHVlOiA1NjAKICAgIC0gbmFtZTogJ0ZvbGRlciAyJwogICAgICB2YWx1ZTogNTAwCiAgICAtIG5hbWU6ICdGb2xkZXIgMycKICAgICAgdmFsdWU6IDE1MAogICAgLSBuYW1lOiAnRm9sZGVyIDQnCiAgICAgIHZhbHVlOiAxNDAKICAgIC0gbmFtZTogJ0ZvbGRlciA1JwogICAgICB2YWx1ZTogMTE1CiAgICAtIG5hbWU6ICdGb2xkZXIgNicKICAgICAgdmFsdWU6IDk1CiAgICAtIG5hbWU6ICdGb2xkZXIgNycKICAgICAgdmFsdWU6IDkwCiAgICAtIG5hbWU6ICdGb2xkZXIgOCcKICAgICAgdmFsdWU6IDc1CiAgICAtIG5hbWU6ICdGb2xkZXIgOScKICAgICAgdmFsdWU6IDk4CiAgICAtIG5hbWU6ICdGb2xkZXIgMTAnCiAgICAgIHZhbHVlOiA2MAogICAgLSBuYW1lOiAnRm9sZGVyIDExJwogICAgICB2YWx1ZTogNDUKICAgIC0gbmFtZTogJ0ZvbGRlciAxMicKICAgICAgdmFsdWU6IDQwCiAgICAtIG5hbWU6ICdGb2xkZXIgMTMnCiAgICAgIHZhbHVlOiA0MAogICAgLSBuYW1lOiAnRm9sZGVyIDE0JwogICAgICB2YWx1ZTogMzUKICAgIC0gbmFtZTogJ0ZvbGRlciAxNScKICAgICAgdmFsdWU6IDQwCiAgICAtIG5hbWU6ICdGb2xkZXIgMTYnCiAgICAgIHZhbHVlOiA0MAogICAgLSBuYW1lOiAnRm9sZGVyIDE3JwogICAgICB2YWx1ZTogNDAKICAgIC0gbmFtZTogJ0ZvbGRlciAxOCcKICAgICAgdmFsdWU6IDMwCiAgICAtIG5hbWU6ICdGb2xkZXIgMTknCiAgICAgIHZhbHVlOiAyOAogICAgLSBuYW1lOiAnRm9sZGVyIDIwJwogICAgICB2YWx1ZTogMTYKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgb3B0aW9ucyAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCm9wdGlvbnM6CiAgY29sb3JGaWVsZDogIm5hbWUiCmBgYAo=",f.DualAxes="YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBEdWFsQXhlcwoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBkYXRhICAgIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKZGF0YToKICAtCiAgICAtIHRpbWU6ICIyMDE5LTAzIgogICAgICB2YWx1ZTogMzUwCiAgICAgIGNvdW50OiA4MDAKICAgIC0gdGltZTogIjIwMTktMDQiCiAgICAgIHZhbHVlOiA5MDAKICAgICAgY291bnQ6IDYwMAogICAgLSB0aW1lOiAiMjAxOS0wNSIKICAgICAgdmFsdWU6IDMwMAogICAgICBjb3VudDogNDAwCiAgICAtIHRpbWU6ICIyMDE5LTA2IgogICAgICB2YWx1ZTogNDUwCiAgICAgIGNvdW50OiAzODAKICAgIC0gdGltZTogIjIwMTktMDciCiAgICAgIHZhbHVlOiA0NzAKICAgICAgY291bnQ6IDIyCiAgLQogICAgLSB0aW1lOiAiMjAxOS0wMyIKICAgICAgdmFsdWU6IDM1MAogICAgICBjb3VudDogODAwCiAgICAtIHRpbWU6ICIyMDE5LTA0IgogICAgICB2YWx1ZTogOTAwCiAgICAgIGNvdW50OiA2MDAKICAgIC0gdGltZTogIjIwMTktMDUiCiAgICAgIHZhbHVlOiAzMDAKICAgICAgY291bnQ6IDQwMAogICAgLSB0aW1lOiAiMjAxOS0wNiIKICAgICAgdmFsdWU6IDQ1MAogICAgICBjb3VudDogMzgwCiAgICAtIHRpbWU6ICIyMDE5LTA3IgogICAgICB2YWx1ZTogNDcwCiAgICAgIGNvdW50OiAyMgoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBvcHRpb25zIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKb3B0aW9uczoKICB4RmllbGQ6ICd0aW1lJwogIHlGaWVsZDogWyd2YWx1ZScsICdjb3VudCddCiAgeUF4aXM6CiAgICB2YWx1ZToKICAgICAgbWluOiAwCiAgICAgIGxhYmVsOgogICAgICAgIGZvcm1hdHRlcjoKICAgICAgICAgIGZ1bmN0aW9uIGZvcm1hdHRlcih2YWwpIHsKICAgICAgICAgICAgcmV0dXJuICcnLmNvbmNhdCh2YWwsICfkuKonKTsKICAgICAgICAgIH0KICBnZW9tZXRyeU9wdGlvbnM6CiAgICAtIGdlb21ldHJ5OiAnY29sdW1uJwogICAgLSBnZW9tZXRyeTogJ2xpbmUnCiAgICAgIGxpbmVTdHlsZToKICAgICAgICBsaW5lV2lkdGg6IDIKYGBg",f.Mix="YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBNaXgKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGEuYXJlYToKICAtIHRpbWU6IDEyNDY0MDY0MDAwMDAKICAgIHRlbXBlcmF0dXJlOiBbMTQuMywgMjcuN10KICAtIHRpbWU6IDEyNDY0OTI4MDAwMDAKICAgIHRlbXBlcmF0dXJlOiBbMTQuNSwgMjcuOF0KICAtIHRpbWU6IDEyNDY1NzkyMDAwMDAKICAgIHRlbXBlcmF0dXJlOiBbMTUuNSwgMjkuNl0KICAtIHRpbWU6IDEyNDY2NjU2MDAwMDAKICAgIHRlbXBlcmF0dXJlOiBbMTYuNywgMzAuN10KICAtIHRpbWU6IDEyNDY3NTIwMDAwMDAKICAgIHRlbXBlcmF0dXJlOiBbMTYuNSwgMjUuMF0KICAtIHRpbWU6IDEyNDY4Mzg0MDAwMDAKICAgIHRlbXBlcmF0dXJlOiBbMTcuOCwgMjUuN10KCmRhdGEubGluZToKICAtIHRpbWU6IDEyNDY0MDY0MDAwMDAKICAgIHRlbXBlcmF0dXJlOiAyMS41CiAgLSB0aW1lOiAxMjQ2NDkyODAwMDAwCiAgICB0ZW1wZXJhdHVyZTogMjIuMQogIC0gdGltZTogMTI0NjU3OTIwMDAwMAogICAgdGVtcGVyYXR1cmU6IDIzCiAgLSB0aW1lOiAxMjQ2NjY1NjAwMDAwCiAgICB0ZW1wZXJhdHVyZTogMjMuOAogIC0gdGltZTogMTI0Njc1MjAwMDAwMAogICAgdGVtcGVyYXR1cmU6IDIxLjQKICAtIHRpbWU6IDEyNDY4Mzg0MDAwMDAKICAgIHRlbXBlcmF0dXJlOiAyMS4zCgojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IG9wdGlvbnMgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwpvcHRpb25zOgogIGFwcGVuZFBhZGRpbmc6IDgKICBzeW5jVmlld1BhZGRpbmc6IHRydWUKICB0b29sdGlwOgogICAgc2hhcmVkOiB0cnVlCiAgICBzaG93TWFya2VyczogZmFsc2UKICAgIHNob3dDcm9zc2hhaXJzOiB0cnVlCiAgICBvZmZzZXRZOiAtNTAKCm9wdGlvbnMuYXJlYToKICBheGVzOiB7fQogIG1ldGE6CiAgICB0aW1lOgogICAgICB0eXBlOiAndGltZScKICAgICAgbWFzazogJ01NLUREJwogICAgICBuaWNlOiB0cnVlCiAgICAgIHRpY2tJbnRlcnZhbDogMTcyODAwMDAwCiAgICAgIHJhbmdlOiBbMCwgMV0KICAgIHRlbXBlcmF0dXJlOgogICAgICBuaWNlOiB0cnVlCiAgICAgIHN5bmM6IHRydWUKICAgICAgYWxpYXM6ICfmuKnluqbojIPlm7QnCiAgZ2VvbWV0cmllczoKICAgIC0gdHlwZTogJ2FyZWEnCiAgICAgIHhGaWVsZDogJ3RpbWUnCiAgICAgIHlGaWVsZDogJ3RlbXBlcmF0dXJlJwogICAgICBtYXBwaW5nOiB7fQoKb3B0aW9ucy5saW5lOgogIGF4ZXM6IGZhbHNlCiAgbWV0YToKICAgIHRpbWU6CiAgICAgIHR5cGU6ICd0aW1lJwogICAgICBtYXNrOiAnTU0tREQnCiAgICAgIG5pY2U6IHRydWUKICAgICAgdGlja0ludGVydmFsOiAxNzI4MDAwMDAKICAgICAgcmFuZ2U6IFswLCAxXQogICAgdGVtcGVyYXR1cmU6CiAgICAgIHN5bmM6ICd0ZW1wZXJhdHVyZScKICAgICAgYWxpYXM6ICfmuKnluqYnCiAgZ2VvbWV0cmllczoKICAgIC0gdHlwZTogJ2xpbmUnCiAgICAgIHhGaWVsZDogJ3RpbWUnCiAgICAgIHlGaWVsZDogJ3RlbXBlcmF0dXJlJwogICAgICBtYXBwaW5nOiB7fQogICAgLSB0eXBlOiAncG9pbnQnCiAgICAgIHhGaWVsZDogJ3RpbWUnCiAgICAgIHlGaWVsZDogJ3RlbXBlcmF0dXJlJwogICAgICBtYXBwaW5nOgogICAgICAgIHNoYXBlOiAnY2lyY2xlJwogICAgICAgIHN0eWxlOgogICAgICAgICAgZmlsbE9wYWNpdHk6IDEKYGBg",f.OrganizationTreeGraph="YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBPcmdhbml6YXRpb25UcmVlR3JhcGgKCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGE6CiAgaWQ6ICJyb290IgogIGxhYmVsOiAiUm9vdCIKICBjaGlsZHJlbjoKICAgIC0gaWQ6ICJjMSIKICAgICAgbGFiZWw6ICJDMSIKICAgICAgY2hpbGRyZW46CiAgICAgICAgLSBpZDogImMxLTEiCiAgICAgICAgICBsYWJlbDogIkMxLTEiCiAgICAgICAgICBjaGlsZHJlbjoKICAgICAgICAgICAgLSBpZDogImMxLTEtMSIKICAgICAgICAgICAgICBsYWJlbDogIkMxLTEtMSIKICAgICAgICAgICAgLSBpZDogImMxLTEtMiIKICAgICAgICAgICAgICBsYWJlbDogIkMxLTEtMiIKICAgICAgICAtIGlkOiAiYzEtMiIKICAgICAgICAgIGxhYmVsOiAiQzEtMiIKICAgICAgICAgIGNoaWxkcmVuOgogICAgICAgICAgICAtIGlkOiAiYzEtMi0xIgogICAgICAgICAgICAgIGxhYmVsOiAiQzEtMi0xIgogICAgICAgICAgICAtIGlkOiAiYzEtMi0yIgogICAgICAgICAgICAgIGxhYmVsOiAiQzEtMi0yIgogICAgLSBpZDogImMyIgogICAgICBsYWJlbDogIkMyIgogICAgICBjaGlsZHJlbjoKICAgICAgICAtIGlkOiAiYzItMSIKICAgICAgICAgIGxhYmVsOiAiQzItMSIKICAgICAgICAgIGNoaWxkcmVuOgogICAgICAgICAgICAtIGlkOiAiYzItMS0xIgogICAgICAgICAgICAgIGxhYmVsOiAiQzItMS0xIgoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBvcHRpb25zIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKb3B0aW9uczoge30KYGBg",f.Radar="YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBSYWRhcgoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBkYXRhICAgIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKZGF0YToKICAtIGl0ZW06ICJEZXNpZ24iCiAgICB1c2VyOiAiYSIKICAgIHNjb3JlOiA3MAogIC0gaXRlbTogIkRlc2lnbiIKICAgIHVzZXI6ICJiIgogICAgc2NvcmU6IDMwCiAgLSBpdGVtOiAiTWFya2V0aW5nIgogICAgdXNlcjogImEiCiAgICBzY29yZTogNTAKICAtIGl0ZW06ICJNYXJrZXRpbmciCiAgICB1c2VyOiAiYiIKICAgIHNjb3JlOiA2MAogIC0gaXRlbTogIlRlY2hub2xvZ3kiCiAgICB1c2VyOiAiYSIKICAgIHNjb3JlOiA1MAogIC0gaXRlbTogIlRlY2hub2xvZ3kiCiAgICB1c2VyOiAiYiIKICAgIHNjb3JlOiA0MAogIC0gaXRlbTogIlN1cHBvcnQiCiAgICB1c2VyOiAiYSIKICAgIHNjb3JlOiAzMAogIC0gaXRlbTogIlN1cHBvcnQiCiAgICB1c2VyOiAiYiIKICAgIHNjb3JlOiA0MAogIC0gaXRlbTogIlNhbGVzIgogICAgdXNlcjogImEiCiAgICBzY29yZTogNjAKICAtIGl0ZW06ICJTYWxlcyIKICAgIHVzZXI6ICJiIgogICAgc2NvcmU6IDQwCgojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IG9wdGlvbnMgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwpvcHRpb25zOgogIHhGaWVsZDogIml0ZW0iCiAgeUZpZWxkOiAic2NvcmUiCiAgc2VyaWVzRmllbGQ6ICJ1c2VyIgogIG1ldGE6CiAgICBzY29yZToKICAgICAgYWxpYXM6ICJTY29yZSIKICAgICAgbWluOiAwCiAgICAgIG5pY2U6IHRydWUKICB4QXhpczoKICAgIGxpbmU6IG51bGwKICAgIHRpY2tMaW5lOiBudWxsCiAgeUF4aXM6CiAgICBsYWJlbDogZmFsc2UKICAgIGdyaWQ6CiAgICAgIGFsdGVybmF0ZUNvbG9yOiAicmdiYSgwLCAwLCAwLCAwLjA0KSIKICBwb2ludDoge30KICBhcmVhOiB7fQpgYGA=",f.TinyLine="YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBUaW55TGluZQoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBkYXRhICAgIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKZGF0YTogWzI2NCwgNDE3LCA0MzgsIDg4NywgMzA5LCAzOTcsIDU1MCwgNTc1LCA1NjMsIDQzMCwgNTI1LCA1OTIsIDQ5MiwgNDY3LCA1MTMsIDU0NiwgOTgzLCAzNDAsIDUzOSwgMjQzLCAyMjYsIDE5Ml0KCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgb3B0aW9ucyAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCm9wdGlvbnM6CiAgaGVpZ2h0OiA2MAogIGF1dG9GaXQ6IGZhbHNlCiAgc21vb3RoOiB0cnVlCiAgdG9vbHRpcDogZmFsc2UKICBhbm5vdGF0aW9uczoKICAgIC0gdHlwZTogImxpbmUiCiAgICAgIHN0YXJ0OiBbIm1pbiIsICJtZWFuIl0KICAgICAgZW5kOiBbIm1heCIsICJtZWFuIl0KICAgICAgc3R5bGU6CiAgICAgICAgc3Ryb2tlOiAicmdiYSgwLCAwLCAwLCAwLjQ1KSIKICAgICAgdGV4dDoKICAgICAgICBjb250ZW50OiAiQXZlcmFnZSIKICAgICAgICBvZmZzZXRZOiAtMgogICAgICAgIHN0eWxlOgogICAgICAgICAgdGV4dEFsaWduOiAibGVmdCIKICAgICAgICAgIGZvbnRTaXplOiAxMAogICAgICAgICAgZmlsbDogInJnYmEoNDQsIDUzLCA2NiwgMC40NSkiCiAgICAgICAgICB0ZXh0QmFzZWxpbmU6ICJib3R0b20iCiAgICAtIHR5cGU6ICJsaW5lIgogICAgICBzdGFydDogWyJtaW4iLCA4MDBdCiAgICAgIGVuZDogWyJtYXgiLCA4MDBdCiAgICAgIHN0eWxlOgogICAgICAgIHN0cm9rZTogInJnYmEoMjAwLCAwLCAwLCAwLjU1KSIKICAgICAgdGV4dDoKICAgICAgICBjb250ZW50OiAiVGFyZ2V0IgogICAgICAgIG9mZnNldFk6IC0yCiAgICAgICAgc3R5bGU6CiAgICAgICAgICB0ZXh0QWxpZ246ICJsZWZ0IgogICAgICAgICAgZm9udFNpemU6IDEwCiAgICAgICAgICBmaWxsOiAicmdiYSg0NCwgNTMsIDY2LCAwLjQ1KSIKICAgICAgICAgIHRleHRCYXNlbGluZTogImJvdHRvbSIKYGBg",f["Dataviewjs Example (Column)"]="YGBgY2hhcnRzdmlldwojLS0tLS0tLS0tLS0tLS0tLS0jCiMtIGNoYXJ0IHR5cGUgICAgLSMKIy0tLS0tLS0tLS0tLS0tLS0tIwp0eXBlOiBDb2x1bW4KCiMtLS0tLS0tLS0tLS0tLS0tLSMKIy0gY2hhcnQgZGF0YSAgICAtIwojLS0tLS0tLS0tLS0tLS0tLS0jCmRhdGE6IHwKICBkYXRhdmlld2pzOgogIHJldHVybiBkdi5wYWdlcygpCiAgICAgICAgICAgLmdyb3VwQnkocCA9PiBwLmZpbGUuZm9sZGVyKQogICAgICAgICAgIC5tYXAocCA9PiAoe2ZvbGRlcjogcC5rZXkgfHwgIlJPT1QiLCBjb3VudDogcC5yb3dzLmxlbmd0aH0pKQogICAgICAgICAgIC5hcnJheSgpOwoKIy0tLS0tLS0tLS0tLS0tLS0tIwojLSBjaGFydCBvcHRpb25zIC0jCiMtLS0tLS0tLS0tLS0tLS0tLSMKb3B0aW9uczoKICB4RmllbGQ6ICJmb2xkZXIiCiAgeUZpZWxkOiAiY291bnQiCiAgcGFkZGluZzogYXV0bwogIGxhYmVsOgogICAgcG9zaXRpb246ICJtaWRkbGUiCiAgICBzdHlsZToKICAgICAgb3BhY2l0eTogMC42CiAgICAgIGZvbnRTaXplOiAxMgogIGNvbHVtblN0eWxlOgogICAgZmlsbE9wYWNpdHk6IDAuNQogICAgbGluZVdpZHRoOiAxCiAgICBzdHJva2VPcGFjaXR5OiAwLjcKICAgIHNoYWRvd0NvbG9yOiAiZ3JleSIKICAgIHNoYWRvd0JsdXI6IDEwCiAgICBzaGFkb3dPZmZzZXRYOiA1CiAgICBzaGFkb3dPZmZzZXRZOiA1CiAgeEF4aXM6CiAgICBsYWJlbDoKICAgICAgYXV0b0hpZGU6IGZhbHNlCiAgICAgIGF1dG9Sb3RhdGU6IHRydWUKICBtZXRhOgogICAgY291bnQ6CiAgICAgIGFsaWFzOiAiQ291bnQiCmBgYA=="})(Rs||(Rs={}));var VAt={[Rs.Bar]:"https://user-images.githubusercontent.com/150803/123117024-fa43b180-d473-11eb-84eb-8e1806ce5dec.png",[Rs.Pie]:"https://user-images.githubusercontent.com/150803/119069882-87c95700-ba19-11eb-8cef-02d1e021d1a2.png",[Rs.WordCloud]:"https://user-images.githubusercontent.com/150803/119069991-bba47c80-ba19-11eb-873f-847563daea39.png",[Rs.WordCount]:"https://user-images.githubusercontent.com/150803/136478725-be28a56b-0075-4f0a-a719-f61b30e83b6a.png",[Rs.Treemap]:"https://user-images.githubusercontent.com/150803/119070047-decf2c00-ba19-11eb-9d59-21c051da593c.png",[Rs.DualAxes]:"https://user-images.githubusercontent.com/150803/119969638-618b5480-bfe1-11eb-8a36-0a5d60408b00.png",[Rs.Mix]:"https://user-images.githubusercontent.com/150803/120421841-a1638a80-c399-11eb-9464-d773931fdd6f.png",[Rs.OrganizationTreeGraph]:"https://user-images.githubusercontent.com/150803/123117254-2b23e680-d474-11eb-845f-0d663a458fa7.png",[Rs.Radar]:"https://user-images.githubusercontent.com/150803/123117394-4a227880-d474-11eb-8a11-23f3cd482251.png",[Rs.TinyLine]:"https://user-images.githubusercontent.com/150803/123117476-5a3a5800-d474-11eb-9db8-4b3785bb010c.png",[Rs["Dataviewjs Example (Column)"]]:"https://user-images.githubusercontent.com/150803/140684190-fa6a08ea-3394-44fe-ae92-265810f6b9a9.png"};var YAt=U(require("buffer")),UX=class extends HAt.FuzzySuggestModal{constructor(e,t){super(e);this.editor=t}getItems(){return Object.entries(Rs)}getItemText(e){return e[0]}renderSuggestion(e,t){let n=createDiv({cls:"chartsview-thumbnail"}),i=Rs[e.item[0]],a=createEl("img",{attr:{src:VAt[i]}});n.appendChild(a),t.appendChild(n),t.addClass("chartsview-thumbnail-container"),super.renderSuggestion(e,t)}onChooseItem(e){xF(this.editor,YAt.Buffer.from(e[1],"base64").toString("utf8"))}};var XAt="csv",bme="csv",jX=class extends wF.Plugin{ChartsViewProcessor(e,t,n){return Da(this,null,function*(){ht.unmountComponentAtNode(t);try{let i=yield GAt(e,this,n.sourcePath);ht.render(ht.createElement(DAt,Hf({},i)),t)}catch(i){ht.render(ht.createElement("div",{style:{color:"var(--text-title-h1)"}},i.toString()),t)}})}onload(){return Da(this,null,function*(){try{yield this.loadSettings(),this.addSettingTab(new zX(this.app,this)),this.registerMarkdownCodeBlockProcessor("chartsview",this.ChartsViewProcessor.bind(this)),this.addCommand({id:"insert-chartsview-template",name:"Insert Template",editorCallback:e=>{new UX(this.app,e).open()}}),wF.Platform.isDesktopApp&&this.addCommand({id:"import-chartsview-data-csv",name:"Import data from external CSV file",editorCallback:e=>Da(this,null,function*(){let n=yield(yield E9({accept:".csv",strict:!0})).text(),i=bF(n);xF(e,T7.dump(i,{quotingType:'"',noRefs:!0}).replace(/\n/g,` +`+" ".repeat(e.getCursor().ch)))})})}catch(e){console.log(`Load error. ${e}`)}try{this.registerExtensions([XAt],bme)}catch(e){console.log(`Existing file extension ${XAt}`)}console.log("Loaded Charts View plugin")})}onunload(){console.log("Unloading Charts View plugin")}loadSettings(){return Da(this,null,function*(){this.settings=Object.assign(WAt,yield this.loadData())})}saveSettings(){return Da(this,null,function*(){yield this.saveData(this.settings)})}}; /* @license Papa Parse v5.3.1 diff --git a/notes/.obsidian/plugins/obsidian-chartsview-plugin/manifest.json b/notes/.obsidian/plugins/obsidian-chartsview-plugin/manifest.json index 95a662d..f340c3c 100644 --- a/notes/.obsidian/plugins/obsidian-chartsview-plugin/manifest.json +++ b/notes/.obsidian/plugins/obsidian-chartsview-plugin/manifest.json @@ -1,7 +1,7 @@ { "id": "obsidian-chartsview-plugin", "name": "Charts View", - "version": "1.1.6", + "version": "1.1.8", "minAppVersion": "0.9.12", "description": "Data visualization solution in Obsidian based on Ant Design Charts.", "author": "caronchen", diff --git a/notes/.obsidian/plugins/obsidian-excalidraw-plugin/data.json b/notes/.obsidian/plugins/obsidian-excalidraw-plugin/data.json index 4c0404d..2c22f60 100644 --- a/notes/.obsidian/plugins/obsidian-excalidraw-plugin/data.json +++ b/notes/.obsidian/plugins/obsidian-excalidraw-plugin/data.json @@ -69,8 +69,9 @@ "mdCSS": "", "scriptEngineSettings": {}, "defaultTrayMode": false, - "previousRelease": "1.6.25", + "previousRelease": "1.6.33", "showReleaseNotes": true, + "mathjaxSourceURL": "https://cdn.jsdelivr.net/npm/mathjax@3.2.1/es5/tex-svg.js", "loadCount": 1, "patchCommentBlock": false, "runWYSIWYGpatch": false, diff --git a/notes/.obsidian/plugins/obsidian-excalidraw-plugin/main.js b/notes/.obsidian/plugins/obsidian-excalidraw-plugin/main.js index c344d52..20b5f86 100644 --- a/notes/.obsidian/plugins/obsidian-excalidraw-plugin/main.js +++ b/notes/.obsidian/plugins/obsidian-excalidraw-plugin/main.js @@ -1,4 +1,4 @@ -"use strict";var e=require("obsidian");let t=e=>crypto.getRandomValues(new Uint8Array(e)),n=(e,n)=>((e,t,n)=>{let r=(2<{let i="";for(;;){let o=n(a),l=a;for(;l--;)if(i+=e[o[l]&r]||"",i.length===t)return i}}})(e,n,t);function r(e){return JSON.parse(e.replaceAll("[","["))}const a=/Mac|iPod|iPhone|iPad/.test(window.navigator.platform)?"metaKey":"ctrlKey",i=n("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",8),o="obsidian-excalidraw-plugin",l=n("1234567890abcdef",40),s=/[<>:"\\|?*#]/g,A=/\+|\/|~|=|%|\(|\)|{|}|,|\.|\$|!|\?|;|\[|]|\^|#|\*|<|>|&|@|\||\\|"|:/g,c=["jpeg","jpg","png","gif","svg"],d="excalidraw-icon",u='{"type":"excalidraw","version":2,"source":"https://excalidraw.com","elements":[],"appState":{"gridSize":null,"viewBackgroundColor":"#ffffff"}}',p='{"type":"excalidraw","version":2,"source":"https://excalidraw.com","elements":[],"appState":{"theme":"dark","gridSize":null,"viewBackgroundColor":"#ffffff"}}',h=["---","","excalidraw-plugin: parsed","tags: [excalidraw]","","---","==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠==","",""].join("\n"),f=new Map;f.set("aliceblue","#f0f8ff"),f.set("antiquewhite","#faebd7"),f.set("aqua","#00ffff"),f.set("aquamarine","#7fffd4"),f.set("azure","#f0ffff"),f.set("beige","#f5f5dc"),f.set("bisque","#ffe4c4"),f.set("black","#000000"),f.set("blanchedalmond","#ffebcd"),f.set("blue","#0000ff"),f.set("blueviolet","#8a2be2"),f.set("brown","#a52a2a"),f.set("burlywood","#deb887"),f.set("cadetblue","#5f9ea0"),f.set("chartreuse","#7fff00"),f.set("chocolate","#d2691e"),f.set("coral","#ff7f50"),f.set("cornflowerblue","#6495ed"),f.set("cornsilk","#fff8dc"),f.set("crimson","#dc143c"),f.set("cyan","#00ffff"),f.set("darkblue","#00008b"),f.set("darkcyan","#008b8b"),f.set("darkgoldenrod","#b8860b"),f.set("darkgray","#a9a9a9"),f.set("darkgreen","#006400"),f.set("darkkhaki","#bdb76b"),f.set("darkmagenta","#8b008b"),f.set("darkolivegreen","#556b2f"),f.set("darkorange","#ff8c00"),f.set("darkorchid","#9932cc"),f.set("darkred","#8b0000"),f.set("darksalmon","#e9967a"),f.set("darkseagreen","#8fbc8f"),f.set("darkslateblue","#483d8b"),f.set("darkslategray","#2f4f4f"),f.set("darkturquoise","#00ced1"),f.set("darkviolet","#9400d3"),f.set("deeppink","#ff1493"),f.set("deepskyblue","#00bfff"),f.set("dimgray","#696969"),f.set("dodgerblue","#1e90ff"),f.set("firebrick","#b22222"),f.set("floralwhite","#fffaf0"),f.set("forestgreen","#228b22"),f.set("fuchsia","#ff00ff"),f.set("gainsboro","#dcdcdc"),f.set("ghostwhite","#f8f8ff"),f.set("gold","#ffd700"),f.set("goldenrod","#daa520"),f.set("gray","#808080"),f.set("green","#008000"),f.set("greenyellow","#adff2f"),f.set("honeydew","#f0fff0"),f.set("hotpink","#ff69b4"),f.set("indianred","#cd5c5c"),f.set("indigo","#4b0082"),f.set("ivory","#fffff0"),f.set("khaki","#f0e68c"),f.set("lavender","#e6e6fa"),f.set("lavenderblush","#fff0f5"),f.set("lawngreen","#7cfc00"),f.set("lemonchiffon","#fffacd"),f.set("lightblue","#add8e6"),f.set("lightcoral","#f08080"),f.set("lightcyan","#e0ffff"),f.set("lightgoldenrodyellow","#fafad2"),f.set("lightgrey","#d3d3d3"),f.set("lightgreen","#90ee90"),f.set("lightpink","#ffb6c1"),f.set("lightsalmon","#ffa07a"),f.set("lightseagreen","#20b2aa"),f.set("lightskyblue","#87cefa"),f.set("lightslategray","#778899"),f.set("lightsteelblue","#b0c4de"),f.set("lightyellow","#ffffe0"),f.set("lime","#00ff00"),f.set("limegreen","#32cd32"),f.set("linen","#faf0e6"),f.set("magenta","#ff00ff"),f.set("maroon","#800000"),f.set("mediumaquamarine","#66cdaa"),f.set("mediumblue","#0000cd"),f.set("mediumorchid","#ba55d3"),f.set("mediumpurple","#9370d8"),f.set("mediumseagreen","#3cb371"),f.set("mediumslateblue","#7b68ee"),f.set("mediumspringgreen","#00fa9a"),f.set("mediumturquoise","#48d1cc"),f.set("mediumvioletred","#c71585"),f.set("midnightblue","#191970"),f.set("mintcream","#f5fffa"),f.set("mistyrose","#ffe4e1"),f.set("moccasin","#ffe4b5"),f.set("navajowhite","#ffdead"),f.set("navy","#000080"),f.set("oldlace","#fdf5e6"),f.set("olive","#808000"),f.set("olivedrab","#6b8e23"),f.set("orange","#ffa500"),f.set("orangered","#ff4500"),f.set("orchid","#da70d6"),f.set("palegoldenrod","#eee8aa"),f.set("palegreen","#98fb98"),f.set("paleturquoise","#afeeee"),f.set("palevioletred","#d87093"),f.set("papayawhip","#ffefd5"),f.set("peachpuff","#ffdab9"),f.set("peru","#cd853f"),f.set("pink","#ffc0cb"),f.set("plum","#dda0dd"),f.set("powderblue","#b0e0e6"),f.set("purple","#800080"),f.set("rebeccapurple","#663399"),f.set("red","#ff0000"),f.set("rosybrown","#bc8f8f"),f.set("royalblue","#4169e1"),f.set("saddlebrown","#8b4513"),f.set("salmon","#fa8072"),f.set("sandybrown","#f4a460"),f.set("seagreen","#2e8b57"),f.set("seashell","#fff5ee"),f.set("sienna","#a0522d"),f.set("silver","#c0c0c0"),f.set("skyblue","#87ceeb"),f.set("slateblue","#6a5acd"),f.set("slategray","#708090"),f.set("snow","#fffafa"),f.set("springgreen","#00ff7f"),f.set("steelblue","#4682b4"),f.set("tan","#d2b48c"),f.set("teal","#008080"),f.set("thistle","#d8bfd8"),f.set("tomato","#ff6347"),f.set("turquoise","#40e0d0"),f.set("violet","#ee82ee"),f.set("wheat","#f5deb3"),f.set("white","#ffffff"),f.set("whitesmoke","#f5f5f5"),f.set("yellow","#ffff00"),f.set("yellowgreen","#9acd32");const g='.excalidraw-md-host{padding:0px 10px}.excalidraw-md-footer{height:5px}foreignObject{background-color:transparent}p{display:block;margin-block-start:1em;margin-block-end:1em;margin-inline-start:0px;margin-inline-end:0px;color:inherit}table,tr,th,td{color:inherit;border:1px solid;border-collapse:collapse;padding:3px}th{font-weight:bold;border-bottom:double;background-color:silver}.copy-code-button{display:none}code[class*=language-],pre[class*=language-]{color:#393a34;font-family:"Consolas","Bitstream Vera Sans Mono","Courier New",Courier,monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;font-size:.9em;line-height:1.2em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre>code[class*=language-]{font-size:1em}pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection{background:#C1DEF1}pre[class*=language-]::selection,pre[class*=language-] ::selection,code[class*=language-]::selection,code[class*=language-] ::selection{background:#C1DEF1}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;background-color:#0000001a}:not(pre)>code[class*=language-]{padding:.2em;padding-top:1px;padding-bottom:1px;background:#f8f8f8;border:1px solid #dddddd}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:green;font-style:italic}.token.namespace{opacity:.7}.token.string{color:#a31515}.token.punctuation,.token.operator{color:#393a34}.token.url,.token.symbol,.token.number,.token.boolean,.token.variable,.token.constant,.token.inserted{color:#36acaa}.token.atrule,.token.keyword,.token.attr-value,.language-autohotkey .token.selector,.language-json .token.boolean,.language-json .token.number,code[class*=language-css]{color:#00f}.token.function{color:#393a34}.token.deleted,.language-autohotkey .token.tag{color:#9a050f}.token.selector,.language-autohotkey .token.keyword{color:#00009f}.token.important{color:#e90}.token.important,.token.bold{font-weight:bold}.token.italic{font-style:italic}.token.class-name,.language-json .token.property{color:#2b91af}.token.tag,.token.selector{color:maroon}.token.attr-name,.token.property,.token.regex,.token.entity{color:red}.token.directive.tag .tag{background:#ffff00;color:#393a34}.line-numbers.line-numbers .line-numbers-rows{border-right-color:#a5a5a5}.line-numbers .line-numbers-rows>span:before{color:#2b91af}.line-highlight.line-highlight{background:rgba(193,222,241,.2);background:-webkit-linear-gradient(left,rgba(193,222,241,.2) 70%,rgba(221,222,241,0));background:linear-gradient(to right,rgba(193,222,241,.2) 70%,rgba(221,222,241,0))}blockquote{ font-style:italic;background-color:rgb(46,43,42,0.1);margin:0;margin-left:1em;border-radius:0 4px 4px 0;border:1px solid hsl(0,80%,32%);border-left-width:8px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;padding:10px 20px;margin-inline-start:30px;margin-inline-end:30px;}',m="data:application/font-woff;charset=utf-8;base64,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",b=` @font-face {font-family: "Virgil";src: url("${m}") format("woff2");}`,v=' @font-face {font-family: "Cascadia";src: url("data:application/font-woff;charset=utf-8;base64,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XVtdpV2uXdBeAV4OXmBecl6GXpteyl74X1Vfsl/PX+xgDWAtYDVgPWBQYGNga2B9YIZgj2CcYKlgtmDLYOFg7GElYVthfmGgYa1hwmHdYgNiN2JVYoli0GL6Yzpjc2PbZINkrGUYZUBlTWVeZaNl8GX9Zi9mPGZNZrdm/mdPZ59nq2e4Z8hoAWhDaE9oW2hoaMto12jnaPNo/2mBaipqmGqlarFrRWtSa79sG2wnbFRskGzBbM5s32z7bQ5tF20fbR9tH20fbX9tzm4ebp9u+W9jb75wGnBgcKRw1HEucZRx1nIxcoly1HMHc1Nzm3P+dEJ0rXTvdR11YXWIdcl2LHZrdnN2e3aidqp2zHbwdwd3LHc/d213qHfGd/14JHhLeHt4rnjWeON5EnkpeUd5nHnBefJ5+noCeiV6T3pyenp6hXqcewR7kXu5e+R8Dnw3fHF8qnztfPp9B30UfSF9Ln07fUh9VX1ifW99fH2JfZZ9o32wfb19yn3YfeZ9834Bfg5+Hn4yfkJ+U35hfnd+h37Vf2iAj4CrgNeBDYEzgVmBgIGmgbmBzYH4gh2CUoKHgr2C84M1g/iEM4SIhK6Ey4T9hR6FQIVbhXaFiYWcha+FwoXSheuGAoYZhjCGR4Zoho+GnYazhsGGzobjhviHBYcah0yHaIgsiE6IcIi1iNuJA4lciWqJgImViaqJvYnRie6KDIosikyKbIqBio+KpIqyir+KzIrZiueK+4sPiySLOYtdi3GLhIuRi5+Ls4vIi9aL44vxi/+MFIwojD2MUoxfjGyMeYyFjJiMq4y/jNKM840NjSeNO41bjXSNjo2ijc6N7o4PjieOPY5TjmaOd46Njp6OtI7NjuGO8o8JjxqPMY9Lj2WPe4+Rj6aPvI/Kj96P75AAkA6QHJAukE6QdJCCkJ6QvJDKkN6Q75ECkRORIZE7kU+RY5F+kZSRqZHCkdiR7pIIkiSSQJJckniSlJK3ksiS2JLrkwCTDpMhkzKTQ5NQk12TcJOMk6+TvJPVk/GT/5QSlCSUNJRElFKUa5R+lJGUrJTClNiU8ZUHlR2VN5VTlWqVf5WUla2VwJXWleaV/JYNlieWOpZQlmCWdpaHlqCWtJbJluyXBZcflziXTJdgl3qXjpeil8WX3Zf1mGqYsZkFmTmZg5mvmcaZ5Zpamr6bHZtFm7icHZyAnN6dG52E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") format("woff2");}';"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var w={exports:{}},y={},k=Object.getOwnPropertySymbols,x=Object.prototype.hasOwnProperty,E=Object.prototype.propertyIsEnumerable;function B(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}var S=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map((function(e){return t[e]}));if("0123456789"!==r.join(""))return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach((function(e){a[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},a)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,r,a=B(e),i=1;icrypto.getRandomValues(new Uint8Array(e)),n=(e,n)=>((e,t,n)=>{let r=(2<{let i="";for(;;){let o=n(a),l=a;for(;l--;)if(i+=e[o[l]&r]||"",i.length===t)return i}}})(e,n,t);function r(e){return JSON.parse(e.replaceAll("[","["))}const a=/Mac|iPod|iPhone|iPad/.test(window.navigator.platform)?"metaKey":"ctrlKey",i=n("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",8),o="obsidian-excalidraw-plugin",l=n("1234567890abcdef",40),s=/[<>:"\\|?*#]/g,A=/\+|\/|~|=|%|\(|\)|{|}|,|\.|\$|!|\?|;|\[|]|\^|#|\*|<|>|&|@|\||\\|"|:/g,c=["jpeg","jpg","png","gif","svg"],u="excalidraw-icon",d='{"type":"excalidraw","version":2,"source":"https://excalidraw.com","elements":[],"appState":{"gridSize":null,"viewBackgroundColor":"#ffffff"}}',p='{"type":"excalidraw","version":2,"source":"https://excalidraw.com","elements":[],"appState":{"theme":"dark","gridSize":null,"viewBackgroundColor":"#ffffff"}}',h=["---","","excalidraw-plugin: parsed","tags: [excalidraw]","","---","==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠==","",""].join("\n"),f=new Map;f.set("aliceblue","#f0f8ff"),f.set("antiquewhite","#faebd7"),f.set("aqua","#00ffff"),f.set("aquamarine","#7fffd4"),f.set("azure","#f0ffff"),f.set("beige","#f5f5dc"),f.set("bisque","#ffe4c4"),f.set("black","#000000"),f.set("blanchedalmond","#ffebcd"),f.set("blue","#0000ff"),f.set("blueviolet","#8a2be2"),f.set("brown","#a52a2a"),f.set("burlywood","#deb887"),f.set("cadetblue","#5f9ea0"),f.set("chartreuse","#7fff00"),f.set("chocolate","#d2691e"),f.set("coral","#ff7f50"),f.set("cornflowerblue","#6495ed"),f.set("cornsilk","#fff8dc"),f.set("crimson","#dc143c"),f.set("cyan","#00ffff"),f.set("darkblue","#00008b"),f.set("darkcyan","#008b8b"),f.set("darkgoldenrod","#b8860b"),f.set("darkgray","#a9a9a9"),f.set("darkgreen","#006400"),f.set("darkkhaki","#bdb76b"),f.set("darkmagenta","#8b008b"),f.set("darkolivegreen","#556b2f"),f.set("darkorange","#ff8c00"),f.set("darkorchid","#9932cc"),f.set("darkred","#8b0000"),f.set("darksalmon","#e9967a"),f.set("darkseagreen","#8fbc8f"),f.set("darkslateblue","#483d8b"),f.set("darkslategray","#2f4f4f"),f.set("darkturquoise","#00ced1"),f.set("darkviolet","#9400d3"),f.set("deeppink","#ff1493"),f.set("deepskyblue","#00bfff"),f.set("dimgray","#696969"),f.set("dodgerblue","#1e90ff"),f.set("firebrick","#b22222"),f.set("floralwhite","#fffaf0"),f.set("forestgreen","#228b22"),f.set("fuchsia","#ff00ff"),f.set("gainsboro","#dcdcdc"),f.set("ghostwhite","#f8f8ff"),f.set("gold","#ffd700"),f.set("goldenrod","#daa520"),f.set("gray","#808080"),f.set("green","#008000"),f.set("greenyellow","#adff2f"),f.set("honeydew","#f0fff0"),f.set("hotpink","#ff69b4"),f.set("indianred","#cd5c5c"),f.set("indigo","#4b0082"),f.set("ivory","#fffff0"),f.set("khaki","#f0e68c"),f.set("lavender","#e6e6fa"),f.set("lavenderblush","#fff0f5"),f.set("lawngreen","#7cfc00"),f.set("lemonchiffon","#fffacd"),f.set("lightblue","#add8e6"),f.set("lightcoral","#f08080"),f.set("lightcyan","#e0ffff"),f.set("lightgoldenrodyellow","#fafad2"),f.set("lightgrey","#d3d3d3"),f.set("lightgreen","#90ee90"),f.set("lightpink","#ffb6c1"),f.set("lightsalmon","#ffa07a"),f.set("lightseagreen","#20b2aa"),f.set("lightskyblue","#87cefa"),f.set("lightslategray","#778899"),f.set("lightsteelblue","#b0c4de"),f.set("lightyellow","#ffffe0"),f.set("lime","#00ff00"),f.set("limegreen","#32cd32"),f.set("linen","#faf0e6"),f.set("magenta","#ff00ff"),f.set("maroon","#800000"),f.set("mediumaquamarine","#66cdaa"),f.set("mediumblue","#0000cd"),f.set("mediumorchid","#ba55d3"),f.set("mediumpurple","#9370d8"),f.set("mediumseagreen","#3cb371"),f.set("mediumslateblue","#7b68ee"),f.set("mediumspringgreen","#00fa9a"),f.set("mediumturquoise","#48d1cc"),f.set("mediumvioletred","#c71585"),f.set("midnightblue","#191970"),f.set("mintcream","#f5fffa"),f.set("mistyrose","#ffe4e1"),f.set("moccasin","#ffe4b5"),f.set("navajowhite","#ffdead"),f.set("navy","#000080"),f.set("oldlace","#fdf5e6"),f.set("olive","#808000"),f.set("olivedrab","#6b8e23"),f.set("orange","#ffa500"),f.set("orangered","#ff4500"),f.set("orchid","#da70d6"),f.set("palegoldenrod","#eee8aa"),f.set("palegreen","#98fb98"),f.set("paleturquoise","#afeeee"),f.set("palevioletred","#d87093"),f.set("papayawhip","#ffefd5"),f.set("peachpuff","#ffdab9"),f.set("peru","#cd853f"),f.set("pink","#ffc0cb"),f.set("plum","#dda0dd"),f.set("powderblue","#b0e0e6"),f.set("purple","#800080"),f.set("rebeccapurple","#663399"),f.set("red","#ff0000"),f.set("rosybrown","#bc8f8f"),f.set("royalblue","#4169e1"),f.set("saddlebrown","#8b4513"),f.set("salmon","#fa8072"),f.set("sandybrown","#f4a460"),f.set("seagreen","#2e8b57"),f.set("seashell","#fff5ee"),f.set("sienna","#a0522d"),f.set("silver","#c0c0c0"),f.set("skyblue","#87ceeb"),f.set("slateblue","#6a5acd"),f.set("slategray","#708090"),f.set("snow","#fffafa"),f.set("springgreen","#00ff7f"),f.set("steelblue","#4682b4"),f.set("tan","#d2b48c"),f.set("teal","#008080"),f.set("thistle","#d8bfd8"),f.set("tomato","#ff6347"),f.set("turquoise","#40e0d0"),f.set("violet","#ee82ee"),f.set("wheat","#f5deb3"),f.set("white","#ffffff"),f.set("whitesmoke","#f5f5f5"),f.set("yellow","#ffff00"),f.set("yellowgreen","#9acd32");const g='.excalidraw-md-host{padding:0px 10px}.excalidraw-md-footer{height:5px}foreignObject{background-color:transparent}p{display:block;margin-block-start:1em;margin-block-end:1em;margin-inline-start:0px;margin-inline-end:0px;color:inherit}table,tr,th,td{color:inherit;border:1px solid;border-collapse:collapse;padding:3px}th{font-weight:bold;border-bottom:double;background-color:silver}.copy-code-button{display:none}code[class*=language-],pre[class*=language-]{color:#393a34;font-family:"Consolas","Bitstream Vera Sans Mono","Courier New",Courier,monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;font-size:.9em;line-height:1.2em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre>code[class*=language-]{font-size:1em}pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection{background:#C1DEF1}pre[class*=language-]::selection,pre[class*=language-] ::selection,code[class*=language-]::selection,code[class*=language-] ::selection{background:#C1DEF1}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;background-color:#0000001a}:not(pre)>code[class*=language-]{padding:.2em;padding-top:1px;padding-bottom:1px;background:#f8f8f8;border:1px solid #dddddd}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:green;font-style:italic}.token.namespace{opacity:.7}.token.string{color:#a31515}.token.punctuation,.token.operator{color:#393a34}.token.url,.token.symbol,.token.number,.token.boolean,.token.variable,.token.constant,.token.inserted{color:#36acaa}.token.atrule,.token.keyword,.token.attr-value,.language-autohotkey .token.selector,.language-json .token.boolean,.language-json .token.number,code[class*=language-css]{color:#00f}.token.function{color:#393a34}.token.deleted,.language-autohotkey .token.tag{color:#9a050f}.token.selector,.language-autohotkey .token.keyword{color:#00009f}.token.important{color:#e90}.token.important,.token.bold{font-weight:bold}.token.italic{font-style:italic}.token.class-name,.language-json .token.property{color:#2b91af}.token.tag,.token.selector{color:maroon}.token.attr-name,.token.property,.token.regex,.token.entity{color:red}.token.directive.tag .tag{background:#ffff00;color:#393a34}.line-numbers.line-numbers .line-numbers-rows{border-right-color:#a5a5a5}.line-numbers .line-numbers-rows>span:before{color:#2b91af}.line-highlight.line-highlight{background:rgba(193,222,241,.2);background:-webkit-linear-gradient(left,rgba(193,222,241,.2) 70%,rgba(221,222,241,0));background:linear-gradient(to right,rgba(193,222,241,.2) 70%,rgba(221,222,241,0))}blockquote{ font-style:italic;background-color:rgb(46,43,42,0.1);margin:0;margin-left:1em;border-radius:0 4px 4px 0;border:1px solid hsl(0,80%,32%);border-left-width:8px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;padding:10px 20px;margin-inline-start:30px;margin-inline-end:30px;}',m="data:application/font-woff;charset=utf-8;base64,d09GMk9UVE8AAO9AAAkAAAABO1AAAO73AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYTJHQZgAIluATYCJAOQWAQGBY9lByBbpzpxQ1QZOitEWvl1ExHg7NqqxsS6RlCwSkciyuhqMfv//89KOsZwUAeGmJXV32EeijNbRUcYuVUTmWNvG5FWRBfkAW4YWVueXU6tq9d0pZufMcACcUzc7AmXTyBwYmw0WojBScItqLq853lRPMu/i21F/1VrveHFeyj+LdHE3AfsFiWacmNotmSIhpJesVGSFIFWJDgsMxNmRIsQQzGF4rvOX33MPtY+LeOF490dgR0G/l0zmGbP8ku9beGBOf2+EcKFm8Md59ESM5GZKYtFok/F14jmMBPlbsKEWTmjIcDMVCgM0RQv1VD4IZddn+x6g2Ff91p6BriTOHYqRgBPP/Z8O3Pn/WXBXUTBKoZoSbZg6N3qwPP/937uvc+bD5huHSziTSgio5mQNpAsr235cGq9P8/r5vc1H/KatrSSHj8fGwzDhavuia24cMyBvutkjYQtKFtwTcS1wVWcODY7KMSFOM69OS/+4fm59f7vRf5FsY0aMXLQQgsGrRwggmTYYCJVEmVBm4V5Z0ThidFYPeyrtRKEoeme3dvtgT6iOeJnlC8MsAKKT0UoFD469oV+l7DD8pn6lvkVc++0kSEfkCM0Vauqh+RnHNszHtYIqREKELpb3S0eAhMvIXmB7+tkb9/wpNO+5fOjmT/aU+6YYwu6wVlib1xrbGxcwNgduqmiNNOESimjUWmogISEAOOOe086XjvNccGlpjQnb8gjOY3Gyr1sLlmavf8vKSIJwtUoBiEBfY1jpaqrq1ET/z2/7f+/4/hmD/yU4cZxDvyseBGJ7/W9rVwMSlAkJUsk6hzqQCsqJVbd9NbifX/4r6pJ4LDfsD5vl0a3Nl1TSqk09SUxpviFT9KCpj3jFmScMz4t9f8VWXkadd4bSR35QqxNH33Ai5BewBI5hQAbQsZFe2nQZ84A787uLKHXduwYMHUawjI9wuP+7R+jZdW/WpL3hdof92mkcoac8YBwj3gJB7CB3aayqzgrsSIikYrAZYK2u3l6AJfgdm+OybOvB8+JTFAi4hU026JOz7fHCxQujUCxVVutY8Wgje+dK4CA+afpvl+9Nyecky85rLBnngvwxHEpBa9ATSI+MxnxjMcbadI6LaWIPXHlOeusTrrDBkAFCAzMc6UTOFEFKTY1Nm4GuAPasdAah4+DcVmNg/pfU5Nao+e7QykouG0KYR4ewkKQVmtP1n91ike6Kvt60/WySWeBpeOKr7QCg0hoKAwgPPOvqrl+UPI78CqVirROp/RhKm2YMy0C6CJQdAHdBNBOBOmKyGuC5AZe6X1LKQUflBN+2M7DB2VHoBs/KOcRvCZQfn6i0lsdM5Ypw5otoyCn0UlftixbMiaTk2XKy5Q1Y17G2zJOB7nKUm0/PkgM7J3K/X5azIxlS8eShkmeIYrIIuvN47j+8Xk5xmbzq/fd0AYlB/aifvZu/3or31eH2eCosZNM23gKUvMyo25K7fx8x2ZRqLM4/xxLbOST4x/7aOuym35y8olHctP4b8V/TX/YCP2p/1mult99+Gj0u488j59Q7/DTaWN4EkPx7itzRBhgghZ7XPAiQJAIcTLMtFCJKku1WqHHWlvsst9xLnKDYR4xwicQZ7tG+knSE5NnLF69LLqrR0X89vtHVudoGtiw59gDkletTr9hov04IcNsWAhCFGnUMYNrWMA6cqigBQoCbHTgQRhxDOMAjuIkzuIyzuAybuEuHmMEbxC773VEWIigqlrWqT4NbHCjmtiM5nd+y1vXlq5ob9d1c/f3eC93qA/7pk6NEihFn0Rmmnk61thin7O8wilOc4krXGeGedbYJEaSKhN6GOUQD/IKz/ACr/IW7/ERn/Il3/ITf/B1//9y0DjoHH5x+M2hIRCCxhEpTKlFmUZcYipGDGMmFmBNbIBtYYfYXewxq9h9hvn6/vr3thQeZ+KUArHScmqorznNakXbKqkpSqIM+SLlVlB9GtJ+HdUZXdZZXdGQ7uuZ3uizfnlBkASHEFk57pwrbnvKU17wunOuGjNrxbYj2+1zj/u92yM+4fO+5gu+7jt+6Od+40+uMZH/QTH0f6P/F2WjGegMdD6aieagxWg5WoU2oG0oH5WhWgfrEB2GI+UoOOqOGcc5+Rat6/9k/8+mUCCeJiIC5sZapHx9QEX2IMLTPuIbQjZoyoY9XgDCc1CSUcEfzRVFJcPJ4YfarTTXnEEp9Fll4bmCyF6huXD0c2NkyBrUclqFDS0fCcldmnBxq5ZzUdjQ0hBhra3noZkdrY2QIXdtwDXbzuJpombNK3hcpdld/aaHaGW4yOQ0Uq2KuSpqqHgkIlXMSxG5hZWvipLO5Yja+dGe2Ec0Xl7hJVeLriry+vKRHMnapHSSWh3Na/r0xosnKF8vBiOnHHm02DmrmKh7JKa/6Kx4A1EGB5L5gPZja3EC36Px8gVmpEMfpVo7eKal3dCDQk3OQWrtEfywxsP7kXKdc+xllnS10CSorh6UNHRFJNThKpI3Uj12NefH5EBdrYWSRruZkfa+i7mL+aR7b+irdu+/Svdr602Xpz3AJtUl38juYpi/pk0HYWKZtRHy//WcNGHEROmgcepGC9vOyzGRY1+qfJxX8Ka4G2gxbNKvLqrqBjSlQRMYHTrDDGsYBjAs71XrIXW0LYetKxhHqGHoNTTSyi1NsvSW9pYPZAY4gkxWtrU0z9vbRMU08fOJQxc+Syy+gtk9G54gA+xj+zrZX5Y0rjZrdBmGy68X/sBnzCF5AdMtKp4mqPbyQez0lZGifaq47Tf7SIZExoiy9kkO2JjFGs8VnQMdK9nMR0/nKEUbGADCEcjocG6DUGjz+CoAhQFwBBIDEwuFxo4bN+++CUBhAAhHIDEwsVBobBxhCwAAwIcDAomBiYVCY+OISUAQBH0SBIEgCIIgCIKgcvQdCMIRSAy0MCC+M6Y5BcVI/gkYkMn8sRZzoj6jjymGesj9+I2a22/ocz8NNPA2C+fgZtOvbe7ZbLKKuW1NchzK6mJ1Pf/1IF9PGNzuWk+fWr5AJLsGbXx6WqXtz7Sw5sK/2TRigdQEnKWCSwHOJDBxwFWcy/MuPpBExwGTydS++B38ygHYhoswSGJKao0cwRU+cxa87AMKDql645JDKYO+5m4QVzcJ3y7stzuYTaZTHAbNHXHpPfKmuHugSHKiUk/ZPC/TXrC0xqt/dsGQ57sgXd3hs/6nDbLRY/DknG/yxVziZVz+ldwy0Iy6cNfv9o1UVPeO7SRI/Eej3M5tWU/0ydP7mv8W+vb7QPcr3ytNdXF9bro22Y7bj7Zf+/5e7C/73n67/xrB1Iy9URj6uDPOjzvj1fgeZsnDRCrKMR3LsR2VaAcbarhhDXcEIhLDcSROx6U4E5fjZgzHoxiJt3PJ9GZwpV151l4c+73B+fGXExniT6JM1AELXkAM6XgMP5YTZEIWvN+8x96yP86/HmkfeR30BDeCq6FruBPGwn1qRw26oBG6Ql8N9qqpBupSDaqaqtbOeqAPtE9H9a6ua4yag2bZtBiT0RqTSZtKYzeKbdmu2Fors26rtyFbtJX2mzudd3CO+7zBVdzBKraziKWsZzf7OcUPuIzfccG8beSYgWdMypiWsTBjeUZ2xraMHRl1GW0ZwgxVhjlDyrAzchn1jJlUWRX48WpiZWxuhR6qmw57kBDolGzsgvY89rhb7XvJzwQfY4+20SX4OtWreKpuSFaXlECpiOVamcv4JA4/x8nKhM2qKCxtMjn4oyulp5+2+DzPxYtYzPSoPf9Yvlvd4vcuYU3142xsRkmAfbwfK6ODt6039/4JpW8VEqlHIZIunBL+6JmzfHyE3o3mF33fTPtyd+kt8NrwT5yY3tXcECqX0RZRjsN416y3bBO8IjDJcPLMjeX3UFc4USotsEQLOQvWwDz+tuofrKKIxg39EBCg4K6oeW4pSCLqm7ih+kAy7/Fydux5Ldh5nZZU05IuqzLvripqXcA6pZ2RPKH/d7Vhy+50yl+yFh/UIyLAjn8fv/fx2Z7SNsWc2qzj/U7z+cFG30qoPh7Z5qC3Ze5YhCSBZYH04b4xhJmKKLbQSuzNojJnYgVKYcrTV4jLFCCbX7QrsD8wOFpEHcVC6m7/T4/rDbOCMYvv9JxgP8P+5bnnhxblt29k79MERhrZfpNruPWEn9zyaWm9D6Yhlysalgwi4BGLoGwXLltLytTuk/Fts6n1vh2+DbWgbnrIDLRawWQ8nikM/EuPyg9/viTjuTpg3B1Y+hDUoC9ieivGQlh0cicgzznLfcQVZ3dVKCuRSmjBAmXfyhNu9pTGGImlCL53o0K42CnEDXXqbCl182f/Bf89gv5vwu2e7vJ4iWYg3CGwkKTThtD0GoseIwAWO58TjMhWCDTwf4n/MWnupK2x/YCzIig48kILRHftWSKYgi+uRo3xYmrCurpHP+wg/v01/53uutoVJiUQVDulJgTOfnkrR0ZI1k1tENAMdR8iv1SLeO3Yf8I/i8/b9WdwvtwVMZlpeDIIzYdmpyAtzZMJSHtCcxcsWTFrteeNzqfiMmfScU8kIho1b78owsx+mq4uQutyR6w+9Yo3PmDBKfNIugWybM4TIVcd0CWURQ0Sc9kHMwiRyovyick6zb2ikU77TH+AKiu2Gf+Ahqq76ShpCk2KlUBjcPCK11f9dj+F7vSs8H0W2JSabHDxn24YNFev43yHqeq6XfE4R3rTOnZgFh8dEP9Q12qAHDk022XQ1pUSyjS/MSNipVuDYUYp0cM2GyEIDULG3HlLVE2Auyq87HOQvZquGjVgYq9KECHaIH0yk/2vr37SWfBV8B39wF8uFIxNfTsoDBvADTTNVVQ7OCrfY6L0G9yaU8aGZUKY7KcewrBtVffi6ub8GXxbdpI97b8hBoFQUgYJ00i0awM2XFgyVBGcFpXLAuR+2yS9JkI/gib26ZWf37eeNzxCOI7hrUwsKtpDVjRC3jQBB+N9CokJWXc0xw4tO43puOVMxB3S5XQnpNSwKH7otNIEjQiM4uWWjq3nF5hOi5K7xSdq3G9gYjUCzpPda9tRcOW32Y1gO7B4VKSrcYl2suSDeHI+STDgD5mdKorFl+SBLm5wuaWCyjmlZRMIsqBi5kErzkGOJ4nBBsasiHSBSPGEh2GWK1XRkbr0idAO/blDD3UvNXmqJJmxpciGbqkJFkRNIUlDf+tr0yuVBmbNePeTRpvLyLH+s3osJPvlgTLqh3bYTHbiV3M6AGRNwjDRIuSterpZLzTWgcuy62rHrJUFzGaxIq+ArjzfVthhOorC0AiCppSU1uIeWScjvuX2saqaGLe8Fh3SttzX2jZ4L/t29aumKWwl4SBuLsVe6wvvnzl7f2Fj60x2nQvYoDXgEEtrWEGMMhekBIg0R6qwt5tu7aJsxFY80wzcmiOQL9SbhS37pegG7yUM0NERxJnuG9BGqdPXDMtrch5+Nbp6qOhNVG7d8BXcqZcV5coyFjc48CSzVlnjgNh2I9tCF1i0cmNaz0tWcdOWmnZQokq6pKW7cjrIj6FvBr7l+gH1AYTeF4etWFaoxef12lP4cFlvw7p8amqeUgDZqPYsC1MlUuNK8Mrdazc29gBZsdmRjPBrIuC6r/YdOIIzHVFYFJYrS6tbwdJCTvZNziE5kR7IqdUadOyGS3ESUHqK7/9NM3cbbyjUVkSsAOtQcaUIuezfbaVYT2V/XL5KOV9TQ9fG3WezS8MLr2cJBkVOfn9tH754Wao4QR+eb7wYvd2+107VAeA12lEZIBOssvLIFFCpkDpjRTY7Ovv0+7XIpQne3FTbfpFkF4sx2A8e2b/y6YM3OW4SCexYtGl0iDncNe3uxpa942A1SXQP5Cf61mjfYINvow1RZVm/4BbL9Xyj+fTag1N1gDdXtRHSP7w5j1qrmZ5xB3ApbsCAIKQ4zRDLkDfbE3FVSPJxnsxGk+P9wytWacTijZsSdBKq2ytb/prJ+O2mCchsWw3g0mDn9m7b4DN2d5seOaA066UNdPbUzuH6nQfXAunVgqo2ekuBJiumUfT9cxcjX6hdfdEzvjRfml7aBmEgqFVDoUAjb8kGGy6WB4uKKOG8vup5eFWweTsT9ItV3gQCp1IF8dX6Ok5ox9gPGraY2+n1iq7ZkiVZ5Dm9YDs7FyRqz+xpVVUolMUgZ/h2DpOmplbsrFN3TFtxNEArmqxBPWcSCxlJGisugPhwyHi/GDsfHF06QQKjxAP8pKgompEleE9YZHz32WddH0hyGDqskcSu9dgEuaqpMCjrBRHiIZeQsMiKnimZr0syQ+0SvxE9AFhxhQTs/AE/sanpzViT/b1wMD7ZvX1rBxCO8WcNLUCqHPuaarv1pOIBIHGalH2hk4EPA4jG3RO5MbMxXOhX7kx99f2ds1Vs7czum7f7DmvB5YZGY71ArWtIxnOaBSRdxAprUkE9EkEqH4Y6kuSWwazEblObCGPKRPDEqNqV1ZqTdw0xlgornRgwgOezRgQpEMGwA4+rQo3NbYvbG1gBuLaPrA9GzVMv9HbRsnav4EhDT3mZOlKNK+/e+Fx1s1pz/M9+UXf4Ja1DUcdd6aYJ8L++VzqQssWypCkghOsGqraGxEuQ2mgxXrGzpnFHzPRhhCT4J3DIYv5KjPnM8J3hYgyJRUFRERCiihSmv6uN1bjpzcsbV/NL2xfqs00vXq6mMiCiD4gbnSqNoxUtBqPV1/g+LIxqtIXWiofbm1thsPl6Tpp+Np3aKwM27ZYdKGpYoyiRVXwlWj4WDsx7Sn4iIWHC0NlwyGTXXr6wn4uzjyhq6JJ29+I1ABL4ss3q49ZkuZsSPlHwQmoZbRecMh/egNGDZJQi3KCtimV30adH2/PUB1KNGxptAPUUU7ajIqzWOquk8wrlY3tfbHumeo8VEOyryY9PbkV+J1BKHY2KWtbXAMeel6CQTZtybf3V627dbiPd71q46Ddo1HO0RRCRHyo+zBQ6YTv23devSKVABnQx4MJ/5Tlb/kCNO2giJf1rDycrANLWTQHC9x/Z272Dh6XbUfmlokgarA96u5NbV5DMzZEIEqnHX51L1IoVK7ndbzlCfP0n1UX1AtgGWfbL81d6m/JpVqBUQQS48gdViQ3PSvZD+VA4KO8s3VKOzdv7/ejA1bbLR/zvRoPib+DjXfcMJQd2I+MnyDoe/DePZDoN1QCCWscaqmlTQKd1AtMAB7bbbXfVsTEmNmOQ5EIvYqiRay296XeXArEJZJYnNeiPqoaL4seQk549GuJ/GTLKLduXFx+/SCHfYgMfIXRFrLHzo25iixS8ZaBbAuc7Cett9j01p1gzBodStOCUNZCCwIubdyN/utMxWO14HRr2m54XGI7nOpR6FsVAzvk0gLiVrFY4QZKKQSnXCC1RAq4xJbwHvP8Nyy0kkV7GC9pOVkK5M6vCwqa0z74TqahlwTSNmZKWbEHNZ6K6hPrG5FaXGRswXApnlnYWSWn6diVOZ79nOvEtn+Ox0RQ6xrJqA1cxLbjQJHiEZXWqYnb54dX2zEoxAQcYyxtX5JSdZTobF3KdImDFfgmUvYKII2bqGld+gzJ1Sapw1KJKJmbE8qJDxZTF08osFb/EMhMWs+mPDlXMCwmssLjEqUIZM9Ut8a2YS5QME1arzFoJ5lck07VmWSrXpid4zLMi0ww0pN7udPnlN1/hvUYAl62L039i1+t4moKRhtpjPKdhhJMXOPL0MpLpz0T2r4vrH581ODlaJd/z5uxALVOmys4gc4g4tnkm0yt9Yk0AMSu0KvP62glaZpuc/2JzG9suZErr5XUgDRhB1PifHrq0pvMFWDgK+c4wj14B5Om3O0g/F3lco3RR/aQgWEeRUE/slB77cjCLjTzqvCmGSrPM1EwiJDTNyALmpLmIgGrQ2pXdTLbk7vLBQQvjmUcktrqu72KCXYVU0+t1lYKg/gArCHwpVrmaQL0yckjHi1APcQhyykKTXX9tS/qqYwCZr16RoNHrtq9ceWLl/S0rn7jmlkW/waImOdjpXOn4bKbQpUscuG9fGb+xzmZMxYR6klAHLRZ/qJA2mjDlf+3hX0OMsUSsPQVhOPHsYmjyqGpQD4YJCCSMPCQv2q5IGDmI31OLvrQ01dvWVIanBA+Njw15M/XUSGnW/6I+tzKLo9Fj1+xXGPPUprENKxNidYwuiSiZbFutTvZlMVs5l9sqMQaR8LGJZeJUV3OWPWBkUfftVXC87aB2G39YDFYflLVYi5pIQDDNFBxKBlE1ZOZrWzjmgpJnu0o0AaR6neXUqQkJ19loSiYKkfHMwYnKfhMEUXOx02VkOGu+xrm6x6OvNc+9DajfWqqbU5OzpSUNwPN1zKNjWoHzF6kuw+EcRTkak/k0VudILpcSJXaPdFg+zHgJuWznOoTERhyYB5y6SCPWjrpkd39NaLQajfWd/uHWHoASlSRGba2322QquVondGQV20ZoNwLfO7l751szicl4a26KyEdv7bSPATtgJwUb6GRJtSGKRl4JhcO8qCVFZmPBKUkck2FO76rN17PktdM99RuLxKbn5gs3J3FHSuk4aqAk1ZACcNFGkJFaYxvBhvVyQ90LPqguF7fHJZ1+zh76WuBJPmLUuJoaNjBbPhdW4Abx+f51GmgAZIOYVBBv8i7WgQIt4w0bU4yN8UMzmMxcimVAllVR70rk+mJb1x1wRcsWr6SuCegtXmcFbZXI4pazvJwVljqqZGiqagmkGOQkoc5QGbD5S1rE/m9oYZeVhKXYlyqQFwoul/d5Nrp6SiKVmlThv1KiIog52ffqXvnT3xxQlwGT9OGGu9bWtn0+Dyqyyk9G51mb7sw/akWV73//dJNdcvmSQDNd/m6qUZ9XHRhWK0kRVetydUlKiYgFYr/8kEnFR2xXNiI/QK9CACmZ/+YXnf3LiOjMsS8ZnEgG63G1TZsNvzeGc4oeqmGeBLxogCYm2XWeAfNvJLvNO5S/onTtM7bnt9NTY6Rds26C4bbw/urcKix4S9t5hWLznuKpgW+FhAY3TMCEqVDWsJqeaX7XIyBw19HqWn68/u5qx/PVytZMTO8CGZaKfXMnuNX8WinQ8dW260lAKBdV2DWmsePLDauxHGxbE4d0lFBYwuzTG/gjJBPBQ0io/Z12b2eodtoTARgDpdIxSo5+/4l7YUDGSCgX6ha4JVZg4upSBZBjXQOimGEU1DcuUqbPWXsd/MczAA48M4B+0gpp9TEqiOV2NFhVIct11HPA3pfGoCQu+SIU8A0mREVOuSKXZNJys9d6O5kBWbq07svP1xb5aq4qn/nEGlSDh+O2g28bS6CG2abuNYKw7PjKDbQPhnlDt3AYZMLk87dDwAMyto8/2B+x8bvNlNB3R4DT6MZHUtVtlAr3xh0mpQ7aKnJAJSshCpAgdz2uiiAG/rD99o/XUODaTWr5BKoOdiMZ1Y0vug2o1ShyFVF2MZQNMMf84E66z0huVdwVpZcJeHZLG3DV0RwtJ1H6bzdWnZ87BkUEktYTxVcdByuZp1u352nwaA64cpHGX1aA2Pm3jjxjy9gGCbqilSAW9cM8wslgTjApO7u5Dfenl6eYOWrGoMI2wYTCoLyj7iub/VcZdDk6C4sywsci7sbhk8hs18B+32UvzeL7EfPPThkDuoYxqaeNzWhT9pdGnXHObIsHEEhWEMWpZYT7RoYhiGVN4sKs3B466Q88G8K/PDkP9IkN7Iz1rzCAmf77F10WCEy+W1mHfweg8htltqr2EqKSSNuco1kxc6ksA19TpZGFKQrTCvpJwff+YqgZbvttM8tTT5c0rLFVibKgWXl9dQLDI5NSoWLG85xuYziabFhAzljEhIlcrewjQnPG2JIPdCPjGA09JQRnNgLtVExzqGGWC3q32rimghfAFmMmuxwCFtd6EhrP7n49Pikn+aZp86ouacvA1mn3IePGfB5gDn3vkOwjCdNwINloGRy2xsRY2mQHAoyRCV2DVxhW5eUmnJwyej6yx6xUC4AFeVUyJfzK1gSvclTCoA8QxHkuhm18w3WELQ26hn0kcLfuCMexDQkAqbLKQ0aa4sHhljGG4RerELEjFJ+H9wGSr0eBevkxnn9Yj+AAEBlFqaAH6TGe5BUJUrcxwkWEAT4uJRw6HLZjXYjFmShkWEliKEhru1wMFQCNOrbRFVcPSBt1Aqe/GuP0BfzzGz9cW3I+s3JH6d7zPNHtRqA9bJS4IkTpohqK7cI6qzTpkji3uiYyGhZTZXFVE3ukSre9cPlO7S0ip6Bh7JQaNYUOwXblfCEELP1CJYAPUlOVjV22Q3ttPSpzFb4McMBEtXLzVyjNsgKRczcssaTDEjBDutnTgaqiTweDrT8SZi+58DlOCJA4XNTg6pG3U/rroamj7WTT52noPBolRUWR0KhujBe20ZBi/F4jVCOhWJwwKeXeqiF7lu/lHJE1eS3Fgno3UW1k+1QXR85btD3d3fid4lJjHUo3/rYpFQj5gWawRvTge6osbDe2V7rAwld3NSiXRX4eSTWdOV7Ob2nz9QKO9coZJknLzPQ6e/Jt+VZ4Mt1paA0aQ+thM1FdlCP1gXeqa7C620j7KLPb3JG2iqcmK8GUhSfWUbuXEtFXMZXtSe1Z4xlrg/nFGcjYOAWV63RehdtXnTvwHDIGuUElACLra3wCP9kk8z6Kp+485PnsZb+/93UWFVKh32aqSlfTEFNvkIBF4hRgVPUdi4tcKSxQDROKmCafwvL+3tp9tB7gt9AuTstW7Sf33LtyyzO4hcy2GMQ4HlBH3PWx/GOYBBg6pAoCzzBh+wGv0xsrLcud0OmyRYgILA719aT4ChbQnzhreVORUK1hc2QgKVp5pL8dMgHUrY2l5sZyFTOYl0Ie3AKZEO/arV6ApISCJVZEp2ShrijMQSgQTlGz9Ugrm2pkBKqe0ibpmTOQh/rAHv43T2BXA3BtpQT20woXrkiKQLjapGZ7h4vfq1XxZVLDHWtO2+bnFdWc4i8PrmBwRK1beJqSkhdouYDTZVGSrLkdCcwjdqTN9Ne9LNbR39Pzd4rTalZ93HbVhLdXXCCRZVqCgaAr8Gj87tPL7j3n7G9njhWADt4REmjnqRoioDdkDTLdubxDL66vjczXBWQu5CDUuenOC8ThncfkIbtmnAze4Cknur452dvk7onBc28W1MBtfGGvALu64uQCktJsnRNQHztGC4oC8VS1egptGIEFYKWtUI0AhPxo1jBcxcFaEp+t5ZUtEbD9N1IWtncO9q4hTrnohxYZcT1vNB3L5gxTN9tEM7meAeUFsOfSEBcB1tYFzCW0oOLCSvJiuKrd7NS6xIm6O/wtfvYGmRkRmJ6hTbcPrV96dZKYc0uxRmqTod/YN1QnUYBQWZV30MiB71ndge0w0Xx02zV7k1tlVu8PnhVE2BQEaXppK1/ZeMwaq2H9yW2jO5kVAjeIOQT+/dMN+LKlBy5ITd6ND6GVkyUH1cn9l0p1t/C0VvcJqUhZXU5qo/0JIKKDVEucSEAUUmwEouWEXvoJNWkLHblbNbhmvkXKnKyVmaxl+irxlHkwL/5Ra5I9SgxJVTBQwMcrFwu1tfhmdkFyAQSgwNckiY0Rl64mycf2XBdaxDnwBMstw5oUfzL21uQzxDz3RzFe8C1Mzaaqzi4Zh7UjbSzv1cbSQZQhONLcDC/ev/rS5iHAw5nPly+VltPTfd2eU7+qmzN5wlkJo6boBQ0yCh8oXmKKtEACgJtluJp6ALTs2NRoia7QexrLVMRfjfgkEFUqJmHYye/+FBiF7+HvZiIxE+IYVmdEJUI2HdQDDFyz1g8Z3yjfb5NpU4wr89e8J0aYqZCzVD1CY204dedr+ZHwA3nr3NjNrgs3e42TyL+kKQnl7yaf1wD+jxs3TCvVV1rHrbdjPpCNr9wSoULmayuo1SpVxEr1WkYulKtpEAt0bw7Hu4mSZkGtVhIqiLGUikkCcBAAcijrypeONwGX9CUfWlmqmUhN1zXFvviwT8YbCvtLxD3UHczdsNP5nHTQVGI/JR2+t0U7JK0P5LTmTAONui5V9bSYqPqsW6fzUlGcxfUq4IQyFqaxDSNnZi9TJQNrFMQgLI3JJoR78LIpAFfQe8H8NgFSaHZPhjiWRkW09lBpfpXIt4Gx/BH8ouFFgpmqEdCqrzRly+h5gK5+fVQAX6JqVtWopemdzmFeg0jjeBvZice2UQGpMHlDy2mBM91p0soCroBx1/GyD4tOEsKoFHT7ndb0n3iHBclEgKorBFnGKUFWMEzGd9xpIFOV4sTu+q6vH108hVZa1xwrwxOfZBVqPOVBm28UF7/OGhEQq7OKAZhmjNNcE+hyQTGEZTdRdZT1hul0ZzWEX3bNlsk7GdfaTeiWevtnKtqfMOVk1tegShNkeVSCRADUxkJMZlILhLjULCWm7Xl5ycQdqVJylBWKGpQRQvWGHBQH0bA2BLh3lzx1iAGLGksqHCV0bDyP0tzXVOUs3izGtqJIkq1NU70al0hAq+uiATV/cRFplJfYqQkspiM7UPViNi3jWxLH3z/JBY9ZuzfnIJFlu4uzTHYuY9ulEtHp5wS9QlvNZykyhU3FUrzVSjCNuRKm4rDMre2zU93UGNwL6RmwiyHvdrRl+bFONeLAdUsNvRUnTtXp/6mdEZrhQk8ypNZtbJYfS+mJ7TmOLQTYE43poPYIKwi//Qino7vU69FW3xQKX6mieISp2kuwQ8hwKOuRoRcfYcbSFzpdnVdPiNe4JHOgdMFTsco7JUmeJr9GX4pwBzsT+VMH3cF7JZoApHN8GUTX8mlDdsXuUj/tTm9ctLy9XEoYrUnanfZ1OvSVh2GrhngG7h2b22A8MMjgOB7bvhyRiFOuALGSfH9Fd1+DySdEwIph4gg9j4yBh/gIzpdNp8S/QXy07fKAqQpu/dOuGm1hZdocSc5cThCbiapoAv6jjzFDot/8ocOukugMCyVJPDrJtAopaTE4eaC+igv68rTrlyDpI/UFnyK0oBbUpttnn9b/mMxvM5kUNSWAmYENQVUB0A5kArSLFgF+v1Iq0AuUARuBOiAbdB1YAxQDfUAnsBrYACwGHQCzgAqgA2gE5gHdwCpgAFgIbAU2BWwHtgDbgG+CHWCQ2XlgP7PnwEpwABxiDgYcZv4D1oOl4ARzNHASdDHtwHnmjOAiOAcuME3AJXCNuRy4FX49sA4YAsPMbcFd5g6gB7SCR8z9wGPQr/0E6Mbv1Ay6+wnqFd4CevABGsLbQG+/gCPm7wEd/gCngH71h9OAp0D/3n8oAqoVXhJQDlSZXAJUgnerTQdqAF+ABMxVeBZQCBSAOcw7wFv35gfkBN4ErADfPLAWfOcbRAcgUAhoMFjobQdeXB7mKJfzlL+39BHAl+uXXvl/so5N/2RJKH9Sj7U5/fmhxseQzubqP3GyV3+yNnYcHb818XdREE6URRU0WPiFd/AeFsudUi8d0iU9clrOeDmvwh/o5/j3I+uDlACCuSAn/MtJnGbQK5KQllx0mWyGALVe/0NHdV5P6S3mr2ab+WTKzRv7k31i7dbLI3zgMT0qi2XGJmM/4qcTH02OJJk8mxxv7pOxZi5nVO+uXE++5Fv+Yx5b48U9xfcOczlXcPvO4MKlT5b+tQ+tuuv31P/sfKK5o+ltzbT/2rZ2/tWxdnO9W72S/o/9N5O/Tm6fLE0+TSV+8sNbXT16oe9i+pq/1lSu2V0rvLzm8quXT1xJy36Q8+DUZC7kKtf+3wTt3+9u8Jn+3Y2/nf3vQ3mz6dxffR1zIOSnYSML3sXCxcriT27//tLS8v/Ie5LPW21f/bWCduFHC+8WLhedXv89qlOx70Z3YzzaWNKxZPPmNyX/714rdS/tVPpqx8mMNptWbsr+FKedkpVby/m5k3l2ZbvKPpXh+ZdVn6iaVRAKSSFYeJ1wi/OFmlY1FyqFlX+te6L6/1M718+snaSNq7fqUuOPmz7YdKn1VvOXrFNtmL0QE7C72H5sPKdJ6yLiibarbQvtR9v7tP9DZkmW9Mkf8ydSN6ljtID+GS7VVeYxeC15vXhDuC2O5Eyuw33H/wX/C4KHBFHwBYfwSsgV6/t90ZD8jPxnknsURvk36eelRWpDlbVPyWq0P5V/Ux7X/2ZRT0WvsW7cNd5R/F8JytnK5UqbmZhr1suWaF232tahdU9VUq2orhW9J//ZTd2+2cZKRJ1qsiurIt89p76Ke843onpSvvxW/hFv4V/zNaJGxERCpIkMkSV5sn04J5nLOXN/cN58M77FhFwvs/VRpThMfU28hHnkBZWKr54RT6h3tX8vLZNeN/8snzE+biwZP2h+2XzTes76Bf1LesLJGDONa+af3H+2Br2u98D+tX8nmA+3w990RuJ/m5qXWpDKia/Hf5w+mv6lx8n9X1ea6unfujvZd2XLLaXdbnfb/fawPW5POjc6XEfoSJ2d7i91Z3vfVXq6PFeBDctGh6O36k+vbU6+0Jzf3LP+S+uP1rsba6eg81dTxVsT7i+5X7j/5+nxaDxaD7WzsPslb937ZW/K96Ozl2aUfmHgSOB/ULBUH7pywo/8Yu2X80+iumggmr9Tv2uIfyauENNH7xEqkRJbxJ+RWEG+YFCwST5PJol/UVgvfEg8SFSTv02+k/rctavUakpIM9fv03/Oo6irWTH3H4s+5HZz+7n7+W/dXimyd36VXOX5yn+8/302NfeT6t99+Hn+9/N7Cx97Ip8WycyaeM32n5fm6OW6L8pJ77/t1m/ojXI4q7U/EMXqXibzWQOct33KO7p78qQWcK2sTGv+kkDXjNWp2M49I1Q6L/q2WHP2BWDFnVwzBqFVqTVW48phjWgW1QgAq2uyBhveX4cDCDiwzY8u4tMErObflbyTvAPyR09/8Vrtj228o58s7AB/nZZNdnyWpFfGOpHuAfL1l505dxgxrAWyDzLMOTeGYxpvdRXF6aVDVqrJGoBWyAWyvl7CNcAdbjReNhsNNjaI79ewimqdXvT1XIQQYG6A9LGwTo9MAmeLkxvgZkmGleW0z8L4QB4biCACM6Q6Nwwi7OqW2+6F7+lOABJYISyTmeKVOsaMDKH829PqIqiLLw7X2FLIcZsqmBjpU8aYsnaVU9rmU2b++BFIPTHEGGm6HegMNZ4tcybgY4uhCgmKaDXkzOC76dpWsK5sS4DmV3nIm/OcndbuBmHXfJJvsTD+sdRuKFZ2T222Pgk0olNlHwdc6GaACrecfCB0VwvmHD5TsaSkXlNAr3mngRIfgBxbDY9VVFEFpwHK7VYqVwELH0G33Wss5cPV1bCslXILKfg2kHP+5RrUnzUSh50HK+9mhw+RztN6hTnR/xx32e/84W71GRAWuNBih/zhvlsGCENv0CWHUFbKHqtMJRP0DHYmvU23MNgfPIPzSIB66UhwB4TY6wYiwMKof9r1UcqjlqO+UvNJebyXL9okq0QcOxkmOrHV0NzS7zgb3ckuv976+mx7Y3LTnPnCfrNBJCWLbgHtXWurUmpJdvGoMwoqk+sm+BEgOUqR8UW62ZzHXHreFSGOx14FDUX7mkCJV7Nn0dVPNN/mu3d7xD7XEzdse8+Wzfjc37VU5IZ4LMe7kiuCMRhfJ17Q5pJA4mriTy9/nV5OQLhf20HsYMeyAzf19y6ZmcJig9+S6m8UNlRAndgQN+DZ05p5gshG6UbPSKFmKoKGvl2rA/fIHzQtcaKNkkSgCpWwBEaRe4I9m0dz/naSkFW/pwPUTGHwvETmjRclZYYI5U3VYsUcT8Q9XNxziuUgIGikhWj8/AIafZRmBY0jM7GUnbmFLFBkP5r6QLWpAdb272zUNGoBTDNqR3eN4RaowxPBagWjUW1Rcch/v7zyUuNtMhs23/gIkMQfsdI4V+a80am/guRmhiA/+R1MghTO3rpSA4EMWng7xLo+Y0MGC68IMN/7WpLVtlIHgT7t98OjKDb2GhTI4MyGe0s91U8bi+EWAX2ShzuIgKc4roCd7Mz33B7K+3X3PWnvXZu1EDjwb7N8QIvLJtjNUItzFCpqGs5IBcCC9itFn9xmXf4/dIhriZBnqyUZ1pFzGkHh1yudZljbjoBWtUMkXOaEX7xdbErxhW9KFBMPjPEyJ7HziGbku9OpneY97bc2JDJDIapthguGa/1MpaP+4q+szFdH5Op3URYsmnPCFAns1NnkU3GkZ09orWn62jd3Lu72nlLxexunYJG1Ya8AuDOBmsAZlKb4/XkH5Xpla0DjDlGIHJYzgkgUrKTZ74x0Kd61xe7T0lZrdvkrD3U59jYXwxBxrFCQIKJg9OMIyYq8+ilkjKGQk6lgVrxzpGDX1Sha1RJdSeo6jiKtrTbBO9oz/FZp3VAju6YpQBpSqYoSuhJgX+8vamqDCxuq3Aa8TChmHDlW/Youh4ZKXDf1lZhMVid1UuHblWYO0EHxUEIfIzZGHMoGdK9ay//aOOlXV4sikKS6wvapZIvQAU9hCQ5I5NyQkSWnpIo0tlaMxK5ZFVdtk3bYIoC4fJFzmvdNv9gpmmwt+dG/EdyAIpAFWqNSks3wOXndgtrphouiZyv3FAuQx31ihYZwBAvZMDSRVFm17TQTH/P/WHSwKtenDHx1uxjtpw6rVmEZ6ZUpPz9TRfahB/1nKNgXb+5ijOxxmdQGTwFtqiLtw7QoiRoC9fzx5xkXvEwt3EY6bKk0J20cyD6NVWjQlzEbBqtIfp3gmBgtwwvvaHv2qzDjxPTH3ITZWDUBpKukCof8jlRCyaAuyiJx+Lys5+vxdq0EXOSEWfW68pSK9UefUzldBRweqbbr8wMxwoBsnE733ZEKZkBOWKuktOnFjh+pUS1Y9g2jotCE08QyTwDdhrM21PkrQwq6GzGrk5RQkMRXUxGAwkogvxpfw86oxs00akFFXmWXXMUfqHhMRO15Rr/TPzXHsDfA6bN+XMFHmvXa683j6P1xLxiLyb4os9qZ01fSVCpjTriaUQj1chJ8+gmzMxT8Dake7+S+C9EbQjILkBE/bDlakqLfbu2v7gABfwBPTy2Zaf83aFabWmtZmf4ddn6M79SPrpbdU1GqSYnovxh+/gRbAib0/300uO+LdzdhW6vvXEZWi6qiGYRRVhoB94lK9b90rkT99iZQHjZ2K3PW86SXaE7bG8cuMMdG+gAu7135ygfo+hZxZDprXeEzeeufat9iVH+48h2ZNdkXj9K5Ao/W7n+jnXz9f7CmxDivEBeENMmyWUkXMBvNOJILtTShNjKyTlsKARilp8Z7FwgJBwesZEEOMYW6TRjUoYW8KWFWoGs4YanKfPYmWrdl9UkKB5TYXunDiVO+ZSKIKaoMMbvKo6bxjAuoI37cXIKhmt5P6Q9qMWL6iyOoAawnxEN6nV06fP8mQKfuCwOYKGCSopywHvvJcBJSb+OxRA3427Z/+Lzp2kXNNRO7thsKgX707IBog2dnyO6M/8PfLged30mDZafp5iYwA1eHTejpTeIraIVX87JfEWS3DYKgSm5K3d2OomhGDMgL9mGtQazxO+u810A4e1eqzq9+qe4OXz8QevXVkSPmcoXE62UxX90GFjFqfrg0li9ve2NoZ2XBQn58TAj1+BARufLyUqCKgEBIBLFTjx17Sm+a+CP8wcC1mnI6IaaVWHd9cHwsvk7PPx+qHeZ3Xtrczo+pQLABWjPv2OK3TVk5kaP/sX576na9XV0v1SOVU6vWqmDskY6cGpmhU4fmAXQKihyg1qms+B4ChJwrDZrLX/M1maLaLYacT+p7w8rveoc1rzNPOYmHpdMLRbIqMxogW16Ka7B+5/71L6L92VKnqDGlPi/jwHUvh3NaW7PN/APqrOrYEmAZcGj5ch5qgD6eiyTW/fHLiiY1JQ2DibypqaxqOqnD0FOloD8BDbXjjFhJ7lGNgtTgYYyoyuqaEb/ypl5pUpLECwWPdLPrBM+p7Fwq8FMvfcG3spNUq5IC2B7egfTBC0kTdnX3hxcQaSzbjjsXf/+Gloz27t4e7eoxF67aDBFqyvKVKxN9bdUtK99p8tUR1xIey7oAoEJH15ne3/y4BvnZoTNW6finnjU7vVvRo0zoVv9ucpd8dSAK3pr03AdPdt1KK6X/RMa1PVu2sE5TfNPo+68rGiAr/sCE/7LYQby4OOHH0AVfjzOwLg8YaVxtzPlyLGBaEEoTTPe5tA7r64a7zyMNze6ZMIRJgb8MBPZ8AZLDFVUSl6fixvWZhMF0RwdcMZZimKmqaoruhl/Hv5v2K3Z1eOUw713+Sr3UpEvn0ltUS89vAb0HP7wKu1X1+X1O9drnwsBSugt3LDV+GBXImeTD0bJeQTm1oOB1UhbFWFmH3MWPELhx/wuz+btnP6uoW5fZhY3o3uzeY6ulYeA2PX2rAIWi2F9GrVLFbGdv/Fxxpr+7e2/Nf/vW5nBPPgpBPk8WEsSXoH1aIKiWJXzqcoUhuDMr8zIbISoDPrmA6+MZeRQNuuvakN8qPLaf/HuDq/K0RAX0lx+8uogs1MJJSgHRQu99uq3NOUD0ItbUPTcS1uX01BdzigMHVitX9XNYx41CgIXKutwetHzSEVtAwhs7DPterpkpywo9NZNN48AK1N0wMsKExpVg3gVyeK6LwSioPpcnMwlR6zekdvXki1JDBDyvKDw6Ro7xrKTI3BMyrBn2cHgo3tT5+3SoAjITSsnmPaPcNQ0SgqcIOdB+cM6vsXFPNc1zVfX0QJwURMdUo/wT+vdb+dZTnyOeelHft+pTaAZKQNiwdvXrMWILoRLAxdNuaxe1xnbXtGNwfVJqXo/EjRUvtjHNvP7Fbu5gR4bXwKlmWqEhBiTKOybd5Jal7FxeyRSK/KcX/oYBB0ZzMd4NraWkZ4WDsT8IHlUj+ps0AnlJUhEcKxK4xAz7fA9Mqy/323BF+srclLgurTazBKF1iy69k9ktv6qPxFvzlrv6xa2NdAVY6snzvaGbr+iIO5McTvoAJLEKU2q3NMcNza5KRBKUSq59Bau5JQ0QeTXv6UEGWDw3AWXhAXvCnmcM1Cl1e7akO7pGvp4Gp9h3MWh2VAaptFa93NcY7rA1WO4ntOTF9Pm9S7VV6cvD16/b/Oy+fdHVoywQdFlT2JYnSo7lN+OzF3Imtbp92BRA4Oz8VJj2uZVMtHwwdBv777xsWcialW07ua7gzzOyoOuLhTB9cXnDLOwDgu5v5Zz5DF8CE4nFoGOsyZi2NGXxjj3ALeCwOdOAFCkJNTTg95sYB3bSf4hOveq2qdFSnBgklFaYMmKu3rNs3fMdxRcHfPu6DcaAR2bnHYlE6S7RFOXjejSTfh39E3i5pETJNRHqKWndh5Ztsx8haUZJL8F6kSqhkUvfIAksaq3w/R2psvFN2+nsulEwABYMPm+fKDnAC0hhadW2mAMNbTBm06h2oypKYjNAgli9s/XCSWsasY/88S5JrN3RQDty4D3ZGjeM6+Hdl7UIMKYtWdDpMWIVGXEp4VoLb8+dKFg721ycae/rnII38MQkaunht94ECG2qbqr1/SZeA3SBi7K12RVDyq0+NWP5v+bMb2/ONfcyKubxPeVB+24nxUeskxZPufbbbZKoFfSf+RLfwidfXWhkfCUFpvMjbgRlgLhvqq65bkZOmn3KaERyPUTG7ik3QS8QpKJ0/9IG2vMcpchSjPJSUYD8ijBy2G47AurTP4wprJKeMUFAORXuz2u/IZthDXyQb9EJmpAtyrisf85FRLpk+PBxkBDqMmZH9MWzB4CA8x0JPYDPecUq4MJ8DH8LDuF2uMW4Fs7B7Kc/XGdmwqo4dB0xci1No7t7mvZnr4k1p/Q7ifxMcrqRCgPRq4TnLD1kiOl/8WMIPfF8DQ0DEJS0KkrB9MOTaJ8GdPLx0WH4Wh4pua4p4hOGX0sO9AY2QooRGGEBe4Bwr121diEct8KBF7mRhE0Ibc1VVasmA1EDBmO5jHHywdz0EEj6H70vx+zZ6tbVLtgc/ZObl2H9Dj/8ElpayMitIIpFNA+st60L6B2GfqYi2SgZM0xR5pxnn3V8RRFEXnx2boLlRUmWn7lYbnVmwR+IDz043+zTIA67coeX1+Am3vtp0ejsLo6qNiBwMR9l0h8xHmL3GjctLz+ZebzYllD87A9xt2B9SrXH6HVH2a2pMi01LF9x7dEiBop/cUeEBxrc6PNoE3uRm8cLwRW//VobKtzhUCmbMY+FhOxbt+3xJjBBqzOpPXYu06YP3NxliCEI6ymusPZElicujdA2syBrOTSTwe/94PpSAf1g5GDbqIqrpHq9hFs+d8NKQNkJZQszmdGl8mK85b/Ve5jcHg2dra/IrqIgMnYbMDNVqQpDqr27GAk2VdFZ5vAUb9Q1zERi2Vh2QNuFVMAz88F+39rd6a8lXacZ9GsAqpKE0RFx0hDqJbqpEx1AVE6+PNj1CErlXtZk1zOdb6p9xVQt0Ve6O8ACCNtqs4MteqrFyPqTAMjh76caeccfpvfuX9o2CxnIpYw30PGMXUBQDgs4Z01AmsM89OKOUkWVvT361G6SGif39qXOsNR1fmfF+k7gZv1OTAu1XXjqCAeCFgUPAnYq0ljrVNGwEOEqzuHTJ6WOqUx1o3warTj3lKiSoNvVlIYUFJbMDcW78kM+Qm/pk+xhbIjhaONP/evFxgaxVVgcv4DFjCB03I0Tl6/EyU8+8+XAQrZFmSBWIoq2dOZpa/fGJSavrtCABcHQjUreTqTrWs9XJkoXKDByBL8FvcaxDtXYKQUIylakwrXC9xNxV2++C3V+GkvdeQ9IWH5Hh56+KJlDK+jywkwIWLaOa2i3NgYYvi5BtiD+ehK7gli5BgM1x4xwzNdshJCjFrbfogdqHVVWJYfLKJwpWSTUvYiPQCN5YZ2EGlMkBmzb6/U5dJCfLzWM5zz3cvcf7zFVbdAaFzMukJf40bt47edOoDqUIm7ZnrsYDgFMYQwnh7THjrNz3Pq+FlN2b+w3G4vjM2CZo9nzlmgAnqJUQqfHm2WMCOV4AbMiabvp8rq9tbOes/TA8KyYWSBYO6Nsylv74AFl6k7wLpOf8x/uv7UZjv2wgNJgujR5whx3NxJ3JG4V2lhCCZH8yooflYoTvHg5n6afuTTTKuan8xdn8YvNK4Pzh7NHK9/NN/bbfDlZXSFr49/1kaAwrlaaqE7uGvQFrZKj1YoldILCCnD1RRY73+fFbPyR1X9m1FIC71PVSPfMnBLA3dj2/JF8y7gz9K9DW9+uHkm/Gw8pP4oCnvSNws9A1SJ15rJyqnurNtKGhjEEZf3mkII2Hr9YTkn/RvjtD5Vv6K+IXXjiWKrttggIAEmURBH5A3FPuA76h7TEZE0xqFsYpC1x3ItdiiorOgI6X0dsQOUpJ5NkFBe3poSZgMTJBtvP4ZYMm8uldjUJ1Ax4wPFoKmI8H0tAEhc5LhCxGBtSQHK0deSKe1YTHGwdsYYAUvNPoyMQk7wXtqJqkjsLLqcOUXUFo2rtqMdBt15z2D60skWACbwX9TSR5ao1sfP8VvZevT4RsyN2O+309tod/3Z4p/SGGCidIk1fn3fKoWC5vgGDoSjKoh6c5vRGGhYuJPGXz+FMOUNi9PNKvTi788JMa+K+/bw+BdRgU27Cs2dMYwfV9dH6RAbtN1+Ey6fcdXxEQ5KYzgf/Ickt7xmtJA1KrX4TWLlQjaFb4cUYLUaOVwf5NB+t3Mx6ZkUsewupOVLamm+qqmyUtUIkKbRIRDwwo42AFlR7dScUlpeIPiUCNl7ulOHuhlfeeBa5ft0UK2tyPp14fJL8xDwmneLmu76Lapw1GtsCaA0ND5ok3KvWohN54VucbbF7xRofQACjsOdJ58foyJrkG1ybhpkRMw0M5T50y9hwkbdCVM66tbPViscnoP7k2sBiTNeB4/k7O3vUX9lw3KyvE1EyyoodrU5wu5Oi60uKxy/RBUEr0so3Qu1cQTJZWmDbYSMHWDIrydDXP9jPov3IyT8YRq2zNJQtlfAFx6y69QuSDUTu5SdYxAKisPcTI6m7dl6Tr10APJzqVPS4Dqkx6Ux4tTEfz42X0nn6QVbDirHOcI06oRv6LoD1ZYMGpkA0BhpTfO/m7b4XSef2b2UCmjneNU1MbQtj2637FbfUwQRe8aTVciiAkX675rSunp8fceYtU8ROc17lX/Ue+kzYH2lN+bKpcTtzhDeUoqkAF/otmfz5B9fzKkrVKtj7gZOGrr/3aHqpShWSuXolbZNzvuAuoIp6uuoAA88PLBiLhV4ZBYJjInMNa9k4yUbT14hN7dJp0ajijLgaOHw5mM0/3/uN1S3jTkuw0Vs/mXx0HFjsSb1uiB0lj8MzNXV13zXPktUNOKq/OJz2Jf984eQLJ1U6F6/SdXcDlrtICH6IffTDx1+6SNWNOqTOt6X+ir8LHFBS436tbWx/cdQmNanO1dWytEWINZCE5AXXjrVN77Bt73bSwsiL9XGmRXFPfcPQSqns0NRteq6ndpaStkZjX8kpsjKShv1m9KGRwbBE7LnIVGiZDoSIDNpGW1ww18wFbSNfSNerFb3dzAs40MerlmyBUsTfvhuPha64LTQJ4EZO4eQjkHDSUcon63FqderCH1YC3uFVJjBaAZYPwKPN5R296Q0yrF+0ZQKcyOq+AYVSXbRRPac107KHd4b/9eI2YFPwl59t0I18dwou3bOAWVNlFdqB1NUQ8MuaYANiLfhl0ahf6zypwIxlOI5djuSuMpGbVibLGK8PascMxUdFa4P2rUe9rd2jJtNeJw7dCWlX0nIKChCW+IYUA+FjFwxepmkvyyH6VWFc8ks20CPZvgy7O7z4KqqjN6sFVazVqv51TpEMR/O11GjtAflsosO88vuyXVYVr4Bj7We4y/yV7MjKhdxa2myVwyQvBspl7tsTLRIjs1XnBnAtr3HwgmTXCjS1qRG3D6QkE1t6Q+X35eZLk/ZJY4OaUF1qQ+wLRW6PWqQbLMvjvMAIAPXpqkikotSOfGAmedtBi08c3Dk+iUgaxcq3jpEj2uPFyIUthB5xDq7Zn2zLxXh2ynrNh7ydLGvY7rb0Vx1bVmji4dz0ym/9ZPN/E8On5zuoYf5LtN+0C6CCOfRKqEKGkQQeRckSFxeUT/ttIuyKxL/x9f0MlzpXbv04Ryr8sSNpRTd1WhZ66Ywv0N6qDtnyhg1I1QlH7N+tYAn6hLgsN2F0Sv3f9/Ce0nyCF8qdslgCTCKvqCxvsx12RK6bHHR48Y57FiKuJudd6eCZT7Eb/iBPx7NsrokQe75t9VwcSF87Htv7JiYkKGVAdQomKGGkYkhCmC5LYoqos/f9QdjKYuqinOy3hPRmC3cI+zlnLXkmjRsT4U+EttZSvOP1/eKad+9hg+o4J5+1XRDXrpCAVaOW2Rh2ymTT8ZRUS8qx4Cx3QvOn35q6+NRRhxhbGWjQ5w/kHBrtLq8PClK5XCBV0KxMr0ABxgxFicXOdZWvFe9pDk+V3BKNATHwkpny049pZnNn5tgfOtBlLF181v4axl9ImuWmCdWODqK9pjZ6efqRo7UD42ZtrT23HXL3dFdqPg5oDI8te7jaamnT1I5DvWvvLLb8IK8YmDOjjFAmn+q03xRTQIaIcTNzXCYm8bS21dZ7ipcSe3XsW0CKl3fKsLdXNTB0d+yw+0Q6gUt5VVbBmcTuDiMJB5LPspXKmyIWL+fXON7AgVQr4YrYsMvA3qGFMU2WDaUpmHOKQ+FaxNhqI0lo0/O6diuZCLeNTaCCJLosyGBIQdeB663BvWRxq69Yh7je28Y5/VX4oBgOQpJe9nUYJ4yn9Gi7Ssslr2kBK6P9XkgANE2VotqzrfiZBAZkTcbwLyCpFmjMyv5OkKpNy2lGKSaqphmbx5lTMFXDxHFu3zdHgWoU+B2kblXXulum7mpxHIqpSmISSRHvP17t5Lb7u8Ixd3xzX2/IJkPBCC7xhkw22TreDnYzf4vECuV2VuM0siTZOwqnFQ2TlAVRCO+Wu2oMiAgdkR8Tw0DqSawYuNcRsXqgD0oT/wUglYrBbDU6/4a47qpgqbjdUVrXPaCRgL4YBnizDcJJS5q6pn3htSqFPPR62MCOqFpyYEQlb+to83XvAp+GqVY4jI1AagF1Yr4tOECq+9zeBlybYxXn0FLRVuP6PM6k6ycCUEQfiC2YiakkRSuB443DJmiXXHgqNhSkHftxLpenRAQLomQg6BYUig5uu3b1JXMH33LCNUBAI3z4sUtzcY6ONQv7uPjzuAHEliSDB4YD2T7rDaB26Tgmapm1VtiOxE7QVUBq0FVDhNA8I1p715TXm7RRC+TNqwKH/VJNkcLaBRxc/pzff7YMOKqm1GBA9syyDYafHoBJzoLwWWPzgJHMSG/qKZ4R5HtG2L+rzuiKYVqW3mnQAc+TicdMIr8cJbioXv1v0dv/elwmJ4Wm6fCaLmrZdGTvwtCfq5Sqy8rp3l7PrlOaOZOPO2oYNiXXb+Bx2KN71BBIgfgAxNX5POQyV5fOnPw92vK8Y8sZt0JUqlSYY5upmRnWHv88y508uMB/3KN7KuDyjZIPKzo1KEqUa2m5c/Fo50i/h6llp1cbE1k0U0mWgWuSfkJImbVOOJTdD6goYbHsSu2KKdl531VV6Wwm1cMqwAr9ehPmRawm/tGosz05vH/DU1hoYXLe6ziMizY0ioRkRXXKV16w15kStlArbC24Xkm0aN42vmrYjMdWPslQyvmxxIFTUlhc0YArL/Zh+K7xnLU7bDbC56/HldpPTe7QU5TXY13Z8Q3OJ55sGI7VTpvDdmfQ60y2A1UxCJW3b6yXdzhQjbf32jJIG57ZZGC+6tdczlrAFg1oTk/opx9NSFpdw+pbt0q67fmyhymWhV8WF+bW2lUtU24IQGIUCbIcrqODh6Wj9mZg5KMEA4GpahykOVkQUZQqlJMy2APT4SEeqbGcGp640qzKLCXbiiH4VkXMeTZwhSCPOWuyoPmCWlc0VOOmeE2tY1hRDkv9gWmGoeAJjed93QLO5l87mIEtckVo2AmuWgpt9YbeIDzuf3fJn8ZhGKkdhWTiY8VQcD5v3ZC9FjomOk1HY8NKw3G4UJIsnk2F2Ny0XrV95IH9WuyEg/jdZwVhtRglP/n8zPL5miW5PboIPAbdc9hM/CAa1gARc+X/i3H+rFG9JoGRuI6w/m0gwUhwz4aX1WyPUS/+tfa+GFGlSIhhqqxZCbLTui9EAAoqZoZKvMY5VTs7kbf8Lu63GsPbh73x4WA8frfX4zdWVcuMybVmTEE856aKL+68HNJtPXL7UXp48HuVuGN39sxR0NKDRq1ZcVcMXQP3q5/f+7B3c/HSDv1TVvO43qKIb3M1jrt50/UWa6KBabJD7O4Mqm0nY6qWbPON0oZLll+ZXcWLa8ClmqcHzxz5oqPUmfc+KPbyFcKJrYE6iIeG6YdDp2WNlbaWZiM7as8akLGwpL+3Iy7HGwlhoAQa8YSjDa8MeRuIvEAEOIa6SRWxQrWkxJWfM1cqVzvjmFMfaz9KpWMfd3rxiNM40HuE7OywYtbGNiwOc+oQ1VOtsNFZ73C3uPWlA+bAO5Rj3PDdN5RI7nYf8BmPd+tX13YasgYmzWpXTcvNUggS3sWUgniwl5ZRXK2YnKmM+mvOSDvi+rlb5L31bMaRUE6v6sDEsrsKRNHYLaGg75hsiqG1q3ve/uV+yd0i3ItEKFdNPi+6y9fKkXRNbN4q6DWQbzJLg5Ymq6IkcvFN0SFARZf78KlQqU6TCiLcyJfOy0QPpB/3sTP9c5Zg4a5svueCabLzqstW+lK3y9gadS5rSxkRiU70QGhtuLa90OxkNigzQcIp4T4TAWib1jxodlZq9qUEiS2GS0NLUBZkkFwZT2T/C2RXz9ufCVCx+/+0MbGP74od/O859pzCf9NDClLEe68zaUTOfsNUCv2TmToicctpAMmxWXfgo6ZFDfCYzzANJN/bP34nYjKdrUqR4ZqICen3MFcgLdJGZq/+ggnSZQmy7YNK0sBiogH14ANABw6v2ScEvLzTpqmwbaZVyCLzenewu8qyQFrEn/+YAw593NbBnmtAjWVADV5t6JVZXjEEDGsgNeOrFC0OjP1NS/0kXZA2a2Fmt/N33VyovqABLyJqhVFCgcTzhIcRQpQ4dJwTX4pI0Me/fHUAI9wx8ht29Pe7vnIPKR/cNyWt19ZL652ZBACqSilyhlVZ6yu9+UjxfJKvewoYuhmTBVS/Jjr+IgojSlVsS21gSbfkezvPM8zZmuAhOFTS4PzU6452MbQ19IfSBmWZ66zLQyUCMuQLuIsDUNLHXApno4fCtmrGmVLItQcJyEyFTRUBpWkywpCYrASWp3A6KehFp9bIpVl/u0avFuyo5uS1b2v7AJWo4grbR+PlVgHw4WIC0+BJUuVioVzK8JjcyzGugsf+YlvKMoOicsc80R3sEocACgJMMSTjF9wJLiwk8A+ghXSElxgO7k//AKawQtraGgKnbGMLURD0aqn+VswRfaiPABhbJzGsgnfytJpjX9sgTJJ1LtgIpMuawFNcY+kWdlQDNKopURYQLJCA+38WzYzJCkyIbWlb03HG0l1V0xw3IxlamzC8WfQo25LPwCYBiAlNZfiRKSmhqgwAj101MatYsa9nbFfll1JsJekhPlHGIgtwTR3HZmIaqlM5nB8LWMqTmz+5TZU/6TRADEpyIBU2CpOeX8R+ivLP1s0Tb8DuYLTrIxkhRw2hbPVPdzDG9KBYCGQJwEweYjX3OuwyKcUY9SLWBK/owhNjyRRJ13mZIfbXbikAsSRayPVGA+tLm4wlHap9gLUl5syr69HcKdHhPrlENYsLU/v1JST3f64FITEsRM9w8LJAKcPZq1uyCgziiuXAng534eNoZnvxyEbhgHtEgXLf0QfZcaAAUCEyY1lvfPNTbV3dihG3hbq5HUUW9Of2VO2CfqPY/TEm80E69vu1H9pAyLQjjeQLYUiQ6Zh5KhRCAVl/m8AIKKB26HftmgsFk0aW/tLsXIIuXzGnJ9lp4K+8WR1AO080F03DX79IJjtccXA9bFVBEOtFF6/fYGAsFukraLOXLOyVwB+2MvXJdTpy3AW7cV0HaDjYyUJWLLjROiAsSCm19eyMdYVDEMs9+LwF57C+OrJd+8Bdw3uyosgEZZgpQaR1hRkYuaMQmAJ62rFQDfK6FEu05E50P7Fprm2Ck6meFzOFAf2Ny6xyWdd7rubPSKa/YTBlX8SzBDgdKokYyhSoGkQu5aPT/uizSwSofZLk4H9i667CftfWg06+vdCBy+GGHwhABlXDjpwJSEPVM+xe/qkPdpfZlvLYSLoc7DGsKpkKBha0Jt202wVQTdYpLI8HE9MEVsnwbEblnCplveAAKnPlcmBlPG2lzSAAsQ0vMp1OXoCI7vgRZ6K/TduWapAQ38CvXZXRPd2av+ulvUVeL1qJUujc3Seo3312OERUF/0nAizQOuL5PjDohB5keU82LUzYkdl+ZR8j3uSA51UHf4Y2b9ItwNingP6kCMSDC45rlfaOCxaIvWeKEEEJK0sHH3hF1uAFUoOROO/zaJDmBYNtb9hNd19IbtTMFtUaAnU4l7wFp0Xe3IMvvcjyaY18XoAYcuN+JbFuwVMBRHh83fdZt2/U3WBkRtbb3P4PaRL5pu3WtndX2S6v4VMtQIDJAqntwUkCNwRtOcaCjtxf+RjJbpxo0RV0NpE6xQlHigD+jyf7qlGm8j4pBUvwEyTV6M/KZmBBMPXWTQzz8lQ1uxchHTaY8RpjwKT+FrTANQBzvEKRCbJm1G0w+UDjooXEgdDxvzQJeo2xCfYwYVahIWStBHoBFcs76C6Yuy3tsmN4KxRhA+glqVUcCqldtcKmw1OMadZ9aFuCQ7qH5HWJuCQx7TQagEMTtJ2wNZD+WJZA8t7Raa8Fp19ODpsIqBirqJKagqmhZqgmF9dP9lxFhSEItN3mzV9uolKMu/Eyfkni63UYApyP1eWnr3M47M5x13gHUoDctYO5jkEMEAeWmqgLam1h7NTxuSCor3+/9v0cQqsv8x1YGjfMNgKKQqBYbRoGeo1hqGkwKGmYi0Z0TEUr+ydlkBOc71AYri7CQYoRIuQ1GSIdKg0NNiJt4TQAEum/IkHApsgojjCoELEq//IeATu7QmMVs9KS1ygfzmCVBNRW2HfOiG6um50PdpquZrkd4tXeaF3dB61tt4OAlRF3AvtKD+g972w0I9WuXzwoQ7FMkMXvE/o+mo5cJHAMCa+RvRusSt5x8wzPTX6Nzzqs6qSrjI6TMxCF5dyEgoJ9Gu9cHmLBc/ws9ktTVr7m+BxlxFhcDC7HVuU0hp16iExN2zwOnKHyMGRNRktT5PAY/K3WEQ3abAej2bT9LOVh1lSunF4kBFxyUls19FbwOfAORkI4aLWdZONY+cELzkxrgoDL+DblQ8uf8LjZDdPQBYOQd3QepgrcvxzAJaewkzK+u9SNjhLMBZsBqrJCynppqAAWnMDf42TzCeGMZz0ZH4E7321Z1Z3pYVB84N3y9X2SztzWkgI/kzjnPTruSyi3JpPLY8XdTsHh9IcvQ+/WrSBFNdsbzMf8tY1tBm2odi/Ff34e7Utjv1qE3QTHY8Kj7tjP7A8iYjSK82MHv1FcOH++3lrYfe8mEFJ1MYT5RLhpoxWLVfc6G4SyG46dCeKb6fx756NLr7pB/AaDAdAfi3aynwE4TPXtCTxUH8nyu2ij3rZUhwC0/SQoMay8IpnsLpsxP1q7mITcZTkE7b0BT8W1w7kYngYJzdXVULolhJPbbyIooOtXfhM5RevEZMDsE+au5fdAc1f+jTqMRDwZDa/9XjZRseAZSeYl5uT2EUmyjI3AhZp+YW7rh35Y+GI58R6K1hrPe50hWTxw2DQonPxuToOAanmUdjoZoNoBxnfuZOzycGAxamZ8oJn7+7e/3bA+On/sQ5PHQavQibYMDRkAtPDKdQeDu+815nHy+fOqWtrs7wIOUIKvK8iBgN121eJgyNSCvxuPsn3GmA/EuHhuDuqCpFQwZbbJekisy451w0iutQDdAsnILENknnVK3Vcm6uouLbHdTkmEtgZTnnoolQ1z24ohJ2cUFeM6hro8BUHxD9StgU9kXCpsegzUqIspqENvecyMyb0s7BA6r1xHJb78s7UAjJFWUYIJUdeQAfXBqMHkyMEFF+kHfVHKrkBUX5m/AgXHa3s0q87wHkwDoOBooUxySpAprjOgNOsEgqQkIgLo1pIkhTJX7j7hGZb/PTt+igOrm4r+F2hp+NG0C+WzD9d58ID9j5RjZAT5TatjfuPNTgPLj52KkEz8RYHrFOpASSoYTmVVap+ANEyH1bsvQBxwwmotkQT52uU4vjF/5kGCAKmAm/keHObWYvS3yLz/UU6AjIMw69XEK4CBXO6SxLhzH4/2viJCeyC/5udpGqHpSzeSBDztVZ0FRo5OCbM7D3TPj1naVLj5l/sRX6TSBJL95j2MoWA2LW5JJqdGMCinBVG0ugXLwK0oKrzod2JkwWeeWs2+D72DCBJVdDY6M0UZFBUzDX7yjIX0gWi07eMMBjnjphGwboh49tMgDt2zgiKKCmxTjoowq04/UNuptuk/DyHrbBD1xazXPXH2zlNDxtsVA256IpMhWn4NiCaTra2MO9gdq85Xbx8bOXx46Fn9rmXNOON+rwlTOcuwRwAkMEEAtmIBZSJeEOnNURQaj69sWVZoZ5UxnitWOzDa2R9ICAhYJuxIZkwQZaLAiLrY7DIyrExoXbUBZBh8pX5e02O8aEYUZBuu3tZgADAYH0B3NQnFFw2sn7L9dJlN0ppUY8LouUhn49BsUaUgArS+zUlUwxhOhwFdLjVjMLuZGcMLYQOKqCP1x/FkGGemwlhBCyAvFHQeSyyZU/HFuCdiwT2RQjI3MklP0FA6FcCYd6Ry/05v6DGFxuna22LmrtHLFSismVIAp7V4DdVgK7e7T/UAM8YsHvgboNoP1JSqUw/bTQWp+s2bz0J/tF9eQm3uqsC2afRvV9losn6nYoOcXzqchwezOzeHckzhWgodhmarnrkjAlHbzpYlk+1Sj9Qp1EBhyOhBCdRAayM0xG+GGJLWcfERSjOvJ2jbVKspL7gxq4Ck1rQDRpf7tPh9rwcI4nmtD9sr1VLoX0c+cWYxNn8I8Gb8KEfNlp7qXx2UC9CgStSAgo5wcB5VVHR2cmhK97wo/9RCDkDzozuV5aFoRT29n6yL3cfaxDuOZ1re6sfOI0ZmPuChTiuLHDotTRSp/CuNEWd+yxXA+lrkbz+1ZYGYBtyzZbsCR193ldnXtff55VYg7uuLfZgPKGtrRZm9i568IrR8yCR1y4YEO9ppwRQjtD30vQ+GC0Kzx74f2EKys8+2zpzmTOhFqmLMmU601O61CMgUD3T0GsKkL2951hdOVRGzpb8go4vCaxKG3LQJLGCe5oQssggKd4lr1gZ+oZ7j5he+vPbuO9aTcSZKV8pFxnqJu0BIYMy+A9wcXNzdJzErIBb2XHussr5Ufhp61kExc+c1W/NtMMTOxuao7b9/izU7FRq/OT9CfQ/T6M7HBVxeWv7m7gMrgKY/W28yl+Z+D4PmEyL5YXgtnkH0q4VSaeYjH1HcgSLJkym3899Ce355DvFaU/UnKPGpbhsVYfT0r34ztoup35dCYHRFfWa/JUq2xgRaKnmIzdoy7O1UeAvl5WIJ6hMyZZMNbuCLjctXRoYDbACzB8tmnmNaN6+vgloCrwbHR76sHwSe9pRiObYuwD5p7B3cfa2+vOQHRJnt/Sxceaa+bjF7DrM3d7jnwZ+/EEJbPlE/TVvYFsFI/9bFngX8lZcrHXj7/qWwBwlqkhIVR+pmlrbF9iVSBt4eqtGGWQbTGnq8oH21HGLDls+bbV56mtT4RrOcZEGzfH+1DQtyHaN0xvLMbjBsTjoWkJM6NaCeqpVs9P0/lX2d7krm+6ZY8mnzJr8c38DeMbffwUblm90UYwBX1TANKT/DA9tcz/2X136bl9GAnvZ3fWn3DSNw/AbqsFzNl9nW3O+n0RNsp4fh8SmpCcNW2gmA3a7lk2XwWM9LItQj6cg3jkGz5h1VQXv++NlBtxuji2pTPW0yZkCibTC3Hp5PixpVk+GwFikRoBiziSY6PSd63BQVE9WDevhr1cA4aPsWpbiEyQnrfIKbAmlYTMUKWK/AGSKSx880ndMvq9SSs+89GwBHbkzGvQ39gdQDwK4hBKetCJWf9L98O4GAdfYSEi5i4Fq/EEmYqcxCOUtZPb8Nuf7XF+1IwiMOL8MIHxbKKAUhY8zRCLQ19lroe5LQERkspdTtCWOPJc4GBNoRUbKRnALaQ5VA7fmy+BhWz234u9edKeS51+OH/eKszKihl7mFTFSSiBXKngrtxx+k7NAp1XMuGhjYURyYAGrR72hIhrFqfXdVB9lAdpCFDYBtyYYwy10Sg+oXiAtB4qgTy+aneAW3MNPInKp2JCH32L63DfW0IluIMw1Fh46+YVS7IB29u8JeL9zku8nnaAGSVMcSCtZm5RdqF9IU+SJJdJ3pTznxCmuwxtU8dB3UsT8BJnljUkJURJbuRnN1SWaImZ3BE5dP+uLae32wtiD/n7UEHS663cd/D9KFB3Sn3Rt9OAuEUTfdQIIyiDCcBm2GHo5nZKgJxWYC4+BIK6IaXt7rP1r8ZWC7dpPg/oPjkO9vG8faZGLMN+LO0KRxufGXvQgl/HlTOGK0ZAeYguiV4JLUxSsXYjC27XoX3UYEPYlMuKY8yMUwMFMFD3M1JLLuto7kyeuJGGyZFxY3eiDitwbzyP25TiQOXWblmLQdsWsDJ8ZdCYxqt7IRPFv8zgTbhCvkl61V6P7Tat6Tzy+PwF80q1gW6k132/Os+/eucynPMQTHZwI8C5V6PH3wx7EtiAC7aTvdI2ALJTajlfXKbx8jzoMPghkJb3twW0L/ypTKdXYRgV2JWBr/4zakFOXAdnxt3h6BU8cfrEzg7LDYvtmXd2e/szIAgu0mga7+bwLkNjZiW6rHB38pPS8dLL/WNS74A08h8M+tOoRCdkGBpVRCFgx85exllrAbKRIPioaTa+4YWjmZ99Co0ckmiqSXrAz7vVKPtVDe8EriZWOCu3dKwU+4KdcfvRJ3qKGsq0CaITqH4uB5WiMF5uBw3Kixq/x3pmkyLVdyavF3wrvSHgH3lGTzouhczo/wPeyvAtejRZyPY5Ft+puesfuzxFWrW2iBqb4UIQUAz240GujF/cS8RCVkr6kTYKitcFjBl5Eo1iU4LI0Fw5wAh0J4wM8D5WoskR0hbpoU0mZOU5kvdhLQ/LEMMtQustuB1m/y7QjMvZcVTxA069hCLzl7QNKoU9iYbnMj92tJinK/iwHNyWpbxTY4tr/PYvAK14JZEGe3Y4SstOcz3xNErGxMdbE+Fkvg+BKTX72Nxg1Sd2CVc+8zavPhr6UcBn3RgIY2TbFJH5sIdLg/lpzYm4P93YKLPg7JI0s2AgqKBpcFJ/iN++SUJFFk4VNp8d7YA3cwzU9xPbYKRYWXKlV4Z6RPC1FGrGaEOM660sZFLQz5E8c9sWYEL738W6GEZ4SfkVihfvfUcYfpH0EW0rjE+5bRq7bjS9S/MaD+n/qt+D8IWCzbdhAMxRi35IHe00AffN7gcTr0f3L8Q9gUt4Dmvz7gIIqmmYIZifZyhwPWFsovnNxOiOQ/a0PvFU5gwmS4phDSpp94QaomtXA50sySQhHAAphEEiipKFNFyD813AF+4v0lE7NYcw5IaFAryoBrDYNODuTA4shv/fPxdSgFltk/fGpmBwhPGNrWjcD1fqLoP6JtIb5qzuauYXMGCBGJnUPNWTe9qQPb35eqEuDGdQoroM2eRWZ3Cdgy+1YYz9V693bf2jSwZv56CSx3/YgJCtU0aOd/voAO24LcfW982yHJ3eIjWBjx3Bg8GnePRRy3yH3/GqicvEma5UBj5mKqa8dEAsotmc59qBmai79hF24oagXt+frQ8t3WaVzwrzGZIW/0Kubgy4cSjEUCs4j23dtvwyvuPnCD57rddzs0gZzHMq5eG++EAYN1sdB6YxMT6H0THMhEKTvzA9fAjqXLoezft63rN7U/bUOm6S1pE66c0/xdhNDjR08ev7YHKiMIIW0WGlo15Bwcj8IQZYOTgUmBMBYRgvgieNL9GBftlVTOkwvBBBgQsknBjPi9uJ0r+tllTABGPBtrItwXTV1uHvDLl3RkbUBf4yHJXgTinxZmrxVQYjDATTgEj5VP6Vs+Gm6c++2zW//5lW27wbqH7+Pu63po4EHlzK4/Qt89fraoQXn8ZAt8DVzaxDM++NzaUeEP+0S3Fzdc4Nv1NjeGn3xXiMFaYnQCQomvDedpQczPVTUgWVhYSx7W03dSRb8ICg8L3G0v5xBGQaBfqZoEmcOiGthpf7UwVsCmLPhc226kneypiQGkdBdlBfiqh9pLVaIJQVcXFX2GDuA/O6A1XWwyMr9SBG9JgGMvmCOWqKopwAQ5rdnyGAUROZNrsWPRsd59jbXjA21pwrV1dv1Cpx5FtHK3MAYF6JAC1+gi3NlhclU07pNlHWYOeY6hXR8a+QuUVk9TwMsFEr8KGAh4rahAFk6T0Q01nek9fLzigx25BYnx+309hxzaancoptvAUqQO4FtvjI+zshJgGaqAHyxzJiK+MMz6VyefmvvDpJGPOpCJOAraPqfTvrJVfn+EHk8CPaGn0BpIRo6+4FeLclrxkm1pCc74rc3LhwyADDUIrJC+DOL3PeNZ0fgdFnFpS3Hg3wGW5XmUPX9n+qAIBSFfHqptUoKTapNDDyy8CMWjp5FFH3trqhDVxpdjAZbn374lopNNpFNsAqTSHst+CwyzjJ3/mihTgrziKpcK9EtODmDt/Q8jbTvahD0Yv8U3hk+UmRt2FjpNF9MfvnNs1H5rrKrHg5ofpkBBRzqrYkjNmYW2BozgF5mFGv6/oHAmWcBOaGaGuq8/XeTaI7+4J8sW+wmxEVKfvvZuGLSph/zbstHbWj7u7IEcbPrXGAuRtGVSgcMSm4rQhbd7ILI6Q1S6+kKuYcSK3Hwqj30g2oxj/EkmAlq+tiAjp5PikoID1/65T0z65/em0GPuCA2oZDXdQXoqjb1erzOTHZzidnBfMsomfGtjbPjBqHbYNvQ2yMNA3rYz+qZbt6pbIM1Zq00kEc0NdYg26G107yr7VuafOLLtOq979sxlFsEGqbCX+bTaq39q8D8iSReKOcATtZLjgnjWrwZQ1jHVkWsGnhZO9h8umI+ACvnKsk/U2LJILd9YzukjgGyDh/4bkzBeo3WDZ5vEBf8PxP6/YonaXADWFvzCDQ9zSG0dfhiMemz0PUZBvoYA9VQL/fXGAr7CZbEPg368ewE2NBhMG+WFKVs8dYoYYstsqSPDQ6z4PCpw9MlMUwhegEqSf6UgvK3OuD/2CTHREVunW8oW8MYFkYKaqklXYAGEiiIhXq7sKq5dBsADO2FQRacsTt8BzUiONMMZwtZ273T3YKvn8+dW8KliFWUdcyJHNIEDnjVrl6mY52w+DGYY1VD99J8/+DCMXt356LNvo16XHhRGMk5N9MySSMaJx0PI/IwlEBlDBb1X2Kzwj119zAYENV/02h2XI2Ua5LwjcSO+KE7K6ObzqzCDHI7CCYNWRlNXjZz94bTIUczxUbxsVeCp64IHm7OTtRJiapcTacSBpUsfe5zMu94hH0bxyVOaiJXGy2qSXjrBEwcn10/BPJxd80jMIH0v+lP5fbdffoMZBSqzGnXgAyA8NTd27g0Zha3TbRWqHFxUmVagN+wKNbQPCnoRJ+zq7imDPZUSLXjBGNzV+7zNNPXln520kZdzEFdJpATOHvPH28jUuodJD7SL7j5OPVdQvbWB5DSpR/At9QMqKmyb/+oyolrL3Dv2AiLoor6P5ipehR33ULaqaDVqL7zNrfk0LokNtjSyN+ncl8c108wjdgyRdz/T2HqVQVOg6kRmJLRf2ZoYzCbjq1uATS3uH/Wz+x0mmhL0sgqeQV87lBD1qL7adPWZUPCgn8nrujqlFBRVZTX915fE2qnV03+UTrpjB3GzrwSODIBYl1ivzhRUJ5KeLkTpswsXq3QI9oJosJmi3ZAZKKoOS8G+ruX5yAcop/X8lo4VgUVYdioaWzEkgVqOkaoxHvTAuWwvZnInG9uHFrBeC54/QkP+HVFUgcsq2OynH/AY6Ev2xBSqGXV9rqxkEnmtbmsmU/wnHl2vmvCN7ZHhj3xTw7auNUAWBrO2nVO33IZRWwcOb6ymiB3NDQyINZgEun+TfSP77x3gMZ3xcL4SkY5BmsT3QM4/Wei4wFt+WG3BK581ZlxIUOIQUxyow1VKSPh1RgOhfpYgYJbFlEfP5IxXax7Bw1xRJwT1ZdqUCKydVEGHfLfQhAFcsz0nZTpGw++kg5YBJFMnGtSTfNVCKEHVkA7yo+nneK3RY91Rya/oW/UGAUI2DDlxRadaMNzYNGo+GmIMq5mFEqoTy3PsHjjN3KUKQpNVuYeTDsJIzJdqTXh+Cm2lvVI5U7CigT+kF1vE/urX8bI+qasd98VwT2mbI3Of2xxwXXFME72XaAmxig3feMLa9Zvu1IaZSRhbTJQW7945VLzh3vjortfBLbWVd8JALlqm2DmMFGDKVqBZZKxs4GK5Rw3amwV5xp26XNzeLDINdwawfs2z0IhFgg/8MKSNUzIwlPPDhQFjaob5AOk+b7uzr2rEMxP1BzcZ+sCFfrNEe/qlIQ06xlaOkOy1fKJprgLBNrKE3RhpobkTpb+VBO2ChM44NkRu7bry1ko+XBV7vfUbhu1CG6sBdsuC76KHGp6fkW0E+2vlRRTOVHVQVvHmSHtKC7o/vX2i1rX6H77qh/fpvIOA9EA9NsTY7aoRMn97f5b/UkX0ddQMa+deNVgqw29eMIZxLR0abJCBeNs04h+eaxKZS4fMW7LAe71Pw5IdNsmi2XUjyA7NmIuCIlTB8f1H5MA6FG++Ihtg+5xN+g3oR+RXzo/zWeKbTdNNB7vZmcf8NTztPZjVqeGGrxF53b7FXHRKALJeseC7m+OuTa9u0DW01h0IFmdLX3erZuXfYdIYkpStDnQor9QxdMcG++bWP0c9dnRz4pr6/4s6NlT8Qk+FuKULNv6ngJ+2KD+e+Nrr/OJk/pxqFBx6jO/XWYUfv6KmW69k5KRCYSqp9tA0zApCZcD2nTuSv/wI2PF8R4MoiHWJAnrx11voSQ+XbXge2MaWj24ayjexJAQaNrBtvP01OX2PUgW3ZhU04AMRzKyTsVDBGsNfWrHABTvSls6ct3S/wV+B6B3WNnqe7Uhu3Ohmzp59+3wiMlxR03wjlb7Z5SHDyqKA+onii3K0/FJPes4AoZAiSJB5aTMcyYg7boagzamjEMFk2GyHFjeGJn/gNEWbp9aB1GRnx/okn5KDmrQqSbKjLxFbaviVf2LSZNpB7pGdTp2f8oXa3XYgAir061vBD68+aBtak3zQsb+i5ZyW2RwAxhBVwvAhwcynwI7lhgZUcnQCrdhk38j9GxRMUCEvAgvYJAMXHmj87+waq0ZexFL3vQ6CTweXti17SqR1Qt+JnDiK4u/+oZA10Rg90UbJtD1hQAixNj/xnb79Rta4eUq4+IBJ/4+4DjMqHZLNu3bDcWynZaWkIQQFXZAVvj3Ha06Y8kj+ejxxPChHDV02ygXD8Qp1o+GNixN5IiwaoqZrtqTiRxpgueesWRJt8Gk2L1WMiYj5vGwKFGa4KPB8omdqf5gH9vP7yADFg/5IFLnTcqLPj/ba1CTeNv6twXVjNRJnH6RjAILcSbs/QaXDv1PSPMAU6KCBpkRKnX0gXqlPswAHmKpokfbcwcS5osF3PwUbwLXBA3rjaw4Te5MrXa32mUflLnTzdDhElbO7Cisow0AnbjpfITV39PS4HkiqfhmfwHGlrVK2jW2GIbBgmu4KMVujtKOrEBNKr9wSgJ2gDeNtF6JCQbmFA9ewORf2/+PWZHJDN/3Tw5APfQ++8vYHPESXJ8I63LgiVrvokwPWH8VWNYAHvfn5qQbXkEPjc2cdO2HTM/Jcllfn1kJzeTTR4sklHkBX4T6OWV3+/bX4BrskLD1Z2TOfCwpMMOU47C3jHT8nfB/DD4G/BYKk1DWDqcGMEaQpm63KI6uzxN9mpGHN+rPVOyv7LFu4TN0RjZeKKVBUNpIXHefCTd3lJOD0boa06rWHWcR6lwBTeYfxHuil8jwJ6bgFSzpRS9mR1LUaXGRe0u8OA1Dfhh9uTrh2vfpBz9A7Wv6gZW/oK27FLIqSRKVZHIK8PLlq8Qbr5oakgPd7DNIEEG6sg07H35nt20ASf6Xag3fvt5wJBZCgpBFWSUDHWdoSm9cIDQS6CawJswwhNfTogPpa0cf6DZczmoL0Am7weL0Zl0Cbcj/f8f+zu9pp2zFbQa817JlAEpzo0EjxFRUc1HZQ00gH6ad4x/kWo6dywtmTAF0Hlk7PF/+kDXKbm8iNgj38HDzRqzRFNtrqWnXIIacUs44NpASndAiyUyVoSq7pngrI5KR2yQuMjGrKaw480aG0UNhFpSD6sQNzgXqNIqRzBIZJ8XgMEGUew9va9gog5TplDYZQ9eMYLSA6kV8vQpmdqXJFYMLO+RzERzblz5DvsmiM5kVIjrZyCQ2nuQpoNzv6RK2o7gduFaGNVL589mYna4jNUUxr9KpDnhIdUP162YTK47eGSMoaluGAT88au3fRrevJRd7VMTe9VR69+8BUqy6QYbiy1OIE0DvQ/dSnUA6TrLLzv1SbWLVz41tbnhyFHN/ocBkcttEtocWesZbDMUt6w7ctoiFukHsa4bCiFWggyhBPR3AEUIzviwgtQgbkx/IvoHEo7/vH65ocAOrVDiPy1DtbqVOKFwRgYmjbillD37qL4YSJKUu0ztFzRO5DvkYJR69JcAzoWttB7LO/SlUdoB/spVe5DuLF7s991Uhgxy0HdQycqnujZPBavN8wW8CCoZlzLwtIcOTJI/txntcxmfWuenAOdnnaL1zOh0VVMEEEuYwmpp51LsB6pHwjKBTNH05PqJl8HYrAhEwpU26P7Jfi1ZccxFtvz7y8CZrGf2D+GNYzmNio8eEmr7E7amRZzVWb9lTgWsT+6zd+TEn/iGoQ0vdbDjwZ+kpq90aTtidsYmASEpgsdP0g6HlhwShNucqqp0GGkQUBTQiKb5JiqHpF9GM1leNA1/ZW0kFhlOPLUJtJFIS69IWjGeX8my+924Xcs3ycyDHcvKRMTLGrLzkSSQLJ5MV/e+5y2rQkLwgBPTCR+DylWH2TzXRd2V0wxW6VUkTiin4HdgM6fImssz5RtzS29OCzNtq1caO5/kPOo1jcLGb9IGkOlylCKVdq5EVPmHFtn1PY1JeZDZ6gZt90GrjNXmPGLVBcsjAy+GHAszUSSkCyx5hux/oK3d28+b2gx2TkIkgQZ4ZJoxV+zvWvLEUnwPwW2Ej6+s5TeZN3GolBtKYFxi1lJYEPgFnLFQMeMATDagTd7kpyQ9wTXc/m3usnbIfZFoNtA6XlRaJcabYbmIy6/omHE40qqqScu5ezn515t9PFC3ABsJ9bKYdU/IgEQqto4dMHsFr4D6Pltr3imj3xPAVBFwMNdxmP2KBPH6q3ZPXNQfWx+5Oj+ov3Sn3UasyL/pf70CFeUZkX/vjWTVcmzp+98Cf9NNrcBoAmpOVViJiONz/yPWNUhDW2ZJhFM/Ag2disRfNvTAZPj8cvf5oe4xlekSH9MC1cRwRgKEmqof6QGxd5TnAibbMMpLU1LoDylrNPJzw6O3UL4sUf/ujvEB2j3+JK/JOTwbJ944MUdLLaQed+49uLxKqqIzUNIr7jB19bTq6hCmywRdMsGr773Go0A1egmsdP/jiUTOzyJ8g6GtxveG1tfJiMC3wizEQgw4pg396ltPVqCGWgvaMKYQNg1O6uYxNdqSWAHT3xwMps3bMIOkX8gojeUArgF1dunLahHqRXGm+lV8Vc/7WFIjmnoPs3eX3F0d1FASSNLvXT6U/s+zpgE2O20RSGZmTqYT2f5U3gfBV4zGgWmXu206Gu623fRONkJxMh2z4ZqFu/pDc+88oCK9CoqEqaeA5L5Kr5DqfsGGbbAKAT5vhNIlz59Zz/FX0A7mCgnstDV/8kMXTjS/nIKwY1NFWPzqKfGYgkTsg6RiLBmvV+vOJ2rw21h0h1MAF/3h9Aw+Lo7yfhcpHro0/Tjar51tLArSF49qhPuvNFZYzlvT9qn0j3mv6dML6nkPUOiI/B0uPj7iAK+Npx0F1rzwxG+d8N3O6KDb8ZSrmuz9s3HOzPtfsRacj0L7nmgwVvRn1jcSQskgwUtmycjqN5PuatpZloAIzvig0a91H3E/QC6LAS/5dvwQQwrhvo2V2x4HPfjOuKxDAYdGDSoOlfdS8Git78GZsExZKgbHxH4d/mzVXmrIQHhpnKUneKYneMPGkLGZp+I+M0PvhqdqiK/AYsia8So+4G1UMVHEh5n1SMvcy9hPXbFhs1mzh3QD9ZJjHbJnI32IPsr0AR5GZ9qlcIoqAoiRSAbwGMy7JkfGsD7ODTA0v9rj/o31vTzp+DOPLJ4Q7pzs/rfzuxpAmW2h1m3uKAtO01vKkkdruTQpPk8fb6hnBJiizJfoXApzEzdV3orejfGZ1BYaE8TOcNJQLR1UUMA2nK3fpDEBnOhkSmuOb3zkGMD/dRO2niw3IVEZzpTrQ90Nh3H6j8B7TZb1f6Cd6EkwH2hEqS3FjVUDLcTKotfCf3NV1USIW46AHICliEXp245KHCRq/KbQAdFNEy4xiARTsUggIKx/BlxvxX97qJGht3A1CYHR7q5PGz2baPuJcQJvRMEp6z6k5hTVgH7iu2U2o/EDlF4dFetxVkBXPMejFZQCRgaUnm0emwH5cFSTlGIZ+oKwrLcV88ezkLabXPuVAiHkXoaF6fAoZWJ7AYnH0xRkMjd5pQOGlKpsmsyV9TtRNle7WowpWNcrlU86/k4xLMJwLss3QncwC55J7NID5qh/roG499ld+15Pq3QQF/CQKaSo4d+WtiiiO5QVMqvZCZ9UVm4IOI+3ycRr5tl2lHdKsldISIdvyGHzXUlIsWI8XM1XECWBHLEPUnRufy4gF5/nNcCHFVAQdqYKEvxOSuWkC+eF1gQFuy8Ng/d2SrUYwtN6haGMPx+gfBNF+2yqD00i2ZvvdiLlp4YzIE6LUFD2YeYfi9BRUI8okA6XRXMRSktLVqIOtu6huqCNZ2xVYNtL7mrD3bzmjn3OR84XUX6uczQK3upbLDjgVv+M4BysMyWzZKJUt5n8vHK3AjELqFGHoBs6nkw8xKMZlDxA+eCBWX5q8Ua5udq+RGnAdloLysCGE5OGteHqbPHjkLXWhyc6LYAEqEtbeBTO38tgb9/RZwMJL+tw7X8eVgCjOp2Ll5IXfWgnqQiKyfSOfEXP/l5aLx9w+/IeCCci+A4kOS6EKMSocELWtOzIidI4FlsUikuQ8pw+45EaL53q/vJJ5h/VblrpnShqyzDqRpCoycWcZrRuEd9MtPb7Umbb+qwkH22B+cRBNtuqKx1xIIf04LwkTxCa9MfNbIjDXA4sUkMGRJwiwypirRGEh8qpUmY3Wsu2PLzFC2SiIHNWW7f5pYn33qxKWIfoIUOoUOOlpjwB4MQA34SRutuGmg88Uzd3eKaPvmmSTzYpH5AUSqBjUnMM8mYgyUWaRCV/KO2No8G+8JWuPmTKL3XxIhfvjcL+28IjO8frbAtdhd9OQfE5Jlk6UbKbRwhHljdTHKNfbQTlimfdy2oRmOng6WJO8IbegLadv9uL9FB9jU5RJ9U06IDV8ModzXCvcOR4E2CIeW3QuSL3s4fBJfjr/SQ3XqOA2tgkHmreWpaP4f/Oact3mJH43bs1IC1IoQMEUiOYRfX79ywoFCSK+kr5FeFnPjU7PFI+4dv83lggKyuySCZFGVATadHm8PHj2YhDHcEcITLampmm0v7186KyMiP+5AJj035t7PQsq/W6Ln+01csGo/Zt6xH0/vsNv2VRC35LPHv8J1x7DJvmxcwQIZq/iqoiG522v+YAm40prMf+6cjtGvjh6Gfq3P8a+T8QSPgO69S3asn94CcHATU9Y5OqWmhdBjZKHuVaFPNoiZs1VlQzPYcreFKRAS/UaRJdOu6EIjo+o2ElXXJxS0C+02zZ2itdJ/hEhrSH3x9kTwzjdjqOZUzUVmshn4zVFjJrfwekrBjwtTg/2AYdA3xDP5s5a5pi07ZaPQobNJNFwpF6J7kmf+HVut62v/3QG2qI2ms0Ic+KSz+t6Z4xTdkOz1Hz776Ywa+PoEnB5pN3f4BKpp3XCQnolTb9Ttz7hDUxCIetmEr2WFd399WDNsm1oPlGGw4DhPGxm/adcOQIa3cx0kFcsNzcqFoVJHDzwYL+WfIDJuU70XT7mdP55Zc+JyH70oTSJpGldHdfmk7ksJY2qZXMsltmCYeSNws4WOAZUiDWn03KxDJRuKya4FfBsfwWEgsorCocdpE1YMn/xIioAL+gXQfbE8XBHgOODJ7SjdE5mU37JRXMMGFz7HlkYIaSKerFd4ZtYV7y+tZFBHeQ0iwjHSJwii/JVJflLb1jYBGNlTDUhk1ui1UuNLJAzDPveEuVPYdJpNgOnXZVdK3oQUOKPKVWu1uUr8EvQArpuoSEL36VkxQHjCAQErxAlk94jJCmIAx0iSiEbDYVwVZPLEeuHGlSZnQREArUFDDV5/mAndr8ZoMCH6EcHZGzvBRLYWDcMwEQcp1ilb5WQlFWIfhKqvcm147au0J4AUQ9c0ojszIKdNrhNKZgqCBWRwwM9rrMHune415abSBDwcz7le3mXdlsOrgqwXDdvxKrWiYKxOBIM8m1CgQ3lUGMC5lJc2hh03GqkGoKFiDSqmyJuoLVN/eupqVsHX/J+o1YLCWmWzEmZjMfRBcPB+rQ0vfJLxeJCsu058x4o2nKOcLBQkqylM4DHNVuGMk04CGtD1hl1xvYqb90QXtxVNksyi6XhVjisJxspEJKTwKQs65fv5LgwVhVJkpxzLSERYC2Y5aMQqgLqGVSjrkmCg8qVQL+R6pLa1DsLVgnkwD+M43vzUcmxS6UgQGJlfWI3n4SrAd9QiOLJ8bl9DT1HHg8GHmLA4EEhJrO/jhZzbguZmU9rkmHC7Z4bQpo62wEa7na0OThMrujroHueCUuIp/Igx/4HsbQ22la8alTKu1a6W4gLcDSSxrkjIy3FMgnpHEEicEgEd0pIgJ6Yz24VkCdGAzYFIQ0PBIK7wso2RxvA/8qgjVWfVadKdgDPGwzUIzAEhMENpkm3fnxZz/RTMEnSIjKb+9lMq5Dvg98bfLLHb5Nu/+gRWVt6/8bU+Lvjj0V9IKAzEOy5d4mOFlwg5++kPPClinJFFIpGqWwmKJqjGlLdX4NYj40Rcr2yemwjxQjozH6GX1l8DSEFarnvKEi06VOsLuMOXMBSdBRrVZJTsGy3X/dTSievHTQ6wMtRO6aU+CttESmgW55URe20DwAWPL2bd61lIqaslP55bNZl9fH6yrERaUw0yTL/+FMGGBHHpArTd8EZWrBh0Mo7YiOg6PfxE1fyth+T113gvA00y2TkDgjElNkafcNan5YZ8RxetKkgiA/5XyDhfePg2aaz6bc4PmzC8LV1DoGlc+DCBR1YcOHxsBjBOQ7VXvQmytohT6POv8ILLjyBkBjFL5iF3sr9D9RHy5vFhl2ygIjNVA5nRLfsAKqbu+0w+1l1XEZ+aWAZTNTbIgF3JuKddWTDlFMOdaLTDbmpBHR9TuorC8GB/wQVhTaYySwEnx+RyBcfbSBMX3mQpCtfggeKrtZdiX82cKtsuRcHBCFdEN5w58Vj4AixCodCA+SCy/zaWTbjYYRVjSkkmNIGpkiQ7yFS+2Idnz+we9+bbDLJxx4048mfL4b+n2ZDgeg0voi7gXm22Lhy3VuqpomRN9Lw6ZtBlUoJ+SrgsegQEwpX+degNKFz1OnGAZof0PuplVHgfAarOccyAyAksG9/ojGLWzWlr0L0oRF5fgu7tpFlJaoho5xyorwUqkjGlIrl2nNjlcTj02/S4WnBAN62RuU9u7oIsMNNSq+rK5OJmquVTdcCIlhpd9CXQ/99pqZOzIMWLiI//zkaePvxK4r4ijIN0XysMOqPWTCEGHnUbeDtuS7su+47FuQs24S2oN9UtwW43cOaym5LsQIXyUoNECzZbN1b/Azp14uFoXAWw+G9UfwY4V9MekzDPH4tQoZTmfBQEvqL8+OwpE27KWXJ7hWbaSKsuxihPwiKuFqzmr1gX5HAAzUfHlRwyu9uNYLg2mCnGnRBU+WqrKPf1uXFTP9TDfD2mu6TPBwU7M2rg7OWoCFgCIitWamjeCmVkKfEZ76U97Tw/AF9rMsz5LFRvm2ez6gqhMigPhykZyFbiRcSXE0WVXIly+rxpa2Sntm9tA16vB1jvr9+Kt1tvLobCd2Z8yf1JEwXwqK5Bx2w71ZbVv94RTECDcVmqGsI3eu7dtrDpIF1mCyJrNzk2MBVZcux8fGdNjcNd/fBKc5wR8mJzlYQ4L9aH+5YLJuOI+avEs/7V/vq1Z7EtEaaSa3aahHrDBlbG6GuR7mWcbItGIYB6pKrBBfMo0IPwPfhRYh+k6tGO3rox0Lp6bOr3DoeTq+BydBN2ecueXI3OXd4hv2PRXLlE14yrFIORHgQYZsGxRKwAg1KtHOjopu69XA/scGGiob5Qx7Zbb16I7g261M24960MtsyYlqpis5u5qPd8BUAfe1dPjM4+e7g5t3kbz/r83W7U6TXcP/LAXqRe+CkOivQFcpDpTcZCPm9dU8xXTvePuLdR/VuJQJkFHOKBuRxvMxSLNd94w2S1H98qE9YsBhS2MiDUjahrhpKo2FmoXmP6t9o15HdQpyHQYm2jkXMXD8NbQ64VZUu5C/YA/ns44f3i+IyyxlHNVTZDd0Pan6bM8t4LFRTbuOZ3oO95Cuw5BWniCD14kLq9AC1y33swsSKksJzULMWIQtcoD/24olootnyYXVoFCUkQGT68yuyr/7e/rdcILXGutdbB2AjXS1gD1JW64g/ApjaLWgTbD7o58gbqgjJ8gmbOjIbJ3wSlfoL41NzhnvyypBJngDemQ+wwMYlYG8ypspJsgDvaUsipsZ3gINu4iLqAbExKkxn5YFY/7E68iaNlXhs+2Lq9aw9ngCx7WJf1jEnUcRXG4/Xda0hiZEVCMYGXLV0qTbx90eMkSc6Vkg7ggXHYGhpDnvYWOVKu/hdvlhSnIz/Bxv8mxtK2K9ZkucaXV1+e0NApb/pWzYd2zsAqQvTTvxTA0E5e90PMXI/vqglyRfOKDcXpLGh8uncMEV6FJbGi8k/2de2UXeqiyI8vDo0qRsY/soc/0ewonCIpFzn5Oq2kaSmXpKslSZN1FZqqvmFRKFzNRr1nJqWEIjM8O8UdpuBtZyIDSJJ4/AzFS8DFYq2SSWJT0ex1wYWpgk9V9C8386emSIL/tLT2ccilzklQ9AnhZsLKqFPt1U9zdIexZJDGl4AfTjeCNhoatKpesCO7aqDeYMvVk3tnfdvtNvDLucGF3paOVHEsz5eKUfdiLbhL030mj9M3WC+IshYeUDnaVxtoOCW6cOiXtZdkOox9ZTXjy+mCBzECsiDEYHNoC8++EIVHRESXsrVJwEjmDoLvbiCVCvsQ1H9eJd9aQgvKiB0mwAn63wenqz/a9pr9XgHBR15/1sDW902ehHtpDyQwxVIJgGvuT3wzpk4q4zo6CmEJ5PB4aERnpAEIbvJby6l1VEWaTKBArfBrK2iB2mPRryh4ML2MtlxdGx/ShBe2pLkt1Q3qXUtNhvquIoLtCXTbEycfoS+vztT4TM8jeMOvwLm+VI7h558k/dMogTiBRvnTt5eWP52e03f93X4ueMDaXV6EpJbKgGFhLm1p4lHkxK+0MYx71YVIHu9NzILfPA2+3rJ7pJDy49eibtQjVhY8kERJqDMUximGoQwyAjs1ljoqBLBkEC3Hraai1GoBASaraSfp9NdHu40tAORAqYmGWWvOQ5ZV5BoawhhMpKwp4BIJLPmQ+ZIkyzIL1Fqe001pRuWmwkm77EPJJJr+P6027VbQCNOo2d+aHDbW9WamYlSShV6RkzjkI5V5WbD1id5Wuso3wCU3et0EuR/5PT0A64hc3Xj1Ys6SV8F8q6GkXUGOYwIhMdWt9gaeA1Zbw3VErO68eiFn/fnY3ORSglXocI6pbeEbWLp9U1V6InM2G9hbn148a0rt2yv97FOnV5ab53509ua+bCO+OvpzmTDqS5iRcsXWaL2HvP/YZBdN1zGH+CP1dY0Uzg5CMaXZmAGaZEsWAHns6do4moGwj7lCKd1UzRV533S4HESr9Bsg7R33DlLjTKnWjo+AjnNWzQJvjPjcsTs1h52aDRCtYiPahWCkv7MXLqVqx9pnD+yT/ptcLkmZDrLl9JugCrl0Ra/IIAaeExWlWl4p5/LrwyVxYYu7N1QpzVpTsw1bN4EEhGJB6SH/+FvFMWxmsOqgTWfiXBLj33zEOU+An0ikFVQfqzSwMnh1LlNVKCZsaWyytgtz1I7IXS5r87YcglPe5Po8kvml3MPwyxhyVkkmVB0ANXMNiDZg4ts9KW9XV1Suy6RzbecaD1cC252sI/NRnSOKDMvxIbpQDLvn1Y0W0ZkNONYiD3p0o7b/iKA3v2/ESE7X1tDQTgMafGnlxklQqM70+FH6dauAljFBeRj6yk6LOa+5u0FtUeP+A3fHdi7ytu/AvVXjNbojjj9MQg8Rg0zLXn0yCJ+lQx2/+pNsO1H3F/HJ0Bh/xroOjk+HnSl9oQf9Ic0IUMjfTcL+Rm9mOPZPiCRP2YGvA+66AVP2DceG0QGDiDisd8+6rwa3fZtHQZ/RWuhHeoXCocyWjNSa6Ob++q3Zyeiaid+DDB0+/wiehK+uI2unG6DD4wd8St1D3b5WBOjnTs4+G5Z2XbHjo81wHRdWi1zQuRHBbJ6DMDUMTdBx6p/kHDR/Ioj2DLBBAWve0udYF9j2U31lVSi4TxqvOA/9L6V//tkx2qfvtnn/yr163PFDGRyLDMCWwWvK2+G1SXeKlZnxJ4LWbkmT4arzoN+Rm8vF433yY+X7tX173BHfEGUtcpkXiD8qIOXYa7oyNxKW3hDzofr0L6KnAf/M1G2fiPYgZmFsybb9cjAZm989i+7snft6UQDXeGbDMBbwvvvgE6bXiBFi/z5hP63oadAH0cdmkQLR7pLVedJXyqKDWC/1E+K1FkexgjJxAjOazCqcfW3Uqa+GuEZGFy3ahX9E1CH/gTWl9fHHFynN6TeW+8xoEuEQn8Ty+Pa74TdO/ytKBepKMJd1jyBTkX1cHNcJw/sK4ACaCbK2BMQ5N0jmO7kfqNPu5CKw28XG7mJPb7NR6UmPBC1l0qDmG7kQcBiF5bEAR2h+wUOVpXFRWASJhIAFVoxyhGsA+40qj0aINHXsgYVRqa3Hk/C+B1hZM7tSJ1OgioYJIxG3U0S7OYU/XzsT+42XpbWE5FED1clZrVesS03Aeq75IaRuH2PbCBPHGEIUOXTUb0cGHwszgJoCQh0Dc4BVhT0xJjOKPAUNTCx01d8zL+wGJnBK+22b9znjvFKZURRG9xJsuL1bYpY1pnZz+38vmfcn+hsGZR0FZTRxKG7/IHHscuBg9Z59sZ3J0WW9BNGonTpoP63X5kpX7Ak3ISmC75MsPmDDkinEo7/2R94uTGgpiCAt/W9vn2fLE6xUEWvCtYUJki1yqYi5DMOPNaa4IQd0RpZN8l5aiGfqxtfTI/+5kekRIR9OuPbM6ZlkVYpFMO7fnx05YHToteoAvv64HikXMQQdjYikuFsYL9OaWLuOqUDUgmF12KBPzDP3QEh5vdxL+VWPMeq88GLLZLGK5i2DZvvDfC93C5bx2a7VjLqdYT+53pRBDGj6u6TQIy/adrCeOMhLsV8Z3uZM1wbivkfVNkz2qGaILuw3D289EIbi9MAbX1ulmIhdo9T2DgbDE+0byfHJkP5GrY/3255gYLzyAmUIWLvRyeFuvgWLDCdtuWbL7zWGbSvJHujZfHzFRu0o2tHinj1z0lqpTwvVcgx2Uzk9PD2bhu2wg/tHuEEqDQHHS9V878ALGuOinJSfWINbk10kCQ1esA8p6GMYNsc7w3KE5CbSUpxx0dWI1zO+u3rRJNBgwMWgqUUCn9SSuJC8aLGR+PPREHSXEuc7oJu/g3N9sRzDzz5OBbxbmE6wUWYLqVsf/wfi9feuv3+cCx60dpcC0s3NJdGO8li37vn4mfq0Gk5jqHP/S/JZUMN1ERiGu97LjlME+Y3j3EyB6RYL0yPO9L5ELx3j/33VUMA/JcqodCi4ITDu2IhgMKtK2pENjGm36nvI7GgGynXHqdk4ev1GyZMH4kzGXvVXoFGvaJ/FfjmDsyRU+c3aWi0D7PolT3F4WbP/djOvIZtJmIPXbpQpIaDSDDN2FfVFWYKvq0oUtYxP6pN59sLqcbFcsUjeD7pTrmw8upC1ZDEDVkIxVrVKARmsZUBe2dJQd4qV7c8DVgg3sRTjVaogkkk8g3dl+z11pQPViLCjxDL1EaLOw+d1CEitgkgC5jfc99kWqoncsyUllbsB7c+Isz9T077xmv+7Y7z7QJHspsZODXfWNgbf8wwct3bw2ZHdkfbSsw/Zor8OBSxhn5fzs+UJZwBMp39fBEXbuBE/5aCdby6PW5GFrt62gWukPY9/U3UT9XBBFlnuKWtTut+5AgDZ75+UXxzgsQRQNK7A2nRvq7ELlIHk1gNPJDzABS7qapynr04x9ni2s6E3DMACdeKCDw39hQBWJPesiOZA7LAHXyMM2sPWTKK30Zux21214OORSee+TD/o6Xozgni5oOVblyregnuwETaRpNJht8Mg0OJhwNcXooSp5/sQeeMFrMUgustU4YLCdUGuS3fHe3rpm3FflRgHtYvYJL7iCgUHcwcjXZWoY7JkI4YWDALKsjIbnQY7BhMFQliIqUpsG88JWYN2fX/9QPhLv4zzqszI/hObgFykB4BiE7CyRBTaJ/XAxo2vZklfRwugpVZzKKgZet3dzdQfDPszibhrlC+JreqfcO+L9MOevZ4KhsglbAXW3Suhsq94HMRMVnYA6e0w8klqA9Zblbn+Fpr2p0U3HY3RM3mm0UvN9UkU2bN6YL6YRMPC0aijZ3aHhbqhRJ4O83iXEUNfdX33z+IrXyYdXC2PpgvmM/StXbFMJ+OjE4RPO1RGQDZN2jR/AAqtIIVAego/6o5hkHqvFyoz0Djrc+gbg6QUhLrXvmThUfRivwRujzRFrLaLu6N1KNpt443Y6t5PBw5mx7HdngXnGFcj8I4DdcHZRDI+41XcwLwpfMr4UwNYZfPhta3ge/T6ynC3Us7JpYqUKwUuwTB+5uNXqEJ73LnJ46d2DjYOAH7So+iKISuwfCUjDQoxOnJ/vDnLnUbmsTxIbWzYr1aMmqSPZHMX747Ga1V8Nr+wmF0D6IpbJhHBoCx6qGVSK4tnZEkRFNE6snsiB4BNKIXjEtCZ5i1EXPjkdOnMLOpUgOFua3JA3HUyhv0018Pmb1ryZ6Kdui8qIlPAmZI8DEKgv1TGRGD95mQ6G4C54M+RMZNcAyQosB2xjFsreJJ1ZdIBLQinAfQAFkq76IkanpqgkXIiXDRD9cnDGgxcjoSCcOpOn1VaJiE4wEfcMSfDOM8lh9rEuKU7gRV0EIclzMdADS4c/4O7ggtcprbdbQFwchPlvBL/lX4e1Wh+Gy3qMoIxTKz2Hs/n83lsDFbRhKsgw0qN0Glqi1vnswBENOzGYHXw87H5yVzCVyRKDfAcvKBcopyuoIUx4LP6q7/lG5XTQHZCf8Pc4RuXqjZulk7uPOmYbIdInuwumE5zoHuRPVdfinX4r5/bgiuxdjeuJlyETtxx1H0tVK9GwT5zRlboStDKGAXGDnv5G6fYdHZVam08b5vLobyxwnPCjap+/ZiW1MsjODwKOOZuNg819NsjpKALNqy0fTJ+YBLYiEqoiu76hsO3OfRXn6fqr+UyObduZZRS43PjabbSehkjxHF66cMIHG/+p3sZF3M7s8Ct0OU4buCBqHfttN4tNZyvCuv+ql6cMbVFw4YaNW9W0XCHWsMtdcadNVbAN2o0tIfZdeRcQHL8MIFKr9wRV7r0g4rURaVDYnt+BES+Qoqwbq3Ro1C+ab2wIR39jNOUFTvRb8ghG2hG2omYYtcIZ4VOefFo78ZybihWB7vebxr+38zv5LZokeQKrgx05U3bx5Cx4zX6Igvh0CvZyQMo3zRS+BdByrjgBKyAZ1d0jZwSlDqGkQL70nwOCPUC12BEIbkZsyfXCC8pMlEWEOKOZ8j7fTK0V3ZqRRm+yyb65rih8w0ByM2PPtJj0UNT/I+EyampWLt9Z+64PNv12H+J3aoP1n/Ux7159ghUJOmEJ/wx2s3CWgBe1Z57K1ahSyEN2ZXKyxffWtQywaJ6WVkENfrp1RLUZj+otKAzoBkTxNYtjXjhTQD6cAx8gZLq6DTIUKEtLRKa+YB9pJ5rTWkFGVVTUh04pg6tGkrxLdymwo3mZpIDLAjxoxjgDEIsBBQrT53QfSMT5EEls+UeX5LqBA1KezsKCgCLzcA4E1jFRtzbJd0JDrAR3p5Mb4OlbsywcfOKK8B6Hb8Qoj26zVwN4oUru321Tg2WjGmfKGOntwWLCbVVl5wFAMfxqeDRGoU0AfkpJTWQ3jNlLwX6fXtphNAJMpqmoFlQpYqcCgoLKEVpbdvP2gUA+tXGdx6YHPr3W7Fo5/kLH91f0/JqvP60kz7hmLm006Frda1lxFIzF/KPddW+tG6kUhcHFlQoA2VbKMqzMIP018GJssDNp1QFUPmqDTBHD/THCdtNxif/dJrYZev4tW2EQpYvnkTuhLs+S2HipwGtBMtR7hZnkLoliAz+bJEmaHSiRmqylydqPp/rap2y5a/FY+UNbbjdhmdOvPZsEgtPzOB8okWm8/BvXzCw6VKRFtYvweFr/EmMFGQ7wuh4Yc+ELCvLAvLFYoKnuXVlQ85oBtViG9DFRlmTy8sJ1lRkZ7SEa+KHTprLqOdNycR6t26VC2MuKkBHtcdKGK6bdy82g3HUO+WHnuCOlh+TTmarlhYjACIvD0mIxj2Wpn9LzC+3GuWmoLVz7e3aiIjeUh2NT/RNFjxJn43vZUI5K7LYQXAjYbZaZH95tlwMxQa6ztPgOuJHB/slJEOJUEKXWVVuEpOVq8rriszvN38/a+vtN71ev92ZqFs+kFIBiWBxUqg00EKsUU8K7enFq+6USD73TbxPRoi6JDE0vchXY3v5dNBxejSiPC2yrKRRy0imja2kwVuwwA3wkAB7NPZNJJ+9OWzj25PoIP0h9v/zqh9PU1Yx7bTJGlYTI5DinC+ceK/3h2I1QytTSrzYt4sGHdnWY0GTMTkv3yhGVeCisMQ/3RpzoOvOSbs9kW5Z8NOraO63ZxyWuyV2Rm5x3tsy03AXVStDfBOy0FmVOSGbXnTrFil25n5nf5Edp+wK53zNxWLfq5vKrpKdyMEcpqmvAjNrPHnXvddVKipSjNTkW7JMfWFzE+qbUWLkJee549q6caf++mRnD2qb0uiV4Er+iviSW6JcLcsYWHhRQzyNZzURpUYPJd8Kljiv8Z8AeBa0CYDacGjlhmvIqzlupw1YK4kqLIsA40wfIQ9cSjEoIAGmlgF1svijIy/J0gjUwv88Nf0fG1kkg86Nyw34CsN/ZlovmwgRZR9BiFauwNQHRND4MERV5HsKzClrFEvZO6q1IQITyI20rmAb6QCax7S9pZ2PA+caFiP/Jsqx8bsPXT/xWI6cUhWdmNCO8p6GkMFwxyjTZ0QuzZy7bjkfrQYe4I9RP0C1Pa5vBNidOefoIQ8I1Ju5MZwJmYMAcX00whGACaoyIDaVhGR0hKx96uWYyoY9jggsMNXrCgMMNSzAoEHbnbPkgbKz7EKGwyS2y5CfRE8VUhHWNXxZru8KtIb2Ia17a2sIsRBbjFkQVkE4YIdYXtiIQYRhiR/zXrQzDbggph9k+3Bi3OoYSCxzjZIzJB07ou+WGpNlPW7E4xFPu5hxV1IXqht3+2A2uZsg4Ux+42gXlD19mm1WWhdq4Te5208t9thNe/UnsaVKD7yAfR2/3DIkP8AT+C4CwOnk7Yv7ejCwrb12wbIs9GoiTN92R6tWuSMAHlSZ7qjNMNMk1PqghkbYZUMQI+QBfIGfU4BiEt1m6sGAYeu58FNaFUQpp3yNqSFkBTZpurLHpi1xSLK9TRjgaXbZcTDE5FMM9oacJkp7ct3ONbD9Nd2JbFK1mYgF3HduTla6RsdkvosW9G4fKbCqqI+f6GsgxTmU5jmpKgEin9cRwHSraJdE36319KcAbf/t6hGhbb3TR/1veiOSUJ9UPtpI72Uc39dmb9TZgCSEKSDk76uWSt0qVF/Xf6n90nZCTsu33nCKQhEgcrx+grdNN53PyhAOeBvVkbVKjulyrdz9Ue2UdlZmNUR+lymBOYzxe/W6F7H3FThYDuUWrHzOpatPpyxSUno1FF/kC25FGdmHQtsUyHG3WDN7tNF/WdCDgGe/MIKtgWYrRhFHTSdse77Wyk3xkGqVai9BrDVEHZPhpJAd9jTAvvK7csBeY5sUFiOSIGX8BULOP+sbVQOueYy8qfcX5+ClRnbhp6QfKsn6Eg9iI6CXFVZj2rrsAl7B4nRI04RyaKjdaKCyL1QbbijvULUCommHa8PEMxrXgK18st5fmmAIBZgR9kyvpTXagUk6t29n5o6dnPJK0rYrIJHI3ZfZkakpMJU4ttfycbM88p3TiZE2960LtNuJAUWx7ZnFFdltH0vD6TLj4PI5uSgQJqQ4WUDqBt1ULZDWOlYQRz07EA68h1/3IP+x+e1bFdYpvylZuClEDESVTakgEWkDcnDdiqgcrKkTQCzBvt/Aef//ji5GemouQxrRmZwxmUJqhMcLS3lqMC5sIXZoSjHCUIdXGKrDJZM/LsYEMlinyJ8XP+VVPe38SNdoumta88Sf9G/nHx0LgGnjNr6/Q89rMmwXyVcoYfWcek5V4GVyrYoHBHjOXBSJnQy6P6lhbzBT7R7NiqyxmFVBTxffRoUI/vOq1e5RbQlAOy1nIPqubwZsbnzzp1f0NedRef6W0r3nWpaNhMTfMR60p13drjDbYVsE3+1d6zy3U2+QaiJgl0S7pjUiKV6wXlEI9JOeLnYYPUBtv2EKJZ6Nv7Ss3ek/rNhVceglYtDogYb2/804onJFZ0AC3wSsitctB8TSTsmDJWeeSSavF6nJ4N4iWUzEse2tRiwnFRVG44kCm+PLALjTS0jkRb7xei3C72uEoLRLazYY4VJbgsINx37xVTDD0MU/g6rxWGTLStiRijgdWvs3k5oywsNtE/JOW4JtDvzAwh149UrOOEFnIhvbo03Q7lr+lOPoKfI6T9ohwyXCABN8vvHKtVVYpti9UUSsbN1vbRndSYJDIh6cNXir6mFfb6hKCCwuKBvswLRyQK8FNOMzRT5YAZH0GIMtdrbIlAb2JnU4Fq87UUujZV4a5ZQjAlyzpzcYWOaTnEudqG+1Qp6W0cbL14i1eArPE4XXYyw24GP5gUK8gr63n4/B4e7EH6Q8rrJt47G79BHwG5xqqMZW21aaOK5GOT92jH2vcTqmGQO14OU0/o1/2nkhPsgNlIergw10NiQ7E/rLrTAyNj8ClVVgPZPM9FzwxpbhtP4nPnHp+LefRWpJWTPYt+fuOD1swL+4zENhnBki/ABiGLUoXqM4gQHD/NTW3O/PX4CBBMNqgWwvoI8Z4+3mg+6zIAw+JurEsBasAeKjiMUa0hhacv/dF9NJho2C1cLak6FWKEmmCSEsTPzyJ26PHsnBKPglemnPOwNE+jnggX7ftqKnfLT+WN2NdMXSIhoiGw6lIXcO4uRErCXQIg6IEoHhMuTLx/0XEzi7a5VWH6KXyS4c2geSUzSXxEiW+2JrD/dC1ClALo1rnkivvgpH7/zttW024GC3sfTF6w6TIzlo8GEZOTVRplrv4juxnfG+BKLzvzQWCspyVAVRo801YKpHj2WU3zmmVcSpfeagDFfnCNw6WtBU2ZiDln5RVW5nkVRSmu8oosif/oagLDsFcd20S7DgNDrAhRzhm/+nHVV3kTYFq1T93RLafkh5FExg+uHj7i3IxloEFmf4iW4j6DGpBols83q147QljyXoBej/A+Yf/L4D8kY+HuXz8P6rNCA9Ixu8CyfHf8iAGmXnAXL2pLB5yG+DKeViA4NCka+U0bAmL2lLwlCH+5BEZ8t8xaOvFl9tbaksxIfWfdEOeclNdLEvtOZPkdTixwFLJ9O/0L6Y2TB4XcprMCBv4zowNr4PC5GRMq72W6EPeIAYNaeAvwdoTICaDcaT40H0lMB1C0itkwRVWFsULtA1aV7ZDK/JCadU5bkay++94OOD3TbBnF0iHPgPfTSEXU6tAa9T/zpFzmd/+WxvLorQrajjH+lbdd4rls3/5ILKgKUi5xv+Q8sJrsylLf+q95sIXZvSYaev2cRWXP1bZlOrUacXM20zKzMgbNQHdsfYbkGuHO0E6zgYqzZgRsyHPOCz36MUx0vSCZxxEZiCgW1D0aGIFGXWBxduLYHlZy/+GuiNbgDxjffZWsuyI0Juu8YmaLzzeRPvjGibD5xylj7uqJhqfxj5+aXt9XkWkaNiidMaH7Umx19RWk+YRBu+qfRBOKlD3LDf/sHvTgFypDmOFMWipMxtj4eAI+SsBY29o548OY1vyx7dHnkNdgEJXLWurboBfaGdgM/D0E8CTdgHFlRshyRiAeiJ6s5Gk+9fuOk4BQ71Dsm/RUqqp3RzQHAFR781fHHJAProluJ01L9GQjThFqjMRj0Gl8I5sriTNEEq5RoOdCNz52JUzbKepdc90c6CkDEKlZGdbv3QB6UxZwOB/pztGuCdy67SPGvO7+V2g2CW4GIgOEc6A8bgY4gOP0E69U/6dfTOL23BM/EHCwq09PPrkr28afKOjk9AkVmUWwUIBY5aQVlTTZCkf3j/9Mz1EFr4UAJY9w9QPlkiFlw3NTNPjfJ65M7babeTsOlQ0EghARXkqYAM5eN7MLdaaTQFp+h/1O8ikbwQpLaRy9T57/MucJPdsnSj2s/ZOMwX7j0sorNI7cPXZQtJp/669vJjdAq/ucdDjUaWK2ik9ejevU2hX0eLLgCPwczWmixb7chdrSRgb/HD4+cr2Ejuyxa18VuaYA1564Pzh1x0XVX+817aMSNt+bXs5fQp8o7X1R4Pv/ysqBawYk7FMoNlo2tWftYbPwCkeGllowlRkDmf33pi2xFqSeH2qId5LV5Yd7OqS1ruaEk8E/c4VQ+m3ZaloUn/r166+u38DTnu+34QEQDalqrD5Ri+AbuzVe7mEjtj5XLaFWgn1bSabGP3j/6bBfb8+cNbSc50PHRUKyzbqJWx71znB2oOyyQA4/Ab67mDrRYCg8oGuxJ4KwuyTnSC5JKu1KqthdFKOSIUSwTITEVmYDaP61RRhF6tujLowUp2CAoVuM4923Vt1s43jFQt2XL/Pn/JmlJFLMsxBTotd8oJNIO5VrXMPz69/SEDjWQW9KJm5XT9E5RamQIkupgfkbs3D9dCsbfXRPExf617BXtz8IEwgR99c/3xmy9vzGF3MSa3qUbSkHkBSAZATrbNkOUjqoEgJj8OoaPPPL1VmN1A8R9zA29dX0QXek6pa+nvhpPJSgE+b0Fv6Tb5t8gQ6RpQRyzoiAhrP2kDtvutvZksVg1VESoYBNzdVsoUbAMrZZcSj//5aCOuT5dsWA5Gna2bBvvE2B0GEafbru2/Pel8Yt3uw0KsdkVFTwqwlCHjP1T0Y5SFXMnzPVrwMllg+cG8k4v+Wf8rSlGA7LPhLWoNkZxThcFRa5MoKmVchS/IyNNO7xdedCSsGoIC2pLeUEpk46de5tXDc5cnWQNud8gWSC+OHJDPf2np3KLZK0pUP/IjiAAepl9HR7BToBZ1GtBU0PnAsD55/TU9fOt6nWHVjJYfSv1Bl3rxYPSd/J0eaFmheb8686qOXwi0rIf6Wlb36tIV7Wp81Qa/D42KCPkrrdNxMzuE3cscEWbHu9W1U/zMUXWGRUZgVNSCPke3Z1j2jsYttkYwfuzFtAkLfbEE/5xuYmeCF7Y8GtKHpzvVgyz0jV7n1Rjv634HmFT+ZmU+i+wOgYnohD6untiKE8RgwfPM3Rysr7MEAoWmPUlouQpKxoWam/0HWPPwUrO6k4ski2u2MgQ53BP/3nq4qtdO04x/2NKQc58fWelcigEuF0LgmXPzwcm8Hq9W+k4HluLF8wP0v0Bzsm4iS2fVwotK51J118StnXUbmHl5GrRFjcEP4G4Ps+4vZx6vzml1mbZk71gPGDcaSvhjNGm9FJBQrUnFKnpYMfMLdlvjJbmBXfb68eZc7O2Wpvz+7nPTV0pfX80FTshOT83H5/95TV8jZM7czg7VNVRiCBmMYT6+MezCVuAJWNA4L//ZrUVXAetTvjSjRmMFZQPFKZ39iCTj3K8GrMYfhwEceKmILNuxf/C3VlAhWSRPlHwjhIpXli1UOtxaW1906P89a1NxDqUYQ8Lsk12c4f3MlCv+waN9Zbb81RRlm7im3ACdZu/TNXj0kPojXYA75G5p+6BeuLmPwSLr88OTugvssrMcvZCHxB1/pKz2R+zxaaybGzk//tdomHXt+rdwmvv+P3+Vnb1aSdrYL+z5oWuP2cCrtlpNb5pk/OSp2IwHfFyHVlGxrR22aoAHWxF6lohgnXfrCasPu05K8298IKL4OfWIuwWy1KonQk88ICuoWVfaZnJA6P7y/gEbDJEYn/pd2VP08u8k25kNFpjlU0zgioUOC71dZbKPBpfrTyQX7ZGjebE+/bGvP4XM+WsjYrHI18k2zviWkPZtVcxU0y/nlUbPpH18gl3tVMWJxvBq0CmnFPca2oAqDTXk4pyP35LebIRcLSOSFVrx/m5SMXiU83mMw7Xy/VK7CmxH+rpz5oZxoqg+zmOwInwspBirGPdTbWjQhhaJccHlj603yWDFRVHFHAzEnCvnkofTFhfkG+W4Aq6zZ/MF3o4srH9xsw1t5AshS/mluN/Qh7rUxEklWfZqJ8Q7+bCtTUCqSjjoRX1VQIEnpkK2n90ojsrAblC5C1ndX/ozFFl5cuf03NiTBcu698dVpprhihgwesqXnsFGYWT89Toa1tyWD+6/WNFKdopwUaJVjAuNYnulA8YO+zsbzKS6Z/TYxcKGPtQ2tHW9ZY289RL5UVD2WyJGTgiVSqvMVLnabLn/ulJU7A+Lx5D06C8rxoafMpmQp9nIEGioV6wmujM4pqaJazHleMM85zLXEoQK8ZhiAEFScJ2J4Yt+9KtxOCNytILL5SekSw+3YyxhQNZmBAhS6xV/iBLiFFTrtPonF0aQ2B3xW5dRH7bxv5eMnPxnrL1uZYUCFrLY57kGNFSMKg0FskZNYmntbOJJifQNv81ehs1NsfcltJ+87MXznFO49MAHkUxTbEBngKgGWtTHxjoGXELGKTLPlQEbD7sS/SbuJm4bUfrZE02bC2unrTC2LMQJ4IhyPnRAvOhVosQQI2qhXG7o6PH7S8kpcyulmMzwtShfrZUwjhDWykH3uZfAtf+dBnIfPXvNjcgrTmv0z+svo/aCfgqv/mflVzLytHi0xcjZttqGhVGR81Atvqlv9UDTSrn9geOKzaEgy1akEoj2tH0cdnTt37yOcr4bQ1o03pF2R9JJLtnZC11h2nimjUXNHFm/RK+iSNkV40sKO9ymLLmz+F7qYB//YM+ASqmvKcS/fV4NqOJfBxO76T+6qSlXdjZMhr76PV/+QNC6jpIAEwqfVUD+uXULDvOGNdkdxLi3upkbVCVWVmp6bSTsJYe0MFssy+RWZEMDAFrxoYHHNXiKL1KHqMA7qo12XOzRXsP8jL3lVdZeQDgFWjwx1elLh4CoxRYiwgduhJ6KCaHCPwChQt3H79W3H3vttEuTn6iRB04Yowk1kMQ/whiufeWca8AuAcFk+APSJSh3ZklOVhc8G1y0dE9YotGEEdiieCaaCuUOLdiu3ViQcnkAe1cLyLGe0Q17Azq9shCiunZMhl/UC6JQYzRZ9PHCkZX5BtC6AFN/bKledOajOgSDBAfMer5s1/xaXE7NWPdt1RtPbm/0N4AC+cKKS/N8VV5VdIyiSYYB0MDOgPbQkRTD+q4fLorRHYHd3uSGzIzat0tcWH1cijVXU37RtTgfxdW5XVMprm02tlNdU03FBgJcPHVvynnn8OjB3ykIzO2XFIr0WBv/itvObahnSRcGHygbyhbIJR7sZpWR6f/2pUk8utNheU19MQdtRKyShBW2d6ffv3iuY2R2DjstVnIIy1PGgB2/AbGgeuVXmbf4uLmCVIEUUebtqfmjYv1ZnHOLuAurNUmH0ulwOVg8TZr+HkWwS1u92gF3XDE86kPszOmmNIKvvW6/9hKbu/au9a2YsUxeTkYYBsXV5Rp6ruqaeQ3e2TgYXkQC55hJVa1lKJGnTAltQBwSapXw9cGWoqUK6KFasr/XCJRDX+GV0web27g7XUjFG/EkxhjTLsVlUTxvgnxKG7BxsFaK0ZJ2VB4+6BTIN6rzvXmjsa5KVt3sGRdQHUN1mhdiNHa4osTzXQLM23TCa9ugvbHDUobBmJ53cCMdjK3QVCt4i7JVT1AFUBR+7X9fZzs/qpg41uGSS6uSyIpo11cyIcaaR6cZTTBFrd/veh1n7PfsUQKWp776Sh4b84QmRfZws794a/OqTGlUUF9Zaa1kb/xxMhRsWD1n01oDeXEx4eH+yGLGQnmU12s67mUObZ7dXNjaO2G4qMfozg7TELeeVpGH44vr2gYIKMe5LpwoRa0RCtslDkPQ3d+UqyzMQP7iU8uaVqcWy4Mz5uCUmXgMCAmMGZCaAhQKZuGRKVnWNaYwstZPg6+9dIxuLhf4hs0L9VUMxH0ucwHqHtb6SEPyb5mbej8T6OhbhTAg+tz8IbhWMpPqkbckOZx56ue/b08glmWyFYJolGUvP5gFmJFP4Mo5tni09XiWFGe/bh55ZVCXQbc4SvddgbCBWhdxpWF/qfNm8AeZmHXuCTTx7rpNOi/pSQv05IV0n02kIse113p7w9dNtC56ajV+/jkI8kjRC5KTRQ9+Yok1k7iOnifDlXmIdWsd55Nt7Mx3L+H2i+7O7IjHvRE7TNjVsJbQkToyJ/IYICLIQpEQN2oKBHkPe1dJ7K6psnPHroNrxxttU8vM+wo/Kjvlq1cumwwYCuevW7BaR9wI0SDnbsA9B2xMnuywP38HwkR5QSjU2uNC3xfmx1bQSe43zbWpGCFFlWJ9Wl0mUsYN2Qm2yfG2qwrhtPeZL5GgC+kY7hpB2w1cNh2Z4nKe6EE7qDdsBKLkABtmeHy7N/rhxyr1byNcDlylzfpVWoOzVG2welVFr0BEF1/6ZCPmOieAIOnev1wZvAEJfKiDTQlG5ETQe8J/xE7Z/Q8Wwm5j6Mp9kMFaDMulhOsibYq6Q14FuscUrcWUrEp6HnJs9A1UDE2BY1i8lqAMKctMHPY6MPezU36SZmp/Md+hMTZIGhjEMl41hW6/9859o4gte/kIyST8UdLcur9YrJcwYUpRTATkWMO69vWv3bP7eABKtXqCLxSgrqjUf8ttDFhkmAc55zngdPU1Ns0lBfObbxvN2iDXJTBgBSacZ2GDqlURYMQMnlbwnCI+k6pyRczJ1RsLL0DDfhCJsRTJwCIWiOVEykg8JtF6wLOsyKSQRXS0ORgSLX34rrwXskqXAg+DypZcp2roVnwGKrjbYchxfHUCk0+GxxsdxBquLXeXTw+5MEfkLX0jeMLr1HfPKy0gyy+5KsyxarygByDim094qFL2ekVU6xgTe64MWhBCFOg7IsZNMuuqWVUHMt+Hcx5cN3lb2ei4t795OABfTtHW+K68mc748oj09RSbfGHV1d2XrN7pF5fjiPDolJawXealsE4aKhOlg4/K2f/syLbOAL+dCD3xK2L7m/juw+5F5zdl2wu4eKLK06LeX6YoXiKDKsB7gftBZexTejoCdt+1Wn3CcqfxwS3GOH7stTfAxaLs5h42K92tzKbzyPk7652FwWnlajqAH2HaWCiryKDdodmr9kqyVF0B0G5kJlxMSldc8tb70BPlCUGqhezvTD3pSywUcjkA/JSFvUfUzQLJlGtYiMkLSfMT3mr2ArLtlIq5g8GneoiZtzv3wkUAArSmL5V1rj0ty1zYorv0P1Q9SzCTvU45PYgw380+euDRr7fwa/pMWgIdQXz3TqfTtlgw0guj4NG5Uklcc2r/W1aoAHpaGDYY8KmVNwtyUqeMMKiJ1wIJykWSHKNjleacvahOPwVTu3Wg6rPh9hqTzi0LOaoVGIzX4j/2FHCzyeIvms4Qv/YWo16pTQnXAP5j1WRx/cuQfXU6gsvXRfvvvhpvTP56berAAiTgVU/pwUPZ27lSHpAQTZOvAJbftlN+r2Rn3q+GRGsy/E2Cs/RYOErfzcdbxlcxu5i327BTETKNKCiF7GsN357iTir3VjEkSQam2fd2Sp85V6Z3sGnhnOHBxy3mzzhLsi3asvVLX58P5d1y0J2GnaTD0BfU9+SkFKCv8i6wJPGniB9b1mlwHTRY8GFLXK99mZ7OvYOt80y/08n6btB2fPfrRXNvpzfm/tnQUvs0sEBaBhZiQF2QyqOm+IRTiAD+Cu3NxsRHT959vkUn3c0FWP/i2X3MIco0nQAY45HShBWyL6y9gT3Y98pqG872626I7u5ZOTP9Q4wLUyP1ltdNv6M05TkY1u4ZFMa4HRQ59pjJIgVy2dRgufJzbSTKvMtBjpKpLhSW6gWVWDYoG2hxwYURo97WUcaUkCbL39HaessAyIVEHEsZE8FbL6qno4zfwIhlI5zBgJheJlhCX3lzC+Avah7pRJeQ/YVu0X+IMb70pMWkmAJj3dnaO197jw+M43hjkykoApog3ZbuBbkFJLawtpDfpMhD20CYqIw00S1kWyBBm/1eYQATQEIzlZPy9/eanv+qCuQ1zsH88FqmQZwlFEbAmFLKA36/1ELO2N3hXVKj4/YaEchNNtd3GPDqj6/nvhfQOWW3w3BfJNasuhTQd+0NoGZUy2TK/IEoIXtI69mAyI6Q2FcEQ6ZMwbGqSmlJBWSqHtimYth32fXb2HsI80rC6Zih3b5APidjVIzErw/ZcraQ7cwcoPVP1mCWoWoFWQ1CW13mn4mz6iHdZ+VEgDUWTpDJiJmBDlY9KED3x41nitnEwizO8rnAPdKtmDkhigzwTb07pXjr9i/di7fZzS0NTFbFLqyO2oeb6Lmh9yoNuPZy0XuMWvvCg+0bwIVHIsvoQsUKaKVx54rkLWPcB/DEFwwy9YnxMmKRqjQBZWnJF2AoqSzHAmjuWGmTsHFg/iczfWvkz37Hv59rsr7uYEWpAlQ/yHbgJfPuGGWeedHt7YNA5XdfiMJW2QzaqDHC/+/og/QjgA8HadYEv++vvpjJTlXPI5tnJ+v/ONuTdBQqgeNwJnF4o4cIHI956Av5qoQ+BO2oLaP41NE/bpMt1uLrwYz6m0iUOW53MzNprBzH8c9ufOUzszVZTCzdnchjJmnFp6BAKQkOekrN1ym4Uv6X1wfYpcHmaNQA1++JgFbqOi04je+ULmVsbW6NpoVsAG2bWLsICRCKndqPUNzUSZIWadaiA14yP+q6G9fQdfLsKaM9u7miWsyhJxHuSWXNKHk4g77SXmDuONv2AlYJJHtqn8YGw0/kGyZRCw5A05G1AE69l3pIagOBG8dNqNUrcgVVjsYb+wPwjT8pYY/ZsGIqY8/5pk5n/KLQk0WpNgMYVGSKVeqU2n/6RR07E7WGcvDgnrdPo8/9QTMzG69TmD48omvIuMmQ3fKnfqGRmx/5bSxZI+s9xP2tJ+b8W+zoKIHVmpeOMfeEmLsf/ROElQyy9GP6HfUR9vKu67ILa8f3O6jsWUw5qNcTojax25gywLBau5FDUiBaBUiS30X5seUhC+uq8ZqJOrqG+iQBlhGEDvy3XSTp4Z3EBTOrKY6AMHYWauCplufK8iF96EKKGIyrNyKR0hP2Akh0mfrPPeZKfx5WWVeXURYoi1z6PwHs1AclYFoOLr7qzuF/AJcyS8BSrN1aPnk57bYIG/2ILVzFLNQhXmeRyXHXstrWhRk3Tjrf9kXmRuB3HeA4P/LER/5hLkg73U5/pl/r+TEAIEdUwufgBmfpl8ja8rc7Q2uNSJu2wjrRpi83n3CiXouGZ6i9yrthJzgX+tZ3K/tK9INfwRVJbjuRQJYyCYgH2Yw0m1hsoAshASTOBxcjGH31B+2Z8jZ+hAHvCrC/+R+WUjsq6p3ffiA8QuKuUstWc3Fu7uLMyNCbm/890m8pc+i7u5cufXKd9YLcmqdXv7KGXyvZ/dQ3jrT/Zjr4Jzw69SoFqPw2wrVffRBXBF3Cgr3Sa0wIsEek9Q3GoEY4YsNBT3Kh4afERGeQ+OMXluk9oATrXvUY8IXVhIuY0teUq1rNKbCOztWuCiE8s2mkbpVGrkm+8in/3jP/aFlbOLegsSzubGobjfQwkXqg5Te5j0mXF6eD31gEv/ff/QHnoa9JrZsmV6wVH9DOY0ZuK5jST5e6NC/VgMuz0g2g+CAhy7GODuRfJl17olFbY4ADoUcDAI78QNiadb1+Ybn/dvhZ6TXI36M/BP+h73zjOUsRW+rBZz1M5SA4+t8GpfLXachaVDANamqE3Cq04Ti+pbDL2vLPibaCe8OY9z0AKlJ9lkYjs1wLy/+luOEYnGw+fB0Rs4Oi096XP7munwmq7juDtc7fAuPVB5HbPrVzsnN/LXDAfav3umNGgXKoWZqhb03WBsLtG99dOdwkglMtti2h9oEpi8qbFtxuOP951DmHXQxnYp066gKEjwAa7gIu5NzCHiiZrd4YuucELC2jwq5f3r4wBD57CzBD/jZugcXc3q37XUffpR9FK7kXvnff70LB3eMs6rIfCOnBD43LU8oXxUX0LKDXR7NyXmJ5RhH4jGqLG5gokzZh6o6U9Pv8cM9oFV47MIlvYnXkJ5TyAnSfNwhNsEKAwItYhEHUdhzECR+xgIkmDFQEnoo5jQGSpTg/QQY47++TnNigtmqHKhDUJzmjbBFDejIEb5nB8uIk6Bw1THM0mLHmxyv+e5okeKPcgq7JanoWXg8/KNaxL8ZutBkPGwkilCio0fugFGIyak96Li0W60jVQeHoJ3ckD61eVLHmYg8qLiYvT0mWRzWuiO6Tu/Lzpz9rfPA183vbuTB7pvH6Bqa13jr/s9jIfJYJYbpkTuGK7IROd+USN9A2/WFpX3wsqJWffTJc8F8dSzG+ZWrjVhzE7JuIpUIfTvcZl9rKtQ6UpOsD9XIRUnFavsZ+spNp5ytCTQAa3nBSb2gS+cIW0MDjrbflvdsgbXhppa+aDzvB0XS0WAHI5RUg0PYuN7A+RKduLm29hVFdgas/OTe/2kZUogNW4oHYf1AzYSo01kM0m5jcvQPJUSdvubr0qZFwfjGKjyn7ZbtHg9aIMUIcB1OFsm8ql20M9PGsDbpAwq3JvvN9UwP0rOWmjOzObkhV8LDp+WM7BrmjJmLpsaWPXn0aktGSpZx+QNaPQTvocIJDrf3K3R95A8GWC6zCSfWGRtvsTH9V2nrsRpu3DvY0Jk8mxM2Xsr56M0QAQn7Zddp5/gLMs52gey93Hc0WUzdEr3z+IHdDQ+S83s4nn8BDp/7TfGV7NWLyNLgXu9AxdxHVI0zM4ZoBIBa5RYOTaEw/lz3NfyXu7f0KKXE2EUjov7+1ENQqD64cWffaZeDAc30P9loq5Q76DULaROD0BERlfvetUg9euIXIa4fYYIe7MlCI310ODsCLpfsx+8ueiPDvRI+7WHl/Tt9DvLZQtQX/A/pyuo3xS1oaMzWxzb0ivViiRIyV/xtqphUBy0i93WM05O3U5XduN87CGZ8L4RKwRs3uSeT9gZdS/tnCN/kcxHU54P31HRPtqZO/osoIq1Qt/ZSos4adOfxZB5hgFPg8tkEoqA2fRmHkaagicYTrZyAxsQ7ht3I8KfV+RD1UjsGUjH/wcJ+cwpd3OUXyXC0HYKpWZYwFmT2i6f3CrideqREqBuS+W6UEru39QWUY3ZUBb8pZXu4ZvMsB38C78z6c7m+nO/M6o6HH/UzIBOc3LnTPFlGi3C192MnOuIafGnTeybfg6aGvTmrQ5lh6K3Y1+93arMZqYKdwpcIwbfH6zj7gDE1/RH5kJ9ARiM2/KQnVTsG8l23AjHMSBUbpSPpwBbNbdTxL7gjfpQ4Jpmqc3U/eY2t7om5rtZX2EAPYyRYz2uLJRzkpfhaWe+iXdZSznv7Gika0SXdSOgSWGpuXbdQChcEQybAlssh+53obzoWbMUa3EL+yd8Dsjb768i4Mzv0MkTtfxf5sXvoSxIL8UNHpPqzJXf6oFcg9f/F6BiY+xvfB2VzmgJfdeMtKhiw0bfUYGdBSLCTUYsjDyoHEz+XsmCshYoOWw8XL9lPxPYEhTVCW2mFAWnlQ6+sk9Wuod1Begtw/OO+kzAsQB8m/z4zCa02m6ciwyR7k8s9B+6FPvVPowC2VbtS6+Jb0dWm6F+wikjmIdsXvu3eBS7aTyCGH9y/xCQ683ITZZJpNS3UKGS6ee6Q2gyrGfydmR2VtNd9ozxV16pmgGxXjOqD20IWtL33YdLiO/8+sJv8kWqmMxGt2CJ7JOTjHM33RGzkxgfuxo/VjaIckLkBaXW41KSoeUhyFD5V/n4NmF4f5PFJbkmEtuYOrbjm7nwddnsMbW3DdP2gh+g4HQWv+HpgnHftj+ao4GwBzCkgG1Ft85Qamsi6ECpR0ahxKZusXlqZG5Nw5kG2yeXLBofm3Tjhba122sViC6ObbsOt4FM48p5aUi++9Hmvlv6UvW1i6KCUdnsgYtOffT81cAdGDdC4iba7nipcj6uNsIwRjlndCROxRmMQ4Tnz36ubP7/8u7HV8TmPjCkh5kyJ7/NwOvgoed2F2xoU+sklWEJE+HewIm3gbFJibgZzVYhsWkr+wrgy+LaoR7FdbHUaOLK8TAvhd33PPK1H+ilzIH7cZ6NCiq0KzzXb2zAPzCJGjXn/6J6tYzRq/9EJw7lkSIcc0h7xlNU+nFQ1vvJm+F8u+bF/Evjt4+uZX2fdI6hiFUIxTZhKXNchAFQpgHs/+FyhGX3KKeo6cxfc6/3hH4nyn1dlYX/IJVuVWVtJ7gBwlfWaDPBLnKzVunpMVN0UCTjF22sP/TnXkyufyK2PmQf8lI4spowOOLTL7n9OKIBfZRCZPaNWNghdLtl3ErJ/Cx4z3GLlyCbC2UNKu9OFG9tEQwNo/Aa2vf1dev4If6JU64WZuTo45q5lEbW4Pt2/vlIAlH5ZCWGO8mCg45R5MmzVv2h9Y8nXlUWlj4utqzFTVKTFHmzWElJgOXQX4z+2+dO4TkNw8U0QEjhYWJDAPP92yb+zsHD00ZcKzYavNShjlS3oXDr6NclqzFIWoVZ1QgRMkFTQ28sVESVnAho+SyQ7TtI+fYfFvK4aoyyj+un7hfNj5LOD7mD6C1I9b56B/ISQmeTmmYYTr/+jm3ZM2S4CptPnd65BL8a/nAn/Nt7QpSzn+o177Rf/nG1yi+fAxBUEx0n7ODH8ouVcaY1PXhKKRxryY02Lxg5ov+q0X4Gb9D22g2uFnH9jtz/75msL6NqbtbYsft0fGC9K37Ck9D2VV1KZJRKQjcnICTFUJDUZCPjt6BaGuw/pff/zRCF9CqAaDEJvKhaUR3opCQ4wXW/f+3pMRmla/+vid3fmb9dfc2v/aaVwnvRjeDGx8mWf6B4V1ZI3c1w/bgEl9pVavVhnyhuZF7UsvDlfGrVPak1PEfXf2vPnpPxN7gYWU1rnmDQ6wxlbWwYJKIEfuWXVq/e/5HyDwmJW9wP+tH4hntuG233wHRs1j7TaQC34vTZkZmVefC82SizCGqYEiQijDMvHgYAE5+R3+piYL5+6Yo49Nfu/+ToWF+2yhEZ37OmXIfePBMPy3SF1rH9jyRPiepHk1meL3Ec2i4Feavifkne9dYjJ6t24vfu2gopt22eVj+/dB+eoQWQgdArJi063ve6KrYk/06naIFo7cOXROADmzXzohWLyiThpxp7I5nSfKM5M0ZPFtedg8AfNm/dR/MFzO/Y54kvLtYUf2n5WVZ/SpONb4UPAAD89H/nmyDUXi0MqjlvNiXNkELf5Pn7qvS88hu6BRSMB9YhKrI0XdAaPlnS8F0+gVHIEB843gF3cO+fWVSqFam8F7J1xVJjxAhpKJbrCLp6aUM7j+yV/7Utkk1lvBO8igVAm5G1dLuzXWMgjYaGyz7/R+/S2AGj26D/Dzq/cTm75/ZWOphFIMXlw6pR+zHJ4+Pi6PpqDsl8uSzONftnnBRCjGT2Y1Q1kclMoggsbA7t7iREkBT9QJh5ru16t2mPTxuU8WVxdRVtb7r/U5L7ZxPU8JyVdybdjspqaBEHHYYiN03KIllk5l/q4fob2LKS2CffxYhFZjHSPxRJXkd9g3itNrJ8HjjGY5LtOP7N7tyFLRRXL6P+v5IF//xb4yqGM4TI66a2SdZWu/9NL0fJSCTiK8ciUzLSKsL3gb+6gPiH1AvX7jvTBzzLW5gWS46g9ADjA3OQ7+WBO+Z+oICNqbEkTGvP/rFch93we+h++d5sf+PNYaCGgTf3pbENX4RBi64RW3ILZqocwrrpFBUVtXhuyS4+2HtAh5seZ1vohDQqfbZ0XS1kSOLptnoBCQElGWFwwmQnpCx/UYkrHgR0AfrpYhFoklSkUfQYdxDzR8UmES3a7efM2lBKuH//3+SYo5GogQugatafm5Q1zE3RxufBhDhBAqyxdDpvUeeJcsu8ZPAhbBzxAH/cipEp/+i2J/Kpd5p6BuRJvPofhKkz15mXvezOXV00YTLy8z/NCFYwR6NKJ7LhfB7G5zuP9CLWigQDzYVvuA3KchfxYAaPPfyB3eQGLxw5qbglKG2wwC1L4tt2/5EJ1lxKNThZL1kWUw+3TtvYeIFP6l0L1BtphWpyS9vCBkEPAVr8I/lGvL8K8xlDqmD28DVBTLlsX1LSkPqHxrBkaxLkFi0deAZrbmOXuekCrQy+/Dkzp6aY+zzTWsHYGNhPPrDaYtX8vbzgl7vK+7/MoBDzpdH6yM4FLMHfKovV/D+Ai8C2clkpyFIBz14/dvyLP7qJ6gxcCpD+JHFlSFRJuTZU1BWioXttfgrOqfvzXKjgf8WgDvfrxaYDM4F8u1hX++BSrnGxHkUpM64q3LiOl8hRQTwIh1LKKSZ7LegEQTnVBevJZyEjD1HBArfDmJ66EsNld4QQDVdZOBr4brhw+WzMfdhupyQJVgUqNOVskmsCm1hcGMT5+5Ozgh1VMqbgxcDCOpxM40mswGps4ShyUr56Ttqyc9ULK8C/barhgqwg4UqAwcDu3vLdNrnOLnD0jY2e/bN1CZqRHex6VRK6Nh9IipOOAevpXKRSY8rMYBm7KTHTbBKN6lyhAB7eqfaLa4Balimb/zjAiOi1EhB21/WijZ8z87ysXvSlKcycrelsmUxXOkAjvaOofLCFMHesCAFzL7d/lIzC/W0YaykcpjMEtejBrQ7w3sZfT6bfHvsNfQrzkt8zBC63gVtQpRltCYPWj2d4CZprqJpE4Nt8l0+Q9Gls/dYepgsyvt1bfYT9GBMPiV57IzwJFnG+tUj00NlCEYqThF7nLw4SMwoKhptgV0WaPkwiKmkq4dTn21efBwaiYd5Ob/Y8NENiGrXF4iZbq1HXWvPQ06J0yrWwSgO635rF9dlTL1sgcWtnuKV4Av54O5x5d9eOd8ZHdc3NsS0QTn6hj78/9dWnLn8PEXKs+S3WwWklsbDZ5t+wODqu8Mk6c004U3C+dnYWnn8Pnm9+0gcD0d+WWrSjpIn3r1xVY2/kJ87vcLXMQe97/xCA/stWZu9lAWeSI28qnbuMNPG6y8WjyPLwCxmcoHSA8jyHHmPMRHO15iWZQlx0pqedmsjYutHBaI8vxEt7V10eu9wRM879fzm087XouoBbPY//ICZbfv60JcNAFjjLlvz6kBuKvrpBoRlv1o+uG32YQRwu4cx4rCU3L9QYQffMkiF+6OnBzkjfNiA6538FHbBpr/5oCDjY2ecRnVMUJ2hRoVPneMF1Sgljn6RagE89hUCfF0WPrwO3Pe/fRb16nyaK7zWVv56MFar8NOIuRouMyDyDTaGHjbcGgAjL0dTXd5RtSggdK7l0+x5KNyVwi/jHUurChydUV5Ckq/fLNJaBqea07SxXBAf6Gn8+/JMjSM5EXGtUY74oWvRJ2o9fedStGoTuT7jPMc/ttbp1qrO7BgOBp0t9z4Dag+VDy0vZ+MkhHC1bLqnbuMw8mcqbjVECv5lJjdn3b5qOfHZlj2ORdMGNHuwaiWYwmBB4GvwmjU0V71RhCO9y1C81De0gAKGZGPO+/CQB9P/l5bLfmFDQkVLk4TUlpFD3U4CdJXRB5f8UoSURWqTNMIKLwoCrwx2meTqz22h3PyXMpIc4hfgMaZ0nZmQiXGILW2pF/fo4mbWdrz1Xq0aNLK0Z3zYQIMOqgh2wnfbbs5AYn/KuO/me5v4BhalXgasNL7KwTWgD2peyoy8mvrhAEy9agGZBiZMJTPrQOextLFqnwRlqS6IqEgP8aLcl2BT11P8SJqz3KM+e86MM4J1So63rM1vkAip/ZVgk0W8R0dqbriovdNPXNnVp1ChaAHw4UjWHHkrG7t3Dz7sxqp/PRffqnM1B5ua6MwzrzKxzWkGriOVCMMiANEPpJU9rlH13eir4lBa2+0ZQdiWrCBSpdkF+4+1FqLZ9Zp7/LxyilLwvNA9+lYv9OiI2r21m6Nv5OPa2ozFRvAZqpaBY7FXC+PDm4085UiSAiiLLLx2JwiQy6wojWql1AkgmSIRSoD+X5tinJyIsWrVvY0GaULObDH/unIglJPXbpLAEk1BQx1kMn7DaTBgRel1cgKWuLaZz1kQsTK+ZVaiLRdjfNlpvFfdVKtNpYT1+UzdeAaI9XAFueh6OgL9k906t0OAylLwmwf8NH+tdImcI2sjVNOruXTigOw0OBbfhWw9sNNuea75lKcglbisSncOqVnH0MyOAHRzwvpvI0cBnykaOm8rC7+LradeGy72/epXj3tzbG04YguzI8HoYDAQD3gfFCE+tOtxcdMYAzsiPQbSxDe7pbkpizTlyG7WOMue6pPDXiB2ISsYDaWtQXnX3mq2SShXdKqO0sR2NTq2h7VWKl4i4wRGFCSrAogXVVrkOKr5V4Ne6sKzy4RvVy5VeU4g9LACsS4jMl2A/bgVSll7dDUamOAaFrZ/BEWhId+bPUQTpeoGaDm4GDHW0+Prh27h6Dlu/JeCTKMInMoJlx0DF2eWdSmrJI8fIPBlhPdbgStbVhBiNdtmC8rfar4FZqJhRor5ZswxHjaV9ig+cMLGuwWY19DNagqZSumoL8Kk+z5lgljEd8uTbdP/4nRuJpjagb58wc5RlGY+6BgOmxLrAwS+nA3YurQEbjeDXjpnS+zQ46TLIvl9usBTKecXn+pF4VI5FaoBwNk91nkGl9EDATj5xeM/8eBZh6Z/BI3lfjTBf1PU+LH/9iYrrbfmHlrL+nNW3UNu4BR8KmKfTj+/bujvOp/h5zgGb0m1riscpAxux16t19+Q0wxSct37a4Rxo2GGPEPjprLW5njc2bDfVC/Kb/0lJzQsc42X5giz8bWNm63tfuyNt8SLABJKAdtgpQqNbRnXzL7+Wo1XZfaSyAetmpTlRbuiPjwq5RjLdcsnnuKJ0hFL4OQeiS40MiqxESFJzePuiedrWSzu90cFPuD8fI6NhHGdF8aSJ8BFOsJ01UxTaJFIGOiYxUP1g43DlaAGgj5Bch/851LQl93sLDyYP2de93E/agJxpSBybGCpEl1JgPMIZsQZKiW35GqckWpKpWsoNQErqNkeBBmpnhRqSMGHGVtPpFqXIajFFxm/v2hKacSs6Hr1zMwv0+PqWJ7KBzN+WvzYyC5K15MnG2QeHzWidkBRYe7Oul1JGd0z3DB6uOz97mXfPeTYewpf7eziFRlc387vNOasSot2oLJoqwEqDpd61xrAhgt9GzoD8fxPGrFx1DwUNtDa/ac1yKVVzgw75wAKEHH4SclVzr9za65hxFhBrcFNtJvTgyQAULeCRKUKYpGcKTHqmNZQAYH0q99dhtOgdqpbyRlKF/s33UhlKey4j/fX0EP5u6uhLBeDmId0Z9zkdIHgB3L3b3BmPu7PdYL6sjpF0i0/VBPuqYDSRUMyixR7zES1iVXdRXieBKX0azforhLXpg/HejgcJECwaBtNSB7AB1Bqidr7SLAYcQYfCqEJ3KKkbSMrsE2Qu8OMO5kYX24EUq/7Z3YAW52EKBouryx4iwfXVq91gcTQl1W2JH9DqFx8SshIgF70C5zFRI6m8bQB9onM2NQlbepVAEEljjjamJj7rlrFHIj9c0uX1IpoI7cq9kwy3ALUeLDgildRTd5l1M5c23UkN48yJTOee9tYK06UPc7hzgdF3ZxCAnyafNO/iRuVbD+Faikd3VSYQFbBsgvKO77jhJdvZFIz6Dqc+cN2S5tbHXxLrq4WJl1el4nx6IUQgxLpUgArCqF9EkCO6Wdear/QHWEtKhePLJB8rVrqaquqX5ZaCFL06g0tZ2mfnS5MXXqN+okePFJpHyIv1RXYbWWmkM5y7kL+EuE07dmdC3VSDMmXU1cYsB1PAnGrPSlzKofe7KWz8mbg4n612uA7LCEp36WJtWns+kKYNVh3civQJLV022b/fiTRGFnt9pvrwiKo2toFBRmY0yQmvi2YYFFnr1KM14OLQ3dxYDho9geurtF0ubRlp7pHo4unQLkCw0Uiekw8wH9cnm74rOm2orSwQ7Xmz5aC253u7nejOocVmAYjs8Xwu655wF0sxeCoKJJqnrwFNweZ/9nxnnlfrO7NWPx2LIN176ajOooK4vkJdetVlmvoiJ4ZeHWVHe2oxiUX+34hbyiRmSZmdkDR9uT44dXqkDb+TqBsvqiYRLA8Een7vkY7kWxlsSZx224572LFzrcbwimLpOW+kqDLfOP9rJ2S+l/HFkQTVlhwnL9dXIJWgwpkYyzf+KX00fP/xLoGXFaCgsVipVIrYyrTpKUqXd6dSa0R8ltQq6imr3Bj82TJ7AZyIUh/347kBJ9vTE4TLUB0VInqftCIlPBlUhVu6laFEsLm8om4DQ50Jns8ZON9cHvXDs10mqtdzPmQNDMBuHgnMkLsZwZ5+Z+KnIVJXOso4FXaF7HSc4BHF2WKiilrIDeHbi+gWN7Xzm09slaxpZqjVXIYrVYRP6oS3GCeHnlyfhKUIc+xW1iO1PUJGDdActLkJGlAxKrfiaRb+l+oqqRrmLQbQd5IGhC+vB/gb7+T0zOBBfxn7V9PsKJOVYB5HsNfBCDCVMuzdCpyLCtOO3LgThZ2kwnlUfCApeURJlkuqknlODMeuH7uahBpPekYDr6Gu9f14rSxIPbeH8FCXGjJ6Hxwu4fxNVyJ9+3fF4zRG0O2ClalvpC4Yq+kp7ub/ZMZU/PzuQxWwiDpuAmDTps3Nc81OTpCvEAuSS2O6LWLrj0+6CECpz1wkOCVMPGreB2daPSr22qKwsO3CDbKz/9kErBi3YFKrmNsblubFN7zIGxu5+sx+PmHt4mt4w/Tu7nd4rR6NQ27HVMSNdsSQXj2Xm6yzS9X7i9DpsbXfUS+kj37pFBzmZtfnv5NgeYYxNxDKsT1BojoGp1Cqld0hS/Udq6+eILXhBBfteo00dEH6hUlVagP+o5RWSx8AGEw/3dVRTNc5POJv6b80cLUKF8EJCEQFJ+AYxzuyhPwGThl9avHNkKs+zqnyEDBOiNMGjU0LWDcHyq+XTB/WCH3NrgOyyPDIxWZ7ZYZ3ZmGxelM/L27FYT1CD2uOu51FMylx1iVScGcfFb3EEt0v4KT4FCMS4JAEBWVHCJAxxq71VR1DNVOvTlB1kolyVhDr1rXPLjhWmOf7+ft2uRKSE1qZRmeMYbO/Mb4RL21dOpe6rWV2d7gjFxJFDzjo7iwVYytgFU0kDpUFOTY3JOJv6HENPNY5/H71oHUIVzB5Qx/LQFKuHgrbz16g86I7XdjRSkm186qEClopMW0AZLYamBD5oZB3nHvcilFs78R2dH5p9trxJ7j6tflELcsFAEYtDvySjRc+kQg+Fw7K+g9fGlywdT3ouvNC3sKoinNfTHxZnj8QPsZ7PzWUlUJPZEe7uYjSgjVx9uO81u1LKBUAxpNFRQJzguCz4SpQ5e5hX4MoTz4yVgY8fZWA48QNS/Teamjqu4QbEPIemoYduuXrJ8T4z5jC1EZpzQXNj3xFOY/fPB1hvkxd67qwNEIwuqCg/VS5UM6otF/8Bt8wfSQiuLqOyfsrhkCUPPrgQesx7Bv85TopRjHWch25aa+6pa6gybgDhZjsbfT9ahRx3cbETeC9LX6AfUezCTTDBmebG22MuOxZkRz5q1Pphoa0F3xx2GE36v8JdTzsxXBZmriFz0zWh8cKdP29IdnD9WUDw8rtRqb3ZJTDrzetlcvKA5aVUu0TB1z60VKen0TB3/0OcIf9flj3fWGP/sx0cg0VrF4ABfjzc+iU+eCq5/X/U3uBVx5etTx211gFLA9nWOA22udo75ziMUfHTKOxkhZzbdvb/DUs14Z5blldgax3UO5Vesn1LQhJNW90D6N+KJYEM6JX2beuDrcXFMGgMaDKmUyuCdAR2oQ223daqdkqvb7kVeyG4mXf0nxTU5o+QBwwg1DmSsEOUBOVQ4GWyA6uReN2pe+PTZ9ojluqpaYyekdJmlpya/Ruz6t6+7c1Yx8JxWM3nAH8L1F6B2gQoI9mxs843K6xwlZr4+c9KgQ+QCjlH4y23wbbjB/P29BfjYEWtjgpyx5nCL+afK6BTbLzECLXTG8nX7Q7pnvQ+mLzoTB3jjcpoVr/GrMwJe7NhbQ3ZAIwmFd1LaUJv6sH0KdugVw71Z05frSdf4vFCVW0obMDwv1Bj0guyAKObXh12QmRr2kvb8C6t123IcQjmWkH0+hBUgq0qyft0BtSSGQxE+rd9VDmeKVLfeIIA1LcV9YRYVAhD3fa8LrmHs8IQiZY475Y/kd2C11PlGDMDm0+KpwMX7qVhRShHt/EiozS3cnxEz6oLyBL9NJunb+JNStTyih7ftT/6obxyQUXyq2UW5fwfYSxeQR8Twqc8D4gw0SIOcUBuS8bGB3hf9Dz2ioHnfdPQtdWS5lvP9kz/TmB0h4HybjbCnmuy0jKUn9tkp8vUJ1RbIwLyGYk2v8RwvwEGxIBM4CTNlBS+mDvKSVK8zfRvichXdGbjH8lNxCNmEN/GakcpjlZ5XmzJGn9AW/daJm8e8B7UkVU2UrwRtZ3jydrP0phUREyahzvJcw4swSTkv6CzhXdbkAAnb14iWEgIvwLrQmz9wAwlZqSuMHBAkIsLxmCzGKNNjYL7dwdrVgQHihberG7A+YyYFPPZG31G2lLEykHvynZunQUHvHsxO5lUTUiwlNsGZN2VnAxVgWagaVa5S42E/P0OqQjjMPI/wRlaUmNPE86nAi23j0GyV3d1Dsysd6uQ6pWWWPmFBu8GY0nNU86Dqo7rFE10PU7Vv/bP+f9eDESxA9OE/1ZS3kapRS/jouP241I963zy896dviI4VXVeFNzFI6lGYMmdqdI7FY+X5u+nPSOBFc1kxsaSre1873GdWjY+oKAtsdczwzql3niY5pveEXXld2piLCSzwIifUrq4+I+jaSF1lFXvLv0Ce68jlv56T823txp+bcOk4ykG/2hLkA9t1UaS9hs9BCh/V/wF92FVZoU9r+i0AT+3hPeiDoaxg8ZTT2Gs3RSwYiCkWqwXuZnZtAL4U4Ua4c1mZzho39TXZ0fY7VlzVWc4wHHi70bptfSHDMOSX7fMfh+qMlVqDHxu6Z7nci5AIwTkQTVpBXxBz8GnCqnxYbC7UjnzXlx4XkJ2xZQf//1/rK93mz7Wtgv/rT+8l8f+vPxub73/hxxXhoEjL2+C2sCuTZTnG6Hup0MlY5UGeHHUOF3pRpyCjD7Na0MaH9wiep69tr39fR85VxYkRr1t6/er33ggh9Kot93zc133RV33T9zziD/7uf0UkmxQVXZKlUGqlW2bKtbJQ1gpen6jTNWyV/Qt9si+O/8wkmAfHZ4GztsXJyWArZ2JmZ2N25+dQ8FurN3u8GfOm983uNye4037v/P2DBv9usLaB7/88a/CyAc3/wXnGeZJzT8qplFHnb/Rv6KfoW+vH6XfqSXwf/qH+pf4X7n+w4RDMwHZoBg2MgQXi8C+UQN0fowDjBkaxjB2cxm1YgS0oQj2OohS16EAfRjCDxfgCq/AdfoU/DVHZcGfkY5zsGoDMWUUPlnTapneCi81A69x5ay7SGgML8tOLzXaZWuXbAlFZibqXPgfmne2ALIPOhJYalhedfcXg6M98cO+SnxmfTwVqbkRpWmPSrWVqwMnHRlMFQKsTodidS1O12WsE4+gJfm2SYPRVMSDSnCXpgLado3Zva3ftex4Hbv0kor34hxe3eEcXsf6zWxtQqMI1ftgcjjUWTw1jHRFLTmOkT7Qtcofa1/Z200k6bO/SbfXI/cPMbnnbJNfD4j1Mm72i4RZgwUlKy4YUWM19u3cL7PcP9pdRbKA6eNQdbhxu3pYSeV10apukMNppg0bgxVsV2NnuyPPoTv/52XCWLNzeOqEBPWMgX705rZrrQMkS3cVPVzcKmaMXn/cDqVB1Ge4z2SNqCDSqQsvQ04TvFpEr3/mQM/XgaHWQ7zK+y0eruGws7UrEz8y3vUMFMdNMvIbcFoO07T3fcCtOzQK4zVDogfogyUojN2ad8SjL6vRqeH8MKVU6NgBTZf0rPag9MGeQdaSxe8g0LM0XrtoyFyIE0c+0Lnp7WJun27gfx0cA8VHT3yDwL6fQ8JOLPMBWNIVMFWlbmSx7pfN55bCuCTY9DMci4Mz3aAGkzx7Lx/D81RHxq/ete9uL7u+6wYWHndPcsN5m+z9+8mjzrbo782C6yj7CnpFhApRkN4dNUsIgzl5oFupGyGzRiNhg/GXagTqjysm8whk14/2XH7rGToH15sgksypbPo9/YnBMCizui1CpjL0Corn8NGSVlVrrho1rpYsy+W/mFt0p3pPPGx7OYhHrHOAZXEf8GyzYBb29eS7BJP3IZqkngM3lT81jc0AwN20DvqRPS8RwxH10WrpR+VYbDVnNl6Q8zRMgpmXHZQjc+unnxvU1Pmv0e04waf/LneTu+cnfbiR3x2TWsTyKuEXDwaDuwEZG7L933+dEXnpTo8K8KEn0bMhgSYugnpJF26g2r36ZTyt/rQ2JVU35JUBMd7qON/94onSudlKDliIOw3375YCL5fXCcNggA9louHE9EFNF5T2JVo2bpqW3u9h90gYGxtpP0XIzDutcifbePmM6frVh2b7bdXbSTCITx6vNeHQhZnGsZMZFLWd75x7admbVarpC1VutNM1QGnuBriQ313Hq7deP3QMyyQijw28/czpUztdiIZt3aI6vXeBHBhuXdVaWn6A3KC0TX7eaSaCnDjCz6oAmWvWba/nypIh7dFQgBq/4IlBK1s5q5rin0mJDjWzPjwI10QOzT9Sgu/16WbD3uZPp45X10qRwSLheTHwMFDWMqIaNeqwYxSHVETvb764UtgqANguDHSYNl565XExYNIO7UToEm9pgkZFEJZcvrFZLVEuub9JuUFFKpH5EPij66KNkfHVfgzStiDU0zOqX92XqUEGreuWHj0ktW+9juoyDelnhXr5AVIk6yymMTQDalxihAlSRyHWG8Dk1cvwoZ5E0ooH9pJqb1b8+M8Ep82z6JqfAs1e0VyZVhDh/YKf2tf0Z+5FjGx7u7N7uP+T7wPHGiWHI0Ws71YrhRQ4Asko4W4bM9Tyq48s4uw8GmUdUQbgF2HvKepTFeM2AbNFASNqiBRWDaCpSP/fQk3HuTdv5A7P4WndXs+PzkpxpaFUCGm/UVRnAkqrCkiGvCcnc2s6otp09Odr9tB4qmeF4as9DRou37VZdvk4mMpgHxGClHSST491Xzws91oa4beFijVFssb3UUlia0I2CBng0F+swGNq7Z5v3KUrlyHF7miTZWaZ6NqohtCt5iAytagGLi1PaCPwic7R9lrkJS2KiJtOQdYjzoNTykV6HHuhwkyzrRhfUMs90QgyXxZ2Y3k65ySfh4dYYTsuhn0RPzdZUT66xzIPqHxKrxZitc409VkxsbFpkdhouG5K6DotnhKYp06zAScq07/Z4KNPnWCAHPFUptiRb8m9xQS20r1qzrrMos16QNt+Ru/hdvpQomG684wxZ/0JlvbwSUdAtykq5vFDZzi8PWZnReCfUa3rVaNVnBFrZADPxjODJnpKEbTfc+Z0bWAFCqSjvIP/EO6UJbOaw6qKLzvRGAuPffMAxTVRsi7K0mis1WxXwxlymqnIBak2sjw9ggdoXq1cUmrNF+mQ/NRdYaIsnxwFiW9g6DU4D6u6St4osJm7NnamP66nYx4v4hbh9dhT3x7uTdeHnPB8TJ+WS/4/n085y/78RaReNMO/h0lyjXfSs+o8fM8OdqeS0QEi/Aa7/37dOiI4q6eMeQerrobOvvG56vHeLquSz3lpzLW13ZneCQHTqvtaLgnYw6LzfnM9UMfXE2iktPg+gMSExC0sUWwxINt4CfHfnxv3SAF+1L8S0kuE0pbTw5YDNnrbw0JoJRroRdf3S2unoUG3IR4Wv9eaDc6GaGKXIsqTUlGnOyQmktZFv2avsZfUyeRmIzEtyzI73HR1XLwCXtRynmJssksc1z2vlC2Ky04XadX86+8lG8ODZU4mJ+px/z4tCkVNB96UuGAa28wZbPtbWzQwM1peOMREfqAPhfnVlpcIeomPjUr87H3SISI1rMY3PeJMsueViVX3Pl4YS6NC+YSLyDj5pSTacLPf7KFY1A9IERbSHLTpGaAdRH6k7QjYUdRP9IPubjZGZrUdFqpaqFdPIMZ1WzGQxTwqQb8dtctW9LoqUksyr8Wa6kdnPHwvDoUmi9ePqwZAlGpwu8HoDTcOwkJidwUCIt81W+qAR3jhujLsPK1LzS2TL2vIxZ3HLBHnOln08spMobW09WE4200nL/b/jjxHSfwPwMSGqqre3M6JBNIyTce5uRWUl5bonlMtls9J86cz+azeu3t6aYMDQYN8ThkJD6SsBuJqWu4pJFaJxUcXONQxMy2bZvplmlxgpX1vBl0uraVq4lCSrC62yQYF5a51vG0TQuvLJyXkbnH/XH806ezGO5AiXsC1k7Hf6YApyuapRlUEc7Bd0pVXIWBU1u/sktXlWQfMzRq0GHMh6qrdixt8b/yli3XP7M/Df9dofo2myXGMiDRSmauLwnBHitBUZoXN2dMBR3/cdXkNN2bxZ0J6NrX3inrnZmJqKbYA0AZ91FRciqAaNz6RQ2tIk5BlZSiVNAhR8zmb2uKbOpi1rWP+itAfYWh4DwhPKvWVTUNaXQx+s+q2oysjS+ZKiAxrPhyYMR2zLw4cVhHdgnErbXvPQ04uyP8kLZ1tRP/kxhw4anFn9ljb09Ky51J8XN6Xxjo3/uXHHLM7DZmDMUzko9xyY/e8S/Th+GtEIfCU8o7QW5T8+2OBfnKA3/pGsivlOJyTXrEv8TLBgdaRL0oBh7w0hgovHTsei8tAkMa6namxlQ63vgzw4c3LQ7aPWgalnnMc/cZMdU0V/s0dG7Bx+NRkFzuhab8zIe19oERWwW/lUjRRtKNteXtaT3Qx1u1gCi5gebRIs6xODCp4u02swYPRArVYLfDl9ZzMNTtFMrTBrppoEtuwomeVFF5EXHZqKCnN77/iNRc9RUdulm7n6iaAxeSFJKBil5wKb2jTjab1ai8VKJcNoBAqq5INWr3KWKdJFJzV58mcfSHNLfSZ2QDxlCzZUvaqpI2e4McpOzHv+OEvoxqgRt+0ioF1M1mZ0s7aBd6T+wpYU+UMhph6tDbB7vb+wi6cg2fP8fhk2t4T2PFpZU685M4A5uEBkzO1/La/Sk2d2FlTvKMX4Qne4/mi9eSEEAl7ZqcCIVhYLaAuvjAlXAVATHzQRLVFSb9LcX496ZlBsyIfFdnllCbSrMRODZdLBfgHpXee2IhMQVcSBfYv7wYE0XLi917s9i6vvWzi1EhChg6cG0dvZ6sZ7Et+Q/MRaLgGU/TIm5xZSHb7b1DkKcpeiTdp/nx9E9Onodx4ZAntsm9d7KI38JjHKRNbBY52tXdaCRsGFdCSU2wzlazqyjcG8m8j5sVu9a2kKI1b/Y0OQOwZeleXthohhlZE64lKKZroHztCQ/mkwwzg1z2HZfp8Q2LjPy9YOrjhfmzqmhbN/3ZhVAPXhw8X8fX8NzOJnWmAuvBchdE57bpzl/fCjt5A9MDZ+nFARnEL1aDHZ5azQ7nARcePk7nATNPV2MGaB26JMxrt+w0Ba1AMXI2l1NYmE1RI2kG1bRD8GnMXnC1AodeR5YktX2g8FZj57/8ZNSyEfLS/nN/TKUE9HjbDaxc2KxbkF1VJW6jYGmp+Lz8NS8qrxospsHfe+UcKPP8cg+/d8ixw+5ilaOELT7ubxp0jkSGGeDpDDwovwPyLTZTcdsWmmVgiOQlGhW4GHDVMwoVGAhOq5ulYDivZRAK0wY9zfdb6m4G1KeqM23emKiHdDw9x7H7leTAAWMjY0CGIDl6HM8rxjjyFkLPJ0h0jvorxKjoVaEu8hmQquuLZN3yJ9iRlfmEyzGK9ZJtCmnWJN8PtdRUmfm04XEfWynpYeUubMZLtWTKWHLvECw9TD6U6yyRdYv7GrHJjT5GdSLbdwB6efZZFlYtpNw5UNidZMCS9SN7oZPyat8e0JPfHbQuRferR+iB9u2l7ba6pppqzwzeHedJsb+gAloo3k+QbNf5lMFy41BT+9EePOAITdab0NBeZePwc09WuKM31vP2ASbuEH0v7uLWZn044FxNPjKPvdfaCERad5I0MpyJwjYFqPKSGacMItIDhU3n7Qqn8XOL/jhK+ECFGa3sssuTrGPGMGXXEQ9Pnian+POTptoKlN7/S9wMKSczUSTJz/Jc+iNgN3UrLGcT+RJdAzTG9y8Bpesy6mzpbm6bPQgodPZIA2Pk0wAHxwMQAIkjo2AKCejh8AwGA7+O0ikH3wHQBM9CZyCpO0fIBvx5GC/yZsy1hJAQA4V/8oAD29XwBQgzFEtsPnQCqvKJohkPDoeTP0sX/eTzDM20YxAgoGDgEJDToMmLBgw4ELDz4UAoSIECNBigw5il9tGEExnCApmmE5XhAlWVE13TAt23E9PwijOEmzvCirumm7fhineVm3/XA8nS/X2/3xfL0/398fSI+qNYGafhKnzUar0+v2B6PheG19c2NrZ/tg//Do/gOAfFZJQfoEOuVq/k+cmgJl2gEwnViTNJGa1HAAQPsAyFJ4AAwYtEjyYve7INu8/ADAYsVawoRY0Pt8yJd8zafU2w2Af6MDoP9RYwdenpPP+RayRJUi1SrUqlOvRpNmADRaZrkO7/TLeHkZm4AEmpsJGRd/aGcAEMcHhgIAWBQZsNYmg3HpH0xF+QvLz+VO3/l0L1dmMlPZm+N5OH9CJhrGHIuscJdfcWRHuL7x/xmglqmVaiO1Rm2ndldvZsJQY4QTc/77t+N//58YxlHTZ431ttgbtwTn17mIsU/d7Za3GtXQ9g504wOhbDTimSZQTc/t5/nPYv1JLYwuxj8F5bVZt7pv3a6v6xDczd+1tbpW1tI+wnEOhd8nJHVsypGjYytG4dFrpB4+pkvn2+Uvyuh6J4ZvdFwnyhff+h7rFwVSVTqJAgUUKKJApc7sBQXG1c3dm8VHn1FQqJgRjmJQLDcnMwdOKrWG8/tWf0n7p9uKzJWrsmbz9RLWJn51K8qqbtputz8cr641noylfxqdwWSxOf/vH3+TUn9ESv//94jEkk/1aWhqaevo6ukbGBoZWzOxbsOmLdt27Nqz78ChI7ccO3H7Wemiu+6BEIygGE6QFM2wHC+Ikqyomm6xBnfsDqd5Bt3Pg2PD3KPyMI+Onyd5egyYCT3L84zkRV7mVV7nTd7mXRSwETAtn2Oh67fwiNieE/cjnNIMAQL4+Dhk889zj38AmRfi8neu9fzNePf5FPA37Z+NlqdQqxmG2RAgfT6UeyabsyZtz1LhFeEjCZgBfZVevMDL8WzGAEBOs51NrLvMP3SQkh50J+GGArKZ8gMBjasI5BubL3vXdnZyAIDvCb0NOBWjl82sddszGZN+i7skhnwCEwMD7+IhZVH7jMJr6GMq5ppwGppaGMEwAb9+4rz2+EJkZtQZEraApDTWReP2R/S9nFu3CGun6CiitaQloo/J7nWOXZiEXh2jopChgDsG++RbYne9+tkv2Kmxxn01Doq7VSh/EfsNOzdoxmQ+X61fsX1HyjCk42d2ZP9fECD45tN6nShLQt8SZ4TuVoFWYee04lyZxQC8kiCpI/AmDSwPwjz5W0/gB5yZgM9KHE9SDQvUH/p3SDqIvmm6rgbXf0lqx2g3drn4/YTaybMgLNdAzrWE4sDE9zupq6gM6I2blFThVoLRJUR3kGP7+ZA9WvXwYQGoJpnTNhk05gTxcLyHUQWxEMdgkkgkRyDXmGGCYQFet2jvGFo7XrZ7iAQzzcArDqepxGAFBVw3YzaHprhh7bDCvA+g53Mk5HbW4pSJUSd+BTDug+suxPBKg54u+RKaH4F/YBzE97HNMAEwv2OmcDNFDwJCjIQ8IWZCnK/8Kt0Ibo3i/OZs7w+M76vP7T2EAscLqWJfcCMSnv1LHG857uwv5DjN8Qors1X7bhuTz87wik2OQCpMdYNvxL5bquIwK+6TiVKPbBL3OH7h9Rb/3oqJagkQghHv0B7bLBjlHljo2I65fMtl7Dlvx0JotXkSr1/acoVwidDYcmaksjZSjgtwGWqQiM77iXGBPZuW3YzaXRHdGqZ2oqkE6ySn8sLG+yauHAeSeLqOAm6EBRWzmCiuxgFvbzht8SruT26xOwk3eCxb6v54fiHznH/yOhzYyaXxdScuTxcTpAcH467LwvxEK2M7+w/Ly8jYWDa5DMZrXwzelRoIUlfxb4CetniasVNW8J4pcrjWgEN7XGoUdhGZuoLrBBj+Cs8Lka7CPXChvy3H+zmI7Tc8d1KpmMUtqwkeU308ue8N4d3XYO4Aaf+62QPQKfQuE/oenB7O0BeYuzE9gmgDui24Lsb3P3WvT5FuIawKM2qnK0ZVSmrHyEsifbuPH2/0Gde/f69kOlu/AkVIuX9hOX4YMIrjhZbuDV/C3Y6b1gOKLDRcn8PSapQf9q0wVEYpPQE8ZBzpa+ojxc8DKyy2mSAABb/LhXGBNL1m3hHKydyX7hJFA3w/Eo529nz2LaXP9xHNB2SeZC/ajTXEqPXamyOmz7GiASgmwEKByENh5Omcx0Qg4u5HMA+VOgIJiqtns8d1B6F/sAcB5jXvwliy8CqRH4e2j0JLg/jZ0b8+Fwp7EeEZwDAkw+s85zrSAGQHcYi6lYFMxdFR/B63tdMod2Gu7ejTiO47ycPXKq+vQxlhEwTC4obFfvg/l1NnIs+2Bm/PhLVdMFUE3Vr4hgJW5+FxQiMfHnfcje0XXe0apeCGA1nWZHPo3Npf0fJi4jB4mnHKoGJ3InmPT/B8ddJ32xftb9UY4QHCwUcAoDT/N46ML7AvgmCVAhgMQShD0PKP5VgexcAwOCxlOAw6GYEj68pIhCDAoEU/MDq+wRgDmYEGM5rIWLRnwdZsZHEAArTRAAClZyEkdC66icGwO8kQou56DYpodBmGcrwlDtF4RpDZ2YzEcoYZDcsNY3RKH1vGwHHbIZkUfcZYWr6kD9m8svO/jVCv+dDs4tveUJ29kdsblexxWt/fbLTC/dG/XNZj8K/eadcz9tqJb4uUrT3t/yOpic9MnM3sAvRqUup243FfKT0MKOc+VMVHasvt2TUKIeqNECoWdF735WA8cqSRnZSgt74lse54Tu8shUjoPJmmQ81IjFGfIeZrjGFCidYcCQbl3RrJcRjhcYI1AYczHSLabJvWuq4PehMSXDI42U+xoLrGOgPh/ihbOMGFdQezf0tcfIqDAT5jmcBLvQAFFvT5VuZy7pIYaFzy7zqMUlT2QiIiTkhJf+BEUHOaNLchX9LGhTdILfMM8WGAjERslyaOObp19wMe3xvT5+e4L1yG94Vn1vtJ6E3BzqT0x/iQOGNgrggGEnmWJVLrza95BFYFdZr0pqn4xxnAz7ZPOrvxu9ln9GCHuHCq4qq2L77Vp8JuQPrgG8R7iwRQrDcvyLhL2T1n5FNGYDi1WhnLFfWeY4GC7lB0PGKUoMbrzuuEsy8uljTmTmNQAmvoaLLZQOmok1jKn+jxKpDVzuCgR3FYa2Y1qrBICINYO3L1m0h4Nbwz8Pagv0tjAAAA",b=` @font-face {font-family: "Virgil";src: url("${m}") format("woff2");}`,v=' @font-face {font-family: "Cascadia";src: url("data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAVMcABEAAAADQeQHdzXDAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABgAAAATAAAAG8nuKcikdQT1MAAAKwAAAHlwAAFlLMTxXFR1NVQgAACkgAACXhAABRIFkPGxpPUy8yAAAwLAAAAF4AAABgbEt/gWNtYXAAADCMAAAKPgAADSZvLoOeY3Z0IAAAOswAAADjAAABFlZAOwxmcGdtAAA7sAAACBUAAA+DV4sPEGdhc3AAAEPIAAAAEAAAABAAOwAmZ2x5ZgAAQ9gAAMcWAAH9uFaLzNxoZWFkAAEK8AAAADYAAAA2EapGVWhoZWEAAQsoAAAAIQAAACQABASPaG10eAABC0wAAAUuAAAYLrBaWdJsb2NhAAEQfAAADBoAAAwaQSrAaW1heHAAARyYAAAAIAAAACAJshCbbmFtZQABHLgAAAfUAAAZ3FI4deJwb3N0AAEkjAAALIQAAHpUjVe9UXByZXAAAVEQAAACCgAAArOJYnqCeJwd0c9Hw3Ecx/H36/3Z99uatl1SikmZlNGtJDPrh5126Jj6L6JDt0liIh2SDunepVNGTDqMItEhSWmmS4cOnWaHRE99+Dx8Dm9eH6+3ydwy9n90xnvJZIvcZdvDul1iw96wrYRJsZKYUhqzGsWc5nFBK1jRJm5pG2uq4Y52cFe7WNc+HugQj3SMJzrFM5Klc11gQ1fYVBOvdYMttfBWd3ivB3zUE77oBV/F3/SuNnbUwS99Y1dd7KmHP/rBX3eTRx5h0lOY9gwO+TCO+hiO+wTmPY+TPolTPo0FL+CMz+Csz2HRi1jyEpa9jBWvYNWruOpruO4bpuCBxNAX6C0MBHoL2ZDFwUBuyAVyo+fo00LUjWUhDnECk3G/BVoXi0myl8DMhxkzZun/mZE/IhM7bnicvVh9bFRFEJ/Zd+9aa+m9d9doRT4qIQ0KNg1BQxpCEJpqtFRSiLmgNopVtBykQb0gElMbbcrZACEVEZv6RQgQbNAYCgQJKn5ElKAhiICkIYhGDRqjaBDQ2dl5r3dbyBX+4DY7v5nZ2dl9s7N7+x4gABRBIywBp6a2bg6UPvLM4hSUpR5+ahGMg9updSKo6Xc2lMPE2Q3TicIYcGfcMaccxsy8t45ofV0N0Vl19xBtuHcmUYD//gNFPRHUwocXL4CShQsWLoBS1gBTaoFo6WMQYamQajH1i+A6NYFaHPeQ+yOA+1cUIR51ohEYTdqpZHUH2c+AdsLl8D68CNvgKLwLxzEC32IUC+ECFuEwRIzhcHRxJE5GH6uxBm/FWlxM0tP4DD6KrVSasY3KAnyBSgqX40u4EFfgKmzBLlyDT+JafA3T2ENlKW7CXnwWt+EOfB53UXkRd+MebMe9VJbjZ/g5ZnAffoWdeAAP4ko8TKULj+BRfBm/x+P4CvZTeRV/wd9wHf5F5XX8m8ob+C+VN/G8UviWcpWLG1WhKsJNapgqwS3qOnU99qrhajRuVTepMbhNjVVjcbuqUBW4Q41TN+NONV6Nx12qUlXiB+o2dTvuVlPUFNyjpqqp+KGapqbhR6pW1eLHqk7V4V41SyXxEzVX3Y/7HeW4eMApcArxoFPsDMNDTsyJ4WGn1Lkev3NGOqPxe7gJILGUaivVdqqbqXZSXW3VHsG1zCOtkYpvl9oMDug+W4dQ14c8+j0yHvHqZGQs0X1QhP2JUQDxCr87xBWXiW2XifZ4+bDLQtHH5hGWDGCcdkR8OID/DdXDAxhTllwoWCKo+9yVhaW5sp+husrvDjBWLlghOOHyMPQzMVceMp4hPEfPSs8Vp2eJTRacKlhjMGy/26CJWxa2ZcsXWX97vZZd2fr5xWac2Kys8UoGMHafvyb2wNBx0HME2HEJ/SD015j5Ca4QbLtMtP1cZTR5T1XyPsCgXcv+caPXGHs8V9bxyMEOS24bbBcvz8IOSw4xT3yvVpy6bP0l8qFtqHlzhfb58nWZweB8GpynWfHX+qicf4sEjwg+ZclLLTnAU4KtltxuyQF2yn4Oxu235NWWvFawJ1efADN/75icB+tN/vqfUv2S5H8MekUGA70XkfbNoj/p/+z/noWj5DzdKrhNzsmxIn8uuMuSP7JkQf8WkfeLPCrXXzjeQatdMFFG+BDNO011mVkvfzHN/4hgv+Apg2H7rwb9OZIPgrE/DOqfP1fiMpfG/0fwgkGOE6FfbzCw53hqvfTzvNz2UH8d2dJt0xshOI5qZRZO8qrZ3xAxWO+EnP9+lSUvyZVDBP99yped3jGDiWbBRtFPs+TaXDlAv1dk8ZdosmR7nHx2dSKnh+bHazD7NszjJOHvJi5eo9kHGhNNgqL3p5h+XpNgs/gJ9C2WLHnmtXkd3or8mCj2n/NfoHyoMuh1CW4X3G0wtFuSK9v989l56wTfsPQbLHkLzfE9kwd6/+h84X20XXC36JcYDPLLp7cqP0XtewW/EDxgMGw/lCv7j+XK9vmk14XlE4I/yTqeFvmsrPOfsg5nB/YpacJ7VXgvvcR9LjjXIdgvee4t9j03+N/148ZHdj/Ok+A+HA3uBxe/nw3tfyv7f9TMJxxXznl/j0SgTNA+P+V8TUikQmwSLJZ+VUG77OdPc/8XwnW01i/YF6HddOB7fHjeyfkYzDMYL+wfnL9yLgbneSJtzUfyJzi/B+2PcD8E51puHO28uPQ9NSvuJfnzIuc+Zq3fQH4MjGfHwd+Y+5zZ68T20u6/ZduL3Guta5afi4036L0tWLes/Ob1DP7vrfcfOy72fThfXOg9+MOCKk2jB5mfTLSCNRVuJ9F0dL+mrEmzTZpt+ljfx/o+1vdpvVOseYxw3xT7b2W+ii1rog2aFhxl+gPZbyrYQHRjgX4vr3VPaL3bzZaNbNNM3sqi5cR3cGuKPaTcd6jX19z3APdNuaeJNhsb40HbkJ8HmNet03Urxgv023+G/WTYJsOtGbbM6L5Oif5C4JRovVN8gUbHIp5DjX4iPOseI/0eph/wHHbxHDayh3n8dWGEptjLEUjzWGluTfNYJ7U3PMetSbcJMFLJvVaypp5n1cP29fws9RyNB9nmQbHRfmbx885n//NZ84RodN8k6+9jTSbawn5aeCYt3EoUJ4BLfFyvkVPMK5Vh2mrizCOm2Nsi9lNvxmJ9mmmFoTyrThNhHRnVY+bJdD5H9V3mR+h4kh/yGXmI+1abKJl803ykW/ORyVBEmuE8bhlbztV8xGM+ya2tzGcMNfnMft5mfp6mTo+OdqTbrAvru9imi/k+5veZXGVaZTKW+dlmjYhGwQOkMUG+MCLUwGn5wniCvzACDOMvjDeQ1iUt7Vu33+2Ha9wz7hkocs+65+FasnAgBjeSH3qHAXpvAXpXAR0tPXq7VVcLdgq/fgh1bRbfw0hZYOLHdDzTuIki0xqm9Yby01ebVuI9etYxMA4qYRJUwzSohTpogCQ0QhM0Qwuk2U6v0XjOk2rOkHkmAzknk8K/w3wj8zqrk3ySJPn0SPL5kORTJVmQYj8t/wM5o4LrAHicnXwNfJRHtffM7LNLSDYfJJuQQliSTcjH7uZrs0k2JIQkTSmlKfJiLi9yESmkiEhTDBQpRhoRub2YxogVESlFSilSihQRMUXESGmkiBgxUqQRKSIiIiJWRKT3PzNnn90ky2vv+3t+Z/Z5zs7M+c+ZM2fOmf1gnDEWzVssrcxSP6mhkTnmP9WymKUufnRZM1vCVuHdlUzUPTg9nSV8eHpdOvMz9v77LB58zgSzMINZmY3FsjjwEtgIlsiSmCNCHfuQOi5mvb+2MZ3VP/KhhnS2cGpDfTprn9bwcDrbO/1Dj6Sz06qXuAG9/Hs5wz5AnagPUGf4B6gT/QHqxAypk/zoo4uXsbb5snxm/qNLH+Od8+c/voRvaGp+4nG+ZUHLo/P59sVPzF/M96hyvyq7VHlElcdUeUKVvc1PPt7CzzzR0tTM+5d+onkBv7R0aZGPX126tLiC31j65Lyl/NbSJ5cs5XdXPtbyhDCATiiEjK3GnU2NIoEls1SWxsZiVrJZHvOyIlbCylgFq2ITWR17gE1mD7MPsensP9hM9p/sY2wee4x9nH2CLWbSTpayJ9kKWMpnWRv7PFvL1rF21sHWs+fY19g32AtsG9vBvsVeZXvZPvZd9j32ffY6+wE7wrrZUfYm+wl7i/2U/Yz9nP2C/ZL9ip1l51g/O88usN+x37M/sKvsGrvO/sr+xv7O/sH+ye5yxgU3uI1H8Whu53E8gSfxZD6S38dH8zF8LM/gWTyb53I3z+eFvJj7eRkP8Eo+gU/ktbyeP8gf4g/zR/g0/mGpC94itcJn8I+op0+gtPBF/JN8sXpuUuVcVc5R5cdU+VFVzlblfFUuVP08wT+lnhaocqkqn1TlY6r8uCqX8eXimpFqaxuW6BEeMSxr2AH12hPVUtwTtXZ4Ufn44VOHn59YJq/h16Ln5MyNXhITlbc1b2tMSsxaj4jZaE/zCHuBfX9hXWGdvTt2cmFd7KzYW8U9cdFxO4t78HogvrG4J35BglHck5CSsL80MeHYiKbK7hHLEx3FPYnZiUdR9iUtK1mT1JF0tzTRkeBoQ7k+ubo0sTQxuSH5EMqTKXhKmZZyBGXvyLry8SMbRx4tH4/X3tS6yu7UxtSjOXNT++6bdF/TfbvvOz5qqkeMmjvq1Khro8tGN44+W9wz+mpaS1rnmJTK7jG5YzaOOeDMLh/vDDh3VnY7u8a6K7vHVo3djfJw+qLK7sru9BXpR9L7M6ZmLM44J0eeccU1y7XCdbmuJlNkttTV4LUt8/r9q+5flXk3q7m4J6st6/qDPQ/2ZN0d1zy5atwz425l23CNyl6cvTK7I/tSDsuZnjM3pznnWM75XF9uQ+6W3IN50XlpeeuhyT1u5h7l7nRvc9+E7hM8yzwdnhteu3eOd4X3uPdi/uT8WflH8/sL6gpmF+wvOFnoh6anFR4oPFU0uWhW0ZGi3uKs4uriLui6zzfd1+Q777tdsrxkTcn6kosld/3z/K2lBjSZXtpSuqa0r/R6WWNZc9mRsrPlXuhvcvmm8t3ldwOpgUWBNYFzgfcqJlfMq9hfcXK8f/zU8VvHd1XaK7Mr90Mnp6pcVVVVHVU7J7AJoya0TGif0D/hVvWU6qbqQ9V9E3OhpfqJGyburRE1aTXLajpqztdcqxW1jbXNtcdqz9f5oLOpdVvr9t1v3O+8fwk0t/7+O/Up9W31m+pvPGB/YM4Dix9oe6D3gfMP3Jy0ZNK6SRcm3Xlw6oMLH+yCVvsmF0yumjztodyHJj0066GrD12dUveI/xH/lKNT1oIuPex4uOHhxQ+3P7y1wYbL0VDf4GooQjm9oRPXzobrjySifusjnY90Ko/D4XsF/MIk/jQ7wL7H29hB+IK17FnWxZ/mT/KlfDlv45/mK7BGH+Yr+VP8R7yb/1gkC4swhFXYxDARJYaLaBEj7CJWxIl4kSBGiESRJByiRSwVy8STYrn4tFghnhIrxWeMdlu0cVxcsP7N+p7179Z/WG9b/2m9Y/2X9a71fRuzcZvNNhyoJoHS2Cw2lz0Kr7gG3msfPFQfewc+xQl/UsPr+BT+GF/Cn+Ff4c/zN/gx/iY/zk/yn/FT/Oe8l/+C/5K/zc/xC/xdfpFf4r/nN0Sr+KxYJZ4WbeJzYrX4vFgjviB2W0qNmcZb1j7rr6xnrGetv7aes75j7bf+xnre+lvruzarLQo7h9YUFykskzXA685hC1kLa4WmOtkmtp3tgd6OYoc8Cx95ld2CL0zkqUCaBY9Xz6fyRj6HdwLZJX6D3+J3RQK80ipbNLOKj4uF0FOrWMsM8Qno67Piv3C3CHpbJZ7B3Sehv6fFf+NuMfTYJtbh7nHo83Pii7hrhl5Xi3bcPQH9fl48i7sl0PMa0YG7T4nPYIRfgpRfiNPit+IiJA4Tb4uz4nfiz8aLxh48C/EblBZxXlzHqyF+JS6Jvyhkl8UfxN+MvfKef4a3ip+LG7i3iU7xR/EPcdt4U7bmnxVX0cefVE/XZGk8i9Iu3hDHRK/xReObxsvGLuMV49vGj4yfKAk3xT/FHVXzgHw2vmpsMA7iLlWcEb8W58QF8a74vfireE/83eg01hsbja8bm4xvGFuN7cZOo8t43eg23jJOosVY8ab4iTgu3hFXxC3jS8aXja8YzxlfMzYbzxtbjG3GS8YO41vGbuM147vG94zvG4eMHxg/NN4weowTNoH20eItcUL0iX7jBeNV47BxxPixGvlPjaPGMeOnCuPPVLkOZZToESfFKaPD2Gd8x9gv+dZbNgssI5PPFR8Vc8THxFzxqJgn5osm8ZhYIDaKTeIb4nnxgnhRvCReFt8Sr4hXxR7xmjhgGWbJsXgs+ZYCS4ml1viI0WR9G3s/AyVixx/PprEFsC/07qtXZPHV++prr8qdUFqjr4gZviJfUe2Z2jOKZ6mdLS/Ga49SNAEeE7WTarGWfDbw95hcXlvEePF1Joqv125UXEP3WnyWWYrPFp+tXa241pCPGNcNLXxJzn8kjLVViizFW+UVxFiby4zidn1pyTUH5QU5KwjjMImxZlvNNvDmaQJXrjhe047nBmBsQCm5w3WvNb2QUyYv6sHEWFzEMKvGfoVxGCK7XERL07FSVyHukT1uUGSZiBAKEgllzWpmVF+tvgo/3aF4YsLyqungNzNL9ZnqMzUrNfaJd+QFfhNhj5F1J16aeInx6t3gTzW5fOIp8DYwUb2hJqC4dpKVgj7bqttqXFTXxO5ADWA/RBqOgH7iGUWWsrSK7IrsIPqJR5lRFlWRKC+Nvupg5XPg72WW0puBu4G7hL5aXowHLhP6OIU+d2IueL2awI1XkhIZL93HROBQ4JBZV8qaiT43B3YEdhA3tINo9N8Geg5f8rx4zVIQ2VLK4xRZyuPkFRxF2W2M4ra+NN7qDnnhnUuEd4TEW72iegV4pzSBmyj7rIbVlHUxUdaFUnKTqNft0NZ2eSmuw8TLy9be/ZXCZ0Wk7UIONZnNVj2tVCSqV1a3BbFVLwSahdXN1c1kHTcn3AR3NuFKke0mnAenDjTZ5MmWBeipoNqveCND2nJOgZ2KsJnOZgE2BQiWYKdDb5WXFInKS5WXgigqTzNL5Wl5KQ6vhS1XYk3KCM2sgzmv3Fu5t3YNIZ0yYQq4WwjpfQopVk3lOk3gjaKWy9HTcpSSNzqkp8pZ2Ikj6Cl/ryKRv7fyQFB6/hZmyd9Sub1yO9nhiaoT6GE9SR8j21Vh7edjBitXmTzZsgk9NVUuUjxnSE/pF+BzOsN8ThYyoMlKTxKDV5HI91adNjFgPPmjqrqrtE54FWY+Hz3lR1XtJVRlVdBAVVAn6aoWVqP3Al7XmTy86z3JhPdkldZJRhiqg0D15UGopiAiaFH2fUCRKD9QbmqmHHZYvl1eGkNFSvkNcNej1vry9ZpXuQXzxMtXEa5MZQfAU75IE3hZ1NsMtJuBUvLGheaqfDyruQcmlyJR7hofZWJKAKaEivcq3tPyA6vL52Bd3MUqultxkTBFV2I9V5wiTDmyr/HvoVYfuIdMnlxpsMSy7oqdipcb0pVrhfTI4tcDLL0BuepyZKToraJZkSh7pqI5iKwCFla2vGJ2xWyNovxy2VFwsWbKmlAq7zD+RPnpMthgRRm401CqmuNnjZ8FXjrhdSu82P3KssG1mzy8G7iFdokoJc8TwpvRo3aQjffCGzisSAQOoyS8gd3MEtgtL8IbKIOnCWxCrU0oNd608qwyWXctuGtRajvYVbELvCWEN19pBOs6MFsTeAUkYzLaTQ5o71IYmvOAly+5J9ZERSKQWLHfxIrXAKvYVqF3P1HWXroQtnANqK9VdGqsFUvKVpQ2gnsW3LMVrWQfcifhFQsIa7GScAW15CxMN3nSsjaj3eaKasXzhUUQqUq3m++Ft3yeIlFYhTJopdOYpdBdPg2vCkXpOT88SHk1aqWiVHgDR0p7/Fjn5W5wDZQa79QA9uNyB+H1K7zjGS84C26IJ20X8WvBMZSSVxpmu5cU3q/fC2/ZPkUi0BhoNPexrcBTJy/C6/XL3aYDtYoCRYQ3oTS1BDtIGfaZQFogjaxmSznWf8BGeMuVRuT6v6EJvADJqELt/vJ+qmfizTyo8G65J16hSJRvLN8YxFt6HV5grbw0Cn9ryUxw+1FrWfkyjbd8rn9hCWLQ0uPgzi2fS5ZzrewakE0hvOOVBKnbMk3gVZKMdul5yl1Uz8Sbe1bhfeFeeEunKxLj96MM4q3BWtpWWoNXhaLkhA8+pxT77PhOlApv2d6Sgz5EQKWjwG1FqfFWl8EiSw3CO0HhdcM/QIr/usnDu/5zaFeNUvKqQ3j9ZxTerffC621VJPzb/GZs6V3ELP5OeRHetGL4HO9M1FrlX0V4WUlU8UVw68Fd5F9EltNRiujH30h4a5RGEJ34azSBV0sybGjn9XupXmifyla+99174fWcUCQ8J3wiiNfTxSyeruLryA0UCt/iYvgcz07U2lncr/GWTvPNLEZM43kO3OeKj5Pl9PthkcX7Ce/9UoL/OGph70JGEORJGdi/PDOQEUhefVgMKTPI36oIUiBzej5S3OE/r0iUVKMkzP6TzFLi9Z/Eq0bSCK1x/yFCMkm1g15KkAP5d5o82RIj8N1AKXkPhmmuWc30SxERzFEk/HN8h0wEDZjlBt8u3y6a5d4SRNO+jYTgIdmuBDuHH/uQb43Jky3hn/2JviWKNyWEYCx8krGTYowoxJO5WDkN2M9lhLhR9denSJT0oSQcJUehiaPyUhxeDI9SAg9Vsg+l4hQgByzZCs5WlIqTvQkc+KeSjhLKfkocJdi/SloJfYOSJntfqAm8R0heI2o3opS8qaFdqSTAWyPprsSlSJS4vE0mZsQhJQne6d7pZHEbfNgBvTUkfZps50M26sNe4/WaPJkBY/S+Pm+q4v2fsD08Drp7mXQ3CIFvqyLhueDbGkTg64DNn/J1+Gj8PocP4/cFx/9h1U7aLfZq30KTJ1ti/J4NPj3+xjD7aVf2sy0SAs9cRcLn9DnNVTcV2b1dXhpB8fri9Zi924RghppLRMzFlzSB93+ppQO1e4t7qV4IQbRa+8cjIXD3KxLu/uLNQQTuE8ziPlG8rngdIUgoTgjL0j8i2xUh93Uj8ytuMnmyJaJY9/riaYo3K8yCn1EI3oyIYLYi4Z7tnm0imAIEU+SlERR1FMH/uQOEQLUrgv9zZ2kC76PUMgE9JaCUvDkhK8y7yZIjSc/rVySKOos6g9LzMP6iVfIi6QlF6K9oMUmfK9sVYvxFMzWB9yi1xPiL6ovqqV4oejitxn8iEoKiOEWiyFHkCCJA75YiIS+NoLCjEOMvvE4I5isEGH/hOU3gNVFLxN6FPYU9VC80A/XKCo9FQlDYrkgUri80YwH0bilsK1xbSLFAob0QMXPhMkKwQPkP7F6FmOXCuSZPtqxB7UmFDcQbcCpgvGGL1qcC+qxLobHgnXQVf4mCHQWwqcI4krJQSYH1e2HnBbdNHlORm/D2Flwi3uCzh9fo7OFFKSdyxliwQZFw3nbeDo66ABm387K8TA5yJmefs6+AbKHAKDAYdwZP1RbJnvIRMTj3agLvk9QygL43OzdTvVC+v1HNxHcizUSBUCScCwrM0xD0bnE25t/Jv6MR5K/OhwfMv0IIHlcIkDk5C/DaZ/JkS2SezlH53cQbOBPfDZ8Jo2nwTOSn5aehhzUk5QklBesoHXFN/hKTJ6VMg4dZmD+beINn4nskZdiQmTAz0ny7IuFZ7lkeHLX3Nvxwk7z0qPOu5yJC8V5Greke2h28K7wr4PWqCeOnVNwFf+RxawKvhXrbjXYpnhSqF5qLJuwOr98re/cuUwTf6G0zcc2TvtHb7KXzn7yZuYh+vNCBu8tLOarnvAeRiXcy4VoWjK/c0pL9Jk/2Bo/tXuVNJ95g3f2AdOe5t+48pxQJ93jPKXMHOQyMuZ7DHp2Vitz9OZ3gQgfuFA/lpZ4qTxV4wahkueoLuXoe4njPGpMne1uCUZ716Dn/dAjjmFxlx4cj7mvjFYmsZzyTTFS5zJK13OP3+DUCd5e7C1wXIXhK7QVY/VnYPTxxJk/6dGSkWVXu28QbrKXdtNZfM7U0eIfZrUhk3s40V7p7E7NkXpYXofG6EU9k9hGaz6h2iCYyuzWB10otsV9n7sncQ/VMNGnXYUuvRI403G5FInOF220iSAWCBe5UvGpL2pWHmMIdzPlWqd0JPioT0WreDZPH9H6V6c3TOd/TYQh0pPpqxH1upyKRtzM3MYgAvVvyNuQinCQEuXmwgJxrhOBzqh2inzzMfc5ZkydbYr/Om51zTPFWhxCMhj0b3ZF1kJetSORlu5aZCBxA4HDNc80jS92RCwtwTSME6vwzF6smF1bpqjJ5eFfmi7lnXfp06QthCBYBwY/+X7Fy7hZFIndL7pYgjtx2Zsltl5fJwf6XuzJ3ZXaLycHOk7swd2HmapODWCx3Ru6M0eQLci7nXAa3ntD/l5SWcxqcIk3gPUMt0yA/DaXk/XcoSsFwvjrYE+esz4EGcoLx3xdVr4j/XDfxesnk4V3Mh3Cdz+kl3uB18n3yJjn3Wic5axQJz7QcMxbKgZfxVOesyqH9L8fIwf6XE4yFnlVZA/Y/D9ZKzkyTJ1ti//MYOfXEG4ymh1bty/dC47yhSDhvoCQ0zvPYC8/LS6PJXp69HNyThOZLCs08cLo0gddJLXegpx1O/VnFl0Mad6672xdR+jJFInuay4xKnfD92dWuKS6KSsfdGocIyBWMSr8i241D7p4NXbiyTJ5sCV+ZbbgSiDdIF/yzpIuXxLfEgUhoXE2KhKtp3JUgGtd0ZnFNH3dm3BlCs2gcooxxxwjNVxUaZAEu+LVx+0yebJmKnlLHbVG8DWFodJ4gYwjk3JFnJeOsIpFxFiUhyehhloweeWkkWeezsP9lHCAkatVlYf/L2KYJvK9TS+SaGR0oJW9TaFYyWlhVJOlj7ygSY++MvROUPvYKs4y9Ii+SPi8LFjD2DEnfrKQjHx17VBN4z1PLvehp71gdtW0JSR/7HH8iknRax8J10nXS9AFOzMIheWnpmRczYQGuXSR9q2yXiT3atUETeN+k9XERPa12raZ6oVxhlZqFv0dcoXsUiZw9KIMrFCPM2SwvQjAvE+PPWUcIXlQIMP6c5ZrA204t56GneTn6U9aXQuPPmYScNoL0zCpFIqkHJUnPdDNL0oFMdyadtLouujD+zFSS/rKyXow/CRFIpmHypBViv0xqdenTtp0DrVD8k05+DlBkOggJ9mJJAtQaRKJi8UXq0khmuWQGOpOQ7FJI5DdJ6okYe4VaYk5B2kPvDumBOcI+f+LMZmB/Vt80k4gMFod3C/RZnMr1NAXRICIE6ZNqnnESnBpCsodqFBAx9u0BMovDZfLXpEzjIxFk0jjSa0yZfkTiRelFJBOjT08nma9RjUTw4oiDfi1hJ9xS7+p7FNA7Is7SoRIzFpkUXPmzsH5noVQS07H7ZQTPgL9DNQKacL8/bH07efhqTxC/Giot/Y4mVh+Uln4VKP3MT9KQ/yIW1tIOUI3jeoyKI/U2c7B3M46r8ZXgnaES12lyXjMlrsSu0e/sJ4lRYXvNQaoBCc5DxBmoy7dMXZZEkOUkyjJlxWH2HOn6DICPRd6YHjyf7iJ/dRV0gzgDZZ0gWfmRZI3dpynVjH7HbmMi9UrqFZIFy089S7IOUY028HqIY8qy90HWT8LyJRfzsTo2XZ0+8DFVJpGcMV7kCV6USo5c62PSFAXfR9Y3xu46r993wguk3SEch3WNtCuacP/DkMWknWIPhD11Wz4+dNRpezQ5zU/E0xD1Ofc56fTTiRzFuY2k/YhqwK84O4kzeF+8ojzSi5b8yKNPq9bkMuPrtAJ4IVy0HjFzaU71GnwfM55xIU1n+nwMvEtGL+H5sa4xGjOecYQ4oRj3isLzx6Fjjss2iWTEpTARl4JSy4D/iwtmGG/oGrE3NeH+WEinsWeZO+zpBN9h+uF0eMoajBr9xR7QJFYG5cUizhKLhPYQfATsNBa7niAPkQYJIugheqgFIi0RIM5Aq26nXWB32C4QLj2gyZJgSkecZVG3SjpmPxaxmLhO0ifj/jxJP65b2N8D7yRxBkp/lqTvIekDNG0/pGmUaV12ZJij9o0i6xp9Du8FresE1YBvGdVJnIGy1gd9RURZ0zSNvmXKqoEVXB59mWQhPxsdjHdOUg1Y2uhjxBko6ytBXxFZqzEXNDlOBKXF9DLhOOQwP+GI6cbz7hj6VsUo2LVjM0k/RTUQzzjWEceUPhy2aHwxLDuUUidhh0Yv8Z2aYhYHpcS3MREzO8aMvuOX4LmBJajeuNitZCOeiSkj2b1UD7Mck0WcwWv4pJrRVyKPPH6Vpmjz9C8eGXX0megz5vMcPPcgWlMjvw/Rf/RBkn6aasD/Re8gzmDpp5T0VyPNcXA3TzSCsuRuPuLmiJskqx32fJFk9YV28xG9xJE62TNQovg5WfBLeCd8vHWsUfaZnGoSyUxGy+SoZP29EJHSmozdzXFLkUZhw33wO1hndBvHaU24fzvkMRxdbGLY027LkkgIHBs0jTSjOMdaJkYuHqmtQCTfdmBkDszySG0HPBU56sigB/k1tZkOXoA4g3V+Tmlgk8UzwGvXQ746w3Y4NKWan344DOyN7anthGCFoxHRK/xjqokx6QJqLErR2Q4fCftPnUWI3qEa8Nmpk4ljIrLsUIjeiaSJpHZNqeZ3cpIQ3468NVJrXjiuJ8FnJC2GPFr1IxH/jAyeV/2G2kDmyKPEMeVGrVdy+4daXfQuTSPNk5DoTZDaMbKDZKSAgt9C+i3VWAHeYuIMjq6eU55l2KA9sh5rXJ2UJ7ebFLQ4jDK5NZm+V+KITrwE3mJFkmNJuZ50KxHWlTxLkUKVgtgkeRKhepf68WvC/cWQ3SWP4k+EPdnFbyLjctzUlLLBtAJkZylrU+jTj6SWxKnaylOWE66ZSXMTsdYd3eDpM2qejPg3JXh2dYn6QRyXUk0cU1tilNLW85HRwLsrciww/T0yFMcMxwyNJvHiCNiXPR019OmqJfl4Yq/c7eyI7R0UH0uNOdIJzWXyy0DoiCPO4JVyQa2U54esFEIVs8uk4D4AW4nZFLOJUE0dgYghZp0ijcqfWDUC/iVmhSKFygHrjAl+Z/YK9TNdE+7/GJqtmAC7P+zJbXl8qP06+jUlzDDn7SQTCZMSJpG0GXgvuD/8iWogw0vIIs7AnfFF8pebyH4H7Q+OJZoSzezfMRfjPpxofvvLgawvcY9DZyw86QzqBr9b+GeqgYwvsZ04A6VvN/OFfPNbGlnYBaSvatIn9EnXTAp6iX5YZ38SZSgy3ko6qUg9x0mfcViRerbJ9/co0gjLQEGEf6EeyRPh/kZI/0kt/KmwpybyYgNmI2maJvt6Ex3iFPtquz4x5YmI7+wtJO0m1UCcYp9LHFMffCb08U2KFAbGQgWaEs3vwiLSEYl9iX0kowkUPAN7j+wLWWTifuIMtvqfqhl/jfKmwbHQEU3C/FZFzF7UPiaOaWnigI51xAHSP9a42EHSb1ELRBTiOeIMlt6jpUeKCGLqNSWa38eJkRHBjRE3SBb8/4gLJOs21ZARwSniDJb1ExppfoR94IxJwX2gR0Y60bTHjYgLi3TuUI0dZqTzr5BlRLeHf7M6epUlwslF9CJNI8w8MHoWRmYfob/xwBOg0YRgHvg+1cD+nnCFOKEdtVWN7K2hMhIOEplrM2EnPMOeBLL8BPjuBLJ8zqnGWlA7cQbvbEfV2iyIlF8nNGiKM08q0LuI88eRJ47HjMTRSQW3UI1R4CUSZ6Af2Ete6EU6gR0gK/68ptCpCHoPOxWJl9/HCMqyUo09jE5FuPwNBzeahoxunx5dJDtEDKwo2sxbVRR8IfoC+Rh4iWjKW/mwsCj4CHEGjm6P6WMjjU5oEqOCstC7ENEimmRhhjh9EsLpFyBx0C6/TJyBsg6QRx0WdpYdFnPFPafJfteUtgb+6ppde1cR0xqN+DcO+amd/CtyZ24/QfJjqI30eF3EGSi/y/ToEcaKnFyTy5Rug9UkxunzAx67CRz6LTCP1TViEdvEXifOQFk/NE+AIsiK3aXJZmaQ6F3YLtsoloyFR7VRBsnjqQZ2bdsx4gyUtYvmMPi7jvCdapH+ZUcwN48NmBKRm8fmxuaaz6l4To0J5e7oPTYqytSG/Rbm4lYw37MMU94f828nn8dHUL1TmnCbGPI89gN8fdjTTuQBQ/eS5zQNM8/S7Zj/YVuG6WiY2xG7DOsgaQ6qMQ+8VuIM1MpBmoGcSDNgz9UUf9OUhfHHX4zX367nMYhK4k+TLPrFSAx2q/hu4gyU9SbNwMuRZFkOagr5CMvOcB8RUxPmI1KpxlrTR8jv0HHxypD9409M55KvRJA4SVOYxLJwidEnwyTSr0wsDlPiKCXx1SESr5HEV4dKFKc12czzAXEUbRpsDSRxNt6rIolpVGMbeG7iDMyU/xz0SuKlCLIWaooyowCB+CTqWBRFAcOxIqPo0y7upBqIrKK2E2fwuP6qx0WR9gBZ/I6mkCb5gFPv4WvCNJlONcxTb3CkJp8fNLrrNLrnI42OrzMpKHElIrCVfCVJRM98EUl0UY2ZmnCbGVplvJo9EvZUZHksgrQ0TVbznIPbYc83DTrnkDoz6JyDj9M1kCdwo5c4g3V5lWzkWxHOVPZqsponV2wrE9bd1t0kC/7JSidXnH67whCtWdcRZ6AW/0JafCGSFoPnN1HppixEa1EJUdq/8WGIxGVqr3rOY+b5zbBrxJHz9tKQ0d2k0R3433/mNEx++lVDEj1s0GdO3BuaKebgHWFPNhUpcktthHV+TpPVPBu0nIBGD5GGuQ3xr9KulEC/VrFg37FuIs7g8Z1h+rPmCCvBskRTmE+ZG74SbGGf//AiqlFtroQipdHXhkjs1RLxztB1ftek4Dq/Jn/HLK6RRPmb736S6KMaJzQx+bVoU4diH6sMe9puaYkgrVOTxfzmr2jD7hFnoc8DpM4UEtl3KdWYA7pKnNBpwmw1sgifoalzZpDVjILZIczXHitFwVZ4KWswCi6nGpBrbSfO4Djxa7TDRcgh/p09qk/egvZYMcQeQ78FkfbYPMAe31X2mBMpQ+NnNDHzVzccmQtshnJwhv2dH1SrUaOoD7OaKmqxwbSaKmU1mwaOW/zO3B1eiHR2zRs1CfM3frwetXeoTFBiSADHj/c3qF45fJW07y414xpJtekLuWgmzmDL/b32PpHWijrp7g1fK6w7fK1YpoaNusb0hcFR1yhUGweN+qL564sX/vezrc5dg7NdN2S2w052EDs+GPZks3xSofn/kbkwTOYDQ2ROGiCzfoDMJ5TMb0T+ZM8W0MTM3ynYEMvC4kybs6VKm7Ol0nz7ta8Iap+fCtP+ZN3CesnU/mQl+8VB2v9bMAsULw/VhHWHptB8WzeEzzefEyZxCtVYZkqcotaThw22sPeYjikjWJjVr4mb392zZiFKaOJ09smuqjWgJTZQDWRymHvNGSzrFsmK4EmMHpNIliF/ZXvQOEiy2sDZSbKmUo0NmnD7odDMGq1sethTs2X+AGnq10DqO+qaglY1AyhnsBkkTeqMTpu5/GUJl/+QMci2wqTAtsItzWZpVPMb2sH9wH9U9SwjYBn7pqs+VD1LgSpLVJkfihNYaqgOewf4ZN9dTH7KdBqv8n+XXud2ZIWHeTwykyN8Nd/HjvEf8R+zv4sUUa5OiLgh4/A1JFn3lqIwjGYZbBwrZ6+jt1+yX7PfsBuR/sNC+RLtx/Ur4/8RNrN2ZuFL+UpDnqlZ2Dv8MUtJuCZYskTPQ1FhOq0wWSMbpPYATr9mAUbB0vTvh1WsKdgdleEb1netF62XrL8Hh1v7rHQOYdmviJl9KL1Z6DNYeaLIDK0zpZsupZs/Kt1cCxtDLhvB/sWj6R9pbt3zP2lGSDT0PzFv3+OfYuQ4pb2nhWU86uSZzzLxBTP8/5T/SWb9mw33kGBjsbbhkBP+rwppLEb+K4/6T54u/iRfrv6J5yn1nyMx6v9x5L/j7GN9fKT6T5wl1rfDWsdh9GvZs/Kfe6QO5b/oyH/NYYY5P06F1aHe/S7u5Z5hYL0LpXXB7md3zRHpLEewajU/aq/ijxJviupD/X6Nz1O2/80wKZLilB3Eq/6T4AUivq9WriHXIt4Pt6JpqvUbYWMrYsn0T0Qf4H+I0CaZ/ifoA/xLUJjkU2H/0CH317ywp/3Ktk2M7/9BjfvlMN56NtbUnsv0K3U0+4+r+p0m3038ZmnjokV8Rj+b/b+n+K3iC2q/0r1mqdZe1YNuvUTNG8eqDvabZr4j239ULFDPgs0dkKXCVvjTvE2SmgO5476OGqFZctCrYXwCa96pYgfOPhLWRxaL/zdrCOsR6+e3CKfetb7L7FgxVlh9FNZNXPhY78r/yuDGWwNsIFrp66P/AwwX9+UAAAB4nGNgYdnAOIGBlYGB1ZjlLAMDwywIzXSWwYipBkhzs3EyASkGloUMTP8ZGH78ZmBhAINgRy9HBgcGTu3TbAr/FBhnsu9kfJDAwDj//nUGBhYV1h6gEgUGVgA6XBKoAAB4nG1XBXQVyRK91VUVCE4CwcPkQRIguLsFd3dd3N0tuLt7cHd3WNx18QSS4O5O8jvAcnb3/J5T1dX9ZubM7ddz7x0ABgDbSGQz/eglroftvyAIbugLd2RBPgykQTSRptB8WkQb6SE9pSiTwuQweUxd09XsNcfNSRPCwnHYg1NwGk7HPXggj+FxPIkX8SreyCf5PF+T5JJG8kugNJapMlPmyhLZIjtkjxyU83JDIuSxvIxXxHu49wLvz05ix9txOX5OOierk8PJ7xR0CjslnM5OH2eQM9pZ5Cx11jubnW3Obme/j/p4+iTxcfn4+WT2aeQz3Wely7jcXPFdHq7EruSu1K70rgBXGVdTV4s0CdL4pNngO813oW+UXzK/on7F/Zr4NfNr6dfW39O/lX+HdFEBWQJOBJyOirJr4A4HWZEfwb+wB9MGekBP6ItJarL/wr7HHLPYrzPY7Rd2P+5usQ+z2CfwZF7Cq3kTn7LYISkkrRSQEjJJZsgcWSzrZbvs/oH9uoTLI3lhsQdZ7MGOp5PEcX5hz+7k+429u8Ue5AQ7S5zlziZnq7PT2fsDu9cv7PV9Jv3GntBiT+by/oW9iau5xe5Y7PCd7hv8D+wtfmFvnw4BHgFHA05FRbnZXWEy2RVA5GfqE3kI/2qRlyNnRa6228af4/ycMRfMCXPIHDANo4Ls78ttDI8cZvPI6Ar43tvGHPynffv2Pcvf9bvDQNhjIDw4ehTeM/xGhMe9rOGjwlvbo0K4V7hXmAl79O/rI+pH1LC5ULhnRMGwfPb6RWGFwnKGZbTVj+cKixcW9+6T6OquF3CnOxByHAjNHZogNH7Im5BXIS9DW4YE3n51K/D3LaPfgE+2S0Tzfk5wDa7FdbgeN+CW3P7XXOsfuSV35t7/fJ7oEQ/5UdnM42xMs3HMxivxk4ySWbJKdikohaPPie6lqBS3VXSUs/FFY/53jf5u8k4+yCeNqbE0jiaInvmZf1SxfldxokPj/T3/c/wz3LL/v/u63Y550z2Re3L7H0aZ+eawWcYxuJjUNUfMKrPaLGF/M9tsMrPMCjPHzOXMHMCZzEKpY1cqOVLAB77Ig7wojGKohCqohjqoiyaWN/pjAAZjNCZgERZjBVZik1lnVpr1nMts1yfYgyv4C7dwB2/wFp/xjdwpDsWnxORF3pSX8lMBKkKlqQI1pibUglpSJ7NGmpu1nINhFliuSWHfuNTSQurrI2lAg8wBzmk2S0N9I005mxllRutTLiz1zCJ9a0ZSkDloppjJZqoJRkLLeu5IgvhIjKTwRnb4Ib3lubIIREmUgguN0Q5N0Qy90YbToyemYSImYwpWoR+VxGnsxWFcxEmcxyVcxzPcRQQeEyOSQITblIrSU2ryodzkzxkoJ1WjilSZqlArykdt4Imzlm33Wa49h5S4itS4YZnmJlLhGtIgBGkRipx4AX+EWf55glx4iXQIRwF8sFz8DoXsHi2IjyiKryhimboixUR5ckMJRKECxUBpfEdxUlSm2KhKcSkeqlMC1CQP1KCEqEWeqE2JUI+SoAElR31KRknRkFKgO2XHH+SgG2VDH8pjWb8ggqgwBlEhDKGiGE6BGEbFMZSKYRyVw1gqizFUxvJjI8yn+phElbCQGmIe1cMCaoCl9AdWU2uswWbqjK3UFVuoC5VCBwrADKphmfU9elAOeOECkuEyelEujKASGE/lsYE66BW9rC/1sb7Sd/pan+l1vaG39I7e1RC9plc1TEP1pt52U7cYJrP5brKYrCabVaWcprrJZXJbfq5n6puqppapZmqa2qaGqWPy0BgaS5tpBK2mVbSW1tF6WkErLbNPoUk0j5bQEBpKw2g4jaLRNI7G0wTL/pMt+y+w/L/Q6t9iWkbLaSmtsUq4iY7QUTpGx+kUnaZzdJ4u0EW6THfoLoVTGEXQPauWj6xqPKc39JbO0Fl6RyfomVXQF/SSXtFjqyev6QpdolC6TyPpJG2h97SVPtA2+kjb6RPtoM+0k77QLvpKu+kb7aHvtI+iaL8BHTBEB43BcmqOJdQUy6gZEuAUPHAGsXAEcXAMcXEc8XACsXEUgv1W1Q8iBg4hJv6E4gCy4Sly4Dly4xUy4B4y4gEy4SEy4xECcB/lSFCGDNpSOrSnDGhOLrSktGhFvmhNfmhBadCRMqIzZUYXyoKulBWdKBOmUlVMp+qYSTUxm2pjDtXBXKqLWVQL66gd1lJbrKf22EgdzQ7rIfaZnWa/2W0VdZe0lNZmMcditY4iISfixJyUvTk5x2R3js+p2IvjcjxmTsnJrOp6chJOIG2kEZfiQC7BJbk0l+GC1oU4XIhzc1HOyC7OylnYl9NKUn4jvhwl3vxJUvNnScHvJSV/kCT8gO/ya/HiexxqGTutFJF8HGkdSyHJw98knZSXvBwmZfihZW4j/lJOcvMdKc33LZeTJBaRDBzBIZJJYvBLcYlKgNX7XJb3Y/JXqwBuVgPKSk4Ol1ISy2oBS3p+ZP1QFnG37sCDn4knP+dLfJWf8m2+yE/4Fl+Q4pKD/5Jikp2vSCUpyTekopTg6/yYb/J5qyDZ+LJUkEDrMOJIbIkr8SShJJD4kkwcSSWJ+C1/4Y/8wnovH37H37kal+PyXIErciWuzFW4qlW3ulbjalulq2n1rj634tbchqvzDJ7Js3g2z+V5PJ8X8EIOtm5uMU/laTyFp1tvN9k6u618gA9bj7OND/IR3sP7eDNv50N8lLfwDv6Tj/Fe3s+jeLT1Q/14IrfjvtyH+3Nb7sAduZNV0W7WMXXhrtY1DeIgHmy903AewSN5CA/lE9Y5nuLjPMA6qaW8jJfzCt7Ju3g3t+eV1lmu5jXWa/bkXtybz/FpPstreR2v5w18Ri7KJa0ml3WKemp1uaKbNYd2k3c6VRNpDflL/9RAHaqiSzStNpf7ukVzand5r9M0sdaUq3pKy+tYq6drNKO2l+e6Rwtqf/mu8zSVNpRQPawldJiqLlVfbSEPdKvm0h7yQaerl9aSa3pOK+tETaAbNKt2ltd6QItqkJIGq482lXA9rmV0lLrrSk2vbeSJ7tR82se6gNmaXOvJLT2tFXScxtW1mkk7yAvdq4V0gETqfPXWRnJHj2hJHa5uukz9tKU81G2aW3vKR52hSbS2XNcLWlUnq4du0uzaVd7qIS2uQ5R1sabRZnJPT2o5HaOxdbUGaDt5pru1gPaTbzpXU2oDCdGzWkknaHxdr1m0k7zS/VpEByl0oTraRML0mJbWkdaTrNB02loe6w7Nq73ls87SZFpXbup5raKTNKFu1GzaRd7oQS2mg9XoInXpHxKhJ7SsjrYuZZVm0LbyVHdpfu0rX3WOptD6clvPaEUdr/F0nWbWjvJS92lhHShRukBTa2O5q0e1lI7QGLpc/bWVPNLtmkd7WZc0U5NqHfs90V8GyQAJst8hY60bH89zpKMMlT4yWnrICBks7aSfdJBOMky6ynDpKb1kpLSXIdJbRkl36SxdpJsMlL7/A5avJe8AAHicNY49agIBEIU/2XULa8tUYpU6p0jtCbyDjeQEEuyEkCI/JKIoYqIrKuqaXSVs/hSM2UqClZXkACG4eVkJw8C8mXnfTHxFMn66TzNNEsLtf+6Owq+//l4zw8dRLGkqfBI44TdFVXOu1G2FP5rmeKAvVSCgxzlv0lM6VFlJ3zKKndCWcnlho5nPO3d05cyLVeaeAY8iBmLa0Xwp5zUNKYeJ+HXt9PF4lXOtOzbP+i3gU5weY0pcyPcUMaq67KpeiHFDTbtDpvrgkooo3eiLDzZGyjywPPPMOLSOrayV+QWU4mJ+AHicjVfdb9zGEV9S932n4GwErgGq6BJbEgEo562FrBoJodOd9dHaJ93ZIWW7IY8n2UqT2Elby2miVnXr2ti+t+5/sbRfpDzFD/lj8leov9nlnT7gBiWW5M7HzszOzszuhmv/efnvfz3/x7O//+3pXw/+8uf9b77+01dP9h7/8Q+///KLRw8//+zT332y++D+zvY4G6XJx7+9d/fOVhx9dPvWcLDRv3njN79eX1tdud5772ftRn3eypuNjuhsN67Ms7zRRLd5Zd5SlY6qaqS6GXAVbkTu+mbUXXZcN3aEq0JV8rr0pmOZTQgxRGAUxkLE+kCsb2xFvCsTTQRmeAYy9IUpregpuzOMVC8AdAq+ruEpuHKOvDohC65YX8pxzmY84EMnt3Sn3PlnjJnEQo0C4YpoG7x5jbXcYdJBrzXpWfw6JPLDNhvhzT4Sh1bR24oUT3biFXAz21O6DQ7ZL8QT008UzzhXFU+M+pF0lZUIp4A3I3jMSh3pCpfH8eHxmzniFi5k2WwpF9aLjTy0Xgy2oqM2Y/zFMHplW3YnWYrzn4MWHXHGQo21CUtIAjgBbN3Cyryya5rfOQoZO9DUkkZoOMMsNK42wVksO7QNrm0U+VpRyGxQSoYSTrhLwNUM7sBwv1dw10BpE+VbZluMaaJ54CWsTNgoh7WwHrbsWRtrQahXwHwL3rrFXresWcvJIXNTow+tg7weOkda0mbBeQBOwh1McbCc2E4Jgj4z8VsnM7i1Fb1uMcjXX3As0XNlvpvbNwJxEtYbEVavm1s3ggShTeCM1+UIaxUOIuJNHMQ8onv5yjxFF4/EtiPi/N135aNu3m531mUHgYxY0wGWpxU/CaQJOQo00V5EmM54q5noJWARSBu0VaCy2zxRoyRAl7d7skdRkRI3u5TbM15ulTzrA/YB/FZpqYbYXlJNsTSlfMg+NJQKUapiSVmXjNe7ossv78pMjBCBYT+67+zEKWSrUKSqJJacvMSWkC+XLUypm7MbAea2jhi8GfTvIEnJGVzKZZ6HJT/NUoKXXeS9LEhieTk+NaLLpQrTLAFHN9bMyEQguyLlY3gZ04XnBgLdrS0aM9yKZGssxgIeDkOZYtoOz2JHxpn2OMbDNHZlvnxSnYriZFPOe9kOPoecjRIxMgjKzvO4++cRO+A6jRNrpE7/Lf2Xa6I7Bge96VjNIOJcPo5NyLC+rhv/k8k6xcSxplq4bP9qAlkFBABNqvtnwQdTsEdvAq+9b2JFlXyKvMhVnzjq0ziYsqTqYMQlb4tFQR89+Dq9iSqjc5ClVJwqFHtArAHBoxFiGQJ7iZxEHIaV/Kkm9XlwRiRKqjWEatuj6aiDPk9iniTAIntch6sy/nwnpeCists38+mj9uOXygHGMkogR1WxA+yk28JFtVaUtMb7ZGMJ1rFBpJgjpZDKgoleD8wQ76uKv0o/tEeBSLexiKSPp9t6bA/mau+QNKcr3Bgstqd9CcehWozok0lEo7qHbCt7F+RFya9KVK17KLglP7udYFvgbd7jeqlTRDI5YZWgGIIMY90jRozXzVefBfm9qneC0e1hYJhrWios24xUf8JS1Q2dLwJl/2QBRJq8tYn6UdILRc4re6twb4iocmg0V/YwKpZHj1+loc5kwcwwYHTZpW3RndjbNPYapRXdWrrVPVXzsNCqBBsMuUrTOQkC9GG0GTOjzTUTQB+qeEHRE0kKoORt6zmZ7ZBT+cRBIRX0OofH3/VRIxNBbxyT+ppWRCO0aGkEk7sqRHybKwpNpjWpreopnEY3dKtqm4lmplQ+6/jCe0fH3zHjObd4KGZols+LrCzybttRD+JgbEZVigrOUVFRubMNfdq4g2wQbhV1DNNHVnE1CLCJ6Lk9N15dM9WBotLqCdZDDBUddokpJlYs+jCkllhRNsBpT7yymVUTC/Sri4Xctqqo9lSM2rMtFHqZJWOzUcPLbMG5Rkejil7oul7bx1SahlHZKcU6ZHy1FxRRbL6Pgyl9j3KyOvFkjWhySixrcXsmNvzi+ziovXWUrP1/ymrFaqq6plE18ms/rmrGLNCaWa4120heM3UCWD+Tkkpbfu8dytCWfwH4izDtKoy8WlgJ33wDU/qkuqYxGkS6Vckcs2xeE4Q2eN+Y0G6C2IY1bxzDhXZ0fMweBxNu4wTY3fBMnBfkYrSJzr0gRq9HbwKWHr1FJjWLLG2dq/qFeLOm9bNEMRVGG72YSiQot1o4A5ecMjT6vA13LWp/+jAVsFzMrapfMJSJwfYWpWxO6j+V/yMcQJk+XLJYnkeofawH1nr27ZTaeeysRherPDv9E7JIh0ZHNTt0fqG9qU4B8D7Wd//7oubo48Qpx2gUpeJp7GXyfXVSEh4Gk7ETv+3olC7GnsMOo31gyVPf006iLPzLvkuvQ67T2ijGHwbFQXefVvepFvc04HwX56yOhdMWNspd2qo4cdd8XeQkDjy7aarrkL7GXMZZapNOx7gBiDa3rrFr5jIkinsG9oCSF11zrsa4Vxwe/zAXm1JlY5PHO5Scty+AJPlFXDTUM+3egiY0Drt4xS+4aAbPkJyGj6xv2XJ9ACfQjayx4DTolje5YL0MfozMaTyqlPpYPHHJFeq2+AqHhY5QnN9FSQTy+lwsJbZTKegmdTsyXyJZ83N0MqBTTMHrzOGOdgK25ijc0sPj13N0XZpq+3qi7Utoo46cqFPZW7VRlFl3TKyhafPzXzJh9Jf8Qqm8K7dwP3TVT0lxYQfAd+ZiLQGWvCRL/gvbMGjtAAAAAAEAAwAJAAoAMgAP//8ACnicrH0JeBRVEnC/7p6e+75yJ5MbwhEyCUm4MiD3GRUh3Mgikl7A7HAICIjcQkRAVETQCCxmEVnUqIjsiK66WXRZxIioQfBCXVkXFQFJ5uV/R3dPz2Si/t//O06SYarfq1evql5VvXr1GJZZyTB8oaaW4Rgt4w6YgFYEbJDhRUYXZArQf4U9/HafPcdn963kDoezWV34uqb2xoIQb2MYlumKnl6NntYyRiY9YNMBXtCLgsCgNnjSQlGBvbx7gd1RjtoBPpDF+TiA3l3BTpAJdp6eAnVTQOVxsO04bhRMhPv5C+EytpFpa6Nta3PZXAYwDBA01xmGMb7EmgAAdeOYguIIzEAFpjUC80gUjG42hWFyMQzQ4tbAADRiC5dkBaDzuMgz0lNwcqRl9NSXSvsJAROXQIBZBw/AK22zGfpYh31d+62+yFPPRz8lMOQpbwOX5AHMkbZrL3fw3L6Y3iBjiPTGpMR/Sluo0OwGpZkthq6azro0peUblGZgGnMdY+Q0Y4yuIIyUp9RUK4yh2g2JaikEuCOqxfZ27bd7Q8/tUVH7BqUbeQ6P32lnmJK4T63WHYjpDVNtKH3KDEDP+E9pyxSq/YyeNb/MRdgxMn5NrQKFxs9YGqJGHIezr3XI2TUyDOYGGWZuFIzwjdJOW2w7WEJhFZFQL5PMdAp4E4DLkyh6sIDqLaJLX825XFRQ7X4k7fZylaxmCm6Xv6hUK2Rl5pYU9yyNll1OXLQgq7ujW5f5y6vGRMtxVWWV8YD+jkkTlngiIq2MaY6Cb1hFw4ERGpL58TB5ROIvcwLjJlRkGA/DvNJ2OJqKM5TWoEEZ/TZ59J0RzEg0eivjZAoCiRa7qNGJFo1Fw9gAjzWdSS+aJEVVUFDuKC/v3p3oPOBzI5VH3yU+LeD89s5gC7sNHgc8bAUBaIIfDALTvmvV1DbAYQ1wSMPVq/yF1le5QQgz0iuZ3wSqufIJZq7IvHBMHYKZRzBLYHxMVsCl0zuSRIeDAXaigZMVDexACrS8nOjhIo/bJWjdHvwri8uy+4t6lhTncghL8kcd2H/20nN7T1+8cPLgwaNrtu3Ih5dBGvqtqX312VWP203c0aePvsufhPfeMXXyjPDrsPuSuTX3IBSZ6W2X+OWaOkTpxIBFrzGJOg0XZOwioyc4FBUUFfbQZNhtDELBq83Nzcpk7TZfUalXYK+GRTAaFD70cdH2rptufv1b8PnWB7odcrHNYBJYPmXcQwOHw/+0MeHTfQ4PxLNLeiK0Saa0qca0AR4NALUyX1OYQgWmJR4MzMAYKzAXCe+DFPRrUEft3KDtJLXvq0yBuRrbF+IiPFer0FwJjBmvkYxeBDoySeo1ElHHZ0dTgn7XgSp2Y3jRli3giKY2nBsezZ9suQyusCkSR+K2DIjWaNZZl0nEIqhxihrUoFk9635Mdb89q0Rq3ekjrfuy7L66RYtoH8/B11AvcOgW0J+dGWJF3Bs7E07EvcGxaHwEd0IDH6XlScKLFrWukXBiBSYTLzrkGSw1eE13IIHRaBgqLWjkaq4k41bkpI47GE5hC8On2C81tSFYFYLjQoyEAZWGHDrjaYTCUdqOwgxUYFojMI9EwxQqMC0dthOBuUFhbDEwmqFktcmh+j+Nrm3LyWrDKqsNiFkB6pBuV9rGa1ua3ANa21i6tgEkv9FrG8ZoRrverv12b+i542RtUz2H1rbldG1j6doW76mRZG1T9waZfLq2sXRti/sUkQFKtZ/TsF5mQfTaFgt1NR79MY3I+kdhEI2Q5o6iShyOuNbhTNbIMAITgZkbBUPWP9pOW2w7mJfR+od5OYXpGkhW87LNLRpt1clGo8LUfrIExuHs2IWwRMXqkVWwd6nC9nQBvOuO4TMdLmUsMxQ8Yb6C5zYFT0nm9ExywBolc1TgYrFSUMCdpoTCTZIWX4G0eDLWLF6P6PUycXU5bStGn7uRPu9ZakernV0Q2ObwGjAcdH74QsnD3TZVnrgAQkXjc+Cn4ELn92XVftt2pNq/bQufNulAZSg8w9xd1qcriCSXUUmeRvUy0qer1Dp3BZEkCtMSgantCOYGhcmIXQNWkDWAwnw1n3BbKuG2DTK30ZbKFKirsb0hytUi6mcTjZeMLECDyHGMgGivk0yDIrtEfewLIY2MftY2srrGRuwMhR9hxRsL2JnhXXit6IdaCqKWnMjiKggkGDmvVrSwLm+1yyEiPW9AWt6mbrWgCP0h6/kSP7I2/G6/O4v0gSejdvRo3BP6Gb6OnS/uP6Ev0X+hVg/ukcvEdhXBntCqn8qiBzaNSg7qEYyOjBCv8AxAXMGTJUcXWeH9aO5Rl4TD6sEI+CI3Hb4ARiFfLxRquRyS/D3sLZqZRGRNJniMOtFrsYqspZplGZcRNaeRVwjCZbRdtHr5kQDZ0RB9dhsowWP1oTH63WwNnN34wU/HwYaW8OHDrOmJ58HiN4GLE0KtfWAZqwmxxlAo/DNZR8gIiNbor/IHgUmj0hoUZqAC0xqBeSQaplCBaUctBaZMgaHWPhvpLC7U1XgYIY2oIxqxv8ojiNWIsWO71uHYamQYySMgMHOjYIhG7K/yCFTtYE5AGhFzQiqTE/DYPaLJXg2QGZzCmHRBmSnIxBVhoziaK3ztVKGKT+ANtTKUuSZGF9JRzFAwpFY7wVDRhVhiMZfZsS7kecZiRCIUZLSyCsPKEOmvTLbE7/JgG5hoLRfPDv0PbHysdsNDsJbtA6ELaL57ZP+WNVxSqDX/o//JWuWPZO5HE6/vBtNAKeQxq9cMhON2IsOpAavJyjlEjtEjdWCRBddRLlnkfns/1oGwYLUgC02J1l7XuOmdNYGTD20CM36EXwe2ViL9wJg3fAh0tZ/A4P3hWWxqVhctLCdrZQbuBeFSSbVXPuEMN+GMBYQzVOuChrEH9AynWhEkfeSua8QGV0tRCLV5n7Ky3kI9dniQjk9Q+4R03cxAXghZbZAyQP+App3Xirx6tQFOPwdIH+yNoqaJrTdQT/w+sAyuaZks94hHQVf8W+goXGQUWtUo5BVQgdKyTzGPgCCGMwEW+XQBebS9pNGamdyABxh4La/T6TkW0R9zpVFUFsOCIr/di6bAZ9eWlCIUc9wahCbgT5xoBNvhHHYlW1j9SjW7N/zW+6+8D3NDqG050mVFVq3dwJureaPIMwKrUvOoXWpz+5x+J7bmkZOF3KyVoNse2x7Q7XjSniN7ktCMPsHOuLGA3xJuYEe21GCO2Y7aTiHa1Rsw6jldTKuUVwCeryyQZd/eCo64jrfCoS5ExUa+DLVV1kJiXqQdMn8TonSc2jKiMIUKTEscXbEdzUoKoTeF+YpqHbMuirckKOSJIIo4OTvG2mQU7aZqu+ITR2OPvE9tXmnPniUlkXEc3L3KsHj06N6R4bj2/t1iqneYZk6tIgMDbSulnly4J4tOYwKMaALVSOMYiLrBPdlJTxxqvkRFK9LnIsPiXQrNwMHdMKPe4Tim+VImXutK+M2f/26KUGeGMnJZv6ijAiORFpiJ7CQt4gXsz+lE3iTyyEjSy/4cto2wz5Uj/WarwldYE2sKXwG94NvwbReLTL9wSrjwCJvAdgk3hb/BfZN2yexNV0csbbzKZqEwAxWY1gjMqmiYQgVGitC5YtqRInTT40XovHY5ZqY8JT2H1iOl7XYRugwCzHqI9C6LeDEEo3a9Xfvt3tBzNEKnek4VofO6SYQuzlMziRej7i0SoUPd4QhdvKfIajw9KkKnkD8yfmIzTldH6NQjjjOT1zqcyRoZRo7QYZgJapgLwkIJRou08BZ5Lhnmgygo0ttcFd9wCVG9IbxpS3NVeHNp7fFWt3QtXksEpkaGkfAmMNF4Eymaq5IiArMievwRGv0Sn94Yilgk09UxygglsTwiiwTLYyLjY9ICDkOaaODcjCi4q4Uk0SLoJQVRgZckbHaUlmRTsdRYWDe2AJA9wsmSum3+8iAyHZGwwr/0mDGg2+Ccrg7/7VRsYdUdk3bmeruydUR6X7nLnltRltQP2SfsSEWQOWZA21KETyuyPxKYdKYwkGpn01ypbqNOJwDGak0UrfqgQS9MF7yiwGGVkWQ7iRBEPxx4TfLmlebi6Ji31Kv1oD8y8ziXF+RmZYAMe3Ee8Pxz/dp7WFN98Pb1i1aGrzy7IDEXnBg6D74NeoFeBbDnsHUjvm4Ak9kvR9aPOPkK3BYuHM2uenUplzqw5Rib8K/7Wj8bguhKcCTUX6TmmQyhHYfOUGgvRUhtyixKunAkor0H0d4fyEh02UWzTTSb9S5dMElvEvVsUEghw/Qq5leBtK1DooI4EujwF3n8qohpppBXVGqnUUIHq3v/22/f71nZDWxRoqc1WRO65adlda1ZutIFloDx4Haw2iUFUl1HBD7fA8/Ba20M/Ea2V6aTmJkT2ytmPcKPAaZ43nEG73Yxviy7Uw6O1oE9gAPJ8CsY/hj998ShQ2iR+up7eAMO5U+G63ds3L5H1YOJroVWo8hZRCtn5RilD7sSG0Z+i1/qxx3pp/FjwIIU+CWESj/NNy6ijpq5H3E/Dz9FOL2YcLoNc1bAqXWLWg6Zlai3as4uGjmZ1XE/iFsUPnfb/H4tkFic2wNHw8mEw2+5NMsFZ0rMXQyO6G5i1xLWXtBPB2EDW6NwNUu8xEVyxDng0Bkdlki82SAv+O2izciwzczy2YEcZK4F35z7YdlCkHMZtun08ALIwO+7167V1F44+dh7PcJ/Y1PCX/InoWlFcPl6yTtdRDh1OeXUs4QLE9U2DYUpVGBa4sEgG2IRsWkozFcGormTou3l+xA/5yAKZyELMsFtTxB1mQZjepolWce47IiLBSUOgmSVMnBeqcfjzygpzsvLxT6NXw6JIFfH4/V6PG4bm/djQ9K8f90OXKuubn388ifrTk6rrdw0YuF9w4eeemKfa/SJ7j3evrd3zYCjG4++O3ba5qH9/3D7oPGZM4Yf3QZXYKsc40QocJ/aqsu2q2SVwhQqMC3xYBAFcsjaRWEuvkZgOqtj3rHtSN5t/q+1QykJclRxExwTQS2tRZTMZPICibpk0WvUpQga3uISLfogn0YMJikYXIBpiXnG1hOpPT/AGxR8FiUsYZq8PKT/cgW3vfZnYIVvAPjNk8/C1kuLb0nqeke3ezctEP8KMiZM2P8ItweYfzgA5+Z9svfTK95XdYYNy6ZvziwCoSLwWH3rVJXtZkOS6gs4XRqRdbkYs040q4NcNHxO7DjkpPpYX6Y2r6efGHROn4NYcyzXLxNu2PtAyq7DbA2y69ISw1vdLvZYeu8UcCLvuW7EugPH4EBs31dK+kHLOAMGATskkcgJdkKofwyuoEXaht4nkedbpH7OiiXOoBVEC3rWyHGMVn6exvmVViKeNm7tXVBMW0S/32UrG8CJUAj2bAgfxrNI2iYzfb+aY3ScSmYq0UxPJzJDYS4eJjAWBNqjI5ivWgg36KPlCnNDNhmJ7WUjzyKbGTmPFQUVfkJkbKYjGSK/BXYsLGtcvh7wjZdcoJl7s7XP5i0gDf/+/nssx7glIg2b1dJgU+NNYQYqMFIcx2ZUxXEoTKECI3G6y9iunTIFRo7j2IzqOE4tInI2ocBmdYwmxiaMxftah3jXyDByjAZ3N1eJNSLL3SEsRL5QcsBmRFrfUm0k7BSJ0BZEExV5RH6bVk3Zvq8c/z6auIa01+Hnla2vf/+9hIfGQXB9RE1jjzVKn07GeCgw0qiT2406qqVr8VoiMDUyjDxqN6eKTFGYGUo7kl+GYbapqTdKReFf4s8WpjGxKDerY1yRecA0RhYl5tYMJjVgtyMbJgWZkynVbsEiEnOywE8lVzEnVQystirZXdianEe5GX7avaqc2pPUkPQkg9fU7A033mzNC/iJQRnhhjkKpmHVeAZGj4dQZrOaMjZOFRHrIu0aYv2j50lsmqqPIrxb7wN+8kLaquYMGOkAI8/AGmTmpPGf31iAnnahp3cR2U0JWHmtmTNpBAPe/JYjFBXEbvVzfqf04nxcFtdQd3qxa3Xjfa7Fp+vgO9WmatSki1vTuoy/dGMBN7V1D8aetE3mbE+UNKtXbgpTqMDIkqpvB1OmwCiSqlfPfWxvsgzqVXM/AMHUkFhMUsBi0AKe1+PAhl4Jx5CxAkD/zwJgAHgBjroIeoAeF+Eo8MJF+G/4b/Y19l/hC2xG2B/uz7rD36F2E1G7j5IdGm/ABHQajtXrglqWhi+kYJQ0EVh35zSDiQ4wsRnmgGvcw+Fe7Nutf4R6NAbSDhlDvZpiBlZFDQpTqMBIFLMI7WDKFBiZYgZBTbFEpNseJbqtXi3ltuj4cyxOEl0N7furkWFkKccwc6NgiGzWq2UzzthmKDASv2MYhd+RjuC7EVonBiwCz4k8GwQ4AEyZnkbpSgBeLIHP/Qi7JVzDrQlPZo8c5tPQ2vv5YdQPaYOM6bkoOvMqXChMoQLT0iFMmQJzNQ4Mzpcykr4Q9+HMFdgkxWMC6DOOWaQZSO5TkjNq5zUmQ0HgI9kHMzuI9wl8JN63uIOIkQRDPD2lnRjLUG4HW5gzO6CHDIPHulj2GDHO6/huTBKTy/QIpDrdLtHjNgQzhCxRh7jCYkYuO85fSWCMkjfjKLcTG4ea29TG9hKrsNTLe9x2r1uTlyUgnxEHFpHlneF2gVN/ff3nzxZPfPgh6DoDtG0N8KDBbTwoTrmnX9ld5UgRPPlQfUNiufgHXnuM4z85DQd7Dhj+s3TpgYFiWcCqeWKXTN11wmQ0mlfJzH1E/d88CwDPq/cZ1wk3KTDnLikw9VEw2q8oDJOLYdDcfsQYwP1kbssLAMgdF3lG3p2cHGlZibTh9nGkzU+A2a6xkbb4fZ1lEuW+iuP2hZ/S5cQ89Rnq8Tef0r4f89T5tquRcTG2+E+pqPoJpVhBLFXf0B5WWv6EUgzcBcbieGG3fBwvPPvyuMhTappNjqHZJxLNSglwRzSL7e0sWP5bvZHnLsc89xm44/c8p3PFPIfpdoLQDT0IyuI/pflcoduZ72m8TCFvhAJ8NwVKik92jbbKYufgbGJHnL1LgfmM6QBGE4G5cCkGBss7sqWwvHdhypjiQHo+kne3QShRCXsPpquYnCEmd6IS/24BDSQgoa8o8Hck8lohditR+5tKIGvyHZENxpG/qRCAMH443XwcOMWWzKrVg0KfqcrYP70UmY+VkfkgPLJAmetPFdlPYJIa+N5I8x9p2xnQj1M/qJqj4Ur7568qtN1FacsxbgTzKF/GdGIKmT7MTYE8T1JXMY+xO5OSGKdQKgpCFiaxs7Po1AaLmR5iVqqYJevVImzGOmh6dXdHuaM8rn71og8OHMjxYWe81CtgemNKg0z0b8W5oAjTm0Y7QMHarW8cHtJ7V+1U11Sg+WPlc9ue5DhY4nowWF6RlD+h07LnCxPd94OnBg/igW9Q+K3KqtIxYyePcNVt2/+Su+QPC3juJU7/3D/g1R8zh6at22Z+RmdYHKxZym3b+tRTW8MJS+YOd1VVDr8FUYeMnHDwaaqbSe4O19cp613EefUIplLTzFjQWpMecJicImMyBq1CosgLWmQPSPvU6EX3Qv14qDipJTPXaZdDD1kZ9U0u689N38BT8D8TDy3tOqXbEwfvXQh/1DSHNzTBixDCn+EnRnYKvIVn//His3iymA2o52FoXhKx/WEQzKIedcig/o3qfEhGnUAjEJ+hJyYwewC2wC+AF3CPn+u+t2vtrQ/tfam+cveIhPFHXCAVGAEPMuZX3zOs8sWnX3zNYjrqIDtXpE9CkQ8oRSpptqKgWoliYZqL4sAgfx7hrsBc/JpmzqijRLHtfELbSWvXF9FXFObDQqWvJ9S2gA7NkJ3mHJkMBsaLpkeHqOVhXKJVYlXyqqiIRIu9eLqIvAObP6MEB8kFVvjnuU9PhJNdTSFHgmEHbLgKTPDHhfe6ECE1iGg5TeziG9mGQ5OmsClwRwNgQOHbGIdFhEsuMalMPtMz4DN5rS7ebXZbHHbR4qg2W0SPGfG8yAjVTJo8gQUkYF+AkCDeAE4loIE/P5unycvJzSv1eHO8Wo/D7bYxeRn2YmmC2aHnfzpx9L4X0uzaGliYD+aITxR9/zDw5R+97WbY+iNI2Ljy3vtXuYDw/emLd90B+H3r/ypW9po5dMHYv/acD99/vRAzxhHg2rxz7T2P/hlrAERBzWyyF++kOWoMKzKMSWcxIPcsqEsWjTptkPeINj4i9UTg5f35DLLVoKKnj9KTn1HUNDHMwkrw/E8STbfBQ4hqLGyF0i7+UDaFLWxPVnlmg2hmE5ksplsgyWWwmxxGk1GwMEHBR8UhRfSoVJGjvByLYPQkIwNdymfqaLLhTjCrSRQ7mnIw9dCcOYda+sVMO0u4Mx9JqBtRzRdw6k2JosnECB4RY2ZV5hkTSpZVB1GEVA8SOeWoBmRD8Af40Y0vP/xOCBenvFk3YOWApKm7tt2zzcwmbVAEFrZeH1ax9n6r+ajDwG3bufnBxyQZySdydJ7KLJEjNjVWjvKJHUhhzrkUmCeiYSLtNLs6aicC8wmF8cXC/IdYQuepZeKidtej1KLJTpMtGuUpWWdMjrSt5LbiHrDd1ZUAs1mxdhfubWC73s6CP/9Wb+i57cTuUj/3GXjgdzyXT+wu9XPnmTTJ7kIPYrsr3lNEj1G6nfHQdV6ZgLhQHzrizBKmEtGsFIZmt0bRJc48ne3f0VzuUmA+y+8ARhOBuRDLE1gKkG2GpSAXeaB5Aa+pMxGCPCwESeliEqNIgu1dZZcsnixEIl5ZNCL2a7Lhv3MwjYLlzV8eTKjpUE5MeYPo5iqOlbkBFZrI6IcrIzufpoxMydGIkW9Ok4RTYm160Ybk29NOvrECL/WRdVib17OnH4+RRbZkqQ8p7eFnLgnsuxL20x7vA2wg98ZFhHf4IsJbcw3j63IcTrfDL5AtEIbnj+7cvHkntgMGIn94puYyzVthbU6Rs9kYrVnUgiBjkHce/Ur0vgSrYmwNZNjdJIS/DT4PRoOrQdFTMb0r/BI8D0ez6w49wua6jugEuKfuUHgpsbAzeR2xNrKYToFElxBMt/lEBxppmiFF1BrQWIHIWGXTQ7J4nHk5JBEHG3Sywi31I5NEwylq9iUDGPvUVodhx2Kqbr3248jeuXhU0rMw85hN9+e9syZNURTu8dZe8Ct4xcg1K8qWeCUIQ6LDflJ7ydk2lXRQmMkKTHMEpr4jGMl3zG8PU6zAfH5VaWdlFAyRVgrz4X9i8FEyXpsZB94ztgtW2Wg0kpkrknNeid2I9zrtWWSZt9uRvegAQv2RppkTbxAj8d2j4dHs83fMhafCB3HL/aSWk/CJqkSLV+QMWpE1GDRGizaoYYJOpYfI7o6S34vYIrY/UWwCs+DOSK/8G3jVg3uie25ra/sbyZ5cicb9C81fhEeZSmyVeWPz+0ZrrjBGukeG9zzt0+020S4EnSazaDJIQbQk20k5pQIbP8hJACXSLpSb3dZ3/Pi+/caNC58C22E92wUM5t8l/9Cv7/iW4kPs24dbNx6SsyVH89kkLmrWIk7FOaSCLB+qvGKcqyi3dYhtPISfl3IDRxOeCKvtXoMGgGPyfFOYmxSYc0UKzPPRMJF2JJvW0q4dwjcU5kyxFDOVG1JOMSD6IahWqucHEz2fYmp3ikHd39lpHeG9S4H5bHAMDMMzjTCD+4bMFj6jl4ft6JRUMcUadKCJMzHTMxOFYAKdsqSTUk6ues586vlD3MyRBD070QRgsjSL4Kg8nTOa3jU0PrW1qY2BFyMzGplZPrulGWYcc1ie3MtdJMog7FIoFxnJhaLYkbDkrAXluzxkySal4ZiAZ7rZ4xRNHgPZerdTLsQL0kkigJgFizriwfbZxnG4Ep5RZx3H4VF1AnJkToYrIznfRxnJfnkkB9Cc1JKREM8To+6a7nKKSDVjAaKqOJ78UNqTdGRB0LLXZXRXYJrDmWxNzffHIjj+MvaYw/rEXq7sUGuvv/13iRVJE+55MZImC85M1GmRK6VS/kTrR/XQoGoXz5q6NTRW1Bo/FvMoMBB98QnzEo3oOnXKvFEJXkA0pS/gsBg5Oz7/gDpGytIsq7JIXogfZ7z0LPWzWuDjhKwse11TrzUHbvc29/g7KIM3fh5yyxxNc+uCSSefgUt3h9vAXjucR6UqA/eCcDHRfeZLZCfC1T7feQEavwOfJzdaKC56ICiYkFMTvxsTPht2icYE9VFFLCvstSIaCxpRYIKMSTEpaAyFUlgOmbCXjuyDjawpY8qkW+9LuPlhV2Mz98ShltBYsSj3qAfLB2lTuwiNzkp3G/YQvewQVHqZwBBfz024Cnt6vEEvGpggbxN5lUlDfTuuPR44D/toNC6yLxeNEqZ4FaJ4PqE4xekroseAM/p8jEQNCUrLPgX6gC7kjALWd2yDPDMy1RKZzoFELWtIxLnZgBGBxm0V3cYgVvuMPAQ5P9tZkkNGgPOzXaoAVEnJIpCER4EmqlEeybgj+8A/XnmITT4U/vPeV/bC09JYGptPoP5rELECyEpKZwoCXq/bnSakiAazmcOruhB0JCZSBsGHuIrwT/yDcInXT137nkRI8bKblan8qjlmsZkO3DTBatdMGDtvZtMtsxvGzuKz1+wYObLfxEVrWt/gOs/b0nqd6zcR/ZStCoRFtFUhtLcqvLGr/HG7N7LAZx+X1vbps+HHZG2Xzm5gWfXQddBFJVVt7zMUBnGQB60TbrfBKeoMWqwhNEw1WnStvEHOICN42BEXOdvjMvibWiEKnQuEhTJi0YqDVfPVGKwwDOIzHfaLJBgp2zxGsiUopFF9AZfFKlqswUTBK9NPMhfkMycRnG2slHIeS8fzP880rFpWE6HmQfhVG+M1ESXILpCMJtDWS+o3GfdrMwQ9RpeoN2qDQpRmpTa1vHbGEgyr2mO4NzXVZvx7L1a59l1ooTyuMtWg4W/fLlbOuuCVRqLLeUn3AtVKI/s5ePXHuegmUXCQGIZKG1Hr3kE9mhIlFlXVfOVK87mffjq38N57F6K3C2QAAWhBOvwM/gJvwAuhYwefffXVZw8eU3ulIE0Vb2UT4kYqJJhzjALTPlIhwXxCYVJi2zmD4wIYBvvpDI1CrKb+fXqi7N+ndBCFkJ77UukBRyHyaRQiLV4UorBdb2fB1t/qDT23Ekchop77DCz5Hc+RKETUc+cZgxSFQA/iKES8p7DlKdHtDEujEAnRUQg5wiBBSbs/aR1EGCSos107mstdCsxnrvgwRzQVEoxW8wXS+6S/BAFXWhii7u8I6a9AHavPiI46T5baKlBhzuW2x1zdEsU8piUCs0uBoZjHgxmuwJw3KDDbOuLUjwdHKB7Zb1OiLBLUBSaGTqooSyrTiexDZIsmbTCRERMFIU10CDQGSiIsSkZRLltCZdbFalVJ6mrx3T1/efCND7AEP1LbaVIFDanMkWRZylR3gJSfZYn+F/y5yJY7QMpXv0WWbbQWbGhbivA7hLOjmSycr+5kMz0+r0mv0wJkcqeIdmPQaNBO1yaKWm37fHUNyVfH8QOasM5myRnrmYITY5wHPKBr9fiHrjQvnDhh/rTtP527e7KvEyjr3m/hvVcW3tsZvtVj3YhdW4APo9rpyf5/2QI/xfqnALRsnMAWJr8a/u7YwdoJ4VOplOJLpXkpVnNTtrYd9w5XZoXOL5mVbfLemQvBPEL0eibTmSkNZOhSRB1vtOK4l8BbrQyfJ/LaYIJDTGCyJOvOT+0rullm98snfYribZLlRXbI7Da0CNjAHFgPql4YdsszMbti3905FORKW2LvbdmyB+kGNvfYMfUu2KlT0h5YFzAbzIY74A68vwWL+Uo0Arx7khPwuE1e0WoyBl1oBZBXRYs66IPMKcmacZBZys3LsoMMtDr5itA6hRfG5PA75879c/GjRhewwB+B6eq9sFhz+XgT/AT+DFvgt1MmhbdoKuGpNqYBzH7pbRkHaQcnHg5MPBzsHeLQ5IqHgrYeb7V1iEMVwoGJ0MFkCRqFIN5H0kv7SBb1PpJ6TSQRryx71NYCgEqsq8kVd1Ph+A0bWxO1n0AzdVciHLwYAwtjsItaZFjRUIYb2wly0AS9SYUceorZ6XdgQyGLSjXyWSsvvQlqshMcwLFv++lBo9avBTyOdcDLIPvY6QWzvv4AXjwkZ++uJFLQWyUFIMGgkoJYmGYmDgyyblaSFaM30eFftY2j1lditPW1C0mLi0SKMwMeQ7bZ4suwp+oYV5Lo0pKjtbL3QffDctW52zgtPluKbEay4l0CKyx+ZkhC9VNDn9rqL7my+yFE3E7b1nluXtb7+boBA998+vEbLovtuM1WMaiwu7lf/qLFh3bhuGffQd062Qvz16185nE8AoIZGWUFpQT1x/NcqlHGwjSnxYFBlHARSlAYKTu+q3rfM7adT2g7Bb/WjpQdnx+dHT8QtVSrucyUM0UBH/aCgFBmCGZ5c52dbeau+kKDkOQTk4xBwS8KQCGt5Nw5S/xKyEAgiRAebxqLi/rIhMd074Y3JbE9iv7GzJVlH7jzvx8eeCW9u9eZ07+g4LayF/88ZlmPhGE1BSuGFeWP9hclppYMG1iztIldc/jGh9/t2T548k1Z2cPKe9zWPX/SXUO21dksx632mmHT8rJG/GHo4OpuXWYNK6sAq+9uaWTXqKLdNuzb4CR3rl2suyA20o2MY7AfPgFmgLOL53kG3NEdos6VAHdrF+xv9yG54zORbKUG7GbkcBsEXTU2v+0K2/nl3AXiLdIyF8p+Omf54UN4FRiawOcw7Z4HimqGJgxei7xCcPEQCMDjh2D2iqBRf9RkUvWVjiPpyS4xGXVgtonAZK7m8XEmrajRC4qnRrWJswSPSOqWvJSuiavaBxiU7tUojPjhQ3D50FmKxNlD4yQsGpunY6uBYEK8fazVvHbk6CM9YmCqLQZTtUEI8m7F5ZezkdU+fwwN2API8x8ahw4R9789ORA390HcjOiBuHkIlYpLdKdfLRWxMF+VqjTIBrUGWcdn45NiAacVB/IMQTMvBHE9JKdKQSsz6bdLp/P9coYfuPH0y02zpy5Y1LQNHrQ6E7e5/vEieyw8cNIfHnqW7dW6y3PAcGbOAklOSX4TGKn2hb1mVWx1l5y5J8Gcu6rAPB8NE2nnEwqT3K4dYplTmDPXaUxYaUjSCjgvK1uB+vJzVa0Rxb6N7e9sVkd471JgPjPEwEi0PqOpYNKYzoEkb2KCmGgIWjw4n8EiYJon46I1kkVTVCGF2WOIjjWHH5k07YgP8qeMbZ6zKN4UGLyrFj/yes+wJWomzpARjVXPRDqvHhGizRli+49V0yanPW3ULWHaIKh0B0C+xlPRULsUqM8MHUMNV6Akzxpjtb+juf+4T2Rej0XmVc6Ak6AuSFzEq2eDZMBlM/m45ok3RfTaMftnS/yfo54L/CJR4fYS0EHCm0omotPb4spHTEqbWlqmKmP49GpkpBujR0poNlJNM69CM/m8EhoprgVq4BmEnRyZKbJHnTQ4BVd+DjIdIOFzuJHPbt3C1bQ0o+eRi8WL6HlcY8Gm5c2cgTGQRkxK9FZKuYk9bBBa3FjpWP7GcsfE04/A1mWmZajVZfiwAbempZkb3voSGgFpnczodDUv2tQ7LrEwksS72sEQiZ8eJfH4GEFE4mNbkmQ50hsaLw7gDkbjpWcNgJacNRCCenm0ylkDp5OcNeBEcA9cexnCy3AlWHkZhn9hTWwCfADMD18OXwI1cAtutRTp40moVTvedab7DVoudjLK8colz4dFCpKVgnNwYjOYaAVcMzzZ5+F3NjcY9t/753KJmL1C3yywuUIu67LVeISkHzLCWZSexBsHDjWtYmE+sSoZ6tEwhJ4U5oyd0tMRtasmjUqC0mq+BBMoBzpMaLHsqL+zfTrCaZcC81lWBzCaCMwFircDtGtnuAJzPlGBUSQC70eYyO6mfBJBoCcRZH8g6iRCHVsdfpSrCj/Nzj3Mvnn4cLjPYWnHyUTGdJfa1jfwMTuFaphmpgMYQmcK8yFUYJ6XvWKcT8Yr+WQFgSSLg4Q5GV1MOplTydwiR7k7yiZDpij2fnlH0fGJ4WK4Cqw8m0Czye6D//381OkLv5FKxjM/IiovJDFrLYly4jxBwtMahBfPTHcge0wXu7+JtYJUfSZqP5M70BQCxehHuK96H5PEr+UYdtz9S5rxWCNnMwpcnOxKGq+tkeO1AhcbgVciEzVyZELg4sRRqZdRI3sQAhfHo6HzXSPPpdRO9HwvYY7xpfw+VuA6IW4Qrh1BE7xDU8v0ZiqYm5ghzAhmDPNU4JaunTrl5Ph8qamJ/kCgomLo0CFDRo509uzVi2UFwWCwWJx2seimm/r1GzFi8OAxYzxotvPysrLS05OTPQmi0+P02BLZYBlCiNfpTCabVA6WvqRz78rn6FdH/x55IelwIv0e9c4q8ZM3nePYt9+dRd4YlkNvn8/pA/Jv9O6ZBmenHU6DrfiH8te+F9Leu4B+Ax7/2NH+LxkAQa/Gz7FD0T/D1pae6g8XyS8coIl+HyD/x/4rfR8g/+O/WEf775Hg/aST5g3P163MeGYSM435A3Mn815A7FteXlLSo0dXOocDbr115Mg//GHy5EmTxo278860it69S0v9/u7SjKVliDdVVo4aNX36lClVVePHz5yZPHj4cHmWHQ6PJzlRTEtOS07wscGhynzaXK6EqDklM+f4tXn9/fP7W3P9++b898w9+ul0Rnigi8IDcf6K5oamX/srmi+6pLFrCA9cfUP1ATTgB7aRv68FO+CR38Mrv49nIrzDXjvSVsk1CWOZ7oyfGRPokp0nZm8MegsLtUksqxVEj99vcFqtBiMOVxl4u5kNdk1NZsRknp529OMpVM+08hvbqHFmRp4BX0kmjmEzPr82KxMnuvv9Xkz5X77sCltiKbzv+fT3zqdpXx9XPw/cCQYVunT/hW0A/Fdn+XkU4NNhy2Fk5MSQhpLAtReUfgr+Cj5qgGtgPdwNl2xj38AjB1cvSrZkd2ZioCvVb4nubhK3S/rL63U6LW7O1skuBLvI/G5gKiSGpBbYrzIsl0XMz8hbMUtjX+T7HU+YtsPWelM9bN1ueoL++HReY6VrZ/M+1yH0PtJ8xLWv+RB673RVNs6Dn6IH2IvhJPWbWGOm1ivt3sjUxd+jeQcpnIb7XINr4mTiiKTHlcSIzvSkaiFd1JmEarNJNNvl0+K0giSInPzABz88HrcbOR3SmZqSkqxMtwv8fGdw4713DPnrK8Y9Dc/+8RdNcuKk4qqq+qmc5o7Js/+kZedy/DYAHtzwi7lGmN+n74ZAdtHI4QgblmO5QwgbaZfSxIgOUzXeqOTkXUp1Fkz0LuXOY8d2Pv7qq48PGTduCHpz7JFHd7z88o5Hjzwy69axs2aNvRUbX8DHebhVqAe6r661ipyWC+IyYUAuR0giJCT+HbWPD3yHDWbN2CF3rz46fzHnYVfM7zvgnrvgdLB++Wa4sa1NvqOAFUi990itFwsaC65vbFPVWrXHr29cRMKdQlak0jay8WrA8FWv//GPr6/qBS8D24odO3Al1u1z3li96u9z2H0wad3ceWvllX4e6R9NLMKhAX0eIFf0i6rxKvfXwG0O90KttRTh5wk8PlsK1tLMEmqVCOoqtxhmnPCGdIeDRgRcdWx9ahxQsjewHzeGczW1oCc04QoVLJMGP+W3IWxsiNMQNQzA6hHNVka06oK6RFHHKrvjNPLfjytRSqA6XcjtQBRJm5xSkGrl8lY0hlOOm5Pyk1kbnIhrxXave+PNW9i8liKYATJRPw9Uho4/XcbbZKqMJFTJYZTPZJS0CkXHNYHLFJg4dYoRLZLbWviHNVvRSjswkF/RT6wYXmIwFvNpI0b4hoppPl/6cGwPD9cFOxeIndPxabZ06Qy3nxQ2ojmbdqI4EOm8JcSDR/56aQmOhOOMAKQuMQci515KQsLf+5HaxGFaXCPPjcWPfO/Gzj55Bu9T0O+zkr3OtNsGJSUNui3N6Z04rsrVa9uBbb2dE26bSL7IzqZf3DbB2Rt90ctVNU4TSssE+f2H8mwXVjM0APIz00JTZsOG0mz2zvBj2aVg5OwpCASeDQzVIBB+aH94FoFMvROMLM0OP8bemV0KG+6ciukTwPvlSNIKmLyAJysbny+zMKkuMZULIidTZBm9FMpTcr40GZHdgKysvJ6SdAvavH6sP4PWpCfha4G1wK9e2HJr7cxdz720/RHPj6cefjb3zpnZid5Zy8qA++pTR8SXa9b+7HrmgUG91y4K3nNMN1u8NWhx6I5ondbjjy9/srNJM/aJ4PJXZ7WvqSjojLogKXxAk8DkDDBANoDA9uMucKHpuAtmaGpbTvPdbizgu7WcjpyfHoi4htbk0EfOTyu1RJS6iyCqtkdU3dRaxFci4iucae8xW0Qz8CZwXURSIirTJ2ZGKigVlFPWkZijtBSRiTCHVouUSJYbZyMhBqHMQfZXEHfUNp6cMdyZ6+41a/zAwm7ZlhLPlCVFRSurPSWW7G6Fo8bP6uXOdYyuPqmpDT82ZuKROxYUhQrLPqgSU8SqD8oKQ0ULZx6ZUBkm+fUEUzKarVRj0NF0U2uMHKnisQ1n7WKB0CHqGkWBlRaVwh6lJUUk05DIOhL1nNmTPFxuI5zkHb0HhO4MreJyEZFPhp/c8tVT41CvK2l9TSTRVUSipZrK6HM/RjmjrqlDn6cTPSjXXMY6y8gjPFWakGZu0a5ruR2N9NIZ/iTViJIGRy0tZZRT9KTlZEbeN6Pf3096Qv3xO4jGx/VkjTqOlGEmg1ZKQWEvHk2VEk9555795bB3M5hmA/ZmuLf44f+GcrrzS1uD3OaW5o27+5N+cbuEsx6nnEVzYq16mbNILblLSPs3MGa0snkR57htGo+o09iBW0SKGjCCXHaSnJ8im9I4lIsrf+WU+N08Lv7ltOXYs4FNY+dZFgbA8QPgDdjvBrJB+fBMwELo2teFNbAp3fbt6xL+PPxzwT72Y7C4S+u7ncEs+HgBV9wV4SpVxUA0eTqK+lYmMWDWM6Jez5t1QRPPKpf20DWdxjCpymcHfnOqMbgCJDQ2sr4vwmATXLhjI/vsjQWsj9Rc+ZTfIFeYxoKqZTiRMVRHVZi205UIt1bbCGDjvEZcSBZPLF4jVFVacStmwQC0UTVvEXn8klxJr5WNrx54FTeSz5/F7xsL8OhWSrjQuksCxsaoJfiYqyNNFcgZgqpXltRilarNlnzYGSEnjTFbPUZGX63Dzeqk7ALVGH1kjKyuEe6QBnljAVoVM2UbZJ5Ubw5X4LXienNcVLW57kqF3/bWRyOokk2Pz0EaMT2gLnhy48aTQfZM+JuHlizdJmcLzotYOsi6ocZOVP0qh9wTLs7tV/qS69rduIGYTerszTdRV/zJUPu+OGXeDKS3rIDTyCDrzS5ytvbjkkxvoh3JVSaYXEDucWXjig379m0AB0PhyQMHjpw8GQ+u5d//bsEqQOmSZUrIbiWuXpuGLWStV0QzrLHj+tXWBNGqiLc/Ys2VkFrRkV6zcGKf0nHJ9CGs+e5Fmzcvgh+80mczu6Bv316DB4fmbuP+TRHgT7Zeffbtm1U4rJRwcODM/YCHs4taF7ZctaREj9WN0JBWhSJ1/UB71Niz1GM/2zhv6fbtS+GJs6CpuLjfyJG0wDxFAJd8l3tva5Nr3SGZvo/qOaoHSX0/p9WBOlfK/7uiyv+3q/4vaJHd6Yh3ocvzF71s1/DpXPBG7LUun70Xgl3wrS6oZzs5g1uHLFwc3TPiU2hum+jmgjyjxcWz1RaFOr2g1FdCDm2R6mzYywTN67+bsGXCphkvfGALn2S7Jl46tR31+3cQAMPg265xtz0wrPTaudCpz1HHcCN8Ev4FLpUjd0S79WeUSN5v1m+X6oyjp0YT+uHqQrmk7nd6wK51YH6Sar2ZlWmU/YIsUqfNrySJZtkvN3PFsOb0R39vnFlzGpeAgzu+CMOlYN2OjeEqxCuVUuU6B+LXroEUQ4qHI9ntWrNTNOuDODmLC6qsdkotr2znOBxyyg2LhDOnqCf9227zVIZ2G/c/c+TPfz7y7H79bvC/sSNGjEVvzDhgDOgOn4L3wLXwGdAFjAzv2gdBEsgBWvgL/ARehAivochawKNOZ/Kx3JqMPq/oc3mw/Hh0wUwXXhH+RQ1jYg0Sg7i0FHlh/pJuHHb6yDotUOsG14kkjt9QX14/Z3bG3GGusjV3j2xtBp82wquj+1j93vmbwAfAA/9z94MPakJ5Q1b9aUAilzLiwUXvnEPy7dD26/PulLnsBwAuX75kkzQrVWRWEG9FzQoOI6sLVdPsBGlmcCS7JKOkGM0MsNxAU7M5BN5EetzSGiKTsx8OgzeF2n4JI3egrVXyycx45oHeJPJ6PYNv4VCrSfV9PFKNvoYjR7CvBobCI+ywELs2BMtD4ZeJF4JWisPIWryNGRooMJQUG/m0UaN8w4kDMhLTtv/IQPVIXXBAP3FAHEekO84K8Kudkf9nT4T4Hx35IpmZsi9iLVhxYEUXi+yLdOmCv1gV0t42wdIFfVNg/b9zRrjOHHZGzmWmoQU+NZ4/Qu0GbFd3DSSp7GqyamT7xGwms1rR5NQl+X3WNRrk77OuR4duGZ34K8Y1zAHZtsXLqH2tsnSsmCPpwo3VvUmL2NEQwVXRFRGbR7k5ZGZonnx3CDV9yP0hbW1ylTGkk+qJTpKrjtnpmgpEi2BA/TE8ctD1krWG+vGWE+4EJf4SyYSVbhEB4CdVKbKrVxtBXsgh1yNzhOBHIA/XTFNGlB1wW3DNNIFUxjcZxKgb0iROVKqnUd8rpoJa382hQEwNtTYyRFpHTaaek5zbJ5anw1rtMIuOiP2pnIKJskApBSNWKCKi2g6VCOmLtW4V00ouAaeaF0V/43kBCaRl+A2amPNIdy8Em5DuvjXO+hLxZTYwiv+I656BqJqEJvWNb5Gq8yays+sw2ESDAbVLKqma1aVLVRXoQQbnY4FStZTUoIdfJrPzkuGXID0xvCVRqUXPt8Je4O2WY+A4DMjeCcHpcYqT5J1oVCeS5OiPkVrKJk5nMIoas9nAigZdkGMjljLe/Xfa8b2ANPiDbwJMuxt0B5mg+/LGcAqY9R9w8T846iMb8/BTgW35lCd2c+SeUGdAL/Cq60GV2wbRS7pZsBkedcCjxOG70JJBfCiRnydkSvW4kRy4takIP7RcekCKaGOmA0y6pH/h/It/Sf5TLk4QLUUelAcvmlrkQ7F59p6OHJfDaxdYcP3iqVMXQ1+/997XF+cvXz4/vDi4bFnwkfXJYDyYAGaA21PWr09G1sVu+DSsT1rP3QK0wJ7esj8V6MOt8Ho6PyEd/k+yIHC1JoFUB2KZpehzH6TLEpgszN3OdNHqdDI6fMNUNZOoPrVOco/RkEpsTE6OF5ecdEuBTZfqlIeNFf8H2wALksGfDPDY1qeHeNOPrG14+0rz3avXLlmzxQX6At8itLL3LKwIlSaMf2jBjLuWXL3wLWw7Urft/oc3roRHEf0w9/YhWRlx7hoktdrkw7od3jWIFrvouwbrWc/eF3Zs3P1s/Y4afMvg8FsmdIKNYDD6zWdvWzdzvsbJbVi69iFu1uWK8vIKWAO/GXbTTcMYAPrgGnMIGyX+qRz+IbmF+Nh8H/bH8Od8dqh1Z1sbhSc74/+gu+eDlfinnIdBYAZo8qX4p0Din5EjyKRdooVRy/0awyf5bMDDfq070Yzlwx/JLoOFnsnTsWaHaMSrkCEouEVBiIl/0oiIHP8UcPgz/47ibmx4RWN49JHcLshZ2gJ/BO/edvlJsKp1JyzGSdDcyzuvTGHr5d1jvgzxy3km+ozCO8yv1oogu/4UJk79ChzPabvKb+K7/VbU06CKegq/GfUsUWyNEsXWcKtsjRLF1nArtoZbiXqWqCwNzEQ5Bd7ssX1zc/uOzfYWDJs9195zQcOCnvZ5dw4r8OTQL3I8BcPunCd9MXe2IZSSvg7ZGVwSh+yMdRnJoUl3HCjNBq/CQdmlB+6YFErOWIdtjCRsY6xLT6Ffw0HgVfI1pst8RD0TqbCF/LPsHKtFtFqZNK+YppV8E2MwNtqpTn7OysrDZ0ypOJLKEkU8kQv0E5k/S78bO2voK8OXP/jUPzsbyzZu6LJ32aA54xKHr64+D4R1q0ERbHUVj95e3HlU4Nab92VUdOnXz6xvMNhWb755k93V9cPaA4xypjCbRBVMBh7odEbEfUCQQp2O2FhnfZMLPPlRkwvezme3Qo5taebYVhjJYMA5kadIREoXiWM+H53lMFmGkc7gEBglr6ke+QQ9+E5MZ1zhgNhkHi/XiSyjQjA9TUyPPhbcsT2GFEj7UGd90/6A3z4ofcCM0QUFObmWwQkThj9ZONiSm+MrGH3nkPRBdn9gP58NR+UVPDPq5tSQK3NfzzIuBdTsy3SFUm8e9UxBHhyFR4KxJCN5X50PVqDSDEwFGq2F6D5vwIwDnDg7S07n9xdIUYFInFMQKion5bKwCT445GCodM1Ctici7yz44OsfT2Tk+BRpLyVgNXFmA7GUhKBOSXCjFlK7K4SyD9oOguwTSXv27Unis/EVQqjdfHyFUOvZKB5Q3UCnbrbdDXT1TeBIUxMcyhOGb2nGUsGodQxJ8o20rIqzKqpRHWet56aT1vBwkWok5zrJ+RTUUpmirYYR7fUBaXki3nUiLctV0SPnOFVV0b+Hc7hW9J4VCtF25UwwAeddKXlYmGvPUa5tUfK5lLymrgi11ZpmtP53ZkqQp5CQbDEwGYIf2ad6q6DNYbqJiSkpbkS/Cnr6t8JPdrvbVR2LPrpCz47gE55U3gFO2CQZTwLIXrVw0eqnHa4TLsfTqxctXDXmDi36WzsTHFu1clC/vuFN/QatXHVTPxdgQArIA/oT7LzwthPwGvwIftnGVI0LH2JvGVfF7SBHXQ6EGhvgmtABkhXVgEct5Q4iKtzByJyF58mMbVYtg/xcDqkBAyeoI7IZdmTS2OR4bCGsbGoGfFMTWAYO3bjRxoAbiA+WUR+Frms0jopmHEc/9dPJ9CS9Gyca2wQONW1oRAplJ55+vHApZ66lVmgmJ43qSnuysfHTmqZXGl5togmhUlIobgXhso7IjC9gp63QaKw5gk9H0diapoYDLzVNbIy02boF9sMV7AHzLGqXk2UGt6pnpusU9PxJtndj47HP4lHC13BrG7lFLc1oqbZgu+0YGmclakm6YQRZ4yYOB7EUSYmOx1KTSLKEjjWBqoPHjh1MgW+CPpVVVUge61995plXWQs8XFVZWSVHYnH7Junkv1W0aPC2W5TMREVi5V7kyOD16+BdoHvp7bdfSrl0aeKMGUiaYrrhlNmiMdjUgM3GIevYBMhJi8gBdXt5QcfR15qmKU8cPPgEeKcpPKh/f9VwsGJgM+GGGRMnzkAjwnr1IdSXFH31avFtozj6KijRV1nF/r7oa8WYXqx/NO4b/ni0Vy27rE+fIaNGhfpPYN+lCHCLwt+uf6xCGS+L95kIDjT66hYACbhqXXZOtNuj586PGSyKv+JEX6uafjg+h2DQ9ANrnDgR9Y9GvxEsghuf2Y0ozeBwGQxVVQ6vlLP8iHasIPIr14wk9apsTkR5pXCkR1U4Uoq+Mu3Cr57IUY+Y8pFr9zrBc/AW74vb4xWRrF11aP0DtIokwmKNdJ4cn7J3Gk1o2nEgNo6xEz8OWyrFYVnLfSd7zy7aNXndPjscAw4mN+5dvMbxp60gEfSA37qGFNfllD249tCaje43lKpZSpWYK2iFaFV29X+73o5UbQVRUk8oySj1lZCex/WVjBZWi5ZErQW9GFWBJRJTj+yaRddY8qsP8J86daoJTIV7XLYrTxxqmlh5kV96qKHhEAzic/tvs73Iuf1sNL3zsJdO6jsoUVrCTiRKawzSI7Qq3yImStszanXJUSXCzHvrAdOuJ3GU9qldhgfAidFDhoxGb8RgA658Ki8an/wAh+77y6tvP//826/+BWGzAlk4WMPh2CyyXw16n1v0+VwOLF4uQ9CRKToEibHssv0aic+W0IMGJD5L9uu1FjYSoF3h69TVW5QxfphvZ/3p4+BM0z39B2ZaC7KHzb4NrMHbiuOnTdOEsjKHd++WumPTjqfRyjLbkZ1y86AJXdgCEBg3ZvjNeK5wdQU0V5mMP5Dq8Yoea5DOlc+SjuYNTxmeMUouh3q+ZF0XM2PKFYPxZu6NM/MMtZPHxszfp9e/spqOOXQrV7EDpImUcvO7kfUU127Tm0ROiukK7Wu3qWO6oM/p09j/JFdVPX0I/DsE/3cITkAtdkfrzWZkFY/FMd3+FWL/fmL/EdTNGjnSNwy7WSPS8dSM+H1u1m/5WR7MUqQeckd+Fglx4odysSmDppg4Wt0rnGnTB+XmDpqe5qwYNmeBsXxg3cBy44I5w1Rf7Do9foqxbBD9Akd0l/UfoqGO1jISz63Lzrdim9KWl11H4rnLqKulGdL/7sw0ZCAY9VMn1+XkWbH5iYHunEqqfFAadUbSkxjrOfjSRF+GtOaf9FPN/Lu8B3Uot2PvYUXj2Gn5v+Y8wHJg1I2ZQfwHBddsEsd1ynFcgcRxDSosY2xvOY5L7O91jdtkC5waTcQKxydpkO2MT9LosOWkswR5FmiRU8fKTh3Wv8BOw6jYRJ7xOfJbfJ/DGaiRj3hv62muW8u3ME/Vkg1jabEE9ZzA6YCOnEMQgWRu2x3lsuPuK6GtEqHKsn8IvJHGQQL8punQIbPcgfkQ3kAm0oJosYbQIjvg5rXAgk//IGzlCLBcV0YVAcZnWpzUI1Wfa7n2j8ZZUQdb4AFCGHy4Be/MU5qTeDa1cs226TajaIvYugXIcnO0s3el6K9s8yLKR6xeifbLFP9W04zWoF8iaxC2s/EaFBWD+SGyV0hOipxSVYAgsdtjsvcRqdLioHlyVi+OIwgmMaoutLK/GanYQupo5uZyeI31qGq2zFpmARcsy2ah3zDDsqxd7RZu89Z167aGC/HP6PMs5+KfZ8FZBQjLIrLDmItXf5M5OUlMZoRMkqapRlLK6sq149MeqjifFHjMKpGCH0j92tjNsPU/4M1/ntu27rGnm7//0/IVC2bP+MNccfpl1zeABR+BH/72zIqdLgsfOtjYHFp999K1oTm3j5sKT8DO5BIM5eR5AT55zmWmp+n0pkQd47GKHkS7nHYnz0uK+7GlpUrMBS9k+LY9ZAJoBHWR7drwT4Or5+SdLen70PODF4+ylM8fjOwia/mEGfnwemmPTdsn11Un3Pov1+4tt9UMzNb7zV2KBw4BmmMa7snHx8zslW4caAnkDeudmPxyeopSU5LwxU+MElFDK9t4ZmCgU/+A2H+UsWepgR+ROSJ9tJiZnu4ehVX9KEMwgw126Sp2wcpekE3e/8uIGlJxHHr9qq6XY2pKUC1+VM3Yc0CZJqQpG9DT2D6yhr9swF91EFtDKp+b3/qANT+7g+iapO6teTlSfG0M0k45aHa7qOJrqSSPMJWpTnWLqdqI4UvtE6DKJlSnE6qyCZV0wlR4/tnayu3VGx+btmvSXQnnXt/0ZNlTxYmemUtKgeHH/WtTqxvmLf0GFr+wfWj/BxZPXtLnNd2cOeOX2Yx/05p1/9y79dE0rV0z4cDylW/VyCcgicc9kok6QcziOJkg6K5GnRul/0rO/UkRMcQNncm999KShtc3UiZPHRJrVyvv/1dETNPc+vCvRcQQltOQLrtZisjgfRYB2f2Gdvss08BskAlmN8NLDniJBHwWt26QNSHxaDyEPlLFNfTZzdBzsNSPT2DY9gdcsXqOPdDaWNv+ECvW1Dr+zBySp1WDaI091gzkQ7o8hqDLjE/UJiQn2xm9mCq7K9KxhTinal04WEPPqmVlks5H/THY1L1bt+4NUyc3vWF0+NYvK7DZprue24v3yEaOHT2Z/TicUlfHftlyVti5b9+Y2xAWt6BxIZOByWYKAolJCWKSR0yScUlJT/dFDvjKmBR0jItMBwmf7ip81jSu+DWMJNJQrOjtBzPJipyEYxKCxyB6GIQRY5NVpnLjQ57sesRk37MrPvuJbXKkvXDfK+/Aiys2rr/n3k2u5hPsNuia/ad/H3vzzJFFc+6YN188S2IUUn925MHinZAEk5jA4OqIqEuHevGQ+yQJY/F6feqdZvY6eNeR9HjNX45c+mDe3Qv+KM5H/YKmULuOJY+LVJ9MQzokQc+LyE43J4pmbVDLBAWDeulSZxBhLajyuNSHDjht3W7DA2+99YBxN/a43pB8LRd2r5AUbfz5nOxwHVGcLeJt4d27B5Av0w2vn1ohuRNaP+1o8PZqpYRQZP3MzCanuHGZDrRi0U08pMq9aZzbxUSfgTgDW488dNe87FmPPVkGhhvgYwPmBkpv6zLh2c1j4fUPV96/fdHSzVtdVz586d0Ub+KYKV1nLexpY5FLw1m6+Lv3TDMl9L3zL2u/gfDIwfs27ahbf39d7LmG2HMG8rkB/BmfG0Cjk/dgOSUSzAYZjZwDa6f6Qc/65G3Y8LvwC3Yk/ELaiMU7uXHy9qWbutDn59pn/f7/3fX+KoWdlwK/AhkJ4S0J6l3vPuDNlmPgTdgnzk49xnc7+VxJPitUA2+Qz7FZy1LWOfo8geA/k45XOr2Kz4vwokYDdHpRpwsqx1Nk/J34GLD0nsl90xrkitH7G5xwFN6J3jtCodhMaDXNwKMKzkp+s+o2NNy/neO1IlqZyIVoeuVCNHwenJ5Exl37AL4VDbwCh3BrwpvAAVjB1h1mE1kNQqEl/PXh2Bzp2LwTnC9M85YRTrvp55j84ZFS5iPOynJYDQbeCHQiskYxYnKqp3zaDHvY5IpFmxf96EkvWbSDn+CExvONnzXC8aBPD/AV2yv8NjxbxG1vndMDdCKfknrAt5S+8FkotEpoXThPzpaQYOQ4nLguZ1jiqH+RXdrR8cs3J2vdfrevpCf94HXPvgq/x9x041M4rxlfmnzlqL0X+ImtD1dBodB19OgY8D9wGdpgUtVRNPto3HLeAs6QyAu4zQK+e1pvYnlWb8SXY8t5DAV+ZPBJ93KQdZbzcfgUcw76/TPoiQSq5+n+cEd/WDaxaR64sh5krMeCBSbC/bwNn1w+FS5jG5Gckj5HSjkZeQEvjlhoGDPeKDdbRTNOOVYOKfnlm0CUm7fRm5zjno2E40tyvjCl5QXUIz6bVBWC40K0M7mfbKkfRFe652QWWJZ2o4sMzK/0Etl9Ir2MbQSBxkZ4PPwF6QJnM91YgDOZonvRSb3gVQWLD+1Ar2ToFkn1f3y0ppYb6XU6ipqvv2Z3fPttyzXUPMI8FGq5LA8AzY2iWYyIC1MDDmlCbESzmFS3lav0Cm5VKufGHoNVoB7UtzyOZyR85syZiE7Jxn20bo/cnk3GsYPcSEjiSTrAI43AcUazaFRyBHGWpnwPJD4xCAiV2Afg35uPOt5shn9rPYC6YgG3iaRfLYBMNJ0oj6cy3QPJyaliMhukvG62UW7HyV8ysxNeJ4YInpcSb4TfSym/4xF6KRULL8HreKCXm+CBujNnjoRvR1gcBY7e4EeJ8d3g6Cs3g+8J5ydPfEXCSp1Hy6b9Sh6tchMl2ykKSnUTJa6kABdiTcwk49ogJi+XJHKMDqlPx3QyqKSTJDYu2839WEeJ38Vq8V3SJIqbxyHb2V7XuOmdNYGTm9cDX0ZCY0JGy02P3YYYjzFv+BDoas/CJffDQT3G9IKDwf7sfoVgSV6hDpbL99yvQ34K4hRsZZjwsSdD0CAEhWQ5Rm9T3WYTdbe9Fxd7k6voROrM/SjfV7QNHjQlxa80R2oaxd5dU4d8Juynu5lOTG7AY0sWbcag3pCVKWZl2TiPyLGk5l6F5EiQElUxnjqNLzuxg+6PdtrrFF+9MbjB5Lp8+YrissNizT3EXX/caeFfe6axedbU8BrhEHXVFc8dz1U2wnABP5LxYMvT4hQtFrvHErQLQb1WVQkMYNeNRU5MaRrr8Gbb/TYNvjA+TaPx9rpj9NJpq8bkacD+pvAGjQYWz/ju/g9A/okH+/510OP/gl803slxrYVTV1+YFrG86pAf0AXpIrdOm5gnJjJ21LPNAoKML3r/RMrSoEV0pDvbvVq5Nh11HaPsr0lbPlz03N5N937x7+aGWfc+s7B6cs3D781bfPbBxVsfWTb/ga2uu/657uk39J5u62ftee6Peyv7Duw1NL1TzWt1D3646MgzDyzd/uTqNXWYLvsRnkmIi9JwFpWGdzhxFpXeImKyJERFgWiExV6cU5JdgiSToOd2abT4Xjs5ghFE9n4RvARCIHl5/40vXwNPJWTAJdeW7Q2UVr7nAl1OdXYNPgHYXi+WLqu1vbh1Ra79NU8SwuIwzOB7kf0RXNHYiFkZGcoeUVBfFIKphTNC8+glaEyJDeAiZ26eITEUfKt927TGYTchS/gcGwy/zY2ED8NX3nvtgcdhRkOvBUVlwNIK3gOB5KNHv4ZrXnv6r48/AP9HPGHEG7QCdmrAbsBcYY1TxPn31sBuWcWvkG/WkOJs5JwxjrOxvx5Ku9KMg2nNV5Ys1YPr+qVLli7RQ51+iQtMBCvRC62scCV67edbP/juuw9ajp39/nucabGKxPJwPFWq/o7wNsav/i4VXW99bjdsYpkR945elDBqMy489+Xh8KIVQVJnXcqw2IAoYqG5daIOeS4GM0dj3iZlr6q7t1w5/4FL9XgBshJAfZPHOmYoeOQx+CqY9V8I3+GzW9fPa5wIwnfD2eEPwRpI9vNvwtVO0ZxjzvOkpyYnAY3BYxc9xqBBIxpAZD9KCs/myccqijxeIBU1xUqD03q03E3gxcTkm3slZyX4S1fu6gzY5Fv7kg+r6rq8mJSef4FPGzdthO6oqWZ76zLyx8Kd7BLd6mD4fhoHKCa61ItjIXrOKYhuu9MYlHSqEWilmqHS0XQ5dy62HBz2kJ27VPXgOh/eU+BEqkfgw4vmL9+4hx3dugEXIrtwIYwrAjACqU6F6ZwYsBiRrRLE06dVxo59GB/Xjc0r9Ti8Tnoj9p/ybp4/cenOvf7pJpD5OVwJ1q37d23mX8vhL41wjVS1ajOSp0JE2074/rXMLDHTihrGe1kexo4DWgy+60xmkKKIUsbyLWugUiJcWbzb5tNqebfLR0RMI0W32Fmw59HmkwdWroRN3IZP4Vh2nGU/DIDe05C4vTXitmnDbnKBsbuPZTisj21asDrBffSo9b/w5xCf8u0BLHc3N6SO71VUFie7ZyL6jO+LICe87AZc6lfweKJzcahV7JNsq6jahnj7m63nbW93H2NJdSbk9Ov+0OobOFMn/PGYITx/VKvZ/SxbSDIl5Wq1FiYB31yvd4tmvTHIW3GRXalGLL2XCJ9AyIgUhyXnDHzI6Kr/+Txo+vr9mlqDCzBL1wHTVdRipy+uh09FysI+uZWUhaU5LNJNhmhVQHrObnaJNhwTSBK10XqOVgYglM4jJ2JiLmX002Klr0ybMWfhhPM/Rd3LuGvLxFWb65HGS5lUeifX7nJG9vFNq16RqrQfJrGRVJxHphMSYsIikrVQ7PDj8pFxlqBbP/7hh4/ZKXB1/zt61/xzw7y77543fxkN+4eBO5RgEPfe/tC5paFjB/c+99zeg8cYSVN1I/kNpE+qqszRfVJd5Y7VVtxBOFalr86EQrBYUliA0ZCIPM7dQO06dAK5ZCRyZ56fcDanxKedUmTLxq6Ec0BRv0VP7L4XHD/e5AKHQGBURWj543Dz5cvsxvAieAvS4ePgUH4ikiZ64jUH2TfkxKsgarRBeuwVec1KvTxq+QMnPu/K+Tl83tXptOXZewLkLArgey+8GRzyNHnAIXiz99S334Zrv/0WDgX1ncF1cL0zqIdVnaEO6jrDKu4EuLlbmO0GboZ/7cbCbpiC5QiXanJnRE7Am25JA3YLb0hyi0nWoE0gmlMbUZsViHcBp9KbTqRBnGrdyY0DO/dkT+xPdOWah0uDQHMZVu3OmXwT+Zd1O8tnX4eT2dNgz5RRSGku2gw/Zj1hH/zj1JHo4z3bgSn8C9lrG8oPRhTC58wceiZo4YUgdZ+NiuakayimC/GbEWkkv9kJfrLC2Sfetx63vn8CzrYiYvylK7jCOsLfw7e6a4pvvNsd9CafTF3heNwbmu1eaLZ92O62WBiPB3WHrBYxOVK0Ezt4cSKayh/KnbHT7l5Bw5n4R9Oq5bPn2HX2oBLMnDQXXIGmuZPGjsSf9z6398UX92IPYZWc58wGSIaf5lOye4UmOFLtapWc50xhNGfeoF4EBorkikyNaUl7hmFsAT3HArcChytEauRKv+xI2iOtJ+FxqHokMKRHqfInS3vEQJEeMdRQVUtaj9xjkk7do5LLzQ5W9RhdGYzMBYGpVGOV6VFhNVLZfyijMLQifZpR1Q6xQwlMHwpDc+LT9VG3chTTPF+2H4Vpd58ItuUW8nci+fDgSAO2XISg26DlAM8zeBW3VkcyJRztrBen4prlqayY0C+ZyU0OzzH4lsqQmQv/1vnWPvAm8Ki/IuUyXIRtvQWSza9lrMgnRH6Gx8bwJuK861SmdHnEe8+RvXhVrRm2CqaAL8GX6KcF/gh/BB585VLF+PGKM39E9uLBqvEV+N6lCiwVB6TqEgYkFU4NL2LtyokCH9ThpcUkmS80muSza0pycILIATADX+jXBPoc5fkFJxa3dDuKqbgCtTWU+HOpaF00C6LBrAk6AI5b04ak6jX+kmympFi5otDuYjRosTgIhoFB/4e6Nw+MqsgWxm9V3d6y9po9IZ3O0pCwJYQY1jbsEBbZjICACJi+IEJAWVWEsEUWRYgMIIOAgMggKqJGjAiKeQwyChn0+RjGlXGUQccVk76Vr07de7tvZ0Hn/X7fHx/hdjq3qk6dOnXqnFPbOd/fdrRv1QD6KDpJv6X/xNM/OY7WX/hx8oh1dy+iYz+i819J4zU9yDl2t+AVMnzOhBSXFOPJiBWFxBQD9+EdHXRnoC3St+a3QznGHppMihjPeWVQYu8/3L/90Md16QlfX7jvntLnSqsmfb/1VP2+yideot84k+LetGUvm7toxYr0J++9/a7S0nXlU575w/I3PK6kN7bXQghnYXDQr04q97IgCSQy0hQVVWESlbM/nZU7ao4i8KUEbMQvqA0m754/gD48u3r1WdSHkMbAi2RXYNpRegr10c6zDWRQU2B/MSY+SnLGi/GiAOfrRF2blaNFQS/SBYroYtN0k8fBtCNRWyzi0Ze/v7Ri0bon6KU19891YiqfdfZc0PPKZRpw/s+79y3d8ShKL8Ff1NC9CbbrV79oUOML9zJsZtKaz/pSY5KkCCZGTWYJGubUYaD6blBv9cSLre2OWLH0HQ2gp9ABp7wadmZqzn5/5f6HVz24fD0c6zN0QU+ig67aZPnz+xZfvfBF4NUdG5aueqySXlNP467QPGYQwYAlA8MgSh2h4A2Un+RG6E10QP7ovGinCeJ5eg5937BAN94ShSyhq5DpizM6HSYxKU9KEqLTJcaxQrauLbnB3fjQHFu3/qCPZOEI2+r4h/zMH1Y/9s+L9V9tWrVtn/yPOYsWzbl38eJ7H9mw4RH2OD88venVdrFpex587o03nlu2p11s+iubTn9Ipt0zsXzu3PKJ98jjGZutXr1o7jJO+waOs0r7eJOTWZsmvjtkqAgO1NBJrvicTJvHqDrYLcgXbC6rQBRGAOxuOPESheY//P07JNK7hy2vol8tWrHOWJuMUxWC089pYxcq0dvxC49VIieQP1xawU2hNJ/dGeGIFAUxWhJt3Hhy6E8xaIKKR9FIR2yekIPiNFElx8SiT27dDWePUUwkzekXFFX4/Yem4sGnGk/ghHkT5df/2NSEzE3XyBK8AJvwakEI1LM34xk6k/Bs9mYNe3OFvend1EQm4AfZm7Xszd/Ym1FN35CReD57wyZsgYvsDdOWZBqW2JsqtdQoBlnCU9ibR9U8/dmbubzUevXNNFZqJS+1QS0FeWbhCvZmY7DUd6wUvNnE3lz4fxVnkkCWwJ4M4AwYkwwyybCR/b2G/92b/T2Bp/Mbn2gUyz+S/833T5CPpU+D/RHAlacnEon//Sj/uz/7ey7Pv57/PY3l5/tQgKWaPsvwR/b3RvXvNDX/Jti90/D733hgK9l4+PDGDc89t6Hn4ME9ew8eTBJe2rL5+cNbt7y0d+KQwePHDx4CJzm0FjONyHSxmdmNBPlFphMNRqydGi7gN4xtpsIikN5o/Lu1tTv3kowNqG/BrkLq3sCgqHRiI5bNLZBNkAw2f6RBiiTBuQUqzAQlGNRCJqYD0XjUfubQUSV5q0fev+FHFEMynipfdmenKrfn3jt2roxeD/ipFBcyYU6R1i46yiRIUSbwhGeP9kOUF6Kteyk3ppAxGEtBVX66SjU5hjvcOie3fbvbClY/7Iu4a/zcu0a48uf1XbpqdL9hE/9AElFM9GZjbN9uC0yehK6pW60xg/p1GxaTEFna587pgJPa64pnocgoSTBHSkQ0mlU/SvnFihUPGq9A0XguTyHy4eH7ilbtHDBgJ1kvov+hf0IL6Pr1kqS0kvMNxAL2uaJJhFGQIox+J5vYO/0xNikGhzbCi5U+L3DyJqqazqTZRRMefvTN0nFTb+m03II+oJ8YOnWZt2wjSZw5KX9gvxT0wPrymDvHlc9nnKVypuDk+/4OlyAluvyxiVKkOdYPSo6oa3oaj4FGYPNMl065QfUuJ75r7dbPG817N5tjJ5VMuWfDmunTy0ni8gdcbx6zbBAnTevQadodM+auGDF0+DBoqToClNtDIhb8oM+U5kHLHIxUNjfBHde+shO7j5IM9PedKEeuFog2VmDNQ8iBtYF0QcpM99uNCZlSSoI/KkWKUnlBWadRRkaRXoupSkxB3KE14PYVj0t33XHX2iVL17Jf0uMr+/UrKRk7dgxJvKus3+jIyNLeQ0aNGtK7NDJydL+yu9Djvr59ffTLsbfdNpbTMU1PRzaAzMhvcJmBnDGJUgzRlkhy1dUKnaKCI15BdNDmEA1XrNvyeWF5+XSStsFwxxSFgoyiJ15EU4YPGzEULKTJKF+cJMLMO+ZlhAXYPVCUoSMHxddMInsmofy1eNsK0GKjm5rEcj7GY4QMoafP40yS3E6/NdYtRUXGREdGG2PtFWFj3xoc+4qHKu3ktkMnB1g9rQ3q0Vw80GmAAjU3H+BBoUGNgF2guPmIZ9gye2eSim2q0NeXZYt3SY6keCk2OUnDN/n34JufW9wS4/BBqUdWrg8N0BCecoDjeSR8xBJhMscS5JJXKBIG+Drkde0sdezWVWpf2E3KykkotFc0l1ZOJq5cCTYNVUViKXv4Cq6/S3a10grU4ybijP7YvHE3lW80nrd3e3h7DYyHromL1V7JFjoJ3aHNuclSTq7f5S7IkToX+GM7B9nJ8Zvdo43SZv1Dfueg1XfcL22N3xbclv2bA5q1tJS3VOlZH5vfjBLG+AoGFEq3DvB37jn8VmnIcH/7IZI3JzsrJyuhveN3drOtWbt/V1+T/4AiKPsmTHDjpnS6OUNE/07SaZRbz3ezC4XewgBhuK9Ljw5S9x7+zC4l3aU+Jf60PlJqSnJSSlJMmqMiWmyh6Kw6RdeSZm3qvf+EddD41nQk/ezmJGqmQWns76bKZJUqcGLBI+QKBUJvX5Y3Qcr0+u1pXTKlvC7+qDwpMsJijjAbohwVBJu4UlRI0QoVVB35H7W5vaJP6Tc3HzCqtv3dwwWht5uu4WvIydoW9TIEzOYTIm0OqS3WqPGwnVoEbFZuMy3FZwXKJGnES3CRQNDCH6PNo75axBJflEeABczhhyKlRtklRiLGNUZTaxYwaa1aLdA5sWp/Bi4HMcEcE6WGWLBJYqKkmCD8zs3g85MdGlwaYJiGgDb24jg3NQndWY8vQU6cg7fRCtYI9hs8xDCrfpsQbJOB2TSsRtamCOIXIyTRUYGswTYRJSZUsN6fje9HTNaiuteR84F8mqlrw9t0Y7ANsL8Z5Ye+iPELISrlqwcIGEziKHDgMpUyucaTEeItGpEaxgNsNgeH89BxTArGM57N9sU7icEuxqYJ/oQ0KcFRERlrlqJiQzKOR31Ghd2KQotNmYpFYHS5whry47490ydNPu6rGojIk6c/vLI81KqpZ8pnrBs2ZvKITXcveuHpv20ac/9oXSMZTttpJb9TAOMox5eQHpUqxSYl2OIMTrfApkVO3mi1xfk2ZTlM324Hj9LZvbCwgCOmbYmJeLxKi2RA6O19e2ZM5BhSWUeY0hd3X9nIUGJYTq9SsWQztrdxPr7G5rQm6Fs8kHF2F7SLLCfXWU9EvGRm5qCgMhFg0F1ztYjLRq8eNWr1aP6Jdmnf4BOsuzkIi33EbXxVzYGiYnBkBDEbRAvTrYLfuJrPMjjJcxxZRQbGLFnxBoeJoAX7Zbp3KCpN+igJlQ6le+X9nyG8HonTz21BEq3ecm46DaxHxYxHj7PZcQPjwRz8FP2ecaUJPwWXohmVF6kresnMzi7ypSbBtmKKg8Sa2kVKdmM7wn6EGAuuSAieSlLu9ymxtwv4vm9BG/7lwcM/ePOnzTzJh7zxd1T97Ld0Gq/5zQf6TDemi6XG97n04HFOtGOY08lXxvSjRyFPeVOJONU4lOWJPAabT2uFvnAhAxWgcpJZH7hcazLfuBGWL+plnk+VYCwjWR+4XE8y1ZwooukWctU4Vokgb4uVTDa/ySKZqoJnCJT7vTrf+eQ4fZ3+Idw7vrMO/R29HPJ+v4c+dAzwPcug79egKzHjIEp8EHp8ESxtWQVwTqJUdJbBRIg2MZhd0EA0k26nNXXH0Ao0GZWhZcdoDr2NDqNuhrnQ1IF8YZzAtLLH58zKjoyQIiNdQmfJJfhdKZKrqtkJFj5a+EWNQsUNijJ+Q7urIRMldDWH9Nj7Er5tdvuce0fjl/b2HOFO8NyaMmiY8X6//37jsEEpt3oS3CMunX5+7L6yW/om7srwdZq0e+yzr0RaDhkME0bfvuv2u+/FGXjelIm7xky82ygeskQCVc4zzF/UMLdZc/Ok3Fy3YJLcgt/NZjEtMQ8tfocWMZuvgPO7N64Mo9oUtKjHyNawHQktGjM7p/3s2/BLlxiiovHuiWN2TZwyjyF6790M5dETDAaG6CvPjt09qZMvY1di31vK9o19/jTMdBcwzK8apyneiQSDBLwlSmhdkFu0k5sLcAUdjw5dMt1S29C/lnNCB9IrWFKJ8i5KhmDJ+ELuZcN2Fu2i03DFpVrDidobdUCtv7Gpyd+4rREHHpGwQQydzFUOKSK4J+hC+Hv5G+z6Bj7wG3b8htzPLvcDCBcZhIsaBCNiEIjJrvoEsymHTBQIF8Gx2zfwEQLA5Mp0XC6WkgxsJF5+gjj4N36Bn1wYyP6WSEZwtK1URhuMXXCLUV7Ddzy8LNfa1nN5xak8F4Ot5mKwj3HY05tGiaX8/LYy4s3KiFfEwlEmFQAfeTTkwSaSKwiNXzAJvpOWklKBMgn+BntTwfLU0lIxm9kmOezNx40VTDa+0ZTBU+rwx9zfbQ4+0ZTBpeYJ4WPezlqWks1T3oA3ShnACu3HH5Px/Cx51Mtsoo6tSlsQYrbOfhSzpxp/zA0HhHaynKWt5HS4WVo1SqLfq1kZ1utZ3l4s7yD8hviRIJxkUxU47ygMFXuRj/juWgdfIrIYY6INEdgcaY6MIqJkjuX+APyEycvc/AK4Y8O5Iov1qcvgMhjU32IvmoC+ovUoT76hfRuKlm9Ey69+ZP/oavAbq3EBq3G6WqPXlxDFGNUUG4FJZIzRbIDDvmbGvdEGvjgR3KPKKoQfxkTqb7wM5bE6vgpYld9DeTV0+Ua6XPsG/XtNGEr287pSfFZkNGA4jcvbw1gKmpQb1hqyXx6Ia2gHdEnB/fJn9s9AijMob2tQTJgYRUNojOmgaDhGoEu0A64ZCsUvAyaM+kkkilTz3n676Rbe228L53hvf0ai8Fm1D4EHtT5kOhr97PzKyZKXy8tZXwXKcTnZxnncJFhfEVjtyLBS0agKp8MJj0Uk/cb7rAzjeBgZ5JdXdaXAA0o0slgMgpmfsOajRI30EgKhgvkxnUShoSRdAcWAoV9eFeaSk4YEwcHPa9gki9Vvd1jMyhqWxSxZVqonrNS4c0WFfQg/8VTYieQw0hgPXFzS1/HT7Igtzn7LPthDauZ+N2hcng3lncjDMbnjh3wnf72E0SRQTs+SKC1OhcEkGVZVwFGllUHbVA19ivs3ZBou17Hcu2rI7htmXvb/O45L+9obUgxfaDheHTqhU3MccZAWJmb3dPKlGhISJdGW4BdYFchq8ScDoyQZIf4przC+ODcYGruoEMEP4+ZmVcPhGFJzo56T6cYVU0aQTGiSHU2AquWvvus/tpNDQafD7Qo6Squ3MWwssM5pNEjE6LcwgWDxm8xBykF7ocVZEIaO1e5CZFtgXmAKeYo8IT+Aq+Zi4SAWvqP77XSf1sJtvIU2aCGJiZbESDZFsJklU4TNj4zWWAM2gmnQooV8RLEfg76qgaQGqgmcC6xs+MCQSx5RKk1YguOUSr9DP59AP6sIsDbhTPIVuaCcX7ULUpzdb4iWDJaIOG7nWNULSeqcrhNm81bgXaay0zC/RFsAk7r3ey5ctLDnzMaPyYKSC8XzK+YXd+l2djPO7DWq16S0mm0lZSV33Z4/8Lk3YIT56Fl8gvEdEYohJl77DvyeaqJYICWK/sR0KbGqAqaeq/S3zPj6OuPFrP+VDYR+rAtkXPhKM4O+unDnY+6EvvPzFz2kGBYPLcqf3zeh24P0rOnGDfPUz84NWDNYNYaGVQ5450NuDC2ZM2jFINUYGrqi/8KVijFEAiXMLtjGbCGIAjdGKPMVDB04sEeXgoIeRdKQQYN6opKSnn2kUQmJI8WePdhP93597RX53a0V5lipvdnfPkNqXxU6PMetdi6PFYEREhwFDrdTO23+e4yp1sJ4aeG7WNeBndU9Tf4Xemlv22YWwiNbmQygrvApd8SeNPkty+gZmV7/bai8YEa350/f1Bor8ndvO+aWtzh1WkJPxh/ybMYfGzl/RMJNEtEigRQ1g6UVxhcqR2j22pm6hitklLwEr1a6cY4p5WhDfzbnIIG+vIemgb9SIUcY5st1xMbmREkZcTkoLS2L2avxWTnsJ7pdsr3CFm2tIEYpgkgRpqCZHz6fgv7QPGQ5FJuPP60RPBQj7U55IzpEx+MK9PdWaCr/Gb2YRrvgaepESz4F5qN8qm2CsZH0Ee7CtE6Ztr4QJfBQVEZ/dEiG6yb5WUzjyLO1ef0esRR30abx3bnlJu9uuoanIifTn9vAWRjTn9uaFoAd9euPTdfQJCXlRheWAjlGKTnoXHAR9Ms1NIdsE1P46kmy4hlWjLNKEXFxKDVFSkWgdSsBLet59TYaLE2wftNh6NZ9N7A0GmVY/+NXKsb4be0LM8bItJoaej5sHYn9PsWaQW54hUsMk2Owl8Xw6OxLMSc5pZikJEEkEmZ2EEPEBBupSMJrQhJbw0kTqllt4EW2NW4UKwL7yKSfMrUVrIPql0uo6iyqukx/ttOfZzdHjtF3EZvdZxt2c+od49T7Y5MVLOPARzrqwf0pa4QoRSDQa80Ix/qUNKOagVvSgV/rta79ngTC6cPoovWueAurfbvau9v1vaukqL27Xe3d7bx3jb9cE3Yz/K7x9T7o3VyhCM5nZ+flS+kpeX7o4UTBHiUZE+1+iJBdqd09YEirZ4Jv0s/AB4Y20m8sb63/Gxa0xhnk7eZEBzJE1dS04BTGsYGPgm2K5ZyS5Yt3JklWpx/IHm0U+Ehi40lpC5C/+YhqDffQCNsoTm3cLU4N9ksIuyoFq/0hbAjH5hTHBnAp9GXExtgdDJ8oJyDhiJbsDonhZDP6mbllt0r2NZoc1O2y65f0NPOnVdxqSLfAOXHyr4da4CbbL6MIO4q4TB84S316DD8J0gsw7OpLZ+jEMnRipRirpGDqYORySDY7XD7Qja2WsgipoywMuwUqMoarjXvEyYFzpNuvl1vBTzfI6HXd6FpLS/EizsU7Gn8GrsU71gelmrKmpvL9Uwrf36hjKWuVlF9EzvdPNU7nJbftBCtXbNpJAobvuJXrijYZJRtmsxosWYkpysSsPs4ZBdbz2slpg4PpAf4UgJNm/siBr+U04nsq4BF7fnP2G/xD4PmnyPXGY19PRxdqUI8aVE/zauiZGn5G+pexao3JcOIgMtofEcnUkFIpYfWbuGA/w5jxjBozstBdpD5KnSb1IY3ntjdcN9w3ryHd2Hver6NNkTvO7hAvNrw/z/B0A55nvO/Xbtuno/yaT9gP6kbP8S/0PKNK4DKnCkipPwZ8GjVafb+dvy9hUm228r5xvyrVxoNOCMSxlG18tTpVcAsdGVe77QbiFM1ewZ/hlTIcFeluKT01NUFKtYatXfdVRtvNF7BR9+5F6g1vPRfNab6UjfbEZ5hIZcBIGhp63WxZGx1pPzO3hqaz0Tk+xFeNAYRFUdzG2re3cSNv994zrN2/lMJ7w9tCNvwNqT9f4a3f2zgB5UE5poeuMz0ULEc67hLgfVOJmG0cqoN34AyMr/KmW8gF41jBK+Tx+KIdPelSvMcfnyjFV1V0yc21OKxWS5TUtUMHcw5CZoNkMVvMItgrgmhX6GZvPboov3HSWuRXu1CgWxZlX4hishi6FTHuzaZ7WovgOqcPKqW6hdMuAfpyXzo2jS7mtguJNtM/pqHlllYisMagjNDqKspAMYo5c2TiGLrtDqDBWHVFNGhL9+wmJfX0J7mlpKqKEQMGmEt4y4cPHKhSY3CH3DEiEMISTom27OibEOP3zSWUPYtClU75wIPEzaZFdGMrtMLDUZtrrj2ZeS0vDFItN3PGaIv8TBpeKt7m97akXXd/0U1XZU8/321GgULOh1KLvXRbYc8Ehas6kFNB23ekr1NykhSX7IcbVesqPDl+j4UZw4yQmenp5jSMfy9b5d6EkKH776r9a3O3zkn7lCVWeSNN1+iAqtEHdHjL5uM+sAqL+4TsXyZ5ylkDMV/veabxO8VeEeKEY5DCJA/mkl1JMeKn4hRqXCOnmETKF7oLJcJU3y0pnqwk0ds73V/UWypyVMR7pXhbRcfu3S25DoUunQoKzF1/P12CtOGiqzXyaEe1QIR5QqKNzar5rIFTTCfPWqXcS5H//HPdZb4pJk2d/wi9H9JUCoqpmoxrQcTjZw7vvPqYslvm3zRo+ANzKvm0AkgaqAjqepWy28Io+wxfURODKclBjmqfEhfn8VhSVYJlxcczVspMSvo9RAsnHPdOcZM4yFzWA31gbtAaXZQ/0Ah8o6GAEwO/gm+0pIMymSILjh6lu9hU6xrsTGHGG6PISdYy0FX9fJmu9PQIp9XKNHBCu3amRISY/o0wRZh4a5JFwc8blFvQBhv8RkRn3g66pc34zeK9DZE3j9Z8lMdmZn3VhekTkeuTA411mn5ivM7ek+18B83EZ9I2MCaMRpNkrOQT6bVBu1bZVkOgTdkT6MI34vCRCWRjY/4EcQHfaBPTFaNVEAy/LGeQtwUhxyqrgLHMQI2JsPtNrBpjhL6K4IKVVktBoVIT/P5leai2XaL150pWIfsdrFOple8/8BZdZ/VGwl1XgiMi2dwoEknQrjUVosVkkExrdTM6bhPzZUDkgWV9Vxd8IjBGfqee1bhNnHyJG7rzG5HJTA/TbmeBltNYDedUWjZwvj/QNBtsxV8+ZimHlZSmUm4rHvilQsnROAfWmHl08G3GT5QzlGRVhRFmbiqPQBQU7rHD9curhvV1hvVHjxo/+TX9KF9LhXJ8f0RZm7arO52MOIFyUxdlhwS9TaxwlkDZ0SaZ7I16QgIzO1eAE1K76UlxjvEck4BJfGx2YPZWamRUTqJbSktMFFJRgmQgCFd4hQzJNdWh7BODp4fc85yJYS9AjTfCMI3TOziAuyHg4SmrW46tu4F/yWbfuu9G06peefeFvReufnK+W9X27aj74cP0LPu9feOKRzYZ1iMffSP21V0rdtiiSM2BmnP0JPKJ5+nDpzdk0a1Z/6Kdr85eYqCd0WLYJZnK8H+Q4Z8gpAm5vvjo2FhjCniUNxlJhRUlS/HNYstoXsqRLZPZL1kcZ6a7c2z5/JKgyQZROo0YL5GvogSEq1a903nLmM0REY9v6HTwVZqP+lcfYfgU3Iq3oN7ogXYon140Thr1xDJrY22voyWY1ot2WjRGzMmgP8CtU/qiOMRQISQK6YBdjNVqSpOiIyLMJrhJmSolMOwiW8UuGxd2sxeF0OvO7QiGnjMu3mY04tGXr//rb1Wr3sjdO+SRIY8NSBi2azhdu3R+xTL6IuqTgBJ+/BYlx6E+9O3IuVOWLkyWi1BMZE1sNKZnyOytx1PwG66jjHem0uOMeseELGZnFwjDfV7s8aSjjAzBnc5sx/R4Kd1S4YyL6xqVLTlstiirxRJrnmriZ3Pzk87lB6UXv6DMPqzv5QclGcpxZEMEH0e8idE23hFPeEuIdhvTQ1iGHMSs7Lh4RzZyxjuMRrRu7eB//vuTbmvzYmKLu+Wv7bawcEtS5ktWK4QuPBkbW7S2cHAflOBOf+GWISeyaJf+j02fS48noG0voBdQNrq3AGUnBEwoOYF+3HnCEzlpASOCMINnE1BeVKL4X2LA3t4pZlvkrz9YSfJ7fQ+x84SVYrn4DfgfF3r4PPHJTmy0WqLNkYlsnhmXKPhTEqWMFH9khmSKjTVHxvgjhc5qe3P5b2XXrSinCM6j5BTFgyeLongT6Op4Uw5ckS/SHeU/seCV0mHHHz5+14NLprz88IvDR7y04M0pSx+868qkuXMnsWdl5ckZj22aWbvs/a6dzy97febmzTPfqPyoc9cN86dMmQ8PjPhHGM9nMZ5PZzh3ZFhne+LsCVJeqre92ZKUmOGOyopCLrtNirWTig7IJLUDAWHR7uvm5xZwE5cHY+erwvG2HOUGfIjdwGclGwiE8RrDGjH+K+yG06+/kHTPqUnDH9/x9stV814et/7huYW79tF1O2x7hyLc7mk2MPLQ8LN5XQl6z1NSU3XwXQfqQi+Yx43dWOGgxYlDazbTlzrR98T9ZrQifeeA2+nOGPqgZ9vDKidWGC7DqXnWqiJfRnaO5Mz2OyMqbJFRkj0y0hgrVBjdiqeXFClO5+lFWYRT9uFDcSJg76aAh1AzhXt9gZUwbFQ9v9DtaGa9JNXaE3TeX9aTaSEHMGjykdmzjzT2CfcB03iDCVgkjFTjdbaH0zXxlgRTGmpnQu0t7CcqJ0PKsVRYoxxSrDJgFK/tMMMoLtbt7BUA4zBl310oCPMmzwgfH4zp6UknIxdivLDSi2yXH6vvetC7dPCiA+noEk1CBH1BOw9BBWtXdNp/jCaNQt9UeXM9GVUNKHZ++cPDxx3ZW5Wa1jWvir7GxgJqgt3XPswoKzL8kUn8jr7kKHOMFGkmFYkpbMotMRvfiSSnEOcXuE4p5sucxYoudtuC591D7lpgX1L9wabIv/7z6vsL1hev6n2/f/6yebgLXYcc9F9oIc794v1LXw8t2XTnmqUVy8U1Nbtr9vDzASOoR5zDaAhefeJio+xSgsUouSwWIQbIFvQSAD6cC9QNVcW7OPSw1Z3PSZZu486SnUxElkXMfmA2XPJEP1dIcX2ndqRfoBfpiKlnd1PPiVjbzr3YXHUIZztfNTMz+VgVTXjj60UOhkea6rXLBmt6SuTIKIskRkngucuqc3UVvFWq8znOf3avWEEOyym4i/w+k7yn/lElJtfSlNrXq/4hcA4/KT7ENW2KkCF09iUlutIkW4Zks8Qhl6UiKdoSK0WZpxotinQFjcDqes9ezP0EKPpKN0LdNmNQWyEbm2ba8Fz5O+QMVK09m7/1jmo00/vWg7QX6lG9D73dZWwmG5z5PfEO1AstVLXWyC2PRMl/l6dF54pcbeUNE72Z9Ed6J90ZZUb87NpAxt8Sn/n09LVLNCSJqWkCbLHnGtjosOdmSrmWihh7JJc0eg4HT2rFqocrvnsNa03Nd5u4ZzeV08MnykWFA5FUJ5/H73jn3TPs2VHrJ99YVfc/W3+m6+twL/nWgauXTPl0btLk7x+68uPIkei9LYe39Bo0eebgWzeOv3PDI8vucrIXPQeOKsvvdDar/aMPF1UkOdWYBEdZ/yYxOzAuzpQoOUQkWU2CKApRrK9doSNwbIAWKKf4lVihIV9W4JjPg7gbq92qI6uVy9AUWoM6fE//4Xt8FO5ahT/QnFn9ha5ZVyX/Bad68kzgw0r1g2dMZ1K7qy8pKzkmXfKkpCQkCLaIqQ5LDKnI07MZaFgwsGzqObxCdw6zCpSYeKBleGg8mA5ac8C7uifDxH4ZbXAeyu0aj3LQugM1h2d7shMTZh86XrdtdkJitmf2rkUfb0YTapLaIes3KAKN6bGjUsQrNufRry8fPowsE+XvcCExMwYOLKOHDtH1NQzrexnWExkXdBCKfWkuW4KUGpUW6TFmRhoNUexHcNoIsw91mDeTcsrNaWbBMGJ2K4RhE75mwgePEz6NIPkqCwfa973yyitX3gZB12H5sNvvRWvYPHUNnWEfVIi/qxm2fmCVxVJedeDUBSbgho66t3x/VbnFUjVo/VAuURZxv3LrmX5kowzuWBvZQCZR6dFWCUdHRZsSUywVyqWofFsoZrtyVKOo0FQIoyzLZXDB44zTs2bhojr2D12hGfBkTJvap2rS2IqPHnp1H+PCjOMZWzLQm/Tu0VtGH2fPwrFSfkHx/oF96i5PCfO3mOqLiSZWyUiIiCNiYwWz0Jdh0LdYi4FhBbNUBNuZ96zRZitF71ahdy/8VPUTTsGds1Ey/TJb/kD+AqeguR0CQ8nxDvQx+QuQMhqXO/ieS09fWqTJFBdHYpKT7XaCpUTBZSFEsFgYx1uDHA/OAYrtxeFzapX3UYF20Rt5bA6PEsJsy5YtAWR49yT7RRvfdTo3oRnOTfiRKvyI/DA8Vcov8RZ6kQ5BHXV42fi6bkdfYqpVisLOFMlCnKnsRzA4wmL1Bo+hajEmbO58MZ7hYRQ9gIdL8yPlYiMR7fkJJcSOHp9Iv/n6448/xm7nwUfXHXTJn5AxVej5T89XvXOJDhbP/3vBg/LB+dLfGCpBfFLYvN3LxmNPn7tjstQxHmfnSU7SLluKNrWzGrOy2rUTLGmSRXdLuzPrpwIVt/z888EYGDocQbiFoerolsO4uzvKV/AFjP+MTF1n3YbImHndaOAdhjX6etzjonwFewg99sY46sSfVM2qQh13Pl7ldGWkV236AzThvvvo2fTUWXH0Z0lSoxLB+d44iC/iYwaIZMGJbLJuM04lLruEBVdoUDJpAmvkquJS0AW37ILbwwegQwuioyLI7ArGZlT+GB2mYxl+u44cebpqQy2Ja/zyOm3YUPW0eF4+uK1qyx7Wu6O4byslTn2B0MuX3S7f3SWzozEhO1fKNlUksJlOZIUpwhbNw/pYJV0o16CLPM3xFQ/sYzU5PCTDo3CcEteLGdL8ig3Yqorah9sQcfEs86gvnn5u64bTc80WADNq9Gj09f3jEio7TV07sBSZ7xwe1z9z9kDfFsP6T87TT2bLR3CK/IV4Rb62ZnHlY40xzreTJpVsHb59NMpwvhoz3TNz6LOrKfgZ26daBKAxEhPMFfHMjjYiv8tkZAapyR8LYdJxyNlLbrFyrFENxuPhB7ZcccAQ2MTUxj40+57lVvkpPNV7jm4hu+n1BzMX3+f4Fd36Hf07TqmdfHvVy7W1zviqKvrTCPksToH5Lffyyv2BxyqRrWMkg9kiRU2FKFlmhYTKdDzk3dOtxoNDS3ejNbWN3+Evd9PFJEreRZY0XhYzAz/iaYHVOrmeBjECYyPtUpzBKCUaDEJMJKlA4DFL452Q7aXJcVuYBLcFZfeQEaaXm0nuhaZRQ5jULq+dUYV6B0U2fbtqxsmZNcE28nN2cAouVjRXRMC2FQo657WeUfxSwQqQ6ixplGiVt9BJopU952trG/PV4HQoCC2exy8hRslKnDhesmGCzXFmZtOZwckob5dO+gP0rEJDYZYKX5X/jI5PozH0T+zhdanf/1SHxm3pcbzHlh7ortpa+lYP5Q86Em3SyZZ4db1zkC/TGhWVlGQ2E1tGhsuVlsYksSUhOiVdAA+40UzuOcNlcTG/SRiSxqpEJozwhDsmhR9lTZB4iMNUkIMKHB54jt06/+6RF/ptz6/r+od+F0bePf9W+udBowb5bZ1sTYKz92JsdnoX4QFVcMoXjaPPwe8q+XU8QH6dTN60SS5Bz9CJ6Bld3Op48KluiYwRDVIsEv0QucgRJ/jjoioiuV+Q/OBanY2vnIFZ7lZDWGuWsadwDxpNj7Dp1SwtkvUsFEMPo7H0cN2bVYerSDR3qPoD+/rmm7Bypd68wEa8R1D87pSI04xDYd8LK16dPxNLxYPqamKiLwa61SBKYIbww5NnYMuzpT/nBOUh12tq6BLlaWpqqkYHDEl4KTaKCfz0cX/qwTNNVvB47bMIRn9oGhKcfRTwycYImGzUh+YWxgu/jlDmE2izbOf+YKP4yp5FMsDhVqKt7CFbaOpiQ5tDcxXZbizXZie/boST0GiyWErWCGxYHodD5wK/YMXdtAGjQqM+QpNx+xr6OOQWahldzik0iVA2gU3E4FfOGRbw+/tZ6hlNHivpBp2NtpxEW+jsWvRcDXqW3l5Dx/ET2Mpp79bObbM6tdPdi4UTYpG4j9UH53gtkWZsICZzRIQo+I0iPymsro8gVITAYaIJ/boczaA7lqMpaMpyugPNWE6fPrEYLUFLltL1aMFSupquXozm8z5+krXl33y1OBnaE2eV4qKjJLgaxE8rnc/NPd/8jECznV1c1mPMmB49R4+RL5CvaJTyx2jy0ZgePUaP7tFjDH2MMUHn0fCyZ4/RII2mozms1hTNyzocIws7ThPiKZWfiHpehFNf0Rh8bZtJGb79D3v/JuKPgp1/c0hdcMvG4Qnu/Reoe/8bX/0M+Z5iDNjztbOvfU7ffApdkd9+Fc3h+/5zGb6w778ZaL9ZuCSO4meWWG0EG00MTROSmP5nY9UoSsbgaQ/dqnYhcm2GYA6k9lLozAZAm8qgpXFobp/zpqeeQuedxLRACallU94v9KeYuD9Y4R6xF4cWCec1MTEZ2QgVLP7mOPJT2iEcHcHj5G7XQ+BThdQG+pHXUI/LH9k/ukwPnpX/yigNZ9XvEfNV+B19KeD5SsE5IlISIvx6zIXOwRMl/PqWeqQcahDzNfwDA6ESVHYWlUFN9Da1P2sYL9QpsWcZ5iKCk+UmA4PfWaFEkXqOT1sJmA4jSR1QaEtNDSqqQXfTp2rof9XAjQVhJ4N3DeeQAkbyDMEEv+kVPsrZuCVnBRd4ZjTFSBEmv93lJ3YpgvgjVBoBdcCJMJhBEFQJwo/AydrpSByyefOQ6Wcvl27bVroI1eajsWlp+9Ly6WH41VyGEL9OhhSCqcAY+SR+r0b+EN0HnHCOdCOf8Xsj1leMYlAL50P3cMfoHnIOiSgGiZf32/eTbrhMPohepYO5XEZl4hKxE2sHnN1w+2wWp9EeJ0gZKXF+LyzNG9XrA3zupRu78doZVE9GDng/KdL2093a8imbxzDxsHXr0tsX5eUtuh2+7R837v7iEqu1pLj3sGHo/T5Dh/bhf6Kyd/c+e7psypSy08/ufff48YOzx0+YPWvi7bNm3T5x1uwJ42eDb0o2ViEiVDSMcpMA3tNN4VF1wQMQTMLA8e1a9D56//KPP+IR6GsaJ7/IfufRevlFVVtwSe+C85TmGMmsX7cKaQydwA+qjpDcD+kQ0kuT/4GPQZeARznFtzjThh3DYyDgRNWH6C2ixH20Q6zYiAgmcsygbjTrFNoTr3oPBcvwzGzRWlVPN9YZqmtrGyRDdYMEUQoYFCVKQarPClEKID4BNsOupVUd/dwGjA+LUXCa9iaV8jL0Gs3Hf6o7ih/C5bW1crVcyW/ujVcxswCVMYGrGeagkxC45QX2DOLA7CfO32tHBnSKXqZX6/AdlNmmDDke0UfxV8va24+3X/PoNQjfLb6o3phRpa8Wl57Zx/q49Dz2m2v6SeJlBnB1DcsDN3s3qv54YPW/QCjwuSHeVqcMydvJn+KVUhwVcCxxd8hVj03p0iR+zqiF7gkLYAKuHdpIQ3Ob+fNZzB1sNDT38pP0wuNPvHCk+vEX9pYNGnrHHUMHlcn388vcKZDwwhM8YUhZ2ZBBZWysprP2/CmsPX2FYUJvX3ZiQsLAHtLAbj4pKRka14k1rVuKv5ulooUPIt6ofDZAz6v7UDdpHWmrdW29n9CsfVuh1f5ZK1bMmvXII7OyO3bMzu7Uia5s9qJNKsgjquZVVFVVzKt6rGeXrj17du3Sk/Zp8Qr44g0mmH7glEn1xaAIg5mYiSHSXmHg3WlTF6v46jZhRjQIOBtq8uZ/hbbEofVX8r1iD3oeb5PLUX7jGQbPjxLF+8SRcHfZZwfNY4hgZgLIyanqvSPGIKDOuLUAF6PAJuZa7UOUKt+PH6Wf420okUE+wWqhs+MAy5NN18jPaowQNhmriEAmUWSWB2DJQCoLD0oMJQhOAN/ZyMFj6eyvOJwrdIETb6PnxR6NZ1C+4m95IMO0lGOaymAKUiRGJojbIolTmQYDNi4uPh/SiWCqG/AVuZzB+Rw/Kt+PUlEiWh+HtihVMIi3qm13CF5fXLRDkGIcUQhHikabFMHgWsSpRgAMAj6++LxyiBeAm1zuwhyu15nGdMWjH+gI9OJpPPA0OkH7n5ZrTocqUkhCF1yBr7z/GGV+4B6pvD5njMFiihWxKcqGsS3KJFowrJ/1jWed2LkzTOgUh5OoIL7A5jHx7szx2AqKGKlu46TS9atKtA4/k9KfcQf50s+BYz/Ll3iNA3mN8UK+L9lqirQYbaIlxiGKjhiLiCJxhYvfSVRManuzuuNh+tOidrerDi2hS1sisAL5a2pwXBgOX3PbWmAziKP0Nlg9szGhLR6V7agvfUtLaXpcn4Iflh/RUoQP9CnkzcCtWgq26VPEpkakpZBR+hRjn19PaSniY/oU00M3Vmgphvf1KebaX0q0FDZ30qVY6M8YUrAtPIX9rWJgeD88xfA+8tGTCjShWkspsFWrwJQUlBcqg/JC9bCUU7qUU/oUXBZKYYaLPuW6LuW6PoVUhlKYrtOliEk6rJO0FICrtQfxekI1Qa5QWgErFd4mltemx0+hkAJRSQlB1KiHbeGtCtFVrcugpIQwaUQsHev6ysRzJGIliwKgEXEwrcFhvXowCCcsHan1yAcVDhObFIqE+l7DX8WyGRaQquVoHNUMlTZbpNZjCYOlnDLSVmEEG1x2Dj2u4MP+w004d5HLhMq9dC6+4Q18Iq71No4Sj2pPIIlcDZSgcjxevoDKz+wyLPei8sAnXnyjcZRXXPvrSa941Kv/bHiRXPUGSvB4r3zhjHeXINhvgluOkCt0Zhq7SOjJtDacY2XYFhWQcIxbYt6sFQXNH9ai3d46pVFdvPJB3jJy0htIaNa8sGe0eKRxyW5o726SJkfshjbvRhvp9t1ndhkHe3fTuazt8kEv7sIJEEjwkpOcCg1rectv/vmieMTbuIQTh6R55QhOIbTRS7cDmbL+IyoNE0YKY4TbhYnCFOFu4R5hlnCfMF9YKCwVHhZWCmuER4VNwhMter7Nx8BoblLo3jqNb/a0Rv82+gQepQMyvY3HeH+QSd7AMt49eItX7s97C53z0ijeeUj00nrWk72809vos5s9vD97iUMbr/SCTu1FVgT294Ke7YVr5Dm9oHt7oe9p917Qx71QB0p7ndnVa1oPPJX1aeMxsJihiwPLvGQS73G5vxdv4QxAo7zoHOcHWu9FYp1393Rvr4ZrvKP/f/psjOMMIw71Nl5RuGaFN7BfYZ0arzxH4Z/vvbQ7ZyLUwUsp46Rp3h4guYYJr4kzxIuMj4SsFn5bdl1bufLaLv75mvYFPplMCpVLblkyPDSgDsquQ++9d+jZ8+fDoFWff1Z5zWM0CnOYdkuD1XyAmwnHvDIL8kW7y4nFHOV2arZHcWfBYL9Mv9+6FcW8/DKK2bqVfv/y2rNz555du+bPc+f+eY7+PeSrnvvnNcF0IawNcW22oSX6LXH/bVi2VkjRggz4OifCb8BCbk7ZMFjyN0rZMHg4mmH7e1rpbtlJsr1FFzHMOLfgMgbLrIOklVULgC5Ta4RctnBmek1MUrOFYZbUBmat0e3Qe3RdKyyEFragnrM16tla0A4tbEE5BozJVz1+7drikBybOy7OAYdNmqO5p4r2j3tn2KIdjua4Vr8TR/tX7UGnULZjx6LfronYgp7NDay2+LCaxlTtee8Qg4iy6ccMWnhLygCFasClmuHx2zXx45NuPsIMcKayGan2VKETDN6z59Gp5s3C0YDDCYbMTxyPsLqcrbaK1ZPD96htxhbdPIaTZphKqWb9U8YqlxOCyMB+daiuRH7ur5XeKlLOgMQh5ZhtlnpSNKzXcjIzc9iDdo0cNGikbIfP8M4z4s+MRjnNiBbes7uLvLnL7nvYbzynC+xjaDhEck9inZkWhvs2U5jWXci07SZY0QxN/ePbuJppautK5/+F97gso337DPacVH/TZPXLO+pv/A/1S+BJ9QuZpr3Z1jyPvEj9gp7W4AXUL2Jv/os9wS/as6/5i0+bv/ik+Ytnmr8IAg3juuTW+SCkm4rCaNGKnnp25tKlM9nTur6q5mns4XuaIb0F93h/U3cVtbEMdFOdtmbtvn1r4ek/enT/fmPG3FzHVSt51+6rHtNPKQAe+bqgx8hy8gnnUqGtxShctmrv3lWr9+xZXTJqVAl70GPKn6v2VvO/2aOTtXDDWihis40sHYxhbCr3g1JmL5P7jVc/1EDw8y4KvQi/9yoUKmXbpBDMp5opT+iEOWDBDWvdmGC2BD7D64hidfDZkEeDXqDAFY8O05XCZ2BWFup/zRrBZxQIhbYC5bRT90LFZ4bbaVTLD5MPPnue6eA5GhfJBz/lKhN0JsNCtbAcGh96FBpptQO++IyuZtUuYzVrdpka76FAU6Uc42rFLgNicM0LdWn6mdflUitRwbOKBD7XPKPpZyYLPYWAEfnLe4dAtJ7hUHdpWpxhAFq8MFi1Umm1UqFmEai5NDw1BBXc+Pw42NtClgUDmWFaOofPTQ/qrD4+w82yGLUczMavpMvoMjUnXYYqebg4fQkjlDCElwjL3zI3saFQfl1uYm4NtujWAw/c0AEXWubGbncQeCATIM7RigphfA+zN2irIacovnl7UeXRo0ebNfroUX6jKnh+w8Bm8w6fxWwUsLlC4DsGyiotggtBORaM/k7noU1foT/Qexag7vQsrWfccUbuIfc4jJNwknyV9wzaLh4l3/O1EYebHBKNh9B2rVeCaSYlNcvtcEOOwEn8l3FyVyVjNcoTEHvmkEq1h/lqE+teGJzN6+BrI23UADLAbXOzYldJZWBZCDyTWiH4JqUGyAm10D6w0cTrqiaVuhkNUSQSk0Jc+IRJK5MqrRgMls4mltdlO8/FjPBwy1SxWwrhOA8P9Og0erJgxw3iPbp54Lc4NGz+hg3zcRJ8yl/ilC6sF+Qv2OdrwbdX52+oLu4SShJ0ekrlBA0fh4KzglM1OqWhxVjjFO3zn1oZ7t/xva38/+n7tr6LSe3y8tqxJ3Cn+gVFN/8ir1O/kBnNM7d807J48IvYm/+6yUPr/zdvmj86i1Nbh+E9iIJ+awpDnKU9vCvx9WraB/4LbcHIKrB5kPpwGNVsDChPkBlUmIIQ0QKGfj1Iwamg0GNQn7a+N6uHDbtWv2stgH+sCbpfcFdOjwn4Trcp9ZNC5DEUekgBctkKclhN1XTQGfzwlwPPyAu//ZaDRIYz6LUvv2RNWneG9v62bVhw6bCwyOMoQIWkoFCh8MNn6KAvv5xxBp0OQsMP00H1DBw6DXUIQrQOnpFHuLYG6ZQhZAleZrMp8Is8hiIPKcoxGYpyDIUmpHwzhd4YCnIMvBVyds8H0F97PrD57rvvptd8PnzdJwfYdySzD0n38pWqAWhc1QCOGhnSs2dPeoOl+ny+5ct99P27lX/8i/Lu+QEDBoBERdtJpSI1kSpRNbmpS1NXhMOloV5ytin15B/QQrquNanXUj62ndMYzKmyezBba7lQK+K2TUmIgrVDk07Bp57/w2Uo9GmwpDIC1apovUIUrSxjWEaYm5RV64VSsFHSrDSHdtO6dXjD1ooec/gO2zK/rzzgGt5ygAgOKqEPqpEoJolrld5yqKWrYfuF2xEiqNBqZsUhXU6ej+VRUgHKp2gk+YvYOxzKp5q6QSNVLcSghHLyfCyPkqrYd1fFo+JnoNELERiYZVdJICDCXQNm7yxgehtDC9EiEpgDprxS5hArsx9SGF8oGyKHSICl9GJlblHKZCEk3hIQWTEAyq0trSYDryvLzasLjMf76BFeaTXuwz07a/UaoGYLYVUHtuM+8imOAD2CRqPRHJ6GhYHjgTRUGAFGy5MYQnIehBfEOqx4TsSMSAW1agYzhAO38UI42jQsbWFzTS23qlE0xOmQoIJpu62AWVhbW+azKTWg0cFcrCfQZHGB2AnyO3hPoMn4fboN6M1SblFSLFhpE5qMysEbmq6UgZczZGVxSqIfaLQCYMuWLUCdIAwDQCE2g0ocyAawqIi8W6DfV6KuYkdxBMcDoZXor+ynK0kNfM7STgv/Jp+IO1RuOU1S/00O0VylVB9WaiK3GaGLaC45hPqQVEh7n5X6l1IK+uVfgc9ZQYDL3oRqM/D6styEVylPQrv+otRbjXiE9lDdnGOgpQwBeTGaQp/maPzlL38ROEQNEwPHBTlUdFgOOg1wopEKxBBeGscYFOSqGcQgEvpVeGUsiDMar3KrNTylCIWM2WYpNtRmiltJ0UttjdeJTa2qWr7KssijcFLzXKxORbRDoioDW8Ji9TPeVGRWEofVVj4YX/p8vE7SVC3bDUlkJJeFzAoiykF2lybKJUMlzI/oMpnNgxhrL62vb3hS3Fof6Eveqm+cxeoBCKSaQTCABlGcrCpl8alAvSgoBVkt/vpfTyuFMEpSa9XKuIKHfpNEIVBfz2u0G3trlfF6hIsqpiYVT/Yw/BqWGSoBL1pWXy9AiyAf34fldh1SIPODkFACn6pHrAyqrJcPQkFxa6BvfT15q3EWB8DrIdVqeSFHK8c+JZJXz4RkZf3FeoP/19PoIC8FrdHVyC/uAw35Z1I9yZMPsgovGns3PFmPDvLaBIUCpDq0s6xcj2C4yQwvvunON95FpX9U2Da+bqRrD9Ed8Ay1qx4Izkmob13Dk5z4CjmJ0mscrtbvDI5DuaIB/Q5w6oOdrgAAlJQeJEoPhsqjYKt12ASEej0aCgC1P5HSMrw0yDUuOO/pYRxAWYfSZax2O8vLUWY1IgVjlt+icZmWWxTUvMAswJNIwS6YNwhZFBS4jBdVsDo8TCE82KTfznCwaxioteexXAatdshDqtV6BS0Ho0gQP6AF5GKdIfF8UCPPiyrVOg0afqiSVEN9HLNgDg2aRlVUKQFBeT4AVq9rAcsbGapZa4XCCPZg9foS+EvNhoUfdB3GA5ydEHMh9HXjX5V8+BTLFzw9AbkYS/M8DR1btFq94AO50HV0UFIyirkNHRk41qrrar06eDBA2NuLSo3h7fYEcZPQQQAK8AwXG//KM7doefBHq18rAiiohbBO4kUG5R3vdSZLAvUKERQ5x3g9xKv4FCuj9W0h54DrIBoVekBWJt+CbQzmVa6ZqO2E3FysKXDBkuwtAj2IvieYeZfHTdje0A/wMHlR2fQOyRPvDD+JgiqVHPivaC1dFPgOPhUacl7V5i8sF3AMY73Wez7E7WE9z2Doe0rjd7XnVR4Oy6Hy8EUNBuptUFonMEkF9FWaJChpnLO0NJIXlqbhSFQKsnRufrE8Ur3E5u9ZjHJVKuVCcl53K4k8+2njjk+HsZ8QHYP0FBk98xk9v9OXV2najLbaQ87CNh9d1PwTejzUTqTytNoYIpQwPO8N4hmkOeBKpqHIxr+iyFUoMhxF1myGXxnDr05frjXMyGw0ie6Tfw59Qs+gAyQvdKIJ8qMDWv8DrixNoS3/kZShAjgow0TtAw7DoOVTcvVWRrOgcZkCSRmpHmWcclkHtYHcZHX3VvVEkEuUypRhrIMTxq3KibQ2xzfjRQVpjWuD4zskkZpxOOTX8gLsoKQJy6fBtFA9PJ4vWssHl4518lUKx0IK6gvOE5pcVKUASAtFCkB+La9KI4tCay69XRIX3bJKcia5pdbooUp6LonqQ4B5gVbwKFSsM4UeymhlikHSj1dV9qo59bRGvSXQIbzXWuqcVntmq1ogXFpH63oTruDp5DW1S7oWSMFyTFYsFWKgHGwkeQoL8sU4u4sVXPXJOknajIRTc1imA+s+WVU/51STsFm+I6httHL27pkFBS6+CcXKzTmFhM2StPbTVVCOA6hnsKAc3LnDcEozBvQD33WCO3XYKHokKVgDOlC/6tO1+IB8x+YmVphLfrirp5RDGZnZmBeLi2O1ikd5JighoQO8bijJaq+H+XgTEo8a3CCFXHCBoQChAji15UEIXaQdV6GL6OIq2pF/0I5NR/A0PO2IvIt/yLvYn/IuHRQ20gwAwwXcuErMbTJUHGnYeCQ8B6uHVSHmrmr8a9MRnoFrowNiEtcbJs4BPKhDUBsdYFqL2cfoetM7+FRIE4EVyuyc6ywxTA0p9Of9pp4nZXlUNdSG1RWyQHRWF4cQsro0+0O1uoJ9HLKkNIvCr9k6yg1KrmmUGQM0RdD6WZdC8kIpQQ2EwrQ9SHYJBozAddABpoOW6nRIIZMM4NtHfXQ6iFOPU1BkFMxnFPwuXHcR3cOpCf/aVDoat6nUBSvmuoo+6JwDTOcsDeoOtSfBPZ1e56gogba53lTGMNJpmxa4tKJoFBzwqdCJYZZXVTTN9UOBag1LYAorxqvKB+qYMWlzEE3yMfS4waobjwYtD+Tg6SoPqDAMwXnIdQ7A4OflFT4MwzJ4rrlN2zlMoja3nTk0U6iEmlvNybXLdb120WCq8Jhy0UvnoEQEv1DqJXlFjkoh410K13CtyHSVP1WE25TpBTZd63QivQ1a2FqlReuYaFqOW4ohrdi6llNyS5rY16m5NvS+qw2933wWxGnpKdTppOuSVkzRj1K4VlK5J1LjLmW2pcyAwZbina/jRT5vtuhzq3m1nApXJqlwLSH+5ysCClDgzSDMVnSpq8UsJsSELUaN2xakZHDYtDYjbT4328qHkAYxaO8Vhuw9dZC1Ni9zhc/LtvLRptp8B8JsPpdq86kDsg07xtZ8xqo361parlBClRQhw7WV+WizWbgKVJm7whwkZOOqckUzcVubg9vC5uAXQ2NSmQPoZJAy2oNmrrZ+xfGPDMk6vobFW6EuY5G3An2VpSwEJTh+Fr4OpY5eSTmxUH8RhPJbbMrJ6lYhW7TVJ/hRpQ0uu2jsDWtAYXR36NcoCmz6tReV7YMLMEHm11ZMcHDtyKSXFJzOWvmgJORiFgdXi4LaRVlhLFDWiWB1sT4oFtuUzK3KgLBREWb56yxddDAkmlux/F3NLP/W11VsrcvD5lwaph1s4dpBm3y0oh9s4fqhhc2s9VhhUEe5QnoqiI9Sni9GcEYKW7/Q0bJQr7dU7NRSYdor1FsunQbTsNQqgH0Qs3hUvCGkCj4h15eckZYlRYtSdyG1R+eEaEuExR2b5nfExkn2WPWOdbzqO64TzulEuKdHe9BpiymNwAVVLXB1Jxw6oRnfByvfjCRgHbpj3ZqaJUPjj3VZfNeqL+94olt59pTOi/ov2C0NSA5ce+LkkPGFfdNu7TG8h3/y2JnZJo8rt3+PKRULPkC14+8bk5c7dvqaKd6HFucgT0nJY3kddnkGTXjkThpTOqCqfVb/vB49brt1SvnMsd0mOGOKJhbNm7z0tZmwYsPvZht2C3FCBkSHjY2XiDXWjxxWSXA6JKe5wpIqWdQ7q5ovBfA8og+erDoecehO7B1HfY7U/nj5bz/UHkH96Bt10+9/+OH72XO8dkfyt+98+M03H77zbfKO2uPHsXXz6gfXrHlw9WbAJrPpmrjZsEJIErLBo5g5zmizGd2SKyLGaBQgagWuEJIlwRKMXwneW4qVO6WGDIWw8SjHyGZUTAKAm1DEMMRhl2Mvnf/ii/MTh6LE5DuGrsX9j92ZRhvmfXH+nvvuu4c9TmS8/mVjIpoUX3pMPrG274JE+vxDn1+nDbV7tjz65JOPbtnDWEgYIPQSZzHRGCck+qJiBadkF6ZGgbMMoXNuQZL1PI9Uk5FdaBWKRMGmRNIFgeSBYMjTZqPEBiQgx+xpk/3ew95Ze7asRmZ0cEs1LaMNq7dIU+gHqPMUSVePV0j32d1CtuSyJBjjzEYh1p85NY3VBg6C1eiA6q5gfFhc6/jgVf8QApay2XPvLO3mnbEATv7dNy0nf9Cdc2fdMXk+w6Viz+Lp/oc7dc/YWn7gz38+MHNLRoH3Yf/0xYun0zdQv+mLNZzEa4JTiHk5MkaQTDEwBiD2XzZWWTtec6KOMS7b/W3l5kUzNlqjrBtnLNpc+W2vCciCincfPLd75crd5w7upmfoLwL3keQV+xmczKqNeRkRiOQoKIHF4JzfJGpD36J/ePED+AG5iuV+iPHtTO45weWLEDEWjMGIncWd4ewav+3OZp79z5xfaEenz8vfwz138aOGBc3Gd54vpXdaD8mWJLXvIKCsLkabyxnRhw1wJeRF+AB35PQhRSHfig5wFhxDTDFYDVUMZzL1PRCDXU7Vq92xY8kDpN0L+i/qPCW7vNuWsi9X3bW4y7H4oUtq1qzbMRSPWn9hwfzJPfvlujym7Jljp5SzgX5rWt/C8UNOotpedz4yYZBnV4e8x0pK6N9yFj/knbJm+tjcvDH3yT/OfG3p5HlsSMc4J3QbO7N8yq239eiR1z+rfdWAUtbS2WxEdYHoH0IBSDJnJyk+2ek3JEsGW0WMV4owu2P8gluNQA6O1vg4h6i8ECsXvDIUejRnkbxnC60e1fWrEr9Wf9R3j3wWZSAj2nk4yn7fmFVPPLFm+H1xUd+98l9vnx27zOvMXZM2avyIoaMnjHHiL1AZWkSt8pL6+xb/7b+ufLz4vjRUSj+lv9J/0n+kpxxLSUdfLb5v5cKFK+/j3qdvYe2oY+3IEPKErr60dHuFMVdye9MSjYbkWPYjRNqlSFsFGyJqU1TPdvHFocDqRVq3eDSM41H3wgKryeHOgfsKBflFKJt9O//K36sfXfrX08+9cWlo/4kzRpQgS9eT5ddow8ydtOTBe56cTv8dYXnD+e4zj77V4fmtb/5l/7ZbB8wtH/LoCFq39iT977fo1wvWogfG+e9EhZGRQ4C3Mxm3rmXcGgteIyJMMRISTNaKKEHxuW8vVjy+KmyjeI5gxsv+1/5L/gYvO1h3CFc63tp/4kJtY754vhHijA9oyhRnGdOF7kI/Jhmc8Qki6XlrWruC/IiI7DwpO8ImgSeTzoqfNxR0FO7Wx6bLyeL1xRdyhaR6zFCoYkjDBqeWj70TZz2xZ9bM7+jPi54blOB/enD1Wm8e3fXUE6+/P/+RghvIuXl13G3Lej61oWNXNHDOxoGB42Xbplav3bf+YDXes/4RnJK7cNZzO2KsJ63WvgO6dI6e03XT5tVrUXzOkLuHH9kJDjh6D+jktS/yjn/QP2xM+qTpD4yaDOdakoRYsdrwID+f2EXI9sVlZLrT0jI7JIgCeFKwVghRkuI6l3u0U1x3ZSlRnvlnVr690IqBX5324BnwoDtdlYOZ8XsdTsIgO/vJo/X0+lsXL77Fnp+ef7Pm8B0PJy/NG1s69p678m5vn9BtXiyajvqj0WgBXU+P0BN053bkbGACzUP/Rn9poNcuHt694099i+cNGV1aNjkmaqc9ClZW9C3JhLuVvhR3gidHSsyWEjyJiZ4E0mqLOnfurHhIaatROTY39+8a78nxuBweF9gXbbanJ8pb8NCyqtfn3L1+/fpJv9WQz/GSWdO253967hy6cWjcuOatyBDag7chd5aUmCkluBMT3Tdrw2+2gGns34f/QwvWr1ix4vdg/8Cs+5fvQzcu+P0gP1KJUVzI9UU8+FOIsVgcUfY4kVitZiz4jRDAyap5gwVH49wph0N15MIdQDgKYFgScFnx+i506ekP/meUedQHm2OGPjA2hhgxrqyUKV5Nv0EueQn6mP6MImg2UK0b937yR+73P1vIFwp9mUmJkjvJ39Et5XT0J+dIyY6KhHhJSPDbBSnK7jdGBd2ftBKdS8e+jHvRzZyfVO4+enz/nZUpnIHvuG3MHQkT6LFwByjFAwYU9xg4kHR+5sknnga2HT5o6OjMnV5Kwt2fHBw3YNC4cYMGjIO9fkwwOaL6P4FY2wxfQe+0pW1vJrhs+4kT23e8/vqO0okTS9lD8KtPbnvllW1Pvlo9c8zYmTPHjpkJs4lrJIpkthIPGEI2XstHxkVqQGCMrCznRzwn+FAyGQQ/Nli1eMA8niZ78G4oIx8NleSlEfoxGOtUqWeVWg/MJX6sUwJVQotD+ZRovKJEDH5dtEulCFGK1dWRmWRSYF/jdPhk0v8yw7Ke0wukP3cTx93zcHJxf48Q6phNYYgSlww1GennKIWcJCiD/s2IrPjYQQgCdlAuVT2RKha7G/wuJprNRgchRoPETOTodlI0gxoXGoDFnUMRT9wZmcw0LsxnehD0N+scwcSkPHLGq5cCMTn5F/ru7Xve3L4i5V///exrTcK/+/93lfxj3Isnhg1YsPylP6a86przIBqC/B+8+TV9Zezdc3D3u8aXfHvwnnn0hqBrqQM8P8diItlxjMkoRZow+7EIfovSZO5yVvMGiRzqKWel9TA5c6CfzPTvMJhRuumkCWXTD1F7+t9mZEVxu1CvXQhTuou+vYt+zcZXD0aPSu7NJZ6fVO7oS0mzSwlp/qgEKSvKn5klZdorxIhIbPIbscoampcyGOKKhxfuiaYtHzxMCPT4ar3zMHvw3Kr9+6vWPfPMusK+fQu7+3wNeDIZjPvTSrRMPoGW0Up5y3MbNj333KYNzx0c5YP7Tb5RdFlVFcQZB2/J4k7Wc6nca110khTt8EdHC0Y2+o1+waqzXTpzc9OgxP7KhzmEyW3jKqvAKJIME5tfZ+NplH6FEuhPKBpj2X3H2gdfyn6yI6W1a+9AR8Y4US6KZWJ0KP0z/UdOHxv9YNijD718Ruwzlu5ED5Rw/51zxKmGNOUMlw0h8CVxA5uxeQ4/Igxet/j5ymHoUXGGiPjK/s1udqNHR2ycMmXjCOVT0N3WiW15i63F7bQWN9DCb/vAvS7xaPAmSD0qIZdFiHEjWAgcyoGrLahEvdWDmBF6gRwSraFTfkfwPnQBzl8iFIEWkMFignJKkQyWT+E+aAE/xYnQYCQQv7g+CPc7xnM2Nlk7g87QHiy9nJXdr5QFkpVDUX5Yk9e5jBwiNQpc9heDiJbBQVHekoO8JaIgFBGEyNWr/GzrQXwKHaOlMsfrII4jZvIAX9fnV3mOHj2K4+CyDkJ/RJuJjTTyNOJw4LLXXnsNbUbdUCH9M5RNFV4jT7R1+z7YJyM2ht++R2gh+pIUkwPB3eqF6BT6kt8PCd0c025kubUOh6vX2iVt3rZaNps6r55NdCPEj1mrLFQLDCXfkG/c/Fx46CA3WtjGuXDU8sR36E6cWXcnTr0Mp92Da61e1KJeuKrdWr05PGN1+K2e0MiJ1MaOIcuWZQiOIPkGqqAb6UbdSHr4Ejp06RIdz1sXHFHJLcfUb/o8CB9n1ROHDp0IT/Pbb4W28FtQwZtNWDd6TMDncC9BG0P8epg2kNSbYrpRoc/Pxwb9dtq0adoA2cv+KeeNNW63qPyexYQ6UpleXocj9tIyWhbk/mr0Ayg4VlOIz00Kp5t4XYzbXxswoL/G8RXsH+AV4vrf9B2hGwNTFHpNbNN3hG5UaLci4JbLQjgyX12tjI/qakEMRDRdI58xfecWSoQhjCvu8OXnRzulzraeqSNNg6VsU3Fyn/QRg25FaFB6ssmQamM/JI+p6FIyQMogjgqfOgXMDzrztykTGZs+mB/MDpnmZlPyrOyWc1iHMoc1hJLTbS1SPTDDZSYjMxSUX5T2fvAc3YzS+k18/Vk+0y0Z2i1TTjw+6jDaCO9vvfP1Z1E5f989g70f+dxXPZc1PH7ikeGfHSQB/mvKfDQbDenjf33Y0y/AJPi2YUUPFNOKpc/RczX0OydPLD9+29Mv0FOQWLywO0+se43+cOc89EDdVHRX3xr+KSA5jp4l25iNxS0s0SSJKytgEShkYXmUlVv5Sl2doaZhIFhngalM2sr9WcmToYj1LmfnLlLnzllipJQl+rPSpKwqPSRdxHrwsf87w7XDdNilXCeGqH9RzMiLu3NZYULfBV1DYeq7Luib4H7szgtf4TGzc9rPvg1/xU3Ich52feXC/iuGqmHXB60YNGcJD7v+4TsDKod18mXsSux7y+A1A859xtpTER5hPdLIQ6iZpIjWI6yr98Tkijo0FneXzxJBjbB+1HDi6I0vIMbuGQaxB4OYI05vegiioonTGy+AIfnTYJ1lC3v3HXxJMbFR0aIl0sxrtUDsNhOr1sDrVWOyKIFf1RNqTPy5QAb+NLiOpNfhLwyfUNr4tRinYAEPyjPslrecnYPWBz5Ejwr417lqX0ONbp8DRcdKOHpVhTlSMovQ9YoH4Pe02NSeoNNXN1Qq96+rM4799TA8gTxupssTwFmvPIkb7OTXbaxVm4KtyvYlRESaLaLBJII7XDCV14RzhNIeYAe1LQ1T6+rwSH1Lfu0W1oYQv/LYfTrMdYBZC8Kx13hX418FbSZx5HubfibDDdUc4zSf3WgSDSIiDBSRgj6BVTwNKo7yvRp+EWGoCSQQQU+Sd4Jxq0p9XQhulw4THF+7dKndmgox+f809yzQUZTnzj/PfWXfm8dCQp4kmBDiJiEEMCwPQ6A8NYTwKAZ8sXNShQjKoVRtsUqpx0uFI2ipeBSVSz3qqY/SNKW0entyEa1SpNYG5HC93F71YK5WHslmuP//z+xmd2d2MzM7G9tm2YyZ+f/v/X/f93/zfyV8lbligtfHMsVFuWU2e8HYMVTXdXYPn9VhtZvFvji4URruYFVZCa9ijjaOdK0qwW2tYrtaAR+I7WTFkT2D9wSePig8uvPL1/wn31zys5//6c2dzL9d/Yv3hfmAHPu0eDTyBWF97rzfPi68VCOcBsVg4R9baXC6dFb3zsP/6QSThKNDzxwHrBn8eNyBG9uEn2cJm8sOPID6AQaJo9Qx+gRRTpWLvaOpctQ7GnX7g3/ZB/8yBveLQr0vrT6Xy5oVImjaYgr5SZJlrRbeul1sTlIbiUeGz4AvcxVJZYCR0oHa4QK1OeG3j8EffAAxNR39SOd6C8vEDz7fO/JB53zjrp1HqbdFaMM0hnai2OkaQiv27i6nKi+3ou6FVCXuYsjhTu+voztwr+YnFO74Be4FT4ZpcBcVTnmaduR09jAtKmb0OG2CgmO+B5/uISLdKJ34lHd8xjsaabs0SNw46HO51Xbo63bxQ5NwvDvEj8iDDdQxJpdwETXBfLuDt1tdnMlJW6MHeFqZEOLBQ9GzXlHmBU/RUI+Pt2+oL0d7e+g4S7b30mfm8IUz3wya/Seo7g19BbndD7of7PYW9g19thX1aYyZbazSbIw1OhmcY6TZBp9iFlw4M/BLmleYjYzixhF5qJsdk53D09keAlINmDu4PNLhpHJZkwc1qPd43LwnMi3UYHxmp1M8sTNyUDiQQ0DuGeqkuq/e23u1m6u6cObKO+x8DAnY4AZ3ISiG/pEAFYWh2oehyoIx+ORgEQc1mnDaQ4BlSNricvIuC23L4imLLYRM+0ORBqAiZKK5jRw5jt5ALvNBF7K+iKH2hZup7qFOcs/gnCt97EVwVGi6ms2Vgh0byNytZHaf8Lhb2EVmd4f7wnVCd19Mr3TcnR1lAdziGfkOirOq7c4+ePCzgT8x+35x9R129+fHP2e+M7D8F2zz1dWK3dmxBCDszdIp7WbIeTPgWXPkBPTt8ae0l4nEhxOF12Nq/5B6JbwwQmHB0hMjw3lYhiGXs5zZoTyrLZd2cmh8CwdCTo53bo9Q0uWO0LGhvomCXAXSLPXVFObri3/ZOsNz5X/D28UpOY939rYPnoWc7Z/ZOskHYwVLFIAq0lnV1twPeQutx0fQRhRjGzEx3Cx1U55MvA7XjvnELvIi8xTWXNx5leWQ9iY5//09CXsQc/770Hx6w+Au5uDAauYg+LTvkvtSn7Dn7FDw6NFYPfYRU4KFdjdcI9wOn9nipR00gxu1dMCFlXM4bLxDFPMTlVjGRf2SaIEpUYYlvAxRQ9SyK38WxoAdpnVXLl7eI2wB57kpkrYJF/su7HTv/LQP+pGSzkH+vgytfR/u0FIXHEdarBTNcibEZYioA2KaBVG1QVzt+ED+wPD/pd6RUW0Tv0nxeP4rh8Tvl/tAwA0CfcKi48Ki4d8lbRcly0UEguNcNpLKcrKs2YI63IoiBmkBp40IWUBq1iHOOyxokZkHvsDc38PkDnx6dbqo6jGCF5UBhLiSXhMOOw88Dp4jKZa2Oj2808qYLTxtNfPQcbMO6/WJGL2W5i4rq2eQ8S6D8Fw+Is4NSEj9o+zFy61gB1d6NTvGzHz8cV+4e8je19ctrlSnIQ9eR1J4bQNehyZeHi+uZXgdAnBNFmH1oO4GXiJk84ZIYLWhs5CtdMgq6WAj3pcrR/DYKbGCoIDKYZGVefaDbbO9zKcDYz0ztp56QbQv/c1tVU6yqqcK+Ca1zoQyuSt2Fg/B2zzJZylLmGVwfnQay55vOpNPI82DZL8E6b+7sIj3+AtDJU5XMe3nHJD7dqj/fo73J9d/NKMvCkGcFbh0BM8dhcbckmALRDj6Y2EbtgkxVMgjqoJjbNk+PsubzZvzCN4E8nhLbo6VRh0mMWwiVBELnwAVtvfQxm+/8r/xEHEe6ocoW74BXFKABVzqF15wCwehdboIrdN4bJ2qw49J1mkqtE70V+ckz4WSTktvDJYWE6GxxejQ9xyad+aEWMbhdObl8iaOd5hCjrztXUDai6nEbXoaI9EOVUuBBF4mdiG5Opl93xI+GEWA+jg8HqNE32Z66hIR6b3eS70XDgiHFJgO2J6eoYcjzdYhZq1Q4j/GEl89+E+xf/d+pAkHZZpQfXkOxvy5wZXYI3vt2iVy97BPz9AcSxPQoYdiI/PpQb2ZdAFy90Ahc26wmM4e/MxC8sfJzqHxwmZqggDdROrKLhjVjJVFNdAE8tC7EaOauPgwGqUBcXTQ2htuHZ5AjM9AVcI89NfnhOOgPT4mzLI57LQJBoRwYRFjQjp1TCjOGD6EQsIr6xMnVZgYUVSK42UUhdEqoigVzoVxzXswrkGd5KqJJcFaU2ElPz6ruMQ/xmK+bkLBRJuzCBRCucrLc5by2R6Pq8Pp6sLbNXAhRJt8w81V/O9Gnf533WINDQyqRNdHXZte8P5AC3VyaDx9TAxrtr5RdWjWRhztPC2FN8IxUEZ+/zjY9ZHwhVugwavDQc0HWXevfqArX5gbjXzoF8zg+/l7xRDn/tK9D0DLvx5ifAxijPZbJxGtwUYoPMWALyrmiyAP8sv4avN1ldk5LFNa4i+3WQvH5bu63C7e6eadDt75SJfPWsXbYUznifa+Rv+LhnViY5W4iE5OgoSYDq6agzViTDdAI/wZWgrrTl7dFRfWDQo356JWxDisG0s+JNFh6P/AW8N0ODW0MxrcLRf2i8Ed1jsxgovoHYrtFhCi5kWivgQ5gVEg1rw4j6gk0mPHZFHoVXP23cqETjXkReQFDe6iN4jeEOg8CzqRSzT0PnSHkM1dDe1ZFfYE8l0E7+oAVgtJc1l2PosLohP/uQ7OxIv+LaoF80fc/shShI0X50M9h33SYnTC7P9m8MwFc/jSZ72ryaqt5HX9hV7s2+cWEORX56RVyIM7TZaYPDneMblus8mX5ecJqP+A7fDRvC8r6IIhjtPakeUkZmAXzB/xxUT1bBB7Avhi+wSUMdAhKyti2N5v6F4Mi5WGTlh/M7DYHgSWa8TXndcI5JLlFvSJvn6hV3TJ6vbsce/ZA+mNaXIM0gTBNz1YOjJ8iDiqAczBXiPH9l59XQSQbYUA/vPSBVPuhTOXT59Z3Y+A64+QzVvYP3R6a92DkHoPxvDLByErZt0ujrYBAjprProDLY62YBa0aXazrcPm4G0RpsVCJvlwIAYudIY5YiBcM4WpV14VoeKWg7eELZfX/vaPpn0wLgLuGJiAs08QOt2dQhhK9gK4cvRKK8oXUh5gC14xgsRBKPMXsIcL/Q0rlCYbklwouA4ouXaWyaLNUHotpOTfxq7qDZLmMtK3O1wNtbOGfJ96GPdemkP2HAQ9x0FPn/C2W3i7L+Z3kYcRj2oMUR3MR07VGOhVAZ8/L5tkoWuVA6HJjTpXYt+JmIgxZlGOQCD0DDsSxVfOiq7FY5FIUsnlktwL7FVIciXqWh7RFCxzQ3XLc3V4gDU3x0J6TZLO+SBg2Qlahxk4HG4raV4USr8oVPOvvHPmAld1tbt3qCYCY6IuSgzF0a7kA+wTOXlta5wlqh68LeoNH4RURXUfxXkFvL2C95TwHnseRQUIvioAvVZLFfJaLXTIEuO14sK1WA8ZVQoXwE8TVSt25LSTJcXVJHr/j4t3nSet2ri0bXPH+rnz2qdNWTz7D7d2BB+eunTx+iVrNq/qbJt967qg3OOl8seWVpfmlpTkdu1qhr/Bn/x8UuRJKl+HqsUWV/REX4V4LiVagjUVC/kChg/M4SfO40sIvqGJbyiZGCioYJ1eD+/3htwuv9nh5M2OkN8ccZ0rRUdPxFsqIolBzyejQ8K31Dm4mhIpMx5TKDw9Hmc5jdruWnH7gpkdy757Q1vnqs1rVnS1rQg6qrPq8prz5y2/Ibh2ydz1HZvb5u1+uC64oq2LrIolTL+cgrE/DPeMx4dICn+fNg3+g+Xh2iy6gp0P16WyYLYJoJqIHUkcFLxHkeOJZGNqQc0jgz9B6y31HrnoVLjvKKgG/cfBnj7kWtzBVFy5gvhwbRb0F+ZDLW4IlnJ22kU7GN6xowvaXbMVeZ4ewHsoWxZJQ6vnNotmJKdRdAsqo0EyKBmel8KBcrhk6I1T2wZvwg4PS7af2kE/Jq7yewfOgGzSFIFkERMU/iy4UKe7cC44Qu2j7iD8KEozu3hzVjYRorNhnB5CqhvJx7gacVYR+fCIlfXoBT9Wkm6fL5y7+8fT7tty37Q76PHhR2edbLyn657GmjpwpPmXv5u+ZPrqgu59s9pnrV0eQB5iEEcbzxDXEzcQ84lg8DoiwFdPnEOEmubwuWNC43L5Ei8fnFUyjp7Q5Olip/DWLDY0IYuf4JICuKgE4obIIL7wFQojLobFzeBKIi3iJjdMJmojpbKxu46eQmpyg7NIqjO0RQtin+zZUJ5318J5u3fP23IC0AuffHLhxCl59eCGsFg6myeVyTqGhmbcMQfsE4tnQXa0UPa7fz589/dw4znUf27VnR8CINXSHo0UzQq5pL9gvhDAtbTIJ5oD7iJ76G4chRUF3ajfVk6HycF7Kd7kteWEbJJH5JdyvBBukRm1PmcR5oXPhyph4EBPLdv7+N5lh48Ljy17as+Tbb0nmC3kywHQVV5XfqIgIGyF30cKhGM4CxxeLfkuART5+X18mZUvdPKFZX4KTKrhJ0wKXR+YIPZTDE3g+Alx1sAtWUExlEYwRKweV46EhRL1H/rocXF1cN2ts6E6b7plyfrFS6c+HOy49Q+zF0+Z1j4PKvO9y5ZuXDUpIc4m8/NFnW3e1SVp7Nh8KibURtlFgPxRP4w8SoPZWWN5Vy5PlfFcEc9RrizaWxHyeVGteI7UuBFEpAMZ7GgjwSLJMEVkCI4aXHD/Q63TF06bdnNw0X3rGx89Lpy68ac/vXHqzYtuaW68/0cznsFdBquryxsbyysqcK/BiorJLZPR78hnqAJ3QYl/FJ/9Ni7ogYrOWVFXRrgUkgyM0cSGcpEIGvXdKvKIuXthzz73+T4QBPbn6O+HK6iPqHVg59AL5ABqfYn3BUyDfde+oFtw7ZpYvTiTWEisIG4nlgYDTTfwLU2h6TNmNXa08K0rO0KLZq3ka2d5ulxOnnCF3A7WNobgy4vGhCaidzhwdWC0f21jZWXcRXzNICpUBuUgsvsaexZ0kVIDtByQA9i4o0KTPTKULZU+Uo90PlkYXrWaumh/cTu8HrxFqoWkF0m/CDZ0K7+3iNq/Ojw260XqcelR+a3DrdPWrxxqu5/8+MEn0MWhZTe2tLW13Lgs8h2+Dt13+wry6S1DFQ/slVVXDldZAmL/tS/ppbjD6bigy2YlOCfPkV2si6ClF2CwgohvvtTXQafAVejyQrWorytzeVnw8GdCU4Cc+/vWduHiTtexPzjpKuHOd481rf3JrwrCd9+2Fc7QS28C/8S8jTvpFaxpam9vgh96E/6CH1TT0Uv+Xro74bRvSunZJtkYwneGR6OIXmCNjlaSfLyUY6eaQ1gwPBuNZqP+EZ1tUvx8RSrmpm6S5hp6b0QgUgLDyGCZpg6aZOfmJocMvJn4l1QwKsDKKsA6Nz1oi3RCHv0v2lAYlgGO6L3WJsPlZuOw0cuTdLmkoF6mJLjekhls0+apUVyW3zMKfFdnJVLgqsaAqGI70lcFXNOzLjqx04dUDDIZ4Vuye/RgplNWlWQ0A3xL2xrpZpz+FU47dzTxQmlVSIPy6a3NyTmgDQWjNMa4tTtN2VJn1TPAN23enibrndpqMwq4aPdPNUGvDegYYA2iu35N16nxSjJkCN11artmwo8Uw6iBOxo/qVmuUwYGI9t4zWvXyLApEE+V669CZtNaaTVArmDktfp4qqy8YV6+Htx08klBRTPAOY36kMLMa2TciNZGs+UZGXptQGuMJNLyKtTDrlGaFKTIEMrr1XjNpB/BzmuiriZaKljOESmn1YMcGbKUFjLt6Dcdj1cD7BrprEdmtXq0I0OfylikJDyNYI3J5aqUWFXQqQNKkzet1ScdETaV3FbgMi2DVV0e3EBdjyEdhTL8MdCo84WT+rypXFyEedxcKjPyGnM2anIYaeQr0sgCqiGSnFmGZYq0RzAyyHVmqzOR4UuGjUZpkWH2r5fh0x7xy7DTJ3mG5CuM2C1RA3Z4bxTYDGRW097t0IaCwXTPoJ2KIbveHVeNUqFyy1U/5YzIqI9mjk1VVGO0zGYoy5bUEzJGapNm2VJ5ZOnZYjVgxSiRIfnJDOyjKNkmnXQzUN9jrU9KT1ZHritVEK87M6syo6Axk6A/25HsHjWwacxrGpRpSpOradPayFxTMmunBn65XVGfa0qltaOwpxCrtYbk6TKxp6Bg8HRSzkidjyEdlWCBklfnpcocqMwYaMlajGhTZHOrzP/pzvhoshnJoRuVnM+INkEGXyqVS5bzicvdGV+HmRAV6Ml3pZ/bVtBgKgGWDOhMDOpkXL2rnurZBP8mub4bkamLmUxDJKc+WtIbJWnL1emLhgyrW9Gc9dHsJ2iB/VuoL9KKj26+/AtUGGn1UzThl1xRM1JjlFSPNcKvDWz9GRA18GqVrabEv4xSBiSpx5RZm6Wh0khVllFPLJ+xnKdxmTs5iMbk7fRZxOSQa6KyoVk77d6HCiuXkuzfVs5uGCgtVT6jmrNTAjFtuqWds1MkXGqfVkduKs13wozKLRlVaZOJ7EJma23S8f6My9oZU21jYFbMoHob7ZJrQNZOZ/5Fq3+Wbt4unfxLmlZHV9WNutydugyVUsJALe66KvhSWZPU67amvJ0mq5EcNlV0Si9rN6JNkEEnV7mUhMtUzk55XR7lnF1KlyVjOTtF1En0fnx0tuS+kcwHkrs86mvrVMZ5KYvr9ObsVMb3cslJZerSiH/Ve536qtOMzj3oq0NLs/4sQ7kH9ZGSrgqztKsv0smNZKL+QpWHaFTeJs0KjAzpvK4dCt32TsO+UubkJv0cwCjIjWFZAEPlJmkWIPkKrz23JJ924Hx0Mp35j7TznMMg6MBbt77EIC6e5aPs2aSOcxQP81GduUkdgcp5pqf6QJNHqMZtMDT6VeMhqIBuVKJf9e8dJn60VR9kOOenYZ3IZM5PawWCMXqTWIGQns7HVxxliHO6olDjOac/Dk2Hc8ni0Jh4X0/tSKztVx1Da803KSxrZNxcumQuBnQgnkBHfZ70vDry98N4ShU3+G4tVBseIzaG1bXGqfFLkq1x6VYUa/NnR6oo1nfWg8H+bCoghzllUD1xOnTVS2kF3U/rtIeM8iUDxz1kgncG1txoZJ3xteD6am5U1oIbRPsM1dxofd/S8LcgMmCzNGRs9VFYFT2VbKjumEa91ZTBpn8zWqPkjnLdjda6Q0Non3bljdo6AAPiSS21NyPEk7ppZ2j1jdrcvAGZjLR1XqECR/KY0869DTvS8mkj9i46V2Zyb6lAkGlcDCyjWGOoBkS5rYuD9duuMdSGgsF012npNJI9oqta5VWbnUsFlNzKaaebAVZOHYhp002jNqkkXGoLpyNvpJQrUI27Kjokn1suNKqikeRSo9mGjAybAoNUmQadlFOZa9QIVaTeRllqNNfbKE2qwdIYU2+TGoh4zJPpi/Z6mxFQV7krlareJp5r2s8AULWjlsTOpXs6q6Zd1JQJO+NPPNRXcZP5zMMoVNyMWubB0IobDXmHdN9jTzfTrKXi5lvLNOuouBkFnVddcaMjq6Xi/Yl066j1Sk76sX+aa4EBG/FGVPHrlJ6kvrH2PU1tO1zxb5XryX0YkO9U0mRdu9kadSdWVyVPR2lvMjWG8kBHfdZGJewp0zZa4rl0tD4TkbDhOp/BWDgNjdcQCyf37Y3I9sm1fdSzfSl0PYP6kqDpMdqpoQJCsQwhJezqx06Zv9AQi6aZPTE0Gk0amcrml0tssmg0JurXUz+S4J2pi6RTxvEKFFMQcTJuLl0yFwM6EOtoyIakVTfAKpP3dGL4dM+1io7dlHwOPVU3mmJN2dzG78GqqiXVBltG92C1wquRrqO6B6tKFrTB36QTak1v6I3oV8jgUweWljhMDTzqeC8zi4ZHYZrOAtar8wo7FBnIWhqYwdAfw6d8r/VfJfuj7oSU0c7+pH6XOmPRu2JF8mhH76nfYMpc9K5ci67Sp08Vvcf79Nr3JFXFIwbuSeqP39X0xNK+J2lw/K7OKzBgP1dT/J561dcVDamJ31OdFKwGd0Mi+NSrtq44WKPOKGg8joE05euGQ6NYfUewS2OlnXeRzyDnWnSuzORdUoEg49nIeKvkWUrEI9G7EsdSn8lhVRotJex6Mh8KsyTArixtqeN3ReAB2RM9xYJQpO3wegfnJnuS7cGnjBcUt+AJiuxRF7+nHDvVHBp2pJJWaqiZOwP7UWrgSRkHyWBLJw4ie/TQThXf1PFPtTdrTN5H/V5UBvM+ivnpBE4YrzNx+ek4DdWj7wpZTuP5picKMZxvI0QhGeJb0hhEzZuVqfKsMW9Wqo6gNGcdlM46IOMopUfmYt9nBeKKJX8rNPp83FuhoryPlNWXzZ30rVDt9XHJZS49H9wgeVftg4tc1FYVmVTeVXjgavY0UsXc8rfXMxBzK1l0Mo5SemQu1sYCUYLl+zHR5xP2Y9T4kqkiF/l5Ddr8YFU+vKIfLNJtJB9eRjdlHx6IEQHxI0Q3RsmPPhy9WaIavjcn/u7UmB2WYwFELOTzRp+OPnTtGthPfkwtYB4lWfJ3BAGvHxcWkMcJAV4/ia/j/k4A8CplozqYo5AzltcAxQNiUmXN9QDUUuBVYH/2CcpG/mpo0bVrxGH6HM0y+0mW+Qo+RwKCPk29ypzH+NnfcBMsbyOISYHKAHw6GbbXNSxe3DBl0SKhVPqFPo2/pkiX8BtCdJI+TZ7FI1teg8MSIkQx45DtsscRJkX0OfIAuxpjQoDIc1StB3xy9BQEH2wTHkL3fUifo26W3eeBGH94+NTRyH0k8Xd43zv4Pg5iyMBb6SiG8O4i+CGXP3H28FA3/Ed8DD8KgBs++TR8kiWcbzI0LU1S62rET3pKyjng7n+p/1RXl/jY+fNEwlMUw0hPBdyNGIucBjgdiZ451Y+eOn9exMYC+fACO5twEc5fZxE0T5jxYxE+1Nf6vNm1gcn4F0i5A6+8cvOChTe98gp9+tBTlZUr1q5dUVn51CHEUZ5+mWpm10C6ewhP0OKEHHWGCJs4XAILygP1dSXFPi/ZvvEHP9iIPh0dHfTLG++8cyP6bLrt9ttvQxrzOX2c+g92PpSRMUGnl+IJb8hkDTlMPOEIieOikT31dbWBnGwIJwazpHh8+Xg4uu/zkzfeOqUme/JLPeOWNyytmE8fXzJw/dicNdOX9OcVTFw/Hc0gyWU8Nz31Rb7D1Gr6XE8PotFtkLIcux9C4fy1yc4TplAO5iRCCqI0ub4OTseVTxaRs5M+H7g0ub547Lza2eM2zVyzsbS6lD5XWj+jrshfUHlf8QR+ec20ibXlZjT2F/QR8iu2TkGavlj5UoA+EpG6t6gHqEeZGUiW3gR0CBBY1dC95Q2T62udDPgmMP23J4XnqQeet4z7SnhoKnrqpLCaPHttPdYFluDZ5LogrI7VhQNCIXn82iZRq4mIViOoDiw8u1koBK3CS8iykEIhtY24Ho7vC1rhjQwImRjeBOd5V+R5PWJ0Qw4H54LW9NnW+wteEgqfaJnzZdmG0u0fwpn2C+2Umygk3IQ3aLETvNkeMrFmNzGjtnZYaBrqG3zFrM9bG2jgWPLRe37QHOzn791UMsk9UWi/fdX829zNZGH7knbrYTOyURHbwjKnsc2KWASW+Su+jmg6y3yEryMazTJ/Q9dRzWWZj/Hfo5rF/D3hug9fR3SIZc7g64gmsMxZPF5EilnmE3wdkTmWOYeuo1RkmQuijZVowjL/g2wlIbBV1MvcFE22siLRVrJVSraSrSLP4pFHspXDjyOt+RI+99/c+ASpLSvKAV8LYeDvY6sGBrCthJC/I7uvoYgBH/YBvxAW7yOJq2wVvRDfh2wlIJjQsK1sKOKK4Ifc/Qzw9w5tQv+ix+CDAFBw/F9zNYqWEtQCZCkpQL8E6LPbtrFVgBbCu3Yh+BFFfyU9l2grAbKVSLTD8KGzCEZA79olhBE+FWwxtYObQ2RBS0ATlhDBxVnLWtFW1iK6/ezAK3NuaJr9ygG2eN/OeUuXztu5D1tJ5n2qmevUbyWZ9zvXretEn00rV61aibD5K1tA/Y1bR+QhK5kNrWR2yJwVckJL7ky0ktkJZhLbyb+enLBi6rSmPGgoi9fMrGzxz2cLAgP5Xu+4NQWB/sIcR8H6AjQP4ubf2X/IbeWHFMtWSbaSuUrN5jYQXoid2WrK4i3QXGLiYiLV1zUge4nNZW0A4sixPtI7q7zwpo45s5f+8r8mz8xnrvqKJuYVOWsr7/vOc9MXj3e50biP0G9QS9jNov2DFgmZwHj795vA9HePCc/TbzxvKf5StH+XnyE2UMeYXGIp0RKsmWPlp/r4mgK+spSvz+NnOPkZ9ZU1U+ewYNFivmVRaMnSFg4OzYFQC8e3bO8iEN1c7sbGykp3TmOlRMaG+iaqob6aLCm2ww/6Zlnx204hkjYgAjeRtYECMv47Ozunvpoqrwc+9sW/bJ3hCa67dXZb56pNt7Tf07YiWPfjPfOW3duxfu6StcEbls8b2+yvs090BFe03dN+y6ZVnW03fHfZ2uCC21fcvWzu+o57ly3duGqSd/a2D56lujf0z2yd5ANVZH4+XGjgz7Rp8J/ckpJcu/8ZjhH/W/RnbD5VRTqr2pr7hz7bCun6CbRlWewGhfXnk5Wn7oKewi5hA7L0HEtTOVBjZPeRXMFXK1kaVAmnFGxp5JpkWYZA8eoO+jQdwF6RgxgDVw1LNm3hKcBTTpqYVCupEhw2mcsLjv/o1BPCQ5JVIu+IuHLYEbLITByU2iFonV+D1lmFzr52qKdl+Yrmnn+nT79xZMv37r73N68j2SOg1r+qTuufe+OtRXPnLnrrdaT17bNmtUOt/3/vLPotAAAAAQAAB3c1w/mIN9tfDzz1AAsIAAAAAADYz+FlAAAAANn85G7y4P0SBWgIsgAAAAYAAgAAAAAAAHicY2BkYGDf+U+BgYFlw6cHvzezZjAARZABGzcAod8GkwAAAHic7ZhdaFxFFMfnrmOVPmmJYuMHFhSCdLEPfpaotUYRu2goQYqIDbIPMRgJGmoqWBINmIcgJUgQWWgeQlkKwoJF+tCK0CJFRKQ2KG3F6IMvLRHa6jb0ruv/3PlP7tm79yZrTOlLAj/OzNwzZ87MnDkzG1sxI7Zi8teQB8g06M1gWul4uVpkjTkBnqQs09fyf0D77hlN1Ldat76fNFP37YVrxHbi696nAuesGc1ggvrdKSRt/B82g7YUxP+NLTCVIM+98es7yvasWFgNbiMSG+MZiN4e1SdLbyV0LeGb+IRYrx+zrZ2Zk4n6IYVu35XBoI3PibEN56a+dZk1Wk3a1NjiVzKGSxl0kc4UsvqsBPHhuRT6waMtkJbrLnLufo1L/LbXVqpHbOXSzU7+/YetBHeBHNhk3Znxdg4r7kmMcSfYZhvzmT/H91uX73zemFB+dds4Hn1u8v1GVD/RN6w/TDnKfrfaxvzbRrvPu3I9pH/ers8PeqwyffO5oZdzzFNP6u85vaAzxnTYxtiSub5j0++Gp+i334OyKr+i9i/PvfZzHySfg6Nch0Ha28W9FBtjtvFsit5bYB/LYvNBNa6Pdz9WmX11nPh4KnENZH4v2cZ4Fd3dlINsE7nTxmfd++Hj6bAqT9k4NrwPeRvfkUXbGDdT9NvvobrP6vVsItsbbXzfibyPfh0EFTXvD1h+hvNZBz5We6VzlejeCF4Gj3M9+9kuvMbvnnF+L3Bcvx9D3Dfx533r4lf2dA/Xc4hlyADnNcB4wRMAaxFso0R+Cl6n7Lp+etGcdxJf9m8O1IMTYDKW5hGWT3C9P2N9C2PnSzDMWOhzBOshv4WU+PoecsjVzS/gR+oKkjs7CNsCGeMr6+40yOCgawt8HIqtC26MoB38bithn8uRgpR9XcsQ6xEiHmtvQuJ8hj+jjDhbuAwd2LsCH2rDze1Sj5hD+7j7dgW+hRbfeyDPEdgOb7eVq8hp1YKTQjR2T+xXKlsc1RGWsV/VM7Hvi3thFD5P+3eKxKTPu5IH5K38onW5spdrbbiGA9yzQsKm4fmdoRywcS4y7oxG+97v9qou572LvhUVexP1Sfqwj/tXTPAdpX8XiV95nucpnt8Sz1jRxaS5F8j76A3wNef3NNuOpcxrBeSQw217XM7SSe2/g+iyIuqX0t6E4ZrvyLBPW4v2lppTd1wONifKrfhCRL/lPv6N/xuRMYcpOzPqRrV3KvkhOE75Q0p9GV8kXgXJG77s67otqxzVxxy6LWqfb26XNpPSJ6knd3ekI/rb0/WXs5GF2Fz0Ra+t93m+WbfBr3nl13zzPJezsaRv7SltWes7lj1Ow36NZej4+UuOkbfFswrJc/4thvvBPKZ02hV3g4f4Bpc76BZw2WHOsb9I+c3kf4frM3kauut4dyFfB32uHp1Beb8eABgjeFf1S4tlbfe0sxXZUP1DjFHDfVRDPq29Db6xlb+gt4D3ysKn/Dbg9ORu1PdlVOb9lmyv9qh7Ve7KF1J0jtDm/pgQ639xzt2FVdwv4Re4R9F+aY71OyD74u+R3f2uz6KNQsLuDOsz/M5vYkvKMvfwVd6xyFdXZW9KXLeTa6yxxvUidzRGtyW/L/VtpX2j3xOTlPLb8pAxgQGnwCYwi8pZyA1kPehH23kgukVwARxnnwPG5HKQJfebJzhlo//RBLOwfRZyA5G8L2/n8zb6PZmTe6QEm/84O+ZPjr0AeQPbOzj2T2CWY3+EPDcN+SvGvcmNE401Dp2azAVl/P0LwMzxwwAAAAAAHwBNAF8AcQCMAKcAwgDeAPkBCwEnAUIBXgF5AZQBpwG6AcwB3gHwAjYCSQJdAm8CqgK8AwMDOANKA1wDbgOAA5IDuAPwBAIECgQxBEMEVQRnBHkElQSwBMwE5wUCBRUFJwU6BUwFXgVwBbIFxAXmBigGOgZMBl4GcQaDBqgG4gb0BxcHVQdnB3kHiweeB7AHwwfVB+cH+Qg4CEoIdwiKCL0I0AjnCPoJIAkzCUcJdQmjCccJ2QnrCf4KMwpoCnoKpgq4CsoK3Ar4CxMLLwtKC2ULeAuLC50LrwvCC9QL5wv5DAsMHQwwDEIMigzcDO4NAA1SDYMNtw31DjEOQw5VDmgOsg7EDtYO6A76Dw0PWA+TD68P3Q/vEAEQFBA5EEsQXRBvEIIQlRCnELkQ6xD9ERARIhE0EUYRWRFrEa4RwRHTEfISIBIyEkQSVxJpEpUSuRLLEt0S8BMDExUTJxM5E0sTbRN/E5EToxO/E9ET4xP1FAcUGRRuFIAUkhStFMgU4xT+FRkVKxVHFWIVfhWaFbUVyBXbFe0V/xYRFn0WkBatFr8XPBdOF4sXxRfXF+kX+xgNGB8YYRjAGQwZXBmfGbEZwxnVGecaAxoeGjoaVhpxGoQalhqpGrsazRrfGzobTBuPG8IcExwlHDccSRxbHG0cmhzXHOodIR1BHVMdZR13HYodnR2vHcEeFB4mHnkeix7IHu8fAh81H0gfeh+kH7Yf7iABIBUgVSCYIMUg1yEQISIhNSFxIa4hwCH0IgYiGCIqIkYiYSJ9IpkitCLHItoi7CL+IxIjJCM3I0kjWyNtI4AjkiPiJDkkSyRdJL4lACVCJYQlvCXOJeAl9CZBJlMmZSZ3JokmnCcGJzInaCetJ/AoAigVKEsoXShvKIEolCinKLkoyykQKSIpNSlIKVspbSmAKZIp4in1KgcqJypWKmgqeiqNKp8qyir+KxArIis1K0grWitsK34rkCuyK8Qr1ivoLDEsdCyGLJgsqiy8LM4s1i2yLtAvTS/MMBMwRDBxMHkwsTC5MNEw4zEAMTwxRDFWMWkx+TJNMnEygzKVMuoy/DMlMy0zNTM9M1ozYjNqM3IznjOwM/Qz/DQlNEg0azSXNLs07jUkNV01nzXeNeY2IzZjNms2fjaGNrU3ATdRN4M3rDhBOJo4yDjQOQM5OTlrOZM5mzmjObU57Tn/OjM6UjqfOqc68js5O1E7YzuAO7c7vzvRO+Q8cDzCPOc8+T0LPV49cD2YPcQ96T3xPg4+Fj4ePjo+Qj5UPr0+xT7sPw8/Mj9eP4M/sz/mQBxAXkCdQKVA6EEnQS9BQkFKQYhBz0IgQm1ClkMoQ35DrEPRRAREOERpRHFEeUSBRJNE1ETmRTFFhUWNRiBGdkZ+RolGlEbnRwZHDkcWRz9HgkfNSAVIQUiGSN1I5UjtSPVJGEkgSShJMEloSXBJeEmASYhJkEm6ScJJyknSSfxKBEoMShRKHEpSSo9KyUr9SzBLXUuUS8RMD0wiTDVMdEy6TQtNQ02XTdpOGU5HTnlOok7UTxpPVk+CT9hP4FAVUE5Qk1DOUPpRKVFvUbpR8VIzUkVSWFJsUn5SkVKlUrdSyVLbUu1S/1M9U3xTolPXVCVUUFSRVNZU9VVPVZRV0FXZVeJV61X0Vf1WBlYPVhhWIVYqVjNWPFZFVk5WV1ZgVmlWclZ7VoRWjFaUVpxWpFasVrRWvFbEVsxW1FcFVyhXVVefV8hYAVg9WFpYpVjhWPdZTlmhWhlajlsrW7ZcJVxBXFVchlyvXL9c6F0RXVtdpV2uXdBeAV4OXmBecl6GXpteyl74X1Vfsl/PX+xgDWAtYDVgPWBQYGNga2B9YIZgj2CcYKlgtmDLYOFg7GElYVthfmGgYa1hwmHdYgNiN2JVYoli0GL6Yzpjc2PbZINkrGUYZUBlTWVeZaNl8GX9Zi9mPGZNZrdm/mdPZ59nq2e4Z8hoAWhDaE9oW2hoaMto12jnaPNo/2mBaipqmGqlarFrRWtSa79sG2wnbFRskGzBbM5s32z7bQ5tF20fbR9tH20fbX9tzm4ebp9u+W9jb75wGnBgcKRw1HEucZRx1nIxcoly1HMHc1Nzm3P+dEJ0rXTvdR11YXWIdcl2LHZrdnN2e3aidqp2zHbwdwd3LHc/d213qHfGd/14JHhLeHt4rnjWeON5EnkpeUd5nHnBefJ5+noCeiV6T3pyenp6hXqcewR7kXu5e+R8Dnw3fHF8qnztfPp9B30UfSF9Ln07fUh9VX1ifW99fH2JfZZ9o32wfb19yn3YfeZ9834Bfg5+Hn4yfkJ+U35hfnd+h37Vf2iAj4CrgNeBDYEzgVmBgIGmgbmBzYH4gh2CUoKHgr2C84M1g/iEM4SIhK6Ey4T9hR6FQIVbhXaFiYWcha+FwoXSheuGAoYZhjCGR4Zoho+GnYazhsGGzobjhviHBYcah0yHaIgsiE6IcIi1iNuJA4lciWqJgImViaqJvYnRie6KDIosikyKbIqBio+KpIqyir+KzIrZiueK+4sPiySLOYtdi3GLhIuRi5+Ls4vIi9aL44vxi/+MFIwojD2MUoxfjGyMeYyFjJiMq4y/jNKM840NjSeNO41bjXSNjo2ijc6N7o4PjieOPY5TjmaOd46Njp6OtI7NjuGO8o8JjxqPMY9Lj2WPe4+Rj6aPvI/Kj96P75AAkA6QHJAukE6QdJCCkJ6QvJDKkN6Q75ECkRORIZE7kU+RY5F+kZSRqZHCkdiR7pIIkiSSQJJckniSlJK3ksiS2JLrkwCTDpMhkzKTQ5NQk12TcJOMk6+TvJPVk/GT/5QSlCSUNJRElFKUa5R+lJGUrJTClNiU8ZUHlR2VN5VTlWqVf5WUla2VwJXWleaV/JYNlieWOpZQlmCWdpaHlqCWtJbJluyXBZcflziXTJdgl3qXjpeil8WX3Zf1mGqYsZkFmTmZg5mvmcaZ5Zpamr6bHZtFm7icHZyAnN6dG52E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") format("woff2");}';"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var w={exports:{}},y={},k=Object.getOwnPropertySymbols,x=Object.prototype.hasOwnProperty,E=Object.prototype.propertyIsEnumerable;function B(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}var S=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map((function(e){return t[e]}));if("0123456789"!==r.join(""))return!1;var a={};return"abcdefghijklmnopqrst".split("").forEach((function(e){a[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},a)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,r,a=B(e),i=1;i=b},a=function(){},e.unstable_forceFrameRate=function(e){0>e||125>>1,a=e[r];if(!(void 0!==a&&0E(o,n))void 0!==s&&0>E(s,o)?(e[r]=s,e[l]=n,r=l):(e[r]=o,e[i]=n,r=i);else{if(!(void 0!==s&&0>E(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function E(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var B=[],S=[],C=1,T=null,I=3,L=!1,F=!1,M=!1;function z(e){for(var t=k(S);null!==t;){if(null===t.callback)x(S);else{if(!(t.startTime<=e))break;x(S),t.sortIndex=t.expirationTime,y(B,t)}t=k(S)}}function P(e){if(M=!1,z(e),!F)if(null!==k(B))F=!0,t(D);else{var r=k(S);null!==r&&n(P,r.startTime-e)}}function D(t,a){F=!1,M&&(M=!1,r()),L=!0;var i=I;try{for(z(a),T=k(B);null!==T&&(!(T.expirationTime>a)||t&&!e.unstable_shouldYield());){var o=T.callback;if("function"==typeof o){T.callback=null,I=T.priorityLevel;var l=o(T.expirationTime<=a);a=e.unstable_now(),"function"==typeof l?T.callback=l:T===k(B)&&x(B),z(a)}else x(B);T=k(B)}if(null!==T)var s=!0;else{var A=k(S);null!==A&&n(P,A.startTime-a),s=!1}return s}finally{T=null,I=i,L=!1}}var U=a;e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_continueExecution=function(){F||L||(F=!0,t(D))},e.unstable_getCurrentPriorityLevel=function(){return I},e.unstable_getFirstCallbackNode=function(){return k(B)},e.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=U,e.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},e.unstable_scheduleCallback=function(a,i,o){var l=e.unstable_now();switch(o="object"==typeof o&&null!==o&&"number"==typeof(o=o.delay)&&0l?(a.sortIndex=o,y(S,a),null===k(B)&&a===k(S)&&(M?r():M=!0,n(P,o-l))):(a.sortIndex=s,y(B,a),F||L||(F=!0,t(D))),a},e.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}}(oe),ie.exports=oe; + */!function(e){var t,n,r,a;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;e.unstable_now=function(){return i.now()}}else{var o=Date,l=o.now();e.unstable_now=function(){return o.now()-l}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var s=null,A=null,c=function(){if(null!==s)try{var t=e.unstable_now();s(!0,t),s=null}catch(e){throw setTimeout(c,0),e}};t=function(e){null!==s?setTimeout(t,0,e):(s=e,setTimeout(c,0))},n=function(e,t){A=setTimeout(e,t)},r=function(){clearTimeout(A)},e.unstable_shouldYield=function(){return!1},a=e.unstable_forceFrameRate=function(){}}else{var u=window.setTimeout,d=window.clearTimeout;if("undefined"!=typeof console){var p=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof p&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var h=!1,f=null,g=-1,m=5,b=0;e.unstable_shouldYield=function(){return e.unstable_now()>=b},a=function(){},e.unstable_forceFrameRate=function(e){0>e||125>>1,a=e[r];if(!(void 0!==a&&0E(o,n))void 0!==s&&0>E(s,o)?(e[r]=s,e[l]=n,r=l):(e[r]=o,e[i]=n,r=i);else{if(!(void 0!==s&&0>E(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function E(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var B=[],S=[],C=1,T=null,I=3,L=!1,F=!1,z=!1;function M(e){for(var t=k(S);null!==t;){if(null===t.callback)x(S);else{if(!(t.startTime<=e))break;x(S),t.sortIndex=t.expirationTime,y(B,t)}t=k(S)}}function P(e){if(z=!1,M(e),!F)if(null!==k(B))F=!0,t(D);else{var r=k(S);null!==r&&n(P,r.startTime-e)}}function D(t,a){F=!1,z&&(z=!1,r()),L=!0;var i=I;try{for(M(a),T=k(B);null!==T&&(!(T.expirationTime>a)||t&&!e.unstable_shouldYield());){var o=T.callback;if("function"==typeof o){T.callback=null,I=T.priorityLevel;var l=o(T.expirationTime<=a);a=e.unstable_now(),"function"==typeof l?T.callback=l:T===k(B)&&x(B),M(a)}else x(B);T=k(B)}if(null!==T)var s=!0;else{var A=k(S);null!==A&&n(P,A.startTime-a),s=!1}return s}finally{T=null,I=i,L=!1}}var U=a;e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_continueExecution=function(){F||L||(F=!0,t(D))},e.unstable_getCurrentPriorityLevel=function(){return I},e.unstable_getFirstCallbackNode=function(){return k(B)},e.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=U,e.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},e.unstable_scheduleCallback=function(a,i,o){var l=e.unstable_now();switch(o="object"==typeof o&&null!==o&&"number"==typeof(o=o.delay)&&0l?(a.sortIndex=o,y(S,a),null===k(B)&&a===k(S)&&(z?r():z=!0,n(P,o-l))):(a.sortIndex=s,y(B,a),F||L||(F=!0,t(D))),a},e.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}}(oe),ie.exports=oe; /** @license React v17.0.2 * react-dom.production.min.js * @@ -23,7 +23,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -var le=w.exports,se=S,Ae=ie.exports;function ce(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n